aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/groff/BUG-REPORT55
-rw-r--r--contrib/groff/COPYING340
-rw-r--r--contrib/groff/ChangeLog5253
-rw-r--r--contrib/groff/ChangeLog.1156147
-rw-r--r--contrib/groff/ChangeLog.1161388
-rw-r--r--contrib/groff/ChangeLog.1172190
-rw-r--r--contrib/groff/ChangeLog.1183794
-rw-r--r--contrib/groff/FDL397
-rw-r--r--contrib/groff/FREEBSD-Xlist3
-rw-r--r--contrib/groff/FREEBSD-upgrade31
-rw-r--r--contrib/groff/INSTALL50
-rw-r--r--contrib/groff/INSTALL.gen231
-rw-r--r--contrib/groff/LICENSE21
-rw-r--r--contrib/groff/MANIFEST164
-rw-r--r--contrib/groff/MORE.STUFF198
-rw-r--r--contrib/groff/Makefile25
-rw-r--r--contrib/groff/Makefile.ccpg33
-rw-r--r--contrib/groff/Makefile.comm304
-rw-r--r--contrib/groff/Makefile.cpg27
-rw-r--r--contrib/groff/Makefile.dev4
-rw-r--r--contrib/groff/Makefile.in776
-rw-r--r--contrib/groff/Makefile.init25
-rw-r--r--contrib/groff/Makefile.lib20
-rw-r--r--contrib/groff/Makefile.man5
-rw-r--r--contrib/groff/Makefile.sub35
-rw-r--r--contrib/groff/NEWS2307
-rw-r--r--contrib/groff/PROBLEMS916
-rw-r--r--contrib/groff/PROJECTS14
-rw-r--r--contrib/groff/README134
-rw-r--r--contrib/groff/README.MinGW277
-rw-r--r--contrib/groff/REVISION1
-rw-r--r--contrib/groff/TODO25
-rw-r--r--contrib/groff/VERSION1
-rw-r--r--contrib/groff/aclocal.m41152
-rwxr-xr-xcontrib/groff/configure11663
-rw-r--r--contrib/groff/configure.ac126
-rw-r--r--contrib/groff/contrib/eqn2graph/Makefile.sub19
-rw-r--r--contrib/groff/contrib/eqn2graph/eqn2graph.man115
-rw-r--r--contrib/groff/contrib/eqn2graph/eqn2graph.sh91
-rw-r--r--contrib/groff/contrib/gdiffmk/ChangeLog63
-rw-r--r--contrib/groff/contrib/gdiffmk/Makefile.sub47
-rw-r--r--contrib/groff/contrib/gdiffmk/README46
-rw-r--r--contrib/groff/contrib/gdiffmk/gdiffmk.man281
-rw-r--r--contrib/groff/contrib/gdiffmk/gdiffmk.sh346
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/file111
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/file211
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/runtests.in98
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline17
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline1026
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline617
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline72
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline826
-rw-r--r--contrib/groff/contrib/gdiffmk/tests/test_baseline926
-rw-r--r--contrib/groff/contrib/grap2graph/Makefile.sub19
-rw-r--r--contrib/groff/contrib/grap2graph/grap2graph.man105
-rw-r--r--contrib/groff/contrib/grap2graph/grap2graph.sh85
-rw-r--r--contrib/groff/contrib/groffer/ChangeLog1546
-rw-r--r--contrib/groff/contrib/groffer/Makefile.sub60
-rw-r--r--contrib/groff/contrib/groffer/README104
-rw-r--r--contrib/groff/contrib/groffer/README_SH268
-rw-r--r--contrib/groff/contrib/groffer/TODO58
-rw-r--r--contrib/groff/contrib/groffer/groffer.man4018
-rw-r--r--contrib/groff/contrib/groffer/groffer.sh299
-rw-r--r--contrib/groff/contrib/groffer/groffer2.sh5854
-rw-r--r--contrib/groff/contrib/mm/ChangeLog679
-rw-r--r--contrib/groff/contrib/mm/Makefile.sim66
-rw-r--r--contrib/groff/contrib/mm/Makefile.sub62
-rw-r--r--contrib/groff/contrib/mm/NOTES105
-rw-r--r--contrib/groff/contrib/mm/README31
-rw-r--r--contrib/groff/contrib/mm/examples/APP352
-rw-r--r--contrib/groff/contrib/mm/examples/B1B291
-rw-r--r--contrib/groff/contrib/mm/examples/COVER235
-rw-r--r--contrib/groff/contrib/mm/examples/IND4191
-rw-r--r--contrib/groff/contrib/mm/examples/LT1058
-rw-r--r--contrib/groff/contrib/mm/examples/LT.se1062
-rw-r--r--contrib/groff/contrib/mm/examples/ML169
-rw-r--r--contrib/groff/contrib/mm/examples/MOVE175
-rw-r--r--contrib/groff/contrib/mm/examples/MUL535
-rw-r--r--contrib/groff/contrib/mm/examples/NCOL196
-rw-r--r--contrib/groff/contrib/mm/examples/ND17
-rw-r--r--contrib/groff/contrib/mm/examples/README32
-rw-r--r--contrib/groff/contrib/mm/examples/References975
-rw-r--r--contrib/groff/contrib/mm/examples/SETR109
-rw-r--r--contrib/groff/contrib/mm/groff_mm.man2104
-rw-r--r--contrib/groff/contrib/mm/groff_mmse.man86
-rw-r--r--contrib/groff/contrib/mm/m.tmac3536
-rw-r--r--contrib/groff/contrib/mm/mm.tmac3
-rw-r--r--contrib/groff/contrib/mm/mm/0.MT146
-rw-r--r--contrib/groff/contrib/mm/mm/4.MT82
-rw-r--r--contrib/groff/contrib/mm/mm/5.MT34
-rw-r--r--contrib/groff/contrib/mm/mm/ms.cov84
-rw-r--r--contrib/groff/contrib/mm/mm/se_ms.cov3
-rw-r--r--contrib/groff/contrib/mm/mmroff.man49
-rwxr-xr-xcontrib/groff/contrib/mm/mmroff.pl137
-rw-r--r--contrib/groff/contrib/mm/mmse.tmac3
-rw-r--r--contrib/groff/contrib/mm/mse.tmac184
-rw-r--r--contrib/groff/contrib/mom/BUGS317
-rw-r--r--contrib/groff/contrib/mom/ChangeLog812
-rw-r--r--contrib/groff/contrib/mom/Makefile.sub138
-rw-r--r--contrib/groff/contrib/mom/NEWS446
-rw-r--r--contrib/groff/contrib/mom/TODO25
-rw-r--r--contrib/groff/contrib/mom/copyright24
-rw-r--r--contrib/groff/contrib/mom/examples/README.txt115
-rw-r--r--contrib/groff/contrib/mom/examples/elvis_syntax90
-rw-r--r--contrib/groff/contrib/mom/examples/elvis_syntax.new106
-rw-r--r--contrib/groff/contrib/mom/examples/letter.mom34
-rw-r--r--contrib/groff/contrib/mom/examples/penguin.ps461
-rw-r--r--contrib/groff/contrib/mom/examples/sample_docs.mom574
-rw-r--r--contrib/groff/contrib/mom/examples/typesetting.mom673
-rw-r--r--contrib/groff/contrib/mom/groff_mom.man101
-rw-r--r--contrib/groff/contrib/mom/mom.tmac3
-rw-r--r--contrib/groff/contrib/mom/momdoc/appendices.html692
-rw-r--r--contrib/groff/contrib/mom/momdoc/color.html338
-rw-r--r--contrib/groff/contrib/mom/momdoc/cover.html512
-rw-r--r--contrib/groff/contrib/mom/momdoc/definitions.html768
-rw-r--r--contrib/groff/contrib/mom/momdoc/docelement.html5041
-rw-r--r--contrib/groff/contrib/mom/momdoc/docprocessing.html2484
-rw-r--r--contrib/groff/contrib/mom/momdoc/goodies.html1057
-rw-r--r--contrib/groff/contrib/mom/momdoc/headfootpage.html1636
-rw-r--r--contrib/groff/contrib/mom/momdoc/inlines.html802
-rw-r--r--contrib/groff/contrib/mom/momdoc/intro.html405
-rw-r--r--contrib/groff/contrib/mom/momdoc/letters.html463
-rw-r--r--contrib/groff/contrib/mom/momdoc/macrolist.html1794
-rw-r--r--contrib/groff/contrib/mom/momdoc/rectoverso.html253
-rw-r--r--contrib/groff/contrib/mom/momdoc/refer.html1482
-rw-r--r--contrib/groff/contrib/mom/momdoc/reserved.html2200
-rw-r--r--contrib/groff/contrib/mom/momdoc/toc.html329
-rw-r--r--contrib/groff/contrib/mom/momdoc/typemacdoc.html235
-rw-r--r--contrib/groff/contrib/mom/momdoc/typesetting.html4189
-rw-r--r--contrib/groff/contrib/mom/momdoc/using.html230
-rw-r--r--contrib/groff/contrib/mom/om.tmac15889
-rw-r--r--contrib/groff/contrib/pdfmark/ChangeLog137
-rw-r--r--contrib/groff/contrib/pdfmark/Makefile.sub114
-rw-r--r--contrib/groff/contrib/pdfmark/PROBLEMS25
-rw-r--r--contrib/groff/contrib/pdfmark/README50
-rw-r--r--contrib/groff/contrib/pdfmark/TODO53
-rw-r--r--contrib/groff/contrib/pdfmark/cover.ms57
-rw-r--r--contrib/groff/contrib/pdfmark/pdfmark.ms2531
-rw-r--r--contrib/groff/contrib/pdfmark/pdfmark.tmac1562
-rw-r--r--contrib/groff/contrib/pdfmark/pdfroff.man552
-rw-r--r--contrib/groff/contrib/pdfmark/pdfroff.sh572
-rw-r--r--contrib/groff/contrib/pdfmark/spdf.tmac225
-rw-r--r--contrib/groff/contrib/pic2graph/Makefile.sub19
-rw-r--r--contrib/groff/contrib/pic2graph/pic2graph.man140
-rw-r--r--contrib/groff/contrib/pic2graph/pic2graph.sh101
-rw-r--r--contrib/groff/doc/Makefile.in150
-rw-r--r--contrib/groff/doc/Makefile.sub233
-rw-r--r--contrib/groff/doc/fdl.texi452
-rw-r--r--contrib/groff/doc/fixinfo.sh46
-rw-r--r--contrib/groff/doc/gnu.eps1018
-rw-r--r--contrib/groff/doc/gnu.pngbin7260 -> 0 bytes
-rw-r--r--contrib/groff/doc/gnu.xpm198
-rw-r--r--contrib/groff/doc/grnexmpl.g3250
-rw-r--r--contrib/groff/doc/grnexmpl.me84
-rw-r--r--contrib/groff/doc/groff301
-rw-r--r--contrib/groff/doc/groff-18695
-rw-r--r--contrib/groff/doc/groff-24910
-rw-r--r--contrib/groff/doc/groff-3bin145423 -> 0 bytes
-rw-r--r--contrib/groff/doc/groff.css17
-rw-r--r--contrib/groff/doc/groff.texinfo15797
-rw-r--r--contrib/groff/doc/meintro.me2243
-rw-r--r--contrib/groff/doc/meref.me2223
-rw-r--r--contrib/groff/doc/pic.ms2982
-rw-r--r--contrib/groff/doc/texinfo.tex7086
-rw-r--r--contrib/groff/doc/webpage.ms1832
-rw-r--r--contrib/groff/font/devX100-12/CB213
-rw-r--r--contrib/groff/font/devX100-12/CBI213
-rw-r--r--contrib/groff/font/devX100-12/CI213
-rw-r--r--contrib/groff/font/devX100-12/CR213
-rw-r--r--contrib/groff/font/devX100-12/DESC9
-rw-r--r--contrib/groff/font/devX100-12/HB213
-rw-r--r--contrib/groff/font/devX100-12/HBI213
-rw-r--r--contrib/groff/font/devX100-12/HI213
-rw-r--r--contrib/groff/font/devX100-12/HR213
-rw-r--r--contrib/groff/font/devX100-12/Makefile.sub2
-rw-r--r--contrib/groff/font/devX100-12/NB213
-rw-r--r--contrib/groff/font/devX100-12/NBI213
-rw-r--r--contrib/groff/font/devX100-12/NI213
-rw-r--r--contrib/groff/font/devX100-12/NR213
-rw-r--r--contrib/groff/font/devX100-12/S221
-rw-r--r--contrib/groff/font/devX100-12/TB213
-rw-r--r--contrib/groff/font/devX100-12/TBI213
-rw-r--r--contrib/groff/font/devX100-12/TI213
-rw-r--r--contrib/groff/font/devX100-12/TR213
-rw-r--r--contrib/groff/font/devX100/CB213
-rw-r--r--contrib/groff/font/devX100/CBI213
-rw-r--r--contrib/groff/font/devX100/CI213
-rw-r--r--contrib/groff/font/devX100/CR213
-rw-r--r--contrib/groff/font/devX100/DESC9
-rw-r--r--contrib/groff/font/devX100/HB213
-rw-r--r--contrib/groff/font/devX100/HBI213
-rw-r--r--contrib/groff/font/devX100/HI213
-rw-r--r--contrib/groff/font/devX100/HR213
-rw-r--r--contrib/groff/font/devX100/Makefile.sub2
-rw-r--r--contrib/groff/font/devX100/NB213
-rw-r--r--contrib/groff/font/devX100/NBI213
-rw-r--r--contrib/groff/font/devX100/NI213
-rw-r--r--contrib/groff/font/devX100/NR213
-rw-r--r--contrib/groff/font/devX100/S221
-rw-r--r--contrib/groff/font/devX100/TB213
-rw-r--r--contrib/groff/font/devX100/TBI213
-rw-r--r--contrib/groff/font/devX100/TI213
-rw-r--r--contrib/groff/font/devX100/TR213
-rw-r--r--contrib/groff/font/devX75-12/CB213
-rw-r--r--contrib/groff/font/devX75-12/CBI213
-rw-r--r--contrib/groff/font/devX75-12/CI213
-rw-r--r--contrib/groff/font/devX75-12/CR213
-rw-r--r--contrib/groff/font/devX75-12/DESC9
-rw-r--r--contrib/groff/font/devX75-12/HB213
-rw-r--r--contrib/groff/font/devX75-12/HBI213
-rw-r--r--contrib/groff/font/devX75-12/HI213
-rw-r--r--contrib/groff/font/devX75-12/HR213
-rw-r--r--contrib/groff/font/devX75-12/Makefile.sub2
-rw-r--r--contrib/groff/font/devX75-12/NB213
-rw-r--r--contrib/groff/font/devX75-12/NBI213
-rw-r--r--contrib/groff/font/devX75-12/NI213
-rw-r--r--contrib/groff/font/devX75-12/NR213
-rw-r--r--contrib/groff/font/devX75-12/S221
-rw-r--r--contrib/groff/font/devX75-12/TB213
-rw-r--r--contrib/groff/font/devX75-12/TBI213
-rw-r--r--contrib/groff/font/devX75-12/TI213
-rw-r--r--contrib/groff/font/devX75-12/TR213
-rw-r--r--contrib/groff/font/devX75/CB213
-rw-r--r--contrib/groff/font/devX75/CBI213
-rw-r--r--contrib/groff/font/devX75/CI213
-rw-r--r--contrib/groff/font/devX75/CR213
-rw-r--r--contrib/groff/font/devX75/DESC9
-rw-r--r--contrib/groff/font/devX75/HB213
-rw-r--r--contrib/groff/font/devX75/HBI213
-rw-r--r--contrib/groff/font/devX75/HI213
-rw-r--r--contrib/groff/font/devX75/HR213
-rw-r--r--contrib/groff/font/devX75/Makefile.sub2
-rw-r--r--contrib/groff/font/devX75/NB213
-rw-r--r--contrib/groff/font/devX75/NBI213
-rw-r--r--contrib/groff/font/devX75/NI213
-rw-r--r--contrib/groff/font/devX75/NR213
-rw-r--r--contrib/groff/font/devX75/S221
-rw-r--r--contrib/groff/font/devX75/TB213
-rw-r--r--contrib/groff/font/devX75/TBI213
-rw-r--r--contrib/groff/font/devX75/TI213
-rw-r--r--contrib/groff/font/devX75/TR213
-rw-r--r--contrib/groff/font/devascii/DESC.proto8
-rw-r--r--contrib/groff/font/devascii/Makefile.sub31
-rw-r--r--contrib/groff/font/devascii/R.proto190
-rw-r--r--contrib/groff/font/devcp1047/DESC.proto8
-rw-r--r--contrib/groff/font/devcp1047/Makefile.sub32
-rw-r--r--contrib/groff/font/devcp1047/R.proto322
-rw-r--r--contrib/groff/font/devdvi/CW152
-rw-r--r--contrib/groff/font/devdvi/CWEC280
-rw-r--r--contrib/groff/font/devdvi/CWI152
-rw-r--r--contrib/groff/font/devdvi/CWIEC281
-rw-r--r--contrib/groff/font/devdvi/CWITC138
-rw-r--r--contrib/groff/font/devdvi/CWTC137
-rw-r--r--contrib/groff/font/devdvi/DESC.in11
-rw-r--r--contrib/groff/font/devdvi/EX143
-rw-r--r--contrib/groff/font/devdvi/HB297
-rw-r--r--contrib/groff/font/devdvi/HBEC2078
-rw-r--r--contrib/groff/font/devdvi/HBI298
-rw-r--r--contrib/groff/font/devdvi/HBIEC2079
-rw-r--r--contrib/groff/font/devdvi/HBITC138
-rw-r--r--contrib/groff/font/devdvi/HBTC137
-rw-r--r--contrib/groff/font/devdvi/HI298
-rw-r--r--contrib/groff/font/devdvi/HIEC2079
-rw-r--r--contrib/groff/font/devdvi/HITC138
-rw-r--r--contrib/groff/font/devdvi/HR297
-rw-r--r--contrib/groff/font/devdvi/HREC2078
-rw-r--r--contrib/groff/font/devdvi/HRTC137
-rw-r--r--contrib/groff/font/devdvi/MI136
-rw-r--r--contrib/groff/font/devdvi/Makefile.sub23
-rw-r--r--contrib/groff/font/devdvi/S149
-rw-r--r--contrib/groff/font/devdvi/SA141
-rw-r--r--contrib/groff/font/devdvi/SB132
-rw-r--r--contrib/groff/font/devdvi/SC137
-rw-r--r--contrib/groff/font/devdvi/TB348
-rw-r--r--contrib/groff/font/devdvi/TBEC2306
-rw-r--r--contrib/groff/font/devdvi/TBI354
-rw-r--r--contrib/groff/font/devdvi/TBIEC2765
-rw-r--r--contrib/groff/font/devdvi/TBITC138
-rw-r--r--contrib/groff/font/devdvi/TBTC137
-rw-r--r--contrib/groff/font/devdvi/TI355
-rw-r--r--contrib/groff/font/devdvi/TIEC2765
-rw-r--r--contrib/groff/font/devdvi/TITC138
-rw-r--r--contrib/groff/font/devdvi/TR431
-rw-r--r--contrib/groff/font/devdvi/TREC2306
-rw-r--r--contrib/groff/font/devdvi/TRTC137
-rwxr-xr-xcontrib/groff/font/devdvi/generate/CompileFonts15
-rw-r--r--contrib/groff/font/devdvi/generate/Makefile206
-rw-r--r--contrib/groff/font/devdvi/generate/ec.map255
-rw-r--r--contrib/groff/font/devdvi/generate/msam.map127
-rw-r--r--contrib/groff/font/devdvi/generate/msbm.map121
-rw-r--r--contrib/groff/font/devdvi/generate/tc.map80
-rw-r--r--contrib/groff/font/devdvi/generate/texb.map128
-rw-r--r--contrib/groff/font/devdvi/generate/texex.map100
-rw-r--r--contrib/groff/font/devdvi/generate/texi.map128
-rw-r--r--contrib/groff/font/devdvi/generate/texmi.map46
-rw-r--r--contrib/groff/font/devdvi/generate/texr.map128
-rw-r--r--contrib/groff/font/devdvi/generate/texsy.map127
-rw-r--r--contrib/groff/font/devdvi/generate/textex.map34
-rw-r--r--contrib/groff/font/devdvi/generate/textt.map128
-rw-r--r--contrib/groff/font/devhtml/DESC.proto12
-rw-r--r--contrib/groff/font/devhtml/Makefile.sub34
-rw-r--r--contrib/groff/font/devhtml/R.proto746
-rw-r--r--contrib/groff/font/devlatin1/DESC.proto8
-rw-r--r--contrib/groff/font/devlatin1/Makefile.sub32
-rw-r--r--contrib/groff/font/devlatin1/R.proto322
-rw-r--r--contrib/groff/font/devlbp/CB216
-rw-r--r--contrib/groff/font/devlbp/CI216
-rw-r--r--contrib/groff/font/devlbp/CR216
-rw-r--r--contrib/groff/font/devlbp/DESC.in9
-rw-r--r--contrib/groff/font/devlbp/EB216
-rw-r--r--contrib/groff/font/devlbp/EI216
-rw-r--r--contrib/groff/font/devlbp/ER216
-rw-r--r--contrib/groff/font/devlbp/HB400
-rw-r--r--contrib/groff/font/devlbp/HBI401
-rw-r--r--contrib/groff/font/devlbp/HI401
-rw-r--r--contrib/groff/font/devlbp/HNB400
-rw-r--r--contrib/groff/font/devlbp/HNBI400
-rw-r--r--contrib/groff/font/devlbp/HNI400
-rw-r--r--contrib/groff/font/devlbp/HNR400
-rw-r--r--contrib/groff/font/devlbp/HR400
-rw-r--r--contrib/groff/font/devlbp/Makefile.sub21
-rw-r--r--contrib/groff/font/devlbp/TB422
-rw-r--r--contrib/groff/font/devlbp/TBI402
-rw-r--r--contrib/groff/font/devlbp/TI430
-rw-r--r--contrib/groff/font/devlbp/TR426
-rw-r--r--contrib/groff/font/devlj4/AB428
-rw-r--r--contrib/groff/font/devlj4/ABI428
-rw-r--r--contrib/groff/font/devlj4/AI426
-rw-r--r--contrib/groff/font/devlj4/ALBB756
-rw-r--r--contrib/groff/font/devlj4/ALBR771
-rw-r--r--contrib/groff/font/devlj4/AOB720
-rw-r--r--contrib/groff/font/devlj4/AOI782
-rw-r--r--contrib/groff/font/devlj4/AOR708
-rw-r--r--contrib/groff/font/devlj4/AR430
-rw-r--r--contrib/groff/font/devlj4/CB330
-rw-r--r--contrib/groff/font/devlj4/CBI331
-rw-r--r--contrib/groff/font/devlj4/CI331
-rw-r--r--contrib/groff/font/devlj4/CLARENDON331
-rw-r--r--contrib/groff/font/devlj4/CORONET332
-rw-r--r--contrib/groff/font/devlj4/CR330
-rw-r--r--contrib/groff/font/devlj4/DESC.in9
-rw-r--r--contrib/groff/font/devlj4/GB718
-rw-r--r--contrib/groff/font/devlj4/GBI718
-rw-r--r--contrib/groff/font/devlj4/GI653
-rw-r--r--contrib/groff/font/devlj4/GR836
-rw-r--r--contrib/groff/font/devlj4/LGB330
-rw-r--r--contrib/groff/font/devlj4/LGI331
-rw-r--r--contrib/groff/font/devlj4/LGR330
-rw-r--r--contrib/groff/font/devlj4/MARIGOLD331
-rw-r--r--contrib/groff/font/devlj4/Makefile.sub41
-rw-r--r--contrib/groff/font/devlj4/OB784
-rw-r--r--contrib/groff/font/devlj4/OBI776
-rw-r--r--contrib/groff/font/devlj4/OI887
-rw-r--r--contrib/groff/font/devlj4/OR863
-rw-r--r--contrib/groff/font/devlj4/S319
-rw-r--r--contrib/groff/font/devlj4/SYMBOL220
-rw-r--r--contrib/groff/font/devlj4/TB953
-rw-r--r--contrib/groff/font/devlj4/TBI1006
-rw-r--r--contrib/groff/font/devlj4/TI1090
-rw-r--r--contrib/groff/font/devlj4/TNRB444
-rw-r--r--contrib/groff/font/devlj4/TNRBI433
-rw-r--r--contrib/groff/font/devlj4/TNRI450
-rw-r--r--contrib/groff/font/devlj4/TNRR436
-rw-r--r--contrib/groff/font/devlj4/TR843
-rw-r--r--contrib/groff/font/devlj4/UB797
-rw-r--r--contrib/groff/font/devlj4/UBI748
-rw-r--r--contrib/groff/font/devlj4/UCB758
-rw-r--r--contrib/groff/font/devlj4/UCBI666
-rw-r--r--contrib/groff/font/devlj4/UCI806
-rw-r--r--contrib/groff/font/devlj4/UCR727
-rw-r--r--contrib/groff/font/devlj4/UI950
-rw-r--r--contrib/groff/font/devlj4/UR848
-rw-r--r--contrib/groff/font/devlj4/WINGDINGS230
-rw-r--r--contrib/groff/font/devlj4/generate/Makefile266
-rw-r--r--contrib/groff/font/devlj4/generate/special.awk82
-rw-r--r--contrib/groff/font/devlj4/generate/special.map271
-rw-r--r--contrib/groff/font/devlj4/generate/symbol.map199
-rw-r--r--contrib/groff/font/devlj4/generate/text.map845
-rw-r--r--contrib/groff/font/devlj4/generate/wingdings.map233
-rw-r--r--contrib/groff/font/devps/AB492
-rw-r--r--contrib/groff/font/devps/ABI493
-rw-r--r--contrib/groff/font/devps/AI493
-rw-r--r--contrib/groff/font/devps/AR492
-rw-r--r--contrib/groff/font/devps/BMB346
-rw-r--r--contrib/groff/font/devps/BMBI349
-rw-r--r--contrib/groff/font/devps/BMI342
-rw-r--r--contrib/groff/font/devps/BMR338
-rw-r--r--contrib/groff/font/devps/CB281
-rw-r--r--contrib/groff/font/devps/CBI282
-rw-r--r--contrib/groff/font/devps/CI282
-rw-r--r--contrib/groff/font/devps/CR281
-rw-r--r--contrib/groff/font/devps/DESC.in11
-rw-r--r--contrib/groff/font/devps/EURO19
-rw-r--r--contrib/groff/font/devps/HB481
-rw-r--r--contrib/groff/font/devps/HBI482
-rw-r--r--contrib/groff/font/devps/HI521
-rw-r--r--contrib/groff/font/devps/HNB481
-rw-r--r--contrib/groff/font/devps/HNBI482
-rw-r--r--contrib/groff/font/devps/HNI521
-rw-r--r--contrib/groff/font/devps/HNR520
-rw-r--r--contrib/groff/font/devps/HR520
-rw-r--r--contrib/groff/font/devps/Makefile.sub38
-rw-r--r--contrib/groff/font/devps/NB392
-rw-r--r--contrib/groff/font/devps/NBI510
-rw-r--r--contrib/groff/font/devps/NI453
-rw-r--r--contrib/groff/font/devps/NR440
-rw-r--r--contrib/groff/font/devps/PB370
-rw-r--r--contrib/groff/font/devps/PBI376
-rw-r--r--contrib/groff/font/devps/PI375
-rw-r--r--contrib/groff/font/devps/PR377
-rw-r--r--contrib/groff/font/devps/S229
-rw-r--r--contrib/groff/font/devps/SS194
-rw-r--r--contrib/groff/font/devps/TB460
-rw-r--r--contrib/groff/font/devps/TBI443
-rw-r--r--contrib/groff/font/devps/TI456
-rw-r--r--contrib/groff/font/devps/TR448
-rw-r--r--contrib/groff/font/devps/ZCMI403
-rw-r--r--contrib/groff/font/devps/ZD207
-rw-r--r--contrib/groff/font/devps/ZDR207
-rw-r--r--contrib/groff/font/devps/download6
-rw-r--r--contrib/groff/font/devps/freeeuro.afm34
-rw-r--r--contrib/groff/font/devps/freeeuro.pfa316
-rw-r--r--contrib/groff/font/devps/generate/Makefile239
-rwxr-xr-xcontrib/groff/font/devps/generate/afmname44
-rw-r--r--contrib/groff/font/devps/generate/dingbats.map5
-rw-r--r--contrib/groff/font/devps/generate/dingbats.rmap4
-rw-r--r--contrib/groff/font/devps/generate/freeeuro.sfd610
-rw-r--r--contrib/groff/font/devps/generate/lgreekmap31
-rw-r--r--contrib/groff/font/devps/generate/sfdtopfa.pe9
-rw-r--r--contrib/groff/font/devps/generate/symbol.sed33
-rw-r--r--contrib/groff/font/devps/generate/symbolchars65
-rw-r--r--contrib/groff/font/devps/generate/symbolsl.afm203
-rw-r--r--contrib/groff/font/devps/generate/textmap374
-rw-r--r--contrib/groff/font/devps/prologue.ps255
-rw-r--r--contrib/groff/font/devps/psstrip.sed7
-rw-r--r--contrib/groff/font/devps/symbol.afm212
-rw-r--r--contrib/groff/font/devps/symbolmap442
-rw-r--r--contrib/groff/font/devps/symbolsl.ps41
-rw-r--r--contrib/groff/font/devps/text.enc236
-rw-r--r--contrib/groff/font/devps/zapfdr.afm222
-rw-r--r--contrib/groff/font/devps/zapfdr.ps225
-rw-r--r--contrib/groff/font/devutf8/DESC.proto8
-rw-r--r--contrib/groff/font/devutf8/Makefile.sub32
-rw-r--r--contrib/groff/font/devutf8/NOTES53
-rw-r--r--contrib/groff/font/devutf8/R.proto819
-rw-r--r--contrib/groff/gendef.sh34
-rwxr-xr-xcontrib/groff/install-sh323
-rw-r--r--contrib/groff/man/Makefile.sub10
-rw-r--r--contrib/groff/man/ditroff.man201
-rw-r--r--contrib/groff/man/groff.man3564
-rw-r--r--contrib/groff/man/groff_char.man1422
-rw-r--r--contrib/groff/man/groff_diff.man3848
-rw-r--r--contrib/groff/man/groff_font.man660
-rw-r--r--contrib/groff/man/groff_out.man2106
-rw-r--r--contrib/groff/man/groff_tmac.man1282
-rw-r--r--contrib/groff/man/roff.man1278
-rwxr-xr-xcontrib/groff/mdate.sh42
-rwxr-xr-xcontrib/groff/mkinstalldirs158
-rw-r--r--contrib/groff/src/devices/grodvi/Makefile.sub6
-rw-r--r--contrib/groff/src/devices/grodvi/dvi.cpp978
-rw-r--r--contrib/groff/src/devices/grodvi/grodvi.man434
-rw-r--r--contrib/groff/src/devices/grohtml/Makefile.sub18
-rw-r--r--contrib/groff/src/devices/grohtml/grohtml.man293
-rw-r--r--contrib/groff/src/devices/grohtml/html-table.cpp783
-rw-r--r--contrib/groff/src/devices/grohtml/html-table.h132
-rw-r--r--contrib/groff/src/devices/grohtml/html-text.cpp1047
-rw-r--r--contrib/groff/src/devices/grohtml/html-text.h133
-rw-r--r--contrib/groff/src/devices/grohtml/html.h96
-rw-r--r--contrib/groff/src/devices/grohtml/output.cpp367
-rw-r--r--contrib/groff/src/devices/grohtml/post-html.cpp5053
-rw-r--r--contrib/groff/src/devices/grolbp/Makefile.sub6
-rw-r--r--contrib/groff/src/devices/grolbp/charset.h69
-rw-r--r--contrib/groff/src/devices/grolbp/grolbp.man336
-rw-r--r--contrib/groff/src/devices/grolbp/lbp.cpp725
-rw-r--r--contrib/groff/src/devices/grolbp/lbp.h546
-rw-r--r--contrib/groff/src/devices/grolj4/Makefile.sub7
-rw-r--r--contrib/groff/src/devices/grolj4/grolj4.man152
-rw-r--r--contrib/groff/src/devices/grolj4/lj4.cpp708
-rw-r--r--contrib/groff/src/devices/grolj4/lj4_font.man167
-rw-r--r--contrib/groff/src/devices/grops/Makefile.sub12
-rw-r--r--contrib/groff/src/devices/grops/TODO24
-rw-r--r--contrib/groff/src/devices/grops/grops.man1170
-rw-r--r--contrib/groff/src/devices/grops/ps.cpp1881
-rw-r--r--contrib/groff/src/devices/grops/ps.h129
-rw-r--r--contrib/groff/src/devices/grops/psfig.diff106
-rw-r--r--contrib/groff/src/devices/grops/psrm.cpp1178
-rw-r--r--contrib/groff/src/devices/grotty/Makefile.sub6
-rw-r--r--contrib/groff/src/devices/grotty/TODO3
-rw-r--r--contrib/groff/src/devices/grotty/grotty.man438
-rw-r--r--contrib/groff/src/devices/grotty/tty.cpp907
-rw-r--r--contrib/groff/src/devices/xditview/ChangeLog542
-rw-r--r--contrib/groff/src/devices/xditview/DESC.in9
-rw-r--r--contrib/groff/src/devices/xditview/Dvi.c611
-rw-r--r--contrib/groff/src/devices/xditview/Dvi.h46
-rw-r--r--contrib/groff/src/devices/xditview/DviP.h233
-rw-r--r--contrib/groff/src/devices/xditview/FontMap17
-rw-r--r--contrib/groff/src/devices/xditview/GXditview.ad57
-rw-r--r--contrib/groff/src/devices/xditview/Makefile.sub47
-rw-r--r--contrib/groff/src/devices/xditview/Menu.h46
-rw-r--r--contrib/groff/src/devices/xditview/README13
-rw-r--r--contrib/groff/src/devices/xditview/TODO17
-rw-r--r--contrib/groff/src/devices/xditview/ad2c64
-rw-r--r--contrib/groff/src/devices/xditview/device.c565
-rw-r--r--contrib/groff/src/devices/xditview/device.h21
-rw-r--r--contrib/groff/src/devices/xditview/draw.c699
-rw-r--r--contrib/groff/src/devices/xditview/font.c442
-rw-r--r--contrib/groff/src/devices/xditview/gray1.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray2.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray3.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray4.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray5.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray6.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray7.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gray8.bm4
-rw-r--r--contrib/groff/src/devices/xditview/gxditview.man410
-rw-r--r--contrib/groff/src/devices/xditview/lex.c96
-rw-r--r--contrib/groff/src/devices/xditview/page.c82
-rw-r--r--contrib/groff/src/devices/xditview/parse.c366
-rw-r--r--contrib/groff/src/devices/xditview/xdit.bm14
-rw-r--r--contrib/groff/src/devices/xditview/xdit_mask.bm14
-rw-r--r--contrib/groff/src/devices/xditview/xditview.c657
-rw-r--r--contrib/groff/src/include/DviChar.h37
-rw-r--r--contrib/groff/src/include/Makefile.sub50
-rw-r--r--contrib/groff/src/include/XFontName.h50
-rw-r--r--contrib/groff/src/include/assert.h39
-rw-r--r--contrib/groff/src/include/cmap.h56
-rw-r--r--contrib/groff/src/include/color.h96
-rw-r--r--contrib/groff/src/include/config.hin217
-rw-r--r--contrib/groff/src/include/cset.h75
-rw-r--r--contrib/groff/src/include/device.h21
-rw-r--r--contrib/groff/src/include/driver.h36
-rw-r--r--contrib/groff/src/include/errarg.h47
-rw-r--r--contrib/groff/src/include/error.h59
-rw-r--r--contrib/groff/src/include/font.h124
-rw-r--r--contrib/groff/src/include/geometry.h27
-rw-r--r--contrib/groff/src/include/getopt_int.h131
-rw-r--r--contrib/groff/src/include/gettext.h4
-rw-r--r--contrib/groff/src/include/html-strings.h27
-rw-r--r--contrib/groff/src/include/htmlhint.h37
-rw-r--r--contrib/groff/src/include/index.h42
-rw-r--r--contrib/groff/src/include/lib.h170
-rw-r--r--contrib/groff/src/include/macropath.h23
-rw-r--r--contrib/groff/src/include/nonposix.h231
-rw-r--r--contrib/groff/src/include/paper.h37
-rw-r--r--contrib/groff/src/include/posix.h67
-rw-r--r--contrib/groff/src/include/printer.h107
-rw-r--r--contrib/groff/src/include/ptable.h172
-rw-r--r--contrib/groff/src/include/refid.h35
-rw-r--r--contrib/groff/src/include/relocate.h27
-rw-r--r--contrib/groff/src/include/search.h96
-rw-r--r--contrib/groff/src/include/searchpath.h32
-rw-r--r--contrib/groff/src/include/stringclass.h196
-rw-r--r--contrib/groff/src/include/symbol.h83
-rw-r--r--contrib/groff/src/include/unicode.h26
-rw-r--r--contrib/groff/src/libs/libbib/Makefile.sub14
-rw-r--r--contrib/groff/src/libs/libbib/common.cpp38
-rw-r--r--contrib/groff/src/libs/libbib/index.cpp640
-rw-r--r--contrib/groff/src/libs/libbib/linear.cpp503
-rw-r--r--contrib/groff/src/libs/libbib/map.c86
-rw-r--r--contrib/groff/src/libs/libbib/search.cpp133
-rw-r--r--contrib/groff/src/libs/libdriver/Makefile.sub7
-rw-r--r--contrib/groff/src/libs/libdriver/input.cpp1835
-rw-r--r--contrib/groff/src/libs/libdriver/printer.cpp267
-rw-r--r--contrib/groff/src/libs/libgroff/Makefile.sub126
-rw-r--r--contrib/groff/src/libs/libgroff/assert.cpp34
-rw-r--r--contrib/groff/src/libs/libgroff/change_lf.cpp37
-rw-r--r--contrib/groff/src/libs/libgroff/cmap.cpp64
-rw-r--r--contrib/groff/src/libs/libgroff/color.cpp429
-rw-r--r--contrib/groff/src/libs/libgroff/cset.cpp112
-rw-r--r--contrib/groff/src/libs/libgroff/device.cpp36
-rw-r--r--contrib/groff/src/libs/libgroff/errarg.cpp128
-rw-r--r--contrib/groff/src/libs/libgroff/error.cpp142
-rw-r--r--contrib/groff/src/libs/libgroff/fatal.cpp27
-rw-r--r--contrib/groff/src/libs/libgroff/filename.cpp2
-rw-r--r--contrib/groff/src/libs/libgroff/fmod.c28
-rw-r--r--contrib/groff/src/libs/libgroff/font.cpp1054
-rw-r--r--contrib/groff/src/libs/libgroff/fontfile.cpp69
-rw-r--r--contrib/groff/src/libs/libgroff/geometry.cpp179
-rw-r--r--contrib/groff/src/libs/libgroff/getcwd.c54
-rw-r--r--contrib/groff/src/libs/libgroff/glyphuni.cpp504
-rw-r--r--contrib/groff/src/libs/libgroff/htmlhint.cpp59
-rw-r--r--contrib/groff/src/libs/libgroff/hypot.cpp40
-rw-r--r--contrib/groff/src/libs/libgroff/iftoa.c73
-rw-r--r--contrib/groff/src/libs/libgroff/invalid.cpp62
-rw-r--r--contrib/groff/src/libs/libgroff/itoa.c64
-rw-r--r--contrib/groff/src/libs/libgroff/lf.cpp63
-rw-r--r--contrib/groff/src/libs/libgroff/lineno.cpp1
-rw-r--r--contrib/groff/src/libs/libgroff/macropath.cpp30
-rw-r--r--contrib/groff/src/libs/libgroff/matherr.c49
-rw-r--r--contrib/groff/src/libs/libgroff/maxfilename.cpp65
-rw-r--r--contrib/groff/src/libs/libgroff/maxpathname.cpp71
-rw-r--r--contrib/groff/src/libs/libgroff/mksdir.cpp34
-rw-r--r--contrib/groff/src/libs/libgroff/mkstemp.cpp34
-rw-r--r--contrib/groff/src/libs/libgroff/nametoindex.cpp117
-rw-r--r--contrib/groff/src/libs/libgroff/new.cpp71
-rw-r--r--contrib/groff/src/libs/libgroff/paper.cpp84
-rw-r--r--contrib/groff/src/libs/libgroff/prime.cpp26
-rw-r--r--contrib/groff/src/libs/libgroff/progname.c1
-rw-r--r--contrib/groff/src/libs/libgroff/ptable.cpp52
-rw-r--r--contrib/groff/src/libs/libgroff/putenv.c99
-rw-r--r--contrib/groff/src/libs/libgroff/quotearg.c209
-rw-r--r--contrib/groff/src/libs/libgroff/relocate.cpp238
-rw-r--r--contrib/groff/src/libs/libgroff/searchpath.cpp208
-rw-r--r--contrib/groff/src/libs/libgroff/spawnvp.c122
-rw-r--r--contrib/groff/src/libs/libgroff/strcasecmp.c66
-rw-r--r--contrib/groff/src/libs/libgroff/strerror.c48
-rw-r--r--contrib/groff/src/libs/libgroff/string.cpp341
-rw-r--r--contrib/groff/src/libs/libgroff/strncasecmp.c2
-rw-r--r--contrib/groff/src/libs/libgroff/strsave.cpp31
-rw-r--r--contrib/groff/src/libs/libgroff/strtol.c133
-rw-r--r--contrib/groff/src/libs/libgroff/symbol.cpp159
-rw-r--r--contrib/groff/src/libs/libgroff/tmpfile.cpp190
-rw-r--r--contrib/groff/src/libs/libgroff/tmpname.cpp116
-rw-r--r--contrib/groff/src/libs/libgroff/unicode.cpp67
-rw-r--r--contrib/groff/src/libs/libgroff/uniglyph.cpp504
-rw-r--r--contrib/groff/src/libs/libgroff/uniuni.cpp1994
-rw-r--r--contrib/groff/src/libs/libxutil/DviChar.c658
-rw-r--r--contrib/groff/src/libs/libxutil/Makefile.sub10
-rw-r--r--contrib/groff/src/libs/libxutil/XFontName.c241
-rw-r--r--contrib/groff/src/libs/libxutil/xmalloc.c7
-rw-r--r--contrib/groff/src/preproc/eqn/Makefile.sub60
-rw-r--r--contrib/groff/src/preproc/eqn/TODO49
-rw-r--r--contrib/groff/src/preproc/eqn/box.cpp612
-rw-r--r--contrib/groff/src/preproc/eqn/box.h280
-rw-r--r--contrib/groff/src/preproc/eqn/delim.cpp401
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.h50
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.man1160
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.y330
-rw-r--r--contrib/groff/src/preproc/eqn/lex.cpp1172
-rw-r--r--contrib/groff/src/preproc/eqn/limit.cpp195
-rw-r--r--contrib/groff/src/preproc/eqn/list.cpp237
-rw-r--r--contrib/groff/src/preproc/eqn/main.cpp395
-rw-r--r--contrib/groff/src/preproc/eqn/mark.cpp121
-rw-r--r--contrib/groff/src/preproc/eqn/neqn.man43
-rw-r--r--contrib/groff/src/preproc/eqn/neqn.sh25
-rw-r--r--contrib/groff/src/preproc/eqn/other.cpp601
-rw-r--r--contrib/groff/src/preproc/eqn/over.cpp197
-rw-r--r--contrib/groff/src/preproc/eqn/pbox.h141
-rw-r--r--contrib/groff/src/preproc/eqn/pile.cpp293
-rw-r--r--contrib/groff/src/preproc/eqn/script.cpp222
-rw-r--r--contrib/groff/src/preproc/eqn/special.cpp115
-rw-r--r--contrib/groff/src/preproc/eqn/sqrt.cpp180
-rw-r--r--contrib/groff/src/preproc/eqn/text.cpp528
-rw-r--r--contrib/groff/src/preproc/grn/Makefile.sub17
-rw-r--r--contrib/groff/src/preproc/grn/README68
-rw-r--r--contrib/groff/src/preproc/grn/gprint.h86
-rw-r--r--contrib/groff/src/preproc/grn/grn.man652
-rw-r--r--contrib/groff/src/preproc/grn/hdb.cpp346
-rw-r--r--contrib/groff/src/preproc/grn/hgraph.cpp1048
-rw-r--r--contrib/groff/src/preproc/grn/hpoint.cpp49
-rw-r--r--contrib/groff/src/preproc/grn/main.cpp907
-rw-r--r--contrib/groff/src/preproc/html/Makefile.sub7
-rw-r--r--contrib/groff/src/preproc/html/pre-html.cpp1779
-rw-r--r--contrib/groff/src/preproc/html/pre-html.h37
-rw-r--r--contrib/groff/src/preproc/html/pushback.cpp329
-rw-r--r--contrib/groff/src/preproc/html/pushback.h54
-rw-r--r--contrib/groff/src/preproc/pic/Makefile.sub31
-rw-r--r--contrib/groff/src/preproc/pic/TODO35
-rw-r--r--contrib/groff/src/preproc/pic/common.cpp647
-rw-r--r--contrib/groff/src/preproc/pic/common.h80
-rw-r--r--contrib/groff/src/preproc/pic/lex.cpp2001
-rw-r--r--contrib/groff/src/preproc/pic/main.cpp642
-rw-r--r--contrib/groff/src/preproc/pic/object.cpp2017
-rw-r--r--contrib/groff/src/preproc/pic/object.h225
-rw-r--r--contrib/groff/src/preproc/pic/output.h83
-rw-r--r--contrib/groff/src/preproc/pic/pic.h123
-rw-r--r--contrib/groff/src/preproc/pic/pic.man1109
-rw-r--r--contrib/groff/src/preproc/pic/pic.y1898
-rw-r--r--contrib/groff/src/preproc/pic/position.h47
-rw-r--r--contrib/groff/src/preproc/pic/tex.cpp459
-rw-r--r--contrib/groff/src/preproc/pic/text.h28
-rw-r--r--contrib/groff/src/preproc/pic/troff.cpp567
-rw-r--r--contrib/groff/src/preproc/refer/Makefile.sub23
-rw-r--r--contrib/groff/src/preproc/refer/TODO124
-rw-r--r--contrib/groff/src/preproc/refer/command.cpp809
-rw-r--r--contrib/groff/src/preproc/refer/command.h36
-rw-r--r--contrib/groff/src/preproc/refer/label.y1193
-rw-r--r--contrib/groff/src/preproc/refer/ref.cpp1160
-rw-r--r--contrib/groff/src/preproc/refer/ref.h128
-rw-r--r--contrib/groff/src/preproc/refer/refer.cpp1242
-rw-r--r--contrib/groff/src/preproc/refer/refer.h78
-rw-r--r--contrib/groff/src/preproc/refer/refer.man1492
-rw-r--r--contrib/groff/src/preproc/refer/token.cpp378
-rw-r--r--contrib/groff/src/preproc/refer/token.h88
-rw-r--r--contrib/groff/src/preproc/soelim/Makefile.sub7
-rw-r--r--contrib/groff/src/preproc/soelim/TODO1
-rw-r--r--contrib/groff/src/preproc/soelim/soelim.cpp308
-rw-r--r--contrib/groff/src/preproc/soelim/soelim.man216
-rw-r--r--contrib/groff/src/preproc/tbl/Makefile.sub13
-rw-r--r--contrib/groff/src/preproc/tbl/main.cpp1590
-rw-r--r--contrib/groff/src/preproc/tbl/table.cpp2778
-rw-r--r--contrib/groff/src/preproc/tbl/table.h165
-rw-r--r--contrib/groff/src/preproc/tbl/tbl.man493
-rw-r--r--contrib/groff/src/roff/groff/Makefile.sub8
-rw-r--r--contrib/groff/src/roff/groff/groff.cpp765
-rw-r--r--contrib/groff/src/roff/groff/groff.man1739
-rw-r--r--contrib/groff/src/roff/groff/pipeline.c579
-rw-r--r--contrib/groff/src/roff/groff/pipeline.h31
-rw-r--r--contrib/groff/src/roff/grog/Makefile.sub32
-rw-r--r--contrib/groff/src/roff/grog/grog.man91
-rw-r--r--contrib/groff/src/roff/grog/grog.pl222
-rw-r--r--contrib/groff/src/roff/grog/grog.sh112
-rw-r--r--contrib/groff/src/roff/nroff/Makefile.sub20
-rw-r--r--contrib/groff/src/roff/nroff/nroff.man153
-rwxr-xr-xcontrib/groff/src/roff/nroff/nroff.sh106
-rw-r--r--contrib/groff/src/roff/troff/Makefile.sub48
-rw-r--r--contrib/groff/src/roff/troff/TODO131
-rw-r--r--contrib/groff/src/roff/troff/charinfo.h214
-rw-r--r--contrib/groff/src/roff/troff/column.cpp732
-rw-r--r--contrib/groff/src/roff/troff/dictionary.cpp211
-rw-r--r--contrib/groff/src/roff/troff/dictionary.h92
-rw-r--r--contrib/groff/src/roff/troff/div.cpp1198
-rw-r--r--contrib/groff/src/roff/troff/div.h172
-rw-r--r--contrib/groff/src/roff/troff/env.cpp3893
-rw-r--r--contrib/groff/src/roff/troff/env.h415
-rw-r--r--contrib/groff/src/roff/troff/hvunits.h340
-rw-r--r--contrib/groff/src/roff/troff/input.cpp8215
-rw-r--r--contrib/groff/src/roff/troff/input.h105
-rw-r--r--contrib/groff/src/roff/troff/mtsm.cpp637
-rw-r--r--contrib/groff/src/roff/troff/mtsm.h164
-rw-r--r--contrib/groff/src/roff/troff/node.cpp6482
-rw-r--r--contrib/groff/src/roff/troff/node.h676
-rw-r--r--contrib/groff/src/roff/troff/number.cpp698
-rw-r--r--contrib/groff/src/roff/troff/reg.cpp473
-rw-r--r--contrib/groff/src/roff/troff/reg.h76
-rw-r--r--contrib/groff/src/roff/troff/request.h91
-rw-r--r--contrib/groff/src/roff/troff/token.h242
-rw-r--r--contrib/groff/src/roff/troff/troff.h92
-rw-r--r--contrib/groff/src/roff/troff/troff.man705
-rw-r--r--contrib/groff/src/utils/addftinfo/Makefile.sub11
-rw-r--r--contrib/groff/src/utils/addftinfo/addftinfo.cpp218
-rw-r--r--contrib/groff/src/utils/addftinfo/addftinfo.man111
-rw-r--r--contrib/groff/src/utils/addftinfo/guess.cpp490
-rw-r--r--contrib/groff/src/utils/addftinfo/guess.h44
-rw-r--r--contrib/groff/src/utils/afmtodit/Makefile.sub25
-rw-r--r--contrib/groff/src/utils/afmtodit/afmtodit.man337
-rw-r--r--contrib/groff/src/utils/afmtodit/afmtodit.pl6566
-rw-r--r--contrib/groff/src/utils/hpftodit/Makefile.sub8
-rw-r--r--contrib/groff/src/utils/hpftodit/hpftodit.cpp1454
-rw-r--r--contrib/groff/src/utils/hpftodit/hpftodit.man311
-rw-r--r--contrib/groff/src/utils/hpftodit/hpuni.cpp698
-rw-r--r--contrib/groff/src/utils/indxbib/Makefile.sub29
-rw-r--r--contrib/groff/src/utils/indxbib/eign133
-rw-r--r--contrib/groff/src/utils/indxbib/indxbib.cpp790
-rw-r--r--contrib/groff/src/utils/indxbib/indxbib.man211
-rw-r--r--contrib/groff/src/utils/indxbib/signal.c78
-rw-r--r--contrib/groff/src/utils/lkbib/Makefile.sub6
-rw-r--r--contrib/groff/src/utils/lkbib/lkbib.cpp137
-rw-r--r--contrib/groff/src/utils/lkbib/lkbib.man136
-rw-r--r--contrib/groff/src/utils/lookbib/Makefile.sub7
-rw-r--r--contrib/groff/src/utils/lookbib/lookbib.cpp143
-rw-r--r--contrib/groff/src/utils/lookbib/lookbib.man101
-rw-r--r--contrib/groff/src/utils/pfbtops/Makefile.sub7
-rw-r--r--contrib/groff/src/utils/pfbtops/pfbtops.c230
-rw-r--r--contrib/groff/src/utils/pfbtops/pfbtops.man68
-rw-r--r--contrib/groff/src/utils/tfmtodit/Makefile.sub6
-rw-r--r--contrib/groff/src/utils/tfmtodit/tfmtodit.cpp874
-rw-r--r--contrib/groff/src/utils/tfmtodit/tfmtodit.man197
-rw-r--r--contrib/groff/src/utils/xtotroff/Makefile.in62
-rw-r--r--contrib/groff/src/utils/xtotroff/Makefile.sub8
-rw-r--r--contrib/groff/src/utils/xtotroff/xtotroff.c299
-rw-r--r--contrib/groff/src/utils/xtotroff/xtotroff.man109
-rw-r--r--contrib/groff/stamp-h.in1
-rw-r--r--contrib/groff/test-groff.in34
-rw-r--r--contrib/groff/tmac/Makefile.sub137
-rw-r--r--contrib/groff/tmac/README9
-rw-r--r--contrib/groff/tmac/TODO36
-rw-r--r--contrib/groff/tmac/X.tmac132
-rw-r--r--contrib/groff/tmac/Xps.tmac59
-rw-r--r--contrib/groff/tmac/a4.tmac20
-rw-r--r--contrib/groff/tmac/an-old.tmac650
-rw-r--r--contrib/groff/tmac/an.tmac3
-rw-r--r--contrib/groff/tmac/andoc.tmac19
-rw-r--r--contrib/groff/tmac/composite.tmac25
-rw-r--r--contrib/groff/tmac/cp1047.tmac101
-rw-r--r--contrib/groff/tmac/devtag.tmac131
-rw-r--r--contrib/groff/tmac/doc-common1337
-rw-r--r--contrib/groff/tmac/doc-ditroff332
-rw-r--r--contrib/groff/tmac/doc-nroff275
-rw-r--r--contrib/groff/tmac/doc-old.tmac1856
-rw-r--r--contrib/groff/tmac/doc-syms877
-rw-r--r--contrib/groff/tmac/doc.tmac6597
-rw-r--r--contrib/groff/tmac/dvi.tmac788
-rw-r--r--contrib/groff/tmac/e.tmac1666
-rw-r--r--contrib/groff/tmac/ec.tmac64
-rw-r--r--contrib/groff/tmac/eqnrc65
-rw-r--r--contrib/groff/tmac/europs.tmac38
-rw-r--r--contrib/groff/tmac/fixmacros.sed7
-rw-r--r--contrib/groff/tmac/groff_man.man775
-rw-r--r--contrib/groff/tmac/groff_mdoc.man4275
-rw-r--r--contrib/groff/tmac/groff_me.man282
-rw-r--r--contrib/groff/tmac/groff_ms.man1556
-rw-r--r--contrib/groff/tmac/groff_trace.man550
-rw-r--r--contrib/groff/tmac/groff_www.man525
-rw-r--r--contrib/groff/tmac/html-end.tmac25
-rw-r--r--contrib/groff/tmac/html.tmac546
-rw-r--r--contrib/groff/tmac/hyphen.us4469
-rw-r--r--contrib/groff/tmac/hyphenex.pl78
-rw-r--r--contrib/groff/tmac/hyphenex.us896
-rw-r--r--contrib/groff/tmac/latin1.tmac107
-rw-r--r--contrib/groff/tmac/latin2.tmac107
-rw-r--r--contrib/groff/tmac/latin5.tmac107
-rw-r--r--contrib/groff/tmac/latin9.tmac107
-rw-r--r--contrib/groff/tmac/lbp.tmac94
-rw-r--r--contrib/groff/tmac/lj4.tmac32
-rw-r--r--contrib/groff/tmac/man.local2
-rw-r--r--contrib/groff/tmac/man.tmac3
-rw-r--r--contrib/groff/tmac/man.ultrix103
-rw-r--r--contrib/groff/tmac/mandoc.tmac3
-rw-r--r--contrib/groff/tmac/mdoc.tmac3
-rw-r--r--contrib/groff/tmac/me.tmac3
-rw-r--r--contrib/groff/tmac/ms.tmac3
-rw-r--r--contrib/groff/tmac/papersize.tmac158
-rw-r--r--contrib/groff/tmac/pic.tmac12
-rw-r--r--contrib/groff/tmac/ps.tmac694
-rw-r--r--contrib/groff/tmac/psatk.tmac63
-rw-r--r--contrib/groff/tmac/psfig.tmac89
-rw-r--r--contrib/groff/tmac/psold.tmac61
-rw-r--r--contrib/groff/tmac/pspic.tmac106
-rw-r--r--contrib/groff/tmac/s.tmac2076
-rw-r--r--contrib/groff/tmac/safer.tmac5
-rw-r--r--contrib/groff/tmac/strip.sed10
-rw-r--r--contrib/groff/tmac/trace.tmac111
-rw-r--r--contrib/groff/tmac/troffrc53
-rw-r--r--contrib/groff/tmac/troffrc-end19
-rw-r--r--contrib/groff/tmac/tty-char.tmac240
-rw-r--r--contrib/groff/tmac/tty.tmac93
-rw-r--r--contrib/groff/tmac/unicode.tmac3
-rw-r--r--contrib/groff/tmac/www.tmac1230
-rw-r--r--contrib/libxo/Makefile.am21
-rw-r--r--contrib/libxo/configure.ac2
-rw-r--r--contrib/libxo/doc/libxo-manual.html2877
-rw-r--r--contrib/libxo/doc/libxo.txt195
-rw-r--r--contrib/libxo/encoder/cbor/enc_cbor.c2
-rw-r--r--contrib/libxo/encoder/test/enc_test.c4
-rw-r--r--contrib/libxo/libxo/libxo.c428
-rw-r--r--contrib/libxo/libxo/xo.h2
-rw-r--r--contrib/libxo/libxo/xo_buf.h2
-rw-r--r--contrib/libxo/libxo/xo_encoder.c6
-rw-r--r--contrib/libxo/libxo/xo_encoder.h5
-rw-r--r--contrib/libxo/libxo/xo_syslog.c4
-rw-r--r--contrib/libxo/tests/core/Makefile.am18
-rw-r--r--contrib/libxo/tests/core/saved/test_01.E.out278
-rw-r--r--contrib/libxo/tests/core/saved/test_02.E.out136
-rw-r--r--contrib/libxo/tests/core/saved/test_03.E.out68
-rw-r--r--contrib/libxo/tests/core/saved/test_04.E.out44
-rw-r--r--contrib/libxo/tests/core/saved/test_05.E.out192
-rw-r--r--contrib/libxo/tests/core/saved/test_06.E.out44
-rw-r--r--contrib/libxo/tests/core/saved/test_07.E.out152
-rw-r--r--contrib/libxo/tests/core/saved/test_08.E.out372
-rw-r--r--contrib/libxo/tests/core/saved/test_09.E.out80
-rw-r--r--contrib/libxo/tests/core/saved/test_10.E.out252
-rw-r--r--contrib/libxo/tests/core/saved/test_11.E.out16
-rw-r--r--contrib/libxo/tests/core/saved/test_11.HIPx.out8
-rw-r--r--contrib/libxo/tests/core/saved/test_12.E.out180
-rw-r--r--contrib/libxo/tests/core/saved/test_12.H.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_12.HIPx.out89
-rw-r--r--contrib/libxo/tests/core/saved/test_12.HP.out89
-rw-r--r--contrib/libxo/tests/core/saved/test_12.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_12.JP.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_12.T.out42
-rw-r--r--contrib/libxo/tests/core/saved/test_12.X.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_12.XP.out2
-rw-r--r--contrib/libxo/tests/core/test_12.c11
-rw-r--r--contrib/libxo/tests/gettext/Makefile.am3
-rw-r--r--contrib/libxo/tests/xo/Makefile.am3
-rw-r--r--contrib/libxo/xo/xo.187
-rw-r--r--contrib/libxo/xohtml/xohtml.115
-rw-r--r--contrib/libxo/xopo/xopo.116
-rw-r--r--contrib/libxo/xopo/xopo.c5
-rw-r--r--contrib/mdocml/LICENSE4
-rw-r--r--contrib/mdocml/Makefile43
-rw-r--r--contrib/mdocml/Makefile.depend12
-rw-r--r--contrib/mdocml/NEWS24
-rw-r--r--contrib/mdocml/TODO29
-rw-r--r--contrib/mdocml/apropos.1115
-rw-r--r--contrib/mdocml/catman.86
-rw-r--r--contrib/mdocml/cgi.c151
-rw-r--r--contrib/mdocml/cgi.h.example1
-rw-r--r--contrib/mdocml/chars.c20
-rwxr-xr-xcontrib/mdocml/configure19
-rw-r--r--contrib/mdocml/configure.local.example9
-rw-r--r--contrib/mdocml/eqn.c11
-rw-r--r--contrib/mdocml/gmdiff13
-rw-r--r--contrib/mdocml/html.c61
-rw-r--r--contrib/mdocml/html.h6
-rw-r--r--contrib/mdocml/libman.h5
-rw-r--r--contrib/mdocml/libmandoc.h4
-rw-r--r--contrib/mdocml/libmdoc.h23
-rw-r--r--contrib/mdocml/main.c89
-rw-r--r--contrib/mdocml/main.h4
-rw-r--r--contrib/mdocml/makewhatis.819
-rw-r--r--contrib/mdocml/man.1163
-rw-r--r--contrib/mdocml/man.745
-rw-r--r--contrib/mdocml/man.c84
-rw-r--r--contrib/mdocml/man.cgi.333
-rw-r--r--contrib/mdocml/man.cgi.822
-rw-r--r--contrib/mdocml/man.h46
-rw-r--r--contrib/mdocml/man_hash.c103
-rw-r--r--contrib/mdocml/man_html.c73
-rw-r--r--contrib/mdocml/man_macro.c41
-rw-r--r--contrib/mdocml/man_term.c265
-rw-r--r--contrib/mdocml/man_validate.c84
-rw-r--r--contrib/mdocml/mandoc.1356
-rw-r--r--contrib/mdocml/mandoc.310
-rw-r--r--contrib/mdocml/mandoc.c16
-rw-r--r--contrib/mdocml/mandoc.css7
-rw-r--r--contrib/mdocml/mandoc.h27
-rw-r--r--contrib/mdocml/mandoc_char.736
-rw-r--r--contrib/mdocml/mandoc_headers.367
-rw-r--r--contrib/mdocml/mandoc_html.356
-rw-r--r--contrib/mdocml/mandocd.86
-rw-r--r--contrib/mdocml/mandocdb.c49
-rw-r--r--contrib/mdocml/manpage.c195
-rw-r--r--contrib/mdocml/mansearch.3128
-rw-r--r--contrib/mdocml/mansearch.c87
-rw-r--r--contrib/mdocml/mansearch.h7
-rw-r--r--contrib/mdocml/mdoc.731
-rw-r--r--contrib/mdocml/mdoc.c105
-rw-r--r--contrib/mdocml/mdoc.h131
-rw-r--r--contrib/mdocml/mdoc_argv.c38
-rw-r--r--contrib/mdocml/mdoc_hash.c95
-rw-r--r--contrib/mdocml/mdoc_html.c300
-rw-r--r--contrib/mdocml/mdoc_macro.c145
-rw-r--r--contrib/mdocml/mdoc_man.c218
-rw-r--r--contrib/mdocml/mdoc_markdown.c1558
-rw-r--r--contrib/mdocml/mdoc_state.c16
-rw-r--r--contrib/mdocml/mdoc_term.c369
-rw-r--r--contrib/mdocml/mdoc_validate.c224
-rw-r--r--contrib/mdocml/out.c74
-rw-r--r--contrib/mdocml/out.h9
-rw-r--r--contrib/mdocml/read.c127
-rw-r--r--contrib/mdocml/roff.7912
-rw-r--r--contrib/mdocml/roff.c1371
-rw-r--r--contrib/mdocml/roff.h426
-rw-r--r--contrib/mdocml/roff_html.c93
-rw-r--r--contrib/mdocml/roff_term.c221
-rw-r--r--contrib/mdocml/roff_validate.c95
-rw-r--r--contrib/mdocml/soelim.18
-rw-r--r--contrib/mdocml/tbl.713
-rw-r--r--contrib/mdocml/tbl.c3
-rw-r--r--contrib/mdocml/tbl_data.c5
-rw-r--r--contrib/mdocml/tbl_html.c33
-rw-r--r--contrib/mdocml/tbl_layout.c22
-rw-r--r--contrib/mdocml/tbl_term.c41
-rw-r--r--contrib/mdocml/term.c422
-rw-r--r--contrib/mdocml/term.h59
-rw-r--r--contrib/mdocml/term_ascii.c21
-rw-r--r--contrib/mdocml/term_ps.c16
-rw-r--r--contrib/mdocml/term_tab.c117
-rw-r--r--contrib/mdocml/tree.c14
-rw-r--r--contrib/netbsd-tests/bin/cat/d_b_output.in4
-rw-r--r--contrib/netbsd-tests/bin/cat/d_b_output.out4
-rw-r--r--contrib/netbsd-tests/bin/cat/d_s_output.in6
-rw-r--r--contrib/netbsd-tests/bin/cat/d_s_output.out5
-rw-r--r--contrib/netbsd-tests/bin/cat/d_vt_output.in3
-rw-r--r--contrib/netbsd-tests/bin/cat/d_vt_output.out3
-rwxr-xr-xcontrib/netbsd-tests/bin/cat/t_cat.sh57
-rw-r--r--contrib/smbfs/lib/smb/subr.c4
959 files changed, 9448 insertions, 441910 deletions
diff --git a/contrib/groff/BUG-REPORT b/contrib/groff/BUG-REPORT
deleted file mode 100644
index 293101e34e58..000000000000
--- a/contrib/groff/BUG-REPORT
+++ /dev/null
@@ -1,55 +0,0 @@
- Groff Bug Report
-
-Please read the PROBLEMS file before sending in a bug report.
-
-Please fill in all fields, even if you think they are not relevant.
-
-Please delete the text in brackets before sending it in.
-
-Please report separate bugs separately.
-
-Send the completed form to bug-groff@gnu.org
-
-GROFF VERSION:
-[The version of groff you are using. For example, `1.05']
-
-MACHINE:
-[The machine you are using. For example, `Sun SPARCstation 2']
-
-OS:
-[The operating system you are using. For example, `SunOS 4.1.1']
-
-COMPILER:
-[The compiler you are used to compile groff. For example, `g++ 1.40.3']
-
-INPUT FILES:
-[Include all the files necessary to reproduce the problem that are not
-part of the standard groff distribution. This includes font
-description files, DESC files and macro files (with the exception of
-the -ms and -mm macros: we have them). Send them as a shell archive or
-as a uuencoded, compressed tar file.
-
-It's easier for us if you can provide an example that doesn't depend on
-any macro package, but obviously if you're reporting a problem with a
-macro package that won't be possible. Also a short example is more
-convenient than a long one, but don't worry if you can't find a short
-example. Don't say something like ``any file that X'': Always send a
-definite example.]
-
-COMMAND LINE:
-[The command line that we should run in order to observe the bug. For
-example, `gtroff -Tps bug.tr'. If the command line uses -ms or -mm,
-say whether these refer to the groff versions or the Unix versions of
-the macros.]
-
-DESCRIPTION OF INCORRECT BEHAVIOUR:
-[What goes wrong when that command line is run? For example, `gtroff
-gets a segmentation fault', or `The output looks bad because the bar
-over the x is too long and is too far over to the left.' If you get an
-error message, include it here without modification: Don't edit it to
-make it more readable.]
-
-SUGGESTED FIX [optional]:
-[If you can suggest a fix for the problem, include a context diff here.
-But don't delay sending in a bug report in the hope of finding a fix.
-Guesses about the cause of the bug are not usually helpful.]
diff --git a/contrib/groff/COPYING b/contrib/groff/COPYING
deleted file mode 100644
index b2fe7b6af353..000000000000
--- a/contrib/groff/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/contrib/groff/ChangeLog b/contrib/groff/ChangeLog
deleted file mode 100644
index 2155a818a6bf..000000000000
--- a/contrib/groff/ChangeLog
+++ /dev/null
@@ -1,5253 +0,0 @@
-2005-09-04 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_ms.man, doc/groff.texinfo: Synchronize.
-
- * doc/webpage.ms: Updated.
-
- * install-sh, mkinstalldirs: New versions; taken from texinfo CVS.
-
-2005-09-04 Jörgen Grahn <jgrahn@algonet.se>
-
- * tmac/groff_ms.man: Document `PO' better.
-
-2005-09-03 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Document grotty changes.
-
-2005-09-01 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Backward compatibility support for `man' program.
-
- * tmac/an-old.tmac (LL): Initialize it to respect prior LL register
- assignment, prior `.ll' request and then package defaults, in this
- specified order of decreasing priority.
-
- * tmac/groff_man.man, doc/groff.texinfo: Document altered `LL'
- register initialization priorities.
-
-2005-08-29 Gary W. Swearingen <garys@opusnet.com>
-
- * tmac/groff_mdoc.man: Go into more details how the `AUTHORS'
- section should look like.
-
-2005-08-29 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_mdoc.man: The month's name in a call to .Dd shouldn't
- be abbreviated.
-
-2005-08-27 Bernd Warken
-
- * tmac/groff_man.man: Add man(7) too SEE ALSO and more minor
- fixes.
-
-2005-08-11 Bernd Warken
-
- * tmac/www.tmac (URL, MTO): Handle empty \\$1 better.
-
-2005-08-09 Bernd Warken
-
- * tmac/www.tmac (URL, MTO): Use bold series if color support is
- deactivated.
-
-2005-08-02 Bernd Warken
-
- * doc/Makefile.sub (uninstall_sub): Use --remove, not --delete
- as argument to $(INSTALL_INFO). The latter isn't portable.
- Remove $(HTMLEXAMPLEFILES) too.
-
- * Makefile.in (uninstall_dirs): Remove $(datadir)/doc/groff and
- $(datadir)/doc too.
- Suppress warning messages and return always true.
-
- * tmac/Makefile.sub (uninstall_sub): Remove www.tmac too.
-
-2005-07-02 Bernd Warken
-
- * src/devices/xditview/gxditview.man: Change many `.I' to `.B'.
- * man/groff_out.man: More markup and minor improvements.
- * src/roff/groff/groff.man: Minor improvements.
-
-2005-06-28 Werner LEMBERG <wl@gnu.org>
-
- * ChangeLog: Split off older entries into...
- * ChangeLog.115 ChangeLog.116, ChangeLog.117, ChangeLog.118: New
- files.
-
-2005-06-26 Bernd Warken
-
- * src/devices/xditview/gxditview.man: More minor fixes.
-
-2005-06-24 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/troff.cpp (troff_output::set_fill,
- troff_output::set_color, troff_output::reset_color): Use .bcolor and
- .fcolor instead of \m and \M, respectively.
-
-2005-06-23 Bernd Warken
-
- * src/devices/xditview/gxditview.man: More minor fixes.
- * README: Formatting issues.
- Mention some problems with Debian.
-
-2005-06-23 Bernd Warken
-
- * src/devices/xditview/gxditview.man: Revised and improved.
-
-2005-06-22 Werner LEMBERG <wl@gnu.org>
-
- Another round in fixing getopt problems. Hopefully the last one!
- This time we use the getopt stuff from gnulib and define a prefix
- unconditionally so that there are no collisions with any other
- getopt implementations. This is a slight waste of space in case
- we already use a GNU getopt implementation, but on
- the other hand it really simplifies life.
-
- * src/include/getopt.h: Use gnulib version.
-
- * src/include/getopt_int.h: Use gnulib version.
-
- * src/include/groff-getopt.h: Removed. Obsolete now.
-
- * src/include/lib.h: Regarding getopt, don't handle any platform
- specially; just include getopt.h.
- (__GETOPT_PREFIX): Define (before getopt.h).
-
- * src/include/Makefile.sub (HDRS): Updated.
-
- * src/libs/libgroff/getopt1.c, src/libs/libgroff/getopt.c: Use
- gnulib version.
-
- * src/libs/libgroff/Makefile.sub (EXTRA_CFLAGS): Set
- __GETOPT_PREFIX.
-
- * src/utils/pfbtops/pfbtops.c, src/utils/xtotroff/xtotroff.c
- (__GETOPT_PREFIX): Define (before getopt.h).
-
-2005-06-21 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Provide a fix for Mac OS X to not include
- groff-getopt.h.
-
-2005-06-20 Denis M. Wilson <dmw@oxytropis.plus.com>
-
- * font/devps/prologue.ps (EP): Dont' use `bind'. Reason: Using
- `bind' to define a procedure which contains `showpage' means that an
- invocation of `showpage' may execute wrongly (the exact effect
- depending on the interpreter). Not usually a problem except under
- transformations, such as combining pages.
- (PEND): Don't call `clear'. Reason: Using `clear' in the definition
- of /PEND means that stack underflow will occur if the stack is
- deliberately non-empty before document inclusion. If included
- files are found to be generally badly behaved, we could replace the
- `clear' with `mark' in /PBEGIN and `cleartomark' in /PEND (I've
- never found this necessary).
-
-2005-06-20 Jörgen Grahn <jgrahn@algonet.se>
-
- * src/preproc/soelim/soelim.cpp (do_file): Append trailing zero
- earlier to get correct error message.
-
-2005-06-16 Bernd Warken
- * src/roff/nroff/nroff.sh: Add support for iso-8859-15.
-
-2005-06-15 Werner LEMBERG <wl@gnu.org>
-
- Another try to update getopt files. This time we add a dummy
- gettext.h file to satisfy the dependency.
-
- * src/include/getopt.h, src/libs/libgroff/getopt.c,
- src/libs/libgroff/getopt1.c: Updated from GNU libc CVS.
-
- * src/include/getopt_int.h: New file (from GNU libc CVS).
-
- * src/include/gettext.h: Dummy file which just defines a gettext()
- macro.
-
- * src/include/groff-getopt.h: Updated.
-
- * src/include/Makefile.sub (HDRS): Add getopt_int.h and gettext.h.
-
-
- * src/libs/libdriver/input.cpp (IntArray): Remove superfluous
- `const' keywords in return value.
-
- * src/preproc/html/pushback.cpp (pushBackBuffer::~pushBackBuffer):
- Remove redundant variable `old'.
- (pushBackBuffer::skipToNewline): Remove redundant variable `ch'.
-
- * src/preproc/tbl/main.cpp (process_table): Remove redundant
- variable `c'.
-
-
- Fix more friend name injection problems since modern C++ compilers
- fail otherwise. We simply provide (global) declarations for all
- functions declared as friends. This is not really necessary but
- doesn't harm.
-
- * src/preproc/eqn/lex.cpp: Provide declarations for get_char,
- peek_char, and get_location.
-
- * src/preproc/refer/ref.h: Provide declarations for
- compare_reference, same_reference, same_year, same_date,
- same_author_last_name, and same_author_name.
-
- * src/roff/troff/div.h: Provide declarations for do_divert and
- page_offset.
-
- * src/roff/troff/env.h: Provide declarations for title_length,
- space_size, fill, no_fill, adjust, no_adjust, center, right_justify,
- vertical_spacing, post_vertical_spacing, line_spacing, line_length,
- indent, temporary_indent, do_underline, do_input_trap, set_tabs,
- margin_character, no_number, number_lines, leader_character,
- tab_character, hyphenate_request, no_hyphenate,
- hyphen_line_max_request, hyphenation_space_request,
- hyphenation_margin_request, line_width, tabs_save, tabs_restore,
- line_tabs_request, widow_control_request, and do_divert.
-
- * src/roff/troff/input.cpp: Provide declaration for chop_macro.
-
- * src/roff/troff/node.cpp: Provide declarations for class
- tfont_spec.
- Provide declaration for make_tfont.
-
-2005-05-29 Werner LEMBERG <wl@gnu.org>
-
- * doc/fdl.texi: Updated to version 1.2. Reported by Bernd Warken.
-
-2005-05-28 Werner LEMBERG <wl@gnu.org>
-
- * contrib/pdfmark/Makefile.sub (.ms.pdf): Use `--stylesheet', not
- `--style'.
-
- * src/devices/grolbp/lbp.cpp, src/devices/grolbp/lbp.h: Remove
- redundant semicolons.
-
- * src/preproc/eqn/Makefile.sub, src/preproc/html/Makefile.sub,
- src/preproc/soelim/Makefile.sub, src/preproc/tbl/Makefile.sub:
- Define `MLIB'. Some compilers need this for linking with libgroff.
-
-2005-05-27 Werner LEMBERG <wl@gnu.org>
-
- * MANIFEST, README, doc/webpage.ms: Updated.
-
-2005-05-26 Werner LEMBERG <wl@gnu.org>
-
- * All affected files: Update postal address of FSF.
-
-2005-05-25 Keith Marshall <keith.d.marshall@ntlworld.com>
- Bernd Warken
-
- * README: More fixes.
-
- * README.CVS: Removed. Its contents is now part of the README file.
-
-2005-05-21 Werner LEMBERG <wl@gnu.org>
-
- * README: Updated. Based on a patch from Bernd Warken.
-
-2005-05-16 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Miscellaneous script portability enhancements.
-
- * aclocal.m4: (GROFF_CSH_HACK): Add space in shebang prototype for
- generated conftest.sh script, conforming to portability
- recommendation in autoconf docs.
- * configure: Likewise, for code generated by GROFF_CSH_HACK.
- * contrib/eqn2graph/eqn2graph.sh: Add space in shebang, conforming
- to portability recommendation in autoconf docs.
- * contrib/gdiffmk/gdiffmk.sh: Likewise.
- * contrib/gdiffmk/tests/runtests.in: Likewise.
- * contrib/grap2graph/grap2graph.sh: Likewise.
- * contrib/groffer/groffer.sh: Likewise.
- * contrib/mm/mmroff.pl: Likewise.
- * contrib/mom/momdoc/appendices.html: Likewise.
- * contrib/pic2graph/pic2graph.sh: Likewise.
- * font/devps/generate/afmname: Likewise.
- * src/devices/xditview/ad2c: Likewise.
- * src/preproc/eqn/neqn.sh: Likewise.
- * src/roff/grog/grog.pl: Likewise.
- * src/roff/grog/grog.sh: Likewise.
- * src/roff/nroff/nroff.sh: Likewise.
- * PROBLEMS: Likewise, in embedded script examples.
-
-2005-05-16 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Improve portability of `pdfroff' shell script.
-
- * arch/misc/shdeps.sh: Add space in shebang, conforming to
- portability guidelines in `autoconf' docs.
- (PATH_SEARCH_SETUP): New substitution; emits PATH_SEPARATOR
- initialization code. Used by contrib/pdfmark/pdfroff.sh's
- `searchpath' function.
-
-2005-05-14 Werner LEMBERG <wl@gnu.org>
-
- * contrib/pic2graph/pic2graph.sh, contrib/graph2graph.sh,
- contrib/eqn2graph.sh: Add option `-trim' to `convert' which is
- needed for newer ImageMagick versions.
-
-2005-05-07 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/refer/refer.man: Many small typographic fixes.
-
-2005-05-06 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/devices/grohtml/post-html.cpp (assert_state::~assert_state):
- Use `char *' cast for a_delete.
-
-2005-05-03 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/maxpathname.cpp: Include stdlib.h.
- src/libs/libgroff/relocate.cpp: Use path_name_max everywhere.
-
-2005-05-03 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/devices/grohtml/post-html.cpp: Use casts to `char *' if using
- `a_delete' for `const char *'.
-
-2005-05-03 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/post-html.cpp,
- src/devices/grohtml/html-table.cpp,
- src/devices/grohtml/html-text.cpp, src/devices/grohtml/output.cpp:
- Replace malloc/free with new/delete/a_delete.
-
- * src/devices/grolbp/lbp.h: Remove superfluous semicolons which
- are prohibited with ANSI C++.
- (lbpprintf, vdmprintf): Remove useless `inline' keyword (since the
- function has a variable number of arguments).
-
- * src/preproc/grn/main.cpp (doinput): Change return type to `int'.
- Simplify function and update all callers.
-
-2005-05-02 Werner LEMBERG <wl@gnu.org>
-
- Undo getopt changes from 2005-04-30. We don't want a dependency
- on gettext.
-
- * src/include/getopt_int.h: Removed.
-
- * src/include/getopt.h, src/include/groff-getopt.h,
- src/include/Makefile.sub, src/libs/libgroff/getopt.c,
- src/libs/libgroff/getopt1.c: Revert to previous version.
-
-
- * src/include/nonposix.h (access) [_MSC_VER]: New macro.
-
- * src/include/posix.h (F_OK): Define conditionally.
-
- * src/devices/grotty/tty.cpp (tty_printer::make_underline): Use
- different variable name in second `for' loop to avoid MSVC compiler
- problem.
-
-2005-04-30 Werner LEMBERG <wl@gnu.org>
-
- AC_TYPE_SIGNAL from current autoconf can fail if CC=g++.
-
- * aclocal.m4 (GROFF_TYPE_SIGNAL): New function.
- * configure.ac: Use GROFF_TYPE_SIGNAL, not AC_TYPE_SIGNAL.
- * configure, src/include/config.hin: Regenerated.
-
- * PROBLEMS: Updated.
-
-
- Update getopt files.
-
- * src/include/getopt.h, src/libs/libgroff/getopt.c,
- src/libs/libgroff/getopt1.c: Updated from GNU libc CVS.
-
- * src/include/getopt_int.h: New file (from GNU libc CVS).
-
- * src/include/groff-getopt.h: Updated.
-
- * src/include/Makefile.sub (HDRS): Add getopt_int.h.
-
-
- * font/devutf8/NOTES: Updated.
-
-2005-04-28 Werner LEMBERG <wl@gnu.org>
-
- Bug fix for Win32 relocatable code. Based on a patch from Keith
- Marshall.
-
- * src/libs/libgroff/maxpathname.cpp (PATH_MAX): Test for `_MAX_PATH'
- also.
-
- * src/libs/libgroff/relocate.c (DEBUG): Define it conditionally.
- (searchpath) [_WIN32]: Use `_fullpath', not `realpath'.
-
-2005-04-28 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Correct `gnu.eps' handling for build from distribution tarball, with
- separate source and build directories.
-
- * doc/Makefile.sub: (examples.stamp): New target; forces copy of
- grnexmpl.g, groff.css and gnu.eps from source to build directory;
- generate gnu.eps from gnu.xpm if required; touch examples.stamp.
- (prepare_examples): Make it depend on examples.stamp.
- (CLEANADD): Add examples.stamp.
-
-2005-04-27 Werner LEMBERG <wl@gnu.org>
-
- Implement the rule
-
- position: '(' position ')'
-
- in pic.
-
- * src/preproc/pic/pic.y (position, position_not_place): Handle
- additional parentheses.
-
- * doc/pic.ms: Updated.
-
-2005-04-23 Larry Jones <lawrence.jones@ugs.com>
-
- * src/utils/xtotroff/xtotroff.c (MapFont): Fix variable declaration.
-
-2005-04-18 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/pipeline.c: Don't include ctype.h.
-
-2005-04-13 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/nroff/nroff.man: Document option `-M'.
-
-2005-04-13 Bruce Lilly <blilly@erols.com>
-
- * src/roff/nroff/nroff.sh: Make the script accept option `-M'.
-
-2005-04-01 Kees Zeelenberg <kzlg@users.sourceforge.net>
- Werner LEMBERG <wl@gnu.org>
-
- Add binary relocation support for Windows platforms.
-
- * src/include/Makefile.sub (defs.h): Add `INSTALLPATH'.
-
- * src/include/relocate.h, src/libs/libgroff/relocate.cpp: New files.
-
- * src/libs/libgroff/searchpath.cpp: Handle `relocate'.
- (search_path::search_path, search_path::open_file_cautious): Use
- `relocate'.
-
- * src/libs/libgroff/Makefile.sub (OBJS, CCSRCS),
- src/include/Makefile.sub (HDRS): Updated.
-
-2005-04-01 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/post-html.cpp: Don't use strdup/free but
- strsave/a_delete.
-
- * src/libs/libgroff/font.cpp: Replace strdup with strsave.
-
- * src/libs/libgroff/maxfilename.cpp: Don't include limits.h since
- lib.h already does it.
-
- * src/libs/libgroff/maxpathname.cpp: New file, defining
- path_name_max.
-
- * src/include/lib.h: Add prototype for path_name_max.
-
- * src/libs/libgroff/Makefile.sub (OBJS, CCSRCS): Updated.
-
- * src/include/nonposix.h (PATH_EXT): New macro.
-
-2005-03-28 Werner LEMBERG <wl@gnu.org>
-
- Add support for double- and zero-width characters in grotty.
-
- * src/devices/grotty/tty.cpp (glyph): Add width.
- (tty_printer::make_underline, tty_printer::make_bold,
- tty_printer::add_character): Add parameter to pass character width.
- Update all callers.
- (tty_printer::end_page): Increase hpos by actual character width.
-
- * font/devutf8/R.proto: Specify zero width for non-spacing
- characters.
-
- * tmac/unicode.tmac: Remove definitions for non-spacing entities.
-
- * Makefile.comm (extraclean): Remove more junk files.
-
-2005-03-25 Werner LEMBERG <wl@gnu.org>
-
- * configure.ac: Undo change from 2005-03-24.
- * configure: Regenerated.
-
-2005-03-24 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (NOMAKEDIRS): Add contrib/gdiffmk/tests.
- (dist): Search Makefile while descending into $(EXTRADIRS).
-
- * doc/Makefile.in (.PHONY): Add.
- (clean): Don't remove *.png and *.eps.
- Don't handle *.gif.
- (realclean): Remove *.png and *.eps.
- (extraclean): Depend on distclean.
-
- * configure.ac: Add copyright.
- Handle contrib/pdfmark/Makefile.
-
- * configure: Regenerated.
-
-2005-03-18 Larry Kollar <kollar@alltel.net>
-
- Add numbered and definition lists to www.tmac.
-
- * tmac/www.tmac (www-ul-level1, www-ul-level2, www-ul-level3,
- www-ol-level1, www-ol-level2, www-ol-level3, www-ol-tmp): New
- auxiliary string registers.
- (www-ul-level, www-ol-level, www-dl-level, www-ol-ctr1, www-ol-ctr2,
- www-ol-ctr3, www-dl-shift): New auxiliary number registers.
- (www-level): Removed.
- (www-level1, www-level2, www-level3): Initialize to empty.
- (www-level0, www-level4, www-level5, www-level6, www-level7,
- www-level8, www-level9): New string registers.
- (www-push-li, www-pop-li): New macros.
- (www-push-level, www-pop-level): Renamed to...
- (www-push-ul-level, www-pop-ul-level): This.
- Updated.
- (www-push-ol-level, www-pop-ol-level): New macros.
- (ULS, ULE): Updated.
- (OLS, OLE, DLS, DLE): New user macros.
- (LI): Removed. It is aliased to one of...
- (www-li-ul, www-li-ol, www-li-dl): New macros.
-
- * tmac/groff_www.man: Document new macros.
-
- * NEWS: Updated.
-
-2005-03-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-common (doc-operating-system-NetBSD-2.0.1,
- doc-operating-system-NetBSD-2.0.2): New strings.
-
- * tmac/groff_mdoc.man: Updated.
-
-2005-03-17 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.sub (CLEANADD): Add `groff.html'.
-
-2005-03-17 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/hypot.c: Renamed to...
- * src/libs/libgroff/hypot.cpp: This. Updated to C++.
-
- * src/libs/libgroff/Makefile.sub (CCSRCS, CSRCS): Updated.
-
- * src/include/lib.h: Updated.
-
-2005-03-16 Werner LEMBERG <wl@gnu.org>
-
- Add workaround for broken hypot() on Interix.
-
- * src/libs/libgroff/hypot.c: New wrapper file for `hypot'.
-
- * src/libs/libgroff/Makefile.sub (OBJS): Add `hypot.o'.
- (CSRCS): Add `hypot.c'.
-
- * src/include/lib.h: Declare `groff_hypot'.
-
- * src/preproc/grn/hgraph.cpp: Don't declare `hypot'.
- Use `groff_hypot'.
-
- * src/preproc/pic/pic.h: Don't declare `hypot'.
-
- * src/preproc/pic/object.cpp (hypot): Use `groff_hypot'.
-
-2005-03-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cpp
- (html_printer::lookahead_for_tables): End .ce properly to avoid a
- segfault.
-
-2005-03-15 Werner LEMBERG <wl@gnu.org>
-
- makeinfo 4.8 doesn't produce good HTML output from groff.texinfo.
-
- * doc/fixinfo.sh: New script to postprocess makeinfo's HTML output.
-
- * doc/Makefile.in (.texinfo.html): Call fixinfo.sh.
-
-2005-03-14 Werner LEMBERG <wl@gnu.org>
-
- Add Cyrillic support to devutf8 and devhtml.
-
- * font/devutf8/R.proto, font/devhtml/R.proto: Add Cyrillic blocks.
-
- * tmac/unicode.tmac: New file.
-
- * tmac/tty.tmac: Include unicode.tmac if device is utf8.
-
- * tmac/Makefile.sub (NORMALFILES): Add unicode.tmac.
-
- * NEWS: Updated.
-
-2005-03-02 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/libs/libdriver/printer.cpp (check_for_output_error): New
- function. It has been introduced to catch peculiar error contexts
- on MS-Windows platforms.
-
-2005-02-28 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cpp (string_iterator::fill): Protect against
- null pointer.
-
- * tmac/papersize.tmac: Convert `paper' string contents to lowercase.
-
- * configure: Regenerated.
-
- * NEWS: Updated.
-
-2005-02-28 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Integrate `pdfmark' into normal groff build system;
- install macro `pdfmark' packages, build and install `pdfroff',
- and PDF format documentation.
-
- * Makefile.comm: Add PDFDOCDIR.
-
- * Makefile.in: (MDEFINES) ALT_AWK_PROGS, ALT_GHOSTSCRIPT_PROGS,
- pdfdocdir, make_pdfdoc, make_install_pdfdoc: New variables.
- (unstall_dirs): Add pdfdocdir.
-
- * aclocal.m4: (GROFF_GHOSTSCRIPT_PREFS): New function; support
- `--with-alt-gs' option, set ALT_GHOSTSCRIPT_PROGS.
- (GROFF_GHOSTSCRIPT_PATH): Support `--with-gs' option, force use of
- GROFF_GHOSTSCRIPT_PREFS, set GHOSTSCRIPT.
- (GROFF_HTML_PROGRAMS): Force use of GROFF_GHOSTSCRIPT_PATH; tidy up.
- (GROFF_AWK_PREFS): New function; support `--with-alt-awk' option,
- set ALT_AWK_PROGS.
- (GROFF_AWK_PATH): New function; support `--with-awk' option, force
- use of GROFF_AWK_PREFS.
- (GROFF_PDFDOC_PROGRAMS): New function; force use of GROFF_AWK_PATH
- and GROFF_GHOSTSCRIPT_PATH, set make_pdfdoc and make_install_pdfdoc.
-
- * configure.ac: Add AC_PREREQ(2.59), GROFF_PDFDOC_PROGRAMS.
- Remove GROFF_GHOSTSCRIPT_PATH, (forced by GROFF_PDFDOC_PROGRAMS, and
- also by modified GROFF_HTML_PROGRAMS).
-
-2005-02-27 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/html-text.cpp (html_text::do_pre): Preserve
- paragraph spacing.
- (html_text::done_para): Unset `start_space'.
- (html_text::remove_para_align): Call `retrieve_para_space' for the
- spacing.
-
- * src/devices/grohtml/post-html.cpp (html_printer::emit_raw): Unset
- `seen_space'.
- (html_printer::do_check_center): Emit vertical space if necessary.
-
- * src/roff/troff/env.cpp (environment_switch): Preserve
- `seen_space', `seen_eol', and `suppress_next_eol' while switching
- environments.
-
- * src/roff/troff/node.cpp (suppress_node::suppress_node): Set
- `is_special'.
-
-2005-02-20 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/eqn/eqn.man, NEWS: Document various extensions of
- eqn.
-
-2005-02-17 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms, man/groff.man: Fix typos.
-
- * doc/groff.texinfo: Fix typos.
- (\LEmacro): Get proper mathematical spacing.
-
-2005-02-16 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_APPRESDIR_CHECK): Improve warning message.
- * configure: Regenerated with autoconf 2.59b.
-
-2005-02-16 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cpp (html_printer::is_line_start,
- html_printer::start_font): Fix handling of preformatted text.
-
-2005-02-15 Gaius Mulley <gaius@glam.ac.uk>
-
- These patches modify the indentation implementation to use `<p
- style=margin-left: n%>'. Many thanks to Peter and Larry for
- suggesting this solution. Grohtml only uses tables for `.IP' and
- related tags when the first operand has a short width.
-
- Similarly, they modify all vertical space code. By default, grohtml
- sets up a style sheet which uses no vertical space between `table',
- `pre', and `p' tags. It forces spaces when it needs them using
- `style="margin-top: 1em"'.
-
- * src/devices/grohtml/html-table.cpp: Include `html-text.h'.
- (html_table::emit_table_header, html_table::emit_new_row):
- Rewritten.
- (html_table::set_space): New function.
- (html_indent::html_indent): Don't set `is_used'.
- (html_indent::begin): Rewritten.
- (html_indent::end): Remove code in function.
-
- * src/devices/grohtml/html-table.h: Updated.
- (html_table): Make `out' public.
-
- * src/devices/grohtml/html-text.cpp (html_text::html_text):
- Initialize `start_space' with FALSE.
- (html_text::end_tag) <P_TAG, PRE_TAG>: Updated.
- (html_text::issue_tag): Add argument to handle space style.
- (html_text::start_tag) <P_TAG, PRE_TAG>: Updated.
- (html_text::flush_text): Don't set `start_space'.
- (html_text::push_para): Don't set `p->really_issued'.
- (html_text::do_emittext): Updated.
- (html_text::do_para): Add paremeter to handle space.
- Update all callers.
- (html_text::retrieve_para_space): New function.
-
- * src/devices/grohtml/html-text.h (STYLE_VERTICAL_SPACE): New macro.
- (tag_definition): Remove `really_issued'.
- (html_text): Updated.
-
- * src/devices/grohtml/post-html.cpp (html_printer): Add variables
- `current_column' and `row_space'.
- Update constructor.
- (html_printer::emit_raw, html_printer::write_header,
- html_printer::do_indent, html_printer::do_check_center,
- html_printer::do_tab_ts): Handle vertical space.
- (html_printer:do_tab_te, html_printer::do_end_para): Call
- `remove_para_space'.
- (html_printer::do_col): Rewritten.
- (html_printer::flush_globs): Remove debugging code.
- (html_printer::is_line_start): New function.
- (html_printer::start_font): Use `is_line_start'.
- (html_printer::writeHeadMetaStyle): New function.
- (html_printer::do_file_components, html_printer::~html_printer):
- Call `writeHeadMetaStyle'.
-
- * tmac/www.tmac (www-handle-percent): New macro.
- (MPIMG): Handle percent values for width and height parameters.
- (DC): Updated.
-
- * tmac/groff_www.man: Updated.
-
-2005-02-14 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.pl: Remove an incorrect `my' from
- $psname and $italic_angle.
- Immediately restart file input loops if `split' returns an empty
- array.
-
-2005-02-13 Michail Vidiassov <master@iaas.msu.ru>
- Werner LEMBERG <wl@gnu.org>
-
- Update afmtodit to better support Unicode (Michail).
- Update afmtodit to use Perl 5 syntax (Werner).
-
- * src/utils/afmtodit/afmtodit.pl: Don't use `getopts.pl' but
- `Getopts::Std'.
- Decorate variables with `my' where necessary.
- Use `defined' where necessary to avoid warnings.
- Don't use `do' for subroutine calls.
- Other minor syntax updates.
- Check for both `uXXXX[X[X]]' and `uniXXXX'.
- Handle glyph variants properly.
- (%unicode_decomposed, %AGL_to_unicode): Don't use `u' prefix in
- strings.
-
- * src/utils/afmtodit/afmtodit.man: Updated.
-
-2005-02-13 Werner LEMBERG <wl@gnu.org>
-
- Make groff.texinfo work with texinfo 4.8.
-
- * doc/groff.texinfo (@Var): Use @r and @slanted.
- (@defdummy, @Def*): Use @c to avoid empty lines.
- (\angles): Replaced with...
- (\Langlemacro, \Ranglemacro): New TeX macros.
- (@Langlemacro, @Ranglemacro): New variables defined with @set.
- (@angles): Use @Langlemacro and @Ranglemacro.
- (\LE): Replaced with...
- (\LEmacro): New TeX macro.
- (@LEmacro): New variable defined with @set.
- (@LE): Use @LEmacro.
- (@Lparenmacro, @Rparenmacro, @Lbrackmacro, @Rbrackmacro): New
- variables defined with @set.
- (@lparen, @rparen, @lbrack, @rbrack): Replaced with...
- (@Lparen, @Rparen, @Lbrack, @Rbrack): New macros.
- Update all callers.
-
- Other minor updates.
-
- * doc/texinfo.tex: Update to texinfo version 4.8.
-
- * README.CVS: Updated.
-
-2005-02-09 Alejandro López-Valencia <palopez@etb.net.co> (tiny change)
-
- * doc/groff.texinfo (ms Document Control Registers): Document `HY'
- and `FAM' registers.
-
-2005-02-05 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_mdoc.man, tmac/doc-common, tmac/doc-ditroff,
- tmac/doc-nroff, tmac/doc-old.tmac, tmac/doc-syms, tmac/doc.tmac:
- Update BSD license.
-
-2005-02-01 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man: Add information about paper size.
-
-2005-01-25 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/nroff/nroff.sh: Handle `*.ISO8859-1' in locale. From
- NetBSD bin/29114.
-
-2005-01-22 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Sm): Improved. It didn't work properly in many
- cases.
- (Re): Emit a warning if called without `.Rs'.
- (doc-finish-reference): Use parameter for decreasing
- `doc-reference-count'.
- (doc-print-reference): Pass specific count parameters to
- `doc-finish-reference'.
-
-2005-01-21 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libdriver/input.cpp (delete_current_env, do_file):
- Reset pointers to zero after deallocation. This fixes a crash
- if a driver is called with multiple input files. Reported by
- Ken Chilton <ken@chiltonfamily.org>.
-
- * src/devices/grops/grops.man: Add more info on DSC.
-
-2005-01-17 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (Dd), tmac/doc-ditroff (gX, doc-setup-header):
- Remove dead code.
-
-2005-01-17 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/div.cpp (top_level_diversion::space): Protect
- against division by zero.
-
-2005-01-13 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Ef): Restore doc-curr-font and doc-curr-size.
-
-2004-12-19 Werner LEMBERG <wl@gnu.org>
-
- * install-sh: New version; taken from texinfo CVS.
-
-2004-12-17 Werner LEMBERG <wl@gnu.org>
-
- * tmac/devtag.tmac: Protect against loading twice.
- Protect agains compatibility mode.
- * tmac/www.tmac: Protect against loading twice.
- Load `devtag.tmac' before switching off compatibility mode.
- * tmac/an-old.tmac, tmac/s.tmac: Load `devtag.tmac'.
-
-2004-12-16 Mike Bianchi <mbianchi@Foveal.com>
-
- * configure.ac: Produce `contrib/gdiffmk/tests/runtests'.
- * configure: Updated.
-
-2004-12-15 Thomas Klausner <wiz@netbsd.org>
-
- * tmac/doc-syms, tmac/groff_mdoc.man: Add `libpam' library.
-
-2004-12-15 Werner LEMBERG <wl@gnu.org>
-
- Make `test-groff' work again -- previously, wrong paths have been
- used. Additionally, it can now be called from anywhere.
-
- * test-groff.in: Don't test for groff binary. This is no longer
- necessary since the proper paths are determined by `configure'.
- (EXEEXT): Removed. No longer used.
- (srcdir, builddir): Use values provided by the configure script.
- (XENVIRONMENT): Updated.
-
- * INSTALL: Updated.
-
-2004-12-14 Gaius Mulley <gaius@glam.ac.uk>
-
- Make .tag and .taga work for all devices (but only grohtml actually
- handles them).
-
- * src/devices/grohtml/post-html.cpp: s/html-tag/devtag/.
- (text_glob::is_br, page::add_tag, html_printer::troff_tag,
- html_printer::handle_assertion): Don't use hard-coded string
- lengths.
- (html_printer::lookahead_for_table): Reset `tbl' properly if
- necessary.
- (html_printer::devtag): New function, handling `devtag'.
- (html_printer::special): Don't handle `html-tag'.
-
- * src/include/printer.h, src/libs/libdriver/printer.cpp
- (printer::devtag): New virtual function.
-
- * src/libs/libdriver/input.cpp (parse_x_command) <'X'>: Handle
- `devtag'.
-
- * src/roff/troff/env.cpp, src/roff/troff/mtsm.cpp,
- src/roff/troff/node.cpp: s/html-tag/devtag/.
-
- * src/roff/troff/input.cpp (tag, taga): Always call
- curenv->add_node.
-
- * tmac/an-old.tmac, tmac/s.tmac, tmac/troffrc-end: Use DEVTAG*
- macros instead of HTML-TAG*.
-
- * tmac/devtag.tmac: New file, defining the DEVTAG-* macros.
-
- * tmac/www.tmac: Load devtag.tmac.
- Replace HTML-TAG* macros with DEVTAG* macros.
- (HTML, HTML-NS): Changed definitions.
- (URL): Use HTML-NS.
- (HTML-TAG, HTML-TAG-NS, HTML-TAG-NEXT): Removed.
-
- * tmac/Makefile.sub (NORMALFILES): Add devtag.tmac.
-
-2004-12-10 Werner LEMBERG <wl@gnu.org>
-
- Import Mike's `gdiffmk' package.
-
- * contrib/gdiffmk/*: New files.
- * Makefile.in (OTHERDIRS): Add contrib/gdiffmk.
- * NEWS: Updated.
-
-2004-12-08 Werner LEMBERG <wl@gnu.org>
-
- Import Keith's `pdfmark' package. Integration is very preliminary.
-
- * contrib/pdfmark/*: New files.
- * Makefile.in (OTHERDIRS): Add contrib/pdfmark.
- * NEWS: Updated.
-
-2004-12-07 Gaius Mulley <gaius@glam.ac.uk>
-
- Fix a bug with title handling in HTML.
-
- * src/devices/grohtml/post-html.cpp (text_glob::is_nf,
- text_glob::is_fi, text_glob::is_ce): Use strlen to compute string
- length.
- (html_printer::handle_tag_within_title): New function.
- (html_printer::do_title): Use it.
-
- * tmac/s.tmac (TL): Don't set `need_eo_tl'.
- (cov*tl-au-print): Emit `.eo.tl' tag.
-
-2004-12-05 Alejandro López-Valencia <dradul@etb.net.co>
-
- * man/groff_char.man: Minor imrovements.
-
-2004-12-04 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/eqn/eqn.man: Revised.
-
-2004-11-25 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/xtotroff/xtotroff.c: Reformat to be similar to other
- groff source files.
- Include config.h.
- Include limits.h.
- Remove X_NOT_STDC_ENV conditional.
- (Version_string, program_name): New global variables.
- (groff_flag): Removed.
- (MapFont): Updated.
- (usage): Take a stream as argument.
- Use `program_name'.
- Update all callers.
- (main): Add `long_options' array for `--help' and `--version'.
- Make `-g' a dummy option.
- Handle `-v' and unknown options.
- Remove unused `position' variable.
-
- * src/utils/xtotroff/Makefile.sub (MAN1): Define.
- (XLIBS): Add LIBGROFF.
-
- * src/utils/xtotroff/xtotroff.man, src/utils/xtotroff/Makefile.in:
- New files.
-
- * src/devices/xditview/Dvi.c (default_font_map): Split into three
- parts to avoid compiler warning.
- (resources): Don't initialize with `default_font_map'.
- (ClassInitialize): Initialize first element of `resources'.
-
- * src/devices/xditview/Makefile.sub (devdir, xtotroff, DPIS, fonts):
- Removed.
-
- * src/utils/lkbib/lkbib.man, src/utils/lookbib/lookbib.man,
- src/utils/pfbtops/pfbtops.man: Revised, updated.
-
- * configure.ac: Generate src/utils/xtotroff/Makefile.
- * configure: Regenerated.
-
-2004-11-24 Werner LEMBERG <wl@gnu.org>
-
- First fixes to get produce HTML.
-
- * src/devices/grohtml/post-html.cpp (generate_img_src): Add `alt'
- attribute.
-
- * tmac/www.tmac (IMG, PIMG, MPIMG): Add `alt' attribute.
- (HR, LI): Use `HTML</p>', not `HTML'.
-
- * doc/webpage.ms: Minor updates.
-
-2004-11-23 Larry Kollar <kollar@alltel.net>
-
- Add option -S grohtml to determine the file split level.
-
- * src/devices/grohtml/post-html.cpp (split_level): New global
- variable.
- (html_header::determine_header_level): Use split_level.
- (main): Handle `-S' command line option.
- Sort options.
-
- * src/preproc/html/pre-html.cpp (scanArguments): Updated.
-
- * src/devices/grohtml/grohtml.man: Document it.
- Sort options.
-
- * NEWS: Document it.
-
-2004-11-23 Y T <doarhop@hotmail.com>
-
- * tmac/s.tmac (ref*add-V, ref*add-N): New macros for handling
- the volume and number refer entries.
-
-2004-11-22 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/html-table.cpp
- (html_table::emit_table_header): Don't emit `cols' attribute which
- doesn't exist in HTML 4.0 and is thus invalid.
-
- * NEWS: More minor fixes and updates.
-
-2004-11-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac (HTML-NS, HTML-TAG-NS, HTML-TAG-NEXT): Simplified.
- (HTML</p>): Minor clean-up.
-
- * tmac/groff_www.man: Updated.
-
- * src/devices/grohtml/grohtml.man: Revised and updated.
-
- * NEWS: Updated.
-
-2004-11-18 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cpp (html_printer::do_heading):
- Fix space insertion.
- (html_printer::do_links): Fix rules generation around automatic
- heading links.
-
- * tmac/www.tmac (LK): Use HTML-TAG-NS.
- (HR): Simplify.
- No longer emit empty line for non-HTML devices.
-
-2004-11-17 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.in (prepare_examples, webpage.html): Handle
- `groff.css'.
-
- * doc/Makefile.sub (EXAMPLEFILES, CLEANNOTSRCDIRADD,
- prepare_examples, webpage.html): Handle `groff.css'.
-
-2004-11-15 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, README, doc/webpage.ms: Updated.
-
- * tmac/www.tmac (HTML, HTML-TAG): Minor clean-ups.
-
-2004-10-30 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/include/printer.h (printer): Remove virtual function
- `round_width'.
- Update all source files.
-
- * src/devices/grohtml/post-html.cpp (html_printer): New member
- function `round_width'.
-
-2004-10-20 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de>
-
- * src/preproc/tbl/table.cpp (table::do_row): Fix handling of the `d'
- column key letter suffix.
-
-2004-10-14 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (check): Depend on `site.exp' and `docheck'.
- (docheck): Run dejagnu's `runtest' if it exists.
- (site.exp): Create dejagnu configuration file.
-
- * Makefile.sub (DISTCLEANFILES): Add files related to dejagnu.
-
-2004-10-13 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/html-text.cpp (html_text_get_alignment),
- src/devices/grohtml/post-html.cpp (make_val,
- html_printer::handle_state_assertion): Fix compiler warnings.
-
- * src/roff/troff/div.cpp: Include `stringclass.h' and `mtsm.h'.
- (diversion::diversion): Fix order of initializers.
-
- * src/roff/troff/div.h: Don't include `mtsm.h'.
-
- * src/roff/troff/env.cpp: Include `stringclass.h' and `mtsm.h'.
- (environment::environment): Fix order of initializers.
- (environment::make_tag, environment::construct_format_state): Fix
- compiler warnings.
-
- * src/roff/troff/input.cpp: Include `stringclass.h' and `mtsm.h'.
- (input_iterator::input_iterator, macro::macro): Fix order of
- initializers.
-
- * src/roff/troff/mtsm.cpp: Include only necessary header files.
- (state_set::add, state_set::val): Fix compiler warnings.
-
- * src/roff/troff/mtsm.h: Don't include `stringclass.h'.
- (bool_value_state, int_value_state, units_value_state,
- string_value_state): Remove comma after last element which causes
- an error with g++ 3.3.3.
-
- * src/roff/troff/node.cpp: Include `stringclass.h'.
- (hline_node::hline_node, vline_node::vline_node,
- space_char_hmotion_node, left_italic_corrected_node): Fix compiler
- warnings.
- (zero_width_node::zero_width_node): Fix order of initializers.
-
- * src/roff/troff/node.h: Don't include `mtsm.h'.
- (hmotion_node): Fix compiler warnings.
-
- * src/roff/troff/number.cpp: Include `stringclass.h' and `mtsm.h'.
-
-2004-10-12 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/groff.css: New file.
-
- * doc/webpage.ms: Use `groff.css'.
- Other small fixes.
-
- * tmac/an-old.tmac (need_eo_h): New number register.
- (TH): Emit `.eo.tl' tag after title.
- (SH): Set `need_eo_h'.
- (an-trap): Handle `need_eo_h'.
- (an-do-tag): s/HTML-TAG-NS/HTML-TAG-NEXT/.
-
- * tmac/s.tmac (need_eo_h, need_eo_tl): New number registers.
- (TL): Always start diversion.
- Updated.
- (@AI): Always call `par@reset'.
- (@AB): Update code for -Thtml.
- (cov*tl-au-print): Handle -Thtml.
- (par@reset): Handle `need_eo_tl', `need_eo_h'.
- (@IP): Simplified.
- (@IT-html): Removed.
- (@SH): Set `need_eo_h' for -Thtml.
- (par@TL): s/HTML-TAG/HTMl-TAG-NS/.
- Set `need_eo_tl'.
- (@NH): s/HTML-TAG/HTMl-TAG-NS/.
- Set `need_eo_h' for -Thtml.
- (@EQ, @EN): Don't handle -Thtml specially.
- (par@load-init): Don't handle -Thtml specially.
-
- * tmac/www.tmac (www:paraspace): New macro.
- (HTML-NS, HTML-TAG-NS): Use new `tag' request.
- (HTML</p>, HTML-TAG-NEXT): New macros.
- (HnE): Emit tag `.eo.h' instead of break.
- (HR): s/HTML-NS/HTML/.
- (www-end-nowhere): End diversion only if `www-html' not set.
- Emit `.eo.tl' tag.
- (ULS, ULE): s|HTML|HTML</p>|.
- (LI): Call `www:paraspace'.
- (HEAD): New macro.
-
-2004-10-11 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/request.h (macro): Make `p' public.
- New variable `is_a_diversion'.
- New member function `is_diversion'.
-
-
- * src/devices/grohtml/html.h (simple_output): New member function
- `force_nl'.
-
- * src/devices/grohtml/html-table.cpp (tabs::compatible): Fix
- computation of `total'.
- (tabs::check_init): New function.
- (html_table::emit_table_header): Emit style data.
- (html_table::insert_column): Improved.
-
- * src/devices/grohtml/html-table.h: Updated.
-
- * src/devices/grohtml/html-text.cpp (html_text::html_text):
- Initialize `start_space' with TRUE.
- (html_text::end_tag, html_start_tag): Fix `P_TAG' and `PRE_TAG'
- cases.
- (html_text::flush_text): Set `start_space' flag.
- (html_text::uses_indent, html_text::remove_para_space,
- html_text::get_alignment): New functions.
- (html_text::push_para): Updated.
- (html_text::do_para): Check for empty argument.
- Don't set `space_emitted'.
- (html_text::do_space, html_text::emit_space): Updated.
-
- * src/devices/grohtml/html-text.h (tag_definition): New variable
- `really_issued'.
- (html_text): New member function `uses_indent', `remove_para_space',
- `get_alignment'.
-
- * src/devices/grohtml/output.cpp (simple_output::force_nl): New
- function.
- (simple_output:nl): Always emit `\n'.
-
- * src/devices/grohtml/post-html.cpp: Include `string.h'.
- (BASE_POINT_SIZE): Removed.
- (base_point_size, head_info): New global variables.
- (text_glob): New member functions `is_ll', `is_tl', `is_eo_tl',
- `is_eo_h'.
- (text_glob::is_nf, text_glob::is_fi): Handle `.fi 0' and `.fi 1'
- tags, respectively.
- (page::add_and_encode): Pass additional parameter for tag flag.
- (assert_pos): New structure.
- (assert_state): New class.
- (html_printer): Remove `indentation', `prev_indent'.
- Add variables `troff_indent', `device_indent', `temp_indent'.
- Add variables `seen_indent', `next_indent', `seen_pageoffset',
- `next_pageoffset', `seen_linelenght', `next_linelength',
- `seen_center', `next_center', `seen_space', `seen_break', `as'.
- Add member functions `do_check_center', `do_space', `do_head',
- `get_troff_indent', `restore_troff_indent', `handle_assertion',
- `handle_state_assertion', `do_end_para', `set_char_and_width'.
- Change argument to `do_fill' to `char *'.
- Update constructor.
- (html_printer::emit_raw): Call `shutdown_table'.
- Use new functions.
- (html_printer::do_center): Simplified.
- (html_printer::do_title): Improved.
- (html_printer::write_header): Emit one more newline.
- Use new functions.
- (html_printer::do_heading, html_printer::do_indent,
- html_printer::do_eol, html_printer::do_tab_ts,
- html_printer::do_tab, html_printer::do_tab0,
- html_printer::calc_po_in, html_printer::next_horiz_pos,
- html_printer::remove_courier_tabs,
- html_printer::insert_tab0_foreach_tab, html_printer::begin_page):
- Updated.
- (html_printer::do_linelength, html_printer::do_pageoffset,
- html_printer::do_indentation, html_printer::do_tempindent,
- html_printer::do_tab_te): Simplified.
- (html_printer::do_pointsize): Check whether point size is really
- associated a `.tl' tag.
- (html_printer::do_break): Rewritten.
- (html_printer::troff_tag): Improved.
- (html_printer::flush_globs): Updated.
- (html_printer::lookahead_for_tables): Handle `is_br'.
- Use new functions.
- (html_printer::set_char): Check `sbuf_style.f'.
- (html_printer::write_navigation): Use string comparison.
- (html_printer::~html_printer): Emit `head_info'.
- (html_printer::special): Rewritten.
- (get_str, make_val): New functions.
- (main): New option `s' to set the base point size.
-
- * src/preproc/html/pre-html.cpp (scanArguments): Handle option `s'.
-
-2004-10-10 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/node.cpp: New extern `debug_state'.
- Include `stringclass.h' and `mtsm.h'.
- Implement new classes and class members from `node.h'.
- (real_output_file): Make `fp' public.
- (troff_output_file): New variables `cur_div_level' and `tag_list'.
- Update constructors.
- (troff_output_file::really_print_line): Check whether we should push
- the current troff state and use the state at the start of the
- invocation of this diversion.
- (troff_output_file::add_to_tag_list): New member function.
- (node::add_char): Handle `glyph_comp_np'.
-
- * src/roff/troff/node.h: Include `mtsm.h'.
- (node): New variables `state', `push_state', `div_nest_level',
- `is_special'. Update constructors, all descendants.
- Pass additional argument to `add_char' member function.
- New virtual member functions `is_tag', `debug_node',
- `debug_node_list'. Update all descendants.
- (tag_node): New class for handling tags.
- (output_file): Add variable `state'.
-
-2004-10-09 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/mtsm.cpp, src/roff/troff/mtsm.h: New files,
- providing a minimal troff state machine to emit meta tags for the
- post-grohtml device driver.
-
- * src/roff/troff/Makefile.sub (OBJS, CCSRCS, HDRS): Handle new
- files.
-
-2004-10-09 Werner LEMBERG <wl@gnu.org>
-
- * tmac/trace.tmac: Fix handling of `am' and `am1' calls.
-
-2004-10-06 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/column.cpp (vjustify_node::copy): Updated.
-
- * src/roff/troff/div.h: Include `mtsm.h'.
- (diversion): New variables `any_chars_added', `needs_push',
- `saved_seen_break', `saved_seen_space', `saved_seen_eol',
- `saved_suppress_next_eol', `modified_tag'.
- New virtual member function `is_diversion'. Update all descendants.
-
- * src/roff/troff/div.cpp (diversion::diversion,
- macro_diversion::macro_diversion): Updated.
- (do_divert): Handle `seen_break', `seen_space', `seen_eol',
- `suppress_next_eol'.
- (top_level_diversion::space): Handle `curenv->seen_space'.
- (page_offset): Update tag handling.
- (space_request, blank_line, flush_output): Don't call `add_html_tag'.
-
- * src/roff/troff/env.h (environment): Make `tabs' public.
- Remove `ignore_next_eol', `emitted_node'.
- Update `output_line', `output'.
- New variables `seen_space', `seen_eol', `suppress_next_eol',
- `seen_break'.
- New member functions `construct_state', `make_tag',
- `construct_format_state, `construct_new_line_state,
- `dump_troff_state'.
- Remove `add_html_tag', `make_html_tag'.
-
- * src/roff/troff/env.cpp: New externs `suppress_push',
- `get_diversion_state', `global_diverted_space'.
- (pending_output_line): New variable `was_centered'.
- Update constructor and all callers.
- (pending_output_line::output): Call `curenv->construct_format_state'.
- (environment::environment, environment::copy): Updated.
- (environment::output): Handle `was_centered'.
- (environment::add_char): Handle construct and diversion state.
- (environment::add_node): Handle construct state.
- (environment::newline): Handle `was_centered'.
- (environment::output_line): Updated.
- (environment::possibly_break_line): Updated.
- Update tag handling.
- (environment::add_html_tag): Replaced with...
- (environment::make_tag): New function.
- (environment::add_html_tag_tabs, environment::make_html_tag): Removed.
- (environment::dump_troff_state): New debugging function.
- (environment::construct_state, environment::construct_format_state,
- environment::construct_new_line_state): New functions.
- (environment::do_break): Updated.
- Handle `global_diverted_space'.
- (environment::handle_tag): Update tag handling.
- (point_size, fill, do_break_request): Don't call `add_html_tag'.
- (no_fill): Don't call `add_html_tag'.
- Set `suppress_next_eol'.
- (center, right_justify, line_length, indent, temporary_indent,
- set_tabs):
- Update tag handling.
-
- * src/roff/troff/input.cpp: Don't include `stringclass.h'.
- (input_iterator): New variables `is_diversion', `diversion_state'.
- Update constructors.
- (input_stack): New member functions `get_div_level',
- `get_diversion_state', `check_end_diversion'.
- New variables `div_level', `diversion_state'. Initialize them.
- (suppress_push, global_diverted_space): New global variables.
- (input_stack::finish_get, input_stack::finish_peek,
- input_stack::remove_boundary, input_stack::end_file,
- input_stack::clear, input_stack::pop_macro): Call
- `check_end_diversion'.
- (input_stack::push): Handle `div_level' and `diversion_state'.
- (get_diversion_state): New function.
- (diverted_space_node::reread): Handle `global_diverted_space'.
- (macro::macro): Update constructors.
- (macro::is_diversion): New function.
- (macro::operator=): Set `is_a_diversion'.
- (string_iterator): New member function `is_diversion'.
- (string_iterator::string_iterator): Update constructors.
- (string_iterator::fill): Set `div_nest_level'.
- (macro_iterator): New member function `is_diversion'.
- (do_if_request): Handle `suppress_push'.
- (tag, taga): New functions.
- (init_input_requests): Add `tag' and `taga' requests.
-
-2004-10-05 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/include/font.h (font): New member function
- `get_image_generator'.
- New variables `unscaled_charwidths' and `image_generator'.
-
- * src/libs/libgroff/font.cpp (font::get_width): Always return the
- character's unscaled width if `font::unscaled_charwidths' is set.
- (font::get_image_generator): New function.
- (font::load_desc): Check the `unscaled_charwidths' and
- `image_generator' keywords.
-
- * src/libs/libgroff/fontfile.cpp: Initialize
- `font::unscaled_charwidths' and `font::image_generator'.
-
- * font/devhtml/DESC.proto: s/html/unscaled_charwidths/.
-
- * font/devhtml/Makefile.sub (DESC): Set `image_generator' keyword.
-
- * man/groff_font.man: Document `unscaled_charwidths' and
- `image_generator'.
-
- * src/preproc/html/pre-html.cpp: Include `device.h'.
- (image_gen): New global variable.
- (imageList::createPage): Use `image_gen'.
- (main): Use `image_generator' keyword.
-
-2004-10-04 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/html.tmac: Handle \[sqrtex].
-
-2004-10-04 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/include/printer.h (printer): New virtual method `round_width'.
-
- * src/devices/grodvi/dvi.cpp, src/devices/grolbp/lbp.cpp,
- src/devices/grolj4/lj4.cpp, src/devices/grops/ps.cpp,
- src/devices/grotty/tty.cpp (printer::round_width): New function
- member.
-
- * src/devices/grohtml/post-html.cpp (printer::round_width): New
- function member.
- (html_printer::set_numbered_char): Use it.
-
-2004-10-03 Gaius Mulley <gaius@glam.ac.uk>
-
- * aclocal.m4 (GROFF_GHOSTSCRIPT_PATH): New macro.
-
- * configure.ac: Call GROFF_GHOSTSCRIPT_PATH.
-
- * configure: Regenerated.
-
- * Makefile.in (GHOSTSCRIPT): New variable.
- (MDEFINES): Add GHOSTSCRIPT.
-
-2004-10-03 Werner LEMBERG <wl@gnu.org>
-
- * INSTALL.gen: Updated (taken from texinfo CVS).
-
-2004-09-28 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Updated.
-
-2004-09-28 Heinz-Jürgen Oertel <hj.oertel@surfeu.de>
-
- * tmac/groff_www.man: Revised and updated.
-
-2004-09-26 Werner LEMBERG <wl@gnu.org>
-
- Fix \$@ and \$* to handle any number of arguments.
-
- * src/roff/troff/input.h (BEGIN_QUOTE, END_QUOTE): New special
- characters.
-
- * src/roff/troff/input.cpp (input_iterator::internal_level):
- Removed.
- (input_stack): New member functions `increase_level' and
- `decrease_level'.
- (input_stack::get_level): Don't use `internal_level'.
- (get_copy, token::next): Handle BEGIN_QUOTE and END_QUOTE.
- (end_quote_iterator): Completely removed.
- (interpolate_arg): Build string for \$@ and \$* which is then
- pushed onto the input stack.
-
-2004-09-23 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * tmac/groff_ms.man, doc/groff.texinfo: Document changes from
- 2004-09-19.
-
-2004-09-23 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (ne): Using default scaling operator.
-
-2004-09-19 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- This change implements the following features:
-
- PORPHANS
- New numeric register: Defines number of lines following LP, PP,
- QP, IP or XP, which must be kept together, before any automatic
- page break. If insufficient space remains on the current page, a
- page break is forced before the new paragraph begins.
-
- HORPHANS
- New numeric register: Sets number of lines of following paragraph
- which must be kept with a heading, defined by NH or SH, before any
- automatic page break. If insufficient space remains on the
- current page, a page break is forced before the heading.
-
- GROWPS
- (Thanks to Joerg van den Hoff, for this idea).
-
- New numeric register: Sets the first level of heading (set with
- NH), which will keep the same point size as body text; e.g. if
- GROWPS is set to 3, .NH 3, .NH 4, ... will produce headings at the
- point size specified by \n[PS], but .NH 2 and .NH 1 will have
- progressively larger point sizes, determined by \n[PSINCR] (see
- below).
-
- PSINCR
- New numeric register: Sets the point size increment for each level
- of heading, (set with NH), below the threshold level set by
- GROWPS; e.g. if \n[PS] = 10, \n[GROWPS] = 3 and \n[PSINCR] = 2.0p,
- then .NH 1 will produce 14pt headings, .NH 2 will produce 12pt,
- and all other levels will remain at 10pt, (because \n[PS] = 10).
-
- SH
- Existing macro now accepts a numeric argument, to make heading
- size match that of NH with same argument value, when the
- GROWPS/PSINCR feature is enabled.
-
- SN-DOT
- New string, set by NH macro, replaces the existing (undocumented)
- use of SN, to represent the assigned section number.
-
- SN-NO-DOT
- New string, set by NH macro, represents the assigned section
- number, but omits the terminal period (periods at intermediate
- levels are retained).
-
- SN
- String set by NH macro, originally undocumented, now implemented
- as an alias for SN-DOT (which reproduces original behaviour).
-
- * tmac/s.tmac (PORPHANS): New register.
- (par*start): Use it.
- (HORPHANS, GROWPS, PSINCR): New registers.
- (SH-NO-TAG, @SH): Use them.
- (@NH): Improved.
-
-2004-09-19 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * NEWS, doc/groff.texinfo, tmac/groff_ms.man: Document the deletion
- of `Ds' and `De' macros.
-
-2004-09-10 Werner LEMBERG <wl@gnu.org>
-
- In tbl, handle \a as an interpreted leader character if in
- compatibility mode.
-
- * src/preproc/tbl/table.h (PREFIX, PREFIX_CHAR, LEADER,
- LEADER_CHAR): New macros.
- (compatible_flag): New declaration.
-
- * src/preproc/tbl/main.cpp (table_input): Add LEADER_1, LEADER_2,
- LEADER_3, and LEADER_4 to `state'.
- (table_input::get): Handle `\a'.
-
- * src/preproc/tbl/table.cpp (PREFIX): Removed.
- (LEADER_REG): New macro.
- (table::init_output): Define LEADER_REG string register if in
- compatibility mode.
-
- * src/preproc/tbl/tbl.man: Document it.
-
-2004-08-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (An): Fix error message.
-
-2004-08-06 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/tbl/main.cpp (main): Call `fatal' not `error' if a
- file can't be opened. UNIX tbl has the same behaviour.
-
-2004-08-05 Y T <doarhop@hotmail.com>
-
- * src/preproc/grn/hdb.cpp (compatibility_flag): Add declaration.
- (DBRead): If in compatibility mode, take into account the text
- when computing figure boundaries.
-
-2004-08-05 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/soelim/soelim.man: Improved. Based on suggestions
- from Tadziu Hoffmann.
-
-2004-08-03 Werner LEMBERG <wl@gnu.org>
-
- * doc/meref.me: Document `_M' register.
-
-2004-08-03 Martin Husemann <martin@duskware.de>
-
- Make hpftodit work correctly on big-endian systems.
-
- * src/utils/hpftodit/hpftodit.cpp (File): New method
- `get_uint32(char *)'.
- (entry): New member `orig_value'.
- (read_tags): Use new method.
- (output_font_name, read_and_output_pcltypeface, dump_ascii):
- Updated.
-
-2004-08-01 Werner LEMBERG <wl@gnu.org>
-
- * tmac/s.tmac: Undo change 2003-06-29. The proper macro definitions
- are already in X11's `macros.t' file.
-
-2004-08-01 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/utils/hpftodit/hfptodit.cpp (output_font_name, dump_ascii):
- Fix casting bug.
- (read_and_output_pcltypeface): Handle strings with length <= 4.
-
-2004-07-27 Egil Kvaleberg <egil@kvaleberg.no>
-
- * tmac/s.tmac (pg@top): Don't save `PO' register.
- (pg*end-col, pg*end-page): Directly use `PO' register.
-
-2004-07-27 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_tmac.man: Mention `trace' and `pic' macro packages.
-
- * src/preproc/refer/refer.cpp (output_references): Check for
- empty hash table.
- * src/preproc/refer/refer.man: Improve documentation of
- `bibliography' command.
-
-2004-07-26 Werner LEMBERG <wl@gnu.org>
-
- Add requests `fcolor' and `gcolor'.
-
- * src/roff/troff/env.cpp (fill_color_change, glyph_color_change):
- New functions.
- (init_env_requests): Add `fcolor' and `gcolor'.
-
- * src/roff/troff/input.h: Export do_glyph_color and do_fill_color.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document new requests.
-
-2004-07-24 Werner LEMBERG <wl@gnu.org>
-
- Add support for fractional point sizes in ms macros. A value for
- PS, VS, FPS, and FVS greater than or equal to 1000 is always divided
- by 1000. For example, `.nr PS 10250' sets the font size to 10.25p.
-
- * tmac/s.tmac (@AU, @AI, par@load-init, par@init, par@reset, NL,
- PX): Handle fractional point sizes for PS, VS, FPS, and FVS.
-
- * tmac/groff_ms.man, docs/groff.texinfo, NEWS: Document it.
-
-2004-07-19 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/lex.cpp (for_input): Add member `from'.
- Update constructor.
- (do_for, for_input::get, for_input::peek): Handle negative `by'.
- * src/preproc/pic/pic.man, doc/pic.ms, NEWS: Document it.
-
-2004-07-08 Thomas Klausner <wiz@netbsd.org>
-
- * tmac/doc-syms (doc-str-St--p1003.1-2004): New string.
- * tmac/groff_mdoc.man: Updated.
-
-2004-07-05 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Further improve documentation of `hcode'.
-
-2004-07-04 Sang Dae Yu <sdyu@bh.knu.ac.kr>
-
- Improve appearance of arrows in pic.
-
- * src/preproc/pic/object.cpp (draw_arrow): Make outline of filled
- arrow head thin.
- Use two line segments for drawing non-filled arrow head.
- (line_object::print, spline_object::print): Shorten line length to
- avoid arrow sticking.
- (arc_object::print): Take arrow direction into account.
-
-2004-07-03 Heinz-Jürgen Oertel <hj.oertel@surfeu.de>
-
- * tmac/groff_www.man: Update documentation of .MPIMG.
-
-2004-07-03 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (RI): Always start with font `R'.
- (RI, IR): Properly end with font `R'.
-
-2004-07-02 Paul Eggert <eggert@cs.ucla.edu>
-
- * man/ditroff.man, man/groff_font.man, man/groff_out.man,
- src/devices/grohtml/grohtml.man, src/preproc/grn/grn.man,
- src/preproc/pic/pic.man, tmac/groff_man.man, tmac/groff_ms.man:
- Don't pass more than six arguments to .R, .I, .B, etc., for
- compatibility with traditional troff macros.
-
-2004-07-02 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.h: s/COMPATIBLE_SAVE/PUSH_GROFF_MODE/.
- s/COMPATIBLE_RESTORE/POP_GROFFCOMP_MODE/.
- Update all users.
- (PUSH_COMP_MODE): New internal character constant.
- Update all users.
-
- * src/roff/troff/input.cpp (get_copy): Handle PUSH_GROFF_MODE,
- PUSH_COMP_MODE, and POP_GROFFCOMP_MODE.
- (token::next, macro::append): Handle PUSH_COMP_MODE.
- (decode_args): Add PUSH_GROFF_MODE or PUSH_COMP_MODE before and
- POP_GROFFCOMP after each of the decoded arguments to make them
- independent from the compatibility mode status.
- (comp_mode): Add `COMP_ENABLE'.
- (do_define_string, do_define_macro): Handle COMP_ENABLE.
- (define_string, append_string, define_macro, define_indirect_macro,
- append_macro, append_indirect_macro): Handle `compatible_flag'.
- (chop_macro, substring_request, asciify): Handle PUSH_COMP_MODE.
-
- * man/groff_diff.man, doc/groff.texinfo: Updated.
-
-2004-07-01 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Improve documentation of `hcode'.
- Use @documentencoding and convert document to latin-1; to do that
- make latin characters active and assign proper macros (within a
- @tex...@end tex environment).
- * doc/Makefile.in (.texinfo.html, groff): Use --enable-encoding.
- * doc/Makefile.sub (groff): Ditto.
-
-2004-06-29 Werner LEMBERG <wl@gnu.org>
-
- Implement two new conditional operators `F <name>' and `S <name>'
- which check whether <name> is a valid font or style, respectively.
-
- * src/libs/libgroff/font.cpp (text_file): Add `silent' member.
- (text_file::text_file): Updated.
- (text_file::error): Don't emit message if `silent' is set.
- (font::load_font): Add optional third argument (which is directly
- passed to `load'.
- (font::load): Add optional second argument to check the header of
- a font only, without emitting warning or error messages.
- * src/include/font.h (font): Updated.
-
- * src/roff/troff/input.cpp (do_if_request): Implement `S' and `F'
- conditionals.
- * src/roff/troff/node.cpp (mount_font_no_translate): Add optional
- fourth argument to check a font without mounting.
- (check_font, check_style): New functions.
- * src/roff/troff/node.h: Updated.
-
- * man/groff_diff.man, man/groff.man, NEWS, doc/groff.texinfo:
- Updated.
-
-2004-06-27 Werner LEMBERG <wl@gnu.org>
-
- Implement new string-valued register `.sty' to return the current
- style name.
-
- * env.cpp (environment::get_style_name_string): New function.
- (init_env_requests): Add `.sty' register.
- * env.h (environment): Updated.
- * node.cpp (font_info): Make `get_style_name' a friend.
- (get_style_name): New function.
- * node.h: Updated.
-
- * man/groff_diff.man, man/groff.man, NEWS, doc/groff.texinfo:
- Updated.
-
-2004-06-15 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/tbl/main.cpp (process_data) <GOT_RIGHT_BRACE>: Handle
- `nospaces' option.
-
-2004-06-10 Colin Percival <colin.percival@wadham.ox.ac.uk>
-
- * doc/meintro.me, doc/meref.me: Don't use \*[td], \n[dy], \*[mo],
- and \n[mo] to avoid dependency on current date.
-
-2004-06-08 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (install_data): New target.
-
-2004-06-04 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libxutil/Makefile.sub (EXTRA_CFLAGS): Define.
-
-2004-06-03 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/xditview/Makefile.sub (EXTRA_LDFLAGS): Fix typo and
- order of libraries.
- (install_data): Add $(srcdir).
-
- * src/utils/xtotroff/Makefile.sub (EXTRA_LDFLAGS): Fix order of
- libraries.
-
-2004-06-02 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_X11): s/have_no_x/groff_no_x/.
- Add X11 stuff to CFLAGS, LDFLAGS, and LIBS temporarily.
- Add test for Xmu library.
- (GROFF_APPRESDIR_OPTION, GROFF_APPRESDIR_CHECK,
- GROFF_APPRESDIR_DEFAULT): New macros.
-
- * configure.ac: Call GROFF_APPRESDIR_OPTION, GROFF_APPRESDIR_CHECK,
- and GROFF_APPRESDIR_DEFAULT.
-
- * configure: Regenerated.
-
- * Makefile.in (appresdir): New variable.
- (MDEFINES): Add appresdir.
-
- * src/devices/xditview/Makefile.sub (EXTRA_LDFLAGS): Add -Xmu and
- -Xt.
- (install_data, uninstall_sub): New targets to handle GXditview.ad.
-
- * src/utils/indxbib/Makefiles.ub (install_data): Depend on
- `$(srcdir)/eign', not `eign'.
-
- * MANIFEST, INSTALL, NEWS, PROBLEMS: Updated.
-
- * man/groff_out.man, man/roff.man, src/devices/grops/grops.man,
- src/devices/xditview/gxditview.man, src/roff/groff/groff.man:
- Protect (g)xditview with `\%' to avoid hyphenation.
- Other minor formatting.
-
-2004-06-01 Werner LEMBERG <wl@gnu.org>
-
- Integrate gxditview into groff's standard directory hierarchy.
-
- * src/xditview/*: Moved to ...
- * src/devices/xditview/*: Here.
- Moved DviChar.h and XFontName.h to src/include.
- Moved DviChar.c and XFontName.c to new directory src/libs/libxutil.
- Split off `xmalloc' into new file src/libs/libxutil/xmalloc.c.
- Moved xtotroff.c to new directory src/utils/xtotroff.
- Provide proper Makefile.sub files (reusing the stuff from
- Imakefile.in).
- DESC renamed to DESC.in.
- Removed GXDitview-ad.h, INSTALL, Imakefile.in.
- Converted everything from K&R to ANSI C.
- Decorated with const where appropriate.
- Cast string constants with `String' and `char *' where appropriate.
- Made it compile with C++ (used as a C compiler).
- Removed other minor compiler warnings.
-
- * src/devices/xditview/device.c: Include config.h, string.h, and
- defs.h.
- Don't declare `exit', `strtok', `strchr', and `getenv'.
- (FONTPATH): Remove.
-
- * src/devices/xditview/font.c: Don't declare `XParseFontName' and
- `XFormatFontName'.
-
- * src/devices/xditview/xditview.c: Include config.h.
- Include stdio.h earlier.
- Protect declaration of `popen' and `pclose' with
- NEED_DECLARATION_POPEN and NEED_DECLARATION_PCLOSE.
- Replace `caddr_t' with `XtPointer'.
- (MakePromptFunc): New typedef.
- (DoPrint): Use RETSIGTYPE.
- (promptfunction): Change type to MakePromptFunc.
- (MakePrompt): Use MakePromptFunc for third argument.
- (xmalloc): Removed.
-
- * src/devices/xditview/ad2c: Add casts to `String'.
-
- * src/include/XFontName.h (XFontNameString): Don't use array
- notation.
- Add prototypes for `XParseFontName', `XFormatFontName',
- `XCompareFontName', and `XCopyFontName'.
-
- * src/include/Makefile.sub (HDRS): Add `DviChar.h' and
- `XFontName.h'.
-
- * src/utils/xtotroff/xtotroff.c: Include getopt.h.
- Don't declare `XParseFontName' and `XFormatFontName'.
- (xmalloc): Removed.
- (main): Remove `optind' and `optarg'.
-
- * Makefile.in (XDEVDIRS, XPROGDIRS, XLIBDIRS): New variables
- (to select programs which need X).
- Make XDEVIDIRS depend on `FORCE'.
- (X_CFLAGS, X_LIBS, X_EXTRA_LIBS, X_PRE_LIBS): New variables (for
- X support).
- (MDEFINES): Updated.
- (LIBDIRS): Use XLIBDIRS.
- (CPROGDIRS): Use XPROGDIRS.
- (DEVDIRS): Remove font directories for gxditview.
- (ALLDIRS, DISTDIRS): Add XDEVDIRS.
- (EXTRADIRS): Remove src/xditview.
-
- * Makefile.sub (DISCLEANFILES): Updated.
-
- * Makefile.comm (LIBXUTIL): New variable.
- (.cpp.o, .cpp.obj): Handle EXTRA_CCFLAGS.
- (.c.o, .c.obj, .y.o): Handle EXTRA_CFLAGS.
-
- * Makefile.cpg, Makefile.ccpg ($PROG): Handle EXTRA_LDFLAGS.
-
- * aclocal.m4 (GROFF_X11): New function.
-
- * configure.ac: Call GROFF_X11.
- Don't create src/xditview/Imakefile.
- Don't emit notice how to build gxditview.
-
- * configure: Regenerated.
-
- * test-groff.in (GROFF_BIN_PATH, XENVIRONMENT): Updated.
-
-2004-05-28 Akihiro Sagawa <sagawa@sohgoh.net>
-
- * Makefile.in (CPPFLAGS): Define.
- (MDEFINES): Add CPPFLAGS.
-
-2004-05-27 Werner LEMBERG <wl@gnu.org>
-
- * arch/misc/Makefile.sub (shdeps.sed): Use $(srcdir).
-
-2004-05-26 Niklas Edmundsson <nikke@acc.umu.se>
-
- Fix problems with `friend name injections'.
-
- * src/preproc/eqn/box.h (make_mark_box, make_lineup_box,
- make_script_box), src/roff/troff/div.h (end_diversions),
- src/roff/troff/env.h (title), input.cpp (process_input_stack): Undo
- change 2004-04-08.
-
-2004-05-25 Bernd Warken <bwarken@mayn.de>
-
- * src/preproc/pic/pic.man, doc/pic.ms: Add example for `command'.
-
-2004-05-25 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/cset.cpp, src/libs/libgroff/lf.cpp,
- src/libs/libgroff/color.cpp: Include lib.h.
-
-2004-05-25 Paul Eggert <eggert@cs.ucla.edu>
-
- * PROBLEMS: Update documentation for problems with Sun C++ 5.0
- through Forte 6u1, and for how to get GNU make on Solaris.
-
-2004-05-24 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Document problems with gcc 3.4.0 on Sun. Reported
- by Paul Eggert.
-
-2004-05-15 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * arch/misc/Makefile.sub (shdeps.sed): Don't use `$<' in explicit
- rule.
-
-2004-05-14 Werner LEMBERG <wl@gnu.org>
-
- * REVISION: Set to 2.
-
- * aclocal.m4 (GROFF_STDINT_H): Removed.
- (GROFF_INTTYPES_H): Define HAVE_CC_INTTYPES_H.
-
- * configure.ac: Updated.
- * configure, src/include/config.hin: Regenerated.
-
- * src/libs/libgroff/tmpname.cpp: Don't include stdint.h but
- inttypes.h conditionally.
-
-2004-05-13 Werner LEMBERG <wl@gnu.org>
-
-Version 1.19.1 released
-=======================
-
-2004-05-10 Stephen Gildea <http://www.gildea.com/stephen>
-
- * src/preproc/refer/label.y (same_author_last_name,
- same_author_name): Handle empty sort keys.
-
-2004-05-10 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, README, TODO, PROJECTS, PROBLEMS, MANIFEST, doc/webpage.ms,
- tmac/TODO: Updated.
-
- * tmac/doc-syms (doc-str-Lb-libposix, doc-str-Lb-libpthread,
- doc-str-Lb-librt): Reset font.
- (Lb): Rename `doc-str-Lb' to `doc-str-Lb1'.
- Provide `doc-str-Lb' to reset font.
- * tmac/groff_mdoc.man: Updated.
-
-2004-05-08 Jan Schaumann <jschauma@netmeister.org>
-
- * src/preproc/html/pre-html.cpp (make_message): Make it work for
- snprintf versions which don't conform to ANSI C 99 (this is,
- counting the string's trailing null byte in the return value).
-
-2004-05-07 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/roff/troff/node.cpp (suppress_node::tprint): Don't expect
- that all implementations of sprintf handle null pointers correctly.
-
-2004-05-04 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document `.U' register.
-
- * src/roff/troff/env.cpp (environment::mark_last_line)
- [WIDOW_CONTROL]: Fix scope of `p' for new C++ compilers.
-
-2004-05-04 Larry Kollar <kollar@alltel.net>
-
- New read-only register `.U'; it returns 1 in safer mode and 0
- otherwise.
-
- * src/roff/troff/input.cpp (init_input_requests): Implement `.U'
- register.
-
-2004-05-03 Werner LEMBERG <wl@gnu.org>
-
- * install-sh, mkinstalldirs: New versions; taken from texinfo CVS.
-
-2004-04-17 Werner LEMBERG <wl@gnu.org>
-
- * src/include/font.h (font): Use `int' for ch_index.
- * src/libs/libgroff/font.cpp (font::alloc_ch_index,
- font::compact): Updated.
-
- * src/roff/groff/pipeline.c (run_pipeline) [_WIN32]: Fix compiler
- warnings.
-
- * src/roff/troff/div.cpp (begin_page), src/roff/troff/env.cpp
- (hyphen_word): Fix compiler warnings.
- * src/roff/troff/input.cpp (get_char_for_escape_name): Return
- `char'.
- Update all callers.
- (get_delim_number, get_line_arg): Change second argument type to
- `unsigned char'.
- (macro_header::copy, token::next, do_define_string,
- do_define_character, substring_request, asciify_macro,
- unformat_macro, read_size, non_interpreted_node::interpret,
- while_request, main: Fix compiler warnings.
- (read_color_draw_node): Initialize `col'.
-
- * src/preproc/tbl/table.cpp (horizontal_span, table_entry): Make
- `start_col' and `end_col' of type `int'.
- (vertical_rule): Make `col' of type `int'.
-
- * src/preproc/grn/hdb.cpp (DBRead): Protect call to getc with check
- for EOF.
-
- * src/preproc/refer/label.y (uppercase_array, lowercase_array):
- New arrays.
- (format_serial): Use them to remove dependency on ASCII.
-
- * src/devices/grops/ps.cpp (ps_printer::define_encoding): Fix
- compiler warning.
- * src/devices/grops/psrm.cpp (resource_manager::supply_resource):
- Ditto.
-
- * src/devices/grotty/tty.cpp (tty_font::load_tty_font): Fix
- compiler warnings.
- (glyph): Change type of `hpos' to `int'.
-
- * src/devices/lbp/lbp.cpp (strsep): Removed. Unused.
- * src/devices/lbp/lbp.h (splinerel): Fix compiler warnings.
-
- * src/utils/tfmtodit.cpp (gf::load): Fix compiler warnings.
-
- * src/utils/pfbtops/pfbtops.c (get_text): Fix compiler warning.
-
-2004-04-16 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grolbp/lbp.h, src/preproc/grn/gprint.h,
- src/preproc/grn/hgraph.cpp, src/preproc/grn/hpoint.cpp,
- src/preproc/html/pushback.cpp, src/preproc/html/pushback.h: Use
- `double' instead of `float' everywhere.
- * src/preproc/grn/main.cpp: Use `double' instead of `float'
- everywhere.
- (main): Add return value.
- * src/preproc/grn/hdb.cpp: Use `double' instead of `float'
- everywhere.
- Update all user functions.
-
- * src/include/search.h, src/include/ptable.h, src/include/printer.h,
- src/preproc/eqn/box.h, src/preproc/pic/object.h,
- src/preproc/refer/refer.h, src/preproc/tbl/table.h,
- src/preproc/tbl/table.cpp, src/roff/troff/env.h,
- src/roff/troff/div.h, src/roff/troff/token.h, src/roff/troff/node.h,
- src/roff/troff/input.cpp, src/roff/troff/request.h,
- src/roff/troff/node.cpp: Don't mix `struct' and `class' in forward
- declarations.
-
- * src/utils/indxbib/signal.c: Include stdlib.h.
-
-2004-04-14 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * tmac/s.tmac (@init, RP): Allow initialization of the PO register
- before the first page.
-
-2004-04-14 Thomas Klausner <wiz@netbsd.org>
-
- * tmac/doc-common (doc-volume-as-*): Use lowercase names.
- (doc-operating-system-*): Updated.
- * tmac/doc-syms (doc-str-St-*): Various small fixes.
- (doc-str-Lb-*): Add more library names.
-
-2004-04-10 Art Haas <ahaas@airmail.net>
-
- * src/utils/hpftodit/hpuni.cpp (hp_msl_to_unicode_list): Don't
- use anonymous type.
-
-2004-04-09 Art Haas <ahaas@airmail.net>
-
- * src/utils/tfmtodit.cpp (lig_chars): Don't use anonymous type.
-
-2004-04-09 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * arch/misc/shdeps.sh: Generate better comment for sed script.
-
-2004-04-08 Art Haas <ahaas@airmail.net>
-
- * src/libs/libgroff/glyphuni.cpp (glyph_to_unicode_list),
- src/libs/libgroff/uniglyph.cpp (unicode_to_glyph_list),
- src/libs/libgroff/uniuni.cpp (unicode_decompose_list),
- src/preproc/eqn/box.cpp (param_table), src/preproc/grn/hgraph.cpp
- (polyfill), src/preproc/grn/main.cpp (polyfill),
- src/preproc/refer/command.cpp (command_table),
- src/utils/tfmtodit.cpp (lig_table): Don't use anonymous types (which
- gcc 3.5 doesn't like).
-
-2004-04-08 Werner LEMBERG <wl@gnu.org>
-
- Removing many compiler warnings. groff should now compile with
- a C++ compiler used for C files also. [Simple variable renamings
- to avoid shadowing aren't logged in detail.]
-
- * src/devices/grodvi/dvi.cpp: Some local variable renamings.
- (draw_dvi_printer::draw) ['c']: Enclose in block.
-
- * src/devices/grohtml/post-html.cpp: Some local variable renamings.
- (page::add_line): Fix typos.
- * src/devices/grohtml/html-text.cpp: Some local variable renamings.
-
- * src/devices/grolbp/lbp.cpp: Don't define _GNU_SOURCE.
- Some local variable renamings.
- * src/devices/grolbp/lbp.h: Some local variable renamings.
-
- * src/devices/grolj4/lj4.cpp, src/devices/grotty/tty.cpp: Some local
- variable renamings.
-
- * src/libs/libbib/index.cpp (index_search_item_iterator::get_tag):
- Remove redundant local variable declaration.
- * src/libs/libbib/map.c (mapread, unmap): Don't use K&R style.
- Don't use `caddr_t' but `void *'.
- Enclose functions with `extern "C"' for C++.
-
- * src/libs/libdriver/input.cpp (remember_filename,
- remember_source_filename): Use cast for string constant.
-
- * src/libs/libgroff/font.cpp, src/libs/libgroff/fontfile.cpp,
- src/libs/libgroff/nametoindex.cpp, src/libs/libgroff/paper.cpp,
- src/libs/libgroff/geometry.cpp: Some local variable renamings.
- * src/libs/libgroff/iftoa.c, src/libs/libgroff/itoa.c: Don't use K&R
- style.
- Enclose functions with `extern "C"' for C++.
- * src/libs/libgroff/quotearg.c (TRUE,FALSE): Define as macros.
- (needs_quoting): Return `int'.
- (quote_arg): Add proper casts to malloc and realloc.
- * src/libs/libgroff/spawnvp.c: Compile code only for MS-DOS and
- various MS Windows environments.
- (spawnvp_wrapper): Add proper cast to malloc.
-
- * src/preproc/eqn/box.h: Remove redundant declarations of
- `make_script_box', `make_mark_box' and `make_lineup_box'.
- * src/preproc/eqn/eqn.y: Remove redundant declaration of `strsave'.
- * src/preproc/eqn/script.cpp, src/preproc/eqn/pile.cpp: Some local
- variable renamings.
-
- * src/preproc/grn/hpoint.cpp: Some local variable renamings.
- * src/preproc/grn/hgraph.cpp: Some local variable renamings.
- (dx, dy): Renamed functions to...
- (deltax, deltay): This.
- * src/preproc/grn/main.cpp: Some local variable renamings.
- (deffont): Add `const'.
- (initpic, conv): Use cast for string constant.
-
- * src/preproc/html/pre-html.cpp: Some local variable renamings.
- (makeFileName, alterDeviceTo, addZ): Use cast for string constant.
- (char_buffer::run_output_filter): Second argument is unused.
- * src/preproc/html/pushback.cpp: Some local variable renamings.
-
- * src/preproc/pic/pic.y: Remove redundant declaration of `do_copy'.
- * src/preproc/pic/object.cpp: Some local variable renamings.
-
- * src/preproc/refer/label.y (lookup_label): Remove redundant
- declaration of local variable.
-
- * src/preproc/soelim.cpp: Remove redundant declaration of
- `interpret_lf_args'.
-
- * src/preproc/tbl/main.cpp: Some local variable renamings.
-
- * src/roff/groff/groff.cpp (main): Use cast for string constant.
- * src/roff/groff/pipeline.c: Enclose declarations of `error',
- `c_fatal', and `i_to_a' with `extern "C"' for C++.
- Don't use C++-style comments.
-
- * src/roff/troff/env.h: Remove redundant declaration of `title'.
- * src/roff/troff/node.h, src/roff/troff/env.cpp,
- src/roff/troff/div.cpp, src/roff/troff/node.cpp: Some local variable
- renamings.
- * src/roff/troff/div.h: Remove redundant declaration of
- `end_diversions'.
- * src/roff/troff/troff.h: Remove redundant declaration of
- `cleanup_and_exit'
- * src/roff/troff/input.cpp: Remove redundant declaration of
- `handle_first_page_transition' and `process_input_stack'.
-
- * src/utils/hpftodit.cpp: Some local variable renamings.
-
- * src/utils/indxbib/signal.c: Enclose functions with `extern "C"'
- for C++.
- Don't define RETSIGTYPE.
- * src/utils/indxbib/indxbib.cpp: Some local variable renamings.
-
- * src/utils/pfbtops/pfbtops.cpp: Don't use K&R style.
- (error): Use `const' in argument.
- (main): Remove redundant declaration of `optind'.
- Move declaration of `Version_string' to top-level.
-
- * PROBLEMS: Document difficulties compiling signal.c if a C++
- compiler is used for C.
-
-2004-04-07 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (DISTCLEANFILES): Add `test-groff'.
-
-2004-04-06 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Make scripts like nroff.sh and neqn.sh portable across various
- (Unix-like) shell implementations from Cygwin, MSYS, etc., which use
- non-POSIX path separators. The idea is to extend those scripts to
- decide at run-time (of the script) which path separator to use.
-
- * arch/misc/Makefile.sub: New file.
- * arch/misc/shdeps.sh: New file, generating OS dependency fixups.
- This script handles @GROFF_BIN_PATH_SETUP@, replacing it with
- a proper definition of the variable `GROFF_RUNTIME'.
-
- * Makefile.in (SH_DEPS_SED_SCRIPT): New variable.
- (MDEFINES): Add SH_DEPS_SED_SCRIPT.
- (PROGDEPDIRS): New variable.
- `FORCE' it.
- (PROGDIRS): Add PROGDEPDIRS.
-
- * src/preproc/eqn/Makefile.sub (neqn): Call SH_DEPS_SED_SCRIPT.
- Don't substitute @SEP@ and @BINDIR@.
- * src/preproc/eqn/neqn.sh: Use @GROFF_BIN_PATH_SETUP@.
- (PATH): Use GROFF_RUNTIME.
-
- * src/roff/nroff/Makefile.sub (nroff): Call SH_DEPS_SED_SCRIPT.
- Don't substitute @SEP@ and @BINDIR@.
- * src/roff/nroff/nroff.sh: Use @GROFF_BIN_PATH_SETUP@.
- (PATH): Use GROFF_RUNTIME.
-
-2004-04-05 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/roff/nroff/nroff.sh: Implement work-around for sh.exe from
- Cygwin which doesn't handle stderr correctly.
-
-2004-03-08 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.comm (install_dev, uninstall_dev): Protect `for' loops
- against empty argument. Problem reported by <cgd@broadcom.com>.
-
-2004-03-05 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * Makefile.in (SEP): Replaced with...
- (RT_SEP, SH_SEP): Separators for the target platform's native path
- separator and the build environment, respectively.
- (fontpath, tmacpath): Use RT_SEP.
- (MDEFINES): Updated.
-
- * contrib/mom/Makefile.sub (GROFF_BIN_PATH): Use SH_SEP.
- * doc/Makefile.sub (GROFF_BIN_PATH): Use SH_SEP.
- * src/preproc/eqn/Makefile.sub (neqn): Use SH_SEP.
- * src/roff/nroff/Makefile.sub (nroff): Use SH_SEP.
-
-2004-03-05 Werner LEMBERG <wl@gnu.org>
-
- * fonts/devlj4/Makefile.sub (LJ4RES): Set to 1200. This helps to
- reduce alignment problems with newer printers which use built-in
- TrueType fonts (instead of the older Intellifonts). The ideal
- solution is to provide a second set of groff metric files, but this
- is extremely time-consuming to produce, given that HP's metric
- files are very rudimentary.
-
-2004-03-01 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grolj4/lj4.cpp (main): Fix argument of getopt_long.
- s/operand/argument/ in error message.
-
-2004-03-01 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/roff/groff/groff.cpp (main): Don't allow option -o if -Thtml
- is in use.
-
-2004-03-01 Antti Kantee <pooka@netbsd.org>
-
- * tmac/s.tmac (XE): Fix error message.
-
-2004-02-27 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/include/nonposix.h (write, dup, dup2, close) [_MSC_VER]:
- New macros.
-
- * src/roff/groff/pipeline.c: Declare strcasecmp.
- (run_pipeline) [_WIN32]: Use function name variants which don't
- start with `_'.
- Fix stream handling.
-
-2004-02-27 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/include/nonposix.h: Fix declaration of `system_shell_name'.
- Declare `spawnvp_wrapper' and macro definitions of spawnvp only
- for platforms which use the native Win32 runtime libraries.
- (FLUSH_INPUT_PIPE) [_UWIN]: Provide non-empty version.
-
- * src/libs/libgroff/quotearg.c (QUOTE_ARG_MALLOC_ERROR,
- QUOTE_ARG_REALLOC_ERROR): Fix string.
-
- * src/preproc/html/pre-html.cpp: Remove declaration of
- `spawnvp_wrapper'.
- Don't use __MINGW32__.
- s/DEBUG_FILE/DEBUG_FILE_DIR/.
- (DEBUG_TEXT, DEBUG_NAME, DEBUG_FILE) [DEBUGGING]: New macros.
- (OUTPUT_STREAM, PS_OUTPUT_STREAM, REGION_OUTPUT_STREAM): New macros.
- (char_buffer::run_output_filter) [MAY_FORK_CHILD_PROCESS]: Fix
- calls to `set_redirection' and `WAIT'.
- [MAY_SPAWN_ASYNCHRONOUS_CHILD]: Remove unused variable `i' and `j'.
- Fix calls to `set_redirection' and `save_and_redirect'.
- (char_buffer::do_html, char_buffer::do_image) [DEBUGGING]: Fix calls
- to `set_redirection' and `save_and_redirect'.
- (usage): Fix message.
- (makeTempFiles, main): Use `DEBUG_FILE'.
-
-2004-02-21 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.h (WARN_TOTAL): Fix value.
-
-2004-02-21 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/libs/libgroff/quotearg.c: New file, providing proper argument
- quoting for MSVC's spawn* and exec* functions.
- * src/libs/libgroff/spawnvp.c: New file, providing a wrapper around
- spawnvp with proper quoting for MSVC.
-
- * src/libs/libgroff/assert.cpp (program_name),
- src/libs/libgroff/new.cpp (program_name): Declare as `extern "C"'.
- * src/libs/libgroff/Makefile.sub (OBJS, CSRCS): Updated.
-
- * src/roff/troff/input.cpp (program_name): Declare as `extern "C"'.
-
- * src/include/error.h (program_name): Declare as `extern "C"'.
- * src/include/nonposix.h [__MSDOS__ ...]: Handle spawnvp.
-
-2004-02-21 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/preproc/html/pre-html.cpp [__CYGWIN__ ...]: Declare
- spawnvp_wrapper.
- [MAY_SPAWN_ASYNCHRONOUS_CHILD]: Declare i and j.
-
-2004-02-20 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/roff/groff/pipeline.c (cmd) [__MSDOS__ || ...]: New global
- variable.
- (sbasename) [__MSDOS__ || ...]: New function.
- (system_shell_name) [__MSDOS__ || ...]: Use a different, more
- generic algorithm.
- (system_shell_dash_c, is_system_shell) [__MSDOS__ || ...]: Updated.
- (run_pipeline) [_WIN32]: Use _XXX variants for some macros instead
- of XXX.
- Use STDOUT_FILENO instead of hardcoded file handle.
- (signal_catcher) [__MSDOS__]: Moved to non-_WIN32 section.
-
-2004-02-19 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/div.cpp: Include nonposix.h after troff.h to
- avoid warnings w.r.t. redefinition of P_tmpdir for some compilers.
-
-2004-02-18 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/Makefile.sub (DEVFILES): Updated to contain all
- new font and mapping files.
-
-2004-02-18 Jeff Conrad <jeff_conrad@msn.com>
- Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/include/nonposix.h (FLUSH_INPUT_PIPE): New macro to empty
- an input pipe. This is needed for the MSVC compiler to make troff's
- `-o' option work.
-
- * src/roff/troff/div.cpp: Include nonposix.h.
- (cleanup_and_exit): Call FLUSH_INPUT_PIPE.
-
-2004-02-17 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/special.awk: New script.
- * font/devlj4/generate/Makefile (S): Use special.awk.
- * font/devlj4/*: Regenerated, including the following new files:
- Arial (AR, AB, AI, ABI), Times New Roman (TNRR, TNRB, TNRI, TNRBI),
- MS Symbol (SYMBOL), Wingdings (WINGDINGS).
- * NEWS: Document new lj4 fonts and revised hpftodit.
-
-2004-02-17 Paco Andrés Verdú <pandres@dragonet.es>
-
- * src/devices/grolbp/lbp.h (vmdvarc): Fix formatting string.
-
-2004-01-25 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/progname.cpp: Replaced with...
- * src/libs/libgroff/progname.c: New file.
- * src/libs/libgroff/Makefile.sub: Updated accordingly.
-
-2004-01-17 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/Makefile (SYMBOL): Use 9nb28703.tfm.
-
-2004-01-16 Jeff Conrad <jeff_conrad@msn.com>
-
- * font/devlj4/generate/wingdings.map,
- font/devlj4/generate/symbol.map: Include unnamed glyphs.
- Use groff glyph names where possible.
- * src/devices/grolj4/lj4_font.man: Minor updates.
-
-2004-01-13 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac (DC): Handle TTY devices.
-
- * doc/webpage.ms: Document viewCVS from ffii.org.
- * NEWS, README: Updated.
-
- * src/roff/groff/groff.man: Mention lj4_font man page.
-
- * font/devlj4/generate/Makefile (SYMBOLMAP, WINGDINGSMAP): New
- variables.
- (FONTS): Add SYMBOL and WINGDINGS.
- (SYMBOL, WINGDINGS): New targets.
-
-2004-01-13 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/devices/grolj4/lj4_font.man: New man page.
- * src/devices/grolj4/Makefile.sub (MAN5): New variable.
- * src/devices/grolj4.man: Mention lj4_font man page.
-
- * src/utils/hpftodit/hpftodit.cpp (read_map): Handle line comments.
- * src/utils/hpftodit/hpftodit.man: Document it.
- (CW): New macro.
- Remove details about fonts (which are now in lj4_font.man).
-
- * font/devlj4/generate/symbol.map,
- font/devlj4/generate/wingdings.map: New files.
-
-2004-01-12 Werner LEMBERG <wl@gnu.org>
-
- * README: Mention ffii's viewcvs access.
-
-2004-01-09 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/special.map: Map MSL 228 to U+221F.
-
-2004-01-09 Jeff Conrad <jeff_conrad@msn.com>
-
- Revert most of the change from 2004-01-03 to better control used
- symbol sets.
-
- * src/utils/hpftodit/hpftodit.cpp (symbol_set): New structure.
- (text_symbol_sets, special_symbol_sets): New arrays.
- (symbol_set_table): New global variable.
- (read_symbol_sets): Use search order given in the text_symbol_sets
- and special_symbol_sets arrays. If command line flag -a is not
- given, search both arrays.
- (output_charset): Require x_height_tag only for command line flag -i.
-
-2004-01-06 Werner LEMBERG <wl@gnu.org>
-
- Implement string-valued registers \n[.m] and \n[.M] to return the
- name of the current drawing and background color, respectively.
-
- * src/roff/troff/symbol.h: Moved to...
- * src/include/symbol.h: Here.
- Small fixes to make it work outside of the `troff' directory.
- * src/roff/troff/symbol.cpp: Moved to...
- * src/libs/libgroff/symbol.cpp: Here.
- Small fixes to make it work outside of the `troff' directory.
-
- * src/include/Makefile.sub (HDRS), src/libs/libgroff/Makefile.sub
- (OBJS, CCSRCS), src/roff/troff/Makefile.sub (OBJS, CCSRCS, HDRS):
- Updated.
-
- * src/include/color.h: Include symbol.h.
- (color): Add new field `nm'.
- * src/libs/libgroff/color.cpp (color::color): Updated.
-
- * src/roff/troff/dictionary.cpp, src/roff/troff/div.cpp,
- src/roff/troff/node.cpp, src/roff/troff/number.cpp,
- src/roff/troff/reg.cpp: Don't include symbol.h.
-
- * src/roff/troff/env.cpp: Don't include symbol.h.
- (environment::get_glyph_color_string,
- environment_get_fill_color_string): New member functions.
- (init_env_requests): Handle `.m' and `.M' registers.
- * src/roff/troff/input.cpp: Don't include symbol.h.
- (default_symbol): Moved to symbol.cpp/symbol.h.
- (do_glyph_color, do_fill_color, define_color): Pass symbol name
- to color constructor.
- * src/roff/troff/env.h: Updated.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document new registers.
-
-2004-01-05 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cpp (space_node::get_breakpoints,
- space_node::nbreaks): Protect against zero `next' field.
-
-2004-01-03 Jeff Conrad <jeff_conrad@msn.com>
-
- In hpftodit, use the symbol sets offered in the TFM.
-
- * src/utils/hpftodit/hpftodit.cpp (NO_GLYPH): New constant.
- (symbol_set, text_symbol_sets, special_symbol_sets,
- symbol_set_table): Removed.
- (get_printcode): Removed.
- (read_symbol_sets): Initialize `symbol_set' field with
- `NO_SYMBOL_SET'.
- Simplify code to just use the `kind' value.
- (output_charset): Improve output formatting.
- (dump_symbols): Simplified.
-
-2004-01-02 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/text.map: Add more MSL numbers.
-
-2004-01-02 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/utils/hpftodit/hpftodit.cpp (is_decomposed): New macro.
- (text_symbol_sets): Add more symbol sets.
- (debug_flag): New static variable (moved from `main').
- (get_printcode, show_symset): New functions.
- (main): Remove `debug_flag'.
- (output_charset): Use `show_symset'.
- (dump_symbols): Use `show_symset'.
- Print symsets for all glyphs.
- (read_map): Actually call `unicode_to_ucode_make' but this time
- correctly.
-
-2004-01-01 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/text.map, font/devlj4/generate/special.map:
- Fix placement of comments.
-
-2004-01-01 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/utils/hpftodit/hpftodit.cpp (main): Read map file also if
- option `-d' is given.
- (output_charset): Improve warning messages to give more information.
- (dump_symbols): Make information more precise.
- (usage): Updated.
- (read_map): Don't call unicode_to_ucode_name; the glyph names must
- appear as-is and shouldn't be decomposed.
-
-2003-12-31 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/hpftodit/hpftodit.cpp (dump_tags): Handle posture_tag.
- * font/devlj4/generate/Makefile (IFLAG): Updated to new units.
- (FONTS): Add TrueType font families Arial and Times New Roman.
- (TNRR, TNRB, TNRI, TNRBI, AR, AB, AI, ABI): New targets.
- * font/devlj4/generate/text.map: Fix Unicode values of `fi' and
- `fl'.
-
-2003-12-31 Jeff Conrad <jeff_conrad@msn.com>
-
- * test-groff.in (SEP): Quote value.
- * src/roff/troff/node.cpp (suppress_node::tprint): Change type of
- `tem' to `char*' to avoid deallocation of a pointer to a constant
- object which some compilers don't like.
-
-2003-12-31 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate (text.map, special.map): Rewritten to work
- with the new hpftodit version.
-
-2003-12-30 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/utils/hpftodit/hpftodit.cpp (output_charset): Emit HP symbol
- set and 8bit character code for all glyphs also.
-
-2003-12-30 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/strcasecmp.c: Updated from gnulib.
-
-2003-12-29 Werner LEMBERG <wl@gnu.org>
-
- More fixes for MSVC compiler.
-
- * doc/Makefile.sub, contrib/mom/Makefile.sub (GROFF_BIN_PATH): Use
- $(SEP).
-
- * src/include/nonposix.h (STDIN_FILENO, STDOUT_FILENO,
- STDERR_FILENO) [_MSC_VER]: Define conditionally.
- (getpid) [_MSC_VER]: Remove.
- Include direct.h and process.h conditionally.
-
- * src/roff/troff/node.cpp (suppress_node::tprint): Don't use
- parentheses for a_delete.
-
- * src/utils/lookbib/lookbib.cpp: Include nonposix.h.
-
- * test-groff: Replaced with...
- * test-groff.in: This new template to handle path separator
- properly.
-
- * configure.ac: Check for direct.h and process.h.
- Generate test-groff script.
- * configure, src/include/config.hin: Regenerated.
-
-2003-12-28 Werner LEMBERG <wl@gnu.org>
-
- Add integral extension glyph.
- Add new option `-x' to afmtodit to suppress use of built-in AGL.
-
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `u23AE'.
-
- * font/devps/generate/textmap: Provide entry for `integralex' to
- override (old) PUA value of the AGL.
- * font/devps/generate/Makefile (SS): Add afmtodit option `-x'.
- * font/devps/*: Regenerated.
-
- * src/utils/afmtodit/afmtodit.pl: Add option `-x'.
- * src/utils/afmtodit/afmtodit.man, NEWS: Updated.
-
-2003-12-27 Werner LEMBERG <wl@gnu.org>
-
- Add forgotten `coproduct' symbol (already available for DVI).
-
- * font/devhtml/R.proto, font/devps/generate/textmap,
- font/devps/symbolmap, font/devutf8/R.proto, man/groff_char.man,
- src/libs/libgroff/uniglyph.cc, src/libs/libgroff/glyphuni.cpp: Add
- U+2210 (\[coproduct]).
-
-2003-12-26 Jeff Conrad <jeff_conrad@msn.com>
-
- hpftodit has been extended to handle TrueType metric files and
- more glyphs. See hpftodit.man for more details.
-
- * src/utils/hpftodit/hpftodit.cpp: Include stdio.h, string.h,
- ctype.h, and unicode.h.
- s/msl/charcode/ everywhere since we now handle Unicode values also.
- (equal, NO, YES, MSL, SYMSET, UNICODE, UNICODE): New macros.
- Use it where appropriate.
- (MULTIPLIER): Replaced with...
- (multiplier): New global static variable.
- (scale): Updated.
- (tag_type): Add more TFM tags.
- (tag_name): New array.
- (ENUM_TYPE, FLOAT_TYPE): Removed.
- (BYTE_TYPE): New value assigned.
- (ASCII_TYPE, RATIONAL_TYPE): New enumeration values.
- (text_symbol_sets, special_symbol_sets): Extended to cover more
- sets.
- (check_type): Add return value.
- (check_units): Add parameters to get ppi and upem values.
- Handle TrueType TFM data.
- (output_font_name): New function.
- (output_charset): Add parameter to handle TFM type.
- Handle TrueType TFMs also.
- (em_fract): New macro.
- (dump_tags): Be much more verbose and handle more tags.
- (dump_ascii, dump_symbol_sets, dump_symbols): New functions.
- (hp_msl_to_ucode_name, unicode_to_ucode_name, is_uname): New
- functions.
- (read_map): Add parameter to handle TFM type.
- Handle both MSL and Unicode mappings.
- (main): Add two new command line options `-a' and `-q'.
- Updated to make use of new functions.
- (usage): Updated.
-
- * src/utils/hpftodit/hpuni.cpp: New file.
-
- * src/utils/hpftodit/Makefile.sub, src/utils/hpftodit/hpftodit.man:
- Updated.
-
-2003-12-25 Werner LEMBERG <wl@gnu.org>
-
- * src/include/nonposix.h (read) [_MSC_VER]: Define.
-
-2003-12-24 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.man: Some reformulations as suggested
- by Michail Vidiassov <master@iaas.msu.ru>.
-
-2003-12-20 Werner LEMBERG <wl@gnu.org>
-
- * font/devhtml/R.proto: Add u00{47,67}_0306, u00{53,73}_0327,
- and u0049_0307.
- Add missing latin-2 glyphs.
- * font/devutf8/R.proto: Add missing latin-2 glyphs.
-
- * tmac/troffrc: Load `composite.tmac' earlier.
-
- * tmac/dvi.tmac, tmac/ps.tmac, tmac/lbp.tmac: Add u00{47,67}_0306,
- u00{53,73}_0327, and u0049_0307.
- * tmac/X.tmac: Add u00{47,67}_0306.
- * tmac/tty-char.tmac: Use composite glyph names for readability.
-
- * NEWS: Updated.
-
- * src/include/unicode.h: Remove `extern' keywords.
-
-2003-12-20 Nilgün Belma Bugüner <nilgun@superonline.com>
-
- * tmac/latin5.tmac: New file.
-
-2003-12-19 Werner LEMBERG <wl@gnu.org>
-
- Add some glyphs needed for Turkish.
-
- * font/devutf8/R.proto: Add u00{47,67}_0306, u00{53,73}_0327,
- and u0049_0307.
-
- * tmac/composite.tmac: Add `,' as a synonym for `ac' accent.
- * tmac/tty-char.tmac: Add representations for u00{47,67}_0306,
- u00{53,73}_0327, and u0049_0307.
-
-2003-12-18 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/ps.cc (ps_output::put_float): Revert change
- from 2001-10-04.
- Remove trailing zeros.
-
-2003-12-17 Werner LEMBERG <wl@gnu.org>
-
- Make \? transparent to end-of-sentence recognition.
-
- * src/roff/troff/input.cc (non_interpreted_node): Add
- `ends_sentence' member function.
-
-2003-12-16 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Document `dt' request correctly.
- Other minor typographical improvements.
-
-2003-12-10 Michail Vidiassov <master@iaas.msu.ru>
-
- * src/utils/afmtodit/Makefile.sub (afmtodit): Fix typo.
-
-2003-12-10 Richard Stallman <rms@gnu.org>
-
- * LICENSE: Better wording.
-
-2003-12-09 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_BROKEN_SPOOLER_FLAGS): Set default value to 0.
- * configure, NEWS: Updated.
-
-2003-12-08 Werner LEMBERG <wl@gnu.org>
-
- * FDL: Updated to version 1.2 (from www.gnu.org/copyleft).
-
-2003-12-07 Bernd Warken <bwarken@mayn.de>
-
- * LICENSE: Updated.
-
-2003-12-07 Werner LEMBERG <wl@gnu.org>
-
- * INSTALL: Improved.
-
-2003-12-05 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Use path separator character of target platform for compiled-in
- default paths.
-
- * aclocal.m4 (GROFF_TARGET_PATH_SEPARATOR): New macro.
- * configure.ac: Use GROFF_TARGET_PATH_SEPARATOR.
- * configure: Regenerated.
- * Makefile.in (SEP): Use GROFF_PATH_SEPARATOR.
-
-2003-12-05 Werner LEMBERG <wl@gnu.org>
-
- * src/include/nonposix.h (PATH_SEP_CHAR): New definition.
- Replace `PATH_SEP[0]' with `PATH_SEP_CHAR' everywhere.
-
-2003-12-04 Bernd Warken <bwarken@mayn.de>
-
- * LICENSE: New file.
-
-2003-12-03 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.pl: Comment out code which handles
- ligatures present in AFM files since groff currently only
- understands some standard ligatures and nothing else.
-
-2003-12-03 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/roff/groff/groff.cpp (main): Don't run the spooler if
- option -v is given.
-
- * src/roff/groff/pipeline.c (run_pipeline) [_WIN32]: Fix error
- messages.
- Close stdout copy.
- Don't use Unix wait flags.
-
-2003-12-02 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/glyphuni.cpp, src/roff/troff/unicode.cpp,
- src/roff/troff/unicode.h, src/roff/troff/uniglyph.cpp,
- src/roff/troff/uniuni.cpp: Moved to...
- * src/libs/libgroff/glyphuni.cpp, src/libs/libgroff/unicode.cpp,
- src/libs/libgroff/unicode.h, src/libs/libgroff/uniglyph.cpp,
- src/libs/libgroff/uniuni.cpp: Here.
-
- * src/include/Makefile.sub.old (HDRS),
- src/libs/libgroff/Makefile.sub (OBJS, CCSRCS),
- src/roff/troff/Makefile.sub (HDRS, PBJS, CCSRCS): Updated.
-
-2003-12-01 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/preproc/htlp/pre-html.cpp (__tmpfile): Renamed to
- `DEBUG_FILE'.
- Updated all users.
-
-2003-12-01 Werner LEMBERG <wl@gnu.org>
-
- * groff.texinfo: Document special behaviour of `.vs 0'.
- Improve documentation of `cflags' request.
- * NEWS: Updated.
-
-2003-11-29 Werner LEMBERG <wl@gnu.org>
-
- * font/devlj4/generate/Makefile (CORONET): Use correct TFM.
- * font/devlj4/CORONET: Regenerated.
-
-2003-11-24 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cpp (hyphen_trie::read_patterns_file): Fix loop
- if processing hyphenation patterns in traditional mode.
- Improve error messages.
-
-2003-11-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cpp (troff_output_file::put_char_width,
- troff_output_file::put_char): Fix type of local variable `c'.
-
-2003-11-19 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/pipeline.c (P): Removed. Updated all function
- declarations.
- (i_to_a): Removed. libgroff already provides this function.
- (run_pipeline) [_WIN32]: Don't use itoa but i_to_a.
-
-2003-11-18 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/roff/groff/pipeline.c (xstrsignal): Fix usage of
- HAVE_DECL_SYS_LIST.
-
-2003-11-17 Werner LEMBERG <wl@gnu.org>
-
- * COPYING: Use correct version.
-
-2003-11-11 Werner LEMBERG <wl@gnu.org>
-
- LynxOS 4.0.0 doesn't declare vfprintf.
-
- * configure.ac: Check for vfprintf.
- * configure: Regenerated.
- * src/include/lib.h: Handle `NEED_DECLARATION_VFPRINTF'.
- * src/include/config.hin: Regenerated.
-
-2003-11-10 Werner LEMBERG <wl@gnu.org>
-
- LynxOS 4.0.0 has snprintf (without declaration) but no vsnprintf.
-
- * configure.ac: Check for vsnprintf.
- * configure: Regenerated.
- * src/include/lib.h: Handle `NEED_DECLARATION_VSNPRINTF' and
- `HAVE_VSNPRINTF'.
- * src/include/config.hin: Regenerated.
-
-2003-11-09 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4: Updated syntax to autoconf 2.59.
- (GROFF_HTML_PROGRAMS): Use AC_FOREACH.
- Don't check for gsos2.
- (GROFF_SRCDIR, GROFF_BUILDDIR): Removed. autoconf 2.59 provides
- working abs_top_srcdir and abs_top_builddir.
-
- * configure.ac: Updated syntax to autoconf 2.59.
- Don't call GROFF_SRCDIR and GROFF_BUILDDIR.
- Replace call to AC_DECL_SYS_SIGLIST with call to AC_CHECK_DECLS.
- * configure: Regenerated.
-
- * Makefile.in, doc/Makefile.in: s/@top_srcdir@/@abs_top_srcdir@/,
- s/@groff_top_builddir@/@abs_top_builddir@/.
-
- * src/roff/groff/pipeline.c (xstrsignal):
- s/SYS_SIGLIST_DECLARED/HAVE_DECL_SYS_SIGLIST/.
-
-2003-11-07 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grodvi/dvi.cpp (draw_dvi_printer::draw) ['a']: Always
- make start angle smaller than end angle to circumvent a bug in tpic
- handling of some versions of dvipdfm (and dvipdfmx).
-
-2003-10-30 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/grops.man: Improve section on creating EPS.
-
-2003-10-29 Werner LEMBERG <wl@gnu.org>
-
- * contrib/pic2graph/pic2graph.sh: Fix typo (-P-letter ->
- -P-pletter).
-
-2003-10-28 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fix documentation of `.if'.
-
-2003-10-27 Michail Vidiassov <master@iaas.msu.ru>
-
- * src/utils/afmtodit/afmtodit.pl: Handle unmapped characters of
- the form `uniXXXX' also.
-
-2003-10-27 Werner LEMBERG <wl@gnu.org>
-
- * contrib/eqn2graph/eqn2graph.sh, contrib/grap2graph/grap2graph.sh,
- contrib/pic2graph/pic2graph.sh: Implement secure management of
- temporary files.
- Pass `-P-pletter' to groff to avoid data outside of the converted
- area -- some versions of `convert' (for example 5.3.8) don't check
- the bounding box of the image but always use a fixed image size
- (letter paper format).
- * contrib/eqn2graph/eqn2graph.man, contrib/grap2graph/grap2graph.man,
- contrib/pic2graph/pic2graph.man: Updated.
-
- * src/roff/groff/groff.man: Document $TMP and $TEMP.
-
-2003-10-26 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/troff.cpp (troff_output::simple_circle,
- troff_output::simple_ellipse, troff_output::simple_arc,
- troff_output::simple_line, troff_output::simple_spline,
- troff_output::simple_polygon): Insert a space before arguments.
- (troff_output::set_fill): Emit `\&' before `\D'Fg...' since the
- latter doesn't produce a node, so the following `.sp -1' would do
- the wrong thing.
- Don't emit `.sp -1' after \M. This also doesn't produce a token
- (and we don't have to care about compatibility mode).
- (troff_output::set_color, troff_output::reset_color): Don't emit
- `.sp -1' after \M and \m.
-
- * src/roff/troff/input.cpp (old_have_input): New global variable.
- (input_stack::get): Handle `old_have_input'.
- (process_input_stack) <token::TOKEN_NEWLINE>: Call
- `trapping_blank_line' depending on `old_have_input', not
- `have_input'.
-
-2003-10-20 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * src/libs/libgroff/tmpfile.cpp [__MSDOS__, _Win32]
- (WIN32_TMPDIR_ENVVAR, MSDOS_TMPDIR_ENVVAR): New macros, providing
- default directory names for temporary files.
- [__MSDOS__, _Win32] (temp_init::temp_init): Use them.
-
- * src/roff/groff/pipeline.c [__MSDOS__]: Include stdlib.h.
- [__MSDOS__] (run_pipeline): Honour environment variables.
- Don't use `tmpnam' but `tempnam' to work around messy
- implementation.
-
- * README.MinGW: New file.
-
-2003-10-16 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/pre-html.cpp (write_upto_newline): Don't use
- `(*t)->next' without testing validity of `*t'.
- (usage): Make it more readable.
-
-2003-10-16 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Make html device run under both MS-DOS and Win32.
-
- * src/preproc/html/pre-html.cpp (MAY_FORK_CHILD_PROCESS,
- MAY_SPAWN_ASYNCHRONOUS_CHILD): New macros to control whether
- spawn or fork+exec has to be used, and whether parent must sleep
- until the child process terminates. Used in
- `char_buffer::run_output_filter'.
- (copyofstdoutfd): Removed.
- (char_buffer): Replace `write_file_html' and `write_file_troff'
- member functions with `emit_troff_output' and `run_output_filter'.
- (DEVICE_FORMAT, HTML_OUTPUT_FILTER, IMAGE_OUTPUT_FILTER): New
- macros.
- (replaceFd): Replaced with...
- (set_redirection): New auxiliary function.
- (waitForChild): Replaced with...
- (save_and_redirect): New auxiliary function for.
-
- (char_buffer::do_html, char_buffer::do_image): Simplified, using new
- functions.
-
-2003-10-14 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * aclocal.m4 (GROFF_SYS_NERR): Check stdlib.h also.
- (GROFF_LIBC): New function.
- * configure.ac: Call GROFF_LIBC.
- Check for `kill'.
- * configure: Regenerated.
-
- * src/include/lib.h: Handle __MINGW32__.
- * src/include/nonposix.h [_MSC_VER]: Handle __MINGW32__.
- Add macro for `pipe'.
- Define P_tmpdir.
-
- * src/roff/groff/pipeline.c (run_pipeline): Handle `no_pipe'
- correctly.
-
- * src/utils/indxbib/signal.c (handle_fatal_signal) [!HAVE_KILL]:
- Implement.
-
-2003-10-13 Werner LEMBERG <wl@gnu.org>
-
- Finally fix change 2003-08-26, based on ideas from Chuck Silvers
- <chuq@chuq.com>.
-
- * contrib/mom/Makefile.sub: Use a stamp file in the `examples'
- directory.
-
-2003-10-12 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.cpp (help), src/devices/grops/ps.cpp (usage),
- src/roff/troff/input.cc (usage): Updated.
-
- * NEWS, doc/groff.texinfo: Updated.
-
-2003-10-12 Peter Miller <millerp@canb.auug.org.au>
-
- * src/libs/libgroff/searchpath.cpp
- (search_path::open_file_cautious): New function which also handles
- `-' as stdin and stdout depending on the access mode.
- * src/include/searchpath.h (search_path): Updated.
-
- * src/devices/grops/ps.cpp (main): Handle new `-I' switch.
- * src/devices/grops/ps.h: Include `searchpath.h'.
- * src/devices/grops/psrm.cpp (resource_manager::supply_resource):
- Open resource file with `include_search_path.open_file_cautious'.
- * src/devices/grops/grops.man: Document new `-I' switch.
-
- * src/devices/grodvi/dvi.cpp (main), src/devices/grolbp/lbp.cpp
- (main), src/devices/grolj4/lj4.cpp (main),
- src/devices/grotty/tty.cpp (main): Ignore new `-I' switch.
-
- * src/preproc/soelim/soelim.cpp (include_list_length, include_list):
- Replaced with...
- (include_search_path): New global variable.
- (include_path_append): Removed.
- (main): Use `include_search_path.command_line_dir' to handle `-I'.
- (do_file): Simplify, using new
- `include_search_path.open_file_cautious'.
-
- * src/roff/groff/groff.cpp (print_commands): Accept file handle as
- parameter.
- (main): Pass arguments to `-I' to both troff and devices.
- Improve handling of `-V'.
- * src/roff/groff/groff.man: Document changes to -I and -V.
-
- * src/roff/troff/input.cpp (include_search_path): New global
- variable.
- (next_file, source, ps_bbox_request, transparent_file,
- process_input_file): Use new
- `include_search_path.open_file_cautious'.
- (main) Handle `-I' switch.
- * src/roff/troff/node.cpp (troff_output_file::really_copy_file):
- Use new `include_search_path.open_file_cautious'.
- * src/roff/troff/node.h: New extern symbol `include_search_path'.
- * src/roff/troff/troff.man: Document new `-I' switch.
-
-2003-09-15 Ruslan Ermilov <ru@FreeBSD.org>
-
- Support multiple calls of .Lb in LIBRARY section.
-
- * tmac/doc-common (doc-in-library-section): New register.
- (doc-section-library): New string.
- (Sh): Set `doc-in-library-section'.
- (Rd): Updated.
- * tmac/doc-syms (Lb): Insert breaks before and after arguments
- if in LIBRARY section.
- * tmac/doc.tmac (doc-save-global-vars): Updated.
- * NEWS, tmac/groff_mdoc.man: Updated.
-
-2003-09-14 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (doc-default-operating-system): New variable.
- (Os): Use it.
-
-2003-09-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (doc-reset-reference): Handle data for `%I' also.
-
-2003-08-31 Werner LEMBERG <wl@gnu.org>
-
- * contrib/mom/Makefile.sub: Fix last change to make it really work.
- * Makefile.comm: Use `test ... ||' in favor of `if test ...; then'.
- (install_dev, uninstall_dev): Check whether $(DEVSCRIPTS) and
- $(DEVFILES) are not empty.
- * Makefile.in: Use `test ... ||' in favor of `if test ...; then'.
-
-2003-08-26 Chuck Silvers <chuq@chuq.com>
-
- * contrib/mom/Makefile.sub (prepare_make_examples): Make it work
- with parallel runs of `make'.
-
-2003-08-23 Stephen Gildea <http://www.gildea.com/stephen>
-
- * src/preproc/ref/ref.cpp (reference::compute_sort_key): Always
- insert SORT_SEP. With certain combinations of sort specifications,
- refer sorted entries in the wrong order. In particular, entries
- with a missing field should be be sorted before all entries that
- have that field, before refer looks to the next field.
-
-2003-08-23 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/pfbtops/Makefile.sub (LINK.c): Define it so that the
- g++ linker is used. Reported by Mark J. Reed
- <mark.reed@turner.com>.
-
-2003-08-16 Heinz-Jürgen Oertel <hj.oertel@surfeu.de>
-
- Add key character `x' to tbl which makes tbl call a user-defined
- macro on a table cell.
-
- * src/preproc/tbl/table.h (entry_modifier): Add `macro'.
- * src/preproc/tbl/table.cpp (block_entry::do_divert): Call
- `set_modifier' after printing the compatibility request.
- (set_modifier): Print call to `m->macro' if not empty.
- * src/preproc/tbl/main.cpp (entry_format::debug_print): Handle
- `macro'.
- (process_format): Implement cases `x' and `X'.
- * src/preproc/tbl/tbl.man, NEWS: Updated.
-
-2003-08-15 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Minor fixes.
-
-2003-08-09 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac [cR]: Fix redefinition of `bp'.
-
-2003-08-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.sub: Not all shells expand wildcards in the `for'
- argument list to nothing if there is no file to match. Use `ls' as
- a protection, similar to autoconf.
-
- * Makefile.comm (install_dev, uninstall_dev): Protect `for' against
- empty argument lists.
-
- * doc/groff.texinfo: Improve documentation how vertical spacing
- and line breaks interact.
- Other minor fixes.
-
- * tmac/www.tmac: Initialize `www-htmlimage-gap'.
-
-2003-08-03 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, src/devices/grops/grops.man: -b16 is necessary to produce
- EPS (using eps2eps or similar programs to compute the bounding box).
-
-2003-07-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Use the new @/ command to avoid overlong lines.
- * doc/texinfo.tex: Updated from texinfo 4.6.
- * README.CVS: From now on we need texinfo 4.6.
-
-2003-07-23 Werner LEMBERG <wl@gnu.org>
-
- Add requests `dei1' and `ami1' for completeness.
-
- * src/roff/troff/input.cc (calling_mode): Remove
- CALLING_DISABLE_COMP.
- (comp_mode): New enumeration.
- (do_define_string, define_string, define_nocomp_string,
- append_string, append_nocomp_string): Updated.
- (do_define_macro): Add third parameter.
- (define_macro, define_nocomp_macro, define_indirect_macro,
- append_macro, append_nocomp_macro, append_indirect_macro): Updated.
- (define_indirect_nocomp_macro, append_indirect_nocomp_macro): New
- functions.
- (ignore): Updated.
- (init_input_requests): Add `dei1' and `ami1'.
-
- * tmac/trace.tmac: Handle de1 and am1.
- (de): Improve tracing message.
- (am): Add missing `do'.
- (return): Use de1.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document new requests.
-
-2003-07-22 Heinz-Jürgen Oertel <hj.oertel@surfeu.de>
-
- Add option -G to .MPIMG to insert a gap between text and the image.
-
- * tmac/www.tmac (www-finish-left-po, www-finish-right-ll,
- www-finish-left-ll): Updated.
- (www-image-just, www-image-gap, www-htmlimage-gap): New variables.
- (MPIMG): Make option -L and -R optional.
- Implement option -G.
-
-2003-07-22 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cpp
- (html_printer::do_file_components): Don't use `stdout' as lvalue
- since it can be a macro.
-
-2003-07-22 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/strerror.c: Include errno.h to be in sync with
- the corresponding test in aclocal.m4.
-
-2003-07-21 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/pre-html.cpp (TRANSPARENT): Don't use colour
- names but RGB values directly. Otherwise pnmtopng depends on
- an external file `rgb.txt' which maps colour names to values.
-
-2003-07-20 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_SYS_ERRLIST): Include stdlib.h for MinGW.
- * configure, src/include/config.hin: Regenerated.
-
- * src/libs/libgroff/strerror.c: Include stdlib.h for MinGW.
-
-2003-07-19 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Add solution for UTF-8 problem with hyphens.
-
-2003-07-18 Werner LEMBERG <wl@gnu.org>
-
- * *.man: Switch to non-compatibility mode temporarily if GNU
- syntax extensions are used in the particular man page.
-
- * PROBLEMS: Add solutions for SGR problems.
-
-2003-07-17 Werner LEMBERG <wl@gnu.org>
-
- Don't ignore grotty's command line options if \X'tty: sgr ...' is
- used to change the drawing scheme.
-
- * src/devives/grotty/tty.cpp (bold_flag_option,
- underline_flag_option, italic_flag_option, reverse_flag_option,
- bold_underline_mode_option): New global variables.
- (update_options): New function.
- (tty_printer::special): Call update_options.
- (main): Don't set xxx_flag but xxx_flag_option, then call
- update_options.
-
-2003-07-14 Werner LEMBERG <wl@gnu.org>
-
- Make grotty emit proper Unicode box drawing characters for -Tutf8.
-
- * src/devices/grotty/tty.cpp (START_LINE, END_LINE): New enum
- values.
- (hline_char, vline_char): New global variables.
- (tty_printer::tty_printer): Initialize them.
- (tty_printer::draw): Emit START_LINE and END_LINE flags for both
- horizontal and vertical lines.
- (crossings): New global array.
- (tty_printer::end_page): Use it to determine the proper crossing
- character for -Tutf8.
-
-2003-07-12 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefilesub (HTMLDOCFILESALL): New macro.
- (HTMLDOCFILES): Revert to `pic.html'.
- (CLEANADD, install_html, uninstall_sub): Use HTMLDOCFILESALL.
-
-2003-07-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Improve documentation of absolute coordinates.
- Document absolute positioning of pictures.
-
- * NEWS: Add new pic capability.
-
-2003-07-09 Hartmut Henkel <hartmut_henkel@gmx.de>
-
- * src/libs/libgroff/geometry.cpp (check_output_arc_limits):
- Rewritten.
-
-2003-07-07 Werner LEMBERG <wl@gnu.org>
-
- Implement support for dashed and dotted ellipses in pic. Based on
- a patch from Hartmut Henkel <hartmut_henkel@gmx.de>.
-
- * src/preproc/pic/common.cpp (common_output::ellipse_arc,
- common_output::dashed_ellipse, common_output::dotted_ellipse): New
- functions. Ellipse arcs are approximated with circle arcs.
- * src/preproc/pic/common.h (common_output): Updated.
- * src/preproc/pic/tex.cpp (tex_output::ellipse): Use new ellipse
- functions.
- * src/preproc/pic/troff.cpp (simple_output::ellipse): Ditto.
-
- * src/preproc/pic/TODO, src/preproc/pic/pic.man: Updated.
-
-2003-07-06 Werner LEMBERG <wl@gnu.org>
-
- Make grotty work on platforms which have unsigned char as the
- default for char. Based on a patch by Thomas Klausner
- <wiz@netbsd.org>.
-
- * src/devices/grotty/tty.cpp (schar): New typedef.
- Updated calls to declare_ptable and implement_ptable.
- (glyph): Use schar for back_color_idx and fore_color_idx.
- (tty_printer): Use schar for curr_fore_idx and curr_back_idx.
- (tty_printer::tty_color, tty_printer::tty_printer,
- tty_printer::color_to_idx, tty_printer::put_color): Updated.
-
-2003-07-06 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/roff/nroff/nroff.sh: Add option -d for completeness.
- * src/roff/nroff/nroff.man: Updated.
-
-2003-07-05 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, tmac/groff_www.man: Updated.
- * doc/Makefile.sub: Updated.
-
-2003-07-05 Gaius Mulley <gaius@glam.ac.uk>
-
- Implement support for multiple HTML output files.
-
- * src/preproc/html/pre-html.cpp (scanArguments): Dummy handling for
- -j command line option.
-
- * src/devices/grohtml/post-html.cpp (job_name, multiple_files): New
- global variables.
- (file): New fields `new_output_file', `require_links',
- `output_file_name'.
- (file::file): Updated.
- (files::set_file_name, files::set_links_required,
- files::are_links_required, files::is_new_output_file,
- files::file_name, files::next_file_name): New functions.
- (header_desc): New fields `no_of_level_one_headings',
- `header_filename'.
- (header_desc::header_desc): Updated.
- (header_desc::write_headings): Handle multiple files.
- (html_printer::write_header): Save file name in which header occurs.
- (html_printer::determine_header_level): Possibly split files on
- level one headings.
- (html_printer::do_links, html_printer::troff_tag): Updated.
- (html_printer::insert_split_file, html_printer::do_job_name,
- html_printer::emit_link, html_printer::write_navigation,
- html_printer::do_file_components): New functions.
- (html_printer::~html_printer): Handle multiple files.
- (main): Handle command line option `-j'.
-
- * src/devices/grohtml/grohtml.man: Updated.
-
- * doc/Makefile.sub (pic.html), doc/Makefile.in (pic.html): New rule
- which splits file.
-
- * tmac/www.tmac (JOBNAME): New macro.
- * tmac/s.tmac (SH-NO-TAG): New macro.
- (@SH): Call SH-NO-TAG.
- (@NH): Updated.
-
-2003-07-05 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/groff_mdoc.man: Improve documentation of punctuation
- characters.
-
-2003-07-04 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Bd): Change to doc-Li-font later.
-
-2003-07-03 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac [cR]: Redefine `bp' to avoid empty lines.
-
-2003-07-01 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (doc-do-func, doc-do-func-args): Don't print a comma
- after `/*' and `*/'.
- Fix spacing.
- (Fn, Fo): Reduce indentation in synopsis.
-
- * tmac/doc-common (doc-check-depth): New macro.
- (doc-end-macro, Sh, Ss): Use it.
- (Cd): Fix behaviour in synopsis.
- (In): Make it parsed and callable.
- If not in the synopsis, represent the C header file enclosed in
- angle brackets.
- (doc-str-Rv-std-suffix, doc-str-Rv-stds-suffix, doc-str-Rv-std0):
- Use minus, not hyphen.
-
- * tmc/groff_mdoc.man: Updated.
-
-2003-07-01 Werner LEMBERG <wl@gnu.org>
-
- Integrated grap2graph, contributed by Eric S. Raymond.
-
- * contrib/grap2graph/{Makefile.sub, grap2graph.sh, grap2graph.man}:
- New files.
- * Makefile.in, NEWS, MANIFEST, contrib/eqn2graph.man,
- contrib/pic2graph.man, src/roff/groff/groff.man: Updated.
-
-2003-07-01 Colin Watson <cjwatson@debian.org>
-
- * src/xditview/*.c: Add prototypes, fix return types, add includes.
- Based on work by Fumitoshi UKAI <ukai@debian.or.jp>.
-
-2003-06-31 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/tty-char.tmac: Provide `lb', `rb', `lk', `rk', `lt', `rt'.
-
-2003-06-31 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.sub (CLEANADD): Remove all files created by
- running `make groff.{pdf,dvi}'.
-
- * Makefile.sub (DISTCLEANFILES): Remove all non-source files from
- src/xditview also.
-
-2003-06-30 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (SHELL): Define as @SHELL@.
- (mkinstalldirs): Use $(SHELL).
- (MDEFINES): Add $(SHELL).
- * Makefile.comm (SHELL): Removed.
-
-2003-06-29 Werner LEMBERG <wl@gnu.org>
-
- * tmac/s.tmac (De, Ds): New aliases for .DE and .DS, respectively.
- The X11 documentation files use them.
- * tmac/groff_ms.man, doc/groff.texinfo: Document them.
-
-2003-06-15 Robert Goulding <goulding@Princeton.EDU>
-
- * tmac/e.tmac (@C): Handle .ad also.
-
-2003-06-12 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/tbl/tbl.man: Document formatting of text blocks.
-
- * src/roff/troff/input.cc (token::next) <handle_escape_char>:
- Assign `n' even here. It is possible to construct a node
- immediately following an escape character:
-
- .di xx
- \?\\\?a
- .br
- .di
- .xx
-
-2003-06-10 Werner LEMBERG <wl@gnu.org>
-
- * README.WIN32: Removed.
- * MANIFEST: Updated.
-
-2003-06-07 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/nroff/nroff.sh: Don't emit SGR for option -u.
-
-2003-06-05 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/pic.y <sprintf_args>: Implement workaround for bug
- in Compaq C++ V6.5-033 for Compaq Tru64 UNIX V5.1A (Rev. 1885).
-
-2003-06-03 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/hdb.cpp (DBRead): Don't close file handle; this
- is done by the calling function.
-
-2003-05-22 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/X.tmac: Fix definition of `em'.
-
-2003-05-22 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (return_macro_request): Fix detection of
- argument.
-
-2003-05-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (doc-tag-list): Force horizontal mode after tag
- to make items work which consist only of a tag.
-
-2003-05-17 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (doc-tag-list): Don't use \Z to assure that spaces
- aren't stretched in a tag (this can fail with unformatted boxes).
- Instead, insert a break and go back one line.
-
-2003-05-16 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (return_macro_request): If called with
- argument pop macro twice. We need this to trace `return'.
-
- * tmac/trace.tmac: Handle `return'.
- Fix typos.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document.
-
-2003-05-15 Larry Kollar <kollar@alltel.net>
-
- * tmac/groff_ms.man, doc/groff.texinfo: Improve documentation of
- registers `FPS', `FVS', and `FPD'.
-
-2003-05-15 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/pfbtops/pfbtops.c (get_text): Handle loop counter
- correctly.
-
-2003-05-03 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/groff_mdoc.man: Slight improvements.
-
-2003-05-03 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-common (doc-header): Emit vertical space of 1v instead of
- `doc-header-space' after header line if register `cR' is set.
-
-2003-05-02 Werner LEMBERG <wl@gnu.org>
-
- * TODO: Updated.
-
-2003-05-01 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (Nd): Use \[em].
-
-2003-05-01 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-ditroff, tmac/doc-nroff (doc-header-space,
- doc-footer-space): Initialize to 0.5i.
- (doc-setup-page-layout): Don't set doc-header-space and
- doc-footer-space.
-
-2003-04-30 Werner LEMBERG <wl@gnu.org>
-
- * REVISION: Set to 1.
-
- * doc/pic.ms: Document possible problems with `figname'.
-
-2003-04-29 Werner LEMBERG <wl@gnu.org>
-
-Version 1.19 released
-=====================
-
- * VERSION: Set to 1.19.
- * REVISION: Set to 0.
- * doc/groff.texinfo, doc/webpage.ms, NEWS: Updated.
-
- * src/devices/grohtml/post-html.cpp (html_printer::~html_printer):
- Define charset as `US-ASCII' in html output.
-
- * tmac/www.tmac (ULE): Add missing scaling indicator.
-
- * win32-diffs: Removed.
-
-2003-04-28 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Document `dn' and `dl' registers if used with
- `.da' and `.boxa'.
- Document how to insert discardable whitespace with `.ss'.
-
-2003-04-27 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/tex.cpp (tex_output::start_picture): Make code
- work with plain TeX also.
-
- * src/preproc/pic/pic.man, doc/pic.ms: Fix TeX code example.
-
-2003-04-25 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cpp (html_printer::~html_printer):
- Use a loose DTD.
-
-2003-04-24 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/pic.man, doc/pic.ms: Explain how to get a
- vbox with positive height and zero depth if in TeX mode.
-
- * NEWS: Document glyph name changes for grodvi and grolj4.
-
-2003-04-23 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/tex.cpp (tex_output::start_picture): Fix TeX code.
- * doc/pic.ms: Fixed.
-
-2003-04-21 Werner LEMBERG <wl@gnu.org>
-
- HP-UX 10.20 has `snprintf' but it isn't declared.
-
- * configure.ac: Add declaration test for snprintf.
- * configure: Regenerated.
- * src/include/lib.h: Handle `NEED_DECLARATION_SNPRINTF'.
- * src/include/config.hin: Regenerated.
-
-2003-04-19 Werner LEMBERG <wl@gnu.org>
-
- Add keyword `figname' to pic, specifying the name of the picture
- box in TeX mode. Based on a patch from William J Poser
- <wjposer@unagi.cis.upenn.edu>.
-
- * src/preproc/pic/pic.y: New token `FIGNAME'.
- (macro_name): New rule of type <str>.
- (placeless_element): Handle `FIGNAME'.
- * src/preproc/pic/lex.cpp (lookup_keyword): Add `figname'.
- * src/preproc/pic/main.cpp (graphname): New global variable.
- (do_picture): Initialize `graphname'.
- * src/preproc/pic/pic.h: Updated.
- * src/preproc/pic/tex.cpp (tex_output::start_picture): Use
- `graphname'.
- Simplify TeX code.
- (tex_output::text): Beautify output.
- * src/preproc/pic/object.cpp (object_spec::~object_spec): Deallocate
- `shaded' and `outlined' unconditionally.
- * NEWS, src/preproc/pic/pic.man, doc/pic.ms: Updated.
- Minor improvements.
-
- * PROBLEMS, README.CVS: Mention that bison version 1.875b or
- greater is necessary.
-
-2003-04-17 Hartmut Henkel <hartmut_henkel@gmx.de>
-
- Add option -r to soelim to avoid emission of `.lf' lines.
- Add option -t to produces TeX comment lines instead of `.lf' lines.
-
- * src/preproc/soelim/soelim.cpp: New global variables `raw_flag'
- and `tex_flag'.
- (usage): Updated.
- (main): Handle `-r' and `-t'.
- (set_location): Handle `raw_flag' and `tex_flag'.
- * src/preproc/soelim/soelim.man, NEWS: Updated.
-
-2003-04-17 Werner LEMBERG <wl@gnu.org>
-
- * tmac/hyphenex.sh: Replaced with...
- * tmac/hyphenex.pl: This perl script to avoid sed compatibility
- nightmares.
-
- * aclocal.m4 (GROFF_HTML_PROGRAMS): Emit useful warning message
- if --quiet is used for the configure script.
- * configure: Regenerated.
-
-2003-04-16 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/post-html.cpp (text_glob::text_glob):
- Add `const' to second argument.
- (html_printer::add_table_end): Add `const' to argument.
- * src/devices/grohtml/html-text.cpp (html_text::issue_tag): Add
- `const' to arguments.
- * src/devices/grohtml/html-text.h: Updated.
-
- * src/devices/grolbp/charset.h (symset): Use `unsigned char'.
- * src/devices/grolbp/lbp.h (lbpputc): Use `unsigned char' for
- argument.
-
- * src/devices/grotty/tty.cpp (tty_printer::make_rgb_string): Use
- cast for integer constant.
-
- * src/preproc/html/pre-html.cpp (image_device): Use `const'.
- (writeNbytes): Add `const' to first argument.
- (writeString): Add `const' to argument.
- (char_buffer::can_see): Add `const' to third argument.
- * src/preproc/html/pushback.cpp (pushBackBuffer::isString): Add
- `const' to argument.
- * src/preproc/html/pushback.h: Updated.
-
- * src/preproc/soelim/soelim.cpp (include_list): Add `const'.
- (include_path_append): Add `const' to argument.
- (do_file): Updated.
-
- * src/roff/troff/uniglyph.cpp (unicode_to_glyph_list): Use `const'
- for `value'.
- (unicode_to_glyph_init::unicode_to_glyph_init): Updated.
- * src/roff/troff/uniuni.cpp (unicode_decompose_list): Use `const'
- for `value'.
- (unicode_decompose_init::unicode_decompose_init): Updated.
- * src/roff/troff/glyphuni.cpp (glyph_to_unicode_list): Use `const'
- for `value'.
- (glyph_to_unicode_init::glyph_to_unicode_init): Updated.
- * src/roff/troff/input.cc (process_startup_file): Add `const' to
- argument.
-
- * tmac/hyphenex.sh: Make script more portable by using a here
- document.
-
-2003-04-15 Werner LEMBERG <wl@gnu.org>
-
- Renamed all `*.cc' files to `*.cpp'.
- Updated all configuration files, makefiles, and documentation.
-
-2003-04-14 Werner LEMBERG <wl@gnu.org>
-
- * tmac/hyphenex.sh: Slight improvements.
-
-2003-04-13 Werner LEMBERG <wl@gnu.org>
-
- * font/devascii/R.proto, font/devcp1037/R.proto,
- font/devlatin1/R.proto, font/devutf8/R.proto: Fill up remaining
- character slots with unnamed glyphs.
-
- * tmac/an-old.tmac: Fix hyphenation value if `cR' is active.
- (an-first): New global variable.
- (an-header): Emit vertical space between multiple man pages.
-
-2003-04-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, man/groff_out.man: \S only accepts integer
- values.
-
-2003-04-10 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Revised.
-
-2003-04-10 Bernd Warken <bwarken@mayn.de>
-
- * doc/webpage.ms: Improved.
-
-2003-04-09 Werner LEMBERG <wl@gnu.org>
-
- Add register \n[.height] which returns the value of \H.
- Add register \n[.slant] which returns the value of \S.
-
- * src/roff/troff/env.cc (init_env_requests): Implement.
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document.
-
-2003-04-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/html.tmac: Move some of the data into html-end.tmac.
- Remove most of the character translations for eqn since html fonts
- now cover those characters.
- Load www.tmac.
- * tmac/html-end.tmac: New file.
- * tmac/troffrc: Load html.tmac not www.tmac for -Thtml.
- * tmac/troffrc-end: Load html-end.tmac not html.tmac for -Thtml.
- * tmac/Makefile.sub (NORMALFILES): Add html-end.tmac.
-
-2003-04-07 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_out.man: Document negative values of `N' if -Thtml is
- used.
-
-2003-04-06 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.comm (depend.temp): Check location of YTABC.
-
-2003-04-05 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * contrib/mom/Makefile.sub (GROFFBIN): New variable for groff
- binary path.
- (groff_bin_path): Rename to GROFF_BIN_PATH.
- (GROFF): Use GROFFBIN and GROFF_BIN_PATH.
- * doc/Makefile.in (TROFFBIN): New variable for troff
- binary path.
- (GROFFBIN): New variable for groff binary path.
- (groff_bin_path): Rename to GROFF_BIN_PATH.
- (TROFF): Use TROFFBIN.
- (GROFF): Use GROFFBIN and GROFF_BIN_PATH.
- * doc/Makefile.sub (GROFFBIN): New variable for groff
- binary path.
- (groff_bin_path): Rename to GROFF_BIN_PATH.
- (GROFF): Use GROFFBIN and GROFF_BIN_PATH.
-
- * Makefile.comm (install_dev): Install scripts from DEVSCRIPTS
- with INSTALL_SCRIPT.
- (uninstall_dev): Uninstall scripts from DEVSCRIPTS.
- * Makefile.dev (all): Depend on DEVSCRIPTS.
- (install_dev): Likewise.
- * font/devdvi/Makefile.sub (DEVSCRIPTS): New variable to hold
- scripts.
- * font/devps/Makefile.sub (DEVSCRIPTS): Likewise.
- (DEVGENSCRIPTS): New variable to hold generated scripts.
-
-2003-04-05 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libdriver/input.cc (IntArray::operator[],
- IntArray::get_data): Remove meaningless `const' in return value.
-
- * README.CVS: New file.
-
-2003-04-04 Werner LEMBERG <wl@gnu.org>
-
- Check for stdint.h in C++, not in C.
-
- * aclocal.m4 (GROFF_STDINT_H): New function,
- * configure.ac: Check for stdint.h with GROFF_STDINT_H instead of
- AC_CHECK_HEADERS.
- * configure, src/include/config.hin: Regenerated.
- * src/libs/libgroff/tmpname.cc: Use HAVE_CC_STDINT_H.
-
-
- Fix handling of &nbsp; in grohtml. To do this, troff emits `N'
- with a negative value, representing the width of the unbreakable
- space (only for -Thtml). grohtml then converts this back to
- &nbsp; and uses the value of N as its width.
-
- * src/roff/troff/node.cc (space_char_hmotion_node::tprint,
- unbreakable_space_node::tprint): Emit `N-<width>'.
- * src/include/printer.h (printer::set_numbered_char): Make it
- virtual.
- Make members `font_table' and `nfonts' protected instead of private.
- * src/devices/grohtml/post-html.cc
- (html_printer::set_numbered_char): New member function.
-
-
- * src/libs/libgroff/maxfilename.cc:
- s/HAVE_LIMITS_H/HAVE_CC_LIMITS_H/.
-
- * src/roff/troff/node.cc (unbreakable_space_node::tprint): Don't
- emit word marker.
-
-2003-04-03 Sergey A. Osokin <osa@freebsd.org.ru>
-
- * man/roff.man: Small fixes.
-
-2003-04-03 Werner LEMBERG <wl@gnu.org>
-
- Make groff independent from locale's numeric settings.
-
- * configure.ac: Check for `setlocale'.
- * configure, src/include/config.hin: Regenerated.
-
- * src/include/lib.h: Handle HAVE_SETLOCALE.
-
- * src/devices/grodvi/dvi.cc (main), src/devices/grolj4/lj4.cc
- (main), src/devices/grops/ps.cc (main), src/preproc/grn/main.cc
- (main), src/preproc/pic/main.cc (main): Call `setlocale'.
-
-
- * doc/groff.texinfo: Change dir category to `Typesetting'.
- (Man font macros): Mention that there is no space between arguments
- of .BI and friends.
-
- * src/libs/libdriver/printer.cc, src/devices/grotty/tty.cc
- (*printer::change_color, *printer::change_fill_color): Add missing
- `const'.
-
-2003-04-02 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/html-table.cc (html_table::emit_col,
- html_table::is_gap): Compute table widths after converting border
- positions to avoid rounding errors.
-
-2003-04-01 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/html-text.cc (html_text::do_space): Handle
- `space_emitted' properly.
-
-2003-03-31 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grohtml/html-table.cc: Fix column width calculation.
- (html_table::set_linelength): Don't add 1.
- (html_table::add_indent): Don't subtract 1.
-
- * tmac/html.tmac: Set default page offset to zero.
-
-2003-03-30 Werner LEMBERG <wl@gnu.org>
-
- Make groff emit `&nbsp;' for `\ ' and `\~' if `-Thtml' is used.
-
- * src/roff/troff/node.cc (space_char_hmotion_node::tprint,
- unbreakable_space_node::tprint): New functions.
- (troff_output_file): Make space_char_hmotion_mode::tprint and
- unbreakable_space_node::tprint to friends.
- * src/roff/troff/node.h: Updated.
-
- * font/devhtml/R.proto: Add `&nbsp' at position 0xA0 (as defined
- in the HTML standard).
-
-2003-03-29 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cc (point_size): Fix emission of html tag.
- Otherwise, the following code
-
- .di xxx
- .ps 10
- a
- .br
- .di
- x\*[xxx]
-
- produces `x a' instead of `xa'. This is a temporary fix, disabling
- font changes in diversions for -Thtml.
-
- * tmac/an-old.tmac (TH, SH): Use `HTML-TAG-NS' instead of
- `HTML-TAG'.
- (an-do-tag-html): Merge with ...
- (an-do-tag): This macro.
- Change code slightly to circumvent grohtml bug.
- * tmac/troffrc-end: Define dummy for HTML-TAG-NS.
-
- * src/devices/grohtml/html-table.cc (html_table::emit_col,
- html_table::is_gap): Round `width' properly.
-
- * tmac/html.tmac: Provide some default layout parameters for
- grohtml.
-
- * font/devhtml/DESC.proto: Don't use discrete values for `sizes'
- command.
-
-2003-03-28 Werner LEMBERG <wl@gnu.org>
-
- src/devices/grops/ps.cc (ps_printer::do_import): Fix error message.
-
-2003-03-27 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (BT): Don't call .tl if register `ps4html' is
- defined.
-
-2003-03-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cc (vertical_spacing): Allow zero value for
- `.vs'.
- * doc/groff.texinfo: Updated.
-
-2003-03-19 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (process_input_stack) <TOKEN_BEGIN_TRAP,
- TOKEN_END_TRAP>: Reset `have_input'.
-
-2003-03-18 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man: Mention groff_trace man page.
-
-2003-03-16 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (LIBEXT): New variable to indicate the file extension
- of library files. Computed heuristically from $(OBJEXT).
- (MDEFINES): Add $(LIBEXT).
- * Makefile.lib, Makefile.comm: Use it.
-
- * src/utils/pfbtops/pfbtops.c (get_text): New function. Split
- overlong lines into smaller chunks.
- (get_binary): New function.
- (main): Use them.
- * src/utils/pfbtops/pfbtops.man: Updated.
-
-2003-03-15 Colin Watson <cjwatson@debian.org>
-
- * src/roff/groff/groff.man: Minor syntax fix.
-
-2003-03-14 Egil Kvaleberg <egil@kvaleberg.no>
-
- * src/devices/grops/ps.cc (ps_printer::media_set,
- ps_printer::~ps_printer): Handle zero paper width and length.
-
-2003-03-13 Werner LEMBERG <wl@gnu.org>
-
- Add options -p and -l to grodvi.
-
- * src/devices/grodvi/dvi.cc: Include paper.h.
- (landscape_flag, user_paper_length, user_paper_width): New global
- variables.
- (dvi_printer::begin_page): Emit `papersize' special.
- Set color after initialization of `cur_h' and `cur_v'.
- (main): Add options `-l' and `-p'.
- * font/devdvi/Makefile.sub (DESC): Set `papersize'.
- * src/devices/grodvi/grodvi.man, NEWS: Updated.
-
- * src/devices/grops/psrm.cc (valid_input_table): Fixed.
-
-2003-03-12 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/grops.man: Move documentation of .PSPIC to...
- * man/groff_tmac.man: This man page.
- * man/groff_font.man: Declare `paperwidth' and `paperlength' as
- deprecated.
-
- * tmac/X.tmac: Don't load pspic.tmac.
-
-2003-03-11 Werner LEMBERG <wl@gnu.org>
-
- Make variable `pr' local to libdriver/input.cc. Based on a patch
- by Bernd Warken <bwarken@mayn.de>.
-
- * src/include/driver.h (pr): Removed.
-
- * src/libs/libdriver/input.cc (pr): New global variable.
- (do_file): Deallocate `pr'.
- * src/libs/libdriver/printer.cc (pr): Removed.
-
- * src/devices/grodvi/dvi.cc (main), src/devices/grohtml/post-html.cc
- (main), src/devices/grolbp/lbp.cc (main), src/devices/grolj4/lj4.cc
- (main), src/devices/grops/ps.cc (main), src/devices/grotty/tty.cc
- (main): Don't delete `pr'.
-
-2003-03-10 Werner LEMBERG <wl@gnu.org>
-
- * tmac/a4.tmac, tmac/composite.tmac: Use `.do'.
- * tmac/papersize.tmac: New file.
- * tmac/troffrc: Include `papersize.tmac'.
- * tmac/Makefile.sub (NORMALFILES): Add `papersize.tmac'.
- * tmac/an-old.tmac: Set LT to LL by default.
-
- * NEWS, MANIFEST, tmac/groff_man.man, man/groff_tmac.man,
- doc/groff.texinfo: Updated.
-
- * src/libs/libgroff/paper.cc (add_iso_paper): Fix very embarassing
- bug which caused all odd iso papers to have wrong dimensions.
-
- * src/devices/grops/ps.cc (user_paper_width): New global variable.
- (main) <'p'>: Set `user_paper_width' also.
- (ps_printer::media_width, ps_printer::media_height): Use values
- given with option `-p'.
-
-2003-03-09 Werner LEMBERG <wl@gnu.org>
-
- * src/include/nonposix.h: Provide default for SET_BINARY.
-
- * src/devices/grodvi/dvi.cc, src/devices/grolbp/lbp.cc,
- src/devices/grolj4/lj4.cc, src/devices/grops/ps.cc: Call SET_BINARY
- unconditionally.
-
- * src/utils/pfbtops/pfbtops.c: Call SET_BINARY unconditionally.
- (main): Treat \r\n as \n.
-
-2003-03-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Use register `HY' to control hyphenation.
- * NEWS, tmac/groff_man.man, doc/groff.texinfo: Document it.
-
-2003-03-07 Werner LEMBERG <wl@gnu.org>
-
- Added support to access more than 256 glyphs in Type 1 fonts.
-
- * src/devices/grops/ps.cc (subencoding): New structure.
- (style): Add `sub' field.
- Updated all users.
- (ps_printer): Add `subencodings' and `next_subencoding_index' fields.
- Add `set_subencoding', `get_subfont' and `encode_subfont' member
- functions.
- Updated all users.
- (ps_printer::set_char): Use `set_subencoding'.
- (make_subencoding_name): New function.
- (ps_printer::set_style): Handle case where `sty.sub' is not zero.
- (ps_printer::~ps_printer): Emit subencoding definitions.
-
- * src/devices/grops/psrm.cc (valid_input_table): New array to
- properly support EBCDIC.
- (white_space): Add `\f'.
- (ps_get_line): Change first argument to be of type `string &'.
- Updated all callers.
- This allows to get lines of arbitrary length.
- Use `valid_input_table'.
- Remove warning about non-conforming PS line length. This seems
- not to be of great importance -- for example, dvips don't emit
- a warning either.
- (PS_LINE_MAX): Removed.
- (matches_comment): Change first argument to be of type `string &'.
-
- * src/devices/grops/grops.man, src/devices/grops/TODO: Updated.
-
- * src/utils/afmtodit/afmtodit.pl (%unicode_decomposed,
- %AGL_to_unicode, %default_ligatures): New hash tables.
- Read all map entries.
- Add unencoded characters.
- Check for default ligatures if there are no `L' entries.
- Print all kern entries.
- Print all characters in charset.
- * src/utils/afmtodit/afmtodit.man: Updated.
-
- * font/devps/*: Regerated all fonts.
-
- * tmac/latin[129].tmac, tmac/cp1047.tmac: Don't test for existence
- of characters, just use `.trin'. Otherwise the mapping depends
- on the font encoding.
- * tmac/ps.tmac: Add `fi' and `fl'.
- Improve `Fi' and `Fl'.
- * tmac/X.tmac, tmac/lbp.tmac, tmac/tty.tmac: Improve `Fi' and `Fl'.
- * tmac/Xps.tmac: Fix `em'.
-
- * NEWS: Updated.
-
-2003-03-04 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (charinfo_to_node_list): Reset
- `have_input'.
-
-2003-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (DISTCLEANFILES): Add gxditview._man.
-
- * font/devps/generate/textmap: Remove entry `similarequal'.
- * font/devps/symbolmap: Updated.
-
-2003-03-02 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/font.cc (font::load): Fix error message for
- bad character type.
-
- * src/devices/grops/grops.man: Improve documentation of the -b
- flag.
-
- * tmac/tty.tmac: Load latin1.tmac for all TTY devices except
- `ascii' and `cp1047'.
-
-2003-03-01 Werner LEMBERG <wl@gnu.org>
-
- Document composite glyphs and the `composite' request.
-
- * man/groff.man, man/groff_diff.man, doc/groff.texinfo: Do it.
-
-2003-02-28 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/ec.map: Add some more Unicode entities.
- * font/devdvi/*EC: Updated.
-
- * tmac/composite.tmac, tmac/latin2.tmac, tmac/latin9.tmac: New files.
- * tmac/latin1 (latin1-tr): Undo any previous mapping.
- * tmac/troffrc: Load `composite.tmac'.
- * tmac/Makefile.sub (NORMALFILES): Updated.
-
- * doc/groff.texinfo (Input Encodings): New section.
- * NEWS: Updated.
-
-2003-02-27 Werner LEMBERG <wl@gnu.org>
-
- * doc/texinfo.tex: New version 2003-02-11.06.
-
- * tmac/doc-common (Dt): Don't emit warning for unknown section.
- * tmac/groff_mdoc.man: Fix description of `Dt'.
-
-2003-02-26 Egil Kvaleberg <egil@kvaleberg.no>
-
- * font/devps/prologue.ps: Fix for included Postscript that does
- a setpagedevice -- which is now safely ignored.
-
- * NEWS: Updated.
-
- * src/devices/grops/ps.cc: Now sets the page size in the generated
- document. This is done in two ways: Via a %%-comment for gv and
- the like, and via a PageSize and setpagedevice for programs that
- understands Postscript proper, like ps2pdf.
-
- * src/devices/grops/ps.h: New broken-flag to avoid page size
- definition, if required.
-
- * src/devices/grops/grops.man: New broken-flag 16 mentioned.
-
- * doc/Makefile.in: Added -nosetpage flag (via @pnmtops_nosetpage@).
- Not really necessary due to the fix in prologue.ps, but cleaner:
- Such information does not belong in an .eps file.
-
- * doc/Makefile.sub: See doc/Makefile.in.
-
-2003-02-26 Ralph Corderoy <ralph@inputplus.co.uk>
-
- * aclocal.m4 (GROFF_PNMTOPS_NOSETPAGE): Use P2 format for testing
- instead of P1 since the latter is broken in some versions of netpbm.
- * configure: Updated.
-
-2003-02-26 Larry Kollar <kollar@alltel.net>
-
- Make man pages more customizable.
-
- * tmac/an-old.tmac (FT): New register holding footer distance from
- bottom.
- (HF): New string holding the default heading font.
- (TH): Handle registers `IN' and `SN' set on the command line.
- Use `FT'.
- (PT, BT): New strings to customize header and footer lines.
- (an-header, an-footer): Use them.
- (SH, SS): Use `HF'.
- * tmac/groff_man.man: Document changes.
-
- * doc/groff.texinfo: Document man changes.
- Document Ultrix extensions of man.
-
-2003-02-26 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (do_width, do_if_request): Reset
- `have_input' after changing back to old environment.
-
- * src/devices/grolbp/lbp.cc (lbp_printer::set_line_thickness): Move
- function up to be defined before first call. This is necessary to
- avoid a compilation problem with Sun's WorkShop 6 C++ compiler.
-
- * src/utils/afmtodit/afmtodit.pl: Make script search for files in
- the default font directory also. Based on a patch from James
- J. Ramsey <jjramsey_6x9eq42@yahoo.com>.
- * src/utils/afmtodit/Makefile.sub (afmtodit): Handle @FONTDIR@.
- * src/utils/afmtodit/afmtodit.man: Document it.
-
- * NEWS: Updated.
-
- * tmac/groff_man.man, doc/groff.texinfo: Many minor fixes.
-
-2003-02-25 Gaius Mulley <gaius@glam.ac.uk>
-
- * aclocal.m4 (GROFF_HTML_PROGRAMS): Add test for pnmtops.
- (GROFF_PNMTOPS_NOSETPAGE): New macro.
- * configure.ac: Use it.
- * configure: Regenerated.
- * Makefile.in: Updated.
-
- * tmac/Makefile.sub (NORMALFILES): Remove www.tmac.
- (CLEANADD): Add www.tmac-sed.
- (pnmtops_nosetpage): Define default.
- (install_data): Handle www.tmac-sed and substitute
- @PNMTOPS_NOSETPAGE@.
- (stamp-sed): Add www.tmac.
- * tmac/www.tmac: Rewritten, based on a patch by Bernd Warken.
- It now breaks URLs at suitable places.
- (www:substring_ok): New register set by...
- (www:@test_substring): New macro.
- (www:error): New alias to www-error.
- (www:lenstr, www:splitstr, www:url_breaks, www:url_breaks_splitted):
- New macros.
- (URL): Use www:url_breaks.
- (PIMG, MPIMG): Use @PNMTOPS_NOSETPAGE@.
- (CDS, CDE): New macros.
-
-2003-02-25 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/ps.cc (ps_printer::define_encoding): Avoid
- buffer overflow.
-
-2003-02-24 Werner LEMBERG <wl@gnu.org>
-
- Contrary to the PCL5 Developer's Guide, the ascenders in TFM files
- can be negative also.
-
- * src/utils/hpftodit/hpftodit.cc (char_info): `ascent' must be
- `int16'.
- (read_char_table): Avoid negative ascenders.
- (output_charset): Add cast.
- * font/devlj4/*: Regenerated.
-
- Replace unnamed glyphs for DVI fonts with `uXXXX' glyph names where
- possible.
-
- * font/devdvi/generate/{tc,texttt,ec,texmi,texsy,textex}.map: Do it.
- * font/devdvi/generate/textex.map: Map glyph 23 to `u21C6' instead
- of `<>'.
- * font/devdvi/*: Regenerated.
-
- Map `la' and `ra' to U+27E8 and U+27E9. These two characters have
- normal width, while the previously used characters (U+2329 and
- U+232A) are classified as wide due to canonical equivalence with the
- CJK punctuation characters U+3008 and U+3009.
-
- * font/devutf8/R.proto: Updated.
- * src/roff/troff/uniglyph.cc, src/roff/troff/glyphuni.cc: Ditto.
-
- * man/groff_char.man: Simplify handling of table traps by
- introducing `start block' and `end block' macros.
- (Ns, Ne, 2s, 2e, Ds, De): New macros.
- (DL): Make it work with Unix troff also.
- Fix code values of `la' and `ra'.
-
- * tmac/dvi.tmac: Define `<>' for CW and CWI.
-
-2003-02-23 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (element_list::~element_list):
- New destructor, fixing a major memory leak.
-
-2003-02-22 Werner LEMBERG <wl@gnu.org>
-
- * font/devhtml/R.proto, font/devutf8/R.proto: Flip `*f' and `+f'
- to be in conformance with Unicode 3.0 and newer.
-
- * font/devlj4/generate/text.map: Add `Eu'.
- * font/devlj4/generate/special.map: Flip `*e' and `+e'.
- * font/devlj4/S: Regenerated.
-
- * man/groff_char.man: Completely rewritten.
-
- * doc/groff.texinfo: Fix description of request and macro arguments.
-
-2003-02-20 Gaius Mulley <gaius@glam.ac.uk>
-
- Valgrind fixes.
-
- * src/devices/grohtml/html-table.cc (html_table::~html_table):
- Deallocate `columns' list.
- * src/devices/grohtml/post-html.cc (char_block::~char_block):
- New destructor.
- (text_glob::text_glob_html, text_glob::text_glob_special,
- text_glob::text_glob_line, text_glob::text_glob_auto_image,
- text_glob::text_glob_tag): Avoid memory leaks.
- (text_glob::remember_table): Free memory before reassigning.
-
-2003-02-19 Werner LEMBERG <wl@gnu.org>
-
- Add glyph `+e', greek lunate epsilon symbol, and `-h' (with the
- alias `hbar'), the Planck constant over two pi.
-
- * font/devdvi/generate/texmi.map: Use `*e' for position 15 and
- `+e' for position 34.
- * font/devdvi/generate/texsy.map: Replace `DI' and `HE' with
- `u2662' and `u2661'.
- * font/devdvi/{MI,S}: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `+e', `-h', `hbar'.
- * font/devlbp/*: Add `hbar' alias.
- * font/devlj4/generate/special.map: Ditto.
- * font/devlj4/S: Regenerated.
- * font/devps/generate/symbolchars: Add `+e'.
- * font/devps/generate/textmap: Fix PS name for `-h'.
- Add `hbar' alias.
- * font/devps/symbolmap: Regenerated.
-
- * src/devices/grops/ps.cc (transform_fill): Removed since unused.
-
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Add `+e',
- `-h', `hbar'.
- * src/roff/troff/uniglyph.cc (unicode_to_glyph_list): Add `+e',
- `-h'.
-
- * tmac/X.tmac, tmac/ps.tmac: Provide definitions for `-h' and
- `hbar'.
- * tmac/tty-char.tmac: Add `+e'.
-
-2003-02-17 Werner LEMBERG <wl@gnu.org>
-
- Another round trying to really fix problems with `have_input'.
-
- * src/roff/troff/input.cc (input_stack::get): Handle `have_input'.
- (token::next) <'\n'>, <\'\n'>: Don't handle `have_input'.
-
- * src/devices/grotty/tty.cc (tty_printer::put_color): Fix color
- handling if both foreground and background colors are default.
-
- * doc/groff.texinfo (Debugging): Document .lf differences to
- AT&T troff.
-
-2003-02-16 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grotty/tty.cc (tty_printer::make_rgb_string): Avoid
- null-bytes in created string.
-
- * src/roff/troff/input.cc (lookup_color, interpolate_macro,
- alias_macro, lookup_request): Improve warning messages.
-
- * src/roff/troff/node.cc (suppress_node::tprint): Use `strsave',
- not `strdup'.
- Free `last_image_filename'.
-
- * src/preproc/html/pre-html.cc (char_block::char_block): Initialize
- `buffer'.
- (imageList::createPage, imageList::createImage): Use `free', not
- `a_delete'.
- (imageItem::~imageItem): Free `imageName'.
- (addRegDef): Use `strsave', not `strdup'.
- (get_resolution): Free `pathp'.
-
-2003-02-15 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grotty/tty.cc (tty_printer::tty_printer): Fix pointer
- to `dummy'.
-
-2003-02-14 Werner LEMBERG <wl@gnu.org>
-
- Add memory management for colors to deallocate unnamed colors
- properly.
-
- * src/include/color.h (color): New members `free_list' and `next'.
- New member functions `new' and `delete'.
- Add destructor.
- * src/libs/libgroff/color.cc: Implement it.
-
- * src/libs/libgroff/font.cc (font::add_kern): Use integer cast
- for array size of new operator.
-
- * src/libs/libdriver/input.cc (IntArray::operator[]): Remove
- redundant comparison.
-
- * src/roff/troff/input.cc (word_space_node::reread,
- hmotion_node::reread): Avoid warning about unused parameter.
- (reset_output_registers): Remove redundant parameter.
- (define_color): Undo change 2003-02-12.
-
- * src/roff/troff/reg.h: Updated.
-
- * src/roff/troff/node.cc (troff_output_file::really_print_line,
- output_file::put_filename, real_output_file::really_put_filename,
- ascii_output_file::really_print_line,
- break_char_node::get_hyphen_list): Avoid warning about unused
- parameter.
- (suppress_node::tprint): Updated.
-
- * configure.ac: Check declaration for rand() and srand().
- * configure: Regenerated.
-
- * src/preproc/pic/pic.h: Declare fmod(), rand(), and srand()
- conditionally.
- * src/preproc/pic/pic.y: Remove declaration of fmod(), rand(),
- and srand().
-
- * src/preproc/eqn/delim.cc (delim_table): Add missing initializers
- to avoid compiler warnings.
-
- * src/preproc/grn/hgraph.cc (HGPrintElt): Second parameter is
- unused.
-
- * src/devices/grops/ps.cc (ps_printer::set_char): Last parameter
- is unused.
- * src/devices/grops/psrm.cc (skip_possible_newline): Remove first
- (unused) parameter.
- Updated all callers.
-
- * src/devices/grotty/tty.cc (tty_printer::set_char): Last parameter
- is unused.
- * src/devices/grodvi/dvi.cc (dvi_printer::set_char): Ditto.
- * src/devices/grolj4/lj4.cc (lj4_printer::set_char): Ditto.
-
- * src/devices/grohtml/post-html.cc (html_printer::emit_line):
- Parameter is unused.
- (html_printer::add_table_end): Define parameter conditionally.
- * src/devices/grohtml/output.cc (simple_output::special): Parameter
- is unused.
-
- * src/devices/grolbp/lbp.cc: Define _GNU_SOURCE conditionally.
- (lbp_printer::set_char): Last parameter is unused.
-
- * src/utils/indxbib/indxbib.cc (main): Remove redundant comparison.
-
-2003-02-13 Werner LEMBERG <wl@gnu.org>
-
- New commands \D'Fr ...', \D'Fc ...', etc. for orthogonality.
- Make \D'f ...' move horizontally again for backwards compatibility.
- Replace it with \D'Fg ...' where appropriate to avoid dependency
- on horizontal resolution.
-
- * src/roff/troff/input.cc (do_get_long_name): New function.
- (get_long_name): Call it.
-
- (read_draw_node): Handle `\D'Fx ...' by calling ...
- (read_color_draw_node): New function.
-
- (read_rgb, read_cmy, read_cmyk, read_gray): New optional argument
- `end'.
- Pass it to `do_get_long_name' which is used instead of
- `get_long_name'.
-
- * src/libs/libdriver/input.cc (color_from_Df_command): Remove
- unnecessary value guard.
- (parse_D_command) <'f'>: Add horizontal shift.
-
- * src/preproc/grn/hgraph.cc (HGPrintElt) <POLYGON>: Use \D'Fg ...'.
- * src/preproc/pic/troff.cc (troff_output::set_fill): Ditto.
- (FILL_MAX): Removed.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Updated.
-
-2003-02-12 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (do_name_test, do_expr_test,
- do_zero_width): Push `\n' if closing delimiter is missing.
-
- (token::next) <ESCAPE_NEWLINE>, <'\n'>, <\'\n'>: Reset `have_input'.
- <'F'>: Make \F non-transparent at the beginning of line.
- (process_input_stack) <token::TOKEN_CHAR, token::TOKEN_NEWLINE,
- token::TOKEN_REQUEST, token::TOKEN_BEGIN_TRAP>: Don't handle
- `have_input'.
-
- (define_color): Free color in case of reassignment.
-
- * doc/groff.texinfo (@Defesc, @DefescList, @DefescItem,
- @DefescListEnd): Use @Var, not @var.
- Fix all calls.
-
- * src/preproc/grn/hgraph.cc (HGPrintElt): Fix typo.
-
- * src/preproc/pic/object.cc (object_spec::~object_spec): Free
- `shaded' and `outlined' arrays.
- (object_spec::object_spec): Initialize `shaded' and `outlined'.
- (graphic_object::set_fill_color, graphic_object::set_outline_color):
- Use strsave.
- (closed_object::set_fill_color): Ditto.
- * src/preproc/pic/troff.cc (troff_output::set_color): Use strsave
- instead of strdup.
- (troff_output::reset_color): Use a_delete instead of free.
- * src/preproc/pic/main.cc (do_file): Free `out' in case of error.
-
-2003-02-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Improve documentation of `ad'.
- Document that \D'f...' is dependent on the horizontal resolution.
- * man/groff_diff.man: Improve documentation of \D'f...'.
-
- * src/preproc/grn/hgraph.cc (HGPrintElt) <POLYGON>: Don't emit
- compensating \h'...' for \D'f ...' since the latter no longer moves
- current position.
- * src/preproc/pic/troff.cc (troff_output::set_fill): Ditto.
-
-2003-02-10 Werner LEMBERG <wl@gnu.org>
-
- Improve error messages for `x F' (and `F') commands.
-
- * src/include/error.h: Add declaration for
- `current_source_filename'.
- * src/libs/libgroff/filename.cc: Add `current_source_filename'.
- * src/libs/libgroff/error.cc (do_error_with_file_and_line): Add
- parameter for source file string.
- Updated all callers.
-
- * src/libs/libdriver/input.cc: Add `current_source_filename'.
- (remember_source_filename): New function.
- (parse_x_command <'F'>, do_file <'F'>): Use it.
-
-2003-02-09 Werner LEMBERG <wl@gnu.org>
-
- Make grotty not emit warnings about unknown colors more than
- necessary.
-
- * src/devices/grotty/tty.cc: Include `ptable.h'.
- (TTY_MAX_COLORS): Removed.
- (DEFAULT_COLOR_IDX): Defined to -1.
- (glyph): Change `back_color_idx' and `fore_color_idx' to `char'.
- (tty_printer): Change `curr_back_idx' and `curr_fore_idx' to `char'.
- Change `tty_colors' to be a ptable.
- First arg of `put_color' is now `char'.
- New functions `make_rgb_string' and `tty_color'.
- (tty_printer::tty_printer): Use `tty_color'.
- (tty_printer::color_to_idx): Return value is now `char'.
- Use `tty_color'.
-
- * src/include/color.h (color): Add `print_color' member function.
- * src/libs/libgroff/color.cc (color::print_color): Implement it.
-
-2003-02-08 Werner LEMBERG <wl@gnu.org>
-
- Valgrind fixes.
-
- * src/devices/grops/ps.cc (ps_printer::define_encoding): Close
- encoding file.
-
- * src/include/ptable.h (PTABLE::~PTABLE, PTABLE::define): Always
- assume that value has been allocated with `new[]', thus use
- `a_delete' for deallocation.
-
- * src/libs/libdriver/input.cc (get_integer_arg,
- get_possibly_int_args, parse_x_command, do_file): Use `a_delete'
- where appropriate.
-
- * src/libs/libgroff/new.cc (delete) [!COOKIE_BUG]: Define.
- * src/libs/libgroff/nametoindex.cc
- (character_indexer::named_char_index): Use `new <type>[1]'.
-
- * src/preproc/eqn/lex.cc (init_table, do_definition): Use `new
- <type>[1]'.
- * src/preproc/eqn/text.cc (set_special_char_type): Ditto.
- (split_text): Use `a_delete'.
-
- * src/preproc/pic/pic.y (define_label, define_variable): Use `new
- <type>[1]'.
-
- * src/roff/troff/env.cc (environment::choose_breakpoint): Avoid
- harmless memory leak.
- (hyphen_trie::read_patterns_file): Initialize `buf'.
- * src/roff/troff/node.cc (troff_output_file::troff_output_file):
- Initialize `current_fill_color'and `current_glyph_color'.
- * src/roff/troff/glyphuni.cc
- (glyph_to_unicode_init::glyph_to_unicode_init): Use `new <type>[1]'.
- * src/roff/troff/uniuni.cc
- (unicode_decompose_init::unicode_decompose_init): Ditto.
- * src/roff/troff/uniglyph.cc
- (unicode_to_glyph_init::unicode_to_glyph_init): Ditto.
-
-2003-01-26 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/indxbib/indxbib.cc (main) [__EMX__]: Check with
- `access' before calling `unlink'.
- (do_file): Handle __EMX__.
-
- * src/include/nonposix.h: Handle __EMX__.
-
- * Makefile.in (SEP): New variable; set to @PATH_SEPARATOR@.
- (fontpath,tmacpath): Use it.
- (MDEFINES): Add it.
- Sorted alphabetically.
-
- * src/preproc/eqn/neqn.sh, src/roff/nroff/nroff.sh: Use
- @SEP@.
- * src/preproc/eqn/Makefile.sub, src/roff/nroff/Makefile.sub: Handle
- @SEP@.
-
-2003-01-27 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/strcasecmp.c, src/libs/libgroff/strncasecmp.c:
- New files, copied from gnulib.
- * src/libs/libgroff/Makefile.sub (CSRCS): Add them.
- * configure.ac: Updated.
- * configure: Regenerated.
-
- * src/include/config.hin: Regenerated.
- * src/include/lib.h [!HAVE_STRCASECMP]: Declare `strcasecmp'.
- Don't define `strcasecmp' as `strcmp'.
- [!HAVE_STRNCASECMP]: Declare `strncasecmp'.
- Dont define `strncasecmp' as `strncmp'.
-
- * src/roff/groff/pipeline.c [!HAVE_STRCASECMP, !HAVE_STRNCASECMP]:
- Removed.
-
-2003-01-26 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/indxbib/indxbib.cc (main) [__EMX__]: Fix typo:
- s/unline/unlink/.
-
-2003-01-25 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo (Ligatures and Kerning): Mention limitations.
-
-2003-01-24 Werner LEMBERG <wl@gnu.org>
-
- Add US-english hyphenation exceptions (converted from Barbara
- Beeton's hyphenation exception log reports which appear irregularly
- in TUGBoat).
-
- * tmac/hyphen.us: Updated to latest version.
- * tmac/README: Updated.
- * tmac/hyphenex.us, tmac/hyphenex.sh: New files.
- * tmac/troffrc: Load `hyphenex.us'.
- * tmac/Makefile.sub (NORMALFILES): Add `hyphenex.us'.
- * doc/groff.texinfo: Updated.
-
-2003-01-23 Werner LEMBERG <wl@gnu.org>
-
- Improve hyphenation slightly. This is a first step in redesigning
- the hyphenation algorithm to make it more flexible (e.g. allowing
- kerns and ligatures between the hyphenation character and the
- following character -- while not used normally in English, other
- languages like German would benefit).
-
- * src/roff/troff/env.cc (environment::hyphenate_line): Use
- assertion instead of if-clause.
- Let `get_hyphen_list' return the number of involved characters in
- the hyphenation pattern instead of computing it directly (which
- often yields too small values).
- * src/roff/troff/node.h (*::get_hyphen_list): Add second parameter.
- * src/roff/troff/node.cc (*::get_hyphen_list): Handle new second
- parameter.
-
-2003-01-22 Werner LEMBERG <wl@gnu.org>
-
- Fixing a bug which caused groff to hang if the hyphenation exception
- dictionary tried to grow.
-
- * src/roff/troff/env.cc (hyphen_trie::insert_hyphenation,
- hyphen_trie::read_patterns_file, do_hyphenation_patterns_file): Use
- pointer to dictionary.
-
-2003-01-20 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.pl: Add switch `-m' to suppress
- negative left italic correction.
- * src/utils/afmtodit/afmtodit.man: Document it.
-
- * font/devps/generate/Makefile (RFLAG): Add `-m'.
- * font/devps/{AB,AR,BMB,BMR,CB,CR,EURO,HB,HR,HNB,HNR,NB,NR,PB,PR,
- S,TB,TR,ZD,ZDR}: Regenerated with afmtodit options `-i 0 -m'.
-
- * NEWS: Updated.
-
-2003-01-16 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Updated.
-
-2003-01-16 Jörgen Grahn <jgrahn@algonet.se>
-
- * src/preproc/refer/refer.man: Mention REFER environment variable.
-
-2003-01-05 Werner LEMBERG <wl@gnu.org>
-
- Similar to \[is], the square root glyph (\[sr]) and the square root
- extension glyph (\[radicalex]) are now text symbols. The new
- mathematical versions are called \[sqrt] and \[sqrtex],
- respectively.
-
- * font/devX*/S: Regenerated.
- * font/devdvi/generate/texex.map: Rename `sr[0123]' to `sqrt[0123]'.
- * font/devdvi/generate/texsy.map: Rename `sr' to `sqrt'.
- * font/devdvi/EX, font/devdvi/S: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `sqrt'.
- * font/devlj4/generate/special.map: Add `sqrt'.
- * font/devlj4/S: Regenerated.
- * font/devps/generate/textmap: Add `sqrt'.
- * font/devps/S, font/devps/symbolmap: Regenerated.
-
- * src/preproc/eqn/sqrt.cc (SQRT_CHAR, RADICAL_EXTENSION_CHAR,
- SQRT_CHAIN, BAR_CHAIN): Use `sqrt*' and `sqrtex*'.
- * src/roff/troff/input.cc (init_charset_table): Make `sqrtex'
- overlap horizontally.
-
- * tmac/X.tmac, tmac/ps.tmac, tmac/lj4.tmac: Add `sqrtex'.
- * tmac/dvi.tmac: Add `sr', and `sqrtex'.
- Fix `radicalex'.
-
- * doc/groff.texinfo, man/groff_diff.man: Document that `radicalex'
- and `sqrtex' are overlapping glyphs.
-
-2003-01-04 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/texsy.map: Add `is'.
- * font/devps/symbolmap: Regenerated.
- * font/devdvi/*TC, MI, S: Regenerated.
-
- * tmac/dvi.tmac: Remove `is'.
-
-2003-01-03 Werner LEMBERG <wl@gnu.org>
-
- `is' is now a text symbol (only relevant for dvi). The math variant
- can be accessed with `integral'.
-
- * font/devX*/S: Regenerated.
- * font/devdvi/generate/texex.map: Remove `is'.
- * font/devdvi/EX: Updated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `integral'.
- * font/devlj4/generate/special.map: Ditto.
- * font/devlj4/S: Regenerated.
- * font/devps/generate/textmap: Add `integral'.
- * font/devps/S: Regenerated.
-
- * tmac/dvi.tmac: Define `is'.
-
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Add `integral'.
-
- * src/preproc/tbl/main.cc (process_format): Fix error message.
-
-2003-01-02 Werner LEMBERG <wl@gnu.org>
-
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `ne' and `nc'.
- * font/devps/textmap: Fix entries for `ne' and `nc'.
- * font/devps/symbolmap: Regenerated.
-
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list),
- src/roff/troff/uniglyph.cc (unicode_to_glyph_list): Add `18',
- `38', `58', `78', `-+', `|=', `nc', `ne'.
-
- * tmac/dvi.tmac: Add `nm', `ne', `nc'.
- Use `schar' for `aq'.
- * tmac/ps.tmac, tmac/X.tmac: Add `nc' and `ne'.
- * tmac/ec.tmac: Add `SC' to special fonts for `CW' and `CWI'.
- * tmac/tty.tmac: Add `ne'.
-
- * src/roff/troff/node.cc (make_glyph_node): Test with `get_macro'
- for fallback glyphs.
-
-2002-12-29 Werner LEMBERG <wl@gnu.org>
-
- Add glyph `|='.
-
- * font/devX*/*: Regenerated.
- * font/devdvi/generate/ec.map: Remove `eq'.
- * font/devdvi/generate/texsy.map: Make `~=' the same as `~~'.
- Assign `|=' to position 39.
- * font/devdvi/*EC, S: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `|='.
- * font/devlj4/generate/special.map: Make `~=' the same as `~~'.
- Assign `|=' to position 549.
- * font/devps/generate/textmap, font/devps/enerate/symbolmap: Remove
- `equalmath'.
- Add `uni2243' for `|='.
-
- * tmac/ec.tmac: Add `eq'.
- * tmac/dvi.tmac: Add `=~'.
- * tmac/tty-char.tmac, tmac/ps.tmac, tmac/X.tmac, tmac/lbp.tmac: Add
- `|='.
-
-2002-12-21 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/tc.map: Remove `**'.
- * font/devdvi/*TC: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `18', `38', `58',
- `78', `<<', `>>'.
- * font/devutf8/NOTES: Updated.
-
- * src/roff/troff/charinfo.h (charinfo): Add `setx_macro' function.
- Don't give default parameter to `set_macro'.
- * src/roff/troff/input.cc (do_define_character): Use `setx_macro'
- instead of `set_macro'.
- (charinfo::setx_macro): Implement it.
- (charinfo::set_macro): Don't change `mode'.
-
- * tmac/tty.tmac: Add `18', `38', `58', `78', `<<', `>>'.
- * tmac/ps.tmac, tmac/X.tmac: Add `<<', `>>'.
- * tmac/dvi.tmac: Define `!=' with `.schar'.
-
-2002-12-20 Werner LEMBERG <wl@gnu.org>
-
- * font/devX*/S: Regenerated.
- * font/devdvi/generate/ec.map: Remove `pl'.
- * font/devdvi/generate/tc.map: Remove `mi', `14', `12', `34'.
- * font/devdvi/*{TC,EC}: Regenerated.
- * font/devhtml/R.proto: Add `-+'.
- Remove double entries for `rk', `lk', `lt', `rt', `rb', `lb'.
- * font/devlbp/*: Remove `or'.
- * font/devlj4/generate/special.map: Remove `or'.
- * font/devlj4/S: Regenerated.
- * font/devps/generate/textmap: Add `fiveeighths', `oneeighth',
- `seveneighths', `threeeighths'.
- Remove `plusmath'.
- Replace `minusplus' with `uni2213'.
- * font/devps/symbolmap: Regenerated.
- * font/devutf8/R.proto: Replace `shc' with unnamed glyph.
- Add `-+'.
-
- * src/roff/troff/charinfo.h (charinfo): Add `is_normal' inline
- function.
- * src/roff/troff/node.cc (troff_output_file::put_char_width):
- Call glyph_color and fill_color even if tcommand_flag isn't set.
- (make_node, node::add_char): Check not ci->is_fallback but
- ci->is_normal.
-
- * tmac/lj4.tmac, tmac/lbp.tmac: Define `or'.
- * tmac/ec.tmac: Add .rchar entry for `f/'.
- Don't remove `12', `14', `34'.
- Define `pl' to be always roman.
- * tmac/ps.tmac (ps-frac, ps-frac-mono): New macros.
- Define `18', `38', `58', `78'.
- * tmac/tty.tmac: Add `-+'.
- * tmac/dvi.tmac: Define `f/'.
- (dvi-frac): Use `f/'.
- * tmac/X.tmac (X-frac, X-frac-mono): New macros.
- Define `18', `38', `58', `78'.
-
-2002-12-15 Colin Watson <cjwatson@debian.org>
-
- * contrib/pic2graph/pic2graph.sh: Add missing `;;'.
-
-2002-12-10 Werner LEMBERG <wl@gnu.org>
-
- Add glyph `tno', a textual variant of `no'.
-
- * font/devX*/*: Regenerated.
- * font/{devcp1047,devlatin1,devutf8,devhtml}/R.proto: Add `tno'.
- * font/devdvi/generate/{tc.map: Replace `no' with `tno'.
- * font/devdvi/generated/{texsy,textex}.map: Add `tno'.
- * font/devdvi/*: Regenerated.
- * font/devlbp/*: Add `tno'.
- * font/devlj4/generate/tex.map: Replace `no' with `tno'.
- * font/devlj4/*: Regenerated.
- * font/devps/generate/textmap: Replace `no' with `tno'.
- * font/devps/generate/symbolchars: Add `no'.
- * font/devps/*: Regenerated.
-
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Add `tno'.
-
- * tmac/cp1047.tmac, tmac/latin1.tmac: Replace `no' with `tno'.
- * tmac/tty-char.tmac: Add entry for `tno' and `3d'.
-
- * NEWS: Updated.
-
- * tmac/dvi.tmac: Replace most `\\' with `\E'.
- Add definition for `sd'.
- * tmac/X.tmac, tmac/ps.tmac: Replace most `\\' with `\E'.
-
- * tmac/eqnrc <dvi>: Use `integral' instead of `is' glyph.
-
-2002-12-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (TH): Use integer value for `IN' if in nroff
- mode to avoid rounding errors.
- (an-do-tag, an-do-tag-html, RS, RE): Remove redundant `.br'.
-
- * src/roff/groff/groff.man, src/roff/nroff/nroff.man,
- src/roff/troff/troff.man: Improve documentation of -T.
-
-2002-12-07 Jeff Conrad <jeff_conrad@msn.com>
-
- * src/roff/groff/pipeline.c: Don't define `const' for _WIN32.
- (run_pipeline) [_WIN32]: Provide working function without `fork'.
-
-2002-12-06 Werner LEMBERG <wl@gnu.org>
-
- * font/devps/generate/freeeuro.sfd: Make dimensions of Euro.symbol
- glyphs compatible to Adobe's Euro fonts (scaling them down a bit).
- Scaling Euro.sansserif glyphs down to have the same height as
- digits.
- Removed unnecessary points; added some extrema.
-
- * font/devps/EURO, font/devps/freeeuro.afm, font/devps/freeeuro.pfa:
- Regenerated.
-
-2002-12-04 Werner LEMBERG <wl@gnu.org>
-
- * font/devps/generate/freeeuro.sfd: Add glyphs `Euro.symbol.slanted'
- and `Euro.symbol.bold.slanted'.
- Improve some glyph offsets and widths.
- * font/devps/EURO, font/devps/freeeuro.afm, font/devps/freeeuro.pfa:
- Regenerated.
- * font/devps/generate/Makefile (freeeuro.afm freeeuro.pfa): Fix
- typo.
- * font/devps/generate/sfdtopfa.pe: Generate PFA in current
- direcory.
-
- * tmac/europs.tmac: Updated to new glyph indices.
- Use Euro.symbol for font familiy `A'.
-
- * doc/groff.texinfo: Minor improvements.
-
-2002-12-02 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate.tc.map: s/%O/%0/.
- * font/devdvi/*TC: Regenerated.
-
- * src/roff/troff/div.cc (init_div_requests): Sorted.
-
- * tmac/dvi.tmac: Remove `Ye'.
- * tmac/ec.tmac: Remove `Ye'.
- Add .rchar entry for `de'.
-
- * man/groff.man, man/groff_diff.man: Document register `.pe'.
- * doc/groff.texinfo: Document registers `.pe', `.n', and `.w'.
- * NEWS: Updated.
-
-2002-11-30 Werner LEMBERG <wl@gnu.org>
-
- Add PS font for various Euro glyphs.
-
- * font/devps/generate/freeeuro.sfd: New master font file for
- pfaedit.
- * font/devps/generate/sfdtopfa.pe: New conversion script for
- pfaedit.
- * font/devps/generate/Makefile (FONTS): Add `EURO'.
- (EURO, freeeuro.afm, freeeuro.pfa): New rules.
- * font/devps/freeeuro.pfa, font/devps/freeeuro.afm: Generated from
- `freeeuro.sfd'.
- * font/devps/EURO: Generated from `freeeuro.afm'.
- * font/devps/download: Add `freeuro.pfa'.
- * font/devps/Makefile.sub (NORMALFILES): Adde `EURO' and
- `freeeuro.pfa'.
-
- * tmac/europs.tmac: New file.
- * tmac/ps.tmac: Include `europs.tmac'.
- * tmac/Makefile.sub (DISTFILES): Add `europs.tmac'.
-
-2002-11-29 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/texsy.map: Remove `lh' and `rh'.
- * font/devdvi/S: Regenerated.
- * font/devhtml/R.proto: Fix `CR' and `ci'.
- Add `OK'.
- * font/devps/generate/textmap: Fix `lh', `rh', and `sq'.
- Remove `bs'.
- * font/devps/symbolmap: Regenerated.
- * font/devutf8/R.proto: Fix `CR' and `ci'.
- Add `OK'.
- * font/devutf8/NOTES: Updated.
-
- * src/roff/troff/uniglyph.cc (unicode_to_glyph_list): Fix `CR' and
- `ci'.
- Add `OK'.
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Ditto.
-
- * tmac/dvi.tmac: Add `lh' and `rh'.
- * tmac/Xps.tmac: Fix `lh' and `rh'.
- * tmac/X.tmac: Add `OK'.
- * tmac/lj4.tmac: Ditto.
-
-2002-11-24 Werner LEMBERG <wl@gnu.org>
-
- * font/devX*/S: Regenerated.
- * font/devascii/R.proto, font/devcp1047/R.proto: Remove glyphs `lb',
- `lc', `lf', `lk', `lt', `rb', `rc', `rf', `rk', and `rt'.
- * font/devdvi/generate/texsy.map: Remove `or' glyph.
- * font/devdvi/S: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add/fix glyphs
- `parenlefttp', `parenleftex', `parenleftbt', `parenrighttp',
- `parenrightex', `parenrightbt', `bracketlefttp', `bracketleftex',
- `bracketleftbt', `bracketrighttp', `bracketrightex',
- `bracketrightbt', `bracelefttp', `braceleftmid', `braceleftbt',
- `braceex', `braceleftex', `bracerightex', `bracerighttp',
- `bracerightmid', `bracerightbt', `lt', `lk', `lb', `rt', `rk',
- `rb', and `bv'.
- * src/roff/troff/glyphuni.cc, src/roff/troff/uniglyph.cc: Ditto.
- * font/devutf8/NOTES: Updated.
- * font/devlj4/generate/special.map: Add glyph `braceex'.
- * font/devlj4/S: Regenerated.
-
- * tmac/tty-char.tmac: Add glyphs `lf', `rf', `lc', and `rc'.
-
-2002-11-14 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/uniglyph.cc (unicode_to_glyph_list): Add `va'
- and `vA'.
- Fix code for `an'.
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Ditto.
-
- * doc/texinfo.tex: New version from texinfo 4.3.
- * doc/groff.texinfo: Updated for texinfo 4.3.
- Use @tie{} where appropriate.
- * font/devdvi/generate/ec.map: Don't include `or' and `bv'.
- * font/devdvi/generate/tc.map: Remove `rn'.
- * font/devdvi/*TC, font/devdvi/*EC: Regenerated.
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `vA'.
- Fix code for `an'.
- * font/devX100/*, font/devX100-12/*, font/devX75/*,
- font/devX75-12/*: Regenerated.
-
- * tmac/dvi.tmac: Add special fonts `SA' and `SB'.
- Use .char (again) for `br', `ul', `rn', `or', and `ru'.
- Improve definition of `an'.
- * tmac/ps.tmac: Use .char (again) for `br', `ul', `rn', `or', and
- `ru'.
- * tmac/lj4.tmac: Use .char (again) for `br', `ul', `rn', and `ru'.
- * tmac/X.tmac: Add definition for `or'.
- * tmac/Xps.tmac: Undo change 2002-11-05.
- * tmac/lbp.tmac: Add definitions for `br', `rn', `ul', and `ru'.
-
-2002-11-11 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (troff_output_file::put_char): Always
- call flush_tbuf.
-
-2002-11-10 Werner LEMBERG <wl@gnu.org>
-
- Added three new requests `schar', `fschar', and `rfschar'. `schar'
- defines a glyph which is searched after the check for fonts declared
- with `.special' (and before the check for all mounted special
- fonts). `fschar' defines a glyph for a particular font which is
- searched after the check for fonts declared with `.fspecial' (and
- before the check for fonts declared with `.special'). `rfschar'
- removes glyphs defined with `fschar'.
-
- * src/roff/troff/token.h (char_mode): New enum.
- Declare do_define_character.
- * src/roff/troff/charinfo.h (charinfo): Replace `fallback' with
- `mode'.
- (charinfo::is_fallback): Updated.
- (charinfo::is_special): New method.
- * src/roff/troff/input.cc (do_define_character): Add and use
- optional second parameter used as a prefix for font-specific glyph
- names.
- (define_character, define_fallback_character): Updated.
- (define_special_character): New function.
- (init_input_requests): Add `schar'.
- (charinfo::charinfo, charinfo::set_macro): Updated.
- * src/roff/troff/node.cc: Include `stringclass.h'.
- (make_glyph_node): Handle special glyphs defined with `.schar' and
- `.fschar'.
- (define_font_special_character, remove_font_special_character): New
- functions.
- (init_node_requests): Sorted.
- Add `fschar' and `rfschar'.
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo:
- Document new requests.
-
- * font/devhtml/R.proto, font/devutf8/R.proto: Add `va'.
- * tmac/dvi.tmac: Add `va' for CW and CWI (using `.fschar').
-
-2002-11-08 Werner LEMBERG <wl@gnu.org>
-
- Added new font `SC' (cmtex10) to devdvi.
-
- * devdvi/generate/Makefile (FONTS): Add `SC'.
- (SC): New rule.
- * devdvi/generate/textex.map: New map file for cmtex.
- * devdvi/SC: New.
- * devdvi/Makefile.sub (DEVFILES): Updated.
- * tmac/dvi.tmac: Add fspecial entries for SC.
- Add `MI', `S' and `CW' to the `special' call. Otherwise, `SC' is
- found before `S' since the font position of `SC' is lower due to the
- gaps in DESC's `font' line.
- * tmac/ec.tmac: Add a `special' call.
- * NEWS: Updated.
-
- * font/devhtml/R.proto: Remove double entry for `ti'.
- * tmac/tty.tmac: Add entries for `IJ', `ij', and `bq'.
- * tmac/tty-char.tmac: Remove entry for `bq'.
- * tmac/lbp.tmac: Add entries for `lq', `rq', `fo', `fc', and `em'.
- * tmac/ec.tmac: Don't remove `aq' glyph.
- * tmac/X.tmac: Fix entry for `em'.
- Add entries for `fo' and `fc'.
- * tmac/dvi.tmac: Add entries for `em', `en', `hy', `fo', and `fc'.
-
- * doc/groff.texinfo, man/groff.man, man/groff_diff.man: Fix
- documentation of `special' and `fspecial' requests.
-
-2002-11-05 Werner LEMBERG <wl@gnu.org>
-
- * font/devascii/R.proto, font/devcp1047/R.proto,
- font/devlatin1/R.proto: Remove entry for `.i'.
- * font/devdvi/generate/textt.map: Add entry for `ad'.
- * font/devdvi/generate/texr.map, font/devdvi/generate/texb.map,
- font/devdvi/generate/texi.map: Add dummy glyph name `slash@for@l'.
- We need this for getting kerning values to compose `/l' and `/L'.
- * font/devdvi: Regenerated font definition files for CM fonts.
- * font/devhtml/R.proto: Add entries for "'C", "'c", `IJ', and `ij'.
- * font/devutf8/R.proto: Ditto.
- Remove double entry for `ti'.
-
- * src/roff/troff/glyphuni.cc (glyph_to_unicode_list): Fix entries
- for (groff) ligatures, `la', and `ra'.
- Add "'C", "'c", `IJ', and `ij'.
- Remove double entry for `ti'.
- * src/roff/troff/uniglyph.cc (unicode_to_glyph_list): Remove all
- double entries.
- Add "'C", "'c", `IJ', and `ij'.
- Fix entries for (groff) ligatures, `la', and `ra'.
-
- * tmac/ps.tmac (ps-achar): New macro.
- Define "'c" and "'C".
- * tmac/tty.tmac: Add entry for `.i'.
- * tmac/X.tmac (X-achar): New macro.
- Define "'c", "'C", and `:Y'.
- Add entries for `IJ' and `ij'.
- * tmac/Xps.tmac (Xps-achar): New macro.
- Define "'c" and "'C".
- Add entries for `IJ' and `ij'.
- * tmac/lbp.tmac (lbp-achar): New macro.
- Add fallback characters for all groff ligatures and many other
- glyphs.
- * tmac/dvi.tmac: Fix definitions of `_' and `ul'.
- Add entries for `/l' and `/L'.
- Define "'c" and "'C".
- Add entries for `IJ' and `ij'.
-
-2002-11-02 Larry Kollar <kollar@alltel.net>
-
- * PROBLEMS: Document how to solve Mac OS X compilation problems.
-
-2002-11-02 Werner LEMBERG <wl@gnu.org>
-
- Adding support for composite glyphs: \[xxx yyy ...] and the
- `composite' request.
-
- * src/roff/troff/glyphuni.cc: New file for mapping groff glyph names
- to Unicode-based glyph names.
- * src/roff/troff/uniglyph.cc: New file for mapping Unicode-based
- glyph names to groff glyph names.
- * src/roff/troff/uniuni.cc: New file for canonically decomposing
- Unicode-based glyph names.
- * src/roff/troff/unicode.cc, src/roff/troff/unicode.h: New files
- for handling Unicode glyph names.
- * src/roff/troff/input.cc: Include unicode.h.
- (composite_glyph_name): New function.
- (token::next) <'['>: Handle Unicode glyph names and composite
- glyphs.
- (composite_dictionary): New dictionary for the `composite' request.
- (composite_request): Implement `composite' request.
- (init_input_requests): Add `composite'.
- Alphabetically sorted.
- * src/roff/troff/env.cc (tabs_save, tabs_restore): Removed (already
- commented out).
- (init_env_requests): Alphabetically sorted.
- Removed `tas' and `tar' (already commented out).
- * src/roff/troff/Makefile.sub: Updated.
-
-2002-10-31 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/roff/nroff/nroff.man, src/roff/nroff/nroff.sh: Fix description
- of options.
-
-2002-10-29 Werner LEMBERG <wl@gnu.org>
-
- Fix computation of .trunc register. Additionally, its value (and
- the value of the .ne register) is now always set before entering the
- trap.
-
- * src/roff/troff/div.cc (diversion::need): Set `truncated_space' and
- `needed_space' before calling `space'.
- (top_level_diversion::space): Remove special code for 'sp before the
- first page.
- Call `begin_page' with the discarded space as a parameter.
- (top_level_diversion::begin_page): Add optional parameter to set
- `truncated_space'.
- * src/roff/troff/div.h: Updated.
-
- * doc/groff.texinfo: Improve documentation of .sp, \n[.trunc], and
- \n[.ne].
-
- * tmac/an-old.tmac (SH, SS, TP, IP, HP, TS): Undo change 2002-10-26.
- (LP): Remove superfluous call to `br'.
- * tmac/doc-common (doc-paragraph): Undo change 2002-10-26.
- * tmac/doc.tmac (Bd, Bl, doc-set-vertical-and-indent): Ditto.
-
-2002-10-26 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-ditroff: Remove useless switch/variable -rC.
- (doc-setup-header): Don't set page register `%'.
- * tmac/doc-nroff: Remove variable `C'.
- (doc-setup-page-layout): Set doc-header-space to .5i unconditionally.
- (doc-setup-header): Don't set page register `%'.
- Don't call `bp'.
- * tmac/doc-common (doc-header): Call `ns'.
- (doc-paragraph): Protect .sp with .br so that it survives traps
- possibly set by the user.
- * tmac/doc.tmac (Bd, Bl, doc-set-vertical-and-indent): Ditto.
-
- * tmac/doc*: Replace ' with . for consistency if no effect.
-
-2002-10-26 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (SH, SS, TP, IP, HP, TS): Protect .sp with .br
- so that it survives traps possibly set by the user.
-
- * src/roff/troff/node.cc: Fix the changes from 2002-10-23.
- (troff_output_file::set_font): Call flush_tbuf if necessary.
- (troff_output_file::fill_color, troff_output_file::glyph_color): Call
- flush_tbuf and do_motion only if necessary.
- (troff_output_file::start_special,
- troff_output_file::put_char_width, troff_output_file::put_char,
- troff_output_file::draw): Updated.
- (word_space_node::tprint, space_node::tprint, hmotion_node::tprint,
- vmotion_node::tprint): Undo change 2002-10-23.
-
-2002-10-25 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac (DC): Fix case of overlapping images.
-
-2002-10-23 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (troff_output_file::fill_color,
- troff_output_file::glyph_color): Set current color before testing
- color_flag.
- (troff_output_file::put_char_width, troff_output_file::put_char,
- troff_output_file::draw): Don't call flush_tbuf and/or do_motion
- before glyph_color.
- (troff_output_file::file_color, troff_output_file::glyph_color):
- Call do_motion.
- (word_space_node::tprint, space_node::tprint, hmotion_node::tprint,
- vmotion_node::tprint): Move first, then call fill_color.
-
-2002-10-20 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, man/groff_tmac.man: Document that it is not
- possible to use multiple main macro packages.
-
-2002-10-19 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/ps.cc (cmyk_flag): New global variable.
- (ps_printer::set_color): Set `cmyk_flag' for CMY and CMYK colors.
- (ps_printer::~ps_printer): Emit `%%Extensions: CMYK' if `cmyk_flag'
- is set.
- * font/devps/prologue.ps (Fk, Ck): Enclose definitions with a
- `where' construction since `cmyksetcolor' is a PS Level 2 operator.
-
-2002-10-16 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, doc/webpage.ms: Updated.
-
-2002-10-14 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (troff_output_file::put_char_width,
- troff_output_file::put_char, troff_output_file::fill_color,
- troff_output_file::glyph_color): Handle case where color pointer
- is null.
-
-2002-10-13 Ruslan Ermilov <ru@FreeBSD.org>
-
- Add the new -r option to grotty. It is similar to the -i option
- except it tells grotty(1) to use the "reverse video" attribute to
- render italic fonts.
-
- * src/devices/grotty/tty.cc (reverse_flag): New global variable.
- (SGR_REVERSE, SGR_NO_REVERSE): New macros.
- (tty_printer::make_underline, tty_printer::put_color,
- tty_printer::end_page): Use it.
- (main): Add -r switch.
- (usage): Updated.
- * src/devices/grotty/grotty.man: Document it.
-
-2002-10-11 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/roff/troff/env.cc (hyphen_trie::read_patterns_file): Add
- cast to `unsigned char' to properly read patterns with 8bit
- characters.
-
-2002-10-08 Werner LEMBERG <wl@gnu.org>
-
- * REVISION: Increased to 2.
-
-Local Variables:
-version-control: never
-coding: latin-1
-End:
diff --git a/contrib/groff/ChangeLog.115 b/contrib/groff/ChangeLog.115
deleted file mode 100644
index 1d994f3526c7..000000000000
--- a/contrib/groff/ChangeLog.115
+++ /dev/null
@@ -1,6147 +0,0 @@
-
-Version 1.15 released
-=====================
-
-1999-12-28 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, VERSION: Changed to 1.15
-
-1999-12-27 Paul Eggert <eggert@twinsun.com>
-
- * nroff/nroff.man: -S is safer, not safe.
-
- * groff/groff.cc (main): Use `safer', not `safe', in variable
- names. This does not change the behavior.
-
- * troff/input.cc (main): Likewise.
-
- * nroff/nroff.sh: Likewise.
-
- * troff/input.cc (prepend_string): New function.
- (main): Prepend -msafer, so that we check macro libraries for
- safety.
-
- * PROBLEMS: Report problem with Sun C++ 5.0 and 5.1.
-
-Version 1.14 released
-=====================
-
-1999-12-26 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, VERSION: Changed to 1.14.
-
-1999-12-24 Werner LEMBERG <wl@gnu.org>
-
- * refer/refer.cc: Fixing the last fix.
-
-Version 1.13 released
-=====================
-
-1999-12-23 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.an: A typo (`.if' instead of `.ie') made the page
- number disappear.
-
- * NEWS: Updated.
-
- * tmac/tmac.safer: Forgot to remove `so' from the `rm' request.
-
- * VERSION: Changed to 1.13 -- to be compliant with the Adobe 3.0
- document conventions, the version number must be a real.
-
-Version 1.12.1 released
-=======================
-
-1999-12-22 Werner LEMBERG <wl@gnu.org>
-
- * VERSION: Changed to 1.12.1.
-
-1999-12-22 Alan Rooks <arooks@istar.ca>
-
- * refer/refer.cc (do_file): Slight modification to satisfy the
- `Standard system CC - C++ Compilation System 3.1 03/03/99' on SCO
- UnixWare 7.1.
-
-1999-12-20 Werner LEMBERG <wl@gnu.org>
-
- * changed prep.ai.mit.edu -> ftp.gnu.org; updated copyright
- notices.
-
- * tmac/tmac.safer, tmac/groff_msafer.man: Remove `so' (again) from
- list of unsafe requests.
-
- * pic/pic.man: Fixed a typo.
-
- * man/groff_out.man: Fixed a typo.
-
-1999-12-18 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in: Doc fixes.
-
-1999-12-17 Fabrizio Polacco <fab@prosa.it>
-
- * groff/groff.cc: Missing `U' option added to getopt().
-
- * troff/troff.man: Missing `U' option added to synopsis.
-
-Version 1.12 released
-=====================
-
-1999-12-14 Werner LEMBERG <wl@gnu.org>
-
- * troff/input.cc (usage), groff/groff.cc (synopsis): Added -U flag
- to the synopsis.
-
- * nroff/nroff.sh, nroff/nroff.man: Replaced `secure', `unsecure'
- with the more appropriate terms `safer' and `unsafe'.
-
- * libgroff/strerror.c, aclocal.m4, configure.in: Added checks for
- sys_nerr and sys_errlist[].
-
- * pic/pic.h, aclocal.m4, configure.in: Added check for hypot().
-
- * pic/pic.y, pic/pic.cc: Added check for fmod().
-
-1999-12-13 Werner LEMBERG <wl@gnu.org>
-
- * VERSION: Changed to 1.12.
-
- Here some patches from various sources; most of them taken from
- the Debian distribution.
-
- * tmac/groff_mdoc.man, tmac/groff_mdoc.samples.man,
- tmac/Makefile.sub: New files copied directly from the NetBSD
- distribution. Probably, some additional adaptation later on is
- necessary...
-
- * tmac/tmac.safer, tmac/groff_msafer.man: Added `so' to the list
- of unsafe requests.
-
- * groff/groff.cc, groff/groff.man, nroff/nroff.sh,
- nroff/nroff.man, pic/main.cc, pic/pic.man, troff/input.cc,
- troff/troff.man: Added option `-U' for unsafe mode. Safe mode
- (`-S') is now the default.
-
- * README, NEWS: Updated.
-
-1999-12-09 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Regenerated nodes and menus with emacs.
-
- * doc/Makefile (clean): Added cleaning commands for groff.texinfo.
-
-1999-12-06 Werner LEMBERG <wl@gnu.org>
-
- * configure.in: Removed AC_PREFIX_PROGRAM since it causes more
- grief than relief today. Additionally, it is against the GNU
- coding standards.
-
- * configure: Recreated.
-
-1999-12-05 Werner LEMBERG <wl@gnu.org>
-
- * configure.in: Added GROFF_LIBM.
-
- * configure: Recreated.
-
- * aclocal.m4 (GROFF_LIBM): New function which tests whether -lm is
- necessary.
-
- * Makefile.in: Added definition of $(LIBM).
-
- * Makefile.comm (LIBM): Removed.
-
- * pfbtops/Makefile.sub: On AIX, -lm is needed also.
-
-1999-12-03 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/Makefile: Added rule for generation pic.html.
-
- (clean): Files produced by grohtml will be removed also.
-
- * doc/pic.ms: Small fix.
-
- * tmac/tmac.html: Fixed suppression of headers.
-
-1999-11-16 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/tmac.html: Fixing horizontal arrows.
-
- Turning off hyphenation.
-
- * tmac/tmac.an: Improved support for grohtml; better indentation,
- no footers/headers.
-
-1999-10-31 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/tmac.arkup: Added CDFTP macro
-
- * tmac/tmac.html: All headers are turned off for ms, me, and mm
- macros.
-
- * tmac/troffrc: Some additions for HTML stuff.
-
-1999-10-06 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/tmac.html: Small changes.
-
-1999-09-26 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Minor fixes.
-
-1999-09-26 Gaius Mulley <gaius@glam.ac.uk>
-
- * devhtml/TR: Changed spacewidth to 3.
-
- * tmac/Makefile.sub (NORMALFILES): Added tmac.arkup.
-
- * tmac/tmac.html: Moved markup macros to tmap.arkup.
-
- * tmac/tmac.arkup: New file.
-
- * grohtml/ChangeLog: New file.
-
-1999-09-16 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo (Common Features): Added Copying chapter.
- Changed format to @smallbook.
-
-1999-09-15 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Added info about groff.texinfo.
-
- * doc/groff.texinfo: Will now compile (using texi2dvi) without
- warning messages.
-
-1999-09-14 Werner LEMBERG <wl@gnu.org>
-
- * groff/groff.man: More updates.
-
-1999-09-13 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: New file. This manual is still very
- rudimentary. It has been originally contributed by Trent
- A. Fisher <trent@gnurd.portland.or.us> with first corrections and
- additions by me.
-
- * INSTALL: Added information about the `doc' subdir
-
- * troff/troff.man: Minor fixes.
-
- * groff/groff.man: Added missing `-L arg' to SYNOPSIS section;
- reordered options.
-
- * troff/input.cc (usage): Added missing `-ffam' to usage message.
-
- * Makefile.in (dist): groff-$(version).tar.gz must be removed
- also, otherwise it is included itself in another call of `make
- dist'.
-
- * groff/groff.cc (synopsis): Removed superfluous space.
-
- * PROJECTS, PROBLEMS, NEWS: Updated.
-
- * VERSION: Updated to 1.12beta.
-
- * BUG-REPORT: Some cosmetic fixes. Corrected email address.
-
- * README: Updated: Included documentation about CVS repository,
- mailing lists, and daily snapshots.
-
- * tmac/Makefile.sub: Fixed $(tmap_wrap) finally.
-
-1999-09-12 Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
-
- * tmac/tmac.an: If the tag didn't fit into the space that the
- macro `TP' specifies, the rest of the tag went into the space for
- the next line.
-
-1999-09-12 Jeffrey Copeland <jeff@opennt.com>
-
- * grolj4/lj4.cc: Added duplex printing (option `-d').
-
- * grolj4/grolj4.man: Document duplex printing.
-
-1999-09-12 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile (pic.ps): Fixed rule which caused problems with
- non-GNUish sed programs.
-
- * tmac/doc-syms: Removed extra space from -iso8802-3 macro
- definition.
-
- * configure.in (LIBS): Added `-lc'
-
- * Makefile.comm (.man.n): Added substitution for @TMAC_AN_PREFIX@.
-
- * pic/tex.cc (solid_arc): Casting M_PI to double.
-
- * libgroff/putenv.c (putenv): Changed function header to ANSI C.
-
- * groff/groff.man, tmac/Makefile.sub (MAN7), tmac/groff_msafer.man
- (new file), tmac/msafer.man (deleted), tmac/groff_me.man (new
- file), tmac/me.man (deleted): {me,msafer} -> groff_{me,msafer}.
-
- * groff/groff_man.man: New file. This manual page was originally
- written for the Debian GNU/Linux system by Susan G. Kleinmann
- <sgk@debian.org>.
-
- * eqn/list.cc (list_box::compute_metrics,
- list_box::compute_sublist_width): Removed variable declaration to
- avoid shadowing warnings.
-
- * grops/psrm.cc (resource_manager::process_file): Ditto.
-
- * tfmtodit/tfmtodit.cc (main): Ditto.
-
- * libgroff/font.cc (font::load_desc): Renamed auxiliary variable
- to avoid shadowing warnings.
-
- * tbl/table.cc (block_entry::do_divert, table::do_row): Renamed
- shadowing loop variable.
-
- * groff/groff.man, troff/troff.man: Added doc about grohtml.
-
-1999-09-12 Gaius Mulley <gaius@glam.ac.uk>
-
- New grohtml frontend to convert groff input to html.
-
- * Makefile.in (CCPROGDIRS, DEVDIRS): Added html device.
-
- * tmac/Makefile.sub (NORMALFILES): Added tmac.html.
-
- * tmac/eqnrc: Added html device.
-
- * tmac/tmac.html: New file.
-
- * eqn/main.cc (do_file, inline_equation), pic/troff.cc
- (troff_output::start_picture, troff_output::finish_picture),
- tbl/main.cc (process_input_file):
- Surrounded output with `graphics_start' and `graphics_end' so that
- the html driver can identify non-text portions.
-
- * grodvi/dvi.cc (dvi_printer::set_char), grolj4/lj4.cc
- (lj4_printer::set_char), grops/ps.cc (ps_printer::set_char),
- grotty/tty.ps (tty_printer::set_char): Additional parameter
- `name'.
-
- * include/printer.h: Class printer: New function
- set_char_and_width; new variables (is_char_named, is_named_set,
- named_command, named_char_s, named_char_n) to hold information
- about named characters -- needed by the html driver.
-
- * libdriver/printer.cc (printer::set_ascii_char,
- printer::set_special_char): Use set_char_and_width.
-
- * devhtml/*: New device files for html driver.
-
- * grohtml/*: New driver grohtml.
-
-1999-09-11 Wilfredo Sanchez <wsanchez@apple.com>
-
- * tmac/doc-common, tmac/tmac.an: Removed the word `UNIX' in
- default strings.
-
-1999-09-11 Luke Mewburn <lukem@netbsd.org>
-
- * libgroff/string.cc (search): Small fix to test against NULL
- pointer.
-
-1999-09-11 Jeff Conrad <jeff_conrad@msn.com>
-
- * troff/node.cc (copy): The characters in a bracket escape (e.g.,
- \b'abc') were stacked in reverse order when processed in a
- diversion.
-
- * troff/node.h: Added `*last' to struct `node' to make the above
- fix work.
-
- * troff/input.cc (read_draw_node), libdriver/input.cc (do_file):
- The default scale for the 'f' and 't' graphics functions were 'm'
- rather than 'u' (i.e., no scaling).
-
-1999-09-11 Peter Miller <peterm@jna.com.au>
-
- * groff/groff.cc (main), groff.man, soelim/soelim.cc (main,
- do_file), soelim/soelim.man: Added `-I file' option to soelim,
- defining include paths.
-
- * soelim/soelim.cc (include_path_append): New function.
-
-1999-09-11 Larry Jones <larry.jones@sdrc.com>
-
- * tbl/main.cc (process_options): Unix (at least Documenter's
- Workbench) tbl allows arbitrary non-alpha characters between
- options.
-
-1999-09-11 Paul Eggert <eggert@twinsun.com>
-
- Y2k fixes. Don't assume that the current year precedes 2000.
-
- * doc/meref.me: Add \n(y2, \n(y4.
-
- * tmac/doc-common (Yr): New number register.
- (Dd): Don't assume current year precedes 2000.
-
- * tmac/tmac.e (td): Likewise.
- (y2, y4): New number registers.
-
- * pic/pic.man: Update reference for pic paper to May, 1991
- version.
-
-1999-09-11 Werner LEMBERG <wl@gnu.org>
-
- * tmac/Makefile.sub (install_data, stamp-wrap, uninstall_sub):
- Removed quotation marks which prevented correct expansion of
- $(tmac_wrap).
-
- * devlj4/Makefile.sub (LJ4RES): Fixed value (600 instead of 300).
-
-1999-09-10 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (DISTCLEANFILES): Added `config.log' and
- `config.cache'.
-
- * Removed configure.old.
-
-1999-08-31 Werner LEMBERG <wl@gnu.org>
-
- * VERSION: Updated to 1.11.1
-
-1999-05-27 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile: changed `.PS' postfix to `.ps' for consistency.
-
- * tmac/Makefile.sub (install_data, stamp-wrap, uninstall_sub):
- added quotations around $(tmac_wrap) to avoid syntax error if
- variable is empty.
-
- * configure: Newly generated using autoconf 2.13.
-
- * Makefile.in (LDFLAGS): Set variable to @LDFLAGS@.
-
-Fri Aug 15 08:51:47 1997 Eric S. Raymond <esr@snark.thyrsus.com>
-
- * README, PROJECTS, NEWS, INSTALL, VERSION,
- doc/Makefile. doc/pic.ms, groff/groff.man:
- Prepare for 1.11 release. No code changes.
- Documentation for pic added (doc/pic.ms).
-
-Sun Nov 26 11:45:13 1995 James Clark <jjc@jclark.com>
-
- * Version 1.10 released.
-
-Fri Nov 24 09:56:16 1995 James Clark <jjc@jclark.com>
-
- * afmtodit/afmtodit.pl: Avoid comment on first line.
-
-Mon Nov 20 11:13:49 1995 James Clark <jjc@jclark.com>
-
- * aclocal.m4 (GROFF_INSTALL_SH): New macro.
- * configure.in: Call it.
-
- * Makefile.sub (configure): Depends on aclocal.m4 not acgroff.m4.
- (distfiles): Doesn't depend on config.log or config.cache.
-
-Sun Oct 1 08:45:36 1995 James Clark <jjc@jclark.com>
-
- * grog/grog.sh: Use print "" rather than print in END rule.
-
-Wed Aug 23 13:30:52 1995 James Clark <jjc@jclark.com>
-
- * tbl/main.cc (process_data): Don't give error for excess data
- entries that are comments.
-
-Fri Jul 28 11:00:27 1995 James Clark <jjc@jclark.com>
-
- * tbl/main.cc (process_data): Fix case where new for-scope rules
- silently change meaning of code.
-
-Tue Jul 4 23:39:51 1995 James Clark <jjc@jclark.com>
-
- * troff/env.cc (hyphenate): Loop over all consecutive sequences
- of non-zero hyphenation codes.
-
-Sat Jul 1 00:42:15 1995 James Clark <jjc@jclark.com>
-
- * aclocal.m4 (GROFF_POSIX): Use conflicting declaration technique.
-
-Thu Jun 29 13:58:36 1995 James Clark <jjc@jclark.com>
-
- * tmac/tmac.e (ip): Divert the tag so as to freeze the spaces.
-
-Tue Jun 27 12:30:16 1995 James Clark <jjc@jclark.com>
-
- * tmac/tmac.andoc: Make it work in compatibility mode.
-
- * refer/token.h (token_info::is_range_sep): New function.
- * refer/token.cc (init_special_chars): Make \(en a RANGE_SEP.
- * refer/ref.cc (reference::output): More sophisticated check for
- multiple pages.
-
- * devps/prologue.ps (MANUAL): New procedure.
- * grops/ps.cc (main): New -m option.
- (usage): Include -m.
- (ps_printer::~ps_printer): Implement -m.
-
- * aclocal.m4 (GROFF_G): New macro.
- * configure.in: Call it.
- * Makefile.in (g): Provided by configure.
-
- * hpftodit/hpftodit.cc (basename): Rename to xbasename.
-
- * tmac/tmac.tty: Disable warning about bad fonts. Remove font
- translations.
-
- * Makefile.in (tmacpath): Don't include /usr/lib/tmac.
- (tmac_m, tmac_s): Deleted.
- (sys_tmac_prefix, tmac_wrap, tmac_prefix, tmac_an_prefix,
- tmac_s_prefix): New variables.
- (MDEFINES): Change accordingly.
- * Makefile.comm (.man.n): Use new TMAC_* variables.
- * configure.in (GROFF_TMAC): Call.
- * aclocal.m4 (GROFF_TMAC): Define.
- * tmac/Makefile.sub (stamp_wrap): New target.
- (install_data, uninstall_sub): Handle macro wrapping.
-
-Mon Jun 26 14:54:39 1995 James Clark <jjc@jclark.com>
-
- * tbl/main.cc (main): Ignore -T option.
-
-Thu Jun 22 09:08:06 1995 James Clark <jjc@jclark.com>
-
- * devlj4/generate/special.map: Add definition of \(nb.
-
- * tmac/tmac.dvi: Add definition of \(nb.
-
- * troff/dictionary.c (dictionary::dictionary): association::v gets
- initialized by association::association.
-
- * tmac/Makefile.sub: Avoid using temporary files when installing.
-
- * troff/env.cc (environment::set_font): Make bad font number a
- warning.
-
- * Makefile.in (fontpath): Remove $(prefix)/lib/font from fontpath.
-
- * Makefile.in (datadir): Use share rather than lib.
-
- * groff/groff.cc (basename): Rename to xbasename.
-
-Wed Jun 21 16:59:46 1995 James Clark <jjc@jclark.com>
-
- * Makefile (CCLIBS): Don't use.
- * Makefile.ccpg: Likewise.
-
- * acgroff.m4: Rename to...
- * aclocal.m4: Modify extensively for autoconf 2.
- * configure.in: Likewise.
- * Makefile.in: Likewise.
-
- * groff/pipeline.c (const): Declare as empty if __STDC__ not
- defined.
- (xstrsignal): Check for definition of NSIG. Conditionalize
- on SYS_SIGLIST_DECLARED. Make return type const.
-
-Sat Jun 10 12:28:16 1995 James Clark <jjc@jclark.com>
-
- * troff/input.cc (interpolate_macro): Rephrase missing space
- warning.
-
-Thu May 11 01:07:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * addftinfo/addftinfo.cc, eqn/delim.cc, eqn/lex.cc, eqn/list.cc,
- grodvi/dvi.cc, groff/groff.cc, grops/ps.cc, grops/psrm.cc,
- grotty/tty.cc, include/ptable.h indxbib/indxbib.cc,
- libbib/index.cc, libbib/linear.cc, libbib/search.cc,
- libdriver/input.cc, libdriver/printer.cc, libgroff/font.cc,
- libgroff/lf.cc, libgroff/nametoindex.cc, libgroff/ptable.cc,
- libgroff/string.cc, lkbib/lkbib.cc, lookbib/lookbib.cc,
- pic/lex.cc, pic/object.cc, pic/pic.y refer/label.y refer/ref.cc,
- refer/refer.cc, refer/token.cc, tbl/main.cc, tbl/table.cc,
- tfmtodit/tfmtodit.cc, troff/dictionary.cc, troff/div.cc,
- troff/env.cc, troff/input.cc, troff/node.cc, troff/symbol.cc:
- Fix 'for' scoping.
-
-Wed Apr 19 21:15:11 1995 James Clark <jjc@jclark.com>
-
- * troff/input.cc (spring_trap): Push a macro_iterator rather than a
- string_iterator.
- (spring_trap, postpone_traps, unpostpone_traps): Move to later in
- file.
- (macro_iterator::macro_iterator): Add additional argument.
-
-Mon Apr 10 12:06:02 1995 James Clark <jjc@jclark.com>
-
- * troff/div.cc (vertical_size::vertical_size): In place of integer
- specifying line spacing use cunits specifying post vertical
- space.
- (macro_diversion::output, top_level_diversion::output): Likewise.
- * troff/div.h: Change declarations accordingly.
- * troff/env.cc (pending_output_line): Replace ls field by post_vs
- field.
- (pending_output_line::pending_output_line,
- pending_output_line::output, environment::output,
- environment::output_line, environment::output_title,
- environment::hyphenate_line): In place of
- integer specifying line spacing use cunits specifying post vertical
- space.
- (environment::environment): Add post_vertical_spacing and
- prev_post_vertical_spacing arguments.
- (environment::get_post_vertical_spacing): New function.
- (environment::total_post_vertical_spacing): New function.
- (environment::post_vertical_spacing): New function.
- (init_env_requests): Initialize pvs request and .pvs register.
- * troff/env.h: Change declarations.
-
-Tue Mar 28 09:52:07 1995 James Clark <jjc@jclark.com>
-
- * tmac/tmac.pspic: Immediately remove the temporary file.
-
-Sat Mar 25 10:43:11 1995 James Clark <jjc@jclark.com>
-
- * tmac/tmac.pspic (PSPIC): Scale graphic uniformly even when
- height is specified.
-
-Thu Jan 26 16:20:13 1995 James Clark <jjc@jclark.com>
-
- * tbl/table.c (struct vertical rule, class table_entry): Use int
- not short for start_row and end_row.
-
-Fri Jan 13 13:53:05 1995 James Clark <jjc@jclark.com>
-
- * troff/input.cc (trapping_blank_line, blank_line_macro): New
- functions.
- (diverted_space_node::reread, process_input_stack): Call
- trapping_blank_line() rather than blank_line().
- (init_input_requests): Bind "blm" to blank_line_macro().
-
- * tmac/tmac.s (XA): Use .br and par@reset rather than XA.
-
-Tue Jan 10 11:40:35 1995 James Clark <jjc@jclark.com>
-
- * troff/env.cc (environment::possibly_break_line): Require that
- width total excluding width of final space node be greater than
- the target text length.
-
-Tue Jan 3 09:13:37 1995 James Clark <jjc@jclark.com>
-
- * troff/node.cc (kern_pair_node::vertical_extent): New function.
-
-Sun Dec 4 13:19:07 1994 James Clark <jjc@jclark.com>
-
- * troff/node.cc (charinfo_node): New class.
- (glyph_node, composite_node): Derive from charinfo_node. Change
- member functions accordingly.
-
-Wed Nov 30 10:29:29 1994 James Clark <jjc@jclark.com>
-
- * nroff/nroff.sh: Use -Tlatin1 not -TLatin1.
-
-Mon Aug 8 10:17:59 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.tty-char: Add definitions for \(ab and \[arrowvertex].
-
- * devps/generate/textmap (notsubset): Add.
-
- * tmac/tmac.a4: New file.
-
-Sun Jul 24 20:08:42 1994 James Clark (jjc@jclark.com)
-
- * pic/main.cc (had_parse_error): New variable.
- (do_picture, do_whole_file): Set had_parse_error if yyparse()
- returns non-zero.
- (main): Return 1 if had_parse_error is true.
-
-Tue Jul 19 13:40:31 1994 James Clark (jjc@jclark.com)
-
- * grolj4/lj4.cc (main): Avoid use of strtoul.
-
-Mon Jul 18 15:03:02 1994 James Clark (jjc@jclark.com)
-
- * nroff/nroff.sh: Default device is -Tlatin1 if $LC_CTYPE is
- iso_8859_1 or $LESSCHARSET is latin1.
-
-Sun Jul 10 13:38:35 1994 James Clark (jjc@jclark.com)
-
- * hpftodit: New directory.
- * Makefile.in (CCPROGDIRS): Add hpftodit.
- * devlj4/generate: New directory.
-
-Thu Jul 7 23:49:48 1994 James Clark (jjc@jclark.com)
-
- * configure.in: Don't use AC_VFORK.
- * groff/pipeline.c (run_pipeline): Use fork() always.
-
-Wed Jul 6 11:13:17 1994 James Clark (jjc@jclark.com)
-
- * grops/ps.cc (main): Use %1 not %s in error message for -w.
-
- * Makefile.in (CCPROGDIRS): Add grolj4.
- (DEVDIRS): Add devlj4.
- * grolj4, devlj4: New directories.
- * tmac/troffrc: Handle lj4.
- * tmac/tmac.lj4: New file.
-
-Fri Jun 17 18:02:53 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.e (@n): Set indent to 0 before calling |h.
-
-Wed Jun 1 07:33:47 1994 James Clark (jjc@jclark.com)
-
- * troff/input.cc (do_if_request): At end of second string, switch
- environments before getting next token.
-
-Fri May 20 07:39:18 1994 James Clark (jjc@jclark.com)
-
- * devps/psstrip.sed: Split rule that strips whitespace on either
- side of delimiters.
-
-Wed May 18 08:13:47 1994 James Clark (jjc@jclark.com)
-
- * troff/node.h (font_family::make_definition): Add return value to
- declaration. * troff/symbol.h (symbol::operator==,
- symbol::operator!=): Likewise.
-
-Tue May 17 20:46:06 1994 James Clark (jjc@jclark.com)
-
- * groff/groff.cc (main, help, synopsis): Handle -S.
- (possible_command::insert_arg): New function.
-
- * tmac/tmac.safer: New file.
- * tmac/msafer.man: New file.
- * tmac/Makefile.sub (FILES): Add tmac.safer and msafer.man.
-
-Thu Mar 10 01:58:30 1994 Paul Eggert (eggert@twinsun.com)
-
- * pic/pic.h, pic/main.cc (safer_flag): New variable.
- * pic/pic.y (placeless_element): Avoid unsafe operations if
- `safer_flag' is set.
- * pic/main.cc (main): Add -S option, which sets `safer_flag'.
-
-Tue May 10 13:02:31 1994 James Clark (jjc@jclark.com)
-
- * eqn/lex.cc (get_token): Put call to add_context() in block to
- work around Sun C++ 4.0 bug.
-
- * include/stringclass.h (operator +): Use ?: instead of `if' to
- work around Sun C++ 4.0 bug.
-
-Thu May 5 11:18:03 1994 James Clark (jjc@jclark.com)
-
- * tbl/main.cc (process_format): Accept - as a synonym for the _
- key letter.
-
- * libbib/index.cc (minus_one): Don't declare as const.
-
-Fri Apr 29 09:32:48 1994 James Clark (jjc@jclark.com)
-
- * troff/input.cc (get_char_for_escape_name): Push back a newline.
-
-Wed Apr 27 21:14:18 1994 James Clark (jjc@jclark.com)
-
- * troff/input.cc (write_macro_request): New function.
- (init_input_requests): Bind write_macro_request to writem.
-
-Sun Apr 17 11:15:38 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.s (@EN): Turn filling back on even if there was no
- equation.
-
- * eqn/lex.cc (do_space): Supply missing argument to lex_error.
-
- * tmac/tmac.s (@TS): Renamed from TS.
- (TS): Call LP then TS again.
- (cov*ab-init): Alias @TS to TS.
-
- * tmac/tmac.s: Allow QP or RS to initialize.
-
- * tmac/tmac.s (par@load-init): New macro. Call at end of file.
- Move initializations of PS and LL here.
- (par@init): Don't initialize HY. Avoid changing environment 0.
- (par*env-init): Don't all par@reset.
-
-Thu Apr 14 19:15:45 1994 James Clark (jjc@jclark.com)
-
- * include/posix.h: Include <fcntl.h> only if not using <osfcn.h>.
-
-Sun Apr 10 09:54:44 1994 James Clark (jjc@jclark.com)
-
- * Makefile.in (MDEFINES): Add LDFLAGS.
- (LDFLAGS): Add definition line.
-
-Thu Apr 7 22:22:22 1994 James Clark (jjc@jclark.com)
-
- * troff/input.cc (get_optional_char): Split off error check into...
- (check_missing_character): New function.
- * troff/token.h: Declare it.
- * troff/env.cc (margin_character): Don't call get_optional_char.
- Only call tok.next() after making the node.
-
- * include/lib.h (getopt): Make 2nd argument char *const *.
-
-Fri Mar 11 07:28:03 1994 James Clark (jjc@jclark.com)
-
- * nroff/conftest.sh: Deleted.
-
-Fri Mar 4 10:51:36 1994 James Clark (jjc@jclark.com)
-
- * pic/make-dos-dist: Deleted.
-
-Wed Mar 2 20:59:16 1994 James Clark (jjc@jclark.com)
-
- * devps/psstrip.sed: Strip comments before stripping trailing
- white space.
-
-Sat Feb 19 13:07:16 1994 James Clark (jjc@jclark.com)
-
- * Version 1.09 released.
-
-Wed Feb 16 16:53:49 1994 James Clark (jjc@jclark.com)
-
- * tmac/doc-ditroff (hK): Don't reset page number if \nC is > 0.
-
-Mon Feb 14 08:26:40 1994 James Clark (jjc@jclark.com)
-
- * libgroff/font.cc (font::load_desc): Fix typo in error message.
-
-Sun Feb 13 09:37:38 1994 James Clark (jjc@jclark.com)
-
- * libgroff/new.cc (operator new): Rewrite so as to avoid warning
- about returning without a value.
-
- * troff/charinfo.h (charinfo::get_special_translation): Cast
- TRANSLATE_NONE to int.
-
- * refer/token.cc (lookup_token, store_token): Remove bogus loop
- test. Fix test so that it works with n unsigned.
-
- * pic/pic.y (defaults_table): Fully bracket initializer.
- * pic/lex.cc (lookup_keyword): Likewise.
- * eqn/lex.cc (token_table, def_table): Likewise.
- * eqn/box.cc (param_table): Likewise.
- * troff/input.cc (warning_table): Likewise.
- * libgroff/font.cc (table): Likewise.
- * grops/ps.cc (ps_printer::special): Likewise.
- * grops/psrm.cc (resource_manager::process_file): Likewise.
- * tfmtodit/tfmtodit.cc (lig_chars, lig_table): Likewise.
- * refer/command.cc (command_table): Likewise.
- * addftinfo/addftinfo.cc (param_table): Likewise.
-
- * troff/symbol.cc (symbol::symbol): Prevent compiler warnings
- about temp's being unused.
- (unused): New function.
-
- * groff/pipeline.cc: Declare c_fatal.
-
- * libbib/linear.cc (bmpattern::search): Cast patterrn[--j] to
- uchar.
-
- * libbib/index.cc (index_search_item::load): Prevent compiler
- warnings about fd_closer's being unused.
- (unused): New function.
-
-Sat Feb 12 10:31:59 1994 James Clark (jjc@jclark.com)
-
- * troff/input.cc (copy_mode_error): Make `prefix' static.
- Fix typo.
-
- * include/posix.h: Include <osfcn.h> is HAVE_CC_OSFCN_H is
- defined.
- * acgroff.m4, configure.in, Makefile: Rename HAVE_CC_UNISTD_H to
- HAVE_CC_OSFCN_H and modify accordingly.
-
- * troff/input.cc (init_charset_table): radicalex overlaps
- horizontally.
-
- * groff/acgroff.m4 (GROFF_ISC_SYSV3): New macro (from
- udodo!hans@relay.NL.net).
- * groff/configure.in: Call it.
-
- * groff/acgroff.m4 (GROFF_PCLOSE): New macro.
- * groff/configure.in: Call it.
- * include/lib.h: Conditionalize declaration of pclose.
-
- * troff/div.cc (last_page_number): New global variable.
- (top_level_diversion::begin_page): Exit if we just printed the
- last page.
- * troff/div.h (last_page_number): Declare it.
- * troff/input.cc (parse_output_page_list): Set last_page_number.
-
- * eqn/sqrt.cc: Rename \(rn to \[radicalex].
- * devps/S, devps/textmap, tmac/tmac.ps, tmac/tmac.dvi,
- tmac/tmac.X: Likewise.
- * tmac/tmac.ps, tmac/tmac.X, tmac.dvi: Add definitions of \(rn.
- * tmac.dvi: Make \(ru and \(ul extend beyond their width by .04m.
-
-Fri Feb 11 11:45:40 1994 James Clark (jjc@jclark.com)
-
- * tmac/doc-ditroff (hK): Remove groff specific code which
- prevented page-breaks between separate manual entries. If this is
- the first page, don't set the page number to 1.
-
- * acgroff.m4 (GROFF_POSIX): New macro.
- * configure.in: Use it.
-
- * troff/node.cc (class real_output_file,
- real_output_file::real_output_file,
- real_output_file::~real_output_file): Conditionalize use of
- popen/pclose on POPEN_MISSING.
- * troff/node.h: Conditionalize pipe_command on POPEN_MISSING.
- * troff/input.cc (pipe_command): Give an error if POPEN_MISSING.
- (pipe_source): Similarily.
-
- * acgroff.m4 (GROFF_PROG_CCC): Update message about libg++.
-
- * acgroff.m4 (GROFF_GETOPT, GROFF_PUTENV, GROFF_POPEN): Detect
- presence of declarations by trying to compile example with
- conflicting declarations. (gcc only gives a warning for missing
- declarations.)
-
-Wed Feb 9 09:12:23 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.pspic (PSPIC): Allow options to specify alignment
- (from Ulrich Lauther).
-
-Tue Feb 8 03:56:40 1994 James Clark (jjc@jclark.com)
-
- * libbib/linear.cc (file_buffer::load): Use S_ISREG macro.
-
-Thu Feb 3 09:34:35 1994 James Clark (jjc@jclark.com)
-
- * indxbib/indxbib.cc (write_hash_table): Add code for case where
- pointers and ints have different sizes.
-
-Sun Jan 9 16:17:51 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.s (par*env-init): Call par@reset.
-
-Fri Jan 7 10:24:27 1994 James Clark (jjc@jclark.com)
-
- * tmac/tmac.s (@IP): Switch to a new environment when diverting
- tag.
- (par*push-tag-env, par*pop-tag-env): New macros.
-
-Wed Jan 5 21:18:34 1994 James Clark (jjc@jclark.com)
-
- * grops/ps.cc (ps_printer::ps_printer): Use MAX_LINE_LENGTH for
- initializing `out'. Reduce MAX_LINE_LENGTH from 79 to 72.
-
- * grops/ps.cc (ps_printer::~ps_printer): Output %%CreationDate
- comment. Include <time.h>.
-
-Wed Dec 15 14:14:00 1993 James Clark (jjc@jclark.com)
-
- * grops/ps.cc (is_small_h, is_small_v): Deleted.
- (ps_printer::flush_sbuf): Use absolute motion only at beginning of
- lines.
-
-Tue Dec 14 10:06:34 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (read_request): Only print a prompt if reading
- from the terminal. Also clearerr on EOF if reading from the
- terminal. Declare isatty.
-
-Mon Nov 29 08:38:15 1993 James Clark (jjc@jclark.com)
-
- * refer/label.y: Rename map_t to map_func and extractor_t to
- extractor_func.
-
-Sat Oct 30 06:38:12 1993 James Clark (jjc@jclark.com)
-
- * include/assert.h: Don't use volatile.
- * libgroff/assert.cc: Likewise.
-
-Fri Oct 29 15:00:23 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (abort_request): Look at character in tok before
- calling get_copy().
-
-Thu Oct 28 14:09:48 1993 James Clark (jjc@jclark.com)
-
- * troff/troff.h (NO_RETURN): Deleted.
- * troff/div.cc (cleanup_and_exit): Don't declare aas NO_RETURN.
- * troff/input.cc (exit_troff): Likewise
-
- * Makefile.in: Remove `Making ...' messages since GNU make now
- gives these.
-
- * configure.in: Use AC_HAVE_HEADERS(unistd.h) instead of AC_UNISTD_H.
-
-Wed Oct 27 11:12:51 1993 James Clark (jjc@jclark.com)
-
- * tmac/tmac.s (@init): Initialize PO to \n(.o here, rather than
- to constant 1 inch.
-
-Sat Oct 23 10:03:52 1993 James Clark (jjc@jclark.com)
-
- * tmac/tmac.e (hl): Use \n[.in] rather than \n(.i.
-
-Thu Oct 14 12:09:45 1993 James Clark (jjc@jclark.com)
-
- * eqn/delim.cc (delim_box::compute_metrics): Don't increase
- MARK_REG if there was no left delimiter.
-
-Sat Oct 2 19:54:47 1993 James Clark (jjc@jclark.com)
-
- * pic/troff.cc (troff_output::text): Set line thickness to
- relative before outputting text.
-
- * tmac/tmac.e (@k): Don't zero ?T.
- ((z): Likewise.
-
-Sat Sep 25 11:08:43 1993 James Clark (jjc@jclark.com)
-
- * tmac/tmac.e ($p): Handle possibility that $3 is empty.
-
-Wed Aug 18 08:51:41 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (decode_args): Warn about unquoted tabs (from
- Paul Eggert).
-
-Tue Aug 10 08:38:32 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (ignoring): New variable.
- (ignore): Set ignoring during call to do_define_macro.
- (do_define_macro): Clear ignoring before interpolating terminating
- macro.
- (copy_mode_error): New function.
- (get_char_for_escape_name, read_long_escape_name,
- interpolate_arg): Use copy_mode_error.
- (warning_table): Add WARN_IG.
- * troff/troff.h (WARN_IG): Declare.
- (WARN_TOTAL): Change accordingly.
-
- * groff/pipeline.c (strsignal): Rename to xstrsignal.
- * groff/groff.cc (strsignal): Delete declaration.
-
-Fri Jul 16 01:43:12 1993 James Clark (jjc@jclark.com)
-
- * troff/div.cc (page_offset): Use 'm' as default scaling.
-
-Sat Jul 3 09:11:38 1993 James Clark (jjc@jclark.com)
-
- * nroff/nroff.sh: Ignore -u.
-
-Wed Jun 9 12:17:27 1993 James Clark (jjc@jclark.com)
-
- * Makefile.in (MDEFINES): Pass down MAKEOVERRIDES.
-
-Fri Jun 4 17:35:47 1993 James Clark (jjc@jclark.com)
-
- * tmac/tmac.s (par*box-draw): Set adjustment mode to l while
- drawing box.
- (B2): With -Tascii, leave additional vertical space before
- and after. Ensure that the left and right indent is restored to
- what it was even if the point size changes. Don't call
- par@finish. Change the indent, line length and title length
- directly. With -Tascii, make the width of the box 1n less.
- (B1): Remember 1n at the current point size. Don't call
- par@reset. Change the indent, line length and title length
- directly. Ensure that the temporary indent is preserved.
- (par*box-mark-top): Turn off no spacing mode.
-
-Thu Jun 3 17:47:14 1993 James Clark (jjc@jclark.com)
-
- * Makefile.in (dist): Use .gz suffix.
-
-Thu May 27 20:04:59 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (main): Add return 0.
- * pic/main.cc (main): Use return instead of exit.
- * tbl/main.cc (main): Likewise.
- * eqn/main.cc (main): Likewise.
- * grops/ps.cc (main): Likewise.
- * grotty/tty.cc (main): Likewise.
- * groff/groff.cc (main): Likewise.
- * grodvi/dvi.cc (main): Likewise.
- * refer/refer.cc (main): Likewise.
- * indxbib/indxbib.cc (main): Likewise.
- * lkbib/lkbib.cc (main): Likewise.
- * soelim/soelim.cc (main): Likewise.
- * addftinfo/addftinfo.cc (main): Likewise.
- * acgroff.m4 (GROFF_PROG_CCC, GROFF_CC_COMPILE_CHECK,
- GROFF_COOKIE_BUG, GROFF_CC_ANSI_BUG): Likewise.
-
- * troff/token.h (process_input_stack): Don't declare as static.
- * troff/input.cc: Likewise.
-
- * troff/node.c (invalidate_fontno): Make it a static member of
- class font_family. Change callers.
- * troff/node.c: Change declaration.
-
- * tbl/main.cc (struct input_entry_format): Add explicit public
- specifier.
- * tbl/table.cc (struct text_stuff, struct single_hline_stuff,
- struct double_hline_stuff): Likewise.
- * tbl/table.h (struct entry_format): Likewise.
- * pic/object.h (struct saved_state): Likewise.
-
- * include/stringclass.h: Add forward declarations of friend
- functions that are later declared as inline. Don't include inline
- specifier in friend declaration.
-
- * libgroff/lib.h: Declare popen and pclose.
- * acgroff.m4 (GROFF_POPEN): New macro.
- * configure.in: Call it.
-
- * include/lib.h (PI): New constant. Undef first if necessary.
- * tfmtodit/tfmtodit.cc (main): Use PI rather than M_PI.
- * grops/ps.cc (degrees, radians): Likewise.
- * libgroff/font.cc (font::get_skew): Likewise.
-
- * grops/ps.cc (is_ascii): New function.
- (ps_output::put_string): Use is_ascii. Use csprint rather than
- isprint.
- (ps_printer::define_encoding): Use csspace.
- * libgroff/strtol.c (ISASCII): New macro.
- (strtol): Cast arguments to is*() and tolower() to unsigned char.
- Use ISASCII rather than isascii.
- * libgroff/cmap.cc: Use isascii() only if <ctype.h> defines it.
- * libgroff/cset.cc: Likewise.
- * libdriver/input.cc: Include cset.h.
- (do_file, get_integer, possibly_get_integer): Use csdigit() rather
- than isdigit().
-
- * refer/refer.cc (main): Use %ld rather than %d for longs.
-
- * libbib/index.cc (index_search_item_iterator::get_tag): Use
- S_ISREG macro.
-
- * addftinfo/addftinfo.cc (param_t): Add explicit `int'.
-
-Mon May 24 08:51:37 1993 James Clark (jjc@jclark.com)
-
- * troff/input.cc (hyphenation_code): Skip white space between
- char/code pairs.
-
-Sun May 16 08:15:52 1993 James Clark (jjc at jclark.com)
-
- * tbl/table.h (table::entry_list_tailp): New member.
- (table::table): Initialize it.
- (table::add_entry): Use entry_list_tailp to avoid O(n^2)
- behaviour.
-
-Sat May 15 17:26:00 1993 James Clark (jjc at jclark.com)
-
- * grotty/tty.cc (tty_printer::add_char): Don't discard characters
- with negative horizontal positions. Remove casts of glyph::hpos to
- int.
- (USHRT_MAX): Delete definition.
- (SHRT_MAX, SHRT_MIN): New definitions.
- (glyph::hpos): Change type to short.
- (tty_printer::end_page): Output multiple backspaces if necessary.
- Remove casts of glyph::hpos to int.
-
-Fri May 7 12:14:37 1993 James Clark (jjc at jclark.com)
-
- * tmac/tmac.s (@RT): New definition.
-
-Thu May 6 21:36:54 1993 James Clark (jjc at jclark.com)
-
- * refer/refer.cc (do_file): Make sure current_filename is set when
- filename is "-".
-
- * pic/common.cc (common_output::dot_line): Handle zero length
- lines.
-
-Sun May 2 19:54:16 1993 James Clark (jjc at jclark.com)
-
- * tmac/tmac.s (par@reset): Get value for .hy for \n[HY].
- (par@init): Initialize \n[HY].
-
-Mon Apr 26 11:43:16 1993 James Clark (jjc at jclark.com)
-
- * troff/dictionary.cc (dictionary::remove): Continue when
- r < j < i.
-
-Sun Apr 25 11:03:00 1993 James Clark (jjc at jclark.com)
-
- * Makefile.com (.y.cc): Avoid ending up with two versions of
- $(YTABH).
-
-Thu Apr 22 21:03:45 1993 James Clark (jjc at jclark.com)
-
- * tmac/tmac.dvi (\(,c): Define only if it does not exist.
- (\(,C): Likewise. Also fix typo.
-
-Wed Apr 21 08:47:32 1993 James Clark (jjc at jclark.com)
-
- * lib.h: Delete extraneous semi-colon.
-
- * Add pso request: `so' from a pipe.
- * troff/input.c (file_iterator::file_iterator): Add 3rd argument.
- (file_iterator::close): New function.
- (file_iterator::~file_iterator, file_iterator::next_file): Use
- file_iterator::close.
- (file_iterator::backtrace): Say `process' rather than `file' when
- the stream is popened.
- (pipe_source): New function.
- (init_input_requests): Bind ".pso" to pipe_source.
-
-Tue Apr 20 00:02:26 1993 James Clark (jjc at jclark.com)
-
- * afmtodit/afmtodit.pl: Avoid single quotes in comments.
-
- * pfbtops/pfbtops.c: Output 64 characters per line. Output hex
- digits in lower case.
-
-Mon Apr 19 09:55:57 1993 James Clark (jjc at jclark)
-
- * Version 1.08 released.
-
- * Makefile.in (dist): Insert || true after ln -s commands that
- might fail.
-
- * mm: Update to mm 1.16.
-
- * acgroff.m4 (GROFF_CSH_HACK): New macro.
- * configure.in: Call GROFF_CSH_HACK. Substitute for
- SH_SCRIPT_SED_CMD.
- * Makefile.in (SH_SCRIPT_SED_CMD): New variable. Include in
- MDEFINES.
- * nroff/Makefile.sub (nroff): New target.
- (install_data): Install nroff.
- * eqn/Makefile.sub (neqn): Sed with SH_SCRIPT_SED_CMD.
- * grog/Makefile.sub (grog): Sed grog.sh with SH_SCRIPT_SED_CMD.
-
-Sat Apr 17 08:24:28 1993 James Clark (jjc at jclark)
-
- * eqn/Makefile.sub (neqn): Add chmod +x.
-
- * grog/Makefile.sub (grog): Remove spurious semi-colon.
-
-Fri Apr 16 22:41:57 1993 James Clark (jjc at jclark)
-
- * troff/input.cc (string_iterator::string_iterator()): Initialize
- lineno and count.
-
-Tue Apr 13 10:22:28 1993 James Clark (jjc at jclark)
-
- * troff/div.cc (macro_diversion::space,
- top_level_diversion::space): Don't set high_water_mark.
- (macro_diversion::output, top_level_diversion::output): Don't
- include post line space in high water mark.
-
-Wed Apr 7 12:48:18 1993 James Clark (jjc at jclark)
-
- * eqn/eqn.y: Don't define YYDEBUG.
- * pic/pic.y: Likewise.
-
-Mon Apr 5 10:15:15 1993 James Clark (jjc at jclark)
-
- * tmac/tmac.e ([3): Add space after comma following editors.
- Change double spaces to single spaces.
- ([4): Change double spaces to single spaces.
-
- * grops/ps.h (USE_PS_ADOBE_2_0): New flag for broken_flags.
- * grops/ps.cc (ps_printer::~ps_printer): If the USE_PS_ADOBE_2_0
- bit is set in broken_flags, use 2.0 rather than 3.0 as the version
- after %!PS-Adobe- (for Newsprint).
-
- * troff/div.cc (top_level_diversion::begin_page): When
- before_first_page is 1, set page_number to 1.
-
-Sun Apr 4 14:28:53 1993 James Clark (jjc at jclark)
-
- * eqn/box.cc (box::top_level): Protect equation with \&.
-
-Sat Apr 3 23:27:25 1993 James Clark (jjc at jclark)
-
- * groff/groff.cc (possible_command::set_name): Delete old name.
-
- * groff/groff.cc (possible_command::~possible_command): Use
- a_delete.
-
- * troff/node.cc (troff_output_file::begun_page): New member.
- (troff_output_file::troff_output_file): Initialize it.
- (troff_output_file::really_begin_page): Only output V command if a
- page has been begun.
-
- * pic/pic.y (placeless_element): Delete argument to PRINT after
- use.
-
-Fri Apr 2 11:31:02 1993 James Clark (jjc at jclark)
-
- * Make wrapman work.
- * troff/div.h (class top_level_diversion): Replace
- first_page_begun by before_first_page (with opposite sense).
- * Change first_page_begun to before_first_page inverting sense.
- * troff/div.cc (class nl_reg): New class.
- (init_div_requests): Use class nl_reg for \n(nl.
- (top_level_diversion::begin_page): Don't call
- output_file::begin_page if before_first_page is 2;
- reset before_first_page afterwards. If have_next_page_number is
- false, then always increment page_number.
- * tmac/tmac.an: Set traps within TH rather than at the top-level.
- Restore compatibility mode after loading, and then disable
- compatibility mode in TH.
-
-Thu Apr 1 11:09:34 1993 James Clark (jjc at jclark)
-
- * grotty/tty.cc (tty_printer::end_page): Don't discard characters
- past last line.
- * troff/node.h (output_file::trailer): Declare.
- * troff/div.cc (cleanup_and_exit): Call output_file::trailer().
- * troff/node.cc (output_file::trailer): New function.
- (troff_output_file::~troff_output_file): Move most code into...
- (troff_output_file::trailer): New function.
- (class troff_output_file): Delete page_length member. Declare
- trailer().
- (troff_output_file::really_begin_page): Use current page length
- for final V command.
-
- * tbl/main.cc (struct options): New decimal_point_char member.
- (options::options): Initialize this.
- (process_options): Implement decimalpoint option.
- (process_data): Pass decimal_point_char option to table::table.
- * tbl/table.h (class table): New decimal_point_char member.
- (table::table): Add additional argument.
- * tbl/table.cc (find_dot): Rename to find_decimal_point. Add
- second argument specifying decimal point character. Use this
- instead of '.'.
- (table::table): Initialize decimal_point_char.
- (table::add_entry): Change call to find_dot.
-
- * troff/input.cc (get_copy, token::next): Implement \V.
- (interpolate_environment_variable): New function.
-
-Tue Mar 30 14:41:39 1993 James Clark (jjc at jclark)
-
- * pic/lex.cc (lookup_keyword): Rename MIN to K_MIN, MAX to K_MAX.
- * pic/pic.y: Likewise.
-
- * grotty/tty.cc (tty_printer::add_char, tty_printer::end_page):
- Add casts to int.
- * refer/ref.cc (reference::insert_field, reference::delete_field):
- Likewise.
- * troff/number.cc (parse_term): Likewise.
-
- * acgroff.m4 (GROFF_PROG_YACC): New macro.
- * configure.in: Use GROFF_PROG_YACC.
-
- * acgroff.m4 (GROFF_PROG_CCC): Don't add -O automatically for gcc
- and g++.
- * Makefile.in (OPTIMIZE): New define.
- (DEBUG): Empty by default.
- (CCFLAGS, CFLAGS): Include $(OPTIMIZE).
-
- * acgroff.m4 (GROFF_SYS_SIGLIST): Don't quote program.
- (GROFF_ARRAY_DELETE): Likewise.
- (GROFF_CC_COMPILE_CHECK): Quote use of $2 and $3.
-
- * troff/env.cc (trie::~trie): Make virtual to shut up g++.
-
- * devps/psstrip.sed: Use different delimiter on last line (so that
- it works with BSD 4.4 sed.)
-
-Mon Mar 29 17:07:14 1993 James Clark (jjc at jclark)
-
- * devps/psstrip.sed: Delete comments.
-
- * acgroff.m4 (AC_GETOPT): Don't test whether <unistd.h> declares
- optind, opterr, optarg.
- * lib.h: When UNISTD_H_DECLARES_GETOPT is defined, declare optind,
- opterr, optarg.
-
-Sun Mar 28 17:44:25 1993 James Clark (jjc at jclark)
-
- * Makefile.in (check): Dummy target.
-
-Wed Mar 3 04:53:38 1993 James Clark (jjc at jclark)
-
- * Version 1.07 released.
-
- * Integrate mm 1.11.
-
- * tbl/table.cc (alphabetic_block_entry::print): start_row was used
- where start_col was meant.
-
-Thu Feb 25 07:55:36 1993 James Clark (jjc at jclark)
-
- * grog/grog.sh, grog/grog.pl: Recognize PH and SA as -mm macros.
-
-Wed Feb 24 10:15:34 1993 James Clark (jjc at jclark)
-
- * troff/input.cc (token::next): Make \z\o'...' and similar things
- work.
-
- * env.h (MARGIN_CHARACTER_ON, MARGIN_CHARACTER_NEXT): New
- constants.
- (environment): Add margin_character_flags member.
- * env.cc (environment::environment(symbol),
- environment::environment(const environment *): Initialize
- margin_character_flags.
- (margin_character): Rewrite.
- (environment::output_line): Add a margin character if
- margin_character_flags is non-zero. Turn off the
- MARGIN_CHARACTER_NEXT bit. If that makes margin_character_flags
- zero, use margin_character_node without copying and then set
- margin_character_node to 0.
-
- * devps/DESC.in: Change minimum size to 1000.
-
-Tue Feb 23 14:57:49 1993 James Clark (jjc at jclark)
-
- * troff/symbol.h (symbol::hash): Change return type to unsigned
- long.
- * troff/dictionary.cc (dictionary::lookup, dictionary::remove):
- Add casts to int.
-
- * test-groff: Use -r rather than -x.
-
- * grops/psfig.diff: Include in distribution again.
-
-Mon Feb 22 09:10:44 1993 James Clark (jjc at jclark)
-
- * Makefile.in (dist): Use gzip.
-
-Sun Feb 21 11:12:53 1993 James Clark (jjc at jclark)
-
- * acgroff.m4 (GROFF_GETOPT): Check for declaration of getopt() in
- unistd.h as well as in stdlib.h.
- * include/lib.h: Include <stdlib.h> is STDLIB_H_DECLARES_GETOPT is
- defined; otherwise include <sys/types.h> and <unistd.h> if
- UNISTD_H_DECLARES_GETOPT is defined.
-
- * configure.in: use builtin(include, ... rather than include(...
- * configure: Regenerate with autoconf 1.3.
-
- * libdriver/print.cc (printer::adjust_arc_center): Use new
- algorithm suggested by Andy Fyfe.
-
- * libdriver/printer.cc (printer::adjust_arc_center): New function.
- * include/printer.h: Declare this.
- * grops/ps.cc (ps_printer::draw): Use it.
- * grodvi/dvi.cc (dvi_printer::draw): Use it.
-
-Fri Feb 19 23:13:51 1993 James Clark (jjc at jclark)
-
- * Makefile.comm (.man.n): Replace macrodir by tmacdir.
-
-Thu Feb 11 16:46:59 1993 James Clark (jjc at jclark)
-
- * eqn/main.cc (main): Handle "eqn -".
-
-Mon Jan 4 20:29:56 1993 James Clark (jjc at jclark)
-
- * tmac/tmac.e (++): Install fix from comp.bugs.4sd.
-
- * mm: Integrate version 1.08.
-
- * pic/troff.cc (troff_output::finish_picture): Set
- EQN_NO_EXTRA_SPACE reg to 0 rather than removing it.
- * eqn/box.cc (box::extra_space): Set EQN_NO_EXTRA_SPACE_REG to 0
- if it's not defined. Check whether the register is non-zero rather
- than whether it's not defined.
- * tmac.e ({, <): Make argument to \x zero if \n(0x is non-zero.
-
- * indxbib/indxbib.cc: Move all signal handling into...
- * indxbib/signal.c: New file.
- * configure.in: Call AC_RETSIGTYPE.
-
- * acgroff.m4 (GROFF_STRUCT_EXCEPTION): New macro.
- * configure.in: Call GROFF_STRUCT_EXCEPTION.
- * libgroff/matherr.c: Protect with ifdef HAVE_STRUCT_EXCEPTION.
-
- * troff/input.cc (token::token, token::operator=): Work round SGI
- C++ bug.
- * pic/object.cc (position::position): Likewise.
-
-Mon Dec 28 21:50:21 1992 James Clark (jjc at jclark)
-
- * pic/pic.h: Move declaration of hypot().
-
-Wed Dec 16 12:28:29 1992 James Clark (jjc at jclark)
-
- * pic/pic.h: Declare hypot().
-
- * pic/pic.h: Define M_PI if necessary.
-
-Thu Dec 10 12:03:29 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.e (re): Add alternative version that doesn't use groff
- `.ta T' feature.
-
- * devps/prologue.ps (RE): Handle the possibility that the old font
- doesn't have a FontName entry.
-
-Wed Dec 2 10:25:29 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.e (fam): Redefine to set family in environment 2.
- (@C): Use @fam not fam.
-
-Thu Nov 26 16:01:25 1992 James Clark (jjc at jclark)
-
- * lookbib/lookbib.cc (main): Change type of start to const char *.
- * lkbib/lkbib.cc (main): Likewise.
-
- * eqn/lex.cc (definition::definition): Don't use member
- initializer syntax for members of anonymous unions.
-
- * troff/input.cc (input_stack::backtrace): Change type of to const
- char *.
-
-Wed Nov 25 13:43:09 1992 James Clark (jjc at jclark)
-
- * include/stringclass.h (class string): Declare inline friend
- functions as inline in class declaration.
- * troff/hvunits.h (class hunits, class vunits): Likewise.
- * include/refid.h (class reference_id): Likewise
- * troff/troff.h (points_to_units(units), scale(units, double)):
- Delete declarations.
- * libdriver/input.cc (get_char): Delete declaration.
- * include/lib.h: Change 2nd argument of getopt from const char **
- to char **.
- * troff/symbol.cc (symbol::symbol): Cast `new char *[n]' to `const
- char **' before assigning to a `const char **'.
- * tbl/table.cc: Delete extra declarations of prints().
-
-Tue Nov 24 14:33:13 1992 James Clark (jjc at jclark)
-
- * libgroff/font.cc (font::load_desc): Cast `new char *[n]' to `const
- char **' before assigning to a `const char **'.
-
- * libgroff/errarg.cc (errarg::errarg): Don't use member
- initializer syntax for members of anonymous unions.
-
-Sat Nov 21 05:02:23 1992 James Clark (jjc at jclark)
-
- * mm: Integrate version 1.07.
-
-Tue Nov 17 16:44:27 1992 James Clark (jjc at jclark)
-
- * troff/input.c (translate2): Rename to
- (translate_no_transparent).
- (init_input_requests): Rename tr2 to trnt.
-
-Mon Nov 16 09:49:32 1992 James Clark (jjc at jclark)
-
- * troff/charinfo.h (class charinfo): Add transparent_translate field.
- (charinfo::set_translation, charinfo::set_special_translation):
- Add second argument that specifies value for
- transparent_translate.
- (charinfo::get_translation, charinfo::get_special_translation):
- Add optional second argument that specifies whether translation is
- being used for transparent throughput.
- * troff/input.cc (charinfo::set_translation,
- charinfo::set_special_translation): Handle second argument.
- (charinfo::charinfo): Initialize transparent_translate.
- (translate): Split main part off into
- (do_translate): New function. Pass argument saying whether
- translation applies to transparent throughput.
- (translate2): New request.
- (init_input_requests): Bind translate2 to `tr2'.
-
-Wed Nov 11 11:43:20 1992 James Clark (jjc at jclark)
-
- * tbl/table.h (class table): Add `nokeep' flag.
- * tbl/main.cc (process_options): Handle `nokeep' option.
- * tbl/table.cc (table::init_output, table::do_row, table::do_top,
- table::do_bottom): Don't output keep/release macro definitions or
- calls when `nokeep' option has been specified.
-
-Sat Nov 7 01:28:33 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.Xps (Xps-char): Use " as delimiter for \Z.
-
-Wed Nov 4 16:29:04 1992 James Clark (jjc at jclark)
-
- * tbl/table.cc (table_entry::divert, block_entry::do_divert,
- block_entry::divert, alphabetic_block_entry::divert): Add extra
- argument giving column separation.
- (table::compute_widths): Pass column separation to
- table_entry::divert().
- (block_entry::do_divert): If an entry spans multiple columns and a
- minimumum width has been specified for each column, then set the
- line length to the sum of the widths (plus possibly the column
- separations).
-
- * troff/input.cc (set_escape_char): Don't set the escape_char
- until after calling has_arg().
-
-Tue Nov 3 11:23:27 1992 James Clark (jjc at jclark)
-
- * tbl/table.cc (table::do_top): Add missing \s0 for double box
- case.
-
- * tbl/table.cc (table::print_double_hline): Avoid extra new line
- in case where r > nrows - 1.
-
- * tbl/table.cc (BODY_HEIGHT): Deleted.
- (LINE_SEP): New definition.
- (table::print_single_hline, table::print_double_hline,
- table::compute_vrule_top_adjust, table::compute_vrule_bot_adjust,
- table::do_row, table::do_top): Use LINE_SEP space before a line
- instead of \n[.v]-BODY_HEIGHT-BODY_DEPTH.
-
- * tbl/table.cc (text_entry::print_contents): New function.
- (text_string_name, right_text_string_name): Deleted.
- (TEXT_STRING, RIGHT_TEXT_STRING): Deleted.
- (simple_text_entry::do_width, numeric_text_entry::do_width,
- alphabetic_text_entry::do_width): Don't store the contents of the
- entry in a string.
- (left_text_entry::simple_print, right_text_entry::simple_print,
- center_text_entry::simple_print,
- alphabetic_text_entry::simple_print,
- numeric_text_entry::simple_print): Print the entry directly
- instead of using the stored string.
-
-Fri Oct 30 10:39:32 1992 James Clark (jjc at jclark)
-
- * devps/Makefile: Strip PostScript files.
- * devps/prologue: Rename to...
- * devps/prologue.ps.
- * devps/psstrip.sed: New file.
- * devps/download: Use .pfa rather than .ps for installed versions
- of fonts.
-
-Thu Oct 29 09:14:43 1992 James Clark (jjc at jclark)
-
- * troff/env.cc (input_trap): Give a warning if the argument is out
- of range.
-
- * troff/env.cc (adjust): Treat negative argument as missing. Round
- argument > 5 down to 5.
-
- * troff/env.cc (center, right_justify): Make negative argument zero.
-
- * troff/div.cc (page_offset, vertical_position_traps): Treat
- invalid argument as missing.
- * troff/env.cc (line_spacing, line_length, title_length, indent,
- underline, hyphen_line_max_request, control_char,
- no_break_control_char, widow_control_request, adjust, input_trap,
- point_size): Likewise.
- * troff/node.cc (ligature, kern_request, bold_font, track_kern,
- constant_space): Likewise.
- * troff/input.cc (compatible, shift, warn_request,
- set_escape_char): Likewise.
-
- * tbl/main.cc (format::format): Avoid doing `new int[0]'.
- * tbl/table.cc (table::table): Likewise.
-
- * Makefile.dev (install_dev): depends on $(DEVFILES).
-
-Wed Oct 28 08:30:57 1992 James Clark (jjc at jclark)
-
- * devX75, devX75-12, devX100, devX100-12: New directories.
- * Makefile.in: Add these to DEVDIRS.
-
- * troff/Makefile.sub, eqn/Makefile.sub, indxbib/Makefile.sub,
- afmtodit/Makefile.sub, tmac/Makefile.sub, nroff/Makefile.sub,
- grog/Makefile.sub, mm/Makefile.sub (uninstall_sub): New target.
- * Makefile.in (uninstall, uninstall_sub, uninstall_dirs): New
- targets.
- * Makefile.ccpg, Makefile.cpg, Makefile.dev, Makefile.man
- (uninstall): New target.
- * Makefile.comm (uninstall, uninstall_sub, uninstall_man,
- uninstall_prog, uninstall_dev): New targets.
-
- * troff/div.cc (return_request): Treat an invalid argument as
- missing.
-
-Mon Oct 26 11:33:47 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.e ((f): Set up the environment even when there's a
- current diversion. Transperently throughput a call to @N.
- (@N): New macro.
-
-Thu Oct 22 05:05:59 1992 James Clark (jjc at jclark)
-
- * tbl/table.cc (table::compute_vrule_top_adjust): Round adjustment
- up to vertical resolution.
-
- * tbl/table.cc (table::do_row): Change row number after printing
- stuff list.
-
- * pic/lex.cc (get_token_after_dot): Make .left and .right work.
-
-Wed Oct 21 14:46:45 1992 James Clark (jjc at jclark)
-
- * Rename CHANGES to NEWS.
-
-Tue Oct 20 23:25:21 1992 James Clark (jjc at jclark)
-
- * libgroff/new.cc (operator new): Avoid calling malloc(0).
-
-Mon Oct 19 09:10:13 1992 James Clark (jjc at jclark)
-
- * man.ultrix: Removed.
-
-Sun Oct 18 06:35:15 1992 James Clark (jjc at jclark)
-
- * Makefile.comm (extraclean): Delete files whose names begin with
- `='.
-
- * pic/troff.cc (troff_output::text): Fix typo in implementation of
- aligned text.
-
-Sat Oct 10 09:32:29 1992 James Clark (jjc at jclark)
-
- * troff/env.cc (hyphenate_request, vertical_spacing, no_number):
- * troff/div.cc (page_length, need_space, space_request): Treat
- invalid optional argument as missing.
- * troff/env.cc (number_lines): If the first argument is present
- but not a number, turn on line numbering, don't change the next
- line number and parse the remaining arguments.
-
- * tmac/tmac.e (@q): Do the `ne' before changing to environment 2.
-
-Thu Oct 8 10:24:40 1992 James Clark (jjc at jclark)
-
- * eqn/box.h: Change declaration accordingly.
- * eqn/box.cc (set_gsize): Change return type to int. Return 0 if
- the specified size was bad but don't give an error. Check for
- overflow.
- * eqn/main.cc (main): Change caller. Leave validation to set_gsize.
- * eqn/lex (do_size): Likewise.
-
-Wed Oct 7 09:48:59 1992 James Clark (jjc at jclark)
-
- * acgroff.m4 (GROFF_PROG_CCC): Use fopen when checking for C++
- compatible headers.
-
-Sun Oct 4 18:24:02 1992 James Clark (jjc at jclark)
-
- * tbl/table.cc (table::init_output): Improve error message when
- table won't fit on one page.
-
-Fri Oct 2 10:41:40 1992 James Clark (jjc at jclark)
-
- * pic/troff.cc (troff_output::start_picture): Generate line
- containing a horizontal motion equal to the width of the picture.
-
- * groff/groff.cc (main): Allow PROG_PREFIX to be set at runtime
- using GROFF_COMMAND_PREFIX environment variable.
-
-Fri Sep 25 11:40:40 1992 James Clark (jjc at jclark)
-
- * mdate.sh: Use $NF rather than $(NF).
-
-Tue Sep 22 09:47:24 1992 James Clark (jjc at jclark)
-
- * pic/main.cc (main): Use %1 not %c in argument to warning.
-
- * eqn/main.cc (main): Output code to check that geqn was given the
- correct -T option.
-
-Mon Sep 21 10:59:16 1992 James Clark (jjc at jclark)
-
- * Makefile.in (dist): Instead of doing `make -f ../Makefile', do
- `ln -s ../Makefile .; make; rm -f Makefile'.
-
- * troff/hyphen: Rename to...
- * troff/hyphen.us:
- * troff/input.cc (main): Delete -H option. Don't call
- read_hyphen_file().
- * troff/env.cc: Include searchpath.h and macropath.h.
- (exception_dictionary): Deleted.
- (ht): Deleted.
- (read_hyphen_file): Deleted.
- (hyphenation_language): New struct.
- (class trie, class hyphen_trie): Move declarations up.
- (trie_node::~trie_node): Deleted.
- (trie::delete_trie_node): New function.
- (trie::do_delete): New pure virtual function.
- (hyphen_trie::do_delete): New function.
- (trie::~trie): New function.
- (hyphen_trie::~hyphen_trie): New function.
- (trie::clear): No need to chcek that tp is not 0.
- (current_language, language_dictionary): New variables.
- (hyphen_word): Give an error if no current language. Use
- exceptions dictionary in current language.
- (hyphen_trie::read_patterns_file): Find file using macro_path.
- Allow comments (starting with %) in patterns file. Don't make it
- a fatal error if the file can't be found.
- (hyphenate): Return if no current language. Get the exceptions
- dictionary and the hyphenation patterns from the current language.
- (set_hyphenation_language): New variable.
- (hyphenation_patterns_file): New function.
- (hyphenation_language_reg): New class.
- (hyphenation_language_reg::get_string): New function.
- (init_hyphen_requests): Bind "hla" to set_hyphenation_language and
- "hpf" to hyphenation_patterns_file. Initialize `.hla' number
- register.
- * groff/groff.cc (main, help, synopsis): Delete -H option.
- * include/Makefile.sub: Don't define HYPHENFILE.
- * Makefile.in: Delete hyphenfile variable and remove from MDEFINES.
- * Makefile.comm (.man.n): Don't substitute for HYPHENFILE.
- * tmac/troffrc: Set hyphenation language to `us'. Load `hyphen.us'
- hyphenation patterns.
-
-Sun Sep 20 09:33:02 1992 James Clark (jjc at jclark)
-
- * eqn/neqn.sh: New file.
- * eqn/Makefile.sub: Handle neqn.sh.
-
- * eqn/eqn.h: Declare `nroff' variable.
- * eqn/box.cc (param_table): Add `nroff' param.
- (nroff): Define it.
- * eqn/lex.cc (yylex): Handle TDEFINE and NDEFINE using `nroff'
- variable.
- * tmac/eqnrc: Set `nroff' to 1 for -Tascii or -Tlatin1.
-
- * troff/troff.h (WARN_FONT): New warning.
- (WARN_TOTAL): Change accordingly.
- * troff/input.cc (DEFAULT_WARNING_MASK): Include WARN_FONT.
- (warning_table): Add WARN_FONT.
- * troff/node.cc (mount_font_no_translate): Pass argument to
- font::load_font. If this is non-zero, give a warning.
- Don't give an error message when accessing a font that has already
- been found to be invalid.
- * include/font.h (font::load, font::load_font): Add additional
- optional argument which suppresses error message if the font is
- not found.
- * libgroff/font.cc (font::load_font): Handle additional argument.
- (font::load): Add additional argument. If this is non-null, set it
- to 1 and don't give error message.
-
- * include/printer.h (printer::end_page): Add argument giving
- length of page.
- * libdriver/input.cc (do_file): Pass this.
- * grops/ps.cc (ps_printer::end_page): Add argument.
- * grodvi/dvi.cc (dvi_printer::end_page,
- draw_dvi_printer::end_page): Add argument.
- * grotty/tty.cc (class tty_printer): Remove lines_per_page and
- columns_per_page members. New member nlines.
- (DEFAULT_LINES_PER_PAGE): Deleted.
- (tty_printer::tty_printer): Don't compute lines_per_page from
- font::paperlength. Don't compute columns_per_page from
- font::paperwidth.
- (tty_printer::add_char): Don't check horizontal position against
- columns_per_page. Grow glyphs vector if neccessary.
- (tty_printer::end_page): Add argument giving page_length in units.
- Discard lines past end of page.
-
-Wed Sep 16 06:29:52 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.tty-char: Fix definition of \(/l.
-
- * tmac/tmac.X: Define \(en.
-
-Tue Sep 15 10:37:13 1992 James Clark (jjc at jclark)
-
- * acgroff.m4 (GROFF_PRINT): If a system has lpr and lp but not
- lpq, then use lp rather than lpr.
-
- * tmac/tmac.s (par@reset): Don't call `ad'.
- (par*env-init): Call `ad'.
-
-Sun Sep 13 18:48:20 1992 James Clark (jjc at jclark)
-
- * mdate.sh: Use $(NF) instead of $6 to extract year from output of
- date.
-
- * troff/symbol.cc: #undef BLOCK_SIZE if it's defined.
- * indxbib/indxbib.cc: Likewise.
-
-Sun Sep 6 09:44:46 1992 James Clark (jjc at jclark)
-
- * libgroff/putenv.c: New file.
- * libgroff/Makefile.sub: Add putenv.c to CSRCS.
- * Makefile.in: Say that putenv.o can be one of LIBOBJS.
- * configure.in: Test for putenv with AC_REPLACE_FUNCS. Test for
- stdlib.h with AC_HAVE_HEADERS.
-
-Sat Sep 5 18:11:52 1992 James Clark (jjc at jclark)
-
- * indxbib/dirnamemax.c: Include <sys/dir.h> only if <dirent.h>
- does not exist.
-
-Fri Sep 4 09:43:26 1992 James Clark (jjc at jclark)
-
- * eqn/box.cc (gsize): Make it an int.
- (set_gsize): Parse argument handling increment or decrement.
- (box::top_level): Convert gsize to a string.
-
- * troff/input.cc (exit_troff): Make buf unsigned char [].
- Call to make_temp_iterator casts buf to char*.
-
- * Makefile.in ($(TARGETS), dot): Pass $(MDEFINES) to recursive makes.
-
- * Makefile.ccpg (depend.temp): Depends on $(YTABC).
- * Makefile.cpg (depend.temp): Likewise.
-
- * Makefile.dep: Remove Makefile.dep from $(REALCLEANFILES).
-
- * Makefile.comm: Add y.output to MOSTLYCLEANFILES.
-
-Thu Sep 3 08:01:55 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.s (B, I, BI, CW): Rewrite avoiding aliases.
-
-Tue Sep 1 18:24:53 1992 James Clark (jjc at jclark)
-
- * Version 1.06 released.
-
- * Integrate mm 1.04.
-
-Fri Aug 28 11:28:19 1992 James Clark (jjc at jclark)
-
- * Makefile.comm, Makefile.ccpg, Makefile.cpg: Fix TAGS target.
-
-Thu Aug 27 11:03:33 1992 James Clark (jjc at jclark)
-
- * afmtodit/afmtodit.pl: Add -n option that disables generation of
- ligatures command.
- * devps/generate/Makefile (CR, CB, CI, CBI): Pass -n flag to
- afmtodit. Regenerate.
-
- * tmac/tmac.e ()z): Adjust _b if necessary so as to avoid moving
- @f back past the current position.
-
- * tmac/tmac.e: Change calls to @R so that comments are not part of
- arguments.
-
-Tue Aug 25 10:42:07 1992 James Clark (jjc at jclark)
-
- * configure.in: Check for mkstemp with AC_HAVE_FUNCS.
-
- * acgroff.m4 (GROFF_PROG_CCC): Don't check for <osfcn.h>. Instead
- check that we can link a call to a function declared in <stdio.h>.
- (GROFF_UNISTD_H): New macro.
- * configure.in: Call it.
- * Makefile.in: Document it.
- * include/posix.h: New file.
- * troff/troff.h: Don't include <osfcn.h>
- * troff/input.cc: Include posix.h.
- * libgroff/new.cc, libgroff/tmpfile.cc: Include posix.h rather than
- osfcn.h.
- * indxbib/indxbib.cc, libbib/{search.cc,linear.cc,index.cc}:
- Include posix.h rather <sys/types.h>, <sys/stat.h>, <osfcn.h>,
- <fcntl.h>.
- * indxbib/indxbib.cc (S_IRUSR, S_IRGRP, S_IROTH): Delete definitions.
- * libbib/index.cc (S_ISREG, O_RDONLY): Delete definitions.
- * libbib/search.cc (O_RDONLY): Delete definition.
- * refer/refer.cc, include/driver.h, pic/pic.h, groff/groff.cc:
- Don't include <osfcn.h>.
-
- * acgroff.m4 (GROFF_TIME_T): New macro.
- * configure.in: Call it.
- * Makefile.in: Document it.
-
- * acgroff.m4 (GROFF_TRADITIONAL_CPP): New macro.
- * configure.in: Call it.
- * Makefile.in: Document -DTRADITIONAL_CPP.
- * include/ptable.h: Don't include generic.h.
- (name2): Define it.
-
- * tmac/tmac.s (][): Make [T1 and [T2 aliases for [T.
- Afterwards remove [T1 and [T2.
- (ref*spec!0, ref*spec!2): Use T1 rather than T.
- (ref*spec!1, ref*spec!4, ref*spec!4): Use T2 rather than T.
- (ref*add-T2): Renamed from ref*add-T.
- (ref*add-T1): New macro.
-
-Mon Aug 24 11:11:11 1992 James Clark (jjc at jclark)
-
- * acgroff.m4 (AC_PROG_CCC): Use GROFF_EXIT rather than exit 1.
-
- * libbib/index.cc: Include <fcntl.h>.
- (O_RDONLY): Define if necessary.
- (make_index_search_item, index_search_item_iterator::get_tag,
- index_search_item::check_files): Use O_RDONLY.
- * libbib/seach.cc: Include <fcntl.h>, <sys/types.h>, <sys/stat.h>.
- (O_RDONLY): Define if necessary.
- (search_list::add_file): Use O_RDONLY.
- * indxbib/indxbib.cc: Include <fcntl.h>, <sys/types.h>,
- <sys/stat.h>.
- (S_IRUSR, S_IRGRP, S_IROTH): Define if necessary.
- (main): Use these.
-
- * libbib/index.cc (S_ISREG): Define it if necessary.
- (index_search_item::load): Use S_ISREG.
-
- * include/driver.h: Include <errno.h>.
-
-Sun Aug 23 11:32:18 1992 James Clark (jjc at jclark)
-
- * eqn/box.cc (body_height): Increase default value to 85.
- (body_depth): Increase default value to 35.
-
-Fri Aug 21 05:34:42 1992 James Clark (jjc at jclark)
-
- * eqn/pbox.h (SAVE_FONT_STRING): Define it.
- * eqn/box.cc (box::top_level): Hide use of \R in a string that is
- protected from expansion with \E.
-
- * acgroff.m4 (GROFF_PAGE): Use `case' to test domain.
-
- * Makefile (Makefile): New target.
-
- * Makefile.sub (configure, distfiles): New targets.
-
- * acgroff.m4 (GROFF_BROKEN_SPOOLER_FLAGS): Avoid using ${var:-val}
- construct.
-
-Thu Aug 20 12:27:26 1992 James Clark (jjc at jclark)
-
- * eqn/box.cc (param_table): Add body_height and body_depth.
-
- * eqn/lex.cc (def_table): Make circumflex in hat_def roman.
-
-Tue Aug 18 16:24:25 1992 James Clark (jjc at jclark)
-
- * psbb/Makefile.sub: Don't link with libgroff.a.
-
- * acgroff.m4 (GROFF_PUTENV): New macro.
- * configure.in: Call GROFF_PUTENV.
- * Makefile.in: Document STDLIB_H_DECLARES_PUTENV.
- * groff/groff.cc: Don't declare putenv if STDLIB_H_DECLARES_PUTENV
- is defined.
-
- * troff/env.cc (distribute_space): Rename force_forward argument
- to force_reverse. Reverse the list if force_reverse is true.
-
-Mon Aug 17 17:49:05 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.an: Don't define a string `T'. Just define Tm.
-
- * eqn/pile.cc (matrix_box::compute_metrics): Don't allow computed
- height or depth to be negative. Guard against SUP_RAISE quantity
- being negative.
-
-Sat Aug 15 08:18:54 1992 James Clark (jjc at jclark)
-
- * devps/generate/textmap: Add `an' (arrowhorizex).
- * tmac/tmac.ps: \(an overlaps horizontally.
- * tmac/tmac.dvi, tmac/tmac.tty: Add `an'.
-
- * devps/symbolchars: Add arrowverttp, arrowvertbt.
- * devps/textmap: Add arrowvertex.
- * eqn/delim.cc (delim_table): Add uparrow, downarrow and
- updownarrow delimiters.
- * tmac/tmac.ps, tmac/tmac.X: Add definition of \(va.
-
- * tbl/table.cc (simple_entry::position_vertically,
- block_entry::position_vertically): For a centered entry, perform
- the motion in two stages.
-
- * refer/refer.cc (split_punct): Don't call lookup_token if there
- is no token.
-
-Fri Aug 14 11:14:58 1992 James Clark (jjc at jclark)
-
- * troff/input.cc (token::next): Delete token_node after copying
- token.
-
- * grodvi/grodvi.cc (dvi_printer::dvi_printer): Initialize
- cur_point_size.
-
- * libdriver/printer.cc (printer::load_font): Delete old_font_table.
-
- * grops/ps.cc (ps_printer::define_encoding): Delete elements of vec.
-
-Tue Aug 11 13:50:38 1992 James Clark (jjc at jclark)
-
- * grops/ps.cc (usage): -b option takes an argument.
-
- * devps/prologue (PLG): New procedure.
- * grops/ps.cc (main, usage): New -g option.
- (ps_printer::~ps_printer): If guess_flag is set, guess the paper
- length using PLG.
-
-Mon Aug 10 11:17:53 1992 James Clark (jjc at jclark)
-
- * include/cset.h: Include <limits.h> if we have it.
-
- * libgroff/illegal.cc: New file.
- * include/lib.h (illegal_input_char): Use table.
- * troff/input.cc (ESCAPE_RIGHT_PARENTHESIS): Renumber to 0206.
- * pic/lex.cc (ARG1): Renumber to 14.
- * eqn/lex.cc (ARG1): Likewise.
-
- * troff/Makefile.sub (majorminor.cc): Handle 3 part versions
- (eg 1.05.90) correctly.
-
-Sun Aug 9 13:35:43 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.e (sr): Deleted. Set $r and $R directly.
- Rename $r and $R registers to $v and $V.
- ($r, $R): Initialize to 0.
- (@v, @V): New macros.
- (sz): Call @v.
- (@M): Call @V.
-
- * troff/input.cc (main, usage): Add -R option that says not to
- load troffrc.
- * eqn/main.cc (main, usage): Rename -n to -R.
-
-Sat Aug 8 00:16:00 1992 James Clark (jjc at jclark)
-
- * devps/DESC.in: Leave font positions 5-9 blank.
- * devdvi/DESC.in: Likewise.
-
- * grog/grog.pl: Handle `.PS <file' correctly.
-
- * troff/input.cc (input_stack::push): Improve error message when
- input stack limit exceeded.
-
-Fri Aug 7 13:08:16 1992 James Clark (jjc at jclark)
-
- * refer/refer.cc (main): Fix typo in handling of `a' option.
-
- * refer/refer.cc (do_bib): In state START after a newline remain
- in state START.
-
- * groff/groff.sh: Deleted.
- * groff/Makefile.sub: Delete handling of groff.sh.
-
- * pic/troff.cc (troff_output::text): Test \n(0p rather than \*(.T
- to determine whether to use \X'ps:...'.
- * tmac/troffrc: Set 0p register to 0.
- * tmac/tmac.ps: Set 0p register to 1.
-
- * groff/groff.cc: Support -X option. Give warning for -TXps and
- transform to -X -Tps. Pass troff a -r.X=1 option if -X is used.
- * tmac/troffrc: Support -r.X=1.
-
- * pic/troff.cc (troff_output::dot): Don't test
- zero_length_line_flag.
-
-Thu Aug 6 13:32:08 1992 James Clark (jjc at jclark)
-
- * include/lib.h: Declare getopt() and friends unless
- STDLIB_H_DECLARES_GETOPT is defined.
-
- * doc/chars.tr: Delete.
- * man/groff_char.man: New file.
-
-Wed Aug 5 00:38:58 1992 James Clark (jjc at jclark)
-
- * tmac/tmac.e (np, bu): Test \n($p with string expression in case
- user has changed register format.
-
-Mon Aug 3 11:22:18 1992 James Clark (jjc at jclark)
-
- * groff/groff.cc: Get rid of device_table. Get postprocessor from
- `postpro' command in DESC file. Get spooler command from `print'
- command in DESC file. Execute spooler command with /bin/sh.
-
- * groff/groff.cc: Split Unix-specific parts into...
- * groff/pipeline.c: New file.
-
- * LICENSE: Delete.
- * COPYING: New file.
- * all files: Update copyright notices.
-
- * Rearrange files. Redo Makefiles. Use autoconf.
-
-Sat Aug 1 09:36:50 1992 James Clark (jjc at jclark)
-
- * troff/input.c (charinfo_to_node_list): Interpret character
- definition with escape_char of `\'.
-
-Tue Jul 28 12:20:12 1992 James Clark (jjc at jclark)
-
- * lib/strerror.c, lib/iftoa.c, lib/itoa.c: Don't include lib.h.
- Define INT_DIGITS as big enough for 64-bit integer.
- * lib/strtol.c: Don't include lib.h.
- * lib/lib.h: Delete ifdef __cplusplus stuff.
-
-Mon Jul 27 11:08:50 1992 James Clark (jjc at jclark)
-
- * ps/devps/Makefile: Add DESC to DEVICEFILES. Separate out rule
- for making DESC. Make $(FONTS) depend on DESC. afmtodit should
- get DESC from current directory.
-
-Sun Jul 26 15:38:26 1992 James Clark (jjc at jclark)
-
- * tbl/main.c (main): Always reset the line number when reading
- from stdin.
-
- * tbl/table.c (table::print_single_hline, table::print_double_hline,
- table::define_bottom_macro, table::do_row, table::do_top): Round
- vertical spacing up to vertical resolution.
-
-Fri Jul 24 14:32:07 1992 James Clark (jjc at jclark)
-
- * ps/ps.h (enum resource_type): Avoid comma at end of
- enumerator-list.
- * dvi/dvi.c (class dvi_printer): Likewise.
- * dvi/tfmtodit.c (gf::load): Likewise.
- * refer/label.y (struct expression): Likewise.
- * refer/refer.c (class label_processing_state): Likewise.
- * refer/indxbib.c (do_file): Likewise.
- * troff/troff.c (enum warning_type): Likewise.
- * tbl/main.c (process_data): Likewise.
- * troff/charinfo.h (class charinfo):
-
-Wed Jul 22 09:17:58 1992 James Clark (jjc at jclark)
-
- * dvi/devdvi/textt.map: Add entry for `-'. Regenerate fonts.
-
-Tue Jul 21 11:39:26 1992 James Clark (jjc at jclark)
-
- * groff.c: Move to new groff subdirectory.
- * groff/Makefile: New file.
- * Makefile: Remove handling of groff.c. Add groff to SUBDIRS.
-
- * man/mdate.sh: Use ls -L if supported.
-
- * Consolidate all header files produced by gendef into lib/defs.h.
- * lib/macropath.c, lib/fontfile.c, lib/device.c: Include defs.h.
- Don't include path.h.
- * lib/Makefile (path.h): Don't generate.
- * troff/input.c: Include defs.h. Don't include config.h.
- * troff/Makefile (config.h): Don't generate.
- * refer/index.h: Don't include suffix.h.
- * refer/index.c: Include defs.h.
- * refer/indxbib.c: Include defs.h.
- * refer/refer.h, refer/lkbib.h: Don't include path.h. Include
- defs.h.
- * refer/Makefile (suffix.h, path.h): Don't generate.
- * groff.c: Don't include config.h. Include defs.h.
- * Makefile (config.h): Don't generate.
- (lib/defs.h): Generate.
- (topclean): Remove lib/defs.h.
-
-Mon Jul 20 10:12:57 1992 James Clark (jjc at jclark)
-
- * lib/malloc.c, lib/getpagesize.h: Deleted.
- * Makefile: Add COOKIE_BUG configuration option. Delete malloc
- related stuff.
- * lib/Makefile: Delete malloc-related stuff.
- * lib/new.c: Workaround COOKIE_BUG if necessary.
-
- * refer/lkbib.c, refer/indxbib.c: Don't include refer.h. Include
- needed header files directly.
- * refer/refer.h: Omit definition of DEFAULT_INDEX.
- * Makefile: Include definition of DEFAULT_INDEX in path.h.
-
-Sun Jul 19 10:19:22 1992 James Clark (jjc at jclark)
-
- * lib/font.c (FONT_COMMAND_HANDLER): Pass command name and single
- argument.
- * lib/font (font::load_desc, font::load): Don't split argument of
- unknown command.
- (font::handle_unknown_font_command): Change type.
- * ps/ps.c (ps_font::handle_unknown_font_command,
- handle_unknown_desc_command): Change type.
- * dvi/dvi.c (dvi_font::handle_unknown_font_command): Change type.
-
-Fri Jul 17 11:12:49 1992 James Clark (jjc at jclark)
-
- * lib/font.h (font::handle_unknown_font_command): Add file and
- line arguments.
- * lib/font.c (font::handle_unknown_font_command):
- * ps/ps.c (ps_font::handle_unknown_font_command):
- * dvi/dvi.c (dvi_font::handle_unknown_font_command): Add file and
- lineno arguments. Use _with_file_and_line functions for error
- reporting.
-
- * lib/fontfile.c (font::unknown_desc_command_handler): New static
- data member.
- * lib/font.c (font::set_unknown_desc_command_handler): New
- function.
- (font::load_desc): For unknown commands, call
- unknown_desc_command_handler if not null.
- * lib/font.h (class font): Declare them.
- (FONT_COMMAND_HANDLER): New typedef.
- * ps/ps.c (handle_unknown_desc_command): New function.
- (main): Set bflag if we had a -b option. Call
- font::set_unknown_desc_command_handler.
- (broken.h): Don't include.
- * ps/Makefile: No need for broken.h. Pass BROKEN_SPOOLER_FLAGS to
- submake
- * ps/devps/Makefile: Add `broken' command to DESC file using
- BROKEN_SPOOLER_FLAGS.
-
- * macros/tmac.e ([, ]): Add as synonyms for { and }.
-
- * macros/tmac.e ($p): Only exdent if \$3 > 0.
-
- * macros/tmac.e (@R, @S): New macros.
- Declare @, po, $0, $i, $p, df, so, fu, bt, *, ?a, ?b, ?C, ?e, ?H,
- ?I, ?n, ?o, ?R, ?s, ?T, ?W, ?w registers with @R.
- Declare $H, $[0-9], .. macros with @S.
- Declare |0, |1, |2, |3 strings with @S.
-
- * macros/tmac.e (@S): Rename to @U.
-
- * macros/tmac.e (@z): Define @b and bp as empty instead of
- deleting them,
-
- * macros/tmac.e (@m): Deleted.
- (@h): Don't call @m.
- (@z): Don't set @m trap.
-
- * macros/tmac.e ($h, $f): Define |z as empty string.
-
- * macros/tmac.e (@D): Rework to avoid unbalanced .el requests.
- (@q): Likewise.
-
- * macros/tmac.e (@h): Set ?H, ?C , ?s registers to 0 rather than
- removing them.
- ()f): Likewise for * register.
-
- * macros/tmac.e (sr): Don't ever scale the arguments. If the third
- argument is missing, don't change $R. Call sr with three
- arguments when initializing.
-
-Thu Jul 16 12:17:12 1992 James Clark (jjc at jclark)
-
- * macros/tmac.e (sr): New macro.
- Initialize $r and $R using sr.
-
- * macros/tmac.e (,): Delete \*(#[.
-
- * troff/env.c (set_tabs): Read the tab type even if the position
- is bad. Allow the position of the first tab stop to be negative.
-
-Wed Jul 15 13:14:37 1992 James Clark (jjc at jclark)
-
- * refer/dirnamemax.c: Use pathconf() if <unistd.h> defines
- _POSIX_VERSION.
- * refer/Makefile: Compile dirnamemax.c using -DHAVE_UNISTD_H
- rather than -DPATHCONF_MISSING.
- * Makefile: Get rid of PATHCONF_MISSING.
-
- * refer/map.c: New file.
- * refer/index.c: Interface to mmap through map.c. Rename map_size
- to map_len.
- * refer/Makefile: Handle map.c.
- * Makefile: Include -DHAVE_MMAP in OLDCFLAGS rather than CFLAGS.
-
-Tue Jul 14 14:15:20 1992 James Clark (jjc at jclark)
-
- * Makefile: RANLIB should be `true' if there is no ranlib.
- * lib/Makefile (libgroff.a): Simplify.
- * driver/Makefile (libdriver.a): Simplify.
-
- * Makefile: Change -DWAIT_COREDUMP_0200 to -DWCOREFLAG=0200.
- * groff.c (WCOREDUMP): Use WCOREFLAG. Define only if not already
- defined.
-
-Sat Jul 11 09:19:17 1992 James Clark (jjc at jclark)
-
- * troff/env.c (compare_ranges): Declare as extern "C".
-
- * troff/input.c (init_registers): Use `struct tm' instead of `tm'.
-
- * macros/tmac.s, macros/tmac.e: Change .nx /dev/null to .nx.
-
-Wed Jul 8 11:52:27 1992 James Clark (jjc at jclark)
-
- * pic/troff.c (troff_output::text): Merge in grops_output::text,
- but conditionalize use of \X based on \*(.T.
- (grops_output::*): Deleted.
- * pic/output.h: Delete declaration of make_grops_output.
- * pic/main.c (main): Ignore -p and -x. driver_extension_flag is 1
- by default. -n sets it to 0.
- (usage): Corresponding changes.
- * groff.c (main): Don't pass -x or -p to pic.
- * groff.sh: Likewise.
-
- * ps/ps.c (ps_printer::do_exec, ps_printer::do_file): Force ndefs
- to be non-zero.
-
- * ps/devps/afmtodit: Change calculation of asc_boundary and
- desc_boundary. Make these bounds inclusive.
- * ps/devps: Regenerate font files.
-
-Tue Jul 7 13:14:15 1992 James Clark (jjc at jclark)
-
- * macros/tmac.latin1: New file.
- * macros/tmac.tty-char: Use tmac.latin1.
- (tmac.tty-tr): Deleted.
- * macros/Makefile: Install tmac.latin1.
- * macros/tmac.dvi: Use tmac.latin1.
- * macros/troffrc: Translate \[char160] onto no-break space here.
- * macros/{tmac.dvi,tmac.ps,tmac.tty,tmac.X75}: Don't do it here.
-
-Mon Jul 6 11:06:52 1992 James Clark (jjc at jclark)
-
- * macros/tmac.Xps: Use `do' request.
-
- * macros/tmac.ps: Use `do' request.
-
- * macros/tmac.e (@C): Use `do' request.
-
- * macros/tmac.X, macros/tmac.Xps: Moved from xditview.
- * macros/Makefile: Install tmac.X*.
-
- * tty/tmac.tty, tty/tmac.tty-char: Move to macros.
- * tty/Makefile: Don't install tmac.tty*.
- * macros/Makefile: Install tmac.tty*.
-
- * dvi/tmac.dvi: Move to macros.
- * dvi/Makefile: Don't install tmac.dvi.
- * macros/Makefile: Install tmac.dvi.
-
- * ps/tmac.ps*: Move to macros.
- * ps/Makefile: Don't install tmac.ps*.
- * macros/Makefile: Install tmac.ps*.
-
- * eqn/box.c: Provide draw_lines parameter corresponding to -D
- option.
- * macros/eqnrc: Set draw_lines parameter based on device.
- * groff.c: Don't pass -D flag to eqn.
- * groff.sh: Likewise.
- * eqn/main.c: Warn about use of -D.
-
- * troff/input.c (process_startup_file): New function.
- (main): Call process_startup_file().
- * macros/troffrc: New file.
- * macros/Makefile: Install troffrc.
- * groff.c (main): Don't pass extra -m option to troff. For a
- pseudo device pass the name of the pseudo device to troff using
- -d.
- * groff.sh: Likewise.
- * groff.c (possible_command::prepend_arg): Deleted.
-
- * troff/input.c (do_request): New function.
- (init_input_requests): Bind "do" to do_request.
-
- * eqn/main.c (main): Instead of loading eqnchar from device directory,
- load eqnrc from macro directory.
- * macros/eqnrc: New file.
- * macros/Makefile: Install eqnrc.
- * ps/devps/eqnchar: Deleted.
- * ps/devps/Makefile: Don't install eqnchar.
- * dvi/devdvi/eqnchar: Deleted.
- * dvi/devdvi/Makefile: Don't install eqnchar.
- * groff.c (main): Pass -M to eqn. Don't pass -F to eqn. New
- variable optM.
-
- * lib/device.[ch]: New files.
- * lib/font.h (font::set_device_name, font::get_device_name):
- Deleted.
- * lib/fontfile.c: Use device.h.
- * lib/Makefile: Handle device.[ch]. Make paths.h define DEVICE.
- * troff/input.c: Delete definition of `device'.
- (main): Don't initialize device.
- * troff/troff.h: Include device.h rather than declaring device.
- * troff/Makefile: No need to handle DEVICE.
- * driver/input.c: Include device.h. Don't use
- font::{set,get}_device_name.
- * groff.c, Makefile: Rename device.h to config.h.
- * groff.c: Use library device variable.
- * eqn/main.c: Use library device variable.
- * eqn/Makefile: No need to handle DEVICE.
-
- * lib/searchpath.[ch]: New files.
- * lib/Makefile: Handle searchpath.[ch].
- * troff/input.c (open_file, init_dirs): Deleted.
- (macro_dirs): Deleted.
- (open_mac_file, macro_source): Use class search_path.
- (add_string, struct string_list): Move definition.
- (main): Change -M option to use macro_path. Delete call to
- init_dirs().
- * lib/fontfile.c (font::command_line_font_dir, font::open_file):
- Rewrite to use class search_path.
- * lib/font.h, lib/fontfile.c (font::cl_font_dirs): Deleted.
- * lib/Makefile: fontfile.c depends on searchpath.h.
- * lib/Makefile: Rename fontpath.h to paths.h. Make paths.h define
- MACROPATH.
- * lib/macropath.[ch]: New files.
- * troff/Makefile: No need to handle MACROPATH.
-
- * troff/input.c: Delete DUMP code.
- * lib/fontfile.c, lib/font.h: Delete
- font::forget_command_line_font_dirs.
-
- * troff/input.c (push_token): New function.
- (handle_first_page_transition): Use push_token().
- (process_input_stack): Change handling of a space at the beginning
- of the line.
-
-Sun Jul 5 17:11:09 1992 James Clark (jjc at jclark)
-
- * troff/input.c (font_dirs): Delete unused variable.
-
- * eqn/lex.c (do_set): Correct error messages.
-
-Sat Jul 4 10:20:55 1992 James Clark (jjc at jclark)
-
- * troff/input.c (do_define_string): Allow the string name to be
- followed immediately by a tab.
- (define_character): Likewise.
-
-Thu Jul 2 10:59:15 1992 James Clark (jjc at jclark)
-
- * ps/ps.c (ps_printer::draw): When drawing an arc, don't allow k to
- be negative.
-
- * troff/input.c (input_iterator::is_file): New virtual function.
- (file_iterator::is_file): New function.
- (input_stack::end_file): New function.
- (input_stack::next_file): Handle the situation where there is no
- file on the input stack correctly. Avoid making two passes over
- the input stack.
- (next_file): Make the filename optional; in this case call
- input_stack::end_file().
-
-Wed Jul 1 10:17:25 1992 James Clark (jjc at jclark)
-
- * dvi/tmac.dvi: Change the definitions of \(ul and _ so that they
- produce a real _ charater when the current font is CW and _
- otherwise.
-
- * lib/errarg.c (errarg::errarg(const char *)): Invert conditional
- expression to work around gcc 2.2 bug.
-
-Wed Jun 24 08:12:24 1992 James Clark (jjc at jclark)
-
- * eqn/main.c (main): Don't give an error if we can't find eqnchar.
-
- * troff/env.c (environment::add_padding): New function.
- (environment::add_char): Use add_padding().
- (environment::space): Likewise.
- (environment::wrap_up_field): Add some padding if there is none
- and there's no current tab.
- * troff/env.h: Declare environment::add_padding.
-
-Mon Jun 22 08:37:45 1992 James Clark (jjc@jclark)
-
- * pic/pic.y: undef fmod and rand before declaring them.
-
-Sun Jun 14 11:40:18 1992 James Clark (jjc@jclark)
-
- * troff/input.c (main): If the DESC file specifies a font name of
- 0, then leave the corresponding font position empty.
-
- * nroff.sh: New file.
- * Makefile (install.nobin): Install nroff.sh.
-
- * tty/devlatin1/R.proto: Add ao as synonym for de.
- * tty/tmac.tty-char: Define ao as o.
-
- * tty/dev{ascii,latin1}/R.proto: Add aq.
- * tty/tmac.tty-char: Delete definition of aq.
-
-Mon Jun 8 11:43:20 1992 James Clark (jjc@jclark)
-
- * troff/input.c (init_charset_table): Don't translate 0240.
- * ps/tmac.ps: Translate char160 to space.
- * dvi/tmac.dvi: Likewise.
- * tty/tmac.tty: Likewise.
-
-Sun Jun 7 10:52:35 1992 James Clark (jjc@jclark)
-
- * dvi/tmac.dvi: Add support for all Latin-1 characters.
-
- * macros/tmac.s: Delete definitions of \(rg, \(ah, \(ad, \(a-,
- \(ao, \(ac, \(ho, \(-D, \(Sd, \(TP, \(Tp, \(ss, \(AE, \(ae, \(OE,
- \(oe, \(r?, \(r!.
-
- * tty/tmac.tty-char: Add \(ah.
-
- * dvi/tmac.dvi: Add definitions of Tp, TP, Sd, -D, ho.
- No need to define \(FM and \(!/. Conditionalize all character
- definitions.
-
- * ps/devps/lgreekmap: Add +h, +f, +p.
-
- * ps/tmac.psnew: New file.
- * ps/Makefile: Install tmac.psnew.
-
- * troff/input.c (charinfo_to_node_list): Don't ever interpret
- character definitions in compatible mode.
-
- * troff/input.c (remove_character): New function.
- (init_input_requests): Bind remove_character to "rchar".
-
- * ps/tmac.psold: New file.
- * ps/Makefile: Install tmac.psold.
- * ps/tmac.ps: Load tmac.psold. Move definitions of ISO Latin-1
- characters into tmac.psold. Make these definitions unconditional.
-
- * tty/tmac.tty-char: Define \n(_C only if it is not already defined.
-
- * ps/tmac.ps: Don't define \('c and \('C.
-
- * ps/devps/textmap: Move Greek characters to...
- * ps/devps/symbolchars:
-
-Sat Jun 6 16:41:17 1992 James Clark (jjc@jclark)
-
- * ps/devps/text.enc: Add quotesingle.
- * ps/devps/textmap: Add +h, +f, +p, Fn, Bq, bq, aq, lz.
- * tty/tmac.tty-char: Likewise.
- * dvi/devdvi/texmi.map: Add +h, +f, +p.
- * dvi/devdvi/texi.map: Add Fn.
- * dvi/devdvi/msam.map: Add lz.
- * dvi/tmac.dvi: Handle Bq, bq, aq.
-
- * pic/lex.c (get_token): Recognize 'th.
- * pic/map.y: Allow `expr'th in contexts where ORDINAL was allowed.
-
-Fri Jun 5 11:20:46 1992 James Clark (jjc@jclark)
-
- * ps/devps/textmap: Move di, mu, +- to...
- * ps/devps/symbolchars:
-
- * macros/tmac.s (@XS): Don't call par@reset or fi.
- (XA): Call LP. Turn off adjustment. Reduce line length.
-
- * macros/tmac.s: Initially alias XS to LP.
- (XS): Rename to @XS.
- (cov*ab-init): Alias XS to @XS.
-
-Thu Jun 4 09:12:05 1992 James Clark (jjc@jclark)
-
- * troff/token.h: Delete TOKEN_CHAR_HEIGHT, TOKEN_CHAR_SLANT,
- TOKEN_FONT_NAME, TOKEN_FONT_POSITION, TOKEN_SIZE tokens.
- (token::is_size, token::changes_env): Deleted.
- * troff/number.c (parse_term): No need to process \s explicitly.
- Call tok.next() only after scale indicator has been processed.
- * troff/input.c (do_overstrike, do_bracket): No need to process \s,
- \f etc explicitly.
- (token::next): Handle \s, \f, \S, \H immediately rather than
- returning them as tokens.
- (token::operator==, token::description, token::add_to_node_list,
- token::process): Remove handling of deleted tokens.
-
- * troff/env.c (environment::add_char): When adding padding
- indicator character, call start_line() if necessary.
-
-Wed Jun 3 09:55:50 1992 James Clark (jjc@jclark)
-
- * ps/devps/afmtodit: Don't output 0 kerns.
-
- * ps/devps/afmtodit: Remove directory from name of encoding in
- font description file.
-
- * ps/devps/afmtodit: Improve error messages.
-
- * ps/devps/afmtodit: Allow DESC file to be specified with -d.
-
- * ps/devps/Makefile: Incorporate FontMakefile. Rework.
- * ps/devps/FontMakefile: Deleted.
- * ps/devps/afmname: New file.
-
- * ps/devps/symbol.sed: New file.
- * ps/devps/symbol.diff: Deleted.
- * ps/devps/FontMakefile: Generate symbol.afm using symbol.sed.
- Generate zapfdr.afm from zapfd.afm.
-
- * tty/tmac.tty (tty-char): Prefix definition with ".
-
- * macros/tmac.an (TP): Don't start a diversion if one has already
- been started.
-
- * tty/tmac.tty-char: Add Latin-1 characters.
-
- * tty/tmac.tty-char: Incorporate suggestions from Paul Eggert.
-
-Tue Jun 2 00:54:34 1992 James Clark (jjc@jclark)
-
- * tbl/table.c (table::allocate): Delete old_vline, old_entry.
- Move declaration of struct horizontal_span.
-
- * tbl/table.c (table::table): Initialize span_list.
- (table::~table): Delete span_list.
-
- * lib/ptable.h (PTABLE(T)::~PTABLE(T)): Delete v.
-
- * ps/devps/Makefile: Avoid dependency on GNU make.
-
- * ps/tmac.ps: Check that character does not already exist before
- defining it.
-
- * tty/tmac.tty: Add definitions of \(ff, \(!=, \(==, \(~=, \(sq,
- \(OE, \(oe, \(AE, \(ae, \(lh, \(rh. Delete definitions of \(en,
- \(ru, \(ul, \(br, \(bv, \(sl which are in the font description
- files.
-
- * tty/tmac.tty-char: New file.
- * tty/Makefile: Install tmac.tty-char.
- * tty/tmac.tty: Move definitions of \(ua, \(da, \(uA, \(dA into
- tmac.tty-char.
-
- * tty/tmac.tty: Fix definition of \(34.
-
- * tty/dev{ascii,latin1}/R.proto: Add ha and ti. Map
- bracket-drawing characters onto |. Add *o.
-
- * troff/env.c (environment::wrap_up_tab): Increment field_spaces
- only if current_field.
-
- * troff/dictionary.c (dictionary::lookup): Free old_table after
- rehashing.
-
-Mon Jun 1 10:15:22 1992 James Clark (jjc@jclark)
-
- * tty/dev{ascii,latin1}/R.proto: Add uppercase Greek characters
- whose glyphs are identical to glyphs of some Roman character.
-
- * tty/devlatin1/R.proto (bu): Deleted.
- * tty/devascii/R.proto (bu): Deleted.
- * tty/tmac.tty: Add definition of \(bu.
-
- * eqn/main.c (do_file): Pass FILE as argument.
- (main): Automatically load eqnchar. New options -F and -n.
- Pass do_file an opened FILE.
- * groff.c: Don't pass eqnchar to eqn. Pass -F options onto eqn.
- No need to include font.h.
- * groff.sh: Likewise. Don't need to use - for standard input.
- Prefix files with -- if first file starts with -.
-
- * macros/tmac.e: Conditionalize use of \$* on \n(.g.
-
- * troff/env.c (environment::possibly_break_line): Don't set line
- to 0 across call to output_line(). Don't call output_line() until
- after discarding nodes after break.
-
-Sun May 31 10:45:29 1992 James Clark (jjc@jclark)
-
- * request.h (macro::empty): Declare it.
- * input.c (macro::empty): New method.
- (interpolate_macro): Don't give a WARN_SPACE if the two-character
- macro is empty.
-
-Sat May 30 10:27:15 1992 James Clark (jjc@jclark)
-
- * troff/env.c (environment::start_field): Decrement space_total
- when a space is frozen.
-
-Fri May 22 14:34:38 1992 James Clark (jjc@jclark)
-
- * macros/tmac.an (R): Delete macro.
-
- * troff/input.c (get_copy, token::next): Support \# (like \" but
- newline is ignored).
-
- * troff/input.c (token::next): Fix error message in 'Y' case.
-
-Thu May 21 09:26:24 1992 James Clark (jjc@jclark)
-
- * eqn/delim.c (define_extensible_string): Recognize any prefix of
- a delimiter name.
-
-Fri May 15 10:20:41 1992 James Clark (jjc at jclark)
-
- * c++test.c: Include <osfcn.h>.
-
- * lib/strtol.c, lib/getcwd.c, ps/psbb.c: Declare errno in case
- <errno.h> doesn't.
-
-Fri May 8 09:37:19 1992 James Clark (jjc at jclark)
-
- * tbl/table.c (table::divide_span): Don't count column separation
- if expand was specified.
-
- * tbl/main.c (process_format): Don't ignore width specs in
- continued format. Give warning for changing equal widths or
- column separation in continued format.
- (process_data): Set column separation, minimum width, equal
- columns at end of table.
-
-Thu May 7 08:50:40 1992 James Clark (jjc at jclark)
-
- * troff/node.c (kern_pair_node::add_discretionary_hyphen,
- node::add_discretionary_hyphen): Use soft_hyphen_char.
- (set_soft_hyphen_char): New function.
- (init_node_requests): Bind to shc. Initialize soft_hyphen_char.
-
- * Makefile (c++tested): Give more helpful message if test fails.
-
-Tue May 5 10:58:39 1992 James Clark (jjc at jclark)
-
- * troff/input.c (init_charset_table): Translate 0240 to
- an unbreakable space.
-
- * troff/token.h (token::hyphen_indicator): New function.
- * troff/charinfo.h (TRANSLATE_HYPHEN_INDICATOR): New special
- translation.
- * troff/input.c (translate): Allow translation to \%.
- * troff/node.c (node::add_char): Handle
- TRANSLATE_HYPHEN_INDICATOR.
- (make_node): Don't allow TRANSLATE_HYPHEN_INDICATOR here.
-
- * troff/input.c (init_charset_table): Don't set BREAK_AFTER flag
- for \(hy.
-
- * tty/devlatin1/R.proto: \(hy and - should print as 055.
-
-Tue Apr 21 09:24:42 1992 James Clark (jjc at jclark)
-
- * groff.c (run_commands): If the last command gets a SIGPIPE send
- a SIGPIPE to all children than haven't yet terminated. When
- command terminates, set pid field to -1.
-
-Fri Apr 17 11:20:48 1992 James Clark (jjc at jclark)
-
- * groff.c (main): Pass an appropriate -filename option to gxditview.
-
-Thu Apr 16 15:11:40 1992 James Clark (jjc at jclark)
-
- * Makefile.bd (install): Remove existing program before copying.
-
- * Makefile, */Makefile, Makefile.bd, groff.sh, groff.c: Allow
- programs which have Unix counterparts to be installed with
- user-specified prefix.
-
- * troff/input.c (exit_troff): Don't check if exit_started.
- (exit_request): Don't call exit_troff if exit_started.
-
- * Makefile.bd (install.mm): Rename to install.dwbmm.
-
-Tue Apr 14 10:05:10 1992 James Clark (jjc at jclark)
-
- * driver/input.c (do_file): Add missing break for '#' case.
-
-Mon Apr 13 10:11:02 1992 James Clark (jjc at jclark)
-
- * troff/input.c (input_stack::clear): Clear past any boundaries and
- then add the boundaries back.
-
- * troff/input.c (exit_troff): Return immediately if already
- exiting.
-
- * macros/tmac.s (pg@end-text): New macro. Use pg@end-text for the
- end macro.
- (pg*end-page): If the text has ended and there are no more
- footnotes or keeps, exit.
-
- * macros/doc-ditroff (Lq, Rq): Define as \(lq and \(rq.
-
- * troff/input.c (init_charset_table): Make \(rq transparent by
- default.
-
- * macros/tmac.an: Define lq and rq strings.
-
- * macros/tmac.s (Q, U): Define as \(lq and \(rq.
-
-Sun Apr 12 12:54:37 1992 James Clark (jjc at jclark)
-
- * troff/env.c (environment::final_break): New function.
- (environment::newline): Set prev_line_interrupted to 2 if
- exit_started.
- * troff/env.h: Declare environment::final_break.
- * troff/input.c (exit_troff): Call environment::final_break()
- instead of environment::do_break().
-
- * macros/Makefile: Install man.local if $(MACRODIR)/man.local
- doesn't already exist.
- * macros/man.local: New file.
- * macros/tmac.an: Load man.local.
- * macros/man.ultrix: New file.
-
-Sat Apr 11 17:32:04 1992 James Clark (jjc at jclark)
-
- * troff/input.c (exit_groff): Rename to...
- (exit_troff): New function.
-
- * troff/div.c (exit_started, done_end_macro,
- seen_last_page_ejector): New global variables.
- (began_page_in_end_macro): New static variable.
- (exit_flag): Deleted.
- (top_level_diversion::top_level_diversion): Initialize
- last_page_count.
- (top_level_diversion): More elaborate test for whether
- cleanup_and_exit() should be called.
- Set began_page_in_end_macro if the end macro isn't yet finished.
- * troff/div.h (top_level_diversion::last_page_count): New data
- member.
- (top_level_diversion::set_last_page): New function.
- (exit_started, done_end_macro, seen_last_page_ejector): Declare.
- * troff/env.c (do_break): Zero prev_line_interrupted.
- * troff/input.c (exit_flag): Delete declaration.
- (LAST_PAGE_EJECTOR): New magic cookie.
- (token::next): Handle LAST_PAGE_EJECTOR.
- (exit_groff): Set exit_started and done_end_macro instead of
- exit_flag. Call top_level_diversion::set_last_page. Push a
- LAST_PAGE_EJECTOR instead of calling push_page_ejector(). Do
- another ejection after setting seen_last_page_ejector.
-
-Thu Apr 9 04:37:11 1992 James Clark (jjc at jclark)
-
- * etc/grog.sh, etc/grog.sh: Recognize -me sh macro.
-
- * macros/tmac.e (TH): Make sure there's room for the initial
- header.
-
- * macros/tmac.s (par@init): Make PD and DD at least \n(.V.
- Set FVS in points rather than units.
-
-Mon Apr 6 11:21:32 1992 James Clark (jjc at jclark)
-
- * troff/div.c (top_level_diversion::add_trap): Don't consider the
- position of empty slots.
-
-Fri Apr 3 10:46:45 1992 James Clark (jjc at jclark)
-
- * ps/devps/S: Fix height and depth of parenrightex.
- * ps/devps/symbol.diff: Regenerate.
-
-Sat Mar 28 21:17:52 1992 James Clark (jjc at jclark)
-
- * tmac.e (u): Do underlining as in -mgs.
-
-Fri Mar 27 09:23:44 1992 James Clark (jjc at jclark)
-
- * tty/tty.c (tty_printer::end_page): If overstriking is
- suppressed, still turn overstruck horizontal and vertical lines
- into +.
-
- * lib/new.c: Back out Feb 24 change; no longer needed with gcc
- 2.1.
-
- * refer/label.y (format_expr::evaluate): Avoid use of %0*d.
-
-Wed Mar 18 09:29:10 1992 James Clark (jjc at jclark)
-
- * Version 1.05 released.
-
-Tue Mar 17 16:50:45 1992 James Clark (jjc at jclark)
-
- * tty/tty.c: Instead of keeping an array of glyphs and then
- sorting it, keep a ordered linked list of glyphs for each line.
-
- * driver/driver.h: Include stddef.h.
-
- * tty/tty.c (compare_glyph):
- * refer/refer.c (rcompare):
- * troff/env.c (compare_ranges): Arguments of qsort comparison
- function should be const void *.
-
- * troff/number.c (parse_term):
- * dvi/dvi.c (draw_dvi_printer::draw): Avoid initialization in
- switch statement.
-
- * refer/label.y (consider_authors): Don't access variables
- constructed under a condition outside that condition: put braces
- round for statement containing declaration; redeclare use of same
- variable later.
-
- * pic/pic.y (text_expr): Delete production that allows
- parenthesised text_expr.
- (expr): Allow a conditional_expr to appear in parentheses.
- (conditional_expr): Rename to any_expr.
-
- * mm: Install new version 1.01 from jh.
-
- * lib/font.c (font::get_width): Cache scaled widths.
- (font::font): Initialize widths_cache.
- (font::~font): Destroy widths_cache.
- * lib/font.h: Add font::widths_cache. Declare font_widths_cache.
-
-Mon Mar 16 10:16:10 1992 James Clark (jjc at jclark)
-
- * c++test.c, c++test.ref: New files.
- * Makefile: Check that the C++ compiler works.
-
- * ps/tmac.pspic (PSPIC): Do a break.
-
- * ps/tmac.ps: Move definition of PSPIC into...
- * ps/tmac.pspic: New file.
- (PSPIC): Draw box around picture, but make it invisible to grops.
- * ps/tmac.ps: Load tmac.pspic.
- * ps/Makefile: Install tmac.pspic.
-
-Sun Mar 15 14:18:08 1992 James Clark (jjc at jclark)
-
- * lib/font.c (scale_round): If n is negative,
- subtract .5 before truncating floating point result.
-
- * lib/fontfile.c: Include <errno.h>.
-
-Tue Mar 10 14:17:03 1992 James Clark (jjc at jclark)
-
- * driver/input.c (get_char): Inline. Don't update current_lineno.
- Change callers to up date current_lineno if necessary.
- Use get_char() instead of getc(current_file).
-
-Sun Mar 8 18:05:28 1992 James Clark (jjc at jclark)
-
- * ps/tmac.ps: Fix up spacing of \(mo and \(nm.
-
-Fri Mar 6 19:38:58 1992 James Clark (jjc at jclark)
-
- * tty/tty.c (tmac.tty): Define \(rg as (R).
-
-Tue Mar 3 10:11:25 1992 James Clark (jjc at jclark)
-
- * lib/lib.h: New define a_delete.
- * Use a_delete instead of delete when deleting an array of objects
- without destructors.
-
- * lib/lib.h: Rename adelete to ad_delete.
- * Change uses of adelete.
-
-Mon Mar 2 12:41:05 1992 James Clark (jjc at jclark)
-
- * eqn/eqn.y: Include lib.h.
-
- * troff/node.c (grow_font_table): Delete old_font_table.
-
- * mm: Install new version from jh.
-
-Fri Feb 28 10:42:23 1992 James Clark (jjc at jclark)
-
- * tbl/table.h (format_type): Make global instead of local to class
- entry_format. Prefix enumerators with FORMAT_.
- * tbl/table.c, tbl/main.c: Corresponding changes.
- * refer/token.h (token_type): Make global. Prefix enumerators
- with TOKEN_.
- * refer/token.[ch]: Corresponding changes.
- * Makefile: Get rid of -DNO_NESTED_TYPES configuration option.
-
- * troff/div.c (node::set_vertical_size): Don't name argument.
-
-Thu Feb 27 10:29:19 1992 James Clark (jjc at jclark)
-
- * Makefile: New configuration option ARRAY_DELETE_NEEDS_SIZE.
- * lib/lib.h: Define adelete accordingly.
- * pic/object.c (graphic_object::graphic_object):
- * tbl/main.c (format::~format):
- * tbl/table.c (table::~table):
- * refer/ref.c (reference::~reference, reference::merge,
- reference::insert_field, reference::delete_field): Use adelete.
-
- * Makefile: Change NESTED_TYPES to NO_NESTED_TYPES.
- * refer/token.h:
- * tbl/table.h: Corresponding changes.
-
- * common.c (common_output::dashed_arc, common_output::dotted_arc):
- Ensure total_angle is positive.
-
-Wed Feb 26 08:49:26 1992 James Clark (jjc at jclark)
-
- * refer/ref.c (reference::merge, reference::insert_field,
- reference::delete_field): Avoid delete[0].
-
- * refer/token.c (init_special_chars): Move calls to cmupper
- outside calls to init_two_char_letter to work around bug in gcc
- 2.0.
-
-Mon Feb 24 14:20:00 1992 James Clark (jjc at jclark)
-
- * lib/new.c (operator new): Use __builtin_new for g++.
-
- * pic/object.c (graphic_object::~graphic_object): Don't use
- delete [] on 0.
-
- * pic/object.c (output::compute_scale): Initialize max_width and
- max_height.
-
-Sat Feb 15 09:55:20 1992 James Clark (jjc at jclark)
-
- * troff/input.c (write_request): Call fflush.
-
- * troff/node.h (class composite_node): Move declaration to node.c
- * troff/input.c (charinfo_to_node): Rename to ...
- (charinfo_to_node_list): Return node list rather than composite
- node.
- * troff/node.c (make_composite_node): New function.
- (make_node, add_char): Call make_composite_node instead of
- charinfo_to_node.
- (class composite_node): Add a tfont * member. Delete font_size
- member.
- (composite_node::composite_node, composite_node::copy,
- composite_node::size): Corresponding changes.
- (composite_node::tprint): Provide constant spacing, emboldening
- and track kerning as specified in tfont.
- (composite_node::width): Change width calculation accordingly.
- * troff/env.h (environment::composite): New member.
- (environment::is_composite, environment::set_composite): New
- functions.
- * troff/env.c (environment::environment): Initialize composite.
- * troff/input.c (charinfo_to_node): Call
- environment::set_composite.
- * troff/node.c (make_composite_node, make_glyph_node): Use the
- plain version of the tfont if the environment is composite.
-
- * troff/node.c (font_info::get_space_width): Additional argument
- giving space_size. Handle constant space correctly. Scale by
- space_size unless constant spaced.
- (env_sentence_space_width): New function.
- * troff/node.h: Declare it.
- * troff/env.h (environment::get_space_size,
- environment::get_sentence_space_size,
- environment::get_narrow_space_width,
- environment::get_half_narrow_space_width): Make inline.
- (environment::get_space_width): Make inline. Just call
- env_space_width.
- * troff/env.c: Delete definitions for funtions made inline.
- (environment::space_newline, environment::space): Use
- env_sentence_space_width(). Don't scale by space_size.
- * troff/node.h: Move declarations of env*space_width() functions
- into env.h.
-
-Sat Feb 8 09:30:22 1992 James Clark (jjc at jclark)
-
- * macros/tmac.s (PS): Don't try to set negative indent.
-
-Thu Feb 6 09:00:35 1992 James Clark (jjc at jclark)
-
- * pic/pic.y: Fix min function.
-
-Tue Jan 28 07:52:29 1992 James Clark (jjc at jclark)
-
- * man/mdate.sh: Clear LANGUAGE.
-
-Sun Jan 19 13:02:41 1992 James Clark (jjc at jclark)
-
- * pic/pic.y, pic/lex.c: Rename COMMAND token to COMMAND_LINE.
- * pic/lex.c: New COMMAND keyword.
- * pic/pic.y (print_args, print_arg): New rules.
- (placeless_element): Use print_args for PRINT.
- New COMMAND element.
-
-Tue Jan 7 13:14:31 1992 James Clark (jjc at jclark)
-
- * troff/input.c (terminal): Handle missing argument correctly.
-
- * pic/pic.y (text_expr): New rule.
-
- * pic/pic.y: Implement := operator.
-
-Sun Jan 5 10:23:02 1992 James Clark (jjc at jclark)
-
- * etc/grog.pl, etc/grog.sh: Distinguish old and new versions of
- mdoc.
-
-Sat Jan 4 14:42:26 1992 James Clark (jjc at jclark)
-
- * ps/devps/dingbatsrmap: Include this in the distribution.
-
- * macros/tmac.doc: Replace with new version from 2nd Networking
- Release. Fix loading of doc-* files.
- * macros/{doc-common,doc-ditroff,doc-nroff,doc-syms}: New files.
- * macros/tmac.doc.old: New file. Apply fixes that had been
- applied to old tmac.doc.
- * macros/tmac.andoc: Check that we're running under groff.
- * macros/Makefile: Rework.
-
-Fri Jan 3 13:27:51 1992 James Clark (jjc at jclark)
-
- * tbl/table.h (format_type):
- * refer/token.h (token_type): If NESTED_TYPES is defined, use
- typedef to make these types visible at file scope.
- * Makefile: Add NESTED_TYPES configuration option.
-
- * troff/div.c (mark): At the top level use the value of
- nl_reg_contents rather than the current vertical position.
-
-Thu Jan 2 10:34:51 1992 James Clark (jjc at jclark)
-
- * tty/tty.c: Implement \D for horizontal or vertical lines.
- (tty_printer::set_char): Use vec_used+2 as serial number.
- Don't allow size of vector to exceed USHRT_MAX-2.
- Split off part into...
- (tty_printer::add_char): New function.
- (tty_printer::draw): New function.
- (compare_glyph): Handle equal serial numbers.
- (tty_printer::end_page): Handle overstruck characters from \D.
- (main, usage): Implement -d option.
-
-Mon Dec 23 10:37:51 1991 James Clark (jjc at jclark)
-
- * tbl/main.c (process_format):
- * eqn/text.c (split_text):
- * troff/input.c (token::next): Use inner block for declarations
- with initializers in switch statement.
-
-Mon Dec 16 20:52:03 1991 James Clark (jjc at jclark)
-
- * pic/common.c (common_output::dash_line): Cope with zero-length
- lines.
-
-Sun Nov 17 12:04:08 1991 James Clark (jjc at jclark)
-
- * Version 1.04 released.
-
-Wed Nov 13 05:27:21 1991 James Clark (jjc at jclark)
-
- * macros/tmac.an (TH): Define a macro an-init to define variables
- based on command line arguments.
- (an-header): Call it.
-
-Sun Nov 3 12:07:34 1991 James Clark (jjc at jclark)
-
- * Makefile (install.mm): Rename to install.dwbmm.
-
- * Makefile: Integrate mm.
- * mm: New directory.
-
-Wed Oct 30 10:11:34 1991 James Clark (jjc at jclark)
-
- * refer/dirnamemax.c: If PATHCONF_MISSING is defined, include
- <sys/types.h>.
-
- * pic/troff.c (troff_output::simple_spline,
- troff_output::simple_polygon): Rename variable `v' to `d' to avoid
- shadowing parameter.
-
- * lib/tmpfile.c (xtmpfile): Declare dir as const char *.
-
- * lib/ptable.h: Add explicit casts when converting from unsigned
- long to unsigned.
-
- * dvi/devdvi/{SA,SB,msam.map,msbm.map}: New files.
- * dvi/devdvi/Makefile: Install SA, SB.
-
- * refer/indxbib.c: Add declaration of mktemp.
-
- * refer/lookbib.c: Add declaration of isatty.
-
-Fri Oct 25 09:00:17 1991 James Clark (jjc at jclark)
-
- * pic/lex.c (interpolate_macro_with_args): While collecting
- arguments, keep track of whether we're in a string.
-
-Wed Oct 23 08:42:48 1991 James Clark (jjc at jclark)
-
- * ps/tmac.ps (PSPIC): Do the .sp after the \X, and move the \X
- down with \v, so as to avoid problems with top of page trap
- setting no space mode.
-
-Tue Oct 22 17:38:49 1991 James Clark (jjc at jclark)
-
- * eqn/lex.c (get_delimited_text): Allow tab before macro body.
-
-Tue Oct 15 17:24:53 1991 James Clark (jjc at jclark)
-
- * ps/psrm.c (ps_get_line): Fix bug when lines longer than 255.
- Improve error message.
-
-Fri Oct 11 11:09:38 1991 James Clark (jjc at jclark)
-
- * ps/psrm.c (print_ps_string): Don't pass negative numbers to
- printf("%03o");
-
-Wed Oct 9 17:50:14 1991 James Clark (jjc at jclark)
-
- * groff.c (possible_command::execp): Always use _exit() after a
- failed exec.
-
- * Makefile: Add HAVE_UNION_WAIT, HAVE_PID_T, WAIT_COREDUMP_0200,
- NO_SYS_WAIT_H configuration options.
- * groff.c: Use these options. Use POSIX-style macros to extract
- fields from the status returned by wait().
-
-Fri Oct 4 12:12:27 1991 James Clark (jjc at jclark)
-
- * tbl/table.c (table::compute_separation_factor): Allow the
- separation factor to drop to 0.
-
-Tue Oct 1 18:12:38 1991 James Clark (jjc at jclark)
-
- * refer/search.c: Include <errno.h>.
-
-Sun Sep 29 08:40:57 1991 James Clark (jjc at jclark)
-
- * pic/pic.y (YYDEBUG): Don't define for Borland C++.
-
- * lib/lib.h: #ifdef out declarations of itoa and iftoa for Borland
- C++.
-
- * pic/lex.c (input_stack::bol): Move definition out of class body.
-
- * pic/main.c: On MSDOS munge argv[0].
-
- * lib/ptable.h: Define name2 as _Paste2 for Borland C++.
-
- * lib/ptable.c (hash_string): Use unsigned long rather than
- unsigned.
- (next_ptable_size): Use unsigned rather than int. Give an error
- message if we've hit the largest table size.
- * lib/ptable.c: Corresponding changes. Also use unsigneds for the
- table size.
-
- * pic/object.h (object_spec): Make flags unsigned long. Declare
- flags as const unisgned long rather than as enums.
-
- * pic/output.c: Deleted.
-
- * pic/troff.c (troff_output::simple_ellipse): Remove spurious %.
-
- * tbl/table.c (simple_entry::note_double_vrule_on_{left,right}):
- Add additional argument.
- (line_entry::note_double_vrule_on_{left,right}): Set value of
- douvle_vrule_on_{right,left} flag according to argument.
- (simple_line_entry::simple_print,
- simple_line_entry::double_line_print): If adjacent to double vrule
- on a corner extend rather than shorten the rule by half the double
- vrule sep.
-
- * troff/number.c (parse_term): In checking for overflow, handle the
- case where the current horizontal position is negative.
-
-Thu Sep 12 08:26:09 1991 James Clark (jjc at jclark)
-
- * pic/object.c (draw_arrow): Check for object having zero length.
-
-Wed Sep 11 10:32:38 1991 James Clark (jjc at jclark)
-
- * eqn/main.c (do_file): Split off inline equation handling into...
- (inline_equation): New function. Search for starting delimiter
- using...
- (delim_search): New function. Don't recognize a delimiter that
- occurs in the name of an escape sequence, number register, string
- etc.
-
-Tue Sep 10 04:01:11 1991 James Clark (jjc at jclark)
-
- * eqn/delim.c (delim_box::compute_metrics): Don't call
- define_extensible_string if left is 0.
- (delim_box::output): Don't print the left delimiter if left is 0.
- (delim_box::debug_print): Check for left == 0 before calling printf.
-
-Fri Aug 23 13:02:30 1991 James Clark (jjc at jclark)
-
- * troff/Makefile (majorminor.c): Include only digits in
- minor_version.
-
-Thu Aug 22 09:35:37 1991 James Clark (jjc at jclark)
-
- * refer/dirnamemax.c: new file.
- * refer/genlimits.c: Deleted.
- * refer/indxbib.c (main): Use dir_name_max() instead of NAME_MAX.
- Don't check path length.
- * refer/Makefile: Add dir_name_max.o; delete genlimits.
- * Makefile: Add PATHCONF_MISSING option.
-
- * refer/indxbib.c (get_cwd): New function.
- (main): Use get_cwd().
- * lib/getcwd.c: New file.
- * Makefile: Delete -DHAVE_GETWD. Include GETCWD variable. Pass
- GETCWD in SUBFLAGS.
- * lib/Makefile: Compile getcwd.o.
-
- * ps/tmac.psatk (psatk-defs): Define showpage after pushing
- userdict.
-
- * refer/indxbib.c (main): Check success of mktemp.
-
- * lib/tmpfile.c: New file.
- * lib/Makefile: Add tmpfile.c.
- * lib/lib.h: Declare xtmpfile(); include <stdio.h>.
- * ps/ps.h: Delete declaration of mktemp().
- * ps/ps.c (ps_printer::ps_printer): Use xtmpfile().
- * refer/refer.c (divert_to_temporary_file): Use xtmpfile().
- * driver/driver.h: No need now to include errno.h.
-
- * everywhere: Set errno to 0 before calling fopen().
-
- * eqn/eqn.h, etc/soelim.c, driver/driver.h, etc/addftinfo.c,
- dvi/tfmtodit.c, groff.c, refer/index.c, refer/linear.c,
- refer/lookbib.c, refer/refer.h, ps/psbb.c: Include <errno.h>.
-
-Mon Aug 19 10:52:18 1991 James Clark (jjc at jclark)
-
- * troff/env.h (translate_space_to_dummy): Declare it.
- * troff/env.c (environment::space_newline, environment::space):
- If translate_space_to_dummy is set then make the width of spaces 0.
- * troff/input.c (translate): If the second character of a
- translation is a space, translate to unbreakable space. If the
- first character is a space, set or clear translate_space_to_dummy
- according to whether the second character is \&. Weird!
-
-Tue Jul 30 10:03:56 1991 James Clark (jjc at jclark)
-
- * groff.c (run_commands): Don't use non-zero exit code because a
- command gets SIGPIPE.
-
- * groff.c, groff.sh: Use -mXps with -TXps.
-
- * ps/ps.c (ps_printer::special): Move call to flush_sbuf() into...
- (ps_printer::do_exec, ps_printer::do_file, ps_printer::do_def,
- ps_printer::do_mdef, ps_printer::do_import): Call flush_sbuf().
- (ps_printer::special): New specials invis and endinvis.
- (ps_printer::do_invis, ps_printer::do_endinvis): New functions.
- (ps_printer::set_char, ps_printer::draw): Return if invis_count>0.
- (ps_printer::end_page): Check that invis_count == 0.
- (ps_printer::invis_count): New member.
- (ps_printer::ps_printer): Initialize invis_count to 0.
-
- * troff/env.c (environment::hyphenate_line): Hyphenation
- indicator at beginning of word inhibits splitting after -, \(em
- etc.
-
- * pic/pic.y (element): Allow another element to follow } without
- any intervening separator.
-
-Mon Jul 22 12:27:37 1991 James Clark (jjc at jclark)
-
- * pic/lex.c (get_delimited): Allow tabs before delimiter.
-
-Wed Jul 17 10:59:08 1991 James Clark (jjc at jclark)
-
- * groff.c: Get rid of HAVE_UNION_WAIT stuff. Instead suppress
- declaration of wait() in header files.
- * Makefile: Get rid of -DHAVE_UNION_WAIT.
-
- * tbl/table.c (alphabetic_text_entry::add_tab): New function.
-
- * lib/lib.h: Declare return type of strerror as char *.
-
- * man/Makefile: Add g flag to sed substitutions.
- * Makefile (shgroff, bindist): Likewise.
-
-Sun Jul 14 11:57:02 1991 James Clark (jjc at jclark)
-
- * ps/ps.c (ps_printer::do_import): Move push of userdict into...
- * ps/devps/prologue (PBEGIN): Define showpage after pushing
- userdict.
-
-Sat Jul 13 20:53:04 1991 James Clark (jjc at jclark)
-
- * ps/devps/prologue (PBEGIN): Zap any definition of showpage in
- userdict.
-
-Fri Jul 12 07:10:09 1991 James Clark (jjc at jclark)
-
- * man/mdate.sh: Handle the fact that BSD ls -l does not print the
- group.
-
-Sun Jul 7 08:00:23 1991 James Clark (jjc at jclark)
-
- * troff/input.c (define_number_reg): If currently undefined,
- don't define it if the argument is an invalid expression.
-
- * Makefile: Ignore return value of `if' commands without `else'
- parts.
-
- * Makefile: Split up CPPDEFINES into a series of separate
- configuration options.
-
- * troff/input.c (init_registers): Use time_t instead of long
- unless LONG_FOR_TIME_T is defined. Use returned result rather
- than passing pointer.
- * Makefile: Document LONG_FOR_TIME_T as a CPPDEFINE.
-
- * lib/Makefile (fontpath.h): Use gendef.
-
-Thu Jul 4 09:48:05 1991 James Clark (jjc at jclark)
-
- * troff/input.c (input_iterator::shift): Delete argument name.
- * troff/node.c (suppress_output_file::really_begin_page,
- suppress_output_file::really_transparent_char, node::ascii_print,
- node::tprint): Delete names of unused arguments.
-
-Wed Jul 3 17:34:57 1991 James Clark (jjc at jclark)
-
- * refer/label.y (string): Pass $4 to command_error.
-
-Tue Jul 2 15:06:01 1991 James Clark (jjc at jclark)
-
- * Version 1.03 released.
-
-Sat Jun 29 08:14:01 1991 James Clark (jjc at jclark)
-
- * Makefile: Pass definition of SHELL in SUBFLAGS.
-
- * gendef: New file.
- * Makefile, eqn/Makefile, refer/Makefile, troff/Makefile,
- ps/Makefile: Use gendef to construct header files that are
- constructed from the Makefile.
-
- * macros/Makefile: make all should build stripped version of tmac.e.
-
- * refer/Makefile (clean): Remove y.output.
-
-Fri Jun 28 09:44:36 1991 James Clark (jjc at jclark)
-
- * ps/pfbtops.c (main): Add -v option which prints out a version
- number.
- * ps/Makefile (pfbtops): Link with libgroff.a.
-
-Fri Jun 21 07:43:23 1991 James Clark (jjc at jclark)
-
- * refer/search.h (linear_searcher::get_nkeys): Delete declaration.
- * refer/linear.c (linear_searcher::get_nkeys): Delete definition.
-
- * refer/lkbib.c (main): Always terminate reference with blank
- line.
- * refer/lookbib.c (main): Likewise.
-
- * refer/linear.c (file_buffer::load): Check that the file is not a
- binary file.
-
- * refer/Makefile (genlimits): Possibly add -DHAVE_SYS_DIR_H.
- (genlimits.c): Include <sys/dir.h> if HAVE_SYS_DIR_H is defined.
- Delete second inclusion of <sys/param.h>.
-
-Tue Jun 18 01:32:26 1991 James Clark (jjc at jclark)
-
- * troff/token.h (token::special): Deleted.
-
- * tbl/main.c (process_format): Rework so that opt->tab_char is
- recognized only when appropriate.
-
- * ps/Makefile (clean): Remove pfbtops.
-
-Sun Jun 16 09:37:19 1991 James Clark (jjc at jclark)
-
- * lib/font.c (text_file::next): Don't return if we have got a
- blank line.
-
-Fri Jun 14 09:52:26 1991 James Clark (jjc at jclark)
-
- * refer/refer.c (store_reference): Get hash code from old_table[i]
- when rehashing the table.
-
-Thu Jun 13 01:26:43 1991 James Clark (jjc at jclark)
-
- * eqn/box.c (box::top_level): Save size and prev size using \R and
- restore it afterwards. Set the size to the size at the beginning
- of the line.
- * eqn/pbox.h: Declare SAVED_INLINE_PREV_SIZE_REG,
- SAVED_INLINE_SIZE_REG, and SAVED_SIZE_REG.
-
- * refer/Makefile (limits.h): Use ./genlimits.
-
-Wed Jun 12 16:05:34 1991 James Clark (jjc at jclark)
-
- * refer/index.c: Delete declarations of stat() and fstat().
-
-Tue Jun 11 14:52:49 1991 James Clark (jjc at jclark)
-
- * tty/tmac.tty: Add character definitions for \(>= and \(<=.
-
-Mon Jun 10 22:49:48 1991 James Clark (jjc at jclark)
-
- * etc/grog.sh, etc/grog.pl: Change regex for .PS.
-
-Fri Jun 7 09:13:06 1991 James Clark (jjc at jclark)
-
- * troff/input.c (token::get_char): Handle \e.
-
- * refer/linear.c: Delete declarations of fstat() and stat().
-
-Wed Jun 5 09:11:59 1991 James Clark (jjc at jclark)
-
- * troff/node.c, troff/env.c, troff/input.c, Makefile: Remove
- OP_DELETE_BROKEN stuff, since we now have a fix for g++.
-
-Mon Jun 3 13:41:32 1991 James Clark (jjc at jclark)
-
- * troff/input.c (do_define_macro): Improve error handling for end
- of file while defining macro.
-
-Sun Jun 2 10:20:24 1991 James Clark (jjc at jclark)
-
- * eqn/box.h: Fix declaration of set_gsize.
- * eqn/box.c (set_gsize): Make argument const char *.
- (gsize): Declare as char *.
- * eqn/main.c (main): Don't convert gsize to int.
- * eqn/lex.c (do_gsize): Pass char * to set_gsize.
-
- * Version 1.02 released.
-
-Sat Jun 1 12:19:46 1991 James Clark (jjc at jclark)
-
- * macros/tmac.andoc: New file.
- * macros/Makefile: Install tmac.andoc.
-
- * troff/node.c, troff/env.c, troff/input.c: Conditionalize use of
- operator new and delete on OP_DELETE_BROKEN not being defined.
- * Makefile: Mention OP_DELETE_BROKEN.
-
-Mon May 27 13:49:07 1991 James Clark (jjc at jclark)
-
- * Makefile (bindist): Pass SUBFLAGS.
-
-Sun May 26 14:13:22 1991 James Clark (jjc at jclark)
-
- * Makefile, groff.c: Pass definitions to groff.c via device.h.
-
- * tty/tty.c (tty_font::load_tty_font): Avoid shadowing
- parameter.
-
- * ps/Makefile, ps.c: Pass BROKEN_SPOOLER_FLAGS via broken.h.
-
- * ps/ps.h, ps/psrm.c: Make comment_table and
- header_comment_table local to resource_manager::process_file.
-
- * groff.sh: With -TXps pass -printCommand option to gxditview.
-
- * groff.c (possible_command::print): Implement using
- append_arg_to_string.
-
- * xditview: Merge in new implementation with own ChangeLog.
-
-Sat May 25 18:33:20 1991 James Clark (jjc at jclark)
-
- * groff.c (main): Implement PRINT_OPTION.
- (append_arg_to_string): New command.
- (device_table): Set PRINT_OPTION flag for Xps.
-
-Fri May 24 09:48:58 1991 James Clark (jjc at jclark)
-
- * troff/groff.h: Rename to troff.h.
-
- * pic/lex.c (lookup_keyword, docmp): New functions.
- (get_token): Use new lookup_keyword.
- Don't include key.h.
- * pic/key.[ch], pic/pic.gperf: Deleted.
- * pic/Makefile: Remove gperf stuff.
-
- * pic/Makefile, pic/output.h: Move definition of TEX_SUPPORT
- into output.h.
- * pic/tex.c: Move include of pic.h before test of TEX_SUPPORT.
-
- * troff/Makefile, troff/node.c: Move definition of
- STORE_WIDTH into node.c.
-
- * etc/grog.pl, etc/grog.sh: Support -mdoc.
-
-Thu May 23 12:30:49 1991 James Clark (jjc at jclark)
-
- * dvi/devdvi/texr.map, dvi.devdvi/texi.map,
- dvi/devdvi/texb.map: Add lq and rq.
- dvi/devdvi: Regenerate fonts.
- * ps/devps/textmap: Add lq and rq.
- * ps/devps: Regenerate fonts.
- * tty/devascii/R.proto, tty/devlatin1/R.proto: Add lq and rq.
- * macros/tmac.e: Define \*(lq and \*(rq to be \(lq and \(rq.
-
- * pic/object.c (position_rectangle): When checking radius
- cope with possiblity that width or height is negative.
- (box_object::box_object): Have separate xrad and yrad with
- signs matching signs of dim components.
- (box_object::{north,south}_{east,west}): Use xrad and yrad.
- (box_object::print): With rounded boxes use absolute values
- for dim and rad arguments.
-
- * lib/Makefile, lib/fontfile.o: Pass definition of FONTPATH
- in fontpath.h.
-
- * eqn/Makefile, eqn/main.c: Pass definition of DEVICE in device.h.
-
- * various files: Add explicit destructors to keep Saber CC +d
- happy.
-
-Wed May 22 11:37:11 1991 James Clark (jjc at jclark)
-
- * eqn/box.c (box::top_level): Restore fonts correctly after
- font changes in line containing inline equation. Also
- restore previous font as well as current font.
- * eqn/pbox.h: Define necessary string and register names.
-
- * troff/input.c (token::next): Case 'R' calls do_register.
- (do_register): New function.
-
-Tue May 21 11:28:23 1991 James Clark (jjc at jclark)
-
- * groff.c, groff.sh: Support Xps device. Allow each device
- to have a pseudo_name and a real_name.
-
- * groff.c (run_commands): Don't print `Broken pipe' messages.
-
- * ps/pfbtops.c: New file.
- * ps/Makefile: Add pfbtops.
-
- * troff/number.c (parse_term): Improved error message.
-
-Mon May 20 11:22:14 1991 James Clark (jjc at jclark)
-
- * groff.c, groff.sh, etc/grog.sh, etc/grog.pl: Support grefer.
-
- * Makefile: Integrate refer.
- * refer: New directory.
- * man/grefer.man, man/glookbib.man, man/gindxbib.man,
- man/lkbib.man: New files.
- * man/Makefile: Support refer man pages.
-
- * lib/lib.h: Declare is_prime.
- * lib/prime.c: New file.
-
- * troff/input.c (macro_source): New function.
- (init_input_requests): Bind "mso" to macro_source.
-
- * troff/env.c (environment::possibly_break_line): Maintain
- pointer to pointer to node to be split in ndp so as to avoid
- using address of freed node.
-
- * troff/env.c (environment::hyphenate_line): Maintain pointer to
- pointer to first node to be hyphenated in startp so as to
- avoid using address of freed node.
-
- * troff/env.c (class trie, class hyphen_trie): Make the
- elements of the trie be of type char not unsigned char.
- Declare arguments to be const char* instead of unsigned char *.
-
- * troff/env.c (hyphenate): Initialize hbuf[0].
-
- * troff/input.c (set_string): Declare p to be char * and cast
- *p to unsigned char when necessary.
-
- * troff/input.c (do_define_macro): Declare s to be const
- char*. Cast element to unisgned char when necessary, Declare
- d to be an int. Handle EOF better.
-
- * troff/Makefile, troff/input.c: Different scheme for passing
- definitions of MACROPATH, HYPHENFILE and DEVICE.
-
-Tue May 14 13:41:36 1991 James Clark (jjc at jclark)
-
- * tty/devascii/R.proto: Delete entry for em.
- * tty/devlatin1/R.proto: Likewise.
-
-Sat May 11 11:13:28 1991 James Clark (jjc at jclark)
-
- * troff/input.c (translate): Stop when we get a space. Treat eof
- like newline.
-
- * macros/tmac.an (IP): Only pass quoted argument to TP when \n(.$>1.
-
-Wed Apr 24 19:24:33 1991 James Clark (jjc at jclark)
-
- * tbl/main.c (process_format): A font name following a `f'
- modifier that starts with a digit can be only one character long.
- Also deal with EOF on the second character of the font name.
-
-Wed Apr 17 11:23:43 1991 James Clark (jjc at jclark)
-
- * troff/input.c (token::next): Turn \~ into an
- unbreakable_space_node.
- * troff/node.c (unbreakable_space_node): New class.
- * troff/node.h: Declare it.
-
-Tue Apr 16 10:47:12 1991 James Clark (jjc at jclark)
-
- * dvi/dvi.c (dvi_printer::set_char): Make code an int. Check that
- it's >= 0, before outputting it as a single byte.
-
-Mon Apr 15 11:20:23 1991 James Clark (jjc at jclark)
-
- * lib/font.c: Make font_char_metric::code an int.
- (font::get_code): Change return type to int.
- (font::load): Allow code to be arbitrary integer.
- * lib/font.h (font::get_code): Change return type to int.
- (font::number_to_index): Change argument type to int.
- * troff/input.c (token::next): In case 'N', allow any value.
- Store value in token::val.
- (token::operator==): For TOKEN_NUMBERED_CHAR test equality of val.
- (token::get_char, token::add_to_node_list, token::process): Get
- number from val.
- (charinfo::set_number): Change argument to int.
- (charinfo::get_number): Require that NUMBERED flag be set.
- (get_charinfo_by_number): Store numbered characters not between 0
- and 255 in a dictionary.
- * troff/charinfo.h (get_charinfo_by_number): Change argument type
- to int.
- (charinfo::number): Change type to int.
- (charinfo::set_number): Change type of set_number to int.
- * troff/node.c (troff_output_file::put_char_width,
- troff_output_file::put_char): Test whether character is numbered
- using charinfo::numbered().
- * driver/printer.c (printer::set_numbered_char): Allow arbitrary
- values of num.
- * lib/nametoindex.c: New implementation to cope with arbitrary
- number characters.
-
- * troff/input.c (token::operator==): Test val for
- TOKEN_CHAR_HEIGHT, TOKEN_CHAR_SLANT, TOKEN_FONT_POSITION, and
- TOKEN_SIZE.
-
- * man/Makefile: Add definiton of BROKEN_SPOOLER_FLAGS.
- (.man.n): sed out @BROKEN_SPOOLER_FLAGS@.
-
-Sun Apr 14 12:57:00 1991 James Clark (jjc at jclark)
-
- * ps/devps/zapfdr.ps: Don't copy UniqueID. Avoid use of newdict
- variable.
-
- * all Makefiles: rm targets of cp and >.
-
- * xditview/xtotroff.c (MapFont): Unlink troff_name before opening
- it.
-
- * eqn/lex.c (def_table): Add dollar.
-
-Sat Apr 13 13:02:44 1991 James Clark (jjc at jclark)
-
- * troff/input.c (do_width): Push back newline before closing delim
- like do_bracket.
-
-Fri Apr 12 15:16:03 1991 James Clark (jjc at jclark)
-
- * groff.c (possible_command::prepend_arg): New function.
- (main): Prepend device -m option.
- * groff.sh: Put device -m options before command-line options.
-
-Tue Apr 9 10:24:43 1991 James Clark (jjc at jclark)
-
- * macros/tmac.an (IP): Quote argument to TP.
-
- * ps/ps.c (main): New option -b, which sets...
- (broken_flags): New variable.
- (ps_printer::~ps_printer): Incorporate the setup section in the
- prolog if (broken_flags & NO_SETUP_SECTION).
- (ps_printer::begin_page): Generate {Begin,End}PageSetup comments.
- (ps_printer::merge_download_fonts, ps_printer::merge_import_fonts,
- ps_printer::merge_ps_fonts, ps_printer::print_font_comment,
- ps_printer::print_needed_font_comment,
- ps_printer::print_supplied_font_comment,
- ps_printer::print_include_font_comments,
- ps_printer::lookup_doc_font, ps_printer::download_fonts,
- ps_printer::read_download_file, read_document_fonts, add_font,
- skip_line, parse_fonts_arg, document_font::document_font,
- document_font::~document_font, document_font::download,
- ps_output::include_file): Deleted.
- (ps_printer::~ps_printer): Generate %%EOF. Generate %!PS-Adobe-3.0
- rather than %!PS-Adobe-2.0. Make calls to
- resource_manager::need_font for each font that we used. Replace
- calls to merge_ps_fonts, merge_download_fonts, print_font_comment,
- print_supplied_font_comment, print_needed_font_comment by call to
- resource_manager::print_header_comments. Output %%Orientation
- comment. Output %%Requirements: numcopies comment if ncopies > 1.
- Don't output the prolog directly. Instead call
- resource_manager::output_prolog. Only define #copies when ncopies
- > 1. Delete calls to print_include_font_comments and
- download_fonts. Add call to resource_manager::document_setup.
- (ps_printer::do_file): Call resource_manager::import_file instead
- of including it ourselves.
- (ps_printer::do_import): Likewise. Also don't call
- merge_import_fonts. Push userdict on the dictionary stack before
- and pop it afterwards.
- Move declaration of ps_output into ps.h.
- * ps/psrm.c: New file implementing resource_manager class.
- * ps/ps.h: New file declaring ps_output and resource_manager
- classes.
- * ps/devps/zapfdr.ps:
- * ps/devps/symbolsl.ps:
- * ps/devps/prologue: Use 3.0 conventions.
- * ps/Makefile: Pass definition of BROKEN_SPOOLER_FLAGS in DEFINES.
- Add default definition of BROKEN_SPOOLER_FLAGS.
- * Makefile: New variable BROKEN_SPOOLER_FLAGS. Add
- BROKEN_SPOOLER_FLAGS to SUBFLAGS.
-
-Mon Apr 8 09:26:54 1991 James Clark (jjc at jclark)
-
- * etc/grog.pl: New file.
- * Makefile (GROG): New variable.
- Add GROG to SUBFLAGS.
- * etc/Makefile (GROG): New variable.
- (install.nobin): Install $(GROG) rather than grog.sh.
-
-Thu Apr 4 11:36:45 1991 James Clark (jjc at jclark)
-
- * eqn/special.c (special_box::compute_metrics): Make the input and
- output strings the same. Get the new height and depth from the
- predefined height and depth registers. Also make subscript kern
- and skew available.
- (special_box::compute_subscript_kern, special_box::compute_skew):
- New functions.
-
- * eqn/box.c (pointer_box::compute_skew,
- simple_box::compute_metrics, box::top_level)
- * eqn/text.c (prime_box::compute_metrics,
- prime_box::comput_subscript_kern)
- * eqn/limit.c (limit_box::compute_metrics):
- * eqn/delim.c (build_extensible, delim_box::compute_metrics):
- * eqn/sqrt.c (sqrt_box::compute_metrics): Protect possibly
- negative numbers in `nr' requests with a leading 0.
-
-Wed Apr 3 15:58:23 1991 James Clark (jjc at jclark)
-
- * eqn/special.c: New file.
- * eqn/eqn.y: Declare token SPECIAL. Make it right associative.
- Add new rule for simple.
- * eqn/lex.c (token_table): Add SPECIAL.
- * eqn/box.h: Declare make_special_box.
- * eqn/Makefile: Add special.[co].
-
-Sat Mar 30 10:57:53 1991 James Clark (jjc at jclark)
-
- * ps/devps/prologue: Possibly set packing to true while defining.
- Create grops dictionary here. Initialize local variables before
- defining procedures.
- (PICTURE): Rename to PBEGIN. Also do save, noop showpage, count
- the dictionary stack. Set strokeadjust and overprint to false if
- the relevant operators are defined.
- (PEND): New procedure.
- * ps/ps.c (ps_printer::~ps_printer): In the prolog just include
- prologue. Do everything else in the setup section.
- (ps_printer::do_import): Just call PBEGIN and PEND around the
- picture. Also push userdict before, and pop it afterwards.
-
-Wed Mar 27 07:59:50 1991 James Clark (jjc at jclark)
-
- * troff/node.c (bracket_node::tprint): Brackets were being printed
- 1m too low.
-
- * macros/tmac.an (SH, SS): Set fill mode.
-
-Tue Mar 26 07:46:31 1991 James Clark (jjc at jclark)
-
- * troff/div.c (top_level_diversion::begin_page): Set
- high_water_mark to 0.
-
-Fri Mar 22 09:19:46 1991 James Clark (jjc at jclark)
-
- * man/mdate.sh: New file.
- * man/mdate.c: Deleted.
- * man/Makefile: Use mdate.sh instead of mdate.
- (mdate): Deleted.
-
- * eqn/lex.c (do_gsize): Supply missing argument to error message.
-
-Tue Mar 19 11:06:50 1991 James Clark (jjc at jclark)
-
- * man/mdate.c: New file.
- * man/*.man: Replace modification date by @MDATE@.
- * man/Makefile (.man.n): Replace @MDATE@ by `mdate $<`.
- (mdate): New target.
-
- * lib/font.c (text_file::next): Deal with arbitrarily long lines.
- Remove illegal input characters.
-
-Mon Mar 18 08:32:25 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (pg*start-col): Do .ns *after* running the hooks.
-
-Sat Mar 16 03:52:25 1991 James Clark (jjc at jclark)
-
- * troff/div.c (begin_page): Change behaviour when
- !first_page_begun and !break_flag.
-
- * troff/input.c (do_name_test): Return 0 if argument is empty.
-
- * troff/input.c (read_long_escape_name): Require closing ] to be
- at same input level as opening [.
-
- * troff/input.c (read_increment_and_escape_name): New function.
- (get_copy, process_input_stack): Use this for \n.
-
-Fri Mar 15 00:31:48 1991 James Clark (jjc at jclark)
-
- * troff/div.c (top_level_diversion::begin_page): Ignore the
- current value of page_number if !first_page_begun.
-
- * groff.c (main): Fix declaration of buf.
-
- * troff/input.c (do_name_test): New function.
- (token::next): Implement \A.
- (token::next): Implement \e by turning it into a TOKEN_ESCAPE.
- (token::description, token::add_to_node_list, token::process):
- Handle TOKEN_ESCAPE.
- * troff/token.h: New token TOKEN_ESCAPE.
-
-Thu Mar 14 10:22:26 1991 James Clark (jjc at jclark)
-
- * pic/main.c (do_picture): Allow space before and after filename
- following `<'. Check that the filename is not empty.
-
-Wed Mar 13 12:49:40 1991 James Clark (jjc at jclark)
-
- * Version 1.01 released.
-
- * dvi/devdvi/CompileFonts: Add cm*ss10 fonts.
-
- * dvi/tmac.dvi: ftr HR to H.
-
- * macros/tmac.e: Round up computation of $r.
-
- * xditview/tmac.X: Don't give up completely in compatibility mode.
- Use \n(.s instead of \n[.s].
-
- * dvi/tmac.dvi: Don't give up completely in compatibility mode.
- Use \(ci instead of \[ci]. Use \n(.s instead of \n[.s].
- Add u to factors inside \s[...]. Rename frac to dvi-frac.
- Translate \(FM onto \[prime] and \(!/ onto \[slashnot]; use these
- short names in the char definitions.
-
- * ps/tmac.ps: Don't give up completely in compatibility mode.
- Fix the fraction definitions to use \n(.s and \(f/. Add an extra
- quote in front of \n(.s. Add u to factors inside \s[...].
-
-Mon Mar 11 12:01:20 1991 James Clark (jjc at jclark)
-
- * tty/tmac.tty: Call the nroff request.
-
- * macros/tmac.e ((x, )x): Better definitions that work properly
- in a diversion.
- (@0, @1): Helper macros for (x.
-
- * macros/tmac.e ($s, hl): Use \l rather than \D.
-
- * tty/tmac.tty: Make it work better in compatibility mode.
- (pchar): Rename to tty-char.
-
- * macros/tmac.e (@E): New macro.
- (r, i, b, rb, bi): Use @E.
-
- * macros/tmac.e (@F): Don't use (;...) syntax.
-
- * macros/tmac.e: Remove mention of \*(||/revisions. Mention that
- it was modified for groff.
-
- * macros/tmac.e: Make sure \n(ps and \n(es are >= \n(.V.
-
- * macros/tmac.e (<., .>): Removed.
- ([., .]): If \n(.V>=1v, use [] instead of superscripting.
-
- * macros/tmac.e: Remove check that groff is being used.
-
- * macros/tmac.e (@C): Change families only if using groff; turn
- compatibility mode off while changing familes. Save compatibility
- mode before changing families and restore it afterwards.
-
- * macros/tmac.e (@h): Remove test for offset + line length.
-
- * macros/tmac.e (sorry): Rename to @S. Use \$1 instead of \$0
- (lo, th, ac): Define to call @S instead of using als.
-
- * macros/tmac.e: Make $r and $R now contain \n(.v*100/\n(.sp, ie
- the ratio of the vertical spacing to the point size in units
- expressed as a percentage. Use these instead of $10r and $10R,
- Delete $10r and $10R.
-
- * lib/font.c (font::load): In default computation of space_width,
- divide by sizescale. Use scale_round.
-
- * macros/tmac.an (TP): Don't call `nf'.
- (an-do-tag): Don't call `fi'.
-
-Sun Mar 10 09:52:35 1991 James Clark (jjc at jclark)
-
- * troff/input.c (process_input_stack): Handle the case where
- spaces at the beginning of an input line are followed by a
- newline.
-
-Thu Mar 7 20:18:07 1991 James Clark (jjc at jclark)
-
- * groff.c (device_table): Add PIC_X_OPTION for dvi device.
- * groff.sh: Use pic -x with the dvi device.
-
- * dvi/devdvi/FontMakefile (H): Don't use -s.
-
- * dvi/devdvi/HI, dvi/devdvi/HB: New files.
- * dvi/devdvi/Makefile: Add HI and HB to FONTS.
- * dvi/devdvi/FontMakefile: Add rules for HI and HB. Include these
- in FONTS.
-
-Mon Mar 4 13:20:14 1991 James Clark (jjc at jclark)
-
- * ps/psfig.diff: New file.
- * ps/tmac.psfig: New file.
-
-Sat Mar 2 00:15:09 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (]=, ref*do-tl, ref*bib-print): Deleted.
- (]-): Don't call ref*do-tl.
-
- * macros/tmac.s (ref*end-print): Use XP if [F not defined.
-
- * macros/tmac.s (ref*normal-print): Call FS rather than fn@do-FS.
- (fn@do-FS): Rename to fn*do-FS.
-
- * troff/input.c (transparent_translate): New function.
- (process_input_stack): Apply transparent_translate before calling
- diversion::transparent_output(unsigned char).
-
-Wed Feb 27 00:13:25 1991 James Clark (jjc at jclark)
-
- * troff/input.c (do_define_macro): Define the macro before calling
- skip_line.
-
- * xditview/Makefile: Add DEVICES variable. Change install target
- to use this.
-
-Tue Feb 26 10:46:22 1991 James Clark (jjc at jclark)
-
- * groff.c (run_commands): Handle the possibility that there are
- child processes other than those forked by us.
-
-Sun Feb 24 21:32:30 1991 James Clark (jjc at jclark)
-
- * lib/string.c (string::append): New function.
- * lib/stringclass.h: Declare it.
-
-Thu Feb 21 11:49:26 1991 James Clark (jjc at jclark)
-
- * eqn/main.c (main): New option -N which sets
- no_newline_in_delim_flag.
- (do_file): If no_newline_in_delim_flag is set don't allow newlines
- in delimiters.
- * groff.c (main): Pass -N on to eqn.
- (help, synopsis): Mention -N.
- * groff.sh: Implement -N.
-
-Wed Feb 20 15:16:10 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (]=, ref*bib-print, ref*do-tl): New macros.
- (]-): Call ref*do-tl if ref*need-tl is non-zero.
- (XP): Allow as initializer.
-
-Tue Feb 19 14:09:06 1991 James Clark (jjc at jclark)
-
- * troff/env.c (environment::wrap_up_field): If field_spaces are
- non-zero and we have a current_tab, subtract padding from
- tab_distance. If this makes tab_distance <= 0, use the next tab
- stop instead. If there isn't any next tab or it's a left tab,
- wrap up the current tab.
- (environment::start_field): Initialize tab_precedes_field.
- (environment::wrap_up_tab): If there's a current field, update
- pre_field_width, field_distance and tab_precedes_field.
- * troff/env.h (environment::tab_precedes_field): New member.
-
-Fri Feb 15 01:24:00 1991 James Clark (jjc at jclark)
-
- * ps/ps.c (ps_printer::do_file): New function.
- (ps_printer::special): Bind to `file' special.
- (ps_printer::do_exec): Set ndefined_styles to 0.
-
-Sat Feb 9 03:03:04 1991 James Clark (jjc at jclark)
-
- * eqn/text.c (split_text): Grok \* and similar escapes sequences.
- Avoid stripping first character from the start of unrecognized
- escapes. Use lex_error instead of error to report errors.
- * eqn/lex.c (get_token): Rework handling of escapes.
- (lex_error): Move declaration into...
- * eqn/eqn.h.
-
- * xditview/xditview.c (main): Make -page option work.
-
- * Makefile: Correct comment about -DBROKEN_SPOOLER and pageview.
-
-Wed Feb 6 12:28:43 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (B2): Correct size of box.
-
-Tue Feb 5 00:37:35 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (B2): Postpone drawing the box until in the
- top-level diversion.
-
- * tty/tmac.tty: Add font translations for C, CR, CW.
-
- * groff.c (synopsis, help): Document -i.
- * groff.sh: Implement -i.
-
- * macros/tmac.s (@NH): Put a `.' after multi-part numbers.
- Simplify the construction of SN.
-
- * troff/number.c (parse_term): Give `|' a higher precedence.
- * tbl/table.c (numeric_text_entry::simple_print): Parenthesise
- accordingly.
-
- * macros/tmac.s (B2): Use par@finish instead of par@reset.
-
-Mon Feb 4 12:36:09 1991 James Clark (jjc at jclark)
-
- * lib/string.c (string::move): New function.
- * lib/stringclass.h: Declare it.
-
-Sat Feb 2 16:02:16 1991 James Clark (jjc at jclark)
-
- * troff/env.c (distribute_space): Add optional argument
- `force_forward'.
- (environment::wrap_up_field): Call distribute_space with
- `force_forward' argument of 1.
-
-Fri Feb 1 19:36:33 1991 James Clark (jjc at jclark)
-
- * lib/string.c, lib/stringclass.h (string::operator+=(char)):
- Inline it. Move reallocation into...
- (string::grow1): New function.
- * pic/Makefile, tbl/Makefile, eqn/Makefile, ps/Makefile: Redo
- dependencies to include library header files.
- * lib/Makefile: Make string.c and lf.c depend on stringclass.h.
-
-Thu Jan 31 15:02:27 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (@NH): Use the same number registers than -ms does
- for the heading level counters. Use the same string that -ms does
- for the number for this heading.
-
-Wed Jan 30 14:25:40 1991 James Clark (jjc at jclark)
-
- * lib/new.c (operator new): Cast result of malloc to char *.
-
- * troff/input.c (spring_trap, lookup_request): Add assert that nm
- is not null.
-
-Tue Jan 29 18:08:05 1991 James Clark (jjc at jclark)
-
- * groff.c (main): Support -i.
-
-Sun Jan 27 13:23:17 1991 James Clark (jjc at jclark)
-
- * pic/pic.h: Include <osfcn.h>.
-
- * ps/ps.c: Add declaration of mktemp.
-
- * Makefile: Add -DHAVE_UNION_WAIT option for CPPDEFINES.
- * groff.c: If HAVE_UNION_WAIT is defined, declare wait()'s
- argument as union wait *.
- (run_commands): If HAVE_UNION_WAIT is defined cast wait()'s
- argument to union wait *.
-
-Sat Jan 26 12:04:52 1991 James Clark (jjc at jclark)
-
- * tty/tmac.tty: Add definition of \(co.
-
- * pic/object.c (make_arc): Only increase radius when radius
- strictly less than d.
- (arc_object::update_bounding_box): May need to add 4.0 to end_quad
- more than once.
-
- * troff/env.c (environment::environment(symbol),
- environment::environment(const environment *)): Initialize
- input_trap_count.
-
-Sat Jan 19 08:18:35 1991 James Clark (jjc at jclark)
-
- * tbl/main.c (main): Add exit(0).
-
- * ps/ps.c (ps_printer::~ps_printer): Use fseek instead of rewind.
-
- * pic/main.c (main):
- * eqn/main.c (main):
- * tbl/main.c (main):
- * etc/soelim.c (main):
- * driver/printer.c (printer::~printer):
- * troff/node.c (real_output_file::~real_output_file,
- real_output_file::flush): Check for errors on stdout.
-
- * most files: Add 1991 to copyright notice.
-
- * macros/tmac.s: Don't test \n(.x and \n(.y.
-
- * troff/input.c (token::next): Rename `escape_char' label to
- `handle_escape_char' and `normal_char' label to
- `handle_normal_char'.
-
-Thu Jan 17 15:46:35 1991 James Clark (jjc at jclark)
-
- * groff.c (main, synopsis, help): Support -a option.
- * groff.sh: Likewise. Also eliminate Zflag variable by adding -z
- to trflags while parsing options.
-
-Tue Jan 15 13:07:27 1991 James Clark (jjc at jclark)
-
- * troff/number.c (parse_term): With `m', `M' and `n' scale
- indicators, convert scale factor to hunits before scaling.
-
-Mon Jan 14 12:39:12 1991 James Clark (jjc at jclark)
-
- * lib/font.c (scale_round): Better test for overflow when n is
- negative.
-
-Thu Jan 10 11:10:56 1991 James Clark (jjc at jclark)
-
- * tbl/main.c (process_format): Add second argument of type
- options*. Change callers. Allow opt->tab_char as well as '\t'
- between format items.
-
-Mon Jan 7 12:30:18 1991 James Clark (jjc at jclark)
-
- * macros/tmac.an (PD): With no arguments, make sure register PD is
- at least \n[.V].
- (TH): Call PD with no argument, instead of setting register PD
- directly.
-
-Sun Jan 6 11:18:39 1991 James Clark (jjc at jclark)
-
- * Version 1.00 released.
-
-Sat Jan 5 08:44:30 1991 James Clark (jjc at jclark)
-
- * ps/tmac.ps, xditview/tmac.X: Add font translation of C to CR.
-
- * dvi/devdvi/DESC: Mount CW instead of CR.
-
- * dvi/tmac.dvi: Add definition of \(tm.
-
- * dvi/devdvi/texsy.map: Add lh, and rh.
- * dvi/devdvi/texex.map: Add lt, rt, lb, rb, lk, rk.
- * dvi/devdvi/texmi.map: Add *o. Regenerate fonts.
-
- * dvi/devdvi/FontMakefile: Generate H from cmss10.
- * dvi/devdvi/Makefile: Install H.
- * dvi/devdvi/H: New file.
-
-Fri Jan 4 15:04:57 1991 James Clark (jjc at jclark)
-
- * troff/env.c (vertical_spacing): Don't allow vertical spacing to
- be 0.
-
-Thu Jan 3 13:41:19 1991 James Clark (jjc at jclark)
-
- * macros/tmac.s (@EN): Add \n(.V to the argument to ds@need.
-
- * macros/tmac.pic (PS): Avoid attempting to set negative indent.
-
- * macros/tmac.s (@EN): Handle the case where the equation is empty
- but the label is not.
-
-Wed Jan 2 10:31:44 1991 James Clark (jjc at jclark)
-
- * troff/groff.h: New warning category WARN_SPACE.
- * troff/input.c: Add WARN_SPACE to DEFAULT_WARNING_MASK. Add
- WARN_SPACE to warning_table.
- (interpolate_macro): Give a warning of type WARN_SPACE if the name
- is longer than two characters and is not defined, but the first
- two characters do make a defined name.
-
- * PROBLEMS: New file.
-
- * CHANGES: New file.
- * README-0.6, README-1.00: Deleted.
-
- * groff.c, groff.sh: Add X75-12 and X100-12 devices.
- * xditview/devX75/Makefile: Make devX75-12.
- * xditview/devX100/Makefile: Make devX100-12.
-
- * xditview/devX100/eqnchar, xditview/devX75/eqnchar,
- dvi/devdvi/eqnchar, ps/devps/eqnchar: Remove use of \R.
-
-Tue Jan 1 19:24:01 1991 James Clark (jjc at jclark)
-
- * README-0.7: Rename to README-1.00.
-
- * macros/tmac.pic: New file.
- * macros/Makefile (install.nobin): Install tmac.pic.
-
-Mon Dec 31 10:40:53 1990 James Clark (jjc at jclark)
-
- * troff/env.c (hyphen_word): Correct the test for whether the
- token is a hyphen. Reset npos to 0.
-
- * macros/tmac.s (par@sup-start, par@sup-end): New implementations.
-
-Sun Dec 30 15:53:13 1990 James Clark (jjc at jclark)
-
- * macros/tmac.s (ds*common-end): Call par*reset.
- (PE): Likewise.
- (par@reset-indent): Deleted.
-
- * macros/tmac.s (@IP): Divert the label.
-
-Sat Dec 29 14:33:32 1990 James Clark (jjc at jclark)
-
- * xditview/draw.c (setGC): Use a line width of .1m rather than
- .04m by default; round rather than truncate value.
-
- * tbl/table.c (class empty_entry): New class.
- (empty_entry::empty_entry, empty_entry::line_type): New functions.
- (table::add_entry): Represent empty entries by objects of type
- empty_entry.
- (table_entry::line_type): Return -1.
- (table::determine_row_type): Ignore entries with line_type 0.
- Treat type -1 as non-lines.
-
-Fri Dec 28 15:04:41 1990 James Clark (jjc at jclark)
-
- * ps/devps/textmap, xditview/libXdvi/DviChar.c, tty/devlatin1/R.proto,
- macros/tmac.s: Rename \(-d to \(Sd.
-
-Thu Dec 27 12:35:47 1990 James Clark (jjc at jclark)
-
- * ps/devps/textmap: Add `sd', `/_' and `3d' characters.
- * xditview/libXdvi/DviChar.c: Likewise.
- * dvi/devdvi/texsy.map: Add `<<', `>>'.
-
-Wed Dec 26 13:33:23 1990 James Clark (jjc at jclark)
-
- * troff/div.c (top_level_diversion::begin_page): Call
- init_output() if the_output is 0.
-
-Sat Dec 22 12:35:29 1990 James Clark (jjc at jclark)
-
- * troff/input.c: Replace ESCAPE_E by ESCAPE_e and ESCAPE_C by
- ESCAPE_c.
- (get_copy): Turn \E into ESCAPE_E.
- (token::process, asciify): Handle ESCAPE_E.
-
- * macros/tmac.s (ds*common-end, par@reset): Add `.rj 0'.
- (RD): New macro.
- (DS): Implement `.DS R'.
-
-Fri Dec 21 11:41:53 1990 James Clark (jjc at jclark)
-
- * macros/tmac.s (FS): New macro.
-
- * macros/tmac.s (fn@do-FS): Use @LP instead of LP.
-
- * macros/tmac.s (cov*tl-init): Remove after first execution
- instead of aliasing to @nop. Call top of page macro explicitly
- instead of setting trap; call @init first. Set pg@top as top of
- page macro.
- (cov*auto-init): Deleted. Set cov*tl-init instead of
- cov*auto-init as top of page trap.
- (TL, LP): Do a break instead of calling cov*tl-init.
- (cov*print): With RP format but no TL, alias FS and FE to @FS and
- @FE; in this case also give a warning and always start another
- page. No need to set pg@top here.
- (cov*tl-init): Rename to cov*first-page-init.
-
- * macros/tmac.s (RP): Do `.pn 0'.
- (cov*tl-init): With RP format don't do `.pn 0'.
-
- * macros/tmac.s (pg@cs-top): Set no space mode.
-
- * macros/tmac.s (par@TL, par@AU, par@AI): New macros.
- (cov*ab-init): Alias TL, AU and AI to these.
-
-Thu Dec 20 10:10:50 1990 James Clark (jjc at jclark)
-
- * macros/tmac.s (@EQ): Move the space before the equation into @EN
- (@EN): Do nothing unless \n[dl] is > 0.
-
-Tue Dec 18 12:20:47 1990 James Clark (jjc at jclark)
-
- * pic/object.c (ellipse_object::radius): New function.
-
- * VERSION: Change version to 0.7.
-
- * tbl/table.c (block_entry::do_divert): Declare return type as
- void.
- (block_entry::divert, alphabetic_block_entry::divert): Return 1.
-
-Mon Dec 17 12:30:34 1990 James Clark (jjc at jclark)
-
- * troff/column.c: New file.
- * troff/Makefile: Corresponding changes.
-
- * troff/hvunits.c (scale(vunits, vunits, vunits)): New function.
- Friend of vunits.
-
- * troff/div.c (top_level_diversion::space): If the space causes
- the first-page transition and springs a trap, truncate the space
- to 0.
-
-Fri Dec 14 12:30:02 1990 James Clark (jjc at jclark)
-
- * ps/ps.c (ps_printer::do_import): Add a `clear' after including
- the document.
-
- * pic/troff.c (troff_output::line_thickness,
- troff_output::set_fill): Do a horizontal motion to compensate for
- the width of the \D escape sequence.
-
-Thu Dec 13 10:17:14 1990 James Clark (jjc at jclark)
-
- * xditview/tmac.X: Reinstate definition of \(rn, but only for X100
- (not X75).
-
- * eqn/sqrt.c (sqrt_box::compute_metrics): Supply missing argument
- to printf.
-
- * tbl/table.c (simple_entry::simply_print): Don't declare as pure.
- Supply empty definition.
- (text_entry::simple_print, simple_text_entry::simple_print):
- Delete declarations.
- (table::add_entry): Represent empty entries by objects of type
- `simple_entry'.
-
-Wed Dec 12 08:50:48 1990 James Clark (jjc at jclark)
-
- * troff/Makefile: Remove -DHYPHEN_CONTROL from DEFINES.
-
- * tbl/table.c (left_text_entry::add_tab): New function.
-
- * macros/tmac.s: Make @RT an alias for par@reset. Make RT
- initialize like LP.
-
-Mon Dec 10 11:19:55 1990 James Clark (jjc at jclark)
-
- * troff/env.c (environment::start_field): Give an error message if
- there is no next tab.
-
-Sun Dec 9 11:46:40 1990 James Clark (jjc at jclark)
-
- * troff/env.c (hyphenate): Skip initial elements with zero
- hyphenation code.
-
- * macros/tmac.s (par@init): Keep VS in points rather than units.
-
-Sat Dec 8 23:00:27 1990 James Clark (jjc at jclark)
-
- * pic/main.c (main): Implement `-c' option.
- * pic/output.h: Declare make_tpic_output().
- * pic/tex.c (tex_output::set_pen_size): Make it virtual and
- protected.
- (tpic_output): New class.
- (tpic_output::tpic_output, tpic_output::set_pen_size,
- tpic_output::command, make_tpic_output): New functions.
-
-Fri Dec 7 11:57:41 1990 James Clark (jjc at jclark)
-
- * tbl/main.c (main): Call `.ab' if \n(.g is false. Define TS/TE
- if they're not already defined.
- * tbl/table.c (init_output): Don't test \n(.g.
-
- * troff/input.c (do_if_request): Delete `g' condition. Recognize
- `d', `r' and `c' conditions even in compatibility mode.
-
-Tue Dec 4 09:13:47 1990 James Clark (jjc at jclark)
-
- * ps/tmac.ps (ps-bb): Protect against negative numbers in bounding
- box.
-
-Mon Dec 3 07:18:26 1990 James Clark (jjc at jclark)
-
- * troff/env.h (environment::prev_line_interrupted): New member.
- (environment::get_prev_line_interrupted): New function.
- * troff/env.c (environment::newline): Set prev_line_interrupted.
- (environment::environment(const environment *),
- environment::environment(symbol)): Initialize
- prev_line_interrupted.
- * troff/input.c (process_input_stack): Don't give special
- treatment to space and newline at the beginning of the line if the
- previous line was interrupted.
-
-Sat Dec 1 15:48:37 1990 James Clark (jjc at jclark)
-
- * eqn/eqn.y: Disallow PRIME by itself.
- * eqn/lex.c (token_table): Bind `opprime' instead of `prime' to
- PRIME.
- (def_table): Remove definition of '. Define prime to be `.
-
- * eqn/eqn.y: Split off part of rule `script' into a new rule
- `nonsup'.
-
-Fri Nov 30 10:23:44 1990 James Clark (jjc at jclark)
-
- * macros/tmac.s ({, }): New string aliases.
-
-Thu Nov 29 11:34:40 1990 James Clark (jjc at jclark)
-
- * README-0.7: New file.
-
-Wed Nov 28 10:09:57 1990 James Clark (jjc at jclark)
-
- * macros/tmac.s: New file.
- * man/groff_ms.man: New file.
- * Makefile: Add definition of TMAC_S. Pass TMAC_S in SUBFLAGS.
- * Makefile.bd: Similarily.
- * man/Makefile: Add groff_ms.n to MAN7PAGES. Replace @TMAC_S@. Add
- definition of TMAC_S.
- * macros/Makefile: Add definition of TMAC_S. Install tmac.s.
- * macros/TODO: New file.
-
-Sat Nov 24 20:04:54 1990 James Clark (jjc at jclark)
-
- * troff/env.c (right_justify): New function.
- (init_env_requests): Bind this to request "rj".
- (center_lines): Set right_justify_lines to 0. If we get a bad
- integer, center 1 line.
- (environment::environment(symbol), environment::environment(const
- environment *)): Initialize right_justify_lines.
- (environment::get_right_justify_lines): New function.
- (init_env_requests): Bind this to number_register ".rj".
-
- * troff/env.c (environment::choose_breakpoint): Implement
- hyphenation_margin and hyphenation_space.
- (environment::get_hyphenation_space,
- environment::get_hyphenation_margin): New functions.
- (init_env_requests): Bind these to .hys and .hym.
- (hyphenation_space_request, hyphenation_margin_request): New
- functions
- (init_env_requests): Bind these to hys and hym.
- (environment::environment(symbol), environment::environment(const
- environment *)): Initialize hyphenation_margin and
- hyphenation_space.
- * troff/env.h: Corresponding changes to class environment.
-
-Fri Nov 23 09:08:16 1990 James Clark (jjc at jclark)
-
- * troff/div.c (blank_line): Always do a break.
-
- * eqn/box.c (do_text): Turn off escapes while appending text to
- string.
-
-Thu Nov 22 10:58:59 1990 James Clark (jjc at jclark)
-
- * troff/input.c (while_break_request, while_continue_request): New
- functions.
- (init_input_requests): Bind these to "break" and "continue".
- (while_depth, while_break_flag): New variables.
- (while_request): Update while_depth. Break out of loop if
- while_break_flag is set.
-
-Wed Nov 21 10:54:40 1990 James Clark (jjc at jclark)
-
- * tbl/table.c (init_span_reg): Initialize span_width_reg to \n(.H
- rather than 0.
-
-Mon Nov 19 00:45:03 1990 James Clark (jjc at jclark)
-
- * Makefile: Include -DBROKEN_SPOOLER by default. Expand comment.
-
- * stringify: New file.
- * Makefile (groff.o): Use stringify.
-
- * xditview/tmac.X: Remove definition of \(rn.
- * xditview/libXdvi/DviChar.c: Remove radicalex from
- Adobe_symbol_map.
-
-Sat Nov 17 10:44:58 1990 James Clark (jjc at jclark)
-
- * tbl/table.c (table::add_entry): Allow alphabetic text blocks.
- (alphabetic_block_entry::alphabetic_block_entry,
- alphabetic_block_entry::divert, alphabetic_block_entry::print):
- New functions.
- (block_entry::divert): Split off body into ...
- (block_entry::do_divert): If the block is alphabetic, subtract 2n
- from the line length; also update the span width to dl+2n, and the
- alphabetic span width to dl.
-
- * driver/input.c (do_file): While reading argument to D command,
- when expanding buffer, multiply szp by sizeof(int) rather than 2
- in the argument to memcpy.
-
- * tbl/table.c (compute_span_width): Add 2n rather than 1n to the
- width of alphabetic columns.
-
-Fri Nov 16 06:34:27 1990 James Clark (jjc at jclark)
-
- * troff/node.c (lookup_family): Supply second argument to lookup.
-
- * troff/dictionary.c (dictionary::lookup): After an unsuccesful
- search, return immediately if v is 0.
-
- * pic/troff.c: Define EQN_NO_EXTRA_SPACE_REG.
- (troff_output::start_picture): Set this reg.
- (troff_output::end_picture): Remove this reg
- * eqn/box.c (box::extra_space): Don't produce `\x's if
- EQN_NO_EXTRA_SPACE_REG is defined.
-
- * eqn/eqn.y: Allow just a PRIME to be a `simple'.
- * eqn/text.c (split_text): Map ' to \(fm when it's the first
- character.
-
-Thu Nov 15 10:35:06 1990 James Clark (jjc at jclark)
-
- * macros/tmac.e: Use font 3 instead of B in $c. Remove `bd'
- requests.
-
- * troff/div.c (top_level_diversion::top_level_diversion):
- Initialize page_number to 0.
-
-Wed Nov 14 21:41:58 1990 James Clark (jjc at jclark)
-
- * groff/troff (environment::environment(const environment *)):
- Initialize name to e->name, rather than "anonymous".
-
-Sat Nov 10 01:59:37 1990 James Clark (jjc at jclark)
-
- * xditview/libXdvi/Dvi.c (ShowDvi): If eof is encountered, reset
- requested_page. Split middle part into ...
- (FindPage): New function.
- (SetValues): If we don't yet know the last page, and the requested
- page is greater than the current page, call FindPage.
- Update the font_map_string before doing this.
-
- * xditview/tmac.X: Add definitions of \(sq, \(ga, \(dg and \(dd.
- Translate \(lh and \(rh into left and right double arrows.
-
- * troff/node.c (class hyphen_inhibitor_node): New class.
- (hyphen_inhibitor_node::hyphen_inhibitor_node,
- hyphen_inhibitor_node::copy, hyphen_inhibitor_node::same,
- hyphen_inhibitor_node::type,
- hyphen_inhibitor_node::get_hyphenation_type): New functions.
- (node::add_discretionary_hyphen): Use hyphen_inhibitor_node rather
- than dbreak_node(0, 0) to represent a `\%' at the beginning of a
- word.
-
-Fri Nov 9 16:05:38 1990 James Clark (jjc at jclark)
-
- * troff/node.h (dummy_node::get_hyphenation_type,
- transparent_dummy_node::get_hyphenation_type): Declare them.
- * troff/node.c: (dummy_node::get_hyphenation_type,
- transparent_dummy_node::get_hyphenation_type): New functions.
-
-Wed Nov 7 10:09:06 1990 James Clark (jjc at jclark)
-
- * xditview/libXdvi/draw.c: If M_PI not defined after including
- math.h, then define it.
-
- * xditview/Makefile: Add definition of AR. Pass it to the submake
- in libXdvi.
- * xditview/libXdvi/Makefile: Add definitions of AR and RANLIB.
-
-Tue Nov 6 10:14:27 1990 James Clark (jjc at jclark)
-
- * troff/dictionary.h (object_dictionary::alias): Declare return
- value as int.
- * troff/dictionary.c (object_dictionary::alias): Return non-zero
- if the old name was defined.
- * troff/input.c (alias_macro): Give a warning if the old name was
- not defined.
- * troff/reg.c (alias_reg): Likewise.
-
-Mon Nov 5 00:31:39 1990 James Clark (jjc at jclark)
-
- * troff/input.c (token::next): Delete implementation of \R.
-
- * macros/Makefile: Strip comments from tmac.e while installing it.
-
- * troff/input.c: New variable `nroff_mode'.
- (troff_request, nroff_request): New functions.
- (init_input_requests): Bind `troff' and `nroff' to troff_request
- and nroff_request.
- (do_if_request): Compute results of t and n conditions from
- nroff_mode.
-
- * text/text.c (split_text): Fix typo in >=.
-
- * eqn/lex.c: Add definition of `==' to def_table.
-
-Fri Nov 2 02:49:09 1990 James Clark (jjc at jclark)
-
- * pic/tex.c (tex_output::start_picture): Change the definitions of
- \graph and \graphtemp so that they work properly with Plain TeX.
-
- * pic/tex.c (tex_output::solid_arc): Ensure that the second angle
- argument to `ar' is not less than the first.
-
- * pic/pic.y: Allow a comma between elements of the variable list
- in the argument to `reset'.
-
- * pic/object.c (arc_object::arc_object): Fix computation of
- radius.
-
- * eqn/main.c (main): Add exit(0).
-
-Thu Nov 1 02:03:50 1990 James Clark (jjc at jclark)
-
- * troff/div.c (begin_page): Test no_space_mode after doing the
- break, but still push the page ejector cookie before doing the
- break. Also set the next page number after doing the break.
-
- * xditview/xditview.c (NewFile): Don't set the title and icon name
- if this is the first file and its name is `-'.
- * groff/groff.c: Define a new device flag XT_OPTION. Set it for
- the X75 and X100 devices.
- (main): If a device has the XT_OPTION flag set and there's exactly
- one file argument, pass the driver -xrm and -title options to set
- the icon name and window title to the name of the file.
-
- * troff/env.c (environment_switch): If there was an argument but
- it wasn't a valid number or name, then pop an environment but
- don't give an error message on underflow.
-
- * troff/number.c (start_number): Correct spelling in error message.
-
- * troff/input.c (token::delimiter): Don't print an error message
- if err is false.
-
- * xditview/libXdvi/parse.c (ParseInput): In case 'D', only call
- ParseDrawFunction if dw->display_enable is true.
-
-Wed Oct 31 05:49:50 1990 James Clark (jjc at jclark)
-
- * pic/pic.y: Parse text positioning like normal attributes, so as
- to allow `"text" at 0,0 ljust'. Don't allow `center' as a
- positioning attribute.
-
-Mon Oct 29 22:50:38 1990 James Clark (jjc at jclark)
-
- * tbl/main.c (process_data): When in state START while reading a
- text block, don't change to state MIDDLE if c is a newline.
-
-Sun Oct 28 21:59:56 1990 James Clark (jjc at jclark)
-
- * dvi/dvi.c (dvi_printer::begin_page): Rename `i' variable to `j'
- so as to avoid shadowing parameter.
-
-Wed Oct 24 18:35:39 1990 James Clark (jjc at jclark)
-
- * tbl/table.c (trim_space): Deleted.
- (table::add_entry): Don't call trim_space.
-
-Mon Oct 22 03:48:39 1990 James Clark (jjc at jclark)
-
- * VERSION: Change version to 0.6.
-
- * troff/number.c (parse_expr): Make == work.
-
-Sat Oct 20 11:28:17 1990 James Clark (jjc at jclark)
-
- * man/grog.man: New file.
- * man/Makefile: Add grog.n to MAN1PAGES.
- * etc/grog.sh: New file.
- * etc/Makefile: Install grog.sh as grog.
-
-Fri Oct 19 11:17:15 1990 James Clark (jjc at jclark)
-
- * troff/input.c (token::next): Implement \E.
-
-Thu Oct 18 11:56:24 1990 James Clark (jjc at jclark)
-
- * xditview/tmac.X: Change font translations to match tmac.ps.
-
- * troff/input.c (non_empty_name_warning): Don't give a warning if
- `\{' terminates the name.
-
-Tue Oct 16 10:04:23 1990 James Clark (jjc at jclark)
-
- * ps/devps/symbol.diff: New file.
- * ps/devps/FontMakefile: Mention symbol.diff.
-
-Sun Oct 14 11:46:46 1990 James Clark (jjc at jclark)
-
- * troff/node.c (font_position): Use get_long_name to read the
- external_name.
-
- * troff/env.c (environment_switch): If we get a number that's < 0
- or >= NENVIRONMENTS, treat it like a name.
- Change NENVIRONMENTS to 10.
-
- * troff/groff.h: Remove definition of FONTS_MAX.
- * troff/node.h (class font_family): Make map a pointer instead of
- an array. Add a map_size member. Make it a class. Make nm const
- and public. Make invalidate_fontno a friend.
- * troff/node.c: Define font_table_size. Make font_info a pointer
- rather than an array.
- (class troff_output_file): Allocate font_position dynamically. Add
- nfont_positions member.
- (troff_output_file::set_font): Grow font_position if necessary.
- (troff_output_file::~troff_output_file): Delete font_position.
- (troff_output_file::troff_output_file): Allocate font_position.
- (grow_font_table): New function.
- (troff_output_file::really_begin_page,
- troff_output_file:really_copy_page): Use nfont_positions rather
- than FONTS_MAX.
- (mount_font_no_translate, mount_style): Call grow_font_table if
- necessary.
- (font_family::font_family): Allocate map.
- (font_family::make_definite): Grow map if necessary. Use
- font_table_size instead of FONTS_MAX.
- (font_family::~font_family): New function.
- (invalidate_fontno): Use font_family::map_size.
- (get_fontno, env_space_width, env_half_narrow_space_width,
- env_narrow_space_width, symbol_fotno, is_good_fontno,
- get_bold_fontno, make_glyph_node): Use font_table_size rather than
- FONTS_MAX.
- (next_available_font_position): Never return 0.
-
-Fri Oct 12 10:17:52 1990 James Clark (jjc at jclark)
-
- * ps/tmac.ps: Add font translations for compatibility with dpost.
-
-Thu Oct 11 12:09:03 1990 James Clark (jjc at jclark)
-
- * eqn/pile.c: Rename default_baseline_sep to baseline_sep.
- Move BASELINE_SEP_FORMAT and COLUMN_WIDTH_FORMAT into pbox.h.
- Move definitions baseline_sep, shift_down, column_sep,
- matrix_side_sep into...
- * eqn/box.c: Add them to param_table.
- * eqn/pbox.h: Add declarations to pbox.h.
-
- * troff/input.c (set_string): Cast value to unsigned char *.
-
- * troff/token.h (process_input_stack): Declare it static before
- declaring it a friend.
-
-Wed Oct 10 09:59:13 1990 James Clark (jjc at jclark)
-
- * dvi/devdvi/texex.map: Fix positions of extensible brace middle
- and bottom.
- * dvi/devdvi/EX: Regenerate.
-
- * troff/input.c (init_charset_table): Make ", ', ), ], *, \(dg
- transparent.
-
-Tue Oct 9 08:34:02 1990 James Clark (jjc at jclark)
-
- * eqn/lex.c: In defaults_table, make definition of `dot' call
- `dot_def'. Don't explicitly make it roman. Similarily for other
- accents.
-
- * pic/lex.c (for_input::for_input): Add by_is_multiplicative
- argument.
- (for_input::get, for_input::peek): Use this.
- (do_for): Add by_is_multiplicative argument.
- * pic/pic.y: Change optional_by clause to allow '*' after `by'.
- Change semantic value of optional_by to be a double plus a flag
- saying whethet the by clause is multiplicative.
-
- * eqn/lex.c (get_delimited_text): Remember location of start of
- definition. Improve error handling when EOF is encountered.
-
- * lib/font.h: Rename handle_x_command to
- handle_unknown_font_command.
- * lib/font.c (font::load): Call handle_unknown_font_command for
- any unknown command in the font description file. Don't call
- handle_x_command. Include the name of the command in the argv.
- Improve message for unknown command after kernpairs or charset
- command.
- * ps/ps.c (ps_font::handle_x_command): Rename to
- handle_unknown_font_command. Remove message about `x download'
- command. Give error message for wrong number of arguments.
- * ps/devps/afmtodit: Generate `encoding' instead of `x encoding'.
- * dvi/dvi.c (dvi_font::handle_x_command): Rename to
- handle_unknown_font_command. Give an error message for wrong
- number of arguments. Rename design_size to designsize.
- * dvi/tfmtodit.c (main): Generate `checksum' instead of `x
- checksum', `designsize' instead of `design_size'.
-
-Mon Oct 8 00:38:55 1990 James Clark (jjc at jclark)
-
- * eqn/*.[chy]: Change underaccent to uaccent.
-
- * eqn/eqn.y: Add rule for underaccent. Declare UNDERACCENT token;
- give it the same precedence as ACCENT.
- * eqn/other.c (make_underaccent_box): New function.
- * eqn/box.h: Declare it.
- * eqn/lex.c: Add UNDERACCENT to token_table. Add utilde to
- def_table.
-
-Sun Oct 7 11:25:16 1990 James Clark (jjc at jclark)
-
- * pic/pic.y (reset_all): New function. Called in rule for RESET.
- (parse_init): Call reset_all.
- (define_variable): When defining scale reset only those
- pre-defined variables that are scaled.
- (defaults_table): Add `scale' as non-scaled value.
-
- * pic/pic.y: Redo parsing of text adjustments: parse adjustments
- together with the text; allow any number of positioning words;
- allow center as a positioning word.
-
- * pic/object.c (output::compute_scale): Get picture maximum height
- and width from variables called maxpswid and maxpsht.
- * pic/pic.y: Add maxpswid and maxpsht to defaults_table.
-
-Sat Oct 6 10:16:56 1990 James Clark (jjc at jclark)
-
- * pic/object.c (object_spec::make_text): Multiply textht by number
- of text items.
-
- * pic/pic.y: Allow `sprintf("string", expr,...)' wherever text can
- occur.
- (do_sprintf): New function.
- (pic.gperf): Add sprintf token.
- (text, sprintf): New rules.
-
- * pic/pic.y: `rand()' with no arguments returns a random number
- in the range [0,1).
-
- * pic/pic.y: Allow a bare expression to be an attribute: change
- precedences to support this. Change optional_ordinal rule to
- optional_ordinal_last to avoid reduce/reduce conflict.
- * pic/object.c (object_spec::object_spec): Initialize direction.
-
- * pic/pic.y: Implement ^ operator meaning exponentiation.
-
- * troff/node.h: Add default argument to mount_font.
- * troff/node.c (font_position): Read an optional third argument
- giving the external_name.
- (mount_font): Add optional argument giving the external_name.
- (mount_font_not_translate): Have additional argument giving
- external name. Use this name to load the font. Pass both names
- to font_info::font_info.
- (font_info::font_info): Have additional argument giving
- external_name.
- (class tfont): New member external_name.
- (font_info::get_tfont): Use external name to construct tfont_spec.
-
-Fri Oct 5 04:03:13 1990 James Clark (jjc at jclark)
-
- * eqn/lex.c (init_table): Add argument giving device. Define
- name of device to be "1".
- (do_ifdef): Counts as true if the argument has been defined with
- `define'.
- * eqn/main.c (main): Call init_table with device argument. Make
- device local to main.
- * eqn/eqn.h: Change declaration of init_table. Remove declaration
- of device.
-
- * pic/lex.c (get_delimited): Allow text to be delimited by
- matching {}s. Don't recognize ending delimiter within a string.
-
- * troff/input.c (get_delim_name): New function.
- (token::next): Implement \C.
-
- * lib/font.c (font::load): Grok ---. Add an alias for each
- character based on its code.
- (font::get_code_width): Deleted.
- * lib/font.h (class font): Declare font::number_to_index().
- Remove declaration of font::get_code_width.
- * lib/nametoindex.c (font::name_to_index): Add 512 rather than 256
- to indices of named characters.
- (font::number_to_index): New function.
- * troff/input.c (font::number_to_index): New function.
- (get_charinfo_by_number, charinfo::get_number,
- charinfo::set_number): New functions.
- (token::next): Turn \N into a TOKEN_NUMBERED_CHAR.
- (token::process, token::description, token::get_char,
- token::add_to_node_list, token::operator==): Handle
- TOKEN_NUMBERED_CHAR.
- * troff/charinfo.h: Declare get_charinfo_by_number,
- charinfo::get_number, charinfo::set_number. Add NUMBERED flag to
- charinfo class.
- (charinfo::numbered): New function.
- * troff/token.h: Add TOKEN_NUMBERED_CHAR.
- * troff/env.h (class environment): Remove declaration of ...
- * troff/env.c (environment::make_numbered_char_node): Deleted.
- * troff/node.c (make_numbered_node): Deleted.
- (class numbered_glyph_node): Remove.
- (troff_output_file::put_char_width, troff_output_file::put_char):
- Handle numbered chars.
- (troff_output_file::numbered_char): Removed.
- (tfont::get_code_width): Removed.
- (make_glyph_node): Don't search special fonts for numbered
- characters.
- * troff/node.h: Remove declaration of make_numbered_node.
- * driver/input.c (do_file): Handle N command.
- * driver/printer.h: Add declaration of ...
- * driver/printer.c (printer::set_numbered_char): New function.
- * dvi/tfmtodit.c (main): Generate unnamed entries.
- * ps/devps/afmtodit: Likewise.
- * xditview/xtotroff.c (MapFont): Likewise.
- * xditview/libXdvi/parse.c (ParseInput): Grok N command.
-
- * tbl/main.c (process_format): If multiple widths are specified
- for a column but all the widths are the same, don't give an error
- message.
-
- * tbl/table.c (table::do_row): If the current row is all lines and
- the stuff doesn't contains a line, mark the top of the row after
- printing stuff before the row. If the current row is not all
- lines and the stuff doesn't contain a line, don't unnecessarily
- mark the top of the row before printing the stuff.
-
-Mon Oct 1 11:42:00 1990 James Clark (jjc at jclark)
-
- * troff/groff.h: Remove MAX_PATH.
- * troff/input.c (open_file): Dynamically allocate space for the
- path.
- (open_mac_file, process_macro_file): Corresponding changes.
-
-Sun Sep 23 18:56:26 1990 James Clark (jjc at jclark)
-
- * troff/node.h (class output_file): Make copy_file pure. Add
- vspace method ifdef COLUMN. Add is_printing method.
- * troff/node.c: Add class printing_reg. Add class
- real_output_file. Derive other output_file classes from
- real_output_file; in these classes rename begin_page to
- really_begin_page, print_line to really_print_line, copy_file to
- really_copy_file, transparent_char to really_transparent_char.
- Move output_file::flush to real_output_file. Add printing member
- to class output_file.
- * troff/div.h: Remove printing member from top_level_diversion.
- Add vspace member function to class diversion ifdef COLUMN. Add
- some declarations ifdef COLUMN.
- * troff/div.c (top_level_diversion::copy_file,
- top_level_diversion::transparent_output,
- top_level_diversion::output): Don't test printing member before
- output.
- * troff/input.c: Handle initial variable_space_request ifdef
- COLUMN.
- * troff/Makefile: Add column.c but comment it out. Add -DCOLUMN
- but comment it out.
-
-Sat Sep 22 11:32:22 1990 James Clark (jjc at jclark)
-
- * troff/div.c (diversion::need): Make any space forced. If we
- sprung a trap, set truncated_space to minus the distance to the
- trap and set needed_space to the amount that was needed.
- (top_level_diversion::space): A forced space turns no_space_mode
- off.
- (class constant_vunits_reg): New class.
- (init_div_requests): Implement number registers .trunc and .ne
- using constant_vunits_reg.
- (class truncated_space_reg): Deleted.
-
- * troff/div.h: Don't have a no_space_mode member in diversion.
- Instead have it in top_level_diversion.
- * troff/div.c (diversion::diversion): Don't initialize
- no_space_mode.
- (top_level_diversion::top_level_diversion): Initialize
- no_space_mode.
- (no_space, restore_spacing): Do nothing if curdiv != topdiv.
- (macro_diversion::output): Don't clear no_space_mode.
-
- * troff/input.c (diverted_space_node::reread): Don't call
- environment::do_break. In fill mode, act like a blank line.
- (diverted_copy_file_node::reread): Don't call
- environment::do_break.
-
- * troff/div.c (blank_line): New function.
- * troff/div.h: Declare it.
- * troff/input.c (process_input_stack): Call it.
-
- * troff/div.c (truncated_space_reg::get_string): New function.
- (init_div_requests): Bind to .trunc.
- (space_request, top_level_diversion::space,
- top_level_diversion::output, macro_diversion::space,
- macro_diversion::output): Update truncated_space.
- (macro_diversion::output): Redo calculations when trap sprung.
- (macro_diversion::output, macro_diversion::space): No need for
- trap_flag.
-
- * troff/div.c (top_level_diversion::output): Set nl_reg_contents
- after truncating post line spacing.
-
-Fri Sep 21 11:27:25 1990 James Clark (jjc at jclark)
-
- * ps/devps/prologue (MF, SF): Make them work even if setfont is
- defined as a procedure rather than as an operator.
-
-Thu Sep 20 12:55:05 1990 James Clark (jjc at jclark)
-
- * troff/div.c (macro_diversion::space): Ignore no_space_mode.
-
-Wed Sep 19 10:54:37 1990 James Clark (jjc at jclark)
-
- * troff/div.c (top_level_diversion::output): Merge
- output_file::print_line and output_file::end_of_line member
- functions.
- * troff/div.h (class output_file):
- * troff/node.c (troff_output_file::print_line,
- troff_output_file::end_of_line, output_file::end_of_line,
- ascii_output_file::print_line, suppress_output_file::print_line):
- Corresponding changes.
-
-Tue Sep 18 11:31:47 1990 James Clark (jjc at jclark)
-
- * troff/input.c (token::next): Don't give a warning for `\.'.
-
- * troff/env.c (environment::get_center_lines): New function.
- (init_env_requests): Bind number register .ce to it.
- * troff/env.h: Declare it.
- * tbl/table.c (table::init_output): Define reset macro to restore
- .ce. If center option not given, store .ce in SAVED_CENTER_REG.
- Then do .ce 0.
- (table::print): If center option not given, then imply center
- option if SAVED_CENTER_REG > 0.
-
-Mon Sep 17 09:19:19 1990 James Clark (jjc at jclark)
-
- * ps/devps/Makefile: Remove T from FONTS. Remove TSymbol.ps and
- Troff.ps from DOWNLOAD.
-
- * troff/Makefile: Change comment in DEFINES to avoid confusing
- System V make.
-
- * ps/ps.c (ps_printer::do_exec): Allow newlines within PostScript
- code. Don't try to catch errors with stopped.
- (check_line_lengths): New function.
- * ps/devps/prologue (EXEC): Deleted.
- (EBEGIN, EEND): New procedures.
-
-Sun Sep 16 14:51:15 1990 James Clark (jjc at jclark)
-
- * troff/input.c: Include request.h before node.h.
- * troff/node.c: Likewise.
- * troff/env.c: Likewise.
- * troff/div.c: Likewise.
- * troff/node.h (class special_node): Store argument as a macro
- rather than a char *.
- * troff/node.c (special_node::special_node, special_node::copy):
- Grok this.
- (special_node::~special_node): Deleted.
- (special_node::tprint): Deleted.
- (special_node::tprint_start, special_node::tprint_end,
- special_node::tprint_char): New functions.
- (troff_output_file::special): Deleted.
- (troff_output_file::start_special, troff_output_file::end_special,
- troff_output_file::special_char): New functions.
- * troff/input.c (special_node::tprint): New function.
- (do_special): Use macro not char *.
- (do_transparent_macro): Deleted.
- (token::next): Don't call do_transparent_macro.
-
- * troff/input.c (token::next): Add 'Y' case.
- (do_transparent_macro): New function.
- * troff/node.c (troff_output_file::special): Handle newlines with
- argument using new continuation convention.
- * driver/input.c (get_string): Cope with continuation convention.
- (do_file): Don't call skip_line after calling get_string(1).
- * ps/ps.c (ps_printer::special, ps_printer::do_import,
- ps_printer::do_def, ps_printer::do_exec): Cope with newlines in
- arg.
- * xditview/libXdvi/parse.c (ParseInput): Ignore lines starting
- with +.
-
-Sat Sep 15 19:00:10 1990 James Clark (jjc at jclark)
-
- * troff/input.c (asciify): By default, illegal input characters
- should return empty string.
-
- * troff/input.c (copy_file): Handle first page transition like title.
- (token::next, process_input_stack): Grok COPY_FILE_REQUEST.
-
- * troff/input.c (token::next): Improve error message for EOF after
- escape character.
- (input_char_description): New function.
- (get_char_for_escape_name): Use input_char_description.
- (token::next): Warn about unrecognized escape sequences.
- (warning_table): Add WARN_ESCAPE.
- * troff/groff.h: Declare WARN_ESCAPE. Change WARN_TOTAL
- accordingly.
-
- * troff/token.h: Remove declaration of process_input_stack.
-
- * troff/input.c: Remove declaration of init_hyphen_requests.
- * troff/request.h: Correct spelling in declaration of same.
-
- * troff/input.c (token::next): Check whether escape_char is 0.
-
-Fri Sep 14 12:09:25 1990 James Clark (jjc at jclark)
-
- * groff.c (main, usage, help): Implement -P and -L options.
- * groff.sh: Likewise.
-
- * troff/input.c (token::next): Use some gotos to avoid code
- duplication.
-
- * troff/input.c (get_long_name, get_name, read_long_ecsape_name):
- Avoid calling symbol::symbol if name empty.
-
-Thu Sep 13 06:21:45 1990 James Clark (jjc at jclark)
-
- * troff/input.c (init_input_requests): Make \n(.x return the major
- version number and \n(.y return the minor version number.
- * troff/Makefile: Construct file majorminor.c defining
- major_version and minor_version automatically from ../VERSION.
-
- * troff/node.c (class glyph_node): Make operator new and operator
- delete public.
- (class ligature_node): Similarily.
-
- * troff/input.c (operator==(const macro &, const macro &)): New
- function.
- (non_interpreted_node::same): Use this.
- (string_iterator::string_iterator): Make macro& argument const.
-
- * troff/input.c (input_iterator::get): New function. Don't make
- asciify_macro or class non_interpreted_node friends of class
- input_iterator.
- (non_interpreted_node::interpret): Use input_iterator::get.
- (asciify_macro): Likewise.
-
- * troff/input.c (~token_node, ~string_iterator, ~arg_list,
- ~non_interpreted_node): Deleted.
- * troff/node.c: (~suppress_output_file, ~ascii_output_file):
- Deleted.
-
- * troff/symbol.h: Make all symbol member functions const.
-
- * lib/strtol.c: New file.
- * lib/Makefile: Add strtol.c.
- * Makefile: Define STRTOL as strtol.o to include strtol in
- libgroff.a.
-
-Wed Sep 12 10:00:49 1990 James Clark (jjc at jclark)
-
- * pic/troff.c (troff_output::simple_circle): Divide by scale.
-
-Tue Sep 11 14:17:16 1990 James Clark (jjc at jclark)
-
- * troff/input.c (do_special): Use input_level.
-
- * troff/token.h (TOKEN_BACKSPACE): New token.
- (token::backspace): New function.
- * troff/input.c (token::description, token::next, token::process):
- Grok TOKEN_BACKSPACE.
- (do_special): Turn TOKEN_BACKSPACE back into \b.
-
- * troff/token.h (token::leader): New function.
- * troff/input.c (do_special): Turn TOKEN_LEADER back into \001.
-
- * troff/input.c (do_special): Turn TOKEN_TAB back into \t.
-
- * troff/input.c (do_special): Use token::description in error
- message.
-
-Mon Sep 10 11:06:27 1990 James Clark (jjc at jclark)
-
- * troff/input.c (decode_args): Combine quoted and
- quote_input_level variables. Make it a for (;;) loop.
-
- * troff/input.c (get_char_for_escape_name): Check for \001 and \b.
-
- * troff/input.c (read_long_escape_name): The test for whether to
- expand buffer was off by 1.
- (read_string): Similarily.
-
-Fri Sep 7 11:45:50 1990 James Clark (jjc at jclark)
-
- * troff/input.c: Use `const int' rather than `static const int'.
-
- * troff/div.h (diversion::copy_file): Declare as pure virtual.
- (macro_diversion::copy_file): New function.
- * troff/node.h: New class diverted_copy_file_node.
- * troff/node.c: Implement it.
- * troff/input.c (copy_file): Use diversion::copy_file. Handle
- first page transition by pushing a diverted_copy_file_node.
- * troff/input.c (token::next, process_input_stack): Don't handle
- COPY_FILE_REQUEST.
-
-Thu Sep 6 13:29:10 1990 James Clark (jjc at jclark)
-
- * ps/ps.c (flush_sbuf): Remember to add sbuf_kern when checking
- whether space widths need adjusting.
-
- * troff/charinfo.h: Generalize translated_to_space to
- special_translation so as to allow translation to \&.
- * troff/input.c (translate): Allow translation to \&.
- (charinfo::*): Corresponding changes.
- * troff/node.c (make_node, node::add_char): Corresponding changes.
- * troff/node.h (dummy_node::dummy_node): Allow optional first
- argument.
-
- * lib/lib.h: Make codes 0200 to 0237 illegal input characters.
- * troff/token.h: Remove TOKEN_TITLE. Remove token::title. Add
- TOKEN_REQUEST.
- * troff/input.c (token::next): Turn a TITLE_REQUEST into a
- TOKEN_REQUEST with an argument of TITLE_REQUEST.
- (token::process): Grok that.
- * troff/input.c (copy_file): Handle first page transition like
- title by pushing a COPY_FILE_REQUEST cookie.
- (token::next, process_input_stack): Grok that.
- * troff/node.h (output_file::copy_file): Add x and y arguments.
- Make it non-pure.
- * troff/div.c (top_level_diversion::copy_file): Supply them.
- * troff/node.c (troff_output_file::copy_file): Add x and y
- arguments; moveto specified position. Invalidate font_position
- array after copying file.
- (output_file::copy_file): New function.
- (suppressed_output_file::copy_file, ascii_output::copy_file):
- Removed.
- * troff/input.c (transparent_file): New function.
- (init_input_requests): Bind to "trf".
- (token::next): Handle TRANSPARENT_FILE_REQUEST cookie.
- (process_input_stack): Likewise.
-
- * troff/Makefile: Add ../lib/lib.h to GROFF_H.
-
- * troff/node.c (init_node_requests): New number registers .kern
- pointing to global_kern_mode, and .lg pointing to
- global_ligature_mode.
-
- * troff/node.c (ligature): Don't change it if we get a bad
- integer.
-
- * troff/input.c (do_define_string): Don't strip tabs.
-
- * troff/input.c (asciify_macro): Make the string_iterator auto.
-
- * troff/node.c (init_font_requests): Rename to...
- (init_node_requests):
- * troff/node.h: Change declaration.
- * troff/input.c (main): Change call.
-
- * troff/input.c (node::reread, diverted_space_node::reread): New
- methods.
- (process_input_stack): Call reread rather than
- get_diverted_space_node.
- * troff/node.c (node::get_diverted_space_node,
- diverted_space_node::get_diverted_space_node): Removed.
- * troff/node.h: Declare reread methods instead of
- get_diverted_space_node methods. Make `n' member private.
- * troff/input.c: (token::diverted_space): Removed.
- * troff/token.h: Removed declaration.
-
-
-Tue Sep 4 00:48:04 1990 James Clark (jjc at jclark)
-
- * eqn/script.c (script_box::compute_metrics): Don't let
- SUP_RAISE_FORMAT become negative.
-
- * tbl/table.c (table::do_row): Entries that don't end in the
- this row shouldn't make the row non-blank.
-
- * tbl/table.c (table::make_columns_equal): Only set the width of
- columns which are marked as equal.
-
- * tbl/main.c (process_data): Before issuing excess data error,
- if last character was a newline unget it; then get it again after
- the error. Also include the contents of the entry in the message.
-
- * groff.c: New file.
- * Makefile: Build groff from groff.c. Make it possible to use
- either groff.sh or groff.c as groff.
- * Makefile.bd: Similarily.
-
-Mon Sep 3 09:39:49 1990 James Clark (jjc at jclark)
-
- * groff.sh: Don't delay expansion of $@ in assignment to files.
- Remove occurrences of \".
-
-Sun Sep 2 09:56:59 1990 James Clark (jjc at jclark)
-
- * all Makefiles: Simplify and rearrange.
-
- * Makefile: Handle fmod like malloc.
- * lib/Makefile: Similarily.
- * lib/fmod.c: Remove #ifdef NEED_FMOD.
-
- * Makefile: Rename OPTIMISE to OPTIMIZE.
-
- * groff.sh: Remove assignment to PATH.
- * Makefile: Remove SHPATH variable.
- * Makefile.bd: Similarily.
-
- * groff.sh: Add -V option to print the pipeline instead of
- executing it.
-
-Fri Aug 31 00:56:46 1990 James Clark (jjc at jclark)
-
- * lib/font.c: Split off file searching into ...
- * lib/fontfile.c: New file.
-
- * lib/strerror.c (strerror): Use `Error %d' for unknown errors.
-
-Thu Aug 30 13:13:55 1990 James Clark (jjc at jclark)
-
- * tbl/table.c (table::do_hspan): Delete assertion that e != 0.
- Also change misleading comment.
- (table::do_vspan): Change similarily misleading comment.
- * tbl/main.c (process_data): A format row with an explicit `s'
- uses up a data line, even if all the other columns are `_' or `='.
-
- * troff/input.c (token::description): Fix description of
- TOKEN_DUMMY and TOKEN_EMPTY.
-
-Wed Aug 29 04:12:08 1990 James Clark (jjc at jclark)
-
- * groff.sh: Fix description of -Z in help message.
-
-Tue Aug 28 07:28:33 1990 James Clark (jjc at jclark)
-
- * pic/object.c (object_spec::make_object): Allow negative and zero
- line thicknesses.
- * pic/pic.y: Give linethick default value of -1.0.
- * pic/troff.c (troff_output::troff_output): Initialize
- last_line_thickness to BAD_THICKNESS.
- (troff_output::finish_picture): Set thickness to BAD_THICKNESS.
- (troff_output::line_thickness): Canonicalize negative thicknesses
- to RELATIVE_THICKNESS.
- * pic/tex.c (tex_output::set_pen_size): Silently map negative line
- thicknesses to DEFAULT_PEN_SIZE. Canonicalize negative pen sizes
- to -1.0.
- (tex_output::start_picture): Set pen_size to -2.0.
-
- * ps/ps.c (ps_printer::set_line_thickness): If line_thickness is
- 0, then use 0 linewidth.
- (ps_printer::ps_printer): Initialize line_thickness to -1.
-
- * pic/troff.c (troff_output::simple_ellipse): Divide by scale.
-
- * ps/devps/symbolchars: Remove `or'.
- * ps/tmac.ps: Implement \(or with .char.
-
- * ps/devps/symbolchars: Move most characters into textmap.
- * ps/devps/textmap: Add names for troff bracket characters. Remove
- ul, ru, br, bv.
-
- * ps/devps/TSymbol.ps: Removed.
- * ps/devps/FontMakefile: Make S from Symbol not TSymbol.
- * ps/tmac.ps: Do with .char what TSymbol did.
- * ps/devps/download: Remove TSymbol.
-
- * ps/devps/T: Removed.
- * ps/devps/Troff.ps: Removed.
- * ps/devps/Troff.afm: Removed.
- * ps/tmac.ps: Implement \(ru, \(ul, and \(br with .char.
- * ps/devps/download: Remove Troff.
- * ps/devps/FontMakefile: Remove T target.
- * ps/devps/DESC-A4: Remove T from font list.
- * ps/devps/DESC-letter: Likewise.
-
- * troff/input.c (macro_to_node): Rename to ...
- (charinfo_to_node): Don't pass mac argument. Temporarily remove the
- character's definition while processing it.
- * troff/node.c (node::add_char, make_node): Change calls to
- macro_to_node accordingly.
-
- * troff/input.c (token::next): Translate \_ to \(ul.
-
- * tty/devascii/R.proto: Add `|'.
- * tty/devlatin1/R.proto: Likewise.
-
-Mon Aug 27 11:25:41 1990 James Clark (jjc at jclark)
-
- * man: Put the version number in all the man pages.
-
-Sun Aug 26 11:40:05 1990 James Clark (jjc at jclark)
-
- * Makefile.bd: New file.
- * README.bd: New file.
-
- * VERSION: New file.
- * lib/version.c: Removed.
- * lib/Makefile: Create version.c from ../VERSION. Remove version.c
- in clean target.
-
- * troff/input.c (main): Get hyphen_file from GROFF_HYPHEN
- environment variable.
-
- * all Makefiles: Split install target into install.bin for
- binaries, and install.nobin for everything else.
- * Makefile: Add bindist target.
-
- * man/afmtodit.man: New file.
- * man/Makefile: Add afmtodit.n to MAN1PAGES.
- * ps/devps/Makefile: Add textmap to DEVICEFILES. Install afmtodit
- in BINDIR.
- * ps/Makefile: Pass BINDIR to make install in devps.
-
- * ps/ps.c (ps_printer::set_char): Do nothing if the character is
- the space character.
-
- * ps/devps/FontMakefile: Rename symbol.afm to tsymbol.afm.
-
-Sat Aug 25 15:39:03 1990 James Clark (jjc at jclark)
-
- * ps/ps.c: Redo font downloading.
- * ps/devps/download: New file.
- * ps/devps/Makefile: Add download to DEVICEFILES.
- * ps/devps/afmtodit: Remove -d option.
- * ps/devps/FontMakefile: Don't use -d option with afmtodit.
- * ps/devps/symbosl.ps: Add %%DocumentFonts comment.
- * ps/devps/zapfdr.ps: Likewise.
- * ps/devps/TSymbol.ps: Likewise.
-
-Fri Aug 24 20:10:30 1990 James Clark (jjc at jclark)
-
- * groff.sh: Initialize dev to ${GROFF_TYPESETTER:-@DEVICE@}.
-
-Thu Aug 23 10:03:47 1990 James Clark (jjc at yquem)
-
- * ps/ps.c (ps_output::include_file): If BROKEN_SPOOLER is defined,
- then strip the first line if it starts with %.
- * Makefile: Add a comment about this.
-
- * man/tfmtodit.man: New file.
- * man/Makefile: Add tfmtodit.n to MAN1PAGES.
- * dvi/Makefile: Install tfmtodit in BINDIR.
-
- * dvi/tfmtodit.c (usage): Mention -v option.
-
-Wed Aug 22 09:56:36 1990 James Clark (jjc at yquem)
-
- * troff/node.c (troff_output_file::end_of_line): Call do_motion.
- * troff/node.c (troff_output_file::transparent_char): Don't call
- flush_tbuf.
-
- * eqn: Add check_tabs method to most box classes.
- * eqn/box.c (box::top_level): Call check_tabs.
-
- * eqn/script.c (script_box::output): Use \Z.
- * eqn/limit.c (limit_box::output): Use \Z.
-
- * eqn/box.c (box::top_level): Use itoa.
-
-Tue Aug 21 09:29:28 1990 James Clark (jjc at yquem)
-
- * dvi/tmac.dvi: Add font translations for CR, C, TT.
- * dvi/devdvi/Makefile: Don't make links to CW.
-
- * ps/tmac.ps: Add font translations for C, CW, CO, CX, CD, H, HO,
- HX, HD.
- * xditview/tmac.X: Likewise.
-
- * troff/node.c: Add font translation feature.
- (get_font_translation): New function.
- (symbol_fontno): Translate the font name.
- (mount_font_no_translate): Rename to mount_font to this.
- (mount_font): New function.
- (font_family::make_definite): Call mount_font_no_translate instead
- of mount_font.
- (mount_style): Translate the font name.
- (font_translate): New function.
- (init_font_requests): Bind "ftr" to font_translate.
-
- * ps/devps/prologue (SN): New procedure that rounds a position to
- the nearest (pixel + (.25,.25)).
- (DL): Use SN to round endpoints.
-
- * lib/version.c: Changed version to 0.5.
-
-Sat Aug 18 04:43:21 1990 James Clark (jjc at yquem)
-
- * Makefile: Move definition of PAGE to the very beginning, so that
- people are less likely to miss it.
-
-Fri Aug 17 02:15:11 1990 James Clark (jjc at yquem)
-
- * man/Makefile: Don't need to sed out @UPCASE_PROG_PREFIX@.
-
- * troff/env.c (environment::choose_breakpoint): Make `can't find
- breakpoint' error a warning of type WARN_BREAK. Change message to
- `can't break line'.
- * troff/groff.h: Declare WARN_BREAK with code 4; change WARN_INPUT to
- code 040000.
- * troff/input.c: Add WARN_BREAK to warning_table. Include
- WARN_BREAK in DEFAULT_WARNING_MASK.
-
- * tty/tmac.tty: Add definition of \(+-.
-
- * groff.sh: Remove `--' option to set command.
-
- * dvi/devdvi/texsy.map: Remove duplicate md entry.
-
- * ps/devps/eqnchar: Better definition of cdot using md.
- * dvi/devdvi/eqnchar: Likewise.
- * xditview/devX100/eqnchar: Likewise.
- * xditview/devX75/eqnchar: Likewise.
- * eqn/lex.c: Add definition of cdot.
-
-Thu Aug 16 09:33:57 1990 James Clark (jjc at yquem)
-
- * troff/input.c (get_optional_char): New function.
- * troff/input.c (set_page_character): Use get_optional_char(),
- rather than has_arg() and tok.get_char(1).
- * troff/env.c (tab_character, leader_character, hyphen_char,
- field_characters): Likewise.
- (margin_character): Likewise. Also always delete the
- margin_character_node.
-
- * troff/input.c (token::get_char): Use token::description.
-
- * troff/input.c (has_arg): Don't skip over tab and \}.
- * troff/number.c (start_number): Give a warning if the number
- starts with \} (WARN_RIGHT_BRACE) or tab (WARN_TAB).
-
-Wed Aug 15 10:04:37 1990 James Clark (jjc at yquem)
-
- * troff/input.c (empty_name_warning, non_empty_name_warning): New
- functions.
- (get_name, get_long_name): Use these. Rename `warn' argument to
- `required'.
-
- * troff/node.c (get_fontno): Test that the symbol is not null.
-
- * troff/input.c (token::description): New function.
- * troff/number.c (parse_term): Use token::description in `numeric
- expression expected' message.
- * troff/groff.h: Add WARN_MISSING.
- * troff/number.c (start_number): New function.
- * troff/number.c (get_vunits, get_hunits, get_number, get_integer,
- get_incr_number): Use start_number().
- * troff/input.c (DEFAULT_WARNING_MASK): Enable WARN_NUMBER by
- default.
- * troff/input.c (get_name, get_long_name): Use WARN_MISSING.
- * troff/reg.c (alter_format): Use WARN_MISSING. Also use
- token::descripion.
- * troff/input.c (token::get_char): Use WARN_MISSING.
- * troff/input.c (token::delimiter): Use token::description.
- * troff/env.c (environment_switch): Back out Aug 3 change.
- * troff/input.c (has_arg): Skip over \}s and tabs but give a
- warning.
- * troff/token.h (token::tab): New function.
- * troff/node.c (get_fontno): Use tok.skip() rather than has_arg().
- * troff/reg.c (alter_format): Likewise.
- * troff/node.c (bold_font): Use has_arg() rather than tok.skip().
-
-Tue Aug 14 10:11:21 1990 James Clark (jjc at yquem)
-
- * troff (most files): Redo warnings. Divide warnings into various
- categories; warning() has an additional first argument indicating
- the category it falls into.
- * troff/input.c (main): -w now takes an argument. New option -W.
- (enable_warning, disable_warning): New functions.
-
- * ps/devps/afmtodit: Add -a option to lie about the italic angle.
- * ps/devps/FontMakefile: Pretend TI has an angle of 7.
-
-Mon Aug 13 10:11:16 1990 James Clark (jjc at yquem)
-
- * ps/devps/eqnchar: Better definitions of dotdot, vec, dyad, inf.
- * xditview/devX100/eqnchar: Likewise. Remove definition of dot.
- * xditview/devX75/eqnchar: Likewise.
- * dvi/devdvi/eqnchar: Better definitions of vec, dyad, dotdot.
-
- * eqn/other.c: When bar or over applies to a single character
- don't produce an overline_box or an underline_box. Instead produce
- an accent_box or an underaccent_box, with the accent a line
- whose width is accent_width. New classes underaccent_box,
- overline_char_box and underline_char_box.
- * eqn/box.h: Move overline_box, underline_box, accent_box class
- declarations into eqn/other.c. Add declarations of
- make_underline_box, make_overline_box, make_accent_box.
- * eqn/eqn.y: Call make_overline_box, make_underline_box
- make_accent_box instead of constructors.
- * eqn/pbox.h, eqn/box.c: Add accent_width parameter.
-
- * eqn/other.c: Add accent_box::~accent_box.
- * eqn/box.h: Declare it.
-
- * groff.sh: With -Tps, use eqn -D.
-
- * eqn/other.c (overline_box::output): Use \Z. If draw_flag use \D
- rather than \l.
- (underline_box::output): Similarily.
- (accent_box::output): Use \Z.
-
- * xditview/tmac.X: Add definitions of ~ and ^ (so that they are a
- bit smaller.)
-
-Sun Aug 12 09:41:15 1990 James Clark (jjc at yquem)
-
- * troff/div.c (top_level_diversion::transparent_output(unsigned
- char)): Use asciify.
- * troff/input.c (asciify): Don't make it static.
- * troff/token.h (asciify): Declare it.
-
- * troff/input.c (get_name, get_long_name, token::get_char,
- token::delimiter): Add an extra default argument which says
- whether a warning should be printed.
- * troff: Pass a non-zero argument to one of these rather than
- printing a warning directly.
-
-Sat Aug 11 09:02:21 1990 James Clark (jjc at yquem)
-
- * troff: Consistently use symbol::is_null.
-
- * troff/dictionary.h: Move some inline functions into
- dictionary.c.
-
- * troff/request.h: Move inline functions into input.c.
- (request_or_macro::invoke): Make it pure.
-
- * troff/input.c, troff/reg.h: New class `constant_int_reg'.
- * troff/input.c (init_input_requests): Use class constant_int_reg.
- (class compatible_reg): Deleted.
- * troff/div.c (init_div_requests): Use class constant_int_reg.
- (class last_post_line_extra_space_reg): Deleted.
-
- * troff/env.c (tab_character): Don't change the tab character if
- we get an invalid argument.
- (hyphen_char): Similarily.
-
- * troff/reg.c (alter_format): Check that nm is not null.
-
- * Makefile, groff.sh: Make it possible to customize the commands
- used for printing PostScript and dvi files. Also make it possible
- to customize the path used by groff.sh.
-
- * eqn/eqn.y: Make `left' right associative.
-
-Fri Aug 10 18:20:39 1990 James Clark (jjc at yquem)
-
- * pic/pic.h: Added definition of M_SQRT2 for those systems that
- don't have it.
-
- * pic/pic.h: Removed definition of INT_MAX.
-
- * troff/node.c (italic_corrected_node::vertical_extent): Omit
- `return'.
-
- * troff/input.c (token::next): Handle \R like \n.
-
-Tue Aug 7 09:46:33 1990 James Clark (jjc at yquem)
-
- * ps/tmac.pc (PSPIC): Simplify.
-
- * troff/env.c (tab_stops::to_string):
- * pic/pic.y (object_type_name):
- * pic/troff.c (simple_output::line):
- * pic/tex.c (tex_output::spline):
- * pic/object.c (object_spec::make_object):
- * tbl/main.c (process_data): Add cases to switch statements to
- avoid cfront warnings. (Some of these are spurious, since the
- switch already has a default case.)
-
- * ps/tmac.ps (PSPIC): Reformatted. Prefix all local names with
- `ps-'. Don't test systat; instead check number of arguments to
- ps-bb.
-
-Mon Aug 6 00:13:07 1990 James Clark (jjc at yquem)
-
- * macros/tmac.e: Do not decrease the page offset by 0.5i.
-
- * ps/ps.c (ps_printer::ps_printer): Use mktemp instead of tempnam.
- Unlink the file as soon as we have opened it, so that we don't
- have to bother with signal handlers.
- (handler): Deleted.
- (fatal_error_exit): Deleted.
- (main): Don't call signal.
-
- * dvi/tfmtodit.c: Add -k option so that kerns with the skewchar
- can be ignored.
- * dvi/devdvi/Makefile: Use the -k option with S and MI.
-
- * pic/pic.y: If there is a label, or an nth construction before
- the first `.' in the argument to `with', ignore it and generate a
- warning.
- * pic/lex.c (lex_warning): New function.
-
- * tbl/table.c (table::init_output): In section keep and release
- macro, use 0 indent when diverting and the correct indent when
- rereading.
-
- * troff/input.c (interpolate_number_format): Do not interpolate
- anything if the number register is not defined.
-
- * tbl/main.c (process_data): Don't add entry when col >= ncolumns.
-
-Sat Aug 4 08:12:05 1990 James Clark (jjc at yquem)
-
- * ps/devps/prologue (PICTURE): Set components of graphics state to
- their default values.
-
- * ps/devps/text.enc: Add trademark
- * ps/devps/textmap: Add names for club, spade, heart, diamond,
- carriagereturn, suchthat. Use Upsilon1 rather than Upsilon.
- * ps/devps/symbolchars: Add names for summation and product.
-
- * dvi/devdvi/texsy.map: Add names for club, spade, heart, diamond,
- suchthat. Add pp. Add upper-case letters.
-
- * xditview/libXdvi/DviChar.c: Add names for club, spade, heart,
- diamond, carriagereturn, suchthat. Use Upsilon1 rather than
- Upsilon.
-
- * dvi/devdvi/texsy.map: Rename lA (left angle bracket) to la, and
- rA (right angle bracket) to ra. Introduce names for double-headed
- arrows and double-barred arrows: <>, va, lA, rA, hA, uA, dA, vA.
- * ps/devps/textmap: Likewise for ps device.
- * xditview/libXdvi/DviChar.c: Likewise for X100 and X75 devices.
- * tty/devascii/R.proto: Rename lA to la and rA to ra.
- * tty/devascii/R.proto: Likewise.
- * tty/tmac.tty: Provide definitions for \(<>, \(lA, \(rA, \(hA,
- \(uA, \(dA.
- * eqn/delim.c: In delim_table, rename \(lA to \(la and \(rA to \(ra.
-
- * xditview/tmac.X: Add definitions for \(fi \(fl \(ff \(Fi \(Fl.
-
- * eqn/lex.c: Added definitions of `approx', `grad' and `del' to
- def_table.
-
-Fri Aug 3 09:59:27 1990 James Clark (jjc at yquem)
-
- * troff/div.c (when_request): Use symbol::is_null rather than
- has_arg to determine whether we have an argument.
- (change_trap): Remove the trap if we get an invalid number. Give
- an error if we don't get at least the macro name.
- (diversion_trap): Remove trap if we get an invalid name or number.
-
- * troff/env.c (environment_switch): Pop if we get an invalid
- symbol or numeric expression.
-
- * troff/input.c (do_define_macro): If EOF is encoutered while
- defining the macro, do tok.next() before returning.
-
- * troff/token.h (has_arg): Move definition from here, to ...
- * troff/input.c (has_arg): ... here
-
- * troff/env.c (space_size): Do nothing if we get an invalid argument.
- * troff/input.c (shift): Likewise.
-
- * pic/lex.c (get_token_after_dot): Accept `.center' as a synonym
- for `.c'.
-
- * pic/troff.c (troff_output::start_picture): Comment out calls to
- `..'.
-
- * eqn/main.c (do_file): Subtract 1 from current_lineno if
- interpret_lf_args succeeds.
-
- * eqn/main.c (do_file): Don't recognize delimiter if preceded by
- \\. This avoids problems with \$N.
-
- * groff.sh: Pass -C to preprocessors.
-
- * lib/lf.c (interpret_lf_args): Be more flexible.
-
- * tbl/main.c (main): Add -C option.
- (table_input::get): Do not recognize TE if followed by character
- other than a space or newline unless -C option given.
- (process_input_file): Likewise for lf, TS.
- (process_data): Likewise for lf in text blocks.
-
- * eqn/main.c (main): Add -C option.
- (do_file): Don't recognize EQ, EN or lf if followed by character
- other than space or newline unless -C option given.
- * eqn/lex.c (file_input::read_line): Similarily.
- * eqn/eqn.h: Declare compatible_flag.
-
- * etc/soelim.c (main): Add -C option.
- (interpret_lf_args): Use version in libgroff.
- (do_file):
-
- * pic/main.c (main): Add -C option, which sets compatible_flag.
- (top_input::get), (top_input::peek): If -C option not given,
- do not recognize .PS/.PE/.PF/.lf if followed by a character
- other than space or newline.
- * pic/lex.c (file_input::read_line): Similarily.
- * pic/pic.h: Add declaration of compatible_flag.
-
-Thu Aug 2 11:11:27 1990 James Clark (jjc at yquem)
-
- * ps/tmac.ps (PSPIC): Avoid use of `echo -n'.
-
- * troff/node.c, troff/node.h: Add `asciify' methods to classes
- derived from node. New class space_char_hmotion_node.
- * troff/input.c (asciify_macro): New function.
- * troff/input.c (init_input_requests): New request `asciify' bound
- to asciify_macro.
- * macros/mm.diff: New file.
- * Makefile: In install.mm target use `patch' to apply
- macros/mm.diff.
-
- * troff/input.c (macro::print_size): Just print the size in bytes.
-
- * troff/div.c (return_request): Correct the argument
- interpretation.
-
-Wed Aug 1 12:38:36 1990 James Clark (jjc at yquem)
-
- * troff/node.h (class composite_node): Add sz member.
- * troff/node.c (composite_node::size): Return sz.
- * troff/input.c (macro_to_node): Use the initial size in the
- environment as the size of the composite_node.
-
- * troff/node.c (node::zero_width_tprint): Provide a reasonable
- default.
-
-Tue Jul 31 10:07:10 1990 James Clark (jjc at yquem)
-
- * troff/div.c (change_trap): If we get a bad number expression,
- do nothing.
-
-Mon Jul 30 10:30:49 1990 James Clark (jjc at yquem)
-
- * lib/matherr.c (matherr): Define this only if math.h defines
- TLOSS.
-
-Sun Jul 29 10:34:27 1990 James Clark (jjc at yquem)
-
- * troff/div.c (macro_diversion::distance_to_next_trap): If there
- no diversion trap return vunits(INT_MAX - vresolution).
-
-Sat Jul 28 14:28:14 1990 James Clark (jjc at yquem)
-
- * troff/input.c (do_zero_width): New implementation that doesn't
- use a temporary environment. Use instead:
- (token::add_to_node_list): New function.
- * troff/env.c (environment::get_prev_char_height),
- (environment::get_prev_char_height),
- (environment::get_prev_char_skew): New functions.
- (environment::get_prev_char): New function.
- (environment::get_prev_char_width): Change to use get_prev_char.
- (init_env_request): Implement new registers .cht, .cdp, .csk.
- * eqn/sqrt.c (sqrt_box::output): Don't rely upon the argument to
- \Z being processed in a separate environment.
-
-Fri Jul 27 10:21:25 1990 James Clark (jjc at yquem)
-
- * tbl/table.c: Removed TABLE_BOTTOM_REG.
-
- * tbl/table.c (table::init_output): In the section release macro,
- give a warning message if the section won't fit on one page.
-
- * tbl/table.c (table::do_top): Emit table keep only if table is
- boxed.
- (table::do_bottom): Likewise for table release.
- (table::table), (table::add_vertical_rule): Remove reference to
- keep member.
- * tbl/table.h: Remove keep member.
-
- * tbl/table.c: New register SUPPRESS_BOTTOM_REG. In
- SECTION_RELEASE_MACRO, if there's not enough space before the next
- trap to output the diversion, call T# ourselves, set
- SUPPRESS_BOTTOM_REG to 1, spring the trap, then set
- SUPPRESS_BOTTOM_REG back to 0. In T#, do nothing if
- SUPPRESS_BOTTOM_REG is non-zero. In T#, always mark the current
- vertical position and return to it before turning traps on again.
-
-Thu Jul 26 02:54:32 1990 James Clark (jjc at yquem)
-
- * troff/node.c, troff/node.h: In classes derived from node,
- replace prev_char_width method by last_char_node method.
- * troff/env.c (environment::get_prev_char_width): Use
- node::last_char_node rather than node::get_prev_char_width.
-
- * Makefile: Added comment about -fno-inline on 68030-based
- Apollos.
-
- * troff/reg.c (number_format_to_ascii), eqn/delim.c (DELIM_TABLE_SIZE),
- tty/tty.c (tty_font::load_tty_font), dvi/tfmtodit.c (main): Cast
- expressions using sizeof to int.
- * dvi/dvi.c (dvi_font::handle_x_command): Avoid long->int warnings.
-
- * macros/tmac.e (TS): Don't move @f back past the current
- position.
-
-Wed Jul 25 09:11:08 1990 James Clark (jjc at yquem)
-
- * ps/ps.c (main): Buffer stderr.
- * dvi/dvi.c (main): Likewise.
- * tty/tty.c (main): Likewise.
-
- * ps/ps.c (ps_printer::do_import): Improve error handling.
-
- * troff/input.c (abort_request): Use asciify.
-
- * driver/printer.h (printer::draw), driver/printer.c (printer::draw),
- ps/ps.c (ps_printer::draw), dvi/dvi.c (dvi_printer::draw): Make
- type of first argument int rather than char. This works around a
- bug on the 68030 based Apollo using g++ 1.37.1.
-
- * tbl/table.h (class table): Add `keep' member.
- * tbl/table.c (table::table): Initialize `keep'.
- (table::add_vertical_rule): Set `keep' to 1.
- (table::do_top): Only emit table keep macro is `keep' is non-zero.
- (table::do_bottom): Likewise for table release macro.
- (table::do_row): Emit section keep macro even if the row is 0.
-
-Tue Jul 24 08:35:07 1990 James Clark (jjc at yquem)
-
- * macros/tmac.e (@C): Preserve the font family across the change
- in environments.
-
-Mon Jul 23 10:15:23 1990 James Clark (jjc at yquem)
-
- * lib/font.c: Initialize font::hor and font::vert to 1.
- (font::load_desc): Check the values of font::hor and font::vert.
-
- * lib/lib.h: Added definition of INT_DIGITS. Fix it so that it can
- be included in a C compilation.
- (iftoa): Use INT_DIGITS. Include lib.h.
- (itoa): Likewise.
- (as_string): Likewise.
- * tbl/table.c: Removed definition of INT_DIGITS.
- * eqn/box.c (box::top_level): Use INT_DIGITS + 1 instead of 12.
- * troff/input.c (input_input_requests): Likewise.
- * ps/ps.c (make_encoding_name): Likewise.
- (ps_printer::set_style): Likewise.
- (ps_output::put_number): Use 1 + INT_DIGITS + 1 instead of 12.
-
- * tty/devascii/R.proto: Map fm onto '.
- * tty/devlatin1/R.proto: Likewise.
-
-Sat Jul 21 12:45:07 1990 James Clark (jjc at yquem)
-
- * tbl/table.c: Use ' instead of DELIMITER_CHAR in places where the
- argument to \w is at a different input level.
-
- * tbl/table.c (table::init_output): Define a new macro
- REPEATED_VPT_MACRO, like vpt but if in a diversion also
- transparently outputs itself.
- (table::define_bottom_macro): Use REPEATED_VPT_MACRO instead of
- vpt.
- (table::do_row): Likewise.
-
- * tbl/table.c (vertical_rule::print): Prefix the .sp -1 line with
- TRANSPARENT_STRING_NAME.
-
- * tbl/table.c (table::init_output): In the table release macro
- print an error message and don't produce any output if after
- issuing the need request the table still will not fit. Also
- remove the diversion after bringing it back.
-
- * tbl/table.c (table::init_output): Define a new macro
- REPEATED_MARK_MACRO, like mk but if in a diversion also
- transparently outputs itself.
- (table::do_row): Mark row_top_reg using REPEATED_MARK_MACRO. This
- is necessary because .TH might not call .T#.
- (table::do_top): Likewise TOP_REG.
- (table::define_bottom_macro): If TOP_REG is no longer valid, use
- #T - DOUBLE_LINE_SEP rather than #T. This is necessary because the
- table header might contain just the two top rules.
-
-Fri Jul 20 10:51:42 1990 James Clark (jjc at yquem)
-
- * troff/div.c: Implement new request `ptr' to print all traps.
-
- * troff/env.c (init_env_requests): Implement `.tabs' reg with
- init_string_env_reg.
- * troff/env.c (class tab_reg): Deleted.
-
-Thu Jul 19 12:07:16 1990 James Clark (jjc at yquem)
-
- * troff/div.c: New number register .pn returns the number of the
- next page as set by the pn request.
-
- * macros/tmac.an: Redid headers and footers. Number each manual
- entry starting from 1 unless \nC is > 0, like Sun. Added an
- optional 5th argument to .TH which specifies the manual name and
- appears in the center of the header. Understand the X, P and D
- registers like Sun.
-
-Wed Jul 18 10:23:31 1990 James Clark (jjc at yquem)
-
- * troff/env.c (init_env_requests): New number register `.lt' to
- return the title length.
-
- * troff/node.h (class transparent_dummy_node): New class.
- * troff/node.c (class transparent_dummy_node): Provide member
- functions.
- * troff/env.c (interrupt): Add a transparent_dummy_node, rather
- than a dummy_node.
-
- * troff/input.c (token::next): New escape sequence \).
- * troff/input.c (get_copy): Recognize \) in copy mode.
-
- * troff/input.c (input_stack::clear): New function.
- * troff/input.c (exit_request): Use input_stack::clear.
-
- * troff/token.h: Removed TOKEN_NO_PRINT_CHAR.
- * troff/input.c (token::process): Removed case TOKEN_NO_PRINT_CHAR.
-
- * troff/env.c: Move set_page_character to input.c. Move
- page_character to input.c also.
- * troff/env.c (title): Split off the reading of the parts of the
- title into read_title_parts.
- * troff/input.c (read_title_parts): New function. Check the
- input_level when testing whether a token matches the delimiter.
-
- * troff/input.c (exit_request): New function.
- * troff/input.c (init_input_requests): Bind ex request to
- exit_request rather than exit_groff.
-
- * troff/input.c (exit_groff): Call tok.next() before
- process_input_stack().
-
-Mon Jul 16 09:47:23 1990 James Clark (jjc at yquem)
-
- * troff/env.c: ifdef widow control support on WIDOW_CONTROL.
- * troff/env.h: ditto.
- * troff/input.c: ditto.
-
- * troff/env.c (environment::is_empty): Test pending_lines.
-
- * troff/env.c (environment::have_pending_lines): Removed.
-
- * troff/input.c: Add request to flush pending lines from the
- environment.
-
- * troff/env.c, troff/env.h: Add automatic widow control feature.
-
- * troff/input.c (exit_groff): Do process_input_stack() after
- do_break() but before setting exit_flag to 2.
-
- * troff/input.c: Remove FLUSH_PENDING_LINES and
- TOKEN_FLUSH_PENDING_LINES. Instead, flush pending lines from
- environment after END_TRAP token seen, but only if there aren't
- any more traps still unfinished.
- * troff/token.h: Remove TOKEN_FLUSH_PENDING_LINES.
-
-Sun Jul 15 10:50:08 1990 James Clark (jjc at yquem)
-
- * troff/env.c: Rename the `retain_size' member of class
- pending_output_line to `no_fill'.
-
- * troff/env.c (title): When the line is output, make the
- retain_size argument !fill.
-
- * troff/node.h: Add `hyphenated' member to struct breakpoint.
- * troff/node.c (space_node::get_breakpoints),
- (dbreak_node::get_breakpoints): Fill this in.
- * troff/env.c: Allow specification of maximum number of
- consecutive hyphenated lines.
-
- * troff/env.c (environment::is_empty): Add test for !current_tab.
-
-Sat Jul 14 11:23:01 1990 James Clark (jjc at yquem)
-
- * troff/env.c (environment::hyphenate_line): Don't completely give
- up if the word is not to be hyphenated; continue so that breaks
- can be made at break_char_node's.
-
- * lib/lib.h: Only define INT_MAX if it's not already defined;
- undef INT_MIN if it's already defined.
-
- * Makefile: Make it easy to define CFRONT_ANSI_BUG.
-
- * lib/lib.h: If CFRONT_ANSI_BUG is defined, cast INT_MIN to long.
- This works around a bug in AT&T C++ 2.0 used with an ANSI C
- compiler.
-
- * macros/tmac.an (an-header): Set no-space mode.
-
- * macros/tmac.an (TH): Start a new page if necessary.
-
- * Started using ChangeLog at version 0.4.
-
-Local Variables:
-version-control: never
-coding: latin-1
-End:
diff --git a/contrib/groff/ChangeLog.116 b/contrib/groff/ChangeLog.116
deleted file mode 100644
index ddbf22c2072d..000000000000
--- a/contrib/groff/ChangeLog.116
+++ /dev/null
@@ -1,1388 +0,0 @@
-
-Version 1.16.1 released
-=======================
-
-2000-07-31 Werner LEMBERG <wl@gnu.org>
-
- Preparing release 1.16.1.
-
- * REVISION: Revision number set to 1.
- * MORE.STUFF: Added info about port to DOS.
- * NEWS, win32-diffs: Updated.
-
- * src/include/nonposix.h: Remove first line -- this file is used
- in C also.
-
- * Makefile.in (dist): Delete Imakefile earlier to avoid a soft
- link to it.
-
-2000-07-30 Werner LEMBERG <wl@gnu.org>
-
- * doc/texinfo.tex: Update to latest version.
-
-2000-06-28 Paul Eggert <eggert@twinsun.com>
-
- * Makefile.in (ENVSETUP): Don't assume POSIX make semantics for
- commands that fail. Don't assume that "export a=b" is valid shell
- syntax. This is needed for Solaris 2.5.1.
-
- * src/libs/libgroff/tmpfile.cc, src/utils/indxbib/indxbib.cc: Fix
- comment about missing Solaris headers.
-
- * PROBLEMS: Add section about problems with Sun Make and VPATH.
-
-2000-06-25 Werner LEMBERG <wl@gnu.org>
-
- * src/devics/grodvi/dvi.cc: Replace _setmode() (for MSC) with
- SET_BINARY().
-
- * src/include/posix.h: Use HAVE_UNISTD instead of _MSC_VER.
-
- * win32-diffs: Updated.
- * README.WIN32: Added CRs to make all Windows editors happy.
-
- * src/roff/troff/node.cc: Added WIFSIGNALED() macro (copied from
- src/roff/groff/pipeline.c).
-
-2000-06-23 Eli Zaretskii <eliz@is.elta.co.il>
-
- * src/roff/grog/Makefile.sub (grog): Prepend `-e' to
- $(SH_SCRIPT_SED_CMD), for the case where its value is empty.
-
-2000-06-17 Eli Zaretskii <eliz@is.elta.co.il>
-
- * src/utils/tfmtodit/tfmtodit.cc: #include nonposix.h.
- (tfm::load, gf::load): Open tfm and gf files in binary mode: these
- are binary files.
- (main): Support non-Posix systems with several different styles of
- slash characters in file names.
-
- * src/utils/pfbtops/pfbtops.c: #include nonposix.h.
- (main) [SET_BINARY]: Switch stdin into binary mode.
-
- * src/utils/indxbib/indxbib.cc: #include nonposix.h.
- (main): Support file names with several possible slash-type
- characters, as given by DIR_SEPS[] in nonposix.h.
- (main) [__MSDOS__]: If renaming the temporary index file fails
- because it has more than one dot in its trunk, replace the dot
- with an underscore and try again.
- (do_file): Use FOPEN_RB instead of "r". Skip every CR before a
- Newline.
- [__MSDOS__ || _MSC_VER]: Stop at the first ^Z character.
-
- * src/utils/hpftodit/hpftodit.cc: #include nonposix.h.
- (File::File): Open the input file in binary mode. Strip CR
- characters from each CR-LF pair.
- (xbasename): Support file names with several possible slash-type
- characters, as given by DIR_SEPS[] in nonposix.h.
-
- * src/include/Makefile.sub (HDRS): Add nonposix.h.
-
- * src/roff/troff/node.cc [HAVE_UNISTD_H]: Include <unistd.h>.
- (WIFEXITED, WEXITSTATUS, WTERMSIG, WIFSTOPPED, WSTOPSIG)
- [!_POSIX_VERSION]: Define for traditional Unix systems.
- (real_output_file::real_output_file): Remove the MSVC-specific
- call to popen, use instead POPEN_WT, appropriately defined on
- nonposix.h. #include nonposix.h.
- (real_output_file::~real_output_file): Remove the MSVC-specific
- call to pclose, a suitable macro is now defined on nonposix.h.
- Use the portable macros WIFEXITED, WIFSIGNALED, WTERMSIG, WSTOPSIG
- and WEXITSTATUS instead of assuming traditional Unix
- interpretation of the status returned by pclose.
-
- * src/roff/troff/input.cc (pipe_source): Remove the MSVC-specific
- call to popen, use POPEN_RT instead (appropriately defined on
- nonposix.h). #include nonposix.h.
- (ps_bbox_request): Open the PostScript file in binary mode.
- Close the file after processing it.
- (getpid) [_MSC_VER]: Remove; a suitable macro is now defined on
- nonposix.h.
-
- * src/roff/groff/pipeline.c (run_pipeline) [__MSDOS__ || _WIN32]:
- A version of run_pipeline that doesn't use `fork'.
- (signal_catcher) [__MSDOS__ || _WIN32]: New function.
- (system_shell_name, system_shell_dash_c)
- (is_system_shell) [__MSDOS__ || _WIN32]: New functions, to hide
- the ugliness of testing DOS/Windows file names for equality, and
- support both stock shells and ports of Unix shells.
-
- * src/roff/groff/groff.cc: #include nonposix.h.
- (BSHELL): Definition moved to nonposix.h.
- (main): Use PATH_SEP[0] instead of literal ':'. Use BSHELL_DASH_C
- instead of a literal "-c".
- (xbasename): Support file names with several possible slash-type
- characters, as given by DIR_SEPS[] in nonposix.h.
- (possible_command::print): Use BSHELL_DASH_C and IS_BSHELL instead
- of literal strings.
-
- * src/preproc/soelim/soelim.cc: #include nonposix.h.
- (do_file): Use IS_ABSOLUTE instead of testing for a literal '/'.
-
- * src/preproc/pic/Makefile.sub (YTABH): Change pic.tab.h to
- pic_tab.h.
-
- * src/preproc/pic/lex.cc: Change pic.tab.h to pic_tab.h.
-
- * src/preproc/eqn/Makefile.sub (YTABH): Rename eqn.tab.h to
- eqn_tab.h.
-
- * src/preproc/eqn/lex.cc: #include eqn_tab.h, not eqn.tab.h.
-
- * src/libs/libgroff/tmpfile.cc (DEFAULT_TMPDIR) [P_tmpdir]: If
- P_tmpdir is defined, use it instead of the literal "/tmp".
- (remove_tmp_files, add_tmp_file): New functions.
- (xtmpfile): Record temporary files and register an atexit function
- to delete them explicitly, instead of relying on the OS to do
- that, which doesn't work on non-Unix systems.
-
- * src/libs/libgroff/searchpath.cc: #include nonposix.h.
- (search_path::search_path): Use PATH_SEP instead of a literal
- colon.
- (search_path::command_line_dir): Ditto.
- (search_path::open_file): Use IS_ABSOLUTE, PATH_SEP and DIR_SEPS,
- to support non-Posix systems.
-
- * src/libs/libbib/search.cc: #include nonposix.h.
- (search_list::add_file): Open the file in binary mode.
-
- * src/libs/libbib/linear.cc: #include nonposix.h.
- (file_buffer::load): Remove \r characters preceding \n from the
- loaded buffer.
-
- * src/libs/libbib/index.cc: #include nonposix.h.
- (make_index_search_item): Open index_filename in O_BINARY mode.
- (index_search_item_iterator::get_tag): Ditto. Remove \r
- characters before \n characters.
- (index_search_item::check_files): Open files in binary mode.
- (index_search_item::munge_filename): Support DOS-style file names
- with backslashes and drive letters, use IS_ABSOLUTE.
-
- * src/devices/grops/ps.cc: #include nonposix.h.
- (main) [SET_BINARY]: Switch stdout to binary mode.
-
- * src/devices/grolj4/lj4.cc: #include nonposix.h.
- (main) [SET_BINARY]: Switch stdout to binary mode.
-
- * src/devices/grolbp/lbp.cc: #include nonposix.h
- (fill_pattern) [SET_BINARY]: Switch stdout to binary mode.
-
- * src/devices/grodvi/dvi.cc: #include nonposix.h.
- [_MSC_VER]: Remove inclusion of Windows-specific headers (done by
- nonposix.h).
- (main) [SET_BINARY]: Switch stdout to binary mode.
- [_MSC_VER]: Remove an explicit call to _setmode.
-
- * src/include/nonposix.h: New file.
-
- * Makefile.in (ENVSETUP): New variable, to set up case-sensitive
- operation when building with DJGPP.
- ($(TARGETS), dot, $(LIBDIRS), $(CPROGDIRS), $(CCPROGDIRS))
- ($(DEVDIRS), $(TTYDEVDIRS), $(INCDIRS), $(OTHERDIRS)): Use
- ENVSETUP.
-
- * Makefile.comm: mv y.tab.[ch] to y_tab.[ch], to make it work on
- MS-DOS.
- (.man.n): Replace `;' with `|', since FONTPATH, MACROPATH,
- etc. can include a semi-colon on DOS/Windows.
- (depend.temp): Use depend1.temp instead of depend.temp1, to
- prevent files from overerwiting each other on 8+3 filesystems.
-
- * gendef.sh (t): Change definition to work with DOS/Windows.
-
- doc/groff.texinfo: Apart of some typo corrections, I also changed
- some index entris, to make them more non-ambiguous, and also put
- @ignore around some parts that are not yet written, to allow the
- Info output be readable.
-
-2000-06-10 Gael Queri <gqueri@mail.dotcom.fr>
-
- Replaced specific checks for function declarations with a generic
- routine taken from GNU bfd.
-
- * aclocal.m4 (GROFF_NEED_DECLARATION): New function.
- GROFF_PUTENV, GROFF_POPEN, GROFF_PCLOSE, GROFF_HYPOT: Removed.
- * configure.in: Use it.
- * src/devices/grolbp/lbp.cc, src/include/lib.h,
- src/preproc/grn/hgraph.cc, src/preproc/pic/pic.h,
- src/roff/groff/groff.cc: Use it.
- * Makefile.in, configure: Updated.
-
-2000-06-07 Paco Andrés Verdú <pandres@dragonet.es>
-
- * src/devides/grolbp/lbp.h: Removed unused variables.
-
-2000-05-31 Keith Thompson <kst@sdsc.edu>
-
- * src/devices/grolbp/lbp.cc (set_papersizes): Add declaration of
- strncasecmp().
-
-2000-05-31 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_SRAND): New function to test the return value
- of srand() -- at least SunOS 4.1.3 uses `int' instead of `void'.
- * configure.in: Use it.
- * src/preproc/pic/pic.y, src/preproc/pic/pic.cc: Use it.
- * configure, Makefile.in: Updated.
-
- * configure.in: Add test for strncasecmp().
- * src/include/lib.h: Use it.
-
-2000-05-29 Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
-
- * src/preproc/grn/Makefile.sub: Add MLIB.
-
-2000-05-29 Nix <nix@esperi.demon.co.uk>
-
- * Makefile.in: Use @datadir@ and @mandir@ appropriately.
-
-2000-05-29 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/grog/Makefile.sub, src/roff/grog/grog.sh: Add `@g@'.
-
- * PROBLEMS: Small update.
-
- * src/devices/grolbp/lbp.cc: Various small fixes.
-
-2000-05-28 Keith Thompson <kst@sdsc.edu>
-
- * src/roff/nroff/nroff.sh: Fix main loop syntax.
-
- * src/utils/indxbib/indxbib.cc: Add declaration of mkstemp().
-
-2000-05-25 Werner LEMBERG <wl@gnu.org>
-
- * man/roff.man: Removed unused macro.
-
-2000-05-24 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (dist): Remove src/xditview/Imakefile explicitly.
- This is needed e.g. if you do
- `make distclean; ./configure; make dist'.
-
-Version 1.16 released
-=====================
-
-2000-05-23 Werner LEMBERG <wl@gnu.org>
-
- Adding font CWI (constant width italic) to devdvi.
-
- * font/devdvi/CWI: New file.
- * font/devdvi/generate/Makefile: Add generating rule.
- * font/devdvi/DESC.in, font/devdvi/Makefile.sub, win32-diffs,
- tmac/tmac.dvi: Use it.
- * NEWS: Announce it.
-
- * font/devlj4/*: Regenerated (only adding kernings for `cq' glyph).
- * font/devlj4/generate/Makefile: Cosmetic changes only.
-
- * man/groff.man: Removed most of the redundant description of
- special characters (which is in groff_char.man). Added font
- translation CB->CR for devdvi. Other minor fixes.
-
- * tmac/tmac.dvi: Improved appearance of \(co (copyright) and \(rg
- (registered) symbols.
-
-2000-05-22 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile: Added rule for creating info files.
-
- * font/devdvi/*: Added kernings for `cq' glyph. Updated to latest
- AMS font metrics.
- * font/devdvi/generate/Makefile: Fixed dependencies.
-
- * font/devps/*: Regenerated. Heavy changes for Bookman and
- NewCentury Schoolbook!
- * font/devps/generate/afmname: Will now run with GNU awk.
- * font/devps/generate/textmap: Added forgotten `cq' glyph name.
- * font/devps/generate/Makefile: Cosmetic changes only.
-
-2000-05-21 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.an: Added a new command line option `-rSxx' (`xx' can be
- 10, 11, or 12) to support output with 11pt and 12pt base font sizes.
- `.SS' now produces a heading with a smaller size than `.SH'.
- Completely formatted.
- * doc/groff.texinfo, tmac/groff_man.man, NEWS: Document it.
-
- * man/groff.man: Improved table appearance. Use of `eo' request
- to reduce number of doubled backslashes in macro definitions.
- Replacing `\e' with `\(rs'. Other minor fixes.
-
- * src/preproc/tbl/main.cc: Insert HTML table end tag before `lf'
- to have correct line number.
-
- * INSTALL: Small improvement.
-
-2000-05-20 Bernd Warken <bwarken@mayn.de>
-
- * man/roff.man, tmac/groff_tmac.man: Updates (with corrections by
- WL).
-
-2000-05-19 Bernd Warken <bwarken@mayn.de>
-
- * man/groff.man: Complete update (with a lot of corrections by WL).
-
-2000-05-18 Werner LEMBERG <wl@gnu.org>
-
- Adding `cq' (PS name `quoteright') glyph name as an alias for "'".
-
- * font/*/*: Implement it.
- * man/groff_char.man, NEWS: Document it.
-
- * src/include/unix.h: Removed. It isn't used.
-
- * doc/groff.texinfo: Slight improvements.
-
-2000-05-17 Werner LEMBERG <wl@gnu.org>
-
- * README, win32-diffs: Small fixes and improvements.
-
-2000-05-16 Werner LEMBERG <wl@gnu.org>
-
- * FDL: New file (the Free Documentation License version 1.1).
-
- * doc/groff.texinfo: Added many start-up values for gtroff.
- Some structural improvements of the source code.
-
-2000-05-15 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc: Added small comment about troffrc-end.
- * src/roff/troff/troff.man: Added info about troffrc-end.
-
-2000-05-14 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (EXTRADIRS): Fix typos.
- (dist): Handle deletion of old .tar.gz file correctly.
- (DISTDIRS): Include all tty output devices.
-
- * doc/groff.texinfo: Adding more cross references; countless other
- fixes.
-
-2000-05-13 Werner LEMBERG <wl@gnu.org>
-
- * MORE.STUFF: Added Robert Marks's utilities.
-
-2000-05-12 Werner LEMBERG <wl@gnu.org>
-
- Added win32 port contributed by Blake McBride
- <blake@florida-software.com>.
-
- * README.WIN32, win32-diffs: New files.
- * NEWS: Updated.
-
- * src/preproc/grn/hgraph.cc (HGSetBrush): Replace `%lf' with `%f'.
- (tmove, tmove2): Added parentheses to avoid compiler warnings.
- (change): Removed unused variables.
-
- * src/preproc/grn/main.cc (main, conv): Removed unused variables.
- (savebounds): Changed return value from `int' to `void'.
- * src/preproc/grn/hdb.cc: Ditto.
-
- * src/devices/grolbp/lbp.cc (lbp_printer::draw): Removed superfluous
- final backslash in comment to avoid compiler warning.
-
- * src/utils/pfbtops/pfbtops.c: Added `getopt.h'.
-
- * doc/groff.texinfo: More fixes.
-
-2000-05-11 OKAZAKI Tetsurou <okazaki@be.to>
-
- * tmac/tmac.doc: Documentation fix.
-
-2000-05-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Reading the source code shows up a lot of
- omissions and incorrect data... More conversion to @Deffn macros.
-
-2000-05-10 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/reg.cc (number_value_to_ascii): Remove ASCII
- dependency.
-
- * src/roff/troff/request.h: Removing unused `no_break_flag'.
-
-2000-05-09 Werner LEMBERG <wl@gnu.org>
-
- * man/groff.man, man/roff.man, tmac/groff_tmac.man: Minor
- improvements.
-
- * doc/groff.texinfo: Extended history section. More conversion to
- @Deffn macros. More .tr documentation.
-
-2000-05-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Completed tab section. Added info about
- fields.
-
-2000-05-06 Mike MacIsaac <mikemac@us.ibm.com>
-
- * PROBLEMS: Describe configure script fix for OS/390 Unix.
-
-2000-05-05 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/DESC.in: Change size 11pt to 10.95pt (as used in
- LaTeX 2e).
- * NEWS: Document it.
-
- * man/troff.man: Minor optical improvements.
-
-2000-05-03 Werner LEMBERG <wl@gnu.org>
-
- Adding `dq' (PS name `quotedbl') glyph name as an alias for `"'.
-
- * font/*/*: Implement it.
- * man/groff_char.man, NEWS: Document it.
-
-2000-05-02 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_tmac.man, man/groff.man, man/roff.man: Fixing @MANxEXT@
- expansion.
- * NEWS: Document the three new man pages.
-
- * aclocal.m4 (GROFF_CXX_CHECK): Removing obsolete AC_C_CROSS call.
- * configure: Updated.
-
- * font/devcp1047/R.proto: Fixing fatal bug (a missing `"' character).
-
-2000-05-01 Werner LEMBERG <wl@gnu.org>
-
- Added grap support to grog.
-
- * src/roff/grog/grog.sh, src/roff/grog/grog.pl: Implement it.
- * src/roff/grog/grog.man: Document it.
-
- * doc/groff.texinfo, NEWS: Add info about grap support.
-
- Add new man pages comptributed by Bernd Warken <bwarken@mayn.de>
- (with slight fixes by me).
-
- * tmac/groff_tmac.man: New file documenting tmac mechanism.
- * tmac/Makefile.sub: Add groff_tmac.man.
- * man/roff.man: New file giving overview of roff system.
- * man/troff.man: A short reference of troff.
- * man/Makefile.sub: Add roff.man and troff.man.
-
-2000-04-30 Werner LEMBERG <wl@gnu.org>
-
- Added grap support to groff.
-
- * src/roff/groff/groff.cc: Implement it.
- * src/roff/groff/groff.man: Document it.
-
- * src/devices/grotty/grotty.man: Add cp1047 device.
- * src/preproc/eqn/eqn.man, src/preproc/eqn/neqn.sh, tmac/eqnrc:
- Ditto.
- * src/roff/groff/groff.man: Ditto.
- * src/roff/nroff/nroff.sh, src/roff/nroff/nroff.man: Ditto.
- * doc/groff.texinfo: Ditto.
-
- * tmac/troffrc: Fix mapping of latin-1 char 160 (non-breakable space)
- for cp1047.
-
-2000-04-29 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_char.man: Add `pc' glyph.
- * tmac/tmac.latin1: Replacing `md' glyph with `pc'.
- * tmac/tmac.tty: Add `pc' glyph.
- * tmac/tmac.tty-char: Use/add `pc' glyph. Don't call tmac.latin1 if
- we use cp1047 output device.
-
- * Makefile.in, aclocal.m4: Don't build utf8 on EBCDIC hosts since
- there are still hardcoded latin1->unicode values in utf8's font
- definition files.
- * configure: Updated.
- * NEWS: Minor clarification. Updated.
-
- * PROBLEMS: Formatted. Added info about C++ fix pack for OS/390
- Unix.
-
-2000-04-28 Werner LEMBERG <wl@gnu.org>
-
- Adding EBCDIC code page 1047.
-
- * font/devcp1047/R.proto, font/devcp1047/Makefile.sub,
- font/devcp1047/DESC.proto: New files.
-
- * aclocal.m4 (GROFF_EBCDIC): Introduce TTYDEVDIRS which can be
- either ascii/latin1 or cp1047.
- * Makefile.in: Use it.
- * configure: Updated.
-
- Replacing and/or adding `md' (mathdot) glyph with `pc'
- (periodcentered) in all text fonts.
-
- * font/*/*: Change it.
-
-2000-04-27 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_OS390): Fixing compiler flags.
-
- * configure.in: Add check for strings.h.
- * src/include/driver.h: Use HAVE_STRINGS_H.
- * src/devices/grolbp/lpb.cc: Remove string.h.
-
- * src/include/groff-getopt.h: New file. It will be used instead of
- getopt.h (to be included in lib.h) to avoid endless problems with
- picky C++ compilers.
- * src/include/lib.h: Use groff-getopt.h.
- * src/include/Makefile.sub: Updated.
-
- * configure: Updated.
- * Makefile.in: Updated.
-
- * NEWS: Mention EBCDIC support.
-
-2000-04-26 Werner LEMBERG <wl@gnu.org>
-
- * TODO: Some additions.
-
-2000-04-25 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man, doc/groff.texinfo: Fixing documentation
- of mso request.
-
-2000-04-23 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Minor fixes.
-
-2000-04-22 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man, doc/groff.texinfo, NEWS: Document the
- `.T' string register and the incompatible definition of the `.T'
- number register (compared to Unix troff).
-
- * man/groff_char.man: Add some missing characters.
- * font/devutf8/NOTES: Update.
-
-2000-04-21 Werner LEMBERG <wl@gnu.org>
-
- * src/include/htmlindicate.h, src/include/lib.h,
- src/include/posix.h: Fix copyright.
-
- * src/include/Makefile.sub: Update.
-
-2000-04-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (input_char_description): Removing
- superfluous space char.
-
- * tmac/tmac.X: Fix typo \(bq -> \(Bq.
-
- * doc/groff.texinfo: Document EBCDIC.
-
-2000-04-19 Werner LEMBERG <wl@gnu.org>
-
- Introducing `shc' as the glyph name for the soft hyphen character.
-
- * tmac/tmac.tty, tmac/tmac.latin1, tmac/tmac.html,
- font/devlatin1/R.proto: Use it.
-
- * NEWS: Updated.
-
-2000-04-18 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/ps.cc (ps_printer::flush_sbuf): Removing
- dependency on ASCII order.
-
-2000-04-16 Sandor BARANY <S.Barany@infosys.tuwien.ac.at>
-
- * src/libs/libgroff/illegal.c: Added EBCDIC table.
- * src/roff/troff/input.cc: Added adaptation to EBCDIC.
-
- * src/preproc/refer/refer.cc, src/roff/troff/env.cc: Minor changes
- to increase portability.
-
-2000-04-15 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4: Added GROFF_EBCDIC and GROFF_OS390 tests.
- Redefined AC_OUTPUT_MAKE_DEFS to replace ASCII character `012' with
- the generic `\n' if under OS/390 Unix.
-
- * configure.in: Call GROFF_EBCDIC and GROFF_OS390.
-
- * configure: Regenerated.
-
-2000-04-14 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More conversions to @Deffn.
-
-2000-04-12 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.psfig: Fix incorrect use of `&' operator by replacing it
- with `:'.
-
- * src/roff/nroff/nroff.man: Add note about tmac.tty-char.
-
-2000-04-10 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More conversions to @Deffn.
-
-2000-04-08 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/{getopt.c,getopt1.c}, src/include/getopt.h:
- Updated to latest version (glibc 2.1.3).
-
-2000-04-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile (clean): Include more index files.
- Add rule texinfo->dvi.
-
-2000-04-05 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added new index `op' for operators. More
- info on end of sentence characters. More use of @Deffn.
-
-2000-03-30 Werner LEMBERG <wl@gnu.org>
-
- * */*.man: Adding a note that a whitespace can be inserted between
- a command line option and its parameter -- we are using GNU getopt.
-
- * src/roff/groff/groff.man: Add example of `-m mandoc'.
-
-2000-03-28 Werner LEMBERG <wl@gnu.org>
-
- Correct anachronism of calling the man macro file with `-man'
- instead of `-m man' etc.
-
- * tmac/tmac.man, tmac/tmac.mandoc, tmac/tmac.markup, tmac/tmac.mdoc,
- tmac/tmac.me, tmac/tmac.ms: New files tmac.m<package> which simply
- load tmac.<package>.
-
- * tmac/Makefile.sub: Updated. Take care of $(tmac_an_prefix) etc.
-
- * NEWS: Updated.
-
- * doc/groff.texinfo: Updated.
-
- * tmac/groff_man.man: Copyright added.
-
-2000-03-27 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Introducing macros `Deffn' and `Defmac' to
- typeset the request resp. escape name with a tt font -- due to a
- bug in texinfo.tex it is necessary to use the `-e' switch with
- texi2dvi.
-
- Improving info about usage of groff units.
-
- Other minor fixes.
-
-2000-03-20 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added section about man macro package
- (I've basically taken groff_man.man). Introducing new indices `ma'
- for macros/strings and `gl' for glyph names. Other minor fixes.
-
- * tmac/groff_man.man: Fixed some typos.
-
-2000-03-19 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Removed all occurrences of `you', `we', etc.
- Other minor fixes.
-
- * doc/texinfo.tex: New file.
-
-2000-03-18 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Improved section on number registers. Other
- minor updates.
-
-2000-03-16 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man: Added info about grolbp. Make nicer
- synopsis.
-
- * src/devices/grolbp/grolbp.man, src/roff/nroff/nroff.man,
- src/devices/grolj4/grlj4.man, src/devices/grops/grops.man,
- src/preproc/eqn/eqn.man, src/utils/afmtodit/afmtodit.man,
- src/utils/tfmtodit/tfmtodit.man: Make nicer synopsis.
-
- * src/preproc/grn/grn.man: Better synopsis; added copyright.
-
- * src/roff/grog/grog.man: Updated copyright date.
-
-2000-03-14 Francisco Andrés Verdú <pandres@dragonet.es>
-
- * configure.in: Added test for strdup.
-
- * src/devices/grolbp/lbp.cc: Added a strdup() version in case none
- is available.
-
- Replaced dynamic allocation of arrays `[...]' with `new' operator.
-
- Other minor fixes.
-
-2000-03-12 OKAZAKI Tetsurou <okazaki@be.to>
-
- * Makefile.comm: Add $(INCLUDES) to $(ALL_CFLAGS).
-
-2000-03-11 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/hdb.cc (DBGetType): Added return value to make
- compilers silent.
- * src/preproc/grn/hgraph.cc: Add #ifdef for hypot().
- * src/include/lib.h: Remove some spaces.
-
-2000-03-10 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/tmpfile.cc (xtmptemplate, xtmpfile): Removing
- initializers from arguments (some compilers don't like this).
-
-2000-03-09 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/libs/libgroff/htmlindicate.cc: Added library file which is now
- used by pic and eqn to tell grohtml where the graphic regions start
- and end.
- * src/libs/libgroff/Makefile.sub: Use it.
- * src/preproc/eqn/main.cc, src/preproc/pic/troff.cc: Altered to use
- graphic_start() and graphic_end() from htmlindicate.cc.
-
-2000-03-09 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.safer: Will now work correctly in compatibility mode.
- * tmac/groff_man.man: More fixes.
-
-2000-03-08 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile: Added texput.log to the `clean' target.
- * doc/groff.texinfo: Added info about delimiters for escapes.
-
-2000-03-08 Bernd Warken <bwarken@mayn.de>
-
- * src/preproc/pic/pic.man: Add info on conversion of pic images to
- other graphic formats.
-
-2000-03-07 OKAZAKI Tetsurou <okazaki@be.to>
-
- * Makefile.in, Makefile.sub, src/preproc/eqn/Makefile.sub,
- src/roff/groff/Makefile.sub, src/roff/nroff/Makefile.sub,
- src/utils/afmtodit/Makefile.sub: Use $(INSTALL_SCRIPT) for script
- files.
-
-2000-03-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Spelling fixes.
-
-2000-03-06 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_man.man: Completely revised to cover everything in
- tmac.an.
-
- * doc/groff.texinfo, src/roff/troff/troff.man: Document evc request.
- Other minor fixings.
- * src/roff/troff/env.cc (environment_copy): Improve error message and
- fix itoa->i_to_a.
- * src/roff/troff/TODO: Updated.
-
- * doc/Makefile: Bug fixes -- this is still provisional, though...
-
- * tmac/eqnrc: Small fixes.
-
-2000-03-05 Abramo Bagnara <abramo@alsa-project.org>
-
- Adding a request `evc' to copy environments.
-
- * src/roff/troff/env.cc (environment::copy, environment_copy):
- Implement it.
- * src/roff/troff/env.h: Add prototype.
-
-2000-03-05 Francisco Andrés Verdú <pandres@dragonet.es>
-
- Adding strsep() -- Solaris 8 doesn't have it.
-
- * configure.in: Test it.
- * src/devices/grolbp/lbp.cc: Add code.
-
-2000-03-05 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/div.cc (macro_diversion::output,
- top_level_diversion::output): Fixing an incompatibility with
- original troff: \x'0' updates the .a register also. Thanks to
- <Andries.Brouwer@cwi.nl> for pointing this out.
- * doc/groff.texinfo: Document it.
-
- * Makefile.in: Create Makefile.dep if necessary before calling the
- submake process to avoid warning about nonexistent file.
-
- * NEWS, PROJECTS: Updated.
-
-2000-03-04 Werner LEMBERG <wl@gnu.org>
-
- * tmac/troffrc: Add tmac.lbp.
-
-2000-03-03 Francisco Andrés Verdú <pandres@dragonet.es>
-
- * tmac/tmac.lbp: New file.
- * src/devices/grolbp/grolbp.man: Add documentation of `lbpname'
- command.
-
-2000-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in: Fixing $(subdir).
-
- * README, NEWS: Small fixes.
-
- * test-groff: Adding path to grolbp.
-
- * configure.in: The (new) file src/xditview/Imakefile.in will be
- also configured -- it is now possible to build gxditview in a
- directory different from $srcdir.
-
-2000-03-02 Blake McBride <blake@florida-software.com>
-
- * src/libs/libgroff/searchpath.cc (open_file): Adapting to WinNT.
-
- * MORE.STUFF: Added website of bell labs and info about plot2dev.
-
-2000-03-01 Colin Phipps <crp22@cam.ac.uk>
-
- * src/utils/indxbib/indxbib.cc (main): Use mkstemp() for temporary
- files.
-
-2000-02-29 Werner LEMBERG <wl@gnu.org>
-
- Adding GNU getopt to the groff distribution.
-
- * src/include/getopt.h, src/libs/libgroff/{getopt.c,getopt1.c}:
- New files.
- * src/include/Makefile.sub, src/libs/libgroff/Makefile.sub: Update.
- * aclocal.a4: Remove GROFF_GETOPT function.
- * configure.in, Makefile.in, PROBLEMS: Update.
- * src/include/lib.h: Replace getopt tests with getopt.h.
- * src/devices/grolbp/lpb.cc: Remove inclusion of getopt.h.
-
- * doc/groff.texinfo: Further checking/updating. Adding more index
- entries.
-
- * man/groff_out.man: Fix nroff mode activation (for emacs).
- * man/groff_font.man: Add missing ligature.
-
-2000-02-28 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Further checking/updating. Adding more index
- entries.
-
- * src/devices/grolbp/grolbp.man: Added a comment line at the
- beginning of the file (similar to shell scripts) which indicates
- that `tbl' should be used as a preprocessor.
-
-2000-02-27 Blake McBride <blake@florida-software.com>
-
- Adapting groff to MS Visual C++ 6.0 compiler (tested with
- Windows NT 4.0). Uses _MSC_VER define where necessary.
-
- * src/devices/grodvi/dvi.cc: Making stdout a binary stream.
- * src/devices/grolj4/lj4.cc: Making getopt variables `extern "C"'.
- * src/devices/grohtml/html.cc, src/devices/grops/ps.cc,
- src/include/lib.h, src/libs/libgroff/errarg.cc,
- src/libs/libgroff/itoa.c, src/libs/libgroff/nametoindex.cc,
- src/preproc/refer/label.y, src/preproc/refer/label.cc,
- src/roff/groff/pipeline.c, src/roff/troff/column.cc,
- src/roff/troff/div.cc, src/roff/troff/env.cc,
- src/roff/troff/input.cc, src/roff/troff/node.cc,
- src/roff/troff/reg.cc: Renaming itoa() to i_to_a() and iftoa() to
- if_to_a() to avoid name clashes.
- * src/include/posix.h: Don't use unistd.h.
- * src/libs/libgroff/tmpfile.cc: Use `#ifndef...#else...#endif'
- clause for integrating non-Unix xtmpfile() code.
- * src/roff/troff/input.cc: Adding `public' keyword to macro_header
- structure; use "rt" for popen() in pipe_source(); add getpid()
- dummy function.
- * src/roff/troff/node.cc: Use special versions of popen() in
- real_output_file() and pclose() in ~real_output_file().
-
-2000-02-27 Werner LEMBERG <wl@gnu.org>
-
- Adding a new driver, grolbp, for Canon CAPSL printers (LBP-4 and
- LBP-8 series laser printers). This code has been contributed by
- Francisco Andrés Verdú <pandres@dragonet.es>.
-
- * src/devices/grolbp/*: The grolbp output device.
- * font/devlpb/*: The font description files.
- * Makefile.in: Add grolpb and devlbp subdirectories.
-
- * src/devices/grodvi/grodvi.man, src/devices/grolj4/grolj4.man,
- src/devices/grotty/grotty.man,src/roff/troff/troff.man: Minor
- typographic fixes.
-
- * doc/groff.texinfo: Further checking/updating. Adding more index
- entries.
-
- * NEWS: Updated.
-
- * src/devices/grolbp/Makefile.sub: Adding $(srcdir).
-
- * man/groff_font.man: Adding info about obsolete DESC keywords.
- * src/devices/grolj4/grolj4.man: Documenting additional DESC
- keywords.
-
-2000-02-26 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/grn.man: Added info about the gremlin file format
- (contributed by Daniel Senderowicz <daniel@synchrods.com>).
-
-2000-02-25 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/main.cc: Allow values of `narrow' parameter and
- friends to be non-integer.
-
- * src/preproc/grn/grn.man: Document it.
-
- * doc/groff.texinfo: Further checking/updating. Adding more index
- entries.
-
-2000-02-24 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/main.cc: Introduce BASE_THICKNESS, defining
- line thicknesses to be integer multiples of this value.
-
- * src/preproc/grn/grn.man: Commenting out the -s option -- the
- corresponding code doesn't work (yet).
-
- * doc/groff.texinfo: Further checking/updating. Adding more index
- entries.
-
-2000-02-23 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/{main.cc, hgraph.cc}: Using point units to
- specify line thickness instead of base units. The new default
- values are now 0.15,pt 0.45pt, and 0.75pt for thin, middle, and
- thick lines respectively.
-
- Removed unused variable `prevval'.
-
- * src/preproc/grn/grn.man: Updated.
-
-2000-02-22 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/main.cc: Slight formatting.
-
- * src/roff/groff/groff.man: Formatting fix.
- * src/preproc/grn/grn.man: Ditto.
-
- * src/roff/grog/grog.pl: Fixing two embarassing bugs.
-
- * doc/groff.texinfo: Further checking/updating.
-
-2000-02-21 Werner LEMBERG <wl@gnu.org>
-
- * README, INSTALL, PROJECT, PROBLEMS, BUGREPORT: Updated.
-
- * test-groff: Added grn subdir to path.
-
- * doc/groff.texinfo: Some restructing and other small improvements.
-
- * src/roff/groff/groff.cc (help): Fixed info string.
-
-2000-02-20 Werner LEMBERG <wl@gnu.org>
-
- * doc/meref.me: Fix description of .GS request.
-
- * src/roff/troff/troff.man: Fixing typo.
-
- Adding the `grn' preprocessor for gremlin graphic files.
-
- * src/preproc/grn/*: This is the Berkeley distribution written by
- David Slattengren and Barry Roitblat, adapted to groff by Daniel
- Senderowicz and Werner Lemberg.
-
- * doc/grnexampl.{me,g}: A sample for grn.
-
- * Makefile.in: Added subdirectory entry for grn.
-
- * src/roff/groff/groff.cc: Added support for grn. It can be now
- called with the switch `-g'.
-
- * src/roff/groff/groff.man: Updated.
-
- * src/roff/grog/grog.{man,pl,sh}: Updated.
-
- * NEWS: Updated.
-
-2000-02-11 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/include/lib.h: Added xtmptemplate and made xtmpfile
- parametrically polymorphic.
-
- * src/libs/libgroff/tmpfile.cc: Implemented xtmptemplate
- and the alterations to xtmpfile.
- xtmpfile can be requested to return the filename created
- and asked not to unlink the temp file. The default behaviour
- if parameters are absent is exactly the same as before.
-
-2000-02-11 Abramo Bagnara <abramo@alsa-project.org>
-
- A new request `length' is available which returns the length of a
- string in a number register:
-
- * src/roff/troff/input.cc (length_macro): Implement it.
- * src/roff/troff/input.cc (init_input_requests): Register it.
-
-2000-02-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, src/roff/troff/troff.man: Add documentation
- of the `substring' request.
-
- * src/roff/troff/troff.man, doc/groff.texinfo: Document `length'
- request.
-
- * src/roff/troff/TODO, NEWS: Updated.
-
-2000-02-09 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man: Added an example.
-
-2000-02-06 Werner LEMBERG <wl@gnu.org>
-
- I've considerably modified the directory structure of the
- distribution to get a more vertical layout. For example, the number
- of top level directories has been reduced from 42 to 6.
-
- As a consequence, many changes, especially to the makefiles, were
- necessary:
-
- * The makefile variables `top_builddir' and `top_srcdir' have been
- introduced. Virtually all relative paths have been replaced with
- absolute ones using these two variables.
-
- * Dependencies (in the files `Makefile.dep') are no longer part of
- the distribution. Instead, they are created during a `make install'
- in the build directory.
-
- * aclocal.m4 (GROFF_SRCDIR, GROFF_BUILDDIR): Two new functions to
- make `top_srcdir' and `top_builddir' absolute.
-
- Some other changes:
-
- * Man pages now depend on the files `VERSION' and `REVISION'.
-
- * The added shell script `mkinstalldirs' will replace `mkdir' in
- almost all cases.
-
- * VERSION: Version number increased to 1.16.
-
-2000-02-04 Werner LEMBERG <wl@gnu.org>
-
- * grops/psrm.cc (read_one_of): Fixed pointer incrementation.
-
- * Makefile.in: Removed $(tmac_m) since it is no longer needed
- (after an update of the mm stuff).
-
- * troff/Makefile.sub (majorminor.cc): Fix dependencies.
-
-2000-02-03 Werner LEMBERG <wl@gnu.org>
-
- The .psbb request will now also accept Mac PS images (i.e. using LF
- as the EOL character).
-
- * troff/input.cc (ps_get_line): New function, taken from psrm.cc
- (with slight modifications).
- * troff/input.cc (do_ps_file): Use it.
-
- * test-groff: Add grohtml and grolj4 output devices to PATH.
-
-2000-01-30 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, MORE.STUFF: Updated.
-
-2000-01-30 Cary D. Renzema <caryr@dollar.mxim.com>
-
- Add the `srand' command to pic.
-
- * pic/lex.cc, pic/pic.y: Implement it.
- * pic/pic.man: Document it.
- * pic/pic.cc, pic/pic.tab.h: Regenerated (with yacc).
-
-2000-01-30 Werner LEMBERG <wl@gnu.org>
-
- Add a new request `.psbb'. This does exactly what the external
- program psbb did. It scans a PostScript image file for a
- %%BoundingBox comment and extracts the bounding box values (in
- PostScript units) which are then stored in the four new (read-only)
- number registers `llx', `lly', `urx', and `ury'.
-
- This will allow the usage of the .PSPIC macro without worrying
- about unsafe behaviour of groff, i.e., it will work without the
- `-U' switch of groff.
-
- * troff/input.cc: Implement it.
- * tmac/tmac.pspic: Use it.
- * troff/troff.man, grops/grops.man, NEWS: Document it.
- * psbb/*, Makefile.in: Remove it since it is no longer needed.
-
- This is bloody C code simply adapted from psbb.c! Any improvements
- welcome.
-
-2000-01-29 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_font.man: Minor clarifications.
-
- * NEWS: Updated.
-
-2000-01-28 Werner LEMBERG <wl@gnu.org>
-
- * afmtodit/afmtodit.pl: Use new `--' comment delimiter.
-
-2000-01-28 Gaius Mulley <gaius@glam.ac.uk>
-
- * man/groff_font.man: Brought up to date regarding tcommand
- extensions.
- * libgroff/font.cc: Handle everything after `--' as a comment
- in the font files.
- * devps/*: Added comment delimiter inside devps font files.
-
-2000-01-28 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.arkup, tmac/groff_markup.man: Replace \fC...\fR with
- \fC...\fP (which now works as expected).
-
- * troff/troff.man: Fix typo.
-
-2000-01-27 Gaius Mulley <gaius@glam.ac.uk>
-
- Completed the pass_filenames implementation in troff.
-
- * libdriver/input.cc: Will read the new `F' tcommand.
- * troff/node.cc, troff/node.h: Will issue the new `F' tcommand.
- * troff/input.cc: Use it.
-
-2000-01-26 Werner LEMBERG <wl@gnu.org>
-
- * troff/env.cc (set_font): Fix the behaviour of \fP. The previous
- font will now be updated even if an invalid font is selected.
-
-2000-01-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/homepage.ms: Updated for new tmac.arkup.
-
- * tmac/tmac.html: Disable line breaks after hyphen-like characters.
-
- * tmac/tmac.arkup: Cleanup.
-
- Added `\&' to .HTML macro to `leave vertical mode', so to say.
-
- Removed obsolete .LINK macro completely.
-
- The macros .URL, .FTP, and .MAILTO now accept a third argument which
- will be immediately appended to the second argument (to be used with
- punctuation, for example).
-
- Disabled .CDFTP macro temporarily for security reasons.
-
- * tmac/groff_markup.man: Complete revision for latest changes in
- tmac.arkup -- note that it does not yet format correctly with
- grohtml :-(
-
-2000-01-23 Bruno Haible <haible@clisp.cons.org>
-
- * nroff/nroff.sh: Accept -Tutf8 option and pass it through.
- * devutf8/R.proto: Add mappings for wp, lh, rh.
- * devutf8/NOTES: Updated.
-
-2000-01-23 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Updated version/copyright info.
-
-2000-01-21 Gaius Mulley <gaius@glam.ac.uk>
-
- Added support for two new directives in device descriptions:
- `pass_filenames' (to pass the input file name to the output device)
- and `use_charnames_in_special' (to support e.g. accented characters
- in the `X' request).
-
- * include/font.h, troff/charinfo.h: Declare it.
-
- * libgroff/font.cc, libgroff/fontfile.cc: Set it.
-
- * devhtml/DESC: Use it.
-
- * troff/input.cc: New function encoded_char.
-
- * troff/token.h: Add test for `specialness'.
-
-2000-01-21 Werner LEMBERG <wl@gnu.org>
-
- * tmac/Makefile.sub: tmac.a4 and tmac.trace have been removed by
- mistake from the list of files to be installed.
-
-2000-01-18 Werner LEMBERG <wl@gnu.org>
-
- * README: Added info how to apply patches.
-
-2000-01-15 Jan Echternach <echter@informatik.uni-rostock.de>
-
- * troff/node.cc (ligature_note::operator delete): Fix g++ warning.
-
-2000-01-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * troff/input.cc: Add support for troffrc-end.
-
- * tbl/main.cc: Altered to issue table-start and table-end special
- characters if using the html device.
-
- * devhtml/*: Modified font files to incorporate html encoding of
- characters.
-
- * tmac/groff_markup.man: New file documenting tmac.arkup.
-
- * tmac/troffrc-end: New file. This is invoked after all user
- specified macros. Currently used by the html device to include
- tmac.html. Thus no need for users to specify -mhtml anymore.
-
- * tmac/Makefile.sub (NORMALFILES): Add troffrc-end.
- (MAN7): Add groff_markup.man.
-
- * tmac/tmac.an, tmac/tmac.html: Small html updates.
-
- * tmac/troffrc: tmac.arkup will now be called for the html device.
-
- * libgroff/font.cc, libgroff/font.h: Altered to include reading of
- extra device specific information about fonts.
-
- * doc/homepage.ms: New file. It is an example how an HTML home page
- could look like with grohtml.
-
- * doc/Makefile: Add homepage.ms. Remove rule for pic.html.
-
-2000-01-12 Bruno Haible <haible@clisp.cons.org>
-
- * devutf8/R.proto: Add mappings for ti, Fn, st, an. Change mappings
- of Im, Re.
-
- * devutf8/NOTES: Updated.
-
-2000-01-08 Bruno Haible <haible@clisp.cons.org>
-
- * eqn/box.cc, eqn/lex.cc, eqn/other.cc, eqn/over.cc, eqn/special.cc,
- eqn/text.cc, grodvi/dvi.cc, grops/ps.cc, grops/psrm.cc,
- libbib/index.cc, libbib/linear.cc, libbib/search.cc,
- libdriver/printer.cc, libgroff/font.cc, libgroff/string.cc,
- pic/lex.cc, pic/object.cc, refer/label.y, refer/ref.cc, tbl/main.cc,
- tbl/table.cc, tfmtodit/tfmtodit.cc, troff/dictionary.cc,
- troff/div.cc, troff/env.cc, troff/input.cc, troff/node.cc,
- troff/node.h, troff/reg.cc: Avoid most "g++ -Wall -Wno-sign-compare"
- warnings.
-
- * troff/node.cc (bracket_node::copy): Initialize last to NULL.
-
-2000-01-12 Fabrizio Polacco <fab@prosa.it>
-
- grolj4: Paper size will be searched case-insensitively.
-
- * include/lib.h: Add check for strcasecmp().
- * grolj4/li4.cc (lookup_paper_size): Use strcasecmp().
- * configure.in: Check for strcasecmp().
-
-2000-01-11 Werner LEMBERG <wl@gnu.org>
-
- * troff/Makefile.sub (majorminor.cc): Fix incorrect path to
- `REVISION'.
-
-2000-01-10 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.comm, Makefile.in, doc/Makefile: More fixes for the
- revision scheme.
-
- Add a new read-only register, `.Y', which contains the groff
- revision.
-
- * troff/input.cc (init_input_requests): Define it.
- * troff/Makefile.sub (majorminor.cc): Define `revision' string.
- * doc/groff.texinfo, troff/troff.man: Document it.
-
- * libgroff/Makefile.sub (version.cc): Add definition of
- `Version_string[]', consisting of `<major>.<minor>.<revision>'
- * eqn/main.cc, grodvi/dvi.cc, grolj4/lj4.cc, grops/ps.cc,
- grotty/tty.cc, hpftodit/hpftodit.cc, indxbib/indxbib.cc, pic/main.cc,
- refer/refer.cc, soelim/soelim.cc, tbl/main.cc, tfmtodit/tfmtodit.cc,
- troff/input.cc, pfbtops/pfbtops.c: Use it.
-
-2000-01-10 Fabrizio Polacco <fab@prosa.it>
-
- Add a revision scheme to the groff package.
-
- * REVISION: New file.
- * libgroff/Makefile.sub (version.cc): Use it to define
- `revision_string[]'.
- * grops/psrm.cc: Use revision_string (converted to an unsigned
- integer) in constructor of resource_manager.
-
-2000-01-10 Bruno Haible <haible@clisp.cons.org>
-
- * devutf8/Makefile.sub, devutf8/DESC.proto, devutf8/R.proto: New
- files.
- * Makefile.in (DEVDIRS): Add devutf8.
- * grotty/tty.cc: Include device.h.
- (glyph): Change type of `code' to `unsigned int'.
- (tty_printer): New field is_utf8. Constructor takes device argument.
- (tty_printer::tty_printer): If device if `utf8', set is_utf8.
- (tty_printer::add_char): Change type of first arg to `unsigned int'.
- (tty_printer::put_char): New function.
- (tty_printer::end_page): Use put_char() instead of ::putchar().
- (make_printer): Pass device to tty_printer constructor.
- * nroff.sh: Determine default device by calling 'locale'. As a
- fallback, look at all of $LC_ALL, $LC_CTYPE, $LANG, $LESSCHARSET.
- Recognize UTF-8 locales.
- * tmac/eqnrc: Recognize utf8 like latin1.
- * tmac/troffrc: Device utf8 needs tmac.tty.
-
-2000-01-07 Werner LEMBERG <wl@gnu.org>
-
- * tmac/Makefile.sub: tmac.a4 and tmac.trace will now be installed.
-
-2000-01-07 Paul Eggert <eggert@twinsun.com>
-
- Add a new predefined writeable number register, `year',
- which contains the current year.
-
- * doc/groff.texinfo, PROBLEMS, troff/troff.man: Document it.
- * tmac/tmac.s: Use it.
- * troff/input.cc (init_registers): Initialize it.
-
-2000-01-06 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Fixed typo.
-
-2000-01-04 Paul Eggert <eggert@twinsun.com>
-
- * PROBLEMS: Add Y2k advice for the yr number register.
-
-2000-01-03 Paul Eggert <eggert@twinsun.com>
-
- * doc/groff.texinfo: Fix Y2k bug in documentation of \n(yr.
-
-2000-01-02 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.arkup: Slight modification of macros to provide better
- appearance for non-HTML formats.
-
-2000-01-01 Charles Levert <charles@comm.polymtl.ca>
-
- * soelim/soelim.cc (include_path_append): realloc(NULL, n)
- does not automatically translate to malloc(n) on all OSes
- (e.g., SunOS) so do it explicitly. Also, check the returned
- value.
-
-2000-01-01 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.arkup: Added .LINE macro. Some formatting.
-
- * Makefile.in: Added $(tmac_m) again since the Makefile in `mm'
- expects this variable
-
-2000-01-01 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/Makefile: Added instructions to create HTML and text
- versions of some files.
-
-1999-12-31 Werner LEMBERG <wl@gnu.org>
-
- * Updated INSTALL.gen.
-
- * tmac/tmac.arkup: Added fixes so that .FTP and .MAILTO works
- better resp. correctly with non-HTML devices.
-
-Local Variables:
-version-control: never
-coding: latin-1
-End:
diff --git a/contrib/groff/ChangeLog.117 b/contrib/groff/ChangeLog.117
deleted file mode 100644
index 609eaa7595fe..000000000000
--- a/contrib/groff/ChangeLog.117
+++ /dev/null
@@ -1,2190 +0,0 @@
-
-Version 1.17.2 released
-=======================
-
-2001-07-07 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/indxbib/indxbib.cc (main): Change type of `name_max'
- to size_t.
-
-2001-07-06 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Rv): Make `Rv' really not parseable.
- Fix synopsis.
- * tmac/groff_mdoc.man: Fix synopsis.
-
-2001-07-05 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (doc-inset-list, doc-hang-list, doc-ohang-list):
- Restore `doc-Pa-font'.
-
-2001-07-04 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/indxbib/dirnamemax.c: Moved to ...
- * src/libs/libgroff/maxfilename.cc: Here.
- s/dir_name_max/file_name_max/.
- Add copyright.
- * src/include/lib.h: Add file_name_max.
- * src/utils/indxbib/indxbib.cc: Updated.
- * src/utils/indxbib/Makefile.sub, src/libs/libgroff/Makefile.sub:
- Updated.
-
- * src/libs/libgroff/tmpfile.cc (TMPFILE_PREFIX) [__MSDOS__]: Define
- as empty.
- (xtmpfile) [_MSC_VER]: Removed -- MSVC has mktemp().
-
- * src/preproc/html/pre-html.cc (PAGE_TEMPLATE, PS_TEMPLATE,
- REGION_TEMPLATE): New macros.
- (createAllPages, makeTempFiles): Use them.
- Include `nonposix.h'.
- (html_system): New function.
- (createAllPages, createImage): Use it.
- Use EXE_EXT.
-
- * tmac/www.tmac: Fix typos.
-
-2001-07-03 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac: Disable hyphenation in normal text only if output
- device is html.
- (URL, FTP, MAILTO): Disable hyphenation of actual URL with `\%'.
- * tmac/groff_mwww.man, NEWS: Updated.
-
-2001-07-03 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/www.tmac (.IMAGE): Add fourth parameter to specify vertical
- image location.
-
-2001-07-02 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common, tmac/doc.tmac (doc-display-ft-stack,
- doc-display-ps-stack): Implement font and font size stack for
- displays.
-
-2001-07-02 Werner LEMBERG <wl@gnu.org>
-
- * REVISION: Increased to 2.
- * src/roff/troff/input.cc (read_size): Fix special case `\s[0]'.
-
- * src/groff/grog/grog.pl (process): Handle `Oo' and `Oc' not at the
- beginning of a line.
- * src/groff/grog/grog.sh: Ditto.
-
-2001-06-29 Peter Marquardt <wwwutz@molgen.mpg.de>
-
- * src/preproc/eqn/neqn.sh: Put `export' keyword in a new line to
- make it portable.
-
-2001-06-27 Werner LEMBERG <wl@gnu.org>
-
- Fix problems with preprocessor string for `man' program.
-
- * *.man: Don't use `s' in preprocessor string -- it doesn't exist.
- Updated/added copyright.
- Moved Emacs's local variable to identify nroff mode to the end of
- the file; add local variable if missing.
-
-2001-06-26 Andras Salamon <andras@cs.wits.ac.za>
-
- * aclocal.m4: Replace AC_LANG_SAVE + AC_LANG_CPLUSPLUS with
- AC_LANG_PUSH(C++) and AC_LANG_RESTORE with AC_LANG_POP(C++).
- * configure: Regenerated.
-
-2001-06-25 Andras Salamon <andras@cs.wits.ac.za>
-
- * aclocal.m4 (GROFF_PAGE): Fix page detection code.
- * configure: Regenerated.
-
-2001-06-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/homepage.ms: Don't include arkup.tmac (which no longer exists)
- but www.tmac.
- * doc/pic.ms: Fix typos.
-
-Version 1.17.1 released
-=======================
-
-2001-06-21 Golubev I. N. <gin@mo.msk.ru>
-
- * aclocal.m4 (GROFF_NEED_DECLARATION): Fix inclusion of strings.h.
- * configure: Updated.
-
-2001-06-20 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/preproc/html/pre-html.cc (make_message): Fix incorrect
- image names.
- * src/roff/troff/dic.cc (blank_line): Add html tag.
-
-2001-06-19 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/input.cc (do_suppress): Fix typo.
-
-2001-06-18 Gaius Mulley <gaius@glam.ac.uk>
-
- Added two new options (-D and -I) to specify image names and a
- subdirectory to place the images in.
-
- Change syntax from \\Ox to \\O[x].
-
- * src/devices/grohtml/post-html.cc (main): Add options.
- (usage): Updated.
- * src/preproc/html/pre-html.cc: Include `stdarg.h'.
- Use `NULL' instead of `0' for null string pointers.
- (MAX_RETRIES): New macro.
- (lengthOfintToStr, intToStr, make_message): New functions.
- (makeFileName): Make function static.
- Implement -D and -I options.
- (checkImageDir): New function.
- (write_end_image, write_start_image): Use new syntax of \O.
- (createAllPages, removeAllPages): Implement -D and -I options. Use
- make_message().
- (createImage): Use make_message().
- (addps4html): Add guard for malloc().
- (usage, scanArguments): Updated.
- (makeTempFiles): Use mkstemp().
- (removeTempFiles): Use unlink().
- (findPrefix): Add guard for malloc().
- (main): Updated.
- * src/roff/troff/input.cc (get_delim_file_name): New function to
- parse \O.
- (do_suppress): Updated to parse new syntax.
- * src/devices/grohtml/grohtml.man: Updated.
- * tmac/www.tmac: Updated to new syntax.
-
- * NEWS: Updated.
-
-2001-06-15 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/grog/Makefile.sub: Remove NAMEPREFIX.
-
- * src/devices/grohtml/grohtml.man: Minor improvements.
-
-2001-06-14 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/Makefile.sub: Remove NAMEPREFIX.
-
-2001-06-11 Werner LEMBERG <wl@gnu.org>
-
- * man/roff.man, mann/groff.man: Use '\" instead of .\" in the first
- line to specify preprocessor options -- mandb 2.3.1 only recognizes
- the former.
- * src/preproc/grn/grn.man: Add proper '\" string.
-
-2001-06-11 OKAZAKI Tetsurou <okazaki@be.to>
-
- * test-groff: Don't use PATH but GROFF_BIN_PATH.
-
-2001-06-08 Werner LEMBERG <wl@gnu.org>
-
- Updated to autoconf 2.50.
-
- * configure.in: Renamed to...
- * configure.ac: This.
- * aclocal.m4 (AC_OUTPUT_MAKE_DEFS): Removed.
- (GROFF_OS390): Updated.
- * configure: Regenerated.
-
-2001-05-18 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.c, src/roff/troff/env.h,
- src/roff/troff/input.cc, src/roff/troff/troff.man: Undo `ss' change
- from 2000-12-21.
-
-2001-05-17 Jeffrey Friedl <jfriedl@yahoo-inc.com>
-
- * src/roff/troff/input.cc (read_size): Fix special case `\s0'.
-
-2001-05-16 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (read_size): Emit warning if value becomes
- less than or equal zero; set it to 1 then.
- * src/roff/troff/node.h (node::node): Initialize `last'.
-
-2001-05-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Make predefined strings work in compatibility
- mode.
- Add troff version guard.
- * tmac/doc.tmac: Simplify version guard.
-
-2001-05-07 Werner LEMBERG <wl@gnu.org>
-
- The .ns and .rs requests are now honoured not only in the top-level
- but in all diversions (similar to UNIX troff).
-
- This change is based on a patch from Tadziu Hoffmann
- <hoffmann@usm.uni-muenchen.de>.
-
- * src/roff/troff/div.h (diversion): Add `no_space_mode' member.
- (top_level_diversion): Remove `no_space_mode' member.
- * src/roff/troff/div.cc (diversion::diversion,
- top_level_diversion::top_level_diversion): Updated.
- (macro_diversion::output): Reset `no_space_mode'.
- (no_space, restore_spacing): Use `curdiv' unconditionally.
- (space_request, blank_line): Check `curdiv->no_space_mode'.
- (no_space_mode_reg::get_value, no_space_mode_reg::get_string): Use
- `curdiv' unconditionally.
- * NEWS, src/roff/troff/troff.man, man/groff.man, doc/groff.texinfo:
- Updated.
-
-2001-05-06 Werner LEMBERG <wl@gnu.org>
-
- Added two new requests `de1' and `am1' which are similar to `de' and
- `am' with the difference that compatibility mode is saved on entry,
- switched off during macro execution, and restored on exit.
-
- * src/roff/troff/input.h: Added two new special characters
- (COMPATIBLE_SAVE, COMPATIBLE_RESTORE).
- * src/roff/troff/input.cc (input_iterator): Added two member
- functions `save_compatible_flag' and `get_compatible_flag'.
- (input_stack): Ditto.
- (string_iterator): Ditto. Also add private member
- `saved_compatible_flag'.
- (token::next): Use COMPATIBLE_SAVE and COMPATIBLE_RESTORE.
- (calling_mode): New enumeration.
- (do_define_macro): Use it. Insert COMPATIBLE_SAVE and
- COMPATIBLE_RESTORE at the beginning and end of macro, respectively.
- (define_macro, define_indirect_macro, append_macro, ignore): Use
- `calling_mode'.
- (define_nocomp_macro, append_nocomp_macro): New functions.
- (init_input_requests): Updated.
- (do_request): Rename local variable `saved_compatible_flag' to
- `old_compatible_flag'.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
- * tmac/an-old.tmac: Use `de1' instead of `de' request for all
- public and trap-invoked macros. As a consequence, the man macros
- work in compatibility mode also.
-
-2001-05-06 Solar Designer <solar@openwall.com>
-
- * Makefile.in: Use $(mandir).
-
-2001-05-06 Alexios Zavras <zvr@pobox.com>
-
- * src/utils/afmtodit/afmtodit.pl: Fix serious typo.
-
-2001-05-05 Werner LEMBERG <wl@gnu.org>
-
- Added `.ns' number register: Returns 1 in no-space mode (if in
- top-level diversion), 0 otherwise.
-
- * src/roff/troff/div.cc (no_space_mode_reg): New class.
- (init_div_requests): Updated.
- * NEWS, src/roff/troff/troff.man, man/groff.man, doc/groff.texinfo:
- Document it.
-
-2001-05-04 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/nroff/nroff.man: Improved documentation (especially
- locales).
-
-2001-05-02 Werner LEMBERG <wl@gnu.org>
-
- Added `brp' request: This is \p as a request.
-
- * src/roff/troff/env.cc (environment::do_break): Add parameter
- `spread'.
- (do_break_request): New function (was `break_request').
- (break_request): Calls `do_break_request'.
- (break_spread_request): New; calls `do_break_request'.
- (init_env_requests): Updated.
- * src/roff/troff/env.h: Updated.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
- * REVISION: Increased to 1.
- * win32-diffs: Updated.
-
-2001-05-01 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Fix minor compatibility mode issue.
- * tmac/troffrc-end: Make it really work in compatibility mode.
-
-2001-04-27 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/lkbib/lkbib.cc: Switch inclusion order of stdio.h and
- stdlib.h.
-
-2001-04-22 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/getopt.c, src/include/getopt.h: Updating to
- latest versions from glibc CVS archive.
-
- * MORE.STUFF: Updated, using a patch from Kees Zeelenberg
- <c.zeelenberg@hccnet.nl>.
-
-2001-04-21 Werner LEMBERG <wl@gnu.org>
-
- * configure.in: Move check for mkstemp() to...
- * aclocal.m4 (GROFF_MKSTEMP): This new function.
- * configure: Regenerated.
-
- * src/include/groff-getopt.h: Don't use variable names in
- declarations.
-
- * src/devices/grohtml/html-chars.h: Removed. It isn't used.
- * src/devices/grohtml/Makefile.sub,
- src/devices/grohtml/post-html.cc: Updated.
-
-2001-04-21 Albert Chin-A-Young <china@thewrittenword.com>
-
- * configure.in: Add special check for mkstemp().
- * src/libs/libgroff/tmpfile.cc: Use it.
- * src/utils/indxbib/indxbib.cc: Ditto.
- * src/utils/pfbtops/pfbtops.c (main): Don't use C++ comment style.
- * src/devices/grolbp/lbp.h (lbpprintf, lbpputs, vdmprintf): Use
- `const'.
-
-2001-04-20 Bruce Lilly <blilly@erols.com>
-
- `Version_string' as C++ object was not visible to linker from C
- object files.
- Add `const' to `Version_string'.
-
- * src/utils/pfbtops/pfbtops.c (main), src/roff/groff/groff.cc
- (main), src/roff/troff/input.cc (main), src/preproc/tbl/main.cc
- (main), src/preproc/pic/main.cc (main), src/preproc/eqn/main.cc
- (main), src/preproc/grn/main.cc (main), src/preproc/html/pre-html.cc
- (scanArguments), src/preproc/refer/refer.cc (main),
- src/preproc/soelim/soelim.cc (main), src/devices/grotty/tty.cc
- (main), src/devices/grodvi/dvi.cc (main), src/devices/grolj4/lj4.cc
- (main), src/devices/grohtml/post-html.cc (main),
- src/devices/grolbp/lbp.cc (main), src/utils/tfmtodit/tfmtodit.cc
- (main), src/utils/hpftodit/hpftodit.cc (main),
- src/utils/lookbib/lookbib.cc (main), src/utils/indxbib/indxbib.cc
- (main), src/utils/lkbib/lkbib.cc (main),
- src/utils/addftinfo/addftinfo.cc (main): Implement it.
-
- * src/roff/groff/pipeline.c: Add _UWIN.
- * src/include/nonposix.h: Ditto.
-
-2001-04-20 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Use HAVE_STRERROR.
- * src/roff/groff/pipeline.c: Ditto.
- * src/preproc/html/pre-html.cc: Remove declaration of `strerror'.
- * src/libs/libgroff/Makefile.sub (version.cc): Add `extern "C"'.
- * src/utils/pfbtops/pfbtops.c: Add copyright notice.
- * win32-diffs: Updated.
- * src/utils/hpftodit/hpftodit.cc (read_map): Fix compiler warning.
-
-2001-04-19 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/pre-html.cc (scanArguments): Use `troff_command'
- instead of hardwired `"troff"'.
- (char_buffer::read_file): Remove unused variables.
- (char_buffer::write_file_troff): Ditto.
- (char_buffer::write_file_html): Ditto.
- (generateImages): Ditto.
- (abs): Removed.
- * src/utils/addftinfo/addftinfo.cc (main): Fix compilation problem.
-
- * src/include/lib.h: Don't include `groff-getopt.h' for UWIN.
-
- * src/libs/libgroff/font.cc (font::load_desc): Fix compiler warning.
- * src/libs/libbib/index.cc (index_search_item_iterator::get_tag,
- index_search_item::search1): Ditto.
- * src/roff/troff/node.h (width_list): Reorder members.
- * src/roff/troff/input.cc (do_define_macro): Fix compiler warning.
- (lookup_warning): Ditto.
- (prepend_string): Commented out.
- * src/roff/troff/dictionary.cc (is_good_size): Fix compiler warning.
- * src/roff/troff/reg.cc (number_value_to_ascii): Ditto.
- * src/preproc/tbl/main.cc (process_format): Ditto.
- * src/preproc/pic/pic.y (define_variable, reset, reset_all): Fix
- compiler warnings.
- * src/preproc/pic/pic.cc: Updated.
- * src/preproc/eqn/lex.cc (init_table): Fix compiler warnings.
- * src/preproc/eqn/over.cc (over_box::compute_metrics): Ditto.
- * src/preproc/refer/command.cc (execute_command): Ditto.
- * src/preproc/refer/ref.cc (sortify_title, find_month): Ditto.
- * src/preproc/refer/token.cc (lookup_token): Ditto.
- * src/preproc/soelim/soelim.cc: Ditto.
- * src/preproc/html/pushbackbuffer.cc (ERROR): Ditto.
- (isHexDigit): Commented out.
- (pushBackBuffer::isString): Remove unused variable.
- * src/devices/grops/ps.cc (ps_printer::special): Fix compiler
- warning.
- * src/devices/grops/psrm.cc (resource_manager::lookup_font,
- resource_manager::read_resource_arg, read_one_of, parse_extensions):
- Ditto.
- * src/devices/grodvi/dvi.cc (dvi_printer::draw): Ditto.
- * src/devices/grolj4/lj4.cc (lj4_font::handle_unknown_font_command,
- lookup_paper_size): Ditto.
- * src/devices/grohtml/post-html.cc (is_subsection): Commented out.
- (text_glob, element_list): Reorder members.
- * src/devices/grohtml/html-text.cc (html_text::do_pre): Remove
- compiler warning.
- * src/devices/grohtml/html-text.h (html_text::emit_space): Change
- return value to `void'.
- * src/devices/grohtml/output.cc (word_list::word_list): Fix order
- of initializers.
- * src/devices/grohtml/html.h (simple_output::check_newline,
- simple_output::space_or_newline, simple_output::enable_newlines):
- Add return value.
- * src/devices/grolbp/lbp.cc (wp54charset, set_papersize): Remove
- compiler warnings.
- * src/utils/tfmtodit/tfmtodit.cc (tfm::load, gf::load, main): Ditto.
- * src/utils/hpftodit/hpftodit.cc (File::seek, read_symbol_sets,
- output_ligatures, output_charset, read_map): Ditto.
- * src/utils/lookbib/lookbib.cc (main): Ditto.
- * src/utils/indxbib/indxbib.cc (main, fwrite_or_die): Ditto.
- (do_file): Fix typo (`=' -> `==').
- * src/utils/lkbib/lkbib.cc (main): Remove compiler warning.
- * src/utils/addftinfo/addftinfo.cc (main): Ditto.
-
-2001-04-18 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/roff/nroff/nroff.sh: Adding -p (pic) and -t (tbl) options.
- Fix usage of GROFF_BIN_PATH.
- * src/roff/nroff/nroff.man: Updated.
-
-2001-04-18 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Fixing typos.
- Updated.
-
-Version 1.17 released
-=====================
-
-2001-04-17 Werner LEMBERG <wl@gnu.org>
-
- * tmac/Makefile.sub (install-data): mdoc.local-s is in current
- directory, not in $(srcdir).
-
-2001-04-16 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More info on conditionals.
-
-2001-04-15 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added some info about groff internals.
-
- * src/roff/troff/node.cc (make_glyph_node): Emit warning message
- about missing special character only if the name is non-null.
-
-2001-04-14 Werner LEMBERG <wl@gnu.org>
-
- Removing the grohtml-old device driver which is now obsolete.
-
- * src/devices/grohtml-old/*: Removed.
- * font/devhtml-old/*: Removed.
- * src/libs/libgroff/htmlindicate.cc (graphic_start, graphic_end):
- Remove comments.
- * Makefile.in (CCPROGDIRS, DEVDIRS): Updated.
- * test-groff (PATH): Updated.
- * tmac/Makefile.sub (NORMALFILES): Updated.
- * tmac/an-old.tmac: Remove special code for html-old device.
- Replace `html-or-html-old' register with `an-html'.
- * tmac/eqnrc: Updated.
- * tmac/html-old.tmac: Removed.
- * tmac/troffrc, tmac/troffrc-end: Updated.
- * tmac/www.tmac: Remove special code for html-old device.
- Replace `html-or-html-old' register with `www-html'.
-
- * src/libs/libgroff/tmpfile.cc (remove_tmp_files),
- src/libs/libgroff/htmlindicate.cc (graphic_end),
- include/htmlindicate.h, src/preproc/grn/*.cc,
- src/roff/groff/env.{cc,h}: Remove `void' parameter if used as a
- single argument for consistency with rest of source code.
-
- * aclocal.m4, tmac/an-old.tmac: Fix copyright.
-
-2001-04-13 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/roff/troff/troff.man: Fixing typos.
-
-2001-04-13 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Fixing many font switches.
- * doc/groff.texinfo: Fixes, additions.
- * MORE.STUFF: Updated.
-
-2001-04-12 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/grohtml.man: Updated manual page regarding
- simple anchor.
- * src/preproc/html/pre-html.cc (createImage): Fixed right hand
- cropping of images.
- (removeTempFiles): New function to tidy up temporary files.
- * src/preproc/html/pre-html.cc (main): Calls `removeTempFiles()'.
- Many fixes to do with the new inline suppress node and image regions
- are much tighter.
- * src/devices/grohtml/post-html.cc: New method `is_auto_img'.
- (generate_img_src): New function.
- (html_printer::do_auto_image): Utilizes it.
- (do_heading, do_title): Include inline images within their contents.
- (html_printer::begin_page): Tidied up comments that are issued to
- the html output file.
- (html_printer::do_fill): Fixed so that `.nf' works with fonts other
- than courier.
- (text_glob::is_br): New method used by do_heading.
- * tmac/s.tmac: If -Thtml then emit $1 in .IP rather than its
- equivalent diversion.
- * src/include/html-strings.h: Altered image tags to reflect the
- inline image node.
- * src/include/htmlindicate.h (html_end_suppress): Added `is_inline'
- parameter.
- * src/preproc/eqn/main.cc: Will suppress generation of image tags if
- it is already inside a pic image. Only emit tags if the argument
- `-Tps:html' is present.
- * src/preproc/tbl/main.cc: Changes to reflect additional
- `html_end_suppress' parameter.
- * src/roff/troff/env.cc: Only emit eol tag if a node has been
- emitted since the last eol tag was written.
- * src/roff/troff/env.h: New boolean `emitted_node'.
- * src/roff/troff/input.cc (do_suppress): Handles extra suppress
- nodes \O3, \O4, \O5. No longer use `output_low_mark_miny'.
- * src/roff/troff/node.cc (check_charinfo): New method.
- (troff_output_file::determine_line_limits): Alterations to limit
- checking.
- * tmac/www.tmac: Changes to reflect new suppress nodes.
-
-2001-04-12 Bruno Haible <haible@clisp.cons.org>
-
- * src/devices/grohtml/post-html.cc (html_printer::add_to_sbuf):
- Escape the html_glyph in the buffer.
- (str_translate_to_html): Output the unescaped escaped_char.
- * src/devices/grohtml/html-text.cc (issue_table_begin): Set
- `frame=void', not `frame=none'. Add `border=0'.
-
-2001-04-12 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Add some words on how to avoid wrapper macros.
-
-2001-04-11 Blake McBride <blake@florida-software.com>
-
- * src/include/nonposix.h (fileno) [_MSC_VER]: Removed.
-
-2001-04-11 Werner LEMBERG <wl@gnu.org>
-
- * font/devlbp/Makefile.sub (CLEANADD): Set it.
- * tmac/Makefile.sub (CLEANADD): Add tmac.local-s.
- * Makefile.in (dist): Don't remove src/xditview/Imakefile, but ...
- * Makefile.sub (DISTCLEANFILES): Here.
-
- * libs/libgroff/new.cc: Include `nonposix.h'.
- * win32-diffs: Updated.
-
-2001-04-10 Ruslan Ermilov <ru@FreeBSD.org>
-
- Added skeleton macro for defunct macros.
-
- Updated documentation.
-
- When inside displays, an empty input line warning should be
- suppressed. If another macro call is put inside a display,
- all subsequent empty lines found in that display caused a
- warning to be emitted.
-
- * tmac/doc.tmac (doc-defunct-macro): New macro.
- (Db, Ds, Ex, Or, Sf): Reimplemented using this macro.
- (doc-restore-global-vars): Fixed typo.
- (doc-empty-line): Check the `doc-display-depth' register to
- determine whether we are inside display or not.
-
- * tmac/doc-common: Removed `Or' and `Sf' registers.
- Moved obsolete `Ds' macro to doc.tmac.
-
- * tmac/groff_mdoc.man: Bump document date.
- Document `.Vt' under ``Variable Types''.
- Removed documentation for obsolete `.Or' macro.
-
-2001-04-10 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Updated.
- * doc/groff.texinfo: Many fixes, additions, clarifications, etc.
-
-2001-04-10 Bruno Haible <haible@clisp.cons.org>
-
- * src/devices/grodvi/dvi.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/devices/grohtml/post-html.cc (main): Accept --help and --version.
- Write --version output to stdout, not stderr.
- (usage): Add stream argument. Don't exit.
- * src/devices/grohtml-old/html.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/devices/grolbp/lbp.cc (long_options): Use symbolic getopt.h
- constants.
- (usage): Add stream argument. Don't exit.
- (main): Write --help output to stdout, not stderr.
- * src/devices/grolj4/lj4.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/devices/grops/ps.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/devices/grotty/tty.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/preproc/eqn/main.cc (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/preproc/grn/main.cc (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/preproc/html/pre-html.cc (usage): Add stream argument.
- (scanArguments): Accept --help and --version.
- * src/preproc/pic/main.cc (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/preproc/refer/refer.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/preproc/soelim/soelim.cc (usage): Add stream argument. Don't
- exit.
- (main): Accept --help and --version.
- * src/preproc/tbl/main.cc (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/roff/groff/groff.cc (main): Accept --help and --version.
- (synopsis): Add stream argument.
- (help): Write --help output to stdout, not stderr.
- (usage): Add stream argument. Don't exit.
- * src/roff/grog/grog.pl: Accept --help and --version.
- (help): New sub.
- * src/roff/grog/grog.sh: Accept --help and --version.
- * src/roff/nroff/nroff.sh: Accept --help and --version.
- * src/roff/troff/input.cc (USAGE_EXIT_CODE): Remove macro.
- (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/utils/addftinfo/addftinfo.cc (main): Accept --help and --version.
- (usage): New function with stream argument, doesn't exit.
- * src/utils/hpftodit/hpftodit.cc (main): Accept --help and --version.
- (usage): New function with stream argument, doesn't exit.
- * src/utils/indxbib/indxbib.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
- * src/utils/lkbib/lkbib.cc (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/utils/lookbib/lookbib.cc (usage): Add stream argument. Don't
- exit.
- (main): Accept --help and --version.
- * src/utils/pfbtops/pfbtops.c (usage): Add stream argument. Don't exit.
- (main): Accept --help and --version.
- * src/utils/tfmtodit/tfmtodit.cc (main): Accept --help and --version.
- (usage): Add stream argument. Don't exit.
-
-2001-04-10 Ruslan Ermilov <ru@freebsd.org>
-
- Fix indentation in SYNOPSIS.
-
- Updated to include changes of latest BSD mdoc version (basically,
- the only change is that `.Fn' and `.Fc' put a final semicolon after
- a function declaration in the SYNOPSIS section).
-
- * tmac/doc.tmac (doc-in-synopsis-count): Replaced with ...
- (doc-in-synopsis-section): New variable. Updated all related
- functions.
- (doc-indent-synopsis-active): New register.
- (Nd, Fn, Fo): Use it.
- (Cd): It requires manipulation of \n[doc-indent-synopsis] so that
- `.Cd' with long argument line produces indented wrapped lines.
- Also, the misplaced `.nop \*[doc-Nm-font]\c'' caused extra
- undesirable line break to be output.
- (doc-do-func-decl, Nm, Vt, Fn, Fo): Remove extraneous calls to
- `.rs'.
- (Fn, Fc): Add final `;' to output.
- (doc-save-global-vars, doc-restore-global-vars): Updated.
- * tmac/doc-common: Remove `Ex' register.
- Updated.
- * tmac/doc-ditroff, tmac/doc-nroff, tmac/doc-syms: Updated
- copyright.
-
-2001-04-06 Ruslan Ermilov <ru@freebsd.org>
-
- * tmac/doc.tmac (Cd): Simplify code.
- * tmac/groff_mdoc.man: Document some behaviour of `Cd' request.
-
-2001-04-06 Werner LEMBERG <wl@gnu.org>
-
- Implement continuous underlining for nroff mode. To do that, a new
- request in the ditroff language has been added: `x u N' (N is 0
- or 1).
-
- \X and \Y are now transparent to end-of-sentence recognition.
-
- * src/include/printer.h (printer): Add `type' parameter to `special'
- method.
- * src/libs/libdriver/printer.cc (printer::special): Updated.
- * src/libs/libdriver/input.cc (do_file): Handle `x u N'.
-
- * src/devices/dvi/dvi.cc (dvi_printer::special): Handle only
- specials of type `p'.
- * src/devices/grohtml/post-html.cc (html_printer::special): Ditto.
- * src/devices/grohtml-old/html.cc (html_printer::special): Ditto.
- * src/devices/grops/ps.cc (ps_printer::special): Ditto.
- * src/devices/grotty/tty.cc: Add new enum CU_MODE.
- (glyph::order): New method.
- (tty_printer::add_char): Use it.
- (tty_printer::special): New method.
- (tty_printer::end_page): Implement it.
-
- * src/roff/troff/node.h (special_node): Add `no_init_string' member.
- * src/roff/troff/node.cc (special_node::special_node): Add parameter
- to set `no_init_string'.
- (special_node::tprint_start): Use it.
- (special_node::same, special_node::copy): Updated.
- (special_node::ends_sentence): New method.
- (troff_output_file::start_special): Add parameter to include
- inititialization of special conditionally.
-
- * src/roff/troff/env.h (environment): New member `underline_spaces'.
- * src/roff/troff/env.cc (do_underline_special): New function.
- (environment::set_font): Use it.
- (do_underline): Use it. This was `underline()'.
- (underline): Call `do_underline()'.
- (continuous_underline): New function which calls `do_underline()'.
- (environment::newline): Use `do_underline_special()'.
- (init_env_requests): Updated.
-
- * NEWS, man/troff_out.man: Updated.
-
-2001-04-06 Bruno Haible <haible@clisp.cons.org>
-
- * font/devutf8/R.proto: Fix code of 'shc'.
-
-2001-04-06 Ruslan Ermilov <ru@freebsd.org>
-
- Many fixes. Diag lists can now be nested also; additionally,
- `-compact' and `-offset' are supported.
-
- * tmac/doc.tmac (doc-have-indent): Replaced with ...
- (doc-list-have-indent-stackXXX): A new register stack.
- (doc-have-diag-list): Removed.
- (Bl): Use `doc-list-have-indent-stackXXX'.
- (El): Updated.
- (doc-diag-list): Use `doc-compact-list-stackXXX'.
- (doc-tag-list): Use `doc-list-have-indent-stackXXX'.
- (doc-set-vertical-and-indent): Ditto.
- (doc-next-list-depth): Removed.
- (doc-increment-list-stack): Updated.
- (doc-decrement-list-stack): Use `doc-list-depth' instead of
- `doc-next-list-depth'.
- (doc-end-list, doc-end-column-list): Don't use
- `doc-increment-list-stack'.
- (doc-set-column-tab): Don't use `doc-list-offset-stackXXX'.
- (doc-save-global-vars, doc-restore-global-vars): Updated.
- * tmac/doc-common: Updated.
- * tmac/groff_mdoc.man: Updated.
- * NEWS: Fix typo.
-
-2001-04-02 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grotty/grotty.man: Fix grammatical error.
-
-2001-03-30 Ruslan Ermilov <ru@freebsd.org>
-
- Remove .Ld from mdoc package; replace it with special handling of
- `...'.
-
- * tmac/doc-common: Remove `Ld' register.
- Uncomment `doc-volume-ds-*' strings.
- Remove `doc-operating-system-default'.
- (Os): Updated.
- * tmac/doc-syms (Ld): Removed.
- * tmac/doc.tmac (doc-parse-args, doc-parse-arg-vector): Handle
- `...' specially.
- * NEWS: Updated.
-
- * tmac/groff_mdoc.man: Many fixes and updates.
-
-2001-03-29 Werner LEMBERG <wl@gnu.org>
-
- * tmac/troffrc-end: Protect data with `.do'. Reported by T. Kurt
- Bond <tkb@tkb.mpl.com>.
- * tmac/www.tmac: Save compatibility mode.
-
-2001-03-28 Ruslan Ermilov <ru@freebsd.org>
-
- * tmac/groff_mdoc.man: Many fixes.
-
-2001-03-28 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/soelim/soelim.man: Document that `.<whitespace>so'
- isn't recognized.
-
-2001-03-27 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (TP, an-do-tag): Reduce line length while in
- diversion. This fixes overlong tags.
-
-2001-03-26 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fixed and improved documentation of fonts.
- * tmac/doc-syms: Fix error messages.
- * tmac/an-old.tmac: Remove incorrect double backslashes.
-
-2001-03-24 Ruslan Ermilov <ru@freebsd.org>
-
- * tmac/Makefile.sub: Strip mdoc.local also
- * tmac/strip.sed: Fixed.
-
-2001-03-24 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-nroff, tmac/doc-ditroff: Implement -rSxx switch for
- selecting the font size.
- * tmac/groff_mdoc.man, NEWS: Document it.
-
-2001-03-23 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/div.cc (save_vertical_space): Add default argument
- to `sv' request.
- * src/roff/troff/env.cc (family_change): Make `.fam' accept no
- argument to restore previous font family.
- * src/roff/troff/troff.man, man/groff.man, NEWS: Updated.
-
- * doc/groff.texinfo: More fixes and additions (mainly for font
- manipulating commands).
-
- * tmac/groff_mdoc.reference.man: Small updates and renamed to ...
- * tmac/groff_mdoc.man: This. The quick reference has been removed.
- * tmac/Makefile.sub, NEWS: Updated.
-
-2001-03-23 Werner LEMBERG <wl@gnu.org>
-
- Replaced mdoc implementation. The new version is `state of the
- art', using almost all new features of groff 1.17 -- it won't run
- with older versions.
-
- * tmac/doc.tmac: Completely rewritten.
- * tmac/doc-common: Ditto.
- * tmac/doc-nroff: Ditto.
- * tmac/doc-ditroff: Ditto.
- * tmac/doc-syms: Ditto.
- * tmac/mdoc.local: New file.
- * tmac/groff_mdoc.samples.man: Replaced with ...
- * tmac/groff_mdoc.reference.man: New file, covering mdoc completely.
- * tmac/strip.sed: Updated.
- * tmac/Makefile.sub: Updated.
- * INSTALL: Updated.
-
- * tmac/groff_man.man: Add `man.local' to the FILES section.
-
-2001-03-22 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added many @noindent.
- Replaced @end_Example -> @endExample.
- Added info whether registers are r/o.
- Many other additions and fixes.
-
-2001-03-21 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added macro @Var (and some hacks due to bugs
- in makeinfo of texinfo 4.0) to be used in @Def* macros.
- Improved @Def* macros: Now the exact syntax of request, register,
- and escapes is shown.
- Added macros for parentheses and brackets to be used in @Def*.
- Many fixes and improvements of the documentation.
-
-2001-03-20 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added new index: `st' (for strings).
- Added macros @Defstr(x).
- Added macro @Example (adding @group).
- Other minor improvements.
-
-2001-03-19 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added two new indices: `es' (for escapes) and
- `rq' for requests. `fn' is no longer used.
- Added macros @Defreq(x), @Defreg(x), and @Defesc(x).
- Removed @Deffn(x).
-
- * tmac/an-old.tmac (an-p-footer): If `cR' is set, replace page
- number with name of man page.
-
-2001-03-19 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Complete revision. Added many @Deffn to gain
- consistency.
-
-2001-03-19 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_font.man: Document `prepro', `postpro', and `print'.
- * src/roff/groff/groff.man: Improve documentation of `-l' and `-L'.
- * src/devices/grohtml/grohtml.man: Fixing typos.
-
-2001-03-19 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/s.tmac (@IP): Pass `.ip' html tag.
- * tmac/groff_mwww.man: Remove .LINE macro
- * tmac/www.tmac (LINE): Add `.ti'.
-
- * src/devices/grohtml/post-html.cc (html_printer): New member
- `indent'.
- (html_printer::emit_raw): Use it.
- (html_printer::do_linelength): Ditto.
- (html_printer::do_pageoffset): Ditto.
- (html_printer::do_indentation): Ditto.
- (html_printer::do_tempindent): Ditto.
- (html_printer::do_break): Ditto.
- (html_printer::begin_page): Ditto.
- (html_printer::do_indentedparagraph): New function.
- (html_printer::troff_tag): Handle `.ip'.
- * src/devices/grohtml/html-text.cc (html_text::issue_table_begin):
- Add `<td width=...>' handling.
- (html_text::do_table): Add parameter.
- (html_text::do_indent): Updated.
- * src/devices/groohtml/html-text.h: Updated.
-
-2001-03-16 Gaius Mulley <gaius@glam.ac.uk>
-
- Introduced simple html tables to implement indentation.
-
- * src/devices/grohtml/html.h (word, word_list): New structures.
- (simple_output): Use it.
- * src/devices/grohtml/post-html.cc: Add `INDENTATION'.
- (html_printer): Improve indentation handling.
- (html_printer::emit_raw): Set `in_table' element. Handle
- indentation if set.
- (html_printer::write_header): Move conditional downwards.
- Don't allow whitespace in tags.
- (html_printer::do_linelength): Handle line length and indentation
- conditionally.
- (html_printer::do_pageoffset): Handle indentation conditionally.
- (html_printer::do_indentation): Ditto.
- (html_printer::do_tempindent): New function member.
- (html_printer::do_fill): Take care of indentation.
- (html_printer::do_flush): Finish table.
- (html_printer::do_links): Ditto.
- (html_printer::do_break): New function for handling `.br' and `.ti'.
- (html_printer::troff_tag): Use it.
- Handle `.ti'.
- (html_printer::flush_globs): Fix.
- (html_printer::flush_page): Finish table.
- (html_printer::html_printer): Fix error message. Set up
- `linelength'.
- (html_printer::add_to_sbuf): Remove special handling of character
- code 255.
- (to_unicode): Remove `stop()'.
- (html_printer::write_title): Cleanup.
- (html_printer::begin_page): Use `put_string()'. Handle indentation.
- (html_printer::~html_printer): Flush text and end the line.
- Use `put_string()'.
- * src/devices/grohtml/html_text.h: Add more *_TAG enum values.
- * src/devices/grohtml/html_text.cc (html_text::end_tag): Fix
- emission of tags.
- (html_text::start_tag): Disable newlines.
- (html_text::table_is_void): New function.
- (html_text::issue_table_begin): Ditto.
- (html_text::issue_table_end): Ditto.
- (html_text::push_para): Better table handling.
- (html_text::do_indent): New function.
- (html_text::do_table): Ditto.
- (html_text::done_table): Ditto.
- (html_text::do_tt): Handle PRE_TAG.
- (html_text::is_in_table): New function.
- (html_text::check_emit_text): Handle tables.
- (html_text::do_emittext): Use `nl()'.
- (html_text::do_para): Handle table.
- (html_text::remove_def): New function.
- * src/devices/grohtml/output.cc (word, word_list): Implement
- methods.
- (simple_output::end_line): Flush last word.
- (simple_output::simple_comment): Ditto.
- (simple_output::begin_comment): Recoded.
- (simple_output::end_comment): Ditto.
- (simple_output::comment_arg): Removed.
- (simple_output::check_newline): Improve test and flush last word.
- (simple_output::space_or_newline): Improved.
- (simple_output::write_newline): Replaced with...
- (simple_output::nl): This.
- (simple_output::put_raw_char): Flush last word.
- (simple_output::check_space): Removed.
- (simple_output::put_translated_string): Ditto.
- (simple_output::put_string): Simplified.
- (simple_output::put_number): Updated.
- (simple_output::put_float): Ditto.
- (simple_output::put_symbol): Removed.
- (simple_output::enable_newlines): Add `check_newline()'.
- (simple_output::flush_last_word): New function.
-
- * src/roff/troff/enc.cc (no_fill): Remove call to add_html_tag().
- * src/roff/troff/div.cc (page_offset): Add call to add_html_tag().
-
- * tmac/s.tmac (@PP, @IP): Add html conditional code.
- * tmac/an-old.tmac (TP): Ditto.
-
-2001-03-09 Ruslan Ermilov <ru@freebsd.org>
-
- * mdate.sh: Make it POSIX compliant.
-
-2001-03-09 Werner LEMBERG <wl@gnu.org>
-
- Added the `return' request to end a macro immediately. It simply
- pops iterators from the input stack until a macro iterator is found.
-
- * src/roff/troff/input.cc (input_iterator::is_macro,
- macro_iterator::is_macro): New member.
- (input_return_boundary): New class to signal an immediate return
- to while_request().
- (input_stack::add_return_boundary, input_stack::is_return_boundary):
- New functions.
- (input_stack::clear): Use it.
- (input_stack::pop_macro): New function.
- (while_request): Use `is_return_boundary()'.
- (return_macro_request): New function.
- (init_input_requests): Use it.
-
- * src/roff/troff/TODO: Updated.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
-2001-03-08 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (input_iterator::is_boundary): Minor
- cleanup.
-
-2001-03-07 Werner LEMBERG <wl@gnu.org>
-
- Make `\B' more rigid.
-
- * src/roff/troff/number.cc (parse_expr, parse_term): Add `rigid'
- parameter.
- (get_number_rigidly): New function.
- * src/roff/troff/input.cc (do_expr_test): Use it.
- * src/roff/troff/token.h: Updated.
-
- * src/roff/troff/request.h: Fix typo (init_html_request ->
- init_markup_request).
-
-2001-03-04 Gaius Mulley <gaius@glam.ac.uk>
-
- Fixed grohtml handling of any named glyph for glyph indexes < 0x80.
- Cosmetic changes to `.html-begin', `.html-end', `.html-image' which
- are now `.begin', `.end', `.image'.
-
- * src/devices/grohtml/post-html.cc: Adding UNICODE_DESC_START.
- (html_printer::add_to_sbuf): Changing type of `code' parameter.
- Use add_char_to_sbuf().
- (to_unicode): New function.
- (char_translate_to_html): Changing type of `ch' parameter.
- Use `to_unicode()'.
- (html_printer::~html_printer): Comment out doctype string.
- * src/preproc/html/pre-html.cc (write_end_image): Use `.end'
- instead of `.html-end'.
- (write_start_image): Use `.begin' and `.image' instead of
- `.html-begin' and `.html-image'.
- * src/roff/troff/input.cc: Rename `html_level' to `begin_level'.
- (html_begin): Renamed to ...
- (begin): This.
- (html_end): Renamed to ...
- (end): This.
- (html_image): Renamed to ...
- (image): This.
- (init_html_requests): Renamed to ...
- (init_markup_requests): This.
- * tmac/www.tmac: Updated.
-
-2001-02-28 Bram <bram@avontuur.org>
-
- * src/libs/libgroff/font.cc (font_widths_cache): Fixing syntax of
- constructor.
-
-2001-02-26 David Leonard <david.leonard@csee.uq.edu.au>
-
- * doc/meref.me: Fixing some typos.
-
-2001-02-16 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (space_node::get_hyphenation_type): New
- method. Return `HYPHEN_MIDDLE' if it was `\:'.
- * src/roff/troff/node.h: Updated.
-
-2001-02-17 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/groff_tmac.man: Fix typo.
-
-2001-02-16 Werner LEMBERG <wl@gnu.org>
-
- Fixing a bug which prevented proper end-of-sentence recognition
- between an `unformatted' box and the following text. As a
- consequence, vertical line distances are no longer preserved in
- boxes after a call to `.unformat' -- because boxes aren't
- line-oriented (contrary to diversions), this doesn't make sense
- anyway.
-
- * src/roff/troff/node.cc (*node::set_unformat_flag): Add return
- value.
- (vertical_size_node::set_unformat_flag): New method.
- * src/roff/troff/node.hh: Updated.
- * src/roff/troff/input.cc (word_space_node::reread,
- hmotion_node::reread): Reset `unformat' flag after usage.
- (unformat_macro): Append only if `set_unformat_flag()' returns
- non-zero.
- * src/roff/troff/troff.man: Updated.
-
-2001-02-15 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man, NEWS, man/groff.man: Improved
- documentation of `asciify' and `unformat' requests.
-
-2001-02-13 Werner LEMBERG <wl@gnu.org>
-
- Redesigned the `unformat' request. It is no longer connected with
- `asciify' but rather uses new `reread()' methods if the `unformat'
- flag is set. Additionally, the handling of space characters after
- unformatting has been fixed so that they retain their width.
-
- * src/roff/troff/node.h (width_list): New structure to store
- original widths of spaces.
- (node): Added `unformat' member.
- Replaced `num_spaces' variable with `orig_width' list.
- * src/roff/troff/node.cc (*node::asciify,
- asciify_reverse_node_list): Removed `unformat_only' flag and related
- code.
- (word_space_node::asciify, word_space_node::word_space_node): Use
- `orig_width'.
- (word_space_node::~word_space_node): New destructor.
- (word_space_node::copy): Updated to handle `orig_width'.
- (hmotion_node::copy, unbreakable_space_node::copy): Updated.
- (*node::merge_space): Update `orig_width' list if necessary.
- (*node::set_unformat_flag): New methods to set the `unformat' flag.
- * src/roff/troff/enc.cc (environment::space_newline): Use
- `width_list'.
- (environment::space): Added method to handle space width and
- sentence space width as parameters. Use `width_list'.
- (environment::make_tab_node): Updated.
- * src/roff/troff/env.h: Updated.
- * src/roff/troff/input.cc (word_space_node::reread,
- unbreakable_space_node::reread, hmotion_node::reread): New methods
- to handle nodes specially if `unformat' flag is set.
- (do_asciify_macro): Renamed back to ...
- (asciify_macro): This.
- (unformat_macro): New implementation to simply set the `unformat'
- flag.
-
- * MORE.STUFF: Added more info about deroff.
-
-2001-02-08 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.h (unbreakable_space_node, hmotion_node,
- space_char_hmotion_node, overstrike_node): Add `get_hyphen_list()'
- and `add_self()' methods to avoid hyphenation. For example, the
- hyphen list for `foo\0\0bar' was `foobar', causing insertion of a
- soft hyphen after `foo'. Now the hyphen list is correctly
- `foo<ignore><ignore>bar'.
-
-2001-02-05 Yoshiteru Kageyama <yt-kage@cb3.so-net.ne.jp>
-
- * tmac/groff_tmac.man: Fix `BIR' macro.
-
-2001-02-04 Werner LEMBERG <wl@gnu.org>
-
- A new escape sequence `\:', inserting a zero-width break point.
-
- * src/roff/troff/input.h: Adding `ESCAPE_COLON'.
- * src/roff/troff/input.cc (get_copy, token::next, asciify):
- Implement it.
- * src/roff/troff/node.h (node): Add `is_escape_colon()' virtual
- method.
- (space_node): Add `was_escape_colon' member. Add `is_escape_colon()'
- and `asciify()' methods.
- * src/roff/troff/node.cc (space_node::space_node): Updated.
- (space_node::asciify): Handle `was_escape_colon'.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
- Handle `\~' similar to other comparable requests.
-
- * src/roff/troff/input.cc (process_input_stack): Remove now obsolete
- label.
- (token::next): Move creation of an unbreakable_space_node to...
- (token::add_to_node_list): Here.
-
- Fix a bug which sometimes prevented hyphenation of words connected
- with `\~' or `\ ' (and other escape sequences handled as
- TOKEN_NODE). This also fixes a hyphenation problem with boxes
- (after a call to the `unformat' request).
-
- * src/roff/troff/env.h (environment::possibly_break_line,
- environment::hyphenate_line): Introducing `start_here' parameter.
- * src/roff/troff/env.cc (environment::space_newline,
- environment::space): Use it.
- (environment::possibly_break_line, environment::hyphenate_line):
- Implement it.
- * src/roff/troff/input.cc (process_input_stack): Use it.
- * src/roff/troff/node.h (unbreakable_space_node, hmotion_node,
- space_char_hmotion_node, overstrike_node): Add
- `get_hyphenation_type()' method.
- * src/roff/troff/node.cc (break_char_node::asciify): Don't asciify
- if `unformat_only' is active.
-
-2001-01-30 Werner LEMBERG <wl@gnu.org>
-
- Implemented new read-only number register `.linetabs' which
- returns 1 if in line-tabs mode, 0 otherwise.
-
- * src/roff/troff/env.h (environment): Add get_line_tabs() member.
- * src/roff/troff/env.cc (get_line_tabs): New function.
- (init_env_requests): Use it.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
- * VERSION, REVISION: Changing to 1.17.0.
-
-2001-01-28 Werner LEMBERG <wl@gnu.org>
-
- Fixed a bug which prevented hyphenation of words which are finished
- with `\)'.
-
- * src/roff/troff/token.h (token): Add enum type
- `TOKEN_TRANSPARENT_DUMMY' and method `transparent_dummy()'.
- * src/roff/troff/input.cc (token::next, token::description,
- get_line_arg, token::add_to_node_list, token::process): Use it.
-
-2001-01-27 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/div.h (diversion): Add `saved_prev_line_interrupted'.
- * src/roff/troff/div.cc (do_divert): Use it.
-
- * src/roff/troff/input.cc (asciify): Add ESCAPE_RIGHT_PARENTHESIS.
-
-2001-01-25 Werner LEMBERG <wl@gnu.org>
-
- Adding the `linetabs' request. If set, tab distances are not
- computed relative to the input line but relative to the output line.
-
- * src/roff/troff/env.h (environment): New member `line_tabs'.
- * src/roff/troff/env.cc (line_tabs_request): Implement request.
- (environment::environment, environment::copy): Updated.
- (environment::distance_to_next_tab): Use `line_tabs'.
- (init_env_requests): Register request.
- * src/roff/troff/troff.man, man/groff.man, NEWS: Document it. Other
- fixes.
-
-2001-01-24 Werner LEMBERG <wl@gnu.org>
-
- Introducing a new read-only register `.int' which is set to a
- positive value if the last output line is interrupted (i.e., if it
- contains `\c').
-
- * src/roff/troff/env.cc (init_env_requests): Add it.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
-2001-01-23 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/mwww.tmac: Call `www.tmac', not `arkup.tmac'.
- * src/preproc/html/pre-html.cc (findPrefix): New function which
- generates the troff executable name via the system prefix.
- * src/preproc/eqn/main.cc: Modified warning message.
-
-2001-01-23 Werner LEMBERG <wl@gnu.org>
-
- troff's `box' and `boxa' requests didn't preserve temporary
- indentation.
-
- * src/roff/troff/div.h (diversion): Add `saved_saved_indent' and
- `saved_target_text_length' members.
- * src/roff/troff/div.cc (do_divert): Use them.
-
- Tabs (but not yet leaders and fields) are now handled correctly by
- `asciify' request.
-
- * node.h (hmotion_node): Add field `was_tab'.
- * env.cc (environment::make_tab_node): Set it.
- * node.cc (hmotion_node::copy, hmotion_node::asciify): Use it.
-
- Added new request `unformat' which will, contrary to `asciify',
- preserve font information after unformatting (i.e., only nodes
- dealing with horizontal space are converted back to input
- characters).
-
- * input.cc (asciify_macro): Renamed to ...
- (do_asciify_macro): this, having a new parameter `unformat_only'.
- (asciify_macro, unformat_macro): New; using do_asciify_macro.
- (init_input_requests): Added `unformat'.
- * node.cc (*_node::asciify), asciify_reverse_node_list: Added
- parameter to control asciification process.
- * node.h (*_node::asciify): Ditto.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
-2001-01-20 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Minor improvement of `.in' documentation.
-
-2001-01-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/ps.tmac: Remove call of psold.tmac.
- * tmac/psold.tmac: Comment updated.
- * tmac/psnew.tmac: Removed since no longer needed.
- * tmac/Makefile.sub, NEWS, src/devices/grops/grops.man: Updated.
-
- * font/devutf8/R.proto: Adding `shc' glyph.
- * font/devutf8/NOTES: Updated.
-
- * test-groff: Updated.
-
-2001-01-15 Gaius Mulley <gaius@glam.ac.uk>
-
- First cut of the new html device driver. Changes to pre-html and
- the new grohtml are too numerous to be documented here.
-
- Stuff related to `html' has been renamed to `html-old' and `html2'
- stuff has been renamed to `html' (including directories). The new
- html device driver is therefore invoked as `-Thtml'.
-
- Added new `\O' escape to suppress output (needed by html driver).
-
- Added functions and code to pass info about input-level commands
- (`.in', `.fl', etc.) to html driver.
-
- Three new functions (.html-begin, .html-end, and .html-image) for
- better html handling: `html-begin' will execute the remaining line
- if at the outermost nesting level, increasing an internal counter.
- `html-end' does the same but decreases the internal counter.
- `html_image' puts its arguments into a special node (suppress_node)
- to define an image region.
-
- The `output' request has been removed.
-
- * tmac/html-tags.tmac: Removed.
- * tmac/arkup.tmac: Updated and renamed to ...
- * tmac/www.tmac: New file.
- * tmac/markup.tmac Updated and renamed to ...
- * tmac/mwww.tmac: New file.
- * tmac/Makefile.sub: Updated.
- * tmac/an-old.tmac: Updated.
- * tmac/eqnrc: Updated.
- * tmac/groff_man.man
- * tmac/groff_markup.man: Updated and renamed to ...
- * tmac/groff_mwww.man: New file.
- * tmac/groff_tmac.man: Updated.
- * tmac/html-old.tmac: Updated and Renamed from html.tmac.
- * tmac/html.tmac: Updated and renamed from html2.tmac.
- * tmac/pspic.tmac: Updated html support.
- * tmac/s.tmac: Added html output support.
- * tmac/troffrc, tmac/troffrc-end: Updated.
-
- * Makefile.in, doc/Makefile: Updated.
- * doc/groff.texinfo: Added info about new `\O' escape.
- * doc/homepage.ms: Use `MAILTO' macro.
-
- * font/devhtml/DESC.proto: Add `C' font.
- * font/devhtml/Makefile.sub: Updated.
- * font/devhtml/R.proto: Minor fixes.
- * font/devhtml-old/Makefile.sub: Updated.
-
- * src/devices/grohtml-old/Makefile.sub: Updated.
-
- * src/libs/libdriver/printer.cc (printer::get_font_from_index): New
- method.
- * src/libs/libgroff/htmlindicate.cc (html_begin_suppress,
- graphic_start): Add `inline' parameter. Update.
- (html_end_suppress, graphic_end): Update.
-
- * src/include/html-strings.h: New file.
- * src/include/htmlindicate.h: Comments updated.
- * src/include/printer.h: Updated.
-
- * src/preproc/eqn/main.cc (do_file, main): Updated.
- * src/preproc/pic/troff.cc (troff_output::start_picture,
- troff_output::finish_picture): Updated.
- * src/preproc/tbl/main.cc (process_input_file): Updated.
-
- * src/roff/groff/groff.cc (main): Updated.
- Pass device arguments to predrivers also.
- Use `ps' device for `eqn' preprocessor if `-Thtml' is given.
- * src/roff/troff/env.h (environment): Updated.
- New elements `need_eol' and `ignore_next_eol' (for html output).
- * src/roff/troff/env.cc (environment::environment): Add initializers
- for `need_eol' and `ignore_next_eol'.
- (environment::add_html_tag_eol, environment::add_html_tag_tabs): New
- functions.
- (point_size, fill, no_fill, center, right_justify, line_length,
- indent, temporary_indent, break_request, handle_tab): Use
- `add_html_tag()'.
- (set_tabs): Use `add_html_tag_tabs()'.
- (environment::add_html_tag): Updated.
- (environment::do_break): Updated.
- * src/roff/troff/div.cc (space_request, flush_output): Use
- `environment::add_html_tag()'.
- * src/roff/troff/input.cc: Updated.
- New variable `html_level' to indicate nested `html-begin' requests.
- (file_iterator::fill): Use `environment::add_html_tag_eol()'.
- (non_interpreted_char_node, token_node, non_interpreted_node): Add
- `force_tprint()' method.
- (token::next): Handle `\O'.
- (do_suppress): Implement it.
- (html_begin, html_end, html_image): New functions.
- (init_output_requests): Renamed to ...
- (init_html_requests): this.
- (main): Use it.
- (macro::append_str, macro::append_unsigned, macro::append_int): New
- methods.
- New variable `output_low_mark_miny' to limit minimal value of y.
- (reset_output_registers): Use it.
- (output_request): Removed.
- (get_output_registers): New function.
- * src/roff/troff/node.h (node): Make `force_tprint()' virtual.
- (*_node): Added `force_tprint()' if necessary.
- (special_node): New elements `tf' and `get_tfont()'.
- (suppress_node): New class.
- * src/roff/troff/node.cc:
- New global variables `image_no' and `suppress_start_page'.
- (real_output_file): New method `is_on()'.
- (troff_output_file): New method `start_special(tfont)'.
- (troff_output_file::really_print_line): Use `tprint' conditionally.
- (real_output_file::print_line): Updated.
- (real_output_file::on): Updated.
- (*_node): Added `force_tprint()'.
- (special_node::special_node): Initializer updated.
- (special_node::same, special_node::copy, special_node::tprint_start):
- Updated.
- (get_reg_int, get_reg_str): New functions.
- (suppress_node::*): New methods.
- New global variables last_position, last_image_filename;
- (min): New inline function.
- * src/roff/troff/reg.h, src/roff/troff/request.h,
- src/roff/troff/troff.h: Updated.
-
-2001-01-13 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, src/roff/troff/troff.man, doc/groff.texinfo: Fix
- documentation of `asciify' request.
-
-2001-01-12 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc: Move definition of special characters
- like `ESCAPE_TILDE' to ...
- * src/roff/troff/input.h: New file.
- * src/roff/troff/Makefile.sub (HDRS): Add it.
-
- Extending the .asciify request to `unformat' space characters also.
-
- * src/roff/troff/node.h (word_space_node): Add `num_spaces' element
- to count input space characters.
- Update constructors to take care of it.
- * src/roff/troff/node.cc (space_char_hmotion_node::asciify): Use
- `ESCAPE_SPACE' instead of normal space.
- (word_space_node::asciify): New method.
- (unbreakable_space_node::asciify): New method.
- (word_space_node::merge_space): New method.
- * src/roff/troff/env.cc (environment::space_newline,
- environment::space): Add code to initialize `num_spaces' (using the
- constructor of `word_space_node').
- * NEWS, src/roff/troff/troff.man, man/groff.man, doc/groff.texinfo:
- Document it.
-
-2001-01-09 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_char.man: Use table header traps only conditionally.
-
-2001-01-09 Bjarni Ingi Gíslason <bjarniig@hi.is>
-
- * man/groff_char.man: Add `ý' and `Ý' to the `acute' group.
-
-2001-01-08 Werner LEMBERG <wl@gnu.org>
-
- Introducing the `box' and `boxa' requests which are similar to
- `di' resp. `da' but omitting a partially filled line (which is
- restored after ending the diversion).
-
- * src/roff/troff/div.h (diversion): Add elements to save partially
- filled line.
- * src/roff/troff/div.cc (do_divert): Add parameter `boxing' to save
- partially filled line.
- (divert, divert_append): Updated.
- (box, box_append): New functions.
- (init_div_requests): Use them.
- * src/roff/troff/env.h (environment): do_divert() is now a friend.
- * NEWS, src/roff/troff/troff.man, man/groff.man: Document it.
-
- * doc/groff.texinfo: Fix documentation of `lf' request.
-
-2000-12-25 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man, NEWS: Document `writem' request.
-
-2000-12-21 Werner LEMBERG <wl@gnu.org>
-
- Ignore `ss' request if in compatibility mode.
-
- * src/roff/troff/input.cc: Make `compatible_flag' non-static.
- * src/roff/troff/env.h: Added extern `compatible_flag' declaration.
- * src/roff/troff/env.cc (space_size): Use it.
-
- * doc/groff.texinfo, src/roff/troff/troff.man: Fix documentation of
- `ss' request in nroff mode.
-
- * tmac/an-old.tmac: Fixed some serious bugs introduced with latest
- changes.
-
-2000-12-15 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/troffrc, tmac/troffrc-end: Convert tmac.* to *.tmac.
-
-2000-12-13 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/eqn/Makefile.sub (MAN1): Added neqn.man.
- * src/preproc/eqn/neqn.man: Small fixes and additions.
-
-2000-12-13 Ruslan Ermilov <ru@FreeBSD.org>
-
- * src/utils/addftinfo/addftinfo.man, src/devices/grops/grops.man:
- Fixing typo.
-
- * src/preproc/eqn/neqn.man: New file.
-
- * src/preproc/tbl/table.cc (table::print): Fix `indent cannot be
- negative' warning.
-
- * tmac/e.tmac: Add `T&' macro.
- Fix `indent cannot be negative' warning.
- * tmac/s.tmac: Fix `indent cannot be negative' warning.
-
-2000-12-07 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Replaced __ALPHA with __alpha symbol.
-
-2000-12-06 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Added info about adding -lPW on HP-UX to satisfy the
- `alloca' symbol .
-
- * MORE.STUFF: Added info about deroff for djgpp.
-
- * tmac/an-old.tmac, tmac/groff_man.man, doc/groff.texinfo, NEWS: Fix
- documentation of -rcR switch.
-
-2000-12-03 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Implementing the -rcR switch (similar to mdoc);
- if -rcR=1 (which is now the default in nroff mode), a single, very
- long page is created instead of multiple pages: All `ne' and `wh'
- requests are put into conditionals; a new macro `an-end' is added to
- be called with `em'.
-
- Some other minor cleanups.
-
- * NEWS, tmac/groff_man.man, doc/groff.texinfo: Updated.
-
-2000-12-02 Werner LEMBERG <wl@gnu.org>
-
- Fixing a bug which prevented hyphenation in words followed
- immediately by a TOKEN_NODE (e.g. `\ ', `\~', etc.).
-
- * src/roff/troff/input.cc (process_input_stack <token::TOKEN_NODE>):
- Adding possibly_break_line().
- * src/roff/troff/env.h (environment): Make possibly_break_line()
- public.
-
- Make `\~' usable in .tr request.
-
- * src/roff/troff/token.h (token_type): Add TOKEN_STRETCHABLE_SPACE.
- (token): Add stretchable_space().
- * src/roff/troff/input.cc (token::next, token::delimiter,
- token::description, process_input_stack, do_translate,
- add_to_node_list, token::process): Use it.
- * src/roff/troff/node.h (node): Add fourth parameter to add_char()
- for adjusting the space.
- * src/roff/troff/node.cc (node::add_char): Implement it. Add code
- for stretchable space.
- * src/roff/troff/input.cc (token::add_to_node_list): Use it.
- (make_node): Add code for stretchable space.
- * src/roff/troff/env.cc (environment::add_char): Use it.
- * src/roff/troff/input.cc: Add ESCAPE_TILDE special character.
- (get_copy, token::next, transparent_translate, asciify): Use it.
-
- * NEWS, src/roff/troff/troff.man, src/roff/troff/TODO,
- doc/groff.texinfo: Updated.
- * man/groff.man: Small reorderings.
-
-2000-11-23 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Fixes.
- * src/preproc/eqn/main.cc (main): Use `config_macro_path' for -M
- option.
- * src/roff/troff/input.cc (main): Add `config_macro_path' and
- `safer_macro_path' to -M option.
- * src/roff/troff/troff.man: Fixes.
-
-2000-11-22 Werner LEMBERG <wl@gnu.org>
-
- Use safer path (except for config files) if -U isn't specified. Add
- a special macro path (without home and current directory) for config
- files. Add home directory to unsafe path for consistency. Don't
- include the home directory in the font path.
-
- * src/libs/libgroff/macropath.cc: Add `config_macro_path', change
- `macro_path'.
- * src/include/macropath.h: Add `config_macrp_path'.
- * src/libs/libgroff/fontfile.cc: Fix font path.
- * src/roff/troff/input.cc (process_startup_file): Use
- `config_macro_path'.
- (main): Select unsafe path if -U is given.
-
- * src/preproc/eqn/main.cc (main): Fixing search path for
- configuration file.
- * src/preproc/eqn/eqn.man: Updated.
-
- * src/roff/troff/troff.man, man/roff.man, tmac/groff_tmac.man:
- Updated.
-
- * src/preproc/grn/grn.man, src/devices/grodvi/grodvi.man,
- src/devices/grohtml/grohtml.man, src/devices/grolbp/grplbp.man,
- src/devices/grolj4/grolj4.man, src/devices/grops/grops.man,
- src/devices/grotty/grotty.man: Updated.
-
- * Makefile.in: Fix comments.
-
-2000-11-17 Werner LEMBERG <wl@gnu.org>
-
- * tmac/safer.tmac: Empty file added (again) for compatibility
- reasons.
- * tmac/Makefile.sub: Updated.
-
-2000-11-16 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grodvi/dvi.cc (main),
- src/devices/grohtml2/post-html.cc (main),
- src/devices/grolbp/lbp.cc (main), src/devices/grolj4/lj4.cc
- (main), src/devices/grops/ps.cc (main), src/devices/grotty/tty.cc
- (main), src/preproc/eqn/main.cc (main), src/preproc/grn/main.cc
- (main), src/preproc/html2/pre-html.cc (main),
- src/preproc/pic/main.cc (main), src/preproc/refer/refer.cc (main),
- src/preproc/soelim/soelim.cc (main), src/preproc/tbl/main.cc
- (main), src/roff/groff/groff.cc (main), src/roff/troff/input.cc
- (main), src/utils/hpftodit/hpftodit.cc (main),
- src/utils/indxbib/indxbib.cc (main), src/utils/lkbib/lkbib.cc
- (main), src/utils/lookbib/lookbib.cc (main),
- src/utils/pfbtops/pfbtops.c (main), src/utils/tfmtodit/tfmtodit.cc
- (main): Use stdout for -v.
- * src/roff/groff/groff.cc (run_commands),
- src/roff/groff/pipeline.c (run_pipeline): New parameter `no_pipe'
- to make direct printing to stdout possible.
- * src/roff/groff/pipeline.h: Updated.
-
- * src/utils/afmtodit/afmtodit.pl: Add -v switch.
- * src/utils/afmtodit/Makefile.sub (afmtodit): Use @VERSION@.
- * src/utils/afmtodit/afmtodit.man: Updated.
-
- * src/utils/addftinfo/addftinfo.cc (main): Add -v switch.
- (version): New function.
- (usage): Updated.
- * src/utils/addftinfo/addftinfo.man: Updated.
-
- * src/devices/*/*, src/preproc/*/*, src/roff/*/*, src/utils/*/*:
- Fixing copyright dates.
-
- * src/preproc/eqn/neqn.sh: Adding GROFF_BIN_PATH to path instead of
- replacing it.
-
- * src/devices/grolbp/lbp.cc (main): Use Version_string instead of
- version_string.
-
- * src/roff/nroff/Makefile.sub (nroff): Fix use of @VERSION@.
-
-2000-11-15 Werner LEMBERG <wl@gnu.org>
-
- In all programs, make -v return immediately with exit status 0 to
- be compliant with the GNU standard.
-
- * src/devices/grodvi/dvi.cc (main),
- src/devices/grohtml2/post-html.cc (main),
- src/devices/grolbp/lbp.cc (main), src/devices/grolj4/lj4.cc
- (main), src/devices/grops/ps.cc (main), src/devices/grotty/tty.cc
- (main) src/preproc/eqn/main.cc (main), src/preproc/grn/main.cc
- (main), src/preproc/html2/pre-html.cc (main),
- src/preproc/pic/main.cc (main), src/preproc/refer/refer.cc (main),
- src/preproc/soelim/soelim.cc (main), src/preproc/tbl/main.cc
- (main), src/roff/groff/groff.cc (main), src/roff/troff/input.cc
- (main): Implement it.
- * NEWS: Updated.
-
- * src/roff/groff/groff.cc (main): Add copyright notice. Add refer
- and postprocessors to the -v option.
-
- * src/roff/grog/grog.pl: Implement -v.
- * src/roff/grog/Makefile.sub (grog): Use @VERSION@.
- * src/roff/grog/grog.man, doc/groff.texinfo: Updated.
-
- * src/roff/nroff/nroff.sh: Implement -v.
- * src/roff/nroff/Makefile.sub (nroff): Use @VERSION@.
- * src/roff/nroff/nroff.man: Updated.
-
- * src/preproc/eqn/main.cc (main): Fix comment typo.
-
- * MORE.STUFF: Added info about djgpp port of grap.
-
-2000-11-14 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/grog/grog.{pl,sh}: Implemented -C switch for compatibility
- mode (or rather, implemented non-compatibility mode).
- * NEWS, src/roff/grog/grog.man, doc/groff.texinfo: Updated.
-
- * src/roff/groff/groff.cc (main): Add BIN_PATH to PATH instead of
- replacing it -- we don't find gxditview otherwise.
- * NEWS, src/roff/groff/groff.man, doc/groff.texinfo: Updated.
-
- * src/preproc/pic/depend: Removed. Unnecessary.
-
- Implemented dummy keyword `solid' in pic for compatibility with
- AT&T pic.
-
- * lex.cc (lookup_keyword): Added `solid'.
- * pic.y: Added SOLID with dummy rule.
- * pic.cc, pic_tab.h: Regenerated.
- * doc/pic.ms: Updated.
-
-2000-11-13 Werner LEMBERG <wl@gnu.org>
-
- For security reasons, don't use the current directory but the home
- directory while searching and scanning troffrc and troffrc-end.
- Similarly, replace the current directory with the home directory
- in the font path.
-
- * Makefile.in (fontpath, tmacpath): Remove current directory.
-
- * src/libs/libgroff/searchpath.cc (search_path::search_path): Add
- two parameters `add_home' and `add_current'.
- (search_path::~search_path, search_path::command_line_dir,
- search_path::open_file): Remove tests for `dirs' being zero.
- * src/include/searchpath.h: Adjust.
- * src/libs/libgroff/macropath.cc, src/include/macropath.h: Add
- `safer_macro_path'.
- * src/libs/libgroff/fontfile.cc: Adjust `font_path'.
-
- * src/roff/troff/troff.h: Add `searchpath.h' and `mac_path'.
- * src/roff/troff/input.cc: Use `mac_path', initialized with
- `macro_path'.
- (process_startup_file): Set `mac_path' to `safer_macro_path'.
- * src/roff/troff/env.cc: Use `mac_path'.
-
- * src/preproc/eqn/main.cc (main): Use `safer_macro_path'.
-
- * NEWS, man/roff.man, src/roff/troff/troff.man,
- src/roff/groff/groff.man, tmac/groff_tmac.man, arch/djgpp/README:
- Updated.
-
-2000-11-12 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Don't include groff-getopt.h for OSF/1.
-
- * aclocal.m4 (GROFF_SYS_ERRLIST): Do test in C, not in C++.
- * configure.in: Fix typo in comment.
- * configure: Regenerated.
-
- * src/libs/libgroff/*, src/include/*, src/roff/troff/*: Fixing
- copyright dates.
-
-2000-11-08 Werner LEMBERG <wl@gnu.org>
-
- Add system tmac directory (/usr/local/lib/groff/site-tmac).
-
- * Makefile.in: Add $(libdir), $(libprogramdir), and $(systemtmacdir).
- (uninstall_dirs): Add $(libdir), $(libprogramdir), and
- $(systemtmacdir).
- Use @libdir@.
- * Makefile.comm (.man.n): Add @SYSTEMMACRODIR@.
- * tmac/Makefile.sub (install_data): Create
- $(systemtmacdir) and $(localtmacdir).
- (uninstall_sub): Use $(systemtmacdir) for wrapper macros.
- * man/roff.man, src/roff/troff/troff.man, src/roff/groff/groff.man,
- NEWS, doc/groff.texinfo: Updated and minor fixes.
-
- * Makefile.comm, Makefile.in: Added tmac_{s,an}_prefix stuff again.
- * tmac/Makefile.sub: Added `wrap' stuff again, but installing into
- $(systemtmacdir) since the wrapper files are platform-dependent.
-
-2000-11-01 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fix typo.
-
-2000-10-26 Werner LEMBERG <wl@gnu.org>
-
- Convert macros `tmac.XXX' to `XXX.tmac'. Special cases:
- tmac.doc.old -> doc-old.tmac
- tmac.an.old -> an-old.tmac
-
- * tmac/tmac.*: Moved to ...
- * tmac/*.tmac: this.
- * tmac/man.local: Fix comment.
- * tmac/groff_man.man, tmac/groff_markup.man, tmac/groff_mdoc.man,
- tmac/groff_me.man, tmac/groff_ms.man, tmac/groff_tmac.man: Updated.
- Added some `FILES' sections. More use of @...@ directives. Other
- minor updates.
- * arch/djgpp/README, font/devutf8/NOTES: Updated.
- * doc/homepage.ms, doc/groff.texinfo: Updated.
- * man/groff.man, man/roff.man: Updated.
- * src/devices/grodvi/grodvi.man, src/devices/grolbp/grolbp.man,
- src/devices/grolj4/grolj4.man, src/devices/grops/grops.man,
- src/devices/grotty/grotty.man: Updated.
- * src/preproc/pic/pic.man: Updated.
- * src/roff/grog/grog.pl, src/roff/grog/grog.sh: Use -mdoc-old
- instead of -mdoc.old.
- * src/roff/grog/grog.man: Document -mdoc and -mdoc-old.
- * src/roff/nroff/nroff.man: Updated.
- * NEWS: Updated.
-
- * tmac/fixmacros.sed, tmac/strip.sed: Add explanatory comment.
-
- * tmac/mm.diff: Removed -- it has no use now since the mm package
- is part of groff.
-
- * tmac/*: Removed trailing spaces.
-
- * arch/djgpp/t-groff.bat: Fix GROFF_TMAC_PATH (hyphen.us is now in
- the tmac subdirectory also).
-
- * Makefile.comm, Makefile.in: Remove tmac_{s,an}_prefix stuff.
- * tmac/Makefile.sub: Adapted to new macro names; removed `wrap'
- stuff since it is no longer needed.
-
- * README, PROBLEMS: Updated.
-
-2000-10-25 Werner LEMBERG <wl@gnu.org>
-
- Invert current behaviour: Search first FOOBAR.tmac, then
- tmac.FOOBAR.
-
- * src/roff/troff/input.cc: Introduce MACRO_POSTFIX.
- (open_mac_file, macro_source): Implement it.
- * src/roff/troff/troff.man, tmac/groff_tmac.man, man/roff.man,
- doc/groff.texinfo, NEWS: Document it.
-
- * src/roff/nroff/nroff.man, src/roff/groff/groff.man, man/groff.man:
- Small documentation improvements.
-
- * test-groff: Fix GROFF_TMAC_PATH (hyphen.us is now in the tmac
- subdirectory also).
-
- * font/devps/Makefile.sub: Fix rules for dingbats.*map.
-
-2000-10-24 Werner LEMBERG <wl@gnu.org>
-
- Add local tmac directory (groff/site-tmac).
-
- * Makefile.in: Add $(localtmacdir).
- (uninstall_dirs): Add $(localtmacdir).
- * Makefile.comm (.man.n): Add @LOCALMACRODIR@.
- * tmac/Makefile.sub (install_data, uninstall_sub): Handle man.local
- in $(localtmacdir). Create $(localtmacdir).
- * man/roff.man, src/roff/troff/troff.man, NEWS, doc/groff.texinfo:
- Updated and minor fixes.
-
- Rename font/devps/generate/dingbats[r]map to dingbats.[r]map.
-
- * font/devps/generate/Makefile.sub, arch/djgpp/README: Adjust.
-
-2000-10-23 Werner LEMBERG <wl@gnu.org>
-
- Move hyphen.us to tmac directory.
-
- * src/roff/troff/hyphen.us: Removed.
- * src/tmac/hyphen.us: Added.
- * src/roff/troff/Makefile.sub, tmac/Makefile.sub: Updated.
-
- Change installation structure for data files from .../groff/... to
- .../groff/<version><revision>/... to be conform with other GNU
- programs.
-
- * Makefile.in, Makefile.comm, src/utils/indxbib/Makefile.sub,
- doc/Makefile: Implement it.
- * aclocal.m4 (GROFF_PAGE): Add test for new directory structure.
- * configure: Updated.
- * arch/djgpp/README, font/devutf8/NOTES: Use it.
- * NEWS: Document it.
- * man/roff.man, tmac/groff_tmac.man: Use @FONTPATH@, @FONTDIR@, and
- @MACRODIR@ instead of hard-coded directories.
-
-2000-10-22 Werner LEMBERG <wl@gnu.org>
-
- Implement $GROFF_BIN_PATH environment variable (which defaults to
- $bindir) used for child programs of groff and similar wrappers.
-
- * gendefs.sh: Improve documentation.
- * Makefile.comm (,man.n), src/include/Makefile.sub (defs.h),
- src/preproc/eqn/Makefile.sub (neqn),
- src/roff/nroff/Makefile.sub (nroff): Add $(bindir).
- * src/preproc/eqn/neqn.sh, src/roff/nroff/nroff.sh: Implement
- $GROFF_BIN_PATH.
- * src/roff/groff/groff.cc (main): Implement $GROFF_BIN_PATH and
- $GROFF_PATH__ (the latter for communication with troff).
- * src/roff/troff/input.cc (main): Use $GROFF_PATH__ for $PATH if
- set.
- * NEWS, src/roff/nroff/nroff.man, src/roff/groff/groff.man,
- doc/groff.texinfo: Document it.
-
- * doc/groff.texinfo: Improve documentation of troff's -a option.
-
-2000-10-17 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/node.cc: Fixed calculation of opminx and fixed
- non-intrusive eol marker.
- (troff_output_file::determine_line_limits): New function.
- (troff_output_file::draw): Use it.
- * src/roff/troff/env.cc (environment::add_html_tag): Use output() +
- output_pending_lines() instead of output_line().
- * src/preproc/eqn/main.cc (do_file): Fix graphic_end().
- * src/preproc/html2/pre-html.cc (char_buffer::write_file_troff,
- createImage): Small fixes.
-
-2000-10-14 Werner LEMBERG <wl@gnu.org>
-
- Replace tmac.safer with a real secure solution.
-
- * src/roff/troff/input.cc (open_request, opena_request, pipe_source,
- system_request, pipe_output): Disable requests if in safer mode.
- * src/roff/groff/groff.cc (main): Remove reference to tmac.safer.
- * tmac/tmac.safer, tmac/groff_msafer.man: Removed.
- * tmac/Makefile.sub, NEWS, man/roff.man, tmac/groff_tmac.man,
- doc/groff.texinfo, src/roff/groff/groff.man,
- src/roff/troff/troff.man, arch/djgpp/README: Updated.
-
- * src/devices/grops/ps.cc (main), src/devices/grops/psrm.cc
- (resource_manager::output_prolog): Replace setenv() with putenv().
-
-2000-10-09 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libbib/map.c, src/libs/libgroff/getcwd.c,
- src/libs/libgroff/strtol.c, src/preproc/html2/image.cc,
- src/preproc/html2/pre-html.cc, src/preproc/html2/pushbackbuffer.cc,
- src/roff/groff/pipeline.c: Removing `#ifndef errno' to avoid
- compilation errors with some compilers. It seems that this code
- is no longer necessary -- if yes, it is easy to add some #ifdef's
- for that particular old-fashioned compiler.
-
- * MORE.STUFF: Added info about Meta-tbl.
-
- * doc/groff.texinfo: Added more info about `.if "..."..."'.
-
-2000-10-07 Werner LEMBERG <wl@gnu.org>
-
- Adding a new escape sequence \B'...': If the string between
- the delimiters is a valid numeric expression, return the character
- `1', and `0' otherwise. This is an analogon to \A.
-
- * src/roff/troff/input.cc (do_expr_test): Implement it.
- (token::next): Use it.
- * src/roff/troff/troff.man, NEWS, man/groff.man: Document it.
-
- * tmac/tmac.trace: Made independent from escape character.
-
-2000-10-06 Werner LEMBERG <wl@gnu.org>
-
- Adding a new request .dei: define indirect. The first and second
- parameter of .dei are taken from string registers instead directly;
- this very special request is needed to make tmac.trace independent
- from the escape character (which might even be disabled).
-
- * src/roff/troff/input.cc (do_define_macro): Implement it.
- (define_macro_indirect): New function.
- (init_input_requests): Use it.
-
- Adding two requests .ecs and .ecr: Save and restore the escape
- character. These two requests are needed to make tmac.trace
- independent from the escape character (which might even be
- disabled).
-
- * src/roff/troff/input.cc (save_escape_char, restore_escape_char):
- Implement it.
- (init_input_requests): Use it.
-
- * src/roff/troff/troff.man, NEWS, man/groff.man: Updated.
-
-2000-09-22 Ricardo Soares Guimarães <ricardo@conectiva.com.br>
-
- Adding a new option -P and new environment variable GROPS_PROLOGUE
- to grops, selecting a different prologue file (minor modifications
- by WL).
-
- * src/devices/grops/psrm.cc (resource_manager::output_prolog),
- src/devices/grops/ps.cc (main): Implement it.
- * src/devices/grops/grops.man, NEWS: Document it.
-
-2000-09-22 Werner LEMBERG <wl@gnu.org>
-
- * INSTALL: Add info about selecting paper format.
-
-2000-09-21 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (main): Fixing compiler warning.
- * src/include/{driver.h, lib.h}: Move inclusion of string.h and
- strings.h from the former to the latter.
- * src/devices/grolbp/lpb.cc, src/include/lib.h: Move strncasecmp()
- stuff from the former to the latter.
-
-2000-09-11 Werner LEMBERG <wl@gnu.org>
-
- Implementing two new requests .tm1 and .tmc: The former is similar
- to .tm but can output leading spaces; its syntax is similar to
- defining a string, i.e., a `"' can be used to mark the beginning of
- the string to be written to stderr: `.tm1 " test'. The latter is
- similar to .tm1 but doesn't write out a final newline character.
-
- * src/roff/troff/input.cc (terminal1, terminal_continue,
- do_terminal): New functions.
- (init_input_requests): Use them.
- * src/roff/troff/troff.man, NEWS, man/groff.man: Updated.
-
-2000-09-09 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_mdoc.samples.man: Small fixes.
-
-2000-09-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_mdoc.man: Fixing typo.
-
-2000-09-02 Werner LEMBERG <wl@gnu.org>
-
- Implementing a .nop request which does nothing.
-
- * src/roff/troff/input.cc (nop_request): New function.
- (init_input_requests): Use it.
- * src/roff/troff/troff.man, NEWS, man/groff.man: Updated.
-
-2000-09-01 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added some comments.
-
-2000-08-30 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/TODO: Updated.
-
-2000-08-25 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fix comment how to compile the DVI file.
-
-2000-08-25 Eli Zaretskii <eliz@is.elta.co.il>
-
- * font/devps/generate/Makefile (SHELL): Define explicitly to
- "/bin/sh", for non-Unix platforms.
- (extraclean): Use a more portable "" quoting instead of a
- backslash (which doesn't work on DOS/Windows).
-
- * font/devlj4/generate/Makefile (extraclean): Ditto.
-
- * font/devdvi/generate/Makefile (extraclean): Ditto.
-
-2000-08-25 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, doc/groff.texinfo, tmac/groff_tmac.man, man/roff.man,
- src/roff/troff/troff.man: Document Eli's latest changes.
-
-2000-08-25 Eli Zaretskii <eliz@is.elta.co.il>
-
- * src/roff/troff/input.cc (open_mac_file, macro_source): Support
- macro file names of the form NAME.tmac as well as tmac.NAME.
-
-2000-08-25 Werner LEMBERG <wl@gnu.org>
-
- * src/include/posix.h: Remove definition of FILENAME_MAX.
-
- * src/preproc/html2/pre-html.h, pre-html.cc: Add return type to
- `sys_fatal' and `stop' function().
-
- * test-groff: Updated.
-
-2000-08-24 Gaius Mulley <gaius@glam.ac.uk>
-
- Added the new troff command .output <arg> to suppress output (while
- still obeying motion) and also the opminx, opminy, opmaxx, opmaxy
- registers (for passing the output dimensions to the output device).
-
- * src/roff/troff/div.cc (top_level_diversion::output): Use `width'
- parameter.
- * src/roff/troff/node.h, src/roff/troff/node.cc
- (troff_output_file::really_print_line,
- ascii_output_file::really_print_line,
- supress_output_file::really_print_line): Use `width' parameter.
- (troff_output_file::really_on, troff_output_file::really_off,
- output_file::on, output_file::off, real_output_file::on,
- real_output_file::off, real_output_file::really_on,
- real_output_file::really_off): New functions.
- (real_output_file:public output_file): New variable `output_on'.
- (real_output_file::begin_page, real_output_file::copy_file,
- real_output_file::transparent_char, real_output_file::print_line):
- Use it.
- (real_output_file::print_line): Use check_output_limits.
- * src/roff/troff/reg.h, src/roff/troff/request.h,
- src/roff/troff/input.cc (assign_registers): New function to remove
- two `goto's.
- (do_ps_file): Use it.
- (check_output_limits, reset_output_registers, output_request,
- init_output_requests): New functions.
- (init_input_requests): Updated.
-
- Added new grohtml2 device and html2 preprocessor (coding
- not yet finished) which will eventually replace grohtml.
-
- * Makefile.in, tmac/Makefile.sub, tmac/eqnrc, tmac/troffrc-end:
- Updated.
- * src/include/htmlindicate.h, src/include/htmlindicate
- (html_begin_suppress, html_end_suppress): New functions.
- * src/preproc/tbl/main.cc: Use it.
- * src/roff/groff/groff.cc: Add support for html2 device (which will
- automatically invoke the html2 preprocessor).
- * src/roff/troff/input.cc (is_html2): New variable.
- * src/roff/troff/troff.h, src/roff/troff/env.h,
- src/roff/troff/env.cc (environment::add_html_tag): New function
- (uses `is_html2').
- (environment::do_break): Use it.
- * font/devhtml2/*: New files.
- * src/devices/grohtml2: New device.
- * src/preproc/html2: New preprocessor.
- * tmac/tmac.html-tags, tmac/tmac.html2: New files.
-
-2000-08-23 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grolbp/lbp.cc: Same workaround for sinix as for AIX.
-
-2000-08-22 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Provide a fix for IRIX to not include
- groff-getopt.h.
-
-2000-08-18 Werner LEMBERG <wl@gnu.org>
-
- * configure.in: Don't provide an empty value for SH_SCRIPT_SED_CMD
- since some non-GNU sed programs can't handle null regexps.
- * configure, src/preproc/eqn/Makefile.sub,
- src/roff/grog/Makefile.sub, src/roff/nroff/Makefile.sub: Updated.
-
- * src/devices/grolbp/lbp.cc: Add an AIX workaround for an autoconf
- bug (string.h and strings.h are both needed according to latest
- POSIX standard).
-
- * MORE.STUFF: Added info about unroff and troffcvt.
-
-2000-08-08 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tmac.a4: Will now work with ms macros also; -ma4 should be
- used before -ms.
-
- * tmac/tmac.man.old: Remove unused number register.
-
- * tmac.doc: Minor documentation fix.
-
-2000-08-07 Paul Eggert <eggert@twinsun.com>
-
- * src/roff/groff/pipeline.c (is_system_shell):
- Fix typo: "monocased_shell" no longer exists.
-
-2000-08-07 Paul Eggert <eggert@twinsun.com>
-
- Remove FILENAME_MAX limits.
-
- * src/roff/groff/pipeline.c (is_system_shell): Do not assume
- that the argument length is less than FILENAME_MAX.
- * src/libs/libgroff/tmpfile.cc (add_tmp_file): Likewise.
- Use struct hack to allocate and free file name.
- (struct xtmpfile_list): fname is now part of the structure,
- not a pointer to another string.
-
-2000-08-07 Tom Schmidt <tschmidt@micron.com>
-
- * src/include/posix.h: Add a default value for FILENAME_MAX.
-
-2000-08-06 Paul Eggert <eggert@twinsun.com>
-
- Add support for new BSD-style man pages (with ".Dd" instead of
- ".TH"), so that "groff -man" understands both styles, even
- when running "groff -man" on a host whose system man page
- macros don't support ".Dd".
-
- * tmac/Makefile.sub (NORMALFILES): Add tmac.an.old.
- (stamp-wrap): Source tmac.andoc first when wrapping man macros,
- in case the system man macros don't define Dd or TH.
-
- * tmac/tmac.an.old: Renamed from tmac/tmac.an.
- * tmac/tmac.an: New one-line file.
- * tmac/tmac.andoc (TH): Adjust to the tmac.an.old file renaming.
-
-2000-08-06 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Fixing typos.
-
-Local Variables:
-version-control: never
-coding: latin-1
-End:
diff --git a/contrib/groff/ChangeLog.118 b/contrib/groff/ChangeLog.118
deleted file mode 100644
index 172a57f08320..000000000000
--- a/contrib/groff/ChangeLog.118
+++ /dev/null
@@ -1,3794 +0,0 @@
-
-Version 1.18.1 released
-=======================
-
-2002-10-08 Werner LEMBERG <wl@gnu.org>
-
- * doc/webpage.ms, NEWS: Updated.
-
-2002-10-07 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc-common (Ss): Add final `.ns' (similar to `.Sh') to
- suppress additional whitespace after the header.
-
- * tmac/doc-ditroff, tmac/doc-nroff (Am): New string to be in sync
- with NetBSD.
-
- * src/preproc/grn/grn.man, tmac/groff_mdoc.man, NEWS: Updated.
-
-2002-10-07 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common(doc-volume-operating-system-ateol): New flag.
- (Dt): Use it to improve language localization (especially Russian
- and French).
-
-2002-10-07 Daniel Senderowicz <daniel@synchrods.com>
-
- * src/preproc/grn/gprint.h (BSPLINE, BEZIER): New macros.
- * src/preproc/grn/hdb.cc (DBGetType): Parse spline and bezier
- drawing commands.
- * src/preproc/grn/hgraph.cc (drawwig): Add parameter to control
- curve type.
- Call `picurve' for BSPLINE.
- (HGPrintElt): Handle BSPLINE.
- * src/preproc/grn/README: Document it.
-
-2002-10-03 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (break_char_node::col): New variable.
- Updated constructor.
- (space_node::tprint, word_space_node::tprint): Call `fill_color'
- unconditionally.
- (space_node::space_node): Remove assertion.
- (break_char_node::add_self): Pass color argument to space node.
- * src/roff/troff/input.cc (token::add_to_node_list, token::process):
- Ditto.
- * src/roff/troff/env.cc (environment::do_break,
- environment::add_padding): Ditto.
-
-2002-10-02 Werner LEMBERG <wl@gnu.org>
-
- Redesigning color support in troff. Colors are no longer
- represented as separate nodes but are now part of glyph nodes and
- friends. This fixes the current formatting misbehaviour due to the
- changes introduced on 2002-09-20. Some extra code is necessary for
- proper grotty support: Without adding color variables to
- space-related nodes, the background color would be changed too late.
-
- * src/roff/troff/node.h, src/roff/troff/node.cc:
- s/current_pagecolor/current_fill_color/.
- s/current_glyphcolor/current_glyph_color/.
- (glyph_color_node, fill_color_node): Removed.
- (node::get_glyph_color, node::get_fill_color): New virtual member
- functions.
- (space_node::col): New variable.
- Updated constructors of space_node and derived classes accordingly.
- (hmotion_node::col): New variable.
- Updated constructors of hmotion_node and space_char_hmotion_node
- accordingly.
- (vmotion_node::col): New variable.
- Updated constructor accordingly.
- (draw_node::gcol, draw_node::fcol): New variables.
- Updated constructor accordingly.
- (special_node::gcol, special_node::fcol): New variables.
- Updated constructors accordingly.
- (troff_output_file::put_char, troff_output_file::put_charwidth,
- troff_output_file::draw): Set glyph and fill color.
- (troff_output_file::start_special): Set glyph and fill color.
- Always set current font.
- (troff_output_file::fill_color, troff_output_file::glyph_color):
- Don't call `do_motion'.
- (glyph_node::gcol, glyph_node::fcol): New variables.
- Updated constructors of glyph_node and ligature_node accordingly.
- (glyph_node::get_glyph_color, glyph_node::get_fill_color): New
- member functions.
- (glyph_node::merge_glyph_node,
- kern_pair_node::add_discretionary_hyphen,
- node::add_discretionary_hyphen): Updated.
- (break_char_node::merge_self): Updated.
- (word_space_node::tprint, space_node::tprint, hmotion_node::tprint,
- vmotion_node::tprint): Handle color.
- (make_glyph_node, make_node, node::add_char): Updated.
-
- * src/roff/troff/env.cc (environment::space_newline,
- environment::space, environment::output_line, environment::do_break,
- environment::make_tab_node, environment::add_padding, title):
- Updated.
- (environment_switch, environment_copy): Don't add color nodes.
-
- * src/roff/troff/input.cc (do_glyph_color, do_fill_color): Return
- nothing.
- (token::next): Updated.
- \m and \M now are as transparent as \s.
- (process_input_stack, token::add_to_node_list, token::process,
- read_draw_node): Updated.
- (charinfo_to_node_list): Don't add color nodes.
-
- * doc/groff.texinfo: Updated.
-
-2002-09-27 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (ds-operating-system-FreeBSD-4.*): New version
- strings.
-
-2002-09-27 Colin Watson <cjwatson@debian.org>
-
- * src/roff/troff/node.cc (bracket_node::copy): Check `list' != 0.
-
-2002-09-23 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grolbp/lbp.cc: Replace `300' with `font::res' where
- appropriate.
- (DEFAULT_LINEWIDTH_FACTOR): New macro.
- (linewidth_factor): New global variable.
- (lbp_printer::set_line_thickness): Fix case for size < 0, using
- linewidth_factor.
- (long_options): Add -w/--linewidth option.
- (usage): Updated.
- (main): Handle -w option to set linewidth_factor.
- (lbp_printer::lbp_printer): Initialize req_linethickness, not
- line_thickness.
-
- * src/devices/grolbp/grolbp.man, NEWS, doc/webpage.ms: Updated.
-
-2002-09-22 Paco Andrés Verdú <pandres@dragonet.es>
-
- Fixed a bug in the line thickness setting code.
-
- * src/devices/grolbp/lbp.cc (lbp_printer::req_linethickness): New
- variable.
- (lbp_printer::set_line_thickness): Pass environment as second
- parameter.
- Implement it actually.
- (lpb_printer::set_char, lbp_printer::draw): Use `req_linethickness'
- and `set_line_thickness, depending on the current font size.
-
-2002-09-21 Werner LEMBERG <wl@gnu.org>
-
- Some Debian patches.
-
- * src/roff/groff/pipeline.h (MAX_COMMANDS): Increase to 12.
- * src/roff/troff/node.cc (bracket_node::copy): Initialize
- `list->last'.
-
-2002-09-20 Werner LEMBERG <wl@gnu.org>
-
- * configure: Regenerated with autoconf 2.54.
-
-2002-09-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.h (environment): Rename cur_glyph_color to
- glyph_color.
- Rename cur_fill_color to fill_color.
- * src/roff/troff/env.cc: Updated.
-
-2002-09-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cc (title): Copy color status after processing
- title.
- * src/roff/troff/input.cc (charinfo_to_node_list): Emit glyph and
- fill color nodes to reset colors properly.
-
- * tmac/www.tmac (DC): Fix color handling.
-
- * src/preproc/pic/pic.man, doc/pic.ms: Document some color issues.
- * doc/groff.texinfo: Fixing documentation of `tl' request.
- * doc/webpage.ms: Updated.
-
-2002-09-19 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cc (environent_switch, environment_copy):
- Emit glyph and fill color nodes to initialize colors properly.
-
-2002-09-17 Colin Watson <cjwatson@debian.org>
-
- * src/roff/troff/env.cc (environment::set_glyph_color,
- environment::set_fill_color): Fix typo which prevented \m[] work
- correctly.
-
-2002-09-17 Werner LEMBERG <wl@gnu.org>
-
- Add left and right italic correction to non-slanted PS fonts. This
- is an experimental feature to improve image rendering of grohtml.
-
- * font/devps/generate/Makefile (RFLAG): New variable, set to `-i 0'.
- ({T,H,C,P,N,BM,A,HN}{R,B}, ZD, S, ZDR): Use it.
- * font/devps/*: All non-slanted fonts regenerated.
- * NEWS: Updated.
-
-2002-09-16 Werner LEMBERG <wl@gnu.org>
-
- Add a site-specific font directory.
-
- * Makefile.in (localfontdir, legacyfontdir): New variables.
- (fontpath): Use them.
- (MDEFINES, uninstall_dirs): Updated.
- * Makefile.comm (.man.n): Add `LOCALFONTDIR' and `LEGACYFONTDIR'.
- Remove `FONTPATH' and `MACROPATH'.
-
- * src/roff/troff/troff.man, NEWS: Updated.
- * doc/groff.texinfo (Font Directories): New section.
- Other minor fixes.
-
- * src/devices/grodvi/grodvi.man, src/devices/grohtml/grohtml.man,
- src/devices/grolbp/grolbp.man, src/devices/grolj4/grolj4.man,
- src/preproc/grn/grn.man: Minor fixes.
-
- * src/devices/grohtml/post-html.cc (html_printer::do_tab_ts):
- Remove unused variable.
-
-2002-09-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, man/groff_font.man: Clarify argument of \N.
- * man/groff_out.man: Fix documentation of 'N'.
-
-2002-09-09 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/Makefile.in (webpage.html): Depend on gnu.eps also.
- * src/roff/troff/env.cc (indent): Emit html tag only if break_flag is
- set.
- * src/devices/grohtml/post-html.cc (text_glob::is_br_ni): Removed.
- (text_glob::is_br, html_printer::lookahead_for_tables): Updated.
- (html_printer::do_tab_ts): Call `emit_table_header' with `FALSE'.
- * src/devices/grohtml/html-text.cc (html_text::start_tag) <P_TAG,
- PRE_TAG>: Call `begin' with `FALSE'.
-
-2002-09-09 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/libs/libgroff/string.cc (string::extract): Fix position of
- terminating null byte.
-
-2002-09-08 Werner LEMBERG <wl@gnu.org>
-
- Add global option `nospaces' to tbl so that leading and trailing
- spaces in data items are ignored.
-
- * src/libs/libgroff/string.cc (string::remove_spaces): New member
- function to remove leading and trailing spaces.
- * src/include/stringclass.h: Updated.
-
- * src/preproc/tbl/table.h (table): Add flag `NOSPACES'.
-
- * src/preproc/tbl/main.cc (process_options): Handle `nospaces'
- option.
- Fix typo in error messages.
- (process_data): Implement `nospaces' option.
- * src/preproc/tbl/tbl.man, NEWS, doc/webpage.ms: Updated.
-
-2002-09-07 Werner LEMBERG <wl@gnu.org>
-
- * src/include/config.hin: Add `HAVE_ISATTY'.
- * src/libs/libgroff/tmpfile.cc (xtmpfile_list): Drop `const' for
- `fname' member.
- * src/libs/libgroff/tmpname.cc: Include `time.h'.
- * src/libs/libdriver/input.cc (Char): Add `operator==' and
- `operator!=' for `char'.
- * doc/groff.texinfo: Replace @ifnottex block for top node with
- @ifhtml block.
-
-2002-09-06 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.in (.texinfo.html): Add -I switch.
- * doc/groff.texinfo: Add @ifnottex block for top node to make
- translation to HTML work.
-
-2002-09-05 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/preproc/html/pre-html.cc (LETTER_LENGTH): Removed.
- (get_papersize, determine_vertical_offset): Removed.
- (char_buffer::do_image): Always specify letter size.
- (main): Updated.
- (imageList::createPage): Use -dDEVICEHEIGHTPOINTS instead of
- -sPAPERSIZE.
-
-2002-09-05 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, tmac/groff_man.man: Improve documentation of
- default indentation.
-
-2002-09-04 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/preproc/html/pre-html.cc (imageList::createPage): Use
- -sPAPERSIZE for gs.
- (generateImages): Clean up push-back buffer.
-
-2002-09-04 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * doc/groff.texinfo: Minor fixes.
-
-2002-08-21 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/preproc/html/pre-html.cc (DEFAULT_LINE_LENGTH): New macro.
- (MAX_WIDTH, A4_LENGTH, A4_OFFSET, LETTER_OFFSET): Removed.
- (gsPaper): Removed.
- (determine_vertical_offset): Use LETTER_LENGTH.
- (createPage): Moved to ...
- (imageList::createPage): This.
- Call gs with -dDEVICEWIDTHPOINTS to avoid cropping.
- (imageList::getMaxX): New function.
- (createImage): Moved to ...
- (imageList::createImage): This.
- (imageList::createImages): New function.
- (generateImages): Read `maxx' directly.
- Updated.
- (scanArguments): Don't specify `gsPaper' for `-o'.
- (makeTempFiles): Call `xtmpfile' with the last argument set to
- `TRUE'.
-
-2002-08-24 Werner LEMBERG <wl@gnu.org>
-
- * src/include/nonposix.h (mkdir, WAIT, creat) [_MSC_VER]: Define.
- (WAIT, _WAIT_CHILD) [!_MSC_VER]: Define.
- * src/preproc/html/pre-html.cc (waitForChild): Use WAIT.
- * src/preproc/html/pushback.cc: Include nonposix.h.
- * src/roff/groff/pipeline.c: Define strcasecmp and strncasecmp
- conditionally.
-
-2002-08-23 Werner LEMBERG <wl@gnu.org>
-
- Use $(OBJEXT) for the object file extension.
-
- * Makefile.comm (.SUFFIXES): Add .obj.
- (.cc.obj, .c.obj): New implicit rules.
- * Makefile.in (OBJEXT): New variable, initialized from autoconf.
- (MDEFINES): Add EXEEXT and OBJEXT.
- * */Makefile.sub: s/.o/.$(OBJEXT)/.
-
-2002-08-22 Werner LEMBERG <wl@gnu.org>
-
- * INSTALL: Mention texinfo 4.2 as a prerequisite.
-
-2002-08-21 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (colType): Make enum global to
- the file.
- (html_printer::update_min_max, html_printer::add_table_end): New
- methods.
- (html_printer::lookahead_for_tables): Use them.
- Reset page offset correctly.
- (html_printer::~html_printer): Add creation of creator comment up.
-
-2002-08-20 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (T&): New dummy macro to avoid warning.
- * man/groff_tmac.man: Fix typos.
- * man/groff_font.man: Minor reordering.
- * contrib/eqn2graph/eqn2graph.man (Tp): New macro.
-
-2002-08-18 Gaius Mulley <gaius@glam.ac.uk>
-
- Avoid endless loops while scanning for tables.
-
- * src/devices/grohtml/post-html.cc (list::insert): Set
- ptr->right->left.
- (html_printer::next_horiz_pos): Add `text_glob' argument; update
- all callers.
- Return immediately if that argument is NULL.
- (html_printer::calc_nf): Don't test if `g' is NULL.
- (html_printer::lookahead_for_tables): Use
- `glyphs.move_right_get_data'.
- Don't test if `g' is NULL.
-
-2002-08-18 Gaius Mulley <gaius@glam.ac.uk>
-
- A better fix, replacing fix 2002-08-15, for increasing SIZE.
-
- * src/devices/grohtml/post-html.cc (char_block): Make `buffer'
- a pointer.
- (char_block::char_block): Allocate `buffer'.
- (char_buffer::add_string): Use it.
-
-2002-08-15 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/grops.man, src/devices/grolj4/grolj4.man,
- src/devices/grodvi/grodvi.man: Document default line thickness.
-
-2002-08-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (char_block): Increase SIZE to
- 8192.
-
-2002-08-14 Werner LEMBERG <wl@gnu.org>
-
- * doc/webpage.ms: Updated.
-
-2002-08-09 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (node::add_char): Call `freeze_space' for
- unbreakable space.
-
-2002-08-08 Aaron Campbell <aaron@monkey.org>
-
- * src/preproc/pic/object.cc (object_spec::make_move): Fix typo
- (&& -> &).
-
-2002-08-08 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (read_rgb, read_cmy, read_cmyk): Call
- tok.next().
- (read_gray): Ditto.
- Don't push back a space but a newline onto the stack.
-
-2002-08-07 Gaius Mulley <gaius@glam.ac.uk>
-
- Add fonts `CI', `CB', and `CBI' to grohtml which have been omitted
- inadvertently.
-
- * src/devices/grohtml/post-html.cc (html_printer::end_font,
- html_printer::start_font): Handle them.
- * src/devices/grohtml/html-text.cc (html_text::do_italic): Don't
- reset bold and tt.
- (html_text::do_bold): Don't reset italic and tt.
- (html_text::do_tt, html_text::do_pre): Don't reset bold and italic.
- * font/devhtml/DESC.proto: Add those fonts.
- * font/devhtml/Makefile.sub (PROTOFONTS): Updated.
-
-2002-08-07 Werner LEMBERG <wl@gnu.org>
-
- * MORE.STUFF: Added gpresent.
-
- * tmac/trace.tmac: Show nesting level by a corresponding amount of
- whitespace before printing the logging message.
-
-2002-07-31 Colin Watson <cjwatson@debian.org>
-
- * src/devices/grohtml/html-table.cc (html_table::finish_row):
- Initialize `n' to zero. This fixes a segfault on ARM.
-
-2002-07-30 Werner LEMBERG <wl@gnu.org>
-
- * doc/grnexmpl.me: Remove calls to .st and .sc which are undefined.
-
-2002-07-29 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/pic.y (print_arg, relative_path): Add missing
- final semicolon.
-
-2002-07-28 Colin Watson <cjwatson@debian.org>
-
- * src/devices/grohtml/post-html (html_printer::troff_tag): Handle
- `.ps'.
- (html_printer::html_printer): Initialize `pointsize'.
-
-2002-07-26 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.sub (PROCESSEDEXAMPLEFILES): Remove gnu.eps and
- gnu.png.
- (CLEANNOTSRCDIRADD): Add gnu.eps and gnu.png.
- (gnu.eps): Add -rle switch to pnmtops.
- (distfiles): Add gnu.eps and gnu.png.
-
-2002-07-25 Petter Reinholdtsen <pere@hungry.com>
-
- * src/libs/libdriver/input.cc (Char): Add const to `operator=='.
- Add `operator!='.
-
-2002-07-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.in, doc/Makefile.sub (groff_bin_path): Don't use
- ' \+' but ' *' for sed.
- (GROFF): Set GROFF_COMMAND_PREFIX to empty value.
-
-2002-07-23 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Document `papersize' keyword.
- * NEWS, man/groff_font.man: Updated.
-
-2002-07-23 Colin Watson <cjwatson@debian.org>
-
- Extend papersize keyword to accept more than a single entry. The
- first valid will be used.
-
- * src/libs/libgroff/font.cc (font::load_desc): Implement it.
- (font::scan_papersize): Really skip final newline.
- * src/preproc/html/pre-html.cc (get_papersize): Ditto.
-
-2002-07-23 Werner LEMBERG <wl@gnu.org>
-
- * configure.ac: Test for isatty.
- * configure: Regenerated.
- * src/include/posix.h: Check HAVE_ISATTY.
- * src/roff/troff/input.cc [ISATTY_MISSING]: Removed.
- * src/utils/lookbib/lookbib.cc: Include posix.h.
- Don't declare isatty.
-
-2002-07-21 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Add `output' request.
-
- * REVISION: Increased to 1.
-
-Version 1.18.0 released
-=======================
-
-2002-07-19 Gaius Mulley <gaius@glam.ac.uk>
-
- Allow internal glyph indices > 0xFF in grohtml for input characters.
-
- * src/devices/grohtml/post-html.cc (to_unicode): Use `unsigned int'
- as parameter.
- (html_printer::add_to_sbuf): Use `unsigned int' as first parameter.
- Updated all callers.
- (html_printer::sbuf_continuation, html_printer::overstrike): Ditto.
- (html_printer): Updated.
-
-2002-07-19 Werner LEMBERG <wl@gnu.org>
-
- * font/devhtml/R.proto: Updated to HTML 4, adding many glyphs.
- * font/devutf8/R.proto: Adding some missing glyphs.
- * font/devutf8/NOTES: Updated.
-
- * tmac/dvi.tmac: Add more composite glyphs.
- * tmac/html.tmac: Updated.
-
- * man/groff_char.man: Add `sum' and `product' entities.
-
- * NEWS: Updated.
-
-2002-07-18 Gaius Mulley <gaius@glam.ac.uk>
-
- Improved table, tab, and indenting support.
-
- * src/roff/troff/input.cc (file_iterator::suppress_newline_flag,
- string_iterator::suppress_newline_flag): Removed. Updated all
- function which have used it.
-
- * src/roff/troff/env.cc: Include `input.h'.
- (environment::add_node): Accept 0 as parameter.
- (environment::add_html_tag): Add `force' parameter.
- Updated all callers.
- (environment::add_html_tag_tabs): Ditto.
- For the moment, support left-aligned tabs only.
- (environment::make_html_tag): New function.
- (fill, no_fill): Set .br html tag additionally.
- (environment::newline): Emit `eol.ce' or `eol' tag for html.
- (environment::add_html_tag_eol): Removed.
- (tab_stops::distance_to_next_tab): Add variant for handling
- nextpos'.
- (environment::distance_to_next_tab): Ditto.
- Updated all callers.
- (environment::handle_tab): Handle tabs for html.
-
- * src/roff/troff/env.h: Updated.
-
- * src/roff/troff/div.cc: Updated all callers of
- `environment::add_html_tag'.
-
- * src/devices/grohtml/html-table.cc,
- src/devices/grohtml/html-table.h: New files.
-
- * src/devices/grohtml/html-text.cc (html_text): New members
- `blank_para' and `start_space'.
- (html_text::issue_tag): Don't emit TABLE_TAG.
- Handle indentation for PRE_TAG and P_TAG.
- (html_text::end_tag): Updated.
- (html_text::table_is_void, html_text::issue_table_begin,
- html_text::issue_table_end): Removed.
- (html_text::do_push): Simplified.
- [DEBUGGING]: Small fix.
- (html_text::push_para): Add new parameter for indentation; updated
- all callers.
- Handle PRE_TAG.
- (html_text::do_indent, html_text::do_table, html_text::done_table,
- html_text::is_in_table): Removed.
- (html_text::do_pre): Handle P_TAG also.
- (html_text::shutdown): Handle p->indent.
- (html_text::check_emit_text): Simplified.
- (html_text::do_emittext): Reset `blank_para'.
- (html_text::do_para): Add new parameter for indentation; updated
- all callers.
- (html_text::remove_indent): New function.
- (html_text::do_space): Handle verbatim text properly.
- (html_text::ever_emitted_text, html_text::starts_with_space,
- html_text::remove_para_align): New functions.
- (html_text::dump_stack_element, html_text::dump_stack): Updated.
-
- * src/devices/grohtml/html_text.h (HTML_TAG): Remove TABLE_TAG.
- Updated.
-
- * src/devices/grohtml/post-html.cc: Include html-table.h.
- (INDENTATION): Removed.
- (text_glob): Added many `is_<foo>' functions.
- Added table description `tab'.
- Added `get_arg',`get_tab_args', `remember_table', and `get_table'
- member functions.
- (list): Add `insert' and `move_to' member functions.
- (page): Add `insert_tag' member function.
- (page::dump_page) [DEBUG_TABLES]: Improved.
- (html_printer): Add `table' and `max_linelength' elements.
- Add many `do_<foo>', `insert_<foo>', `next_horiz_pos',
- `lookahead_for_tables', `shutdown_table', `calc_nf', `calc_po_in',
- `remove_tabs', `remove_courier_tabs'.
- (html_printer::emit_raw): Handle indentation.
- (html_printer::do_center, html_printer::write_header): Updated.
- (html_printer::is_courier_until_eol): Check for tag.
- (html_printer::do_linelength): Handle max_linelength.
- (html_printer::do_page_offset, html_printer::do_indentation): Handle
- fill_on.
- (html_printer::do_tempindent): Updated.
- (html_printer::do_indentedparagraph): Removed.
- (html_printer::do_indent): Simplified.
- (html_printer::do_eol): Use `ever_emitted_text'.
- (html_printer::do_flush, html_printer::do_links): Don't call
- done_table.
- (html_printer::do_break): Handle end_tempindent.
- (html_printer::troff_tag): Get argument.
- Don't handle `.ip'.
- Handle `.tab-ts', `.tab-te', `.col', `tab', and `tab0' tags.
- (html_printer::flush_page): Call `lookahead_for_tables'.
- Don't call `done_table'.
- (html_printer::add_to_sbuf): Always call do_indent.
-
- * src/devices/grohtml/Makefile.sub: Updated.
-
- * tmac/an-old.tmac (TP): Don't handle html device specially.
- (an-do-tag-html): New function which will be used instead of
- `an-do-tag' if html device is used.
-
- * tmac/html.tmac: Call .po to pass default page offset to grohtml.
-
- * tmac/s.tmac (@IP): Don't handle html device specially.
- (@IP-html): New function which will be used instead of `@IP' if
- html device is used.
-
- * tmac/www.tmac (HTML-NS, HTML-TAG-NS): New auxiliary macros -- this
- is a hack which will eventually vanish again.
- (PIMG): Handle `-C' option correctly if not html.
- (HR): Use HTML-NS.
-
-2002-07-17 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.pl: Don't use `-P-' for invoking perl.
-
-2002-07-14 Eric S. Raymond <esr@thyrsus.com>
-
- * contrib/pic2graph/pic2graph.*: Use convert(1).
- * contrib/eqn2graph/eqn2graph.*: Minor fixes.
-
-2002-07-14 Bernd Warken <bwarken@mayn.de>
-
- * tmac/groff_trace.man: New file.
- * tmac/Makefile.sub: Updated.
- * NEWS: Updated.
-
-2002-07-13 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man: Add some cross references.
-
-2002-07-12 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (substring_request): Add warnings for
- string indices out of range.
-
-2002-07-11 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/ec.map: Fix typo (`(l' -> `/l').
- * font/devdvi/*EC: Regenerated.
-
-2002-07-10 Bernd Warken <bwarken@mayn.de>
-
- * man/groff_char.man: Updated and extended.
-
-2002-07-10 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (length_macro): Renamed to...
- (length_request): This.
- Move call of `tok.next()' to the very end, otherwise the register
- value hasn't been updated yet.
- (init_input_requests): Updated.
-
-2002-07-09 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (substring_macro): Renamed to...
- (substring_request): This.
- (init_input_requests): Updated.
- * src/roff/troff/request.h: Updated.
-
-2002-07-08 Robert D. Goulding <goulding@Princeton.EDU>
-
- * src/roff/grog/grog.sh: Fix typo.
-
-2002-07-08 Werner LEMBERG <wl@gnu.org>
-
- * win32-diffs: Updated.
-
- Handle `papersize' keyword properly in DESC.
-
- * src/libs/libgroff/font.cc (font::scan_papersize): Fix argument
- type.
- Updated all callers.
- * src/libs/libgroff/paper.cc: Add four more paper formats used by
- grolj4.
- * src/include/paper.h: Updated.
-
- * src/devices/grolbp/lbp.cc: Remove unnecessary semicolons.
- Other minor C syntax fixes.
- (papersize, paperlength, paperwidth): Renamed to `user_*'.
- (lbp_printer): Add `papersize', `paperlength', and `paperwidth'
- members.
- (lbp_printer::lbp_printer): Pass three arguments.
- Set paper dimensions properly.
- (make_printer, main): Updated.
- (handle_unknown_desc_command): Fix error messages.
- (main): Handle papersize keyword in DESC properly.
-
- * src/devices/grolj4/lj4.cc (paper_size): Renamed to
- `user_paper_size'.
- (lbp_printer::lbp_printer): Pass an argument.
- Set paper_size properly.
- (handle_unknown_desc_command): Removed.
- (make_printer, main): Updated.
- * src/devices/grolj4/grolj4.man: Minor documentation fix.
-
- * man/groff_font.man, NEWS: Updated.
-
-2002-07-07 Werner LEMBERG <wl@gnu.org>
-
- Integrated eqn2graph, contributed by Eric S. Raymond.
-
- * contrib/eqn2graph/{Makefile.sub, eqn2graph.sh, eqn2graph.man}: New
- files.
- * Makefile.in, NEWS: Updated.
-
-2002-06-04 Werner LEMBERG <wl@gnu.org>
-
- Changing the substring request to make it fit better with other
- string manipulation functions in other programming languages:
- Index 0 is now the first character in the string, and index -1
- indicates the last character. Since this request didn't work
- properly anyway in the last release, it doesn't harm too much to
- change the syntax.
-
- * src/roff/troff/input.cc (substring_macro): Use loops to get
- the real string length (ignoring COMPATIBLE_SAVE and
- COMPATIBLE_RESTORE) and offsets.
- Implement change described above.
-
- * man/groff_char.man, tmac/doc-common (doc-header), tmac/doc.tmac
- (doc-do-Bd-args, doc-do-Bl-args): Changed accordingly.
-
- * NEWS, doc/groff.texinfo, man/groff_diff.man: Updated.
-
-2002-06-03 Werner LEMBERG <wl@gnu.org>
-
- Make .chop work with .de1 and friends. COMPATIBLE_SAVE and
- COMPATIBLE_RESTORE are completely ignored.
-
- * src/roff/troff/input.cc (char_list::set, char_list::get): New
- functions.
- (macro): `length' field renamed to `len'.
- Added new field `empty_macro' (1 if macro is empty), to be used
- instead of checking `len'.
- Updated all callers.
- (macro::empty): Updated.
- (macro::length, macro::set, macro::get): New functions.
- (macro::append): Ignore COMPATIBLE_SAVE and COMPATIBLE_RESTORE.
- Set `empty_macro'.
- (chop_macro): Check and remove trailing COMPATIBLE_SAVE/
- COMPATIBLE_RESTORE pairs.
- (asciify): Ignore COMPATIBLE_SAVE and COMPATIBLE_RESTORE.
- * src/roff/troff/request.h: Updated.
-
- * doc/groff.texinfo: Document .chop's behaviour better.
-
-2002-06-02 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Fix documentation for the addition of positions.
-
- * tmac/doc.tmac, tmac/an-old.tmac: Need groff version 1.18.
-
-2002-06-29 Werner LEMBERG <wl@gnu.org>
-
- Implementation of string arguments of the form \*[foo arg1 arg2 ...]
-
- * src/roff/troff/input.cc (have_string_arg): New global variable.
- (read_mode): New enumeration.
- (read_escape_name): Use it. Update all calls.
- (read_long_escape_name): Use it. Update all calls.
- Set have_string_arg if appropriate.
- (get_char_for_escape_name): Add parameter for handling space
- character.
- (interpolate_string_with_args, decode_string_args): New functions.
- (get_copy, token::next): Call it if necessary.
- (interpolate_string): Fix error message.
-
- * NEWS, doc/groff.texinfo, man/groff.man, man/groff_diff.man:
- Document it.
-
-2002-06-24 Bernd Warken <bwarken@mayn.de>
-
- * man/groff_tmac.man: Updated and extended.
-
-2002-06-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms, src/preproc/pic/pic.man: Fix description of `:='.
-
-2002-06-23 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Improve documentation of composite block objects.
-
-2002-06-22 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (init_registers): Add three registers
- `seconds', `minutes', and `hours' to hold the current time.
-
- * NEWS, doc/groff.texinfo, man/groff.man, man/groff_diff.man:
- Updated.
-
-2002-06-20 Werner LEMBERG <wl@gnu.org>
-
- Make \X accept both `\ ' and `\~', converting them to single space
- characters.
-
- * src/roff/troff/token.h (token): Add TOKEN_UNSTRETCHABLE_SPACE.
- (token::unstretchable_space): New inline function.
- * src/roff/troff/input.cc (token::next, token::delimiter,
- token::description, token::add_to_node_list, token::process): Handle
- TOKEN_UNSTRETCHABLE_NODE.
- (encode_char): Handle tok.stretchable_space and
- tok.unstretchable_space.
-
- * NEWS, doc/groff.texinfo: Document it..
-
-2002-06-19 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/ps.cc (ps_printer::special): Fix error message.
-
- * src/devices/grotty/tty.cc (tty_printer::special): Add `sgr'
- keyword to enable/disable SGR output.
- (tty_printer::change_fill_color): New function.
- * NEWS, src/devices/grotty/grotty.man: Document `sgr' special.
-
- * src/roff/troff/input.cc (output_request): Add missing `tok.next()'
- call.
-
-2002-06-18 Werner LEMBERG <wl@gnu.org>
-
- Add a `color' request and a `.color' register to control usage of
- colours.
-
- * src/roff/troff/input.cc (disable_color_flag): Replaced with...
- (color_flag): This (which is the inverse).
- (activate_color): New function.
- (main, init_input_requests): Updated.
- * src/roff/troff/troff.h, src/roff/troff/node.cc
- (troff_output_file::fill_color, troff_output_file::glyph_color):
- Updated.
-
- * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
- Document the changes.
-
-2002-06-17 Colin Watson <cjwatson@debian.org>
-
- Circumvent bug in autoconf 2.53 regarding top_builddir.
-
- * aclocal.m4 (GROFF_BUILDDIR): s/top_builddir/groff_top_builddir/.
- * Makefile.in, doc/Makefile.in:
- s/@top_builddir@/@groff_top_builddir@/.
- * configure: Regenerated (with autoconf 2.53).
-
-2002-06-17 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/font.cc (font::load_desc): Fix computation of
- `paperwidth' and `paperlength' for the `papersize' keyword.
-
-2002-06-16 P. Alejandro Lopez-Valencia <dradul@007mundo.com>
-
- * src/devices/grops/grops.man: Add info about Type 42 fonts.
-
-2002-06-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (html_printer::emit_raw,
- html_printer::do_linelength, html_printer::do_pageoffset,
- html_printer::do_indentation, html_printer::do_tempindent,
- html_printer::do_break, html_printer::begin_page): Clear indented
- text.
- * tmac/html.tmac: Disable hyphenation.
-
-2002-06-15 Werner LEMBERG <wl@gnu.org>
-
- Don't produce HTML files if utility programs are missing.
-
- * Makefile.in (make_html, make_install_html): New variables.
- (MDEFINES): Updated.
-
- * aclocal.m4 (GROFF_HTML_PROGRAMS): New function to test for HTML
- utility programs.
- * configure.ac: Use it.
- * configure: Regenerated.
-
- * doc/Makefile.sub (PROCESSEDEXAMPLEFILES): Move webpage.html to...
- (HTMLEXAMPLESFILES): This new variable.
- (EXAMPLESIMAGEFILES): Renamed to...
- (HTMLEXAMPLEIMAGEFILES): This.
- (CLEANADD): Add HTMLEXAMPLEFILES.
- (all): Use `make_html'.
- (html): New target.
- (install_data): Use `make_install_html'.
- Move html stuff to...
- (install_html): This new target.
- (uninstall_sub): Updated.
-
-2002-06-14 Bernd Warken <bwarken@mayn.de>
-
- * src/roff/grog/Makefile.sub (grog): Renamed to...
- (grog.old): This.
- (grog): New rule to always install grog.sh as grog.
-
-2002-06-08 Bernd Warken <bwarken@mayn.de>
-
- * src/roff/grog/grog.pl: Fix typo.
-
-2002-06-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Add more info on .tr arguments.
-
-2002-06-05 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, src/roff/grog/grog.man, doc/groff.texinfo: Updated.
-
- * aclocal.m4 (GROFF_MKSTEMP): Include unistd.h.
- * configure: Regenerated.
-
-2002-06-05 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/roff/troff/symbol.cc (table_sizes): Add more values.
-
- * src/roff/grog/grog.pl, src/roff/grog/grog.sh: Recognize mom.
-
-2002-06-04 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_PAGE): Don't use `prefix' directly since it
- is not initialized at the time we need it in case `--prefix' hasn't
- been set. Check for `ac_default_prefix' also.
- Test for `papersize' keyword also and generalize allowed whitespace.
- * configure: Regenerated.
-
- * font/devps/Makefile.sub (DESC): Use `papersize' instead of
- `paperlength'.
-
- * src/libs/libgroff/Makefile.sub (version, revision): Replaced
- with...
- (src_version, src_revision): New variables to avoid overwriting
- from parent make process.
- (version.cc): Updated.
-
- * src/preproc/html/pre-html.cc: Include paper.h and font.h.
- (linebuf, linebufsize): New global variables.
- (sys_fatal): Use `fatal' to abort properly.
- (get_line): New function.
- (get_resolution): Use it.
- Improve error messages.
- (get_papersize): Check `papersize' also.
- Use `get_line'.
- Improve error messages.
-
-2002-06-03 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.comm (CLEANNOTSRCDIRADD): New target for files which
- should be removed only if builddir is not srcdir.
- (mostlyclean): Handle `CLEANNOTSRCDIRADD'.
- (clean): Depend on `mostlyclean'.
- (distclean): Depend on `clean'.
- (realclean, extraclean): Depend on `distclean'.
- (.y.cc, .y.o): Simplified. The output files are no longer written
- to srcdir but to builddir.
- * Makefile.in (MDEFINES): Add `version' and `revision'.
- (uninstall_dirs): Fix order of directories.
- * doc/Makefile.sub (version, revision): Removed.
- (CLEANADD): Removed grnexmpl.g, groff, groff-*.
- Added `HTMLDOCFILES'.
- (CLEANNOTSRCDIRADD): New target for grnexmpl.h, groff, groff-*.
- * src/preproc/eqn/Makefile.sub, src/preproc/pic/Makefile.sub,
- src/preproc/refer/Makefile.sub (YTABC, YTABH): Don't use `srcdir'
- as prefix.
-
- * doc/texinfo.tex (\authortt): New macro.
- (\shortcontt): Define.
- (\titlepage): Set \tt to \authortt while defining \authorfont.
- (\appendixbox): New macro.
- (\chapmacro, \appendixentry): Use \appendixbox to get even
- indentation for letters.
- (\summarycontents): Set \tt.
- (\internalpagesize): Add two arguments for real paper width and
- height as needed by pdfTeX.
- (\letterpaper, \smallbook, \afourpaper, \afivepaper, \afourlatex):
- Updated.
- (\tempdima, \tempdimb): New temporary dimensions.
- (\pagesizesyyy): Updated.
-
-2002-06-02 Werner LEMBERG <wl@gnu.org>
-
- Adding a new keyword `papersize' to the DESC file format (similar
- but not completely identical to grolbp's extension). grops now has
- a -p command line option to override `papersize'. Finally, grolbp
- has been adapted to the new syntax.
-
- * src/libs/libgroff/paper.cc, src/include/paper.h: New files. It
- defines and initializes the `papersizes[]' array with NUM_PAPERSIZES
- elements.
- * src/libs/libgroff/Makefile.sub (OBJS): Add `paper.o'.
- (CCSRCS): Add `paper.cc'.
-
- * src/include/font.h (font): Add `papersize' element.
- * src/libs/libgroff/font.cc (font::unit_scale): New helper function.
- (font::scan_papersize): New function.
- (font::load_desc): Use it for handling `papersize' keyword.
- * src/libs/libgroff/fontfile.cc: Initialize `font::papersize'.
-
- * src/devices/grops/ps.cc: Include paper.h.
- (user_paper_length): New global variable.
- (ps_printer): Use paper length as initializer.
- (make_printer): Updated.
- (main): Handle new `-p' option.
- * src/devices/grops/grops.man: Updated.
-
- * src/devices/grolbp/lbp.cc: Include paper.h.
- s/papersizes/lbp_papersizes/.
- (set_papersize): Use new `papersizes' array.
- (handle_unknown_desc_command): Don't handle `papersize'.
- (main): Use `font::scan_papersize' for handling `-p' option.
- * src/devices/grolbp/grolbp.man: Updated.
-
- * man/groff_font.man: Document `papersize'.
- * NEWS: Updated.
-
-2002-05-30 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/TODO: Updated.
- * src/devices/grops/grops.man: More info on paper formats.
- * man/groff_font.man: Document `paperheight' and `paperwidth'.
-
-2002-05-29 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile.sub (CLEANADD): Add grnexmpl.g, groff, and groff-*
- to list only if srcdir != currdir.
- (distfiles): New target.
-
- * Makefile.in (EXTRADIRS): Add font/devlj4/generate.
- (NOMAKEDIRS): New variable.
- (DISTDIRS): Use it.
-
-2002-05-26 Werner LEMBERG <wl@gnu.org>
-
- Add .output request, similar to \! at top-level.
-
- * src/roff/troff/input.cc (transparent): Remove unused declaration.
- (output_request): New function.
- (init_input_requests): Add it.
- Sorted.
- * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
- Document it.
-
- * Makefile.in (MDEFINES): Add INSTALL_INFO.
- (prepare_examples): Fix typo.
- * doc/groff.texinfo (@direntry): Fix it.
-
-2002-05-25 Werner LEMBERG <wl@gnu.org>
-
- Including the doc subdir into groff's Makefile system.
-
- * aclocal.m4 (GROFF_INSTALL_INFO): New function.
- * configure.ac: Use it.
- Generate `doc/Makefile'.
- * configure: Regenerated.
-
- * Makefile.in (infodir, INSTALL_INFO): New variables.
- (MDEFINES, uninstall_dirs): Updated.
- (OTHERDIRS): Add `doc'.
- * Makefile.comm (CLEANDIRADD): New variable.
- (mostlyclean): Use it.
-
- * doc/Makefile.sub, doc/Makefile.in: New files.
- * doc/Makefile: Removed.
-
- * NEWS, INSTALL: Updated.
-
-2002-05-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/homepage.ms: Renamed to ...
- * doc/webpage.ms: This.
- Use `.NHR'.
-
-2002-05-23 Werner LEMBERG <wl@gnu.org>
-
- Integrating the `mom' macro package, contributed by Peter Schaffter
- <df191@ncf.ca>.
-
- * contrib/mom/*: New subdirectory tree.
- * Makefile.in (docdir, exampledir, htmldocdir): New variables to
- be used for documentation files.
- (MDEFINES, uninstall_dirs): Use them.
- (OTHERDIRS): Add contrib/mom.
- * Makefile.comm (.man.n): Add @DOCDIR@, @EXAMPLEDIR@, and
- @HTMLDOCDIR@.
- * MANIFEST, NEWS: Updated.
-
-2002-05-22 Gaius Mulley <gaius@glam.ac.uk>
-
- Change syntax of \O: \O[0] suppresses output, \O[1] enables output
- if at outer level; at start-up we are at outer level.
-
- * src/roff/troff/input.cc (do_suppress): Implement it.
- Simplify \O[3].
-
- Add option -p to show progress information.
- pre-grohtml will now render only one page at a time, reducing the
- size of needed disk resources enormously.
-
- * src/preproc/html/pre-html.cc (imagePageStem): Replaced with...
- (imagePageName): New global variable.
- (psPageName, show_progress, currentPageNo): New global variables.
- (html_system): Close saved stderr and stdout handles.
- (write_end_image): Accept a parameter to control \O escape.
- (write_start_image): Adapted to new \O meaning.
- (char_buffer::write_upto_newline): Updated.
- (createAllPages): Replaced with...
- (createPage): This new function to create a single page for images.
- It uses `psselect' from the psutils package.
- (removeAllPages): Removed.
- (createImage): Updated.
- Handle progress display.
- (char_buffer::do_html, char_buffer::do_image) [DEBUGGING]: Removed.
- (scanArguments): Add option -p.
- (makeTempFiles): Updated to create temp files for psPageName and
- imagePageName.
- (removeTempFiles): Removed.
- (main): Updated.
-
- * src/devices/grohtml/post-html.cc (header_desc::write_headings,
- html_printer::write_header): Append `\0' to `buffer'.
- (html_printer::do_eol): Depend on `current_paragraph->emitted_text'.
- (main): Handle -p.
- * src/devices/grohtml/html-text.cc (html_text::dump_stack_element):
- Handle `text_emitted'.
- (html_text::table_is_void): Slightly rewritten.
- (stop): New external symbol.
- (html_text::do_push) [DEBUGGING]: Use it and simplify.
- (html_text::shutdown): Call `dump_stack'.
- (html_text::do_space): Rewritten.
- * src/devices/grohtml/grohtml.man: Document -p and the need of
- `psselect'.
-
- * tmac/www.tmac (DC, HTML-DO-IMAGE, HTML-IMAGE-END): Updated to
- new \O syntax.
- Call \O[0] if `ps4html' is active.
- * tmac/s.tmac (@EQ, @EN): Handle html better.
- (@TS, TE): Ditto.
- * tmac/html.tmac: Don't use black for background colour.
-
- * src/roff/troff/node.cc: Include `div.h'.
- (troff_output_file::really_print_line): Don't use `is_on'.
- (troff_output_file::word_marker, troff_output_file::flush_tbuf
- troff_output_file::check_charinfo,
- troff_output_file::put_char_width, troff_output_file::put_char,
- troff_output_file::determine_line_limits, troff_output_file::draw,
- real_output_file::begin_page, glyph_color_node::tprintf,
- fill_color_node::tprint, hline_node::tprint, vline_node::tprint):
- Use `is_on'.
- (troff_output_file::really_on): Call `do_motion'.
- (suppress_node::tprint): Use `get_page_number' instead of `%'
- register.
- Call `reset_output_registers' conditionally on `is_on'.
-
- * doc/groff.texinfo: Document new syntax of \O.
- * NEWS, man/groff_diff.man: Updated.
-
-2002-05-22 Werner LEMBERG <wl@gnu.org>
-
- * MORE.STUFF: Add info about David Frey's deroff implementation.
- Mention troff.org.
-
-2002-05-16 Werner LEMBERG <wl@gnu.org>
-
- Pic's `with' attribute now accepts positions.
-
- * src/preproc/pic/pic.y: Make `.', BOX, CIRCLE, ELLIPSE, ARC, LINE,
- ARROW, SPLINE, and `[' left-associative tokens to fix shift/reduce
- conflicts.
- (object_spec): Add rule for `WITH' and `position'.
- (relative_path): Give `corner' the precedence of `CHOP'.
- * src/preproc/pic/object.h (path): New members `pos' and
- `is_position'.
- * src/preproc/pic/object.cc: Updated initializers of `path'.
- (path::follow): Handle `is_position'.
-
- * doc/pic.ms: Completely updated grammar description.
- Many typographical improvements.
-
-2002-05-15 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/env.cc(hyphen_trie::hpf_getc): Accept ^^x (char
- code of x in range 0-127) also.
- * doc/groff.texinfo, man/groff_diff.man: Updated.
-
- Added keywords `north', `south', `east', and `west' for corners
- in pic.
-
- * src/preproc/pic/lex.cc (lookup_keyword): Add NORTH, SOUTH, EAST,
- and WEST.
- (yylex): Handle them.
- * src/preproc/pic/pic.y: Add tokens NORTH, SOUTH, EAST, and WEST.
- (corner): Handle them.
-
-2002-05-14 Werner LEMBERG <wl@gnu.org>
-
- * src/devices/grops/grops.man: Clarify handling of `download' file.
-
-2002-05-11 Werner LEMBERG <wl@gnu.org>
-
- Adding `warnscale' and `spreadwarn' requests, based on a patch from
- Jeffrey Friedl <jfriedl@yahoo.com>.
-
- * src/roff/troff/input.cc (spread_limit, warn_scale,
- warn_scaling_indicator): New global variables.
- (warnscale_request, spreadwarn_requests): New functions.
- (main): Initialize `warn_scale' and `warn_scaling_indicator'.
- (init_input_requests): Updated.
- (error_type): Add `OUTPUT_WARNING'.
- (do_error): Handle it.
- (output_warning): New warning function which shows output location.
- * src/roff/troff/env.h (spread_limit): New external variable.
- * src/roff/troff/env.cc (environment::choose_breakpoint): Use
- `output_warning'.
- (distribute_space): Emit warning if added space is larger than
- `spread_limit'.
- (environment::possibly_break_line): Emit warning if a line can't
- be adjusted on both sides.
-
- * doc/groff.texinfo, man/groff_diff.man, man/groff.man: Document it.
-
-2002-05-08 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/node.cc (special_node::special_node): Use
- env_definite_font(curenv) instead of curenv->get_font(). Otherwise
- \X''\% crashes, for example.
-
- * doc/groff.texinfo: Document \! and \? used at top-level.
-
-2002-05-06 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/pic.man: Fix some keyword syntax.
- Other minor typographical fixes.
-
- * src/roff/groff/groff.man: Fix typos.
-
-2002-05-04 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man ([ShortOpt]): Renamed to...
- (ShortOpt[]): This to avoid problems with refer.
-
- * doc/pic.ms: Fix typo.
- Fix pic grammar description.
-
- * tmac/an-old.tmac (ne): Use de1, not de.
-
-2002-05-03 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Finished separation of glyphs and characters.
- Don't use the string `Appendix' for appendix headers (both in
- the text and the table of contents).
- * man/groff_tmac.man, src/roff/troff/troff.man: Fix order of tmac
- directories.
-
- Use registers LL and LT (similar to -ms) for controlling the
- length of title and line, respectively, in the -man and -mdoc
- macro packages.
-
- * tmac/doc-ditroff (doc-setup-page-layout), tmac/doc-nroff
- (doc-setup-page-layout): Use \n[LL] and \n[LT].
- * tmac/an-old.tmac: Set \n[LL] and \n[LT] if not defined.
- (TH): Use \n[LL].
- (an-header, an-p-footer): Use \n[LT].
- * NEWS, tmac/groff_man.man, tmac/groff_mdoc.man,
- doc/groff.texinfo: Document it.
-
-2002-05-02 Werner LEMBERG <wl@gnu.org>
-
- * doc/fdl.texi: New file.
- * doc/groff.texinfo: Include it.
- Define and use @copying.
- Starting with separating glyph, symbol, and character.
-
-2002-04-27 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in (EXEEXT): Set it.
- * src/*/Makefile.sub (PROG): Add $(EXEEXT) for all non-script
- programs.
-
- * src/include/nonposix.h: Define GS_NAME.
- * src/preproc/html/pre-html.cc (createAllPages): Use GS_NAME.
-
- Some preliminary changes for EMX support under OS/2.
-
- * src/preproc/pic/main.cc (main), src/roff/groff/pipeline.c: Add
- __EMX__ similar to __MSDOS__.
- * src/utils/indxbib/indxbib.cc (main) [__EMX__]: Use `unlink'.
-
-2002-04-25 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Integrated groff_out.man.
- Some macro fixes.
-
-2002-04-23 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_out.man: Minor fixes.
-
-2002-04-23 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Moving @cindex entries after @Def* to get
- correct page references.
- Fixed many index entries.
-
-2002-04-23 Bernd Warken <bwarken@mayn.de>
-
- * man/roff.man: Enlarged.
-
-2002-04-22 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More examples, other fixes.
-
-2002-04-20 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (pipe_output): Multiple calls to `pi'
- will now form a chain, e.g.
-
- .pi foo
- .pi bar
-
- is now the same as
-
- .pi foo | bar
-
- This is for compatibility with plan 9's troff.
-
- * tmac/tty.tmac: Set default tab values to 0.8i to be compatible
- with UNIX troff.
- * NEWS: Updated.
-
- * doc/groff.texinfo: Add documentation of remaining requests and
- registers.
-
-2002-04-19 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Add documentation of remaining escapes.
-
- * font/devdvi/generate/tc.map: Remove entry for `sr'.
- * font/devdvi/*TC: Regenerated.
-
-2002-04-18 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (token::next): Make \H behave consistently
- if not in compatibility mode, i.e., increment relative to the
- previous height.
- * doc/groff.texinfo: Updated accordingly.
-
-2002-04-17 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Document \\, \e, \E, \., and \c.
-
-2002-04-16 Bernd Warken <bwarken@mayn.de>
-
- * src/roff/groff/groff.man: Improve documentation of -P option.
- Other minor fixes.
-
-2002-04-15 Werner LEMBERG <wl@gnu.org>
-
- Add new escape \F to switch font family.
-
- * src/roff/troff/input.cc (token::next): Handle \F.
- * src/roff/troff/env.cc (environment::set_family): Handle
- `interrupted' flag.
- * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
- Document it.
-
-2002-04-14 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (doc-tag-list): Use \Z to avoid stretching of
- spaces in tags.
-
-2002-04-13 Werner LEMBERG <wl@gnu.org>
-
- Implement \f[] as an alternative to \fP. Change \mP and \MP to
- \m[] and \M[], respectively.
-
- * src/roff/troff/symbol.cc (EMPTY_SYMBOL): New global variable.
- (symbol::symbol): Handle NULL string and empty string differently.
- * src/roff/troff/symbol.h (symbol::is_empty): New inline function.
- * src/roff/troff/input.cc (read_escape_name, read_long_escape_name):
- Add optional parameter.
- Updated calling functions.
- (get_copy, do_glyph_color, do_fill_color, token::next): Use
- `symbol::is_empty'.
- * src/roff/troff/env.cc (environment::set_font): Ditto.
-
- * src/preproc/pic/troff.cc (troff_output::set_fill,
- troff_output::reset_color: Updated.
-
- * tmac/www.tmac: Updated.
-
- * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo,
- doc/homepage.ms, src/devices/grotty/grotty.man, tmac/groff_www.man:
- Updated.
-
- * tmac/Xps.tmac: Remove some redundant code.
-
- * tmac/doc-common, tmac/doc-ditroff, tmac/doc-nroff, tmac/doc.tmac,
- tmac/dvi.tmac, man/roff.man, man/groff_out.man, man/groff.man,
- man/groff_diff.man, src/roff/groff/groff.man: Replace \f[P] with
- \f[].
-
-2002-04-13 Bernd Warken <bwarken@mayn.de>
-
- * src/include/printer.h, src/libs/libdriver/printer.cc
- (printer::change_fill_color): New member function.
- * src/libs/libdriver/input.cc (parse_D_command): Use it.
-
-2002-04-12 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Completed pass on gtroff reference.
-
-2002-04-11 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More fixes.
-
-2002-04-11 Bernd Warken <bwarken@mayn.de>
-
- * src/include/color.h: Decorate with `const'.
- Use `size_t'.
- Include `stddef.h'.
- * src/libs/libgroff.color.cc: Decorate with `const'.
- Use `size_t'.
- (color::color): Initialize members.
- * src/libs/libdriver/input.cc (parse_D_command): Handle `f'
- command according to the documentation.
-
- * man/groff_out.man: Updated.
- Minor fixes.
-
-2002-04-11 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/preproc/html/pre-html.cc (write_start_image): Remove
- redundant output.
- * tmac/www.tmac (DC, HTML-DO-IMAGE): Ditto.
-
- * src/devices/grohtml/post-html.cc (page::add_and_encode): Using
- \C'hy' caused an assertion failure.
-
- * src/roff/troff/env.cc (environment::environment): Initialize
- `emitted_node'.
- (environment::copy): Handle `ignore_next_eol' and `emitted_node'.
-
-2002-04-10 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_diff.man, man/groff.man, NEWS, doc/groff.texinfo:
- Document pvs request and .pvs register.
-
-2002-04-09 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Improve and fix documentation of diversions
- and environments.
-
-2002-04-08 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fix documentation of drawing functions.
- Other minor fixes.
-
-2002-04-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Better documentation of double quotes as
- arguments.
- Other minor fixes.
-
-2002-04-06 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_font.man: Document names of special characters better.
- * doc/groff.texinfo: Minor improvements.
-
- * tmac/lbp.tmac: Load latin1.tmac.
- * tmac/X.tmac, tmac/Xps.tmac: Load latin1.tmac or cp1047.tmac.
-
- * font/devX*/*: Regenerated (all chars > 0x80 removed).
-
-2002-04-05 Werner LEMBERG <wl@gnu.org>
-
- * tmac/tty.tmac: Don't use shc request.
- * tmac/latin1.tmac, tmac/cp1047.tmac: Translate soft hyphen to `\%'.
- * NEWS: Updated.
-
- * man/groff_diff.man: Minor fixes.
-
- * font/devlbp/*: Remove all `charXXX' entities.
-
- * src/libs/libgroff/font.cc (font::~font): Deallocate
- `special_device_coding'.
- (font::load): Use `new' for allocating `special_device_coding'.
- * src/libs/libgroff/nametoindex.cc (character_indexer::lookup_char):
- Removed unused member.
-
-2002-04-05 Werner LEMBERG <wl@gnu.org>
-
- * src/drivers/grops/psrm.cc (skip_possible_newline): New function.
- (resource_manager::do_begin_binary,
- resource_manager::do_begin_data): Use it.
-
- * doc/texinfo.tex: Updated to version 4.2.
-
- * src/roff/troff/token.h: Add TOKEN_ZERO_WIDTH_BREAK for `\:'.
- (token::zero_width_break): New inline function.
- * src/roff/troff/input.cc (token::next): Use it.
- (token::description): Updated.
- (encode_char): Ignore `\%', `\&', `\)', and `\:'.
- (token::add_to_node_list, token::process): Use it.
- * NEWS, doc/groff.texinfo: Updated.
-
- * src/preproc/eqn/over.cc (over_box::output): Fix typo.
- * tmac/tty.tmac: Add missing backslash.
-
-2002-04-04 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de>
-
- * src/preproc/eqn/box.cc (set_script_size, box::top_level): Use
- `.ps' register instead of `.s' to handle fractional point sizes.
- * src/preproc/eqn/limit.cc (limit_box::compute_metrics,
- limit_box::output): Ditto.
- * src/preproc/eqn/other.cc (size_box::compute_metrics,
- size_box::output): Ditto.
- * src/preproc/eqn/over.cc (over_box::compute_metrics,
- over_box::output): Ditto.
- * src/preproc/eqn/script.cc (script_box::compute_metrics,
- script_box::output): Ditto.
- * src/preproc/eqn/sqrt.cc (sqrt_box::compute_metrics,
- sqrt_box::output): Ditto.
-
-2002-04-03 Michael Selway <mas@ssl.co.uk>
-
- * src/drivers/grops/psrm.cc (resource_manager::do_begin_binary):
- Fix typo.
-
-2002-04-03 Werner LEMBERG <wl@gnu.org>
-
- * doc/homepage.ms: Reduce title size.
- * doc/groff.texinfo: Fix documentation of .t register.
- Fix handling of colon.
- Fix `\' vs. `\\'.
-
- * src/roff/troff/input.cc (exit_troff): Emit LAST_PAGE_EJECTOR
- only if page length is positive to avoid a loop.
-
- * tmac/an-old.tmac (ne): Increase page length to avoid problems with
- tbl.
-
-2002-04-02 P. Alejandro Lopez-Valencia <dradul@yahoo.com>
-
- * src/include/nonposix.h, src/roff/groff/pipeline.c:
- s/__CYGWIN32__/__CYGWIN__/.
-
-2002-03-28 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/gnu.xpm: New image contributed by Emily Mulley.
- * doc/Makefile (gnu.eps, gnu.png): Use pnmdepth.
- (homepage.html): Be dependent on gnu.eps.
- * doc/homepage.ms: Updated to new image.
-
- * src/devices/grohtml/post-html.cc (html_printer): New member
- `sbuf_prev_hpos'.
- (html_printer::flush_sbuf, html_printer::set_char): Set it.
- (html_printer::sbuf_continuation): Use it.
-
-2002-03-28 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/getopt.c: Updated to latest version.
-
- * tmac/README: More on hyphen.tex license.
-
-2002-03-26 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Add documentation of most missing requests.
-
-2002-03-25 Werner LEMBERG <wl@gnu.org>
-
- Add three glyphs `t+-', `tmu', and `tdi' which are textual variants
- of `+-', `mu', and `di', respectively.
-
- * font/devascii/R.proto, font/devutf8/R.proto,
- font/devlatin1/R.proto, font/devhtml/R.proto,
- font/devcp1047/R.proto, font/devlpb/*: Add them.
- * font/devps/generate/textmap: Ditto.
- * font/devps/*: Regenerated.
- * font/devlj4/generate/text.map: Add them.
- * font/devlj4/*: Regenerated.
- * font/devdvi/generate/tc.map: Use them.
- * font/devdvi/generate/texsy.map: Add them.
- * font/devdvi/*: Regenerated.
- * font/devX*/*: Regenerated.
-
- * tmac/latin1.tmac, tmac/cp1047.tmac, tmac/tty.tmac,
- tmac/tty-char.tmac: Updated.
-
- * NEWS, man/groff_char.man: Updated.
-
-2002-03-24 Werner LEMBERG <wl@gnu.org>
-
- * tmac/dvi.tmac, tmac/X.tmac, tmac/ps.tmac, tmac/html.tmac,
- tmac/lj4.tmac, tmac/tty.tmac: Replace most `.char' with `.fchar'.
- * tmac/ec.tmac: Remove `.rchar' calls (no longer necessary since
- we use `.fchar' in dvi.tmac.
- * tmac/dvi.tmac: Improve definition of \[Fo] and \[Fc].
- * tmac/Xps.tmac: Simplify some char definitions.
- Add definition for \[f/].
- * man/groff_char.man: Updated for new X.tmac.
-
- * tmac/README: New file.
-
-2002-03-23 Phil Lobbes <phil@perkpartners.com>
-
- * Makefile.comm (.y.o): New rule for make on Solaris 2.5.1 -- the
- internal .y.o rule took precendence over the .y.cc rule, compiling
- the yacc files with gcc instead of g++.
-
-2002-03-23 Werner LEMBERG <wl@gnu.org>
-
- * tmac/dvi.tmac: Add replacement font for `CB'.
-
- * tmac/doc.tmac: s/request/macro/ in messages.
- (doc-generic-macro): Improve error message.
- * tmac/groff_mdoc.man: Minor improvements.
-
-2002-03-22 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Document possible conflict between `tr' and
- `char' requests.
-
-2002-03-21 Werner LEMBERG <wl@gnu.org>
-
- Improve handling of hyphenation patterns. It is now possible to
- use most of TeX's pattern files unmodified. To make the process
- more flexible, a new request `hpfcode' has been added which
- provides a character code mapping for the `hpf' request. See
- comment before hpf_getc() for more details.
-
- * src/roff/troff/env.cc (insert_hyphenation, hpf_getc): New
- functions.
- (read_patterns_file): Additional parameter for exception dictionary.
- Extended to recognize \pattern, \hyphenation, and \endinput.
- (do_hyphenation_patterns_file): Updated.
- * src/roff/troff/env.h (hpf_code_table): New extern.
-
- * src/roff/troff/input.cc (hpf_code_table): New array.
- (init_hpf_code_table, hyphenation_patterns_file_code): New
- functions.
- (hyphenation_code): Handle translation from `trin' correctly.
- (main, init_input_requests): Updated.
- (charinfo::set_translation): Handle hyphenation code also.
-
- * src/roff/troff/charinfo.h (charinfo::get_translation_input): New
- inline function.
-
- * src/roff/troff/env.cc (WORD_MAX): Reduced to 256 since `unsigned
- char' is used for offsets in hyphenation exceptions.
-
- * tmac/hyphen.us: Replace with contents of unmodified `hyphen.tex'.
-
- * NEWS, man/groff_diff.man, man/groff.man: Document it.
-
-2002-03-20 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Add documentation for `hpfa' and `trin'
- requests.
-
-2002-03-18 Werner LEMBERG <wl@gnu.org>
-
- * tmac/html.tmac: Fix serious typo.
-
-2002-03-17 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Add documentation for `writec' request.
-
-2002-03-17 Werner LEMBERG <wl@gnu.org>
-
- Added request `hpfa' to append hyphenation patterns.
-
- * src/roff/troff/env.cc (hyphen_trie::read_patterns_file): Add
- parameter `append'.
- (hyphenation_patterns_file): Renamed to...
- (do_hyphenation_patterns_file): This.
- (hyphenation_patterns_file, hyphenation_patterns_file_append): New
- functions.
- (init_hyphen_requests): Updated.
- * NEWS, man/groff.man, man/groff_diff.man: Document it.
-
-2002-03-16 Werner LEMBERG <wl@gnu.org>
-
- Added request `writec' in analogy to `tmc'.
-
- * src/roff/troff/input.cc (write_request): Renamed to...
- (do_write_request): This.
- Added one parameter.
- (write_request, write_request_continue): New functions.
- (init_input_requests): Updated.
- * NEWS, man/groff.man, man/groff_diff.man: Document it.
-
- * font/devdvi/DESC.in (sizes): Allow all sizes in the range
- 5-10000pt.
- * NEWS: Document it.
-
-2002-03-15 Werner LEMBERG <wl@gnu.org>
-
- * man/groff.man: Add writem request.
-
- Add request `trin' (translate input) to make `.asciify' work
- correctly. This is necessary since `charXXX' entity names are no
- longer hardcoded in font definition files.
-
- * src/roff/troff/charinfo.h (charinfo): Add `asciify_code' and
- `translate_input' members.
- (charinfo::set_asciify_code, charinfo::get_asciify_code,
- charinfo::set_translation_input): New methods.
- (charinfo::set_translation): Add third argument.
- * src/roff/troff/input.cc (charinfo:set_translation): Set
- `asciify_code'.
- (do_translate): Add second argument.
- (translate_input): New function.
- (init_input_requests): Updated.
- * src/roff/troff/node.cc (glyph_node::asciify,
- composite_node::asciify): Use `get_asciify_code'.
-
- * tmac/cp1047.tmac, tmac/latin1.tmac: Use `trin'.
-
- * NEWS, man/groff.man, man/groff_diff.man: Updated.
-
-2002-03-14 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Improve documentation of .RS and .RE.
-
-2002-03-14 Werner LEMBERG <wl@gnu.org>
-
- Add a new request `sizes' similar to the `sizes' command in DESC
- files.
-
- * src/roff/troff/env.cc (override_sizes): New function.
- (init_env_requests): Use it.
- * src/roff/troff/token.h: Export `read_string'.
- * NEWS, man/groff_diff.man, man/groff.man: Document it.
-
-2002-03-12 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: More fixes for texinfo 4.1 and higher.
-
-2002-03-10 Werner LEMBERG <wl@gnu.org>
-
- * tmac/pspic.tmac: Add support for -Tdvi.
- * tmac/dvi.tmac: Include pspic.tmac.
- * src/devices/grodvi/grodvi.man: Document it.
- * NEWS: Updated.
-
- * font/devlj4/generate/Makefile: Fix URL of metric files.
-
-2002-03-09 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: The static constructor bug has been fixed in z/OS V1R3.
-
-2002-03-09 Larry Kollar <kollar@alltel.net>
-
- * tmac/groff_ms.man: Add documentation for RS and RE macros.
-
-2002-03-08 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Fixes for texinfo 4.1.
-
-2002-03-07 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Include getopt.h if groff-getopt.h can't be
- included.
- Handle CYGWIN properly.
-
-2002-03-07 Paco Andrés Verdú <pandres@dragonet.es>
-
- * font/devlbp/Makefile.sub (DEVFILES): Add some missing fonts.
- * tmac/lbp.tmac: Add some font translations.
-
-2002-03-02 Werner LEMBERG <wl@gnu.org>
-
- * font/devcp1047/R.proto, font/devlatin1/R.proto,
- font/devhtml/R.proto: Remove `charXXX' entries.
- * tmac/tty.tmac, tmac/html.tmac: Load latin1.tmac or cp1047.tmac
- where appropriate.
-
- * font/devlj4/generate/text.map: Remove `charXXX' entries.
- * font/devlj4/*: Regenerated all font definition files.
- * tmac/lj4.tmac: Load latin1.tmac.
-
- * src/utils/hpftodit/hpftodit.cc (do_file): Partially undo change
- from 2000-06-17: LJ4 metric files are *not* text files.
-
- * tmac/troffrc, tmac/dvi.tmac, tmac/ps.tmac: Don't use .T string
- register to test for EBCDIC.
-
-2002-03-01 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.pl: Skip comment lines in encoding
- files (as grops already does).
- * src/utils/afmtodit/afmtodit.man: Document comment lines in map
- files.
- * src/devices/grops/grops.man: Document comment lines in encoding
- files.
-
- * tmac/cp1047.tmac: New file.
- * tmac/dvi.tmac, tmac/tty-char.tmac: Use it.
- * tmac/ps.tmac: Load latin1.tmac or cp1047.tmac.
- * tmac/Makefile.sub (NORMALFILES): Updated.
-
- * tmac/ec.tmac: Don't load latin1.tmac again.
-
- * font/devps/generate/lgreekmap, font/devps/generate/symbolchars,
- font/devps/generate/dingbats.map,
- font/devps/generate/dingbats.rmap, font/devps/text.enc,
- font/devps/generate/Makefile (symbolmap): Add header comment.
- * font/devps/generate/textmap: Ditto.
- Remove `charXXX' entries.
- * font/devps/symbolmap: Regenerated.
- * font/devps/*: Regenerated all font definition files.
-
-2002-02-28 Werner LEMBERG <wl@gnu.org>
-
- Add color support to grodvi (for drawing colors are currently
- translated to gray values).
-
- * src/devices/grodvi/dvi.cc (FILL_MAX): Removed.
- (dvi_printer): Add `cur_color' member.
- (dvi_printer::set_color): New function.
- (draw_dvi_printer): Remove `fill'.
- (draw_dvi_printer::fill_next): Pass environment as parameter.
- Update code for new color support translated to gray.
- (dvi_printer::set_char): Updated.
- (dvi_printer::begin_page, dvi_printer::end_page): Handle color
- changes crossing the page border.
- (dvi_printer::draw): Updated.
- Remove cases `f' and `F'.
- * tmac/dvi.tmac: Add color definitions.
- * NEWS, src/devices/grodvi/grodvi.man: Updated.
-
- * tmac/an-old.tmac (R): Make this a macro to emit a warning if
- used incorrectly.
-
- * aclocal.m4 (GROFF_NEED_DECLARATION): Use test similar to recent
- versions of autoconf.
- * configure: Updated.
-
- * doc/homepage.ms: Use `.blm'.
- * tmac/www.tmac (www-depth): New auxiliary variable.
- (www-pop-level): Don't issue HTML tag.
- (ULS, ULE, LI): Use absolute indentation.
-
- * src/devices/grops/ps.cc (ps_printer::begin_page,
- ps_printer::end_page): Switch forth and back to default color while
- starting a new page.
-
-2002-02-27 Werner LEMBERG <wl@gnu.org>
-
- Add EC and TC fonts to devdvi.
-
- * src/utils/tfmtodit/tfmtodit.man: Document patching of exbase.mf.
- * font/devdvi/generate/cork.map: Renamed to...
- * font/devdvi/generate/ec.map: This.
- Remove entry for `aq'.
- * font/devdvi/generate/tc.map: New file.
- * font/devdvi/generate/Makefile (*EC, *TC): New creation rules for
- EC and TC fonts.
- (FONTS): Updated.
- * font/devdvi/*EC, font/devdvi/*TC: New font definition files.
- * font/devdvi/Makefile.sub (DEVFILES): Updated.
- * tmac/ec.tmac: New file.
- * tmac/Makefile.sub (NORMALFILES): Updated.
- * NEWS, src/devices/grodvi/grodvi.man: Updated.
- * man/groff_char.man: Check `ECFONTS' register.
-
- * font/devdvi/{TR,TI,TB,TBI,HR}: Fix `name' field.
-
-2002-02-26 Werner LEMBERG <wl@gnu.org>
-
- * font/devdvi/generate/*.map: Remove all `charXXX' entries.
- * font/devdvi/generate/cork.map: Add 'y and 'Y.
- * font/devdvi/*: Updated.
- * tmac/dvi.tmac: Formatting.
-
- Add font `HBI' for the dvi output.
- Add support for font families `T' and `H'.
-
- * font/devdvi/HBI: New file.
- * font/devdvi/B: Renamed to ...
- * font/devdvi/TB: This.
- * font/devdvi/BI: Renamed to ...
- * font/devdvi/TBI: This.
- * font/devdvi/I: Renamed to ...
- * font/devdvi/TI: This.
- * font/devdvi/R: Renamed to ...
- * font/devdvi/TR: This.
- * font/devdvi/H: Renamed to ...
- * font/devdvi/HR: This.
- * font/devdvi/Makefile.sub (DEVFILES): Updated.
- * font/devdvi/generate/Makefile (HBI): New rule.
- (FONTS): Updated.
- (R, I, B, BI, H): Renamed to ...
- (TR, TI, TB, TBI, HR): This, respectively.
- (srcdir): Fixed.
- * NEWS, src/devices/grodvi/grodvi.man: Updated.
- * font/devdvi/DESC.in: Don't mount R, I, B, BI, and CWI.
- Add `styles' and `family' keywords.
- * tmac/dvi.tmac: Alias `H' to `HR'.
- Add some fspecial requests for italic fonts.
- Add TR and TI as special.
- Add support for `_' with font CWI.
-
- * src/roff/troff/number.cc (parse_expr): Add missing `break' for
- operator `:'. Until now, the expression `0:1' would return 2
- instead of 1.
-
-2002-02-25 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_char.man: Added some missing PS glyph names (from the
- Adobe Glyph List).
- * font/devps/generate/textmap, font/devps/symbolmap: Add
- `arrowupdn'.
-
- * doc/groff.texinfo: Minor additions and fixes.
- * man/groff_diff.man: Remove documentation of fp request. This
- is already covered in the original troff manual.
- Updated to be consistent with other doc files.
- * NEWS: Updated.
-
-2002-02-24 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_EBCDIC): Don't include `font/devutf8' in
- TTYDEVDIRS.
- Define new variable OTHERDEVDIRS (containing `font/devlj4
- font/devlbp' if not EBCDIC).
- * Makefile.in (TTYDEVDIRS): Always include `font/devutf8'.
- (OTHERDEVDIRS): New variable.
- (MDEFINES, DEVDIRS, ALLDIRS, DISTDIRS): Updated.
- * configure: Regenerated.
-
- * NEWS, src/devices/grotty/grotty.man: Updated.
-
-2002-02-23 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (do_overstrike, do_bracket,
- get_line_arg): Honour input level.
-
- Add new symbol `mc' corresponding to U+00B5 MICRO SIGN.
-
- * font/*/*: Implement it in all font files.
- * font/devps/generate/textmap, font/devps/generate/symbolchars,
- * font/devps/symbolmap: Updated.
- * font/devlj4/generate/text.map: Updated.
- * font/devdvi/generate/CompileFonts (sizes): Add LaTeX sizes.
- * font/devdvi/generate/texmi.map: Updated.
-
- * font/devutf8/R.proto: Remove all `charXXX' entries.
- * font/devutf8/NOTES: Updated.
-
- * font/devX*/*: Regenerated with xtotroff, using fonts from XFree86
- version 4.1.0.
-
- * tmac/latin1.tmac, tmac/psold.tmac, tmac/tty-char.tmac: Updated.
-
- * NEWS, man/groff_char.man: Updated.
-
-2002-02-21 Phil Lobbes <phil@perkpartners.com>
-
- * src/include/lib.h [HAVE_SNPRINTF]: Include stdarg.h.
-
-2002-02-20 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/roff/grog/grog.pl: Fix computation of $refer.
-
-2002-02-19 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h [!HAVE_SNPRINTF]: Add declarations for
- `snprintf' and `vsnprintf'.
-
- * src/include/htmlindicate.h: Renamed to...
- * src/include/htmlhint.h: This.
- * src/include/Makefile.sub: Updated.
- * src/preproc/eqn/main.cc: Updated.
-
-2002-02-18 Werner LEMBERG <wl@gnu.org>
-
- * man/roff.man, man/groff_out.man, man/groff.man,
- man/groff_diff.man, man/ditroff.man, src/roff/groff/groff.man,
- src/roff/troff/troff.man: Updated to latest changes in www.tmac.
-
- * win32-diffs: Updated.
-
-2002-02-17 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile (clean): Add *.eps.
- (MEMACROS): Removed.
- (TFLAG): New variable.
- (TROFF): Use it.
- Add -ww.
- (GROFF): Use TFLAG, FFLAG, -U, -p, -e, -t, and -ww.
- (.me.dit): Fixed.
- (.ms.html, .ms.ascii, .ms.ps, homepage.html): Simplify.
-
- * tmac/www.tmac: Use dummy diversion while resetting and disabling
- `.tl'.
- * tmac/e.tmac: Inserted some more `\"' to remove warnings if used
- unstripped.
- * src/roff/troff/troff.man: Fix order of parameter description.
-
- * NEWS: Updated.
-
-2002-02-16 Gaius Mulley <gaius@glam.ac.uk>
-
- Simplify image handling for grohtml.
- Fix <p> bug.
-
- * src/devices/grohtml/html-text.cc (DEBUGGING): Don't undefine but
- comment out.
- (html_text::dump_stack): Don't emit newline while debugging.
- (html_text::do_push) [DEBUGGING]: Print more info.
- (html_text::check_emit_text): Fix handling of <p>.
- * src/devices/grohtml/html.h: Updated.
- * src/devices/grohtml/output.cc (FPUTC, FPUTS, PUTC): New macros,
- replacing `fputc', `fputs', `putc'. If DEBUGGING is defined, they
- send its data to stderr also.
- Update all callers.
- (simple_output::space_or_newline) [DEBUGGING]: Removed.
- * src/devices/grohtml/post-html.cc (html_printer::do_links,
- html_printer::html_printer): Remove `DEBUGGING' conditionals.
-
- * src/include/html-strings.h (HTML_IMAGE_{CENTERED,LEFT,RIGHT,END}):
- Removed.
- * src/libs/libgroff/htmlhint.cc (is_in_graphic_start,
- is_inline_image): Removed.
- (html_begin_suppress, html_end_suppress): Don't take a parameter.
- (graphic_start, graphic_end): Removed.
- * src/include/htmlindicate.h: Updated.
- * src/preproc/html/pre-html.cc (DEBUG_HTML): Removed.
- (macroset_template): New global variable.
- (makeFileName): Use `macroset_template'.
- (write_end_image): Don't take a parameter.
- Don't emit newline.
- (write_start_image: Don't emit newline.
- (char_buffer::write_upto_newline): Updated.
- (char_buffer::skip_to_newline): Renamed to ...
- (char_buffer::skip_until_newline): This.
- Fix code.
- (char_buffer::write_file_troff, char_buffer::write_file_html):
- Simplified.
- (createAllPages, createImage) [DEBUGGING]: Handle `debug' flag.
- (removeAllPages): Remove `DEBUGGING' conditionals.
- (addRegDef, dump_args): New functions.
- (char_buffer::do_html, char_buffer::do_image): Handle
- `www-image-template' command line variable.
- Add more debugging code.
- (addps4html): Removed.
- (removeTempFiles) [DEBUGGING]: Handle `debug' flag.
-
- * src/preproc/eqn/main.cc: Include `ctype.h'.
- (suppress_html): Removed.
- (do_file): Updated.
- (inline_equation): Use `html_begin_suppress' and
- `html_end_suppress'.
- * src/preproc/pic/troff.cc: Don't include `htmlindicate.h'.
- (troff_output::start_picture, troff_output::finish_picture):
- Updated.
- * src/preproc/tbl/main.cc: Don't include `htmlindicate.h'.
- (process_input_file): Updated.
-
- * src/roff/troff/div.cc (page_number): Set page number only if the
- `ps4html' register isn't defined.
- * src/roff/troff/input.cc (image_no): New external variable.
- (do_suppress): Use it.
- * src/roff/troff/node.h (suppress_node::image_id): New member.
- * src/roff/troff/node.cc (image_no): Remove `static' keyword.
- (suppress_node::suppress_node): Initialize `image_id' member.
- (suppress_node::same): Handle `image_id' also.
- (suppress_node::copy): Updated.
- (last_image_id): New global variable.
- (suppress_node::tprint): Use it.
-
- * tmac/an-old.tmac (TS, TE, EQ, EN): Use HTML-IMAGE and
- HTML-IMAGE-END.
- * tmac/pspic.mac (PSPIC): Fix html support.
- * tmac/s.tmac (@EQ, @EN, @TS, TE, PS, PE): Ditto.
- * tmac/www.tmac (www-image-template): Set up.
- (HTMLINDEX): Renamed to...
- (HX): This.
- (BODYCOLOR): Renamed to...
- (BCL): This.
- (BACKGROUND): Renamed to...
- (BGIMG): This.
- (URL): Change order of parameters for consistency.
- (MAILTO): Renamed to...
- (MTO): This.
- (IMAGE, PNG-IMAGE, MARGIN-PNG-IMAGE): Renamed to...
- (IMG, PIMG, MPIMG): This.
- (HTML-H-BEGIN, HTML-H-END): Renamed to...
- (HnS, HnE): This.
- (LINKS): Renamed to...
- (LK): This.
- (LINE): Renamed to...
- (HR): This.
- (NO-AUTO-RULE): Renamed to...
- (NHR): This.
- (HTML-TL): Renamed to...
- (HTL): This.
- (UL-BEGIN, UL-END): Renamed to...
- (ULS, ULE): This.
- (DROPCAP): Renamed to...
- (DC): This.
- (TS, TE, EQ, EN): Provide default definitions.
- (www-make-unique-name): Updated.
- (HTML-IMAGE-INLINE): Fix typo.
- * tmac/groff_www.man: Updated.
-
- * doc/Makefile (homepage.html): Add option -r to grohtml.
- Use shortened image name.
- * doc/groff.texinfo: Updated info on grohtml strings and macros.
- * doc/homepage.ms: Updated and extended.
-
-2002-02-14 Werner LEMBERG <wl@gnu.org>
-
- Don't use `CSI 39 m' and `CSI 49 m' but `CSI 0 m'.
-
- * src/devices/grotty/tty.cc (SGR_DEFAULT_COLOR,
- SGR_BACK_DEFAULT_COLOR): Replaced with ...
- (tty_printer::put_color): Use it.
- (ttr_printer::end_page): Simplify.
-
-2002-02-13 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_tmac.man: Moved to...
- * man/groff_tmac.man: This place.
- * tmac/Makefile.sub, man/Makefile.sub: Updated.
-
-2002-02-12 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/Makefile.sub (snprintf.o): Don't use
- $(COMPILE.c) to not include groff's assert.h.
-
- * src/drivers/grotty/tty.cc (main): Add GROFF_NO_SGR environment
- variable.
- * NEWS, src/drivers/grotty/grotty.man: Document it.
-
-2002-02-11 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/snprintf/snprintf.c: Updated to latest version
- (2002-02-11).
-
- * src/roff/grog/grog.pl (process): Fix handling of `.['. We now
- test whether there is `.]' also.
- Don't check for spaces after `.['.
- * src/roff/grog/grog.sh: Do the same.
-
-2002-02-10 Werner LEMBERG <wl@gnu.org>
-
- Illegal -> Invalid.
-
- * src/libs/libgroff/illegal.cc: Renamed to ...
- * src/libs/libgroff/invalid.cc: This.
- (illegal_char_table): Renamed to ...
- (invalid_char_table): This.
- * src/libs/libgroff/Makefile.sub: Updated.
- * win32-diffs: Updated.
-
- * doc/groff.texinfo, src/devices/grops/psrm.cc (ps_get_line),
- src/libs/libdriver/input.cc (fatal_command, parse_color_command,
- parse_x_command), src/libs/libgroff/font.cc (text_file::next,
- font::load), src/preproc/eqn/main.cc (read_line, main),
- src/preproc/eqn/lex.cc (file_input::read_line),
- src/preproc/pic/lex.cc (file_input::read_line,
- simple_file_input::get, simple_file_input::peek),
- src/preproc/pic/main.cc (top_input::get, top_input::peek),
- src/preproc/pic/pic.man, src/preproc/refer/main.cc
- (input_stack::push_file), src/preproc/refer/refer.cc (do_file,
- do_bib), src/preproc/tbl/main.cc (table_input::get),
- src/preproc/grn/grn.man, src/preproc/grn/main.cc (interpret),
- src/roff/troff/input.cc (file_iterator::fill, file_iterator::peek,
- do_zero_width, read_request, encode_char, ps_get_line,
- transparent_file, get_char_for_escape_name, transparent_translate,
- asciify, input_char_description, read_string, set_string),
- src/roff/troff/env.cc (environment::add_html_tag),
- src/roff/troff/troff.man, tmac/e.tmac (`@(', `(f'): Do it.
-
- * src/include/lib.h: Updated.
-
- * src/preproc/eqn/eqn.cc: Removed.
-
- * NEWS: Updated.
-
- * src/preproc/grn/hdb.cc (DBRead): Fix fscanf() fields.
-
-2002-02-09 Werner LEMBERG <wl@gnu.org>
-
- * doc/gnu.xpm: New image.
- * doc/Makefile (DOCS): Add homepage.ps.
- Add rules for converting xpm->png and xpm->eps.
- Use `gnu.{xpm,eps}' as image names.
- * doc/homepage.ms: Updated.
-
-2002-02-09 Gaius Mulley <gaius@glam.ac.uk>
-
- * tmac/www.tmac (www-error): New macro, replacing calls to `@error'.
- (IMAGE): Change image position parameters to `-L', `-R', and `-C'.
- Remove calls to `B1' and `B2'
- (PNG-IMAGE): New macro for inclusion of images in PNG format.
- (www-left-ll-trap, www-left-po-trap, www-right-ll-trap): New
- auxiliary variables for MARGIN-PNG-IMAGE.
- (www-finish-left-po, www-finish-right-ll, www-finish-left-ll): New
- auxiliary macros for MARGIN-PNG-IMAGE.
- (MARGIN-PNG-IMAGE): New macro to put an image in PNG format into
- the margin.
- (www-heading-no): New auxiliary variable for HTML-H-{BEGIN,END}.
- (HTML-H-BEGIN, HTML-H-END): New macros to begin and end a heading.
- (DROPCAP): New macro to produce dropcap characters.
- (www-do-image): Renamed back to...
- (HTML-DO-IMAGE): This.
- Updated all callers.
-
- * doc/Makefile (gnubw.eps): Updated.
- * doc/homepage.ms: Updated.
-
-2002-02-08 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Fixed typos (\(*tx -> \*(tx).
- Added `linethick' to table in section `Style Variables'.
-
-2002-02-08 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/libs/libdriver/input.cc (get_extended_arg): Fix conditional.
-
-2002-02-07 Werner LEMBERG <wl@gnu.org>
-
- Adding options -C (compatibility mode) and -c (grotty's old output
- scheme) to nroff.
-
- * src/roff/nroff/nroff.sh: Implement it.
- Remove `-Wall'.
- * NEWS, src/roff/nroff/nroff.man: Updated.
-
- * PROBLEMS: Document bison 1.32 bug.
-
- Some fixes to make groff compile on z/OS 1.2 UNIX (was OS/390).
-
- * src/roff/troff/node.cc (make_tfont): Define it earlier.
- * src/roff/troff/div.h: Add prototype for `end_diversions'.
- * src/roff/troff/input.cc: Add prototype for `process_input_stack'.
- * src/roff/troff/env.h: Add prototype for `title'.
-
- Adding EBCDIC support to grotty.
-
- * src/devices/grotty/tty.cc (CSI): New macro.
- (SGR_*, tty_printer::put_color): Use it.
-
-2002-02-06 Werner LEMBERG <wl@gnu.org>
-
- Implementing color support in grotty. The new switch -c activates
- the old drawing scheme, disabling color at the same time. The new
- switch `-i' selects italic instead of underlining (SGR only).
-
- * src/devices/grotty/tty.cc (putstring): New define instead of
- `fputs'. Updated all callers.
- (old_drawing_scheme): New global variable.
- (COLOR_CHANGE): New enum value.
- (SGR_*): New defines containing color handling escape sequences.
- (TTY_MAX_COLORS, DEFAULT_COLOR_IDX): New defines.
- (glyph): New members `back_color_idx' and `fore_color_idx'.
- (glyph::order): Add COLOR_CHANGE.
- (tty_printer): New members `cur_fore_idx', `curr_back_idx',
- `is_underline', `is_bold', `cu_flag', `tty_colors'.
- New methods `make_underline', `make_bold', `color_to_idx',
- `change_color', `put_color'.
- (cu_flag): Moved into `tty_printer' class.
- (tty_printer::tty_printer): Initialize colors.
- (tty_printer::add_char, tty_printer::set_char, tty_printer::special,
- tty_printer::draw, tty_printer::end_page): Handle colors also.
- (main): Add options `-c' and `-i'.
- (usage): Updated.
- * NEWS, src/devices/grotty/grotty.man: Updated.
-
- * src/include/errarg.h (errarg): Add support for `unsigned int'.
- * src/libs/libgroff/errarg.c: Implement it.
-
- * src/include/printer.h (printer): Add `change_color' method
- (currently used by grotty only).
- * src/libs/libdriver/printer.cc: Implement it.
- * src/libs/libdriver/input.cc (parse_D_command, do_file): Add
- call to `pr->change_color'.
-
- * src/roff/troff/node.cc (troff_output_file::fill_color,
- troff_output_file::glyph_color): Call `do_motion'.
-
- * tmac/tty.tmac: Add color definitions.
-
- * src/roff/groff/groff.man: Minor fixes.
-
-2002-02-05 Bernd Warken <bwarken@mayn.de>
-
- * src/libs/libdriver/input.cc: Introduce `EnvInt' typedef and use
- it. This is a preparation for future changes.
-
-2002-02-05 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (process_input_stack): Fix the case
- where leading spaces are followed by \f or \s; previously, an
- incorrect space width has been used.
-
- * doc/roff.man (quoted_char): Fix argument.
- (comment): Define string.
-
-2002-02-04 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: More fixes.
-
-2002-02-04 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/eqn/box.cc (output_string): Don't use \\*[...].
- * src/preproc/eqn/main.cc (do_file, inline_equation): Call
- `restore_compatibility' before `output_string' -- the LINE_STRING
- register now already contains proper switches from and to
- compatibility mode.
-
- * man/groff_char.man: Add Euro symbol.
- * man/groff_diff.man: Improve documentation of `.am1' and `.as1'.
- * tmac/tty.tmac: Add `EUR' as replacement for `eu' and `Eu'.
- * doc/groff.texinfo (Defstr*): Print strings with full syntax.
- Other minor fixes.
-
- * doc/Makefile (.SUFFIXES, .texinfo.pdf, clean): Add support for
- texinfo->pdf.
- (.texinfo.html): Add support for texinfo->html.
-
-2002-02-03 Werner LEMBERG <wl@gnu.org>
-
- Added three new requests `ds1', `as1', and `ami'. The former two
- are equivalent to `ds' and `as' with the difference that
- compatibility mode is saved on entry, switched off during string
- expansion, and restored on exit. The latter is the pendant to `dei'
- for `am'.
-
- (do_define_string): Use `define_mode' and `calling mode'.
- Insert COMPATIBLE_SAVE and COMPATIBLE_RESTORE at the beginning and
- end of string, respectively.
- (define_string, append_string): Use `calling_mode'.
- (define_nocomp_string, append_nocomp_string,
- define_string_indirect): New functions.
- (init_input_requests): Updated.
- * NEWS, man/groff_diff.man, man/groff.man: Document it.
-
- * src/preproc/eqn/box.cc (box::top_level, box::extra_space): Use
- `as1' for assigning LINE_STRING (this is `10' usually). Sun's
- mm macro package accesses this string register directly.
- * src/preproc/eqn/main.cc (inline_equation): Use `as1'.
-
- * tmac/trace.tmac: Trace calls to `am' also. Make it work in
- compatibility mode.
-
-2002-02-02 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo, tmac/groff_ms.man: More fixes.
-
-2002-01-31 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (I): Use \, and \/ to improve spacing.
-
-2002-01-31 Bernd Warken <bwarken@mayn.de>
-
- * src/devices/grolbp/lbp.cc (main): Delete `pr'.
- * man/groff_out.man: Revised and updated.
-
-2002-01-30 Bernd Warken <bwarken@mayn.de>
-
- * src/libs/libdriver/input.cc [USE_ENV_STACK]: New macro to comment
- out the unused `{' and `}' commands. Undefined by default.
- (IntArray): Make `data' private.
- (IntArray::operator[], IntArray::get_data, IntArray::len): Use these
- new methods instead.
- (skip_line_D, skip_to_end_of_line): New functions.
- (get_D_fixed_args): Use `skip_line_D'.
- Changed to handle dummy odd arguments by ...
- (get_D_fixed_args_odd_dummy): This new function.
- (get_D_variable_args): Split some code into ...
- (get_possibly_integer_args): This new function.
- (send_draw): Use more `const'.
- (delete_current_env): New function.
- (position_to_end_of_args): Use `size_t'.
- Updated.
- (send_draw): Updated.
- (parse_D_command): Handle `c', `C', and `t' better.
- Updated.
- (do_file): Updated.
-
-2002-01-29 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Revised.
- * doc/groff.texinfo: Introduce @Def...List, @Def...Item, and
- @Def...ListEnd which replaces @Def...x. This is necessary to get
- proper HTML output -- see the comment in the file for more
- information.
- Updated all calls.
-
-2002-01-29 Gaius Mulley <gaius@glam.ac.uk>
-
- Fixes to make color changes of 2002-01-21 work with grohtml.
-
- * src/devices/grohtml/post-html.cc (style): Updated.
- (html_printer): Remove unused methods.
- (html_printer::do_font, html_printer::draw, html_printer::set_char,
- html_printer::special): Updated.
- * src/devices/grohtml/html-text.cc (debugStack, turnDebug,
- html_text::dump_stack_element, html_text::dump_stack) [DEBUGGING]:
- Added some debugging code.
- (html_text::start_tag): Updated.
- (html_text::do_push): New method.
- (html_text::push_para): Call it.
- Add method for handling color.
- (html_text::do_color): Updated.
- (html_text::shutdown): Handle color.
- * src/devices/grohtml/html-text.h (tag_definition): New member
- `col'.
- Updated.
-
-2002-01-28 Werner LEMBERG <wl@gnu.org>
-
- * tmac/ps.tmac, tmac/html.tmac: Fix compatibility mode issues.
-
-2002-01-27 Gaius Mulley <gaius@glam.ac.uk>
-
- Add two switches -a and -g to control the antialiasing bits for
- text and graphics, respectively.
-
- * src/devices/grohtml/post-html.cc (main): Dummy code for `-a' and
- `-g'.
- * src/devices/grohtml/grohtml.man: Document them.
- * src/preproc/html/pre-html.cc (MIN_ALPHA_BITS, MAX_ALPHA_BITS):
- New macros.
- (textAlphaBits, graphicAlphaBits, antiAlias): New global variables.
- (setupAntiAlias): New function.
- (createAllPages): Updated.
- (scanArguments): Handle `-a' and `-g'.
- (main): Call `setupAntiAlias'.
- * NEWS: Updated.
-
-2002-01-27 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo (Def*): Call index function after deffn.
-
- * tmac/html.tmac: Call `nroff' request.
-
-2002-01-26 Larry Kollar <kollar@alltel.net>
-
- * tmac/groff_ms.man: Add some omissions.
-
-2002-01-25 Larry Kollar <kollar@alltel.net>
-
- * tmac/groff_ms.man: Typographical improvements.
-
-2002-01-25 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Updated version and copyright.
- * src/devices/grops/grops.man: Updated.
-
- * tmac/groff_tmac.man: Fix `ig' macro.
-
- * tmac/an-old.tmac (ne): Redefine `ne' request to be a no-op in
- nroff mode.
- Use `.ne' unconditionally everywhere.
- (TS): Only insert some vertical space. Doing a page break is no
- longer necessary due to the redefinition of the `ne' request.
-
- * src/libs/libdriver/input.cc (parse_D_command): Don't emit a
- warning for unknown subcommands but parse and pass them to the
- device driver.
-
-2002-01-24 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_www.man, NEWS: Fix typos.
-
-2002-01-21 Werner LEMBERG <wl@gnu.org>
-
- Complete revision of color support:
-
- Adapt programs to the new libdriver/input.cc.
-
- Color spaces are no longer converted to RGB but transferred as-is
- in the troff intermediate output format.
-
- Handle default color gracefully. troff now supports a `default'
- color (which can't be changed).
-
- grops will now use the proper color space functions if available.
-
- Update pic.
-
- Note that currently grohtml doesn't handle colors properly. This
- has to be fixed.
-
- * src/libs/libgroff/itoa.c (UINT_DIGITS): New macro.
- (ui_to_a): New function.
- * src/include/lib.h: Updated.
-
- * src/include/color.h (color_scheme): Replace `NONE' with `DEFAULT'.
- (color): Simplified; removed all `double' members and methods.
- A new array `components' now holds the color parameters.
- (color::is_default, color::get_components): New methods.
- (color::operator==, color:operator!=): New.
- (Red, Green, Blue, Cyan, Magenta, Yellow, Black, Gray): New macros
- to make access to the `components' array more comprehensible.
- * src/libs/libgroff/color.cc: Implement new color support.
- (atoh): Small fixes.
- (color::read_encoding): Simplified for new troff intermediate color
- output format.
- (default_color): New global variable.
-
- * src/roff/troff/input.cc (default_symbol): New global variable.
- (lookup_color): Use it.
- (default_black): Removed.
- (do_glyph_color, do_fill_color): Simplified.
- (define_color): Handle default color.
- Improve warnings.
- (do_if_request): Handle default color.
- * src/roff/troff/env.cc (environment::environment): Initialize
- colors with `default_color'.
- * src/roff/troff/node.cc (troff_output_file::put): Add method
- for `unsigned int'.
- (troff_output_file::hex): Removed.
- (troff_output_file::fill_color, troff_output_file::glyph_color):
- Updated to include/color.h and libdriver/input.cc.
-
- * src/preproc/pic/object.cc (draw_arrow): New parameter to set
- fill color properly (identically to the outline color). \D'f...'
- doesn't work any more.
- All function calls to it updated.
-
- * src/devices/grohtml/post-html.cc (html_printer::do_body, main):
- Updated.
- * src/devices/grohtml/html-text.cc (html_text::issue_color_begin):
- Updated.
-
- * src/devices/grops/ps.cc (ps_output::put_color): New method.
- (ps_printer::sbuf_color): Make a real member instead of pointer.
- (ps_printer::fill_color, ps_printer::output_color): Removed.
- (ps_printer::ps_printer): Updated.
- (ps_printer::set_char): Ditto.
- (ps_printer::set_color): Use various color schemes.
- Use `put_color' method.
- (ps_printer::flush_sbuf): Don't set color.
- (ps_printer::fill_path): Take `environment' as parameter.
- Simplify color handling.
- (ps_printer::set_line_thickness): Renamed to ...
- (ps_printer::set_line_thickness_and_color): This (and updated).
- (ps_printer::set_color): Change second parameter from `complete'
- to `fill' which better describes what it does.
- (ps_printer::draw): Call `flush_sbuf' to output graphic commands
- and text in the right order.
- Updated.
- Remove branches for `f' and `F'; this is handled by
- libdriver/input.cc.
- * src/devices/grops/ps.h: Updated.
- * font/devps/prologue (FL): Redefined.
- ({F,C}r,k,g: New color functions (with and without filling).
-
- * doc/pic.ms, src/preproc/pic/pic.man: Small fixes.
- * man/groff_diff.man, man/groff.man, man/groff_out.man,
- doc/groff.texinfo, NEWS: Updated.
-
-2002-01-20 Bernd Warken <bwarken@mayn.de>
-
- * src/libs/libdriver/input.cc: Completely rewritten. See comments
- in this file for what has been changed.
-
-2002-01-19 Werner LEMBERG <wl@gnu.org>
-
- * test-groff: Fix GROFF_FONT_PATH.
- * tmac/andoc.tmac: Add dummy macros for equation support -- eqnrc
- is read before .TH or .Dd is parsed.
-
-2002-01-18 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/libs/libgroff/geometry.cc (check_output_arc_limits): Fix
- quadrant boundaries.
-
-2002-01-18 Werner LEMBERG <wl@gnu.org>
-
- * devices/grops/ps.cc: Aargh! Fix the fix of the incorrectly
- applied last patch.
-
-2002-01-17 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.common: Initialize %I register for the %I macro to
- avoid (harmless) warning.
- * tmac/doc.tmac (Bd): There is no reason to enforce -compact
- when in the SYNOPSIS section.
-
-2002-01-17 Bruno Haible <haible@clisp.cons.org>
-
- * src/preproc/pic/lex.cc (get_token): Fix typo.
-
-2002-01-17 Werner LEMBERG <wl@gnu.org>
-
- * devices/grops/ps.cc: Fix incorrectly applied last patch.
-
-2002-01-17 Larry Kollar <kollar@alltel.net>
-
- * tmac/groff_ms.man: Completely rewritten.
-
-2002-01-16 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (TS): Force break, inserting some vertical space.
-
-2002-01-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * devices/grops/ps.cc (ps_printer::fill_path): Fix handling of
- fill colors.
- (ps_printer::draw): Ditto.
-
-2002-01-14 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/groff_mdoc.man: Minor fixes.
-
-2002-01-13 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_out.man: Some fixes.
-
-2002-01-13 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/pic.ms: Fix typos.
-
-2002-01-12 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo, doc/groff.man: More on a printable backslash.
-
-2002-01-10 Werner LEMBERG <wl@gnu.org>
-
- * font/devutf8/R.proto, font/devhtml/R.prot: Add `Eu' and `eu'
- symbols.
- * NEWS: Updated.
-
-2002-01-09 Bernd Warken <bwarken@mayn.de>
-
- * man/groff_out.man: Revised.
- * man/roff.man: Minor fixes.
- * src/roff/troff/troff.man: Some reordering.
-
-2002-01-09 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Add dummy macros for equation support.
-
-2002-01-07 Werner LEMBERG <wl@gnu.org>
-
- doc/groff.texinfo: Fix documentation of glyph searching algorithm.
-
- * tmac/an-old.tmac: Revert change 2001-12-23. This breaks too many
- man pages.
- * tmac/groff_man.man: Small improvements.
-
-2002-01-07 Bernd Warken <bwarken@mayn.de>
-
- * man/groff_diff.man: Revised.
-
-2002-01-06 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac: Remove extraneous backslash.
-
-2002-01-06 Bernd Warken <bwarken@mayn.de>
-
- * man/ditroff.man, src/roff/groff/groff.man, man/groff.man: Revised.
-
-2002-01-05 Werner LEMBERG <wl@gnu.org>
-
- Integrated groffer, contributed by Bernd Warken.
-
- * contrib/groffer/*: New.
- * Makefile.in, NEWS: Updated.
-
-2002-01-04 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Added macros `@Defmpreg' and `@Defmpregx' for
- registers defined in macro packages.
- Revising the ms part.
-
-2002-01-04 Larry Kollar <kollar@alltel.net>
-
- * doc/groff.texinfo: Add documentation for ms macros.
-
-2002-01-02 Werner LEMBERG <wl@gnu.org>
-
- First step in adding PS support for the Euro symbol. `eu' is the
- official Euro logo, `Eu' is a font-specific glyph variant.
-
- * font/devps/text.enc: Add `Euro' at position 9.
- * font/devps/generate/textmap: Add `Euro' as symbol `Eu'.
- * font/devps/symbolmap: Regenerated.
-
- * NEWS: Updated.
-
-2002-01-02 Bernd Warken <bwarken@mayn.de>
-
- * man/roff.man: Revised.
-
-2002-01-01 Bernd Warken <bwarken@mayn.de>
-
- * src/roff/groff/groff.man: Completely rewritten.
-
-2001-12-31 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile: Updated.
-
-2001-12-30 Werner LEMBERG <wl@gnu.org>
-
- * tmac/www.tmac: Make all names of internal macros/registers/strings
- lowercase, and prepend `www-'.
- Other minor changes.
- * src/roff/troff/troff.man: Add preprocessor string at BOF.
-
-2001-12-30 Gaius Mulley <gaius@glam.ac.uk>
-
- Implement option `-b' in grohtml to set the HTML background colour.
-
- * src/devices/grohtml/post-html.cc (default_background): New global
- variable.
- (html_printer::html_printer): Initialize `background' to
- `default_background'.
- (main): Implement option `-b'.
- (usage): Updated.
- * src/preproc/html/pre-html.cc (scanArguments): Add dummy handling
- of `-b' option.
- * src/devices/grohtml/grohtml.man: Updated.
- * doc/Makefile (.ms.html): Use `-b'.
- * tmac/html.tmac: Don't set background color.
-
- Add new grohtml tag `.html-tl'.
-
- * src/devices/grohtml/post-html.cc (title_desc): Add `with_h1'
- member variable.
- (title_desc::title_desc): Updated.
- (html_printer::troff_tag): Handle `.html-tl'.
- (html_printer::write_title): Use `with_h1'.
- * tmac/www.tmac (www-end-nowhere): New auxiliary macro.
- (HTML-TL): New macro.
-
- Add support for unordered lists in HTML.
-
- * tmac/www.tmac (www-level): New auxiliary register.
- (www-level1, www-level2, www-level3): New auxiliary strings.
- (www-push-level, www-pop-level): New auxiliary macros
- (UL-BEGIN, UL-END, LI): User macros for unordered lists.
-
- Miscellaneous.
-
- * src/preproc/html/pre-html.cc (DEFAULT_IMAGE_RES): Increase to 100.
- (DEFAULT_VERTICAL_OFFSET): Removed.
- (IMAGE_BOARDER_PIXELS): Set to 0.
- (A4_LENGTH, A4_OFFSET, LETTER_LENGTH, LETTER_OFFSET): New macros.
- (vertical_offset): Initialize with 0.
- (gsPaper): New global variable.
- (get_resolution): Scan for and return unsigned int.
- (get_papersize): New function to get paper length from devps/DESC.
- (determine_vertical_offset): New function.
- (createAllPages): Produce gray-level images and use proper page
- length.
- (createImage): Use `-quiet' option of pnmcrop.
- (addZ): Fix passing of `-Z'.
- (scanArguments): Fix handling of `-o'.
- (main): Call `determine_vertical_offset'.
- * src/devices/grohtml/post-html.cc (html_printer::draw): Comment out
- code for `l'.
-
- * src/libs/libgroff/tmpfile.cc (add_tmp_file): Fix buffer length.
- * src/roff/troff/node.cc (troff_output_file::check_charinfo): Handle
- glyph descenders properly.
-
- * doc/homepage.ms: Include `gnubw.eps'.
- * doc/Makefile (gnubw.eps): New rule.
- (homepage.html): Depend on `gnubw.eps'.
-
-2001-12-25 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (default_black): Fix return value.
-
-2001-12-24 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (Dt): Change output of architecture strings.
- Do some syntax cleanup.
- * tmac/groff_mdoc.man: Updated.
-
-2001-12-23 Werner LEMBERG <wl@gnu.org>
-
- Adding an `itc' request (input line trap accepting \c).
-
- * src/roff/troff/env.h (environment): New member
- `continued_input_trap'.
- Make `do_input_trap' a friend function instead of `input_trap'.
- * src/roff/troff/env.cc (environment::environment,
- environment::copy): Updated.
- (environment::newline): Implement it.
- (do_input_trap): New function.
- (input_trap): Call `do_input_trap'.
- (input_trap_continued): New function.
- (init_env_requests): Updated.
- * src/roff/troff/TODO: Updated.
-
- * tmac/an-old.tmac (SH, SS, B, I, SM, SB, TP): Use `.itc' instead of
- `.it'.
-
- * src/preproc/grn/hdb.cc (DBRead): Really chop after 127 characters.
-
-2001-12-22 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common, tmac/doc-syms: Small updates.
-
-2001-12-22 Colin Watson <cjwatson@debian.org>
-
- * tmac/an-old.tmac (an-p-footer): Set title length in environment 1.
-
-2001-12-22 Bernd Warken <bwarken@mayn.de>
-
- * MANIFEST: New file.
-
-2001-12-22 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/grn/grn.man: Updated.
-
-2001-12-22 Solar Designer <solar@openwall.com>
-
- * src/preproc/grn/hdb.cc (MAXSTRING_S): New macro.
- (DBRead): Use it.
-
-2001-12-19 Werner LEMBERG <wl@gnu.org>
-
- Implement a fallback character request `.fchar'.
-
- * src/roff/troff/charinfo.h (charinfo): New flag `fallback'.
- (is_fallback): New inline function.
- * src/roff/troff/input.cc (do_define_character): New function.
- (define_character): Call `do_define_character'.
- (define_fallback_character): New function.
- (init_input_requests): Add `fchar'.
- (charinfo::charinfo): Updated.
- (charinfo::set_macro): New argument to set `fallback' flag.
- * src/roff/troff/node.cc (make_glyph_node, make_node,
- node::add_char): Check `fallback' flag.
- * NEWS, man/groff_diff.man, man/groff_man: Updated.
-
-2001-12-16 Werner LEMBERG <wl@gnu.org>
-
- * groff.texinfo: Document exact search algorithm for glyphs.
-
-2001-12-15 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.cpg, Makefile.ccpg, Makefile.man: Add dummy file to
- the left side of $(MANPAGES) rule to make it always non-empty.
-
-2001-12-14 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (default_black): Define default color
- `black' if not yet defined.
-
-2001-12-13 Werner LEMBERG <wl@gnu.org>
-
- Implement new string-valued register `.fn' to return the current
- real (internal) font name.
-
- * env.cc (environment::get_font_name_string): New function.
- (init_env_requests): Add `.fn' register.
- * env.h (environment): Updated.
- * node.cc (font_info): Make `get_font_name' a friend.
- (get_font_name): New function.
- * node.h: Updated.
-
- * man/groff_diff.man, man/groff.man, NEWS: Updated.
-
-2001-12-12 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/preproc/eqn/main.cc (inline_equation): Fix typos.
-
-2001-12-12 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_man.man, doc/groff.texinfo: There is no .R macro.
-
-2001-12-10 Gaius Mulley <gaius@glam.ac.uk>
-
- * man/groff_diff.man: Adding documentation for \O.
-
-2001-12-10 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/pre-html.cc (TROFF_COMMAND): Removed.
- (scanArguments): Use PROG_PREFIX for the name of the troff binary.
-
-2001-12-09 Werner LEMBERG <wl@gnu.org>
-
- * man/roff.man: Revised.
- * src/roff/groff/groff.man: Replace man page references with a
- pointer to roff.man.
-
-2001-12-09 Bernd Warken <bwarken@mayn.de>
-
- * man/roff.man: Completely rewritten.
-
-2001-12-06 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/preproc/eqn/main.cc (inline_equation): Improve error message.
-
-2001-12-05 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (get_delim_file_name): Removed since no
- longer used.
- * src/devices/grohtml/post-html.cc (html_printer::html_printer): Fix
- order of initializers.
- * NEWS: Updated.
-
-2001-12-05 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/groff.texinfo: Fix documentation of \O.
-
- * src/devices/grohtml/html-text.cc (html_text::do_indent,
- html_text::do_table, html_text::do_emittext, html_text::do_para):
- Use `const' for first argument.
- (html_text::do_table): Use cast.
- * src/devices/grohtml/html-text.h: Updated.
- * src/devices/grohtml/output.cc (simple_output::put_string): Add
- method for `const string &s'.
- * src/devices/grohtml/html.h: Updated.
- * src/devices/grohtml/post-html.cc (MAX_STRING_LENGTH): Removed.
- (ANCHOR_TEMPLATE): Modified.
- (manufacture_headings): New global variable to handle `-h' option.
- (is_subsection): Removed.
- (char_buffer::add_string): Add `const' to first argument.
- Protect against invalid string argument.
- Add method for `const string &s'.
- (text_glob): Completely redesigned.
- (page): Use `const' for strings and remove string length variable.
- (page::add_html): Removed.
- (page::add_end_encode): New member function.
- (to_unicode): Moved upwards.
- (title_desc, header_desc): Updated.
- (header_desc::write_headings): Updated to new ANCHOR_TEMPLATE
- definition.
- (html_printer::is_bold, html_printer::make_bold): New member
- functions.
- (html_printer::end_of_line): Updated.
- (generate_img_src, html_printer::do_auto_image,
- html_printer::do_title, html_printer::write_header,
- html_printer::determine_header_level, html_printer::do_heading,
- html_printer::do_linelength, html_printer::do_pageoffset,
- html_printer::do_indentation, html_printer::do_tempindent,
- html_printer::do_indentedparagraph, html_printer::do_break,
- html_printer::flush_sbuf, get_html_translation,
- html_printer::begin_page, html_printer::special): Rewritten to get
- rid of static string length limit.
- (html_printer::troff_tag): Added `.no-auto-rule'.
- (html_printer::flush_globs): Small fix.
- (html_printer::determine_space): Don't compute `space_width'.
- (html_printer::translate_to_html): Renamed to ...
- (html_printer::emit_html): This (with updates).
- (html_printer::write_header): Implement `-h' option.
- (html_printer::draw): Remove commented-out code. Handle `F'
- command.
- (html_printer::add_char_to_sbuf): Removed.
- (html_printer::add_to_sbuf): Rewritten.
- (html_printer::sbuf_continuation): Fixed.
- (html_printer::seen_backwards_escape, reverse,
- html_printer::remove_last_char_from_sbuf): Removed.
- (char_translate_to_html, str_translate_to_html): Removed.
- (html_printer::overstrike): New function member.
- (html_printer::set_char): Use it.
- (html_printer::do_body): New function member.
- (html_printer::~html_printer): Use it.
- (main): Handle `-h' option.
- (usage): Updated.
- * src/devices/grohtml/grohtml.man: Document -h switch.
-
- * src/preproc/html/pre-html.cc: Include searchpath.h
- Replace `POSTSCRIPTRES' macro with `postscriptRes' variable.
- (get_resolution): New function.
- (checkImageDir): Use `0777' permissions in mkdir()
- (write_start_image): Rewritten to use `\O[5...]'.
- (createImage, generateImages): Updated.
- (main): Handle `F' and `h' options.
- Use `get_resolution'.
-
- * src/roff/troff/input.cc (begin, end, image): Removed.
- (do_suppress): Take parameter.
- Handle modified syntax of `\O'.
- (token::next): Updated.
- (init_markup_requests): Removed.
- (main): Updated.
-
- * src/roff/troff/div.h: Add declaration for begin_page().
-
- * tmac/color-html.tmac: Removed. Contents moved to...
- * tmac/html.tmac: Here. Set background color.
- * tmac/color.tmac: Removed. Contents moved to...
- * tmac/ps.tmac: Here.
- * tmac/www.tmac: Remove the title command when generating images
- for html.
- (NO_AUTO_RULE): New macro.
- (HTML_DO_IMAGE): Use revised `\O' escapes.
- * tmac/Makefile.sub, tmac/groff_www.man, tmac/troffrc: Updated.
-
-2001-12-02 Werner LEMBERG <wl@gnu.org>
-
- * tmac/groff_mdoc.man: Fix typo.
-
-2001-12-01 Colin Watson <cjwatson@debian.org>
-
- * man/roff.man: Fix typo.
-
-2001-11-29 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libbib/map.c, src/utils/pfbtops/pfbtops.c: Include
- stdlib.h.
-
- * src/roff/troff/input.cc (read_draw_node): Emit error message if
- more than one argument to \D'f ...'.
-
- * tmac/Makefile.sub (NORMALFILES): Add lbp.tmac.
-
-2001-11-28 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac, tmac/doc.tmac: Assure that the macro package is
- loaded only once.
-
- * tmac/groff_man.man: Minor cosmetic fix.
-
-2001-11-27 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/groff/groff.man, tmac/groff_tmac.man,
- tmac/groff_www.man: s/mwww/www/.
-
-2001-11-26 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_MKSTEMP): Implement test using C++ linkage.
- * configure: Regenerated.
- * win32-diffs: Updated.
-
- * tmac/groff_mwww.tmac: Renamed to ...
- * tmac/groff_www.tmac: This.
- * tmac/mwww.tmac: Removed.
- * NEWS, tmac/Makefile.sub: Updated.
-
-2001-11-21 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Improve documentation of the `\v' escape.
- Fix explanation of `\D' and `rt'.
-
-2001-11-20 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (an-header): Set header length equal to page
- width.
- * doc/groff.texinfo: Improve documentation of `ne' request. Other
- minor fixes.
- * NEWS: Small fix.
-
-2001-11-19 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, man/Makefile.sub: Updated.
-
-2001-11-19 Bernd Warken <bwarken@mayn.de>
-
- * man/ditroff.man: New file.
-
-2001-11-17 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_differences.man: Renamed to ...
- * man/groff_diff.man: This. Updated.
- * man/Makefile.sub, src/roff/troff/troff.man, NEWS: Updated.
-
- * src/preproc/html/pushbackbuffer.cc: Renamed to ...
- * src/preproc/html/pushback.cc: This. Updated.
- * src/preproc/html/pushbackbuffer.h: Renamed to ...
- * src/preproc/html/pushback.h: This.
- * src/preproc/html/Makefile.sub, src/preproc/html/pre-html.cc:
- Updated.
-
- * src/libs/libgroff/htmlindicate.cc: Renamed to ...
- * src/libs/libgroff/htmlhint.cc: This.
- * src/libs/libgroff/Makefile.sub: Updated.
-
- * tmac/an-old.tmac (an-end): Fix page length.
-
-2001-11-16 Werner LEMBERG <wl@gnu.org>
-
- * NEWS, man/groff_differences.man, doc/groff.texinfo: Updated.
- * man/Makefile.sub: Include groff_differences.man.
- * VERSION: Set to 1.18.
- * REVISION: Set to 0.
-
-2001-11-16 Bernd Warken <bwarken@mayn.de>
-
- * src/roff/troff/input.cc (do_define_macro): Allow whitespace before
- the second dot (or ending macro name) to end a macro.
- * doc/groff.texinfo: Doc fix.
-
-2001-11-16 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc-common (doc-header): Handle very long document titles
- better.
-
-2001-11-16 Werner LEMBERG <wl@gnu.org>
-
- * tmac/doc.tmac (doc-do-Bl-args): Fix .substring requests.
-
-2001-11-15 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Revised and split into troff.man and...
- * man/groff_differences.man: New file.
- * NEWS: Updated.
-
-2001-11-13 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac (TS, TE): New macros for table support.
-
-2001-11-12 Werner LEMBERG <wl@gnu.org>
-
- * src/include/lib.h: Provide a fix for emx to not include
- groff-getopt.h.
-
-2001-10-27 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/input.cc (substring_macro): Fix computation of
- boundary values.
-
-2001-10-20 Werner LEMBERG <wl@gnu.org>
-
- Undo change from 2001-08-28.
-
- * src/roff/troff/input.cc (have_input): New global variable.
- (token::next): Set `have_input' for \f, \H, \R, \s, and \S if not
- in compatibility mode.
- (process_input_stack): Use it.
-
-2001-10-19 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (doc-flag-recursion): Protect arguments against
- being handled as end-of-sentence characters,
-
-2001-10-10 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/roff/troff/input.cc (file_iterator): New members
- `suppress_newline_flag' and `seen_escape'.
- (file_iterator::next_file): Updated.
- (file_iterator::fill): Use it.
- (string_iterator): New member `suppress_newline_flag'.
- (string_iterator::fill): Set it.
- (get_color_element): Use MAX_COLOR_VAL.
- * src/roff/troff/env.cc (environment): Remove `need_eol'.
- (no_fill): Don't set `env->ignore_next_eol'.
- (environment::newline): Handle `eol' tag properly.
- Emit `eol.ce'.
- (environment::add_html_tag): Set `env->ignore_next_eol'.
- Don't handle `.ce'.
- * src/roff/troff/env.h (environment): Updated.
-
- * src/devices/grohtml/post-html.cc (text_glob::is_eol_ce): New
- member function.
- (html_printer::outstanding_eol): New member function.
- (html_printer::do_title): Use new functions.
- (html_printer::troff_tag): Test `id_eol_ce'.
-
-2001-10-10 Werner LEMBERG <wl@gnu.org>
-
- * tmac/color.tmac, tmac/color-html.tmac: Use `.do' to make those
- files work with -C also.
-
-2001-10-05 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Minor fix.
- * src/preproc/html/pre-html.cc (scanArguments): Don't handle `-?'
- as a valid command line switch.
- * src/devices/grohtml/post-html.cc (main): Ditto.
- (usage): Updated.
- * src/devices/grohtml/grohtml.man: Updated.
- * src/roff/groff/groff.cc (main): Pass `-v' to predriver also.
-
-2001-10-04 Werner LEMBERG <wl@gnu.org>
-
- Implementing color support in troff, pic, grops, and grohtml. These
- changes are based on a major patch provided by Gaius Mulley
- <gaius@glam.ac.uk>.
-
- New request: `defcolor', supporting rgb, cmy, cmyk, and gray
- definitions with both hex values and fractions.
-
- New escapes: \m and \M for drawing and background color,
- respectively. This corresponds to the troff output commands `m'
- and `DF'.
-
- groff and troff accept command line switch `-c' to disable color
- output (which is automatically disabled in compatibility mode).
-
- New scaling indicator `f' for fractions (1f = 65536u).
-
- New conditional operator `m' to test for defined colors with `if'
- and `ie'.
-
- New keywords `color' (or `colour', `colored', `coloured'), `outline'
- (or `outlined'), and `shaded' added to pic.
-
- * src/include/color.h: New file.
- * src/include/driver.h: Include it.
- * src/include/printer.h: Include color.h.
- (environment): New members `col' and `fill'.
- (printer): Remove `adjust_arc_center' member function.
- * src/include/Makefile.sub: Updated.
-
- * src/libs/libdriver/input.cc (do_file): Initialize `env.col' and
- `env.fill'.
- Handle `m' and `DF' troff commands.
- * src/libs/libgroff/color.cc: New file.
- * src/libs/libgroff/Makefile.sub: Updated.
-
- * src/preproc/html/pre-html.cc (IMAGE_BORDER_PIXELS): Set to 2.
- (stop): Removed.
- (createImage): Fix computation of `y2'.
- Use `pnmcrop' also.
- (buffer::write_file_html): Remove calls to `stop'.
-
- * src/preproc/pic/common.h (common_output): New abstract function
- members `set_color', `reset_color', `get_last_filled', and
- `get_outline_color'.
- * src/preproc/pic/object.h: Add `IS_SHADED' and `IS_OUTLINED'.
- (object_spec): Add members `shaded' and `outlined'.
- * src/preproc/pic/output.h (output): `command' is now abstract.
- New function members `set_color', `reset_color', `get_last_filled',
- and `get_outline_color'.
- * src/preproc/pic/lex.cc (lookup_keyword): Recognize `colo[u]r[ed]',
- `outline[d]', and `shaded'.
- * src/preproc/pic/object.cc (output::command): Removed.
- (output::set_location): Moved to output.h.
- (graphic_object): Add protected members `outline_color' and
- `color_fill'.
- Add member functions `set_outline_color', `get_outline_color', and
- `set_fill_color'.
- (closed_object): Add member function `set_fill_color'.
- Add member `color_fill'.
- (graphic_object::print_text): Use `out->set_color' and
- `out->reset_color'.
- (box_object::print, ellipse_object::print, circle_object::print,
- line_object::print, spline_object::print, arc_object::print): Ditto.
- (object_spec::make_object): Implement `IS_OUTLINED' and `IS_SHADED'.
- * src/preproc/pic/pic.y: Add tokens `COLORED', `OUTLINED', and
- `SHADED', making them `%left'.
- Add rules `object_spec [SHADED|COLORED|OUTLINED] text'.
- * src/preproc/pic/tex.cc (tex_output): New dummy function members
- `set_color', `reset_color', `get_last_filled', and
- `get_outline_color'.
- * src/preproc/pic/troff.cc (simple_output): New abstract function
- members `set_color', `reset_color', and `get_last_filled'.
- (simple_output::polygon, simple_output::circle,
- simple_output::ellipse): Use `get_last_filled'.
- (troff_output): New members `last_filled' and `last_outlined'.
- New function members `set_color', `reset_color', `get_last_filled',
- and `get_outline_color'.
- (troff_output::finish_picture): Use `reset_color'.
- (troff_output::set_fill): Test `last_filled'.
- * src/preproc/pic/pic.man: Updated.
-
- * src/roff/groff/groff.cc (main): Implement `-c' option.
- (synopsis, help): Updated.
- src/roff/groff/groff.man: Updated.
-
- * src/roff/troff/troff.h: Include color.h.
- (warning_type): Add WARN_COLOR.
- * src/roff/troff/env.h (environment): New members
- `{cur,prev}_{glyph,fill}_color'.
- New member functions `get_{prev_,}{glyph,fill}_color'.
- * src/roff/troff/env.cc: Initialize and implement them.
- * src/roff/troff/input.cc: New global variable `disable_color_flag'.
- Replace `NULL' with `0' everywhere for consistency.
- (lookup_color, default_black, do_glyph_color, do_fill_color,
- get_color_element, read_rgb, read_cmy, read_cmyk, read_gray,
- define_color): New functions.
- (token::next): Implement \M and \m escapes.
- (do_if_request): Implement `m' operator.
- (usage): Updated.
- (main): Implement `-c' option.
- (init_markup_requests): Add `defcolor' request.
- (warning_table): Add `color' warning.
- * src/roff/troff/node.h (glyph_color_node, fill_color_node): New
- classes.
- * src/roff/troff/node.cc (troff_output_file): New members
- `current_{page,glyph}color'. New member functions `put_hex',
- `glyph_color', and `fill_color'.
- (glyph_color_node::*, fill_color_node::*): Implement it.
- * src/roff/troff/number.cc (SCALE_INDICATOR_CHARS): Add `f'.
- (parse_term): Add support for `f'.
- * src/roff/troff/troff.man: Updated.
-
- * src/devices/grodvi/dvi.cc (draw_dvi_printer::draw): Add dummy
- entry for `F'.
- * src/devices/grolbp/lbp.cc (lbp_printer::draw): Ditto.
- * src/devices/grolj4/lj4.cc (lj4_printer::draw): Ditto.
-
- * src/devices/grohtml/html-text.h (HTML_TAG): Add COLOR_TAG.
- (tag_definition): Use `void *' for arg1.
- (html_text): New member functions `do_color' and `done_color'.
- Use `void *' for second parameter of `push_para' member function.
- New `push_para' member function with a single parameter.
- Use `char *' for parameter of `issue_table_begin' member funtion.
- New `issue_color_begin' member function.
- * src/devices/grohtml/html-text.cc (html_text::end_tag): Handle
- COLOR_TAG.
- (html_text::issue_color_begin): New function.
- (html_text::issue_table_begin): Use `char *' for parameter.
- (html_text::start_tag, html_text::shutdown,
- html_text::check_emit_text): Updated.
- (html_text::push_para): Use `void *' for second parameter.
- Add same function with only one parameter.
- (html_text::do_*): Updated.
- (html_text::do_color, html_text::done_color): New functions.
- * src/devices/grohtml/post-html.cc (style): New member `col'.
- Mew member `style' with 6 parameters.
- (style::style, style::operator==): Updated.
- (html_printer::do_font): Use it.
- (html_printer::draw): Add dummy entry for `F'.
- (html_printer::set_char): Updated.
- * src/devices/grohtml/grohtml.man: Updated.
-
- * src/devices/grops/ps.cc (ps_output::put_float): Use `%g' to have
- trailing zeroes removed.
- (ps_printer): New members `sbuf_color', `fill_color', and
- `output_color'.
- Removed member `fill'.
- New member function `set_color'.
- (ps_printer::ps_printer, ps_printer::set_char): Updated.
- (ps_printer::flush_sbuf, ps_printer::set_line_thickness,
- ps_printer::fill_path, ps_printer::draw): Use `set_color'.
-
- * tmac/color-html.tmac, tmac/color.tmac: New files.
- * tmac/troffrc: Include them.
- * tmac/www.tmac (URL, FTP, MAILTO): Use blue color.
- * tmac/Makefile.sub: Updated.
-
- * NEWS, doc/groff.texinfo, doc/pic.ms, man/groff_out.man,
- man/groff.man: Updated.
- * font/devps/prologue.ps: Define FC and CO functions.
-
-2001-10-04 Gaius Mulley <gaius@glam.ac.uk>
-
- Fix incorrect cropping of images and incorrect handling of special
- characters. Fix handling of file names in \O.
-
- * src/include/geometry.h: New file.
- * src/libs/libgroff/geometry.cc: New file.
- * src/libs/libdriver/printer.cc (printer::adjust_arc_center): Moved
- to `geometry.cc'.
- * src/roff/troff/input.cc (get_delim_file_name): Fixed problem with
- initial spaces.
- (do_suppress): Updated.
- * src/roff/troff/node.cc: Include geometry.h.
- (troff_output_file::flush_tbuf): Fixed parameters to
- `check_output_limits'.
- (troff_output_file::check_charinfo): Ditto.
- (troff_output_file::determine_line_limits): Add support for `Da'
- and `Dl' commands.
-
- * src/devices/grohtml/post-html.cc (str_translate_to_html):
- Add new parameter `is_special' to decode special characters from
- escape sequences.
- (html_printer::do_title, html_printer::do_heading,
- html_printer::do_indentedparagraph,
- html_printer::translate_to_html, html_printer::special): Updated.
-
-2001-10-03 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (DISTCLEANFILES): Add stamp-h.
- Fix entry for config.h.
- * test-groff (GROFF_BIN_PATH): Add $builddir/roff/groff.
- * tmac/troffrc: Translate nonbreakable space character to `\~'.
- * src/preproc/eqn/eqn.man: Document -d command line option.
-
-2001-09-27 Werner LEMBERG <wl@gnu.org>
-
- * man/groff.man: Use
-
- .ev xxx
- .na
- .nh
- <table>
- .ev
-
- instead of the old code (`.ad .hy' after the table) to suppress
- incorrect hyphenation for grohtml output.
-
-2001-09-22 Werner LEMBERG <wl@gnu.org>
-
- * man/groff_font.man, man/groff_out.man: Minor fixes.
-
-2001-09-20 Werner LEMBERG <wl@gnu.org>
-
- * PROBLEMS: Updated, reordered. Improved EPS section (thanks to
- Arnold Robbins <arnold@skeeve.com>).
-
-2001-09-09 Werner LEMBERG <wl@gnu.org>
-
- * configure: Regenerated with autoconf 2.52.
-
- * doc/groff.texinfo: Complete revision of indices.
-
-2001-09-07 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile (clean): Updated to delete all indices.
-
-2001-09-05 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Remove superfluous line.
-
- * tmac/s.tmac: Enable all warnings only if no -W or -w option is
- given on the command line (or rather, if only the default warnings
- are set).
-
-2001-09-03 Werner LEMBERG <wl@gnu.org>
-
- * man/groff.man, src/preproc/eqn/eqn.man, tmac/groff_mdoc.man: Don't
- use .ne for TTY devices.
-
-2001-08-31 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/token.h, src/roff/troff/input.cc:
- s/TOKEN_TRANSPARENT_ESCAPE/TOKEN_OPAQUE_ESCAPE/.
-
-2001-08-28 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/token.h (token_type): Add TOKEN_TRANSPARENT_ESCAPE.
- * src/roff/troff/input.cc (token::next): Return
- TOKEN_TRANSPARENT_ESCAPE for \f, \H, \R, \s, and \S if not in
- compatibility mode.
- (token::description): Updated.
- (process_input_stack): Reset `bol' for TOKEN_TRANSPARENT_ESCAPE.
- (token::add_to_node_list, token::process): Ignore
- TOKEN_TRANSPARENT_ESCAPE.
-
-2001-08-27 Werner LEMBERG <wl@gnu.org>
-
- * tmac/an-old.tmac: Fix `S' string.
-
-2001-08-26 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Don't use .ne for TTY devices.
-
-2001-08-25 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Replace `\\' with `\e' (and fixing some single
- backslashes).
- Many other minor fixes.
-
- * configure.ac: Add message at end to inform how to compile
- xditview.
- * configure: Regenerated.
-
-2001-08-24 Werner LEMBERG <wl@gnu.org>
-
- * src/include/getopt.h, src/libs/libgroff/{getopt.c, getopt1.c}:
- Updated to latest version of libc.
-
-2001-08-23 Werner LEMBERG <wl@gnu.org>
-
- * configure.ac: Don't create subdirectories before AC_CONFIG_FILES.
- Autoconf 2.50 and newer can handle this.
- * configure: Regenerated.
-
-2001-08-21 Werner LEMBERG <wl@gnu.org>
-
- * doc/pic.ms: Fix typo.
- * src/preproc/tbl/tbl.man: Document case of global options.
-
-2001-08-21 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (html_printer::end_font): Fix
- handling of `CR' font.
-
-2001-08-20 Werner LEMBERG <wl@gnu.org>
-
- Use a config.h file.
-
- * src/include/lib.h: Include config.h.
- * All C files: Ditto (if necessary).
- * All C++ source and header files: Include lib.h first (if
- necessary).
-
- * src/include/config.hin: New file (autogenerated by autoheader).
- * stamp-h.in: New file.
- * configure.ac: Updated.
- * aclocal.m4: Add third parameters to AC_DEFINE macros.
- (GROFF_ARRAY_DELETE): Simplified.
- * Makefile.sub (DISTCLEANFILES): Updated.
- Added targets for remaking config.status, config.hin, config.h,
- stamp-h.in, and stamp-h.
- * configure: Regenerated.
-
-2001-08-19 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Updated.
-
-2001-08-18 Sebastian Krahmer <krahmer@suse.de>
-
- * src/preproc/pic/pic.y (format_number): Use do_sprintf().
- (do_sprintf): Use snprintf().
-
-2001-08-18 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/snprintf/*: Added an snprintf module written by Mark
- Martinec.
- * src/libs/libgroff/Makefile.sub: Updated.
- * configure.ac: Add test for snprintf().
- * Makefile.in: Updated.
- * configure: Regenerated.
-
- * src/preproc/html/pre-html.cc (make_message): Reactivate code which
- uses snprintf().
-
-2001-08-14 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Ex): New implementation.
- * tmac/doc-common, tmac/groff_tmac.man: Updated.
-
-2001-08-13 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/doc.tmac (Rv): Implement support for 0 or more than 1
- argument.
- * tmac/groff_tmac.man: Updated.
-
-2001-08-13 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/tbl/tbl.man: Minor documentation update.
-
-2001-08-13 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * src/libs/libgroff/tmpname.cc: Add prototype for gettimeofday().
- * configure.ac: Add declaration test for gettimeofday().
- * Makefile.in: Document NEED_DECLARATION_GETTIMEOFDAY defines.
- * aclocal.m4: Include sys/time.h for gettimeofday declaration test.
- * configure: Regenerated.
-
-2001-08-11 Werner LEMBERG <wl@gnu.org>
-
- * aclocal.m4 (GROFF_MKSTEMP): Define HAVE_MKSTEMP.
- * configure.ac: Add declaration test for strcasecmp().
- * Makefile.in: Updated.
- * configure: Regenerated.
- * src/include/lib.h [!HAVE_MKSTEMP]: Add prototype for mkstemp() --
- this is necessary because groff's mkstemp.cc is C++.
- Add declaration conditionally for strcasecmp().
-
-2001-08-10 Werner LEMBERG <wl@gnu.org>
-
- Integrated pic2graph, contributed by Eric S. Raymond.
-
- * contrib/pic2graph/{Makefile.sub, pic2graph.sh, pic2graph.man}: New
- files.
- * Makefile.in, NEWS: Updated.
-
- * src/preproc/tbl/tbl.man: Revised.
-
-2001-08-09 Eric S. Raymond <esr@thyrsus.com>
-
- * src/preproc/tbl/tbl.man: Extended to cover all tbl features.
-
-2001-08-09 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/tbl/main.cc (process_data): Fix recognition of .lf
- requests.
-
-2001-08-08 Paul Eggert <eggert@twinsun.com>
-
- * Makefile.sub (configure): Depend on configure.ac, not
- configure.in.
- * INSTALL.gen: Upgrade to autoconf 2.52's INSTALL.
-
-2001-08-07 Werner LEMBERG <wl@gnu.org>
-
- * src/utils/afmtodit/afmtodit.man, src/roff/groff/groff.man: Minor
- fixes.
-
-2001-08-06 Werner LEMBERG <wl@gnu.org>
-
- * src/roff/troff/troff.man: Improve documentation of -E option.
-
-2001-07-28 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/preproc/html/pushbackbuffer.cc (pushBackBuffer::readNumber):
- Simplified.
-
-2001-07-27 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/refer/refer.cc: Undo last change.
- * src/devices/grohtml/post-html.cc: Ditto.
-
-2001-07-26 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/refer/refer.cc: Include `lib.h'.
- * src/devices/grohtml/post-html.cc: Ditto.
-
-2001-07-25 Gaius Mulley <gaius@glam.ac.uk>
-
- * aclocal.m4 (GROFF_PAGE): Add `AC_DEFINE(PAGEA4)'.
- * src/preproc/html/pre-html.cc: Use it for DEFAULT_VERTICAL_OFFSET.
- * Makefile.in: Comment updated.
- * configure: Regenerated.
-
-2001-07-25 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/pic/pic.cc: Removed.
- * src/preproc/pic/pic_tab.h: Removed.
- * src/preproc/refer/label.cc: Removed.
-
- * doc/Makefile (.ms.html): Don't use a file name extension in
- argument to grohtml's -I option.
- * Makefile.in (dist): Remove CVS directories.
- Call `distfiles' target.
-
- * src/devices/grohtml/grohtml.man: Add information about valid
- versions of pnmtopng.
- * src/preproc/html/pre-html.cc (TRANSPARENT): Use `white' as colour
- name instead of number.
-
-2001-07-24 Werner LEMBERG <wl@gnu.org>
-
- * doc/groff.texinfo: Minor fixes.
-
-2001-07-21 Gaius Mulley <gaius@glam.ac.uk>
-
- * doc/Makefile (.ms.html): Put image files into a subdirectory.
- (clean): Updated.
-
-2001-07-20 Werner LEMBERG <wl@gnu.org>
-
- * src/libs/libgroff/tmpname.cc: New file, defining get_tempname().
- * src/libs/libgroff/mkstemp.cc: New file.
- * src/libs/libgroff/mksdir.cc: New file.
- * src/libs/libgroff/tmpfile.cc [HAVE_MKSTEMP_PROTO]: Removed.
- (xtmpfile) [!HAVE_MKSTEMP]: Removed.
- * src/libs/libgroff/Makefile.sub: Updated.
- * src/include/lib.h: Add mksdir() prototype.
- * src/include/posix.h: Define S_IXUSR if not yet defined.
-
- * src/preproc/html/pre-html.cc (MAX_RETRIES): Removed.
- (createAllPages): Use mksdir() instead of current code.
- * src/utils/indxbib/indxbib.cc [HAVE_MKSTEMP_PROTO]: Removed.
- (main): [!HAVE_MKSTEMP]: Removed.
-
- * aclocal.m4 (GROFF_MKSTEMP): Updated to use new mkstemp.cc file.
- (GROFF_INTTYPES_H, GROFF_UNSIGNED_LONG_LONG, GROFF_UINTMAX_T): New
- macros.
- * configure.ac: Add tests for stdint.h, sys/time.h, and
- gettimeofday().
- Call new GROFF_xxx macros.
- * configure: Regenerated.
- * Makefile.in: Comments updated.
-
-2001-07-20 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/preproc/html/pre-html.cc (scanArguments): Use getopt_long()
- instead of current code.
- * src/devices/grohtml/post-html.cc (main): Handle `-d' option.
- * src/roff/groff/groff.cc (possible_command::insert_args): New
- function.
- (main): Use it for predriver handling instead of insert_arg().
-
-2001-07-19 Werner LEMBERG <wl@gnu.org>
-
- * doc/Makefile: Added GROFF_BIN_PATH to make it work with uninstalled
- groff also.
-
- * src/include/posix.h: Define S_IWUSR if not yet defined.
-
-2001-07-18 Werner LEMBERG <wl@gnu.org>
-
- * NEWS: Updated.
-
-2001-07-18 Ruslan Ermilov <ru@FreeBSD.org>
-
- * tmac/groff_mdoc.man: Document new -width and -column syntax.
- Some other minor fixes.
- * tmac/an-old.tmac: Add `AT' and `UC' macros.
-
-2001-07-17 Gaius Mulley <gaius@glam.ac.uk>
-
- Replace call to `troff' with `groff -Z' to make it aware of
- GROFF_BIN_PATH.
-
- * src/preproc/html/pre-html.cc (TROFF_COMMAND): New macro.
- (troff_command, command_prefix): Removed.
- (alterDeviceTo): Use groff.
- (addZ): New function.
- (char_buffer::do_html): Use it.
- (scanArguments): Use TROFF_COMMAND.
- (findPrefix): Removed.
- (main): Updated.
- * src/roff/groff/groff.cc (main): Handle zflag for preprocessors.
-
-2001-07-17 Eric S. Raymond <esr@snark.thyrsus.com>
-
- * doc/pic.ms: Documentation fixes.
-
-2001-07-17 Werner LEMBERG <wl@gnu.org>
-
- Replace atexit() with global destructor.
-
- * src/libs/libgroff/tmpfile.cc (xtmpfile_list): Add constructor.
- (xtmpfile_list_init): New global structure to deallocate
- xtmpfile_list on exit. Its destructor inherits most code from
- remove_tmp_files().
- (remove_tmp_files): Deleted.
- (add_tmp_file): Simplified.
-
-2001-07-16 Werner LEMBERG <wl@gnu.org>
-
- Replace strdup() with strsave().
-
- * src/devices/grolbp/lbp.cc [!HAVE_STRDUP]: Removed.
- (set_papersize): Use strsave() and a_delete.
- (main): Use strsave().
- * src/preproc/html/pre-html.cc (make_message, createAllPages,
- removeAllPages): Use strsave() and a_delete.
-
- * configure.ac: Remove test for strdup.
- * Makefile.in: Comment updated.
- * configure: Regenerated.
-
-2001-07-15 Werner LEMBERG <wl@gnu.org>
-
- * win32-diffs: Updated.
-
-2001-07-14 Werner LEMBERG <wl@gnu.org>
-
- * src/preproc/html/pre-html.cc (makeTempFiles): Activate new code,
- removing the old one.
- * src/utils/indxbib/indxbib.cc (main): Remove compiler warning.
-
-2001-07-14 Ralph Corderoy <ralph@inputplus.demon.co.uk>
-
- * src/libs/libgroff/tmpfile.cc (xtmpfile): Fix guard for `namep'.
-
-2001-07-12 Ruslan Ermilov <ru@FreeBSD.org>
-
- Merge -xwidth into -width. Add -xwidth functionality to -column
- also.
-
- * tmac/doc.tmac (Bl): Add dummy doc-typeXXX and doc-spaceXXX to
- avoid warning.
- (doc-do-Bl-args): Merge -xwidth code with -width. Test whether
- string immediately following a leading dot starts with a valid mdoc
- argument.
- Add similar code to the -column branch.
- (doc-Bl-usage): Updated.
- * groff_mdoc.man: s/-xwidth/-width/.
-
-2001-07-12 Gaius Mulley <gaius@glam.ac.uk>
-
- * src/devices/grohtml/post-html.cc (text_glob::is_br): Stop titles
- running into centered or non-formatted text.
-
-2001-07-11 Werner LEMBERG <wl@gnu.org>
-
- Introduce short and long prefixes to have the selection at run-time
- whether there is a 8+3 limit for names of temporary files.
-
- * src/libs/libgroff/tmpfile.cc (TMPFILE_PREFIX): Replaced with...
- (TMPFILE_PREFIX_SHORT, TMPFILE_PREFIX_LONG): This.
- (tmpfile_prefix, tmpfile_prefix_len, use_short_prefix): New
- variables.
- (temp_init): New global structure to initialize above three
- variables.
- (xtmptemplate): Use two parameters for long and short prefix.
- Simplify code use above three variables.
- (xtmpfile): Use long and short prefixes as parameters.
- * src/include/lib.h: Updated.
-
- * src/preproc/html/pre-html.cc ({PAGE,PS,REGION}_TEMPLATE): Replace
- with ...
- ({PAGE,PS,REGION}_TEMPLATE_{SHORT,LONG}): This.
- (createAllPages, makeTempFiles): Updated.
-
-2001-07-09 Werner LEMBERG <wl@gnu.org>
-
- * REVISION: Increased to 3.
-
-Local Variables:
-version-control: never
-coding: latin-1
-End:
diff --git a/contrib/groff/FDL b/contrib/groff/FDL
deleted file mode 100644
index 4a0fe1c8deeb..000000000000
--- a/contrib/groff/FDL
+++ /dev/null
@@ -1,397 +0,0 @@
- GNU Free Documentation License
- Version 1.2, November 2002
-
-
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The "Document", below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as "you". You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (Thus, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification. Examples of
-transparent image formats include PNG, XCF and JPG. Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".) To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has fewer than five),
- unless they release you from this requirement.
-C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section all
- the substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-N. Do not retitle any existing section to be Entitled "Endorsements"
- or to conflict in title with any Invariant Section.
-O. Preserve any Warranty Disclaimers.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
- Copyright (c) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
diff --git a/contrib/groff/FREEBSD-Xlist b/contrib/groff/FREEBSD-Xlist
deleted file mode 100644
index 4549878106ea..000000000000
--- a/contrib/groff/FREEBSD-Xlist
+++ /dev/null
@@ -1,3 +0,0 @@
-$FreeBSD$
-*/arch
-*/src/libs/snprintf
diff --git a/contrib/groff/FREEBSD-upgrade b/contrib/groff/FREEBSD-upgrade
deleted file mode 100644
index bf4fe11a124c..000000000000
--- a/contrib/groff/FREEBSD-upgrade
+++ /dev/null
@@ -1,31 +0,0 @@
-$FreeBSD$
-
-This directory contains virgin copies of the original distribution files
-on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
-the files in this directory via patches and a cvs commit.
-
-To upgrade to a newer version of groff, when it is available:
- 1. Unpack the new version into an empty directory.
- [Do not make ANY changes to the files.]
-
- 2. Use the command:
- cvs import -m 'Virgin import of FSF groff v<version>' \
- src/contrib/groff FSF v<version>
-
- For example, to do the import of version 1.19.2, I typed:
- cvs import -m 'Virgin import of FSF groff v1.19.2' \
- src/contrib/groff FSF v1_19_2
-
- 3. Follow the instructions printed out in step 2 to resolve any
- conflicts between local FreeBSD changes and the newer version.
-
-Do not, under any circumstances, deviate from this procedure.
-
-To make local changes to groff, simply patch and commit to the main
-branch (aka HEAD). Never make local changes on the FSF branch.
-
-All local changes should be submitted to Werner Lemberg <wl@gnu.org> or
-Ted Harding <ted.harding@nessie.mcc.ac.uk> for inclusion in the next
-vendor release.
-
-ru@FreeBSD.org - 20 October 2005
diff --git a/contrib/groff/INSTALL b/contrib/groff/INSTALL
deleted file mode 100644
index d540e5f0eb48..000000000000
--- a/contrib/groff/INSTALL
+++ /dev/null
@@ -1,50 +0,0 @@
-To install groff, follow the instructions in the file INSTALL.gen.
-
-This file contains information that supplements those instructions.
-
-(For instructions how to build groff with DJGPP tools for MS-DOS and
-MS-Windows, see the file arch/djgpp/README.)
-
-(For instructions how to build groff with the MinGW tools for
-MS-Windows, see the file README.MinGW.)
-
-groff is written in C++, so you will need a C++ compiler. The C++
-source files use a suffix of `.cpp', so your C++ compiler must be able
-to handle this. If you don't already have a C++ compiler, I suggest
-gcc 2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).
-From gcc 2.5, it is no longer necessary to install libg++: the C++
-header files needed by groff are created by the gcc installation
-process. To override configure's choice of C++ compiler, you can set
-the CXX environment variable.
-
-If you have a library that provides a faster malloc than your system's
-usual malloc, it is good idea to include it in LIBS. For example,
-using the malloc that comes with GNU Emacs version 20 can give a
-worthwhile (and sometimes spectacular) performance improvement.
-
-If you want A4 or letter paper format and the configure script produces
-an incorrect guess, say
-
- PAGE=xxx ./configure
-
-where `xxx' should be either `A4' or `letter'. Note that this will only
-affect the paper selection of some device drivers like grops (which can
-be still overridden on the command line). For compatibility with
-ditroff, the default page length in gtroff is always 11 inches. The
-page length can be changed with the `pl' request.
-
-When you have built groff, you can use the test-groff script to try
-groff out on one of the man pages. (Use the .n files not the .man
-files.) The test-groff script sets up environment variables to allow
-groff to run without being installed. For example, you could do
-
- ./test-groff -man -Tascii src/roff/groff/groff.n | less
-
-To get a DVI, PDF, or HTML version of the groff texinfo manual, say `make
-groff.dvi', `make groff.pdf', or `make groff.html', respectively, in the
-`doc' subdirectory (after configuring the groff package). Note that you
-need texinfo version 4.6 as a prerequisite. Neither older versions nor
-texinfo 4.7 (due to a bug) will work.
-
-If you have problems, read the PROBLEMS file. If this doesn't help
-send a bug report using the form in the file BUG-REPORT.
diff --git a/contrib/groff/INSTALL.gen b/contrib/groff/INSTALL.gen
deleted file mode 100644
index 095b1eb40635..000000000000
--- a/contrib/groff/INSTALL.gen
+++ /dev/null
@@ -1,231 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PREFIX'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PREFIX', the package will
-use PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/contrib/groff/LICENSE b/contrib/groff/LICENSE
deleted file mode 100644
index 0f67f4235178..000000000000
--- a/contrib/groff/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-LICENSE
-
-The groff program is a free software project. It is licensed under
-the GNU General Public License (GNU GPL), version 2 or later.
-
-The file COPYING in the top directory of the groff source package
-contains a copy of the GPL that was downloaded from the GNU web site
-http://www.gnu.org/copyleft/gpl.txt at 1 dec 2003.
-
-All files of the groff source package are licensed under this version
-of the GPL (or licenses which are compatible with the GPL).
-You are free to choose version 2 or any subsequent version of the GPL.
-
-The GPL names an address where you can get the actual version by
-normal post. Further information is found in the internet at
-http://www.gnu.org/copyleft.
-
-The groff program is a GNU package, and the copyright of all files of
-the groff source package which are under the GPL has been assigned to
-the Free Sofware Foundation (FSF). Information on GNU and FSF is
-found at http://www.fsf.org/.
diff --git a/contrib/groff/MANIFEST b/contrib/groff/MANIFEST
deleted file mode 100644
index f8d32d0e593f..000000000000
--- a/contrib/groff/MANIFEST
+++ /dev/null
@@ -1,164 +0,0 @@
-MANIFEST
-
-Last update: 26 May 2005
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de>
-maintained by Werner Lemberg <wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-
-########################################################################
-
-This file gives an overview of the directories and the main files of
-the groff source distribution.
-
-
-1) The top directory.
-
- BUG-REPORT A template for bug-reports.
- ChangeLog Log of the changes in the different groff versions.
- COPYING The GNU General Public License (GPL).
- FDL The Free Documentation License (FDL).
- INSTALL Information on compiling and installing groff.
- INSTALL.gen Generic information on configuration and compiling.
- LICENSE Licensing information.
- MANIFEST The file you are reading.
- MORE.STUFF Useful stuff in other packages.
- NEWS Recent user-visible changes in groff.
- PROBLEMS Tips to handle known critical situations.
- PROJECTS Long-term additions to groff.
- README Availability and contact information for groff.
- README.MinGW Build information for MinGW.
- TODO Things planned for future groff versions.
-
- All other files in the top directory are related to the configuration,
- compilation, and install processes.
-
-
-2) The directory structure
-
-./arch Data that is special for different architectures.
- djgpp Data special for the 32-bit DOS compiler djgpp.
- misc Data needed for various platforms.
-
-./contrib Part of groff, but maintained by other people.
- eqn2graph Convert equations created with EQN into different
- graphical formats.
- gdiffmk An improved implementation of the diffmk command to mark
- differences between groff/nroff/troff files.
- grap2graph Convert grap diagraps into different graphical formats.
- groffer A wrapper to conveniently view roff files.
- mm The groff mm macro package.
- mom The groff mom macro package.
- pdfmark A package to add PDF marks to groff documents, together
- with a shell script (pdfroff) for easy creation of PDF
- documents.
- pic2graph Convert PIC diagrams into different graphical formats.
-
-./doc Manuals and tutorials to groff aspects.
-
-./font Device information and fonts.
- devX100 100dpi device for X Window System.
- devX100-12 100dpi device with narrower font (for 12pt base font).
- devX75 75dpi device for X Window System.
- devX75-12 75dpi device with narrower font (for 12pt base font).
- devascii Text device for ASCII output.
- devcp1047 EBCDIC device.
- devdvi TeX DVI device.
- devhtml HTML device.
- devlatin1 Text device for latin-1 (ISO 8859-1) output.
- devlbp Device for Canon CAPSL laser printers.
- devlj4 Device for HP Laserjet 4, PCL 5, and compatible printers.
- devps PostScript device.
- devutf8 Text device for Unicode output.
-
-./man Some groff manual pages of more general character.
-
-./src Everything written in programming languages.
-
-./src/devices The postprocessors.
- grodvi TeX DVI output.
- grohtml HTML output.
- grolbp Canon printers.
- grolj4 HP Laserjet 4, PCL 5, and compatible printers.
- grops PostScript output.
- grotty Text output.
- xditview A groff (pre)viewer for the X Window system.
-
-./src/include The *.h C/C++ include files.
-
-./src/libs C++ code common to several parts of the groff sources.
- libbib Library of bibliographic functions.
- libdriver Parser for intermediate output and postprocessor code.
- libgroff Library for general support functions used everywhere.
- libxutil Utility functions for xditview and xtotroff.
- snprintf An implementation of snprintf() and friends.
-
-./src/preproc Preprocessors.
- eqn Mathematical formulae.
- grn Gremlin pictures.
- html The preprocessor part of grohtml.
- pic Diagram drawer.
- refer Bibliographic references.
- soelim File inclusion using tmac path.
- tbl Tables.
-
-./src/roff Front-end programs.
- groff Wrapper around troff. This is the main user program.
- grog Guess groff command line options.
- nroff Emulate classical nroff text formatter.
- troff Main roff formatter program.
-
-./src/utils Utility programs around groff.
- addftinfo Add information to old troff font files for use with groff.
- afmtodit Create font description files for the PostScript device.
- hpftodit Create font description files for the LJ4 device.
- indxbib Make inverted index for bibliographic databases.
- lkbib Search bibliographic databases.
- lookbib Interactively search bibliographic databases.
- pfbtops Translate a PostScript font in PFB format to PFA.
- tfmtodit Create font description files for TeX DVI device.
- xtotroff Create font description files for xditview.
-
-./tmac Macro files.
-
-
-3) Documentation
-
-The groff documentation is scattered upon several places.
-
-- The main directory contains documents related to the groff source.
- The README file contains the information needed to get the groff
- package, report bugs, and contact the developers.
-
-- The man-page of each program (section 1) is kept in the source
- directory of the program.
-
-- The man-pages for the other sections are found in `src/man'.
-
-- Documentation in other formats are located in the `doc' directory,
- including the groff info file, tutorials, and manuals.
-
-
-4) The roff parser
-
-The parsing of the roff language is done by troff. The input is converted
-to tokens in `src/roff/troff/input.cpp' and transformed into `nodes' by
-`src/roff/troff/env.cpp' and `src/roff/troff/node.cpp'. From these, the
-intermediate output is generated (also in `node.cpp').
-
-
-5) Postprocessing
-
-The parser for the intermediate output and the postprocessing is in
-`src/libs/libdriver/input.cpp'. This is used by all postprocessors.
diff --git a/contrib/groff/MORE.STUFF b/contrib/groff/MORE.STUFF
deleted file mode 100644
index b1c18f744b5d..000000000000
--- a/contrib/groff/MORE.STUFF
+++ /dev/null
@@ -1,198 +0,0 @@
-More stuff for groff
-====================
-
-Windows 32
-----------
-
-Here two ports using the gcc compiler and other GNU tools:
-
-. Cygwin:
-
- http://sources.redhat.com/cygwin/
-
- Look for a convenient mirror site in
-
- http://sources.redhat.com/cygwin/mirrors.html
-
- At any of those mirrors, groff can be found in the directory
- latest/groff.
-
-. Kees Zeelenberg <c.zeelenberg@hccnet.nl>:
-
- http://gnuwin32.sourceforge.net/packages/groffl.htm
-
- This port includes recent versions of grap and deroff.
-
-dos
----
-
-Binaries for Eli Zaretskii's port using the djgpp compiler are available
-from
-
- ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gro*b.zip
-
-and its mirrors; for installation details please read `arch/djgpp/README'.
-This port also runs on Windows 32 systems, except Windows 2000.
-
-grap
-----
-
-An implementation of Kernighan & Bentley's grap language for typesetting
-graphs. Written by Ted Faber <faber@lunabase.org>. The actual version
-can be found at
-
- http://www.lunabase.org/~faber/Vault/software/grap/
-
-A djgpp port which runs on dos and most Windows 32 systems (Windows 95,
-Windows 98, Windows NT) done by Kees Zeelenberg <c.zeelenberg@hccnet.nl>
-is available from
-
- ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2apps/
-
-It is intended to be used with the djgpp port of groff.
-
-A Windows 32 port is included in the groff package available from
-
- http://gnuwin32.sourceforge.net/
-
-plot2dev
---------
-
-This utility program can convert plot graphics to either pic or gremlin
-files. It has been written by Richard Murphey <richard-murphey@rice.edu>
-and Daniel Senderowicz <daniel@synchrods.com> (who has added the gremlin
-driver). The actual version can be found as
-
- ftp://ftp.ffii.org/pub/groff/plot2dev-x.x.tar.gz
-
-troffcvt
---------
-
-From the web page:
-
- troffcvt is a translator that turns troff input into a form that can be
- more easily processed. The troffcvt distribution comes with
- postprocessors that turn troffcvt into various destination formats such
- as HTML (Hypertext Markup Language), RTF (Rich Text Format) or plain
- text.
-
-Note that you need a lot of additional packages to compile troffcvt;
-everything is available from
-
- http://www.primate.wisc.edu/software/troffcvt/
-
-unroff
-------
-
-From the README file:
-
- Unroff is a Scheme-based, programmable, extensible troff translator with
- a back-end for the Hypertext Markup Language. Unroff is free software
- and is distributed both as source and as precompiled binaries.
-
- http://www.informatik.uni-bremen.de/~net/unroff/unroff.html
-
-You need als Elk, the Scheme based Extension Language Kit, which is
-available from
-
- http://www.informatik.uni-bremen.de/~net/elk
-
-deroff
-------
-
-Deroff removes roff constructs from documents for the purpose of indexing,
-spell checking etc.
-
-Michael Haardt's <michael@moria.de> implementation is a little smarter
-than traditional implementations, because it knows about certain -man and
--mm macros. It is able to generate a word list for spell checking tools
-or omit headers for sentence analysis tools. It can further generate
-cpp-style #line lines.
-
- http://www.moria.de/deroff/
-
-Version 1.6 compiled with DJGPP (for MS-DOS and all Windows 32 systems,
-i.e. Windows 95, Windows 98, Windows NT) is available from
-
- ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2apps/
-
-and its mirrors.
-
-A Windows 32 port of version 1.8 is available from
-
- http://gnuwin32.sourceforge.net/
-
-David Frey <dfrey@debian.org> has also written a deroff implementation
-for Debian; it is available from
-
- ftp://ftp.debian.org/debian/pool/main/d/deroff/
-
-miscellaneous
--------------
-
-. Ralph Corderoy's excellent page on troff:
-
- www.troff.org
-
- There are links for virtually everything related to troff.
-
-. Dr. Robert Hermann's groff gems are available from
-
- http://www.eas.slu.edu/People/RBHerrmann/GROFF/index.html
-
- At present there are examples for
-
- o creating business cards
- o using groff to make large format posters for presentations
-
-. Robert Marks's collection of useful macros and scripts is available from
-
- http://www.agsm.edu.au/~bobm/odds+ends/scripts.html
-
- Description:
-
- o `polish': Is a sed (= the Unix stream editor) script that does many
- things to ASCII text. Amongst other things, it breaks lines at new
- sentences, reduces upper-case acronyms by one point size, adds
- diacriticals, changes simple quotes into smart quotes, and makes a few
- simple grammar checks. The best way to see what it does is to run it
- as a sed script file (or files) on a text file and then compare the
- output file with the original.
-
- o `DropCaps' is a troff script which replaces the initial letters of
- paragraphs immediately after H1 and H2 headings with drop-capitals of
- specified point size, and automatically flows the text around the new
- drop cap.
-
- o `AJM Header' is a set of troff macros used in production of the
- Australian Journal of Management. They use the Memorandum Macros (mm)
- of AT&T, and so should be invoked with the UNIX troff -mm flag; they
- should also work with the GNU troff -mm flag.
-
-. Thomas Baruchel <baruchel@libertysurf.fr> has developed Meta-tbl, a tbl
- postprocessor to manipulate table cells (like adding gray shades). The
- latest version can be found at
-
- http://perso.libertysurf.fr/baruchel/
-
-. gpresent, written by Bob Diertens <bobd@science.uva.nl>. From the README
- file:
-
- gpresent is a package for making presentation with groff and acroread.
- It consist of a set of macros to be used with groff and a post-processor
- for manipulating the PostScript output of groff. Without the use of the
- PAUSE macro, it can also be used for making slides.
-
- It is available from
-
- www.science.uva.nl/~bobd/useful/gpresent/
-
-
-documentation
--------------
-
-Many documents related to the original versions of troff, ditroff, pic,
-and others can be accessed from the following web pages:
-
- http://www.cs.bell-labs.com/cm/cs/cstr.html
- http://www.cs.bell-labs.com/cm/cs/papers.html
diff --git a/contrib/groff/Makefile b/contrib/groff/Makefile
deleted file mode 100644
index 2a44c85f69aa..000000000000
--- a/contrib/groff/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-SHELL=/bin/sh
-
-.PHONY: all
-all:
- $(SHELL) configure
- $(MAKE) all
diff --git a/contrib/groff/Makefile.ccpg b/contrib/groff/Makefile.ccpg
deleted file mode 100644
index 3110df248f5f..000000000000
--- a/contrib/groff/Makefile.ccpg
+++ /dev/null
@@ -1,33 +0,0 @@
-# Makefile.ccpg
-MAKEFILEPARTS=\
- $(top_srcdir)/Makefile.comm \
- $(top_builddir)/Makefile.cfg \
- $(srcdir)/Makefile.sub \
- $(top_srcdir)/Makefile.ccpg \
- Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
- $(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
- touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
-
-pure: $(PROG).pure
-
-$(PROG).pure: $(OBJS) $(XLIBS)
- $(PURIFY) $(PURIFYCCFLAGS) \
- $(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(LIBS) $(MLIB)
diff --git a/contrib/groff/Makefile.comm b/contrib/groff/Makefile.comm
deleted file mode 100644
index fc34a5689496..000000000000
--- a/contrib/groff/Makefile.comm
+++ /dev/null
@@ -1,304 +0,0 @@
-# Copyright (C) 1989-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Makefile.comm
-#
-INCLUDES=-I. -I$(srcdir) \
- -I$(top_builddir)/src/include -I$(top_srcdir)/src/include
-ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
-COMPILE.cpp=$(CCC) $(ALL_CCFLAGS) -c
-ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
-COMPILE.c=$(CC) $(ALL_CFLAGS) -c
-LINK.cpp=$(CCC) $(CCFLAGS) $(LDFLAGS)
-LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
-LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.$(LIBEXT)
-LIBBIB=$(top_builddir)/src/libs/libbib/libbib.$(LIBEXT)
-LIBDRIVER=$(top_builddir)/src/libs/libdriver/libdriver.$(LIBEXT)
-LIBXUTIL=$(top_builddir)/src/libs/libxutil/libxutil.$(LIBEXT)
-MLIB=
-XLIBS=
-YTABH=
-YTABC=
-GRAM=
-LIBCLEAN=
-CLEANADD=
-CLEANDIRADD=
-CLEANNOTSRCDIRADD=
-MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
- depend.temp core y.output $(CLEANADD)
-CLEANFILES=$(LIBCLEAN)
-DISTCLEANFILES=TAGS Makefile Makefile.dep
-REALCLEANFILES=$(YTABC) $(YTABH)
-NAMEPREFIX=
-HDRS=
-MANPAGES=$(MAN1) $(MAN5) $(MAN7)
-MANCLEAN=$(MANPAGES)
-fontsubdir=$(fontdir)/dev$(DEV)
-
-all install install_bin install_data TAGS depend distfiles uninstall_sub:
-
-install: prefix_must_exist install_bin install_data
-uninstall: uninstall_sub
-pure:
-
-.PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles
-.PHONY: install install_bin install_data prefix_must_exist
-.PHONY: uninstall uninstall_sub
-.PHONY: pure
-
-prefix_must_exist:
- @test -d $(prefix) \
- || (echo ; \
- echo The prefix directory \`$(prefix)\' doesn\'t exist; \
- echo ; \
- exit 1)
-
-mostlyclean:
- -rm -f $(MOSTLYCLEANFILES)
- -rm -rf $(CLEANDIRADD)
- -@if test `cd $(srcdir); pwd` = `pwd`; then \
- :; \
- else \
- rm -f $(CLEANNOTSRCDIRADD); \
- fi
-
-clean: mostlyclean
- -rm -f $(CLEANFILES)
-
-distclean: clean
- -rm -f $(DISTCLEANFILES)
- -@if test `cd $(srcdir); pwd` = `pwd`; then \
- :; \
- else \
- rm -f $(YTABC) $(YTABH); \
- fi
-
-realclean: distclean
- -rm -f $(REALCLEANFILES)
-
-extraclean: distclean
- -rm -f \#* *~ =* core junk grot old temp tmp tem *.new *.old *.orig
-
-.SUFFIXES:
-.SUFFIXES: .o .obj .cpp .c .y .man .n
-
-.cpp.o:
- $(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.o:
- $(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.cpp.obj:
- $(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.obj:
- $(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.y.cpp:
- if test -n "$(YTABH)"; then \
- $(YACC) $(YACCFLAGS) -d $<; \
- else \
- $(YACC) $(YACCFLAGS) $<; \
- fi
- -test -f y.tab.h && mv y.tab.h y_tab.h
- -test -f y.tab.c && mv y.tab.c y_tab.c
- mv y_tab.c $(YTABC)
- test -z "$(YTABH)" || mv y_tab.h $(YTABH)
-
-# The next rule is needed for make of Solaris 2.5.1 to override its
-# built-in .y.o rule (which takes precedence over the .y.cpp rule above).
-.y.o:
- if test -n "$(YTABH)"; then \
- $(YACC) $(YACCFLAGS) -d $<; \
- else \
- $(YACC) $(YACCFLAGS) $<; \
- fi
- -test -f y.tab.h && mv y.tab.h y_tab.h
- -test -f y.tab.c && mv y.tab.c y_tab.c
- mv y_tab.c $(YTABC)
- test -z "$(YTABH)" || mv y_tab.h $(YTABH)
- $(COMPILE.cpp) $(EXTRA_CCFLAGS) $(YTABC)
-
-.man.n:
- @echo Making $@ from $<
- @-rm -f $@
- @sed -e "s|@BINDIR@|$(bindir)|g" \
- -e "s|@FONTDIR@|$(fontdir)|g" \
- -e "s|@LOCALFONTDIR@|$(localfontdir)|g" \
- -e "s|@LEGACYFONTDIR@|$(legacyfontdir)|g" \
- -e "s|@MACRODIR@|$(tmacdir)|g" \
- -e "s|@SYSTEMMACRODIR@|$(systemtmacdir)|g" \
- -e "s|@LOCALMACRODIR@|$(localtmacdir)|g" \
- -e "s|@DOCDIR@|$(docdir)|g" \
- -e "s|@EXAMPLEDIR@|$(exampledir)|g" \
- -e "s|@HTMLDOCDIR@|$(htmldocdir)|g" \
- -e "s|@PDFDOCDIR@|$(pdfdocdir)|g" \
- -e "s|@DEVICE@|$(DEVICE)|g" \
- -e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
- -e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
- -e "s|@INDEX_SUFFIX@|$(indexext)|g" \
- -e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
- -e "s|@MAN1EXT@|$(man1ext)|g" \
- -e "s|@MAN5EXT@|$(man5ext)|g" \
- -e "s|@MAN7EXT@|$(man7ext)|g" \
- -e "s|@TMAC_S_PREFIX@|$(tmac_s_prefix)|g" \
- -e "s|@TMAC_M_PREFIX@|$(tmac_m_prefix)|g" \
- -e "s|@TMAC_AN_PREFIX@|$(tmac_an_prefix)|g" \
- -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
- -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
- -e "s|@VERSION@|$(version)$(revision)|g" \
- -e "s|@MDATE@|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
- -e "s|@g@|$(g)|g" \
- -e "s!@G@!`echo $(g) | tr [a-z] [A-Z]`!g" \
- $< >$@
-
-.PHONY: install_man
-install_man:
- -test -d $(manroot) || $(mkinstalldirs) $(manroot)
- -test -d $(man1dir) || $(mkinstalldirs) $(man1dir)
- @-pages="$(MAN1)"; \
- for p in $$pages; do \
- prog=`basename $$p .n`; \
- target=$(man1dir)/$(NAMEPREFIX)$$prog.$(man1ext); \
- rm -f $$target; \
- echo $(INSTALL_DATA) $$p $$target; \
- $(INSTALL_DATA) $$p $$target; \
- done
- -test -d $(man5dir) || $(mkinstalldirs) $(man5dir)
- @-pages="$(MAN5)"; \
- for p in $$pages; do \
- target=$(man5dir)/`basename $$p .n`.$(man5ext); \
- rm -f $$target; \
- echo $(INSTALL_DATA) $$p $$target; \
- $(INSTALL_DATA) $$p $$target; \
- done
- -test -d $(man7dir) || $(mkinstalldirs) $(man7dir)
- @-pages="$(MAN7)"; \
- for p in $$pages; do \
- target=$(man7dir)/`basename $$p .n`.$(man7ext); \
- rm -f $$target; \
- echo $(INSTALL_DATA) $$p $$target; \
- $(INSTALL_DATA) $$p $$target; \
- done
-
-.PHONY: uninstall_man
-uninstall_man:
- @-pages="$(MAN1)"; \
- for p in $$pages; do \
- target=$(man1dir)/$(NAMEPREFIX)`basename $$p .n`.$(man1ext); \
- echo rm -f $$target; \
- rm -f $$target; \
- done
- @-pages="$(MAN5)"; \
- for p in $$pages; do \
- target=$(man5dir)/`basename $$p .n`.$(man5ext); \
- echo rm -f $$target; \
- rm -f $$target; \
- done
- @-pages="$(MAN7)"; \
- for p in $$pages; do \
- target=$(man7dir)/`basename $$p .n`.$(man7ext); \
- echo rm -f $$target; \
- rm -f $$target; \
- done
-
-.PHONY: install_prog
-install_prog:
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- rm -f $(bindir)/$(NAMEPREFIX)$(PROG)
- $(INSTALL_PROGRAM) $(PROG) $(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: uninstall_prog
-uninstall_prog:
- -rm -f $(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: install_dev
-install_dev:
- -test -d $(datadir) || $(mkinstalldirs) $(datadir)
- -test -d $(dataprogramdir) || $(mkinstalldirs) $(dataprogramdir)
- -test -d $(datasubdir) || $(mkinstalldirs) $(datasubdir)
- -test -d $(fontdir) || $(mkinstalldirs) $(fontdir)
- -test -d $(fontsubdir) || $(mkinstalldirs) $(fontsubdir)
- -if test -d $(srcdir)/generate; then \
- test -d $(fontsubdir)/generate \
- || $(mkinstalldirs) $(fontsubdir)/generate; \
- fi
- -test -z "$(DEVFILES)" \
- || for f in ""$(DEVFILES); do \
- rm -f $(fontsubdir)/$$f; \
- if test -f $$f; then \
- $(INSTALL_DATA) $$f $(fontsubdir)/$$f; \
- else \
- $(INSTALL_DATA) $(srcdir)/$$f $(fontsubdir)/$$f; \
- fi; \
- done
- -test -z "$(DEVSCRIPTS)" \
- || for f in ""$(DEVSCRIPTS); do \
- rm -f $(fontsubdir)/$$f; \
- if test -f $$f; then \
- $(INSTALL_SCRIPT) $$f $(fontsubdir)/$$f; \
- else \
- $(INSTALL_SCRIPT) $(srcdir)/$$f $(fontsubdir)/$$f; \
- fi; \
- done
-
-.PHONY: uninstall_dev
-uninstall_dev:
- -test -z "$(DEVFILES)$(DEVSCRIPTS)" \
- || for f in ""$(DEVFILES) $(DEVSCRIPTS); do \
- rm -f $(fontsubdir)/$$f; \
- done
- -test -d $(fontsubdir)/generate && rmdir $(fontsubdir)/generate
- -rmdir $(fontsubdir)
-
-.PHONY: depend_src
-depend_src: depend.temp
- mv depend.temp Makefile.dep
-
-depend.temp: FORCE
- > depend.temp;
- if test -f "$(srcdir)/$(YTABC)"; then \
- ytabc="$(srcdir)/$(YTABC)"; \
- else \
- ytabc="$(YTABC)"; \
- fi; \
- test -z "$(CCSRCS)$(YTABC)" \
- || $(CCC) $(ALL_CCFLAGS) -MM $(CCSRCS) $$ytabc >>depend.temp
- test -z "$(CSRCS)" \
- || $(CC) $(ALL_CFLAGS) -MM $(CSRCS) >>depend.temp
- test -z "$(YTABH)" \
- || (sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend1.temp; \
- mv depend1.temp depend.temp)
-
-.PHONY: TAGS_src
-TAGS_src:
- $(ETAGS) $(ETAGSFLAGS) $(CCSRCS) $(CSRCS)
- test -z "$(GRAM)$(HDRS)" \
- || $(ETAGS) $(ETAGSFLAGS) -a $(ETAGSCCFLAG) $(GRAM) $(HDRS)
-
-# This rule is only considered for the subdir_Makefile target.
-Makefile:
- -rm -f Makefile
- echo srcdir=$(srcdir) >>Makefile
- echo VPATH=$(VPATH) >>Makefile
- cat $(MAKEFILEPARTS) /dev/null >>Makefile
-
-FORCE:
-
-.NOEXPORT:
diff --git a/contrib/groff/Makefile.cpg b/contrib/groff/Makefile.cpg
deleted file mode 100644
index 1a6974ad5a83..000000000000
--- a/contrib/groff/Makefile.cpg
+++ /dev/null
@@ -1,27 +0,0 @@
-# Makefile.cpg
-MAKEFILEPARTS=\
- $(top_srcdir)/Makefile.comm \
- $(top_builddir)/Makefile.cfg \
- $(srcdir)/Makefile.sub \
- $(top_srcdir)/Makefile.cpg \
- Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
- $(LINK.c) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
- touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/Makefile.dev b/contrib/groff/Makefile.dev
deleted file mode 100644
index 6c70fff68107..000000000000
--- a/contrib/groff/Makefile.dev
+++ /dev/null
@@ -1,4 +0,0 @@
-all: $(DEVFILES) $(DEVSCRIPTS)
-install_data: install_dev
-uninstall_sub: uninstall_dev
-install_dev: $(DEVFILES) $(DEVSCRIPTS)
diff --git a/contrib/groff/Makefile.in b/contrib/groff/Makefile.in
deleted file mode 100644
index 26d55dee11bd..000000000000
--- a/contrib/groff/Makefile.in
+++ /dev/null
@@ -1,776 +0,0 @@
-# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-SHELL=@SHELL@
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
-
-# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
-# is to be used in runtime PATHs compiled into groff executables.
-RT_SEP=@GROFF_PATH_SEPARATOR@
-
-# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
-# scripts and makefile rules; it may be the same as `RT_SEP', but,
-# particularly in some Microsoft environments, it may differ.
-SH_SEP=@PATH_SEPARATOR@
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-# Define `page' to be letter if your PostScript printer uses 8.5x11
-# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
-# world).
-PAGE=@PAGE@
-
-# The name of the ghostscript program. Normally, gs, on GNU/Linux
-# but it might be different on MS-DOS/MS-WIN32 systems.
-GHOSTSCRIPT=@GHOSTSCRIPT@
-
-# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
-# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
-ALT_GHOSTSCRIPT_PROGS=@ALT_GHOSTSCRIPT_PROGS@
-
-# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
-# which can be tried at run time, to identify the awk program.
-ALT_AWK_PROGS=@ALT_AWK_PROGS@
-
-# Normally the Postscript driver, grops, produces output that conforms
-# to version 3.0 of the Adobe Document Structuring Conventions.
-# Unfortunately some spoolers and previewers can't handle such output.
-# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
-# make its output acceptable to such programs. This variable controls
-# only the default behaviour of grops; the behaviour can be changed at
-# runtime by the grops -b option (and so by groff -P-b).
-# Use a value of 0 if your spoolers and previewers are able to handle
-# conforming PostScript correctly.
-# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
-# this is needed for early versions of TranScript that get confused by
-# anything between the %%EndProlog line and the first %%Page: comment.
-# Add 2 if lines in included files beginning with %! should be
-# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
-# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
-# stripped out of included files; this is needed for spoolers that
-# don't understand the %%{Begin,End}Document comments. I suspect this
-# includes early versions of TranScript.
-# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
-# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
-# with a printer that requires page reversal.
-BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
-
-# `DEVICE' is the default device.
-DEVICE=ps
-
-# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
-XDEVDIRS=@XDEVDIRS@
-
-# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
-XPROGDIRS=@XPROGDIRS@
-
-# `XLIBDIRS' is either `src/libs/libxutil' or empty.
-XLIBDIRS=@XLIBDIRS@
-
-# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
-# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
-TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
-
-# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
-# empty (for EBCDIC).
-OTHERDEVDIRS=@OTHERDEVDIRS@
-
-# `PSPRINT' is the command to use for printing a PostScript file,
-# for example `lpr'.
-PSPRINT=@PSPRINT@
-
-# `DVIPRINT' is the command to use for printing a TeX dvi file,
-# for example `lpr -d'.
-DVIPRINT=@DVIPRINT@
-
-# Prefix for names of programs that have Unix counterparts.
-# For example, if `g' is `g' then troff will be installed as
-# gtroff. This doesn't affect programs like grops or groff that have
-# no Unix counterparts. Note that the groff versions of eqn and tbl
-# will not work with Unix troff.
-g=@g@
-
-# Common prefix for installation directories.
-# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
-# This must already exist when you do make install.
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-# `bindir' says where to install executables.
-bindir=@bindir@
-
-# `libdir' says where to install platform-dependent data.
-libdir=@libdir@
-libprogramdir=$(libdir)/groff
-
-# `datasubdir' says where to install platform-independent data files.
-datadir=@datadir@
-dataprogramdir=$(datadir)/groff
-datasubdir=$(dataprogramdir)/$(version)$(revision)
-
-# `infodir' says where to install info files.
-infodir=@infodir@
-
-# `docdir' says where to install documentation files.
-docdir=$(datadir)/doc/groff/$(version)$(revision)
-
-# `exampledir' says where to install example files.
-exampledir=$(docdir)/examples
-
-# `htmldocdir' says where to install documentation in HTML format.
-htmldocdir=$(docdir)/html
-
-# `pdfdocdir' says where to install documentation in PDF format.
-pdfdocdir=$(docdir)/pdf
-
-# `fontdir' says where to install dev*/*.
-fontdir=$(datasubdir)/font
-
-# `localfontdir' says where local fonts will be installed (as dev*/*).
-localfontdir=$(dataprogramdir)/site-font
-
-# `legacyfontdir' is for compatibility with non-GNU troff.
-legacyfontdir=/usr/lib/font
-
-# `fontpath' says where to look for dev*/*.
-fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
-
-# `tmacdir' says where to install macros.
-tmacdir=$(datasubdir)/tmac
-
-# `systemtmacdir' says where to install platform-dependent macros.
-systemtmacdir=$(libprogramdir)/site-tmac
-
-# `localtmacdir' says where local files will be installed.
-localtmacdir=$(dataprogramdir)/site-tmac
-
-# `appresdir' says where to install the application resource file for
-# gxditview.
-appresdir=@appresdir@
-
-# `tmacpath' says where to look for macro files.
-# The current directory will be prepended in unsafe mode only; the home
-# directory will be always added.
-# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
-# current nor in the home directory.
-tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
-
-# `sys_tmac_prefix' is prefix (if any) for system macro packages.
-sys_tmac_prefix=@sys_tmac_prefix@
-
-# `pnmtops_nosetpage' is the command to be run to generate an eps
-# file. Some versions of pnmtops provide the -nosetpage option.
-# We detect this and use it if present.
-pnmtops_nosetpage=@pnmtops_nosetpage@
-
-# `tmac_wrap' is list of system macro packages that should be made
-# available to groff by creating a corresponding macro package
-# in the groff macro directory that references the system macro
-# package.
-tmac_wrap=@tmac_wrap@
-
-# If there is a groff version of a macro package listed in $(tmac_wrap),
-# then the groff version will be installed with a prefix of this.
-# Don't make this empty.
-tmac_prefix=g
-
-# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
-tmac_m_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
-# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
-tmac_s_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
-# The groff -man macros will be available as -m$(tmac_an_prefix)an.
-tmac_an_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
-
-# Extension to be used for refer index files. Index files are not
-# sharable between different architectures, so you might want to use
-# different suffixes for different architectures. Choose an extension
-# that doesn't conflict with refer or any other indexing program.
-indexext=.i
-
-# Directory containing the default index for refer.
-indexdir=/usr/dict/papers
-
-# The filename (without suffix) of the default index for refer.
-indexname=Ind
-
-# common_words_file is a file containing a list of common words.
-# If your system provides /usr/lib/eign it will be copied onto this,
-# otherwise the supplied eign file will be used.
-common_words_file=$(datasubdir)/eign
-
-# `manroot' is the root of the man page directory tree.
-mandir=@mandir@
-manroot=$(mandir)
-
-# `man1ext' is the man section for user commands.
-man1ext=1
-man1dir=$(manroot)/man$(man1ext)
-
-# `man5ext' is the man section for file formats.
-man5ext=5
-man5dir=$(manroot)/man$(man5ext)
-
-# `man7ext' is the man section for macros.
-man7ext=7
-man7dir=$(manroot)/man$(man7ext)
-
-# The configure script checks whether all necessary utility programs for
-# grohtml are available -- only then we can build the HTML documentation.
-make_html=@make_html@
-make_install_html=@make_install_html@
-
-# The configure script also checks whether all necessary utility programs
-# for pdfroff are available -- only then we can build PDF documentation.
-make_pdfdoc=@make_pdfdoc@
-make_install_pdfdoc=@make_install_pdfdoc@
-
-# DEFINES should include the following:
-# -DHAVE_MMAP if you have mmap() and <sys/mman.h>
-# -DARRAY_DELETE_NEEDS_SIZE if your C++ doesn't understand `delete []'
-# -DSYS_SIGLIST_DECLARED if you have sys_siglist[]
-# -DWCOREFLAG=0200 if the 0200 bit of the status returned by
-# wait() indicates whether a core image was
-# produced for a process that was terminated
-# by a signal
-#
-# -DHAVE_DIRENT_H if you have <dirent.h>
-# -DHAVE_LIMITS_H if you have <limits.h>
-# -DHAVE_CC_LIMITS_H if you have a C++ <limits.h>
-# -DHAVE_MATH_H if you have <math.h>
-# -DHAVE_CC_OSFCN_H if you have a C++ <osfcn.h>
-# -DHAVE_CC_INTTYPES_H if you have a C++ <inttypes.h>
-# -DHAVE_STDLIB_H if you have <stdlib.h>
-# -DHAVE_STRING_H if you have <string.h>
-# -DHAVE_STRINGS_H if you have <strings.h>
-# -DHAVE_SYS_DIR_H if you have <sys/dir.h>
-# -DHAVE_SYS_TIME_H if you have <sys/time.h>
-# -DHAVE_UNISTD_H if you have <unistd.h>
-#
-# -DHAVE_FMOD if you have fmod()
-# -DHAVE_GETCWD if you have getcwd()
-# -DHAVE_GETTIMEOFDAY if you have gettimeofday()
-# -DHAVE_ISATTY if you have isatty()
-# -DHAVE_KILL if you have kill()
-# -DHAVE_MKSTEMP if you have mkstemp()
-# -DHAVE_MMAP if you have mmap()
-# -DHAVE_PUTENV if you have putenv()
-# -DHAVE_RENAME if you have rename()
-# -DHAVE_SETLOCALE if you have setlocale()
-# -DHAVE_SNPRINTF if you have snprintf()
-# -DHAVE_STRCASECMP if you have strcasecmp()
-# -DHAVE_STRNCASECMP if you have strncasecmp()
-# -DHAVE_STRERROR if you have strerror()
-# -DHAVE_STRSEP if you have strsep()
-# -DHAVE_STRTOL if you have strtol()
-# -DHAVE_VSNPRINTF if you have vsnprintf()
-#
-# -DNEED_DECLARATION_GETTIMEOFTODAY
-# if your C++ <sys/time.h> doesn't declare
-# gettimeofday()
-# -DNEED_DECLARATION_HYPOT if your C++ <math.h> doesn't declare hypot()
-# -DNEED_DECLARATION_PCLOSE if your C++ <stdio.h> doesn't declare pclose()
-# -DNEED_DECLARATION_POPEN if your C++ <stdio.h> doesn't declare popen()
-# -DNEED_DECLARATION_PUTENV if your C++ <stdlib.h> doesn't declare
-# putenv()
-# -DNEED_DECLARATION_RAND if your C++ <stdlib.h> doesn't declare rand()
-# -DNEED_DECLARATION_SNPRINTF if your C++ <stdio.h> doesn't declare
-# snprintf()
-# -DNEED_DECLARATION_SRAND if your C++ <stdlib.h> doesn't declare srand()
-# -DNEED_DECLARATION_STRCASECMP if your C++ <string.h> doesn't declare
-# strcasecmp()
-# -DNEED_DECLARATION_STRNCASECMP
-# if your C++ <string.h> doesn't declare
-# strncasecmp()
-# -DNEED_DECLARATION_VFPRINTF if your C++ <stdio.h> doesn't declare
-# vfprintf()
-# -DNEED_DECLARATION_VSNPRINTF if your C++ <stdio.h> doesn't declare
-# vsnprintf()
-#
-# -DRET_TYPE_SRAND_IS_VOID if srand() returns void not int
-# -DHAVE_SYS_NERR if you have sysnerr in <errno.h> or <stdio.h>
-# -DHAVE_SYS_ERRLIST if you have sys_errlist in <errno.h> or
-# <stdio.h>
-# -DTRADITIONAL_CPP if your C++ compiler uses a traditional
-# (Reiser) preprocessor
-# -DLONG_FOR_TIME_T if localtime() takes a long * not a time_t *
-# -DHAVE_STRUCT_EXCEPTION if <math.h> defines struct exception
-# -DRETSIGTYPE=int if signal handlers return int not void
-# -DIS_EBCDIC_HOST if the host's encoding is EBCDIC
-# -DPAGE=A4 if the the printer's page size is A4
-# -DGHOSTSCRIPT=gs the name (and directory if required) of the
-# ghostscript program
-DEFINES=@DEFS@
-
-# Include
-#
-# {fmod,getcwd,mkstemp,putenv,snprintf,strcasecmp,
-# strerror,strncasecmp,strtol}.$(OBJEXT)
-#
-# in LIBOBJS if your C library is missing the corresponding function.
-# vsnprintf is defined in the snprintf.$(OBJEXT) module.
-LIBOBJS=@LIBOBJS@
-
-# `CCC' is the compiler for C++ (.cpp) files.
-CCC=@CXX@
-CC=@CC@
-# CCDEFINES are definitions for C++ compilations.
-CCDEFINES=$(DEFINES)
-# CDEFINES are definitions for C compilations.
-CDEFINES=$(DEFINES)
-
-CCFLAGS=@CXXFLAGS@
-CFLAGS=@CFLAGS@
-CPPFLAGS=@CPPFLAGS@
-LDFLAGS=@LDFLAGS@
-
-X_CFLAGS=@X_CFLAGS@
-X_LIBS=@X_LIBS@
-X_EXTRA_LIBS=@X_EXTRA_LIBS@
-X_PRE_LIBS=@X_PRE_LIBS@
-
-YACC=@YACC@
-YACCFLAGS=-v
-
-EXEEXT=@EXEEXT@
-OBJEXT=@OBJEXT@
-# a simple heuristic assumption
-LIBEXT=`case $(OBJEXT) in obj) echo lib;; *) echo a;; esac`
-LIBS=@LIBS@
-LIBM=@LIBM@
-RANLIB=@RANLIB@
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_SCRIPT=@INSTALL_SCRIPT@
-INSTALL_DATA=@INSTALL_DATA@
-INSTALL_INFO=@INSTALL_INFO@
-LN_S=@LN_S@
-AR=ar
-ETAGS=etags
-ETAGSFLAGS=
-# Flag that tells etags to assume C++.
-ETAGSCCFLAG=-C
-# Full path to perl.
-PERLPATH=@PERLPATH@
-# Sed command with which to edit sh scripts.
-SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
-# Sed script to deal with OS dependencies in sh scripts.
-SH_DEPS_SED_SCRIPT=$(top_builddir)/arch/misc/shdeps.sed
-
-# The program to create directory hierarchies.
-mkinstalldirs= $(SHELL) $(top_srcdir)/mkinstalldirs
-
-PURIFY=purify
-PURIFYCCFLAGS=
-#PURIFYCCFLAGS=-g++=yes \
-# -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
-
-# Passing down MAKEOVERRIDES prevents $(MAKE) from containing a second
-# copy of $(MDEFINES) when making individual directories; this could
-# cause the argument list to become too long on some systems.
-MDEFINES= \
- "ALT_AWK_PROGS=$(ALT_AWK_PROGS)" \
- "ALT_GHOSTSCRIPT_PROGS=$(ALT_GHOSTSCRIPT_PROGS)" \
- "AR=$(AR)" \
- "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
- "CC=$(CC)" \
- "CCC=$(CCC)" \
- "CCDEFINES=$(CCDEFINES)" \
- "CCFLAGS=$(CCFLAGS)" \
- "CDEFINES=$(CDEFINES)" \
- "CFLAGS=$(CFLAGS)" \
- "CPPFLAGS=$(CPPFLAGS)" \
- "DEVICE=$(DEVICE)" \
- "DVIPRINT=$(DVIPRINT)" \
- "ETAGS=$(ETAGS)" \
- "ETAGSCCFLAG=$(ETAGSCCFLAG)" \
- "ETAGSFLAGS=$(ETAGSFLAGS)" \
- "EXEEXT=$(EXEEXT)" \
- "INSTALL_DATA=$(INSTALL_DATA)" \
- "INSTALL_INFO=$(INSTALL_INFO)" \
- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
- "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
- "LDFLAGS=$(LDFLAGS)" \
- "LIBEXT=$(LIBEXT)" \
- "LIBM=$(LIBM)" \
- "LIBOBJS=$(LIBOBJS)" \
- "LIBS=$(LIBS)" \
- "MAKEOVERRIDES=$(MAKEOVERRIDES)" \
- "OBJEXT=$(OBJEXT)" \
- "OTHERDEVDIRS=$(OTHERDEVDIRS)" \
- "PAGE=$(PAGE)" \
- "GHOSTSCRIPT=$(GHOSTSCRIPT)" \
- "PERLPATH=$(PERLPATH)" \
- "PSPRINT=$(PSPRINT)" \
- "PURIFY=$(PURIFY)" \
- "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \
- "RANLIB=$(RANLIB)" \
- "RT_SEP=$(RT_SEP)" \
- "SH_SEP=$(SH_SEP)" \
- "SHELL=$(SHELL)" \
- "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
- "SH_DEPS_SED_SCRIPT=$(SH_DEPS_SED_SCRIPT)" \
- "TTYDEVDIRS=$(TTYDEVDIRS)" \
- "XDEVDIRS=$(XDEVDIRS)" \
- "XLIBDIRS=$(XLIBDIRS)" \
- "XPROGDIRS=$(XPROGDIRS)" \
- "X_CFLAGS=$(X_CFLAGS)" \
- "X_LIBS=$(X_LIBS)" \
- "X_EXTRA_LIBS=$(X_EXTRA_LIBS)" \
- "X_PRE_LIBS=$(X_PRE_LIBS)" \
- "YACC=$(YACC)" \
- "YACCFLAGS=$(YACCFLAGS)" \
- "appresdir=$(appresdir)" \
- "bindir=$(bindir)" \
- "common_words_file=$(common_words_file)" \
- "datadir=$(datadir)" \
- "dataprogramdir=$(dataprogramdir)" \
- "datasubdir=$(datasubdir)" \
- "docdir=$(docdir)" \
- "exampledir=$(exampledir)" \
- "exec_prefix=$(exec_prefix)" \
- "fontdir=$(fontdir)" \
- "fontpath=$(fontpath)" \
- "g=$(g)" \
- "htmldocdir=$(htmldocdir)" \
- "pdfdocdir=$(pdfdocdir)" \
- "indexdir=$(indexdir)" \
- "indexext=$(indexext)" \
- "indexname=$(indexname)" \
- "infodir=$(infodir)" \
- "legacyfontdir=$(legacyfontdir)" \
- "libdir=$(libdir)" \
- "libprogramdir=$(libprogramdir)" \
- "localfontdir=$(localfontdir)" \
- "localtmacdir=$(localtmacdir)" \
- "make_html=$(make_html)" \
- "make_install_html=$(make_install_html)" \
- "make_pdfdoc=$(make_pdfdoc)" \
- "make_install_pdfdoc=$(make_install_pdfdoc)" \
- "man1dir=$(man1dir)" \
- "man1ext=$(man1ext)" \
- "man5dir=$(man5dir)" \
- "man5ext=$(man5ext)" \
- "man7dir=$(man7dir)" \
- "man7ext=$(man7ext)" \
- "manroot=$(manroot)" \
- "mkinstalldirs=$(mkinstalldirs)" \
- "prefix=$(prefix)" \
- "revision=$(revision)" \
- "sys_tmac_prefix=$(sys_tmac_prefix)" \
- "pnmtops_nosetpage=$(pnmtops_nosetpage)" \
- "systemtmacdir=$(systemtmacdir)" \
- "tmac_an_prefix=$(tmac_an_prefix)" \
- "tmac_m_prefix=$(tmac_m_prefix)" \
- "tmac_s_prefix=$(tmac_s_prefix)" \
- "tmac_wrap=$(tmac_wrap)" \
- "tmacdir=$(tmacdir)" \
- "tmacpath=$(tmacpath)" \
- "top_builddir=$(top_builddir)" \
- "top_srcdir=$(top_srcdir)" \
- "version=$(version)"
-
-INCDIRS=src/include
-LIBDIRS=\
- src/libs/libgroff \
- src/libs/libdriver \
- src/libs/libbib \
- $(XLIBDIRS)
-CCPROGDIRS=\
- src/roff/groff \
- src/roff/troff \
- src/preproc/tbl \
- src/preproc/pic \
- src/preproc/eqn \
- src/preproc/grn \
- src/preproc/refer \
- src/preproc/soelim \
- src/preproc/html \
- src/devices/grops \
- src/devices/grotty \
- src/devices/grodvi \
- src/devices/grolj4 \
- src/devices/grohtml \
- src/devices/grolbp \
- src/utils/tfmtodit \
- src/utils/hpftodit \
- src/utils/lookbib \
- src/utils/indxbib \
- src/utils/lkbib \
- src/utils/addftinfo
-CPROGDIRS=\
- src/utils/pfbtops \
- $(XPROGDIRS)
-PROGDEPDIRS=arch/misc
-PROGDIRS=$(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS)
-DEVDIRS=\
- font/devps \
- font/devdvi \
- font/devhtml
-ALLTTYDEVDIRS=\
- font/devascii \
- font/devlatin1 \
- font/devutf8 \
- font/devcp1047
-# `doc' must be processed before `contrib/pdfmark'.
-OTHERDIRS=\
- man \
- tmac \
- src/utils/afmtodit \
- src/roff/grog \
- src/roff/nroff \
- doc \
- contrib/mm \
- contrib/pic2graph \
- contrib/eqn2graph \
- contrib/grap2graph \
- contrib/groffer \
- contrib/mom \
- contrib/pdfmark \
- contrib/gdiffmk
-ALLDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
- $(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS) $(OTHERDIRS)
-EXTRADIRS=\
- font/devps/generate \
- font/devdvi/generate \
- font/devlj4/generate \
- doc
-NOMAKEDIRS=\
- arch/djgpp \
- contrib/mm/examples \
- contrib/mm/mm \
- contrib/mom/examples \
- contrib/mom/momdoc \
- contrib/gdiffmk/tests \
- src/libs/snprintf
-DISTDIRS=\
- $(INCDIRS) $(LIBDIRS) $(PROGDIRS) $(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) \
- $(ALLTTYDEVDIRS) $(OTHERDIRS) $(EXTRADIRS) $(NOMAKEDIRS)
-TARGETS=all install install_bin install_data clean distclean mostlyclean \
- realclean extraclean distfiles TAGS depend uninstall_sub
-
-# This ENVSETUP gork is required by the DJGPP build on Windows 9X,
-# where Make needs to be case-sensitive to find files like BI and VERSION.
-ENVSETUP=\
- if test -f $(srcdir)/makefile.ccpg* && \
- test -f $(srcdir)/Makefile.ccpg*; then \
- FNCASE=y; export FNCASE; \
- else :; \
- fi
-
-do=all
-dodirs=$(ALLDIRS) dot
-# Default target for subdir_Makefile
-subdir=src/roff/troff
-
-
-$(TARGETS):
- @$(ENVSETUP); $(MAKE) $(MDEFINES) do=$@ $(dodirs)
-
-dot: FORCE
- @$(ENVSETUP); \
- $(MAKE) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
- -f $(top_srcdir)/Makefile.comm \
- -f $(top_srcdir)/Makefile.sub $(do)
-
-$(LIBDIRS): FORCE
- @$(ENVSETUP); \
- if test $(srcdir) = .; then \
- srcdir=.; \
- else \
- srcdir=`cd $(srcdir); pwd`/$@; \
- fi; \
- test -d $@ || $(mkinstalldirs) $@; \
- cd $@; \
- test -f Makefile.dep || touch Makefile.dep; \
- $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $(top_srcdir)/Makefile.comm \
- -f $$srcdir/Makefile.sub \
- -f $(top_srcdir)/Makefile.lib \
- -f Makefile.dep $(do)
-
-$(CPROGDIRS): FORCE
- @$(ENVSETUP); \
- if test $(srcdir) = .; then \
- srcdir=.; \
- else \
- srcdir=`cd $(srcdir); pwd`/$@; \
- fi; \
- test -d $@ || $(mkinstalldirs) $@; \
- cd $@; \
- test -f Makefile.dep || touch Makefile.dep; \
- $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $(top_srcdir)/Makefile.comm \
- -f $$srcdir/Makefile.sub \
- -f $(top_srcdir)/Makefile.cpg \
- -f Makefile.dep $(do)
-
-$(CCPROGDIRS): FORCE
- @$(ENVSETUP); \
- if test $(srcdir) = .; then \
- srcdir=.; \
- else \
- srcdir=`cd $(srcdir); pwd`/$@; \
- fi; \
- test -d $@ || $(mkinstalldirs) $@; \
- cd $@; \
- test -f Makefile.dep || touch Makefile.dep; \
- $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $(top_srcdir)/Makefile.comm \
- -f $$srcdir/Makefile.sub \
- -f $(top_srcdir)/Makefile.ccpg \
- -f Makefile.dep $(do)
-
-$(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS): FORCE
- @$(ENVSETUP); \
- if test $(srcdir) = .; then \
- srcdir=.; \
- else \
- srcdir=`cd $(srcdir); pwd`/$@; \
- fi; \
- test -d $@ || $(mkinstalldirs) $@; \
- cd $@; \
- $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $(top_srcdir)/Makefile.comm \
- -f $$srcdir/Makefile.sub \
- -f $(top_srcdir)/Makefile.dev $(do)
-
-$(INCDIRS) $(PROGDEPDIRS) $(OTHERDIRS): FORCE
- @$(ENVSETUP); \
- if test $(srcdir) = .; then \
- srcdir=.; \
- else \
- srcdir=`cd $(srcdir); pwd`/$@; \
- fi; \
- test -d $@ || $(mkinstalldirs) $@; \
- cd $@; \
- $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $(top_srcdir)/Makefile.comm \
- -f $$srcdir/Makefile.sub \
- -f $(top_srcdir)/Makefile.man $(do)
-
-.PHONY: dist
-dist:
- -rm -fr tmp
- rm -f groff-$(version)$(revision).tar.gz
- mkdir tmp
- for d in $(DISTDIRS); do \
- $(mkinstalldirs) tmp/$$d; \
- done
- srcdir=`cd $(srcdir); pwd`; \
- cd tmp; \
- $(LN_S) ../Makefile .; \
- $(LN_S) $$srcdir/* . 2>/dev/null || true; \
- rm -rf CVS; \
- for d in $(DISTDIRS); do \
- (cd $$d; \
- $(LN_S) $$srcdir/$$d/* . 2>/dev/null; \
- rm -rf CVS || true); \
- done; \
- $(MAKE) srcdir=. VPATH=. distfiles; \
- $(MAKE) srcdir=. VPATH=. extraclean; \
- for d in $(EXTRADIRS); do \
- (cd $$d; \
- if test -f Makefile; then \
- $(MAKE) extraclean; \
- else \
- $(MAKE) -f $(top_builddir)/$$d/Makefile extraclean; \
- fi); \
- done; \
- rm -f Makefile; \
- $(LN_S) $$srcdir/Makefile.init Makefile
- mv tmp groff-$(version)$(revision)
- tar cfh - groff-$(version)$(revision) | \
- gzip -c >groff-$(version)$(revision).tar.gz
- rm -fr groff-$(version)$(revision)
-
-# $(PROGDIRS): libgroff
-# grops grotty grodvi: libdriver
-# refer lookbib indxbib lkbib: libbib
-# $(LIBDIRS) $(PROGDIRS): include
-
-.PHONY: $(ALLDIRS) dot $(TARGETS) FORCE
-
-# Create a Makefile in $(subdir). This is useful for development since it
-# avoids running make recursively.
-subdir_Makefile: Makefile.cfg
- $(MAKE) do=Makefile $(subdir)
-
-Makefile.cfg: Makefile
- >Makefile.cfg
- for var in $(MDEFINES); do \
- echo "$$var" >>Makefile.cfg; \
- done
-
-Makefile: Makefile.in
- $(SHELL) config.status
-
-.PHONY: uninstall
-uninstall: uninstall_sub uninstall_dirs
-
-.PHONY: uninstall_dirs
-uninstall_dirs:
-# Use `rmdir' here so that the directories are only removed if they are empty.
- -rmdir $(man1dir) $(man5dir) $(man7dir) $(manroot) \
- $(tmacdir) $(systemtmacdir) $(localtmacdir) \
- $(fontdir) $(localfontdir) $(bindir) \
- $(datasubdir) $(dataprogramdir) $(infodir) \
- $(exampledir) $(htmldocdir) $(pdfdocdir) $(docdir) \
- $(libprogramdir) $(libdir) \
- $(datadir)/doc/groff $(datadir)/doc $(datadir) 2>/dev/null || :
-
-.PHONY: check docheck
-check: site.exp docheck
-
-docheck:
- if $(SHELL) -c "runtest --version" > /dev/null 2>&1; then \
- runtest; \
- else \
- echo "WARNING: could not find \`runtest'" 1>&2; \
- fi
-
-# This snippet has been taken from the automake package.
-
-site.exp:
- @echo "Making a new site.exp file..."
- @echo "## these variables are automatically generated by make ##" >site.tmp
- @echo "# Do not edit here. If you wish to override these values" >>site.tmp
- @echo "# edit the last section" >>site.tmp
- @echo "set tool groff" >>site.tmp
- @echo "set srcdir $(srcdir)/testsuite" >>site.tmp
- @echo "set objdir `pwd`" >> site.tmp
- @echo "## All variables above are generated by configure. Do not edit! ##" >> site.tmp
- @test ! -f site.exp \
- || sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
- @-rm -f site.bak
- @test ! -f site.exp || mv site.exp site.bak
- @mv site.tmp site.exp
-
-FORCE:
-
-.NOEXPORT:
diff --git a/contrib/groff/Makefile.init b/contrib/groff/Makefile.init
deleted file mode 100644
index 2a44c85f69aa..000000000000
--- a/contrib/groff/Makefile.init
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-SHELL=/bin/sh
-
-.PHONY: all
-all:
- $(SHELL) configure
- $(MAKE) all
diff --git a/contrib/groff/Makefile.lib b/contrib/groff/Makefile.lib
deleted file mode 100644
index 62a82221109d..000000000000
--- a/contrib/groff/Makefile.lib
+++ /dev/null
@@ -1,20 +0,0 @@
-LIBCLEAN=lib$(LIB).$(LIBEXT)
-MAKEFILEPARTS=\
- $(top_srcdir)/Makefile.comm \
- $(top_builddir)/Makefile.cfg \
- $(srcdir)/Makefile.sub \
- $(top_srcdir)/Makefile.lib \
- Makefile.dep
-
-all: lib$(LIB).$(LIBEXT)
-
-lib$(LIB).$(LIBEXT): $(OBJS)
- $(AR) r $@ $?
- $(RANLIB) $@
-
-depend: depend_src
-depend.temp: $(GENSRCS)
-TAGS: $(CCSRCS) $(CSRCS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
- touch Makefile.dep
diff --git a/contrib/groff/Makefile.man b/contrib/groff/Makefile.man
deleted file mode 100644
index 6eaf31115f79..000000000000
--- a/contrib/groff/Makefile.man
+++ /dev/null
@@ -1,5 +0,0 @@
-all: $(MANPAGES)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_man
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/Makefile.sub b/contrib/groff/Makefile.sub
deleted file mode 100644
index 2652363020e1..000000000000
--- a/contrib/groff/Makefile.sub
+++ /dev/null
@@ -1,35 +0,0 @@
-DISTCLEANFILES=\
- config.status \
- config.log \
- config.cache \
- stamp-h \
- Makefile \
- test-groff \
- src/include/config.h \
- site.exp \
- site.bak \
- groff.sum \
- groff.log
-CLEANADD=Makefile.cfg conftest*
-
-distfiles: configure
-
-$(scrdir)/configure: configure.ac aclocal.m4
- cd $(srcdir) && autoconf
-
-config.status: configure
- $(SHELL) config.status --recheck
-
-# autoheader might not change config.hin, so touch a stamp file.
-$(srcdir)/config.hin: stamp-h.in
-$(srcdir)/stamp-h.in: configure.ac aclocal.m4
- cd $(srcdir) && autoheader
- echo timestamp > $(srcdir)/stamp-h.in
-
-config.h: stamp-h
-stamp-h: config.hin config.status
- $(SHELL) config.status
-
-# Always create the site-font directory as a guide to the user.
-install_data:
- -test -d $(localfontdir) || $(mkinstalldirs) $(localfontdir)
diff --git a/contrib/groff/NEWS b/contrib/groff/NEWS
deleted file mode 100644
index 0272def4b2e9..000000000000
--- a/contrib/groff/NEWS
+++ /dev/null
@@ -1,2307 +0,0 @@
-This file describes recent user-visible changes in groff. Bug fixes are not
-described. There are more details in the man and info pages.
-
-VERSION 1.19.2
-==============
-
-Troff
------
-
-o Analogously to the .ft and \f pair, two new requests `gcolor' and
- `fcolor' (which pair with \m and \M, respectively) have been added to
- set the glyph and background colours.
-
-o A new read-only, string-valued register `.sty' returns the name of the
- current style.
-
-o Two new conditional operators `F <name>' and `S <name>' have been added.
- `F' is true if a font <name> exists. `S' is true if a style <name> has
- been registered.
-
-o Cyrillic characters have been added to the `utf8' and `html' output
- devices.
-
-Pic
----
-
-o The `by' argument in a `for' loop can now be negative if it is additive.
- For the multiplicative case, it must be greater than zero.
-
-Eqn
----
-
-o The following keywords aren't new but haven't been documented previously:
-
- undef NAME (to undefine a macro)
- copy "FILE" (a synonym for `include')
- space n (to modify the vertical spacing before and after
- an equation)
-
-o The following macros aren't new but haven't been documented previously:
-
- Alpha, ..., Omega (the same as `ALPHA', ..., `OMEGA')
- ldots (three dots on the base line)
- dollar (a dollar glyph)
-
-o The following keywords have been extended. Again, this isn't new but
- hasn't been documented previously:
-
- col n { ... }
- lcol n { ... }
- rcol n { ... }
- ccol n { ... }
- pile n { ... }
- lpile n { ... }
- rpile n { ... }
- cpile n { ... } (set vertical spacing between rows to N)
-
-Grohtml
--------
-
-o This device driver has been raised to beta stage; its set of tags should
- be stable now.
-
-o New command line option `-s' to set the base point size.
-
-o New command line option `-S' to set the split level while generating
- multiple files.
-
-Grotty
-------
-
-o Experimental support for zero-width and double-width characters.
-
-Gxditview
----------
-
-o On platforms which have the X Window System this program is now built and
- installed automatically.
-
-Xtotroff
---------
-
-o This program to create font definition files for xditview isn't new but
- hasn't been installed previously.
-
-Groffer
--------
-
-o A security problem (reported as CAN-2004-0969) has been fixed.
-
-Gdiffmk
--------
-
-o A new script contributed by Mike Bianchi. It compares two groff, nroff,
- or troff documents and creates an output with added margin characters
- (using `.mc') to indicate the differences.
-
-Pdfroff
--------
-
-o A new wrapper script contributed by Keith Marshall to easily create PDF
- documents with groff.
-
-Macro packages
---------------
-
-o ms.tmac
-
- . Support for fractional point sizes: A value for the `PS', `VS', `FPS',
- and `VPS' register larger than or equal to 1000 is always divided by
- 1000. For example, `.nr PS 10250' sets the document's font size to
- 10.25 points.
-
- . The `Ds' and `De' macros provided in ms since groff version 1.19 have
- been removed; the equivalent `DS' and `DE' macros should be used
- instead. X11 documents which actually use `Ds' and `De' always load a
- specific macro file from the X11 distribution (`macros.t') which
- provides proper definitions for the two macros.
-
- . The following registers have been added for improving layout control:
-
- PORPHANS
- Defines number of lines following `LP', `PP', `QP', `IP' or `XP' which
- must be kept together, before any automatic page break.
-
- HORPHANS
- Sets number of lines of following paragraph which must be kept with a
- heading, defined by `NH' or `SH', before any automatic page break.
-
- GROWPS
- Sets the first level of heading (set with `NH') which will keep the
- same point size as body text.
-
- PSINCR
- Sets the point size increment for each level of heading (set with
- `NH'), below the threshold level set by `GROWPS'; e.g., if
- \n[PS] = 10, \n[GROWPS] = 3 and \n[PSINCR] = 2.0p, then `.NH 1' will
- produce 14pt headings, `.NH 2' will produce 12pt, and all other levels
- will remain at 10pt (because \n[PS] = 10).
-
- . The `SH' macro now accepts a numeric argument, to make heading size
- match that of `NH' with same argument value when the `GROWPS'/`PSINCR'
- feature is enabled.
-
- Please refer to the documentation of the ms package for other, minor
- improvements.
-
-o me.tmac
-
- The section type set with the `++' request is available in the `_M'
- register. This isn't new but hasn't been documented before.
-
-o www.tmac
-
- The `HR' macro no longer causes an empty line for non-HTML devices.
-
- A new macro `HEAD' has been added to directly add data to the
- <head>...</head> block.
-
- New macros `OLS' and `OLE' to start and end an ordered list.
-
- New macros `DLS' and `DLE' to start and end a definition list.
-
-Pdfmark
--------
-
-o A new macro package contributed by Keith Marshall which implements PDF
- marks. This is in alpha stage currently.
-
-Miscellaneous
--------------
-
-o Two new keywords to the DESC file have been added which are needed for
- grohtml: `image_generator' and `unscaled_charwidths'. The former gives
- the name of the program which creates PNG images, and the latter makes
- troff always use unscaled character widths.
-
-
-VERSION 1.19.1
-==============
-
-Groff
------
-
-o The argument of the command line option `-I' is now also passed to troff
- and grops, specifying a directory to search for files on the command line,
- files named in `so' and `psbb' requests, and files named in \X'ps: file'
- and \X'ps: import' escapes.
-
-o If option `-V' is used more than once, the commands will be both printed
- on standard error and run.
-
-Troff
------
-
-o Two new read-only, string-valued registers `.m' and `.M' return the
- name of the current drawing and background color, respectively.
-
-o New read-only register `.U' which is set to 1 if in safer mode and set
- to 0 if in unsafe mode.
-
-o An input encoding file for latin-5 (a.k.a. ISO 8859-9) has been added.
- Example use:
-
- groff -Tdvi -mlatin5 my_file > my_file.dvi
-
- Note that some output devices don't support all glyphs of this encoding.
-
-o If the `return' request is called with an argument, it exits twice,
- namely the current macro and the macro one level higher. This is
- used to define a wrapper macro for `return' in trace.tmac.
-
-o For completeness, two new requests have been added: `dei1' and `ami1'.
- They are equivalent to `dei' and `ami', respectively, but the macros
- are executed with compatibility mode off (similar to `de1' and `am1').
-
-o New command line option `-I' to specify a directory for files (both
- those on the command line and those named in `psbb' requests). This is
- also handled by the groff wrapper program.
-
-o Since version 1.19 you can say `.vs 0'. Older versions emit a warning
- and convert this to `.vs \n[.V]'.
-
- This hasn't been documented properly. Note that `.vs 0' isn't saved in a
- diversion since it doesn't result in vertical motion.
-
-Pic
-___
-
-o Dashed and dotted ellipses have been implemented.
-
-Tbl
----
-
-o New key character `x' to make tbl call a user-defined macro on a table
- cell. Patch by Heinz-Jürgen Oertel <hj.oertel@surfeu.de>.
-
-Grap2graph
-----------
-
-o A new script contributed by Eric S. Raymond <esr@thyrsus.com>. It
- converts a grap diagram into a cropped image. Since it uses gs and the
- PNM library, virtually all graphics formats are available for output.
- [Note that the grap program itself isn't part of the groff package;
- see the file MORE.STUFF how to obtain grap.]
-
-Grohtml
--------
-
-o New option `-j' to emit output splitted into multiple files.
-
-Grops
------
-
-o New command line option `-I' to specify a directory to search for files
- on the command line and files named in \X'ps: import' and \X'ps: file'
- escapes. This is also handled by the groff wrapper program.
-
-o The default value for the `broken' keyword in the DESC file is now 0.
-
-Grolj4
-------
-
-o A new man page `lj4_font(5)' documents how fonts are accessed with
- grolj4.
-
-o The built-in fonts for LJ4 and newer PCL 5 devices have been completely
- revised, mainly to access as much glyphs as possible. The provided
- metric files should be compatible with recent PCL 5 printers also.
- Additionally, font description files have been added for the Arial and
- Times New Roman family, the MS symbol, and Wingdings fonts.
-
-Afmtodit
---------
-
-o New option `-x' to prevent use of built-in Adobe Glyph List.
-
-Hpftodit
---------
-
-o Completely revised to handle HP TrueType metric files also. See the
- hpftodit manual page for more details.
-
-Groffer
--------
-
-o This version is a rewrite of groffer in many parts, but it is kept in
- the old single script style.
-
- New options: --text, --mode text, --tty-viewer, --X, --mode X,
- --X-viewer, --html, --mode html, --html-view, --apropos-data,
- --apropos-devel, --apropos-progs.
-
- New documentation file: README_SH.
-
- Enhancement of the configuration files and the `apropos' handling.
-
-Macro Packages
---------------
-
-o www.tmac: New macro `JOBNAME' to split output into multiple files.
-
-o In mdoc, multiple calls to `.Lb' are now supported in the LIBRARY
- section.
-
-
-VERSION 1.19
-============
-
-Troff
------
-
-o Input encoding files for latin-9 (a.k.a. latin-0 and ISO 8859-15) and
- latin-2 (ISO 8859-2) have been added. Example use:
-
- groff -Tdvi -mlatin9 my_file > my_file.dvi
-
- You still need proper fonts with the necessary glyphs. Out of the box,
- the groff package supports latin-9 only for -Tps, -Tdvi, and -Tutf8,
- and latin-2 only for -Tdvi and -Tutf8.
-
-o Composite glyphs are now supported. To do this, a subset of the Adobe
- Glyph List (AGL) Algorithm as described in
-
- http://partners.adobe.com/asn/tech/type/unicodegn.jsp
-
- is used to construct glyph names based on Unicode character codes. The
- existing groff glyph names are frozen; no glyph names which can't be
- constructed algorithmically will be added in the future.
-
- The \[...] escape sequence has been extended to specify multiple glyph
- components. Example:
-
- \[A ho]
-
- this accesses a glyph with the name `u0041_0328'.
-
- Some groff glyphs which are useful as composites map to `wrong' Unicode
- code points. For example, `ho' maps to U+02DB which is a spacing
- ogonek, whereas a non-spacing ogonek U+0328 is needed for composite
- glyphs. The new request
-
- .composite from to
-
- will change the mapping while a composite glyph name is constructed.
- To make \[A ho] yield the expected result,
-
- .composite ho u0328
-
- is needed. [The new file `composite.tmac' loaded at start-up already
- contains proper calls to `.composite'.]
-
- Please refer to the info pages of groff and to the groff_char man page
- for more details.
-
-o A new request `fschar' has been added to define font-specific fallback
- characters. They are searched after the list of fonts declared with the
- `fspecial' request but before the list of fonts declared with `special'.
-
-o Fallback characters defined with `fschar' can be removed with the
- new `rfschar' request.
-
-o A new request `schar' has been added to define global fallback
- characters. They are searched after the list of fonts declared with the
- `special' request but before the already mounted special fonts.
-
-o In groff versions 1.18 and 1.18.1, \D'f ...' didn't move the current
- point horizontally. Despite of being silly, this change has been
- reverted for backwards compatibility. Consequently, the intermediate
- output command `Df' also moves the position horizontally again.
-
- \D'f ...' is deprecated since it depends on the horizontal resolution of
- the output device (given with the `hor' parameter in the DESC file).
- Use the new \D'Fg ...' escape instead.
-
-o For orthogonality, new \D subcommands to change the fill color are
- available:
-
- \D'Fr ...' (rgb)
- \D'Fc ...' (cmy)
- \D'Fg ...' (gray)
- \D'Fk ...' (cmyk)
- \D'Fd' (default color)
-
- The arguments are the same as with the `defcolor' request. The current
- position is *not* changed.
-
-o The values set with \H and \S are now available in number registers
- \n[.height] and \n[.slant], respectively.
-
-o The `.pe' number register isn't new but hasn't been documented before.
- It is set to 1 during a page ejection caused by the `bp' request.
-
-o The new glyph symbol `tno' is a textual variant of `no'.
-
-o The new glyph symbol `+e' represents U+03F5, GREEK LUNATE EPSILON SYMBOL.
- (Well, it is not really new since it has been previously supported by
- grolj4.) The mapping for both the dvi and lj4 symbol font has been
- changed accordingly so that Greek small letter epsilon, `*e', has the
- same glyph shape as with other devices.
-
-Grops
------
-
-o The font `freeeuro.pfa' has been added to provide various default glyph
- shapes for `eu' and `Eu'.
-
-o It is now possible to access all glyphs in a Type 1 font, not only 256
- (provided the font file created by afmtodit has proper entries). grops
- constructs additional encoding vectors on the fly if necessary.
-
-o The paper size is now emitted via the %%DocumentMedia and PageSize
- mechanisms so that it is no longer required to tell `gv' or `ps2pdf'
- about the paper size. The `broken' flag value 16 omits this feature
- (the used PostScript command `setpagedevice' is a LanguageLevel 2
- extension) -- if you intend to further process grops output to get an
- encapsulated PS (EPS) file you must also use this option.
-
- Patch by Egil Kvaleberg <egil@kvaleberg.no>.
-
-o Non-slanted PostScript metrics have been changed again; they no longer
- contain negative left italic correction values. This assures correct
- spacing with eqn.
-
-Grodvi
-------
-
-o The font cmtex10 has been added as the special font `SC' to the DVI fonts.
- It is used as a font-specific special font for CW and CWI.
-
-o New options -l and -p to set landscape orientation and the paper size.
- grodvi now emits a `papersize' special which is understood by DVI drivers
- like dvips.
-
- Consequently, the DESC file should contain a `papersize' keyword.
-
-o The glyph shapes for \[*f] and \[*e] have been exchanged with \[+f] and
- \[+e], respectively, to be in sync with all other devices.
-
-o Glyphs \[HE] and \[DI] have been replaced with \[u2662] and \[u2661],
- respectively, since the former two glyphs have a black (filled) shape
- which grodvi doesn't provide by default (it never has actually).
-
-Grolj4
-------
-
-o The glyphs \[*e] and \[+e] have been exchanged to be in sync with
- all other devices.
-
-o The glyph \[~=] is now called \[|=]. Similar to other devices, \[~=]
- is now another name for glyph \[~~].
-
-Grotty
-------
-
-o New option `-r'. It is similar to the -i option except it tells grotty to
- use the `reverse video' attribute to render italic fonts.
-
-Pic
----
-
-o New command `figname' to set the name of a picture's output box in TeX
- mode.
-
-Refer
------
-
-o The environment variable `REFER' to override the name of the default
- database isn't new but hasn't been documented before.
-
-Soelim
-------
-
-o New option `-r' to avoid emission of `.lf' lines.
-
-o New option `-t' to emit TeX comment lines (giving current file and the
- line number) instead of `.lf' lines.
-
-Afmtodit
---------
-
-o Unencoded glyphs in an AFM file are output also (since grops can now emit
- multiple encoding vectors for a single font).
-
-o New option `-m' to prevent negative left italic correction values.
-
-o The mapping and encoding file together with file `DESC' are now searched
- in the default font directory also. Please refer to the man page of
- afmtodit for more details.
-
-Macro Packages
---------------
-
-o Larry Kollar <kollar@alltel.net> and others made the man macros more
- customizable.
-
- . New command line options -rFT, -rIN, and -rSN to set the vertical
- location of the footer line, the body text indentation, and the
- sub-subheading indentation.
-
- . New command line option -rHY (similar to the ms macros) to control
- hyphenation.
-
- . New macros `.PT' and `.BT' to print the header and footer strings.
- They can be replaced with a customized version in `man.local'.
-
- . The string `HF' now holds the typeface to print headings and
- subheadings.
-
- . Similar to the ms macros, the LT register now defaults to LL if not
- explicitly specified on the command line.
-
-o troff's start-up file `troffrc' now includes `papersize.tmac' to set
- the paper size with the command line option `-dpaper=<size>'.
-
- Possible values for `<size>' are the same as the predefined `papersize'
- values in the DESC file (only lowercase; see the groff_font man page)
- except a7-d7. An appended `l' (ell) character denotes landscape
- orientation. Examples: `a4', `c3l', `letterl'.
-
- Most output drivers need additional command line switches `-p' and
- `-l' to override the default paper length and orientation as set in
- the driver specific DESC file.
-
- For example, use the following for PS output on A4 paper in landscape
- orientation:
-
- groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-
-
-VERSION 1.18.1
-==============
-
-Troff
------
-
-o The non-slanted PostScript font definition files have been regenerated to
- include left and right italic correction values. Applying those to a
- glyph (this is, prepending the glyph with `\,' and appending `\/' to the
- glyph) sets the glyph width to the real value given by the horizontal
- bounding box values. Without those escapes, the advance width for the
- particular glyph is used (which can differ considerably).
-
- Most users will neither need this feature nor notice a difference in
- existing documents (provided \, and \/ is used as advertised, namely for
- italic fonts only); its main goal is to improve image generation with
- grohtml.
-
- This is an experimental change, and feedback is welcome.
-
-Tbl
----
-
-o Added global option `nospaces' to ignore leading and trailing spaces in
- data items.
-
-Grolbp
-------
-
-o The option -w (--linewidth) has been added (similar to other device
- drivers) to set the default line width.
-
-Grn
----
-
-o Support for b-spline and Bezier curves has been added.
-
-Groffer
--------
-
-o New option `--shell' to select the shell under which groffer shall run.
-
-Macro Packages
---------------
-
-o The string `Am' (producing an ampersand) has been added to mdoc for
- compatibility with NetBSD.
-
-o `.IX' is now deprecated for mom; you should use `.IQ' (Indent Quit)
- instead.
-
-o In mom, new inlines `FWD', `BCK', `UP', and `DOWN' deal with horizontal
- and vertical movements; please refer to contrib/mom/NEWS for more
- details.
-
-o New macro ENDNOTES_HDRFTR_CENTER for mom to better control headers.
-
-Miscellaneous
--------------
-
-o The `papersize' keyword in the DESC file now accepts multiple arguments.
- It is scanned from left to the right, and the first valid argument is
- used. This makes it possible to provide a fallback paper size.
-
- Example:
-
- papersize /etc/papersize a4
-
-o A local font directory has been prepended to the default font path; it
- defaults to /usr/local/share/groff/site-font. Similar to the normal
- font searching process, files must be placed into a devXXX subdirectory,
- e.g.
-
- /usr/local/share/groff/site-font/devps/FOO
-
- for a PostScript font definition file FOO.
-
-
-VERSION 1.18
-============
-
-***************************************************************************
-* *
-* PLEASE READ THE CHANGES BELOW REGARDING GROTTY, GROFF'S TTY FRONTEND. *
-* *
-***************************************************************************
-
-Troff
------
-
-o Color support has been added to troff and pic (and to the device drivers
- grops, grodvi, grotty, and grohtml -- other preprocessors and drivers will
- follow). A new function `defcolor' defines colors; the escape sequence
- `\m' sets the drawing color, the escape sequence `\M' specifies the
- background color for closed objects created with \D'...' commands.
- `\m[]' and `\M[]' switch back to the previous color. `\m' and `\M'
- correspond to the new troff output command sets starting with `m' and
- `DF'. The device-specific default color is called `default' and can't be
- redefined.
-
- Use the `color' request to toggle the usage of colors (default is on); the
- read-only register `.color' is 0 if colors are not active, and non-zero
- otherwise.
-
- The old `Df' output command is mapped onto `DFg'; all color output
- commands don't change the current font position (consequently, `Df'
- doesn't either).
-
- Outputting color can be disabled in troff and groff with the option -c
- (it is always disabled in compatibility mode). See the section on grotty
- for the GROFF_NO_SGR environment variable also.
-
- For defining color components as fractions between 0 and 1, a new scaling
- indicator `f' has been introduced: 1f = 65536u. For testing whether a
- color is defined (with .if and .ie), a new conditional operator `m' is
- available.
-
- More details can be found in the groff_diff.7 manual page and in
- groff.texinfo.
-
-o Similar to \m and \M, \f[] switches back to the previous font. \fP
- (and \f[P]) is still valid for backwards compatibility.
-
-o The new escape \F is the same as `.fam'; \F[] switches back to previous
- family -- \F[P] selects family `P'.
-
-o Two new glyph symbols are available: `eu' is the official Euro symbol;
- `Eu' is a font-specific glyph variant.
-
-o The new glyph symbols `t+-', `tdi', and `tmu' are textual variants of
- `+-', `di', and `mu', respectively.
-
-o Latin-1 character 181 (PS name `mu', Unicode name U+00B5 MICRO SIGN) has
- got the troff glyph name `mc'.
-
-o -Tutf8 is now available on EBCDIC hosts.
-
-o Strings can take arguments, using this syntax: \*[foo arg1 arg2 ...].
- Example:
-
- .ds xxx This is a \\$1 test.
- \*[xxx nice]
-
-o It is now possible to have whitespace between the first and second dot (or
- the name of the ending macro) to end a macro definition. Example:
-
- .de !
- ..
- .
- .de foo
- . nop Hello, I'm `foo'.
- . nop I will now define `bar'.
- . de bar !
- . nop Hello, I'm `bar'.
- . !
- ..
-
-o `.fn' is a new string-valued register which returns the (internal) real
- font name; styles and families are properly concatenated.
-
-o Three new read/write registers `seconds', `minutes', and `hours' contain
- the current time, set at start-up of troff. Use the `af' request to
- control their output format.
-
-o The new request `fchar' can be used to provide fallback characters. It
- has the same syntax as the `char' request; the only difference is that a
- character defined with `.char' hides the glyph with the same name in the
- current font, whereas a character defined with `.fchar' is checked only if
- the particular glyph isn't found in the current font. This test happens
- before checking special fonts.
-
-o In analogy to the `tmc' request, `.writec' is the same as `.write' but
- doesn't emit a final newline.
-
-o The new request `itc' is a variant of `.it' for which a line interrupted
- with \c counts as one input line.
-
-o Two new requests `ds1' and `as1' which are similar to `ds' and `as' but
- with compatibility mode disabled during expansion of strings defined by
- them.
-
-o The syntax of the `substring' request has been changed: The first
- character in a string now has index 0, the last character has index -1.
- Note that this is an incompatible change.
-
-o To emit strings directly to the intermediate output, a new `output'
- request has been added; it is similar to `\!' used at the top level.
-
-o `.hpf' has been extended. It can now handle most TeX hyphenation
- pattern files without modification. To do that, the commands \patterns,
- \hyphenation, and \endinput are recognized. Please refer to groff_diff.7
- for more information.
-
-o `hpfcode' is a new request to provide an input encoding mapping for the
- `hpf' request.
-
-o The new request `hpfa' appends hyphenation patterns (`hpf' replaces
- already existing patterns).
-
-o A new request `ami' (append macro indirect) has been added. The first and
- second parameter of `ami' are taken from string registers rather than
- directly; this very special request is needed to make `trace.tmac'
- independent from the escape character (which might even be disabled).
-
-o The new request `sizes' is similar to the `sizes' command in DESC files.
- It expects the same syntax; the data must be on a single line, and the
- final `0' can be omitted.
-
-o `trin' (translate input) is a new request which is similar to `tr' with
- the exception that the `asciify' request will use the character code (if
- any) before the character translation. Example:
-
- .trin ax
- .di xxx
- a
- .br
- .di
- .xxx
- .trin aa
- .asciify xxx
- .xxx
-
- The result is `x a'. Using `tr', the result would be `x x'.
-
-o The request `pvs' isn't new, but hasn't been documented before. It
- adds vertical space after a line has been output. This makes it an
- alternative to the `ls' request to produce double-spaced documents.
- The read-only register `.pvs' holds the current amount of the
- post-vertical line space.
-
-o For compatibility with plan 9's troff, multiple `pi' requests are
- supported:
-
- .pi foo
- .pi bar
-
- is now equivalent to
-
- .pi foo | bar
-
-o A new escape sequence `\O' is available to disable and enable glyph
- output. Please see groff_diff.7 and groff.texinfo for more details.
-
-o The escapes `\%', `\&', `\)', and `\:' no longer cause an error in \X;
- they are ignored now. Additionally `\ ' and `\~' are converted to
- single space characters.
-
-o The default tab distance in nroff mode is now 0.8i to be compatible
- with UNIX troff.
-
-o Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
- request was a bad idea. Instead, it is now translated to `\%', and
- the default hyphenation character is again \[hy]. Note that the glyph
- \[shc] is not useful for typographic purposes; it only exists to have
- glyph names for all latin-1 characters.
-
-Macro Packages
---------------
-
-o Peter Schaffter <df191@ncf.ca> has contributed a new major macro package
- called `mom', mainly for non-scientific writers, which takes care of
- many typographic issues. It comes with a complete reference (in HTML
- format) and some examples. `mom' has been designed to format documents
- for PostScript output only.
-
-o Two macros `AT' (AT&T) and `UC' (Univ. of California) have been added to
- the man macros for compatibility with older BSD releases.
-
-o Both the man and mdoc macro packages now use the LL and LT registers for
- setting the line and title length, respectively (similar to those
- registers in the ms macro package). If not set on the command line or
- in a macro file loaded before the macro package itself, they default to
- 78n in nroff mode and 6.5i in troff mode.
-
-o The `-xwidth' specifier in the mdoc macro package has been removed. Its
- functionality is now integrated directly into `-width'. Similarly,
- `-column' has been extended to provide this functionality also.
-
-o A new macro `Ex' has been added to the mdoc macro package to document an
- exit status.
-
-o The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
- now automatically loaded for -Tdvi), using a dvips special to load the EPS
- file.
-
-o The trace.tmac package now traces calls to `am' also. Additionally, it
- works in compatibility mode.
-
-o `troff.1' has been split. Differences to UNIX troff are now documented
- in the new man page `groff_diff.7'.
-
-o `groff_mwww.7' has been renamed to `groff_www.7'. The file mwww.tmac
- has been removed.
-
-o `groff_ms.7' has been completely rewritten. It now contains a complete
- reference to the ms macros.
-
-o `groff_trace.7' documents the trace macro package.
-
-o Changes in www.tmac:
-
- Note that HTML support is still in alpha change, so it is rather likely
- that both macro names and macro syntax will change. Some of the macros
- mentioned below aren't really new but haven't been documented properly
- before.
-
- The following macros have been renamed:
-
- MAILTO -> MTO
- IMAGE -> IMG
- LINE -> HR
-
- For consistency, the macros `URL', `FTL', and `MTO' now all have the
- address as the first parameter followed by the description.
-
- By default, grohtml generates links to all section headings at the top
- of the document. Use the new `LK' macro to specify a different place.
-
- For specifying the background color and a background image, use the
- new macros `BCL' and `BGIMG', respectively.
-
- The macro `NHR' has been added; it suppresses the generation of top and
- bottom rules which grohtml emits by default.
-
- The new macro `HX' determines the cut-off point for automatic link
- generation to headings.
-
- The image position parameter names in `IMG' have been changed to `-L',
- `-R', and `-C'.
-
- New macro `PIMG' for inclusion of a PNG image (it will automatically
- convert it into an EPS file if not -Thtml is used).
-
- New macro `MPIMG' for putting a PNG image into the left or right margin
- (it will automatically convert it into an EPS file if not
- -Thtml is used).
-
- New macros `HnS', `HnE' to start and end a header line block.
-
- New macro `DC' to produce dropcap characters.
-
- New macro `HTL' to generate an HTML title line only but no H1 heading.
-
- New macros `ULS' and `ULE' to start and end an unordered list. The new
- macro `LI' inserts a list item.
-
-Groff
------
-
-o The new command line option `-c' disables color output (which is always
- disabled in compatibility mode).
-
-Nroff
------
-
-o Two new command line options `-c' and `-C'; the former passes `-c' to
- grotty (switching to the old output scheme); the latter passes `-C' to
- groff (enabling compatibility mode).
-
-Pic
----
-
-o New keywords `color' (or `colour', `colored', `coloured'), `outline' (or
- `outlined'), and `shaded' are available. `outline' sets the color of the
- outline, `shaded' the fill color, and `color' sets both. Example:
-
- circle shaded "green" outline "black" ;
-
- Filled arrows always use the outline color for filling.
-
- Color support for TeX output is not implemented yet.
-
-Pic2graph
----------
-
-o A new script contributed by Eric S. Raymond <esr@thyrsus.com>. It
- converts a PIC diagram into a cropped image. Since it uses gs and the PNM
- library, virtually all graphics formats are available for output.
-
-Eqn2graph
----------
-
-o A new script contributed by Eric S. Raymond <esr@thyrsus.com>. It
- converts an EQN diagram into a cropped image. Since it uses gs and the PNM
- library, virtually all graphics formats are available for output.
-
-Groffer
--------
-
-o A new script contributed by Bernd Warken <bwarken@mayn.de>. It displays
- groff files and man pages on X and tty, taking care of most parameters
- automatically.
-
-Grog
-----
-
-o Documents using the mom macro package are recognized.
-
-Grops
------
-
-o Color support has been added.
-
-o A new option `-p' is available to select the output paper size. It has
- the same syntax as the new `papersize' keyword in the DESC file.
-
-Grodvi
-------
-
-o By default, font sizes are now available in the range 5-10000pt, similar
- to PS fonts. If you want the old behaviour (i.e., font sizes at discrete
- values only), insert the following at the start of your document:
-
- .if '\*[.T]'dvi' \
- . sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 \
- 1728 1800 2000 2074 2200 2400 2488 2800 3600
-
-o A new font file HBI (using cmssbxo10; this is slanted sans serif bold
- extended) has been added.
-
-o Two font families are now available: `T' and `H'.
-
-o EC and TC fonts have been integrated. Use `-mec' (calling the file
- ec.tmac) to switch to them. Those fonts give a much better coverage of
- the symbols defined by groff than the CM fonts.
-
- Note that ec.tmac must be called before any language-specific files; it
- doesn't take care of hcode values.
-
-o Color support has been added. For drawing commands, colors are translated
- to gray values currently.
-
-Grotty
-------
-
-o Color support has been added, using the SGR (ISO 6429, sometimes called
- ANSI color) escape sequences.
-
-o SGR escape sequences are now used by default for underlining and bold
- printing also, no longer using the backspace character trick. To revert
- to the old behaviour, use the `-c' switch.
-
- Note that you have to use the `-R' option of `less' to make SGR escapes
- display correctly. On the other hand, terminal programs and consoles like
- `xterm' which support SGR sequences natively can directly display the
- output of grotty. Consequently, the options `-b', `-B', `-u', and `-U'
- work only in combination with `-c' and are ignored silently otherwise.
-
- For the `man' program, it may be necessary to add the `-R' option of
- `less' to the $PAGER environment variable; alternatively, you can use
- `man's `-P' option (or adapt its configuration file accordingly). See
- man(1) for more details.
-
-o If the environment variable GROFF_NO_SGR is set, SGR output is disabled,
- reverting to the old behaviour.
-
-o A new special \X'tty: sgr n' has been added; if n is non-zero or missing,
- enable SGR output (the default).
-
-o If the new option `-i' is used (only in SGR mode), grotty sends escape
- sequences to set the italic font attribute instead of the underline
- attribute for italic fonts. Note that many terminals don't have support
- for this (including xterm).
-
-Grohtml
--------
-
-o Color support for glyphs has been added.
-
-o New option `-h' to select the style of headings in HTML output.
-
-o New option `-b' to set the background colour to white.
-
-o New options `-a' and `-g' to control the number of bits for anti-aliasing
- used for text and graphics, respectively. Default value is 4; 0 means
- no anti-aliasing.
-
-o groff character/glyph entities now map onto HTML 4 character entities.
-
-Grolbp
-------
-
-o Valid paper sizes are now specified as with the new `papersize' keyword
- in the DESC file. Specifically, the old custom paper type format
- `custAAAxBBB' is no longer supported.
-
-Miscellaneous
--------------
-
-o A new manual page `ditroff.7' is available.
-
-o The groff texinfo manual will now be installed, together with a bunch
- of examples.
-
-o A new keyword `papersize' has been added to the DESC file format. Its
- argument is either
-
- . a predefined paper format (e.g. `A4' or `letter')
-
- . a file name pointing to a file which must contain a paper size
- specification in its first line (e.g. `/etc/papersize')
-
- . a custom paper size definition like `35c,4i'
-
- See groff_font(5) for more details. This keyword only affects the
- physical dimensions of the output medium; grops, grolj4, and grolbp use it
- currently. troff completely ignores it.
-
-VERSION 1.17.2
-==============
-
-This is major bug-fixing release which should replace 1.17.1.
-
-Troff
------
-
-o The `IMAGE' macro in www.tmac has changed: Now the optional 2nd parameter
- gives the horizontal image location (left, centered, or right), and the
- optional 3rd and 4th parameter the image dimensions.
-
-VERSION 1.17.1
-==============
-
-This is mainly a bug-fixing release.
-
-Troff
------
-
-o Two new requests `de1' and `am1' which are similar to `de' and `am' but
- with compatibility mode disabled during expansion of macros defined by
- them.
-
-o Added request `brp'. This is the same as `\p'.
-
-o Similar to other versions of troff, the `ns' request now works in all
- diversions, not only in the top-level one.
-
-o New read-only number register `.ns'. Returns 1 if in no-space mode,
- 0 otherwise.
-
-Nroff
------
-
-o Options -p (pic) and -t (tbl) added.
-
-o The environment variable GROFF_BIN_PATH is now checked before PATH for
- finding groff.
-
-Grohtml
--------
-
-o New option `-D dir' to specify a directory in which all images are placed.
-
-o New option `-I stem' to specify an image name stame. If not given,
- `grohtml-XXX' is used (`XXX' is the process ID).
-
-VERSION 1.17
-============
-
-Groff
------
-
-o `-mFOO' now searches first for `FOO.tmac' and then for `tmac.FOO'. The
- old behaviour has been changed to overcome problems with platforms which
- have an 8+3 file name limit, and platforms which have other versions of
- troff installed also. Additionally, all macro files have been renamed
- using the latter scheme to avoid 8+3 name clashes.
-
-o The new environment variable GROFF_BIN_PATH is checked for programs groff
- is calling (preprocessors, troff, and output devices) before PATH. If not
- set, it defaults to the directory where the groff binary is located.
- Previously, it was PATH only. The nroff script only uses GROFF_BIN_PATH
- to find the groff binary but passes both the GROFF_BIN_PATH and PATH
- environment variables to groff.
-
-Troff
------
-
-o The mdoc package has been completely rewritten, using the full power of
- GNU troff to remove limitations of Unix troff (which is no longer
- supported). Most important changes are:
-
- . No argument limit
- . Almost all macros are parsed and callable (if it makes sense)
- . `.Lb': prints library names
- . `.Nm <punctuation>' now works as expected; `.Nm "" <punctuation>' has
- been withdrawn
- . Updated `.St' command
- . `.Fx': prints FreeBSD
- . `.Ox': prints OpenBSD
- . `.Bsx': prints BSD/OS
- . `.Brq', `.Bro', `.Brc': brace enclosure macros
- . `.Bd -centered': center lines
- . `.Bl -xwidth <string>': interpret <string> and use the resulting width
- . Support for double-sided printing (-rD1 command line switch)
- . Support for 11pt and 12pt document sizes (-rS11, -rS12 command line
- switches)
-
- `groff_mdoc.7' replaces `groff_mdoc.samples.7'; it now completely
- documents the mdoc package.
-
- Great care has been taken to assure backwards compatibility. If you
- encounter any abnormal results, please report them to bug-groff@gnu.org.
-
-o A new command line option for the `man' macros (similar to the `mdoc'
- package) has been implemented: `-rcR=1' (now the default in nroff mode)
- produces one single, very long page instead of multiple pages. `-rcR=0'
- deactivates it.
-
-o The `return' request has been added to return immediately from a macro.
-
-o A new request `nop' (no operation) has been added which is similar to
- `if 1'. For example,
-
- .if t \{\
- Hallo!
- .\}
-
- can now be written as
-
- .if t \{\
- . nop Hallo!
- .\}
-
-o `box' and `boxa' are two new requests which behave similarly to `di' and
- `da' but don't include a partially filled line (which is restored after
- ending the diversion).
-
-o The `asciify' request has been extended to `unformat' space characters
- and some other escape sequences also.
-
- `\ ' is no longer unformatted as a space but remains an unpaddable,
- unbreakable space character.
-
-o The new `unformat' request is similar to `asciify' but only handles space
- characters and tabs specially if the diversion is reread, retaining font
- information. This makes it possible to reformat diversions; for example
- the following
-
- .ll 3i
- .
- a01 a02 a03 a04 a05 a06 a07 a08 a09 a10.
- .
- .box box1
- .ev 1
- .nf
- \f[B]b01 b02 b03 b04 b05 b06 b07 b08 b09 b10.\f[P]
- .br
- .ev
- .box
- .
- c01 c02 c03 c04 c05 c06 c07 c08 c09 c10.
- .
- .unformat box1
- .box1
-
- gives
-
- a01 a02 a03 a04 a05 a06 a07
- a08 a09 a10. c01 c02 c03 c04
- c05 c06 c07 c08 c09 c10. b01
- b02 b03 b04 b05 b06 b07 b08
- b09 b10.
-
- Without the `unformat' request, space characters are converted to word
- space nodes which are no longer stretchable, and the result would be
-
- a01 a02 a03 a04 a05 a06 a07
- a08 a09 a10. c01 c02 c03 c04
- c05 c06 c07 c08 c09 c10. b01
- b02 b03 b04 b05 b06 b07 b08
- b09 b10.
-
-o The new request `linetabs' controls the `line-tabs' mode. In line-tabs
- mode, tab distances are computed relative to the (current) output line.
- Otherwise they are taken relative to the input line. For example, the
- following
-
- .ds x a\t\c
- .ds y b\t\c
- .ds z c
- .ta 1i 3i
- \*x
- \*y
- \*z
-
- yields
-
- a b c
-
- In line-tabs mode, the same code gives
-
- a b c
-
- The new read-only number register `.linetabs' returns 1 if in line-tabs
- mode, and 0 otherwise.
-
-o Two new requests `tm1' and `tmc' have been added to improve writing
- messages to the terminal. `tm1' is similar to `tm' but allows leading
- whitespace. `tmc' is similar to `tm1' but doesn't emit a final newline.
-
-o For compatibility with sqtroff, the request `output' has been added.
- The behaviour is similar to `\!' at the top-level, that is, it directly
- inserts its argument into the intermediate output format. The syntax
- is similar to .tm1, allowing leading whitespace.
-
-o The new `spreadwarn' request will make troff warn if spaces in an output
- line are widened by a given limit or more.
-
-o Use `warnscale' to change the scaling indicator troff will use for
- warning messages.
-
-o A new request `dei' (define indirect) has been added. The first and
- second parameter of `dei' are taken from string registers rather than
- directly; this very special request is needed to make `trace.tmac'
- independent from the escape character (which might even be disabled).
-
-o It is now possible to save and restore the escape character with two new
- requests `ecs' and `ecr'.
-
-o The new escape sequence \B'...' is an analogon to `\A': If the string
- within the delimiters is a valid numeric expression, return character `1',
- and `0' otherwise.
-
-o The new escape sequence `\:' inserts a zero-width break point. This is
- similar to `\%' but without a soft hyphen character.
-
-o The `tr' request can now map characters onto `\~'.
-
-o Calling the `fam' request without an argument switches back to the
- previous font family.
-
-o The new read-only register `.int' is set to a positive value if the last
- output line is interrupted (i.e., if the input line contains `\c').
-
-o The `writem' request is not new, but hasn't been documented before. This
- is similar to `write' but instead of a string the contents of a given
- macro or string is written to a stream.
-
-o The read/write number register `hp' to get/set the current horizontal
- position relative to the input line isn't new but hasn't been documented
- properly before.
-
-o `\X' and `\Y' are now transparent for end-of-sentence recognition.
-
-o The `cu' request in nroff mode now works as documented (i.e., it
- underlines spaces also).
-
-Grog
-----
-
-o The grog script now works in non-compatibility mode also (which is the
- default). As usual, use the `-C' option to activate compatibility mode.
-
-Grops
------
-
-o A new option `-P' resp. a new environment variable `GROPS_PROLOGUE' has
- been added to select a different prologue file.
-
-o The effect of the former `-mpsnew' option to access more Type 1 characters
- is now the default and no longer available. To get the old behaviour
- (i.e., emulation of some glyphs by composition) use `-mpsold'.
-
-Miscellaneous
--------------
-
-o For security reasons the following changes have been done:
-
- . The tmac.safer file has been replaced with a built-in solution; .open,
- .opena, .pso, .sy, and .pi are completely disabled in safer mode (which
- is the default); to enable these requests the `-U' command line flag
- must be used.
-
- . Files specified with the .mso request or given with the `-m' command
- line option, and hyphenation patterns loaded with `.hpf' are no longer
- searched in the current directory by default (besides the usual tmac
- path). Instead, the home directory is used. To add the current
- directory, either use the `-U' or `-M' command line option or set the
- GROFF_TMAC_PATH environment variable to an appropriate value.
-
- . troffrc, troffrc-end, and eqnrc are neither searched in the current nor
- in the home directory (even if -U is given). Use -M or GROFF_TMAC_PATH
- to change that.
-
- . Similarly, the current directory is no longer part of the font path.
- Use the `-F' command line option or the GROFF_FONT_PATH environment
- variable if you really need the current directory.
-
-o groff now installs its data files into /usr/local/share/groff/<version> by
- default, following the GNU standard. Additionally, a local tmac directory
- (by default /usr/local/share/groff/site-tmac) is scanned before the
- standard tmac directory. Wrapper files for system-specific macro packages
- (if necessary) are put into /usr/local/lib/groff/site-tmac; this directory
- is searched before the local tmac directory.
-
-o All programs now have option `-v' to show the version number; they exit
- immediately afterwards, following the GNU standards. Additionally,
- `--version' and `--help' have been added, doing the obvious actions.
-
-VERSION 1.16.1
-==============
-
-Bug fixes only; no user-visible changes.
-
-VERSION 1.16
-============
-
-Groff
------
-
-The anachronism of calling the man macro package with `-man' has been fixed;
-now you can say `-m man' also. The same is true for `ms', `me', `markup',
-`mandoc', and `mdoc'.
-
-A new switch `-g' for calling `grn' is available.
-
-A new switch `-G' for calling `grap' is available.
-
-EBCDIC support for tty devices has been added. On such hosts, IBM code page
-1047 is available with -Tcp1047 instead of -Tascii and -Tlatin1 (and, for
-the moment, -Tutf8). Note that non-tty devices are not yet supported (but
-installed).
-
-Troff
------
-
-A new command line option to the `man' macros is available: `-rSxx' (with
-`xx' either 10, 11, or 12) to set the base document font size to `xx'
-points. Additionally, `.SH' now produces larger headings than `.SS'.
-
-To solve a problem with the .PSPIC macro which needs the `-U' switch of
-troff to access an external program (psbb), a new request .psbb is now
-available to get the bounding box of a PostScript image file. The values
-(in PostScript units) are returned in the new read-only number registers
-`llx', `lly', `urx', and `ury'. Consequently, .PSPIC has been adapted to
-use the new request, and the psbb program has been removed.
-
-A new predefined writable number register, `year', has been added. It
-contains the current year.
-
-A new read-only register, `.Y', has been added. It contains the revision
-number of the groff package.
-
-`\fP' now behaves as expected in situations like the following where the
-font `foo' is undefined:
-
- .B bold text
- normal text \f[foo]bar\fP normal text
-
-Previously, the text after \fP appeared as bold.
-
-The `substring' request is not new, but hasn't been documented before.
-
-The predefined `.T' string register (which holds the current output device)
-is not new, but hasn't been documented before.
-
-A new request `length' computes the length of a string and returns it in
-a number register.
-
-The macro files `tmac.a4' (for specifying A4 paper format) and `tmac.trace'
-(a debugging aid) are now installed also.
-
-A new resource file, `troffrc-end', is now available. It is invoked after
-all user-specified macros. Currently used by the html device to include
-tmac.html; thus no need for users to specify -mhtml anymore.
-
-The soft hyphen character now has a glyph name: `shc'.
-
-The latin-1 character 173 (PS name `periodcentered') has got the troff glyph
-name `pc' and is no longer intermixed with the symbol character `md' (PS
-name `mathdot').
-
-ASCII character 34 (PS name `quotedbl') has got the troff glyph name `dq'
-(which is an alias to character `"').
-
-ASCII character 39 (PS name `quoteright') has got the troff glyph name `cq'
-(which is an alias to character "'").
-
-Some additions to the font description files have been implemented for
-better support of HTML output:
-
- The new format of lines in the `charset' subsection of font description
- files is
-
- name metrics type code [entity_name] [-- comment]
-
- Currently, only the font description files in devhtml use the optional
- entity_name string to define glyph entities in HTML. Everything after the
- entity_name field is ignored; in case this field isn't used, two hyphen
- characters are now necessary to start a comment.
-
- Two new requests are available in DESC files (currently used only with
- grohtml):
-
- use_charnames_in_special
- This command indicates that troff should encode named characters
- inside special commands.
-
- pass_filenames
- requests that troff tells the driver the source file name being
- processed. This is achieved by another tcommand: `F filename'.
-
-Grotty
-------
-
-Bruno Haible <haible@clisp.cons.org> contributed support for UTF8 output.
-
-Grohtml
--------
-
-Added .LINE macro to tmac.arkup.
-
-The obsolete `.LINK' macro has been removed.
-
-.URL, .FTP, and .MAILTO macros now accept an optional third argument which
-will be immediately appended to the second argument (to be used with
-punctuation, for example).
-
-Grodvi
-------
-
-The font size 11pt has been changed to 10.95pt (as used in LaTeX 2e).
-
-A new font file CWI (using cmitt10; this is typewriter italic) has been
-added.
-
-Grolbp
-------
-
-A new driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser
-printers). This code has been contributed by Francisco Andres Verdu
-<pandres@dragonet.es>.
-
-Grn
----
-
-A new preprocessor to process gremlin pictures. It is based on the
-original Berkeley implementation of grn, written by David Slattengren
-and Barry Roitblat, and has been adapted to groff by Daniel Senderowicz
-<daniel@synchrods.com> and Werner Lemberg <wl@gnu.org>.
-
-Pic
----
-
-Added the `srand' command to set the seed for a new sequence of
-pseudo-random numbers to be returned by `rand'.
-
-Gxditview
----------
-
-Simplified installation: The Imakefile will now be configured (by groff's
-configure script).
-
-Documentation
--------------
-
-Three new man pages are available: groff_tmac.5 (documenting how troff macros
-are accessed and where they are found), groff.7 (a short reference of the GNU
-roff language), and roff.7 (a general survey on GNU troff).
-
-Miscellaneous
--------------
-
-A partial port to win32 (for use with Microsoft Visual C++ 6.0) is now part
-of the distribution. It has been contributed by Blake McBride
-<blake@florida-software.com>.
-
-More information about programs, macros, documentation, etc., which is
-related to groff has been collected in the file `MORE.STUFF'.
-
-VERSION 1.13, 1.14, 1.15
-========================
-
-Bug fixes only; no user-visible changes.
-
-VERSION 1.12
-============
-
-Finally, there are new maintainers for groff. Mailing lists and a CVS
-repository are available also. See the file README for details. Not all
-reported bugs could be fixed, so please send mails again if something is
-still not working.
-
-Most of the installation problems should have vanished now (most
-notably the $(tmac_wrap) bug).
-
-There is now a man page called groff_man.7 which documents the basics of the
--man macros. It has been originally written by Susan G. Kleinmann
-<sgk@debian.org>.
-
-A (still incomplete) groff reference manual in texinfo format originally
-contributed by Trent A. Fisher <trent@gnurd.portland.or.us>.
-
-me.man and msafer.man have been renamed to groff_me.man
-resp. groff_msafer.man for consistency.
-
-Default strings for macros in doc-common resp. tmac.an no longer contain the
-word `UNIX'.
-
-groff should now be Y2k safe (fixes contributed by Paul Eggert
-<eggert@twinsun.com>).
-
-Following the GNU standards, groff will now use the prefix `/usr/local/' as
-the default instead of replacing an existent groff binary.
-
-groff, troff, nroff, and pic now support the -U flag to activate unsafe
-behaviour (without -msafer); the -S flag for using the -msafer macros is now
-the default.
-
-Grohtml
--------
-
-This is a new output device for producing HTML output contributed by Gaius
-Mulley <gaius@glam.ac.uk>. It is still very alpha but has been included
-into the distribution so that a lot of people have a chance to test it. Bug
-reports are highly welcome.
-
-Grolj4
-------
-
-Duplex printing support has been contributed by Jeffrey Copeland
-<jeff@opennt.com>.
-
-Soelim
-------
-
-Added -I option for defining include paths (patch contributed by Peter
-Miller <peterm@jna.com.au>).
-
-Gxditview
----------
-
-Fallback resources added (patch contributed by Larry Jones
-<larry.jones@sdrc.com>).
-
-Will now support 8 gray levels.
-
-mm
---
-
-New version 1.32 (contributed by Joergen Haegg <jh@axis.com>).
-
-VERSION 1.11
-============
-
-Complete documentation for pic is now in the file doc/pic.ms. It was
-contributed by Eric S. Raymond, <esr@thyrsus.com>, who is emphatically
-*not* volunteering to take over groff as he is way overworked with
-half a dozen other projects.
-
-VERSION 1.10
-============
-
-The directory where data files are installed has been changed from
-/usr/local/lib/groff to /usr/local/share/groff to comply with the
-latest GNU coding standards.
-
-By default groff programs with Unix equivalents are installed with a
-"g" prefix unless there is an existing (non-groff) troff installation.
-
-A new approach is used to make system macro packages available to
-groff. Instead of simply including /usr/lib/tmac in the list of
-directories searched by groff, the installation process creates for
-each system macro package a wrapper macro package in the groff macro
-directory that references the system macro package. The groff macro
-packages are now installed with a leading "g" prefix if there is a
-system version of the same macro package, and otherwise without the
-"g" prefix, with the exception that the groff version of -me which is
-always installed as -me.
-
-There is a new device, lj4, for the HP LaserJet 4 (and PCL5
-compatibles).
-
-Groff
------
-
-groff has a -S option that prevents the use of unsafe features in pic
-and troff. This uses a new -S option of pic and the -msafer macros
-for troff.
-
-Troff
------
-
-The `blm' request specifies a macro to be invoked when a blank line is
-encountered.
-
-Pic
----
-
-A -S (safer) option disables the sh command.
-
-Grops
------
-
-The -m option enables manual feed.
-
-VERSION 1.09
-============
-
-\(rn will now produce a character that has the traditional metrics,
-and will form corners with \(ul and \(br. This means that it will not
-align properly with \(sr. Instead there's a new character
-\[radicalex] which aligns with \(sr; this is used by eqn for doing
-square roots.
-
-Troff
------
-
-The `pso' request allows you to read from the standard output of a
-command.
-
-Grops
------
-
-The PSPIC macro has options to allow the horizontal alignment of the
-graphic to be specified.
-
-VERSION 1.08
-============
-
-Troff
------
-
-The escape sequence \V[xxx] will interpolate the value of the
-environment variable xxx.
-
-Tbl
----
-
-The decimalpoint option can be used to specify the character to be
-recognized as the decimal point character in place of the default
-period.
-
-VERSION 1.07
-============
-
-Groff
------
-
-The environment variable GROFF_COMMAND_PREFIX can be used to control
-whether groff looks for `gtroff' or `troff' (similarily for the
-preprocessors.)
-
-Troff
------
-
-Multilingual hyphenation is supported by new `hpf' and `hla' requests,
-and by a `\n[.hla]' number register. The -H option has been removed.
-Files of hyphenation patterns can have comments.
-
-When a font cannot be found, troff gives a warning (of type `font',
-enabled by default) instead of an error.
-
-There's a new request `trnt' that's like `tr' except that it doesn't
-apply to text transparently throughput into a diversion with \!.
-
-Tbl
----
-
-There is a `nokeep' option which tells tbl not to use diversions to
-try to keep the table on one page.
-
-Eqn
----
-
-Setting the parameter `nroff' to a non-zero value causes `ndefine' to
-behave like `define' and `tdefine' to be ignored. This is done by
-eqnrc when the current device is ascii or latin1. There's a `neqn'
-script that just does `eqn -Tascii'.
-
-Grotty
-------
-
-grotty uses whatever page length was specified using the `pl' request
-rather than using the paperlength command in the DESC file. The
-paperwidth command in the DESC file is also ignored.
-
-VERSION 1.06
-============
-
-The programs in groff that have Unix counterparts can now be installed
-without a leading `g' prefix. See the `g' variable in the Makefile.
-
-The g?nroff script simulates the nroff command using groff.
-
-New special characters \(+h, \(+f, \(+p, \(Fn, \(Bq, \(bq, \(aq, \(lz,
-\(an. See groff_char(7).
-
-^L is now a legal input character.
-
-Groff
------
-
-The Xps pseudo-device has disappeared. Instead there is a new -X
-option that tells groff to use gxditview instead of the usual
-postprocessor. (So instead of -TXps, use -XTps or just -X if your
-default device is ps.)
-
-The postprocessor to be used for a particular device is now specified
-by a `postpro' command in the DESC file rather than being compiled
-into groff. Similarly the command to be used for printing (with the
--l option) is now specified by a `print' command in the DESC file.
-
-The groff command no longer specifies eqnchar as an input file for
-eqn. Instead eqn automatically loads a file `eqnrc'. The groff
-command no longer passes the -D option to eqn. Instead eqnrc sets the
-draw_lines parameter.
-
-The groff command no longer tells troff to load a device-specific
-macro file. This is handled instead by the `troffrc' file, which is
-always loaded by troff.
-
-The shell script version of groff has been removed.
-
-Troff
------
-
-The `rchar' request removes a character definition established with `char'.
-
-Compatibility mode is disabled and the escape character is set to `\'
-while a character definition is being processed.
-
-The `\#' escape sequence is like `\"' except that the terminating
-newline is ignored.
-
-The `shc' request tells troff which character to insert (instead of
-the default \(hy) when a word is hyphenated at a line break.
-
-A font name of 0 (zero) in the DESC file will cause no font to be
-mounted on the corresponding font position. This is useful for
-arranging that special fonts are mounted on positions on which users
-are not likely explicitly to mount fonts. All groff devices now avoid
-initially mounting fonts on positions 5-9.
-
-The `do' request allows a single request or macro to be interpreted
-with compatibility mode disabled.
-
-troff automatically loads a file `troffrc' before any other input file.
-This can be prevented with the -R option. This file is responsible
-for loading the device-specific macros.
-
-Pic
----
-
-The -x option has been removed and a -n option has been added. By
-default, pic now assumes that the postprocessor supports groff
-extensions. The -n option tells pic to generate output that works
-with ditroff drivers. The -z option now applies only to TeX mode.
-
-The -p option has been removed. Instead if the -n option is not
-specified, pic generates output that uses \X'ps: ...' if the \n(0p
-register is non-zero and tmac.ps sets this register to 1.
-
-In places where you could 1st or 5th you can now say `i'th or `i+1'th
-(the quotes are required).
-
-Eqn
----
-
-Eqn now automatically reads a file `eqnrc' from the macro directory.
-This performs the same role that the eqnchar files used to. This can
-be prevented by the -R option.
-
-Setting the draw_lines parameter to a non-zero value causes lines to
-be drawn using \D rather than \l. The -D option is now obsolete.
-
-`uparrow', `downarrow' and `updownarrow' can be used with `left' and
-`right'.
-
-The amount of extra space added before and after lines containing
-equations can be controlled using the `body_height' and `body_depth'
-parameters.
-
-Grops
------
-
-Font description files have been regenerated from newer AFM files.
-You can get access to the additional characters present in the text
-fonts in newer PostScript printers by using -mpsnew.
-
-The default value of the -b option is specified by a `broken' command
-in the DESC file.
-
-With the -g option, grops will generate PostScript code that guesses
-the page height. This allows documents to be printed on both letter
-(8.5x11) and A4 paper without change.
-
-Grodvi
-------
-
-ISO Latin-1 characters are available with -Tdvi. Format groff_char(7)
-with groff -Tdvi for more information.
-
-Grotty
-------
-
-The -mtty-char macros contain additional character definitions for
-use with grotty.
-
-Macros
-------
-
-In previous releases the groff -me macros treated the $r and $R number
-registers in a way that was incompatible with the BSD -me macros. The
-reason for this was that the approach used by the BSD -me macros does
-not work with low resolution devices such as -TX75 and -TX100.
-However, this caused problems with existing -me documents. In this
-release, the vertical spacing is controlled by the $v and $V registers
-which have the same meaning as $r and $R in earlier groff releases.
-In addition, if the $r or $R register is set to a value that would be
-correct for for the BSD -me macros and a low resolution device is not
-being used, then an appropriate value for the $v or $V register will
-be derived from the $r or $R register.
-
-The groff -me macros work with -C and (I think) with Unix troff.
-
-For backward compatibility with BSD -me, the \*{ and \*} strings are
-also available as \*[ and \*]. Of course, \*[ will only be usable
-with -C.
-
-The \*T string has been deleted. Use \*(Tm instead.
-
-Xditview
---------
-
-The `n', Space and Return keys are bound to the Next Page action. The
-`p', BackSpace and Delete keys are bound to the Previous Page action.
-The `q' key is bound to the Quit action.
-
-The `r' key is bound to a rerasterize action that reruns groff, and
-redisplays the current page.
-
-VERSION 1.05
-============
-
-Pic
----
-
-There is a alternative assignment operator `:=' which interacts
-differently with blocks.
-
-There is a new command `command', which allows the values of variables
-to be passed through to troff or TeX.
-
-The `print' command now accepts multiple arguments.
-
-String comparison expressions (using `==' or `!=') are allowed in more
-contexts.
-
-Grotty
-------
-
-Horizontal and vertical lines drawn with \D'l ...' will be rendered
-using -, | and + characters. This is intended to give reasonable
-results with boxed tables. It won't work well with pic.
-
-Macros
-------
-
-The -mdoc macros have been upgraded to the version in the second
-Berkeley networking release. This version is not completely
-compatible with earlier versions; the old version is still available
-as -mdoc.old. The grog script has been enhanced so that it can
-usually determine whether a document requires the old or new versions.
-
-With -TX75, -TX100 and -TXps, the PSPIC macro will produce a box
-around where the picture would appear with -Tps.
-
-VERSION 1.04
-============
-
-An implementation of the -mm macros is included.
-
-The directory in which temporary files are created can be controlled
-by setting the GROFF_TMPDIR or TMPDIR environment variables.
-
-Pic
----
-
-Some MS-DOS support (see pic/make-dos-dist).
-
-Grops
------
-
-There are two new \X commands (\X'ps: invis' and \X'ps: endinvis')
-which make it possible to have substitute characters that are
-displayed when previewing with -TXps but ignored when printing with
-grops.
-
-Xditview
---------
-
-Support for scalable fonts.
-
-VERSION 1.03
-============
-
-No changes other than bug fixes.
-
-VERSION 1.02
-============
-
-There is an implementation of refer and associated programs. groff -R
-preprocesses with grefer; no mechanism is provided for passing
-arguments to grefer because most grefer options have equivalent
-commands which can be included in the file. grog also supports refer.
-
-There is an alternative perl implementation of the grog script.
-
-The code field in lines in the charset section of font description
-files is now allowed to contain an arbitrary integer (previously it
-was required to lie between 0 and 255). Currently grops and grodvi
-use only the low order 8 bits of the value. Grodvi will use the
-complete value; however, this is unlikely to be useful with
-traditional TeX tools (.tfm files only allow 8 bit character codes.)
-
-Left and right double quotes can be obtained with \(lq and \(rq
-respectively.
-
-There is a new program called pfbtops which translates PostScript
-fonts in pfb format to ASCII.
-
-A slightly modified version of the Berkeley tmac.doc is included.
-
-Troff
------
-
-In long escape names the closing ] is now required to be at the same
-input level as the opening [.
-
-The \A'S' escape sequence returns 1 or 0 according as S is or is not
-suitable for use as a name.
-
-\~ produces an unbreakable space that can be stretched when the line
-is adjusted.
-
-The `mso' request is like the `so' request except that it searches for
-the file in the same directories in which tmac.X is searched for when
-the -mX option is given.
-
-The escape sequence `\R' is similar to the `nr' request.
-
-Eqn
----
-
-A new `special' primitive allows you to add new types of unary
-constructs by writing a troff macro.
-
-Pic
----
-
-The implementation no longer uses gperf.
-
-Grops
------
-
-The compile-time -DBROKEN_SPOOLER option has been replaced by a
-BROKEN_SPOOLER_FLAGS option. This allows more precise control over
-how grops should workaround broken spoolers and previewers. There is
-a new -b option that can change this at run-time.
-
-Grops now generates PostScript that complies with version 3.0 of the
-Document Structuring Convention.
-
-The resource management component of grops (the part that deals with
-imported documents and downloadable fonts) has been rewritten and now
-supports version 3.0 of the Document Structuring Conventions. The
-%%DocumentFonts comment is no longer supported; you must use the
-%%Document{Needed,Supplied}{Fonts,Resources} comments instead
-(or as well.)
-
-tmac.psatk contains some macros that support the mechanism used by the
-Andrew Toolkit for including PostScript graphics in troff documents.
-
-Xditview
---------
-
-Parts of xditview have been rewritten so that it can be used with the
-output of gtroff -Tps. groff -TXps will run gtroff -Tps with
-gxditview.
-
-There is a new menu entry `Print' which brings up a dialog box for
-specifying a command with which the file being previewed should be
-printed.
-
-Xditview now uses imake.
-
-VERSION 1.01
-============
-
-The groff command now understands the gtroff `-a' and `-i' options.
-
-With the `m' and `n' scale indicators, the scale factor is rounded
-horizontally before being applied. This makes (almost) no difference
-for devices with `hor' equal to 1, but it makes groff with -Tascii or
--Tlatin1 behave more like nroff in its treatment of these scale
-indicators. Accordingly tmac.tty now calls the `nroff' request so
-that the `n' condition will be true.
-
-The device-specific macros (tmac.ps, tmac.dvi, tmac.tty and tmac.X)
-have been made to work at least somewhat with -C. In particular the
-special characters defined by these macros now work with -C.
-
-groff -Tdvi -p will now pass pic the -x flag; this will enable filling
-of arrowheads and boxes, provided that your dvi driver supports the
-latest version of the tpic specials.
-
-Eqn
----
-
-There is a new `-N' option that tells eqn not to allow newlines in
-delimiters. This allows eqn to recover better from missing closing
-delimiters. The groff command will pass on a `-N' option to eqn.
-
-Grops
------
-
-You can now use psfig with grops. See the file ps/psfig.diff. I do
-not recommend using psfig for new documents.
-
-The command \X'ps: file F' is similar to \X'ps: exec ...' except that
-the PostScript code is read from the file F instead of being contained
-within the \X command. This was added to support psfig.
-
-Grodvi
-------
-
-There are font files HB and HI corresponding to cmsssbx10 and cmssi10.
-
-Macros
-------
-
-The groff -me macros now work with the -C option. As a result, they
-may also work with Unix nroff/troff.
-
-In -me, the $r and $R number registers now contain the line spacing as
-a percentage of the pointsize expressed in units (normally about 120).
-The previous definition was useless with low resolution devices such
-as X75 and X100.
-
-VERSION 1.00
-============
-
-A -ms-like macro-package is now included.
-
-The name for the Icelandic lowercase eth character has been changed
-from \(-d to \(Sd.
-
-Troff
------
-
-There is a new request `nroff', which makes the `n' built-in condition
-true and the `t' built-in condition false; also a new request `troff'
-which undoes the effect of the `nroff' request. This is intended only
-for backward compatibility: it is usually better to test \n(.H or
-\n(.V or to use the `c' built-in condition.
-
-The \R escape sequence has been deleted. Use \E instead.
-
-There are `break' and `continue' requests for use with the `while'
-request.
-
-There is a request `hym' that can ensure that when the current
-adjustment mode is not `b' a line will not be hyphenated if it is no
-more than a given amount short, and a request `hys' that can ensure
-that when the current adjustment mode is `b' a line will not be
-hyphenated if it can be justified by adding no more than a given
-amount of extra space to each word space.
-
-There is a request `rj' similar to `ce' that right justifies lines.
-
-A warning of type `space' will be given when a call is made to an
-undefined request or macro with a name longer than two characters, and
-the first two characters of the name make a name that is defined.
-This is intended to find places where a space has been omitted been a
-request or macro and its argument. This type of warning is enabled by
-default.
-
-Pic
----
-
-A comma is permitted between the arguments to the `reset' command.
-
-For use with TeX, there is a new `-c' option that makes gpic treat
-lines beginning with `.' in a way that is more compatible with tpic
-(but ugly).
-
-Eqn
----
-
-It is no longer necessary to add `space 0' at the beginning of
-complicated equations inside pictures.
-
-`prime' is now treated as an ordinary character, as in Unix eqn. The
-previous behaviour of `prime' as an operator can now be obtained using
-`opprime'.
-
-Xditview
---------
-
-There are two new devices X75-12 and X100-12 which are the same as X75
-and X100 except that they are optimized for documents that use mostly
-12 point text.
-
-VERSION 0.6
-===========
-
-The installation process has been refined to make it easy for you to
-share groff with someone who has the same type of machine as you but
-does not have a C++ compiler. See the end of the INSTALL file for
-details.
-
-There is a man page for the tfmtodit program which explains how to use
-your own fonts with groff -Tdvi.
-
-There is a man page for afmtodit which explains how to use your own
-PostScript fonts with groff -Tps.
-
-The \N escape sequence is now fully supported. It can now be used to
-access any character in a font by its output code, even if it doesn't
-have a groff name. This is made possible by a convention in the font
-files that a character name of `---' refers to an unnamed character.
-The drivers now all support the `N' command required for this. The font
-description files have been updated to include unnamed characters.
-
-The `x' command in font description files has been removed: instead
-any unknown commands are automatically made available to the drivers.
-If you constructed your own font files with an earlier version of
-tfmtodit or afmtodit, you must construct them again using the current
-version.
-
-Characters between 0200 and 0237 octal are no longer legal input
-characters. Note that these are not used in ISO 8859.
-
-A command called `grog' has been added, similar to the `doctype'
-command described in Kernighan and Pike.
-
-Groff
------
-
-The groff command has some new options: -V prints the pipeline
-instead of executing it; -P passes an argument to the postprocessor,
--L passes an argument to the spooler.
-
-There is a C++ implementation of the groff command. This handles some
-things slightly better than the shell script. In particular, it can
-correctly handle arguments containing characters that have a special
-meaning to the shell; it can give an error message when child
-processes other than the last in the pipeline terminate abnormally;
-its exit status can take account of the exit statuses of all its child
-processes; it is a little more efficient; when geqn is used, it
-searches for the eqnchar file in the same way that font metric files
-are searched for, rather than expecting to find it in one particular
-directory.
-
-Gtroff
-------
-
-There is font translation feature: For example, you can tell gtroff to
-use font `HR' whenever font `H' is requested with the line
- .ftr H HR
-This would be useful for a document that uses `H' to refer to
-Helvetica.
-
-There are some new number registers: `.kern' contains the current kern
-mode, `.lg' the current ligature mode, `.x' the major version number,
-`.y' the minor version number, `.ce' the number of lines to be
-centered in the current environment, `.trunc' the amount of vertical
-space truncated by the most recently sprung vertical position trap,
-`.ne' the amount of vertical space needed in the last `ne' request
-that caused a vertical position trap to be sprung.
-
-The `cf' request now behaves sensibly in a diversion. If used in a
-diversion, it will now arrange for the file to be copied to the output
-when the diversion is reread.
-
-There is a new request `trf' (transparent file) similar to `cf', but
-more like `\!'.
-
-There is a new escape sequence `\Y[xxx]', roughly equivalent to
-`\X'\*[xxx]'', except that the contents of string or macro xxx are not
-interpreted, and xxx may contain newlines. This requires an output
-format extension; the drivers have been modified to understand this.
-Grops has also been modified to cope with newlines in the arguments to
-\X commands; grops has a new \X command mdef, which is like def except
-that it has a first argument giving the number of definitions.
-
-There is a new warning category `escape' which warns about unknown
-escape sequences.
-
-The `fp' request now takes an optional third argument giving the external
-name of the font.
-
-The `\_' character is now automatically translated to `\(ul' as in troff.
-
-The environment variable `GROFF_HYPHEN' gives the name of the file
-containing the hyphenation patterns.
-
-There is a `\C'xxx'' escape sequence equivalent to `\[xxx]'.
-
-Characters ", ', ), ], *, \(dg are now initially transparent for the purposes
-of end of sentence recognition.
-
-There is an anti-recursion feature in the `char' request, so you can
-say `.char \(bu \s+2\(bu\s-2'.
-
-The limit on the number of font positions has been removed.
-Accordingly `\n[.fp]' never returns 0.
-
-The restriction on the number of numbered environments has been removed.
-
-There is a new escape sequence `\E' that makes it possible to
-guarantee that an escape sequence won't get interpreted in copy-mode.
-The `\R' escape sequence is accordingly now deprecated.
-
-Gpic
-----
-
-Arguments of the form `X anything X' (in the `copy thru', `sh', `for',
-`if' and `define' constructs) can now be of the form `{ anything }'.
-
-If the `linethick' variable is negative (as it now is initially),
-lines will be drawn with a thickness proportional to the current point
-size.
-
-The `rand' function now takes no arguments and returns a number between
-0 and 1. The old syntax is still supported.
-
-`^' can be used in expressions to indicate exponentiation.
-
-In the `for' construct the argument to the by clause can be prefixed
-by `*' to indicate that the increment is multiplicative.
-
-A bare expression may be used as an attribute. If the current
-direction is `dir', then an attribute `expr' is equivalent to
-`dir expr'
-
-There is a `sprintf' construct that allows numbers to be formatted and used
-wherever a quoted string can be used.
-
-The height of a text object without an explicit height attribute is
-the number of text strings associated with the object times the value
-of the `textht' variable.
-
-The maximum height and width of a picture is controlled by the
-`maxpswid' and `maxpsht' variables.
-
-Gtbl
-----
-
-Gtbl can now handle gracefully the situation where the `ce' request
-has been applied to a table.
-
-Geqn
-----
-
-The `ifdef' primitive has been generalized.
-
-A tilde accent can be put underneath a box using `utilde'. This
-defined using a general `uaccent' primitive.
-
-Grops
------
-
-There is a new PostScript font downloading scheme which handles font
-downloading for imported illustrations. Previously, the name of the
-file containing the font was given in the `x download' line in the
-groff font metric file. Now, there is a `download' file which says
-for each PostScript font name which file contains that font. Grops
-can also now handle inter-font dependencies, where one downloadable
-font depends on some other (possibly downloadable) font.
-
-The `T' font has been removed. The characters it used to provide are
-now provided by `char' definitions in tmac.ps. TSymbol.ps has also
-been removed, and the tweaks it provided are now provided by `char'
-definitions.
diff --git a/contrib/groff/PROBLEMS b/contrib/groff/PROBLEMS
deleted file mode 100644
index ba43b3ce317f..000000000000
--- a/contrib/groff/PROBLEMS
+++ /dev/null
@@ -1,916 +0,0 @@
-This file describes various problems that have been encountered in
-compiling, installing and running groff. Suggestions for additions or
-other improvements to this file are welcome.
-
-----------------------------------------------------------------------
-
-
-
-Generic Problems
-================
-
-
-
-* Displaying a man page on a terminal with/without my favourite pager
- only gives garbage.
-
-groff by default now uses SGR escape sequences (`ANSI color') to
-control the display attributes (bold, underlined, colour) on TTYs.
-Some terminals (e.g. `kterm') don't understand SGR, and some pagers
-(e.g. older versions of `less' or `less' without the -R option) don't
-understand SGR either. There are three solutions to fix this, in order
-of preference; please read the grotty man page for more details.
-
-The fourth and probably best option is to update your terminal program
-and pager to versions which can handle SGR.
-
- 1. Set the GROFF_NO_SGR environment variable.
-
- 2. Pass option -c to grotty.
-
- 3. Append the following fragment to the `troffrc' file:
-
-
---- start ---
-.if n \{\
-. nr _C \n(.C
-. cp 0
-.
-. \" The following code sets a top-of-page trap to disable grotty's TTY
-. \" mode. Since neither \X nor .output can be used before the first
-. \" page has started, we must use a trap. To make it work with troff's
-. \" -o option, we wait until the first printed page.
-.
-. de sgr@dummy
-. .
-.
-. rn wh wh@old
-.
-. \" The stand-alone version. If no other trap is set, we can safely
-. \" insert the truncated vertical space caused by the trap (if any).
-. \" Otherwise we assume that the document's main macro package takes
-. \" care of that. As soon as the trap has been executed, it is removed.
-. de1 no@sgr
-. if \\n[.P] \{\
-. if (\\n[.t] == \\n[.p]) \{\
-. rn wh@old wh
-. rm no@sgr
-. wh 0
-. sp \\n[.trunc]
-. nop \X'tty: sgr 0'
-. sp -1
-. \}\}
-. .
-.
-. wh@old 0 no@sgr
-.
-. \" The piggyback version to be appended to macros planted with the
-. \" modified `wh' request.
-. de1 no@sgr1
-. if \\n[.P] \{\
-. rn wh@old wh
-. ds no@sgr1
-. nop \X'tty: sgr 0'
-. sp -1
-. \}
-. .
-.
-. \" We redefine the `wh' request so that `no@sgr1' is appended to
-. \" the trap macro.
-. de1 wh
-. am1 \\$2 sgr@dummy
-. no@sgr1
-. sgr@dummy
-. wh@old \\$1 \\$2
-. .
-.
-. cp \n[_C]
-.\}
---- end ---
-
-----------------------------------------------------------------------
-
-* The UTF-8 output of grotty has strange characters for the minus, the
- hyphen, and the right quote. Why?
-
-The used Unicode characters (U+2212 for the minus sign and U+2010 for
-the hyphen) are the correct ones, but many programs can't search them
-properly. The same is true for the right quote (U+201D). To map those
-characters back to the ASCII characters, insert the following code
-snippet into the `troffrc' configuration file:
-
-.if '\*[.T]'utf8' \{\
-. char \- \N'45'
-. char - \N'45'
-. char ' \N'39'
-.\}
-
-
-----------------------------------------------------------------------
-
-* My document says that the current year is 19100, not 2000.
-
-In groff, as in traditional troff, the yr number register yields the
-year minus 1900. Unfortunately, there is a longstanding bug in the
-Troff User's Manual <http://cm.bell-labs.com/cm/cs/cstr/54.ps.gz>,
-which incorrectly claims that yr is the last two digits of the year.
-This claim was never true of either Unix troff or of groff.
-
-If your text looks like this:
-
- .\" Wrong:
- This document was formatted in 19\n(yr.
-
-you can correct it as follows:
-
- This document was formatted in \n[year].
-
-or, if you want to be portable to older troff versions, as follows:
-
- .nr y4 1900+\n(yr
- This document was formatted in \n(y4.
-
-----------------------------------------------------------------------
-
-* groff can't handle my troff document. It works fine with AT&T
- troff.
-
-Read the section on incompatibilities in groff_diff(7). Try using
-the -C option. Alternatively there's the sed script
-`tmac/fixmacros.sed' which will attempt to edit a file of macros so
-that it can be used with groff without the -C flag.
-
-----------------------------------------------------------------------
-
-* gtroff doesn't understand lines like `.ce99' with no space between
- the name of the request or macro and the arguments.
-
-gtroff requires a space between macro or request and its arguments
-because it allows the use of long names for macros and requests. You
-can use the -C option or the `cp' request to put gtroff into a
-compatibility mode in which it is not possible to use long names for
-macros but in which no space is required between macros and their
-arguments. The use of compatibility mode is strongly discouraged.
-
-----------------------------------------------------------------------
-
-* groff -Tdvi produces dvi files that use fonts at weird
- magnifications.
-
-Yes, it does. You may need to compile fonts with Metafont at these
-magnifications. The CompileFonts script in the devdvi/generate
-directory may help you to do this. (It will take a *long* time on
-slow computers.)
-
-----------------------------------------------------------------------
-
-* Groff doesn't use the font names I'm used to.
-
-Use the `ftr' request. See groff_diff(7).
-
-----------------------------------------------------------------------
-
-* pic output is not centered horizontally; pictures sometimes run off
- the bottom of the page.
-
-The macro package you are using is not supplying appropriate
-definitions of PS and PE. Give groff a -mpic option.
-
-----------------------------------------------------------------------
-
-* gpic doesn't accept the syntax `chop N M' for chopping both ends of
- a line.
-
-The correct syntax is `chop N chop M'.
-
-----------------------------------------------------------------------
-
-* With gpic -t, when I print `line ->; box' using a dvi to ps program,
- the arrow head sticks through into the inside of the box.
-
-The dvi to ps program should be modified to set the line cap and line
-join parameters to 1 while printing tpic specials.
-
-----------------------------------------------------------------------
-
-* gtroff gives warnings about lines like
- .ev \" a comment
- (with a tab after the .ev).
-
-A tab character cannot be used as a substitute for a space character
-(except in one case: between a control character at the beginning of a
-line and the name of a macro or request). For example, in Unix troff
-
- .ps \" restore the previous point size
-
-(with a tab after the .ps) will NOT restore the previous point-size;
-instead it will be silently ignored. Since this is very likely to be
-an error, gtroff can give a warning about it. If you want to align
-comments, you can do it like this:
-
- .ev\" \" a comment
-
-----------------------------------------------------------------------
-
-* I don't like the page headers and footers produced by groff -man.
-
-There seem to be many different styles of page header and footer
-produced by different versions of the -man macros. You will need to
-put modified macros from tmac/an-old.tmac into man.local. More
-information is available in groff_man(7).
-
-----------------------------------------------------------------------
-
-* Where can I get grap?
-
-Ted Faber <faber@lunabase.org> has written a freely available grap:
-
- http://www.lunabase.org/~faber/Vault/software/grap/
-
-----------------------------------------------------------------------
-
-* The \n(st and \n(sb registers don't seem to work. I thought \w set
- them to the height and depth of its argument, but the registers
- always seem to be 0.
-
-\n(st and \n(sb aren't supposed to give the height and depth of the
-string rather they give the minimum and maximum vertical displacement
-of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
-\n(sb will be -2. The height and depth of the string is available in
-the \n[rst] and \n[rsb] registers: these are groff extensions.
-
-----------------------------------------------------------------------
-
-* While formatting a manual page, groff complains about not being able
- to break lines. The problem seems to be caused by a line like:
- .TP \w'label'+2
-
-The -man documentation says that the default scale indicator for TP
-macro is `n'. The groff -man macros implement this correctly, so that
-the argument will be evaluated as if it were
-
- \w'label'n+2n
-
-The Unix -man macros don't implement this correctly (probably because
-it's hard to do in Unix troff); they just append `n' to the entire
-argument, so that it will be evaluated as if it were
-
- \w'label'u+2n
-
-The solution is to fix the manual page:
-
- .TP \w'label'u+2
-
-----------------------------------------------------------------------
-
-* I'm having problems formatting man pages produced by the perl
- wrapman script.
-
-Some versions of wrapman have a superfluous blank line before the .TH
-line. This must be deleted. Then either use groff -C, or apply the
-following patch:
-
-*** wrapman.~2~ Sun Jan 19 12:10:24 1992
---- wrapman Tue Aug 10 02:06:41 1993
-***************
-*** 35,41 ****
- $line1 .= <IN> if $line1 =~ /eval/;
- $line1 .= <IN> if $line1 =~ /argv/;
- $line2 = <IN>;
-! next if $line2 eq "'di';\n";
-
- # Pull the old switcheroo.
-
---- 35,41 ----
- $line1 .= <IN> if $line1 =~ /eval/;
- $line1 .= <IN> if $line1 =~ /argv/;
- $line2 = <IN>;
-! next if $line2 eq "'di ';\n" || $line2 eq "'di';\n";
-
- # Pull the old switcheroo.
-
-***************
-*** 49,56 ****
-
- print OUT $line1;
- print OUT <<EOF;
-! 'di';
-! 'ig00';
- #
- # $header
- #
---- 49,58 ----
-
- print OUT $line1;
- print OUT <<EOF;
-! 'di ';
-! 'ds 00 \\"';
-! 'eo ';
-! 'ig 00 ';
- #
- # $header
- #
-***************
-*** 72,85 ****
-
- # These next few lines are legal in both Perl and nroff.
-
-! $null.00; # finish .ig
-
- 'di \\" finish diversion--previous line must be blank
- .nr nl 0-1 \\" fake up transition to first page again
- .nr % 0 \\" start at page 1
-! '; __END__ ##### From here on it's a standard manual page #####
- .TH $PROG 1 "$month $mday, 19$year"
-- .AT 3
- .SH NAME
- $prog \\- whatever
- .SH SYNOPSIS
---- 74,87 ----
-
- # These next few lines are legal in both Perl and nroff.
-
-! $null.00 ; # finish .ig
-! 'ec \\';
-
- 'di \\" finish diversion--previous line must be blank
- .nr nl 0-1 \\" fake up transition to first page again
- .nr % 0 \\" start at page 1
-! .\\"'; __END__ ##### From here on it's a standard manual page #####
- .TH $PROG 1 "$month $mday, 19$year"
- .SH NAME
- $prog \\- whatever
- .SH SYNOPSIS
-
-----------------------------------------------------------------------
-
-* groff uses up an enormous amount of memory processing large files.
- I'm using 386BSD 0.1.
-
-386BSD includes an old version of g++, 1.39, which has a bug that
-causes a major memory leak in gtroff. Apply the following fix to g++
-and recompile groff:
-
-*** cplus-decl.c.~1~ Mon Aug 6 05:28:59 1990
---- cplus-decl.c Wed Jun 5 08:55:04 1991
-***************
-*** 7951,7961 ****
-
- /* At the end, call delete if that's what's requested. */
- if (TREE_GETS_DELETE (current_class_type))
- exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
- get_identifier (OPERATOR_DELETE_FORMAT),
-! build_tree_list (NULL_TREE, integer_zero_node),
- NULL_TREE, LOOKUP_NORMAL);
- else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
- exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
- else
- exprstmt = 0;
---- 7951,7961 ----
-
- /* At the end, call delete if that's what's requested. */
- if (TREE_GETS_DELETE (current_class_type))
- exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
- get_identifier (OPERATOR_DELETE_FORMAT),
-! build_tree_list (NULL_TREE, current_class_decl),
- NULL_TREE, LOOKUP_NORMAL);
- else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
- exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
- else
- exprstmt = 0;
-
-
-
-Printing and Display Problems
-=============================
-
-
-
-* I'm having problems including PostScript illustrations (EPS) using
- the PSPIC macro and/or \X'ps: import ...'.
-
-A PostScript document must meet three requirements in order to be
-included with the PSPIC macro: it must comply with the Adobe Document
-Structuring Conventions; it must contain a BoundingBox line; it must
-be `well-behaved'. The BoundingBox line should be of the form:
-
- %%BoundingBox: llx lly urx ury
-
-where llx, lly, urx, ury are the coordinates of the lower left x,
-lower left y, upper right x, upper right y of the bounding box of
-marks on the page expressed as integers in the default PostScript
-coordinate system (72 units per inch, origin at bottom left corner).
-
-The most convenient program to get the bounding box of a document is
-the `ps2epsi' script coming with GhostScript.
-
-If you can't use this program, another useful tactic is to print out
-the illustration by itself (you may need to add a `showpage' at the
-end), and physically measure the bounding box. For more detail on
-these requirements, read the specification of Encapsulated PostScript
-format. (This is available from the Adobe file server; send a message
-with a body of `help' to ps-file-server@adobe.com.)
-
-If an EPS file to be included via \X'ps: import' does not start with
-`%!PS-Adobe-...', gtroff will still include the file, but grops will
-not add any fonts to the generated output file that are listed in the
-EPS file, even though the files are listed in the `download' file and
-are available in the devps directory.
-
-----------------------------------------------------------------------
-
-* I've configured groff for A4 paper, but gtroff still seems to think
- that the length of a page (as returned by `\n(.p') is 11 inches.
-
-This is intentional. The PAGE option during configuration is used
-only by grops. For compatibility with ditroff, the default page
-length in gtroff is always 11 inches. The page length can be changed
-with the `pl' request.
-
-A convenient way to set paper dimensions is to use the -dpaper option
-of groff, together with proper -P options for the postprocessor
-(overriding the default). For example, use the following for PS
-output on A4 paper in landscape orientation:
-
- groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-
-See groff_tmac(5) for more information.
-
-----------------------------------------------------------------------
-
-* When I print the output of groff -Tps, the output is always shifted
- up by about 0.7 inches; I'm using 8.5x11 inch paper.
-
-Make sure that the paper size is `letter'. See groff_tmac(5).
-
-----------------------------------------------------------------------
-
-* When I try to run gxditview, I get the error:
- Error: Widget viewport has zero width and/or height
-
-This error means you haven't correctly installed the application
-defaults file, GXditview.ad; `make install' does this for you
-automatically, so either you didn't do `make install', or you haven't
-passed a good `--appresdir=<DIR>' argument to groff's configure script.
-
-See the X(7) man page for information how and where application resource
-files have to be located. Look for the XAPPLRESDIR and XUSERFILESEARCHPATH
-environment variables.
-
-----------------------------------------------------------------------
-
-* When I preview documents using -TX75 or -TX100, the layout is not
- the same as when I print the document with -Tps: the line and page
- breaks come in different places.
-
-Use `groff -X -Tps'.
-
-----------------------------------------------------------------------
-
-* When I try to print the output of groff -Tps, I get no output at all
- from the printer, and the log file shows the error
- %%[ error: undefined; offendingcommand: BP ]%%
- I'm using TranScript spooling software.
-
-This is a bug in the page reversal filter in early versions of
-TranScript. Change the `broken' parameter in
-/usr/local/lib/groff/font/devps/DESC to 7.
-
-----------------------------------------------------------------------
-
-* When I preview groff -Tps output using the Sun OpenWindows 2.0
- pageview program, all the pages are displayed on top of each other.
-
-This is a defect in pageview. Change the `broken' parameter in
-/usr/local/lib/groff/font/devps/DESC to 2.
-
-----------------------------------------------------------------------
-
-* With groff -TX75, -TX100 or -X, I can only view the first page.
-
-The left mouse button brings up a menu that allows you to view other
-pages.
-
-----------------------------------------------------------------------
-
-* When I print the output of groff -Tdvi, I just get a black dot in
- upper left corner.
-
-Some dvi drivers (notably early versions of xtex) do not correctly
-handle dvi files that use a resolution different from that used by dvi
-files produced by TeX. Try getting a more up to date driver.
-
-----------------------------------------------------------------------
-
-* How can I use groff with an old LaserJet printer that doesn't work
- with groff -Tlj4?
-
-You have at least 3 options:
-
-- use groff -Tps with GNU Ghostscript;
-
-- use groff -Tdvi with a TeX .dvi to Laserjet driver;
-
-- use groff with the LaserJet driver in Chris Lewis' psroff package
- (available for ftp from:
- ftp.uunet.ca:/distrib/chris_lewis/psroff3.0pl17).
-
-----------------------------------------------------------------------
-
-* Groff seems to generate level 3 Postscript, but my printer is only a
- level 1 or 2 PostScript printer.
-
-In fact groff generates only level 2 PostScript (or rather level 1
-with some extensions; see grops(1) for more information how to disable
-them). The `%!PS-Adobe-3.0' comment at the beginning of PostScript
-output generated by groff indicates that the file conforms to
-version 3.0 of the Adobe Document Structuring Conventions. The output
-generated by groff should be printable on any PostScript printer.
-Problems with groff output's not printing are most often caused by the
-spooling system.
-
-
-
-Platform-Dependent Macro Problems
-=================================
-
-
-
-* I get lots of errors when I use groff with the AT&T -mm macros.
-
-Use the groff -mm macros.
-
-----------------------------------------------------------------------
-
-* groff produces wrapper macros for `ms' and friends which call the
- system's original macros. Then, to get groff's ms macro package I
- have to use `-mgs' instead `-ms'. Can I avoid this?
-
-Yes. Configure and compile groff as usual, but install it with
-
- make install tmac_wrap=""
-
-Then no wrapper files are produced, and `-ms' will use groff's `ms'
-macros.
-
-----------------------------------------------------------------------
-
-* I'm having problems formatting HP-UX 9.0 man pages with groff -man.
-
-Copy HP's tmac.an into /usr/local/share/groff/site-tmac/an.tmac, and
-either put `.cp 1' at the beginning or filter it (and any files it
-.so's) through tmac/fixmacros.sed.
-
-----------------------------------------------------------------------
-
-* I get errors using the Unix -ms macros with groff -e -C.
-
-Apply this change:
-
-*** /usr/lib/ms/ms.eqn Tue Apr 25 02:14:28 1989
---- ms.eqn Sun Nov 11 10:33:59 1990
-***************
-*** 22,29 ****
- ..
- . \" EN - end of a displayed equation
- .de EN
-! .if !\\*(10 .br
- .di
- .rm EZ
- .nr ZN \\n(dn
- .if \\n(ZN>0 .if \\n(YE=0 .LP
---- 22,30 ----
- ..
- . \" EN - end of a displayed equation
- .de EN
-! .if \\n(.k>0 .br
- .di
-+ .ds 10 \\*(EZ\\
- .rm EZ
- .nr ZN \\n(dn
- .if \\n(ZN>0 .if \\n(YE=0 .LP
-
-----------------------------------------------------------------------
-
-* I'm having problems formatting Ultrix man pages with groff -man.
-
-The Ultrix man pages use a number of non-standard extensions to the
-Unix man macros. One solution is to use the Ultrix -man macros with
-groff. Copy /usr/lib/tmac/tmac.an to
-/usr/local/share/groff/site-tmac/an.tmac and apply the following patch
-(from Frank Wortner):
-
-*** /usr/local/lib/groff/tmac/tmac.an Wed Sep 9 12:29:28 1992
---- /usr/lib/tmac/tmac.an Fri Jul 24 19:58:19 1992
-***************
-*** 489,495 ****
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
-! .if \\$12 .if !\\$5 .ds ]F \^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
---- 489,495 ----
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
-! .if \\$12 .if !\\$5 .ds ]F\^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
-
-Another possible solution is to install tmac/man.ultrix as
-/usr/local/share/groff/site-tmac/man.local.
-
-----------------------------------------------------------------------
-
-* On an SGI system, how can I make the man command use groff?
-
-From David Hinds <dhinds@allegro.stanford.edu> (some of these steps
-are unnecessary if you install with the `g' Makefile variable defined
-as empty):
-
-Create a script called 'eqn':
-
- > #! /bin/sh
- > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
- > geqn $*
-
-and a script called 'neqn':
-
- > #! /bin/sh
- > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
- > geqn -Tascii $*
-
-and do:
-
- > ln -s gnroff nroff
-
-and edit the end of the gnroff script to be:
-
- > rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
- > exec groff -Wall -mtty-char $T $opts $rest
-
-To get PostScript output from 'man -t', you also need to create a
-'psroff' script similar to 'nroff'. Here are the context diffs:
-
-*** /usr/local/bin/nroff Sat Feb 13 15:51:09 1993
---- /usr/local/bin/psroff Sat Feb 13 17:45:46 1993
-***************
-*** 1,8 ****
- #! /bin/sh
-! # Emulate nroff with groff.
-
- prog="$0"
-! T=-Tascii
- opts=
-
- for i
---- 1,8 ----
- #! /bin/sh
-! # Emulate psroff with groff.
-
- prog="$0"
-! T=-Tps
- opts=
-
- for i
-***************
-*** 25,30 ****
---- 25,33 ----
- -Tascii|-Tlatin1)
- T=$1
- ;;
-+ -t)
-+ # ignore -- default is send to stdout
-+ ;;
- -T*)
- # ignore other devices
- ;;
-***************
-*** 49,53 ****
- rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
-
- # This shell script is intended for use with man, so warnings are
- # probably not wanted. Also load nroff-style character definitions.
-! exec groff -Wall -mtty-char $T $opts $rest
---- 52,56 ----
- rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
-
- # This shell script is intended for use with man, so warnings are
-! # probably not wanted.
-! exec groff -Wall $T $opts $rest
-
-
-
-Compilation Problems
-====================
-
-
-
-* Compilation dies with
-
- y.tab.c: In function `int yyparse()':
- y.tab.c: `size_t' undeclared in namespace `std'
-
-* bison reports conflicts (either on stderr or in the `pic.output'
- file) while processing `pic.y', and the produced pic binary doesn't
- work at all.
-
-You need bison version 1.875b or greater. Alternatively, use yacc or
-byacc.
-
-----------------------------------------------------------------------
-
-* There are many empty `Makefile.dep' files. Is this a bug?
-
-No. Real dependency files are created with a `make depend' call.
-
-----------------------------------------------------------------------
-
-* On HP-UX, the compiler complains about missing symbol `alloca'.
-
-Say
-
- export LDFLAGS=-lPW
-
-before starting the configure script.
-
-----------------------------------------------------------------------
-
-* The configure script fails on OS/390 (z/OS) Unix.
-
-[This has been fixed in z/OS V1R3 (aka OS/390 R13).]
-
-There is a bug in the Language Environment (LE) whereby the test
-program for static destructors fails. You will see the message
-`configure: error: a working C++ compiler is required'
-
-Applying PTF UQ42006 is supposed to fix this, but the test program is
-still returning the wrong value (1). To work around this problem, you
-can comment out the following in the configure script (near line 2029).
-This will effectively bypass the test (static constructors and
-destructors do actually work properly):
-
-#if { (eval echo "$as_me:2029: \"$ac_link\"") >&5
-# (eval $ac_link) 2>&5
-# ac_status=$?
-# echo "$as_me:2032: \$? = $ac_status" >&5
-# (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-# { (eval echo "$as_me:2034: \"$ac_try\"") >&5
-# (eval $ac_try) 2>&5
-# ac_status=$?
-# echo "$as_me:2037: \$? = $ac_status" >&5
-# (exit $ac_status); }; }; then
-# echo "$as_me:2039: result: yes" >&5
-#echo "${ECHO_T}yes" >&6
-#else
-# echo "$as_me: program exited with status $ac_status" >&5
-#echo "$as_me: failed program was:" >&5
-#cat conftest.$ac_ext >&5
-#echo "$as_me:2045: result: no" >&5
-#echo "${ECHO_T}no" >&6;{ { echo "$as_me:2046: error: a working C++ compiler is required" >&5
-#echo "$as_me: error: a working C++ compiler is required" >&2;}
-# { (exit 1); exit 1; }; }
-#fi
-
-----------------------------------------------------------------------
-
-* I get errors when I try to compile groff with DEC C++.
-
-Fix the declaration of write() in <unistd.h> so that the second
-argument is a const char *. Fix the declaration of open() in
-<sys/file.h> so that the first argument is a const char *.
-
-----------------------------------------------------------------------
-
-* On a host using Unix make (e.g. Solaris), if you are compiling for
- multiple architectures by building in a subdirectory, the make stops
- with a message like this:
-
- make: Fatal error: Don't know how to make target `assert.o'
-
- or like this:
-
- make: Fatal error: Can't find /u/src/groff/src/include/Makefile.sub': No such file or directory
-
-This occurs because GNU make and Unix make handle VPATH differently,
-and the groff build relies on GNU make's VPATH handling.
-
-Use GNU make <http://www.gnu.org/software/make/> to work around this.
-In Solaris 8 and 9, GNU make is on the Software Companion CD in
-package SFWgmake and is installed as /opt/sfw/bin/gmake. Prebuilt
-versions of GNU make for Solaris are also available from
-sunfreeware.com.
-
-----------------------------------------------------------------------
-
-* On Ultrix, the make program stops with the message
-
- *** Error code 1
-
- Stop.
-
- for no apparent reason.
-
-Use GNU make.
-
-----------------------------------------------------------------------
-
-* I'm having problems compiling groff on 386BSD 0.1.
-
-If you're using ash as /bin/sh, you'll need the following patch.
-
-*** gendef.sh.org Sun Jun 30 13:30:36 1991
---- gendef.sh Sun Feb 28 10:23:49 1993
-***************
-*** 3,9 ****
- file=$1
- shift
-
-! defs="#define $1"
- shift
- for def
- do
---- 3,10 ----
- file=$1
- shift
-
-! x=$1
-! defs="#define $x"
- shift
- for def
- do
-
-You'll also need to change dirnamemax.c so that it doesn't use
-pathconf().
-
-----------------------------------------------------------------------
-
-* While compiling on Xenix, ranlib libgroff.a fails.
-
-The system ranlib can't handle externals longer than 40 characters.
-Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
-instead.
-
-----------------------------------------------------------------------
-
-* I get errors when I try to compile groff with Sun C++ version 3 or
- earlier.
-
-Groff requires header files that are moderately compatible with AT&T
-C++ and ANSI C. With some versions of Sun C++, the supplied header
-files need some of the following changes to meet this requirement:
-<string.h> must declare the mem* functions, (just add `#include
-<memory.h>' to <string.h>); the first argument to fopen and freopen
-should be declared as `const char *'; the first argument to fread
-should be declared as `void *'; the first argument to fwrite should be
-declared as `const void *'; malloc should be declared to return
-`void *'; in <alloca.h>, the declaration `extern "C" { void
-*__builtin_alloca(int); }' should be added; in <sys/signal.h> the
-return type and the second argument type of signal() should be changed
-to be `void (*)(int)'.
-
-You can either change them in place, or copy them to some other
-directory and include that directory with a -I option.
-
-----------------------------------------------------------------------
-
-* I get errors when I try to compile groff with Forte Development 6
- or 6u1, or Sun C++ version 5.0 through 5.2.
-
-This is a known problem; see Sun bug #4301919. See Sun patches
-109482, 109490, 109508, and 109509 for fixes.
-
-----------------------------------------------------------------------
-
-* I get warnings from the Sun linker while using gcc 3.4.0:
-
- ld: warning: relocation error: R_SPARC_UA32:
- file groff/src/libs/libgroff/libgroff.a(getopt.o): symbol optarg:
- external symbolic relocation against non-allocatable
- section .debug_info; cannot be processed at runtime:
- relocation ignored
-
-This seems to be a known problem (Sun bugs #4910101 and #4910810,
-filed in September 2003; gcc bug #15599, filed May 2004) without a
-public fix as of this writing. A work-around is to use option
-`-gstabs+' instead of `-g' (and a high probability that the output is
-only debuggable with gdb but not with Sun's debuggers).
-
-----------------------------------------------------------------------
-
-* I get lots of `numeric overflow' error messages whenever I run
- groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
-
-Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
-Makefile. If that doesn't solve the problem, define INT_MIN as
--INT_MAX in libgroff/lib.h.
-
-----------------------------------------------------------------------
-
-* When compiling on MacOS X, groff compiles but does not run well,
- especially `eqn', causing many `can't break line' messages.
-
-Use ./configure CXX=g++2 then make as usual.
diff --git a/contrib/groff/PROJECTS b/contrib/groff/PROJECTS
deleted file mode 100644
index 99b215f5ec45..000000000000
--- a/contrib/groff/PROJECTS
+++ /dev/null
@@ -1,14 +0,0 @@
-Here are some things that would be useful additions to groff:
-
- ideal preprocessor
-
- -mv macros (for typesetting viewgraphs and slides)
-
- a deroff that understands long names
-
- a page-makeup postprocessor and associated macro package
- (like pm and -mpm)
-
-If you want to work on one of these, you should probably post to
-gnu.groff.bug (or send email to bug-groff@gnu.org) to see if anyone else
-has gotten there first.
diff --git a/contrib/groff/README b/contrib/groff/README
deleted file mode 100644
index 5f80eaf589af..000000000000
--- a/contrib/groff/README
+++ /dev/null
@@ -1,134 +0,0 @@
-This is the GNU `groff' document formatting system. The version
-number is given in the file VERSION.
-
-Included in this release are implementations of `troff', `pic', `eqn',
-`tbl', `grn', `refer', `-man', `-mdoc', `-mom', and `-ms' macros, and
-drivers for `PostScript', `TeX dvi' format, `HP LaserJet 4' printers,
-`Canon CAPSL' printers, `HTML' format (beta status), and
-typewriter-like devices. Also included is a modified version of the
-Berkeley `-me' macros, the enhanced version `gxditview' of the X11
-`xditview' previewer, and an implementation of the `-mm' macros
-contributed by Joergen Haegg (jh@axis.se).
-
-See the file `INSTALL' for installation instructions. You will
-require a C++ compiler.
-
-The file `NEWS' describes recent user-visible changes to `groff'.
-
-`groff' is free software. See the file `COPYING' for copying
-permission.
-
-The file `PROBLEMS' describes various problems that have been
-encountered in compiling, installing, and running `groff'.
-
-The most recent released version of `groff' is always available by
-anonymous ftp from `ftp.gnu.org' in the directory `gnu/groff'.
-
-The current development version of `groff' is available from a `CVS'
-repository. You can access it by first selecting a parent directory
-in which to create a working copy (call it, say, `~/cvswork'), and
-then executing the commands
-
- cd ~/cvswork
- CVS_RSH=ssh; export CVS_RSH
- cvs -d:ext:anoncvs@savannah.gnu.org/cvsroot/groff -z5 co groff
-
-(Note that you need an `ssh' client for security reasons.)
-
-This will create a subdirectory, `~/cvswork/groff', with a "checked
-out" copy of the `CVS' repository. An update of this working copy may
-be achieved, at any later time by invoking the commands
-
- cd ~/cvswork/groff
- CVS_RSH=ssh cvs -z5 update -dP
-
-Please read the `CVS' info pages for further details.
-
-Finally, it is possible to access the `CVS' with a web browser by
-pointing it to
-
- http://savannah.gnu.org/cvs/?group=groff
-
-Alternatively, you can download snapshots (which are updated twice a day).
-The complete `groff' source as a single file is available at
-
- http://groff.ffii.org/groff/devel/groff-current.tar.gz
-
-A diff file relative to `groff-<version>', the latest official `groff'
-release is available at
-
- http://groff.ffii.org/groff/devel/groff-<version>-current.diff.gz
-
-Assuming that `groff-<version>.tar.gz' and
-`groff-<version>-current.diff.gz' are in the same directory, do the
-following to apply the diff file:
-
- tar xzvf groff-<version>.tar.gz
- cd groff-<version>
- gunzip -c ../groff-<version>-current.diff.gz | patch -p1
-
-Depending on your requirements, you may need at least some of the
-following tools to build `groff' directly from its source:
-
- ghostscript
- the psutils package
- the netpbm package
- texinfo 4.8
- bison >= 1.875b or byacc
-
-Note that `texinfo' and `bison' or `byacc' are required only for
-building from `CVS' sources (either a checked out working copy, or a
-daily snapshot). They are not required for building from a stable
-release tarball. Also note that the version numbers stated are the
-minimum supported. No version of `texinfo' < 4.8 will work, and the
-original release of `bison' 1.875 is known not to work; you *may* find
-that `bison' releases < 1.875 will work, but in case of difficulty,
-please update to a later version *before* posting a bug report.
-
-For *all* sources, you need ghostscript for creation of either `PDF' or
-`HTML' output; the `netpbm' and `psutils' packages are required only for
-`HTML' output. If you don't intend to produce output in either of these
-formats, then these packages are unnecessary.
-
-In Linux Debian, the installation of `texinfo' is dangerous. For it
-creates a file `install-info' that will block the system installation.
-So the created `/usr/local/bin/install-info' must be renamed.
-
-The `groff' configure script searches for the X11 headers and
-libraries `Xaw' and `Xmu'. So the corresponding developer packages of
-your system must be installed, otherwise `groff' does not install
-`gxditview' and the `-TX*' devices. In Debian, the developer packages
-are `libxaw7-dev' and `libxmu-dev'.
-
-Please report bugs using the form in the file `BUG-REPORT'; the idea of
-this is to make sure that FSF has all the information it needs to fix
-the bug. At the very least, read the `BUG-REPORT' form and make sure
-that you supply all the information that it asks for. Even if you are
-not sure that something is a bug, report it using `BUG-REPORT': this will
-enable us to determine whether it really is a bug or not.
-
-Three mailing lists are available:
-
- bug-groff@gnu.org for reporting bugs
- groff@gnu.org for general discussion of groff
- groff-commit@gnu.org a read-only list showing commitments
- to the CVS repository
-
-You can post mails directly to the `bug-groff' list, without subscribing;
-to post mails to the `groff' list you must subscribe to it.
-
-To subscribe, send a mail to <list>-request@<domain> (example:
-groff-request@gnu.org for the `groff' list) with the word `subscribe'
-in either the subject or body of the email (don't include the quotes).
-Alternatively, you may subscribe by visiting the web pages at
-
- http://lists.gnu.org/mailman/listinfo/bug-groff
- http://lists.gnu.org/mailman/listinfo/groff
- http://lists.gnu.org/mailman/listinfo/groff-commit
-
-Each of these web pages also provides a link to a browseable archive of
-postings to the corresponding mailing list.
-
-GNU `groff' was written by James Clark <jjc@jclark.com>. It is now
-maintained by Ted Harding <ted.harding@nessie.mcc.ac.uk> and Werner
-Lemberg <wl@gnu.org>.
diff --git a/contrib/groff/README.MinGW b/contrib/groff/README.MinGW
deleted file mode 100644
index 342aac229af9..000000000000
--- a/contrib/groff/README.MinGW
+++ /dev/null
@@ -1,277 +0,0 @@
- README.MinGW
- ============
-
- Contributed by Keith Marshall (keith.d.marshall@ntlworld.com)
-
-
- INTRODUCTION
- ------------
-
- This file provides recommendations for building a Win32 implementation of
- GNU Groff, using the MinGW port of GCC for Microsoft (TM) Windows-32
- platforms. It is intended to supplement the standard installation
- instructions (see file INSTALL); it does not replace them.
-
- You require both the MinGW implementation of GCC and its supporting MSYS
- toolkit, which provides a Win-32 implementation of the GNU bash shell, and a
- few other essential utilities; these may be obtained from
-
- http://sourceforge.net/projects/mingw
-
- by following the appropriate download links, where they are available as
- self-extracting executable installation packages. If installing both from
- scratch, it is recommended that MinGW is installed first, as the MSYS
- installer can then automatically set up the proper environment for running
- MinGW.
-
- Additionally, if you wish to compile groff with support for its HTML output
- capability, some additional tools are required as decribed in the section
- PREREQUISITES FOR HTML OUTPUT later in this file.
-
-
- BUILDING GROFF WITH MINGW
- -------------------------
-
- Assuming that you have obtained the appropriate groff distribution, and that
- you are already running an MSYS shell, then the configuration, compilation,
- and installation of groff, using MinGW, is performed in much the same way as
- it is described in the INSTALL file, which is provided with the groff
- distribution. The installation steps are summarised below:
-
- 1. Change working directory to any suitable location where you may unpack
- the groff distribution; you must be authorized for write access.
- Approximately 30MB of free disk space are needed.
-
- 2. Unpack the groff distribution:
-
- tar xzf <download-path>/groff-<version>.tar.gz
-
- This creates a new sub-directory, groff-<version>, containing an image of
- the groff source tree. You should now change directory, to make this
- ./groff-<version> your working directory.
-
- 3. If you are intending to build groff with support for HTML output, then
- you must now ensure that the prerequisites described in the later section
- PREREQUISITES FOR HTML OUTPUT are satisfied, before proceeding to build
- groff; in particular, please ensure that all required support programs
- are installed in the current PATH.
-
- 4. You are now ready to configure, build, and install groff. This is
- accomplished using the conventional procedure, as described in the file
- INSTALL, i.e.
-
- ./configure --prefix=<win32-install-path> ...
- make
- make install
-
- Please observe the syntax for the configure command, indicated above; the
- default value for --prefix is not suitable for use with MinGW, so the
- --prefix=<win32-install-path> option must be specified, where
- <win32-install-path> is the chosen MS-Windows directory in which the
- groff application files are to be installed (see the later section
- entitled CHOOSING AN INSTALLATION PATH). Any other desired configuration
- options may also be specified, as described in the standard groff
- installation instructions.
-
- 5. After completing the above, groff should be successfully installed; the
- build directory is no longer required; it may be simply deleted in its
- entirety. Alternatively, you may choose to keep it, but to remove all
- files which can be reproduced later, by repeating the configure, make and
- make install steps; this is readily accomplished by the command
-
- make distclean
-
-
- This completes the installation of groff; please read the final sections of
- this file, GROFF RUNTIME ENVIRONMENT and CAVEATS AND BUGS, for advice on
- setting up the runtime environment, and avoiding known runtime problems,
- before running groff.
-
-
- CHOOSING AN INSTALLATION PATH
- -----------------------------
-
- It may be noted that the above instructions indicate that the ./configure
- command must be invoked with an argument specifying a preference for
- --prefix=<win32-install-path>, whereas the standard groff installation
- instructions indicate that this may be omitted, in which case it defaults to
- --prefix=/usr/local.
-
- In the case of building with MinGW, the default behaviour of configure is
- not appropriate for the following reasons.
-
- o The MSYS environment creates a virtual UNIX-like file system, with its
- root mapped to the actual MS-Windows directory where MSYS itself is
- installed; /usr is also mapped to this MSYS installation directory.
-
- o All of the MSYS tools, and the MinGW implementation of GCC, refer to files
- via this virtual file system representation; thus, if the
- --prefix=<win32-install-path> is not specified when groff is configured,
- `make install' causes groff to be installed in <MSYS-install-path>/local.
-
- o groff needs to know its own installation path, so that it can locate its
- own installed components. This information is compiled in, using the
- exact form specified with the --prefix=<win32-install-path> option to
- configure.
-
- o Knowledge of the MSYS virtual file system is not imparted to groff; it
- expects the compiled-in path to its components to be a fully qualified
- MS-Windows path name (although UNIX-style slashes are permitted, and
- preferred to the MS-Windows style backslashes, to demarcate the directory
- hierarchy). Thus, when configuring groff, if
- --prefix=<win32-install-path> is not correctly specified, then the
- installed groff application looks for its components in /usr/local, and
- most likely doesn't find them, because they are actually installed in
- <MSYS-install-path>/local.
-
- It is actually convenient, but by no means a requirement, to have groff
- installed in the /usr/local directory of the MSYS virtual file system; this
- makes it easy to invoke groff from the MSYS shell, since the virtual
- /usr/local/bin is normally added automatically to the PATH (the default
- PATH, as set in MSYS's /etc/profile), when MSYS is started.
-
- In order to install groff into MSYS's /usr/local directory, it is necessary
- to specify the fully qualified absolute MS-Windows path to this directory,
- when configuring groff, i.e.
-
- ./configure --prefix=<MSYS-install-path>/local ...
-
- For example, on a system where MSYS is installed in the MS-Windows directory
- D:\MSYS\1.0, the MSYS virtual path /usr/local resolves to the absolute
- MS-Windows native path D:\MSYS\1.0\local (the /usr component of the MSYS
- virtual path does not appear in the resolved absolute native path name since
- MSYS maps this directly to the root of the MSYS virtual file system). Thus,
- the --prefix option should be specified to configure as
-
- ./configure --prefix=D:/MSYS/1.0/local ...
-
- Note that the backslash characters, which appear in the native MS-Windows
- form of the path name, are replaced by UNIX-style slashes in the argument to
- configure; this is the preferred syntax.
-
- Also note that the MS-Windows device designator (D: in this instance) is
- prepended to the specified path, in the normal MS-Windows format, and that,
- since upper and lower case distinctions are ignored in MS-Windows path
- names, any combination of upper and lower case is acceptable.
-
-
- PREREQUISITES FOR HTML OUTPUT
- -----------------------------
-
- If you intend to use groff for production of HTML output, then there are a
- few dependencies which must be satisfied. Ideally, these should be resolved
- before attempting to configure and build groff, since the configuration
- script does check them.
-
- In order to produce HTML output, you first require a working implementation
- of Ghostscript; either the AFPL Ghostscript or the GNU Ghostscript
- implementation for MS-Windows should be suitable, depending on your
- licensing preference. It is highly recommended to use version 8.11 or
- higher due to bugs in older versions. These may be obtained, in the form of
- self-installing binary packages, by following the download links for the
- chosen licensing option, from http://sourceforge.net/projects/ghostscript.
-
- Please note that these packages install the Ghostscript interpreter required
- by groff in the ./bin subdirectory of the Ghostscript installation
- directory, with the name gswin32c.exe. However, groff expects this
- interpreter to be located in the system PATH, with the name gs.exe. Thus,
- to ensure that groff can correctly locate the Ghostscript interpreter, it is
- recommended that the file gswin32c.exe should be copied from the Ghostscript
- installation directory to the MSYS /usr/local/bin directory, where it should
- be renamed to gs.exe.
-
- In addition to a working Ghostscript interpreter, you also require several
- image manipulation utilities, all of which may be scavenged from various
- packages available from http://sourceforge.net/projects/gnuwin32, and which
- should be installed in the MSYS /usr/local/bin directory, or any other
- suitable directory which is specified in the PATH. These additional
- prerequisites are
-
- 1. from the netpbm-<version>-bin.zip package:
-
- netpbm.dll
- pnmcrop.exe
- pnmcut.exe
- pnmtopng.exe
- pnmtops.exe
-
- 2. from the libpng-<version>-bin.zip package:
-
- libpng.dll
-
- 3. from the zlib-<version>-bin.zip package:
-
- zlib-1.dll, which must be renamed to zlib.dll
-
- 4. from the psutils-<version>-bin.zip package:
-
- psselect.exe
-
- Note that it is not necessary to install the above four packages in their
- entirety; of course, you may do so if you wish.
-
-
- GROFF RUNTIME ENVIRONMENT
- -------------------------
-
- The runtime environment, provided to groff by MSYS, is essentially the same
- as would be provided under a UNIX or GNU/Linux operating system; thus, any
- environment variables which may be used to customize the groff runtime
- environment have similar effects under MSYS, as they would in UNIX or
- GNU/Linux, with the exception that any variable specifying a path should
- adopt the same syntax as a native MS-Windows PATH specification.
-
- There is, however, one known problem which is associated with the
- implementation of the MS-Windows file system, and the manner in which the
- Microsoft runtime library (which is used by the MinGW implementation of GCC)
- generates names for temporary files. This known problem arises when groff
- is invoked with a current working directory which refers to a network share,
- for which the user does not have write access in the root directory, and
- there is no environment variable set to define a writeable location for
- creating temporary files. When these conditions arise, groff fails with a
- `permission denied' error, as soon as it tries to create any temporary file.
-
- To specify the location for creating temporary files, the standard UNIX or
- GNU/Linux implementation of groff provides the GROFF_TMPDIR or TMPDIR
- environment variables, whereas MS-Windows applications generally use TMP or
- TEMP; furthermore, the MS-Windows implementations of Ghostscript apparently
- support the use of only TEMP or TMPDIR.
-
- To avoid problems with creation of temporary files, it is recommended that
- you ensure that both TMP and TEMP are defined, with identical values, to
- point to a suitable location for creating temporary files; many MS-Windows
- boxes have them set already, and groff has been adapted to honour them, when
- built in accordance with the preceding instructions, using MinGW.
-
-
- CAVEATS AND BUGS
- ----------------
-
- There are two known issues, observed when running groff in the MinGW/MSYS
- environment, which would not affect groff in its native UNIX environment:
-
- o Running groff with the working directory set to a subdirectory of a
- network share, where the user does not have write permission in the root
- directory of the share, causes groff to fail with a `permission denied'
- exception, if the TMP environment variable is not appropriately defined;
- it may also be necessary to define the TEMP environment variable, to avoid
- a similar failure mode, when using the -Thtml output mode of groff. This
- problem is more fully discussed in the preceding section, GROFF RUNTIME
- ENVIRONMENT.
-
- o When running groff (or nroff) to process standard input, where the
- standard input stream is obtained directly from the RXVT console provided
- with MSYS, groff cannot detect the end-of-file condition for the standard
- input stream, and hangs. This appears to be caused by a fault in the MSYS
- implementation of RXVT; it may be worked around by either starting MSYS
- without RXVT (see the comments in the MSYS.BAT startup script); in this
- case standard input is terminated by typing <Ctrl-Z> followed by <RETURN>,
- on a new input line. Alternatively, if you prefer to use MSYS with RXVT,
- you can enter the interactive groff command in the form
-
- cat | groff ...
-
- in which case <Ctrl-D> terminates the standard input stream, in just the
- same way it does on a UNIX system; the cat executable provided with MSYS
- does seem to trap the end-of-file condition, and properly signals groff
- that the input stream has terminated.
diff --git a/contrib/groff/REVISION b/contrib/groff/REVISION
deleted file mode 100644
index 0cfbf08886fc..000000000000
--- a/contrib/groff/REVISION
+++ /dev/null
@@ -1 +0,0 @@
-2
diff --git a/contrib/groff/TODO b/contrib/groff/TODO
deleted file mode 100644
index 4e4c6f7db11e..000000000000
--- a/contrib/groff/TODO
+++ /dev/null
@@ -1,25 +0,0 @@
-Unicode input:
- Making groff 21bit input-clean.
-
-Make -Tlj4 work with -X.
-
-Guess man5ext and man7ext variables.
-
-Provide man.sun implementing .TX.
-
-Improve GROFF_PRINT macro in aclocal.m4.
-
-Provide a `check' target.
-
-Provide a `bindist' target.
-
-Implement tmac.bib in terms of tmac.s.
-
-Support long options using GNU getopt.
-
-Catch the following error in -me:
-.(z
-.(l C
-.)z
-
-Arrows for next/previous page from R5 xditview.
diff --git a/contrib/groff/VERSION b/contrib/groff/VERSION
deleted file mode 100644
index bc4493477aed..000000000000
--- a/contrib/groff/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.19
diff --git a/contrib/groff/aclocal.m4 b/contrib/groff/aclocal.m4
deleted file mode 100644
index 7e22633eefc3..000000000000
--- a/contrib/groff/aclocal.m4
+++ /dev/null
@@ -1,1152 +0,0 @@
-# Autoconf macros for groff.
-# Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-AC_DEFUN([GROFF_PRINT],
- [if test -z "$PSPRINT"; then
- AC_CHECK_PROGS([LPR], [lpr])
- AC_CHECK_PROGS([LP], [lp])
- if test -n "$LPR" && test -n "$LP"; then
- # HP-UX provides an lpr command that emulates lpr using lp,
- # but it doesn't have lpq; in this case we want to use lp
- # rather than lpr.
- AC_CHECK_PROGS([LPQ], [lpq])
- test -n "$LPQ" || LPR=
- fi
- if test -n "$LPR"; then
- PSPRINT="$LPR"
- elif test -n "$LP"; then
- PSPRINT="$LP"
- fi
- fi
- AC_SUBST([PSPRINT])
- AC_MSG_CHECKING([for command to use for printing PostScript files])
- AC_MSG_RESULT([$PSPRINT])
-
- # Figure out DVIPRINT from PSPRINT.
- AC_MSG_CHECKING([for command to use for printing dvi files])
- if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
- if test "x$PSPRINT" = "xlpr"; then
- DVIPRINT="lpr -d"
- else
- DVIPRINT="$PSPRINT"
- fi
- fi
- AC_SUBST([DVIPRINT])
- AC_MSG_RESULT([$DVIPRINT])])
-
-# Bison generated parsers have problems with C++ compilers other than g++.
-# So byacc is preferred over bison.
-
-AC_DEFUN([GROFF_PROG_YACC],
- [AC_CHECK_PROGS([YACC], [byacc 'bison -y'], [yacc])])
-
-# The following programs are needed for grohtml.
-
-AC_DEFUN([GROFF_HTML_PROGRAMS],
- [AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH])
- make_html=html
- make_install_html=install_html
-
- missing=
- AC_FOREACH([groff_prog],
- [pnmcut pnmcrop pnmtopng psselect pnmtops],
- [AC_CHECK_PROG(groff_prog, groff_prog, [found], [missing])
- if test $[]groff_prog = missing; then
- missing="$missing \`groff_prog'"
- fi;])
-
- test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'"
-
- if test -n "$missing"; then
- plural=`set $missing; test $[#] -gt 1 && echo s`
- missing=`set $missing
- missing=""
- while test $[#] -gt 0
- do
- case $[#] in
- 1) missing="$missing$[1]" ;;
- 2) missing="$missing$[1] and " ;;
- *) missing="$missing$[1], " ;;
- esac
- shift
- done
- echo $missing`
-
- make_html=
- make_install_html=
-
- AC_MSG_WARN([missing program$plural:
-
- The program$plural
- $missing
- cannot be found in the PATH.
- Consequently, groff's HTML backend (grohtml) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in HTML format.
- ])
- fi
-
- AC_SUBST([make_html])
- AC_SUBST([make_install_html])])
-
-# To produce PDF docs, we need both awk and ghostscript.
-
-AC_DEFUN([GROFF_PDFDOC_PROGRAMS],
- [AC_REQUIRE([GROFF_AWK_PATH])
- AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH])
-
- make_pdfdoc=pdfdoc
- make_install_pdfdoc=install_pdfdoc
-
- missing=""
- test "$AWK" = missing && missing="\`awk'"
- test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'"
- if test -n "$missing"; then
- plural=`set $missing; test $[#] -eq 2 && echo s`
- test x$plural = xs \
- && missing=`set $missing; echo "$[1] and $[2]"` \
- || missing=`echo $missing`
-
- make_pdfdoc=
- make_install_pdfdoc=
-
- AC_MSG_WARN([missing program$plural:
-
- The program$plural $missing cannot be found in the PATH.
- Consequently, groff's PDF formatter (pdfroff) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in PDF format.
- ])
- fi
-
- AC_SUBST([make_pdfdoc])
- AC_SUBST([make_install_pdfdoc])])
-
-# Check whether pnmtops can handle the -nosetpage option.
-
-AC_DEFUN([GROFF_PNMTOPS_NOSETPAGE],
- [AC_MSG_CHECKING([whether pnmtops can handle the -nosetpage option])
- if echo P2 2 2 255 0 1 2 0 | pnmtops -nosetpage > /dev/null 2>&1 ; then
- AC_MSG_RESULT([yes])
- pnmtops_nosetpage="pnmtops -nosetpage"
- else
- AC_MSG_RESULT([no])
- pnmtops_nosetpage="pnmtops"
- fi
- AC_SUBST([pnmtops_nosetpage])])
-
-# Check location of `gs'; allow `--with-gs=PROG' option to override.
-
-AC_DEFUN([GROFF_GHOSTSCRIPT_PATH],
- [AC_REQUIRE([GROFF_GHOSTSCRIPT_PREFS])
- AC_ARG_WITH([gs],
- [AS_HELP_STRING([--with-gs=PROG],
- [actual [/path/]name of ghostscript executable])],
- [GHOSTSCRIPT=$withval],
- [AC_CHECK_TOOLS(GHOSTSCRIPT, [$ALT_GHOSTSCRIPT_PROGS], [missing])])
- test "$GHOSTSCRIPT" = "no" && GHOSTSCRIPT=missing])
-
-# Preferences for choice of `gs' program...
-# (allow --with-alt-gs="LIST" to override).
-
-AC_DEFUN([GROFF_GHOSTSCRIPT_PREFS],
- [AC_ARG_WITH([alt-gs],
- [AS_HELP_STRING([--with-alt-gs=LIST],
- [alternative names for ghostscript executable])],
- [ALT_GHOSTSCRIPT_PROGS="$withval"],
- [ALT_GHOSTSCRIPT_PROGS="gs gswin32c gsos2"])
- AC_SUBST([ALT_GHOSTSCRIPT_PROGS])])
-
-# Check location of `awk'; allow `--with-awk=PROG' option to override.
-
-AC_DEFUN([GROFF_AWK_PATH],
- [AC_REQUIRE([GROFF_AWK_PREFS])
- AC_ARG_WITH([awk],
- [AS_HELP_STRING([--with-awk=PROG],
- [actual [/path/]name of awk executable])],
- [AWK=$withval],
- [AC_CHECK_TOOLS(AWK, [$ALT_AWK_PROGS], [missing])])
- test "$AWK" = "no" && AWK=missing])
-
-# Preferences for choice of `awk' program; allow --with-alt-awk="LIST"
-# to override.
-
-AC_DEFUN([GROFF_AWK_PREFS],
- [AC_ARG_WITH([alt-awk],
- [AS_HELP_STRING([--with-alt-awk=LIST],
- [alternative names for awk executable])],
- [ALT_AWK_PROGS="$withval"],
- [ALT_AWK_PROGS="gawk mawk nawk awk"])
- AC_SUBST([ALT_AWK_PROGS])])
-
-# GROFF_CSH_HACK(if hack present, if not present)
-
-AC_DEFUN([GROFF_CSH_HACK],
- [AC_MSG_CHECKING([for csh hash hack])
-
-cat <<EOF >conftest.sh
-#! /bin/sh
-true || exit 0
-export PATH || exit 0
-exit 1
-EOF
-
- chmod +x conftest.sh
- if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1; then
- AC_MSG_RESULT([yes])
- $1
- else
- AC_MSG_RESULT([no])
- $2
- fi
- rm -f conftest.sh])
-
-# From udodo!hans@relay.NL.net (Hans Zuidam)
-
-AC_DEFUN([GROFF_ISC_SYSV3],
- [AC_MSG_CHECKING([for ISC 3.x or 4.x])
- if grep ['[34]\.'] /usr/options/cb.name >/dev/null 2>&1
- then
- AC_MSG_RESULT([yes])
- AC_DEFINE([_SYSV3], [1], [Define if you have ISC 3.x or 4.x.])
- else
- AC_MSG_RESULT([no])
- fi])
-
-AC_DEFUN([GROFF_POSIX],
- [AC_MSG_CHECKING([whether -D_POSIX_SOURCE is necessary])
- AC_LANG_PUSH([C++])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <stdio.h>
-extern "C" { void fileno(int); }
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([_POSIX_SOURCE], [1],
- [Define if -D_POSIX_SOURCE is necessary.])],
- [AC_MSG_RESULT([no])])
- AC_LANG_POP([C++])])
-
-# srand() of SunOS 4.1.3 has return type int instead of void
-
-AC_DEFUN([GROFF_SRAND],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([for return type of srand])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <stdlib.h>
-extern "C" { void srand(unsigned int); }
-
- ]])
- ],
- [AC_MSG_RESULT([void])
- AC_DEFINE([RET_TYPE_SRAND_IS_VOID], [1],
- [Define if srand() returns void not int.])],
- [AC_MSG_RESULT([int])])
- AC_LANG_POP([C++])])
-
-# In April 2005, autoconf's AC_TYPE_SIGNAL is still broken.
-
-AC_DEFUN([GROFF_TYPE_SIGNAL],
- [AC_MSG_CHECKING([for return type of signal handlers])
- for groff_declaration in \
- 'extern "C" void (*signal (int, void (*)(int)))(int);' \
- 'extern "C" void (*signal (int, void (*)(int)) throw ())(int);' \
- 'void (*signal ()) ();'
- do
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-$groff_declaration
-
- ]],
- [[
-
-int i;
-
- ]])
- ],
- [break],
- [continue])
- done
-
- if test -n "$groff_declaration"; then
- AC_MSG_RESULT([void])
- AC_DEFINE([RETSIGTYPE], [void],
- [Define as the return type of signal handlers
- (`int' or `void').])
- else
- AC_MSG_RESULT([int])
- AC_DEFINE([RETSIGTYPE], [int],
- [Define as the return type of signal handlers
- (`int' or `void').])
- fi])
-
-AC_DEFUN([GROFF_SYS_NERR],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([for sys_nerr in <errno.h>, <stdio.h>, or <stdlib.h>])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
- ]],
- [[
-
-int k;
-k = sys_nerr;
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_SYS_NERR], [1],
- [Define if you have sys_nerr in <errno.h>, <stdio.h>, or <stdio.h>.])],
- [AC_MSG_RESULT([no])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_SYS_ERRLIST],
- [AC_MSG_CHECKING([for sys_errlist[] in <errno.h>, <stdio.h>, or <stdlib.h>])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
- ]],
- [[
-
-int k;
-k = (int)sys_errlist[0];
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_SYS_ERRLIST], [1],
- [Define if you have sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>.])],
- [AC_MSG_RESULT([no])])])
-
-AC_DEFUN([GROFF_OSFCN_H],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([C++ <osfcn.h>])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <osfcn.h>
-
- ]],
- [[
-
-read(0, 0, 0);
-open(0, 0);
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_CC_OSFCN_H], [1],
- [Define if you have a C++ <osfcn.h>.])],
- [AC_MSG_RESULT([no])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_LIMITS_H],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([C++ <limits.h>])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <limits.h>
-
- ]],
- [[
-
-int x = INT_MIN;
-int y = INT_MAX;
-int z = UCHAR_MAX;
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_CC_LIMITS_H], [1],
- [Define if you have a C++ <limits.h>.])],
- [AC_MSG_RESULT([no])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_TIME_T],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([for declaration of time_t])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <time.h>
-
- ]],
- [[
-
-time_t t = time(0);
-struct tm *p = localtime(&t);
-
- ]])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_DEFINE([LONG_FOR_TIME_T], [1],
- [Define if localtime() takes a long * not a time_t *.])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_STRUCT_EXCEPTION],
- [AC_MSG_CHECKING([struct exception])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <math.h>
-
- ]],
- [[
-
-struct exception e;
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_STRUCT_EXCEPTION], [1],
- [Define if <math.h> defines struct exception.])],
- [AC_MSG_RESULT([no])])])
-
-AC_DEFUN([GROFF_ARRAY_DELETE],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([whether ANSI array delete syntax is supported])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM(, [[
-
-char *p = new char[5];
-delete [] p;
-
- ]])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_DEFINE([ARRAY_DELETE_NEEDS_SIZE], [1],
- [Define if your C++ doesn't understand `delete []'.])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_TRADITIONAL_CPP],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([traditional preprocessor])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#define name2(a, b) a/**/b
-
- ]],
- [[
-
-int name2(foo, bar);
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([TRADITIONAL_CPP], [1],
- [Define if your C++ compiler uses a traditional (Reiser) preprocessor.])],
- [AC_MSG_RESULT([no])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_WCOREFLAG],
- [AC_MSG_CHECKING([w_coredump])
- AC_RUN_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
- ]],
- [[
-
-main()
-{
-#ifdef WCOREFLAG
- exit(1);
-#else
- int i = 0;
- ((union wait *)&i)->w_coredump = 1;
- exit(i != 0200);
-#endif
-}
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE(WCOREFLAG, 0200,
- [Define if the 0200 bit of the status returned by wait() indicates
- whether a core image was produced for a process that was terminated
- by a signal.])],
- [AC_MSG_RESULT([no])],
- [AC_MSG_RESULT([no])])])
-
-AC_DEFUN([GROFF_BROKEN_SPOOLER_FLAGS],
- [AC_MSG_CHECKING([default value for grops -b option])
- test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=0
- AC_MSG_RESULT([$BROKEN_SPOOLER_FLAGS])
- AC_SUBST([BROKEN_SPOOLER_FLAGS])])
-
-AC_DEFUN([GROFF_PAGE],
- [AC_MSG_CHECKING([default paper size])
- groff_prefix=$prefix
- test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix
- if test -z "$PAGE"; then
- descfile=
- if test -r $groff_prefix/share/groff/font/devps/DESC; then
- descfile=$groff_prefix/share/groff/font/devps/DESC
- elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
- descfile=$groff_prefix/lib/groff/font/devps/DESC
- else
- for f in $groff_prefix/share/groff/*/font/devps/DESC; do
- if test -r $f; then
- descfile=$f
- break
- fi
- done
- fi
-
- if test -n "$descfile"; then
- if grep ['^paperlength[ ]\+841890'] $descfile >/dev/null 2>&1; then
- PAGE=A4
- elif grep ['^papersize[ ]\+[aA]4'] $descfile >/dev/null 2>&1; then
- PAGE=A4
- fi
- fi
- fi
-
- if test -z "$PAGE"; then
- dom=`awk '([$]1 == "dom" || [$]1 == "search") { print [$]2; exit}' \
- /etc/resolv.conf 2>/dev/null`
- if test -z "$dom"; then
- dom=`(domainname) 2>/dev/null | tr -d '+'`
- if test -z "$dom" \
- || test "$dom" = '(none)'; then
- dom=`(hostname) 2>/dev/null | grep '\.'`
- fi
- fi
- # If the top-level domain is two letters and it's not `us' or `ca'
- # then they probably use A4 paper.
- case "$dom" in
- [*.[Uu][Ss]|*.[Cc][Aa])]
- ;;
- [*.[A-Za-z][A-Za-z])]
- PAGE=A4 ;;
- esac
- fi
-
- test -n "$PAGE" || PAGE=letter
- if test "x$PAGE" = "xA4"; then
- AC_DEFINE([PAGEA4], [1],
- [Define if the printer's page size is A4.])
- fi
- AC_MSG_RESULT([$PAGE])
- AC_SUBST([PAGE])])
-
-AC_DEFUN([GROFF_CXX_CHECK],
- [AC_REQUIRE([AC_PROG_CXX])
- AC_LANG_PUSH([C++])
- if test "$cross_compiling" = no; then
- AC_MSG_CHECKING([that C++ compiler can compile simple program])
- fi
- AC_RUN_IFELSE([
- AC_LANG_SOURCE([[
-
-int main() {
- return 0;
-}
-
- ]])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([a working C++ compiler is required])],
- [:])
-
- if test "$cross_compiling" = no; then
- AC_MSG_CHECKING([that C++ static constructors and destructors are called])
- fi
- AC_RUN_IFELSE([
- AC_LANG_SOURCE([[
-
-extern "C" {
- void _exit(int);
-}
-
-int i;
-struct A {
- char dummy;
- A() { i = 1; }
- ~A() { if (i == 1) _exit(0); }
-};
-
-A a;
-
-int main()
-{
- return 1;
-}
-
- ]])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([a working C++ compiler is required])],
- [:])
-
- AC_MSG_CHECKING([that header files support C++])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <stdio.h>
-
- ]],
- [[
-
-fopen(0, 0);
-
- ]])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([header files do not support C++
- (if you are using a version of gcc/g++ earlier than 2.5,
- you should install libg++)])])
- AC_LANG_POP([C++])])
-
-AC_DEFUN([GROFF_TMAC],
- [AC_MSG_CHECKING([for prefix of system macro packages])
- sys_tmac_prefix=
- sys_tmac_file_prefix=
- for d in /usr/share/lib/tmac /usr/lib/tmac; do
- for t in "" tmac.; do
- for m in an s m; do
- f=$d/$t$m
- if test -z "$sys_tmac_prefix" \
- && test -f $f \
- && grep '^\.if' $f >/dev/null 2>&1; then
- sys_tmac_prefix=$d/$t
- sys_tmac_file_prefix=$t
- fi
- done
- done
- done
- AC_MSG_RESULT([$sys_tmac_prefix])
- AC_SUBST([sys_tmac_prefix])
-
- AC_MSG_CHECKING([which system macro packages should be made available])
- tmac_wrap=
- if test "x$sys_tmac_file_prefix" = "xtmac."; then
- for f in $sys_tmac_prefix*; do
- suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
- case "$suff" in
- e)
- ;;
- *)
- grep "Copyright.*Free Software Foundation" $f >/dev/null \
- || tmac_wrap="$tmac_wrap $suff" ;;
- esac
- done
- elif test -n "$sys_tmac_prefix"; then
- files=`echo $sys_tmac_prefix*`
- grep "\\.so" $files >conftest.sol
- for f in $files; do
- case "$f" in
- ${sys_tmac_prefix}e)
- ;;
- *.me)
- ;;
- */ms.*)
- ;;
- *)
- b=`basename $f`
- if grep "\\.so.*/$b\$" conftest.sol >/dev/null \
- || grep -l "Copyright.*Free Software Foundation" $f >/dev/null; then
- :
- else
- suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
- case "$suff" in
- tmac.*)
- ;;
- *)
- tmac_wrap="$tmac_wrap $suff" ;;
- esac
- fi
- esac
- done
- rm -f conftest.sol
- fi
- AC_MSG_RESULT([$tmac_wrap])
- AC_SUBST([tmac_wrap])])
-
-AC_DEFUN([GROFF_G],
- [AC_MSG_CHECKING([for existing troff installation])
- if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
- AC_MSG_RESULT([yes])
- g=g
- else
- AC_MSG_RESULT([no])
- g=
- fi
- AC_SUBST([g])])
-
-# We need the path to install-sh to be absolute.
-
-AC_DEFUN([GROFF_INSTALL_SH],
- [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])
- ac_dir=`cd $ac_aux_dir; pwd`
- ac_install_sh="$ac_dir/install-sh -c"])
-
-# Test whether install-info is available.
-
-AC_DEFUN([GROFF_INSTALL_INFO],
- [AC_CHECK_PROGS([INSTALL_INFO], [install-info], [:])])
-
-# At least one UNIX system, Apple Macintosh Rhapsody 5.5,
-# does not have -lm ...
-
-AC_DEFUN([GROFF_LIBM],
- [AC_CHECK_LIB([m], [sin], [LIBM=-lm])
- AC_SUBST([LIBM])])
-
-# ... while the MinGW implementation of GCC for Microsoft Win32
-# does not seem to have -lc.
-
-AC_DEFUN([GROFF_LIBC],
- [AC_CHECK_LIB([c], [main], [LIBC=-lc])
- AC_SUBST([LIBC])])
-
-# Check for EBCDIC -- stolen from the OS390 Unix LYNX port
-
-AC_DEFUN([GROFF_EBCDIC],
- [AC_MSG_CHECKING([whether character set is EBCDIC])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-/* Treat any failure as ASCII for compatibility with existing art.
- Use compile-time rather than run-time tests for cross-compiler
- tolerance. */
-#if '0' != 240
-make an error "Character set is not EBCDIC"
-#endif
-
- ]])
- ],
- [groff_cv_ebcdic="yes"
- TTYDEVDIRS="font/devcp1047"
- AC_MSG_RESULT([yes])
- AC_DEFINE(IS_EBCDIC_HOST, 1,
- [Define if the host's encoding is EBCDIC.])],
- [groff_cv_ebcdic="no"
- TTYDEVDIRS="font/devascii font/devlatin1"
- OTHERDEVDIRS="font/devlj4 font/devlbp"
- AC_MSG_RESULT([no])])
- AC_SUBST([TTYDEVDIRS])
- AC_SUBST([OTHERDEVDIRS])])
-
-# Check for OS/390 Unix. We test for EBCDIC also -- the Linux port (with
-# gcc) to OS/390 uses ASCII internally.
-
-AC_DEFUN([GROFF_OS390],
- [if test "$groff_cv_ebcdic" = "yes"; then
- AC_MSG_CHECKING([for OS/390 Unix])
- case `uname` in
- OS/390)
- CFLAGS="$CFLAGS -D_ALL_SOURCE"
- AC_MSG_RESULT([yes]) ;;
- *)
- AC_MSG_RESULT([no]) ;;
- esac
- fi])
-
-# Check whether we need a declaration for a function.
-#
-# Stolen from GNU bfd.
-
-AC_DEFUN([GROFF_NEED_DECLARATION],
- [AC_MSG_CHECKING([whether $1 must be declared])
- AC_LANG_PUSH([C++])
- AC_CACHE_VAL([groff_cv_decl_needed_$1],
- [AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
- ]],
- [[
-
-#ifndef $1
- char *p = (char *) $1;
-#endif
-
- ]])
- ],
- [groff_cv_decl_needed_$1=no],
- [groff_cv_decl_needed_$1=yes])])
- AC_MSG_RESULT([$groff_cv_decl_needed_$1])
- if test $groff_cv_decl_needed_$1 = yes; then
- AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), [1],
- [Define if your C++ doesn't declare ]$1[().])
- fi
- AC_LANG_POP([C++])])
-
-# If mkstemp() isn't available, use our own mkstemp.cpp file.
-
-AC_DEFUN([GROFF_MKSTEMP],
- [AC_MSG_CHECKING([for mkstemp])
- AC_LANG_PUSH([C++])
- AC_LIBSOURCE([mkstemp.cpp])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <stdlib.h>
-#include <unistd.h>
-int (*f) (char *);
-
- ]],
- [[
-
-f = mkstemp;
-
- ]])
- ],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_MKSTEMP], [1], [Define if you have mkstemp().])],
- [AC_MSG_RESULT([no])
- _AC_LIBOBJ([mkstemp])])
- AC_LANG_POP([C++])])
-
-# Test whether <inttypes.h> exists, doesn't clash with <sys/types.h>,
-# and declares uintmax_t. Taken from the fileutils package.
-
-AC_DEFUN([GROFF_INTTYPES_H],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([C++ <inttypes.h>])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <sys/types.h>
-#include <inttypes.h>
-
- ]],
- [[
-
-uintmax_t i = (uintmax_t)-1;
-
- ]])
- ],
- [groff_cv_header_inttypes_h=yes
- AC_DEFINE([HAVE_CC_INTTYPES_H], [1],
- [Define if you have a C++ <inttypes.h>.])],
- [groff_cv_header_inttypes_h=no])
- AC_MSG_RESULT([$groff_cv_header_inttypes_h])
- AC_LANG_POP([C++])])
-
-# Test for working `unsigned long long'. Taken from the fileutils package.
-
-AC_DEFUN([GROFF_UNSIGNED_LONG_LONG],
- [AC_LANG_PUSH([C++])
- AC_MSG_CHECKING([for unsigned long long])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-
-unsigned long long ull = 1;
-int i = 63;
-unsigned long long ullmax = (unsigned long long)-1;
-
- ]],
- [[
-
-return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-
- ]])
- ],
- [groff_cv_type_unsigned_long_long=yes],
- [groff_cv_type_unsigned_long_long=no])
- AC_MSG_RESULT([$groff_cv_type_unsigned_long_long])
- AC_LANG_POP([C++])])
-
-# Define uintmax_t to `unsigned long' or `unsigned long long'
-# if <inttypes.h> does not exist. Taken from the fileutils package.
-
-AC_DEFUN([GROFF_UINTMAX_T],
- [AC_REQUIRE([GROFF_INTTYPES_H])
- if test $groff_cv_header_inttypes_h = no; then
- AC_REQUIRE([GROFF_UNSIGNED_LONG_LONG])
- test $groff_cv_type_unsigned_long_long = yes \
- && ac_type='unsigned long long' \
- || ac_type='unsigned long'
- AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
- [Define uintmax_t to `unsigned long' or `unsigned long long' if
- <inttypes.h> does not exist.])
- fi])
-
-# Identify PATH_SEPARATOR character to use in GROFF_FONT_PATH and
-# GROFF_TMAC_PATH which is appropriate for the target system (POSIX=':',
-# MS-DOS/Win32=';').
-#
-# The logic to resolve this test is already encapsulated in
-# `${srcdir}/src/include/nonposix.h'.
-
-AC_DEFUN([GROFF_TARGET_PATH_SEPARATOR],
- [AC_MSG_CHECKING([separator character to use in groff search paths])
- cp ${srcdir}/src/include/nonposix.h conftest.h
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <ctype.h>
-#include "conftest.h"
-
- ]],
- [[
-
-#if PATH_SEP_CHAR == ';'
-make an error "Path separator is ';'"
-#endif
-
- ]])
- ],
- [GROFF_PATH_SEPARATOR=":"],
- [GROFF_PATH_SEPARATOR=";"])
- AC_MSG_RESULT([$GROFF_PATH_SEPARATOR])
- AC_SUBST(GROFF_PATH_SEPARATOR)])
-
-# Check for X11.
-
-AC_DEFUN([GROFF_X11],
- [AC_REQUIRE([AC_PATH_XTRA])
- groff_no_x=$no_x
- if test -z "$groff_no_x"; then
- OLDCFLAGS=$CFLAGS
- OLDLDFLAGS=$LDFLAGS
- OLDLIBS=$LIBS
- CFLAGS="$CFLAGS $X_CFLAGS"
- LDFLAGS="$LDFLAGS $X_LIBS"
- LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
-
- LIBS="$LIBS -lXaw"
- AC_MSG_CHECKING([for Xaw library and header files])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Simple.h>
-
- ]],
- [])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- groff_no_x="yes"])
-
- LIBS="$LIBS -lXmu"
- AC_MSG_CHECKING([for Xmu library and header files])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-
-#include <X11/Intrinsic.h>
-#include <X11/Xmu/Converters.h>
-
- ]],
- [])
- ],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- groff_no_x="yes"])
-
- CFLAGS=$OLDCFLAGS
- LDFLAGS=$OLDLDFLAGS
- LIBS=$OLDLIBS
- fi
-
- if test "x$groff_no_x" = "xyes"; then
- AC_MSG_NOTICE([gxditview and xtotroff won't be built])
- else
- XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12"
- XPROGDIRS="src/devices/xditview src/utils/xtotroff"
- XLIBDIRS="src/libs/libxutil"
- fi
-
- AC_SUBST([XDEVDIRS])
- AC_SUBST([XPROGDIRS])
- AC_SUBST([XLIBDIRS])])
-
-# Set up the `--with-appresdir' command line option.
-
-AC_DEFUN([GROFF_APPRESDIR_OPTION],
- [AC_ARG_WITH([appresdir],
- dnl Don't quote AS_HELP_STRING!
- AS_HELP_STRING([--with-appresdir=DIR],
- [X11 application resource files]))])
-
-# Get a default value for the application resource directory.
-#
-# We ignore the `XAPPLRES' and `XUSERFILESEARCHPATH' environment variables.
-#
-# The goal is to find the `root' of X11. Under most systems this is
-# `/usr/X11/lib'. Application default files are then in
-# `/usr/X11/lib/X11/app-defaults'.
-#
-# Based on autoconf's AC_PATH_X macro.
-
-AC_DEFUN([GROFF_APPRESDIR_DEFAULT],
- [if test -z "$groff_no_x"; then
- # Create an Imakefile, run `xmkmf', then `make'.
- rm -f -r conftest.dir
- if mkdir conftest.dir; then
- cd conftest.dir
- # Make sure to not put `make' in the Imakefile rules,
- # since we grep it out.
- cat >Imakefile <<'EOF'
-
-xlibdirs:
- @echo 'groff_x_usrlibdir="${USRLIBDIR}"; groff_x_libdir="${LIBDIR}"'
-EOF
-
- if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
- # GNU make sometimes prints "make[1]: Entering...",
- # which would confuse us.
- eval `${MAKE-make} xlibdirs 2>/dev/null | grep -v make`
-
- # Open Windows `xmkmf' reportedly sets LIBDIR instead of USRLIBDIR.
- for groff_extension in a so sl; do
- if test ! -f $groff_x_usrlibdir/libX11.$groff_extension &&
- test -f $groff_x_libdir/libX11.$groff_extension; then
- groff_x_usrlibdir=$groff_x_libdir
- break
- fi
- done
- fi
-
- cd ..
- rm -f -r conftest.dir
- fi
-
- # In case the test with `xmkmf' wasn't successful, try a suite of
- # standard directories. Check `X11' before `X11Rn' because it is often
- # a symlink to the current release.
- groff_x_libdirs='
- /usr/X11/lib
- /usr/X11R6/lib
- /usr/X11R5/lib
- /usr/X11R4/lib
-
- /usr/lib/X11
- /usr/lib/X11R6
- /usr/lib/X11R5
- /usr/lib/X11R4
-
- /usr/local/X11/lib
- /usr/local/X11R6/lib
- /usr/local/X11R5/lib
- /usr/local/X11R4/lib
-
- /usr/local/lib/X11
- /usr/local/lib/X11R6
- /usr/local/lib/X11R5
- /usr/local/lib/X11R4
-
- /usr/X386/lib
- /usr/x386/lib
- /usr/XFree86/lib/X11
-
- /usr/lib
- /usr/local/lib
- /usr/unsupported/lib
- /usr/athena/lib
- /usr/local/x11r5/lib
- /usr/lpp/Xamples/lib
-
- /usr/openwin/lib
- /usr/openwin/share/lib'
-
- if test -z "$groff_x_usrlibdir"; then
- # We only test whether libX11 exists.
- for groff_dir in $groff_x_libdirs; do
- for groff_extension in a so sl; do
- if test ! -r $groff_dir/libX11.$groff_extension; then
- groff_x_usrlibdir=$groff_dir
- break 2
- fi
- done
- done
- fi
-
- if test "x$with_appresdir" = "x"; then
- appresdir=$groff_x_usrlibdir/X11/app-defaults
- else
- appresdir=$with_appresdir
- fi
- fi
- AC_SUBST([appresdir])])
-
-
-# Emit warning if --with-appresdir hasn't been used.
-
-AC_DEFUN([GROFF_APPRESDIR_CHECK],
- [if test -z "$groff_no_x"; then
- if test "x$with_appresdir" = "x"; then
- AC_MSG_NOTICE([
-
- The application resource file for gxditview will be installed as
-
- $appresdir/GXditview
-
- (an existing file will be saved as `GXditview.old').
- To install it into a different directory, say, `/etc/gxditview',
- add `--with-appresdir=/etc/gxditview' to the configure script
- command line options and rerun it. The environment variable
- `APPLRESDIR' must then be set to `/etc/' (note the trailing slash),
- omitting the `gxditview' part which is automatically appended by
- the X11 searching routines for resource files. More details can be
- found in the X(7) manual page.
- ])
- fi
- fi])
diff --git a/contrib/groff/configure b/contrib/groff/configure
deleted file mode 100755
index 107aadcae070..000000000000
--- a/contrib/groff/configure
+++ /dev/null
@@ -1,11663 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59b.
-#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-elif test -n "${BASH_VERSION+set}${KSH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Find who we are. Look in the path if we contain no path at all
-# relative or not.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(func_return () {
- (exit \$1)
-}
-func_success () {
- func_return 0
-}
-func_failure () {
- func_return 1
-}
-func_ret_success () {
- return 0
-}
-func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if func_success; then
- :
-else
- exitcode=1
- echo func_failure succeeded.
-fi
-
-if func_failure; then
- exitcode=1
- echo func_success failed.
-fi
-
-if func_ret_success; then
- :
-else
- exitcode=1
- echo func_ret_success failed.
-fi
-
-if func_ret_failure; then
- exitcode=1
- echo func_ret_failure succeeded.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- as_lineno_3=\`(expr \$as_lineno_1 + 1) 2>/dev/null\`
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\$as_lineno_3\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done
- esac
-done
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- if { $as_shell 2> /dev/null <<\_ASEOF
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-elif test -n "${BASH_VERSION+set}${KSH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { $as_shell 2> /dev/null <<\_ASEOF
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-elif test -n "${BASH_VERSION+set}${KSH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-:
-(func_return () {
- (exit $1)
-}
-func_success () {
- func_return 0
-}
-func_failure () {
- func_return 1
-}
-func_ret_success () {
- return 0
-}
-func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if func_success; then
- :
-else
- exitcode=1
- echo func_failure succeeded.
-fi
-
-if func_failure; then
- exitcode=1
- echo func_success failed.
-fi
-
-if func_ret_success; then
- :
-else
- exitcode=1
- echo func_ret_success failed.
-fi
-
-if func_ret_failure; then
- exitcode=1
- echo func_ret_failure succeeded.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "func_return () {
- (exit \$1)
-}
-func_success () {
- func_return 0
-}
-func_failure () {
- func_return 1
-}
-func_ret_success () {
- return 0
-}
-func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if func_success; then
- :
-else
- exitcode=1
- echo func_failure succeeded.
-fi
-
-if func_failure; then
- exitcode=1
- echo func_success failed.
-fi
-
-if func_ret_success; then
- :
-else
- exitcode=1
- echo func_ret_success failed.
-fi
-
-if func_ret_failure; then
- exitcode=1
- echo func_ret_failure succeeded.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell autoconf@gnu.org about your system,
- echo including any error possibly output before this
- echo message
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s,[$]LINENO.*,&-,
- t lineno
- b
- : lineno
- N
- : loop
- s,[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\),\2\1\2,
- t loop
- s,-\n.*,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="src/roff/groff/groff.cpp"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX TTYDEVDIRS OTHERDEVDIRS CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XDEVDIRS XPROGDIRS XLIBDIRS appresdir LPR LP LPQ PSPRINT DVIPRINT PERLPATH YACC RANLIB ac_ct_RANLIB INSTALL_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S SH_SCRIPT_SED_CMD GREP EGREP LIBC LIBM LIBOBJS BROKEN_SPOOLER_FLAGS PAGE g sys_tmac_prefix tmac_wrap GROFF_PATH_SEPARATOR ALT_GHOSTSCRIPT_PROGS GHOSTSCRIPT ac_ct_GHOSTSCRIPT pnmcut pnmcrop pnmtopng psselect pnmtops make_html make_install_html ALT_AWK_PROGS AWK ac_ct_AWK make_pdfdoc make_install_pdfdoc pnmtops_nosetpage LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_$ac_feature='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute directory names.
-for ac_var in exec_prefix prefix
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute directory names.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
- fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
- { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
- cat <<_ACEOF
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
-_ACEOF
-
- cat <<\_ACEOF
-
-X features:
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-x use the X Window System
- --with-appresdir=DIR X11 application resource files
- --with-alt-gs=LIST alternative names for ghostscript executable
- --with-gs=PROG actual [/path/]name of ghostscript executable
- --with-alt-awk=LIST alternative names for awk executable
- --with-awk=PROG actual [/path/]name of awk executable
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d $ac_dir || continue
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute names, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_srcdir/configure.gnu; then
- echo
- $SHELL $ac_srcdir/configure.gnu --help=recursive
- elif test -f $ac_srcdir/configure; then
- echo
- $SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
- else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd "$ac_popdir"
- done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
- cat <<\_ACEOF
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
-2003, 2004 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.59b. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-{
- (set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
- *)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-}
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- sed "/^$/d" confdefs.h | sort
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
- ' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-# NextStep 3.3 (patch 3) loses unless the first echo outputs at least 14 bytes.
-ac_space=' '
-echo "$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space$ac_space" >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
- esac
- fi
-else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
- case $ac_old_set,$ac_new_set in
- set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_headers="$ac_config_headers src/include/config.h:src/include/config.hin"
-
-
-
-# checks for programs
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort. b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions. Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-for ac_file in $ac_files
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix, OSF/1, Tru64 -std
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- CXX=$ac_ct_CXX
- fi
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cxx_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cxx_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-CXXFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cxx_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "$cross_compiling" = no; then
- echo "$as_me:$LINENO: checking that C++ compiler can compile simple program" >&5
-echo $ECHO_N "checking that C++ compiler can compile simple program... $ECHO_C" >&6
- fi
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int main() {
- return 0;
-}
-
-
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- { { echo "$as_me:$LINENO: error: a working C++ compiler is required" >&5
-echo "$as_me: error: a working C++ compiler is required" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test "$cross_compiling" = no; then
- echo "$as_me:$LINENO: checking that C++ static constructors and destructors are called" >&5
-echo $ECHO_N "checking that C++ static constructors and destructors are called... $ECHO_C" >&6
- fi
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-extern "C" {
- void _exit(int);
-}
-
-int i;
-struct A {
- char dummy;
- A() { i = 1; }
- ~A() { if (i == 1) _exit(0); }
-};
-
-A a;
-
-int main()
-{
- return 1;
-}
-
-
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- { { echo "$as_me:$LINENO: error: a working C++ compiler is required" >&5
-echo "$as_me: error: a working C++ compiler is required" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: checking that header files support C++" >&5
-echo $ECHO_N "checking that header files support C++... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-
-
-int
-main ()
-{
-
-
-fopen(0, 0);
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- { { echo "$as_me:$LINENO: error: header files do not support C++
- (if you are using a version of gcc/g++ earlier than 2.5,
- you should install libg++)" >&5
-echo "$as_me: error: header files do not support C++
- (if you are using a version of gcc/g++ earlier than 2.5,
- you should install libg++)" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking whether character set is EBCDIC" >&5
-echo $ECHO_N "checking whether character set is EBCDIC... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-/* Treat any failure as ASCII for compatibility with existing art.
- Use compile-time rather than run-time tests for cross-compiler
- tolerance. */
-#if '0' != 240
-make an error "Character set is not EBCDIC"
-#endif
-
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_ebcdic="yes"
- TTYDEVDIRS="font/devcp1047"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define IS_EBCDIC_HOST 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_ebcdic="no"
- TTYDEVDIRS="font/devascii font/devlatin1"
- OTHERDEVDIRS="font/devlj4 font/devlbp"
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-if test "$groff_cv_ebcdic" = "yes"; then
- echo "$as_me:$LINENO: checking for OS/390 Unix" >&5
-echo $ECHO_N "checking for OS/390 Unix... $ECHO_C" >&6
- case `uname` in
- OS/390)
- CFLAGS="$CFLAGS -D_ALL_SOURCE"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6 ;;
- esac
- fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for X" >&5
-echo $ECHO_N "checking for X... $ECHO_C" >&6
-
-
-# Check whether --with-x or --without-x was given.
-if test "${with_x+set}" = set; then
- withval="$with_x"
-
-fi;
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
- # The user explicitly disabled X.
- have_x=disabled
-else
- if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
- # Both variables are already set.
- have_x=yes
- else
- if test "${ac_cv_have_x+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
- cd conftest.dir
- # Make sure to not put "make" in the Imakefile rules, since we grep it out.
- cat >Imakefile <<'_ACEOF'
-acfindx:
- @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
-_ACEOF
- if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
- eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
- # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
- for ac_extension in a so sl; do
- if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
- test -f $ac_im_libdir/libX11.$ac_extension; then
- ac_im_usrlibdir=$ac_im_libdir; break
- fi
- done
- # Screen out bogus values from the imake configuration. They are
- # bogus both because they are the default anyway, and because
- # using them would break gcc on systems where it needs fixed includes.
- case $ac_im_incroot in
- /usr/include) ;;
- *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
- esac
- case $ac_im_usrlibdir in
- /usr/lib | /lib) ;;
- *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
- esac
- fi
- cd ..
- rm -f -r conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
- # Guess where to find include files, by looking for Intrinsic.h.
- # First, try using that file with no special directory specified.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Intrinsic.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- for ac_dir in $ac_x_header_dirs; do
- if test -r "$ac_dir/X11/Intrinsic.h"; then
- ac_x_includes=$ac_dir
- break
- fi
-done
-fi
-rm -f conftest.err conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
- # Check for the libraries.
- # See if we find them without any special options.
- # Don't add to $LIBS permanently.
- ac_save_LIBS=$LIBS
- LIBS="-lXt $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Intrinsic.h>
-int
-main ()
-{
-XtMalloc (0)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS=$ac_save_LIBS
-for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
- # Don't even attempt the hair of trying to link an X program!
- for ac_extension in a so sl; do
- if test -r $ac_dir/libXt.$ac_extension; then
- ac_x_libraries=$ac_dir
- break 2
- fi
- done
-done
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
- # Didn't find X anywhere. Cache the known absence of X.
- ac_cv_have_x="have_x=no"
-else
- # Record where we found X for the cache.
- ac_cv_have_x="have_x=yes \
- ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
-fi
-fi
-
- fi
- eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
- echo "$as_me:$LINENO: result: $have_x" >&5
-echo "${ECHO_T}$have_x" >&6
- no_x=yes
-else
- # If each of the values was on the command line, it overrides each guess.
- test "x$x_includes" = xNONE && x_includes=$ac_x_includes
- test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
- # Update the cache value to reflect the command line values.
- ac_cv_have_x="have_x=yes \
- ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
- echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
-fi
-
-if test "$no_x" = yes; then
- # Not all programs may use this symbol, but it does not hurt to define it.
-
-cat >>confdefs.h <<\_ACEOF
-#define X_DISPLAY_MISSING 1
-_ACEOF
-
- X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
- if test -n "$x_includes"; then
- X_CFLAGS="$X_CFLAGS -I$x_includes"
- fi
-
- # It would also be nice to do this for all -L options, not just this one.
- if test -n "$x_libraries"; then
- X_LIBS="$X_LIBS -L$x_libraries"
- # For Solaris; some versions of Sun CC require a space after -R and
- # others require no space. Words are not sufficient . . . .
- case `(uname -sr) 2>/dev/null` in
- "SunOS 5"*)
- echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
-echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
- ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_R_nospace=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_R_nospace=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test $ac_R_nospace = yes; then
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- X_LIBS="$X_LIBS -R$x_libraries"
- else
- LIBS="$ac_xsave_LIBS -R $x_libraries"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_R_space=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_R_space=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test $ac_R_space = yes; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- X_LIBS="$X_LIBS -R $x_libraries"
- else
- echo "$as_me:$LINENO: result: neither works" >&5
-echo "${ECHO_T}neither works" >&6
- fi
- fi
- LIBS=$ac_xsave_LIBS
- esac
- fi
-
- # Check for system-dependent libraries X programs must link with.
- # Do this before checking for the system-independent R6 libraries
- # (-lICE), since we may need -lsocket or whatever for X linking.
-
- if test "$ISC" = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
- else
- # Martyn Johnson says this is needed for Ultrix, if the X
- # libraries were built with DECnet support. And Karl Berry says
- # the Alpha needs dnet_stub (dnet does not exist).
- ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XOpenDisplay ();
-int
-main ()
-{
-XOpenDisplay ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dnet_dnet_ntoa=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dnet_dnet_ntoa=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
- if test $ac_cv_lib_dnet_dnet_ntoa = no; then
- echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
- fi
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$ac_xsave_LIBS"
-
- # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
- # to get the SysV transport functions.
- # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
- # needs -lnsl.
- # The nsl library prevents programs from opening the X display
- # on Irix 5.2, according to T.E. Dickey.
- # The functions gethostbyname, getservbyname, and inet_addr are
- # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
- echo "$as_me:$LINENO: checking for gethostbyname" >&5
-echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
-if test "${ac_cv_func_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define gethostbyname innocuous_gethostbyname
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gethostbyname (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef gethostbyname
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
-choke me
-#else
-char (*f) () = gethostbyname;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != gethostbyname;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_gethostbyname=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
-
- if test $ac_cv_func_gethostbyname = no; then
- echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_nsl_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_nsl_gethostbyname=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
-if test $ac_cv_lib_nsl_gethostbyname = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
- if test $ac_cv_lib_nsl_gethostbyname = no; then
- echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
-echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_bsd_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
-if test $ac_cv_lib_bsd_gethostbyname = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
- fi
- fi
-
- # lieder@skyler.mavd.honeywell.com says without -lsocket,
- # socket/setsockopt and other routines are undefined under SCO ODT
- # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
- # on later versions), says Simon Leinen: it contains gethostby*
- # variants that don't use the name server (or something). -lsocket
- # must be given before -lnsl if both are needed. We assume that
- # if connect needs -lnsl, so does gethostbyname.
- echo "$as_me:$LINENO: checking for connect" >&5
-echo $ECHO_N "checking for connect... $ECHO_C" >&6
-if test "${ac_cv_func_connect+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define connect to an innocuous variant, in case <limits.h> declares connect.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define connect innocuous_connect
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char connect (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef connect
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char connect ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_connect) || defined (__stub___connect)
-choke me
-#else
-char (*f) () = connect;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != connect;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_connect=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_connect=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
-echo "${ECHO_T}$ac_cv_func_connect" >&6
-
- if test $ac_cv_func_connect = no; then
- echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
-if test "${ac_cv_lib_socket_connect+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char connect ();
-int
-main ()
-{
-connect ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_socket_connect=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_socket_connect=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
-if test $ac_cv_lib_socket_connect = yes; then
- X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
- fi
-
- # Guillermo Gomez says -lposix is necessary on A/UX.
- echo "$as_me:$LINENO: checking for remove" >&5
-echo $ECHO_N "checking for remove... $ECHO_C" >&6
-if test "${ac_cv_func_remove+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define remove to an innocuous variant, in case <limits.h> declares remove.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define remove innocuous_remove
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char remove (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef remove
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char remove ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_remove) || defined (__stub___remove)
-choke me
-#else
-char (*f) () = remove;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != remove;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_remove=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_remove=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
-echo "${ECHO_T}$ac_cv_func_remove" >&6
-
- if test $ac_cv_func_remove = no; then
- echo "$as_me:$LINENO: checking for remove in -lposix" >&5
-echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
-if test "${ac_cv_lib_posix_remove+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char remove ();
-int
-main ()
-{
-remove ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_posix_remove=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_posix_remove=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
-echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
-if test $ac_cv_lib_posix_remove = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
- fi
-
- # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
- echo "$as_me:$LINENO: checking for shmat" >&5
-echo $ECHO_N "checking for shmat... $ECHO_C" >&6
-if test "${ac_cv_func_shmat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shmat innocuous_shmat
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shmat (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shmat
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shmat ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shmat) || defined (__stub___shmat)
-choke me
-#else
-char (*f) () = shmat;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shmat;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_shmat=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shmat=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
-echo "${ECHO_T}$ac_cv_func_shmat" >&6
-
- if test $ac_cv_func_shmat = no; then
- echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
-echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
-if test "${ac_cv_lib_ipc_shmat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shmat ();
-int
-main ()
-{
-shmat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_ipc_shmat=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_ipc_shmat=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
-echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
-if test $ac_cv_lib_ipc_shmat = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
- fi
- fi
-
- # Check for libraries that X11R6 Xt/Xaw programs need.
- ac_save_LDFLAGS=$LDFLAGS
- test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
- # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
- # check for ICE first), but we must link in the order -lSM -lICE or
- # we get undefined symbols. So assume we have SM if we have ICE.
- # These have to be linked with before -lX11, unlike the other
- # libraries we check for below, so use a different variable.
- # John Interrante, Karl Berry
- echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
-echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
-if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char IceConnectionNumber ();
-int
-main ()
-{
-IceConnectionNumber ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_ICE_IceConnectionNumber=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
-if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
- X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
- LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-
- groff_no_x=$no_x
- if test -z "$groff_no_x"; then
- OLDCFLAGS=$CFLAGS
- OLDLDFLAGS=$LDFLAGS
- OLDLIBS=$LIBS
- CFLAGS="$CFLAGS $X_CFLAGS"
- LDFLAGS="$LDFLAGS $X_LIBS"
- LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
-
- LIBS="$LIBS -lXaw"
- echo "$as_me:$LINENO: checking for Xaw library and header files" >&5
-echo $ECHO_N "checking for Xaw library and header files... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Simple.h>
-
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- groff_no_x="yes"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
- LIBS="$LIBS -lXmu"
- echo "$as_me:$LINENO: checking for Xmu library and header files" >&5
-echo $ECHO_N "checking for Xmu library and header files... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <X11/Intrinsic.h>
-#include <X11/Xmu/Converters.h>
-
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- groff_no_x="yes"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
- CFLAGS=$OLDCFLAGS
- LDFLAGS=$OLDLDFLAGS
- LIBS=$OLDLIBS
- fi
-
- if test "x$groff_no_x" = "xyes"; then
- { echo "$as_me:$LINENO: gxditview and xtotroff won't be built" >&5
-echo "$as_me: gxditview and xtotroff won't be built" >&6;}
- else
- XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12"
- XPROGDIRS="src/devices/xditview src/utils/xtotroff"
- XLIBDIRS="src/libs/libxutil"
- fi
-
-
-
-
-
-# Check whether --with-appresdir or --without-appresdir was given.
-if test "${with_appresdir+set}" = set; then
- withval="$with_appresdir"
-
-fi;
-if test -z "$groff_no_x"; then
- # Create an Imakefile, run `xmkmf', then `make'.
- rm -f -r conftest.dir
- if mkdir conftest.dir; then
- cd conftest.dir
- # Make sure to not put `make' in the Imakefile rules,
- # since we grep it out.
- cat >Imakefile <<'EOF'
-
-xlibdirs:
- @echo 'groff_x_usrlibdir="${USRLIBDIR}"; groff_x_libdir="${LIBDIR}"'
-EOF
-
- if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
- # GNU make sometimes prints "make[1]: Entering...",
- # which would confuse us.
- eval `${MAKE-make} xlibdirs 2>/dev/null | grep -v make`
-
- # Open Windows `xmkmf' reportedly sets LIBDIR instead of USRLIBDIR.
- for groff_extension in a so sl; do
- if test ! -f $groff_x_usrlibdir/libX11.$groff_extension &&
- test -f $groff_x_libdir/libX11.$groff_extension; then
- groff_x_usrlibdir=$groff_x_libdir
- break
- fi
- done
- fi
-
- cd ..
- rm -f -r conftest.dir
- fi
-
- # In case the test with `xmkmf' wasn't successful, try a suite of
- # standard directories. Check `X11' before `X11Rn' because it is often
- # a symlink to the current release.
- groff_x_libdirs='
- /usr/X11/lib
- /usr/X11R6/lib
- /usr/X11R5/lib
- /usr/X11R4/lib
-
- /usr/lib/X11
- /usr/lib/X11R6
- /usr/lib/X11R5
- /usr/lib/X11R4
-
- /usr/local/X11/lib
- /usr/local/X11R6/lib
- /usr/local/X11R5/lib
- /usr/local/X11R4/lib
-
- /usr/local/lib/X11
- /usr/local/lib/X11R6
- /usr/local/lib/X11R5
- /usr/local/lib/X11R4
-
- /usr/X386/lib
- /usr/x386/lib
- /usr/XFree86/lib/X11
-
- /usr/lib
- /usr/local/lib
- /usr/unsupported/lib
- /usr/athena/lib
- /usr/local/x11r5/lib
- /usr/lpp/Xamples/lib
-
- /usr/openwin/lib
- /usr/openwin/share/lib'
-
- if test -z "$groff_x_usrlibdir"; then
- # We only test whether libX11 exists.
- for groff_dir in $groff_x_libdirs; do
- for groff_extension in a so sl; do
- if test ! -r $groff_dir/libX11.$groff_extension; then
- groff_x_usrlibdir=$groff_dir
- break 2
- fi
- done
- done
- fi
-
- if test "x$with_appresdir" = "x"; then
- appresdir=$groff_x_usrlibdir/X11/app-defaults
- else
- appresdir=$with_appresdir
- fi
- fi
-
-if test -z "$PSPRINT"; then
- for ac_prog in lpr
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LPR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$LPR"; then
- ac_cv_prog_LPR="$LPR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LPR="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-LPR=$ac_cv_prog_LPR
-if test -n "$LPR"; then
- echo "$as_me:$LINENO: result: $LPR" >&5
-echo "${ECHO_T}$LPR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$LPR" && break
-done
-
- for ac_prog in lp
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$LP"; then
- ac_cv_prog_LP="$LP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LP="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-LP=$ac_cv_prog_LP
-if test -n "$LP"; then
- echo "$as_me:$LINENO: result: $LP" >&5
-echo "${ECHO_T}$LP" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$LP" && break
-done
-
- if test -n "$LPR" && test -n "$LP"; then
- # HP-UX provides an lpr command that emulates lpr using lp,
- # but it doesn't have lpq; in this case we want to use lp
- # rather than lpr.
- for ac_prog in lpq
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LPQ+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$LPQ"; then
- ac_cv_prog_LPQ="$LPQ" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LPQ="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-LPQ=$ac_cv_prog_LPQ
-if test -n "$LPQ"; then
- echo "$as_me:$LINENO: result: $LPQ" >&5
-echo "${ECHO_T}$LPQ" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$LPQ" && break
-done
-
- test -n "$LPQ" || LPR=
- fi
- if test -n "$LPR"; then
- PSPRINT="$LPR"
- elif test -n "$LP"; then
- PSPRINT="$LP"
- fi
- fi
-
- echo "$as_me:$LINENO: checking for command to use for printing PostScript files" >&5
-echo $ECHO_N "checking for command to use for printing PostScript files... $ECHO_C" >&6
- echo "$as_me:$LINENO: result: $PSPRINT" >&5
-echo "${ECHO_T}$PSPRINT" >&6
-
- # Figure out DVIPRINT from PSPRINT.
- echo "$as_me:$LINENO: checking for command to use for printing dvi files" >&5
-echo $ECHO_N "checking for command to use for printing dvi files... $ECHO_C" >&6
- if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
- if test "x$PSPRINT" = "xlpr"; then
- DVIPRINT="lpr -d"
- else
- DVIPRINT="$PSPRINT"
- fi
- fi
-
- echo "$as_me:$LINENO: result: $DVIPRINT" >&5
-echo "${ECHO_T}$DVIPRINT" >&6
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PERLPATH+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $PERLPATH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PERLPATH="$PERLPATH" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERLPATH="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path_PERLPATH" && ac_cv_path_PERLPATH="/usr/bin/perl"
- ;;
-esac
-fi
-PERLPATH=$ac_cv_path_PERLPATH
-
-if test -n "$PERLPATH"; then
- echo "$as_me:$LINENO: result: $PERLPATH" >&5
-echo "${ECHO_T}$PERLPATH" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-for ac_prog in byacc 'bison -y'
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_YACC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$YACC"; then
- ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_YACC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
- echo "$as_me:$LINENO: result: $YACC" >&5
-echo "${ECHO_T}$YACC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f $ac_dir/shtool; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
- { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-
- ac_dir=`cd $ac_aux_dir; pwd`
- ac_install_sh="$ac_dir/install-sh -c"
-for ac_prog in install-info
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_INSTALL_INFO+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$INSTALL_INFO"; then
- ac_cv_prog_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_INSTALL_INFO="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-INSTALL_INFO=$ac_cv_prog_INSTALL_INFO
-if test -n "$INSTALL_INFO"; then
- echo "$as_me:$LINENO: result: $INSTALL_INFO" >&5
-echo "${ECHO_T}$INSTALL_INFO" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$INSTALL_INFO" && break
-done
-test -n "$INSTALL_INFO" || INSTALL_INFO=":"
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-
-# use a dummy substitution if no csh hack is necessary to avoid errors
-# with non-GNU sed programs
-echo "$as_me:$LINENO: checking for csh hash hack" >&5
-echo $ECHO_N "checking for csh hash hack... $ECHO_C" >&6
-
-cat <<EOF >conftest.sh
-#! /bin/sh
-true || exit 0
-export PATH || exit 0
-exit 1
-EOF
-
- chmod +x conftest.sh
- if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- SH_SCRIPT_SED_CMD='1s/.*/:/'
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- SH_SCRIPT_SED_CMD='1s/a/a/'
- fi
- rm -f conftest.sh
-
-
-# checks for headers
-echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -f -r $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
-{
- tmp=`(umask 077 && mktemp -d -q "$TMPDIR/GREPXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=$TMPDIR/GREP$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in $TMPDIR" >&2
- { (exit 1); exit 1; }
-}
-ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/xpg4/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- test -f "$ac_path_GREP" || continue
- $ac_path_GREP_found || if $as_executable_p "$ac_path_GREP"; then
- # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-if "$ac_path_GREP" --version 2>&1 < /dev/null | grep 'GNU' >/dev/null; then
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:
-else
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"$tmp/conftest.in"
- while :
- do
- cat "$tmp/conftest.in" "$tmp/conftest.in" >"$tmp/conftest.tmp"
- mv "$tmp/conftest.tmp" "$tmp/conftest.in"
- cp "$tmp/conftest.in" "$tmp/conftest.nl"
- echo 'GREP' >> "$tmp/conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "$tmp/conftest.nl" >"$tmp/conftest.out" 2>/dev/null || break
- diff "$tmp/conftest.out" "$tmp/conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
-fi
-
-fi
-
- $ac_path_GREP_found && break 3
- done
-done
-
-done
-
-rm -rf "$tmp"
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH:/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH:/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6
- GREP="$ac_cv_path_GREP"
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -f -r $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
-{
- tmp=`(umask 077 && mktemp -d -q "$TMPDIR/EGREPXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=$TMPDIR/EGREP$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in $TMPDIR" >&2
- { (exit 1); exit 1; }
-}
-ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/xpg4/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- test -f "$ac_path_EGREP" || continue
- $ac_path_EGREP_found || if $as_executable_p "$ac_path_EGREP"; then
- # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-if "$ac_path_EGREP" --version 2>&1 < /dev/null | grep 'GNU' >/dev/null; then
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:
-else
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"$tmp/conftest.in"
- while :
- do
- cat "$tmp/conftest.in" "$tmp/conftest.in" >"$tmp/conftest.tmp"
- mv "$tmp/conftest.tmp" "$tmp/conftest.in"
- cp "$tmp/conftest.in" "$tmp/conftest.nl"
- echo 'EGREP' >> "$tmp/conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "$tmp/conftest.nl" >"$tmp/conftest.out" 2>/dev/null || break
- diff "$tmp/conftest.out" "$tmp/conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
-fi
-
-fi
-
- $ac_path_EGREP_found && break 3
- done
-done
-
-done
-
-rm -rf "$tmp"
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH:/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH:/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-
-
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6
- EGREP="$ac_cv_path_EGREP"
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- exit (2);
- exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_header in stdlib.h unistd.h dirent.h limits.h sys/dir.h \
- string.h strings.h math.h sys/time.h direct.h process.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists. ##
-## ------------------------------------------ ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-echo "$as_me:$LINENO: checking for ISC 3.x or 4.x" >&5
-echo $ECHO_N "checking for ISC 3.x or 4.x... $ECHO_C" >&6
- if grep '[34]\.' /usr/options/cb.name >/dev/null 2>&1
- then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define _SYSV3 1
-_ACEOF
-
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- fi
-echo "$as_me:$LINENO: checking whether -D_POSIX_SOURCE is necessary" >&5
-echo $ECHO_N "checking whether -D_POSIX_SOURCE is necessary... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-extern "C" { void fileno(int); }
-
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define _POSIX_SOURCE 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for header stuff
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking for return type of srand" >&5
-echo $ECHO_N "checking for return type of srand... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdlib.h>
-extern "C" { void srand(unsigned int); }
-
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: void" >&5
-echo "${ECHO_T}void" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define RET_TYPE_SRAND_IS_VOID 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: int" >&5
-echo "${ECHO_T}int" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether gettimeofday must be declared" >&5
-echo $ECHO_N "checking whether gettimeofday must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_gettimeofday+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef gettimeofday
- char *p = (char *) gettimeofday;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_gettimeofday=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_gettimeofday=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_gettimeofday" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_gettimeofday" >&6
- if test $groff_cv_decl_needed_gettimeofday = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_GETTIMEOFDAY 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether hypot must be declared" >&5
-echo $ECHO_N "checking whether hypot must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_hypot+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef hypot
- char *p = (char *) hypot;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_hypot=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_hypot=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_hypot" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_hypot" >&6
- if test $groff_cv_decl_needed_hypot = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_HYPOT 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether popen must be declared" >&5
-echo $ECHO_N "checking whether popen must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_popen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef popen
- char *p = (char *) popen;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_popen=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_popen=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_popen" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_popen" >&6
- if test $groff_cv_decl_needed_popen = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_POPEN 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether pclose must be declared" >&5
-echo $ECHO_N "checking whether pclose must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_pclose+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef pclose
- char *p = (char *) pclose;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_pclose=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_pclose=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_pclose" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_pclose" >&6
- if test $groff_cv_decl_needed_pclose = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_PCLOSE 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether putenv must be declared" >&5
-echo $ECHO_N "checking whether putenv must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_putenv+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef putenv
- char *p = (char *) putenv;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_putenv=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_putenv=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_putenv" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_putenv" >&6
- if test $groff_cv_decl_needed_putenv = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_PUTENV 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether rand must be declared" >&5
-echo $ECHO_N "checking whether rand must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_rand+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef rand
- char *p = (char *) rand;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_rand=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_rand=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_rand" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_rand" >&6
- if test $groff_cv_decl_needed_rand = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_RAND 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether snprintf must be declared" >&5
-echo $ECHO_N "checking whether snprintf must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_snprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef snprintf
- char *p = (char *) snprintf;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_snprintf=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_snprintf=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_snprintf" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_snprintf" >&6
- if test $groff_cv_decl_needed_snprintf = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_SNPRINTF 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether srand must be declared" >&5
-echo $ECHO_N "checking whether srand must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_srand+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef srand
- char *p = (char *) srand;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_srand=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_srand=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_srand" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_srand" >&6
- if test $groff_cv_decl_needed_srand = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_SRAND 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether strcasecmp must be declared" >&5
-echo $ECHO_N "checking whether strcasecmp must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_strcasecmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef strcasecmp
- char *p = (char *) strcasecmp;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_strcasecmp=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_strcasecmp=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_strcasecmp" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_strcasecmp" >&6
- if test $groff_cv_decl_needed_strcasecmp = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_STRCASECMP 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether strncasecmp must be declared" >&5
-echo $ECHO_N "checking whether strncasecmp must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_strncasecmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef strncasecmp
- char *p = (char *) strncasecmp;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_strncasecmp=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_strncasecmp=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_strncasecmp" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_strncasecmp" >&6
- if test $groff_cv_decl_needed_strncasecmp = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_STRNCASECMP 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether vfprintf must be declared" >&5
-echo $ECHO_N "checking whether vfprintf must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_vfprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef vfprintf
- char *p = (char *) vfprintf;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_vfprintf=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_vfprintf=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_vfprintf" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_vfprintf" >&6
- if test $groff_cv_decl_needed_vfprintf = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_VFPRINTF 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether vsnprintf must be declared" >&5
-echo $ECHO_N "checking whether vsnprintf must be declared... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- if test "${groff_cv_decl_needed_vsnprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef vsnprintf
- char *p = (char *) vsnprintf;
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_decl_needed_vsnprintf=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_decl_needed_vsnprintf=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- echo "$as_me:$LINENO: result: $groff_cv_decl_needed_vsnprintf" >&5
-echo "${ECHO_T}$groff_cv_decl_needed_vsnprintf" >&6
- if test $groff_cv_decl_needed_vsnprintf = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_DECLARATION_VSNPRINTF 1
-_ACEOF
-
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking for sys_nerr in <errno.h>, <stdio.h>, or <stdlib.h>" >&5
-echo $ECHO_N "checking for sys_nerr in <errno.h>, <stdio.h>, or <stdlib.h>... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int
-main ()
-{
-
-
-int k;
-k = sys_nerr;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_NERR 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking for sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>" >&5
-echo $ECHO_N "checking for sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int
-main ()
-{
-
-
-int k;
-k = (int)sys_errlist[0];
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_ERRLIST 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking C++ <osfcn.h>" >&5
-echo $ECHO_N "checking C++ <osfcn.h>... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <osfcn.h>
-
-
-int
-main ()
-{
-
-
-read(0, 0, 0);
-open(0, 0);
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CC_OSFCN_H 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking C++ <limits.h>" >&5
-echo $ECHO_N "checking C++ <limits.h>... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <limits.h>
-
-
-int
-main ()
-{
-
-
-int x = INT_MIN;
-int y = INT_MAX;
-int z = UCHAR_MAX;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CC_LIMITS_H 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking C++ <inttypes.h>" >&5
-echo $ECHO_N "checking C++ <inttypes.h>... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <sys/types.h>
-#include <inttypes.h>
-
-
-int
-main ()
-{
-
-
-uintmax_t i = (uintmax_t)-1;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_header_inttypes_h=yes
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CC_INTTYPES_H 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_header_inttypes_h=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:$LINENO: result: $groff_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$groff_cv_header_inttypes_h" >&6
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for typedefs
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking for unsigned long long" >&5
-echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-unsigned long long ull = 1;
-int i = 63;
-unsigned long long ullmax = (unsigned long long)-1;
-
-
-int
-main ()
-{
-
-
-return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- groff_cv_type_unsigned_long_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-groff_cv_type_unsigned_long_long=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- echo "$as_me:$LINENO: result: $groff_cv_type_unsigned_long_long" >&5
-echo "${ECHO_T}$groff_cv_type_unsigned_long_long" >&6
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- if test $groff_cv_header_inttypes_h = no; then
-
- test $groff_cv_type_unsigned_long_long = yes \
- && ac_type='unsigned long long' \
- || ac_type='unsigned long'
-
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
-
- fi
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking for declaration of time_t" >&5
-echo $ECHO_N "checking for declaration of time_t... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <time.h>
-
-
-int
-main ()
-{
-
-
-time_t t = time(0);
-struct tm *p = localtime(&t);
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define LONG_FOR_TIME_T 1
-_ACEOF
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking for return type of signal handlers" >&5
-echo $ECHO_N "checking for return type of signal handlers... $ECHO_C" >&6
- for groff_declaration in \
- 'extern "C" void (*signal (int, void (*)(int)))(int);' \
- 'extern "C" void (*signal (int, void (*)(int)) throw ())(int);' \
- 'void (*signal ()) ();'
- do
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-$groff_declaration
-
-
-int
-main ()
-{
-
-
-int i;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-
- if test -n "$groff_declaration"; then
- echo "$as_me:$LINENO: result: void" >&5
-echo "${ECHO_T}void" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define RETSIGTYPE void
-_ACEOF
-
- else
- echo "$as_me:$LINENO: result: int" >&5
-echo "${ECHO_T}int" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define RETSIGTYPE int
-_ACEOF
-
- fi
-echo "$as_me:$LINENO: checking struct exception" >&5
-echo $ECHO_N "checking struct exception... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <math.h>
-
-
-int
-main ()
-{
-
-
-struct exception e;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRUCT_EXCEPTION 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-# checks for libraries
-echo "$as_me:$LINENO: checking for main in -lc" >&5
-echo $ECHO_N "checking for main in -lc... $ECHO_C" >&6
-if test "${ac_cv_lib_c_main+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_c_main=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_c_main=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_c_main" >&5
-echo "${ECHO_T}$ac_cv_lib_c_main" >&6
-if test $ac_cv_lib_c_main = yes; then
- LIBC=-lc
-fi
-
-
-echo "$as_me:$LINENO: checking for sin in -lm" >&5
-echo $ECHO_N "checking for sin in -lm... $ECHO_C" >&6
-if test "${ac_cv_lib_m_sin+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char sin ();
-int
-main ()
-{
-sin ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_m_sin=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_m_sin=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_m_sin" >&5
-echo "${ECHO_T}$ac_cv_lib_m_sin" >&6
-if test $ac_cv_lib_m_sin = yes; then
- LIBM=-lm
-fi
-
-
-
-# checks for functions
-
-
-for ac_header in stdlib.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists. ##
-## ------------------------------------------ ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in getpagesize
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-echo "$as_me:$LINENO: checking for working mmap" >&5
-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
- Here is a matrix of mmap possibilities:
- mmap private not fixed
- mmap private fixed at somewhere currently unmapped
- mmap private fixed at somewhere already mapped
- mmap shared not fixed
- mmap shared fixed at somewhere currently unmapped
- mmap shared fixed at somewhere already mapped
- For private mappings, we should verify that changes cannot be read()
- back from the file, nor mmap's back from the file at a different
- address. (There have been systems where private was not correctly
- implemented like the infamous i386 svr4.0, and systems where the
- VM page cache was not coherent with the file system buffer cache
- like early versions of FreeBSD and possibly contemporary NetBSD.)
- For shared mappings, we should conversely verify that changes get
- propagated back to all the places they're supposed to be.
-
- Grep wants private fixed already mapped.
- The main things grep needs to know about mmap are:
- * does it exist and is it safe to write into the mmap'd area
- * how to use it (BSD variants) */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !STDC_HEADERS && !HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h. */
-#if !HAVE_GETPAGESIZE
-/* Assume that all systems that can run configure have sys/param.h. */
-# if !HAVE_SYS_PARAM_H
-# define HAVE_SYS_PARAM_H 1
-# endif
-
-# ifdef _SC_PAGESIZE
-# define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-# if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-# ifdef EXEC_PAGESIZE
-# define getpagesize() EXEC_PAGESIZE
-# else /* no EXEC_PAGESIZE */
-# ifdef NBPG
-# define getpagesize() NBPG * CLSIZE
-# ifndef CLSIZE
-# define CLSIZE 1
-# endif /* no CLSIZE */
-# else /* no NBPG */
-# ifdef NBPC
-# define getpagesize() NBPC
-# else /* no NBPC */
-# ifdef PAGESIZE
-# define getpagesize() PAGESIZE
-# endif /* PAGESIZE */
-# endif /* no NBPC */
-# endif /* no NBPG */
-# endif /* no EXEC_PAGESIZE */
-# else /* no HAVE_SYS_PARAM_H */
-# define getpagesize() 8192 /* punt totally */
-# endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = getpagesize ();
-
- /* First, make a file with some known garbage in it. */
- data = (char *) malloc (pagesize);
- if (!data)
- exit (1);
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand ();
- umask (0);
- fd = creat ("conftest.mmap", 0600);
- if (fd < 0)
- exit (1);
- if (write (fd, data, pagesize) != pagesize)
- exit (1);
- close (fd);
-
- /* Next, try to mmap the file at a fixed address which already has
- something else allocated at it. If we can, also make sure that
- we see the same garbage. */
- fd = open ("conftest.mmap", O_RDWR);
- if (fd < 0)
- exit (1);
- data2 = (char *) malloc (2 * pagesize);
- if (!data2)
- exit (1);
- data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_FIXED, fd, 0L))
- exit (1);
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- exit (1);
-
- /* Finally, make sure that changes to the mapped area do not
- percolate back to the file as seen by read(). (This is a bug on
- some variants of i386 svr4.0.) */
- for (i = 0; i < pagesize; ++i)
- *(data2 + i) = *(data2 + i) + 1;
- data3 = (char *) malloc (pagesize);
- if (!data3)
- exit (1);
- if (read (fd, data3, pagesize) != pagesize)
- exit (1);
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- exit (1);
- close (fd);
- exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_mmap_fixed_mapped=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MMAP 1
-_ACEOF
-
-fi
-rm -f conftest.mmap
-
-saved_libs="$LIBS"
-LIBS="$LIBS $LIBC $LIBM"
-
-
-
-
-
-
-
-
-for ac_func in fmod getcwd putenv snprintf strcasecmp \
- strerror strncasecmp strtol
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- case $LIBOBJS in
- "$ac_func.$ac_objext" | \
- *" $ac_func.$ac_objext" | \
- "$ac_func.$ac_objext "* | \
- *" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-# vsnprintf is in the same source file as snprintf
-
-for ac_func in vsnprintf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- case $LIBOBJS in
- "snprintf.$ac_objext" | \
- *" snprintf.$ac_objext" | \
- "snprintf.$ac_objext "* | \
- *" snprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS snprintf.$ac_objext" ;;
-esac
-
-fi
-done
-
-LIBS="$saved_libs"
-
-
-
-
-
-
-for ac_func in gettimeofday isatty kill rename setlocale strsep
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-echo "$as_me:$LINENO: checking for mkstemp" >&5
-echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdlib.h>
-#include <unistd.h>
-int (*f) (char *);
-
-
-int
-main ()
-{
-
-
-f = mkstemp;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MKSTEMP 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- case $LIBOBJS in
- "mkstemp.$ac_objext" | \
- *" mkstemp.$ac_objext" | \
- "mkstemp.$ac_objext "* | \
- *" mkstemp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" ;;
-esac
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5
-echo $ECHO_N "checking whether sys_siglist is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_sys_siglist+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-#ifndef sys_siglist
- char *p = (char *) sys_siglist;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_have_decl_sys_siglist=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_sys_siglist=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5
-echo "${ECHO_T}$ac_cv_have_decl_sys_siglist" >&6
-if test $ac_cv_have_decl_sys_siglist = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST 1
-_ACEOF
-
-
-else
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST 0
-_ACEOF
-
-
-fi
-
-
-
-# checks for compiler characteristics
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking whether ANSI array delete syntax is supported" >&5
-echo $ECHO_N "checking whether ANSI array delete syntax is supported... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-
-char *p = new char[5];
-delete [] p;
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define ARRAY_DELETE_NEEDS_SIZE 1
-_ACEOF
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- echo "$as_me:$LINENO: checking traditional preprocessor" >&5
-echo $ECHO_N "checking traditional preprocessor... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#define name2(a, b) a/**/b
-
-
-int
-main ()
-{
-
-
-int name2(foo, bar);
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define TRADITIONAL_CPP 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for operating system services
-echo "$as_me:$LINENO: checking w_coredump" >&5
-echo $ECHO_N "checking w_coredump... $ECHO_C" >&6
- if test "$cross_compiling" = yes; then
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-
-int
-main ()
-{
-
-
-main()
-{
-#ifdef WCOREFLAG
- exit(1);
-#else
- int i = 0;
- ((union wait *)&i)->w_coredump = 1;
- exit(i != 0200);
-#endif
-}
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define WCOREFLAG 0200
-_ACEOF
-
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-# other random stuff
-echo "$as_me:$LINENO: checking default value for grops -b option" >&5
-echo $ECHO_N "checking default value for grops -b option... $ECHO_C" >&6
- test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=0
- echo "$as_me:$LINENO: result: $BROKEN_SPOOLER_FLAGS" >&5
-echo "${ECHO_T}$BROKEN_SPOOLER_FLAGS" >&6
-
-echo "$as_me:$LINENO: checking default paper size" >&5
-echo $ECHO_N "checking default paper size... $ECHO_C" >&6
- groff_prefix=$prefix
- test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix
- if test -z "$PAGE"; then
- descfile=
- if test -r $groff_prefix/share/groff/font/devps/DESC; then
- descfile=$groff_prefix/share/groff/font/devps/DESC
- elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
- descfile=$groff_prefix/lib/groff/font/devps/DESC
- else
- for f in $groff_prefix/share/groff/*/font/devps/DESC; do
- if test -r $f; then
- descfile=$f
- break
- fi
- done
- fi
-
- if test -n "$descfile"; then
- if grep '^paperlength[ ]\+841890' $descfile >/dev/null 2>&1; then
- PAGE=A4
- elif grep '^papersize[ ]\+[aA]4' $descfile >/dev/null 2>&1; then
- PAGE=A4
- fi
- fi
- fi
-
- if test -z "$PAGE"; then
- dom=`awk '($1 == "dom" || $1 == "search") { print $2; exit}' \
- /etc/resolv.conf 2>/dev/null`
- if test -z "$dom"; then
- dom=`(domainname) 2>/dev/null | tr -d '+'`
- if test -z "$dom" \
- || test "$dom" = '(none)'; then
- dom=`(hostname) 2>/dev/null | grep '\.'`
- fi
- fi
- # If the top-level domain is two letters and it's not `us' or `ca'
- # then they probably use A4 paper.
- case "$dom" in
- *.[Uu][Ss]|*.[Cc][Aa])
- ;;
- *.[A-Za-z][A-Za-z])
- PAGE=A4 ;;
- esac
- fi
-
- test -n "$PAGE" || PAGE=letter
- if test "x$PAGE" = "xA4"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define PAGEA4 1
-_ACEOF
-
- fi
- echo "$as_me:$LINENO: result: $PAGE" >&5
-echo "${ECHO_T}$PAGE" >&6
-
-echo "$as_me:$LINENO: checking for existing troff installation" >&5
-echo $ECHO_N "checking for existing troff installation... $ECHO_C" >&6
- if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- g=g
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- g=
- fi
-
-echo "$as_me:$LINENO: checking for prefix of system macro packages" >&5
-echo $ECHO_N "checking for prefix of system macro packages... $ECHO_C" >&6
- sys_tmac_prefix=
- sys_tmac_file_prefix=
- for d in /usr/share/lib/tmac /usr/lib/tmac; do
- for t in "" tmac.; do
- for m in an s m; do
- f=$d/$t$m
- if test -z "$sys_tmac_prefix" \
- && test -f $f \
- && grep '^\.if' $f >/dev/null 2>&1; then
- sys_tmac_prefix=$d/$t
- sys_tmac_file_prefix=$t
- fi
- done
- done
- done
- echo "$as_me:$LINENO: result: $sys_tmac_prefix" >&5
-echo "${ECHO_T}$sys_tmac_prefix" >&6
-
-
- echo "$as_me:$LINENO: checking which system macro packages should be made available" >&5
-echo $ECHO_N "checking which system macro packages should be made available... $ECHO_C" >&6
- tmac_wrap=
- if test "x$sys_tmac_file_prefix" = "xtmac."; then
- for f in $sys_tmac_prefix*; do
- suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
- case "$suff" in
- e)
- ;;
- *)
- grep "Copyright.*Free Software Foundation" $f >/dev/null \
- || tmac_wrap="$tmac_wrap $suff" ;;
- esac
- done
- elif test -n "$sys_tmac_prefix"; then
- files=`echo $sys_tmac_prefix*`
- grep "\\.so" $files >conftest.sol
- for f in $files; do
- case "$f" in
- ${sys_tmac_prefix}e)
- ;;
- *.me)
- ;;
- */ms.*)
- ;;
- *)
- b=`basename $f`
- if grep "\\.so.*/$b\$" conftest.sol >/dev/null \
- || grep -l "Copyright.*Free Software Foundation" $f >/dev/null; then
- :
- else
- suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
- case "$suff" in
- tmac.*)
- ;;
- *)
- tmac_wrap="$tmac_wrap $suff" ;;
- esac
- fi
- esac
- done
- rm -f conftest.sol
- fi
- echo "$as_me:$LINENO: result: $tmac_wrap" >&5
-echo "${ECHO_T}$tmac_wrap" >&6
-
-echo "$as_me:$LINENO: checking separator character to use in groff search paths" >&5
-echo $ECHO_N "checking separator character to use in groff search paths... $ECHO_C" >&6
- cp ${srcdir}/src/include/nonposix.h conftest.h
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <ctype.h>
-#include "conftest.h"
-
-
-int
-main ()
-{
-
-
-#if PATH_SEP_CHAR == ';'
-make an error "Path separator is ';'"
-#endif
-
-
- ;
- return 0;
-}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- GROFF_PATH_SEPARATOR=":"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-GROFF_PATH_SEPARATOR=";"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:$LINENO: result: $GROFF_PATH_SEPARATOR" >&5
-echo "${ECHO_T}$GROFF_PATH_SEPARATOR" >&6
-
-
-# Check whether --with-alt-gs or --without-alt-gs was given.
-if test "${with_alt_gs+set}" = set; then
- withval="$with_alt_gs"
- ALT_GHOSTSCRIPT_PROGS="$withval"
-else
- ALT_GHOSTSCRIPT_PROGS="gs gswin32c gsos2"
-fi;
-
-
-
-# Check whether --with-gs or --without-gs was given.
-if test "${with_gs+set}" = set; then
- withval="$with_gs"
- GHOSTSCRIPT=$withval
-else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in $ALT_GHOSTSCRIPT_PROGS
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_GHOSTSCRIPT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$GHOSTSCRIPT"; then
- ac_cv_prog_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_GHOSTSCRIPT="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-GHOSTSCRIPT=$ac_cv_prog_GHOSTSCRIPT
-if test -n "$GHOSTSCRIPT"; then
- echo "$as_me:$LINENO: result: $GHOSTSCRIPT" >&5
-echo "${ECHO_T}$GHOSTSCRIPT" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$GHOSTSCRIPT" && break
- done
-fi
-if test -z "$GHOSTSCRIPT"; then
- ac_ct_GHOSTSCRIPT=$GHOSTSCRIPT
- for ac_prog in $ALT_GHOSTSCRIPT_PROGS
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_GHOSTSCRIPT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_GHOSTSCRIPT"; then
- ac_cv_prog_ac_ct_GHOSTSCRIPT="$ac_ct_GHOSTSCRIPT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_GHOSTSCRIPT="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_GHOSTSCRIPT=$ac_cv_prog_ac_ct_GHOSTSCRIPT
-if test -n "$ac_ct_GHOSTSCRIPT"; then
- echo "$as_me:$LINENO: result: $ac_ct_GHOSTSCRIPT" >&5
-echo "${ECHO_T}$ac_ct_GHOSTSCRIPT" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_GHOSTSCRIPT" && break
-done
-
- if test "x$ac_ct_GHOSTSCRIPT" = x; then
- GHOSTSCRIPT="missing"
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- GHOSTSCRIPT=$ac_ct_GHOSTSCRIPT
- fi
-fi
-
-fi;
- test "$GHOSTSCRIPT" = "no" && GHOSTSCRIPT=missing
-
- make_html=html
- make_install_html=install_html
-
- missing=
- # Extract the first word of "pnmcut", so it can be a program name with args.
-set dummy pnmcut; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_pnmcut+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$pnmcut"; then
- ac_cv_prog_pnmcut="$pnmcut" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_pnmcut="found"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_pnmcut" && ac_cv_prog_pnmcut="missing"
-fi
-fi
-pnmcut=$ac_cv_prog_pnmcut
-if test -n "$pnmcut"; then
- echo "$as_me:$LINENO: result: $pnmcut" >&5
-echo "${ECHO_T}$pnmcut" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test $pnmcut = missing; then
- missing="$missing \`pnmcut'"
- fi;# Extract the first word of "pnmcrop", so it can be a program name with args.
-set dummy pnmcrop; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_pnmcrop+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$pnmcrop"; then
- ac_cv_prog_pnmcrop="$pnmcrop" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_pnmcrop="found"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_pnmcrop" && ac_cv_prog_pnmcrop="missing"
-fi
-fi
-pnmcrop=$ac_cv_prog_pnmcrop
-if test -n "$pnmcrop"; then
- echo "$as_me:$LINENO: result: $pnmcrop" >&5
-echo "${ECHO_T}$pnmcrop" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test $pnmcrop = missing; then
- missing="$missing \`pnmcrop'"
- fi;# Extract the first word of "pnmtopng", so it can be a program name with args.
-set dummy pnmtopng; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_pnmtopng+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$pnmtopng"; then
- ac_cv_prog_pnmtopng="$pnmtopng" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_pnmtopng="found"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_pnmtopng" && ac_cv_prog_pnmtopng="missing"
-fi
-fi
-pnmtopng=$ac_cv_prog_pnmtopng
-if test -n "$pnmtopng"; then
- echo "$as_me:$LINENO: result: $pnmtopng" >&5
-echo "${ECHO_T}$pnmtopng" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test $pnmtopng = missing; then
- missing="$missing \`pnmtopng'"
- fi;# Extract the first word of "psselect", so it can be a program name with args.
-set dummy psselect; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_psselect+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$psselect"; then
- ac_cv_prog_psselect="$psselect" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_psselect="found"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_psselect" && ac_cv_prog_psselect="missing"
-fi
-fi
-psselect=$ac_cv_prog_psselect
-if test -n "$psselect"; then
- echo "$as_me:$LINENO: result: $psselect" >&5
-echo "${ECHO_T}$psselect" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test $psselect = missing; then
- missing="$missing \`psselect'"
- fi;# Extract the first word of "pnmtops", so it can be a program name with args.
-set dummy pnmtops; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_pnmtops+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$pnmtops"; then
- ac_cv_prog_pnmtops="$pnmtops" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_pnmtops="found"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_pnmtops" && ac_cv_prog_pnmtops="missing"
-fi
-fi
-pnmtops=$ac_cv_prog_pnmtops
-if test -n "$pnmtops"; then
- echo "$as_me:$LINENO: result: $pnmtops" >&5
-echo "${ECHO_T}$pnmtops" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- if test $pnmtops = missing; then
- missing="$missing \`pnmtops'"
- fi;
-
- test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'"
-
- if test -n "$missing"; then
- plural=`set $missing; test $# -gt 1 && echo s`
- missing=`set $missing
- missing=""
- while test $# -gt 0
- do
- case $# in
- 1) missing="$missing$1" ;;
- 2) missing="$missing$1 and " ;;
- *) missing="$missing$1, " ;;
- esac
- shift
- done
- echo $missing`
-
- make_html=
- make_install_html=
-
- { echo "$as_me:$LINENO: WARNING: missing program$plural:
-
- The program$plural
- $missing
- cannot be found in the PATH.
- Consequently, groff's HTML backend (grohtml) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in HTML format.
- " >&5
-echo "$as_me: WARNING: missing program$plural:
-
- The program$plural
- $missing
- cannot be found in the PATH.
- Consequently, groff's HTML backend (grohtml) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in HTML format.
- " >&2;}
- fi
-
-
-
-
-# Check whether --with-alt-awk or --without-alt-awk was given.
-if test "${with_alt_awk+set}" = set; then
- withval="$with_alt_awk"
- ALT_AWK_PROGS="$withval"
-else
- ALT_AWK_PROGS="gawk mawk nawk awk"
-fi;
-
-
-
-# Check whether --with-awk or --without-awk was given.
-if test "${with_awk+set}" = set; then
- withval="$with_awk"
- AWK=$withval
-else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in $ALT_AWK_PROGS
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$AWK" && break
- done
-fi
-if test -z "$AWK"; then
- ac_ct_AWK=$AWK
- for ac_prog in $ALT_AWK_PROGS
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_AWK"; then
- ac_cv_prog_ac_ct_AWK="$ac_ct_AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AWK="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_AWK=$ac_cv_prog_ac_ct_AWK
-if test -n "$ac_ct_AWK"; then
- echo "$as_me:$LINENO: result: $ac_ct_AWK" >&5
-echo "${ECHO_T}$ac_ct_AWK" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_AWK" && break
-done
-
- if test "x$ac_ct_AWK" = x; then
- AWK="missing"
- else
- if test "$build" != "$host"; then
- { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- fi
- AWK=$ac_ct_AWK
- fi
-fi
-
-fi;
- test "$AWK" = "no" && AWK=missing
-
-
-
- make_pdfdoc=pdfdoc
- make_install_pdfdoc=install_pdfdoc
-
- missing=""
- test "$AWK" = missing && missing="\`awk'"
- test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'"
- if test -n "$missing"; then
- plural=`set $missing; test $# -eq 2 && echo s`
- test x$plural = xs \
- && missing=`set $missing; echo "$1 and $2"` \
- || missing=`echo $missing`
-
- make_pdfdoc=
- make_install_pdfdoc=
-
- { echo "$as_me:$LINENO: WARNING: missing program$plural:
-
- The program$plural $missing cannot be found in the PATH.
- Consequently, groff's PDF formatter (pdfroff) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in PDF format.
- " >&5
-echo "$as_me: WARNING: missing program$plural:
-
- The program$plural $missing cannot be found in the PATH.
- Consequently, groff's PDF formatter (pdfroff) will not work properly;
- therefore, it will neither be possible to prepare, nor to install,
- documentation in PDF format.
- " >&2;}
- fi
-
-
-
-echo "$as_me:$LINENO: checking whether pnmtops can handle the -nosetpage option" >&5
-echo $ECHO_N "checking whether pnmtops can handle the -nosetpage option... $ECHO_C" >&6
- if echo P2 2 2 255 0 1 2 0 | pnmtops -nosetpage > /dev/null 2>&1 ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- pnmtops_nosetpage="pnmtops -nosetpage"
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- pnmtops_nosetpage="pnmtops"
- fi
-
-
- ac_config_files="$ac_config_files stamp-h"
-
- ac_config_files="$ac_config_files Makefile doc/Makefile src/utils/xtotroff/Makefile"
-
- ac_config_files="$ac_config_files contrib/gdiffmk/tests/runtests"
-
- ac_config_files="$ac_config_files test-groff"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
- (set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-} |
- sed '
- t clear
- : clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
- cat confcache >$cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`echo "$ac_i" | sed "$ac_script"`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-elif test -n "${BASH_VERSION+set}${KSH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Find who we are. Look in the path if we contain no path at all
-# relative or not.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute file name" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute file name" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s,[$]LINENO.*,&-,
- t lineno
- b
- : lineno
- N
- : loop
- s,[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\),\2\1\2,
- t loop
- s,-\n.*,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.59b. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.59b,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2004 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- -*)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
- esac
-
- case $ac_option in
- # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1" ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "stamp-h" ) CONFIG_FILES="$CONFIG_FILES stamp-h" ;;
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
- "src/utils/xtotroff/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/utils/xtotroff/Makefile" ;;
- "contrib/gdiffmk/tests/runtests" ) CONFIG_FILES="$CONFIG_FILES contrib/gdiffmk/tests/runtests" ;;
- "test-groff" ) CONFIG_FILES="$CONFIG_FILES test-groff" ;;
- "src/include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/include/config.h:src/include/config.hin" ;;
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -f -r $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@CXX@,$CXX,;t t
-s,@CXXFLAGS@,$CXXFLAGS,;t t
-s,@ac_ct_CXX@,$ac_ct_CXX,;t t
-s,@TTYDEVDIRS@,$TTYDEVDIRS,;t t
-s,@OTHERDEVDIRS@,$OTHERDEVDIRS,;t t
-s,@CPP@,$CPP,;t t
-s,@X_CFLAGS@,$X_CFLAGS,;t t
-s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
-s,@X_LIBS@,$X_LIBS,;t t
-s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
-s,@XDEVDIRS@,$XDEVDIRS,;t t
-s,@XPROGDIRS@,$XPROGDIRS,;t t
-s,@XLIBDIRS@,$XLIBDIRS,;t t
-s,@appresdir@,$appresdir,;t t
-s,@LPR@,$LPR,;t t
-s,@LP@,$LP,;t t
-s,@LPQ@,$LPQ,;t t
-s,@PSPRINT@,$PSPRINT,;t t
-s,@DVIPRINT@,$DVIPRINT,;t t
-s,@PERLPATH@,$PERLPATH,;t t
-s,@YACC@,$YACC,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@INSTALL_INFO@,$INSTALL_INFO,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@LN_S@,$LN_S,;t t
-s,@SH_SCRIPT_SED_CMD@,$SH_SCRIPT_SED_CMD,;t t
-s,@GREP@,$GREP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@LIBC@,$LIBC,;t t
-s,@LIBM@,$LIBM,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@BROKEN_SPOOLER_FLAGS@,$BROKEN_SPOOLER_FLAGS,;t t
-s,@PAGE@,$PAGE,;t t
-s,@g@,$g,;t t
-s,@sys_tmac_prefix@,$sys_tmac_prefix,;t t
-s,@tmac_wrap@,$tmac_wrap,;t t
-s,@GROFF_PATH_SEPARATOR@,$GROFF_PATH_SEPARATOR,;t t
-s,@ALT_GHOSTSCRIPT_PROGS@,$ALT_GHOSTSCRIPT_PROGS,;t t
-s,@GHOSTSCRIPT@,$GHOSTSCRIPT,;t t
-s,@ac_ct_GHOSTSCRIPT@,$ac_ct_GHOSTSCRIPT,;t t
-s,@pnmcut@,$pnmcut,;t t
-s,@pnmcrop@,$pnmcrop,;t t
-s,@pnmtopng@,$pnmtopng,;t t
-s,@psselect@,$psselect,;t t
-s,@pnmtops@,$pnmtops,;t t
-s,@make_html@,$make_html,;t t
-s,@make_install_html@,$make_install_html,;t t
-s,@ALT_AWK_PROGS@,$ALT_AWK_PROGS,;t t
-s,@AWK@,$AWK,;t t
-s,@ac_ct_AWK@,$ac_ct_AWK,;t t
-s,@make_pdfdoc@,$make_pdfdoc,;t t
-s,@make_install_pdfdoc@,$make_install_pdfdoc,;t t
-s,@pnmtops_nosetpage@,$pnmtops_nosetpage,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
- cat >>$CONFIG_STATUS <<\_ACEOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
- fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- test -d "$ac_dir" || mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute names, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
- esac
-
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
- # Run the commands associated with the file.
- case $ac_file in
- stamp-h ) echo timestamp > stamp-h ;;
- contrib/gdiffmk/tests/runtests ) chmod +x contrib/gdiffmk/tests/runtests ;;
- test-groff ) chmod +x test-groff ;;
- esac
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Quote $f, to prevent DOS file names from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
- if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
- else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- test -d "$ac_dir" || mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- rm -f $ac_file
- mv $tmp/config.h $ac_file
- fi
- else
- cat $tmp/config.h
- rm -f $tmp/config.h
- fi
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-
-
-if test -z "$groff_no_x"; then
- if test "x$with_appresdir" = "x"; then
- { echo "$as_me:$LINENO:
-
- The application resource file for gxditview will be installed as
-
- $appresdir/GXditview
-
- (an existing file will be saved as \`GXditview.old').
- To install it into a different directory, say, \`/etc/gxditview',
- add \`--with-appresdir=/etc/gxditview' to the configure script
- command line options and rerun it. The environment variable
- \`APPLRESDIR' must then be set to \`/etc/' (note the trailing slash),
- omitting the \`gxditview' part which is automatically appended by
- the X11 searching routines for resource files. More details can be
- found in the X(7) manual page.
- " >&5
-echo "$as_me:
-
- The application resource file for gxditview will be installed as
-
- $appresdir/GXditview
-
- (an existing file will be saved as \`GXditview.old').
- To install it into a different directory, say, \`/etc/gxditview',
- add \`--with-appresdir=/etc/gxditview' to the configure script
- command line options and rerun it. The environment variable
- \`APPLRESDIR' must then be set to \`/etc/' (note the trailing slash),
- omitting the \`gxditview' part which is automatically appended by
- the X11 searching routines for resource files. More details can be
- found in the X(7) manual page.
- " >&6;}
- fi
- fi
diff --git a/contrib/groff/configure.ac b/contrib/groff/configure.ac
deleted file mode 100644
index 2fe8967f2386..000000000000
--- a/contrib/groff/configure.ac
+++ /dev/null
@@ -1,126 +0,0 @@
-# Autoconf configuration file for groff.
-# Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Process this file with autoconf to produce a configure script.
-
-AC_INIT
-AC_PREREQ(2.59)
-
-AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
-AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
-
-# checks for programs
-AC_PROG_CC
-AC_PROG_CXX
-GROFF_CXX_CHECK
-GROFF_EBCDIC
-GROFF_OS390
-GROFF_X11
-GROFF_APPRESDIR_OPTION
-GROFF_APPRESDIR_DEFAULT
-GROFF_PRINT
-AC_PATH_PROG([PERLPATH], [perl], [/usr/bin/perl])
-GROFF_PROG_YACC
-AC_PROG_RANLIB
-GROFF_INSTALL_SH
-GROFF_INSTALL_INFO
-AC_PROG_INSTALL
-AC_PROG_LN_S
-
-# use a dummy substitution if no csh hack is necessary to avoid errors
-# with non-GNU sed programs
-GROFF_CSH_HACK([SH_SCRIPT_SED_CMD='1s/.*/:/'], [SH_SCRIPT_SED_CMD='1s/a/a/'])
-AC_SUBST([SH_SCRIPT_SED_CMD])
-
-# checks for headers
-AC_CHECK_HEADERS([stdlib.h unistd.h dirent.h limits.h sys/dir.h \
- string.h strings.h math.h sys/time.h direct.h process.h])
-GROFF_ISC_SYSV3
-GROFF_POSIX
-
-# checks for header stuff
-GROFF_SRAND
-GROFF_NEED_DECLARATION([gettimeofday])
-GROFF_NEED_DECLARATION([hypot])
-GROFF_NEED_DECLARATION([popen])
-GROFF_NEED_DECLARATION([pclose])
-GROFF_NEED_DECLARATION([putenv])
-GROFF_NEED_DECLARATION([rand])
-GROFF_NEED_DECLARATION([snprintf])
-GROFF_NEED_DECLARATION([srand])
-GROFF_NEED_DECLARATION([strcasecmp])
-GROFF_NEED_DECLARATION([strncasecmp])
-GROFF_NEED_DECLARATION([vfprintf])
-GROFF_NEED_DECLARATION([vsnprintf])
-GROFF_SYS_NERR
-GROFF_SYS_ERRLIST
-GROFF_OSFCN_H
-GROFF_LIMITS_H
-GROFF_INTTYPES_H
-
-# checks for typedefs
-GROFF_UNSIGNED_LONG_LONG
-GROFF_UINTMAX_T
-GROFF_TIME_T
-GROFF_TYPE_SIGNAL
-GROFF_STRUCT_EXCEPTION
-
-# checks for libraries
-GROFF_LIBC
-GROFF_LIBM
-
-# checks for functions
-AC_FUNC_MMAP
-saved_libs="$LIBS"
-LIBS="$LIBS $LIBC $LIBM"
-AC_REPLACE_FUNCS([fmod getcwd putenv snprintf strcasecmp \
- strerror strncasecmp strtol])
-# vsnprintf is in the same source file as snprintf
-AC_CHECK_FUNCS([vsnprintf], [], [AC_LIBOBJ([snprintf])])
-LIBS="$saved_libs"
-AC_CHECK_FUNCS([gettimeofday isatty kill rename setlocale strsep])
-GROFF_MKSTEMP
-AC_CHECK_DECLS([sys_siglist])
-
-# checks for compiler characteristics
-GROFF_ARRAY_DELETE
-GROFF_TRADITIONAL_CPP
-
-# checks for operating system services
-GROFF_WCOREFLAG
-
-# other random stuff
-GROFF_BROKEN_SPOOLER_FLAGS
-GROFF_PAGE
-GROFF_G
-GROFF_TMAC
-GROFF_TARGET_PATH_SEPARATOR
-GROFF_HTML_PROGRAMS
-GROFF_PDFDOC_PROGRAMS
-GROFF_PNMTOPS_NOSETPAGE
-
-AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
-AC_CONFIG_FILES([Makefile doc/Makefile src/utils/xtotroff/Makefile])
-AC_CONFIG_FILES([contrib/gdiffmk/tests/runtests],
- [chmod +x contrib/gdiffmk/tests/runtests])
-AC_CONFIG_FILES([test-groff], [chmod +x test-groff])
-AC_OUTPUT
-
-GROFF_APPRESDIR_CHECK
diff --git a/contrib/groff/contrib/eqn2graph/Makefile.sub b/contrib/groff/contrib/eqn2graph/Makefile.sub
deleted file mode 100644
index 6ccdd982a4c4..000000000000
--- a/contrib/groff/contrib/eqn2graph/Makefile.sub
+++ /dev/null
@@ -1,19 +0,0 @@
-MAN1=eqn2graph.n
-CLEANADD=eqn2graph
-
-all: eqn2graph
-
-eqn2graph: eqn2graph.sh
- rm -f $@; \
- sed -e "s|@g@|$(g)|g" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/eqn2graph.sh >$@; \
- chmod +x $@
-
-install_data: eqn2graph
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/eqn2graph
- $(INSTALL_SCRIPT) eqn2graph $(bindir)/eqn2graph
-
-uninstall_sub:
- -rm -f $(bindir)/eqn2graph
diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.man b/contrib/groff/contrib/eqn2graph/eqn2graph.man
deleted file mode 100644
index 3f34cc5e2a22..000000000000
--- a/contrib/groff/contrib/eqn2graph/eqn2graph.man
+++ /dev/null
@@ -1,115 +0,0 @@
-.\" $Id: eqn2graph.man,v 1.4 2003/10/28 07:46:23 wlemb Exp $
-.\" This documentation is released to the public domain.
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.
-.TH EQN2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.IX eqn2graph
-.SH NAME
-eqn2graph \- convert an EQN equation into a cropped image
-.
-.
-.SH SYNOPSIS
-.B eqn2graph
-[
-.B \-unsafe
-]
-[
-.BI \-format\ fmt
-]
-.
-.
-.SH DESCRIPTION
-Reads an EQN equation (one line) as input; produces an image
-file (by default in Portable Network Graphics format) suitable for the
-Web as output.
-.P
-Your input EQN code should \fInot\fR have the \&.EQ/.EN preamble that
-that normally precedes it within
-.BR groff (@MAN1EXT@)
-macros; nor do you need to have dollar-sign or other delimiters
-around the equation.
-.P
-The output image will be a black-on-white graphic clipped to the
-smallest possible bounding box that contains all the black pixels.
-By specifying command-line options to be passed to
-.BR convert (1)
-you can give it a border, set the background transparent, set the
-image's pixel density, or perform other useful transformations.
-.P
-This program uses
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-and the ImageMagick
-.BR convert (1)
-program.
-These programs must be installed on your system and accessible on your
-$PATH for \fBeqn2graph\fR to work.
-.
-.
-.SH OPTIONS
-.TP
-.B \-unsafe
-Run
-.BR groff (@MAN1EXT@)
-in the `unsafe' mode enabling the PIC macro
-.B sh
-to execute arbitrary commands.
-The default is to forbid this.
-.TP
-.BI \-format\ fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-Any format that
-.BR convert (1)
-can emit is supported.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR convert (1).
-.
-.
-.SH FILES
-.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-The
-.BR @g@eqn (@MAN1EXT@)
-initialization file.
-.
-.
-.SH ENVIRONMENT
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-If this is not set
-.B eqn2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.SH "SEE ALSO"
-.BR pic2graph (@MAN1EXT@),
-.BR grap2graph (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR convert (1).
-.
-.
-.SH AUTHOR
-Eric S. Raymond <esr@thyrsus.com>.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.sh b/contrib/groff/contrib/eqn2graph/eqn2graph.sh
deleted file mode 100644
index 98713a854ad5..000000000000
--- a/contrib/groff/contrib/eqn2graph/eqn2graph.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#! /bin/sh
-#
-# eqn2graph -- compile EQN equation descriptions to bitmap images
-#
-# by Eric S. Raymond <esr@thyrsus.com>, July 2002
-#
-# In Unixland, the magic is in knowing what to string together...
-#
-# Take an eqn equation on stdin, emit cropped bitmap on stdout.
-# The pic markup should *not* be wrapped in .EQ/.EN, this script will do that.
-# A -U option on the command line enables gpic/groff "unsafe" mode.
-# A -format FOO option changes the image output format to any format
-# supported by convert(1). All other options are passed to convert(1).
-# The default format is PNG.
-#
-# This is separate from pic2graph because pic processing has some weird
-# clipping effect on the output, mangling equations that are very wide
-# or deep. Besides, this tool can supply its own delimiters.
-#
-
-# Requires the groff suite and the ImageMagick tools. Both are open source.
-# This code is released to the public domain.
-#
-# Here are the assumptions behind the option processing:
-#
-# 1. None of the options of eqn(1) are relevant.
-#
-# 2. Only the -U option of groff(1) is relevant.
-#
-# 3. Many options of convert(1) are potentially relevant, (especially
-# -density, -interlace, -transparency, -border, and -comment).
-#
-# Thus, we pass -U to groff(1), and everything else to convert(1).
-#
-# $Id: eqn2graph.sh,v 1.5 2005/05/18 07:03:06 wl Exp $
-#
-groff_opts=""
-convert_opts=""
-format="png"
-
-while [ "$1" ]
-do
- case $1 in
- -unsafe)
- groff_opts="-U";;
- -format)
- format=$2
- shift;;
- -v | --version)
- echo "GNU eqn2graph (groff) version @VERSION@"
- exit 0;;
- --help)
- echo "usage: eqn2graph [ option ...] < in > out"
- exit 0;;
- *)
- convert_opts="$convert_opts $1";;
- esac
- shift
-done
-
-# create temporary directory
-tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
- test -z "$d" && continue
-
- tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null` \
- && test -n "$tmp" && test -d "$tmp" \
- && break
-
- tmp=$d/eqn2graph$$-$RANDOM
- (umask 077 && mkdir $tmp) 2> /dev/null && break
-done;
-if test -z "$tmp"; then
- echo "$0: cannot create temporary directory" >&2
- { (exit 1); exit 1; }
-fi
-
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
-
-# Here goes:
-# 1. Add .EQ/.EN.
-# 2. Process through eqn(1) to emit troff markup.
-# 3. Process through groff(1) to emit Postscript.
-# 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
-read equation
-(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \
- groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \
- && convert -trim -crop 0x0 $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \
- && cat $tmp/eqn2graph.$format
-
-# End
diff --git a/contrib/groff/contrib/gdiffmk/ChangeLog b/contrib/groff/contrib/gdiffmk/ChangeLog
deleted file mode 100644
index f8e3f9632edb..000000000000
--- a/contrib/groff/contrib/gdiffmk/ChangeLog
+++ /dev/null
@@ -1,63 +0,0 @@
-2005-01-16 Mike Bianchi <MBianchi@Foveal.com>
-
- * gdiffmk.sh (Usage): Fix typos.
- <top>: Allow `-M<arg1> <arg2>' also.
-
- * gdiffmk.man: Updated.
-
-2005-01-13 Mike Bianchi <MBianchi@Foveal.com>
-
- * gdiffmk.sh: Add the -D, -M, and -B options, which provide actions
- akin to nrchbar.
- Thanks to Larry Kollar (http://home.alltel.net/kollar/groff/).
-
- * gdiffmk.man: Updated.
-
- * tests/runtests.in: Added tests for gdiffmk's -D, -M, and -B
- options.
-
- * tests/baseline8, tests/baseline9, tests/baseline10: New files.
-
-2004-12-16 Mike Bianchi <MBianchi@Foveal.com>
-
- * tests/runtests.in: Fix typo (s/$(srcdir)/${srcdir}/).
-
-2004-12-15 Werner LEMBERG <wl@gnu.org>
-
- The configure script now generates tests/runtests.
-
- * tests/tests.sh: Renamed to...
- * tests/runtests.in: This.
- Add proper $srcdir prefixes to make it run from build directory.
- * README, Makefile.sub (CLEANADD), tests/test_baseline7: Updated.
-
-2004-12-14 Werner LEMBERG <wl@gnu.org>
-
- * gdiffmk.sh: Make sed pattern work with alternate result of GNU
- diff's -D option, using `!' instead of `not' in #endif comments.
- (Exit): Use prefix for each emitted message line.
-
-2004-12-14 Mike Bianchi <MBianchi@Foveal.com>
-
- * tests/*: New files for testing gdiffmk.
-
- * README, gdiffmk.man, gdiffmk.sh: Updated.
- Minor fixes.
-
-2004-12-13 Mike Bianchi <MBianchi@Foveal.com>
-
- Add `-x' command line option to select a diff program.
-
- * gdiffmk.sh: Add code to handle `-x'.
- Move test for working `diff' down.
- Fix sed pattern -- `.mc *' needs to be followed by `.mc .'.
- (Usage): Updated.
- * gdiffmk.man: Updated.
-
-2004-12-12 Mike Bianchi <MBianchi@Foveal.com>
-
- * README: New file.
-
-2004-12-11 Mike Bianchi <MBianchi@Foveal.com>
-
- First import of gdiffmk files.
diff --git a/contrib/groff/contrib/gdiffmk/Makefile.sub b/contrib/groff/contrib/gdiffmk/Makefile.sub
deleted file mode 100644
index 5e0cd147a434..000000000000
--- a/contrib/groff/contrib/gdiffmk/Makefile.sub
+++ /dev/null
@@ -1,47 +0,0 @@
-# Makefile.sub for `gdiffmk' (integration into the groff source tree)
-
-# File position: <groff-source>/contrib/gdiffmk/Makefile.sub
-
-# Last update: 12 December 2004
-
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# groff is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-# License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with groff; see the files COPYING and LICENSE in the top
-# directory of the groff source. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-########################################################################
-
-MAN1=gdiffmk.n
-CLEANADD=gdiffmk tests/runtests
-
-all: gdiffmk
-
-gdiffmk: gdiffmk.sh
- rm -f $@; \
- sed -e "s|@BINDIR@|$(bindir)|g" \
- -e "s|@VERSION@|$(version)$(revision)|g" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/gdiffmk.sh >$@; \
- chmod +x $@
-
-install_data: gdiffmk
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/gdiffmk
- $(INSTALL_SCRIPT) gdiffmk $(bindir)/gdiffmk
-
-uninstall_sub:
- -rm -f $(bindir)/gdiffmk
diff --git a/contrib/groff/contrib/gdiffmk/README b/contrib/groff/contrib/gdiffmk/README
deleted file mode 100644
index 9428717ede8c..000000000000
--- a/contrib/groff/contrib/gdiffmk/README
+++ /dev/null
@@ -1,46 +0,0 @@
-gdiffmk is approximately a recreation of the original Bell Labs/AT&T diffmk
-command for troff/nroff documents, with enhancements.
-
-It should not be confused with `diffmk' commands that operate on XML.
-
-The inspiration for this code was a Perl 2 version written in 1989 by Randal
-L. Schwartz. See
- landfield.com/software/comp.sources.misc/archive-name/volume06/diffmk.p.gz
-
-The command also attempts to reproduce some of the functionality of the old
-`nrchbar' command. See
- open-systems.ufl.edu/mirrors/ftp.isc.org/usenet/comp.sources.unix/volume10/nrchbar.Z
-
-Thanks to Werner Lemberg for help in making the package more portable and
-fit into the GNU groff source structure.
-
-Gnu diff(1) with the -Dname option does all of the work and sed(1)
-translates the output into something groff/troff/nroff can handle.
-
-Note the BUGS on the man page.
-
-The `tests' directory contains simple tests. `runtests run' runs them and
-compares the output against baseline files. Calling `runtests' without
-argument gives the usage.
-
-----------------------------------------------------------------------------
-
-Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-This file is part of the gdiffmk utility, which is part of groff.
-
-groff is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-License for more details.
-
-You should have received a copy of the GNU General Public License
-along with groff; see the files COPYING and LICENSE in the top
-directory of the groff source. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/groff/contrib/gdiffmk/gdiffmk.man b/contrib/groff/contrib/gdiffmk/gdiffmk.man
deleted file mode 100644
index 9c89182404f6..000000000000
--- a/contrib/groff/contrib/gdiffmk/gdiffmk.man
+++ /dev/null
@@ -1,281 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do mso www.tmac
-.
-.TH GDIFFMK @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-gdiffmk \- mark differences between groff/nroff/troff files
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgdiffmk 'u
-.ti \niu
-.B gdiffmk
-.de OP
-. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-. el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-a \%addmark
-.OP \-c \%changemark
-.OP \-d \%deletemark
-[\ \c
-.B \-D
-.OP \-B
-.OP \-M "mark1 mark2"
-]
-.OP \-x \%diffcmd
-.OP \-\-
-.OP \-\-help
-.OP \%\-\-version
-.I \%file1
-.I \%file2
-[\ \c
-.IR \%output \ \c
-]
-.br
-.ad \na
-.
-.
-.SH DESCRIPTION
-.B gdiffmk
-compares two
-.BR groff (1),
-.BR nroff (1),
-or
-.BR troff (1)
-documents,
-.I file1
-and
-.IR file2 ,
-and creates an output which is
-.I file2
-with added `margin character' (.mc) commands that indicate the differences.
-.
-.LP
-If the
-.I output
-filename is present,
-the output is written there.
-If it is
-.B \-
-or absent the output is written to the standard output.
-.
-.LP
-If the
-.I file1
-or
-.I file2
-argument is
-.B \-
-the standard input is read for that input.
-Clearly both cannot be
-.BR \- .
-.
-.LP
-Note that the output is not necessarily compatible with all macro packages
-and all preprocessors.
-See the
-.B BUGS
-section below.
-.
-.
-.SH OPTIONS
-.TP
-.BI \-a addmark
-Use the
-.I addmark
-for source lines not in
-.I file1
-but present in
-.IR file2 .
-Default:
-.BR + .
-.
-.TP
-.B \-B
-By default, the deleted texts marked by the
-.B \-D
-option end
-with an added troff break command,
-.BR .br ,
-to ensure that the deletions are marked properly.
-This is the only way to guarantee that deletions and small
-changes get flagged.
-This option directs the program not to insert these breaks; it makes no
-sense to use it without
-.BR \-D .
-.
-.TP
-.BI \-c changemark
-Use the
-.I changemark
-for changed source lines.
-Default:
-.BR | .
-.
-.TP
-.BI \-d deletemark
-Use the
-.I deletemark
-for deleted source lines.
-Default:
-.BR * .
-.
-.TP
-.B \-D
-Show the deleted portions from changed and deleted text.
-Default delimiting marks:
-.BR "[[" " .\&.\&.\&. " "]]" .
-.
-.TP
-.BI \-M "mark1 mark2"
-Change the delimiting marks for the
-.B \-D
-option.
-It makes no sense to use this option without
-.BR \-D .
-.
-.TP
-.BI \-x diffcmd
-Use the
-.I diffcmd
-command to perform the comparison of
-.I file1
-and
-.IR file2 .
-In particular,
-.I diffcmd
-should accept the GNU
-.B diff
-.BI \-D name
-option.
-Default:
-.BR diff (1).
-.
-.TP
-.B \-\-
-All the following arguments are treated as file names,
-even if they begin with
-.BR \- .
-.
-.TP
-.B \-\-help
-Print a usage message on standard error output and exit.
-.
-.TP
-.B \-\-version
-Print version information on the standard output and exit.
-.
-.
-.SH BUGS
-The output is not necessarily compatible with all macro packages
-and all preprocessors.
-A workaround that is often successful against preprocessor problems
-is to run
-.B gdiffmk
-on the output of all the preprocessors instead of the input source.
-.
-.LP
-.B gdiffmk
-relies on the
-.BI \-D name
-option of GNU
-.BR diff (1)
-to make a merged `#ifdef' output format.
-It hasn't been tested whether other versions of
-.BR diff (1)
-do support this option.
-See also the
-.BI \-x diffcmd
-option.
-.
-.LP
-Report bugs to bug-groff@gnu.org.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of
-.B gdiffmk
-you are using.
-.
-.
-.SH AUTHORS
-This document was written and is maintained by
-.MTO MBianchi@Foveal.com "Mike Bianchi" .
-.
-.LP
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.LP
-.B gdiffmk
-is part of the
-.I groff
-GNU free software project.
-All parts of the
-.I groff package
-are protected by GNU copyleft licenses.
-The software files are distributed under the terms of the GNU General
-Public License (GPL), while the documentation files mostly use the GNU
-Free Documentation License (FDL).
-.
-.
-.SH COPYRIGHT
-Copyright \(co 2004, 2005 Free Software Foundation, Inc.
-.
-.LP
-.B gdiffmk
-is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-.
-.LP
-.B gdiffmk
-is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-See the GNU General Public License for more details.
-.
-.LP
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING.
-If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR nroff (@MAN1EXT@),
-.BR gtroff (@MAN1EXT@),
-.BR diff (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/gdiffmk/gdiffmk.sh b/contrib/groff/contrib/gdiffmk/gdiffmk.sh
deleted file mode 100644
index e55eb6962019..000000000000
--- a/contrib/groff/contrib/gdiffmk/gdiffmk.sh
+++ /dev/null
@@ -1,346 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# groff is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-# License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with groff; see the files COPYING and LICENSE in the top
-# directory of the groff source. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-# This file is part of GNU gdiffmk.
-
-
-cmd=$( basename $0 )
-
-function Usage {
- if test "$#" -gt 0
- then
- echo >&2 "${cmd}: $@"
- fi
- echo >&2 "\
-
-Usage: ${cmd} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
-Place difference marks into the new version of a groff/nroff/troff document.
-FILE1 and FILE2 are compared, using \`diff', and FILE2 is output with
-groff \`.mc' requests added to indicate how it is different from FILE1.
-
- FILE1 Previous version of the groff file. \`-' means standard input.
- FILE2 Current version of the groff file. \`-' means standard input.
- Either FILE1 or FILE2 can be standard input, but not both.
- OUTPUT Copy of FILE2 with \`.mc' commands added.
- \`-' means standard output (the default).
-
-OPTIONS:
- -a ADDMARK Mark for added groff source lines. Default: \`+'.
- -c CHANGEMARK Mark for changed groff source lines. Default: \`|'.
- -d DELETEMARK Mark for deleted groff source lines. Default: \`*'.
-
- -D Show the deleted portions from changed and deleted text.
- Default delimiting marks: \`[[' .... \`]]'.
- -B By default, the deleted texts marked by the \`-D' option end
- with an added troff \`.br' command. This option prevents
- the added \`.br'.
- -M MARK1 MARK2 Change the delimiting marks for the \`-D' option.
-
- -x DIFFCMD Use a different diff(1) command;
- one that accepts the \`-Dname' option, such as GNU diff.
- --version Print version information on the standard output and exit.
- --help Print this message on the standard error.
-"
- exit 255
-}
-
-
-function Exit {
- exitcode=$1
- shift
- for arg
- do
- echo >&2 "${cmd}: $1"
- shift
- done
- exit ${exitcode}
-}
-
-# Usage: FileRead exit_code filename
-#
-# Check for existence and readability of given file name.
-# If not found or not readable, print message and exit with EXIT_CODE.
-function FileRead {
- case "$2" in
- -)
- return
- ;;
- esac
-
- if test ! -e "$2"
- then
- Exit $1 "File \`$2' not found."
- fi
- if test ! -r "$2"
- then
- Exit $1 "File \`$2' not readable."
- fi
-}
-
-
-# Usage: FileCreate exit_code filename
-#
-# Create the given filename if it doesn't exist.
-# If unable to create or write, print message and exit with EXIT_CODE.
-function FileCreate {
- case "$2" in
- -)
- return
- ;;
- esac
-
- if ! touch "$2" 2>/dev/null
- then
- if test ! -e "$2"
- then
- Exit $1 "File \`$2' not created; " \
- "Cannot write directory \`$( dirname "$2" )'."
- fi
- Exit $1 "File \`$2' not writeable."
- fi
-}
-
-function WouldClobber {
- case "$2" in
- -)
- return
- ;;
- esac
-
- if test "$1" -ef "$3"
- then
- Exit 3 \
- "The $2 and OUTPUT arguments both point to the same file," \
- "\`$1', and it would be overwritten."
- fi
-}
-
-ADDMARK='+'
-CHANGEMARK='|'
-DELETEMARK='*'
-MARK1='[['
-MARK2=']]'
-
-function RequiresArgument {
- # Process flags that take either concatenated or
- # separated values.
- case "$1" in
- -??*)
- expr "$1" : '-.\(.*\)'
- return 1
- ;;
- esac
-
- if test "$#" -lt 2
- then
- Exit 255 "Option \`$1' requires a value."
- fi
-
- echo "$2"
- return 0
-}
-
-badoption=
-DIFFCMD=diff
-D_option=
-br=.br
-for OPTION
-do
- case "${OPTION}" in
- -a*)
- ADDMARK=$( RequiresArgument "${OPTION}" $2 ) &&
- shift
- ;;
- -c*)
- CHANGEMARK=$( RequiresArgument "${OPTION}" $2 ) &&
- shift
- ;;
- -d*)
- DELETEMARK=$( RequiresArgument "${OPTION}" $2 ) &&
- shift
- ;;
- -D )
- D_option=D_option
- ;;
- -M* )
- MARK1=$( RequiresArgument "${OPTION}" $2 ) &&
- shift
- if [ $# -lt 2 ]
- then
- Usage "Option \`-M' is missing the MARK2 value."
- fi
- MARK2=$2
- shift
- ;;
- -B )
- br=.
- ;;
- -x* )
- DIFFCMD=$( RequiresArgument "${OPTION}" $2 ) &&
- shift
- ;;
- --version)
- echo "GNU ${cmd} (groff) version @VERSION@"
- exit 0
- ;;
- --help)
- Usage
- ;;
- --)
- # What follows -- are file arguments
- shift
- break
- ;;
- -)
- break
- ;;
- -*)
- badoption="${cmd}: invalid option \`$1'"
- ;;
- *)
- break
- ;;
- esac
- shift
-done
-
-${DIFFCMD} -Dx /dev/null /dev/null >/dev/null 2>&1 ||
- Usage "The \`${DIFFCMD}' program does not accept" \
- "the required \`-Dname' option.
-Use GNU diff instead. See the \`-x DIFFCMD' option."
-
-if test -n "${badoption}"
-then
- Usage "${badoption}"
-fi
-
-if test "$#" -lt 2 -o "$#" -gt 3
-then
- Usage "Incorrect number of arguments."
-fi
-
-if test "1$1" = 1- -a "2$2" = 2-
-then
- Usage "Both FILE1 and FILE2 are \`-'."
-fi
-
-FILE1=$1
-FILE2=$2
-
-FileRead 1 "${FILE1}"
-FileRead 2 "${FILE2}"
-
-if test "$#" = 3
-then
- case "$3" in
- -)
- # output goes to standard output
- ;;
- *)
- # output goes to a file
- WouldClobber "${FILE1}" FILE1 "$3"
- WouldClobber "${FILE2}" FILE2 "$3"
-
- FileCreate 3 "$3"
- exec >$3
- ;;
- esac
-fi
-
-# To make a very unlikely label even more unlikely ...
-label=__diffmk_$$__
-
-sed_script='
- /^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
- /^#ifdef '"${label}"'/ s/.*/.mc '"${ADDMARK}"'/
- /^#endif \/\* '"${label}"'/ s/.*/.mc/
- p
- d
- }
- /^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
- /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
- /^#else \/\* '"${label}"'/ s/.*/.mc '"${CHANGEMARK}"'/
- /^#endif \/\* '"${label}"'/ s/.*/.mc/
- p
- d
- }
- /^#endif \/\* \(not\|!\) '"${label}"'/ {
- s/.*/.mc '"${DELETEMARK}"'/p
- a\
-.mc
- }
- d
- }
- p
- '
-
-if [ ${D_option} ]
-then
- sed_script='
- /^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
- /^#ifdef '"${label}"'/ s/.*/.mc '"${ADDMARK}"'/
- /^#endif \/\* '"${label}"'/ s/.*/.mc/
- p
- d
- }
- /^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
- /^#ifndef '"${label}"'/ {
- i\
-'"${MARK1}"'
- d
- }
- /^#else \/\* '"${label}"'/ ! {
- /^#endif \/\* [!not ]*'"${label}"'/ ! {
- p
- d
- }
- }
- /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
- /^#else \/\* '"${label}"'/ {
- i\
-'"${MARK2}"'\
-'"${br}"'
- s/.*/.mc '"${CHANGEMARK}"'/
- a\
-.mc '"${CHANGEMARK}"'
- d
- }
- /^#endif \/\* '"${label}"'/ s/.*/.mc/
- p
- d
- }
- /^#endif \/\* \(not\|!\) '"${label}"'/ {
- i\
-'"${MARK2}"'\
-'"${br}"'
- s/.*/.mc '"${DELETEMARK}"'/p
- a\
-.mc
- }
- d
- }
- p
- '
-fi
-
-diff -D"${label}" -- ${FILE1} ${FILE2} |
- sed -n "${sed_script}"
-
-# EOF
diff --git a/contrib/groff/contrib/gdiffmk/tests/file1 b/contrib/groff/contrib/gdiffmk/tests/file1
deleted file mode 100644
index ba6a4be2eda5..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/file1
+++ /dev/null
@@ -1,11 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-file1 only
-file1 and file2 #2
-file1 and file2 #3
-file1 only
-file1 only
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/file2 b/contrib/groff/contrib/gdiffmk/tests/file2
deleted file mode 100644
index 54e95eef295b..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/file2
+++ /dev/null
@@ -1,11 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-file2 only
-file2 only
-file1 and file2 #2
-file2 only
-file1 and file2 #3
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/runtests.in b/contrib/groff/contrib/gdiffmk/tests/runtests.in
deleted file mode 100644
index 82952652e2d0..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/runtests.in
+++ /dev/null
@@ -1,98 +0,0 @@
-#! /bin/sh
-# A very simple function test for gdiffmk.sh.
-
-srcdir=@srcdir@
-
-command=../gdiffmk
-
-# Test the number of arguments and the first argument.
-case $#-$1 in
-1-clean )
- rm -fv test_result* tmp_file*
- exit 0
- ;;
-1-run )
- ;;
-* )
- echo >&2 "$0 [ clean | run ]
-Run a few simple tests on \`${command}'."'
-
-clean Remove the test_result? and tmp_file? files.
-run Run the tests.
-'
- exit 255
- ;;
-esac
-
-function TestResult {
- if cmp -s $1 $2
- then
- echo $2 PASSED
- else
- echo ''
- echo $2 TEST FAILED
- diff $1 $2
- echo ''
- fi
-}
-
-tmpfile=/tmp/$$
-trap 'rm -f ${tmpfile}' 0 1 2 3 15
-
-# Run tests.
-
-# 3 file arguments
-ResultFile=test_result1
-${command} ${srcdir}/file1 ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
-cat ${tmpfile} >>${ResultFile}
-TestResult ${srcdir}/test_baseline ${ResultFile}
-
-# OUTPUT to stdout by default
-ResultFile=test_result2
-${command} ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline ${ResultFile}
-
-# OUTPUT to stdout via - argument
-ResultFile=test_result3
-${command} ${srcdir}/file1 ${srcdir}/file2 - >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline ${ResultFile}
-
-# FILE1 from standard input via - argument
-ResultFile=test_result4
-${command} - ${srcdir}/file2 <${srcdir}/file1 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline ${ResultFile}
-
-# FILE2 from standard input via - argument
-ResultFile=test_result5
-${command} ${srcdir}/file1 - <${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline ${ResultFile}
-
-# Different values for addmark, changemark, deletemark
-ResultFile=test_result6
-${command} -aA -cC -dD ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline6 ${ResultFile}
-
-# Test for accidental file overwrite.
-ResultFile=test_result7
-cp ${srcdir}/file2 tmp_file7
-${command} -aA -dD -cC ${srcdir}/file1 tmp_file7 tmp_file7 \
- >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline7 ${ResultFile}
-
-# Test -D option
-ResultFile=test_result8
-${command} -D ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline8 ${ResultFile}
-
-# Test -D and -M options
-ResultFile=test_result9
-${command} -D -M '<<<<' '>>>>' \
- ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline9 ${ResultFile}
-
-# Test -D and -B options
-ResultFile=test_result10
-${command} -D -B ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/test_baseline10 ${ResultFile}
-
-# EOF
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline b/contrib/groff/contrib/gdiffmk/tests/test_baseline
deleted file mode 100644
index 6b329926ae87..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline
+++ /dev/null
@@ -1,17 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-.mc |
-file2 only
-file2 only
-.mc
-file1 and file2 #2
-.mc +
-file2 only
-.mc
-file1 and file2 #3
-.mc *
-.mc
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline10 b/contrib/groff/contrib/gdiffmk/tests/test_baseline10
deleted file mode 100644
index b523f4520005..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline10
+++ /dev/null
@@ -1,26 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-[[
-file1 only
-]]
-.
-.mc |
-file2 only
-file2 only
-.mc
-file1 and file2 #2
-.mc +
-file2 only
-.mc
-file1 and file2 #3
-[[
-file1 only
-file1 only
-]]
-.
-.mc *
-.mc
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline6 b/contrib/groff/contrib/gdiffmk/tests/test_baseline6
deleted file mode 100644
index 3156961b4a21..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline6
+++ /dev/null
@@ -1,17 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-.mc C
-file2 only
-file2 only
-.mc
-file1 and file2 #2
-.mc A
-file2 only
-.mc
-file1 and file2 #3
-.mc D
-.mc
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline7 b/contrib/groff/contrib/gdiffmk/tests/test_baseline7
deleted file mode 100644
index b65e8320c34d..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline7
+++ /dev/null
@@ -1,2 +0,0 @@
-gdiffmk: The FILE2 and OUTPUT arguments both point to the same file,
-gdiffmk: `tmp_file7', and it would be overwritten.
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline8 b/contrib/groff/contrib/gdiffmk/tests/test_baseline8
deleted file mode 100644
index 9846dd583cb0..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline8
+++ /dev/null
@@ -1,26 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-[[
-file1 only
-]]
-.br
-.mc |
-file2 only
-file2 only
-.mc
-file1 and file2 #2
-.mc +
-file2 only
-.mc
-file1 and file2 #3
-[[
-file1 only
-file1 only
-]]
-.br
-.mc *
-.mc
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/gdiffmk/tests/test_baseline9 b/contrib/groff/contrib/gdiffmk/tests/test_baseline9
deleted file mode 100644
index 50fe57d6d2b1..000000000000
--- a/contrib/groff/contrib/gdiffmk/tests/test_baseline9
+++ /dev/null
@@ -1,26 +0,0 @@
-.ll 25
-.pl 20
-.nf
-file1 and file2 #1
-<<<<
-file1 only
->>>>
-.br
-.mc |
-file2 only
-file2 only
-.mc
-file1 and file2 #2
-.mc +
-file2 only
-.mc
-file1 and file2 #3
-<<<<
-file1 only
-file1 only
->>>>
-.br
-.mc *
-.mc
-file1 and file2 #4
-file1 and file2 #5
diff --git a/contrib/groff/contrib/grap2graph/Makefile.sub b/contrib/groff/contrib/grap2graph/Makefile.sub
deleted file mode 100644
index 5527618e1581..000000000000
--- a/contrib/groff/contrib/grap2graph/Makefile.sub
+++ /dev/null
@@ -1,19 +0,0 @@
-MAN1=grap2graph.n
-CLEANADD=grap2graph
-
-all: grap2graph
-
-grap2graph: grap2graph.sh
- rm -f $@; \
- sed -e "s|@g@|$(g)|g" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grap2graph.sh >$@; \
- chmod +x $@
-
-install_data: grap2graph
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/grap2graph
- $(INSTALL_SCRIPT) grap2graph $(bindir)/grap2graph
-
-uninstall_sub:
- -rm -f $(bindir)/grap2graph
diff --git a/contrib/groff/contrib/grap2graph/grap2graph.man b/contrib/groff/contrib/grap2graph/grap2graph.man
deleted file mode 100644
index 0c6d4568d77e..000000000000
--- a/contrib/groff/contrib/grap2graph/grap2graph.man
+++ /dev/null
@@ -1,105 +0,0 @@
-.\" $Id: grap2graph.man,v 1.3 2003/10/28 07:46:23 wlemb Exp $
-.\" This documentation is released to the public domain.
-.
-.
-.TH GRAP2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.IX grap2graph
-.SH NAME
-grap2graph \- convert a grap diagram into a cropped bitmap image
-.
-.
-.SH SYNOPSIS
-.B grap2graph
-[
-.B \-unsafe
-]
-[
-.BI \-resolution\ M\fR|\fPMxN
-]
-[
-.BI \-format\ fmt
-]
-.
-.
-.SH DESCRIPTION
-Reads a grap program as input; produces an image file (by default in
-Portable Network Graphics format) suitable for the Web as output.
-For a description of the grap language, see
-.BR grap (1).
-.P
-Your graph specification should \fInot\fR be wrapped with the \&.G1 and
-\&.G2 macros that normally guard it within
-.BR groff (@MAN1EXT@)
-macros.
-.P
-The output image will be a black-on-white graphic clipped to the
-smallest possible bounding box that contains all the black pixels.
-By specifying command-line options to be passed to
-.BR convert (1)
-you can give it a border, set the background transparent, set the
-image's pixel density, or perform other useful transformations.
-.P
-This program uses
-.BR grap (1),
-.BR @g@pic (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-and the ImageMagick
-.BR convert (1)
-program.
-These programs must be installed on your system and accessible on your
-$PATH for \fBgrap2graph\fR to work.
-.
-.
-.SH OPTIONS
-.TP
-.B \-unsafe
-Run
-.BR @g@pic (@MAN1EXT@)
-and
-.BR groff (@MAN1EXT@)
-in the `unsafe' mode enabling the PIC macro
-.B sh
-to execute arbitrary commands.
-The default is to forbid this.
-.TP
-.BI \-format\ fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-Any format that
-.BR convert (1)
-can emit is supported.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR convert (1).
-.
-.
-.SH ENVIRONMENT
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-If this is not set
-.B grap2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.SH "SEE ALSO"
-.BR pic2graph (@MAN1EXT@),
-.BR eqn2graph (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR convert (1).
-.
-.
-.SH AUTHOR
-Eric S. Raymond <esr@thyrsus.com>
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/grap2graph/grap2graph.sh b/contrib/groff/contrib/grap2graph/grap2graph.sh
deleted file mode 100644
index 7c830c1a2519..000000000000
--- a/contrib/groff/contrib/grap2graph/grap2graph.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#! /bin/sh
-#
-# grap2graph -- compile graph description descriptions to bitmap images
-#
-# by Eric S. Raymond <esr@thyrsus.com>, May 2003
-#
-# In Unixland, the magic is in knowing what to string together...
-#
-# Take grap description on stdin, emit cropped bitmap on stdout.
-# The pic markup should *not* be wrapped in .G1/.G2, this script will do that.
-# A -U option on the command line enables gpic/groff "unsafe" mode.
-# A -format FOO option changes the image output format to any format
-# supported by convert(1). All other options are passed to convert(1).
-# The default format is PNG.
-#
-
-# Requires the groff suite and the ImageMagick tools. Both are open source.
-# This code is released to the public domain.
-#
-# Here are the assumptions behind the option processing:
-#
-# 1. None of the options of grap(1) are relevant.
-#
-# 2. Only the -U option of groff(1) is relevant.
-#
-# 3. Many options of convert(1) are potentially relevant, (especially
-# -density, -interlace, -transparency, -border, and -comment).
-#
-# Thus, we pass -U to groff(1), and everything else to convert(1).
-#
-# $Id: grap2graph.sh,v 1.4 2005/05/18 07:03:06 wl Exp $
-#
-groff_opts=""
-convert_opts=""
-format="png"
-
-while [ "$1" ]
-do
- case $1 in
- -unsafe)
- groff_opts="-U";;
- -format)
- format=$2
- shift;;
- -v | --version)
- echo "GNU grap2graph (groff) version @VERSION@"
- exit 0;;
- --help)
- echo "usage: grap2graph [ option ...] < in > out"
- exit 0;;
- *)
- convert_opts="$convert_opts $1";;
- esac
- shift
-done
-
-# create temporary directory
-tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
- test -z "$d" && continue
-
- tmp=`(umask 077 && mktemp -d -q "$d/grap2graph-XXXXXX") 2> /dev/null` \
- && test -n "$tmp" && test -d "$tmp" \
- && break
-
- tmp=$d/grap2graph$$-$RANDOM
- (umask 077 && mkdir $tmp) 2> /dev/null && break
-done;
-if test -z "$tmp"; then
- echo "$0: cannot create temporary directory" >&2
- { (exit 1); exit 1; }
-fi
-
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
-
-# Here goes:
-# 1. Add .G1/.G2.
-# 2. Process through grap(1) to emit pic markup.
-# 3. Process through groff(1) with pic preprocessing to emit Postscript.
-# 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
-(echo ".G1"; cat; echo ".G2") | grap | groff -p $groff_opts -Tps -P-pletter | \
- convert -trim -crop 0x0 $convert_opts - $tmp/grap2graph.$format \
- && cat $tmp/grap2graph.$format
-
-# End
diff --git a/contrib/groff/contrib/groffer/ChangeLog b/contrib/groff/contrib/groffer/ChangeLog
deleted file mode 100644
index c436f8cee5e1..000000000000
--- a/contrib/groff/contrib/groffer/ChangeLog
+++ /dev/null
@@ -1,1546 +0,0 @@
- ________________________________________________________________
- * release of groffer 0.9.22
-
-2005-22-04 Bernd Warken
-
- ### `--whatis'
-
- Produce a `groff' output and allow wild cards on filespec
- parameters for `--whatis'.
-
- * groffer2.sh:
- - $_FILESPEC_ARG: New variable for storing the actual filespec
- parameter.
- - main_do_fileargs(): Set $_FILESPEC_ARG and add
- what_is_filespec().
- - main_parse_args(): Add --all to --whatis.
- - to_tmp_line(): New function to write the arguments to the
- temorary cat file.
- - whatis_filename(): Rename of what_is(). Construct a better
- printout using $_FILESPEC_ARG. Repair the sed sequneces.
- - whatis_filespec(): New function to print the filespec once
- during the `whatis' process.
- - whatis_header(): New funtion for printing the header of the
- `whatis' output.
-
- * groffer.man: Revise the documentation of --whatis.
-
- ### `--apropos*'
-
- Produce `groff' for `--apropos*'. Allow `--sections' for
- `--apropos', ignore it with `--apropos-*'.
-
- * groffer2.sh:
- - --apropos*: Make these options without argument.
- - $_APROPOS_PROG: New variable for the program that is is used for
- `apropos'.
- - $_APROPOS_SECTIONS: New variable to determine the sections that
- are filtered out of `apropos' output depending on `--apropos-*'.
- - apropos_filespec(): Handling of apropos at the filespec level.
- - apropos_run(): Remove it.
- - apropos_setup(): New function.
- - main_set_mode(): Remove handling of $_OPT_APROPOS*.
-
- * groffer.man:
- - Revise the documentation of `--apropos*'.
- - Split section 'options for GNU man' into two sections `options
- for man pages' and `long options taken over from GNU man'.
- - Move `--apropos*', `--whatis', `--man', and `--no-man' to
- section `options for man pages'.
-
- ### special display (apropos and whatis)
-
- * groffer2.sh:
- - special_setup(): New function that chooses the setup between
- apropos and whatis.
- - special_filespec(): New function that does the output at the
- filespec level for apropos or whatis.
-
- ### handle `--sections' for man page searching
-
- * groffer2.sh:
- - man_do_filespec(): Use $_OPT_SECTIONS of --sections instead of
- $_MAN_AUTO_SEC if non-empty. If a section was given on the
- filespec parameter $_OPT_SECTIONS is ignored. This differs from
- `man' which always uses the restricted sections of --sections.
- This function works for both normal man page search and whatis.
- - apropos_filespec(): Use --sections for --apropos, but not for
- --apropos-* because these provide already their own sections.
-
- ### wildcards in filespec arguments
-
- * groffer2.sh: Wildcards are now accepted. In `--apropos*' and
- `--whatis' they are interpreted as wildcard search elements; but
- in normal display they are only handled as their own character.
-
- ### development; new option
-
- * groffer2.sh:
- - --print: New option that prints just its argument for parameter
- check.
- - usage(): Add new option.
- - $_OPT_DO_NOTHING: New variable for do_nothing(). Handle it at
- the end of main_parse_Args().
-
- * groffer.man: Add information on --print.
-
- ### safe exit
-
- * groffer2.sh:
- - error(): Always exit with $_ERROR.
- - exit_test(): New function to exit when first exit was hidden by
- (). Call it after each $().
-
- ### automatic shell determination
-
- * groffer.sh:
- - If no option --shell is given perform a test of several shells
- to automatically start some shell for groffer2.sh. `ksh' is used
- first because it can be safely terminated by Ctrl-C.
- - This can be cancelled by providing --shell=''.
- - Add test on `sed' program.
-
- * groffer.man: Revise information on --shell.
-
- ### trap
-
- * groffer2.sh:
- - trap_set(): Remove argument. Instead of $_ALL_EXIT use only
- signal 0.
- - trap_unset(): Rename trap_clean(). Instead of $_ALL_EXIT use
- only signal 0.
- - $_ALL_EXIT: Remove this variable.
- - Replace all direct `trap' calls by trap_set().
-
- * README_SH: New section `Bugs' on `trap'..
-
- ### user errors, error output without function stack
-
- * groffer2.sh:
- - error_user(): New function for user errors.
- - error(): Remove call of clean_up() because the trap will do it
- with the exit. Remove the `kill' commands. Create a temporary
- file `.error' that can be tested by exit_test() for a better exit
- test (especially for shell `ksh').
- - $_DEBUG_USER_WITH_STACK: New variable to enable function stack
- output in error_user().
- - list_from_cmdline(), list_single_from_abbrev(), main_set_mode():
- Use error_user().
-
- ### test modes on X and tty
-
- * groffer2,sh:
- - is_X(), is_not_X(): New functions for checking on X Window.
- - $_VIEWER_HTML_TTY, $_VIEWER_HTML_X: New variables that split
- $_VIEWER_HTML. Add `galeon'.
- - main_parse_args(): Allow mode change for graphical modes only
- when in X Window.
- - _do_display() of main_display(): Create a special run for
- viewers that run on the terminal; `lynx' is the only one so far.
-
- ### add $GROFFER_MODE to command line
-
- * groffer.sh:
- - After the handling of the configuration files integrate
- $GROFFER_OPT to the command line.
- - This makes a `set' in the shell determination unnecessary.
-
- * groffer2.sh:
- - The debug test gets simpler because quotes are vanished without
- $GROFFER_OPT.
- - main_parse_MANOPT(): Prepend $mpm_list to the command line.
- - main_parse_args(): `set' is unnecessary.
-
- ### debug; new options
-
- * groffer2.sh:
- - --debug-all, --debug-lm, --debug-params, --debug-shell,
- --debug-stacks, --debug-tmpdir, --debug-user: New options.
- - --debug: Enable all debug variables except $_DEBUG_STACKS and
- $_DEBUG_LM. By the new options the smallest abbreviation is now
- `--debug'.
- - $_DEBUG_STACKS: Rename $_DEBUG.
- - $_DEBUG_PRINT_TMPDIR: New debug variable for printing the name
- of the temporary directory in main_init().
- - $_OPT_DEBUG: Remove this variable because debug is handled at
- the early part of the script.
- - clean_up(): Enlarge $_DEBUG_KEEP_FILES to not deleting the
- temporary directory.
- - usage(): Move all development options on a section of its own.
- - Move the test of rudimentary shell functionality at the
- beginning of the script. Add test on `sed'.
- - Follow this by the debug section. The determination of all
- --debug* options can be done without a function.
-
- * groffer.man: Revise information on --debug and add new options.
-
- ### variables
-
- * groffer.sh:
- - $_ERROR: Move the definition of this variable here.
- - $_GROFF_VERSION: New variable, is set over @...@ construct.
- - $_OUTPUT_FILE_NAME: Move this variable to groffer2.sh.
-
- * groffer2.sh:
- - $_MAN_AUTO_SEC_LIST: Rename $_MAN_AUTO_SEC because it represents
- a list.
- - $_MAN_AUTO_SEC_CHARS: New read-only variable for storing
- $_MAN_AUTO_SEC_LIST in [] construct. Use it in man_do_filespec()
- and whatis_filename().
- - $_SPACE_CASE: New read-only variable with [] on space characters
- with \ for `case' patterns. Use it in several functions.
- - $_SPACE_SED: New read-only variable with [] on space characters
- for `sed'. Use it in several functions.
-
- ### options and display
-
- * groffer2.sh:
- - list_from_cmdline(): Add test whether the same abbreviation is
- part of long options with and without arguments. Give handling of
- `=' a `case' pattern of its own.
- - main_display(): Remove unnecessary calls of `clean_up' in order
- to use `mozilla' without problems. In _do_display(): Fix -X by
- providing a different process when $_DISPLAY_PROG is empty.
- - main_set_mode(): Accept options for viewers as is, without check
- for program. Add test whether no program is given for a mode.
- This avoids unnecessary empty $_DISPLAY_PROG in main_display().
-
- ### viewer programs that run on the terminal (tty); new options
-
- * groffer2.sh:
- - $_VIEWER_TERMINAL: New variable that stores whether a viewer was
- supposed to run on tty.
- - --dvi-viewer-tty, --html-viewer-tty, --pdf-viewer-tty,
- --ps-viewer-tty, --tty-viewer-tty, --X-viewer-tty, --x-viewer-tty,
- --www-viewer-tty: New options for viewers that run on a terminal.
- - main_parse_args(), _do_display() of main_display(): Use the new
- options and the new variable.
- - usage(): Add the new options.
-
- * groffer.man: Add information on options --*-viewer-tty.
-
- ### other fixes
-
- * groffer2.sh:
- - _do_display() of main_display(): Bear errors of `groff' run.
- - is_not_file: Fix to have exactly one argument.
- - is_not_prog(): Handle no arguments.
- - list_has_not(): Fix.
- - main_do_fileargs(): Remove $mdfa_exitcode.
- - register_title(): Limit title to 4 elements.
- - version(): Print the version information to standard output just
- like `groff' does.
- - --no-special: New option to disable former calls of `--all',
- `--apropos*', and `whatis.
- - --title: Make it an option with argument.
-
-2005-08-07 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * contrib/groffer/Makefile.sub (install): Reference groffer2.sh
- as $(srcdir)/groffer2.sh, so it will install when building in a
- different directory from the source.
-
- ________________________________________________________________
- * release of groffer 0.9.21
-
-2005-08-02 Bernd Warken
-
- ### @...@ constructs
-
- * groffer.sh:
- - $_AT: New variable for `@'.
- - @...@: Replace the @...@ constructs by variables _AT_..._AT.
- These constructs are transformed by `make' to useful information.
- Keep all of these constructs in the first part of groffer.sh. For
- a run before a `make' call, the script sets these variables to
- special values for testing purpose.
- - $_GROFFER_LIBDIR: Variable pointing to the groffer library
- directory @libdir@/groff/groffer.
-
- ### Configuration files
-
- * groffer.sh:
- - Add test for `$()' construct.
- - Read and transform the configuration files and execute the
- emerging commands. The `sed' script was heavily enlarged to
- handle line with spaces and quotes. The emerging script is now
- called by `eval', so no temporary file is needed.
- - $_CONF_FILE_ETC, $_CONF_FILE_HOME: New variables for the config
- files.
- - $_SQ, $_SP: Move variables for characters before the handling of
- the configuration files. Rename $_SQUOTE to $_SQ and $_SPACE to
- $_SP.
- - $GROFFER_OPT: Remove cleaning of this variable before the
- reading of the configuration files.
-
- * groffer2.sh:
- - main_init(): Remove the getting of the configuration files.
-
- ### Rewrite the shell determination
-
- * groffer.sh:
- - Get rid of all functions in `groffer.sh'. Rewrite the shell
- determination with `` and $().
- - --shell: Shortest abbreviation is `--sh'. Allow arguments for
- the shell name.
- - Allow an empty argument for --shell as shell name to overwrite a
- specified shell; an empty shell name gets back to the default
- shell.
- - The shell determination now inludes the full handling of the
- config files. The `--shell' option needs no longer a line
- starting with `-'.
-
- ### Test of unset
-
- * groffer.sh:
- - Remove test of `unset'.
- - Remove all calls of `unset'.
- - Use one character names for all variables that are meant to be
- local in this script.
-
- * groffer2.sh:
- - Move the test of `unset' to the testing of rudimentary shell
- functionality without change.
-
- ### Allow abbreviations for long options
-
- * groffer2.sh:
- - list_has_abbrev(): New function for checking a list having an
- element with a given abbreviation.
- - list_get_single_from_abbrev(): New function to retrieve the
- element having a given abbreviation.
- - list_from_cmd_line(): For an option abbreviation determine the
- corresponding long option.
- - From the man option lists remove the elements that are also in
- a groffer list.
- - Allow abbreviation for the early test of --debug.
-
- * groffer.sh: Allow abbreviation for the early test on --shell.
- - get_opt_shell(): Rewrite _get_opt_shell() and the shell test
- around it.
- - test_on_shell(): Rename function _test_on_shell().
- - $_SHELL: global variable for the shell to run groffer2.sh.
-
- ### Get rid of `sh -c'
-
- * groffer2.sh:
- - main_display(), _do_display(): Remove the `sh -c' calls. Make
- the cleanup working without it.
- - _do_display(): Extend _do_display() such that it can be used for
- the pdf mode as well.
- - _make_pdf(): New subfunction of main_display() for running the
- additional parts of pdf mode in _do_display().
- - rm_file(), rm_file_with_debug(), rm_tree(): New functions for
- removing files and directories.
-
- ### Change directory
-
- * groffer2.sh:
- - $_START_DIR: New variable to store the directory at the starting
- time of the script.
- - main_display(): Go to the groffer temporary directory to be able
- to process internal `groff' data like pictures.
- - clean_up(): Get back to the starting directory.
-
- ### Compatibility with strange shells
-
- * groffer2.sh:
- - clean_up(): `zsh' and `posh' had difficulties with `eval'.
- - is_*(): Add test on empty argument. Some shells return true on
- `test -d' etc. with empty argument, while most shells return
- false.
- - echo1(); New function to print single line `cat <<EOF'. Replace
- all `echo x' by `echo1'.
- - list_has_abbrev(), list_from_cmdline(): Correction.
- - main_parse_MANOPT(): Repair and revise.
- - --do-nothing: New option without output (for development).
- - Rewrite rudimentary shell functionality near the beginning of
- the script.
-
- * groffer.sh, groffer2.sh:
- - Remove `;' after the commands `if', `while', and `until'.
-
- ### Debugging information
-
- * groffer2.sh:
- - $_DEBUG_PRINT_PARAMS: New variable for printing all parameters
- from the config files, $GROFFER_OPT, and command line after they
- have been transformed.
- - $_DEBUG_PRINT_SHELL: New variable for printing the name of the
- shell found in groff.sh.
- - main(): Move the landmarks of main-*() into main().
-
- ### Further checks and additions
-
- * groffer.sh, groffer2.sh:
- - $_PROGRAM_NAME: Replace this variable by `groffer'. The program
- name is now stable.
- - $_GROFFER_RUN: Remove this variable. As `groffer.sh' or
- `groffer' is no longer rerun, this variable is not necessary any
- more.
-
- * groffer2.sh:
- - main_set_resources(): Make the default viewers capable to use
- arguments in the list.
- - leave(): Add an argument for given exit code. Use it where
- suitable in main_*().
- - do_filearg(): Add error messages for non-existing files and man
- pages.
- - _do_opt_V(): New subfunction of main_display() to handle the
- output for option `-V'. `groff -V' is greatly enlarged by
- `groffer' specific information.
- - register_title(): Handle file names with spaces. Replace spaces
- by `_'.
- - is_existing(): Add `test -c' for special files.
- - usage(): Add `=arg' to the options with an argument. Add option
- `--tty-viewer'.
- - kghostview: In the default viewer list, add option
- `--scale=1.45'.
- - $_OPTS_CMDLINE_SHORT_NA: Correct a lacking space.
-
- * Makefile.sub: Repair the installation instructions for
- groffer2.sh.
-
- * groffer.man:
- - Add paragraph on option handling.
- - Add option `--do-nothing'.
- - Reorder option for development and `groff'.
- - Rewrite documentation for option `-V'.
- - Expand `--shell'.
- - Reformulate sections CONFIGURATION FILES, COMPATIBILITY and SEE
- ALSO.
- - Make `man' italic where possible.
- - .copyleft: Adjust the fonts.
-
- * README: Update sections `Output' and `Compatibility'.
-
- * README_SH:
- - Add `mksh' as compatible shell.
- - Add information on the scripts after the split.
-
- * TODO: Remove some fulfilled parts.
-
- * ChangeLog: Remove final spaces.
-
- ________________________________________________________________
- * release of groffer 0.9.20
-
-2005-07-30 Bernd Warken
-
- ### Split groffer.sh into two files groffer.sh and groffer2.sh.
-
- * groffer.sh:
- - Remove the second part of this script. It is now in
- groffer2.sh.
- - $_GROFFER2_SH: New variable to point to the installed position
- of `groffer2.sh'. This position is presented using @libdir@.
-
- * groffer2.sh: New script containing the second part of
- groffer.sh. This script will be installed in the groffer library
- directory @libdir@/groff/groffer, this might be
- /usr/local/lib/groff/groffer/groffer2.sh for example.
-
- * Makefile.sub:
- - `groffer': Add replacement of @libdir@.
- - `install_data': Add the installation of the groffer library
- directory and groffer2.sh.
- - `uninstall_sub': Delete the installed `groffer2.sh' and the
- groffer library directory.
-
- * README_SH:
- - Remove the function list.
- - Add argument options to the list of used commands.
- - Documentation of the splitting of the script.
- - Document the possible abbreviation of options.
-
- ________________________________________________________________
- * release of groffer 0.9.19
-
-2005-07-07 Bernd Warken
-
- * groffer.sh: extensions
- - `mode x': Mode for the equivalent options `--x', `--mode x',
- `--X' `--mode X', and the default mode. The default assumes a
- resolution of 75 dpi. The default device for a resolution of 75
- dpi is `X75-12', the default device for a resolution of 100 dpi is
- `X100'. The default geometry for the resolution of 100 dpi is set
- to the width 800 dpi.
- - `mode X': New mode for option -X only.
- - `-V': Extent the `groff' output of -V by `groffer' specific
- information (in main_display()).
- - register_file(): Replace title `-' by `stdin'.
- - $_DEBUG_KEEP_FILES: If set to `yes' the files in the temporary
- directory are not deleted before the end trap.
-
- * groffer.sh: get `zsh' to work as well
- - tmp_create(): Use `: >file' for generating an empty file.
- - rmdir: Replace `rmdir' by `rm -f -r'.
- - eval: Add `eval' to many commands with variable arguments.
-
- * groffer.sh: repair `debug'
- - Print all debug output to stderr.
- - $_FUNC_STACK: Built function call stack even when $_DEBUG is not
- set. Now the arguments are not added.
- - $_DEBUG: If set to `yes' print 3 call stack events: the function
- that is added with its arguments is printed with `+++ '
- (func_push()); the call stack after the addition is printed with
- `>>> ' (func_push()); the call stack after the removing is printed
- with `<<< ' (func_pop()).
- - error(): Always print the function call stack on errors.
-
- * groffer.sh: Corrections
- - $_groffer_run: Rename to $_GROFFER_RUN.
- - $unset: Rename to $_UNSET.
- - Repair test of `unset'.
- - Repair test for `--shell'. The script is now rerun under the
- shell specified in the option argument. This can increase the
- speed.
-
- * README_SH: `zsh' now works.
-
- * groffer.man:
- - Reformulate the information for the `groffer' specific details
- of option `-V'.
- - Add information on the debug process.
- - Add information on the default devices in `x mode'.
- - Minor corrections.
-
- ________________________________________________________________
- * release of groffer 0.9.18
-
-2005-07-01 Bernd Warken
-
- * groffer.sh: further shell compatibility
- - `echo': Remove options and possible options of `echo' by
- preceding the argument with a character `x' that is removed by
- `sed' or replace `echo' by `cat <<EOF'. `echo -n' seems to be not
- portable, so it is omitted.
- - `for': Remove `;' from within `for' (because of ksh).
- - `ls': Old UNIX systems echoed the error message to standard
- output. So handle the output with `sed'. If the output contains
- `not found' map it to an empty string.
- - `true': Replace `true' by command `:'. Remove test of `true'
- (because `ash' refuses the redefinition of builtins even in an
- unreachable `if' branch).
- - `false': Remove test of `false'; it isn't used any more.
- - `test': As `test -e' does not exist in Solaris 2.5 replace it by
- `test -f || test -d'.
- - `unset': `unset' is said to be not portable. As `ash' protests
- against the definition of the function `unset()' in the test of
- `unset' replace the test by defining `$unset' to `unset' if it
- exists and to `:' otherwise. Use `eval $unset' instead of the
- direct command `unset'.
- - _get_opt_shell(): Replace `for' loop with `shift' by `while'.
- - man_search_section(): Replace `for f in filename*' by a test on
- the existence of `filename*'.
- - `zsh' interprets `$...' as `"$..."'. So `eval' must be called;
- This cannot be used in `for i in $f', so it must be rewritten as
- `for i in $(eval set x $f; shift; echo "$@")'
-
- * groffer.sh:
- - `--X', `--x', `--mode=X', `--mode=x': Make these options
- equivalent to choosing an X device by setting `-TX75-12'. `-X' is
- still equivalent to `groff -X'.
- - main_init(): Choose the name of the temporary file by adding a
- number using `expr' if it exists and cannot be removed.
- - main_parse_args():Repair some options by replacing `$mpa_mode'
- by `$_OPT_MODE'.
- - catz(): Rename it to cat_z() to avoid problem with existing
- programs.
- - where(): Rename to where_is().
- - $_CONFFILES: Rename to $_CONF_FILES.
- - $_HAS_BZIP: export and preset it.
-
- * groffer.man:
- - Document the `X mode' changes.
- - Add `@g@' to `troff'.
-
- * README, README_SH, TODO:
- - Add date line `Latest update:'.
- - Add `...' quoting to essential terms.
- - Add Emacs mode at the end.
-
- * README_SH:
- - Add documentation on the above compatibility changes.
- - Add documentation on used commands.
- - Mention the tested shells.
-
- * Makefile.sub:
- Readd `@g@'.
-
- ________________________________________________________________
- * release of groffer 0.9.17
-
-2005-06-23 Bernd Warken
-
- * groffer.sh: get rid of `local' in functions (it is not POSIX)
- - Replace local variables by variable names with a special prefix
- that is an abbreviation of the corresponding function name (quasi-
- local variables).
- - Unset the quasi-local function variables before returning.
- - _t_e_s_t_f_u_n_c_(): Remove tests for local and global
- variables.
- - Add quasi-local variables for saving the content of
- single-character variables.
- - Remove some unused local and global variables.
- - Several variables were forgotten to make local. They are now
- made quasi-local.
-
- * groffer.sh: other corrections
- - $return_var: New function (after `eval') for an arbitrary
- return value.
- - obj*(): Add return modes.
- - Rewrite tests for `true' and `false'.
- - Add function names to error calls where it was forgotten.
- - `for': Replace `for x in "$@"' by `for x'.
- - `set': Replace `set -- ...' by `set x ...; shift'.
- - `sed': Replace `\|.*|s|...|...|' by `s|...|...|'.
-
- * README_SH:
- - Add information on the removing of `local'.
- - New section for non-POSIX shell restrictions.
-
-2005-06-20 Keith Marshall
-
- * README-SH: Information of `Portable shells' in info autoconf.
-
- ________________________________________________________________
- * release of groffer 0.9.16
-
-2005-06-19 Bernd Warken
-
- * groffer.sh: Place each `then', `else', and `do' on a line of its
- own because some shells do not support the mixture mode.
-
- * groffer.man: Add section `BUGS'.
-
- * README_SH:
- - Add compatibility information.
- - Correct documentation for function arguments.
-
-2005-06-18 Keith Marshall
-
- * groffer.sh: $_NULL_DEV: Replace /dev/null by $_NULL_DEV which is
- either /dev/null or NUL if /dev/null does not exist.
-
-2005-06-17 Zvezdan Petkovic
-
- * Makefile.sub: $(RM): Define it to `rm -f' because not all `make'
- programs have it predefined.
-
-2005-06-16 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.15
-
- * Makefile.sub:
- - Use `$(RM)'.
- - Use `sed -f $(SH_DEPS_SED_SCRIPT)'.
-
-2005-05-20 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.14
-
- * groffer.man: correction of non-hyphenation
-
-2005-05-17 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.13
-
- * groffer.sh:
- - $_VIEWER_DVI: Add `kdvi'.
- - $_VIEWER_PDF: Add `kghostview', `ggv', and `kpdf'.
- - $_VIEWER_PS: Add `kghostview' and `ggv'.
- - $_modefile: For the output file name, add extension .ps for ps
- mode and .dvi for dvi mode. This exists already for the html and
- pdf modes.
- - Update some parts of the documentation.
-
- * README, README_SH:
- - Move some parts on usage from README_SH to README.
- - Reformulate several parts of both files.
-
- * groffer.man: update
-
-2005-05-14 Keith Marshall
-
- * groffer.sh:
- - first line: Add space to `#! /bin/sh'.
-
-2004-11-15 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.12
-
- * groffer.sh:
- - main_init(): Rewriting of the creation of the temporary
- directory to ensure that it cannot be made writable apart from the
- user. If the directory already exists and cannot be removed then
- append `X' to the directory name.
- - is_non_empty_file(): fix it to use POSIX `test -s'.
- - is_existing(): new function.
- - POSIX `rm -f -r': use this in `clean_up()' and `main_init()'.
- - `--macro-file': remove this unused long option.
- - `-V', `--source', `--device': move these from groff options
- to groffer options.
- - `$_TMP_DIR_SUB': remove this unused variable.
-
-2004-06-15 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.11
-
- * groffer.sh:
- - To the search of the `--apropos-*' options, add man pages with a
- subsection in their apropos output.
-
-2004-06-02 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.10
-
- * groffer.sh:
- - Remove automatic call of `ash' due to inconsistencies of
- different ash versions.
- - In the first run, add recognition of `--shell' lines in the
- groffer configuration files. To configure an external shell in
- a configuration file, a line starting with `--shell' is
- necessary.
- - list_from_cmdline(): Simplify the arguments.
- - As $POSIXLY_CORRECT is internally set to `y' by some GNU
- `/bin/sh' shells the following 2 fixes are necessary:
- -- `sed': Empty patterns are not allowed with $POSIXLY_CORRECT
- set; so move the address information before the `s' command to the
- pattern after the command, and write `.*' to the address field.
- -- list_from_cmdline(): Remove the strange $POSIXLY_CORRECT style
- to finish the option processing after the first non-option
- argument; use the flexible GNU mixing of options and file names
- instead.
-
- * groffer.man:
- - Remove any hints on `ash'.
- - Add minus line behavior of `--shell' for configuration and add a
- corresponding example.
- - Update the information on $POSIXLY_CORRECT.
-
-2004-05-29 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.9
-
- * groffer.sh:
- Fix first run section to allow the starting shell to go on if
- `ash' is not available.
-
- * groffer.man:
- Remove unnecessary information on groffer version.
-
-2004-05-12 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.8
-
- * groffer.sh:
- Fix problems of `test' by adding subs to arguments.
-
- * groffer.man:
- Write the file license as macros that are called in sections
- AUTHOR and COPYING.
-
- * .cvsignore:
- Restore this file.
-
-2004-04-30 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.7
-
- * groffer.sh:
- - obj(), obj_data(), obj_from_output(), obj_set(): New object
- oriented functions to minimize complicated `eval' commands.
- - list_*(): Corrections.
- - usage(): Streamlining.
-
- * groffer.man, README_SH:
- Corrections.
-
-2004-04-27 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.6
-
- This version replaces the license of all files except ChangeLog of
- the groffer source to the GNU General Public License (GPL) of the
- version described in files COPYING and LICENSE in the groff top
- source directory.
-
- * groffer.man:
- Changement from the GNU Free Documentation License (FDL) to
- the GNU General Public License (GPL).
-
- * README, README_SH, TODO:
- Add license GNU General Public License (GPL).
-
- * Makefile.sub, groffer.sh:
- Keep the GNU General Public License (GPL), but refer to the
- COPYING and LICENSE files.
-
- * ChangeLog: Add a license in the style of Emacs ChangeLog file,
- which is weaker than the GPL, but has its flavor.
-
-2004-04-24 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.5
-
- This version is a rewrite of groffer in many parts, but it is kept
- in the old single script style.
-
- Overview of new options:
- --text, --mode text, --tty-viewer,
- --X, --mode X, --X-viewer, --html, --mode html, --html-view,
- --apropos-data, --apropos-devel, --apropos-progs
-
- New file:
- <groffer-source>/README_SH
-
-
- ******* Extension of the `apropos' handling
-
- The output of man's `apropos' has grown immensely meanwhile, so it
- has become inefficient. Now `groffer' provides new options to get
- the a selected information from this output.
-
- * groffer.sh:
- `--apropos-progs': new option for displaying only information
- on programs (man page sections 1, 6, and 8)
- `--apropos-data': new option for displaying only information
- on documented data (man page sections 4, 5 and 7)
- `--apropos-devel': new option for displaying only information
- on development documentation (man page sections 2, 3 and 9)
- `--apropos': still displays just the output of man's `apropos'
- program.
- - Specify all of these options as a single argument option; that
- makes groffer's `--apropos' option slightly different because
- the corresponding `man' option does not have arguments, but takes
- all file arguments as apropos targets. So just ignore the `man'
- options `-k' and `--apropos' in the parsing of $MANOPT.
- - Exit after processing one `apropos' call.
-
-
- ******* Quasi object oriented function arguments
-
- An object is the name of an environment variable. The value of
- this variable contains the object's content. This allows to
- specify function arguments and the calling syntax in a simpler way
- by letting the first argument be a variable name, usable for input
- or output.
-
- Such an object type is `list', the string value of a shell
- variable arranged in space-separated single-quoted elements, such
- as $GROFFER_OPT internally.
-
- * groffer.sh:
- - Remove list_from_args(), list_element_from_arg()
- list_from_lists(), list_length(), and list_prepend().
- They can be replaced by list_append().
- - All list*() functions are rearranged such that the first
- argument is a list object, the name of a variable.
-
-
- ******* Simplification of configuration files
-
- The new syntax of the groffer configuration files is
- - all lines starting with a `-' character are interpreted as
- command line options for all calls of groffer; they are collected
- and prepended to the actual value of $GROFFER_OPT; optional
- spaces at the beginning.of the line are omitted.
- - all other lines are interpreted as a shell command and executed
- in the current shell of the groffer call.
-
- Precedence:
- - The command line and the external environment variables such as
- $GROFFER_OPT of the groffer call have the highest precedence.
- - This is overwritten by the configuration file in the user's home
- directory.
- - The system configuration file in /etc has the lowest
- precedence.
-
- * groffer.sh:
- The configuration files are now called after the determination of
- the temporary files in main_init().
-
-
- ******* Script file name
-
- The file name of the script is needed for the several calls during
- the search for the optimal shell.
-
- * groffer.sh:
- - $_GROFFER_SH: replace $_this by $_GROFFER_SH and use $0 for
- determining the file name of the script for the following calls,
- instead of the cumbersome @BINDIR@ construction.
- - Force the script to be called as an executable file, so $0 must
- contain the program name.
-
-
- ******* Improved temporary file names
-
- Just like groff, groffer mixes all file parameters into a single
- output file. Its name is now constructed as a comma-separated
- list built from the file name arguments without a leading comma.
- So a leading comma can be used for the internal temporary file
- names.
-
- * groffer.sh:
- - $_OUTPUT_FILE_NAME: new global variable as basis for the output
- file name; it is set in main_set_resources().
- - tmp_create(): use `,name' for temporary files different from
- output file because the output file name does not start with a
- comma. `$$' is not needed anymore.
- - main_display(): simplification of $_modefile in _do_display()
- and single display modes.
- - Add extension `.html' to output file name in html mode.
- - base_name(): correction for strange positions of `/'.
-
-
- ******* Mode fixes
-
- * groffer.sh:
- - Set the main default mode to `x' with groff's X Window viewer
- `gxditview'.
- - Allow 'x' and 'X' in `--mode' for the X Window mode; the same
- for `--x' and `X', `--x-viewer' and `--X-viewer'.
- - Make groff's `-X' equivalent to `mode X'.
- - Fix `--auto', `--mode auto', and `--default-modes'.
- - `html' mode: new mode equivalent to `www', add `konqueror' and
- `lynx' as viewers.
- - `pdf' mode: fix zoom options for pdf-viewer `xpdf' in
- main_set_resources(); in main_display() fix the display structure.
- - Set default X Window resolution to 75dpi. This is not optimal,
- but with a higher value the options and resources for some viewers
- must be optimized.
- `--text' and `--mode text': new option for text output without a
- pager.
- - `--tty-viewer': new option equivalent to `--pager'.
- - Correct the pagers for `tty' mode.
- - Fix `groff' mode in main_set_resources() and main_display().
- - Harmonize `--mode arg' with the equivalent options `--arg'.
-
-
- ******* Fixes for command line options
-
- * groffer.sh:
- - list_from_cmdline(): fix the parsing of options with arguments.
- - Rename $_OPT_TTY_DEVICE to $_OPT_TEXT_DEVICE.
- - $_OPTS_X_*: new variables for the inhereted X Window variables.
- - Improve the distribution of the command line options into
- $_OPTS_GROFFER_*, $_OPTS_GROFF_*, $_OPTS_X_*, and $_OPTS_MAN_*.
- - $_OPTS_MANOPT_*: new variables for the parsing of $MANOPT.
- - Correct $_OPTS_CMDLINE_*.
- - Remove some unused $_OPTS_*.
- - `--iconic': new option from `-iconic' of the X Window toolkit.
- - Correct `--rv' to an option without argument.
- - Minor fixes of other X Window toolkit options.
-
-
- ******* Other fixes
-
- * groffer.sh:
- - is_prog(): allow 0 arguments.
- - is_not_writable(): new function.
- - is_*(): fix trailing return codes.
- - Replace most `test' calls by is_*() functions.
- - man_setup(): due to bugs in `manpath', prefer
- manpath_set_from_path() for the determination of the man page path.
- - man_search_section(): correction of some `for' loops.
- - Remove export of external non-groffer variables.
-
-
- ******* Documentation
-
- * groffer.man:
- - Reorder the option details according to the option origin as
- groffer, groff, X, and man options.
- - Add the programming changes information mentioned above.
- - Support man pages with a dot in their name
-
- * README_SH: new file
- Move large parts of the documentation in `groffer.sh' into this
- file.
-
- * groffer.sh: usage():
- - Change the output for `--help' to standard output.
- - Restructure the information for this help output.
-
-
- ******* Removement of the author's email address
-
- Because of the extreme spam attacks, the author removed all
- occurencies of his email address in every file of the groffer
- source.
-
-2003-01-22 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.4
-
- * groffer.sh: corrections for some restrictive shells
- - Possible exit codes in actual `ash' are between 0 and 63. To
- handle even deeper restrictions, use 7 as maximal code instead
- of 255 as replacement for error -1.
- - Remove variables $_BAD2 and $_BAD3.
- - Replace `trap' argument `EXIT' by 0 and write new fuctions
- `trap_clean' and `trap_set' to handle the restrictions of `trap'
- for some shells.
- - Correct wrong $MANPATH to $_MAN_PATH in function
- `man_do_filespec'.
- - Test existence of directory before deleting it in the
- `clean_up' definitions.
- - Correct help output in `usage' (called by `--help').
-
- * TODO:
- Remove mention of `shoop' and `apropos'.
-
-2002-10-21 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.3
-
- * groffer.sh: new temporary subdirectory
- - Generate temporary subdirectory for storing temporary files
- with better names in future groffer versions (name:
- "groffer$$" in usual temporary directory).
- - Use `umask 000' for temporary files to allow cleaning up
- for everyone after a system break.
- - Change both clean_up() functions (for normal shell and
- for main_display() subshell) to handle the new subdirectory.
- - clean_up_secondary() and $_TMP_PREFIX are unnecessary now, so
- they were removed.
-
- * Makefile.sub: `sed' commands for "groffer:"
- - Remove "@g@" entry (not used in "groffer.sh").
- - Add global replace for "@BINDIR@" and "@VERSION@" for future
- usage.
-
- * TODO: think about...
- - writing part of groffer in C/C++.
- - handling several files with different macro packages.
-
-2002-10-17 Bernd Warken
- ________________________________________________________________
- * fixes of groffer 0.9.2
-
- * groffer.sh:
- Terminate main_parse_MANOPT() if $MANOPT is empty or consists
- of space characters only.
-
- * groffer.man: some fixes in "GROFFER OPTIONS"
- - New macro ".Header_CB" for CB font in .TP headers; used for
- definition of variables in option --mode.
- - Fix some option references to refer to long options.
-
- * README:
- New file for general information on the groffer source; it is
- not installed.
-
-2002-10-14 Bernd Warken
-
- * Makefile.sub:
- add replacement "@BINDIR@" to "$(bindir)" for "groffer:"
-
- * groffer.sh:
- Define $_this as "@BINDIR@/${_PROGRAM_NAME}" to save the right
- installation position of groffer for the special shell calling.
-
- * groffer.man:
- Remove double definition of filespec parameters.
-
-2002-10-13 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.2
-
- * groffer.sh: fixes
- - Fix some 'sed' functions: two in func_stack_dump(), one in
- base_name(), add 'sed' command in list_from_cmdline().
- - Finish main_parse_MANOPT() if $MANOPT is empty.
- - Sort $_OPTS_GROFF_SHORT_NA like groff short options (but
- unchanged).
- - Fix some comments.
-
- * groffer.man: make it more readable (but no additions)
- - A shortened section "SYNOPSIS" is followed by a simplified
- section "DESCRIPTION".
- - The options from "SYNOPSIS" go to new section "OPTION
- OVERVIEW" with all groffer options in a single subsection.
- - The details of all groffer options are described in section
- "GROFFER OPTIONS".
- - New macro for file names ".File_name".
- - "Option Parsing" is moved to section "COMPATIBILITY".
- - Fix some "EXAMPLES".
-
-2002-09-30 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.1
-
- * TODO: remove done entries
- - Remove request for different shells.
- - Remove the 'sed' complaints.
-
-2002-07-15 Bernd Warken
-
- * groffer.sh: replace `sed' interface by direct `sed'
- - This improves the performance of the shell programming parts
- and shortens the groffer script by about 5%.
- - Remove functions: string_del_append(), string_del_leading(),
- string_del_trailing(), string_flatten(), string_get_before(),
- string_get_leading(), string_replace_all(), string_sed_s(),
- and their auxiliary functions.
- - Replace all calls of these functions by direct `sed' commands.
- - Define variables for special characters to ease `sed' calls.
- - Remove `$APPEND'.
- - Restrict list_from_string() to single character separators.
- - Correct list_check() and base_name().
- - Add comments to all calls of `sed'.
-
- * groffer.sh: add run-time support for several shells
- - New option `--shell': stop execution and rerun groffer under
- the shell specified in the argument of `--shell'.
- - If no shell was specified at run-time, `ash' is tried first;
- if `ash' is not available continue with the shell with which
- groffer was called from the command line, or with the shell
- name in the first line of the script, actually `/bin/sh'.
-
-2002-07-12 Bernd Warken
- ________________________________________________________________
- * fixes for groffer 0.9.0
-
- * groffer.sh: enhance version information
- `groffer -v|--version' now print:
- - groffer's version number and date
- - the string `is part of '
- - groff's version information (version number and copyright),
- but not groff's `called subprograms' information.
-
- * groffer.sh: minor fixes
- - Fix the argument parser to process argument `-' correctly.
- - Some display programs have trouble with empty input; feed a
- line consisting of a single space character in this case for
- all display modes (not for source or groff modes).
-
- * TODO:
- fix entry `shoop' (not 'shopt').
-
-2002-06-28 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.9.0
-
- * groffer.sh: new mode `pdf'
- - PDF (Portable Document Format):
- -> Transform groff `ps' output into pdf using `gs'.
- -> Pro: PDF viewers provide text searching (!).
- -> Con: the transformation is quite slow.
- -> Not suitable as an auto mode.
- - New options `--pdf', `--pdf-viewer', `--mode pdf'.
- - Standard pdf viewers `xpdf' and `acroread'.
- - For `xpdf', choose zoom `z 3' for 100 dpi, `z 2' for 75 dpi.
-
- * groffer.sh: support bzip2 decompression
- - add test for `bzip2' with necessary options
- - extend functions `catz()' and `save_stdin()'.
-
- * TODO
- remove entry on `bzip' decompression (done).
-
- * groffer.man:
- - Document new `pdf' features.
- - Document new `bzip2' decompression.
- - Fix documentation for `--auto-modes'.
-
- * groffer.sh: minor fixes
- - Improve device tests in `tty' and `dvi' modes.
- - Internally, map mode `auto' to '' to facilitate tests.
- - Fix auto mode sequence to: `ps,x,tty' as was intended.
-
-2002-06-25 Bernd Warken
-
- * groffer.sh:
- Fix `source' mode.
-
- * groffer.man:
- Fix some indentations.
-
-2002-06-23 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.8
-
- * Makefile.sub: add copyright section
-
- * groffer.man:
- - Document the new options.
- - Revise the documentation of the modes.
- - Document the configuration files in new section `FILES'.
- - Redesign section `EXAMPLES'.
- - Remove documentation for `-W'.
-
- * groffer.sh: new debugging features
- - Disabled by default; enabled by environment variables.
- - Add landmark() to catch typos with quotes.
- - Add a function call stack for suitable functions; implemented
- as within the argument checker func_check().
- - This implies the need to provide `return' with some clean-up
- facility; implemented as `eval "$_return_..."'.
- - Add option `--debug' to enable debugging at run-time.
- - Actually, the groffer script uses only shell builtins found
- in `ash' (a subset of POSIX) and POSIX `sed' as the only
- external shell utility.
-
- * groffer.sh: customization of viewers
- - In `groff' mode, the groffer viewing facilities are disabled.
- - The postprocessor option `-P' costumizes the viewer only in
- some situations in the `groff' mode, so a new infrastructure
- for viewer customization is necessary.
- - Allow to specify arguments to the viewer programs specified
- in `--*-viewer()'.
- - Implement some of the essential X Toolkit resource options in
- groffer, but with use a leading double minus.
- -> `--bd': set border color.
- -> `--bg', `--background': set background color.
- -> `--bw': set border width.
- -> `--display': set X display.
- -> `--geometry': set size and position of viewer window.
- -> `--fg', `--foreground': set foreground color.
- -> `--ft', `--font': set font.
- -> `--resolution': set X resolution in dpi.
- -> `--title': set viewer window title.
- -> `--xrm': set X resource.
- - Remove misnamed option `--xrdb'.
-
- * groffer.sh: new mode structure
- - New Postcript mode `ps' (`--ps'):
- -> default viewers: gv,ghostview,gs_x11,gs;
- -> `--ps-viewer' sets the Postscript viewer.
- - New mode `www' (`--www') for displaying in a web browser:
- -> default browsers: mozilla,netscape,opera,amaya,arena;
- -> `--www-viewer' sets the web browser.
- - New dvi mode (`--dvi'); default viewer `xdvi':
- -> default viewers: xdvi,dvilx;
- -> `--dvi-viewer' sets the dvi viewer.
- - New mode `auto':
- -> active if no other mode is given or by new option `--auto';
- -> selects from a sequence of modes that are tested until one
- of them succeeds.
- -> the default mode sequence is actually `ps', `x', `tty'.
- -> `--default-modes' sets this mode sequence as a comma
- separated string of program names, optionally each one
- with arguments).
- - New mode `groff':
- -> process input like groff, ignore viewing options.
- -> activated by new option `--groff'.
- -> automatically active with one of `-V', `-X', `-Z'.
- - Revise `tty' mode:
- -> allow several text devices.
- ->
- - Reorganize the mode management:
- -> new mode setting option `--mode'.
- -> logically separate source, groff, and display modes.
- -> intermediate output mode is now part of mode groff; remove
- any special features around `-Z'.
- - Update usage() to reflect the new option structure.
-
- * groffer.sh: add configuration files
- - `/etc/groff/groffer.conf' system-wide configuration.
- - `${HOME}/.groff/groffer.conf' user configuration.
- - The configuration file are shell scripts for now; later
- implementations can identify this from the `#! /bin/sh' line.
-
- * groffer.sh: new data structure `list':
- - Implement a `list' data structure as a string consisting of
- single-quoted elements, separated by a space character;
- embedded single-quotes are escaped.
-
- * groffer.sh: new option parser based on `list':
- - Write new option parser based on `list', compatible to both
- POSIX getopts() and GNU getopt().
- - Long options are now available on GNU and non-GNU systems.
- - Get rid of POSIX getopts() and GNU getopt().
- - the `-W--longopt' construct is now obsolete; remove it.
- - add test/function for `unset'.
- - Option strings are now implemented as `list's in order to
- allow unusual characters in options.
- - Parse $MANOPT first; translate essential arguments into
- groffer options.
-
- * groffer.man:
- - determine prompt length for `.Shell_cmd'* dynamically.
- - naming scheme for static strings and registers changed to
- `namespace:macro.variable'.
-
-
-2002-06-16 Werner Lemberg <wl@gnu.org>
-
- * groffer.sh:
- Implement man option `--ascii' by `-mtty-char'.
-
-
-2002-05-31 Werner LEMBERG <wl@gnu.org>
-
- * groffer.man (@.Shell_cmd_width):
- Increase to 4m (we use `sh#' as the prompt).
-
-
-2002-05-31 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.7
-
- * groffer.sh: remove incompatibilities with the `ash' shell:
- - do not use `!command':
- -> use `else'
- -> write `_not_' equivalents for some functions
- - do not use `[^]' in `case':
- -> restructure some functions.
- - only single-character names for loop variables:
- -> spoils the paradigm of leading `_' for local variables.
- - spurious trouble with `for i in ${var}':
- -> use `eval set -- ${var}' and `for i in "$@"'
- - do not change or use $IFS:
- -> define new functions string_split() and `path_split()'.
- -> result must be processed by `eval set --'.
- -> solve conflicts with existing positional parameters.
- - trouble with exporting external `$GROFF_*' variables:
- -> hope that they were exported in the calling shell.
- - not smart about additional blanks:
- -> remove unnecessary white space.
-
- * groffer.sh: improve run-time speed:
- - `ash' more than doubles the speed of `bash'.
- - speed-up `man_setup()'.
-
-
-2002-05-30 Werner Lemberg <wl@gnu.org>
-
- * groffer.man:
- - remove some wrong `\:'.
- - rename macro names that start with a `[' (clashes with refer).
- - fix TP_header.
-
-
-2002-05-28 Bernd Warken
- ________________________________________________________________
- * release of groffer 0.6
-
- This is almost a complete rewrite since groffer 0.5 .
- ________________________________________________________________
- * Documentation
-
- * groffer.man:
- - Apply the changes done in www.tmac (.URL and .MTO)
- - Replace \fP by \f[].
- - Redesign and rewrite most macros.
- - Include the documentation for the new features.
- - Greatly enlarge section ENVIRONMENT
- - Add examples.
-
- * TODO:
- - Start a TODO file with several sections.
-
- * ChangeLog:
- Due to the many changes, shorten and rearrange the entries
- since groffer 0.5 .
- ________________________________________________________________
- * Shell compatibility
-
- * groffer.sh:
- - Due to possible conflicts in old BSD versions, `[]' was
- replaced by `test'; the `test' options `-a' and `-o' were
- replaced by multiple calls of `test'.
- - Write interface to the `sed' command `s' to become
- independent of the delimiter character. Rewrite all text
- manipulating function to use this new scheme. The new
- functions are named `string_*'.
- - `tr' is not needed any longer, replaced by `sed'.
- - `grep' is not needed any longer, mostly replaced by `case'.
- - Revision of test for `getopt'.
- - Remove `set -a'; explicitly export variables.
- - The only external programs used are POSIX `sed' and the
- fallback to `apropos'. All other program calls were
- replaced by shell builtins and functions.
-
- ________________________________________________________________
- * Cosmetics
-
- * groffer.sh:
- - Implement a prefix based naming scheme for local variables
- and functions (OOP-like).
- - Introduce variables for white space (better readability with
- $IFS).
- - Store the names of the processed filespecs into a variable
- instead of a temporary file.
- - Error-prone shell constructions were replaced by functions
- with a simple interface.
- - To avoid too long pipes, replace supercat() by do_fileargs();
- every input file is handled independently.
-
- ________________________________________________________________
- * New features:
- - Add support for more X devices (e.g. X75-12 and X100-12).
- - Add long option `--intermediate_output' to `-Z'.
- - Make the options for mode selection clobber each other.
- - Add option `--mode' with an argument having the following
- values:
- `X': force displaying in X, same as options `-X';
- `tty': display with a pager on text terminal; same as `--tty';
- `source', `default', `auto', etc.
- - Make the handling of the X mode like in groff (e.g. -X -Tps).
- - Make resolution for gxditview behave like groff (default
- 75 dpi).
- - Add environment variable $GROFFER_OPT to preset groffer
- options.
-
- ________________________________________________________________
- * implement most of the functionality of GNU `man'.
-
- - Add all `man' long options to groffer.
- - Add all `man' environment variables.
- - Parse and use content of `$MANOPT'.
- - The precedence of the options and environment variables
- is regulated like in GNU `man'.
- - Force the option `--manpath' to have a colon-separated
- argument like GNU `man'.
- - Support `man section name' calling convention.
- - Remove all dependencies on `man -w'.
-
- * groffer.sh:
- - Add the new features above.
- - Rewrite the search algorithm for man pages.
- - Remove searching with `man -w' (problems with space
- characters in file names).
- - Fix and complement usage().
- - The filespec parsers gets a function of its own do_manpage().
-
-
-2002-01-08 Bernd Warken
-
- * groffer 0.5 (beta) released
-
- * groffer.man:
- - Fix hyphenation problems with macros describing options.
- - Fix the handling of some `-' characters.
- - Examples of shell commands now print in font CR instead of CB.
- - Remove documentation for option `-X'.
- - Add documentation for option `--dpi'.
-
- * groffer.sh:
- - New method for creating temporary files, based on process
- IDs. This is reliable enough and suitable for GNU and POSIX.
- - Run gxditview in a new shell instantiation for having a clean
- handling of the temporary files when running in the
- background.
- - Revision of the retrieving method for the window title.
- - Empty input is now tolerated.
- - Export the variables that are set before the call of `set -a'.
- - Function usage() corrected and updated.
- - Unnecessary stuff removed.
- - Comments adjusted.
- - Pass option `-X' to groff, i.e. force X output with 75 dpi.
- - Implement option `--dpi' for setting the resolution for the X
- viewer, which had already been documented in earlier versions.
-
-2002-01-07 Bernd Warken
-
- * groffer 0.4 (beta) released (as groff `contrib')
-
- * groffer.man:
- - New features documented.
- - Macros stream-lined.
- - Section EXAMPLES added.
-
- * groffer.sh:
- - System tests added/optimized.
- - Speed/memory optimizations by defining some shell functions
- alternatively depending on the text results.
- - Use `gzip' for decompression instead of `zcat'.
- - Signal handling added for clean exiting by `trap'.
- - Temporary files exist only as long as necessary.
- - Setup of path for man-pages moved after the option parsing.
- - Fixed a bug in determining the path for man-pages.
- - Fixed a bug in the handling of non-groffer options.
-
- * New features:
- - New option --tty for forcing paging on text terminal.
- - New option --no-man for disabling the man-page feature.
- - Implement reserved POSIX -W feature to simulate long options.
- - gxditview is now run as a background process.
-
-2002-01-05 Werner LEMBERG <wl@gnu.org>
-
- * Integrate groffer into groff's `contrib' tree.
-
- * Makefile: Replaced by...
- Makefile.sub: New file.
-
- * groffer: Replaced by...
- groffer.sh: New file.
-
- * groffer.man (OptDef): Add missing backslashes.
- Update copyright.
-
-2001-12-15 Bernd Warken
-
- * groffer 0.3 (alpha) released (still stand-alone package).
-
- * GNU and POSIX are supported (POSIX without long options).
-
- * New options : --man, --mandb, --title, --xrdb
-
- * Support for command line arguments with embedded single space
- characters (GNU only) .
-
- * Several search methods for man-pages when no `man -w' is
- available ($MANPATH, mandb, a default path).
-
- * Language support for man-pages.
-
- * Recognize the following filespecs as man-page parameters:
- man:name(section), man:name, name.section, name.
-
-2001-12-03 Bernd Warken
-
- * Stand-alone package for groffer 0.2 (alpha) created
- Files: groffer, groffer.man, Makefile, TODO, ChangeLog
-
-2001-12-02 Bernd Warken
-
- * groffer 0.2 (alpha) program released.
-
- * Name changed from `groffview' to `groffer'.
-
- * Comments added.
-
- * Name changed from `groffview' to `groffer'.
-
- * Options harmonized with groff.
- New options : -Q --source, -T --device, -X .
- Other options known from groff are passed unchanged.
-
- * 100 dpi as default, 75 dpi only in emergency situations.
-
- * Bugs with temporary files fixed.
-
- * Code restructured and comments added.
-
-2001-11-28 Bernd Warken
-
- ***** groffview 0.1 (experimental) and groffview.man released
- (predecessor of groffer, shell script)
-
- * Options : -h --help, -v --version
-
- * Search for man-pages based on $MANPATH
-
- * development of `groffview' shell script started
-
-2001-11-28 Bernd Warken
-
- ________________________________________________________________
- License
-
- Copyright (C) 2001,2002,2003,2004,2005
- Free Software Foundation, Inc.
- Written by Bernd Warken
-
- Copying and distribution of this file, with or without
- modification, are permitted provided the copyright notice and this
- notice are preserved.
-
- This file is part of `groffer', which is part of the `groff'
- project.
diff --git a/contrib/groff/contrib/groffer/Makefile.sub b/contrib/groff/contrib/groffer/Makefile.sub
deleted file mode 100644
index 54dfce40933b..000000000000
--- a/contrib/groff/contrib/groffer/Makefile.sub
+++ /dev/null
@@ -1,60 +0,0 @@
-# Makefile.sub for `groffer' (integration into the `groff' source tree)
-
-# File position: <groff-source>/contrib/groffer/Makefile.sub
-
-# Copyright (C) 2001,2002,2005 Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org> and Bernd Warken.
-
-# Last update: 15 August 2005
-
-# This file is part of `groffer' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with `groff'; see the files COPYING and LICENSE in the top
-# directory of the `groff' source. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-########################################################################
-
-MAN1=groffer.n
-CLEANADD=groffer
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: groffer
-
-groffer: groffer.sh groffer2.sh $(SH_DEPS_SED_SCRIPT)
- $(RM) $@;
- sed -f $(SH_DEPS_SED_SCRIPT) \
- -e "s|@g@|$(g)|g" \
- -e "s|@BINDIR@|$(bindir)|g" \
- -e "s|@libdir@|$(libdir)|g" \
- -e "s|@VERSION@|$(version)$(revision)|g" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/groffer.sh >$@;
- chmod +x $@
-
-install_data: groffer
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -$(RM) $(bindir)/groffer
- $(INSTALL_SCRIPT) groffer $(bindir)/groffer
- -test -d $(libdir)/groff/groffer || \
- $(mkinstalldirs) $(libdir)/groff/groffer
- -$(RM) $(libdir)/groff/groffer/groffer2.sh
- $(INSTALL_SCRIPT) $(srcdir)/groffer2.sh \
- $(libdir)/groff/groffer/groffer2.sh
-
-uninstall_sub:
- -$(RM) $(bindir)/groffer
- -$(RM) $(libdir)/groff/groffer/groffer2.sh
- -rmdir $(libdir)/groff/groffer
diff --git a/contrib/groff/contrib/groffer/README b/contrib/groff/contrib/groffer/README
deleted file mode 100644
index 66d36123e62b..000000000000
--- a/contrib/groff/contrib/groffer/README
+++ /dev/null
@@ -1,104 +0,0 @@
-README
-
-The `groffer' program is the easiest way to read documents written in
-some `roff' language, such as the `man pages', the manual pages in
-many operating systems.
-
-
-Input
-
-Input comes from either standard input or command line parameters that
-represent names of exisiting roff files or standardized specifications
-for searching man pages. All of these can be compressed in a format
-that is decompressible by `gzip', including `.gz', `bz2', and `.Z'.
-
-`groffer' has many built-in `man' functionalities to find and read the
-manual pages on UNIX and similar operating systems. It accepts the
-information from an installed `man' program, but tries to find a man
-path by itself.
-
-`groffer' bundles all filespec parameters into a single output file in
-the same way as `groff'. The disadvantage of this is that all file
-name arguments must use the same groff language. To change this, the
-option parsing must be revised for large parts. It seems that this
-would create incompatibilities, so the actual option strategy is kept.
-
-
-Output
-
-All input is first sent to `grog' to determine the necessary `groff'
-options and then to `groff'. So no special `groff' arguments must be
-given. But all `groff' options can be specified when this seems to be
-appropriate.
-
-The following displaying modes for the output are available:
-- Display formatted input with
--- the X `roff' viewer `gxditview',
--- a Postcript viewer,
--- a PDF viewer,
--- a DVI viewer,
--- a web browser,
--- a pager in a text terminal (tty).
-- Generate `groff' output on stdout without a viewer.
-- Generate the `groff intermediate output' on standard output without
- postprocessing.
-- Output the source code without any `groff' processing.
-- There are some information outputs without `groff' processing, such
- as by option `-V' and the `man' like `whatis' and `apropos'
- outputs.
-
-By default, the program tries to display with `gxditview' as graphical
-device in X; on non-X text terminals, the `tty' text mode with a pager
-is tried by default.
-
-
-Compatibility
-
-`groffer' consists of two shell scripts. It should run on any POSIX
-or Bourne style shell that supports shell functions. See file
-`README_SH' for more information.
-
-
-Mailing lists
-
-For reporting bugs of `groffer', groff's free mailing list
-<bug-groff@gnu.org> can be used.
-
-For a general discussion, the mailing list <groff@gnu.org> is more
-useful, but one has to subscribe to this list at
-http://lists.gnu.org/mailman/listinfo/groff.
-
-See the `README' file in the top directory of the `groff' source
-package for more details on these mailing lists.
-
-
-####### License
-
-Last update: 2 August 2005
-
-Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
-Written by Bernd Warken
-
-This file is part of `groffer', which is part of `groff'.
-
-`groff' is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-`groff' is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with `groff'; see the files COPYING and LICENSE in the top
-directory of the `groff' source. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-####### Emacs settings
-
-Local Variables:
-mode: text
-End:
diff --git a/contrib/groff/contrib/groffer/README_SH b/contrib/groff/contrib/groffer/README_SH
deleted file mode 100644
index 05d085e5cb0e..000000000000
--- a/contrib/groff/contrib/groffer/README_SH
+++ /dev/null
@@ -1,268 +0,0 @@
-Additional description for the shell version of `groffer'
-
-
-Scripts
-
-The shell version of `groffer' contains two files, `groffer.sh' and
-`groffer2.sh'.
-
-`groffer.sh' is a short introductory script without any functions. I
-can be run with a very poor Bourne shell. It just contains some basic
-variables, the reading of the configuration files, and the
-determination of the shell for `groffer2.sh'. This script is
-transformed by `make' into `groffer' which will be installed into
-@bindir@, which is usually /usr/local/bin.
-
-`groffer2.sh' is a long main script with all functions; it is called
-by `groffer.sh' (`groffer' after installation). It is installed
-unchanged into @libdir@/groff/groffer, which is usually
-/usr/local/lib/groff/groffer. This script can be called with a
-different shell, using the `groffer' option `--shell'.
-
-
-Options
-
-The `groffer' script provides its own option parser. It is compatible
-to the usual GNU style command line This includes long option names
-with two signs such as `--option', clusters of short options, the
-mixing of options and non-option file names, the option `--' to close
-the option handling, and it is possible to abbreviate the long option
-names.
-
-The flexible mixing of options and file names in GNU style is always
-possible, even if the environment variable `$POSIXLY_CORRECT' is set
-to a non-empty value. This disables the rather wicked POSIX behavior
-to terminate option parsing when the first non-option command line
-argument is found.
-
-
-Error Handling
-
-Error handling and exit behavior is complicated by the fact that
-`exit' can only escape from the current shell; trouble occurs in
-subshells. This was solved by sending kill signals, see $_PROCESS_ID
-and error().
-
-
-Function Definitions in `groffer2.sh'
-
-Each funtion in groffer2.sh has a description that starts with the
-function name and symbols for its arguments in paranthesis `()'. Each
-`<>' construction gives an argument name that just gives a hint on
-what the argument is meant to be; these argument names are otherwise
-irrelevant. The `>' sign can be followed by another character that
-shows how many of these arguments are possible.
-
-<arg> exactly 1 of this argument
-<arg>? 0 or 1 of these arguments
-<arg>* arbitrarily many such arguments, incl. none
-<arg>+ one or more such arguments
-<arg>... one or more such arguments
-[...] optional arguments
-
-A function that starts with an underscore `_' is an internal function
-for some other function. The internal functions are defined just
-after their corresponding function.
-
-
-External Environment Variables
-
-The groffer.sh script uses the following external system variables.
-It is supposed that these variables are already exported outside of
-groffer.sh; otherwise they do not have a value within the script.
-
-external system environment variables that are explicitly used
-$DISPLAY: Presets the X display.
-$LANG: For language specific man pages.
-$LC_ALL: For language specific man pages.
-$LC_MESSAGES: For language specific man pages.
-$PAGER: Paging program for tty mode.
-$PATH: Path for the programs called (`:' separated list).
-
-groffer native environment variables
-$GROFFER_OPT preset options for groffer.
-
-all groff environment variables are used, see groff(1)
-$GROFF_BIN_PATH: Path for all groff programs.
-$GROFF_COMMAND_PREFIX: '' (normally) or 'g' (several troffs).
-$GROFF_FONT_PATH: Path to non-default groff fonts.
-$GROFF_TMAC_PATH: Path to non-default groff macro files.
-$GROFF_TMPDIR: Directory for groff temporary files.
-$GROFF_TYPESETTER: Preset default device.
-
-all GNU man environment variables are used, see man(1).
-$MANOPT: Preset options for man pages.
-$MANPATH: Search path for man pages (: list).
-$MANROFFSEQ: Ignored because of grog guessing.
-$MANSECT: Search man pages only in sections (:).
-$SYSTEM: Man pages for different OS's (, list).
-
-
-Object-oriented Functions
-
-The groffer script provides an object-oriented construction (OOP). In
-object-oriented terminology, a type of object is called a `class'; a
-function that handles objects from a class is named `method'.
-
-In the groffer script, the object is a variable name whose content is
-the object's data. Methods are functions that have an object as first
-argument.
-
-The basic functions for object handling are obj_*().
-
-The class `list' represents an array structure, see list_*().
-
-
-Shell Compatibility
-
-The `groffer' shell scripts are compatible to both the GNU and the
-POSIX shell and utilities. Care was taken to restrict the programming
-technics used here in order to achieve POSIX compatibility as far back
-as POSIX P1003.2 Draft 11.2 of September 1991. This draft is
-available at http://www.funet.fi/pub/doc/posix/p1003.2/d11.2 in the
-internet.
-
-The POSIX draft does not include `local' variables for functions. So
-this concept was replaced by global variables with a prefix that
-differs for each function. The prefix is chosen from the function
-name. These quasi-local variables are unset before each return of the
-function.
-
-The `groffer' scripts were tested under the shells `ash', `bash',
-`bash-minimal', `dash', 'ksh', `mksh', `pdksh', 'posh', and `zsh'
-without problems in Linux Debian. A shell can be tested by the
-`groffer' option `--shell', but that will run only with groffer2.sh.
-To start it directly from the beginning under this shell the following
-command can be used.
-
- <shell-name> groffer.sh --shell=<shell-name> <argument>...
-
-
-Some shells are not fully POSIX compatible. For them the following
-restrictions were done. For more information look at the
-documentation `Portable shells' in the `info' page of `autoconf'
-(look-up in Emacs-Help-Manuals_Info).
-
-- The command parts `then', `else', and `do' must be written each on a
- line of their own.
-
-- Replace `for i in "$@"' by `for i' and remove internal `;' (kah).
-
-- Replace `set -- ...' by `set x ...; shift'. After the first
- non-option argument, all arguments including those starting with `-'
- are accepted as non-option. For variables or `$()' constructs with
- line-breaks, use `eval set' without quotes. That transforms a
- line-break within a variable to a space.
-
-- The name of the variable in `for' is chosen as a single character
- (old ash). The content of such variables is not safe because it can
- also occur in other functions. So it is often stored in an
- additional quasi-local variable.
-
-- `echo' is not portable on options; some `echo' commands have many
- options, others have none. So `echo -n' cannot be used, such that
- the output of each function has complete lines. There are two
- methods to avoid having `-' as the first character of any argument.
- Either a character such as `x' can be prepended to the argument;
- this must later on be removed by `sed'. Otherwise, `echo' can be
- replaced by `cat <<EOF'.
-
-- `ls' has problems. Old UNIX systems echoed the error message to
- standard output. So handle the output with `sed'. If the output
- contains `not found' map it to an empty string.
-
-- As `test -e' is not available in Solaris 2.5 replace it by
- `test -f || test -d'.
-
-- As `unset' is not supported by all shells replace it by `eval
- ${_UNSET}' where this variable is `unset' if it exists and `:'
- otherwise.
-
-- Some shells have problems with options in `eval'. So quoting must
- be done right to hide the options from `eval'.
-
-- In backquote calls `` avoid the backquote ` in comments.
-
-- Replace `true' by `:', `false' isn't used.
-
-- Do not redefine builtins as functions (ash).
-
-- Avoid `[^...]' in `case' patterns (ash).
-
-- `trap' does not allow error code 127.
-
-The scripts call the following commands with all options used:
-.
-:
-apropos
-break
-bzip2 -c -d -t
-cat
-catz
-cd
-continue
-echo
-eval
-expr
-grep
-groff -v
-grog -T -X -Z
-gs -c -d -f -q -s
-gzip -c -d -f
-less -r -R
-ls
-man -k --apropos
-mkdir
-mv
-pwd
-return
-rm -f -r
-rmdir
-sed -e -n
-set -e
-sh -c
-shift
-test -c -d -f -r -s -w -x
-trap
-umask
-unset
-
-
-Bugs
-
-If the `groffer' run is interrupted by Crtl-C the clean up is not done
-by all shells. The `trap' commands work for the shells `bash',
-`bash-minimal', and 'ksh'; they do not work for `ash', `dash',
-`pdksh', `posh', and `zsh'.
-
-
-####### License
-
-Last update: 19 August 2005
-
-Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
-Written by Bernd Warken
-
-This file is part of `groffer', which is part of `groff'.
-
-`groff' is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-`groff' is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-License for more details.
-
-You should have received a copy of the GNU General Public License
-along with `groff'; see the files COPYING and LICENSE in the top
-directory of the `groff' source. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-####### Emacs settings
-
-Local Variables:
-mode: text
-End:
diff --git a/contrib/groff/contrib/groffer/TODO b/contrib/groff/contrib/groffer/TODO
deleted file mode 100644
index 33e86b62db92..000000000000
--- a/contrib/groff/contrib/groffer/TODO
+++ /dev/null
@@ -1,58 +0,0 @@
-TODO file for `groffer'
-
-File position: <groff-source>/contrib/groffer/TODO
-
-
-####### TODO
-
-Revision:
-
-Optimization:
-- Optimize `man' path determination in manpath_add_lang_sys() for speed
- by building-up the `man' path only by and by as far as necessary
- (not trivial).
-- To increase the running speed write part of the `groffer' shell
- script in C/C++.
-
-Features of external programs:
-- Revise option handling of `grog'.
-
-Documentation:
-- Improve the documentation of the search algorithm for `man' pages in
- both the `groffer' scripts and the `man' page `groffer.man'.
-- In `groffer.man', add more documentation for parts that were taken
- over from GNU `man'.
-- The documentation in the headers for some function definitions in
- `groffer2.sh' needs to be updated.
-
-
-####### License
-
-Last update: 16 August 2005
-
-Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
-Written by Bernd Warken
-
-This file is part of `groffer', which is part of `groff'.
-
-`groff' is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-`groff' is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-License for more details.
-
-You should have received a copy of the GNU General Public License
-along with `groff'; see the files COPYING and LICENSE in the top
-directory of the `groff' source. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-####### Emacs settings
-
-Local Variables:
-mode: text
-End:
diff --git a/contrib/groff/contrib/groffer/groffer.man b/contrib/groff/contrib/groffer/groffer.man
deleted file mode 100644
index 80177d6c26e9..000000000000
--- a/contrib/groff/contrib/groffer/groffer.man
+++ /dev/null
@@ -1,4018 +0,0 @@
-.TH GROFFER @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groffer \- display groff files and man\~pages on X and tty
-.
-.SH "SYNOPSIS"
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" --------------------------------------------------------------------
-.\" Legalize
-.\" --------------------------------------------------------------------
-.
-.ig
-groffer.1 - man page for groffer (section 1).
-
-Source file position: <groff_source_top>/contrib/groffer/groffer.man
-Installed position: $prefix/share/man/man1/groffer.1
-
-Last update: 22 August 2005
-
-Source file position: <groff-source>/contrib/groffer/groffer.man
-..
-.de author
-This file was written by
-.MTO "" "Bernd Warken" .
-..
-.de copyleft
-Copyright (C) 2001,2002,2004,2005 Free Software Foundation, Inc.
-.
-.P
-This file is part of
-.IR \%groffer ,
-which is part of
-.IR \%groff ,
-a free software project.
-.
-You can redistribute it and/or modify it under the terms of the
-.nh
-.B GNU General Public License
-.hy
-as published by the
-.nh
-.BR "Free Software Foundation" ,
-.hy
-either version 2, or (at your option) any later version.
-.
-.P
-You should have received a copy of the \f[CR]GNU General Public
-License\f[] along with
-.IR groff ,
-see the files \%\f[CB]COPYING\f[] and \%\f[CB]LICENSE\f[] in the top
-directory of the
-.I groff
-source package.
-.
-Or read the
-.I man\~page
-.BR gpl (1).
-You can also write to the
-.nh
-.B Free Software Foundation, 51 Franklin St - Fifth Floor, Boston,
-.BR "MA 02110-1301, USA" .
-.hy
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \{\
-. ftr CB CW
-.\}
-.
-.ds Ellipsis ".\|.\|.\""
-.
-.\" --------------------------------------------------------------------
-.\" setup for the macro definitions below
-.\"
-.\" naming: namespace:cathegory_macro.variable_name (experimental)
-.
-.\" --------------------------------------------------------------------
-.\" configuration of prompt for `.Shell_cmd'* macros
-.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands
-.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines
-.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts
-.
-.\" automatically determine setup from the configuration above
-.als @f groffer:Shell_cmd_base.prompt_font\"
-.als @t groffer:Shell_cmd.prompt_text\"
-.als @t+ groffer:Shell_cmd+.prompt_text\"
-.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
-.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
-.nr @w \w'\*[groffer:Shell_cmd.prompt]'\"
-.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\"
-.ft \*[@f]
-.\" Full prompt width is maximum of texts plus 1m
-.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
-.ft
-.rm @f
-.rm @f+
-.rm @t
-.rm @t+
-.rr @w
-.rr @w+
-.
-.\" --------------------------------------------------------------------
-.\" static register for inter-macro communication in `.Synopsis'*
-.nr groffer:Synopsis.level 0
-.
-.\" --------------------------------------------------------------------
-.\" static registers for inter-macro communication in `.TP'*
-.nr groffer:TP.level 0
-.rr groffer:TP_header.flag
-.rr groffer:TP_body.flag
-.rr groffer:TP.indent
-.
-.
-.\" --------------------------------------------------------------------
-.\" Macro definitions
-.
-.\" Ignore all arguments like a comment, even after a .eo call.
-.de c
-..
-.c --------------------------------------------------------------------
-.c .CB (<text>...)
-.c
-.c Print in constant-width bold font.
-.c
-.de CB
-. ft CB
-. Text \\$*
-. ft
-..
-.c --------------------------------------------------------------------
-.c .CI (<text>...)
-.c
-.c Print in constant-width italic font.
-.c
-.de CI
-. ft CI
-. Text \\$*
-. ft
-..
-.c --------------------------------------------------------------------
-.c .CR (<text>...)
-.c
-.c Print in constant-width roman font.
-.c
-.de CR
-. ft CR
-. Text \\$*
-. ft
-..
-.c --------------------------------------------------------------------
-.c .Error (<text>...)
-.c
-.c Print error message to terminal and abort.
-.c
-.de Error
-. tm \\$*
-. ab
-..
-.c --------------------------------------------------------------------
-.c .Env_var (<env_var_name> [<punct>])
-.c
-.c Display an environment variable, with optional punctuation.
-.c
-.de Env_var
-. nh
-. SM
-. Text \f[CB]\\$1\f[]\\$2
-. hy
-..
-.c --------------------------------------------------------------------
-.c .File_name (<path_name>)
-.c
-.c Display a file or directory name in CB font.
-.c
-.de File_name
-. Header_CB \\$@
-..
-.c --------------------------------------------------------------------
-.c .Header_CB (<path_name>)
-.c
-.c Display a line in CB font, for example after .TP
-.c
-.de Header_CB
-. nh
-. Text \f[CB]\\$1\f[]\\$2
-. hy
-..
-.c --------------------------------------------------------------------
-.c .Opt_- ([<punct>])
-.c
-.c Print `-' (minus sign); optional punctuation.
-.c
-.de Opt_-
-. ie (\\n[.$] == 0) \
-. Opt_alt - ""
-. el \
-. Opt_alt - "" "\\$1"
-..
-.c --------------------------------------------------------------------
-.c .Opt_[-] ([<punct>])
-.c
-.c Print `Opt_[-]' (minus sign in brackets); optional punctuation.
-.c
-.de Opt_[-]
-. ie (\\n[.$] == 0) \
-. Opt_[alt] - ""
-. el \
-. Opt_[alt] - "" "\\$1"
-..
-.c --------------------------------------------------------------------
-.c .Opt_-- ([<punct>])
-.c
-.c Print `--' (double minus); optional punctuation.
-.c
-.de Opt_--
-. ie (\\n[.$] == 0) \
-. Opt_alt -- ""
-. el \
-. Opt_alt -- "" "\\$1"
-..
-.c --------------------------------------------------------------------
-.c .Opt_[--] ([<punct>])
-.c
-.c Print `Opt_[--]' (double minus in brackets); optional punctuation.
-.c
-.de Opt_[--]
-. ie (\\n[.$] == 0) \
-. Opt_[alt] -- ""
-. el \
-. Opt_[alt] -- "" "\\$1"
-..
-.c --------------------------------------------------------------------
-.c .Opt_alt ([<minus> <opt>]... [<arg> [<punct>]])
-.c
-.c Alternate options separated by a vertical bar.
-.c
-.c Arguments:
-.c minus: either `-' or `--' (font CB).
-.c opt: a name for an option, empty allowed (font CB).
-.c arg: optionally, the argument to the option (font I).
-.c punct: optional punctuation (in the starting font).
-.c Result:
-.c The minus/opt argument pairs, each
-.c separated by a vertical bar `|', optionally add 'arg', separated
-.c a space character ` '.
-.c
-.c Example:
-.c .Opt_alt - T -- device -- device-troff device .
-.c results in
-.c -T|--device|--device-troff device.
-.c
-.de Opt_alt
-. Opt_alt_base "" | "" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Opt_[alt] ([<minus> <opt>]... [<arg> [<punct>]])
-.c
-.c Alternate options in brackets for section SYNOPSIS.
-.c
-.c Arguments:
-.c minus: either `-' or `--' (font CB).
-.c opt: a name for an option, empty allowed (font CB).
-.c arg: optionally, the argument to the option (font I).
-.c punct: optional punctuation (in the starting font).
-.c Global strings written to:
-.c `@oa_prefix': left enclosing character (`[')
-.c `@oa_sep': separator (`|')
-.c `@oa_postfix': right enclosing character (`]')
-.c Result:
-.c The minus/opt argument pairs, each separated by a vertical
-.c bar `|', optionally add 'arg', separated by a space character ` '.
-.c
-.c Example:
-.c .Opt_[alt] - T -- device -- device-troff device .
-.c results in
-.c [-T|--device|--device-troff device].
-.c
-.de Opt_[alt]
-. Opt_alt_base [ | ] \\$@
-..
-.c --------------------------------------------------------------------
-.c .Opt_alt_base (<pre> <sep> <post> [<minus> <opt>]... [arg [punct]])
-.c
-.c Alternating options; base macro for many others; do not use directly.
-.c
-.c Arguments:
-.c <pre>: prefix, result is preceded by this.
-.c <sep>: separator between minus/opt pairs.
-.c <post>: postfix, is appended to the result.
-.c <minus>: either `-' or `--' (font CB).
-.c <opt>: a name for an option, empty allowed (font CB).
-.c <arg>: optionally, the argument to the option (font I).
-.c <punct>: optional punctuation (in the starting font).
-.c Result:
-.c String `<pre>' followed by the <minus>/<opt> argument pairs, each
-.c separated by string `<sep>', optionally add '<arg>', separated by
-.c a single space ` ', followed by the string `<post>'. Terminated
-.c by the optional punctuation <punct>.
-.c
-.de Opt_alt_base
-. nr @font \\n[.f]\"
-. if (\\n[.$] < 3) \
-. Error .\\0: not enough arguments.
-. ds @pre \)\\$1\)\" prefix
-. ds @sep \)\\$2\)\" separator
-. ds @post \)\\$3\)\" postfix
-. shift 3
-. nr @count 0
-. ds @res \f[CR]\\*[@pre]\"
-. while (\\n[.$] >= 2) \{\
-. c do the pairs, break on no `-'
-. if !'\\$1'-' \{\
-. if !'\\$1'--' \
-. break
-. \}
-. c separator
-. if (\\n[@count] > 0) \
-. as @res \f[CR]\\*[@sep]\:\"
-. nr @count +1
-. c combine minus with option name
-. as @res \f[CB]\\-\"
-. if '\\$1'--' \
-. as @res \\-\"
-. as @res \\$2\"
-. shift 2
-. \}
-. if (\\n[.$] >= 3) \
-. Error .\\0: wrong arguments: \\$@
-. c all pairs are done
-. ie (\\n[.$] == 0) \
-. as @res \f[CR]\\*[@post]\"
-. el \{\
-. c optional option argument
-. if !'\\$1'' \
-. as @res \f[CR] \,\f[I]\\$1\"
-. shift
-. c postfix
-. as @res \\f[CR]\\*[@post]\"
-. if (\\n[.$] >= 1) \{\
-. c add punctuation
-. as @res \f[\\n[@font]]\\$1\"
-. \}
-. \}
-. nh
-. Text \\*[@res]
-. hy
-. ft \\n[@font]
-. rr @count
-. rr @font
-. rm @pre
-. rm @post
-. rm @sep
-. rm @res
-..
-.c --------------------------------------------------------------------
-.c .Opt_def ([<minus> <opt>]... [<arg> [<punct>]])
-.c
-.c Definitions of options in section OPTIONS.
-.c
-.c Arguments:
-.c minus: either `-' or `--' (font CB).
-.c opt: a name for an option, empty allowed (font CB).
-.c arg: optionally, the argument to the option (font I).
-.c punct: optional punctuation (in the starting font).
-.c Result:
-.c The header for an indented paragraph, consisting of
-.c minus/opt argument pairs, each, separated by a space
-.c character ` ', optionally add 'arg', separated a space
-.c character ` '.
-.c
-.c Example:
-.c .Opt_def - T -- device -- device-troff device .
-.c results in
-.c -T --device --device-troff device.
-.c as the header of for indented paragraph.
-.c
-.de Opt_def
-. TP
-. Opt_alt_base "" "\~|\~" "" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Opt_element ([<minus> <opt>]... [<arg> [<punct>]])
-.c
-.c Definitions of options in section OPTIONS.
-.c
-.c Arguments:
-.c minus: either `-' or `--' (font CB).
-.c opt: a name for an option, empty allowed (font CB).
-.c arg: optionally, the argument to the option (font I).
-.c punct: optional punctuation (in the starting font).
-.c Result:
-.c The minus/opt argument pairs, each, separated by a space
-.c character ` ', optionally add 'arg', separated a space
-.c character ` '.
-.c
-.c Example:
-.c .Opt_element - T -- device -- device-troff device .
-.c results in
-.c -T --device --device-troff device.
-.c
-.de Opt_element
-. Opt_alt_base "" "\~" "" \\$@
-..
-.c --------------------------------------------------------------------
-.als Opt_list Opt_element
-.
-.c --------------------------------------------------------------------
-.c .Opt_long ([<name> [<punct>]])
-.c
-.c Print `--name' somewhere in the text; optional punctuation.
-.c
-.de Opt_long
-. Opt_alt -- "\\$1" "" "\\$2"
-..
-.c --------------------------------------------------------------------
-.c .Opt_long_arg ([<name> <arg> [<punct>]])
-.c
-.c Print `--name=arg' somewhere in the text; optional punctuation.
-.c
-.de Opt_long_arg
-. Opt_alt -- "\\$1=\\$2" "" "\\$3"
-..
-.c --------------------------------------------------------------------
-.c .Opt_[long] ([<name> [<punct>]])
-.c
-.c Print `--name' somewhere in the text; optional punctuation.
-.c
-.de Opt_[long]
-. Opt_[alt] -- "\\$1" "" "\\$2"
-..
-.c --------------------------------------------------------------------
-.c .Opt_short ([<name> [<punct>]])
-.c
-.c Print `-name' somewhere in the Text; optional punctuation.
-.c
-.de Opt_short
-. Opt_alt - "\\$1" "" "\\$2"
-..
-.c --------------------------------------------------------------------
-.c .Opt_[short] ([name [punct]])
-.c
-.c Print `[-name]' somewhere in the Text; optional punctuation.
-.c
-.de Opt_[short]
-. Opt_[alt] - "\\$1" "" "\\$2"
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd (<CR> [<CI>] ...)
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c
-.c Examples:
-.c .Shell_cmd "groffer --dpi 100 file"
-.c result: `sh# groffer --dpi 100 file'
-.c with 'sh#' in font I, the rest in CR
-.c
-.c .Shell_cmd groffer\~--dpi\~100\~file
-.c result: the same as above
-.c
-.c .Shell_cmd "groffer --dpi=" value " file"
-.c result: sh# groffer --dpi=value file
-.c with `groffer --dpi=' and `file' in CR; `value' in CI
-.c
-.c .Shell_cmd groffer\~--dpi= value \~file
-.c result: the same as the previous example
-.c
-.de Shell_cmd
-. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd+ (<CR> [<CI>] ...)
-.c
-.c A continuation line for .Shell_cmd.
-.c
-.de Shell_cmd+
-. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c Internal, do not use directly.
-.c
-.c Globals: read-only register @.Shell_cmd_width
-.c
-.de groffer:Shell_cmd_base
-. if (\\n[.$] <= 0) \
-. return
-. nr @+font \\n[.f]\"
-. ds @prompt \\$1\"
-. ft CR
-. c gap between prompt and command
-. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
-. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
-. shift
-. ds @cf CR\"
-. while (\\n[.$] > 0) \{\
-. as @res \\f[\\*[@cf]]\\$1\"
-. shift
-. ie '\\*[@cf]'CR' \
-. ds @cf I\"
-. el \
-. ds @cf CR\"
-. \}
-. br
-. ad l
-. nh
-. nf
-. Text \\*[@res]\"
-. fi
-. hy
-. ad
-. br
-. ft \\n[@+font]
-. rr @+font
-. rr @+gap
-. rm @cf
-. rm @res
-..
-.c --------------------------------------------------------------------
-.c .Synopsis ()
-.c
-.c Begin a synopsis section, to be ended by a ./Synopsis macro.
-.c
-.de Synopsis
-. if (\\n[groffer:Synopsis.level] > 0) \
-. Error .\\$0: previous .Synopsis was not closed by ./Synopsis.
-. nh
-. ds @1 \\$1\"
-. nr @old_indent \\n(.i
-. ad l
-. in +\w'\fB\\*[@1]\0'u
-. ti \\n[@old_indent]u
-. B \\*[@1]\0\c
-. rr @old_indent
-. rm @1
-. nr groffer:Synopsis.level +1\" marker for ./Synopsis
-..
-.c --------------------------------------------------------------------
-.c ./Synopsis ()
-.c
-.c Close a synopsis section opened by the previous .Synopsis macro.
-.c
-.de /Synopsis
-. if (\\n[groffer:Synopsis.level] <= 0) \
-. Error .\\$0: no previous call of .Synopsis
-. br
-. ad
-. in
-. hy
-. nr groffer:Synopsis.level -1
-..
-.c --------------------------------------------------------------------
-.c .Text (<text>...)
-.c
-.c Treat the arguments as text, no matter how they look.
-.c
-.de Text
-. if (\\n[.$] == 0) \
-. return
-. nh
-. nop \)\\$*\)
-. hy
-..
-.c --------------------------------------------------------------------
-.c .Topic ([<indent>])
-.c
-.c A bulleted paragraph
-.c
-.de Topic
-. ie (\\n[.$] = 0) \
-. ds @indent 2m\"
-. el \
-. ds @indent \\$1\"
-. TP \\*[@indent]
-. Text \[bu]
-. rm @indent
-..
-.c --------------------------------------------------------------------
-.c .TP+ ()
-.c
-.c Continuation line for .TP header.
-.c
-.de TP+
-. br
-. ns
-. TP \\$1
-..
-.c --------------------------------------------------------------------
-.c .TP_header ([<indent>])
-.c
-.c Start a multi-line header for a .TP-like paragraph
-.c
-.de TP_header
-. if (\\n[groffer:TP.level] < 0) \
-. Error .\\$0: wrong level.
-. nr groffer:TP.level +1
-. P
-. ie (\\n[.$] == 0) \
-. rr groffer:TP.indent
-. el \
-. nr groffer:TP.indent \\$1
-. nr groffer:TP_header.flag 1
-..
-.c --------------------------------------------------------------------
-.c .TP_body ([<indent>])
-.c
-.c End a previous .TP-header and beging the body of the paragraph.
-.c
-.de TP_body
-. if !rgroffer:TP_header.flag \
-. Error .\\$0: no previous call of .TP_header
-. if (\\n[groffer:TP.level] <= 0) \
-. Error .\\$0: wrong level.
-. br
-. ie (\\n[.$] == 0) \{\
-. ie rgroffer:TP.indent \{\
-. RS \\n[groffer:TP.indent]u
-. \}
-. el \
-. RS
-. \}
-. el \
-. RS \\$1u
-. rr groffer:TP.indent
-. rr groffer:TP_header.flag
-. nr groffer:TP_body.flag 1
-..
-.c --------------------------------------------------------------------
-.c TP_end ()
-.c
-.c End of former .TP_body paragraph.
-.c
-.de TP_end
-. if !rgroffer:TP_body.flag \
-. Error .\\$0: no previous .TP_body.
-. if (\\n[groffer:TP.level] <= 0) \
-. Error TP_end: wrong level.
-. nr groffer:TP.level -1
-. rr grogger:TP.indent
-. rr groffer:TP_header.flag
-. rr groffer:TP_body.flag
-. br
-. RE
-..
-.
-.\" End of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.\" SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.ad l
-.Synopsis groffer
-.RI [ option... ]
-.Opt_[--]
-.RI [ "\%filespec" "\*[Ellipsis]]"
-./Synopsis
-.
-.Synopsis groffer
-.Opt_alt - h -- help
-./Synopsis
-.
-.Synopsis groffer
-.Opt_alt - v -- version
-./Synopsis
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program is the easiest way to use
-.BR \%groff (@MAN1EXT@).
-It can display arbitrary documents written in the
-.I \%groff
-language, see
-.BR \%groff (@MAN7EXT@),
-or other
-.I \%roff
-languages, see
-.BR \%roff (@MAN7EXT@),
-that are compatible to the original
-.I \%troff
-language.
-.
-The
-.B \%groffer
-program also includes many of the features for finding and displaying
-the \%\f[CR]Unix\f[] manual pages
-.nh
-.RI ( man\~pages ),
-.hy
-such that it can be used as a replacement for a
-.BR \%man (1)
-program.
-.
-Moreover, compressed files that can be handled by
-.BR \%gzip (1)
-or
-.BR \%bzip2 (1)
-are decompressed on-the-fly.
-.
-.
-.P
-The normal usage is quite simple by supplying a file name or name of a
-.I \%man\~page
-without further options.
-.
-But the option handling has many possibilities for creating special
-behaviors.
-.
-This can be done either in configuration files, with the shell
-environment variable
-.BR \%$GROFFER_OPT ,
-or on the command line.
-.
-.
-.P
-The output can be generated and viewed in several different ways
-available for
-.IR \%groff .
-.
-This includes the
-.I \%groff
-native \%\f[CR]X\~Window\f[] viewer
-.BR \%gxditview (@MAN1EXT@),
-each
-.IR \%Postcript ,
-.IR \%pdf ,
-or
-.I \%dvi
-display program, a web browser by generating
-.I \%html
-in
-.IR \%www\~mode ,
-or several
-.I \%text\~modes
-in text terminals.
-.
-.
-.P
-Most of the options that must be named when running
-.B \%groff
-directly are determined automatically for
-.BR \%groffer ,
-due to the internal usage of the
-.BR \%grog (@MAN1EXT@)
-program.
-.
-But all parts can also be controlled manually by arguments.
-.
-.
-.P
-Several file names can be specified on the command line arguments.
-.
-They are transformed into a single document in the normal way of
-.BR \%groff .
-.
-.
-.P
-Option handling is done in \f[CR]GNU\f[] style.
-.
-Options and file names can be mixed freely.
-.
-The option
-.RB ` \-\- '
-closes the option handling, all following arguments are treated as
-file names.
-.
-Long options can be abbreviated.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTION OVERVIEW"
-.\" --------------------------------------------------------------------
-.
-.TP
-.I breaking options
-.RS
-.P
-.Opt_[alt] - h -- help
-.Opt_[alt] - v -- version
-.RE
-.
-.
-.TP
-.I \%groffer mode options
-.RS
-.P
-.Opt_[alt] -- auto
-.Opt_[alt] -- default
-.Opt_[alt] -- default\-modes mode1,mode2,\*[Ellipsis]
-.Opt_[alt] -- dvi
-.Opt_[alt] -- dvi\-viewer prog
-.Opt_[alt] -- dvi\-viewer\-tty prog
-.Opt_[alt] -- groff
-.Opt_[alt] -- html
-.Opt_[alt] -- html\-viewer prog
-.Opt_[alt] -- html\-viewer\-tty prog
-.Opt_[alt] -- mode display_mode
-.Opt_[alt] -- pdf
-.Opt_[alt] -- pdf\-viewer prog
-.Opt_[alt] -- pdf\-viewer\-tty prog
-.Opt_[alt] -- ps
-.Opt_[alt] -- ps\-viewer prog
-.Opt_[alt] -- ps\-viewer\-tty prog
-.Opt_[alt] -- text
-.Opt_[alt] -- tty
-.Opt_[alt] -- tty\-viewer prog
-.Opt_[alt] -- tty\-viewer\-tty prog
-.Opt_[alt] -- www
-.Opt_[alt] -- www\-viewer prog
-.Opt_[alt] -- www\-viewer\- prog
-.Opt_[alt] -- x -- X
-.Opt_[alt] -- x\-viewer -- X\-viewer prog
-.Opt_[alt] -- x\-viewer\-tty -- X\-viewer\-tty prog
-.RE
-.
-.
-.TP
-.I development options
-.RS
-.P
-.Opt_[alt] -- debug
-.Opt_[alt] -- do\-nothing
-.Opt_[alt] -- shell prog
-.Opt_[alt] - Q -- source
-.Opt_[alt] - V
-.RE
-.
-.
-.TP
-.I options related to \%groff
-.RS
-.P
-.Opt_[alt] - T -- device device
-.Opt_[alt] - Z -- intermediate\-output -- ditroff
-.P
-All further
-.B \%groff
-short options are accepted.
-.RE
-.
-.
-.TP
-.I options for man\~pages
-.Opt_[alt] -- apropos
-.Opt_[alt] -- apropos\-data
-.Opt_[alt] -- apropos\-devel
-.Opt_[alt] -- apropos\-progs
-.Opt_[alt] -- whatis
-.Opt_[alt] -- man
-.Opt_[alt] -- no-man
-.Opt_[alt] -- no-special
-.
-.
-.TP
-.I long options taken over from GNU man
-.RS
-.P
-.Opt_[alt] -- all
-.Opt_[alt] -- ascii
-.Opt_[alt] -- ditroff
-.Opt_[alt] -- extension suffix
-.Opt_[alt] -- locale language
-.Opt_[alt] -- local-file
-.Opt_[alt] -- manpath dir1:dir2:\*[Ellipsis]
-.Opt_[alt] -- pager program
-.Opt_[alt] -- sections sec1:sec2:\*[Ellipsis]
-.Opt_[alt] -- systems sys1,sys2,\*[Ellipsis]
-.Opt_[alt] -- troff-device device
-.P
-Further long options of \f[CR]GNU\f[]
-.B man
-are accepted as well.
-.RE
-.
-.
-.TP
-.I X Window Toolkit options
-.RS
-.P
-.Opt_[alt] -- bd pixels
-.Opt_[alt] -- bg -- background color
-.Opt_[alt] -- bw pixels
-.Opt_[alt] -- display X-display
-.Opt_[alt] -- fg -- foreground color
-.Opt_[alt] -- ft -- font font_name
-.Opt_[alt] -- geometry size_pos
-.Opt_[alt] -- resolution value
-.Opt_[alt] -- rv
-.Opt_[alt] -- title string
-.Opt_[alt] -- xrm X-resource
-.RE
-.
-.
-.TP
-.I \%filespec arguments
-.RS
-.P
-No
-.I \%filespec
-parameters means standard input.
-.
-.
-.TP 10m
-.Opt_short ""
-stands for standard input (can occur several times).
-.
-.
-.TP
-.I filename
-the path name of an existing file.
-.
-.
-.TP
-.BI man: name ( section )
-.TP+
-.IB name ( section )
-search the \%man\~page
-.I \%name
-in \%man\~section
-.IR section .
-.
-.
-.TP
-.BI man: name . s
-.TP+
-.IB name . s
-if
-.I s
-is a character in
-.BR \%[1-9on] ,
-search for a \%man\~page
-.I \%name
-in \%man\~section
-.IR s .
-.
-.
-.TP
-.BI man: name
-\%man\~page in the lowest \%man\~section that has
-.IR \%name .
-.
-.
-.TP
-.I "s name"
-if
-.I s
-is a character in
-.BR \%[1-9on] ,
-search for a \%man\~page
-.I \%name
-in \%man\~section
-.IR s .
-.
-.
-.TP
-.I name
-if
-.I \%name
-is not an existing file search for the man\~page
-.I \%name
-in the lowest man\~section.
-.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTION DETAILS"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program can usually be run with very few options.
-.
-But for special purposes, it supports many options.
-.
-These can be classified in 5 option classes.
-.
-.
-.P
-All short options of
-.B \%groffer
-are compatible with the short options of
-.BR \%groff (@MAN1EXT@).
-.
-All long options of
-.B \%groffer
-are compatible with the long options of
-.BR \%man (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groffer breaking Options"
-.\" --------------------------------------------------------------------
-.
-As soon as one of these options is found on the command line it is
-executed, printed to standard output, and the running
-.B \%groffer
-is terminated thereafter.
-.
-All other arguments are ignored.
-.
-.
-.Opt_def - h -- help
-Print a helping information with a short explanation of option sto
-standard output.
-.
-.
-.Opt_def - v -- version
-Print version information to standard output.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groffer Mode Options"
-.\" --------------------------------------------------------------------
-.
-The display mode and the viewer programs are determined by these
-options.
-.
-If none of these mode and viewer options is specified
-.B \%groffer
-tries to find a suitable display mode automatically.
-.
-The default modes are
-.I mode x
-with
-.B gxditview
-in \%\f[CR]X\~Window\f[] and
-.I mode tty
-with device
-.I latin1
-under
-.B less
-on a terminal.
-.
-.
-.P
-There are two kinds of options for viewers.
-.Opt_long \fImode\fP-viewer
-chooses the normal viewer programs that run on their own in
-\%\f[CR]X\~Window\f[], while
-.Opt_long \fImode\fP-viewer-tty
-chooses programs that run on the terminal (on tty).
-.
-Most graphical viewers are programs running in \%\f[CR]X\~Window\f[],
-so there aren't many opportunities to call the tty viewers.
-.
-But they give the chance to view the output source; for example,
-.Opt_long ps\-viewer\-tty=less
-shows the content of the
-.I Postscript
-output with the pager
-.BR less .
-.
-.
-.P
-The \%\f[CR]X\~Window\f[] viewers are not critical, you can use both
-.Opt_long *\-viewer
-and
-.Opt_long *\-viewer\-tty
-for them; with
-.Opt_long *\-viewer\-tty
-the viewer program will not become independently, it just stays
-coupled with
-.BR groffer .
-But the program will not run if you specify a terminal program with
-.Opt_long *\-viewer
-because this viewer will stay in background without a chance to reach
-it.
-.
-So you really need
-.Opt_long *\-viewer\-tty
-for viewers that run on tty.
-.
-.
-.Opt_def -- auto
-Equivalent to
-.Opt_long_arg mode auto .
-.
-.
-.Opt_def -- default
-Reset all configuration from previously processed command line options
-to the default values.
-.
-This is useful to wipe out all former options of the configuration, in
-.Env_var $GROFFER_OPT ,
-and restart option processing using only the rest of the command line.
-.
-.
-.Opt_def -- default\-modes mode1,mode2,\*[Ellipsis]
-Set the sequence of modes for
-.I \%auto\~mode
-to the comma separated list given in the argument.
-.
-See
-.Opt_long mode
-for details on modes. Display in the default manner; actually, this
-means to try the modes
-.IR x ,
-.IR ps ,
-and
-.I \%tty
-in this sequence.
-.
-.
-.
-.Opt_def -- dvi
-Equivalent to
-.Opt_long_arg mode \%dvi .
-.
-.
-.Opt_def -- dvi\-viewer prog
-Choose an \%\f[CR]X\~Window\f[] viewer program for
-.IR \%dvi\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH .
-.
-Known \%\f[CR]X\~Window\f[]
-.I \%dvi
-viewers include
-.BR \%xdvi (1)
-and
-.BR \%dvilx (1)
-.
-In each case, arguments can be provided additionally.
-.
-.
-.Opt_def -- dvi\-viewer\-tty prog
-Choose a program running on the terminal for viewing the output of
-.IR \%dvi\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- groff
-Equivalent to
-.Opt_long_arg mode groff .
-.
-.
-.Opt_def -- html
-Equivalent to
-.Opt_long_arg mode html .
-.
-.
-.Opt_def -- html\-viewer
-Choose an \%\f[CR]X\~Window\f[] web browser program for viewing in
-.I \%html\~mode .
-.
-It can be the path name of an executable file or a program in
-.Env_var $PATH .
-.
-In each case, arguments can be provided additionally.
-.
-.
-.Opt_def -- html\-viewer\-tty
-Choose a terminal program for viewing the output of
-.I \%html\~mode .
-.
-It can be the path name of an executable file or a program in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- mode value
-.
-Set the display mode.
-.
-The following mode values are recognized:
-.
-.RS
-.
-.TP
-.Header_CB auto
-Select the automatic determination of the display mode.
-.
-The sequence of modes that are tried can be set with the
-.Opt_long default\-modes
-option.
-.
-Useful for restoring the
-.I \%default\~mode
-when a different mode was specified before.
-.
-.
-.TP
-.Header_CB dvi
-Display formatted input in a
-.I \%dvi
-viewer program.
-.
-By default, the formatted input is displayed with the
-.BR \%xdvi (1)
-program.
-.Opt_long dvi .
-.
-.
-.TP
-.Header_CB groff
-After the file determination, switch
-.B \%groffer
-to process the input like
-.BR \%groff (@MAN1EXT@)
-would do.
-.
-This disables the
-.I \%groffer
-viewing features.
-.
-.
-.TP
-.Header_CB html
-Translate the input into html format and display the result in a web
-browser program.
-.
-By default, the existence of a sequence of standard web browsers is
-tested, starting with
-.BR \%konqueror (1)
-and
-.BR \%mozilla (1).
-The text html viewer is
-.BR \%lynx (1).
-.
-.
-.TP
-.Header_CB pdf
-Display formatted input in a
-.I \%PDF
-(Portable Document Format) viewer
-program.
-.
-By default, the input is formatted by
-.B \%groff
-using the Postscript device, then it is transformed into the PDF file
-format using
-.BR \%gs (1),
-and finally displayed either with the
-.BR \%xpdf (1)
-or the
-.BR \%acroread (1)
-program.
-.
-PDF has a big advantage because the text is displayed graphically and
-is searchable as well.
-.
-But as the transformation takes a considerable amount of time, this
-mode is not suitable as a default device for the
-.I \%auto\~mode .
-.
-.
-.TP
-.Header_CB ps
-Display formatted input in a Postscript viewer program.
-.
-By default, the formatted input is displayed with the
-.BR \%ghostview (@MAN1EXT@)
-program.
-.
-.
-.TP
-.Header_CB text
-Format in a
-.I \%groff\~text\~mode
-and write the result to standard output without a pager or viewer
-program.
-.
-The text device,
-.I \%latin1
-by default, can be chosen with option
-.Opt_short T .
-.
-.
-.TP
-.Header_CB tty
-Format in a
-.I \%groff\~text\~mode
-and write the result to standard output using a text pager program,
-even when in \%\f[CR]X\~Window\f[].
-.
-.
-.TP
-.Header_CB www
-Equivalent to
-.Opt_long_arg mode html .
-.
-.
-.TP
-.Header_CB x
-Display the formatted input in a native
-.I roff
-viewer.
-.
-By default, the formatted input is displayed with the
-.BR \%gxditview (@MAN1EXT@)
-program being distributed together with
-.BR \%groff .
-But the standard \%\f[CR]X\~Window\f[] tool
-.BR \%xditview (1)
-can also be chosen with the option
-.Opt_long x\-viewer .
-The default resolution is
-.BR 75\~dpi ,
-but
-.B 100\~dpi
-are also possible.
-.
-The default
-.I groff
-device
-for the resolution of
-.B 75\~dpi
-is
-.BR X75\-12 ,
-for
-.B 100\~dpi
-it is
-.BR X100 .
-.
-The corresponding
-.I "groff intermediate output"
-for the actual device is generated and the result is displayed.
-.
-For a resolution of
-.BR 100\~dpi ,
-the default width of the geometry of the display program is chosen to
-.BR 850\~dpi .
-.
-.
-.TP
-.Header_CB X
-Equivalent to
-.Opt_long_arg mode x .
-.
-.
-.P
-The following modes do not use the
-.I \%groffer
-viewing features.
-.
-They are only interesting for advanced applications.
-.
-.
-.TP
-.Header_CB groff
-Generate device output with plain
-.I \%groff
-without using the special viewing features of
-.IR \%groffer .
-If no device was specified by option
-.Opt_short T
-the
-.I \%groff
-default
-.B \%ps
-is assumed.
-.
-.
-.TP
-.Header_CB source
-Display the source code of the input without formatting; equivalent to
-.Opt_short Q .
-.
-.
-.RE
-.
-.
-.Opt_def -- pdf
-Equivalent to
-.Opt_long_arg mode pdf .
-.
-.
-.Opt_def -- pdf\-viewer prog
-Choose an \%\f[CR]X\~Window\f[] viewer program for
-.IR \%pdf\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- pdf\-viewer\-tty prog
-Choose a terminal viewer program for
-.IR \%pdf\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- ps
-Equivalent to
-.Opt_long_arg mode ps .
-.
-.
-.Opt_def -- ps\-viewer prog
-Choose an \%\f[CR]X\~Window\f[] viewer program for
-.IR \%ps\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH .
-.
-Common Postscript viewers inlude
-.BR \%gv (1),
-.BR \%ghostview (1),
-and
-.BR \%gs (1),
-.
-In each case, arguments can be provided additionally.
-.
-.
-.Opt_def -- ps\-viewer\-tty prog
-Choose a terminal viewer program for
-.IR \%ps\~mode .
-.
-This can be a file name or a program to be searched in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- text
-Equivalent to
-.Opt_long_arg mode text .
-.
-.
-.Opt_def -- tty
-Equivalent to
-.Opt_long_arg mode tty .
-.
-.
-.Opt_def -- tty\-viewer prog
-Choose a text pager for mode
-.IR tty .
-The standard pager is
-.BR less (1).
-This option is eqivalent to
-.I man
-option
-.Opt_long_arg pager prog .
-The option argument can be a file name or a program to be searched in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- tty\-viewer\-tty prog
-This is equivalent to
-.Opt_long tty\-viewer
-because the programs for
-.I tty
-mode run on a terminal anyway.
-.
-.
-.Opt_def -- www
-Equivalent to
-.Opt_long_arg mode html .
-.
-.
-.Opt_def -- www\-viewer prog
-Equivalent to
-.Opt_long html\-viewer .
-.
-.
-.Opt_def -- www\-viewer\-tty prog
-Equivalent to
-.Opt_long html\-viewer\-tty .
-.
-.
-.Opt_def -- X -- x
-Equivalent to
-.Opt_long_arg mode x .
-.
-.
-.Opt_def -- X\-viewer -- x\-viewer prog
-Choose an \%\f[CR]X\~Window\f[] viewer program for
-.IR \%x\~mode .
-Suitable viewer programs are
-.BR \%gxditview (@MAN1EXT@)
-which is the default and
-.BR \%xditview (1).
-The argument can be any executable file or a program in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.Opt_def -- X\-viewer\-tty -- x\-viewer\-tty prog
-Choose a terminal viewer program for
-.IR \%x\~mode .
-The argument can be any executable file or a program in
-.Env_var $PATH ;
-arguments can be provided additionally.
-.
-.
-.TP
-.Opt_--
-Signals the end of option processing; all remaining arguments are
-interpreted as
-.I \%filespec
-parameters.
-.
-.
-.P
-Besides these,
-.B \%groffer
-accepts all short options that are valid for the
-.BR \%groff (@MAN1EXT@)
-program.
-.
-All
-.RB \%non- groffer
-options are sent unmodified via
-.B \%grog
-to
-.BR \%groff .
-.
-So postprocessors, macro packages, compatibility with
-.I classical
-.IR \%troff ,
-and much more can be manually specified.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "Options for Development"
-.\" --------------------------------------------------------------------
-.
-.Opt_def -- debug
-Enable five debugging informations.
-.
-The temporary files are kept and not deleted, the name of the
-temporary directory and the shell name for
-.File_name groffer2.sh
-are printed, the parameters are printed at several steps of
-development, and a function stack is output with function
-\f[CR]error_user()\f[] as well.
-.
-Neither the function call stack that is printed at each opening and
-closing of a function call nor the landmark information that is
-printed to determine how far the program is running are used.
-.
-This seems to be the most useful among all debugging options.
-.
-.
-.Opt_def -- debug\-all
-Enable all seven debugging informations including the function call
-stack and the landmark information.
-.
-.
-.Opt_def -- debug\-keep
-Enable two debugging information, the printing of the name of the
-temporary directory and the keeping of the temporary files.
-.
-.
-.Opt_def -- debug\-lm
-Enable one debugging information, the landmark information.
-.
-.
-.Opt_def -- debug\-params
-Enable one debugging information, the parameters at several steps.
-.
-.
-.Opt_def -- debug\-shell
-Enable one debugging information, the shell name for
-.File_name groffer2.sh .
-.
-.
-.Opt_def -- debug\-stacks
-Enable one debugging information, the function call stack.
-.
-.
-.Opt_def -- debug\-tmpdir
-Enable one debugging information, the name of the temporary directory.
-.
-.
-.Opt_def -- debug\-user
-Enable one debugging information, the function stack with
-\f[CR]error_user()\f[].
-.
-.
-.Opt_def -- do-nothing
-This is like
-.Opt_long version ,
-but without the output; no viewer is started.
-.
-This makes only sense in development.
-.
-.
-.Opt_def -- print=text
-Just print the argument to standard error.
-.
-This is good for parameter check.
-.
-.
-.Opt_def -- shell "shell_program"
-Specify the shell under which the
-.File_name \%groffer2.sh
-script should be run.
-.
-This option overwrites the automatic shell determination of the
-program.
-.
-If the argument
-.I shell_program
-is empty a former shell option and the automatic shell determination
-is cancelled and the default shell is restored.
-.
-Some shells run considerably faster than the standard shell.
-.
-.
-.Opt_def - Q -- source
-Output the roff source code of the input files without further
-processing.
-.
-This is the equivalent
-.Opt_long_arg mode source .
-.
-.
-.Opt_def - V
-This is an advanced option for debugging only.
-.
-Instead of displaying the formatted input, a lot of
-.I \%groffer
-specific information is printed to standard output:
-.
-.RS
-.Topic
-the output file name in the temporary directory,
-.
-.Topic
-the display mode of the actual
-.B \%groffer
-run,
-.
-.Topic
-the display program for viewing the output with its arguments,
-.
-.Topic
-the active parameters from the config files, the arguments in
-.Env_var $GROFFER_OPT ,
-and the arguments of the command line,
-.
-.Topic
-the pipeline that would be run by the
-.B \%groff
-program, but without executing it.
-.RE
-.
-.
-.P
-Other useful debugging options are the
-.B \%groff
-option
-.Opt_short Z
-and
-.Opt_long_arg mode groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "Options related to groff"
-.\" --------------------------------------------------------------------
-.
-All short options of
-.B \%groffer
-are compatible with the short options of
-.BR \%groff (@MAN1EXT@).
-.
-The following of
-.B \%groff
-options have either an additional special meaning within
-.B \%groffer
-or make sense for normal usage.
-.
-.
-.P
-Because of the special outputting behavior of the
-.B \%groff
-option
-.Opt_short Z
-.B \%groffer
-was designed to be switched into
-.I \%groff\~mode ;
-the
-.I \%groffer
-viewing features are disabled there.
-.
-The other
-.B \%groff
-options do not switch the mode, but allow to customize the formatting
-process.
-.
-.
-.Opt_def - a
-This generates an ascii approximation of output in the
-.IR \%text\~modes .
-.
-That could be important when the text pager has problems with control
-sequences in
-.IR "tty mode" .
-.
-.
-.Opt_def - m file
-Add
-.I \%file
-as a
-.I \%groff
-macro file.
-.
-This is useful in case it cannot be recognized automatically.
-.
-.
-.Opt_def - P opt_or_arg
-Send the argument
-.I \%opt_or_arg
-as an option or option argument to the actual
-.B \%groff
-postprocessor.
-.
-.
-.Opt_def - T -- device devname
-.
-This option determines
-.BR \%groff 's
-output device.
-.
-The most important devices are the text output devices for referring
-to the different character sets, such as
-.BR \%ascii ,
-.BR \%utf8 ,
-.BR \%latin1 ,
-and others.
-.
-Each of these arguments switches
-.B \%groffer
-into a
-.I \%text\~mode
-using this device, to
-.I \%mode\~tty
-if the actual mode is not a
-.IR \%text\~mode .
-.
-The following
-.I \%devname
-arguments are mapped to the corresponding
-.B \%groffer
-.Opt_long_arg mode \fIdevname\fR
-option:
-.BR \%dvi ,
-.BR \%html ,
-and
-.BR \%ps .
-All
-.B \%X*
-arguments are mapped to
-.IR \%mode\~x .
-Each other
-.I \%devname
-argument switches to
-.I \%mode\~groff
-using this device.
-.
-.
-.Opt_def - X
-is equivalent to
-.BR "groff \-X" .
-It displays the
-.I groff intermediate output
-with
-.BR gxditview .
-As the quality is relatively bad this option is deprecated; use
-.Opt_long X
-instead because the
-.I \%x\~mode
-uses an
-.IR X *
-device for a better display.
-.
-.
-.Opt_def - Z -- intermediate-output -- ditroff
-Switch into
-.I \%groff\~mode
-and format the input with the
-.I \%groff intermediate output
-without postprocessing; see
-.BR \%groff_out (@MAN5EXT@).
-This is equivalent to option
-.Opt_long ditroff
-of
-.IR \%man ,
-which can be used as well.
-.
-.
-.P
-All other
-.B \%groff
-options are supported by
-.BR \%groffer ,
-but they are just transparently transferred to
-.B \%groff
-without any intervention.
-.
-The options that are not explicitly handled by
-.B \%groffer
-are transparently passed to
-.BR \%groff .
-.
-Therefore these transparent options are not documented here, but in
-.BR \%groff (@MAN1EXT@).
-Due to the automatism in
-.BR \%groffer ,
-none of these
-.B \%groff
-options should be needed, except for advanced usage.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Options for man\~pages"
-.\" --------------------------------------------------------------------
-.
-.Opt_def -- apropos
-Start the
-.BR \%apropos (1)
-command or facility of
-.BR \%man (1)
-for searching the
-.I \%filespec
-arguments within all
-.I \%man\~page
-descriptions.
-.
-Each
-.I \%filespec
-argument is taken for search as it is; section specific parts are not
-handled, such that
-.B 7 groff
-searches for the two arguments
-.B 7
-and
-.B groff
-with a large result; for the
-.I \%filespec
-.B groff.7
-nothing will be found.
-.
-The display differs from the
-.B \%apropos
-program by the following concepts:
-.RS
-.Topic
-construct a
-.I \%groff
-frame to the output of
-.BR \%apropos ,
-.Topic
-each
-.I \%filespec
-argument is searched on its own.
-.Topic
-the restriction by
-.Opt_long sections
-is handled as well,
-.Topic
-wildcard characters are allowed and handled without a further option.
-.RE
-.
-.
-.Opt_def -- apropos\-data
-Show only the
-.B \%apropos
-descriptions for data documents, these are the
-.BR \%man (7)
-sections 4, 5, and 7.
-.
-Direct section declarations are ignored, wildcards are accepted.
-.
-.
-.Opt_def -- apropos\-devel
-Show only the
-.B \%apropos
-descriptions for development documents, these are the
-.BR man (7)
-sections 2, 3, and 9.
-.
-Direct section declarations are ignored, wildcards are accepted.
-.
-.
-.Opt_def -- apropos\-progs
-Show only the
-.B \%apropos
-descriptions for documents on programs, these are the
-.BR \%man (7)
-sections 1, 6, and 8.
-.
-Direct section declarations are ignored, wildcards are accepted.
-.
-.
-.Opt_def -- whatis
-For each
-.I \%filespec
-argument search all
-.I \%man\~pages
-and display their description \[em] or say that it is not a
-.IR \%man\~page .
-This differs from
-.IR man 's
-.B whatis
-output by the following concepts
-.RS
-.Topic
-each retrieved file name is added,
-.Topic
-local files are handled as well,
-.Topic
-the display is framed by a
-.I groff
-output format,
-.Topic
-wildcard characters are allowed without a further option.
-.RE
-.
-.
-.P
-The following two options were added to
-.B \%groffer
-for choosing whether the file name arguments are interpreted as names
-for local files or as a search pattern for
-.IR \%man\~pages .
-.
-The default is looking up for local files.
-.
-.
-.Opt_def -- man
-Check the non-option command line arguments
-.nh
-.RI ( filespecs )
-.hy
-first on being
-.IR \%man\~pages ,
-then whether they represent an existing file.
-.
-By default, a
-.I \%filespec
-is first tested whether it is an existing file.
-.
-.
-.Opt_def -- no-man -- local-file
-Do not check for
-.IR \%man\~pages .
-.
-.Opt_long local-file
-is the corresponding
-.B man
-option.
-.
-.
-.Opt_def -- no-special
-Disable former calls of
-.Opt_long all ,
-.Opt_long apropos* ,
-and
-.Opt_long whatis .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Long options taken over from GNU man"
-.\" --------------------------------------------------------------------
-.
-The long options of
-.B \%groffer
-were synchronized with the long options of \f[CR]GNU\f[]
-.BR man .
-.
-All long options of \f[CR]GNU\f[]
-.B man
-are recognized, but not all of these options are important to
-.BR \%groffer ,
-so most of them are just ignored.
-.
-.
-.P
-In the following, the
-.B man
-options that have a special meaning for
-.B \%groffer
-are documented.
-.
-.
-.P
-The full set of long and short options of the \f[CR]GNU\f[]
-.B man
-program can be passed via the environment variable
-.Env_var $MANOPT ;
-see
-.BR \%man (1)
-if your system has \f[CR]GNU\f[]
-.B man
-installed.
-.
-.
-.Opt_def -- all
-In searching
-.IR \%man\~pages ,
-retrieve all suitable documents instead of only one.
-.
-.
-.Opt_def - 7 -- ascii
-In
-.IR \%text\~modes ,
-display ASCII translation of special characters for critical environment.
-.
-This is equivalent to
-.BR "groff -mtty_char" ;
-see
-.BR groff_tmac (@MAN5EXT@).
-.
-.
-.Opt_def -- ditroff
-Eqivalent to
-.B \%groffer
-.Opt_short Z .
-.
-.
-.Opt_def -- extension suffix
-Restrict
-.I \%man\~page
-search to file names that have
-.I \%suffix
-appended to their section element.
-.
-For example, in the file name
-.I \%/usr/share/man/man3/terminfo.3ncurses.gz
-the
-.I \%man\~page
-extension is
-.IR \%ncurses .
-.
-.
-.Opt_def -- locale language
-.
-Set the language for
-.IR \%man\~pages .
-.
-This has the same effect, but overwrites
-.Env_var $LANG
-.
-.
-.Opt_def -- location
-Print the location of the retrieved files to standard error.
-.
-.
-.Opt_def -- no-location
-Do not display the location of retrieved files; this resets a former
-call to
-.Opt_long location .
-.
-This was added by
-.BR \%groffer .
-.
-.
-.Opt_def -- manpath "'dir1:dir2:\*[Ellipsis]'"
-Use the specified search path for retrieving
-.I \%man\~pages
-instead of the program defaults.
-.
-If the argument is set to the empty string "" the search for
-.I \%man\~page
-is disabled.
-.
-.
-.Opt_def -- pager
-Set the pager program in
-.IR \%tty\~mode ;
-default is
-.BR \%less .
-This is equivalent to
-.Opt_long tty\-viewer .
-.
-.
-.Opt_def -- sections "'sec1:sec2:\*[Ellipsis]'"
-Restrict searching for
-.I \%man\~pages
-to the given
-.IR sections ,
-a colon-separated list.
-.
-.
-.Opt_def -- systems "'sys1,sys2,\*[Ellipsis]'"
-Search for
-.I \%man\~pages
-for the given operating systems; the argument
-.I \%systems
-is a comma-separated list.
-.
-.
-.Opt_def -- where
-Eqivalent to
-.Opt_long location .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "X\~\%Window\~\%Toolkit Options"
-.\" --------------------------------------------------------------------
-.
-The following long options were adapted from the corresponding
-\%\f[CR]X\~\Window\~Toolkit\f[] options.
-.
-.B \%groffer
-will pass them to the actual viewer program if it is an
-\%\f[CR]X\~Window\f[] program.
-.
-Otherwise these options are ignored.
-.
-.
-.P
-Unfortunately these options use the old style of a single minus for
-long options.
-.
-For
-.B \%groffer
-that was changed to the standard with using a double minus for long
-options, for example,
-.B \%groffer
-uses the option
-.Opt_long font
-for the \%\f[CR]X\~Window\f[] option
-.Opt_short font .
-.
-.
-.P
-See
-.BR \%X (1),
-.BR \%X (7),
-and the documentation on the \%\f[CR]X\~Window\~Toolkit\f[] options
-for more details on these options and their arguments.
-.
-.
-.Opt_def -- background color
-Set the background color of the viewer window.
-.
-.
-.Opt_def -- bd pixels
-Specifies the color of the border surrounding the viewer window.
-.
-.
-.Opt_def -- bg color
-This is equivalent to
-.Opt_long background .
-.
-.
-.Opt_def -- bw pixels
-Specifies the width in pixels of the border surrounding the viewer
-window.
-.
-.
-.Opt_def -- display X-display
-Set the \%\f[CR]X\~Window\f[] display on which the viewer program
-shall be started, see the \%\f[CR]X\~Window\f[] documentation for the
-syntax of the argument.
-.
-.
-.Opt_def -- foreground color
-Set the foreground color of the viewer window.
-.
-.
-.Opt_def -- fg color
-This is equivalent to
-.Opt_short foreground .
-.
-.
-.Opt_def -- font font_name
-Set the font used by the viewer window.
-.
-The argument is an \%\f[CR]X\~Window\f[] font name.
-.
-.
-.Opt_def -- ft font_name
-This is equivalent to
-.Opt_long ft .
-.
-.
-.Opt_def -- geometry size_pos
-Set the geometry of the display window, that means its size and its
-starting position.
-.
-See
-.BR \%X (7)
-for the syntax of the argument.
-.
-.
-.Opt_def -- resolution value
-Set \%\f[CR]X\~Window\f[] resolution in dpi (dots per inch) in some
-viewer programs.
-.
-The only supported dpi values are
-.B 75
-and
-.BR 100 .
-.
-Actually, the default resolution for
-.B \%groffer
-is set to
-.BR 75\~dpi .
-The resolution also sets the default device in
-.IR "mode x" .
-.
-.
-.Opt_def -- rv
-Reverse foreground and background color of the viewer window.
-.
-.
-.Opt_def -- title "'some text'"
-Set the title for the viewer window.
-.
-.
-.Opt_def -- xrm "'resource'"
-Set \f[CR]\%X\~Window\f[] resource.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Filespec Arguments"
-.\" --------------------------------------------------------------------
-.
-A
-.I \%filespec
-parameter is an argument that is not an option or option argument.
-.
-It means an input source.
-.
-In
-.BR \%groffer ,
-.I \%filespec
-parameters are a file name or a template for searching
-.IR \%man\~pages .
-.
-These input sources are collected and composed into a single output
-file such as
-.B \%groff
-does.
-.
-.
-.P
-The strange \%\f[CR]POSIX\f[] behavior to regard all arguments behind
-the first non-option argument as
-.I \%filespec
-arguments is ignored.
-.
-The \f[CR]GNU\f[] behavior to recognize options even when mixed with
-.I \%filespec
-arguments is used througout.
-.
-But, as usual, the double minus argument
-.Opt_long
-ends the option handling and interprets all following arguments as
-.I \%filespec
-arguments; so the \%\f[CR]POSIX\f[] behavior can be easily adopted.
-.
-.
-.P
-For the following, it is necessary to know that on each system the
-.I \%man\~pages
-are sorted according to their content into several sections.
-.
-The
-.I classical man sections
-have a single-character name, either a digit from
-.B 1
-to
-.B 9
-or one of the characters
-.B n
-or
-.BR o .
-.
-In the following, a stand-alone character
-.I s
-stands for a
-.IR "classical man section" .
-The internal precedence of
-.B \%man
-for searching
-.I \%man\~pages
-with the same name within several sections goes according to the
-classical single-character sequence.
-.
-On some systems, this single character can be extended by a following
-string.
-.
-But the special
-.B \%groffer
-.I \%man\~page
-facility is based on the classical single character sections.
-.
-.
-.P
-Each
-.I \%filespec
-parameter can have one of the following forms in decreasing sequence.
-.
-.
-.Topic
-No
-.I \%filespec
-parameters means that
-.B \%groffer
-waits for standard input.
-.
-The minus option
-.Opt_short ""
-stands for standard input, too; it can occur several times.
-.
-.
-.Topic
-Next a
-.I \%filespec
-is tested whether it is the path name of an existing file.
-.
-Otherwise it is assumed to be a searching pattern for a
-.IR \%man\~page .
-.
-.
-.Topic
-.BI \%man: name ( section )
-and
-.IB \%name ( section )
-search the \%man\~page
-.I \%name
-in \%man\~section\~\c
-.IR \%section ,
-where
-.I \%section
-can be any string, but it must exist in the
-.I \%man
-system.
-.
-.
-.Topic
-Next some patterns based on the
-.I classical man sections
-are checked.
-.
-.BI \%man: name . s
-and
-.IB \%name . s
-search for a \%man\~page
-.I \%name
-in \%man\~section
-.I s
-if
-.I s
-is a
-.I classical man section
-mentioned above.
-.
-Otherwise a
-.I \%man\~page
-named
-.IR \%name.s
-is searched in the lowest
-.B man\~section .
-.
-.
-.Topic
-Now
-.BI \%man: name
-searches for a
-.I \%man\~page
-in the lowest
-.I \%man\~section
-that has a document called
-.IR \%name .
-.
-.
-.Topic
-The pattern
-.I \%s\~name
-originates from a strange argument parsing of the
-.B man
-program.
-.
-If
-.I s
-is a
-.I classical man section
-interpret it as a search for a
-.I \%man\~page
-called
-.I \%name
-in man\~section
-.IR s ,
-otherwise interpret both
-.I s
-and
-.I \%name
-as two independent
-.I \%filespec
-arguments.
-.
-.
-.Topic
-We are left with the argument
-.I \%name
-which is not an existing file.
-.
-So this searches for the
-.I \%man\~page
-called
-.I \%name
-in the lowest
-.I \%man\~section
-that has a document for this name.
-.
-.
-.P
-Wildcards in
-.I \%filespec
-arguments are only accepted for
-.Opt_long apropos*
-and
-.Opt_long whatis ;
-for normal display, they are interpreted as characters.
-.
-.
-.P
-Several file name arguments can be supplied.
-.
-They are mixed by
-.B \%groff
-into a single document.
-.
-Note that the set of option arguments must fit to all of these file
-arguments.
-.
-So they should have at least the same style of the
-.I \%groff
-language.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OUTPUT MODES"
-.\" --------------------------------------------------------------------
-.
-By default, the
-.B \%groffer
-program collects all input into a single file, formats it with the
-.B \%groff
-program for a certain device, and then chooses a suitable viewer
-program.
-.
-The device and viewer process in
-.B \%groffer
-is called a
-.IR \%mode .
-.
-The mode and viewer of a running
-.B \%groffer
-program is selected automatically, but the user can also choose it
-with options.
-.
-.
-The modes are selected by option the arguments of
-.Opt_long_arg mode \fIanymode .
-Additionally, each of this argument can be specified as an option of
-its own, such as
-.Opt_long \fIanymode .
-Most of these modes have a viewer program, which can be chosen by an
-option that is constructed like
-.Opt_long \fIanymode\fR\-viewer .
-.
-.
-.P
-Several different modes are offered, graphical modes for
-\f[CR]\%X\~Window\f[],
-.IR \%text\~modes ,
-and some direct
-.I \%groff\~modes
-for debugging and development.
-.
-.
-.P
-By default,
-.B \%groffer
-first tries whether
-.I \%x\~mode
-is possible, then
-.IR \%ps\~mode ,
-and finally
-.IR \%tty\~mode .
-.
-This mode testing sequence for
-.I \%auto\~mode
-can be changed by specifying a comma separated list of modes with the
-option
-.Opt_long default\-modes.
-.
-.
-.P
-The searching for
-.I \%man\~pages
-and the decompression of the input are active in every mode.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Graphical Display Modes"
-.\" --------------------------------------------------------------------
-.
-The graphical display modes work mostly in the \%\f[CR]X\~Window\f[]
-environment (or similar implementations within other windowing
-environments).
-.
-The environment variable
-.Env_var $DISPLAY
-and the option
-.Opt_long display
-are used for specifying the \%\f[CR]X\~Window\f[] display to be used.
-.
-If this environment variable is empty
-.B \%groffer
-assumes that no \%\f[CR]X\~Window\f[] is running and changes to a
-.IR \%text\~mode .
-.
-You can change this automatic behavior by the option
-.Opt_long default\-modes .
-.
-.
-.P
-Known viewers for the graphical display modes and their standard
-\%\f[CR]X\~Window\f[] viewer progams are
-.
-.Topic
-\%\f[CR]X\~Window\f[]
-.I roff
-viewers such as
-.BR \%gxditview (@MAN1EXT@)
-or
-.BR \%xditview (1)
-(in
-.IR \%x\~mode ),
-.
-.Topic
-in a Postscript viewer
-.nh
-.RI ( \%ps\~mode ),
-.hy
-.
-.Topic
-in a dvi viewer program
-.nh
-.RI ( \%dvi\~mode ),
-.hy
-.
-.Topic
-in a PDF viewer
-.nh
-.RI ( \%pdf\~mode ),
-.hy
-.
-.Topic
-in a web browser
-.nh
-.RI ( html
-or
-.IR \%www\~mode ).
-.hy
-.RE
-.
-.
-.P
-The
-.I \%pdf\~mode
-has a major advantage \[em] it is the only graphical diplay mode that
-allows to search for text within the viewer; this can be a really
-important feature.
-.
-Unfortunately, it takes some time to transform the input into the PDF
-format, so it was not chosen as the major mode.
-.
-.
-.P
-These graphical viewers can be customized by options of the
-\%\f[CR]X\~Window\~Toolkit\f[].
-.
-But the
-.B \%groffer
-options use a leading double minus instead of the single minus used by
-the \%\f[CR]X\~Window\~Toolkit\f[].
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Text modes"
-.\" --------------------------------------------------------------------
-.
-There are two modes for text output,
-.I \%mode\~text
-for plain output without a pager and
-.I \%mode\~tty
-for a text output on a text terminal using some pager program.
-.
-.
-.P
-If the variable
-.Env_var \%$DISPLAY
-is not set or empty,
-.B \%groffer
-assumes that it should use
-.IR \%tty\~\%mode .
-.
-.
-.P
-In the actual implementation, the
-.I groff
-output device
-.I \%latin1
-is chosen for
-.IR \%text\~modes .
-.
-This can be changed by specifying option
-.Opt_short T
-or
-.Opt_long device .
-.
-.
-.P
-The pager to be used can be specified by one of the options
-.Opt_long pager
-and
-.Opt_long tty\-viewer ,
-or by the environment variable
-.Env_var $PAGER .
-If all of this is not used the
-.BR \%less (1)
-program with the option
-.Opt_short r
-for correctly displaying control sequences is used as the default
-pager.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Modes for Debugging and Development"
-.\" --------------------------------------------------------------------
-.
-These modes use the
-.I \%groffer
-file determination and decompression.
-.
-This is combined into a single input file that is fed directly into
-.B \%groff
-with different strategy without the
-.I \%groffer
-viewing facilities.
-.
-These modes are regarded as advanced, they are useful for debugging
-and development purposes.
-.
-.
-.P
-The
-.I \%source\~mode
-with option
-.Opt_short Q
-and
-.Opt_long source
-just displays the decompressed input.
-.
-.
-.P
-The
-.I \%groff\~mode
-passes the input to
-.B \%groff
-using only some suitable options provided to
-.BR \%groffer .
-.
-This enables the user to save the generated output into a file or pipe
-it into another program.
-.
-.
-.P
-In
-.IR \%groff\~\%mode ,
-the option
-.Opt_short Z
-disables post-processing, thus producing the
-.nh
-.I groff intermediate
-.IR output .
-.hy
-.
-In this mode, the input is formatted, but not postprocessed; see
-.BR \%groff_out (@MAN5EXT@)
-for details.
-.
-.
-.P
-All
-.B \%groff
-short options are supported by
-.BR \%groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MAN\~PAGE\~SEARCHING"
-.\" --------------------------------------------------------------------
-.
-The default behavior of
-.B \%groffer
-is to first test whether a file parameter represents a local file; if
-it is not an existing file name, it is assumed to represent a name of
-a
-.IR \%man\~page .
-.
-This behavior can be modified by the following options.
-.
-.
-.TP
-.Opt_long man
-forces to interpret all file parameters as
-.I \%filespecs
-for searching
-.IR \%man\~pages .
-.
-.TP
-.Opt_long no\-man
-.TP+
-.Opt_long local\-file
-disable the
-.I man
-searching; so only local files are displayed.
-.
-.
-.P
-If neither a local file nor a
-.I \%man\~page
-was retrieved for some file parameter a warning is issued on standard
-error, but processing is continued.
-.
-.
-.P
-The
-.B \%groffer
-program provides a search facility for
-.IR \%man\~pages .
-.
-All long options, all environment variables, and most of the
-functionality of the \f[CR]GNU\f[]
-.BR \%man (1)
-program were implemented.
-.
-This inludes the extended file names of
-.IR \%man\~pages ,
-for example, the
-.I \%man\~page
-of
-.B \%groff
-in man\~section 7 may be stored under
-.File_name /usr/share/man/man7/groff.7.gz ,
-where
-.File_name /usr/share/man/
-is part of the man\~path, the subdirectory
-.I \%man7
-and the file extension
-.I .7
-refer to the man\~section 7;
-.I \%.gz
-shows the compression of the file.
-.
-.
-.P
-The
-.I cat\~pages
-(preformatted
-.IR \%man\~pages )
-are intentionally excluded from the search because
-.B \%groffer
-is a
-.I roff
-program that wants to format by its own.
-.
-With the excellent performance of the actual computers, the
-preformatted
-.I \%man\~pages
-aren't necessary any longer.
-.
-.
-.P
-The algorithm for retrieving
-\I \%man\~pages
-uses five search methods.
-.
-They are successively tried until a method works.
-.
-.
-.Topic
-The search path can be manually specified by using the option
-.Opt_long manpath .
-An empty argument disables the
-.I \%man\~page
-searching.
-.
-This overwrites the other methods.
-.
-.
-.Topic
-If this is not available the environment variable
-.Env_var $MANPATH
-is searched.
-.
-.
-.Topic
-If this is empty, the program tries to read it from the environment
-variable
-.Env_var $MANOPT .
-.
-.
-.Topic
-If this does not work a reasonable default path from
-.Env_var $PATH
-is searched for
-.IR \%man\~pages .
-.
-.
-.Topic
-If this does not work, the
-.BR \%manpath (1)
-program for determining a path of
-.I man
-directories is tried.
-.
-.
-.P
-After this, the path elements for the language (locale) and operating
-system specific
-.I \%man\~pages
-are added to the
-.IR man\~path ;
-their sequence is determined automatically.
-.
-For example, both
-.File_name /usr/share/man/linux/fr
-and
-.File_name /usr/share/man/fr/linux
-for french linux
-.I \%man\~pages
-are found.
-.
-The language and operating system names are determined from both
-environment variables and command line options.
-.
-.
-.P
-The locale (language) is determined like in \f[CR]GNU\f[]
-.BR man ,
-that is from highest to lowest precedence:
-.Topic
-.Opt_long locale
-.
-.Topic
-.Env_var $GROFFER_OPT
-.
-.Topic
-.Env_var $MANOPT
-.
-.Topic
-.Env_var $LCALL
-.
-.Topic
-.Env_var $LC_MESSAGES
-.
-.Topic
-.Env_var $LANG .
-.
-.
-.P
-The language locale is usually specified in the
-\%\f[CR]POSIX\~1003.1\f[] based format:
-.P
-.nh
-\f[I]<language>\f[][\f[CB]_\f[]\f[I]<territory>\f[][\f[CB].\f[]\
-\f[I]<character-set>\f[][\f[CB],\f[]\f[I]<version>\f[]]]],
-.hy
-.P
-but the two-letter code in
-.nh
-.I <language>
-.hy
-is sufficient for most purposes.
-.
-.
-.P
-If no
-.I \%man\~pages
-for a complicated locale are found the country part consisting of the
-first two characters (without the `\f[CB]_\f[]', `\f[CB].\f[]', and
-`\f[CB],\f[]' parts) of the locale is searched as well.
-.
-.
-.P
-If still not found the corresponding
-.I \%man\~page
-in the default language is used instead.
-.
-As usual, this default can be specified by one of \f[CR]C\f[] or
-\f[CR]\%POSIX\f[].
-.
-The
-.I \%man\~pages
-in the default language are usually in English.
-.
-.
-.P
-Several operating systems can be given by appending their names,
-separated by a comma.
-.
-This is then specified by the environment variable
-.Env_var $SYSTEM
-or by the command line option
-.Opt_long systems .
-The precedence is similar to the locale case above from highest to
-lowest precedence:
-.
-Topic
-.Opt_long systems
-.
-.Topic
-.Env_var $GROFFER_OPT
-.
-.Topic
-.Env_var $MANOPT
-.
-.Topic
-.Env_var $SYSTEM .
-.
-.
-.P
-When searching for
-.I \%man\~pages
-this
-.I man\~path
-with the additional language and system specific directories is used.
-.
-.
-.P
-The search can further be restricted by limiting it to certain
-sections.
-.
-A single section can be specified within each
-.I \%filespec
-argument, several sections as a colon-separated list in command line
-option
-.Opt_long sections
-or environment variable
-.Env_var $MANSECT .
-.
-When no section was specified a set of standard sections is searched
-until a suitable
-.I \%man\~page
-was found.
-.
-.
-.P
-Finally, the search can be restricted to a so-called
-.IR extension .
-This is a postfix that acts like a subsection.
-.
-It can be specified by
-.Opt_long extension
-or environment variable
-.Env_var $EXTENSION .
-.
-.
-.P
-For further details on
-.I \%man\~page
-searching, see
-.BR \%man (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH DECOMPRESSION
-.\" --------------------------------------------------------------------
-.
-The program has a decompression facility.
-.
-If standard input or a file that was retrieved from the command line
-parameters is compressed with a format that is supported by either
-.BR \%gzip (1)
-or
-.BR \%bzip2 (1)
-it is decompressed on-the-fly.
-.
-This includes the \f[CR]GNU\f[]
-.BR \%.gz ,
-.BR \%.bz2 ,
-and the traditional
-.B \%.Z
-compression.
-.
-The program displays the concatenation of all decompressed input in
-the sequence that was specified on the command line.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ENVIRONMENT"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program supports many system variables, most of them by courtesy of
-other programs.
-.
-All environment variables of
-.BR \%groff (@MAN1EXT@)
-and \f[CR]GNU\f[]
-.BR \%man (1)
-and some standard system variables are honored.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Native groffer Variables"
-.\" --------------------------------------------------------------------
-.
-.TP
-.Env_var $GROFFER_OPT
-Store options for a run of
-.BR \%groffer .
-.
-The options specified in this variable are overridden by the options
-given on the command line.
-.
-The content of this variable is run through the shell builtin `eval';
-so arguments containing white-space or special shell characters should
-be quoted.
-.
-Do not forget to export this variable, otherwise it does not exist
-during the run of
-.BR groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "System Variables"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program is a shell script that is run through
-.File_name /bin/sh ,
-which can be internally linked to programs like
-.BR \%bash (1).
-The corresponding system environment is automatically effective.
-.
-The following variables have a special meaning for
-.BR \%groffer .
-.
-.
-.TP
-.Env_var $DISPLAY
-If this variable is set this indicates that the \%\f[CR]X\~Window\f[]
-system is running.
-.
-Testing this variable decides on whether graphical or text output is
-generated.
-.
-This variable should not be changed by the user carelessly, but it can
-be used to start the graphical
-.B \%groffer
-on a remote \%\f[CR]X\~Window\f[] terminal.
-.
-For example, depending on your system,
-.B \%groffer
-can be started on the second monitor by the command
-.Shell_cmd DISPLAY=:0.1\~groffer\~ what.ever &
-.
-.
-.TP
-.Env_var $LC_ALL
-.TP+
-.Env_var $LC_MESSAGES
-.TP+
-.Env_var $LANG
-If one of these variables is set (in the above sequence), its content
-is interpreted as the locale, the language to be used, especially when
-retrieving
-\IR \%man\~pages .
-.
-A locale name is typically of the form
-.nh
-.IR language [\c
-.B _\c
-.IR territory [\c
-.B .\c
-.IR codeset [\c
-.B @\c
-.IR modifier ]]],
-.hy
-where
-.I \%language
-is an ISO 639 language code,
-.I \%territory
-is an ISO 3166 country code, and
-.I \%codeset
-is a character set or encoding identifier like ISO-8859-1 or UTF-8;
-see
-.BR \%setlocale (3).
-.
-The locale values \f[CR]C\f[] and \%\f[CR]POSIX\f[]
-stand for the default, i.e. the
-.I \%man\~page
-directories without a language prefix.
-.
-This is the same behavior as when all 3\~variables are unset.
-.
-.
-.TP
-.Env_var $PAGER
-This variable can be used to set the pager for the tty output.
-.
-For example, to disable the use of a pager completely set this
-variable to the
-.BR \%cat (1)
-program
-.Shell_cmd PAGER=cat\~groffer\~ anything
-.
-.
-.TP
-.Env_var $PATH
-All programs within the
-.B \%groffer
-shell script are called without a fixed path.
-.
-Thus this environment variable determines the set of programs used
-within the run of
-.BR \%groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Groff Variables"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program internally calls
-.BR \%groff ,
-so all environment variables documented in
-.BR \%groff (@MAN1EXT@)
-are internally used within
-.B \%groffer
-as well.
-.
-The following variable has a direct meaning for the
-.B \%groffer
-program.
-.
-.TP
-.Env_var $GROFF_TMPDIR
-If the value of this variable is an existing, writable directory,
-.B \%groffer
-uses it for storing its temporary files, just as
-.B groff
-does.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Man Variables"
-.\" --------------------------------------------------------------------
-.
-Parts of the functionality of the
-.B man
-program were implemented in
-.BR \%groffer ;
-support for all environment variables documented in
-.BR \%man (1)
-was added to
-.BR \%groffer ,
-but the meaning was slightly modified due to the different approach in
-.BR \%groffer ;
-but the user interface is the same.
-.
-The
-.B man
-environment variables can be overwritten by options provided with
-.Env_var $MANOPT ,
-which in turn is overwritten by the command line.
-.
-.
-.TP
-.Env_var $EXTENSION
-Restrict the search for
-.I \%man\~pages
-to files having this extension.
-.
-This is overridden by option
-.Opt_long extension ;
-see there for details.
-.
-.
-.TP
-.Env_var $MANOPT
-This variable contains options as a preset for
-.BR \%man (1).
-As not all of these are relevant for
-.B \%groffer
-only the essential parts of its value are extracted.
-.
-The options specified in this variable overwrite the values of the
-other environment variables that are specific to
-.IR man .
-.
-All options specified in this variable are overridden by the options
-given on the command line.
-.
-.
-.TP
-.Env_var $MANPATH
-If set, this variable contains the directories in which the
-.I \%man\~page
-trees are stored.
-.
-This is overridden by option
-.Opt_long manpath .
-.
-.
-.TP
-.Env_var $MANSECT
-If this is a colon separated list of section names, the search for
-.I \%man\~pages
-is restricted to those manual sections in that order.
-.
-This is overridden by option
-.Opt_long sections .
-.
-.
-.TP
-.Env_var $SYSTEM
-If this is set to a comma separated list of names these are interpreted
-as
-.I \%man\~page
-trees for different operating systems.
-.
-This variable can be overwritten by option
-.Opt_long systems ;
-see there for details.
-.
-.
-.P
-The environment variable
-.Env_var $MANROFFSEQ
-is ignored by
-.B \%groffer
-because the necessary preprocessors are determined automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "CONFIGURATION FILES"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program can be preconfigured by two configuration files.
-.
-.
-.TP
-.File_name /etc/groff/groffer.conf
-System-wide configuration file for
-.BR \%groffer .
-.
-.
-.TP
-.File_name $HOME/.groff/groffer.conf
-User-specific configuration file for
-.BR \%groffer ,
-where
-.Env_var $HOME
-denotes the user's home directory.
-.
-This file is called after the system-wide configuration file to enable
-overriding by the user.
-.
-.
-.P
-The precedence of option delivery is given in the following.
-.
-The configuration file in
-.File_name /etc
-has the lowest precedence; it is overwritten by the configuration file
-in the home directory; both configuration files are overwritten by the
-environment variable
-.Env_var $GROFFER_OPT ;
-everything is overwritten by the command line.
-.
-.
-.P
-In the configuration files, arbitrary spaces are allowed at the
-beginning of each line, they are just ignored.
-.
-Apart from that, the lines of the configuration lines either start
-with a minus character, all other lines are interpreted as shell
-commands.
-.
-.
-.P
-The lines with the beginning minus are interpreted as
-.B groffer
-options.
-.
-This easily allows to set general
-.B \%groffer
-options that should be used with any call of
-.BR \%groffer .
-.
-Each line can represent a single short option, a short option cluster,
-or a long option with two minus signs, eventually with an argument.
-.
-The argument can be appended either after a space character or an
-equal sign
-.RB ` = '.
-The argument can be surrounded by quotes, but this is not necessary.
-.
-The options from these lines are collected and prepended to the
-existing value of
-.Env_var $GROFFER_OPT
-at the end of each configuration file.
-.
-.
-.P
-After the transformation of the minus lines, the configuration files
-have been transferred into a shell script that is called within
-.B \%groffer
-using the `\c
-.CB \.\~\c
-.IR \%filename '
-shell syntax.
-.
-.
-.P
-It makes sense to use these configuration files for the following
-tasks:
-.
-.Topic
-Preset command line options, such as choosing a
-.I \%mode
-or a viewer.
-.
-These are written into lines starting with a single or double minus
-sign, followed by the option name.
-.
-.Topic
-Preset environment variables recognized by
-.BR \%groffer ;
-but do not forget to export them.
-.
-.Topic
-You can also write a shell function for calling, for example a viewer
-program for some
-.IR \%mode .
-Such a function can be fed into a corresponding
-.Opt_long \f[I]mode\f[]\-viewer
-option.
-.
-.Topic
-Enter
-.Opt_long shell
-to specify a shell for the run of
-.File_name groffer2.sh .
-Some shells run much faster than the standard shell.
-.
-.
-.P
-As an example, consider the following configuration file in
-.File_name ~/.groff/groffer.conf ,
-say.
-.
-.P
-.ft CR
-.nh
-.nf
-# groffer configuration file
-#
-# groffer options that are used in each call of groffer
-\-\-shell=ksh
-\-\-foreground=DarkBlue
-\-\-resolution=100
-\-\-x\-viewer='gxditview \-geometry 900x1200'
-#
-# some shell commands
-if test "$DISPLAY" = ""; then
- export DISPLAY='localhost:0.0'
-fi
-date >>~/mygroffer.log
-.fi
-.hy
-.ft
-.
-.
-.P
-The lines starting with
-.B #
-are command lines.
-.
-This configuration sets four
-.B \%groffer
-options (the lines starting with `\-') and runs two shell commands (the
-rest of the script).
-.
-This has the following effects:
-.
-.
-.Topic
-Use
-.B ksh
-as the shell to run the
-.B \%groffer
-script; if it works it should be faster than the usual
-.BR sh .
-.
-.
-.Topic
-Use a text color of
-.B \%DarkBlue
-in all viewers that support this, such as
-.BR \%gxditview .
-.
-.
-.Topic
-Use a resolution of
-.B 100\~dpi
-in all viewers that support this, such as
-.BR \%gxditview .
-.
-By this, the default device in
-.I x mode
-is set to
-.BR X100 .
-.
-.
-.Topic
-Force
-.BR \%gxditview (@MAN1EXT@)
-as the
-.I \%x-mode
-viewer using the geometry option for setting the width to
-.B 900\~dpi
-and the height to
-.BR 1200\~dpi .
-This geometry is suitable for a resolution of
-.BR 100\~dpi .
-.
-.
-.Topic
-If the environment variable
-.Env_var $DISPLAY
-is empty set it to
-.IR localhost:0.0 .
-.
-That allows to start
-.B \%groffer
-in the standard \%\f[CR]X\~Window\f[] display, even when the program
-is called from a text console.
-.
-.
-.Topic
-Just for fun, the date of each
-.B \%groffer
-start is written to the file
-.File_name mygroffer.log
-in the home directory.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-The usage of
-.B \%groffer
-is very easy.
-.
-Usually, it is just called with a file name or
-.IR \%man\~page .
-.
-The following examples, however, show that
-.B \%groffer
-has much more fancy capabilities.
-.
-.
-.TP
-.Shell_cmd "groffer\~/usr/local/share/doc/groff/meintro.ms.gz"
-Decompress, format and display the compressed file
-.File_name meintro.ms.gz
-in the directory
-.File_name /usr/local/share/doc/groff ,
-using the standard viewer
-.B \%gxditview
-as graphical viewer when in \%\f[CR]X\~Window\f[], or the
-.BR \%less (1)
-pager program when not in \%\f[CR]X\~Window\f[].
-.
-.
-.TP
-.Shell_cmd "groffer\~groff"
-If the file
-.File_name \%./groff
-exists use it as input.
-.
-Otherwise interpret the argument as a search for the
-.I \%man\~page
-named
-.B \%groff
-in the smallest possible
-.IR \%man\~section ,
-being section 1 in this case.
-.
-.
-.TP
-.Shell_cmd "groffer\~man:groff"
-search for the
-.I \%man\~page
-of
-.B \%groff
-even when the file
-.File_name ./groff
-exists.
-.
-.
-.TP
-.Shell_cmd "groffer\~groff.7"
-.TP+
-.Shell_cmd "groffer\~7\~groff"
-search the
-.I \%man\~page
-of
-.B \%groff
-in
-.I \%man\~section
-.BR 7 .
-This section search works only for a digit or a single character from
-a small set.
-.
-.
-.TP
-.Shell_cmd "groffer\~fb.modes"
-If the file
-.File_name ./fb.modes
-does not exist interpret this as a search for the
-.I \%man\~page
-of
-.BR fb.modes .
-As the extension
-.I \%modes
-is not a single character in classical section style the argument is
-not split to a search for
-.BR fb .
-.
-.
-.TP
-.Shell_cmd "groffer\~groff\~\[cq]troff(1)\[cq]\~man:roff"
-.
-The arguments that are not existing files are looked-up as the
-following
-.IR \%man\~pages :
-.B \%groff
-(automatic search, should be found in \fIman\fP\~section\~1),
-.B \%troff
-(in section\~1),
-and
-.B \%roff
-(in the section with the lowest number, being\~7 in this case).
-.
-The quotes around
-.nh
-.I \[cq]troff(1)\[cq]
-.hy
-are necessary because the paranthesis are special shell characters;
-escaping them with a backslash character
-.I \[rs](
-and
-.I \[rs])
-would be possible, too.
-.
-The formatted files are concatenated and displayed in one piece.
-.
-.
-.TP
-.Shell_cmd "LANG=de\~groffer\~--man\~--www\~--www-viever=galeon\~ls"
-.
-Retrieve the German
-.I \%man\~page
-(language
-.IR de )
-for the
-.B ls
-program, decompress it, format it to
-.I \%html
-format
-.nh
-.RI ( \%www\~mode )
-.hy
-and view the result in the web browser
-.BR \%galeon .
-The option
-.Opt_long man
-guarantees that the
-.I \%man\~page
-is retrieved, even when a local file
-.File_name \%ls
-exists in the actual directory.
-.
-.
-.TP
-.Shell_cmd "groffer\~--source\~'man:roff(7)'"
-.
-Get the
-.I \%man\~page
-called
-.I \%roff
-in \fIman\fP\~section 7, decompress it, and print its unformatted
-content, its source code.
-.
-.
-.TP
-.Shell_cmd "cat\~file.gz\~|\~groffer\~-Z\~-mfoo"
-.
-Decompress the standard input, send this to
-.I \%groff intermediate output mode
-without post-processing
-.RB ( groff
-option
-.Opt_short Z ),
-using macro package by
-.I \%foo
-.RB ( groff
-option
-.Opt_short m ) .
-.
-.
-.TP
-.Shell_cmd "echo\~'\[rs]f[CB]WOW!'\~|"
-.TP+
-.Shell_cmd+ "groffer --x --bg red --fg yellow --geometry 200x100 -"
-.
-Display the word \f[CB]WOW!\f[] in a small window in constant-width
-bold font, using color yellow on red background.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMPATIBILITY"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program consists of two shell scripts.
-.
-.
-.P
-The starting script is the file
-.File_name \%groffer
-that is installed in a
-.File_name bin
-directory.
-.
-It is generated from the source file
-.File_name \%groffer.sh .
-.
-It is just a short starting script without any functions such that it
-can run on very poor shells.
-.
-.
-.P
-The main part of the
-.B \%groffer
-program is the file
-.File_name groffer2.sh
-that is installed in the
-.I groff
-library directory.
-.
-This script can be run under a different shell by using the
-.B \%groffer
-option
-.Opt_long shell .
-.
-.
-.P
-Both scripts are compatible with both
-\f[CR]GNU\f[] and \%\f[CR]POSIX\f[].
-.
-\%\f[CR]POSIX\f[] compatibility refers to
-\%\f[CR]IEEE\~P1003.2/D11.2\f[] of September 1991, a very early
-version of the \%\f[CR]POSIX\f[] standard that is still freely
-available in the internet at
-.URL http://\:www.funet.fi/\:pub/\:doc/\:posix/\:p1003.2/\:d11.2/\:all \
-"\%POSIX\~P1003.2\~draft\~11.2" .
-.
-.
-.P
-Only a restricted set of shell language elements and shell builtins is
-used to achieve even compatibility with some Bourne shells that are
-not fully \%\f[CR]POSIX\f[] compatible.
-.
-The
-.B \%groffer
-shell scripts were tested on many shells, including the following
-Bourne shells:
-.BR \%ash (1),
-.BR \%bash (1),
-.BR \%dash (1),
-.BR \%ksh (1),
-.BR \%pdksh (1),
-.BR \%posh (1),
-and
-.BR \%zsh (1).
-So it should work on most actual free and commercial operating
-systems.
-.
-.
-.P
-The shell for the run of
-.File_name groffer2.sh
-can be chosen by the option
-.Opt_long shell
-on the command line or the environment variable
-.Env_var $GROFF_OPT .
-If you want to add it to one of the
-.B \%groffer
-configuration files you must write a line starting with
-.Opt_long shell .
-.
-.
-.P
-The
-.B \%groffer
-program provides its own parser for command line arguments that is
-compatible to both \%\f[CR]POSIX\f[]
-.BR \%getopts (1)
-and \%\f[CR]GNU\f[]
-.BR \%getopt (1).
-It can handle option arguments and file names containing white space
-and a large set of special characters.
-.
-The following standard types of options are supported.
-.
-.
-.Topic
-The option consisiting of a single minus
-.Opt_short
-refers to standard input.
-.
-.
-.Topic
-A single minus followed by characters refers to a single character
-option or a combination thereof; for example, the
-.B \%groffer
-short option combination
-.Opt_short Qmfoo
-is equivalent to
-.Opt_short Q\~\-m\~foo .
-.
-.
-.Topic
-Long options are options with names longer than one character; they
-are always preceded by a double minus.
-.
-An option argument can either go to the next command line argument or
-be appended with an equal sign to the argument; for example,
-.Opt_alt -- long=arg
-is equivalent to
-.Opt_alt -- long\~arg .
-.
-.
-.Topic
-An argument of
-.Opt_--
-ends option parsing; all further command line arguments are
-interpreted as
-.I \%filespec
-parameters, i.e. file names or constructs for searching
-.IR \%man\~pages ).
-.
-.
-.Topic
-All command line arguments that are neither options nor option
-arguments are interpreted as
-.I \%filespec
-parameters and stored until option parsing has finished.
-.
-For example, the command line
-.Shell_cmd "groffer file1 -a -o arg file2"
-is equivalent to
-.Shell_cmd "groffer -a -o arg -- file1 file2"
-.
-.
-.P
-The free mixing of options and
-.I \%filespec
-parameters follows the GNU principle.
-.
-That does not fulfill the strange option behavior of \%\f[CR]POSIX\f[]
-that ends option processing as soon as the first non-option argument
-has been reached.
-.
-The end of option processing can be forced by the option
-.RB ` \-\- '
-anyway.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "BUGS"
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MTO bug-groff@gnu.org "bug-groff mailing list" .
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of
-.B \%groffer
-you are using.
-.
-.
-.P
-You can also use the
-.MTO groff@gnu.org "groff mailing list" ,
-but you must first subscribe to this list.
-.
-You can do that by visiting the
-.URL http://\:lists.gnu.org/\:mailman/\:listinfo/\:groff \
-"groff mailing list web page" .
-.
-.
-.P
-See
-.BR \%groff (@MAN1EXT@)
-for information on availability.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.P
-.BR \%groff (@MAN1EXT@),
-.BR \%@g@troff (@MAN1EXT@)
-.RS
-Details on the options and environment variables available in
-.BR \%groff ;
-all of them can be used with
-.BR \%groffer .
-.RE
-.
-.
-.TP
-.BR \%groff (@MAN7EXT@)
-Documentation of the
-.I \%groff
-language.
-.
-.
-.TP
-.BR \%grog (@MAN1EXT@)
-Internally,
-.B \%groffer
-tries to guess the
-.B \%groff
-command line options from the input using this program.
-.
-.
-.TP
-.BR groff_out (@MAN5EXT@)
-Documentation on the
-.I \%groff intermediate output
-.nh
-.RI ( ditroff
-output).
-.hy
-.
-.
-.TP
-.BR groff_tmac (@MAN5EXT@)
-Documentation on the
-.I \%groff
-macro files.
-.
-.
-.TP
-.BR \%man (1)
-The standard program to display
-.IR \%man\~pages .
-.
-The information there is only useful if it is the
-.I \%man\~page
-for GNU
-.BR man .
-Then it documents the options and environment variables that are
-supported by
-.BR \%groffer .
-.
-.
-.P
-.BR \%ash (1),
-.BR \%bash (1),
-.BR \%dash (1),
-.BR \%ksh (1),
-.BR \%pdksh (1),
-.BR \%posh (1),
-.BR \%sh (1),
-.BR \%zsh (1)
-.RS
-Bourne shells that were tested with
-.BR \%groffer .
-.RE
-.
-.
-.P
-.BR \%gxditview (@MAN1EXT@),
-.BR \%xditview (1x)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%x\~mode .
-.RE
-.
-.
-.P
-.BR \%kghostview (1),
-.BR \%ggv (1),
-.BR \%gv (1),
-.BR \%ghostview (1),
-.BR \%gs (1)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%ps\~mode .
-.RE
-.
-.
-.P
-.BR \%kghostview (1),
-.BR \%ggv (1),
-.BR \%xpdf (1),
-.BR \%acroread (1),
-.BR \%kpdf (1)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%pdf\~mode .
-.RE
-.
-.
-.P
-.BR \%kdvi (1),
-.BR \%xdvi (1),
-.BR \%dvilx (1)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%dvi\~mode .
-.RE
-.
-.
-.P
-.BR \%konqueror (1),
-.BR \%mozilla (1),
-.BR \%lynx (1)
-.RS
-Web-browsers for
-.BR \%groffer 's
-.I \%html
-or
-.IR \%www\~mode .
-.RE
-.
-.
-.TP
-.BR \%less (1)
-Standard pager program for the
-.I \%tty\~mode .
-.
-.
-.P
-.BR \%gzip (1),
-.BR \%bzip2 (1)
-.RS
-The decompression programs supported by
-.BR \%groffer .
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "AUTHOR"
-.\" --------------------------------------------------------------------
-.author
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.copyleft
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/groffer/groffer.sh b/contrib/groff/contrib/groffer/groffer.sh
deleted file mode 100644
index 1cb55c72c9ca..000000000000
--- a/contrib/groff/contrib/groffer/groffer.sh
+++ /dev/null
@@ -1,299 +0,0 @@
-#! /bin/sh
-
-# groffer - display groff files
-
-# Source file position: <groff-source>/contrib/groffer/groffer.sh
-
-# Copyright (C) 2001,2002,2003,2004,2005
-# Free Software Foundation, Inc.
-# Written by Bernd Warken
-
-# This file is part of `groffer', which is part of `groff' version
-# @VERSION@. See $_GROFF_VERSION.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with `groff'; see the files COPYING and LICENSE in the top
-# directory of the `groff' source. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-########################################################################
-
-_PROGRAM_VERSION='0.9.22';
-_LAST_UPDATE='22 August 2005';
-
-export _PROGRAM_VERSION;
-export _LAST_UPDATE;
-
-export GROFFER_OPT; # option environment for groffer
-
-export _CONF_FILE_ETC; # configuration file in /etc
-export _CONF_FILE_HOME; # configuration file in $HOME
-export _CONF_FILES; # configuration files
-_CONF_FILE_ETC='/etc/groff/groffer.conf';
-_CONF_FILE_HOME="${HOME}/.groff/groffer.conf";
-_CONF_FILES="${_CONF_FILE_ETC} ${_CONF_FILE_HOME}";
-
-# characters
-
-export _AT;
-export _SP;
-export _SQ;
-export _TAB;
-
-_AT='@';
-_SP=' ';
-_SQ="'";
-_TAB=' ';
-
-export _ERROR;
-_ERROR='7'; # for syntax errors; no `-1' in `ash'
-
-# @...@ constructs
-
-export _GROFF_VERSION
-_GROFF_VERSION='@VERSION@';
-if test _@VERSION@_ = _${_AT}VERSION${_AT}_
-then
- _GROFF_VERSION='1.19.2';
-fi;
-
-export _AT_BINDIR_AT;
-export _AT_G_AT;
-export _AT_LIBDIR_AT;
-export _GROFFER_LIBDIR;
-if test _@BINDIR@_ = _${_AT}BINDIR${_AT}_
-then
- # script before `make'
- _AT_BINDIR_AT='.';
- _AT_G_AT='';
- _AT_LIBDIR_AT='';
- _GROFFER_LIBDIR='.';
-else
- _AT_BINDIR_AT='@BINDIR@';
- _AT_G_AT='@g@';
- _AT_LIBDIR_AT='@libdir@';
- _GROFFER_LIBDIR="${_AT_LIBDIR_AT}"'/groff/groffer';
-fi;
-
-export _GROFFER_SH; # file name of this shell script
-case "$0" in
-*groffer*)
- _GROFFER_SH="$0";
- # was: _GROFFER_SH="${_AT_BINDIR_AT}/groffer";
- ;;
-*)
- echo 'The groffer script should be started directly.' >&2
- exit 1;
- ;;
-esac;
-
-export _GROFFER2_SH; # file name of the script that follows up
-_GROFFER2_SH="${_GROFFER_LIBDIR}"/groffer2.sh;
-
-export _NULL_DEV;
-if test -c /dev/null
-then
- _NULL_DEV="/dev/null";
-else
- _NULL_DEV="NUL";
-fi;
-
-
-# Test of the `$()' construct.
-if test _"$(echo "$(echo 'test')")"_ \
- != _test_
-then
- echo 'The "$()" construct did not work.' >&2;
- exit "${_ERROR}";
-fi;
-
-# Test of sed program
-if test _"$(echo red | sed -e 's/r/s/')"_ != _sed_
-then
- echo 'The sed program did not work.' >&2;
- exit "${_ERROR}";
-fi;
-
-
-########################### configuration
-
-# read and transform the configuration files, execute the arising commands
-for f in "${_CONF_FILE_HOME}" "${_CONF_FILE_ETC}"
-do
- if test -f "$f"
- then
- o=""; # $o means groffer option
- # use "" quotes because of ksh and posh
- eval "$(cat "$f" | sed -n -e '
-# Ignore comments
-/^['"${_SP}${_TAB}"']*#/d
-# Delete leading and final space
-s/^['"${_SP}${_TAB}"']*//
-s/['"${_SP}${_TAB}"']*$//
-# Print all shell commands
-/^[^-]/p
-# Replace empty arguments
-s/^\(-[^ ]*\)=$/o="${o} \1 '"${_SQ}${_SQ}"'"/p
-# Replace division between option and argument by single space
-s/[='"${_SP}${_TAB}"']['"${_SP}${_TAB}"']*/'"${_SP}"'/
-# Handle lines without spaces
-s/^\(-[^'"${_SP}"']*\)$/o="${o} \1"/p
-# Print options that have their argument encircled with single quotes
-/^-[^ ]* '"${_SQ}"'.*'"${_SQ}"'$/s/^.*$/o="${o} &"/p
-# Replace encircled double quotes by single quotes and print the result
-s/^\(-[^ ]*\) "\(.*\)"$/o="${o} \1 '"${_SQ}"'\2'"${_SQ}"'"/p
-# Encircle the remaining arguments with single quotes
-s/^\(-[^ ]*\) \(.*\)$/o="${o} \1 '"${_SQ}"'\2'"${_SQ}"'"/p
-')"
- if test _"${o}"_ != __
- then
- if test _"{GROFFER_OPT}"_ = __
- then
- GROFFER_OPT="${o}";
- else
- GROFFER_OPT="${o} ${GROFFER_OPT}";
- fi;
- fi;
- fi;
-done;
-
-# integrate $GROFFER_OPT into the command line; it isn't needed any more
-if test _"${GROFFER_OPT}"_ != __
-then
- eval set x "${GROFFER_OPT}" '"$@"';
- shift;
- GROFFER_OPT='';
-fi;
-
-
-########################### Determine the shell
-
-export _SHELL;
-
-# use "``" instead of "$()" for using the case ")" construct
-# do not use "" quotes because of ksh
-_SHELL=`
- # $x means list.
- # $s means shell.
- # The command line arguments are taken over.
- # Shifting herein does not have an effect outside.
- export x;
- case " $*" in
- *\ --sh*) # abbreviation for --shell
- x='';
- s='';
- # determine all --shell arguments, store them in $x in reverse order
- while test $# != 0
- do
- case "$1" in
- --shell|--sh|--she|--shel)
- if test "$#" -ge 2
- then
- s="$2";
- shift;
- fi;
- ;;
- --shell=*|--sh=*|--she=*|--shel=*)
- # delete up to first "=" character
- s="$(echo x"$1" | sed -e 's/^x[^=]*=//')";
- ;;
- *)
- shift;
- continue;
- esac;
- if test _"${x}"_ = __
- then
- x="'${s}'";
- else
- x="'${s}' ${x}";
- fi;
- shift;
- done;
-
- # from all possible shells in $x determine the first being a shell
- # or being empty
- s="$(
- # "" quotes because of posh
- eval set x "${x}";
- shift;
- if test $# != 0
- then
- for i
- do
- if test _"$i"_ = __
- then
- # use the empty argument as the default shell
- echo empty;
- break;
- else
- # test $i on being a shell program;
- # use this kind of quoting for posh
- if test _"$(eval "$i -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
- then
- # shell found
- cat <<EOF
-${i}
-EOF
- break;
- else
- # if not being a shell go on searching
- continue;
- fi;
- fi;
- done;
- fi;
- )";
- if test _"${s}"_ != __
- then
- cat <<EOF
-${s}
-EOF
- fi;
- ;;
- esac;
-`
-
-########################### test fast shells for automatic run
-
-if test _"${_SHELL}"_ = __
-then
- for s in ksh ash dash pdksh zsh posh
- do
- if test _"$(eval "$s -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
- then
- _SHELL="$s";
- break;
- fi;
- done;
-fi;
-
-
-########################### start groffer2.sh
-
-if test _"${_SHELL}"_ = _empty_
-then
- _SHELL='';
-fi;
-
-if test _"${_SHELL}"_ = __
-then
- # no shell found, so start groffer2.sh normally
- eval exec "'${_GROFFER2_SH}'" '"$@"';
- exit;
-else
- # start groffer2.sh with the found $_SHELL
- # do not quote $_SHELL to allow arguments
- eval exec "${_SHELL} '${_GROFFER2_SH}'" '"$@"';
- exit;
-fi;
diff --git a/contrib/groff/contrib/groffer/groffer2.sh b/contrib/groff/contrib/groffer/groffer2.sh
deleted file mode 100644
index 60ca91130f6f..000000000000
--- a/contrib/groff/contrib/groffer/groffer2.sh
+++ /dev/null
@@ -1,5854 +0,0 @@
-#! /bin/sh
-
-# groffer - display groff files
-
-# Source file position: <groff-source>/contrib/groffer/groffer2.sh
-# Installed position: <prefix>/lib/groff/groffer/groffer2.sh
-
-# This file should not be run independently. It is called by
-# `groffer.sh' in the source or by the installed `groffer' program.
-
-# Copyright (C) 2001,2002,2003,2004,2005
-# Free Software Foundation, Inc.
-# Written by Bernd Warken
-
-# Last update: 22 August 2005
-
-# This file is part of `groffer', which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with `groff'; see the files COPYING and LICENSE in the top
-# directory of the `groff' source. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-
-########################################################################
-# Test of rudimentary shell functionality
-########################################################################
-
-
-########################################################################
-# Test of `unset'
-#
-export _UNSET;
-export _foo;
-_foo=bar;
-_res="$(unset _foo 2>&1)";
-if unset _foo >${_NULL_DEV} 2>&1 && \
- test _"${_res}"_ = __ && test _"${_foo}"_ = __
-then
- _UNSET='unset';
- eval "${_UNSET}" _foo;
- eval "${_UNSET}" _res;
-else
- _UNSET=':';
-fi;
-
-
-########################################################################
-# Test of `test'.
-#
-if test a = a && test a != b && test -f "${_GROFFER_SH}"
-then
- :;
-else
- echo '"test" did not work.' >&2;
- exit "${_ERROR}";
-fi;
-
-
-########################################################################
-# Test of `echo' and the `$()' construct.
-#
-if echo '' >${_NULL_DEV}
-then
- :;
-else
- echo '"echo" did not work.' >&2;
- exit "${_ERROR}";
-fi;
-if test _"$(t1="$(echo te)" &&
- t2="$(echo '')" &&
- t3="$(echo 'st')" &&
- echo "${t1}${t2}${t3}")"_ \
- != _test_
-then
- echo 'The "$()" construct did not work' >&2;
- exit "${_ERROR}";
-fi;
-
-
-########################################################################
-# Test of sed program; test in groffer.sh is not valid here.
-#
-if test _"$(echo red | sed -e 's/r/s/')"_ != _sed_
-then
- echo 'The sed program did not work.' >&2;
- exit "${_ERROR}";
-fi;
-
-
-########################################################################
-# Test of function definitions.
-#
-_t_e_s_t_f_u_n_c_()
-{
- return 0;
-}
-
-if _t_e_s_t_f_u_n_c_ 2>${_NULL_DEV}
-then
- :;
-else
- echo 'Shell '"${_SHELL}"' does not support function definitions.' >&2;
- exit "${_ERROR}";
-fi;
-
-
-########################################################################
-# debug - diagnostic messages
-########################################################################
-
-export _DEBUG_STACKS;
-_DEBUG_STACKS='no'; # disable stack output in each function
-#_DEBUG_STACKS='yes'; # enable stack output in each function
-
-export _DEBUG_LM;
-_DEBUG_LM='no'; # disable landmark messages
-#_DEBUG_LM='yes'; # enable landmark messages
-
-export _DEBUG_KEEP_FILES;
-_DEBUG_KEEP_FILES='no' # disable file keeping in temporary dir
-#_DEBUG_KEEP_FILES='yes' # enable file keeping in temporary dir
-
-export _DEBUG_PRINT_PARAMS;
-_DEBUG_PRINT_PARAMS='no'; # disable printing of all parameters
-#_DEBUG_PRINT_PARAMS='yes'; # enable printing of all parameters
-
-export _DEBUG_PRINT_SHELL;
-_DEBUG_PRINT_SHELL='no'; # disable printing of the shell name
-#_DEBUG_PRINT_SHELL='yes'; # enable printing of the shell name
-
-export _DEBUG_PRINT_TMPDIR;
-_DEBUG_PRINT_TMPDIR='no'; # disable printing of the temporary dir
-#_DEBUG_PRINT_TMPDIR='yes'; # enable printing of the temporary dir
-
-export _DEBUG_USER_WITH_STACK;
-_DEBUG_USER_WITH_STACK='no'; # disable stack dump in error_user()
-#_DEBUG_USER_WITH_STACK='yes'; # enable stack dump in error_user()
-
-# determine all --debug* options
-case " $*" in
-*\ --debug*)
- case " $* " in
- *' --debug '*)
- # _DEBUG_STACKS='yes';
- # _DEBUG_LM='yes';
- _DEBUG_KEEP_FILES='yes';
- _DEBUG_PRINT_PARAMS='yes';
- _DEBUG_PRINT_SHELL='yes';
- _DEBUG_PRINT_TMPDIR='yes';
- _DEBUG_USER_WITH_STACK='yes';
- ;;
- esac;
- d=' --debug-all --debug-keep --debug-lm --debug-params --debug-shell '\
-'--debug-stacks --debug-tmpdir --debug-user ';
- for i
- do
- case "$i" in
- --debug-s)
- echo 'The abbreviation --debug-s has multiple options: '\
-'--debug-shell and --debug-stacks.' >&2
- exit "${_ERROR}";
- ;;
- esac;
- case "$d" in
- *\ ${i}*)
- # extract whole word of abbreviation $i
- s="$(cat <<EOF | sed -n -e 's/^.* \('"$i"'[^ ]*\) .*/\1/p'
-$d
-EOF
-)"
- case "$s" in
- '') continue; ;;
- --debug-all)
- _DEBUG_STACKS='yes';
- _DEBUG_LM='yes';
- _DEBUG_KEEP_FILES='yes';
- _DEBUG_PRINT_PARAMS='yes';
- _DEBUG_PRINT_SHELL='yes';
- _DEBUG_PRINT_TMPDIR='yes';
- _DEBUG_USER_WITH_STACK='yes';
- ;;
- --debug-keep)
- _DEBUG_PRINT_TMPDIR='yes';
- _DEBUG_KEEP_FILES='yes';
- ;;
- --debug-lm)
- _DEBUG_LM='yes';
- ;;
- --debug-params)
- _DEBUG_PRINT_PARAMS='yes';
- ;;
- --debug-shell)
- _DEBUG_PRINT_SHELL='yes';
- ;;
- --debug-stacks)
- _DEBUG_STACKS='yes';
- ;;
- --debug-tmpdir)
- _DEBUG_PRINT_TMPDIR='yes';
- ;;
- --debug-user)
- _DEBUG_USER_WITH_STACK='yes';
- ;;
- esac;
- ;;
- esac;
- done
- ;;
-esac;
-
-if test _"${_DEBUG_PRINT_PARAMS}"_ = _yes_
-then
- echo "parameters: $@" >&2;
-fi;
-
-if test _"${_DEBUG_PRINT_SHELL}"_ = _yes_
-then
- if test _"${_SHELL}"_ = __
- then
- if test _"${POSIXLY_CORRECT}"_ = _y_
- then
- echo 'shell: bash as /bin/sh (none specified)' >&2;
- else
- echo 'shell: /bin/sh (none specified)' >&2;
- fi;
- else
- echo "shell: ${_SHELL}" >&2;
- fi;
-fi;
-
-
-########################################################################
-# Environment Variables
-########################################################################
-
-# Environment variables that exist only for this file start with an
-# underscore letter. Global variables to this file are written in
-# upper case letters, e.g. $_GLOBAL_VARIABLE; temporary variables
-# start with an underline and use only lower case letters and
-# underlines, e.g. $_local_variable .
-
-# [A-Z]* system variables, e.g. $MANPATH
-# _[A-Z_]* global file variables, e.g. $_MAN_PATH
-# _[a-z_]* temporary variables, e.g. $_manpath
-
-# Due to incompatibilities of the `ash' shell, the name of loop
-# variables in `for' must be single character
-# [a-z] local loop variables, e.g. $i
-
-
-########################################################################
-# read-only variables (global to this file)
-########################################################################
-
-# function return values; `0' means ok; other values are error codes
-export _ALL_EXIT;
-export _BAD;
-export _GOOD;
-export _NO;
-export _OK;
-export _YES;
-
-_GOOD='0'; # return ok
-_BAD='1'; # return negatively, error code `1'
-# $_ERROR was already defined as `7' in groffer.sh.
-
-_NO="${_BAD}";
-_YES="${_GOOD}";
-_OK="${_GOOD}";
-
-# quasi-functions, call with `eval', e.g `eval "${return_ok}"'
-export return_ok;
-export return_good;
-export return_bad;
-export return_yes;
-export return_no;
-export return_error;
-export return_var;
-return_ok="func_pop; return ${_OK}";
-return_good="func_pop; return ${_GOOD}";
-return_bad="func_pop; return ${_BAD}";
-return_yes="func_pop; return ${_YES}";
-return_no="func_pop; return ${_NO}";
-return_error="func_pop; return ${_ERROR}";
-return_var="func_pop; return"; # add number, e.g. `eval "${return_var} $n'
-
-
-export _DEFAULT_MODES;
-_DEFAULT_MODES='x,ps,tty';
-export _DEFAULT_RESOLUTION;
-_DEFAULT_RESOLUTION='75';
-
-export _DEFAULT_TTY_DEVICE;
-_DEFAULT_TTY_DEVICE='latin1';
-
-# _VIEWER_* viewer programs for different modes (only X is necessary)
-# _VIEWER_* a comma-separated list of viewer programs (with options)
-export _VIEWER_DVI; # viewer program for dvi mode
-export _VIEWER_HTML_TTY; # viewer program for html mode in tty
-export _VIEWER_HTML_X; # viewer program for html mode in X
-export _VIEWER_PDF; # viewer program for pdf mode
-export _VIEWER_PS; # viewer program for ps mode
-export _VIEWER_X; # viewer program for X mode
-_VIEWER_DVI='kdvi,xdvi,dvilx';
-_VIEWER_HTML_TTY='lynx';
-_VIEWER_HTML_X='konqueror,mozilla,netscape,galeon,opera,amaya,arena';
-_VIEWER_PDF='kghostview --scale 1.45,ggv,xpdf,acroread,kpdf';
-_VIEWER_PS='kghostview --scale 1.45,ggv,gv,ghostview,gs_x11,gs';
-_VIEWER_X='gxditview,xditview';
-
-# Search automatically in standard sections `1' to `8', and in the
-# traditional sections `9', `n', and `o'. On many systems, there
-# exist even more sections, mostly containing a set of man pages
-# special to a specific program package. These aren't searched for
-# automatically, but must be specified on the command line.
-export _MAN_AUTO_SEC_LIST;
-_MAN_AUTO_SEC_LIST="'1' '2' '3' '4' '5' '6' '7' '8' '9' 'n' 'o'";
-export _MAN_AUTO_SEC_CHARS;
-_MAN_AUTO_SEC_CHARS='[123456789no]';
-
-export _SPACE_SED;
-_SPACE_SED='['"${_SP}${_TAB}"']';
-
-export _SPACE_CASE;
-_SPACE_CASE='[\'"${_SP}"'\'"${_TAB}"']';
-
-export _PROCESS_ID; # for shutting down the program
-_PROCESS_ID="$$";
-
-
-############ the command line options of the involved programs
-#
-# The naming scheme for the options environment names is
-# $_OPTS_<prog>_<length>[_<argspec>]
-#
-# <prog>: program name GROFFER, GROFF, or CMDLINE (for all
-# command line options)
-# <length>: LONG (long options) or SHORT (single character options)
-# <argspec>: ARG for options with argument, NA for no argument;
-# without _<argspec> both the ones with and without arg.
-#
-# Each option that takes an argument must be specified with a
-# trailing : (colon).
-
-# exports
-export _OPTS_GROFFER_SHORT_NA;
-export _OPTS_GROFFER_SHORT_ARG;
-export _OPTS_GROFFER_LONG_NA;
-export _OPTS_GROFFER_LONG_ARG;
-export _OPTS_GROFF_SHORT_NA;
-export _OPTS_GROFF_SHORT_ARG;
-export _OPTS_GROFF_LONG_NA;
-export _OPTS_GROFF_LONG_ARG;
-export _OPTS_X_SHORT_ARG;
-export _OPTS_X_SHORT_NA;
-export _OPTS_X_LONG_ARG;
-export _OPTS_X_LONG_NA;
-export _OPTS_MAN_SHORT_ARG;
-export _OPTS_MAN_SHORT_NA;
-export _OPTS_MAN_LONG_ARG;
-export _OPTS_MAN_LONG_NA;
-export _OPTS_MANOPT_SHORT_ARG;
-export _OPTS_MANOPT_SHORT_NA;
-export _OPTS_MANOPT_LONG_ARG;
-export _OPTS_MANOPT_LONG_NA;
-export _OPTS_CMDLINE_SHORT_NA;
-export _OPTS_CMDLINE_SHORT_ARG;
-export _OPTS_CMDLINE_LONG_NA;
-export _OPTS_CMDLINE_LONG_ARG;
-
-###### groffer native options
-
-_OPTS_GROFFER_SHORT_NA="'h' 'Q' 'v' 'V' 'X' 'Z'";
-_OPTS_GROFFER_SHORT_ARG="'T'";
-
-_OPTS_GROFFER_LONG_NA="'auto' \
-'apropos' 'apropos-data' 'apropos-devel' 'apropos-progs' \
-'debug' 'debug-all' 'debug-keep' 'debug-lm' 'debug-params' 'debug-shell' \
-'debug-stacks' 'debug-tmpdir' 'debug-user' 'default' 'do-nothing' 'dvi' \
-'groff' 'help' 'intermediate-output' 'html' 'man' \
-'no-location' 'no-man' 'no-special' 'pdf' 'ps' 'rv' 'source' \
-'text' 'text-device' \
-'tty' 'tty-device' 'version' 'whatis' 'where' 'www' 'x' 'X'";
-
-_OPTS_GROFFER_LONG_ARG="\
-'default-modes' 'device' 'dvi-viewer' 'dvi-viewer-tty' 'extension' 'fg' \
-'fn' 'font' 'foreground' 'html-viewer' 'html-viewer-tty' 'mode' \
-'pdf-viewer' 'pdf-viewer-tty' 'print' 'ps-viewer' 'ps-viewer-tty' 'shell' \
-'title' 'tty-viewer' 'tty-viewer-tty' 'www-viewer' 'www-viewer-tty' \
-'x-viewer' 'x-viewer-tty' 'X-viewer' 'X-viewer-tty'";
-
-##### groffer options inhereted from groff
-
-_OPTS_GROFF_SHORT_NA="'a' 'b' 'c' 'C' 'e' 'E' 'g' 'G' 'i' 'l' 'N' 'p' \
-'R' 's' 'S' 't' 'U' 'z'";
-_OPTS_GROFF_SHORT_ARG="'d' 'f' 'F' 'I' 'L' 'm' 'M' 'n' 'o' 'P' 'r' \
-'w' 'W'";
-_OPTS_GROFF_LONG_NA="";
-_OPTS_GROFF_LONG_ARG="";
-
-##### groffer options inhereted from the X Window toolkit
-
-_OPTS_X_SHORT_NA="";
-_OPTS_X_SHORT_ARG="";
-
-_OPTS_X_LONG_NA="'iconic' 'rv'";
-
-_OPTS_X_LONG_ARG="'background' 'bd' 'bg' 'bordercolor' 'borderwidth' \
-'bw' 'display' 'fg' 'fn' 'font' 'foreground' 'ft' 'geometry' \
-'resolution' 'title' 'xrm'";
-
-###### groffer options inherited from man
-
-_OPTS_MAN_SHORT_NA="";
-_OPTS_MAN_SHORT_ARG="";
-
-_OPTS_MAN_LONG_NA="'all' 'ascii' 'catman' 'ditroff' \
-'local-file' 'location' 'troff' 'update'";
-
-_OPTS_MAN_LONG_ARG="'locale' 'manpath' \
-'pager' 'preprocessor' 'prompt' 'sections' 'systems' 'troff-device'";
-
-###### additional options for parsing $MANOPT only
-
-_OPTS_MANOPT_SHORT_NA="'7' 'a' 'c' 'd' 'D' 'f' 'h' 'k' 'l' 't' 'u' \
-'V' 'w' 'Z'";
-_OPTS_MANOPT_SHORT_ARG="'e' 'L' 'm' 'M' 'p' 'P' 'r' 'S' 'T'";
-
-_OPTS_MANOPT_LONG_NA="${_OPTS_MAN_LONG_NA} \
-'apropos' 'debug' 'default' 'help' 'html' 'ignore-case' 'location-cat' \
-'match-case' 'troff' 'update' 'version' 'whatis' 'where' 'where-cat'";
-
-_OPTS_MANOPT_LONG_ARG="${_OPTS_MAN_LONG_NA} \
-'config_file' 'encoding' 'extension' 'locale'";
-
-###### collections of command line options
-
-_OPTS_CMDLINE_SHORT_NA="${_OPTS_GROFFER_SHORT_NA} \
-${_OPTS_GROFF_SHORT_NA} ${_OPTS_X_SHORT_NA} ${_OPTS_MAN_SHORT_NA}";
-_OPTS_CMDLINE_SHORT_ARG="${_OPTS_GROFFER_SHORT_ARG} \
-${_OPTS_GROFF_SHORT_ARG} ${_OPTS_X_SHORT_ARG} ${_OPTS_MAN_SHORT_ARG}";
-
-_OPTS_CMDLINE_LONG_NA="${_OPTS_GROFFER_LONG_NA} \
-${_OPTS_GROFF_LONG_NA} ${_OPTS_X_LONG_NA} ${_OPTS_MAN_LONG_NA}";
-_OPTS_CMDLINE_LONG_ARG="${_OPTS_GROFFER_LONG_ARG} \
-${_OPTS_GROFF_LONG_ARG} ${_OPTS_MAN_LONG_ARG} ${_OPTS_X_LONG_ARG}";
-
-
-########################################################################
-# read-write variables (global to this file)
-########################################################################
-
-export _ALL_PARAMS; # All options and file name parameters
-export _ADDOPTS_GROFF; # Transp. options for groff (`eval').
-export _ADDOPTS_POST; # Transp. options postproc (`eval').
-export _ADDOPTS_X; # Transp. options X postproc (`eval').
-export _APROPOS_PROG; # Program to run apropos.
-export _APROPOS_SECTIONS; # Sections for different --apropos-*.
-export _DEFAULT_MODES; # Set default modes.
-export _DISPLAY_MODE; # Display mode.
-export _DISPLAY_PROG; # Viewer program to be used for display.
-export _DISPLAY_ARGS; # X resources for the viewer program.
-export _FILEARGS; # Stores filespec parameters.
-export _FILESPEC_ARG; # Stores the actual filespec parameter.
-export _FUNC_STACK; # Store debugging information.
-export _REGISTERED_TITLE; # Processed file names.
-# _HAS_* from availability tests
-export _HAS_COMPRESSION; # `yes' if gzip compression is available
-export _HAS_BZIP; # `yes' if bzip2 compression is available
-# _MAN_* finally used configuration of man searching
-export _MAN_ALL; # search all man pages per filespec
-export _MAN_ENABLE; # enable search for man pages
-export _MAN_EXT; # extension for man pages
-export _MAN_FORCE; # force file parameter to be man pages
-export _MAN_IS_SETUP; # setup man variables only once
-export _MAN_LANG; # language for man pages
-export _MAN_LANG2; # language for man pages
-export _MAN_LANG_DONE; # language dirs added to man path
-export _MAN_PATH; # search path for man pages
-export _MAN_SEC; # sections for man pages; sep. `:'
-export _MAN_SEC_DONE; # sections added to man path
-export _MAN_SYS; # system names for man pages; sep. `,'
-export _MAN_SYS; # system names added to man path
-# _MANOPT_* as parsed from $MANOPT
-export _MANOPT_ALL; # $MANOPT --all
-export _MANOPT_EXTENSION; # $MANOPT --extension
-export _MANOPT_LANG; # $MANOPT --locale
-export _MANOPT_PATH; # $MANOPT --manpath
-export _MANOPT_PAGER; # $MANOPT --pager
-export _MANOPT_SEC; # $MANOPT --sections
-export _MANOPT_SYS; # $MANOPT --systems
-# _OPT_* as parsed from groffer command line
-export _OPT_ALL; # display all suitable man pages.
-export _OPT_APROPOS; # call `apropos' program.
-export _OPT_BD; # set border color in some modes.
-export _OPT_BG; # set background color in some modes.
-export _OPT_BW; # set border width in some modes.
-export _OPT_DEFAULT_MODES; # `,'-list of modes when no mode given.
-export _OPT_DEVICE; # device option.
-export _OPT_DO_NOTHING; # do nothing in main_display().
-export _OPT_DISPLAY; # set X display.
-export _OPT_FG; # set foreground color in some modes.
-export _OPT_FN; # set font in some modes.
-export _OPT_GEOMETRY; # set size and position of viewer in X.
-export _OPT_ICONIC; # -iconic option for X viewers.
-export _OPT_LANG; # set language for man pages
-export _OPT_LOCATION; # print processed file names to stderr
-export _OPT_MODE; # values: X, tty, Q, Z, ""
-export _OPT_MANPATH; # manual setting of path for man-pages
-export _OPT_PAGER; # specify paging program for tty mode
-export _OPT_RESOLUTION; # set X resolution in dpi
-export _OPT_RV; # reverse fore- and background colors.
-export _OPT_SECTIONS; # sections for man page search
-export _OPT_SYSTEMS; # man pages of different OS's
-export _OPT_TITLE; # title for gxditview window
-export _OPT_TEXT_DEVICE; # set device for tty mode.
-export _OPT_V; # groff option -V.
-export _OPT_VIEWER_DVI; # viewer program for dvi mode
-export _OPT_VIEWER_PDF; # viewer program for pdf mode
-export _OPT_VIEWER_PS; # viewer program for ps mode
-export _OPT_VIEWER_HTML; # viewer program for html mode
-export _OPT_VIEWER_X; # viewer program for x mode
-export _OPT_WHATIS; # print the man description
-export _OPT_XRM; # specify X resource.
-export _OPT_Z; # groff option -Z.
-export _OUTPUT_FILE_NAME; # output generated, see main_set_res..()
-export _VIEWER_TERMINAL; # viewer options for terminal (--*-viewer-tty)
-# _TMP_* temporary directory and files
-export _TMP_DIR; # groffer directory for temporary files
-export _TMP_CAT; # stores concatenation of everything
-export _TMP_STDIN; # stores stdin, if any
-
-# these variables are preset in section `Preset' after the rudim. test
-
-
-########################################################################
-# Preset and reset of read-write global variables
-########################################################################
-
-
-export _START_DIR; # directory at start time of the script
-_START_DIR="$(pwd)";
-
-# For variables that can be reset by option `--default', see reset().
-
-_FILEARGS='';
-
-# _HAS_* from availability tests
-_HAS_COMPRESSION='';
-_HAS_BZIP='';
-
-# _TMP_* temporary files
-_TMP_DIR='';
-_TMP_CAT='';
-_TMP_CONF='';
-_TMP_STDIN='';
-
-
-########################################################################
-# reset ()
-#
-# Reset the variables that can be affected by options to their default.
-#
-reset()
-{
- if test "$#" -ne 0
- then
- error "reset() does not have arguments.";
- fi;
-
- _ADDOPTS_GROFF='';
- _ADDOPTS_POST='';
- _ADDOPTS_X='';
- _APROPOS_PROG='';
- _APROPOS_SECTIONS='';
- _DISPLAY_ARGS='';
- _DISPLAY_MODE='';
- _DISPLAY_PROG='';
- _REGISTERED_TITLE='';
-
- # _MAN_* finally used configuration of man searching
- _MAN_ALL='no';
- _MAN_ENABLE='yes'; # do search for man-pages
- _MAN_EXT='';
- _MAN_FORCE='no'; # first local file, then search man page
- _MAN_IS_SETUP='no';
- _MAN_LANG='';
- _MAN_LANG2='';
- _MAN_PATH='';
- _MAN_SEC='';
- _MAN_SEC_DONE='no';
- _MAN_SYS='';
- _MAN_SYS_DONE='no';
-
- # _MANOPT_* as parsed from $MANOPT
- _MANOPT_ALL='no';
- _MANOPT_EXTENSION='';
- _MANOPT_LANG='';
- _MANOPT_PATH='';
- _MANOPT_PAGER='';
- _MANOPT_SEC='';
- _MANOPT_SYS='';
-
- # _OPT_* as parsed from groffer command line
- _OPT_ALL='no';
- _OPT_APROPOS='no';
- _OPT_BD='';
- _OPT_BG='';
- _OPT_BW='';
- _OPT_DEFAULT_MODES='';
- _OPT_DEVICE='';
- _OPT_DISPLAY='';
- _OPT_DO_NOTHING='no';
- _OPT_FG='';
- _OPT_FN='';
- _OPT_GEOMETRY='';
- _OPT_ICONIC='no';
- _OPT_LANG='';
- _OPT_LOCATION='no';
- _OPT_MODE='';
- _OPT_MANPATH='';
- _OPT_PAGER='';
- _OPT_RESOLUTION='';
- _OPT_RV='no';
- _OPT_SECTIONS='';
- _OPT_SYSTEMS='';
- _OPT_TITLE='';
- _OPT_TEXT_DEVICE='';
- _OPT_V='no';
- _OPT_VIEWER_DVI='';
- _OPT_VIEWER_PDF='';
- _OPT_VIEWER_PS='';
- _OPT_VIEWER_HTML='';
- _OPT_VIEWER_X='';
- _OPT_WHATIS='no';
- _OPT_XRM='';
- _OPT_Z='no';
- _VIEWER_TERMINAL='no';
-}
-
-reset;
-
-
-########################################################################
-# Functions for error handling and debugging
-########################################################################
-
-
-##############
-# echo1 (<text>*)
-#
-# Output to stdout.
-#
-# Arguments : arbitrary text including `-'.
-#
-echo1()
-{
- cat <<EOF
-$@
-EOF
-}
-
-
-##############
-# echo2 (<text>*)
-#
-# Output to stderr.
-#
-# Arguments : arbitrary text.
-#
-echo2()
-{
- cat >&2 <<EOF
-$@
-EOF
-}
-
-
-##############
-# landmark (<text>)
-#
-# Print <text> to standard error as a debugging aid.
-#
-# Globals: $_DEBUG_LM
-#
-landmark()
-{
- if test _"${_DEBUG_LM}"_ = _yes_
- then
- echo2 "LM: $*";
- fi;
-}
-
-landmark "1: debugging functions";
-
-
-##############
-# clean_up ()
-#
-# Clean up at exit.
-#
-clean_up()
-{
- cd "${_START_DIR}" >"${_NULL_DEV}" 2>&1;
- if test _${_DEBUG_KEEP_FILES}_ = _yes_
- then
- echo2 "Kept temporary directory ${_TMP_DIR}."
- else
- if test _"${_TMP_DIR}"_ != __
- then
- if test -d "${_TMP_DIR}" || test -f "${_TMP_DIR}"
- then
- rm -f -r "${_TMP_DIR}" >${_NULL_DEV} 2>&1;
- fi;
- fi;
- fi;
-}
-
-
-#############
-# diag (text>*)
-#
-# Output a diagnostic message to stderr
-#
-diag()
-{
- echo2 '>>>>>'"$*";
-}
-
-
-#############
-# error (<text>*)
-#
-# Print an error message to standard error, print the function stack,
-# exit with an error condition. The argument should contain the name
-# of the function from which it was called. This is for system errors.
-#
-error()
-{
- case "$#" in
- 1) echo2 'groffer error: '"$1"; ;;
- *) echo2 'groffer error: wrong number of arguments in error().'; ;;
- esac;
- func_stack_dump;
- if test _"${_TMP_DIR}"_ != __ && test -d "${_TMP_DIR}"
- then
- : >"${_TMP_DIR}"/,error;
- fi;
- exit "${_ERROR}";
-}
-
-
-#############
-# error_user (<text>*)
-#
-# Print an error message to standard error; exit with an error condition.
-# The error is supposed to be produce by the user. So the funtion stack
-# is omitted.
-#
-error_user()
-{
- case "$#" in
- 1)
- echo2 'groffer error: '"$1";
- ;;
- *)
- echo2 'groffer error: wrong number of arguments in error_user().';
- ;;
- esac;
- if test _"${_DEBUG_USER_WITH_STACK}"_ = _yes_
- then
- func_stack_dump;
- fi;
- if test _"${_TMP_DIR}"_ != __ && test -d "${_TMP_DIR}"
- then
- : >"${_TMP_DIR}"/,error;
- fi;
- exit "${_ERROR}";
-}
-
-
-#############
-# exit_test ()
-#
-# Test whether the former command ended with error(). Exit again.
-#
-# Globals: $_ERROR
-#
-exit_test()
-{
- if test "$?" = "${_ERROR}"
- then
- exit ${_ERROR};
- fi;
- if test _"${_TMP_DIR}"_ != __ && test -f "${_TMP_DIR}"/,error
- then
- exit ${_ERROR};
- fi;
-}
-
-
-#############
-# func_check (<func_name> <rel_op> <nr_args> "$@")
-#
-# Check number of arguments and register to _FUNC_STACK.
-#
-# Arguments: >=3
-# <func_name>: name of the calling function.
-# <rel_op>: a relational operator: = != < > <= >=
-# <nr_args>: number of arguments to be checked against <operator>
-# "$@": the arguments of the calling function.
-#
-# Variable prefix: fc
-#
-func_check()
-{
- if test "$#" -lt 3
- then
- error 'func_check() needs at least 3 arguments.';
- fi;
- fc_fname="$1";
- case "$3" in
- 1)
- fc_nargs="$3";
- fc_s='';
- ;;
- 0|[2-9])
- fc_nargs="$3";
- fc_s='s';
- ;;
- *)
- error "func_check(): third argument must be a digit.";
- ;;
- esac;
- case "$2" in
- '='|'-eq')
- fc_op='-eq';
- fc_comp='exactly';
- ;;
- '>='|'-ge')
- fc_op='-ge';
- fc_comp='at least';
- ;;
- '<='|'-le')
- fc_op='-le';
- fc_comp='at most';
- ;;
- '<'|'-lt')
- fc_op='-lt';
- fc_comp='less than';
- ;;
- '>'|'-gt')
- fc_op='-gt';
- fc_comp='more than';
- ;;
- '!='|'-ne')
- fc_op='-ne';
- fc_comp='not';
- ;;
- *)
- error \
- 'func_check(): second argument is not a relational operator.';
- ;;
- esac;
- shift;
- shift;
- shift;
- if test "$#" "${fc_op}" "${fc_nargs}"
- then
- do_nothing;
- else
- error "func_check(): \
-${fc_fname}"'() needs '"${fc_comp} ${fc_nargs}"' argument'"${fc_s}"'.';
- fi;
- func_push "${fc_fname}";
- if test _"${_DEBUG_STACKS}"_ = _yes_
- then
- echo2 '+++ '"${fc_fname} $@";
- echo2 '>>> '"${_FUNC_STACK}";
- fi;
- eval ${_UNSET} fc_comp;
- eval ${_UNSET} fc_fname;
- eval ${_UNSET} fc_nargs;
- eval ${_UNSET} fc_op;
- eval ${_UNSET} fc_s;
-}
-
-
-#############
-# func_pop ()
-#
-# Retrieve the top element from the stack.
-#
-# The stack elements are separated by `!'; the popped element is
-# identical to the original element, except that all `!' characters
-# were removed.
-#
-# Arguments: 1
-#
-func_pop()
-{
- if test "$#" -ne 0
- then
- error 'func_pop() does not have arguments.';
- fi;
- case "${_FUNC_STACK}" in
- '')
- if test _"${_DEBUG_STACKS}"_ = _yes_
- then
- error 'func_pop(): stack is empty.';
- fi;
- ;;
- *!*)
- # split at first bang `!'.
- _FUNC_STACK="$(echo1 "${_FUNC_STACK}" | sed -e 's/^[^!]*!//')";
- exit_test;
- ;;
- *)
- _FUNC_STACK='';
- ;;
- esac;
- if test _"${_DEBUG_STACKS}"_ = _yes_
- then
- echo2 '<<< '"${_FUNC_STACK}";
- fi;
-}
-
-
-#############
-# func_push (<element>)
-#
-# Store another element to stack.
-#
-# The stack elements are separated by `!'; if <element> contains a `!'
-# it is removed first.
-#
-# Arguments: 1
-#
-# Variable prefix: fp
-#
-func_push()
-{
- if test "$#" -ne 1
- then
- error 'func_push() needs 1 argument.';
- fi;
- case "$1" in
- *'!'*)
- # remove all bangs `!'.
- fp_element="$(echo1 "$1" | sed -e 's/!//g')";
- exit_test;
- ;;
- *)
- fp_element="$1";
- ;;
- esac;
- if test _"${_FUNC_STACK}"_ = __
- then
- _FUNC_STACK="${fp_element}";
- else
- _FUNC_STACK="${fp_element}!${_FUNC_STACK}";
- fi;
- eval ${_UNSET} fp_element;
-}
-
-
-#############
-# func_stack_dump ()
-#
-# Print the content of the stack. Ignore the arguments.
-#
-func_stack_dump()
-{
- diag 'call stack: '"${_FUNC_STACK}";
-}
-
-
-########################################################################
-# System Test
-########################################################################
-
-landmark "2: system test";
-
-# Test the availability of the system utilities used in this script.
-
-
-########################################################################
-# Test of function `sed'.
-#
-
-if test _"$(echo xTesTx \
- | sed -e 's/^.\([Tt]e*x*sTT*\).*$/\1/' \
- | sed -e 's|T|t|g')"_ != _test_
-then
- error 'Test of "sed" command failed.';
-fi;
-
-
-########################################################################
-# Test of function `cat'.
-#
-if test _"$(echo test | cat)"_ != _test_
-then
- error 'Test of "cat" command failed.';
-fi;
-
-
-########################################################################
-# Test for compression.
-#
-if test _"$(echo 'test' | gzip -c -d -f - 2>${_NULL_DEV})"_ = _test_
-then
- _HAS_COMPRESSION='yes';
- if echo1 'test' | bzip2 -c 2>${_NULL_DEV} | bzip2 -t 2>${_NULL_DEV} \
- && test _"$(echo 'test' | bzip2 -c 2>${_NULL_DEV} \
- | bzip2 -d -c 2>${_NULL_DEV})"_ \
- = _test_
- then
- _HAS_BZIP='yes';
- else
- _HAS_BZIP='no';
- fi;
-else
- _HAS_COMPRESSION='no';
- _HAS_BZIP='no';
-fi;
-
-
-########################################################################
-# Definition of normal Functions in alphabetical order
-########################################################################
-landmark "3: functions";
-
-########################################################################
-# apropos_filespec ()
-#
-# Setup for the --apropos* options
-#
-apropos_filespec()
-{
-
- func_check apropos_filespec '=' 0 "$@";
- if obj _OPT_APROPOS is_yes
- then
- eval to_tmp_line \
- "'.SH $(echo1 "${_FILESPEC_ARG}" | sed 's/[^\\]-/\\-/g')'";
- exit_test;
- if obj _APROPOS_PROG is_empty
- then
- error 'apropos_filespec: apropos_setup() must be run first.';
- fi;
- if obj _APROPOS_SECTIONS is_empty
- then
- if obj _OPT_SECTIONS is_empty
- then
- s='^.*(.*).*$';
- else
- s='^.*(['"$(echo1 "${_OPT_SECTIONS}" | sed -e 's/://g')"']';
- fi;
- else
- s='^.*(['"${_APROPOS_SECTIONS}"']';
- fi;
- eval "${_APROPOS_PROG}" "'${_FILESPEC_ARG}'" | \
- sed -n -e '
-/^'"${_FILESPEC_ARG}"': /p
-/'"$s"'/p
-' | \
- sort |\
- sed -e '
-s/^\(.* (..*)\) *- *\(.*\)$/\.br\n\.TP 15\n\.BR \1\n\2/
-' >>"${_TMP_CAT}";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# apropos_setup ()
-#
-# Setup for the --apropos* options
-#
-apropos_setup()
-{
- func_check apropos_setup '=' 0 "$@";
- if obj _OPT_APROPOS is_yes
- then
- if is_prog apropos
- then
- _APROPOS_PROG='apropos';
- elif is_prog man
- then
- if man --apropos man >${_NULL_DEV} 2>${_NULL_DEV}
- then
- _APROPOS_PROG='man --apropos';
- elif man -k man >${_NULL_DEV} 2>${_NULL_DEV}
- then
- _APROPOS_PROG='man -k';
- fi;
- fi;
- if obj _APROPOS_PROG is_empty
- then
- error 'apropos_setup: no apropos program available.';
- fi;
- to_tmp_line '.TH GROFFER APROPOS';
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# base_name (<path>)
-#
-# Get the file name part of <path>, i.e. delete everything up to last
-# `/' from the beginning of <path>. Remove final slashes, too, to get a
-# non-empty output.
-#
-# Arguments : 1
-# Output : the file name part (without slashes)
-#
-# Variable prefix: bn
-#
-base_name()
-{
- func_check base_name = 1 "$@";
- bn_name="$1";
- case "${bn_name}" in
- */)
- # delete all final slashes
- bn_name="$(echo1 "${bn_name}" | sed -e 's|//*$||')";
- exit_test;
- ;;
- esac;
- case "${bn_name}" in
- /|'')
- eval ${_UNSET} bn_name;
- eval "${return_bad}";
- ;;
- */*)
- # delete everything before and including the last slash `/'.
- echo1 "${bn_name}" | sed -e 's|^.*//*\([^/]*\)$|\1|';
- ;;
- *)
- obj bn_name echo1;
- ;;
- esac;
- eval ${_UNSET} bn_name;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# cat_z (<file>)
-#
-# Decompress if possible or just print <file> to standard output.
-#
-# gzip, bzip2, and .Z decompression is supported.
-#
-# Arguments: 1, a file name.
-# Output: the content of <file>, possibly decompressed.
-#
-if test _"${_HAS_COMPRESSION}"_ = _yes_
-then
- cat_z()
- {
- func_check cat_z = 1 "$@";
- case "$1" in
- '')
- error 'cat_z(): empty file name';
- ;;
- '-')
- error 'cat_z(): for standard input use save_stdin()';
- ;;
- esac;
- if obj _HAS_BZIP is_yes
- then
- if bzip2 -t "$1" 2>${_NULL_DEV}
- then
- bzip2 -c -d "$1" 2>${_NULL_DEV};
- eval "${return_ok}";
- fi;
- fi;
- gzip -c -d -f "$1" 2>${_NULL_DEV};
- eval "${return_ok}";
- }
-else
- cat_z()
- {
- func_check cat_z = 1 "$@";
- cat "$1";
- eval "${return_ok}";
- }
-fi;
-
-
-########################################################################
-# clean_up ()
-#
-# Do the final cleaning up before exiting; used by the trap calls.
-#
-# defined above
-
-
-########################################################################
-# diag (<text>*)
-#
-# Print marked message to standard error; useful for debugging.
-#
-# defined above
-
-
-########################################################################
-landmark '4: dirname()*';
-########################################################################
-
-#######################################################################
-# dirname_append (<dir> <name>)
-#
-# Append `name' to `dir' with clean handling of `/'.
-#
-# Arguments : 2
-# Output : the generated new directory name <dir>/<name>
-#
-dirname_append()
-{
- func_check dirname_append = 2 "$@";
- if is_empty "$1"
- then
- error "dir_append(): first argument is empty.";
- fi;
- if is_empty "$2"
- then
- echo1 "$1";
- else
- dirname_chop "$1"/"$2";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# dirname_chop (<name>)
-#
-# Remove unnecessary slashes from directory name.
-#
-# Argument: 1, a directory name.
-# Output: path without double, or trailing slashes.
-#
-# Variable prefix: dc
-#
-dirname_chop()
-{
- func_check dirname_chop = 1 "$@";
- # replace all multiple slashes by a single slash `/'.
- dc_res="$(echo1 "$1" | sed -e 's|///*|/|g')";
- exit_test;
- case "${dc_res}" in
- ?*/)
- # remove trailing slash '/';
- echo1 "${dc_res}" | sed -e 's|/$||';
- ;;
- *)
- obj dc_res echo1
- ;;
- esac;
- eval ${_UNSET} dc_res;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# do_filearg (<filearg>)
-#
-# Append the file, man-page, or standard input corresponding to the
-# argument to the temporary file. If this is compressed in the gzip
-# or Z format it is decompressed. A title element is generated.
-#
-# Argument either:
-# - name of an existing file.
-# - `-' to represent standard input (several times allowed).
-# - `man:name.(section)' the man-page for `name' in `section'.
-# - `man:name.section' the man-page for `name' in `section'.
-# - `man:name' the man-page for `name' in the lowest `section'.
-# - `name.section' the man-page for `name' in `section'.
-# - `name' the man-page for `name' in the lowest `section'.
-# Globals :
-# $_TMP_STDIN, $_MAN_ENABLE, $_MAN_IS_SETUP, $_OPT_MAN
-#
-# Output : none
-# Return : $_GOOD if found, ${_BAD} otherwise.
-#
-# Variable prefix: df
-#
-do_filearg()
-{
- func_check do_filearg = 1 "$@";
- df_filespec="$1";
- # store sequence into positional parameters
- case "${df_filespec}" in
- '')
- eval ${_UNSET} df_filespec;
- eval "${return_good}";
- ;;
- '-')
- register_file '-';
- eval ${_UNSET} df_filespec;
- eval "${return_good}";
- ;;
- */*) # with directory part; so no man search
- set 'File';
- ;;
- *)
- if obj _MAN_ENABLE is_yes
- then
- if obj _MAN_FORCE is_yes
- then
- set 'Manpage' 'File';
- else
- set 'File' 'Manpage';
- fi;
- else
- set 'File';
- fi;
- ;;
- esac;
- for i
- do
- case "$i" in
- File)
- if test -f "${df_filespec}"
- then
- if test -r "${df_filespec}"
- then
- register_file "${df_filespec}";
- eval ${_UNSET} df_filespec;
- eval ${_UNSET} df_no_man;
- eval "${return_good}";
- else
- echo2 "could not read \`${df_filespec}'";
- eval ${_UNSET} df_filespec;
- eval ${_UNSET} df_no_man;
- eval "${return_bad}";
- fi;
- else
- if obj df_no_man is_not_empty
- then
- if obj _OPT_WHATIS is_yes
- then
- to_tmp_line "This is neither a file nor a man page."
- else
- echo2 "\`${df_filespec}' is neither a file nor a man page."
- fi;
- fi;
- df_no_file=yes;
- continue;
- fi;
- ;;
- Manpage) # parse filespec as man page
- if obj _MAN_IS_SETUP is_not_yes
- then
- man_setup;
- fi;
- if man_do_filespec "${df_filespec}"
- then
- eval ${_UNSET} df_filespec;
- eval ${_UNSET} df_no_file;
- eval "${return_good}";
- else
- if obj df_no_file is_not_empty
- then
- if obj _OPT_WHATIS is_yes
- then
- to_tmp_line "This is neither a file nor a man page."
- else
- echo2 "\`${df_filespec}' is neither a file nor a man page."
- fi;
- fi;
- df_no_man=yes;
- continue;
- fi;
- ;;
- esac;
- done;
- eval ${_UNSET} df_filespec;
- eval ${_UNSET} df_no_file;
- eval ${_UNSET} df_no_man;
- eval "${return_bad}";
-} # do_filearg()
-
-
-########################################################################
-# do_nothing ()
-#
-# Dummy function.
-#
-do_nothing()
-{
- eval return "${_OK}";
-}
-
-
-########################################################################
-# echo2 (<text>*)
-#
-# Print to standard error with final line break.
-#
-# defined above
-
-
-########################################################################
-# error (<text>*)
-#
-# Print error message and exit with error code.
-#
-# defined above
-
-
-########################################################################
-# exit_test ()
-#
-# Test whether the former command ended with error(). Exit again.
-#
-# defined above
-
-
-########################################################################
-# func_check (<func_name> <rel_op> <nr_args> "$@")
-#
-# Check number of arguments and register to _FUNC_STACK.
-#
-# Arguments: >=3
-# <func_name>: name of the calling function.
-# <rel_op>: a relational operator: = != < > <= >=
-# <nr_args>: number of arguments to be checked against <operator>
-# "$@": the arguments of the calling function.
-#
-# defined above
-
-#########################################################################
-# func_pop ()
-#
-# Delete the top element from the function call stack.
-#
-# defined above
-
-
-########################################################################
-# func_push (<element>)
-#
-# Store another element to function call stack.
-#
-# defined above
-
-
-########################################################################
-# func_stack_dump ()
-#
-# Print the content of the stack.
-#
-# defined above
-
-
-########################################################################
-# get_first_essential (<arg>*)
-#
-# Retrieve first non-empty argument.
-#
-# Return : `1' if all arguments are empty, `0' if found.
-# Output : the retrieved non-empty argument.
-#
-# Variable prefix: gfe
-#
-get_first_essential()
-{
- func_check get_first_essential '>=' 0 "$@";
- if is_equal "$#" 0
- then
- eval "${return_ok}";
- fi;
- for i
- do
- gfe_var="$i";
- if obj gfe_var is_not_empty
- then
- obj gfe_var echo1;
- eval ${_UNSET} gfe_var;
- eval "${return_ok}";
- fi;
- done;
- eval ${_UNSET} gfe_var;
- eval "${return_bad}";
-}
-
-
-########################################################################
-landmark '5: is_*()';
-########################################################################
-
-########################################################################
-# is_dir (<name>)
-#
-# Test whether `name' is a directory.
-#
-# Arguments : 1
-# Return : `0' if arg1 is a directory, `1' otherwise.
-#
-is_dir()
-{
- func_check is_dir '=' 1 "$@";
- if test _"$1"_ != __ && test -d "$1" && test -r "$1"
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_empty (<string>)
-#
-# Test whether `string' is empty.
-#
-# Arguments : <=1
-# Return : `0' if arg1 is empty or does not exist, `1' otherwise.
-#
-is_empty()
-{
- func_check is_empty '=' 1 "$@";
- if test _"$1"_ = __
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_equal (<string1> <string2>)
-#
-# Test whether `string1' is equal to <string2>.
-#
-# Arguments : 2
-# Return : `0' both arguments are equal strings, `1' otherwise.
-#
-is_equal()
-{
- func_check is_equal '=' 2 "$@";
- if test _"$1"_ = _"$2"_
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_existing (<name>)
-#
-# Test whether `name' is an existing file or directory. Solaris 2.5 does
-# not have `test -e'.
-#
-# Arguments : 1
-# Return : `0' if arg1 exists, `1' otherwise.
-#
-is_existing()
-{
- func_check is_existing '=' 1 "$@";
- if test _"$1"_ = __
- then
- eval "${return_no}";
- fi;
- if test -f "$1" || test -d "$1" || test -c "$1"
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_file (<name>)
-#
-# Test whether `name' is a readable file.
-#
-# Arguments : 1
-# Return : `0' if arg1 is a readable file, `1' otherwise.
-#
-is_file()
-{
- func_check is_file '=' 1 "$@";
- if is_not_empty "$1" && test -f "$1" && test -r "$1"
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_non_empty_file (<file_name>)
-#
-# Test whether `file_name' is a non-empty existing file.
-#
-# Arguments : <=1
-# Return :
-# `0' if arg1 is a non-empty existing file
-# `1' otherwise
-#
-is_non_empty_file()
-{
- func_check is_non_empty_file '=' 1 "$@";
- if is_file "$1" && test -s "$1"
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_not_dir (<name>)
-#
-# Test whether `name' is not a readable directory.
-#
-# Arguments : 1
-# Return : `0' if arg1 is a directory, `1' otherwise.
-#
-is_not_dir()
-{
- func_check is_not_dir '=' 1 "$@";
- if is_dir "$1"
- then
- eval "${return_no}";
- fi;
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_empty (<string>)
-#
-# Test whether `string' is not empty.
-#
-# Arguments : <=1
-# Return : `0' if arg1 exists and is not empty, `1' otherwise.
-#
-is_not_empty()
-{
- func_check is_not_empty '=' 1 "$@";
- if is_empty "$1"
- then
- eval "${return_no}";
- fi;
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_equal (<string1> <string2>)
-#
-# Test whether `string1' differs from `string2'.
-#
-# Arguments : 2
-#
-is_not_equal()
-{
- func_check is_not_equal '=' 2 "$@";
- if is_equal "$1" "$2"
- then
- eval "${return_no}";
- fi
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_file (<filename>)
-#
-# Test whether `name' is a not readable file.
-#
-# Arguments : 1 (empty allowed)
-#
-is_not_file()
-{
- func_check is_not_file '=' 1 "$@";
- if is_file "$1"
- then
- eval "${return_no}";
- fi;
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_prog ([<name> [<arg>*]])
-#
-# Verify that arg is a not program in $PATH.
-#
-# Arguments : >=0 (empty allowed)
-# more args are ignored, this allows to specify progs with arguments
-#
-is_not_prog()
-{
- func_check is_not_prog '>=' 0 "$@";
- case "$#" in
- 0)
- eval "${return_yes}";
- ;;
- *)
- if where_is "$1" >${_NULL_DEV}
- then
- eval "${return_no}";
- fi;
- ;;
- esac
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_writable (<name>)
-#
-# Test whether `name' is a not a writable file or directory.
-#
-# Arguments : >=1 (empty allowed), more args are ignored
-#
-is_not_writable()
-{
- func_check is_not_writable '>=' 1 "$@";
- if is_writable "$1"
- then
- eval "${return_no}";
- fi;
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_not_X ()
-#
-# Test whether not running in X Window by checking $DISPLAY
-#
-is_not_X()
-{
- func_check is_X '=' 0 "$@";
- if obj DISPLAY is_empty
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_not_yes (<string>)
-#
-# Test whether `string' is not "yes".
-#
-# Arguments : 1
-#
-is_not_yes()
-{
- func_check is_not_yes = 1 "$@";
- if is_yes "$1"
- then
- eval "${return_no}";
- fi;
- eval "${return_yes}";
-}
-
-
-########################################################################
-# is_prog ([<name> [<arg>*]])
-#
-# Determine whether <name> is a program in $PATH
-#
-# Arguments : >=0 (empty allowed)
-# <arg>* are ignored, this allows to specify progs with arguments.
-#
-is_prog()
-{
- func_check is_prog '>=' 0 "$@";
- case "$#" in
- 0)
- eval "${return_no}";
- ;;
- *)
- if where_is "$1" >${_NULL_DEV}
- then
- eval "${return_yes}";
- fi;
- ;;
- esac
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_writable (<name>)
-#
-# Test whether `name' is a writable file or directory.
-#
-# Arguments : >=1 (empty allowed), more args are ignored
-#
-is_writable()
-{
- func_check is_writable '>=' 1 "$@";
- if test _"$1"_ = __
- then
- eval "${return_no}";
- fi;
- if test -r "$1"
- then
- if test -w "$1"
- then
- eval "${return_yes}";
- fi;
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_X ()
-#
-# Test whether running in X Window by checking $DISPLAY
-#
-is_X()
-{
- func_check is_X '=' 0 "$@";
- if obj DISPLAY is_not_empty
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# is_yes (<string>)
-#
-# Test whether `string' has value "yes".
-#
-# Return : `0' if arg1 is `yes', `1' otherwise.
-#
-is_yes()
-{
- func_check is_yes '=' 1 "$@";
- if is_equal "$1" 'yes'
- then
- eval "${return_yes}";
- fi;
- eval "${return_no}";
-}
-
-
-########################################################################
-# landmark ()
-#
-# Print debugging information on standard error if $_DEBUG_LM is `yes'.
-#
-# Globals: $_DEBUG_LM
-#
-# Defined in section `Debugging functions'.
-
-
-########################################################################
-# leave ([<code>])
-#
-# Clean exit without an error or with <code>.
-#
-leave()
-{
- clean_up;
- if test $# = 0
- then
- exit "${_OK}";
- else
- exit "$1";
- fi;
-}
-
-
-########################################################################
-landmark '6: list_*()';
-########################################################################
-#
-# `list' is an object class that represents an array or list. Its
-# data consists of space-separated single-quoted elements. So a list
-# has the form "'first' 'second' '...' 'last'". See list_append() for
-# more details on the list structure. The array elements of `list'
-# can be get by `eval set x "$list"; shift`.
-
-
-########################################################################
-# list_append (<list> <element>...)
-#
-# Arguments: >=2
-# <list>: a variable name for a list of single-quoted elements
-# <element>: some sequence of characters.
-# Output: none, but $<list> is set to
-# if <list> is empty: "'<element>' '...'"
-# otherwise: "$list '<element>' ..."
-#
-# Variable prefix: la
-#
-list_append()
-{
- func_check list_append '>=' 2 "$@";
- la_name="$1";
- eval la_list='"${'$1'}"';
- shift;
- for s
- do
- la_s="$s";
- case "${la_s}" in
- *\'*)
- # escape each single quote by replacing each
- # "'" (squote) by "'\''" (squote bslash squote squote);
- # note that the backslash must be doubled in the following `sed'
- la_element="$(echo1 "${la_s}" | sed -e 's/'"${_SQ}"'/&\\&&/g')";
- exit_test;
- ;;
- '')
- la_element="";
- ;;
- *)
- la_element="${la_s}";
- ;;
- esac;
- if obj la_list is_empty
- then
- la_list="'${la_element}'";
- else
- la_list="${la_list} '${la_element}'";
- fi;
- done;
- eval "${la_name}"='"${la_list}"';
- eval ${_UNSET} la_element;
- eval ${_UNSET} la_list;
- eval ${_UNSET} la_name;
- eval ${_UNSET} la_s;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# list_from_cmdline (<pre_name_of_opt_lists> [<cmdline_arg>...])
-#
-# Transform command line arguments into a normalized form.
-#
-# Options, option arguments, and file parameters are identified and
-# output each as a single-quoted argument of its own. Options and
-# file parameters are separated by a '--' argument.
-#
-# Arguments: >=1
-# <pre_name>: common part of a set of 4 environment variable names:
-# $<pre_name>_SHORT_NA: list of short options without an arg.
-# $<pre_name>_SHORT_ARG: list of short options that have an arg.
-# $<pre_name>_LONG_NA: list of long options without an arg.
-# $<pre_name>_LONG_ARG: list of long options that have an arg.
-# <cmdline_arg>...: the arguments from a command line, such as "$@",
-# the content of a variable, or direct arguments.
-#
-# Output: ['-[-]opt' ['optarg']]... '--' ['filename']...
-#
-# Example:
-# list_from_cmdline PRE 'a b' 'c' '' 'long' -a f1 -bcarg --long=larg f2
-# If $PRE_SHORT_NA, $PRE_SHORT_ARG, $PRE_LONG_NA, and $PRE_LONG_ARG are
-# none-empty option lists, this will result in printing:
-# '-a' '-b' '-c' 'arg' '--long' 'larg' '--' 'f1' 'f2'
-#
-# Use this function in the following way:
-# eval set x "$(args_norm PRE_NAME "$@")";
-# shift;
-# while test "$1" != '--'; do
-# case "$1" in
-# ...
-# esac;
-# shift;
-# done;
-# shift; #skip '--'
-# # all positional parameters ("$@") left are file name parameters.
-#
-# Variable prefix: lfc
-#
-list_from_cmdline()
-{
- func_check list_from_cmdline '>=' 1 "$@";
- lfc_short_n="$(obj_data "$1"_SHORT_NA)"; # short options, no argument
- lfc_short_a="$(obj_data "$1"_SHORT_ARG)"; # short options, with argument
- lfc_long_n="$(obj_data "$1"_LONG_NA)"; # long options, no argument
- lfc_long_a="$(obj_data "$1"_LONG_ARG)"; # long options, with argument
- exit_test;
- if obj lfc_short_n is_empty
- then
- error 'list_from_cmdline(): no $'"$1"'_SHORT_NA options.';
- fi;
- if obj lfc_short_a is_empty
- then
- error 'list_from_cmdline(): no $'"$1"'_SHORT_ARG options.';
- fi;
- if obj lfc_long_n is_empty
- then
- error 'list_from_cmdline(): no $'"$1"'_LONG_NA options.';
- fi;
- if obj lfc_long_a is_empty
- then
- error 'list_from_cmdline(): no $'"$1"'_LONG_ARG options.';
- fi;
-
- shift;
- if is_equal "$#" 0
- then
- echo1 --
- eval ${_UNSET} lfc_fparams;
- eval ${_UNSET} lfc_short_a;
- eval ${_UNSET} lfc_short_n;
- eval ${_UNSET} lfc_long_a;
- eval ${_UNSET} lfc_long_n;
- eval ${_UNSET} lfc_result;
- eval "${return_ok}";
- fi;
-
- lfc_fparams='';
- lfc_result='';
- while test "$#" -ge 1
- do
- lfc_arg="$1";
- shift;
- case "${lfc_arg}" in
- --) break; ;;
- --*=*)
- # delete leading '--';
- lfc_abbrev="$(echo1 "${lfc_arg}" | sed -e 's/^--//')";
- lfc_with_equal="${lfc_abbrev}";
- # extract option by deleting from the first '=' to the end
- lfc_abbrev="$(echo1 "${lfc_with_equal}" | \
- sed -e 's/^\([^=]*\)=.*$/\1/')";
- lfc_opt="$(list_single_from_abbrev lfc_long_a "${lfc_abbrev}")";
- exit_test;
- if obj lfc_opt is_empty
- then
- error_user "--${lfc_abbrev} is not an option.";
- else
- # get the option argument by deleting up to first `='
- lfc_optarg="$(echo1 "${lfc_with_equal}" | sed -e 's/^[^=]*=//')";
- exit_test;
- list_append lfc_result "--${lfc_opt}" "${lfc_optarg}";
- continue;
- fi;
- ;;
- --*)
- # delete leading '--';
- lfc_abbrev="$(echo1 "${lfc_arg}" | sed -e 's/^--//')";
- if list_has lfc_long_n "${lfc_abbrev}"
- then
- lfc_opt="${lfc_abbrev}";
- else
- exit_test;
- lfc_opt="$(list_single_from_abbrev lfc_long_n "${lfc_abbrev}")";
- exit_test;
- if obj lfc_opt is_not_empty && is_not_equal "$#" 0
- then
- a="$(list_single_from_abbrev lfc_long_a "${lfc_abbrev}")";
- exit_test;
- if obj a is_not_empty
- then
- error_user "The abbreviation ${lfc_arg} \
-has multiple options: --${lfc_opt} and --${a}.";
- fi;
- fi;
- fi;
- if obj lfc_opt is_not_empty
- then
- # long option, no argument
- list_append lfc_result "--${lfc_opt}";
- continue;
- fi;
- lfc_opt="$(list_single_from_abbrev lfc_long_a "${lfc_abbrev}")";
- exit_test;
- if obj lfc_opt is_not_empty
- then
- # long option with argument
- if test "$#" -le 0
- then
- error_user "no argument for option --${lfc_opt}."
- fi;
- list_append lfc_result "--${lfc_opt}" "$1";
- shift;
- continue;
- fi;
- error_user "${lfc_arg} is not an option.";
- ;;
- -?*) # short option (cluster)
- # delete leading `-';
- lfc_rest="$(echo1 "${lfc_arg}" | sed -e 's/^-//')";
- exit_test;
- while obj lfc_rest is_not_empty
- do
- # get next short option from cluster (first char of $lfc_rest)
- lfc_optchar="$(echo1 "${lfc_rest}" | sed -e 's/^\(.\).*$/\1/')";
- # remove first character from ${lfc_rest};
- lfc_rest="$(echo1 "${lfc_rest}" | sed -e 's/^.//')";
- exit_test;
- if list_has lfc_short_n "${lfc_optchar}"
- then
- list_append lfc_result "-${lfc_optchar}";
- continue;
- elif list_has lfc_short_a "${lfc_optchar}"
- then
- if obj lfc_rest is_empty
- then
- if test "$#" -ge 1
- then
- list_append lfc_result "-${lfc_optchar}" "$1";
- shift;
- continue;
- else
- error_user "no argument for option -${lfc_optchar}.";
- fi;
- else # rest is the argument
- list_append lfc_result "-${lfc_optchar}" "${lfc_rest}";
- lfc_rest='';
- continue;
- fi;
- else
- error_user "unknown option -${lfc_optchar}.";
- fi;
- done;
- ;;
- *)
- # Here, $lfc_arg is not an option, so a file parameter.
- list_append lfc_fparams "${lfc_arg}";
-
- # Ignore the strange POSIX option handling to end option
- # parsing after the first file name argument. To reuse it, do
- # a `break' here if $POSIXLY_CORRECT of `bash' is not empty.
- # When `bash' is called as `sh' $POSIXLY_CORRECT is set
- # automatically to `y'.
- ;;
- esac;
- done;
- list_append lfc_result '--';
- if obj lfc_fparams is_not_empty
- then
- lfc_result="${lfc_result} ${lfc_fparams}";
- fi;
- if test "$#" -gt 0
- then
- list_append lfc_result "$@";
- fi;
- obj lfc_result echo1;
- eval ${_UNSET} lfc_abbrev;
- eval ${_UNSET} lfc_fparams;
- eval ${_UNSET} lfc_short_a;
- eval ${_UNSET} lfc_short_n;
- eval ${_UNSET} lfc_long_a;
- eval ${_UNSET} lfc_long_n;
- eval ${_UNSET} lfc_result;
- eval ${_UNSET} lfc_arg;
- eval ${_UNSET} lfc_opt;
- eval ${_UNSET} lfc_opt_arg;
- eval ${_UNSET} lfc_opt_char;
- eval ${_UNSET} lfc_with_equal;
- eval ${_UNSET} lfc_rest;
- eval "${return_ok}";
-} # list_from_cmdline()
-
-
-########################################################################
-# list_from_split (<string> <separator>)
-#
-# In <string>, escape all white space characters and replace each
-# <separator> by space.
-#
-# Arguments: 2: a <string> that is to be split into parts divided by
-# <separator>
-# Output: the resulting list string
-#
-# Variable prefix: lfs
-#
-list_from_split()
-{
- func_check list_from_split = 2 "$@";
-
- # precede each space or tab by a backslash `\' (doubled for `sed')
- lfs_s="$(echo1 "$1" | sed -e 's/\('"${_SPACE_SED}"'\)/\\\1/g')";
- exit_test;
-
- # replace split character of string by the list separator ` ' (space).
- case "$2" in
- /) # cannot use normal `sed' separator
- echo1 "${lfs_s}" | sed -e 's|'"$2"'| |g';
- ;;
- ?) # use normal `sed' separator
- echo1 "${lfs_s}" | sed -e 's/'"$2"'/ /g';
- ;;
- ??*)
- error 'list_from_split(): separator must be a single character.';
- ;;
- esac;
- eval ${_UNSET} lfs_s;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# list_get (<list>)
-#
-# Check whether <list> is a space-separated list of '-quoted elements.
-#
-# If the test fails an error is raised.
-# If the test succeeds the argument is echoed.
-#
-# Testing criteria:
-# A list has the form "'first' 'second' '...' 'last'". So it has a
-# leading and a final quote and the elements are separated by "' '"
-# constructs. If these are all removed there should not be any
-# unescaped single-quotes left. Watch out for escaped single
-# quotes; they have the form '\'' (sq bs sq sq).
-
-# Arguments: 1
-# Output: the argument <list> unchanged, if the check succeeded.
-#
-# Variable prefix: lg
-#
-list_get()
-{
- func_check list_get = 1 "$@";
- eval lg_list='"${'$1'}"';
- # remove leading and final space characters
- lg_list="$(echo1 "${lg_list}" | sed -e '
-s/^'"${_SPACE_SED}"'*//
-s/'"${_SPACE_SED}"'*$//
-')";
- exit_test;
- case "${lg_list}" in
- '')
- eval ${_UNSET} lg_list;
- eval "${return_ok}";
- ;;
- \'*\')
- obj lg_list echo1;
- eval ${_UNSET} lg_list;
- eval "${return_ok}";
- ;;
- *)
- error "list_get(): bad list: $1"
- ;;
- esac;
- eval ${_UNSET} lg_list;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# list_has (<var_name> <element>)
-#
-# Test whether the list <var_name> has the element <element>.
-#
-# Arguments: 2
-# <var_name>: a variable name for a list of single-quoted elements
-# <element>: some sequence of characters.
-#
-# Variable prefix: lh
-#
-list_has()
-{
- func_check list_has = 2 "$@";
- eval lh_list='"${'$1'}"';
- if obj lh_list is_empty
- then
- eval "${_UNSET}" lh_list;
- eval "${return_no}";
- fi;
- case "$2" in
- \'*\') lh_element=" $2 "; ;;
- *) lh_element=" '$2' "; ;;
- esac;
- if string_contains " ${lh_list} " "${lh_element}"
- then
- eval "${_UNSET}" lh_list;
- eval "${_UNSET}" lh_element;
- eval "${return_yes}";
- else
- eval "${_UNSET}" lh_list;
- eval "${_UNSET}" lh_element;
- eval "${return_no}";
- fi;
-}
-
-
-########################################################################
-# list_has_abbrev (<var_name> <abbrev>)
-#
-# Test whether the list <var_name> has an element starting with <abbrev>.
-#
-# Arguments: 2
-# <var_name>: a variable name for a list of single-quoted elements
-# <abbrev>: some sequence of characters.
-#
-# Variable prefix: lha
-#
-list_has_abbrev()
-{
- func_check list_has_abbrev = 2 "$@";
- eval lha_list='"${'$1'}"';
- if obj lha_list is_empty
- then
- eval "${_UNSET}" lha_list;
- eval "${return_no}";
- fi;
- case "$2" in
- \'*)
- lha_element="$(echo1 "$2" | sed -e 's/'"${_SQ}"'$//')";
- exit_test;
- ;;
- *) lha_element="'$2"; ;;
- esac;
- if string_contains " ${lha_list}" " ${lha_element}"
- then
- eval "${_UNSET}" lha_list;
- eval "${_UNSET}" lha_element;
- eval "${return_yes}";
- else
- eval "${_UNSET}" lha_list;
- eval "${_UNSET}" lha_element;
- eval "${return_no}";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# list_has_not (<list> <element>)
-#
-# Test whether <list> has no <element>.
-#
-# Arguments: 2
-# <list>: a space-separated list of single-quoted elements.
-# <element>: some sequence of characters.
-#
-# Variable prefix: lhn
-#
-list_has_not()
-{
- func_check list_has_not = 2 "$@";
- eval lhn_list='"${'$1'}"';
- if obj lhn_list is_empty
- then
- eval "${_UNSET}" lhn_list;
- eval "${return_yes}";
- fi;
- case "$2" in
- \'*\') lhn_element=" $2 "; ;;
- *) lhn_element=" '$2' "; ;;
- esac;
- if string_contains " ${lhn_list} " "${lhn_element}"
- then
- eval "${_UNSET}" lhn_list;
- eval "${_UNSET}" lhn_element;
- eval "${return_no}";
- else
- eval "${_UNSET}" lhn_list;
- eval "${_UNSET}" lhn_element;
- eval "${return_yes}";
- fi;
-}
-
-
-########################################################################
-# list_single_from_abbrev (<list> <abbrev>)
-#
-# Check whether the list has an element starting with <abbrev>. If
-# there are more than a single element an error is created.
-#
-# Arguments: 2
-# <list>: a variable name for a list of single-quoted elements
-# <abbrev>: some sequence of characters.
-#
-# Output: the found element.
-#
-# Variable prefix: lsfa
-#
-list_single_from_abbrev()
-{
- func_check list_single_from_abbrev = 2 "$@";
- eval lsfa_list='"${'$1'}"';
- if obj lsfa_list is_empty
- then
- eval "${_UNSET}" lsfa_list;
- eval "${return_no}";
- fi;
- lsfa_abbrev="$2";
- if list_has lsfa_list "${lsfa_abbrev}"
- then
- obj lsfa_abbrev echo1;
- eval "${_UNSET}" lsfa_abbrev;
- eval "${_UNSET}" lsfa_list;
- eval "${return_yes}";
- fi;
- if list_has_abbrev lsfa_list "${lsfa_abbrev}"
- then
- lsfa_element='';
- eval set x "${lsfa_list}";
- shift;
- for i
- do
- case "$i" in
- ${lsfa_abbrev}*)
- if obj lsfa_element is_not_empty
- then
- error_user "The abbreviation --${lsfa_abbrev} \
-has multiple options: --${lsfa_element} and --${i}.";
- fi;
- lsfa_element="$i";
- ;;
- esac;
- done;
- obj lsfa_element echo1;
- eval "${_UNSET}" lsfa_abbrev;
- eval "${_UNSET}" lsfa_element;
- eval "${_UNSET}" lsfa_list;
- eval "${return_yes}";
- else
- eval "${_UNSET}" lsfa_abbrev;
- eval "${_UNSET}" lsfa_element;
- eval "${_UNSET}" lsfa_list;
- eval "${return_no}";
- fi;
-}
-
-
-########################################################################
-landmark '7: man_*()';
-########################################################################
-
-########################################################################
-# man_do_filespec (<filespec>)
-#
-# Print suitable man page(s) for filespec to $_TMP_CAT.
-#
-# Arguments : 2
-# <filespec>: argument of the form `man:name.section', `man:name',
-# `man:name(section)', `name.section', `name'.
-#
-# Globals : $_OPT_ALL
-#
-# Output : none.
-# Return : `0' if man page was found, `1' else.
-#
-# Only called from do_fileargs(), checks on $MANPATH and $_MAN_ENABLE
-# are assumed (see man_setup()).
-#
-# Variable prefix: mdf
-#
-man_do_filespec()
-{
- func_check man_do_filespec = 1 "$@";
- if obj _MAN_PATH is_empty
- then
- eval "${return_bad}";
- fi;
- if is_empty "$1"
- then
- eval "${return_bad}";
- fi;
- mdf_spec="$1";
- mdf_name='';
- mdf_section='';
- case "${mdf_spec}" in
- */*) # not a man spec with containing '/'
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_bad}";
- ;;
- man:?*\(?*\)) # man:name(section)
- mdf_name="$(echo1 "${mdf_spec}" \
- | sed -e 's/^man:\(..*\)(\(..*\))$/\1/')";
- mdf_section="$(echo1 "${mdf_spec}" \
- | sed -e 's/^man:\(..*\)(\(..*\))$/\2/')";
- exit_test;
- ;;
- man:?*.${_MAN_AUTO_SEC_CHARS}) # man:name.section
- mdf_name="$(echo1 "${mdf_spec}" \
- | sed -e 's/^man:\(..*\)\..$/\1/')";
- mdf_section="$(echo1 "${mdf_spec}" \
- | sed -e 's/^.*\(.\)$/\1/')";
- exit_test;
- ;;
- man:?*) # man:name
- mdf_name="$(echo1 "${mdf_spec}" | sed -e 's/^man://')";
- exit_test;
- ;;
- ?*\(?*\)) # name(section)
- mdf_name="$(echo1 "${mdf_spec}" \
- | sed -e 's/^\(..*\)(\(..*\))$/\1/')";
- mdf_section="$(echo1 "${mdf_spec}" \
- | sed -e 's/^\(..*\)(\(..*\))$/\2/')";
- exit_test;
- ;;
- ?*.${_MAN_AUTO_SEC_CHARS}) # name.section
- mdf_name="$(echo1 "${mdf_spec}" \
- | sed -e 's/^\(..*\)\..$/\1/')";
- mdf_section="$(echo1 "${mdf_spec}" \
- | sed -e 's/^.*\(.\)$/\1/')";
- exit_test;
- ;;
- ?*)
- mdf_name="${mdf_spec}";
- ;;
- esac;
- if obj mdf_name is_empty
- then
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_bad}";
- fi;
- mdf_got_one='no';
- if obj mdf_section is_empty
- then
- if obj _OPT_SECTIONS is_empty
- then
- eval set x "${_MAN_AUTO_SEC_LIST}";
- else
- # use --sections when no section is given to filespec
- eval set x "$(echo1 "${_OPT_SECTIONS}" | sed -e 's/:/ /g')";
- fi;
- shift;
- for s
- do
- mdf_s="$s";
- if man_search_section "${mdf_name}" "${mdf_s}"
- then # found
- if obj _MAN_ALL is_yes
- then
- mdf_got_one='yes';
- else
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_s;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_good}";
- fi;
- fi;
- done;
- else
- if man_search_section "${mdf_name}" "${mdf_section}"
- then
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_s;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_good}";
- else
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_bad}";
- fi;
- fi;
- if obj _MAN_ALL is_yes && obj mdf_got_one is_yes
- then
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_s;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_good}";
- fi;
- eval ${_UNSET} mdf_got_one;
- eval ${_UNSET} mdf_name;
- eval ${_UNSET} mdf_s;
- eval ${_UNSET} mdf_section;
- eval ${_UNSET} mdf_spec;
- eval "${return_bad}";
-} # man_do_filespec()
-
-
-########################################################################
-# man_register_file (<file> <name> [<section>])
-#
-# Write a found man page file and register the title element.
-#
-# Arguments: 1, 2, or 3; maybe empty
-# Output: none
-#
-man_register_file()
-{
- func_check man_register_file '>=' 2 "$@";
- case "$#" in
- 2|3) do_nothing; ;;
- *)
- error "man_register_file() expects 2 or 3 arguments.";
- ;;
- esac;
- if is_empty "$1"
- then
- error 'man_register_file(): file name is empty';
- fi;
- to_tmp "$1";
- case "$#" in
- 2)
- register_title "man:$2";
- eval "${return_ok}";
- ;;
- 3)
- register_title "$2.$3";
- eval "${return_ok}";
- ;;
- esac;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# man_search_section (<name> <section>)
-#
-# Retrieve man pages.
-#
-# Arguments : 2
-# Globals : $_MAN_PATH, $_MAN_EXT
-# Return : 0 if found, 1 otherwise
-#
-# Variable prefix: mss
-#
-man_search_section()
-{
- func_check man_search_section = 2 "$@";
- if obj _MAN_PATH is_empty
- then
- eval "${return_bad}";
- fi;
- if is_empty "$1"
- then
- eval "${return_bad}";
- fi;
- if is_empty "$2"
- then
- eval "${return_bad}";
- fi;
- mss_name="$1";
- mss_section="$2";
- eval set x "$(path_split "${_MAN_PATH}")";
- exit_test;
- shift;
- mss_got_one='no';
- if obj _MAN_EXT is_empty
- then
- for d
- do
- mss_dir="$(dirname_append "$d" "man${mss_section}")";
- exit_test;
- if obj mss_dir is_dir
- then
- mss_prefix="$(\
- dirname_append "${mss_dir}" "${mss_name}.${mss_section}")";
- if obj _OPT_WHATIS is_yes
- then
- mss_files="$(eval ls "${mss_prefix}"'*' 2>${_NULL_DEV} |
- sed -e '\| found|s|.*||'
- )";
- else
- mss_files="$(eval ls "'${mss_prefix}'"'*' 2>${_NULL_DEV} |
- sed -e '\| found|s|.*||'
- )";
- fi;
- exit_test;
- if obj mss_files is_not_empty
- then
- # for f in $mss_files
- for f in $(eval set x ${mss_files}; shift; echo1 "$@")
- do
- exit_test;
- mss_f="$f";
- if obj mss_f is_file
- then
- if is_yes "${mss_got_one}"
- then
- register_file "${mss_f}";
- elif obj _MAN_ALL is_yes
- then
- man_register_file "${mss_f}" "${mss_name}";
- else
- man_register_file "${mss_f}" "${mss_name}" "${mss_section}";
- eval ${_UNSET} mss_dir;
- eval ${_UNSET} mss_ext;
- eval ${_UNSET} mss_f;
- eval ${_UNSET} mss_files;
- eval ${_UNSET} mss_got_one;
- eval ${_UNSET} mss_name;
- eval ${_UNSET} mss_prefix;
- eval ${_UNSET} mss_section;
- eval "${return_good}";
- fi;
- mss_got_one='yes';
- fi;
- done;
- fi;
- fi;
- done;
- else
- mss_ext="${_MAN_EXT}";
- # check for directory name having trailing extension
- for d
- do
- mss_dir="$(dirname_append $d man${mss_section}${mss_ext})";
- exit_test;
- if obj mss_dir is_dir
- then
- mss_prefix=\
- "$(dirname_append "${mss_dir}" "${mss_name}.${mss_section}")";
- mss_files="$( eval ls "${mss_prefix}"'*' 2>${_NULL_DEV} |
- sed -e '\|not found|s|.*||'
- )";
- exit_test;
- if obj mss_files is_not_empty
- then
- # for f in $mss_files
- for f in $(eval set x ${mss_files}; shift; echo1 "$@")
- do
- mss_f="$f";
- if obj mss_f is_file
- then
- if is_yes "${mss_got_one}"
- then
- register_file "${mss_f}";
- elif obj _MAN_ALL is_yes
- then
- man_register_file "${mss_f}" "${mss_name}";
- else
- man_register_file "${mss_f}" "${mss_name}" "${mss_section}";
- eval ${_UNSET} mss_dir;
- eval ${_UNSET} mss_ext;
- eval ${_UNSET} mss_f;
- eval ${_UNSET} mss_files;
- eval ${_UNSET} mss_got_one;
- eval ${_UNSET} mss_name;
- eval ${_UNSET} mss_prefix;
- eval ${_UNSET} mss_section;
- eval "${return_good}";
- fi;
- mss_got_one='yes';
- fi;
- done;
- fi;
- fi;
- done;
- # check for files with extension in directories without extension
- for d
- do
- mss_dir="$(dirname_append "$d" "man${mss_section}")";
- exit_test;
- if obj mss_dir is_dir
- then
- mss_prefix="$(dirname_append "${mss_dir}" \
- "${mss_name}.${mss_section}${mss_ext}")";
- mss_files="$(eval ls "${mss_prefix}"'*' 2>${_NULL_DEV} |
- sed -e '\|not found|s|.*||'
- )";
- exit_test;
- if obj mss_files is_not_empty
- then
- # for f in $mss_files
- for f in $(eval set x ${mss_files}; shift; echo1 "$@")
- do
- mss_f="$f";
- if obj mss_f is_file
- then
- if is_yes "${mss_got_one}"
- then
- register_file "${mss_f}";
- elif obj _MAN_ALL is_yes
- then
- man_register_file "${mss_f}" "${mss_name}";
- else
- man_register_file "${mss_f}" "${mss_name}" "${mss_section}";
- eval ${_UNSET} mss_dir;
- eval ${_UNSET} mss_ext;
- eval ${_UNSET} mss_f;
- eval ${_UNSET} mss_files;
- eval ${_UNSET} mss_got_one;
- eval ${_UNSET} mss_name;
- eval ${_UNSET} mss_prefix;
- eval ${_UNSET} mss_section;
- eval "${return_good}";
- fi;
- mss_got_one='yes';
- fi;
- done;
- fi;
- fi;
- done;
- fi;
- if obj _MAN_ALL is_yes && is_yes "${mss_got_one}"
- then
- eval ${_UNSET} mss_dir;
- eval ${_UNSET} mss_ext;
- eval ${_UNSET} mss_f;
- eval ${_UNSET} mss_files;
- eval ${_UNSET} mss_got_one;
- eval ${_UNSET} mss_name;
- eval ${_UNSET} mss_prefix;
- eval ${_UNSET} mss_section;
- eval "${return_good}";
- fi;
- eval ${_UNSET} mss_dir;
- eval ${_UNSET} mss_ext;
- eval ${_UNSET} mss_f;
- eval ${_UNSET} mss_files;
- eval ${_UNSET} mss_got_one;
- eval ${_UNSET} mss_name;
- eval ${_UNSET} mss_prefix;
- eval ${_UNSET} mss_section;
- eval "${return_bad}";
-} # man_search_section()
-
-
-########################################################################
-# man_setup ()
-#
-# Setup the variables $_MAN_* needed for man page searching.
-#
-# Globals:
-# in: $_OPT_*, $_MANOPT_*, $LANG, $LC_MESSAGES, $LC_ALL,
-# $MANPATH, $MANROFFSEQ, $MANSEC, $PAGER, $SYSTEM, $MANOPT.
-# out: $_MAN_PATH, $_MAN_LANG, $_MAN_SYS, $_MAN_LANG, $_MAN_LANG2,
-# $_MAN_SEC, $_MAN_ALL
-# in/out: $_MAN_ENABLE
-#
-# The precedence for the variables related to `man' is that of GNU
-# `man', i.e.
-#
-# $LANG; overridden by
-# $LC_MESSAGES; overridden by
-# $LC_ALL; this has the same precedence as
-# $MANPATH, $MANROFFSEQ, $MANSEC, $PAGER, $SYSTEM; overridden by
-# $MANOPT; overridden by
-# the groffer command line options.
-#
-# Variable prefix: ms
-#
-man_setup()
-{
- func_check main_man_setup = 0 "$@";
-
- if obj _MAN_IS_SETUP is_yes
- then
- eval "${return_ok}";
- fi;
- _MAN_IS_SETUP='yes';
-
- if obj _MAN_ENABLE is_not_yes
- then
- eval "${return_ok}";
- fi;
-
- # determine basic path for man pages
- _MAN_PATH="$(get_first_essential \
- "${_OPT_MANPATH}" "${_MANOPT_PATH}" "${MANPATH}")";
- exit_test;
- if obj _MAN_PATH is_empty
- then
- manpath_set_from_path;
- else
- _MAN_PATH="$(path_clean "${_MAN_PATH}")";
- exit_test;
- fi;
- if obj _MAN_PATH is_empty
- then
- if is_prog 'manpath'
- then
- _MAN_PATH="$(manpath 2>${_NULL_DEV})"; # not always available
- exit_test;
- fi;
- fi;
- if obj _MAN_PATH is_empty
- then
- _MAN_ENABLE="no";
- eval "${return_ok}";
- fi;
-
- _MAN_ALL="$(get_first_essential "${_OPT_ALL}" "${_MANOPT_ALL}")";
- exit_test;
- if obj _MAN_ALL is_empty
- then
- _MAN_ALL='no';
- fi;
-
- _MAN_SYS="$(get_first_essential \
- "${_OPT_SYSTEMS}" "${_MANOPT_SYS}" "${SYSTEM}")";
- ms_lang="$(get_first_essential \
- "${_OPT_LANG}" "${LC_ALL}" "${LC_MESSAGES}" "${LANG}")";
- exit_test;
- case "${ms_lang}" in
- C|POSIX)
- _MAN_LANG="";
- _MAN_LANG2="";
- ;;
- ?)
- _MAN_LANG="${ms_lang}";
- _MAN_LANG2="";
- ;;
- *)
- _MAN_LANG="${ms_lang}";
- # get first two characters of $ms_lang
- _MAN_LANG2="$(echo1 "${ms_lang}" | sed -e 's/^\(..\).*$/\1/')";
- exit_test;
- ;;
- esac;
- # from now on, use only $_LANG, forget about $_OPT_LANG, $LC_*.
-
- manpath_add_lang_sys; # this is very slow
-
- _MAN_SEC="$(get_first_essential \
- "${_OPT_SECT}" "${_MANOPT_SEC}" "${MANSEC}")";
- exit_test;
- if obj _MAN_PATH is_empty
- then
- _MAN_ENABLE="no";
- eval ${_UNSET} ms_lang;
- eval "${return_ok}";
- fi;
-
- _MAN_EXT="$(get_first_essential \
- "${_OPT_EXTENSION}" "${_MANOPT_EXTENSION}")";
- exit_test;
- eval ${_UNSET} ms_lang;
- eval "${return_ok}";
-} # man_setup()
-
-
-########################################################################
-landmark '8: manpath_*()';
-########################################################################
-
-########################################################################
-# manpath_add_lang_sys ()
-#
-# Add language and operating system specific directories to man path.
-#
-# Arguments : 0
-# Output : none
-# Globals:
-# in: $_MAN_SYS: has the form `os1,os2,...', a comma separated
-# list of names of operating systems.
-# $_MAN_LANG and $_MAN_LANG2: each a single name
-# in/out: $_MAN_PATH: has the form `dir1:dir2:...', a colon
-# separated list of directories.
-#
-# Variable prefix: mals
-#
-manpath_add_lang_sys()
-{
- func_check manpath_add_lang_sys = 0 "$@";
- if obj _MAN_PATH is_empty
- then
- eval "${return_ok}";
- fi;
- # twice test both sys and lang
- eval set x "$(path_split "${_MAN_PATH}")";
- shift;
- exit_test;
- mals_mp='';
- for p
- do # loop on man path directories
- mals_mp="$(_manpath_add_lang_sys_single "${mals_mp}" "$p")";
- exit_test;
- done;
- eval set x "$(path_split "${mals_mp}")";
- shift;
- exit_test;
- for p
- do # loop on man path directories
- mals_mp="$(_manpath_add_lang_sys_single "${mals_mp}" "$p")";
- exit_test;
- done;
- _MAN_PATH="$(path_chop "${mals_mp}")";
- exit_test;
- eval ${_UNSET} mals_mp;
- eval "${return_ok}";
-}
-
-
-# To the directory in $1 append existing sys/lang subdirectories
-# Function is necessary to split the OS list.
-#
-# globals: in: $_MAN_SYS, $_MAN_LANG, $_MAN_LANG2
-# argument: 2: `man_path' and `dir'
-# output: colon-separated path of the retrieved subdirectories
-#
-# Variable prefix: _mals
-#
-_manpath_add_lang_sys_single()
-{
- func_check _manpath_add_lang_sys_single = 2 "$@";
- _mals_res="$1";
- _mals_parent="$2";
- eval set x "$(list_from_split "${_MAN_SYS}" ',')";
- shift;
- exit_test;
- for d in "$@" "${_MAN_LANG}" "${_MAN_LANG2}"
- do
- _mals_dir="$(dirname_append "${_mals_parent}" "$d")";
- exit_test;
- if obj _mals_res path_not_contains "${_mals_dir}" && \
- obj _mals_dir is_dir
- then
- _mals_res="${_mals_res}:${_mals_dir}";
- fi;
- done;
- if path_not_contains "${_mals_res}" "${_mals_parent}"
- then
- _mals_res="${_mals_res}:${_mals_parent}";
- fi;
- path_chop "${_mals_res}";
- eval ${_UNSET} _mals_dir;
- eval ${_UNSET} _mals_parent;
- eval ${_UNSET} _mals_res;
- eval "${return_ok}";
-}
-
-# end manpath_add_lang_sys ()
-
-
-########################################################################
-# manpath_set_from_path ()
-#
-# Determine basic search path for man pages from $PATH.
-#
-# Return: `0' if a valid man path was retrieved.
-# Output: none
-# Globals:
-# in: $PATH
-# out: $_MAN_PATH
-#
-# Variable prefix: msfp
-#
-manpath_set_from_path()
-{
- func_check manpath_set_from_path = 0 "$@";
-
- msfp_manpath='';
-
- # get a basic man path from $PATH
- if obj PATH is_not_empty
- then
- eval set x "$(path_split "${PATH}")";
- shift;
- exit_test;
- for d
- do
- # delete the final `/bin' part
- msfp_base="$(echo1 "$d" | sed -e 's|//*bin/*$||')";
- exit_test;
- for e in /share/man /man
- do
- msfp_mandir="${msfp_base}$e";
- if test -d "${msfp_mandir}" && test -r "${msfp_mandir}"
- then
- msfp_manpath="${msfp_manpath}:${msfp_mandir}";
- fi;
- done;
- done;
- fi;
-
- # append some default directories
- for d in /usr/local/share/man /usr/local/man \
- /usr/share/man /usr/man \
- /usr/X11R6/man /usr/openwin/man \
- /opt/share/man /opt/man \
- /opt/gnome/man /opt/kde/man
- do
- msfp_d="$d";
- if obj msfp_manpath path_not_contains "${msfp_d}" && obj mfsp_d is_dir
- then
- msfp_manpath="${msfp_manpath}:${mfsp_d}";
- fi;
- done;
-
- _MAN_PATH="${msfp_manpath}";
- eval ${_UNSET} msfp_base;
- eval ${_UNSET} msfp_d;
- eval ${_UNSET} msfp_mandir;
- eval ${_UNSET} msfp_manpath;
- eval "${return_ok}";
-} # manpath_set_from_path()
-
-
-########################################################################
-landmark '9: obj_*()';
-########################################################################
-
-########################################################################
-# obj (<object> <call_name> <arg>...)
-#
-# This works like a method (object function) call for an object.
-# Run "<call_name> $<object> <arg> ...".
-#
-# The first argument represents an object whose data is given as first
-# argument to <call_name>().
-#
-# Argument: >=2
-# <object>: variable name
-# <call_name>: a program or function name
-#
-# Variable prefix: o
-#
-obj()
-{
- func_check obj '>=' 2 "$@";
- eval o_arg1='"${'$1'}"';
- if is_empty "$2"
- then
- error "obj(): function name is empty."
- else
- o_func="$2";
- fi;
- shift;
- shift;
- eval "${o_func}"' "${o_arg1}" "$@"';
- n="$?";
- eval ${_UNSET} o_arg1;
- eval ${_UNSET} o_func;
- eval "${return_var} $n";
-} # obj()
-
-
-########################################################################
-# obj_data (<object>)
-#
-# Print the data of <object>, i.e. the content of $<object>.
-# For possible later extensions.
-#
-# Arguments: 1
-# <object>: a variable name
-# Output: the data of <object>
-#
-# Variable prefix: od
-#
-obj_data()
-{
- func_check obj '=' 1 "$@";
- if is_empty "$1"
- then
- error "obj_data(): object name is empty."
- fi;
- eval od_res='"${'$1'}"';
- obj od_res echo1;
- eval ${_UNSET} od_res;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# obj_from_output (<object> <call_name> <arg>...)
-#
-# Run '$<object>="$(<call_name> <arg>...)"' to set the result of a
-# function call to a global variable.
-#
-# Arguments: >=2
-# <object>: a variable name
-# <call_name>: the name of a function or program
-# <arg>: optional argument to <call_name>
-# Output: none
-#
-# Variable prefix: ofo
-#
-obj_from_output()
-{
- func_check obj_from_output '>=' 2 "$@";
- if is_empty "$1"
- then
- error "res(): variable name is empty.";
- elif is_empty "$2"
- then
- error "res(): function name is empty."
- else
- ofo_result_name="$1";
- fi;
- shift;
- eval "${ofo_result_name}"'="$('"$@"')"';
- exit_test;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# obj_set (<object> <data>)
-#
-# Set the data of <object>, i.e. call "$<object>=<data>".
-#
-# Arguments: 2
-# <object>: a variable name
-# <data>: a string
-# Output:: none
-#
-obj_set()
-{
- func_check obj_set '=' 2 "$@";
- if is_empty "$1"
- then
- error "obj_set(): object name is empty."
- fi;
- eval "$1"='"$2"';
- eval "${return_ok}";
-}
-
-
-########################################################################
-# path_chop (<path>)
-#
-# Remove unnecessary colons from path.
-#
-# Argument: 1, a colon separated path.
-# Output: path without leading, double, or trailing colons.
-#
-path_chop()
-{
- func_check path_chop = 1 "$@";
-
- # replace multiple colons by a single colon `:'
- # remove leading and trailing colons
- echo1 "$1" | sed -e '
-s/^:*//
-s/:::*/:/g
-s/:*$//
-';
- eval "${return_ok}";
-}
-
-
-########################################################################
-# path_clean (<path>)
-#
-# Remove non-existing directories from a colon-separated list.
-#
-# Argument: 1, a colon separated path.
-# Output: colon-separated list of existing directories.
-#
-# Variable prefix: pc
-#
-path_clean()
-{
- func_check path_clean = 1 "$@";
- if is_not_equal "$#" 1
- then
- error 'path_clean() needs 1 argument.';
- fi;
- pc_arg="$1";
- eval set x "$(path_split "${pc_arg}")";
- exit_test;
- shift;
- pc_res="";
- for i
- do
- pc_i="$i";
- if obj pc_i is_not_empty \
- && obj pc_res path_not_contains "${pc_i}" \
- && obj pc_i is_dir
- then
- case "${pc_i}" in
- ?*/)
- pc_res="${pc_res}$(dirname_chop "${pc_i}")";
- exit_test;
- ;;
- *)
- pc_res="${pc_res}:${pc_i}";
- exit_test;
- ;;
- esac;
- fi;
- done;
- eval ${_UNSET} pc_arg;
- eval ${_UNSET} pc_i;
- eval ${_UNSET} pc_res;
- if path_chop "${pc_res}"
- then
- eval "${return_ok}";
- else
- eval "${return_bad}";
- fi;
-}
-
-
-########################################################################
-# path_contains (<path> <dir>)
-#-
-# Test whether `dir' is contained in `path', a list separated by `:'.
-#
-# Arguments : 2 arguments.
-# Return : `0' if arg2 is substring of arg1, `1' otherwise.
-#
-path_contains()
-{
- func_check path_contains = 2 "$@";
- case ":$1:" in
- *":$2:"*)
- eval "${return_yes}";
- ;;
- *)
- eval "${return_no}";
- ;;
- esac;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# path_not_contains (<path> <dir>)
-#
-# Test whether `dir' is not contained in colon separated `path'.
-#
-# Arguments : 2 arguments.
-#
-path_not_contains()
-{
- func_check path_not_contains = 2 "$@";
- if path_contains "$1" "$2"
- then
- eval "${return_no}";
- else
- eval "${return_yes}";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# path_split (<path>)
-#
-# In `path' escape white space and replace each colon by a space.
-#
-# Arguments: 1: a colon-separated path
-# Output: the resulting list, process with `eval set'
-#
-path_split()
-{
- func_check path_split = 1 "$@";
- list_from_split "$1" ':';
- eval "${return_ok}";
-}
-
-
-########################################################################
-landmark '10: register_*()';
-########################################################################
-
-########################################################################
-# register_file (<filename>)
-#
-# Write a found file and register the title element.
-#
-# Arguments: 1: a file name
-# Output: none
-#
-register_file()
-{
- func_check register_file = 1 "$@";
- if is_empty "$1"
- then
- error 'register_file(): file name is empty';
- fi;
- if is_equal "$1" '-'
- then
- to_tmp "${_TMP_STDIN}";
- register_title 'stdin';
- else
- to_tmp "$1";
- register_title "$(base_name "$1")";
- exit_test;
- fi;
- eval "${return_ok}";
-} # register_file()
-
-
-########################################################################
-# register_title (<filespec>)
-#
-# Create title element from <filespec> and append to $_REGISTERED_TITLE
-#
-# Globals: $_REGISTERED_TITLE (rw)
-#
-# Variable prefix: rt
-#
-register_title()
-{
- func_check register_title '=' 1 "$@";
- if is_empty "$1"
- then
- eval "${return_ok}";
- fi;
-
- case "${_REGISTERED_TITLE}" in
- *\ *\ *\ *)
- eval "${return_ok}";
- ;;
- esac;
-
- # remove directory part
- rt_title="$(base_name "$1")";
- # replace space characters by `_'
- rt_title="$(echo1 "${rt_title}" | sed -e 's/[ ]/_/g')";
- # remove extension `.bz2'
- rt_title="$(echo1 "${rt_title}" | sed -e 's/\.bz2$//')";
- # remove extension `.gz'
- rt_title="$(echo1 "${rt_title}" | sed -e 's/\.gz$//')";
- # remove extension `.Z'
- rt_title="$(echo1 "${rt_title}" | sed -e 's/\.Z$//')";
- exit_test;
-
- if obj rt_title is_empty
- then
- eval ${_UNSET} rt_title;
- eval "${return_ok}";
- fi;
- if obj _REGISTERED_TITLE is_empty
- then
- _REGISTERED_TITLE="${rt_title}";
- else
- _REGISTERED_TITLE="${_REGISTERED_TITLE} ${rt_title}";
- fi;
- eval ${_UNSET} rt_title;
- eval "${return_ok}";
-} # register_title()
-
-
-########################################################################
-# reset ()
-#
-# Reset the variables that can be affected by options to their default.
-#
-#
-# Defined in section `Preset' after the rudimentary shell tests.
-
-
-########################################################################
-# rm_file (<file_name>)
-#
-# Remove file if $_DEBUG_KEEP_FILES allows it.
-#
-# Globals: $_DEBUG_KEEP_FILES
-#
-rm_file()
-{
- func_check rm_file '=' 1 "$@";
- if is_file "$1"
- then
- rm -f "$1" >${_NULL_DEV} 2>&1;
- fi;
- if is_existing "$1"
- then
- eval "${return_bad}";
- else
- eval "${return_good}";
- fi;
-}
-
-
-########################################################################
-# rm_file_with_debug (<file_name>)
-#
-# Remove file if $_DEBUG_KEEP_FILES allows it.
-#
-# Globals: $_DEBUG_KEEP_FILES
-#
-rm_file_with_debug()
-{
- func_check rm_file_with_debug '=' 1 "$@";
- if obj _DEBUG_KEEP_FILES is_not_yes
- then
- if is_file "$1"
- then
- rm -f "$1" >${_NULL_DEV} 2>&1;
- fi;
- fi;
- if is_existing "$1"
- then
- eval "${return_bad}";
- else
- eval "${return_good}";
- fi;
-}
-
-
-########################################################################
-# rm_tree (<dir_name>)
-#
-# Remove file if $_DEBUG_KEEP_FILES allows it.
-#
-# Globals: $_DEBUG_KEEP_FILES
-#
-rm_tree()
-{
- func_check rm_tree '=' 1 "$@";
- if is_existing "$1"
- then
- rm -f -r "$1" >${_NULL_DEV} 2>&1;
- fi;
- if is_existing "$1"
- then
- eval "${return_bad}";
- else
- eval "${return_good}";
- fi;
-}
-
-
-########################################################################
-# save_stdin ()
-#
-# Store standard input to temporary file (with decompression).
-#
-# Variable prefix: ss
-#
-if obj _HAS_COMPRESSION is_yes
-then
- save_stdin()
- {
- func_check save_stdin '=' 0 "$@";
- ss_f="${_TMP_DIR}"/INPUT;
- cat >"${ss_f}";
- cat_z "${ss_f}" >"${_TMP_STDIN}";
- rm_file "${ss_f}";
- eval ${_UNSET} ss_f;
- eval "${return_ok}";
- }
-else
- save_stdin()
- {
- func_check save_stdin = 0 "$@";
- cat >"${_TMP_STDIN}";
- eval "${return_ok}";
- }
-fi;
-
-
-########################################################################
-# special_filespec ()
-#
-# Handle special modes like whatis and apropos.
-#
-special_filespec()
-{
- func_check special_setup '=' 0 "$@";
- if obj _OPT_APROPOS is_yes
- then
- if obj _OPT_WHATIS is_yes
- then
- error \
- 'special_setup: $_OPT_APROPOS and $_OPT_WHATIS are both "yes"';
- fi;
- apropos_filespec;
- eval "${return_ok}";
- fi;
- if obj _OPT_WHATIS is_yes
- then
- whatis_filespec;
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# special_setup ()
-#
-# Handle special modes like whatis and apropos.
-#
-special_setup()
-{
- func_check special_setup '=' 0 "$@";
- if obj _OPT_APROPOS is_yes
- then
- if obj _OPT_WHATIS is_yes
- then
- error \
- 'special_setup: $_OPT_APROPOS and $_OPT_WHATIS are both "yes"';
- fi;
- apropos_setup;
- eval "${return_ok}";
- fi;
- if obj _OPT_WHATIS is_yes
- then
- whatis_header;
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-landmark '11: stack_*()';
-########################################################################
-
-########################################################################
-# string_contains (<string> <part>)
-#
-# Test whether `part' is contained in `string'.
-#
-# Arguments : 2 text arguments.
-# Return : `0' if arg2 is substring of arg1, `1' otherwise.
-#
-string_contains()
-{
- func_check string_contains '=' 2 "$@";
- case "$1" in
- *"$2"*)
- eval "${return_yes}";
- ;;
- *)
- eval "${return_no}";
- ;;
- esac;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# string_not_contains (<string> <part>)
-#
-# Test whether `part' is not substring of `string'.
-#
-# Arguments : 2 text arguments.
-# Return : `0' if arg2 is substring of arg1, `1' otherwise.
-#
-string_not_contains()
-{
- func_check string_not_contains '=' 2 "$@";
- if string_contains "$1" "$2"
- then
- eval "${return_no}";
- else
- eval "${return_yes}";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-landmark '12: tmp_*()';
-########################################################################
-
-########################################################################
-# tmp_cat ()
-#
-# output the temporary cat file (the concatenation of all input)
-#
-tmp_cat()
-{
- func_check tmp_cat '=' 0 "$@";
- cat "${_TMP_CAT}";
- eval "${return_var}" "$?";
-}
-
-
-########################################################################
-# tmp_create (<suffix>?)
-#
-# Create temporary file.
-#
-# It's safe to use the shell process ID together with a suffix to
-# have multiple temporary files.
-#
-# Globals: $_TMP_DIR
-#
-# Output : name of created file
-#
-# Variable prefix: tc
-#
-tmp_create()
-{
- func_check tmp_create '<=' 1 "$@";
- # the output file does not have `,' as first character, so these are
- # different names from the output file.
- tc_tmp="${_TMP_DIR}/,$1";
- : >"${tc_tmp}"
- obj tc_tmp echo1;
- eval ${_UNSET} tc_tmp;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# to_tmp (<filename>)
-#
-# print file (decompressed) to the temporary cat file
-#
-to_tmp()
-{
- func_check to_tmp '=' 1 "$@";
- if obj _TMP_CAT is_empty
- then
- error 'to_tmp_line: $_TMP_CAT is not yet set';
- fi;
- if is_file "$1"
- then
- if obj _OPT_LOCATION is_yes
- then
- echo2 "$1";
- fi;
- if obj _OPT_WHATIS is_yes
- then
- whatis_filename "$1" >>"${_TMP_CAT}";
- else
- cat_z "$1" >>"${_TMP_CAT}";
- fi;
- else
- error "to_tmp(): could not read file \`$1'.";
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# to_tmp_line ([<text>])
-#
-# print line to the temporary cat file
-#
-to_tmp_line()
-{
- func_check to_tmp '>=' 0 "$@";
- if obj _TMP_CAT is_empty
- then
- error 'to_tmp_line: $_TMP_CAT is not yet set';
- fi;
- echo1 "$*" >>"${_TMP_CAT}";
- eval "${return_ok}";
-}
-
-
-########################################################################
-# trap_set
-#
-# call function on signal 0
-#
-trap_set()
-{
- func_check trap_set '=' 0 "$@";
- trap 'clean_up' 0 2>${_NULL_DEV} || :;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# trap_unset ()
-#
-# disable trap on signal 0.
-#
-trap_unset()
-{
- func_check trap_unset '=' 0 "$@";
- trap '' 0 2>${_NULL_DEV} || :;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# usage ()
-#
-# print usage information to stderr; for groffer option --help.
-#
-usage()
-{
- func_check usage = 0 "$@";
- echo;
- version;
- echo1 'Usage: groffer [option]... [filespec]...';
- cat <<EOF
-
-Display roff files, standard input, and/or Unix manual pages with a X
-Window viewer or in several text modes. All input is decompressed
-on-the-fly with all formats that gzip can handle.
-
-"filespec" is one of
- "filename" name of a readable file
- "-" for standard input
- "man:name.n" man page "name" in section "n"
- "man:name" man page "name" in first section found
- "name.n" man page "name" in section "n"
- "name" man page "name" in first section found
-and some more (see groffer(1) for details).
-
--h --help print this usage message.
--Q --source output as roff source.
--T --device=name pass to groff using output device "name".
--v --version print version information.
--V display the groff execution pipe instead of formatting.
--X display with "gxditview" using groff -X.
--Z --ditroff --intermediate-output
- generate groff intermediate output without
- post-processing and viewing, like groff -Z.
-All other short options are interpreted as "groff" formatting options.
-
-The most important groffer long options are
-
---apropos=name start man's "apropos" program for "name".
---apropos-data=name
- "apropos" for "name" in man's data sections 4, 5, 7.
---apropos-devel=name
- "apropos" for "name" in development sections 2, 3, 9.
---apropos-progs=name
- "apropos" for "name" in man's program sections 1, 6, 8.
---auto choose mode automatically from the default mode list.
---default reset all options to the default value.
---default-modes=mode1,mode2,...
- set sequence of automatically tried modes.
---dvi display in a viewer for TeX device independent format.
---dvi-viewer=prog choose the viewer program for dvi mode.
---groff process like groff, disable viewing features.
---help display this helping output.
---html display in a web browser.
---html-viewer=program
- choose the web browser for html mode.
---man check file parameters first whether they are man pages.
---mode=auto|dvi|groff|html|pdf|ps|source|text|tty|www|x|X
- choose display mode.
---no-man disable man-page facility.
---no-special disable --all, --apropos*, and --whatis
---pager=program preset the paging program for tty mode.
---pdf display in a PDF viewer.
---pdf-viewer=prog choose the viewer program for pdf mode.
---ps display in a Postscript viewer.
---ps-viewer=prog choose the viewer program for ps mode.
---shell=program specify a shell under which to run groffer2.sh.
---text output in a text device without a pager.
---tty display with a pager on text terminal even when in X.
---tty-viewer=prog select a pager for tty mode; same as --pager.
---whatis display the file name and description of man pages
---www same as --html.
---www-viewer=prog same as --html-viewer
---x --X display with "gxditview" using an X* device.
---x-viewer=prog choose viewer program for x mode (X mode).
---X-viewer=prog same as "--xviewer".
-
-Development options that are not useful for normal usage:
---debug, --debug-all, --debug-keep, --debug-lm, --debug-params,
---debug-shell, --debug-stacks, --debug-tmpdir, --debug-user,
---do-nothing, --print=text
-
-Viewer programs for the different modes that run on the terminal:
---dvi-viewer-tty=prog, --html-viewer-tty=prog, --pdf-viewer-tty=prog,
---ps-viewer-tty=prog, --tty-viewer-tty, --X-viewer-tty=prog,
---x-viewer-tty=prog, --www-viewer-tty=prog
-
-The usual X Windows toolkit options transformed into GNU long options:
---background=color, --bd=size, --bg=color, --bordercolor=color,
---borderwidth=size, --bw=size, --display=Xdisplay, --fg=color,
---fn=font, --font=font, --foreground=color, --geometry=geom, --iconic,
---resolution=dpi, --rv, --title=text, --xrm=resource
-
-Long options of GNU "man":
---all, --ascii, --ditroff, --extension=suffix, --locale=language,
---local-file=name, --location, --manpath=dir1:dir2:...,
---sections=s1:s2:..., --systems=s1,s2,..., --where, ...
-
-EOF
- eval "${return_ok}";
-}
-
-
-########################################################################
-# version ()
-#
-# print version information to stderr
-#
-version()
-{
- func_check version = 0 "$@";
- echo1 "groffer ${_PROGRAM_VERSION} of ${_LAST_UPDATE}";
- # also display groff's version, but not the called subprograms
- groff -v 2>&1 | sed -e '/^ *$/q' | sed -e '1s/^/is part of /';
- eval "${return_ok}";
-}
-
-
-########################################################################
-# warning (<string>)
-#
-# Print warning to stderr
-#
-warning()
-{
- echo2 "warning: $*";
-}
-
-
-########################################################################
-# whatis_filename (<filename>)
-#
-# Interpret <filename> as a man page and display its `whatis'
-# information as a fragment written in the groff language.
-#
-# Variable prefix: wf
-#
-whatis_filename()
-{
- func_check whatis_filename = 1 "$@";
- wf_arg="$1";
- if obj wf_arg is_not_file
- then
- error "whatis_filename(): argument is not a readable file."
- fi;
- wf_dot='^\.'"${_SPACE_SED}"'*';
- if obj _FILESPEC_ARG is_equal '-'
- then
- wf_arg='stdin';
- fi;
- cat <<EOF
-\f[CR]${wf_arg}\f[]:
-.br
-EOF
-
- # get the parts of the file name
- wf_name="$(base_name $1)";
- wf_section="$(echo1 $1 | sed -n -e '
-s|^.*/man\('"${_MAN_AUTO_SEC_CHARS}"'\).*$|\1|p
-')";
- if obj wf_section is_not_empty
- then
- case "${wf_name}" in
- *.${wf_section}*)
- s='yes';
- ;;
- *)
- s='';
- wf_section='';
- ;;
- esac
- if obj s is_yes
- then
- wf_name="$(echo1 ${wf_name} | sed -e '
-s/^\(.*\)\.'${wf_section}'.*$/\1/
-')";
- fi;
- fi;
-
- # traditional man style; grep the line containing `.TH' macro, if any
- wf_res="$(cat_z "$1" | sed -e '
-/'"${wf_dot}"'TH /p
-d
-')";
- exit_test;
- if obj wf_res is_not_empty
- then # traditional man style
- # get the first line after the first `.SH' macro, by
- # - delete up to first .SH;
- # - print all lines before the next .SH;
- # - quit.
- wf_res="$(cat_z "$1" | sed -n -e '
-1,/'"${wf_dot}"'SH/d
-/'"${wf_dot}"'SH/q
-p
-')";
-
- if obj wf_section is_not_empty
- then
- case "${wf_res}" in
- ${wf_name}${_SPACE_CASE}*-${_SPACE_CASE}*)
- s='yes';
- ;;
- *)
- s='';
- ;;
- esac;
- if obj s is_yes
- then
- wf_res="$(obj wf_res echo1 | sed -e '
-s/^'"${wf_name}${_SPACE_SED}"'[^-]*-'"${_SPACE_SED}"'*\(.*\)$/'"${wf_name}"' ('"${wf_section}"') \\[em] \1/
-')";
- fi;
- fi;
- obj wf_res echo1;
- echo;
- eval ${_UNSET} wf_arg;
- eval ${_UNSET} wf_dot;
- eval ${_UNSET} wf_name;
- eval ${_UNSET} wf_res;
- eval ${_UNSET} wf_section;
- eval "${return_ok}";
- fi;
-
- # mdoc style (BSD doc); grep the line containing `.Nd' macro, if any
- wf_res="$(cat_z "$1" | sed -n -e '/'"${wf_dot}"'Nd /s///p')";
- exit_test;
- if obj wf_res is_not_empty
- then # BSD doc style
- if obj wf_section is_not_empty
- then
- wf_res="$(obj wf_res echo1 | sed -n -e '
-s/^\(.*\)$/'"${wf_name}"' ('"${wf_section}"') \\[em] \1/p
-')";
- fi;
- obj wf_res echo1;
- echo;
- eval ${_UNSET} wf_arg;
- eval ${_UNSET} wf_dot;
- eval ${_UNSET} wf_name;
- eval ${_UNSET} wf_res;
- eval ${_UNSET} wf_section;
- eval "${return_ok}";
- fi;
- echo1 'is not a man page';
- echo;
- eval ${_UNSET} wf_arg;
- eval ${_UNSET} wf_dot;
- eval ${_UNSET} wf_name;
- eval ${_UNSET} wf_res;
- eval ${_UNSET} wf_section;
- eval "${return_bad}";
-}
-
-
-########################################################################
-# whatis_filespec ()
-#
-# Print the filespec name as .SH to the temporary cat file.
-#
-whatis_filespec()
-{
- func_check whatis_filespec '=' 0 "$@";
- if obj _OPT_WHATIS is_yes
- then
- eval to_tmp_line \
- "'.SH $(echo1 "${_FILESPEC_ARG}" | sed 's/[^\\]-/\\-/g')'";
- exit_test;
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# whatis_header ()
-#
-# Print the whatis header to the temporary cat file.
-#
-whatis_header()
-{
- func_check whatis_header '=' 0 "$@";
- if obj _OPT_WHATIS is_yes
- then
- to_tmp_line '.TH GROFFER WHATIS';
- fi;
- eval "${return_ok}";
-}
-
-
-########################################################################
-# where_is (<program>)
-#
-# Output path of a program if in $PATH.
-#
-# Arguments : >=1 (empty allowed)
-# more args are ignored, this allows to specify progs with arguments
-# Return : `0' if arg1 is a program in $PATH, `1' otherwise.
-#
-# Variable prefix: w
-#
-where_is()
-{
- func_check where_is '>=' 1 "$@";
- w_arg="$1";
- if obj w_arg is_empty
- then
- eval ${_UNSET} w_arg;
- eval "${return_bad}";
- fi;
- case "${w_arg}" in
- /*)
- eval ${_UNSET} w_arg;
- eval ${_UNSET} w_file;
- if test -f "${w_arg}" && test -x "${w_arg}"
- then
- eval "${return_ok}";
- else
- eval "${return_bad}";
- fi;
- ;;
- esac;
- eval set x "$(path_split "${PATH}")";
- exit_test;
- shift;
- for p
- do
- case "$p" in
- */) w_file=${p}${w_arg}; ;;
- *) w_file=${p}/${w_arg}; ;;
- esac;
- if test -f "${w_file}" && test -x "${w_file}"
- then
- obj w_file echo1;
- eval ${_UNSET} w_arg;
- eval ${_UNSET} w_file;
- eval "${return_ok}";
- fi;
- done;
- eval ${_UNSET} w_arg;
- eval ${_UNSET} w_file;
- eval "${return_bad}";
-}
-
-
-########################################################################
-# main* Functions
-########################################################################
-
-# The main area contains the following parts:
-# - main_init(): initialize temporary files and set exit trap
-# - main_parse_MANOPT(): parse $MANOPT
-# - main_parse_args(): argument parsing
-# - main_set_mode (): determine the display mode
-# - main_do_fileargs(): process filespec arguments
-# - main_set_resources(): setup X resources
-# - main_display(): do the displaying
-# - main(): the main function that calls all main_*()
-
-
-#######################################################################
-# main_init ()
-#
-# set exit trap and create temporary files
-#
-# Globals: $_TMP_DIR, $_TMP_CAT, $_TMP_STDIN
-#
-# Variable prefix: mi
-#
-main_init()
-{
- func_check main_init = 0 "$@";
- # call clean_up() on shell termination.
- trap_set;
-
- # create temporary directory
- umask 0022;
- _TMP_DIR='';
- for d in "${GROFF_TMPDIR}" "${TMPDIR}" "${TMP}" "${TEMP}" \
- "${TEMPDIR}" "${HOME}"'/tmp' '/tmp' "${HOME}" '.'
- do
- mi_dir="$d";
- if obj mi_dir is_empty || obj mi_dir is_not_dir || \
- obj mi_dir is_not_writable
- then
- continue;
- fi;
-
- case "${mi_dir}" in
- */)
- _TMP_DIR="${mi_dir}";
- ;;
- *)
- _TMP_DIR="${mi_dir}"'/';
- ;;
- esac;
- _TMP_DIR="${_TMP_DIR}groffer${_PROCESS_ID}";
- if obj _TMP_DIR rm_tree
- then
- :
- else
- mi_tdir_="${_TMP_DIR}"_;
- mi_n=1;
- mi_tdir_n="${mi_tdir_}${mi_n}";
- while obj mi_tdir_n is_existing
- do
- if obj mi_tdir_n rm_tree
- then
- # directory could not be removed
- mi_n="$(expr "${mi_n}" + 1)";
- mi_tdir_n="${mi_tdir_}${mi_n}";
- continue;
- fi;
- done;
- _TMP_DIR="${mi_tdir_n}";
- fi;
- eval mkdir "${_TMP_DIR}";
- if is_not_equal "$?" 0
- then
- obj _TMP_DIR rm_tree;
- _TMP_DIR='';
- continue;
- fi;
- if obj _TMP_DIR is_dir && obj _TMP_DIR is_writable
- then
- # $_TMP_DIR can now be used as temporary directory
- break;
- fi;
- obj _TMP_DIR rm_tree;
- _TMP_DIR='';
- continue;
- done;
- if obj _TMP_DIR is_empty
- then
- error "main_init: \
-Couldn't create a directory for storing temporary files.";
- fi;
- if obj _DEBUG_PRINT_TMPDIR is_yes
- then
- echo2 "temporary directory: ${_TMP_DIR}";
- fi;
-
- _TMP_CAT="$(tmp_create groffer_cat)";
- _TMP_STDIN="$(tmp_create groffer_input)";
- exit_test;
-
- eval ${_UNSET} mi_dir;
- eval ${_UNSET} mi_n;
- eval ${_UNSET} mi_tdir_;
- eval ${_UNSET} mi_tdir_n;
- eval "${return_ok}";
-} # main_init()
-
-
-########################################################################
-# main_parse_MANOPT ()
-#
-# Parse $MANOPT to retrieve man options, but only if it is a non-empty
-# string; found man arguments can be overwritten by the command line.
-#
-# Globals:
-# in: $MANOPT, $_OPTS_MANOPT_*
-# out: $_MANOPT_*
-#
-# Variable prefix: mpm
-#
-main_parse_MANOPT()
-{
- func_check main_parse_MANOPT = 0 "$@";
-
- if obj MANOPT is_not_empty
- then
- # Delete leading and final spaces
- MANOPT="$(echo1 "${MANOPT}" | sed -e '
-s/^'"${_SPACE_SED}"'*//
-s/'"${_SPACE_SED}"'*$//
-')";
- exit_test;
- fi;
- if obj MANOPT is_empty
- then
- eval "${return_ok}";
- fi;
-
- mpm_list='';
- # add arguments in $MANOPT by mapping them to groffer options
- eval set x "$(list_from_cmdline _OPTS_MANOPT "${MANOPT}")";
- exit_test;
- shift;
- until test "$#" -le 0 || is_equal "$1" '--'
- do
- mpm_opt="$1";
- shift;
- case "${mpm_opt}" in
- -7|--ascii)
- list_append mpm_list '--ascii';
- ;;
- -a|--all)
- list_append mpm_list '--all';
- ;;
- -c|--catman)
- do_nothing;
- shift;
- ;;
- -d|--debug)
- do_nothing;
- ;;
- -D|--default)
- # undo all man options so far
- mpm_list='';
- ;;
- -e|--extension)
- list_append mpm_list '--extension';
- shift;
- ;;
- -f|--whatis)
- list_append mpm_list '--whatis';
- shift;
- ;;
- -h|--help)
- do_nothing;
- shift;
- ;;
- -k|--apropos)
- # groffer's --apropos takes an argument, but man's does not, so
- do_nothing;
- ;;
- -l|--local-file)
- do_nothing;
- ;;
- -L|--locale)
- list_append mpm_list '--locale' "$1";
- shift;
- ;;
- -m|--systems)
- list_append mpm_list '--systems' "$1";
- shift;
- ;;
- -M|--manpath)
- list_append mpm_list '--manpath' "$1";
- shift;
- ;;
- -p|--preprocessor)
- do_nothing;
- shift;
- ;;
- -P|--pager)
- list_append mpm_list '--pager' "$1";
- shift;
- ;;
- -r|--prompt)
- do_nothing;
- shift;
- ;;
- -S|--sections)
- list_append mpm_list '--sections' "$1";
- shift;
- ;;
- -t|--troff)
- do_nothing;
- shift;
- ;;
- -T|--device)
- list_append mpm_list '-T' "$1";
- shift;
- ;;
- -u|--update)
- do_nothing;
- shift;
- ;;
- -V|--version)
- do_nothing;
- ;;
- -w|--where|--location)
- list_append mpm_list '--location';
- ;;
- -Z|--ditroff)
- do_nothing;
- ;;
- # ignore all other options
- esac;
- done;
-
- # prepend $mpm_list to the command line
- if obj mpm_list is_not_empty
- then
- eval set x "${mpm_list}" '"$@"';
- shift;
- fi;
-
- eval ${_UNSET} mpm_list;
- eval ${_UNSET} mpm_opt;
- eval "${return_ok}";
-} # main_parse_MANOPT()
-
-
-########################################################################
-# main_parse_args (<command_line_args>*)
-#
-# Parse arguments; process options and filespec parameters
-#
-# Arguments: pass the command line arguments unaltered.
-# Globals:
-# in: $_OPTS_*
-# out: $_OPT_*, $_ADDOPTS, $_FILEARGS
-#
-# Variable prefix: mpa
-#
-main_parse_args()
-{
- func_check main_parse_args '>=' 0 "$@";
- _ALL_PARAMS="$(list_from_cmdline _OPTS_CMDLINE "$@")";
- exit_test;
- if obj _DEBUG_PRINT_PARAMS is_yes
- then
- echo2 "parameters: ${_ALL_PARAMS}";
- fi;
- eval set x "${_ALL_PARAMS}";
- shift;
-
- # By the call of `eval', unnecessary quoting was removed. So the
- # positional shell parameters ($1, $2, ...) are now guaranteed to
- # represent an option or an argument to the previous option, if any;
- # then a `--' argument for separating options and
- # parameters; followed by the filespec parameters if any.
-
- # Note, the existence of arguments to options has already been checked.
- # So a check for `$#' or `--' should not be done for arguments.
-
- until test "$#" -le 0 || is_equal "$1" '--'
- do
- mpa_opt="$1"; # $mpa_opt is fed into the option handler
- shift;
- case "${mpa_opt}" in
- -h|--help)
- usage;
- leave;
- ;;
- -Q|--source) # output source code (`Quellcode').
- _OPT_MODE='source';
- ;;
- -T|--device|--troff-device) # device; arg
- _OPT_DEVICE="$1";
- _check_device_with_mode;
- shift;
- ;;
- -v|--version)
- version;
- leave;
- ;;
- -V)
- _OPT_V='yes';
- ;;
- -Z|--ditroff|--intermediate-output) # groff intermediate output
- _OPT_Z='yes';
- ;;
- -X)
- if is_X
- then
- _OPT_MODE=X;
- fi;
- ;;
- -?)
- # delete leading `-'
- mpa_optchar="$(echo1 "${mpa_opt}" | sed -e 's/^-//')";
- exit_test;
- if list_has _OPTS_GROFF_SHORT_NA "${mpa_optchar}"
- then
- list_append _ADDOPTS_GROFF "${mpa_opt}";
- elif list_has _OPTS_GROFF_SHORT_ARG "${mpa_optchar}"
- then
- list_append _ADDOPTS_GROFF "${mpa_opt}" "$1";
- shift;
- else
- error "main_parse_args(): Unknown option : \`$1'";
- fi;
- ;;
- --all)
- _OPT_ALL='yes';
- ;;
- --apropos) # run `apropos'
- _OPT_APROPOS='yes';
- _APROPOS_SECTIONS='';
- _OPT_WHATIS='no';
- ;;
- --apropos-data) # run `apropos' for data sections
- _OPT_APROPOS='yes';
- _APROPOS_SECTIONS='457';
- _OPT_WHATIS='no';
- ;;
- --apropos-devel) # run `apropos' for development sections
- _OPT_APROPOS='yes';
- _APROPOS_SECTIONS='239';
- _OPT_WHATIS='no';
- ;;
- --apropos-progs) # run `apropos' for program sections
- _OPT_APROPOS='yes';
- _APROPOS_SECTIONS='168';
- _OPT_WHATIS='no';
- ;;
- --ascii)
- list_append _ADDOPTS_GROFF '-mtty-char';
- if obj _OPT_MODE is_empty
- then
- _OPT_MODE='text';
- fi;
- ;;
- --auto) # the default automatic mode
- _OPT_MODE='';
- ;;
- --bd) # border color for viewers, arg;
- _OPT_BD="$1";
- shift;
- ;;
- --bg|--backgroud) # background color for viewers, arg;
- _OPT_BG="$1";
- shift;
- ;;
- --bw) # border width for viewers, arg;
- _OPT_BW="$1";
- shift;
- ;;
- --debug|--debug-all|--debug-keep|--debug-lm|--debug-params|\
---debug-shell|--debug-stacks|--debug-tmpdir|--debug-user)
- # debug is handled at the beginning
- :;
- ;;
- --default) # reset variables to default
- reset;
- ;;
- --default-modes) # sequence of modes in auto mode; arg
- _OPT_DEFAULT_MODES="$1";
- shift;
- ;;
- --display) # set X display, arg
- _OPT_DISPLAY="$1";
- shift;
- ;;
- --do-nothing)
- _OPT_DO_NOTHING='yes';
- ;;
- --dvi)
- if is_X
- then
- _OPT_MODE='dvi';
- fi;
- ;;
- --dvi-viewer) # viewer program for dvi mode; arg
- _VIEWER_TERMINAL='no';
- _OPT_VIEWER_DVI="$1";
- shift;
- ;;
- --dvi-viewer-tty) # viewer program for dvi mode in tty; arg
- _VIEWER_TERMINAL='yes';
- _OPT_VIEWER_DVI="$1";
- shift;
- ;;
- --extension) # the extension for man pages, arg
- _OPT_EXTENSION="$1";
- shift;
- ;;
- --fg|--foreground) # foreground color for viewers, arg;
- _OPT_FG="$1";
- shift;
- ;;
- --fn|--font) # set font for viewers, arg;
- _OPT_FN="$1";
- shift;
- ;;
- --geometry) # window geometry for viewers, arg;
- _OPT_GEOMETRY="$1";
- shift;
- ;;
- --groff)
- _OPT_MODE='groff';
- ;;
- --html|--www) # display with web browser
- _OPT_MODE=html;
- ;;
- --html-viewer|--www-viewer) # viewer program for html mode; arg
- _VIEWER_TERMINAL='no';
- _OPT_VIEWER_HTML="$1";
- shift;
- ;;
- --html-viewer-tty|--www-viewer-tty) # viewer for html mode in tty; arg
- _VIEWER_TERMINAL='yes';
- _OPT_VIEWER_HTML="$1";
- shift;
- ;;
- --iconic) # start viewers as icons
- _OPT_ICONIC='yes';
- ;;
- --locale) # set language for man pages, arg
- # argument is xx[_territory[.codeset[@modifier]]] (ISO 639,...)
- _OPT_LANG="$1";
- shift;
- ;;
- --local-file) # force local files; same as `--no-man'
- _MAN_FORCE='no';
- _MAN_ENABLE='no';
- ;;
- --location|--where) # print file locations to stderr
- _OPT_LOCATION='yes';
- ;;
- --man) # force all file params to be man pages
- _MAN_ENABLE='yes';
- _MAN_FORCE='yes';
- ;;
- --manpath) # specify search path for man pages, arg
- # arg is colon-separated list of directories
- _OPT_MANPATH="$1";
- shift;
- ;;
- --mode) # display mode
- mpa_arg="$1";
- shift;
- case "${mpa_arg}" in
- auto|'') # search mode automatically among default
- _OPT_MODE='';
- ;;
- groff) # pass input to plain groff
- _OPT_MODE='groff';
- ;;
- html|www) # display with a web browser
- _OPT_MODE='html';
- ;;
- dvi) # display with xdvi viewer
- if is_X
- then
- _OPT_MODE='dvi';
- fi;
- ;;
- pdf) # display with PDF viewer
- if is_X
- then
- _OPT_MODE='pdf';
- fi;
- ;;
- ps) # display with Postscript viewer
- if is_X
- then
- _OPT_MODE='ps';
- fi;
- ;;
- text) # output on terminal
- _OPT_MODE='text';
- ;;
- tty) # output on terminal
- _OPT_MODE='tty';
- ;;
- X|x) # output on X roff viewer
- if is_X
- then
- _OPT_MODE='x';
- fi;
- ;;
- Q|source) # display source code
- _OPT_MODE="source";
- ;;
- *)
- error "main_parse_args(): unknown mode ${mpa_arg}";
- ;;
- esac;
- ;;
- --no-location) # disable former call to `--location'
- _OPT_LOCATION='yes';
- ;;
- --no-man) # disable search for man pages
- # the same as --local-file
- _MAN_FORCE='no';
- _MAN_ENABLE='no';
- ;;
- --no-special) # disable some special former calls
- _OPT_ALL='no'
- _OPT_APROPOS='no'
- _OPT_WHATIS='no'
- ;;
- --pager|--tty-viewer|--tty-viewer-tty)
- # set paging program for tty mode, arg
- _VIEWER_TERMINAL='yes';
- _OPT_PAGER="$1";
- shift;
- ;;
- --pdf)
- if is_X
- then
- _OPT_MODE='pdf';
- fi;
- ;;
- --pdf-viewer) # viewer program for ps mode; arg
- _VIEWER_TERMINAL='no';
- _OPT_VIEWER_PDF="$1";
- shift;
- ;;
- --pdf-viewer-tty) # viewer program for ps mode in tty; arg
- _VIEWER_TERMINAL='yes';
- _OPT_VIEWER_PDF="$1";
- shift;
- ;;
- --print) # for argument test
- echo2 "$1";
- shift;
- ;;
- --ps)
- if is_X
- then
- _OPT_MODE='ps';
- fi;
- ;;
- --ps-viewer) # viewer program for ps mode; arg
- _VIEWER_TERMINAL='no';
- _OPT_VIEWER_PS="$1";
- shift;
- ;;
- --ps-viewer-tty) # viewer program for ps mode in tty; arg
- _VIEWER_TERMINAL='yes';
- _OPT_VIEWER_PS="$1";
- shift;
- ;;
- --resolution) # set resolution for X devices, arg
- mpa_arg="$1";
- shift;
- case "${mpa_arg}" in
- 75|75dpi)
- mpa_dpi=75;
- ;;
- 100|100dpi)
- mpa_dpi=100;
- ;;
- *)
- error "main_parse_args(): \
-only resoutions of 75 or 100 dpi are supported";
- ;;
- esac;
- _OPT_RESOLUTION="${mpa_dpi}";
- ;;
- --rv)
- _OPT_RV='yes';
- ;;
- --sections) # specify sections for man pages, arg
- # arg is colon-separated list of section names
- _OPT_SECTIONS="$1";
- shift;
- ;;
- --shell)
- # already done during the first run; so ignore the argument
- shift;
- ;;
- --systems) # man pages for different OS's, arg
- # argument is a comma-separated list
- _OPT_SYSTEMS="$1";
- shift;
- ;;
- --text) # text mode without pager
- _OPT_MODE=text;
- ;;
- --title) # title for X viewers; arg
- _OPT_TITLE="$1";
- shift;
- ;;
- --tty) # tty mode, text with pager
- _OPT_MODE=tty;
- ;;
- --text-device|--tty-device) # device for tty mode; arg
- _OPT_TEXT_DEVICE="$1";
- shift;
- ;;
- --whatis)
- _OPT_WHATIS='yes';
- _OPT_ALL='yes';
- _OPT_APROPOS='no';
- ;;
- --X|--x)
- if is_X
- then
- _OPT_MODE=x;
- fi;
- ;;
- --xrm) # pass X resource string, arg;
- list_append _OPT_XRM "$1";
- shift;
- ;;
- --x-viewer|--X-viewer) # viewer program for x mode; arg
- _VIEWER_TERMINAL='no';
- _OPT_VIEWER_X="$1";
- shift;
- ;;
- --x-viewer-tty|--X-viewer-tty) # viewer program for x mode in tty; arg
- _VIEWER_TERMINAL='yes';
- _OPT_VIEWER_X="$1";
- shift;
- ;;
- *)
- error 'main_parse_args(): error on argument parsing : '"\`$*'";
- ;;
- esac;
- done;
- shift; # remove `--' argument
-
- if obj _OPT_DO_NOTHING is_yes
- then
- leave;
- fi;
-
- # Remaining arguments are file names (filespecs).
- # Save them to list $_FILEARGS
- if is_equal "$#" 0
- then # use "-" for standard input
- set x '-';
- shift;
- fi;
- _FILEARGS='';
- list_append _FILEARGS "$@";
- if list_has _FILEARGS '-'
- then
- save_stdin;
- fi;
- # $_FILEARGS must be retrieved with `eval set x "$_FILEARGS"; shift;'
- eval ${_UNSET} mpa_arg;
- eval ${_UNSET} mpa_dpi;
- eval ${_UNSET} mpa_opt;
- eval ${_UNSET} mpa_optchar;
- eval "${return_ok}";
-} # main_parse_args()
-
-
-# Called from main_parse_args() because double `case' is not possible.
-# Globals: $_OPT_DEVICE, $_OPT_MODE
-_check_device_with_mode()
-{
- func_check _check_device_with_mode = 0 "$@";
- case "${_OPT_DEVICE}" in
- dvi)
- _OPT_MODE=dvi;
- eval "${return_ok}";
- ;;
- html)
- _OPT_MODE=html;
- eval "${return_ok}";
- ;;
- lbp|lj4)
- _OPT_MODE=groff;
- eval "${return_ok}";
- ;;
- ps)
- _OPT_MODE=ps;
- eval "${return_ok}";
- ;;
- ascii|cp1047|latin1|utf8)
- if obj _OPT_MODE is_not_equal text
- then
- _OPT_MODE=tty; # default text mode
- fi;
- eval "${return_ok}";
- ;;
- X*)
- _OPT_MODE=x;
- eval "${return_ok}";
- ;;
- *) # unknown device, go to groff mode
- _OPT_MODE=groff;
- eval "${return_ok}";
- ;;
- esac;
- eval "${return_error}";
-} # _check_device_with_mode() of main_parse_args()
-
-
-########################################################################
-# main_set_mode ()
-#
-# Determine the display mode.
-#
-# Globals:
-# in: $DISPLAY, $_OPT_MODE, $_OPT_DEVICE
-# out: $_DISPLAY_MODE
-#
-# Variable prefix: msm
-#
-main_set_mode()
-{
- func_check main_set_mode = 0 "$@";
-
- # set display
- if obj _OPT_DISPLAY is_not_empty
- then
- DISPLAY="${_OPT_DISPLAY}";
- fi;
-
- if obj _OPT_V is_yes
- then
- list_append _ADDOPTS_GROFF '-V';
- fi;
- if obj _OPT_Z is_yes
- then
- _DISPLAY_MODE='groff';
- list_append _ADDOPTS_GROFF '-Z';
- fi;
- if obj _OPT_MODE is_equal 'groff'
- then
- _DISPLAY_MODE='groff';
- fi;
- if obj _DISPLAY_MODE is_equal 'groff'
- then
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- fi;
-
- if obj _OPT_MODE is_equal 'source'
- then
- _DISPLAY_MODE='source';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- fi;
-
- case "${_OPT_MODE}" in
- '') # automatic mode
- case "${_OPT_DEVICE}" in
- X*)
- if is_not_X
- then
- error_user "no X display found for device ${_OPT_DEVICE}";
- fi;
- _DISPLAY_MODE='x';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- ascii|cp1047|latin1|utf8)
- if obj _DISPLAY_MODE is_not_equal 'text'
- then
- _DISPLAY_MODE='tty';
- fi;
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- esac;
- if is_not_X
- then
- _DISPLAY_MODE='tty';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- fi;
-
- if obj _OPT_DEFAULT_MODES is_empty
- then
- msm_modes="${_DEFAULT_MODES}";
- else
- msm_modes="${_OPT_DEFAULT_MODES}";
- fi;
- ;;
- text)
- _DISPLAY_MODE='text';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- tty)
- _DISPLAY_MODE='tty';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- html)
- _DISPLAY_MODE='html';
- msm_modes="${_OPT_MODE}";
- ;;
- *) # display mode was given
- if is_not_X
- then
- error_user "You must be in X Window for ${_OPT_MODE} mode.";
- fi;
- msm_modes="${_OPT_MODE}";
- ;;
- esac;
-
- # only viewer modes are left
- eval set x "$(list_from_split "${msm_modes}" ',')";
- exit_test;
- shift;
- while test "$#" -gt 0
- do
- m="$1";
- shift;
- case "$m" in
- dvi)
- if obj _OPT_VIEWER_DVI is_not_empty
- then
- msm_viewer="${_OPT_VIEWER_DVI}";
- else
- msm_viewer="$(_get_first_prog "$_VIEWER_DVI}")";
- exit_test;
- fi;
- if obj msm_viewer is_empty
- then
- error 'No viewer for dvi mode available.';
- fi;
- if is_not_equal "$?" 0
- then
- continue;
- fi;
- _DISPLAY_PROG="${msm_viewer}";
- _DISPLAY_MODE="dvi";
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- html)
- if obj _OPT_VIEWER_HTML is_not_empty
- then
- msm_viewer="${_OPT_VIEWER_HTML}";
- else
- if is_X
- then
- msm_viewers="${_VIEWER_HTML_X}";
- else
- msm_viewers="${_VIEWER_HTML_TTY}";
- fi;
- msm_viewer="$(_get_first_prog "${msm_viewers}")";
- exit_test;
- fi;
- if obj msm_viewer is_empty
- then
- error 'No viewer for html mode available.';
- fi;
- if is_not_equal "$?" 0
- then
- continue;
- fi;
- _DISPLAY_PROG="${msm_viewer}";
- _DISPLAY_MODE=html;
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- pdf)
- if obj _OPT_VIEWER_PDF is_not_empty
- then
- msm_viewer="${_OPT_VIEWER_PDF}";
- else
- msm_viewer="$(_get_first_prog "${_VIEWER_PDF}")";
- exit_test;
- fi;
- if obj msm_viewer is_empty
- then
- error 'No viewer for pdf mode available.';
- fi;
- if is_not_equal "$?" 0
- then
- continue;
- fi;
- _DISPLAY_PROG="${msm_viewer}";
- _DISPLAY_MODE="pdf";
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- ps)
- if obj _OPT_VIEWER_PS is_not_empty
- then
- msm_viewer="${_OPT_VIEWER_PS}";
- else
- msm_viewer="$(_get_first_prog "${_VIEWER_PS}")";
- exit_test;
- fi;
- if obj msm_viewer is_empty
- then
- error 'No viewer for ps mode available.';
- fi;
- if is_not_equal "$?" 0
- then
- continue;
- fi;
- _DISPLAY_PROG="${msm_viewer}";
- _DISPLAY_MODE="ps";
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- text)
- _DISPLAY_MODE='text';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- tty)
- _DISPLAY_MODE='tty';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- x)
- if obj _OPT_VIEWER_X is_not_empty
- then
- msm_viewer="${_OPT_VIEWER_X}";
- else
- msm_viewer="$(_get_first_prog "${_VIEWER_X}")";
- exit_test;
- fi;
- if obj msm_viewer is_empty
- then
- error 'No viewer for x mode available.';
- fi;
- if is_not_equal "$?" 0
- then
- continue;
- fi;
- _DISPLAY_PROG="${msm_viewer}";
- _DISPLAY_MODE='x';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- X)
- _DISPLAY_MODE='X';
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- eval "${return_ok}";
- ;;
- esac;
- done;
- eval ${_UNSET} msm_modes;
- eval ${_UNSET} msm_viewer;
- eval ${_UNSET} msm_viewers;
- error_user "No suitable display mode found.";
-} # main_set_mode()
-
-
-# _get_first_prog (<proglist>)
-#
-# Retrieve first argument that represents an existing program in $PATH.
-# Local function for main_set_mode().
-#
-# Arguments: 1; a comma-separated list of commands (with options),
-# like $_VIEWER_*.
-#
-# Return : `1' if none found, `0' if found.
-# Output : the argument that succeded.
-#
-# Variable prefix: _gfp
-#
-_get_first_prog()
-{
- if is_equal "$#" 0
- then
- error "_get_first_prog() needs 1 argument.";
- fi;
- if is_empty "$1"
- then
- return "${_BAD}";
- fi;
- eval set x "$(list_from_split "$1" ',')";
- exit_test;
- shift;
- for i
- do
- _gfp_i="$i";
- if obj _gfp_i is_empty
- then
- continue;
- fi;
- if eval is_prog "$(get_first_essential ${_gfp_i})"
- then
- exit_test;
- obj _gfp_i echo1;
- eval ${_UNSET} _gfp_i;
- return "${_GOOD}";
- fi;
- done;
- eval ${_UNSET} _gfp_i;
- return "${_BAD}";
-} # _get_first_prog() of main_set_mode()
-
-
-#######################################################################
-# main_do_fileargs ()
-#
-# Process filespec arguments in $_FILEARGS.
-#
-# Globals:
-# in: $_FILEARGS (process with `eval set x "$_FILEARGS"; shift;')
-#
-# Variable prefix: mdfa
-#
-main_do_fileargs()
-{
- func_check main_do_fileargs = 0 "$@";
- special_setup;
- eval set x "${_FILEARGS}";
- shift;
- eval ${_UNSET} _FILEARGS;
- # temporary storage of all input to $_TMP_CAT
- while test "$#" -ge 2
- do
- # test for `s name' arguments, with `s' a 1-char standard section
- mdfa_filespec="$1";
- _FILESPEC_ARG="$1";
- shift;
- case "${mdfa_filespec}" in
- '')
- continue;
- ;;
- '-')
- special_filespec;
- if obj _OPT_APROPOS is_yes
- then
- continue;
- fi;
- register_file '-'
- continue;
- ;;
- ?)
- if obj _OPT_APROPOS is_yes
- then
- special_filespec;
- continue;
- fi;
- if list_has_not _MAN_AUTO_SEC_LIST "${mdfa_filespec}"
- then
- special_filespec;
- do_filearg "${mdfa_filespec}"
- continue;
- fi;
- mdfa_name="$1";
- _FILESPEC_ARG="${_FILESPEC_ARG} $1";
- special_filespec;
- case "${mdfa_name}" in
- */*|man:*|*\(*\)|*."${mdfa_filespec}")
- do_filearg "${mdfa_filespec}"
- continue;
- ;;
- esac;
- shift;
- if do_filearg "man:${mdfa_name}(${mdfa_filespec})"
- then
- continue;
- else
- do_filearg "${mdfa_filespec}"
- continue;
- fi;
- ;;
- *)
- special_filespec;
- if obj _OPT_APROPOS is_yes
- then
- continue;
- fi;
- do_filearg "${mdfa_filespec}"
- continue;
- ;;
- esac;
- done; # end of `s name' test
- while test "$#" -gt 0
- do
- mdfa_filespec="$1";
- _FILESPEC_ARG="$1";
- shift;
- special_filespec;
- if obj _OPT_APROPOS is_yes
- then
- continue;
- fi;
- do_filearg "${mdfa_filespec}"
- done;
- obj _TMP_STDIN rm_file_with_debug;
- eval ${_UNSET} mdfa_filespec;
- eval ${_UNSET} mdfa_name;
- eval "${return_ok}";
-} # main_do_fileargs()
-
-
-########################################################################
-# main_set_resources ()
-#
-# Determine options for setting X resources with $_DISPLAY_PROG.
-#
-# Globals: $_DISPLAY_PROG, $_OUTPUT_FILE_NAME
-#
-# Variable prefix: msr
-#
-main_set_resources()
-{
- func_check main_set_resources = 0 "$@";
- # $msr_prog viewer program
- # $msr_rl resource list
- msr_title="$(get_first_essential \
- "${_OPT_TITLE}" "${_REGISTERED_TITLE}")";
- exit_test;
- _OUTPUT_FILE_NAME='';
- eval set x "${msr_title}";
- shift;
- until is_equal "$#" 0
- do
- msr_n="$1";
- case "${msr_n}" in
- '')
- continue;
- ;;
- ,*)
- msr_n="$(echo1 "$1" | sed -e 's/^,,*//')";
- exit_test;
- ;;
- esac
- if obj msr_n is_empty
- then
- continue;
- fi;
- if obj _OUTPUT_FILE_NAME is_not_empty
- then
- _OUTPUT_FILE_NAME="${_OUTPUT_FILE_NAME}"',';
- fi;
- _OUTPUT_FILE_NAME="${_OUTPUT_FILE_NAME}${msr_n}";
- shift;
- done;
- case "${_OUTPUT_FILE_NAME}" in
- '')
- _OUTPUT_FILE_NAME='-';
- ;;
- ,*)
- error "main_set_resources(): ${_OUTPUT_FILE_NAME} starts with a comma.";
- ;;
- esac;
- _OUTPUT_FILE_NAME="${_TMP_DIR}/${_OUTPUT_FILE_NAME}";
-
- if obj _DISPLAY_PROG is_empty
- then # for example, for groff mode
- _DISPLAY_ARGS='';
- eval ${_UNSET} msr_n;
- eval ${_UNSET} msr_prog;
- eval ${_UNSET} msr_rl;
- eval ${_UNSET} msr_title;
- eval "${return_ok}";
- fi;
-
- eval set x "${_DISPLAY_PROG}";
- shift;
- msr_prog="$(base_name "$1")";
- exit_test;
- shift;
- if test $# != 0
- then
- if obj _DISPLAY_PROG is_empty
- then
- _DISPLAY_ARGS="$*";
- else
- _DISPLAY_ARGS="$* ${_DISPLAY_ARGS}";
- fi;
- fi;
- msr_rl='';
- if obj _OPT_BD is_not_empty
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-bd' "${_OPT_BD}";
- ;;
- esac;
- fi;
- if obj _OPT_BG is_not_empty
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-bg' "${_OPT_BG}";
- ;;
- kghostview)
- list_append msr_rl '--bg' "${_OPT_BG}";
- ;;
- xpdf)
- list_append msr_rl '-papercolor' "${_OPT_BG}";
- ;;
- esac;
- fi;
- if obj _OPT_BW is_not_empty
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- _list_append msr_rl '-bw' "${_OPT_BW}";
- ;;
- esac;
- fi;
- if obj _OPT_FG is_not_empty
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-fg' "${_OPT_FG}";
- ;;
- kghostview)
- list_append msr_rl '--fg' "${_OPT_FG}";
- ;;
- esac;
- fi;
- if is_not_empty "${_OPT_FN}"
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-fn' "${_OPT_FN}";
- ;;
- kghostview)
- list_append msr_rl '--fn' "${_OPT_FN}";
- ;;
- esac;
- fi;
- if is_not_empty "${_OPT_GEOMETRY}"
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi|xpdf)
- list_append msr_rl '-geometry' "${_OPT_GEOMETRY}";
- ;;
- kghostview)
- list_append msr_rl '--geometry' "${_OPT_GEOMETRY}";
- ;;
- esac;
- fi;
- if is_empty "${_OPT_RESOLUTION}"
- then
- _OPT_RESOLUTION="${_DEFAULT_RESOLUTION}";
- case "${msr_prog}" in
- gxditview|xditview)
- list_append msr_rl '-resolution' "${_DEFAULT_RESOLUTION}";
- ;;
- xpdf)
- case "${_DEFAULT_RESOLUTION}" in
- 75)
- # 72dpi is '100'
- list_append msr_rl '-z' '104';
- ;;
- 100)
- list_append msr_rl '-z' '139';
- ;;
- esac;
- ;;
- esac;
- else
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-resolution' "${_OPT_RESOLUTION}";
- ;;
- xpdf)
- case "${_OPT_RESOLUTION}" in
- 75)
- list_append msr_rl '-z' '104';
- # '100' corresponds to 72dpi
- ;;
- 100)
- list_append msr_rl '-z' '139';
- ;;
- esac;
- ;;
- esac;
- fi;
- if is_yes "${_OPT_ICONIC}"
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-iconic';
- ;;
- esac;
- fi;
- if is_yes "${_OPT_RV}"
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi)
- list_append msr_rl '-rv';
- ;;
- esac;
- fi;
- if is_not_empty "${_OPT_XRM}"
- then
- case "${msr_prog}" in
- ghostview|gv|gxditview|xditview|xdvi|xpdf)
- eval set x "${_OPT_XRM}";
- shift;
- for i
- do
- list_append msr_rl '-xrm' "$i";
- done;
- ;;
- esac;
- fi;
- if is_not_empty "${msr_title}"
- then
- case "${msr_prog}" in
- gxditview|xditview)
- list_append msr_rl '-title' "${msr_title}";
- ;;
- esac;
- fi;
- _DISPLAY_ARGS="${msr_rl}";
- eval ${_UNSET} msr_n;
- eval ${_UNSET} msr_prog;
- eval ${_UNSET} msr_rl;
- eval ${_UNSET} msr_title;
- eval "${return_ok}";
-} # main_set_resources
-
-
-########################################################################
-# main_display ()
-#
-# Do the actual display of the whole thing.
-#
-# Globals:
-# in: $_DISPLAY_MODE, $_OPT_DEVICE,
-# $_ADDOPTS_GROFF, $_ADDOPTS_POST, $_ADDOPTS_X,
-# $_TMP_CAT, $_OPT_PAGER, $PAGER, $_MANOPT_PAGER,
-# $_OUTPUT_FILE_NAME
-#
-# Variable prefix: md
-#
-main_display()
-{
- func_check main_display = 0 "$@";
-
- export md_addopts;
- export md_groggy;
- export md_modefile;
-
- if obj _TMP_CAT is_non_empty_file
- then
- md_modefile="${_OUTPUT_FILE_NAME}";
- else
- echo2 'groffer: empty input.';
- clean_up;
- eval ${_UNSET} md_modefile;
- eval "${return_ok}";
- fi;
-
- # go to the temporary directory to be able to access internal data files
- cd "${_TMP_DIR}" >"${_NULL_DEV}" 2>&1;
-
- case "${_DISPLAY_MODE}" in
- groff)
- _ADDOPTS_GROFF="${_ADDOPTS_GROFF} ${_ADDOPTS_POST}";
- if obj _OPT_DEVICE is_not_empty
- then
- _ADDOPTS_GROFF="${_ADDOPTS_GROFF} -T${_OPT_DEVICE}";
- fi;
- md_groggy="$(tmp_cat | eval grog "${md_options}")";
- exit_test;
- _do_opt_V;
-
- obj md_modefile rm_file;
- mv "${_TMP_CAT}" "${md_modefile}";
- trap_unset;
- cat "${md_modefile}" | \
- {
- trap_set;
- eval "${md_groggy}" "${_ADDOPTS_GROFF}";
- } &
- ;;
- text|tty)
- case "${_OPT_DEVICE}" in
- '')
- md_device="$(get_first_essential \
- "${_OPT_TEXT_DEVICE}" "${_DEFAULT_TTY_DEVICE}")";
- exit_test;
- ;;
- ascii|cp1047|latin1|utf8)
- md_device="${_OPT_DEVICE}";
- ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
- ;;
- esac;
- md_addopts="${_ADDOPTS_GROFF} ${_ADDOPTS_POST}";
- md_groggy="$(tmp_cat | grog -T${md_device})";
- exit_test;
- if obj _DISPLAY_MODE is_equal 'text'
- then
- _do_opt_V;
- tmp_cat | eval "${md_groggy}" "${md_addopts}";
- else
- md_pager='';
- for p in "${_OPT_PAGER}" "${PAGER}" "${_MANOPT_PAGER}" \
- 'less -r -R' 'more' 'pager' 'cat'
- do
- md_p="$p";
- if eval is_prog ${md_p}
- then # no "" for is_prog() allows args for $p
- md_pager="${md_p}";
- break;
- fi;
- done;
- if obj md_pager is_empty
- then
- error 'main_display(): no pager program found for tty mode';
- fi;
- _do_opt_V;
- tmp_cat | eval "${md_groggy}" "${md_addopts}" | \
- eval "${md_pager}";
- fi;
- clean_up;
- ;;
- source)
- tmp_cat;
- clean_up;
- ;;
-
- #### viewer modes
-
- dvi)
- case "${_OPT_DEVICE}" in
- ''|dvi) do_nothing; ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}"
- ;;
- esac;
- md_modefile="${md_modefile}".dvi;
- md_groggy="$(tmp_cat | grog -Tdvi)";
- exit_test;
- _do_display;
- ;;
- html)
- case "${_OPT_DEVICE}" in
- ''|html) do_nothing; ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
- ;;
- esac;
- md_modefile="${md_modefile}".html;
- md_groggy="$(tmp_cat | grog -Thtml)";
- exit_test;
- _do_display;
- ;;
- pdf)
- case "${_OPT_DEVICE}" in
- ''|ps)
- do_nothing;
- ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
- ;;
- esac;
- md_groggy="$(tmp_cat | grog -Tps)";
- exit_test;
- _do_display _make_pdf;
- ;;
- ps)
- case "${_OPT_DEVICE}" in
- ''|ps)
- do_nothing;
- ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
- ;;
- esac;
- md_modefile="${md_modefile}".ps;
- md_groggy="$(tmp_cat | grog -Tps)";
- exit_test;
- _do_display;
- ;;
- x)
- case "${_OPT_DEVICE}" in
- X*)
- md_device="${_OPT_DEVICE}"
- ;;
- *)
- case "${_OPT_RESOLUTION}" in
- 100)
- md_device='X100';
- if obj _OPT_GEOMETRY is_empty
- then
- case "${_DISPLAY_PROG}" in
- gxditview|xditview)
- # add width of 800dpi for resolution of 100dpi to the args
- list_append _DISPLAY_ARGS '-geometry' '800';
- ;;
- esac;
- fi;
- ;;
- *)
- md_device='X75-12';
- ;;
- esac
- esac;
- md_groggy="$(tmp_cat | grog -T${md_device} -Z)";
- exit_test;
- _do_display;
- ;;
- X)
- case "${_OPT_DEVICE}" in
- '')
- md_groggy="$(tmp_cat | grog -X)";
- exit_test;
- ;;
- X*|dvi|html|lbp|lj4|ps)
- # these devices work with
- md_groggy="$(tmp_cat | grog -T"${_OPT_DEVICE}" -X)";
- exit_test;
- ;;
- *)
- warning "main_display(): \
-wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
- md_groggy="$(tmp_cat | grog -Z)";
- exit_test;
- ;;
- esac;
- _do_display;
- ;;
- *)
- error "main_display(): unknown mode \`${_DISPLAY_MODE}'";
- ;;
- esac;
- eval ${_UNSET} md_addopts;
- eval ${_UNSET} md_device;
- eval ${_UNSET} md_groggy;
- eval ${_UNSET} md_modefile;
- eval ${_UNSET} md_options;
- eval ${_UNSET} md_p;
- eval ${_UNSET} md_pager;
- eval "${return_ok}";
-} # main_display()
-
-
-########################
-# _do_display ([<prog>])
-#
-# Perform the generation of the output and view the result. If an
-# argument is given interpret it as a function name that is called in
-# the midst (actually only for `pdf').
-#
-# Globals: $md_modefile, $md_groggy (from main_display())
-#
-_do_display()
-{
- func_check _do_display '>=' 0 "$@";
- _do_opt_V;
- if obj _DISPLAY_PROG is_empty
- then
- trap_unset;
- {
- trap_set;
- eval "${md_groggy}" "${_ADDOPTS_GROFF}" "${_TMP_CAT}";
- } &
- else
- obj md_modefile rm_file;
- cat "${_TMP_CAT}" | \
- eval "${md_groggy}" "${_ADDOPTS_GROFF}" > "${md_modefile}";
- if is_not_empty "$1"
- then
- eval "$1";
- fi;
- obj _TMP_CAT rm_file_with_debug;
- if obj _VIEWER_TERMINAL is_yes # for programs that run on tty
- then
- eval "${_DISPLAY_PROG}" ${_DISPLAY_ARGS} "\"${md_modefile}\"";
- else
- case "${_DISPLAY_PROG}" in
-# lynx\ *|less\ *|more\ *) # programs known to run on the terminal
-# eval "${_DISPLAY_PROG}" ${_DISPLAY_ARGS} "\"${md_modefile}\"";
-# ;;
- *)
- trap_unset;
- {
- trap_set;
- eval "${_DISPLAY_PROG}" ${_DISPLAY_ARGS} "\"${md_modefile}\"";
- } &
- ;;
- esac;
- fi;
- fi;
- eval "${return_ok}";
-} # _do_display() of main_display()
-
-
-#############
-# _do_opt_V ()
-#
-# Check on option `-V'; if set print the corresponding output and leave.
-#
-# Globals: $_ALL_PARAMS, $_ADDOPTS_GROFF, $_DISPLAY_MODE, $_DISPLAY_PROG,
-# $_DISPLAY_ARGS, $md_groggy, $md_modefile
-#
-# Variable prefix: _doV
-#
-_do_opt_V()
-{
- func_check _do_opt_V '=' 0 "$@";
- if obj _OPT_V is_yes
- then
- _OPT_V='no';
- echo1 "Parameters: ${_ALL_PARAMS}";
- echo1 "Display mode: ${_DISPLAY_MODE}";
- echo1 "Output file: ${md_modefile}";
- echo1 "Display prog: ${_DISPLAY_PROG} ${_DISPLAY_ARGS}";
- a="$(eval echo1 "'${_ADDOPTS_GROFF}'")";
- exit_test;
- echo1 "Output of grog: ${md_groggy} $a";
- _doV_res="$(eval "${md_groggy}" "${_ADDOPTS_GROFF}")";
- exit_test;
- echo1 "groff -V: ${_doV_res}"
- leave;
- fi;
- eval "${return_ok}";
-} # _do_opt_V() of main_display()
-
-
-##############
-# _make_pdf ()
-#
-# Transform to pdf format; for pdf mode in _do_display().
-#
-# Globals: $md_modefile (from main_display())
-#
-# Variable prefix: _mp
-#
-_make_pdf()
-{
- func_check _do_display '=' 0 "$@";
- _mp_psfile="${md_modefile}";
- md_modefile="${md_modefile}.pdf";
- obj md_modefile rm_file;
- if gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
- -sOutputFile="${md_modefile}" -c save pop -f "${_mp_psfile}"
- then
- :;
- else
- error '_make_pdf: could not transform into pdf format.';
- fi;
- obj _mp_psfile rm_file_with_debug;
- eval ${_UNSET} _mp_psfile;
- eval "${return_ok}";
-} # _make_pdf() of main_display()
-
-
-########################################################################
-# main (<command_line_args>*)
-#
-# The main function for groffer.
-#
-# Arguments:
-#
-main()
-{
- func_check main '>=' 0 "$@";
- # Do not change the sequence of the following functions!
- landmark '13: main_init()';
- main_init;
- landmark '14: main_parse_MANOPT()';
- main_parse_MANOPT;
- landmark '15: main_parse_args()';
- main_parse_args "$@";
- landmark '16: main_set_mode()';
- main_set_mode;
- landmark '17: main_do_fileargs()';
- main_do_fileargs;
- landmark '18: main_set_resources()';
- main_set_resources;
- landmark '19: main_display()';
- main_display;
- eval "${return_ok}";
-}
-
-
-########################################################################
-
-main "$@";
diff --git a/contrib/groff/contrib/mm/ChangeLog b/contrib/groff/contrib/mm/ChangeLog
deleted file mode 100644
index c1f8985693c1..000000000000
--- a/contrib/groff/contrib/mm/ChangeLog
+++ /dev/null
@@ -1,679 +0,0 @@
-Thu May 26 08:23:40 2005 Werner LEMBERG <wl@gnu.org>
-
- * m.tmac: Load devtag.tmac.
-
-Wed Mar 16 06:56:02 2005 Larry Kollar <kollar@alltel.net>
-
- Add rudimentary support for grohtml.
-
- * m.tmac (H): Call DEVTAG-NH and DEVTAG-EO-H.
- (pg@enable-trap, pg@header): Do nothing for devhtml.
-
-Sun Mar 7 16:34:46 2004 Jeff Conrad <jeff_conrad@msn.com>
-
- * m.tmac (S): Improve debug message.
-
-Wed Mar 05:38:57 2004 Joergen Haegg <jh@axis.com>
-
- * Changed default value for Hy in manual to 0
- * Check Hy at each new page
-
-Mon Mar 1 22:16:38 2004 Jeff Conrad <jeff_conrad@msn.com>
-
- * m.tmac (S): Fix scaling indicator for vertical spacing.
-
-Tue Nov 05:14:45 2003 Joergen Haegg <jh@axis.com>
-
- * another patch from ulrich lauther to fix the
- TOC up to 14 heading levels.
-
-Mon Oct 13:48:25 2003 Joergen Haegg <jh@axis.com>
-
- * problem with more than 7 levels of headings fixed with
- patch from ulrich lauther.
-
-Wed Apr 06:42:35 2003 Joergen Haegg <jh@axis.com>
-
- * the footer was not adjusted by VM due to a missing
- pg*extra-footer-size in the calculation of pg*last-pos
-
-Wed Apr 06:04:58 2003 Joergen Haegg <jh@axis.com>
-
- * space adjustments in 4.MT to make it more like
- the original
-
-Sun Mar 21:45:10 2003 Joergen Haegg <jh@axis.com>
-
- * removed error check i 4.MT, .AF is not mandatory anymore
-
-Sat Mar 21:56:57 2003 Joergen Haegg <jh@axis.com>
-
- * cov*firm now defined only if arg to AF is non-empty
- That will also enable cov*default-firm from the mm locale-file
- to work.
-
-Sat Mar 21:05:29 2003 Joergen Haegg <jh@axis.com>
-
- * added .ll in pg@set-env to initialize the
- header environment properly
-
-Wed Mar 19 23:02:16 2003 Werner LEMBERG <wl@gnu.org>
-
- * groff_mm.man: Some fixes from Robert D. Goulding
- <goulding@Princeton.EDU>.
-
-Wed Sep 09:53:06 2002 Joergen Haegg <jh@axis.com>
-
- * added implicit -mm to mmroff, it's now possible
- to use mmroff with or without -mm as argument.
-
-Thu Aug 08 00:31:00 Bob Diertens <bobd@science.uva.nl>
-
- * m.tmac (VM): Add missing backslash.
-
-Fri Jun 10:37:58 2002 Joergen Haegg <jh@axis.com>
-
- * added init@reset for LT-macros so .S works for letters
-
-Thu May 06:30:06 2002 Joergen Haegg <jh@axis.com>
-
- * adding -T to VM for setting the total
- header and footer size.
- * changing pg*extra-header-size unit from v to u in DS-size
- calculation
-
-Mon May 05:40:16 2002 Joergen Haegg <jh@axis.com>
-
- * All lists now get an empty line before the list
- even if there is no empty lines between the items (bug in LB)
-
-Sat May 07:36:08 2002 Joergen Haegg <jh@axis.com>
-
- * PIC is now drawn 1v higher, making it
- possible to put a picture at 0,0.
- * Indentbug in P fixed, Pt=2 now behaves as it should
-
-Wed May 10:18:26 2002 Joergen Haegg <jh@axis.com>
-
- * added L, W and O in groff_mm.man
- * extra space in expression removed in EPIC
- * EPIC can leftadjust with -L
- * EPIC was drawing 1v down
- * forgot to add mmse.tmac and mm.tmac to cvs
-
-Fri May 20:35:32 2002 Joergen Haegg <jh@axis.com>
-
- * Clarified manual about INITR
- * Added mm.tmac and mmse.tmac wrappers
- * Fixed bug in mmroff so a .qrf-file always will be created
- * .EQ mark was not correctly positioned anymore.
- * changed SP to sp in DS/DE to further correct .EQ
-
-Sun Dec 9 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * Makefile.sim, groff_mm.man, groff_mmse.man: Minor fixes.
- * mmroff.man: This is a section 1 man page.
- Minor fixes.
- * Makefile.sub: Install mmroff.man in section 1.
-
-Wed Nov 28 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * m.tmac: Assure that the macro package is loaded only once.
-
-Wed Sep 5 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * m.tmac: Enable all warnings only if no -W or -w option is given on
- the command line (or rather, if only the default warnings are
- set).
-
-Mon Sep 3 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * groff_mm.man: Don't use .ne for TTY devices.
-
-Thu Jul 26 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * groff_mm.man: Start always a new line after end of sentence. Add
- some compatibility info to the HF variable.
-
-Thu Jul 26 00:00:00 2001 Larry Jones (larry.jones@sdrc.com)
-
- * m.tmac: Fix initialization of Hps1 and Hps2.
-
-Wed May 16 00:00:00 2001 Bruce Lilly (blilly@erols.com)
-
- * m.tmac (TH): Fix incorrect error message.
-
-Thu Apr 12 00:00:00 2001 Ruslan Ermilov (ru@FreeBSD.org)
-
- * groff_mm.man: Fixing some typos.
-
-Mon Mar 5 09:30:18 2001 Jörgen Hägg (jh@axis.com)
-
- * S didn't reset to default point size
- * (dummy line to force cvs update...)
-
-Sat Jan 06 10:30:00 2001 Werner LEMBERG (wl@gnu.org)
-
- * Fixed assignment of page offset given as a command line argument.
-
-Fri Nov 17 05:34:17 2000 Jörgen Hägg (jh@axis.com)
-
- * Renamed tmac.m and tmac.mse to m.tmac and mse.tmac
-
-Thu Sep 14 05:52:48 2000 Jörgen Hägg (jh@axis.com)
-
- * New Changelog-format, it will show changes better.
- Easier for other to use. (Somehow I didn't really
- understand why the e-mail address was supposed to be
- 'jh at axis.com' in the Changelog. :-)
-
-Mon Aug 28 00:00:00 2000 Bruno Haible (haible at clisp.cons.org)
-
- * Makefile.sub: New target 'all', makes all prerequisites of
- 'install'.
-
-Thu Sep 7 06:17:42 2000 Jörgen Hägg (jh at axis.com)
-
- * version 2.0
- * Had to do something about my version numbering.
- The main CVS archive was not in sync with mine.
- So, now it is 2.0. :-)
-
-Sat Jun 17 23:00:00 2000 Eli Zaretskii (eliz@is.elta.co.il)
-
- * Makefile.sim (.man.n): Replace `;' with `|', since DOS/Windows
- path lists use the semicolon as a separator.
-
-Sun Jun 4 21:39:00 2000 Kaneda Hiroshi (vanitas at ma3.seikyou.ne.jp)
-
- * Fixing a lot of typos in groff_mm.man
-
-Tue Mar 7 00:00:00 2000 OKAZAKI Tetsurou (okazaki at be.to)
-
- * Makefile.sub: Use $(INSTALL_SCRIPT) for script files.
-
-Sun Jan 30 22:52:20 2000 Jörgen Hägg (jh at axis.com)
-
- * version 1.34
- * Changed the version number in the CVS repository
- * MC had a bug in column calculation, (thanks to T. Kurt Bond)
-
-Fri Sep 3 07:33:14 1999 Jörgen Hägg (jh at axis.com)
-
- * version 1.33
- * At last! I finally tracked down the PGFORM bug!
- It didn't setup the @pl, @ll and @po as it should, now it does.
- * mgm_ref/mgm_roff renamed to mmroff [-x]
- * fixed y2k-bug in \*[DT]
- * \n[cov*year] removed, hope noone used that.
- * ISODATE added with Iso as command line flag
- (iso-date suggested by Paul Eggert)
- * Added ISODATE to tmac.mse and removed local settings
- of new-date.
- * INITI syntax changed and enhanced. Index processing is now
- done with mmroff.
- * A few examples has been added, new subdirectory 'examples'.
- * Fixed bug with SETR, header references are now only saved
- when Ref > 0
- * Problem with register H1h fixed
- * Added test for missing abstract in 4.MT
- * Updated Makefile.sub, using tmac_m_prefix.
-
-Mon Mar 15 22:22:42 1999 Jörgen Hägg (jh at axis.com)
-
- * OK, let's release this as a beta, 1.33 will be better. :-)
- * version 1.32
- * fixed .el-error
- * Added number variable Hss
- * Changed Hps1 and Hps2 to units
- * added hd*h1-text to be used in user defined macro TP.
- * -U needed for SETR (I really need 'mv', 'echo', 'rm'
- and 'test' builtin!)
- * Rewritten the reference system, SETR now prints to stderr
- if the number register Qrf > 0. Store in the filename
- that is the argument to .INITR
- The old behaviour is returned if number register Initr > 0.
- * Fixed bug with List of XXXX, long lines messed up the result.
- * added number register H1dot.
- * added string variable H1txt
- * added string variable Tcst
- * added number register Dsp.
- * added alias APPX for user-defined appendix title.
- * added string variable Apptxt
- * added H1h for use in TP in headers
- * added macro EPIC
- * added macro PIC (safe replacement for PSPIC)
- * fixed Hps-bug, should be 1, not 1v.
- * fixed bug with APPSK, variable not set.
-
-Wed Feb 4 15:46:04 1998 Jörgen Hägg (jh at axis.se)
-
- * version 1.31
- * .LI will now honor a space mark.
- * Another fix for .AU to let it be used without arguments.
- * uninitialized eq*label fixed
-
-Fri Sep 6 07:13:07 1996 Jörgen Hägg (jh at axis.se)
-
- * version 1.30
- * This is more like a beta-release, bugs might pop up. :-)
- * last line in TOC was not correctly terminated (missing .br)
- * changed the indentation for displays, it will now
- indent to the current indent, not the one at the definition
- of the display.
- * Equation marks should now work better, indentation also.
- * included these bug fixes from Larry Jones:
- * The documentation for the argument to .AS was incorrect for MT 4.
- * \*(EM should be a double-dash for nroff.
- * \nS is in points, not units.
- * If \nO isn't set, the default page offset should be .75i for nroff
- and .963i for troff.
- * .S D should set the point size to \nS, not 10.
- * .S was setting the vertical spacing based on the old point size
- instead of the new point size.
- * Got rid of a spurrious .br that prevented run-in headings from
- working.
- * Reset the .SP counters in pg@header so that spacing on one page
- won't affect spacing on subsequent pages.
- * Allow .AU and .AF with no arguments (real mm does, even though it
- isn't documented).
- * Do .init@reset first thing to initialize the default environment.
- * For MT 4, the title should be 4 points larger than the default size,
- not 12 point.
- * The cover environment needs to be initialized.
- * Printing the abstract on the first page needs to be controlled by
- the .AS argument.
- * Heading eject should be suppressed if the heading immediately
- follows the first page stuff (title, author, etc.).
- * support for table of contents numbering style (.nr Oc)
- * changes the troff empty line height from .25v to .5v
- * fixed section page numbering
- * fixed a really nasty bug in footnotes that could cause you
- to lose the page footer completely if the very first
- footnote on the page occurred at just the wrong place
-
-
-Wed May 15 07:39:32 1996 Jörgen Hägg (jh at axis.se)
-
- * version 1.29
- * Syntax and scaling errror fixed, (thanks to Frazer Williams)
- * DF/DE will now do a line-break before printing the display.
- * Updated the manual for TB,FG,EX and EC.
- * Added support for the ms- (and mgs-)macro .IX
- * Added indexmacro IX, INITI, IND and INDP, support for
- TXIND, TYIND and TZIND.
- * PGFORM will now always really reset to the default
- values for unspecified arguments.
- * Floating displays tested and repaired, it should
- now (finanlly) work exactly as the original (I hope :-).
- * Should now set year correctly even after 2000.
- * Stupid bug in PGNH fixed.
- * Corrected line length for figure caption (FG and friends)
-
-
-Mon Apr 24 07:37:52 1995 Jörgen Hägg (jh at axis.se)
-
- * version 1.28
- * Added AVL (AV without date)
- * Fixed nroff scaling for W and L.
- * Added support for register E and roman/bold
- for all Subject/Date/From strings.
- * Added support for register C (1-4), (for DRAFTs and other types)
- * Will protest if not used with groff.
- * Change of the internal number registers @ps and @vs, they
- are now in units, and is set in the new macros .@ps and .@vs.
- @ps and @vs is now corrected to the real point and vertical size.
- * Macro EQ has now correct pointsize.
- * Figures should now get the right page number in the index.
- * User-defined macros can now be defined for list of
- figures, tables, equations and exhibits (T{X,Y}{FG,TB,EC,EX}.
- * Space may be omitted between prefix and mark in automatic lists (.AL)
- See .LI
-
-Tue Jan 10 07:51:37 1995 Jörgen Hägg (jh at axis.se)
-
- * version 1.27
- * Manual updated
- * More bugs fixed in DS/DF
- * added alias for :g
- * LC can now be used without argument (as the manual says. :-)
- * Register :R now supported (RS/RF)
- * footnote line was printed even if there was no room for
- any footnotes. Fixed.
- * Fixed 1C so that it can be used without page eject
- * Added support for EOP (TPs twin)
- * Hyphenation turned off by default. (Hy == 0)
-
-Fri Nov 4 08:14:50 1994 Jörgen Hägg (jh at axis.se)
-
- * version 1.25
- * DS/DF separated and several bugs fixed. Watch out for new though. :-)
- * string DT was emptied by mistake in the previous version.
- * RD made prettier.
- * typo in AV and let@print-head fixed.
-
-Mon Oct 31 08:19:24 1994 Jörgen Hägg (jh at axis.se)
-
- * version 1.24
- * Bug fixed and format extended in .SG and .FC.
- * date is always printed unless .ND without argument is used.
- (I wonder what's the right thing to do, this might change.)
- * Swedish letter-standards implemented in tmac.mse.
- * .ND can be used to turn off the date. (Empty argument)
-
-Mon Oct 31 08:14:09 1994 Jörgen Hägg (jh at axis.se)
-
- * version 1.23
- * An attempt to get in sync with RCS. This is the distributed
- version.
-
-Thu Oct 27 08:29:34 1994 Jörgen Hägg (jh at axis.se)
-
- * version 1.22
- * (version 1.21 lost... :-)
- * Letter macros added!!
- * The following macros are added:
- * AV, FC, IA ,IE, LT, LO, NE, NS, SG, WA, WE
- * nP also added.
-
-Tue Dec 14 16:26:36 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.20
- * spelling-corrections
- * Makefile.sim updated to the correct version, and a uninstall
- target added.
- * @cur-lib removed from tmac.m (obsolete)
- * fixed check for references i .TC, .RP now resets the flag correctly.
- * floating display should now be printed if there is space.
- * first version using RCS. I've been avoiding version control until it
- became necessary.
- * WC WD now works in two-column-mode.
-
-Tue Sep 7 08:37:00 1993 Jörgen Hägg (jh at efd.lth.se)
-
- * version 1.19
- * .lt is called in the header for .TP also.
- * Variable Pgps added to control the header and footer point-size.
- * Error-text printed with .APP removed.
- * Error with .FG, .TB, .EC and .EX indentation fixed.
- * header and footer line-length is not changed by MC or 2C.
- * Default for page-length and page-offset is now taken from
- \n[.p] and \n[.o].
- * Argument to .ab (abort) is supplied.
- * Argument to .1C added.
- * Argument to .PGFORM added.
- * RP/RS/RF totally rewritten. Should work with 2C now.
-
-Fri Apr 23 10:37:25 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.18
- * Height of display is now more exactly calculated.
- * tabs and blankspaces where wrong in .VERBON.
- * error in manual for escape-character in VERBON.
- * Makefile.sub: installed tmac.m as tmac.m and tmac.mse
- * Installation of tmac.mse now supports TMAC_M.
- * bug with N fixed.
-
-Mon Apr 5 09:36:01 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.17
- * MULB preserves size.
- * bug in VERBON fixed, causing strange errors.
- * section-page footer fixed.
- * added support for numberregister S
- * fixed bug with floating displays wich made floats to
- generate space on a page, but broke page anyway.
- * end-of-page trap reinstalled.
-
-Mon Mar 29 10:53:13 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.16
- * MUL* now use the previous font and family.
- * extra blank page at end-of-text eliminated.
-
-Mon Mar 8 10:27:47 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.15
- * Didn't restore pointsize to current size in .H.
- * B1/B2 did not work with indent. (MULE and friends)
- * fixed old problem with trailing empty pages.
-
-Fri Mar 5 15:20:49 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.14
- * Sigh. Amazing what a missing \} can do. If the string
- HP was set, then all text disappeared...
-
-Fri Mar 5 14:12:43 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.13
- * Fixed bug with handling ps/vs in .H. (again, sigh... )
-
-Wed Mar 3 09:21:20 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.12
- * Line-break added to PGFORM.
- * added more features to VERBON
- * .S is not used anymore in H, it caused confusion with
- normal text, but it will still set .vs.
- * SK was broken, will now produce the requested number of
- empty pages.
- * dotted lines added to LIST OF FIGURES adn friends.
- Also better linespacing.
-
-Mon Feb 22 12:41:06 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.11
- * missing left-parenthesis gave ") .sp" when N=4.
- * N=4 removed user-specified header also.
- * MOVE made linelength pageoffset wider than wanted.
- * fixed (again) parenthesis in RP.
-
-Thu Jan 21 12:10:39 1993 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.10
- * changed PROG_PREFIX to g in the manual-pages.
- * Better check if new page is needed in .H, when Ej>0.
- * Usage of variable Lsp now more complete.
- * Space added in TOC when mark is equal to size.
- * Usermacro HY moved after font-calulations.
- * .S used instead of .ps, which will use .vs correct.
- * Now possible to set Hps1/2 inside HX.
- * .FD "" 1 is now fixed.
- * section-page numbering bug fixed.
- * several bugs in VERBON/OFF fixed.
-
-Tue Dec 8 16:43:15 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.09
- * N==4 gives no default header
-
-Sat Nov 21 14:28:20 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.08
- * Escape-character disabled between
- VERBON/VERBOFF (turned on by an argument).
- Pointsize and fontchange also added as arguments.
- * MULB, MULN and MULE added to get multicolumn output
- with different width.
- * Number register N can now use 1-5.
- * Register Sectp and Sectf added.
- * Register P is now updated correctly for "section-page" numbering.
-
-Thu Nov 19 11:19:33 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.07
- * .OP fixed to eject a blank page if not odd.
-
-Fri Nov 13 09:46:09 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.06
- * Macro TL rewritten. TL depends now on a following .AU.
- * NOTES updated.
- * .lt is now used more frequent when linelength is changed.
- * macro AST added.
- * removed PH/EH/OH not needed in ?.MT.
-
-Wed Oct 28 14:35:43 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.05
- * .VM implemented.
- * Possible bug in page heading fixed. Changed .sp to 'sp in HEADER.
-
-Thu Aug 20 13:56:31 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.04
- * page-break in .EQ moved.
- * changed unit for footer-size and header-size from units to lines.
- Fixes problems with .S and page-breaks.
- * \n[%] is now treated as a string, wich makes it possible
- to assign new formats to it. Unfortunately, it was necessary
- to change the page-number-variable in GETPN to a string.
- * Makefile.sub included. (Thank you, James)
-
-Thu May 7 16:14:10 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.03
- * Typo and centering in DS/DE fixed.
- Even and odd pageheaders were reversed.
- * LI: pad and mark-indent was lost in some earlier versions. Now fixed.
- * fixed bug in reference to .FG, .TB, ...
- * APP did not clear headercounters.
- * Pointsize in titles is now only set at the beginning and
- when PH, PF, OH, OF, EH and EF are used.
-
-Thu May 6 16:01:35 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.02
- * OP fixed.
-
-Fri Mar 6 09:36:09 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.01
- * two .LI without text between should not be printed
- on the same row. Now fixed.
- * figure titles and friends fixed, now possible with many .FG
- in a DS/DE. Didn't always position correctly in previous version,
- but is now always printed as it should.
- * Makefile fixed for Ultrix.
- * DS/DF could not handle empty arguments correct
- * Missing .br i EQ added.
-
-Sat Jan 25 15:47:21 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 1.00
- * No betaversion anymore!
- * Fixed headernumbers within appendixes.
- * DS did not keep the same font as before DS.
- * mmse did a line break.
-
-Fri Jan 24 14:38:16 1992 Joergen Haegg (jh at efd.lth.se)
-
- * version 0.16
- * bug in TC, multiple line headers did not wrap correctly.
- * added support for mm/locale and mm/language_locale.
- * cov*default-firm in locale sets name of firm in the MT covers.
- * cov*location-xxxx in locale sets location xxxx to the contents
- of cov*location-xxxx. Used in the MT covers.
- * hanging indent in lists fixed.
- * use larger empty lines if .nroff is defined.
- * macros, like .P, can now be used inside abstracts.
- * .S do not reset indentation anymore.
- * .RS aA now sets a string, not an integer.
- * appendix with .APP or .APPSK added.
-
-Thu Nov 28 22:00:59 1991 Joergen Haegg (jh at efd.lth.se)
-
- * version 0.15
- * Fixed .AU in MT 0-3, added support for variable Au.
- * Bug in the positioning of the foot-notes.
- * lists not indented properly.
- * Hps1 and Hps2 added.
- * COVER had to have an argument.
- * table of contents can now have multiline header.
- * .HU now increments headingvariable H?
- * added the inclusion of a locale file.
-
-Sat Nov 23 14:40:17 1991 Joergen Haegg (jh at efd.lth.se)
-
- * version 0.14
- * bug when using -rO fixed.
- * MT 1-4 added.
- * default is now MT 1
- * .EQ/.EN can be used outside of .DS/.DE without complaints. But
- I don't recommend it. Neither does the DWB books.
- * LI don't break lines now if arg too big.
- * PGFORM did not reset indent.
- * Added the numbervariable Hps.
- * Rewritten and added MT 0-5 + "string".
- * Added TM.
- * Indent to AS added
-
-Wed Nov 6 15:18:40 1991 Joergen Haegg (jh at efd.lth.se)
-
- * version 0.13
- * ds*format nod defined if PS/PE is used without DS/DE.
- * GETST added, fourth argument to EX, FG, TB and EC added.
-
-Mon Nov 4 13:38:01 1991 Joergen Haegg (jh at efd.lth.se)
-
- * version 0.12
- * Fixed C,D,P,+-size in .S
-
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * Next version will have ChangeLog entries...
- * Bug in INITR fixed.
- * VERBON/VERBOFF added to include programlistings
- * Bug in .DE fixed, addition overflow
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * spelling error in month-names.
- * WC should work now (no warranty :-)
- * FD almost finished, some details missing.
- * incorrect calculation of foot-notes fixed.
- * DS/DE did not break page when the size was smaller than the paper
- * Forward/backward referencesystem added. Se .INITR in README.
- * mgmsw changed name to mgmse.
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * embarrassing bug in .P fixed
- * .H did always eject page, now fixed.
- * lost floating displays now found.
- * accents added (from mgs)
- * empty line in .EQ/.EN removed
- * indentation in .TC corrected.
- * indentation of DS/DE in lists fixed.
- * .TB and friends now work inside DS/DE and outside.
- * .WC partially implemented (WF and WD). Still working on it.
- * .mso used if version>=1.02
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * register P was not working.
- * support for register Fg, Tb, Ec and Ex.
- * list items was left on the previous page at a page break.
- * tlevel in .TC now defaults to 2.
- * string DT, EM and Tm supported.
- * new macro: PGNH, see comments.
- * bug in MOVE fixed.
- * pagenumber in .TC fixed.
- * a blank page was ejected if Ej==1, now fixed
- * bug in floating display fixed (did break and SP wrong)
- * bug in .SP fixed, no lines is now printed at top of page
- * There are still problems with footnotes and displays in two column mode.
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * register P added (same as %)
- * bug in floating displays fixed
- * MOVE added
- * MT added, see comment below
- * COVER/COVEND added
- * fixed bug in figure titles
- * extended S, se comment below
- * MT 0 added
- * ms-cover added (COVER ms)
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * bugs in RD and comb. fonts fixed
-Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
- * HC added
- * Combined fonts (IB,BI...)
- * HM added
- * RD added
- * OP added
- * TP&PX supported
- * warnings for unimplemented macros
diff --git a/contrib/groff/contrib/mm/Makefile.sim b/contrib/groff/contrib/mm/Makefile.sim
deleted file mode 100644
index 2c645bee3180..000000000000
--- a/contrib/groff/contrib/mm/Makefile.sim
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# $Id: Makefile.sim,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
-#
-# To install mgm separately as gm.tmac:
-# make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \
-# INSTALL_DATA='install -m 644' tmac_m=gm install
-#
-# or as m.tmac:
-#
-# tmacdir is the destination for your groff/tmac-directory, srcdir is
-# this directory and INSTALL_DATA is the command to install a file with.
-# If you dont have 'install': use 'cp'.
-
-
-# change this to whatever you like
-tmacdir=/usr/local/lib/groff/tmac
-#tmac_m = gm
-tmac_m = m
-indexdir = xx
-install = install -m 644
-
-# Do not change anything below this line
-srcdir = .
-version = 2.8
-mdate = 2002-05-11
-
-.SUFFIXES: .n .man
-
-all:
-
-
-install: groff_mm.n groff_mmse.n
- $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
- INSTALL_DATA='$(install)' tmac_m=$(tmac_m) install
-
-uninstall: groff_mm.n groff_mmse.n
- $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
- INSTALL_DATA='$(install)' tmac_m=$(tmac_m) uninstall_sub
-
-
-.man.n:
- @echo Making $@ from $<
- @-rm -f $@
- @sed -e "s|@HYPHENFILE@|$(hyphenfile)|g" \
- -e "s|@FONTDIR@|$(fontdir)|g" \
- -e "s|@FONTPATH@|$(fontpath)|g" \
- -e "s|@MACRODIR@|$(tmacdir)|g" \
- -e "s|@MACROPATH@|$(tmacpath)|g" \
- -e "s|@DEVICE@|$(DEVICE)|g" \
- -e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
- -e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
- -e "s|@INDEX_SUFFIX@|$(indexext)|g" \
- -e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
- -e "s|@MAN1EXT@|$(man1ext)|g" \
- -e "s|@MAN5EXT@|$(man5ext)|g" \
- -e "s|@MAN7EXT@|$(man7ext)|g" \
- -e "s|@TMAC_S@|$(tmac_s)|g" \
- -e "s|@TMAC_M@|$(tmac_m)|g" \
- -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
- -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
- -e "s|@VERSION@|$(version)|g" \
- -e "s|@MDATE@|$(mdate)|g" \
- -e "s|@g@|$(g)|g" \
- -e "s!@G@;`echo $(g) | tr [a-z] [A-Z]`!g" \
- $< >$@
-
diff --git a/contrib/groff/contrib/mm/Makefile.sub b/contrib/groff/contrib/mm/Makefile.sub
deleted file mode 100644
index 40b77071d51c..000000000000
--- a/contrib/groff/contrib/mm/Makefile.sub
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# $Id: Makefile.sub,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
-#
-PROG=mmroff
-MAN1=\
- mmroff.n
-MAN7=\
- groff_mm.n \
- groff_mmse.n
-FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov
-# Local configuration files with default values.
-LOCALE=locale se_locale
-CLEANADD=temp
-
-all: mmroff
-
-install: install_mm
-
-install_mm: install_mmroff install_m
- -test -d $(tmacdir)/mm || $(mkinstalldirs) $(tmacdir)/mm
- -for f in $(FILES); do \
- rm -f $(tmacdir)/mm/$$f; \
- $(INSTALL_DATA) $(srcdir)/mm/$$f $(tmacdir)/mm/$$f; \
- done
- -for f in $(LOCALE); do \
- test -f $(tmacdir)/mm/$$f || touch $(tmacdir)/mm/$$f; \
- done
-
-install_m:
- -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
- -rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m
- -rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac
- $(INSTALL_DATA) $(srcdir)/m.tmac $(tmacdir)/$(tmac_m_prefix)m.tmac
- @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
- $(srcdir)/mse.tmac > $(tmacdir)/$(tmac_m_prefix)mse.tmac
- @sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
- $(srcdir)/mmse.tmac > $(tmacdir)/$(tmac_m_prefix)mmse.tmac
- @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
- $(srcdir)/mm.tmac > $(tmacdir)/$(tmac_m_prefix)mm.tmac
-
-install_mmroff: mmroff
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/mmroff
- $(INSTALL_SCRIPT) mmroff $(bindir)/mmroff
-
-mmroff: mmroff.pl
- -rm -f $@
- -sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/mmroff.pl >$@
- -chmod +x $@
-
-uninstall_sub:
- -for f in $(FILES); do rm -f $(tmacdir)/mm/$$f; done
- -for f in $(LOCALE); do \
- test -s $(tmacdir)/mm/$$f || rm -f $(tmacdir)/mm/$$f; \
- done
- -rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m
- -rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac
- -rm -f $(tmacdir)/$(tmac_m_prefix)mm.tmac
- -rm -f $(tmacdir)/$(tmac_m_prefix)mse.tmac
- -rm -f $(tmacdir)/$(tmac_m_prefix)mmse.tmac
- -rmdir $(tmacdir)/mm
- -rm -f $(bindir)/mmroff
diff --git a/contrib/groff/contrib/mm/NOTES b/contrib/groff/contrib/mm/NOTES
deleted file mode 100644
index 7643c10067c7..000000000000
--- a/contrib/groff/contrib/mm/NOTES
+++ /dev/null
@@ -1,105 +0,0 @@
-######################################################################
-$Id: NOTES,v 2.0 2000/09/14 03:40:24 jhaegg Exp $
-
-Beware!
-This may be old information. Trust only the source. :-)
-
-Implementation notes. (Or how to make your own national mm)
-
-Different commands:
-
-COVER [arg]
-MT [arg [addressee]]
-The arg is part of a filename in mm/*.MT or mm/*.cov.
-This file is read when the macro is executed. Therefore it must be
-put before any text output.
-In each file there are definitions of all extra macros needed for the
-cover sheet. MT files is only for compatibility reasons, and has several
-limits due to that it don't know when the cover starts, and cannot
-change sizes. Use COVER for new coversheet macros.
-
-But with MT it is possible to write all of the AT&T covers.
-An example can be found in mm/0.MT.
-
-When writing a new cover using COVER, have in mind that the cover
-should print the page with the COVEND macro. This macro
-should be defined by the new macrofile.
-
-Here is a part of ms.cov:
-> .\"-----------------
-> .de COVEND
-> .sp |4.2c
-> .cov@print-title
-> .cov@print-authors
-> .cov@print-firm
-> .cov@print-abstract
-> .cov@print-date
-This is important, since COVER disables the page header.
-> .pg@enable-top-trap
-Should begin with page one (normally).
-> .bp 1
-And enable the trap at the page footer.
-> .pg@enable-trap
-> ..
-
-#########################
-
-Variables for covers:
-I = integer
-S = string
-D = diversion
-M = macro
-
-Name Type Desc.
-cov*au I The number of authors.
-
-cov*title M Title collected with .TL.
-
-cov*au!x!y S Author(s) given to .AU
-cov*at!x!y S Author(s) title given to .AT
- x is the author-index [1-cov*au],
- y is the argument-index [1-9].
- Look at the table with indexes.
-
-cov*firm I Author(s) firm.
-
-cov*abs-arg I Argument to abstract.
-
-cov*abs-ind I Indent for abstract.
-
-cov*abs-name S The string 'ABSTRACT', changed with .AST
-
-cov*abstract M The abstract.
-
-cov*new-date S The date (todays date if ND is not used)
-
-cov*mt-type S MT type
-cov*mt-addresse S MT addressee
-
-
-##########################
-Argument-index for cov*au:
-
-Index Desc.
-1 name
-2 initials
-3 location
-4 department
-5 extension
-6 room
-7 arg 7
-8 arg 8
-9 arg 9
-
-The location is set to the contents of string cov*location-xxxx
-if location is equal to xxxx and cov*location-xxxx is defined
-in the file locale.
-
-
-Argument-index for cov*at:
-
-Index Desc.
-1 title 1
-. .
-. .
-9 title 9
diff --git a/contrib/groff/contrib/mm/README b/contrib/groff/contrib/mm/README
deleted file mode 100644
index f52f3eb0dbc6..000000000000
--- a/contrib/groff/contrib/mm/README
+++ /dev/null
@@ -1,31 +0,0 @@
-
-$Id: README,v 2.2 2002/05/22 06:26:12 jhaegg Exp $
-
-This is mgm, a macro package for groff.
-
-It is supposed to be compatible with the DWB mm macros,
-and has several extensions.
-
-Send bug reports to jh@axis.com with a description of the problem
-and a sample of text which reproduces the error.
-
-Don't forget to mention the version of mgm (look in the beginning
-of m.tmac) and the version of groff.
-
-Any new ideas or improvements are welcome.
-
-Newest version is available here or at the groff CVS repository.
-ftp://ftp.axis.se/pub/groff/mm<something>.gz
-
-You can install mgm as a separate package without the configure in groff
-with the following command:
-
-make -f Makefile.sim install
-
-This README should be bigger :-)
-
-/Jörgen Hägg
-
-Thanks to everyone who have sent me bug-reports and fixes.
-
-
diff --git a/contrib/groff/contrib/mm/examples/APP b/contrib/groff/contrib/mm/examples/APP
deleted file mode 100644
index 82352e58c3e4..000000000000
--- a/contrib/groff/contrib/mm/examples/APP
+++ /dev/null
@@ -1,352 +0,0 @@
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-granary
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.H 2 "grapefruit grapevine graph grapheme graphic graphite"
-granary
-grand
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.H 3 "grapple"
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.H 1 "Graves gravestone graveyard gravid gravitate gravy gray"
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.H 1 "greensward greenware Greenwich greenwood Greer greet"
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-.APP "" "Graves app a gravestone graveyard gravid gravitate gravy gray"
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.APP "" "Greenfield app b greengrocer greenhouse greenish Greenland Greensboro"
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic"
-.H 2 "granny granola grant grantee grantor granular granulate"
-.H 2 "granule Granville grape"
-.H 2 "grapefruit grapevine graph grapheme graphic graphite"
-.H 3 "grapple"
-grandfather
-grandiloquent
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-.APP ABC "greensward app abc greenware Greenwich greenwood Greer greet"
-graven
-Graves
-.APP "" "handstand app f handwrite handwritten handy handyman handymen"
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-.APPSK "" 10 "Handel app c 10 handhold handicap handicapped handicapper"
-.APPSK "" 23 "handicapping app d 23 handicraftsmen handiwork"
-.APPSK "" 99 "handmade app e 99 handset handshake handsome handspike"
-.nr Aph 0
-.APP "" "handstand app f handwrite handwritten handy handyman handymen"
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
-.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
-.H 2 "Greenblatt Greenbriar Greene greenery"
-.H 3 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
-.H 3 "greensward greenware Greenwich greenwood Greer greet"
-heady
-heal
-Healey
-health
-healthful
-healthy
-Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-heaven
-heavenward
-heavy
-heavyweight
-Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-.APP "" "hang hangable app f hangar hangman hangmen hangout hangover hank"
-Hecuba
-he'd
-hedge
-.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
-hedgehog
-hedonism
-hedonist
-heed
-heel
-.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-hello
-helm
-helmet
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-.APP "" "Hankel app g Hanley Hanlon Hanna Hannah Hannibal Hanoi Hanover"
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-henbane
-hence
-henceforth
-henchman
-henchmen
-.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-.TC
diff --git a/contrib/groff/contrib/mm/examples/B1B2 b/contrib/groff/contrib/mm/examples/B1B2
deleted file mode 100644
index a2bb3add57d9..000000000000
--- a/contrib/groff/contrib/mm/examples/B1B2
+++ /dev/null
@@ -1,91 +0,0 @@
-abetting
-abeyance
-abeyant
-abhorred
-abhorrent
-abide
-Abidjan
-Abigail
-abject
-ablate
-ablaze
-able
-ablution
-Abner
-abnormal
-Abo
-aboard
-abode
-abolish
-.B1
-abolition
-abominable
-abominate
-aboriginal
-AAA
-ABORIGINE
-ABORNING
-ABORT
-ABOUND
-ABOUT
-ABOVE
-ABOVEBOARD
-ABOVEGROUND
-abovementioned
-abrade
-Abraham
-Abram
-Abramson
-abrasion
-abrasive
-abreact
-.B2
-abreast
-abrogate
-abrupt
-abscess
-abscissa
-abscissae
-absence
-absent
-absentee
-absenteeism
-absentia
-absentminded
-absinthe
-absolute
-absolution
-absolve
-absorb
-absorbent
-absorption
-absorptive
-abstain
-abstention
-abstract
-abstracter
-abstractor
-ABSURD
-ABUILDING
-ABUNDANT
-ABUSABLE
-ABUSE
-ABUSIVE
-ABUT
-ABUTTED
-ABUTTING
-ABYSMAL
-ABYSS
-ABYSSINIA
-AC
-ACADEME
-ACADEMIA
-ACADEMIC
-ACADEMICIAN
-ACADEMY
-ACADIA
-ACANTHUS
-ACAPULCO
-ACCEDE
-ACCELERATE
-ACCELEROMETER
diff --git a/contrib/groff/contrib/mm/examples/COVER b/contrib/groff/contrib/mm/examples/COVER
deleted file mode 100644
index d23597f0a897..000000000000
--- a/contrib/groff/contrib/mm/examples/COVER
+++ /dev/null
@@ -1,235 +0,0 @@
-.COVER
-.ND 911123
-.TL "charge" "filing"
-This is a test
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-.AU "Nisse Svensson" "DGY" "BF" "Computer Center" "5488" "5-2115" "nisse@vira.sture.elm"
-.AF "MT GRANDSTAND GRANITE GRANITIC"
-.AS 1 10
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-grebe
-Grecian
-.AE
-.COVEND
-Greece
-greed
-greedy
-Greek
-green
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-grebe
-Grecian
-Greece
-greed
-greedy
-Greek
-green
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-greenware
diff --git a/contrib/groff/contrib/mm/examples/IND b/contrib/groff/contrib/mm/examples/IND
deleted file mode 100644
index fbf6c43a031a..000000000000
--- a/contrib/groff/contrib/mm/examples/IND
+++ /dev/null
@@ -1,4191 +0,0 @@
-.de foo
-a=\\$1, b=\\$2
-.br
-..
-.INITI N ind-data
-.H 1 "halve"
-.IND granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-.IND grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-.IND granulate
-granule
-Granville
-grape
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah"
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-.IND grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful"
-grebe
-Grecian
-Greece
-greed
-greedy
-.IND Greek
-green
-Greenbelt
-Greenberg
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-.H 1 "handgun"
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-.IND gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-.IND grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-.IND groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-.H 1 "handicapped handicapper handicapping handicraft handicraftsman"
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-.IND growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-.IND Guardia
-guardian
-Guatemala
-.IND gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-.H 1 "handicraftsmen handiwork handkerchief handle"
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-.IND guilty
-guinea
-guise
-guitar
-gules
-gulf
-.H 1 "handleable handlebar handline handmade handmaiden handout"
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-.IND gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-.IND gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-.H 1 "handset"
-Gutenberg
-Guthrie
-gutsy
-guttural
-.IND guy
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-.IND gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-.IND Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten"
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-.IND Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-.IND haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-.IND halfhearted
-halfway
-halibut
-halide
-.H 1 "handy handyman handymen Haney Hanford hang hangable hangar"
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-.IND Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-.IND Hampton
-hamster
-Han
-.H 1 "hangman hangmen hangout hangover hank Hankel Hanley"
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-.IND handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans"
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-.IND Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-.IND hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-.H 1 "Hansel"
-haphazard
-.IND haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy"
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-.IND hardworking
-hardy
-hare
-harelip
-harem
-.IND hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin"
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-.IND Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-.IND hatchet
-hatchway
-.IND hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-.IND Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-.H 2 "hammock Hammond hamper Hampshire Hampton hamster"
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-.IND headache
-.IND headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-.IND Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-.IND heaven
-heavenward
-heavy
-heavyweight
-.IND Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-.IND heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-.IND hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-.IND hello
-helm
-helmet
-.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead"
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-.IND henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-.IND hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-.IND Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-herewith
-heritable
-heritage
-Herkimer
-Herman
-.IND Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-.IND heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-.IND hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-.IND Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-.IND hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-.IND hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-.IND highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-.IND Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-.IND hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-.IND hiss
-histamine
-histidine
-histochemic
-.IND histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-.H 1 "harbinger"
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-.IND hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-.IND hoi
-.IND Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-.IND Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-.IND holystone
-.INDP
-inject injudicious Injun injunct injunction injure injurious injury
-injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards
-innate inner innermost innkeeper innocent innocuous innovate innuendo
-innumerable inoculate inoffensive inoperable inoperative inopportune
-inordinate inorganic input inputting inquest inquire inquiry inquisition
-inquisitive inquisitor inroad insane insatiable inscribe inscription
-inscrutable insect insecticide insecure inseminate insensible insensitive
-inseparable insert inset inshore inside insidious insight insightful
-insignia insignificant insincere insinuate insipid insist insistent
-insofar insolent insoluble insolvable insolvent insomnia insomniac
-insouciant inspect inspector inspiration inspire instable install
-installation instalment instance instant instantaneous instantiate
-.INITI H ind-data2
-.H 1 "halve"
-.IND granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-.IND grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-.IND granulate
-granule
-Granville
-grape
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah"
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-.IND grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful"
-grebe
-Grecian
-Greece
-greed
-greedy
-.IND Greek
-green
-Greenbelt
-Greenberg
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-.H 1 "handgun"
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-.IND gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-.IND grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-.IND groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-.H 1 "handicapped handicapper handicapping handicraft handicraftsman"
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-.IND growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-.IND Guardia
-guardian
-Guatemala
-.IND gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-.H 1 "handicraftsmen handiwork handkerchief handle"
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-.IND guilty
-guinea
-guise
-guitar
-gules
-gulf
-.H 1 "handleable handlebar handline handmade handmaiden handout"
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-.IND gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-.IND gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-.H 1 "handset"
-Gutenberg
-Guthrie
-gutsy
-guttural
-.IND guy
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-.IND gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-.IND Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten"
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-.IND Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-.IND haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-.IND halfhearted
-halfway
-halibut
-halide
-.H 1 "handy handyman handymen Haney Hanford hang hangable hangar"
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-.IND Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-.IND Hampton
-hamster
-Han
-.H 1 "hangman hangmen hangout hangover hank Hankel Hanley"
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-.IND handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans"
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-.IND Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-.IND hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-.H 1 "Hansel"
-haphazard
-.IND haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy"
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-.IND hardworking
-hardy
-hare
-harelip
-harem
-.IND hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin"
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-.IND Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-.IND hatchet
-hatchway
-.IND hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-.IND Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-.H 2 "hammock Hammond hamper Hampshire Hampton hamster"
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-.IND headache
-.IND headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-.IND Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-.IND heaven
-heavenward
-heavy
-heavyweight
-.IND Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-.IND heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-.IND hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-.IND hello
-helm
-helmet
-.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead"
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-.IND henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-.IND hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-.IND Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-herewith
-heritable
-heritage
-Herkimer
-Herman
-.IND Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-.IND heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-.IND hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-.IND Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-.IND hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-.IND hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-.IND highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-.IND Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-.IND hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-.IND hiss
-histamine
-histidine
-histochemic
-.IND histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-.H 1 "harbinger"
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-.IND hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-.IND hoi
-.IND Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-.IND Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-.IND holystone
-.INDP
-inject injudicious Injun injunct injunction injure injurious injury
-injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards
-innate inner innermost innkeeper innocent innocuous innovate innuendo
-innumerable inoculate inoffensive inoperable inoperative inopportune
-inordinate inorganic input inputting inquest inquire inquiry inquisition
-.INITI B ind-data3
-.H 1 "halve"
-.IND granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-.IND grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-.IND granulate
-granule
-Granville
-grape
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah"
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-.IND grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful"
-grebe
-Grecian
-Greece
-greed
-greedy
-.IND Greek
-green
-Greenbelt
-Greenberg
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-.H 1 "handgun"
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-.IND gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-.IND grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-.IND groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-.H 1 "handicapped handicapper handicapping handicraft handicraftsman"
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-.IND growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-.IND Guardia
-guardian
-Guatemala
-.IND gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-.H 1 "handicraftsmen handiwork handkerchief handle"
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-.IND guilty
-guinea
-guise
-guitar
-gules
-gulf
-.H 1 "handleable handlebar handline handmade handmaiden handout"
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-.IND gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-.IND gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-.H 1 "handset"
-Gutenberg
-Guthrie
-gutsy
-guttural
-.IND guy
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-.IND gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-.IND Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten"
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-.IND Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-.IND haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-.IND halfhearted
-halfway
-halibut
-halide
-.H 1 "handy handyman handymen Haney Hanford hang hangable hangar"
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-.IND Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-.IND Hampton
-hamster
-Han
-.H 1 "hangman hangmen hangout hangover hank Hankel Hanley"
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-.IND handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans"
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-.IND Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-.IND hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-.H 1 "Hansel"
-haphazard
-.IND haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy"
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-.IND hardworking
-hardy
-hare
-harelip
-harem
-.IND hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin"
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-.IND Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-.IND hatchet
-hatchway
-.IND hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-.IND Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-.H 2 "hammock Hammond hamper Hampshire Hampton hamster"
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-.IND headache
-.IND headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-.IND Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-.IND heaven
-heavenward
-heavy
-heavyweight
-.IND Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-.IND heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-.IND hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-.IND hello
-helm
-helmet
-.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead"
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-.IND henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-.IND hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-.IND Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-herewith
-heritable
-heritage
-Herkimer
-Herman
-.IND Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-.IND heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-.IND hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-.IND Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-.IND hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-.IND hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-.IND highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-.IND Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-.IND hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-.IND hiss
-histamine
-histidine
-histochemic
-.IND histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-.H 1 "harbinger"
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-.IND hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-.IND hoi
-.IND Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-.IND Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-.IND holystone
-.INDP
-inject injudicious Injun injunct injunction injure injurious injury
-injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards
-innate inner innermost innkeeper innocent innocuous innovate innuendo
-innumerable inoculate inoffensive inoperable inoperative inopportune
-inordinate inorganic input inputting inquest inquire inquiry inquisition
-.INITI B ind-data4 foo
-.H 1 "halve"
-.IND granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-.IND grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-.IND granulate
-granule
-Granville
-grape
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah"
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-.IND grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful"
-grebe
-Grecian
-Greece
-greed
-greedy
-.IND Greek
-green
-Greenbelt
-Greenberg
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-.H 1 "handgun"
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-.IND gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-.IND grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-.IND groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-.H 1 "handicapped handicapper handicapping handicraft handicraftsman"
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-.IND growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-.IND Guardia
-guardian
-Guatemala
-.IND gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-.H 1 "handicraftsmen handiwork handkerchief handle"
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-.IND guilty
-guinea
-guise
-guitar
-gules
-gulf
-.H 1 "handleable handlebar handline handmade handmaiden handout"
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-.IND gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-.IND gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-.H 1 "handset"
-Gutenberg
-Guthrie
-gutsy
-guttural
-.IND guy
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-.IND gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-.IND Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten"
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-.IND Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-.IND haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-.IND halfhearted
-halfway
-halibut
-halide
-.H 1 "handy handyman handymen Haney Hanford hang hangable hangar"
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-.IND Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-.IND Hampton
-hamster
-Han
-.H 1 "hangman hangmen hangout hangover hank Hankel Hanley"
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-.IND handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans"
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-.IND Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-.IND hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-.H 1 "Hansel"
-haphazard
-.IND haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy"
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-.IND hardworking
-hardy
-hare
-harelip
-harem
-.IND hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin"
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-.IND Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-.IND hatchet
-hatchway
-.IND hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-.IND Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-.H 2 "hammock Hammond hamper Hampshire Hampton hamster"
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-.IND headache
-.IND headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-.IND Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-.IND heaven
-heavenward
-heavy
-heavyweight
-.IND Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-.IND heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-.IND hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-.IND hello
-helm
-helmet
-.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead"
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-.IND henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-.IND hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-.IND Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-herewith
-heritable
-heritage
-Herkimer
-Herman
-.IND Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-.IND heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-.IND hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-.IND Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-.IND hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-.IND hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-.IND highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-.IND Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-.IND hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-.IND hiss
-histamine
-histidine
-histochemic
-.IND histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-.H 1 "harbinger"
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-.IND hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-.IND hoi
-.IND Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-.IND Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-.IND holystone
-.INDP
-inject injudicious Injun injunct injunction injure injurious injury
-injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards
-innate inner innermost innkeeper innocent innocuous innovate innuendo
-innumerable inoculate inoffensive inoperable inoperative inopportune
-inordinate inorganic input inputting inquest inquire inquiry inquisition
diff --git a/contrib/groff/contrib/mm/examples/LT b/contrib/groff/contrib/mm/examples/LT
deleted file mode 100644
index cf063897371c..000000000000
--- a/contrib/groff/contrib/mm/examples/LT
+++ /dev/null
@@ -1,1058 +0,0 @@
-.ND 1994-10-26
-.\" .WA "Nisse Nilsson" notitle
-.\" .WE
-.WA "Sven Olsson" title
-Return address
-Street
-City, State Zip Code
-Text
-.WE
-.IA "Inside address" title
-Addressee name XXXXXXX
-Title XXXXXXXXXXXXXXX
-Company xxxxxxxxxxxx
-Street xxxxxxxxxxxxxx
-City, State Zip Code
-Text xxxxxxxxxxxxxxxxxx
-.IE
-.LO CN
-.LO RN "referens"
-.LO AT Attention
-.LO SA "Hej hopp"
-.LO SJ "Subject line"
-.LT BL
-hepp
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-grebe
-Grecian
-Greece
-greed
-greedy
-Greek
-green
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-.P
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-Guardia
-guardian
-Guatemala
-gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-guilty
-guinea
-guise
-guitar
-gules
-gulf
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-Gutenberg
-Guthrie
-gutsy
-guttural
-guy
-.P
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-halfhearted
-halfway
-halibut
-halide
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-Hampton
-hamster
-Han
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-haphazard
-haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-hardworking
-hardy
-hare
-harelip
-harem
-hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-.P
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-hatchet
-hatchway
-hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-headache
-headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-heaven
-heavenward
-heavy
-heavyweight
-Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-hello
-helm
-helmet
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-.P
-herewith
-heritable
-heritage
-Herkimer
-Herman
-Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-hiss
-histamine
-histidine
-histochemic
-histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-.P
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-hoi
-Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-holystone
-.FC
-.SG
-.NS 7
-text text text
-text text text
-.NS 12
-Holyoke
-holystone
-.NS
-holt
-.NE
diff --git a/contrib/groff/contrib/mm/examples/LT.se b/contrib/groff/contrib/mm/examples/LT.se
deleted file mode 100644
index bfbd77f5543e..000000000000
--- a/contrib/groff/contrib/mm/examples/LT.se
+++ /dev/null
@@ -1,1062 +0,0 @@
-.\" groff -mmse LT.se
-.ND 1994-10-26
-.WA "Sven Olsson" title
-Return address
-Street
-City, State Zip Code
-Text
-.WE
-.IA "Inside address" title
-Addressee name XXXXXXX
-Title XXXXXXXXXXXXXXX
-Company xxxxxxxxxxxx
-Street xxxxxxxxxxxxxx
-City, State Zip Code
-Text xxxxxxxxxxxxxxxxxx
-.IE
-.LO DNAMN Dokumentnamn
-.LO MDAT 1994-01-01
-.LO BIL 2
-.LO KOMP Kompletteringsuppgift
-.LO DBET dokumentnummer
-.LO BET ärendebeteckning
-.LO MBET "Mottagarens b"
-.LO SIDOR 22
-.\" vänster eller högerställt brev
-.\" .LT SVH
-.LT SVV
-hepp
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-grebe
-Grecian
-Greece
-greed
-greedy
-Greek
-green
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-.P
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
-guaranty
-guard
-guardhouse
-Guardia
-guardian
-Guatemala
-gubernatorial
-Guelph
-Guenther
-guerdon
-guernsey
-guerrilla
-guess
-guesswork
-guest
-guffaw
-Guggenheim
-Guiana
-guidance
-guide
-guidebook
-guideline
-guidepost
-guiding
-guignol
-guild
-guildhall
-guile
-Guilford
-guillemot
-guillotine
-guilt
-guilty
-guinea
-guise
-guitar
-gules
-gulf
-gull
-Gullah
-gullet
-gullible
-gully
-gulp
-gum
-gumbo
-gumdrop
-gummy
-gumption
-gumshoe
-gun
-Gunderson
-gunfight
-gunfire
-gunflint
-gunk
-gunky
-gunman
-gunmen
-gunnery
-gunny
-gunplay
-gunpowder
-gunshot
-gunsling
-Gunther
-gurgle
-Gurkha
-guru
-Gus
-gush
-gusset
-gust
-Gustafson
-Gustav
-Gustave
-Gustavus
-gusto
-gusty
-gut
-Gutenberg
-Guthrie
-gutsy
-guttural
-guy
-.P
-Guyana
-guzzle
-Gwen
-Gwyn
-gym
-gymnasium
-gymnast
-gymnastic
-gymnosperm
-gyp
-gypsite
-gypsum
-gypsy
-gyrate
-gyrfalcon
-gyro
-gyrocompass
-gyroscope
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-halfhearted
-halfway
-halibut
-halide
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-Hampton
-hamster
-Han
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-Handel
-handful
-handgun
-handhold
-handicap
-handicapped
-handicapper
-handicapping
-handicraft
-handicraftsman
-handicraftsmen
-handiwork
-handkerchief
-handle
-handleable
-handlebar
-handline
-handmade
-handmaiden
-handout
-handset
-handshake
-handsome
-handspike
-handstand
-handwaving
-handwrite
-handwritten
-handy
-handyman
-handymen
-Haney
-Hanford
-hang
-hangable
-hangar
-hangman
-hangmen
-hangout
-hangover
-hank
-Hankel
-Hanley
-Hanlon
-Hanna
-Hannah
-Hannibal
-Hanoi
-Hanover
-Hanoverian
-Hans
-Hansel
-Hansen
-hansom
-Hanson
-Hanukkah
-hap
-haphazard
-haploid
-haploidy
-haplology
-happen
-happenstance
-happy
-Hapsburg
-harangue
-harass
-Harbin
-harbinger
-Harcourt
-hard
-hardbake
-hardboard
-hardboiled
-hardcopy
-harden
-hardhat
-Hardin
-Harding
-hardscrabble
-hardtack
-hardtop
-hardware
-hardwood
-hardworking
-hardy
-hare
-harelip
-harem
-hark
-Harlan
-Harlem
-Harley
-harm
-harmful
-Harmon
-harmonic
-harmonica
-harmonious
-harmony
-harness
-Harold
-harp
-harpoon
-harpsichord
-Harpy
-Harriet
-Harriman
-Harrington
-Harris
-Harrisburg
-Harrison
-harrow
-harry
-harsh
-harshen
-hart
-Hartford
-Hartley
-Hartman
-Harvard
-.P
-harvest
-harvestman
-Harvey
-hash
-hashish
-hasn't
-hasp
-hassle
-hast
-haste
-hasten
-Hastings
-hasty
-hat
-hatch
-hatchet
-hatchway
-hate
-hateful
-hater
-Hatfield
-hath
-Hathaway
-hatred
-Hatteras
-Hattie
-Hattiesburg
-Haugen
-haughty
-haul
-haulage
-haunch
-haunt
-Hausdorff
-Havana
-have
-haven
-haven't
-Havilland
-havoc
-haw
-Hawaii
-Hawaiian
-hawk
-Hawkins
-Hawley
-hawthorn
-Hawthorne
-hay
-Hayden
-Haydn
-Hayes
-hayfield
-Haynes
-Hays
-haystack
-Hayward
-hayward
-hazard
-hazardous
-haze
-hazel
-hazelnut
-hazy
-he
-head
-headache
-headboard
-headdress
-headland
-headlight
-headline
-headmaster
-headphone
-headquarter
-headquarters
-headroom
-headset
-headsman
-headsmen
-headstand
-headstone
-headstrong
-headwall
-headwater
-headway
-headwind
-heady
-heal
-Healey
-health
-healthful
-healthy
-Healy
-heap
-hear
-heard
-hearken
-hearsay
-hearse
-Hearst
-heart
-heartbeat
-heartbreak
-hearten
-heartfelt
-hearth
-hearty
-heat
-heater
-heath
-heathen
-heathenish
-Heathkit
-heave
-heaven
-heavenward
-heavy
-heavyweight
-Hebe
-hebephrenic
-Hebraic
-Hebrew
-Hecate
-hecatomb
-heck
-heckle
-Heckman
-hectic
-hector
-Hecuba
-he'd
-hedge
-hedgehog
-hedonism
-hedonist
-heed
-heel
-heft
-hefty
-Hegelian
-hegemony
-Heidelberg
-heigh
-height
-heighten
-Heine
-Heinrich
-Heinz
-heir
-heiress
-Heisenberg
-held
-Helen
-Helena
-Helene
-Helga
-helical
-helicopter
-heliocentric
-heliotrope
-helium
-helix
-he'll
-hell
-hellbender
-hellebore
-Hellenic
-hellfire
-hellgrammite
-hellish
-hello
-helm
-helmet
-Helmholtz
-helmsman
-helmsmen
-Helmut
-help
-helpful
-helpmate
-Helsinki
-Helvetica
-hem
-hematite
-Hemingway
-hemisphere
-hemispheric
-hemlock
-hemoglobin
-hemolytic
-hemorrhage
-hemorrhoid
-hemosiderin
-hemp
-Hempstead
-hen
-henbane
-hence
-henceforth
-henchman
-henchmen
-Henderson
-Hendrick
-Hendricks
-Hendrickson
-henequen
-Henley
-henpeck
-Henri
-Henrietta
-henry
-hepatica
-hepatitis
-Hepburn
-heptane
-her
-Hera
-Heraclitus
-herald
-herb
-Herbert
-Herculean
-Hercules
-herd
-herdsman
-here
-hereabout
-hereafter
-hereby
-hereditary
-heredity
-Hereford
-herein
-hereinabove
-hereinafter
-hereinbelow
-hereof
-heresy
-heretic
-hereto
-heretofore
-hereunder
-hereunto
-.P
-herewith
-heritable
-heritage
-Herkimer
-Herman
-Hermann
-hermeneutic
-Hermes
-hermetic
-Hermite
-hermitian
-Hermosa
-Hernandez
-hero
-Herodotus
-heroes
-heroic
-heroin
-heroine
-heroism
-heron
-herpes
-herpetology
-Herr
-herringbone
-Herschel
-herself
-Hershel
-Hershey
-hertz
-Hertzog
-hesitant
-hesitate
-hesitater
-Hesperus
-Hess
-Hesse
-Hessian
-Hester
-heterocyclic
-heterodyne
-heterogamous
-heterogeneity
-heterogeneous
-heterosexual
-heterostructure
-heterozygous
-Hetman
-Hettie
-Hetty
-Heublein
-heuristic
-Heusen
-Heuser
-hew
-Hewett
-Hewitt
-Hewlett
-hewn
-hex
-hexachloride
-hexadecimal
-hexafluoride
-hexagon
-hexagonal
-hexameter
-hexane
-hey
-heyday
-hi
-Hiatt
-hiatus
-Hiawatha
-hibachi
-Hibbard
-hibernate
-Hibernia
-hick
-Hickey
-Hickman
-hickory
-Hicks
-hid
-hidalgo
-hidden
-hide
-hideaway
-hideous
-hideout
-hierarchal
-hierarchic
-hierarchy
-hieratic
-hieroglyphic
-Hieronymus
-hifalutin
-Higgins
-high
-highball
-highboy
-highest
-highfalutin
-highhanded
-highland
-highlight
-highroad
-hightail
-highway
-highwayman
-highwaymen
-hijack
-hijinks
-hike
-hilarious
-hilarity
-Hilbert
-Hildebrand
-hill
-hillbilly
-Hillcrest
-Hillel
-hillman
-hillmen
-hillock
-hillside
-hilltop
-hilly
-hilt
-Hilton
-hilum
-him
-Himalaya
-himself
-hind
-hindmost
-hindrance
-hindsight
-Hindu
-Hinduism
-Hines
-hinge
-Hinman
-hint
-hinterland
-hip
-hippo
-Hippocrates
-Hippocratic
-hippodrome
-hippopotamus
-hippy
-hipster
-Hiram
-hire
-hireling
-Hiroshi
-Hiroshima
-Hirsch
-hirsute
-his
-Hispanic
-hiss
-histamine
-histidine
-histochemic
-histochemistry
-histogram
-histology
-historian
-historic
-historiography
-history
-histrionic
-hit
-Hitachi
-hitch
-Hitchcock
-hither
-hitherto
-Hitler
-hive
-ho
-hoagie
-Hoagland
-hoagy
-hoar
-hoard
-hoarfrost
-hoarse
-hob
-Hobart
-Hobbes
-hobble
-Hobbs
-hobby
-.P
-hobbyhorse
-hobgoblin
-hobo
-Hoboken
-hoc
-hock
-hockey
-hocus
-hodge
-hodgepodge
-Hodges
-Hodgkin
-hoe
-Hoff
-Hoffman
-hog
-hogan
-hogging
-hoi
-Hokan
-Holbrook
-Holcomb
-hold
-holden
-holdout
-holdover
-holdup
-hole
-holeable
-holiday
-Holland
-Hollandaise
-holler
-Hollerith
-Hollingsworth
-Hollister
-hollow
-Holloway
-hollowware
-holly
-hollyhock
-Hollywood
-Holm
-Holman
-Holmdel
-Holmes
-holmium
-holocaust
-Holocene
-hologram
-holography
-Holst
-Holstein
-holster
-holt
-Holyoke
-holystone
-.FC
-.SG
-.NS 7
-text text text
-text text text
-.NS 12
-Holyoke
-holystone
-.NS
-holt
-.NE
diff --git a/contrib/groff/contrib/mm/examples/ML b/contrib/groff/contrib/mm/examples/ML
deleted file mode 100644
index bbfca3def549..000000000000
--- a/contrib/groff/contrib/mm/examples/ML
+++ /dev/null
@@ -1,169 +0,0 @@
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-.ML MARK
-.LI "LOCALMARK"
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-.LI
-.DS
-Where shall we put this.
-Where shall we put this.
-Where shall we put this.
-.DE
-.LI
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-.LI
-.DS
-Where shall we put this.
-.DE
-.LI
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-.LI
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-.LI
-gratuity
-grave
-gravel
-.LE
-.SP 3
-.ML $ 1c
-.LI
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-.LI
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-.LI
-greater
-grebe
-Grecian
-Greece
-greed
-greedy
-Greek
-green
-.LI
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-.LE
-.SP 3
-.ML X 1c 1
-.LI
-Greenfield
-greengrocer
-grandson
-grandstand
-granite
-granitic
-granny
-graph
-.LI
-grapheme
-greenhouse
-greenish
-Greenland
-Greensboro
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-.LI
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-.LI
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-.LI
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-.LE
diff --git a/contrib/groff/contrib/mm/examples/MOVE b/contrib/groff/contrib/mm/examples/MOVE
deleted file mode 100644
index 0f0399cc7a35..000000000000
--- a/contrib/groff/contrib/mm/examples/MOVE
+++ /dev/null
@@ -1,175 +0,0 @@
-.PH "'hej'hopp'i skogen'"
-.PF "'livet'är'härligt'"
-.OH "'ojämn'%'sida'"
-.EH "'ojämn'%'sida'"
-.OF "'ojämn'%'sida'"
-.EF "'ojämn'%'sida'"
-10th
-1st
-2nd
-3rd
-4th
-5th
-6th
-7th
-8th
-9th
-a
-AAA
-AAAS
-Aarhus
-Aaron
-AAU
-ABA
-Ababa
-aback
-abacus
-abalone
-abandon
-abase
-abash
-abate
-abater
-abbas
-abbe
-abbey
-abbot
-Abbott
-abbreviate
-abc
-abdicate
-abdomen
-abdominal
-abet
-abetted
-abetting
-abeyance
-abeyant
-abhorred
-abhorrent
-abide
-Abidjan
-Abigail
-abject
-ablate
-ablaze
-able
-ablution
-Abner
-.MOVE 50 20
-abnormal
-Abo
-aboard
-abode
-abolish
-abolition
-abominable
-abominate
-aboriginal
-AAA
-ABORIGINE
-ABORNING
-ABORT
-ABOUND
-ABOUT
-ABOVE
-ABOVEBOARD
-ABOVEGROUND
-abovementioned
-abrade
-Abraham
-Abram
-Abramson
-abrasion
-abrasive
-abreact
-abreast
-BBB
-ABRIDGE
-ABRIDGMENT
-ABROAD
-abrogate
-abrupt
-abscess
-abscissa
-abscissae
-absence
-absent
-absentee
-absenteeism
-absentia
-absentminded
-.MOVE 30 10
-absinthe
-absolute
-absolution
-absolve
-absorb
-absorbent
-absorption
-absorptive
-abstain
-abstention
-abstinent
-abstract
-abstracter
-abstractor
-CCC
-ABSTRUSE
-ABSURD
-ABUILDING
-ABUNDANT
-ABUSABLE
-ABUSE
-ABUSIVE
-ABUT
-ABUTTED
-ABUTTING
-ABYSMAL
-ABYSS
-ABYSSINIA
-AC
-ACADEME
-ACADEMIA
-ACADEMIC
-ACADEMICIAN
-ACADEMY
-ACADIA
-ACANTHUS
-ACAPULCO
-ACCEDE
-ACCELERATE
-ACCELEROMETER
-ACCENT
-ACCENTUAL
-ACCENTUATE
-ACCEPT
-ACCEPTANT
-acceptor
-access
-.MOVE 62 0 20
-accessible
-accession
-accessory
-accident
-accidental
-accipiter
-acclaim
-acclamation
-acclimate
-accolade
-accommodate
-accompaniment
-accompanist
-accompany
-accomplice
-accomplish
-accord
-accordant
-DDD
-ACCORDION
-ACCOST
-ACCOUNT
-ACCOUNTANT
-ACCRA
-.PGFORM
diff --git a/contrib/groff/contrib/mm/examples/MUL b/contrib/groff/contrib/mm/examples/MUL
deleted file mode 100644
index ae91fae0d404..000000000000
--- a/contrib/groff/contrib/mm/examples/MUL
+++ /dev/null
@@ -1,535 +0,0 @@
-inject
-injudicious
-Injun
-injunct
-injunction
-injure
-injurious
-injury
-injustice
-ink
-inkling
-inlaid
-inland
-inlay
-inlet
-Inman
-inmate
-inn
-innards
-innate
-inner
-innermost
-innkeeper
-innocent
-innocuous
-innovate
-innuendo
-innumerable
-inoculate
-inoffensive
-inoperable
-inoperative
-inopportune
-inordinate
-inorganic
-input
-inputting
-inquest
-inquire
-inquiry
-inquisition
-inquisitive
-inquisitor
-inroad
-insane
-insatiable
-inscribe
-inscription
-inscrutable
-insect
-insecticide
-insecure
-inseminate
-insensible
-insensitive
-inseparable
-insert
-inset
-inshore
-inside
-insidious
-insight
-insightful
-insignia
-insignificant
-insincere
-insinuate
-insipid
-insist
-insistent
-insofar
-insolent
-insoluble
-insolvable
-insolvent
-insomnia
-insomniac
-insouciant
-inspect
-inspector
-inspiration
-inspire
-instable
-install
-installation
-instalment
-instance
-instant
-instantaneous
-instantiate
-instead
-instep
-instigate
-instill
-instillation
-instinct
-instinctual
-institute
-institution
-instruct
-instructor
-instrument
-instrumentation
-insubordinate
-insubstantial
-insufferable
-insufficient
-insular
-insulate
-insulin
-insult
-insuperable
-insupportable
-insuppressible
-insurance
-insure
-insurgent
-insurmountable
-insurrect
-insurrection
-intact
-intake
-intangible
-integer
-integrable
-.MULB 4c 1 5c 1 4c 1 3c
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-grim
-grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-.MULN
-h
-ha
-Haag
-Haas
-habeas
-haberdashery
-Haberman
-Habib
-habit
-habitant
-habitat
-habitation
-habitual
-habituate
-hacienda
-hack
-hackberry
-Hackett
-hackle
-hackmatack
-hackney
-hackneyed
-hacksaw
-had
-Hadamard
-Haddad
-haddock
-Hades
-Hadley
-hadn't
-Hadrian
-hadron
-hafnium
-Hagen
-Hager
-haggard
-haggle
-Hagstrom
-Hague
-Hahn
-Haifa
-haiku
-hail
-hailstone
-hailstorm
-Haines
-hair
-haircut
-hairdo
-hairpin
-hairy
-Haiti
-Haitian
-Hal
-halcyon
-hale
-Haley
-half
-halfback
-halfhearted
-halfway
-halibut
-halide
-Halifax
-halite
-hall
-hallelujah
-Halley
-hallmark
-hallow
-Halloween
-hallucinate
-hallway
-halma
-halo
-halocarbon
-halogen
-Halpern
-Halsey
-Halstead
-halt
-halvah
-halve
-Halverson
-ham
-Hamal
-Hamburg
-hamburger
-Hamilton
-hamlet
-Hamlin
-hammerhead
-hammock
-Hammond
-hamper
-Hampshire
-Hampton
-hamster
-Han
-Hancock
-hand
-handbag
-handbook
-handclasp
-handcuff
-.MULN
-coliform
-coliseum
-collaborate
-collage
-collagen
-collapse
-collapsible
-collar
-collarbone
-collard
-collate
-collateral
-colleague
-collect
-collectible
-collector
-college
-collegial
-collegian
-collegiate
-collet
-collide
-collie
-Collier
-collimate
-collinear
-Collins
-collision
-collocation
-colloidal
-Colloq
-colloquia
-colloquial
-colloquium
-colloquy
-command
-commandant
-commandeer
-commando
-commemorate
-commend
-commendation
-commendatory
-commensurable
-commensurate
-comment
-commentary
-commentator
-commerce
-commercial
-commingle
-commiserate
-commissariat
-commissary
-commission
-commit
-committable
-committal
-committed
-committee
-committeeman
-committeemen
-committeewoman
-committeewomen
-committing
-commodious
-commodity
-commodore
-common
-commonality
-.MULN
-locoweed
-lunch
-luncheon
-lunchroom
-lunchtime
-Lund
-Lundberg
-Lundquist
-lung
-lunge
-lupine
-Lura
-lurch
-lure
-lurid
-lurk
-Lusaka
-luscious
-lush
-lust
-lustful
-lustrous
-lusty
-lutanist
-lute
-lutetium
-Luther
-Lutheran
-Lutz
-lymphocyte
-lymphoma
-lynch
-Lynchburg
-Lynn
-lynx
-Lyon
-Lyons
-Lyra
-lyric
-lyricism
-Lysenko
-lysergic
-lysine
-.MULE
-m
-ma
-Mabel
-Mac
-macabre
-macaque
-MacArthur
-Macassar
-Macbeth
-MacDonald
-MacDougall
-mace
-Macedon
-Macedonia
-MacGregor
-Mach
-Machiavelli
-machination
-machine
-machinelike
-machinery
-machismo
-macho
-macintosh
-mack
-MacKenzie
-mackerel
-Mackey
-Mackinac
-Mackinaw
-mackintosh
-MacMillan
-Macon
-macrame
-macro
-macromolecular
-macromolecule
-macrophage
-macroprocessor
-macroscopic
-macrostructure
-mad
-Madagascar
-madam
-Madame
-madcap
-madden
-Maddox
-made
-Madeira
-Madeleine
-Madeline
-madhouse
-Madison
-madman
-madmen
-Madonna
-Madras
-Madrid
-madrigal
-Madsen
-madstone
-Mae
-Maelstrom
-maestro
-Mafia
-magazine
-Magdalene
-magenta
-Maggie
-maggot
-maggoty
-magi
-magic
-magician
-magisterial
-magistrate
-magma
-magna
-magnanimity
-magnanimous
-magnate
-magnesia
-magnesite
-magnesium
-magnet
-magnetic
-magnetite
-magneto
-magnetron
-magnificent
-magnify
-magnitude
-magnolia
-magnum
-Magnuson
-Magog
-magpie
-Magruder
-Mahayana
-Mahayanist
-mahogany
-Mahoney
-maid
-maiden
-maidenhair
-maidservant
-Maier
-mail
-mailbox
-mailman
-mailmen
-maim
-main
-Maine
-mainland
-mainline
-mainstay
-mainstream
-maintain
-maintenance
-maitre
-majestic
-majesty
-major
-make
-makeshift
-makeup
-Malabar
-maladapt
-maladaptive
-maladjust
-maladroit
-malady
-Malagasy
-malaise
-malaprop
-malaria
-malarial
-Malawi
-Malay
-Malaysia
diff --git a/contrib/groff/contrib/mm/examples/NCOL b/contrib/groff/contrib/mm/examples/NCOL
deleted file mode 100644
index 82c6f8d50812..000000000000
--- a/contrib/groff/contrib/mm/examples/NCOL
+++ /dev/null
@@ -1,196 +0,0 @@
-granary
-grand
-grandchild
-grandchildren
-granddaughter
-grandeur
-grandfather
-grandiloquent
-grandiose
-grandma
-grandmother
-grandnephew
-grandniece
-grandpa
-grandparent
-grandson
-grandstand
-granite
-granitic
-granny
-granola
-grant
-grantee
-grantor
-granular
-granulate
-granule
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-grapple
-grasp
-grass
-grassland
-grassy
-.MC 3c
-grata
-grate
-grateful
-grater
-gratify
-gratis
-gratitude
-gratuitous
-gratuity
-grave
-gravel
-graven
-Graves
-gravestone
-graveyard
-gravid
-gravitate
-gravy
-gray
-graybeard
-grayish
-Grayson
-graywacke
-graze
-grease
-greasy
-great
-greatcoat
-greater
-grebe
-Grecian
-Greece
-greed
-greedy
-.NCOL
-Greek
-green
-Greenbelt
-Greenberg
-Greenblatt
-Greenbriar
-Greene
-greenery
-Greenfield
-greengrocer
-greenhouse
-greenish
-Greenland
-Greensboro
-greensward
-greenware
-Greenwich
-greenwood
-Greer
-greet
-Greg
-gregarious
-Gregg
-Gregory
-gremlin
-grenade
-Grendel
-Grenoble
-Gresham
-Greta
-Gretchen
-grew
-grey
-greyhound
-greylag
-grid
-griddle
-gridiron
-grief
-grievance
-grieve
-grievous
-griffin
-Griffith
-grill
-grille
-grilled
-grillwork
-.NCOL
-grim
-grimace
-Grimaldi
-grime
-Grimes
-Grimm
-grin
-grind
-grindstone
-grip
-gripe
-grippe
-grisly
-grist
-gristmill
-Griswold
-grit
-gritty
-grizzle
-grizzly
-groan
-groat
-grocer
-grocery
-groggy
-groin
-grommet
-groom
-groove
-grope
-grosbeak
-gross
-Grosset
-Grossman
-Grosvenor
-grotesque
-Groton
-ground
-groundsel
-groundskeep
-groundwork
-group
-groupoid
-grout
-grove
-grovel
-Grover
-grow
-growl
-grown
-grownup
-growth
-grub
-grubby
-grudge
-gruesome
-gruff
-grumble
-Grumman
-grunt
-gryphon
-g's
-GSA
-GU
-Guam
-guanidine
-guanine
-guano
-guarantee
-guaranteeing
-guarantor
diff --git a/contrib/groff/contrib/mm/examples/ND b/contrib/groff/contrib/mm/examples/ND
deleted file mode 100644
index 4b3694a37261..000000000000
--- a/contrib/groff/contrib/mm/examples/ND
+++ /dev/null
@@ -1,17 +0,0 @@
-.nf
-----------------------------------------------------------------------
-.ce
-Testing
-----------------------------------------------------------------------
-Date = \*[DT]
-.ISODATE
-Date = \*[DT]
-.ISODATE 0
-
-.ND "13 August 1992"
-Date = \*[DT]
-
-.ISODATE
-.ND "14 August 1992"
-Date = \*[DT]
-----------------------------------------------------------------------
diff --git a/contrib/groff/contrib/mm/examples/README b/contrib/groff/contrib/mm/examples/README
deleted file mode 100644
index cb6980f85327..000000000000
--- a/contrib/groff/contrib/mm/examples/README
+++ /dev/null
@@ -1,32 +0,0 @@
-
-This directory contains examples of my enhancements to MM.
-
-APP The appendix macro
-B1B2 Box macro with text
-COVER My general cover macro, this example is using
- ms.cov.
-IND A general indexing method, see manual for INITI
-LT The letter macro
-LT.se A swedish example with the extra
- swedish macros for getting a letter conforming
- to swedish standard letter, both left and right adjusted.
-ML Marked list, an extended list type
-MOVE The MOVE macro, how to begin to print on an exact position.
-MUL Enhanced multicolumn mode.
-NCOL Start on next column. (Not for MUL*)
-ND New date, with iso date example
-References How to use references
-SETR General reference system, see manual for INITR
-
-
-Examples that I should have:
-
-PIC How to include postscript pictures, see manual for PIC
-VERBON Begin verbatim output
-
-
-And remember, check the manual for all string and number registers,
-I've made shure that mgm will be useful in several languages
-and all english output can be redefined.
-Check the manual for groff_mse (swedish format) and the
-macro file, tmac.mse.
diff --git a/contrib/groff/contrib/mm/examples/References b/contrib/groff/contrib/mm/examples/References
deleted file mode 100644
index 72f648220903..000000000000
--- a/contrib/groff/contrib/mm/examples/References
+++ /dev/null
@@ -1,975 +0,0 @@
-.PH "'this'is'a header'"
-.PF "'this'is'a footer'"
-.OH "'odd'%'page'"
-.EH "'even'%'page'"
-.OF "'odd'%'page'"
-.EF "'even'%'page'"
-10th
-1st
-2nd
-3rd
-4th
-5th
-6th
-7th
-8th
-9th
-a
-AAA
-.B
-AAAS
-Aarhus
-Aaron
-.R
-AAU
-ABA
-Ababa
-aback
-abacus
-abalone
-abandon
-abase
-.H 1 "hej hopp"
-abash
-abate
-abater
-abbas
-abbe
-abbey
-abbot
-Abbott
-abbreviate
-abc
-abdicate
-abdomen
-abet
-abetted
-abetting
-abeyance
-abeyant
-.H 2 "hej hopp"
-abhorred
-abhorrent
-abide
-Abidjan
-Abigail
-abject
-ablate
-ablaze
-able
-ablution
-Abner
-abnormal
-.H 2 "hej hopp"
-Abo
-aboard
-abode
-abolish
-.HU "hej hopp"
-.B1
-abolition
-abominable
-abominate\*(Rf
-aboriginal
-.RS
-AAA
-ABORIGINE
-ABORNING
-ABORT
-ABOUND
-ABOUT
-ABOVE
-ABOVEBOARD
-ABOVEGROUND
-.RF
-abovementioned
-abrade
-Abraham\*(Rf
-Abram\*(Rf
-Abramson\*(Rf
-abrasion\*(Rf
-abrasive\*(Rf
-abreact\*(Rf
-.B2
-abreast\*(Rf
-.RS
-BBB
-ABRIDGE
-ABRIDGMENT
-ABROAD
-.RF
-abrogate
-abrupt
-abscess\*(Rf
-abscissa\*(Rf
-abscissae\*(Rf
-absence\*(Rf
-absent
-absentee
-absenteeism
-absentia
-.H 3 "hej hopp"
-absentminded
-absinthe
-absolute
-absolution
-absolve
-absorb
-absorbent
-absorption
-absorptive
-abstain
-abstention
-abstinent\*(Rf
-abstract
-abstracter
-abstractor
-.RS nisse
-CCC
-ABSTRUSE
-ABSURD
-ABUILDING
-ABUNDANT
-ABUSABLE
-ABUSE
-ABUSIVE
-ABUT
-ABUTTED
-ABUTTING
-ABYSMAL
-ABYSS
-ABYSSINIA
-AC
-ACADEME
-ACADEMIA
-ACADEMIC
-ACADEMICIAN
-ACADEMY
-ACADIA
-ACANTHUS
-ACAPULCO
-ACCEDE
-ACCELERATE
-ACCELEROMETER
-ACCENT
-ACCENTUAL
-ACCENTUATE
-ACCEPT
-ACCEPTANT
-.RF
-acceptor
-access
-accessible
-accession
-Ref \*[nisse]
-accessory
-.H 4 "hej hopp"
-accident
-accidental
-accipiter
-acclaim
-acclamation
-acclimate
-accolade
-accommodate
-accompaniment
-accompanist
-accompany
-accomplice
-accomplish\*(Rf
-accord
-accordant
-.RS
-DDD
-ACCORDION
-ACCOST
-ACCOUNT
-ACCOUNTANT
-ACCRA
-ACCREDIT
-ACCREDITATE
-ACCREDITATION
-ACCRETION
-ACCRUAL
-ACCRUE
-.RF
-acculturate
-accumulate
-accuracy
-accurate
-accusation
-accusative
-accusatory
-accuse
-accustom
-ace
-acerbic
-acerbity
-acetate
-acetic
-acetone
-acetylene
-ache
-achieve
-Achilles
-aching
-achromatic
-acid
-acidic
-acidulous
-.H 5 "hej hopp"
-Ackerman
-Ackley
-acknowledge
-acknowledgeable
-ACM
-acme
-acolyte
-acorn
-acoustic
-acquaint
-acquaintance
-acquiesce
-acquiescent
-acquire
-acquisition
-acquisitive
-acquit
-acquittal
-acquitting
-acre
-acreage
-acrid
-acrimonious
-acrimony
-acrobacy
-acrobat
-acrobatic
-acronym
-acropolis
-across
-acrylate
-acrylic
-ACS
-act
-Actaeon
-actinic
-actinide
-actinium
-actinolite
-actinometer
-activate
-activation
-activism
-Acton
-actor
-actress
-Acts
-actual
-actuarial
-actuate
-.H 6 "hej hopp"
-acuity
-acumen
-acute
-acyclic
-ad
-Ada
-adage
-adagio
-Adair
-Adam
-adamant
-Adams
-Adamson
-adapt
-adaptation
-adaptive
-add
-added
-addend
-addenda
-addendum
-addict
-Addis
-Addison
-addition
-additional
-additive
-addle
-address
-addressee
-Addressograph
-adduce
-Adelaide
-Adele
-Adelia
-Aden
-adenine
-adenoma
-adenosine
-adept
-adequacy
-adequate
-adhere
-adherent
-adhesion
-adhesive
-adiabatic
-adieu
-adipic
-Adirondack
-.H 7 "hej hopp"
-adjacent
-adject
-adjectival
-adjective
-adjoin
-adjoint
-adjourn
-adjudge
-adjudicate
-adjunct
-adjust
-adjutant
-Adkins
-Adler
-administer
-administrable
-administrate
-administratrix
-admiral
-admiralty
-admiration
-admire
-admissible
-admission
-admit
-admittance
-admitted
-admitting
-admix
-admixture
-admonish
-admonition
-ado
-adobe
-adolescent
-Adolph
-Adolphus
-Adonis
-adopt
-adoption
-adoptive
-adore
-adorn
-adposition
-adrenal
-adrenaline
-Adrian
-Adriatic
-Adrienne
-adrift
-adroit
-adsorb
-adsorbate
-adsorption
-adsorptive
-adulate
-adult
-adulterate
-adulterous
-adultery
-adulthood
-advance
-advantage
-advantageous
-advent
-adventitious
-adventure
-adventurous
-adverb
-adverbial
-adversary
-adverse
-advert
-advertise
-advice
-advisable
-advise
-advisee
-advisor
-advisory
-advocacy
-advocate
-Aegean
-aegis
-Aeneas
-Aeneid
-aeolian
-Aeolus
-aerate
-aerial
-Aerobacter
-aerobic
-aerodynamic
-aerogene
-aeronautic
-aerosol
-aerospace
-Aeschylus
-aesthete
-aesthetic
-10th
-1st
-2nd
-3rd
-4th
-5th
-6th
-7th
-8th
-9th
-a
-AAA
-AAAS
-Aarhus
-Aaron
-AAU
-ABA
-Ababa
-aback
-abacus
-abalone
-abandon
-abase
-.H 1 "hej hopp"
-abash
-abate
-abater
-abbas
-abbe
-abbey
-abbot
-Abbott
-abbreviate
-abc
-abdicate
-abdomen
-abdominal
-abduct
-Abe
-abed
-Abel
-Abelian
-Abelson
-Aberdeen
-Abernathy
-aberrant
-aberrate
-abet
-abetted
-abetting
-abeyance
-abeyant
-.H 2 "hej hopp"
-abhorred
-abhorrent
-abide
-Abidjan
-Abigail
-abject
-ablate
-ablaze
-able
-ablution
-Abner
-abnormal
-Abo
-aboard
-abode
-abolish
-abolition
-abominable
-abominate
-aboriginal
-aborigine
-aborning
-abort
-abound
-about
-above
-aboveboard
-aboveground
-abovementioned
-abrade
-Abraham
-Abram
-Abramson
-abrasion
-abrasive
-abreact
-abreast
-abridge
-abridgment
-abroad
-abrogate
-abrupt
-abscess
-abscissa
-abscissae
-absence
-absent
-absentee
-absenteeism
-absentia
-.H 3 "hej hopp"
-absentminded
-absinthe
-absolute
-absolution
-absolve
-absorb
-absorbent
-absorption
-absorptive
-abstain
-abstention
-abstinent
-abstract
-abstracter
-abstractor
-abstruse
-absurd
-abuilding
-abundant
-abusable
-abuse
-abusive
-abut
-abutted
-abutting
-abysmal
-abyss
-Abyssinia
-AC
-academe
-academia
-academic
-academician
-academy
-Acadia
-acanthus
-Acapulco
-accede
-accelerate
-accelerometer
-accent
-accentual
-accentuate
-accept
-acceptant
-acceptor
-access
-accessible
-accession
-accessory
-.H 4 "hej hopp"
-accident
-accidental
-accipiter
-acclaim
-acclamation
-acclimate
-accolade
-accommodate
-accompaniment
-accompanist
-accompany
-accomplice
-accomplish
-accord
-accordant
-accordion
-accost
-account
-accountant
-Accra
-accredit
-accreditate
-accreditation
-accretion
-accrual
-accrue
-acculturate
-accumulate
-accuracy
-accurate
-accusation
-accusative
-accusatory
-accuse
-accustom
-ace
-acerbic
-acerbity
-acetate
-acetic
-acetone
-acetylene
-ache
-achieve
-Achilles
-aching
-achromatic
-acid
-acidic
-acidulous
-.H 5 "hej hopp"
-Ackerman
-Ackley
-acknowledge
-acknowledgeable
-ACM
-acme
-acolyte
-acorn
-acoustic
-acquaint
-acquaintance
-acquiesce
-acquiescent
-acquire
-acquisition
-acquisitive
-acquit
-acquittal
-acquitting
-acre
-acreage
-acrid
-acrimonious
-acrimony
-acrobacy
-acrobat
-acrobatic
-acronym
-acropolis
-across
-acrylate
-acrylic
-ACS
-act
-Actaeon
-actinic
-actinide
-actinium
-actinolite
-actinometer
-activate
-activation
-activism
-Acton
-actor
-actress
-Acts
-actual
-actuarial
-actuate
-.H 6 "hej hopp"
-acuity
-acumen
-acute
-acyclic
-ad
-Ada
-adage
-adagio
-Adair
-Adam
-adamant
-Adams
-Adamson
-adapt
-adaptation
-adaptive
-add
-added
-addend
-addenda
-addendum
-addict
-Addis
-Addison
-addition
-additional
-additive
-addle
-address
-addressee
-Addressograph
-adduce
-Adelaide
-Adele
-Adelia
-Aden
-adenine
-adenoma
-adenosine
-adept
-adequacy
-adequate
-adhere
-adherent
-adhesion
-adhesive
-adiabatic
-adieu
-adipic
-Adirondack
-.H 7 "hej hopp"
-adjacent
-adject
-adjectival
-adjective
-adjoin
-adjoint
-adjourn
-adjudge
-adjudicate
-adjunct
-adjust
-adjutant
-Adkins
-Adler
-administer
-administrable
-administrate
-administratrix
-admiral
-admiralty
-admiration
-admire
-admissible
-admission
-admit
-admittance
-admitted
-admitting
-admix
-admixture
-admonish
-admonition
-ado
-adobe
-adolescent
-Adolph
-Adolphus
-Adonis
-adopt
-adoption
-adoptive
-adore
-adorn
-adposition
-adrenal
-adrenaline
-Adrian
-Adriatic
-Adrienne
-adrift
-adroit
-adsorb
-adsorbate
-adsorption
-adsorptive
-adulate
-adult
-adulterate
-adulterous
-adultery
-adulthood
-advance
-advantage
-advantageous
-advent
-adventitious
-adverse
-advert
-advertise
-advice
-advisable
-advise
-advisee
-advisor
-advisory
-advocacy
-advocate
-Aegean
-aegis
-Aeneas
-Aeneid
-aeolian
-Aeolus
-aerate
-aerial
-Aerobacter
-aerobic
-aerodynamic
-aerogene
-aeronautic
-aerosol
-aerospace
-Aeschylus
-aesthete
-aesthetic
-.H 1 "hej hopp"
-acuity
-acumen
-acute
-acyclic
-ad
-Ada
-adage
-adagio
-Adair
-Adam
-adamant
-Adams
-Adamson
-adapt
-adaptation
-adaptive
-add
-added
-addend
-addenda
-addendum
-addict
-Addis
-Addison
-addition
-additional
-additive
-addle
-address
-addressee
-Addressograph
-adduce
-Adelaide
-Adele
-Adelia
-Aden
-adenine
-adenoma
-adenosine
-adept
-adequacy
-adequate
-adhere
-adherent
-adhesion
-adhesive
-adiabatic
-adieu
-adipic
-Adirondack
-.H 2 "hej hopp"
-adjacent
-adject
-adjectival
-adjective
-adjoin
-adjoint
-adjourn
-adjudge
-adjudicate
-.H 2 "hej hopp"
-adjunct
-adjust
-adjutant
-Adkins
-Adler
-administer
-administrable
-administrate
-administratrix
-admiral
-admiralty
-admiration
-admire
-admissible
-admission
-admit
-admittance
-admitted
-admitting
-admix
-admixture
-admonish
-admonition
-ado
-adobe
-adolescent
-Adolph
-Adolphus
-Adonis
-adopt
-adoption
-adoptive
-adore
-adorn
-adposition
-adrenal
-adrenaline
-Adrian
-Adriatic
-Adrienne
-adrift
-adroit
-adsorb
-adsorbate
-adsorption
-adsorptive
-adulate
-adult
-adulterate
-adulterous
-adultery
-adulthood
-advance
-advantage
-advantageous
-advent
-adventitious
-adverse
-advert
-advertise
-advice
-advisable
-advise
-advisee
-advisor
-advisory
-advocacy
-advocate
-Aegean
-aegis
-Aeneas
-Aeneid
-aeolian
-Aeolus
-aerate
-aerial
-Aerobacter
-aerobic
-aerodynamic
-aerogene
-aeronautic
-aerosol
-aerospace
-Aeschylus
-aesthete
-aesthetic
-.RP 0 1
-.TC
diff --git a/contrib/groff/contrib/mm/examples/SETR b/contrib/groff/contrib/mm/examples/SETR
deleted file mode 100644
index 0a922415895e..000000000000
--- a/contrib/groff/contrib/mm/examples/SETR
+++ /dev/null
@@ -1,109 +0,0 @@
-.nr Cl 6
-.INITR setr
-.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
-.SETR ref1
-.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
-.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic"
-.H 2 "granny granola grant grantee grantor granular granulate"
-.SETR ref2
-.H 2 "granule Granville grape"
-grant
-grantee
-grantor
-granular
-granulate
-.br
-granule
-.B
-REF 9:
-.GETHN ref9
-, page number
-.GETPN ref9
-.R
-Granville
-grape
-.br
-grapefruit
-grapevine
-graph
-grapheme
-graphic
-graphite
-\fBExhibit\fP
-.GETHN ex1
-
-grapple
-grasp
-grass
-grassland
-grassy
-grata
-grate
-.H 2 "grapefruit grapevine graph grapheme graphic graphite"
-.H 3 "grapple"
-.SETR ref3
-.H 3 "grasp grass grassland grassy grata grate grateful"
-.H 3 "grater gratify gratis gratitude"
-.H 4 "gratuitous gratuity grave"
-.H 4 "gravel graven"
-.SETR ref4
-.H 1 "Graves gravestone graveyard gravid gravitate gravy gray"
-.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
-.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
-.H 2 "Greenblatt Greenbriar Greene greenery"
-.SETR ref5
-.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
-.H 1 "greensward greenware Greenwich greenwood Greer greet"
-grant
-grantee
-.DS
-
-Advertisements contain the only truths to be relied on in a newspaper.
- -- Thomas Jefferson
-.EX fortune "" "" ex1
-.DE
-grantor
-granular
-.GETR ref1
-granulate
-granule
-.H 2 "Using variables"
-.B
-REF 2:
-.GETHN ref2 c
-.GETPN ref2 bbb
-\*c, page number \*[bbb]
-.R
-Granville
-grape
-grapefruit
-grapevine
-graph
-grapheme
-.H 2 "Greg gregarious Gregg Gregory gremlin grenade Grendel"
-.H 2 "Grenoble Gresham Greta Gretchen"
-.SETR ref6
-.H 2 "grew"
-.H 1 "grey greyhound greylag grid griddle gridiron grief"
-.H 1 "grievance grieve grievous griffin Griffith grill grille grilled grillwork"
-.H 3 "grim grimace Grimaldi grime Grimes Grimm grin grind grindstone"
-.H 3 "grip gripe grippe grisly grist gristmill Griswold grit"
-.SETR ref7
-.H 3 "gritty grizzle grizzly groan groat grocer grocery groggy groin"
-.H 1 "grommet groom groove grope grosbeak gross Grosset Grossman Grosvenor grotesque"
-.H 1 "Groton ground groundsel groundskeep groundwork group groupoid"
-.H 4 "grout grove grovel Grover grow growl grown grownup growth grub grubby"
-.H 4 "grudge gruesome gruff grumble Grumman grunt gryphon g's"
-.SETR ref8
-.H 4 "GSA GU Guam guanidine guanine guano guarantee guaranteeing guarantor"
-.H 4 "guaranty"
-.H 1 "guard guardhouse Guardia guardian Guatemala gubernatorial Guelph Guenther"
-.H 1 "guerdon guernsey guerrilla guess guesswork guest guffaw Guggenheim"
-.SETR ref9
-.H 1 "Guiana guidance guide guidebook guideline guidepost guiding"
-.H 1 "guignol"
-.GETR ref6
-.H 1 "guild guildhall guile Guilford guillemot guillotine guilt"
-.SETR ref10
-.H 1 "guilty guinea guise guitar gules gulf gull Gullah"
-.H 1 "gullet gullible gully gulp gum gumbo gumdrop gummy gumption"
diff --git a/contrib/groff/contrib/mm/groff_mm.man b/contrib/groff/contrib/mm/groff_mm.man
deleted file mode 100644
index bd5223d47764..000000000000
--- a/contrib/groff/contrib/mm/groff_mm.man
+++ /dev/null
@@ -1,2104 +0,0 @@
-.\"
-.\" $Id: groff_mm.man,v 2.13 2004/07/03 12:46:56 wlemb Exp $
-.\"
-.de T2
-.if t .ne 2v
-.ti -.5i
-\\$1
-.sp -1
-..
-.
-.de T3
-.if t .ne 2v
-.ti -.5i
-\fB\\$1\fP
-.br
-..
-.
-.TH GROFF_MM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_mm \- groff mm macros
-.SH SYNOPSIS
-.B groff
-.B \-m@TMAC_M_PREFIX@m
-[
-.IR options .\|.\|.
-]
-[
-.IR files .\|.\|.
-]
-.SH DESCRIPTION
-The groff mm macros are intended to be compatible with the DWB mm macros
-with the following limitations:
-.TP
-.B \(bu
-no Bell Labs localisms implemented.
-.TP
-.B \(bu
-the macros OK and PM are not implemented.
-.TP
-.B \(bu
-groff mm does not support cut marks
-.LP
-\fBm@TMAC_M_PREFIX@m\fP is intended to be international.
-Therefore it is
-possible to write short national macrofiles which change all
-english text to the preferred language.
-Use \fBm@TMAC_M_PREFIX@mse\fP as an example.
-.\"########################################################################
-.LP
-A file called \fBlocale\fP or \fIlang\fP\fB_locale\fP is read
-after the initiation of the global variables.
-It is therefore
-possible to localize the macros with companyname and so on.
-.sp
-In this manual square brackets is used to show optional arguments.
-.sp 3
-\fBNumber registers and strings\fP
-.br
-Many macros can be controlled by number registers and strings.
-A number register is assigned with the \fBnr\fP command:
-.br
-\fB\&.nr\fP \fIXXX\fP \fI[+-]n [i]\fP
-.br
-\fBXXX\fP is the name of the register, \fBn\fP is the value to
-be assigned, and \fBi\fP is increment value for auto-increment.
-\fBn\fP can have a plus or minus sign as prefix if an increment
-or decrement of the current value is wanted.
-(Auto-increment or decrement
-occurs if the number register is used with a plus or minus sign,
-\fB\en+[XXX]\fP or \fB\en-[XXX]\fP.)
-.sp
-Strings is defined with \fBds\fP.
-.br
-\fB\&.ds\fP \fIYYY string\fP
-.br
-The string is assigned everything to the end of the line, even blanks.
-Initial blanks in \fIstring\fP should be prefixed with
-a double-quote.
-(Strings are used in the text as \fB\e*[YYY]\fP.)
-.sp
-\fBSpecial formatting of number registers\fP
-.br
-A number register is printed with normal digits if no format has been
-given.
-Set the format with \fBaf\fP:
-.br
-\fB\&.af\fP \fIR c\fP
-.br
-\fIR\fP is the name of the register, \fIc\fP is the format.
-.in +.5i
-.T2 \fBForm\fP
-\fBSequence\fP
-.T2 1
-0, 1, 2, 3, ...
-.T2 001
-000, 001, 002, 003, ...
-.T2 i
-0, i, ii, iii, iv, ...
-.T2 I
-0, I, II, III, IV, ...
-.T2 a
-0, a, b, c, ..., z, aa, ab, ...
-.T2 A
-0, A, B, C, ..., Z, AA, AB, ...
-.in
-
-.LP
-\fBMacros:\fP
-.TP
-.B ")E level text"
-Adds \fBtext\fP (heading-text) to the table of contents
-with \fBlevel\fP either 0
-or between 1-7.
-See also \fB.H\fP.
-This macro is used for customized
-table of contents.
-.TP
-.B "1C [1]"
-Begin one column processing.
-An \fB1\fP as argument disables the page-break.
-Use wide footnotes, small footnotes may be overprinted.
-.TP
-.B 2C
-Begin two column processing.
-Splits the page in two columns.
-It is
-a special case of \fBMC\fP.
-See also \fB1C\fP.
-.TP
-.B AE
-Abstract end, see \fBAS\fP.
-.TP
-.B "AF [name of firm]"
-Authors firm, should be called before \fBAU\fP, see also \fBCOVER\fP.
-.TP
-.B "AL [type [text-indent [1]]]"
-Start autoincrement list.
-Items are numbered beginning on one.
-The \fItype\fP argument controls the type of numbers.
-.in +.5i
-.T2 Arg
-Description
-.T2 1
-Arabic (the default)
-.T2 A
-Upper-case letters (A-Z)
-.T2 a
-Lower-case letters (a-z)
-.T2 I
-Upper-case roman
-.T2 i
-Lower-case roman
-.in
-\fIText-indent\fP sets the indent and overrides \fBLi\fP.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "APP name text"
-Begin an appendix with name \fIname\fP.
-Automatic naming occurs if
-\fIname\fP is "".
-The appendixes starts with \fBA\fP if auto is used.
-An new page is ejected, and a header is also produced if the number
-variable \fBAph\fP is non-zero.
-This is the default.
-The appendix always appear in the 'List of contents' with correct
-pagenumber.
-The name \fIAPPENDIX\fP can be changed by setting
-the string \fBApp\fP to the desired text.
-The string \fBApptxt\fP contains the current appendix text.
-.TP
-.B "APPSK name pages text"
-Same as \fB.APP\fP, but the pagenr is incremented with \fIpages\fP.
-This is used when diagrams or other non-formatted documents are
-included as appendixes.
-.TP
-.B "AS [arg [indent]]"
-Abstract start.
-Indent is specified in 'ens', but scaling is allowed.
-Argument \fIarg\fP controls where the abstract is printed.
-.in +.5i
-.T2 Arg
-Placement
-.T2 0
-Abstract will be printed on page 1 and on the cover sheet if
-used in the released-paper style (\fBMT 4\fP), otherwise
-it will be printed on page 1 without a cover sheet.
-.T2 1
-Abstract will only be printed on the cover sheet (\fBMT 4\fP only).
-.T2 2
-Abstract will be printed only on the cover sheet (other than \fBMT 4\fP only).
-The cover sheet is printed without need for \fBCS\fP.
-.in
-Abstract is not printed at all in external letters (\fBMT 5\fP).
-The \fIindent\fP controls the indentation of both margins, otherwise
-will normal text indent be used.
-.TP
-.B "AST [title]"
-Abstract title.
-Default is \fBABSTRACT\fP.
-Sets the text above the abstract text.
-.TP
-.B "AT title1 [title2 ...]"
-Authors title.
-\fBAT\fP must appear just after each \fBAU\fP.
-The title will show up after the name in the signature block.
-.TP
-.B "AU [name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]]"
-Author information, specifies the author of the memo or paper, and
-will be printed on the cover sheet and on other similar places.
-\fBAU\fP must not appear before \fBTL\fP.
-The author information
-can contain initials, location, department, telephone extension,
-room number or name and up to three extra arguments.
-.TP
-.B "AV [name [1]]"
-Approval signature, generates an approval line with place for
-signature and date.
-The string \fBAPPROVED:\fP can be changed
-with variable \fBLetapp\fP, and the string \fBDate\fP in \fBLetdate\fP.
-.TP
-.B "AVL [name]"
-Letter signature, generates a line with place for signature.
-.TP
-.B "B [bold-text [prev-font-text [bold...]]]"
-Begin boldface.
-No limit on the number of arguments.
-All arguments will be concatenated to one word, the first, third and so
-on will be printed in boldface.
-.TP
-.B B1
-Begin box (as the ms macro).
-Draws a box around the text.
-The text will be indented one character,
-and the right margin will be one character shorter.
-.TP
-.B B2
-End box.
-Finish the box started by \fBB1\fP.
-.TP
-.B BE
-End bottom block, see \fBBS\fP.
-.TP
-.B "BI [bold-text [italic-text [bold-text [...]]]]"
-Bold-italic.
-No limit on the number of arguments, see \fBB\fP.
-.TP
-.B "BL [text-indent [1]]"
-Start bullet list, initialize a list with a bullet and a space
-in the beginning of each list item (see \fBLI\fP).
-\fIText-indent\fP
-overrides the default indentation of the list items set by
-number register \fBPi\fP.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "BR [bold-text [roman-text [bold-text [...]]]]"
-Bold-roman.
-No limit on the number of arguments.
-.TP
-.B BS
-Bottom block start.
-Begins the definition of a text block which is
-printed at the bottom of each page.
-Block ends with \fBBE\fP.
-.TP
-.B "BVL text-indent [mark-indent [1]]"
-Start of
-broken variable-item list.
-Broken variable-item list has no fixed mark, it assumes that
-every \fBLI\fP has a mark instead.
-The text will always begin at the next line after the mark.
-\fIText-indent\fP sets the indent to the text, and \fImark-indent\fP
-the distance from the current indent to the mark.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "COVER [arg]"
-\&\fBCOVER\fP begins a coversheet definition.
-It is important
-that \fB.COVER\fP appears before any normal text.
-\&\fB.COVER\fP uses \fIarg\fP to build the filename
-@TMAC_MDIR@/\fIarg\fP.cov.
-Therefore it is possible to create unlimited
-types of coversheets.
-\fIms.cov\fP is supposed to look like the \fBms\fP coversheet.
-\&\fB.COVER\fP requires a \fB.COVEND\fP at the end of the coverdefinition.
-Always use this order of the covermacros:
-.nf
-\&.COVER
-\&.TL
-\&.AF
-\&.AU
-\&.AT
-\&.AS
-\&.AE
-\&.COVEND
-.fi
-However, only \fB.TL\fP and \fB.AU\fP are required.
-.TP
-.B COVEND
-This finish the cover description and prints the cover-page.
-It is defined in the cover file.
-.TP
-.B DE
-Display end.
-Ends a block of text, display, that begins
-with \fBDS\fP or \fBDF\fP.
-.TP
-.B "DF [format [fill [rindent]]]"
-Begin floating display (no nesting allowed).
-A floating display is saved in a queue and is printed in the
-order entered.
-\fIFormat\fP, \fIfill\fP and \fIrindent\fP is the same
-as in \fBDS\fP.
-Floating displays are controlled by the two number registers \fBDe\fP
-and \fBDf\fP.
-.sp
-\fBDe register\fP
-.in +.5i
-.T2 0
-Nothing special, this is the default.
-.T2 1
-A page eject will occur after each printed display, giving only
-one display per page and no text following it.
-.in
-.sp
-\fBDf register\fP
-.in +.5i
-.T2 0
-Displays are printed at the end of each section (when section-page
-numbering is active) or at the end of the document.
-.T2 1
-A new display will be printed on the current page if there is enough
-space, otherwise it will be printed at the end of the document.
-.T2 2
-One display will be printed at the top of each page or column
-(in multi-column mode).
-.T2 3
-Print one display if there is enough space for it, otherwise it will
-be printed at the top of the next page or column.
-.T2 4
-Print as many displays that will fit in a new page or column.
-A page break will occur between each display if \fBDe\fP is not zero.
-.T2 5
-Fill the current page with displays and the rest beginning at a new page
-or column.
-(This is the default.)
-A page break will occur between each display
-if \fBDe\fP is not zero.
-.in
-.TP
-.B "DL [text-indent [1 [1]]]"
-Dash list start.
-Begins a list where each item is printed
-after a dash.
-\fIText-indent\fP changes the default indentation
-of the list items set by
-number register \fBPi\fP.
-A second argument prevents the empty line between each list item
-to be printed.
-See \fBLI\fP.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "DS [format [fill [rindent]]]"
-Static display start.
-Begins collection of text until \fBDE\fP.
-The text is printed together on the same page, unless it is longer
-than the height of the page.
-\fBDS\fP can be nested to a unlimited depth (reasonably :-).
-.sp
-\fBformat\fP
-.in +.5i
-.ds x "
-.T2 """"""
-No indentation.
-.T2 none
-No indentation.
-.T2 L
-No indentation.
-.T2 I
-Indent text with the value of number register \fBSi\fP.
-.T2 C
-Center each line
-.T2 CB
-Center the whole display as a block.
-.T2 R
-Right adjust the lines.
-.T2 RB
-Right adjust the whole display as a block
-.in
-.sp
-L, I, C and CB can also be specified as 0, 1, 2 or 3 for compatibility
-reasons.
-(Don't use it.\ :-)
-.sp
-\fBfill\fP
-.in +.5i
-.T2 """"""
-Line-filling turned off.
-.T2 none
-Line-filling turned off.
-.T2 N
-Line-filling turned off.
-.T2 F
-Line-filling turned on.
-.in
-.sp
-N and F can also be specified as 0 or 1.
-An empty line will normally be printed before and after the
-display.
-Setting number register \fBDs\fP to 0 will prevent this.
-\fIRindent\fP shortens the line length by that amount.
-.TP
-.B "EC [title [override [flag [refname]]]]"
-Equation title.
-Sets a title for an equation.
-The \fIoverride\fP argument
-change the numbering.
-.sp
-\fBflag\fP
-.in +.5i
-.T2 none
-\fIoverride\fP is a prefix to the number.
-.T2 0
-\fIoverride\fP is a prefix to the number.
-.T2 1
-\fIoverride\fP is a suffix to the number.
-.T2 2
-\fIoverride\fP replaces the number.
-.in
-\fBEC\fP uses the number register \fBEc\fP as counter.
-It is possible to use \fB.af\fP to change the format of the number.
-If number register \fBOf\fP is 1, then the format of title
-will use a dash instead of a dot after the number.
-.br
-The string \fBLe\fP controls the title of the
-List of Equations, default is \fILIST OF EQUATIONS\fP.
-The List of Equations will only be printed if number register \fBLe\fP
-is 1, default 0.
-The string \fBLiec\fP contains the word \fIEquation\fP, wich
-is printed before the number.
-If \fIrefname\fP is used, then the equation number is saved with
-\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP.
-.br
-Special handling of the title will occur if
-\fBEC\fP is used inside \fBDS\fP/\fBDE\fP, it will not be
-affected by the format of \fBDS\fP.
-.TP
-.B "EF [arg]"
-Even-page footer, printed just above the normal page footer
-on even pages, see \fBPF\fP.
-.TP
-.B "EH [arg]"
-Even-page header, printed just below the normal page header
-on even pages, see \fBPH\fP.
-.TP
-.B EN
-Equation end, see \fBEQ\fP.
-.TP
-.B EOP
-End of page user-defined macro.
-This macro will be called
-instead of the normal printing of the footer.
-The macro
-will be executed in a separate environment, without any
-trap active.
-See \fBTP\fP.
-.sp
-\fBStrings available to EOP\fP
-.in +.5i
-.T2 EOPf
-Argument from \fBPF\fP.
-.T2 EOPef
-Argument from \fBEF\fP.
-.T2 EOPof
-Argument from \fBOF\fP.
-.in
-.TP
-.B "EPIC [-L] width height [name]"
-\fBEPIC\fP draws a box with the given \fIwidth\fP and \fIheight\fP, it will
-also print the text \fIname\fP or a default string if
-\fIname\fP is not specified..
-This is used to include external pictures, just give the size
-of the picture.
-\fB-L\fP will leftadjust the picture, the default is to center adjust.
-See \fBPIC\fP
-.TP
-.B "EQ [label]"
-Equation start.
-\fBEQ\fP/\fBEN\fP are the delimiters for equations written for \fBeqn\fP.
-\fBEQ\fP/\fBEN\fP must be inside a \fBDS\fP/\fBDE\fP-pair, except
-when \fBEQ\fP is only used to set options in \fBeqn\fP.
-The \fIlabel\fP will appear at the right margin of the equation, unless
-number register \fBEq\fP is\ 1.
-Then the label will appear at the
-left margin.
-.TP
-.B "EX [title [override [flag [refname]]]]"
-Exhibit title, arguments are the same as for \fBEC\fP.
-\fBEX\fP uses the number register \fBEx\fP as counter.
-The string \fBLx\fP controls the title of the
-List of Exhibits, default is \fILIST OF EXHIBITS\fP.
-The List of Exhibits will only be printed if number register \fBLx\fP
-is 1, default 1.
-The string \fBLiex\fP contains the word \fIExhibit\fP, which
-is printed before the number.
-If \fIrefname\fP is used, then the exhibit number is saved with
-\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP.
-.br
-Special handling of the title will occur if
-\fBEX\fP is used inside \fBDS\fP/\fBDE\fP, it will not be
-affected by the format of \fBDS\fP.
-.TP
-.B "FC [closing]"
-Prints \fIYours\ very\ truly,\fP as a formal closing of a letter or
-memorandum.
-The argument replaces the defualt string.
-The default is stored in string variable \fBLetfc\fP.
-.TP
-.B "FD [arg [1]]"
-Footnote default format.
-Controls the hyphenation (hyphen), right margin justification (adjust),
-indentation of footnote text (indent).
-It can also change the label
-justification (ljust).
-.sp
-.if t .ne 14v
-.nf
-.ta .5i +.8i +.8i +.8i +.8i
-\fBarg hyphen adjust indent ljust\fP
-0 no yes yes left
-1 yes yes yes left
-2 no no yes left
-3 yes no yes left
-4 no yes no left
-5 yes yes no left
-6 no no no left
-7 yes no no left
-8 no yes yes right
-9 yes yes yes right
-10 no no yes right
-11 yes no yes right
-.sp
-.fi
-.DT
-Argument greater than or equal to 11 is considered as arg 0.
-Default for m@TMAC_M_PREFIX@m is 10.
-.TP
-.B FE
-Footnote end.
-.TP
-.B "FG [title [override [flag [refname]]]]"
-Figure title, arguments are the same as for \fBEC\fP.
-\fBFG\fP uses the number register \fBFg\fP as counter.
-The string \fBLf\fP controls the title of the
-List of Figures, default is \fILIST OF FIGURES\fP.
-The List of Figures will only be printed if number register \fBLf\fP
-is 1, default 1.
-The string \fBLifg\fP contains the word \fIFigure\fP, wich
-is printed before the number.
-If \fIrefname\fP is used, then the figure number is saved with
-\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP.
-.br
-Special handling of the title will occur if
-\fBFG\fP is used inside \fBDS\fP/\fBDE\fP, it will not be
-affected by the format of \fBDS\fP.
-.TP
-.B "FS [label]"
-Footnote start.
-The footnote is ended by \fBFE\fP.
-Footnotes is normally automatically
-numbered, the number is available in string \fBF\fP.
-Just add \fB\e*F\fP in the text.
-By adding \fIlabel\fP, it is possible
-to have other number or names on the footnotes.
-Footnotes in displays is now possible.
-An empty line separates footnotes, the height of the line
-is controlled by number register \fBFs\fP, default value is 1.
-.TP
-.B "GETHN refname [varname]"
-Includes the headernumber where the corresponding \fBSETR\fP \fIrefname\fP
-was placed.
-Will be X.X.X. in pass\ 1.
-See \fBINITR\fP.
-If \fIvarname\fP is used, \fBGETHN\fP sets the stringvariable \fIvarname\fP to the
-headernumber.
-.TP
-.B "GETPN refname [varname]"
-Includes the pagenumber where the corresponding \fBSETR\fP \fIrefname\fP
-was placed.
-Will be 9999 in pass\ 1.
-See \fBINITR\fP.
-If \fIvarname\fP is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP
-to the pagenumber.
-.TP
-.B "GETR refname"
-Combines \fBGETHN\fP and \fBGETPN\fP with the text 'chapter' and ', page'.
-The string \fIQrf\fP contains the text for reference:
-.ti +.5i
-\&.ds Qrf See chapter \e\e*[Qrfh], page \e\e*[Qrfp].
-.br
-\fIQrf\fP may be changed to support other languages.
-Strings \fIQrfh\fP and \fIQrfp\fP are set by \fBGETR\fP
-and contains the page and headernumber.
-.TP
-.B "GETST refname [varname]"
-Includes the string saved with the second argument to \fB.SETR\fP.
-Will be dummystring in pass 1.
-If varname is used, \fBGETST\fP sets the stringvariable \fIvarname\fP to the
-saved string.
-See \fBINITR\fP.
-.TP
-.B "H level [heading-text [heading-suffix]]"
-Numbered section heading.
-Section headers can have a level between 1 and 14, level 1 is the
-top level.
-The text is given in \fIheading-text\fP, and must be
-surrounded by double quotes if it contains spaces.
-\fBHeading-suffix\fP is added to the header in the text but not in
-the table of contents.
-This is normally used for footnote marks
-and similar things.
-Don't use \fB\e*F\fP in \fIheading-suffix\fP, it won't
-work.
-A manual label must be used, see \fBFS\fP.
-.sp
-An eventual paragraph, \fBP\fP, directly after \fBH\fP will be
-ignored, \fBH\fP is taking care of spacing and indentation.
-.sp
-\fBPage ejection before heading\fP
-.br
-Number register \fBEj\fP controls page ejection before the heading.
-Normally, a level one heading gets two blank lines before it, higher levels
-gets only one.
-A new page is ejected before each
-first-level heading if number register \fBEj\fP is 1.
-All levels below or equal the value of \fBEj\fP gets a new page.
-Default value for \fBEj\fP is 0.
-.sp
-\fBHeading break level\fP
-.br
-A line break occurs after the heading if the heading level is less
-or equal to number register \fBHb\fP.
-Default value 2.
-.sp
-\fBHeading space level\fP
-.br
-A blank line is inserted after the heading if the heading level is less
-or equal to number register \fBHs\fP.
-Default value 2.
-.sp
-Text will follow the heading on the same line if the level is greater
-than both \fBHb\fP and \fBHs\fP.
-.sp
-\fBPost-heading indent\fP
-.br
-Indentation of the text after the heading is controlled by number
-register \fBHi\fP, default value 0.
-.sp
-\fBHi\fP
-.in +.5i
-.T2 0
-The text will be left-justified.
-.T2 1
-Indentation of the text will follow the value of number register \fBPt\fP,
-see \fBP\fP.
-.T2 2
-The text will be lined up with the first word of the heading.
-.in
-.sp
-\fBCentered section headings\fP
-.br
-All headings whose level is equal or below number register \fBHc\fP
-and also less than or equal to \fBHb\fP or \fBHs\fP
-is centerered.
-.sp
-\fBFont control of the heading\fP
-.br
-The font of each heading level is controlled by string \fBHF\fP.
-It contains a fontnumber or fontname for each level.
-Default
-is \fB2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\fP (all headings in italic).
-Could also be written as \fBI\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\fP.
-Note that some other implementations use \fB3\ 3\ 2\ 2\ 2\ 2\ 2\fP as the
-default value.
-All omitted values are presumed to be a 1.
-.sp
-\fBPoint size control\fP.
-.br
-String \fBHP\fP controls the pointsize of each heading, in the
-same way as \fBHF\fP controls the font.
-A value of 0 selects the default point size.
-Default value is \fB0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\fP.
-Beware that only the
-point size changes, not the vertical size.
-That can be controlled by the user specified macro \fBHX\fP and/or
-\fBHZ\fP.
-.sp
-\fBHeading counters\fP
-.br
-Fourteen number registers, named \fBH1\fP thru \fBH14\fP contains
-the counter for each heading level.
-The values are printed using arabic numerals, this can be changed
-with the macro \fBHM\fP (see below).
-All marks are concatenated before printing.
-To avoid this, set
-number register \fBHt\fP to\ 1.
-That will only print the current
-heading counter at each heading.
-.sp
-\fBAutomatic table of contents\fP
-.br
-All headings whose level is equal or below number register \fBCl\fP
-is saved to be printed in the table of contents.
-Default value is\ 2.
-.sp
-\fBSpecial control of the heading, user-defined macros\fP.
-.br
-These macros can be defined by the user to get a finer control
-of vertical spacing, fonts or other features.
-Argument \fIlevel\fP is the level-argument to \fBH\fP, but
-0 for unnumbered headings (see \fBHU\fP).
-Argument \fIrlevel\fP is the real level, it is
-set to number register \fBHu\fP for unnumbered headings.
-Argument \fIheading-text\fP is the text argument to \fBH\fP and \fBHU\fP.
-.sp
-\fBHX\ \fP\fIlevel\ rlevel\ heading-text\fP
-.br
-\fBHX\fP is called just before the printing of the heading.
-The following register is available for \fBHX\fP.
-\fBHX\fP may alter \fB}0\fP, \fB}2\fP and \fB;3\fP.
-.in +.5i
-.T3 "string }0"
-Contains the heading mark plus two spaces if \fIrlevel\fP is non-zero,
-otherwise empty.
-.T3 "register ;0"
-Contains the position of the text after the heading.
-0 means that the text should follow the heading on the same line, 1
-means that a line break should occur before the text and
-2 means that a blank line should separate the heading and the text.
-.T3 "string }2"
-Contains two spaces if register \fB;0\fP is\ 0.
-It is used to
-separate the heading from the text.
-The string
-is empty if \fB;0\fP is non-zero.
-.T3 "register ;3"
-Contains the needed space in units after the heading.
-Default is 2v.
-
-Can be used to change things like numbering (\fB}0\fP),
-vertical spacing (\fB}2\fP)
-and the needed space after the heading.
-.in
-.sp
-\fBHY\ \fP\fIdlevel\ rlevel\ heading-text\fP
-.br
-\fBHY\fP is called after size and font calculations and
-might be used to change indentation.
-.sp
-\fBHZ\ \fP\fIdlevel\ rlevel\ heading-text\fP
-.br
-\fBHZ\fP is called after the printing of the heading, just before
-\fBH\fP or \fBHU\fP exits.
-Could be used to change the page header according to the section heading.
-.TP
-.B "HC [hyphenation-character]"
-Set hyphenation character.
-Default value is \e%.
-Resets to the default if called without argument.
-Hyphenation can be turned off by setting number
-register \fBHy\fP to 0 in the beginning of the file.
-.TP
-.B "HM [arg1 [arg2 [... [arg14]]]]"
-Heading mark style.
-Controls the type of marking for printing of the heading counters.
-Default is 1 for all levels.
-.sp
-\fBArgument\fP
-.in +.5i
-.T2 1
-Arabic numerals.
-.T2 0001
-Arabic numerals with leading zeroes, one or more.
-.T2 A
-Upper-case alphabetic
-.T2 a
-Lower-case alphabetic
-.T2 I
-Upper-case roman numerals
-.T2 i
-lower-case roman numerals
-.T2 \fIempty\fP
-Arabic numerals.
-.in
-.TP
-.B "HU heading-text"
-Unnumbered section header.
-\fBHU\fP behavies like \fBH\fP at the level in number register \fBHu\fP.
-See \fBH\fP.
-.TP
-.B "HX dlevel rlevel heading-text"
-Userdefined heading exit.
-Called just before printing the header.
-See \fBH\fP.
-.TP
-.B "HY dlevel rlevel heading-text"
-Userdefined heading exit.
-Called just before printing the header.
-See \fBH\fP.
-.TP
-.B "HZ dlevel rlevel heading-text"
-Userdefined heading exit.
-Called just after printing the header.
-See \fBH\fP.
-.TP
-.B "I [italic-text [prev-font-text [italic-text [...]]]]"
-Italic.
-Changes the font to italic if called without arguments.
-With one argument it will set the word in italic.
-With two argument it will concatenate them and set the first
-word in italic and the second in the previous font.
-There is no limit on the number of argument, all will be concatenated.
-.TP
-.B "IA [addressee-name [title]]"
-Begins specification of the addressee and addressee's address in
-letter style.
-Several names can be specified with empty \fBIA\fP/\fBIE\fP-pairs, but
-only one address.
-See \fBLT\fP.
-.TP
-.B "IB [italic-text [bold-text [italic-text [...]]]]"
-Italic-bold.
-Even arguments is printed in italic, odd in boldface.
-See \fBI\fP.
-.TP
-.B IE
-Ends the address-specification after \fPIA\fP.
-.TP
-.B "INITI type filename [macro]"
-Initialize the new index system, sets the filename to collect
-index lines in with \fBIND\fP.
-Argument \fItype\fP selects
-the type of index, page number, header marks or both.
-The default is \fIN\fP.
-
-It is also possible to create a macro that is responsible
-for formatting each row.
-Add the name of the macro as argument\ 3.
-The macro will be called with the index as argument(s).
-.sp
-\fBtype\fP
-.in +.5i
-.T2 N
-Page numbers
-.T2 H
-Header marks
-.T2 B
-Both page numbers and header marks, tab separated
-.in
-.TP
-.B "INITR filename"
-Initialize the refencemacros.
-References will be written to stderr and is supposed to
-be written to \fIfilename.qrf\fP.
-Requires two passes with groff, this is handled by a
-separate program called \fBmmroff\fP, the reason is that
-groff is often installed without the unsafe operations that
-\fBINITR\fP requiered.
-The first pass looks for references and the second one includes them.
-\fBINITR\fP can be used several times, but it is only the first
-occurrence of \fBINITR\fP that is active.
-
-See also \fBSETR\fP, \fBGETPN\fP and \fBGETHN\fP.
-.TP
-.B "IND arg1 [arg2 [...]]"
-\fBIND\fP writes a line in the index file selected by \fBINITI\fP
-with all arguments and the page number or header mark separated by tabs.
-.in +.5i
-\fBExamples\fP
-.br
-arg1\etpage number
-.br
-arg1\etarg2\etpage number
-.br
-arg1\etheader mark
-.br
-arg1\etpage number\etheader mark
-.in
-.TP
-.B "INDP"
-\fBINDP\fP prints the index by running the command specified
-by string variable \fBIndcmd\fP, normally \fIsort\ -t\et\fP.
-\fBINDP\fP reads the output from the command to form
-the index, normally in two columns (can be changed by defining \fBTYIND\fP).
-The index is printed with string variable \fBIndex\fP as header,
-default is \fBINDEX\fP.
-One-column processing is
-returned after the list.
-\fBINDP\fP will call the
-user-defined macros \fBTXIND\fP, \fBTYIND\fP and \fBTZIND\fP if defined.
-\fBTXIND\fP is called before printing \fBINDEX\fP, \fBTYIND\fP
-is called instead of printing \fBINDEX\fP.
-\fBTZIND\fP is called
-after the printing and should take care of restoring to normal
-operation again.
-.TP
-.B "ISODATE [0]"
-\fBISODATE\fP changes the predefined date string in \fBDT\fP to
-ISO-format, ie YYYY-MM-DD.
-This can also be done by
-adding \fB-rIso=1\fP on the command line.
-Reverts to old date format if argument is \fB0\fP.
-.TP
-.B "IR [italic-text [roman-text [italic-text [...]]]]"
-Italic-roman.
-Even arguments is printed in italic, odd in roman.
-See \fBI\fP.
-.TP
-.B "LB text-indent mark-indent pad type [mark [LI-space [LB-space]]]"
-List begin macro.
-This is the common macro used for all lists.
-\fIText-indent\fP is the number of spaces to indent the text from the
-current indent.
-.sp
-\fIPad\fP and \fImark-indent\fP controls where to put the mark.
-The mark is placed within the mark area, and \fImark-indent\fP
-sets the number of spaces before this area.
-It is normally\ 0.
-The mark area ends where the text begins.
-The start of the text
-is still controlled by \fItext-indent\fP.
-.sp
-The mark is left justified whitin the mark area if \fIpad\fP is 0.
-If \fIpad\fP is greater than 0, then \fImark-indent\fP is ignored, and
-the mark is placed \fIpad\fP spaces before the text.
-This will right justify the mark.
-.sp
-If \fItype\fP is 0 the list will have either a hanging indent or, if
-argument \fImark\fP is given, the string \fImark\fP as mark.
-.sp
-If \fItype\fP is greater than 0 automatic numbering will occur, arabic
-if \fImark\fP is empty.
-\fIMark\fP can then be any of \fB1\fP, \fBA\fP,
-\fBa\fP, \fBI\fP or \fBi\fP.
-.sp
-\fIType\fP selects one of six possible ways to display the mark.
-.br
-\fBtype\fP
-.in +.6i
-.T2 1
-x.
-.T2 2
-x)
-.T2 3
-(x)
-.T2 4
-[x]
-.T2 5
-<x>
-.T2 6
-{x}
-.in
-.sp
-Every item in the list will get \fILI-space\fP number of blank lines
-before them.
-Default is\ 1.
-.sp
-\fBLB\fP itself will print \fILB-space\fP blank lines.
-Default is\ 0.
-.TP
-.B "LC [list-level]"
-List-status clear.
-Terminates all current active lists down to \fIlist-level\fP, or 0
-if no argmuent is given.
-This is used by \fBH\fP to clear any
-active list.
-.TP
-.B "LE [1]"
-List end.
-Terminate the current list.
-\fBLE\fP outputs a blank line
-if an argument is given.
-.TP
-.B "LI [mark [1]]"
-List item precedes every item in a list.
-Without argument \fBLI\fP
-will print the mark determined by the current list type.
-By giving
-\fBLI\fP one argument, it will use that as the mark instead.
-Two arguments to \fBLI\fP will make \fImark\fP a prefix to
-the current mark.
-There will be no separating space between the prefix
-and the mark if the second argument is \fB2\fP instead of \fB1\fP.
-This behaviour can also be achieved by setting number register
-\fBLimsp\fP to zero.
-A zero length \fImark\fP will make a hanging
-indent instead.
-.sp
-A blank line is normally printed before the list item.
-This behaviour
-can be controlled by number register \fBLs\fP.
-Pre-spacing
-will occur for each list-level less than or equal to \fBLs\fP.
-Default value is\ 99.
-(Nesting of lists is unlimited.\ :-)
-.sp
-The indentation can be changed thru number register \fBLi\fP.
-Default is 6.
-.sp
-All lists begins with a list initialization macro, \fBLB\fP.
-There are, however, seven predefined listtypes to
-make lists easier to use.
-They all call \fBLB\fP with different
-default values.
-.in +.5i
-.T2 \fBAL\fP
-Automatically Incremented List
-.T2 \fBML\fP
-Marked List
-.T2 \fBVL\fP
-Variable-Item List
-.T2 \fBBL\fP
-Bullet List
-.T2 \fBDL\fP
-Dash List
-.T2 \fBRL\fP
-Reference List
-.T2 \fBBVL\fP
-Broken Varable List.
-.in
-These lists are described at other places in this manual.
-See also \fBLB\fP.
-.TP
-.B "LT [arg]"
-Formats a letter in one of four different styles depending
-on the argument.
-See also \fBINTERNALS\fP.
-.in +.5i
-.T2 \fBArg
-Style\fP
-.T2 BL
-Blocked.
-Date line, return address, writer's address and closing
-begins at the center of the line.
-All other lines begin at the left margin.
-.T2 SB
-Semi-blocked.
-Same as blocked, except that the first line in every
-paragraph is indented five spaces.
-.T2 FB
-Full-blocked.
-All lines begin at the left margin.
-.T2 SP
-Simplified.
-Almost the same as the full-blocked style.
-Subject and
-the writer's identification are printed in all-capital.
-.in
-.TP
-.B "LO type [arg]"
-Specify options in letter (see \fB.LT\fP).
-This is a list of the standard options:
-.in +.5i
-.T2 CN
-Confidential notation.
-Prints \fBCONFIDENTIAL\fP on the second line
-below the date line.
-Any argument replaces \fBCONFIDENTIAL\fP.
-See also string variable \fBLetCN\fP.
-.T2 RN
-Reference notation.
-Prints \fBIn reference to:\fP and the argument
-two lines below the date line.
-See also string variable \fBLetRN\fP.
-.T2 AT
-Attention.
-Prints \fBATTENTION:\fP and the argument below the inside address.
-See also string variable \fBLetAT\fP.
-.T2 SA
-Salutation.
-Prints \fBTo Whom It May Concern:\fP or the argument if
-it was present.
-The salutation is printed two lines below the inside address.
-See also string variable \fBLetSA\fP.
-.T2 SJ
-Subject line.
-Prints the argument as subject prefixed with \fBSUBJECT:\fP
-two lines below the inside address, except in letter type \fBSP\fP.
-Then the subject is printed in all-captial without any prefix.
-See also string variable \fBLetSJ\fP.
-.in
-.TP
-.B "MC column-size [column-separation] "
-Begin multiple columns.
-Return to normal with \fB1C\fP.
-\fBMC\fP will create as many columns as the current line length permits.
-\fIColumn-size\fP is the width of each column, and \fIcolumn-separation\fP
-is the space between two columns.
-Default separation is the
-column-size/15.
-See also \fB1C\fP.
-.TP
-.B "ML mark [text-indent [1]]"
-Marked list start.
-The \fImark\fP argument will be printed before
-each list item.
-\fIText-indent\fP sets the indent and overrides \fBLi\fP.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "MT [arg [addressee]]"
-Memorandum type.
-The \fIarg\fP is part of a filename in \fI@TMAC_MDIR@/*.MT\fP.
-Memorandum type 0 thru 5 are supported, including \fI"string"\fP.
-\fIAddressee\fP just sets a variable, used in the AT&T macros.
-.br
-\fBarg\fP
-.in +.5i
-.T2 0
-Normal memorandum, no type printed
-.T2 1
-Memorandum with \fIMEMORANDUM FOR FILE\fP printed
-.T2 2
-Memorandum with \fIPROGRAMMER'S NOTES\fP printed
-.T2 3
-Memorandum with \fIENGINEER'S NOTES\fP printed
-.T2 4
-Released paper style
-.T2 5
-External letter style
-.in
-See also \fBCOVER\fP/\fBCOVEND\fP, a more flexible type of front page.
-.TP
-.B "MOVE y-pos [x-pos [line-length]]"
-Move to a position, pageoffset set to \fIx-pos\fP.
-If \fIline-length\fP is not given, the difference between
-current and new pageoffset is used.
-Use \fBPGFORM\fP without arguments to return to normal.
-.TP
-.B "MULB cw1 space1 [cw2 space2 [cw3 ...]]"
-Begin a special multi-column mode.
-Every columns width must be specified.
-Also the space between the columns must be specified.
-The last column
-does not need any space-definition.
-\fBMULB\fP starts a diversion and \fBMULE\fP
-ends the diversion and prints the columns.
-The unit for width and space is 'n', but \fBMULB\fP accepts all
-normal unitspecifications like 'c' and 'i'.
-\fBMULB\fP operates in a separate environment.
-.TP
-.B "MULN"
-Begin the next column.
-This is the only way to switch column.
-.TP
-.B "MULE"
-End the multi-column mode and print the columns.
-.TP
-.B "nP [type]"
-Print numbered paragraph with header level two.
-See \fB.P\fP.
-.TP
-.B "NCOL"
-Force printing to the next column, don't use this together with
-the \fBMUL*\fP macros, see \fB2C\fP.
-.TP
-.B "NS [arg [1]]"
-Prints different types of notations.
-The argument selects between
-the predefined type of notations.
-If the second argument is available,
-then the argument becomes the entire notation.
-If the argument doesn't exist in the predefined, it will be
-printed as \fBCopy (\fP\fIarg\fP\fB) to\fP.
-It is possible to add more standard notations, see the string variable
-\fBLetns\fP and \fBLetnsdef\fP.
-.nf
-.in +.5i
-.T2 \fBArg
-Notation\fP
-.T2 \fInone\fP
-Copy To
-.T2 """""
-Copy To
-.T2 1
-Copy To (with att.) to
-.T2 2
-Copy To (without att.) to
-.T2 3
-Att.
-.T2 4
-Atts.
-.T2 5
-Enc.
-.T2 6
-Encs.
-.T2 7
-Under separate cover
-.T2 8
-Letter to
-.T2 9
-Memorandum to
-.T2 10
-Copy (with atts.) to
-.T2 11
-Copy (without atts.) to
-.T2 12
-Abstract Only to
-.T2 13
-Complete Memorandum to
-.T2 14
-CC
-.in
-.fi
-.TP
-.B "ND new-date"
-New date.
-Override the current date.
-Date is not
-printed if \fInew-date\fP is an empty string.
-.TP
-.B "OF [arg]"
-Odd-page footer, a line printed just above the normal footer.
-See \fBEF\fP and \fBPF\fP.
-.TP
-.B "OH [arg]"
-Odd-page header, a line printed just below the normal header.
-See \fBEH\fP and \fBPH\fP.
-.TP
-.B OP
-Make sure that the following text is printed at the top
-of an odd-numbered page.
-Will not output an empty page
-if currently at the top of an odd page.
-.TP
-.B "P [type]"
-Begin new paragraph.
-\fBP\fP without argument will produce left justified text, even
-the first line of the paragraph.
-This is the same as setting
-\fItype\fP to 0.
-If the argument is\ 1, then the first line
-of text following \fBP\fP will be indented by the number of
-spaces in number register \fBPi\fP, normally 5.
-.sp
-Instead of giving 1 as argument to \fBP\fP it is possible to set the
-paragraph type in number register \fBPt\fP.
-Using 0 and\ 1
-will be the same as adding that value to \fBP\fP.
-A value of 2 will indent all paragraphs, except after
-headings, lists and displays.
-.sp
-The space between two paragraphs is controlled by number register \fBPs\fP,
-and is 1 by default (one blank line).
-.TP
-.B "PGFORM [linelength [pagelength [pageoffset [1]]]]"
-Sets linelength, pagelength and/or pageoffset.
-This macro can be used for special formatting, like letterheads
-and other.
-It is normally the first command in a file, though it's not necessary.
-\fBPGFORM\fP can be used without arguments
-to reset everything after a \fBMOVE\fP.
-A line-break is done unless the fourth argument is given.
-This can be used to avoid the pagenumber on the first page while setting
-new width and length.
-(It seems as if this macro sometimes doesn't work too well.
-Use the command line arguments
-to change linelength, pagelength and pageoffset instead.
-Sorry.)
-.TP
-.B PGNH
-No header is printed on the next page.
-Used to get rid of
-the header in letters or other special texts.
-This macro must be used before any text to inhibit the pageheader
-on the first page.
-.TP
-.B "PIC [-L] [-C] [-R] [-I n] filename [width [height]]"
-\fBPIC\fP includes a Postscript file in the document.
-The macro depends on \fBmmroff\fP and \fBINITR\fP.
-\fB-L\fP, \fB-C\fP, \fB-R\fP and \fB-I n\fP adjusts the picture
-or indents it.
-The optionally \fIwidth\fP and \fIheight\fP
-can also be given to resize the picture.
-.TP
-.B PE
-Picture end.
-Ends a picture for \fB@TMAC_M_PREFIX@pic\fP, see the manual for \fB@TMAC_M_PREFIX@pic\fP.
-.TP
-.B "PF [arg]"
-Page footer.
-\fBPF\fP sets the line to be printed at the bottom of each page.
-Normally empty.
-See \fBPH\fP for the argument specification.
-.TP
-.B "PH [arg]"
-Page header, a line printed at the top of each page.
-The argument should be specified as "'left-part'center-part'right-part'",
-where left-, center- and right-part is printed left-justified, centered
-and right justified.
-The character \fB%\fP is changed to the current
-page number.
-The default page-header is "''- % -''", the page
-number between two dashes.
-.TP
-.B PS
-Picture start (from pic).
-Begins a picture for \fB@g@pic\fP, see
-the manual.
-.TP
-.B PX
-Page-header user-defined exit.
-\fBPX\fP is called just after the printing of the page header
-in \fIno-space\fP mode.
-.TP
-.B R
-Roman.
-Return to roman font, see also \fBI\fP.
-.TP
-.B "RB [roman-text [bold-text [roman-text [...]]]]"
-Roman-bold.
-Even arguments is printed in roman, odd in boldface.
-See \fBI\fP.
-.TP
-.B "RD [prompt [diversion [string]]]"
-Read from standard input to diversion and/or string.
-The text will be saved in a diversion named \fIdiversion\fP.
-Recall the text by writing the name of the diversion after a dot
-on an empty line.
-A string will also be defined if
-\fIstring\fP is given.
-\fIDiversion\fP and/or \fIprompt\fP can
-be empty ("").
-.TP
-.B RF
-Reference end.
-Ends a reference definition and returns to normal
-processing.
-See \fBRS\fP.
-.TP
-.B "RI [roman-text [italic-text [roman-text [...]]]]"
-Even arguments are printed in roman, odd in italic.
-See \fBI\fP.
-.TP
-.B "RL [text-indent [1]]"
-Reference list start.
-Begins a list where each item is preceded with a automatically
-incremented number between
-square brackets.
-\fIText-indent\fP changes the default indentation.
-.TP
-.B "RP [arg1 [arg2]]"
-Produce reference page.
-\fBRP\fP can be used if a reference page is wanted somewhere in the
-document.
-It is not needed if \fBTC\fP is used to produce
-a table of content.
-The reference page will then be printed automatically.
-.sp
-The reference counter will not be reset if \fIarg1\fP is 1.
-.sp
-\fIArg2\fP tells \fBRP\fP whether to eject a page or not.
-.br
-\fBArg2\fP
-.in +.5i
-.T2 0
-The reference page will be printed on a separate page.
-This is
-the default.
-.T2 1
-Do not eject page after the list.
-.T2 2
-Do not eject page before the list.
-.T2 3
-Do not eject page before and after the list.
-.in
-The reference items will be separated by a blank line.
-Setting number register \fBLs\fP to 0 will suppress the line.
-.sp
-The string \fBRp\fP contains the reference page title and
-is normally set to \fIREFERENCES\fP.
-.TP
-.B "RS [string-name]"
-\fBRS\fP begins an automatically numbered reference definition.
-Put the string \fB\e*(Rf\fP where the reference mark
-should be and write the reference between \fBRS\fP/\fBRF\fP
-at next new line after the reference mark.
-The reference number
-is stored in number register \fB:R\fP.
-If \fIstring-name\fP is given, a string with that name
-will be defined and contain the current reference mark.
-The string can be referenced as \fB\e*[\fIstring-name\fP]\fP later in
-the text.
-.TP
-.B "S [size [spacing]]"
-Set point size and vertical spacing.
-If any argument is equal 'P', then
-the previous value is used.
-A 'C' means current value, and 'D' default value.
-If '+' or '-' is used before the value, then increment or decrement of
-the current value will be done.
-.TP
-.B "SA [arg]"
-Set right-margin justification.
-Justification is normally turned on.
-No argumenent or \fB0\fP turns off justification, a \fB1\fP turns on
-justification.
-.TP
-.B "SETR refname [string]"
-Remember the current header and page-number as \fIrefname\fP.
-Saves \fIstring\fP if \fIstring\fP is defined.
-\fIstring\fP is retrieved
-with \fB.GETST\fP.
-See \fBINITR\fP.
-.TP
-.B "SG [arg [1]]"
-Signature line.
-Prints the authors name(s) after the formal closing.
-The argument will be appended to the reference data, printed
-at either the first or last author.
-The reference data is the location,
-department and initials specified with \fB.AU\fP.
-It will be printed at the first author if the second argument is given,
-otherwise at the last.
-No reference data will be printed if the author(s) is specifed
-thru \fB.WA\fP/\fB.WE\fP.
-See \fBINTERNALS\fP.
-.TP
-.B "SK [pages]"
-Skip pages.
-If \fIpages\fP is \fB0\fP or omitted, a skip to the next page
-will occur unless it is already at the top of a page.
-Otherwise it will skip \fIpages\fP pages.
-.TP
-.B "SM string1 [string2 [string3]]"
-Make a string smaller.
-If \fIstring2\fP is given, \fIstring1\fP will be smaller and \fIstring2\fP
-normal, concatenated with \fIstring1\fP.
-With three argument, all is
-concatenated, but only \fIstring2\fP is made smaller.
-.TP
-.B "SP [lines]"
-Space vertically.
-\fIlines\fP can have any scalingfactor, like \fI3i\fP or
-\fI8v\fP.
-Several \fBSP\fP in a line will only produce the
-maximum number of lines, not the sum.
-\fBSP\fP will also be ignored
-until the first textline in a page.
-Add a \fB\e&\fP before \fBSP\fP
-to avoid this.
-.TP
-.B TAB
-reset tabs to every\ 5n.
-Normally used to reset any previous tabpositions.
-.TP
-.B "TB [title [override [flag [refname]]]]"
-Table title, arguments are the same as for \fBEC\fP.
-\fBTB\fP uses the number register \fBTb\fP as counter.
-The string \fBLt\fP controls the title of the
-List of Tables, default is \fILIST OF TABLES\fP.
-The List of Tables will only be printed if number register \fBLt\fP
-is 1, default 1.
-The string \fBLitb\fP contains the word \fITABLE\fP, wich
-is printed before the number.
-.br
-Special handling of the title will occur if
-\fBTB\fP is used inside \fBDS\fP/\fBDE\fP, it will not be
-affected by the format of \fBDS\fP.
-.TP
-.B "TC [slevel [spacing [tlevel [tab [h1 [h2 [h3 [h4 [h5]]]]]]]]]"
-Table of contents.
-This macro is normally used at the last line of the document.
-It generates a table of contents with headings up to the level
-controlled by number register \fBCl\fP.
-Note that \fBCl\fP controls
-the saving of headings, it has nothing to do with \fBTC\fP.
-Headings with level less than or equal to \fIslevel\fP will get
-\fIspacing\fP number of lines before them.
-Headings with level less than or equal to \fItlevel\fP will have
-their page numbers right justified with dots or spaces separating
-the text and the page number.
-Spaces is used if \fItab\fP
-is greater than zero, otherwise dots.
-Other headings will have the
-page number directly at the end of the heading text (\fIragged right\fP).
-.sp
-The rest of the arguments will be printed, centered, before the
-table of contents.
-.sp
-The user-defined macros \fBTX\fP and \fBTY\fP are used if \fBTC\fP is called
-with at most four arguments.
-\fBTX\fP is called before the printing
-of \fICONTENTS\fP, and \fBTY\fP is called instead of printing \fICONTENTS\fP.
-.sp
-Equivalent macros can be defined for list of figures, tables, equations
-and excibits by defining \fBTXxx\fP or \fBTYxx\fP, where \fBxx\fP
-is \fBFg\fP, \fBTB\fP, \fBEC\fP or \fBEX\fP.
-.sp
-String \fBCi\fP can be set to control the indentations for each heading-level.
-It must be scaled, like \fB.ds\ Ci\ .25i\ .5i\ .75i\ 1i\ 1i\fP.
-The indentation is normally controlled by the maxlength of headings
-in each level.
-.sp
-All texts can be redefined, new stringvariables
-\fILifg\fP, \fILitb\fP, \fILiex\fP, \fILiec\fP and \fILicon\fP contain
-"Figure", "TABLE", "Exhibit", "Equation" and "CONTENTS".
-These can be redefined to other languages.
-.TP
-.B TE
-Table end.
-See \fBTS\fP.
-.TP
-.B "TH [N]"
-Table header.
-See \fBTS\fP.
-\fBTH\fP ends the header of the table.
-This header will
-be printed again if a page-break occurs.
-Argument \fIN\fP isn't implemented yet.
-.TP
-.B TL [charging-case number(s) [filing-case number(s)]]
-Begin title of memorandum.
-All text up to the next \fBAU\fP is included in the title.
-\fICharging-case number\fP and \fIfiling-case\fP are saved
-for use in the front page processing.
-.TP
-.B TM [num1 [num2 [...]]]
-Technical memorandumnumbers used in \fB.MT\fP.
-Unlimited number
-of arguments may be given.
-.TP
-.B TP
-Top of page user-defined macro.
-This macro is called instead of the normal page header.
-It is
-possible to get complete control over the header.
-Note that header and footer is printed in a separate environment.
-Linelength is preserved though.
-.TP
-.B "TS [H]"
-Table start.
-This is the start of a table specification
-to \fB@g@tbl\fP.
-See separate manual for \fB@g@tbl\fP.
-\fBTS\fP ends with \fBTE\fP.
-Argument \fIH\fP tells \fBm@TMAC_M_PREFIX@m\fP that the table
-has a header.
-See \fBTH\fP.
-.TP
-.B TX
-Userdefined table of contents exit.
-This macro is called just before \fBTC\fP prints the word \fICONTENTS\fP.
-See \fBTC\fP.
-.TP
-.B TY
-Userdefined table of contents exit (no "CONTENTS").
-This macro is called instead of printing \fICONTENTS\fP.
-See \fBTC\fP.
-.TP
-.B VERBON [flag [pointsize [font]]]
-Begin verbatim output using courier font.
-Usually for printing programs.
-All character has equal width.
-The pointsize can be changed with
-the second argument.
-By specifying the font-argument
-it is possible to use another font instead of courier.
-\fIflag\fP controls several special features.
-It contains the sum of all wanted features.
-.in +.5i
-.T2 Value
-Description
-.T2 1
-Disable the escape-character (\e).
-This is normally turned on during
-verbose output.
-.T2 2
-Add an empty line before the verbose text.
-.T2 4
-Add an empty line after the verbose text.
-.T2 8
-Print the verbose text with numbered lines.
-This adds four digitsized
-spaces in the beginning of each line.
-Finer control is available with
-the string-variable \fBVerbnm\fP.
-It contains all arguments to the
-\fBtroff\fP-command \fB.nm\fP, normally '1'.
-.T2 16
-Indent the verbose text with five 'n':s.
-This is controlled by the
-number-variable \fBVerbin\fP (in units).
-.in
-.TP
-.B VERBOFF
-End verbatim output.
-.TP
-.B "VL text-indent [mark-indent [1]]"
-Variable-item list has no fixed mark, it assumes that
-every \fBLI\fP have a mark instead.
-\fIText-indent\fP sets the indent to the text, and \fImark-indent\fP
-the distance from the current indent to the mark.
-A third argument will prohibit printing of a blank line before each
-item.
-.TP
-.B "VM [-T] [top [bottom]]"
-Vertical margin. Adds extra vertical top and margin space.
-Option \fB-T\fP set the total space instead.
-No argument resets the margin to zero or the default
-\fI(7v 5v)\fP if \fB-T\fP
-was used. It is higly recommended that macro \fBTP\fP and/or
-\fBEOP\fP are defined
-if using \fB-T\fP and setting top and/or bottom margin to less than the default.
-.TP
-.B "WA [writer-name [title]]"
-Begins specification of the writer and writer's address.
-Several names can be specified with empty \fBWA\fP/\fBWE\fP-pairs, but
-only one address.
-.TP
-.B WE
-Ends the address-specification after \fP.WA\fP.
-.TP
-.B "WC [format]"
-Footnote and display width control.
-.in +.5i
-.T2 N
-Set default mode, \fB-WF\fP, \fB-FF\fP, \fB-WD\fP and \fBFB\fP.
-.T2 WF
-Wide footnotes, wide also in two-column mode.
-.T2 -WF
-Normal footnote width, follow column mode.
-.T2 FF
-All footnotes gets the same width as the first footnote encountered.
-.T2 -FF
-Normal footnotes, width follows \fBWF\fP and \fB-WF\fP.
-.T2 WD
-Wide displays, wide also in two-column mode.
-.T2 -WD
-Normal display width, follow column mode.
-.T2 FB
-Floating displays generates a line break when printed on the current page.
-.T2 -FB
-Floating displays does not generate line break.
-.in
-.sp 3
-.LP
-.\"########################################################################
-.LP
-.B "Strings used in m@TMAC_M_PREFIX@m:"
-.TP
-.B App
-A string containing the word "APPENDIX".
-.TP
-.B Apptxt
-The current appendix text.
-.TP
-.B "EM"
-Em dash string
-.TP
-.B H1txt
-Will be updated by \fB.H\fP and \fB.HU\fP to the current heading text.
-Also updated in table of contents & friends.
-.TP
-.B HF
-Fontlist for headings, normally "2 2 2 2 2 2 2".
-Nonnumeric fontnames may also be used.
-.TP
-.B HP
-Pointsize list for headings.
-Normally "0 0 0 0 0 0 0" which is the same as
-"10 10 10 10 10 10 10".
-.TP
-.B Index
-Contains \fIINDEX\fP.
-.TP
-.B Indcmd
-Contains the index command, \fIsort\ -t\et\fP.
-.TP
-.B Lifg
-String containing \fIFigure\fP.
-.TP
-.B Litb
-String containing \fITABLE\fP.
-.TP
-.B Liex
-String containing \fIExhibit\fP.
-.TP
-.B Liec
-String containing \fIEquation\fP.
-.TP
-.B Licon
-String containing \fICONTENTS\fP.
-.TP
-.B Lf
-Contains "LIST OF FIGURES".
-.TP
-.B Lt
-Contains "LIST OF TABLES".
-.TP
-.B Lx
-Contains "LIST OF EXHIBITS".
-.TP
-.B Le
-Contains "LIST OF EQUATIONS".
-.TP
-.B Letfc
-Contains "Yours very truly,", used in \fB.FC\fP.
-.TP
-.B Letapp
-Contains "APPROVED:", used in \fB.AV\fP.
-.TP
-.B Letdate
-Contains "Date", used in \fB.AV\fP.
-.TP
-.B LetCN
-Contains "CONFIDENTIAL", used in \fB.LO CN\fP.
-.TP
-.B LetSA
-Contains "To Whom It May Concern:", used in \fB.LO SA\fP.
-.TP
-.B LetAT
-Contains "ATTENTION:", used in \fB.LO AT\fP.
-.TP
-.B LetSJ
-Contains "SUBJECT:", used in \fB.LO SJ\fP.
-.TP
-.B LetRN
-Contains "In reference to:", used in \fB.LO RN\fP.
-.TP
-.B Letns
-is an array containing the different strings used in \fB.NS\fP.
-It is really a number of stringvariables prefixed with \fBLetns!\fP.
-If the argument doesn't exist, it will be included
-between \fB()\fP with \fBLetns!copy\fP as prefix and \fBLetns!to\fP as suffix.
-Observe the space after \fBcopy\fP and before \fBto\fP.
-.nf
-.ta 1.5i
-\fBName Value\fP
-Letns!0 Copy to
-Letns!1 Copy (with att.) to
-Letns!2 Copy (without att.) to
-Letns!3 Att.
-Letns!4 Atts.
-Letns!5 Enc.
-Letns!6 Encs.
-Letns!7 Under separate cover
-Letns!8 Letter to
-Letns!9 Memorandum to
-Letns!10 Copy (with atts.) to
-Letns!11 Copy (without atts.) to
-Letns!12 Abstract Only to
-Letns!13 Complete Memorandum to
-Letns!14 CC
-Letns!copy Copy "
-Letns!to " to
-.fi
-.TP
-.B Letnsdef
-Defines the standard-notation used when no argument is given
-to \fB.NS\fP.
-Default is \fB0\fP.
-.TP
-.B "MO1 - MO12"
-Strings containing \fIJanuary\fP thru \fIDecember\fP.
-.TP
-.B Qrf
-String containing "See chapter \e\e*[Qrfh], page \e\en[Qrfp].".
-.TP
-.B Rp
-Contains "REFERENCES".
-.TP
-.B Tcst
-Contains current status of table of contents and list of XXXX.
-Empty outside \fB.TC\fP.
-Useful in user-defined macros like \fB.TP\fP.
-.nf
-.ta 1.5i
-\fBValue Meaning\fP
-co Table of contents
-fg List of figures
-tb List of tables
-ec List of equations
-ex List of exhibits
-ap Appendix
-.fi
-.ta
-.TP
-.B Tm
-Contains \e(tm, trade mark.
-.TP
-.B Verbnm
-Argument to \fB.nm\fP in \fB.VERBON\fP, default: \fB1\fP.
-.\"-----------------------------------
-.LP
-.B "Number variables used in m@TMAC_M_PREFIX@m:"
-.TP
-.B Aph
-Print an appendix-page for every new appendix
-if this numbervariable is non-zero.
-No output will occur if \fBAph\fP is zero, but there will always
-be an appendix-entry in the 'List of contents'.
-.TP
-.B Cl
-Contents level [0:14], contents saved if heading level <= Cl, default 2.
-.TP
-.B Cp
-Eject page between LIST OF XXXX if Cp == 0, default 0.
-.TP
-.B D
-Debugflag, values >0 produces varying degree of debug.
-A value of\ 1
-gives information about the progress of formatting, default\ 0.
-.TP
-.B De
-Eject after floating display is output [0:1], default\ 0.
-.TP
-.B Dsp
-Controls the space output before and after static displays
-if defined.
-Otherwise is the value of Lsp used.
-.TP
-.B Df
-Floating keep output [0:5], default 5.
-.TP
-.B Ds
-\fBLsp\fP space before and after display if == 1 [0:1], default 1.
-.TP
-.B Ej
-Eject page, default 0.
-.TP
-.B Eq
-Equation lable adjust 0=left, 1=right.
-Default\ 0.
-.TP
-.B Fs
-Footnote spacing, default 1.
-.TP
-.B "H1-H7"
-Heading counters
-.TP
-.B H1dot
-Append a dot after the level one heading number if >\ 0.
-Default is\ 1.
-.TP
-.B H1h
-Copy of number register \fBH1\fP, but it is incremented
-just before the page break.
-Useful in user defined header macros.
-.TP
-.B Hb
-Heading break level [0:14], default\ 2.
-.TP
-.B Hc
-Heading centering level, [0:14].
-Default\ 0.
-.TP
-.B Hi
-Heading temporary indent [0:2], default\ 1.
-.br
-0\ ->\ 0 indent, left margin
-.br
-1\ ->\ indent to right , like .P 1
-.br
-2\ ->\ indent to line up with text part of preceding heading
-.TP
-.B Hps
-Number variable with the heading pre-space level.
-If the heading-level
-is less than or equal to \fBHps\fP, then two lines will precede the
-section heading instead of one.
-Default is first level only.
-The real amount of lines is controlled by the variables \fBHps1\fP and
-\fBHps2\fP.
-.TP
-.B Hps1
-This is the number of lines preceding \fB.H\fP when the heading-level
-is greater than \fBHps\fP.
-Value is in units, normally 0.5.
-.TP
-.B Hps2
-This is the number of lines preceding \fB.H\fP when the heading-level
-is less than or equal to \fBHps\fP.
-Value is in units, normally\ 1.
-.TP
-.B Hs
-Heading space level [0:14], default\ 2.
-.TP
-.B Hss
-This is the number of lines that follows \fB.H\fP when the heading-level
-is less than or equal to \fBHs\fP.
-Value is in units, normally\ 1.
-.TP
-.B Ht
-Heading numbering type, default 0.
-0 -> multiple (1.1.1 ...)
-.br
-1 -> single
-.TP
-.B Hu
-Unnumbered heading level, default 2.
-.TP
-.B Hy
-Hyphenation in body, default 0.
-.br
-0\ ->\ no hyphenation
-.br
-1\ ->\ hyphenation 14 on
-.TP
-.B Iso
-Set this variable to 1 on the command line to get ISO-formatted date string.
-(\fB-rIso=1\fP)
-Useless inside a document.
-.TP
-.B L
-Page length, only for command line settings.
-.TP
-.B Letwam
-Max lines in return-address, used in \fB.WA\fP/\fB.WE\fP.
-Default\ 14.
-.TP
-.B "Lf, Lt, Lx, Le"
-Enables (1) or disables (0) the printing of List of figures,
-List of tables, List of exhibits and List of equations.
-Default: Lf=1, Lt=1, Lx=1, Le=0.
-.TP
-.B Li
-List indent, used by .AL, default 6.
-.TP
-.B Limsp
-Flag for space between prefix and mark in automatic lists (.AL).
-.br
-0\ ==\ no space
-.br
-1\ ==\ space
-.TP
-.B Ls
-List space, if current listlevel > Ls then no spacing will occur around lists.
-Default 99.
-.TP
-.B Lsp
-The size of an empty line.
-Normally 0.5v, but it is 1v
-if \fBn\fP is set (\fB.nroff\fP).
-.TP
-.B N
-Numbering style [0:5], default 0.
-.br
-0\ ==\ (default) normal header for all pages.
-.br
-1\ ==\ header replaces footer on first page, header is empty.
-.br
-2\ ==\ page header is removed on the first page.
-.br
-3\ ==\ "section-page" numbering enabled.
-.br
-4\ ==\ page header is removed on the first page.
-.br
-5\ ==\ "section-page" and "section-figure" numbering enabled.
-See also the number-register Sectf and Sectp.
-.TP
-.B Np
-Numbered paragraphs, default 0.
-.br
-0\ ==\ not numbered
-.br
-1\ ==\ numbered in first level headings.
-.TP
-.B O
-Page offset, only for command line settings.
-.TP
-.B Of
-Format of figure,table,exhibit,equation titles, default 0.
-.br
-0\ =\ ". "
-.br
-1\ =\ " - "
-.TP
-.B P
-Current page-number, normally the same as % unless "section-page" numbering
-is enabled.
-.TP
-.B Pi
-paragraph indent, default 5.
-.TP
-.B Pgps
-Controls whether header and footer pointsize should follow the current
-setting or just change when the header and footer is defined.
-.in +.5i
-.ti -.5i
-.T2 Value
-Description
-.T2 0
-Pointsize will only change to the current setting when \fB.PH\fP, \fB.PF\fP,
-\&\fB.OH\fP, \fP.EH\fP, \fB.OF\fP or \fB.OE\fP is executed.
-.T2 1
-Pointsize will change after every \fB.S\fP.
-This is the default.
-.in
-.TP
-.B Ps
-paragraph spacing, default 1.
-.TP
-.B Pt
-Paragraph type, default 0.
-.br
-0\ ==\ left-justified
-.br
-1\ ==\ indented .P
-.br
-2\ ==\ indented .P except after .H, .DE or .LE.
-.TP
-.B Sectf
-Flag controlling "section-figures".
-A non-zero value enables this.
-See also register N.
-.TP
-.B Sectp
-Flag controlling "section-page-numbers".
-A non-zero value enables this.
-See also register N.
-.TP
-.B Si
-Display indent, default 5.
-.TP
-.B Verbin
-Indent for \fB.VERBON\fP, default 5n.
-.TP
-.B W
-Line length, only for command line settings.
-.TP
-.B .mgm
-Always 1.
-.LP
-.SH INTERNALS
-The letter macros is using different submacros depending on
-the letter type.
-The name of the submacro has the letter type
-as suffix.
-It is therefore possible to define other letter types, either
-in the national macro-file, or as local additions.
-\&\fB.LT\fP will set the number variables \fBPt\fP and \fBPi\fP to 0 and 5.
-The following strings and macros must be defined for a new letter type:
-.TP
-\fBlet@init_\fP\fItype\fP
-This macro is called directly by \fB.LT\fP.
-It is supposed to initialize
-variables and other stuff.
-.TP
-\fBlet@head_\fP\fItype\fP
-This macro prints the letter head, and is called instead of the
-normal page header.
-It is supposed to remove the alias \fBlet@header\fP,
-otherwise it will be called for all pages.
-.TP
-\fBlet@sg_\fP\fItype\ name\ title\ n\ flag\ [arg1\ [arg2\ [...]]]\fP
-\&\fB.SG\fP is calling this macro only for letters, memorandums has
-its own processing.
-\fIname\fP and \fItitle\fP is specified
-thru \fB.WA\fP/\fB.WB\fP.
-\fIn\fP is the counter, 1-max, and
-\fIflag\fP is true for the last name.
-Any other argument to \fB.SG\fP
-is appended.
-.TP
-\fBlet@fc_\fP\fItype\ closing\fP
-This macro is called by \fB.FC\fP, and has the
-formal closing as argument.
-.LP
-\&\fB.LO\fP is implemented as a general option-macro.
-\fB.LO\fP demands
-that a string named \fBLet\fP\fItype\fP is defined, where \fItype\fP
-is the letter type.
-\&\fB.LO\fP will then assign the argument to the string
-variable \fBlet*lo-\fP\fItype\fP.
-.LP
-.\".SH BUGS
-.SH AUTHOR
-Jörgen Hägg, Lund, Sweden <jh@axis.se>.
-.SH FILES
-.TP
-.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m
-.TP
-.B @TMAC_MDIR@/*.cov
-.TP
-.B @TMAC_MDIR@/*.MT
-.TP
-.B @TMAC_MDIR@/locale
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.br
-.BR groff_mmse (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" coding: latin-1
-.\" End:
diff --git a/contrib/groff/contrib/mm/groff_mmse.man b/contrib/groff/contrib/mm/groff_mmse.man
deleted file mode 100644
index 511eac5898c7..000000000000
--- a/contrib/groff/contrib/mm/groff_mmse.man
+++ /dev/null
@@ -1,86 +0,0 @@
-.\"
-.\" $Id: groff_mmse.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
-.\" Skrivet av Jörgen Hägg, Lund, Sverige
-.\"
-.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAMN
-groff_mmse \- svenska mm makro för groff
-.SH SYNTAX
-.B groff
-.B \-m@TMAC_M_PREFIX@mse
-[
-.IR flaggor .\|.\|.
-]
-[
-.IR filer .\|.\|.
-]
-.SH BESKRIVNING
-\fBm@TMAC_M_PREFIX@mse\fP är en svensk variant av \fBm@TMAC_M_PREFIX@m\fP. Alla texter
-är översatta. En A4 sida får text som är 13 cm bred, 3.5 cm indragning
-samt är 28.5 cm hög.
-Det finns stöd för brevuppställning enligt svensk standard
-för vänster och högerjusterad text.
-.LP
-\fBCOVER\fP kan använda \fIse_ms\fP som argument. Detta ger ett
-svenskt försättsblad.
-Se \fBgroff_mm(@MAN7EXT@)\fP för övriga detaljer.
-.SH BREV
-Tillgängliga brevtyper:
-.TP
-.B ".LT SVV"
-Vänsterställd löptext med adressat i position T0 (vänsterställt).
-.TP
-.B ".LT SVH"
-Högerställd löptext med adressat i position T4 (passar
-fönsterkuvert).
-.LP
-Följande extra LO-variabler används.
-.TP
-.B ".LO DNAMN\fI namn\fP"
-Anger dokumentets namn.
-.TP
-.br
-.B ".LO MDAT\fI datum\fP"
-Mottagarens datum, anges under \fBErt datum:\fP (\fBLetMDAT\fP).
-.TP
-.br
-.B ".LO BIL\fI sträng\fP"
-Anger bilaga, nummer eller sträng med \fBBilaga\fP (\fBLetBIL\fP)
-som prefix.
-.TP
-.br
-.B ".LO KOMP\fI text\fP"
-Anger kompletteringsuppgift.
-.TP
-.br
-.B ".LO DBET\fI beteckning\fP"
-Anger dokumentbeteckning eller dokumentnummer.
-.TP
-.br
-.B ".LO BET\fI beteckning\fP"
-Anger beteckning (ärendebeteckning i form av diarienummer eller liknande).
-.TP
-.br
-.B ".LO SIDOR\fI antal\fP"
-Anger totala antalet sidor och skrivs ut efter sidnumret inom
-parenteser.
-.LP
-Om makrot \fB.TP\fP är definierat anropas det efter utskrift av brevhuvudet.
-Där lägger man lämpligen in postadress och annat som brevfot.
-.SH "SKRIVET AV"
-Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
-.SH FILER
-.B @MACRODIR@/tmac.@TMAC_M_PREFIX@mse
-.B @TMAC_MDIR@/se_*.cov
-.SH "SE OCKSÅ"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.br
-.BR groff_mm (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/mm/m.tmac b/contrib/groff/contrib/mm/m.tmac
deleted file mode 100644
index db52e93deb7a..000000000000
--- a/contrib/groff/contrib/mm/m.tmac
+++ /dev/null
@@ -1,3536 +0,0 @@
-.\"
-.de @revision
-.ds RE \\$2
-..
-.\"
-.\" $Id: m.tmac,v 2.26 2005/05/26 06:28:38 wl Exp $
-.@revision $Revision: 2.26 $
-.ig
-
-Copyright (C) 1991-2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-mgm is written by Jörgen Hägg <jh@axis.com>
-
-mgm is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-mgm is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Please send bugreports with examples to jh@axis.com.
-
-Naming convention stolen from mgs.
-Local names module*name
-Extern names module@name
-Env.var environ:name
-Index array!index
-..
-.if !\n(.g .ab These mm macros require groff.
-.do if d PH .nx
-.if \n(.C .ab The groff mm macros do not work in compatibility mode.
-.if (\n[.warn] == 65543) .warn
-.mso devtag.tmac
-.\" ######## init #######
-.\" Contents level [0:14], contents saved if heading level <= Cl
-.nr Cl 2
-.\" Eject page between LIST OF XXXX if Cp == 0
-.nr Cp 0
-.\" Debugflag
-.if !r D .nr D 0
-.\" Eject after floating display is output [0:1]
-.nr De 0
-.\" Floating keep output [0;5]
-.nr Df 5
-.\" space before and after display if == 1 [0:1]
-.nr Ds 1
-.\" Eject page
-.nr Ej 0
-.\" Equation label adjust 0=left, 1=right
-.nr Eq 0
-.\" Em dash string
-.ie n .ds EM " --
-.el .ds EM \(em
-.\" Footnote spacing
-.nr Fs 1
-.\" H1-H7 heading counters
-.nr H1 0 1
-.nr H2 0 1
-.nr H3 0 1
-.nr H4 0 1
-.nr H5 0 1
-.nr H6 0 1
-.nr H7 0 1
-.nr H8 0 1
-.nr H9 0 1
-.nr H10 0 1
-.nr H11 0 1
-.nr H12 0 1
-.nr H13 0 1
-.nr H14 0 1
-.\" Heading break level [0:14]
-.nr Hb 2
-.\" heading centering level, [0:14]
-.nr Hc 0
-.\" header format
-.ds HF 2 2 2 2 2 2 2 2 2 2 2 2 2 2
-.\" heading temp. indent [0:2]
-.\" 0 -> 0 indent, left margin
-.\" 1 -> indent to right , like .P 1
-.\" 2 -> indent to line up with text part of preceding heading
-.nr Hi 1
-.\" header pointsize
-.ds HP 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-.\" heading space level [0:14]
-.nr Hs 2
-.\" heading numbering type
-.\" 0 -> multiple (1.1.1 ...)
-.\" 1 -> single
-.nr Ht 0
-.\" Unnumbered heading level
-.nr Hu 2
-.\" hyphenation in body
-.\" 0 -> no hyphenation
-.\" 1 -> hyphenation 14 on
-.nr Hy 0
-.\" text for toc, selfexplanatory. Look in the new variable section
-.ds Lf LIST OF FIGURES
-.nr Lf 1
-.ds Lt LIST OF TABLES
-.nr Lt 1
-.ds Lx LIST OF EXHIBITS
-.nr Lx 1
-.ds Le LIST OF EQUATIONS
-.nr Le 0
-.\" List indent, used by .AL
-.nr Li 6
-.\" List space, if listlevel > Ls then no spacing will occur around lists.
-.nr Ls 99
-.\" Numbering style [0:5]
-.if !r N .nr N 0
-.\" numbered paragraphs
-.\" 0 == not numbered
-.\" 1 == numbered in first level headings.
-.nr Np 0
-.\" Format of figure,table,exhibit,equation titles.
-.\" 0= ". ", 1=" - "
-.nr Of 0
-.\" Table of contents page numbering style
-.nr Oc 0
-.\" Page-number, normally same as %.
-.nr P 0
-.\" paragraph indent
-.nr Pi 5
-.\" paragraph spacing
-.nr Ps 1
-.\" paragraph type
-.\" 0 == left-justified
-.\" 1 == indented .P
-.\" 2 == indented .P except after .H, .DE or .LE.
-.nr Pt 0
-.\" Reference title
-.ds Rp REFERENCES
-.\" Display indent
-.nr Si 5
-.\"
-.\" Current state of TOC, empty outside TC, inside
-.\" it will be set to co,fg,tb,ec,ex or ap.
-.ds Tcst
-.\"
-.ds Tm \(tm
-.\"
-.\"---------------------------------------------
-.\" Internal global variables
-.\"
-.\" This is for cover macro .MT
-.\" .ds @language
-.\"
-.nr @copy_type 0
-.if r C .nr @copy_type \n[C]
-.\" >0 if Subject/Date/From should be bold, roman otherwise
-.ie n .ds @sdf_font R
-.el .ds @sdf_font B
-.if \n[@copy_type]=4 \{\
-. ls 2
-. nr Pi 10
-. nr Pt 1
-.\}
-.\"
-.\"
-.if r E \{\
-. ie \n[E] .ds @sdf_font B
-. el .ds @sdf_font R
-.\}
-.\"
-.\" Current pointsize and vertical space, always in points.
-.if !r S .nr S 10
-.ps \n[S]
-.vs \n[S]+2
-.\"
-.nr @ps \n[.ps]
-.nr @vs \n[.v]
-.if \n[D]>1 .tm @ps=\n[@ps], @vs=\n[@vs]
-.if \n[D]>3 .tm INIT: l:\n[.l] p:\n[.p] o:\n[.o]
-.\"
-.\" Page length
-.if r L \{\
-. ie n .pl \n[L]u
-. el .pl \n[L]u
-.\}
-.nr @pl \n[.p]
-.\"
-.\" page width
-.ie r W \{\
-. ie n .ll \n[W]u
-. el .ll \n[W]u
-.\}
-.el .ll 6i
-.nr @ll \n[.l]
-.nr @cur-ll \n[@ll]
-.lt \n[@ll]u
-.\"
-.\" page offset
-.ie r O .po \n[O]u
-.el \{\
-. ie n .po .75i
-. el .po .963i
-.\}
-.\"
-.nr @po \n[.o]
-.\"
-.\" non-zero if escape mechanism is turned off. Used by VERBON/OFF
-.nr @verbose-flag 0
-.\"---------------------------------------------
-.\" New variables
-.\"
-.\" Appendix name
-.ds App APPENDIX
-.\" print appendixheader, 0 == don't
-.nr Aph 1
-.\"
-.\" Current appendix text
-.ds Apptext
-.\" Controls the space before and after static displays if defined.
-.\" Lsp is used otherwise
-.\" .nr Dsp 1v
-.\"
-.\" Add a dot after level one heading number if >0
-.nr H1dot 1
-.\"
-.\" header prespace level. If level <= Hps, then two lines will be printed
-.\" before the header instead of one.
-.nr Hps 1
-.\"
-.\" These variables controls the number of lines preceding .H.
-.\" Hps1 is the number of lines when level > Hps
-.nr Hps1 0.5v
-.if n .nr Hps1 1v
-.\"
-.\" Hps2 is the number of lines when level <= Hps
-.nr Hps2 1v
-.if n .nr Hps2 2v
-.\"
-.\" Hss is the number of lines (Lsp) after the header.
-.nr Hss 1
-.\"
-.\" H1txt will be updated by .H and .HU, containing the heading text.
-.\" Will also be updated in table of contents & friends
-.\"
-.ds H1txt
-.\"
-.\" header text for the index
-.ds Index INDEX
-.\" command to sort the index
-.ds Indcmd sort
-.\"
-.\" flag for mkindex
-.if !r Idxf .nr Idxf 0
-.\" Change these in the national configuration file
-.ds Lifg Figure
-.ds Litb TABLE
-.ds Liex Exhibit
-.ds Liec Equation
-.ds Licon CONTENTS
-.\" Flag for space between mark and prefix 1==space, 0==no space
-.\" Can also be controlled by using '.LI mark 2'
-.nr Limsp 1
-.\"
-.\" Lsp controls the height of an empty line. Normally 0.5v
-.\" Normally used for nroff compatibility.
-.nr Lsp 0.5v
-.if n .nr Lsp 1v
-.ds MO1 January
-.ds MO2 February
-.ds MO3 March
-.ds MO4 April
-.ds MO5 May
-.ds MO6 June
-.ds MO7 July
-.ds MO8 August
-.ds MO9 September
-.ds MO10 October
-.ds MO11 November
-.ds MO12 December
-.\" for GETR
-.ds Qrf See chapter \\*[Qrfh], page \\*[Qrfp].
-.\"
-.\" header- and footer-size will only change to the current
-.\" if Pgps is > 0.
-.nr Pgps 1
-.\"
-.\" section-page if Sectp > 0
-.nr Sectp 0
-.if (\n[N]=3):(\n[N]=5) \{\
-. nr Sectp 1
-. nr Ej 1
-.\}
-.\" section-figure if Sectf > 0
-.nr Sectf 0
-.if \n[N]=5 .nr Sectf 1
-.\"
-.\" argument to .nm in .VERBON.
-.ds Verbnm "1
-.\" indent for VERBON
-.nr Verbin 5n
-.\"
-.\" Letter section
-.\" Formal closing (.FC)
-.ds Letfc Yours very truly,
-.\"
-.\" Approval line
-.ds Letapp APPROVED:
-.\" Approval date-string
-.ds Letdate Date
-.\"
-.ds LetCN CONFIDENTIAL\" Confidential default
-.ds LetSA To Whom It May Concern:\" Salutation default
-.ds LetAT ATTENTION:\" Attention string
-.ds LetSJ SUBJECT:\" Subject string
-.ds LetRN In reference to:\" Reference string
-.\"
-.\" Copy to (.NS)
-.ds Letnsdef 0
-.ds Letns!copy Copy \" space!
-.ds Letns!to " to
-.ds Letns!0 Copy to
-.ds Letns!1 Copy (with att.) to
-.ds Letns!2 Copy (without att.) to
-.ds Letns!3 Att.
-.ds Letns!4 Atts.
-.ds Letns!5 Enc.
-.ds Letns!6 Encs.
-.ds Letns!7 Under separate cover
-.ds Letns!8 Letter to
-.ds Letns!9 Memorandum to
-.ds Letns!10 Copy (with atts.) to
-.ds Letns!11 Copy (without atts.) to
-.ds Letns!12 Abstract Only to
-.ds Letns!13 Complete Memorandum to
-.ds Letns!14 CC:
-.\"
-.\" Text printed below the footer. Controlled by @copy_type (C).
-.ds Pg_type!0
-.ds Pg_type!1 OFFICIAL FILE COPY
-.ds Pg_type!2 DATE FILE COPY
-.ds Pg_type!3 D\ R\ A\ F\ T
-.ds Pg_type!4 D\ R\ A\ F\ T
-.\" Max lines in return address
-.nr Letwam 14
-.\"--------------------------
-.\" test for mgm macro. This can be used if the text must test
-.\" what macros is used.
-.nr .mgm 1
-.\"
-.\" Due to security problems with groff I had to rewrite
-.\" the reference system. It's not as elegant as before, you
-.\" have to run groff with '-z -rRef=1' and put stderr into the filename
-.\" for .INITR
-.\"
-.\" Output references to stderr if non-zero
-.ie !r Ref \{\
-. nr Ref 0
-.\}
-.el .warn 0
-.\"
-.\"---------------------------------------------
-.\" set local variables.
-.ie d @language .mso mm/\*[@language]_locale
-.el .mso mm/locale
-.\"---------------------------------------------
-.if \n[D] .tm Groff mm, version \*[RE].
-.\" ####### module init ######
-.\" reset all things
-.de init@reset
-.ie \\n[misc@adjust] 'ad
-.el 'na
-.ie \\n[Hy] 'hy 14
-.el 'nh
-'in 0
-'ti 0
-.ps \\n[@ps]u
-.vs \\n[@vs]u
-..
-.de @warning
-'tm WARNING:(\\n[.F]) input line \\n[.c]:\\$*
-.if \\n[D] .backtrace
-..
-.de @error
-'tm ******************
-'tm ERROR:(\\n[.F]) input line \\n[.c]:\\$*
-.if \\n[D] .backtrace
-'tm ******************
-.ab "Input aborted, syntax error"
-..
-.de misc@toupper
-.tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-.br
-\\$1
-.tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-.br
-..
-.\" ####### module debug #################################
-.de debug
-'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s],\\n[.ps] \
-in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
-..
-.de debug-all
-.nr debug*n 1n
-.nr debug*m 1m
-'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s] in=\\n[.i]\
- ad=\\n[.j] fi=\\n[.u] pl=\\n[.p] page=\\n[%] .o=\\n[.o]
-'tm _______ .d=\\n[.d] .f=\\n[.f] .h=\\n[.h] .k=\\n[.k] .n=\\n[.n]\
- .p=\\n[.p] .t=\\n[.t] .z=\\n[.z] nl=\\n[nl] dn=\\n[dn] n=\\n[debug*n]
-..
-.\" ####### module par #################################
-.nr par@ind-flag 1 \" indent on following P if Pt=2
-.nr hd*last-pos -1
-.nr hd*last-hsize -1
-.nr par*number 0 1
-.af par*number 01
-.nr par*number2 0 1
-.af par*number2 01
-.nr par*num-count 0 1
-.af par*num-count 01
-.\" reset numbered paragraphs, arg1 = headerlevel
-.de par@reset-num
-.if \\$1<3 .nr par*num-count 0
-.if (\\$1=1)&(\\n[Np]=1) .nr par*number 0
-..
-.\"------------
-.\" paragraph
-.de P
-.\" skip P if previous heading
-.if \\n[D]>2 \{\
-. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos]
-. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize]
-.\}
-.if !((\\n[nl]=\\n[hd*last-pos]):(\\n[hd*last-hsize]=\\n[.k])) \{\
-. if \\n[D]>2 .tm Paragraph set ind-flag=1
-. nr par@ind-flag 1
-.\}
-.\" any collected unprinted text?
-.par@doit \\$*
-.if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
-..
-.\"------------
-.de nP
-.\" skip P if previous heading
-.if \\n[D]>2 \{\
-. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos]
-. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize]
-.\}
-.if !((\\n[nl]=\\n[hd*last-pos]):(\\n[hd*last-hsize]=\\n[.k])) \{\
-. if \\n[D]>2 .tm Paragraph set ind-flag=1
-. nr par@ind-flag 1
-.\}
-.par@doit \\$*
-\\n[H2].\\n+[par*number2]\ \ \c
-.nr par@ind-flag 1
-..
-.\"------------
-.de par@doit
-.SP (u;\\n[Ps]*\\n[Lsp])
-.ie \\n[.$] \{\
-. if \\$1=1 .ti +\\n[Pi]n
-.\}
-.el \{\
-. if \\n[Pt]=1 .ti +\\n[Pi]n
-. if (\\n[Pt]=2)&\\n[par@ind-flag] .ti +\\n[Pi]n
-.\}
-..
-.\" ####### module line #######################################
-.de SP
-.br
-.if !r line*lp\\n[.z] .nr line*lp\\n[.z] 0
-.if !r line*ac\\n[.z] .nr line*ac\\n[.z] 0
-.ie \\n[.$] .nr line*temp (v;\\$1)
-.el .nr line*temp 1v
-.\"
-.ie \\n[line*lp\\n[.z]]=\\n[.d] \{\
-. \" go here if no output since the last .SP
-. nr line*output \\n[line*temp]-\\n[line*ac\\n[.z]]
-. if \\n[line*output]<0 .nr line*output 0
-. nr line*ac\\n[.z] +\\n[line*output]
-.\}
-.el \{\
-. nr line*ac\\n[.z] \\n[line*temp]
-. nr line*output \\n[line*temp]
-. \" no extra space in the beginning of a page
-. if (\\n[.d]<0):(\\n[pg*head-mark]=\\n[.d]) .nr line*output 0
-.\}
-.if \\n[line*output] .sp \\n[line*output]u
-.nr line*lp\\n[.z] \\n[.d]
-..
-.\" ######## module misc ###############
-.nr misc@adjust 14
-.de SA
-.if \\n[.$] \{\
-. if \\$1-1 .@error "SA: bad arg: \\$1"
-. nr misc@adjust 0\\$1
-.\}
-.ie \\n[misc@adjust] 'ad
-.el 'na
-..
-.\"-------------
-.\" switch environment, keep all important settings.
-.de misc@ev-keep
-.nr misc*ll \\n[.l]
-.ev \\$1
-.ll \\n[misc*ll]u
-.lt \\n[misc*ll]u
-..
-.\"-------------
-.\" .misc@push stackname value
-.de misc@push
-.ie d misc*st-\\$1 .ds misc*st-\\$1 \\$2 \\*[misc*st-\\$1]
-.el .ds misc*st-\\$1 \\$2
-..
-.\"-------------
-.\" .misc@pop stackname
-.\" value returned in the string misc*pop
-.de misc@pop
-.misc@pop-set misc*st-\\$1 \\*[misc*st-\\$1]
-..
-.\"-------------
-.de misc@pop-set
-.ds misc*st-name \\$1
-.shift
-.if \\n[.$]<1 .@error "stack \\*[misc*st-name] empty"
-.ds misc*pop \\$1
-.shift
-.ds \\*[misc*st-name] \\$*
-..
-.\"-------------
-.\" .misc@pop-nr stackname varname
-.de misc@pop-nr
-.misc@pop \\$1
-.nr \\$2 \\*[misc*pop]
-..
-.\"-------------
-.\" .misc@pop-ds stackname varname
-.de misc@pop-ds
-.misc@pop \\$1
-.ds \\$2 \\*[misc*pop]
-..
-.\"-----------
-.\" reset tabs
-.de TAB
-.ta T 5n
-..
-.\"-------------
-.\" .PGFORM linelength [ pagelength [ pageoffset [1]]]
-.de PGFORM
-.\" Break here to avoid problems with new linesetting of the previous line.
-.\" Hope this doesn't break anything else :-)
-.\" Don't break if arg_4 is a '1'.
-.if \\n[D]>2 .tm PGFORM: \\$*
-.if ''\\$4' .br
-.if \\n[D]>3 .tm PGFORM: IN l:\\n[.l] p:\\n[.p] o:\\n[.o]
-.ie !''\\$1' \{\
-. ll \\$1
-. nr @ll \\n[.l]
-. nr @cur-ll \\n[@ll]
-. lt \\n[@ll]u
-.\}
-.el \{\
-. ll \\n[@ll]u
-. lt \\n[@ll]u
-.\}
-.\"
-.ie !''\\$2' \{\
-. pl \\$2
-. nr @pl \\n[.p]
-.\}
-.el .pl \\n[@pl]u
-.\"
-.ie !''\\$3' \{\
-. po \\$3
-. nr @po \\n[.o]
-.\}
-.el .po \\n[@po]u
-.if \\n[D]>3 .tm PGFORM: OUT l:\\n[.l] p:\\n[.p] o:\\n[.o]
-.if \\n[D]>2 .tm PGFORM: ll=\\n[@ll], pl=\\n[@pl], po=\\n[@po]
-'in 0
-.pg@move-trap
-.if \\n[D]>2 \{\
-. tm Traps:
-. ptr
-.\}
-..
-.\"-------------
-.\" .MOVE y [[x] linelength]
-.\" move to line y, indent to x
-.de MOVE
-.if !\\n[.$] .@error "MOVE y [x]: no arguments"
-.if \\n[nl]<0 \c
-.\" move to Y-pos
-.sp |(v;\\$1)
-.\" calc linelength
-.ie \\n[.$]>2 .nr pg*i (n;\\$3)
-.el \{\
-. ie \\n[.$]>1 .nr pg*i (n;\\n[@ll]u-\\$2)
-. el .nr pg*i \\n[@ll]u
-.\}
-.\" move to X-pos, if any
-.if !''\\$2' .po \\$2
-.\" set linelength
-.ll \\n[pg*i]u
-..
-.\"-------------
-.de SM
-.if !\\n[.$] .@error "SM: no arguments"
-.if \\n[.$]=1 \s-1\\$1\s0
-.if \\n[.$]=2 \s-1\\$1\s0\\$2
-.if \\n[.$]=3 \\$1\s-1\\$2\s0\\$3
-..
-.\"-------------
-.nr misc*S-ps \n[@ps]
-.nr misc*S-vs \n[@vs]
-.nr misc*S-ps1 \n[@ps]
-.nr misc*S-vs1 \n[@vs]
-.ds misc*a
-.ds misc*b
-.de S
-.ie !\\n[.$] \{\
-. ds misc*a P
-. ds misc*b P
-.\}
-.el \{\
-. ie \\n[.$]=1 .ds misc*b D
-. el \{\
-. ie \w@\\$2@=0 .ds misc*b C
-. el .ds misc*b \\$2
-. \}
-. ie \w@\\$1@=0 .ds misc*a C
-. el .ds misc*a \\$1
-.\}
-.\"
-.\" set point size
-.if !'\\*[misc*a]'C' \{\
-. ie '\\*[misc*a]'P' .ps \\n[misc*S-ps]u
-. el \{\
-. ie '\\*[misc*a]'D' .ps \\n[S]
-. el .ps \\*[misc*a]
-. if \\n[D]>2 .tm S: .ps \\*[misc*a]
-. \}
-.\}
-.\"
-.\" set vertical spacing
-.if !'\\*[misc*b]'C' \{\
-. ie '\\*[misc*b]'P' .vs \\n[misc*S-vs]u
-. el \{\
-. ie '\\*[misc*b]'D' .vs \\n[.ps]s+2p
-. el .vs \\*[misc*b]
-. if \\n[D]>2 .tm S: .vs \\*[misc*b]
-. \}
-.\}
-.nr @ps \\n[.ps]
-.nr @psu \\n[.ps]s
-.nr @vs \\n[.v]
-.nr @vsp \\n[.v]u/1p
-.nr @res 1i
-.\"
-.if \\n[D]>1 \{\
-. tmc "S(\\$*): ma:\\*[misc*a], mb:\\*[misc*b]
-. tm1 " => ps:\\n[.s]p (\\n[@psu]u), vs:\\n[@vsp]p (\\n[@vs]u) (res:\\n[@res])
-.\}
-.nr misc*S-ps \\n[misc*S-ps1]
-.nr misc*S-vs \\n[misc*S-vs1]
-.nr misc*S-ps1 \\n[@ps]
-.nr misc*S-vs1 \\n[@vs]
-.pg@move-trap
-..
-.\"------------
-.de HC
-.ev 0
-.hc \\$1
-.ev
-.ev 1
-.hc \\$1
-.ev
-.ev 2
-.hc \\$1
-.ev
-..
-.\"------------
-.de RD
-.di misc*rd
-'fl
-.rd \\$1\t
-.br
-.di
-.ie !''\\$3' \{\
-. di misc*rd2
-. ds \\$3 "\\*[misc*rd]
-. br
-. di
-.\}
-.if !''\\$2' .rn misc*rd \\$2
-.rm misc*rd misc*rd2
-..
-.\"------------
-.\" VERBON [flag [pointsize [font]]]
-.\" flag
-.\" bit function
-.\" 0 escape on
-.\" 1 add an empty line before verbose text
-.\" 2 add an empty line after verbose text
-.\" 3 numbered lines (controlled by the string Verbnm)
-.\" 4 indent text by the numbervariable Verbin.
-.de VERBON
-.br
-.nr misc*verb 0\\$1
-.if (0\\n[misc*verb]%4)/2 .SP \\n[Lsp]u
-.misc@ev-keep misc*verb-ev
-.nf
-.if (0\\n[misc*verb]%16)/8 .nm \\*[Verbnm]
-.ie !'\\$3'' .ft \\$3
-.el .ft CR
-.ie 0\\$2 \{\
-. ss \\$2
-. ps \\$2
-. vs \\$2
-.\}
-.el .ss 12
-.ta T 8u*\w@n@u
-.if (0\\n[misc*verb]%32)/16 .in +\\n[Verbin]u
-.if 0\\n[misc*verb]%2 \{\
-. eo
-. nr @verbose-flag 1 \" tell pageheader to set ec/eo
-.\}
-..
-.de VERBOFF
-.ec
-.br
-.if (0\\n[misc*verb]%8)/4 .SP \\n[Lsp]u
-.if (0\\n[misc*verb]%16)/8 .nm
-.if (0\\n[misc*verb]%32)/16 .in
-.ev
-.nr @verbose-flag 0
-..
-.\" ######## module pict #################
-.nr pict*width 0
-.nr pict*height 0
-.nr pict*mode 0
-.nr pict*ind 0
-.nr pict*id 0 1
-.\" I assume that the number variable pict*id is the same
-.\" between two runs.
-.de PIC
-.br
-.nr pict*ind 0
-.nr pict*box 0
-.while \\n[.$]>0 \{\
-. if '-B'\\$1' \{\
-. nr pict*box 1
-. shift
-. continue
-. \}
-. if '-L'\\$1' \{\
-. nr pict*mode 0
-. shift
-. continue
-. \}
-. if '-R'\\$1' \{\
-. nr pict*mode 1
-. shift
-. continue
-. \}
-. if '-I'\\$1' \{\
-. nr pict*ind (m;\\$2)
-. nr pict*mode 2
-. shift 2
-. continue
-. \}
-. if '-C'\\$1' \{\
-. nr pict*mode 3
-. shift
-. continue
-. \}
-. ds pict*f \\$1
-. nr pict*id +1
-. shift
-. if \\n[.$]>0 \{\
-. nr pict*width (i;\\$1)
-. shift
-. \}
-. if \\n[.$]>0 \{\
-. nr pict*height (i;\\$1)
-. shift
-. \}
-.\}
-.\" let mmroff know the filename and id
-.if \\n[Ref]>0 \{\
-. tm .\\\\" PIC id \\n[pict*id]
-. tm .\\\\" PIC file \\*[pict*f]
-.\}
-.\" these are defined by mmroff in the second pass
-.if d pict*file!\\n[pict*id] \{\
-. ds pict*f \\*[pict*file!\\n[pict*id]]
-. nr pict*llx \\n[pict*llx!\\n[pict*id]]
-. nr pict*lly \\n[pict*lly!\\n[pict*id]]
-. nr pict*urx \\n[pict*urx!\\n[pict*id]]
-. nr pict*ury \\n[pict*ury!\\n[pict*id]]
-. \"
-. nr pict*w (p;\\n[pict*urx]-\\n[pict*llx])
-. if \\n[pict*w]<0 .nr pict*w 0-\\n[pict*w]
-. nr pict*h (p;\\n[pict*ury]-\\n[pict*lly])
-. if \\n[pict*h]<0 .nr pict*h 0-\\n[pict*h]
-. if \\n[pict*width]>0 \{\
-. nr pict*rs (u;1000*\\n[pict*width]/\\n[pict*w])
-. nr pict*w (u;\\n[pict*w]*\\n[pict*rs]/1000)
-. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000)
-. \}
-. if \\n[pict*height]>0 \{\
-. nr pict*rs (u;1000*\\n[pict*height]/\\n[pict*h])
-. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000)
-. \}
-. if '0'\\n[pict*mode]' \{\
-. nr pict*in \\n[.i]u
-. \}
-. if '1'\\n[pict*mode]' \{\
-. nr pict*in (u;\\n[.l]-\\n[.i]-\\n[pict*w])
-. \}
-. if '2'\\n[pict*mode]' \{\
-. nr pict*in \\n[pict*ind]u
-. \}
-. if '3'\\n[pict*mode]' \{\
-. nr pict*in (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2)
-. \}
-. ds pict*h "
-. if \\n[pict*h]>0 .ds pict*h \\n[pict*h]
-. \"
-. ne \\n[pict*h]u-1v
-. \"
-. \" these lines are copied and modified from tmac.pspic.
-. \" Originally written by James Clark
-. br
-. ie \\n[pict*box]>0 \{\
-\v'-1v'\h'\\n[pict*in]u'\
-\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\
-\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \
-\\n[pict*llx] \\n[pict*lly] \
-\\n[pict*urx] \\n[pict*ury] \
-\\n[pict*w] \\n[pict*h]'
-.\}
-. el \{\
-\v'-1v'\h'\\n[pict*in]u'\
-\X'ps: invis'\
-\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\
-\X'ps: endinvis'\
-\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \
-\\n[pict*llx] \\n[pict*lly] \
-\\n[pict*urx] \\n[pict*ury] \
-\\n[pict*w] \\n[pict*h]'
-. \}
-. br
-. sp \\n[pict*h]u-1v
-.\}
-..
-.\" external picture
-.\" -L left adjust
-.de EPIC
-.if \\n[.$]<2 .@error "EPIC: Not enough arguments"
-.nr pict*adj 0 \" centered
-.if '\\$1'-L' \{\
-. shift 1 \" left adjust
-. nr pict*adj 1
-.\}
-.if \\n[nl]<0 \&
-.nr pict*w \\$1
-.nr pict*h \\$2
-.ds pict*name "External picture
-.if !''$3' .ds pict*name \\$3
-.ne \\n[pict*h]u
-.sp \\n[pict*h]u-1v
-.nr pict*ind 0
-.if !\\n[pict*adj] .nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2)
-.mk
-.in +\\n[pict*ind]u
-\D'l \\n[pict*w]u 0'\
-\D'l 0 -\\n[pict*h]u'\
-\D'l -\\n[pict*w]u 0'\
-\D'l 0 \\n[pict*h]u'\
-\v'-(u;\\n[pict*h]/2)'\
-\h'(u;(\\n[pict*w]-\w'\\*[pict*name]'/2))'\\*[pict*name]
-.in
-.rt
-.sp 1v
-..
-.\" ######## module acc #################
-.\"-----------
-.\" accents. These are copied from mgs, written by James Clark.
-.de acc@over-def
-.ds \\$1 \Z'\v'(u;\w'x'*0+\En[rst]-\En[.cht])'\
-\h'(u;-\En[skw]+(-\En[.w]-\w'\\$2'/2)+\En[.csk])'\\$2'
-..
-.de acc@under-def
-.ds \\$1 \Z'\v'\En[.cdp]u'\h'(u;-\En[.w]-\w'\\$2'/2)'\\$2'
-..
-.acc@over-def ` \`
-.acc@over-def ' \'
-.acc@over-def ^ ^
-.acc@over-def ~ ~
-.acc@over-def : \(ad
-.acc@over-def ; \(ad
-.acc@under-def , \(ac
-.\" ######## module uni #################
-.\" unimplemented macros
-.de OK
-'tm "OK: not implemented"
-..
-.de PM
-'tm "PM: not implemented"
-..
-.\" ######## module hd #################
-.\" support for usermacro
-.nr hd*h1-page 1 \" last page-number for level 1 header.
-.nr hd*htype 0
-.ds hd*sect-pg
-.ds hd*mark
-.ds hd*suf-space
-.nr hd*need 0
-.aln ;0 hd*htype
-.als }0 hd*mark
-.als }2 hd*suf-space
-.aln ;3 hd*need
-.\"-------------
-.\" .hd@split varable index name val1 val2 ...
-.de hd@split
-.if \\$2>(\\n[.$]-3) .@error "\\$3 must have at least \\$2 values (\\*[\\$3]).
-.nr hd*sp-tmp \\$2+3
-.ds \\$1 \\$[\\n[hd*sp-tmp]]
-..
-.de HU
-.H 0 "\\$1"
-..
-.\"-------------
-.de H
-.if !r hd*cur-bline .nr hd*cur-bline \\n[nl]
-.br
-.df@print-float 2\" $$$ could be wrong...
-.\" terminate all lists
-.LC
-.init@reset
-.nr hd*level 0\\$1
-.nr hd*arg1 0\\$1
-.if !\\n[hd*level] .nr hd*level \\n[Hu]
-.\"
-.\" clear lower counters
-.nr hd*i 1 1
-.while \\n+[hd*i]<15 .if \\n[hd*level]<\\n[hd*i] .nr H\\n[hd*i] 0 1
-.\"
-.\" save last text for use in TP
-.if \\n[hd*level]=1 .ds H1txt \\$2\\$3
-.\"
-.\" This is a little fix to be able to get correct H1 heading number
-.\" in page headers. Special attention was needed when other formats are used.
-.ie !''\\g[H1]' \{\
-. ds hd*format \\g[H1]
-. af H1 0
-. nr H1h \\n[H1] 1
-. af H1 \\*[hd*format]
-.\}
-.el .nr H1h \\n[H1] 1
-.if \\n[hd*level]=1 .nr H1h +1
-.\"
-.\" Check if it's time for new page. Only if text has
-.\" appeared before.
-.if \\n[Ej]&(\\n[Ej]>=\\n[hd*level])&(\\n[nl]>\\n[hd*cur-bline]) .pg@next-page
-.\"
-.\" increment current counter
-.nr H\\n[hd*level] +1
-.\"
-.\" update pagenumber if section-page is used
-.if (\\n[hd*level]=1)&(\\n[Sectp]>0) .hd@set-page 1
-.\"
-.\" hd*mark is the text written to the left of the header.
-.ds hd*mark \\n[H1].
-.\"
-.if \\n[hd*level]>1 .as hd*mark \\n[H2]
-.\"
-.nr hd*i 2 1
-.while \\n+[hd*i]<15 .if \\n[hd*level]>(\\n[hd*i]-1) .as hd*mark .\\n[H\\n[hd*i]]
-.if \\n[Ht] .ds hd*mark \\n[H\\n[hd*level]].
-.\"
-.\" special case, no dot after level one heading if not H1dot true
-.if (\\n[hd*level]=1)&(\\n[H1dot]=0) .ds hd*mark \\n[H1]
-.\"
-.as hd*mark \ \ \" add spaces between mark and heading
-.if !\\n[hd*arg1] .ds hd*mark\" no mark for unnumbered
-.\"
-.if \\n[D]>1 .tm At header \\*[hd*mark] "\\$2"
-.nr hd*htype 0 \" hd*htype = check break and space
-. \" 0 = run-in, 1 = break only, 2 = space
-.if \\n[hd*level]<=\\n[Hb] .nr hd*htype 1
-.if \\n[hd*level]<=\\n[Hs] .nr hd*htype 2
-. \" two spaces if hd*htype == 0
-.ie (\\n[hd*htype]=0)&(\w@\\$2@) .ds hd*suf-space " \"
-.el .ds hd*suf-space
-.nr hd*need 2v \" hd*need = header need space
-.\"---------- user macro HX ------------
-.\" User exit macro to override numbering.
-.\" May change hd*mark (}0), hd*suf-space (}2) and hd*need (;3)
-.\" Can also change Hps1/2.
-.if d HX .HX \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
-.\"--------------------------------------
-.\" pre-space
-.ie \\n[hd*level]<=\\n[Hps] .SP (u;\\n[Hps2])
-.el .SP (u;\\n[Hps1])
-.\"
-.par@reset-num \\n[hd*level]\" reset numbered paragraph
-.\" start diversion to measure size of header
-.di hd*div
-\\*[hd*mark]\\$2\\$3\\*[hd*suf-space]
-.br
-.di
-.rm hd*div
-.if \\n[hd*htype] .na \" no adjust if run-in
-.if \\n[hd*htype]<2 .nr hd*need +\\n[Lsp]u \" add some extra space
-.ne \\n[hd*need]u+\\n[dn]u+.5p-1v \" this is the needed space for a header
-.\"
-.\" size and font calculations
-.hd@split hd*font \\n[hd*level] HF \\*[HF]\" get font for this level
-.ft \\*[hd*font]\" set new font
-.hd@split hd*new-ps \\n[hd*level] HP \\*[HP]\" get point size
-.ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\
-. if \\n[hd*htype] \{\
-. if '\\*[hd*font]'3' \{\
-. ps -1
-. vs -1
-. \}
-. if '\\*[hd*font]'B' \{\
-. ps -1
-. vs -1
-. \}
-. \}
-.\}
-.el \{\
-. ps \\*[hd*new-ps]
-. vs \\*[hd*new-ps]+2
-.\}
-.\"
-.\"---------- user macro HY -------------
-.\" user macro to reset indents
-.if d HY .HY \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
-.DEVTAG-NH \\n[hd*level] \" HTML: mark beginning of heading
-.\"--------------------------------------
-.nr hd*mark-size \w@\\*[hd*mark]@
-.if (\\n[hd*level]<=\\n[Hc])&\\n[hd*htype] .ce\" center if level<=Hc
-.\"
-.\" finally, output the header
-\\*[hd*mark]\&\c
-.\" and the rest of the header
-.ie \\n[hd*htype] \{\
-\\$2\\$3
-. br
-.\}
-.el \\$2\\$3\\*[hd*suf-space]\&\c
-.ft 1
-.\" restore pointsize and vertical size.
-.ps \\n[@ps]u
-.vs \\n[@vs]u
-.\"
-.\" table of contents
-.if (\\n[hd*level]<=\\n[Cl])&\w@\\$2@ .toc@entry \\n[hd*level] "\\$2"
-.\" set adjust to previous value
-.SA
-.\" do break or space
-.if \\n[hd*htype] .br
-.if \\n[hd*htype]>1 .SP (u;\\n[Lsp]*\\n[Hss])
-.if \\n[hd*htype] \{\
-. \" indent if Hi=1 and Pt=1
-. if (\\n[Hi]=1)&(\\n[Pt]=1) .ti +\\n[Pi]n
-. \" indent size of mark if Hi=2
-. if \\n[hd*htype]&(\\n[Hi]>1) .ti +\\n[hd*mark-size]u
-.\}
-.nr par@ind-flag 0 \" no indent on .P if Pt=2
-.\"
-.\" check if it is time to reset footnotes
-.if (\\n[hd*level]=1)&\\n[ft*clear-at-header] .nr ft*nr 0 1
-.\"
-.\" check if it is time to reset indexes
-.if (\\n[hd*level]=1)&\\n[Sectf] \{\
-. nr lix*fg-nr 0 1
-. nr lix*tb-nr 0 1
-. nr lix*ec-nr 0 1
-. nr lix*ex-nr 0 1
-.\}
-.\"---------- user macro HZ ----------
-.if d HZ .HZ \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
-.nr hd*last-pos \\n[nl]
-.nr hd*last-hsize \\n[.k]
-.nr par@ind-flag 0
-.DEVTAG-EO-H \" HTML: end of heading
-..
-.\"--------
-.de HM
-.nr hd*i 0 1
-.while \\n+[hd*i]<15 .af H\\n[hd*i] \\$[\\n[hd*i]] 1
-..
-.\"----------------------
-.\" set page-nr, called from header
-.\"
-.de hd@set-page
-.\"
-.ie \\n[.$]>0 .nr P \\$1
-.el .nr P +1
-.\" Set section-page-string
-.ds hd*sect-pg \\n[H1]-\\n[P]
-.if \\n[Sectp]>1 .if '\\n[H1]'0' .ds hd*sect-pg "
-..
-.\"########### module pg ####################
-.\" set end of text trap
-.wh 0 pg@header
-.em pg@end-of-text
-.\"
-.ds pg*header ''- \\nP -''
-.ds pg*footer
-.if \n[N]=4 .ds pg*header ''''
-.if (\n[N]=3):(\n[N]=5) \{\
-. ds pg*header ''''
-. ds pg*footer ''\\*[hd*sect-pg]''
-.\}
-.ds pg*even-footer
-.ds pg*odd-footer
-.ds pg*even-header
-.ds pg*odd-header
-.\"
-.nr pg*top-margin 0
-.nr pg*foot-margin 0
-.nr pg*block-size 0
-.nr pg*footer-size 5v\" 1v+footer+even/odd footer+2v
-.nr pg*header-size 7v\" 3v+header+even/odd header+2v
-.nr pg*extra-footer-size 0
-.nr pg*extra-header-size 0
-.nr ft*note-size 0
-.nr pg*cur-column 0
-.nr pg*cols-per-page 1
-.nr pg*cur-po \n[@po]
-.nr pg*head-mark 0
-.\"
-.nr pg*ps \n[@ps]
-.nr pg*vs \n[@vs]
-.\"-------------------------
-.\" footer TRAPS: set, enable and disable
-.de pg@set-new-trap
-.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u)
-.\"
-.if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap]
-.\"
-.\" last-pos points to the position of the footer and bottom
-.\" block below foot-notes.
-.nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u)
-.if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*last-pos]
-..
-.de pg@enable-trap
-.\" Disable in HTML mode
-.if !'\*[.T]'html' \{\
-.wh \\n[pg*foot-trap]u pg@footer
-.if \\n[D]>2 .tm pg@enable-trap .t=\\n[.t] nl=\\n[nl]
-.if \\n[D]>2 .ptr
-.\}
-..
-.de pg@disable-trap
-.ch pg@footer
-..
-.\" move to new trap (if changed).
-.de pg@move-trap
-.pg@disable-trap
-.pg@set-new-trap
-.pg@enable-trap
-..
-.de pg@enable-top-trap
-.\" set trap for pageheader.
-.nr pg*top-enabled 1
-..
-.de pg@disable-top-trap
-.\" remove trap for pageheader.
-.nr pg*top-enabled 0
-..
-.\" no header on the next page
-.de PGNH
-.nr pg*top-enabled (-1)
-..
-.\" set first trap for pagefooter
-.pg@enable-top-trap
-.pg@set-new-trap
-.pg@enable-trap
-.\"-------------------------
-.\" stop output and begin on next page. Fix footnotes and all that.
-.de pg@next-page
-.\".debug next-page
-.ne 999i \" activate trap
-.\" .pg@footer
-..
-.\"-------------------------
-.\" support for PX, TP and EOP.
-.als }t pg*header
-.als }e pg*even-header
-.als }o pg*odd-header
-.als TPh pg*header
-.als TPeh pg*even-header
-.als TPoh pg*odd-header
-.\"
-.als EOPf pg*footer
-.als EOPef pg*even-footer
-.als EOPof pg*odd-footer
-.\"------------------------------------------------------------
-.\" HEADER
-.de pg@header
-.\" Disable in HTML mode
-.if !'\*[.T]'html' \{\
-.if \\n[D]>1 .tm Page# \\n[%] (\\n[.F]:\\n[c.])
-.\" check if Hy has been changed
-.ie \\n[Hy] 'hy 14
-.el 'nh
-.if \\n[Idxf] \{\
-.tl '<pagenr\ \\n[%]>'''
-.\}
-.\" assign current page-number to P
-.hd@set-page
-.\" reset spacing
-.nr line*lp\\n[.z] 0
-.nr line*ac\\n[.z] 0
-.\"
-.\" suppress pageheader if pagenumber == 1 and N == [124]
-.if \\n[pg*top-enabled] \{\
-.\" must be fixed!!
-.\". pg@disable-top-trap
-. if \\n[pg*extra-header-size] 'sp \\n[pg*extra-header-size]u
-. if \\n[pg*top-margin] 'sp \\n[pg*top-margin]u
-. ev pg*tl-ev
-. pg@set-env
-. ie d let@header .let@header
-. el \{\
-. ie d TP .TP
-. el \{\
-' sp 3
-. ie ((\\n[%]=1)&((\\n[N]=1):(\\n[N]=2))) .sp
-. el .tl \\*[pg*header]
-. ie o .tl \\*[pg*odd-header]
-. el .tl \\*[pg*even-header]
-' sp 2
-. \}
-. \}
-. ev
-. \" why no-space??
-. if d PX \{\
-. ns
-. PX
-. rs
-. \}
-. \" check for pending footnotes
-. ft@check-old
-. \"
-. \" back to normal text processing
-. pg@enable-trap
-. \" mark for multicolumn
-. nr pg*head-mark \\n[nl]u
-. \" reset NCOL pointer at each new page.
-. nr pg*last-ncol 0
-. \" set multicolumn
-. \"
-. pg@set-po
-. \" print floating displays
-. df@print-float 4
-. tbl@top-hook
-. ns
-.\}
-.if \\n[pg*top-enabled]<0 .nr pg*top-enabled 1
-.nr hd*cur-bline \\n[nl] \" .H needs to know if output has occured
-.\}
-..
-.\"---------------------------------------------------------
-.\" FOOTER
-.de pg@footer
-.ec
-.if \\n[D]>2 .tm Footer# \\n[%] (\\n[.F]:\\n[c.]) nl=\\n[nl]
-.pg@disable-trap
-.\".debug footer
-.tbl@bottom-hook
-.\" increment pageoffset for MC
-.\" move to the exact start of footer.
-'sp |\\n[pg*foot-trap]u+1v
-.\"
-.if \\n[D]>3 .tm FOOTER after .sp, nl=\\n[nl]
-.\" print footnotes
-.if d ft*div .ft@print
-.\"
-.pg@inc-po
-.if !\\n[pg*cur-column] .pg@print-footer
-.\" next column
-.pg@set-po
-.pg@enable-trap
-.if \\n[@verbose-flag] .eo \" to help VERBON/VERBOFF
-..
-.\"-------------------------
-.de pg@print-footer
-.\" jump to the position just below the foot-notes.
-'sp |\\n[pg*last-pos]u+1v
-.if \\n[D]>3 .tm print-footer nl=\\n[nl]
-.\" check if there are any bottom block
-.if d pg*block-div .pg@block
-.\"
-.\" print the footer and eject new page
-.ev pg*tl-ev
-.pg@set-env
-.\" user defined end-of-page macro
-.ie d EOP .EOP
-.el \{\
-. ie o .tl \\*[pg*odd-footer]
-. el .tl \\*[pg*even-footer]
-. ie (\\n[%]=1)&(\\n[N]=1) .tl \\*[pg*header]
-. el .tl \\*[pg*footer]
-. tl ''\\*[Pg_type!\\n[@copy_type]]''
-.\}
-.ev
-.\" be sure that floating displays and footnotes will be
-.\" printed at the end of the document.
-.ie (\\n[df*fnr]>=\\n[df*o-fnr]):\\n[ft*exist] \{\
-. ev ne
-' bp
-. ev
-.\}
-.el 'bp
-..
-.\"-------------------------
-.\"
-.\" Initialize the title environment
-.de pg@set-env
-'na
-'nh
-'in 0
-'ti 0
-.ie \\n[Pgps] \{\
-. ps \\n[@ps]u
-. vs \\n[@vs]u
-.\}
-.el \{\
-. ps \\n[pg*ps]u
-. vs \\n[pg*vs]u
-.\}
-.lt \\n[@ll]u
-.ll \\n[@ll]u
-..
-.\"-------------------------
-.de PH
-.ds pg*header "\\$1
-.pg@set-new-size
-..
-.de PF
-.ds pg*footer "\\$1
-.pg@set-new-size
-..
-.de OH
-.ds pg*odd-header "\\$1
-.pg@set-new-size
-..
-.de EH
-.ds pg*even-header "\\$1
-.pg@set-new-size
-..
-.de OF
-.ds pg*odd-footer "\\$1
-.pg@set-new-size
-..
-.de EF
-.ds pg*even-footer "\\$1
-.pg@set-new-size
-..
-.de pg@clear-hd
-.ds pg*even-header
-.ds pg*odd-header
-.ds pg*header
-..
-.de pg@clear-ft
-.ds pg*even-footer
-.ds pg*odd-footer
-.ds pg*footer
-..
-.de pg@set-new-size
-.nr pg*ps \\n[@ps]
-.nr pg*vs \\n[@vs]
-.pg@move-trap
-..
-.\"-------------------------
-.\" end of page processing
-.de pg@footnotes
-.\".debug footnotes
-.\" output footnotes. set trap for block
-.\"
-..
-.\"-------------------------
-.\" print bottom block
-.de pg@block
-.ev pg*block-ev
-'nf
-'in 0
-.ll 100i
-.pg*block-div
-.br
-.ev
-..
-.\"-------------------------
-.\" define bottom block
-.de BS
-.misc@ev-keep pg*block-ev
-.init@reset
-.br
-.di pg*block-div
-..
-.\"-------------------------
-.de BE
-.br
-.di
-.nr pg*block-size \\n[dn]u
-.ev
-.pg@move-trap
-..
-.\"-------------------------
-.\" print out all pending text
-.de pg@end-of-text
-.if \\n[D]>2 .tm ---------- End of text processing ----------------
-.df@eot-print
-.ref@eot-print
-..
-.\"-------------------------
-.\" set top and bottom margins
-.\" -T sets pg*footer-size and pg*header-size instead
-.de VM
-.ie '\\$1'-T' \{\
-. shift
-. if \\n[.$]=0 \{\
-. nr pg*footer-size 5v
-. nr pg*header-size 7v
-. \}
-. if \\n[.$]>0 .nr pg*header-size (v;\\$1)
-. if \\n[.$]>1 .nr pg*footer-size (v;\\$2)
-.\}
-.el \{\
-. if \\n[.$]=0 \{\
-. nr pg*extra-footer-size 0
-. nr pg*extra-header-size 0
-. \}
-. if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1)
-. if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2)
-. if \\n[D]>2 \{\
-. tm extra top \\n[pg*extra-footer-size]
-. tm extra bottom \\n[pg*extra-header-size]
-. \}
-.\}
-.pg@move-trap
-..
-.\"---------------------
-.\" multicolumn output.
-.de pg@set-po
-.if \\n[pg*cols-per-page]>1 \{\
-. ll \\n[pg*column-size]u
-.\}
-..
-.de pg@inc-po
-.if \\n[pg*cols-per-page]>1 \{\
-. ie \\n+[pg*cur-column]>=\\n[pg*cols-per-page] \{\
-. nr pg*cur-column 0 1
-. nr pg*cur-po \\n[@po]u
-. po \\n[@po]u
-. ll \\n[@ll]u
-. \}
-. el \{\
-. nr pg*cur-po +(\\n[pg*column-size]u+\\n[pg*column-sep]u)
-. po \\n[pg*cur-po]u
-' sp |\\n[pg*head-mark]u
-. tbl@top-hook
-. \}
-.\}
-..
-.\" An argument disables the page-break.
-.de 1C
-.br
-.if \\n[pg*cols-per-page]<=1 .@error "1C: multicolumn mode not active"
-.nr pg*cols-per-page 1
-.nr pg*column-sep 0
-.nr pg*column-size \\n[@ll]
-.nr pg*ncol-i \\n[pg*cur-column]\" temp variable
-.nr pg*cur-column 0 1
-.nr pg*cur-po \\n[@po]u
-.PGFORM
-.ie !'\\$1'1' .SK
-.el \{\
-. if d ft*div \{\
-. if \\n[pg*ncol-i]>0 \{\
-. @warning 1C: footnotes will be messy
-. \}
-. \}
-. if \\n[pg*last-ncol]>0 \{\
-. sp |\\n[pg*last-ncol]u
-. nr pg*last-ncol 0
-. \}
-.\}
-..
-.de 2C
-.br
-.nr pg*head-mark \\n[nl]u
-.if \\n[pg*cols-per-page]>1 .@error "2C: multicolumn mode already active"
-.nr pg*cols-per-page 2
-.nr pg*column-sep \\n[@ll]/15
-.nr pg*column-size (\\n[@ll]u*7)/15
-.nr pg*cur-column 0 1
-.nr pg*cur-po \\n[@po]u
-.ll \\n[pg*column-size]u
-.\" .lt \\n[pg*column-size]u
-..
-.\" MC column-size [ column-separation ]
-.de MC
-.br
-.nr pg*head-mark \\n[nl]u
-.if \\n[pg*cols-per-page]>1 .@error "MC: multicolumn mode already active"
-.ie ''\\$1' .nr pg*column-size \\n[.l]
-.el .nr pg*column-size (n;\\$1)
-.ie ''\\$2' .nr pg*column-sep \\n[pg*column-size]/15
-.el .nr pg*column-sep (n;\\$2)
-.\"
-.\" calculate the number of columns/page
-.nr pg*cols-per-page 0
-.nr pg*i \\n[pg*column-size]
-.while \\n[pg*i]<=\\n[.l] \{\
-. nr pg*cols-per-page \\n[pg*cols-per-page]+1
-. nr pg*i \\n[pg*i]+\\n[pg*column-sep]+\\n[pg*column-size]
-.\}
-.nr pg*cur-column 0 1
-.nr pg*cur-po \\n[@po]u
-.ll \\n[pg*column-size]u
-.\" .lt \\n[pg*column-size]u
-..
-.\" begin a new column
-.de NCOL
-.br
-.if \\n[nl]>\\n[pg*last-ncol] .nr pg*last-ncol \\n[nl]
-.pg@footer
-..
-.\" skip pages
-.de SK
-.br
-.bp
-.nr pg*i 0 1
-.\" force new page by writing something invisible.
-.while \\n+[pg*i]<=(0\\$1) \{\
-\&
-. bp
-.\}
-..
-.\"-------------------------------
-.\" MULB width1 space1 width2 space2 width3 space3 ...
-.de MULB
-.br
-.nr pg*i 0 1
-.nr pg*mul-x 0 1
-.nr pg*mul-ind 0
-.nr pg*mul-last 0
-.while \\n[.$] \{\
-. nr pg*mul!\\n+[pg*i] (n;0\\$1)
-. nr pg*muls!\\n[pg*i] (n;0\\$2)
-. shift 2
-.\}
-.nr pg*mul-max-col \\n[pg*i]
-.ds pg*mul-fam \\n[.fam]
-.nr pg*mul-font \\n[.f]
-.ev pg*mul-ev
-.ps \\n[@ps]u
-.vs \\n[@vs]u
-.fam \\*[pg*mul-fam]
-.ft \\n[pg*mul-font]
-.fi
-.hy 14
-.di pg*mul-div
-.MULN
-..
-.\"-----------
-.de MULN
-.if \\n[pg*mul-x]>=\\n[pg*mul-max-col] .@error "MULN: Undefined columnwidth"
-.br
-.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d]
-.rt +0
-.in \\n[pg*mul-ind]u
-.ll (u;\\n[.i]+\\n[pg*mul!\\n+[pg*mul-x]])u
-.nr pg*mul-ind +(u;\\n[pg*mul!\\n[pg*mul-x]]+\\n[pg*muls!\\n[pg*mul-x]])
-..
-.\"-----------
-.\" MULE
-.de MULE
-.br
-.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d]
-.di
-.ev
-.ne \\n[pg*mul-last]u
-.nf
-.mk
-.pg*mul-div
-.rt
-.sp \\n[pg*mul-last]u
-.fi
-..
-.\"-----------
-.de OP
-.br
-.ie o .if !\\n[pg*head-mark]=\\n[nl] \{\
-. bp +1
-. bp +1
-.\}
-.el .bp
-..
-.\"########### module footnotes ###################
-.nr ft*note-size 0
-.nr ft*busy 0
-.nr ft*nr 0 1
-.nr ft*wide 0
-.nr ft*hyphen 0\" hyphenation value
-.nr ft*adjust 1\" >0 if adjust true
-.nr ft*indent 1\" >0 if text indent true (not imp. $$$)
-.nr ft*just 0\" 0=left justification, 1=right (not imp. $$$)
-.nr ft*exist 0\" not zero if there are any footnotes to be printed
-.nr ft*clear-at-header 0\" >0 if footnotes should be reset at first level head.
-.\"
-.ds F \v'-.4m'\s-3\\n+[ft*nr]\s0\v'.4m'
-.\"
-.\"-----------------
-.\" init footnote environment
-.de ft@init
-.\" indentcontrol not implemented $$$
-.\" label justification not implemented $$$
-'in 0
-'fi
-.ie \\n[ft*adjust] 'ad
-.el 'na
-.ie \\n[ft*hyphen] 'hy 14
-.el 'hy 0
-.ll \\n[@cur-ll]u
-.lt \\n[@cur-ll]u
-.ps (p;\\n[@ps]u-2)
-.vs (p;\\n[@vs]u-1)
-..
-.\"-----------------
-.\" set footnote format
-.\" no support for two column processing (yet). $$$
-.de FD
-.if \\n[.$]=0 .@error "FD: bad arg \\$1"
-.ie \\n[.$]=2 .nr ft*clear-at-header 1
-.el .nr ft*clear-at-header 0
-.\"
-.if !'\\$1'' \{\
-. ie \\$1>11 .nr ft*format 0
-. el .nr ft*format \\$1
-. \"
-. nr ft*hyphen (\\n[ft*format]%2)*14
-. nr ft*format \\n[ft*format]/2
-. \"
-. nr ft*adjust 1-(\\n[ft*format]%2)
-. nr ft*format \\n[ft*format]/2
-. \"
-. nr ft*indent 1-(\\n[ft*format]%2)
-. nr ft*format \\n[ft*format]/2
-. \"
-. nr ft*just \\n[ft*format]%2
-.\}
-..
-.\"---------------
-.\" Footnote and display width control $$$
-.de WC
-.nr ft*i 0 1
-.while \\n+[ft*i]<=\\n[.$] \{\
-. ds ft*x \\$[\\n[ft*i]]
-. if '\\*[ft*x]'N' \{\
-. nr ft*wide 0
-. nr ft*first-fn 0
-. nr ds*wide 0
-. nr ds*float-break 1
-. \}
-. if '\\*[ft*x]'-WF' .nr ft*wide 0
-. if '\\*[ft*x]'WF' .nr ft*wide 1
-. if '\\*[ft*x]'-FF' .nr ft*first-fn 0
-. if '\\*[ft*x]'FF' .nr ft*first-fn 1
-. if '\\*[ft*x]'-WD' \{\
-. nr ds*wide 0
-. if r ft*df-save \{\
-. nr Df \\n[ft*df-save]
-. rm ft*df-save
-. \}
-. \}
-. if '\\*[ft*x]'WD' \{\
-. nr ds*wide 1
-. nr ft*df-save \\n[Df]
-. nr Df 4
-. \}
-. if '\\*[ft*x]'-FB' .nr ds*float-break 0
-. if '\\*[ft*x]'FB' .nr ds*float-break 1
-. if \\n[D]>1 .tm WC WF=\\n[ft*wide] WD=\\n[ds*wide]
-.\}
-..
-.\"-----------------
-.\" begin footnote
-.\" Change environment, switch to diversion and print the foot-note mark.
-.de FS
-.if \\n[ft*busy] .@error "FS: missing FE"
-.nr ft*busy 1
-.ev ft*ev
-.ft@init
-.if !\\n[ft*wide] .pg@set-po
-.di ft*tmp-div
-.nr ft*space (u;\\n[Fs]*\\n[Lsp])
-.sp \\n[ft*space]u
-.\" print mark
-.ie \\n[.$] .ds ft*mark \\$1
-.el .ds ft*mark \\n[ft*nr].
-\\*[ft*mark]
-.in +.75c
-.sp -1
-.nr ft*exist 1
-..
-.\"-----------------
-.\" init footnote diversion
-.de ft@init-footnote
-.di ft*div
-\l'20n'
-.br
-.di
-.nr ft*note-size \\n[dn]
-..
-.\"-----------------
-.\" end footnote
-.\" End the diversion, back to previous environment, and adjust
-.\" the trap to the new foot-note size.
-.de FE
-.nr ft*busy 0
-.br
-.di
-'in 0
-'nf
-.if \\n[@pl]u<\\n[dn]u .@error "FE: too big footnote"
-.if !d ft*div .nr dn +1v
-.if \\n[D]>3 .tm FE: foot-trap=\\n[pg*foot-trap] .d=\\n[.d] dn=\\n[dn]
-.ie (\\n[pg*foot-trap]u-\\n[.d]u)<\\n[dn]u \{\
-. da ft*next-div
-. ft*tmp-div
-. br
-. di
-.\}
-.el \{\
-. if !d ft*div .ft@init-footnote
-. da ft*div
-. ft*tmp-div
-. di
-. nr ft*note-size +\\n[dn]
-.\}
-.rm ft*tmp-div
-.ev
-.pg@move-trap
-..
-.\"-----------------
-.\" print footnotes, see pg@footer
-.de ft@print
-.ev ft*print-ev
-'nf
-'in 0
-.ll 100i
-.ft*div
-.br
-.ev
-.rm ft*div
-.nr ft*note-size 0
-.pg@move-trap
-..
-.\"-----------------
-.\" check if any pending footnotes, see pg@header
-.de ft@check-old
-.if d ft*next-div \{\
-. ev ft*ev
-. ft@init
-. ft@init-footnote
-. nf
-. in 0
-. da ft*div
-. ft*next-div
-. di
-. nr ft*note-size +\\n[dn]
-. rm ft*next-div
-. ev
-. nr ft*exist 0
-. pg@move-trap
-.\}
-..
-.\"########### module display ###################
-.nr ds*wide 0\" >0 if wide displays wanted
-.nr df*fnr 0 1\" floating display counter
-.nr df*o-fnr 1\" floating display counter, already printed
-.nr ds*snr 0 1\" static display counter
-.nr ds*lvl 0 1\" display level
-.nr ds*float-busy 0\" >0 if printing float
-.nr df*float 0 >0 if previous display was floating
-.\"--------------------------------------------
-.de DE
-.ie \\n[df*float] .df@end \\$@
-.el .ds@end \\$@
-..
-.\"--------------------------------------------
-.\" floating display start
-.\" nested DF/DE is not allowed.
-.de DF
-.if \\n[df*float] .@error "DF:nested floating is not allowed. Use DS."
-.ds@set-format \\$@
-.\"
-.nr df*old-ll \\n[.l]
-.nr ds*ftmp \\n[.f]
-.misc@ev-keep df*ev
-.ft \\n[ds*ftmp]
-.\"
-.init@reset
-.di df*div
-'in 0
-.\"
-.ds@set-new-ev \\n[df*old-ll]
-.SP \\n[Lsp]u
-.nr df*float 1
-..
-.\"--------------------------------------------
-.de df@end
-.br
-.SP \\n[Lsp]u
-.di
-.nr df*width!\\n+[df*fnr] \\n[dl]
-.nr df*height!\\n[df*fnr] \\n[dn]
-.nr df*wide!\\n[df*fnr] \\n[ds*wide]
-.nr df*format!\\n[df*fnr] \\n[ds*format]
-.ev
-.if \\n[D]>2 .tm DF:fnr=\\n[df*fnr] w=\\n[dl] h=\\n[dn] wide=\\n[ds*wide] \
- form=\\n[ds*format]
-.\" move div to the floating display list
-.rn df*div df*fdiv!\\n[df*fnr]
-.\"
-.nr par@ind-flag 0
-.\" print float if queue is empty and the display fits into
-.\" the current page
-.if ((\\n[df*fnr]>=\\n[df*o-fnr])&(\\n[dn]<\\n[.t])) .df@print-float 1
-.nr df*float 0
-..
-.\"-------------
-.\" called by end-of-text
-.de df@eot-print
-.br
-.if \\n[df*o-fnr]<=\\n[df*fnr] \{\
-. if \\n[D]>2 .tm Print remaining displays.
-.\" still some floats left, make non-empty environment
-. misc@ev-keep ne
-. init@reset
-\c
-. df@print-float 3
-. ev
-.\}
-..
-.\"---------------
-.\" print according to Df and De.
-.\" .df@print-float type
-.\" type called from
-.\" 1 .DE
-.\" 2 end of section
-.\" 3 end of document
-.\" 4 beginning of new page
-.\"
-.de df@print-float
-.if \\n[Df]>5 .@error "Df=\\n[Df], max value is 5"
-.if !\\n[ds*float-busy] \{\
-. nr ds*float-busy 1
-.\" at .DE
-. if \\n[D]>3 .tm print-float: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]]
-. \" Df = 1 or 5
-. if (\\$1=1)&((\\n[Df]=1):(\\n[Df]=5)) \{\
-. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\
-. \" Print only new displays.
-. if \\n[df*o-fnr]=\\n[df*fnr] \{\
-. br
-. ds@print-one-float
-. \}
-. \}
-. \}
-. \" Df = 3
-. if (\\$1=1)&(\\n[Df]=3) \{\
-. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\
-. br
-. ds@print-one-float
-. \}
-. \}
-.\" print all if Df<2 and end of section
-. if (\\$1=2)&(\\n[Sectp]>0)&(\\n[Df]<2) \{\
-. br
-. ds@print-all-floats
-. \}
-.\" print all if end of document. Where should they go instead?
-. if \\$1=3 \{\
-. br
-. ds@print-all-floats
-.\}
-.\" new page
-. if (\\$1=4)&(\\n[Df]>1) \{\
-. if \\n[Df]=2 .ds@print-one-float
-. if \\n[Df]=3 .ds@print-one-float
-. if \\n[Df]>3 \{\
-. ie \\n[De] .ds@print-all-floats
-. el .ds@print-this-page
-. \}
-. \}
-. nr ds*float-busy 0
-.\}
-..
-.\"---------------
-.\" DF out
-.\" print a floating diversion
-.de ds@output-float
-.nr df*old-ll \\n[.l]
-.nr df*old-in \\n[.i]
-.ev ds*fev
-.nf
-.nr df*i \\n[df*o-fnr]
-.nr df*f \\n[df*format!\\n[df*i]]
-.\"
-.in \\n[df*old-in]u
-.if \\n[df*f]=1 'in +\\n[Si]n
-.if \\n[df*f]>=2 'in 0
-.if \\n[df*f]=2 'ce 9999
-.if \\n[df*f]=3 'in (u;(\\n[.l]-\\n[df*width!\\n[df*i]])/2)
-.if \\n[df*f]=4 'rj 9999
-.if \\n[df*f]=5 'in (u;\\n[.l]-\\n[df*width!\\n[df*i]])
-.\"
-.\"
-.df*fdiv!\\n[df*o-fnr]
-.\"
-.if \\n[df*f]=2 'ce 0
-.if \\n[df*f]=4 'rj 0
-.ev
-.rm df*fdiv!\\n[df*i]
-.rm df*height!\\n[df*i]
-.rm df*format!\\n[df*i]
-.if \\n[df*wide!\\n[df*i]] .nr pg*head-mark \\n[nl]u
-.nr df*o-fnr +1
-..
-.\"---------------
-.\" print one floating display if there is one.
-.de ds@print-one-float
-.if \\n[df*o-fnr]<=\\n[df*fnr] \{\
-. if \\n[D]>3 .tm print-one-float: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]]
-. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page
-. ds@output-float
-. if \\n[De] .pg@next-page
-.\}
-..
-.\"---------------
-.\" print all queued floats.
-.\" if De>0 do a page eject between the floats.
-.de ds@print-all-floats
-.while \\n[df*o-fnr]<=\\n[df*fnr] \{\
-. if \\n[D]>3 .tm print-all-floats: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]]
-. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page
-. br
-\c
-. ds@output-float
-. if \\n[De] .pg@next-page
-.\}
-..
-.\"---------------
-.\" print as many floats as will fit on the current page
-.de ds@print-this-page
-.while \\n[df*o-fnr]<=\\n[df*fnr] \{\
-. if \\n[D]>3 .tm print-this-page: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]]
-. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .break
-. ds@output-float
-.\}
-..
-.\"---------------------------------------------------
-.\" get format of the display
-.de ds@set-format
-.ie \\n[.$] \{\
-. ie r ds*format!\\$1 .nr ds*format \\n[ds*format!\\$1]
-. el .@error "DS/DF:wrong format:\\$1"
-.\}
-.el .nr ds*format 0
-.if \\n[D]>2 .tm set format=\\n[ds*format]
-.\" fill or not to fill, that is the...
-.nr ds*fill 0
-.ie \\n[.$]>1 \{\
-. ie r ds*fill!\\$2 .nr ds*fill \\n[ds*fill!\\$2]
-. el .@error "\\*[ds*type]:wrong fill:\\$2"
-.\}
-.if \\n[D]>2 .tm set fill=\\n[ds*fill]
-.nr ds*rindent 0
-.if \\n[.$]>2 .nr ds*rindent \\$3
-.if \\n[D]>2 .tm set indent=\\n[ds*rindent]
-..
-.\"-----------------------------
-.\" .ds@set-new-ev previous-line-length
-.de ds@set-new-ev
-.ll \\$1u
-.lt \\$1u
-.if \\n[ds*rindent] \{\
-. ll -\\n[ds*rindent]n
-. lt -\\n[ds*rindent]n
-.\}
-.if \\n[ds*wide] \{\
-. ll \\n[@ll]u
-. lt \\n[@ll]u
-.\}
-.\"
-.ie \\n[ds*fill] 'fi
-.el 'nf
-..
-.\"--------------------------------------------------------
-.nr ds*format 0\" dummy value for .En/.EQ
-.nr ds*format! 0\" no indent
-.nr ds*format!0 0\" no indent
-.nr ds*format!L 0\" no indent
-.nr ds*format!I 1\" indent
-.nr ds*format!1 1\" indent
-.nr ds*format!C 2\" center each line
-.nr ds*format!2 2\" center each line
-.nr ds*format!CB 3\" center as block
-.nr ds*format!3 3\" center as block
-.nr ds*format!R 4\" right justify each line
-.nr ds*format!4 4\" right justify each line
-.nr ds*format!RB 5\" right justify as block
-.nr ds*format!5 5\" right justify as block
-.\"---------------
-.nr ds*fill! 0\" no fill
-.nr ds*fill!N 0\" no fill
-.nr ds*fill!0 0\" no fill
-.nr ds*fill!F 1\" fill on
-.nr ds*fill!1 1\" fill on
-.\"--------------------------------------------
-.\" static display start
-.\" nested DS/DE is allowed. No limit on depth.
-.de DS
-.br
-.nr XXX \\n[nl]
-.nr ds*lvl +1
-.ds@set-format \\$@
-.\"
-.nr ds*old-ll \\n[.l]
-.nr ds*old-in \\n[.i]
-.misc@push ds-ll \\n[.l]
-.misc@push ds-form \\n[ds*format]
-.nr ds*i \\n[.i]
-.nr ds*ftmp \\n[.f]
-.misc@ev-keep ds*ev!\\n+[ds*snr]
-.ft \\n[ds*ftmp]
-.\"
-.init@reset
-.\" indent in a diversion doesn't seem like a good idea.
-'in 0
-.di ds*div!\\n[ds*snr]
-.\"
-.ds@set-new-ev \\n[ds*old-ll]
-.nr df*float 0
-..
-.\"--------------------------------------------
-.de ds@end
-.if \\n-[ds*lvl]<0 .@error "DE: no corresponding DS"
-.br
-.di
-.\" **********
-.nr ds*width \\n[dl]
-.nr ds*height \\n[dn]
-.misc@pop-nr ds-ll ds*old-ll
-.misc@pop-nr ds-form ds*format
-.\"
-.\" **********
-'nf
-.\" calculate needed space
-.nr ds*need \\n[ds*height]
-.nr ds*i \\n[pg*foot-trap]-\\n[pg*header-size]u-\\n[pg*extra-header-size]u
-.if (\\n[ds*height]>\\n[ds*i])&(\\n[.t]<(\\n[ds*i]/2)) .nr ds*need \\n[.t]u+1v
-.if (\\n[ds*height]<\\n[ds*i])&(\\n[.t]<(\\n[ds*height])) .nr ds*need \\n[.t]u+1v
-.\" Eject page if display will fit one page and
-.\" there are less than half of the page left.
-.if \\n[ds*need] .ne \\n[ds*need]u
-.\"
-.\" check if pending equation label
-.eq@check \\n[ds*need]
-'in \\n[ds*old-in]u
-.if \\n[ds*format]=1 'in \\n[ds*old-in]u+\\n[Si]n
-.if \\n[ds*format]>=2 'in 0
-.if \\n[ds*format]=2 'ce 9999
-.if \\n[ds*format]=3 'in (u;(\\n[.l]-\\n[ds*width])/2)
-.if \\n[ds*format]=4 'rj 9999
-.if \\n[ds*format]=5 'in (u;\\n[.l]-\\n[ds*width])
-.\" **********
-.\"
-.\" Print static display
-.nr ds*i \\n[Lsp]
-.if r Dsp .nr ds*i \\n[Dsp]
-.\"
-.if \\n[Ds] .sp \\n[ds*i]u
-.ds*div!\\n[ds*snr]
-.if \\n[Ds] .sp \\n[ds*i]u
-.\"
-.if \\n[ds*format]=2 'ce 0
-.if \\n[ds*format]=4 'rj 0
-.rm ds*div!\\n[ds*snr]
-.nr ds*snr -1
-.nr par@ind-flag 0
-.ev
-..
-.\"########### module list ###################
-.\" .LI text-indent mark-indent pad type [mark [LI-space [LB-space] ] ]
-.\"
-.nr li*tind 0
-.nr li*mind 0
-.nr li*pad 0
-.nr li*type 0
-.ds li*mark 0
-.nr li*li-spc 0
-.nr li*lvl 0 1
-.aln :g li*lvl
-.nr li*cur-vpos 0
-.\"--------------------------
-.\" the major list-begin macro.
-.\" If type == -1 a 'break' will occur.
-.de LB
-.if \\n[.$]<4 .@error "LB: not enough arguments, min 4"
-.misc@push cind \\n[.i]
-.misc@push tind \\n[li*tind]
-.misc@push mind \\n[li*mind]
-.misc@push pad \\n[li*pad]
-.misc@push type \\n[li*type]
-.misc@push li-spc \\n[li*li-spc]
-.ds li*mark-list!\\n[li*lvl] \\*[li*mark]
-.nr li*lvl +1
-.\"
-.nr li*tind (n;0\\$1)\" text-indent
-.nr li*mind (n;0\\$2)\" mark-indent
-.nr li*pad (n;0\\$3)\" pad
-.nr li*type 0\\$4\" type
-.ds li*mark \\$5\" mark
-.ie !'\\$6'' .nr li*li-spc \\$6\" LI-space
-.el .nr li*li-spc 1
-.ie !'\\$7'' .nr li*lb-spc \\$7\" LB-space
-.el .nr li*lb-spc 0
-.\" init listcounter
-.nr li*cnt!\\n[li*lvl] 0 1
-.\" assign format
-.af li*cnt!\\n[li*lvl] 1
-.if \\n[li*type] .if !'\\*[li*mark]'' .af li*cnt!\\n[li*lvl] \\*[li*mark]
-.\"
-.if \\n[li*lb-spc] .SP (u;\\n[li*lb-spc]*\\n[Lsp])
-.in +\\n[li*tind]u
-..
-.\"---------------
-.de LI
-.if \\n[li*lvl]<1 .@error "LI:no lists active"
-.if \\n[li*li-spc]&(\\n[Ls]>=\\n[li*lvl]) .SP (u;\\n[li*li-spc]*\\n[Lsp])
-.ne 2v
-.\"
-.ds li*c-mark \\*[li*mark]
-.nr li*cnt!\\n[li*lvl] +1
-.if \\n[li*type]=1 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]].
-.if \\n[li*type]=2 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]])
-.if \\n[li*type]=3 .ds li*c-mark (\\n[li*cnt!\\n[li*lvl]])
-.if \\n[li*type]=4 .ds li*c-mark [\\n[li*cnt!\\n[li*lvl]]]
-.if \\n[li*type]=5 .ds li*c-mark <\\n[li*cnt!\\n[li*lvl]]>
-.if \\n[li*type]=6 .ds li*c-mark {\\n[li*cnt!\\n[li*lvl]]}
-.if \\n[.$]=1 .ds li*c-mark \\$1
-.ie \\n[.$]=2 \{\
-. ie (\\$2=2):(\\n[Limsp]=0) .ds li*c-mark \\$1\\*[li*c-mark]
-. el .ds li*c-mark \\$1\ \\*[li*c-mark]
-.\}
-.\"
-.\" determine where the text begins
-.nr li*text-begin \\n[li*tind]>?\w@\\*[li*c-mark]\ @
-.nr x \w@\\*[li*c-mark]\ @
-.\"
-.\" determine where the mark begin
-.ie !\\n[li*pad] .nr li*in \\n[li*mind]
-.el .nr li*in \\n[li*text-begin]-\\n[li*pad]-\w@\\*[li*c-mark]@
-.if !\\n[li*in] .nr li*in 0
-.\"
-.ti -\\n[li*tind]u
-.\" no indentation if hanging indent
-.if (\w@\\*[li*c-mark]@=0)&((\\n[.$]=0):(\w@\\$1@=0)) .nr li*text-begin 0
-\Z'\&\h'\\n[li*in]u'\\*[li*c-mark]'\h'\\n[li*text-begin]u'\&\c
-.if \\n[li*type]=-1 .br
-..
-.\"
-.\"-------------
-.de li@pop
-.nr li*lvl -1
-.misc@pop-nr cind li*tmp
-.in \\n[li*tmp]u
-.misc@pop-nr tind li*tind
-.misc@pop-nr mind li*mind
-.misc@pop-nr pad li*pad
-.misc@pop-nr type li*type
-.misc@pop-nr li-spc li*li-spc
-.ds li*mark \\*[li*mark-list!\\n[li*lvl]]
-..
-.de LE
-.if \\n[li*lvl]<1 .@error "LE:mismatched"
-.li@pop
-.if '\\$1'1' .SP \\n[Lsp]u
-..
-.\"-------------
-.\" list status clear.
-.\" terminate all lists to level i
-.de LC
-.ie \\n[.$]<1 .nr li*i 0
-.el .nr li*i \\$1
-.if \\n[li*i]>\\n[li*lvl] .@error "LC: incorrect argument: \\n[li*i] (too big)"
-.while \\n[li*lvl]>\\n[li*i] .li@pop
-.nr par@ind-flag 0
-..
-.\"-------------
-.de AL
-.if \\n[.$]>3 .@error "AL: too many arguments"
-.if \\n[D]>2 .tm AL $*
-.ie \\n[.$]<=1 .LB \\n[Li] 0 2 1 "\\$1"
-.el \{\
-. ie \\n[.$]=2 .LB 0\\$2 0 2 1 "\\$1"
-. el \{\
-. ie !'\\$2'' .LB \\$2 0 2 1 "\\$1" 0 1
-. el .LB \\n[Li] 0 2 1 "\\$1" 0 1
-. \}
-.\}
-..
-.de ML
-.if \\n[.$]>3 .@error "ML: too many arguments"
-.if \\n[D]>2 .tm ML $*
-.nr li*ml-width \w@\\$1@u+1n
-.if \\n[.$]<2 .LB \\n[li*ml-width]u 0 1 0 "\\$1"
-.if \\n[.$]=2 .LB 0\\$2 0 1 0 "\\$1"
-.if \\n[.$]=3 \{\
-. ie '\\$2'' .LB \\n[li*ml-width]u 0 1 0 "\\$1" 0 1
-. el .LB \\n[Li] 0 1 0 "\\$1" 0 1
-.\}
-..
-.de VL
-.if \\n[D]>2 .tm VL $*
-.if \\n[.$]>3 .@error "VL: too many arguments"
-.if \\n[.$]<1 .@error "VL: missing text-indent"
-.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 0
-.el .LB 0\\$1 0\\$2 0 0 \& 0 1
-..
-.\" Bullet (for .BL)
-.de BL
-.if \\n[D]>2 .tm BL $*
-.ds BU \s-2\(bu\s0
-.if \\n[.$]>2 .@error "BL: too many arguments"
-.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \\*[BU]
-.if \\n[.$]=1 .LB 0\\$1 0 1 0 \\*[BU]
-.if \\n[.$]=2 \{\
-. ie '\\$1'' .LB \\n[Pi] 0 1 0 \\*[BU] 0 1
-. el .LB 0\\$1 0 1 0 \\*[BU] 0 1
-.\}
-..
-.de DL
-.if \\n[D]>2 .tm DL $*
-.if \\n[.$]>2 .@error "DL: too many arguments"
-.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \(em
-.if \\n[.$]=1 .LB 0\\$1 0 1 0 \(em
-.if \\n[.$]=2 \{\
-. ie '\\$1'' .LB \\n[Pi] 0 1 0 \(em 0 1
-. el .LB 0\\$1 0 1 0 \(em 0 1
-.\}
-..
-.de RL
-.if \\n[D]>2 .tm RL $*
-.if \\n[.$]>2 .@error "RL: too many arguments"
-.if \\n[.$]<1 .LB 6 0 2 4
-.if \\n[.$]=1 .LB 0\\$1 0 2 4
-.if \\n[.$]=2 \{\
-. ie '\\$1'' .LB 6 0 2 4 1 0 1
-. el .LB 0\\$1 0 2 4 1 0 1
-.\}
-..
-.\" Broken Variable List. As .VL but text begin on the next line
-.de BVL
-.if \\n[D]>2 .tm BVL $*
-.if \\n[.$]>3 .@error "BVL: too many arguments"
-.if \\n[.$]<1 .@error "BVL: missing text-indent"
-.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 -1
-.el .LB 0\\$1 0\\$2 0 -1 \& 0 1
-..
-.\" ####### module tbl #######################################
-.\" This module is copied from groff_ms and modified for mgm.
-.\" Yes, it does not resemble the original anymore :-).
-.\" Don't know if I missed something important.
-.\" Groff_ms is written by James Clark.
-.nr tbl*have-header 0
-.nr tbl*header-written 0
-.de TS
-.br
-.if ''\\n[.z]' .SP
-.if '\\$1'H' .di tbl*header-div
-..
-.de tbl@top-hook
-.if \\n[tbl*have-header] \{\
-. ie \\n[.t]-\\n[tbl*header-ht]-1v .tbl@print-header
-. el .sp \\n[.t]u
-.\}
-..
-.de tbl@bottom-hook
-.if \\n[tbl*have-header] \{\
-. nr T. 1
-.\" draw bottom and side lines of boxed tables.
-. T#
-.\}
-.nr tbl*header-written 0
-..
-.de tbl@print-header
-.ev tbl*ev
-'nf
-.tbl*header-div
-.ev
-.mk #T
-.nr tbl*header-written 1
-..
-.de TH
-.ie '\\n[.z]'tbl*header-div' \{\
-. nr T. 0
-. T#
-. br
-. di
-. nr tbl*header-ht \\n[dn]
-. ne \\n[dn]u+1v
-. nr tbl*have-header 1
-. ie '\\$1'N' .if !\\n[tbl*header-written] .tbl@print-header
-. el .tbl@print-header
-.\}
-.el .@error ".TH without .TS H"
-..
-.de TE
-.ie '\\n(.z'tbl*header-div' .@error ".TS H but no .TH before .TE"
-.el \{\
-. nr tbl*have-header 0
-.\}
-.\" reset tabs
-.TAB
-..
-.de T&
-..
-.\" ####### module pic #######################################
-.de PS
-.nr pic*in 0
-.br
-.SP .5
-.ie \\n[.$]<2 .@error "PS: bad arguments. Probably not processed with pic."
-.el \{\
-. if !\\n[ds*lvl] .ne (u;\\$1)+1v
-.\" should be contained between .DS/.DE
-.if r ds*format \{\
-. if \\n[ds*lvl]&((\\n[ds*format]=2):(\\n[ds*format]=3)) \{\
-. nr pic*in \\n[.i]
-.\" . in +(u;\\n[.l]-\\n[.i]-\\$2/2)
-. \}
-. \}
-.\}
-..
-.de PE
-.init@reset
-.SP .5
-..
-.\" ####### module eq #######################################
-.\"
-.nr eq*number 0 1
-.ds eq*label
-.de EQ
-.ds eq*label "\\$1
-..
-.de eq@check
-.if !'\\*[eq*label]'' \{\
-. mk
-. \" space down to middle of equation
-' sp (u;\\$1/2)
-. ie (\\n[Eq]%2) \{\
-. \" label to the left
-\h'|0'\\*[eq*label]
-. \}
-. el \{\
-. \" label to the right
-\h'|\\n[.l]u'\\*[eq*label]
-. \}
-. rt
-.\}
-.ds eq*label
-..
-.de EN
-..
-.\"########### module toc ###################
-.\" table of contents
-.nr toc*slevel 1
-.nr toc*spacing \n[Lsp]u
-.nr toc*tlevel 2
-.nr toc*tab 0
-.\"-----------
-.\" Table of contents with friends (module lix)
-.de TC
-.br
-.\" print any pending displays and references
-.df@print-float 3
-.if \\n[ref*flag] .RP 0 1
-.\"
-.if \w@\\$1@>0 .nr toc*slevel \\$1
-.if \w@\\$2@>0 .nr toc*spacing (u;\\$2*\\n[Lsp])
-.if \w@\\$3@>0 .nr toc*tlevel \\$3
-.if \w@\\$4@>0 .nr toc*tab \\$4
-.if \\n[pg*cols-per-page]>1 .1C
-.ds H1txt \\*[Licon]
-.ds Tcst co
-.pg@clear-hd
-.EF ""
-.OF ""
-.pg@next-page
-.\"-------------
-.if d Ci .toc@read-Ci \\*[Ci]
-.nf
-.in 0
-.ie \\n[Oc] .hd@set-page 1
-.el \{\
-. nr toc*pn 1 1
-. af toc*pn i
-. aln ;g toc*pn
-. PF "''\\\\\\\\n[toc*pn]''"
-. am pg@header
-. nr toc*pn +1
-\\..
-.\}
-.nr toc*i 4 1
-.while \\n+[toc*i]<10 \{\
-. if !'\\$\\n[toc*i]'' \{\
-. ce
-\\$\\n[toc*i]
-. br
-. \}
-.\}
-.if \\n[.$]<=4 .if d TX .TX
-.ie d TY .if \\n[.$]<=4 .TY
-.el \{\
-. ce
-\\*[Licon]
-. br
-. SP 3
-.\}
-.if d toc*list .toc*list
-.br
-.\" print LIST OF XXX
-.if d lix*dsfg .lix@print-ds fg FG "\\*[Lf]" \\n[.$]
-.if d lix*dstb .lix@print-ds tb TB "\\*[Lt]" \\n[.$]
-.if d lix*dsec .lix@print-ds ec EC "\\*[Le]" \\n[.$]
-.if d lix*dsex .lix@print-ds ex EX "\\*[Lx]" \\n[.$]
-..
-.\"-----------
-.\" .toc@read-Ci lev1 lev2 lev3 lev4 ... lev7
-.de toc@read-Ci
-.nr toc*i 0 1
-.while \\n+[toc*i]<15 \{\
-. nr toc*hl!\\n[toc*i] \\$[\\n[toc*i]]
-.\}
-..
-.\"-----------
-.de toc@entry
-.ie \\n[Sectp] \{\
-. toc@save \\$1 "\\*[hd*mark]" "\\$2" \\*[hd*sect-pg]
-.\}
-.el .toc@save \\$1 "\\*[hd*mark]" "\\$2" \\n[%]
-..
-.als )E toc@entry
-.\"-----------
-.de toc@save
-.\" collect maxsize of mark if string Ci don't exist.
-.if !d Ci \{\
-. if !r toc*hl!\\$1 .nr toc*hl!\\$1 0
-. if \\n[toc*hl!\\$1]<=\w@\\$2@ \{\
-. nr toc*hl!\\$1 \w@\\$2@u
-. \}
-.\}
-.am toc*list
-.\" .toc@set level headernumber text pagenr
-.toc@set \\$1 "\\$2" "\\$3" \\$4
-\\..
-..
-.\"-----------
-.\" level mark text pagenumber
-.de toc@set
-.if \\$1<=\\n[toc*slevel] .SP \\n[toc*spacing]u
-.na
-.fi
-.nr toc*ind 0
-.nr toc*i 0 1
-.ie d Ci \{\
-. nr toc*ind +\\n[toc*hl!\\$1]u
-.\}
-.el \{\
-. while \\n+[toc*i]<\\$1 \{\
-. nr toc*ind +\\n[toc*hl!\\n[toc*i]]u
-. \}
-.\}
-.nr toc*text \\n[toc*ind]u+\\n[toc*hl!\\$1]u
-.in \\n[toc*text]u
-.ti -\\n[toc*hl!\\$1]u
-.\"
-.\" length of headernum space
-.nr toc*i \\n[toc*hl!\\$1]-\w@\\$2@
-.\"
-.ll \\n[@ll]u-\w@\\$4@u-2m
-.ne 2v
-.\" ragged right ---------------------------------
-.ie \\$1>\\n[toc*tlevel] \{\
-\\$2
-. sp -1
-\\$3\ \ \ \\$4
-. br
-.\}
-.el \{\
-. \" unnumbered heading --------------------
-. ie '\\$2'' \{\
-. in \\n[toc*ind]u
-\\$3\h'1m'
-. \}
-. \" normal heading ------------------------
-. el \{\
-\\$2
-. sp -1
-\\$3\h'1m'
-. \}
-. ll \\n[@ll]u
-. sp -1
-. nr toc*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$4@)-1m
-\h'|\\n[.n]u'\l'\\n[toc*sep]u.'\h'1m'\\$4
-.\}
-.ll \\n[@ll]u
-..
-.\"########################### module lix ############################
-.\" LIST OF figures, tables, exhibits and equations
-.nr lix*fg-nr 0 1
-.nr lix*tb-nr 0 1
-.nr lix*ec-nr 0 1
-.nr lix*ex-nr 0 1
-.aln Fg lix*fg-nr
-.aln Tb lix*tb-nr
-.aln Ec lix*ec-nr
-.aln Ex lix*ex-nr
-.\"------------
-.de FG
-.lix@print-line fg Lf \\n+[lix*fg-nr] "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.de TB
-.lix@print-line tb Lt \\n+[lix*tb-nr] "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.de EC
-.lix@print-line ec Le \\n+[lix*ec-nr] "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.de EX
-.lix@print-line ex Lx \\n+[lix*ex-nr] "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.\"------------
-.\" print line with 'figure' in the text
-.\" type stringvar number text override flag refname
-.de lix@print-line
-.ds lix*text "\\$4
-.\"
-.ie \\n[Sectf] .ds lix*numb \\n[H1]-\\$3
-.el .ds lix*numb \\$3
-.\"
-.ie !\\n[Of] .ds lix*ds-form .\ \ \"
-.el .ds lix*ds-form "\ \(em\ \"
-.nr lix*in \\n[.i]
-.ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\*[lix*ds-form]
-.if !'\\$5'' \{\
-. if !0\\$6 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*numb]\\*[lix*ds-form]
-. if 0\\$6=1 .ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\$5\\*[lix*ds-form]
-. if 0\\$6=2 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*ds-form]
-.\}
-.\" print line if not between DS/DE
-.ie \\n[ds*lvl]<1&\\n[df*float]=0 \{\
-. lix@print-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7
-.\}
-.el \{\
-. lix@embedded-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7
-.\}
-.\"
-..
-.\"-----------
-.\" label text type stringvar refname
-.de lix@print-text
-.ie \\n[Sectp] .ds lix*pgnr \\*[hd*sect-pg]
-.el .ds lix*pgnr \\n[%]
-.SP \\n[Lsp]u
-.misc@ev-keep lix
-.init@reset
-.br
-.ie (\w@\\$1\\$2@)>(\\n[.l]-\\n[.i]) \{\
-. in +\w@\\$1@u
-. ti 0
-.\}
-.el .ce 1
-\fB\\$1\fP\\$2
-.br
-.ev
-.\" save line for LIST OF XXX, wth is the width of the label
-.if !r lix*wth\\$3 .nr lix*wth\\$3 0
-.\" find the maximum width
-.if \w@\\*[lix*label]@>\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@
-.if \\n[\\$4] .lix@ds-save \\$3 \\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]"
-.\" save reference to the figure
-.if !'\\$5'' .SETR \\$5 \\*[lix*numb]
-..
-.\" hide printout until diversion is evaluated
-.de lix@embedded-text
-\!.ie \\\\n[Sectp] .ds lix*pgnr \\\\*[hd*sect-pg]
-\!.el .ds lix*pgnr \\\\n[%]
-\!.SP \\\\n[Lsp]u
-\!.misc@ev-keep lix
-\!.ll \\n[.l]u
-\!.init@reset
-\!.fi
-\!.ie (\w@\\$1\\$2@)>(\\\\n[.l]-\\\\n[.i]) \{\
-. in +\w@\\$1@u
-\!. ti 0
-\!\fB\\$1\fP\\$2
-\!.\}
-\!.el \{\
-. ce 1
-\!\fB\\$1\fP\\$2
-\!.\}
-\!.br
-\!.ev
-.\" save line for LIST OF XXX, wth is the width of the label
-\!.if !r lix*wth\\$3 .nr lix*wth\\$3 0
-.\" find the maximum width
-\!.if \w@\\*[lix*label]@>\\\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@
-\!.if \\\\n[\\$4] .lix@ds-save \\$3 \\\\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]"
-.\" save reference to the figure
-\!.if !'\\$5'' .SETR \\$5 \\*[lix*numb]
-..
-.\"------------
-.\" print complete list of XXXX
-.de lix@print-ds
-.\" arg: fg,tb,ec,ex text
-.ds H1txt \\$3
-.ds Tcst \\$1
-.if !\\n[Cp] .pg@next-page
-.\" print LIST OF XXXX
-.\" execute user-defined macros
-.if \\$4<=4 .if d TX\\$2 .TX\\$2
-.ie d TY\\$2 .if \\$4<=4 .TY\\$2
-.el \{\
-. ce
-\\$3
-. SP 3
-.\}
-.in \\n[lix*wth\\$1]u
-.fi
-.lix*ds\\$1
-..
-.\"------------
-.\" save line of list in macro
-.de lix@ds-save
-.\" type pagenumber text
-.am lix*ds\\$1
-.lix@dsln \\$1 \\$2 "\\$3" "\\$4" \\$5
-\\..
-..
-.\"------------
-.\" print appended macro
-.\" lix@dsln type pagenumber text headernr
-.de lix@dsln
-.nr lix*i \\n[lix*wth\\$1]-\w@\\$4@
-.ne 4v
-.ll \\n[@ll]u-\w@\\$4@u-\w@\\$2@u-2m
-.ti -\\n[lix*wth\\$1]u
-\\$4
-.sp -1
-\\$3\h'1m'
-.sp -1
-.ll
-.nr lix*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$2@)-1m
-\h'|\\n[.n]u'\l'\\n[lix*sep]u.'\h'1m'\\$2
-.SP \\n[toc*spacing]u
-..
-.\"########################### module fnt ############################
-.\" some font macros.
-.de R
-.ft R
-.ul 0
-..
-.\"-----------
-.de fnt@switch
-.ul 0
-.ds fnt*tmp
-.nr fnt*prev \\n[.f]
-.nr fnt*i 2 1
-.while \\n+[fnt*i]<=\\n[.$] \{\
-. if \\n[fnt*i]>3 .as fnt*tmp \,
-. ie (\\n[fnt*i]%2)=1 .as fnt*tmp \\$1\\$[\\n[fnt*i]]
-. el .as fnt*tmp \\$2\\$[\\n[fnt*i]]
-. if \\n[fnt*i]<\\n[.$] .as fnt*tmp \/
-.\}
-\&\\*[fnt*tmp]\f[\\n[fnt*prev]]
-..
-.\"-----------
-.de B
-.ie \\n[.$] .fnt@switch \fB \f[\\n[.f]] \\$@
-.el .ft B
-..
-.de I
-.ie \\n[.$] .fnt@switch \fI \f[\\n[.f]] \\$@
-.el .ft I
-..
-.de IB
-.if \\n[.$] .fnt@switch \fI \fB \\$@
-..
-.de BI
-.if \\n[.$] .fnt@switch \fB \fI \\$@
-..
-.de IR
-.if \\n[.$] .fnt@switch \fI \fR \\$@
-..
-.de RI
-.if \\n[.$] .fnt@switch \fR \fI \\$@
-..
-.de RB
-.if \\n[.$] .fnt@switch \fR \fB \\$@
-..
-.de BR
-.if \\n[.$] .fnt@switch \fB \fR \\$@
-..
-.\"########################### module box ############################
-.\" draw a box around some text. Text will be kept on the same page.
-.\"
-.nr box*ll 0
-.\" .B1 and .B2 works like .DS
-.de B1
-.if \\n[box*ll] .@error "B1: missing B2"
-.nr box*ll \\n[.l]
-.nr box*ind \\n[.i]
-.nr box*hyp \\n[.hy]
-.nr box*wid \\n[.l]-\\n[.i]
-.\"
-.\" jump to new environment.
-.ev box*ev
-.di box*div
-.ps \\n[@ps]u
-.vs \\n[@vs]u
-.in 1n
-.ll (u;\\n[box*wid]-1n)
-.hy \\n[.hy]
-..
-.de B2
-.if !\\n[box*ll] .@error "B2: missing B1"
-.br
-.di
-.nr box*height \\n[dn]
-.ne \\n[dn]u+1v
-.ll \\n[box*ll]u
-.in \\n[box*ind]u
-.nr box*y-pos \\n[.d]u
-.nf
-.box*div
-.fi
-\v'-1v+.25m'\
-\D'l \\n[box*wid]u 0'\
-\D'l 0 -\\n[box*height]u'\
-\D'l -\\n[box*wid]u 0'\
-\D'l 0 \\n[box*height]u'
-.br
-.sp -1
-.ev
-.sp .20v
-.in \\n[box*ind]u
-.ll \\n[box*ll]u
-.rm box*div
-.nr box*ll 0
-..
-.\"########################### module ref ############################
-.nr ref*nr 0 1
-.aln :R ref*nr
-.nr ref*nr-width 5n
-.nr ref*flag 0 \" for end-of-text
-.ds Rf \v'-.4m'\s-3[\\n+[ref*nr]]\s0\v'.4m'
-.\"
-.\" start reference
-.\"------------
-.de RS
-.if !''\\$1' .ds \\$1 \v'-.4m'\s-3[\\n[ref*nr]]\s0\v'.4m'
-.nr ref*flag 1
-.am ref*mac
-.ref@start-print \\n[ref*nr]
-\\..
-.eo
-.am ref*mac RF
-..
-.\"------------
-.de RF
-.ec
-.am ref*mac
-.ref@stop-print
-\\..
-..
-.\"------------
-.de ref@start-print
-.di ref*div
-.in \\n[ref*nr-width]u
-.ti -(\w@\\$1.@u+1n)
-\\$1.
-.sp -1
-..
-.de ref@stop-print
-.br
-.di
-.ne \\n[dn]u
-.ev ref*ev2
-.nf
-.ref*div
-.ev
-.rm ref*div
-.if \\n[Ls] .SP \\n[Lsp]u
-..
-.\"-----------
-.de RP
-.if !d ref*mac .@error "RP: No references!"
-.nr ref*i 0\\$2
-.if \\n[ref*i]<2 .SK
-.SP 2
-.ref@print-refs
-.if 0\\$1<1 .nr ref*nr 0 1
-.if ((\\n[ref*i]=0):(\\n[ref*i]=2)) .SK
-..
-.\"-----------
-.\" called by end-of-text!
-.de ref@eot-print
-.\".if \\n[ref*flag] \{
-.if d ref*mac \{\
-. if \\n[D]>2 .tm Print references, called by eot
-. nr ref*flag 0
-. br
-. misc@ev-keep ne
-. init@reset
-\c
-' bp
-. ev
-. ref@print-refs
-.\}
-..
-.\"-----------
-.\" prints the references
-.de ref@print-refs
-.toc@save 1 "" "\\*[Rp]" \\n[%]
-.ce
-\fI\\*[Rp]\fP
-.sp
-.nr ref*ll \\n[.l]
-.misc@ev-keep ref*ev
-.ll \\n[ref*ll]u
-.in 0
-.ref*mac
-.in
-.rm ref*mac
-.ev
-.nr ref*flag 0 1
-..
-.\"########################### module app ############################
-.\"
-.nr app*nr 0 1
-.af app*nr A
-.nr app*dnr 0 1
-.nr app*flag 0
-.\"------------
-.\" .APP name text
-.\" name == "" -> autonumber
-.de APP
-.\" .if \\n[.$]<2 .@error "APP: too few arguments"
-.app@set-ind "\\$1"
-.\"
-.ds Tcst ap
-.ds Apptxt \\$2
-.\"
-.ie \\n[Aph] .app@header \\*[app*ind] "\\$2"
-.el .bp
-.app@index "\\*[app*ind]" "\\$2"
-..
-.\"------------
-.\" .APPSK name pages text
-.\" name == "" -> autonumber
-.de APPSK
-.if \\n[.$]<2 .@error "APPSK: too few arguments"
-.app@set-ind "\\$1"
-.\"
-.ds Tcst ap
-.ds Apptxt \\$3
-.\"
-.ie \\n[Aph] .app@header \\*[app*ind] "\\$3"
-.el .bp
-.app@index "\\*[app*ind]" "\\$3"
-.pn +\\$2
-..
-.\"------------
-.de app@set-ind
-.ie \w@\\$1@ .ds app*ind \\$1
-.el \{\
-. if !\\n[app*flag] \{\
-. nr H1 0 1
-. af H1 A
-. af H1h A
-. nr app*flag 1
-. \}
-. ds app*ind \\n+[app*nr]
-. nr H1 \\n+[app*dnr]
-. nr H1h \\n[app*dnr]
-.\}
-.\" clear lower counters
-.nr app*i 1 1
-.while \\n+[app*i]<15 .nr H\\n[app*i] 0 1
-..
-.\"------------
-.de app@index
-.toc@save 1 "" "\\*[App] \\$1: \\$2" \\n[%]
-..
-.\"------------
-.\" app@heaer name text
-.de app@header
-.bp
-.SP (u;\\n[Lsp]*4)
-.ce 1
-\s+4\fB\\*[App]\ \\$1\fP\s0
-.SP (u;\\n[Lsp]*2)
-.if \w@\\$2@<\\n[.l] .ce 1
-\fB\s+2\\$2\s0\fP
-.SP (u;\\n[Lsp]*4)
-..
-.als APPX app@header
-.\"########################### module cov ############################
-.\" title stored in diversion cov*title
-.\" abstract stored in diversion cov*abstract
-.\" arg to abstract stored in cov*abs-arg
-.\" indent stored in cov*abs-ind
-.\" number of authors stored in cov*au
-.\" author(s) stored in cov*au!x!y
-.\" author(s) title stored in cov*at!x!y
-.\" x is the author-index [1-cov*au], y is the argument-index [1-9].
-.\" author(s) firm stored in cov*firm
-.\" new date (if .ND exists) is stored in cov*new-date
-.\"
-.\"
-.ds cov*abs-name ABSTRACT
-.\"
-.nr cov*au 0
-.de TL
-.rm IA IE WA WE LO LT
-.if \\n[.$]>0 .ds cov*title-charge-case \\$1
-.if \\n[.$]>1 .ds cov*title-file-case \\$2
-.pg@disable-top-trap
-.eo
-.de cov*title AU
-..
-.\"-------------------
-.de cov@title-end
-.ec
-..
-.\"-------------------
-.\" .AU name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]
-.de AU
-.cov@title-end
-.pg@disable-top-trap
-.nr cov*au +1
-.nr cov*i 0 1
-.ds cov*au!\\n[cov*au]!1
-.while \\n[.$]>=\\n+[cov*i] \{\
-. ds cov*au!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]]
-.\}
-.if (\\n[.$]>=3)&(\w@\\$3@) \{\
-. if d cov*location-\\$3] \{\
-. ds cov*au!3!\\n[cov*au] \\*[cov*location-\\$3]
-. \}
-.\}
-..
-.\"-------------------
-.\" .AT title1 [title2 [... [title9] ]]]]
-.\" Well, thats all that COVEND look for.
-.\" Must appear directly after .AU
-.de AT
-.if \\n[.$]<1 .@error "AT: no arguments"
-.nr cov*i 0 1
-.while \\n[.$]>=\\n+[cov*i] \{\
-. ds cov*at!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]]
-.\}
-..
-.\"-------------------
-.de AF
-.cov@title-end
-.if !''\\$1' .ds cov*firm \\$1
-..
-.de AST
-.ds cov*abs-name \\$1
-..
-.de AS
-.pg@disable-top-trap
-.if d cov*abstract .@error "AS: only one abstract allowed"
-.if !''\\n[.z]' .@error "AS: no diversion allowed (previous .AS?)"
-.nr cov*abs-arg 0\\$1
-.nr cov*abs-ind (n;0\\$2)
-.de cov*abstract AE
-..
-.de AE
-..
-.\" fixed for 2000, now uses \n[year].
-.de ISODATE
-. \" support for ISO-date
-. nr cov*mm \\n[mo]
-. nr cov*dd \\n[dy]
-. af cov*mm 01
-. af cov*dd 01
-. ie '0'\\$1' \{\
-. ds cov*new-date \\*[MO\\n[mo]] \\n[dy], \\n[year]
-. \}
-. el \{\
-. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd]
-. \}
-..
-.ISODATE 0
-.als DT cov*new-date
-.de ND
-.ds cov*new-date \\$1
-..
-.\" switch to ISO-date if register Iso exist: YYYY-MM-DD
-.if r Iso .ISODATE 1
-.\"-------------------
-.\" save technical numbers.
-.de TM
-.nr cov*i 0 1
-.while \\n[.$]>=\\n+[cov*i] .ds cov*mt-tm!\\n[cov*i] \\$[\\n[cov*i]]
-.nr cov*mt-tm-max \\n[.$]
-..
-.\"-----------------------
-.\" cover sheet
-.\" the file must have the following last lines (somewhere):
-.\" .pg@enable-top-trap
-.\" .bp 1
-.\" .pg@enable-trap
-.ds cov*mt-file!0 0.MT
-.ds cov*mt-file!1 0.MT
-.ds cov*mt-file!2 0.MT
-.ds cov*mt-file!3 0.MT
-.ds cov*mt-file!4 4.MT
-.ds cov*mt-file!5 5.MT
-.ds cov*mt-file!6 0.MT
-.\"------------
-.de MT
-.ie \\n[.$] \{\
-. ie d cov*mt-file!\\$1 .ds cov*mt-type \\$1
-. el .ds cov*mt-type 6
-.\}
-.el .ds cov*mt-type 1
-.ds cov*mt-addresse "\\$2
-.ds cov*mt-type-text "\\$1
-.ie d @language .ds cov*str mm/\\*[@language]_
-.el .ds cov*str mm/
-.mso \\*[cov*str]\\*[cov*mt-file!\\*[cov*mt-type]]
-..
-.de COVER
-.ie !\\n[.$] .ds cov*cov-type ms
-.el .ds cov*cov-type \\$1
-.pg@disable-top-trap
-.ie d @language .ds cov*str mm/\\*[@language]_\\*[cov*cov-type].cov
-.el .ds cov*str mm/\\*[cov*cov-type].cov
-.mso \\*[cov*str]
-..
-.\"########################### module qrf ############################
-.\" forward and backward reference thru special files.
-.\"
-.\" check if stderr-method is wanted
-.\" This was needed when I discovered that groff was considered unsafe
-.\" and groff -U didn't work. It's a workaround like the original
-.\" index method, but not in my view elegant enough.
-.\"
-.\" init reference system
-.de INITR
-.ds qrf*file \\$1.qrf
-.nr qrf*pass 2
-.if \\n[D]>1 .tm INITR: source \\*[qrf*file]
-.ie \\n[Ref] \{\
-. tm .\\\\" Rfilename: \\*[qrf*file]
-.\}
-.el 'so \\*[qrf*file]
-..
-.\"---------------
-.\" set a reference.
-.de SETR
-.if \\n[.$]<1 .@error "SETR:reference name missing"
-.if !r qrf*pass .tm "SETR: No .INITR in this file"
-.if \\n[Ref] \{\
-. ds qrf*name qrf*ref-\\$1
-. if \\n[D]>2 .tm SETR: ref \\*[qrf*name]=\\*[hd*mark],\\n[%]
-. \" heading-number
-. ds \\*[qrf*name]-hn \\*[hd*mark]
-. \" page-number
-. ds \\*[qrf*name]-pn \\n[%]
-. \"
-. if \\n[Ref] \{\
-. tm .ds \\*[qrf*name]-hn \\*[hd*mark]
-. tm .ds \\*[qrf*name]-pn \\n[%]
-. if !'\\$2'' .tm .ds \\*[qrf*name]-xx \\$2
-. \}
-.\}
-..
-.\"---------------
-.\" get misc-string
-.\" If two arg -> set var. arg to misc-string.
-.de GETST
-.if \\n[.$]<1 .@error "GETST:reference name missing"
-.if !r qrf*pass .tm "GETST: No .INITR in this file"
-.ds qrf*name qrf*ref-\\$1
-. if d \\*[qrf*name]-xx \{\
-. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-xx]
-. el \\*[\\*[qrf*name]-xx]\c
-. \}
-.\}
-..
-.\"---------------
-.\" get header-number
-.\" If two arg -> set var. arg to header-number.
-.de GETHN
-.if \\n[.$]<1 .@error "GETHN:reference name missing"
-.if !r qrf*pass .tm "GETHN: No .INITR in this file"
-.ds qrf*name qrf*ref-\\$1
-.if d \\*[qrf*name]-hn \{\
-. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-hn]
-. el \\*[\\*[qrf*name]-hn]\c
-.\}
-..
-.\"---------------
-.\" get page-number
-.\" If two arg -> set var. arg to page-number.
-.de GETPN
-.if \\n[.$]<1 .@error "GETPN:reference name missing"
-.if !r qrf*pass .tm "GETPN: No .INITR in this file"
-.ds qrf*name qrf*ref-\\$1
-.if d \\*[qrf*name]-pn \{\
-. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-pn]
-. el \\*[\\*[qrf*name]-pn]\c
-.\}
-..
-.\"----------
-.de GETR
-.if \\n[.$]<1 .@error "GETR:reference name missing"
-.ie !r qrf*pass \{\
-. tm "GETR: No .INITR in this file"
-.\}
-.el \{\
-. GETHN \\$1 Qrfh
-. GETPN \\$1 Qrfp
-\\*[Qrf]
-.\}
-..
-.\"########################### module ind ############################
-.\" Support for mgs-style indexing, borrowed from mgs.
-.de IX
-. tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[%]
-..
-.\"--------------------
-.\" Another type of index system
-.\" INITI type filename [macro]
-.de INITI
-.if \\n[.$]<1 .@error "INITI:type missing"
-.\" ignore if INITI has already been used
-.if \\n[.$]>1 \{\
-. if d ind*file .@error "INITI:file already set"
-. ds ind*file \\$2.ind
-. if \\n[D]>1 .tm INITI: source \\*[ind*file]
-.\}
-.if !d ind*file .@error "INITI:file not specified"
-.ds ind*type \\$1
-.if \\n[Ref] \{\
-. if \\n[.$]>2 .tm .\\\\" Imacro: \\$3
-.\}
-..
-.\"---------------
-.de IND
-.if !d ind*file .@error "IND: No active INITI"
-.if \\n[D]>1 .tm IND: type=\\*[ind*type]
-.ds ind*ref
-.if '\\*[ind*type]'N' .ds ind*ref \\n[%]
-.if '\\*[ind*type]'H' .ds ind*ref \\*[hd*mark]
-.if '\\*[ind*type]'B' .ds ind*ref \\*[hd*mark]\t\\n[%]
-.if '\\*[ind*ref]'' .@error "IND:wrong index type: \\*[ind*ref]"
-.\"
-.ds ind*line \\$1
-.while \\n[.$]>0 \{\
-. shift
-. as ind*line \t\\$1
-.\}
-.as ind*line \\*[ind*ref]
-.if \\n[Ref] .tm .\\\\" IND \\*[ind*line]
-..
-.\" print index
-.de INDP
-.ie \\n[Ref] .tm .\\\\" Index: \\*[ind*file]
-.el \{\
-. if !\\n[Cp] .pg@next-page
-. \" print INDEX
-. \" execute user-defined macros
-. if d TXIND .TXIND
-. ie d TYIND .TYIND
-. el \{\
-. SK
-. ce
-\\*[Index]
-. SP 3
-. 2C
-. nf
-. \}
-' so \\*[ind*file]
-. ie d TZIND .TZIND
-. el \{\
-. fi
-. 1C
-. \}
-.\}
-.rm ind*file
-..
-.\"########################### module let ############################
-.\" Letter macros
-.\"------------------------
-.\" Formal closing
-.de FC
-.df@print-float 3
-.ie \\n[.$] .ds let*i \\$1
-.el .ds let*i \\*[Letfc]
-.ie d let*type .let@fc_\\*[let*type] "\\*[let*i]" \\$@
-.el .let@mt-closing "\\*[let*i]" \\$@
-..
-.\"-------
-.de let@mt-closing
-.ne 5v
-.in (u;\\n[.l]/2)
-.sp
-\\$1
-.in
-..
-.\"------------------------
-.\" Signature line
-.de SG
-.ie d let*type .let*lt-sign \\$@
-.el .let*mt-sign \\$@
-..
-.\"------------------------
-.de let*lt-sign
-.if !d let@sg_\\*[let*type] .@error "SG: letter type \\*[let*type] undefined"
-.df@print-float 3
-.nr let*i 0 1
-.nr let*j 0
-.while \\n+[let*i]<=\\n[let*wa-n] \{\
-.if \\n[let*i]=\\n[let*wa-n] .nr let*j 1
-.let@sg_\\*[let*type] "\\*[let*wa-name!\\n[let*i]]" "\\*[let*wa-title!\\n[let*i]]" \\n[let*i] \\n[let*j] \\$@
-.\}
-..
-.\"------------------------
-.\" Memorandum signature
-.de let*mt-sign
-.df@print-float 3
-.ne \\n[cov*au]u*4v
-.ie \\n[.$]>1 .nr let*k 1
-.el .nr let*k \\n[cov*au]
-.ds let*tmp \\*[cov*au!\\n[let*k]!3]-\\*[cov*au!\\n[let*k]!4]-
-.nr let*i 0 1
-.while \\n+[let*i]<=\\n[cov*au] \{\
-. if \\n[let*i]>1 .as let*tmp /
-. as let*tmp \\*[cov*au!\\n[let*k]!2]
-.\}
-.if !''\\$1' .as let*tmp -\\$1
-.in (u;\\n[.l]/2)
-.nf
-.nr let*i 0 1
-.while \\n+[let*i]<=\\n[cov*au] \{\
-. SP 3v
-. if \\n[let*i]=\\n[let*k] \{\
-\Z'\h'-(u;\\n[.l]/2)'\\*[let*tmp]'\c
-. \}
-\\*[cov*au!\\n[let*i]!1]
-.\}
-.fi
-.in
-..
-.\"------------------------
-.\" Approval signature
-.de AV
-.ne 6v
-.nf
-.sp
-.ie \\n[.$]<2 \\*[Letapp]
-.el .sp
-.sp 2
-.ie n ______________________________ ______________
-.el \D'l 25m 0'\h'4m'\D'l 12m 0'
-\Z'\\$1'\h'29m'\f[\\*[@sdf_font]]\\*[Letdate]\fP
-.fi
-..
-.\"------------------------
-.\" Letter signature
-.de AVL
-.ne 6v
-.nf
-.sp 3
-.ie n ______________________________
-.el \D'l 25m 0'
-\Z'\\$1'
-.fi
-..
-.\"------------------------
-.\" Letter type
-.\" let@header is called from the header. It is supposed
-.\" to remove the alias itself.
-.de LT
-.rm AF AS AE AT AU CS OK TL MT
-.ds let*type BL
-.nr Pi 5
-.nr Pt 0
-.if !''\\$1' .ds let*type \\$1
-.if !d let@head_\\*[let*type] .@error "LT: unknown letter type \\$1"
-.shift
-.als let@header let@head_\\*[let*type]
-.let@init_\\*[let*type] \\$@
-.if \n[D]>1 .tm Letter type \\*[let*type]
-..
-.\"-----------
-.\" Blocked letter
-.de let@init_BL
-..
-.de let@head_BL
-.rm let@header
-.let@print-head 1
-..
-.de let@sg_BL
-.ne 5v
-.nf
-.in (u;\\n[.l]/2)
-.sp 3v
-\\$1
-\\$2
-.in
-.if \\$4 .sp
-.if \w'\\$5'&\\$4 \\$5
-.fi
-..
-.als let@fc_BL let@mt-closing
-.\"-----------
-.\" Semiblocked letter
-.de let@init_SB
-.nr Pt 1
-..
-.de let@head_SB
-.rm let@header
-.let@print-head 1
-..
-.als let@sg_SB let@sg_BL
-.als let@fc_SB let@mt-closing
-.\"-----------
-.\" Full-blocked letter
-.de let@init_FB
-..
-.de let@head_FB
-.rm let@header
-.let@print-head
-..
-.de let@sg_FB
-.ne 5v
-.nf
-.sp 3v
-\\$1
-\\$2
-.if \\$4 .sp
-.if \w'\\$5'&\\$4 \\$5
-.fi
-..
-.de let@fc_FB
-.ne 5v
-.sp
-\\$1
-..
-.\"-----------
-.\" Simplified letter
-.de let@init_SP
-..
-.de let@head_SP
-.rm let@header
-.let@print-head
-..
-.de let@sg_SP
-.nf
-.if \\$3=1 .sp
-.sp
-.misc@toupper "\\$1, \\$2"
-.if \\$4 .sp
-.if \w'\\$5'&\\$4 \\$5
-.fi
-..
-.de let@fc_SP
-.sp 2
-..
-.\"--------------------------------------
-.\" Print the letter-head
-.de let@print-head
-.nf
-.sp |11
-.if '1'\\$1' .in (u;\\n[.l]/2)
-.\" ---- WA
-.ie d let@wa-div .let@wa-div
-.el .sp 3
-.\" ---- datum
-\\*[cov*new-date]
-.sp
-.if '1'\\$1' .if !d let*lo-CN .if !d let*lo-RN .sp 2
-.\" ---- Confidential
-.if d let*lo-CN \{\
-. ti 0
-. ie !''\\*[let*lo-CN]' \\*[let*lo-CN]
-. el \\*[LetCN]
-. sp
-.\}
-.\" ---- Reference
-.if d let*lo-RN \{\
-\\*[LetRN] \\*[let*lo-RN]
-. sp
-.\}
-.\" ---- IA
-.sp
-.in 0
-.nr let*i 0 1
-.while \\n+[let*i]<=\\n[let*ia-n] \{\
-\\*[let*ia-name!\\n[let*i]]
-\\*[let*ia-title!\\n[let*i]]
-.\}
-.if d let@ia-div .let@ia-div
-.\" ---- Attention
-.if d let*lo-AT \{\
-. sp
-\\*[LetAT] \\*[let*lo-AT]
-.\}
-.\" ---- Salutation
-.if !'\\*[let*type]'SP' .if d let*lo-SA \{\
-. sp
-. ti 0
-. ie !''\\*[let*lo-SA]' \\*[let*lo-SA]
-. el \\*[LetSA]
-.\}
-.\" ---- Subject
-.if d let*lo-SJ \{\
-. ie '\\*[let*type]'SP' \{\
-. sp 2
-. misc@toupper \\*[let*lo-SJ]
-. sp
-. \}
-. el \{\
-. sp
-. if '\\*[let*type]'SB' .ti +5m
-\\*[LetSJ] \f[\\*[@sdf_font]]\\*[let*lo-SJ]\fP
-. \}
-.\}
-..
-.\"-------------------
-.\" .IA [name [title]]
-.nr let*ia-n 0 1
-.de IA
-.if \\n[.$] .ds let*ia-name!\\n+[let*ia-n] \\$1
-.if \\n[.$]>1 .ds let*ia-title!\\n[let*ia-n] \\$2
-.ev let@ev
-.init@reset
-'nf
-.di let@ia-div
-.eo
-..
-.de IE
-.di
-.ec
-.ev
-..
-.\"-------------------
-.\" .WA [name [title]]
-.nr let*wa-n 0 1
-.de WA
-.if \\n[.$] .ds let*wa-name!\\n+[let*wa-n] \\$1
-.if \\n[.$]>1 .ds let*wa-title!\\n[let*wa-n] \\$2
-.ev let@ev
-.init@reset
-'nf
-.di let@wa-div
-.it \\n[Letwam] let@wa-drain
-.eo
-..
-.\"------
-.de let@wa-drain
-.it
-.di
-.di let@wa-junk
-..
-.\"------
-.de WE
-.it
-.ec
-.di
-.ev
-.if d let@wa-junk .rm let@wa-junk
-..
-.\"-------------------
-.\" Copy to
-.de NS
-.sp
-.ie !''\\$2' .ds let*str \\$1
-.el \{\
-. ie \\n[.$]>0 \{\
-. ie !\w'\\$1' .ds let*str \\*[Letns!\\*[Letnsdef]]
-. el \{\
-. ie d Letns!\\$1 .ds let*str \\*[Letns!\\$1]
-. el .ds let*str \\*[Letns!copy](\\$1)\\*[Letns!to]
-. \}
-. \}
-. el .ds let*str \\*[Letns!\\*[Letnsdef]]
-.\}
-.ne 2
-.nf
-\\*[let*str]
-..
-.de NE
-.fi
-..
-.\"-------------------
-.\" Letter options
-.de LO
-.rm AF AS AE AT AU CS OK TL MT
-.if ''\\$1' .@error "LO: missing option"
-.if !d Let\\$1 .@error "LO: unknown option (\\$1)"
-.ds let*lo-\\$1 \\$2
-.if \n[D]>1 .tm Letter option \\$1 \\$2
-..
-.\"--------------------
-.\" Start with a clean slate
-.init@reset
diff --git a/contrib/groff/contrib/mm/mm.tmac b/contrib/groff/contrib/mm/mm.tmac
deleted file mode 100644
index 9ed09b721f98..000000000000
--- a/contrib/groff/contrib/mm/mm.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" mm.tmac
-.\"
-.do mso m.tmac
diff --git a/contrib/groff/contrib/mm/mm/0.MT b/contrib/groff/contrib/mm/mm/0.MT
deleted file mode 100644
index 61f1a969c06b..000000000000
--- a/contrib/groff/contrib/mm/mm/0.MT
+++ /dev/null
@@ -1,146 +0,0 @@
-.\"------------
-.\" $Id: 0.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
-.\" Cover sheet. Memorandum type 0-3 and "string".
-.\"------------
-.if !r Au .nr Au 1
-.nr cov*mt0-ind 1.1c
-.de cov@print-title
-.MOVE 4.8c 1.5c
-.S 8
-subject:
-.sp -1.1
-.S
-.PGFORM
-.ft \\*[@sdf_font]
-.ll 9c
-.fi
-.cov*title
-.ft
-.ll
-.nf
-.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP
-.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP
-.fi
-..
-.\"------------
-.de cov@print-authors
-.MOVE 5.7c 13.3c
-.nf
-.S 8
-\\$1:
-.br
-.S
-.sp -1
-.in 0.8c
-.ft \\*[@sdf_font]
-.nr cov*i 0 1
-.while \\n+[cov*i]<=\\n[cov*au] \{\
-. cov@print-au1 \\n[cov*i] 1
-. if \\n[Au] \{\
-. cov@print-au2 \\n[cov*i] 3 4
-. cov@print-au2 \\n[cov*i] 6 5
-. cov@print-au1 \\n[cov*i] 7
-. cov@print-au1 \\n[cov*i] 8
-. cov@print-au1 \\n[cov*i] 9
-. \}
-. if \\n[cov*i]<\\n[cov*au] .SP 1
-.\}
-.ft
-.if r cov*mt-tm-max \{\
-. SP 1
-. nr cov*i 0 1
-. ft \\*[@sdf_font]
-TM
-. in 1.5c
-. sp -1
-. while \\n+[cov*i]<\\n[cov*mt-tm-max] \\*[cov*mt-tm!\\n[cov*i]]
-. in
-. ft
-.\}
-.fi
-.PGFORM
-..
-.\"------------
-.\" index arg1
-.de cov@print-au1
-.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2]
-..
-.\"------------
-.de cov@print-au2
-.\" index arg1 arg2
-.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] \c
-.if \\$3=5 .if d cov*au!\\$1!\\$3 x\c
-.if d cov*au!\\$1!\\$3 \\*[cov*au!\\$1!\\$3]\c
-.br
-..
-.\"------------
-.de cov@print-date
-.MOVE 4.8c 13.3c
-.S 8
-.nf
-\\$1:
-.br
-.S
-.sp -1
-.in 0.8c
-\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
-.br
-.fi
-.PGFORM
-..
-.\"------------
-.de cov@print-firm
-.if d cov*firm \{\
-. MOVE 2.8c 0 17.7c
-. S 18
-. rj 1
-\fB\\*[cov*firm]\fP
-. S
-. PGFORM
-.\}
-..
-.\"------------
-.de cov@print-abstract
-.SP 3
-.if d cov*abstract \{\
-. misc@ev-keep cov*ev
-. if \\n[cov*abs-ind]>0 \{\
-. in +\\n[cov*abs-ind]u
-. ll -\\n[cov*abs-ind]u
-. \}
-. ce
-\fI\\$1\fP
-. SP 1.5
-. fi
-. cov*abstract
-. br
-. ev
-.\}
-..
-.\"-----------------
-.ds cov*mt0-txt!1 MEMORANDUM FOR FILE
-.ds cov*mt0-txt!2 PROGRAMMER'S NOTES
-.ds cov*mt0-txt!3 ENGINEER'S NOTES
-.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
-.\"
-.if !d cov*mt-printed \{\
-. cov@print-firm
-. cov@print-title subject
-. cov@print-date date
-. cov@print-authors from
-. cov@print-abstract \\*[cov*abs-name]
-. SP 3
-. if (\*[cov*mt-type]>=1)&(\*[cov*mt-type]<=3) \{\
-. ce
-\fI\*[cov*mt0-txt!\*[cov*mt-type]]\fP
-. SP 1.5
-. \}
-. if \*[cov*mt-type]=6 \{\
-. ce
-\fI\*[cov*mt-type-text]\fP
-. SP 1.5
-. \}
-. pg@enable-top-trap
-. pg@enable-trap
-. ds cov*mt-printed
-.\}
diff --git a/contrib/groff/contrib/mm/mm/4.MT b/contrib/groff/contrib/mm/mm/4.MT
deleted file mode 100644
index 78c77661d78b..000000000000
--- a/contrib/groff/contrib/mm/mm/4.MT
+++ /dev/null
@@ -1,82 +0,0 @@
-.\"------------
-.\" $Id: 4.MT,v 2.2 2003/04/02 04:06:40 jhaegg Exp $
-.\" Cover sheet. Memorandum type 4
-.\"------------
-.de cov@print-title
-.if !d cov*title .@error title (.TL) not defined!
-.MOVE 2.8c
-.S +2
-.ad c
-.fi
-.B
-.cov*title
-.br
-.S
-.R
-.ad b
-..
-.\"------------
-.de cov@print-authors
-.SP 0.5
-.I
-.S +1
-.nr cov*i 0 1
-.while \\n+[cov*i]<=\\n[cov*au] \{\
-.ce
-\\*[cov*au!\\n[cov*i]!1]
-.br
-.\}
-.S
-.R
-..
-.\"------------
-.de cov@print-firm
-.if d cov*firm \{\
-. SP 0.5
-. ce
-\\*[cov*firm]
-.\}
-..
-.\"------------
-.de cov@print-abstract
-.SP 2
-.if d cov*abstract \{\
-. misc@ev-keep cov*ev
-. init@reset
-. if \\n[cov*abs-ind]>0 \{\
-. in +\\n[cov*abs-ind]u
-. ll -\\n[cov*abs-ind]u
-. \}
-. ce
-\fI\\*[cov*abs-name]\fP
-. SP 2
-. fi
-. cov*abstract
-. br
-. ev
-.\}
-..
-.\"-----------------
-.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
-.if !d cov*mt-printed \{\
-. cov@print-title
-. cov@print-authors
-. cov@print-firm
-. if d cov*abstract \{\
-. if !\n[cov*abs-arg] .cov@print-abstract
-. \}
-. SP 2
-. nr hd*cur-bline \n[nl]
-. ds cov*mt-printed
-. pg@enable-top-trap
-. pg@enable-trap
-.\}
-.de CS
-.pg@disable-top-trap
-.SK
-.cov@print-title
-.cov@print-authors
-.cov@print-firm
-.cov@print-abstract
-..
-
diff --git a/contrib/groff/contrib/mm/mm/5.MT b/contrib/groff/contrib/mm/mm/5.MT
deleted file mode 100644
index a274d234bd00..000000000000
--- a/contrib/groff/contrib/mm/mm/5.MT
+++ /dev/null
@@ -1,34 +0,0 @@
-.\"------------
-.\" $Id: 5.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
-.\" Cover sheet. Memorandum type 5
-.\"------------
-.nr cov*mt0-ind 1.1c
-.de cov@print-title
-.B
-.ll 9c
-.fi
-.cov*title
-.R
-.ll
-.nf
-.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP
-.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP
-.fi
-..
-.\"------------
-.de cov@print-date
-.rj 1
-\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
-.br
-..
-.\"------------
-.if !d cov*mt-printed \{\
-. SP 1.9c
-. cov@print-title
-. SP 1.2c
-. cov@print-date
-. SP 3
-. pg@enable-top-trap
-. pg@enable-trap
-. ds cov*mt-printed
-.\}
diff --git a/contrib/groff/contrib/mm/mm/ms.cov b/contrib/groff/contrib/mm/mm/ms.cov
deleted file mode 100644
index 25d4579e2f7c..000000000000
--- a/contrib/groff/contrib/mm/mm/ms.cov
+++ /dev/null
@@ -1,84 +0,0 @@
-.\"------------
-.\" $Id: ms.cov,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
-.\" Cover sheet. Mostly like ms cover.
-.\"------------
-.de cov@print-title
-.in 0
-.misc@ev-keep cov*ev
-.init@reset
-.ad c
-.hy 0
-.fi
-.B
-.cov*title
-.br
-.ad b
-.R
-.ev
-..
-.\"------------
-.de cov@print-authors
-.SP
-.nr cov*i 0 1
-.while \\n+[cov*i]<=\\n[cov*au] \{\
-. ce
-\fI\\*[cov*au!\\n[cov*i]!1]\fP
-. nr cov*j 0 1
-. while \\n+[cov*j]<=9 \{\
-. if d cov*at!\\n[cov*i]!\\n[cov*j] \{\
-. if \w'\\*[cov*at!\\n[cov*i]!\\n[cov*j]]' \{\
-. ce
-\s-1\\*[cov*at!\\n[cov*i]!\\n[cov*j]]\s0
-. .\}
-. \}
-. \}
-.\}
-..
-.\"------------
-.de cov@print-firm
-.SP .5
-.ce
-\\*[cov*firm]
-..
-.\"------------
-.de cov@print-abstract
-.SP 2
-.if d cov*abstract \{\
-. misc@ev-keep cov*ev
-. init@reset
-. if \\n[cov*abs-ind]>0 \{\
-. in +\\n[cov*abs-ind]u
-. ll -\\n[cov*abs-ind]u
-. \}
-. ce
-\fI\\$1\fP
-. SP 1.5
-. fi
-. cov*abstract
-. br
-. ev
-.\}
-..
-.\"------------
-.de cov@print-date
-.SP 2
-\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
-..
-.\"-----------------
-.de COVEND
-.br
-.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
-.sp |4.2c
-.cov@print-title
-.cov@print-authors
-.cov@print-firm
-.cov@print-abstract \\*[cov*abs-name]
-.cov@print-date
-.pg@enable-top-trap
-.bp 1
-.pg@enable-trap
-.if d cov*abs-arg .if \\n[cov*abs-arg] \{\
-. cov@print-abstract ABSTRACT
-. SP 2
-.\}
-..
diff --git a/contrib/groff/contrib/mm/mm/se_ms.cov b/contrib/groff/contrib/mm/mm/se_ms.cov
deleted file mode 100644
index 2d16d48e8132..000000000000
--- a/contrib/groff/contrib/mm/mm/se_ms.cov
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" $Id: se_ms.cov,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
-.mso mm/ms.cov
-.nr cur*abstract-ll 11c
diff --git a/contrib/groff/contrib/mm/mmroff.man b/contrib/groff/contrib/mm/mmroff.man
deleted file mode 100644
index a891ff5e82b3..000000000000
--- a/contrib/groff/contrib/mm/mmroff.man
+++ /dev/null
@@ -1,49 +0,0 @@
-.\"
-.\" $Id: mmroff.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
-.\"
-.TH MMROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-mmroff \- reference preprocessor
-.SH SYNOPSIS
-.B mmroff
-[
-.I -x
-]
-.I groff_arguments
-.SH DESCRIPTION
-\fBmmroff\fP is a simple preprocessor for \fBgroff\fP, it is
-used for expanding references in \fBm@TMAC_M_PREFIX@m\fP, see
-\fBgroff_mm(@MAN7EXT@)\fP.
-\fBgroff\fP is executed twice, first with \fB-z\fP and \fB-rRef=1\fR
-to collect all references and then to do the real processing
-when the reference file is up to date.
-.TP
-\fB\-x\fR
-Just create the reference file. This can be used to refresh
-the reference file, it isn't always needed to have accurate
-references and by using this option \fBgroff\fP will only
-be run once.
-.\".SH BUGS
-.SH AUTHOR
-Jörgen Hägg, Lund, Sweden <jh@axis.se>.
-.SH FILES
-.TP
-.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m
-.TP
-.B @TMAC_MDIR@/*.cov
-.TP
-.B @TMAC_MDIR@/*.MT
-.TP
-.B @TMAC_MDIR@/locale
-.SH "SEE ALSO"
-.BR groff_mm(@MAN7EXT@),
-.BR groff_mmse(@MAN7EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/mm/mmroff.pl b/contrib/groff/contrib/mm/mmroff.pl
deleted file mode 100755
index d61fae8f9c36..000000000000
--- a/contrib/groff/contrib/mm/mmroff.pl
+++ /dev/null
@@ -1,137 +0,0 @@
-#! /usr/bin/env perl
-
-use strict;
-# runs groff in safe mode, that seems to be the default
-# installation now. That means that I have to fix all nice
-# features outside groff. Sigh.
-# I do agree however that the previous way opened a whole bunch
-# of security holes.
-
-my $no_exec;
-# check for -x and remove it
-if (grep(/^-x$/, @ARGV)) {
- $no_exec++;
- @ARGV = grep(!/^-x$/, @ARGV);
-}
-
-# mmroff should always have -mm, but not twice
-@ARGV = grep(!/^-mm$/, @ARGV);
-my $check_macro = "groff -rRef=1 -z -mm @ARGV";
-my $run_macro = "groff -mm @ARGV";
-
-my (%cur, $rfilename, $max_height, $imacro, $max_width, @out, @indi);
-open(MACRO, "$check_macro 2>&1 |") || die "run $check_macro:$!";
-while(<MACRO>) {
- if (m#^\.\\" Rfilename: (\S+)#) {
- # remove all directories just to be more secure
- ($rfilename = $1) =~ s#.*/##;
- next;
- }
- if (m#^\.\\" Imacro: (\S+)#) {
- # remove all directories just to be more secure
- ($imacro = $1) =~ s#.*/##;
- next;
- }
- if (m#^\.\\" Index: (\S+)#) {
- # remove all directories just to be more secure
- my $f;
- ($f = $1) =~ s#.*/##;
- &print_index($f, \@indi, $imacro);
- @indi = ();
- $imacro = '';
- next;
- }
- my $x;
- if (($x) = m#^\.\\" IND (.+)#) {
- $x =~ s#\\##g;
- my @x = split(/\t/, $x);
- grep(s/\s+$//, @x);
- push(@indi, join("\t", @x));
- next;
- }
- if (m#^\.\\" PIC id (\d+)#) {
- %cur = ('id', $1);
- next;
- }
- if (m#^\.\\" PIC file (\S+)#) {
- &psbb($1);
- &ps_calc($1);
- next;
- }
- if (m#^\.\\" PIC (\w+)\s+(\S+)#) {
- eval "\$cur{'$1'} = '$2'";
- next;
- }
- s#\\ \\ $##;
- push(@out, $_);
-}
-close(MACRO);
-
-
-if ($rfilename) {
- push(@out, ".nr pict*max-height $max_height\n") if defined $max_height;
- push(@out, ".nr pict*max-width $max_width\n") if defined $max_width;
-
- open(OUT, ">$rfilename") || "create $rfilename:$!";
- print OUT '.\" references', "\n";
- my $i;
- for $i (@out) {
- print OUT $i;
- }
- close(OUT);
-}
-
-exit 0 if $no_exec;
-exit system($run_macro);
-
-sub print_index {
- my ($f, $ind, $macro) = @_;
-
- open(OUT, ">$f") || "create $f:$!";
- my $i;
- for $i (sort @$ind) {
- if ($macro) {
- $i = '.'.$macro.' "'.join('" "', split(/\t/, $i)).'"';
- }
- print OUT "$i\n";
- }
- close(OUT);
-}
-
-sub ps_calc {
- my ($f) = @_;
-
- my $w = abs($cur{'llx'}-$cur{'urx'});
- my $h = abs($cur{'lly'}-$cur{'ury'});
- $max_width = $w if $w > $max_width;
- $max_height = $h if $h > $max_height;
-
- my $id = $cur{'id'};
- push(@out, ".ds pict*file!$id $f\n");
- push(@out, ".ds pict*id!$f $id\n");
- push(@out, ".nr pict*llx!$id $cur{'llx'}\n");
- push(@out, ".nr pict*lly!$id $cur{'lly'}\n");
- push(@out, ".nr pict*urx!$id $cur{'urx'}\n");
- push(@out, ".nr pict*ury!$id $cur{'ury'}\n");
- push(@out, ".nr pict*w!$id $w\n");
- push(@out, ".nr pict*h!$id $h\n");
-}
-
-
-sub psbb {
- my ($f) = @_;
-
- unless (open(IN, $f)) {
- print STDERR "Warning: Postscript file $f:$!";
- next;
- }
- while(<IN>) {
- if (/^%%BoundingBox:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
- $cur{'llx'} = $1;
- $cur{'lly'} = $2;
- $cur{'urx'} = $3;
- $cur{'ury'} = $4;
- }
- }
- close(IN);
-}
diff --git a/contrib/groff/contrib/mm/mmse.tmac b/contrib/groff/contrib/mm/mmse.tmac
deleted file mode 100644
index 8198666336a2..000000000000
--- a/contrib/groff/contrib/mm/mmse.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" mmse.tmac
-.\"
-.do mso mse.tmac
diff --git a/contrib/groff/contrib/mm/mse.tmac b/contrib/groff/contrib/mm/mse.tmac
deleted file mode 100644
index de78cb84c417..000000000000
--- a/contrib/groff/contrib/mm/mse.tmac
+++ /dev/null
@@ -1,184 +0,0 @@
-.\" $Id: mse.tmac,v 2.1 2000/11/17 04:26:02 jhaegg Exp $
-.\"
-.\" swedish version of mm
-.\" See m.tmac for version-information.
-.ds @language se
-.mso m.tmac
-.ISODATE
-.\"
-.ds App Bilaga
-.ds Lf Figurer
-.ds Lt Tabeller
-.ds Lx Uppställningar
-.ds Le Ekvationer
-.\" Page length
-.if !r L .nr @pl 28.5c
-.\" page width
-.if !r W .nr @ll 13c
-.\" page offset
-.if !r O .nr @po 3.5c
-.\" set the above parameters
-.ll \n[@ll]u
-.po \n[@po]u
-.pl \n[@pl]u
-.ds Lifg Figur
-.ds Litb Tabell
-.ds Liex Uppställning
-.ds Liec Ekvation
-.ds Licon Innehållsförteckning
-.ds Qrf Se kapitel \\*[Qrfh], sidan \\*[Qrfp].
-.ds Rp Referenser
-.ds Letfc Vänliga hälsningar
-.ds Letapp Godkänd av:
-.ds Letdate datum
-.ds Letconf KONFIDENTIELLT
-.ds Letsal Till vederbörande:
-.ds Letatt ATTENTION:
-.ds Letsubj Innehåll:
-.ds Letref Refererande till:
-.\"
-.ds Letns!copy Kopia \" space!
-.ds Letns!to " till
-.ds Letns!0 Kopia till
-.ds Letns!1 Kopia (med att.) till
-.ds Letns!2 Kopia (utan att.) till
-.ds Letns!3 Att.
-.ds Letns!4 Atts.
-.ds Letns!5 Enc.
-.ds Letns!6 Encs.
-.ds Letns!7 Annat försättsblad
-.ds Letns!8 Brev till
-.ds Letns!9 Dokument till
-.ds Letns!10 Kopia (med atts.) till
-.ds Letns!11 Kopia (utan atts.) till
-.ds Letns!12 Endast abstract till
-.ds Letns!13 Hela dokumentet till
-.ds Letns!14 CC:
-.\"
-.ds MO1 januari
-.ds MO2 februari
-.ds MO3 mars
-.ds MO4 april
-.ds MO5 maj
-.ds MO6 juni
-.ds MO7 juli
-.ds MO8 augusti
-.ds MO9 september
-.ds MO10 oktober
-.ds MO11 november
-.ds MO12 december
-.nr pg*footer-size 4\" 1v+footer+even/odd footer+1v
-.\"------------------------------------------------
-.\" Dokumentnamn
-.ds LetDNAMN
-.\" Mottagarens datum
-.ds LetMDAT Ert datum:
-.\" Bilaga
-.ds LetBIL Bilaga \"
-.\" Kompletteringsuppgift
-.ds LetKOMP
-.\" Dokumentbeteckning eller dokumentnummer
-.ds LetDBET
-.\" Beteckning (ärendebeteckning i form av diarienummer e.d.
-.ds LetBET Beteckning:
-.\" Mottagarens beteckning.
-.ds LetMBET Er beteckning:
-.\" Antal sidor
-.ds LetSIDOR
-.\" Svensk standard med högerställd löptext. ---------------------
-.de let@init_SVH
-.in 4.57c
-.ll 17.57c
-..
-.de let@head_SVH
-.rm let@header
-.let@print_SV H
-..
-.de let@sg_SVH
-..
-.de let@fc_SVH
-..
-.\" Svensk standard med vänsterställd löptext. ---------------------
-.de let@init_SVV
-..
-.de let@head_SVV
-.rm let@header
-.let@print_SV V
-..
-.de let@sg_SVV
-..
-.de let@fc_SVV
-..
-.\"--------------------------------
-.de let@print_SV
-.nf
-.\" pos T0 -----------------------------------
-.in 0
-.sp |3
-.if d let@wa-div .let@wa-div
-.\"----- addressat
-.if '\\$1'V' .if d let@ia-div \{\
-. sp |10
-. let@ia-div
-.\}
-.\" pos T4 -----------------------------------
-.in 9.14c
-.\"----- kompletteringsuppgift
-.if d let*lo-KOMP \{\
-. sp |2
-\\*[let*lo-KOMP]
-.\}
-.\"----- dokumentnamn
-.if d let*lo-DNAMN \{\
-. sp |3
-\\*[let*lo-DNAMN]
-.\}
-.\"----- datum
-.if d cov*new-date \{\
-. sp |5
-Datum:
-\\*[cov*new-date]
-.\}
-.\"----- mottagarens datum
-.if d let*lo-MDAT \{\
-. sp |7
-\\*[LetMDAT]
-\\*[let*lo-MDAT]
-.\}
-.\"----- addressat
-.if '\\$1'H' .if d let@ia-div \{\
-. sp |10
-. let@ia-div
-.\}
-.\" pos T6 -----------------------------------
-.in 13.72c
-.\"----- mottagarens beteck.
-.if d let*lo-MBET \{\
-. sp |7
-\\*[LetMBET]
-\\*[let*lo-MBET]
-.\}
-.\"----- dokumentbeteck.
-.if d let*lo-BET \{\
-. sp |3
-\\*[LetBET]
-\\*[let*lo-BET]
-.\}
-.\" pos T7 -----------------------------------
-.in 16c
-.\"----- bilaga
-.if d let*lo-BIL \{\
-. sp |2
-\\*[LetBIL]\\*[let*lo-BIL]
-.\}
-.\"
-.\"----- sidnummer
-.sp |3
-.ie d let*lo-SIDOR \\n[%] (\\*[let*lo-SIDOR])
-.el \\n[%]
-.\"
-.\" Ta hand om special
-.if d TP .TP
-.sp |17
-..
-.\" -----------------------------------
diff --git a/contrib/groff/contrib/mom/BUGS b/contrib/groff/contrib/mom/BUGS
deleted file mode 100644
index 33765ba0140f..000000000000
--- a/contrib/groff/contrib/mom/BUGS
+++ /dev/null
@@ -1,317 +0,0 @@
-Assume that anything that doesn't work or behaves oddly is a bug.
-The documentation should be taken as the authoritative source for
-how things ought to be.
-
-Post to the groff mailing list with bug reports, questions and
-suggestions, or contact me directly at:
-
- peter@faustus.dyn.ca
- or
- ptpi@golden.net
-
-If writing me directly, please include the word "groff" or "mom" in
-the Subject line or you risk my spam filters nuking your message.
-Also, please--no html email. That, too, gets nuked.
-
---Peter Schaffter
-
-========================================================================
-
-Version 1.3
-===========
-
-Persistent error in html coding of docs (<nobr> tag).
----Fixed---
-
-Version 1.2-f
-============
-
-Multiple line subheads near page bottom sometimes printing one line
-of subhead at page bottom, and subsequent lines on next page.
----Fixed---
-
-Post-quote spacing still wonky when paragraph spacing is turned on.
----Fixed--- (for good would be nice)
-
-RULE not always resetting quad and quad value.
----Fixed---
-
-Version 1.2-e
-=============
-
-Some string definitions in om.tmac had superfluous spaces after
-them (e.g. $COVERTITLE).
----Fixed---
-
-Spacing under quotes not correct when paragraph spacing is turned
-on.
----Fixed---
-
-
-First word of last line before footnotes is getting chopped.
----Fixed---
-
-Version 1.2-d
-=============
-
-HEADER_FAMILY not changing header family.
----Fixed---
-
-FAMILY, after COLLATE, not changing the family of all and every
-page element or tag.
----Fixed---
-
-Heads and subheads at the start of docs are printing one line lower
-than they should.
----Fixed---
-
-Gaps are appearing at the bottom of pages when there's a linebreak
-followed by a subhead.
----Fixed---
-
-When LS is invoked after a single text line at the top of a page
-containing a T_MARGIN (set with T_MARGIN or PAGE), mom is performing
-spacing adjustments as if the first line doesn't exist.
----Fixed---
-
-Changes made to ALD and LS in version 1.2-c should not apply when
-the document processing macros are used. There is a significant
-conflict with the internal use of ALD when the docheader is only
-one line long (as, for example, when DOCTYPE is CHAPTER).
----Fixed, pending discovery of further conflicts---
-
-Version 1.2-c
-=============
-
-Deferred footnotes not always being output, and groff complains
-"ending diversion FN_OVERFLOW on exit."
----Fixed---
-
-First .LS call after a top margin has been set (with .T_MARGIN
-or .PAGE) causing mom to move off the top margin baseline. Also,
-there are conflicts between ALD, LS and T_MARGIN.
----Fixed---
-
-DROPCAP not properly restoring a running \*[COND] or \*[EXT] after
-COND or EXT are given as arguments to DROPCAP.
----Fixed---
-
-Version 1.2
-===========
-
-.PAD not co-operating with mom's fontstyles, esp. when a full
-family+fontstyle is given to .FT.
----Fixed---
-
-.DROPCAP -- ditto the above.
----Fixed---
-
-Version 1.1.9
-=============
-
-Footnote markers not resetting properly on new pages when COLUMNS
-is enabled.
----Fixed---
-
-When overflowed footnote material is the only footnote material on
-the page or in the column, no footnotes are output.
----Fixed---
-
-The AUTOLEAD used in FOOTNOTE not being disabled after FOOTNOTES
-are output, or after PROCESS_FN_LEFTOVER/PROCESS_FN_IN_DIVER.
----Fixed---
-
-COL_NEXT and COL_BREAK, when invoked during the last column on a
-page, are overprinting the last column instead of breaking to a new
-page when there are footnotes in the column.
----Fixed---
-
-BR_AT_LINE_KERN not "break-and-spreading" text when used in
-justified copy.
----Fixed---
-
-Version 1.1.8
-=============
-
-BLOCKQUOTE_FAMILY not changing blockquote family.
----Fixed---
-
-FOOTNOTE, whether in column mode or not, was using
-#FN_COUNT_FOR_COLS for all footnote markers and handling.
----Fixed---
-
-Deferred footnotes that occured on the second to last page of
-documents not printing.
----Fixed---
-
-Version 1.1.7-a
-===============
-
-Suite number in DOCTYPE LETTER not printing.
----Fixed---
-
-Footer elements not always vertically aligning.
----Fixed---
-
-Footer rule gap not always correctly observed.
----Fixed---
-
-Page numbering, when at top of page, not always falling on
-HDRFTR_MARGIN.
----Fixed---
-
-Default page numbering style for COPYSTYLE draft is DIGIT instead
-of roman.
----Fixed---
-
-Hyphens around page numbering when style is DIGIT, ROMAN or ALPHA
-not vertically centered.
----Fixed---
-
-EXT arg not working with DROPCAP.
----Fixed---
-
-DOC_QUAD not automatically set immediately after START
----Fixed--
-
-Tabs behaving erratically during document processing.
----Fixed---
-
-Version 1.1.7
-=============
-
-When DOCHEADER OFF <distance> is given, if <distance> falls short
-of the top margin of running text, <distance> is not respected and
-bottom margin falls low.
----Fixed---
-
-
-Version 1.1.6-e
-===============
-
-The " mark (doublequote), when entered while not in document
-processing mode (i.e. just straightforward typesetting), outputs
-nothing unless SMARTQUOTES is invoked explicitly.
----Fixed---
-
-Version 1.1.6-c
-===============
-
-In document processing mode, docs that use *none* of the
-docprocessing tags being ignored.
----Fixed---
-
-Version 1.1.6-b
-===============
-
-String tabs not picking up #L_MARGIN when #L_MARGIN not explicitly
-set with L_MARGIN, PAPER or PAGE.
----Fixed---
-
-Infinite loop when B_MARGIN is set lower than FOOTER_MARGIN during
-doc processing.
----Fixed---
-
-Version 1.1.6-a
-===============
-
-Mom partially broken when run with groff 1.19.1. Don't know yet
-what this is, whether bad coding in mom, or a problem with 1.19.1.
-Only solution for now: run mom 1.1.6 with groff 1.18.
-----Fixed---
-
-Top margin of endnotes pages after the first endnotes page when
-PRINTSTYLE is TYPEWRITE and endnotes single-spacing is turned on
-falling one line too high.
----Fixed---
-
-Version 1.1.6
-=============
-
-DOCHEADER OFF (distance) not being respected.
----Fixed---
-
-FINIS killing ENDNOTES page numbering and heads.
----Fixed---
-
-Version 1.1.5
-=============
-
-Draft and revision not appearing in page headers.
----Fixed---
-
-\*[RULE] not working properly with indents and justified copy.
----Fixed---
-
-Post-epigraph spacing in TYPEWRITE causing some first pages to run too
-deep.
----Fixed---
-
-Spacing of docheaders in TYPEWRITE not always consistent.
----Fixed---
-
-Version 1.1.4
-=============
-
-Blockquotes that span pages running too deep.
----Fixed---
-
-Version 1.1.3
-=============
-
-Footnotes not outputting on final page of document body when ENDNOTES
-is invoked.
----Fixed---
-
-Pad not working properly and/or spitting out warnings when fill mode is
-on.
----Fixed---
-
-Version 1.1.2
-=============
-
-PAGENUM_STYLE being ignored unless entered after START.
----Fixed---
-
-Version 1.1
-===========
-
-String tabs not working as advertised when set from within other tabs.
----Fixed---
-
-.COLLATE sometimes depositing a header on the first page of a subsequent doc.
----Fixed with workaround BREAK_QUOTE---
-
-.UNDERLINE_QUOTES in PRINTSTYLE TYPEWRITE not on by default as advertised.
----Fixed---
-
-.TI not cooperating with other indent styles.
----Fixed---
-
-.WS and .SS not cooperating.
----Fixed---
-
-.RW and .EW not working.
----Fixed---
-
-========================================================================
-
-KNOWN PROBLEMS
---------------
-
-The indent macros from the typesetting macro set may not always
-perform well in conjunction with the document processing macros,
-especially when documents are set in columns. Mostly, this is the
-result of inadequate testing. There are only so many "who'd want to
-do this anyway?" scenarios I can think of on my own.
-
-Epigraphs at the bottoms of page may sometimes run exactly one line
-deeper than they should. The alternative (from my point of view) is
-to have them run 1 line shorter than they should. The problem stems
-from the fact the epigraphs are leaded differently than all other text,
-and there's only so much adjusting that can be done with the whitespace
-surrounding them to get them to bottom align. Since stylistically,
-epigraphs should never appear at the bottom of a page/column without at
-least some running text beneath them in order to make sense of the role
-they play in page layout, this not likely to be fixed for some time.
-
diff --git a/contrib/groff/contrib/mom/ChangeLog b/contrib/groff/contrib/mom/ChangeLog
deleted file mode 100644
index d99c02399ff8..000000000000
--- a/contrib/groff/contrib/mom/ChangeLog
+++ /dev/null
@@ -1,812 +0,0 @@
-*Thu Aug 11 2005
-
-o Makefile.sub (HTMLDOCFILES): Add `refer.html'
-
-*Mon Jun 20 2005
-
-o Makefile.sub (HTMLDOCFILES_, EXAMPLEFILES_, PROCESSEDEXAMPLEFILES_): New
- variables.
- (install_data): Install files in `mom' subdirectories.
- Make it work actually.
- (uninstall_sub): Updated.
-
-*Thu Jun 16 2005
-
-o Makefile.sub (install_data, uninstall_sub): Use $(exampledir) for example
-files. Reported by Keith Marshall.
-
-*Mon May 16 2005
-
-o Update groff_mom.man.
-
-*Thu May 12 2005
-
-o Added margin notes capability
-
-o Added mom-specific refer support; refer calls can be embedded in
- running text, sent to footnotes or endnotes, or collected for
- output on a bibliography page; also added mom-specific refer
- control macros
-
-o Added bibliography page capability, with full suite of control
- macros
-
-o Added referencing of footnotes and endnotes by line number
-
-o Added capability to have footnotes run on when footnotes are
- being referenced by line number
-
-o Added a post footnote space option, in case users want a little
- space between their footnotes
-
-o Added ENDNOTE_MARKER_STYLE, so user can choose between endnotes
- identified by a numerical marker in the text, or by line number
-
-o Added control macros to accommodate differing needs for endnotes
- identified by line number
-
-o Added ENDNOTE_TITLE_SPACE, so user can control starting position
- of the endnotes page title
-
-o Extended LIST so that it accepts lowercase alpha, uppercase roman
- numeral and lowercase roman numeral enumerators; also added a
- "prefix" argument (which comes *after* the separator argument)
-
-o Changed RESET_LIST so that it can reset a list to any number,
- letter, or roman numeral, instead of just 1, a, A, I and i
-
-o Change to handling of footnote/endnote markers in text; input
- lines before FOOTNOTE still require \c, but input line after
- FOOTNOTE OFF must be entered as a literal continuation of the
- line before FOOTNOTE, including any required word space or
- punctuation (this so users can get the footnote marker in text
- either before or after the punctuation without hassle)
-
-o Added QUOTE_AUTOLEAD and BLOCKQUOTE_AUTOLEAD, so user can have
- quotes and blockquotes leaded differently from running text
-
-o Reworked QUOTE and BLOCKQUOTE to accommodate _AUTOLEAD control;
- spacing above and below quotes is equalized *on a per quote
- basis* (not completely happy with this, but at least it gives
- users some flexibility in designing (block)quotes)
-
-*Fri Mar 18 2005
-
-o Added mom.vim to /examples
-
-*Thu Jan 20 2005
-
-o Added \*[TB+] and \*[B] to give inline functionality of .TN and
- .EL, respectively.
-
-o Added SECTION and SECTION_CHAR as aliases of LINEBREAK and
- LINEBREAK_CHAR
-
-o Added a NOBREAK option to PAD, so when PAD is called, it's possible
- to instruct mom not to advance on the page.
-
-*Wed Jan 19 2005
-
-o New macro, ADD_SPACE, so that extra space can be added at the
- top of a new page in document processing; the .ns call in HEADER
- was making additional space impossible
-
-o Reworked handling of ALD/SPACE/SP and LS when they're used at
- the tops of pages during pure (i.e. non-docprocessing)
- typesetting. First lines were still wandering. Should also be
- more intuitive: ALD after LS advances the specified distance from
- the top baseline; LS after ALD doesn't change the position of the
- first baseline (i.e. merely sets the lead for the text that
- follows).
-
-*Tue Dec 14 2004
-
-o Fixed a small problem with spacing under quotes when paragraph
- spacing is turned on.
-
-*Fri Dec 10 2004
-
-o Put all calls in VFP_CHECK inside their own environment. Without
- the .ev call, the trap invoked VFP_CHECK was chopping off the
- first word of the last line before footnotes.
-
-*Dec 6 2004
-
-o Small fixes to elvis_syntax.new (dealing with strings, \{\ and \}
-
-o Changed
- . ie \\n[#START] \{\
- . if \\n[#DOC_HEADER]=0 \{ . \}
- . \}
- in HEAD to
- . ie \\n[#START] \{\
- . if \\n[#DOC_HEADER]=0 \{ .RLD 1v \}
- . \}
- so that HEADs at the start of docs with no docheaders falls on
- the correct baseline.
-
-*Dec 3 2004
-
-o Removed spurious parens from if ( \\n[#TRAP_DISTANCE] < \\n[#DOC_LEAD]*2 )
- in SUBHEAD.
-
-*Oct 14 2004
-
-o Reworked the LL macro so that the argument can take a prepended +
- or - sign (i.e. the argument is relative to the current line
- length).
-
-*Oct 13 2004
-
-o Added an .if \\n(.n=0 if to the ie clause in LS that controls how mom
- responds to initial LS invocation at page top if T_MARGIN has
- been set. Now, if there's text on the "top" baseline, LS behaves
- as expected when invoked afterwards.
-
-*Oct 11 2004
-
-o Added an ie !r#DOCS clause to the processing of "top baseline"
- ALDs. ALD is used extensively (internally) in the document
- processing macros, and does not need to check--indeed, should not
- check--for top baseline placement prior to execution.
-
-*Sep 29 2004
-
-o Additions to elvis_syntax.new
-
-*Sep 12 2004
-
-o Small fixes to the documentation.
-
-*Aug 21 2004
-
-o Removed superfluous second arguments from strings UP, DOWN, FWD
- and BCK
-
-*Aug 8 2004
-
-o Version changed from the 1.1.x series to 1.2. All of the
- features I originally wanted mom to have originally have been
- implemented, and appear to be stable.
-
-o Major overhaul to the setting of page traps and the handling of
- footnotes, both "normal" footnotes and footnotes that occur
- inside QUOTE, BLOCKQUOTE and EPIGRAPH.
-
-o Addtion of font "styles" to om.tmac, plus changes to the FAMILY
- and FT macros to manage them. New section in the doc appendices
- on adding fonts and managing the new font styles.
-
-o Mom now uses a "fallback font" whenever there's an illegal call
- to FAMILY.
-
-o RW and EW now affect only the font in effect. A change of family
- or font disables them.
-
-o BR_AT_LINE_KERN now properly does a .brp (spread and break) when
- used in justified text.
-
-o NEWPAGE, which used to be an alias for .bp, has been moved into
- its own macro, in order to make it more responsive to some unusal
- situations.
-
-o Some changes to elvis_syn.new, including that the file extensions
- recognized by elvis now include both .mom and .tmac. This makes
- om.tmac much easier to read.
-
-*Jul 6 2004
-
-o FT and FAM(ILY) reworked to take advantage of if S, if F and
- \n[.sty] additions to groff (1.19.2). Warnings are emitted if a
- style hasn't been registered, or if a font style doesn't exist in
- the current family. Invalid .FAM(ILY) calls now use a "fallback"
- font" (although no warning is issued); fallback is user-settable
-
-o New macro, FALLBACK_FONT. Not only controls the fallback font
- for invalid family calls, but also controls whether mom aborts on
- invalid .FT calls after issuing a warning.
-
-o RW/EW now affect only the current font (or font style)
-
-o BR_AT_LINE_KERN now (properly) does a break-and-spread when text
- is justified.
-
-o Fairly extensive list of .sty's added to om.tmac. Hopefully,
- this will make life easier for users wishing to add new fonts
- and/or entire new families to their groff site-font/devps
- directory.
-
-*Jun 6 2004
-
-o Altered kerning slightly for footnote markers in text. Daggers
- and double-daggers were getting a bit jammed
-
-*Fri Jun 4 2004
-
-o Makefile.sub (HTMLDOCFILES, EXAMPLEFILES, PROCESSEDEXAMPLEFILES): Updated.
-
-*Thu Jun 3 2004
-
-o Rewrote the routines dealing with _FAMILY, _FONT, _SIZE, _COLOR
- and _QUAD. A single macro for each checks for the calling alias
- (e.g. TITLE_FAMILY in _FAMILY), and performs the appropriate
- action.
-
-o All "COLOUR" aliases of "COLOR", no matter where, have been
- removed.
-
-o Added cover and doc cover page generation.
-
-o Added reference macros COVERTITLE, DOC_COVERTITLE, MISC and
- COPYRIGHT (for use with covers only)
-
-o Fixed EL and TN so they don't spring page traps; in nofill modes
- the preceding input line must be terminated by \c.
-
-o Added #T_MARGIN_LEAD_ADJ to DO_B_MARGIN, DO_T_MARGIN and NEWPAGE
- to ensure accurate placement of first lines on new pages when
- docprocessing is not taking place.
-
-o Made NEWPAGE it's own macro; formerly just an alias of .bp.
-
-o Made BREAKQUOTE obsolete; rewrote sections of footnote handling,
- including adding support macros to deal with processing of
- footnotes that were started inside quotes, blockquotes and
- epigraphs.
-
-o Added a TERMINATE .em to docprocessing (except letters) to ensure
- that deferred footnotes print on the last page of a doc.
-
-
-*Mar 15 2004
-
-o Added color support
-
-o Adjusted vertical placement of hyphens around page numbering
- so that they are better centered on the height of the page
- number.
-
-o Re-wrote portions of the document processing macros so that tabs
- behave in a consistent and intuitive manner. Tab structures are
- now properly preserved from page to page and column to column.
-
-*Feb 20 2004
-
-o Rewrote the macros associated with DOCTYPE LETTER so that the
- user can enter DATE, TO and FROM in any order s/he likes. For
- backward compatibility, if the older, fixed order (DATE-TO-FROM)
- is used, the date goes flush right with two linespaces after
- it, while the other fields go flush left with a single linespace
- separating them.
-
-o Fixed handling of DOCHEADER OFF <distance> when <distance> fell
- short of the top margin of running text (the change is actually
- in the SHIM macro, which is called by DOCHEADER).
-
-o Added a selection of iso 639 two-letter language codes as
- optional arguments to SMARTQUOTES, so that the use can enter
- her/his language code to get language specific quoting styles
-
-o Changed the way the strings for \*[ST<n>], \*[ST<n>X], \*[FU<n>]
- and \*[BU<n>] are read. Formerly, they were entered literally.
- Now they're entered as an array.
-
-*Jan 24 2004
-
-o Added lists and associated macros. Mom now does (nested) lists.
-
-o Added German-style lowered double quotes and two styles of
- guillemets to SMARTQUOTES.
-
-o Added macro SIZE, intended to be called inline as \*[SIZE <n>].
- This is to bring mom's inline size change syntax into line with
- her other inlines.
-
-o Added ESC_CHAR as an alias of .ec
-
-o Added doc entries for lists.
-
-o Updated SMARTQUOTES entry in docs.
-
-o Updated reserved words in docs.
-
-o Fixed a few more typos in docs.
-
-*Tue Oct 21 2003
-
-o Changed \n[#DRAFT] and \n[#REVISION] to strings \*[$DRAFT] and
- \*[$REVISION], allowing for the possibility of blank entries that
- don't mess up headers/footers with zeros if user doesn't want any
- numbers.
-
-o Extended handling of draft and revision numbers and strings in
- headers/footers for increased flexibility. It's possible now to
- have just about any combo of DRAFT_STRING, DRAFT, REVISION_STRING
- and REVISION, and have them come out in headers/footers as one
- intuitively expects/wants.
-
-*Fri Jul 25 2003
-
-o Added a .bp after .if \\n[#START]=1 in FOOTER. Without it,
- in document processing mode, documents that use *none* of the
- docprocessing tags (yes, there are times when users want to do
- this) ignored the footer trap.
-
-*Fri Jun 6 2003
-
-o Changed register #DOCHEADER_LEAD_ADJ to string
-
-*Wed May 21 2003
-
-o DOC_TITLE changed to be used exclusively with DOCTYPE DEFAULT
-
-o Fixed problem with restoration of previous doc pagenum
- style when endnotes use a different pagenum style (set with
- ENDNOTES_PAGENUM_STYLE)
-
-o Fixed handling of headers/footers with respect to endnotes. Now,
- when either headers or footers are on, mom picks up the correct
- page header/footer on the last page prior to ENDNOTES, gets the
- pageheaders correct for endnotes pages *including the last one*,
- and picks up correct page headers/footers for the subsequent docs
- after COLLATE
-
-*Sat May 17 2003
-
-o Added TOC (finally) and a nearly complete set of associated
- control macros
-
-o Added new control macros to endnotes:
-
- ENDNOTES_STRING_CAPS - capitalize the endnotes string
- ENDNOTES_NO_COLUMNS - allows docs in columns and endnotes not
- ENDNOTES_PAGENUM_STYLE - set page numbering style for endnotes
- ENDNOTES_FIRST_PAGENUMBER - set first pagenumber for endnotes
- ENDNOTES_ALLOWS_HEADERS - page headers on endnotes pages off or on
- ENDNOTES_NO_FIRST_PAGENUM - allows non-printing first page number when page footers are being used instead of headers
- ENDNOTES_SINGLE_SPACE - for TYPEWRITE, if doc double-spaced
- SUSPEND/RESTORE_PAGINATION - turns page numbering off for endnotes
-
-o Added an ADJUST option to ENDNOTE_LEAD
-
-o Added DOC_TITLE (like TITLE, but sets document-wide title for collated docs)
-
-o Added HDRFTR_CENTER_PAD, to allow adjustments to placement of
- HDRFTR_CENTER_STRING
-
-o Added BLANKPAGE macro, to output blank pages (silently numbered)
-
-o Extensive changes to DEFAULTS, START, COLLATE, HEAD, SUBHEAD and
- PARAHEAD because of new TOC and extended flexibility of ENDNOTES
- page design
-
-o Fixed DOCHEADER OFF (distance), FINIS
-
------------------------------------------------------------------------
-
-*Sat Feb 22 2003
-
-o (Re)-fixed handling of post epigraph spacing after #START for
- TYPEWRITE double-spaced.
-
-------------------------------------------------------------------------
-
-*Sun Feb 16 2003
-
-o Added James Ramsey's proposed CHAPTER_TITLE macro, along with his
- rewritten START macro and his utility macros to make START easier
- to read.
-
-o Expanded handling of CHAPTER_TITLE to encompass TYPEWRITE, as well as
- plugging it into the docheaders. Made CHAPTER_TITLE backwardly
- compatible so that pre-1.1.5 docs using CHAPTER_STRING to create a
- chapter title remain unaffected when groffed with 1.1.5.
-
-o Created control macros for CHAPTER_TITLE FAMILY, FONT and SIZE.
- Added defaults for handling of CHAPTER title to DEFAULTS. Documented
- CHAPTER_TITLE and everything that goes along with it.
-
-o Fixed broken draft and revision in headers/footers.
-
-o Fixed \*[RULE] so that it behaves properly with indents and justified
- copy.
-
-o Fixed/tweaked handling of epigraph spacing in TYPEWRITE.
-
-o Fixed broken spacing of docheaders in TYPEWRITE.
-
-*Mon Feb 3 2003
-
-o Fixed an oversight in CLOSING for DOCTYPE LETTER (closing wasn't
- being set flush left)
-
-*Sun Sep 29 2002
-
-o Changed .ne in .HEAD when PRINTSTYLE TYPESET from 5 to 4. With 5,
- heads required at least 2 lines of text underneath or they'd be
- defered to the next page, which created too much whitespace at the
- end of the page. Heads will now be processed on the same page if the
- head plus at least one line of text underneath fits. I figure it's
- easier for the user to break to a new page manually if this behaviour
- is unsatisfactory than to massage the page to fix the excess
- whitespace.
-
-*Sun Aug 25 2002
-
-o Changed .IX to .IQ. The older form still works, but emits a message
- advising the user to update to the newer. (The macro in om.tmac
- still remains IX; IQ is an alias.) Docs updated to reflect the
- change.
-
-*Tue Aug 20 2002
-
-o Added new (better) way to handle inline kerning. \*[BU #] and
- \*[FU #] allow passing an argument to the inline string. The older
- forms \*[BU#] and \*[FU#] still work, though.
-
-o Changed handling of inline horizontal and vertical movements.
- Horizontal movements are now done with \*[BCK #<unit>] and
- \*[FWD #<unit>]; verticals with \*[UP #<unit>] and \*[DOWN #<unit>].
- The older forms \*[FP#] and \*[BP#] still work (horizontals), as do
- \*[ALD#] and \*[RLD#] (verticals).
-
-------------------------------------------------------------------------
-
-*Mon Aug 19 2002
-
-o Fixed ENDNOTES so footnotes output properly when ENDNOTES is called
-
-o Added ENDNOTES_HDRFTR_CENTER so that default no-print of header
- center string on endnotes page(s) when DOCTYPE is CHAPTER can
- be disabled (i.e. header center will be printed).
-
-*Sat Aug 10 2002
-
-o Added .nf to top of PAD, with a test beforehand for current fill
- mode. If fill mode was on, it's restored after PAD completes
- processing. Updated reserved.html to include number register
- #FILL_MODE.
-
-*Fri Jul 12 2002
-
-o More fixes to underlining.
-
-*Fri Jul 5 2002
-
-o Added capability of endnotes and pertinent control macros to om.tmac.
-
-o Added document entries pertaining to endnote macros.
-
-o Incorporated endnote macros into elvis_syntax.
-
-o Small doc fixes.
-
-o Tidied up indenting of om.tmac.
-
-o Fixed handling of underlining of italics in PRINTSTYLE TYPEWRITE
- (there was a problem with footnotes getting underlined when they
- shouldn't have been).
-
-o Removed ENDNOTES from TODO
-
-o Fixed the character translations for UNDERLINE so they work properly
- with digraphs.
-
-*Mon Jul 1 2002
-
-o Expanded docprocessing.html entry "Special Note on Chapters". Tidied
- up html a bit.
-
-*Sat Jun 15 2002
-
-o Small fix to PAD to make the use of inlines within the pad string
- more intuitive.
-
-o Added \*[RULE] ( = \l'\n(.lu' ) so that full measure rules (either to
- full line length or within tabs) are easier to set.
-
-*Sat Jun 8 2002
-
-o Macro .PS renamed to .PT_SIZE. Alias .TS removed.
-
-o .tr bits in .CAPS rewritten in the form .tr é\[`E].
-
-o General cleanup of docs to reflect changes
-
-o Small changes/additions to elvis_syn
-
-*Thu Jun 6 2002
-
-o In DOCTYPE, in .if '\\$1'LETTER', added .FOOTER_RIGHT_SIZE +0.
- Without it, the suite page was printing at the default
- FOOTER_RIGHT_SIZE of -.5, which didn't look good.
-
-*Wed Jun 5 2002
-
-o Makefile.sub (TFLAG): Add `$(top_builddir)/tmac'.
-
-*Tue Jun 4 2002
-
-o Makefile.sub (groff_bin_dirs): Fix typo (forgotten `src' element).
-
-*Mon Jun 3 2002
-
-o Makefile.sub (uninstall_sub): Don't use `momdocdir' but `htmldocdir'.
- Add missing backslash.
-
-*Sat Jun 1 2002
-
-o Makefile.in (prepare_make_examples): Test for `penguin.ps', not
- `examples/penguin.ps'.
-
-*Wed May 29 2002
-
-o Rewrote portions of PAGENUM_STYLE and COPYSTYLE so that PAGENUM_STYLE
- behaves as advertised.
-
-*Fri May 24 2002
-
-o /Makefile.sub (momdocdir): Removed.
- (HTMLDOCFILES): Prepend `momdoc/'.
- (EXTRAEXAMPLEFILES): Removed. Added entries to...
- (EXAMPLEFILES): This.
- (.SUFFIXES, .mom.ps): New.
- (prepare_make_examples): Updated.
- (examples/*.ps): Removed; .mom.ps will handle this.
- (install_data): Updated.
-
-*Thu May 23 2002
-
-o Applied two small bug fixes to om.tmac (patches 1.1.1a and 1.1.1b).
-
-o mom is now part of groff.
-
-o Some renaming to avoid problems with 8+3 filesystems:
-
- examples/docprocessing_typeset.mom -> examples/typeset.mom
- examples/docprocessing_typewrite.mom -> examples/typewrite.mom
- examples/typesetting_macros.mom -> examples/macros.mom
- examples/penguin_small2_bw.ps -> examples/penguin.ps
-
-o Removed `INSTALL' and `README' since groff takes care of installation
- now.
-
-o Added Makefile.sub.
-
-o Added mom.tmac (which simply calls om.tmac).
-
-o Added groff_mom.man for orthogonality; it simply points to the HTML
- documentation.
-
-*Thu May 16 2002
-
-o Added macro DRAFT_WITH_PAGENUMBER so user can have draft/revision
- info attached to the pagenumber in COPYSTYLE DRAFT, instead of having
- it HEADER center. Always having it HEADER center was creating problems
- with long doc titles, esp. with PRINTSTYLE TYPEWRITE (which is when
- COPYSTYLE DRAFT is most likely to be used). Now user has the choice,
- in these circumstances, either to reduce HEADER_SIZE, or to displace
- the draft/revision info. Also rewrote portions of COPYSTYLE so that
- if no revision number is given in the reference macros, "Rev. #"
- doesn't appear when COPYSTYLE DRAFT.
-
-*Fri May 10 2002
-
-o Added capability of user-defined, single string recto/verso
- headers/footers.
-
-o Added new entries to docs about the above. Made some additional
- small changes to toc.html, rectoverso.html, and headfootpage.html
- to supplement the new entries.
-
-o Small fix to handling of footer separator rule -- was 1 point too low
- owing to fuzziness of #CAP_HEIGHT as returned by SIZESPECS.
-
-o Added some more useful stuff to elvis_syntax.
-
-*Sun May 05 2002
-
-o Fix to DEFAULTS so that L_MARGIN and R_MARGIN are reprocessed if
- DOCTYPE LETTER. R_MARGIN, as set by DOCTYPE LETTER had no preceding
- PAGEWIDTH or PAPER from which to get #PAGE_WIDTH for figuring out
- line length.
-
-o Additional fix to DEFAULTS in handling DOCTYPE LETTER so that if user
- sets line length prior to START, no reprocessing of R_MARGIN occurs.
- This necessitated adding a new number register: #USER_SET_L_LENGTH
-
-*Sat May 04 23:48:05 EDT 2002
-
-o Added .cflags 4 /\(en -- was driving me nuts that lines wouldn't
- break after these characters; I'm assuming others feel the same way
-
-* Fri May 03 2002
-
-o Made some small fixes to space handling around quotes, mostly to do
- with quotes immediately after START and quotes after (sub)heads.
-
-* Wed May 01 2002
-
-o Fixed a small bug that was causing the first .PP after START to begin
- at the top margin of the page regardless of any type that preceded
- .PP when docheaders were off.
-
-o Fixed HEADER so that when HEADERS are off the first line of type on
- pages after the first falls properly at the top margin
-
-*Sat Apr 27 2002
-
-o Renamed docprocessing_macros.mom in /examples to
- docprocessing_typeset.mom. Added docprocessing_typewrite.mom, as
- well as a README file.
-
-o Fixed UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) so they really are
- on by default as the docs say.
-
-o Changes to doc entry on COLLATE:
-
- - removed bit about using COLLATE after a cover page (I wrote the
- entry *before* I wrote the macro!). Cover pages should be
- followed by NEWPAGE, not COLLATE.
-
- - added caution about mixing PRINTSTYLEs
-
- - added caution about using DOC_FAMILY to change family of all
- document elements after COLLATE
-
-o Made HEADER_SIZE (and, by extension, FOOTER_SIZE) available to
- PRINTSTYLE TYPEWRITE. Changed appropriate doc entries to reflect
- this.
-
-*Wed Apr 24 2002
-
-o Small change to DO_QUOTE to correct a problem with quotes and
- blockquotes that fall in the middle of paragraphs (i.e. text after
- the quote is not a new para). Basically, added a bit that stores the
- current para indent, sets para indent to 0, invokes a PP, then
- restores the original para indent.
-
-o Added new macro, BREAK_QUOTE, to deal with the problem of
- footnotes in quotes and blockquotes that cross pages or columns.
-
- Quotes and blockquotes are read into diversions, which means they
- get their footnote information from the page/column on which they
- were started. If a footnoted quote crosses a page/column, what
- sometimes happens is that the footnote itself is output at the
- bottom of page/column where the quote started, whereas the text
- marker for the footnote appears on the next page/column where the
- quote ends. Furthermore, the text marker is the one appropriate
- to the previous page. BREAK_QUOTE is a workaround.
-
-o Added directory /examples to archive.
-
-o Added typesetting_macros.mom, docprocessing_macros.mom, elvis_syntax
- and penguin_small2_bw.ps to /examples.
-
-o Added BREAK_QUOTE to docs, made some additions to reserved words
- list, and corrected a few little doc errors.
-
-*Mon Apr 22 2002
-
-o Added default .L_MARGIN 1i and .R_MARGIN 1i to PAPER, PAGE, and
- PAGEWIDTH. L_MARGIN is essential otherwise left indents and tabs
- don't have a register #L_MARGIN to work with. The default right
- margin is a convenience only. Updated the doc entries for L_MARGIN
- and R_MARGIN to reflect the change.
-
-*Sun Apr 21 2002
-
-o Changes to COLLATE:
-
- - added some "resets" (LL, LS, QUAD)
- - added a check for whether pagination is at page top (either
- because FOOTERS are on or because PAGENUM_POS was user set).
- If pagination is on, and PAGENUM_POS is TOP, it's turned off
- for next page (start of next collated document) and restored
- for subsequent pages unless PAGENUM_ON_FIRST_PAGE is on, in
- which case the page number appears at page top.
-
-o The macro TRAPS is always invoked at the end of DEFAULTS (which is
- called by START). Formerly, TRAPS was only invoked at the start
- of a doc, not after COLLATE. Now runs after COLLATE as well.
-
-o Distance from $DOC_TYPE in DOCTYPE NAMED "<string>" to start of
- running text was one linespace too deep. Fixed (in START).
-
-o When 1st arg to PAGENUM_POS was user set to TOP, running text was
- printing 1 linespace too high, even when PAGINATION was OFF. Same
- problem when HEADERS were OFF (i.e. nothing in the header margin at
- all). Fixed by removing -\\n[#DOC_LEAD]u from all .sp |\\n[#T_MARGIN]u
- calls of .el portion after .ie \\n[#HEADERS_ON].
-
-o Added new macro: PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS are
- being used instead of HEADERS, mom doesn't print the page number at
- the top of the first page of a doc, or the first page of collated
- docs. New macro allows user to get mom to put the page number on
- "first" pages if that's desired. Updated docs to include the macro.
-
-o More little fixes to docs.
-
-*Thu Apr 18 2002
-
-o Fixed TI (temporary indent) so that it continues to work as expected,
- even when called while another type of indent is in effect.
-
-*Tue Apr 16 2002
-
-o String tabs weren't working as advertised when set from within
- a tab. Fixed. Two new registers added: #ST_OFFSET and #IN_TAB.
- String tabs now behave poperly and intuitively when set within tabs.
-
-o Added a note to docs about surrounding \w'...' escape with double-
- quotes when it's used as an argument to macros
-
-o Added a note to docs that SILENT does not deposit a .br
-
-*Mon Apr 15 2002
-
-o Added new macro BR_AT_LINE_KERN if user wants mom to deposit .br's
- before .RW and/or .EW.
-
-o Added 1/4 points to inline escapes \*[ALD] and \*[RLD].
-
-o Added 1/4 points to inline escapes \*[FP] and \*[BP]
-
-o Updated docs to reflect the above changes.
-
-*Fri Apr 12 2002
-
-o Fixed .RW and .EW which weren't working because of a missing \ in
- \\n(.f register. Also made it so that .RW and .EW affect all fonts
- in positions 1, 2, 3, and 4 at once, hence line kerning now affects
- all fonts that appear after it, not just the font that was current at
- the time of the macros' invocation.
-
-o .SS and .WS now working properly. .WS no longer has any effect on
- .SS, which remains constant regardless of .WS. Furthermore, .SS no
- longer gets its value by adding \*[$SS_VAR] + \n[.ss]. Instead,
- it remains constant. Don't know what I was thinking when I wrote
- the routine in the first place.
-
-o Updated and rewrote doc entry pertaining to SS
-
-*Wed Apr 10 2002
-
-o Renamed tmac.om to om.tmac to bring macro file's name into line
- with current groff policy
-
-o Added more standard paper sizes to PAPER.
-
-o Fixed T_MARGIN, LS, and AUTOLEAD so that if T_MARGIN is set before LS
- or AUTOLEAD at the top of a file, the first line of type falls
- properly on the baseline set by T_MARGIN. Previously, LS and
- AUTOLEAD automatically advanced by the value passed to them before
- setting the first line of type, meaning that the first line of type
- fell at T_MARGINu+1v instead of T_MARGIN.
-
-o Updated docs to reflect changes.
-
-o Removed #TEST_FOR_NUMERIC from list of reserved words.
-
-o Added "t" and #T_MARGIN_SET to list of reserved words.
-
-*Sat Apr 6 2002
-
-o Added FACTOR arg to AUTOLEAD, so if user wants autolead to be a factor
- of point size, instead of being the sum of pointsize + autolead, s/he
- has the choice. Incorporated appropriate changes to PS and LS.
-
-o Added new register #AUTOLEAD_FACTOR to reserved words. Modified
- comments for AUTOLEAD, PS, and LS to reflect changes. Also
- corrected an error where #AUTOLEAD_VALUE had mistakenly been written
- $AUTOLEAD_VALUE in comments in the macro file, and removed erroneous
- | <anything>. Updated AUTOLEAD entry in momdoc/typesetting.html
- to reflect the changes.
-
-*Wed Apr 3 2002
-
-o Cleaned up html errors in the docs.
-
-o Added "Next," "Prev" and "Top" links to top and bottom of doc files.
-
-o Fixed some typos in the docs.
diff --git a/contrib/groff/contrib/mom/Makefile.sub b/contrib/groff/contrib/mom/Makefile.sub
deleted file mode 100644
index b71ccda3629e..000000000000
--- a/contrib/groff/contrib/mom/Makefile.sub
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Werner Lemberg (wl@gnu.org)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's| *|$(SH_SEP)|g'`
-
-groff_bin_dirs=\
- $(top_builddir)/src/roff/groff \
- $(top_builddir)/src/roff/troff \
- $(top_builddir)/src/devices/grops
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
-
-GROFF=GROFF_COMMAND_PREFIX=''; \
- export GROFF_COMMAND_PREFIX; \
- GROFF_BIN_PATH=$(GROFF_BIN_PATH); \
- export GROFF_BIN_PATH; \
- $(GROFFBIN) $(FFLAG) $(TFLAG)
-
-MAN7=\
- groff_mom.n
-
-NORMALFILES=\
- mom.tmac \
- om.tmac
-
-HTMLDOCFILES=\
- momdoc/appendices.html \
- momdoc/color.html \
- momdoc/cover.html \
- momdoc/definitions.html \
- momdoc/docelement.html \
- momdoc/docprocessing.html \
- momdoc/goodies.html \
- momdoc/headfootpage.html \
- momdoc/inlines.html \
- momdoc/intro.html \
- momdoc/letters.html \
- momdoc/macrolist.html \
- momdoc/rectoverso.html \
- momdoc/refer.html \
- momdoc/reserved.html \
- momdoc/toc.html \
- momdoc/typemacdoc.html \
- momdoc/typesetting.html \
- momdoc/using.html
-
-EXAMPLEFILES=\
- examples/letter.mom \
- examples/sample_docs.mom \
- examples/typesetting.mom \
- examples/README.txt \
- examples/elvis_syntax \
- examples/elvis_syntax.new \
- examples/penguin.ps
-
-PROCESSEDEXAMPLEFILES=\
- examples/letter.ps \
- examples/sample_docs.ps \
- examples/typesetting.ps
-
-HTMLDOCFILES_=`echo $(HTMLDOCFILES) | sed 's|momdoc/||g'`
-EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'`
-PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'`
-
-CLEANADD=\
- penguin.ps \
- $(PROCESSEDEXAMPLEFILES) \
- examples/stamp
-
-.SUFFIXES: .mom .ps
-.mom.ps:
- $(GROFF) -Tps -mom $< >$@
-
-
-all: $(PROCESSEDEXAMPLEFILES)
-
-$(PROCESSEDEXAMPLEFILES): penguin.ps examples/stamp
-
-penguin.ps:
- cp $(srcdir)/examples/penguin.ps .
-
-examples/stamp:
- test -d examples || $(mkinstalldirs) examples
- touch $@
-
-install_data: $(NORMALFILES) $(HTMLDOCFILES) \
- $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
- -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
- for f in $(NORMALFILES); do \
- rm -f $(tmacdir)/$$f; \
- $(INSTALL_DATA) $(srcdir)/$$f $(tmacdir)/$$f; \
- done
- -test -d $(htmldocdir)/mom || $(mkinstalldirs) $(htmldocdir)/mom
- for f in $(HTMLDOCFILES_); do \
- rm -f $(htmldocdir)/mom/$$f; \
- $(INSTALL_DATA) $(srcdir)/momdoc/$$f $(htmldocdir)/mom/$$f; \
- done
- -test -d $(exampledir)/mom || $(mkinstalldirs) $(exampledir)/mom
- for f in $(EXAMPLEFILES_); do \
- rm -f $(exampledir)/mom/$$f; \
- $(INSTALL_DATA) $(srcdir)/examples/$$f $(exampledir)/mom/$$f; \
- done
- for f in $(PROCESSEDEXAMPLEFILES_); do \
- rm -f $(exampledir)/mom/$$f; \
- $(INSTALL_DATA) examples/$$f $(exampledir)/mom/$$f; \
- done
-
-uninstall_sub:
- -for f in $(NORMALFILES); do \
- rm -f $(tmacdir)/$$f; \
- done
- -for f in $(HTMLDOCFILES_); do \
- rm -f $(htmldocdir)/mom/$$f; \
- done
- -rmdir $(htmldocdir)/mom
- -for f in $(EXAMPLEFILES_) $(PROCESSEDEXAMPLEFILES_); do \
- rm -f $(exampledir)/mom/$$f; \
- done
- -rmdir $(exampledir)/mom
diff --git a/contrib/groff/contrib/mom/NEWS b/contrib/groff/contrib/mom/NEWS
deleted file mode 100644
index 2433eb001e30..000000000000
--- a/contrib/groff/contrib/mom/NEWS
+++ /dev/null
@@ -1,446 +0,0 @@
-Release 1.3
------------
-
-Added line numbering capabilities, with controls.
-
-Footnotes and endnotes can now be referenced by line number.
-
-Added ability to adjust vertical position of the title that appears
-on the first endnotes page.
-
-Footnotes can run on when being referenced by line number.
-
-Footnotes now have a post-footnote spacing option, for adding
-a little space between footnotes.
-
-Extended LIST so it accepts alpha, ROMAN and roman enumerators.
-
-Added margin notes capability.
-
-Added refer support.
-
-Added bibliography page support.
-
-Added QUOTE_AUTOLEAD and BLOCKQUOTE_AUTOLEAD, so user can have
-quotes and blockquotes leaded differently from running text.
-
-Change: the input line immediately after FOOTNOTE OFF must be
-entered as a literal continuation of the line prior to FOOTNOTE,
-including any initial spaces or punctuation marks. This allows
-for hassle-free placing of footnote markers in running text either
-before or after punctuation marks.
-
-Release 1.2-f
--------------
-
-Added ADD_SPACE, to permit users to insert space at the top of
-running text (after the first page) when using the docprocessing
-macros.
-
-Releases 1.2-a and 1.2-b
-------------------------
-
-My personal email address has changed. 1.2-a and -b have been
-updated to reflect that. Additionally, I made some small changes
-to the documentation.
-
-Release 1.2
------------
-
-As of 1.2, the recommended version of groff to use with mom has
-been bumped up from groff, 1.18 to groff, 1.19.2. Although mom will
-continue to work with groff, 1.18, her handling of .FAM(ILY) and .FT
-is now slightly different, therefore users of groff 1.18 may have to
-update documents created with mom so that every .FAM(ILY) request is
-followed by a .FT request before any text is input, otherwise mom
-will set the text after .FAM(ILY) in Courier (until she encounters a
-.FT request). People running groff, >= 1.19.2 don't have to worry
-about this, but I recommend that, regardless of which version you're
-running, you have a look at the document entries for FAMILY and FT
-in order to see how mom will be handling .FAMILY and .FT from now
-on.
-
-When used with groff >=1.19.2, mom now emits warnings if a style
-hasn't been registered, or if a font style doesn't exist in the
-current family. Invalid .FAM(ILY) calls now use a "fallback" font"
-(although no warning is issued). The fallback is user-settable.
-
-Mom's macro file, om.tmac, now sets up a fairly extensive list of
-font "styles," thus expanding the range of arguments that can be
-passed to .FT (formerly, just R, I, B and BI, unless users had
-already rolled their own solution to the problem of extensive type
-families containing fonts like condensed, demibold, black, light, etc).
-Users are advised to read the documentation sections on FAM(ILY),
-FT and FALLBACK_FONT, as well as the new appendix section, "Adding
-PostScript fonts to groff", for information on using mom's style
-extensions (and how to disable them, should they conflict with a
-user's present groff site-font/devps setup).
-
-A new macro, FALLBACK_FONT, has been added. It controls not only
-the fallback font for invalid .FAMILY calls, but also whether mom
-aborts on invalid .FT calls after issuing a warning, or continues
-processing using the fallback.
-
-Release 1.1.9
--------------
-
-Added the (optional) generation of cover pages and document cover
-pages, plus a full suite of control macros for all cover page
-elements.
-
-Added new reference macros that apply to covers: COVERTITLE,
-DOC_COVERTITLE, COPYRIGHT and MISC.
-
-The need for TRAP OFF/TRAP to deal with ELs and TNs that fall at
-the bottom page has been obsoleted. However, both EL and TN, when
-invoked in any "nofill" mode (LEFT, RIGHT, CENTER, or the L | R | C
-arguments to TAB_SET or ST when no QUAD argument is given), must now
-have the input line preceding the EL or TN terminated by \c. Fill
-modes do not have this requirement, i.e. no \c is required.
-
-Footnotes that occur inside quotes, blockquotes and epigraphs now
-work just like regular footnotes, with no user intervention
-required. This obsoletes the macro BREAK_QUOTE.
-
-Removed all aliases that used the word COLOUR. Users must use
-COLOR wherever COLOR is needed. COLOUR, as a replacement/alias, is
-no longer supported.
-
-NEWPAGE, which used to be an alias of .bp, is now its own macro.
-
-Release 1.1.8
--------------
-
-Added text color support. Users can now define or initialize a color,
-and afterwards change text color with an inline of the form
-\*[<colorname>], or with the macro .COLOR. In document processing,
-the docelement tag control macros have been expanded to include
-_COLOR, e.g. .HEAD_COLOR <predefined colorname> will colorize
-heads, PAGENUM_COLOR <predefined colorname) will colorize page
-numbering, etc.
-
-Adjusted vertical placement of hyphens around page numbering when
-PAGENUM_STYLE is DIGIT, ROMAN or ALPHA so that the hyphens appear
-properly centered on the page numbering character.
-
-Changed tab handling in document processing so that tab structures
-are preserved from page to page and column to column.
-
-Release 1.1.7-a
----------------
-
-Increased the flexibility of SMARTQUOTES so that they handle quoting
-styles by language, entered as a 2-digit language code argument to
-SMARTQUOTES. See docs.
-
-Re-wrote the DOCTYPE LETTER macros so that DATE, TO and FROM can be
-entered in any order the user wishes, with output that matches
-input. (Should have done this in the first place.)
-
-Release 1.1.7
--------------
-
-Finally got around to writing "list" macros. See the docs.
-
-Added German-style lowered double quotes and two styles of
-guillemets to SMARTQUOTES.
-
-Added macro SIZE, intended to be called inline as \*[SIZE <n>].
-This brings mom's inline size change syntax into line with her other
-inlines. \*S[<n>] can still be used for the same thing.
-
-The file elvis_syntax (for elvis prior to 2.2h) is no longer being
-maintained. It was getting messy and long in the tooth. The
-official elvis syntax file is elvis_syntax.new, which works for
-2.2h of elvis (and higher, one hopes). elvis users are encouraged
-to update to 2.2h or higher.
-
-Release 1.1.6-e
----------------
-
-Extended handling of draft and revision numbers and strings in
-headers/footers for increased flexibility. It's possible now to
-have just about any combo of DRAFT_STRING, DRAFT, REVISION_STRING
-and REVISION, and have them come out in headers/footers as one
-intuitively expects/wants.
-
-Also added a new set of syntax highlighting rules for the vi clone,
-elvis. Version 2-2h-beta of elvis finally made possible the
-highlighting of \*[...] inline escapes, whether or not they're
-separated from surrounding text by spaces. This is a terrific
-improvement in elvis, and makes for greatly improved readability of
-mom files.
-
-Release 1.1.6-b - 1.1.6d
-------------------------
-
-Trivial changes to documentation and some cleanups of the main
-om.tmac file, including:
-
-Added a .bp after .if \\n[#START]=1 in FOOTER. Without it,
-in document processing mode, documents that use *none* of the
-docprocessing tags (yes, there are times when users want to do
-this) ignored the footer trap.
-
-Changed register #DOCHEADER_LEAD_ADJ to string
-$DOCHEADER_LEAD_ADJ. This means that .DOCHEADER_LEAD no longer
-requires a unit of measure; points is assumed.
-
-Release 1.1.6-b
----------------
-
-Added a SHIM macro that calculates and moves to the next "legal"
-baseline during document processing (useful if user starts playing
-around with spacing/leading on a page and needs to get the leading
-back on track).
-
-Fixed handling of DOCHEADER OFF <distance> so that the first line of
-running text falls on a "legal" baseline when <distance> is given.
-
-Release 1.1.6-a
----------------
-
-Problem with groff 1.19.1 fixed by Werner (.return handled arguments
-incorrectly).
-
-Fixed handling of page numbering style restoration in endnotes, so
-that (collated) docs have the correct page numbering style when the
-style has been changed for endnotes (with ENDNOTES_PAGENUM_STYLE).
-
-DOC_TITLE has been made for use exclusively with DOCTYPE DEFAULT.
-
-Fixed handling of headers/footers with respect to endnotes. Now,
-when either headers or footers are on, mom picks up the correct
-page header/footer on the last page prior to ENDNOTES, gets the
-pageheaders correct for endnotes pages *including the last one*, and
-picks up correct page headers/footers for the subsequent docs after
-COLLATE.
-
-
-Release 1.1.6
--------------
-
-BAD NEWS: mom appears to be crippled in some areas when run with
-groff 1.19.1. Pending a solution, mom must be run with groff 1.18
-
-***NEW***
-
-Added TOC capabilities.
-
-Extended range of endnotes control macros. See the documentation
-on endnotes control macros.
-
-Added a new DOC_TITLE macro, to deal with collated documents that
-have an overall title, while each doc has its own separate doc
-title (from TITLE).
-
-
-Release 1.1.5
--------------
-
-***NEW***
-
-Added James Ramsey's CHAPTER_TITLE macro as well as control macros to
-go with it. Thanks James. Also from James came a patch to handle
-START differenty which has been incorporated into om.tmac. Thanks
-again, James.
-
-Some bits and pieces of the docs have been tweaked, but nothing
-changed. Hopefully, the changes will make parts of the docs easier to
-read and navigate.
-
-***FIXES***
-
-o \*[RULE]
-
-o broken draft and revision in docheaders
-
-o post-epigraph spacing in TYPEWRITE
-
-o header spacing in TYPEWRITE
-
-------------------------------------------------------------------------
-
-Release 1.1.4
--------------
-
-***SIGNIFICANT CHANGE***
-.IX is now deprecated, although it will continue to work as before.
-The new form is .IQ (Indent Quit). Groff will emit a message advising
-users to update their docs.
-
-***NEW***
-Four new inlines to deal with horizontal and vertical movements:
-
- o \*[FWD n]
- o \*[BCK n]
- o \*[UP n]
- o \*[DOWN n]
-
-All four require a unit of measure after n. These inlines are similar
-to the older \*[FPn], \*[BPn], \*[ALDn] and \*[RLDn], however they're
-not restricted to points, and any value can be entered for n (the older
-forms -- which still work -- were restricted to 1 - 36).
-
-***CHANGED***
-Inline kerning can now be accomplished with \*[BU n] and \*[FU n], where
-n, after the space, is the desired number of kern units. The older
-forms \*[BUn] and \*[FUn] still work, up to 36 units.
-
-------------------------------------------------------------------------
-
-Release 1.1.3c
---------------
-
-***NEW***
-A new macro -- ENDNOTES_HDRFTR_CENTER -- added so that mom's default
-behaviour of not printing the header center string when DOCTYPE is
-CHAPTER can be disabled (i.e. she will print the center string). The
-macro is user-called with ENDNOTES_HEADER_CENTER or
-ENDNOTES_FOOTER_CENTER.
-
-***FIXES***
-PAD now works as advertised when fill mode is on.
-
-ENDNOTES no longer disables printing of footnotes on last page of
-document body.
-
-Release 1.1.3
--------------
-
-***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE***
-As of 1.1.3, groff must be >= 1.18.
-
-***NEW***
-Added endnotes functionality to mom, along with a slew of macros to
-control how mom prints endnotes pages. See the html documentation.
-
-***NEW***
-Added inline \*[RULE], which draws a rule to the full measure of the
-current line length ( to be used in place of \h'\n(.lu' ). Weight of the
-rule is dependent on the point size of type when \#[RULE] is called.
-
-***FIXES***
-PAD -- works more intuitively now when the pad string contains inline
-escapes for font, point size, etc.
-
-UNDERLINE -- fixed character translations of digraphs so they get
-underlined properly. Also fixed a bug that was causing some footnotes
-to get underlined when UNDERLINE was on in the body of the document.
-
-***UPDATES***
-Html documentation
-elvis_syn
-
-Release 1.1.2a
---------------
-
-***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE***
-In order to help mom toward full groffship, the macro .PS has been
-renamed to .PT_SIZE, and the alias .TS (for .TAB_SET) has been removed.
-.PS and .TS are keywords used by pic and tbl respectively, and the mom
-macros of the same name were in conflict.
-
-Release 1.1.2
--------------
-
-***IT'S OFFICIAL!***
-mom is now an official part of the groff. New releases will be
-incorporated into the groff package. I'll still be posting each new
-release on the mom homepage, so there's no need to download all of the
-most recent version of groff just to get a newer mom. :)
-
-***CHANGES***
-Fixed default footer separator rule adjustment so that it's closer to
-the advertised "4 points above the tallest ascender in the footer."
-
-Added more stuff to the elvis_syn file. Still wouldn't mind someone
-contributing some vim/emacs syntax highlighting.
-
-Added .cflags 4 /\(em to om.tmac. By default, mom now obligingly
-breaks after / and \(en.
-
-***NEW***
-Macro(s): HEADER_RECTO
- HEADER_VERSO
-With these macros, users can now define single-string recto/verso
-headers/footers. HEADER_RECTO (or FOOTER_RECTO) can be used to create
-a one-part header/footer (instead of mom's default three-parters) that
-appears on every page if RECTO_VERSO is OFF or, if RECTO_VERSO is on, if
-no HEADER_VERSO (or FOOTER_VERSO) has been defined. If a HEADER_VERSO
-(or FOOTER_VERSO) is defined and RECTO_VERSO is on, _RECTO prints on
-even pages and _VERSO on odd pages.
-
-Added macro DRAFT_WITH_PAGENUMBER so user can have draft/revision
-info attached to the pagenumber in COPYSTYLE DRAFT, instead of having
-it HEADER center. Always having it HEADER center was creating problems
-with long doc titles, esp. with PRINTSTYLE TYPEWRITE (which is when
-COPYSTYLE DRAFT is most likely to be used).
-
-***FIXES***
-No more "can't break line" warnings in DOCTYPE LETTER.
-
-If no REVISION number is given, Rev. 0 no longer appears HEADER_CENTER
-in COPYSTYLE DRAFT
-
-PAGENUM_STYLE now works as advertised.
-
-Release 1.1.1
--------------
-
-***CHANGES***
-Main macro file renamed to om.tmac, in keeping with current groff
-policy.
-
-Now okay to use groff mailing list for mom-related posts
-
-***NEW***
-Toggle macro -- BR_AT_LINE_KERN. When on, automatically deposits
-a break whenever .RW or .EW are invoked. Very useful when kerning
-whole lines of rag copy.
-
-***NEW***
-Toggle macro -- PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS are
-being used instead of HEADERS, mom doesn't print the page number at
-the top of the first page of a doc, or the first page of collated docs.
-PAGENUM_ON_FIRST_PAGE allows user to get mom to put the page number on
-"first" pages if that's desired.
-
-***NEW***
-Macro -- BREAK_QUOTE -- to deal with problem of footnoted quotes and
-blockquotes that cross a page or column.
-
-***NEW***
-New argument to AUTOLEAD -- FACTOR. With FACTOR, you can, if you
-wish, enter a factor by which AUTOLEAD multiplies the point size when
-calculating lead automatically.
-
-Improvements
-------------
-
-PAPER now has a much larger selection of common paper sizes.
-
-\*[ALD], \*[RLD], \*[FP] and \*[BP] now accept increments of quarter
-points (expressed as decimal fractions). \*[RLD1.75], for example,
-reverses 1-3/4 points up on the line.
-
-HEADER_SIZE now available to PRINTSTYLE TYPEWRITE. This was necessary
-to deal with the problem of excessively long HEADER_LEFT, _CENTER or
-_RIGHT strings.
-
-Fixes
------
-
-T_MARGIN -- can be set before or after LS or AUTOLEAD
-SS -- remains constant regardless of WS
-WS -- no longer affects SS
-TI -- now works as expected even when called while another indent
- type is in effect
-COLLATE -- small fixes
-
-Broken .RW and .EW fixed.
-
-String tabs now behave properly when set from within tabs.
-
-UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) are now, in fact, on by
-default as the docs state.
diff --git a/contrib/groff/contrib/mom/TODO b/contrib/groff/contrib/mom/TODO
deleted file mode 100644
index 1297bbd6a5bb..000000000000
--- a/contrib/groff/contrib/mom/TODO
+++ /dev/null
@@ -1,25 +0,0 @@
-As of version 1.2, the items on this TODO list will only be dealt
-with if users request they be implemented.
-
-UNDERLINING
------------
-Explore "the ultimative underline macro" for possible inclusion
-into mom.
-
-NUMBERED HEADS, SUBHEADS and PARAHEADS
---------------------------------------
-Macros to set numbering style (roman, arabic, alpha, etc)?
-
-FOOTNOTES
----------
-In columnar docs, maybe give user the choice of gathering all
-footnotes at the bottom of the last column?
-
-CONTROL MACROS -- _INDENT
---------------
-Let user be able to enter decimal fractions as the argument to _INDENT
-control macros, or, instead, let user be able to enter absolute
-values with a unit of measure in addition to current behaviour,
-which is relative.
-
-------------------------------------------------------------------------
diff --git a/contrib/groff/contrib/mom/copyright b/contrib/groff/contrib/mom/copyright
deleted file mode 100644
index 51756d000992..000000000000
--- a/contrib/groff/contrib/mom/copyright
+++ /dev/null
@@ -1,24 +0,0 @@
-AUTHOR
-------
-Peter Schaffter (peter@faustus.dyn.ca) (ptpi@golden.net)
-320 Gordon St.
-Fergus, Ontario
-CANADA
-N1M 2W3
-
-========================================================================
-
-The groff macro file om.tmac and the html documentation pertaining
-to it are copyright (c) 2004, 2005 Peter Schaffter.
-
-om.tmac is issued under the GNU General Public License, a full copy of
-which can be had at
-
- http://www.gnu.org/licenses/gpl.html
-
-The html documentation pertaining to om.tmac is issued under the GNU
-Free Documentation License, a full copy of which can be had at
-
- http://www.gnu.org/copyleft/fdl.html
-
-========================================================================
diff --git a/contrib/groff/contrib/mom/examples/README.txt b/contrib/groff/contrib/mom/examples/README.txt
deleted file mode 100644
index 65188a798851..000000000000
--- a/contrib/groff/contrib/mom/examples/README.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-The files in this directory show mom in action.
-
-If you have downloaded and untarrred a version of mom from her
-homepage, you'll see that none of the example files come with
-corresponding PostScript (.ps) files, as they do with pre-compiled
-versions of groff, or groff built from source.
-
-I haven't included the PostScript output because I want to
-keep the mom archive as lean as possible. To view the PostScript
-output, process the files with groff and either
-
- a) send the output to a separate file for previewing with a
- PostScript viewer such as gv (ghostview), or
-
- b) to your printer.
-
-Using the file sample_docs.mom as an example, you would
-accomplish a) like this:
-
- groff -mom -Tps sample_docs.mom > sample_docs.ps
- gv sample_docs.ps
-
-Accomplishing b) depends on your printer setup, but a fairly
-standard way to do it would be
-
- groff -mom -Tps sample_docs.mom | lpr
-
- or
-
- groff -mom -Tps -l sample_docs.mom
-
-Note: I don't recommend previewing with gxditview because it doesn't
-render some of mom's effects properly.
-
-The files themselves
---------------------
-
-All are set up for 8.5x11 inch paper (US letter).
-
-***typesetting.mom**
-
-The file, typesetting.mom, demonstrates the use of typesetting tabs,
-string tabs, line padding, multi-columns and various indent styles,
-as well as some of the refinements and fine-tuning available via
-macros and inline escapes.
-
-Because the file also demonstrates a "cutaround" using a small
-picture (of everybody's favourite mascot, Tux), the PostScript file,
-penguin.ps has been included in the directory.
-
-***sample_docs.mom***
-
-The file, sample_docs.mom, shows examples of three of the document
-styles available with the mom's document processing macros, as well
-as demonstrating the use of COLLATE.
-
-The PRINTSTYLE of this file is TYPESET, to give you an idea of mom's
-default behaviour when typesetting a document.
-
-The last sample, set in 2 columns, shows off mom's flexibility
-when it comes to designing documents.
-
-If you'd like to see how mom handles exactly the same file when the
-PRINTSTYLE is TYPEWRITE (i.e. typewritten, double-spaced), simply
-change
-
- .PRINTSTYLE TYPESET
-
-to
-
- .PRINTSTYLE TYPEWRITE
-
-near the top of the file.
-
-***letter.mom***
-
-This is just the tutorial example from the momdocs, ready for
-previewing.
-
-***elvis_syntax.new***
-
-For those who use the vi clone, elvis, you can paste this file into
-your elvis.syn. Provided your mom documents have the extension
-.mom, they'll come out with colorized syntax highlighting. The
-rules in elvis_syntax aren't exhaustive, but they go a LONG way to
-making mom files more readable.
-
-The file elvis_syntax (for pre-2.2h versions of elvis) is no longer
-being maintained. Users are encouraged to update to elvis 2.2h or
-higher, and to use elvis_syntax.new for mom highlighting.
-
-I'll be very happy if someone decides to send me syntax highlighting
-rules for emacs. :)
-
-***mom.vim***
-
-Christian V. J. Brüssow has kindly contributed a set of mom syntax
-highlighting rules for use with vim. Copy the file to your
-~/.vim/syntax directory, then, if your vim isn't already set up to
-do so, enable mom syntax highlighting with
-
- :syntax enable
-
-or
-
- :syntax on
-
-Please note: I don't use vim, so I won't be making changes to this
-file myself. Christian Brüssow is the maintainer of the ruleset,
-which is available on the Web at
-
- http://www.cvjb.de/comp/vim/mom.vim
-
-Contact Christian (cvjb@cvjb.de) if you have any suggestions or
-requests.
diff --git a/contrib/groff/contrib/mom/examples/elvis_syntax b/contrib/groff/contrib/mom/examples/elvis_syntax
deleted file mode 100644
index 64fbb3b06de2..000000000000
--- a/contrib/groff/contrib/mom/examples/elvis_syntax
+++ /dev/null
@@ -1,90 +0,0 @@
-#Mom
-language mom
-extension .mom .tmac
-
-startword .
-color startword normal
-
-inword _.'
-color inword normal
-
-other initialpunct
-mostly normal
-
-backslash none
-
-color args like fixed
-color braces like char
-color brackets like underlined
-color chars like emphasized
-color decimals like number
-color ellipsis normal
-color escapes like keyword
-color math like cursor
-color misc like string
-color operators like string
-color parens like comment
-color reg_string like math
-color tmac_escapes like keyword
-color single_slash like char
-
-font args DA DE EN ES FR IT NL NO PT SV
-font args DEFAULT CHAPTER NAMED LETTER
-font args TYPESET TYPEWRITE
-font args FINAL DRAFT
-font args BLOCK QUAD
-font args LEFT RIGHT CENTER CENTRE JUSTIFY TOP BOTTOM L R C J
-font args OFF QUIT END EXIT DONE NO ALL
-font args PAGE NUMBER STAR
-font args LETTER LEGAL EXECUTIVE LEDGER TABLOID QUARTO FOLIO
-font args 10x14 A3 A4 A5 B4 B5
-font args SINGLESPACE
-font args FACTOR
-font args DASH BULLET ALPHA DIGIT USER
-font args RGB CYM CMYK GRAY GREY
-font args COND CONDX EXT EXTX SUP SUPX CONDSUP CONDSUPX EXTSUP EXTSUPX
-font args BOLDER BOLDERX SLANT SLANTX
-font args UP DOWN BCK FWD BU BP FU FP
-font args ROM IT BD BDI PREV
-font args ST
-font args SUSPEND RESUME
-
-prefix { \{ \{\
-font braces { \{ \{\
-prefix [ ]
-font brackets [ ]
-prefix \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq
-font chars \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq
-prefix \(14 \(12 \(34 \(+-
-font chars \(14 \(12 \(34 \(+-
-prefix \fR \fB \fI \fP \f0 \f1 \f2 \f3
-font chars \fR \fB \fI \fP \f0 \f1 \f2 \f3
-prefix .0 .1 .2 .3 .4 .5 .6 .7 .8 .9
-font decimals . .0 .1 .2 .3 .4 .5 .6 .7 .8 .9
-prefix \/ \/. \/? \/! \/, \/; \/:
-font escapes \/ \/. \/? \/! \/, \/; \/:
-prefix \, \,. \,? \,! \,, \,; \,:
-font escapes \, \,. \,? \,! \,, \,; \,:
-prefix \~ \0 \: \| \^ \& \% \!
-font escapes \~ \0 \: \| \^ \& \% \!
-prefix \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w
-font escapes \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w
-prefix ...
-font ellipsis ...
-prefix + - * / = == < > <= >= <? >? %
-font math + - * / = == < > <= >= <? >? %
-prefix |
-font misc |
-prefix ! : &
-font operators ! : &
-prefix ( )
-font parens ( )
-prefix # * $
-font reg_string # * $
-prefix \n \* \[
-font single_slash \n \* \[
-prefix \\n \\* \\$
-font tmac_escapes \\n \\* \\$
-
-comment \#
-comment \"
diff --git a/contrib/groff/contrib/mom/examples/elvis_syntax.new b/contrib/groff/contrib/mom/examples/elvis_syntax.new
deleted file mode 100644
index d31e0c2634f0..000000000000
--- a/contrib/groff/contrib/mom/examples/elvis_syntax.new
+++ /dev/null
@@ -1,106 +0,0 @@
-" Steve Kirkendall has thoughtfully reworked elvis's syntax
-" highlighting so that it now supports nroff constructs like \fBword
-" and \(emword, with \fB and \(em being highlighted while "word" is
-" not.
-"
-" There are some other enhancements as well, making it possible
-" to have any word beginning with punctuation (i.e. groff
-" requests) highlighted. I've decided to take advantage of these
-" improvements, which apply to elvis-2.2h onwards, and write a new
-" simplified set of syntax highlighting rules for mom. Just plug
-" this file at the end of /etc/elvis/elvis.syn to use them.
-"
-" If you're using an older version of elvis, stick with the
-" highlighting rules in the files elvis_syntax.
-
-#Mom
-language mom
-extension .mom .tmac
-
-startword .
-color startword normal
-
-inword _.'
-color inword normal
-
-other initialpunct
-mostly normal
-
-backslash none
-
-color args like fixed
-color braces like char
-color brackets like underlined
-color chars like emphasized
-color decimals normal
-color ellipsis normal
-color escapes like keyword
-color math like cursor
-color misc like string
-color operators like string
-color parens like comment
-color reg_string like math
-color tmac_escapes like keyword
-color single_slash like char
-
-font args DA DE EN ES FR IT NL NO PT SV
-font args DEFAULT CHAPTER NAMED LETTER
-font args TYPESET TYPEWRITE
-font args FINAL DRAFT
-font args BLOCK QUAD
-font args LEFT RIGHT CENTER CENTRE JUSTIFY TOP BOTTOM L R C J
-font args OFF QUIT END EXIT DONE NO ALL
-font args PAGE NUMBER STAR LINE
-font args LETTER LEGAL EXECUTIVE LEDGER TABLOID QUARTO FOLIO
-font args 10x14 A3 A4 A5 B4 B5
-font args SINGLESPACE
-font args FACTOR
-font args DASH BULLET ALPHA DIGIT USER ROMAN roman alpha
-font args SUSPEND RESUME
-font args RGB CYM CMYK GRAY GREY
-font args COND CONDX EXT EXTX SUP SUPX CONDSUP CONDSUPX EXTSUP EXTSUPX
-font args BOLDER BOLDERX SLANT SLANTX
-font args UP DOWN BCK FWD BU BP FU FP FN_MARK EN_MARK
-font args ROM IT BD BDI PREV
-font args ST
-
-prefix { \{ \} \{\ }
-font braces { \{ \} \{\ }
-prefix [ ]
-font brackets [ ]
-prefix \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq
-font chars \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq \(lq \(rq
-prefix \(14 \(12 \(34 \(+-
-font chars \(14 \(12 \(34 \(+-
-prefix \fR \fB \fI \fP \f0 \f1 \f2 \f3
-font chars \fR \fB \fI \fP \f0 \f1 \f2 \f3
-prefix .0 .1 .2 .3 .4 .5 .6 .7 .8 .9
-font decimals . .0 .1 .2 .3 .4 .5 .6 .7 .8 .9
-prefix \/ \/. \/? \/! \/, \/; \/:
-font escapes \/ \/. \/? \/! \/, \/; \/:
-prefix \, \,. \,? \,! \,, \,; \,:
-font escapes \, \,. \,? \,! \,, \,; \,:
-prefix \~ \0 \: \| \^ \& \% \!
-font escapes \~ \0 \: \| \^ \& \% \!
-prefix \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w
-font escapes \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w
-prefix ...
-font ellipsis ...
-prefix + - * / = == < > <= >= <? >? %
-font math + - * / = == < > <= >= <? >? %
-prefix |
-font misc |
-prefix ! : &
-font operators ! : &
-prefix ( )
-font parens ( )
-prefix # * $
-font reg_string # * $
-prefix \n \*
-font single_slash \n \*
-prefix \\n \\* \\$
-font tmac_escapes \\n \\* \\$
-
-character \]'
-comment \#
-comment \"
diff --git a/contrib/groff/contrib/mom/examples/letter.mom b/contrib/groff/contrib/mom/examples/letter.mom
deleted file mode 100644
index 8833916ef685..000000000000
--- a/contrib/groff/contrib/mom/examples/letter.mom
+++ /dev/null
@@ -1,34 +0,0 @@
-.AUTHOR "Yannick P. Guique"
-.DOCTYPE LETTER
-.PRINTSTYLE TYPESET
-.START
-.DATE
-August 25, 2004
-.TO
-GUILLAUME BARRIÈRES
-Minidoux Corporation
-5000 Pannes Drive
-Redmond, Virginia
-USA
-.FROM
-Y.P. GUIQUE
-022 Umask Road
-St-Sauveur-en-dehors-de-la-mappe, Québec
-CANADA
-.GREETING
-Dear Mr. Barrières,
-.PP
-It has come to my attention that you have been lobbying the
-US government to prohibit the use of open source software by
-endeavouring to outlaw so-called "warranty free" applications.
-.PP
-I feel it is my duty to inform you that the success of your
-operating system with its embedded web browser relies heavily
-on open source programs and protocols, most notably TCP/IP.
-.PP
-Therefore, in the interests of your corporation's fiscal health,
-I strongly advise that you withdraw support for any US
-legislation that would cripple or render illegal open source
-development.
-.CLOSING
-Sincerely,
diff --git a/contrib/groff/contrib/mom/examples/penguin.ps b/contrib/groff/contrib/mom/examples/penguin.ps
deleted file mode 100644
index 2728930936b7..000000000000
--- a/contrib/groff/contrib/mom/examples/penguin.ps
+++ /dev/null
@@ -1,461 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner
-%%Title: /home/peter/Pics/penguin_small2_bw.ps
-%%CreationDate: Wed Apr 17 19:49:51 2002
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%Pages: 1
-%%BoundingBox: 0 0 81 96
-%%EndComments
-%%BeginPreview: 90 107 1 107
-% aaaaaaaaabff555555555540
-% 5b6db6db5edbf6b6b6b6b680
-% aaaaaaaab7ff7ad555555540
-% b55555557eddeeaadadadac0
-% 56db6db6dbffdf56ab555540
-% aaaaaaaaffb755dab556ab40
-% 5b555b55f77ed7d556b56d40
-% aab6d56dbfffaaeb6ad5aa80
-% 6d555aabf6edd5daad56ab40
-% aadaab56ffdfaff555aab540
-% 5555b56bddfdff76dab55680
-% b6aaaaaffbbbbbed5556dac0
-% 55b6d6d5bff7f77aab6aaa80
-% aaaaaaaff77f6ffd6d555540
-% 5b555b576defeedaaaadb680
-% aab6d56dfbfd3bfdb56aaac0
-% 55555aab8eda4fb556ab5540
-% b6daab5743f40b7eaad56d80
-% 5555b56f037007fadaad5540
-% aaaaaaab11e0c6ed55b5aa80
-% 5b6d6db731b1a3feaaaab6c0
-% aaab55566963a3badb555540
-% 6d556aaf35d2e37d556daa80
-% aadaadb57959f3f6aaaab6c0
-% 5555aaab3403c37d6dab5540
-% 6daab5571428c3eeaab56a80
-% aab6d6db908007fd5556ad80
-% ad5555574000176edb6ad540
-% 55aaadab920003fd55555a80
-% b56db55b2000136eaaadab40
-% 56aaaaab400047fdb6d55540
-% aad556d7040112df555ab680
-% 6d5b6ab5d00447bb55ab5540
-% aaaaad57402915cf6d556a80
-% adb555ab9a9243a7aab6ad80
-% 5556dab6902485ead5aad540
-% b5aaab57854901d7daad5a80
-% 56b5556d929201bfab55ab40
-% aaab6d57004400fb756ab540
-% 6d6d55af0a1000efeaad5680
-% aaaaaaba0080005ef6d5aac0
-% adb5b6d60220003fdaaab540
-% 5556aabc0000003bfd5b5680
-% b5aab57c0000003f76d56ac0
-% 56b556e80000001beeaaad40
-% aaab6bf80000001f7f5b5580
-% 6d6d55b00000001dfbaab540
-% aaaaaff00000001bdf6d5680
-% 55b5b5b00000000ffbd5aac0
-% b6aaafe40000000f6ff55a80
-% aad6df7000000246fedaab40
-% 555ab6d000000003aff5b540
-% b6aaafe000000013edbaaa80
-% 556b7d8000000001b7f6d6c0
-% aaad5bc000000001fbbd5a80
-% 6db57f0000000000d77aaac0
-% aaaab58000000000edf6d540
-% 5556f7000000000056fead80
-% b6dab600000000006edb5540
-% aaaaee00000000007ffeb680
-% 5555ee000000000076bb5540
-% b6dabc00000000003f7f6a80
-% 5555d800000000003b7756c0
-% aaabfc00000000003f7eda80
-% 6db6b0000000000036f7aac0
-% aaabd800000000003ffeab40
-% ad57b800000000003d6fda80
-% 55b7d8000000000037fdaac0
-% b55eb800000000003edfab40
-% 56afb000000000003bfbb540
-% aaddb000000000003edf5680
-% 6d5bd8000000000035fdaac0
-% aaafe800000000003b5bb540
-% 55ba5000000000006fef5680
-% b6a83800000000005f736ac0
-% aaa00c00000000003dfdad40
-% 55680e00000000003bd65580
-% b6a107000000000077bc5a80
-% 55a013c0000000023ff82b40
-% a80401a0000000005db45540
-% 429021f0000000043ff02d40
-% 900000f80000000096c4aa80
-% a00080be000000082a902d80
-% 004204770000000244401540
-% a200003e8000001411001540
-% 4004105fc000000044444b40
-% 8800001b8000000a00800540
-% 5040411f4000001012000280
-% 80040007c000001440044080
-% 5080040d0000003100100040
-% 800040200000007400400400
-% 51080002000000e804008040
-% 80008440000003f210000080
-% 50000005000007d400080940
-% 0111000080001ef020808280
-% a00008894000ffd480001540
-% 02000000fa57bb680108aa80
-% a0222002bfffffe900012b40
-% 0a4001115ffdedd20824d540
-% d0888004bb6fbfb4008b5a80
-% ad251202bffdfbe921255580
-% b554a05576ab576a045aaa80
-% aaaa950aaaad5aaaa955b6c0
-% 56d56a556d6aaad48556aa80
-% b55b5555aaab6b5ab55aad40
-% 55aaaaaab5b555554aaad580
-% ad556d5b56aaad6b556b5a80
-%%EndPreview
-%%BeginProlog
-% Use own dictionary to avoid conflicts
-5 dict begin
-%%EndProlog
-%%Page: 1 1
-% Translate for offset
-0.000000 0.000000 translate
-% Translate to begin of first scanline
-0.000000 95.872000 translate
-80.640000 -95.872000 scale
-% Variable to keep one line of raster data
-/scanline 90 1 mul string def
-% Image geometry
-90 107 8
-% Transformation matrix
-[ 90 0 0 107 0 0 ]
-{ currentfile scanline readhexstring pop }
-image
-72727272717171717171717172717171717171717171717172717171727271717171727273736f
-675852524e4653535a676b73737272727272727272727272727272727272727272727272727272
-727272727272727272727272
-7172717271717171717171717271717171717171717171717271717171717172727272726d5d4a
-4039393939373a3a3c3f4653637172727272727272727272727272727272727272727272727272
-727272727272727272727272
-7171717271717171717171717271717171717171717171717271717171717173747271644b3f3a
-3a393a3a3a393b3b3b38393b3d4d64707272727272727272727272727272727272727272727272
-727272727272727272727272
-727272727171717171717171727171717172717171717171727171717171727372705b3b3d3b3a
-3939393939393938393939383a3c3f546d71747272727272727272727272727272727272727272
-727272727272727272727272
-727271727171717171717171727171717171717171717171727171717171727173553e3d383a39
-393a383838383838393940564d3f38394668727272727272727272727272727272727272727272
-727272727272727272727272
-71717171717171717171717172717171717171717171717172717171717172715f3d38393b3b39
-3a393939393939393a3c5574807252403742627272727272727272727272727272727272727272
-727272727272727272727272
-727271727171717171717171727171717171717171717171727171717172726c403c373a3a3a3a
-3a3a3a3a3a3a3a3a393e5e82958c72543a38416a72737272727272727272727272727272727272
-727272727272727272727272
-727171727171717171717171727171717171717171717171727171717271735a3d383b3a3a3a3a
-3a3a3a3a3a3a3a3a383c5f87978e7c65493a3c5070737272727272727272727272727272727272
-727272727272727272727272
-7171717271717171717171717271717171717171717171717271717172736c4638373b3a3a3a3a
-3a3a3a3a3a3a3a3a3a436384897d6d644f3a3b3e60727472727272727272727272727272727272
-727272727272727272727272
-727171727171717171717171727171717171717171717171727171717273603a3839393a3a3a3a
-3a3a3a3a3a3a3a3b39425c6f68574745403b3c3848707472727272727272727272727272727272
-727272727272727272727272
-7271727271717171717171717271717171717171717171717271717172724d373938393a3a3a3a
-3a3a3a3a3a3a3a393a3d494e3e3e3c3b393c3a393b617272727272727272727272727272727272
-727272727272727272727272
-71717171717171717171717171717171717171717171717172717171727241393839393c3a3a3a
-3a3a3a3a3a3a3a393b3a3a3d3b3a3d393c3b393b3a4b7374717272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271717172703a3b3937393b393a3a
-3a3a3a3a3a3a3a3a3a3b3a3a393d3a3b3b3b393a393e6d74727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271717171633c3a3a38383d413c3a
-3a3a3a3a3a3a3a3a3a3b3e4142393c3c3b3b3939393c6074707272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271717171623b373b3e40475d5a3f
-3b3b3a3a393b3b3b373839486b6d3d393b3b3a38393b5c73717272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717271717171717271717172623b373c3a3d3f425d65
-3f393a3a3d393b3e5b75795a3e6562393b3b3b39393d4f71727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717272717171717271717171717271717172623c3838538a9e7e4960
-4e3c3a3a3c3a57879ea9b0b68e445b463b3b3b3a3b3d4a72727272727272727272727272727272
-727272727272727272727272
-7272727271717171727171717272717171727171717271717271717172613c374d96b6cabb8e48
-463b3a3a3a5291abb6c0c7d1be7f3f473b3b3a38393a4672727272727272727272727272727272
-727272727272727272727272
-7272727271717171717271717271717171717171717171717271717172603c3770acd1e3dfcc84
-3a3b3a3a3d85c0e7f4f7f7f2d9a4593a3b3b393839393f6b727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271717172603c3c9aebdbc5eefdda
-45393a3a45b8f7fcda8386d1faec8b373b3b3a3938383e6b727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717172717271717172613946c8db4e7188eaf9
-60443c3e4dc7fbe953468a7fcdfdc7433b3b3a3839383c6a727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271717172603a4bd59a387184a5fb
-755363655bc9fb9c3d3a5c907ffbe7543b3b3a3939383c6a717272727272727272727272727272
-727272727272727272727272
-7171717171717171717171717171717171717171717171717171717171673b4ad5833e4a7f75f8
-6f484b575cb3f67b363c445b68f4ed553a3a3a3939393b6a717272727272727272727272727272
-727272727272727272727272
-7272727272717171717171717271717171717171717272717271717171714245cc953c3d5667ce
-666e6f6c6282e97a3b3a3a3b5bf5ea58393a393a393c386a737272727272727272727272727272
-727272727272727272727272
-727272727171717171717171727171717171717171717171727171717171413eb7c4453b416fa6
-c3c9c6c2bcb1c19d3a3c3b3e8cfbdc4c3939393a39393969727272727272727272727272727272
-727272727272727272727272
-727272727171717171717171727171717171727171717171727171717171413a8df18e477da2af
-cdcecbbfa6b2cfc289534273ebf9ac3f3939393939383b62727272727272727272727272727272
-727272727272727272727272
-72727272717171717171717172717171717172717171717172717171717142385bdae697a9c1cd
-cfcecfd3d4d7dcd9d5c5a8c5e4dc633838393a39393a365b727272727272727272727272727272
-727272727272727272727272
-72727272717171717171717172717171717171717171717172717171717142363e99a4a8b9cacf
-cecfd2d8dcdfe2dfdedad6cdc3ac693f39393939393a375b727272727272727272727272727272
-727272727272727272727272
-7272727271717171717271717271717171717171727171717271717171714137538fa4b4c2cbcf
-cfd1d5dadee2e1dfdedededfdcdab5553a3a39393a3c3859727272727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717271717171717271717171714b43839facbdc8cfcf
-d0d3d7dae2e2dfdedededed1b1c5c05e3c3b393a3c393c4c717272727272727272727272727272
-727272727272727272727272
-727272727171717171717171727271717171717171717171727171717172524c94a0b2c1cbcfcf
-d1d5d9dee1dfdedededabea8aebbad4f3b3c3a393a3a3d426b7273727272727272727272727272
-727272727272727272727272
-72727272727171717271717172727171717171717172717172727171717254478ea5b9c3ced0d1
-d3d6dbe0dededddccfabaab7bbbaaa4b3c3b393a37393f3b597174727272727272727272727272
-727272727272727272727272
-727272727171717171727171727171717171717171717171727171717171503b5c84aec9d0d1d1
-d6d9dddcded9d1b0a0b1b8bbbab387403a3b6c7446333938477173727272727272727272727272
-727272727272727272727272
-7272727271717171717171717271727171717171717171717271717171714f3d457986a3c5d1d6
-d8d9d8d1bfa795a2b4b7bab7adac8642383863978e6f413c3c6973727272727272727272727272
-727272727272727272727272
-727272727171717171717171727171717171717171717271727172717272523b4390a58a8e9da8
-aba4a29d9ca5aeb3b2afabb7c4c2bb5d3b3645849b99663a3c4e72727272727272727272727272
-727272727272727272727272
-727272727171717171717171727171727171717171717271727171717273543c49adbfa29097b4
-c0b9b5b3b4b0afada5aabec7cfcac3763a3b3c5e999a8745393d65727272727272727272727272
-727272727272727272727272
-727272727271717171717171727271717172717171717171727172727171483856aac1bfa18e9e
-b1b4b2afa9a3a0a4b3c1c1c5d3ded4ac413a3b4079895a38353948707472727272727272727272
-727272727272727272727272
-7272727271727171717171717272727171717171717171717272737272633f3c4ea8c5c1c0a790
-919698959193a7bac2c1c9e1f4fbfbde6c3b3c3a39423c3b3a393e617473727272727272727272
-727272727272727272727272
-7272727271717171717171717271727171717171717172717272717270453b394dc1d9c8c2c2bc
-a79b9b9dabbac0c1c2cde3f8fdfdfdfabf453b3b3b3b3b3b3a393d4c7071727272727272727272
-727272727272727272727272
-727272727171717171717172727171717171717171717171727270715b3d3b398ff5e7cec3c3c1
-c3c1c2c2c3c2c2c8d4e4f5fdfdfdfdfdf9723f3b3b3b3b3b3b3a39435a74747272727272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171717271726750463658e0fbf7e4c6c2c3
-c3c2c3c2c2c4ceddedf7fdfdfdfdfcfdfccb4a3b3d383b3b3a3a3a3e4a6b727271727272727272
-727272727272727272727272
-72727272717171717171717172717271717171717171717172716d4b544340b1f7fcfdf7d5c2c2
-c2c2c2c2c6d5e7f5fcfdfdfdfdfdfdfcfbf7833d3d3b3b3b393b393a3b4e717272717272727272
-727272727272727272727272
-7272727271717171717271727271727171717171717171727371483a3a3673f4fdfcfbfceccfc5
-c2c1c2cde3f3fafdfdfdfcfdfdfdfdfcfdfccb40393a3b3b39393a393b3c607271727272727272
-727272727272727272727272
-727272727171717171727171727171717171717171717171705a3e3f3c45d0fcfdfdfcfdfcf5e6
-d9dce5f1fafcfcfcfdfdfcfdfdfdfdfdfdfdf66937393b3b393939393a3a486a72717272727272
-727272727272727272727272
-7272727271717171717171717271717171717171717171725f3e3a3c3985fbfcfdfcfdfdfdfdf9
-f1f8fcfdfdfcfcfcfcfdfdfdfdfdfdfdfdfdfd933b3a3b3b3a3a3a3a393a3d4a6b717272727272
-727272727272727272727272
-717171717171717171717171717171717171717172727267443b3b394cd2fafcfdfdfdfdfdfdfb
-fafcfdfdfdfcfcfcfcfcfdfdfdfdfdfdfdfdfbc73b3b3a3a3a393a3a3a393c3e52727272727271
-727272717171717172717271
-727172727171717171717171727171717172727175736d423a3a383c7de7f9fefefdfdfdfdfdfc
-fbfcfdfdfdfcfdfdfcfdfdfdfdfdfdfdfdfcf8e24d3c3b3b3a3a3a3a3b3b393a3b537173727272
-727272727272727272727272
-7272727271717171717171717271727171727271726e4d3b3b3a3646a0e2f8fdfefdfcfcfdfdfc
-f8f8fcfdfdfdfdfdfdfdfcfdfdfdfcfbf4f0efeb653f3b3b3b3b3b3b3b3b3938393f5772727272
-727272727272727272727272
-727172727171717171717171727171717171727171533f3b3b3a364aa5cef0f9fbfdfdfcf9f5f1
-ecebf3f8fafbfbfafcfaf8f7f5f5efeae3dbdfe687473b3b3a3b3a393a3a3b393a393f5c727272
-727272727272727272727272
-7272727271717171717171717272717171717271623d3d3a3b3a3a5ba9b8d0e7edf5f9f9f5ede3
-e1e5e7f2fbf9fafaf7eee2dad3d0cececcc8c9d8c5513a3b3a373c393d3b3a3939383d3e637272
-727272727272727272727272
-727272727171717171717171727171717172726e4a3d383a3b3a456fadb5cbddebf8fbfcfdfced
-e4f5fbfdfcfdfdfdfcf7ede3d5cecac8c7c6c6c7deb844393e644e3a393b3a3a3939383c4b6f72
-727272727272727272727272
-72727272717171717172727272727271717272603e3a3b3b393a4b7cbbd3ebf7fdfcfcfbfdfcee
-f1fcfcfcfcfbfbfdfcfcfdfbf8f2e8ded3cbc7c6ceee993d34556f5f463c3d393b393a3a3e6272
-727272727272727272727272
-717171727171717172717171727171717173704b3b3d39473c3c5fb0dcf1fbfcfcfcfdfcfcfcf5
-f5fbfcfbfdfcfcfcfcfcfbfbfdfcfcfbf5e9d9cdc7d8ea683b3d3d58724b3b3d3b3a3a3a3c5173
-737272727272727272727272
-7272727271717171717271717271717171736e433e385e603e4090dff5fcfdfcfcfbfcfcfbfcfa
-fbfbfcfcfcfbfcfdfcfcfcfcfdfcfcfcfbfcf6e6d3c9e3c3403a3d394d7342353e3a3b3a39416b
-727372727272727272727272
-727171727171717171717171727171717172673d374a6b3b3d4cd9f8fdfcfcfcfbfdfbfcfbfcfc
-fbfcfcfbfcfcfcfcfdfcfcfcfbfcfbfcfcfdfdfaedd4ceeb6c3c3d3d3e51663a3e383b3a393c56
-717472727272727272727272
-727271727171717171717171727171717173573c3c604d3b3c8ffbfdfbfcfdfcfcfcfcfcfcfbfb
-fdfbfdfcfdfbfcfcfcfbfcfcfdfbfdfcfcfcfcfdfcedd3dac43d384e5b5064583a3c3b3a363c40
-6f7272727272727272727272
-727271727171717171717171727171717170483f476f373851e9fdfdfdfbfcfcfcfcfcfcfbfcfd
-fcfcfcfbfcfcfbfbfcfcfdfcfdfcfcfcfcfcfcfdfcfdf1e6f1583f5e7770546d42393b3a3b3a3d
-637272727272727272727272
-7272727271717172717171717271727372643f3c6a52373da0fbfcfcfcfcfbfcfcfcfdfcfcfbfb
-fcfbfcfbfbfcfdfcfcfcfcfcfcfcfcfbfcfcfdfcfdfbfcfcfd9545657c735259613d3c393a393b
-4e7172727272727272727272
-7272727271717171717171717271727471513a456a393a5ae6fafcfbfcfbfcfbfcfcfcfcfbf8fa
-fbfcfcfcfcfdfbfcfdfcfcfdfcfdfcfbfdfcfbfcfcfcfcfcfdc64f5e6456434078433b3d393b3d
-436c72727272727272727272
-727272727171727171717171727272726e47385c53333e98fbfbfcfcfcfcfcfcfcfcfcfcf9eafb
-fbfbfbfbfcfcfbfdfcfcfbfcfcfcfcfcfbfdfcfcfdfdfcfdfce7473d3f3b3b375e57393d383939
-3b6171727272727272727272
-72727272717171717171717172717272633c3b703f3451dafcfcfbfbfcfcfbfcfcfdfdfbf4e8fa
-fcfdfcfcfcfbfcfbfcfcfcfcfbfdfcfcfcfcfcfcfcfbfbfcfcfa623c3a3a3b374b66373d393939
-3b5072727272727272727272
-727272727171717171717171727272714e3b52613b388af8fcfbfcfbfcfcfcfcfcfdfcfcf2edfc
-fdfcfcfcfcfdfcfbfcfcfcfcfcfdfcfdfdfcfcfcfcfdfcfbfcfc84383b3b393a3f774138383938
-3a416f727272727272727272
-727271727171717171717171727272663c3c68453b40c5fbfbfbfdfdfcfcfdfbfcfcfcfcededfb
-fcfcfcfcfbfcfcfcfcfbfbfcfcfcfcfcfafcfcfcfcfbfcfdfcfda23c3b3b3b3b3d7437383b3a39
-3b3f68727272727272727272
-7272727271717171717171717174714b3a3a6b373b57eefcfcfcfcfbfcfcfbfcfcfbfdfbe9e9fb
-fbfcfcfcfbfcfcfbfbfcfcfbfbfcfbfcfcfcfcfcfbfcfcfcfdfcaf3b3b3b3c3a406f37373a3a39
-393d5f727272727272727272
-7171717272717171727171717271623e3d4a60373b82fbfcfcfdfbfdfcfcfcfcfbfcfcfbe6eafb
-fcfdfcfcfcfcfcfbfdfcfcfcfdfcfcfcfcfdfcfcfcfbfcfcfcfdbd3a3b3b3a3843633836393a38
-3a3c54727272727272727272
-727272727272717171717272736d463a37535c3839aafcfcfcfdfdfcfcfcfbfcfdfcfbfbe6eaf9
-fbfbfcfbfcfbfcfcfbfdfcfcfbfcfcfcfcfdfcfcfcfcfbfdfcfcce3c3b3b393c4e533937383939
-383c4f727272727272727272
-71717272717171717171717371593d3b3952603947cdfcfbfcfcfcfcfcfdfdfcfcfcfdfae2e9fa
-fbfbfcfdfbfcfcfcfcfcfcfcfcfcfcfbfbfcfbfdfcfcfdfafcfcd4423b3b3b3a5a4e393a39383a
-3a3940727272727272727272
-7272727271717171717271726c41393c3656683b47d6fdfbfcfcfcfcfcfcfbfcfdfcfcfae1e9fb
-fbfcfdfcfcfcfbfcfcfcfcfbfcfcfbfcfcfcfbfbfdfcfbfcfcfdda413b3b3c3b6644393a3a3938
-3b3a3f727272727272727272
-727271727171717171717171553c3b3b405f6d394ce1fcfcfcfcfcfcfbfdfcfcfcfcfcf9e1ecfb
-fcfcfcfcfcfbfbfcfdfcfcfdfbfcfcfcfcfbfcfbfbfdfcfdfcfcdd423b3b3b39643f393a393939
-3a3a3e727272727272727272
-7272727271727171717171724f3e363d4f767e3b5be9fcfdfcfdfbfbfbfcfcfbfafcfcf8e2eefb
-fbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfdfcfbfcfdfcfcfcfbfdde433b3b3b455f3a3b3b3a3a39
-39393e727272727272727272
-72727272717171717171716e46393938466b863e69edfcfdfcfcfcfcfbfcfcfcfcfcfcf7e2eefc
-fbfcfcfdfbfdfcfbfdfcfdfdfdfcfcfcfcfdfbfcfcfbfcfcfbfddc443b3b385a463b3b3b3a3839
-393940727272727272727272
-72727272717171727171716f413a3a3a3945724869effcfcfcfcfbfcfcfbfcfcfcfcfbf8e2f1fc
-fcfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfcfcfcfcfcfbfcfdfccc3f383a41683b3d3d3a3b3a3a
-3a3b42727272727272727272
-72727272727171717171716e443938393c3c49626eeefcfbfcfcfcfcfcfcfcfcfcfcfcf8e2f1fc
-fbfcfdfcfcfdfdfcfcfcfcfcfbfcfbfcfcfcfcfcfcfcfcfcfcfcb83b3f5a685d455b6054463f3a
-3c3a51727272727272727272
-727272727271717172717171524a728f8d5e424d80e3fbfcfcfbfcfcfdfcfbfcfcfcfcf7e1f2fb
-fcfcfcfcfcfcfcfbfcfdfbfcfcfcfcfcfcfcfcfcfcfdfcfcfcfc9c405b503d3b3c3c455368755c
-3d3a5a727272727272727272
-72727172717171727271727174a3c9d4d6c87b3b50b0f9fcfcfdfcfcfcfbfdfcfcfcfcf8e2f3fb
-fcfcfdfcfcfcfcfcfcfcfbfbfbfcfbfcfbfcfcfcfcfcfbf9fbf66956403b3a3a39393b3a3a608d
-654567717273727272727272
-7272727271717172717371739bc1d1d4d4d4cc7f3f55a9f5fbfbfcfbfdfbfbfcfbfbfcf8e1f3fc
-fbfcfcfcfbfcfbfcfcfdfdfcfcfcfcfcfcfcfcfcfbf6d5d3d3d29c59393a393b3b3b3b3a3c5d76
-61486b737272727272727272
-727272727171727171737288b1c7d1d4d4d5d4cc803f4ea1f0fbfcfcfcfbfcfcfcfdfcf6e3f4fc
-fdfbfbfcfcfcfcfcfcfcfcfcfdfbfcfcfcfbfcfcfcdccfdbdddccd5b3e3a393b3b3b3b3a3e655e
-519c89727373727272727272
-7171717272727171717276a3b8c8d2d4d5d4d5d5c66d3a4892e9fcfbfcfdfcfbfbfbfcf8e1effb
-fcfbfcfcfcfcfbfcfcfbfcfbfcfcfcfcfbfcfcfcfcd5c7d4d7dabb50383c393b3b3b3b3a414f40
-76cfda8f7374727272727272
-7172717372727271707e9db3c0cdd4d4d5d4d4d5d4b6543b4673d6fbfbfcfcfdfdfcfbfaeaedfc
-fbfdfcfcfcfdfdfcfcfcfcfcfbfbfcfbfcfdfcfcfcd7c5d3d4d1a9513a393a3b3b3b3b3a3a3653
-bad5d7b87371727272727272
-7170778c9baaa8a5a3a7b4bdc9d1d4d4d4d4d4d4d5d2a04435405bc1f7fcfcfdfbfcfcfdfbf9fc
-fdfcfbfcfcfcfbfcfcfcfcfbfcfcfcfdfcfcfbfbf8d8c4d3d2c9a85c3a3b383b3b3b3b3a3a4196
-cfd1d4c47370727272727272
-73779fb2bcc1bfbbbbbdc4cad1d4d4d4d5d4d4d4d5d4cb7c3d373c469ef3fbfcfcfcfdfcfcfcfc
-fcfbfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfbe8d3c7c4d2cec3ae78463c36383836373b477dbf
-cccfd1c07671727272727272
-738ab0bec9cdccc9c7ccd1d2d4d4d4d4d4d4d4d4d4d5d5b758383b3a4387e5fdfcfcfcfbfcfcfc
-fdfdfbfcfcfcfcfcfbfcfcfdfcfcfbfbfdfceecdc7c3c2cecbc1ae997146403e393d426189b2c3
-cccfd2c27572727272727272
-7193b7c7ced1d2d3d2d3d4d4d4d4d4d4d5d4d4d4d4d3d4cf953d383a353a68d0fbfbfbfbfdfcfc
-fbfbfbfdfcfdfcfbfcfcfbfcfcfcfdfcfbfde3c7c8c2bfc9cac4b5a69c8e7d77767e929eacc0ca
-d0d3d4d07f72727272727272
-729eb8c8d0d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d5d3d3d5c065383b38343f57bffbfbfcfcfbfc
-fcfcfcfcfbfbfcfdfcfcfcfcfbfbfbfcfcfbdfc9c8bdb9c8cac6bbb0a8a5a1a0a1a3a7b1bfccd1
-d4d4d4d3af77717372727272
-7192b7c6d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d3d4d4a64639383c3a3852c7fcfcfdfdfd
-fcfcfcfcfcfcfdfdfcfcfdfcfdfcfbfcfcfbe0c8c8b8b4c6cacac1b9b5b1b0afafb2b7c0cbd4d4
-d4d5d4d2cf9c727272727272
-728cb5c3ced4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4c97d3b363a3737396ef0fcfcfcfc
-fdfcfcfcfbfcfcfcfcfcfcfcfdfcfcfbfcfde7cbc9b3aebfc9cbc8c2bcbbb9b9b9bcc3c9d1d5d5
-d5d5d5d3d1c88f7272727272
-718bb2c0cdd3d4d4d4d4d4d5d5d5d4d4d5d4d4d4d5d4d4d4d4d5b6573a3939393742d8fcfcfcfc
-fcfbfcfbfcfcfcfdfcfcfcfcfbfbfcfcfdfbeed0c8adaabcc9d0cecbc5c3c2c1c3c5c8ced2d5d5
-d5d5d5d5d4d1c29071727372
-727fafbdccd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4d4ce974038393b393fd1fcfcfcfb
-fcfbfcfdfcfcfbfcfcfcfcfcfbfcfcfbfcfcf3d3b588aabdc9d0d2d1cdcbc9c8caccced1d4d5d5
-d5d5d5d5d4d3d0cb99767372
-727aadbccbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d3d5c57a3a3a383a59ecfdfcfcfc
-fbfcfcfcfcfcfcfbfcfbfcfcfbfcfcfcfbfcf2c46785aabdc9d1d3d3d2d2d0d1d1d2d2d3d4d5d5
-d5d5d5d5d5d5d4d4d4b88872
-727bacbacbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d3d5b15441467bd7fcfcfcfbfc
-fcfdfdfcfcfcfbfcfcfcfdfdfcfcfcfcfbfccd5d4484abbecad1d2d4d4d5d4d5d4d4d4d4d5d5d5
-d5d5d5d5d5d4d5d4d4d5cea5
-727caebac9d3d4d4d4d4d5d5d5d5d4d4d4d4d4d4d4d4d4d4d5d5d3d3ce99a7dcf8fcfcfcfcfcfc
-fbfbfcfcfbfcfcfdfcfcfcfcfbfcfcfcf8c2523a4789aabecad1d3d4d5d5d5d5d5d5d5d5d5d5d5
-d5d5d5d5d5d5d5d5d5d5d2c6
-7084aebacbd2d3d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d3d1d1bfa4f4fafbfbfcfcfbfc
-fcfcfbfbfcfcfcfcfcfcfcfcfcfbfbf6a44538364e8aaabecbd2d4d4d4d4d4d4d4d4d4d4d4d4d4
-d4d4d4d4d4d4d5d5d4d3cec1
-718eacbbcdd3d3d4d4d4d5d4d5d4d4d4d5d4d4d5d4d4d5d4d5d4d4d3cfceadbdfbfcfbfcfcfcfc
-fbfdfdfcfbfdfbfbfcfcfbfbfcfce87f42353834578aa9c0cbd2d5d5d5d5d5d5d5d5d5d5d5d5d5
-d5d5d5d5d5d5d5d4d0c9c19f
-739daec0d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfd0bc95d1fbfbfbfcfcfc
-fcfcfcfcfcfcfbfcfcfcfcfcefa84c3b383c39385e88a7c1ccd2d4d5d5d5d5d5d5d5d5d5d5d5d5
-d5d5d5d5d4d4d4d1c6bca676
-81a6b6cbd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfcabf9f80cbfafbfcfcfc
-fbfcfcfcfcfbfcfcfcfcf0b45b3c3a3b3a3738396488a6bfccd3d4d5d5d5d5d5d5d5d5d5d5d5d5
-d4d4d4d4d3d1ccc1b5947871
-94aebfcdd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d5d5d4d4d4d0c6bda6835a8ad1eff7fb
-fcfbfcfcfbfaf3e7c5935a3f373a3b3b3b3b3b3d6b8ba7becbd2d5d5d5d5d5d5d5d5d5d5d5d4d4
-d5d4d4cec7c0b5a280727373
-a4afbdc8d1d2d2d3d4d3d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4d1c8bca98d693b3d5c7e93
-a7aea0988f7c5e4b3d3b3a38383b3b3b3b3b3a43708ea7bdcad2d5d5d5d5d5d5d5d5d5d5d4d2d1
-d2d1c8bbb09a7f7372727272
-a3abb7bfc8cbcdcecfd0d2d4d3d4d4d4d4d4d4d4d4d4d4d5d5d4d5d4d0c8bca78f75473839383d
-3d3a39373836353a383b37373b3a3a393a3a38477590a6bac9d2d4d5d5d5d4d4d4d5d4d4d0ccca
-c6bdb1947971727272737272
-9aa5aaafb7bcbfc0c3c5c6cacccfd0d1d2d3d3d4d4d4d4d5d5d4d4d3cec3b6a28b7b553939393a
-393939393939393939393939393a393a3a393947768fa3b5c3cfd4d4d4d4d4d4d2d2d1cbc5bfbb
-b19b80737172727272727272
-7a91989da0a2a7abafb2b6b7bcc0c4c6c9cdd0d2d4d4d4d4d4d4d4d1c8bba9988a7c593a3a3a3a
-3a393a3a3a3a3a3a3a3a3a3a3a3938393a3a3a4a768a9daebdc9d0d2d3d3d2d2d0cdc7bfb8b2a6
-8a7371717171727272727272
-7172757a838c91979c9fa4a4a6a9aeb1b6bac1c7cdcfd1d2d1d1d1cbbfb09e8f857958383a3839
-3b3b3b3b3c3b3b3c3b3b3b3b3b3a3837383a394c738596a5b5bfc9ced0d1d0cdc7bfbbafa49a7b
-727172727272727272727272
-727273727272747c858b90949496999b9fa4acb3b9bec3c8cbcac4bbafa393867d734e3c404141
-4b555858585858585858585857554d454543404d7082909daab6c0c5c7c8c6beb8b2a89b8a7571
-727272727272727272727272
-7372727272727171727274797d8185898d90959ba2a6abb0b6b6b0a89c92867e776547656f7372
-707172727272727272727272727174736f6f66656c7e8a959fa6aeb3b4b4b1aaa49d9382727272
-727272727272727272727272
-727271717271717171727271717273767b7d82898e9195989b9b98928a837e7972616470727172
-72727171717171717172727272727272727171706d76828e979b9da0a1a19f9b968d7c73727271
-717272727272727272727272
-72727272717171717171717172717170717172767d81868788878683807c776f6e727271717171
-7171717171717171717272727272727272727271706f79838c9192959595938d84787171717272
-727272727272727272727272
-7272727271717171717171717271717171737372727375767a7c7d7b79746e6d72737271717171
-7171717171717171717272727272727272727271726e6f737c8285888786837974727172717272
-727272727272727272727272
-7272727271717171717171717271717171727272727272707273706f6f71707272727271717171
-71717271717171717172727272727272727272727272716e6f6f72757372727172717172727272
-727272727272727272727272
-showpage
-%%Trailer
-end
-%%EOF
diff --git a/contrib/groff/contrib/mom/examples/sample_docs.mom b/contrib/groff/contrib/mom/examples/sample_docs.mom
deleted file mode 100644
index 592c75e170ff..000000000000
--- a/contrib/groff/contrib/mom/examples/sample_docs.mom
+++ /dev/null
@@ -1,574 +0,0 @@
-\# This file contains three greeked documents collated together:
-\#
-\# i) two pages of a novelist's outline
-\# ii) two pages of a chapter using COPYSTYLE DRAFT
-\# iii) three pages of an academic paper, set in two columns
-\#
-\# Mom's defaults are used throughout, except for iii), which
-\# demonstrates some of the ways you can design your own documents.
-\#
-\# Since the text throughout is greeked, and groff doesn't know how
-\# to hyphenate all that pseudo-latinate nonsense, I've inserted
-\# discretionary hyphens (\%) into a large number of the the words.
-\# Normally, this isn't necessary.
-\#
-\# The PRINTSTYLE is TYPESET. If you'd like to see what mom does
-\# with the documents when the PRINTSTYLE is TYPEWRITE, change
-\# PRINTSTYLE TYPESET, below, to PRINTSTYLE TYPEWRITE. Also, in the
-\# third example, comment out PARA_INDENT and QUOTE_INDENT (lines
-\# 332 and 333).
-\#
-\# ===================================================================
-\#
-\# First, a sample "NAMED" document--in this case, an outline.
-\# A novelist wouldn't normally write an outline with numbered heads,
-\# subheads and paraheads. I've turned the feature on merely to
-\# demonstrate it.
-\#
-\# Reference macros
-\#
-.TITLE "Lake Attica's Shores"
-.SUBTITLE "A Romance Novel"
-.AUTHOR "Rosemary Winspeare"
-.DRAFT 1 \" Ignored because COPYSTYLE is FINAL
-.REVISION 2 \" Ignored because COPYSTYLE is FINAL
-.COPYRIGHT "2004 Alma Podborski
-\#
-\# Reference macros for the document cover
-\#
-.DOC_COVERTITLE "Sample mom Documents"
-.MISC "Three types of mom documents" "assembled and collated by mom's author"
-\#
-\# Docstyle macros
-\#
-.DOCTYPE NAMED "Outline"
-.PRINTSTYLE TYPESET \" Or TYPEWRITE to preview "typewritten, double-spaced"
-\#
-.DOC_COVER COVERTITLE MISC
-.COVER TITLE AUTHOR DOCTYPE COPYRIGHT
-\#
-\# Additional setup macros
-\#
-.NUMBER_PARAHEADS
-\#
-.START
-.PP
-.PARAHEAD "A note on the setting"
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. Stet clita kasd gubergren, no sea takimata sanctus est.
-At vero eos et accusam et justo duo do\%lo\%re et ea rebum.
-.PP
-Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
-dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
-voluptua.
-.PP
-Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At
-vero, eos et accusam et justo duo do\%lo\%res et ea rebum. Consetetur
-sadipscing elitr, sed diam nonumy.
-.LINEBREAK
-.PP
-.PARAHEAD "About historical personnages"
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est. Tempor invidunt ut
-labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
-eirmod tempor invidunt ut labore et do\%lo\%re magna. Tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-.NUMBER_HEADS
-.NUMBER_SUBHEADS
-.HEAD "Part One"
-.SUBHEAD "Chapter 1"
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
-sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
-justo duo do\%lo\%res et ea rebum.
-.PP
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor sit
-amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
-invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-Stet clita kasd gubergren, no sea takimata sanctus est.
-.SUBHEAD "Chapter 2"
-.PP
-Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
-dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
-voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
-sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua at vero.
-.SUBHEAD "Chapter 3"
-.PP
-Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
-gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
-ea rebum.
-.HEAD "Part Two"
-.SUBHEAD "Chapter 4"
-.PP
-Stet clita kasd gubergren, no sea takimata sanctus est
-lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
-sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
-et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-.PP
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
-.PP
-Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
-ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
-sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
-duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea takimata
-sanctus est lorem ipsum dolor sit amet. Consetetur sadipscing elitr,
-sed diam nonumy eirmod tempor invidunt.
-.SUBHEAD "Chapter 5"
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
-diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
-justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
-no sea takimata sanctus est lorem ipsum dolor sit amet.
-.PP
-Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
-eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
-gubergren, no sea takimata sanctus.
-.PP
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren. Sea takimata sanctus est lorem ipsum dolor
-sit amet. Accusam et justo duo do\%lo\%res et ea rebum
-.SPREAD
-.RIGHT
-\*[BD]\&...end of sample outline\c
-.EL
-.COLLATE
-\#
-\# The .EL after the line "...end of sample outline" ensures that
-\# mom doesn't spring the page trap, which would deposit a header at
-\# the top of the next page. COLLATE doesn't print a page header
-\# on the first page of a collated document, but if the page trap
-\# has already deposited one there, COLLATE can't undo it.
-\#
-\# Normally, this isn't necessary; here we require it because the
-\# line falls right at the bottom of the page, and would therefore
-\# normally spring the page trap. Sorry for the fussiness, but at
-\# least now you know what to do if you ever encounter the problem
-\# of a page header printing at the top of a collated document.
-\#
-\# Please notice, too, the use of "\&" before "..." Whenever an
-\# input line begins with either a period, an apostrophe or a space,
-\# you must precede it with \&, otherwise the line will disappear,
-\# even when, as here, there's an inline escape that starts the
-\# line.
-\#
-\# =====================================================================
-\#
-\# Next, two pages of a chapter, set in DRAFT style, showing
-\# the use of the EPIGRAPH BLOCK macro and the QUOTE macro.
-\#
-\# You'll notice that the starting page number of this "draft" is 1 (in
-\# roman numerals). COPYSTYLE DRAFT always numbers the first page of a
-\# document 1.
-\#
-\# Reference macros
-\#
-.TITLE "Lake Attica's Shores"
-.SUBTITLE "A Romance Novel"
-.AUTHOR "Rosemary Winspeare"
-.CHAPTER 1
-.CHAPTER_TITLE "The Bonny Blue Yonder"
-.DRAFT 1
-.REVISION 2
-.MISC "Draft 1, 2nd revision"
-\#
-\# Docstyle macros
-\#
-.DOCTYPE CHAPTER
-.COPYSTYLE DRAFT
-\#
-\# Additional style macros
-\#
-.EPIGRAPH_FONT I \" Epigraphs are normally set in roman
-.DRAFT_WITH_PAGENUMBER \" Draft/revision info usually goes in the header
-.COVER_MISC_QUAD RIGHT \" Change default position of the cover "misc" line
-\#
-.COVER CHAPTER+TITLE MISC
-\#
-.START
-.EPIGRAPH BLOCK
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua.
-.RIGHT
-\*[ROM]\(emJoseph E. Blough
-.EPIGRAPH OFF
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
-ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Lorem ipsum
-dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
-voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
-Stet clita kasd gubergren, no sea takimata sanctus est. At vero eos
-et accusam et justo duo do\%lo\%res et ea rebum.
-.PP
-Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
-dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor invidunt.
-.PP
-"Consetetur sadipscing elitr," dixit ea.
-.PP
-"Sed diam nonumy eirmod tempor invidunt ut labore," dixit eum.
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
-eirmod tempor invidunt ut labore et do\%lo\%re magna.
-.PP
-"Lorem ipsum dolor sit amet," dixit ea.
-.PP
-"At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est," dixit eum. "Sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua."
-.PP
-Consetetur sadipscing elitr, sed diam nonumy eirmod tempor:
-.QUOTE
-Invidunt ut labore et do\%lo\%re
-Magna ali\%quyam erat sed diam
-Voluptua stet clita kasd gubergren
-No sea takimata sanctus est.
-.QUOTE OFF
-.PP
-Justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no
-sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur
-sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
-et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-.PP
-"Stet clita kasd gubergren," dixit ea.
-.PP
-"No sea takimata sanctus est," dixit eum.
-.PP
-Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Aliquyam erat
-sed diam voluptua. At vero eos et accusam et justo, duo do\%lo\%res et
-ea rebum.
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam
-erat, sed diam voluptua at vero. Stet clita kasd gubergren, no sea
-takimata sanctus est. Consetetur sadipscing elitr, sed diam nonumy
-eirmod tempor invidunt ut labore et do\%lo\%re magna.
-.PP
-Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est. At vero eos et accusam et
-justo duo do\%lo\%res et ea rebum. Lorem ipsum dolor sit amet, consetetur
-sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
-et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
-accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
-no sea takimata sanctus est. At vero eos et accusam et justo duo
-do\%lo\%res et ea rebum.
-.RIGHT
-\*[BD]\&...end of sample chapter
-.COLLATE
-\#
-\# =====================================================================
-\#
-\# Finally, a sample academic article, set in two columns with a
-\# 1.5-pica gutter between them. This example also uses QUOTES,
-\# BLOCKQUOTES and FOOTNOTES. In addition, it's set RECTO_VERSO,
-\# with differing left and right margins that alternate from page to
-\# page. (The header also flips from right to left, which you can
-\# see on the 2nd and 3rd pages).
-\#
-\# In order to accomodate the narrow measure of the columns, there's also
-\# a demonstration of things you can change with both the typesetting
-\# macros and the document processing "control" macros.
-\#
-\# Reference macros
-\#
-.TITLE "CONTROL EQUALS CHAOS"
-.SUBTITLE "\*[ALD1]The Psychological and Auditory \
-Impact of Serial vs. Aleatoric Music\*[RLD1]"
-.AUTHOR "Joe Chang" "and" "Brad Hegel Connors"
-.COPYRIGHT "2004 J. Chang, B.H. Connors
-.MISC "Submitted June 3, 2004" "\*[IT]Piano Quarterly\*[PREV]"
-\#
-\# Docstyle macros
-\#
-.DOCTYPE DEFAULT
-.COPYSTYLE FINAL
-\#
-\# Additional style macros -- general type parameters
-\#
-.L_MARGIN 6P
-.R_MARGIN 4P+6p
-.PT_SIZE 10
-.AUTOLEAD 1.5
-\#
-\# Additional style macros -- change mom's default behaviour
-\#
-.RECTO_VERSO
-.PAGENUM 1
-.HEADER_LEFT "Chang, Connors" \" Because we have two authors
-.COLUMNS 2 1P+6p
-.SUBTITLE_SIZE +1.5
-.AUTHOR_SIZE +.5
-.DOCHEADER_LEAD +2p
-.HEADER_SIZE +1
-.PARA_INDENT 1P \" Comment this out if previewing PRINTSTYLE TYPEWRITE
-.QUOTE_INDENT 2 \" Comment this out if previewing PRINTSTYLE TYPEWRITE
-.SUBHEAD_SIZE +0
-.BLOCKQUOTE_FAMILY H
-.BLOCKQUOTE_SIZE -2
-.NUMBER_HEADS OFF \" Because we turned them on in the first example
-.NUMBER_SUBHEADS OFF \" Ibid
-\#
-.COVER TITLE AUTHOR COPYRIGHT MISC
-\#
-.START
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam
-erat, sed diam voluptua.
-.PP
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit
-amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
-invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua
-at vero eos et accusam et justo.
-\#
-.BLOCKQUOTE
-Stet clita kasd gubergren, no sea takimata sanctus est lorem.
-Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
-eirmod tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua at vero. Eos et accusam et justo duo do\%lo\%res et
-ea rebum stet clita.\c
-.FOOTNOTE \" Note the use of \c, above, to keep the word and footnote marker together.
-Clita ipsum dolor sit amet, consetetur sadipscing elitr.
-.FOOTNOTE OFF
-.BLOCKQUOTE OFF
-\#
-.PP
-Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata
-sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr.
-Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo
-duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata
-sanctus est.
-.PP
-Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
-erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
-clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
-sit amet. Sadipscing\c
-.FOOTNOTE
-Sadipscing diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua.
-.FOOTNOTE OFF
- elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re
-magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
-justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea.
-\#
-.SUBHEAD "Schoenberg\(em" "The Origins of Serial Pitch Organization"
-\#
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea
-rebum. Stet clita kasd gubergren, no sea takimata sanctus est lorem.
-Ipsum dolor sit amet consetetur sadipscing. Elitr, sed diam nonumy,
-eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat sed
-diam voluptua, at vero eos. Et accusam et justo duo do\%lo\%res et ea
-rebum stet clita kasd gubergren lorem ipsum. Dolor sit amet
-consetetur, sadipscing elitr, sed diam. Nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re. Magna ali\%quyam erat sed diam voluptua at vero.
-Eos et accusam et justo duo do\%lo\%res et ea rebum stet clita kasd.
-Gubergren no sea takimata sanctus est.
-.PP
-Amet consetetur sadipscing elitr sed diam nonumy eirmod. Tempor
-invidunt ut labore. Et dolor\%e magna ali\%quyam erat, sed diam voluptua,
-at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren.
-.PP
-No sea takimata\c
-.FOOTNOTE
-Takimata sadipscing elitr, sed diam nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-.FOOTNOTE OFF
- sanctus est lorem. Ipsum dolor sit amet, consetetur
-sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
-et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
-accusam et justo duo do\%lo\%res et ea rebum amet. Consetetur sadipscing
-elitr sed diam nonumy eirmod tempor invidunt ut labore, et do\%lo\%re
-magna ali\%quyam erat. Sed diam voluptua, at vero, eos et accusam et
-justo duo do\%lo\%res et ea rebum.
-\#
-.SUBHEAD "Messiaen to Stockhausen\(em" "The Quest for Absolute Control"
-\#
-.PP
-Vero eos et accusam et justo duo do\%lo\%res et ea rebum amet:
-.QUOTE
-Eirmod tempor invidunt
-Ut labore et do\%lo\%re magna ali\%quyam erat
-Sed diam voluptua
-At vero eos et accusam et justo duo do\%lo\%res.
-.QUOTE OFF
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr
-sed diam. Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
-Aliquyam erat, sed diam voluptua at vero eos et accusam. Et
-justo duo do\%lo\%res et ea rebum stet.
-.PP
-Elitr sed diam nonumy eirmod tempor. Invidunt ut labore et do\%lo\%re
-magna ali\%quyam erat sed. Diam voluptua at vero eos et accusam et
-justo duo do\%lo\%res et ea rebum.
-\#
-.BLOCKQUOTE
-Sanctus est lorem ipsum dolor sit amet, consetetur sadipscing. Elitr,
-sed diam nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna
-ali\%quyam. Erat sed diam voluptua, at vero eos et accusam et justo
-rebum amet. Consetetur sadipsc\%ing elitr sed diam nonumy eirmod
-sed diam nonumy, eirmod tempor. Invidunt tempor invidunt ut labore.\c
-.FOOTNOTE
-Labore diam nonumy eirmod tempor, invidunt ut labore et do\%lo\%re
-magna ali\%quyam. Erat sed diam voluptua, at vero eos et accusam et
-justo.
-.FOOTNOTE OFF
- Et do\%lo\%re et magna ali\%quyam erat, sed diam voluptua, at vero.
-Eos et accusam et justo duo.
-.BLOCKQUOTE OFF
-\#
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
-.PP
-Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
-erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
-clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
-sit amet. Sadipscing elitr sed diam nonumy eirmod tempor invidunt.
-Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
-Stet clita kasd gubergren no sea. Ali\%quyam erat, sed diam voluptua.
-\#
-.SUBHEAD "John Cage\(em" "Leaving It All to Chance"
-\#
-.PP
-Sit amet, consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
-invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat, sed diam
-voluptua at vero. Eos et accusam et justo duo dolores et ea rebum.
-Stet clita kasd gubergren, no sea taki\%mata sanctus est.
-.PP
-Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
-eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
-gubergren, no sea takimata sanctus est lorem. Ipsum dolor sit amet,
-consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
-ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
-eos et accusam et justo duo do\%lo\%res et ea rebum.
-.PP
-Stet clita kasd gubergren. No sea takimata sanctus est lorem ipsum
-dolor sit. Amet consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
-voluptua, at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum.
-Stet clita kasd gubergren, no sea takimata. Sanctus est lorem ipsum
-dolor sit amet consetetur. Sadipscing elitr sed diam nonumy eirmod
-tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
-voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
-\#
-.BLOCKQUOTE
-.PP
-Stet clita kasd gubergren no sea. Takimata sanctus est lorem ipsum
-dolor sit amet. Consetetur sadipscing elitr sed diam nonumy eirmod
-tempor invidunt ut labore et do\%lo\%re. Magna ali\%quyam\c
-.FOOTNOTE
-Aliquyam nonumy eirmod tempor invidunt ut labore.
-.FOOTNOTE OFF
- erat, sed diam
-voluptua at vero eos et accusam. Et justo duo do\%lo\%res et ea rebum,
-stet clita kasd gubergren, no sea takimata.
-.PP
-Sanctus est lorem ipsum. Dolor sit amet consetetur sadipscing
-elitr. Sed diam nonumy eirmod tempor invidunt ut labore. Et
-do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
-accusam et justo duo. Dolores et ea rebum stet clita kasd gubergren
-no sea.
-.PP
-Takimata lorem ipsum dolor sit amet consetetur sadipscing elitr.
-Sed diam, nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna.
-Aliquyam erat sed diam voluptua. At vero eos et accusam et
-justo.\c
-.FOOTNOTE
-Justo vero eos et accusam et justo duo.
-.FOOTNOTE OFF
-.BLOCKQUOTE OFF
-\#
-.PP
-Duo do\%lo\%res et ea rebum, stet clita kasd gubergren, no sea takimata
-sanctus. Est lorem ipsum. Dolor sit amet, consetetur sadipscing elitr,
-sed diam nonumy. Eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua. At vero eos et accusam.
-.PP
-Et justo duo do\%lo\%res et ea rebum stet clita kasd. Gubergren
-no sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur
-sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
-et dolore magna ali\%quyam erat, sed diam voluptua. At vero eos et
-accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
-no sea takimata sanctus est.
-\#
-.SUBHEAD "Beyond Cage\(em" "Catching the Midnight Train"
-\#
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
-nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam
-erat, sed diam voluptua.
-.PP
-At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
-kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit
-amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
-invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua
-at vero eos et accusam et justo.
-.PP
-Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata
-sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr.
-Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo
-duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata
-sanctus est.
-.PP
-Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
-erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
-clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
-sit amet. Sadipscing\c
-.FOOTNOTE
-Sadipscing diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua.
-.FOOTNOTE OFF
- elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re
-magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
-justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea
-takimata lorem. Ipsum dolor sit amet, consetetur sadipscing elitr.
-Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
-Ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
-duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea
-takimata sanctus est.
-.PP
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
-diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
-ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
-duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea
-takimata sanctus est.
-.RIGHT
-\*[BD]\&...end of sample article\*[PREV]
-.FINIS
diff --git a/contrib/groff/contrib/mom/examples/typesetting.mom b/contrib/groff/contrib/mom/examples/typesetting.mom
deleted file mode 100644
index cd16dc380dae..000000000000
--- a/contrib/groff/contrib/mom/examples/typesetting.mom
+++ /dev/null
@@ -1,673 +0,0 @@
-\# Most mom users rely on mom's document processing macros to format
-\# their work. The doc processing macros take care of all things
-\# typographic and are simple, clear and easy to learn. The kind of
-\# "by hand" typesetting this file shows off is really geared toward
-\# professional typographers. Bear in mind, though, that the full
-\# power of mom's typesetting capabilities can be brought to bear
-\# on document processing as well.
-\#
-\# Basic page setup
-\#
-.PAGE 8.5i 11i \" Printer sheet size
-.L_MARGIN 1i \" Left margin 1 inch
-.R_MARGIN 1i \" Right margin 1 inch (calculates the line length)
-\#
-\# Basic type parameters
-\#
-.FAMILY T \" Times Roman family
-.FT B \" Bold font
-.PT_SIZE 12 \" Point size
-.LS 14 \" Leading (line spacing)
-.LEFT \" Set lines flush left, nofill mode
-\#
-\# Refinements
-\#
-.HY \" Hyphenate
-.KERN \" Automatic pairwise kerning
-.LIGATURES \" Automatic ligature generation
-.SMARTQUOTES \" Enable smartquotes
-.SS 0 \" No extra space between sentences
-\#
-.ALD 1i-1v \" Advance 1 inch from top of paper to first baseline
-Example 1\*[BU 2]:
-.ALD .25v \" Advance an extra 1/4 linespace
-.UNDERSCORE 3.75p "T\*[BU 4]asting notes using padding, string tabs \
-and multi-columns"
-\#
-.SP \" Add an extra line space
-\#
-.FAM H \" Helvetica family
-.PT_SIZE 10
-.LS 11 \" New leading
-\#
-\# The following uses a combination of padding, string tabs, and the
-\# FWD escape to set up five tabs with 1-pica gutters stretched over
-\# the full line length.
-\#
-.SILENT \" Don't print the next line
-.PAD "\*[ST1]VIN#\*[ST1X]\*[FWD 1P]\*[ST2]ROBE#\*[ST2X]\*[FWD 1P]\*[ST3]NEZ#\*[ST3X]\*[FWD 1P]\*[ST4]BOUCHE#\*[ST4X]\*[FWD 1P]\*[ST5]COMMENTAIRES\*[ST5X]"
-.SILENT OFF \" Resume normal printing of text
-\#
-\# Now that the string tabs have been marked off, we "set" them.
-\#
-.ST 1 L \" First string tab flush left, nofill mode (no need for .BR's between input lines)
-.ST 2 L QUAD \" Remaining tabs are flush left/rag right, fill mode
-.ST 3 L QUAD
-.ST 4 L QUAD
-.ST 5 L QUAD
-\#
-.TAB 1 \" Call first tab
-.UNDERSCORE "VIN"
-.TN \" Move to next tab and stay on the same baseline
-.UNDERSCORE "ROBE"
-.TN \" Ibid
-.UNDERSCORE "NEZ"
-.TN \" Ibid
-.UNDERSCORE "BOUCHE"
-.TN \" Ibid
-.UNDERSCORE "COMMENTAIRES"
-.TQ \" Quit tabs
-\#
-.ALD 6p \" Advance an extra 6 points
-.FT R \" Change font to roman (medium)
-.MCO \" Turn multi-column mode on
-\#
-.TAB 1 \" Notice that this tab gets set line-for-line
-\*[IT]Peelee Island \" Set italic
-\*[PREV]Gewürztraminer \" Revert to former font (roman)
-2000
-(Canada)
-.MCR \" Return to top of column
-.TAB 2 \" Call tab 2; in multi-column mode, don't use .TN
-Jaune pâle.
-.MCR
-.TB 3 \" Notice that from here on, we use the alias TB instead of TAB
-Frais, fruité, ci\%tronné, arômes fortes de lichee et de fruits
-tropicaux.
-.MCR
-.TB 4
-Doux, fruité, bien équilibré avec une bonne acidité.
-.MCR
-.TB 5
-Bon apéro. Servir avec des plats
-.RW .1 \" Reduce Whitespace between letters to tighten this line
-indiens ou \%chinois.
-.RW 0 \" Back to normal spacing between letters
-.BR
-Excellent rapport qualité/prix.
-.MCX 8p \" Multi-column mode off; advance an extra 8 points
-.MCO \" Re-invoke multi-columns for next wine description
-.TB 1
-\*[IT]Carau Pujol
-\*[ROM]Tannat
-1995
-(Uraguay)
-.MCR
-.TB 2
-Rubis foncé, vio\%lacée, presque opaque.
-.MCR
-.TB 3
-Belles arômes de fruits foncés (prunes, cerises noires, cassis).
-Odeurs tertiares de cuir, cèdre, violets, eucalyptus, avec une trace
-exotique de Band-Aid*\*[BU 12].
-\#
-\# The \*[BU 12], above, pulls the period back so that it falls
-\# underneath the asterisk. \*[BP<n>] could have been used instead
-\# if you prefer to use points rather than kern units.
-\#
-.MCR
-.TB 4
-Très rond, tannins mûres et veloutés, avec un long finis fruité et
-doucement alcoolique.
-.MCR
-.TB 5
-Superbe\|! Une aubaine à ne pas manquer. Prêt à boire maintenant.
-.MCX 1v \" Multi-columns off; advance an extra linespace
-\#
-\# Now, an example of a hanging indent. This is excessively fussy
-\# from a typographic standpoint in that it hangs the asterisk outside
-\# the current left margin so that the text following it lines up with
-\# with the text in the tasting notes. Notice that in order to use a
-\# hanging indent, you must first set a left indent.
-\#
-.FT I \" Change font to italic
-.PT_SIZE -.5 \" Reduce point size by 1/2 point
-.LS -.5 \" Reduce leading by 1/2 point
-.JUSTIFY \" Set text justified
-\#
-\# Now, move the left margin back by the width of an asterisk plus 2 points...
-\#
-.L_MARGIN -(\w'*'+2p)
-\#
-\# ...and set a left indent equal to the width of an asterisk plus 2 points
-\#
-.IL \w'*'+2p
-\#
-\# Now, set the hanging indent equal to the left indent, effectively pulling
-\# the first line of the following text back to the new left margin.
-\# Subsequent output lines will be indented by the .IL amount.
-\# Notice that when using the \w inline escape, there's no need to append
-\# a unit of measure to it.
-\#
-.HI \w'*'+2p
-*\*[FWD 1p]The term "Band-Aid" means the slightly sweet, vaguely chemical
-smell associated with medical-grade plastics. It is often found in
-wines from terroirs in South America. Provided a wine has a sufficient
-concentration of fruit
-.RW .04 \" Kern the whole next line slightly, so "lipstick" doesn't hyphenate.
-aromas and complex tertiary characteristics, Band-Aid is a Good Thing.
-Otherwise, it smells like cheap lipstick.
-.RW 0 \" Reset kerning to 0
-\#
-\# Notice, above, that although the values for IL and HI are the width
-\# of an asterisk plus 2 points, when setting the first line of text
-\# (the one with the asterisk at the beginning), we put only 1 point of
-\# space after the *. This is to compensate for the fact that in the
-\# italic font, the letter T doesn't align visually with the rest of
-\# the text. As already noted, this is an extremely fussy example. :)
-\#
-.IQ CLEAR \" Cancel and clear stored indent values
-.L_MARGIN 1i \" Reset left margin to its original value.
-\#
-.ALD 2P \" Add 2-picas extra space before next example
-\#
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-\#
-Example 2:
-.ALD .25v
-\#
-.COMMENT \" COMMENT lets you enter comments without using \# or \"
-In the next line, because the string to be underscored must be
-enclosed in double-quotes, you can't use the double-quote character
-itself around the word "Massaging". We circumvent this by using the
-groff inline escapes \(lq and \(rq (leftquote and rightquote).
-.COMMENT OFF \" Remember to turn COMMENT off!
-\#
-.UNDERSCORE 3.75p "\(lqMassaging\(rq \*[BCK 1p]a passage of rag right text"
-.SP \" Add an extra linespace
-\#
-.PT_SIZE 12.5
-.LS 14
-.PT_SIZE -1 \" Reduce point size by 1 point
-Passage using groff spacing defaults
-\#
-.ALD .5v \" Add an extra 1/2 line space
-\#
-.PT_SIZE +1 \" Restore point size
-.QUAD LEFT \" Set quad left, fill mode
-.IB 3P \" Indent 3 picas from both the left and right margins
-.FT R
-The thousand injuries of Fortunato I had borne as I best could;
-but when he ventured upon insult, I vowed revenge. You, who so well
-know the nature of my soul, will not suppose, however, that I gave
-utterance to a threat. \*[IT]At length\*[PREV] I would be
-avenged; this was a point definitively settled\(embut the very
-definitiveness with which it was resolved, precluded the idea of
-risk. I must not only punish, but punish with impunity. A
-wrong is unredressed when retribution overtakes its redresser.
-It is equally unredressed when the avenger fails to make himself
-felt as such to him who has done the wrong.
-.ALD 6p
-\#
-\# The next line is set quad right, nofill mode, 1/2 point smaller
-\# than the preceding text (using the \*[SIZE <n>] inline escape.
-\#
-.RIGHT
-\*[SIZE -.5]\(emEdgar Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]\*[SIZE +.5]
-.SP \" Extra linespace
-.IBQ \" Disable "indent both"
-\#
-\# The passage above, while acceptable in a longer document, exhibits a
-\# few typographic flaws. The shape of the right margin rag exhibits
-\# a decidedly "rounded" appearance. The word "I" stands alone at the
-\# end of the third line. The space between the 1st and 2nd sentences
-\# ("...revenge. You...") is too large, owing to the letter "Y" that
-\# begins the 2nd sentence. The spacing between "A wrong..." (line 6)
-\# is equally too large because of the way "A" and "w" fit together.
-\# The em-dash before Edgar isn't vertically centered with the letter "E".
-\# And so on. The most important correction below is fixing the rag
-\# so that longer and shorter lines alternate. This is accomplished by
-\# manually breaking lines and then slightly lengthening and shortening
-\# them until a pleasing rag is achieved. The remainder of the little
-\# flaws are fixed with inline escapes.
-\#
-.FT B
-.PT_SIZE -1
-.LEFT
-The same passage, \*[BU 4]"massaged"
-\#
-.ALD .5v
-\#
-.FT R
-.PT_SIZE +1
-.QUAD LEFT
-.HY OFF \" Turn automatic hyphenation off
-.BR_AT_LINE_KERN \" Automatically insert a line break (.BR) with each invocation of .RW and .EW
-.WS +1 \" Increase word space slightly
-.IB \" Turn "indent both" back on; values are the same as before
-\#
-The thousand injuries of Fortunato I had borne as I best could; but
-when he ventured upon insult, I \*[BU 2]vowed revenge. \*[BU 4]Y\*[BU 6]ou,
-\*[BU 4]who so \*[BU 2]well know the nature
-.EW .2
-of my soul, \*[BU 2]will not suppose, however, that I gave utterance to
-a threat. \*[IT]At
-.EW .2
-length\*[PREV] I would be avenged; this was a point definitively
-settled\(embut the
-.EW .2
-v\*[BU 1]ery definitiveness with which it was resolved, precluded the idea
-of risk.
-.EW 0
-I must not only punish, but punish with impunity. A \*[BCK 1p]wrong is
-unredressed
-.EW .1
-when retribution overtakes its redresser. It is equally unredressed
-when the
-.RW .1
-avenger fails to make himself felt as such to him \*[BU 2]who has done
-the wrong.
-.RW 0 \" Restore normal kerning
-.WS +0 \" Restore normal wordspacing
-.ALD 6p
-.PT_SIZE -.5
-.RIGHT
-\*[UP 1.5p]\(em\*[DOWN 1.5p]\*[BCK 1p]Edgar \*[BCK 1p]Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]
-.IQ CLEAR \" Cancel and clear stored values of all indents
-\#
-\#
-.NEWPAGE \" Start a new page
-.T_MARGIN 1i \" Set top margin to 1i (approx. equivalent to .ALD 1i-1v above)
-\#
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-.LEFT
-\#
-Example 3:
-.ALD .25v
-.UNDERSCORE 3.75p "A \*[BU 2]recipe for enumerated lists using indents"
-.SP .5v \" Add an extra half line space
-.FAM N \" New Century Schoolbook family
-.FT R
-.PT_SIZE 11
-.LS 13
-.HY \" Turn hyphenation back on
-.JUSTIFY \" Justify text
-This example demonstrates the use of left and hanging indents for
-simple enumerated lists. Nested lists are possible, as the example
-shows; however, the more complex the nesting, the wiser it becomes
-to use (string) tabs, as seen in Example 4.
-.TI 1.5m
-\*[BD]Please note: mom\*[PREV] has macros that allow you to set
-enumerated lists automatically. These examples merely show hanging
-indents and string tabs in use.
-\#
-.JUSTIFY \" Justify text
-.IL \w'\0.\0' \" Establish a left indent equal to the width of 2 figure spaces plus a period.
-.HI \w'\0.\0' \" Establish a hanging indent equal to the size of the left indent.
-.ALD 6p
-\#
-\#
-1.\0This is the first item in the list. N\*[BU 2]otice how the first line
-"hangs" back from the remaining text, which is otherwise
-indented by the width of by two figure-spaces (digit-width
-spaces) and a period.
-.BR
-.HI \" Notice that HI doesn't require an argument once the value's been set
-.ALD 6p
-2.\0This is the second item in the list. As with the above item,
-notice the use of the \*[BU 8]\\0 escape sequence in the input text. It's
-there to ensure that the space after the number/period combination
-always remains the same (i.e. doesn't stretch when the line is
-justified). That way, the text of each item always lines up perfectly.
-\#
-.COMMENT
-Now we're going to set a bullet-point list, indented from the text
-above by 1 pica. IL arguments are always added to whatever value
-is in already effect for IL, hence all we have to do is tell mom to
-indent (from the current left indent) 1 pica plus the width of the
-bullet character ( \(bu ). \*[FWD 3p] puts three points of space after
-the bullet so that the bullet and the text are visually separated.
-.COMMENT OFF
-\#
-\#
-.IL 1P+\w'\(bu\*[FWD 3p]'
-\#
-\# Hanging indents are always relative to the current left indent.
-\# The additional 1-pica indent, above, already having been taken
-\# care of, we only want to hang the first lines of bullet list items
-\# back by the width of the bullet character plus its 3 extra
-\# points of space.
-\#
-.ALD 6p
-.HI \w'\(bu\*[FWD 3p]'
-\*[DOWN 1p]\(bu\*[UP 1p]\*[FWD 3p]This is the first line of a sublist with bullets.
-N\*[BU 2]otice how the first line (the one with the bullet) is indented
-exactly one pica from the text of the list item above it, while the
-remaining lines align with the left indent we set above.
-.ALD 6p
-.HI
-\*[DOWN 1p]\(bu\*[UP 1p]\*[FWD 3p]This is the second item of the sublist with bullets. \*[BU 4]We
-could go on indefinitely, but let's go back to the top level (numbered)
-list...
-\#
-\# The easiest way to return to a previous indent value is by subtraction.
-\# The argument to IL, above, was 1P+\w'\(bu\*[FWD 3p]', so we just reverse
-\# it by putting a minus sign in front. The parentheses are required
-\# for groff to evaluate the expression properly.
-\#
-.IL -(1P+\w'\(bu\*[FWD 3p]')
-.HI \w'\0.\0' \" Reset hanging indent for use with numbered items.
-.ALD 6p
-3.\0...and here we are.
-.HI \" Again, notice that once HI has been set, you don't have to keep passing it an argument.
-.ALD 6p
-4.\0In order not to make the example too long, we'll stop here.
-.IQ CLEAR \" Don't forget to cancel and/or clear indents!
-\#
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-.LEFT
-.SP
-\#
-Example 4:
-.ALD .25v
-.UNDERSCORE 3.75p "A \*[BU 2]recipe for nested lists using string tabs"
-.SP .5v
-.FAM N
-.FT R
-.PT_SIZE 11
-.LS 13
-.JUSTIFY
-Although setting up string tabs is a bit more complex than setting
-up indents, it's \*[BU 3]well worth the effort, especially for nested lists.
-.ALD 6p
-\#
-.COMMENT
-The PAD line, below, sets up two string tabs. The first (ST1)
-is exactly the length of two figure spaces and a period. The
-second (ST2) is simply "the remainder of the line."
-.COMMENT OFF
-\#
-.SILENT \" Don't print any of this
-.PAD "\*[ST1]\0.\0\*[ST1X]\*[ST2]#\*[ST2X]"
-.ST 1 L \" String tabs must be "set" after being marked off in a line
-.ST 2 J \" ST 1 will be set flush left, nofill; ST 2 will be justified.
-.SILENT OFF \" Restore printing
-\#
-.TB 1
-1.
-.TN \" Use .TN here so text stays on the same baseline as the number in tab 1
-This is the first item in the list. N\*[BU 2]otice how, just as in Example 3,
-the first line hangs back from the remaining text, which is otherwise
-indented.
-.ALD 6p
-.TB 1
-2.
-.TN
-This is the second item in the list. N\*[BU 2]otice that when setting "lists"
-with tabs, there's no need to use the \*[BU 8]\\0 escape sequence after
-the number/period combination in the input text.
-.ALD 6p
-\#
-.COMMENT
-Now, set up the indented bullet-point sublist. The PAD line
-says: move forward 12 points (1 pica), then mark off a string
-tab (ST3) that's the length of the bullet character; move foward
-another three points, then make the next string tab (ST4) the
-length of remainder of the line.
-.COMMENT OFF
-\#
-.SILENT
-.PAD "\*[FWD 12p]\*[ST3]\(bu\*[ST3X]\*[FWD 3p]\*[ST4]#\*[ST4X]"
-.ST 3 L
-.ST 4 J
-.SILENT OFF
-.ALD 6p
-.TB 3
-\*[DOWN 1p]\(bu\*[UP 1p]
-.TN
-This is the first line of a sublist with bullets. N\*[BU 2]otice how the
-bullets and the text line up exactly the same as in Example 3.
-.ALD 6p
-.TB 3
-\*[DOWN 1p]\(bu\*[UP 1p]
-.TN
-This is the second item of the sublist with bullets. For the fun of
-it, lets add in an
-.SPREAD
-en-dashed sub-sublist.
-.BR \" We're in a fill mode right now, so you *must* terminate the line with BR
-\#
-.SILENT
-.PAD "\*[FWD 12p]\*[ST5]\(en\*[ST5X]\*[FWD 4p]\*[ST6]#\*[ST6X]"
-.ST 5 L
-.ST 6 J
-.SILENT OFF
-.ALD 6p
-.TB 5
-\*[UP .75p]\(en\*[DOWN .75p]
-.TN
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua.
-.ALD 6p
-.TB 5
-\*[UP .75p]\(en\*[DOWN .75p]
-.TN
-At \*[BU 3]vero eos et accusam et justo duo dolores et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
-.ALD 6p
-.TB 1
-3.
-.TN
-And here we are, back at the top-level numbered list with a minimum
-of muss and fuss,
-.ALD 6p
-.TB 1
-4.
-.TN
-Generally speaking, once you get the hang of string tabs and the
-\*[BD]PAD\*[PREV] macro, you'll find setting up complex nested lists
-(or anything similar to them) easier than with hanging indents.
-.TQ
-\#
-.NEWPAGE
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-.LEFT
-\#
-Example 5:
-.ALD .25v
-.UNDERSCORE 3.75p "Word spacing"
-.ALD 8p
-.FAM P \" Palatino family
-.PT_SIZE 11
-.LS 14
-\#
-\# The "label" lines for the following are set in Helvetica bold, one
-\# point smaller than the examples themselves. This demonstrates the
-\# use of the groff inline escape \f[...] to change both family and
-\# font inline. It also shows using the mom inline \*S[...], which is
-\# an alternate form of the inline, \*[SIZE <n>]
-\#
-\f[HB]\*S[-1]Normal word spacing\*S[+1]\*[PREV]
-.FT R
-N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
-.ALD 4p
-\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]\*[BU 1]2\*S[+1]\*[PREV]
-.FT R
-.WS +2
-N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
-.WS +0
-.ALD 4p
-\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]4\*S[+1]\*[PREV]
-.FT R
-.WS +4
-N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
-.WS +0
-.ALD 4p
-\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]6\*S[+1]\*[PREV]
-.FT R
-.WS +6
-N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
-.WS +0
-.SP 1.5v
-\#
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-\#
-.LEFT
-Example 6:
-.ALD .25v
-.UNDERSCORE 3.75p "Line kerning"
-.ALD 8p
-.FAM P \" Palatino family
-.FT R
-.PT_SIZE 11
-.LS 15
-\#
-\# Here, we set up some tabs so the examples can go into facing columns.
-\#
-.TAB_SET 1 0 19.5P L
-.TAB_SET 2 19.5P 19.5P L
-\#
-.MCO \" Turn multi-columns on
-.TB 1
-\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV]
-.FT R
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\f[HB]\*S[-1]Line "tightened" \(en .RW .1\*S[+1]\*[PREV]
-.RW .1
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\#
-\# In the next line, notice that because it uses a different family
-\# (Helvetica instead of Palatino), the RW macro doesn't affect it.
-\#
-\f[HB]\*S[-1]Line "tightened" \(en .RW .2\*S[+1]\*[PREV]
-.RW .2
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\f[HB]\*S[-1]Line "tightened" \(en .RW .3\*S[+1]\*[PREV]
-.RW .3
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.MCR
-.TB 2
-\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV]
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\f[HB]\*S[-1]Line "loosened" \(en .EW .1\*S[+1]\*[PREV]
-.EW .1
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\f[HB]\*S[-1]Line "loosened" \(en .EW .2\*S[+1]\*[PREV]
-.EW .2
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.ALD 4p
-\f[HB]\*S[-1]Line "loosened" \(en .EW .3\*S[+1]\*[PREV]
-.EW .3
-"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.MCX 1.5v
-\#
-.FAM T
-.FT B
-.PT_SIZE 12
-.LS 14
-.LEFT
-\#
-Example 7:
-.ALD .25v
-.UNDERSCORE 3.75p "Cutaround using left\*[FU 2]/right indents, multi columns \
-and a dropcap"
-.SP
-\#
-.FT R
-.PT_SIZE 11
-.LS 12
-.BR_AT_LINE_KERN OFF \" In justified text, it's best to have this OFF
-\#
-.TAB_SET 1 0 18.5P J
-.TAB_SET 2 20.5P 18.5P J
-.MCO
-.ALD 5P+9p
-\#
-\# The little picture of tux.
-\#
-.PSPIC penguin.ps
-.MCR
-.TAB 1
-.XCOLOR red \" Initialize the X11 color, red
-.DROPCAP_COLOR red
-.DROPCAP_FONT B
-.DROPCAP L 3 COND 80 \" i.e. the letter L dropped 3 lines, condensed to 80% of its normal width
-.EW .2
-orem ipsum dolor sit amet, consetetur sa\%dip\%scing elitr, sed diam
-nonumy eir\%mod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua.
-.EW 0
-.TI 1P
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
-kasd gubergren, no sea taki-
-.SPREAD \" Force justify preceding line before starting indent
-.IR 3.5P
-kimata sanctus est lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor.
-.EW .2
-.TI
-Invidunt ut labore et dolore magna ali\%qu\%yam erat, sed diam voluptua.
-At
-.EW 0
-vero eos et accusam et justo duo dolores et ea rebum.
-.TI
-Stet clita kasd gubergren, no sea ta-
-.SPREAD \" Force justify preceding line before quitting indent
-.IRQ
-kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor
-sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
-in\%vi\%dunt ut labore et dolore magna aliquyam erat. Sed diam voluptua,
-at vero eos et accusam et justo duo
-.SPREAD
-.EW .3
-dolores et ea rebum. Stet clita no kasd guber-
-.SPREAD
-.MCR
-.TB 2
-gren, no sea takimata sanctus est lorem ipsum
-.EW 0
-dolor sit amet. Consetetur sadipscing elitr, sed diam nonumy eirmod
-tempor invidunt ut labore et dolore.
-.TI
-Magna aliquyam erat, sed diam voluptua, at vero eos et accusam.
-Et justo duo dolores et ea
-.SPREAD
-.IL 3.5P
-rebum, stet clita kasd gubergren. No sea
-takimata sanctus est, lorem ipsum dolor sit amet.
-.TI
-Sit amet, consetetur sadipscing elitr, sed diam. Nonumy eirmod tempor
-in\%vi-
-.EW .3
-dunt ut labore et dolore magna. Ali-
-.EW 0
-quyam erat sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum stet.
-.ILQ
-.TI
-Dolores et ea rebum stet clita kasd gubergren, no sea takimata
-sanctus. Sadipscing elitr sed diam, nonumy eirmod tempor, invidunt
-ut labore et dolore magna aliquyam erat. Sed diam voluptua, at vero
-eos et accusam et justo duo dolores et ea rebum.
diff --git a/contrib/groff/contrib/mom/groff_mom.man b/contrib/groff/contrib/mom/groff_mom.man
deleted file mode 100644
index b82fcad71898..000000000000
--- a/contrib/groff/contrib/mom/groff_mom.man
+++ /dev/null
@@ -1,101 +0,0 @@
-.ig
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-written by Werner Lemberg <wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.do nr groff_mom_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.de TQ
-.br
-.ns
-.TP \\$1
-..
-.
-.TH GROFF_MOM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-.
-groff_mom \- groff `mom' macros
-.
-.
-.SH SYNOPSIS
-.
-.B groff
-.B \-mom
-[
-.IR files .\|.\|.\&
-]
-.br
-.B groff
-.B \-m\ mom
-[
-.IR files .\|.\|.\&
-]
-.
-.
-.SH DESCRIPTION
-.
-.B mom
-(\[lq]my own macros\[rq], \[lq]my other macros\[rq], \[lq]maximum
-overdrive macros\[rq], .\|.\|.\&) is a macro set for groff, designed
-primarily to format documents for PostScript output.
-.PP
-.B mom
-provides two categories of macros: macros for typesetting and macros
-for document processing.
-The typesetting macros provide access to groff's typesetting power in
-ways that are simpler to master and to use than groff's primitives.
-The document processing macros provide customizable markup
-\[lq]tags\[rq] that allow the user to design and output
-professional-looking documents with a minimum of typesetting
-intervention.
-.PP
-mom comes with her own (very) complete documentation in HTML format.
-.
-.SH FILES
-.TP
-.B om.tmac
-\[en] the main macro file
-.TQ
-.B mom.tmac
-\[en] a wrapper file that calls om.tmac directly.
-.
-.TP
-.URL @HTMLDOCDIR@/momdoc/toc.html @HTMLDOCDIR@/momdoc/toc.html
-\[en] entry point to the HTML documentation
-.
-.TP
-.B @EXAMPLEDIR@/*.mom
-\[en] example files using mom
-.
-.
-.SH AUTHOR
-.
-.B mom
-was written by
-.MTO peter@faustus.dyn.ca "Peter Schaffter" .
-Please send bug reports to the
-.MTO bug-groff@gnu.org "groff bug mailing list"
-or directly to the author, either at the address above or to
-.MTO ptpi@golden.net "" .
-.
-.cp \n[groff_mom_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/mom/mom.tmac b/contrib/groff/contrib/mom/mom.tmac
deleted file mode 100644
index b1b0b1864999..000000000000
--- a/contrib/groff/contrib/mom/mom.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" mom.tmac
-.\"
-.do mso om.tmac
diff --git a/contrib/groff/contrib/mom/momdoc/appendices.html b/contrib/groff/contrib/mom/momdoc/appendices.html
deleted file mode 100644
index 6b5b63fcd610..000000000000
--- a/contrib/groff/contrib/mom/momdoc/appendices.html
+++ /dev/null
@@ -1,692 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Appendices</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="reserved.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="macrolist.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="APPENDICES">
- <h2 align="center"><u>APPENDICES</u></h2>
-</a>
-
-<ul>
- <li><a href="#MOREDOC">Further notes on this documentation</a>
- <li><a href="#FONTS">Adding PostScript fonts to groff</a>
- <ul>
- <li><a href="#HOWTO">How to create a PostScript font for use with groff</a>
- </ul>
- <li><a href="#CODENOTES">Some reflections on mom, with an apology</a>
- <li><a href="#CONTACT">Contact the author</a>
- <li><a href="reserved.html">List of reserved words</a>
-</ul>
-
-<a name="MOREDOC">
- <h2><u>Further notes on this documentation</u></h2>
-</a>
-
-Some <strong>mom</strong> users are sure to ask: &quot;Why is this
-documentation in html? If <strong>mom</strong>'s so great, why not
-typeset the whole thing to show her off? And if groff's so great,
-why not write a man page?&quot;
-<p>
-Valid questions, to be sure, and <strong>mom</strong> has
-answers. (Okay -- I have answers, but I speak for
-<strong>mom</strong>.)
-<p>
-The documentation is in html because I still find it the best tool
-for navigating lengthy manuals. Html, with its anchors and links,
-came into being precisely so people could do something they'd never
-been able to with the printed word: instantly track down internal
-and external references in a document.
-<p>
-To me, it's essential that people reading <strong>mom</strong>'s
-documentation never have difficulty finding precisely the macro
-they need for a particular task. Equally, when reading up on
-a macro, they should never be presented with terms or other
-macro names for which they cannot instantly find accurate explanations.
-Short of having written the documentation in TeX for the info browser
-(and TeX bloat is one of the reasons I prefer to typeset with groff),
-I can think of no better way to achieve the kind of truly useful
-documentation I wanted than html.
-<p>
-Another reason for html is that working with <strong>mom</strong>
-necessarily involves creating files inside a text editor. I use
-elvis, a truly fabulous vi clone that does a terrific job of rendering
-basic (text only) html. I may have written <strong>mom</strong>,
-but I still regularly call on her documentation. Elvis, with its
-html capabilities, lets me write and format <strong>mom</strong>
-documents AND peruse her documentation, clicking on links as
-necessary, without ever leaving the comfy confines of my
-text editor.
-<p>
-Not everyone, of course, uses an editor with html capabilities.
-For them, firing up a browser is obviously necessary for reading
-<strong>mom</strong>'s documentation. Browsers being what they are,
-and not everyone on the globe having the cash for muscle machines
-to run Galeon, or Konqueror or Mozilla, their browser
-needs to be fast and light--and probably &quot;text-only&quot;.
-<p>
-Some <strong>mom</strong> users may notice the absence of graphics,
-frames, and (for the most part) tables in this documentation. The
-reason is simple: text-only browsers. People who, for whatever
-reason (choice or necessity), use lynx, or links or w3m to read
-the documentation must be able to make sense of it. All of it.
-Graphical examples of <strong>mom</strong> in action might have made
-some parts of the documentation easier to write, but would have
-excluded text-only browser users. And it goes without saying that
-the documentation looks fine if you're reading it in a graphical
-browser.
-<br>
-<hr>
-
-<!=====================================================================>
-
-<a name="FONTS">
- <h2><u>Adding PostScript fonts to groff</u></h2>
-</a>
-
-<a name="SMALL_NOTE"></a>
-<em><strong>Small note:</strong> the term &lt;prefix&gt; in this
-section refers to the directory in which groff is installed,
-typically something like /usr/share/groff/&lt;version#&gt;
-(for distro-specific, pre-compiled groff packages) or
-/usr/local/share/groff/&lt;version#&gt; (if you've built groff
-from source).</em>
-<p>
-Groff comes with a small library of PostScript
-<a href="definitions.html#TERMS_FAMILY">families</a>
-(see the
-<a href="typesetting.html#FAMILY">FAMILY</a>
-macro for a list). The families have four
-<a href="definitions.html#TERMS_FONT">fonts</a>
-associated with them. These fonts are a combination of
-<a href="definitions.html#TERMS_WEIGHT">weight</a>
-and
-<a href="definitions.html#TERMS_SHAPE">shape</a>:
-<br>
-<ul>
- <li><strong>R</strong> (Roman, usually Medium weight),
- <li><strong>I</strong> (Italic, usually Medium weight),
- <li><strong>B</strong> (Bold, usually Roman shape) and
- <li><strong>BI</strong> (Bold Italic).
-</ul>
-<p>
-If you do a lot of document processing or typesetting with
-<strong>mom</strong>, you'll find, sooner or later, that these
-families and their associated fonts aren't sufficient. You'll want
-to supplement them, either with more fonts for the families already
-provided--"Damn! I need Helvetica Bold Condensed Italic!"--or with
-entire new families.
-<p>
-Without going into the gory details (yet), while it's true that
-adding fonts to groff is a relatively straightforward
-process, extending existing families or adding new ones requires
-some planning.
-<p>
-The traditional approach to extending groff families has been
-to create new families for non-default weights and
-shapes (e.g. Light, which is a weight; Condensed, which is a
-shape), then to associate them with groff's predefined <strong>R,
-I, B</strong> and <strong>BI</strong> font styles. An example
-of this can be seen in the groff PostScript font library itself
-(&lt;prefix&gt;/font/devps/): there's one &quot;family&quot; for
-Helvetica (HR, HI, HB, HBI) and another for Helvetica Narrow (HNR,
-HNI, HNB, HNBI).
-<p>
-The difficulty with this approach is that typographers
-tend to think of &quot;families&quot; as referring to the
-entire set of font weights and shapes associated with a
-particular family name. For example, when a typesetter says
-&quot;the Helvetica family&quot;, s/he is including the <a
-href="definitions.html#TERMS_WEIGHT">weights</a> Helvetica Thin,
-Helvetic Light, Helvetica Regular, Helvetica Bold, Helvetica Heavy,
-etc, and all their associated
-<a href="definitions.html#TERMS_SHAPE">shapes</a>
-(Roman,
-Italic, Condensed, Narrow, Extended, Outline, etc).
-<p>
-Thus, intuitively, when a typesetter gives <strong>mom</strong> a
-<kbd>.FAM(ILY)</kbd> directive, s/he reasonably expects that any
-subsequent <kbd>.FT</kbd> directive will access the desired font
-from the Helvetica family--without the need to state explicitly both
-family and font to <kbd>.FT</kbd>, as it is explained one can do in
-the
-<a href="typesetting.html#FAMILY">FAMILY</a>
-and
-<a href="typesetting.html#FONT">FT</a>
-sections of these documents.
-<p>
-If one had, say, the fonts, Helvetica Light Roman
-and Helvetica Light Italic as well as Helvetica Light Condensed
-Roman and Helvetica Light Condensed Italic, the traditional
-approach would require two &quot;partial&quot; families: HLR/HLI and
-HLCDR/HLCDI. Accessing these family/font combos
-routinely throughout a document would then require
-changing family (with <kbd>.FAM(ILY)</kbd>) and selecting the
-desired font (with <kbd>.FT R</kbd> or <kbd>.FT I</kbd>), or
-passing <kbd>.FT</kbd> the lengthy family+fontname (.e.g. <kbd>.FT
-HLCDI</kbd>).
-<p>
-Fortunately, groff provides a mechanism whereby it's possible to
-extend the basic <strong>R, I, B</strong> and <strong>BI</strong>
-fonts (&quot;styles&quot; in groff-speak) so that one can, in
-fact, create extensive type families, and access all the fonts
-in them with <kbd>.ft</kbd> (groff) or <kbd>.FT</kbd> (mom).
-<p>
-<strong>mom</strong> uses this mechanism to offer, in addition to
-groff's default PostScript font styles, the following:
-<p>
-<a name="STYLE_EXTENSIONS"></a>
-<pre>
-Mom's extensions to groff's basic font styles
-=============================================
-
- L = Light Roman
- LI = Light Italic
- LCD = Light Condensed Roman
- LCDI = Light Condensed Italic
- LEX = Light Extended Roman
- LEXI = Light Extended Italic
- CD = Medium/Book Condensed Roman
- CDI = Medium/Book Condensed Italic
- EX = Medium/Book Extended Roman
- EXI = Medium/Book Extended Italic
- DB = DemiBold Roman
- DBI = DemiBold Italic
- BCD = Bold Condensed Roman
- BCDI = Bold Condensed Italic
- BEX = Bold Extended Roman
- BEXI = Bold Extended Italic
- HV = Heavy Roman
- HVI = Heavy Italic
- HVCD = Heavy Condensed Roman
- HVCDI = Heavy Condensed Italic
- HVEX = Heavy Extended Roman
- HVEXI = Heavy Extended Italic
- BL = Black Roman
- BLI = Black Italic
- BLCD = Black Condensed Roman
- BLCDI = Black Condensed Italic
- BLEX = Black Extended Roman
- BLEXI = Black Extended Italic
- UBL = Ultra-Black Roman
- UBLI = Ultra-Black Italic
-</pre>
-
-Thus, with <strong>mom</strong>, if you've installed, say, some
-extra Helvetica fonts and named them according to the convention FS
-(where &quot;F&quot; means family and &quot;S&quot; means font
-style), once having entered
-<p>
-<pre>
- .FAMILY H
- or
- .FAM H
-</pre>
-
-you can access any of those Helvetica fonts simply by
-passing the correct argument from the list above to
-<a href="typesetting.html#FONT">FT</a>.
-<p>
-For example, if you were working in Medium Roman (<kbd>.FT R</kbd>)
-and you needed Medium Condensed Italic for a while (assuming it's
-installed), you'd just type
-<p>
-<pre>
- .FT CDI
-</pre>
-
-to access the Medium Condensed Italic font from the Helvetica
-family.
-<p>
-<strong>Mom</strong>'s list of font styles doesn't pretend to
-be exhaustive, but rather tries to cover the basic weight/shape
-combinations likely to be found in any reasonably complete type
-family.
-<p>
-The actual extension names are arbitrary and can be used in a
-flexible manner. For example, if you create a family that has a
-DemiBold font (DB) but no Bold font (B), you might find it more
-convenient to give the DemiBold font the extension &quot;B&quot;.
-Equally, if the family has an ExtraBold font, you might find it more
-convenient to use the extension &quot;HV&quot; (Heavy).
-<a name="REGISTER_STYLE"></a>
-<p>
-However, you may, at needs, want to add to <strong>mom</strong>'s
-list of font styles. You can do this by editing the file, om.tmac.
-Near the top, you'll see lines of the form
-<p>
-<pre>
- .sty \n[.fp] L \" Light Roman
- .sty \n[.fp] LI \" Light Italic
- .sty \n[.fp] LCD \" Light Condensed Roman
-</pre>
-
-Simply add your new font style by imitating what you see and
-plugging in your new font style (having, of course, first created the
-font, correctly named, in groff's PostScript font directory; see
-<a href="#HOWTO">How to create a PostScript font for use with groff</a>).
-<p>
-For example, if you already have some fonts from the Univers
-family installed and have called the family UN, you might decide at
-some point to add the Bold Outline font (UNBO). In which case,
-you'd add
-<p>
-<pre>
- .sty \n[.fp] BO \" Bold Outline
-</pre>
-
-to the <kbd>.sty \n[.fp] &lt;font style&gt;</kbd> list in om.tmac.
-<p>
-Be careful, though, that any styles you add do not conflict
-with <strong><u>family</u></strong> names that already exist.
-&quot;C&quot;, for example, conflicts with the Courier family
-(CR, CI, CB, CI). Were you to create a font style &quot;C&quot;,
-thinking that <kbd>.FT C</kbd> would give you access to font style
-once you'd given a <kbd>.FAM(ILY)</kbd> directive, you'd get a nasty
-surprise: your type would come out in Courier Roman!
-<p>
-<strong>VERY IMPORTANT NOTE: mom</strong>'s font extensions are
-not &quot;user-space&quot; controllable via a macro. If you've
-been using groff for a long time, and have already rolled your own
-solution to adding PostScript families, fonts, weights, shapes, etc. to
-groff, you may find that <strong>mom</strong>'s font extensions
-conflict with your own scheme. Should that be the case, comment out
-the <kbd>.sty \n[.fp] &lt;font style&gt;</kbd> lines found near the
-top of the om.tmac file.
-
-<a name="HOWTO"><h3><u>How to create a PostScript font for use with groff</u></h3></a>
-These instructions aren't meant to cover all possibilities, merely
-to present one way of making PostScript families/fonts available to
-groff and <strong>mom</strong>.
-<p>
-GNU/Linux distributions being what they are, directory locations may
-differ and the presence of some executables can't be guaranteed.
-I run a Debian system. The instructions reflect that. Users of
-other distros will have to interpret them according to the way their
-distro operates.
-<p>
-What you need before you start:
-<br>
-<ul>
- <li>groff, version 1.18 or higher
- <br>
- (Debian package: groff)
- <li>a full installation of gs and associated tools
- <br>
- (Debian package: gs or gs-gpl)
- <li>a library of gs fonts
- <br>
- (Debian package: gsfonts)
- <li>a utility for converting TrueType fonts to Type1 fonts
- <br>
- (Debian package: ttf2pt1)
- <li>a font manager
- <br>
- (Debian packages: defoma, psfontmgr, dfontmgr)
- <li>perl
- <br>
- (Debian package: perl)
-</ul>
-<br>
-A reasonably complete installation of any major GNU/Linux distro
-should already have these on your system, except perhaps for the
-utility to convert TrueType fonts to Type1 fonts.
-<p>
-Initial preparation (you only have to do this once):
-<br>
-<ol>
- <li>If you don't already have one, create a directory in your
- home directory to hold new fonts. Any directory name will do.
- I use ~/Fonts, with subdirectories for Type1, TrueType and Groff
- fonts.
-<a name="SITE-FONT"></a>
- <li>Locate the groff directory, site-font. The exact location is
- difficult to predict, owing to differences between distros
- and whether you're using a pre-packaged groff or have built
- it from source. Some typical locations are
- <br>
- <ul>
- <li>/usr/share/groff,
- <li>/usr/local/share/groff
- <li>/etc/groff
- </ul>
- <p>
- If you can't find the site-font directory, locate
- groff's site-tmac directory, and, as root, create site-font
- in the same directory as the one that holds site-tmac.
- E.g., if you find site-tmac in /usr/share/groff, create
- site-font in /usr/share/groff.
- <li>Locate the file <kbd>&lt;prefix&gt;/font/devps/generate/textmap</kbd>
- and symlink it to <kbd>textmap</kbd> in the directory that
- contains your personal collection of PostScript fonts. (See the
- <a href="#SMALL_NOTE">Small Note</a>,
- above, for the meaning of &lt;prefix&gt;). On my system,
- at the time of writing, &lt;prefix&gt; is
- /usr/local/share/groff/1.19.2/, therefore, I symlink it in
- ~/Fonts/Type1 with
- <br>
- <pre>
-ln -s /usr/local/share/groff/1.19.2/font/devps/generate/textmap textmap
- </pre>
- <li>Locate the file &lt;prefix&gt;/font/devps/text.enc and
- symlink it to <kbd>text.enc</kbd> in your personal font
- directory. On my system, in ~/Fonts/Type1
- <pre>
-ln -s /usr/local/share/groff/1.19.2/font/devps/text.enc text.enc
- </pre>
- <li>Make sure you know which directory/ies holds your gs fonts.
- You'll need the information later. On a Debian box, some
- typical locations are
- <br>
- <ul>
- <li>/usr/lib/ghostscript/fonts
- <li>/usr/share/ghostscript/fonts
- <li>/usr/share/fonts/type1/gsfonts
- </ul>
-</ol>
-<br>
-Font creation/installation:
-<br>
-<ol>
- <li>Acquire the font in either Type1 (.pfb) or TrueType
- (.ttf) format.
- <li>Place the font in your personal font directory; for me,
- that's ~/Fonts/Type1 or ~/Fonts/TrueType.
- <li>In your personal font directory, run one of the following:
- <br>
- <ul>
- <li>For Type1 fonts
- <br>
- <ul>
- <li><kbd>getafm fontfilename.pfb | gsnd - > fontfilename.afm</kbd>
- <br>
- For Type1 fonts, this will generate something called
- an .afm (Adobe Font Metrics) file, which is
- required to create PostScript fonts for groff.
- </ul>
- <li>For TrueType fonts
- <br>
- <ul>
- <li><kbd>ttf2pt1 \-b fontfilename.ttf</kbd>
- <br>
- For TrueType fonts, this will generate a PostScript
- .pfb file as well as an .afm file.
- </ul>
- </ul>
- <li>Still in your personal font directory, run
- <br>
- <ul>
- <li><kbd>afmtodit -e text.enc fontfilename.afm textmap GROFF_FONTNAME</kbd>
- </ul>
- <p>
- Q: <em>How do I choose a GROFF_FONTNAME?</em>
- <p>
- A: Start by considering the
- <a href="definitions.html#TERMS_FAMILY">family</a>
- to which the font belongs. If you're adding to a family that
- already exists in groff's &lt;prefix&gt;/font/devps
- directory, that will be the first part of the font name.
- (See
- <a href="typesetting.html#FAMILY">here</a>
- for a list of families already installed, along with their groff
- names.) Add to that name the appropriate weight/style extension,
- listed
- <a href="#STYLE_EXTENSIONS">here</a>.
- <p>
- For example, if you're adding Helvetica Light Roman, your
- GROFF_FONTNAME would be <strong>HL</strong>. If you're
- adding Helvetica Light Italic, your GROFF_FONTNAME would be
- <strong>HLI</strong>.
- <p>
- If you're adding a font not already in groff's PostScript
- families, first choose a meaningful name for the
- <a name="definitions.html#TERMS_FAMILY">family</a>
- to which the font belongs. The name can be anything you like. If,
- for example, the family is Garamond, you could choose GARAMOND,
- GARA, GD, or even just plain G as the family name. Then tack on the
- appropriate style/weight extension. Thus, if you were installing
- Garamond Bold Condensed Italic and had chosen <strong>GD</strong>
- as the family name for Garamond, your GROFF_FONTNAME would be
- <strong>GDBCDI</strong>.
- <p>
- In <strong>mom</strong>, you can then access the Garamond
- family with <kbd>.FAM GD</kbd>, and the Bold Condensed
- Italic font wth <kbd>.FT BCDI</kbd>.
- <p>
- <strong>Note:</strong> The family name need not be in upper
- case, and there's no limit to the length of the name.
- &quot;Garamond&quot;, for example, could be the name you
- give the Garamond family. In fact, you might find it
- preferable, since a) you wouldn't have to remember how
- you'd named the family, and b) should you be scanning
- your
- <a href="#SITE-FONT">site-font directory</a>,
- something like GaramondBCDI will be more meaningful than,
- say, GDBCDI.
- <li>Copy or move GROFF_FONTNAME to your
- <a href="#SITE-FONT">site-font directory</a>,
- or change to the site-font directory and make a symlink to
- GROFF_FONTNAME in your personal directory.
- <li>Copy or move the .pfb file to the directory that
- holds your gs fonts, or change to that directory and make a
- symlink to the .pfb file in your personal directory.
- <li>Do whatever your system or distro requires in order to
- register the new PostScript font (the .pfb file). On a
- Debian system, as root, you can run dfontmgr for a
- graphical interface that will take care of registering the
- font.
-</ol>
-<p>
-Written out in full, adding fonts looks like a lot of work. It
-isn't. Basically, it's just:
-<br>
-<ul>
- <li>acquire the font
- <li>generate an .afm file for the font
- <li>create the groff font
- <li>put the groff font in &lt;prefix&gt;/font/devps
- <li>make sure gs knows about the font
-</ul>
-<br>
-After you've done it a couple of times, it all makes sense, and is
-really quite easy. Not to mention that once you understand the
-process, you can write a bash script to automate the process.
-Here's an example, which you can adapt to your own needs. The
-script requires an argument (the .pfb filename), then prompts for
-the GROFF_FONTNAME.
-<p>
-<pre>
-#! /bin/bash
-
-# A script for installing Type1 fonts.
-#
-# Builds .afm files from .pfb files, generates a groff font from the
-# .afm file, makes a symlink in /usr/lib/ghostscript/font/ to the
-# .pfb file, and a symlink in site-font to the groff font
-
-# .pfb filename, stripped of .pfb extension
-FONT=`basename $1 .pfb`
-
-# Directory holding my personal collection of type1 fonts
-FONTDIR="$HOME/Fonts/Type1"
-
-# Directory holding system ghostscript fonts
-GS_FONTDIR="/usr/lib/ghostscript/fonts"
-
-# Location of site-font/devps
-GROFF_SITE_FONTDIR="/usr/local/share/groff/site-font/devps"
-
-# Personal groff fonts directory
-GROFF_FONTS="$HOME/Fonts/Groff"
-
-# Symlinks to textmap and text.enc
-TEXTMAP="$FONTDIR/textmap"
-TEXTENC="$FONTDIR/text.enc"
-
-if [ ! `pwd` = "$FONTDIR" ] ; then
- echo "Changing into $FONTDIR directory.."
- cd $FONTDIR
- sleep 1
-else
- sleep 1
-fi
-
-echo -n "Groff name for this font: "
-read FONTNAME
-sleep 1
-
-echo "Getting .afm.."
-getafm $FONT.pfb | gsnd - > $FONT.afm
-sleep 1
-
-echo "Creating $FONTNAME.."
-afmtodit -e $TEXTENC $FONTDIR/$FONT.afm $TEXTMAP $FONTNAME
-mv -i $FONTNAME $GROFF_FONTS
-sudo ln -s $GROFF_FONTS/$FONTNAME $GROFF_SITE_FONTDIR/$FONTNAME
-sleep 1
-
-echo "Linking $FONT in $GS_FONTDIR.."
-cd $GS_FONTDIR
-sudo ln -s $FONTDIR/$FONT.afm $FONT.afm
-sudo ln -s $FONTDIR/$FONT.pfb $FONT.pfb
-sleep 1
-
-# This next bit is Debian specific. If you're not running a
-# Debian system, replace it with whatever your distro requires
-# in order to register Type1 fonts.
-
-if [ !`pidof -x /usr/bin/dfontmgr` ] ; then
- echo "I will now run dfontmgr so you can register the font."
- exec sudo dfontmgr &
-else
- echo "You may now register the font with dfontmgr."
-fi
-</pre>
-<hr>
-
-<!=====================================================================>
-
-<a name="CODENOTES">
- <h2><u>Some reflections on mom</u></h2>
-</a>
-
-<p>
-<strong>Mom</strong>, as a complete macro set, had her origins
-in a &quot;library&quot; of groff routines I wrote over the
-years to handle various aspects of typesetting and document
-processing that weren't adequately covered by ms, me, mm, and so
-on. Typically, I'd use the library to cobble together macro
-sets for new challenges as they came my way.
-<p>
-If, as Eric Raymond asserts, open source begins with a programmer
-scratching a personal itch, then <strong>mom</strong> can truly be
-called open source, even if, a mere humble set of macros standing on
-the shoulders of a giant named troff, she isn't programming at all.
-<p>
-As a writer living in a perpetual state of penury, all the computers
-I've ever owned have been hand-me-downs -- several generations
-out-of-date and &quot;resource challenged&quot;. Disk space has
-always been an issue, as has processor speed and available RAM.
-One of the reasons I run GNU/Linux is that it has helped enormously
-to get the most out of my poor little boxes. (It has been pointed
-out to me that NetBSD might be an even better choice of operating
-systems for computers with limited resources.)
-<p>
-In Linux-land, the choice of typesetting systems basically comes down
-to groff or TeX. Both are wonderful -- monumental achievements if you
-ask me -- and both have their own particular strengths. However, for
-people in my financial position (and there are millions of us around
-the globe, in both developed and developing countries), TeX and groff
-have one big difference: size. TeX is huge. Even its most ardent
-supporters agree it suffers from bloat, on top of being complex and
-unwieldy to manage. Groff is tiny by comparison, occupying minimal
-disk space and having only a small memory footprint while at the same
-time being flexible and powerful, typographically speaking. I've run
-it successfully on a 386 with 8 megs of RAM and a 250 meg hard disk.
-<p>
-However, groff has always had a liability: it's incredibly geeky.
-Owing to its very long history, it -- and its &quot;power users&quot;
--- have remained stuck in a time warp. Most common macro packages
-still look as they did in those decades when memory was exorbitantly
-expensive and every byte mattered. Documentation -- not always
-easy to find -- is written as if all readers are computer whizzes,
-or at least have a university degree in one of the higher sciences.
-<p>
-By no means a stupid man, nor unfamiliar with the precepts of
-programming, I've more than once torn my hair out over the terseness and
-ambiguity of groff's documentation. Making sense of certain primitives
-has often involved days of testing, interpreting the documentation
-instead of just using the primitive.
-<p>
-(ADDENDUM to the previous two paragraphs: A tremendous amount of
-effort has gone into creating a groff manual that can be read with
-"info," as well as creating truly useful man pages. The info
-manual is clear and well-written, so my comments are actually out
-of date. I leave them in for the benefit of groff newbies, who may
-still find the documents a bit intimidating.)
-<p>
-For some time now, groff users and macro writers have had the
-option to use &quot;long&quot; names, yet have mostly chosen not to.
-With long names, it's possible to create macro sets that are humanly
-readable and easy to interpret, encouraging development and evolution.
-What's more, the macros themselves need not be terse, intimidating,
-and easily forgotten 1- or 2-letter commands inserted in the body
-of a document. They can be sensible and helpful to everyone, groff
-newbies and old hands alike.
-<p>
-<strong>Mom</strong>'s macro file, om.tmac, uses long names, aliases,
-and a host of other groff goodies that have become part of the
-whole groff picture under the unflagging guidance of groff's current
-maintainer, Werner Lemberg. Nearly every macro, number register and
-string is &quot;recognizable&quot; simply by its name. The file is
-heavily commented. A consistent, if idiosyncratic, indenting style
-is used as well, significantly improving readability. Anyone
-wanting to futz around with <strong>mom</strong>'s macros should be
-able to do so with a minimum of head scratching.
-<br>
-<hr>
-
-<!=====================================================================>
-
-<a name="CONTACT">
- <h2><u>Contact the author</u></h2>
-</a>
-
-<p>
-If you have any questions or comments about <strong>mom</strong>,
-suggestions to make, criticisms to offer, or bugs to report, use the
-groff mailing list at
-<a href="mailto:groff@ffii.org">groff@ffii.org</a>
-(subscription information available
-<a href="http://ffii.org/mailman/listinfo/groff/">here</a>)
-or contact me, Peter Schaffter, directly at
-<i>&#112;&#101;&#116;&#101;&#114;&#64;&#102;&#97;&#117;&#115;&#116;&#117;&#115;&#46;&#100;&#121;&#110;&#46;&#99;&#97;</i>
-or
-<i>&#112;&#116;&#112;&#105;&#64;&#103;&#111;&#108;&#100;&#101;&#110;&#46;&#110;&#101;&#116;</i>.
-
-<p>
-Please include the word &quot;mom&quot; or &quot;groff&quot; in the
-Subject: line of any message sent to my personal address, or you
-risk the wrath of my implacable spam filters. :)
-<p>
-If you want to visit <strong>mom</strong>'s homepage, you'll find
-it
-<a href="http://faustus.dyn.ca/mom/mom.html">here</a>.
-<p>
-<hr>
-<a href="reserved.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="macrolist.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/color.html b/contrib/groff/contrib/mom/momdoc/color.html
deleted file mode 100644
index a6badbc4ba20..000000000000
--- a/contrib/groff/contrib/mom/momdoc/color.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Colour</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="docprocessing.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="inlines.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-<a name="TOP"></a>
-<h1 align="center">
- <a name="COLOR_INTRO"><u>Coloured text</u></a>
-</h1>
-<p>
-<a href="#INTRO_COLOR">Introduction to coloured text</a>
-<br>
-<a href="#MACROS_COLOR">Index of colour macros</a>
-<p>
-
-<a name="INTRO_COLOR">
- <h2><u>Introduction to coloured text</u></h2>
-</a>
-
-<strong>Mom</strong>'s support for coloured text is straightforward.
-You begin by telling <strong>mom</strong> about the colours you want
-with
-<a href="#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="#XCOLOR">XCOLOR</a>.
-Afterward, any time you want text to be coloured, you either colour
-it with an
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-that contains the colour name (e.g. <kbd>\*[red]</kbd> or
-<kbd>\*[blue]</kbd>) or invoke the macro,
-<a href="#COLOR">COLOR</a>,
-with the name of the colour you want.
-<a name="COLOR_EXAMPLE"></a>
-<p>
-For example, say you want to have the name &quot;Jack&quot; in the
-sentence &quot;All work and no play makes Jack a dull boy&quot;
-appear in yellow. You'd begin by telling <strong>mom</strong> about
-the colour, yellow. There are two ways of doing this; see
-<a href="#NEWCOLOR">NEWCOLOR</a>
-and
-<a href="#XCOLOR">XCOLOR</a>
-for a full explanation of the difference between the two. If you
-use <strong>XCOLOR</strong>, you'd enter this:
-<p>
-<pre>
- .XCOLOR yellow
-</pre>
-
-If you use <strong>NEWCOLOR</strong>, you might enter
-<p>
-<pre>
- .NEWCOLOR yellow RGB #FFFF00
-</pre>
-
-<a name="COLOR_EXAMPLE2"></a>
-After &quot;defining&quot; (or &quot;initializing&quot;) the colour
-&quot;yellow&quot;, you'd colourize the name, Jack, either with an
-inline escape
-<p>
-<pre>
- All work and no play makes \*[yellow]Jack\*[black] a dull boy.
-</pre>
-
-or with the <strong>COLOR</strong> macro
-<p>
-<pre>
- All work and no play makes
- .COLOR yellow
- Jack
- .COLOR black
- a dull boy.
-</pre>
-
-Notice, in both examples, that a) you have to set the colour back to
-black after &quot;Jack&quot;, and b) you don't have to define or
-intialize the colour, black. <strong>Mom</strong> predefines
-&quot;black&quot;, &quot;BLACK&quot;, &quot;white&quot; and
-&quot;WHITE&quot; for you.
-<p>
-For information on using colour during
-<a href="docprocessing.html#INTRO_MACROS_DOCPROCESSING">document processing</a>,
-see
-<a href="docprocessing.html#COLOR">Colour support in document processing</a>.
-<p>
-<strong>Please note: Mom</strong>'s colour support is for text only.
-She doesn't support &quot;fill&quot; (or &quot;background&quot;)
-colour for drawn objects. Please also note that if you're
-accustomed to using groff's <kbd>.defcolor</kbd> to define colours,
-and groff's inline <kbd>\m[&lt;colorname&gt;]</kbd> to call them, you may
-continue to do so without confusing <strong>mom</strong>.
-
-<p>
-<a name="MACROS_COLOR"><h3><u>Index of colour macros</u></h3></a>
-<ul>
- <li><a href="#NEWCOLOR">NEWCOLOR</a>
- <li><a href="#XCOLOR">XCOLOR</a>
- <li><a href="#COLOR">COLOR</a>
- <li><a href="#COLOR_INLINE">\*[&lt;colorname&gt;]</a> inline escape
-</ul>
-<p>
-
-<!---NEWCOLOR--->
-
-<hr width="66%" align="left">
-<a name="NEWCOLOR"><h3><u>Creating (initializing) a colour with NEWCOLOR</u></h3></a>
-<br>
-<nobr>Macro: <strong>NEWCOLOR</strong> &lt;colour name&gt; [&lt;colour scheme&gt;] &lt;colour components&gt;</nobr>
-
-<p>
-<strong>NEWCOLOR</strong> lets you create a colour, rather like an
-artist mixing paint on a palette. The colour isn't used
-immediately; <strong>NEWCOLOR</strong> merely tells
-<strong>mom</strong> how to mix the colour when you need it. If
-you haven't invoked <strong>NEWCOLOR</strong> (or
-<a href="#XCOLOR">XCOLOR</a>),
-<strong>mom</strong> doesn't have a clue what you mean when you
-reference a colour (with
-<a href="#COLOR">COLOR</a>
-or
-<a href="#COLOR_INLINE">\*[&lt;color name&gt;]</a>).
-<p>
-The first argument to <strong>NEWCOLOR</strong> is a name for your
-colour. It can be anything you like--provided it's just one word
-long--and can be caps, lower case, or any combination of the two.
-<p>
-The second argument, which is entirely optional, is the &quot;colour
-scheme&quot; you want <strong>mom</strong> to use when mixing the
-colour. Valid arguments are <strong>RGB</strong> (3 components,
-red green blue), <strong>CYM</strong> (3 components cyan yellow
-magenta), <strong>CMYK</strong> (4 components cyan magenta yellow
-black) or <strong>GRAY</strong> (1 component). If you omit the
-second argument, <strong>mom</strong> assumes you want RGB.
-<p>
-The final argument is the components of your colour. This can be
-hexadecimal string starting with a pound sign (#) (for colour values
-in the 0-255 range) or two pound signs (##) (for colour values
-in the 0-65535 range), or it can be a series of decimal digits,
-separated by spaces, one digit per component, with the argument
-enclosed in double quotes. (If this is all gibberish to you, see
-<a href="#COLOR_TIP">Tips for newbies</a>.)
-<p>
-Thus, to tell <strong>mom</strong> about a colour named
-&quot;YELLOW&quot;, you could enter one of the following:
-<p>
-<pre>
- .NEWCOLOR YELLOW #FFFF00 \"or ##FFFFFFFF0000 or "1 1 0"
- .NEWCOLOR YELLOW RGB #FFFF00 \"or ##FFFFFFFF0000 or "1 1 0"
- .NEWCOLOR YELLOW CYM #00FF00 \"or ##0000FFFF0000 or "0 1 0"
- .NEWCOLOR YELLOW CYMK #00FF0000 \"or ##0000FFFF00000000 or "1 1 0"
-</pre>
-
-After you've told <strong>mom</strong> about a colour, you can then get
-her to set text in that colour either with the inline escape
-<a href="#COLOR_INLINE">\*[&lt;colorname&gt;]</a>
-or the macro
-<a href="#COLOR">COLOR</a>.
-(See the
-<a href="#COLOR_EXAMPLE">example</a>,
-above.)
-<br>
-<h3><u>Tips for newbies</u></h3>
-Colour manipulation can be tremendously confusing if you don't have
-a background in graphic arts or computing. My advice, if color
-intimidates you, is to stick to using <strong>mom</strong>'s
-default RGB colour scheme, and to fire up a color chooser that
-gives you the RGB values you want for the colour you select. Plug
-those values into the components argument to
-<strong>NEWCOLOR</strong>, and you'll get the colour you want.
-Both the KDE and gnome desktops have colour selectors that provide
-you with the shorter RGB hexadecimal string. If you're not running
-KDE or gnome, the X utility, xcolorsel, provides you with a similar
-functionality, although it only provides RGB values for 256
-pre-defined colours. If you use xcolorsel, be sure to click the
-button &quot;Display format&quot; and select &quot;8 bit truncated
-rgb&quot;.
-<p>
-Alternatively, you can use <strong>mom</strong>'s simpler
-<a href="#XCOLOR">XCOLOR</a>
-macro to initialize one of the 256 pre-defined X colours by
-supplying the name of the color as an argument.
-<br>
-
-<!---XCOLOR--->
-
-<hr width="33%" align="left">
-<a name="XCOLOR"><h3><u>Initializing a colour with XCOLOR</u></h3>
-<br>
-<nobr>Macro: <strong>XCOLOR</strong> &lt;X color name&gt; [&lt;alias&gt;]</nobr>
-<br>
-<em>*&lt;X color name&gt; must be all one word, all lower case.
-<br>
-(See
-<a href="#XCOLOR_NAMES">Finding X color names</a>
-for how to get a list of valid colour names.)
-</em>
-<p>
-<strong>XCOLOR</strong> is similar to <strong>NEWCOLOR</strong> in
-that it tells <strong>mom</strong> to initialize a colour, but it's
-easier to use. All you have to do is pass it, as an argument, the
-legal name of one of the 256 pre-defined X colours. The name must
-be all one word, and, breaking with <strong>mom</strong> policy, it
-must be entered in lower case.
-<p>
-For example, if you want to intialize the X colour, coral, all you
-have to do is enter
-<br>
-<pre>
- .XCOLOR coral
-</pre>
-
-Afterwards
-<p>
-<pre>
- .COLOR coral
-</pre>
-
-will colourize subsequent text coral until you instruct
-<strong>mom</strong> to return to black, or some other pre-defined
-initialized colour. (The
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<kbd>\*[coral]</kbd> will equally colourize text coral after you've
-initialized the colour with <strong>XCOLOR</strong>.)
-<p>
-The downside of <strong>XCOLOR</strong> is that you can't create
-custom colours. This restriction, however, is mitigated by the
-fact that for many users, 256 colours is more than enough to play
-around with.
-<p>
-While some X colours have fanciful names (peachpuff, papayawhip,
-thistle, snow), many are self-explanatory and self-descriptive in
-ordinary colour terms. &quot;blue&quot; is pure (rgb) blue,
-&quot;green&quot; is pure (rgb) green, and so on. Furthermore, for
-many X colors, there exist four variants, each representing
-increasingly darker shades of the same colour. For example,
-&quot;blue&quot; (and &quot;blue1&quot;) are the brightest forms of
-(rgb) blue; &quot;blue2&quot;, &quot;blue3&quot; and &quot;blue4&quot;
-are increasingly darker shades of the same blue. For that reason,
-you may find <strong>XCOLOR</strong> is a better choice than
-<strong>NEWCOLOR</strong> when it comes to initializing common
-colors.
-<p>
-The whimsical nature of X colour names sometimes makes for names
-that are long to type in, e.g. &quot;mediumspringgreen&quot;.
-The optional second argument to <strong>XCOLOR</strong> allows you
-to come up with more convenient name by which to reference the
-colour. For example, you could enter
-<p>
-<pre>
- .XCOLOR mediumspringgreen mygreen
- or
- .XCOLOR mediumspringgreen MYGREEN
-</pre>
-
-so that whenever you want text mediumspringgreen-ed, you can use
-either <kbd>.COLOR mygreen</kbd> (or <kbd>.COLOR MYGREEN</kbd>) or
-the inline escape <kbd>\*[mygreen]</kbd> (or
-<kbd>\*[MYGREEN]</kbd>.)
-<p>
-<a name="XCOLOR_NAMES"><h3><u>Finding X color names</u></h3></a>
-<br>
-There are two ways of finding the names of the pre-defined X
-colours. One is to consult the file, rgb.txt, included with
-all X11 installations. The location of the file on a Debian
-GNU/Linux distribution is typically /etc/X11/rgb.txt. Other
-distributions and other X installations may have the file in
-another location. The file lists the colour names, but doesn't
-show you what the colours actually look like.
-<p>
-A better way to get the colour names, as well as to see what the
-colours look like, is to fire up a colour chooser (like xcolorsel)
-that both lists the colour names and shows a swatch of the colour
-as well.
-<p>
-Whichever method you use to find X color names, remember that the
-names, passed as arguments to <strong>XCOLOR</strong>, <em>must</em>
-be all one word, all in lower case.
-<br>
-
-<!---COLOR--->
-
-<hr width="33%" align="left">
-<a name="COLOR"><h3><u>Invoking a color</u></h3>
-<br>
-<nobr>Macro: <strong>COLOR</strong> &lt;colorname&gt;</nobr>
-<br>
-<a name="COLOR_INLINE">Inline: <strong>\*[&lt;colorname&gt;]</strong></a>
-<p>
-<a name="COLOR_INLINE"></a>
-Once you've told <strong>mom</strong> about a colour (via
-<strong>NEWCOLOR</strong> or <strong>XCOLOR</strong>), you use either
-the macro, <strong>COLOR</strong>, or the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<kbd>\*[&lt;colorname&gt;]</kbd>, to cause <strong>mom</strong> to
-set subsequent text in that colour. See the
-<a href="#COLOR_EXAMPLE2">example</a>,
-above, which shows both in action.
-<p>
-<strong>NOTE:</strong> You can use the
-<kbd>\*[&lt;colorname&gt;]</kbd> inline escape in any
-<a href="docprocessing.html#TOP">document processing</a>
-macro that takes a
-<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>.
-However, you must remember to reset the colour at the end of the
-argument (typically with <kbd>\*[black]</kbd>) unless you want all
-subsequent invocations of that particular macro to be colourized.
-<p>
-Furthermore, if you use <kbd>\*[&lt;colorname&gt;]</kbd> in the
-string argument passed to
-<a href="docelement.html#HEAD">.HEAD</a>,
-<a href="docelement.html#SUBHEAD">.SUBHEAD</a>
-or
-<a href="docelement.html#PARAHEAD">.PARAHEAD</a>,
-and you've requested that any of these types of heads be numbered,
-the numbers themselves will not be coloured, only the text you
-passed the macro. If you wish the numbers to be colourized as
-well, you must explicitly tell <strong>mom</strong> that you wish
-all of the head(s), subhead(s) or parahead(s), including the
-numbers, colourized by invoking the appropriate
-<a href="docelement.html#DOCELEMENT_CONTROL">control macro</a>.
-
-<br>
-
-<hr>
-<a href="docprocessing.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="inlines.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/cover.html b/contrib/groff/contrib/mom/momdoc/cover.html
deleted file mode 100644
index 2566547cb511..000000000000
--- a/contrib/groff/contrib/mom/momdoc/cover.html
+++ /dev/null
@@ -1,512 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document processing, creating a cover page</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="refer.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="rectoverso.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP">
-<h1 align="center"><u>CREATING A COVER PAGE</u></h1>
-</a>
-
-<ul>
- <li><a href="#COVER_INTRO">Introduction to cover pages</a>
- <ul>
- <li><a href="#PLEASE">Important note -- please read</a>
- <li><a href="#DESC">Description of what mom does on cover pages</a>
- <li><a href="#PAGINATION">A note on headers/footers and pagination</a>
- <li><a href="#DESIGN">What to do if you want to design your
- own cover pages</a>
- </ul>
- <li><a href="#COVER">The cover and document cover macros</a>
- <ul>
- <li><a href="#COVER">COVER/DOC_COVER</a>
- <ul>
- <li><a href="#REQUIRED">The required argument</a>
- <li><a href="#CHAPTER">How the CHAPTER argument and friends work</a>
- <li><a href="#OPTIONAL">The optional arguments</a>
- <li><a href="#DOCTYPE">What the DOCTYPE argument means</a>
- </ul>
- </ul>
- <li><a href="#ON_OFF">Enabling/disabling automatic generation of cover pages</a>
- <li><a href="#COVER_CONTROL">Control macros--changing the
- defaults for covers and document covers</a>
-</ul>
-
-<a name="COVER_INTRO"><h2><u>Introduction to cover pages</u></h2></a>
-<p>
-As of version 1.19 of <strong>mom</strong>, you can now have cover
-pages generated automatically.
-<p>
-Though identical in treatment, <strong>mom</strong> provides two
-kinds of cover pages: section cover pages (which I shall refer to
-simply as &quot;cover pages&quot;) and document cover pages
-(&quot;doc covers&quot;).
-<p>
-A document cover page
-(<a href="#DOC_COVER">doc cover</a>)
-is what you'd most likely use at the start of a <a
-href="rectoverso.html#COLLATE_INTRO">collated</a> document, where
-you might want the name of the complete document, the author(s) and
-the copyright line to appear. Another place you might use a doc
-cover is for a novel, where you want the title of the novel, not
-the chapter title or chapter number, as the first cover page.
-<p>
-A section
-<a href="#COVER">cover</a>
-page is what you'd use for cover pages that separate sections of a
-collated document. A section cover page (but not a doc cover page)
-in a collated document could, for example, simply read &quot;PART
-I&quot;.
-<p>
-In non-collated documents (say, an essay) you can use either a
-section cover or a doc cover to generate a cover sheet.
-<p>
-In addition, nothing prevents you from generating both a doc cover
-page and a section cover page for every document in a collated
-document. Or you can selectively disable the automatic generation
-of either doc covers or section covers in a collated document,
-on-the-fly.
-<p>
-<a name="PLEASE"><strong>Important note:</strong></a>
-automatic generation of cover or doc cover pages after the first
-one(s) only takes place if you are working with collated documents.
-<strong>Mom</strong> provides no mechanism for saying &quot;print
-a section cover here even though I'm still working on the same
-(non-collated) document.&quot;
-
-<a name="DESC"><h3><u>Description of what mom does on cover pages</u></h3></a>
-
-By default, <strong>mom</strong> typesets cover (and doc cover)
-pages identically to
-<a href="definitions.html#TERMS_DOCHEADER">docheaders</a>
-(see
-<a href="docprocessing.html#DOCHEADER_CONTROL">How to change the look of docheaders</a>
-for a description of what a docheader looks like). The only
-differences are
-<br>
-<ul>
- <li>the position on the page where the information is output
- <li>the (optional) addition of copyright and miscellaneous
- information
- <li>there's no running text underneath
-</ul>
-
-<p>
-You tell <strong>mom</strong> what you want to appear on the cover
-pages through the arguments you pass to
-<a href="#COVER">COVER</a>
-and/or
-<a href="#COVER">DOC_COVER</a>.
-Provided you have already given <strong>mom</strong> the
-appropriate references macro (e.g.
-<a href="docprocessing.html#TITLE">TITLE</a>
-or
-<a href="docprocessing.html#AUTHOR">AUTHOR</a>),
-she will output cover (and doc cover) pages identically to how she
-would output docheaders containing the same information.
-<p>
-By default, <strong>mom</strong> starts cover (and doc cover) pages
-one-third of the way down the page. This can be changed through
-the use of the control macros
-<a href="#COVER_CONTROL_INDEX">COVER_ADVANCE/DOC_COVER_ADVANCE</a>.
-<p>
-If you request copyright information (and have already given
-<strong>mom</strong> the reference macro,
-<a href="docprocessing.html#COPYRIGHT">COPYRIGHT</a>),
-she sets it, by default, in a smaller
-<a href="definitions.html#TERMS_PS">point size</a>
-in the bottom right hand corner of the cover (or doc cover) page.
-The default point size and the position can be controlled
-with
-<a href="#COVER_CONTROL_INDEX">COVER_COPYRIGHT_SIZE/DOC_COVER_COPYRIGHT_SIZE</a>
-and
-<a href="#COVER_CONTROL_INDEX">COVER_COPYRIGHT_QUAD/DOC_COVER_COPYRIGHT_QUAD</a>.
-<p>
-Similarly, if you request miscellaneous information (and have already given
-<strong>mom</strong> the reference macro,
-<a href="docprocessing.html#MISC">MISC</a>),
-she sets it, by default, in a smaller point size in the bottom left
-hand corner of the cover (or doc cover) page. The default point
-size is dependent on
-<strong>COVER_COPYRIGHT_SIZE/DOC_COVER_COPYRIGHT_SIZE</strong>,
-but the position can be controlled with
-<a href="#COVER_CONTROL_INDEX">COVER_MISC_QUAD/DOC_COVER_MISC_QUAD</a>.
-
-<a name="PAGINATION"></a>
-<p>
-<strong>NOTE: mom</strong> does not set any
-<a href="definitions.html#TERMS_HEADER">headers</a>
-or
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-on cover pages. Neither does she set any page numbers. From the
-point of pagination, cover (and doc cover) pages are considered
-&quot;null&quot; pages; if you wish them to be included in the
-pagination scheme (even though no page numbers appear), you must
-set the page number of each first page following a
-<a href="rectoverso.html#COLLATE">COLLATE</a>
-manually with
-<a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a>.
-
-<a name="DESIGN"></a>
-<p>
-Finally, if you want to design your own cover page(s), you can
-always typeset them (using the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>),
-invoke
-<a href="typesetting.html#NEWPAGE">NEWPAGE</a>,
-set up your document <em>in full</em> (see
-<a href="docprocessing.html#DOCPROCESSING_TUT">Tutorial -- Setting up a mom document</a>),
-and lastly invoke
-<a href="docprocessing.html#START">START</a>.
-The cover page (and any typesetting commands on it) will have no
-effect on <strong>mom</strong>'s processing of the document itself,
-the first page of which, moreover, will be numbered &quot;1&quot;
-unless you instruct her otherwise with
-<a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a>.
-<p>
-
-<!---COVER--->
-
-<hr width="66%" align="left">
-<p>
-<a name="COVER"></a>
- Macro: <strong>COVER</strong>
- <br>
- Macro: <strong>DOC_COVER</strong>
- <br>
- Required argument: <nobr>TITLE | DOCTITLE | COVERTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE</nobr>
- <br>
- Optional arguments: <nobr>[ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC ]</nobr>
- <p>
- <em>*Note: these macros should be placed in the
- &quot;style-sheet&quot; section of your document setup (see the
- <a href="docprocessing.html#DOCPROCESSING_TUT">Tutorial -- Setting up a mom document</a>),
- i.e. after PRINTSTYLE (and/or DOCTYPE and/or COPYSTYLE), but
- before START.</em>
-
-</a>
-<p>
-<strong>COVER</strong> and <strong>DOC_COVER</strong> behave
-identically. The reason <strong>mom</strong> provides two macros
-for automatic cover page generation is so that you can have two
-different kinds of covers with different information on each.
-<p>
-Imagine, for a moment, you've written a document comprised of three
-sections. When you
-<a href="rectoverso.html#COLLATE">COLLATE</a>
-the document for output, you could use <strong>DOC_COVER</strong>
-to generate a cover page that contained the name of the entire
-document, your (the author's) name, and perhaps the copyright date.
-Subsequently, you could use <strong>COVER</strong>, after each
-<strong>COLLATE</strong> but before each
-<a href="docprocessing.html#START">START</a>,
-to generate a cover page (or cover &quot;sheet&quot;, if you prefer)
-containing just the name of the section.
-<br>
-
-<a name="REQUIRED"><h3><u>The required argument</u></h3></a>
-
-Both <strong>COVER</strong> and <strong>DOC_COVER</strong>, whenever
-invoked, require a first argument, as listed above. This first argument
-will become the first bit of information <strong>mom</strong>
-prints on the cover (or doc cover) page (i.e. it will be the
-&quot;title&quot;).
-<p>
-In order for the information to appear, you must, of course, first
-have given <strong>mom</strong> the appropriate
-<a href="docprocessing.html#REFERENCE_MACROS">reference macro</a>.
-A list of arguments with their equivalent reference macros follows.
-<br>
-
-<dl>
-<dt>TITLE
-<dd>-means the argument you gave to
-<a href="docprocessing.html#TITLE">TITLE</a>
-<dt>DOCTITLE
-<dd>-means the argument you gave to
-<a href="docprocessing.html#DOCTITLE">DOCTITLE</a>
-<dt>COVERTITLE
-<dd>-means the argument you gave to
-<a href="docprocessing.html#COVERTITLE">COVERTITLE</a>
-or
-<a href="docprocessing.html#DOC_COVERTITLE">DOC_COVERTITLE</a>
-<dt>CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE
-<dd>-see below (How the CHAPTER argument and friends work)
-</dl>
-<br>
-
-<a name="CHAPTER"><h3><u>How the CHAPTER argument and friends work</u></h3></a>
-
-<kbd>CHAPTER</kbd>, by itself, will print the <a
-href="docprocessing.html#CHAPTER_STRING">CHAPTER_STRING</a> as well
-as the chapter number that you gave to
-<a href="docprocessing.html#CHAPTER">CHAPTER</a>.
-For example, assuming a vanilla setup for your chapter
-<p>
-<pre>
- \# Reference macros
- .CHAPTER 1
- .CHAPTER_TITLE "The Bonny Blue Yonder"
- &lt;other stuff&gt;
- .COVER CHAPTER \" (or .DOC_COVER CHAPTER)
- .START
-</pre>
-
-will simply print
-<p>
-<pre>
- Chapter 1
-</pre>
-
-<kbd>CHAPTER_TITLE</kbd> will print the chapter title you
-gave to
-<a href="docprocessing.html#CHAPTER_TITLE">CHAPTER_TITLE</a>.
-For example, assuming a vanilla setup for your chapter
-<p>
-<pre>
- \# Reference macros
- .CHAPTER 1
- .CHAPTER_TITLE "The Bonny Blue Yonder"
- &lt;other stuff&gt;
- .COVER CHAPTER_TITLE \" (or .DOC_COVER CHAPTER_TITLE)
- .START
-</pre>
-
-will simply print
-<p>
-<pre>
- The Bonny Blue Yonder
-</pre>
-
-<p>
-<kbd>CHAPTER+TITLE</kbd> will print <strong>both</strong> the
-chapter string + number AND the chapter title. For example,
-assuming a vanilla setup for your chapter
-<p>
-<pre>
- \# Reference macros
- .CHAPTER 1
- .CHAPTER_TITLE "The Bonny Blue Yonder"
- &lt;other stuff&gt;
- .COVER CHAPTER+TITLE \" (or .DOC_COVER CHAPTER+TITLE)
- .START
-</pre>
-
-will print
-<p>
-<pre>
- Chapter 1
- The Bonny Blue Yonder
-</pre>
-
-<a name="OPTIONAL"><h3><u>The optional arguments</u></h3></a>
-
-The remainder of the arguments to <strong>COVER</strong> and
-<strong>DOC_COVER</strong> are optional. They refer specifically
-to the information you gave the
-<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>
-bearing the same name as the arguments.
-<p>
-You may enter as many or as few as you would like to see on your
-cover (or doc cover) page. The only hitch is--PAY ATTENTION,
-CLASS!--they must be entered in the order given above. For
-example, if you want <kbd>TITLE</kbd>, <kbd>AUTHOR</kbd>,
-<kbd>COPYRIGHT</kbd> and <kbd>MISC</kbd>
-<p>
-<pre>
- .COVER TITLE AUTHOR COPYRIGHT MISC
-</pre>
-
-is correct, while
-<p>
-<pre>
- .COVER TITLE AUTHOR MISC COPYRIGHT
-</pre>
-
-is not.
-<br>
-
-<a name="DOCTYPE"><h3><u>What the DOCTYPE argument means</u></h3></a>
-
-When you pass <strong>COVER</strong> or <strong>DOC_COVER</strong>
-the argument, <kbd>DOCTYPE</kbd>, it refers to the argument you
-gave to
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>&nbsp;<kbd>NAMED</kbd>.
-For example, if, in your
-<a href="docprocessing.html#DOCSTYLE_MACROS">docstyle macros</a>
-you gave a
-<p>
-<pre>
- .DOCTYPE NAMED "Abstract"
-</pre>
-
-the argument, <kbd>DOCTYPE</kbd>, in the <strong>COVER</strong> or
-<strong>DOC_COVER</strong> macros, would mean that you wanted the
-word, Abstract, to appear on the cover (or doc cover), just as it
-would in the
-<a href="docprocessing.html#DOCHEADER">docheader</a>.
-<br>
-
-<!---ENABLING/DISABLING--->
-
-<hr width="66%" align="left">
-<p>
-<a name="ON_OFF"></a>
- <nobr>Macro: <strong>COVERS</strong> &lt;toggle&gt;</nobr>
- <br>
- <nobr>Macro: <strong>DOC_COVERS</strong> &lt;toggle&gt;</nobr>
-</a>
-<p>
-By default, if you give <strong>mom</strong> a
-<a href="#COVER">COVER</a>
-or
-<a href="#DOC_COVER">DOC_COVER</a>
-macro, she will print it. In a document that contains sections,
-articles or chapters formerly treated as &quot;one-off's&quot; but
-now being
-<a href="rectoverso.html#COLLATE_INTRO">collated</a>,
-such behaviour may not be desirable.
-<p>
-<strong>Mom</strong> lets you selectively enable or disable the
-generation of covers and/or doc covers with the toggle macros
-<strong>COVERS</strong> and <strong>DOC_COVERS</strong>. Because
-they're toggle macros, simply invoking them by themselves enables
-automatic cover (or doc cover) generation, while invoking them
-with any argument at all (<strong>OFF, QUIT, X</strong>, etc)
-disables cover (or doc cover) generation.
-<p>
-<strong>NOTE:</strong> You must place these macros prior to any
-instance of
-<a href="docprocessing.html#START">START</a>. Since they're
-&quot;on&quot; by default, there's no need to use them if you want
-covers. However, if you don't, especially in the kind of scenario
-described above, the best place to put them (most likely with an
-<strong>OFF, NO, X</strong>, etc. argument), is immediately after the
-first invocation of <strong>START</strong>. By doing so, you ensure
-they precede all subsequent instances of <strong>START</strong>.
-<p>
-
-<hr>
-<p>
-<a name="COVER_CONTROL"><h3><u>Control macros--changing the defaults for covers and document covers</u></h3></a>
-The default typographic appearance of the items on a cover (or doc
-cover) page is identical to that of the items in a
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>.
-(See
-<a href="docprocessing.html#DOCHEADER_CONTROL">How to change the look of docheaders</a>
-for a description of the defaults.)
-<p>
-<a href="docprocessing.html#COPYRIGHT">COPYRIGHT</a>
-and
-<a href="docprocessing.html#MISC">MISC</a>,
-which do not appear in docheaders, have the following default
-characteristics:
-<br>
-<ol>
- <li>The copyright line is set in the bottom right hand corner
- of the page, 2
- <a href="definitions.html#TERMS_PS">point sizes</a>
- smaller than the size of
- <a href="definitions.html#TERMS_RUNNING">running text</a>
- <li>The &quot;misc&quot; line is set in the bottom left hand
- corner of the page, in the same family, font and point size
- as the copyright line.
-</ol>
-<p>
-With the exception of the copyright and &quot;misc&quot; lines, the
-defaults for the entirety of cover (and doc cover) pages, and all
-the elements thereon, can be changed with control macros whose
-behaviour and arguments are identical to
-<a href="docprocessing.html#DOCHEADER_CONTROL_INDEX">the control macros used for docheaders</a>.
-The only difference is the name by which you invoke the control
-macro(s).
-<p>
-The complete list of cover (and doc cover) page control macros
-follows; please refer to the
-<a href="docprocessing.html#DOCHEADER_CONTROL_INDEX">docheader control macros index</a>
-in order to understand how to use them.
-<p>
-<a name="COVER_CONTROL_INDEX"><h3><u>Index of cover and doc cover control macros</u></h3></a>
-<pre>
-<a name="COVER_ADVANCE">.COVER_ADVANCE .DOC_COVER_ADVANCE</a> -+
-<a name="COVER_FAMILY">.COVER_FAMILY .DOC_COVER_FAMILY</a> | like DOCHEADER_
-<a name="COVER_LEAD">.COVER_LEAD .DOC_COVER_LEAD</a> -+
-
-.COVER_TITLE_FAMILY .DOC_COVER_TITLE_FAMILY -+
-.COVER_TITLE_FONT .DOC_COVER_TITLE_FONT | like
-.COVER_TITLE_COLOR .DOC_COVER_TITLE_COLOR | TITLE_
-.COVER_TITLE_SIZE .DOC_COVER_TITLE_SIZE -+
-
-.COVER_CHAPTER_TITLE_FAMILY .DOC_COVER_CHAPTER_TITLE_FAMILY -+
-.COVER_CHAPTER_TITLE_FONT .DOC_COVER_CHAPTER_TITLE_FONT | like
-.COVER_CHAPTER_TITLE_COLOR .DOC_COVER_CHAPTER_TITLE_COLOR | CHAPTER_TITLE_
-.COVER_CHAPTER_TITLE_SIZE .DOC_COVER_CHAPTER_TITLE_SIZE -+
-
-.COVER_SUBTITLE_FAMILY .DOC_COVER_SUBTITLE_FAMILY -+
-.COVER_SUBTITLE_FONT .DOC_COVER_SUBTITLE_FONT | like
-.COVER_SUBTITLE_COLOR .DOC_COVER_SUBTITLE_COLOR | SUBTITLE_
-.COVER_SUBTITLE_SIZE .DOC_COVER_AUTHOR_SIZE -+
-
-.COVER_ATTRIBUTE_COLOR .DOC_COVER_ATTRIBUTE_COLOR - like ATTRIBUTE_COLOR
- - the macro, .ATTRIBUTE_STRING, controls the attribution string
- for both docheaders and cover pages; cover pages have no
- separate ATTRIBUTE_STRING macro
-
-.COVER_AUTHOR_FAMILY .DOC_COVER_AUTHOR_FAMILY -+
-.COVER_AUTHOR_FONT .DOC_COVER_AUTHOR_FONT | like
-.COVER_AUTHOR_COLOR .DOC_COVER_AUTHOR_COLOR | AUTHOR_
-.COVER_AUTHOR_SIZE .DOC_COVER_AUTHOR_SIZE -+
-
-.COVER_DOCTYPE_FAMILY .DOC_COVER_DOCTYPE_FAMILY -+
-.COVER_DOCTYPE_FONT .DOC_COVER_DOCTYPE_FONT | like
-.COVER_DOCTYPE_COLOR .DOC_COVER_DOCTYPE_COLOR | DOCTYPE_
-.COVER_DOCTYPE_SIZE .DOC_COVER_DOCTYPE_SIZE -+
-
-.COVER_COPYRIGHT_FAMILY .DOC_COVER_COPYRIGHT_FAMILY -+
-.COVER_COPYRIGHT_FONT .DOC_COVER_COPYRIGHT_FONT | like any
-.COVER_COPYRIGHT_COLOR .DOC_COVER_COPYRIGHT_COLOR | of the above
-.COVER_COPYRIGHT_SIZE .DOC_COVER_COPYRIGHT_SIZE -+
-.COVER_COPYRIGHT_QUAD .DOC_COVER_COPYRIGHT_QUAD
- - the copyright quad can be either L (left) or R (right); default is left
-
-.COVER_MISC_COLOR .DOC_COVER_MISC_COLOR - like any of the above _COLOR
-.COVER_MISC_QUAD .DOC_COVER_MISC_QUAD
- - the misc quad can be either L (left) or R (right); default is right
-</pre>
-
-<strong>Note: COVER_MISC</strong> and
-<strong>DOC_COVER_MISC</strong> have only two control macros,
-<strong>_COLOR</strong> and <strong>_QUAD</strong>. The
-family, font and size of the <kbd>MISC</kbd> argument to
-<strong>COVER</strong> or <strong>DOC_COVER</strong> are always the
-same as for <kbd>COPYRIGHT</kbd>. Should you wish the family, font
-or size to be different from <kbd>COPYRIGHT</kbd>, I suggest setting
-the type specs for <kbd>COPYRIGHT</kbd> to the ones you want for
-<kbd>MISC</kbd>, then altering them for <kbd>COPYRIGHT</kbd> using
-<a href="inlines.html#INDEX_INLINES">inline escapes</a>
-in the
-<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>
-you pass to the macro,
-<a href="docprocessing.html#COPYRIGHT">COPYRIGHT</a>. (Of course,
-you could always do the reverse, but if you pass several arguments
-to
-<a href="docprocessing.html#MISC">MISC</a>,
-it's more likely you want to get <strong>MISC</strong> right first.)
-
-<p>
-<hr>
-<a href="refer.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="rectoverso.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/definitions.html b/contrib/groff/contrib/mom/momdoc/definitions.html
deleted file mode 100644
index 80542afa0395..000000000000
--- a/contrib/groff/contrib/mom/momdoc/definitions.html
+++ /dev/null
@@ -1,768 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Definitions and Terms</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="using.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="intro.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="TERMS">
- <h1 align="center"><u>DEFINITIONS OF TERMS USED IN THIS MANUAL</u></h1>
-</a>
-
-<a href="#TERMS_TYPESETTING">Typesetting Terms</a>
-<br>
-<a href="#TERMS_GROFF">Groff Terms</a>
-<br>
-<a href="#TERMS_MOM">Mom Document Processing Terms</a>
-<p>
-I use a number of typesetting-specific and groff-specific terms
-throughout this documentation, as well as a few terms that apply
-to <strong>mom</strong> herself. To make life easier, I'll explain
-them here. Refer back to this section should you encounter a word
-or concept you're not familiar with.
-<p>
-<hr>
-
-<a name="TERMS_TYPESETTING">
- <h2><u>Typesetting terms</u></h2>
-</a>
-
-<ul>
- <li><a href="#TERMS_ASCENDER">Ascender</a>
- <li><a href="#TERMS_BASELINE">Baseline</a>
- <li><a href="#TERMS_BALLOTBOX">Ballot box</a>
- <li><a href="#TERMS_BULLET">Bullet</a>
- <li><a href="#TERMS_CAPHEIGHT">Cap-height</a>
- <li><a href="#TERMS_DESCENDER">Descender</a>
- <li><a href="#TERMS_DISCRETIONARYHYPHEN">Discretionary hyphen</a>
- <li><a href="#TERMS_DROPCAP">Drop cap</a>
- <li><a href="#TERMS_EM">Em/en</a>
- <li><a href="#TERMS_FAMILY">Family</a>
- <li><a href="#TERMS_FIGURESPACE">Figure space/Digit space</a>
- <li><a href="#TERMS_FIXEDWIDTHSPACE">Fixed width space</a>
- <li><a href="#TERMS_FONT">Font</a>
- <li><a href="#TERMS_FORCE">Force justify</a>
- <li><a href="#TERMS_JUST">Justify/justification</a>
- <li><a href="#TERMS_GUTTER">Gutter</a>
- <li><a href="#TERMS_KERN">Kerning</a>
- <li><a href="#TERMS_KERNUNIT">Kern Units</a>
- <li><a href="#TERMS_LEADING">Lead/leading</a>
- <li><a href="#TERMS_LEADER">Leaders</a>
- <li><a href="#TERMS_LIGATURES">Ligature</a>
- <li><a href="#TERMS_PICASPOINTS">Picas/Points</a>
- <li><a href="#TERMS_PS">Point Size</a>
- <li><a href="#TERMS_QUAD">Quad</a>
- <li><a href="#TERMS_RAG">Rag</a>
- <li><a href="#TERMS_SHAPE">Shape</a>
- <li><a href="#TERMS_SOLID">Solid/set solid</a>
- <li><a href="#TERMS_TRACKKERNING">Track kerning/Line kerning</a>
- <li><a href="#TERMS_UNBREAKABLESPACE">Unbreakable space</a>
- <li><a href="#TERMS_WEIGHT">Weight</a>
- <li><a href="#TERMS_WORDSPACE">Word space</a>
- <li><a href="#TERMS_XHEIGHT">x-height</a>
-</ul>
-
-<dl>
-<dt><a name="TERMS_ASCENDER"><em>Ascender</em></a>
-<dd>The portion of a letter that extends above the bowl. For example,
-the letters a, c, and e have no ascenders. The letters b, d, and h
-do.
-
-<dt><a name="TERMS_BASELINE"><em>Baseline</em></a>
-<dd>The imaginary line on which the bottoms of capital letters and the
-bowls of lower case letters rest.
-
-<dt><a name="TERMS_BALLOTBOX"><em>Ballot box</em></a>
-<dd>An unfilled square, usually
-<a href="#TERMS_CAPHEIGHT">cap-height</a>
-in size, typically placed beside items in a checklist.
-
-<dt><a name="TERMS_BULLET"><em>Bullet</em></a>
-<dd>A small, filled circle typically found beside items or points in
-a list.
-
-<dt><a name="TERMS_CAPHEIGHT"><em>Cap-height</em></a>
-<dd>The height of the tallest capital letter in a given
-<a href="#TERMS_FONT">font</a>
-at the current
-<a href="#TERMS_PS">point size</a>.
-
-<dt><a name="TERMS_DESCENDER"><em>Descender</em></a>
-<dd>The portion of a letter that extends beneath the
-<a href="#TERMS_BASELINE">baseline</a>
-(j, q, y are letters with descenders).
-
-<dt><a name="TERMS_DISCRETIONARYHYPHEN"><em>Discretionary hyphen</em></a>
-<dd>A symbol inserted between two syllables of a word that indicates to a
-typesetting program the legal hyphenation points in the word. Normally,
-if hyphenation is turned on, groff knows where to hyphenate words.
-However, hyphenation being what it is (in English, at any rate),
-groff doesn't always get it right. Discretionary hyphens make sure
-it does. In the event that the word doesn't need to be hyphenated
-at all, groff leaves them alone. In groff, the discretionary hyphen is
-entered with
-<p>
-<pre>
- \%
-</pre>
-
-(backslash followed by a percent).
-
-<dt><a name="TERMS_DROPCAP"><em>Drop cap</em></a>
-<dd>A large, usually upper-case letter that introduces the first
-paragraph of a document or section thereof. The top of the drop
-cap usually lines up with the top of the first line of the
-paragraph, and typically &quot;drops&quot; several lines lower.
-Text adjacent to the drop cap is indented to the right of the
-letter until the bottom of the drop cap is reached, at which
-point text reverts to the left margin.
-
-<dt><a name="TERMS_EM"><em>Em/en</em></a>
-<dd>An em is a relative measurement equal to the width of the
-letter M at a given
-<a href="#TERMS_PS">point size</a>
-in a given
-<a href="#TERMS_FONT">font</a>.
-Since most Ms are designed square, an em is usually (but sometimes
-erroneously) considered to be the same size as the current point
-size (i.e. if the point size of the type is 12, one em equals 12
-points). An en is equal to the width of a letter N (historically
-2/3 of an em, although groff treats an en as 1/2 of an em).
-Typically, ems and ens are used to measure indents, or to define the
-length of dashes (long hyphens).
-
-<dt><a name="TERMS_FAMILY"><em>Family</em></a>
-<dd>The collective name by which a collection of
-<a href="#TERMS_FONT">fonts</a>
-are known, e.g. Helvetica, Times Roman, Garamond.
-
-<dt><a name="TERMS_FIGURESPACE"><em>Figure space/Digit space</em></a>
-<dd>A
-<a href="#TERMS_FIXEDWIDTHSPACE">fixed width space</a>
-that has the width of one digit. Used for aligning numerals in,
-say, columns or numbered lists. In groff, the figure space is
-entered with
-<p>
-<pre>
- \0
-</pre>
-
-(backslash followed by a zero).
-
-<dt><a name="TERMS_FIXEDWIDTHSPACE"><em>Fixed width space</em></a>
-<dd>Equal to
-<a href="#TERMS_WORDSPACE">word space</a>,
-but does not expand or contract when text is
-<a href="#TERMS_JUST">justified</a>.
-In groff, fixed width space is entered with
-<p>
-<pre>
- \&lt;space&gt;
-</pre>
-
-where &lt;space&gt; means "hit the spacebar on your keyboard."
-
-<dt><a name="TERMS_FONT"><em>Font</em></a>
-<dd>The specific
-<a href="#TERMS_WEIGHT">weight</a>
-and
-<a href="#TERMS_SHAPE">shape</a>
-of type within a
-<a href="#TERMS_FAMILY">family</a>,
-e.g. light, medium, bold (which are weights), and roman, italic,
-condensed (which are shapes). By default, groff knows of four fonts
-within its default set of families: R (medium roman), I (medium
-italic), B (bold roman) and BI (bold italic).
-
-<dt><a name="TERMS_FORCE"><em>Force justify
-</em></a>
-<dd>Sometimes, in
-<a href="#TERMS_JUST">justified</a>
-text, a line needs to be broken short of the right margin. Force
-justifying means telling a typesetting program (like groff) that you
-want the line broken early AND that you want the line's word spacing
-stretched to force the line flush with the right margin.
-
-<dt><a name="TERMS_GUTTER"><em>Gutter</em></a>
-<dd>The vertical whitespace separating columns of type.
-
-<dt><a name="TERMS_JUST"><em>Justify/justification</em></a>
-<dd>Lines of type are justified when they're flush at both the left and
-right margins. Justification is the act of making both margins flush.
-Some people use the terms "left justified" and "right justified"
-to mean type where only the left (or right) margins align. I don't.
-See
-<a href="#TERMS_QUAD">quad</a>.
-
-<dt><a name="TERMS_KERN"><em>Kerning</em></a>
-<dd>Moving pairs of letters closer together to remove excess
-whitespace between them. In the days before phototypesetting,
-type was set from small, rectangular blocks of wood or metal, each
-block having exactly one letter. Because the edge of each block
-determined the edge of each letter, certain letter combinations (TA,
-for example) didn't fit together well and had to be mortised by hand
-to bring them visually closer. Modern typesetting systems usually
-take care of kerning automatically, but they're far from perfect.
-Professional typesetters still devote a lot of time to fitting letters
-and punctuation together properly.
-
-<dt><a name="TERMS_KERNUNIT"><em>Kern Units</em></a>
-<dd>A relative distance equal to 1/36 of the current
-<a href="#TERMS_PS">point size</a>.
-Used between individual letters
-for
-<a href="#TERMS_KERN">kerning</a>.
-Different typesetting systems use different values (1/54 is
-popular), and sometimes call kern units by a different name.
-<p>
-<strong>Experts:
-<br></strong>A kern unit has nothing to do with groff
-machine units.
-
-<dt><a name="TERMS_LEADING"><em>Lead/leading</em></a>
-<dd>The distance from the
-<a href="#TERMS_BASELINE">baseline</a>
-of one line of type to the line of type immediately beneath it.
-Pronounced "ledding." Also called line spacing. Usually measured
-in
-<a href="#TERMS_PICASPOINTS">points</a>.
-<p>
-<em>In case you're interested...</em> In previous centuries,
-lines of type were separated by thin strips of--you guessed
-it--lead. Lines of type that had no lead between them were said to
-be &quot;set solid.&quot; Once you began separating them with strips
-of lead, they were said to be &quot;leaded&quot;, and the spacing was
-expressed in terms of the number of
-<a href="#TERMS_PICASPOINTS">points</a>
-of lead. For this reason, &quot;leading&quot; and &quot;line
-spacing&quot; aren't, historically speaking, synonymous. If type
-was set 10 on 12, for example, the leading was 2 points, not 12.
-Nowadays, however, the two terms are used interchangeably to mean
-the distance from baseline to baseline.
-
-<dt><a name="TERMS_LEADER"><em>Leaders</em></a>
-<dd>Single characters used to fill lines, usually to their end.
-So called because they &quot;lead&quot; the eye from one element
-of the page to another. For example, in the following (brief)
-Table of Contents, the periods (dots) are leaders.
-<p>
-<pre>
- Foreword............... 2
- Chapter 1.............. 5
- Chapter 2.............. 38
- Chapter 3.............. 60
-</pre>
-
-<dt><a name="TERMS_LIGATURES"><em>Ligature</em></a>
-<dd>Ligatures are letters joined together to form a single character.
-The commonest are fi, fl, ff, ffi and ffl. Others are ae and oe.
-Occasionally, one sees an st ligature, but this is archaic and
-quite rare.
-
-<dt><a name="TERMS_PICASPOINTS"><em>Picas/Points</em></a>
-<dd>There are twelve points in a pica, and six picas in an inch
-(hence 72 points to the inch). In the same way that gem-dealers
-have always used their own system of measurement for weight (carats),
-typographers have always used their own system of measurement for type.
-
-<dt><a name="TERMS_PS"><em>Point Size</em></a>
-<dd>The nominal size of type, measured in
-<a href="#TERMS_PICASPOINTS">points</a>
-from the bottom of the longest
-<a href="#TERMS_DESCENDER">descender</a>
-to the top of the highest
-<a href="#TERMS_ASCENDER">ascender</a>.
-In reality, type is always fractionally smaller than its point size.
-
-<dt><a name="TERMS_QUAD"><em>Quad</em></a>
-<dd>When only one margin of type is flush, lines of type are quadded in
-the direction of the flush margin. Therefore, quad left means the
-left margin is flush, the right isn't. Quad right means the right
-margin is flush, the left isn't. Quad centre means neither the left
-nor the right margin is flush; rather, lines of type are quadded on
-both sides so that type appears centred on the page.
-
-<dt><a name="TERMS_RAG"><em>Rag</em></a>
-<dd>Describes a margin that isn't flush. Rag right means the right
-margin isn't flush. Rag left means the left margin isn't flush.
-The expression "flush left/rag right" is sometimes used to describe
-type that is
-<a href="#TERMS_QUAD">quadded</a>
-left.
-
-<dt><a name="TERMS_SHAPE"><em>Shape</em></a>
-<dd>The degree of slant and/or the width of characters.
-(Technically speaking, this is not a proper typesetting term;
-however, it may help clarify some concepts presented in these
-documents.)
-<p>
-Some typical shapes are:
-<ul>
- <li>&quot;Roman&quot;, which has no slant, and has letterforms of
- average width
- <li>&quot;Italic&quot;, which is slanted, and has letterforms
- of average width
- <li>&quot;Condensed&quot;, which has no slant, but has
- letterforms narrower than the average represented by Roman
- <li>&quot;Condensed Italic&quot;, which is slanted, with letterforms narrower
- than average
-</ul>
-The term
-<a href="#TERMS_FONT">font</a>,
-as it is used in these documents, refers to a combination of
-<a href="#TERMS_WEIGHT">weight</a>
-and shape.
-
-<dt><a name="TERMS_SOLID"><em>Solid/set solid</em></a>
-<dd>When no
-<a href="#TERMS_LEADING">lead</a>
-is added between lines of type (i.e. the
-<a href="#TERMS_PS">point size</a>
-and linespacing are the same), the lines are said to be &quot;set
-solid.&quot;
-
-<dt><a name="TERMS_TRACKKERNING"><em>Track kerning/Line kerning</em></a>
-<dd>Sometimes, it's advantageous to increase or decrease the amount of
-space between every letter in a line by an equal (usually small)
-amount, in order to fit more (or fewer) characters on the line.
-The correct term is letter spacing, but track kerning and line kerning
-(and sometimes, just "kerning") have come to mean the same thing.
-
-<dt><a name="TERMS_UNBREAKABLESPACE"><em>Unbreakable space</em></a>
-<dd>Equal to
-<a href="#TERMS_WORDSPACE">word space</a>,
-however words separated by an unbreakable space will always be kept
-together on the same line. Expands and contracts like word space.
-Useful for proper names, which one should, whenever possible, avoid
-splitting onto two lines. In groff, unbreakable space is entered
-with
-<p>
-<pre>
- \~
-</pre>
-
-(backslash followed by a tilde).
-
-<dt><a name="TERMS_WEIGHT"><em>Weight</em></a>
-<dd>The thickness of the strokes of letterforms. Medium and Book
-have average thicknesses and are the weights used for most of the
-text in books, magazines, newspapers, etc. Light has strokes
-slightly thinner than Medium or Book, but is still acceptable for
-most text. Semibold, Bold, Heavy and Black all have strokes of
-increasing thickness, making them suitable for heads, subheads,
-headlines and the like.
-
-<dt><a name="TERMS_WORDSPACE"><em>Word space</em></a>
-<dd>The amount of whitespace between words. When text is
-<a href="#TERMS_JUST">justified</a>,
-word space expands or contracts to make the margins flush.
-
-<dt><a name="TERMS_XHEIGHT"><em>x-height</em></a>
-<dd>The height of a lower case letter x in a given font at a given
-point size. Generally used to mean the average height of the bowl
-of lower case letters.
-</dl>
-<p>
-<hr>
-
-<a name="TERMS_GROFF">
- <h2><u>Groff terms</u></h2>
-</a>
-
-<ul>
- <li><a href="#TERMS_ALIAS">Alias</a>
- <li><a href="#TERMS_ARGUMENTS">Arguments</a>
- <li><a href="#TERMS_COMMENTLINES">Comment lines</a>
- <li><a href="#TERMS_CONTROLLINES">Control Lines</a>
- <li><a href="#TERMS_FILLED">Filled lines</a>
- <li><a href="#TERMS_INLINES">Inline escapes</a>
- <li><a href="#TERMS_INPUTLINE">Input line</a>
- <li><a href="#TERMS_MACROS">Macros</a>
- <li><a href="#TERMS_UNITS">Machine units</a>
- <li><a href="#TERMS_NUMERICARGUMENT">Numeric argument</a>
- <li><a href="#TERMS_OUTPUTLINE">Output line</a>
- <li><a href="#TERMS_PRIMITIVES">Primitives</a>
- <li><a href="#TERMS_STRINGARGUMENT">String Argument</a>
- <li><a href="#TERMS_UNITOFMEASURE">Unit of measure</a>
- <li><a href="#TERMS_ZEROWIDTHCHARACTER">Zero-width character</a>
-</ul>
-<dl>
-
-<dt><a name="TERMS_ALIAS"><em>Alias</em></a>
-<dd>A
-<a href="#TERMS_MACROS">macro</a>
-invoked by a name different from its &quot;official&quot;
-name. For example, the official name of the macro to change
-<a href="#TERMS_FAMILY">family</a>
-is <strong>FAMILY</strong>. Its alias is
-<strong>FAM</strong>. Aliases may be created for any macro (via the
-<a href="goodies.html#ALIAS">ALIAS</a>
-macro) provided the alias uses a name not already taken
-by the <strong>mom</strong> macros or one of the groff
-<a href="#TERMS_PRIMITIVES">primitives</a>.
-For a complete list of words or names you must not use, see the
-<a href="reserved.html#RESERVED">list of reserved words</a>.
-
-<dt><a name="TERMS_ARGUMENTS"><em>Arguments</em></a>
-<dd>Parameters or information needed by a
-<a href="#TERMS_MACROS">macro</a>
-to do its job. For example, in the macro
-<p>
-<pre>
- .PT_SIZE 12
-</pre>
-
-&quot;12&quot; is the argument. In the macro
-<p>
-<pre>
- .QUAD LEFT
-</pre>
-
-LEFT is the argument. Arguments are separated from macros by spaces.
-Some macros require several arguments; each is separated by a space.
-
-<dt><a name="TERMS_COMMENTLINES"><em>Comment Lines</em></a>
-<dd><a href="#TERMS_INPUTLINE">Input lines</a>
-introduced with the comment character
-<p>
-<pre>
- \#
-</pre>
-
-When processing output, groff silently ignores everything on a
-line that begins with the comment character.
-
-<dt><a name="TERMS_CONTROLLINES"><em>Control Lines</em></a>
-<dd>Instructions to groff that appear on a line by themselves,
-which means that &quot;control lines&quot; are either
-<a href="#TERMS_MACROS">macros</a>
-or groff
-<a href="#TERMS_PRIMITIVES">primitives</a>.
-Control lines begin with a period or, occasionally, an apostrophe.
-
-<dt><a name="TERMS_FILLED"><em>Filled lines/fill mode</em></a>
-<dd>Automatic
-<a href="#TERMS_JUST">justification</a>
-or
-<a href="#TERMS_QUAD">quadding</a>.
-In fill mode, the ends of lines as they appear in your text editor
-are ignored. Instead, words from adjoining
-<a href="#TERMS_INPUTLINE">input lines</a>
-are added one at a time to the output line until no more words fit.
-Then, depending whether text is to be
-<a href="#TERMS_JUST">justified</a>
-or
-<a href="#TERMS_QUAD">quadded</a>
-(left, right, or centre), and depending on whether automatic
-hyphenation is turned on, groff attempts to hyphenate the last word,
-or, barring that, spreads and breaks the line (when justification
-is turned on) or breaks and quads the line (when quadding is turned
-on).
-<p>
-<a name="TERMS_NOFILL"></a>
-Nofill mode (non-filled text) means that groff respects the ends
-of lines as they appear in your text editor.
-
-<dt><a name="TERMS_INLINES"><em>Inline escapes</em></a>
-<dd>Instructions issued to groff that appear as part of an
-<a href="#TERMS_INPUTLINE">input line</a>
-(as opposed to
-<a href="#TERMS_MACROS">macros</a>,
-which must appear on a line by themselves). Inline escapes are
-always introduced by the backslash character. For example,
-<p>
-<pre>
- A line of text with the word T\*[BU 2]oronto in it
-</pre>
-
-contains the inline escape \*[BU 2] (which means &quot;move the letter
-'o' 2
-<a href="#TERMS_KERNUNIT">kern units</a>
-closer to the letter 'T'&quot;).
-<p>
-<strong>Mom</strong>'s inline escapes always take the form
-<strong>\*[</strong><i>ESCAPE</i><strong>]</strong>, where <i>ESCAPE</i>
-is composed of capital letters, sometimes followed immediately
-by a digit, sometimes followed by a space and a
-<a href="#TERMS_NUMERICARGUMENT">numeric argument</a>.
-<strong>Groff</strong>'s escapes begin with the backslash character
-but typically have no star and are in lower case. For example, the
-<strong>mom</strong> escapes to move forward 6 points on a line are
-either
-<p>
-<pre>
- \*[FP6]&nbsp;&nbsp;or&nbsp;&nbsp;\*[FWD 6p]
-</pre>
-
-while the <strong>groff</strong> escape for the same thing is
-<p>
-<pre>
- \h'6p'
-</pre>
-
-<dt><a name="TERMS_INPUTLINE"><em>Input line</em></a>
-<dd>A line of text as it appears in your text editor.
-
-<dt><a name="TERMS_MACROS"><em>Macros</em></a>
-<dd>Instructions embedded in a document that determine how groff processes
-the text for output. <strong>mom</strong>'s macros always begin with a
-period, on a line by themselves, and must be typed in capital letters.
-Typically, macros contain complex commands issued to groff--behind
-the scenes--via groff
-<a href="#TERMS_PRIMITIVES">primitives</a>.
-
-<dt><a name="TERMS_UNITS"><em>Machine units</em></a>
-<dd>A machine unit is 1/1000 of a
-<a href="#TERMS_PICASPOINTS">point</a>
-when the groff device is ps. (&quot;ps&quot; means
-&quot;PostScript&quot;--the default device for which groff
-prepares output, and the device for which <strong>mom</strong> was
-specifically designed.)
-
-<dt><a name="TERMS_NUMERICARGUMENT"><em>Numeric argument</em></a>
-<dd>An
-<a href="#TERMS_ARGUMENT">argument</a>
-that has the form of a digit. Numeric arguments can be built out
-of arithmetic expressions using +, -, *, and / for plus, minus,
-times, and divided-by respectively. If a numeric argument requires
-a
-<a href="#TERMS_UNITOFMEASURE">unit of measure</a>,
-a unit of measure must be appended to <em>every</em> digit in the
-argument. For example:
-<p>
-<pre>
- .ALD 1i-1v
-</pre>
-
-<strong>NOTE:</strong> groff does not respect the order of operations,
-but rather evaluates arithmetic expressions from left to right.
-Parentheses must be used to circumvent this peculiarity. Not to
-worry, though. The likelihood of more than just the occasional plus
-or minus sign when using <strong>mom</strong>'s macros is slim.
-
-<dt><a name="TERMS_OUTPUTLINE"><em>Output line</em></a>
-<dd>A line of text as it appears in output copy.
-
-<dt><a name="TERMS_PRIMITIVES"><em>Primitives</em></a>
-<dd>The two-letter, lower case instructions groff uses as its
-native command language, and out of which macros are built.
-
-<dt><a name="TERMS_STRINGARGUMENT"><em>String Argument</em></a>
-<dd>Technically, any
-<a href="#TERMS_ARGUMENTS">argument</a>
-that is not numeric. In this documentation, string argument means
-an argument that requires the user to input text. For example, in
-the
-<a href="#TERMS_MACROS">macro</a>
-<p>
-<pre>
- .TITLE "My Pulitzer Novel"
-</pre>
-
-&quot;My Pulitzer Novel&quot; is a string argument.
-<p>
-Because string arguments must be enclosed by double-quotes, you can't
-use double-quotes as part of the string argument. If you need
-double-quotes to be part of a string argument, use the
-<a href="#TERMS_INLINES">inline escapes</a>
-<strong>\(lq</strong> and <strong>\(rq</strong> (leftquote and rightquote
-respectively) in place of the double-quote character (").
-
-<dt><a name="TERMS_UNITOFMEASURE"><em>Unit of measure</em></a>
-<dd>The single letter after a
-<a href="#TERMS_NUMERICARGUMENT">numeric argument</a>
-that tells <strong>mom</strong> what measurement scale the argument
-should use. Common valid units are:
-<p>
-<table valign="baseline" summary="unitsofmeasure">
-<tr><td><strong>i</strong><td> = <td>inches
-<tr><td><strong>p</strong><td> = <td>points
-<tr><td><strong>P</strong><td> = <td>picas
-<tr><td><strong>c</strong><td> = <td>centimetres
-<tr><td><strong>m</strong><td> = <td>ems
-<tr><td><strong>n</strong><td> = <td>ens
-<tr><td><strong>v</strong><td> = <td>the current leading (line space)</td></tr>
-</table>
-<br>
-<dd>Units of measure must come immediately after the numeric argument (i.e.
-with no space between the argument and the unit of measure), like this:
-<p>
-<pre>
- .ALD 2v
- .LL 39P
- .IL 1i
-</pre>
-
-The above example advances 2 line spaces and sets the line length to
-39 picas with a left indent of 1 inch.
-<p>
-<strong>IMPORTANT:</strong> Most <strong>mom</strong> macros
-that set the size or measure of something MUST be given a unit of
-measure. <strong>mom</strong>'s macros do not have default units
-of measure. There are a couple of exceptions, the most notable of
-which are <strong>PT_SIZE</strong> and <strong>LS</strong>. Both use
-<a href="#TERMS_PICASPOINTS">points</a>
-as the default unit of measure, which means
-you don't have to append &quot;p&quot; to their argument.
-<p>
-You can enter decimal values for any unit of measure. Different units
-may be combined by adding them together (e.g. 1.5i+2m, which gives a
-measure of 1-1/2 inches plus 2 ems).
-<p>
-<strong>NOTE:</strong> a pica is composed of 12 points,
-therefore 12.5 picas is 12 picas and 6 points, not 12 picas
-and 5 points. If you want 12 picas and 5 points, you have to
-enter the measure as 12P+5p.
-
-<dt><a name="TERMS_ZEROWIDTHCHARACTER"><em>Zero-width character</em></a>
-<dd>The
-<a href="#TERMS_INLINES">inline escape</a>
-that allows you to print a literal period, apostrophe and, if
-<a href="#TERMS_OUTPUTLINE">output lines</a>
-are
-<a href="#TERMS_FILLED">filled</a>,
-a space that falls at the beginning of an
-<a href="#TERMS_INPUTLINE">input line</a>.
-It looks like this:
-<p>
-<pre>
- \&amp;
-</pre>
-
-(backslash followed by an ampersand).
-<p>
-Normally, groff interprets a period (or an apostrophe) at the beginning
-of an input line as meaning that what follows is a
-<a href="#TERMS_CONTROLLINES">control line</a>.
-In fill modes, groff treats a space at the beginning of an input
-line as meaning &quot;start a new line and put a space at the
-beginning of it.&quot; If you want groff to interpret periods and
-apostrophes at the beginning of input lines literally (i.e. print
-them), or spaces at the beginning of input lines as just garden
-variety word spaces, you must start the line with the zero-width
-character.
-</dl>
-<p>
-<hr>
-
-<a name="TERMS_MOM">
- <h2><u>Mom's Document Processing Terms</u></h2>
-</a>
-
-<ul>
- <li><a href="#TERMS_BLOCKQUOTE">Blockquote</a>
- <li><a href="#TERMS_CONTROLMACRO">Control macro</a>
- <li><a href="#TERMS_DOCHEADER">Docheader</a>
- <li><a href="#TERMS_EPIGRAPH">Epigraph</a>
- <li><a href="#TERMS_FOOTER">Footer</a>
- <li><a href="#TERMS_HEAD">Head</a>
- <li><a href="#TERMS_HEADER">Header</a>
- <li><a href="#TERMS_LINEBREAK">Linebreak</a>
- <li><a href="#TERMS_PARAHEAD">Paragraph head</a>
- <li><a href="#TERMS_QUOTE">Quote</a>
- <li><a href="#TERMS_RUNNING">Running text</a>
- <li><a href="#TERMS_SUBHEAD">Subhead</a>
- <li><a href="#TERMS_TOGGLE">Toggle</a>
-</ul>
-<dl>
-<dt><a name="TERMS_BLOCKQUOTE"><em>Blockquote</em></a>
-<dd>Cited material other than
-<a href="#TERMS_QUOTE">quotes</a>.
-Typically set at a smaller point size than paragraph text, indented
-from the left and right margins. Blockquotes are
-<a href="#TERMS_FILLED">filled</a>.
-
-<dt><a name="TERMS_CONTROLMACRO"><em>Control macro</em></a>
-<dd>Macros used in
-<a href="docprocessing.html#DOCPROCESSING">document processing</a>
-to control/alter the appearance of document elements (e.g. heads,
-quotes, footnotes,
-<a href="#TERMS_HEADER">headers</a>,
-etc.).
-
-<dt><a name="TERMS_DOCHEADER"><em>Document header/docheader</em></a>
-<dd>Document information (title, subtitle, author, etc) output
-at the top of page one.
-
-<dt><a name="TERMS_EPIGRAPH"><em>Epigraph</em></a>
-<dd>A short, usually cited passage that appears at the
-beginning of a chapter, story, or other document.
-
-<dt><a name="TERMS_FOOTER"><em>Footer/page footer</em></a>
-<dd>Document information (frequently author and title) output in
-the bottom margin of pages <em>after</em> page one. Not to be
-confused with footnotes, which are considered part of
-<a href="#TERMS_RUNNING">running text</a>.
-
-<dt><a name="TERMS_HEAD"><em>Head</em></a>
-<dd>A title that introduces a major section of a document.
-
-<dt><a name="TERMS_HEADER"><em>Header/page header</em></a>
-<dd>Document information (frequently author and title) output in
-the top margin of pages <em>after</em> page one.
-<p>
-<strong>NOTE:</strong> In terms of content and style, headers and
-<a href="#TERMS_FOOTER">footers</a>
-are the same; they differ only in their placement on the page. In
-most places in this documentation, references to the content or
-style of headers applies equally to footers.
-
-<dt><a name="TERMS_LINEBREAK"><em>Linebreak/author linebreak</em></a>
-<dd>A horizontal gap in
-<a href="#TERMS_RUNNING">running text</a>,
-frequently set off by typographic symbols such as asterisks or
-daggers. Used to indicate a shift in the content of a document
-(e.g. a scene change in a short story). Also commonly called a
-scene break or a section break.
-
-<dt><a name="TERMS_PARAHEAD"><em>Paragraph head</em></a>
-<dd>A title joined to the body of a paragraph; hierarchically one
-level beneath
-<a href="#TERMS_SUBHEAD">subheads</a>.
-
-<dt><a name="TERMS_QUOTE"><em>Quote</em></a>
-<dd>A quote, to <strong>mom</strong>, is a line-for-line setting
-of quoted material (e.g. poetry, song lyrics, or a snippet of
-programming code). You don't have to use
-<a href="typesetting.html#BR">BR</a>
-with quotes.
-
-<dt><a name="TERMS_RUNNING"><em>Running text</em></a>
-<dd>In a document formatted with <strong>mom</strong>, running
-text means text that forms the body of the document, including
-elements such as heads and subheads.
-<a href="#TERMS_DOCHEADER">Docheaders</a>,
-<a href="#TERMS_HEADER">headers</a>,
-<a href="#TERMS_FOOTER">footers</a>
-and page numbers are NOT part of running text.
-
-<dt><a name="TERMS_SUBHEAD"><em>Subhead</em></a>
-<dd>A title used to introduce secondary sections of a document;
-hierarchically one level beneath sections introduced by
-<a href="#TERMS_HEAD">heads</a>.
-
-<dt><a name="TERMS_TOGGLE"><em>Toggle</em></a>
-<dd>A macro or tag that, when invoked without an argument,
-begins something or turns a feature on, and, when invoked with
-ANY argument, ends something or turns a feature off. See
-<a href="intro.html#TOGGLE_EXAMPLE">Example 3</a>
-of the section
-<a href="intro.html#MACRO_ARGS">How to read macro arguments</a>.
-</dl>
-
-<p>
-<hr>
-<a href="using.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="intro.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/docelement.html b/contrib/groff/contrib/mom/momdoc/docelement.html
deleted file mode 100644
index 13a1e0eeeb10..000000000000
--- a/contrib/groff/contrib/mom/momdoc/docelement.html
+++ /dev/null
@@ -1,5041 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document Processing, element tags</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="headfootpage.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="DOCELEMENT">
- <h1 align="center"><u>THE DOCUMENT ELEMENT TAGS</u></h1>
-</a>
-
-<ul>
- <li><a href="#DOCELEMENT_INTRO">Introduction to the document element tags</a>
- <ul>
- <li><a href="#DOCELEMENT_CONTROL">Control macros -- changing defaults for document element tags</a>
- <li><a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
- </ul>
- <li><a href="#INDEX_DOCELEMENT">Index of document element tags</a>
-</ul>
-
-<a name="DOCELEMENT_INTRO">
- <h2><u>Introduction to the document element tags</u></h2>
-</a>
-
-Once you've completed the setup for a document (see
-<a href="docprocessing.html#DOCPROCESSING_TUT">Setting up a mom document</a>),
-formatting it is a snap. Simply invoke the appropriate tag for
-each document element as you need it. The tags are macros that
-tell <strong>mom</strong>, &quot;This is a paragraph, this
-is a subhead, this is a footnote,&quot; and so on.
-<p>
-The list of tags is actually quite small -- ideal for the users
-<strong>mom</strong> brought herself into being for (see
-<a href="intro.html#INTRO_INTRO">Who mom is meant for</a>).
-However, the list of macros that control the appearance of the
-tags upon output is extensive. Generally, for each tag,
-there are
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
-for the tag's family, font and point size. Where appropriate, there
-are macros to control leading, indents, quad and special features
-as well.
-<p>
-<strong>Mom</strong> has tasteful defaults for all the tags, hence you
-only use the control macros when you want to change the way
-she does things. This is usually done prior to
-<a href="docprocessing.html#START">START</a>,
-but can, in fact, be done at any time in the course of a document.
-Any change to a tag's style affects all subsequent invocations of
-the tag.
-<p>
-
-<a name="DOCELEMENT_CONTROL"><h3><u>Control macros -- changing defaults</u></h3></a>
-
-<p>
-The control macros for document processing tags let you
-&quot;design&quot; the look of all the parts of your documents --
-should you wish. At a bare minimum, all tags have macros to change
-<strong>mom</strong>'s defaults for family, font, point size and
-colour. Where appropriate, there are macros to control leading,
-indents and quad as well.
-<p>
-In addition, many tags have special macros to control features that
-are pertinent to those tags alone. Have a look at the section dealing
-with any particular tag to find out what macros control the tag,
-and what <strong>mom</strong>'s defaults for the tag are.
-<p>
-The control macros may be used at any time during the course of
-a document (i.e. before or after
-<a href="docprocessing.html#START">START</a>). The changes you
-make alter all subsequent invocations of the affected tag until
-you make another change, either by passing new arguments to the
-tag's control macro, or toggling a particular feature of the tag on
-or off.
-<p>
-And don't forget: the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-can be used at any time, including inside
-<a href="definitions.html#TERMS_TOGGLE">toggle</a>
-tags (affecting only that particular invocation of the tag).
-Equally,
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-can be used in tags that take
-<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments.</a>
-<p>
-<strong>IMPORTANT NOTE:</strong> The family, font, point size,
-colour and leading control macros have no effect in
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-which sets EVERYTHING in Courier roman, 12/24 (i.e. 12-point type on
-a linespace of 24 points).
-<p>
-Please also note that the defaults listed
-with the control macros apply only to
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-unless a default for <strong>TYPEWRITE</strong> is also given.
-<p>
-<strong>A WORD OF ADVICE:</strong> Get familiar with
-<strong>mom</strong> at her default settings before exploring the
-control macros. Put her through her paces. See how she behaves.
-Get to know what she feels like and how she looks, both in your text
-editor and on the printed page. Then, if you don't like something,
-use this documentation to find the precise macro you need to change it.
-There are tons of control macros. Reading up on them and trying to
-remember them all might lead you to think that <strong>mom</strong>
-is complex and unwieldy, which is not only untrue, but would offend
-her mightily.
-<p>
-
-<a name="CONTROL_MACRO_ARGS"><h3><u>Arguments to the control macros</u></h3></a>
-
-<h3>Family and font</h3>
-The arguments to the control macros that end in
-<strong>_FAMILY</strong> or <strong>_FONT</strong> are the same
-as for
-<a href="typesetting.html#FAMILY">FAMILY</a>
-and
-<a href="typesetting.html#FONT">FT</a>.
-
-<h3>Point size</h3>
-Control macros that end in <strong>_SIZE</strong> always take
-the form <kbd>+digit</kbd> or <kbd>-digit</kbd> where digit is
-the number of
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-larger (+) or smaller (-) than the point size of paragraphs
-you want the document element to be. For example, to change
-subheads to 1-1/2 points larger than the type in paragraphs, do
-<p>
-<pre>
- .SUBHEAD_SIZE +1.5
-</pre>
-
-There's no need for a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-with the <strong>_SIZE</strong> control macros; points is assumed.
-
-<h3>Colour</h3>
-Control macros that end in <strong>_COLOR</strong> take as their
-argument a colour name pre-defined (or &quot;initialized&quot;)
-with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-For example, if you want your heads to be red, once you've defined
-or initialized the color, red,
-<p>
-<pre>
- .HEAD_COLOR red
-</pre>
-
-will turn your heads red.
-
-<h3>Lead/linespacing</h3>
-Control macros that end in <strong>_AUTOLEAD</strong> take the
-same argument as
-<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>,
-viz. a digit that represents the number of points to add to the
-tag's point size to arrive at its
-<a href="definitions.html#TERMS_LEADING">lead</a>.
-For example, to set footnotes
-<a href="definitions.html#TERMS_SOLID">solid</a>, do
-<p>
-<pre>
- .FOOTNOTE_AUTOLEAD 0
-</pre>
-
-To set footnotes with a 1-point lead (i.e. with the line spacing
-one point greater than the footnote's point size), do
-<p>
-<pre>
- .FOOTNOTE_AUTOLEAD 1
-</pre>
-
-<h3><a name="CONTROL_INDENTS">Indents</a></h3>
-Except for <strong>PARA_INDENT</strong>, the argument to the control
-macros that end
-in <strong>_INDENT</strong> is always a single digit (whole numbers
-only; no decimal fractions) with no
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-appended to it. The digit represents by how much you want the
-size of the paragraph first-line indent multiplied to achieve the
-correct indent for a particular tag.
-
-<h3>Quad/justification style</h3>
-Control macros that end in <strong>_QUAD</strong> take the same
-arguments as
-<a href="typesetting.html#QUAD">QUAD</a>.
-<p>
-<hr>
-
-<a name="INDEX_DOCELEMENT"><h3><u>Document element tags list</u></h3></a>
-<ul>
- <li><a href="#EPIGRAPH_INTRO">Epigraphs</a>
- <ul>
- <li><a href="#EPIGRAPH">EPIGRAPH</a>
- <li><a href="#EPIGRAPH_CONTROL">Epigrah control</a>
- </ul>
- <li><a href="#PP_INTRO">Paragraphs</a>
- <ul>
- <li><a href="#PP">PP</a>
- <li><a href="#PP_CONTROL">Paragraph control</a>
- </ul>
- <li><a href="#HEAD_INTRO">Main heads</a>
- <ul>
- <li><a href="#HEAD">HEAD</a>
- <li><a href="#HEAD_CONTROL">Head control</a>
- </ul>
- <li><a href="#SUBHEAD_INTRO">Subheads</a>
- <ul>
- <li><a href="#SUBHEAD">SUBHEAD</a>
- <li><a href="#SUBHEAD_CONTROL">Subhead control</a>
- </ul>
- <li><a href="#PARAHEAD_INTRO">Paragraph heads</a>
- <ul>
- <li><a href="#PARAHEAD">PARAHEAD</a>
- <li><a href="#PARAHEAD_CONTROL">Parahead control</a>
- </ul>
- <li><a href="#LINEBREAK_INTRO">Linebreaks (author linebreaks, section breaks)</a>
- <ul>
- <li><a href="#LINEBREAK">LINEBREAK</a>
- <li><a href="#LINEBREAK_CHAR">Linebreak character</a>
- <li><a href="#LINEBREAK_COLOR">Linebreak colour</a>
- </ul>
- <li><a href="#QUOTE_INTRO">Quotes (line for line)</a>
- <ul>
- <li><a href="#QUOTE">QUOTE</a>
- <li><a href="#QUOTE_CONTROL">Quote control</a>
- </ul>
- <li><a href="#BLOCKQUOTE_INTRO">Blockquotes (cited material)</a>
- <ul>
- <li><a href="#BLOCKQUOTE">BLOCKQUOTE</a>
- <li><a href="#BLOCKQUOTE_CONTROL">Blockquote control</a>
- </ul>
- <li><a href="#LIST_INTRO">Nested lists</a>
- <ul>
- <li><a href="#LIST">LIST</a>
- <ul>
- <li><a href="#ITEM">ITEM</a>
- </ul>
- <li><a href="#LIST_CONTROL">List control</a>
- </ul>
- <li><a href="#NUMBER_LINES_INTRO">Line numbering</a>
- <ul>
- <li><a href="#NUMBER_LINES">NUMBER_LINES</a>
- <li><a href="#NUMBER_LINES_CONTROL">Control macros</a> (for QUOTE and BLOCKQUOTE)
- </ul>
- <li><a href="#FOOTNOTE_INTRO">Footnotes</a>
- <ul>
- <li><a href="#FOOTNOTE">FOOTNOTE</a>
- <li><a href="#FOOTNOTE_CONTROL">Footnote control</a>
- </ul>
- <li><a href="#ENDNOTE_INTRO">Endnotes</a>
- <ul>
- <li><a href="#ENDNOTE">ENDNOTE</a>
- <li><a href="#ENDNOTE_CONTROL">Endnote control</a>
- </ul>
- <li><a href="#MARGIN_NOTES_INTRO">Margin notes</a>
- <ul>
- <li><a href="#MN_INIT">MN_INIT</a> -- initialize margin notes
- <li><a href="#MN">MN</a> -- start and end a margin note
- </ul>
- <li><a href="refer.html#TOP">Bibliographies and references</a>
- <ul>
- <li><a href="refer.html#REF">REF</a>
- <li><a href="refer.html#ENDNOTE_REFS">ENDNOTE_REFS</a>
- <li><a href="refer.html#FOOTNOTE_REFS">FOOTNOTE_REFS</a>
- <li><a href="refer.html#BRACKET_REFS">Embedded references</a>
- <li><a href="refer.html#BIBLIOGRAPHY">BIBLIOGRAPHY</a>
- <li><a href="refer.html#BIBLIOGRAPHY_TYPE">BIBLIOGRAPHY_TYPE</a>
- </ul>
- <li><a href="#BLANK_PAGE_TITLE">Blank pages</a>
- <li><a href="#TOC_INTRO">Table of contents</a>
- <ul>
- <li><a href="#TOC">TOC</a>
- <li><a href="#TOC_CONTROL">Table of contents control</a>
- </ul>
- <li><a href="#FINIS_INTRO">Document termination</a>
- <ul>
- <li><a href="#FINIS">FINIS (Document termination)</a>
- </ul>
- <ul>
- <li><a href="#FINIS_STRING">Changing the FINIS string</a>
- <li><a href="#FINIS_COLOR">Changing the FINIS colour</a>
- </ul>
-</ul>
-<hr>
-
-
-<!====================================================================>
-
-<a name="EPIGRAPH_INTRO"><h2><u>Epigraphs</u></h2></a>
-<ul>
- <li><a href="#EPIGRAPH">Tag: EPIGRAPH</a>
- <li><a href="#EPIGRAPH_CONTROL">Epigraph control macros</a>
-</ul>
-<p>
-<a href="definitions.html#TERMS_EPIGRAPH">Epigraphs</a>
-colour, flavour, or comment on the document they precede. Typically,
-they are centred at the top of a document's first page (underneath the
-title) and set in a smaller point size than that of paragraph text.
-<p>
-By default, <strong>mom</strong> sets epigraphs centred and
-<a href="definitions.html#TERMS_NOFILL">unfilled</a>;
-this lets you input them on a line for line basis. This behaviour
-can be changed to accomodate
-<a href="definitions.html#TERMS_FILLED">filled</a>
-epigraph &quot;blocks.&quot;
-<p>
-
-<!---EPIGRAPH--->
-
-<hr width="66%" align="left">
-<p>
-<a name="EPIGRAPH">
- <nobr>Macro: <strong>EPIGRAPH</strong> &lt;toggle&gt; | [ BLOCK ]</a></nobr>
-</a>
-
-<p>
-<strong>EPIGRAPH</strong> is a toggle, used like this:
-<p>
-<pre>
- .EPIGRAPH
- &lt;text of epigraph&gt;
- .EPIGRAPH OFF
-</pre>
-
-<strong>OFF</strong>, above, could be anything -- say, Q or X --
-since any argument other than <strong>BLOCK</strong> turns it off.
-<p>
-If given the argument <strong>BLOCK</strong>, <strong>EPIGRAPH</strong>
-sets epigraphs
-<a href="definitions.html#TERMS_FILLED">filled</a>,
-justified or quadded in the same direction as paragraphs, indented
-equally from both the left and right margins.
-<p>
-If a block-style epigraph runs to more than one paragraph (unlikely,
-but conceivable), you <strong>MUST</strong> introduce every paragraph
--- <u>INCLUDING THE FIRST!!!</u> -- with the
-<a href="#PP">PP</a>
-tag.
-<p>
-<strong>NOTE:</strong> <strong>EPIGRAPH</strong> should only be
-used at the top of a document (i.e. just after
-<a href="docprocessing.html#START">START</a>)
-or after
-<a href="#HEAD_INTRO">heads</a>. The latter is not especially
-recommended, but it does work. In all other places where you
-want quotes or cited text, use
-<a href="#QUOTE">QUOTE</a>
-or
-<a href="#BLOCKQUOTE">BLOCKQUOTE</a>.
-<p>
-
-<a name="EPIGRAPH_CONTROL"><h3><u>Epigraph control macros</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.EPIGRAPH_FAMILY default = prevailing document family; default is Times Roman
-.EPIGRAPH_FONT default = roman
-.EPIGRAPH_SIZE default = -1.5 (points)
-.EPIGRAPH_COLOR default = black
-.EPIGRAPH_AUTOLEAD default = 2 points
-
-(The next two apply to &quot;block&quot; style epigraphs only)
-
-.EPIGRAPH_QUAD default = same as paragraphs
-.EPIGRAPH_INDENT* default = para indent x 3 (for typeset), x 2 (for typewrite)
-
-*Indent here refers to the indent from both the left and right margins
- that centres the block style epigraph on the page.
-</pre>
-<hr>
-
-<!====================================================================>
-
-<a name="PP_INTRO"><h2><u>Paragraphs</u></h2></a>
-<ul>
- <li><a href="#PP">Tag: PP</a>
- <li><a href="#PP_CONTROL">Paragraph control macros</a>
-</ul>
-<p>
-The paragraph macro is the one you use most often. Consequently,
-it's one of most powerful, yet simplest to use -- just the letters
-<strong>PP</strong>. No arguments, nothing. Just <kbd>.PP</kbd>
-on a line by itself any time, in any document element, tells
-<strong>mom</strong> you want to start a new paragraph. The spacing
-and indent appropriate to where you are in your document are taken
-care of automatically.
-<p>
-By default, <strong>mom</strong> does not indent the first paragraph
-of a document, nor paragraphs that fall immediately after
-<a href="#HEAD_INTRO">heads</a>
-or
-<a href="#SUBHEAD_INTRO">subheads</a>.
-The first paragraphs of blockquotes and block-style epigraphs are
-also not indented. This behaviour can be changed with the control
-macro
-<a href="#PARA_INDENT_FIRST">INDENT_FIRST_PARAS</a>.
-<p>
-In contrast to some other macro packages, <strong>mom</strong> does not
-deposit a blank line between paragraphs. If you want her to do so, use
-the control macro <strong>PARA_SPACE</strong>. (I don't recommend
-using this macro with
-<a href="typesetting.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.)
-<p>
-Note that <strong>mom</strong> does not provide &quot;orphan
-control&quot; for paragraphs (i.e. even if only one line of a paragraph
-fits at the bottom of a page, she will set it on that page). The
-reason for this is that writers of fiction often have single-line
-paragraphs (e.g. in dialogue). Groff's simplistic orphan control
-will break these one-liners -- if they fall at the bottom of the page
--- to a new page, which is not what you want.
-<p>
-<strong>TIP:</strong> The last thing you want while you're writing
-and editing drafts of a document (particularly stories and chapters)
-is a text file cluttered up with <strong>PP</strong>'s. The visual
-interruption in the flow of text is a serious obstacle to creativity
-and critiquing.
-<p>
-I use the tab key on my keyboard to indent paragraphs when I'm writing,
-producing a text file that looks pretty much like what you see on
-a printed page. When it comes time to format and print the file,
-I run it through a sed script that (amongst other things) converts
-the character generated by the tab key (<kbd>^I</kbd>) into <code>.PP</code>
-(plus a new line), and pipe the output to groff for processing and
-printing.
-<p>
-Another solution is to insert a blank line between paragraphs.
-The blank lines can then be sedded out at print time as above, or,
-more conveniently, you can use the <code>.blm</code>
-<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>
-(blank line macro) to instruct groff (and <strong>mom</strong>)
-that blank lines should be interpreted as <strong>PP</strong>'s.
-<p>
-<pre>
- .blm PP
-</pre>
-tells groff that all blank lines are really the macro <strong>PP</strong>.
-<p>
-
-<!---PP--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PP">
- Macro: <strong>PP</strong>
-</a>
-
-<p>
-<strong>PP</strong> (on a line by itself, of course) tells mom to
-start a new paragraph. See
-<a href="#PP_INTRO">above</a>
-for more details. In addition to regular text paragraphs, you can
-use <strong>PP</strong> in
-<a href="#EPIGRAPH_INTRO">epigraphs</a>,
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
-and
-<a href="#FOOTNOTE_INTRO">footnotes</a>.
-
-<a name="PP_CONTROL"><h3><u>Paragraph control macros</u></h3></a>
-<p>
-The <strong>PP</strong> being so important, and representing, as
-it were, the basis of everything that goes on in a document, its
-control is managed in a manner somewhat different from other document
-element tags.
-<p>
-<ol>
- <li><a href="#PP_FAMILY">Family control</a>
- <li><a href="#PP_FONT">Font control</a>
- <li><a href="#PP_COLOR">Paragraph colour</a>
- <li><a href="#PP_LEADING">Leading/linespacing control</a>
- <li><a href="#PP_JUST_QUAD">Justification/quad control</a>
- <li><a href="#PARA_INDENT">First-line indent control</a>
- <li><a href="#PARA_INDENT_FIRST">Initial paragraphs indent control</a>
- <li><a href="#PP_SPACE">Paragraph spacing control</a>
-</ol>
-
-<a name="PP_FAMILY"><h3><u>1. Family</u></h3></a>
-<p>
-The paragraph
-<a href="definitions.html#TERMS_FAMILY">family</a>
-is set with
-<a href="typesetting.html#FAMILY">FAMILY</a>
-prior to
-<a href="docprocessing.html#START">START</a>,
-or
-<a href="docprocessing.html#DOC_FAMILY">DOC_FAMILY</a>
-afterwards. Please note that both globally affect the family of
-every element in the document.
-<p>
-If you wish to change the family for regular
-text paragraphs only, invoke <strong>FAMILY</strong> immediately
-after <strong>PP</strong> in EVERY paragraph whose family you wish
-to differ from the prevailing document family.
-<p>
-<strong>Mom</strong>'s default paragraph (and document) family
-is Times Roman.
-<p>
-
-<a name="PP_FONT"><h3><u>2. Font -- PP_FONT</u></h3></a>
-<p>
-To change the
-<a href="definitions.html#TERMS_FONT">font</a>
-used in regular text paragraphs, use <code>.PP_FONT</code>,
-which takes the same argument as
-<a href="typesetting.html#FONT">FT</a>.
-<strong>PP_FONT</strong> may be used before or after
-<a href="docprocessing.html#START">START</a>.
-Only regular text paragraphs are affected; paragraphs in
-<a href="#EPIGRAPH_INTRO">epigraphs</a>,
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
-and
-<a href="#FOOTNOTE_INTRO">footnotes</a>
-remain at their default setting (medium roman) unless you change them
-with the appropriate control macros.
-<p>
-<strong>Mom</strong>'s default paragraph font is medium roman.
-<p>
-
-<a name="PP_COLOR"><h3><u>3. Paragraph colour</u></h3></a>
-<p>
-<strong>Mom</strong> has no special control macro for colourizing
-paragraphs. If you wish a colourized paragraph, you must use the
-macro,
-<a href="color.html#COLOR">COLOR</a>,
-or the
-<a href="definitions.html#TERMS_INLINE">inline escape</a>,
-<a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a>,
-<em>after</em> <strong>.PP</strong>. The colour must be one
-pre-defined (or &quot;initialized&quot;) with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-<p>
-Please note that unless you change the colour back to it's default
-(usually black) at the end of the paragraph, all subsequent
-paragraphs will be set in the new colour, although most other
-elements of your document will continue to be set in the default
-colour (usually black).
-<p>
-For example, assuming you have defined the colour, blue,
-<p>
-<pre>
- .PP
- .COLOR blue
- &lt;first paragraph&gt;
- .HEAD "Monty Python"
- .SUBHEAD "The Origins of Spam"
- .PP
- &lt;second paragraph&gt;
-</pre>
-
-the first paragraph will be blue, the head and subhead will be in
-the document's default colour (usually black), and the second
-paragraph will be in blue.
-<p>
-The one document element that is affected by changing the colour
-of paragraphs are
-<a href="#PARAHEAD">paraheads</a>,
-since they are attached directly to the body of paragraphs. In
-other words, if you change the colour of a paragraph and do not
-reset the paragraph colour back to its default, subsequent paraheads
-will appear in the same colour as your paragraphs unless you have
-explicitly told <strong>mom</strong> you want a pre-defined (or
-&quot;initialized&quot;) color (usually black) for your paraheads.
-<p>
-See the footnote to
-<a href="#PARAHEAD_COLOR">.PARAHEAD_COLOR</a>.
-
-<a name="PP_LEADING"><h3><u>4. Leading</u></h3></a>
-<p>
-The paragraph
-<a href="definitions.html#TERMS_LEADING">leading</a>
-is set with
-<a href="typesetting.html#LEADING">LS</a>
-prior to
-<a href="docprocessing.html#START">START</a>,
-or
-<a href="docprocessing.html#DOC_LEAD">DOC_LEAD</a>
-afterwards. Please note that either method globally affects the
-leading and spacing of every document element (except
-<a href="definitions.html#TERMS_HEADER">headers</a>
-and
-<a href="definitions.html#TERMS_FOOTER">footers</a>).
-<p>
-If you wish to change the leading of regular text paragraphs only,
-invoke <strong>LS</strong> immediately after <strong>PP</strong> in
-EVERY paragraph whose leading you wish to change.
-<p>
-<strong>HYPER-IMPORTANT NOTE:</strong> It is extremely unwise to change
-paragraph leading with <strong>LS</strong>, as it will, in all cases,
-screw up <strong>mom</strong>'s ability to balance the bottom margin
-of pages. Should you absolutely need to change paragraph leading
-with <strong>LS</strong>, and subsequently want <strong>mom</strong>
-to get back on the right leading track, use the
-<a href="docprocessing.html#SHIM">SHIM</a>
-macro.
-<p>
-<strong>Mom</strong>'s default paragraph leading (document leading)
-is 16 points, adjusted to fill the page.
-<p>
-
-<a name="PP_JUST_QUAD"><h3><u>5. Justification/quad</u></h3></a>
-<p>
-The justification/quad-direction of regular text paragraphs (i.e.
-<a href="definitions.html#TERMS_JUST">justified</a>,
-or
-<a href="definitions.html#TERMS_FILLED">filled</a>
-and
-<a href="definitions.html#TERMS_QUAD">quadded</a>
-left/right/centre) is set with
-<a href="typesetting.html#JUSTIFY">JUSTIFY</a>
-or
-<a href="typesetting.html#QUAD">QUAD</a>
-prior to
-<a href="docprocessing.html#START">START</a>,
-and with
-<a href="docprocessing.html#DOC_QUAD">DOC_QUAD</a>
-afterwards.
-<p>
-Please note that either method of setting the paragraph
-justification/quad-direction also affects
-<a href="#EPIGRAPH_INTRO">epigraphs</a>
-and
-<a href="#FOOTNOTE_INTRO">footnotes</a>,
-but not
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
-(whose default is QUAD LEFT unless you change it with
-<a href="#BLOCKQUOTE">BLOCKQUOTE_QUAD</a>).
-The justification/quad-direction of epigraphs and footnotes may
-be changed with their own control macros.
-<p>
-If you wish to change the justification/quad-direction of
-individual paragraphs, use <strong>JUSTIFY</strong> or
-<strong>QUAD</strong> immediately after <strong>PP</strong>.
-Only the paragraph in question gets justified or quadded
-differently; subsequent paragraphs remain unaffected.
-<p>
-<strong>Mom</strong>'s default justification/quad-direction for
-paragraphs is
-<br>
-<ul>
- <li>justified, for
- <a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPESET</a>
- <li>quad left, for
- <a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPEWRITE</a>
-</ul>
-<p>
-<a name="PARA_INDENT"><h3><u>6. First-line indent -- PARA_INDENT</u></h3></a>
-<p>
-The first-line indent of paragraphs is controlled by
-<strong>PARA_INDENT</strong>, which takes one argument: the size
-of the indent. <strong>PARA_INDENT</strong> may be used before
-or after
-<a href="docprocessing.html#START">START</a>.
-A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required; fractional sizes are allowed. Thus, to set the paragraph
-indent to 4-1/2
-<a href="definitions.html#TERMS_EM">ems</a>, do
-<p>
-<pre>
- .PARA_INDENT 4.5m
-</pre>
-
-In addition to establishing the basic first line-indent of
-paragraphs, <strong>PARA_INDENT</strong> also affects
-<a href="#EPIGRAPH_INTRO">epigraphs</a>,
-<a href="#QUOTE_INTRO">quotes</a>
-and
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>,
-whose overall indenting from the left and (where applicable) right
-margins is relative to <strong>PARA_INDENT</strong>. Furthermore, the
-first-line indent of paragraphs within these document elements (as well
-as footnotes) is also relative to <strong>PARA_INDENT</strong> (always
-1/2 of <strong>PARA_INDENT)</strong>), hence they are also affected.
-<p>
-<strong>Mom</strong>'s default <strong>PARA_INDENT</strong> is 2
-ems for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPESET</a>
-and 3 picas (1/2 inch) for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPEWRITE</a>.
-<p>
-
-<a name="PARA_INDENT_FIRST"><h3><u>7. Indenting initial paragraphs -- INDENT_FIRST_PARAS</u></h3></a>
-<p>
-By default, <strong>mom</strong> does not indent the first paragraph
-of a document, nor the first paragraph after a head or
-subhead, nor the first paragraphs of
-<a href="#EPIGRAPH_INTRO">epigraphs</a>,
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
-or
-<a href="#FOOTNOTE_INTRO">footnotes</a>
-that run to more than one paragraph.
-<a name="INDENT_FIRST_PARAS"></a>
-<p>
-If you wish to have first paragraphs indented, invoke the macro
-<strong>.INDENT_FIRST_PARAS</strong> with no argument, either
-before or after
-<a href="docprocessing.html#START">START</a>.
-<strong>INDENT_FIRST_PARAS</strong> is a toggle macro, therefore
-passing it any argument (<strong>OFF, QUIT, Q, X</strong>...) cancels
-its effect, meaning that first paragraphs will once again NOT be
-indented.
-<p>
-
-<a name="PP_SPACE"><h3><u>8. Spacing paragraphs -- PARA_SPACE</u></h3></a>
-<p>
-By default, <strong>mom</strong> does not insert a blank line
-between paragraphs. If you would like her to do so, invoke the
-macro <code>.PARA_SPACE</code> with no argument, either
-before or after
-<a href="docprocessing.html#START">START</a>.
-<strong>PARA_SPACE</strong> is a toggle macro, therefore passing
-it any argument (<strong>OFF, QUIT, Q, X</strong>...) cancels its
-effect, meaning that paragraphs will once again NOT be separated by
-a blank line.
-<p>
-<strong>NOTE:</strong> If <strong>PARA_SPACE</strong> is on,
-<strong>mom</strong> spaces only those paragraphs that come after
-an &quot;initial&quot; paragraph. Initial paragraphs are those
-that come immediately after the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
-<a href="#EPIGRAPH_INTRO">epigraphs</a>,
-<a href="#HEAD_INTRO">heads</a>,
-<a href="#SUBHEAD_INTRO">subheads</a>
-and
-<a href="#LINEBREAK_INTRO">linebreaks</a>.
-(The first paragraph after these document elements requires no
-blank line to separate it from other paragraphs.)
-<p>
-Sometimes, you can be fairly deep into a document before using
-<strong>.PP</strong> for the first time, and when you do, because
-<strong>mom</strong> is still waiting for that &quot;initial&quot;
-paragraph, she doesn't space it with a blank line, even though
-you expect her to. The simple workaround for this is to invoke
-<strong>.PP</strong> <em>twice</em> (in succession) at the point you
-expect the blank line to appear.
-<br>
-<hr>
-
-<!====================================================================>
-
-<a name="HEAD_INTRO"><h2><u>Main heads</u></h2></a>
-<ul>
- <li><a href="#HEAD">Tag: HEAD</a>
- <li><a href="#HEAD_CONTROL">Head control macros</a>
-</ul>
-<p>
-Main heads -- or, in this documentation, just &quot;heads&quot;
--- should be used any place you want titles to introduce major
-sections of a document. If you wish, <strong>mom</strong> can number
-your heads for you. Head numbers can also be included
-hierarchically in numbered
-<a href="#SUBHEAD_INTRO">subheads</a>
-and
-<a href="#PARAHEAD_INTRO">paraheads</a>.
-<p>
-By default, heads are centred on the page, underlined,
-all in caps. A double linespace precedes each head. In <a
-href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>, heads
-are bold, slightly larger than paragraph text.
-<p>
-If these defaults don't suit you, you can change them with the
-head control macros.
-<p>
-
-<!---HEAD--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HEAD">
- <nobr>Macro: <strong>HEAD</strong> &quot;&lt;text of head&gt;&quot; [ &quot;&lt;2nd line&gt;&quot; [ &quot;&lt;3rd line&gt;&quot; ... ] ]</nobr>
-</a>
-
-<p>
-The argument to <strong>HEAD</strong> is the text of the head,
-surrounded by double-quotes. If you need additional lines for a
-head, simply surround each line with double-quotes.
-<p>
-<strong>NOTE:</strong> If a head falls near the bottom of an output page
-and <strong>mom</strong> is unable to fit the head <em>plus at least
-one line of text underneath it</em>, she will set the head at the
-top of the next page.
-<p>
-<strong>ADDITIONAL NOTE:</strong> If an
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-in a head (i.e. one of the lines surrounded by double-quotes) has
-to be broken by <strong>mom</strong> in order to fit the current
-line-length (say, a narrow column measure), the head underline
-(underscore) will not behave. You'll recognize the problem as soon
-as you preview your document. If you encounter a head that
-misbehaves with respect to underlining, the solution is to
-supply each line <em>as you want it</em> as a separate argument
-(surrounded by double-quotes) to the <strong>HEAD</strong> macro.
-<p>
-For example, if <strong>mom</strong> breaks
-<pre>
- .HEAD "This is a very, very, very long head"
-</pre>
-into
-<pre>
- This is a very, very, very
- long head
-</pre>
-
-you'll see the misbehaving underscore and should change the
-argument to <strong>HEAD</strong> to
-<pre>
- .HEAD "This is a very, very very" "long head"
-</pre>
-
-<a name="HEAD_CONTROL"><h3><u>Head control macros</u></h3></a>
-<p>
-There are, in addition to the usual family/font/size/quad control
-macros, a number of macros to manage head numbering, spacing,
-underlining, and so on. Check them out if you're unhappy with
-<strong>mom</strong>'s defaults.
-<p>
-<ol>
- <li><a href="#HEAD_GENERAL">Family/font/size/colour/quad</a>
- <li><a href="#HEAD_CAPS">Caps</a>
- <li><a href="#HEAD_SPACE">Pre-head space</a>
- <li><a href="#HEAD_UNDERLINE">Underlining</a>
- <li><a href="#NUMBER_HEADS">Numbering</a>
- <li><a href="#RESET_HEAD_NUMBER">Reset head numbering</a>
- <li><a href="#HEAD_INLINES">Vertical inline escapes inside heads</a>
-</ol>
-<p>
-<a name="HEAD_GENERAL"><h3><u>1. Family/font/size/colour/quad</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.HEAD_FAMILY default = prevailing document family; default is Times Roman
-.HEAD_FONT default = bold
-.HEAD_SIZE default = +1 (point)
-.HEAD_COLOR default = black
-.HEAD_QUAD default = CENTER
-</pre>
-
-<a name="HEAD_CAPS"><h3><u>2. Capitalizing heads -- HEAD_CAPS</u></h3></a>
-<p>
-By default, <strong>mom</strong> sets heads in caps, regardless
-of the
-<a href="definitions.html#TERMS_STRINGARGUMENT">string(s)</a>
-you give to
-<a href="#HEAD">HEAD</a>.
-To change this behaviour, do
-<p>
-<pre>
- .HEAD_CAPS OFF
-</pre>
-
-<strong>HEAD_CAPS</strong> is a toggle macro, therefore you can use
-any argument you like instead of <strong>OFF</strong> (<strong>END,
-QUIT, Q, X</strong>...). To turn <strong>HEAD_CAPS</strong> back on,
-simply invoke it without an argument.
-<p>
-
-<a name="HEAD_SPACE"><h3><u>3. Space before heads -- HEAD_SPACE</u></h3></a>
-<p>
-By default, <strong>mom</strong> deposits 2 blank lines prior to every
-head. If you'd prefer just a single blank line, do
-<p>
-<pre>
- .HEAD_SPACE OFF
-</pre>
-
-<strong>HEAD_SPACE</strong> is a toggle macro, therefore you can use
-any argument you like instead of <strong>OFF</strong> (<strong>END,
-QUIT, Q, X</strong>...). To restore the space before heads to 2
-blank lines, invoke <strong>HEAD_SPACE</strong> without an argument.
-<p>
-
-<a name="HEAD_UNDERLINE"><h3><u>4. Underlining heads -- HEAD_UNDERLINE</u></h3></a>
-<p>
-By default, <strong>mom</strong> underlines heads. To change this
-behaviour, do
-<p>
-<pre>
- .HEAD_UNDERLINE OFF
-</pre>
-
-<strong>HEAD_UNDERLINE</strong> is a toggle macro, therefore you can
-use any argument you like instead of <strong>OFF</strong> (<strong>END,
-QUIT, Q, X</strong>...). To restore underlining of heads, invoke
-<strong>HEAD_UNDERLINE</strong> without an argument.
-<p>
-
-<a name="NUMBER_HEADS"><h3><u>5. Number heads -- NUMBER_HEADS</u></h3></a>
-<p>
-If you'd like your heads numbered, simply invoke
-<strong>NUMBER_HEADS</strong> with no argument. <strong>Mom</strong>
-will number all subsequent heads automatically (in ascending order,
-naturally).
-<p>
-If, in addition to numbering heads, you also request that
-<a href="#SUBHEAD_INTRO">subheads</a>
-and/or
-<a href="#PARAHEAD_INTRO">paraheads</a>
-be numbered, the head number will be included in their numbers
-(each number separated by a period [dot]).
-<p>
-Should you wish to stop head numbering, invoke
-<strong>NUMBER_HEADS</strong> with any argument (<strong>OFF, QUIT,
-END, X</strong>...). Head numbering will cease, and the head number
-will not be included in the numbering of subheads and/or paraheads.
-<p>
-
-<a name="RESET_HEAD_NUMBER"><h3><u>6. Reset head numbering -- RESET_HEAD_NUMBER</u></h3></a>
-<p>
-Should you wish to reset the head number to &quot;1&quot;, invoke
-<strong>RESET_HEAD_NUMBER</strong> with no argument. If, for some
-reason, you want <strong>mom</strong> to use a head number that is not
-the next in ascending order (i.e. the last head number + 1), invoke
-<strong>RESET_HEAD_NUMBER</strong> with the number you want, e.g.
-<p>
-<pre>
- .RESET_HEAD_NUMBER 6
-</pre>
-
-Your next head will be numbered &quot;6&quot; and subsequent heads will
-be numbered in ascending order from &quot;6&quot;.
-<p>
-
-<a name="HEAD_INLINES"><h3><u>7. Vertical inline escapes inside heads</u></h3></a>
-<p>
-If you need to adjust the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-position of a head (e.g. the head falls at the top of a column and
-you want its
-<a href="definitions.html#TERMS_ASCENDER">ascenders</a>
-to line up with the ascenders of
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-in other columns), you can embed a vertical motion
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-(either
-<a href="inlines.html#INLINE_VERTICAL_MOM">mom</a>'s
-or
-<a href="inlines.html#INLINE_VERTICAL_GROFF">groff</a>'s
-in the string(s) you pass to <strong>HEAD</strong>
-<p>
-For example,
-<p>
-<pre>
- .HEAD "\[ALD3]Text of head"
- or
- .HEAD "\[DOWN 3p]Text of head"
-</pre>
-
-will lower the baseline of the head by three points. Note that
-there's no need to reverse the sense of the inline escape.
-<p>
-In the case of heads that run to more than one line, you must embed
-the escape in the string for each line, like this:
-<p>
-<pre>
- .HEAD "\[ALD3]First line" "\[ALD3]Next line"
- or
- .HEAD "\[DOWN 3p]First line" "\[DOWN 3p]Next line"
-</pre>
-<hr>
-
-<!====================================================================>
-
-<a name="SUBHEAD_INTRO"><h2><u>Subheads</u></h2></a>
-<ul>
- <li><a href="#SUBHEAD">Tag: SUBHEAD</a>
- <li><a href="#SUBHEAD_CONTROL">Subhead control macros</a>
-</ul>
-<p>
-Subheads should be used any place you want titles to introduce
-sections of a document below heads. If you wish, <strong>mom</strong>
-can number subheads for you. Subhead numbers can also be included
-hierarchically in numbered
-<a href="#PARAHEAD_INTRO">paraheads</a>.
-<p>
-By default, subheads are flush left. In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-they are set bold, slightly larger than paragraph text. In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-they are underlined. A single linespace precedes them in both
-printstyles, and a tiny space adjustment raises them slightly
-above text that comes afterwards for greater clarity in
-document structuring.
-<p>
-If these defaults don't suit you, you can change them with the
-subhead control macros.
-<p>
-
-<!---SUBHEAD--->
-
-<hr width="66%" align="left">
-<p>
-<a name="SUBHEAD">
- <nobr>Macro: <strong>SUBHEAD</strong> &quot;&lt;text of subhead&gt;&quot; [ &quot;&lt;2nd line&gt;&quot; [ &quot;&lt;3rd line&gt;&quot; ... ] ]</nobr>
-</a>
-<p>
-The argument to <strong>SUBHEAD</strong> is the text of the subhead,
-surrounded by double-quotes. If you need additional lines for a
-subhead, simply surround each line with double-quotes.
-<p>
-<strong>NOTE:</strong> If a subhead falls near the bottom of an output
-page and <strong>mom</strong> is unable to fit the head <em>plus at
-least one line of text underneath it</em>, she will set the subhead
-at the top of the next page.
-
-<a name="SUBHEAD_CONTROL"><h3><u>Subhead control macros</u></h3></a>
-<p>
-In addition to the usual family/font/size/quad control
-macros, there are macros to manage subhead numbering.
-<p>
-<ol>
- <li><a href="#SUBHEAD_GENERAL">Family/font/size/colour/quad</a>
- <li><a href="#NUMBER_SUBHEADS">Numbering</a>
- <li><a href="#RESET_SUBHEAD_NUMBER">Reset subhead numbering</a>
- <li><a href="#SUBHEAD_INLINES">Vertical inline escapes inside subheads</a>
-</ol>
-<p>
-<a name="SUBHEAD_GENERAL"><h3><u>1. Family/font/size/quad</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.SUBHEAD_FAMILY default = prevailing document family; default is Times Roman
-.SUBHEAD_FONT default = bold
-.SUBHEAD_SIZE default = +.5 (point)
-.SUBHEAD_COLOR default = black
-.SUBHEAD_QUAD default = LEFT
-</pre>
-
-<a name="NUMBER_SUBHEADS"><h3><u>2. Number subheads -- NUMBER_SUBHEADS</u></h3></a>
-<p>
-If you'd like your subheads numbered, simply invoke
-<strong>.NUMBER_SUBHEADS</strong> with no argument.
-<strong>Mom</strong> will number all subsequent subheads automatically
-(in ascending order, naturally).
-<p>
-If, in addition to numbering subheads, you also request that
-<a href="#HEAD_INTRO">heads</a>
-be numbered, the head number will be included in the subhead number
-(separated by a period [dot]).
-<p>
-Should you wish to stop subhead numbering, invoke
-<strong>NUMBER_SUBHEADS</strong> with any argument (<strong>OFF, QUIT,
-END, X</strong>...). Subhead numbering will cease, and the subhead
-number will not be included in the numbering of paraheads.
-<p>
-
-<a name="RESET_SUBHEAD_NUMBER"><h3><u>3. Reset head numbering -- RESET_SUBHEAD_NUMBER</u></h3></a>
-<p>
-Should you wish to reset the subhead number to &quot;1&quot;, invoke
-<strong>RESET_SUBHEAD_NUMBER</strong> with no argument. If, for some
-reason, you want <strong>mom</strong> to use a subhead number that is not
-the next in ascending order (i.e. the last subhead number + 1), invoke
-<strong>RESET_SUBHEAD_NUMBER</strong> with the number you want, e.g.
-<p>
-<pre>
- .RESET_SUBHEAD_NUMBER 4
-</pre>
-
-Your next subhead will be numbered &quot;4&quot; and subsequent
-subheads will be numbered in ascending order from &quot;4&quot;.
-
-<a name="SUBHEAD_INLINES"><h3><u>Vertical inline escapes inside subheads</u></h3></a>
-See
-<a href="#HEAD_INLINES">Vertical inline escapes inside heads</a>.
-The information there applies equally to subheads.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="PARAHEAD_INTRO"><h2><u>Paragraph heads</u></h2></a>
-<ul>
- <li><a href="#PARAHEAD">Tag: PARAHEAD</a>
- <li><a href="#PARAHEAD_CONTROL">Parahead control macros</a>
-</ul>
-<p>
-Paragraph heads (paraheads) should be used any place you want titles
-to introduce paragraphs below heads or subheads. If you wish,
-<strong>mom</strong> can number paraheads for you.
-<p>
-By default, paraheads are joined to the body of a paragraph,
-slightly indented (provided the paragraph is not a
-&quot;first&quot; paragraph as defined in
-<a href="#PARA_INDENT_FIRST">Indenting initial paragraphs</a>).
-In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-they are set bold italic, slightly larger than paragraph text. In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-they are underlined.
-<p>
-If these defaults don't suit you, you can change them with the
-parahead control macros.
-<p>
-
-<!---PARAHEAD--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PARAHEAD">
- <nobr>Macro: <strong>PARAHEAD</strong> &quot;&lt;text of parahead&gt;&quot;</nobr>
-</a>
-<p>
-<strong>PARAHEAD</strong> must come AFTER
-<a href="#PP">PP</a>
-or it will not work!
-<p>
-The argument is the text of the parahead, surrounded by double-quotes.
-Because paraheads are joined to the body of a paragraph, they accept
-only one argument (see
-<a href="#HEAD">HEAD</a>
-and
-<a href="#SUBHEAD">SUBHEAD</a>).
-<p>
-
-<a name="PARAHEAD_CONTROL"><h3><u>Parahead control macros</u></h3></a>
-<p>
-In addition to the family/font/size/colour/indent control macros,
-there are macros to manage parahead numbering.
-<p>
-<ol>
- <li><a href="#PARAHEAD_GENERAL">Family/font/size/color</a>
- <li><a href="#PARAHEAD_INDENT">Indent</a>
- <li><a href="#NUMBER_PARAHEADS">Numbering</a>
- <li><a href="#RESET_PARAHEAD_NUMBER">Reset parahead numbering</a>
-</ol>
-<p>
-<a name="PARAHEAD_GENERAL"><h3><u>1. Family/font/size/colour</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.PARAHEAD_FAMILY default = prevailing document family; default is Times Roman
-.PARAHEAD_FONT default = bold italic
-.PARAHEAD_SIZE default = +.5 (point)
-<a name="PARAHEAD_COLOR">.PARAHEAD_COLOR default = black*</a>
-
-*If you colourize paragraph text, paraheads will appear in the same
-colour as the text unless you explicitly tell mom to colour them
-otherwise by invoking .PARAHEAD_COLOR. If you do want paraheads
-that are coloured the same as paragraph text, it's generally a good
-idea to invoke .PARAHEAD_COLOR anyway (with the same colour used
-for paragraph text), just to let mom know.
-</pre>
-
-<a name="PARAHEAD_INDENT"><h3><u>2. Indent</u></h3></a>
-<p>
-Unlike other control macros that end in
-<a href="#CONTROL_INDENTS"><strong>_INDENT</strong></a>,
-the argument to the macro that controls indenting of paragraph heads
-(<strong>PARAHEAD_INDENT</strong>) is NOT relative to the first-line
-indent of normal paragraphs. In other words, it takes an absolute
-value, and requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example, to set the paragraph head indent to 2-1/2 picas, you
-do:
-<p>
-<pre>
- .PARAHEAD_INDENT 2.5P
-</pre>
-<strong>Mom</strong>'s default indent for paragraph heads is 1/2
-the first-line indent of normal paragraphs (both printstyles).
-However, as stated above, if you choose to change the indent, you
-must give an absolute value (unless you're a groff expert and want
-to manipulate the number register <code>\n[#PP_INDENT]u</code>
-arithmetically as the argument to <strong>PARAHEAD_INDENT</strong>
-for an indent that's relative to <strong>PP_INDENT</strong>.)
-<p>
-<strong>NOTE:</strong> Paragraph heads in &quot;first
-paragraphs&quot;, as defined in
-<a href="#PARA_INDENT_FIRST">Indenting initial paragraphs</a>,
-are not indented unless you turn
-<a href="#INDENT_FIRST_PARAS">INDENT_FIRST_PARAS</a>
-on.
-<p>
-
-<a name="NUMBER_PARAHEADS"><h3><u>3. Number paraheads -- NUMBER_PARAHEADS</u></h3></a>
-<p>
-If you'd like your paraheads numbered, simply invoke
-<strong>.NUMBER_PARAHEADS</strong> with no argument.
-<strong>Mom</strong> will number all subsequent paraheads automatically
-(in ascending order, naturally).
-<p>
-If, in addition to numbering paraheads, you also request that
-<a href="#HEAD_INTRO">heads</a>
-and
-<a href="#SUBHEAD_INTRO">subheads</a>
-be numbered, the head and/or subhead number will be included in the
-parahead number (separated by a period [dot]).
-<p>
-Should you wish to stop parahead numbering, invoke
-<strong>NUMBER_PARAHEADS</strong> with any argument (<strong>OFF,
-QUIT, END, X</strong>...). Parahead numbering will cease.
-<p>
-
-<a name="RESET_PARAHEAD_NUMBER"><h3><u>4. Reset head numbering -- RESET_PARAHEAD_NUMBER</u></h3></a>
-<p>
-Should you wish to reset the parahead number to &quot;1&quot;, invoke
-<strong>RESET_PARAHEAD_NUMBER</strong> with no argument. If, for some
-reason, you want <strong>mom</strong> to use a parahead number that is not
-the next in ascending order (i.e. the last parahead number + 1), invoke
-<strong>RESET_PARAHEAD_NUMBER</strong> with the number you want, e.g.
-<p>
-<pre>
- .RESET_PARAHEAD_NUMBER 7
-</pre>
-
-Your next parahead will be numbered &quot;7&quot; and subsequent
-paraheads will be numbered in ascending order from &quot;7&quot;.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="LINEBREAK_INTRO"><h2><u>Author linebreaks</u></h2></a>
-<ul>
- <li><a href="#LINEBREAK">Tag: LINEBREAK</a>
- <li><a href="#LINEBREAK_CHAR">Linebreak character control macro</a>
-</ul>
-<p>
-By default, <strong>mom</strong> marks
-<a href="definitions.html#TERMS_LINEBREAK">author linebreaks</a>
-with three centred asterisks. You can change this behaviour
-with the linebreak character
-<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>.
-<p>
-
-<!---LINEBREAK--->
-
-<hr width="66%" align="left">
-<p>
-<a name="LINEBREAK">
- Macro: <strong>LINEBREAK</strong>
-</a>
-<br>
-Alias: <strong>SECTION</strong>
-
-<p>
-<strong>LINEBREAK</strong> takes no arguments. Simply invoke it
-(on a line by itself, of course) whenever you want to insert an
-author linebreak. The appearance of the linebreak is controlled
-by the
-<a href="#LINEBREAK_CHAR">LINEBREAK_CHAR</a>
-macro.
-
-<h3><u>Linebreak character control macro</u></h3>
-<p>
-<a name="LINEBREAK_CHAR">
- <nobr>Macro: <strong>LINEBREAK_CHAR</strong> [ &lt;character&gt; ] [ &lt;iterations&gt; [ &lt;vertical adjustment&gt; ] ]</nobr>
-</a>
-<br>
-Alias: <strong>SECTION_CHAR</strong>
-<br>
-<em>*The third optional argument requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>.
-<p>
-<strong>LINEBREAK_CHAR</strong> determines what <strong>mom</strong>
-prints when <strong>LINEBREAK</strong> is invoked. It takes 3
-optional arguments: the character you want deposited at the line
-break, the number of times you want the character repeated, and a
-vertical adjustment factor.
-<p>
-The first argument is any legal groff character (e.g. <kbd>*</kbd>
-[an asterisk], <kbd>\(dg</kbd> [a dagger], <kbd>\f(ZD\N'141\fP</kbd>
-[an arbitrary character from Zapf Dingbats], <kbd>\l'4P'</kbd>
-[a 4-pica long rule]). <strong>Mom</strong> sets the character
-centred on the current line length. (See &quot;man groff_char&quot;
-for a list of all legal groff characters.)
-<p>
-The second argument is the number of times to repeat the character.
-<p>
-The third argument is a +|- value by which to raise (+) or lower (-)
-the character in order to make it appear visually centred between
-sections of text. This lets you make vertical adjustments
-to characters that don't sit on the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-(such as asterisks). The argument must be preceded by a plus or
-minus sign, and must include a unit of measure.
-<p>
-If you enter <strong>LINEBREAK_CHAR</strong> with no arguments,
-sections of text will be separated by two blank lines when you invoke
-<strong>LINEBREAK</strong>.
-<p>
-<strong>Mom</strong>'s default for <strong>LINEBREAK_CHAR</strong> is
-<p>
-<pre>
- .LINEBREAK_CHAR * 3 -3p
-</pre>
-
-i.e. three asterisks, lowered 3 points from their normal vertical
-position (for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>;
-the vertical adjustment is -2 points for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>).
-
-<h3><u>Linebreak colour control macro</u></h3>
-<p>
-<a name="LINEBREAK_COLOR">
- <nobr>Macro: <strong>LINEBREAK_COLOR</strong> &lt;color name&gt;</nobr>
-</a>
-<p>
-To change the colour of the linebreak character(s), simply invoke
-<strong>LINBREAK_COLOR</strong> with the name of a pre-defined (or
-&quot;initialized&quot;) colour.
-<br>
-<hr>
-
-<!====================================================================>
-
-<a name="QUOTE_INTRO"><h2><u>Quotes (line for line)</u></h2></a>
-<ul>
- <li><a href="#QUOTE">Tag: QUOTE</a>
- <li><a href="#QUOTE_CONTROL">Quote control macros</a>
-</ul>
-<p>
-<a href="definitions.html#TERMS_QUOTE">Quotes</a>
-are always set in
-<a href="definitions.html#TERMS_NOFILL">nofill mode</a>,
-flush left. This permits entering quotes on a line for line basis in
-your text editor and have them come out the same way on output copy.
-(See
-<a href="#BLOCKQUOTE_INTRO">Blockquotes</a>
-for how quotes, in the present sense, differ from longer
-passages of cited text.)
-<p>
-Since <strong>mom</strong> originally came into being to serve
-the needs of creative writers (i.e. novelists, short story
-writers, etc. -- not to cast aspersions on the creativity of
-mathematicians and programmers), she sets quotes in italics
-<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPESET)</a>
-or underlined
-<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPEWRITE)</a>,
-indented from the left margin. Obviously, she's thinking
-&quot;quotes from poetry or song lyrics&quot;, but with the
-<a href="#QUOTE_CONTROL">quote control macros</a>
-you can change her defaults so <strong>QUOTE</strong> serves other
-needs, e.g. entering verbatim snippets of programming code, command
-line instructions, and so on. (See the
-<a href="#QUOTE_TIP">tip</a>
-below for suggestions about including programming code snippets in
-documents.)
-<p>
-<a name="QUOTE_SPACING"></a>
-Besides indenting quotes, <strong>mom</strong> further sets them
-off from
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-with a small amount of vertical whitespace top and bottom. In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-this is always one full linespace. In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-it's 1/2 of the prevailing
-<a href="definitions.html#TERMS_LEADING">leading</a>
-if the quote fits fully on the page (i.e. with running text above
-and below it), otherwise it's a full linespace either above or below
-as is necessary to balance the page to the bottom margin. This
-behaviour can be changed with the control macro
-<a href="#ALWAYS_FULLSPACE_QUOTES">ALWAYS_FULLSPACE_QUOTES</a>.
-<p>
-<strong>NOTE:</strong> <strong>ALWAYS_FULLSPACE_QUOTES</strong>
-applies to both
-<a href="#QUOTE">QUOTE</a>
-and
-<a href="#BLOCKQUOTE">BLOCKQUOTE</a>,
-as does the control macro
-<a href="#QUOTE_INDENT">QUOTE_INDENT</a>.
-<p>
-<strong>Version 1.3: mom</strong>'s handling of the vertical
-whitespace around quotes has changed slightly. In versions prior
-to 1.3, it was not possible to alter the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of quotes and blockquotes (which was the same as the document
-leading), ensuring that the vertical whitespace remained consistent,
-as described above. In 1.3 and later, it is possible to change the
-leading of quotes and blockquote via
-the <strong>QUOTE_AUTOLEAD</strong> and
-<strong>BLOCKQUOTE_AUTOLEAD</strong>macro. Now, if your quote
-(or blockquote) leading differs from the document leading,
-<strong>mom</strong> attempts to observe the same rules for vertical
-whitespace outlined above; however, she will also insert a small,
-flexible amount of extra whitespace around the quotes to make sure
-the whitespace is equal, top and bottom. Since she does this on a
-quote by quote basis, rather than by figuring out how much extra
-whitespace is needed to adjust <em>all</em> quotes on a page,
-the spacing around multiple quotes on the same page will differ
-slightly, although each will be balanced between lines of normal
-<a href="definitions.html#TERMS_RUNNING">running text</a>,
-top and bottom. (The inability to scan an entire page and insert
-equalized whitespace at marked places is a limitation of groff,
-which, by and large, works in a linear, line by line fashion.)
-If you don't provide <strong>mom</strong> with a
-<strong>QUOTE_AUTOLEAD</strong>, quotes are leaded at the default
-for normal running text, meaning that multiple quotes on the same
-page are all spaced identically.
-<p>
-<a name="QUOTE_TIP"><strong>TIP:</strong></a>
-If you want to include snippets of programming code in
-<strong>mom</strong> documents, you may come acropper of the fact
-that groff (and <strong>mom</strong>'s) escape character is the
-backslash. In order for <strong>mom</strong> not to interpret
-backslashes that occur in code snippets as escapes, you have to
-tell <strong>mom</strong> that the backslash character is
-(temporarily) no longer the escape character. The easiest way
-to do this is to set the escape character to something else for
-the duration of the code snippet. You accomplish this with
-<strong>ESC_CHAR</strong>, like this:
-<p>
-<pre>
- .ESC_CHAR c
-</pre>
-
-where &quot;c&quot;, above, is the alternate escape character
-(which should be a character that does not appear in the code). To
-set the escape character back to the backslash, simply invoke
-<strong>.ESC_CHAR</strong> by itself (i.e. with no argument).
-<p>
-Because <strong>mom</strong>, by default, sets the text after
-<strong>.QUOTE</strong> in italic (for <strong>PRINTSTYLE
-TYPESET</strong>) or underlined (for <strong>PRINTSTYLE
-TYPEWRITE</strong>), you'll want to change that behaviour as
-well. Therefore, a recipe for setting verbatim code snippets using
-<strong>QUOTE</strong> could be (assuming you want a fixed width
-font like Courier):
-<p>
-<pre>
- \# You only need the first two lines before the first invocation
- \# of QUOTE. They stay in effect for all subsequent invocations.
- \#
- .QUOTE_FONT CR \" Set quote font to Courier roman
- .UNDERLINE_QUOTES OFF \" Don't underline quotes in TYPEWRITE
- .QUOTE
- .ESC_CHAR ^ \" Change escape character to ^
- &lt;code snippet&gt;
- .ESC_CHAR \" Restore escape character to \
- .QUOTE OFF
-
-</pre>
-
-<!---QUOTE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="QUOTE">
- <nobr>Macro: <strong>QUOTE</strong> toggle</nobr>
-</a>
-
-<p>
-<strong>QUOTE</strong> is a toggle macro. To begin a section of
-quoted text, invoke it with no argument, then type in your quote.
-When you're finished, invoke <strong>QUOTE</strong> with any
-argument (e.g. OFF, END, X, Q...) to turn it off. Example:
-<p>
-<pre>
- .QUOTE
- Nymphomaniacal Jill
- Used a dynamite stick for a thrill
- They found her vagina
- In North Carolina
- And bits of her tits in Brazil.
- .QUOTE END
-</pre>
-
-<a name="QUOTE_CONTROL"><h3><u>Quote control macros</u></h3></a>
-<ol>
- <li><a href="#QUOTE_GENERAL">Family/font/size/leading/colour/indent</a>
- <li><a href="#ALWAYS_FULLSPACE_QUOTES">Spacing above and below (typeset only)</a>
- <li><a href="#UNDERLINE_QUOTES">Underline quotes (typewrite only)</a>
- <li><a href="#BREAK_QUOTE">Manually break a footnoted quote that crosses pages/columns</a>
-</ol>
-<p>
-<a name="QUOTE_GENERAL"><h3><u>1. Family/font/size/colour/indent</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.QUOTE_FAMILY default = prevailing document family; default is Times Roman
-.QUOTE_FONT default = italic; underlined in TYPEWRITE
-.QUOTE_SIZE default = +0 (i.e. same size as paragraph text)
-.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs
-.QUOTE_COLOR default = black
-<a name="QUOTE_INDENT">.QUOTE_INDENT default = paragraph indent x 3 (typeset); x 2 (typewrite)</a>
- (note that this macro also sets the indents (left and right)
- for blockquotes)
-</pre>
-
-<a name="ALWAYS_FULLSPACE_QUOTES"><h3><u>2. Spacing above and below -- ALWAYS_FULLSPACE_QUOTES (typeset only)</u></h3></a>
-<p>
-If you'd like <strong>mom</strong> always to put a full linespace above
-and below quotes, invoke <strong>.ALWAYS_FULLSPACE_QUOTES</strong>
-with no argument. If you wish to restore <strong>mom</strong>'s
-default behaviour regarding the spacing of quotes (see
-<a href="#QUOTE_SPACING">above</a>),
-invoke the macro with any argument (<strong>OFF, QUIT, END,
-X</strong>...)
-<p>
-<strong>NOTE:</strong> This macro also sets <strong>mom</strong>'s
-spacing policy for
-<a href="#BLOCKQUOTE_INTRO">blockquotes</a>.
-<p>
-
-<a name="UNDERLINE_QUOTES"><h3><u>3. Underlining -- UNDERLINE_QUOTES (typewrite only)</u></h3></a>
-<p>
-By default in
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>mom</strong> underlines quotes. If you'd rather she didn't,
-invoke <strong>.UNDERLINE_QUOTES</strong> with any argument
-(<strong>OFF, QUIT, END, X</strong>...) to disable the feature.
-Invoke it without an argument to restore <strong>mom</strong>'s
-default underlining of quotes.
-<p>
-If you not only wish that <strong>mom</strong> not underline
-quotes, but also that she set them in italic, you must follow each
-instance of <strong>QUOTE</strong> with the typesetting macro <a
-href="typesetting.html#FONT">FT I</a>.
-Furthermore, since <strong>mom</strong> underlines all instances
-of italics by default in <strong>PRINTSTYLE TYPEWRITE</strong>,
-you must also make sure that <strong>ITALIC_MEANS_ITALIC</strong>
-is enabled (see
-<a href="docprocessing.html#TYPEWRITE_CONTROL">PRINTSTYLE TYPEWRITE control macros</a>).
-<p>
-
-<a name="BREAK_QUOTE"><h3><u>4. Manually break a footnoted quote -- BREAK_QUOTE</u></h3></a>
-<p>
-<strong>NOTE:</strong> <em>As of version 1.1.9, the macro</em>
-<strong>BREAK_QUOTE</strong> <em>has become obsolete (or, at least,
-should have become obsolete.) It remains here for backward
-compatibility with documents created prior to 1.1.9, and just in
-case, despite my efforts to make it obsolete, you still encounter the
-problem it's supposed to fix. Should you find yourself having to
-use</em> <strong>BREAK_QUOTE</strong> <em>while running</em> <strong>mom</strong>
-1.1.9 <em>or higher, please notify me immediately.</em>
-
-<p>
-Exceptionally, a quote or blockquote containing a footnote may cross
-a page or column. When this happens, the footnote marker may not be
-correct for its position relative to other footnotes on the page, and
-the footnote itself may appear on the wrong page or at the bottom of
-the wrong column. When this happens, study your output to determine
-the precise point at which the quote breaks (or at which you want
-it to break), and add <code>.BREAK_QUOTE</code> on a line by itself
-afterwards. No other intervention is required, and the footnote(s)
-will be marked correctly and appear on the correct page.
-<p>
-<strong>BREAK_QUOTE</strong> may be used with both quotes and
-blockquotes, and hence is aliased as <strong>BREAK_BLOCKQUOTE,
-BREAK_CITATION</strong> and <strong>BREAK_CITE</strong>.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="BLOCKQUOTE_INTRO"><h2><u>Blockquotes (cited passages)</u></h2></a>
-<ul>
- <li><a href="#BLOCKQUOTE">Tag: BLOCKQUOTE (aliases: CITE, CITATION)</a>
- <li><a href="#BLOCKQUOTE_CONTROL">BLOCKQUOTE control macros</a>
-</ul>
-<p>
-<strong>BLOCKQUOTES</strong> are used to cite passages from another
-author's work. So that they stand out well from
-<a href="definitions.html#TERMS_RUNNING">running text</a>,
-<strong>mom</strong> indents them from both the left and right margins
-and sets them in a different point size
-<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPESET</a>
-only).
-<a href="definitions.html#TERMS_OUTPUTLINE">Output lines</a>
-are
-<a href="definitions.html#TERMS_FILLED">filled</a>,
-and, by default,
-<a href="definitions.html#TERMS_QUAD">quadded</a>
-left.
-<p>
-Besides indenting blockquotes, <strong>mom</strong> further sets them
-off from running text with a small amount of vertical whitespace top
-and bottom. (See
-<a href="#QUOTE_SPACING">above</a>
-for a complete explanation of how this is managed, and how to control it.
-Be sure to read the section <strong>Version 1.3</strong>.)
-<p>
-
-<!---BLOCKQUOTE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="BLOCKQUOTE">
- <nobr>Macro: <strong>BLOCKQUOTE</strong> toggle</nobr>
- <br>
- Aliases: <strong>CITE, CITATION</strong>
-</a>
-
-<p>
-<strong>BLOCKQUOTE</strong> is a toggle macro. To begin a
-cited passage, invoke the tag with no argument, then type in your quote.
-When you're finished, invoke <strong>BLOCKQUOTE</strong> with any
-argument (e.g. OFF, END, X, Q...) to turn it off. Example:
-<p>
-<pre>
- .BLOCKQUOTE
- Redefining the role of the United States from enablers to keep
- the peace to enablers to keep the peace from peacekeepers is
- going to be an assignment.
- .RIGHT
- \(emGeorge W. Bush
- .BLOCKQUOTE END
-</pre>
-
-If the cited passage runs to more than one paragraph, you MUST
-introduce each paragraph -- <em>including the first!</em> --
-with
-<a href="#PP">PP</a>.
-<p>
-<strong>NOTE:</strong> The aliases <strong>CITE</strong>
-and <strong>CITATION</strong> may be used in place of the
-<strong>BLOCKQUOTE</strong> tag, as well as in any of the control
-macros that begin with <strong>BLOCKQUOTE_</strong> or end with
-<strong>_BLOCKQUOTE</strong>.
-
-<a name="BLOCKQUOTE_CONTROL"><h3><u>Blockquote control macros</u></h3></a>
-<ol>
- <li><a href="#BLOCKQUOTE_GENERAL">Family/font/size/leading/colour/quad/indent</a>
- <li><a href="#ALWAYS_FULLSPACE_QUOTES">Spacing above and below (typeset only)</a>
- <li><a href="#BREAK_QUOTE">Manually break a footnoted blockquote that crosses pages/columns</a>
-</ol>
-<p>
-<a name="BLOCKQUOTE_GENERAL"><h3><u>1. Family/font/size/colour/quad/indent</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.BLOCKQUOTE_FAMILY default = prevailing document family; default is Times Roman
-.BLOCKQUOTE_FONT default = roman
-.BLOCKQUOTE_SIZE default = -1 (point)
-.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs
-.BLOCKQUOTE_COLOR default = black
-.BLOCKQUOTE_QUAD default = left
-.BLOCKQUOTE_INDENT default = paragraph indent x 3 (typeset); x 2 (typewrite)</a>
- (note that this macro also sets the left indent for quotes)
-</pre>
-
-<a name="ALWAYS_FULLSPACE_QUOTES"><h3><u>2. Spacing above and below -- ALWAYS_FULLSPACE_QUOTES (typeset only)</u></h3></a>
-<p>
-If you'd like <strong>mom</strong> always to put a full linespace above
-and below blockquotes, invoke <strong>.ALWAYS_FULLSPACE_QUOTES</strong>
-with no argument. If you wish to restore <strong>mom</strong>'s
-default behaviour regarding the spacing of blockquotes (see
-<a href="#QUOTE_SPACING">above</a>),
-invoke the macro with any argument (<strong>OFF, QUIT, END,
-X</strong>...).
-<p>
-<strong>NOTE:</strong> This macro also sets <strong>mom</strong>'s
-spacing policy for
-<a href="#QUOTE_INTRO">quotes</a>.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="LIST_INTRO"><h2><u>Nested lists</u></h2></a>
-<ul>
- <li><a href="#LIST">Tag: LIST</a>
- <li><a href="#ITEM">Tag: ITEM</a>
- <li><a href="#LIST_CONTROL">LIST control macros</a>
-</ul>
-<p>
-Lists are points or items of interest or importance that are
-separated from
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-by enumerators. Some typical enumerators are
-<a href="definitions.html#TERMS_EM">en-dashes</a>,
-<a href="definitions.html#TERMS_BULLET">bullets</a>,
-digits and letters.
-<p>
-Setting lists with <strong>mom</strong> is easy. First, you
-initialize a list with the <strong>LIST</strong> macro. Then, for
-every item in the list, you invoke the macro, <strong>ITEM</strong>,
-followed by the text of the item. When a list is finished, you
-exit the list with <strong>LIST OFF</strong> (or
-<strong>QUIT</strong>, <strong>END</strong>, <strong>BACK</strong>,
-etc.)
-<p>
-By default <strong>mom</strong> starts each list with the enumerator
-flush with the left margin of running text that comes before it,
-like this:
-<p>
-<pre>
- My daily schedule needs organizing. I can't
- seem to get everything done I want.
- o an hour's worth of exercise
- o time to prepare at least one healthy
- meal per day
- o reading time
- o work on mom
- o writing
- - changes from publisher
- - current novel
- o a couple of hours at the piano
-</pre>
-
-In other words, <strong>mom</strong> does not, by default, indent
-entire lists. Indenting a list is controlled by the macro,
-<a href="#SHIFT_LIST">SHIFT_LIST</a>.
-(This is a design decision; there are too many instances where a
-default indent is not desirable.) Equally, <strong>mom</strong>
-does not add any extra space above or below lists.
-<p>
-Lists can be nested (as in the example above). In other words, you
-can set lists within lists, each with an enumerator (and possibly,
-indent) of your choosing. In nested lists, each invocation of
-<strong>LIST OFF</strong> (you may prefer to use <strong>LIST
-BACK</strong>) takes you back to the previous depth (or
-level) of list, with that list's enumerator and indent intact. The
-final <strong>LIST OFF</strong> exits lists completely and returns
-you to the left margin of running text.
-<p>
-Finally, lists can be used in documents created with either the
-document processing macros or just the typesetting macros.
-<p>
-
-<!---LIST--->
-
-<hr width="66%" align="left">
-<p>
-<a name="LIST">
- <nobr>Macro: <strong>LIST</strong> [ BULLET | DASH | DIGIT | ALPHA | alpha | ROMAN&lt;n&gt; | roman&lt;n&gt; | USER &lt;string&gt;] [ &lt;separator&gt; | &lt;user-defined enumerator&gt; ] [ &lt;prefix&gt; ] [ &lt;off&gt; ]</a></nobr>
-<p>
-Invoked by itself (i.e. with no argument), <strong>LIST</strong>
-initializes a list (with bullets as the default enumerator).
-Afterwards, each block of input text preceded by
-<a href="#ITEM">.ITEM</a>,
-on a line by itself, is treated as a list item.
-<p>
-<strong>NOTE:</strong> Every time you invoke <strong>LIST</strong>
-to start a list (as opposed to
-<a href="#LIST_EXIT">exiting one</a>),
-you must supply an enumerator (and optionally, a separator) for the
-list, unless you want <strong>mom</strong>'s default enumerator,
-which is a bullet. Within nested lists, <strong>mom</strong>
-stores the enumerator, separator and indent for any list you return
-<em>backwards</em> to (i.e. with <strong>LIST OFF</strong>), but
-does not store any information for lists you move <em>forward</em>
-to.
-<br>
-
-<h3><u>The first argument--enumerator style</u></h3>
-<p>
-The optional arguments <strong>BULLET</strong>,
-<strong>DASH</strong>, <strong>DIGIT</strong> (for
-Arabic numerals), <strong>ALPHA</strong> (for uppercase
-letters), <strong>alpha</strong> (for lowercase letters),
-<strong>ROMAN&lt;n&gt;</strong> (for uppercase roman numerals),
-<strong>roman&lt;n&gt;</strong> (for lowercase roman numerals) tell
-<strong>mom</strong> what kind of enumerator to use for a given
-list.
-<p>
-The arguments, <strong>ROMAN&lt;n&gt;</strong> and
-<strong>roman&lt;n&gt;</strong>, are special. You must append to
-them a digit (arabic, e.g. "1" or "9" or "17") saying how many items
-a particular roman-numeralled <strong>LIST</strong> is going to
-have. <strong>Mom</strong> requires this information in order to
-align roman numerals sensibly, and will abort--with a message--if
-you don't provide it.
-<p>
-A roman-numeralled list containing, say, five items, would be set
-up like this:
-<p>
-<pre>
- .LIST roman5 producing i) Item 1.
- .ITEM ii) Item 2.
- Item 1. iii) Item 3.
- .ITEM iv) Item 4.
- Item 2. v) Item 5.
- .ITEM
- Item 3
- .ITEM
- Item 4
- .ITEM
- Item 5
-</pre>
-
-<p>
-The argument, <strong>USER</strong>, lets you make up your own
-enumerator, and must be followed by a second argument: what you'd
-like the enumerator to look like. For example, if you want a list
-enumerated with
-<strong>=&gt;</strong>,
-<p>
-<pre>
- .LIST USER =&gt;
- .ITEM
- A list item
-</pre>
-
-will produce
-<p>
-<pre>
- =&gt; A list item
-</pre>
-
-<strong>Please note:</strong> if the argument to
-<strong>USER</strong> contains spaces, you must enclose the argument
-in double quotes.
-
-<br>
-
-<h3><u>The second argument--separator style</u></h3>
-<p>
-If you choose <strong>DIGIT</strong>, <strong>ALPHA</strong>,
-<strong>alpha</strong>, <strong>ROMAN&lt;n&gt;</strong>, or
-<strong>roman&lt;n&gt;</strong>, you may enter the optional
-argument, <strong>separator</strong>, to say what kind of separator
-you want after the enumerator. The separator can be anything you
-like. The default for <strong>DIGIT</strong> is a period (dot),
-like this:
-<p>
-<pre>
- 1. A list item
-</pre>
-
-The default separator for <strong>ALPHA</strong>,
-<strong>alpha</strong>, <strong>ROMAN&lt;n&gt;</strong> and
-<strong>roman&lt;n&gt;</strong> is a right parenthesis, like this:
-<p>
-<pre>
- a) An alpha-ed list item
- b) A second alpha-ed list item
-
- or
-
- i) A roman-ed list item
- ii) A second roman-ed item
-</pre>
-
-If you'd prefer, say, digits with right-parenthesis separators
-instead of the default period, you'd do
-<p>
-<pre>
- .LIST DIGIT )
- .ITEM
- A numberd list item
-</pre>
-
-which would produce
-<p>
-<pre>
- 1) A numbered list item
-</pre>
-
-<strong>Please note: BULLET</strong>, <strong>DASH</strong> and
-<strong>USER</strong> do not take a separator.
-<br>
-
-<h3><u>The third argument--prefix style</u></h3>
-<p>
-Additionally, you may give a prefix (i.e. a character that comes
-<em>before</em> the enumerator) when your enumerator style for a
-particular list is <strong>DIGIT</strong>, <strong>ALPHA</strong>,
-<strong>alpha</strong>, <strong>ROMAN&lt;n&gt;</strong>
-or <strong>roman&lt;n&gt;</strong>. In the arguments to
-<strong>LIST</strong>, the prefix comes <em>after</em> the
-separator, which may seem counter-intuitive, so please be careful.
-<p>
-A prefix can be anything you like. Most likely, you'll want some
-kind of open-bracket, such as a left parenthesis. If, for example,
-you want a <strong>DIGIT</strong> list with the numbers enclosed in
-parentheses, you'd enter
-<p>
-<pre>
- .LIST DIGIT ) (
- .ITEM
- The first item on the list.
- .ITEM
- The second item on the list.
-</pre>
-
-which would produce
-<p>
-<pre>
- (1) The first item on the list.
- (2) The second item on the list.
-</pre>
-
-<strong>Please note: BULLET</strong>, <strong>DASH</strong> and
-<strong>USER</strong> do not take a prefix.
-<br>
-
-<a name="LIST_EXIT"></a>
-<h3><u>Exiting lists--.LIST OFF/BACK or .QUIT_LISTS</u></h3>
-<p>
-Any single argument to <strong>LIST</strong> other
-than <strong>BULLET</strong>, <strong>DASH</strong>,
-<strong>DIGIT</strong>, <strong>ALPHA</strong>,
-<strong>alpha</strong>, <strong>ROMAN&lt;n&gt;</strong>,
-<strong>roman&lt;n&gt;</strong> or <strong>USER</strong> (e.g.
-<strong>LIST</strong> <kbd>OFF</kbd> or <strong>LIST</strong>
-<kbd>BACK</kbd>) takes you out of the current list.
-<p>
-If you are at the first list-level (or "list-depth"),
-<strong>mom</strong> returns you to the left margin of running text.
-Any indents that were in effect prior to setting the list are fully
-restored.
-<p>
-If you are in a nested list, <strong>mom</strong> moves you
-<em>back one list-level</em> (i.e. does not take you out of the
-list structure) and restores the enumerator, separator and indent
-appropriate to that level.
-<p>
-Each invocation of <strong>LIST</strong> should be be matched by
-a corresponding <strong>LIST OFF</strong> in order to fully exit
-lists. For example,
-<p>
-<pre>
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
- o List item in level 1
- o List item in level 1
- - List item in level 2
- - List item in level 2
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
-</pre>
-
-is created like this:
-<p>
-<pre>
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
- .LIST BULLET
- .ITEM
- List item in level 1
- .ITEM
- List item in level 1
- .LIST DASH
- .ITEM
- List item in level 2
- .ITEM
- List item in level 2
- .LIST OFF \" Turn level 2 list off
- .LIST OFF \" Turn level 1 list off
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
-</pre>
-
-Alternatively, you may use the single-purpose macro,
-<strong>QUIT_LISTS</strong>, to get yourself out of a list
-structure. In the example above, the two <kbd>.LIST OFF</kbd>
-lines could be replaced with a single <kbd>.QUIT_LISTS</kbd>.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="ITEM">
- Macro: <strong>ITEM</strong>
-<p>
-After you've initialized a list with
-<a href="#LIST">LIST</a>,
-precede each item you want in the list with <strong>ITEM</strong>.
-<strong>Mom</strong> takes care of everything else with respect to
-setting the item appropriate to the list you're in.
-<p>
-In document processing, it is legal to have list items that contain
-multiple paragraphs. Simply issue a
-<a href="#PP">PP</a>
-request for each paragraph <em>following</em> the first item.
-I.e., don't do this:
-<p>
-<pre>
- .ITEM
- .PP
- Some text...
- .PP
- A second paragraph of text
-</pre>
-
-but rather
-<p>
-<pre>
- .ITEM
- Some text...
- .PP
- A second paragraph of text
-</pre>
-<hr width="33%" align="left">
-
-<a name="LIST_CONTROL"><h3><u>List control macros</u></h3></a>
-<ol>
- <li><a href="#SHIFT_LIST">Indenting lists (SHIFT_LIST)</a>
- <li><a href="#RESET_LIST">Resetting an initialized list's enumerator (RESET_LIST)</a>
- <li><a href="#PAD_LIST_DIGITS">Padding digit enumerators (PAD_LIST_DIGITS)</a>
-</ol>
-
-<a name="SHIFT_LIST"><h3><u>1. Indenting lists -- SHIFT_LIST</u></h3></a>
-<p>
-If you want a list to be indented to the right of running text, or
-indented to the right of a current list, use the macro
-<strong>SHIFT_LIST</strong> immediately after
-<a href="#LIST">LIST</a>.
-<strong>SHIFT_LIST</strong> takes just one argument: the amount by
-which you want the list shifted to the right. The argument requires
-a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-<p>
-<strong>SHIFT_LIST</strong> applies <em>only</em> to the list you
-just initialized with <strong>LIST</strong>. It does not carry
-over from one invocation of <strong>LIST</strong> to the next.
-However, the indent remains in effect when you <em>return</em> to a
-list level in a nested list.
-<p>
-For example, if you want a 2-level list, with each list indented to
-the right by 18
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
-<p>
-<pre>
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
- .LIST \" List 1
- .SHIFT_LIST 18p \" Indent 18 points right of running text
- .ITEM
- List 1 item
- .ITEM
- List 1 item
- .LIST DASH \" List 2
- .SHIFT_LIST 18p \" Indent 18 points right of list 1
- .ITEM
- List 2 item
- .ITEM
- List 2 item
- .LIST OFF \" Move back to list 1
- .ITEM
- List 1 item
- .ITEM
- List 1 item
- .LIST OFF \" Exit lists
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
-</pre>
-
-produces (approximately)
-<p>
-<pre>
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
- o List 1 item
- o List 1 item
- - List 2 item
- - List 2 item
- o List 1 item
- o List 1 item
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore.
-</pre>
-
-<a name="RESET_LIST"><h3><u>2. Resetting an initialized list's enumerator -- RESET_LIST</u></h3></a>
-<p>
-In nested lists, if your choice of list enumerator for a given
-level of list is <strong>DIGIT</strong>, <strong>ALPHA</strong>,
-<strong>alpha</strong>, <strong>ROMAN</strong> or
-<strong>roman</strong>, you may sometimes want to reset the list's
-enumerator when you return to that list. Consider the following:
-<p>
-<pre>
- Things to do religiously each and every day:
- 1. Take care of the dog
- a) walk every day
- b) brush once a week
- - trim around the eyes every fourth brushing
- - don't forget to check nails
- 2. Feed the cat
- a) soft food on Mon., Wed. and Fri.
- b) dry food on Tues., Thurs. and Sat.
- c) canned tuna on Sunday
-</pre>
-
-Normally, within a nested list, when you return to an
-incrementally-enumerated list, the enumerator continues incrementing
-from where it left off. That means, in the example above, the
-normal state of affairs for the alpha'ed list under &quot;2. Feed
-the cat&quot; would be c), d) and e). The solution, in such a case,
-is simply to reset the enumerator --before <strong>ITEM</strong>!--
-with the macro, <strong>RESET_LIST</strong>.
-<p>
-By default, with no argument, <strong>RESET_LIST</strong> resets the
-enumerator to 1, A, a, I or i depending on the style of enumerator.
-You may, if you wish, pass <strong>RESET_LISTS</strong> a numeric
-argument representing the starting enumerator for the reset (if
-different from "1"), although I can't at present think of a use for
-this feature.
-<p>
-<a name="PAD_LIST_DIGITS"><h3><u>3. Padding digit enumerators (PAD_LIST_DIGITS)</a></u></h3></a>
-<p>
-<strong><u>Arabic digits</u></strong>
-<p>
-When your choice of enumerators is <strong>DIGIT</strong> AND the
-number of items in the list exceeds nine (9), you have to make a
-design decision: should <strong>mom</strong> leave room for the
-extra numeral in two-numeral digits to the right or the left of
-the single-numeral digits?
-<p>
-If you want the extra space to the right, invoke the macro,
-<strong>.PAD_LIST_DIGITS</strong> (with no argument), after
-<strong>LIST</strong> and before <strong>ITEM</strong>. This will
-produce something like
-<p>
-<pre>
- 8. List item
- 9. List item
- 10. List item
-</pre>
-
-If you want the extra space to the left, invoke
-<strong>PAD_LIST_DIGITS</strong> with the single argument,
-<strong>LEFT</strong>, which will produce
-<p>
-<pre>
- 8. List item
- 9. List item
- 10. List item
-</pre>
-
-Of course, if the number of items in the list is less than ten
-(10), there's no need for <strong>PAD_LIST_DIGITS</strong>.
-<p>
-<strong><u>Roman numerals</u></strong>
-<p>
-By default, <strong>mom</strong> sets roman numerals in lists flush
-left. The <strong>&lt;n&gt;</strong> argument appended to
-<strong>ROMAN&lt;n&gt;</strong> or <strong>roman&lt;n&gt;</strong>
-allows her to calculate how much space to put after each numeral in
-order to ensure that the text of items lines up properly.
-<p>
-If you'd like the roman numerals to line up flush right (i.e. be
-padded "left"), simply invoke <strong>PAD_LIST_DIGITS</strong>
-<kbd>LEFT</kbd> after <strong>LIST</strong> <kbd>ROMAN&lt;n&gt;</kbd>
-or <strong>LIST</strong> <kbd>roman&lt;n&gt;</kbd> amd before
-<strong>ITEM</strong>.
-<p>
-<hr>
-
-<!---LINE NUMBERING--->
-
-<a name="NUMBER_LINES_INTRO"><h2><u>Line numbering</u></h2></a>
-<ul>
- <li><a href="#NUMBER_LINES">Macro: NUMBER_LINES</a>
- <li><a href="#NUMBER_LINES_CONTROL">Control macros</a> (for quotes and blockquotes)
-</ul>
-
-<p>
-<strong>Mom</strong>'s line-numbering capabilities are not as flexible
-as most of her other document processing macros. The reason is
-that groff's underlying line-numbering
-<a href="definitions.html#TERMS_PRIMITIVEX">primitive</a>,
-<kbd>.nm</kbd>, is, well...primtive. It is not possible, for
-example, to select a particular family or font for use exclusively
-with line numbers. Nor is it possible to set the
-<a href="definitions.html#TERMS_GUTTER">gutter</a>
-using any
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-other than the
-<a href="definitions.html#TERMS_FIGURESPACE">figure space</a>.
-<p>
-That said, when you turn line-numbering on, <strong>mom</strong>,
-by default
-<br>
-<a name="NUMBER_LINES_DEFAULTS"></a>
-<ul>
- <li>numbers every line of paragraph text; line-numbering is
- suspended for all other document processing tags (like
- docheaders, epigraphs, heads, subheads, etc.) and special
- pages (covers, endotes, bibliographies, etc.); be aware,
- though, that if you turn
- <a href="definitions.html#TERMS_DOCHEADER">docheaders</a>
- off (with
- <a href="docprocessing.html#DOCHEADER">DOCHEADER</a> <strong>OFF</strong>)
- and create your own docheader, <strong>mom</strong>
- <em>will</em> line-number your custom docheader
- <li>doesn't touch your line length; line numbers are hung
- outside your current left margin (as set with
- <a href="typesetting.html#L_MARGIN">L_MARGIN</a>,
- <a href="typesetting.html#PAGE">PAGE</a>
- or
- <a href="docprocessing.html#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>),
- regardless of any indents that may be active
- <li>separates line numbers from running text by two
- <a href="definitions.html#TERMS_FIGURESPACE">figure spaces</a>.
-</ul>
-<p>
-Line numbering may be enabled and disabled for
-<a href="#QUOTE">QUOTE</a>
-and/or
-<a href="#BLOCKQUOTE">BLOCKQUOTE</a>
-in one of three styles. See
-<a href="#NUMBER_LINES_CONTROL">Line numbering control macros for quotes and blockquotes</a>.
-<p>
-The first time you invoke
-<a href="#NUMBER_LINES">NUMBER_LINES</a>
-you must, at a minimum, tell it what line number you want the
-<em>next</em>
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
-to have. Optional arguments allow you to state which lines should
-be numbered (e.g. every five or every ten lines), and the gutter to
-place between line numbers and
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-<p>
-Subsequently, you can turn line-numbering off, either permanently,
-or resume it later at a place of your choosing. When you
-resume line-numbering, the line numbers pick up where you left off.
-<p>
-
-<!---NUMBER_LINES--->
-
-<hr width="66%" align="left">
-<p>
-<nobr>
-<a name="NUMBER_LINES">
- <nobr>Macro: <strong>NUMBER_LINES</strong> &lt;start number&gt; [ &lt;which lines to number&gt; [ &lt;gutter&gt; ] ]</nobr>
- <br>
- <nobr>Macro: <strong>NUMBER_LINES</strong> &lt;anything&gt; | RESUME</nobr>
- <br>
-</a>
-</nobr>
-
-<p>
-<strong>NUMBER_LINES</strong> does what it says: prints line
-numbers, to the left of
-<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a>
-of paragraph text. One of the chief reasons for wanting numbered
-lines is in order to identify footnotes or endnotes by line number
-instead of by a marker in the text. (See
-<a href="#FOOTNOTE_LINENUMBERS">.FOOTNOTE_MARKER_STYLE LINE</a>
-for instructions on line-numbered footnotes, and
-<a href="#ENDNOTE_MARKER_STYLE">.ENDNOTE_MARKER_STYLE</a>
-for instructions on line-numbered endnotes.)
-<p>
-Every time you invoke <strong>NUMBER_LINES</strong>, unless you are
-using the arguments <strong>OFF</strong> (<strong>QUIT</strong>,
-<strong>END</strong>, <strong>X</strong>, etc.) or
-<strong>RESUME</strong> you must, at a minimum, pass it one
-argument, namely the number (digit) you want the <em>next</em>
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
-to have. For example,
-<pre>
- .NUMBER_LINES 3
-</pre>
-
-will prepend the number, 3, to the next output line.
-<p>
-Normally, of course, you will number lines of text starting at 1.
-All you have to do in that case is ensure that
-<pre>
- .NUMBER_LINES 1
-</pre>
-
-precedes your first line of input text, which will also be the
-first line of output text.
-<p>
-You can alter <strong>mom</strong>'s default line numbering
-behaviour (see
-<a href="#NUMBER_LINES_DEFAULT">above</a>)
-with the optional arguments <strong>&lt;which lines to
-number&gt;</strong> and <strong>&lt;gutter&gt;</strong>.
-<p>
-<strong>&lt;which lines to number&gt;</strong> instructs
-<strong>NUMBER_LINES</strong> to number only certain lines, e.g.
-every two lines or every five lines. If you want, say, only every
-five lines to have a prepended number, you'd do
-<pre>
- .NUMBER_LINES 1 5
-</pre>
-
-<strong>GOTCHA!</strong> The argument to <strong>&lt;which
-lines to number&gt;</strong> only numbers those lines that are
-multiples of the argument. Hence, in the above example, line
-number "1" will <em>not</em> be numbered, since "1" is not a
-multiple of "5".
-<p>
-If you wanted line number "1" to be numbered, you'd have to invoke
-<kbd>.NUMBER_LINES 1 1</kbd> before the first output line, then
-study your <em>output</em> copy and determine where best to insert
-the following in your <em>input</em> copy:
-<pre>
- .NUMBER_LINES \n(ln 5
-</pre>
-
-(The escape, <kbd>\n(ln</kbd>, ensures that
-<strong>NUMBER_LINES</strong> automatically supplies the correct
-value for the first argument, <strong>&lt;start
-number&gt;</strong>.)
-<p>
-Following this recipe, line number 1 will be numbered; subsequently,
-only line numbers that are multiples of 5 will be numbered. A
-little experimentation may be required to determine the best place
-for it.
-<p>
-The optional argument, <strong>&lt;gutter&gt;</strong>, tells
-<strong>mom</strong> how much space to put between the line numbers
-and the running text.
-<p>
-<strong>Note</strong>: when giving a value for
-<strong>&lt;gutter&gt;</strong>, you cannot skip the
-<strong>&lt;which lines to number&gt;</strong> argument. Either
-fill in the desired value, or use two double-quotes
-(<strong>""</strong>) to have <strong>mom</strong> use the value
-formerly in effect.
-<p>
-<strong>&lt;gutter&gt;</strong> does not require (or even accept) a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-The argument you pass to it is the number of
-<a href="definitions.html#TERMS_FIGURESPACE">figure spaces</a>
-you want between line numbers and running text.
-<strong>Mom</strong>'s default gutter is two figure spaces. If
-you'd like a wider gutter, say, four figures spaces, you'd do
-<pre>
- .NUMBER_LINES 1 1 4
- |
- +-- Notice you *must* supply a value
- for the 2nd argument in order to supply
- a value for the 3rd.
-</pre>
-
-<p>
-After you've set up line-numbering, <strong>NUMBER_LINES</strong>
-can be used to control line numbering.
-<br>
-<h3><u>Line-numbering control</u></h3>
-<p>
-<strong>NUMBER_LINES OFF</strong> (or <strong>END, QUIT, X,</strong> etc.)
-turns line-numbering off.
-<p>
-Sometimes, you merely want to suspend line-numbering. In that case,
-turn line numbering off with <strong>NUMBER_LINES OFF</strong>.
-Later, when you want it to resume, enter
-<pre>
- .NUMBER_LINES RESUME
-</pre>
-
-Line numbering will resume exactly where it left off. If this is
-not what you want--say you want to reset the line number to "1"--simply
-invoke <strong>NUMBER_LINES</strong> with whatever arguments
-are needed for the desired result.
-<p>
-<strong>Extra Notes:</strong>
-<br>
-<ol>
- <li>In document processing, you may invoke <strong>NUMBER_LINES</strong>
- either before or after <strong>START</strong>.
- <strong>Mom</strong> doesn't care.
- <li>If you're collating documents with
- <a href="rectoverso.html#COLLATE">COLLATE</a>,
- you should re-invoke, at a minimum, <kbd>.NUMBER_LINES
- 1</kbd> for each collated document, in order to ensure that
- each begins with the number "1" prepended to the first line
- (unless, of course, that is not what you want).
- <li>Occasionally, you may want to change the current gutter
- between line numbers and running text without knowing
- what the next output line number should be. Since
- <strong>NUMBER_LINES</strong> requires this number
- as its first argument, in such instances, pass
- <strong>NUMBER_LINES</strong> as its first argument the
- escape <kbd>\n(ln</kbd>.
- <p>
- For example, if you were numbering every 5 lines with a
- gutter of 2 (figure spaces) and you needed to change the
- gutter to 4 (figures spaces),
- <p>
- <kbd>&nbsp;&nbsp;&nbsp;&nbsp;.NUMBER_LINES \n(ln 5 4</kbd>
- <p>
- would do the trick.
- <li>If you're using margin notes in a document, be sure to set
- the gutter for margin notes wide enough to allow room for
- the line numbers.
- <li><strong>Mom</strong> (groff, actually), only numbers lines
- <em>to the left of text</em>. For aesthetic reason,
- therefore, the use of line numbering when setting a document
- in columns is discouraged. However, should you wish to
- number lines when setting in columns, make sure the
- <a href="definitions.html#TERMS_GUTTER">gutter(s)</a>
- between columns is wide enough to leave room for the
- numbers.
-</ol>
-<hr width="33%" align="left">
-
-<a name="NUMBER_LINES_CONTROL"><h3><u>Line numbering control macros for QUOTE and BLOCKQUOTE</u></h3></a>
-<ol>
- <li><a href="#NUMBER_QUOTE_LINES">NUMBER_QUOTE_LINES</a>
- <li><a href="#NUMBER_BLOCKQUOTE_LINES">NUMBER_BLOCKQUOTE_LINES</a>
- <li><a href="#NUMBER_LINES_QUOTES">Setting up line numbering in quotes and blockquotes on a case by case basis</a>
-</ol>
-
-<a name="NUMBER_QUOTE_LINES"><h3><u>1. NUMBER_QUOTE_LINES</u></h3></a>
-<p>
-If you'd like <strong>mom</strong> to number lines of output text
-in a
-<a href="#QUOTE">QUOTE</a>
-as part of the same order and sequence as paragraph text, simply
-invoke <strong>NUMBER_QUOTE_LINES</strong> by itself.
-<p>
-There is a catch with numbering quotes, though. Owing to groff's
-restriction of accepting only the figure space as the line number
-gutter's unit of measure, it is not possible for line numbers
-in quotes to hang outside a document's overall left margin and
-be reliably flush with the line numbers of paragraph text.
-Conseqently, line numbers in quotes hang to the left of the quote,
-separated from the quote by the <strong>&lt;gutter&gt;</strong>
-argument.
-<p>
-If you'd like to change the gutter for quotes line-numbered in
-this way, invoke <strong>NUMBER_QUOTE_LINES</strong> with a digit
-representing the number of
-<a href="definitions.html#TERMS_FIGURESPACE">figure spaces</a>
-you'd like between the line numbers and the quoted text, like this:
-<pre>
- .NUMBER_QUOTE_LINES 1
-</pre>
-
-With the above, line numbers in quotes (and only quotes) will have
-a gutter of 1 figure space.
-<p>
-If you are using "line numbering style" for footnotes
-(<a href="#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a> <strong>LINE</strong>),
-you may not wish to have quotes <em>visibly</em> line-numbered, but
-still want to embed footnotes inside quotes. In order to do that,
-<strong>mom</strong> allows you to say <strong>NUMBER_QUOTE_LINES
-SILENT</strong>.
-<p>
-When you invoke <strong>NUMBER_QUOTE_LINES</strong>
-<kbd>SILENT</kbd>, <strong>mom</strong> continues to increment line
-numbers while quotes are being output, but they won't appear in the
-output copy. (Compare this with <strong>mom</strong>'s default
-behaviour of <em>suspending</em> incrementing of line numbers
-during the output of quotes.) This allows you to embed
-line-numbered footnotes inside quotes and have the line number
-"label" in the footnote come out sensibly.
-<p>
-Once having turned <strong>NUMBER_QUOTE_LINES</strong> on, you
-may disable it with <strong>NUMBER_QUOTE_LINES OFF</strong> (or
-<strong>QUIT</strong>, <strong>END</strong>, <strong>X</strong>,
-etc).
-<p>
-
-<a name="NUMBER_BLOCKQUOTE_LINES"><h3><u>2. NUMBER_BLOCKQUOTE_LINES</u></h3></a>
-<p>
-If you'd like <strong>mom</strong> to number lines of output text
-in a
-<a href="#QUOTE">BLOCKQUOTE</a>
-as part of the same order and sequence as paragraph text, simply
-invoke <strong>NUMBER_BLOCKQUOTE_LINES</strong> by itself.
-<p>
-There is a catch with numbering blockquotes, though. Owing to
-groff's restriction of accepting only the figure space as the
-line number gutter's unit of measure, it is not possible for line
-numbers in blockquotes to hang outside a document's overall left
-margin and be reliably flush with the line numbers of paragraph
-text. Conseqently, line numbers in blockquotes hang to the
-left of the blockquote, separated from the blockquote by the
-<strong>&lt;gutter&gt;</strong> argument.
-<p>
-If you'd like to change the gutter for blockquotes line-numbered in
-this way, invoke <strong>NUMBER_BLOCKQUOTE_LINES</strong> with a digit
-representing the number of
-<a href="definitions.html#TERMS_FIGURESPACE">figure spaces</a>
-you'd like between the line numbers and the blockquoted text, like
-this:
-<pre>
- .NUMBER_BLOCKQUOTE_LINES 1
-</pre>
-
-With the above, line numbers in blockquotes (and only blockquotes)
-will have a gutter of 1 figure space.
-<p>
-If you are using "line numbering style" for footnotes
-(<a href="#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a> <strong>LINE</strong>),
-you may not wish to have blockquotes <em>visibly</em> line-numbered,
-but still want to embed footnotes inside blockquotes. In
-order to do that, <strong>mom</strong> allows you to say
-<strong>NUMBER_BLOCKQUOTE_LINES SILENT</strong>.
-<p>
-When you invoke <strong>NUMBER_BLOCKQUOTE_LINES</strong>
-<kbd>SILENT</kbd>, <strong>mom</strong> continues to increment line
-numbers while blockquotes are being output, but they won't appear in
-the output copy. (Compare this with <strong>mom</strong>'s default
-behaviour of <em>suspending</em> incrementing of line numbers during
-the output of blockquotes.) This allows you to embed line-numbered
-footnotes inside blockquotes and have the line number "label" in the
-footnote come out sensibly.
-<p>
-Once having turned <strong>NUMBER_BLOCKQUOTE_LINES</strong> on, you
-may disable it with <strong>NUMBER_BLOCKQUOTE_LINES OFF</strong> (or
-<strong>QUIT</strong>, <strong>END</strong>, <strong>X</strong>,
-etc).
-<p>
-
-<a name="NUMBER_LINES_QUOTES"><h3><u>3. Setting up line numbering in quotes and blockquotes on a case by case basis</u></h3></a>
-<p>
-Sometimes, you may want quotes or blockquotes to have a different
-line numbering scheme from the one used in the rest of the
-document. Or, you may want line numbering enabled only inside a
-particular quote or blockquote. A common reason for this would be
-if you were using the
-<a href="#QUOTE">QUOTE</a>
-macro to insert lines of programming code into a document. (See
-<a href="#QUOTE_TIP">here</a>
-for suggestions about including programming code snippets in
-documents.)
-<p>
-To enable line numbering within quotes or blockquotes on a case by
-case basis, simply invoke <strong>NUMBER_LINES</strong>, with the
-arguments you need, immediately after entering <strong>QUOTE</strong>
-or <strong>BLOCKQUOTE</strong>. (<strong>NUMBER_QUOTE_LINES</strong>
-and/or <strong>NUMBER_BLOCKQUOTE_LINES</strong> should be turned
-off if you're doing this.) The quote or blockquote will then be
-line-numbered according to your specifications: the starting line
-number of the quote or blockquote will be the one you give as a
-first argument to <strong>NUMBER_LINES</strong>; which lines to
-number will be the value you pass to <strong>&lt;which lines to
-number&gt;</strong> (defaults to "1"); line numbers will hang
-to the left of the quote or blockquote, separated from the quote or
-blockquote by <strong>&lt;gutter&gt;</strong> (defaults to "2").
-<p>
-As soon as <strong>QUOTE</strong> or <strong>BLOCKQUOTE</strong> is
-turned off, line numbering ceases, not only with respect to
-subsequent paragraph text (if they are not being line-numbered),
-but also for any subsequent invocation of <strong>QUOTE</strong> or
-<strong>BLOCKQUOTE</strong>. In other words, you must re-enable
-quote or blockquote line-numbering inside every instance of
-<strong>QUOTE</strong> or <strong>BLOCKQUOTE</strong> when
-line-numbering either of them on a case by case basis.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="FOOTNOTE_INTRO"><h2><u>Footnotes</u></h2></a>
-<ul>
- <li><a href="#FOOTNOTE_BEHAVIOUR">Footnote behaviour</a>
- <ul>
- <li><a href="#FN_AND_PUNCT">Footnote markers and punctuation in the running text</a>
- </ul>
- <li><a href="#FOOTNOTE">Tag: FOOTNOTE</a>
- <li><a href="#FOOTNOTE_CONTROL">FOOTNOTE control macros</a>
-</ul>
-
-<p>
-For something so complex behind the scenes, footnotes are easy to use.
-You just type, for example
-<p>
-<a name="FOOTNOTE_EXAMPLE"></a>
-<pre>
- ...the doctrines of Identity as urged by Schelling\c
- .FOOTNOTE
- &lt;footnote about who the hell is Schelling&gt;
- .FOOTNOTE OFF
- were generally the points of discussion presenting the most
- of beauty to the imaginative Morella.
-</pre>
-
-and be done with it.
-<p>
-(Note the obligatory use of the <strong>\c</strong>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>.
-It is required when your
-<a href="#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a>
-is either <strong>STAR</strong> [star/dagger footnotes] or
-<strong>NUMBER</strong> [superscript numbers]; it is NOT to be used
-when the <strong>FOOTNOTE_MARKER_STYLE</strong> is
-<strong>LINE</strong>, or when footnote markers have been disabled
-with
-<a href="#FOOTNOTE_MARKERS">.FOOTNOTE_MARKERS</a>
-<strong>OFF</strong>.)
-<p>
-<strong>***Version 1.3 change***</strong>
-<p>
-As of version 1.3, the manner of entering the line
-<em>after</em> <strong>.FOOTNOTE OFF</strong> has changed
-to accommodate users' differing wishes with respect to
-the order of punctuation and footnote markers. The
-correct way to enter the line after <strong>.FOOTNOTE
-OFF</strong>--<strong><em><u>ONLY</u></em></strong> if your
-<a href="#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a> is
-<strong>STAR</strong> or <strong>NUMBER</strong>--is to input
-it as if it's literally a continuation of the line before
-<strong>.FOOTNOTE</strong>, and therefore begins with either a space
-or a punctuation mark, as in the two following examples.
-<p>
-<pre>
- Example 1 Example 2
- --------- ---------
-
- A line of text,\c A line of text\c
- .FOOTNOTE .FOOTNOTE
- A footnote line. A footnote line.
- .FOOTNOTE OFF .FOOTNOTE OFF
- broken up with a comma. , broken up with a comma.
-
- (last line begins with (last line begins with
- a literal space) the comma and a space)
-</pre>
-
-If your <strong>FOOTNOTE_MARKER_STYLE</strong> is line, none of
-this is a concern.
-<p>
-<strong>***End of version 1.3 change***</strong>
-<p>
-After you invoke <strong>FOOTNOTE</strong>, <strong>mom</strong>
-takes care of everything: putting footnote markers in the body of
-the document, keeping track of how many footnotes are on the page,
-identifying the footnotes themselves appropriately, balancing them
-properly with the bottom margin, deferring footnotes that don't fit
-on the page... Even if you're using
-<a href="columns.html#COLUMNS">COLUMNS</a>,
-<strong>mom</strong> knows what to do, and Does The Right Thing.
-<p>
-Footnotes can be sly little beasts, though. If you're writing a
-document that's footnote-heavy, you might want to read the following.
-<p>
-
-<a name="FOOTNOTE_BEHAVIOUR"><h3><u>Footnote behaviour</u></h3></a>
-<p>
-By default, <strong>mom</strong> marks footnotes with alternating
-stars (asterisks), daggers, and double-daggers. The first footnote
-gets a star, the second a dagger, the third a double-dagger, the
-fourth two stars, the fifth two daggers, etc. If you prefer
-numbered footnotes, rest assured <strong>mom</strong> is happy to
-oblige.
-<p>
-A small amount of vertical whitespace and a short horizontal rule
-separate footnotes from the document body. The amount of whitespace
-varies slightly from page to page depending on the number of lines
-in the footnotes. <strong>Mom</strong> tries for a nice balance
-between too little whitespace and too much, but when push comes to
-shove, she'll usually opt for ample over cramped. The last lines of
-footnotes are always flush with the document's bottom margin.
-<a name="FOOTNOTE_RULES"></a>
-<p>
-If <strong>mom</strong> sees that a portion of a footnote cannot
-be fit on its page, she carries that portion over to the next
-page. If an entire footnote can't be fit on its page (i.e.
-<strong>FOOTNOTE</strong> has been called too close to the bottom),
-she defers the footnote to the next page, but sets it with the
-appropriate marker from the previous page.
-<p>
-When footnotes occur within cited text, for example a
-<a href="#QUOTE">QUOTE</a>
-or a
-<a href="#BLOCKQUOTE">BLOCKQUOTE</a>,
-<strong>mom</strong> will usually opt for deferring the footnote
-over to the next page if it allows her to complete the cited text
-on one page.
-<p>
-In the unfortunate happenstance that a deferred footnote is the
-only footnote on its page (i.e. it's marked in the document body with
-a star) and the page it's deferred to has its own footnotes,
-<strong>mom</strong> separates the deferred footnote from the page's
-proper footnote(s) with a blank line. This avoids the confusion that
-might result from readers seeing two footnote entries on the same page
-identified by a single star (or the number 1 if you've requested
-numbered footnotes that begin at 1 on every page). The blank line
-makes it clear that the first footnote entry belongs to the previous
-page.
-<p>
-In the circumstance where a deferred footnote is not the only one
-on its page, and is consequently marked by something other than a
-single star, there's no confusion and <strong>mom</strong> doesn't
-bother with the blank line. (By convention, the first footnote on
-a page is always marked with a single star, so if readers see, say,
-a dagger or double-dagger marking the first footnote entry, they'll
-know the entry belongs to the previous page).
-<p>
-Very exceptionally, two footnotes may have to be deferred (e.g. one
-occurs on the second to last line of a page, and another on the
-last line). In such a circumstance, <strong>mom</strong> does not
-add a blank after the second deferred footnote. If you'd like a
-blank line separating both deferred footnotes from any footnotes
-proper to the page the deferred ones were moved to, add the space
-manually by putting a
-<a href="typesetting.html#SPACE">.SPACE</a>
-command at the end of the footnote text, before
-<strong>FOOTNOTE OFF</strong> (or <strong>FOOTNOTE X, QUIT,
-EXIT, etc...</strong>).
-<p>
-Obviously, deferred footnotes aren't an issue if you request numbered
-footnotes that increase incrementally throughout the whole document --
-yet another convenience <strong>mom</strong> has thought of.
-<p>
-While <strong>mom</strong>'s handling of footnotes is
-sophisticated, and tries to take nearly every imaginable situation
-under which they might occur into account, some situations are
-simply impossible from a typographic standpoint. For example, if
-you have a
-<a href="#HEAD">HEAD</a>
-near the bottom of the page AND that page has some footnotes on it,
-<strong>mom</strong> may simply not have room to set any text under
-the head (normally, she insists on having room for at least one line
-of text beneath a head). In such an instance, <strong>mom</strong>
-will either set the head, with nothing under it but footnotes,
-or transfer the head to the next page. Either way, you'll have a
-gaping hole at the bottom of the page. It's a sort of typographic
-Catch-22, and can only be resolved by you, the writer or formatter
-of the document, adjusting the type on the offending page so as to
-circumvent the problem.
-<p>
-<strong>NOTE:</strong> Exceptionally, you may encounter problems with footnotes inside
-quotes and blockquotes that cross a page or column. See <a
-href="#BREAK_QUOTE">BREAK_QUOTE</a>
-for a solution.
-<p>
-
-<h3><u><a name="FN_AND_PUNCT">Footnote markers and punctuation in the running text</a></u></h3>
-
-<p>
-As of version 1.3, the manner of entering the line <em>after</em>
-<strong>.FOOTNOTE OFF</strong> has changed. The correct way to
-enter the line after <strong>.FOOTNOTE OFF</strong> now is to
-input it as if it's literally a continuation of the line before
-<strong>.FOOTNOTE</strong>, and therefore begins with either a space
-or a punctuation mark, as in the two following examples.
-<p>
-<pre>
- Example 1 Example 2
- --------- ---------
-
- A line of text,\c A line of text\c
- .FOOTNOTE .FOOTNOTE
- A footnote line. A footnote line.
- .FOOTNOTE OFF .FOOTNOTE OFF
- broken up with a comma. , broken up with a comma.
-
- (last line begins with (last line begins with
- a literal space) the comma and a space)
-</pre>
-
-Care must be taken, though, if the punctuation mark that begins the
-line after <strong>FOOTNOTE OFF</strong> is a period (dot). You
-<strong><em><u>must</u></em></strong> begin such lines with
-<strong>\&.</strong>, like this:
-<p>
-<pre>
- end of a sentence\c
- .FOOTNOTE
- A footnote line.
- .FOOTNOTE OFF
- \&. A new sentence...
-</pre>
-
-If you omit the <strong>\&.</strong>, the line will vanish!
-<p>
-
-
-<!---FOOTNOTE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="FOOTNOTE">
- <nobr>Tag: <strong>FOOTNOTE</strong> &lt;toggle&gt; | INDENT LEFT | RIGHT | BOTH &lt;indent value&gt;</nobr>
- <br>
- <em>*See <a href="#FOOTNOTE_NOTE">HYPER-IMPORTANT NOTE</a>!!!</em>
- <br>
- &lt;indent value&gt; requires a
- <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-</a>
-
-<p>
-<strong>FOOTNOTE</strong> is a toggle macro, therefore invoking it
-on a line by itself allows you to enter a footnote in the body of a
-document. Invoking it with any argument <em>other than INDENT</em>
-(i.e. <strong>OFF, QUIT, END, X...</strong>) tells <strong>mom</strong>
-you're finished.
-<p>
-Footnotes are the only element of
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-that are not affected by the typesetting
-<a href="typesetting.html#INDENTS">indent macros</a>.
-In the unlikely event that you want a page's footnotes to line
-up with a running indent, invoke <strong>FOOTNOTE</strong> with
-the <strong>INDENT</strong> argument and pass it an indent
-direction and indent value. <strong>L, R,</strong> and
-<strong>B</strong> may be used in place of <strong>LEFT,
-RIGHT,</strong> and <strong>BOTH</strong>.
-<strong>FOOTNOTE</strong> must be invoked with <strong>INDENT</strong>
-for every footnote you want indented; <strong>mom</strong> does
-not save any footnote indent information from invocation to
-invocation.
-<p>
-<strong>NOTE:</strong> If a footnote runs to more than one
-paragraph(!), <strong>DO NOT</strong> begin the footnote with
-the
-<a href="#PP">PP</a>
-tag. Use <strong>PP</strong> only to introduce subsequent paragraphs.
-<p>
-<a name="FOOTNOTE_NOTE"><strong>HYPER-IMPORTANT NOTE:</strong></a>
-The final word on the
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-that comes immediately before <strong>FOOTNOTE</strong> MUST terminate
-with a
-<a href="typesetting.html#JOIN">\c</a>
-inline escape if your
-<a href="#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a>
-is either <strong>STAR</strong> or <strong>NUMBER</strong>.
-See the
-<a href="#FOOTNOTE_EXAMPLE">footnote example</a>
-above.
-<p>
-Additionally, the line <em>after</em> a <strong>FOOTNOTE
-OFF</strong> should be entered as if there were no interruption in
-the input text, i.e. the line should begin with a literal space or
-punctuation mark. See
-<a href="#FN_AND_PUNCT">above</a>.
-<p>
-Do NOT use the <strong>\c</strong> inline escape if your
-<strong>FOOTNOTE_MARKER_STYLE</strong> is <strong>LINE</strong>, or
-if you have disabled footnote markers with
-<a href="#FOOTNOTE_MARKERS">.FOOTNOTE_MARKERS</a>
-<strong>OFF</strong>. As well, the line after
-<strong>FOOTNOTE&nbsp;OFF</strong> should be entered normally.
-
-<p>
-<a name="FOOTNOTE_CONTROL"><h3><u>Footnote control macros</u></h3></a>
-<ol>
- <li><a href="#FOOTNOTE_GENERAL">Family/font/size/colour/lead/quad</a>
- <li><a href="#FOOTNOTE_MARKERS">Footnote markers</a> -- on or off
- <li><a href="#FOOTNOTE_MARKER_STYLE">Footnote marker style</a> -- star+dagger, numbered or by line number
- <ul>
- <li><a href="#FOOTNOTE_LINENUMBER_BRACKETS">FOOTNOTE_LINENUMBER_BRACKETS</a>
- <li><a href="#FOOTNOTE_LINENUMBER_SEPARATOR">FOOTNOTE_LINENUMBER_SEPARATOR</a>
- <li><a href="#FOOTNOTES_RUN_ON">FOOTNOTES_RUN_ON</a>--line-numbered footnotes only
- </ul>
- <li><a href="#RESET_FOOTNOTE_NUMBER">Reset footnote number</a> -- set footnote marker number to 1
- <li><a href="#FOOTNOTE_SPACE">Inter-footnote spacing</a>
- <li><a href="#FOOTNOTE_RULE">Footnote rule</a> -- on or off
- <li><a href="#FOOTNOTE_RULE_LENGTH">Footnote rule length</a> -- length of footnote separator rule
- <li><a href="#FOOTNOTE_RULE_ADJ">Adjust vertical position of footnote separator rule</a>
-</ol>
-<p>
-<a name="FOOTNOTE_GENERAL"><h3><u>1. Family/font/size/colour/lead/quad</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.FOOTNOTE_FAMILY default = prevailing document family; default is Times Roman
-.FOOTNOTE_FONT default = roman
-.FOOTNOTE_SIZE default = -2 (points)
-.FOOTNOTE_COLOR default = black
-.FOOTNOTE_AUTOLEAD default = 2 points (typeset); single-spaced (typewrite)
-.FOOTNOTE_QUAD default = same as paragraphs
-</pre>
-
-<a name="FOOTNOTE_MARKERS"><h3><u>2. Footnote markers -- FOOTNOTE_MARKERS</u></h3></a>
-<p>
-If you don't want footnote markers, in either the body of
-the document or beside footnote entries themselves, toggle
-them off with <strong>.FOOTNOTE_MARKERS OFF</strong> (or
-<strong>END, QUIT, X</strong>...). This means, of course, that
-you'll have to roll your own. If you want them back on, invoke
-<strong>.FOOTNOTE_MARKERS</strong> with no argument. Footnote markers
-are on by default.
-<p>
-If <strong>FOOTNOTE_MARKERS</strong> are disabled, do NOT use the
-<strong>\c</strong> inline escape to terminate the line before
-<strong>.FOOTNOTE</strong>.
-<p>
-
-<a name="FOOTNOTE_MARKER_STYLE"><h3><u>3. Footnote marker style -- FOOTNOTE_MARKER_STYLE</u></h3></a>
-<p>
-<strong>Mom</strong> gives you two choices of footnote marker style:
-star+dagger (see
-<a href="#FOOTNOTE_BEHAVIOUR">footnote behaviour</a>
-above), or numbered.
-<p>
-<strong>.FOOTNOTE_MARKER_STYLE STAR</strong> gives you star+dagger
-(the default). There is a limit of 10 footnotes per page with
-this style.
-<p>
-<strong>.FOOTNOTE_MARKER_STYLE NUMBER</strong> gives you superscript
-numbers, both in the document body and in the footnote entries
-themselves. By default, footnote numbers increase incrementally
-(prev. footnote number + 1) throughout the whole document. You can
-ask <strong>mom</strong> to start each page's footnote numbers at 1
-with <strong>.RESET_FOOTNOTE_NUMBER</strong>
-(<a href="#RESET_FOOTNOTE_NUMBER">see below</a>.)
-<a name="FOOTNOTE_LINENUMBERS"><p></a>
-<p>
-<strong>.FOOTNOTE_MARKER_STYLE LINE</strong> lets you have
-footnotes which are identified by line number, rather than by a
-marker in the text. (Note that
-<a href="#NUMBER_LINES">NUMBER_LINES</a>
-must be enabled in order to use this marker style.)
-<p>
-With <strong>FOOTNOTE_MARKER_STYLE LINE</strong>, <strong>mom</strong>
-will identify footnotes either by single line numbers, or line
-ranges. If what you want is a single line number, you need only
-invoke <strong>.FOOTNOTE</strong>, <em>without terminating the text
-line before it with</em> <strong>\c</strong>, at the appropriate
-place in running text.
-<p>
-If you want a range of line numbers (e.g.&nbsp;[5-11]&nbsp;),
-insert, directly into the first line of the range you want, the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<strong>\*[FN-MARK]</strong>. For the terminating line number of
-the range, you need only invoke <strong>.FOOTNOTE</strong>, (again,
-without attaching <strong>\c</strong> to the text line before it).
-<strong>Mom</strong> is smart enough to figure out that where
-<strong>FOOTNOTE</strong> was invoked represents the terminating
-line number. Range-numbered footnotes are always output on the page
-where <strong>FOOTNOTE</strong> was invoked, not the page where
-<strong>\*[FN-MARK]</strong> appears (subject, of course, to the
-rules for footnotes that fall too close to the bottom of a page, as
-outlined
-<a href="#FOOTNOTE_RULES">here</a>).
-<a name="FOOTNOTE_LINENUMBER_BRACKETS"></a>
-<p>
-<strong>Mom</strong>, by default, puts footnote line numbers inside
-square brackets. The style of the brackets may be changed with
-the macro, <strong>FOOTNOTE_LINENUMBER_BRACKETS</strong>, which
-takes one of three possible arguments: <strong>PARENS</strong>
-("round" brackets), <strong>SQUARE</strong> (the default) or
-<strong>BRACES</strong> (curly braces). If you prefer a
-shortform, the arguments, <strong>(</strong>, <strong>[</strong> or
-<strong>{</strong> may be used instead.
-<a name="FOOTNOTE_LINENUMBER_SEPARATOR"></a>
-<p>
-If you don't want the numbers enclosed in brackets, you may tell
-<strong>mom</strong> to use a "separator" instead. A common
-separator would be the colon, but it can be anything you like. The
-macro to do this is <strong>FOOTNOTE_LINENUMBER_SEPARATOR</strong>,
-which takes, as its single argument, the separator you want. For
-safety and consistency's sake, ALWAYS enclose the argument in
-double-quotes.
-<p>
-The separator can be composed of any legal groff character, or any
-combination of characters. <strong>A word of caution:</strong> when
-using a separator, <strong>mom</strong> doesn't insert a space
-after the separator. Hence, if you want the space (you probably
-do), you must make the space part of the argument you pass to
-<strong>FOOTNOTE_LINENUMBER_SEPARATOR</strong>. For example,
-to get a colon separator with a space after it, you'd do
-<p>
-<pre>
- .FOOTNOTE_LINENUMBER_SEPARATOR ": "
-</pre>
-
-<a name="FOOTNOTES_RUN_ON"><strong><u>RUN-ON FOOTNOTES</u></strong></a>
-<p>
-Finally, if your footnote marker style is <strong>LINE</strong>, you
-may instruct <strong>mom</strong> to do "run-on style" footnotes.
-Run-on footnotes do not treat footnotes as discrete entities, i.e.
-on a line by themselves. Rather, each footnote is separated from
-the footnote before it by a space, so that the footnotes on any
-given page form a continuous block, like lines in a paragraph. The
-macro to get
-<strong>mom</strong> to run footnotes on is
-<strong>.FOOTNOTES_RUN_ON</strong>. Invoked by itself, it turns
-the feature on. Invoked with any other argument
-(<strong>OFF</strong>, <strong>NO</strong>, etc.), it turns the
-feature off. It is generally NOT a good idea to turn the feature
-on and off during the course of a single document. If you do,
-<strong>mom</strong> will issue a warning if there's going to be a
-problem. However, it is always perfectly safe to enable/disable the
-feature after
-<a href="rectoverso.html#COLLATE">COLLATE</a>.
-<p>
-The usual reason for wanting run-on footnotes is that you're
-using them to hold many, short references. (See
-<a href="refer.html#TOP">here</a>
-for instructions on using the <strong>groff</strong> program,
-<strong>refer</strong>, to set up references.)
-
-<p>
-
-<a name="RESET_FOOTNOTE_NUMBER"><h3><u>4. Reset footnote number -- RESET_FOOTNOTE_NUMBER</u></h3></a>
-<p>
-<strong>.RESET_FOOTNOTE_NUMBER</strong>, by itself, resets
-footnote numbering so that the next footnote you enter is
-numbered 1.
-<p>
-<strong>.RESET_FOOTNOTE_NUMBER PAGE</strong> tells
-<strong>mom</strong> to start every page's footnote numbering at 1.
-<p>
-
-<a name="FOOTNOTE_SPACE"><h3><u>5. Inter-footnote spacing -- FOOTNOTE_SPACE</u></h3></a>
-<p>
-If you'd like a little extra space between footnotes, you can have
-<strong>mom</strong> put it in for you by invoking
-<strong>.FOOTNOTE_SPACE</strong> with an argument representing the
-amount of extra space you'd like. The argument to
-<strong>FOOTNOTE_SPACE</strong> requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-<p>
-In the following example, footnotes will be separated from each
-other by 3
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>.
-<pre>
- .FOOTNOTE_SPACE 3p
-</pre>
-
-<a name="FOOTNOTE_RULE"><h3><u>6. Footnote rule -- FOOTNOTE_RULE</u></h3></a>
-<p>
-If you don't want a footnote separator rule, toggle it off with
-<strong>.FOOTNOTE_RULE OFF</strong> (or <strong>END,
-QUIT, X</strong>...). Toggle it back on by invoking
-<strong>.FOOTNOTE_RULE</strong> with no argument. The default is to
-print the rule.
-<p>
-
-<a name="FOOTNOTE_RULE_LENGTH"><h3><u>7. Footnote rule length -- FOOTNOTE_RULE_LENGTH</u></h3></a>
-<p>
-If you want to change the length of the footnote separator rule,
-invoke <strong>.FOOTNOTE_RULE_LENGTH</strong> with a length, like
-this,
-<pre>
- .FOOTNOTE_RULE_LENGTH 1i
-</pre>
-
-which sets the length to 1 inch. Note that a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required. The default is 4
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
-for both
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLES</a>.
-<p>
-
-<a name="FOOTNOTE_RULE_ADJ"><h3><u>8. Adjust vertical position of footnote separator rule -- FOOTNOTE_RULE_ADJ</u></h3></a>
-<p>
-The footnote separator rule is actually a baseline rule that falls
-on the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of the first line of a page's footnotes. By default,
-<strong>mom</strong> raises the rule 3
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-from the baseline so that the separator and the footnotes don't
-look jammed together. If you'd prefer a different vertical
-adjustment, invoke <strong>.FOOTNOTE_RULE_ADJ</strong> with the
-amount you'd like. For example
-<p>
-<pre>
- .FOOTNOTE_RULE_ADJ 4.25p
-</pre>
-
-raises the rule by 4-1/4 points. Note that you can only raise
-the rule, not lower it. A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required.
-<p>
-<strong>Tip:</strong> If your document
-<a href="definitions.html#TERMS_LEADING">leading</a>
-is 2
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-or less (e.g your
-<a href="definitions.html#TERMS_PS">point size</a>
-is 10 and your linespacing is 10, 11, or 12, lowering
-<strong>mom</strong>'s default footnote rule adjustment will
-almost certainly give you nicer looking results than leaving
-the adjustment at the default. Furthermore, you can invoke
-<strong>FOOTNOTE_RULE_ADJ</strong> on any page in which footnotes
-appear, or in any column, so that the placement of the footnote rule
-can be changed on-the-fly, should you wish to do so.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="ENDNOTE_INTRO"><h2><u>Endnotes</u></h2></a>
-<ul>
- <li><a href="#ENDNOTE_BEHAVIOUR">Endnote behaviour</a>
- <ul>
- <li><a href="#ENDNOTE_SPACING">A Note on Endnote Spacing</a>
- <li><a href="#ENDNOTE_COLUMNS">Endnotes and columnar documents</a>
- </ul>
- <li><a href="#ENDNOTE">Tag: ENDNOTE</a>
- <li><a href="#ENDNOTES">Macro: ENDNOTES</a> -- tell <strong>mom</strong> to output endnotes
- <li><a href="#ENDNOTE_CONTROL">ENDNOTES control macros</a>
-</ul>
-
-<p>
-Embedding endnotes into <strong>mom</strong> documents is accomplished
-the same way as embedding
-<a href="#FOOTNOTE_INTRO">footnotes</a>. The example below is
-identical to the one shown in the
-<a href="#FOOTNOTE_EXAMPLE">introduction to footnotes</a>,
-except that <kbd>.FOOTNOTE</kbd> has been replaced with
-<kbd>.ENDNOTE</kbd>.
-<p>
-<a name="ENDNOTE_EXAMPLE"></a>
-<pre>
- ...the doctrines of Identity as urged by Schelling\c
- .ENDNOTE
- &lt;endnote about who the hell is Schelling&gt;
- .ENDNOTE OFF
- were generally the points of discussion presenting the most
- of beauty to the imaginative Morella.
-</pre>
-
-As with footnotes, note the obligatory use of the <strong>\c</strong>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-when your
-<a href="#ENDNOTE_MARKER_STYLE">ENDNOTE_MARKER_STYLE</a>
-is <strong>NUMBER</strong> (which marks endnotes references in
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-with superscript numbers). When the marker style is
-<strong>LINE</strong>, you must <em>not</em> use the
-<strong>\c</strong> escape.
-<p>
-<strong>***Version 1.3 change***</strong>
-<p>
-As of version 1.3, the manner of entering the line <em>after</em>
-<strong>.ENDNOTE OFF</strong> has changed to accommodate users'
-differing wishes with respect to the order of punctuation and
-endnote markers. The correct way to enter the line after
-<strong>.ENDNOTE OFF</strong>--but <strong><em><u>NOT</u></em></strong>
-if your
-<a href="#ENDNOTE_MARKER_STYLE">ENDNOTE_MARKER_STYLE</a>
-is <strong>LINE</strong>--is to input it as if it's literally
-a continuation of the line before <strong>.ENDNOTE</strong>, and
-therefore begins with either a space or a punctuation mark, as in
-the two following examples.
-<p>
-<a name="EN_PUNCT"></a>
-<pre>
- Example 1 Example 2
- --------- ---------
-
- A line of text,\c A line of text\c
- .ENDNOTE .ENDNOTE
- A footnote line. A footnote line.
- .ENDNOTE OFF .ENDNOTE OFF
- broken up with a comma. , broken up with a comma.
-
- (last line begins with (last line begins with
- a literal space) the comma and a space)
-</pre>
-
-<strong>***End version 1.3 change***</strong>
-<p>
-Endnotes differ from footnotes in two ways (other than the fact that
-endnotes come at the end of a document whereas footnotes appear in the
-body of the document):
-<br>
-<ol>
- <li>When your <strong>ENDNOTE_MARKER_STYLE</strong> is
- <strong>NUMBER</strong>, endnotes are always numbered
- incrementally, starting at "1".
- <li>Endnotes MUST be output explicitly; <strong>mom</strong> does
- not output them for you. In
- <a href="rectoverso.html#COLLATE">collated</a>
- documents, this allows you to choose whether you
- want the endnotes to appear at the end of each chapter or
- article in a document, or grouped together at the very end
- of the document.
-</ol>
-<p>
-Within endnotes, you may use the document element tags
-<a href="#PP">PP</a>,
-<a href="#QUOTE">QUOTE</a>
-and
-<a href="#BLOCKQUOTE">BLOCKQUOTE</a>.
-This provides the flexibility to create endnotes that run to several
-paragraphs, as well as to embed cited text within endnotes.
-<p>
-Should you wish to change the appearance of quotes or blockquotes that
-appear within endnotes, you may do so with the
-<a href="#QUOTE_CONTROL">quote control macros</a>
-or
-<a href="#BLOCKQUOTE_CONTROL">blockquote control macros</a>.
-HOWEVER... you must make the changes <em>within</em> each endnote, prior
-to invoking <strong>QUOTE</strong> or <strong>BLOCKQUOTE</strong>, and
-undo them prior to terminating the endnote (i.e. before <strong>ENDNOTE
-OFF</strong>), otherwise the changes will affect subsequent quotes and
-blockquotes that appear in the document body as well.
-<p>
-
-<a name="ENDNOTE_BEHAVIOUR"><h3><u>Endnote behaviour</u></h3></a>
-<br>
-When you output endnotes (with
-<a href="#ENDNOTES">ENDNOTES</a>),
-<strong>mom</strong> finishes processing the last page of your document,
-then breaks to a new page for printing the endnotes. If the document
-type is
-<a href="docprocessing.html#DOCTYPE">CHAPTER</a>,
-the centre part of the
-<a href="definitions.html#TERMS_HEADER">header</a>
-(or footer), which, by default, contains a chapter number or title, is
-removed.
-<p>
-By default, <strong>mom</strong> starts the endnotes page with a
-bold, centred, double-underscored head, &quot;ENDNOTES&quot;.
-Underneath--flush left, bold, and underscored--she prints the document
-title (or, in the case of chapters, the chapter number or title). She
-then prints the endnotes. Each endnote is identified by its appropriate
-number, in bold, right aligned to two placeholders. The text of the
-endnotes themselves is indented to the right of the numbers.
-<p>
-If the endnotes are grouped together at the end of a collated document,
-each section of the document that contains endnotes is identified by its
-own unique title (or chapter number or title), bold, flush left, and
-underscored.
-<p>
-Of course, all the defaults, as well as the overall style of the
-endnotes page, can be changed with the
-<a href="#ENDNOTE_CONTROL">endnote control macros</a>.
-The attentive will notice that endnotes have an awful lot of control
-macros. This is because endnotes are like a mini-document unto
-themselves, and therefore need not be bound by the style parameters of
-the body of the document.
-<p>
-
-<a name="ENDNOTE_SPACING">
- <h3><u>A Note on Endnote Spacing</u></h3>
-</a>
-<br>
-On the endnotes page(s), each new endnote is separated from the
-previous endnote by a full line space. This can result in a bottom
-margin that hangs, and is the one instance, other than the use of
-<a href="#PP_SPACE">PARA_SPACE</a>,
-where <strong>mom</strong> allows unequal bottom alignment of pages.
-Should you wish to correct this, by adding or subtracting small amounts
-of space between endnotes that appear together on an endnotes page, make
-the adjustment (with
-<a href="typesetting.html#ALD">ALD</a>,
-<a href="typesetting.html#RLD">RLD</a>
-or
-<a href="typesetting.html#SPACE">SPACE</a>)
-<em>at the end of each endnote</em> (i.e. just before invoking
-<a href="#ENDNOTE">ENDNOTE OFF</a>)
-rather than at the top.
-<p>
-
-<a name="ENDNOTE_COLUMNS">
- <h3><u>Endnotes and columnar documents</u></h3>
-</a>
-<br>
-Formerly (pre 1.1.6), there was no way to set a document in columns
-(see
-<a href="docprocessing.html#COLUMNS">COLUMNS</a>)
-and then turn off column mode for endnotes. As of version 1.1.6,
-you may now do so. See
-<a href="#ENDNOTES_NO_COLUMNS">ENDNOTES_NO_COLUMNS</a>.
-<p>
-<hr>
-
-<!---ENDNOTE--->
-
-<p>
-<a name="ENDNOTE">
- <nobr>Macro: <strong>ENDNOTE</strong> &lt;toggle&gt;</nobr>
- <br>
- <em>*See <a href="#ENDNOTE_NOTE">HYPER-IMPORTANT NOTE</a>!!!</em>
-</a>
-
-<p>
-<strong>ENDNOTE</strong> is a toggle macro, therefore invoking it
-on a line by itself allows you to enter an endnote in the body of a
-document. Invoking it with any other argument
-(i.e. <strong>OFF, QUIT, END, X...</strong>) tells <strong>mom</strong>
-that you've finished the endnote.
-<p>
-<strong>NOTE:</strong> If an endnote runs to more than one paragraph,
-<strong>DO NOT</strong> begin the endnote with the
-<a href="#PP">PP</a>
-tag. Use <strong>PP</strong> only to introduce subsequent paragraphs.
-<p>
-<a name="ENDNOTE_NOTE"><strong>HYPER-IMPORTANT NOTE:</strong></a>
-If your
-<a href="#ENDNOTE_MARKER_STYLE">ENDNOTE_MARKER_STYLE</a>
-is <strong>NUMBER</strong> (<strong>mom</strong>'s default), the
-final word on the
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-that comes immediately before <strong>ENDNOTE</strong> MUST terminate
-with a
-<a href="typesetting.html#JOIN">\c</a>
-inline escape. See the
-<a href="#ENDNOTE_EXAMPLE">endnote example</a>
-above.
-<p>
-Additionally, the line <em>after</em>
-<strong>.ENDNOTE&nbsp;OFF</strong> should be entered as if there
-were no interruption in the input text, i.e. the line should begin
-with a literal space or punctuation mark. See the two
-<a href="#EN_PUNCT">examples</a>,
-above.
-<p>
-If your <strong>ENDNOTE_MARKER_STYLE</strong> is
-<strong>LINE</strong>, do NOT use the <strong>\c</strong> escape,
-and enter the line after <strong>.ENDNOTE&nbsp;OFF</strong>
-normally.
-<p>
-
-<!---ENDNOTES--->
-
-<hr width="66%" align="left">
-<p>
-<a name="ENDNOTES">Tag: <strong>ENDNOTES</strong></a>
-
-<p>
-Unlike footnotes, which <strong>mom</strong> automatically outputs at the
-bottom of pages, endnotes must be explicitly output by you, the user.
-<strong>ENDNOTES</strong>, by itself (i.e. without any argument), is
-the macro to do this.
-<p>
-Typically, you'll use <strong>ENDNOTES</strong> at the end of
-a document. If it's a single (i.e. not collated) document,
-<strong>mom</strong> will print the endnotes pertaining to it. If it's
-a collated document, <strong>mom</strong> will print all the endnotes
-contained within all sections of the document (typically chapters),
-appropriately identified and numbered.
-<p>
-Should you wish to output the endnotes for each section of a collated
-document at the ends of the sections (instead of at the very end of the
-document), simply invoke <strong>ENDNOTES</strong> immediately prior to
-<a href="rectoverso.html#COLLATE">COLLATE</a>.
-<strong>Mom</strong> will print the endnotes, identified and numbered
-appropriately, on a separate page prior to starting the next section of
-the document. Each subsequent invocation of <strong>ENDNOTES</strong>
-outputs only those endnotes that <strong>mom</strong> collected
-after the previous invocation.
-<p>
-<hr width="66%" align="left">
-
-<a name="ENDNOTE_CONTROL"><h3><u>Endnote control macros</u></h3></a>
-<p>
-<strong>VERY IMPORTANT NOTE!</strong>
-<br>
-Endnote control macros must always be invoked prior to the first
-instance of
-<a href="#ENDNOTE">ENDNOTE/ENDNOTE OFF</a>.
-<p>
-When you embed endnotes in the body of a document,
-<strong>mom</strong> collects <em>and processes</em> them for later
-outputting (when you invoke
-<a href="#ENDNOTES">ENDNOTES</a>).
-By the time you do invoke <strong>ENDNOTES</strong>, it's much too
-late to change your mind about how you want them to look.
-<p>
-My advice? If you're planning to change the default appearance of
-endnotes pages, set them up prior to
-<a href="docprocessing.html#START">START</a>.
-<p>
-<ol>
- <li><a href="#ENDNOTES_GENERAL"><strong>General endnotes-pages style control</strong></a>
- <ul>
- <li><a href="#ENDNOTE_STYLE">Base family/font/quad for endnotes-pages</a>
- <li><a href="#ENDNOTE_PT_SIZE">Base point size for the endnotes-pages</a>
- <li><a href="#ENDNOTE_LEAD">Leading of endnotes-pages</a>
- <li><a href="#SINGLESPACE_ENDNOTES">Singlespace endnotes (for TYPEWRITE only)</a>
- <li><a href="#ENDNOTE_PARA_INDENT">Size of paragraph first line indent in multi-paragraph endnotes</a>
- <li><a href="#ENDNOTE_PARA_SPACE">Inserting space between paragraphs of multi-paragraph endnotes</a>
- <li><a href="#ENDNOTES_NO_COLUMNS">Turning off column mode during endnotes output</a>
- <li>Pagination of endnotes:
- <ul>
- <li><a href="#ENDNOTES_PAGENUM_STYLE">Endnotes-pages page numbering style</a>
- <li><a href="#ENDNOTES_FIRST_PAGENUMBER">Setting the first page number of endnotes pages</a>
- <li><a href="#ENDNOTES_NO_FIRST_PAGENUM">Omitting a page number on the first page of endnotes</a>
- </ul>
- <li><a href="#SUSPEND_PAGINATION">Suspending pagination of endnotes pages</a>
- </ul>
- <li><a href="#ENDNOTES_HEADER_CONTROL"><strong>Endnotes-page header/footer control</strong></a>
- <ul>
- <li><a href="#ENDNOTES_MODIFY_HDRFTR">Modifying what goes in the endnotes-pages header/footer</a>
- <li><a href="#ENDNOTES_HDRFTR_CENTER">Enabling a header/footer centre when doctype is CHAPTER</a>
- <li><a href="#ENDNOTES_ALLOWS_HEADERS">Allow headers on endnotes-pages</a>
- </ul>
- <li><a href="#ENDNOTES_MAIN_TITLE"><strong>Endnotes-page head (i.e. the title at the top) control</strong></a>
- <ul>
- <li><a href="#ENDNOTE_STRING">Creating/modifying the endnotes-page head</a>
- <li><a href="#ENDNOTE_STRING_CONTROL">Endnotes-page head control</a>
- <li><a href="#ENDNOTE_STRING_UNDERSCORE">Endnotes-page head underscoring</a>
- <li><a href="#ENDNOTE_STRING_CAPS">Endnotes-page head capitalization</a>
- </ul>
- <li><a href="#ENDNOTES_DOC_TITLE"><strong>Endnote document-identification title</strong></a>
- <ul>
- <li><a href="#ENDNOTE_TITLE">Creating/modifying the endnote document-identification title</a>
- <li><a href="#ENDNOTE_TITLE_CONTROL">Document-identification title control</a>
- <li><a href="#ENDNOTE_TITLE_UNDERSCORE">Document-identification title underscoring</a>
- </ul>
- <li><a href="#ENDNOTES_NUMBERING"><strong>Endnotes-pages endnote numbering style</strong></a>
- <ul>
- <li><a href="#ENDNOTE_MARKER_STYLE">Endnote marker style</a>--by numbers in the text, or by line number
- <ul>
- <li><a href="#ENDNOTE_LINENUMBER_GAP">ENDNOTE_LINENUMBER_GAP</a>
- <li><a href="#ENDNOTE_LINENUMBER_BRACKETS">ENDNOTE_LINENUMBER_BRACKETS</a>
- <li><a href="#ENDNOTE_LINENUMBER_SEPARATOR">ENDNOTE_LINENUMBER_SEPARATOR</a>
- </ul>
- <li><a href="#ENDNOTE_NUMBER_CONTROL">Endnotes-pages endnote numbering style control</a>
- <li><a href="#ENDNOTE_NUMBER_ALIGNMENT">Endnote numbering alignment</a>
- <ul>
- <li><a href="#ENDNOTE_NUMBERS_ALIGN_RIGHT">ENDNOTE_NUMBERS_ALIGN_RIGHT</a>
- <li><a href="#ENDNOTE_NUMBERS_ALIGN_LEFT">ENDNOTE_NUMBERS_ALIGN_LEFT</a>
- </ul>
- </ul>
-</ol>
-<hr>
-
-<a name="ENDNOTES_GENERAL"><h2><u>1. General endnotes page style control</u></h2>
-
-<a name="ENDNOTE_STYLE"><h3><u>*Endnote family/font/quad</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.ENDNOTE_FAMILY default = prevailing document family; default is Times Roman
-.ENDNOTE_FONT default = roman
-.ENDNOTE_QUAD* default = justified
-
-*Note: ENDNOTE_QUAD must be set to either L or J
-</pre>
-
-<!---ENDNOTE_PT_SIZE--->
-
-<a name="ENDNOTE_PT_SIZE"><h3><u>*Endnote point size</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_PT_SIZE</strong> &lt;base type size of endnotes&gt;</nobr>
-
-<p>
-Unlike most other control macros that deal with size of document
-elements, <strong>ENDNOTE_PT_SIZE</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument represents
-the size of endnote type in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .ENDNOTE_PT_SIZE 12
-</pre>
-
-sets the base point size of type on the endnotes page to 12
-points, whereas
-<p>
-<pre>
- .ENDNOTE_PT_SIZE .6i
-</pre>
-
-sets the base point size of type on the endnotes page to 1/6 of an
-inch.
-<p>
-The type size set with <strong>ENDNOTE_PT_SIZE</strong> is the size of
-type used for the text of the endnotes, and forms the basis from which
-the point size of other endnote page elements is calculated.
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is 12.5 points (the same default size used in the body of the document).
-<p>
-
-<!---ENDNOTE_LEAD--->
-
-<a name="ENDNOTE_LEAD"><h3><u>*Endnote lead</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_LEAD</strong> &lt;base leading of endnotes&gt; [ ADJUST ] </nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
-
-<p>
-Unlike most other control macros that deal with leading of document
-elements, <strong>ENDNOTE_LEAD</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument represents
-the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of endnotes in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .ENDNOTE_LEAD 14
-</pre>
-
-sets the base leading of type on the endnotes page to 14
-points, whereas
-<p>
-<pre>
- .ENDNOTE_LEAD .5i
-</pre>
-
-sets the base leading of type on the endnotes page to 1/2 inch.
-<p>
-If you want the leading of endnotes adjusted to fill the page, pass
-<strong>ENDNOTE_LEAD</strong> the optional argument
-<strong>ADJUST</strong>. (See
-<a href="docprocessing.html#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
-for an explanation of leading adjustment.)
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is 14 points, adjusted.
-<p>
-<strong>NOTE:</strong> Even if you give <strong>mom</strong> a
-<strong>DOC_LEAD_ADJUST OFF</strong> command, she will still, by
-default, adjust endnote leading. You MUST enter
-<strong>ENDNOTE_LEAD &lt;lead&gt;</strong> with no
-<strong>ADJUST</strong> argument to disable this default behaviour.
-<p>
-
-<!---SINGLESPACE_ENDNOTES--->
-
-<a name="SINGLESPACE_ENDNOTES"><h3><u>*Singlespace endnotes (TYPEWRITE only)</u></h3></a>
-<p>
-<nobr>Macro: <strong>SINGLESPACE_ENDNOTES</strong> &lt;toggle&gt;</nobr>
-
-<p>
-If your
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
-is <strong>TYPEWRITE</strong> and you use TYPEWRITE's default
-double-spacing, endnotes are double-spaced. If your document is
-single-spaced, endnotes are single-spaced.
-<p>
-If, for some reason, you'd prefer that endnotes be single-spaced
-in an otherwise double-spaced document (including double-spaced
-<a href="rectoverso.html#COLLATE">collated</a>
-documents), invoke <strong>SINGLESPACE_ENDNOTES</strong> with
-no argument. And if, god help you, you want to change endnote
-single-spacing back to double-spacing for different spacing of
-endnotes output at the ends of separate documents in a collated
-document, invoke <strong>SINGLESPACE_ENDNOTES</strong> with any
-argument (<strong>OFF, QUIT, Q, X</strong>...).
-<p>
-
-<!---ENDNOTE_PARA_INDENT--->
-
-<a name="ENDNOTE_PARA_INDENT"><h3><u>*Endnote paragraph indenting</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_PARA_INDENT</strong> &lt;amount to indent first line of paragraphs in endnotes&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>ENDNOTE_PARA_INDENT</strong> works exactly the same way as
-<a href="#PARA_INDENT">PARA_INDENT</a>,
-except that the indent given is the amount by which to indent the first
-lines of endnote paragraphs, not document body paragraphs.
-<p>
-The default is 1.5
-<a href="definitions.html#TERMS_EM">ems</a>
-for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>;
-1/2 inch for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
-
-<p>
-<strong>NOTE:</strong> The first line of the first paragraph of endnotes
-(the one attached immediately to the identifying endnote number) is
-never indented. Only subsequent paragraphs are affected by
-<strong>ENDNOTE_PARA_INDENT</strong>.
-<p>
-
-<!---ENDNOTE_PARA_SPACE--->
-
-<a name="ENDNOTE_PARA_SPACE"><h3><u>*Endnote paragraph spacing</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_PARA_SPACE</strong> &lt;toggle&gt;</nobr>
-
-<p>
-<strong>ENDNOTE_PARA_SPACE</strong> works exactly the same way as
-<a href="#PP_SPACE">PARA_SPACE</a>,
-except that it inserts a blank line between endnote paragraphs, not
-document body paragraphs.
-<p>
-The default is not to insert a blank line between paragraphs in
-endnotes.
-<p>
-<strong>NOTE:</strong> Each endnote itself is always separated from any
-previous endnote by a line space. <strong>ENDNOTE_PARA_SPACE</strong>
-refers only to paragraphs that appear within each discrete endnote.
-<p>
-
-<!---ENDNOTES_NO_COLUMNS--->
-
-<a name="ENDNOTES_NO_COLUMNS"><h3><u>*Turning off column mode during endnotes output</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_NO_COLUMNS</strong> &lt;toggle&gt;</nobr>
-
-<p>
-By default, if your document is
-<a href="columns.html#COLUMNS">set in columns</a>,
-<strong>mom</strong> sets the endnotes in columns, too. However,
-if your document is set in columns and you'd like the endnotes not
-to be, just invoke <strong>ENDNOTES_NO_COLUMNS</strong> with no
-argument. The endnotes pages will be set to the full page measure
-of your document.
-<p>
-If you output endnotes at the end of each document in a
-<a href="rectoverso.html#COLLATE">collated</a>
-document set in columns, column mode will automatically
-be reinstated for each document, even with
-<strong>ENDNOTES_NO_COLUMNS</strong> turned on.
-<p>
-
-<!---ENDNOTES_PAGENUM_STYLE--->
-
-<a name="ENDNOTES_PAGENUM_STYLE"><h3><u>*Endnotes-pages page numbering style</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_PAGENUM_STYLE</strong> DIGIT | ROMAN | roman | ALPHA | alpha</nobr>
-
-<p>
-Use this macro to set the page numbering style of endnotes pages.
-The arguments are identical to those for
-<a href="headfootpage.html#PAGENUM_STYLE">PAGENUM_STYLE</a>.
-The default is <strong>digit</strong>. You may want to change it
-to, say, <strong>alpha</strong>, which you would do with
-<p>
-<pre>
- .ENDNOTES_PAGENUM_STYLE alpha
-</pre>
-
-<!---ENDNOTES_FIRST_PAGENUMBER--->
-
-<a name="ENDNOTES_FIRST_PAGENUMBER"><h3><u>*Setting the first page number of endnotes pages</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_FIRST_PAGENUMBER</strong> &lt;page # that appears on page 1 of endnotes&gt;</nobr>
-
-<p>
-Use this macro with caution. If all endnotes for several
-<a href="rectoverso.html#COLLATE">collated</a>
-documents are to be output at once, i.e. not at the end of each
-separate doc, <strong>ENDNOTES_FIRST_PAGENUMBER</strong> tells
-<strong>mom</strong> what page number to put on the first page of
-the endnotes.
-<p>
-If you set <strong>ENDNOTES_FIRST_PAGENUMBER</strong> in collated
-documents where the endnotes are output after each separate doc,
-you have to reset every separate document's first page number after
-<a href="rectoverso.html#COLLATE">COLLATE</a>
-and before
-<a href="docprocessing.html#START">START</a>.
-<p>
-
-<!---ENDNOTES_NO_FIRST_PAGENUN--->
-
-<a name="ENDNOTES_NO_FIRST_PAGENUM"><h3><u>*Omitting a page number on the first page of endnotes</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_NO_FIRST_PAGENUM</strong> &lt;toggle&gt;</nobr>
-
-<p>
-This macro is for use only if <strong>FOOTERS</strong> are on. It
-tells
-<a href="#ENDNOTES">ENDNOTES</a>
-not to print a page number on the first endnotes page.
-<strong>Mom</strong>'s default is to print the page number.
-<p>
-
-<!---SUSPEND_PAGINATION--->
-
-<a name="SUSPEND_PAGINATION"><h3><u>*Suspending pagination of endnotes pages</u></h3></a>
-<p>
-Macro: <strong>SUSPEND_PAGINATION</strong>
-<br>
-Macro: <strong>RESTORE_PAGINATION</strong>
-
-<p>
-<strong>SUSPEND_PAGINATION</strong> doesn't take an argument.
-Invoked immediately prior to
-<a href="#ENDNOTES">ENDNOTES</a>,
-it turns off endnotes pages pagination. <strong>Mom</strong>
-continues, however to increment page numbers silently.
-<p>
-To restore normal document pagination after endnotes, invoke
-<strong>RESTORE_PAGINATION</strong> (again, with no argument)
-immediately after <strong>ENDNOTES</strong>.
-
-<a name="ENDNOTES_HEADER_CONTROL"><h2><u>2. Endnotes-page header/footer control</u></h2></a>
-<p>
-<a name="ENDNOTES_MODIFY_HDRFTR"></a>
-If you wish to modify what appears in the header/footer that appears
-on endnotes page(s), make the changes before you invoke
-<a href="#ENDNOTES">ENDNOTES</a>,
-not afterwards.
-<p>
-Except in the case of
-<a href="docprocessing.html#DOCTYPE">DOCTYPE CHAPTER</a>,
-<strong>mom</strong> prints the same header or footer used throughout
-the document on the endnotes page(s). Chapters get treated differently
-in that, by default, <strong>mom</strong> does not print the
-header/footer centre string (normally the chapter number or chapter
-title.) In most cases, this is what you want. However, should you
-<em>not</em> want <strong>mom</strong> to remove the centre string from
-the endnotes page(s) headers/footers, invoke
-<a href="#ENDNOTES_HDRFTR_CENTER">ENDNOTES_HEADER_CENTER</a>
-with no argument.
-<p>
-An important change you may want to make is to put the word
-&quot;Endnotes&quot; in the header/footer centre position.
-To do so, do
-<p>
-<pre>
- .HEADER_CENTER "Endnotes"
- or
- .FOOTER_CENTER "Endnotes"
-</pre>
-
-prior to invoking <strong>.ENDNOTES</strong>. If your
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-is <kbd>CHAPTER</kbd>, you must also invoke
-<a href="#ENDNOTES_HDRFTR_CENTER">ENDNOTES_HEADER_CENTER</a>
-for the <strong>HEADER_CENTER</strong> to appear.
-<p>
-
-<a name="ENDNOTES_HDRFTR_CENTER"><h3><u>*Endnotes page(s) header/footer centre string</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_HEADER_CENTER</strong> toggle</nobr>
-
-<p>
-If your
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-is <kbd>CHAPTER</kbd> and you want <strong>mom</strong> to include
-a centre string in the headers/footers that appear on endnotes pages,
-invoke <strong>ENDNOTES_HEADER_CENTER</strong> (or
-<strong>ENDNOTES_FOOTER_CENTER</strong>) with no argument.
-<strong>Mom</strong>'s default is NOT to print the centre string.
-<p>
-If, for some reason, having enabled the header/footer centre string
-on endnotes pages, you wish to disable it, invoke the same macro
-with any argument (<strong>OFF, QUIT, Q, X</strong>...).
-<p>
-
-<a name="ENDNOTES_ALLOWS_HEADERS"><h3><u>*Allow headers on endnotes-pages</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTES_ALLOWS_HEADERS</strong> &lt;none&gt; | ALL</nobr>
-
-<p>
-By default, if <strong>HEADERS</strong> are on, <strong>mom</strong>
-prints page headers on all endnotes pages except the first. If you
-don't want her to print headers on endnotes pages, do
-<p>
-<pre>
- .ENDNOTES_ALLOWS_HEADERS OFF
-</pre>
-
-If you want headers on every page <em>including the first</em>, do
-<p>
-<pre>
- .ENDNOTES_ALLOWS_HEADERS ALL
-</pre>
-
-<strong>NOTE:</strong> If <strong>FOOTERS</strong> are on,
-<strong>mom</strong> prints footers on every endnotes page. This is
-a style convention. In <strong>mom</strong>, there is no such beast
-as <strong>ENDNOTES_ALLOWS_FOOTERS OFF</strong>.
-<p>
-
-<a name="ENDNOTES_MAIN_TITLE"><h2><u>3. Endnotes-page first page head (title) control</u></h2>
-
-<!---ENDNOTE_STRING--->
-
-<a name="ENDNOTE_STRING"><h3><u>*Endnotes-page first page head (title) string</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_STRING</strong> &quot;&lt;head to print at the top of endnotes&gt;&quot;</nobr>
-
-<p>
-By default, <strong>mom</strong> prints the word &quot;ENDNOTES&quot;
-as a head at the top of the first page of endnotes. If you want her
-to print something else, invoke <strong>ENDNOTE_STRING</strong> with
-the endnotes-page head you want, surrounded by double-quotes. If
-you don't want a head at the top of the first endnotes-page, invoke
-<strong>ENDNOTE_STRING</strong> with a blank argument (either two
-double-quotes side by side -- <kbd>&quot;&quot;</kbd> -- or no argument
-at all).
-<p>
-
-<!---ENDNOTE_STRING_CONTROL--->
-
-<a name="ENDNOTE_STRING_CONTROL"><h3><u>*Endnotes-page first page head (title) control</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.ENDNOTE_STRING_FAMILY default = prevailing document family; default is Times Roman
-.ENDNOTE_STRING_FONT default = bold
-.ENDNOTE_STRING_SIZE* default = +1
-.ENDNOTE_STRING_QUAD default = centred
-
-*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
-</pre>
-
-<!---ENDNOTE_STRING_UNDERSCORE--->
-
-<a name="ENDNOTE_STRING_UNDERSCORE"><h3><u>*Endnotes-page head (title) underscoring</h3></u></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_STRING_UNDERSCORE</strong> toggle | 2</nobr>
-
-<p>
-Invoked by itself, <strong>ENDNOTE_STRING_UNDERSCORE</strong> will
-underscore the endnotes-page head. Invoked with the argument 2
-(i.e. the digit 2), <strong>ENDNOTE_STRING_UNDERSCORE</strong> will
-double-underscore the head. Invoked with any other argument, the macro
-disables underscoring of the head.
-<p>
-<strong>Mom</strong>'s default is to double-underscore the
-head, therefore if you want no underscoring, you must insert
-<kbd>.ENDNOTE_STRING_UNDERSCORE OFF</kbd> (or <kbd>QUIT, X, NO,
-NONE,</kbd> etc.) into your document prior to outputting endnotes with
-<a href="#ENDNOTES">ENDNOTES</a>.
-
-<!---ENDNOTE_STRING_CAPS--->
-
-<a name="ENDNOTE_STRING_CAPS"><h3><u>*Endnotes-page head (title) automatic capitalization</h3></u></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_STRING_CAPS</strong> toggle</nobr>
-
-<p>
-Invoked by itself, <strong>ENDNOTE_STRING_CAPS</strong> will
-automatically capitalize the endnotes-page head. Invoked with any
-other argument, the macro disables automatic capitalization of the
-head.
-<p>
-If you're generating a table of contents, you may want the
-endnotes-pages head string in caps, but the toc entry in caps/lower
-case. If the argument to
-<a href="#ENDNOTE_STRING">ENDNOTE_STRING</a>
-is in caps/lower case and <strong>ENDNOTE_STRING_CAPS</strong> is
-on, this is exactly what will happen.
-<p>
-<strong>Mom</strong>'s default is to capitalize the endnotes-pages
-head string.
-<p>
-
-<!---ENDNOTE_TITLE--->
-
-<a name="ENDNOTES_DOC_TITLE"><h2><u>4. Endnote document-identification title</u></h2>
-<a name="ENDNOTE_TITLE"><h3><u>*Endnote document-identification title string</u></h3></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_TITLE</strong> &quot;&lt;title to identify a document in endnotes&gt;&quot;</nobr>
-
-<p>
-By default, <strong>mom</strong> identifies the document(s) to which
-endnotes belong by the document title(s) given to the
-<a href="docprocessing.html#TITLE">TITLE</a>
-macro. If you'd want her to identify the document(s) another way,
-just invoke <strong>ENDNOTE_TITLE</strong> with the identifying
-title you want, surrounded by double-quotes.
-<p>
-If you don't want any identifying title, invoke
-<strong>ENDNOTE_TITLE</strong> with a blank argument (either two
-double-quotes side by side -- <kbd>&quot;&quot;</kbd> -- or no
-argument at all). This is particularly useful if you have a single
-(i.e. non-collated) document and find having the document's title
-included in the endnotes redundant.
-<p>
-
-<!---ENDNOTE_TITLE_CONTROL--->
-
-<a name="ENDNOTE_TITLE_CONTROL"><h3><u>*Endnote document-identification title control</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.ENDNOTE_TITLE_FAMILY default = prevailing document family; default is Times Roman
-.ENDNOTE_TITLE_FONT default = bold
-.ENDNOTE_TITLE_SIZE* default = 0
-.ENDNOTE_TITLE_QUAD default = left
-
-*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
-</pre>
-
-<!---ENDNOTE_TITLE_UNDERSCORE--->
-
-<a name="ENDNOTE_TITLE_UNDERSCORE"><h3><u>*Endnote document-identification title underscoring</h3></u></a>
-<p>
-<nobr>Macro: <strong>ENDNOTE_TITLE_UNDERSCORE</strong> toggle</nobr>
-
-<p>
-Invoked by itself, <strong>ENDNOTE_TITLE_UNDERSCORE</strong> will
-underscore the endnote document-identification title(s). Invoked with any
-other argument, the macro disables underscoring of the title(s).
-<p>
-<strong>Mom</strong>'s default is to underscore the document-identification title, therefore if you want no underscoring, you must
-insert <kbd>.ENDNOTE_TITLE_UNDERSCORE OFF</kbd> (or <kbd>QUIT, X, NO,
-NONE,</kbd> etc.) into your document prior to outputting endnotes with
-<a href="#ENDNOTES">ENDNOTES</a>.
-<p>
-
-<!---ENDNOTE_NUMBERING--->
-
-<a name="ENDNOTES_NUMBERING"><h2><u>5. Endnotes-pages endnote numbering style</u></h2>
-
-<a name="ENDNOTE_MARKER_STYLE"><h3><u>*Endnote marker style</u></h3></a>
-<p>
-The macro to control how endnotes are referenced is
-<strong>ENDNOTE_MARKER_STYLE</strong>.
-<p>
-By default, <strong>mom</strong> places superscript numbers in
-<a href="definitions.html#RUNNING">running text</a>
-to identify endnotes. However, if you have
-<a href="#NUMBER_LINES">line-numbering</a>
-turned on, you may instruct <strong>mom</strong> not to put
-superscript numbers in the running text, but rather to reference
-endnotes by line number. The command to do this is
-<p>
-<pre>
- .ENDNOTE_MARKER_STYLE LINE
-</pre>
-
-With <strong>ENDNOTE_MARKER_STYLE LINE</strong>, <strong>mom</strong>
-will identify endnotes either by single line numbers, or line
-ranges. If what you want is a single line number, you need only
-invoke <strong>.ENDNOTE</strong>, <em>without terminating the text
-line before it with</em> <strong>\c</strong>, at the appropriate
-place in running text. (Should you wish to revert to
-<strong>mom</strong>'s default behaviour of placing a superscript
-number in the text to identify an endnote, you can invoke
-<strong>ENDNOTE_MARKER_STYLE</strong> with the argument,
-<strong>NUMBER</strong>. It is not advisable to switch marker
-styles within a single document, for aesthetic reasons, but there
-is nothing to prevent you from doing so.)
-<p>
-If you want a range of line numbers (e.g.&nbsp;[5-11]&nbsp;),
-insert, directly into the first line of the range you want, the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<strong>\*[EN-MARK]</strong>. For the terminating line number of
-the range, you need only invoke <strong>.ENDNOTE</strong>, (again,
-without attaching <strong>\c</strong> to the text line before it).
-<strong>Mom</strong> is smart enough to figure out that where
-<strong>ENDNOTE</strong> was invoked represents the terminating
-line number.
-<a name="ENDNOTE_LINENUMBER_GAP"></a>
-<p>
-Given the impossibility of knowing, in advance, the "string length"
-of all the line numbers or ranges of line numbers that will be used
-in endnotes (the string length of 12 is two; the string length
-of 12-15 is 5), <strong>mom</strong> cannot "hang" line numbers
-and guarantee that they, and the endnote text, will align in a
-visually pleasing manner. Consequently, <strong>mom</strong> sets
-the entirety of line-numbered endnotes completely flush left,
-<strong>including the line numbers themselves</strong>. The line
-numbers (by default, enclosed in square brackets) are separated from
-the beginning of each endnote by a gap, so that a line-numbered
-endnote looks approximately like this:
-<p>
-<pre>
- [1-2] Notwithstanding, Frye later asserts that Christianity
- is "a ghost with the chains of a foul historical record of
- cruelty clanking behind it."
-</pre>
-
-The default gap for <strong>PRINTSTYLE TYPESET</strong> and
-<strong>PRINSTYLE TYPEWRITE</strong> is 1.5
-<a href="definitions.html#TERMS_EM">ems</a>.
-You can change the size of the gap with the macro,
-<strong>ENDNOTE_LINENUMBER_GAP</strong>, which takes, as its single
-argument, the size of the gap. The argument requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-so, for example, to change the gap to 2
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>,
-you'd do
-<p>
-<pre>
- .ENDNOTE_LINENUMBER_GAP 2P
-</pre>
-
-<a name="ENDNOTE_LINENUMBER_BRACKETS"></a>
-By default, <strong>mom</strong> puts endnote line numbers inside
-square brackets. The style of the brackets may be changed with
-the macro, <strong>ENDNOTE_LINENUMBER_BRACKETS</strong>, which
-takes one of three possible arguments: <strong>PARENS</strong>
-("round" brackets), <strong>SQUARE</strong> (the default) or
-<strong>BRACES</strong> (curly braces). If you prefer a
-shortform, the arguments, <strong>(</strong>, <strong>[</strong> or
-<strong>{</strong> may be used instead.
-<a name="ENDNOTE_LINENUMBER_SEPARATOR"></a>
-<p>
-If you don't want the numbers enclosed in brackets, you may tell
-<strong>mom</strong> to use a "separator" instead. A common
-separator would be the colon, but it can be anything you like. The
-macro to do this is <strong>ENDNOTE_LINENUMBER_SEPARATOR</strong>,
-which takes, as its single argument, the separator you want.
-(If the argument contains spaces, don't forget to enclose the
-argument in double-quotes.) The separator can be composed of
-any legal groff character, or any combination of characters.
-For example, to get a colon separator after the line number in
-line-numbered endnotes, you'd do
-<p>
-<pre>
- .ENDNOTE_LINENUMBER_SEPARATOR :
-</pre>
-
-<a name="ENDNOTE_NUMBER_CONTROL"><h3><u>*Endnote numbering style control</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-Please note that the control macros for endnote numbering affect only
-the numbers that appear on the endnotes pages themselves, not the
-endnote numbers that appear in the body of the document(s).
-<p>
-<pre>
-.ENDNOTE_NUMBER_FAMILY default = prevailing document family; default is Times Roman
-.ENDNOTE_NUMBER_FONT default = bold
-.ENDNOTE_NUMBER_SIZE* default = 0
-
-*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
-</pre>
-
-<a name="ENDNOTE_NUMBER_ALIGNMENT"><h3><u>*Endnote numbering alignment</u></h3></a>
-<p>
-By default, <strong>mom</strong> hangs the numbers on endnotes pages,
-aligned right to two placeholders, producing this:
-<p>
-<a name="ENDNOTE_NUMBERING_ALIGNMENT_EXAMPLE"></a>
-<pre>
- 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore et
- dolore magna aliquyam erat, sed diam voluptua.
-
- 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore et
- dolore magna aliquyam erat, sed diam voluptua.
-</pre>
-
-The macros to alter this behaviour are
-<br>
-<ul>
- <li><a href="#ENDNOTE_NUMBERS_ALIGN_RIGHT"><strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong></a>
- <li><a href="#ENDNOTE_NUMBERS_ALIGN_LEFT"><strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong></a>
-</ul>
-<br>
-<hr width="66%" align="left">
-
-<!---ENDNOTE_NUMBERS_ALIGN_RIGHT--->
-
-<p>
-<a name="ENDNOTE_NUMBERS_ALIGN_RIGHT">
- <nobr>Macro: <strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong> &lt;number of placeholders&gt;</nobr>
-</a>
-<p>
-<strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong> takes one (non-optional)
-argument: the number of placeholders to reserve for right alignment of
-endnote numbers.
-<p>
-For example, if you have fewer than ten endnotes, you might want to do
-<p>
-<pre>
- .ENDNOTE_NUMBERS_ALIGN_RIGHT 1
-</pre>
-
-which would ensure that the endnote numbers hang, but are all flush
-with the page's left margin. If, god help you, you have over a hundred
-endnotes, you'd want to do
-<p>
-<pre>
- .ENDNOTE_NUMBERS_ALIGN_RIGHT 3
-</pre>
-
-to ensure that the numbers hang and are properly right-aligned.
-<p>
-
-<hr width="66%" align="left">
-
-<!---ENDNOTE_NUMBERS_ALIGN_LEFT--->
-
-<p>
-<a name="ENDNOTE_NUMBERS_ALIGN_LEFT">
- Macro: <strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong>
-</a>
-<p>
-If you don't want the endnote numbers to hang and right-align, invoke
-<strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong>, which doesn't require any
-argument. This disables hanging and right-alignment of endnote numbers,
-so that the example
-<a href="#ENDNOTE_NUMBERING_ALIGNMENT_EXAMPLE">above</a>
-comes out like this:
-<p>
-<pre>
- 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore et
- dolore magna aliquyam erat, sed diam voluptua.
-
- 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod tempor invidunt ut labore et
- dolore magna aliquyam erat, sed diam voluptua.
-</pre>
-<hr>
-
-<!====================================================================>
-
-<a name="MARGIN_NOTES_INTRO"><h2><u>Margin notes</u></h2></a>
-<ul>
- <li><a href="#MARGIN_NOTES_BEHAVIOUR">Margin notes behaviour
- <ul>
- <li><a href="#MARGIN_NOTES_VERTICAL">Adjusting the vertical position of margin notes</a>
- </ul>
- <li><a href="#MN_INIT">Macro: MN_INIT</a> -- initialize margin notes
- <li><a href="#MN">Tag: MN</a>
-</ul>
-
-<p>
-Margin notes are short annotations that appear in either the left
-or right margin of a document. Sometimes they comment on the text.
-Sometimes they assist in following the "flow" of a document by
-summarizing the subject of a portion of text. Sometimes they're
-comments to yourself in a draft copy.
-<p>
-The margin notes macros and routines in om.tmac
-(<strong>mom</strong>) are "mommified" versions of the margin notes
-macros and routines written by Werner Lemberg and patched by Gaius
-Mulley.
-<p>
-
-<a name="MARGIN_NOTES_BEHAVIOUR"<h3><u>Margin notes behaviour</u></h3>
-<p>
-First things first: before you enter your first margin note, you
-must "initialize" margin notes with
-<a href="#MN_INIT">MN_INIT</a>.
-<strong>MN_INIT</strong> sets up the style parameters for margin
-notes, including things like
-<a href="definitions.html#TERMS_FONT">font</a>,
-<a href="definitions.html#TERMS_FAMILY">family</a>
-and
-<a href="definitions.html#TERMS_LEADING">leading</a>.
-<p>
-After initializing margin notes, you create margin notes with the
-<a href="#MN">MN</a>
-macro. Based on the argument you pass <strong>MN</strong>, your
-margin note will go in either the left or the right margin.
-<p>
-Margin notes are tricky from a typographic standpoint with respect
-to vertical placement. Since the leading of margin notes may
-differ from that of
-<a href="definitions.html#TERMS_RUNNING">running text</a>,
-it's impossible for <strong>mom</strong> to guess whether to align
-the first lines of margin notes with a document
-<a href="definitions.html#TERMS_BASELINE">baseline</a>,
-whether to align the last lines of margin notes with a document
-baseline, or whether to center them, vertically, so that neither
-first nor last line aligns with anything!
-<p>
-Given this difficulty, <strong>mom</strong> always aligns the first
-line of any margin note with a document baseline. If you want a
-different behaviour, you must adjust the position(s) of margin
-notes yourself, on a note by note basis. (See
-<a href="#MARGIN_NOTES_VERTICAL">Adjusting the vertical position of margin notes</a>.)
-<p>
-Generally speaking, <strong>mom</strong> tries to place margin
-notes at the point where you invoke the tag,
-<a href="#MN">MN</a>.
-However, in the event that a margin note runs deep, she may not
-be able to place a subsequent margin note exactly where you want.
-In such an instance, <strong>mom</strong> will "shift" the margin
-note down on the page, placing it one (margin note)
-linespace beneath the previous margin note (plus whatever vertical
-space is required to get the first line to line up with a baseline
-of running text). A warning will be issued, letting you know this
-has happened, and where.
-<p>
-Sometimes, if a margin note has to be shifted down, there simply
-isn't enough room to start the margin note on the page on which
-<strong>MN</strong> is invoked. In that case, <strong>mom</strong>
-ignores the margin note entirely and issues a warning, letting you
-know what she's done, and where.
-<p>
-In the event that a margin note, sucessfully begun on a page,
-runs past your bottom margin (or the last line before footnotes
-begin), the margin note will "flow" onto the next page. If it is a
-"left" margin note, it will continue in the left margin. If it is a
-"right" margin note, it will continue in the right margin.
-<p>
-If your document is being set in two columns, <strong>mom</strong>
-will sensibly and automatically set all margin notes pertaining
-to the left column in the left margin, and all margin notes
-pertaining to the right column in the right margin, regardless of
-the "direction" argument you give the <strong>MN</strong> tag. If
-you try to use <strong>MN</strong> in documents of more than two
-columns, <strong>mom</strong> will ignore all margin notes, and
-issue warning for each.
-<p>
-<h3><u><a name="MARGIN_NOTES_VERTICAL">Adjusting the vertical position of margin notes</a></u></h3>
-<p>
-When the
-<a href="definitions.html#TERM_LEADING">leading</a>
-of margin notes differs from the leading used throughout a document,
-you may want to adjust the vertical position of individual margin
-notes. This is most often going to be the case with margin notes
-that end near the bottom of the page, where you want the last line of
-the margin note to line up with the last line of text on the page.
-<p>
-Adjustments to the vertical position of margin notes must be done
-inside the margin note (i.e. after <strong>MN</strong>), at the
-top, before entering text. The commands to use are
-\!<a href="typesetting.html#ALD">.ALD</a>
-(to lower the margin note), and
-\!<a href="typesetting.html#RLD">.RLD</a>
-(to raise it). The <strong>\!</strong> <em>must</em> precede the
-macros, or they won't have any effect.
-
-<p>
-<hr width="66%" align="left">
-
-<!---MN_INIT--->
-
-<p>
-<a name="MN_INIT">
- <nobr>Macro: <strong>MN_INIT</strong>&nbsp;[ ragged | symmetric ] &lt; left-width right-width gutter family+font point-size lead colour hyphenation-flags &gt;</nobr>
-</a>
-<p>
-Before you enter your first margin note, you must initialize
-all the parameters associated with margin notes with
-<strong>MN_INIT</strong>. If you forget to do so,
-<strong>mom</strong> will issue a warning and abort.
-<p>
-The argument list is quite long; an
-explanation of each argument follows. Any argument whose value you
-want to be the default must be entered as "" (i.e. two
-double-quotes with no space between them). Defaults for each
-argument are given in the explanation below.
-<p>
-<strong>[ ragged | symmetric ]</strong>
-<br>
-If the first argument is "ragged", both left and right margin notes
-will be flush left. If the first argument is "symmetric", left
-margin notes will be set flush <em>right</em>, and right margin
-notes will be set flush <em>left</em>. The effect is something
-like this:
-<p>
-<pre>
- A left This is a meaningless batch A right
- margin note of text whose sole purpose is margin note
- with just to demonstrate how the sym- with just
- a few words metric argument to MN sets left a few words
- in it. and right margin notes. in it.
-</pre>
-
-
-If the argument is omitted,
-or given as "", both left and right margin notes will be set
-justified. (Justified is usually not a good idea, since the narrow
-measure of margin notes makes pleasing justification a near
-impossibility.)
-<p>
-<strong>left-width</strong>
-<br>
-The width of left margin notes. A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-must be appended directly onto the argument. The default is to set
-left margin notes right out to the edge of the page, which is
-almost certainly not what you want, so you should give a value for
-this argument if using left margin notes.
-<p>
-<strong>right-width</strong>
-<br>
-The width of right margin notes. A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-must be appended directly onto the argument. The default is to set
-right margin notes right out to the edge of the page, which is
-almost certainly not what you want, so you should give a value for
-this argument if using right margin notes.
-<p>
-<strong>gutter</strong>
-<br>
-The
-<a href="definitions.html#TERMS_GUTTER">gutter</a>
-between margin notes and
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-must be appended directly onto the argument. The gutter applies to
-both left and right margin notes. The default is 1
-<a href="definitions.html#TERMS_EM">em</a>.
-<p>
-<strong>font</strong>
-<br>
-The family+font for margin notes. Yes, that's right: the family
-PLUS font combo. For example, if you want Times Roman Medium,
-the argument must be TR. If you want Palatino Medium Italic, the
-argument must be PI. The default is the same family+font combo used
-for a document's paragraph text.
-<p>
-<strong>lead</strong>
-<br>
-The
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of margin notes. <strong>lead</strong> uses
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-as its unit of measure, so don't tack a unit of measure onto the
-end of the argument. The default lead is the same leading as
-is used for paragraph text (i.e. the document's base leading).
-For convenience and clarity, you may also give the word,
-<strong>DOC</strong>, to this argument, which indicates that the
-leading should be the same as the document's base leading.
-<p>
-<strong>colour</strong>
-<br>
-The colour of margin notes. The colour must be pre-initialized
-with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-The default is black.
-<p>
-<strong>hyphenation-flags</strong>
-<br>
-A number telling <strong>groff</strong> how you want margin notes
-hyphenated.
-<p>
-<pre>
- 1 = hyphenate without restrictions
- 2 = do not hyphenate the last word on the page
- 4 = do not hyphenate the last two characters of a word
- 8 = do not hyphenate the first two characters of a word
-</pre>
-
-The values can be added together, so, for example, if you want
-neither the first two nor the last two characters of words
-hyphenated, the hyphenation-flag would be 12. The default value is
-14 (i.e. 2+4+8).
-
-<p>
-<hr width="66%" align="left">
-
-<!---MN_INIT--->
-
-<p>
-<a name="MN">
- <nobr>Macro: <strong>MN</strong>&nbsp;LEFT|RIGHT | &lt;anything&gt;</nobr>
-</a>
-<p>
-Once you've initialized margin notes with
-<a href="#MN_INIT">MN_INIT</a>,
-you can enter margin notes any time you like with
-<strong>MN</strong>. An argument of <strong>LEFT</strong> will set
-a left margin note. An argument of <strong>RIGHT</strong> will set
-a right margin note.
-<p>
-Any argument, such as <strong>OFF</strong> (or
-<strong>QUIT</strong>, <strong>END</strong>, <strong>X</strong>,
-etc) exits the current margin note.
-
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="BLANK_PAGE_TITLE"><h2><u>Inserting a blank page into the document</u></h2></a>
-<p>
-<a name="BLANK_PAGE">
- <nobr>Macro: <strong>BLANKPAGE</strong> &lt;# of blank pages to insert&gt;</nobr>
-</a>
-
-<p>
-This one does exactly what you'd expect -- inserts a blank page into
-the document. <strong>Mom</strong> silently increments the page
-number of every blank page and keeps track of
-<a href="rectoverso.html#RECTO_VERSO">recto/verso</a>
-stuff, but otherwise, does nothing. It's up to you, the user, to
-figure out what to do with this feature. However, it's worth
-noting that without it, inserting completely blank pages, to use
-a vernacular Québécois phrase, &quot;c'est pas évident&quot;
-(somewhere between &quot;isn't easy&quot;, &quot;isn't
-obvious&quot; and &quot;isn't fun&quot;).
-<p>
-The argument to <strong>BLANK_PAGE</strong> is the number of blank
-pages to insert. The argument is not optional, hence even if you
-only want one blank page, you have to tell <strong>mom</strong>:
-<p>
-<pre>
- .BLANKPAGE 1
-</pre>
-
-<a name="FINIS_INTRO"><h2><u>Terminate document processing</u></h2></a>
-<ul>
- <li><a href="#FINIS">Tag: FINIS</a>
- <li><a href="#FINIS_STRING">Changing the FINIS string</a>
-</ul>
-
-<p>
-The use of <strong>FINIS</strong> is optional. If you invoke it
-(at the end of a document before
-<a href="#TOC">TOC</a>
-or
-<a href="#ENDNOTES">ENDNOTES</a>),
-<strong>mom</strong>
-deposits the word END, centred after a blank line, beneath the last
-line of the document. END is enclosed between
-<a href="definitions.html#TERMS_EM">em-dashes</a>.
-<p>
-<strong>Please note</strong> that in versions of
-<strong>mom</strong> prior to 1.1.9, <strong>FINIS</strong> used to
-turn off
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-(if they were on) and page numbering (if page numbers were at the
-bottom of the page). Damned if I can recall why I thought anyone
-would want this behaviour, but it has been removed.
-<p>
-If you're writing in a language other than English, you can
-change what <strong>mom</strong> prints for END with
-the control macro <strong>FINIS_STRING</strong>.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="TOC_INTRO"><h2><u>Table of contents</u></h2></a>
-<ul>
- <li><a href="#TOC_BEHAVIOUR">TOC behaviour</a>
- <li><a href="#TOC">Macro: TOC</a> -- tell <strong>mom</strong> to output a table of contents
- <li><a href="#TOC_CONTROL">TOC control macros</a>
-</ul>
-
-<p>
-Want a table of contents for your document? Easy. Just enter
-<p>
-<pre>
- .TOC
-</pre>
-
-as the very last macro of your document file. <strong>Mom</strong>
-will have picked up all document titles (in
-<a href="docprocessing.html#COLLATE">collated</a>
-documents), all heads, subheads, and paragraph heads, as well as any
-endnotes pages that have been output, and assigned them the
-appropriate page number (and page numbering style). Talk about a
-no-brainer!
-
-That said, tables of contents (tocs) have even more control macros
-than endnotes. As always, the reason for so many control macros is
-so that if you want to change just about any aspect of the toc's
-typographic appearance, you can. <strong>Mom</strong> is all about
-simplicity AND flexibility.
-<p>
-
-<a name="TOC_BEHAVIOUR"><h3><u>TOC behaviour</u></h3></a>
-<p>
-When you output a toc (with
-<a href="#TOC">TOC</a>),
-<strong>mom</strong> finishes processing the last page of your document,
-then breaks to a new page for printing the toc.
-<p>
-<strong>Mom</strong> follows standard typesetting conventions for
-tables of contents. To this end, if
-<a href="headfootpage.html#HEADERS">HEADERS</a>
-are on for the document, the first page of the toc has no page
-header, but does have a first page (roman numeral) number, always
-&quot;1&quot;, in the bottom margin. If
-<a href="headfootpage.html#FOOTERS">FOOTERS</a>
-are on for the document, the first page has neither a footer, nor a
-page number in the top margin. (If you absolutely must have a page
-footer on the first page of the toc, simply invoke
-<a href="headfootpage.html#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a>
-immediately before <strong>TOC</strong>.) Subsequent toc pages have
-both page headers or footers and a page number.
-<p>
-Entries in the toc are hierarchically indented, as you would
-expect. By default, each type of entry (e.g. a head or a subhead)
-is set in a different font as well. If any of heads, subheads or
-paragraph heads are numbered in the body of the document, they are
-also numbered in the toc. Head numbering in the toc is NOT
-concatenated as it is in the body of the document, which would be
-visually redundant in a toc.
-<p>
-Tocs are never set in columns, regardless of whether the rest of
-the document is. Lastly, if
-<a href="rectoverso.html#RECTO_VERSO">recto/verso</a>
-printing is enabled, the toc respects it. This sometimes leads to
-tocs that begin with the wrong margins, but the margins can be
-corrected either by outputting a
-<a href="#BLANK_PAGE">BLANKPAGE</a>
-or by using the toc control macro
-<a href="#TOC_RV_SWITCH">TOC_RV_SWITCH</a>.
-<p>
-The overall toc
-<a href="definitions.html#TERMS_FAMILY">family</a>,
-<a href="definitions.html#TERMS_PS">point size</a>
-and
-<a href="definitions.html#TERMS_LEADING">lead</a>
-can be altered with the toc
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>,
-as can the family,
-<a href="definitions.html#TERMS_FONT">font</a>,
-point size and indent of each type of toc entry (i.e. title, head,
-subhead, paragraph head). Furthermore, the page numbering style
-can be changed, as can the amount of visual space reserved for toc
-entry page numbers.
-<p>
-
-<!---TOC--->
-
-<hr width="66%" align="left">
-<p>
-<a name="TOC">Macro: <strong>TOC</strong></a>
-
-<p>
-If you want a toc, just put <strong>TOC</strong> as the last macro
-in a document. <strong>Mom</strong> takes care of the rest.
-<p>
-<hr width="66%" align="left">
-
-<a name="TOC_CONTROL"><h3><u>TOC control macros</u></h3></a>
-<p>
-Toc entries are not actually processed when <strong>mom</strong>
-collects them, so you can put any toc control macros anywhere you
-like in your document. Some may prefer to place them at the top of
-the file. Others may prefer to place them just before outputting
-the toc. The choice is yours.
-<br>
-<ol>
- <li><a href="#TOC_GENERAL"><strong>General toc page style control</strong></a>
- <ul>
- <li><a href="#TOC_FAMILY">Base family for toc pages</a>
- <li><a href="#TOC_PT_SIZE">Base point size for toc pages</a>
- <li><a href="#TOC_LEAD">Leading of toc pages</a>
- </ul>
- <li><a href="#TOC_PAGENUMBERING"><strong>Toc page numbering</strong></a>
- <ul>
- <li><a href="#PAGINATE_TOC">Turn toc pagination on or off</a>
- <li><a href="#TOC_PAGENUM_STYLE">Toc page numbering style</a>
- </ul>
- <li><a href="#TOC_HEADER"><strong>Changing the toc header (title), string and style</strong></a>
- <ul>
- <li><a href="#TOC_HEADER_STRING">Changing the string (title)</a>
- <li><a href="#TOC_HEADER_STYLE">Changing the string (title) style</a>
- </ul>
- <li><a href="#TOC_STYLE"><strong>Changing the style for toc entries</strong></a>
- <ul>
- <li><a href="#TOC_INDENT">The toc _INDENT control macros</a>
- <li><a href="#TOC_TITLE">Changing the style for toc title entries</a>
- <li><a href="#TOC_HEAD">Changing the style for toc head entries</a>
- <li><a href="#TOC_SUBHEAD">Changing the style for toc subhead entries</a>
- <li><a href="#TOC_PARAHEAD">Changing the style for toc paragraph head entries</a>
- <li><a href="#TOC_PN">Changing the style for toc page number listings</a>
- </ul>
- <li><a href="#TOC_ADDITIONAL"><strong>Additional toc control macros</strong></a>
- <ul>
- <li><a href="#TOC_TITLE_ENTRY">Change the wording of a toc title entry</a>
- <li><a href="#TOC_APPENDS_AUTHOR">Append author(s) to toc title entries</a>
- <li><a href="#TOC_RV_SWITCH">TOC_RV_SWITCH</a>
- <li><a href="#TOC_PADDING">TOC_PADDING</a>
- </ul>
-</ol>
-<hr>
-
-<a name="TOC_GENERAL"><h2><u>1. General toc page style control</u></h2>
-
-<a name="TOC_FAMILY"><h3><u>*Toc family</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-Set the family of toc pages with <strong>TOC_FAMILY</strong>, which
-establishes the default family for every element of a toc page,
-including the toc title (&quot;Contents&quot;) and the page number
-in the top or bottom margin. The default is the prevailing document
-family.
-<p>
-All elements on a toc page also have their own _FAMILY
-control macros, which override the default set by
-<strong>TOC_FAMILY</strong>.
-<p>
-
-<!---TOC_PT_SIZE--->
-
-<a name="TOC_PT_SIZE"><h3><u>*Toc point size</u></h3></a>
-<p>
-<nobr>Macro: <strong>TOC_PT_SIZE</strong> &lt;base type size of the toc&gt;</nobr>
-
-<p>
-Unlike most other control macros that deal with size of document
-elements, <strong>TOC_PT_SIZE</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument
-represents the size of toc type in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .TOC_PT_SIZE 12
-</pre>
-
-sets the base point size of type for the toc to 12 points, whereas
-<p>
-<pre>
- .TOC_PT_SIZE .6i
-</pre>
-
-sets the base point size of type for the toc to 1/6 of an inch.
-<p>
-The type size set with <strong>TOC_PT_SIZE</strong> forms the basis
-from which the point size of other toc page elements are calculated.
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is 12.5 points (the same default size used in the body of the
-document).
-<p>
-
-<!---TOC_LEAD--->
-
-<a name="TOC_LEAD"><h3><u>*Toc lead</u></h3></a>
-<p>
-<nobr>Macro: <strong>TOC_LEAD</strong> &lt;leading of the toc&gt; [ ADJUST ]</nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
-
-<p>
-Unlike most other control macros that deal with leading of document
-elements, <strong>TOC_LEAD</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument
-represents the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of tocs in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .TOC_LEAD 14
-</pre>
-
-sets the base leading of type on the endnotes page to 14
-points, whereas
-<p>
-<pre>
- .TOC_LEAD .5i
-</pre>
-
-sets the base leading of type on the endnotes page to 1/2 inch.
-<p>
-If you want the leading of toc pages adjusted to fill the
-page, pass <strong>TOC_LEAD</strong> the optional argument
-<strong>ADJUST</strong>. (See
-<a href="docprocessing.html#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
-for an explanation of leading adjustment.)
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is the prevailing document lead (16 by default), adjusted.
-<p>
-<strong>NOTE:</strong> Even if you give <strong>mom</strong> a
-<strong>DOC_LEAD_ADJUST OFF</strong> command, she will still, by
-default, adjust toc leading. You MUST enter
-<strong>TOC_LEAD &lt;lead&gt;</strong> with no
-<strong>ADJUST</strong> argument to disable this default behaviour.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Tocs are always double-spaced in
-<strong>PRINTSTYLE TYPEWRITE</strong>, regardless of whether the
-body of the document is single-spaced.
-
-<a name="TOC_PAGENUMBERING"><h2><u>2. Toc page numbering</u></h2></a>
-<p>
-The page numbering of toc pages is controlled by the same macros
-that control
-<a href="headfootpage.html#PAGINATION">document page numbering</a>,
-except
-<a href="headfootpage.html#PAGENUM">PAGENUM</a>
-(tocs always start on page 1). The defaults are the same as the
-rest of the document.
-<p>
-If you wish to change some aspect of toc pagination, use the
-document pagination control macros immediately prior to
-<strong>.TOC</strong>.
-<p>
-A special macro,
-<a href="#TOC_PAGENUM_STYLE">TOC_PAGENUM_STYLE</a>
-controls the style of toc pages page numbers.
-<p>
-
-<hr width="33%" align="left">
-
-<!---PAGINATE_TOC--->
-
-<p>
-<a name="PAGINATE_TOC">
- <nobr>Macro: <strong>PAGINATE_TOC</strong> &lt;toggle&gt;</nobr>
-</a>
-<p>
-By default, <strong>mom</strong> paginates the toc. If you'd like
-her not to, do
-<p>
-<pre>
- .PAGINATE_TOC OFF
-</pre>
-
-<strong>NOTE:</strong> Simply invoking <strong>PAGINATION
-OFF</strong> or <strong>PAGINATE OFF</strong> disables toc
-pagination <em>for the first toc page only.</em> You MUST use
-<strong>.PAGINATE_TOC OFF</strong> to disable toc pagination, even
-if pagination is turned off elsewhere in your document.
-<p>
-
-<hr width="33%" align="left">
-<p>
-
-<!---TOC_PAGENUM_STYLE--->
-
-<a name="TOC_PAGENUM_STYLE">
- <nobr>Macro: <strong>TOC_PAGENUM_STYLE</strong> &lt;DIGIT | ROMAN | roman | ALPHA | alpha&gt;</nobr>
-</a>
-<p>
-By default, <strong>mom</strong> uses roman numerals to number
-toc pages. Use <strong>TOC_PAGENUM_STYLE</strong> if you'd prefer
-something else. For example, to have standard digits instead of
-roman numerals, do the following:
-<p>
-<pre>
- .TOC_PAGENUM_STYLE DIGIT
-</pre>
-
-<hr width="33%" align="left">
-
-<a name="TOC_HEADER"><h2><u>3. Changing the toc header (title) string and style</u></h2></a>
-<p>
-The toc header string is the title that appears at to top of the
-toc. By default, it's &quot;Contents&quot;. If you'd like
-something else, say, &quot;Table of Contents&quot;, do
-<p>
-<a name="TOC_HEADER_STRING"></a>
-<pre>
- .TOC_HEADER_STRING "Table of Contents"
-</pre>
-
-<a name="TOC_HEADER_STYLE"></a>
-The style of the toc header (title) is managed by the usual control
-macros (see
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-<pre>
- .TOC_HEADER_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_HEADER_FONT default = bold
- .TOC_HEADER_SIZE default = +4
- .TOC_HEADER_QUAD default = left
-</pre>
-
-<a name="TOC_STYLE"><h2><u>4. Changing the style for toc entries</u></h2></a>
-<p>
-&quot;Toc entries&quot; refers to titles, heads, subheads and
-paragraph heads as they appear in the toc. Their style is managed
-by the usual
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>,
-starting with TOC_
-<p>
-
-<a name="TOC_INDENT"><h3><u>The toc _INDENT control macros</u></h3></a>
-<p>
-The toc control macros that end in _INDENT all take a single
-argument that requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-The argument is the distance to indent the entry, always measured
-from the left margin. For example,
-<p>
-<pre>
- .TOC_HEAD_INDENT 2P
-</pre>
-
-indents head entries 2
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
-from the left margin.
-<p>
-
-<a name="TOC_TITLE"><h3><u>*Changing the style for toc title entries</u></h3></a>
-<p>
-(See
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-Toc title entries are the titles of documents that have been
-<a href="rectoverso.html#COLLATE">collated</a>
-together.
-<p>
-<pre>
- .TOC_TITLE_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_TITLE_FONT default = bold italic
- .TOC_TITLE_SIZE default = +0
- .TOC_TITLE_INDENT default = 0 for TYPESET and TYPEWRITE
-</pre>
-
-<a name="TOC_HEAD"><h3><u>*Changing the style for toc head entries</u></h3></a>
-<p>
-(See
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-Toc head entries are main heads that appear in the body of a
-document.
-<p>
-<pre>
- .TOC_HEAD_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_HEAD_FONT default = bold
- .TOC_HEAD_SIZE default = +.5
- .TOC_HEAD_INDENT default = 18p for TYPESET; 2m for TYPEWRITE
-</pre>
-
-<a name="TOC_SUBHEAD"><h3><u>*Changing the style for toc subhead entries</u></h3></a>
-<p>
-(See
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-Toc subhead entries are subheads that appear in the body of a
-document.
-<p>
-<pre>
- .TOC_SUBHEAD_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_SUBHEAD_FONT default = roman
- .TOC_SUBHEAD_SIZE default = +0
- .TOC_SUBHEAD_INDENT default = 30p for TYPESET; 4m for TYPEWRITE
-</pre>
-
-<a name="TOC_PARAHEAD"><h3><u>*Changing the style for toc paragraph head entries</u></h3></a>
-<p>
-(See
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-Toc paragraph head entries are paragraph heads that appear in the
-body of a document.
-<p>
-<pre>
- .TOC_PARAHEAD_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_PARAHEAD_FONT default = italic
- .TOC_PARAHEAD_SIZE default = +0
- .TOC_PARAHEAD_INDENT default = 42p for TYPESET; 6m for TYPEWRITE
-</pre>
-
-<a name="TOC_PN"><h3><u>*Changing the style for toc paragraph page number listings</u></h3></a>
-<p>
-(See
-<a href="#CONTROL_MACRO_ARGS">arguments to the control macros</a>).
-<p>
-Toc paragraph head entries are paragraph heads that appear in the
-body of a document.
-<p>
-<pre>
- .TOC_PN_FAMILY default = prevailing doc family (Times Roman in TYPEWRITE)
- .TOC_PN_FONT default = roman
- .TOC_PN_SIZE default = +0
-</pre>
-
-<a name="TOC_ADDITIONAL"><h2><u>5. Additional toc macros</u></h2></a>
-<p>
-The following macros allow you to switch page margins should
-they be incorrect for recto/verso printing, to establish how
-many placeholders to leave for page listings, and to have
-<strong>mom</strong> append author(s) to toc title entries.
-<p>
-
-<hr width="33%" align="left">
-
-<!---TOC_RV_SWITCH--->
-
-<p>
-<a name="TOC_RV_SWITCH">
- Macro: <strong>TOC_RV_SWITCH</strong>
-</a>
-<p>
-<strong>TOC_RV_SWITCH</strong> doesn't take an argument. It simply
-instructs <strong>mom</strong> to switch the left and right margins
-of
-<a href="rectoverso.html#RECTO_VERSO">recto/verso</a>
-documents should the toc happen to begin on an even page when you
-want an odd, or vice versa.
-<p>
-The same result can be accomplished by outputting a
-<a href="#BLANK_PAGE">BLANKPAGE</a>.
-<p>
-
-<hr width="33%" align="left">
-
-<!---TOC_TITLE_ENTRY--->
-
-<p>
-<a name="TOC_TITLE_ENTRY">
- <nobr>Macro: <strong>TOC_TITLE_ENTRY</strong> &lt;&quot;alternate wording for a title entry in the toc&quot;&gt;</nobr>
-</a>
-<p>
-In
-<a href="rectoverso.html#COLLATE">collated</a>
-documents, the title of each separate document appears in the table
-of contents. It may sometimes happen that you don't want the title
-as it appears in the toc to be the same as what appears in
-the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>.
-You might, for example, want to shorten it. Or, in the case of
-chapters where the docheader contains both a chapter number and a
-chapter title, like this
-<p>
-<pre>
- Chapter 6
- Burning Bush -- Maybe God Was Right
-</pre>
-
-you might want only the chapter title, not the chapter number, to
-show up in the toc. (By default, <strong>TOC</strong> generates
-both.)
-<p>
-If you want to change the wording of a title entry in the toc,
-simply invoke <strong>TOC_TITLE_ENTRY</strong> with the desired
-wording, enclosed in double-quotes. Using the example, above,
-<p>
-<pre>
- .CHAPTER 6
- .CHAPTER_TITLE "Burning Bush -- Maybe God Was Right"
- .TOC_TITLE_ENTRY "Burning Bush"
- .DOCTYPE CHAPTER
-</pre>
-
-would identify chapter 6 in the toc simply as &quot;Burning
-Bush&quot;.
-
-<p>
-
-<hr width="33%" align="left">
-
-<!---TOC_APPENDS_AUTHOR--->
-
-<p>
-<a name="TOC_APPENDS_AUTHOR">
- <nobr>Macro: <strong>TOC_APPENDS_AUTHOR</strong> &lt;none&gt; | &lt;&quot;name(s) of authors&quot;&gt;</nobr>
-</a>
-<p>
-In certain kinds of collated documents, different authors are
-responsible for the articles or stories contained within them. In
-such documents, you may wish to have the author or authors
-appended to the toc's title entry for each story or article.
-<p>
-If you invoke <strong>TOC_APPENDS_AUTHOR</strong> with no argument,
-<strong>mom</strong> appends the first argument you passed to
-<a href="docprocessing.html#AUTHOR">AUTHOR</a>
-to toc title entries, separated by a front-slash.
-<p>
-If you invoke <strong>TOC_APPENDS_AUTHOR</strong> with an argument
-(surrounded by double-quotes), <strong>mom</strong> will append it
-to the toc title entries instead. This is useful if you have
-multiple authors you wish to identify by last name only. For
-example, if three authors--Joe Blough, Jane Doe, and John
-Deere--are responsible for a single article
-<p>
-<pre>
- .TOC_APPENDS_AUTHOR "Blough et al."
-</pre>
-
-would be a good way to identify them in the toc.
-<p>
-
-<hr width="33%" align="left">
-
-<!---TOC_PADDING--->
-
-<p>
-<a name="TOC_PADDING">
- <nobr>Macro: <strong>TOC_PADDING</strong> &lt;# of placeholders to allow for page number listings&gt;</nobr>
-</a>
-<p>
-By default, <strong>mom</strong> allows room for 3 digits in the
-page number listings of tocs. If you'd like some other number of
-placeholders, say 2, do
-<p>
-<pre>
- .TOC_PADDING 2
-</pre>
-
-<!---FINIS--->
-
-<hr width="66%" align="left">
-<p>
-<a name="FINIS">
- Macro: <strong>FINIS</strong>
-</a>
-
-<p>
-The use of <strong>FINIS</strong> is optional, but if you use
-it, it should be the last macro you invoke in a document (before
-<a href="#ENDNOTES">ENDNOTES</a>
-or
-<a href="#TOC">TOC</a>).
-See
-<a href="#FINIS_INTRO">above</a>
-for a description of how <strong>FINIS</strong> behaves.
-<p>
-<strong>NOTE:</strong> If you don't use <strong>FINIS</strong>,
-and you don't want
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-(if they're on) or a page number at the bottom of the last page of
-a document, you have to turn them off manually, as the last two
-lines of your document file, like this:
-<p>
-<pre>
- .FOOTERS OFF
- .PAGINATE OFF
-</pre>
-
-<a name="FINIS_STRING"><h3><u>Changing the FINIS string</u></h3></a>
-
-<p>
-By default, <strong>FINIS</strong> prints the word
-END between
-<a href="definitions.html#TERMS_EM">em-dashes</a>.
-If you'd like <strong>mom</strong> to print something else
-between the dashes, use the <strong>FINIS_STRING</strong> macro
-(anywhere in the document prior to <strong>FINIS</strong>).
-<p>
-For example, if your document's in French, you'd do
-<p>
-<pre>
- .FINIS_STRING "FIN"
-</pre>
-
-Double-quotes must enclose the macro's argument.
-<p>
-<strong>NOTE:</strong> If you pass <strong>FINIS_STRING</strong>
-a blank string, i.e.
-<p>
-<pre>
- .FINIS_STRING ""
-</pre>
-
-<strong>mom</strong> will still print the em-dashes if you
-invoke <strong>FINIS</strong>. This, in effect, produces a
-short, centred horizontal rule that terminates the document.
-(In
-<a href="docprocessing.html.#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-it's a short, dashed line composed of four hyphens.)
-
-<a name="FINIS_COLOR"><h3><u>Changing the FINIS colour</u></h3></a>
-<p>
-Invoking <strong>FINIS_COLOR</strong> with a pre-defined (or
-&quot;initalized&quot;) color changes the colour of both the FINIS
-string and the em-dashes that surround it. If you use the
-<a href="definitions.html#TERMS_INLINE">inline escape</a>,
-<a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a>,
-in the argument passed to <strong>FINIS</strong>, only the text
-will be in the new colour; the em-dashes will be in the default
-document colour (usually black).
-
-<p>
-<hr>
-<a href="headfootpage.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/docprocessing.html b/contrib/groff/contrib/mom/momdoc/docprocessing.html
deleted file mode 100644
index 6f64d68d9599..000000000000
--- a/contrib/groff/contrib/mom/momdoc/docprocessing.html
+++ /dev/null
@@ -1,2484 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document Processing, Introduction and Setup</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="typemacdoc.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="color.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="DOCPROCESSING">
- <h1 align="center"><u>DOCUMENT PROCESSING WITH MOM</u></h1>
-</a>
-<a href="#INTRO_MACROS_DOCPROCESSING">Introduction to document processing</a>
-<br>
-<a href="#DEFAULTS">Some document defaults</a>
-<br>
-<a href="#LEADING_NOTE">* IMPORTANT NOTE on leading/spacing and bottom margins *</a>
-<br>
-<a href="#SHIM">The SHIM macro</a>
-<br>
-<h3><u>Table of Contents for document processing</u></h3>
-<ul>
- <li><a href="#SETUP"><strong>DOCUMENT SETUP</strong></a>
- <br>
- <a href="#DOCPROCESSING_TUT">Tutorial -- Setting up a mom document</a>
- <br>
- <ul>
- <li><a href="#REFERENCE_MACROS"><strong>The Reference Macros</strong></a>
- <ul>
- <li><a href="#TITLE">TITLE</a>
- <li><a href="#DOC_TITLE">DOCTITLE</a>
- <li><a href="#SUBTITLE">SUBTITLE</a>
- <li><a href="#AUTHOR">AUTHOR</a>
- <li><a href="#CHAPTER">CHAPTER</a>
- <li><a href="#CHAPTER_TITLE">CHAPTER_TITLE</a>
- <li><a href="#DRAFT">DRAFT</a>
- <li><a href="#REVISION">REVISION</a>
- <li><a href="#COPYRIGHT">COPYRIGHT</a>
- <li><a href="#MISC">MISC</a>
- </ul>
- <li><a href="#DOCSTYLE_MACROS"><strong>The Docstyle Macros</strong></a>
- <ul>
- <li><a href="#DOCTYPE">DOCTYPE</a>
- <li><a href="#PRINTSTYLE">PRINTSTYLE</a>
- <li><a href="#COPYSTYLE">COPYSTYLE</a>
- </ul>
-
- <li><a href="#STYLE_BEFORE_START"><strong>Changing type/style parameters prior to START</strong></a>
- <ul>
- <li><a href="#TYPE_BEFORE_START">Using typesetting macros prior to START</a>
- <ul>
- <li><a href="#COLOR">Colour</a>
- </ul>
- <li><a href="#DOC_LEAD_ADJUST">Adjusting document leading to fill pages -- DOC_LEAD_ADJUST</a>
- <li><a href="#DOCHEADER">Managing the document header</a>
- <ul>
- <li><a href="#DOCHEADER">DOCHEADER -- turning docheaders off</a>
- <li><a href="#DOCHEADER_CONTROL">Docheader control</a>
- </ul>
- </ul>
-
- <li><a href="#COLUMNS_INTRO"><strong>Setting documents in columns</strong></a>
- <ul>
- <li><a href="#COLUMNS">COLUMNS</a>
- <li><a href="#BREAKING_COLUMNS">Breaking columns manually</a>
- <ul>
- <li><a href="#COL_NEXT">COL_NEXT</a>
- <li><a href="#COL_BREAK">COL_BREAK</a>
- </ul>
-
- </ul>
-
- <li><a href="#START_MACRO"><strong>Initiate document processing</strong></a>
- <ul>
- <li><a href="#START">START</a>
- </ul>
-
- <li><a href="#DOC_PARAM_MACROS"><strong>Changing document-wide typesetting parameters after START</strong></a>
- <ul>
- <li><a href="#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
- <li><a href="#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
- <li><a href="#DOC_LINE_LENGTH">DOC_LINE_LENGTH</a>
- <li><a href="#DOC_FAMILY">DOC_FAMILY</a>
- <li><a href="#DOC_PT_SIZE">DOC_PT_SIZE</a>
- <li><a href="#DOC_LEAD">DOC_LEAD</a>
- <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
- <li><a href="#DOC_QUAD">DOC_QUAD</a>
- </ul>
- <br>
- <li><a href="docelement.html#DOCELEMENT"><strong>THE DOCUMENT ELEMENT MACROS (TAGS)</strong></a>
- <ul>
- <li><a href="docelement.html#DOCELEMENT_INTRO">Introduction to the document element tags</a>
- <ul>
- <li><a href="docelement.html#DOCELEMENT_CONTROL">Document element (tag) control macros</a>
- <li><a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
- </ul>
- <li><a href="docelement.html#EPIGRAPH_INTRO"><strong>Epigraphs</strong></a>
- <ul>
- <li><a href="docelement.html#EPIGRAPH">EPIGRAPH</a>
- <li><a href="docelement.html#EPIGRAPH_CONTROL">Epigrah control</a>
- </ul>
- <li><a href="docelement.html#PP_INTRO"><strong>Paragraphs</strong></a>
- <ul>
- <li><a href="docelement.html#PP">PP</a>
- <li><a href="docelement.html#PP_CONTROL">Paragraph control</a>
- </ul>
- <li><a href="docelement.html#HEAD_INTRO"><strong>Main heads</strong></a>
- <ul>
- <li><a href="docelement.html#HEAD">HEAD</a>
- <li><a href="docelement.html#HEAD_CONTROL">Head control</a>
- </ul>
- <li><a href="docelement.html#SUBHEAD_INTRO"><strong>Subheads</strong></a>
- <ul>
- <li><a href="docelement.html#SUBHEAD">SUBHEAD</a>
- <li><a href="docelement.html#SUBHEAD_CONTROL">Subhead control</a>
- </ul>
- <li><a href="docelement.html#PARAHEAD_INTRO"><strong>Paragraph heads</strong></a>
- <ul>
- <li><a href="docelement.html#PARAHEAD">PARAHEAD</a>
- <li><a href="docelement.html#PARAHEAD_CONTROL">Parahead control</a>
- </ul>
- <li><a href="docelement.html#LINEBREAK_INTRO"><strong>Linebreaks (author linebreaks, also called section breaks)</strong></a>
- <ul>
- <li><a href="docelement.html#LINEBREAK">LINEBREAK</a>
- <li><a href="docelement.html#LINEBREAK_CONTROL">Linebreak control</a>
- </ul>
- <li><a href="docelement.html#QUOTE_INTRO"><strong>Quotes (line for line poetic quotes)</strong></a>
- <ul>
- <li><a href="docelement.html#QUOTE">QUOTE</a>
- <li><a href="docelement.html#QUOTE_CONTROL">Quote control</a>
- </ul>
- <li><a href="docelement.html#BLOCKQUOTE_INTRO"><strong>Blockquotes (cited material)</strong></a>
- <ul>
- <li><a href="docelement.html#BLOCKQUOTE">BLOCKQUOTE</a>
- <li><a href="docelement.html#BLOCKQUOTE_CONTROL">Blockquote control</a>
- </ul>
- <li><a href="docelement.html#FOOTNOTE_INTRO"><strong>Footnotes</strong></a>
- <ul>
- <li><a href="docelement.html#FOOTNOTE">FOOTNOTE</a>
- <li><a href="docelement.html#FOOTNOTE_CONTROL">Footnote control</a>
- </ul>
- <li><a href="docelement.html#ENDNOTE_INTRO"><strong>Endnotes</strong></a>
- <ul>
- <li><a href="docelement.html#ENDNOTE">ENDNOTE</a>
- <li><a href="docelement.html#ENDNOTE_CONTROL">Endnote control</a>
- </ul>
- <li><a href="docelement.html#FINIS_INTRO"><strong>Document termination</strong></a>
- <ul>
- <li><a href="docelement.html#FINIS">FINIS</a>
- <li><a href="docelement.html#FINIS_CONTROL">Finis control</a>
- </ul>
- </ul>
-
- <li><a href="headfootpage.html#HEADFOOTPAGE"><strong>HEADERS and FOOTERS</strong></a>
- <br>
- <ul>
- <li><a href="headfootpage.html#HEADFOOTPAGE_INTRO">Introduction to headers/footers</a>
- <li><a href="headfootpage.html#HEADFOOT_MANAGEMENT">Managing headers/footers</a>
- <ul>
- <li><a href="headfootpage.html#HEADERS">HEADERS</a> -- on or off
- <li><a href="headfootpage.html#FOOTERS">FOOTERS</a> -- on or off
- <li><a href="headfootpage.html#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a>
- </ul>
- <li><a href="headfootpage.html#HEADFOOT_CONTROL">Header/footer control</a>
- <ul>
- <li><a href="headfootpage.html#HDRFTR_STRINGS">Header/footer strings</a>
- <li><a href="headfootpage.html#HDRFTR_STYLE">Header/footer style</a> -- global and part-by-part
- <li><a href="headfootpage.html#HDRFTR_VERTICAL">Header/footer placement and spacing</a>
- <li><a href="headfootpage.html#HDRFTR_SEPARATOR">The header/footer separator rule</a>
- </ul>
- </ul>
- <li><a href="headfootpage.html#PAGINATION"><strong>PAGINATION</strong></a>
- <br>
- <ul>
- <li><a href="headfootpage.html#PAGINATE">PAGINATE</a> -- on or off
- <li><a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a> -- user supplied page number
- <li><a href="headfootpage.html#PAGENUM_STYLE">PAGENUM_STYLE</a> -- digits, roman numerals, etc.
- <li><a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a> -- attach draft/revision information to page numbers
- <li><a href="headfootpage.html#PAGINATE_CONTROL">Pagination control</a>
- </ul>
- <br>
- <li><a href="rectoverso.html#RECTOVERSO"><strong>RECTO_VERSO PRINTING and COLLATING</strong></a>
- <br>
- <ul>
- <li><a href="rectoverso.html#RECTOVERSO_INTRO">Introduction to recto/verso</a>
- <ul>
- <li><a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a>
- <li><a href="rectoverso.html#SWITCH_HDRFTR">SWITCH_HEADERS</a> (also FOOTERS)
- </ul>
- <li><a href="rectoverso.html#COLLATE_INTRO">Introduction to collating</a>
- <ul>
- <li><a href="rectoverso.html#COLLATE">COLLATE</a>
- </ul>
- </ul>
-
- <li><a href="cover.html#TOP"><strong>CREATING A COVER PAGE</strong></a>
- <br>
- <li><a href="letters.html#LETTERS"><strong>WRITING LETTERS</strong></a>
- <ul>
- <li><a href="letters.html#LETTERS_INTRO">Introduction to writing letters</a>
- <li><a href="letters.html#TUTORIAL">Tutorial on writing letters</a>
- <li><a href="letters.html#LETTERS_DEFAULTS">Default style for letters</a>
- <li><a href="letters.html#LETTERS_MACROS">The letter macros</a>
- </ul>
- </ul>
-</ul>
-<br>
-<hr>
-
-<h2><a name="INTRO_MACROS_DOCPROCESSING"><u>Introduction to document processing</u></a></h2>
-
-As explained in
-<a href="intro.html#INTRO_DOCPROCESSING">Document processing with mom</a>,
-document processing uses markup tags to identify document elements
-such as heads, paragraphs, and so on. The tags are, of course, macros,
-but with sensible, readable names that make them easy to grasp and
-easy to remember. (And don't forget: if you don't like the
-&quot;official&quot; name of a tag -- too long, cumbersome
-to type in, not &quot;intuitive&quot; enough -- you can change it
-with the
-<a href="goodies.html#ALIAS">ALIAS</a>
-macro.)
-<p>
-In addition to the tags themselves, <strong>mom</strong> has an
-extensive array of macros that control how they look and behave.
-<p>
-Setting up a <strong>mom</strong> doc is a simple, four-part procedure.
-You begin by entering information about the document itself (title,
-subtitle, author, etc.). Next, you tell <strong>mom</strong> what
-kind of document you're creating (e.g. chapter, letter, abstract,
-etc...) and what kind of output you want (typeset, typewritten,
-draft-style, etc). Thirdly, you make as many or as few changes to
-<strong>mom</strong>'s default behaviour as you wish. Lastly, you
-invoke the
-<a href="#START">START</a>
-macro. Voilà! You're ready to write.
-<p>
-<hr>
-
-
-<h2><a name="DEFAULTS"><u>Some document defaults</u></a></h2>
-
-As is to be expected, <strong>mom</strong> has defaults for everything.
-If you want to know a particular default, read about it in the
-description of the pertinent tag.
-<p>
-I fear the following may not be adequately covered in the
-documentation. Just in case, here they are.
-<p>
-<ul>
- <li>the paper size is 8.5x11 inches
- <li>the left and right margins are 1-inch
- <li>the top and bottom margins for document text are plus/minus
- visually 1-inch
- <li>pages are numbered; the number appears centred, at the
- bottom, surrounded by hyphens ( e.g. -6- )
- <li>the first page of a document begins with a
- <a href="definitions.html#TERMS_DOCHEADER">document header</a>
- <li>subsequent pages have
- <a href="definitions.html#TERMS_HEADER">page headers</a>
- with a rule underneath
-</ul>
-<p>
-Another way to check up on document processing defaults is to have
-a look at the macro file (om.tmac). Each macro is preceded by a
-description that (generally) says what its default is (if it has
-one).
-<p>
-<hr>
-
-<a name="LEADING_NOTE">
- <h2><u>IMPORTANT NOTE on leading/spacing and bottom margins</u></h2>
-</a>
-
-<strong>Mom</strong> takes evenly-aligned bottom margins in
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-very seriously. Only under a very few (exceptional) circumstances
-will she allow a bottom margin to &quot;hang&quot; (i.e. to fall
-short).
-<p>
-In order to ensure even bottom margins, <strong>mom</strong>
-uses the &quot;base&quot; document
-<a href="definitions.html#TERMS_LEADING">leading</a>
-in effect <em>at the start of running text on each page</em> (i.e.
-the leading used in paragraphs) to calculate the spacing of every
-document element. Prior to invoking
-<a href="#START">START</a>,
-this is set with the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macro</a>
-<a href="typesetting.html#LEADING">LS</a>,
-afterwards with the document
-<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>
-<a href="#DOC_LEAD">DOC_LEAD</a>.
-<p>
-Because <strong>mom</strong> relies so heavily on the base document
-leading, any change to the leading or spacing on a page will almost
-certainly have undesirable consequences on that page's bottom margin
-unless the change is fully compensated for elsewhere on the page.
-<p>
-In other words, if you add a few points of space somewhere on a page,
-you must subtract the same number of points somewhere else on that
-same page, and vice versa.
-<p>
-If it's a question of adding or subtracting full line spaces between
-or within document elements, you can do so by using the &quot;v&quot;
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-with whatever spacing macro you choose --
-<a href="typesetting.html#ALD">ALD</a>,
-<a href="typesetting.html#RLD">RLD</a>,
-<a href="typesetting.html#SPACE">SPACE</a>
--- and <strong>mom</strong> won't object. &quot;v&quot; means
-&quot;the current leading&quot;, so she isn't confused by it. And
-since &quot;v&quot; accepts decimal fractions, you can add/subtract
-half linespaces and quarter linespaces with &quot;v&quot; as well,
-<em>provided you compensate for the fractional linespace somewhere
-else on the page</em>.
-<p>
-If all this seems like too much work, <strong>mom</strong>
-provides a special macro to get you out of trouble if you've played
-around with leading and/or spacing. The macro is called
-<strong>SHIM</strong> (like those little pieces of wood carpenters
-use to get their work even, level and snug), and it's described
-below.
-<p>
-
-<!---SHIM--->
-
-<hr width="66%" align="left">
-<p>
-<a name="SHIM"></a>
-Macro: <strong>SHIM</strong>
-
-<p>
-<strong>SHIM</strong> doesn't take any argument. Use it whenever
-you've played around with the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-or spacing on a page and you
-need to get <strong>mom</strong>'s document leading back on track.
-<p>
-For example, say you want to insert a picture into a document with
-the special groff macro, <strong>PSPIC</strong> (see the
-<strong>groff_tmac</strong> man page for usage).
-<p>
-Pictures aren't usually conveniently sized in multiples of document
-leading, which means that when you insert the picture, you disrupt
-<strong>mom</strong>'s ordered placement of baselines on the page.
-This will certainly result in a bottom margin that doesn't match the
-bottom margins of your document's other pages.
-<p>
-The solution is to insert <strong>SHIM</strong> after the picture,
-like this:
-<p>
-<pre>
- &lt;some lines of text&gt;
- .PSPIC &lt;full path to picture&gt;
- .SHIM
- &lt;more lines of text&gt;
-</pre>
-<strong>SHIM</strong> instructs <strong>mom</strong> to insert as
-much or a little space after the picture as is needed to ensure that
-the baseline of the next
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
-falls where <strong>mom</strong> would have put it had you not
-disrupted the normal flow of output lines with the picture.
-<p>
-And say, on previewing the above example, you find that the picture
-doesn't centre nicely between the lines of text, you can always do
-<p>
-<pre>
- &lt;some lines of text&gt;
- .RLD 3p
- .PSPIC &lt;full path to picture&gt;
- .SHIM
- &lt;more lines of text&gt;
-</pre>
-
-to raise the picture slightly
-(<strong>R</strong>everse <strong>L</strong>ea<strong>D</strong>
-3 points; see
-<a href="typesetting.html#RLD">RLD</a>),
-and still have <strong>SHIM</strong> ensure that text underneath
-falls exactly where it's supposed to.
-<p>
-<hr>
-
-<a name="SETUP"><h2><u>Document setup</u></h2></a>
-<p>
-<a name="DOCPROCESSING_TUT">
- <h3><u>Tutorial -- Setting up a mom document</u></h3>
-</a>
-There are four &quot;parts&quot; to setting up a <strong>mom</strong>
-doc (three, actually, with one optional). Before we proceed, though,
-be reassured that something as simple as
-<p>
-<pre>
- .TITLE "By the Shores of Lake Attica"
- .AUTHOR "Rosemary Winspeare"
- .PRINTSTYLE TYPESET
- .START
-</pre>
-
-produces a beautifully typeset 8.5x11 document, with a
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-at the top of page 1,
-<a href="definitions.html#TERMS_HEADER">page headers</a>
-with the title and author on subsequent
-pages, and page numbers at the bottom of each page. In the course
-of the document, heads, subheads, citations, quotes, epigraphs,
-and so on, all come out looking neat, trim, and professional.
-<p>
-For the purposes of this tutorial, we're going to set up a short
-story -- <em>My Pulitzer Winner</em> by Joe Blow. Thankfully,
-we don't have to look at story itself, just the setup.
-Joe wants the document
-<p>
-<ul>
- <li>to be draft 7, revision 39;
- <li>to use the &quot;default&quot; style of document formatting:
- <li>to print as draft-style output (instead of &quot;final&quot; copy output);
- <li>to be typeset, in Helvetica, 12 on 14,
- <a href="definitions.html#TERMS_RAG">rag-right</a>;
- <li>to have <a href="definitions.html#TERMS_FOOTER">footers</a>
- instead of
- <a href="definitions.html#TERMS_HEADER">headers</a>;
- <li>to use a single asterisk for
- <a href="definitions.html#TERMS_LINEBREAK">author linebreaks</a>.
-</ul>
-<p>
-Joe Blow has no taste in typography. His draft won't look pretty,
-but this is, after all, a tutorial; we're after examples, not beauty.
-<h3><u>Step 1</u></h3>
-
-The first step in setting up any document is giving <strong>mom</strong>
-some reference information. The reference macros are:
-<p>
-<ul>
- <li>TITLE
- <li>DOCTITLE
- <li>COVERTITLE
- <li>SUBTITLE
- <li>AUTHOR
- <li>CHAPTER -- the chapter number
- <li>DRAFT -- the draft number
- <li>REVISION -- the revision number
- <li>COPYRIGHT -- only used on cover pages
- <li>MISC -- only used on cover pages
- <li>COVER_TITLE -- only on cover pages; only if needed
- <li>DOC_COVER_TITLE -- only on document cover pages; only if needed
-</ul>
-<p>
-You can use as many or as few as you wish, although at a minimum,
-you'll probably fill in <strong>TITLE</strong> (unless the document's
-a letter) and <strong>AUTHOR</strong>. Order doesn't matter.
-You can separate the
-<a href="definitions.html#TERMS_ARGUMENTS">arguments</a>
-from the macros by any number of spaces. The following are
-what you'd need to start Joe Blow's story.
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
-</pre>
-
-<h3><u>Step 2</u></h3>
-
-Once you've given <strong>mom</strong> the reference information she
-needs, you tell her how you want your document formatted. What kind
-of document is it? Should it be typeset or typewritten? Is this
-a &quot;final&quot; copy (for the world to see) or just a draft?
-<strong>Mom</strong> calls the macros that answer these questions
-&quot;the docstyle macros.&quot; They are:
-<p>
-<ul>
- <li>DOCTYPE -- the type of document (default, chapter, user-defined, letter)
- <li>PRINTSTYLE -- typeset or typewritten
- <li>COPYSTYLE -- draft or final copy
-</ul>
-<p>
-<strong>Mom</strong> has defaults for <strong>DOCTYPE</strong>
-and <strong>COPYSTYLE</strong>; if they're what you want, you
-don't need to include them here. However, <strong>PRINTSTYLE</strong>
-has no default and MUST be present in every formatted document.
-If you omit it, <strong>mom</strong> won't process the document AND
-she'll complain (both to stderr and as a single printed sheet with
-a warning). Moms -- they can be so annoying sometimes. &lt;sigh&gt;
-<p>
-Adding to what we already have, the next bit of setup for Joe
-Blow's story looks like this:
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
- \#
- .DOCTYPE DEFAULT \"Superfluous; mom uses DOCTYPE DEFAULT by default
- .PRINTSTYLE TYPESET
- .COPYSTYLE DRAFT
-</pre>
-
-Notice the use of the
-<a href="definitions.html#TERMS_COMMENTLINES">comment line</a>
-( \# ), a handy way to keep groups of macros visually separated
-for easy reading in a text editor.
-
-<h3><u>Step 3</u></h3>
-
-This step -- completely optional -- is where you, the user, take
-charge. <strong>Mom</strong> has defaults for <em>everything</em>,
-but who's ever satisfied with defaults? Use any of the <a
-href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-here to change <strong>mom</strong>'s document defaults (paper
-size, margins, family, point size, line space, rag, etc), or
-any of the document processing macros that set/change/control
-the appearance of document elements. Think of this as the
-&quot;style-sheet &quot; section of a document. And please note:
-you MUST give <strong>mom</strong> a
-<a href="#PRINTSTYLE">PRINTSTYLE</a>
-directive <strong>before</strong> making any such changes.
-<p>
-Joe Blow wants his story printed in Helvetica, 12 on 14, rag
-right, with
-<a href="definitions.html#TERMS_FOOTER">page footers</a>
-instead of
-<a href="definitions.html#TERMS_HEADER">page headers</a>
-and a single asterisk for the
-<a href="definitions.html#TERMS_LINEBREAK">linebreak</a>
-character. None of these requirements conforms
-to <strong>mom</strong>'s defaults for the chosen
-<strong>PRINTSTYLE</strong> (TYPESET), so we change them here.
-The setup for Joe Blow's story now looks like this:
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
- \#
- .DOCTYPE DEFAULT
- .PRINTSTYLE TYPESET
- .COPYSTYLE DRAFT
- \#
- .FAMILY H
- .PT_SIZE 12
- .LS 14
- .QUAD LEFT \"i.e. rag right
- .FOOTERS
- .LINEBREAK_CHAR *
-</pre>
-
-<h3><u>Step 4</u></h3>
-The final step in setting up a document is telling <strong>mom</strong>
-to start document processing. It's a no-brainer, just the single macro
-<strong>START</strong>. Other than <strong>PRINTSTYLE</strong>, it's
-the only macro required for document processing (although
-I can't guarantee you'll like the results of using just the two).
-<p>
-Here's the complete setup for <em>My Pulitzer Winner</em>:
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
- \#
- .DOCTYPE DEFAULT
- .PRINTSTYLE TYPESET
- .COPYSTYLE DRAFT
- \#
- .FAMILY H
- .PT_SIZE 12
- .LS 14
- .QUAD LEFT \"i.e. rag right
- .FOOTERS
- .LINEBREAK_CHAR *
- \#
- .START
-</pre>
-
-As pointed out earlier, Joe Blow is no typographer. Given that all he
-needs is a printed draft of his work, a simpler setup would have been:
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
- \#
- .PRINTSTYLE TYPEWRITE
- .COPYSTYLE DRAFT
- \#
- .START
-</pre>
-
-<kbd>.PRINTSTYLE TYPEWRITE</kbd>, above, means that Joe's work
-will come out &quot;typewritten, double-spaced&quot;, making the
-blue-pencilling he (or someone else) is sure to do much
-easier (which is why many publishers and agents still insist on
-typewritten, double-spaced copy).
-<p>
-When J. Blow stops re-writing and decides to print off a final,
-typeset copy of his work for the world to see, he need only
-make two changes to the (simplified) setup:
-<p>
-<pre>
- .TITLE "My Pulitzer Winner"
- .AUTHOR "Joe Blow"
- .DRAFT 7
- .REVISION 39
- \#
- .PRINTSTYLE TYPESET \"first change
- .COPYSTYLE FINAL \"second change
- \#
- .START
-</pre>
-
-In the above, <kbd>.DRAFT 7, .REVISION 39,</kbd> and <kbd>.COPYSTYLE
-FINAL</kbd> are actually superfluous. The draft and revision numbers
-aren't used when <strong>COPYSTYLE</strong> is <strong>FINAL</strong>,
-and <strong>COPYSTYLE FINAL</strong> is <strong>mom</strong>'s
-default unless you tell her otherwise. BUT... to judge from the
-number of drafts already, J. Blow may very well decide his
-&quot;final&quot; version still isn't up to snuff. Hence, he might
-as well leave in the superfluous macros. That way, when draft 7,
-rev. 62 becomes draft 8, rev. 1, he'll be ready to tackle his Pulitzer
-winner again.
-<p>
-<hr>
-
-<!========================================================================>
-
-<a name="REFERENCE_MACROS">
- <h2><u>The Reference Macros</u></h2>
-</a>
-
-The reference macros give <strong>mom</strong> the information
-she needs to generate
-<a href="definitions.html#TERMS_DOCHEADER">docheaders</a>,
-<a href="definitions.html#TERMS_HEADER">page headers</a>,
-and
-<a href="cover.html#COVER_TOP">covers</a>.
-They must go at the top of any file that uses <strong>mom</strong>'s
-document processing macros.
-<p>
-<a name="INDEX_REFERENCE">
- <h3><u>Reference macros list</u></h3>
-</a>
-
-<ul>
- <li><a href="#TITLE">TITLE</a>
- <li><a href="#DOC_TITLE">DOCTITLE</a>
- <li><a href="#SUBTITLE">SUBTITLE</a>
- <li><a href="#AUTHOR">AUTHOR</a>
- <li><a href="#CHAPTER">CHAPTER</a>
- <li><a href="#CHAPTER_TITLE">CHAPTER_TITLE</a>
- <li><a href="#DRAFT">DRAFT</a>
- <li><a href="#REVISION">REVISION</a>
- <li><a href="#COPYRIGHT">COPYRIGHT</a>
- <li><a href="#MISC">MISC</a>
- <li><a href="#COVERTITLE">COVERTITLE</a>
-</ul>
-<br>
-
-<!---TITLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="TITLE"></a>
-<nobr>Macro: <strong>TITLE</strong> &quot;&lt;title&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-The title string can be caps or caps/lower-case; it's up to you.
-In
-<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-the title will appear in the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-exactly as you typed it. However, <strong>mom</strong> converts
-the title to all caps in
-<a href="definitions.html#TERMS_HEADER">page headers</a>
-unless you turn that feature off (see
-<a href="headfootpage.html#_CAPS">HEADER_&lt;POSITION&gt;_CAPS</a>). In
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-the title always gets converted to caps.
-<p>
-<strong>NOTE:</strong> If your
-<a href="#DOCTYPE">DOCTYPE</a>
-is <strong>CHAPTER</strong>, <strong>TITLE</strong> should be the
-title of the opus, not &quot;CHAPTER whatever&quot;.
-<p>
-
-<!---DOCTITLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="DOCTITLE"></a>
-<nobr>Macro: <strong>DOCTITLE</strong> &quot;&lt;overall document title&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-<strong>NOTE:</strong> This macro should be used only if your
-<a href="#DOCTYPE">DOCTYPE</a>
-is <strong>DEFAULT</strong> (which is <strong>mom</strong>'s
-default).
-<p>
-When you're creating a single document, say, an essay or a short
-story, you have no need of this macro.
-<a href="#TITLE">TITLE</a>
-takes care of all your title needs.
-<p>
-However if you're
-<a href="rectoverso.html#COLLATE">collating</a>
-a bunch of documents together, say, to print out a report containing
-many articles with different titles, or a book of short stories, you
-need <strong>DOCTITLE</strong>.
-<p>
-<strong>DOCTITLE</strong> tells <strong>mom</strong> the title
-of the complete document (as opposed to the title of each article
-or entitled section).
-<p>
-The doctitle string can be caps or caps/lower-case; it's up to you.
-In
-<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-by default, the doctitle appears in the rightmost position of
-<a href="definitions.html#TERMS_HEADER">page headers</a>,
-all in caps unless you turn that feature off (see
-<a href="headfootpage.html#_CAPS">HEADER_&lt;POSITION&gt;_CAPS</a>). In
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-the doctitle always gets converted to caps.
-<p>
-<strong>NOTE:</strong> If your
-<a href="#DOCTYPE">DOCTYPE</a>
-is <strong>CHAPTER</strong>, you don't need
-<strong>DOCTITLE</strong>. <strong>TITLE</strong> takes care of
-everything.
-<p>
-
-<!---SUBTITLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="SUBTITLE"></a>
-<nobr>Macro: <strong>SUBTITLE</strong> &quot;&lt;subtitle&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-The subtitle string can be caps or caps/lower-case. Since a
-document's subtitle appears only in the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
-and the title is most likely in caps, I recommend caps/lower case.
-<p>
-
-<!---AUTHOR--->
-
-<hr width="66%" align="left">
-<p>
-<a name="AUTHOR"></a>
-<nobr>Macro: <strong>AUTHOR</strong> &quot;&lt;author string&gt;&quot; [ &quot;&lt;author2 string&gt;&quot; &quot;&lt;author3 string&gt;&quot; ... ]</nobr>
-<br>
-<em>*Multiple arguments must all be enclosed in double-quotes</em>
-
-<p>
-Each author string can hold as many names as you like, e.g.
-<p>
-<pre>
- .AUTHOR "Joe Blow"
- or
- .AUTHOR "Joe Blow, Jane Doe" "John Hancock"
-</pre>
-
-<strong>Mom</strong> prints each string that's enclosed in
-double-quotes on a separate line in the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
-however only the first string appears in
-<a href="definitions.html#TERMS_HEADER">page headers</a>.
-If you want <strong>mom</strong> to put something else in the author
-part of page headers (say, just the last names of a document's two
-authors), redefine the appropriate part of the header (see
-<a href="headfootpage.html#HEADER_CONTROL">header/footer control</a>).
-<p>
-The strings can be caps or caps/lower-case. I recommend caps/lower
-case.
-<p>
-
-<!---CHAPTER--->
-
-<hr width="66%" align="left">
-<p>
-<a name="CHAPTER"></a>
-<nobr>Macro: <strong>CHAPTER</strong> &lt;chapter number&gt;</nobr>
-
-<p>
-The chapter number can be in any form you like -- a digit, a roman
-numeral, a word. If you choose
-<a href="#DOCTYPE">DOCTYPE CHAPTER</a>,
-<strong>mom</strong> prints whatever argument you pass
-<strong>CHAPTER</strong> beside the word &quot;Chapter&quot; as a
-single line
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>.
-She also puts the same thing in the middle of
-<a href="definitions.html#TERMS_HEADER">page headers</a>.
-<p>
-Please note that if your argument to <strong>CHAPTER</strong> runs
-to more than one word, you must enclose the argument in
-double-quotes.
-<p>
-If you're not using <strong>DOCTYPE CHAPTER</strong>, the macro serves
-no purpose and <strong>mom</strong> ignores it.
-<p>
-<a name="CHAPTER_STRING"><strong>CHAPTER_STRING</strong></a>
-<p>
-If you're not writing in English, you can ask <strong>mom</strong>
-to use the word for &quot;chapter&quot; in your own language by
-telling her what it is with the <strong>CHAPTER_STRING</strong>
-macro, like this:
-<p>
-<pre>
- .CHAPTER_STRING "Chapître"
-</pre>
-
-You can also use <strong>CHAPTER_STRING</strong> if you want
-&quot;CHAPTER&quot; instead of &quot;Chapter&quot; in the doc- and
-page-headers.
-<p>
-
-<!---CHAPTER_TITLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="CHAPTER_TITLE"></a>
-<nobr>Macro: <strong>CHAPTER_TITLE</strong> &quot;&lt;chapter title&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-If, either in addition to or instead of &quot;Chapter #&quot; appearing
-at the top of chapters, you want your chapter to have a title, use
-<strong>CHAPTER_TITLE</strong>, with your title enclosed in
-double-quotes, like this:
-<p>
-<pre>
- .CHAPTER_TITLE "The DMCA Nazis"
-</pre>
-
-If you've used
-<a href="#CHAPTER">CHAPTER</a> to give the chapter a number,
-both &quot;Chapter #&quot; and the chapter title will appear at the
-top of the chapter, like this:
-<p>
-<pre>
- Chapter 1
- The DMCA Nazis
-</pre>
-
-In such a case, by default, only the chapter's title will appear in the
-<a href="definitions.html#TERMS_HEADER">page headers</a>,
-not &quot;Chapter #&quot;.
-<p>
-If you omit <strong>CHAPTER</strong> when setting up your reference
-macros, only the title will appear, both at the top of page one and in
-subsequent page headers.
-<p>
-The style of the chapter title can be altered by
-<a href="docelement.html#DOCELEMENT_CONTROL">control macros</a>,
-e.g. <strong>CHAPTER_TITLE_FAMILY</strong>,
-<strong>CHAPTER_TITLE_FONT</strong>, etc. The default family,
-font and point size are Times Roman, Bold Italic, 4 points larger
-than
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-<p>
-
-<!---DRAFT--->
-
-<hr width="66%" align="left">
-<p>
-<a name="DRAFT"></a>
-<nobr>Macro: <strong>DRAFT</strong> &lt;draft #&gt;</nobr>
-
-<p>
-<strong>DRAFT</strong> only gets used with
-<a href="#COPYSTYLE">COPYSTYLE DRAFT</a>.
-If the <strong>COPYSTYLE</strong> is <strong>FINAL</strong> (the
-default), <strong>mom</strong> ignores <strong>DRAFT</strong>.
-<strong>DRAFT</strong> accepts both alphabetic and numeric
-arguments, hence it's possible to do either
-<p>
-<pre>
- .DRAFT 2
- or
- .DRAFT Two
-</pre>
-
-<strong>Mom</strong> prints the argument to <strong>.DRAFT</strong>
-(i.e. the draft number) beside the word &quot;Draft&quot; in the
-middle part of
-<a href="definitions.html#TERMS_HEADER">page headers</a>.
-<p>
-<strong>A small word of caution:</strong> If your argument to
-<strong>.DRAFT</strong> is more than one word long, you must
-enclose the argument in double-quotes.
-<p>
-You may, if you wish, invoke <strong>.DRAFT</strong> without an
-argument, in which case, no draft number will be printed beside
-&quot;Draft&quot; in headers or footers.
-<p>
-<a name="DRAFT_STRING"><strong>DRAFT_STRING</strong></a>
-<p>
-If you're not writing in English, you can ask <strong>mom</strong>
-to use the word for &quot;draft&quot; in your own language by
-telling her what it is with the <strong>DRAFT_STRING</strong> macro,
-like this:
-<p>
-<pre>
- .DRAFT_STRING "Jet"
-</pre>
-
-Equally, <strong>DRAFT_STRING</strong> can be used to roll your own
-solution to something other than the word &quot;Draft.&quot; For
-example, you might want &quot;Trial run alpha-three&quot; to appear
-in the headers of a draft version. You'd accomplish this by doing
-<p>
-<pre>
- .DRAFT alpha-three
- .DRAFT_STRING "Trial run
-</pre>
-
-<strong>.DRAFT</strong> without an argument, above, ensures that
-only the <strong>DRAFT_STRING</strong> gets printed.
-<p>
-<strong>NOTE:</strong> If you define both a blank <strong>.DRAFT</strong>
-and a blank <strong>.DRAFT_STRING</strong>, <strong>mom</strong>
-skips the draft field in headers entirely. If this is what you
-want, this is also the only way to do it. Simply leaving out
-<strong>.DRAFT</strong> and <strong>.DRAFT_STRING</strong> will
-result in <strong>mom</strong> using her default, which is to print
-&quot;Draft 1&quot;.
-<p>
-
-<!---REVISION--->
-
-<hr width="66%" align="left">
-<p>
-<a name="REVISION"></a>
-<nobr>Macro: <strong>REVISION</strong> &lt;revision #&gt;</nobr>
-
-<p>
-<strong>REVISION</strong> only gets used with
-<a href="#COPYSTYLE">COPYSTYLE DRAFT</a>.
-If the <strong>COPYSTYLE</strong> is <strong>FINAL</strong>
-(the default), <strong>mom</strong> ignores the
-<strong>REVISION</strong> macro. <strong>REVISION</strong> accepts
-both alphabetic and numeric arguments, hence it's possible to do
-either
-<p>
-<pre>
- .REVISION 2
- or
- .REVISION Two
-</pre>
-
-<strong>Mom</strong> prints the revision number beside the shortform
-&quot;Rev.&quot; in the middle part of
-<a href="definitions.html#TERMS_HEADER">page headers</a>.
-<p>
-<strong>A small word of caution:</strong> If your argument to
-<strong>.REVISION</strong> is more than one word long, you must
-enclose the argument in double-quotes.
-<p>
-You may, if you wish, invoke <strong>.REVISION</strong> without an
-argument, in which case, no revision number will be printed beside
-&quot;Rev.&quot; in headers or footers.
-<p>
-<a name="REVISION_STRING"><strong>REVISION_STRING</strong></a>
-<p>
-If you're not writing in English, you can ask <strong>mom</strong>
-to use the word for &quot;revision,&quot; or a shortform
-thereof, in your own language by telling her what it is with the
-<strong>REVISION_STRING</strong> macro, like this:
-<p>
-<pre>
- .REVISION_STRING "Rév."
-</pre>
-
-Additionally, you may sometimes want to make use of
-<strong>mom</strong>'s
-<a href="#COPYSTYLE">COPYSTYLE DRAFT</a>
-but not actually require any draft information. For example, you
-might like <strong>mom</strong> to indicate only the revision number
-of your document. The way to do that is to define an empty
-<strong>.DRAFT</strong> and <strong>.DRAFT_STRING</strong> in
-addition to <strong>.REVISION</strong>, like this:
-<p>
-<pre>
- .DRAFT
- .DRAFT_STRING
- .REVISION 2
-</pre>
-
-<p>
-Equally, if you want to roll your own solution to what revision
-information appears in headers, you could do something like this:
-<pre>
- .DRAFT
- .DRAFT_STRING
- .REVISION "two-twenty-two"
- .REVISION_STRING "Revision"
-</pre>
-
-<p>
-The above, naturally, has no draft information. If you want to
-roll your own <strong>.DRAFT</strong> and/or
-<strong>.DRAFT_STRING</strong> as well, simply supply arguments to
-either or both.
-<p>
-
-<!---COPYRIGHT--->
-
-<hr width="66%" align="left">
-<p>
-<a name="COPYRIGHT"></a>
-<nobr>Macro: <strong>COPYRIGHT</strong> &quot;&lt;copyright info&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-The argument passed to <strong>COPYRIGHT</strong> is only used on
-cover or doc cover pages, and then only if the argument COPYRIGHT is
-passed to
-<a href="cover.html#COVER">COVER</a>
-or
-<a href="cover.html#DOC_COVER">DOC_COVER</a>.
-Do not include the copyright symbol in the argument passed to
-<strong>COPYRIGHT</strong>; <strong>mom</strong> puts it in for
-you.
-<p>
-
-<!---MISC--->
-
-<hr width="66%" align="left">
-<p>
-<a name="MISC"></a>
-<nobr>Macro: <strong>MISC</strong> &quot;&lt;argument 1&gt;&quot; [&quot;&lt;argument 2&gt;&quot; &quot;&lt;argument 3&gt;&quot; ...]</nobr>
-<br>
-<em>*Multliple arguments must all be enclosed in double-quotes</em>
-
-<p>
-The argument(s) passed to <strong>MISC</strong> are only used on
-cover or doc cover pages, and then only if the argument MISC is
-passed to
-<a href="cover.html#COVER">COVER</a>
-or
-<a href="cover.html#DOC_COVER">DOC_COVER</a>.
-<strong>MISC</strong> can contain any information you like. Each
-argument appears on a separate line at the bottom of the cover or
-doc cover page.
-<p>
-For example, if you're submitting an essay where the prof has
-requested that you include the course number, his name and the
-date, you could do
-<p>
-<pre>
- .MISC &quot;Music History 101&quot; &quot;Professor Hasbeen&quot; &quot;Dec. 24, 2006&quot;
-</pre>
-
-and the information would appear on the essay's cover page.
-<p>
-
-<!---COVER_TITLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="COVERTITLE"></a>
-<nobr>Macro: <strong>COVERTITLE</strong> &quot;&lt;user defined cover page title&gt;&quot;</nobr>
-<br>
-<nobr>Macro: <strong>DOC_COVERTITLE</strong> &quot;&lt;user defined document cover page title&gt;&quot;</nobr>
-<br>
-<em>*Argument must be enclosed in double-quotes</em>
-
-<p>
-The argument passed to <strong>COVERTITLE</strong> or
-<strong>DOC_COVERTITLE</strong> is only used on cover or doc cover
-pages, and then only if the argument COVERTITLE is passed to
-<a href="cover.html#COVER">COVER</a>
-or
-<a href="cover.html#DOC_COVER">DOC_COVER</a>.
-<p>
-The only time you require a <strong>COVERTITLE</strong> or
-<strong>DOC_COVERTITLE</strong>is when none of the required first
-arguments to <strong>COVER</strong> or <strong>DOC_COVER</strong>
-fits your needs for the title you want to appear on cover (or doc
-cover) pages.
-
-<p>
-<hr>
-<!========================================================================>
-
-<a name="DOCSTYLE_MACROS">
- <h2><u>The Docstyle Macros</u></h2>
-</a>
-
-The docstyle macros tell <strong>mom</strong> what type of document you're
-writing, whether you want the output typeset or
-&quot;typewritten&quot;, and whether you want a draft copy (with
-draft and revision information in the headers) or a final copy.
-
-<a name="INDEX_DOCSTYLE">
- <h3><u>Docstyle macros list</u></h3>
-</a>
-
-<ul>
- <li><a href="#DOCTYPE">DOCTYPE</a>
- <li><a href="#PRINTSTYLE">PRINTSTYLE</a>
- <ul>
- <li><a href="#TYPESET_DEFAULTS">Defaults for PRINTSTYLE TYPESET</a>
- <li><a href="#TYPEWRITE_DEFAULTS">Defaults for PRINTSTYLE TYPEWRITE</a>
- <ul>
- <li><a href="#TYPEWRITE_CONTROL">TYPEWRITE control macros</a>
- </ul>
- </ul>
- <li><a href="#COPYSTYLE">COPYSTYLE</a>
-</ul>
-<br>
-
-<!---DOCTYPE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="DOCTYPE"></a>
-<nobr>Macro: <strong>DOCTYPE</strong> DEFAULT | CHAPTER | NAMED &quot;&lt;name&gt;&quot; | LETTER</nobr>
-<p>
-The arguments <strong>DEFAULT, CHAPTER</strong> and
-<strong>NAMED</strong> tell <strong>mom</strong> what to put
-in the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-and
-<a href="definitions.html#TERMS_HEADER">page headers</a>.
-<strong>LETTER</strong> tells her that you want to write a
-letter.
-<p>
-<strong>Mom</strong>'s default <strong>DOCTYPE</strong> is
-<strong>DEFAULT</strong>. If that's what you want, you don't
-have to give a <strong>DOCTYPE</strong> command.
-<p>
-<strong>DEFAULT</strong> prints a
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-containing the title, subtitle and author information given to the
-<a href="#REFERENCE_MACROS">reference macros</a>,
-and page headers with the author and title.
-(See
-<a href="headfootpage.html#HEADER_STYLE">Default specs for headers</a>
-for how <strong>mom</strong> outputs each part of the page header.)
-<p>
-<strong>CHAPTER</strong> prints &quot;Chapter #&quot; in place of a
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-(# is what you gave to the
-<a href="#REFERENCE_MACROS">reference macro</a>
-<a href="#CHAPTER">CHAPTER</a>).
-If you give the chapter a title with
-<a href="#CHAPTER_TITLE">CHAPTER TITLE</a>,
-<strong>mom</strong> prints &quot;Chapter #&quot; and the title
-underneath. If you omit the
-<a href="#CHAPTER">CHAPTER</a>
-reference macro but supply a
-<a href="#CHAPTER_TITLE">CHAPTER_TITLE</a>,
-<strong>mom</strong> prints only the chapter title. <em>(*For
-backward compatibility with pre-1.1.5 versions of</em>
-<strong>mom</strong><em>, you can also supply a chapter title by
-omitting the</em> <strong>CHAPTER</strong> <em>reference macro and
-supplying a chapter title with</em>
-<a href="#CHAPTER_STRING">CHAPTER_STRING</a>.)
-<p>
-The page headers in <strong>DOCTYPE CHAPTER</strong> contain the author,
-the title of the book (which you gave with
-<a href="#TITLE">TITLE</a>),
-and &quot;Chapter #&quot; (or the chapter title). See
-<a href="headfootpage.html#HEADER_STYLE">Default Specs for Headers</a>
-for <strong>mom</strong>'s default type parameters for each part of
-the page header.
-<p>
-<strong>NAMED</strong> takes an additional argument: a name
-for this particular kind of document (e.g. outline, synopsis,
-abstract, memorandum), enclosed in double-quotes.
-<strong>NAMED</strong> is identical to <strong>DEFAULT</strong>
-except that <strong>mom</strong> prints the argument to
-<strong>NAMED</strong> beneath the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
-as well as in page headers.
-(See
-<a href="headfootpage.html#HEADER_STYLE">Default specs for headers</a>
-for how <strong>mom</strong> outputs each part of the page header.)
-<p>
-Additionally, if you wish the name of this particular kind of
-document to be coloured, you can pass <strong>DOCTYPE NAMED</strong>
-a third (optional) argument: the name of a colour pre-defined (or
-&quot;initialized&quot;) with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-For example, if you have a doctype named &quot;Warning&quot;, and
-you'd like &quot;Warning&quot; to be in red, assuming you've
-pre-defined (or &quot;initialized&quot;) the color, red, this is
-what the <strong>DOCTYPE</strong> entry would look like:
-<p>
-<pre>
- .DOCTYPE NAME "Warning" red
-</pre>
-
-<p>
-<strong>LETTER</strong> tells mom you're writing a letter. See
-the section
-<a href="letters.html#INTRO">Writing Letters</a>
-for instructions on using <strong>mom</strong> to format letters.
-<p>
-
-<!---PRINTSTYLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PRINTSTYLE"></a>
-<nobr>Macro: <strong>PRINTSTYLE</strong> TYPESET | TYPEWRITE [ SINGLESPACE ]</nobr>
-<br>
-<em>*Required for document processing.</em>
-<br>
-<em>*Must come before any changes to default document style</em>
-
-<p>
-<strong>PRINTSTYLE</strong> tells <strong>mom</strong> whether to typeset
-a document, or to print it out &quot;typewritten, doubled-spaced&quot;.
-<p>
-<strong>THIS MACRO MAY NOT BE OMITTED.</strong> In order for
-document processing to take place, <strong>mom</strong> requires
-a <strong>PRINTSTYLE</strong>. If you don't give one,
-<strong>mom</strong> will warn you on stderr and print a single
-page with a nasty message.
-<p>
-Furthermore, <strong>PRINTSTYLE</strong> must come before any
-changes to <strong>mom</strong>'s default typestyle parameters.
-(This applies primarily to, but is by no means restricted to,
-<strong>PRINTSTYLE TYPESET</strong>.) <strong>PRINTSTYLE</strong>
-sets up complete &quot;templates&quot; that include default
-papersize, margins, family, fonts, point sizes, and so on.
-Therefore, changes to any aspect of document style must come
-afterwards.
-<p>
-<strong>TYPESET</strong>, as the argument implies, typesets documents
-(by default in Times Roman; see
-<a href="#TYPESET_DEFAULTS">TYPESET defaults</a>).
-You have full access to all the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-as well as the
-<a href="definitions.html#STYLE_CONTROL">style control macros</a>
-of document processing.
-<p>
-As mentioned above, <strong>PRINTSTYLE TYPESET</strong> must come
-before any changes to <strong>mom</strong>'s default typographic
-settings. For example,
-
-<pre>
- .PAPER A4
- .LS 14
- .PRINTSTYLE TYPESET
-</pre>
-
-will not changes <strong>mom</strong>'s default paper size to A4,
-nor her default document leading 14 points, whereas
-
-<pre>
- .PRINTSTYLE TYPESET
- .PAPER A4
- .LS 14
-</pre>
-
-will.
-<p>
-With <strong>TYPEWRITE</strong>, <strong>mom</strong> does her best
-to reproduce the look and feel of typewritten, double-spaced copy (see
-<a href="#TYPEWRITE_DEFAULTS">TYPEWRITE defaults</a>).
-<a href="docelement.html#DOCELEMENT_CONTROL">Control macros</a>
-and
-<a href="typesetting.html#INTRO_MACROS_TYPESETTING">typesetting macros</a>
-that alter family, font, point size, and
-<a href="definitions.html#TERMS_LEADING">leading</a>
-are (mostly) ignored. An important exception is
-<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
-(and, by extension, <strong>FOOTER_SIZE</strong>), which allows
-you to reduce the point size of headers/footers should they become
-too crowded. Most of <strong>mom</strong>'s inlines affecting the
-appearance of type are also ignored (<strong>\*S</strong> is an
-exception; there may be a few others).
-<p>
-In short, <strong>TYPEWRITE</strong> never produces effects other than
-those available on a typewriter. Don't be fooled by how brainless
-this sounds; <strong>mom</strong> is remarkably sophisticated when
-it comes to conveying the typographic sense of a document within the
-confines of <strong>TYPEWRITE</strong>.
-<p>
-The primary uses of <strong>TYPEWRITE</strong> are: outputting hard
-copy drafts of your work (for editing), and producing documents
-for submission to publishers and agents who (wisely) insist on
-typewritten, double-spaced copy. To get a nicely typeset version of
-work that's in the submission phase of its life (say, to show fellow
-writers for critiquing), simply change <strong>TYPEWRITE</strong>
-to <strong>TYPESET</strong> and print out a copy.
-<p>
-If, for some reason, you would prefer the output of
-<strong>TYPEWRITE</strong> single-spaced, pass <strong>PRINTSTYLE
-TYPEWRITE</strong> the optional argument, <strong>SINGLESPACE</strong>.
-<p>
-If you absolutely must have a leading other than typewriter double-
-or singlespaced, the only way to get it is with the
-<a href="#DOC_LEAD">DOC_LEAD</a>
-macro, and then ONLY if <strong>DOC_LEAD</strong> is set
-<strong>before</strong> you invoke the <strong>START</strong>
-macro.
-<p>
-<a name="TYPESET_DEFAULTS"><h3><u>TYPESET defaults</u></h3></a>
-<pre>
- Family = Times Roman
- Point size = 12.5
- Paragraph leading = 16 points, adjusted
- Fill mode = justified
- Hyphenation = enabled
- max. lines = 2
- margin = 36 points
- interword adjustment = 1 point
- Kerning = enabled
- Ligatures = enabled
- Smartquotes = enabled
- Word space = groff default
- Sentence space = 0
-</pre>
-
-<a name="TYPEWRITE_DEFAULTS"><h3><u>TYPEWRITE defaults</u></h3></a>
-<pre>
- Family = Courier
- Italics = underlined
- Point size = 12
- Paragraph leading = 24 points, adjusted; 12 points for SINGLESPACE
- Fill mode = left
- Hyphenation = disabled
- Kerning = disabled
- Ligatures = disabled
- Smartquotes = disabled
- Word space = groff default
- Sentence space = groff default
- Columns = ignored
-</pre>
-
-<a name="TYPEWRITE_CONTROL"><h3><u>PRINTSTYLE TYPEWRITE control macros</u></h3></a>
-<p>
-In <strong>PRINTSTYLE TYPEWRITE</strong>, <strong>mom</strong>,
-by default, underlines anything that looks like italics. This
-includes the
-<a href="typesetting.html#SLANT_INLINE">\*[SLANT]</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-for pseudo-italics.
-<p>
-If you'd prefer that <strong>mom</strong> were
-less bloody-minded about pretending to be a typewriter (i.e.
-you'd like italics and pseudo-italics to come out as italics),
-use the control macros <strong>.ITALIC_MEANS_ITALIC</strong> and
-<strong>.SLANT_MEANS_SLANT</strong>. Neither requires an
-argument.
-<p>
-Although it's unlikely, should you wish to reverse the sense of
-these macros in the midst of a document,
-<strong>.UNDERLINE_ITALIC</strong> and
-<strong>.UNDERLINE_SLANT</strong> restore underlining of
-italics and pseudo-italics.
-<p>
-<a name="UNDERLINE_QUOTES"></a>
-Additionally, by default, <strong>mom</strong> underlines
-<a href="definitions.html#TERMS_QUOTES">quotes</a>
-(but not
-<a href="definitions.html#TERMS_BLOCKQUOTES">blockquotes</a>)
-in <strong>PRINTSTYLE TYPEWRITE</strong>.
-If you don't like this behaviour, turn it off with
-<p>
-<pre>
- .UNDERLINE_QUOTES OFF
-</pre>
-
-To turn underlining of quotes back on, use
-<strong>UNDERLINE_QUOTES</strong> without an argument.
-<p>
-While most of the
-<a href="docelement.html#DOCELEMENT_CONTROL">control macros</a>
-have no effect on <strong>PRINTSTYLE TYPEWRITE</strong>, there
-is an important exception:
-<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
-(and by extension, <strong>FOOTER_SIZE</strong>). This is
-particularly useful for reducing the point size of
-headers/footers should they become crowded (quite likely to
-happen if the title of your document is long and your
-<a href="#COPYSTYLE">COPYSTYLE</a>
-is <strong>DRAFT</strong>).
-<p>
-
-<!---COPYSTYLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="COPYSTYLE"></a>
-<nobr>Macro: <strong>COPYSTYLE</strong> DRAFT | FINAL</nobr>
-
-<p>
-<strong>Mom</strong>'s default <strong>COPYSTYLE</strong> is
-<strong>FINAL</strong>, so you don't have to use this macro unless
-you want to.
-<p>
-<strong>COPYSTYLE DRAFT</strong> exhibits the following behaviour:
-<br>
-<ol>
- <li>documents start on page 1, whether or not you
- request a different starting page number with
- <a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a>
- <li>page numbers are set in lower case roman numerals
- <li>the draft number supplied by
- <a href="#DRAFT">DRAFT</a>
- and a revision number, if supplied with
- <a href="#REVISION">REVISION</a>
- (see
- <a href="#REFERENCE_MACROS">reference macros</a>),
- appear in the centre part of
- <a href="definitions.html#TERMS_HEADER">page headers</a>
- (or footers, depending on which you've selected) along with
- any other information that normally appears there.
-</ol>
-<p>
-<strong>IMPORTANT:</strong> If you define your own centre part for page
-headers with
-<a href="headfootpage.html#HDRFTR_CENTER">HEADER_CENTER</a>,
-no draft and/or revision number will appear there. If you want draft
-and revision information in this circumstance, use
-<a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a>.
-<p>
-<strong>COPYSTYLE FINAL</strong> differs from <strong>DRAFT</strong> in that:
-<br>
-<ol>
- <li>it respects the starting page number you give the document
- <li>page numbers are set in normal (Arabic) digits
- <li>no draft or revision number appears in the page headers
-</ol>
-<p>
-<strong>NOTE:</strong> The centre part of page headers can get crowded,
-especially with
-<a href="docprocessing.html#DOCTYPE">DOCTYPE CHAPTER</a>
-and
-<a href="docprocessing.html#DOCTYPE">DOCTYPE NAMED</a>,
-when the <strong>COPYSTYLE</strong> is <strong>DRAFT</strong>.
-Three mechanisms are available to overcome this problem. One is to
-reduce the overall size of headers (with
-<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>).
-Another, which only works with
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-is to reduce the size of the header's centre part only (with
-<a href="headfootpage.html#_SIZE">HEADER_CENTER_SIZE</a>).
-And finally, you can elect to have the draft/revision information
-attached to page numbers instead of having it appear in the centre
-of page headers (see
-<a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a>).
-<p>
-<hr>
-
-<!========================================================================>
-
-<a name="STYLE_BEFORE_START"><h2><u>Changing type/style parameters prior to START</u></h2></a>
-<p>
-In the third (optional) part of setting up a document (see
-<a href="#DOCPROCESSING_TUT">Tutorial -- setting up a mom document</a>),
-you can use the
-<a href="typsetting.html">typesetting macros</a>
-to change <strong>mom</strong>'s document-wide defaults for margins,
-line length, family, base point size,
-<a href="definitions.html#TERMS_LEADING">leading</a>,
-and justification style.
-<p>
-Two additional style concerns have to be addressed here (i.e. in
-macros before
-<a href="#START">START</a>):
-changes to the
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
-and whether you want you want the document's nominal leading
-adjusted to fill pages fully to the bottom margin.
-<p>
-<ul>
- <li><a href="#TYPE_BEFORE_START">Using typesetting macros prior to START</a>
- <p>
- <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
- -- adjusting linespacing for equal, accurate bottom margins
- <li><a href="#DOCHEADER">DOCHEADER</a>
- -- turning the docheader off
- <ul>
- <li><a href="#DOCHEADER_CONTROL">Docheader control</a>
- </ul>
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<a name="TYPE_BEFORE_START"><h2><u>Using the typesetting macros prior to START</u></h2></a>
-<p>
-From time to time (or maybe frequently), you'll want the overall
-look of a document to differ from <strong>mom</strong>'s defaults.
-Perhaps you'd like her to use a different
-<a href="definitions.html#TERMS_FAMILY">family</a>,
-or a different overall
-<a href="definitions.html#TERMS_LEADING">leading</a>,
-or have different left and/or right page margins.
-<p>
-To accomplish such alterations, use the appropriate
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-(listed below) <strong>after</strong>
-<a href="#PRINTSTYLE">PRINTSTYLE</a>
-and <strong>before</strong>
-<a href="#START">START</a>.
-<p>
-More than one user has, quite understandably, not fully grasped
-the significance of the preceding sentence. The part they've missed
-is &quot;<u>after <strong>PRINTSTYLE</strong></u>&quot;.
-<p>
-Changes to any aspect of the default look and/or formatting
-of a <strong>mom</strong> document must come after
-<strong>PRINTSTYLE</strong>. For example, it might seem natural to
-set up page margins at the very top of a document with
-<p>
-<pre>
- .L_MARGIN 1i
- .R_MARGIN 1.5i
-</pre>
-
-However, when you invoke <strong>.PRINTSTYLE</strong>, those
-margins will be overridden. The correct place to set margins--and
-all other changes to the look of a document--is <strong>after
-PRINTSTYLE</strong>.
-
-<p>
-<strong>NOTE:</strong> Don't use the macros listed in <a
-href="#DOC_PARAM_MACROS">Changing document-wide typesetting
-parameters after START</a> prior to <strong>START</strong>; they are
-exclusively for use afterwards.
-<p>
-When used before
-<strong>START</strong>,
-the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-(below) have the following meanings:
-<p>
-<pre>
- L_MARGIN Left margin of pages, including headers/footers
- R_MARGIN Right margin of pages, including headers/footers
- T_MARGIN The point at which running text (i.e. not
- headers/footers or page numbers) starts on each page
- B_MARGIN* The point at which running text (i.e. not
- (see note) headers/footers or page numbers) ends on each page
-
- PAGE If you use PAGE, its final four arguments have the
- same meaning as L_ R_ T_ and B_MARGIN (above).
-
- LL The line length for everything on the page;
- equivalent to setting the right margin with R_MARGIN
- FAMILY The family of all type in the document
- PT_SIZE The point size of type in paragraphs; mom uses this
- to calculate automatic point size changes (e.g. for
- heads, footnotes, quotes, headers, etc)
- LS/AUTOLEAD** The leading used in paragraphs; all leading and spacing
- of running text is calculated from this
-
- QUAD/JUSTIFY Affects paragraphs only
- LEFT No effect***
- RIGHT No effect***
- CENTER No effect***
-
-------
- *See <a href="headfootpage.html#FOOTER_MARGIN">FOOTER MARGIN AND BOTTOM MARGIN</a> for an important warning
- **See <a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
-***See <a href="#LRC_NOTE">Special note</a>
-</pre>
-
-Other macros that deal with type style, or refinements thereof
-(<strong>KERN, LIGATURES, HY, WS, SS,</strong> etc.), behave normally.
-It is not recommended that you set up tabs or indents prior to
-<strong>START</strong>.
-<p>
-If you want to change any of the basic parameters (above)
-<em>after</em> <strong>START</strong> and have them affect a
-document globally (as if you'd entered them <em>before</em>
-<strong>START</strong>), you must use the macros listed in
-<a href="#DOC_PARAM_MACROS">Changing document-wide style parameters after START</a>.
-
-<a name="LRC_NOTE"></a>
-<h3><u>Special note on .LEFT, .RIGHT and .CENTER prior to START</u></h3>
-In a word, these three macros have no effect on document processing
-when invoked prior to <strong>START</strong>.
-<p>
-All <strong>mom</strong>'s document element tags
-(<strong>PP</strong>, <strong>HEAD</strong>,
-<strong>BLOCKQUOTE</strong>, <strong>FOOTNOTE</strong>, etc.)
-except
-<a href="docelement.html#QUOTE">QUOTE</a>
-set a
-<a href="definitions.html#TERMS_FILLED">fill mode</a>
-as soon as they're invoked. If you wish to turn fill mode off for
-the duration of any tag (with
-<a href="typesetting.html#LRC">.LEFT, .RIGHT or .CENTER</a>)
-you must do so immediately after invoking the tag. Furthermore,
-the change affects <em>only</em> the current invocation of the tag.
-Subsequent invocations of the same tag for which you want the same
-change require that you invoke <strong>LEFT</strong>,
-<strong>RIGHT</strong> or <strong>CENTER</strong> immediately after
-every invocation of the tag.
-<p>
-
-<!---COLOR--->
-<a name="COLOR"><h2><u>Colour</u></h2></a>
-<br>
-Although it doesn't really matter where you define/initialize
-colours for use in document processing (see
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-and
-<a href="color.html#XCOLOR">XCOLOR</a>
-in the section
-<a href="color.html#COLOR_INTRO">Coloured text</a>),
-I recommend doing so before you begin document processing with
-<a href="#START">START</a>.
-<p>
-The macro,
-<a href="color.html#COLOR">COLOR</a>,
-and the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<a href="color.html#COLOR_INLINE">\[&lt;colorname&gt;]</a>,
-can be used at any time during document processing for occasional
-colour effects. However, consistent and reliable colourizing of
-various document elements (the docheader, heads, linebreaks,
-footnotes, pagenumbers, and so on) must be managed through the use
-of the
-<a href="docelement.html#DOCELEMENT_CONTROL">document element control macros</a>.
-<p>
-<strong>PLEASE NOTE:</strong> If you plan to have <strong>mom</strong>
-generate a
-<a href="docelement.html#TOC">table of contents</a>,
-do NOT embed colour
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-(<a href="color.html#COLOR_INLINE">\[&lt;colorname&gt;]</a>)
-in the
-<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments</a>
-given to any of the
-<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>,
-nor in the string arguments given to
-<a href="docelement.html#HEAD">.HEAD</a>,
-<a href="docelement.html#SUBHEAD">.SUBHEAD</a>
-or
-<a href="docelement.html#PARAHEAD">.PARAHEAD</a>.
-Use, rather, the
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
-<strong>mom</strong> provides to automatically colourize these
-elements.
-<br>
-
-<!---DOC_LEAD_ADJUST--->
-
-<hr width="66%" align="left">
-<a name="DOC_LEAD_ADJUST"><h3><u>Adjusting document leading to fill pages</u></h3></a>
-<br>
-<nobr>Macro: <strong>DOC_LEAD_ADJUST</strong> toggle</nobr>
-<br>
-<em>*Must come after LS or AUTOLEAD and before START</em>
-
-<p>
-<strong>DOC_LEAD_ADJUST</strong> is a special macro to adjust
-document
-<a href="definitions.html#TERMS_LEADING">leading</a>
-so that bottom margins fall precisely where you expect.
-<p>
-If you invoke <strong>DOC_LEAD_ADJUST</strong>, <strong>mom</strong>
-takes the number of lines that fit on the page at your requested
-leading, then incrementally adds
-<a href="definitions.html#TERMS_UNITS">machine units</a>
-to the leading until the maximum number of lines at the new leading
-matches the bottom margin. In most instances, the difference
-between the requested lead and the adjusted lead is
-unnoticeable, and since in almost all cases adjusted leading is
-what you want, it's <strong>mom</strong>'s default.
-<p>
-Should you NOT want adjusted document leading, you MUST turn it
-off manually, like this:
-<p>
-<pre>
- .DOC_LEAD_ADJUST OFF
-</pre>
- If you set the document leading prior to <strong>START</strong>
-with
-<a href="typesetting.html#LS">LS</a>
-or
-<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>,
-<strong>DOC_LEAD_ADJUST OFF</strong> must come afterwards, like
-this:
-<p>
-<pre>
- .LS 12
- .DOC_LEAD_ADJUST OFF
-</pre>
-
-In this scenario, the maximum number of lines that fit on a page at
-a
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of 12
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-determine where <strong>mom</strong> ends
-a page. The effect will be that last lines usually fall (slightly)
-short of the &quot;official&quot; bottom margin.
-<p>
-In
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
-<strong>TYPEWRITE</strong>, the leading is always adjusted and
-can't be turned off.
-<p>
-<strong>NOTE:</strong> <strong>DOC_LEAD_ADJUST</strong>, if
-used, must be invoked after
-<a href="typesetting.html#LEADING">LS</a>
-or
-<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>
-and before
-<a href="#START">START</a>
-<p>
-<strong>ADDITIONAL NOTE:</strong> Even if you disable
-<strong>DOC_LEAD_ADJUST</strong>, <strong>mom</strong> will still
-adjust the leading of endnotes pages and toc pages. See
-<a href="docelement.html#ENDNOTE_LEAD">ENDNOTE_LEAD</a>
-and
-<a href="docelement.html#TOC_LEAD">TOC_LEAD</a>
-for an explanation of how to disable this default behaviour.
-<p>
-
-<!---DOCHEADER--->
-
-<hr width="66%" align="left">
-<a name="DOCHEADER"><h3><u>Managing the docheader</u></h3></a>
-<br>
-<nobr>Macro: <strong>DOCHEADER</strong> &lt;toggle&gt; [ distance to advance from top of page ]</nobr>
-<br>
-<em>*Must come before START; distance requires a <a href="#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-By default, <strong>mom</strong> prints a
-<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
-on the first page of any document (see
-<a href="#DOCHEADER_DESC">below</a>
-for a description of the docheader). If you don't want a docheader,
-turn it off with
-<p>
-<pre>
- .DOCHEADER OFF
-</pre>
-
-<strong>DOCHEADER</strong> is a toggle macro, so the argument doesn't
-have to be <strong>OFF</strong>; it can be anything you like.
-<p>
-If you turn the docheader off, <strong>mom</strong>, by default, starts
-the running text of your document on the same top
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-as all subsequent pages. If you'd like her to start at a different
-vertical position, give her the distance you'd like as a second
-argument.
-<p>
-<pre>
- .DOCHEADER OFF 1.5i
-</pre>
-
-This starts the document 1.5 inches from the top of the page PLUS
-whatever spacing adjustment <strong>mom</strong> has to make in
-order to ensure that the first baseline of running text falls on a
-&quot;legal&quot; baseline (i.e. one that ensures that the bottom
-margin of the first page falls where it should). The distance is
-measured from the top edge of the paper to the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of the first line of type.
-<p>
-<strong>TIP:</strong> Since no document processing happens until
-you invoke
-<a href="#START">START</a>
--- including anything to do with docheaders -- you can typeset
-your own docheader prior to <strong>START</strong> (if you don't
-like the way <strong>mom</strong> does things) and use
-<strong>DOCHEADER OFF</strong> with its optional distance argument
-to ensure that the body of your document starts where you want.
-You can even insert a PostScript file (with <strong>.PSPIC</strong>;
-see the <strong>groff_tmac</strong> man page for usage).
-<p>
-<a name="DOCHEADER_CONTROL"><h3><u>How to change the look of docheaders: docheader control macros</u></h3></a>
-
-<p>
-With
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-the look of docheaders is carved in stone.
-In
-<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-however, you can make a lot of changes. Macros that alter docheaders
-MUST come before
-<a href="#START">START</a>.
-<a name="DOCHEADER_DESC"></a>
-<p>
-A typeset docheader has the following characteristics. Note that
-title, subtitle, author, and document type are what you supply
-with the
-<a href="#REFERENCE_MACROS">reference macros</a>.
-Any you leave out will not appear; <strong>mom</strong> will
-compensate:
-<p>
-<pre>
- TITLE bold, 3.5 points larger than running text (not necessarily caps)
- Subtitle medium, same size as running text
- by medium italic, same size as running text
- Author(s) medium italic, same size as running text
-
- (Document type) bold italic, underscored, 3 points larger than running text
-</pre>
-
-If the
-<a href="#DOCTYPE">DOCTYPE</a>
-is CHAPTER,
-<pre>
- Chapter # bold, 4 points larger than running text
- Chapter Title bold italic, 4 points larger than running text
-</pre>
-
-<p>
-The
-<a href="definitions.html#TERMS_FAMILY">family</a>
-is the prevailing family of the whole document.
-<p>
-<strong>NOTE:</strong> If your <strong>DOCTYPE</strong> is
-<strong>CHAPTER</strong> and you have both &quot;Chapter #&quot;
-and a &quot;Chapter Title&quot; (as above), you may find the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-a bit cramped (owing to <strong>mom</strong>'s default docheader
-leading). If this is the case, you can adjust the leading either
-with
-<a href="#ADJUST_LEADING">DOCHEADER_LEAD</a>
-or by including the
-<a name="definitions.html#TERMS_INLINES">inline escape</a>,
-<a href="inlines.html#DOWN">\*[DOWN]</a>,
-in the argument you pass to
-<a href="#CHAPTER_TITLE">CHAPTER_TITLE</a>, like this:
-<p>
-<pre>
- .CHAPTER_TITLE "\*[DOWN 2p]Why Not Patent Calculus?"
-</pre>
-
-
-<a name="DOCHEADER_CONTROL_INDEX"><h3><u>The docheader macros to:</u></h3></a>
-<ol>
- <li><a href="#CHANGE_START">Change the starting position of the docheader</a>
- <li><a href="#DOCHEADER_FAMILY">Change the family of the entire docheader</a>
- <li><a href="#ADJUST_LEADING">Adjust the docheader leading</a>
- <li><a href="#CHANGE_FAMILY">Change the family of individual docheader elements</a>
- <li><a href="#CHANGE_FONT">Change the font of docheader elements</a>
- <li><a href="#CHANGE_COLOR">Change the colour of the docheader</a>
- <li><a href="#CHANGE_SIZE">Adjust the size of docheader elements</a>
- <li><a href="#CHANGE_ATTRIBUTE">Change the attribution string (&quot;by&quot;)</a>
-</ol>
-<p>
-<a name="CHANGE_START"><h3><u>1. Change the starting position</u></h3></a>
-<p>
-By default, a docheader starts on the same
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-as
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-If you'd like it to start somewhere else, use the macro
-<kbd>.DOCHEADER_ADVANCE</kbd> and give it the distance you want
-(measured from the top edge of the paper to the first baseline
-of the docheader), like this:
-<p>
-<pre>
- .DOCHEADER_ADVANCE 4P
-</pre>
-
-A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required.
-<p>
-<strong>NOTE:</strong> If
-<a href="headfootpage.html#HEADERS">HEADERS</a>
-are <strong>OFF</strong>, <strong>mom</strong>'s normal top
-margin for
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-(7.5
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>)
-changes to 6 picas (visually approx. 1 inch). Since the
-first baseline of the docheader falls on the same baseline
-as the first line of running text (on pages after page 1),
-you might find the docheaders a bit high when headers are off.
-Use
-<a href="#CHANGE_START">DOCHEADER_ADVANCE</a>
-to place them where you want.
-<p>
-
-<a name="DOCHEADER_FAMILY"><h3><u>2. Change the family of the entire docheader</u></h3></a>
-<p>
-By default, <strong>mom</strong> sets the docheader in the same
-family used for
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-If you'd prefer to have your docheaders set in a different family,
-invoke <strong>DOCHEADER_FAMILY</strong> with the family you want.
-The argument for <strong>DOCHEADER_FAMILY</strong> is the same as
-for
-<a href="typesetting.html#FAMILY">FAMILY</a>.
-<p>
-For example, <strong>mom</strong>'s default family for running text
-is Times Roman. If you'd like to keep that default, but have the
-docheaders set entirely in Helvetica,
-<p>
-<pre>
- .DOCHEADER_FAMILY H
-</pre>
-
-is how you'd do it.
-<p>
-Please note that if you use <strong>DOCHEADER_FAMILY</strong>,
-you can still alter the family of individual parts of the docheader
-with the macros listed
-<a href="#CHANGE_FAMILY">here</a>.
-
-<a name="ADJUST_LEADING"><h3><u>3. Adjust the leading</u></h3></a>
-<p>
-The
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of docheaders is the same as running text (except when
-<a href="#DOCTYPE">DOCTYPE</a>
-is <strong>CHAPTER</strong> <em>and</em> both a chapter number and a
-chapter title have been supplied, in which case the default is 4 points
-more than running text.)
-<p>
-If you'd like your docheaders to have a different leading, say, 2
-points more than the lead of running text, use:
-<p>
-<pre>
- .DOCHEADER_LEAD +2
-</pre>
-
-Since the leading of docheaders is calculated from the lead of running
-text, a + or - sign is required before the argument (how much to add
-or subtract from the lead of running text). No
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required; points is assumed.
-<p>
-
-<a name="CHANGE_FAMILY"><h3><u>4. Change the family of docheader elements</u></h3></a>
-<p>
-The following macros let you change the
-<a href="definitions.html#TERMS_FAMILY">family</a>
-of each docheader element separately:
-<p>
-<ul>
-<li><strong>TITLE_FAMILY</strong> <nobr>&lt;family&gt;</nobr>
-<li><strong>CHAPTER_TITLE_FAMILY</strong> <nobr>&lt;family&gt;</nobr>
-<li><strong>SUBTITLE_FAMILY</strong> <nobr>&lt;family&gt;</nobr>
-<li><strong>AUTHOR_FAMILY</strong> <nobr>&lt;family&gt;</nobr>
-<li><strong>DOCTYPE_FAMILY</strong> <nobr>&lt;family&gt; (if</nobr>
-<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
-</ul>
-<p>
-Simply pass the appropriate macro the family you want, just as you
-would with
-<a href="typesetting.html#FAMILY">FAMILY</a>.
-<p>
-
-<a name="CHANGE_FONT"><h3><u>5. Change the font of docheader elements</u></h3></a>
-<p>
-The following macros let you change the
-<a href="definitions.html#TERMS_FONT">font</a>
-of each docheader element separately:
-<p>
-<ul>
-<li><strong>TITLE_FONT</strong> <nobr>R | B | I | BI</nobr>
-<li><strong>CHAPTER_TITLE_FONT</strong> <nobr>R | B | I | BI</nobr>
-<li><strong>SUBTITLE_FONT</strong> <nobr>R | B | I | BI</nobr>
-<li><strong>AUTHOR_FONT</strong> <nobr>R | B | I | BI</nobr>
-<li><strong>DOCTYPE_FONT</strong> <nobr>R | B | I | BI (if</nobr>
-<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
-</ul>
-<p>
-Simply pass the appropriate macro the font you want. <strong>R,
-B, I</strong> and <strong>BI</strong> have the same meaning as
-they do for
-<a href="typesetting.html#FONT">FT</a>.
-<p>
-
-<a name="CHANGE_COLOR"><h3><u>6. Change the colour of the docheader elements individually</u></h3></a>
-<p>
-The following macros let you change the color of each docheader
-element separately. You must pre-define (or
-&quot;initialize&quot;) the color with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-<p>
-<ul>
- <li><strong>TITLE_COLOR</strong> <nobr>&lt;colorname&gt;</nobr>
- <li><strong>CHAPTER_TITLE_COLOR</strong> <nobr>&lt;colorname&gt;</nobr>
- <ul>
- <li><strong>Note: CHAPTER_TITLE_COLOR</strong> is needed
- only if you enter both a <strong>CHAPTER</strong>
- reference macro AND a <strong>CHAPTER_TITLE</strong>
- macro. Otherwise, the macro,
- <strong>TITLE_COLOR</strong> takes care of colorizing
- the chapter header.
- </ul>
- <li><strong>SUBTITLE_COLOR</strong> <nobr>&lt;colorname&gt;</nobr>
- <li><strong>ATTRIBUTE_COLOR</strong> <nobr>&lt;colorname&gt;</nobr>
- (the &quot;by&quot; string that precedes the author[s] name[s])
- <li><strong>AUTHOR_COLOR</strong> <nobr>&lt;colorname&gt;</nobr>
- <li><strong>DOCTYPE_COLOR</strong> <nobr>&lt;colorname&gt; (if</nobr>
- <a href="#DOCTYPE">DOCTYPE</a> is NAMED)
-</ul>
-<p>
-It is not recommended that you embed colour (with the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a>)
-in the strings passed to
-<strong>TITLE</strong>, <strong>CHAPTER_TITLE</strong>,
-<strong>SUBTITLE</strong>, <strong>AUTHOR</strong> or the name you
-give <strong>DOCTYPE NAMED</strong>. The strings passed to these
-macros are used to generate page
-<a href="definitions.html#TERMS_HEADER">headers</a>
-and
-<a href="definitions.html#TERMS_FOOTER">footers</a>.
-An embedded colour will cause the string to be colourized any time
-it appears in headers or footers. (If you want headers or footers
-colourized, or parts thereof, use the header/footer control macros.)
-<p>
-<a name="DOCHEADER_COLOR"></a>
-If you want to colourize the entire docheader, use the macro
-<p>
-<ul>
-<li><strong>DOCHEADER_COLOR</strong> <nobr>&lt;color name&gt;.</nobr>
-</ul>
-
-<a name="CHANGE_SIZE"><h3><u>7. Adjust the size of docheader elements</u></h3></a>
-<p>
-The following macros let you adjust the point size of each docheader
-element separately.
-<p>
-<strong>Mom</strong> calculates the point size
-of docheader elements from the point size of paragraphs in running
-text, so you must prepend a + or - sign to the argument. Points is
-assumed as the
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-so there's no need to append a unit to the argument. Fractional point
-sizes are allowed.
-<p>
-<ul>
-<li><strong>TITLE_SIZE</strong> <nobr>&lt;+/-points&gt;</nobr>
-<br>
-default = +3.5 (+4 if docheader title is &quot;Chapter #&quot;)
-<li><strong>CHAPTER_TITLE_SIZE</strong> <nobr>&lt;+/-points&gt;</nobr>
-<br>
-default = +4
-<li><strong>SUBTITLE_SIZE</strong> <nobr>&lt;+/-points&gt;</nobr>
-<br>
-default = +0
-<li><strong>AUTHOR_SIZE</strong> <nobr>&lt;+/-points&gt;</nobr>
-<br>
-default = +0
-<li><strong>DOCTYPE_SIZE</strong> <nobr>&lt;+/-points&gt; (if</nobr>
-<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
-<br>
-default = +3
-</ul>
-<p>
-Simply pass the appropriate macro the size adjustment you want.
-<p>
-
-<a name="CHANGE_ATTRIBUTE"><h3><u>8. Change the attribution string (&quot;by&quot;)</u></h3></a>
-<p>
-If you're not writing in English, you can change what
-<strong>mom</strong> prints where &quot;by&quot; appears in
-docheaders. For example,
-<p>
-<pre>
- .ATTRIBUTE_STRING "par"
-</pre>
-
-changes &quot;by&quot; to &quot;par&quot;. If you
-don't want an attribution string at all, simply pass
-<strong>ATTRIBUTE_STRING</strong> an empty argument, like this:
-<p>
-<pre>
- .ATTRIBUTE_STRING ""
-</pre>
-
-<strong>Mom</strong> will deposit a blank line where the
-attribution string normally appears.
-<p>
-<strong>NOTE:</strong> The type specs for the attribution line
-in docheaders are the same as for the author line. Although
-it's highly unlikely you'll want the attribution line in a
-different family, font, or point size, you can do so by using
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-in the argument to <strong>ATTRIBUTE_STRING</strong>. For
-example,
-<p>
-<pre>
- .ATTRIBUTE_STRING "\f[HBI]\*[SIZE -2p] by \*[SIZE +2p]\*[PREV]"
-</pre>
-
-would set &quot;by&quot; in Helvetica bold italic, 2 points
-smaller than normal.
-<p>
-<hr>
-
-<!---COLUMNS_INTRO--->
-
-<a name="COLUMNS_INTRO"><h2><u>Setting documents in columns</u></h2></a>
-
-<p>
-Setting documents in columns is easy with <strong>mom</strong>. (Of
-course she'd say that, but it's true!) All you have to do is is
-say how many columns you want and how much space you want
-between them (the
-<a href="definitions.html#TERMS_GUTTER">gutters</a>).
-That's it. <strong>Mom</strong> takes care of everything else, from
-soup to nuts.
-<p>
-<strong>SOME WORDS OF ADVICE:</strong>
-<p>
-If you want your type to achieve a pleasing
-<a href="definitions.html#TERMS_JUST">justification</a>
-or
-<a href="definitions.html#TERMS_RAG">rag</a>
-in columns, reduce the point size of type (and probably the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-as well). <strong>Mom</strong>'s default document point
-size is 12.5, which works well across her default 39
-<a href="definitions.html#TERMS_PICASPOINTS">pica</a>
-full page line length, but with even just two columns on a page,
-the default point size is awkward to work with.
-<p>
-Furthermore, you'll absolutely need to reduce the indents for
-<a href="docelement.html#EPIGRAPH_CONTROL">epigraphs</a>,
-<a href="docelement.html#QUOTE_GENERAL">quotes</a>,
-and
-<a href="docelement.html#BLOCKQUOTE_GENERAL">blockquotes</a>
-(and probably the
-<a href="docelement.html#PARA_INDENT">paragraph first-line indent</a>
-as well).
-<p>
-
-<!---COLUMNS--->
-
-<hr width="66%" align="left">
-<a name="COLUMNS"><h3><u>COLUMNS</u></h3></a>
-<br>
-<nobr>Macro: <strong>COLUMNS</strong> &lt;number of columns&gt; &lt;width of gutters&gt;</nobr>
-<br>
-<em>*Should be the last macro before START
-<br>
-The second argument requires a <a href="#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>COLUMNS</strong> takes two arguments: the number of
-columns you want on document pages, and the width of the
-<a href="definitions.html#TERMS_GUTTER">gutter</a>
-between them. For example, to set up a page with two columns
-separated by an 18 point gutter, you'd do
-<p>
-<pre>
- .COLUMNS 2 18p
-</pre>
-
-Nothing to it, really. However, as noted above,
-<strong>COLUMNS</strong> should always be the last document
-setup macro prior to
-<a href="#START">START</a>.
-<p>
-<strong>NOTE:</strong> <strong>Mom</strong> ignores columns completely
-when the
-<a href="#PRINTSTYLE">PRINTSTYLE</a>
-is <strong>TYPEWRITE</strong>. The notion of typewriter-style
-output in columns is just too ghastly for her to bear.
-
-<h3><u>Using tabs when COLUMNS are enabled</u></h3>
-<strong>Mom</strong>'s tabs
-(both
-<a href="typesetting.html#TYPESETTING_TABS">typesetting tabs</a>
-and
-<a href="typesetting.html#STRING_TABS">string tabs</a>)
-behave as you'd expect during document processing, even when
-<strong>COLUMNS</strong> are enabled. Tab structures set up
-during document processing carry over from page to page and column
-to column.
-
-<a name="BREAKING_COLUMNS"></a>
-<h3><u>Breaking columns manually</u></h3>
-<strong>Mom</strong> takes care of breaking columns when they reach
-the bottom margin of a page. However, there may be times you want to
-break the columns yourself. There are two macros for breaking columns
-manually: <strong>COL_NEXT</strong> and <strong>COL_BREAK</strong>.
-
-<a name="COL_NEXT"></a>
-<p>
-<kbd>.COL_NEXT</kbd> breaks the line just before it,
-<a href="definitions.html#TERMS_QUAD">quads</a>
-it left (assuming the type is justified or quad left), and moves over
-to the top of the next column. If the column happens to be the last
-(rightmost) one on the page, <strong>mom</strong> starts a new page
-at the &quot;column 1&quot; position. This is the macro to use when
-you want to start a new column after the end of a paragraph.
-
-<a name="COL_BREAK"></a>
-<p>
-<kbd>.COL_BREAK</kbd> is almost the same, except that
-instead of breaking and quadding the line preceding it,
-she breaks and spreads it (see
-<a href="typesetting.html#SPREAD">SPREAD</a>).
-Use this macro whenever you need to start a new column in the middle
-of a paragraph.
-<p>
-If you need <strong>COL_BREAK</strong> in the middle of a blockquote
-or (god help us) an epigraph, you must do the following in order for
-<strong>COL_BREAK</strong> to work:
-<p>
-<pre>
- .SPREAD
- \!.COL_BREAK
-</pre>
-<hr>
-
-<!========================================================================>
-
-<a name="START_MACRO">
-<h2><u>Start document processing</u></h2>
-</a>
-
-In order to use <strong>mom</strong>'s document element macros
-(tags), you have to tell her you want them. The macro to do this
-is <strong>START</strong>.
-<p>
-<strong>START</strong> collects the information you gave
-<strong>mom</strong> in the setup section at the top of your file (see
-<a href="#DOCPROCESSING_TUT">Tutorial -- setting up a mom document</a>),
-merges it with her defaults, sets up headers and page numbering,
-and prepares <strong>mom</strong> to process your document using
-the document element tags. No document processing takes place until
-you invoke <strong>START</strong>.
-<p>
-
-<!---START--->
-
-<hr width="66%" align="left">
-<p>
-<a name="START"></a>
-Macro: <strong>START</strong>
-<br>
-<em>*Required for document processing.</em>
-
-<p>
-<strong>START</strong> takes no arguments. It simply instructs
-<strong>mom</strong> to begin document processing. If you don't
-want document processing (i.e. you only want the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>),
-don't use <strong>START</strong>.
-<p>
-At a barest minimum before <strong>START</strong>, you must enter a
-<a href="#PRINTSTYLE">PRINTSTYLE</a>
-command.
-<p>
-<hr>
-
-<!========================================================================>
-
-<a name="DOC_PARAM_MACROS">
-<h2><u>Changing document-wide style parameters after START</u></h2>
-</a>
-
-In the normal course of things, you change the basic type
-parameters of a document <em>before</em>
-<a href="#START">START</a>,
-using
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-(<strong>L_MARGIN, FAMILY, PT_SIZE, LS,</strong> etc). After
-<strong>START</strong>, you MUST use the following macros to make
-global changes to the basic type parameters of a document.
-<p>
-
-<a name="INDEX_DOC_PARAM">
- <h3><u>Macro list</u></h3>
-</a>
-<ul>
- <li><a href="#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
- <li><a href="#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
- <li><a href="#DOC_LINE_LENGTH">DOC_LINE_LENGTH</a>
- <li><a href="#DOC_FAMILY">DOC_FAMILY</a>
- <li><a href="#DOC_PT_SIZE">DOC_PT_SIZE</a>
- <li><a href="#DOC_LEAD">DOC_LEAD</a>
- <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
- <li><a href="#DOC_QUAD">DOC_QUAD</a>
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_LEFT_MARGIN">
- <nobr>Macro: <strong>DOC_LEFT_MARGIN</strong> &lt;left margin&gt;</nobr>
-</a>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#L_MARGIN">L_MARGIN</a>
- <li>changes all left margins to the new value
- <li>the line length remains the same (i.e. the right margin
- shifts when you change the left margin)
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_RIGHT_MARGIN">
- <nobr>Macro: <strong>DOC_RIGHT_MARGIN</strong> &lt;right margin&gt;</nobr>
-</a>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#R_MARGIN">R_MARGIN</a>
- <li>changes all right margins, including
- <a href="definitions.html#TERMS_DOCHEADER">docheaders</a>,
- headers (or footers) and page numbering to the new value;
- for changing the right margin of
- <a href="definitions.html#TERMS_RUNNING">running text</a>
- only, use
- <a href="typesetting.html#R_MARGIN">R_MARGIN</a>
- (see
- <a href="typemacdoc.html#TOP">Using typesetting macros during
- document processing</a>,
- entry for <strong>R_MARGIN</strong>)
- <li>all mom commands that include a right indent calculate
- the indent from the new value
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_LINE_LENGTH">
- <nobr>Macro: <strong>DOC_LINE_LENGTH</strong> &lt;length&gt;</nobr>
-</a>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#LINELENGTH">LL</a>
- <li>exactly equivalent to changing the right margin with
- DOC_RIGHT_MARGIN (see
- <a href="#DOC_RIGHT_MARGIN">above</a>);
- for changing the line length of
- <a href="definitions.html#TERMS_RUNNING">running text</a>
- only, use
- <a href="typesetting.html#LINELENGTH">LL</a>
- (see
- <a href="typemacdoc.html#TOP">Using typesetting macros during
- document processing</a>,
- entry for <strong>LL</strong>)
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_FAMILY">
- <nobr>Macro: <strong>DOC_FAMILY</strong> &lt;family&gt;</nobr>
-</a>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#FAMILY">FAMILY</a>
- <li>globally changes the type family
- <li>any page elements (e.g.
- <a href="definitions.html#TERMS_HEADER">headers</a>,
- page numbers, footnotes) whose families you wish to remain
- at their old values must be reset with the appropriate
- <a href="docelement.html#DOCELEMENT_CONTROL">control macros</a>
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_PT_SIZE">
- <nobr>Macro: <strong>DOC_PT_SIZE</strong> &lt;point size&gt;</nobr>
-</a>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#PS">PT_SIZE</a>,
- and refers to the point size of type in paragraphs
- <li>all automatic point size changes (heads, quotes,
- footnotes, headers, etc.) are affected by the new size;
- anything you do not want affected must be reset to
- its former value (see the Control Macros section of
- the pertinent document element for instructions on
- how to do this)
-</ul>
-<br>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_LEAD">
- <nobr>Macro: <strong>DOC_LEAD</strong> &lt;points&gt; [ ADJUST ]</nobr>
-</a>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
-<p>
-<ul>
- <li>the argument is the same as for
- <a href="typesetting.html#LS">LS</a>,
- and refers to the
- <a href="definitions.html#TERMS_LEAD">leading</a>
- of paragraphs
- <li>because paragraphs will have a new leading, the leading and
- spacing of most running text is influenced by the new value
- <li>epigraphs and footnotes remain unaffected;
- if you wish to change their leading, use
- <a href="docelement.html#EPIGRAPH_AUTOLEAD">EPIGRAPH_AUTOLEAD</a>
- and
- <a href="docelement.html#FOOTNOTE_AUTOLEAD">FOOTNOTE_AUTOLEAD</a>.
- <li>the optional argument <strong>ADJUST</strong> performs
- leading adjustment as explained in
- <a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
-</ul>
-<p>
-<strong>IMPORTANT:</strong> Do not use <strong>DOC_LEAD</strong>
-in the middle of a page! It should always and only be invoked
-immediately prior to a new page, like this:
-<p>
-<pre>
- .DOC_LEAD &lt;new value&gt;
- .NEWPAGE
-</pre>
-
-<strong>NOTE:</strong> Even if you don't pass
-<strong>DOC_LEAD</strong> the optional argument
-<strong>ADJUST</strong>, <strong>mom</strong> will still adjust the
-leading of endnotes pages and toc pages. See
-<a href="docelement.html#ENDNOTE_LEAD">ENDNOTE_LEAD</a>
-and
-<a href="docelement.html#TOC_LEAD">TOC_LEAD</a>
-for an explanation of how to disable this default behaviour.
-<p>
-
-<hr width="66%" align="left">
-<p>
-<a name="DOC_QUAD">
- <nobr>Macro: <strong>DOC_QUAD</strong> L | R | C | J</nobr>
-</a>
-<p>
-<ul>
- <li>the arguments are the same as for
- <a href="typesetting.html#QUAD">QUAD</a>
- <li>affects paragraphs, epigraphs and footnotes; does not
- affect blockquotes
-</ul>
-<br>
-
-<hr>
-<a href="typemacdoc.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="color.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/goodies.html b/contrib/groff/contrib/mom/momdoc/goodies.html
deleted file mode 100644
index 6b907b49bdff..000000000000
--- a/contrib/groff/contrib/mom/momdoc/goodies.html
+++ /dev/null
@@ -1,1057 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Goodies</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="inlines.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="typesetting.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="GOODIES">
- <h1 align="center"><u>Goodies</u></h1>
-</a>
-<p>
-<a name="INTRO_GOODIES"></a>
-The macros in this section are a collection of useful (and sometimes
-nearly indispensable) routines to simplify typesetting.
-<p>
-<a name="INDEX_GOODIES">
- <h3><u>Goodies list</u></h3>
-</a>
-
-<ul>
- <li><a href="#ALIAS">ALIAS</a> (rename macros)
- <li><a href="#SILENT">SILENT</a> (&quot;hide&quot; input lines from output)
- <li><a href="#TRAP">TRAP</a> (suspend/re-invoke traps)
- <li><a href="#SMARTQUOTES">SMARTQUOTES</a> (convert typewriter doublequotes to proper doublequotes)
- <li><a href="#CAPS">CAPS</a> (convert to upper case)
- <li><a href="#STRING">STRING</a> (user-definable strings)
- <br>
- <li><strong>Underscore/underline</strong>
- <ul>
- <li><a href="#UNDERSCORE">UNDERSCORE</a> (single underscore)
- <li><a href="#UNDERSCORE2">UNDERSCORE2</a> (double underscore)
- <li><a href="#UNDERLINE">UNDERLINE</a> (underline -- Courier only!)
- <li><a href="#UL">\*[UL]</a> (inline escape to underline -- Courier only!)
- </ul>
- <li><strong>Padding</strong>
- <ul>
- <li><a href="#PAD">PAD</a> (insert equalized space into lines)
- <li><a href="#PAD_MARKER">PAD_MARKER</a> (change/set the marker used with <strong>PAD</strong>)
- </ul>
- <li><strong>Leaders</strong>
- <ul>
- <li><a href="#LEADER">\*[LEADER]</a> (inline escape to add leaders to a line)
- <li><a href="#LEADER_CHARACTER">LEADER_CHARACTER</a> (change/set the leader character)
- </ul>
- <li><strong>Drop caps</strong>
- <ul>
- <li><a href="#DROPCAP">DROPCAP</a> (set a drop cap)
- <li><strong>Support macros for DROPCAP</strong>
- <ul>
- <li><a href="#DROPCAP_FAMILY">DROPCAP_FAMILY</a> (change drop cap family)
- <li><a href="#DROPCAP_FONT">DROPCAP_FONT</a> (change drop cap font)
- <li><a href="#DROPCAP_ADJUST">DROPCAP_ADJUST</a> (alter size of drop cap)
- <li><a href="#DROPCAP_COLOR">DROPCAP_COLOR</a> (change colour of drop cap)
- <li><a href="#DROPCAP_GUTTER">DROPCAP_GUTTER</a> (change space between drop cap and running text)
- </ul>
- </ul>
- <li><strong>Superscripts</strong>
- <ul>
- <li><a href="#SUP">\*[SUP]</a> (set superscript)
- <li><a href="#CONDSUP">\*[CONDSUP]</a> (set condensed superscript)
- <li><a href="#EXTSUP">\*[EXTSUP]</a> (set extended superscript)
- </ul>
- <li><strong>Lists</strong>
- <ul>
- <li><a href="docelement.html#LIST_INTRO">Introduction to lists</a>
- <li><a href="docelement.html#LIST">LIST</a>
- <li><a href="docelement.html#ITEM">ITEM</a>
- <li><a href="docelement.html#SHIFT_LIST">SHIFT_LIST</a>
- <li><a href="docelement.html#RESET_LIST">RESET_LIST</a>
- <li><a href="docelement.html#PAD_LIST_DIGITS">PAD_LIST_DIGITS</a>
- </ul>
-</ul>
-
-<!---ALIAS--->
-
-<hr width="66%" align="left">
-<a name="ALIAS"><h3><u>Rename macros</u></h3></a>
-<br>
-<nobr>Macro: <strong>ALIAS</strong> &lt;new name&gt; &lt;old name&gt;</nobr>
-
-<p>
-The <strong>ALIAS</strong> macro may well be your best friend. With it,
-you can change the name of a macro to anything you like
-(provided the new name is not already being used by
-<strong>mom</strong>; see the
-<a href="reserved.html#RESERVED">list of reserved words</a>).
-<p>
-Groff has always been a bit intimidating for new users because
-its standard macro packages use very terse macro names.
-<strong>Mom</strong> doesn't like people to feel intimidated; she wants
-them to feel welcome. Consequently, she tries for easy-to-grasp,
-self-explanatory macro names. However, <strong>mom</strong> knows
-that people have their own ways of thinking, their own preferences,
-their own habits. Some of her macro names may not suit you; they
-might be too long, or aren't what you automatically think of
-when you want to do a particular thing, or might conflict with habits
-you've developed over the years.
-<p>
-If you don't like one of <strong>mom</strong>'s macro names,
-say, PAGEWIDTH, change it, like this:
-<p>
-<pre>
- .ALIAS PW PAGEWIDTH
- | |
- new__| |__official
- name name
-</pre>
-
-The first argument to <strong>ALIAS</strong> is the new name you want
-for a macro. The second is the &quot;official&quot; name by
-which the macro is normally invoked. After <strong>ALIAS</strong>,
-either can be used.
-<p>
-Note that in <strong>ALIAS</strong>, you do NOT include the period
-(dot) that precedes the macro when it's a
-<a href="definitions.html#TERMS_CONTROLLINES">control line</a>.
-<p>
-<strong>NOTE:</strong> If you use <strong>ALIAS</strong> a lot,
-and always for the same things, consider creating an aliases
-file of the form
-<p>
-<pre>
- .ALIAS &lt;new name&gt; &lt;old name&gt;
- .ALIAS &lt;new name&gt; &lt;old name&gt;
- .ALIAS &lt;new name&gt; &lt;old name&gt;
- ...etc
-</pre>
-
-Put the file someplace convenient and source it at the
-beginning of your documents using the groff
-<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>
-<strong>.so</strong>. Assuming that you've created an aliases file
-called mom_aliases in your home directory under a directory
-called <code>Mom</code>, you'd source it by placing
-<p>
-<pre>
- .so /home/&lt;username&gt;/Mom/mom_aliases
-</pre>
-
-at the top of your documents.
-<p>
-If you share documents that make use of an alias file, remember that
-other people don't have the file! Paste the whole thing at the top
-of your documents, please.
-<p>
-<strong>EXPERTS:</strong> <strong>ALIAS</strong> is an alias of
-<code>.als</code>. You can use either, or mix 'n' match with
-impunity.
-<p>
-
-<!---SILENT--->
-
-<hr width="66%" align="left">
-<a name="SILENT"><h3><u>Hide input lines from output</u></h3></a>
-<br>
-<nobr>Macro: <strong>SILENT</strong> toggle</nobr>
-<br>
-Alias: <strong>COMMENT</strong>
-
-<p>
-Sometimes, you want to &quot;hide&quot;
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-from final output. This is most likely to be the case when setting
-up string tabs (see the
-<a href="STRING_TABS_TUT">quickie tutorial on string tabs</a>
-for an example), but there are other places where you might want input
-lines to be invisible as well. Any place you don't want input lines
-to appear in the output, use the <strong>SILENT</strong> macro.
-<p>
-<strong>SILENT</strong> is a toggle. Invoking it without an argument
-turns it on; any argument turns it off. E.g.,
-<p>
-<pre>
- .SILENT
- A line of text
- .SILENT OFF
-</pre>
-
-The line &quot;A line of text&quot; will not appear in the
-output copy.
-<p>
-<strong>SILENT</strong> is aliased as <strong>COMMENT</strong>.
-If you want to insert non-printing comments into your documents,
-you may prefer this.
-<p>
-<strong>NOTE: SILENT</strong> does not automatically break an
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-(see
-<a href="typesetting.html#BR">BR</a>)
-when you're in one of the
-<a href="definitions.html#TERMS_FILLED">fill modes</a>
-(<a href="typesetting.html#JUSTIFY">JUSTIFY</a>
-or
-<a href="typesetting.html#QUAD">QUAD L | R | C | J</a>).
-The same applies to tabs
-(<a href="typesetting.html#TAB_SET">typesetting</a>
-or
-<a href="typesetting.html#ST">string</a>)
-to which you've passed the <strong>J</strong> or <strong>QUAD</strong>
-argument. You must insert <code>.BR</code> yourself, or risk a
-portion of your text disappearing into a black hole.
-<p>
-
-<!---TRAP--->
-
-<hr width="66%" align="left">
-<a name="TRAP"><h3><u>Suspend/re-invoke traps</u></h3></a>
-<br>
-<nobr>Macro: <strong>TRAP</strong> toggle</nobr>
-
-<p>
-Traps are vertical positions on the output page at which you or
-<strong>mom</strong> have instructed groff to start doing
-something automatically. Commonly, this is near the bottom of
-the page, where automatic behind-the-scenes processing is needed
-in order for one page to finish and another to start.
-<p>
-Sometimes, traps get sprung when you don't want them. If this
-happens, surround just the offending macros and input lines with
-<p>
-<pre>
- .TRAP OFF
- ...
- .TRAP
-</pre>
-
-<strong>TRAP</strong> is a toggle, therefore any argument
-turns it off (i.e. suspends the trap), and no argument turns it
-(back) on.
-<p>
-
-<!---SMARTQUOTES--->
-
-<hr width="66%" align="left">
-<a name="SMARTQUOTES"><h3><u>Convert typewriter doublequotes to proper doublequotes</u></h3></a>
-<br>
-<nobr>Macro: <strong>SMARTQUOTES</strong> [&lt;off&gt;] [ ,, | &gt;&gt; | &lt;&lt; ]</nobr>
-<br>
-or
-<br>
-<nobr>Macro: <strong>SMARTQUOTES</strong> DA | DE | ES | FR | IT | NL | NO | PT | SV</nobr>
-
-<p>
-If you invoke <strong>SMARTQUOTES</strong> without an argument,
-<strong>mom</strong> converts all instances of the inch-mark,
-(<kbd>"</kbd> -- also called a &quot;doublequote&quot;), into
-the appropriate instances of true Anglo-American open- and
-close-doublequotes. (See
-<a href="#SQ_INTERNATIONAL">Internationalization</a>
-for how to get SMARTQUOTES to behave correctly for non-English
-quoting styles.)
-<p>
-Typographically, there is a difference between the inch-mark and
-doublequotes -- a BIG difference. Sadly, typewriters and computer
-keyboards supply only one: the inch-mark. While using inches for
-doublequotes is, and always has been, acceptable in typewriter-style
-copy, it has never been, and, God willing, never will be acceptable in
-typeset copy. Failure to turn inches into quotes is the first thing
-a professional typesetter notices in documents prepared by amateurs.
-And you don't want to look like an amateur, do you?
-<p>
-<a name="SQ_INTERNATIONAL"><h3>Internationalization</h3></a>
-<p>
-If you invoke <strong>SMARTQUOTES</strong> with one of the optional
-arguments (<kbd>,,</kbd> or <kbd>&gt;&gt;</kbd> or
-<kbd>&lt;&lt;</kbd>) you can use <kbd>&quot;</kbd> as &quot;cheap&quot;
-open- and close-quotes when inputting text in a language other than
-English, and have <strong>mom</strong> convert them, on output,
-into the chosen open- and close-quote style.
-<p>
-<kbd>,,</kbd> opens quotes with &quot;lowered doublequotes&quot; and
-closes them with &quot;raised doublequotes&quot;, as in this ascii
-approximation:
-<p>
-<pre>
- ,,Hilfe !``
-</pre>
-
-<kbd>&gt;&gt;</kbd> opens quotes with guillemets pointing to the
-right, and closes them with guillemets pointing to the left, as in
-this ascii approximation:
-<p>
-<pre>
- &gt;&gt;Zurück !&lt;&lt;
-</pre>
-
-<kbd>&lt;&lt;</kbd> opens quotes with guillemets pointing to the
-left, and closes them with guillemets pointing to the right, as in
-this ascii approximation:
-<p>
-<pre>
- &lt;&lt;Mais monsieur! Je ne suis pas ce genre de fille!&gt;&gt;
-</pre>
-
-Please note: the above arguments to <strong>SMARTQUOTES</strong>
-are literal ASCII characters. <kbd>,,</kbd> is two commas,
-<kbd>&lt;&lt;</kbd> is two less-than signs and <kbd>&gt;&gt;</kbd>
-is two greater-than signs.
-<p>
-Alternatively, you can pass <strong>SMARTQUOTES</strong> the
-two-letter, ISO 639 abbreviation for the language you're writing in,
-and <strong>mom</strong> will output the correct quotes.
-<p>
-<pre>
- .SMARTQUOTES DA = Danish &gt;&gt;text&lt;&lt;
- .SMARTQUOTES DE = German ,,text``
- .SMARTQUOTES ES = Spanish ``text´´
- .SMARTQUOTES FR = French &lt;&lt; text &gt;&gt;
- .SMARTQUOTES IT = Italian &lt;&lt; text &gt;&gt;
- .SMARTQUOTES NL = Dutch ´´text´´
- .SMARTQUOTES NO = Norwegian &lt;&lt;text&gt;&gt;
- .SMARTQUOTES PT = Portuguese &lt;&lt;text&gt;&gt;
- .SMARTQUOTES SV = Swedish &gt;&gt;text&gt;&gt;
-</pre>
-<p>
-Turn <strong>SMARTQUOTES</strong> off by passing it any argument
-<em>not</em> in the argument list (e.g. <strong>OFF</strong>,
-<strong>QUIT</strong>, <strong>X</strong>, etc.)
-<p>
-If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-with
-<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
-<strong>SMARTQUOTES</strong> is on by default (in the Anglo-American
-style); with
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-it's off by default (and should probably stay that way).
-<p>
-Finally, if you're fussy about the kerning of quote marks in
-relation to the text they surround, or have special quoting needs,
-you have to enter quote marks by hand using groff's native
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-for special characters (see man groff_char for a complete list of
-special characters). Entering quote marks this way allows you to
-use <strong>mom</strong>'s
-<a href="inlines.html#INLINE_KERNING_MOM">inline kerning escapes</a>
-to fine-tune the look of quotes.
-<p>
-<strong>NOTE:</strong> <strong>SMARTQUOTES</strong> does not work on
-single quotes, which most people input with the apostrophe (found at
-the right-hand end of the &quot;home row&quot; on a QWERTY keyboard).
-Groff will interpret all instances of the apostrophe as an apostrophe,
-making the symbol useless as an open-single-quote. For open single
-quotes, input the backtick character typically found under the tilde
-on most keyboards. (Pour nous autres, &quot;backtick&quot; veut dire
-l'accent grave.)
-Here's an example of correct input copy with single quotes:
-<p>
-<pre>
- "But she said, `I don't want to!'"
-</pre>
-
-<strong>ADDITIONAL NOTE:</strong> Whether or not you have
-<strong>SMARTQUOTES</strong> turned on, get into the habit of entering
-the foot- and inch-marks, when you need them, with the
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-<strong>\*[FOOT]</strong> and <strong>\*[INCH]</strong>, instead
-of <kbd>'</kbd> and <kbd>"</kbd>.
-<p>
-
-<!---CAPS--->
-
-<hr width="66%" align="left">
-<a name="CAPS"><h3><u>Convert to upper case</u></h3></a>
-<br>
-<nobr>Macro: <strong>CAPS</strong> toggle</nobr>
-
-<p>
-<strong>CAPS</strong> converts all lower case letters to upper
-case. Primarily, it's a support macro used by the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
-but you may find it helpful on occasion. <strong>CAPS</strong>
-is a toggle, therefore no argument turns it on, any argument
-turns it off.
-<p>
-<pre>
- .CAPS
- All work and no play makes Jack a dull boy.
- .CAPS OFF
-</pre>
-
-produces, on output
-<p>
-<pre>
- ALL WORK AND NO PLAY MAKES JACK A DULL BOY.
-</pre>
-
-<!---STRING--->
-
-<hr width="66%" align="left">
-<a name="STRING"><h3><u>User-defined strings</u></h3></a>
-<br>
-<nobr>Macro: <strong>STRING</strong> &lt;name&gt; &lt;what you want in the string&gt;</nobr>
-
-<p>
-You may find sometimes that you have to type out portions of text
-repeatedly. If you'd like not to wear out your fingers, you can
-define a &quot;string&quot; that, whenever you call it by name,
-outputs whatever you put into it.
-<p>
-For example, say you're creating a document that repeatedly uses
-the phrase &quot;the Montreal/Windsor corridor&quot;. Instead of
-typing all that out every time, you could define a string, like
-this:
-<p>
-<pre>
- .STRING mw the Montreal/Windsor corridor
-</pre>
-
-Once a string is defined, you can call it any time with the
-<a href="definitions.html#INLINES">inline escape</a>
-<kbd>\*[&lt;stringname&gt;]</kbd>. Using the example string above
-<p>
-<pre>
- The schedule for trains along \*[mw]:
-</pre>
-
-produces, on output
-<p>
-<pre>
- The schedule for trains along the Montreal/Windsor corridor:
-</pre>
-
-<strong>NOTE:</strong> Be very careful not to put any spaces at the
-ends of strings you're defining, unless you want them. Everything
-after the name argument you pass to <strong>STRING</strong> goes
-into the string, including trailing spaces.
-<p>
-<strong>Experts: STRING</strong> is an alias for <strong>ds</strong>.
-You can use either, or mix 'n' match with impunity.
-<p>
-
-<!---UNDERSCORE--->
-
-<hr width="66%" align="left">
-<a name="UNDERSCORE"><h3><u>Single underscore</u></h3></a>
-<br>
-<nobr>Macro: <strong>UNDERSCORE</strong> [ &lt;distance below baseline&gt; ] &quot;&lt;string&gt;&quot;</nobr>
-<br>
-<em>*Optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-By default, <strong>UNDERSCORE</strong> places an underscore 2 points
-beneath the required
-<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>.
-The string must be enclosed in double-quotes, like this:
-<p>
-<pre>
- .UNDERSCORE "Unmonitored monopolies breed high prices and poor products."
-</pre>
-
-If you wish to change the distance of the rule from the
-baseline, use the optional argument <i>&lt;distance below
-baseline&gt;</i> (with a unit of measure).
-<p>
-<pre>
- .UNDERSCORE 3p "Unmonitored monopolies breed high prices and poor products."
-</pre>
-
-The above places the underscore 3 points below the baseline.
-<p>
-<a name="NOTES_UNDERSCORE"></a>
-<strong>NOTES:</strong>
-<br>
-<strong>UNDERSCORE</strong> does not work across line breaks in output
-copy, which is to say that you can't underscore a multi-line passage
-simply by putting the text of the whole thing in the string you pass
-to <strong>UNDERSCORE</strong>. Each
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
-or portion of an output line you want underscored must be plugged
-separately into <strong>UNDERSCORE</strong>. Bear in mind, though,
-that underscoring should at best be an occasional effect in typeset
-copy. If you want to emphasize an entire passage, it's much, much
-better to change fonts (e.g. to italic or bold).
-<p>
-You can easily and successfully underline entire passages in simulated
-typewriter-style copy (i.e. if your font is Courier, or you're using
-the document processing macro
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>),
-with the
-<a href="#UNDERLINE">UNDERLINE</a>
-macro. <strong>UNDERLINE</strong> is designed specifically for this
-purpose, but works only with the Courier font.
-<p>
-<strong>Mom</strong> doesn't always get the position and length
-of the underscore precisely right in
-<a href="definitions.html#TERMS_JUST">justified</a>
-copy, although she's fine with all the other
-<a href="definitions.html#TERMS_FILLED">fill modes</a>,
-as well as with the no-fill modes. As of this writing, I have
-no solution to the occasional problems with justified copy.
-<p>
-<strong>UNDERSCORE</strong> tends to confuse
-<strong>gxditview</strong>, even though the output, when
-printed, looks fine. Generally, I recommend using <strong>gv</strong>
-to preview files anyway. See the section on
-<a href="#PREVIEWING">previewing</a>.
-<p>
-
-<!---UNDERSCORE2--->
-
-<hr width="66%" align="left">
-<a name="UNDERSCORE2"><h3><u>Double underscore</u></h3></a>
-<br>
-<nobr>Macro: <strong>UNDERSCORE2</strong> [ &lt;distance below baseline&gt; [ &lt;distance between rules&gt; ] ] &quot;&lt;string&gt;&quot;</nobr>
-<br>
-<em>*Optional arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-By default, <strong>UNDERSCORE2</strong> places a double underscore
-2 points beneath the required
-<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>.
-The string must be enclosed in double-quotes, like this:
-<p>
-<pre>
- .UNDERSCORE2 "Unmonitored monopolies breed high prices and poor products."
-</pre>
-
-The default distance between the two rules is 2 points.
-<p>
-If you wish to change the distance of the double underscore from
-the baseline, use the optional argument <i>&lt;distance below
-baseline&gt;</i> (with a unit of measure), e.g.,
-<p>
-<pre>
- .UNDERSCORE2 3p "Unmonitored monopolies breed high prices and poor products."
-</pre>
-
-which places the double underscore 3 points below the baseline.
-<p>
-If you wish to change the distance between the two rules as
-well, use the second optional argument <i>&lt;distance between
-rules&gt;</i> (with a unit of measure). Be aware that you must
-give a value for the first optional argument if you want to use
-the second.
-<p>
-<strong>NOTE:</strong> the same restrictions and caveats apply
-to <strong>UNDERSCORE2</strong> as to
-<strong>UNDERSCORE</strong>. See the
-<a href="#NOTES_UNDERSCORE">NOTES</a>
-for <strong>UNDERSCORE</strong>.
-<p>
-
-<!---UNDERLINE--->
-
-<hr width="66%" align="left">
-<a name="UNDERLINE"><h3><u>Underline text -- Courier font only!</u></h3></a>
-<br>
-<nobr>Macro: <strong>UNDERLINE</strong> toggle</nobr>
-
-<p>
-If your font is Courier, or you're using the document processing macro
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>UNDERLINE</strong> allows you to underline words and
-passages that, in typeset copy, would be italicized. You invoke
-<strong>UNDERLINE</strong> as you do with all toggle macros --
-by itself (i.e. with no argument) to initiate underlining, and
-with any argument to turn underlining off.
-<p>
-When on, <strong>UNDERLINE</strong> underlines letters, words
-and numbers, but not punctuation or spaces. This makes for more
-readable copy than a solid underline.
-<p>
-<strong>NOTE:</strong> Underlining may also be turned on and off
-<a href="definitions.html#TERMS_INLINES">inline</a>
-with the escapes
-<a href="#UL">\*[UL]...\*[ULX].</a>
-<p>
-
-<!---UL--->
-
-<hr width="66%" align="left">
-<a name="UL"><h3><u>Inline escape for underlining -- Courier font only!</u></h3></a>
-<br>
-Inline: <strong>\*[UL]...\*[ULX]</strong>
-
-<p>
-If your font is Courier, or you're using the document processing macro
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>\*[UL]...\*[ULX]</strong> underlines words and
-passages that, in typeset copy, would be italicized.
-<p>
-<strong>\*[UL]</strong> underlines all letters, words and numbers
-following it, but not punctuation or spaces. This makes for more
-readable copy than a solid underline. When you no longer want
-underlining, <strong>\*[ULX]</strong> turns underlining off.
-<p>
-The macro
-<a href="#UNDERLINE">UNDERLINE</a>
-and the inline escape <strong>\*[UL]</strong> are functionally
-identical, hence
-<p>
-<pre>
- .FAM C
- .FT R
- .PT_SIZE 12
- .LS 24
- .SS 0
- .QUAD LEFT
- Which should I heed?
- .UNDERLINE
- Just do it
- .UNDERLINE OFF
- or
- .UNDERLINE
- just say no?
- .UNDERLINE OFF
-</pre>
-
-produces the same result as
-<p>
-<pre>
- .FAM C
- .FT R
- .PT_SIZE 12
- .LS 24
- .SS 0
- .QUAD LEFT
- Which should I heed? \*[UL]Just do it\*[ULX] or \*[UL]just say no?\*[ULX]
-</pre>
-
-<!---PAD--->
-
-<hr width="66%" align="left">
-<a name="PAD"><h3><u>Insert space into lines</u></h3></a>
-<br>
-<nobr>Macro: <strong>PAD</strong> &quot;&lt;string with pad markers inserted&gt;&quot; [NOBREAK]</nobr>
-
-<p>
-With <strong>PAD</strong>, you can insert unspecified amounts of
-whitespace into a line. The optional <strong>NOBREAK</strong>
-argument tells <strong>mom</strong> not to advance on the page
-after the <strong>PAD</strong> macro has been invoked.
-<p>
-<strong>PAD</strong> calculates the difference between the length of
-text on the line and the distance remaining to its end, then inserts
-the difference (as whitespace) at the place(s) you specify.
-<p>
-Take, for example, the following relatively common typesetting
-situation, found at the bottom of legal agreements:
-<p>
-<pre>
- Date Signature |
-</pre>
-
-The person signing the agreement is supposed to fill in the date
-as well as a signature. Space needs to be left for both, but
-the exact amount is neither known, nor important. All that
-matters is that there be a little space after Date, and rather
-more space after Signature. (In the above, | represents
-the end of the line at the prevailing line length.)
-<p>
-The
-<a href="#PADMARKER">pad marker</a>
-(see below) is # (the pound or number sign on your keyboard) and
-can be used multiple times in a line. With that in mind, here's how
-you'd input the Date/Signature line (assuming a length of 30 picas):
-<p>
-<pre>
- .LL 30P
- .PAD "Date#Signature###"
-</pre>
-
-When the line is output, the space remaining on the line, after
-&quot;Date&quot; and &quot;Signature&quot; have been taken into
-account, is split into four (because there are four # signs).
-One quarter of the space is inserted between Date and Signature,
-the remainder is inserted after Signature.
-<a name="PAD_EXAMPLE"></a>
-<p>
-One rarely wants merely to insert space in a line; one usually
-wants to fill it with something, hence <strong>PAD</strong> is
-particularly useful in conjunction with
-<a href="#STRING_TABS">string tabs</a>.
-The following uses the Date/Signature example above, but adds
-rules into the whitespace through the use of string tabs and
-<strong>mom</strong>'s
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<a href="inlines.html#INLINE_RULE_MOM">\*[RULE]</a>.
-(Instead of <strong>\*[RULE]</strong>,
-groff's line drawing function,
-<a href="inlines.html#INLINE_LINEDRAWING_GROFF">\l</a>
-could be used.)
-<p>
-<pre>
- .LL 30P
- .PAD "Date \*[ST1]#\*[ST1X] Signature \*[ST2]###\*[ST2X]" NOBREAK
- .ST 1 J
- .ST 2 J
- .TAB 1
- \*[RULE]
- .TN
- \*[RULE]
- .TQ
-</pre>
-
-If you're not a typesetter, and if you're new to groff, the
-example probably looks like gibberish. My apologies. However,
-remember that typesetting is a craft, and without having studied
-the craft, it takes a while to grasp its concepts.
-<p>
-Basically, what the example does is:
-<br>
-<ol>
- <li>Pads the Date/Signature line (using the pad marker #),
- encloses the padded space with two string tabs markers,
- and outputs the line.
- <br>
- <li>Sets the two string tabs (notice the use of
- <a href="#EL">EL</a>
- beforehand; you don't want <strong>mom</strong>
- to advance a line at this point).
- <br>
- <li>Calls the first string tab and draws a rule to its full
- length.
- <br>
- <li>Calls the second tab with
- <a href="#TN">TN</a>
- (which moves to tab 2 and stays on the same baseline)
- then draws a rule to the full length of string tab 2.
-</ol>
-<br>
-Often, when setting up string tabs this way, you don't want the
-padded line to print immediately. To accomplish this, use
-<a href="#SILENT">SILENT</a>.
-See the <a href="#STRING_TABS_TUT">quickie tutorial on string tabs</a>
-for an example.
-<p>
-<strong>NOTE:</strong> Because the pound sign (#) is used as the pad
-marker, you can't use it as a literal part of the pad string. If you
-need the sign to appear in the text of a padded line, change the pad
-marker with <a href="#PAD_MARKER">PAD_MARKER</a>. Also, be aware
-that # as a pad marker only applies within the <strong>PAD</strong>
-macro; at all other times it prints literally, just as you'd expect.
-<p>
-Another important consideration when using <strong>PAD</strong> is that
-because the string must be enclosed in double-quotes, you can't use the
-double-quote (&quot;) as part of the string. The way to circumvent
-this is to use the groff
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-<strong>\(lq</strong> and <strong>\(rq</strong> (leftquote and
-rightquote respectively) whenever double-quotes are required in the
-string passed to <strong>PAD</strong>.
-<p>
-
-<!---PAD_MARKER--->
-
-<hr width="66%" align="left">
-<a name="PAD_MARKER"><h3><u>Change/set the marker used with PAD</u></h3></a>
-<br>
-<nobr>Macro: <strong>PAD_MARKER</strong> &lt;character to use as the pad marker&gt;</nobr>
-
-<p>
-If you need to change <strong>mom</strong>'s default pad marker
-(#), either because you want a literal # in the padded line,
-or simply because you want to use another character instead, use
-<strong>PAD_MARKER</strong>, whose argument is the new pad marker
-character you want.
-<p>
-<pre>
- .PAD_MARKER @
-</pre>
-
-changes the pad marker to @.
-<p>
-Once you've changed the pad marker, the new marker remains in
-effect for every instance of
-<a href="#PAD">PAD</a>
-until you change it again (say, back to the pound sign).
-<p>
-
-<!---\*[LEADER]--->
-
-<hr width="66%" align="left">
-<a name="LEADER"><h3><u>Inline escape to add leaders to a line</u></h3></a>
-<br>
-Inline: <strong>\*[LEADER]</strong>
-
-<p>
-Whenever you want to fill a line or tab with
-<a href="definitions.html#TERMS_LEADER">leaders</a>,
-use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\*[LEADER]</strong>. The remainder of the line or tab will be
-filled with the leader character. <strong>Mom</strong>'s
-default leader character is a period (dot), but you can change
-it to any character you like with
-<a href="#LEADER_CHARACTER">LEADER_CHARACTER</a>.
-<p>
-<strong>NOTE:</strong> <strong>\*[LEADER]</strong> fills lines
-or tabs right to their end. You cannot insert leaders into a
-line or tab and have text following the leader on the same line
-or in the same tab. Should you wish to achieve such an effect
-typographically, create tabs for each element of the line and
-fill them appropriately with the text and leaders you need.
-<a href="#STRING_TABS">String tabs</a> are perfect for this. An
-example follows.
-<p>
-<pre>
- .LL 30P
- .PAD "Date\*[ST1]#\*[ST1X]Signature\*[ST2]###\*[ST2X]"
- .EL
- .ST 1 J
- .ST 2 J
- .TAB 1
- \*[LEADER]
- .TN
- \*[LEADER]
- .TQ
-</pre>
-
-The <strong>PAD</strong> line sets the words Date and Signature,
-and marks string tabs around the pad space inserted in the line.
-The string tabs are then &quot;set&quot;, called, and filled
-with leaders. The result looks like this:
-<p>
-<pre>
- Date.............Signature.....................................
-</pre>
-
-<!---LEADER_CHARACTER--->
-
-<hr width="66%" align="left">
-<a name="LEADER_CHARACTER"><h3><u>Change/set the leader character</u></h3></a>
-<br>
-<nobr>Macro: <strong>LEADER_CHARACTER</strong> &lt;character&gt;</nobr>
-
-<p>
-<strong>LEADER_CHARACTER</strong> takes one argument: a single
-character you would like to be used for
-<a href="definitions.html#TERMS_LEADER">leaders</a>.
-(See
-<a href="#LEADER">\*[LEADER]</a> for an explanation of how to
-fill lines with leaders.)
-<p>
-For example, to change the leader character from <strong>mom</strong>'s
-default (a period) to the underscore character, enter
-<p>
-<pre>
- .LEADER_CHARACTER _
-</pre>
-
-<!---DROPCAP--->
-
-<hr width="66%" align="left">
-<a name="DROPCAP"><h3><u>Drop caps</u></h3></a>
-<br>
-<nobr>Macro: <strong>DROPCAP</strong> &lt;dropcap letter&gt; &lt;number of lines to drop&gt; [ COND &lt;percentage&gt; | EXT &lt;percentage&gt; ]</nobr>
-
-<p>
-The first two arguments to <strong>DROPCAP</strong> are the letter you
-want to be the
-<a href="definitions.html#TERMS_DROPCAP">drop cap</a>
-and the number of lines you want it to drop. By default,
-<strong>mom</strong> uses the current family and font for the drop cap.
-<p>
-The optional argument (COND or EXT) indicates that you want the
-drop cap condensed (narrower) or extended (wider). If you use
-<strong>COND</strong> or <strong>EXT</strong>, you must follow the
-argument with the percentage of the letter's normal width you want
-it condensed or extended. No percent sign (%) is required.
-<p>
-<strong>Mom</strong> will do her very best to get the drop cap to
-line up with the first line of text indented beside it, then set
-the correct number of indented lines, and restore your left margin
-when the number of drop cap lines has been reached.
-<p>
-Beginning a paragraph with a drop cap &quot;T&quot; looks
-like this:
-<p>
-<pre>
- .DROPCAP T 3 COND 90
- he thousand injuries of Fortunato I had borne as best I
- could, but when he ventured upon insult, I vowed revenge.
- You who so well know the nature of my soul will not suppose,
- however, that I gave utterance to a threat...
-</pre>
-
-The drop cap, slightly condensed but in the current family and font,
-will be three lines tall, with whatever text fills those three
-lines indented to the right of the letter. The remainder of the
-paragraph's text will revert to the left margin.
-<p>
-<strong>NOTE:</strong> When using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macro</a>
-<a href="#PP">PP</a>,
-<strong>DROPCAP</strong> only works
-<br>
-<ul>
- <li>with initial paragraphs (i.e. at the start of the document,
- or after
- <a href="#HEAD">HEAD</a>),
- <li>when <strong>DROPCAP</strong> comes immediately after <strong>PP</strong>,
- <li>and when the
- <a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
- is TYPESET.
-</ul>
-<br>
-If these conditions aren't met, <strong>DROPCAP</strong> is silently ignored.
-<p>
-<strong>WARNING:</strong> <strong>DROPCAP</strong> puts a bit of
-a strain on resource-challenged systems. If you have such a
-system and use drop caps extensively in a document, be prepared
-for a wait while <strong>mom</strong> does her thing.
-
-<h3><a name="DROPCAP_SUPPORT"><u>Support macros for DROPCAP</u></a></h3>
-Drop caps are the bane of most typesetters' existence. It's
-very difficult to get the size of the drop cap right for the
-number of drop lines, especially if the drop cap is in a
-different family from the prevailing family of running text.
-Not only that, but there's the gutter around the drop cap to
-take into account, plus the fact that the letter may be too wide
-or too narrow to look anything but odd or misplaced.
-<p>
-<strong>Mom</strong> solves the last of these problems with the
-<strong>COND</strong> and <strong>EXT</strong> arguments. The
-rest she solves with macros that change the default behaviour of
-<strong>DROPCAP</strong>, namely
-<p>
-<a href="#DROPCAP_FAMILY">DROPCAP_FAMILY</a>,
-<br>
-<a href="#DROPCAP_FONT">DROPCAP_FONT</a>,
-<br>
-<a href="#DROPCAP_COLOR">DROPCAP_COLOR</a>,
-<br>
-<a href="#DROPCAP_ADJUST">DROPCAP_ADJUST</a>
-<br>
-and
-<br>
-<a href="#DROPCAP_GUTTER">DROPCAP_GUTTER</a>.
-<p>
-These macros must, of course, come before you invoke
-<strong>DROPCAP</strong>.
-
-<h3><a name="DROPCAP_FAMILY"><u>DROPCAP_FAMILY</u></a></h3>
-
-Set the drop cap family by giving
-<strong>DROPCAP_FAMILY</strong> the name of the family you want,
-e.g.
-<p>
-<pre>
- .DROPCAP_FAMILY H
-</pre>
-
-which will set the family to Helvetica for the drop cap only.
-
-<h3><a name="DROPCAP_FONT"><u>DROPCAP_FONT</u></a></h3>
-
-Set the drop cap font by giving
-<strong>DROPCAP_FONT</strong> the name of the font you want,
-e.g.
-<p>
-<pre>
- .DROPCAP_FONT I
-</pre>
-
-which will set the font to italic for the drop cap only.
-
-<h3><a name="DROPCAP_ADJUST"><u>DROPCAP_ADJUST</u></a></h3>
-
-If the size <strong>mom</strong> calculates for the drop cap
-isn't precisely what you want, you can increase or decrease it
-with <strong>DROPCAP_ADJUST</strong>, like this:
-e.g.
-<p>
-<pre>
- .DROPCAP_ADJUST +1
- or
- .DROPCAP_ADJUST -.75
-</pre>
-
-<strong>DROPCAP_ADJUST</strong> only understands
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
-therefore do not append any
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-to the argument. And always be sure to prepend the plus or
-minus sign, depending on whether you want the drop cap larger or
-smaller.
-
-
-<h3><a name="DROPCAP_COLOR"><u>DROPCAP_COLOR</u></a></h3>
-
-If you'd like your drop cap colourized, simply invoke
-<strong>DROPCAP_COLOR</strong> with the name of a colour you've already
-created (&quot;initialized&quot;) with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>. Only the drop cap will be
-colourized; all other text will remain at the current colour
-default (usually black).
-
-<h3><a name="DROPCAP_GUTTER"><u>DROPCAP_GUTTER</u></a></h3>
-
-By default, <strong>mom</strong> puts three points of space
-between the drop cap and the text indented beside it. If you
-want another value, use <strong>DROPCAP_GUTTER</strong> (with a
-unit of measure), like this:
-<p>
-<pre>
- .DROPCAP_GUTTER 6p
-</pre>
-
-<!---\*[SUP]--->
-
-<hr width="66%" align="left">
-<a name="SUP"><h3><u>Superscript</u></h3></a>
-<br>
-Inlines: <strong>\*[SUP]...\*[SUPX]</strong>
-
-<p>
-Superscripts are accomplished
-<a href="definitions.html#TERMS_INLINES">inline</a>.
-Whenever you need one, typically for numerals, all you need to
-do is surround the superscript with the inlines above.
-<strong>\*[SUP]</strong> begins superscripting;
-<strong>\*[SUPX]</strong> turns it off.
-<a name="CONDSUP"></a>
-<a name="EXTSUP"></a>
-<p>
-If your running type is
-<a href="#COND_INLINE">pseudo-condensed</a>
-or
-<a href="#EXT_INLINE">pseudo-extended</a>
-and you want your superscripts to be equivalently pseudo-condensed or
--extended, use <strong>\*[CONDSUP]...\*[CONDSUPX]</strong> or
-<strong>\*[EXTSUP]...\*[EXTSUPX]</strong>.
-<p>
-The superscript inlines are primarily used by the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-for automatic generation of numbered footnotes. However, you may
-find them useful for other purposes.
-<p>
-<strong>NOTE:</strong> <strong>Mom</strong> does a pretty fine job of
-making superscripts look good in any font and at any size. If you're
-fussy, though (and I am), about precise vertical placement, kerning,
-weight, size, and so on, you may want to roll your own solution.
-And sorry, there's no <strong>mom</strong> equivalent for subscripts.
-I'm neither a mathematician nor a chemist, so I don't need them.
-Of course, anyone who wishes to contribute a subscript routine to
-<strong>mom</strong> will receive eternal blessings not only in this
-lifetime, but in all lifetimes to come.
-<p>
-<hr>
-<a href="inlines.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="typesetting.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/headfootpage.html b/contrib/groff/contrib/mom/momdoc/headfootpage.html
deleted file mode 100644
index 723b18110575..000000000000
--- a/contrib/groff/contrib/mom/momdoc/headfootpage.html
+++ /dev/null
@@ -1,1636 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document processing: headers, footers and pagination</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="rectoverso.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docelement.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="HEADFOOTPAGE">
- <h1 align="center"><u>PAGE HEADERS, FOOTERS, AND PAGINATION</u></h1>
-</a>
-
-<ul>
- <li><a href="#HEADFOOTPAGE_INTRO">Introduction -- VERY IMPORTANT; read me!</a>
- <ul>
- <li><a href="#PAGINATION_NOTE">An important note on pagination</a>
- </ul>
- <li><a href="#DESCRIPTION_GENERAL">General description of headers/footers</a>
- <li><a href="#HEADER_STYLE">Default specs for headers/footers</a>
- <li><a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>
- <li><a href="#HEADFOOT_MANAGEMENT">Managing headers/footers</a> -- see also <a href="#HEADFOOT_TOC">Control macros for headers/footers</a>
- <ul>
- <li><a href="#HEADERS">HEADERS</a> -- on or off
- <li><a href="#FOOTERS">FOOTERS</a> -- on or off
- <li><a href="#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a>
- <li><a href="#USERDEF_HDRFTR">User-defined, single string recto/verso headers/footers</a>
- <ul>
- <li><a href="#USERDEF_HDRFTR_INTRO">Introduction</a>
- <li><a href="#HDRFTR_RECTOVERSO">HEADER_RECTO, HEADER_VERSO</a>
- </ul>
- </ul>
- <a name="HEADFOOT_TOC"></a>
- <li><a href="#HEADFOOT_CONTROL">Control macros for headers/footers</a>
- <ul>
- <li><a href="#HDRFTR_STRINGS">Header/footer strings</a>
- <ul>
- <li><a href="#RESERVED_STRINGS">Using mom's &quot;reserved&quot; strings in header/footer definitions</a>
- </ul>
- <li><a href="#HDRFTR_STYLE">Header/footer style</a>
- <ul>
- <li><a href="#HDRFTR_STYLE_GLOBAL">Global style control</a>
- <li><a href="#HDRFTR_STYLE_PART">Part-by-part style control</a>
- </ul>
- <li><a href="#HDRFTR_VERTICAL">Vertical placement and spacing of headers/footers</a>
- <ul>
- <li><a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>
- <li><a href="#HDRFTR_GAP">HEADER_GAP</a>
- </ul>
- <li><a href="#HDRFTR_SEPARATOR">The header/footer separator rule</a>
- <ul>
- <li><a href="#HDRFTR_RULE">HEADER_RULE</a> -- on or off
- <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a> -- distance of rule from header/footer
- <li><a href="#HDRFTR_RULE_COLOR">HEADER_RULE_COLOR</a> -- colour of the header/footer rule
- </ul>
- </ul>
- <li><a href="#PAGINATION">Pagination</a>
- <ul>
- <li><a href="#INDEX_PAGINATION">Pagination control macros</a>
- </ul>
-</ul>
-
-<a name="HEADFOOTPAGE_INTRO">
- <h2><u>Introduction</u></h2>
-</a>
-
-<a href="definitions.html#TERMS_HEADER">Headers</a>
-and
-<a href="definitions.html#TERMS_FOOTER">footers</a>,
-as defined in the section
-<a href="definitions.html#TERMS_MOM">Mom's Document Processing Terms</a>,
-are those parts of a document that contain information about the document
-itself which appear in the margins either above or below
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-They are, in all respects but two, identical. The differences are:
-<p>
-<ol>
- <li>headers appear in the margin <em>above</em> running text while
- footers appear in the margin <em>beneath</em> running text;
- <li>the (optional) rule that separates headers from running
- text appears <em>below</em> the header while
- the (optional) rule that separates footers from running
- text appears <em>above</em> the footer.
-</ol>
-<a name="HEADERFOOTER"></a>
-<p>
-Because headers and footers are virtually identical, this
-documentation addresses itself only to headers. In all cases,
-unless otherwise noted, descriptions of headers
-describe footers as well.
-<p>
-Furthermore, any
-<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>
-that begins with <strong>HEADER_</strong> may be used to control
-footers, simply by replacing <strong>HEADER_</strong> with
-<strong>FOOTER_</strong>.
-<p>
-<strong>Author's note:</strong> Left to their own devices (i.e. if
-you're happy with the way <strong>mom</strong> does things by default),
-headers are something you never have to worry about. You can skip
-reading this section entirely. But if you want to change them, be
-advised that headers have more macros to control their appearance than
-any other document element. The text of this documentation becomes
-correspondingly dense at this point.
-<a name="PAGINATION_NOTE"></a>
-<p>
-<strong>NOTE:</strong> While the single page number that
-<strong>mom</strong> generates in either the top or bottom margin
-above or below running text is technically a kind of header/footer,
-<strong>mom</strong> and this documentation treat it as a
-separate page element.
-<p>
-
-<a name="DESCRIPTION_GENERAL"><h3><u>General description of headers/footers</u></h3></a>
-<p>
-Headers comprise three distinct parts: a left part, a centre part,
-and a right part. Each part contains text (a &quot;string&quot;)
-that identifies some aspect of the document as a whole.
-<p>
-The left part (&quot;header left&quot;) lines up with the document's
-left margin. The centre part (&quot;header centre&quot;) is
-centred on the document's line length. The right part (&quot;header
-right&quot;) lines up with the document's right margin. Not all parts
-need contain a string, and if you don't want headers at all, you can
-turn them off completely.
-<p>
-<strong>A note to groff experts:</strong> Although
-<strong>mom</strong>'s headers resemble the three-part titles generated
-by <code>.tl</code>, they're in no way related to it, nor based
-upon it. <code>.tl</code> is not used at all in <strong>mom</strong>.
-<p>
-Normally, <strong>mom</strong> fills headers with strings appropriate
-to the document type selected with
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>.
-You can, however, supply whatever strings you like -- including page
-numbers -- to go in any part of headers. What's more, you can set the
-family, font, size and capitalization style (caps or caps/lower-case)
-for each header part individually.
-<p>
-By default, <strong>mom</strong> prints a horizontal rule beneath
-headers to separate them visually from running text. In the case of
-footers, the rule is <em>above</em> running text. You can increase
-or decrease the space between the header and the rule if you like (with
-<a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a>),
-or remove it completely.
-<p>
-
-<a name="HEADER_STYLE"><h3><u>Default specs for headers/footers</u></h3></a>
-<p>
-<strong>Mom</strong> makes small type adjustments to each part of
-the header (left, centre, right) to achieve an aesthetically
-pleasing result. The defaults are listed below. (The strings
-<strong>mom</strong> puts by default in each part are explained in
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>.)
-<p>
-<strong>NOTE:</strong> Except for capitalization (all caps or
-caps/lower-case), these defaults apply only to
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>.
-<p>
-<pre>
-TYPE SPEC HEADER LEFT HEADER CENTER HEADER RIGHT
---------- ----------- ------------- ------------
-Family document default document default document default
-Font roman italic roman
-Colour (black) (black) (black)
-All caps no no yes
-Size* -.5 (points) -.5 (points) -2 (points)
- (-2 if all caps) (-2 if all caps) (-.5 if not all caps)
-
-*Relative to the point size of type in paragraphs
-</pre>
-
-You can, of course, change any of the defaults using the appropriate
-control macros. And should you wish to design headers from the ground
-up, <strong>mom</strong> has a special macro,
-<a href="#HDRFTR_PLAIN">HEADER_PLAIN</a>,
-that removes all type adjustments to headers. The straightforward
-type specs for paragraphs are used instead, providing a simple
-reference point for any alterations you want to make to the family,
-font, size and capitalization style of any header part.
-<p>
-
-<a name="VERTICAL_SPACING"><h3><u>Vertical placement and spacing of headers/footers</u></h3></a>
-<p>
-As explained in the section on
-<a href="typedocmac.html">typesetting macros in document processing</a>,
-the top and bottom margins of a <strong>mom</strong> document
-are the vertical start and end positions of
-<a href="definitions.html#TERMS_RUNNING">running text</a>,
-not the vertical positions of headers or footers, which, by definition,
-appear in the margins <em>above</em> (or below) running text.
-<p>
-The vertical placement of headers
-is controlled by the macro
-<a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>,
-which establishes the
-<a href="definitions.html">baseline</a>
-position of headers relative to the <em>top</em> edge of the page.
-The header rule, whose position is relative to the header itself,
-is controlled by a separate macro.
-<strong>FOOTER_MARGIN</strong> establishes the baseline position of
-footers relative to the <em>bottom</em> edge of the page.
-<p>
-<a href="#HDRFTR_GAP">HEADER_GAP</a> establishes
-the distance between headers and the <em>start</em> of running text (effectively
-making <strong>HEADER_MARGIN + HEADER_GAP</strong> the top margin of
-running text unless you give <strong>mom</strong> a literal top margin
-(with
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>),
-in which case she ignores <strong>HEADER_GAP</strong> and starts
-running text at whatever top margin you gave.
-<strong>FOOTER_GAP</strong> and
-<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
-work similarly, except they determine where running text
-<em>ends</em> on the page. (See
-<a href="#FOOTER_MARGIN">FOOTER MARGIN AND BOTTOM MARGIN -- VERY IMPORTANT!</a>
-for a warning about possible conflicts between the footer margin
-and the bottom margin.)
-<p>
-Confused? <strong>Mom</strong> apologizes. It's really quite
-simple. By default, <strong>mom</strong> sets headers 4-1/2
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
-down from the top of the page and starts running text 3 picas (the
-<strong>HEADER_GAP</strong>) beneath that, which means the
-effective top margin of running text is 7-1/2 picas (visually approx. 1
-inch). If you give <strong>mom</strong> a literal top margin (with
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>),
-she ignores the <strong>HEADER_GAP</strong> and starts running
-text at whatever top margin you gave.
-<p>
-Footers are treated the same way, the only difference being the
-default distances. <strong>Mom</strong> sets footers 3 picas up from
-the bottom of the page, and interrupts the processing of running text 3
-picas (the <strong>FOOTER_GAP</strong>) above that (again, visually
-approx. 1 inch). If you give <strong>mom</strong> a literal bottom
-margin (with <a
-href="typesetting.html#B_MARGIN">B_MARGIN</a>), she ignores the
-<strong>FOOTER_GAP</strong> and interrupts the processing of running
-text at whatever bottom margin you gave.
-<p>
-If <strong>mom</strong> is paginating your document (she
-does, by default, at the bottom of each page), the vertical
-spacing and placement of page numbers, whether at the top
-or the bottom of the page, is managed exactly as if the
-page numbers were headers (or footers), and are controlled
-by the same macros. See
-<a href="#PAGINATION">Pagination control</a>.
-<p>
-<hr>
-
-<!========================================================================>
-
-<a name="HEADFOOT_MANAGEMENT">
- <h2><u>Managing headers/footers</u></h2>
-</a>
-
-<p>
-The following are the basic macros for turning
-<a href="definitions.html#TERMS_HEADER">headers</a>
-or
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-on or off. They should be invoked prior to
-<a href="docprocessing.html#START">START</a>.
-<p>
-By default, <strong>mom</strong> prints page headers. If you turn
-them off, she will begin
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-on each page with a default top margin of 6
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
-unless you have requested a different top margin (with
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>)
-prior to
-<a href="docprocessing.html#START">START</a>.
-<p>
-Please note that headers and footers are mutually exclusive. If
-headers are on, footers (but NOT bottom-of-page numbering) are
-automatically turned off. Equally, if footers are on, headers
-(but NOT top-of-page numbering) are automatically turned off. Thus, if
-you'd prefer footers in a document, you need only invoke
-<a href="#FOOTERS">FOOTERS</a>;
-there's no need to turn headers off first.
-<p>
-
-<!---HEADERS--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HEADERS"></a>
-<nobr>Macro: <strong>HEADERS</strong> toggle</nobr>
-
-<p>
-<a href="definitions.html#TERMS_HEADER">Page headers</a>
-are on by default. If you don't want them, turn them off by
-invoking <strong>HEADERS</strong> with any argument
-(<strong>OFF, QUIT, END, X...</strong>), e.g.
-<p>
-<pre>
- .HEADERS OFF
-</pre>
-<p>
-<strong>NOTE:</strong> <strong>HEADERS</strong> automatically
-disables
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-(you can't have both), but not the page numbers that normally
-appear at the bottom of the page.
-<p>
-<strong>ADDITIONAL NOTE:</strong> If <strong>HEADERS</strong>
-are <strong>OFF</strong>, <strong>mom</strong>'s normal top
-margin for
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-(7.5
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>)
-changes to 6 picas (visually approx. 1 inch). This does NOT apply
-to the situation where footers have been explicitly turned on
-(with
-<a href="#FOOTERS">FOOTERS</a>).
-Explicitly invoking footers moves page numbering to the
-top of the page, where its placement and spacing are the same as
-for headers. (I.e. the top margin of running text remains 7.5
-picas.)
-<p>
-
-<!---FOOTERS--->
-
-<hr width="66%" align="left">
-<p>
-<a name="FOOTERS"></a>
-<nobr>Macro: <strong>FOOTERS</strong> toggle</nobr>
-
-<p>
-<a href="definitions.html#TERMS_FOOTER">Page footers</a>
-are off by default. If you want them instead of
-<a href="definitions.html#TERMS_HEADER">headers</a>
-(you can't have both), turn them on by invoking
-<strong>FOOTERS</strong> without an argument, e.g.
-<p>
-<pre>
- .FOOTERS
-</pre>
-
-<p>
-<strong>FOOTERS</strong> automatically disables headers, and
-<strong>mom</strong> shifts the placement of page numbers from their
-normal position at page bottom to the top of the page.
-<p>
-<strong>NOTE:</strong> By default, when footers are on,
-<strong>mom</strong> does not print a page number on the first
-page of a document, nor on first pages after
-<a href="rectoverso.html#COLLATE">COLLATE</a>.
-If you don't want this behaviour, you can change it with
-<a href="#PAGENUM_ON_FIRST_PAGE">PAGENUM_ON_FIRST_PAGE</a>.
-<p>
-
-<!---FOOTER_ON_FIRST_PAGE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="FOOTER_ON_FIRST_PAGE"></a>
-<nobr>Macro: <strong>FOOTER_ON_FIRST_PAGE</strong> toggle</nobr>
-
-<p>
-If you invoke
-<a href="#FOOTERS">FOOTERS</a>,
-<strong>mom</strong>, by default, does not print a footer on the
-first page of the document. (The
-<a href="definitions.html">docheader</a>
-on page 1 makes it redundant.) However, should you wish a footer on
-page 1, invoke <strong>FOOTER_ON_FIRST_PAGE</strong> without any argument.
-<p>
-<hr>
-
-<!---USERDEF_HDRFTR--->
-
-<a name="USERDEF_HDRFTR">
- <h2><u>User-defined, single string recto/verso headers/footers</u></h2>
-</a>
-
-<a name="USERDEF_HDRFTR_INTRO"><h3><u>Introduction</u></h3></a>
-
-Sometimes, you'll find you can't get <strong>mom</strong>'s handling
-of 3-part headers or footers to do exactly what you want in the
-order you want. This is most likely happen when you want the
-information contained in the headers/footers split over two pages,
-as is often the case with recto/verso documents.
-<p>
-Say, for example, you want recto page headers to contain a document's
-author, centred, and verso page headers to contain the document's
-title, also centred, like this:
-<p>
-<pre>
- +------------------------+ +------------------------+
- | Author | | Title |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- +------------------------+ +------------------------+
-</pre>
-
-With <strong>mom</strong>'s standard 3-part headers, this isn't
-possible, even when
-<a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a>
-is enabled. <strong>RECTO_VERSO</strong> switches the left and
-right parts of headers on alternate pages, but the centre
-part remains unchanged.
-<p>
-Any time you need distinctly different headers on alternate
-pages, <strong>mom</strong> has macros that let you manually
-design and determine what goes into headers on recto pages, and
-what goes into headers on verso pages. The macros are
-<a href="#HDRFTR_RECTO">HEADER_RECTO</a>
-and
-<a href="#HDRFTR_VERSO">HEADER_VERSO</a>.
-Both allow you to state whether the header is flush left, centred,
-or flush right, and both take a single
-<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>
-with which, by combining text and
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
-you can make the headers come out just about any way you want.
-Use of the <strong>\*[PAGE#]</strong> escape is permitted in the
-string argument (see
-<a href="#PAGE_NUMBER_INCL">Including the page number in header-left, -centre or -right</a>),
-and as an added bonus, <strong>mom</strong> provides a special
-mechanism whereby it's possible to &quot;pad&quot; the string as well.
-<p>
-
-<!---HDRFTR_RECTOVERSO--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_RECTOVERSO"></a>
-<nobr>Macro: <strong>HEADER_RECTO</strong> LEFT | CENTER | RIGHT &quot;&lt;header recto string&gt;&quot;</nobr>
-<br>
-<nobr>Macro: <strong>HEADER_VERSO</strong> LEFT | CENTER | RIGHT &quot;&lt;header verso string&gt;&quot;</nobr>
-<br>
-
-<p>
-<strong>HEADER_RECTO</strong> and <strong>HEADER_VERSO</strong> behave
-identically, hence all references to <strong>HEADER_RECTO</strong>
-in this section also refer to <strong>HEADER_VERSO</strong>.
-Furthermore, <strong>FOOTER_</strong> can be used instead of
-<strong>HEADER_</strong> to set up recto/verso footers.
-<p>
-The first argument to <strong>HEADER_RECTO</strong> is the
-direction in which you want the header
-<a href="definitions.html#TERMS_QUAD">quadded</a>.
-<strong>L, C</strong> and <strong>R</strong> may be used in
-place of <strong>LEFT, CENTER</strong> and
-<strong>RIGHT</strong>. The second argument is a string,
-surrounded by double-quotes, containing what you want in the
-header. <strong>HEADER_RECTO</strong> disables <strong>mom</strong>'s
-normal 3-part headers, therefore anything you want in the
-headers must be entered by hand in the string, including colours
-(via the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a>).
-<p>
-By default, <strong>HEADER_RECTO</strong> is set at the same
-size, and in the same family and font, as paragraph text. The
-control macros
-<a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>
-and
-<a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
-may be used to change the default family and size. Changes to
-the font(s) within the string must be accomplished with the
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-<strong>\*[ROM], \*[IT], \*[BD], \*[BDI]</strong> and
-<strong>\*[PREV]</strong> (see
-<a href="inlines.html#INLINE_FONTS_MOM">Changing fonts</a>).
-Additional refinements to the style of the header-recto string,
-including horizontal spacing and/or positioning, can also be made with
-inline escapes.
-<p>
-To include the current page number in the string, use the
-<strong>\*[PAGE#]</strong> inline.
-<br>
-
-<h3><u>*Padding the HEADER_RECTO/HEADER_VERSO string</u></h3>
-You can &quot;pad&quot; the header-recto string, a convenience you'll
-appreciate in circumstances such as the following.
-<p>
-<pre>
- VERSO RECTO
- +------------------------+ +------------------------+
- | Author Page# | | Page# Title |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- +------------------------+ +------------------------+
-</pre>
-
-To pad the string argument passed to <strong>HEADER_RECTO</strong>,
-begin and end the string (inside the double-quotes) with the caret
-character (<kbd>^</kbd>). Enter the pound sign (<kbd>#</kbd>) at any
-point in the string where you want an equalized amount of whitespace
-inserted. (If you're unsure what padding is, see
-<a href="goodies.html#PAD">Insert space into lines</a>.)
-Note that if you're padding the string, it doesn't matter what
-quad direction you give <strong>HEADER_RECTO</strong> since
-padding, by its nature, justifies text to the left and right
-margins.
-<p>
-The situation depicted above is accomplished like this:
-<p>
-<pre>
- .HEADER_RECTO LEFT "^\*[PAGE#]#Title^"
- .HEADER_VERSO LEFT "^Author#\*[PAGE#]^"
-</pre>
-
-Note that <strong>mom</strong> does not interpret the <kbd>#</kbd>
-in <strong>\*[PAGE#]</strong> as a padding marker (i.e. as a place
-to insert whitespace).
-<p>
-Also, notice that the argument <strong>LEFT</strong> is used in both
-cases. When padding a header, it doesn't matter whether you use
-LEFT, CENTER or RIGHT as the argument.
-<p>
-Furthermore, should you need a user-defined header of
-the sort provided by <strong>HEADER_RECTO</strong> and
-<strong>HEADER_VERSO</strong> but aren't actually printing
-recto/verso, you can use <strong>HEADER_RECTO</strong> to design the
-header that appears at the top of every page.
-<p>
-<strong>IMPORTANT:</strong> The
-<a href="goodies.html#PAD_MARKER">PAD_MARKER</a>
-macro, which changes the default pad marker (<kbd>#</kbd>) used by
-<a href="goodies.html#PAD">PAD</a>,
-has no effect on the pad marker used in the
-<strong>HEADER_RECTO</strong> string. If you absolutely must
-have a literal pound sign in your <strong>HEADER_RECTO</strong>
-string, use the escape sequence for the pound sign
-(<kbd>\[sh]</kbd>) where you want the pound sign to go.
-<p>
-<hr>
-
-<a name="HEADFOOT_CONTROL">
- <h2><u>Control macros for headers/footers</u></h2>
-</a>
-Virtually every part of headers (see the paragraph on how
-<a href="#HEADERFOOTER">&quot;headers&quot; means &quot;footers&quot;</a>
-in the
-<a href="#HEADFOOTPAGE_INTRO">introduction to headers/footers</a>)
-can be designed to your own specifications.
-<p>
-
-<a name="INDEX_REFERENCE">
- <h3><u>Header/footer control macros</u></h3>
-</a>
-
-<ul>
- <li><a href="#HDRFTR_STRINGS"><strong>STRINGS</strong></a>
- <ul>
- <li><a href="#HDRFTR_LEFT">HEADER_LEFT</a>
- <li><a href="#HDRFTR_CENTER">HEADER_CENTER</a>
- <ul>
- <li><a href="#HDRFTR_CENTER_PAD">HEADER_CENTER_PAD</a> -- stick some space left of right of the centre string
- </ul>
- <li><a href="#HDRFTR_RIGHT">HEADER_RIGHT</a>
- <li><a href="#PAGE_NUMBER_SYMBOL">Replacing header left, centre or right with the page number</a>
- <li><a href="#PAGE_NUMBER_INCL">Including the page number in header left, centre or right</a>
- </ul>
- <li><a href="#HDRFTR_STYLE"><strong>STYLE</strong></a>
- <ul>
- <li><a href="#HDRFTR_STYLE_GLOBAL"><strong>Global changes</strong></a>
- <li><a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>&nbsp;-- family for entire header
- <li><a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>&nbsp;&nbsp;&nbsp;-- size for entire header
- <li><a href="#HDRFTR_PLAIN">HEADER_PLAIN</a>&nbsp;&nbsp;-- disable default adjustments to header parts
- <li><a href="#HDRFTR_COLOR">HEADER_COLOR</a>&nbsp;&nbsp;-- colourize the header
- </ul>
- <ul>
- <li><a href="#HDRFTR_STYLE_PART"><strong>Part-by-part changes</strong></a>
- <li><a href="#_FAMILY">_FAMILY</a>&nbsp;-- left, centre or right family
- <li><a href="#_FONT">_FONT</a>&nbsp;&nbsp;&nbsp;-- left, centre or right font
- <li><a href="#_SIZE">_SIZE</a>&nbsp;&nbsp;&nbsp;-- left, centre or right size
- <li><a href="#_CAPS">_CAPS</a>&nbsp;&nbsp;&nbsp;-- left, centre or right all caps
- <li><a href="#_COLOR">_COLOR</a>&nbsp;&nbsp;-- left, centre or right colour
- </ul>
- <li><a href="#HDRFTR_VERTICAL"><strong>VERTICAL PLACEMENT AND SPACING</strong></a>
- <ul>
- <li><a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>
- <li><a href="#HDRFTR_GAP">HEADER_GAP</a>
- </ul>
- <li><a href="#HDRFTR_SEPARATOR"><strong>SEPARATOR RULE</strong></a>
- <ul>
- <li><a href="#HDRFTR_RULE">HEADER_RULE</a>
- <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a>
- <li><a href="#HDRFTR_RULE_COLOR">HEADER_RULE_COLOR</a>
- </ul>
-</ul>
-
-<!---HDRFTR_STRINGS--->
-
-<hr width="66%" align="left">
-<a name="HDRFTR_STRINGS"><h3><u>Header/footer strings</u></h3></a>
-<p>
-<a name="HDRFTR_LEFT">
- <nobr>Macro: <strong>HEADER_LEFT</strong> &quot;&lt;text of header left&gt;&quot; | #</nobr>
-</a>
-<br>
-<a name="HDRFTR_CENTER">
- <nobr>Macro: <strong>HEADER_CENTER</strong> &quot;&lt;text of header centre&gt;&quot; | #</nobr>
-</a>
-<br>
-<a name="HDRFTR_RIGHT">
- <nobr>Macro: <strong>HEADER_RIGHT</strong> &quot;&lt;text of header right&gt;&quot; | #</nobr>
-</a>
-
-<p>
-To change the text (the &quot;string&quot;) of the left, centre,
-or right part of headers, invoke the appropriate macro above with
-the string you want. For example, <strong>mom</strong>, by default,
-prints the document's author in the header-left position. If your
-document has, say, two authors, and you want both their names to
-appear header-left, change <strong>HEADER_LEFT</strong> like this:
-<p>
-<pre>
- .HEADER_LEFT "R. Stallman, E. Raymond"
-</pre>
-
-Because the arguments to <strong>HEADER_LEFT, _CENTER,</strong>
-and <strong>_RIGHT</strong> are
-<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments</a>,
-they must be enclosed in double-quotes.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change the strings in footers.
-
-<a name="HDRFTR_CENTER_PAD"><h3><u>*Padding the header/footer centre string</u></h3></a>
-<p>
-<nobr>Macro: <strong>HEADER_CENTER_PAD</strong> LEFT | RIGHT &lt;amount of space by which to pad centre string left or right&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-<p>
-By default, <strong>mom</strong> centres the header centre string
-literally on the line length in effect for page headers. In some
-cases, notably when the header left or header right strings are
-particularly long, the effect isn't pretty. The offendingly long
-header left or right crowds, or even overprints, the header centre.
-That's where <strong>HEADER_CENTER_PAD</strong> comes in. With a
-bit of experimentation (yes, you have to preview the document), you
-can use <strong>HEADER_CENTER_PAD</strong> to move the header
-centre string left or right until it looks acceptably centred
-between the two other strings.
-<p>
-For example, say your document is an outline for a novel called "By
-the Shores of Lake Attica." You've told <strong>mom</strong>
-you want
-<p>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-<halign="center">
-<strong>NAMED</strong> "Outline"
-<p>
-but when you preview your work, you see that "Outline", in the
-centre of the page header, is uncomfortably close to the title,
-which is to the right of it. By invoking
-<p>
-<pre>
- .HEADER_CENTER_PAD RIGHT 3P
-</pre>
-
-you can scoot the word "Outline" over three
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
-to the left (the padding's added to the right of the string)
-so that your head looks nicely spaced out. Invoking
-<strong>HEADER_CENTER_PAD</strong> with the <strong>LEFT</strong>
-argument obviously puts the padding on the left side of the string.
-<p>
-Most reassuring of all is that if you use
-<strong>HEADER_CENTER_PAD</strong> conjunction with
-<a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a>,
-<strong>mom</strong> will pad the centre string appropriately left
-OR right, depending on which page you're on, without you having to
-tell her to do so.
-<p>
-
-<hr width="66%" align="left">
-<p>
-<a name="RESERVED_STRINGS"><h3><u>Using mom's &quot;reserved&quot; strings in header/footer definitions</u></h3></a>
-<p>
-As pointed out in the author's note in the introduction to
-headers/footers, headers and footers are something you don't
-normally have to worry much about. <strong>Mom</strong> usually
-knows what to do.
-<p>
-However, situations do arise where you need to manipulate what goes
-in the header/footer strings, setting and resetting them as you go
-along. A case where you might want to do this would be if you want
-to output endnotes at the end of each document in a series of
-<a href="rectoverso.html#COLLATE">collated</a>
-documents, and you want the word "Endnotes" to go in the header
-centre position of the endnotes, but want, say, the
-<a href="docprocessing.html#TITLE">TITLE</a>
-to go back into the centre position for the next output document.
-<p>
-In scenarios like the above, <strong>mom</strong> has a number of
-&quot;reserved&quot; strings that you can plug into the
-<strong>HEADER_LEFT, _CENTER</strong> and <strong>_RIGHT</strong>
-macros. They are:
-<p>
-<pre>
- \*[$TITLE] -- the argument passed to .TITLE
- \*[$DOCTITLE] -- the argument passed to .DOCTITLE
- \*[$AUTHOR_1] -- the first argument passed to .AUTHOR
- \*[$CHAPTER_STRING] -- the argument passed to .CHAPTER_STRING,
- if invoked, otherwise, "Chapter"
- \*[$CHAPTER] -- the argument (typically a number) passed
- to .CHAPTER
- \*[$CHAPTER_TITLE] -- the argument passed to .CHAPTER_TITLE
-</pre>
-
-Returning to the scenario above, first, you'd define a centre
-string for the endnotes page:
-<p>
-<pre>
- .HEADER_CENTER "Endnotes"
-</pre>
-
-Then, you'd output the endnotes:
-<p>
-<pre>
- .ENDNOTES
-</pre>
-
-Then, you'd prepare <strong>mom</strong> for the next document:
-<p>
-<pre>
- .COLLATE
- .TITLE "New Doc Title"
- .AUTHOR "Josephine Blough"
-</pre>
-
-Then, you'd redefine the header centre string using the reserved
-string \*[$TITLE], like this:
-<p>
-<pre>
- .HEADER_CENTER "\*[$TITLE]"
-</pre>
-
-And last, you'd do:
-<p>
-<pre>
- .START
-</pre>
-
-Voilà! Any argument you pass to <strong>TITLE</strong> from here
-on in (say, for subsequent documents) is back in the header centre
-position. Here's the whole routine again:
-<p>
-<pre>
- .HEADER_CENTER "Endnotes"
- .ENDNOTES
- .COLLATE
- .TITLE "New Doc Title"
- .AUTHOR "Josephine Blough"
- .HEADER_CENTER "\*[$TITLE]"
- .START
-</pre>
-
-If need be, you can concatenate the strings, as in the following
-example.
-<p>
-<pre>
- .HEADER_CENTER "\*[$CHAPTER_STRING] \*[$CHAPTER]"
-</pre>
-
-which, assuming a <strong>.CHAPTER_STRING</strong> of
-&quot;Chapter&quot; and a <strong>.CHAPTER</strong> of
-&quot;2&quot;, would put &quot;Chapter 2&quot; in the header centre
-position.
-<p>
-
-<a name="PAGE_NUMBER_SYMBOL">
- <h3><u>*Replacing header-left, -CENTER or -right with the page number</u></h3>
-</a>
-<p>
-If you would like to have the current page number to appear
-header-left, -center, or -right <em>instead</em> of a text
-string, invoke the appropriate macro, above, with the single
-argument <code>#</code> (the &quot;number&quot; or
-&quot;pound&quot; sign). Do <strong>NOT</strong> use
-double-quotes. For example,
-<p>
-<pre>
- .HEADER_CENTER #
-</pre>
-
-will print the current page number in the CENTER part of
-headers.
-<p>
-
-<a name="PAGE_NUMBER_INCL">
- <h3><u>*Including the page number in header-left, -CENTER or -right</u></h3>
-</a>
-<p>
-If you would like to <em>include</em> the current page number in
-the string you pass to <strong>HEADER_LEFT, _CENTER,</strong> or
-<strong>_RIGHT</strong>, use the special
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<code>\*[PAGE#]</code> in the string argument.
-<p>
-For example, say you have a document that's ten pages long, and
-you want header-right to say "page &lt;whichever&gt; of 10",
-invoke <strong>HEADER_RIGHT</strong> as follows:
-<p>
-<pre>
- .HEADER_RIGHT "page \*[PAGE#] of 10"
-</pre>
-
-Header-right of page two will read &quot;page 2 of 10&quot;,
-header-right of page three will read &quot;page 3 of 10&quot;,
-and so on.
-<p>
-<hr>
-
-<!---HDRFTR_STYLE--->
-
-<a name="HDRFTR_STYLE"><h3><u>Header/footer style</u></h3></a>
-
-<p>
-<a name="HDRFTR_STYLE_GLOBAL"><strong>Global changes</strong></a>
-<p>
-The following macros allow you to make changes that affect all
-parts of the header at once.
-<p>
-Please note that <strong>HEADER_FAMILY</strong> and
-<strong>HEADER_FONT</strong> have no effect on
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
-<p>
-<ul>
- <li><a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>
- <li><a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
- <li><a href="#HDRFTR_PLAIN">HEADER_PLAIN</a>
- <li><a href="#HDRFTR_COLOR">HEADER_COLOR</a>
-</ul>
-
-<hr width="33%" align="left">
-<p>
-<a name="HDRFTR_GLOBAL_FAMILY">
- <nobr>Macro: <strong>HEADER_FAMILY</strong> &lt;family&gt;</nobr>
-</a>
-
-<p>
-By default, <strong>mom</strong> uses the default document family
-for headers. If you would like her to use another
-<a href="definitions.html#TERMS_FAMILY">family</a>
-in headers, invoke <strong>HEADER_FAMILY</strong> with the identifier
-for the family you want. The argument is the same as for the
-typesetting macro
-<a href="typesetting.html#FAMILY">FAMILY</a>.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change the footer family.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="HDRFTR_GLOBAL_SIZE">
- <nobr>Macro: <strong>HEADER_SIZE</strong> &lt;+|-number of points&gt;</nobr>
- <br>
- <em>*Argument is relative to the point size of type in paragraphs</em>
-</a>
-
-<p>
-By default, <strong>mom</strong> makes small adjustments to the size
-of each part of a header to achieve an aesthetically pleasing result.
-If you'd like her to continue to do so, but would like the overall
-appearance of headers to be a little smaller or a little larger,
-invoke <strong>HEADER_SIZE</strong> with + or - the number of
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-(fractions allowed) by which you want her to in/decrease the size
-of headers. For example,
-<p>
-<pre>
- .HEADER_SIZE +.75
-</pre>
-
-increases the size of every part of a header by 3/4 of a point while
-respecting <strong>mom</strong>'s own little size changes.
-<p>
-See
-<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
-for an explanation of how control macros ending in
-<strong>_SIZE</strong> work.
-<p>
-<a name="FOOTER_GLOBAL_SIZE"></a>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change the footer size.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Normally, macros that control headers have no
-effect on
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
-<strong>HEADER_SIZE</strong> is an exception. While all parts of a
-header in <strong>PRINTSTYLE TYPEWRITE</strong> are always the same
-size, you can use <strong>HEADER_SIZE</strong> with <strong>PRINTSTYLE
-TYPEWRITE</strong> to reduce the header's overall point size.
-You'll most likely require this when the
-<a href="docprocessing.html#COPYSTYLE">COPYSTYLE</a>
-is <strong>DRAFT</strong>, since portions of the header may overprint
-if, say, the title of your document is very long.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="HDRFTR_PLAIN">
- Macro: <strong>HEADER_PLAIN</strong>
-</a>
-
-<p>
-By default, <strong>mom</strong> makes adjustments to the font,
-size, and capitalization style of each part of headers to achieve
-an aesthetically pleasing look. Should you wish to design your own
-headers from the ground up without worrying how changes to the various
-elements of header style interact with <strong>mom</strong>'s defaults,
-invoke <strong>HEADER_PLAIN</strong> by itself, with no argument.
-<strong>Mom</strong> will disable her default behaviour for headers,
-and reset all elements of header style to the same family, font,
-and point size as she uses in paragraphs.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to disable <strong>mom</strong>'s
-default behaviour for the various elements of footer style.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="HDRFTR_COLOR">
- <nobr>Macro: <strong>HEADER_COLOR</strong> &lt;colorname&gt;</nobr>
-</a>
-
-<p>
-If you want your headers in a colour different from the document
-default (usually black), invoke <strong>HEADER_COLOR</strong> with
-the name of a colour pre-defined (or &quot;initialized&quot;) with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-<p>
-<strong>HEADER_COLOR</strong> will set all the parts of the header
-AND the header rule in the colour you give it as an argument. If
-you wish finer control over colour in headers, you can use
-<a href="#_COLOR">HEADER_&lt;POSITION&gt;_COLOR</a>
-to colourize each part of the header separately, as well as
-<a href="#HDRFTR_RULE_COLOR">HEADER_RULE_COLOR</a>
-to change the colour of the header rule.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to colourize footers.
-<p>
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_STYLE_PART"><strong>Part by part changes</strong></a>
-<p>
-<strong>NOTE:</strong> When using the following control macros,
-replace &quot;&lt;POSITION&gt;&quot; by <strong>LEFT, CENTER,</strong>
-or <strong>RIGHT</strong> as appropriate.
-<p>
-<ul>
- <li><a href="#_FAMILY">HEADER_&lt;POSITION&gt;_FAMILY</a>
- <li><a href="#_FONT">HEADER_&lt;POSITION&gt;_FONT</a>
- <li><a href="#_SIZE">HEADER_&lt;POSITION&gt;_SIZE</a>
- <li><a href="#_CAPS">HEADER_&lt;POSITION&gt;_CAPS</a>
- <li><a href="#_COLOR">HEADER_&lt;POSITION&gt;_COLOR</a>
-</ul>
-
-<hr width="33%" align="left">
-<p>
-<a name="_FAMILY">
- <nobr>Macro: <strong>HEADER_&lt;POSITION&gt;_FAMILY</strong> &lt;family&gt;</nobr>
-</a>
-<p>
-Use <strong>HEADER_&lt;POSITION&gt;_FAMILY</strong> to change the
-<a href="definitions.html#TERMS_FAMILY">family</a>
-of any part of headers. See
-<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
-for an explanation of how control macros ending in
-<strong>_FAMILY</strong> work.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change a footer part's family.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="_FONT">
- <nobr>Macro: <strong>HEADER_&lt;POSITION&gt;_FONT</strong> &lt;font&gt;</nobr>
-</a>
-<p>
-Use <strong>HEADER_&lt;POSITION&gt;_FONT</strong> to change the
-<a href="definitions.html#TERMS_FONT">font</a>
-of any part of headers. See
-<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
-for an explanation of how control macros ending in
-<strong>_FONT</strong> work.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change a footer part's font.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="_SIZE">
- <nobr>Macro: <strong>HEADER_&lt;POSITION&gt;_SIZE</strong> &lt;+|-number of points&gt;</nobr>
-</a>
-<p>
-Use <strong>HEADER_&lt;POSITION&gt;_SIZE</strong> to change the size of any
-part of headers (relative to the point size of type in
-paragraphs). See
-<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
-for an explanation of how control macros ending in
-<strong>_SIZE</strong> work.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change a footer part's size.
-<p>
-
-<hr width="33%" align="left">
-<p>
-<a name="_CAPS">
- <nobr>Macro: <strong>HEADER_&lt;POSITION&gt;_CAPS</strong> toggle</nobr>
-</a>
-<p>
-<strong>HEADER_&lt;POSITION&gt;_CAPS</strong> is a
-<a href="definitions.html#TERMS_TOGGLE">toggle macro</a>.
-If you want any part of headers to be set in all caps,
-regardless of the capitalization of that part's string as given
-to the
-<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>
-or as defined by you with the
-<a href="#HDRFTR_STRINGS">header string control macros</a>,
-simply invoke this macro (using the appropriate position) with no
-argument. If you wish to turn capitalization off (say, for the
-header-right string that <strong>mom</strong> capitalizes by
-default), invoke the argument with any argument (e.g. <strong>OFF,
-QUIT, END, X...</strong>).
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change a footer part's
-capitalization style.
-
-<p>
-<hr width="33%" align="left">
-<p>
-<a name="_COLOR">
- <nobr>Macro: <strong>HEADER_&lt;POSITION&gt;_COLOR</strong> &lt;colorname&gt;</nobr>
-</a>
-<p>
-<strong>HEADER_&lt;POSITION&gt;_COLOR</strong> allows you to set a
-colour for each of the three possible parts of a page header
-separately. For example, say you want the right part of the header
-(by default, the document title) in red, this is how you'd get it:
-<p>
-<pre>
- .HEADER_RIGHT_COLOR red
-</pre>
-
-The other parts of the header will be in the default header colour
-(usually black, but that can be changed with
-<a href="#HDRFTR_COLOR">HEADER_COLOR</a>).
-<p>
-Remember that you have to define (or &quot;initialize&quot;) a
-colour with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>
-before you can use the colour.
-<p>
-If you create a
-<a href="#USERDEF_HDRFTR">user-defined header</a>
-with
-<a href="#HDRFTR_RECTO">HEADER_RECTO</a>
-or
-<a href="#HDRFTR_VERSO">HEADER_VERSO</a>,
-and you want various elements within the header to be colourized,
-embed the colours in the string passed to <strong>HEADER_RECTO</strong>
-or <strong>HEADER_VERSO</strong> with the
-<a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to set the colours for the various
-elements of footers.
-<p>
-<hr>
-
-<!---HDRFTR_VERTICAL--->
-
-<a name="HDRFTR_VERTICAL">
- <h2><u>Header/footer vertical placement and spacing</u></h2>
-</a>
-
-<p>
-See
-<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>
-for an explanation of how <strong>mom</strong> deals with
-headers, footers, and top/bottom page margins.
-<p>
-
-<!---HDRFTR_MARGIN--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_MARGIN"></a>
-<nobr>Macro: <strong>HEADER_MARGIN</strong> &lt;distance to baseline of header&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-Use <strong>HEADER_MARGIN</strong> to set the distance from the
-top edge of the page to the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of type in headers. A unit of measure is required, and decimal
-fractions are allowed.
-<p>
-<strong>Mom</strong>'s default header margin is 4-1/2
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>,
-but if you want a different margin, say, 1/2-inch, do
-<p>
-<pre>
- .HEADER_MARGIN .5i
-</pre>
-
-If your document uses
-<a href="definitions.html#TERMS_FOOTER">footers</a>,
-replace <strong>HEADER_</strong>, above, with
-<strong>FOOTER_</strong>. The argument to
-<strong>FOOTER_MARGIN</strong> is the distance from the bottom
-edge of the page to the baseline of type in footers.
-<p>
-<strong>Mom</strong>'s default footer margin is 3
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>.
-
-<a name="FOOTER_MARGIN"></a>
-<p>
-<strong>FOOTER MARGIN AND BOTTOM MARGIN -- VERY IMPORTANT!</strong>
-<p>
-<strong>Mom</strong> requires a footer margin for proper operation,
-hence she sets one, even if you don't. (As stated above, her default
-footer margin is 3-picas).
-<p>
-If you set a bottom margin for your document (with
-<a href="typesetting.html#B_MARGIN">B_MARGIN</a>,
-prior to
-<a href="docprocessing.html#START">START</a>)
-and the margin's too close to <strong>mom</strong>'s default
-footer margin (or a footer margin you set yourself
-with <strong>FOOTER_MARGIN</strong>), <strong>mom</strong> will
-not print your footers; additionally, she'll give you a warning
-and some advice on standard error. When this happens, you must
-reset either <strong>B_MARGIN</strong> or
-<strong>FOOTER_MARGIN</strong> so there's an adequate amount of
-space for <strong>mom</strong> to print the bottom line of running
-text and the footer.
-<p>
-If you see the warning even when footers and/or bottom-of-page page
-numbering are disabled, set a nominal footer margin of 0 prior to
-<a href="docprocessing.html#START">START</a>,
-as in these examples.
-<p>
-<strong>Example 1</strong>
-<p>
-<pre>
- &lt;reference macros, etc&gt;
- .PAGINATION OFF
- .B_MARGIN .25i
- .FOOTER_MARGIN O
- .START
-</pre>
-
-<strong>Example 2</strong>
-<p>
-<pre>
- &lt;reference macros, etc&gt;
- .HEADERS OFF
- .PAGENUM_POS TOP RIGHT
- .B_MARGIN .25i
- .FOOTER_MARGIN O
- .START
-</pre>
-
-<h3>A note on header/footer margins and page numbering</h3>
-<strong>Mom</strong> uses HEADER_MARGIN</strong> and
-<strong>FOOTER_MARGIN</strong> to establish the baseline
-position of page numbers in addition to the baseline position of
-headers and footers.
-<p>
-By default, page numbers appear at the bottom of the page, therefore
-if you want the default position (bottom), but want to change the
-baseline placement, use <strong>FOOTER_MARGIN</strong>. Conversely,
-if page numbers are at the top of the page, either because you turned
-<a href="#FOOTERS">FOOTERS</a>
-on or because you instructed <strong>mom</strong> to put them
-there with
-<a href="#PAGENUM_POS">PAGENUM_POS</a>,
-you'd use <strong>HEADER_MARGIN</strong> to change their
-baseline placement.
-<p>
-
-<!---HDRFTR_GAP--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_GAP"></a>
-<nobr>Macro: <strong>HEADER_GAP</strong> &lt;distance from header to start of running text&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-Use <strong>HEADER_GAP</strong> to set the distance from the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of type in headers to the start of
-<a href="definitions.html#TERMS_RUNNING">running text</a>.
-A unit of measure is required, and decimal fractions are allowed.
-<p>
-As explained in
-<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>,
-<strong>HEADER_MARGIN + HEADER_GAP</strong> determine the
-default vertical starting position of running text on the page
-UNLESS you have given <strong>mom</strong> your own top margin
-(with
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>). If you give
-a top margin, <strong>mom</strong> ignores
-<strong>HEADER_GAP</strong>; running text starts at your stated
-top margin.
-
-<p>
-<strong>Mom</strong>'s default header gap is 3
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>,
-but if you want a different gap, say, 2 centimetres, do
-<p>
-<pre>
- .HEADER_GAP 2c
-</pre>
-
-If your document uses
-<a href="definitions.html#TERMS_FOOTER">footers</a>,
-replace <strong>HEADER_</strong>, above, with
-<strong>FOOTER_</strong>. The argument to
-<strong>FOOTER_GAP</strong> is the distance from the
-baseline of type in footers to the last baseline of running text
-on the page.
-<p>
-As explained in
-<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>,
-<strong>FOOTER_MARGIN + FOOTER_GAP</strong> determine the
-default vertical end position of running text on the page
-UNLESS you have given <strong>mom</strong> a bottom margin
-(with
-<a href="typesetting.html#B_MARGIN">B_MARGIN</a>). If you give
-a bottom margin, <strong>mom</strong> ignores
-<strong>FOOTER_GAP</strong>; running text ends at your stated
-bottom margin.
-<p>
-<strong>Mom</strong>'s default footer gap is 3
-<a href="definitions.html#TERMS_PICASPOINTS">picas</a>.
-<p>
-<strong>NOTE:</strong> <strong>Mom</strong> uses
-<strong>HEADER_GAP</strong> and
-<strong>FOOTER_GAP</strong> to establish the start and end baseline
-positions of running text with respect to both headers and footers
-AND page numbers. If you wish to change the gap between
-the last line of running text and a bottom page number, use
-<strong>FOOTER_GAP</strong>. If page numbers are at the top of the
-page, change the gap between the number and the first line of running
-text with <strong>HEADER_GAP</strong>.
-<p>
-<hr>
-
-<!---HDRFTR_SEPARATOR--->
-
-<a name="HDRFTR_SEPARATOR">
- <h2><u>Header/footer separator rule</u></h2>
-</a>
-
-<p>
-The header/footer separator rule is a modest horizontal rule,
-set slightly below the header (or above the footer), that runs
-the length of the
-<a href="definitions.html#TERMS_HEADER">header</a>
-and helps separate it visually from
-<a href="definitions.html#TERMS_RUNNING">running text</a>. If
-you don't want the rule, you can turn it off. If you want it,
-but at a different vertical position relative to the header (or
-footer), you can alter its placement.
-<p>
-<ul>
- <li><a href="#HDRFTR_RULE">HEADER_RULE</a> -- on or off
- <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a> -- distance of rule from header
-</ul>
-
-<!---HDRFTR_RULE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_RULE"></a>
-<nobr>Macro: <strong>HEADER_RULE</strong> toggle</nobr>
-
-<p>
-By default, <strong>mom</strong> prints a header separator rule
-underneath headers (or above footers). If you don't want the
-rule, turn it off by invoking <strong>HEADER_RULE</strong> with any
-argument (<strong>OFF, QUIT, END, X...</strong>), e.g.
-<p>
-<pre>
- .HEADER_RULE OFF
-</pre>
-
-To turn the rule (back) on, invoke <strong>HEADER_RULE</strong>
-without any argument.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to enable/disable the printing of
-the footer separator rule. (Most likely, if you're using
-<a href="#FOOTERS">FOOTERS</a>, you'll want it off.)
-<p>
-
-<!---HDRFTR_RULE_GAP--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_RULE_GAP"></a>
-<nobr>Macro: <strong>HEADER_RULE_GAP</strong> distance of rule beneath header</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>HEADER_RULE_GAP</strong> is the distance from the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of type in headers to the rule underneath. A unit of measure is
-required, and decimal fractions are allowed. Please note that
-<strong>HEADER_RULE_GAP</strong> has no effect on
-<a href="#HEADER_GAP">HEADER_GAP</a>
-(i.e. <strong>HEADER_RULE_GAP</strong> is NOT added to
-<strong>HEADER_GAP</strong> when <strong>mom</strong> calculates
-the space between headers and the start of
-<a href="definitions.html#TERMS_RUNNING">running text</a>).
-<p>
-By default, the header rule gap is 4
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>.
-If you'd like to change it to, say, 1/4
-<a href="definitions.html#TERMS_EM">em</a>, do
-<p>
-<pre>
- .HEADER_RULE_GAP .25m
-</pre>
-
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> if you're using
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-and want to change the separator rule gap. In footers, the gap
-is measured from the top of the tallest
-<a href="definitions.html#TERMS_ASCENDER">ascender</a>
-in the footer.
-<p>
-<strong>ADDITIONAL NOTE:</strong> When using
-<a href="#HDRFTR_RECTOVERSO">FOOTER_RECTO</a>
-and
-<a href="#HDRFTR_RECTOVERSO">FOOTER_VERSO</a>,
-make sure that the default size for footers
-(<a href="#FOOTER_GLOBAL_SIZE">FOOTER_SIZE</a>)
-is set to the largest size of type that will be used in the
-footer or <strong>mom</strong> may not get the rule gap right.
-Inline changes to the size of type in
-<strong>FOOTER_RECTO</strong> and <strong>FOOTER_VERSO</strong>
-should always be negative (smaller) than the default.
-<p>
-
-<!---HDRFTR_RULE_COLOR--->
-
-<hr width="66%" align="left">
-<p>
-<a name="HDRFTR_RULE_COLOR"></a>
-<nobr>Macro: <strong>HEADER_RULE_COLOR</strong> &lt;colorname&gt;</nobr>
-
-<p>
-If you wish to change the colour of the header rule, invoke
-<strong>HEADER_RULE_COLOR</strong> with the name of a colour
-pre-defined (or &quot;initialized&quot;) with
-<a href="color.html#NEWCOLOR">NEWCOLOR</a>
-or
-<a href="color.html#XCOLOR">XCOLOR</a>.
-<p>
-Please note that <strong>HEADER_RULE_COLOR</strong> overrides the
-colour set with
-<a href="#HDRFTR_COLOR">HDRFTR_COLOR</a>,
-so that it's possible to have the heads entirely in, say, blue (set
-with <strong>HEADER_COLOR</strong>), and the header rule in, say,
-red.
-<p>
-<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
-with <strong>FOOTER_</strong> to change the colour of the footer
-rule.
-<p>
-<hr>
-
-<a name="PAGINATION">
- <h2><u>Pagination</u></h2>
-</a>
-
-<p>
-By default, <strong>mom</strong> paginates documents. Page numbers
-appear in the bottom margin of the page, centred between two hyphens.
-As with all elements of <strong>mom</strong>'s document processing,
-most aspects of pagination style can be altered to suit your taste
-with control macros.
-<p>
-
-<a name="INDEX_PAGINATION">
- <h3><u>Pagination macros list</u></h3>
-</a>
-
-<ul>
- <li><a href="#PAGINATE">PAGINATE</a> -- pagination on or off
- <li><a href="#PAGENUMBER">PAGENUMBER</a> -- user-defined (starting) page number
- <li><a href="#PAGENUM_STYLE">PAGENUM_STYLE</a> -- digits, roman numerals, etc
- <li><a href="#PAGENUM_ON_FIRST_PAGE">PAGENUM_ON_FIRST_PAGE</a> -- applies only when footers are enabled
- <li><a href="#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a> -- attach draft/revision information to page numbers
- <li><a href="#PAGINATE_CONTROL">Control macros</a>
-</ul>
-<p>
-
-<!---PAGINATE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PAGINATE"></a>
-<nobr>Macro: <strong>PAGINATE</strong> toggle</nobr>
-<br>
-Alias: <strong>PAGINATION</strong>
-
-<p>
-By default, <strong>mom</strong> paginates documents (in the bottom
-margin). If you'd prefer she not paginate, turn pagination off
-by invoking <strong>PAGINATE</strong> with any argument (<strong>OFF,
-NO, QUIT, END, X...</strong>), e.g.
-<p>
-<pre>
- .PAGINATE NO
-</pre>
-
-To (re)start pagination, invoke <strong>PAGINATE</strong>
-without any argument.
-<p>
-
-<!---PAGENUMBER--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PAGENUMBER"></a>
-<nobr>Macro: <strong>PAGENUMBER</strong> &lt;number&gt;</nobr>
-
-<p>
-As is to be expected, pagination of documents begins at page 1.
-If you'd prefer that <strong>mom</strong> begin with a different
-number on the first page of a document, invoke
-<strong>PAGENUMBER</strong> with the number you want.
-<p>
-<strong>PAGENUMBER</strong> need not be used only to give
-<strong>mom</strong> a "first page" number. It can be used at
-any time to tell <strong>mom</strong> what number you want a
-page to have. Subsequent page numbers will, of course, be
-incremented by 1 from that number.
-<p>
-
-<!---PAGENUM_STYLE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PAGENUM_STYLE"></a>
-<nobr>Macro: <strong>PAGENUM_STYLE</strong> DIGIT | ROMAN | roman | ALPHA | alpha</nobr>
-
-<p>
-<strong>PAGENUM_STYLE</strong> lets you tell
-<strong>mom</strong> what kind of page numbering you want.
-<p>
-<table valign="baseline" summary="pagenumstyle">
-<tr><td>DIGIT<td align="center" width="15">=<td>Arabic digits (1, 2, 3...)
-<tr><td>ROMAN<td align="center" width="15">=<td>upper case roman numerals (I, II, III...)
-<tr><td>roman<td align="center" width="15">=<td>lower case roman numerals (i, ii, iii...)
-<tr><td>ALPHA<td align="center" width="15">=<td>upper case letters (A, B, C...)
-<tr><td>alpha<td align="center" width="15">=<td>lower case letters (a, b, c...)</td></tr>
-</table>
-<p>
-
-<!---PAGENUM_ON_FIRST_PAGE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="PAGENUM_ON_FIRST_PAGE"></a>
-<nobr>Macro: <strong>PAGENUM_ON_FIRST_PAGE</strong> toggle</nobr>
-
-<p>
-This macro applies only if you've enabled
-<a href="#FOOTERS">FOOTERS</a>.
-If <strong>FOOTERS</strong> are on, <strong>mom</strong> automatically
-places page numbers at the tops of pages except on
-the first page of a document (or on first pages after
-<a href="rectoverso.html#COLLATE">COLLATE</a>). If you'd
-like the page number to appear on &quot;first&quot; pages when
-footers are on, invoke <strong>PAGENUM_ON_FIRST_PAGE</strong> with
-no argument. Any other argument turns the feature off (<strong>OFF,
-QUIT, END, X...</strong>).
-<p>
-As with most of the <a
-href="definitions.html#TERMS_CONTROLMACRO">control macros</a>,
-<strong>PAGENUM_ON_FIRST_PAGE</strong> can be invoked at any time,
-meaning that if you don't want a page number on the very first
-page of a document, but do want one on pages that appear after
-<strong>COLLATE</strong>, omit it before the first
-<a href="docprocessing.html#START">START</a>
-of the document, then invoke it either just before or after your
-first <strong>COLLATE</strong>.
-<p>
-
-<!---DRAFT_WITH_PAGENUMBER--->
-
-<hr width="66%" align="left">
-<p>
-<a name="DRAFT_WITH_PAGENUMBER"></a>
-Macro: <strong>DRAFT_WITH_PAGENUMBER</strong>
-
-<p>
-Sometimes, in
-<a href="docprocessing.html#COPYSTYLE">COPYSTYLE DRAFT</a>,
-the CENTER part of page headers gets overcrowded because of the draft
-and revision information that go there by default.
-<strong>DRAFT_WITH_PAGENUMBER</strong> is one way to
-fix the problem.
-<p>
-Invoked without an argument, <strong>DRAFT_WITH_PAGENUMBER</strong>
-removes draft/revision information from the page headers and attaches
-it instead to the document's page numbering, in the form
-<p>
-<pre>
- Draft #, Rev. # / &lt;pagenumber&gt;
-</pre>
-
-See the note in
-<a href="docprocessing.html#COPYSTYLE">COPYSTYLE DRAFT</a>
-for other ways of dealing with crowded page headers when formatting
-draft-style copy.
-<p>
-<hr>
-
-<!---PAGINATE_CONTROL--->
-
-<a name="PAGINATE_CONTROL"><h3><u>Pagination control macros</u></h3></a>
-
-<ol>
- <li><a href="#PAGINATE_GENERAL">Family/font/size/colour</a>
- <li><a href="#PAGENUM_POS">Page number position (vertical and horizontal)</a>
- <li><a href="#PAGENUM_HYPHENS">Enclose page numbers with hyphens (on or off)</a>
-</ol>
-<br>
-<a name="PAGINATE_GENERAL"><h3><u>1. Page number family/font/size/colour</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.PAGENUM_FAMILY default = prevailing document family; default is Times Roman
-.PAGENUM_FONT default = roman
-.PAGENUM_SIZE default = 0 (i.e. same size as paragraph text)
-.PAGENUM_COLOR default= black
-</pre>
-
-<a name="PAGENUM_POS"><h3><u>2. Page number position</u></h3></a>
-<p>
-<nobr>Macro: <strong>PAGENUM_POS</strong> TOP | BOTTOM&nbsp;&nbsp;LEFT | CENTER | RIGHT</nobr>
-
-<p>
-Use <strong>PAGENUM_POS</strong> to change the default position of
-automatic page numbering. <strong>PAGENUM_POS</strong> requires
-<em>two</em> arguments: a vertical position (TOP or BOTTOM) and a
-horizontal position (LEFT or CENTER or RIGHT).
-<p>
-For example, if you turn both
-<a href="definitions.html#TERMS_HEADER">headers</a>
-and
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-off (with <code>.HEADERS OFF</code> and <code>.FOOTERS
-OFF</code>) and you want <strong>mom</strong> to number your
-pages at the top right position, enter
-<p>
-<pre>
- .PAGENUM_POS TOP RIGHT
-</pre>
-
-<a name="PAGENUM_HYPHENS"><h3><u>3. Enclose page numbers with hyphens (on or off)</u></h3></a>
-<p>
-By default, <strong>mom</strong> encloses page numbers between hyphens.
-If you don't want this behaviour, invoke the macro
-<strong>PAGENUM_HYPHENS</strong> with any argument (<strong>OFF, QUIT, END, X...</strong>),
-like this:
-<p>
-<pre>
- .PAGENUM_HYPHENS OFF
-</pre>
-
-If, for some reason, you want to turn page number hyphens back
-on, invoke the macro without an argument.
-<p>
-
-<hr>
-<a href="rectoverso.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docelement.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/inlines.html b/contrib/groff/contrib/mom/momdoc/inlines.html
deleted file mode 100644
index 9409aab9320d..000000000000
--- a/contrib/groff/contrib/mom/momdoc/inlines.html
+++ /dev/null
@@ -1,802 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Inline escapes</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="color.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="goodies.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-<a name="TOP"></a>
-<h1 align="center">
- <a name="INLINE_ESCAPES"><u>Inline escapes</u></a>
-</h1>
-<p>
-<a href="#INLINE_ESCAPES_INTRO">Introduction to inline escapes</a>
-<br>
-<a href="#INDEX_INLINES">Index of inline escapes</a>
-<p>
-
-<a name="INLINE_ESCAPES_INTRO">
- <h2><u>Introduction to inline escapes</u></h2>
-</a>
-
-<a name="INTRO_INLINE_ESCAPES">
-Inline escapes, as described in the
-<a href="definitions.html#TERMS_INLINES">groff terms</a>
-section of this manual, are typesetting commands that appear in
-text
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>,
-as opposed to macros and other
-<a href="definitions.html#TERMS_CONTROLLINES">control lines</a>
-that must appear on lines by themselves.
-<p>
-Aside from altering type parameters within a line, inlines also
-tell groff about special characters -- em-dashes, bullets,
-<a href="definitions.html#TERMS_FIGURESPACE">figure/digit-width spaces</a>,
-and so on. It is beyond the scope of this manual to provide a
-complete list of groff's inline functions and special characters.
-I recommend having a look at the
-<a href="intro.html#CANONICAL">canonical reference materials</a>
-should you need more information than is contained herein.
-<p>
-In groff, the escape character is the backslash ( \ ). Groff interprets
-everything following the backslash as instructions, not literal text,
-until the escape sequence is complete. Should you need the actual
-backslash character as part of a line of text, simply enter it twice
-( \\ ). Groff understands that this means "please print a backslash
-character." (You can also use <strong>\e</strong> to print a literal
-backslash.)
-<p>
-Groff has a number of ways of recognizing what constitutes a complete
-escape sequence. This is both a boon and a curse; some escape
-sequences have no terminating delimiter and consequently become
-difficult to distinguish from real input text. Others require
-the use of an opening parenthesis with no corresponding closing
-parenthesis. Still others need to be enclosed in square brackets.
-<p>
-<strong>Mom</strong> recognizes that certain escapes get used more
-often than others. For these, she has a consistent input style that
-takes the form \*[...], which makes them stand out well from the text
-of your documents. These escapes are the ones listed under
-<a href="#INLINES_MOM">Mom's personal inlines</a>.
-<p>
-Despite <strong>mom</strong>'s best intentions, there are still
-a number of typesetting functions that can only be accomplished
-with groff's native inline escapes. I've listed the ones that
-strike me as essential, but there are many others. If you want
-to know what they are, please read the
-<a href="intro.html#CANONICAL">canonical reference materials</a>
-pertaining to groff.
-<p>
-<strong>HELPFUL BIT OF INFORMATION:</strong> Inline escapes can be used
-in
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-that take
-<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments</a>.
-<p>
-<a name="INDEX_INLINES"><h3><u>Inlines index</u></h3></a>
-<ul>
- <li><a name="INLINES_MOM"><strong>Mom's personal inlines</strong></a>
- <ul>
- <li><a href="#INLINE_FONTS_MOM">Changing fonts</a>
- <li><a href="#INLINE_SIZE_MOM">Changing point size</a>
- <li><a href="#INLINE_KERNING_MOM">Pairwise kerning</a>
- <li><a href="#INLINE_HORIZONTAL_MOM">Horizontal movement</a>
- <li><a href="#INLINE_VERTICAL_MOM">Vertical movement</a>
- <li><a href="#B">Terminate a line without advancing on the page</a>
- <li><a href="#TB+">Call the next sequential tab without advancing on the page</a>
- <li><a href="#INLINE_RULE_MOM">Full measure rules</a>
- </ul>
- <li><a name="INLINES_GROFF"><strong>Groff inline escapes</strong></a>
- <ul>
- <li><a href="#INLINE_FONTS_GROFF">Font control</a> <strong>\f</strong>
- <li><a href="#INLINE_HORIZONTAL_GROFF">Inline horizontal motions</a> <strong>\h</strong>
- <li><a href="#INLINE_VERTICAL_GROFF">Inline vertical motions</a> <strong>\v</strong>
- <li><a href="#INLINE_STRINGWIDTH_GROFF">String width function</a> <strong>\w</strong>
- <li><a href="#INLINE_LINEDRAWING_GROFF">Horizontal line drawing function</a> <strong>\l</strong>
- <li><a href="#INLINE_CHARACTERS_GROFF">Special characters</a>
- </ul>
-</ul>
-<p>
-<hr>
-
-<!---INLINE_FONTS_MOM--->
-
-<h2><u>Mom's personal inlines</u></h2>
-
-<a name="INLINE_FONTS_MOM"><h3><u>Changing fonts</u></h3></a>
-
-<p>
-<strong>Mom</strong> provides five escapes for changing fonts
-inline:
-<p>
-<table valign="baseline" cellpadding="10" summary="inlinefonts">
-<tr>
- <td><strong>\*[ROM]</strong></td>
- <td>Change font to medium roman</td>
-</tr>
-<tr>
- <td><strong>\*[IT]</strong></td>
- <td>Change font to medium italic</td>
-</tr>
-<tr>
- <td><strong>\*[BD]</strong></td>
- <td>Change font to bold roman</td>
-</tr>
-<tr>
- <td><strong>\*[BDI]</strong></td>
- <td>Change font to bold italic</td>
-</tr>
-<tr>
- <td><strong>\*[PREV]</strong></td>
- <td>Revert to previous font</td>
-</tr>
-</table>
-<p>
-These escapes are provided for merely for convenience, legibility,
-and consistency when typesetting with <strong>mom</strong>. For
-more complete and flexible inline font control, please see
-<a href="#INLINE_FONTS_GROFF">font control with \f</a>.
-
-<p>
-<strong>NOTE:</strong> If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
-inline font changes remain in effect only for the duration of the
-current document element tag.
-<p>
-
-<!---INLINE_SIZE_MOM--->
-
-<hr width="66%" align="left">
-<a name="INLINE_SIZE_MOM"><h3><u>Changing point size</u></h3></a>
-
-<p>
-<strong>Mom</strong> has two inline escapes for changing point
-size:
-<p>
-<pre>
- \*[SIZE &lt;size&gt;]
-</pre>
-
-and
-<p>
-<pre>
- \*[S&lt;size&gt;]
-</pre>
-
-where &quot;size&quot; is the new size you want. You can use
-either; they behave exactly the same way. For example, to change
-the point size of type inline to 12 points, you could enter either
-<p>
-<pre>
- \*[SIZE 12]
-</pre>
-
-or
-<p>
-<pre>
- \*S[12]
-</pre>
-
-The advantage of the first form is that it's easy to remember, and
-follows <strong>mom</strong>'s usual inline syntax. The advantage
-of the second is that it's more concise.
-<p>
-Notice that in both cases, the new size does not require a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>;
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-is assumed. However, a unit of measure may be appended to the size
-if that's what you wish. Fractional sizes are, of course, allowed.
-<p>
-The size given to <strong>\*[SIZE&nbsp;&lt;size&gt;]</strong> or
-<strong>\*S[&lt;size&gt;]</strong> may be expressed in plus or minus
-terms, which can be very useful. In the following examples, the word
-&quot;mom&quot; will be output 2 points larger than the point size
-of the rest of the line.
-<p>
-<pre>
- While she isn't perfect, \*S[+2]mom\*S[-2] isn't half bad.
- While she isn't perfect, \*[SIZE +2]mom\*[SIZE -2] isn't half bad.
-</pre>
-
-<strong>NOTE:</strong> If you're accustomed to groff's usual way
-of handling inline size requests (<kbd>\sN, \s±N, \s(NN, \s±(NN,
-\s[NNN], \s±[NNN]</kbd>), feel free to continue with your old habits.
-<strong>Mom</strong> doesn't care.
-<p>
-
-<!---INLINE_KERNING_MOM--->
-
-<hr width="66%" align="left">
-<a name="INLINE_KERNING_MOM"><h3><u>Pairwise kerning</u></h3></a>
-
-<p>
-Pairwise kerning means moving specific letter pairs closer
-together or further apart (see
-<a href="definitions.html#TERMS_KERN">Typesetting terms, kerning</a>
-for more details).
-<p>
-<strong>Mom</strong> permits inline pairwise
-kerning through the use of the inline escapes
-<table valign="baseline" cellpadding="10" summary="inlinekerning">
-<tr>
- <td><pre>\*[BU n]</pre></td>
- <td>Closes the space between letters (<strong>B</strong>ack <strong>U</strong>nits).</td>
-</tr>
-<tr>
- <td><pre>\*[FU n]</pre></td>
- <td>Opens the space between letters (<strong>F</strong>orward <strong>U</strong>nits).</td>
-</tr>
-</table>
-<br>
-&quot;<strong>n</strong>&quot; is the number of
-<a href="definitions.html#TERMS_KERNUNIT">kern units</a>
-by which to close or open the space between letters.
-<p>
-For example,
-<p>
-<pre>
- THE HUMAN COST OF COMMODIF\*[FU 1]YING FRESH W\*[BU 4]A\*[BU 5]TER
-</pre>
-
-moves the letter Y in &quot;COMMODIFYING&quot; 1 kern unit away from
-the letter F, and the letter A in &quot;WATER&quot; 4 kern units closer
-to the letter W. Additionally, the letter T in "WATER" is moved 5 kern
-units closer to the letter A.
-<p>
-For backward compatibility, the forms
-<table valign="baseline" cellpadding="10" summary="inlinekerningold">
-<tr>
- <td><pre>\*[BU1]...\*[BU36]</pre></td>
- <td>Move back 1...36 <a href="definitions.html#TERMS_KERNUNIT">kern units</a></td>
-</tr>
-<tr>
- <td><pre>\*[FU1]...\*[FU36]</pre></td>
- <td>Move forward 1...36 <a href="definitions.html#TERMS_KERNUNIT">kern units</a></td>
-</tr>
-</table>
-<br>
-also exist (i.e. with no space before the number of kern units desired,
-up to a limit of 36).
-<p>
-<strong>NOTE:</strong> Using <strong>BU</strong> or <strong>FU</strong>
-between characters pairs that are already automatically kerned
-disables the automatic kerning and uses the value you give to
-<strong>BU</strong> or <strong>FU</strong> instead.
-<p>
-
-<!---INLINE_HORIZONTAL_MOM--->
-
-<hr width="66%" align="left">
-<a name="INLINE_HORIZONTAL_MOM"><h3><u>Horizontal inline movement</u></h3></a>
-
-<p>
-Sometimes, you may need to insert a specified amount amount of white
-space into an
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>,
-or -- occasionally -- back up to a
-previous position on an
-<a href="definitions.html#TERMS_INPUTLINE">output</a>
-line in order to create special typographic effects.
-<p>
-<strong>Mom</strong>'s inline escapes for these horizontal movements are
-<p>
-<table align="left" valign="baseline" cellpadding="10" summary="inlinehorizontal">
-<tr>
-<a name="FWD"></a>
- <td><pre>\*[FWD n&lt;unit&gt;]</pre></td>
- <td width="80%">Move forward inline the specified number of
- <a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>;
- decimal fractions are allowed.</td>
-</tr>
-<tr>
-<a name="BCK"></a>
- <td><pre>\*[BCK n&lt;unit&gt;]</pre></td>
- <td width="80%">Move backward inline the specified number of
- <a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>;
- decimal fractions are allowed.</td>
-</tr>
-</table>
-<p>
-For example,
-<p>
-<pre>
- 1.\*[FWD 12p]The Free Trade Play-Offs: WalMart 100, Mexico 0
-</pre>
-puts 12 points of space between &quot;1.&quot; and
-&quot;The&quot;.
-<p>
-<strong>NOTE:</strong> For backward compatibility, the forms
-<p>
-<table valign="baseline" cellpadding="10" summary="inlinehorizontalold">
-<tr>
- <td><pre>\*[BP.25]...\*[BP12.75]</pre></td>
- <td>Move back .25...12.75 points</td>
-</tr>
-<tr>
- <td><pre>\*[FP.25]...\*[FP12.75]</pre></td>
- <td>Move forward .25...12.75 points</td>
-</tr>
-</table>
-<br>
-also exist (i.e. with no space before the digit and points being
-the unit of measure, hence no unit of measure required). Both
-accept quarter points, so it's possible to do, for example,
-<strong>\*[FP.5]</strong> or <strong>\*[BP1.25]</strong> up to a limit
-of 12.75 points.
-<p>
-
-<!---INLINE_VERTICAL_MOM--->
-
-<hr width="66%" align="left">
-<a name="INLINE_VERTICAL_MOM"><h3><u>Vertical inline movement</u></h3></a>
-
-<p>
-If you need to move portions of type up or down on a line,
-<strong>mom</strong> provides the following inline escapes:
-<p>
-<table width="80%" valign="baseline" cellpadding="10" summary="inlinevertical">
-<tr>
-<a name="UP"></a>
- <td><pre>\*[UP n&lt;unit&gt;]</pre></td>
- <td>Move up inline the specified number of
- <a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a></td>
-</tr>
-<tr>
-<a name="DOWN"></a>
- <td><pre>\*[DOWN n&lt;unit&gt;]</pre></td>
- <td>Move down inline the specified number of
- <a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a></td>
-</tr>
-</table>
-<br>
-For example,
-<p>
-<pre>
- Tel: 905\*[UP 1p]-\*[DOWN 1p]4072
-</pre>
-
-moves the hyphen in the telephone number up by 1 point, then
-moves back down by the same amount.
-<p>
-<strong>NOTE: \*[UP]</strong> and <strong>\*[DOWN]</strong> do not
-work with the inline escape,
-<a href="#INLINE_RULE_MOM">\*[RULE]</a>.
-See
-<a href="#RULE_EXCEPTION">here</a>
-for details.
-<p>
-<strong>ADDITIONAL NOTE:</strong> For backward compatibility, the
-following are also available:
-<p>
-<table valign="baseline" cellpadding="10" summary="inlinevertical">
-<tr>
- <td><pre>\*[ALD.25]...\*[ALD12.75]</pre>
- <td>Advance lead .25...12.75 points (move downward)
-</tr>
-<tr>
- <td><pre>\*[RLD.25]...\*[RLD12.75]</pre></td>
- <td>Reverse lead .5...12.75 points (move upward)</td>
-</tr>
-</table>
-<p>
-<p>
-Both <strong>\*[ALD]</strong> and <strong>\*[RLD]</strong> work in
-points, hence you mustn't use a unit of measure.
-<p>
-
-<!---INLINE_B_MOM--->
-
-<hr width="66%" align="left">
-<a name="B"><h3><u>Terminate a line without advancing on the page</u></h3></a>
-
-<p>
-Sometimes, you want <strong>mom</strong> to break a line but not
-advance on the page. See
-<a href="typesetting.html#EL_EXAMPLE">here</a>
-for an example of when you might want to do this.
-<p>
-In versions of <strong>mom</strong> prior to 1.2-f, this was
-accomplished through the use of
-<a href="typesetting.html#EL">EL</a>.
-As of 1.2-f, you can, if you prefer, accomplish the same thing
-by using the inline escape, <strong>\*[B]</strong>. Simply
-attach the escape to the end of any line. Using the example
-given in the document entry for <strong>EL</strong>, you'd use
-<strong>\*[B]</strong> like this:
-
-<p>
-<pre>
- .LEFT
- .LS 12.5
- A line of text.\*[B]
- .ALD 24p
- The next line of text.
-</pre>
-
-<strong>\*[B]</strong> works reliably regardless of the current
-<a href="definitions.html#TERMS_FILLED">fill mode</a>.
-<p>
-
-<!---INLINE_TB+_MOM--->
-
-<hr width="66%" align="left">
-<a name="TB+"><h3><u>Call the next sequential tab without advancing on the page</u></h3></a>
-
-<p>
-Sometimes, you want <strong>mom</strong> to move to the next tab in
-sequence (e.g. from TAB 1 to TAB 2, or TAB 8 to TAB 9) without
-<strong>mom</strong> advancing on the page. (See the example in
-<a href="typesetting.html#NOTE_TN">here</a>
-if you're not clear how <strong>mom</strong> manages tabs and
-linebreaks.)
-<p>
-In versions of <strong>mom</strong> prior to 1.2-f, this was
-accomplished through the use of
-<a href="typesetting.html#TN">TN</a>.
-As of 1.2-f, you can, if you prefer, accomplish the same thing
-by using the inline escape, <strong>\*[TB+]</strong>. Simply
-attach the escape to the end of any line in a tab, like this:
-
-<p>
-<pre>
- .TAB 1
- Some text\*[TB+] \" This line is in tab 1
- Some more text \" This line is in tab 2, on the same baseline as tab 1
-</pre>
-
-<strong>\*[TB+]</strong> works reliably regardless of the current
-<a href="definitions.html#TERMS_FILLED">fill mode</a>.
-<p>
-
-<!---INLINE_RULE_MOM--->
-
-<hr width="66%" align="left">
-<a name="INLINE_RULE_MOM"><h3><u>Full measure rules</u></h3></a>
-
-<p>
-I find I often need rules drawn to the full measure of the current line
-or tab length. The official way to do this is <kbd>\l'\n(.lu'</kbd>,
-which is annoying to type, and doesn't mean a whole heck of a lot if
-you're new to groff. The inline, <strong>\*[RULE]</strong>, is a simple
-replacement for <strong>\l'\n(.lu'</strong>. Use it whenever you need
-a rule drawn to the full measure of the current line or tab length, for
-example:
-<p>
-<pre>
- .LL 6P
- \*[RULE]
-</pre>
-
-The above draws a rule the full measure of the 6-pica line length.
-<p>
-<strong>\*[RULE]</strong> should appear on a line by itself. In
-<a href="definitions.html#TERMS_FILLED">fill modes</a>,
-(i.e.
-<a href="typesetting.html#QUAD">QUAD</a>
-or
-<a href="typesetting.html#JUSTIFY">JUSTIFY</a>),
-it requires a
-<a href="typesetting.html#BR">.BR</a>
-on the line immediately before it; otherwise, the rule will be drawn
-on the same baseline occupied by any type preceding it. In
-<a href="definitions.html#TERMS_NOFILL">nofill modes</a>
-(i.e
-<a href="typesetting.html#LRC">LEFT</a>,
-<a href="typesetting.html#LRC">RIGHT</a>
-or
-<a href="typesetting.html#LRC">CENTER</a>),
-the <strong>.BR</strong> is not required.
-<p>
-Please note that <strong>\*[RULE]</strong> draws the rule to the
-full measure, hence it <em>cannot</em> be used to fill the remainder
-of a partial line with a rule in this way:
-<p>
-<pre>
- Signature__________________________________________
-</pre>
-
-If you wish to accomplish this effect, you have to use
-<strong>\*[RULE]</strong> in conjunction with the
-<a href="goodies.html#PAD"><strong>PAD</strong></a>
-macro and
-<a href="typesetting.html#STRING_TABS">string tabs</a>.
-(See the
-<a href="goodies.html#PAD_EXAMPLE">example</a>
-provided with <strong>PAD</strong>.)
-<a name="RULE_EXCEPTION"></a>
-<p>
-Please also note that the inline escapes
-<a href="#UP">\*[UP]</a>
-and
-<a href="#DOWN">\*[DOWN]</a>
-cannot be used in conjunction with <strong>\*[RULE]</strong>. This
-doesn't work:
-<p>
-<pre>
- \*[DOWN 2p]\*[RULE]\*[UP 2p]
-</pre>
-
-This does:
-<p>
-<pre>
- .ALD 2p
- \*[RULE]
- .RLD 2p
-</pre>
-
-See groff's
-<a href="#INLINE_LINEDRAWING_GROFF">Horizontal line drawing function</a>
-for more information on drawing horizontal rules.
-<p>
-<hr>
-
-<!---INLINE_FONT_GROFF--->
-
-<h2><u>Groff inline escapes</u></h2>
-
-<a name="INLINE_FONTS_GROFF"><h3><u>Font control with \f</u></h3></a>
-
-<p>
-Groff's basic mechanism for inline font control is the escape
-<strong>\f[&lt;</strong>font&gt;<strong>]</strong>.
-<p>
-<table valign="baseline" cellpadding="10" summary="inlinefontsgroff">
-<tr>
- <td><strong>\f[R]</strong></td>
- <td>Change font to medium roman (equivalent to mom's <strong>\*[ROM]</strong>)</td>
-</tr>
-<tr>
- <td><strong>\f[I]</strong></td>
- <td>Change font to medium italic (equivalent to mom's <strong>\*[IT]</strong>)</td>
-</tr>
-<tr>
- <td><strong>\f[B]</strong></td>
- <td>Change font to bold roman (equivalent to mom's <strong>\*[BD]</strong>)</td>
-</tr>
-<tr>
- <td><strong>\f[BI]</strong></td>
- <td>Change font to bold italic (equivalent to mom's <strong>\*[BDI]</strong>)</td>
-</tr>
-<tr>
- <td><strong>\f[P]</strong></td>
- <td>Revert to previous font (equivalent to mom's <strong>\*[PREV]</strong>)</td>
-</tr>
-</table>
-<p>
-<strong>\f[&lt;</strong>font&gt;<strong>]</strong> can be used with
-any legal font style registered with groff. (See
-<a href="appendices.html#STYLE_EXTENSIONS">here</a>
-for a list of pre-registered font styles provided by
-<strong>mom</strong>).
-<p>
-<strong>\f[&lt;</strong>font&gt;<strong>]</strong> can also take a
-complete legal family+font name combo. This is especially useful
-should you need to change both family and font inline. For example,
-if your prevailing family and font are Times Roman and you want a
-few words in Courier Bold Italic, you could do this:
-<p>
-<pre>
- .FAM T
- .FT R
- The command \f[CBI]ls -l\f[P] gives a &quot;long&quot; directory listing.
-</pre>
-
-The Unix command &quot;ls -l&quot; will appear in Courier Bold Italic
-in a line that is otherwise in Times Roman.
-<p>
-
-<!---INLINE_HORIZONTAL_GROFF--->
-
-<hr width="66%" align="left">
-<a name="INLINE_HORIZONTAL_GROFF"><h3><u>Inline horizontal motions with \h</u></h3></a>
-
-<p>
-Whenever you need to move forward or backward on a line, use the inline
-<strong>\h'&lt;distance&gt;'</strong>. In order to avoid unpleasant surprises,
-always append a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-to &quot;distance&quot;.
-<p>
-<pre>
- \h'1.25i'
-</pre>
-
-moves you 1.25 inches to the right (forwards) of the horizontal
-position on the current
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
-<strong>\h'&lt;distance&gt;'</strong> is exactly equivalent to
-<a href="#FWD"><strong>\*[FWD n&lt;unit&gt;]</strong></a>.
-<p>
-<pre>
- \h'-1.25i'
-</pre>
-
-moves you 1.25 inches to the left (backwards).
-<strong>\h'-&lt;distance&gt;'</strong> is exactly equivalent to
-<a href="#BCK"><strong>\*[BCK n&lt;unit&gt;]</strong></a>.
-<p>
-
-<!---INLINE_VERTICAL_GROFF--->
-
-<hr width="66%" align="left">
-<a name="INLINE_VERTICAL_GROFF"><h3><u>Inline vertical motions with \v</u></h3></a>
-
-<p>
-If you need to raise or lower type on a line (say, for sub- or
-superscripts, or any other special effect), use
-<strong>\v'&lt;distance&gt;'</strong>. In order to avoid unpleasant
-surprises, always append a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-to &quot;distance&quot;.
-<p>
-<pre>
- \v'.6m'
-</pre>
-
-moves you (approx.) 2/3 of an
-<a href="definitions.html#TERMS_EM">em</a>
-downward on the current
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
-<strong>\v'&lt;distance&gt;'</strong> is exactly equivalent to
-<a href="#DOWN"><strong>\*[DOWN n&lt;unit&gt;]</strong></a>.
-<p>
-<pre>
- \v'-.6m'
-</pre>
-
-moves you (approx.) 2/3 of an em upward.
-<strong>\v'&lt;-distance&gt;'</strong> is exactly equivalent to <a
-href="#UP"><strong>\*[UP n&lt;unit&gt;]</strong></a>.
-<p>
-<strong>IMPORTANT:</strong> The vertical motion of <strong>\v</strong>
-affects ONLY type on the current
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
-When groff breaks the output line, the effect of
-<strong>\v</strong> is cancelled; the baseline of the next output line
-is where it would be if you hadn't used <strong>\v</strong>.
-<p>
-<strong>TIP:</strong> When using <strong>\v</strong> for
-occasional effects on a line, don't forget to reverse it when
-you've done what you want to do. Otherwise, the remaining type
-will be set too high (if you used <strong>\v</strong> with the
-minus sign) or too low (if you used <strong>\v</strong> without
-the minus sign).
-<p>
-
-<!---INLINE_STRINGWIDTHL_GROFF--->
-
-<hr width="66%" align="left">
-<a name="INLINE_STRINGWIDTH_GROFF"><h3><u>String width function \w</u></h3></a>
-
-<p>
-In the context of <strong>mom</strong>, the string width inline
-<strong>\w'string'</strong> primarily serves to let you
-establish the horizontal measure of something (e.g. indents) based
-on the length of a bit of text. For example, if you want a left
-indent the length of the word &quot;Examples:&quot; plus a
-space, you can set it with the <strong>\w</strong> inline escape:
-<p>
-<pre>
- .IL "\w'Examples: '"
-</pre>
-
-<strong>NOTE:</strong> Whenever you pass <strong>\w'string'</strong>
-to a macro that normally requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-<em>do <strong>NOT</strong> add a unit of measure to the \w'string'
-argument.</em>
-<p>
-Furthermore, if the string is composed of several words separated
-by spaces, you MUST surround the whole escape with double quotes,
-as in the example above.
-<p>
-
-<!---INLINE_LINEDRAWING_GROFF--->
-
-<hr width="66%" align="left">
-<a name="INLINE_LINEDRAWING_GROFF"><h3><u>Horizontal line drawing function \l</u></h3></a>
-
-<p>
-The <strong>\l'distance'</strong> inline allows you to draw a
-horizontal rule of the specified distance. You must supply a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-Therefore, to set a 3-pica rule into a line of text, you'd do
-<p>
-<pre>
- A line of text with a superfluous \l'3P' 3-pica rule in it.
-</pre>
-
-<strong>\l'3P'</strong> above not only draws the rule, but
-advances 3 picas horizontally as well, just as you'd expect.
-<p>
-For an easy way of drawing rules to the full measure of the current
-line or tab length, see
-<a href="#INLINE_RULE_MOM">Full measure rules</a>.
-<p>
-The weight (thickness) of rules varies according to the point size
-in effect when you invoke <strong>\l</strong>, but you can't fix
-the weight with any real precision. A point size of 12 produces
-a tastefully moderate rule weight of between one-half and one
-point (depending on your printer), and is the point size used by
-<strong>mom</strong> for all macros and routines that create rules.
-<p>
-<strong>NOTE:</strong> There are, in addition to <strong>\l</strong>,
-a number of other line-drawing escapes, but frankly, using them for
-typographically precise drawing is a bit like hammering in a nail
-with a screwdriver -- doable, but not recommended.
-<p>
-Groff comes with a number of &quot;preprocessors&quot; designed
-to ease creating rules, boxes, splines, and so on (tbl, pic,
-and friends), but I tend not to use them. A firm believer
-in the &quot;right tool for the job,&quot; I prefer a vector
-drawing program when I need to combine type with graphic elements
-(say, a complex ruled form). Inserting the results into a
-document is easy enough with <strong>.PSPIC</strong> (consult
-the <strong>groff_tmac</strong> man page for information on this
-indispensable and easy-to-use macro).
-<p>
-
-<!---INLINE_CHARACTERS_GROFF--->
-
-<hr width="66%" align="left">
-<a name="INLINE_CHARACTERS_GROFF"><h3><u>Special characters and symbols</u></h3></a>
-
-<p>
-Here follows a short list of commonly-used special characters available
-via inline escapes. If you're not sure of the meaning of some of
-these characters, consult the
-<a href="definitions.html#TERMS">Definitions of Terms</a>.
-<p>
-For a complete list of special characters and glyphs (i.e. just
-about anything you'd ever want to appear on the printed page,
-including mathematical symbols, accented characters, unusual
-ligatures and letters unique to various European languages), consult
-<kbd>man groff_char</kbd>.
-<p>
-<pre>
- CHARACTER ESCAPE SEQUENCE
- --------- ---------------
-
- Comment line \#
- Fixed-width space \&lt;space&gt; i.e. backslash followed by a space
- Unbreakable space \~
- Digit-width (figure) space \0
- Zero-width character \&amp;
- Discretionary hyphen \%
- Backslash \\ or \e
- Plus/minus (arithmetic) \(+-
- Subtract (arithmetic) \(mi
- Multiply (arithmetic) \(mu
- Divide (arithmetic) \(di
- Em-dash \(em
- En-dash \(en
- Left double-quote \(lq
- Right double-quote \(rq
- Bullet \(bu
- Ballot box \(sq
- One-quarter \(14
- One-half \(12
- Three-quarters \(34
- Degree sign \(de
- Dagger \(dg
- Foot mark \(fm
- Cent sign \(ct
- Registered trademark \(rg
- Copyright \(co
- Section symbol \(se
-</pre>
-
-<hr>
-<a href="color.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="goodies.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/intro.html b/contrib/groff/contrib/mom/momdoc/intro.html
deleted file mode 100644
index 4c6e3ebef747..000000000000
--- a/contrib/groff/contrib/mom/momdoc/intro.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>What is mom?</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="definitions.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-<a name="TOP"></a>
-<a name="INTRO">
- <h1 align="center"><u>WHAT IS MOM?</u></h1>
-</a>
-
-<a href="#INTRO_INTRO">Who is mom meant for?</a>
-<br>
-<a href="#INTRO_TYPESETTING">Typesetting with mom</a>
-<br>
-<a href="#INTRO_DOCPROCESSING">Document processing with mom</a>
-<br>
-<a href="#INTRO_PHILOSOPHY">Mom's philosophy</a>
-<br>
-<a href="#INTRO_DOCUMENTATION">A note on mom's documentation</a>
-<br>
-<a href="#CANONICAL">Canonical reference materials</a>
-<br>
-<a href="#MACRO_ARGS">How to read macro arguments</a>
-
-<h2><a name="INTRO_INTRO"><u>Who is mom meant for?</u></a></h2>
-
-<strong>Mom</strong> (&quot;my own macros&quot;, &quot;my other
-macros&quot;, &quot;maximum overdrive macros&quot;...) is a macro set for
-groff, designed to format documents for PostScript output.
-She's aimed at three kinds of users:
-<br>
-<ol>
- <li>typesetters who suspect groff might be &quot;the right
- tool for the job&quot; but who are
- frustrated/intimidated by groff's terse, geeky,
- not-always-typographically-intuitive
- <a href="definitions.html#TERMS_PRIMITIVES">primitives</a>;
- <br>
- <li>non-scientific writers (novelists, short story writers,
- journalists, students) who just want their work to
- look good;
- <br>
- <li>newbies to computer typesetting, document processing, or
- groff who need a well-documented macro set to help them get
- started.
-</ol>
-<p>
-As might be inferred from the above, <strong>mom</strong> is two macro
-packages in one: a set of typesetting macros, and a set of document
-processing macros. The typesetting macros govern the physical
-aspects of page layout and provide sane, comprehensible control over
-typographic refinements. The document processing macros let you focus
-on a document's content and logical structure without worrying about
-typesetting or page layout at all.
-<p>
-Because <strong>mom</strong> provides both typesetting and document
-processing macros, it's safe to say she blurs the distinction between
-document processing and document design. While her basic document style
-comes with pretty spiffy defaults (okay--change &quot;spiffy&quot;
-to &quot;typographically professional&quot;), you can easily control
-how all the various document elements look: titles, page headers and
-footers, page numbering, heads, subheads, footnotes and so on can be
-made to come out exactly the way you want. And should you need precise
-typographic control over elements in a document that fall outside the
-range of <strong>mom</strong>'s document element tags, you don't have to
-read up on groff
-<a href="definitions.html#TERMS_PRIMITIVES">primitives</a>
-in order to accomplish what you want; the typesetting macros take
-care of that.
-<p>
-
-<a name="INTRO_TYPESETTING">
- <h2><u>Typesetting with mom</u></h2>
-</a>
-
-<strong>Mom</strong>'s typesetting macros control the basic parameters
-of type: margins, line length, type family, font, point size,
-linespacing, and so on. In addition, they allow you to move around
-on the page horizontally and vertically, and to set up tabs, indents,
-and columns. Finally, they let you adjust such typographic details as
-justification style, letter spacing, word spacing, hyphenation, and
-kerning.
-
-<p>
-In terms of typographic control, these macros resemble the
-commands used on dedicated typesetting computers like Compugraphics and
-Linotronics. Most of them simply give access to groff's typesetting
-primitives in a way that's consistent and easy to use. A few of
-them (tabs and indents, for example) handle fundamental typesetting
-requirements in ways radically different from groff primitives.
-
-<p>
-With <strong>mom</strong>'s typesetting macros, you can, if you wish,
-create individual output pages that you design from the ground up.
-Provided you have not signalled to <strong>mom</strong> that you
-want document processing (via the
-<a href="docprocessing.html#START">START</a>
-macro; see below), every macro is a literal command that remains in
-effect until you modify it or turn it off. This means that if you
-want to create flyers, surveys, tabulated forms, curricula vitae and
-so on, you may do so in the good old-fashioned way: one step at a
-time with complete control over every element on the page.
-<p>
-Years of reading various mailing lists dealing with computer
-typesetting (groff, TeX, and friends) have convinced me that no program
-can ever replace the human eye and human input when it comes to high
-quality typesetting. As of this writing, a thread on the subject of
-&quot;micro typography&quot; in groff has been going on for nearly a
-month. The reason for the lengthy thread is obvious; words and
-punctuation on the printed page are too variable, too fluid, to be
-rendered flawlessly by any algorithm, no matter how clever. (For
-whatever it's worth, a similar problem exists with engraving musical
-scores by computer.)
-<p>
-<strong>Mom</strong> does not try to solve the problems posed
-by things like hanging punctuation, left-margin adjustments for
-upper case letters like T and W, and so on. She merely tries to
-provide tools that allow knowledgeable typesetters to come up with
-solutions to these problems in ways that are easier and more
-intuitive than manipulating groff at the
-<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>
-level. As a professional typesetter of more than two decades, and a
-writer, I have encountered few situations that cannot be handled by
-<strong>mom</strong>'s typesetting macros.
-<p>
-<strong>Author's note:</strong> One area where groff itself needs
-serious rethinking is in the matter of an algorithm that takes into
-account both word and letter spacing when
-<a href="definitions.html#TERMS_JUST">justifying</a>
-lines. At present, only word spacing is adjusted, requiring what I
-consider an unnecessary amount of user intervention whenever
-letter spacing is required.
-<p>
-<a name="INTRO_DOCPROCESSING">
- <h2><u>Document processing with mom</u></h2>
-</a>
-
-<strong>Mom</strong>'s document processing macros let you format
-documents without having to worry about the typographic details.
-In this respect, <strong>mom</strong> is similar to other groff macro
-packages, as well as to html and LaTeX. Where <strong>mom</strong>
-differs is in the degree of control you have over the look and
-placement of the various elements of a document. For example, if you
-don't want your heads underlined, or you want them bigger/smaller,
-or you'd prefer them to be in a different font, or you'd rather they
-were flush left instead of centred, you can make the changes easily
-and have them apply to the whole document. Temporary and one-off
-changes are easy, too.
-<p>
-<strong>Mom</strong> has some nifty features other macro sets
-don't provide. For example, you can switch between draft-style and
-final-copy output. If you regularly make submissions to publishers
-and editors who insist on "typewritten, double-spaced," there's a
-special macro--
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>
---that changes typeset documents into ones that would make your
-high-school typing teacher proud. Footnotes, endnotes, tables of
-contents, multiple columns, nested lists, recto/verso printing and
-user designable headers and footers are also part of the fun.
-<p>
-<a name="INTRO_PHILOSOPHY">
- <h2><u>Mom's philosophy</u></h2>
-</a>
-
-Formatting documents should be easy, from soup to nuts. Writers need
-to focus on what they're writing, not on how it looks. From the
-moment you fire up an editor to the moment you add "FINIS"
-to your opus, nothing should interfere with the flow of your words.
-The commands needed to format your work should be easy to remember,
-comprehensible, and stand out well from the text. There shouldn't
-be too much clutter. Your documents should be as readable inside a
-text editor as they are on the printed page.
-<p>
-Unfortunately, in computerland, &quot;easy,&quot;
-&quot;comprehensible,&quot; and &quot;readable&quot; often mean
-&quot;you're stuck with what you get.&quot; No document formatting
-system can give you exactly what you want all the time, every time.
-Documents, it seems, always need to be tweaked, either to satisfy a
-typographic whim or to clarify some aspect of their content.
-<p>
-Groff has traditionally solved the problem of formatting vs. tweaking
-by requiring users of the common macro packages (mm, ms, me and their
-offspring) to resort to groff
-<a href="definitions.html#TERMS_PRIMITIVES">primitives</a>
-and
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-for their special typesetting needs. Not to put too fine a point on
-it, groff primitives tend toward the abstruse, and most inline escapes
-are about as readable in-line as an encrypted password. This does
-not make for happy-camper writers, who either find themselves stuck
-with a document formatting style they don't really like, or are
-forced to learn groff from the ground up--a daunting task, to say
-the least.
-<p>
-<strong>Mom</strong> aims to make creating documents a simple matter,
-but with no corresponding loss of user control. The document
-processing macros provide an excellent set of defaults, but if
-something is not to your liking, you can change it. And in combination
-with the typesetting macros, you have all the tools you need to
-massage passages and tweak pages until they look utterly professional.
-<p>
-One rarely hears the word &quot;user interface&quot; in conjunction
-with document processing. Since the user formatting takes place
-inside a text editor, little thought is given to the look and feel
-of the formatting commands. <strong>Mom</strong> attempts to rectify
-this by providing users with a consistent, readable &quot;coding&quot;
-style. Most of the macros (especially in the document processing set)
-have humanly-readable names. Not only does this speed up learning
-the macros, it makes the sense of what's going on in a document,
-typographically and structurally, easier to decipher.
-<p>
-<strong>Mom</strong> does not try to be all things to all people.
-In contrast to the normal groff philosophy, she does not try to
-produce output that looks good no matter where it's displayed.
-She's designed for printed output, although with
-<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>
-she produces acceptable terminal copy. She makes no attempt to be
-compatible with older versions of troff.
-<p>
-One special feature in <strong>mom</strong>'s design is the attention
-she pays to aligning the bottom margins of every page. Nothing screams
-&quot;shoddy&quot; in typeset documents louder than bottom margins
-that wander, or, in typesetter jargon, &quot;hang.&quot; There are,
-of course, situations where whitespace at the bottom of a page may
-be desirable (for example, you wouldn't want a head to appear at the
-bottom of the page without some text underneath it), but in all cases
-where hanging bottom margins can be avoided, <strong>mom</strong> does
-avoid them, by clever adjustments to leading (&quot;line spacing&quot;)
-and the spacing between different elements on the page.
-<p>
-<a name="INTRO_DOCUMENTATION">
- <h2><u>A note on mom's documentation</u></h2>
-</a>
-
-Writing documentation is tough, no doubt about it. One is never
-quite sure of the user's level of expertise. Is s/he new to the
-application, new to its underlying protocols and programs, new to
-the operating system, new to computers? At some point, one has to
-decide who the documentation is for. Making the wrong decision can
-mean the difference between a program that gets used and a program
-that gets tossed.
-<p>
-<strong>Mom</strong>'s documentation assumes users know their way
-around GNU/Linux. It further assumes they at least know what groff
-is, even if they don't know much about it. Lastly, it assumes that
-everyone--groff newbies and experts alike--learns faster from
-a few well-placed examples than from manpage-style reference docs.
-What <strong>mom</strong>'s documentation doesn't assume is that
-you know everything--not about groff, not about typesetting,
-not about document processing. Even experts have odd lacunae in
-their knowledge base. Therefore, whenever I suspect that a term
-or procedure will cause head scratching, I offer an explanation.
-And when explanations aren't enough, I offer examples.
-<br>
-
-<a name="CANONICAL"><h3><u>Canonical reference materials</u></h3></a>
-<p>
-The canonical reference materials for groff are
-<strong>cstr54</strong> (a downloadable PostScript copy of which is
-available
-<a href="http://www.kohala.com/start/troff/">here</a>)
-and the <strong>troff</strong> and <strong>groff_diff</strong>
-manpages. Another excellent source of information (maybe the best)
-is the groff <strong>info</strong> pages, available by typing
-<p>
-<pre>
- info groff
-</pre>
-
-at the command line (assuming you have <strong>info</strong>
-installed on your system). And for inputting special characters,
-see <strong>man groff_char.</strong>
-<p>
-I've tried to avoid reiterating the information contained in these
-documents; however, in a few places, this has proved impossible.
-But be forewarned: I have no qualms about sidestepping excruciating
-completeness concerning groff usage; I'm more interested in getting
-<strong>mom</strong> users up and running. <em>Mea culpa.</em>
-<p>
-<strong>Note:</strong> <strong>Mom</strong>'s macro file
-(om.tmac) is heavily commented. Each macro is preceded by a
-description of its arguments, function and usage, which may
-give you information in addition to what's contained in this
-documentation.
-<p>
-<a name="MACRO_ARGS">
- <h3><u>How to read macro arguments</u></h3>
-</a>
-
-The concise descriptions of macros in this documentation typically
-look like this:
-<blockquote>
-Macro: <strong>NAME</strong> <nobr>arguments</nobr>
-</blockquote>
-<var>arguments</var> lists the macro's arguments using conventions that
-should be familiar to anyone who has ever read a manpage. Briefly:
-<p>
-<ol>
- <li>Macro arguments are separated from each other by spaces.
- <li>If an argument is surrounded by chevrons
- (&nbsp;&lt;&nbsp;&gt;&nbsp;), it's a description of the argument,
- not the argument itself.
- <li>If an argument begins with or is surrounded by double-quotes, the
- double quotes MUST be included in the argument.
- <li>If the user has a choice between several arguments, each of the
- choices is separated by the pipe character (&nbsp;|&nbsp;),
- which means &quot;or.&quot;
- <li>Arguments that are optional are surrounded by square brackets.
- <li>&lt;off&gt; in an argument list means that any argument
- other than those in the argument list turns the macro off.
-</ol>
-
-<a name="TOGGLE_MACRO"><h3><u>Toggle macros</u></h3></a>
-<p>
-Some macros don't require an argument. They simply start something.
-When you need to turn them off, the same macro with <em>any</em>
-argument will do the trick. That's right: ANY argument. This permits
-choosing whatever works for you: OFF, END, QUIT, DONE, Q, X... Hell,
-it could even be I_LOVE_MOM.
-<p>
-Since these macros toggle things on and off, the argument list
-simply reads
-<blockquote>
-<nobr>toggle</nobr>
-</blockquote>
-<br>
-<hr>
-
-<h3>Example 1: an argument requiring double-quotes</h3>
-<blockquote>
-Macro: <strong>TITLE</strong> <nobr>&quot;&lt;title of document&gt;&quot;</nobr>
-</blockquote>
-<p>
-The required argument to <strong>TITLE</strong> is the title of your
-document. Since it's surrounded by double-quotes, you must
-include them in the argument, like this:
-<p>
-<pre>
- .TITLE "My Pulitzer Novel"
-</pre>
-
-<h3>Example 2: a macro with required and optional arguments</h3>
-<blockquote>
-Macro: <strong>TAB_SET</strong> <nobr>&lt;tab #&gt; &lt;indent&gt; &lt;length&gt; [ L | R | C | J [ QUAD ] ]</nobr>
-</blockquote>
-<p>
-The first required argument is a number that identifies the tab (say,
-"3"). The second required argument is an indent from the left margin
-(say, 6 picas). The third required argument is the length of the tab
-(say, 3 picas). Therefore, at a minimum, when using this macro,
-you would enter:
-<p>
-<pre>
- .TAB_SET 3 6P 3P
-</pre>
-
-The remaining two arguments are optional. The first is a single
-letter, either L, R, C or J. The second, which is itself optional
-after L, R, C or J, is the word QUAD. Therefore, depending on
-what additional information you wish to pass to the macro,
-you could enter:
-<p>
-<pre>
- .TAB_SET 3 6P 3P L
- or
- .TAB_SET 3 6P 3P L QUAD
-</pre>
-
-<a name="TOGGLE_EXAMPLE"></a>
-<h3>Example 3: a sample toggle macro:</h3>
-<blockquote>
-Macro: <strong>QUOTE</strong> <nobr>toggle</nobr>
-</blockquote>
-<p>
-<strong>QUOTE</strong> begins a section of quoted text in a document
-and doesn't require an argument. When the quote's finished,
-you have to tell <strong>mom</strong> it's done.
-<p>
-<pre>
- .QUOTE
- So runs my dream, but what am I?
- An infant crying in the night
- An infant crying for the light
- And with no language but a cry.
- .QUOTE OFF
-</pre>
-
-Alternatively, you could have turned the quote off with END, or
-X, or something else.
-
-<p>
-<hr>
-<a href="definitions.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/letters.html b/contrib/groff/contrib/mom/momdoc/letters.html
deleted file mode 100644
index ad35a7118950..000000000000
--- a/contrib/groff/contrib/mom/momdoc/letters.html
+++ /dev/null
@@ -1,463 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document Processing, Writing Letters</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="macrolist.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="refer.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="LETTERS">
- <h1 align="center"><u>WRITING LETTERS WITH MOM</u></h1>
-</a>
-
-<a name="LETTERS_INTRO">
- <h2><u>Introduction</u></h2>
-</a>
-
-<strong>Mom</strong>'s simple but effective letter-writing
-macros are a subset of the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
-designed to ease the creation of correspondence.
-<p>
-Because the letter macros are a subset of the document
-processing macros, you can use
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
-to design correspondence to your own specifications. However,
-<strong>mom</strong> makes no pretence of providing complete design
-flexibility in the matter of letters, which are, after all, simple
-communicative documents whose only real style requirements are that
-they be neat and professional-looking.
-<p>
-<a name="TUTORIAL"><h2><u>Tutorial on writing letters</u></h2></a>
-<p>
-<strong>Mom</strong> letters begin, like all
-<strong>mom</strong>-processed documents, with a
-<a href="docprocessing.html#REFERENCE_MACROS">reference macro</a>
-(in this case,
-<a href="docprocessing.html#AUTHOR">AUTHOR</a>),
-a
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-(<strong>LETTER</strong>, obviously), the essential
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
-macro, and
-<a href="docprocessing.html#START">START</a>,
-like this:
-<p>
-<pre>
- .AUTHOR "Yannick P. Guique"
- .DOCTYPE LETTER
- .PRINTSTYLE TYPESET
- .START
-</pre>
-
-<strong>PRINTSTYLE</strong>, above, could also be
-<strong>TYPEWRITE</strong>. <strong>Mom</strong> has no objection
-to creating letters that look like they were typed on an Underwood
-by a shapely secretary with 1940s gams.
-<p>
-After the <strong>START</strong> macro, you enter headers pertinent to
-your letter: the date, the addressee (in business correspondence,
-typically both name and address), the addresser (that's you; in
-business correspondence, typically both name and address), and a
-greeting (in full, e.g. &quot;Dear Mr. Smith,&quot; or &quot;Dear
-Mr. Smith:&quot;).
-<p>
-The macros for entering the headers are simple (they're not even
-<a href="definitions.html#TERMS_TOGGLE">toggles</a>):
-<p>
-<pre>
- .DATE
- .TO
- .FROM
- .GREETING
-</pre>
-
-You may enter them in any order you like, except for
-<strong>GREETING</strong>, which must come last.
-<strong>Mom</strong> ignores any headers you omit and spaces the
-letter's opening according to what you do include. See
-<a href="#LETTERS_DEFAULTS">Default for letters</a>
-to find out how <strong>mom</strong> formats the headers.
-<p>
-(In pre 1.1.7-a releases of <strong>mom</strong>, the order
-of entry was fixed at the above. This has been changed, although
-if you do follow the above order, <strong>mom</strong> will
-continue to behave exactly as she did in pre 1.1.7-a.)
-<p>
-Once you've filled in what you need to get a letter started, simply
-type the letter, introducing each and every paragraph, including
-the first, with the
-<a href="docelement.html#PP">PP</a>
-macro.
-<p>
-At the end of the letter, should you wish an indented closing
-(&quot;Yours truly,&quot; &quot;Sincerely,&quot; &quot;Hugs and
-kisses&quot;), invoke the macro <strong>CLOSING</strong> on a
-line by itself and follow it with the text of the closing.
-<strong>N.B.</strong> Don't put your name here; <strong>mom</strong>
-supplies it automatically from <strong>AUTHOR</strong> with
-enough space to leave room for your signature.
-
-<p>
-Assuming our tutorial letter is for business correspondence,
-here's what the complete letter looks like.
-<p>
-<pre>
- .AUTHOR "Yannick P. Guique"
- .DOCTYPE LETTER
- .PRINTSTYLE TYPESET
- .START
- .DATE
- August 25, 2004
- .TO
- GUILLAUME BARRIÈRES
- Minidoux Corporation
- 5000 Pannes Drive
- Redmond, Virginia
- .FROM
- Y.P. GUIQUE
- 022 Umask Road
- St-Sauveur-en-dehors-de-la-mappe, Québec
- .GREETING
- Dear Mr. Barrières,
- .PP
- It has come to my attention that you have been lobbying the
- US government to prohibit the use of open source software by
- endeavouring to outlaw so-called &quot;warranty free&quot;
- applications.
- .PP
- I feel it is my duty to inform you that the success of your
- operating system with its embedded web browser relies heavily
- on open source programs and protocols, most notably TCP/IP.
- .PP
- Therefore, in the interests of your corporation's fiscal health,
- I strongly advise that you withdraw support for any US
- legislation that would cripple or render illegal open source
- development.
- .CLOSING
- Sincerely,
-</pre>
-
-This produces a letter with headers that follow the North American
-standard for business correspondence. If you'd prefer another
-style of correspondence, for example, British, you'd set up the
-same letter like this:
-<p>
-<pre>
- .AUTHOR "Yannick P. Guique"
- .DOCTYPE LETTER
- .PRINTSTYLE TYPESET
- .START
- .FROM
- .RIGHT
- Y.P. GUIQUE
- 022 Umask Road
- St-Sauveur-en-dehors-de-la-mappe, Québec
- .TO
- GUILLAUME BARRIÈRES
- Minidoux Corporation
- 5000 Pannes Drive
- Redmond, Virginia
- .DATE
- .RIGHT
- August 25, 2004
- .GREETING
- Dear Mr. Barrières,
-</pre>
-
-Notice the use of <strong>.RIGHT</strong> after
-<strong>.FROM</strong> and <strong>.DATE</strong> in this example,
-used to change the default quad for these macros.
-<p>
-<hr>
-
-<a name="LETTERS_DEFAULTS">
- <h2><u>Defaults for letters</u></h2>
-</a>
-
-In letters, if the order of header macros is
-<p>
-<pre>
- .DATE
- .TO
- .FROM
- .GREETING
-</pre>
-
-<strong>mom</strong> sets
-<br>
-<ol>
- <li>the date flush right, page right, at the top of page one,
-with a gap of two linespaces underneath
- <li>the addressee in a block flush left, page left, with a gap of
-one linespace underneath
- <li>the addresser in a block flush left, page left, with a gap of
-one linespace underneath
- <li>the greeting flush left, with a gap of one linespace
-underneath
-</ol>
-<p>
-which is the standard for North American business correspondence.
-<p>
-If you switch the order of <strong>.DATE</strong>,
-<strong>.TO</strong> and/or <strong>.FROM</strong>,
-<strong>mom</strong> sets all the headers flush left, with a gap of
-one linespace underneath each. (The default left quad of any header
-can be changed by invoking the <strong>.RIGHT</strong> macro, on
-a line by itself, immediately before inputting the text of the
-header.)
-<p>
-Following the headers, <strong>mom</strong> sets
-<p>
-<ul>
- <li>the body of the letter justified
- <li>in multi-page letters:
- <ul>
- <li>a footer indicating there's a next page (of the form <code>.../#</code>)
- <li>the page number at the top of every page after page one
- </ul>
- <li>the closing/signature line flush left, indented halfway across the page
-</ul>
-<p>
-Other important style defaults are listed below, and may be changed
-via the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-or the document processing
-<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
-prior to
-<a href="docprocessing.html#START">START</a>. Assume that any
-style parameter not listed below is the same as for
-<a href="docprocessing.html#TYPESET_DEFAULTS">PRINTSTYLE TYPESET</a>
-or
-<a href="docprocessing.html#TYPEWRITE_DEFAULTS">PRINTSTYLE TYPEWRITE</a>.
-<p>
-<pre>
-PARAMETER PRINTSTYLE TYPESET PRINTSTYLE TYPEWRITE
---------- ------------------ --------------------
-
-Paper size 8.5 x 11 inches 8.5 x 11 inches
-Left/right margins 1.25 inches 1.25 inches
-Header margin 3.5 picas 3.5 picas
- (for page numbers)
-Header gap 3 picas 3 picas
- (for page numbers)
-Family Times Roman Courier
-Font roman roman
-Point size 12 12
-Line space 13.5 12 (i.e. singlespaced)
-Paragraph indent 3 ems 3 picas
-Spaced paragraphs yes no
-Footers* yes yes
-Footer margin 3 picas 3 picas
-Footer gap 3 picas 3 picas
-Page numbers top, centred top, centred
-
-*Footers contain a &quot;next page&quot; number of the form .../#
-</pre>
-<hr>
-
-<a name="LETTERS_MACROS">
- <h2><u>The letter macros</u></h2>
-</a>
-
-All letter macros must come after
-<a href="docprocessing.html#START">START</a>,
-except <strong>NO_SUITE</strong>.
-<p>
-<ul>
- <li><a href="#DATE">DATE</a>
- <li><a href="#TO">TO</a>
- <li><a href="#FROM">FROM</a>
- <li><a href="#GREETING">GREETING</a>
- <li><a href="#CLOSING">CLOSING</a>
- <li><a href="#NO_SUITE">NO_SUITE</a> -- &quot;next page&quot; number off
-</ul>
-<br>
-
-<!---DATE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="DATE"></a>
-Macro: <strong>DATE</strong>
-
-<p>
-Invoke <strong>DATE</strong> on a line by itself, with the date
-underneath, like this:
-<p>
-<pre>
- .DATE
- October 31, 2002
-</pre>
-
-If you wish to change the default quad direction for the date,
-enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself,
-immediately after <kbd>.DATE</kbd>.
-<p>
-If you wish to insert additional space between the date and any
-letter header that comes after it, do so after inputting the date,
-not at the top of the next header macro, like this:
-<p>
-<pre>
- .DATE
- October 31, 2002
- .SPACE \" Or, more simply, .SP
-</pre>
-
-If you wish to remove the default space,
-<p>
-<pre>
- .SPACE -1v \" Or, more simply, .SP -1v
-</pre>
-
-will do the trick.
-<p>
-
-<!---TO--->
-
-<hr width="66%" align="left">
-<p>
-<a name="TO"></a>
-Macro: <strong>TO</strong>
-
-<p>
-Invoke <strong>TO</strong> on a line by itself, with the name
-and address of the addressee underneath, like this:
-<p>
-<pre>
- .TO
- JOHN SMITH
- 10 Roberts Crescent
- Bramladesh, Ont.
-</pre>
-
-If you wish to change the default quad direction for the address,
-enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself,
-immediately after <kbd>.TO</kbd>.
-<p>
-If you wish to insert additional space between the address and
-any letter header that comes after it, do so after inputting the
-address, not at the top of the next header macro, like this:
-<p>
-<pre>
- .TO
- JOHN SMITH
- 10 Roberts Crescent
- Bramladesh, Ont.
- .SPACE \" Or, more simply, .SP
-</pre>
-
-If you wish to remove the default space,
-<p>
-<pre>
- .SPACE -1v \" Or, more simply, .SP -1v
-</pre>
-
-will do the trick.
-<p>
-
-<!---FROM--->
-
-<hr width="66%" align="left">
-<p>
-<a name="FROM"></a>
-Macro: <strong>FROM</strong>
-
-<p>
-Invoke <strong>FROM</strong> on a line by itself, with the name
-and address of the addresser underneath, like this:
-<p>
-<pre>
- .FROM
- JOE BLOW
- 15 Brunette Road
- Ste-Vieille-Andouille, Québec
-</pre>
-
-If you wish to change the default quad direction for the address,
-enter <kbd>.LEFT</kbd> or <kbd>.RIGHT</kbd>, on a line by itself,
-immediately after <kbd>.FROM</kbd>.
-<p>
-If you wish to insert additional space between the address and
-any letter header that comes after it, do so after inputting the
-address, not at the top of the next header macro, like this:
-<p>
-<pre>
- .FROM
- JOE BLOW
- 15 Brunette Road
- Ste-Vieille-Andouille, Québec
- .SPACE \" Or, more simply, .SP
-</pre>
-
-If you wish to remove the default space,
-<p>
-<pre>
- .SPACE -1v \" Or, more simply, .SP -1v
-</pre>
-
-will do the trick.
-<p>
-
-<!---GREETING--->
-
-<hr width="66%" align="left">
-<p>
-<a name="GREETING"></a>
-Macro: <strong>GREETING</strong>
-
-<p>
-Invoke <strong>GREETING</strong> on a line by itself, with the
-full salutation you want for the letter, like this:
-<p>
-<pre>
- .GREETING
- Dear Mr. Smith,
-</pre>
-
-<!---CLOSING--->
-
-<hr width="66%" align="left">
-<p>
-<a name="CLOSING"></a>
-Macro: <strong>CLOSING</strong>
-
-<p>
-Invoke <strong>CLOSING</strong> on a line by itself after the
-body of the letter, with the closing you'd like (e.g. &quot;Yours
-truly,&quot;), like this:
-<p>
-<pre>
- .CLOSING
- Yours truly,
-</pre>
-
-<!---NO_SUITE--->
-
-<hr width="66%" align="left">
-<p>
-<a name="NO_SUITE"></a>
-Macro: <strong>NO_SUITE</strong>
-
-<p>
-If you don't want <strong>mom</strong> to print a &quot;next
-page&quot; number at the bottom of multi-page letters, invoke
-<code>.NO_SUITE</code>, on a line by itself, prior to
-<a href="docprocessing.html#START">START</a>.
-
-<p>
-<hr>
-<a href="macrolist.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="refer.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/macrolist.html b/contrib/groff/contrib/mom/momdoc/macrolist.html
deleted file mode 100644
index 01125f72e08d..000000000000
--- a/contrib/groff/contrib/mom/momdoc/macrolist.html
+++ /dev/null
@@ -1,1794 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Quick reference guide</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="appendices.html#MOREDOC">Next</a>&nbsp;&nbsp;
-<a href="typemacdoc.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-<a name="TOP"></a>
-<h1 align="center">
- <a name="QUICK">Quick reference guide</a>
-</h1>
-
-Once you know your way around <strong>mom</strong>, you may find
-this guide preferable to using the Table of Contents. It lists (I
-hope) all <strong>mom</strong>'s user-space macros. The links
-point to references found elsewhere in the documentation.
-<p>
-<strong>NOTE:</strong> This guide uses tables extensively. Better
-make sure you're reading it in a browser that renders them
-sensibly.
-<p>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Typesetting</th>
- <th>Document processing</th>
-</tr>
-<tr>
- <td><a href="#1">Page/paper size; margins; line length</a></td>
- <td><a href="#21">Reference macros</a></td>
-</tr>
-<tr>
- <td><a href="#2">Family/font; pointsize; leading</a></td>
- <td><a href="#22">Letters</a></td>
-</tr>
-<tr>
- <td><a href="#3">Font modifications</a></td>
- <td><a href="#23">Document style</a></td>
-</tr>
-<tr>
- <td><a href="#4">Underscoring and underlining</a></td>
- <td><a href="#24">Special to PRINTSTYLE TYPEWRITE</a></td>
-</tr>
-<tr>
- <td><a href="#5">Colour</a></td>
- <td><a href="#25">Begin document processing</a></td>
-</tr>
-<tr>
- <td><a href="#6">Quad, justification and fill</a></td>
- <td><a href="#26">Customizing the document header</a></td>
-</tr>
-<tr>
- <td><a href="#7">Line termination</a></td>
- <td><a href="#27">Pagination</a></td>
-</tr>
-<tr>
- <td><a href="#8">Hyphenation</a></td>
- <td><a href="#28">Recto/verso</a></td>
-</tr>
-<tr>
- <td><a href="#9">Word and sentence spacing</a></td>
- <td><a href="#29">Automatic columns</a></td>
-</tr>
-<tr>
- <td><a href="#10">Kerning; ligatures</a></td>
- <td><a href="#30">Epigraphs</a></td>
-</tr>
-<tr>
- <td><a href="#11">Vertical movements</a></td>
- <td><a href="#31">Heads</a></td>
-</tr>
-<tr>
- <td><a href="#12">Horizontal movements</a></td>
- <td><a href="#32">Subheads</a></td>
-</tr>
-<tr>
- <td><a href="#13">Indents</a></td>
- <td><a href="#33">Paragraph heads</a></td>
-</tr>
-<tr>
- <td><a href="#14">Tabs</a></td>
- <td><a href="#34">Paragraphs</a></td>
-</tr>
-<tr>
- <td><a href="#15">Manual columns</a></td>
- <td><a href="#35">Quotes</a></td>
-</tr>
-<tr>
- <td><a href="#16">Superscripts</a></td>
- <td><a href="#36">Blockquotes</a></td>
-</tr>
-<tr>
- <td><a href="#17">Dropcaps</a></td>
- <td><a href="#37">Author linebreaks</a></td>
-</tr>
-<tr>
- <td><a href="#18">Lists</a></td>
- <td><a href="#38">Footnotes</a></td>
-</tr>
-<tr>
- <td><a href="#19">Padding lines</a></td>
- <td><a href="#39">Endnotes</a></td>
-</tr>
-<tr>
- <td><a href="#20">Miscellaneous</a></td>
- <td><a href="#40">Designing endnotes pages</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#18">Lists</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#51">Margin notes</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#52">Line numbering</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#54">References</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#55">Bibliographies</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#41">Table of contents</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#42">Designing a table of contents</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#43">Finis</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#44">Headers and footers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#45">Part-by-part control
- <br>of headers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#46">Footers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#47">Covers and doc covers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#48">Customizing covers
- <br>and doc covers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#49">Part-by-part control of
- <br>covers and doc covers</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="#50">Miscellaneous</a></td>
-</tr>
-</table>
-
-<br>
-<hr>
-<h2 align="center"><u>Typesetting macros</u></h2>
-
-<a name="1"><h3 align="center">Page/paper size; margins; line length</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Page/paper size</th>
- <th>Margins</th>
- <th>Line length</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#PAGEWIDTH">PAGEWIDTH</a></td>
- <td><a href="typesetting.html#T_MARGIN">T_MARGIN</a></td>
- <td><a href="typesetting.html#LINELENGTH">LL</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#PAGELENGTH">PAGELENGTH</a></td>
- <td><a href="typesetting.html#B_MARGIN">B_MARGIN</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="typesetting.html#PAPER">PAPER</a></td>
- <td><a href="typesetting.html#L_MARGIN">L_MARGIN</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="typesetting.html#PAGE">PAGE</a></td>
- <td><a href="typesetting.html#R_MARGIN">R_MARGIN</a></td>
- <td>&nbsp;</td>
-</table>
-
-<a name="2"><h3 align="center">Family/font; pointsize; leading</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Family/font</th>
- <th>Point size</th>
- <th>Leading</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#FAMILY">FAMILY</a></td>
- <td><a href="typesetting.html#PS">PT_SIZE</a></td>
- <td><a href="typesetting.html#LEADING">LS</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#FONT">FT</a></td>
- <td><a href="inlines.html#INLINE_SIZE_MOM">\*[SIZE n]</a></td>
- <td><a href="typesetting.html#AUTOLEAD">AUTOLEAD</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#FALLBACK_FONT">FALLBACK_FONT</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="3"><h3 align="center">Font modifications (pseudo-italic, -bold, -condensed, -extended)</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Italicize</th>
- <th>Embolden</th>
- <th>Condense</th>
- <th>Extend</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#SETSLANT">SETSLANT</a></td>
- <td><a href="typesetting.html#SETBOLDER">SETBOLDER</a></td>
- <td><a href="typesetting.html#CONDENSE">CONDENSE</a></td>
- <td><a href="typesetting.html#EXTEND">EXTEND</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#SLANT_INLINE">\*[SLANT]</a></td>
- <td><a href="typesetting.html#BOLDER_INLINE">\*[BOLDER]</a></td>
- <td><a href="typesetting.html#COND_INLINE">\*[COND]</a></td>
- <td><a href="typesetting.html#EXT_INLINE">\*[EXT]</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#SLANT_INLINE">\*[SLANTX]</a></td>
- <td><a href="typesetting.html#BOLDER_INLINE">\*[BOLDERX]</a></td>
- <td><a href="typesetting.html#COND_INLINE">\*[CONDX]</a></td>
- <td><a href="typesetting.html#EXT_INLINE">\*[EXTX]</a></td>
-</tr>
-</table>
-
-<a name="4"><h3 align="center">Underscoring and underlining</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Underscore</th>
- <th>Underline</th>
-</tr>
-<tr>
- <td><a href="goodies.html#UNDERSCORE">UNDERSCORE</a></td>
- <td><a href="goodies.html#UNDERLINE">UNDERLINE</a></td>
-</tr>
-<tr>
- <td><a href="goodies.html#UNDERSCORE2">UNDERSCORE_2</a></td>
- <td><a href="goodies.html#UL">\*[UL]...\*[ULX]</a></td>
-</tr>
-</table>
-
-<a name="5"><h3 align="center">Colour</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Define colours</th>
- <th>Invoke colours</th>
-</tr>
-<tr>
- <td><a href="color.html#NEWCOLOR">NEWCOLOR</a></td>
- <td><a href="color.html#COLOR">COLOR</a></td>
-</tr>
-<tr>
- <td><a href="color.html#XCOLOR">XCOLOR</a></td>
- <td><a href="color.html#COLOR_INLINE">\*[&lt;colorname&gt;]</a></td>
-</table>
-
-<a name="6"><h3 align="center">Quad, justification and fill</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Fill modes</th>
- <th>No-fill modes</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#JUSTIFY">JUSTIFY</a></td>
- <td><a href="typesetting.html#LRC">LEFT</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#QUAD">QUAD</a></td>
- <td><a href="typesetting.html#LRC">CENTER</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="typesetting.html#LRC">RIGHT</a></td>
-</tr>
-</table>
-
-<a name="7"><h3 align="center">Line termination</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Break</th>
- <th>Break (no space)</th>
- <th>Break (extra space)</th>
- <th>Break (force justify)</th>
-</tr>
-<tr align="center">
- <td><a href="typesetting.html#BR">BR</a></td>
- <td><a href="typesetting.html#EL">EL</a></td>
- <td><a href="typesetting.html#SPACE">SPACE</a></td>
- <td><a href="typesetting.html#SPREAD">SPREAD</a></td>
-</tr>
-</table>
-
-<a name="8"><h3 align="center">Hyphenation</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Enable</th>
- <th>Set parameters</th>
-</tr>
-<tr align="center">
- <td><a href="typesetting.html#HY">HY</a></td>
- <td><a href="typesetting.html#HY_SET">HY_SET</a></td>
-</tr>
-</table>
-
-<a name="9"><h3 align="center">Word and sentence spacing</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Word space</th>
- <th>Sentence space</th>
-</tr>
-<tr align="center">
- <td><a href="typesetting.html#WS">WS</a></td>
- <td><a href="typesetting.html#SS">SS</a></td>
-</tr>
-</table>
-
-<a name="10"><h3 align="center">Character pair and full line kerning; ligatures</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Kern character pairs</th>
- <th>Kern full lines</th>
- <th>Ligatures</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#KERN">KERN</a></td>
- <td><a href="typesetting.html#RW">RW</a></td>
- <td><a href="typesetting.html#LIGATURES">LIGATURES</a></td>
-</tr>
-<tr>
- <td><a href="inlines.html#INLINE_KERNING_MOM">\*[BU n]</a>
- <td><a href="typesetting.html#EW">EW</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="inlines.html#INLINE_KERNING_MOM">\*[FU n]</a>
- <td><a href="typesetting.html#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="11"><h3 align="center">Vertical movements</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Down</th>
- <th>Up</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#ALD">ALD</a></td>
- <td><a href="typesetting.html#RLD">RLD</a></td>
-</tr>
-<tr>
- <td><a href="inlines.html#DOWN">\*[DOWN n]</a></td>
- <td><a href="inlines.html#UP">\*[UP n]</a></td>
-</tr>
-</table>
-
-<a name="12"><h3 align="center">Horizontal movements</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Forward</th>
- <th>Back</th>
-</tr>
-<tr align="center">
- <td><a href="inlines.html#FWD">\*[FWD n]</a></td>
- <td><a href="inlines.html#BCK">\*[BCK n]</a></td>
-</tr>
-</table>
-
-<a name="13"><h3 align="center">Indents</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Left</th>
- <th>Right</th>
- <th>Both</th>
- <th>Quit</th>
- <th>Temp</th>
- <th>Hanging</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#IL">IL</a></td>
- <td><a href="typesetting.html#IR">IR</a></td>
- <td><a href="typesetting.html#IB">IB</a></td>
- <td align="center"><a href="typesetting.html#IQ">IQ</a></td>
- <td align="center"><a href="typesetting.html#TI">TI</a></td>
- <td align="center"><a href="typesetting.html#HI">HI</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#IQ">ILX</a></td>
- <td><a href="typesetting.html#IQ">IRX</a></td>
- <td><a href="typesetting.html#IQ">IBX</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="14"><h3 align="center">Tabs</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Setup</th>
- <th>Invoking</th>
- <th>Quitting</th>
-</tr>
-<tr>
- <td><a href="typesetting.html#TAB_SET">TAB_SET</a></td>
- <td align="center"><a href="typesetting.html#TAB">TAB</a></td>
- <td align="center"><a href="typesetting.html#TQ">TQ</a></td>
-</tr>
-<tr>
- <td><a href="typesetting.html#INLINE_ST">\*[STn]...\*[STnX]</a></td>
- <td align="center"><a href="typesetting.html#TN">TN</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="typesetting.html#ST">ST</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="15"><h3 align="center">Manual columns</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Initializing</th>
- <th>Returning to top</th>
- <th>Exiting</th>
-</tr>
-<tr align="center">
- <td><a href="typesetting.html#MCO">MCO</a></td>
- <td><a href="typesetting.html#MCR">MCR</a></td>
- <td><a href="typesetting.html#MCX">MCX</a></td>
-</tr>
-</table>
-
-<a name="16"><h3 align="center">Superscripts</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Superscript</th>
- <th>Condensed superscript</th>
- <th>Extended superscript</th>
-</tr>
-<tr>
- <td><a href="goodies.html#SUP">\*[SUP]...\*[SUPX]</a></td>
- <td><a href="goodies.html#SUP">\*[CONDSUP]...\*[CONDSUPX]</a></td>
- <td><a href="goodies.html#SUP">\*[EXTSUP]...\*[EXTSUPX]</a></td>
-</tr>
-</table>
-
-<a name="17"><h3 align="center">Dropcaps</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Invoking</th>
- <th>Dropcap control</th>
-</tr>
-<tr>
- <td><a href="goodies.html#DROPCAP">DROPCAP</a></td>
- <td><a href="goodies.html#DROPCAP_FAMILY">DROPCAP_FAMILY</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="goodies.html#DROPCAP_FONT">DROPCAP_FONT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="goodies.html#DROPCAP_COLOR">DROPCAP_COLOR</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="goodies.html#DROPCAP_ADJUST">DROPCAP_ADJUST</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="goodies.html#DROPCAP_GUTTER">DROPCAP_GUTTER</a></td>
-</tr>
-</table>
-
-<a name="18"><h3 align="center">Lists</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Initializing</th>
- <th>Setting items</th>
- <th>List control</th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#LIST">LIST</a></td>
- <td align="center"><a href="docelement.html#ITEM">ITEM</a></td>
- <td><a href="docelement.html#SHIFT_LIST">SHIFT_LIST</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html##RESET_LIST">RESET_LIST</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="#PAD_LIST_DIGITS">PAD_LIST_DIGITS</a></td>
-</tr>
-</table>
-
-<a name="19"><h3 align="center">Padding lines</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr align="center">
- <th>Pad a line</th>
- <th>Change the pad marker</th>
-</tr>
-<tr align="center">
- <td><a href="goodies.html#PAD">PAD</a></td>
- <td><a href="goodies.html#PAD_MARKER">PAD_MARKER</a></td>
-</tr>
-</table>
-
-<a name="20"><h3 align="center">Miscellaneous</h3>
-
-<table align="center" valign="center" border=1 cellpadding="6">
-<tr align="center">
- <th>Newpage</th>
- <th>All caps</th>
- <th>Smartquotes</th>
- <th>Rules/leaders</th>
-</tr>
-<tr align="center">
- <td><a href="typesetting.html#NEWPAGE">NEWPAGE</a></td>
- <td><a href="goodies.html#CAPS">CAPS</a></td>
- <td><a href="goodies.html#SMARTQUOTES">SMARTQUOTES</a></td>
- <td align="left"><a href="inlines.html#INLINE_RULE_MOM">\*[RULE]</a></td>
-</tr>
-<tr align="left">
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="goodies.html#LEADER">\*[LEADER]</a></td>
-</tr>
-<tr align="left">
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="goodies.html#LEADER_CHARACTER">LEADER_CHARACTER</a></td>
-</tr>
-</table>
-<br>
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Change the escape character</th>
- <th>Suppress input</th>
- <th>Disable traps</th>
-</tr>
-<tr align="center">
- <td><a href="docelement.html#QUOTE_TIP">ESC_CHAR</a></td>
- <td><a href="goodies.html#SILENT">COMMENT</a></td>
- <td><a href="goodies.html#TRAP">TRAP</a></td>
-</tr>
-<tr align="center">
- <td>&nbsp;</td>
- <td><a href="goodies.html#SILENT">SILENT</a></td>
- <td>&nbsp;</td>
-</tr>
-</tr>
-</table>
-
-<br>
-<hr>
-
-<h2 align="center"><u>Document processing</u></h2>
-
-<a name="21"><h3 align="center">Reference macros</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Titles</th>
- <th>Authors</th>
- <th>Draft copies</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#TITLE">TITLE</a></td>
- <td><a href="docprocessing.html#AUTHOR">AUTHOR</a></td>
- <td><a href="docprocessing.html#DRAFT">DRAFT</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#SUBTITLE">SUBTITLE</a></td>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#REVISION">REVISION</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#DOCTITLE">DOCTITLE</a></td>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DRAFT_STRING">DRAFT_STRING</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#CHAPTER">CHAPTER</a></td>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#REVISION_STRING">REVISION_STRING</a></td>
-</tr>
-</table>
-
-<a name="22"><h3 align="center">Letters</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Headers</th>
- <th>Closing</th>
- <th>Control</th>
-</tr>
-<tr>
- <td><a href="letters.html#DATE">DATE</a></td>
- <td><a href="letters.html#CLOSING">CLOSING</a></td>
- <td><a href="letters.html#NO_SUITE">NO_SUITE</a></td>
-</tr>
-<tr>
- <td><a href="letters.html#FROM">FROM</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="letters.html#TO">TO</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="letters.html#GREETING">GREETING</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="23"><h3 align="center">Document style</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Basic style</th>
- <th>Style control*</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#COPYSTYLE">COPYSTYLE</a></td>
- <td><a href="docprocessing.html#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#DOCTYPE">DOCTYPE</a></td>
- <td><a href="docprocessing.html#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>**</td>
- <td><a href="docprocessing.html#DOC_LINE_LENGTH">DOC_LINE_LENGTH</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DOC_FAMILY">DOC_FAMILY</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DOC_PT_SIZE">DOC_PT_SIZE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DOC_LEAD">DOC_LEAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#DOC_QUAD">DOC_QUAD</a></td>
-</tr>
-</table>
-<p align="center">
-*See the note
-<a href="docprocessing.html#DOC_PARAM_MACROS">Changing document-wide style parameters after START</a>
-<br>
-**Absolutely required if you wish to use the document processing macros.
-
-<a name="24"><h3 align="center">Special to PRINTSTYLE TYPEWRITE</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Italic/underlining</th>
- <th>Quotes</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#TYPEWRITE_CONTROL">UNDERLINE_ITALIC</a></td>
- <td><a href="docprocessing.html#UNDERLINE_QUOTES">UNDERLINE_QUOTES</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#TYPEWRITE_CONTROL">ITALIC_MEANS_ITALIC</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#TYPEWRITE_CONTROL">UNDERLINE_SLANT</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#TYPEWRITE_CONTROL">SLANT_MEANS_SLANT</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="25"><h3 align="center">Begin document processing</h3></a>
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Absolutely required in order to initialize document processing</th>
-</tr>
-<tr>
- <td align="center"><a href="docprocessing.html#START">START</a></td>
-</tr>
-</table>
-
-<a name="26"><h3 align="center">Customizing the document header</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="8">
-<tr>
- <th>Global</th>
- <th>Title</th>
- <th>Subtitle</th>
- <th>Chapter</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#DOCHEADER">DOCHEADER</a></td>
- <td><a href="docprocessing.html#CHANGE_FAMILY">TITLE_FAMILY</a></td>
- <td><a href="docprocessing.html#CHANGE_FAMILY">SUBTITLE_FAMILY</a></td>
- <td><a href="docprocessing.html#CHAPTER_STRING">CHAPTER_STRING</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#CHANGE_START">DOCHEADER_ADVANCE</a></td>
- <td><a href="docprocessing.html#CHANGE_FONT">TITLE_FONT</a></td>
- <td><a href="docprocessing.html#CHANGE_FONT">SUBTITLE_FONT</a></td>
- <td><a href="docprocessing.html#CHANGE_FAMILY">CHAPTER_TITLE_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#DOCHEADER_FAMILY">DOCHEADER_FAMILY</a></td>
- <td><a href="docprocessing.html#CHANGE_SIZE">TITLE_SIZE</a></td>
- <td><a href="docprocessing.html#CHANGE_SIZE">SUBTITLE_SIZE</a></td>
- <td><a href="docprocessing.html#CHANGE_FONT">CHAPTER_TITLE_FONT</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#DOCHEADER_COLOR">DOCHEADER_COLOR</a></td>
- <td><a href="docprocessing.html#CHANGE_COLOR">TITLE_COLOR</a></td>
- <td><a href="docprocessing.html#CHANGE_COLOR">SUBTITLE_COLOR</a></td>
- <td><a href="docprocessing.html#CHANGE_SIZE">CHAPTER_TITLE_SIZE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#CHANGE_COLOR">CHAPTER_TITLE_COLOR</a></td>
-</tr>
-</table>
-<br>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Attribution</th>
- <th>Author</th>
- <th>Document type</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#CHANGE_ATTRIBUTE">ATTRIBUTE_STRING</a></td>
- <td><a href="docprocessing.html#CHANGE_FAMILY">AUTHOR_FAMILY</a></td>
- <td><a href="docprocessing.html#CHANGE_FAMILY">DOCTYPE_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="docprocessing.html#CHANGE_COLOR">ATTRIBUTE_COLOR</a></td>
- <td><a href="docprocessing.html#CHANGE_FONT">AUTHOR_FONT</a></td>
- <td><a href="docprocessing.html#CHANGE_FONT">DOCTYPE_FONT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#CHANGE_SIZE">AUTHOR_SIZE</a></td>
- <td><a href="docprocessing.html#CHANGE_SIZE">DOCTYPE_SIZE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#CHANGE_COLOR">AUTHOR_COLOR</a></td>
- <td><a href="docprocessing.html#CHANGE_COLOR">DOCTYPE_COLOR</a></td>
-</tr>
-</table>
-
-<a name="27"><h3 align="center">Pagination</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Paginate</th>
- <th>Style control</th>
-</tr>
-<tr>
- <td><a href="headfootpage.html#PAGINATE">PAGINATE</a></td>
- <td><a href="headfootpage.html#PAGINATE_GENERAL">PAGENUM_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a></td>
- <td><a href="headfootpage.html#PAGINATE_GENERAL">PAGENUM_FONT</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#PAGENUM_STYLE">PAGENUM_STYLE</a>*</td>
- <td><a href="headfootpage.html#PAGINATE_GENERAL">PAGENUM_SIZE</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#PAGENUM_ON_FIRST_PAGE">PAGENUM_ON_FIRST_PAGE</a></td>
- <td><a href="headfootpage.html#PAGINATE_GENERAL">PAGENUM_COLOR</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a></td>
- <td><a href="headfootpage.html#PAGENUM_POS">PAGENUM_POS</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#SUSPEND_PAGINATION">SUSPEND_PAGINATION</a></td>
- <td><a href="headfootpage.html#PAGENUM_HYPHENS">PAGENUM_HYPHENS</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#SUSPEND_PAGINATION">RESTORE_PAGINATION</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<p align="center">
-*I.e. the &quot;format&quot; of page numbering (digits, roman numerals, letters)
-
-<a name="28"><h3 align="center">Recto/verso</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Enabling</th>
- <th>Controling</th>
- <th>User-defined page headers/footers
- <br>
- for alternating pages*
- </th>
-</tr>
-<tr>
- <td><a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a></td>
- <td><a href="rectoverso.html#SWITCH_HDRFTR">SWITCH_HEADERS</a></td>
- <td align="center"><a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_RECTO</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="rectoverso.html#SWITCH_HDRFTR">SWITCH_FOOTERS</a>*</td>
- <td align="center"><a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_VERSO</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td align="center"><a href="headfootpage.html#HDRFTR_RECTOVERSO">FOOTER_RECTO</a>*</td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td align="center"><a href="headfootpage.html#HDRFTR_RECTOVERSO">FOOTER_VERSO</a>*</td>
-</tr>
-</table>
-<p align="center">
-*Please note that most aspects of page header and footer control
-are treated identically. In the documentation, the descriptions
-of macros that control header and footer behaviour usually only
-mention &quot;HEADER&quot; or &quot;HEADER_&quot;. Simply apply
-&quot;FOOTER&quot; or &quot;FOOTER_&quot; to the appropriate
-&quot;HEADER&quot; or &quot;HEADER_&quot;macros in order to enable
-their behaviour for footers.
-
-
-<a name="29"><h3 align="center">Automatic columns</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Enabling</th>
- <th>Controling</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#COLUMNS">COLUMNS</a></td>
- <td><a href="docprocessing.html#COL_NEXT">COL_NEXT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docprocessing.html#COL_BREAK">COL_BREAK</a></td>
-</tr>
-</table>
-
-<a name="30"><h3 align="center">Epigraphs</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#EPIGRAPH">EPIGRAPH</a></td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_FAMILY</a></td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_AUTOLEAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_FONT</a></td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_SIZE</a></td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_INDENT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#EPIGRAPH_CONTROL">EPIGRAPH_COLOR</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="31"><h3 align="center">Heads</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#HEAD">HEAD</a></td>
- <td><a href="docelement.html#HEAD_GENERAL">HEAD_FAMILY</a></td>
- <td><a href="docelement.html#HEAD_GENERAL">HEAD_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#HEAD_GENERAL">HEAD_FONT</a></td>
- <td><a href="docelement.html#HEAD_CAPS">HEAD_CAPS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#HEAD_GENERAL">HEAD_SIZE</a></td>
- <td><a href="docelement.html#HEAD_UNDERLINE">HEAD_UNDERLINE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#HEAD_GENERAL">HEAD_COLOR</a></td>
- <td><a href="docelement.html#HEAD_SPACE">HEAD_SPACE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#NUMBER_HEADS">NUMBER_HEADS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#RESET_HEAD_NUMBER">RESET_HEAD_NUMBER</a></td>
-</tr>
-</table>
-
-<a name="32"><h3 align="center">Subheads</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#SUBHEAD">SUBHEAD</a></td>
- <td><a href="docelement.html#SUBHEAD_GENERAL">SUBHEAD_FAMILY</a></td>
- <td><a href="docelement.html#SUBHEAD_GENERAL">SUBHEAD_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#SUBHEAD_GENERAL">SUBHEAD_FONT</a></td>
- <td><a href="docelement.html#NUMBER_SUBHEADS">NUMBER_SUBHEADS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#SUBHEAD_GENERAL">SUBHEAD_SIZE</a></td>
- <td><a href="docelement.html#RESET_SUBHEAD_NUMBER">RESET_SUBHEAD_NUMBER</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#SUBHEAD_CONTROL">SUBHEAD_COLOR</a></td>
-</tr>
-</table>
-
-<a name="33"><h3 align="center">Paragraph heads</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#PARAHEAD">PARAHEAD</a></td>
- <td><a href="docelement.html#PARAHEAD_GENERAL">PARAHEAD_FAMILY</a></td>
- <td><a href="docelement.html#PARAHEAD_INDENT">PARAHEAD_INDENT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#PARAHEAD_GENERAL">PARAHEAD_FONT</a></td>
- <td><a href="docelement.html#NUMBER_PARAHEADS">NUMBER_PARAHEADS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#PARAHEAD_GENERAL">PARAHEAD_SIZE</a></td>
- <td><a href="docelement.html#RESET_PARAHEAD_NUMBER">RESET_PARAHEAD_NUMBER</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#PARAHEAD_GENERAL">PARAHEAD_COLOR</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="34"><h3 align="center">Paragraphs</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control*</th>
- <th>Other</th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#PP">PP</a></td>
- <td align="center"><a href="docelement.html#PP_FONT">PP_FONT</a></td>
- <td><a href="docelement.html#PARA_INDENT">PARA_INDENT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#INDENT_FIRST_PARAS">INDENT_FIRST_PARAS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#PP_SPACE">PARA_SPACE</a></td>
-</tr>
-</table>
-<p align="center">
-*For an in-depth explanation of how to manage the type-style of
-paragraphs, much of which is normally established through the use of
-typesetting macros prior to
-<a href="docprocessing.html#START">START</a>,
-see
-<a href="docelement.html#PP_CONTROL">Paragraph control macros</a>.
-
-<a name="35"><h3 align="center">Quotes</a>
-<br>
-(line-for-line cited text, e.g. poetry or code snippets)
-</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#QUOTE">QUOTE</a></td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_FAMILY</a></td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_INDENT</a>*</td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_FONT</a></td>
- <td><a href="docelement.html#ALWAYS_FULLSPACE_QUOTES">ALWAYS_FULLSPACE_QUOTES</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_SIZE</a></td>
- <td><a href="docelement.html#BREAK_QUOTE">BREAK_QUOTE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_AUTOLEAD</a></td>
- <td><a href="docprocessing.html#UNDERLINE_QUOTES">UNDERLINE_QUOTES</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#QUOTE_GENERAL">QUOTE_COLOR</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<p align="center">
-*Note that the use of QUOTE_INDENT sets the indent for both QUOTE
-and BLOCKQUOTE.
-
-<a name="36"><h3 align="center">Blockquotes</a>
-<br>
-(formatted citations)
-</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#BLOCKQUOTE">BLOCKQUOTE</a></td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_FAMILY</a></td>
- <td><a href="docelement.html#QUOTE_GENERAL">BLOCKQUOTE_INDENT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_FONT</a></td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_SIZE</a></td>
- <td><a href="docelement.html#BREAK_QUOTE">BREAK_BLOCKQUOTE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_AUTOLEAD</a></td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#BLOCKQUOTE_GENERAL">BLOCKQUOTE_COLOR</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<p align="center">
-*Note that the use of BLOCKQUOTE_INDENT sets the indent for both BLOCKQUOTE
-and QUOTE.
-
-<a name="37"><h3 align="center">Author linebreaks</a>
-<br>
-(also called "scene" or "section" breaks)
-</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#LINEBREAK">LINEBREAK</a></td>
- <td><a href="docelement.html#LINEBREAK_COLOR">LINEBREAK_COLOR</a></td>
- <td><a href="docelement.html#LINEBREAK_CHAR">LINEBREAK_CHAR</a></td>
-</tr>
-</table>
-
-<a name="38"><h3 align="center">Footnotes</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type-style control</th>
- <th>Other</th>
-</tr>
-<tr>
- <td><a href="docelement.html#FOOTNOTE">FOOTNOTE</a>*</td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_FAMILY</a></td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_AUTOLEAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_FONT</a></td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_SIZE</a></td>
- <td><a href="docelement.html#FOOTNOTE_MARKERS">FOOTNOTE_MARKERS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_GENERAL">FOOTNOTE_COLOR</a></td>
- <td><a href="docelement.html#FOOTNOTE_MARKER_STYLE">FOOTNOTE_MARKER_STYLE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#RESET_FOOTNOTE_NUMBER">RESET_FOOTNOTE_NUMBER</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_RULE">FOOTNOTE_RULE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_RULE_ADJ">FOOTNOTE_RULE_ADJ</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTE_RULE_LENGTH">FOOTNOTE_RULE_LENGTH</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#FOOTNOTES_RUN_ON">FOOTNOTES_RUN_ON</a></td>
-</tr>
-</table>
-<p align="center">
-*Indenting of footnotes is handled by arguments passed to FOOTNOTE.
-
-<a name="39"><h3 align="center">Endnotes</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Input endnotes</th>
- <th>Output endnotes pages</th>
-</tr>
-<tr align="center">
- <td><a href="docelement.html#ENDNOTE">ENDNOTE</a></td>
- <td><a href="docelement.html#ENDNOTES">ENDNOTES</a></td>
-</tr>
-</table>
-
-<a name="40"><h3 align="center">Designing endnotes pages</a>
-<br>
-(if you want to change the defaults)
-</h3>
-
-<table align="center" valign="center" border=1 cellpadding="6">
-<tr>
- <th>Type-style control</th>
- <th>Endnotes page
- <br>title string*
-</th>
- <th>Document identification string**</th>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_GENERAL">ENDNOTE_FAMILY</a></td>
- <td><a href="docelement.html#ENDNOTE_STRING">ENDNOTE_STRING</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE">ENDNOTE_TITLE</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_GENERAL">ENDNOTE_FONT</a></td>
- <td><a href="docelement.html#ENDNOTE_STRING_CONTROL">ENDNOTE_STRING_FAMILY</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE_CONTROL">ENDNOTE_TITLE_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_LEAD">ENDNOTE_LEAD</a></td>
- <td><a href="docelement.html#ENDNOTE_STRING_CONTROL">ENDNOTE_STRING_FONT</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE_CONTROL">ENDNOTE_TITLE_FONT</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_PT_SIZE">ENDNOTE_PT_SIZE</a></td>
- <td><a href="docelement.html#ENDNOTE_STRING_CONTROL">ENDNOTE_STRING_SIZE</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE_CONTROL">ENDNOTE_TITLE_SIZE</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_GENERAL">ENDNOTE_QUAD</a></td>
- <td><a href="docelement.html#ENDNOTE_STRING_CAPS">ENDNOTE_STRING_CAPS</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE_CONTROL">ENDNOTE_TITLE_QUAD</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="docelement.html#ENDNOTE_STRING_UNDERSCORE">ENDNOTE_STRING_UNDERSCORE</a></td>
- <td><a href="docelement.html#ENDNOTE_TITLE_UNDERSCORE">ENDNOTE_TITLE_UNDERSCORE</a></td>
-</tr>
-</table>
-<p align="center">
-*By default, &quot;Endnotes&quot;, at the top of the first page of
-endnotes
-<br>
-**I.e. how each document in the endnotes for a collated document is
-identified (by default, the strings passed to the reference
-macro, .TITLE
-<p>
-
-<table align="center" valign="center" border=1 cellpadding="6">
-<tr>
- <th>Endnotes numbering</th>
- <th>Paragraph control</th>
- <th>Endnotes headers/footers</th>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_NUMBER_CONTROL">ENDNOTE_NUMBER_FAMILY</a></td>
- <td><a href="docelement.html#ENDNOTE_PARA_INDENT">ENDNOTE_PARA_INDENT</a></td>
- <td><a href="docelement.html#ENDNOTES_ALLOWS_HEADERS">ENDNOTES_ALLOWS_HEADERS</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_NUMBER_CONTROL">ENDNOTE_NUMBER_FONT</a></td>
- <td><a href="docelement.html#ENDNOTE_PARA_SPACE">ENDNOTE_PARA_SPACE</a></td>
- <td><a href="docelement.html#ENDNOTES_HDRFTR_CENTER">ENDNOTES_HEADER_CENTER</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_NUMBER_CONTROL">ENDNOTE_NUMBER_SIZE</a></td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#ENDNOTES_HDRFTR_CENTER">ENDNOTES_FOOTER_CENTER</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_NUMBERS_ALIGN_LEFT">ENDNOTE_NUMBERS_ALIGN_LEFT</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTE_NUMBERS_ALIGN_RIGHT">ENDNOTE_NUMBERS_ALIGN_RIGHT</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<br>
-
-<table align="center" valign="center" border=1 cellpadding="6">
-<tr>
- <th>Endnotes page numbering</th>
- <th>Misc</th>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTES_FIRST_PAGENUMBER">ENDNOTES_FIRST_PAGENUMBER</a></td>
- <td><a href="docelement.html#ENDNOTES_NO_COLUMNS">ENDNOTES_NO_COLUMNS</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTES_PAGENUM_STYLE">ENDNOTES_PAGENUM_STYLE</a>*</td>
- <td><a href="docelement.html#SINGLESPACE_ENDNOTES">SINGLESPACE_ENDNOTES</a>**</td>
-</tr>
-<tr>
- <td><a href="docelement.html#ENDNOTES_NO_FIRST_PAGENUM">ENDNOTES_NO_FIRST_PAGENUM</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<p align="center">
-*I.e. the format of page numbering (digits, roman, letters)
-<br>
-**Applies to PRINTSTYLE TYPEWRITE only
-
-<a name="51"><h3 align="center">Margin notes</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Initialize</th>
- <th>Start</th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#MN_INIT">MN_INIT</a></td>
- <td align="center"><a href="docelement.html#MN">MN</a></td>
-</tr>
-</table>
-
-<a name="52"><h3 align="center">Line numbering</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Text</th>
- <th>Quotes</th>
- <th>Blockquotes</th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#NUMBER_LINES">NUMBER_LINES</a></td>
- <td align="center"><a href="docelement.html#NUMBER_QUOTE_LINES">NUMBER_QUOTE_LINES</a></td>
- <td align="center"><a href="docelement.html#NUMBER_BLOCKQUOTE_LINES">NUMBER_BLOCKQUOTE_LINES</a></td>
-</tr>
-</table>
-
-<a name="54"><h3 align="center">References</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Begin/end refs</th>
- <th>Footnote refs</th>
- <th>Endnote refs</th>
- <th>Embedded refs</th>
-</tr>
-<tr>
- <td align="center"><a href="refer.html#REF">REF</a></td>
- <td align="center"><a href="refer.html#FOOTNOTE_REFS">FOOTNOTE_REFS</a></td>
- <td align="center"><a href="refer.html#ENDNOTE_REFS">ENDNOTE_REFS</a></td>
- <td align="center"><a href="refer.html#BRACKET_REFS">REF( / REF)</a></td>
-</tr>
-<tr>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center"><a href="refer.html#BRACKET_REFS">REF( / REF)</a></td>
-</tr>
-<tr>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center"><a href="refer.html#BRACKET_REFS">REF[ / REF]</a></td>
-</tr>
-<tr>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center">&nbsp;</td>
- <td align="center"><a href="refer.html#BRACKET_REFS">REF{ / REF}</a></td>
-</tr>
-</table>
-
-<a name="55"><h3 align="center">Bibliographies</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Start bibliography page</th>
- <th>Bibliography type</th>
-</tr>
-<tr>
- <td align="center"><a href="refer.html#BIBLIOGRAPHY">BIBLIOGRAPHY</a></td>
- <td align="center"><a href="refer.html#BIBLIOGRAPHY_TYPE">BIBLIOGRAPHY_TYPE</a></td>
-</tr>
-</table>
-
-<a name="41"><h3 align="center">Table of contents</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Generate</th>
- <th>General
- <br>
- type-style control
- </th>
- <th>TOC title string*
- <br>
- and style control
- </th>
-</tr>
-<tr>
- <td align="center"><a href="docelement.html#TOC">TOC</a></td>
- <td align="center"><a href="docelement.html#TOC_FAMILY">TOC_FAMILY</a></td>
- <td><a href="docelement.html#TOC_HEADER_STRING">TOC_HEADER_STRING</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td align="center"><a href="docelement.html#TOC_PT_SIZE">TOC_PT_SIZE</a></td>
- <td><a href="docelement.html#TOC_HEADER_FAMILY">TOC_HEADER_FAMILY</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td align="center"><a href="docelement.html#TOC_LEAD">TOC_LEAD</a></td>
- <td><a href="docelement.html#TOC_HEADER_FONT">TOC_HEADER_FONT</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#TOC_HEADER_SIZE">TOC_HEADER_SIZE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="docelement.html#TOC_HEADER_QUAD">TOC_HEADER_QUAD</a></td>
-</tr>
-</table>
-<p align="center">
-*By default, "Table of Contents"
-
-<a name="42"><h3 align="center">Designing a table of contents</a>
-<br>
-(if you want to change the defaults)
-</h3>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Title entries</th>
- <th>Head entries</th>
- <th>Subhead entries</th>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_TITLE_ENTRY">TOC_TITLE_ENTRY</a></td>
- <td><a href="docelement.html#TOC_HEAD">TOC_HEAD_FAMILY</a></td>
- <td><a href="docelement.html#TOC_SUBHEAD">TOC_SUBHEAD_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_APPENDS_AUTHOR">TOC_APPENDS_AUTHOR</a></td>
- <td><a href="docelement.html#TOC_HEAD">TOC_HEAD_FONT</a></td>
- <td><a href="docelement.html#TOC_SUBHEAD">TOC_SUBHEAD_FONT</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_TITLE">TOC_TITLE_FAMILY</a></td>
- <td><a href="docelement.html#TOC_HEAD">TOC_HEAD_SIZE</a></td>
- <td><a href="docelement.html#TOC_SUBHEAD">TOC_SUBHEAD_SIZE</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_TITLE">TOC_TITLE_FONT</a></td>
- <td><a href="docelement.html#TOC_HEAD">TOC_HEAD_INDENT</a></td>
- <td><a href="docelement.html#TOC_SUBHEAD">TOC_SUBHEAD_INDENT</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_TITLE">TOC_TITLE_SIZE</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_TITLE">TOC_TITLE_INDENT</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<br>
-
-<table align="center" valign="center" border=1 cellpadding="6">
-<tr>
- <th>Parahead entries</th>
- <th>Page number entries</th>
- <th>Pagination</th>
- <th>Misc</th>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_PARAHEAD">TOC_PARAHEAD_FAMILY</a></td>
- <td><a href="docelement.html#TOC_PN">TOC_PN_FAMILY</a></td>
- <td align="center"><a href="docelement.html#PAGINATE_TOC">PAGINATE_TOC</a></td>
- <td><a href="docelement.html#TOC_RV_SWITCH">TOC_RV_SWITCH</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_PARAHEAD">TOC_PARAHEAD_FONT</a></td>
- <td><a href="docelement.html#TOC_PN">TOC_PN_FONT</a></td>
- <td align="center"><a href="docelement.html#TOC_PAGENUM_STYLE">TOC_PAGENUM_STYLE</a>*</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_PARAHEAD">TOC_PARAHEAD_SIZE</a></td>
- <td><a href="docelement.html#TOC_PN">TOC_PN_SIZE</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td><a href="docelement.html#TOC_PARAHEAD">TOC_PARAHEAD_INDENT</a></td>
- <td><a href="docelement.html#TOC_PADDING">TOC_PADDING</a></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<p align="center">
-*I.e. the format of page numbering (digits, roman, letters)
-
-<a name="43"><h3 align="center">Finis</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Type style control</th>
-</tr>
-<tr>
- <td><a href="docelement.html#FINIS">FINIS</a></td>
- <td><a href="docelement.html#FINIS_COLOR">FINIS_COLOR</a></td>
-</tr>
-<tr>
- <td><a href="docelement.html#FINIS_STRING">FINIS_STRING</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="44"><h3 align="center">Headers and footers</h3></a>
-<p align="center">
-<strong>Mom</strong> treats all aspects of headers and footers
-identically. The only difference between the two is whether the
-information they contain appears at the top of the page or at the
-bottom. Consequently, in the following, substitute FOOTERS
-for HEADERS, and FOOTER_ for HEADER_ if you're hunting down how to
-do something with footers.
-<p>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Macro</th>
- <th>Placement</th>
- <th>User-defined headers</th>
- <th>General
- <br>
- type-style control
- </th>
-</tr>
-<tr>
- <td><a href="headfootpage.html#HEADERS">HEADERS</a></td>
- <td><a href="headfootpage.html#HDRFTR_MARGIN">HEADER_MARGIN</a></td>
- <td><a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_RECTO</a></td>
- <td><a href="headfootpage.html#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="headfootpage.html#HDRFTR_GAP">HEADER_GAP</a></td>
- <td><a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_VERSO</a></td>
- <td><a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="headfootpage.html#HDRFTR_COLOR">HEADER_COLOR</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td><a href="headfootpage.html#HDRFTR_PLAIN">HEADER_PLAIN</a></td>
-</tr>
-</table>
-
-<a name="45"><h3 align="center">Part-by-part control of headers</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Left</th>
- <th>Center</th>
- <th>Right</th>
-</tr>
-<tr>
- <td><a href="headfootpage.html#HDRFTR_LEFT">HEADER_LEFT</a></td>
- <td><a href="headfootpage.html#HDRFTR_CENTER">HEADER_CENTER</a></td>
- <td><a href="headfootpage.html#HDRFTR_RIGHT">HEADER_RIGHT</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#_FAMILY">HEADER_LEFT_FAMILY</a></td>
- <td><a href="headfootpage.html#_FAMILY">HEADER_CENTER_FAMILY</a></td>
- <td><a href="headfootpage.html#_FAMILY">HEADER_RIGHT_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#_FONT">HEADER_LEFT_FONT</a></td>
- <td><a href="headfootpage.html#_FONT">HEADER_CENTER_FONT</a></td>
- <td><a href="headfootpage.html#_FONT">HEADER_RIGHT_FONT</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#_SIZE">HEADER_LEFT_SIZE</a></td>
- <td><a href="headfootpage.html#_SIZE">HEADER_CENTER_SIZE</a></td>
- <td><a href="headfootpage.html#_SIZE">HEADER_RIGHT_SIZE</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#_COLOR">HEADER_LEFT_COLOR</a></td>
- <td><a href="headfootpage.html#_COLOR">HEADER_CENTER_COLOR</a></td>
- <td><a href="headfootpage.html#_COLOR">HEADER_RIGHT_COLOR</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#_CAPS">HEADER_LEFT_CAPS</a></td>
- <td><a href="headfootpage.html#_CAPS">HEADER_CENTER_CAPS</a></td>
- <td><a href="headfootpage.html#_CAPS">HEADER_RIGHT_CAPS</a></td>
-</tr>
-<tr>
- <td>&nbsp;</td>
- <td><a href="headfootpage.html#HDRFTR_CENTER_PAD">HEADER_CENTER_PAD</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-<br>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Separator rule</th>
- <th>Misc</th>
-</tr>
-<tr>
- <td><a href="headfootpage.html#HDRFTR_RULE">HEADER_RULE</a></td>
- <td><a href="docprocessing.html#REVISION_STRING">REVISION_STRING</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a></td>
- <td><a href="docprocessing.html#DRAFT_STRING">DRAFT_STRING</a></td>
-</tr>
-<tr>
- <td><a href="headfootpage.html#HDRFTR_RULE_COLOR">HEADER_RULE_COLOR</a></td>
- <td>&nbsp;</td>
-</tr>
-</table>
-
-<a name="46"><h3 align="center">Footers</h3></a>
-<p align="center">
-This is the one exception to the &quot;HEADER also means FOOTER&quot;
-convention used throughout the documentation.
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <td><a href="headfootpage.html#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a></td>
-</tr>
-</table>
-
-<a name="47"><h3 align="center">Covers and doc covers</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Covers</th>
- <th>Doc covers</th>
-</tr>
-<tr align="center">
- <td><a href="cover.html#COVER">COVER</a></td>
- <td><a href="cover.html#COVER">DOC_COVER</a></td>
-</tr>
-<tr align="center">
- <td><a href="cover.html#ON_OFF">COVERS</a></td>
- <td><a href="cover.html#ON_OFF">DOC_COVERS</a></td>
-</tr>
-</table>
-
-
-<a name="48"><h3 align="center">Customizing covers and doc covers</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="8">
-<tr>
- <th>Covers</th>
- <th>Doc covers</th>
-</tr>
-<tr>
- <td><a href="docprocessing.html#COVERTITLE">COVERTITLE</a></td>
- <td><a href="docprocessing.html#COVERTITLE">DOC_COVERTITLE</a></td>
-</tr>
-<tr>
- <td><a href="cover.html#COVER_ADVANCE">COVER_ADVANCE</a></td>
- <td><a href="cover.html#COVER_ADVANCE">DOC_COVER_ADVANCE</a></td>
-</tr>
-<tr>
- <td><a href="cover.html#COVER_FAMILY">COVER_FAMILY</a></td>
- <td><a href="cover.html#COVER_FAMILY">DOC_COVER_FAMILY</a></td>
-</tr>
-<tr>
- <td><a href="cover.html#COVER_LEAD">COVER_LEAD</a></td>
- <td><a href="cover.html#COVER_LEAD">DOC_COVER_LEAD</a></td>
-</tr>
-</table>
-
-<a name="49"><h3 align="center">Part-by-part control of covers and doc covers</h3></a>
-
-<p align="center">
-For part-by-part control of the family, font, size and color, please
-see
-
-<table align="center" valign="center" border=1 cellpadding="8">
- <tr>
- <td align="center"><a href="cover.html#COVER_CONTROL">Control macros--changing the defaults for covers and document covers</a></td>
- </tr>
- <tr>
- <td align="center"><a href="cover.html#COVER_CONTROL_INDEX">Index of cover and doc cover control macros</a></td>
- </tr>
-</table>
-
-<a name="50"><h3 align="center">Miscellaneous</h3></a>
-
-<table align="center" valign="center" border=1 cellpadding="10">
-<tr>
- <th>Output a blank page</th>
- <th>Collate multiple
- <br>documents</th>
- <th>Get leading back
- <br>on track</th>
-</tr>
-<tr align="center">
- <td><a href="docelement.html#BLANK_PAGE">BLANKPAGE</a></td>
- <td><a href="rectoverso.html#COLLATE">COLLATE</a></td>
- <td><a href="docprocessing.html#SHIM">SHIM</a></td>
-</tr>
-</table>
-
-<br>
-<hr>
-
-<a href="appendices.html#MOREDOC">Next</a>&nbsp;&nbsp;
-<a href="typemacdoc.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a></td>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/rectoverso.html b/contrib/groff/contrib/mom/momdoc/rectoverso.html
deleted file mode 100644
index 064490379e61..000000000000
--- a/contrib/groff/contrib/mom/momdoc/rectoverso.html
+++ /dev/null
@@ -1,253 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Document Processing, Recto/verso printing</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="cover.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="headfootpage.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="INDEX_RECTOVERSO"></a>
-<a name="RECTOVERSO">
- <h1 align="center"><u>RECTO/VERSO PRINTING and COLLATING</u></h1>
-</a>
-
-<ul>
- <li><a href="#RECTOVERSO_INTRO">Introduction to recto/verso</a>
- <ul>
- <li><a href="#RECTOVERSO_LIST">Macro list</a>
- </ul>
- <li><a href="#COLLATE_INTRO">Introduction to collating</a>
- <ul>
- <li><a href="#COLLATE">The COLLATE macro</a>
- </ul>
-</ul>
-
-<a name="RECTOVERSO_INTRO">
- <h2><u>Introduction to recto/verso</u></h2>
-</a>
-
-Recto/verso printing allows you to set up a <strong>mom</strong>
-document in such a way that it can be printed on both sides of a
-printer sheet and subsequently bound.
-<p>
-With recto/verso, <strong>mom</strong> automatically takes control
-of the following aspects of alternating page layout:
-<br>
-<ul>
- <li>switching left and right margins (if they're not equal)
- <li>switching the left and right parts of the default 3-part
- <a href="definitions.html#TERMS_HEADER">headers</a>
- or
- <a href="definitions.html#TERMS_FOOTER">footers</a>
- (see the
- <a href="headfootpage.html#DESCRIPTION_GENERAL">General description of headers</a>)
- <li>switching
- <a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_RECTO</a>
- and
- <a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_VERSO</a>
- if user-defined, single string recto/verso headers
- or footers are used in place of the default 3-part
- headers or footers
- <li>switching the page number position (if page numbers are not centred)
-</ul>
-<p>
-It is beyond the scope of this documentation to cover the different
-ways in which you can make your printer print on both sides of a sheet.
-A simple but effective method for those of us with &quot;dumb&quot;
-printers is to open the document (after it's been processed into
-PostScript by groff -- see
-<a href="using.html#USING_INVOKING">How to invoke groff with mom</a>)
-in <strong>gv</strong> (ghostview),
-click the &quot;odd pages&quot; icon, then click &quot;Print
-Marked&quot;. After printing is complete, rearrange the sheets
-appropriately, put them back in your printer, and have
-<strong>gv</strong> print the &quot;even pages&quot;. If you prefer to
-work from the command line, check out the man pages for
-<strong>pstops</strong> and <strong>psbook</strong>. There are other
-programs out there as well to help with two-sided printing.
-<p>
-
-<a name="RECTOVERSO_LIST">
- <h3><u>Recto/verso macros list</u></h3>
-</a>
-
-<ul>
- <li><a href="#RECTO_VERSO">RECTO_VERSO</a>
- <li><a href="#SWITCH_HDRFTR">SWITCH_HEADERS (also FOOTERS)</a>
-</ul>
-<p>
-
-<hr>
-<!---RECTO_VERSO--->
-
-<a name="RECTO_VERSO">
- <h3><u>Recto/verso printing</u></h3>
-</a>
-Macro: <strong>RECTO_VERSO</strong>
-
-<p>
-If you want <strong>mom</strong> to set up alternating pages for
-recto/verso printing, simply invoke <strong>RECTO_VERSO</strong>
-with no argument.
-<p>
-<strong>NOTE:</strong>
-<br>
-Recto/verso always switches the left and right parts of
-<a href="definitions.html#TERMS_HEADER">headers</a>
-or
-<a href="definitions.html#TERMS_FOOTER">footers</a>
-on odd/even pages. However, it only switches the left and right
-margins if the margins aren't equal. Consequently, it is your
-responsibility to set the appropriate differing left and right
-margins with
-<a href="typesetting.html#L_MARGIN">L_MARGIN</a>
-and
-<a href="typesetting.html#R_MARGIN">R_MARGIN</a>
-(prior to
-<a href="docprocessing.html#START">START</a>)
-or with
-<a href="docprocessing.html#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
-and
-<a href="docprocessing.html#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
-(before or after <strong>START</strong>).
-<p>
-Equally, recto/verso only switches the page number position if page
-numbers aren't centred, which means you have to set the page
-number position with
-<a href="headfootpage.html#PAGENUM_POS">PAGENUM_POS</a>
-(before or after <strong>START</strong>).
-<p>
-
-<!---SWITCH_HDRFTR--->
-
-<hr width="66%" align="left">
-<a name="SWITCH_HDRFTR">
- <h3><u>Switch header left part/right part</u></h3>
-</a>
-Macro: <strong>SWITCH_HEADERS</strong>
-
-<p>
-<strong>SWITCH_HEADERS</strong> switches the location of the
-header left string (by default, the author) and the header right
-string (by default, the document title). If you don't like
-<strong>mom</strong>'s default placement of author and title, use
-<strong>SWITCH_HEADERS</strong> to reverse it.
-<p>
-<strong>SWITCH_HEADERS</strong> can also be useful in conjunction
-with
-<a href="#RECTO_VERSO">RECTO_VERSO</a>.
-The assumption of <strong>RECTO_VERSO</strong> is that the first
-page of a document (recto/odd) represents the norm for header-left
-and header-right, meaning that the second (and all subsequent even)
-page(s) of the document exchange header-left and header-right.
-<p>
-If <strong>mom</strong>'s behaviour in this matter is not what
-you want, simply invoke <strong>SWITCH_HEADERS</strong> on the
-first page of your recto/verso document to reverse her default
-treatment of header parts. The remainder of your document (with
-respect to headers) will come out as you want.
-<p>
-<strong>NOTE:</strong> Replace <strong>_HEADERS</strong>, above,
-with <strong>_FOOTERS</strong> if your document uses footers.
-<p>
-<hr>
-
-<!=====================================================================>
-
-<a name="COLLATE_INTRO">
- <h2><u>Introduction to collating</u></h2>
-</a>
-
-The macro <strong>COLLATE</strong> lets you join documents together.
-Primarily, it's a convenience for printing long documents that
-comprise several chapters, although it could be used for any
-document type (except <strong>LETTER</strong>).
-<p>
-Personally, I prefer to keep chapters in separate files and print
-them out as needed. However, that means keeping track of the correct
-starting page number for each chapter, a problem circumvented by the
-use of <strong>COLLATE</strong>.
-<p>
-When collating chapters, you need only put <code>.COLLATE</code>
-at the end of a chapter, follow it with any
-<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>
-needed for the new chapter, e.g.
-<a href="docprocessing.html#CHAPTER">CHAPTER</a>
-or
-<a href="docprocessing.html#CHAPTER_STRING">CHAPTER_STRING</a>
-(have a look at the
-<a href="#CHAPTER_NOTE">Special Note on CHAPTER</a>)
-make any pertinent style changes to the document (unlikely, but
-possible), and re-invoke the
-<a href="docprocessing.html#START">START</a>
-macro. Your new chapter will begin on a fresh page and behave
-as expected.
-<p>
-<strong>COLLATE</strong> assumes you are collating documents/files
-with similar type-style parameters hence there's no need for
-<strong>PRINTSTYLE</strong> to appear after <strong>COLLATE</strong>,
-although if you're collating documents that were created as separate
-files, chances are the <strong>PRINTSTYLE</strong>'s already there.
-<p>
-<a name="CAUTION"></a>
-<strong><u>Two words of caution:</u></strong>
-<ol>
- <li>Do not collate documents of differing
- <strong>PRINTSTYLES</strong> (i.e. don't try to
- collate a TYPESET document and TYPEWRITE document).
- <li>Use <strong>DOC_FAMILY</strong> instead of
- <strong>FAMILY</strong> if, for some reason, you want
- to change the family of all the document elements after
- <strong>COLLATE</strong>. <strong>FAMILY</strong>, by
- itself, will change the family of paragraph text only.
-</ol>
-<p>
-
-<!---COLLATE--->
-
-<hr width="66%" align="left">
-<a name="COLLATE">
- <h3><u>Collate document files</u></h3>
-</a>
-
-Macro: <strong>COLLATE</strong>
-
-<p>
-The most basic (and most likely) collating situation looks like
-this:
-<p>
-<pre>
- .COLLATE
- .CHAPTER 17
- .START
-</pre>
-
-A slightly more complex version of the same thing, for chapters
-that require their own titles, looks like this:
-<p>
-<pre>
- .COLLATE
- .CHAPTER_TITLE "Geek Fatigue: Symptoms and Causes"
- .START
-</pre>
-
-<strong>NOTE:</strong> See the
-<a href="#CAUTION">two words of caution</a>,
-above.
-<p>
-
-<hr>
-<a href="cover.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="headfootpage.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/refer.html b/contrib/groff/contrib/mom/momdoc/refer.html
deleted file mode 100644
index bda1e4bca48e..000000000000
--- a/contrib/groff/contrib/mom/momdoc/refer.html
+++ /dev/null
@@ -1,1482 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Bibliographies and References</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="letters.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="cover.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-<a name="TOP"></a>
-<h1 align="center">
- <a name="REF_INTRO"><u>Bibliographies and references</u></a>
-</h1>
-<p>
-<a href="#INTRO_REF">Introduction to bibliographies and references</a>
-<br>
-<a href="#TUTORIAL_REF">Tutorial</a>
-<ul>
- <li><a href="#DB_REF">Creating a refer database</a>
- <li><a href="#RCOMMANDS_REF">Required "refer" commands</a>
- <li><a href="#ACCESSING_REF">Accessing references</a>
- <li><a href="#WHERE_REF">Telling mom where to put references</a>
- <li><a href="#BIBLIO_REF">Creating bibliography pages</a>
- <li><a href="#INVOKING_REF">Invoking groff with mom and refer</a>
-</ul>
-<br>
-<a href="#MACROS_REF">Index of bibliography and reference macros</a>
-<p>
-
-<a name="INTRO_REF">
- <h2><u>Introduction to bibliographies and references</u></h2>
-</a>
-
-<strong>Mom</strong> provides the ability to automatically format
-and generate bibliography pages, as well as footnote or endnote
-bibliographic references, or references embedded in text. She
-accomplishes this by working in conjunction with a special
-<strong>groff</strong> program called "refer".
-<p>
-<strong>refer</strong> is a <strong>groff</strong>
-"pre-processor", which is to say that it scans your files looking
-for very specific commands (i.e. lines that begin with a period
-[dot], just like macros and document element tags). If the
-commands aren't there, <strong>refer</strong> can't do it's job,
-and neither can <strong>mom</strong>. The scanning is done
-<strong>before</strong> any actual <strong>mom</strong> processing
-occurs.
-<p>
-<strong>refer</strong> is a program that's been around for a long
-time. It's powerful and has many, many features. Unfortunately,
-the manpage (<kbd>man refer</kbd>), while complete and accurate, is
-dense and not a good introduction to <strong>refer</strong>. (It's
-a classic manpage Catch-22: the information it contains is most
-useful only after you already grasp it.)
-<p>
-In order to get <strong>mom</strong> users up and running with
-<strong>refer</strong>, this section of <strong>mom</strong>'s
-documentation focuses exclusively, in a recipe-like manner, on
-what you need to know to use <strong>refer</strong> satisfactorily
-in conjunction with <strong>mom</strong>. The information and
-instructions are <strong><em><u>not</u></em></strong> to be taken as
-a manual or tutorial on full <strong>refer</strong> usage. Much has
-been left out, on purpose.
-<p>
-It is tempting to provide two levels of documentation, one for
-users familiar with <strong>refer</strong> and one for newcomers
-to <strong>groff</strong> and <strong>mom</strong>, but such an
-approach may muddy the waters for newcomers. <strong>Mom</strong>'s
-allegiance, first and foremost, is to newcomers. If you're already
-a <strong>refer</strong> user, the information herein will be useful
-for adapting your current <strong>refer</strong> usage to
-<strong>mom</strong>'s way of doing things. If you've never used
-<strong>refer</strong>, the information is essential, and, in many
-cases, may be all you need.
-<p>
-(For the benefit of old groff-hands: <strong>refer</strong>
-support in <strong>mom</strong> is heavily based on the
-<strong>refer</strong> module of the ms macros. The choice
-was deliberate so that those wishing to play around with
-<strong>mom</strong>'s bibliography formatting style would be
-tinkering with the familiar.)
-<p>
-<strong>refer</strong> requires first that you create a
-bibliographic database. From the information contained in the
-database, <strong>mom</strong> formats and generates bibliographies
-and references in MLA (Modern Language Association) style. MLA
-style is clean, contemporary and flexible, and is widely used in
-the humanities, where the range of material that has to be
-referenced can run from simple books to live interviews and film.
-<p>
-Once you have created your database, you instruct
-<strong>refer</strong> (and <strong>mom</strong>) to access entries
-in it by supplying keywords from the entries. Depending on what
-you've instructed <strong>mom</strong> to do, she will put the
-entries--fully and properly formatted with respect to order, punctuation
-and italicization--in footnotes, endnotes, or a full bibliography.
-<p>
-I encourage anyone interested in what MLA style looks like--and, by
-extension, how your bibliographies and references will look after
-<strong>mom</strong> formats them--to check out
-<p>
-<pre>
- http://www.aresearchguide.com/12biblio.html
-</pre>
-
-or any other website or reference book on MLA style.
-<p>
-<strong>NOTE:</strong> MLA style requires that second and
-subsequent lines of individual references be indented. <strong>Mom</strong>
-takes care of this for you with a default indent, which
-can be changed with the macro
-<a href="#INDENT_REFS">INDENT_REFS</a>.
-
-
-<a name="TUTORIAL_REF"><h2><u>Tutorial</u></h2></a>
-
-<ol>
- <li><a href="#DB_REF">Creating a refer database</a>
- <li><a href="#RCOMMANDS_REF">Required "refer" commands</a>
- <li><a href="#ACCESSING_REF">Accessing references</a>
- <li><a href="#WHERE_REF">Telling mom where to put references</a>
- <li><a href="#BIBLIO_REF">Creating bibliography pages</a>
- <li><a href="#INVOKING_REF">Invoking groff with mom and refer</a>
-</ol>
-<p>
-
-<a name="DB_REF"><h3><u>1. Creating a refer database</u></h3><a>
-<p>
-The first step in using <strong>refer</strong> with
-<strong>mom</strong> is setting up your bibliographic database.
-The database is a file containing separate entries for each
-reference you want to access from your <strong>mom</strong> files.
-The file is <em>not</em> a "mom" file; it is a separate database.
-You may set up individual databases for individual documents, or
-create a large database that contains all the references you'll
-ever need.
-<p>
-Entries ("records") in the database file are separated from each
-other by a single, blank line. The records themselves are composed
-of single lines ("fields") with no blank lines between them. Each
-field begins with a percent sign and a single letter (the "field
-identifier") e.g. %A or %T. The letter identifies what part of a
-bibliographic entry the field refers to: Author, Title, Publisher,
-Date, etc. After the field identifier comes a single space,
-followed by the information appropriate to field. No punctuation
-should go at the ends of fields; <strong>mom</strong> adds what's
-correct automatically. Do note, however, that author(s) (%A)
-requires that you enter the author information exactly as you wish
-it to come out (minus the period), including the comma after the
-first author's last name.
-<p>
-Here's a sample database containing two records so you can
-visualize what the above paragraph says:
-<p>
-<pre>
-%A Schweitzer, Albert
-%A C.M. Widor
-%T J.S. Bach
-%l Ernest Newman
-%V Vol 2
-%C London
-%I Adam and Charles Black
-%D 1923
-%O 2 vols
-%K bach vol 2
-
-%A Schaffter, Peter
-%T The Schumann Proof
-%C Toronto
-%I RendezVous Press
-%D 2004
-%K schumann schaffter
-</pre>
-
-The order in which you enter fields doesn't matter.
-<strong>mom</strong> and <strong>refer</strong> will re-arrange
-them in the correct order for you.
-<p>
-The meaning of the letters follows. There are, with
-<strong>refer</strong>, quite a few--all uppercase--which have, over
-time, come to be "standard". <strong>Mom</strong> respects these.
-However, she adds to the list (mostly the lowercase letters).
-<p>
-<pre>
- %A Author -- additional authors may be entered on separate %A
- lines as in first entry of the sample, above; mom
- and refer will figure out what to do with multiple
- authors according to MLA rules
- %T Title -- either the primary title (e.g. of a book), or the
- title of an article (e.g. within a book or
- journal or magazine)
- %B Book title -- the title of a book when %T contains the title
- of an article; otherwise, use %T for book
- titles
- %R Report number -- for technical reports
- %J Journal name -- the name of a journal or magazine when %T
- contains the title of an article
- %E Editor -- additional editors may be entered on separate %E
- lines (like authors); mom and refer will figure
- out what to do with them according to MLA rules
- %e Edition -- the number of name of a specific edition
- (e.g. Second, 2nd, Collector's, etc.)
- %V Volume -- volume number of a journal or series of books
- %N Journal number -- journal or magazine number
- %S Series -- series name for books or journals that are part of
- a series
- %C City -- the city of publication
- %I Publisher -- the publisher; %I stands for "Issuer"
- %D Publication date
- %P Page number(s) -- enter page ranges as, e.g., 22-25
- %G Gov't.
- ordering number -- for government publications
- %O Other -- additional information or comments you want
- to appear at the end of the reference
- %K Keywords -- any words that will clear up ambiguities
- resulting from database entries that
- contain, say, the same author or the
- same title
- %d original
- publication date -- if different from the date
- of publication
- %a additions -- for books, any additions to the original work,
- such as the preface to a new edition or a new
- introduction
- %t reprint title -- if different from a work's original title
- %l translator -- if the translator is not the editor; if more
- than one translator, this field should contain
- all the names, with appropriate punctuation
- %r translator
- and editor -- if tr. and ed. are one in the same;
- %s site name -- for web sites, the site name
- %c content
- of site -- for web sites, the content, if unclear
- (i.e. advertisement, cartoon, blog)
- %o organization -- for web sites, the organization, group or
- sponsor of the site
- %a access date -- for a website, the date you accessed it
- %u URL -- for websites, the full URL of the site
-</pre>
-
-<a name="REF_DISC_HY"></a>
-<strong>Tip:</strong> If you have hyphenation turned on in your
-document (you probably do), <strong>mom</strong> will hyphenate
-your references. This can be a problem because references
-typically contain several proper names. Proper names shouldn't be
-hyphenated. The solution is to prepend to any proper name in the
-database the <strong>groff</strong>
-<a href="definitions.html#TERMS_DISCRETIONARYHYPHEN">discretionary hyphen</a>
-character, <strong>\%</strong>, like this:
-<p>
-<pre>
- %A Hill, \%Reginald
-</pre>
-
-Alternatively, you can turn hyphenation off entirely in
-references with the macro,
-<a href="#HYPHENATE_REFS">HYPHENATE_REFS</a> <kbd>OFF</kbd>.
-<p>
-
-<a name="RCOMMANDS_REF"><h3><u>2. Required "refer" commands</u></h3><a>
-<p>
-Having set up your database, you now need to put some
-<strong>refer</strong>-specific commands at the top of your
-<strong>mom</strong> file. You cannot skip this step, nor can you
-"source" these commands with the <strong>groff</strong>
-<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>,
-<strong>.so</strong>. They <strong><em>must</em></strong>
-appear, exactly as shown, in every file requiring bibliographic
-references.
-<p>
-<strong>refer</strong> commands are introduced with a single
-line containing <kbd>.R1</kbd>, and concluded with a single line
-containing <kbd>.R2</kbd>. What you put between the <kbd>.R1</kbd>
-and <kbd>.R2</kbd> lines are the commands themselves. The commands
-should be entered one per line, in lowercase letters, <em><u>with
-no initial period (dot)</u></em>.
-<p>
-Here's an example:
-<p>
-<pre>
- .R1
- no-label-in-text
- no-label-in-reference
- .R2
-</pre>
-
-There are an awful lot of <strong>refer</strong> commands. We will
-focus only on those required to get <strong>mom</strong> cooperating
-with <strong>refer</strong>. If you're interested, study the
-<strong>refer</strong> manpage to discover what other commands are
-available and how to manipulate them.
-<p>
-At a minimum, all <strong>mom</strong> files accessing
-a bibliographic database must contain the following
-<strong>refer</strong> commands, exactly as shown:
-<p>
-<a name="REFER_BLOCK1"></a>
-<pre>
-.R1
-no-label-in-text
-no-label-in-reference
-join-authors ", and " ", " ", and "
-database &lt;full path to the database&gt;
-.R2
-</pre>
-
-The first two commands tell <strong>refer</strong> to let
-<strong>mom</strong> handle everything associated with footnote
-and endnote markers, both in the body of the document, and in the
-footnotes/endnotes themselves.
-<p>
-The third command is required for <strong>mom</strong> to handle
-multiple authors in proper, MLA style.
-<p>
-The last command, <kbd>database</kbd>, assumes you have created
-your own database, and do not otherwise have a system-wide
-"default" database. "...full path to the database" means the full
-path <em>including</em> the database filename, e.g.
-/home/user/refer/my_database.
-<p> If you're already a <strong>refer</strong> user, feel free to
-enter whatever <strong>refer</strong> commands are necessary to
-access the database(s) you want.
-<p>
-With the above <strong>refer</strong> block, you can embed
-references directly into the text of your document, or have them
-output as footnotes or endnotes. If you want to "collect"
-references for later output on a bibliography page, the block must
-read:
-<p>
-<pre>
-.R1
-no-label-in-text
-no-label-in-reference
-join-authors ", and " ", " ", and "
-database &lt;full path to the database&gt;
-sort
-accumulate
-.R2
-</pre>
-
-<a name="ACCESSING_REF"><h3><u>3. Accessing references</u></h3><a>
-<p>
-References are accessed by putting keywords, all on one line,
-between the <strong>refer</strong> commands <strong>.[</strong> and
-<strong>.]</strong>. Both of these commands must appear on separate
-lines, by themselves, like this:
-<p>
-<pre>
- .[
- keyword(s)
- .]
-</pre>
-
-Keywords are any word, or set of words, that identify a database
-record (i.e. a reference) unambiguously. (<strong>refer</strong>
-doesn't like ambiguity.)
-<p>
-If, for example, you want to reference a book by Ray Bradbury,
-and the database contains only one book by Bradbury, a suitable
-keyword would be "Bradbury". If your database contains several
-books by Bradbury, say, <em>Fahrenheit 451</em> and <em>The Martian
-Chronicles</em>, you could reference them with the keywords, "451"
-and "Martian". If, in addition to the two books by Bradbury, you
-also had one whose title was <em>The Martian Mission</em>, suitable
-keywords to reference <em>The Martian Chronicles</em> might be:
-<p>
-<pre>
- .[ or .[ or .[
- Bradbury Martian Bradbury Chronicles Martian Chronicles
- .] .] .]
-</pre>
-
-The database field identifier, %K, lets you create special keywords
-for references. This can be very handy if you need both a "short"
-and a "long" reference to the same work. The short reference might
-be used in footnotes; the long one in a bibliography. Consider the
-following:
-<p>
-<pre>
- %A Isherwood, Christopher %A Isherwood
- %T Mr. Norris Changes Trains %T Mr. Norris Changes Trains
- %d 1935 %K Nor short
- %t The Last of Mr. \%Norris
- %a Intro. Tom Crawford
- %C New York
- %I New Directions
- %D 1945
- %K Norris
-
-</pre>
-
-To access the shorter reference, you'd do
-<p>
-<pre>
- .[
- Nor short
- .]
-</pre>
-
-To access the longer one, you'd do
-<pre>
- .[
- Norris
- .]
-</pre>
-
-<a name="WHERE_REF"><h3><u>4. Telling mom where to put references</u></h3><a>
-<p>
-<strong>Mom</strong> provides several mechanisms for outputting
-references where you want.
-<p>
-<h3>Embedding references in the document body</h3>
-<p>
-References may be embedded in the document body, surrounded by
-parentheses, square brackets, or braces. Use whichever you prefer,
-following the recipes below.
-<p>
-<pre>
- Parentheses Square brackets Braces
- ----------- --------------- ------
-
- .REF( .REF[ .REF{
- .[ .[ .[
- keyword(s) keyword(s) keyword(s)
- .] .] .]
- .REF) .REF] .REF}
-</pre>
-
-<h3>Footnote or endnote references</h3>
-<p>
-Most times, you'll probably want references in either footnotes or
-endnotes. <strong>Mom</strong> provides a simple mechanism whereby
-you can choose which, or even switch back and forth. The primary
-tag is
-<a href="#REF">REF</a>, which is used like this:
-<p>
-<pre>
- .REF
- .[
- keyword(s)
- .]
- .REF
-</pre>
-
-<strong>REF</strong> collects references and outputs them
-where you say with the macros,
-<a href="#FOOTNOTE_REFS">FOOTNOTE_REFS</a>
-or
-<a href="#ENDNOTE_REFS">ENDNOTE_REFS</a>.
-Neither
-<strong>FOOTNOTE_REFS</strong> nor <strong>ENDNOTE_REFS</strong>
-requires an argument. All they do is tell <strong>REF</strong>,
-whenever it's invoked, where to put the references.
-<p>
-A recipe for footnote references looks like this:
-<pre>
- .FOOTNOTE_REFS
- .REF
- .[
- keyword(s)
- .]
- .REF
-</pre>
-
-When <strong>FOOTNOTE_REFS</strong> are enabled, <strong>REF</strong>
-behaves identically to
-<a href="docelement.html#FOOTNOTE">FOOTNOTE</a>,
-so please read the
-<a href="docelement.html#FOOTNOTE_NOTE">HYPER IMPORTANT NOTE</a>
-found in the document entry for <strong>FOOTNOTE</strong>.
-<p>
-The reference between the first and second <strong>REF</strong>
-will be treated as a footnote, as will all subsequent
-<strong>REF</strong> pairs unless you invoke the macro,
-<strong>ENDNOTE_REFS</strong>.
-<p>
-A recipe for endnote references looks like this:
-<pre>
- .ENDNOTE_REFS
- .REF
- .[
- keyword(s)
- .]
- .REF
-</pre>
-
-The reference between the first and second <strong>REF</strong>
-will be treated as an endnote, as will all subsequent
-<strong>REF</strong> pairs unless you invoke the macro,
-<strong>FOOTNOTE_REFS</strong>.
-<p>
-When <strong>ENDNOTE_REFS</strong> are enabled, <strong>REF</strong>
-behaves identically to
-<a href="docelement.html#FOOTNOTE">ENDNOTE</a>,
-so please read the
-<a href="docelement.html#ENDNOTE_NOTE">HYPER IMPORTANT NOTE</a>
-found in the document entry for <strong>ENDNOTE</strong>.
-<p>
-The innate flexibility of this scheme allows you to have both
-footnote references and endnote references in the same document.
-This would be desirable if, say, you wanted "short" references in
-footnotes, and complete references in endnotes.
-<p>
-
-<a name="COLLECTED_REF"><h3>Collected references</h3></a>
-<p>
-Sometimes, you may want to put references in input text near
-sections of text to which they pertain, but not actually want
-them output until later (typically, on a bibliography page).
-<strong>REF</strong> is used for this, too, but you have to make
-sure your <strong>refer</strong> commands block is set up properly.
-The recipe for this is:
-<p>
-<a name="REFER_BLOCK2"></a>
-<pre>
-.R1
-no-label-in-text
-no-label-in-reference
-join-authors ", and " ", " ", and "
-database &lt;full path to the database&gt;
-sort
-accumulate
-.R2
-</pre>
-
-After this set up, and provided you don't issue a
-<strong>FOOTNOTE_REFS</strong> or <strong>ENDNOTE_REFS</strong>
-command, all reference between <strong>REF</strong> pairs will be
-collected for later output.
-<p>
-As a precaution, <strong>mom</strong> will issue a message the
-first time you call <strong>.REF</strong> if neither
-<strong>FOOTNOTE_REFS</strong> nor <strong>ENDNOTE_REFS</strong> is
-in effect. If collected references are what you want, and you have
-set up your <strong>.R1 - .R2</strong> block as above, you may
-safely ignore the message.
-<p>
-<strong>LIMITATION:</strong> You cannot combine "collected"
-references (plain <strong>REF</strong>) with <strong>REF</strong>s
-that are instructed to go into footnotes (with
-<strong>FOOTNOTE_REFS</strong>) or endnotes (with
-<strong>ENDNOTE_REFS</strong>). This is a limitation imposed by
-<strong>refer</strong>, not <strong>mom</strong>.
-
-<a name="BIBLIO_REF"><h3><u>5. Creating bibliography pages</u></h3><a>
-<p>
-Bibliography pages are separate pages, like endnotes, on which
-complete bibliographies are output. And, like endnotes pages, just
-about every element on them can be designed to your specifications
-with control macros. (See
-<a href="#BIBLIO_CONTROL_MACROS">Control macros for bibliographies</a>.)
-A bibliography page that uses <strong>mom</strong>'s defaults
-begins with the macro,
-<a href="BIBLIOGRAPHY">BIBLIOGRAPHY</a>,
-like this:
-<p>
-<pre>
- .BIBLIOGRAPHY
-</pre>
-
-<p>
-Following <strong>BIBLIOGRAPHY</strong>, you have three choices of
-how to proceed.
-<p>
-If you have elected to have references collected from within the
-body of a document (see above,
-<a href="#COLLECTED_REF">Collected references</a>,
-for instructions), which assumes you have a <strong>refer</strong>
-command block like the one
-<a href="#REFER_BLOCK2">here</a>
-at the top of your document, you need only do
-<p>
-<pre>
- .BIBLIOGRAPHY
- .[
- $LIST$
- .]
-</pre>
-
-If you want to create the bibliography by hand (which may be the
-case if you've used footnote and/or endnote references throughout
-your document), follow this recipe, which assumes you already have a
-<strong>refer</strong> block like the one
-<a href="#REFER_BLOCK1">here</a>
-at the top of your document:
-<p>
-<pre>
- .BIBLIOGRAPHY
- .R1
- sort
- accumulate
- .R2
- .[ -+
- keyword(s) |
- .] | "keyword(s)" are keywords identifying the
- .[ | particular bibliographic reference you want
- keyword(s) | from your database. Order doesn't matter here;
- .] | the refer command, sort, takes care of that.
- .[ |
- keyword(s) |
- .] -+
- .[
- $LIST$
- .]
-</pre>
-
-Your final choice is to output your whole database. Again,
-assuming you have a <strong>refer</strong> block like the one
-<a href="#REFER_BLOCK1">here</a> at the top of your file, you need
-only do:
-<p>
-<pre>
- .BIBLIOGRAPHY
- .R1
- bibliography &lt;full path to database&gt;
- .R2
-</pre>
-
-If you haven't put a <strong>refer</strong> block in
-your file already, you can put the whole thing after
-<strong>BIBLIOGRAPHY</strong>, like this:
-<p>
-<pre>
- .BIBLIOGRAPHY
- .R1
- no-label-in-text -+
- no-label-in-reference | These are actually optional
- database &lt;full path to the database&gt; -+
- join-authors ", and " ", " ", and "
- bibliography &lt;full path to database&gt;
- .R2
-</pre>
-
-Whichever option you choose, <strong>mom</strong> will output a
-full bibliography page, complete with a title (BIBLIOGRAPHY by
-default, but that can be changed).
-
-<a name="INVOKING_REF"><h3><u>6. Invoking groff with mom and refer</u></h3><a>
-<p>
-So, now you've got a document, formatted properly to use
-references processed with <strong>refer</strong>, what do you do to
-output the document?
-<p>
-It's simple. Instead of invoking <strong>groff</strong> with just
-the -mom option, as explained
-<a href="using.html#USING_INVOKING">here</a>,
-invoke groff with the -R option as well, like this:
-<p>
-<pre>
- groff -R -mom filename
-</pre>
-
-<hr width="66%">
-
-<p>
-<a name="MACROS_REF"><h3><u>Index of bibliography and reference macros</u></h3></a>
-<ul>
- <li><a href="#REF">Tag: REF</a> -- collected, footnote or endnote references tag
- <li><a href="#FOOTNOTE_REFS">FOOTNOTE_REFS</a> -- REFs go to footnotes
- <li><a href="#ENDNOTE_REFS">ENDNOTE_REFS</a> -- REFs go to endnotes
- <li><a href="#BRACKET_REFS">REF(</a> -- references embedded in text between parentheses
- <li><a href="#BRACKET_REFS">REF[</a> -- references embedded in text between square brackets
- <li><a href="#BRACKET_REFS">REF{</a> -- references embedded in text between braces
- <li><a href="#INDENT_REFS">INDENT_REFS</a> -- manage the 2nd line indent of references
- <li><a href="#HYPHENATE_REFS">HYPHENATE_REFS</a> -- en/disable hyphenation of references
- <li><a href="#BIBLIOGRAPHY">BIBLIOGRAPHY</a> -- begin a bibliography page
- <li><a href="#BIBLIOGRAPHY_TYPE">BIBLIOGRAPHY_TYPE</a> -- plain, or numbered list bibliography
- <li><a href="#BIBLIO_CONTROL">Bibliography page style control</a>
-</ul>
-<p>
-
-<!---REF--->
-
-<hr width="66%" align="left">
-<a name="REF"><h3><u>Marking off references for footnotes, endnotes, or collection</u></h3></a>
-<p>
-
-Tag: <strong>REF</strong>
-<p>
-The macro, <strong>REF</strong>, tells <strong>mom</strong> that
-what follows is <strong>refer</strong>-specific, a
-keyword-identified reference from a
-<strong>refer</strong> database. Depending on whether you've
-issued a
-<a href="#FOOTNOTE_REFS">FOOTNOTE_REFS</a>
-or
-<a href="#ENDNOTE_REFS">ENDNOTE_REFS</a>
-instruction, <strong>REF</strong> also tells <strong>mom</strong>
-where to place the reference. If <strong>FOOTNOTE_REFS</strong>,
-the reference will be formatted and placed in a footnote. If
-<strong>ENDNOTE_REFS</strong>, the reference will be collected for
-output as an endnote. If you have issued neither instruction, the
-reference will be collected for later output, most likely on a
-<a href="#BIBLIOGRAPHY">bibliography page</a>.
-<p>
-Before you use <strong>REF</strong>, you must create a
-<strong>refer</strong> block containing <strong>refer</strong>
-commands (see
-<a href="#RCOMMANDS_REF">Required refer commands</a>
-in the tutorial, above).
-<p>
-<strong>REF</strong> usage always looks like this:
-<p>
-<pre>
- .REF
- .[
- keyword(s)
- .]
- .REF
-</pre>
-
-Notice that <strong>REF</strong> "brackets" the
-<strong>refer</strong> call, and never takes an argument.
-<p>
-What <strong>REF</strong> really is is a convenience. One could,
-for example, put a reference in a footnote by doing
-<p>
-<pre>
- .FOOTNOTE
- .[
- keyword(s)
- .]
- .FOOTNOTE OFF
-</pre>
-
-However, if you have a lot of references going into footnotes (or
-endnotes), it's much shorter to type <kbd>.REF/.REF</kbd> than
-<kbd>.FOOTNOTE/.FOOTNOTE OFF</kbd>. It also helps you
-distinguish--visually, in your input file--between footnotes (or
-endnotes) which are references, and footnotes (or endnotes) which
-are explanatory, or expand on the text.
-<p>
-<strong>Additional arguments:</strong> If you're using
-<strong>REF</strong> to put references in footnotes and your
-footnotes need to be indented, you may (indeed, should) pass
-<strong>REF</strong> the same arguments used to indent footnotes.
-See
-<a href="docelement.html#FOOTNOTE">FOOTNOTE</a>.
-<p>
-<strong>Note:</strong>
-When <strong>REF</strong> is used with
-<a href="#FOOTNOTE_REFS">FOOTNOTE_REFS</a>,
-it behaves identically to
-<a href="docelement.html#FOOTNOTE">FOOTNOTE</a>,
-so please read the
-<a href="docelement.html#FOOTNOTE_NOTE">HYPER IMPORTANT NOTE</a>
-found in the document entry for <strong>FOOTNOTE</strong>.
-<p>
-When <strong>REF</strong> is used with
-<a href="#ENDNOTE_REFS">ENDNOTE_REFS</a>,
-it behaves identically to
-<a href="docelement.html#FOOTNOTE">ENDNOTE</a>,
-so please read the
-<a href="docelement.html#ENDNOTE_NOTE">HYPER IMPORTANT NOTE</a>
-found in the document entry for <strong>ENDNOTE</strong>.
-
-<br>
-
-<!---FOOTNOTE_REFS--->
-
-<hr width="33%" align="left">
-<a name="FOOTNOTE_REFS"><h3><u>Instruct REF to put references in footnotes</u></h3></a>
-<p>
-
-Macro: <strong>FOOTNOTE_REFS</strong>
-<p>
-<strong>FOOTNOTE_REFS</strong> is an instruction to
-<a href="#REF">REF</a>,
-saying, "put all subsequent references bracketed by the
-<strong>REF</strong> macro into footnotes." You invoke it by
-itself, with no argument.
-<p>
-When <strong>FOOTNOTE_REFS</strong> is in effect, regular
-footnotes, (i.e. those introduced with <kbd>.FOOTNOTE</kbd> and
-terminated with <kbd>.FOOTNOTE OFF</kbd>) continue to behave
-normally.
-<p>
-You may switch between <strong>FOOTNOTE_REFS</strong> and
-<a href="#ENDNOTE_REFS">ENDNOTE_REFS</a>
-at any time.
-<p>
-If you have a lot of footnote references, and are identifying
-footnotes by line number rather than by markers in the text, you may
-want to enable
-<a href="docelement.html#FOOTNOTES_RUN_ON">FOOTNOTES_RUN_ON</a>
-in conjunctions with <strong>FOOTNOTE_REFS</strong>.
-
-<br>
-
-<!---ENDNOTE_REFS--->
-
-<hr width="33%" align="left">
-<a name="ENDNOTE_REFS"><h3><u>Instruct REF to put references in endnotes</u></h3></a>
-<p>
-
-Macro: <strong>ENDNOTE_REFS</strong>
-<p>
-<strong>ENDNOTE_REFS</strong> is an instruction to
-<a href="#REF">REF</a>,
-saying, "add all subsequent references bracketed by the
-<strong>REF</strong> macro to endnotes." You invoke it by
-itself, with no argument.
-<p>
-When <strong>ENDNOTE_REFS</strong> is in effect,
-<strong>mom</strong> continues to format regular endnotes, (i.e.
-those introduced with <kbd>.ENDNOTE</kbd> and terminated with
-<kbd>.ENDNOTE OFF</kbd>) in the normal way.
-<p>
-You may switch between <strong>ENDNOTE_REFS</strong> and
-<a href="#FOOTNOTE_REFS">FOOTNOTE_REFS</a>
-at any time.
-
-<br>
-
-<!---BRACKET_REFS--->
-
-<hr width="33%" align="left">
-<a name="BRACKET_REFS"><h3><u>References embedded in text</u></h3></a>
-<p>
-
-Macro pair: <strong>REF(</strong>&nbsp;&nbsp;...&nbsp;&nbsp;<strong>REF)</strong>
-<br>
-Macro pair: <strong>REF[</strong>&nbsp;&nbsp;...&nbsp;&nbsp;<strong>REF]</strong>
-<br>
-Macro pair: <strong>REF{</strong>&nbsp;&nbsp;...&nbsp;&nbsp;<strong>REF}</strong>
-<p>
-You may sometimes want to embed references directly into the body
-of your documents, typically, but not always, inside parentheses.
-<strong>Mom</strong> makes this possible through the use of the
-<strong>REF&lt;bracket&nbsp;type&gt;</strong> macros.
-<p>
-All three macro pairs, above, are invoked the same way, namely by
-introducing the reference with the first ("open") macro of
-the <strong>REF&lt;bracket&nbsp;type&gt;</strong> pair, and
-terminating it with the second ("close")
-<strong>REF&lt;bracket&nbsp;type&gt;</strong> of the pair. For
-example
-<p>
-<pre>
- .REF(
- .[
- keyword(s)
- .]
- .REF)
-</pre>
-
-will embed a reference in the body of your document, surrounded by
-parentheses. <strong>.REF[</strong>&nbsp;...&nbsp;<strong>.REF]</strong> will
-surround the reference with square brackets.
-<strong>.REF{</strong>&nbsp;...&nbsp;<strong>.REF}</strong> will surround it with
-curly braces.
-<br>
-
-<!---INDENT_REFS--->
-
-<hr width="33%" align="left">
-<a name="INDENT_REFS"><h3><u>Manage the second-line indent of references</u></h3></a>
-<p>
-
-<nobr>Macro: <strong>INDENT_REFS</strong> FOOTNOTE | ENDNOTE | BIBLIO &lt;indent&gt; </nobr>
-<br>
-<em>*&lt;indent&gt; requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-<p>
-Proper MLA-style references should have their second, and subsequent
-lines, if any, indented. Since <strong>mom</strong> formats
-references in MLA style, she automatically indents second lines.
-By default, the indent for the second line of references,
-regardless of whether the references appear in footnotes, endnotes,
-or bibliographies, is 1.5
-<a href="definitions.html#TERMS_EM">ems</a>
-for
-<a href="docprocessing.html#PRINTSTYLE">PRINSTYLE</a>
-<strong>TYPESET</strong>
-and 2 ems for
-<a href="docprocessing.html#PRINTSTYLE">PRINSTYLE</a>
-<strong>TYPEWRITE</strong>.
-<p>
-If you'd like to change the indent for footnotes, endnotes or
-bibliographies, just invoke <strong>INDENT_REFS</strong> with a
-first argument telling <strong>mom</strong> for which you want the
-indent changed, and a second argument saying what you'd like the
-indent to be. For example, if you want the second-line indent of
-references on a bibliography page to be 3
-<a href="definitions.html#TERMS_PICAS_POINTS">picas</a>,
-<p>
-<pre>
- .INDENT_REFS BIBLIO 3P
-</pre>
-
-is how you'd set it up.
-<p>
-<strong>Tip:</strong> if you are identifying endnotes by line
-number
-(<a href="docelement.html#ENDNOTE_MARKER_STYLE">ENDNOTE_MARKER_STYLE</a> <strong>LINE</strong>)
-and you have instructed <strong>mom</strong> to put references
-bracketed by
-<a href="#REF">REF</a>
-into endnotes (with
-<a href="#ENDNOTE_REFS">ENDNOTE_REFS</a>),
-you will probably want to adjust the second-line indent for
-references in endnotes, owing to the way <strong>mom</strong>
-formats line-numbered endnotes. Study the output of such
-documents to see whether an indent adjustment is required.
-<br>
-
-<!---HYPHENATE_REFS--->
-
-<hr width="33%" align="left">
-<a name="HYPHENATE_REFS"><h3><u>Enable/disable hyphenation of references</u></h3></a>
-<p>
-
-<nobr>Macro: <strong>HYPHENATE_REFS</strong> &lt;toggle&gt;</nobr>
-<p>
-If you have hyphenation turned on for a document (see <a
-href="typesetting.html#HY">HY</a>),
-and in most cases you probably do, <strong>mom</strong> will
-hyphenate references bracketed by the
-<a href="#REF">REF</a>
-macro. Since references typically contain quite a lot of proper
-names, which shouldn't be hyphenated, you may want to disable
-hyphenation for references.
-<p>
-<strong>HYPHENATE_REFS</strong> is a toggle macro;
-invoking it by itself will turn automatic hyphenation of
-<strong>REF</strong>-bracketed references on (the default).
-Invoking it with any other argument (<strong>OFF</strong>,
-<strong>NO</strong>, <strong>X</strong>, etc.) will disable
-automatic hyphenation for references bracketed by
-<strong>REF</strong>.
-<p>
-An alternative to turning reference hyphenation off is to prepend
-to selected proper names in your <strong>refer</strong> database
-the <strong>groff</strong>
-<a href="definitions.html#TERMS_DISCRETIONARYHYPHEN">discretionary hyphen</a>
-character, <strong>\%</strong>. (See
-<a href="#REF_DISC_HY">here</a>
-in the tutorial for an example.)
-<p>
-<strong>Note:</strong> references embedded in the body of a document
-with
-<a href="#BRACKET_REFS">REF</a><strong>&lt;bracket&nbsp;type&gt;</strong>
-are considered part of
-<a href="definitions.html#TERMS_RUNNING">running text</a>,
-and are hyphenated (or not) according to whether hyphenation
-is turned on or off for running text. Therefore, if you want to
-disable hyphenation for such references, you must do so
-temporarily, with <strong>HY</strong>, like this:
-<p>
-<pre>
- .HY OFF
- .REF(
- .[
- keyword(s)
- .]
- .REF)
- .HY
-</pre>
-
-Alternatively, sprinkle your database fields liberally with
-<strong>\%</strong>.
-<br>
-
-<!---BIBLIOGRAPHY--->
-
-<hr width="33%" align="left">
-<a name="BIBLIOGRAPHY"><h3><u>Begin a bibliography page</u></h3></a>
-<p>
-
-Macro: <strong>BIBLIOGRAPHY</strong>
-<br>
-<p>
-If you want to append a bibliography to your document, all you need
-do is invoke <strong>BIBLIOGRAPHY</strong> at the place you want
-it. <strong>BIBLIOGRAPHY</strong> breaks to a new page, prints the
-title (BIBLIOGRAPHY by default, but that can be changed), and awaits
-<strong>refer</strong> instructions. How to create bibliographies
-is covered in the tutorial section,
-<a href="#BIBLIO_REF">Creating bibliography pages</a>.
-<p>
-See the
-<a href="#BIBLIO_CONTROL">Bibliography page style control macros</a>
-for macros to tweak, design and control the appearance of
-bibliography pages.
-<br>
-
-<!---BIBLIOGRAPHY_TYPE--->
-
-<hr width="33%" align="left">
-<a name="BIBLIOGRAPHY_TYPE"><h3><u>Plain, or numbered list bibliography</u></h3></a>
-<p>
-
-<nobr>Macro: <strong>BIBLIOGRAPHY_TYPE</strong> PLAIN | LIST [ &lt;list separator&gt; ] [ &lt;list prefix&gt; ]</nobr>
-<p>
-<strong>Mom</strong> offers two styles of bibliography output: plain,
-or numbered list style. With <strong>PLAIN</strong>, bibliography
-entries are output with no enumerators. With <strong>LIST</strong>,
-each entry is numbered.
-<p>
-Entering <kbd>.BIBLIOGRPHY_TYPE PLAIN</kbd> gives you a plain
-bibliography.
-<p>
-Entering <kbd>.BIBLIOGRAPHY_TYPE LIST</kbd> gives you an enumerated
-bibliography. The two optional arguments,
-<strong>&lt;list&nbsp;separator&gt;</strong> and
-<strong>&lt;list&nbsp;prefix&gt;</strong> have the same meaning as
-the equivalent arguments to
-<a href="docelement.html#LIST">LIST</a>
-(i.e. <strong>&lt;separator&gt;</strong> and <strong>&lt;prefix&gt;</strong>).
-<p>
-You may enter <strong>BIBLIOGRAPHY_TYPE</strong> either before or
-after <strong>BIBLIOGRAPHY</strong>. It must, however, always come
-before the <strong>refer</strong> command to output bibliographies.
-(See the tutorial section,
-<a href="#BIBLIO_REF">Creating bibliography pages</a>,
-for instructions on how to output bibliographies.)
-<p>
-<strong>Mom</strong>'s default <strong>BIBLIOGRAPHY_TYPE</strong>
-is <strong>LIST</strong>, with a period (dot) as the separator, and
-no prefix.
-
-<br>
-
-<!---BIBLIO_CONTROL--->
-
-<hr width="66%" align="left">
-<a name="BIBLIO_CONTROL"><h3><u>Bibliography page style control</u></h3></a>
-
-<p>
-<strong>Mom</strong> processes bibliography pages in a manner very
-similar to the way she processes endnotes pages. The bibliography
-page control macros, therefore, behave in the same way as their
-endnotes pages equivalents.
-<br>
-<ol>
- <li><a href="#BIBLIO_GENERAL"><strong>General bibliography page style control</strong></a>
- <ul>
- <li><a href="#BIBLIO_STYLE">Base family/font/quad for bibliographies</a>
- <li><a href="#BIBLIO_PT_SIZE">Base point size for bibliographies</a>
- <li><a href="#BIBLIO_LEAD">Leading of bibliographies</a>
- <li><a href="#SINGLESPACE_BIBLIO">Singlespace bibliographies (for TYPEWRITE only)</a>
- <li><a href="#BIBLIO_NO_COLUMNS">Turning off column mode during bibliography output</a>
- <li>Pagination of bibliographies:
- <ul>
- <li><a href="#BIBLIO_PAGENUM_STYLE">Bibliography pages page numbering style</a>
- <li><a href="#BIBLIO_FIRST_PAGENUMBER">Setting the first page number of bibliography pages</a>
- <li><a href="#BIBLIO_NO_FIRST_PAGENUM">Omitting a page number on the first page of bibliographies</a>
- </ul>
- <li><a href="#SUSPEND_PAGINATION">Suspending pagination of bibliographies</a>
- </ul>
- <li><a href="#BIBLIO_HEADER_CONTROL"><strong>Bibliography pages header/footer control</strong></a>
- <ul>
- <li><a href="#BIBLIO_MODIFY_HDRFTR">Modifying what goes in the bibliography pages header/footer</a>
- <li><a href="#BIBLIO_HDRFTR_CENTER">Enabling a header/footer centre when doctype is CHAPTER</a>
- <li><a href="#BIBLIO_ALLOWS_HEADERS">Allow headers on bibliography pages</a>
- </ul>
- <li><a href="#BIBLIO_MAIN_TITLE"><strong>Bibliography page head (i.e. the title at the top) control</strong></a>
- <ul>
- <li><a href="#BIBLIO_STRING">Creating/modifying the bibliography page head</a>
- <li><a href="#BIBLIO_STRING_CONTROL">Bibliography page head control</a>
- <li><a href="#BIBLIO_STRING_UNDERSCORE">Bibliography page head underscoring</a>
- <li><a href="#BIBLIO_STRING_CAPS">Bibliography page head capitalization</a>
- </ul>
- </ul>
-</ol>
-<hr>
-
-<a name="BIBLIO_GENERAL"><h2><u>1. General bibliography page style control</u></h2>
-
-<a name="BIBLIO_STYLE"><h3><u>*Bibliography family/font/quad</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.BIBLIOGRAPHY_FAMILY default = prevailing document family; default is Times Roman
-.BIBLIOGRAPHY_FONT default = roman
-.BIBLIOGRAPHY_QUAD* default = justified
-
-*Note: BIBLIOGRAPHY_QUAD must be set to either L or J
-</pre>
-
-<!---BIBLIO_PT_SIZE--->
-
-<a name="BIBLIO_PT_SIZE"><h3><u>*Bibliography point size</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_PT_SIZE</strong> &lt;base type size of bibliography&gt;</nobr>
-
-<p>
-Unlike most other control macros that deal with size of document
-elements, <strong>BIBLIOGRAPHY_PT_SIZE</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument represents
-the size of bibliography type in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .BIBLIOGRAPHY_PT_SIZE 12
-</pre>
-
-sets the base point size of type on the bibliography page to 12
-points, whereas
-<p>
-<pre>
- .BIBLIOGRAPHY_PT_SIZE .6i
-</pre>
-
-sets the base point size of type on the bibliography page to 1/6 of an
-inch.
-<p>
-The type size set with <strong>BIBLIOGRAPHY_PT_SIZE</strong> is the size of
-type used for the text of the bibliographies, and forms the basis from which
-the point size of other bibliography page elements is calculated.
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is 12.5 points (the same default size used in the body of the document).
-<p>
-
-<!---BIBLIO_LEAD--->
-
-<a name="BIBLIO_LEAD"><h3><u>*Bibliography lead</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_LEAD</strong> &lt;base leading of bibliographies&gt; [ ADJUST ]</nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
-
-<p>
-Unlike most other control macros that deal with leading of document
-elements, <strong>BIBLIOGRAPHY_LEAD</strong> takes as its argument an
-absolute value, relative to nothing. Therefore, the argument represents
-the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-of endnotes in
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-unless you append an alternative
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-For example,
-<p>
-<pre>
- .BIBLIOGRAPHY_LEAD 14
-</pre>
-
-sets the base leading of type on the bibliography page to 14
-points, whereas
-<p>
-<pre>
- .BIBLIOGRAPHY_LEAD .5i
-</pre>
-
-sets the base leading of type on the bibliography page to 1/2 inch.
-<p>
-If you want the leading of bibliographies adjusted to fill the page,
-pass <strong>BIBLIOGRAPHY_LEAD</strong> the optional argument
-<strong>ADJUST</strong>. (See
-<a href="docprocessing.html#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
-for an explanation of leading adjustment.)
-<p>
-The default for
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
-is 14 points, adjusted.
-<p>
-<strong>NOTE:</strong> Even if you give <strong>mom</strong> a
-<strong>DOC_LEAD_ADJUST OFF</strong> command, she will still, by
-default, adjust bibliography leading. You MUST enter
-<strong>BIBLIOGRAPHY_LEAD &lt;lead&gt;</strong> with no
-<strong>ADJUST</strong> argument to disable this default behaviour.
-<p>
-
-<!---SINGLESPACE_BIBLIO--->
-
-<a name="SINGLESPACE_BIBLIO"><h3><u>*Singlespace bibliographies (TYPEWRITE only)</u></h3></a>
-<p>
-<nobr>Macro: <strong>SINGLESPACE_BIBLIOGRAPHY</strong> &lt;toggle&gt;</nobr>
-
-<p>
-If your
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
-is <strong>TYPEWRITE</strong> and you use TYPEWRITE's default
-double-spacing, bibliographies are double-spaced. If your document
-is single-spaced, bibliographies are single-spaced.
-<p>
-If, for some reason, you'd prefer that bibliographies be single-spaced
-in an otherwise double-spaced document (including double-spaced
-<a href="rectoverso.html#COLLATE">collated</a>
-documents), invoke <strong>SINGLESPACE_BIBLIOGRAPHY</strong> with
-with no argument.
-<p>
-
-<!---BIBLIO_SPACING--->
-
-<a name="BIBLIO_SPACING"><h3><u>*Adjusting the space between bibliography entries</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_SPACING</strong> &lt;amount of space&gt; </nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-By default, <strong>mom</strong> inserts 1 linespaces between
-bibliography entries on bibliography pages. If you'd prefer she
-add a different amount of space, instruct her to do so with the
-macro, <strong>BIBLIOGRAPHY_SPACING</strong>. Say, for example,
-you'd prefer only 1/2 linespace. That would be done with
-<p>
-<pre>
- .BIBLIOGRAPHY_SPACING .5v
-</pre>
-
-As with endnotes pages, owing to the space inserted between bibliography
-entries, bibliography pages may have hanging bottom margins.
-Unlike endnotes pages, <strong>mom</strong> is sad to report that
-there's nothing you can do about this, except a) pray things work
-out, or b) set your <strong>BIBLIOGRAPHY_SPACING</strong> to zero.
-
-<!---BIBLIO_NO_COLUMNS--->
-
-<a name="BIBLIO_NO_COLUMNS"><h3><u>*Turning off column mode during bibliography output</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_NO_COLUMNS</strong> &lt;toggle&gt;</nobr>
-
-<p>
-By default, if your document is
-<a href="columns.html#COLUMNS">set in columns</a>,
-<strong>mom</strong> sets the bibliographies in columns, too. However,
-if your document is set in columns and you'd like the bibliographies not
-to be, just invoke <strong>BIBLIOGRAPHY_NO_COLUMNS</strong> with no
-argument. The bibliography pages will be set to the full page measure
-of your document.
-<p>
-If you output bibliographies at the end of each document in a
-<a href="rectoverso.html#COLLATE">collated</a>
-document set in columns, column mode will automatically
-be reinstated for each document, even with
-<strong>BIBLIOGRAPHY_NO_COLUMNS</strong> turned on.
-<p>
-
-<!---BIBLIO_PAGENUM_STYLE--->
-
-<a name="BIBLIO_PAGENUM_STYLE"><h3><u>*Bibliography-page page numbering style</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_PAGENUM_STYLE</strong> DIGIT | ROMAN | roman | ALPHA | alpha</nobr>
-
-<p>
-Use this macro to set the page numbering style of bibliography pages.
-The arguments are identical to those for
-<a href="headfootpage.html#PAGENUM_STYLE">PAGENUM_STYLE</a>.
-The default is <strong>digit</strong>. You may want to change it
-to, say, <strong>alpha</strong>, which you would do with
-<p>
-<pre>
- .BIBLIOGRAPHY_PAGENUM_STYLE alpha
-</pre>
-
-<!---BIBLIO_FIRST_PAGENUMBER--->
-
-<a name="BIBLIO_FIRST_PAGENUMBER"><h3><u>*Setting the first page number of bibliography pages</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBILOGRAPHY_FIRST_PAGENUMBER</strong> &lt;page # that appears on page 1 of bibliographies&gt;</nobr>
-
-<p>
-Use this macro with caution. If all bibliographies for several
-<a href="rectoverso.html#COLLATE">collated</a>
-documents are to be output at once, i.e. not at the end of each
-separate doc, <strong>BIBLIOGRAPHY_FIRST_PAGENUMBER</strong> tells
-<strong>mom</strong> what page number to put on the first page of
-the bibliography.
-<p>
-If you set <strong>BIBLIOGRAPHY_FIRST_PAGENUMBER</strong> in collated
-documents where the bibliographies are output after each separate doc,
-you have to reset every separate document's first page number after
-<a href="rectoverso.html#COLLATE">COLLATE</a>
-and before
-<a href="docprocessing.html#START">START</a>.
-<p>
-
-<!---BIBLIO_NO_FIRST_PAGENUN--->
-
-<a name="BIBLIO_NO_FIRST_PAGENUM"><h3><u>*Omitting a page number on the first page of bibliographies</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_NO_FIRST_PAGENUM</strong> &lt;toggle&gt;</nobr>
-
-<p>
-This macro is for use only if <strong>FOOTERS</strong> are on. It
-tells
-<a href="#BIBLIOGRAPHY">BIBLIOGRAPHY</a>
-not to print a page number on the first bibliography page.
-<strong>Mom</strong>'s default is to print the page number.
-<p>
-
-<!---SUSPEND_PAGINATION--->
-
-<a name="SUSPEND_PAGINATION"><h3><u>*Suspending pagination of bibliography pages</u></h3></a>
-<p>
-Macro: <strong>SUSPEND_PAGINATION</strong>
-<br>
-Macro: <strong>RESTORE_PAGINATION</strong>
-
-<p>
-<strong>SUSPEND_PAGINATION</strong> doesn't take an argument.
-Invoked immediately prior to
-<a href="#BIBLIOGRAPHY">BIBLIOGRAPHY</a>,
-it turns off pagination for the duration of the bibliography.
-<strong>Mom</strong> continues, however to increment page numbers
-silently.
-<p>
-To restore normal document pagination after bibliographies, invoke
-<strong>RESTORE_PAGINATION</strong> (again, with no argument)
-immediately after you've finished with your bibliography.
-
-<a name="BIBLIO_HEADER_CONTROL"><h2><u>2. Bibliography page header/footer control</u></h2></a>
-<p>
-<a name="BIBLIO_MODIFY_HDRFTR"></a>
-If you wish to modify what appears in the header/footer that appears
-on bibliography pages, make the changes before you invoke
-<a href="#BIBLIOGRAPHY">BIBLIOGRAPHY</a>,
-not afterwards.
-<p>
-Except in the case of
-<a href="docprocessing.html#DOCTYPE">DOCTYPE CHAPTER</a>,
-<strong>mom</strong> prints the same header or footer used throughout
-the document on bibliography pages. Chapters get treated differently
-in that, by default, <strong>mom</strong> does not print the
-header/footer centre string (normally the chapter number or chapter
-title.) In most cases, this is what you want. However, should you
-<em>not</em> want <strong>mom</strong> to remove the centre string from
-the bibliography pages headers/footers, invoke
-<a href="#BIBLIOGRAPHY_HDRFTR_CENTER">BIBLIOGRAPHY_HEADER_CENTER</a>
-with no argument.
-<p>
-An important change you may want to make is to put the word
-&quot;Bibliography&quot; in the header/footer centre position.
-To do so, do
-<p>
-<pre>
- .HEADER_CENTER "Bibliography"
- or
- .FOOTER_CENTER "Bibliography"
-</pre>
-
-prior to invoking <strong>.BIBLIOGRAPHY</strong>. If your
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-is <kbd>CHAPTER</kbd>, you must also invoke
-<a href="#BIBLIOGRAPHY_HDRFTR_CENTER">BIBLIOGRAPHY_HEADER_CENTER</a>
-for the <strong>HEADER_CENTER</strong> to appear.
-<p>
-
-<a name="BIBLIO_HDRFTR_CENTER"><h3><u>*Bibliography page header/footer centre string</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_HEADER_CENTER</strong> toggle</nobr>
-
-<p>
-If your
-<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
-is <kbd>CHAPTER</kbd> and you want <strong>mom</strong> to include
-a centre string in the headers/footers that appear on bibliography pages,
-invoke <strong>BIBLIOGRAPHY_HEADER_CENTER</strong> (or
-<strong>BIBLIOGRAPHY_FOOTER_CENTER</strong>) with no argument.
-<strong>Mom</strong>'s default is NOT to print the centre string.
-<p>
-If, for some reason, having enabled the header/footer centre string
-on bibliography pages, you wish to disable it, invoke the same macro
-with any argument (<strong>OFF, QUIT, Q, X</strong>...).
-<p>
-
-<a name="BIBLIO_ALLOWS_HEADERS"><h3><u>*Allow headers on bibliography pages</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_ALLOWS_HEADERS</strong> &lt;none&gt; | ALL</nobr>
-
-<p>
-By default, if <strong>HEADERS</strong> are on, <strong>mom</strong>
-prints page headers on all bibliography pages except the first. If you
-don't want her to print headers on bibliography pages, do
-<p>
-<pre>
- .BIBLIOGRAPHY_ALLOWS_HEADERS OFF
-</pre>
-
-If you want headers on every page <em>including the first</em>, do
-<p>
-<pre>
- .BIBLIOGRAPHY_ALLOWS_HEADERS ALL
-</pre>
-
-<strong>NOTE:</strong> If <strong>FOOTERS</strong> are on,
-<strong>mom</strong> prints footers on every bibliography page. This is
-a style convention. In <strong>mom</strong>, there is no such beast
-as <strong>BIBLIOGRAPHY_ALLOWS_FOOTERS OFF</strong>.
-<p>
-
-<a name="BIBLIO_MAIN_TITLE"><h2><u>3. Bibliography page first page head (title) control</u></h2>
-
-<!---BIBLIO_STRING--->
-
-<a name="BIBLIO_STRING"><h3><u>*Bibliography pages first page head (title) string</u></h3></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_STRING</strong> &quot;&lt;head to print at the top of bibliography pages&gt;&quot;</nobr>
-
-<p>
-By default, <strong>mom</strong> prints the word &quot;BIBLIOGRAPHY&quot;
-as a head at the top of the first page of a bibliography. If you want her
-to print something else, invoke <strong>BIBLIOGRAPHY_STRING</strong> with
-the bibliography page head you want, surrounded by double-quotes. If
-you don't want a head at the top of the first bibliography page, invoke
-<strong>BIBLIOGRAPHY_STRING</strong> with a blank argument (either two
-double-quotes side by side -- <kbd>&quot;&quot;</kbd> -- or no argument
-at all).
-<p>
-
-<!---BIBLIO_STRING_CONTROL--->
-
-<a name="BIBLIO_STRING_CONTROL"><h3><u>*Bibliography page first page head (title) control</u></h3></a>
-<p>
-See
-<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
-<p>
-<pre>
-.BIBLIOGRAPHY_STRING_FAMILY default = prevailing document family; default is Times Roman
-.BIBLIOGRAPHY_STRING_FONT default = bold
-.BIBLIOGRAPHY_STRING_SIZE* default = +1
-.BIBLIOGRAPHY_STRING_QUAD default = centred
-
-*Relative to the size of the bibliography text (set with BIBLIOGRAPHY_PT_SIZE)
-</pre>
-
-<!---BIBLIO_STRING_UNDERSCORE--->
-
-<a name="BIBLIO_STRING_UNDERSCORE"><h3><u>*Bibliography-page head (title) underscoring</h3></u></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_STRING_UNDERSCORE</strong> toggle | 2</nobr>
-
-<p>
-Invoked by itself, <strong>BIBLIOGRAPHY_STRING_UNDERSCORE</strong> will
-underscore the bibliography page head. Invoked with the argument 2
-(i.e. the digit 2), <strong>BIBLIOGRAPHY_STRING_UNDERSCORE</strong> will
-double-underscore the head. Invoked with any other argument, the macro
-disables underscoring of the head.
-<p>
-<strong>Mom</strong>'s default is to double-underscore the
-head, therefore if you want no underscoring, you must insert
-<kbd>.BIBLIOGRAPHY_STRING_UNDERSCORE OFF</kbd> (or <kbd>QUIT, X, NO,
-NONE,</kbd> etc.) into your document prior to outputting a
-bibliography with
-<a href="#BIBLIOGRAPHY">BIBLIOGRAPHY</a>.
-
-<!---BIBLIO_STRING_CAPS--->
-
-<a name="BIBLIO_STRING_CAPS"><h3><u>*Bibliography-page head (title) automatic capitalization</h3></u></a>
-<p>
-<nobr>Macro: <strong>BIBLIOGRAPHY_STRING_CAPS</strong> toggle</nobr>
-
-<p>
-Invoked by itself, <strong>BIBLIOGRAPHY_STRING_CAPS</strong> will
-automatically capitalize the bibliography page head. Invoked with any
-other argument, the macro disables automatic capitalization of the
-head.
-<p>
-If you're generating a table of contents, you may want the
-bibliography page head string in caps, but the toc entry in caps/lower
-case. If the argument to
-<a href="#BIBLIOGRAPHY_STRING">BIBLIOGRAPHY_STRING</a>
-is in caps/lower case and <strong>BIBLIOGRAPHY_STRING_CAPS</strong> is
-on, this is exactly what will happen.
-<p>
-<strong>Mom</strong>'s default is to capitalize the bibliography-page
-head string.
-<p>
-
-<br>
-
-<hr>
-<a href="letter.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="cover.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/reserved.html b/contrib/groff/contrib/mom/momdoc/reserved.html
deleted file mode 100644
index ab8eeb193396..000000000000
--- a/contrib/groff/contrib/mom/momdoc/reserved.html
+++ /dev/null
@@ -1,2200 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- List of reserved words</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="appendices.html#TOP">Prev</a>&nbsp;&nbsp; <a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="RESERVED">
-<h1 align="center"><u>LIST OF RESERVED WORDS</u></h1>
-</a>
-<p> The following is a list of &quot;reserved&quot; words used by
-<strong>mom</strong>. Before changing the name of any macro or
-document element tag with
-<a href="goodies.html#ALIAS">ALIAS</a>,
-I strongly recommend doing a search of this page for your proposed
-new name. If you find it in the left hand column, DON'T USE IT.
-Choose something else instead.
-<p>
-Anyone interested in playing around inside <strong>mom</strong>'s macro
-file (om.tmac) will find this list useful as well since it lists all
-(I hope) the macros, strings, diversions and number registers
-<strong>mom</strong> uses, along with brief descriptions of their
-functions.
-<p>
-<pre>
-TYPESETTING
-===========
-
-+++MACROS+++
-
-Page layout
------------
-PAGELENGTH Page width
-PAGE Page width/length; left, right, top, bottom margins
-PAGEWIDTH Page width
-PAPER Letter, legal, or A4
-
-B_MARGIN Space to leave at page bottom
-L_MARGIN Page offset
-R_MARGIN Line length as a function of
- pagewidth minus pageoffset minus rightmargin
-T_MARGIN Advance lead from page top
-
-Page control
-------------
-DO_B_MARGIN Margin at bottom of page; trap-invoked
-DO_T_MARGIN Margin at top of page; trap-invoked
-
-Style
------
-COLOR Change color of text to predefined value
-CONDENSE Set percentage of pseudo-condense (alias of
- CONDENSE_OR_EXTEND)
-EXTEND Set percentage of pseudo-extend (alias of
- CONDENSE_OR_EXTEND)
-FAMILY Family
-FT Font
-FALLBACK_FONT Font to use whenever FAMILY or FT errors occur
-LL Line length
-LS Leading (.vs)
-NEWCOLOR Define a text color
-PT_SIZE Point size
-SETBOLDER Set degree of emboldening (pseudo-bold) in units
-SETSLANT Set degree of pseudo-italic
-XCOLOR Initialize a color from rgb.txt
-
-Autolead
---------
-AUTOLEAD Always lead n points more than .PT_SIZE
-
-Flush
------
-JUSTIFY Justified text
-QUAD Filled text, left, right, or centre
-
-Quad
-----
-CENTER Non-filled text, centre
-LEFT Non-filled text, left
-RIGHT Non-filled text, right
-
-Hyphenation
------------
-HY Turn hyphenation on/off, or set LINES, MARGIN, SPACE
-HY_SET Set LINES, MARGIN, SPACE in a single command
-
-Advanced style
---------------
-KERN Turn automatic kerning on or off
-LIGATURES Turn ligatures on or off
-SS Sentence space control
-WS Word space control
-
-Line breaks
------------
-BR Alias of br
-EL Breaks line but doesn't advance
-SPACE Alias of sp
-SPREAD Alias of brp
-
-Ald/rld
--------
-ALD Advance lead
-RLD Reverse lead
-
-Indents
--------
-HI Indent hang
-IB Indent both
-IBX Indent both off
-IL Indent left
-ILX Indent left off
-IQ Indents off
-IR Indent right
-IRX Indent right off
-IX Indents off -- deprecated
-TI Indent temporary
-
-Tabs
-----
-ST String tab
-TAB_SET Tab Set
-TN Tab Next
-TQ Tab Quit
-
-MCO Turn on multi-column mode
-MCR Return to top of column
-MCX Turn off multi-column mode
-
-Underscore
-----------
-UNDERSCORE Underscores words or phrases
-UNDERSCORE2 Double underscores words or phrases
-
-Underline
----------
-UNDERLINE Underlines whole passages (Courier only)
-
-Smart Quotes
-------------
-SMARTQUOTES Turns smart quotes on or off
-
-Misc + Support
---------------
-BR_AT_LINE_KERN Deposit a break before RW and WE
-CAPS Convert u/lc to UC
-COMMENT Don't print lines till COMMENT OFF (alias of SILENT)
-DROPCAP_ADJUST Points (poss. fractional) to add/subtract
- from drop caps
-DROPCAP Create drop cap
-DROPCAP_FAMILY Drop cap family
-DROPCAP_FONT Drop cap font
-DROPCAP_GUTTER Drop cap gutter
-DROPCAP_OFF Support only; restores .in if there was one
-ESC_CHAR Alias for .ec
-EW Extra white -- loosen overall line kern
- (character spacing)
-LEADER_CHARACTER Sets leader character
-PAD Insert padding spaces at marked places
-PADMARKER Sets character to use instead of # in PAD
-PRINT Simply prints args passed to it; keeps my code
- indented nicely
-RW Reduce white -- tighten overall line kern
- (character spacing)
-SILENT Don't print lines till SILENT OFF
-SIZESPECS Get cap-height, x-height and descender depth for
- current point size
-TRAP Turn traps off or on
-
-+++DIVERSIONS+++
-
-NO_FLASH Diverts output of SILENT or COMMENT so they don't print
-NULL Diverts SIZESPECS in PRINT_HDRFTR so it doesn't screw up
- FOOTER and FOOTNOTE processing when FOOTERS are on
-PAD_STRING Diverts $PAD_STRING for processing
-TYPESIZE Diverts SIZESPECS routine so it doesn't print
-
-+++NUMBER REGISTERS+++
-
-#ABORT_FT_ERRORS Abort on FT errors? (toggle)
-#ALD ALD value
-#ARGS_TO_LIST Tells LIST whether LIST was invoked with a legal
- arg; controls LIST OFF processing
-#ARGS_TO_SQ Tells SMARTQUOTES whether it was invoked with a
- legal arg; controls SMARTQUOTES OFF
- processing
-#AUTOLEAD_FACTOR Using FACTOR arg to AUTOLEAD? (toggle)
-#AUTO_LEAD Using autolead? (toggle)
-#AUTO_LEAD_VALUE Auto leading value
-#BL_INDENT Value of left indent when IB
-#B_MARGIN Bottom margin
-#BOLDER_UNITS # of units to embolden type
-#BR_INDENT Value of right indent when IB
-c column mark
-#CONDENSE Are we in pseudo-condense mode? (toggle)
-#CONDENSE_WAS_ON For restoring \*[COND] in DROPCAP
-#COND_WIDTH Width of pseudo-condensed type
- (pointsize x $COND_PERCENT)
-#CURRENT_L_LENGTH Current line length at first invocation of LIST;
- like #ORIG_L_LENGTH
-#CURRENT_TAB Current tab number
-#DC_GUT Width of dropcap gutter
-#DEGREES # of degrees slant for pseudo-italic
-#ENUMERATOR&lt;n&gt; Number register enumerator for depth &lt;n&gt; in lists
-#EXT_WIDTH Width of pseudo-extended type
- (pointsize x $EXT_PERCENT)
-#EXTEND Are we in pseudo-extend mode? (toggle)
-#EXTEND_WAS_ON For restoring \*[EXT] in DROPCAP
-#FILL_MODE Are we in fill mode (i.e. \n(.u=1)? (toggle)
-#H_INDENT Value of left indent when IH
-#HL_INDENT Value of the hang when IH
-#HYPHENATE Hyphenation on? (toggle)
-#HY_SET Did we manually set hyphenation parameters?
- (toggle)
-#IN_TAB Are we in a tab? (toggle)
- Set in macro TAB; used in ST to determine
- whether to add #ST_OFFSET to #ST&lt;#&gt;_OFFSET
-#INDENT_ACTIVE Indicates whether an indent is active (toggle)
-#INDENT_BOTH_ACTIVE Toggle
-#INDENT_LEFT_ACTIVE Toggle
-#INDENT_RIGHT_ACTIVE Toggle
-#INDENT_STYLE_BOTH Indicates IB when #INDENT_ACTIVE=1 (toggle)
-#INDENT_STYLE_HANG Indicates IH when #INDENT_ACTIVE=1 (toggle)
-#INDENT_STYLE_LEFT Indicates IL when #INDENT_ACTIVE=1 (toggle)
-#INDENT_STYLE_RIGHT Indicates IR when #INDENT_ACTIVE=1 (toggle)
-#INDENT_STYLE_TEMP Indicates IT when #INDENT_ACTIVE=1 (toggle)
-#IX_WARN Toggles to 1 the first time IX is user-invoked
-#JUSTIFY In EW/RW, when BR_AT_LINE_KERN, whether to
- break or break-spread preceding line (toggle)
-#KERN Kern on? (toggle)
-#LAST_TAB Last tab number set in multi-columns
-#LEAD Leading (alias)
-#LIGATURES Ligatures on? (toggle)
-#LIST_INDENT&lt;n&gt; Left indent of list &lt;n&gt;
-#L_INDENT Value of left indent
-#L_LENGTH Line length
-#L_MARGIN Page offset if set with LMARGIN;
- if .po used, \n(.o returns page offset
-#LOOP #LOOP=1 if a while loop executes; otherwise 0.
-#NEXT_DEPTH_BACK Next list level back in lists
-#NEXT_TAB Current tab number + 1 (used in TN)
-#NEXT_TAB Next tab in an n+1 sequence
-#OLD_LEAD Lead in effect prior to changing it with .vs
- in .LS
-#OPEN_CLOSE Manipulates character " to print `` or ''
-#ORIGINAL_L_LENGTH Used in LIST for IB processing; holds \n(.l
-p Output line horiz position at end of
- $PAD_STRING
-#PAD_COUNT Number of times # was included in arg to PAD
-#PAD_LIST_DIGITS Pad list digits to the left? (toggle)
-#PAD_SPACE Size of padding space
-#PAGE_LENGTH Page length (alias)
-#PAGE_WIDTH Page width
-#PP_ACTIVE Are we in the context of a para? (toggle)
-#PRINT_FOOTER_ON_PAGE_1 (toggle)
-#PSEUDO_FILL Signals that LEFT, RIGHT or CENTER is
- in effect (toggled off, i.e. to 0, when
- QUAD <arg> or JUSTIFY is called)
-#PT_SIZE Point size (fractional) in units (alias)
-#Q_AT_TOP Does a quote start at the top of a new page?
- (toggle)
-#QUAD In autoquad mode? (toggle)
-#QUIT Tells LIST whether to exit lists completely
- (toggle)
-#REMOVE Used in LIST OFF cleanup
-#RESTORE_LEAD Lead value in effect prior to AUTOLEAD
-#RESTORE_LINE_LENGTH Restores actual line length in RULE
-#RESTORE_LN_NUMBER Start linenumbering again with stored
- #NEXT_LN? (toggle)
-#RESTORE_PT_SIZE Stores current point size (in units) prior
- to underscore
-#R_INDENT Value of right indent
-#R_MARGIN Right margin
-#RESTORE_PREV_INDENT Tells LIST OFF what kind of indent was active
- prior to first invocation of LIST
-#RLD RLD value
-#SILENT Is silent on? (toggle)
-#SIZE_FOR_PAD Used to ensure that the size in effect prior
- to PAD is restored at the start of every
- iteration of $PAD_STRING
-#SLANT_ON Is SLANT on? (toggle)
-#SMART_QUOTES Smartquotes on? (toggle)
-#SPACE_TO_END Whitespace at end of string passed to PAD
-#ST&lt;#&gt;_LENGTH Length of ST&lt;#&gt;; calculated during ST &lt;#&gt;
-#ST&lt;#&gt;_MARK Page offset of autotab &lt;#&gt; at ST&lt;#&gt;X
-#ST_NUM Incrementing counter for autotab identification
-#ST_OFFSET Offset (from current tab) to add to #ST&lt;#&gt;_OFFSET
- when calculating string indents set from within
- tabs
-#ST&lt;#&gt;_OFFSET Indent of autotab &lt;#&gt; (page offset)
-#STORED_L_INDENT Current left indent at first invocation of LIST
-#STORED_R_INDENT Current right indent at first invocation of LIST
-#STORED_BL_INDENT Current "both, left" indent at first invocation
- of LIST
-#STORED_BR_INDENT Current "both, right" indent at first invocation
- of LIST
-#STORED_HL_INDENT Current hanging indent at first invocation
- of LIST
-#STORED_T_INDENT Current temporary indent at first invocation
- of LIST
-#T_INDENT Value of temporary indent
-#T_MARGIN Top margin
-#TAB_ACTIVE Are we in a tab? (toggle)
-#TAB_NUMBER Tab number
-#TAB_OFFSET Tab indent
-#TOP Set to 1 in T_MARGIN, DO_T_MARGIN and ALD; tells
- the first LS or AUTOLEAD on a page to maintain
- the baseline position prior to the LS call
-#TOP_BASELINE_ADJ Amount by which to adjust the baseline position
- of the first line on the page if an LS or AUTOLEAD
- request differs from the lead current at the end of
- the previous page
-#TOTAL_LISTS Total number of lists in a nest
-#USER_SET_L_LENGTH Did user invoke LL? (toggle)
-#USER_SET_TITLE_ITEM Did user invoke TOC_TITLE_ENTRY?
-u Horiz position of start of underscore
-
-+++STRINGS+++
-
-$COND_PERCENT Percentage by which to pseudo-condense type
-$COLOR_SCHEME Color scheme used in NEWCOLOR
-$CURRENT_QUAD Restores current quad value in RULE
-$CURRENT_TAB Current tab number
-$DC_ADJUST +|- # of points to subtract from dropcap
-$DC_FAM Drop cap family
-$DC_FT Drop cap font
-$ENUMERATOR&lt;n&gt; String enumerator for depth &lt;n&gt; in lists
-$EXT_PERCENT Percentage by which to pseudo-extend type
-$FAMILY Family
-$FAMILY_FOR_PAD Used to ensure that the family in effect prior
- to PAD is restored at the start of every
- iteration of $PAD_STRING
-$FONT Font
-$FONT_FOR_PAD Used to ensure that the font in effect prior
- to PAD is restored at the start of every
- iteration of $PAD_STRING
-$PAD_MARKER Character to mark off padding in PAD
-$PAD_STRING Arg passed to PAD
-$QUAD_VALUE Quad value (left, right, centre, justify)
-$QUOTE0 Open quotation marks
-$QUOTE1 Close quotation marks
-$RESTORE_COND Restores the pseudo-condense value in effect
- prior to DROPCAP
-$RESTORE_EXT Restores the pseudo-extend value in effect
- prior to DROPCAP
-$RESTORE_FAM Used to restore the family in effect
- prior to DROPCAP
-$RESTORE_FT Used to restore the font/fontstyle in effect
- prior to DROPCAP
-$RESTORE_PT_SIZE Used to restore the point size of normal
- running text after a dropcap
-$RESTORE_QUAD_VALUE Quad value for use in restoring L, R, C, J
- (after tabs)
-$SAVED_STYLE Current style, if there is one (used in FAMILY)
-$SEPARATOR&lt;n&gt; Separator for depth &lt;n&gt; in lists
-$SS_VAR Holds + or - sentence space value
-$ST&lt;#&gt;_FILL Always QUAD if QUAD passed to ST &lt;#&gt;
-$ST&lt;#&gt;_QUAD_DIR Quad direction supplied to ST for &lt;#&gt;
-$TAB_NUMBER Argument passed to TAB macro to call TAB# macro
- created in TAB_SET
-$WS_CONSTANT 12; used to hold groff default wordspace
-$WS Holds WS value; concatenation of WS_CONSTANT and
- WS_VAR
-$WS_VAR + or - value to add to $WS_CONSTANT
-BLACK Pre-defined black color
-black Pre-defined black color
-WHITE Pre-defined white color
-white Pre-defined white color
-
-+++ALIASES+++
-
-ALIAS als
-ALIASN aln
-BR br
-CENTRE CENTER
-COLOUR COLOR
-COMMENT SILENT
-CONDENSE CONDENSE_OR_EXTEND
-EXTEND CONDENSE_OR_EXTEND
-FAM FAMILY
-FT FONT
-HYPHENATE HY
-HYPHENATION HY
-LIG LIGATURES
-LL LINE_LENGTH
-MAC de
-NEW_PAGE bp
-NEWCOLOUR NEWCOLOR
-NEWPAGE NEW_PAGE
-PAGELENGTH PAGE_LENGTH
-PAGE_LENGTH pl
-PAGEWIDTH PAGE_WIDTH
-SPREAD brp
-SP sp
-STRING ds
-TABSET TAB_SET
-TB TAB
-TI IT
-UNDERSCORE_2 UNDERSCORE2
-XCOLOUR XCOLOR
-
-+++ALIASES FOR NUMBER REGISTERS+++
-
-#DIVER_DEPTH dn -- diversion depth
-#DIVER_WIDTH dl -- diversion width
-#INDENT .i -- value of current indent
-#LEAD .v -- line space (.vs, not .ls)
-#L_LENGTH .l -- line length
-#NUM_ARGS .$ -- number of arguments passed to a macro
-#PAGE_LENGTH .p -- page length
-#PT_SIZE .ps -- current point size (fractional) in units
-#TRAP_DISTANCE .t -- distance to next trap
-
-+++INLINE ESCAPES+++
-
-BCK Inline backward horizontal movement
-BOLDER Pseudo-bold on
-BOLDERX Pseudo-bold off
-BP Back points (horizontal movement)
-BU Back units (inline pairwise kerning)
-COND_FOR_SUP Pseudo-condense string for use with superscripts
- (called with CONDSUP)
-COND_FOR_SUP Pseudo-extend string for use with superscripts (called
- with EXTSUP)
-COND Pseudo-condense type
-CONDX Pseudo-condense off
-CONDSUP Pseudo-condensed superscript (using value set with
- CONDENSE)
-CONDSUPX Pseudo-condensed superscript off
-DOWN Inline downward vertical movement
-EXT Pseudo-extend type
-EXTX Pseudo-extend off
-EXTSUP Pseudo-extended superscript
-EXTSUPX Pseudo-extended superscript off
-FP Forward points (horizontal movement)
-FU Forward units (inline pairwise kerning)
-FWD Inline forward horizontal movement
-LEADER Deposit leader to end of current LL or TAB
-RULE Draw a rule to the full measure of the current line or
- tab length
-SLANT Slant (pseudo-italic on
-SLANTX Slant off
-ST&lt;#&gt; String tab end marker
-ST&lt;#&gt; String tab start marker
-SUP Superscript
-SUPX Superscript off
-UP Inline upward vertical movement
-
-+++SPECIAL CHARACTERS+++
-
-FEET The foot character \(fm
-INCH The inch character \(fm\(fm
-
-------------------------------------------------------------------------
-
-DOCUMENT PROCESSING
-===================
-
-+++MACROS+++
-
-Document info
--------------
-AUTHOR Author
-CHAPTER Chapter number
-CHAPTER_TITLE Chapter title
-COPYRIGHT Copyright info (covers only)
-DOCTITLE Overall doc title (for collated docs)
-DRAFT Draft number
-MISC Misc info (covers only)
-REVISION Revision number
-SUBTITLE Doc subtitle
-TITLE Doc title
-
-Covers
-------
-COVER What goes on cover
-COVERS Whether covers get printed (toggle)
-COVER_ADVANCE Set vertical start position of cover material
-COVER_LEAD Overall leading of covers
-COVERTITLE User-defined cover title string
-DOC_COVER What goes on doc cover
-DOC_COVERS Whether doc covers get printed
-DOC_COVER_ADVANCE Set vertical start position of doc cover material
-DOC_COVER_LEAD Overall leading of doc covers
-DOC_COVERTITLE User-defined doc cover title string
-
-Document style
---------------
-COPYSTYLE Output style (DRAFT or FINAL)
-DEFAULTS In START, sets defaults
-DOCTYPE Kind of doc (DEFAULT, CHAPTER, NAMED, LETTER)
-PAGENUMBER Page number that appears on 1st page of doc
-PAPER Paper size (LETTER, LEGAL, A4)
-PRINTSTYLE Print style (TYPEWRITE or TYPESET)
-NUMBER_LINES Number output lines in the left margin
-
-Document tags and macros
-------------------------
-ADD_SPACE Special macro to add space to the top of a pages after
- page 1; must be preceded by NEWPAGE
-BIBLIOGRAPHY Begin a bibliography page
-BIBLIOGRAPHY_TYPE LIST or PLAIN
-BLOCKQUOTE Block-indented, quoted text
-COL_BREAK Breaks and spreads line before invocation; moves to
- next column on page or 1st col of next page. An alias
- of COL_NEXT.
-COL_NEXT Moves to next column on page or 1st col of next page
-ENDNOTE Endnote
-ENDNOTE_REFS Send REFs to endnotes
-ENDNOTES Output endnotes
-EPIGRAPH Epigraph before 1st para
-FINIS Prints --END--
-FOOTNOTE Collects footnotes in text for printing at bottom of page
-FOOTNOTE_REFS Send REFs to footnotes
-HEAD Section title (main heads)
-HYPHENATE_REFS Turn on/off hyphenation of REF references
-ITEM Begin a list item
-LINEBREAK Break between narrative sections
-LIST Initialize a list
-MN Margin note
-MN_INIT Initialize parameters for margin notes
-NUMBER_LINES Number text lines
-NUMBER_BLOCKQUOTE_LINES Number blockquote lines
-NUMBER_QUOTE_LINES Number quote lines
-PAD_LIST_DIGITS Leave space for two-numeral digit enumerators
- in a list
-PARAHEAD Paragraph head
-PP Paragraph
-QUOTE Poetic or line for line quotes
-REF Wrapper around FOOTNOTE or ENDNOTE, depending
- on FOOTNOTE_REFS or ENDNOTE_REFS
-REF( Begin embedded reference, parens
-REF) End embedded reference, parens
-REF[ Begin embedded reference, square brackets
-REF] End embedded reference, square brackets
-REF{ Begin embedded reference, braces
-REF} End embedded reference, braces
-REF_INDENT Amount of 2nd line indent of references for
- footnote, endnote or bibliography refs
-RESET_LIST Reset digit or alpha list enumerator
-SHIFT_LIST Move a list over to the right
-START Sets doc defaults and prints info collected
- with doc info macros
-SUBHEAD Subheads
-
-Headers/footers
----------------
-BREAK_QUOTE Manually break a footnoted quote that crosses
- a page/column
-DO_FOOTER Prints footer (after footnote processing, if any)
-FOOTER_ON_FIRST_PAGE Print footer on first page? (toggle)
-FOOTER Trap-invoked footer macro
-HEADER Trap-invoked header macro
-PAGINATE Turns page numbering on or off (doc default=on)
-PAGINATE_TOC Turns pagination of toc on or off (default=on)
-RECTO_VERSO Enables switch HEADER_LEFT and HEADER_RIGHT on
- alternate pages
-
-Alter doc "look" and/or change defaults
----------------------------------------
-***General***
-
-ALWAYS_FULLSPACE_QUOTES Fullspace quotes instead of default
- 1/2 spacing them.
-ATTRIBUTE_STRING What to print before author (default is "by")
-CHAPTER_STRING What to print whenever the word "chapter"
- is required
-COLUMNS Print in columns
-DOC_FAMILY Overall doc family
-DOCHEADER Print doc header?
-DOCHEADER_ADVANCE Start position of docheader (relative to top
- of page)
-DOCHEADER_LEAD +|- value applied to #DOC_LEAD to in/decrease
- leading of doc header
-DOC_LEAD_ADJUST Adjust #DOC_LEAD to fill page to #B_MARGIN
-DOC_LEAD Overall doc leading
-DOC_LEFT_MARGIN Doc left margin
-DOC_LINE_LENGTH Doc line length
-DOC_PT_SIZE Overall doc point size
-DOC_RIGHT_MARGIN Doc right margin
-DOC_TITLE Overall doc title that gets printed in
- headers/footers (mostly for use with collated
- docs where each doc is an article with a
- different title
-DRAFT_STRING What to print whenever the word "draft" is
- required
-DRAFT_WITH_PAGENUMBER Attach draft/revision info to page number
- (instead of putting it HEADER centre)
-REVISION_STRING What to print whenever the word "revision"
- is required
-
-***Covers***
-
-COVER_ADVANCE Vertical place on page to start outputting
- cover material
-COVER_LEAD Lead in/decrease for cover pages
-DOC_COVER_ADVANCE Vertical place on page to start outputting
- doc cover material
-DOC_COVER_LEAD Lead in/decrease for doc cover pages
-
-***Epigraphs and finis***
-
-EPIGRAPH_AUTOLEAD Autolead value for epigraphs
-EPIGRAPH_INDENT Value by which to multiply PP_INDENT for
- block epigraphs
-FINIS_STRING What to print when FINIS is invoked
-
-***Footnotes***
-
-FOOTNOTE_AUTOLEAD Autolead to use in footnotes
-FOOTNOTE_LINENUMBER_BRACKETS Brackets for footnote linenumbers
-FOOTNOTE_LINENUMBER_SEPARATOR Separator for footnote linenumbers
-FOOTNOTE_MARKERS Turns footnote markers on or off
-FOOTNOTE_MARKER_STYLE STAR or NUMBER; default=STAR
-FOOTNOTE_RULE_ADJ # of points to raise footnote rule from its
- baseline
-FOOTNOTE_RULE_LENGTH Length of footnote separator rule
-FOOTNOTE_RULE Turns printing of fn separator rule on or off;
- default is on
-FOOTNOTE_SPACING Post footnote item spacing
-FOOTNOTES_RUN_ON Run footnotes on (line numbering mode only)
-RESET_FOOTNOTE_NUMBER Reset fn# to 1, or, if arg PAGE, reset
- automatically to 1 on every page
-RUNON_WARNING Utility macro; warns if FOOTNOTES_RUN_ON
- was called when fn marker style is STAR or NUMBER
-
-***Endnotes***
-
-ENDNOTE_LEAD Leading for endnotes page
-ENDNOTE_LINENUMBER_BRACKETS Brackets around line numbers identifying
- endnotes and text
-ENDNOTE_LINENUMBER_GAP Amount of space to leave between line
-ENDNOTE_LINENUMBER_SEPARATOR Separator between line numbers identifying
- endnotes and the endnote item text
- endnotes and text
-ENDNOTE_MARKER_STYLE NUMBER or LINE
-ENDNOTE_NUMBERS_ALIGN_RIGHT Hang endnote numbers and align right
-ENDNOTE_NUMBERS_ALIGN_LEFT Don't hang endnote numbers and align left
-ENDNOTE_PARA_INDENT First line indent of paras in multi-para
- endnotes
-ENDNOTE_PARA_SPACE Whether to space paras in multi-para endnotes
-ENDNOTE_PT_SIZE Base point size for endnotes page
-ENDNOTE_STRING Endnotes page head
-ENDNOTE_STRING_CAPS Capitalize the endnotes string
-ENDNOTE_STRING_UNDERSCORE Underscoring of endnotes page head
-ENDNOTE_TITLE Endnotes identifying title
-ENDNOTE_TITLE_SPACE Distance from top of page to endnotest title
-ENDNOTE_TITLE_UNDERSCORE Underscoring of endnotes identifying title
-ENDNOTES_ALLOWS_HEADERS Page headers on endnotes pages? (toggle)
-ENDNOTES_FIRST_PAGENUMBER Page number to appear on page 1 of endnotes
- pages
-ENDNOTES_HDRFTR_CENTER Print header/footer centre string on endnotes
- pages?
-ENDNOTES_HEADER_CENTER Print header centre string on endnotes pages?
-ENDNOTES_FOOTER_CENTER Print footer centre string on endnotes pages?
-ENDNOTES_NO_COLUMNS Turn columnar mode off for endnotes pages
-ENDNOTES_NO_FIRST_PAGENUM Don't print a pagenumber on page 1 of
- endnotes.
-ENDNOTES_PAGENUM_STYLE Set numbering style for endnotes pages page
- numbers
-SINGLESPACE_ENDNOTES Single space TYPEWRITE endnotes
-
-***Bibliographies***
-
-BIBLIOGRAPHY_ALLOWS_HEADERS Allow headers on bib pages
-BIBLIOGRAPHY_FIRST_PAGENUMBER Starting page number for bibliographies
-BIBLIOGRAPHY_HDRFTR_CENTER Header/footer center string for bib pages
-BIBLIOGRAPHY_LEAD Base lead of bib pages
-BIBLIOGRAPHY_NO_COLUMNS De-columnize bibliographies
-BIBLIOGRAPHY_NO_FIRST_PAGENUM Don't print a page number on the first
- page of bibliographies
-BIBLIOGRAPHY_PAGENUM_STYLE Format for bib pages page numbering
-BIBLIOGRAPHY_PT_SIZE Base point size for bib pages
-BIBLIOGRAPHY_SPACING Post bib entry space
-BIBLIOGRAPHY_STRING String for bib title
-BIBLIOGRAPHY_STRING_CAPS Capitalize bib title string
-BIBLIOGRAPHY_STRING_UNDERSCORE Underscore bib title string
-SINGLESPACE_BIBLIOGRAPHY Singlespace bibs if PRINTSTYLE TYPEWRITE
-
-***Headers and footers***
-
-FOOTER_COLOR Footer color
-FOOTER_GAP Distance between running text and footer
-FOOTER_MARGIN Distance from footer to bottom of page
-FOOTERS Turns footers on or off
-HDRFTR_CENTER String to go in centre part of header/footer;
- default doctype
-HDRFTR_CENTER_CAPS Centre part of header/footer in caps? (toggle)
-HDRFTR_CENTER_PAD Pad hdrftr CENTER left or right by specified
- amount
-HDRFTR_GAP Distance from header/footer to running text
-HDRFTR_LEFT_CAPS Left part of header/footer in caps? (toggle)
-HDRFTR_LEFT String to go in left part of header/footer;
- default is AUTHOR_1
-HDRFTR_LEFT The header/footer left string
-HDRFTR_MARGIN Distance from top of page to header
-HDRFTR_PLAIN Header/footer fam/ft/ps all same as running
- text
-HDRFTR_RECTO User-defined, single string recto
- header/footer
-HDRFTR_RIGHT_CAPS Right part of header/footer in caps? (toggle)
-HDRFTR_RIGHT The header/footer right string
-HDRFTR_RULE_GAP Space between header/footer and header/footer
- rule
-HDRFTR_RULE_INTERNAL Prints the header/footer rule
-HDRFTR_RULE Turns header/footer rule on or off
- When invoked internally, prints the rule.
-HDRFTR_VERSO User-defined, single string verso
- header/footer
-HEADERS Turns headers on or off
-SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT
-
-***Page numbering***
-
-PAGENUM_HYPHENS Turns on/off hyphens surrounding page numbers
-PAGENUM_ON_FIRST_PAGE Print page number on first page when footers
- are on (toggle)
-PAGENUM_POS Controls placement of page numbers;
- default=bottom/centred
-PAGENUM_SIZE How much to in/decrease point size of page
- numbers*
-PAGENUM_STYLE Page # in roman, Arabic, or alphabetic
-RESTORE_PAGINATION Restore pagination after outputting non-
- paginated endnotes.
-SUSPEND_PAGINATION Suspend pagination prior to outputting
- endnotes
-
-***Heads***
-
-HEADER_GAP Space between header and running text
-HEADER_MARGIN Space from top of page to header
-HEAD_CAPS Print section titles in caps? (toggle)
-HEAD_SPACE Give HEADs 2 line-spaces before. If OFF,
- only 1. Default is on.
-HEAD_UNDERLINE Underline section titles? (toggle)
-NUMBER_HEADS Print head numbers
-RESET_HEAD_NUMBER Reset head number
-
-***Subheads***
-
-NUMBER_SUBHEADS Print subhead numbers
-RESET_SUBHEAD_NUMBER Reset subhead number
-
-***Para heads***
-
-NUMBER_PARAHEADS Print parahead numbers
-PARAHEAD_INDENT How much to indent paraheads
-RESET_PARAHEAD_NUMBER Reset parahead number
-
-***Paragraphs***
-
-INDENT_FIRST_PARAS Indent 1st paras? (doc default=not indented)
-PARA_INDENT Size of para indent
-PARA_SPACE Put a line space before paras
-PP_FONT Overall doc font
-
-***Quotes***
-
-Q_FITS Utility macro for DO_QUOTE
-Q_NOFIT Utility macro for DO_QUOTE
-QUOTE_AUTOLEAD Leading of (block)quotes
-
-***Line/section breaks***
-
-LINEBREAK_CHAR Linebreak character, iterations and positioning
-
-***Printstyle TYPEWRITE***
-
-ITALIC_MEANS_ITALIC For TYPEWRITE; render .FT I in italic.
-SLANT_MEANS_SLANT In TYPEWRITE, render \*[SLANT] as slant
-UNDERLINE_ITALIC In TYPEWRITE, render .FT I as underlined
-UNDERLINE_QUOTES In TYPEWRITE, underline quotes? (toggle)
-UNDERLINE_SLANT In TYPEWRITE, render \*[SLANT] as underlined
-
-***Table of contents***
-
-TOC_APPENDS_AUTHORS Appends author(s) to toc doc title entries
-TOC_LEAD Leading of toc pages
-TOC_PADDING Number of placeholders for toc entries page
- numbers
-TOC_HEAD_INDENT Indent of toc head entries
-TOC_HEADER_STRING TOC header string (default=Contents)
-TOC_PAGENUM_STYLE Page numbering style (hdrftr nums) of
- toc pages
-TOC_RV_SWITCH Switch L/R margins of toc pages
-TOC_PARAHEAD_INDENT Indent of toc parahead entries
-TOC_SUBHEAD_INDENT Indent of toc subhead entries
-TOC_TITLE_ENTRY User supplied toc doc title entry
-TOC_TITLE_INDENT Indent of toc doc title entries
-
-***Aliases for headers and footers***
-HEADER_SIZE HDRFTR_SIZE
-HEADER_RIGHT_PS HDRFTR_RIGHT_SIZE
-HEADER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
-HEADER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
-HEADER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
-HEADER_RIGHT_FONT HDRFTR_RIGHT_FONT
-HEADER_RIGHT_FT HDRFTR_RIGHT_FONT
-HEADER_LEFT_PS HDRFTR_LEFT_SIZE
-HEADER_LEFT_SIZE HDRFTR_LEFT_SIZE
-HEADER_LEFT_FAM HDRFTR_LEFT_FAMILY
-HEADER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
-HEADER_LEFT_FONT HDRFTR_LEFT_FONT
-HEADER_LEFT_FT HDRFTR_LEFT_FONT
-HEADER_CENTRE_PS HDRFTR_CENTER_SIZE
-HEADER_CENTRE_SIZE HDRFTR_CENTER_SIZE
-HEADER_FAM HDRFTR_FAMILY
-HEADER_FAMILY HDRFTR_FAMILY
-HEADER_CENTRE_FAM HDRFTR_CENTER_FAMILY
-HEADER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
-HEADER_CENTRE_FONT HDRFTR_CENTER_FONT
-HEADER_CENTRE_FT HDRFTR_CENTER_FONT
-HEADER_CENTER_PS HDRFTR_CENTER_SIZE
-HEADER_CENTER_SIZE HDRFTR_CENTER_SIZE
-HEADER_CENTER_FAM HDRFTR_CENTER_FAMILY
-HEADER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
-HEADER_CENTER_FONT HDRFTR_CENTER_FONT
-HEADER_CENTER_FT HDRFTR_CENTER_FONT
-FOOTER_SIZE HDRFTR_SIZE
-FOOTER_RIGHT_PS HDRFTR_RIGHT_SIZE
-FOOTER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
-FOOTER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
-FOOTER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
-FOOTER_RIGHT_FONT HDRFTR_RIGHT_FONT
-FOOTER_RIGHT_FT HDRFTR_RIGHT_FONT
-FOOTER_LEFT_PS HDRFTR_LEFT_SIZE
-FOOTER_LEFT_SIZE HDRFTR_LEFT_SIZE
-FOOTER_LEFT_FAM HDRFTR_LEFT_FAMILY
-FOOTER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
-FOOTER_LEFT_FONT HDRFTR_LEFT_FONT
-FOOTER_LEFT_FT HDRFTR_LEFT_FONT
-FOOTER_CENTRE_PS HDRFTR_CENTER_SIZE
-FOOTER_CENTRE_SIZE HDRFTR_CENTER_SIZE
-FOOTER_FAM HDRFTR_FAMILY
-FOOTER_FAMILY HDRFTR_FAMILY
-FOOTER_CENTRE_FAM HDRFTR_CENTER_FAMILY
-FOOTER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
-FOOTER_CENTRE_FT HDRFTR_CENTER_FONT
-FOOTER_CENTER_PS HDRFTR_CENTER_SIZE
-FOOTER_CENTER_SIZE HDRFTR_CENTER_SIZE
-FOOTER_CENTER_FAM HDRFTR_CENTER_FAMILY
-FOOTER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
-FOOTER_CENTER_FONT HDRFTR_CENTER_FONT
-FOOTER_CENTER_FT HDRFTR_CENTER_FONT
-
- *relative to #DOC_PT_SIZE
- **relative to overall ps of headers as set by HEADER_SIZE
- ***relative to overall ps of endnotes pages
-****relative to overall ps of toc pages
-
-+++LETTER MACROS+++
-
-CLOSING Closing (i.e. Yours truly,)
-DATE Date for letters
-FROM Addresser's name and address
-GREETING Full salutation (e.g. Dear John Smith,)
-NO_SUITE Remove suite page numbers from bottom of letter pages
-TO Addressee's name and address
-ALL_DONE .em (the "end macro") for letters
-
-+++SUPPORT+++
-
-CHECK_INDENT Applies indents to doc elements inside ev's
- (head, subhead, etc)
-CLEANUP_DEFAULTS Removes selected rregisters and strings
- from DEFAULTS after START
-DO_COVER Formats and outputs covers
-DO_DOC_COVER Formats and outputs doc covers
-D0_QUOTE Outputs quotes with space adjustments before
- and after
-DIVER_FN_1_PRE -+
-DIVER_FN_2_PRE | Manage footnotes called inside diversions
- | QUOTE, BLOCKQUOTE and EPIGRAPH
-DIVER_FN_2_POST -+
-DIVERT_FN_LEFTOVER Diverts excess fn stored in FN_OVERFLOW into
- FOOTNOTE
-DIVERT_FN_OVERFLOW Diverts excess fn stored in FN_OVERFLOW when
- FN_DEFER into FOOTNOTE
-DO_EPIGRAPH Outputs epigraphs with space adjustments before
- and after
-FN_OVERFLOW_TRAP Fixed at B_MARGIN; if footnotes run longer than
- B_MARGIN, diverts excess into FN_OVERFLOW
-GET_ROMAN_INDENT Figures out amount of space to reserve
- for roman numerals in lists
-HDRFTR_RULE Prints rule under header or over footer
-MN_OVERFLOW_TRAP Trap-invoked macro to collect margin note
- overflows
-PRINT_FOOTNOTE_RULE An alias of PRINT_FOOTNOTE; prints footnote
- separator rule
-PRINT_HDRFTR Prints header/footer (trap invoked)
-PRINT_PAGE_NUMBER Invoked in HEADER or FOOTER
-PRINT_USERDEF_HDRFTR Prints user defined, single string recto/verso
- header/footer
-PROCESS_SHIM Calculates #SHIM when \n(.d is lower on the
- page than #T_MARGIN
-PROCESS_FN_IN_DIVER Processes footnotes gathered in a diversion (called
- at page/column breaks)
-REMOVE_INDENT Removes indents set with CHECK_INDENT
-Q_FITS Handles spacing of quotes when quote fits on the page
-Q_NOFIT Handles spacing of quotes when quote does not fit on
- the page
-QUIT_LISTS Exit lists cleanly and completely
-SET_LIST_INDENT Restore indent of a prev. level of list
-SHIM Advance to next "legal" baseline
-TERMINATE .em that ensures deferred footnotes get output
- on final pages
-TRAPS Sets hdrftr traps; optionally adjusts #DOC_LEAD
- to fill page to #B_MARGIN
-TYPEWRITER Sets family (C), font (R) and point size (12)
- for PRINTSTYLE TYPEWRITE
-VFP_CHECK Trap-sprung macro 1 legal baseline higher than
- where FOOTER will be sprung; checks whether
- there is, in fact, just enough room for
- another line of running text to be added to
- the page without jamming footnotes too close
- to running text.
-
-+++DIVERSIONS+++
-
-B_QUOTE Block (indented) quote text
-CLOSING Closing (i.e. Yours truly,)
-EPI_TEXT Epigraph text
-END_NOTES Endnotes text
-FN_IN_DIVER Footnotes gathered from inside a diversion
-FN_OVERFLOW Excess footnotes when B_MARGIN is reached
-FOOTNOTES Text of footnotes
-GREETING Full salutation (e.g. Dear John Smith,)
-LETTERHEAD&lt;n&gt; Date, addresser, addressee or greeting;
- &lt;n&gt; is from 1 to 4, supplied by #FIELD
-P_QUOTE Line for line (poetic) quote text
-RUNON_FOOTNOTES Special diversion for run-on footnotes
-RUNON_FN_IN_DIVER Special diversion for run-on footnotes inside
- (block)quotes
-TOC_ENTRIES TOC entries
-
-+++NUMBER REGISTERS+++
-
-#1ST_FN_VP_ADJ An adjustment factor that ensures VFP
- doesn't fall below what should be the
- correct last printed line of running
- text
-#ADD_BREAK Instructs FOOTNOTEs and ENDNOTEs to add
- a break afer processing a footnote if
- we're not in fill mode
-#ADJ_BIB_LEAD Adjust BIB_LEAD? (toggle)
-#ADJ_DOC_LEAD Adjust DOC_LEAD? (toggle)
-#ADJ_TOC_LEAD Adjust TOC_LEAD? (toggle)
-#ARG_NUM Keeps track of number of args passed to a
- macro
-#ARGS_TO_LIST Was LIST passed some args? (toggle)
-#AUTHOR_[n] Strings passed to AUTHOR
-#AUTHOR_LINES # of lines of authors in doc header; odd=0
- even=1
-#AUTHOR_NUM Keeps track of user-defined string
- AUTHOR_&lt;#&gt; in AUTHOR
-#AUTHORS Equals final value of AUTHOR_NUM;
- used for authors in doc header
-#BASELINE_MARK In PP, the vertical position on the page
- (when paragraph spacing is on) after a
- quote or blockquote has been output and
- the post-quote space has been added.
-#BMARG Position of unvarying bottom margin
- during doc processing; required for
- collecting footnotes inside diversions
-#BIB_ALLOWS_HEADERS Put headers on bib pages? (toggle)
-#BIB_ALLOWS_HEADERS_ALL Put headers on all bib pages? (toggle)
-#BIB_FIRST_PAGE Tells PRINT_PAGE_NUMBER about bibliography
- first page number
-#BIB_FIRST_PN Starting pagenumber for bibliographies
-#BIB_HDRFTR_CENTER Put a center string in bib page headers?
- (toggle)
-#BIB_LEAD Bibliography lead, expressed in points
-#BIB_LIST Output bibs in list style? (toggle)
-#BIB_NO_COLS De-columnize bibliographies? (toggle)
-#BIB_NO_FIRST_PN Put a page number on the first page of
- bibliographies? (toggle)
-#BIB_SINGLESPACE Single-space TYPEWRITE bibliographies? (toggle)
-#BIB_SPACE Post item space for bibliography pages
-#BIB_STRING_CAPS Capitalize bib title? (toggle)
-#BIB_STRING_UNDERSCORE Underscore bib title? 0=no; 1=yes; 2=double
-#BIB_PS Base point size for bibliography pages expressed
- in points
-#BIBLIOGRAPHY Are we doing a bib page? (toggle)
-#BQ_AUTOLEAD Register created by BLOCKQUOTE_AUTOLEAD
-#BQ_LEAD Leading of blockquotes
-#BQUOTE_COLOR Colored blockquotes? (toggle)
-#BQUOTE_LN Number blockquotes? (toggle)
-#BROKEN_QUOTE Did we invoke BREAK_QUOTE? (toggle)
-#CAP_HEIGHT_ADJUST Tallest cap height of strings LEFT, CENTER,
- and RIGHT in footers; used to place rule
- over footer
-#CAPS_WAS_ON In HDRFTR, to re-enable running text CAPS
- (toggle)
-#CENTER_CAP_HEIGHT Cap height of CENTER string in
- headers/footers
-#CHAPTER_TITLE_COLOR Colored chapter title? (toggle)
-#CLOSING Is there a closing (for letters)? 1=yes
-#COL_L_LENGTH Line length of columns
-#COL_NEXT Was COL_NEXT invoked? (toggle; used in
- FOOTER)
-#COL_NUM Incrementing counter of num of columns;
- for use with #COL_&lt;#&gt;_L_MARGIN
-#COL_TOTAL #COL_L_LENGTH + #GUTTER; used to calculate
- #COL_&lt;#&gt;_L_MARGIN
-#COLLATED_DOC If 1, instructs TOC that this is a collated
- doc
-#COLUMNS Are columns turned on? (toggle)
-#COLUMNS_WERE_ON Stores columnar state prior to outputting
- endnotes in no-columns mode
-#COPY_STYLE 1=draft, 2=final
-#COUNTERS_RESET Tells FOOTNOTE if fn counters have
- been reset because of footnotes gathered
- inside a diversion
-#COVER_COLOR Colored cover? (toggle)
-#COVER_START_POS Vertical starting pos of cover material
-#COVER_TITLE_COLOR Colored cover title? (toggle)
-#COVER_SUBTITLE_COLOR Colored cover subtitle? (toggle)
-#COVER_ATTRIBUTE_COLOR Colored cover attribution string? (toggle)
-#COVER_AUTHOR_COLOR Colored cover author(s)? (toggle)
-#COVER_DOCTYPE_COLOR Colored cover doctype? (toggle)
-#COVER_COPYRIGHT_COLOR Colored cover copyright line? (toggle)
-#COVER_MISC_COLOR Colored cover misc line? (toggle)
-#CURRENT_V_POS \n(.d ; used in SHIM
-#COVERS Print covers? (toggle)
-#DATE_FIRST Was .DATE invoked as first letter
- header after .START? (toggle)
-dc "mark" register for document columns
-#DIVER_FN Register that tells FOOTNOTE whether to
- "move" or "defer" a footnote collected
- inside a diversion
-#DEFER_BIB_SPACING Tells DEFAULTS to do BIBLIOGRAPHY_SPACING
- if it was called before START
-#DEFER_PAGINATION Tells COLLATE to restore pagination (from
- RESTORE_PAGINATION
-#DELAY_SHIM Instructs DO_QUOTE to delay SHIM when quote
- falls at the top of a page
-#DEPTH_1 Doc header depth with lead adjustment
- (#DOCHEADER_LINES * #DOCHEADER_LEAD)
-#DEPTH_2 Doc header depth without lead adjustment
- (#DOCHEADER_LINES * #DOC_LEAD)
-#DEPTH_TO_B_MARGIN Page length minus #B_MARGIN
-#DIVERSIONS_HY_MARGIN A reasonable value for .hym applied to
- QUOTE, BLOCKQUOTE and EPIGRAPH to
- avoid excessive hyphenation if these are
- set quad left
-#DIVERTED Set to 1 in DIVERT_FN_OVERFLOW; reset
- subsequently in FOOTNOTES when called by
- PROCESS_FN_LEFTOVER to 2 or 3 for use by
- FOOTER to decide whether to in/decrease
- #FN_DEPTH when outputting footnotes
-#DOCHEADER_ADVANCE Distance from top-of-page to baseline of
- docheader
-#DOCHEADER_COLOR Colored docheader? (toggle)
-#DOCHEADER_LEAD Lead of doc header
- (#DOC_LEAD + #DOCHEADER_LEAD_ADJ)
-#DOCHEADER_SPACE_ADJ Lead difference between #DEPTH_1 and
- #DEPTH_2
-#DOC_COVER_START_POS Vertical starting pos of doc cover material
-#DOC_COVERS Print doc covers? (toggle)
-#DOC_COVER_COLOR Colored cover? (toggle)
-#DOC_COVER_START_POS Vertical starting pos of cover material
-#DOC_COVER_TITLE_COLOR Colored doc cover title? (toggle)
-#DOC_COVER_SUBTITLE_COLOR Colored doc cover subtitle? (toggle)
-#DOC_COVER_ATTRIBUTE_COLOR Colored doc cover attribution string? (toggle)
-#DOC_COVER_AUTHOR_COLOR Colored doc cover author(s)? (toggle)
-#DOC_COVER_DOCTYPE_COLOR Colored doc cover doctype? (toggle)
-#DOC_COVER_COPYRIGHT_COLOR Colored doc cover copyright line? (toggle)
-#DOC_COVER_MISC_COLOR Colored doc cover misc line? (toggle)
-#DOC_HEADER Whether to print a doc header (toggle)
-#DOC_LEAD_ADJ Incrementing value (in units) added to
- #DOC_LEAD to fill page to #B_MARGIN
-#DOC_LEAD Leading used in body
-#DOC_L_LENGTH Global L_LENGTH
-#DOC_L_MARGIN Global L_MARGIN
-#DOC_LR_MARGIN_TMP In HEADER, if RECTO_VERSO=1, temporarily
- holds DOC_L_MARGIN during page margin switch
-#DOC_PT_SIZE Point size used for body text
-#DOC_R_MARGIN Global R_MARGIN
-#DOCS Always 1 after START
-#DOC_TYPE 1=default, 2=chapter, 3=named, 4=letter
-#DOING_COVER Tells PRINT_AUTHORS that it's printing
- the authors for a cover or doc cover
-#DONE_ONCE Keeps track of how many times footnotes
- have been collected inside the same diversion
-#DONT_RULE_ME Rule this (apparent) first footnote? (toggle)
-#DIVER_LN_OFF Turn linenumbering off in (block)quotes?
- (toggle)
-#DRAFT_WITH_PAGENUM Are we attaching draft/revision info to page
- number? (toggle)
-#EM_ADJUST Amount to raise \(em at END
-#EN_ALLOWS_HEADERS Put page headers on endnotes pages? (toggle)
-#EN_ALLOWS_HEADERS_ALL Put page headers on all endnotes pages?
- (toggle)
-#EN_BQ_AUTOLEAD Register created by EN_BLOCKQUOTE_AUTOLEAD
-#EN_BQ_LEAD Leading of blockquotes on endnotes pages
-#EN_FIGURE_SPACE Width of \0, for use with formatting endnotes
-#EN_FIRST_PAGE Tells PRINT_PAGE_NUMBER about endnotes
- first page number
-#EN_FIRST_PN Page number that appears on page 1 of
- endnotes pages.
-#EN_HDRFTR_CENTER Should we print centre string of
- headers/footers on endnotes pages? (toggle)
-#EN_LEAD Lead of endnotes
-#EN_LN_BRACKETS Are we using brackets for line-numbered
- endnotes (toggle)
-#EN_LN_SEP Are we using a separator for line-numbered
- endnotes (toggle)
-#EN_MARK \n(ln when \*[EN-MARK] is called
-#EN_MARK_2 \n(ln when ENDNOTE is called
-#EN_MARKER_STYLE 1=NUMBER; 2=LINE
-#EN_NO_COLS Do not set endnotes in columns? (toggle)
-#EN_NO_FIRST_PN Put pagenumber on 1st page of endnotes?
- (toggle)
-#EN_NUMBERS_ALIGN_RIGHT Hang and align endnote numbers right?
- (toggle)
-#EN_NUMBERS_ALIGN_LEFT Align endnote numbers with left margin?
- (toggle)
-#EN_NUMBERS_PLACEHOLDERS Number of placeholders when endnote numbers
- hang and align right
-#EN_NUMBER_L_LENGTH Line length for endnote numbers when they're
- right aligned
-#EN_PP_INDENT First line indent of paras in multi-para
- endnotes
-#EN_PP_SPACE Space multi-paras in endnotes? (toggle)
-#EN_PS ps of endnotes
-#EN_Q_AUTOLEAD Register created by EN_QUOTE_AUTOLEAD
-#EN_Q_LEAD Leading of quotes on endnotes pages
-#EN_REF Put REFs in endnotes? (toggle)
-#EN_SINGLESPACE Single space endnotes pages? (toggle)
-#EN_STRING_CAPS Should ENDNOTES capitalize the endnotes
- string? (toggle)
-#EN_STRING_UNDERSCORE Underscore endnotes page head? (toggle)
-#EN_TITLE_UNDERSCORE Underscore endnotes document identifier?
- (toggle)
-#EN_TEXT_INDENT Page offset for text of endnotes when
- numbers right align
-#END_QUOTE For PP=0 indenting; did we just end a quote?
- (toggle)
-#ENDNOTE Are we in an endnote? (toggle)
-#ENDNOTE_REFS Are REFs going to endnotes? (toggle)
-#ENDNOTES Are we in an endnote (for FOOTERs; toggle)
-#EPI_ACTIVE Are we in an epigraph? (toggle)
-#EPI_COLOR Colored epigraphs? (toggle)
-#EPI_DEPTH Depth of epigraph from first baseline to
- last
-#EPI_FITS Does epigraph fit on page/column? (toggle)
-#EPIGRAPH Did we have an epigraph? (toggle)
-#EPI_LEAD_DIFF Difference between #DOC_LEAD and #EPI_LEAD
-#EPI_LEAD Leading of epigraph; set by AUTOLEAD
-#EPI_LINES_EVEN Even # of lines at end of epi crossing page in
- TYPEWRITE (d-spaced)?
-#EPI_LINES Number of lines in the epigraph
-#EPI_LINES_TO_END Number of epigraph lines remaining after
- footer trap is sprung
-#EPI_LINES_TO_TRAP Number of epigraph lines till footer trap is
- sprung
-#EPI_L_LENGTH Epigraph line length
-#EPI_OFFSET Left margin of epigraphs
-#EPI_OFFSET_VALUE Epigraph indent as a function of page offset
-#EPI_ON Are we in an epigraph? (toggle)
-#EPI_WHITESPACE Space after epigraph to compensate for
- epigraph leading
-#FIELD Incrementing register tacked onto LETTERHEAD
-#FINIS Was FINIS invoked? (toggle)
-#FINIS_COLOR Colored FINIS? (toggle)
-#FN_AUTOLEAD Autolead value of footnotes
-#FN_BL_INDENT Left indent of INDENT BOTH in footnotes
-#FN_BR_INDENT Right indent of INDENT BOTH in footnotes
-#FN_COUNT Which fn marker to print; also to
- tell mom to reserve space for and print
- the rule above footnotes
-#FN_COUNT_AT_FOOTER The FN_COUNT after FOOTNOTES has been
- output in FOOTER
-#FN_COUNT_FOR_COLS Holds a separate footnote count for columns
- (so they don't reset to 0 1 until page break)
-#FN_DEFER Defer footnote to next page/column? (toggle)
- If 0, don't defer.
-#FN_DEFER_SPACE Whether to deposit space before
- footnote 1 because there's a deferred
- footnote on the page
-#FN_DEPTH Depth of footnote diversion(s)
-#FN_FOR_EPI Signals to epigraph that a footnote is being
- processed
-#FN_GAP When there are footnotes on a page, the
- difference between where FOOTER will be
- sprung and the next legal baseline.
- Used in VFP_CHECK.
-#FN_LEAD Lead in footnotes after FN_AUTOLEAD is
- applied
-#FN_L_INDENT Left indent of INDENT LEFT in footnotes
-#FN_LINES Number of lines in fn; used to calculate
- fn depth
-#FN_LN_BRACKETS Are footnote linenumber brackets being used?
- (toggle)
-#FN_LN_SEP Is a footnote linenumber separator being used?
- (toggle)
-#FN_MARK \n(ln when \*[FN-MARK] is called
-#FN_MARK_2 \n(nl when FOOTNOTE is called
-#FN_MARKERS Print footnote markers? (toggle)
-#FN_MARKER_STYLE 1=STAR; 2=NUMBER
-#FN_NUMBER The footnote number attached to running text
- (and fns) when numbers instead of
- star/dagger is being used for footnootes
- numbers
-#FN_OVERFLOW_TRAP_POS The register that sets the position of
- trap FN_OVERFLOW_TRAP.
-#FN_R_INDENT Right indent of INDENT RIGHT in footnotes
-#FN_REF Put REFs in footnotes? (toggle)
-#FN_RULE_ADJ # of points to raise footnote separator from
- its baseline
-#FN_RULE_LENGTH Length of footnote separator rule
-#FN_RULE Print fn rule? (toggle)
-#FN_SPACE Post footnote space
-#FN_WAS_DEFERED Tells HEADER about a deferred footnote
-#FOOTER_DIFF In TRAPS, the difference between the
- original #B_MARGIN and #VISUAL_B_MARGIN
-#FOOTER_GAP Amount of space between end of text and
- page #
-#FOOTER_MARGIN Amount of space between page # and bottom
- of page
-#FOOTER_POS Position of footer trap (required for
- collecting footnotes inside a diversion)
-#FOOTERS_ON Are we using footers? (toggle)
-#FOOTERS_WERE_ON Were footers on? - used in FINIS and BLANKPAGE
- (toggle)
-#FOOTNOTE_COLOR Colored footnotes? (toggle)
-#FROM_DIVERT_FN Signals to FOOTNOTE, when run from
- within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING
- to the total area allowable for running text
-#FROM_FOOTER In col to col footnote processing, tells
- FOOTNOTE that FOOTNOTES was output from
- FOOTER.
-#FROM_HEADER In col to col footnote processing, tells
- FOOTNOTE that FOOTNOTES was output from
- HEADER.
-#FULLSPACE_QUOTES Should we fullspace quotes? (toggle)
-#GET_DEPTH Signals to FOOTNOTE that it should
- measure the depth of current footnotes
- plus the most recently added one, except
- where the footnote is to be deferred to
- the next page or column
-#GUTTER Width of gutter between columns
-#HDRFTR_CENTER_CAPS CENTER part of header/footer in caps?
- (toggle; default=off)
-#HDRFTR_COLOR Colored headers/footers? (toggle)
-#HDRFTR_CTR_PAD_LEFT Amount of hdrftr CENTER padding on the left
-#HDRFTR_CTR_PAD_RIGHT Amount of hdrftr CENTER padding on the right
-#HDRFTR_CTR_PAD_TMP Temp storage of left hdrftr CENTER padding
- (for recto/verso switch)
-#HDRFTR_HEIGHT Cap height of $HDRFTR_RECTO/$HDRFTR_VERSO
- strings
-#HDRFTR_LEFT_CAPS Left part of header/footer in caps?
- (toggle; default=off)
-#HDRFTR_RIGHT_CAPS Right part of header/footer in caps?
- (toggle; default=on)
-#HDRFTR_RULE_COLOR Colored header/footer rule? (toggle)
-#HDRFTR_RULE_GAP Space between header/footer and
- header/footer rule
-#HDRFTR_RULE Print head/footer rule? (toggle)
-#HDRFTR_TMP_CAPS_SWITCH Temporarily holds HDRFTR_LEFT_CAPS value if
- #SWITCH_HDRFTR=1
-#HEAD 1=main/section head 2=subhead
-#HEAD_CAPS Print section titles in caps? (toggle)
-#HEAD_COLOR Colored heads? (toggle)
-#HEADER_GAP Distance from header to running text
-#HEADER_MARGIN Distance from top of page to header
-#HEADERS_ON Headers on? (toggle)
-#HEADER_STATE Saves header state in COLLATE for use in
- START after COLLATE
-#HEADERS_WERE_ON Were headers on? - used in BLANKPAGE (toggle)
-#HEAD_NUM Head number
-#HEAD_SPACE 2 line spaces before heads?
- (toggle; 1=yes, 0=no)
-#HORIZ_MARK Horizontal
-#HOW_MANY Number of blank pages to output
-#IGNORE Should we ignore this macro? Set to 1 in
- TYPEWRITE.
-#IN_BIB_LIST Tells ITEM we're doing a bibliography in
- list style
-#INDENT_FIRST_PARAS Indent first paras? (toggle)
-#INDENT_FIRSTS Tells footnotes to leave INDENT_FIRST_PARAS
- alone if it's on for running text.
-#ITALIC_MEANS_ITALIC For TYPEWRITE. 1=yes; 0=no
-#L_LENGTH_FOR_EPI Stores line length at top of doc for use
- with EPIGRAPH when columns are on
-#L_MARGIN_DIFF Difference between DOC_L_MARGIN and
- L_MARGIN
-#LEFT_CAP_HEIGHT Cap height of left string in headers/footers
-#LEGAL_BASELINE Calculates vert. position of next legal
- baseline in SHIM
-#LETTER_STYLE 1=BUSINESS 2=PERSONAL
-#LINEBREAK Did we have a linebreak? (toggle)
-#LINEBREAK_COLOR Colored linebreak? (toggle)
-#LINENUMBERS Holds various states of line-numbering when
- line numbering is enabled
-#LINES_PER_PAGE # of lines (at DOC_LEAD) that fit on
- page after #B_MARGIN is set
-#LN Are line numbers on? (toggle)
-#MISC_&lt;n&gt; Used to print "next" misc lines in DO_COVER
-#MISC_NUM Number of MISC lines
-#MISCS =#MISC_NUM in DO_COVER
-#MN_OVERFLOW_LEFT If 1, left margin note text overflows
-#MN_OVERFLOW_RIGHT If 1, right margin note text overflows
-#n%_AT_PAGENUM_SET Page # from n% when PAGENUMBER invoked
-#NEEDS_SPACE Instruct FOOTNOTE, when called by
- PROCESS_FN_IN_DIVER, that if the footnote
- had to be deferred, the VFP must be
- raised by 1v (set in DIVER_FN_2_PRE)
-#NEXT_AUTHOR Supplies correct digit to AUTHOR_&lt;#&gt;
- when printing authors in doc header
-#NEXT_LN Next linenumber when \n(ln has to be stored
- because linenumbering suspended
-#NEXT_MISC Incrementing counter for misc lines in
- DO_COVER
-#NO_BACK_UP Instructs FN_OVERFLOW_TRAP not to
- subtract 1 line of footnote lead from
- FN_OVERFLOW in a PREV_FN_DEFERRED
- situation.
-#NO_SPACE When para spacing is active, instructs
- PP not to add space after a quote or blockquote.
-#NO_TRAP_RESET Should we reset page traps? (toggle)
-#NUM_AUTHORS # of authors mod 2 to test if odd or even
- # of authors
-#NUM_MISCS Number of args passed to MISC
-#NUMBER_HEAD Are heads numbered? (toggle)
-#NUMBER_PH Are paraheads numbered? (toggle)
-#NUMBER_SH Are subheads numbered? (toggle)
-#NUM_COLS Number of columns per page
-#NUM_FIELDS Incrementing register used to match
- #TOTAL_FIELDS
-#OK_PROCESS_LEAD Initial processing of TOC and endnote
- leading is deferred until OK_PROCESS_LEAD=1
-#ORIGINAL_B_MARGIN The value for #B_MARGIN as set by the
- macro B_MARGIN
-#ORIGINAL_DOC_LEAD The lead for PRINT_STYLE 1 as set in
- PRINTSTYLE; required so that PRINT_STYLE 1
- footnotes have an unadjusted lead of
- 12 points
-#OVERFLOW Signals to FOOTNOTE that some of the
- footnote text won't fit on the page
-#PAGE_NUM_ADJ What to add to n% to get #PAGENUMBER
-#PAGENUMBER The page number
-#PAGENUM_STYLE_SET Did we set pagenumber style? (toggle)
-#PAGE_NUM_H_POS 1=left 2=CENTER 3=right; default=2
-#PAGE_NUM_COLOR Colored pagenumbers? (toggle)
-#PAGE_NUM_HYPHENS Print hyphens surrounding page numbers?
- (toggle)
-#PAGE_NUM_HYPHENS_SET Did user set (or unset) hyphens around page
- numbers? (toggle)
-#PAGE_NUM_POS_SET Did user set page number position? (toggle)
-#PAGE_NUM_SET Test if PAGE_1_NUM was used to set 1st page
- number
-#PAGE_NUMS Print page numbers? (toggle)
-#PAGE_NUM_V_POS 1=top 2=bottom; default=2
-#PAGE_TOP \n(nl after HEADER completes itself
-#PH_COLOR Colored paraheads? (toggle)
-#PH_NUM Parahead number
-#PAGE_POS Exact position on page during a diversion
- (required for collecting footnotes inside
- a diversion)
-#PAGINATE_TOC Is toc pagination on? (toggle)
-#PAGINATE_WAS_ON Keeps track of pagination state while
- outputting blank pages
-#PAGINATION_STATE Saves pagination state in COLLATE for use in
- START after a COLLATE
-#PAGINATION_WAS_ON Was pagination on? - used in FINIS (toggle)
-#PP 0 at first para; auto-increments
-#PP_AT_PAGE_BREAK # of last (incl. partial) para on page
-#PP_INDENT How much to indent paras
-#PP_SPACE Put space before paras? (toggle)
-#PP_SPACE_SUSPEND Suspend para spacing for blockquotes and
- epigraphs
-#PP_STYLE_PREV In footnotes, stores PP style in effect
- prior to invoking FOOTNOTE
-#PP_STYLE Regular para=1; quote or epi para=2
-#PRINT_PAGENUM_ON_PAGE_1 Should we print the page number on first
- page of doc when footers are on? (toggle)
-#PRINT_STYLE Typewrite=1, typeset=2
-#PT_SIZE_IN_UNITS Stored value of \n[.ps] from last time
- PT_SIZE was called
-#Q_AUTOLEAD Register created by QUOTE_AUTOLEAD
-#Q_DEPTH Depth of quote
-#Q_FITS Does this quote fit on one page/column?
- (toggle)
-#Q_LEAD Leading of quotes
-#Q_LEAD_DIFF Difference between leading of running text
- and the leading used in quotes/blockquotes
-#Q_LEAD_REAL Leading of quotes and blockquotes saved at the
- ends of their respective diversions
-#Q_L_LENGTH Line length of quotes
-#Q_OFFSET Page offset for quotes
-#Q_OFFSET_VALUE Factor by which to multiply PP_INDENT to
- offset quotes
-#Q_PARTIAL_DEPTH The amount of a quote/blockquote that fits at
- the bottom of a page when a quote/blockquote
- spans pages
-#Q_PP In PP, stores para # in QUOTE. Removed in
- ENDQUOTE.
-#Q_SPACE_ADJ The flexible amount of whitespace to add before
- and after a quote/blockquote
-#Q_TOP Vertical place on page that a quote starts
-#QUOTE 1=PQUOTE, 2=BQUOTE
-#QUOTE_COLOR Color quotes (poetic)? (toggle)
-#QUOTE_LN Linenumber quotes? (toggle)
-#RECTO_VERSO Switch HEADER_LEFT and HEADER_RIGHT on
- alternate pages? (toggle); default=0
-#REF_HYPHENATE Hyphenate REFs? (toggle)
-#REF_WARNING Have we issued a ref warning? (toggle)
-#REPEAT Number of times to repeat linebreak
- character
-#RESERVED_SPACE Just enough room to put 1 more line of
- footnotes on the page
-#RESET_EN_PP Holds value of register #EN_PP_INDENT
-#RESET_FN_COUNTERS 1 = "moved" footnote collected in a diversion
- 2 = "deferred" fn collected in a diversion
-#RESET_FN_NUMBER Should fn# start at 1 on every page?
- (toggle)
-#RESET_L_LENGTH Stores current line length when necessary
-#RESET_PARA_SPACE Holds current value of toggle register
- #PP_SPACE
-#RESET_PP_INDENT Stores value of PP_INDENT when necessary
-#RESET_QUOTE_SPACING Stores value of toggle register
- #FULLSPACE_QUOTES (used in endnotes)
-#RESTORE_DOC_LEAD Holds value of current doc lead (used in
- endnotes)
-#RESTORE_HY Restore hyphenation after .][? (toggle)
-#RESTORE_OFFSET Page offset at moment footer trap is sprung;
- not currently used
-#RESTORE_TOC_PN_PADDING Saves #TOC_PN_PADDING in TOC prior to
- processing $FIRST_DOC_TITLE
-#RIGHT_CAP_HEIGHT Cap height of right string in
- headers/footers
-#RULED Tells FOOTNOTE if a rule (or space has been
- put above the first footnote on the page
-#RUNON_FN_IN_DIVER If #LN=1, if we're in a (block)quote, instructs
- FOOTNOTE to unformat diversion RUNON_FN_IN_DIVER
-#RUNON_FOOTNOTES If #LN=1, instructs FOOTNOTE to unformat
- diversion RUNON_FOOTNOTES
-#RUN_ON Are we using run-on footnotes? (toggle)
-#SAVED_DIVER_FN_COUNT In the case of a footnote inside a
- diversion that should be treated as a
- "normal" footnote, FOOTNOTE needs to
- distinguish between a "normal" deferred
- footnote (always the 1st footnote on the
- page) and one that only looks as if
- it should be deferred, when, in fact,
- it's an overflow; this register lets
- FOOTNOTE know whether the diversion
- footnote is, in fact, the first on the
- page.
-#SAVED_FN_COUNT #FN_COUNT+1 prior to +#FN_COUNT; used
- in FOOTNOTES while gathering fns inside
- diversions
-#SAVED_FN_COUNT_FOR_COLS #FN_COUNT_FOR_COLS+1 prior to
- +#FN_COUNT_FOR_COLS; used in FOOTNOTES
- while gathering fns inside diversions
-#SAVED_FN_DEPTH_1 Footnote depth prior to adding footnote
- diversion depth to FN_DEPTH; used when
- footnote text will overflow
-#SAVED_FN_DEPTH_2 Footnote depth after to adding footnote
- diversion depth to FN_DEPTH; used when
- footnote text will overflow
-#SAVED_FOOTER_POS Position of FOOTER in DO_QUOTE (hack)
-#SAVED_LEAD In FOOTER and DO_FOOTER, stores the
- lead in effect prior to outputting
- FOOTNOTES or performing either
- PROCESS_FN_LEFTOVER or
- PROCESS_FN_IN_DIVERSION; both the
- diversion FOOTNOTES and the two macros
- have, for PRINT_STYLE 2, an AUTOLEAD
- call, which requires that an LS be
- performed with the #SAVED_LEAD in
- order to remove register #AUTO_LEAD or
- #AUTO_LEAD_FACTOR.
-#SEP_TYPE Set to 1 if LIST separator is ( or [ or {
-#SH_LEAD_ADJUST #DOC_LEAD/8 (TYPESET) or /2 (TYPEWRITE)
- (used for subhead spacing)
-#SH_NUM Subhead number
-#SHIM Amount of lead required to advance to
- next legal baseline
-#SILENT_BQUOTE_LN "Silently" linenumber blockquotes? (toggle)
-#SILENT_QUOTE_LN "Silently" linenumber quotes? (toggle)
-#SINGLE_SPACE Is TYPEWRITE in single space mode? (toggle)
-#SKIP_FOOTER If 1, instructs DO_FOOTER to do nothing
- if B_MARGIN falls below FOOTER_MARGIN
-#SLANT_MEANS_SLANT For TYPEWRITE. 1=yes; 0=no
-#SLANT_WAS_ON Keeps track of SLANT when it needs to go off
- for a while
-#SPACE_REMAINING Space remaining to footer trap; used to
- decide whether or not to defer a footnote
-#SR_ADJ_FACTOR An adjustment factor that compensates
- for the fact that #SPACE_REMAINING
- sometimes reports a fractionally larger
- space than is actually available for
- footnote text.
-#START If 1, signals completion of START
-#START_FOR_FOOTERS Toggle set in START; signals to
- PRINT_HDRFTR that START has been invoked,
- allowing PRINT_HDRFTR to decide whether or
- not to print a footer on page 1
-#START_FOR_MNinit If 1, defer processing MN_INIT until #START
-#STORED_PP_INDENT Temporarily holds value of #PP_INDENT
-#SUITE Current page number (for letters)
-#SUP_PT_SIZE Point size of superscript
-#SUSPEND_PAGINATION Suspend pagination prior to endnotes?
-#SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT?
- (toggle)
-#T_MARGIN_LEAD_ADJ \n(.v-12000; ensures critically accurate
- placement of first lines on pages when
- doc processing is not being used and
- a T_MARGIN has been set
-#TAB_OFFSET# "#" at the end is from $CURRENT_TAB
-#TERMINATE Has TERMINATE been called? (toggle)
-#TOC_AUTHORS Whether to append author(s) to toc doc
- title entries (toggle)
-#TOC_ENTRY_PN Current page number when a toc entry is
- collected
-#TOC_FIRST_PAGE If 1, tells PRINT_PAGE_NUMBER that this
- is the first page of the toc
-#TOC_LEAD Leading of toc pages
-#TOC_PN_PADDING Max. # of placeholders for toc entries
- page numbers
-#TOC_PS Point size of toc pages
-#TOC_RV_SWITCH Switch L/R margins of toc pages
-#TOC_HEAD_INDENT Indent of toc head entries
-#TOC_HEAD_SIZE_CHANGE ps in/decrease of toc head entries****
-#TOC_PH_INDENT Indent of toc parahead entries
-#TOC_PH_SIZE_CHANGE ps in/decrease of toc parahead entries****
-#TOC_SH_INDENT Indent of toc subhead entries
-#TOC_SH_SIZE_CHANGE ps in/decrease of toc subhead entries****
-#TOC_TITLE_INDENT Indent of toc doc title entries
-#TOC_TITLE_SIZE_CHANGE ps in/decrease of toc doc title entries****
-#TOTAL_FIELDS Total number of letter header fields
-#UNDERLINE_ITALIC For TYPEWRITE. 1=yes; 0=no
-#UNDERLINE_QUOTE Underline pquotes? (toggle)
-#UNDERLINE_SLANT For TYPEWRITE. 1=yes; 0=no
-#UNDERLINE_WAS_ON In HEADER to re-enable running text
- UNDERLINE (toggle)
-#USERDEF_HDRFTR User defined single string recto/verso
- header/footer? (toggle)
-#USERDEF_HDRFTR_RECTO_QUAD 1=left, 2=CENTER, 3=right
-#USERDEF_HDRFTR_VERSO_QUAD 1=left, 2=CENTER, 3=right
-#USER_DEF_HEADER_CENTER User defined CENTER title? (1=yes);
- used in COPYSTYLE
-#USER_DEF_HEADER_LEFT User defined CENTER title? (1=yes);
- used in COPYSTYLE
-#USER_DEF_HEADER_RIGHT User defined CENTER title? (1=yes);
- used in COPYSTYLE
-#VARIABLE_FOOTER_POS Wandering trap position for processing
- footnotes and footers; pos depends on
- footnotes
-#VISUAL_B_MARGIN Set in TRAPS, what \n(nl would report
- on the last line of running text before
- FOOTER is sprung.
-#VFP_DIFF #FN_DEPTH minus #SAVED_FN_DEPTH; the
- number of footnote lines that will fit
- on the page when there will be over, and
- therefore the amount by which to raise
- the VFP for footnotes with overflow after
- the 1st footnote.
-y Vertical position stored with mk in hdrftrs.
-
-+++STRINGS+++
-
-$1ST_LETTER First letter of first arg to LIST
-$ADJUST_BIB_LEAD 2nd arg to BIBLIOGRAPHY_LEAD; if not blank
- adjust bib leading
-$ATTRIBUTE_STRING "by" line in doc header
-$AUTHOR_1...9 Document author(s)
-$AUTHOR_FAM Family to use for author in doc header
-$AUTHOR_FT Font to use for author in doc header
-$AUTHOR_SIZE_CHANGE ps in/decrease of author in doc header*
-$AUTHOR_PT_SIZE Absolute ps of authors
-$BIB_FAM Bibliography page family
-$BIB_FT Bibliography page font
-$BIB_LEAD Base leading for bibliographies
-$BIB_LIST_SEPARATOR Separator between enumerator and text
- when outputting bibliographies in LIST style
-$BIB_LIST_PREFIX Prefix before enumerator when outputting
- bibliographies in LIST style
-$BIB_PN_STYLE Format of bibliography page numbers
-$BIB_SPACE Post entry space for bibliographies
-$BIB_STRING Bibliography title string
-$BIB_STRING_FAM Bib title family
-$BIB_STRING_FT Bib title font
-$BIB_STRING_QUAD Bib title quad
-$BIB_STRING_SIZE_CHANGE Bib title size (+ or -)
-$BQ_LN_GUTTER Gutter between line numbers and bquotes in
- bquotes
-$BQUOTE_COLOR Blockquote color
-$BQUOTE_FAM Family to use for blockquotes
-$BQUOTE_FT Font to use for blockquotes
-$BQUOTE_QUAD Quad value for blockquotes
-$BQUOTE_SIZE_CHANGE ps in/decrease of blockquotes*
-$CENTER_TITLE What to put in the middle of header
- title
-$CHAPTER The chapter number
-$CHAPTER_STRING What to print whenever the word
- "chapter" is required
-$CHAPTER_TITLE Chapter title (if there is one)
-$CHAPTER_TITLE_FAM Family of chapter title
-$CHAPTER_TITLE_FT Font of chapter title
-$CHAPTER_TITLE_SIZE_CHANGE ps in/decrease of chapter title*
-$CHAPTER_TITLE_PT_SIZE Absolute ps of chapter title
-$CHAPTER_TITLE_COLOR Color of chapter title
-$COPYRIGHT_FAM Copyright line family
-$COPYRIGHT_FT Copyright line font
-$COPYRIGHT_SIZE_CHANGE Copyright line size*
-$COPYRIGHT_COLOR Copyright line color
-$COPYRIGHT_QUAD Copyright line quad direction
-$COPY_STYLE DRAFT or FINAL
-$COVER_FAM Overall cover family
-$COVER_COLOR Overall cover color
-$COVER_TITLE User-defined cover title string
-$COVER_TITLE_FAM Cover title family
-$COVER_TITLE_FT Cover title font
-$COVER_TITLE_SIZE_CHANGE Cover title size*
-$COVER_TITLE_COLOR Cover title color
-$COVER_SUBTITLE_FAM Cover subtitle family
-$COVER_SUBTITLE_FT Cover subtitle font
-$COVER_SUBTITLE_SIZE_CHANGE Cover subtitle size*
-$COVER_SUBTITLE_COLOR Cover subtitle color
-$COVER_ATTRIBUTE_COLOR Cover attribution string color
-$COVER_AUTHOR_FAM Cover author(s) family
-$COVER_AUTHOR_FT Cover author(s) font
-$COVER_AUTHOR_SIZE_CHANGE Cover author(s) size*
-$COVER_AUTHOR_COLOR Cover author(s) color
-$COVER_DOCTYPE_FAM Cover doctype family
-$COVER_DOCTYPE_FT Cover doctype font
-$COVER_DOCTYPE_SIZE_CHANGE Cover doctype size*
-$COVER_DOCTYPE_COLOR Cover doctype color
-$COVER_COPYRIGHT_FAM Cover copyright family
-$COVER_COPYRIGHT_FT Cover copyright font
-$COVER_COPYRIGHT_SIZE_CHANGE Cover copyright size*
-$COVER_COPYRIGHT_COLOR Cover copyright color
-$COVER_MISC_FAM Cover misc family
-$COVER_MISC_FT Cover misc font
-$COVER_MISC_SIZE_CHANGE Cover misc size*
-$COVER_MISC_COLOR Cover misc color
-$CURRENT_EV \n[.ev] at REF_BRACKETS_START
-$DOC_COVER_FAM Overall doc cover family
-$DOC_COVER_COLOR Overall doc cover color
-$DOC_COVER_TITLE User-defined doc cover title string
-$DOC_COVER_TITLE_FAM Doc cover title family
-$DOC_COVER_TITLE_FT Doc cover title font
-$DOC_COVER_TITLE_SIZE_CHANGE Doc cover title size*
-$DOC_COVER_TITLE_COLOR Doc cover title color
-$DOC_COVER_SUBTITLE_FAM Doc cover subtitle family
-$DOC_COVER_SUBTITLE_FT Doc cover subtitle font
-$DOC_COVER_SUBTITLE_SIZE_CHANGE Doc cover subtitle size*
-$DOC_COVER_SUBTITLE_COLOR Doc cover subtitle color
-$DOC_COVER_ATTRIBUTE_COLOR Doc cover attribution string color
-$DOC_COVER_AUTHOR_FAM Doc cover author(s) family
-$DOC_COVER_AUTHOR_FT Doc cover author(s) font
-$DOC_COVER_AUTHOR_SIZE_CHANGE Doc cover author(s) size*
-$DOC_COVER_AUTHOR_COLOR Doc cover author(s) color
-$DOC_COVER_DOCTYPE_FAM Doc cover doctype family
-$DOC_COVER_DOCTYPE_FT Doc cover doctype font
-$DOC_COVER_DOCTYPE_SIZE_CHANGE Doc cover doctype size*
-$DOC_COVER_DOCTYPE_COLOR Doc cover doctype color
-$DOC_COVER_COPYRIGHT_FAM Doc cover copyright family
-$DOC_COVER_COPYRIGHT_FT Doc cover copyright font
-$DOC_COVER_COPYRIGHT_SIZE_CHANGE Doc cover copyright size*
-$DOC_COVER_COPYRIGHT_COLOR Doc cover copyright color
-$DOC_COVER_MISC_FAM Doc cover misc family
-$DOC_COVER_MISC_FT Doc cover misc font
-$DOC_COVER_MISC_SIZE_CHANGE Doc cover misc size*
-$DOC_COVER_MISC_COLOR Doc cover misc color
-$DOC_FAM Predominant font family used in the
- document
-$DOC_QUAD Quad used for body text (justified or
- left)
-$DOC_TITLE Overall doc title that gets printed in
- headers/footers (mostly for use with
- collated docs where each doc is an
- article with a different title)
-$DOC_TYPE Document type (default, chapter, named,
- letter)
-$DOCHEADER_COLOR Color of docheader
-$DOCHEADER_FAM Family used for all parts of the docheader
-$DOCHEADER_LEAD_ADJ +|- value applied to #DOC_LEAD to
- in/decrease leading of doc header
-$DOCTYPE_FAM Family to use for DOCTYPE string in
- doc header
-$DOCTYPE_FT Font to use for DOCTYPE string in
- doc header
-$DOCTYPE_SIZE_CHANGE ps in/decrease of DOCTYPE string in
- doc header*
-$DOCTYPE_PT_SIZE Absolute ps of DOCTYPE
-$DRAFT The draft number (string valued)
-$DRAFT_STRING What to print whenever the word "draft"
- is required
-EN_MARK Inline, gets #EN_MARK (\(ln)
-$EN_CLOSE_BRACKET Close bracket for line-number enumerated
- endnotes
-$EN_FAMILY Family for endnotes
-$EN_FT Font for endnotes
-$EN_LINENUMBER String to print for line-number enumerators
- in line-numbered endnotes
-$EN_LN_FAM Family for line-numbers in line-number
- identified endnotes
-$EN_LN_FT Font for line-numbers in line-number
- identified endnotes
-$EN_LN_GAP Gap to leave in initial endnote lines
- between line-number identifies and text
-$EN_OPEN_BRACKET Open bracket for line-number enumerated
- endnotes
-$EN_LN_SIZE_CHANGE Size change (+ or -) for line-numbers in
- line-number identified endnotes
-$EN_PN_STYLE Pagenumbering style for endnotes pages
-$EN_QUAD Quad for endnotes
-$EN_STRING Endnotes page head
-$EN_STRING_FAM Endnotes page head family
-$EN_STRING_FT Endnotes page head font
-$EN_STRING_QUAD Endnotes page head quad direction
-$EN_STRING_SIZE_CHANGE Endnotes page head size***
-$EN_TITLE Endnote document identifier
-$EN_TITLE_FAM Endnote document identifier family
-$EN_TITLE_FT Endnote document identifier font
-$EN_TITLE_QUAD Endnote document identifier quad
- direction
-$EN_TITLE_SIZE_CHANGE Endnote document identifier size***
-$EN_NUMBER_FAM Endnote numbering family
-$EN_NUMBER_FT Endnote numbering font
-$EN_NUMBER_SIZE_CHANGE Endnote numbering size***
-$EPI_AUTOLEAD Autolead value (decimals ok) of
- epigraphs
-$EPI_COLOR Color of epigraphs
-$EPI_FAM Family to use in epigraphs
-$EPI_FT Font to use in epigraphs
-$EPI_QUAD Quad in block-style epigraphs
- (justified or left)
-$EPI_SIZE_CHANGE ps in/decrease of epigraphs*
-$EVAL_BIB_SPACE Temporary string to find out if the
- arg to BIBLIOGRAPHY_SPACING ended in "v"
-$FINIS_COLOR Color of FINIS string
-$FINIS_STRING What to print when FINIS macro is
- invoked
-$FIRST_DOC_TITLE 1st doc's title captured in COLLATE
-FN_MARK Inline, gets #FN_MARK (\n(ln)
-$FN_CLOSE_BRACKET Close bracket for line-number identified
- footnotes
-$FN_FAM Family used in footnotes
-$FN_FT Font used in footnotes
-$FN_LINENUMBER String to print before footnotes when
- line-numbering enabled for footnotes
-$FN_LN_SEP Separator after line-number identified
- footnotes
-$FN_OPEN_BRACKET Open bracket for line-number identified
- footnotes
-$FN_QUAD Quad used in footnotes
-$FN_SIZE_CHANGE ps in/decrease of footnotes*
-$FOOTNOTE_COLOR Footnote color
-$HDRFTR_CENTER What to put in CENTER part of headers;
- default doctype
-$HDRFTR_CENTER_FAM Family of CENTER part of headers
-$HDRFTR_CENTER_FT Font of centre part of headers
-$HDRFTR_CENTER_NEW HDRFTR_CENTER after the start of TOC;
- defined in HDRFTR_CENTER if
- HDRFTR_CENTER is called as
- FOOTER_CENTER
-$HDRFTR_CENTER_OLD HDRFTR_CENTER just prior to start of
- TOC; defined in HDRFTR_CENTER if
- HDRFTR_CENTER is called as
- FOOTER_CENTER
-$HDRFTR_CENTER_SIZE_CHANGE ps in/decrease of centre title in
- headers**
-$HDRFTR_COLOR Color of headers/footers
-$HDRFTR_FAM Family to use in headers
-$HDRFTR_LEFT_FAM Family of left part of headers
-$HDRFTR_LEFT_FT Font of left part of headers
-$HDRFTR_LEFT_SIZE_CHANGE ps in/decrease of author in headers**
-$HDRFTR_LEFT What to put in left part of headers;
- default author
-$HDRFTR_RIGHT_FAM Family of right part of headers
-$HDRFTR_RIGHT_FT Font of right part of headers
-$HDRFTR_RIGHT_SIZE_CHANGE ps in/decrease of right part of
- headers**
-$HDRFTR_RIGHT What to put in right part of headers;
- default title
-$HDRFTR_SIZE_CHANGE ps in/decrease of headers*
-$HDRFTR_TMP_SIZE_CHANGE_SWITCH Temporarily holds
- HDRFTR_LEFT_SIZE_CHANGE if
- #SWITCH_HDRFTRS=1
-$HDRFTR_TMP_SWITCH Temporarily holds HDRFTR_LEFT if
- #SWITCH_HDRFTRS=1
-$HEAD_COLOR Head color
-$HEAD_FAM Family to use for section titles
-$HEAD_FT Font to use for section titles
-$HEAD_QUAD Quad value of section titles
-$HEAD_SIZE_CHANGE ps in/decrease of section titles*
-$LINEBREAK_CHAR Character that marks line breaks
-$LINEBREAK_CHAR_V_ADJ +|- amount by which to raise/lower
- linebreak character
-$LAST_CHAR Temporary string used to discover whether
- user has remembered to put a digit after
- ROMAN or roman in arg to LIST
-$LINEBREAK_COLOR Linebreak color
-$LIST_ARG_1 The first arg to LIST (minus digits if
- ROMAN or roman
-$LN_GUTTER Gutter to leave between line numbers
- and text
-$LN_INC 2nd arg to NUMBER_LINES as a string
-$LN_NUM 1st arg to NUMBER_LINES as a string
-$MISC_COLOR Misc line color
-$MISC_QUAD Misc line quad
-PAGE# For use in hdrftr strings where page #
- is needed; \*[PAGE]
-$PAGENUM_COLOR Page number color
-$PAGENUM_STYLE String passed to PAGENUM_STYLE
-$PAGE_NUM_FAM Family of page numbers
-$PAGE_NUM_FT Font of page numbers
-$PAGE_NUM_SIZE_CHANGE ps in/decrease of page numbers
-$PAPER Paper size (LETTER, A4, LEGAL);
- default=LETTER
-$PH_COLOR Parahead color
-$PP_FT Font used in paragraphs
-$ROMAN_WIDTH The digit(s) appended to ROMAN or
- roman LIST args
-$Q_LN_GUTTER Gutter between linenumbers and quotes
- in quotes
-$QUOTE_COLOR Quote (poetic) color
-$QUOTE_FAM Family to use for pquotes
-$QUOTE_FT Font to use for pquotes
-$QUOTE_SIZE_CHANGE ps in/decrease of pquotes*
-$REF_BIB_INDENT 2nd line indent value for references in
- bibliographies
-$REF_EN_INDENT 2nd line indent value for references in
- endnotes
-$REF_FN_INDENT 2nd line indent value for references in
- footnotes
-$RESTORE_SS_VAR Saves \*[$SS_VAR] for use with ref*build
-#REVISION The revision number (string valued)
-$REVISION_STRING What to print whenever the word
- "revision" is required
-$SH_FAM Family to use in subheads
-$SH_FT Font to use in subheads
-$SH_SIZE_CHANGE ps in/decrease of subheads*
-$SH_COLOR Subhead color
-$SUBTITLE Document subtitle
-$SUBTITLE_FAM Family to use for subtitle in doc
- header
-$SUBTITLE_FT Font to use for subtitle in doc header
-$SUBTITLE_SIZE_CHANGE ps in/decrease of subtitle*
-$SUBTITLE_PT_SIZE Absolute ps of subtitle
-$SUITE The #SUITE number register
-$TITLE Document title
-$TITLE_FAM Family to use for title in doc header
-$TITLE_FT Font to use for title in doc header
-$TITLE_PT_SIZE Absolute point size of title in docheader
-$TITLE_SIZE_CHANGE ps in/decrease of title in doc header*
-$TOC_AUTHORS What to print after toc doc title entry
- if #TOC_AUTHORS=1
-$TOC_FAM Family to use on toc pages
-$TOC_HEAD_FAM Family of toc head entries
-$TOC_HEAD_FT Font of toc head entries
-$TOC_HEAD_ITEM A head as collected for TOC_ENTRIES
-$TOC_HEADER_FAM Family to use for "Contents"
-$TOC_HEADER_FT Font to use for "Contents"
-$TOC_HEADER_QUAD Quad direction of "Contents"
-$TOC_HEADER_SIZE ps in/decrease of "Contents"****
-$TOC_HEADER_STRING Header string of first toc page
-$TOC_PN Sets up toc leaders + entry pn
- (typeset)
-$TOC_PN_FAM Family for toc entries page numbers
-$TOC_PN_FT Font for toc entries page numbers
-$TOC_PN_SIZE_CHANGE ps in/decrease of toc entries page
- numbers
-$TOC_PN_STYLE Page-numbering style of toc pages
-$TOC_PN_TYPEWRITE Sets up toc leaders + entry pn
- (typewrite)
-$TOC_PH_FAM Family of toc parahead entries
-$TOC_PH_FT Font of toc parahead entries
-$TOC_PARAHEAD_ITEM A parahead collected for TOC_ENTRIES
-$TOC_SH_FAM Family of toc subhead entries
-$TOC_SH_FT Font of toc subhead entries
-$TOC_SH_ITEM A subhead collected for TOC_ENTRIES
-$TOC_TITLE_FAM Family of toc doc title entries
-$TOC_TITLE_FT Font of toc doc title entries
-$USER_SET_TITLE_ITEM User defined toc doc title entry as
- set by TOC_TITLE_ENTRY
-$UR_PAGINATION_STYLE Pagination style prior to endnotes
-$USERDEF_HDRFTR_RECTO User defined header/footer recto string
-$USERDEF_HDRFTR_VERSO User defined header/footer verso string
-
- *relative to #DOC_PT_SIZE
- **relative to overall ps of headers as set by HEADER_SIZE
- ***relative to overall ps of endnotes
-****relative to overall ps of toc pages
-
-+++PREPROCESSOR KEYWORDS+++
-
-(eqn)
-EQ
-EN
-
-(grn)
-GS
-GE
-GF
-
-(pic)
-PS
-PE
-
-(refer)
-R1
-R2
-[
-]
-
-(tbl)
-TS
-TE
-TH
-
-(grap)
-G1
-G2
-
-(ideal)
-IS
-IE
-
-(chem)
-cstart
-cend
-
-+++ALIASES+++
-
-Please note:
-
-Prior to version 1.1.9, all macros that included the word COLOR had
-aliases that used COLOUR instead. This convenience has now been
-removed, in an effort to reduce the size of the om.tmac file.
-
-Furthermore, if you want the convenience, you'll have to edit the
-om.tmac file. Simply aliasing, say, HEAD_COLOR as HEAD_COLOUR will
-not work, owing to significant changes in the handling of
-docelement control macros that end in _COLOR.
-
-+++The following are for convenience, and header/footer management+++
-
-BREAK_BLOCKQUOTE BREAK_QUOTE
-BREAK_CITATION BREAK_QUOTE
-BREAK_CITE BREAK_QUOTE
-CITATION BLOCKQUOTE
-CITE BLOCKQUOTE
-COL_BREAK COL_NEXT
-DOC_FAM DOC_FAMILY
-DOC_LLENGTH DOC_LINE_LENGTH
-DOC_L_LENGTH DOC_LINE_LENGTH
-DOC_L_MARGIN DOC_LEFT_MARGIN
-DOC_LMARGIN DOC_LEFT_MARGIN
-DOC_LS DOC_LEAD
-DOC_PS DOC_PT_SIZE
-DOC_R_MARGIN DOC_RIGHT_MARGIN
-DOC_RMARGIN DOC_RIGHT_MARGIN
-FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS
-FOOTER_CENTER HDRFTR_CENTER
-FOOTER_CENTRE_CAPS HDRFTR_CENTER_CAPS
-FOOTER_CENTRE HDRFTR_CENTER
-FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS
-FOOTER_LEFT HDRFTR_LEFT
-FOOTER_PLAIN HDRFTR_PLAIN
-FOOTER_RECTO HDRFTR_RECTO
-FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
-FOOTER_RIGHT HDRFTR_RIGHT
-FOOTER_RULE_GAP HDRFTR_RULE_GAP
-FOOTER_RULE HDRFTR_RULE
-FOOTER_VERSO HDRFTR_VERSO
-HDRFTR_RULE_INTERNAL HDRFTR_RULE
-HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS
-HEADER_CENTER HDRFTR_CENTER
-HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS
-HEADER_CENTRE HDRFTR_CENTER
-HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS
-HEADER_LEFT HDRFTR_LEFT
-HEADER_PLAIN HDRFTR_PLAIN
-HEADER_RECTO HDRFTR_RECTO
-HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
-HEADER_RIGHT HDRFTR_RIGHT
-HEADER_RULE_GAP HDRFTR_RULE_GAP
-HEADER_RULE HDRFTR_RULE
-HEADER_VERSO HDRFTR_VERSO
-PAGENUM PAGENUMBER
-PAGINATION PAGINATE
-PP_FT PP_FONT
-PRINT_FOOTNOTE_RULE FOOTNOTE_RULE
-SWITCH_FOOTERS SWITCH_HDRFTR
-SWITCH_HEADERS SWITCH_HDRFTR
-TOC_LS TOC_LEAD
-TOC_PS TOC_PT_SIZE
-
-+++The following are used for docelement type-style control+++
-
-AUTHOR_FAMILY _FAMILY
-AUTHOR_FONT _FONT
-AUTHOR_SIZE _SIZE
-BIBLIOGRAPHY_FAMILY _FAMILY
-BIBLIOGRAPHY_FONT _FONT
-BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
-BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE
-BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
-BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE
-BIBLIOGRAPHY_QUAD _QUAD
-BIBLIOGRAPHY_STRING_FAMILY _FAMILY
-BIBLIOGRAPHY_STRING_FONT _FONT
-BIBLIOGRAPHY_STRING_QUAD _QUAD
-BIBLIOGRAPHY_STRING_SIZE _SIZE
-BLOCKQUOTE_AUTOLEAD Q_AUTOLEAD
-BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
-BLOCKQUOTE_COLOR _COLOR
-BLOCKQUOTE_FAMILY _FAMILY
-BLOCKQUOTE_FONT _FONT
-BLOCKQUOTE_QUAD _QUAD
-BLOCKQUOTE_SIZE _SIZE
-CHAPTER_TITLE_COLOR _COLOR
-CHAPTER_TITLE_FAMILY _FAMILY
-CHAPTER_TITLE_FONT _FONT
-CHAPTER_TITLE_SIZE _SIZE
-COVER_ATTRIBUTE_COLOR _COLOR
-COVER_AUTHOR_COLOR _COLOR
-COVER_AUTHOR_FAMILY _FAMILY
-COVER_AUTHOR_FONT _FONT
-COVER_AUTHOR_SIZE _SIZE
-COVER_COLOR _COLOR
-COVER_COPYRIGHT_COLOR _COLOR
-COVER_COPYRIGHT_FAMILY _FAMILY
-COVER_COPYRIGHT_FONT _FONT
-COVER_COPYRIGHT_QUAD _QUAD
-COVER_COPYRIGHT_SIZE _SIZE
-COVER_DOCTYPE_COLOR _COLOR
-COVER_DOCTYPE_FAMILY _FAMILY
-COVER_DOCTYPE_FONT _FONT
-COVER_DOCTYPE_SIZE _SIZE
-COVER_FAMILY _FAMILY
-COVER_MISC_COLOR _COLOR
-COVER_MISC_QUAD _QUAD
-COVER_SUBTITLE_COLOR _COLOR
-COVER_SUBTITLE_FAMILY _FAMILY
-COVER_SUBTITLE_FONT _FONT
-COVER_SUBTITLE_SIZE _SIZE
-COVER_TITLE_COLOR _COLOR
-COVER_TITLE_FAMILY _FAMILY
-COVER_TITLE_FONT _FONT
-COVER_TITLE_SIZE _SIZE
-DOC_COVER_ATTRIBUTE_COLOR _COLOR
-DOC_COVER_AUTHOR_COLOR _COLOR
-DOC_COVER_AUTHOR_FAMILY _FAMILY
-DOC_COVER_AUTHOR_FONT _FONT
-DOC_COVER_AUTHOR_SIZE _SIZE
-DOC_COVER_COLOR _COLOR
-DOC_COVER_COPYRIGHT_COLOR _COLOR
-DOC_COVER_COPYRIGHT_FAMILY _FAMILY
-DOC_COVER_COPYRIGHT_FONT _FONT
-DOC_COVER_COPYRIGHT_QUAD _QUAD
-DOC_COVER_COPYRIGHT_SIZE _SIZE
-DOC_COVER_DOCTYPE_COLOR _COLOR
-DOC_COVER_DOCTYPE_FAMILY _FAMILY
-DOC_COVER_DOCTYPE_FONT _FONT
-DOC_COVER_DOCTYPE_SIZE _SIZE
-DOC_COVER_FAMILY _FAMILY
-DOC_COVER_MISC_COLOR _COLOR
-DOC_COVER_MISC_QUAD _QUAD
-DOC_COVER_SUBTITLE_COLOR _COLOR
-DOC_COVER_SUBTITLE_FAMILY _FAMILY
-DOC_COVER_SUBTITLE_FONT _FONT
-DOC_COVER_SUBTITLE_SIZE _SIZE
-DOC_COVER_TITLE_COLOR _COLOR
-DOC_COVER_TITLE_FAMILY _FAMILY
-DOC_COVER_TITLE_FONT _FONT
-DOC_COVER_TITLE_SIZE _SIZE
-DOCHEADER_COLOR _COLOR
-DOCHEADER_FAMILY _FAMILY
-DOC_QUAD _QUAD
-DOCTYPE_FAMILY _FAMILY
-DOCTYPE_FONT _FONT
-DOCTYPE_SIZE _SIZE
-ENDNOTE_BLOCKQUOTE_AUTOLEAD Q_AUTOLEAD
-ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
-ENDNOTE_FAMILY _FAMILY
-ENDNOTE_FONT _FONT
-ENDNOTE_LINENUMBER_FAMILY _FAMILY
-ENDNOTE_LINENUMBER_FONT _FONT
-ENDNOTE_LINENUMBER_SIZE _SIZE
-ENDNOTE_NUMBER_FAMILY _FAMILY
-ENDNOTE_NUMBER_FONT _FONT
-ENDNOTE_NUMBER_SIZE _SIZE
-ENDNOTE_QUAD _QUAD
-ENDNOTE_QUOTE_AUTLOEAD Q_AUTOLEAD
-ENDNOTE_QUOTE_AUTOLEAD QUOTE_AUTOLEAD
-ENDNOTE_STRING_FAMILY _FAMILY
-ENDNOTE_STRING_FONT _FONT
-ENDNOTE_STRING_QUAD _QUAD
-ENDNOTE_STRING_SIZE _SIZE
-ENDNOTE_TITLE_FAMILY _FAMILY
-ENDNOTE_TITLE_FONT _FONT
-ENDNOTE_TITLE_QUAD _QUAD
-ENDNOTE_TITLE_SIZE _SIZE
-EPIGRAPH_COLOR _COLOR
-EPIGRAPH_FAMILY _FAMILY
-EPIGRAPH_FONT _FONT
-EPIGRAPH_QUAD _QUAD
-EPIGRAPH_SIZE _SIZE
-FINIS_COLOR _COLOR
-FOOTNOTE_COLOR _COLOR
-FOOTNOTE_FAMILY _FAMILY
-FOOTNOTE_FONT _FONT
-FOOTNOTE_QUAD _QUAD
-FOOTNOTE_SIZE _SIZE
-HDRFTR_CENTER_FAMILY _FAMILY
-HDRFTR_CENTER_FONT _FONT
-HDRFTR_CENTER_SIZE _SIZE
-HDRFTR_COLOR _COLOR
-HDRFTR_FAMILY _FAMILY
-HDRFTR_LEFT_FAMILY _FAMILY
-HDRFTR_LEFT_FONT _FONT
-HDRFTR_LEFT_SIZE _SIZE
-HDRFTR_RIGHT_FAMILY _FAMILY
-HDRFTR_RIGHT_FONT _FONT
-HDRFTR_RIGHT_SIZE _SIZE
-HDRFTR_RULE_COLOR _COLOR
-HDRFTR_SIZE _SIZE
-HEAD_COLOR _COLOR
-HEAD_FAMILY _FAMILY
-HEAD_FONT _FONT
-HEAD_QUAD _QUAD
-HEAD_SIZE _SIZE
-LINEBREAK_COLOR _COLOR
-MISC_COLOR _COLOR
-MISC_QUAD _QUAD
-PAGENUM_COLOR _COLOR
-PAGENUM_FAMILY _FAMILY
-PAGENUM_FONT _FONT
-PARAHEAD_COLOR _COLOR
-PARAHEAD_FAMILY _FAMILY
-PARAHEAD_FONT _FONT
-PARAHEAD_SIZE _SIZE
-QUOTE_COLOR _COLOR
-QUOTE_FAMILY _FAMILY
-QUOTE_FONT _FONT
-QUOTE_INDENT _INDENT
-QUOTE_SIZE _SIZE
-REF_INDENT INDENT_REFS
-REF) REF_BRACKETS_END
-REF] REF_BRACKETS_END
-REF} REF_BRACKETS_END
-REF( REF_BRACKETS_START
-REF[ REF_BRACKETS_START
-REF{ REF_BRACKETS_START
-SUBHEAD_COLOR _COLOR
-SUBHEAD_FAMILY _FAMILY
-SUBHEAD_FONT _FONT
-SUBHEAD_SIZE _SIZE
-SUBTITLE_COLOR _COLOR
-SUBTITLE_FAMILY _FAMILY
-SUBTITLE_FONT _FONT
-SUBTITLE_SIZE _SIZE
-TITLE_COLOR _COLOR
-TITLE_FAMILY _FAMILY
-TITLE_FONT _FONT
-TITLE_SIZE _SIZE
-TOC_FAM _FAMILY
-TOC_FAMILY _FAMILY
-TOC_HEADER_FAMILY _FAMILY
-TOC_HEADER_FONT _FONT
-TOC_HEADER_QUAD _QUAD
-TOC_HEADER_SIZE _SIZE
-TOC_HEAD_FAMILY _FAMILY
-TOC_HEAD_FONT _FONT
-TOC_HEAD_SIZE _SIZE
-TOC_PARAHEAD_FAMILY _FAMILY
-TOC_PARAHEAD_FONT _FONT
-TOC_PARAHEAD_SIZE _SIZE
-TOC_PN_FAMILY _FAMILY
-TOC_PN_FONT _FONT
-TOC_PN_SIZE _SIZE
-TOC_PT_SIZE _SIZE
-TOC_SUBHEAD_FAMILY _FAMILY
-TOC_SUBHEAD_FONT _FONT
-TOC_SUBHEAD_SIZE _SIZE
-TOC_TITLE_FAMILY _FAMILY
-TOC_TITLE_FONT _FONT
-TOC_TITLE_SIZE _SIZE
-</pre>
-
-<hr>
-<a href="appendices.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/toc.html b/contrib/groff/contrib/mom/momdoc/toc.html
deleted file mode 100644
index 515740449cfc..000000000000
--- a/contrib/groff/contrib/mom/momdoc/toc.html
+++ /dev/null
@@ -1,329 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom, version 1.3-a -- Table of Contents</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<h1 align="center"><u>Table of Contents for mom, version 1.3-a</u></h1>
-
-The table of contents has grown quite large. If you've been using
-<strong>mom</strong> for a while, you might prefer the
-<a href="macrolist.html#TOP"><strong>Quick Reference Guide</strong></a>.
-<p>
-If you're new to <strong>mom</strong>, click on any link in the
-<a href="#QUICK_TOC"><strong>Quick Table of Contents</strong></a>
-to go to the
-appropriate section of the <strong>Full Table of Contents</strong>.
-<p>
-Or click
-<a href="#TOC_PROP">here</a>
-to go directly to the <strong>Full Table of Contents</strong>.
-<p>
-<hr>
-
-<a name="QUICK_TOC"><h2>Quick Table of Contents</h2></a>
-<a href="#INTRO"><strong>INTRODUCTORY STUFF</strong></a>
-<ul>
- <li><a href="#WHAT">What is mom?</a>
- <li><a href="#DEFS">Definitions of terms used in this manual</a>
- <li><a href="#USING">Using mom</a>
-</ul>
-<a href="#TYPESET"><strong>TYPESETTING WITH MOM</strong></a>
-<ul>
- <li><a href="#TYPE_INTRO">Intro to typesetting macros</a>
- <li><a href="#PAGE">Page setup</a>
- <li><a href="#PARAM">Basic typesetting parameters</a>
- <li><a href="#JUST">Justifying, quadding, etc.</a>
- <li><a href="#REFINE">Refinements</a>
- <li><a href="#MOD">Modifying type</a>
- <li><a href="#VERT">Vertical movements</a>
- <li><a href="#TAB">Tabs</a>
- <li><a href="#COL">Multiple columns</a>
- <li><a href="#IND">Indents</a>
- <li><a href="#GOODIES">Goodies</a>
- <li><a href="#ESCAPES">Inline escapes</a>
- <li><a href="#COLOR">Coloured text</a>
-</ul>
-<p>
-<a href="#DOCPROC"><strong>DOCUMENT PROCESSING WITH MOM</strong></a>
-<ul>
- <li><a href="#DOCPROC_INTRO">Introduction to document processing</a>
- <li><a href="#PRELIM">Preliminary document setup</a>
- <li><a href="#TAGS">The document element tags</a> -- heads, subheads, footnotes, etc.
- <li><a href="#HDRFTR">Headers and footers</a>
- <li><a href="#PAGINATE">Pagination</a>
- <li><a href="#RV">Recto/verso printing and collating</a>
- <li><a href="#COVER">Cover pages</a>
- <li><a href="#REF">Bibliographies and references</a>
- <li><a href="#LETTER">Writing letters</a>
- <li><a href="#TYPEMACDOC">Using typesetting macros during document processing</a>
- <li><a href="#QUICK">Quick reference guide to mom</a>
- <li><a href="#APP">Appendices</a>
-</ul>
-<br>
-<hr>
-<a name="TOC_PROP"></a>
-<h2>Full Table of Contents</h2>
-<a name="INTRO"></a>
-<a name="WHAT"></a>
- <li><a href="intro.html#INTRO"><strong>1. WHAT IS MOM?</strong></a>
- <ul>
- <li><a href="intro.html#INTRO_INTRO">1.1 Who is mom meant for?</a>
- <li><a href="intro.html#INTRO_TYPESETTING">1.2 Typesetting with mom</a>
- <li><a href="intro.html#INTRO_DOCPROCESSING">1.3 Document processing with mom</a>
- <li><a href="intro.html#INTRO_PHILOSOPHY">1.4 Mom's philosophy</a>
- <li><a href="intro.html#INTRO_DOCUMENTATION">1.5 A note on mom's documentation</a>
- <ul>
- <li><a href="intro.html#MACRO_ARGS">1.5.1 How to read macro arguments</a>
- <li><a href="intro.html#TOGGLE_MACRO">1.5.2 &quot;Toggle&quot; macros</a>
- </ul>
- </ul>
-<a name="DEFS"></a>
- <li><a href="definitions.html#TERMS"><strong>2. DEFINITIONS OF TERMS USED IN THIS MANUAL</strong></a>
- <ul>
- <li><a href="definitions.html#TERMS_TYPESETTING">2.1 Typesetting terms</a>
- <li><a href="definitions.html#TERMS_GROFF">2.2 Groff terms</a>
- <li><a href="definitions.html#TERMS_MOM">2.3 Mom's document processing terms</a>
- </ul>
-<a name="USING"></a>
- <li><a href="using.html#USING"><strong>3. USING MOM</strong></a>
- <ul>
- <li><a href="using.html#USING_INTRO">3.1 Introduction</a>
- <li><a href="using.html#USING_MACROS">3.2 How to input mom's macros</a>
- <li><a href="using.html#USING_INVOKING">3.3 Printing -- invoking groff with mom</a>
- <li><a href="using.html#USING_PREVIEWING">3.4 How to preview documents</a>
- </ul>
-<a name="TYPESET"></a>
- <li><a href="typesetting.html#MACROS_TYPESETTING"><strong>4. THE TYPESETTING MACROS</strong></a>
- <ul>
-<a name="TYPE_INTRO"></a>
- <li><a href="typesetting.html#INTRO_MACROS_TYPESETTING">4.1 Introduction to the typesetting macros</a>
- <br>
-<a name="PAGE"></a>
- <li><a href="typesetting.html#PAGE_MARGINS"><strong>4.2 Page Setup</strong></a> -- paper size and page margins
- <ul>
- <li><a href="typesetting.html#INDEX_SETUP">4.2.1 Macro list</a>
- </ul>
-<a name="PARAM"></a>
- <li><a href="typesetting.html#BASIC_PARAMS"><strong>4.3 Basic Parameters</strong></a> -- family, font, fallback font, point size, line space, line length, autolead
- <ul>
- <li><a href="typesetting.html#INDEX_BASIC">4.3.1 Macro list</a>
- </ul>
-<a name="JUST"></a>
- <li><a href="typesetting.html#JUST_QUAD_FILL"><strong>4.4 Justifying, Quadding, Filling and Breaking Lines</strong></a>
- <ul>
- <li><a href="typesetting.html#INDEX_JUST">4.4.1 Macro list</a>
- </ul>
-<a name="REFINE"></a>
- <li><a href="typesetting.html#REFINEMENTS"><strong>4.5 Refinements</strong></a> -- word space, sentence space, letter spacing (track kerning), hyphenation, kerning, ligatures
- <ul>
- <li><a href="typesetting.html#INDEX_REFINEMENTS">4.5.1 Macro list</a>
- </ul>
-<a name="MOD"></a>
- <li><a href="typesetting.html#MODIFICATIONS"><strong>4.6 Modifying Type</strong></a> -- pseudo-italic, -bold, -condensed, and -extended
- <ul>
- <li><a href="typesetting.html#INDEX_MODIFICATIONS">4.6.1 Macro list</a>
- </ul>
-<a name="VERT"></a>
- <li><a href="typesetting.html#ALDRLD"><strong>4.7 Vertical Movements</strong></a> -- moving up and down on the page
- <ul>
- <li><a href="typesetting.html#INDEX_ALDRLD">4.7.1 Macro list</a>
- </ul>
-<a name="TAB"></a>
- <li><a href="typesetting.html#TABS"><strong>4.8 Tabs</strong></a>
- <ul>
- <li><a href="typesetting.html#TYPESETTING_TABS">4.8.1 Typesetting tabs</a>
- <ul>
- <li><a href="typesetting.html#TYPESETTING_TABS_TUT">4.8.1.1 Quickie tutorial</a>
- </ul>
- <li><a href="typesetting.html#STRING_TABS">4.8.2 String tabs (autotabs)</a>
- <ul>
- <li><a href="typesetting.html#STRING_TABS_TUT">4.8.2.1 Quickie tutorial</a>
- </ul>
- <li><a href="typesetting.html#INDEX_TABS">4.8.3 Macro list</a>
- </ul>
-<a name="COL"></a>
- <li><a href="typesetting.html#MULTI_COLUMNS"><strong>4.9 Multi-columns</strong></a>
- <ul>
- <li><a href="typesetting.html#INDEX_MULTI_COLUMNS">4.9.1 Macro list</a>
- </ul>
-<a name="IND"></a>
- <li><a href="typesetting.html#INDENTS"><strong>4.10 Indents</strong></a>
- <ul>
- <li><a href="typesetting.html#INDENTS_TUT">4.10.1 A brief explanation of how mom handles indents</a>
- <li><a href="typesetting.html#INDEX_INDENTS">4.10.2 Macro list</a>
- </ul>
-<a name="GOODIES"></a>
- <li><a href="goodies.html#GOODIES"><strong>4.11 Goodies</strong></a> -- aliases,
- transparent lines, smartquotes, caps,
- underscoring/underlining, padding lines, leaders, drop
- caps, superscripts, (nested) lists, user-definable strings
- <ul>
- <li><a href="goodies.html#INDEX_GOODIES">4.11.1 Macro list</a>
- </ul>
-<a name="ESCAPES"></a>
- <li><a href="inlines.html#INLINE_ESCAPES"><strong>4.12 Inline Escapes</strong></a>
- <ul>
- <li><a href="inlines.html#INTRO_INLINE_ESCAPES">4.12.1 Introduction to inline escapes</a>
- <li><a href="inlines.html#INLINES_MOM">4.12.2 Mom's personal inlines</a>
- <li><a href="inlines.html#INLINES_GROFF">4.12.3 Groff inlines</a>
- <li><a href="inlines.html#INLINE_CHARACTERS_GROFF">4.12.3.1 Inlines for special characters and symbols</a>
- </ul>
-<a name="COLOR"></a>
- <li><a href="color.html#TOP"><strong>4.13 Coloured text</strong></a>
- <ul>
- <li><a href="color.html#INTRO_COLOR">4.13.1 Introduction to coloured text</a>
- <li><a href="color.html#MACROS_COLOR">4.13.2 Macro list</a>
- </ul>
- </ul>
-<a name="DOCPROC"></a>
-<a name="DOCPROC_INTRO"></a>
- <li><a href="docprocessing.html#DOCPROCESSING"><strong>5. DOCUMENT PROCESSING WITH MOM</strong></a>
- <ul>
- <li><a href="docprocessing.html#INTRO_MACROS_DOCPROCESSING">5.1 Introduction to document processing</a>
- <li><a href="docprocessing.html#DEFAULTS">5.2 Some document defaults</a>
- <ul>
- <li><a href="docprocessing.html#LEADING_NOTE">IMPORTANT NOTE on leading/spacing and bottom margins</a>
- <li><a href="docprocessing.html#SHIM">The SHIM macro</a> -- to get document leading back on track
- </ul>
-<a name="PRELIM"></a>
- <li><a href="docprocessing.html#SETUP"><strong>5.3 PRELIMINARY DOCUMENT SETUP</strong></a>
- <ul>
- <li><a href="docprocessing.html#DOCPROCESSING_TUT">5.3.1 Tutorial</a> -- setting up a mom document
- <br>
- <li><a href="docprocessing.html#REFERENCE_MACROS"><strong>5.3.2 The Reference Macros</strong></a>
- <ul>
- <li><a href="docprocessing.html#TITLE">5.3.2.1 TITLE</a>
- <li><a href="docprocessing.html#DOC_TITLE">5.3.2.2 DOCTITLE</a>
- <li><a href="docprocessing.html#SUBTITLE">5.3.2.3 SUBTITLE</a>
- <li><a href="docprocessing.html#AUTHOR">5.3.2.4 AUTHOR</a>
- <li><a href="docprocessing.html#CHAPTER">5.3.2.5 CHAPTER</a>
- <li><a href="docprocessing.html#CHAPTER_TITLE">5.3.2.6 CHAPTER_TITLE</a>
- <li><a href="docprocessing.html#DRAFT">5.3.2.7 DRAFT</a>
- <li><a href="docprocessing.html#REVISION">5.3.2.8 REVISION</a>
- <li><a href="docprocessing.html#COPYRIGHT">5.3.2.9 COPYRIGHT</a>
- <li><a href="docprocessing.html#MISC">5.3.2.10 MISC</a>
- <li><a href="docprocessing.html#COVERTITLE">5.3.2.11 COVER_TITLE</a>
- <li><a href="docprocessing.html#COVERTITLE">5.3.2.12 DOC_COVER_TITLE</a>
- </ul>
- <li><a href="docprocessing.html#DOCSTYLE_MACROS"><strong>5.3.3 The Docstyle Macros</strong></a>
- <ul>
- <li><a href="docprocessing.html#DOCTYPE">5.3.3.1 DOCTYPE</a> -- kind of document
- <li><a href="docprocessing.html#PRINTSTYLE">5.3.3.2 PRINTSTYLE</a> -- typeset or typewrite
- <li><a href="docprocessing.html#COPYSTYLE">5.3.3.3 COPYSTYLE</a> -- draft or final
- </ul>
- <li><a href="docprocessing.html#STYLE_BEFORE_START"><strong>5.3.4 Changing Type and Style Parameters <em>before</em> START</strong></a>
- <ul>
- <li><a href="docprocessing.html#TYPE_BEFORE_START">5.3.4.1 Typesetting macros before START</a> -- usage
- <ul>
- <li><a href="docprocessing.html#COLOR">Colour</a>
- </ul>
- <li><a href="docprocessing.html#DOC_LEAD_ADJUST">5.3.4.2 DOC_LEAD_ADJUST</a> -- adjusting the document
- <a href="definitions.html#TERMS_LEADING">leading</a> (line spacing) to fill pages
- <li><a href="docprocessing.html#DOCHEADER">5.3.4.3 DOCHEADER</a> -- managing the
- <a href="definitions.html#TERMS_DOCHEADER">document header</a>
-
- <li><a href="docprocessing.html#COLUMNS_INTRO">5.3.4.4 COLUMNS</a> -- setting documents in columns
- </ul>
- <li><a href="docprocessing.html#START_MACRO"><strong>5.3.5 ***START***</strong></a> -- the macro to initiate document processing
- <br>
- <li><a href="docprocessing.html#DOC_PARAM_MACROS"><strong>5.3.6 Changing Document-wide Style Parameters <em>after</em> START</strong></a>
- <ul>
- <li><a href="docprocessing.html#INDEX_DOC_PARAM">5.3.6.1 Macro list</a>
- </ul>
-<a name="TYPEMACDOC"></a>
- <li><a href="typemacdoc.html#TYPESETTING"><strong>5.3.7 Using typesetting macros during document processing</strong></A>
- </ul>
-<a name="TAGS"></a>
- <li><a href="docelement.html#DOCELEMENT"><strong>5.4 THE DOCUMENT ELEMENT TAGS</strong></a>
- <ul>
- <li><a href="docelement.html#DOCELEMENT_INTRO">5.4.1 Introduction to the document element tags</a>
- <ul>
- <li><a href="docelement.html#DOCELEMENT_CONTROL">Control macros</a> -- changing style defaults for document element tags
- <li><a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
- </ul>
- <li><a href="docelement.html#EPIGRAPH_INTRO">5.4.2 Epigraphs</a>
- <li><a href="docelement.html#PP_INTRO">5.4.3 Paragraphs</a>
- <li><a href="docelement.html#HEAD_INTRO">5.4.4 Main heads</a>
- <li><a href="docelement.html#SUBHEAD_INTRO">5.4.5 Subheads</a>
- <li><a href="docelement.html#PARAHEAD_INTRO">5.4.6 Paragraph heads</a>
- <li><a href="docelement.html#LINEBREAK_INTRO">5.4.7 Linebreaks</a> -- author linebreaks (section breaks)
- <li><a href="docelement.html#QUOTE_INTRO">5.4.8 Quotes</a> -- line for line poetic quotes or unformatted, verbatim text (e.g. code snippets)
- <li><a href="docelement.html#BLOCKQUOTE_INTRO">5.4.9 Blockquotes</a> -- cited material
- <li><a href="docelement.html#LIST_INTRO">5.4.10 Lists</a> -- (nested) lists
- <li><a href="docelement.html#NUMBER_LINES_INTRO">5.4.11 Line numbering</a>
- <li><a href="docelement.html#FOOTNOTE_INTRO">5.4.12 Footnotes</a>
- <li><a href="docelement.html#ENDNOTE_INTRO">5.4.13 Endnotes</a>
- <li><a href="docelement.html#MARGIN_NOTES_INTRO">5.4.14 Margin notes</a>
- <li><a href="docelement.html#BLANK_PAGE_TITLE">5.4.15 Blank pages</a>
- <li><a href="docelement.html#TOC_INTRO">5.4.16 Table of contents</a>
- <li><a href="docelement.html#FINIS_INTRO">5.4.17 Document termination</a> -- FINIS
- </ul>
-<a name="HDRFTR"></a>
- <li><a href="headfootpage.html#HEADFOOTPAGE"><strong>5.5 DOCUMENT HEADERS AND FOOTERS</strong></a>
- <ul>
- <li><a href="headfootpage.html#HEADFOOTPAGE_INTRO">5.5.1 Introduction</a>
- <li><a href="headfootpage.html#DESCRIPTION_GENERAL">5.5.2 General description of headers/footers</a>
- <li><a href="headfootpage.html#HEADER_STYLE">5.5.3 Default specs for headers/footers</a>
- <li><a href="headfootpage.html#VERTICAL_SPACING">5.5.4 Vertical placement and spacing of headers/footers</a>
- <li><a href="headfootpage.html#HEADFOOT_MANAGEMENT">5.5.5 Managing headers/footers</a>
- <ul>
- <li><a href="headfootpage.html#USERDEF_HDRFTR">5.5.5.1 User-defined, single string recto/verso headers/footers</a>
- </ul>
- <li><a href="headfootpage.html#HEADFOOT_CONTROL">5.5.6 Control macros for headers/footers</a>
- </ul>
-<a name="PAGINATE"></a>
- <li><a href="headfootpage.html#PAGINATION"><strong>5.6 PAGINATION</strong></a>
- <ul>
- <li><a href="headfootpage.html#PAGINATION">Introduction</a>
- <li><a href="headfootpage.html#INDEX_PAGINATION">Pagination macros list</a>
- </ul>
-<a name="RV"></a>
- <li><a href="rectoverso.html#RECTOVERSO"><strong>5.7 RECTO/VERSO PRINTING AND COLLATING</strong></a>
- <ul>
- <li><a href="rectoverso.html#RECTOVERSO_INTRO">5.7.1 Introduction to recto/verso</a>
- <ul>
- <li><a href="rectoverso.html#RECTOVERSO_LIST">5.7.1.1 Macro list</a>
- </ul>
- <li><a href="rectoverso.html#COLLATE_INTRO">5.7.2 Introduction to collating</a>
- <ul>
- <li><a href="rectoverso.html#COLLATE">5.7.2.1 The COLLATE macro</a>
- </ul>
- </ul>
-<a name="COVER"></a>
- <li><a href="cover.html#COVER_TOP"><strong>5.8 CREATING COVER PAGES</strong></a>
- <br>
-<a name="REF"></a>
- <li><a href="refer.html#REF_TOP"><strong>5.9 BIBLIOGRAPHIES AND REFERENCES</strong></a>
- <br>
-<a name="LETTER"></a>
- <li><a href="letters.html#LETTERS"><strong>5.10 WRITING LETTERS</strong></a>
- <ul>
- <li><a href="letters.html#LETTERS_INTRO">5.10.1 Introduction to writing letters</a>
- <li><a href="letters.html#TUTORIAL">5.10.2 Tutorial on writing letters</a>
- <li><a href="letters.html#LETTERS_DEFAULTS">5.10.3 Default style for letters</a>
- <li><a href="letters.html#LETTERS_MACROS">5.10.4 The letter macros</a>
- </ul>
- </ul>
-<a name="QUICK"></a>
-<li><a href="macrolist.html#QUICK"><strong>6. QUICK REFERENCE GUIDE TO MOM</strong></a>
-<p>
-<a name="APP"></a>
-<li><a href="appendices.html#APPENDICES"><strong>7. APPENDICES</strong></a>
- <ul>
- <li><a href="appendices.html#MOREDOC">7.1 Further notes on this documentation</a>
- <li><a href="appendices.html#FONTS">7.2 Adding PostScript fonts to groff</a>
- <ul>
- <li><a href="appendices.html#HOWTO">7.2.1 How to create a PostScript font for use with groff</a>
- </ul>
- <li><a href="appendices.html#CODENOTES">7.2 Some reflections on mom</a>
- <li><a href="reserved.html#RESERVED">7.3 List of reserved words</a>
- <li><a href="appendices.html#CONTACT">7.4 Contact the author</a>
- </ul>
-</ul>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/typemacdoc.html b/contrib/groff/contrib/mom/momdoc/typemacdoc.html
deleted file mode 100644
index bedd031905bc..000000000000
--- a/contrib/groff/contrib/mom/momdoc/typemacdoc.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Typesetting macros in document processing</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="docelement.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-
-<a name="TOP"></a>
-<a name="TYPESETTING">
- <h1 align="center"><u>USING TYPESETTING MACROS DURING DOCUMENT PROCESSING</u></h1>
-</a>
-
-During document processing, most of the
-<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
-affect type in the document globally. For example, if you turn kerning
-off, pairwise kerning is disabled not only in paragraphs, but
-also in headers, footers, quotes, and so on.
-<p>
-Typesetting macros that alter margins and line lengths affect
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-globally (or at least try to), but leave headers/footers and footnotes
-alone. (To indent footnotes, see the full explanation of the
-<a href="docelement.html#FOOTNOTE">FOOTNOTE</a>
-macro.)
-<p>
-<strong>Mom</strong>'s tabs
-(both
-<a href="typesetting.html#TYPESETTING_TABS">typesetting tabs</a>
-and
-<a href="typesetting.html#STRING_TABS">string tabs</a>)
-behave as expected in running text during document processing. Tab
-structures that do not exceed the line length of running text are
-preserved sensibly from page to page, and, if
-<a href="docprocessing.html#COLUMNS">COLUMNS</a>
-are enabled, from column to column.
-<p>
-Some typesetting macros, however, when used during document
-processing, behave in special ways. These are the macros that deal
-with the basic parameters of type style: horizontal and vertical
-margins, line length,
-<a href="definitions.html#TERMS_FAMILY">family</a>,
-<a href="definitions.html#TERMS_FONT">font</a>,
-<a href="definitions.html#TERMS_PS">point size</a>,
-<a href="definitions.html#TERMS_LEADING">leading</a>,
-and
-<a href="definitions.html#TERMS_QUAD">quad</a>.
-
-<p>
-<strong>Mom</strong> assumes that any changes to these parameters
-stem from a temporary need to set type in a style different from that
-provided by <strong>mom</strong>'s
-<a href="docelement.html#INDEX_DOCELEMENT">document element tags</a>.
-In other words, you need to do a bit of creative typesetting in the
-middle of a document.
-<p>
-The following lists those typesetting macros whose behaviour during
-document processing requires some explanation.
-(Please refer to
-<a href="#TB_MARGINS">Top and bottom margins in document processing</a>
-for information on how <strong>mom</strong> interprets
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>
-and
-<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
-in document processing. Additionally, see
-<a href="#ADD_SPACE">ADD_SPACE</a>
-if you encounter the problem of trying to get <strong>mom</strong>
-to put space at the tops of pages after the first.)
-
-<pre>
-MACRO EFFECT DURING DOCUMENT PROCESSING
------ ---------------------------------
-
-L_MARGIN *The left margin of all running text
- assumes the new value.
-
- *The line length remains unaltered.
-
- *The header and footer left margin
- remain at the current document default.
-
- (You won't use this often by itself. Most
- likely, you'll use it in combination with
- R_MARGIN or LL.)
-
-R_MARGIN *The right margin of all running text
- assumes the new value. In other words,
- the line length is altered.
-
- *The header and footer right margin
- remain at the current document default.
-
-LL *The line length of all running text
- is set to the new value.
-
- *The header and footer line length remain
- at the current document default.
-
-FAMILY *Changes family for the duration of the
- current tag only. As soon as another document
- element tag is invoked, the family reverts to
- the current default for the new tag.
-
-FT *Changes font for the duration of the
- current tag only. As soon as another document
- element tag is entered, the font reverts
- to the current default for the new tag.
-
- N.B. -- \*[SLANT] and \*[BOLDER] affect
- paragraph text, and remain in effect for all
- paragraphs until turned off. If you want to
- use them in a macro that takes a string
- argument, include the escape in the string.
- \*[COND] and \*[EXT] behave similarly.
-
-PT_SIZE *Changes point size for the duration of the
- current tag only. As soon as another document
- element tag is entered, the point size reverts
- to the current document default for the new
- tag.
-
-LS *Changes line space for the duration of the
- current tag only. As soon as another document
- element tag is entered, the line space reverts to
- the current document default for the new
- tag.
-
- Using LS to temporarily change leading within a
- document will almost certainly result in a bottom
- margin that doesn't align with the bottom margin
- of subsequent pages. You'll need to use the SHIM
- macro to get mom back on track when you're ready
- to return to the document's default leading.
-
-QUAD *Changes quad for the duration of the
- current tag only. As soon as another document
- element tag is entered, the quad reverts to
- the current document default for the new
- tag.
-
- N.B. -- Line-for-line quadding macros
- (LEFT, CENTER, RIGHT) are also temporary,
- overridden by the QUAD value of any subsequent
- document element tag.
-</pre>
-<hr>
-
-<!=====================================================================>
-
-<a name="TB_MARGINS">
- <h2><u>Top and bottom margins in document processing</u></h2>
-</a>
-
-Normally, <strong>mom</strong> establishes the top and bottom margins
-of
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-in documents from the values of <strong>HEADER_MARGIN +
-HEADER_GAP</strong> and <strong>FOOTER_MARGIN + FOOTER_GAP</strong>
-respectively. However, if you invoke
-<a href="typesetting.html#T_MARGIN">T_MARGIN</a>
-or
-<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
-either before or after
-<a href="docelement.html#START">START</a>,
-they set the top and bottom margins of running text irrespective
-of <strong>HEADER_GAP</strong> and <strong>FOOTER_GAP</strong>.
-<p>
-Put another way, in document processing, <strong>T_MARGIN</strong>
-and <strong>B_MARGIN</strong> set the top and bottom margins of
-running text, but have no effect on the placement of
-<a href="definitions.html#TERMS_HEADER">headers</a>,
-<a href="definitions.html#TERMS_FOOTER">footers</a>,
-or page numbers.
-
-<a name="ADD_SPACE">
- <h2><u>ADD_SPACE</u></h2>
-</a>
-
-<p>
-Occasionally, you may want to insert space before the start of
-<a href="definitions.html#TERMS_RUNNING">running text</a>
-on pages after the first.
-<p>
-You might have tried using
-<a href="typesetting.html#ALD">ALD</a>
-or
-<a href="typesetting.html#SPACE">SPACE</a>
-and found it did nothing. This is because <strong>mom</strong>
-normally inhibits any extra space before the start of running text
-on pages after the first.
-<p>
-If you need the space, you must use the macro,
-<strong>ADD_SPACE</strong>, in conjuction with
-<a href="typesetting.html#NEWPAGE">NEWPAGE</a>.
-<strong>ADD_SPACE</strong> takes as its single argument the
-distance you want <strong>mom</strong> to advance from the normal
-baseline position at the top of the page. A
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
-is required.
-
-<p>
-For example, say you wanted to insert 2 inches of space before the
-start of running text on a page other than the first. You'd
-accomplish it with
-
-<p>
-<pre>
- .NEWPAGE
- .ADD_SPACE 2i
-</pre>
-
-which would terminate your current page, break to a new page,
-print the header (assuming headers are on) and insert 2 inches of
-space before the start of running text.
-<p>
-Since adding space in this way is almost sure to disrupt
-<strong>mom</strong>'s ability to guarantee perfectly flush bottom
-margins, I highly recommend using the
-<a href="docprocessing.html#SHIM">SHIM</a>
-macro immediately after <strong>ADD_SPACE</strong>.
-<p>
-<hr>
-<a href="docelement.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/typesetting.html b/contrib/groff/contrib/mom/momdoc/typesetting.html
deleted file mode 100644
index a161c5b4c341..000000000000
--- a/contrib/groff/contrib/mom/momdoc/typesetting.html
+++ /dev/null
@@ -1,4189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Mom -- Typesetting Macros</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="goodies.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="MACROS_TYPESETTING">
- <h1 align="center"><u>THE TYPESETTING MACROS</u></h1>
-</a>
-
-<a href="#INTRO_MACROS_TYPESETTING">Introduction to the typesetting macros</a>
-<br>
-<ul>
- <li><strong>PAGE SETUP</strong>
- <ul>
- <li><a href="#INTRO_SETUP">Introduction to Page Setup</a>
- <li><a href="#INDEX_SETUP">List of macros</a>
- </ul>
- <li><strong>BASIC TYPESETTING PARAMETERS</strong>
- <ul>
- <li><a href="#INTRO_BASIC_PARAMS">Introduction to Basic Parameters</a>
- <li><a href="#INDEX_BASIC">List of macros</a>
- </ul>
- <li><strong>JUSTIFYING, QUADDING, FILLING, BREAKING and JOINING LINES</strong>
- <ul>
- <li><a href="#INTRO_JUST_QUAD_FILL">Introduction to justify, quad, fill, break</a>
- <li><a href="#INDEX_JUST">List of macros</a>
- </ul>
- <li><strong>TYPOGRAPHIC REFINEMENTS</strong>
- <ul>
- <li><a href="#INTRO_REFINEMENTS">Introduction to typographic refinements</a>
- <li><a href="#INDEX_REFINEMENTS">List of macros</a>
- </ul>
- <li><strong>TYPE MODIFICATIONS -- pseudo italic, bold, condense, extend</strong>
- <ul>
- <li><a href="#INTRO_MODIFICATIONS">Introduction to type modifications</a>
- <li><a href="#INDEX_MODIFICATIONS">List of macros</a>
- </ul>
- <li><strong>VERTICAL MOVEMENTS</strong>
- <ul>
- <li><a href="#INTRO_ALDRLD">Introduction to vertical movements</a>
- <li><a href="#INDEX_ALDRLD">List of macros</a>
- </ul>
- <li><strong>TABS</strong>
- <ul>
- <li><a href="#INTRO_TABS">Introduction to tabs</a>
- <li><a href="#TYPESETTING_TABS">Typesetting tabs</a>
- <ul>
- <li><a href="#TYPESETTING_TABS_TUT">Quickie tutorial</a>
- </ul>
- <li><a href="#STRING_TABS">String tabs</a>
- <ul>
- <li><a href="#STRING_TABS_TUT">Quickie tutorial</a>
- </ul>
- <li><a href="#INDEX_TABS">List of macros</a>
- </ul>
- <li><strong>MULTI-COLUMNS</strong>
- <ul>
- <li><a href="#INTRO_MULTI_COLUMNS">Introduction to multi-columns</a>
- <li><a href="#INDEX_MULTI_COLUMNS">List of macros</a>
- </ul>
- <li><strong>INDENTS</strong>
- <ul>
- <li><a href="#INTRO_INDENTS">Introduction to indents</a>
- <li><a href="#INDEX_INDENTS">List of macros</a>
- </ul>
- <li><strong>GOODIES</strong>
- <ul>
- <li><a href="goodies.html#GOODIES">Introduction to goodies</a>
- <li><a href="goodies.html#INDEX_GOODIES">List of macros</a>
- </ul>
- <li><strong>INLINE ESCAPES</strong>
- <ul>
- <li><a href="inlines.html#INLINE_ESCAPES_INTRO">Introduction to inline escapes</a>
- <li><a href="inlines.html#INDEX_INLINES">List of inline escapes</a>
- </ul>
-</ul>
-<p>
-<hr>
-
-<h2><a name="INTRO_MACROS_TYPESETTING"><u>Introduction to the typesetting macros</u></a></h2>
-
-<strong>Mom</strong>'s typesetting macros provide access to
-groff's typesetting capabilities. Aside from controlling basic
-type parameters (family, font, line length, point size, leading),
-<strong>mom</strong>'s macros fine-tune wordspacing, letterspacing,
-kerning, hyphenation, and so on. In addition, <strong>mom</strong>
-has true typesetting tabs, string tabs, multiple indent styles,
-line padding, and a batch of other goodies.
-<p>
-In some cases, <strong>mom</strong>'s typesetting macros merely imitate
-groff primitives. In others, they approach typesetting concerns in
-conceptually new ways (for groff, at least). This should present no
-problem for newcomers to groff who are learning <strong>mom</strong>.
-Old groff hands should be careful. Just because it looks like a
-duck and walks like a duck does not, in this instance, mean that it
-is a duck. When using <strong>mom</strong>, stay away from groff
-primitives if <strong>mom</strong> provides a macro that accomplishes
-the same thing.
-<p>
-<strong>Mom</strong>'s typesetting macros can be used as a standalone
-package, independent of the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-With them, you can typeset on-the-fly. Book covers, your best
-friend's résumé, a poster for a lost dog--none of these requires
-structured document processing (page headers, paragraphs, heads,
-footnotes, etc). What they do demand is precise control over every
-element on the page. The typesetting macros give you that control.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_SETUP"></a>
-
-<a name="PAGE_MARGINS">
- <h2><u>Page setup: paper size and page margins</u></h2>
-</a>
-
-The page setup macros establish the physical dimensions of your
-page and the margins you want it to have. <strong>Groff</strong>
-has defaults for these, but I recommend setting them at the top
-of your files anyway unless you're using <strong>mom</strong>'s
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-and are content with her defaults.
-<p>
-The
-<a href="#PAPER">PAPER</a>
-macro provides a shortcut for setting the page to the correct dimensions
-for a number of well-known, established paper sizes. The
-<a href="#PAGE">PAGE</a>
-macro provides a convenient way of setting the page dimensions and
-some or all of the page margins with a single macro.
-<p>
-
-<a name="INDEX_SETUP">
- <h3><u>Page setup macros list</u></h3>
-</a>
-
-<ul>
- <li><a href="#PAGEWIDTH">PAGEWIDTH</a> (page width)
- <li><a href="#PAGELENGTH">PAGELENGTH</a> (page length)
- <li><a href="#PAPER">PAPER</a> (common paper sizes)
- <li><a href="#L_MARGIN">L_MARGIN</a> (left margin)
- <li><a href="#R_MARGIN">R_MARGIN</a> (right margin)
- <li><a href="#T_MARGIN">T_MARGIN</a> (top margin)
- <li><a href="#B_MARGIN">B_MARGIN</a> (bottom margin)
- <li><a href="#PAGE">PAGE</a> (page dimensions and margins all in one fell swoop)
- <li><a href="#NEWPAGE">NEWPAGE</a> (start a new page)
-</ul>
-<p>
-
-<!---PAGEWIDTH--->
-
-<hr width="66%" align="left">
- <a name="PAGEWIDTH"><h3><u>Page width</u></h3></a>
-<br>
-<nobr>Macro: <strong>PAGEWIDTH</strong> &lt;width of printer sheet&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-The argument to <strong>PAGEWIDTH</strong> is the width of your
-printer sheet. <strong>PAGEWIDTH</strong> requires a unit of measure.
-Decimal fractions are allowed. Hence, to tell <strong>mom</strong>
-the width of your printer sheet is 8-1/2 inches, you enter
-<p>
-<pre>
- .PAGEWIDTH 8.5i
-</pre>
-
-<!---PAGELENGTH--->
-
-<hr width="66%" align="left">
- <a name="PAGELENGTH"><h3><u>Page length</u></h3></a>
-<br>
-<nobr>Macro: <strong>PAGELENGTH</strong> &lt;length of printer sheet&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>PAGELENGTH</strong> tells <strong>mom</strong> how long your
-printer sheet is. It works just like
-<strong>PAGEWIDTH</strong>. Therefore, to tell
-<strong>mom</strong> your printer sheet is 11 inches long, you
-enter
-<p>
-<pre>
- .PAGELENGTH 11i
-</pre>
-
-<!---PAPER--->
-
-<hr width="66%" align="left">
- <a name="PAPER"><h3><u>Paper</u></h3></a>
-<br>
-<nobr>Macro: <strong>PAPER</strong> &lt;paper type&gt;</nobr>
-
-<p>
-<strong>PAPER</strong> provides a convenient way to set the page
-dimensions for some common printer sheet sizes. <nobr>&lt;paper
-type&gt; can be one of:</nobr>
-<p>
-<pre>
- LETTER
- LEGAL
- STATEMENT
- TABLOID
- LEDGER
- FOLIO
- QUARTO
- 10x14
- EXECUTIVE
- A3
- A4
- A5
- B4
- B5
-</pre>
-
-Say, for example, you have A4-sized sheets in your printer.
-It's shorter (and easier) to enter
-<p>
-<pre>
- .PAPER A4
-</pre>
-
-than to remember the correct dimensions and enter
-<p>
-<pre>
- .PAGEWIDTH 595p
- .PAGELENGTH 842p
-</pre>
-
-<!---L_MARGIN--->
-
-<hr width="66%" align="left">
- <a name="L_MARGIN"><h3><u>Left margin</u></h3></a>
-<br>
-<nobr>Macro: <strong>L_MARGIN</strong> &lt;left margin&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>L_MARGIN</strong> establishes the distance from the left edge
-of the printer sheet at which you want your type to start. It may
-be used any time, and remains in effect until you enter a new value.
-<p>
-<a href="#IL">Left indents</a>
-and
-<a href="#TABS">tabs</a>
-are calculated from the value you pass to <strong>L_MARGIN</strong>,
-hence it's always a good idea to invoke it before starting any serious
-typesetting. A unit of measure is required. Decimal fractions are
-allowed. Therefore, to set the left margin at 3 picas (1/2 inch),
-you'd enter either
-<p>
-<pre>
- .L_MARGIN 3P
- &nbsp;&nbsp;or
- .L_MARGIN .5i
-</pre>
-
-If you use the macros
-<a href="#PAGE">PAGE</a>,
-<a href="#PAGEWIDTH">PAGEWIDTH</a>
-or
-<a href="#PAPER">PAPER</a>
-without invoking <strong>L_MARGIN</strong> (either before
-or afterwards), <strong>mom</strong> automatically sets
-</strong>L_MARGIN</strong> to 1 inch.
-<p>
-<strong>NOTE:</strong> L_MARGIN behaves in a special way when you're
-using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-See
-<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
-for an explanation.
-<p>
-
-<!---R_MARGIN--->
-
-<hr width="66%" align="left">
- <a name="R_MARGIN"><h3><u>Right margin</u></h3></a>
-<br>
-<nobr>Macro: <strong>R_MARGIN</strong> &lt;right margin&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>R_MARGIN</strong> establishes the amount of space you
-want between the end of typeset lines and the right hand edge
-of the printer sheet. In other words, it sets the line length.
-<strong>R_MARGIN</strong> requires a unit of measure. Decimal
-fractions are allowed.
-<p>
-The <a href="#LINELENGTH">line length macro</a> (<strong>LL</strong>) can
-be used in place of <strong>R_MARGIN</strong>. In either case, the
-last one invoked sets the line length. The choice of which to use is
-up to you. In some instances, you may find it easier to think of a
-section of type as having a right margin. In others, giving a line
-length may make more sense.
-<p>
-For example, if you're setting a page of type you know should have
-6-pica margins left and right, it makes sense to enter a left and
-right margin, like this:
-<p>
-<pre>
- .L_MARGIN 6P
- .R_MARGIN 6P
-</pre>
-
-That way, you don't have to worry about calculating the line
-length. On the other hand, if you know the line length for a
-patch of type should be 17 picas and 3 points, entering the line
-length with <strong>LL</strong> is much easier than calculating the
-right margin.
-<p>
-<pre>
- .LL 17P+3p
-</pre>
-
-If you use the macros
-<a href="#PAGE">PAGE</a>,
-<a href="#PAGEWIDTH">PAGEWIDTH</a>
-or
-<a href="#PAPER">PAPER</a>
-without invoking <strong>R_MARGIN</strong> afterwards,
-<strong>mom</strong> automatically sets <strong>R_MARGIN</strong>
-to 1 inch. If you set a line length after these macros (with
-<a href="#LINELENGTH">LL</a>),
-the line length calculated by <strong>R_MARGIN</strong> is, of course,
-overridden.
-<p>
-<strong>IMPORTANT: R_MARGIN</strong>, if used, MUST come after
-<a href="#PAPER">PAPER</a>,
-<a href="#PAGEWIDTH">PAGEWIDTH</a>,
-<a href="#L_MARGIN">L_MARGIN</a>
-and/or
-<a href="#PAGE">PAGE</a>
-(if a right margin isn't given to <strong>PAGE</strong>).
-The reason is that <strong>R_MARGIN</strong> calculates line
-length from the overall page dimensions and the left margin.
-Obviously, it can't make the calculation if it doesn't know the page
-width and the left margin.
-<p>
-<strong>NOTE: R_MARGIN</strong> behaves in a special way
-when you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-See
-<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
-for an explanation.
-<p>
-
-<!---T_MARGIN--->
-
-<hr width="66%" align="left">
- <a name="T_MARGIN"><h3><u>Top margin</u></h3></a>
-<br>
-<nobr>Macro: <strong>T_MARGIN</strong> &lt;top margin&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>T_MARGIN</strong> establishes the distance from the top of
-the printer sheet at which you want your type to start. It requires
-a unit of measure, and decimal fractions are allowed. To set a top
-margin of 2-1/2 centimetres, you'd enter
-<p>
-<pre>
- .T_MARGIN 2.5c
-</pre>
-
-<strong>T_MARGIN</strong> calculates the vertical position of the
-first line of type on a page by treating the top edge of the printer
-sheet as a <a href="definitions.html#TERMS_BASELINE">baseline</a>. Therefore,
-<p>
-<pre>
- .T_MARGIN 1.5i
-</pre>
-
-puts the baseline of the first line of type 1-1/2 inches beneath
-the top of the page.
-<p>
-<strong>IMPORTANT:</strong> <strong>T_MARGIN</strong> does two
-things: it establishes the top margin for pages that come after
-it AND it moves to that position on the current page. Therefore,
-<strong>T_MARGIN</strong> should only be used at the top of a file
-(prior to entering text) or after
-<a href="#NEWPAGE">NEWPAGE</a>,
-like this:
-<p>
-<pre>
- .NEWPAGE
- .T_MARGIN 6P
- &lt;text&gt;
-</pre>
-
-<strong>NOTE:</strong> <strong>T_MARGIN</strong> means something
-slightly different when you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-See
-<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>
-for an explanation.
-<p>
-
-<!---B_MARGIN--->
-
-<hr width="66%" align="left">
- <a name="B_MARGIN"><h3><u>Bottom margin</u></h3></a>
-<br>
-<nobr>Macro: <strong>B_MARGIN</strong> &lt;bottom margin&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>B_MARGIN</strong> sets a nominal position at the bottom
-of the page beyond which you don't want your type to go. When the
-bottom margin is reached, <strong>mom</strong> starts a new page.
-<strong>B_MARGIN</strong> requires a unit of measure. Decimal
-fractions are allowed. To set a nominal bottom margin of 3/4 inch,
-enter
-<p>
-<pre>
- .B_MARGIN .75i
-</pre>
-
-Obviously, if you haven't spaced the type on your pages so that
-the last lines fall perfectly at the bottom margin, the margin will
-vary from page to page. Usually, but not always, the last line of
-type that fits on a page <em>before</em> the bottom margin causes
-<strong>mom</strong> to start a new page.
-<p>
-Occasionally, owing to a peculiarity in <strong>groff</strong>,
-an extra line will fall below the nominal bottom margin. If you're
-using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
-this is unlikely to happen; the document processing macros are very
-hard-nosed about aligning bottom margins.
-<p>
-<strong>NOTE:</strong> The meaning of <strong>B_MARGIN</strong> is
-slightly different when you're using the document processing macros.
-See
-<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>
-for an explanation.
-<p>
-
-<!---PAGE--->
-
-<hr width="66%" align="left">
- <a name="PAGE"><h3><u>Page</u></h3></a>
-<br>
-Macro: <strong>PAGE</strong>
-<nobr>&lt;width&gt;&nbsp;[ &lt;length&gt; [ &lt;lm&gt; [ &lt;rm&gt; [ &lt;tm&gt; [ &lt;bm&gt; ] ] ] ] ]</nobr>
-<br>
-<em>*All arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>PAGE</strong> lets you establish paper dimensions and page
-margins with a single macro. The only required argument is page width.
-The rest are optional, <strong>but they must appear in order and you can't
-skip over any.</strong> <nobr>&lt;lm&gt;, &lt;rm&gt;, &lt;tm&gt;</nobr>
-and <nobr>&lt;bm&gt; refer to the left, right, top and bottom</nobr>
-margins respectively.
-<p>
-Assuming your page dimensions are 11 inches by 17 inches, and that's
-all you want to set, enter
-<p>
-<pre>
- .PAGE 11i 17i
-</pre>
-
-If you want to set the left margin as well, say, at 1 inch,
-<strong>PAGE</strong> would look like this:
-<p>
-<pre>
- .PAGE 11i 17i 1i
-</pre>
-
-Now suppose you also want to set the top margin, say, at 1-1/2
-inches. <nobr>&lt;tm&gt; comes after <nobr>&lt;rm&gt;</nobr></nobr>
-in the optional arguments, but you can't skip over any arguments,
-therefore to set the top margin, you must also give a right margin.
-The <strong>PAGE</strong> macro would look like this:
-<p>
-<pre>
- .PAGE 11i 17i 1i 1i 1.5i
- | |
- required right___| |___top margin
- margin
-</pre>
-
-Clearly, <strong>PAGE</strong> is best used when you want a convenient
-way to tell <strong>mom</strong> just the dimensions of your printer
-sheet (width and length), or when you want to tell her everything
-about the page (dimensions and all the margins), for example
-<p>
-<pre>
- .PAGE 8.5i 11i 45p 45p 45p 45p
-</pre>
-
-This sets up an 8-1/2 by 11 inch page with margins of 45 points
-(5/8-inch) all around.
-<p>
-<strong>NOTE:</strong> Only use <strong>PAGE</strong> at the
-start of a document, before entering any text. And remember,
-when you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
-top margin and bottom margin mean something slightly different than
-when you're using just the typesetting macros (see
-<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>).
-<p>
-Additionally, if you invoke <strong>PAGE</strong> with a top margin
-argument, any macros you invoke after <strong>PAGE</strong> will
-almost certainly move the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of the first line of text down by one linespace. To compensate, do
-<p>
-<pre>
- .RLD 1v
-</pre>
-
-immediately before entering any text, or, if it's feasible, make
-<strong>PAGE</strong> the last macro you invoke prior to entering text.
-<p>
-
-<!---NEWPAGE--->
-
-<hr width="66%" align="left">
-<a name="NEWPAGE"><h3><u>Start a new page</u></h3></a>
-<br>
-Macro: <strong>NEWPAGE</strong>
-
-<p>
-Whenever you want to start a new page, use <strong>NEWPAGE</strong>, by
-itself with no argument. <strong>Mom</strong> will finish up
-processing the current page and move you to the top of a new one
-(subject to the top margin set with
-<a href="#T_MARGIN">T_MARGIN</a>.
-<p>
-<strong>Experts:</strong> Prior to version 1.1.9,
-<strong>NEWPAGE</strong> was simply an alias of
-<strong>.bp</strong>. As of 1.1.9, <strong>NEWPAGE</strong>,
-is its own <strong>mom</strong> macro. While the new macro
-should be backwardly compatible with documents created using
-pre-1.1.9 <strong>mom</strong>s, I suggest that from this version
-onward, if you were in the habit of using <strong>.bp</strong>
-whenever you wanted to break to a new page, you now begin to use
-<strong>NEWPAGE</strong> instead.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_BASIC_PARAMS"></a>
-
-<a name="BASIC_PARAMS">
- <h2><u>Basic Typesetting Parameters</u></h2>
-</a>
-
-Basic parameter macros deal with the fundamental requirements
-for setting type: family, font, point size, leading and line length.
-<p>
-If you're using the typesetting macros only, the arguments passed
-to the basic parameter macros remain in effect until you change them.
-The document processing macros handle things differently. See
-<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
-for an explanation.
-<p>
-
-<a name="INDEX_BASIC"><h3><u>Basic parameter macros list</u></h3></a>
-<ul>
- <li><a href="#FAMILY">FAMILY</a> (type family)
- <li><a href="#FONT">FONT</a> (font)
- <li><a href="#FALLBACK_FONT">FALLBACK_FONT</a> (for invalid fonts)
- <li><a href="#PS">PT_SIZE</a> (point size of type)
- <li><a href="#LEADING">LS</a> (line spacing/leading)
- <li><a href="#AUTOLEAD">AUTOLEAD</a> (automatic line spacing)
- <li><a href="#LINELENGTH">LL</a> (line length)
-</ul>
-
-<!---FAMILY--->
-
-<hr width="66%" align="left">
-<a name="FAMILY"><h3><u>Type family</u></h3></a>
-<br>
-<nobr>Macro: <strong>FAMILY</strong> &lt;family&gt;</nobr>
-<br>
-Alias: <strong>FAM</strong>
-
-<p>
-<strong>FAMILY</strong> takes one argument: the name of the
-<a href="definitions.html#TERMS_FAMILY">family</a>
-you want. Groff comes with a number of PostScript families, each
-identified by a 1-, 2- or 3-letter mnemonic. The standard families
-are:
-<table valign="baseline" summary="family">
-<tr><td width="15"><td><strong>A</strong><td>Avant Garde
-<tr><td><td><strong>BM</strong> <td>Bookman
-<tr><td><td><strong>H</strong><td>Helvetica
-<tr><td><td><strong>HN</strong><td>Helvetica Narrow
-<tr><td><td><strong>N</strong><td>New Century Schoolbook
-<tr><td><td><strong>P</strong><td>Palatino
-<tr><td><td><strong>T</strong><td>Times Roman</td></tr>
-<tr><td><td><strong>ZCM</strong><td>Zapf Chancery</td></tr>
-</table>
-<p>
-The argument you pass to <strong>FAMILY</strong> is the identifier at
-left, above. For example, if you want Helvetica, enter
-<p>
-<pre>
- .FAMILY H
-</pre>
-
-<strong>NOTE:</strong> The
-<a href="#FONT">font macro</a>
-(<strong>FT</strong>) lets you specify both the type family
-and the desired font with a single macro. While this saves a few
-keystrokes, I recommend using <strong>FAMILY</strong> for family,
-and <strong>FT</strong> for font, except where doing so is genuinely
-inconvenient. <strong>ZCM</strong>, for example, only exists in one
-style: Italic (<strong>I</strong>). Therefore, <kbd>.FT ZCMI</kbd>
-makes more sense than setting the family to &quot;ZCM&quot;, then
-setting the font to &quot;I&quot;.
-<p>
-<a name="FAM_ADD_NOTE"></a>
-<strong>ADDITIONAL NOTE:</strong> As of <strong>mom, version
-1.1.9-a</strong>, if you are running a version of groff lower
-than 1.19.2, you <em>MUST</em> follow all <strong>FAMILY</strong>
-requests with a <strong>FT</strong> request, otherwise
-<strong>mom</strong> will set all type up to the next
-<strong>FT</strong> request in the
-<a href="#FALLBACK_FONT">fallback font</a>.
-<p>
-If you are running a version of groff greater than or equal
-to 1.19.2, when you invoke the <strong>FAMILY</strong> macro,
-<strong>mom</strong> &quot;remembers&quot; the font style (Roman,
-Italic, etc) currently in use (if the font style exists in the new
-family) and will continue to use the same font style in the new
-family. For example:
-<p>
-<pre>
- .FAMILY BM \" Bookman family
- .FT I \" Medium Italic
- &lt;some text&gt; \" Bookman Medium Italic
- .FAMILY H \" Helvetica family
- &lt;more text&gt; \" Helvetica Medium Italic
-</pre>
-
-However, if the font style does not exist in the new family,
-<strong>mom</strong> will set all subsequent type in the
-<a href="#FALLBACK_FONT">fallback font</a>
-(by default, Courier Medium Roman) until she encounters a
-<a href="#FONT">.FT</a>
-request that's valid for the family. For example, assuming
-you don't have the font &quot;Medium Condensed Roman&quot;
-(<strong>mom</strong> extension &quot;<strong>CD</strong>&quot;)
-in the Helvetica family:
-<p>
-<pre>
- .FAMILY UN \" Univers family
- .FT CD \" Medium Condensed
- &lt;some text&gt; \" Univers Medium Condensed
- .FAMILY H \" Helvetica family
- &lt;more text&gt; \" Courier Medium Roman!
-</pre>
-
-In the above example, you must follow <kbd>.FAMILY H</kbd> with a
-<strong>FT</strong> request that's valid for Helvetica.
-<p>
-<strong>Experts:</strong>
-<br>
-If you add other PostScript families to groff's /font/devps directory,
-I recommend following the groff standard for naming families and fonts.
-For example, if you add the Garamond family, name the font files
-<p>
-<pre>
- GARAMONDR
- GARAMONDI
- GARAMONDB
- GARAMONDBI
-</pre>
-
-GARAMOND then becomes a legal family name you can pass to
-<strong>FAMILY</strong>. (You could, of course, shorten GARAMOND to just
-G, or GD.) R, I, B, and BI after GARAMOND are the roman, italic,
-bold and bold-italic fonts respectively.
-<p>
-Please see the Appendices,
-<a href="appendices.html#FONTS">Adding PostScript fonts to groff</a>,
-for information on adding fonts and families to groff, as well as
-to see a list of the extensions <strong>mom</strong> provides to
-groff's basic <strong>R, I, B, BI</strong> styles.
-<p>
-
-<!---FT--->
-
-<hr width="66%" align="left">
-<a name="FONT"><h3><u>Font</u></h3></a>
-<br>
-<nobr>Macro: <strong>FT</strong> R | I | B | BI | &lt;any other valid font style&gt;</nobr>
-
-<p>
-By default, groff permits <strong>FT</strong> to take one of four
-possible arguments specifying the desired font:
-<table valign="baseline" summary="font">
-<tr><td width="15"><td><strong>R</strong><td> = <td>(Medium) Roman
-<tr><td><td><strong>I</strong><td> = <td>(Medium) Italic
-<tr><td><td><strong>B</strong><td> = <td>Bold (Roman)
-<tr><td><td><strong>BI</strong><td> = <td>Bold Italic</td></tr>
-</table>
-<p>
-For example, if your
-<a href="definitions.html#TERMS_FAMILY">family</a>
-is Helvetica, entering
-<p>
-<pre>
- .FT B
-</pre>
-
-will give you the Helvetica bold
-<a href="definitions.html#TERMS_FONT">font</a>.
-If your family were Palatino, you'd get the Palatino bold font.
-<p>
-(As of <strong>mom, version 1.1.9-a,</strong> the range of arguments
-that can be passed to <strong>FT</strong> has been considerably
-extended, allowing access to a greater variety of font
-<a href="definitions.html#TERMS_WEIGHT">weights</a>
-and
-<a href="definitions.html#TERMS_SHAPE">shapes</a>.
-Please see the
-<a href="#FONT_NOTE">NOTE</a>,
-below.)
-<p>
-How <strong>mom</strong> reacts to an invalid argument to
-<strong>FT</strong> depends on which version of groff you're using.
-If your groff version is greater than or equal to 1.19.2,
-<strong>mom</strong> will issue a warning and, depending on how
-you've set up the
-<a href="#FALLBACK_FONT">fallback font</a>,
-either continue processing using the fallback font, or abort
-(allowing you to correct the problem). If your groff version is less
-than 1.19.2, <strong>mom</strong> will silently continue processing,
-using either the fallback font or the font that was in effect prior
-to the invalid <strong>FT</strong> call.
-<p>
-<strong>FT</strong> will also accept, as an argument, a full
-family+font name. For example,
-<p>
-<pre>
- .FT HB
-</pre>
-
-will set subsequent type in Helvetica Bold. However, I strongly
-recommend keeping family and font separate except where doing so is
-genuinely inconvenient.
-<p>
-For inline control of fonts, see
-<a href="inlines.html#INLINE_FONTS_MOM">Inline Escapes, font control</a>.
-<p>
-<a name="FONT_NOTE"></a>
-<strong>NOTE: mom, versions 1.1.9-a</strong> and higher,
-considerably extends the range of arguments you can pass to
-<strong>FT</strong>, making it more convenient to add and access
-fonts of differing
-<a href="definitions.html#TERMS_WEIGHT">weights</a>
-and
-<a href="definitions.html#TERMS_SHAPE">shapes</a>
-within the same family. Have a look
-<a href="appendices.html#STYLE_EXTENSIONS">here</a>
-for a list of the weight/style arguments <strong>mom</strong>
-allows.
-<p>
-Be aware, though, that you must have the fonts, correctly
-installed and named, in order to use the arguments. (See
-<a href="appendices.html#HOWTO">How to create a PostScript font for use with groff</a>
-for how to add fonts to groff.) Please also read the
-<a href="#FAM_ADD_NOTE">ADDITIONAL NOTE</a>
-found in the description of the <strong>FAMILY</strong> macro.
-<p>
-
-<!---FALLBACK_FONT--->
-
-<hr width="66%" align="left">
-<a name="FALLBACK_FONT"><h3><u>Fallback font</u></h3></a>
-<br>
-<nobr>Macro: <strong>FALLBACK_FONT</strong> &lt;fallback font&gt; [ ABORT | WARN ] | ABORT | WARN</nobr>
-
-<p>
-In the event that you pass an invalid argument to
-<a href="#FONT">.FAMILY</a>
-(i.e. a non-existent family), <strong>mom</strong>, by default, uses
-the fallback font, Courier Medium Roman (CR), in order to continue
-processing your file.
-<p>
-If you'd prefer another fallback font, pass
-<strong>FALLBACK_FONT</strong> the <strong>full family+font name
-of the font you'd like</strong>. For example, if you'd rather the
-fallback font were Times Roman Medium Roman,
-
-<pre>
- .FALLBACK_FONT TR
-</pre>
-<p>
-would do the trick.
-<p>
-Additionally, if your version of groff accepts accepts &quot;if
-F&quot; and &quot;if S&quot; (see
-<a href="#FAM_ADD_NOTE">above</a>),
-<strong>mom</strong> issues a warning whenever a
-<strong>font style</strong> set with
-<a href="#FONT">.FT</a>
-does not exist, either because you haven't registered the style
-(see
-<a href="appendices.html#REGISTER_STYLE">here</a>
-for instructions on registering styles), or because the font style
-does not exist in the current family set with
-<a href="#FAMILY">.FAMILY</a>.
-By default, <strong>mom</strong> then aborts, which allows you to
-correct the problem.
-<p>
-If you'd prefer that <strong>mom</strong> not abort on non-existent
-fonts, but rather continue processing using a fallback font,
-you can pass <strong>FALLBACK_FONT</strong> the argument
-<strong>WARN</strong>, either by itself, or in conjunction with your
-chosen fallback font.
-<p>
-<strong>Some examples of invoking FALLBACK_FONT:</strong>
-<br>
-<ul>
- <li><kbd>.FALLBACK_FONT WARN</kbd>
- <br>
- <strong>mom</strong> will issue a warning whenever you try
- to access a non-existent font but will continue processing
- your file with the default fallback font, Courier Medium Roman.
- <li><kbd>.FALLBACK_FONT TR WARN</kbd>
- <br>
- <strong>mom</strong> will issue a warning whenever you try
- to access a non-existent font but will continue processing
- your file with a fallback font of Times Roman Medium Roman;
- additionally, &quot;TR&quot; will be the fallback font whenever
- you try to access a <strong>family</strong> that does not exist.
- <li><kbd>.FALLBACK_FONT TR ABORT</kbd>
- <br>
- <strong>mom</strong> will abort whenever you try to access a
- non-existent font, and will use the fallback font
- &quot;TR&quot; whenever you try to access a <strong>family</strong>
- that does not exist.
-</ul>
-<p>
-If, for some reason, you want to revert to ABORT, just enter
-<kbd>.FALLBACK_FONT ABORT</kbd> and <strong>mom</strong> will once
-again abort on font errors.
-<p>
-
-<!---PT_SIZE--->
-
-<hr width="66%" align="left">
-<a name="PS"><h3><u>Point size of type</u></h3></a>
-<br>
-<nobr>Macro: <strong>PT_SIZE</strong> &lt;size of type in points&gt;</nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>PT_SIZE</strong> (Point Size) takes one argument: the size of type
-in points. Unlike most other macros that establish the size or measure
-of something, <strong>PT_SIZE</strong> does not require that you supply a
-unit of measure since it's a near universal convention that type size
-is measured in points. Therefore, to change the type size to, say,
-11 points, enter
-<p>
-<pre>
- .PT_SIZE 11
-</pre>
-
-Point sizes may be fractional (e.g. 10.25 or 12.5).
-<p>
-You can prepend a plus or a minus sign to the argument to
-<strong>PT_SIZE</strong>, in which case the point size will be changed by +
-or - the original value. For example, if the point size is 12,
-and you want 14, you can do
-<p>
-<pre>
- .PT_SIZE +2
-</pre>
-
-then later reset it to 12 with
-<p>
-<pre>
- .PT_SIZE -2
-</pre>
-
-The size of type can also be changed inline. See
-<a href="inlines.html#INLINE_SIZE_MOM">Inline Escapes, changing point size</a>.
-<p>
-<strong>NOTE:</strong> It is unfortunate that the <kbd>pic</kbd>
-pre-processor uses <strong>PS</strong>, and thus
-<strong>mom</strong>'s macro for setting point sizes can't use it.
-However, if you aren't using <kbd>pic</kbd>, you might want to
-alias <strong>PT_SIZE</strong> as <strong>PS</strong>, since
-there'd be no conflict.
-<p>
-<pre>
- .ALIAS PS PT_SIZE
-</pre>
-
-would allow you to set point sizes with <kbd>.PS</kbd>.
-<p>
-
-<!---LS--->
-
-<hr width="66%" align="left">
-<a name="LEADING"><h3><u>Line spacing/leading</u></h3></a>
-<br>
-<nobr>Macro: <strong>LS</strong> &lt;distance between lines&gt;</nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>LS</strong> (Line Space) takes one argument: the distance you want, typically
-in points, from baseline to baseline of type. The argument may
-be fractional (e.g. 12.25 or 14.5). Like <strong>PT_SIZE</strong>,
-<strong>LS</strong> does not require a unit of measure, since
-<a href="definitions.html#TERMS_LEADING">leading</a>
-is most often given in points. Therefore, to set the linespace to
-14 points, you would enter
-<p>
-<pre>
- .LS 14
-</pre>
-
-However, if you wish, you may specify a unit of measure by appending
-it directly to the argument passed to <strong>LS</strong>. For example,
-if you want a linespace of 1/4 of an inch, enter
-<p>
-<pre>
- .LS .25i
-</pre>
-
-You can prepend a plus or a minus sign to the argument to
-<strong>LS</strong>, in which case the line spacing will be changed
-by + or - the original value. For example, if the line spacing is
-14 points, and you want 17 points, you can do
-<p>
-<pre>
- .LS +3
-</pre>
-
-then later reset it to 14 points with
-<p>
-<pre>
- .LS -3
-</pre>
-
-<strong>Experts:</strong>
-<br>
-<strong>LS</strong> should not be confused with the groff primitive
-<strong>ls</strong>. <strong>LS</strong> acts like <strong>vs</strong>.
-<strong>mom</strong> does not provide a macro analogous to
-<strong>ls</strong>.
-<p>
-
-<!---AUTOLEAD--->
-
-<hr width="66%" align="left">
-<a name="AUTOLEAD"><h3><u>Automatic line spacing</u></h3></a>
-<br>
-<nobr>Macro: <strong>AUTOLEAD</strong> &lt;amount of automatic leading&gt; [FACTOR]</nobr>
-<br>
-<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-Without the <strong>FACTOR</strong> argument, <strong>AUTOLEAD</strong>
-calculates the linespace for you by adding its argument to the
-current point size of type. All subsequent <strong>PT_SIZE</strong>
-requests automatically update the linespacing by the autolead amount.
-<p>
-Used in this way, <strong>AUTOLEAD</strong> does not require a unit
-of measure; points is assumed. However, you may use an alternate
-unit of measure by appending it to the argument. The argument may
-be a decimal fraction (e.g. .5 or 2.75).
-<p>
-As an example, if your current point size of type is 12, entering
-<p>
-<pre>
- .AUTOLEAD 2
-</pre>
-
-changes the linespace to 14 points, regardless any linespacing
-already in effect. From here on, every change to the size of type
-(with <strong>PT_SIZE</strong>, not
-<a href="definitions.html#TERMS_INLINES">inline</a>)
-changes the linespace as well. If you decrease the type size to 9
-points, the leading decreases to 11 points. If you increase the type
-size to 16 points, the leading increases to 18 points.
-<p>
-Automatic updating of the linespacing continues until you enter a
-&quot;manual&quot; line space value with <strong>LS</strong>.
-<p>
-If you give <strong>AUTOLEAD</strong> the optional
-<strong>FACTOR</strong> argument, <strong>AUTOLEAD</strong>
-calculates the line space as a factor of the
-<a href="definitions.html#TERMS_NUMERICARGUMENT">numeric argument</a>
-you gave <strong>AUTOLEAD</strong>. For example, if your point
-size is 12,
-<p>
-<pre>
- .AUTOLEAD 1.125 FACTOR
-</pre>
-sets the leading at 13.5 points. If you change the point size
-to 14, the leading automatically changes to 15.75 (14 x 1.125).
-<p>
-<strong>NOTE:</strong> There's no need to prepend a plus sign (+)
-to <strong>AUTOLEAD</strong>'s argument, although you may do so if you
-wish.
-<p>
-
-<!---LL--->
-
-<hr width="66%" align="left">
-<a name="LINELENGTH"><h3><u>Line length</u></h3></a>
-<br>
-<nobr>Macro: <strong>LL</strong> &lt;line length&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>LL</strong> (Line Length) takes one argument: the distance from the
-left margin of the page to the maximum allowable point on the
-right at which groff should place type. The line length, in
-other words, as the macro suggests.
-<p>
-<strong>LL</strong> requires a unit of measure. Therefore, to set the line
-length to 39 picas, you would enter
-<p>
-<pre>
- .LL 39P
-</pre>
-
-As with other macros that require a unit of measure, the argument to
-<strong>LL</strong> may be fractional. For example,
-<p>
-<pre>
- .LL 4.5i
-</pre>
-
-sets the line length to 4-1/2 inches.
-
-<p>
-Additionally, you may express a new line length relative to the
-current line length by prepending a plus or minus sign to the
-argument. Thus, if you wanted to increase the line length by 3
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>, you could
-do
-<p>
-<pre>
- .LL +3p
-</pre>
-
-This is especially handy when you want to &quot;hang&quot;
-punctuation outside the right margin since you can pass groff's
-<a href="inlines.html#INLINE_STRINGWIDTH_GROFF"><strong>\w</strong></a>
-escape as the argument to <strong>LL</strong>, like this:
-<p>
-<pre>
- .LL +\w'.'u
-</pre>
-
-The above example increases the current line length by the width of
-a period. Notice that you must append the
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-<strong>u</strong>, to the escape since .LL requires a unit of
-measure.
-
-<p>
-<strong>NOTE:</strong> The <a href="#R_MARGIN">right margin
-macro</a> (<strong>R_MARGIN</strong>) can also be used to set line
-length.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_JUST_QUAD_FILL"></a>
-
-<a name="JUST_QUAD_FILL">
- <h2><u>Justifying, quadding, filling and breaking lines</u></h2>
-</a>
-
-The justification and quadding macros deal with how type aligns along
-the left and right margins. In a nutshell, type either aligns at the
-left margin, at the right margin, at both margins, or at neither margin
-(centred).
-<p>
-These macros also determine whether or not
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-are joined and
-<a href="definitions.html#TERMS_FILLED">filled</a>
-during output.
-<p>
-Additionally, macros that deal with how to break
-<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a>
-are covered in this section, as is the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-for joining input lines.
-<p>
-You may encounter some words here that are unfamiliar. Refer to
-<a href="definitions.html#TERMS_TYPESETTING">Typesetting terms</a>
-and
-<a href="definitions.html#TERMS_GROFF">Groff terms</a>
-for an explanation.
-
-<a name="INDEX_JUST"><h3><u>Justification, quad, fill, and break macro list</u></h3></a>
-<p>
-<ul>
- <li><strong>Fill modes</strong>
- <ul>
- <li><a href="#JUSTIFY">JUSTIFY</a> (set lines justified)
- <li><a href="#QUAD">QUAD</a> (set filled lines flush left, right or centred)
- </ul>
- <li><strong>Nofill modes</strong>
- <ul>
- <li><a href="#LRC">LEFT</a> (set non-filled lines flush left)
- <li><a href="#LRC">RIGHT</a> (set non-filled lines flush right)
- <li><a href="#LRC">CENTER</a> (set non-filled lines centred)
- </ul>
- <li><strong>Breaking lines</strong>
- <ul>
- <li><a href="#BR">BR</a> (manually break an output line)
- <li><a href="#EL">EL</a> (break a line without advancing to the next output line)
- <li><a href="#SPACE">SPACE</a> (break a line and add space before the next output line)
- <li><a href="#SPREAD">SPREAD</a> (break and force-justify an output line)
- </ul>
- <li><strong>Joining input lines in
- <a href="definitions.html#TERMS_NOFILL">nofill mode</a></strong>
- <ul>
- <li><a href="#JOIN">\c</a> inline escape
- </ul>
-</ul>
-
-<!---JUSTIFY--->
-
-<hr width="66%" align="left">
-<a name="JUSTIFY"><h3><u>Justify lines</u></h3></a>
-<br>
-Macro: <strong>JUSTIFY</strong>
-<br>
-<a href="definitions.html#TERMS_FILLED"><em>Fill mode</em></a>
-
-<p>
-<strong>JUSTIFY</strong> doesn't take an argument.
-<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
-after <strong>JUSTIFY</strong> are
-<a href="definitions.html#TERMS_FILLED">filled</a> and
-<a href="definitions.html#TERMS_JUST">justified</a>
-upon output.
-<p>
-To break lines and prevent them from being filled and justified,
-use the
-<a href="#BR">BR</a> macro.
-<p>
-
-<!---QUAD--->
-
-<hr width="66%" align="left">
-<a name="QUAD"><h3><u>Quad lines left, right, or centre</u></h3></a>
-<br>
-<nobr>Macro: <strong>QUAD</strong> L | LEFT | R | RIGHT | C | CENTER | J | JUSTIFY</nobr>
-<br>
-Alias: <strong>FILL</strong>
-<br>
-<a href="definitions.html#TERMS_FILLED"><em>Fill mode</em></a>
-
-<p>
-<strong>QUAD</strong> takes one argument: the direction in which lines
-should be
-<a href="definitions.html#TERMS_QUAD">quadded</a>.
-<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
-after <strong>QUAD</strong> are
-<a href="definitions.html#TERMS_FILLED">filled</a>
-upon output.
-<p>
-If <strong>L</strong> or <strong>LEFT</strong>, type is set flush
-along the left margin.
-<p>
-If <strong>R</strong> or <strong>RIGHT</strong>, type is
-set flush along the right margin.
-<p>
-If <strong>C</strong> or <strong>CENTER</strong> type is set centred
-on the current line length.
-<p>
-<strong>J</strong> and <strong>JUSTIFY</strong> justify text,
-and are included as a convenience only. Obviously, if text is
-justified, it isn't quadded. <strong>QUAD J</strong> and
-<strong>QUAD JUSTIFY</strong> have exactly the same effect as <a
-href="#JUSTIFY">JUSTIFY</a>.
-<p>
-To break lines and prevent them from being filled, use the
-<a href="#BR">BR</a> macro.
-<p>
-
-<!---LEFT, RIGHT, CENTER--->
-
-<hr width="66%" align="left">
-<a name="LRC"><h3><u>Set non-filled lines flush left, right, or centred</u></h3></a>
-<br>
-Macro: <strong>LEFT</strong>
-&nbsp;&nbsp;Macro: <strong>RIGHT</strong>
-&nbsp;&nbsp;Macro: <strong>CENTER</strong>
-&nbsp;(alias <strong>CENTRE</strong>)
-<br>
-<a href="definitions.html#TERMS_NOFILL"><em>Nofill mode</em></a>
-
-<p>
-<strong>LEFT</strong>, <strong>RIGHT</strong> and
-<strong>CENTER</strong> let you enter text on a line for line basis
-without having to use the
-<a href="#BR">BR</a> macro after each line.
-Consider the following:
-<p>
-<pre>
- .QUAD LEFT
- So runs my dream, but what am I?
- .BR
- An infant crying in the night
- .BR
- An infant crying for the light
- .BR
- And with no language but a cry.
- .BR
-</pre>
-
-Because text after <strong>QUAD</strong> is
-<a href="definitions.html#TERMS_FILLED">filled</a>, you have to use the
-<a href="#BR">BR</a>
-macro to prevent the lines from running together. Not only is this
-annoying to type, it's awkward to read in a text editor. Much better
-to do
-<p>
-<pre>
- .LEFT
- So runs my dream, but what am I?
- An infant crying in the night
- An infant crying for the light
- And with no language but a cry.
-</pre>
-
-<strong>IMPORTANT:</strong> Because <strong>LEFT</strong>,
-<strong>RIGHT</strong> and <strong>CENTER</strong> are nofill
-modes, groff does not always respect the current line length.
-<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
-that run long may exceed it, or get broken in undesirable ways.
-Therefore, when using these three macros, you should preview your
-work to ensure that all lines fit as expected.
-<p>
-
-<!---BR--->
-
-<hr width="66%" align="left">
-<a name="BR"><h3><u>Manually break lines</u></h3></a>
-<br>
-Macro: <strong>BR</strong>
-
-<p>
-When using <strong>JUSTIFY</strong> or <strong>QUAD</strong>,
-<strong>BR</strong> tells <strong>mom</strong> about partial lines
-that you want broken (as opposed to
-<a href="definitions.html#TERMS_FILLED">filled</a>).
-Any partial
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
-that immediately precedes <strong>BR</strong> will be
-<a href="definitions.html#TERMS_QUAD">quadded</a>
-in the direction of the current quad, or set flush left if text is
-<a href="definitions.html#TERMS_JUST">justified</a>.
-
-<p>
-Most of the time, you won't need the <strong>BR</strong> macro.
-In fill modes, <strong>mom</strong> tries to be sensible about
-where breaks are needed. If the nature of a macro is such that under
-most circumstances you'd expect a break, <strong>mom</strong> puts
-it in herself. Equally, in macros where a break isn't normally
-desirable, no break occurs. This means text files don't get cluttered
-with annoying <strong>BR</strong>'s.
-<p>
-<strong>NOTE:</strong> Lines of text in
-<a href="definitions.html#TERMS_NOFILL">nofill mode</a>
-never require a <strong>BR</strong>. Furthermore, in nofill mode,
-ALL macros cause a break. If a break is not desired, use the
-<a href="#JOIN">\c</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>.
-
-<p>
-<strong>Experts: BR</strong> is an alias for <strong>br</strong>.
-You can use either, or mix 'n' match with impunity.
-<p>
-
-<!---EL--->
-
-<hr width="66%" align="left">
-<a name="EL"><h3><u>Manually break a line without advancing on the page</u></h3></a>
-<br>
-Macro: <strong>EL</strong>
-<br>
-<em>*In nofill modes (LEFT, RIGHT, CENTER), you must terminate the
-line input preceding EL with the </em><kbd>\c</kbd><em> inline
-escape. See
-<a href="#EL_NOTES">NOTES</a>,
-below.
-<br>
-*If you find remembering whether to put in the <kbd>\c</kbd>
-bothersome, you may prefer to use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-alternative to
-<kbd>.EL</kbd>,
-<a href="inlines.html#B">\*[B]</a>,
-which works consistently regardless of the fill mode.
-<br>
-*EL does not work after the PAD macro.
-See
-<a href="goodies.html#PAD">PAD</a>
-for the way around this</em>.
-<p>
-The mnemonic "EL" is borrowed from old Compugraphic typesetting
-systems, where it stood for "End Line." Conceptually,
-<strong>EL</strong> is equivalent to the notion of a carriage return
-with no linefeed.
-
-<p>
-<em>Note to groff jocks:</em> <strong>EL</strong> is
-unrelated to groff's <strong>.el</strong>. If you find the
-similarity confusing, you may want to alias <strong>EL</strong> as
-something else (but don't use <strong>EOL</strong>; it's already
-taken.)
-
-<p>
-<strong>EL</strong>'s function is simple: it breaks a line without
-advancing on the page.
-<a name="EL_EXAMPLE">As</a>
-an example of where you might use it,
-imagine that you're working from marked-up copy. The markup
-indicates 24 points of space between two given lines, but the
-prevailing line spacing is 12.5 points. You may find it more
-convenient to break the first line with <strong>EL</strong> and
-instruct <strong>mom</strong> to advance 24 points to the next line
-instead of calculating the lead that needs to be added to 12.5 to
-get 24. To demonstrate:
-<p>
-<pre>
- .LEFT
- .LS 12.5
- A line of text.\c
- .EL
- .ALD 24p
- The next line of text.
-</pre>
-
-may be more intuitive than
-<p>
-<pre>
- .LEFT
- .LS 12.5
- A line of text.
- .ALD 11.5p
- The next line of text.
-</pre>
-
-The first example has the further advantage that should you wish
-to change the prevailing line space but keep the 24 points lead,
-you don't have to recalculate the extra space.
-<p>
-"ALD" in the above examples stands for "<strong>A</strong>dvance
-<strong>L</strong>ea<strong>D</strong>" (another mnemonic borrowed
-from Compugraphic), which is covered in the section
-<a href="#ALDRLD">Vertical movement</a>.
-<p>
-<a name="EL_NOTES"><strong>NOTES:</strong></a>
-<p>
-In versions of mom prior to 1.1.9, <strong>EL</strong> did not
-always work as advertised on the last
-<a name="TERMS_OUTPUTLINE">output line</a>
-of pages that contained a footer trap (e.g. one set with
-<a href="#B_MARGIN">B_MARGIN</a>
-or in documents formatted using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>).
-<p>
-<strong>EL</strong> has been re-written so that this should no longer be the
-case. However, in order for it to work in the
-<a href="definitions.html#TERMS_NOFILL">nofill</a>
-modes
-(<a href="#LRC">LEFT</a>,
-<a href="#LRC">RIGHT</a>
-or
-<a href="#LRC">CENTER</a>),
-you must always &quot;join&quot; <strong>.EL</strong> to the line
-before it using the
-<a href="#JOIN">\c</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-like this:
-<p>
-<pre>
- .LEFT
- A line I don't want to advance\c
- .EL
-</pre>
-
-Conversely, in
-<a href="definitions.html#TERMS_FILLED">fill modes</a>
-(<a href="#QUAD">QUAD LEFT</a>,
-<a href="#QUAD">QUAD RIGHT</a>,
-<a href="#QUAD">QUAD CENTER</a>
-or
-<a href="#JUSTIFY">JUSTIFY</a>),
-the <strong>\c</strong> must not be used.
-<p>
-If <strong>EL</strong> is used after most macros or groff
-<a href="definitions.html#TERMS_PRIMITIVES">primitives</a>
-(see the exception, below), you don't have to worry about this,
-regardless of the fill mode. Just type <kbd>.EL</kbd>
-<br>
-
-<!---SP--->
-
-<hr width="66%" align="left">
-<a name="SPACE"><h3><u>Break lines and add space between</u></h3></a>
-<br>
-<nobr>Macro: <strong>SPACE</strong> &lt;space to add between lines&gt;</nobr>
-<br>
-Alias: <strong>SP</strong>
-
-<p>
-<strong>SPACE</strong> breaks a line, just like
-<strong>BR</strong>, then adds space after the line. With no
-argument, it adds an extra line space of a value equal to the
-current
-<a href="definitions.html#TERMS_LEADING">leading</a>.
-If you pass it a numeric argument without supplying a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
-it advances that number of extra line spaces. For example:
-<p>
-<pre>
- .SPACE
-</pre>
-
-breaks the line then adds an extra linespace, whereas
-<p>
-<pre>
- .SPACE 2
-</pre>
-
-breaks the line and adds two extra linespaces.
-
-<p>
-If you supply a unit of measure, <strong>SPACE</strong> breaks the
-line then advances one linespace (at the current
-<a href="definitions.html#TERMS_LEADING">leading</a>)
-PLUS the specified amount of extra space given to
-<strong>SPACE</strong>,
-as in
-<p>
-<pre>
- .SPACE 6p
-</pre>
-
-which breaks the line and advances one full linespace plus six
-points.
-
-<p>
-<strong>SUGGESTION: SPACE</strong> and
-<a href="#ALD">ALD</a>
-can be used interchangeably (<code>.SPACE&nbsp;6p</code> and
-<code>.ALD&nbsp;6p</code> are equivalent). However,
-<strong>ALD</strong> without an argument does nothing, whereas
-<strong>SPACE</strong> without an argument adds an extra line
-space. I recommend using <strong>SPACE</strong> when you
-want an extra line space (or multiple thereof), and
-<strong>ALD</strong> whenever you want some other value of space
-after a line.
-
-<p>
-<strong>Experts: SPACE</strong> is an alias of <strong>sp</strong>.
-You can use either, or mix 'n' match with impunity.
-<p>
-
-<!---SPREAD--->
-
-<hr width="66%" align="left">
-<a name="SPREAD"><h3><u>Break and force justify (spread) lines</u></h3></a>
-<br>
-Macro: <strong>SPREAD</strong>
-
-<p>
-Sometimes, you need to break a line of
-<a href="definitions.html#TERMS_JUST">justified</a>
-text and have it come out fully justified, not
-<a href="definitions.html#TERMS_QUAD">quadded</a>
-left the way it would be with the <strong>BR</strong> macro.
-An example of where you'd do this would be when you want to prevent a
-word at the end of a line from being hyphenated (say, a proper name).
-<strong>SPREAD</strong> is the macro that lets you break the line
-and have it came out fully justified.
-
-<p>
-<strong>Experts: SPREAD</strong> is an alias for <strong>brp</strong>.
-You can use either, or mix 'n' match with impunity.
-<p>
-
-<!---JOIN--->
-
-<hr width="66%" align="left">
-<a name="JOIN"><h3><u>Join input lines</u></h3></a>
-<br>
-Inline: <strong>\c</strong>
-
-<p>
-Sometimes, especially when in one of the
-<a href="definitions.html#TERMS_NOFILL">nofill modes</a>,
-a macro will cause a break where you don't want one. In order
-to prevent this from happening (in other words, to join
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-together, forming one
-<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>),
-use the groff
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\c</strong> at the end of each input line to
-be joined to another, like this:
-<p>
-<pre>
- .LEFT
- .FAMILY T
- .FT R
- Some lines of text to be \c
- .FAMILY H
- .FT B
- joined \c
- .FAMILY T
- .FT R
- together.
-</pre>
-
-Upon output, the lines will be joined together to read
-<p>
-<pre>
- Some lines of text to be joined together.
-</pre>
-
-with the word &quot;joined&quot; in Helvetica bold. Note the
-space before <strong>\c</strong>. Without it, the last three
-words of the output line would read
-<p>
-<pre>
- bejoinedtogether
-</pre>
-
-Please also note that had the example been in one of the
-<a href="definitions.html#TERMS_FILLED">fill modes</a>,
-there'd have been no need for the <strong>\c</strong>.
-<p>
-<strong>Addendum:</strong> The example, above, is designed to
-demonstrate the use of <strong>\c</strong>. However, an easier and
-more intuitive way to accomplish the family/font change in the
-example would be with the groff
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-<a href="inlines.html#INLINE_FONTS_GROFF">\f</a>.
-<p>
-<pre>
- Some lines of text to be \f[HB]joined\*[PREV] together.
-</pre>
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_REFINEMENTS"></a>
-
-<a name="REFINEMENTS">
- <h2><u>Typographic refinements</u></h2>
-</a>
-
-The macros in this section help you tweak groff's behaviour,
-ensuring that your documents look typographically professional.
-<br>
-
-<a name="INDEX_REFINEMENTS">
- <h3><u>Typographic refinements macro list</u></h3>
-</a>
-<ul>
- <li><strong>Word and sentence spacing</strong>
- <ul>
- <li><a href="#WS">WS</a> (word spacing)
- <li><a href="#SS">SS</a> (sentence space)
- </ul>
- <li><strong>Letter spacing (track kerning)</strong>
- <ul>
- <li><a href="#RW">RW</a> (reduce whitespace)
- <li><a href="#EW">EW</a> (expand whitespace)
- <li><a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
- </ul>
- <li><strong>Hyphenation</strong>
- <ul>
- <li><a href="#HY">HY</a> (turn auto hyphenation on/off, or set specific hyphenation parameters)
- <li><a href="#HY_SET">HY_SET</a> (set all hyphenation parameters)
- </ul>
- <li><strong>Automatic kerning and ligatures</strong>
- <ul>
- <li><a href="#KERN">KERN</a> (turn automatic pairwise kerning on or off)
- <li><a href="#LIGATURES">LIGATURES</a> (turn automatic generation of ligatures on or off)
- </ul>
-</ul>
-
-<!---WS--->
-
-<hr width="66%" align="left">
-<a name="WS"><h3><u>Word spacing</u></h3></a>
-<br>
-<nobr>Macro: <strong>WS</strong> &lt;+|-wordspace&gt; | DEFAULT</nobr>
-
-<p>
-<strong>WS</strong> (Word Space) increases or decreases the amount
-of space between words. In
-<a href="definitions.html#TERMS_NOFILL">nofill modes</a>,
-or if
-<a href="#QUAD">QUAD</a>
-is in effect, the space between words is fixed. Therefore, if you
-change the word spacing with <strong>WS</strong>, the change applies
-uniformly to the space between every word on every line. However,
-when text is
-<a href="definitions.html#TERMS_JUST">justified</a>,
-the space between words varies from line to line (in order to justify
-the text). Consequently, the change you make with <strong>WS</strong>
-represents the minimum (and ideal) space groff will try to put between
-words before deciding whether to hyphenate a final word or to stretch
-the word spacing.
-
-<p>
-Word space is relative to type size. Knowing how it's calculated is
-unimportant. What matters is having a sense of how the value passed
-to <strong>WS</strong> affects the look of your type. Generally,
-in/decreasing the word space by a value of 1 or 2 produces a difference
-that in many cases is scarcely visible; in/decreasing by a value of 5
-or so produces a subtle but noticeable difference; and in/decreasing
-by a value greater than 10 is always apparent. You should preview
-your work to assess the effect of <strong>WS</strong>.
-
-<p>
-<a name="WS_USAGE"><strong>WS</strong></a>
-takes as its argument a whole number preceded by a plus or minus sign.
-Therefore, to decrease the word space slightly, you might enter
-<p>
-<pre>
- .WS -4
-</pre>
-
-To increase it by a noticeable amount, you might enter
-<p>
-<pre>
- .WS +12
-</pre>
-
-You can reset the word spacing to its previous value by switching
-the plus or minus sign, like this:
-<p>
-<pre>
- .WS +4
- A line of text
- .WS -4
-</pre>
-
-The <code>.WS -4</code> undoes the effect of <code>.WS
-+4</code>. You can also reset <strong>WS</strong> to
-its groff default by entering
-<p>
-<pre>
- .WS DEFAULT
-</pre>
-
-This can be particularly useful if you've been playing around
-with plus and minus values, and can't remember by how much you
-have to in/decrease the word space to get it back to normal.
-<p>
-
-<!---SS--->
-
-<hr width="66%" align="left">
-<a name="SS"><h3><u>Sentence space</u></h3></a>
-<br>
-<nobr>Macro: <strong>SS</strong> &lt;+sentence space&gt; | 0 | DEFAULT</nobr>
-
-<p>
-<strong>SS</strong> (Sentence Space) tells groff how to treat double
-spaces it encounters between sentences in
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>.
-If you use <strong>SS</strong>, input sentences with two spaces
-after them AND input sentences that fall at the end of input lines
-all receive a normal word space plus an additional amount of space
-whose size is determined by the + value passed as an argument to
-<strong>SS</strong>. Thus,
-<p>
-<pre>
- .SS +2
-</pre>
-
-means that input sentences with two spaces after them receive a normal
-word space PLUS the +2 value passed to <strong>SS</strong>.
-<p>
-Like
-<strong>WS</strong>, increasing the sentence space by a value of
-1 or 2 produces a difference that in many cases is scarcely visible;
-increasing by a value of 5 or so produces a subtle but noticeable
-difference (i.e. the space between double-spaced input sentences will
-be slightly but visibly greater than the space between words); and
-increasing by a value greater than 10 is always apparent. You should
-preview your work to assess the effect of <strong>SS</strong>.
-<p>
-There's an additional argument you can pass <strong>SS</strong>:
-the number zero (without the + sign). It's the argument you'll
-use most often. Typeset copy should never have two spaces between
-sentences, and the "zero" argument tells groff to give the extra
-spaces no space at all (effectively removing them). Therefore,
-if you double-space your sentences (as you should when writing in a
-text editor), get in the habit of putting
-<p>
-<pre>
- .SS 0
-</pre>
-
-at the top of your files.
-
-<p>
-If you do use <strong>SS</strong> for something other than ensuring
-that you don't get unwanted sentence spaces in output copy, you
-can set or reset the sentence space to the groff default (the same
-width as a word space, i.e. double-spaced input sentences will appear
-double-spaced on output as well) with
-<p>
-<pre>
- .SS DEFAULT
-</pre>
-
-If you're using the
-<a href="docprocessing.html">document processing macros</a>
-and your
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
-is <strong>TYPEWRITE</strong>, <code>.SS DEFAULT</code> is the default,
-because you <em>do</em> want double spaces between sentences in copy
-that imitates the look of a typewritten document.
-<p>
-<strong>IMPORTANT: SS</strong> with an argument other than
-&quot;0&quot; should only be used if you're of the old (and wise)
-school of typists that puts two spaces between sentences. If you
-ignore this advice and use <strong>SS</strong> when you habitually
-put only one space between sentences, you risk producing output where
-the space between sentences is not equal.
-<p>
-
-<!---HY--->
-
-<hr width="66%" align="left">
-<a name="HY"><h3><u>Automatic hyphenation control</u></h3></a>
-<br>
-<nobr>Macro: <strong>HY</strong> toggle</nobr>
-<br>
-<nobr>Macro: <strong>HY</strong> LINES &lt;max. number of consecutive hyphenated lines&gt;</nobr>
-<br>
-<nobr>Macro: <strong>HY</strong> MARGIN &lt;size of hyphenation margin&gt;</nobr>
-<br>
-<nobr>Macro: <strong>HY</strong> SPACE &lt;extra interword spacing to prevent hyphenation&gt;</nobr>
-<br>
-<nobr>Macro: <strong>HY</strong> DEFAULT</nobr>
-<br>
-Aliases: <strong>HYPHENATE, HYPHENATION</strong>
-
-<p>
-<strong>HY</strong>, as you can see, can be invoked with a number of
-arguments. In all cases, the aliases <strong>HYPHENATE</strong>
-or <strong>HYPHENATION</strong> can be used in place of
-<strong>HY</strong>. To aid in understanding the various arguments
-you can pass to <strong>HY</strong>, I've broken them down into
-separate sections.
-
-<h3><u>1. HY</u></h3>
-<strong>HY</strong> by itself (i.e. with no argument) simply turns
-automatic hyphenation on. Any argument other than <strong>LINES,
-MARGIN, SPACE</strong> or <strong>DEFAULT</strong>, turns automatic
-hyphenation off. For example, as explained in
-<a href="intro.html#MACRO_ARGS">How to read macro arguments</a>,
-you could turn <strong>HY</strong> off by entering
-<p>
-<pre>
- .HY OFF
- or
- .HY X
- or
- .HY END
-</pre>
-
-<strong>HY</strong> observes the following default hyphenation rules:
-<br>
-<ol>
- <li>Last lines (i.e. ones that will spring a trap--typically
- the last line on a page) will not be hyphenated.
- <li>The first and last two characters of a word are never
- split off.
-</ol>
-
-<h3><u>2. HY LINES</u></h3>
-<strong>HY LINES</strong> sets the maximum number of consecutive
-hyphenated lines that will appear in output copy. 2 is a very
-good choice, and you'd set it with
-<p>
-<pre>
- .HY LINES 2
-</pre>
-
-By default, when you turn automatic hyphenation on, there is no
-limit to the number of consecutive hyphenated lines.
-
-<p>
-<strong>NOTE:</strong>
-<a href="definitions.html#TERMS_DISCRETIONARYHYPHEN">Discretionary hyphens</a>
-count when groff is figuring out how many lines to hyphenate;
-explicit hyphens do not.
-
-<h3><u>3. HY MARGIN</u></h3>
-<strong>HY MARGIN</strong> sets the amount of room allowed at
-the end of a line before hyphenation is tripped (e.g. if there's
-only 6 points left at the end of a line, groff won't try to hyphenate
-the next word). <strong>HY MARGIN</strong> only applies if you're
-using
-<a href="#QUAD">QUAD</a>, and is really only useful if you're
-using <strong>QUAD LEFT</strong>.
-
-<p>
-As an example, if you don't want groff to hyphenate words when there's
-only 18 points of space left at the end of a left-quadded line,
-you'd enter
-<p>
-<pre>
- .HY MARGIN 18p
-</pre>
-
-<strong>NOTE:</strong> The numeric argument after <strong>HY
-MARGIN</strong> requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-
-<h3><u>4. HY SPACE</u></h3>
-<strong>HY SPACE</strong> sets an amount of extra interword
-space that groff will <em>try</em> to put between words on a
-line in order to PREVENT hyphenation. <strong>HY SPACE</strong>
-applies only to
-<a href="definitions.html#TERMS_JUST">justified lines</a>. Generally speaking,
-you'll want this value to be quite small, since too big a value
-will result in lines with gaping holes between the words. A reasonable
-value might be half a point, or one point, which you'd set with
-<p>
-<pre>
- .HY SPACE .5p
- or
- .HY SPACE 1p
-</pre>
-
-<strong>NOTE:</strong> The numeric argument after <strong>HY
-SPACE</strong> requires a
-<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
-
-<h3><u>5. HY DEFAULT</u></h3>
-<strong>HY DEFAULT</strong> resets automatic hyphenation to its
-default behaviour, cancelling any changes made with <strong>LINES,
-MARGIN,</strong> and/or <strong>SPACE</strong>.
-
-<h3><u>A note on hyphenation in general</u></h3>
-Hyphenation is a necessary evil. If it can be avoided, it should be.
-If it can't be, it should occur infrequently. That's the reason for
-the number of parameters you can set with <strong>HY</strong>.
-
-<p>
-Furthermore, hyphenation in
-<a href="definitions.html#TERMS_RAG">rag</a>
-copy requires a great deal of attention. At best, it should be
-avoided completely by individually adjusting the number of words
-on consecutive lines to achieve a pleasing, natural-looking rag.
-Since such adjustments are often too fussy for document
-processing, I recommend playing around with <strong>HY MARGIN</strong>
-a bit if your copy looks hyphen-heavy.
-<p>
-
-<!---HY_SET--->
-
-<hr width="66%" align="left">
-<a name="HY_SET"><h3><u>Set hyphenation parameters all at once</u></h3></a>
-<br>
-<nobr>Macro: <strong>HY_SET</strong> &lt;lines&gt; [ &lt;margin&gt; [ &lt;space&gt; ] ]</nobr>
-<br>
-Alias: <strong>HYSET</strong>
-
-<p>
-<strong>HY_SET</strong> lets you set the parameters for hyphenation
-with a single macro. &lt;lines&gt;, &lt;margin&gt; and &lt;space&gt;
-correspond to the numeric values required by
-<strong>LINES</strong>, <strong>MARGIN</strong> and
-<strong>SPACE</strong> as described
-<a href="#HY">above</a>.
-
-<p>
-To set just the maximum number of consecutive hyphenated lines,
-you'd enter
-<p>
-<pre>
- .HY_SET 2
-</pre>
-
-If you wanted the same number of maximum consecutive hyphenated lines
-and a hyphenation margin for use with
-<a href="definitions.html#TERMS_RAG">rag</a>
-copy,
-<p>
-<pre>
- .HY_SET 2 36p
-</pre>
-
-would set the hyphenation margin to 36 points.
-
-<p>
-If you wanted the same number of maximum consecutive hyphenated
-lines and a hyphenation space of 2 points for use with
-<a href="definitions.html#TERMS_JUST">justified</a>
-copy,
-<p>
-<pre>
- .HYSET 2 0 2p
-</pre>
-
-is how you'd do it.
-<p>
-
-<!---RW--->
-
-<hr width="66%" align="left">
-<a name="RW"><h3><u>Reduce whitespace</u></h3></a>
-<br>
-<nobr>Macro: <strong>RW</strong> &lt;amount of whitespace reduction between letters&gt;</nobr>
-<br>
-
-<p>
-<strong>RW</strong> (Reduce Whitespace) and its corresponding macro,
-<strong>EW</strong> (Expand Whitespace), allow you to tighten
-(or loosen)
-<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a>
-by uniformly reducing or expanding the space between characters.
-This is particularly useful when you want to squeeze or stretch
-lines on a narrow measure.
-
-<p>
-The value passed to <strong>RW</strong> may be a whole number or a
-decimal fraction. Since a value of 1 produces a noticeable reduction
-in the space between letters at text sizes, you'll most likely use
-small decimal values when tightening lines. For example,
-<p>
-<pre>
- .RW .1
- or
- .RW .2
-</pre>
-
-may be just enough to squeeze an extra character or two on a
-line without the change in letter spacing being obvious. I
-highly recommend previewing your work to assess the effect of
-<strong>RW</strong>.
-
-<p>
-<p>
-<strong>IMPORTANT:</strong> In versions prior to 1.1.9-a,
-<strong>RW</strong> affected all
-<a href="definitions.html#TERMS_FONT">fonts</a>
-in the
-<a href="definitions.html#TERMS_FAMILY">family</a>
-current at the time it was invoked. As of 1.1.9-a, this behaviour
-has been changed. <strong>RW</strong> affects only the font
-current at the time it's invoked, and remains in effect for that
-font every time the font is called, hence must be reset to zero to
-cancel its effect (<code>.RW 0</code>) on that font.
-<p>
-<strong>NOTE:</strong> By default, <strong>RW</strong> does not deposit a
-<a href="#BR">break</a>
-(<strong>BR</strong>) when it's invoked if you're in one of the
-<a href="definitions.html#TERMS_FILL">fill</a>
-modes (i.e.
-<a href="#QUAD">QUAD</a>
-<strong>L, R, C, J</strong> or
-<a href="#JUSTIFY">JUSTIFY</a>).
-If you want
-<strong>RW</strong> to break at the ends of the previous
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-while you're in a fill mode, tell <strong>mom</strong>
-that's what you want by invoking the
-<a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
-toggle macro.
-<p>
-
-<!---EW--->
-
-<hr width="66%" align="left">
-<a name="EW"><h3><u>Expand whitespace</u></h3></a>
-<br>
-<nobr>Macro: <strong>EW</strong> &lt;amount of whitespace expansion between letters&gt;</nobr>
-<br>
-
-<p>
-<strong>EW</strong> (Expand Whitespace) expands the amount of
-whitespace between letters, effectively &quot;loosening&quot; lines
-of type.
-
-<p>
-The value passed to <strong>EW</strong> may be a whole number or a
-decimal fraction. Since a value of 1 produces a noticeable
-expansion in the space between letters at text sizes, you'll most likely use
-small decimal values when loosening lines. For example,
-<p>
-<pre>
- .EW .1
- or
- .EW .2
-</pre>
-
-may be just enough to open up a line without the change in letter
-spacing being obvious. I highly recommend previewing your work to
-assess the effect of <strong>EW</strong>.
-<p>
-<strong>IMPORTANT:</strong> In versions prior to 1.1.9-a,
-<strong>EW</strong> affected all
-<a href="definitions.html#TERMS_FONT">fonts</a>
-in the
-<a href="definitions.html#TERMS_FAMILY">family</a>
-current at the time it was invoked. As of 1.1.9-a, this behaviour
-has been changed. <strong>EW</strong> affects only the font
-current at the time it's invoked, and remains in effect for that
-font every time the font is called, hence must be reset to zero to
-cancel its effect (<code>.EW 0</code>) on that font.
-<p>
-<strong>NOTE:</strong> By default, <strong>EW</strong> does not deposit a
-<a href="#BR">break</a>
-(<strong>BR</strong>) when it's invoked if you're in one of the
-<a href="definitions.html#TERMS_FILL">fill</a>
-modes (i.e.
-<a href="#QUAD">QUAD</a>
-<strong>L, R, C, J</strong> or
-<a href="#JUSTIFY">JUSTIFY</a>).
-If you want
-<strong>EW</strong> to break at the ends of the previous
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-while you're in a fill mode, tell <strong>mom</strong>
-that's what you want by invoking the
-<a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
-toggle macro.
-<p>
-
-<!---BR_AT_LINE_KERN--->
-
-<hr width="66%" align="left">
-<a name="BR_AT_LINE_KERN"><h3><u>Break before line kerning</u></h3></a>
-<br>
-<nobr>Macro: <strong>BR_AT_LINE_KERN</strong> toggle</nobr>
-<br>
-
-<p>
-By default, in
-<a href="definitions.html#TERMS_FILLED">fill</a>
-modes (i.e.
-<a href="#QUAD">QUAD</a>
-<strong>L, R, C, J</strong> or
-<a href="#JUSTIFY">JUSTIFY</a>)
-<strong>mom</strong> does not break
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-when you invoke <strong>RW</strong> or <strong>EW</strong>.
-If you'd like her to break input lines prior to <strong>RW</strong>
-or <strong>EW</strong>, invoke <strong>BR_AT_INPUT_LINE</strong>
-without any argument. To disable the breaks, invoke
-<strong>BR_AT_INPUT_LINE</strong> with any argument (<strong>OFF,
-QUIT, Q, X</strong>...), like this
-<p>
-<pre>
- .BR_AT_LINE_KERN OFF
- or
- .BR_AT_LINE_KERN X
-</pre>
-
-In <strong>QUAD L, R</strong> or <strong>C</strong>,
-<strong>mom</strong> simply breaks the line. In <strong>QUAD J</strong>
-(or <strong>JUSTIFY</strong>, which is the same thing), she breaks
-and
-<a href="definitions.html#TERMS_FORCE">force justifies</a>
-the line prior to <strong>EW</strong> or <strong>RW</strong>.
-<br>
-
-<!---KERN--->
-
-<hr width="66%" align="left">
-<a name="KERN"><h3><u>Automatic kerning</u></h3></a>
-<br>
-<nobr>Macro: <strong>KERN</strong> toggle</nobr>
-<br>
-
-<p>
-By itself (i.e. with no argument), <strong>KERN</strong> turns
-automatic pairwise
-<a href="definitions.html#TERMS_KERN">kerning</a>
-on. With any argument (e.g. OFF, Q, X), pairwise kerning is turned
-off.
-<p>
-Kerning of individual character pairs can be controlled with the
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-<strong>\*[BU &lt;n&gt;]</strong> and <strong>\*[FU &lt;n&gt;]</strong>. See
-<a href="inlines.html#INLINE_KERNING_MOM">Inline Escapes, kerning</a>.
-<p>
-
-<!---LIGATURES--->
-
-<hr width="66%" align="left">
-<a name="LIGATURES"><h3><u>Automatic ligature generation</u></h3></a>
-<br>
-<nobr>Macro: <strong>LIGATURES</strong> toggle</nobr>
-<br>
-Alias: <strong>LIG</strong>
-
-<p>
-Provided your current font has
-<a href="definitions.html#TERMS_LIGATURES">ligatures</a>,
-<strong>LIGATURES</strong>, by itself, turns on automatic
-generation of ligatures. When automatic ligature generation is
-on, simply typing the letters of a ligature combination will
-produce the correct ligature upon output. For example, if you
-type the word &quot;finally&quot;, the fi combination will be
-output as an fi ligature. Generally speaking, ligatures are A
-Good Thing, hence <strong>mom</strong> has them on by default.
-<p>
-<strong>LIGATURES</strong> with any argument turns automatic
-ligature generation off.
-<p>
-<strong>NOTE:</strong> Not all fonts support ligatures.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_MODIFICATIONS"></a>
-
-<a name="MODIFICATIONS">
- <h2><u>Type modifications: pseudo-italic, -bold, -condensed, -extended</u></h2>
-</a>
-
-It sometimes happens that a PostScript
-<a href="definitions.html#TERMS_FAMILY">family</a>
-doesn't contain all the fonts you need. You might, for example,
-be missing an italic font, or a bold font. Or you might not be able
-to get your hands on a condensed family. That's where these macros
-and inline escapes come in. With them, you can fake the fonts
-you're missing. A word of caution, though: &quot;faked&quot;
-fonts are just that--faked. You should only use them as a
-last resort, and then only sparingly. A word or two or a line
-or two in a faked font will pass unnoticed; large patches of
-type in a faked font look typographically cheap.
-<br>
-
-<a name="INDEX_MODIFICATIONS">
- <h3><u>Type modifications macro list</u></h3>
-</a>
-
-<ul>
- <li><strong>Pseudo italic</strong>
- <ul>
- <li><a href="#SETSLANT">SETSLANT</a> -- degree of pseudo-italicizing
- <li><a href="#SLANT_INLINE">\*[SLANT]</a> -- inline escape for pseudo-italicizing type
- </ul>
- <li><strong>Pseudo bold</strong>
- <ul>
- <li><a href="#SETBOLDER">SETBOLDER</a> -- amount of emboldening
- <li><a href="#BOLDER_INLINE">\*[BOLDER]</a> -- inline escape for emboldening type
- </ul>
- <li><strong>Pseudo condensed</strong>
- <ul>
- <li><a href="#CONDENSE">CONDENSE</a> -- percentage for pseudo-condensed type
- <li><a href="#COND_INLINE">\*[COND]</a> -- inline escape for pseudo-condensed type
- </ul>
- <li><strong>Pseudo extended</strong>
- <ul>
- <li><a href="#EXTEND">EXTEND</a> -- percentage for pseudo-extended type
- <li><a href="#EXT_INLINE">\*[EXT]</a> -- inline escape for pseudo-extending
- </ul>
-</ul>
-
-<!---SETSLANT--->
-
-<hr width="66%" align="left">
-<a name="SETSLANT"><h3><u>Set degree of slant for pseudo-italicizing</u></h3></a>
-<br>
-<nobr>Macro: <strong>SETSLANT</strong> &lt;degrees to slant type&gt; | RESET</nobr>
-
-<p>
-Pseudo-italicizing of type is accomplished by slanting a roman font
-a certain number of degrees to the right. <strong>SETSLANT</strong>
-lets you fix the number of degrees. <strong>Mom</strong>'s
-default is 15, which produces an acceptable approximation of an
-italic font. If you want another value -- say, 13 degrees --
-you'd set it by entering
-<p>
-<pre>
- .SETSLANT 13
-</pre>
-
-If you change the degree of slant and later want to set it back
-to the <strong>mom</strong> default, do
-<p>
-<pre>
- .SETSLANT RESET
-</pre>
-
-<strong>NOTE:</strong> By itself, <strong>SETSLANT</strong>
-will not start pseudo-italicizing type; it merely tells
-<strong>mom</strong> what degree of slant you want. To start
-pseudo-italicizing, use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\*[SLANT]</strong>.
-<p>
-
-<!---\*[SLANT]--->
-
-<hr width="66%" align="left">
-<a name="SLANT_INLINE"><h3><u>Pseudo italic on/off</u></h3></a>
-<br>
-Inline: <strong>\*[SLANT] -- turn pseudo-italic on</strong>
-<br>
-Inline: <strong>\*[SLANTX] -- turn pseudo-italic off</strong>
-
-<p>
-<strong>\*[SLANT]</strong> begins pseudo-italicizing type.
-<strong>\*[SLANTX]</strong> turns the feature off. Both are
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
-therefore they should not appear as separate lines, but rather
-be embedded in text lines, like this:
-<p>
-<pre>
- Not \*[SLANT]everything\*[SLANTX] is as it seems.
-</pre>
-
-Alternatively, if you wanted the whole line pseudo-italicized,
-you'd do
-<p>
-<pre>
- \*[SLANT]Not everything is as it seems.\*[SLANTX]
-</pre>
-
-Once <strong>\*[SLANT]</strong> is invoked, it remains in effect
-until turned off.
-
-<p>
-<strong>NOTE:</strong> If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-with
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>mom</strong> underlines pseudo-italics by default. To
-change this behaviour, use the special macro
-<a href="docprocessing.html#SLANT_MEANS_SLANT">SLANT_MEANS_SLANT</a>.
-<p>
-
-<!---SETBOLDER--->
-
-<hr width="66%" align="left">
-<a name="SETBOLDER"><h3><u>Set amount of emboldening</u></h3></a>
-<br>
-<nobr>Macro: <strong>SETBOLDER</strong> &lt;amount of emboldening, in machine units&gt; | RESET</nobr>
-
-<p>
-Emboldening of type is accomplished by printing characters
-twice; the second printing is slightly offset from the first,
-effectively &quot;thickening&quot; the character.
-<strong>SETBOLDER</strong> lets you set the number of
-<a href="definitions.html#TERMS_UNITS">machine units</a>
-for the offset. <strong>Mom</strong>'s default is 700 units, which
-produces an acceptable approximation of a bold font. If you want
-another value -- say, 500 units -- you'd set it by entering
-<p>
-<pre>
- .SETBOLDER 500
-</pre>
-
-If you change the emboldening offset and later want to set it back
-to the <strong>mom</strong> default, do
-<p>
-<pre>
- .SETBOLDER RESET
-</pre>
-
-<strong>NOTE:</strong> By itself, <strong>SETBOLDER</strong>
-will not start emboldening type; it merely tells
-<strong>mom</strong> what you want the emboldening offset to be.
-To start emboldening, use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\*[BOLDER]</strong>.
-<p>
-
-<!---\*[BOLDER]--->
-
-<hr width="66%" align="left">
-<a name="BOLDER_INLINE"><h3><u>Emboldening on/off</u></h3></a>
-<br>
-Inline: <strong>\*[BOLDER] -- turn emboldening on</strong>
-<br>
-Inline: <strong>\*[BOLDERX] -- turn emboldening off</strong>
-
-<p>
-<strong>\*[BOLDER]</strong> begins emboldening type.
-<strong>\*[BOLDERX]</strong> turns the feature off. Both are
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
-therefore they should not appear as separate lines, but rather
-be embedded in text lines, like this:
-<p>
-<pre>
- Not \*[BOLDER]everything\*[BOLDERX] is as it seems.
-</pre>
-
-Alternatively, if you wanted the whole line emboldened,
-you'd do
-<p>
-<pre>
- \*[BOLDER]Not everything is as it seems.\*[BOLDERX]
-</pre>
-
-Once <strong>\*[BOLDER]</strong> is invoked, it remains in effect
-until turned off.
-
-<p>
-<strong>NOTE:</strong> If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-with
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>mom</strong> ignores <strong>\*[BOLDER]</strong>
-requests.
-<p>
-
-<!---CONDENSE--->
-
-<hr width="66%" align="left">
-<a name="CONDENSE"><h3><u>Set percentage for pseudo-condensed type</u></h3></a>
-<br>
-<nobr>Macro: <strong>CONDENSE</strong> &lt;pseudo-condense percentage&gt;</nobr>
-
-<p>
-Pseudo-condensing of type is accomplished by reducing the width of
-characters at a given point size without reducing their height,
-effectively narrowing them so they look like condensed type.
-<strong>CONDENSE</strong> tells <strong>mom</strong> what
-percentage of the normal character width you want the characters
-to be condensed.
-<p>
-<strong>Mom</strong> has no default value for
-<strong>CONDENSE</strong>, therefore you must set it before using the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<a href="#COND_INLINE">\*[COND]</a>.
-80 percent of the normal character width is a good value, and
-you'd set it like this:
-<p>
-<pre>
- .CONDENSE 80
-</pre>
-
-<strong>NOTE:</strong> By itself, <strong>CONDENSE</strong>
-will not start pseudo-condensing type; it merely tells
-<strong>mom</strong> what percentage of the normal character
-width you want characters to be condensed.
-To start pseudo-condensing, use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\*[COND]</strong>.
-<p>
-<strong>Additional note:</strong> Make sure that pseudo-condensing
-is off (with
-<a href="#COND_INLINE">\*[CONDX]</a>)
-before before making any changes to the pseudo-condense percentage
-with <strong>CONDENSE</strong>.
-<p>
-
-<!---\*[COND]--->
-
-<hr width="66%" align="left">
-<a name="COND_INLINE"><h3><u>Pseudo-condensing on/off</u></h3></a>
-<br>
-Inline: <strong>\*[COND] -- turn pseudo-condensing on</strong>
-<br>
-Inline: <strong>\*[CONDX] -- turn pseudo-condensing off</strong>
-
-<p>
-<strong>\*[COND]</strong> begins pseudo-condensing type.
-<strong>\*[CONDX]</strong> turns the feature off. Both are
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
-therefore they should not appear as separate lines, but rather
-be embedded in text lines, like this:
-<p>
-<pre>
- \*[COND]Not everything is as it seems.\*[CONDX]
-</pre>
-
-<strong>\*[COND]</strong> remains in effect until you turn it
-off with <strong>\*[CONDX]</strong>.
-
-<p>
-<strong>IMPORTANT:</strong> You MUST turn <strong>\*[COND]</strong>
-off before making any changes to the point size of your type, either
-via the
-<a href="#PS">PT_SIZE</a>
-macro or with the <strong>\s</strong> inline escape. If you wish
-the new point size to be pseudo-condensed, simply reinvoke
-<strong>\*[COND]</strong> afterwards. Equally,
-<strong>\*[COND]</strong> must be turned off before changing the
-condense percentage with <a href="#CONDENSE">CONDENSE</a>.
-
-<p>
-<strong>NOTE:</strong> If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-with
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>mom</strong> ignores <strong>\*[COND]</strong>
-requests.
-<p>
-
-<!---EXTEND--->
-
-<hr width="66%" align="left">
-<a name="EXTEND"><h3><u>Set percentage for pseudo-extended type</u></h3></a>
-<br>
-<nobr>Macro: <strong>EXTEND</strong> &lt;pseudo-extend percentage&gt;</nobr>
-
-<p>
-Pseudo-extending of type is accomplished by increasing the width of
-characters at a given point size without increasing their height,
-effectively widening them so they look like extended type.
-<strong>EXTEND</strong> tells <strong>mom</strong> what
-percentage of the normal character width you want the characters
-to be extended.
-<p>
-<strong>Mom</strong> has no default value for
-<strong>EXTEND</strong>, therefore you must set it before using the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<a href="#EXT_INLINE">\*[EXT]</a>.
-120% of the normal character width is a good value, and
-you'd set it like this:
-<p>
-<pre>
- .EXTEND 120
-</pre>
-
-<strong>NOTE:</strong> By itself, <strong>EXTEND</strong>
-will not start pseudo-extending type; it merely tells
-<strong>mom</strong> what percentage of the normal character
-width you want characters to be extended.
-To start pseudo-extending, use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-<strong>\*[EXT]</strong>.
-
-<p>
-<strong>Additional note:</strong> Make sure that
-pseudo-extending is off (with
-<a href="#EXT_INLINE">\*[EXTX]</a>)
-before before making any changes to the pseudo-extend percentage
-with <strong>EXTEND</strong>.
-<p>
-
-<!---\*[EXT]--->
-
-<hr width="66%" align="left">
-<a name="EXT_INLINE"><h3><u>Pseudo-extending on/off</u></h3></a>
-<br>
-Inline: <strong>\*[EXT] -- turn pseudo-extending on</strong>
-<br>
-Inline: <strong>\*[EXTX] -- turn pseudo-extending off</strong>
-
-<p>
-<strong>\*[EXT]</strong> begins pseudo-extending type.
-<strong>\*[EXTX]</strong> turns the feature off. Both are
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
-therefore they should not appear as separate lines, but rather
-be embedded in text lines, like this:
-<p>
-<pre>
- \*[EXT]Not everything is as it seems.\*[EXTX]
-</pre>
-
-<strong>\*[EXT]</strong> remains in effect until you turn it
-off with <strong>\*[EXTX]</strong>.
-
-<p>
-<strong>IMPORTANT:</strong> You MUST turn <strong>\*[EXT]</strong>
-off before making any changes to the point size of your type, either
-via the
-<a href="#PS">PT_SIZE</a>
-macro or with the <strong>\s</strong> inline escape. If you wish
-the new point size to be pseudo-extended, simply reinvoke
-<strong>\*[EXT]</strong> afterwards. Equally,
-<strong>\*[EXT]</strong> must be turned off before changing the
-extend percentage with <a href="#EXTEND">EXTEND</a>.
-
-<p>
-<strong>NOTE:</strong> If you're using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
-with
-<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
-<strong>mom</strong> ignores <strong>\*[EXT]</strong>
-requests.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_ALDRLD"></a>
-
-<a name="ALDRLD">
- <h2><u>Vertical movement</u></h2>
-</a>
-
-The two macros in this section allow you to move down or up on the page
-relative to the current
-<a href="definitions.html#TERMS_BASELINE">baseline</a>.
-
-<a name="INDEX_ALDRLD">
- <h3><u>Vertical movement macro list</u></h3>
-</a>
-<ul>
- <li><a href="#ALD">ALD</a> -- Advance Lead
- <li><a href="#RLD">RLD</a> -- Reverse Lead
-</ul>
-
-<!---ALD--->
-
-<hr width="66%" align="left">
- <a name="ALD"><h3><u>Advance Lead (move downward)</u></h3></a>
-<br>
-<nobr>Macro: <strong>ALD</strong> &lt;distance to move downward&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>ALD</strong> takes one argument: the distance to move downward
-on the page relative to the current vertical position.
-<p>
-Used by itself, or preceded by
-<a href="#BR">BR</a>,
-<strong>ALD</strong> will advance by one line space plus the
-distance you specify. Preceded by
-<a href="#EL">EL</a>,
-it will advance by exactly the distance you specify.
-<p>
-<strong>ALD</strong> requires a unit of measure. Decimal fractions
-are allowed, and values may be combined. Therefore, to move down
-on the page by 1/4 of an inch, you could enter either
-<p>
-<pre>
- .ALD .25i
- or
- .ALD 1P+6p
-</pre>
-
-As the mnemonic (<strong>A</strong>dvance
-<strong>L</strong>ea<strong>D</strong>) suggests, you'll most often
-use <strong>ALD</strong> with
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-of lead.
-
-<p>
-<strong>NOTE:</strong> if you want to use <strong>ALD</strong>
-at the top of a page (i.e. to advance to the starting position
-of type on a page), combine the value you want with -1v (minus
-one line space), like this:
-<p>
-<pre>
- .ALD 1i-1v
-</pre>
-
-At the top of a page, this will advance one inch from the
-top edge of the paper. Without the -1v, the same command would
-advance one inch from the top of the page plus the distance of
-one line space.
-<p>
-<strong>Important:</strong> Do NOT use <strong>ALD</strong> in this
-way if you have set a top margin with
-<a href="#T_MARGIN">T_MARGIN</a>
-or
-<a href="#PAGE">PAGE</a>.
-<p>
-
-<!---RLD--->
-
-<hr width="66%" align="left">
- <a name="RLD"><h3><u>Reverse Lead (move upward)</u></h3></a>
-<br>
-<nobr>Macro: <strong>RLD</strong> &lt;distance to move upward&gt;</nobr>
-<br>
-<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>RLD</strong> takes one argument: the distance to move
-upward on the page relative to the current vertical position.
-<p>
-Used by itself, or preceded by
-<a href="#BR">BR</a>,
-<strong>RLD</strong> will advance by one line space, then
-reverse by the distance you specify. Preceded by
-<a href="#EL">EL</a>,
-it will reverse by exactly the distance you specify.
-<p>
-<strong>RLD</strong> requires a unit of measure. Decimal fractions
-are allowed, and values may be combined. Therefore, to move up
-on the page by 1/4 of an inch, you could enter either
-<p>
-<pre>
- .RLD .25i
- or
- .RLD 1P+6p
-</pre>
-
-As the mnemonic (<strong>R</strong>dvance
-<strong>L</strong>ea<strong>D</strong>) suggests, you'll most often
-use <strong>RLD</strong> with
-<a href="definitions.html#TERMS_PICASPOINTS">points</a>
-of lead.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_TABS"></a>
-
-<a name="TABS">
- <h2><u>Tabs</u></h2>
-</a>
-
-<strong>Mom</strong> provides two different kinds of tab setup:
-typesetting tabs and string tabs. Neither one has anything to
-do with the tab key on your keyboard, and both are utterly
-divorced from groff's notion of tabs. I recommend reading this
-section carefully in order to understand how
-<strong>mom</strong> handles tabs.
-<p>
-<strong>NOTE:</strong> see the section
-<a href="typemacdoc.html#TYPESETTING">Using typesetting macros during document processing</a>
-for re-assuring information on the use of tabs during
-<a href="docprocessing.html#DOCPROCESSING">document processing</a>.
-<p>
-
-<a name="TYPESETTING_TABS"><h3><u>Typesetting tabs</u></h3></a>
-<p>
-Typesetting tabs are defined by both an indent from the left margin and
-a line length. This is quite different from typewriter-style tab stops
-(the groff norm) that only define the left indent. In conjunction
-with the
-<a href="#MULTI_COLUMNS">multi-column macros</a>,
-typesetting tabs significantly facilitate
-tabular and columnar work.
-<p>
-Typesetting tabs are created with the
-<a href="#TAB_SET">TAB_SET</a>
-macro. <strong>TAB_SET</strong> identifies the tab (by number),
-establishes its left indent and line length, and optionally sets
-a quad direction and fill mode. After tabs have been created with
-<strong>TAB_SET</strong>, they can be called at any time with the
-<a href="#TAB">TAB</a>
-macro.
-<p>
-
-<a name="TYPESETTING_TABS_TUT"><h3><u>Quickie tutorial on typesetting tabs</u></h3></a>
-<p>
-Say you want to set up three tabs to produce an employee evaluation
-that looks something like this:
-<p>
-<a name="TYPSETTING_TABS_SAMPLE"></a>
-<pre>
- CRITERION EVALUATION COMMENTS
-
- Service Good Many clients specifically request
- support from Joe by name.
-
- Punctuality Satisfactory Tends to arrive after 8:00am, but
- often works through lunch hour.
-
- Team spirit Needs work Persistently gives higher priority
- to helping clients than respecting
- organizational hierarchy.
-</pre>
-
-You want the first tab (&quot;CRITERION&quot;)
-<br>
-<ul>
- <li>to begin at the left margin of the page (i.e. no indent)
- <li>to have a line length of 5 picas
- <li>to be set flush left
-</ul>
-<br>
-Tabs must be numbered, and each has to be set up with a separate
-<a href="#TAB_SET">TAB_SET</a>
-line. Therefore, to set up tab 1, you enter
-<p>
-<pre>
- .TAB_SET 1 0 5P L
- | | | |
- tab #__| | | |__direction
- | |
- indent__| |__length
-</pre>
-
-You want the second tab (&quot;EVALUATION&quot;)
-<br>
-<ul>
- <li>to begin 8 picas from the left margin
- <li>to have a length of 9 picas
- <li>to be set centred.
-</ul>
-<br>
-You set it up like this:
-<p>
-<pre>
- .TAB_SET 2 8P 9P C
- | | | |
- tab #__| | | |__direction
- | |
- indent__| |__length
-</pre>
-
-You want the third tab (&quot;COMMENTS&quot;)
-<br>
-<ul>
- <li>to begin 19 picas from the left margin
- <li>to have a length of 17 picas
- <li>to be set flush left, <a href="definitions.html#TERMS_FILLED">filled</a>
-</ul>
-<br>
-The setup looks like this:
-<p>
-<pre>
- .TAB_SET 3 19P 17P L QUAD
- | | | | |
- | | | | |__fill output lines
- | | | |
- tab #__| | | |__direction
- | |
- indent__| |__length
-</pre>
-
-Once the tabs are set up, you can call them in one of two ways:
-<br>
-<ul>
- <li><a href="#TAB">TAB</a> (with the tab
- number as an argument) breaks the current line,
- advances one linespace, and calls the tab.
- <li><a href="#TN">TN</a> (Tab Next) keeps
- you on the current line and moves over to the next
- tab in sequence (i.e. from 1 to 2, 2 to 3, etc.).
-</ul>
-<br>
-To exit from tabs and restore your original left margin, line length,
-quad direction and fill mode, use
-<a href="#TQ">TQ</a>
-(Tab Quit).
-<p>
-Here's how the input for our sample employee evaluation looks
-(with some introductory parameters):
-<p>
-<pre>
- .PAGE 8.5i 11i 1i 1i 1i
- .FAMILY T
- .FT R
- .PT_SIZE 14
- .LS 16
- .QUAD LEFT
- .KERN
- .HY OFF
- .SS 0
- .TAB_SET 1 0 5P L
- .TAB_SET 2 8P 9P C
- .TAB_SET 3 19P 17P L QUAD
- .TAB 1
- CRITERION
- .TN
- EVALUATION
- .TN
- COMMENTS
- .SP
- .TAB 1
- Service
- .TN
- Good
- .TN
- Many clients specifically request support from Joe by name.
- .SP
- .TAB 1
- Punctuality
- .TN
- Satisfactory
- .TN
- Tends to arrive after 8:00am, but often works through lunch hour.
- .SP
- .TAB 1
- Team spirit
- .TN
- Needs work
- .TN
- Persistently gives higher priority to helping clients
- than respecting organizational hierarchy.
- .TQ
-</pre>
-
-Try setting this up and previewing it with
-<p>
-<pre>
- groff -mom -X &lt;filename&gt;
-</pre>
-
-Notice how <kbd>.TN</kbd> simply moves over to the next tab,
-while the combination <kbd>.SP/.TAB 1</kbd> breaks the
-line, advances by one extra linespace, and calls the first tab.
-<p>
-Notice, too, how the <kbd>QUAD</kbd> argument passed to
-tab 3 means you don't have to worry about the length of
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>;
-<strong>mom</strong>
-<a href="definitions.html#TERMS_FILLED">fills</a>
-the tab and sets the type flush left.
-<p>
-<a name="STRING_TABS"><h3><u>String tabs (autotabs)</u></h3></a>
-<p>
-String tabs let you mark off tab positions with
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-embedded in
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>.
-Left indents and line lengths are calculated from the beginning and
-end positions of the marks. This is especially useful when tab
-indents and lengths need to be determined from the text that goes in
-each tab.
-<p>
-Setting up string tabs is a two-step procedure. First, you enter an
-input line in which you mark off where you want tabs to begin and end.
-(This is often best done in conjunction with the
-<a href="goodies.html#SILENT">SILENT</a>
-macro.)
-<p>
-Next, you invoke the
-<a href="#ST">ST</a>
-macro for every string tab you defined, and optionally pass quad and
-fill information to it. That done, string tabs are called with
-the
-<a href="#TAB">TAB</a>
-macro, just like typesetting tabs.
-<p>
-In combination with the
-<a href="goodies.html#PAD">PAD</a>
-macro and the groff inline escape
-<a href="inlines.html#INLINE_HORIZONTAL_GROFF">\h</a>
-(move horizontally across the page) or <strong>mom</strong>'s
-<a href="inlines.html#INLINE_HORIZONTAL_MOM">\*[FWD &lt;distance&gt;]</a>
-(move forward) inline, string tabs provide
-tremendous flexibility in setting up complex tab structures.
-<p>
-<a name="STRING_TABS_TUT"><h3><u>Quickie tutorial on string tabs</u></h3></a>
-<p>
-Say you want to set up tabs for the
-<a href="#TYPSETTING_TABS_SAMPLE">employee evaluation form</a>
-used as an example in the
-<a href="#TYPESETTING_TABS_TUT">typesetting tabs tutorial</a>.
-This time, though, you want to play around with the point size of
-type, so you can't know exactly how long the tabs will be or where
-they should start. All you know is
-<br>
-<ul>
- <li>CRITERION is the longest line in tab 1
- <li>EVALUATION is the longest line in tab 2
- <li>tab 3 should extend to the current right margin
- <li>you want a 1 pica gutter between each tab
-</ul>
-<br>
-This is an ideal job for string tabs.
-<p>
-The first thing you need for string tabs is an
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-with tab positions marked on it. Tabs are marked with the
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-<a href="#ST_INLINE">\*[ST&lt;n&gt;]</a>
-and
-<a href="#ST_INLINE">\*[ST&lt;n&gt;X]</a>,
-where <strong>&lt;n&gt;</strong>
-is the number you want the tab to have. (In this example, we
-enclose the input line with the
-<a href="goodies.html#SILENT">SILENT</a>
-macro so the line doesn't print. We also use the
-<a href="goodies.html#PAD">PAD</a>
-macro to permit defining tab 3 as simply &quot;the amount of
-space remaining on the input line.&quot;)
-<p>
-The setup looks like this:
-<p>
-<pre>
- .SILENT
- .PAD "\*[ST1]CRITERION\*[ST1X]\*[FWD 12p]\*[ST2]EVALUATION\*[ST2X]\*[FWD 12p]\*[ST3]#\*[ST3X]"
- .SILENT OFF
-</pre>
-
-The long line after <kbd>.PAD</kbd> looks scary, but it isn't.
-Here's what it means when broken down into its component parts:
-<br>
-<ul>
- <li>The longest line in tab 1 is &quot;CRITERION&quot;, so we
- enclose CRITERION with begin/end markers for string tab 1:
- <p>
- <kbd>\*[ST1]CRITERION\*[ST1X]</kbd>
- <br>
- <li>We want a 1 pica (12 points) gutter between tab 1 and 2,
- so we insert 12 points of space with \*[FWD 12p]
- (<strong>F</strong>or<strong>W</strong>ar<strong>D</strong> 12 points):
- <p>
- <kbd>\*[FWD 12p]</kbd>
- <br>
- <li>The longest line in tab 2 is &quot;EVALUATION&quot;, so
- we enclose EVALUATION with begin/end markers for string
- tab 2:
- <p>
- <kbd>\*[ST2]EVALUATION\*[ST2X]</kbd>
- <br>
- <li>We want 1 pica (12 points) between tab 2 and 3, so we
- insert 12 points of space with another \*[FWD 12p]:
- <p>
- <kbd>\*[FWD 12p]</kbd>
- <br>
- <li>We want tab 3 to be as long as whatever space remains on
- the current line length, so we enclose the
- <a href="goodies.html#PAD_MARKER">pad marker</a>
- (#) with begin/end markers for string tab 3:
- <p>
- <kbd>\*[ST3]#\*[ST3X]</kbd>
- <br>
-</ul>
-<br>
-The tabs are now defined, but they require
-<a href="definitions.html#TERMS_QUAD">quad direction</a>
-and
-<a href="definitions.html#TERMS_FILLED">fill</a>
-information. For each string tab defined above, enter a
-separate
-<a href="#ST">ST</a>
-line, like this:
-<p>
-<pre>
- .ST 1 L
- .ST 2 L
- .ST 3 L QUAD
- | | |
- | | |__fill output lines
- | |
- tab__| |__direction
- number
-</pre>
-
-From here on in, you call the tabs with
-<a href="#TAB">TAB</a>
-and
-<a href="#TN">TN</a>
-just like typesetting tabs (see
-<a href="#TYPESETTING_TABS_TUT">typesetting tabs tutorial</a>).
-<p>
-Here's the complete setup and entry for the sample employee
-evaluation form utilizing string tabs.
-<p>
-<pre>
- .PAGE 8.5i 11i 1i 1i 1i
- .FAMILY T
- .FT R
- .PT_SIZE 14
- .LS 16
- .QUAD LEFT
- .KERN
- .HY OFF
- .SS 0
- .SILENT
- .PAD "\*[ST1]CRITERION\*[ST1X]\*[FWD 12p]\*[ST2]EVALUATION\*[ST2X]\*[FWD 12p]\*[ST3]#\*[ST3X]"
- .SILENT OFF
- .ST 1 L
- .ST 2 L
- .ST 3 L QUAD
- .TAB 1
- CRITERION
- .TN
- EVALUATION
- .TN
- COMMENTS
- .SP
- .TAB 1
- Service
- .TN
- Good
- .TN
- Many clients specifically request support from Joe by name.
- .SP
- .TAB 1
- Punctuality
- .TN
- Satisfactory
- .TN
- Tends to arrive after 8:00am, but often works through lunch hour.
- .SP
- .TAB 1
- Team spirit
- .TN
- Needs work
- .TN
- Persistently gives higher priority to helping clients
- than respecting organizational hierarchy.
- .TQ
-</pre>
-
-Try setting this up and previewing it with
-<p>
-<pre>
- groff -mom -X &lt;filename&gt;
-</pre>
-
-Now, change the point size of the above sample to 12 and preview
-it again. You'll see that the tab structure remains identical (tab
-1=CRITERION, tab 2=EVALUATION, tab 3=space remaining, and the gutter
-between tabs is still 1 pica), while the position and length
-of the tabs have altered because of the new point size.
-<p>
-Now try increasing the gutters to 2 picas (<kbd>\*[FWD 24p]</kbd> or
-<kbd>\*[FWD 2P]</kbd> instead of <kbd>\*[FWD 12p]</kbd>). Preview the
-file again, and notice how the tab structure remains the same, but
-the gutters are wider.
-<p>
-
-<a name="INDEX_TABS">
- <h3><u>Tabs macro list</u></h3>
-</a>
-
-<ul>
- <li><a href="#TAB_SET">TAB_SET</a> (create typesetting tabs)
- <li><a href="#INLINE_ST">\*[ST]...\*[STX]</a> (inline escapes for marking String Tabs)
- <li><a href="#ST">ST</a> (set String Tabs)
- <li><a href="#TAB">TAB</a> (call tabs)
- <li><a href="#TN">TN</a> (Tab Next; call next tab in a sequence)
- <li><a href="#TQ">TQ</a> (Tab Quit)
-</ul>
-
-<!---TAB_SET--->
-
-<hr width="66%" align="left">
- <a name="TAB_SET"><h3><u>Set up typesetting tabs</u></h3></a>
-<br>
-<nobr>Macro: <strong>TAB_SET</strong> &lt;tab number&gt; &lt;indent&gt; &lt;length&gt; L | R | C | J [ QUAD ]</nobr>
-<br>
-<em>*&lt;indent&gt; and &lt;length&gt; require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>TAB_SET</strong> creates typesetting tabs that later can be
-called with
-<a href="#TAB">TAB</a>.
-Typesetting tabs are numbered, and defined by an indent, a length,
-and a &quot;direction&quot;, hence <strong>TAB_SET</strong> has
-four required arguments:
-<br>
-<ul>
- <li>a tab number
- <li>an indent (measured from the left margin of the page,
- or, if you're already in a tab, from the left margin of the tab)
- <li>a length
- <li>a direction
-</ul>
-<br>
-To set up a centred tab 6 picas long and 9 points from the left
-margin, you'd enter
-<p>
-<pre>
- .TAB_SET 1 9p 6P C
-</pre>
-
-The tab number in the above (&quot;1&quot;) is simply an
-identifier. It could have been 4, or 17, or 296. There's no
-need to set up tabs in numerical sequence.
-<p>
-By default, tabs are in
-<a href="definitions.html#TERMS_NOFILL">nofill</a>
-mode, meaning you can enter text in tabs on a line-for-line basis
-without having to use the
-<a href="#BR">BR</a>
-macro. If you want a tab to be
-<a href="definitions.html#TERMS_FILLED">filled</a>,
-pass the optional argument <strong>QUAD</strong>, which will
-make the tab behave as if you'd entered <kbd>.QUAD L | R |
-C</kbd>.
-<p>
-For
-<a href="definitions.html#TERMS_JUST">justified</a>
-tabs, simply pass the argument <strong>J</strong> (without the
-<strong>QUAD</strong> argument), like this:
-<p>
-<pre>
- .TAB 1 9p 6P J
-</pre>
-
-Once tabs are set, they can be called at any time with the
-<a href="#TAB">TAB #</a>
-macro, where &quot;#&quot; is the number of the desired tab.
-<p>
-You can set up any number of typesetting tabs. However, be
-aware that
-<a href="#STRING_TABS">string tabs</a>
-are also called with <strong>TAB #</strong>, so be careful that you
-don't set up a typesetting tab numbered, say, 4, when you already
-have a string tab numbered 4. Every tab, typesetting or string,
-must have a unique numeric identifier.
-<p>
-<strong>NOTE:</strong> If you use <strong>TAB_SET</strong> while
-you're currently inside a tab, the indent argument is the distance from
-the tab's left margin, not the left margin of the page. Therefore,
-you should exit tabs (with
-<a href="#TQ">TQ</a>)
-before creating new tabs (unless, of course, you want to set
-up a tab structure within the confines of an existing tab).
-<p>
-<strong>IMPORTANT:</strong> Turn all indents off (see
-<a href="#INDENTS">Indents</a>)
-before setting up tabs with <strong>TAB_SET</strong>, or
-<strong>mom</strong> may get confused.
-<p>
-
-<!---INLINE_ST--->
-
-<hr width="66%" align="left">
- <a name="INLINE_ST"><h3><u>Mark positions of string tabs</u></h3></a>
-<br>
-Inlines: <strong>\*[ST&lt;number&gt;]...\*[ST&lt;number&gt;X]</strong>
-<br>
-<em>*<a href="definitions.html#TERMS_QUAD">Quad</a>
-direction must be LEFT or JUSTIFY (see
-<a href="#QUAD">QUAD</a>
-and
-<a href="#JUSTIFY">JUSTIFY</a>)
-or the
-<a name="definitions.html#TERMS_NOFILL">no-fill mode</a>
-set to
-<a href="#LRC">LEFT</a>.
-Please see
-<a href="#IMPORTANT">IMPORTANT</a>,
-below.</em>
-<p>
-String tabs need to be marked off with
-<a href="definitions.html#TERMS_INLINES">inline escapes</a>
-before being set up with the
-<a href="#ST">ST</a>
-macro. Any input line may contain string tab markers.
-<i>&lt;number&gt;</i>, above, means the numeric identifier of
-the tab. The following shows a sample input line with string
-tab markers.
-<p>
-<pre>
- \*[ST1]Now is the time\*[ST1X] for all \*[ST2]good men\*ST2X] to come to the aid of the party.
-</pre>
-
-String tab 1 begins at the start of the line and ends after the word
-&quot;time&quot;. String tab 2 starts at &quot;good&quot; and ends
-after &quot;men&quot;. Inline escapes (e.g. font or point size
-changes, or horizontal movements, including
-<a href="goodies.html#PAD">padding</a>)
-are taken into account when <strong>mom</strong> determines the
-position and length of string tabs.
-<p>
-Up to nineteen string tabs may be marked (not necessarily all on
-the same line, of course), and they must be numbered between 1
-and 19.
-<p>
-Once string tabs have been marked in input lines, they have to
-be &quot;set&quot; with
-<a href="#ST">ST</a>,
-after which they may be called, by number, with
-<a href="#TAB">TAB</a>.
-<p>
-<strong>NOTE:</strong> Lines with string tabs marked off in them
-are normal input lines, i.e. they get printed, just like any
-input line. If you want to set up string tabs without the line
-printing, use the
-<a href="#SILENT">SILENT</a>
-macro.
-<p>
-<a name="IMPORTANT"><strong>IMPORTANT:</strong></a>
-Owing to the way groff processes
-<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
-and turns them into
-<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a>,
-it is not possible for <strong>mom</strong> to &quot;guess&quot; the
-correct starting position of string tabs marked off in lines that
-are centered or set flush right.
-<p>
-Equally, she cannot guess the starting position if a line is fully
-justified and broken with
-<a href="#SPREAD">SPREAD</a>.
-<p>
-In other words, in order to use string tabs,
-<a href="#LRC">LEFT</a>
-must be active, or, if
-<a href="#QUAD">QUAD LEFT</a>
-or
-<a href="#JUSTIFY">JUSTIFY</a>
-are active, the line on which the string tabs are marked must be
-broken &quot;manually&quot; with
-<a href="#BR">BR</a>
-(but not
-<a href="#SPREAD">SPREAD</a>).
-<p>
-To circumvent this behaviour, I recommend using the
-<a href="goodies.html#PAD">PAD</a>
-to set up string tabs in centered or flush right lines. Say, for
-example, you want to use a string tab to underscore the text of a
-centered line with a rule. Rather than this,
-<p>
-<pre>
- .CENTER
- \*[ST1]A line of text\*[ST1X]\c
- .EL
- .ST 1
- .TAB 1
- .PT_SIZE 24
- .ALD 3p
- \*[RULE]
- .RLD 3p
- .TQ
-</pre>
-
-you should do:
-<p>
-<pre>
- .QUAD CENTER
- .PAD "#\*[ST1]A line of text\*[ST1X]#"
- .EL
- .ST 1
- .TAB 1
- .PT_SIZE 24
- .ALD 3p
- \*[RULE] \" Note that you can't use \*[UP ] or \*[DOWN] with \*[RULE]
- .RLD 3p
- .TQ
-</pre>
-
-<p>
-
-<!---ST--->
-
-<hr width="66%" align="left">
- <a name="ST"><h3><u>Set string tabs</u></h3></a>
-<br>
-<nobr>Macro: <strong>ST</strong> &lt;tab number&gt; L | R | C | J [ QUAD ]</nobr>
-
-<p>
-After string tabs have been marked off on an input line (see
-<a href="#INLINE_ST">\*[ST]...\*[STX]</a>),
-you need to &quot;set&quot; them by giving them a direction
-and, optionally, the <strong>QUAD</strong> argument. In this
-respect, <strong>ST</strong> is like
-<a href="#TAB_SET">TAB_SET</a>
-except that you don't have to give <strong>ST</strong> an indent
-or a line length (that's already taken care of, inline, by
-<kbd>\*[ST]...\*[STX]</kbd>). If you want string tab 1 to be
-left, enter
-<p>
-<pre>
- .ST 1 L
-</pre>
-
-If you want it to be left and
-<a href="definitions.html#TERMS_FILLED">filled</a>, enter
-<p>
-<pre>
- .ST 1 L QUAD
-</pre>
-
-If you want it to be justified, enter
-<p>
-<pre>
- .ST 1 J
-</pre>
-
-See the
-<a href="#STRING_TABS_TUT">Quickie tutorial on string tabs</a>
-for a full explanation of setting up string tabs.
-<p>
-
-<!---TAB--->
-
-<hr width="66%" align="left">
-<a name="TAB"><h3><u>Call tabs</u></h3></a>
-<br>
-<nobr>Macro: <strong>TAB</strong> &lt;tab number&gt;</nobr>
-<br>
-Alias: <strong>TB</strong>
-<p>
-After tabs have been defined (either with
-<a href="#TAB_SET">TAB_SET</a>
-or
-<a href="#ST">ST</a>),
-<strong>TAB</strong> moves to whatever tab number you pass it as
-an argument. For example,
-<p>
-<pre>
- .TAB 3
-</pre>
-
-moves you to tab 3.
-<p>
-<a name="NOTE_TN"></a>
-<strong>NOTE:</strong> <strong>TAB</strong> breaks the line preceding
-it and advances 1 linespace. Hence,
-<p>
-<pre>
- .TAB 1
- A line of text in tab 1.
- .TAB 2
- A line of text in tab 2.
-</pre>
-
-produces, on output
-<p>
-<pre>
- A line of text in tab 1.
- A line of text in tab 2.
-</pre>
-
-If you want the tabs to line up, use
-<a href="#TN">TN</a>
-(Tab Next), like this:
-<p>
-<pre>
- .TAB 1
- A line of text in tab 1.
- .TN
- A line of text in tab 2.
-</pre>
-
-which produces
-<p>
-<pre>
- A line of text in tab 1. A line of text in tab 2.
-</pre>
-
-If the text in your tabs runs to several lines, and you want the
-first lines of each tab to align, you must use the
-<a href="#MULTI_COLUMNS">multi-column</a> macros.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Any indents in effect prior to
-calling a tab are automatically turned off by <strong>TAB</strong>.
-If you were happily zipping down the page with a left indent of 2
-picas turned on, and you call a tab whose indent from the left margin
-is 6 picas, your new distance from the left margin will be 6 picas,
-not 6 picas plus the 2 pica indent.
-<p>
-
-<!---TN--->
-
-<hr width="66%" align="left">
-<a name="TN"><h3><u>Tab Next</u></h3></a>
-<br>
-Macro: <strong>TN</strong>
-<br>
-<em>*In tabs that aren't given the QUAD argument when they're set up
-with
-<a href="#TAB_SET">TAB_SET</a>
-or
-<a href="#ST">ST</a>, you must terminate the line preceding
-<kbd>TN</kbd> with the \c inline escape. See the
-<a href="#TN_NOTE">ADDITIONAL NOTE</a>,
-<br>
-*If you find remembering whether to put in the <kbd>\c</kbd>
-bothersome, you may prefer to use the
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-alternative to
-<kbd>.TN</kbd>,
-<a href="inlines.html#TB+">\*[TB+]</a>,
-which works consistently regardless of the fill mode.</em>
-
-<p>
-<strong>TN</strong> moves over to the next tab in numeric
-sequence (tab n+1) without advancing on the page. See the
-<a href="#NOTE_TN">NOTE</a>
-in the description of the <strong>TAB</strong> macro for an
-example of how <strong>TN</strong> works.
-<p>
-<strong>NOTE:</strong> You <em>must</em> put text in the
-<a href="definitions.html#TERMS_INPUTLINE">input line</a>
-immediately after <strong>TN</strong>. &quot;Stacking&quot; of
-<strong>TN</strong>'s is not allowed. In other words, you cannot
-do
-<p>
-<pre>
- .TAB 1
- Some text
- .TN
- Some more text
- .TN
- .TN
- Yet more text
-</pre>
-
-The above example, assuming tabs numbered from 1 to 4, should be entered
-<p>
-<pre>
- .TAB 1
- Some text
- .TN
- Some more text
- .TAB 4
- Yet more text
-</pre>
-<p>
-<a name="TN_NOTE"><strong>ADDITIONAL NOTE:</strong></a>
-In versions of mom prior to 1.1.9, <strong>TN</strong> did not
-always work as advertised on the last
-<a name="TERMS_OUTPUTLINE">output line</a>
-of pages that contained a footer trap (e.g. one set with
-<a href="#B_MARGIN">B_MARGIN</a>
-or in documents formatted using the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>).
-<p>
-<strong>TN</strong> has been re-written so that this should no longer be the
-case. However, in order for it to work in tabs that have not been
-given a <kbd>QUAD</kbd> argument (see
-<a href="#TAB_SET">TAB_SET</a>
-and
-<a href="#ST">ST</a>)
-you must always &quot;join&quot; <strong>.TN</strong> to the line
-before it using the
-<a href="#JOIN">\c</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>,
-as in the following example:
-<p>
-<pre>
- .TAB_SET 1 0 1P L
- .TAB_SET 2 1P 20P L
- .TAB 1
- 1.\c
- .TN
- The first rule of survival is &quot;make and keep good friends.&quot;
-</pre>
-
-When output, the example will look like this:
-<p>
-<pre>
- 1. The first rule of survival is &quot;make and keep good friends.&quot;
-</pre>
-
-Conversely, if you did give a <kbd>QUAD</kbd> argument
-to <strong>TAB_SET</strong> or <strong>ST</strong>, the
-<strong>\c</strong> must not be used.
-<p>
-
-<!---TQ--->
-
-<hr width="66%" align="left">
-<a name="TQ"><h3><u>Tab Quit</u></h3></a>
-<br>
-Macro: <strong>TQ</strong>
-<br>
-
-<p>
-<strong>TQ</strong> takes you out of whatever tab you were in,
-advances 1 linespace, and restores the left margin, line length,
-quad direction and
-<a href="definitions.html#TERMS_FILLED">fill mode</a>
-that were in effect prior to invoking any tabs.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_MULTI_COLUMNS"></a>
-
-<a name="MULTI_COLUMNS">
- <h2><u>Multi-Columns</u></h2>
-</a>
-
-Tabs are not by nature columnar, which is to say that if the text
-inside a tab runs to several lines, calling another tab does not
-automatically move to the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of the first line in the previous tab. To demonstrate:
-<p>
-<pre>
- .TAB 1
- Carrots
- Potatoes
- Broccoli
- .TAB 2
- $1.99/5 lbs
- $0.25/lb
- $0.99/bunch
-</pre>
-
-produces, on output
-<p>
-<pre>
- Carrots
- Potatoes
- Broccoli
- $1.99/5 lbs
- $0.25/lb
- $0.99/bunch
-</pre>
-
-The multi-column macros allow you to set tabs in columnar
-fashion, rather than line by line. When you invoke multi-column
-mode (with
-<a href="#MCO">MCO</a>),
-<strong>mom</strong> saves the position of the current baseline.
-<a href="#MCR">MCR</a>
-(Multi-column return) at any point while multi-columns are on
-returns you to the saved position. Exiting multi-columns
-(<a href="#MCX">MCX</a>)
-quits the current tab (if you're in one) and moves you to the
-bottom of the longest column. (Note that you do not have to use
-multi-columns in conjunction with tabs.)
-<p>
-Using our example above, but setting it in multi-column mode,
-<p>
-<pre>
- .MCO
- .TAB 1
- Carrots
- Potatoes
- Broccoli
- .MCR
- .TAB 2
- $1.99/5 lbs
- $0.25/lb
- $0.99/bunch
- .MCX
-</pre>
-
-produces
-<p>
-<pre>
- Carrots $1.99/5 lbs
- Potatoes $0.25/lb
- Broccoli $0.99/bunch
-</pre>
-
-<strong>NOTE:</strong> Do not confuse <strong>MCO</strong> with
-the
-<a href="docprocessing.html#COLUMNS">COLUMNS</a>
-macro in the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-<p>
-<a name="INDEX_MULTI_COLUMNS">
- <h3><u>Columns macro list</u></h3>
-</a>
-<ul>
- <li><a href="#MCO">MCO (begin multi-column setting)</a>
- <li><a href="#MCR">MCR (return to top of column)</a>
- <li><a href="#MCX">MCX (exit multi-columns)</a>
-</ul>
-
-<!---MCO--->
-
-<hr width="66%" align="left">
-<a name="MCO"><h3><u>Begin multi-column setting</u></h3></a>
-<br>
-Macro: <strong>MCO</strong>
-<br>
-
-<p>
-<strong>MCO</strong>
-(<strong>M</strong>ulti-<strong>C</strong>olumn <strong>O</strong>n)
-is the macro you use to begin multi-column setting. It marks
-the current
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-as the top of your columns, for use later with
-<a href="#MCR">MCR</a>. See the
-<a href="#MULTI_COLUMNS">introduction to columns</a>
-for an explanation of multi-columns and some sample
-input.
-<p>
-<strong>NOTE:</strong> Do not confuse <strong>MCO</strong> with
-the
-<a href="docprocessing.html#COLUMNS">COLUMNS</a>
-macro in the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-<p>
-
-<!---MCR--->
-
-<hr width="66%" align="left">
-<a name="MCR"><h3><u>Return to top of column</u></h3></a>
-<br>
-Macro: <strong>MCR</strong>
-<br>
-
-<p>
-Once you've turned multi-columns on (with
-<a href="#MCO">MCO</a>),
-<strong>MCR</strong>, at any time, returns you to the top of
-your columns.
-<p>
-
-<!---MCX--->
-
-<hr width="66%" align="left">
-<a name="MCX"><h3><u>Exit multi-columns</u></h3></a>
-<br>
-<nobr>Macro: <strong>MCX</strong> [ &lt;distance to advance below longest column&gt; ]</nobr>
-<br>
-<em>*Optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>MCX</strong> takes you out of any tab you were in (by silently
-invoking
-<a href="#TQ">TQ</a>) and advances to the bottom of the longest
-column.
-<p>
-Without an argument, <strong>MCX</strong> advances 1 linespace
-below the longest column. Linespace, in this instance, is the
-<a href="definitions.html#TERMS_LEADING">leading</a>
-in effect <em>at the moment <strong>MCX</strong> is
-invoked.</em>
-<p>
-If you pass the <nobr>&lt;distance&gt; argument to</nobr>
-<strong>MCX</strong>, it advances 1 linespace below the longest
-column (see above) PLUS the distance specified by the argument.
-The argument requires a unit of measure; therefore, to advance
-an extra 6 points below where <strong>MCX</strong> would
-normally place you, you'd enter
-<p>
-<pre>
- .MCX 6p
-</pre>
-
-<strong>NOTE:</strong> If you wish to advance a precise distance
-below the
-<a href="definitions.html#TERMS_BASELINE">baseline</a>
-of the longest column, use <strong>MCX</strong> with an
-argument of 0 (zero; no unit of measure required) in conjunction
-with the
-<a href="#ALD">ALD</a>
-macro, like this:
-<p>
-<pre>
- .MCX 0
- .ALD 24p
-</pre>
-
-The above advances to precisely 24 points below the baseline
-of the longest column.
-<p>
-<hr>
-
-<!====================================================================>
-
-<a name="INTRO_INDENTS"></a>
-
-<a name="INDENTS">
- <h2><u>Indents</u></h2>
-</a>
-
-With <strong>mom</strong>'s indents, you can indent from the left,
-the right, or both margins. In addition, <strong>mom</strong>
-provides temporary left indents (i.e. only one line is indented,
-as at the start of a paragraph) and &quot;hanging&quot; left indents
-(the reverse of a temporary indent; the first line isn't indented,
-subsequent lines are).
-<p>
-<a name="INDENTS_TUT"><h3><u>A brief explanation of how mom handles indents</u></h3></a>
-<p>
-<strong>Mom</strong> provides five kinds of indents: left, right,
-both, temporary, and hanging. Each is invoked by its own name:
-<br>
-<ul>
- <li><strong>IL</strong> = <strong>I</strong>ndent <strong>L</strong>eft
- <li><strong>IR</strong> = <strong>I</strong>ndent <strong>R</strong>ight
- <li><strong>IB</strong> = <strong>I</strong>ndent <strong>B</strong>oth
- <li><strong>HI</strong> = <strong>H</strong>anging <strong>I</strong>ndent
- <li><strong>TI</strong> = <strong>T</strong>emporary <strong>I</strong>ndent
-</ul>
-<br>
-In addition, there are four macros to control exiting from
-indents:
-<br>
-<ul>
- <li><strong>IQ</strong>&nbsp;&nbsp;= quit all active indents
- <li><strong>ILX</strong>&nbsp;= exit indent style left
- <li><strong>IRX</strong>&nbsp;= exit indent style right
- <li><strong>IBX</strong>&nbsp;= exit indent style both
-</ul>
-<br>
-This section deals exclusively with <strong>IL, IR</strong> and
-<strong>IB</strong>. For an explanation
-of hanging and temporary indents -- how they work and how to use
-them -- see
-<a href="#HI">Hanging indents</a>
-and
-<a href="#TI">Temporary indents</a>.
-<p>
-The first time you invoke any of <strong>mom</strong>'s indents,
-you must supply a measure. For example,
-<p>
-<pre>
- .IL 2P
-</pre>
-
-indents text 2 picas from the left margin (or current tab
-indent).
-<p>
-When you want to exit the above indent, use either
-<p>
-<pre>
- .IQ
- or
- .ILX
-</pre>
-
-The next time you want the same indent, invoke it without the
-argument, like this:
-<p>
-<pre>
- .IL
-</pre>
-
-As you can see, once you've supplied a measure to an indent macro
-<strong>mom</strong> stores the value, obviating the need to repeat
-it on subsequent invocations. And <strong>mom</strong> doesn't just
-store the measure -- she hangs on to it tenaciously. Arguments passed
-to <strong>IL, IR</strong> and <strong>IB</strong> are additive.
-Consider the following:
-<p>
-<pre>
- .LL 20P
- .IR 2P \"Indent right by 2 picas
- A first block of text...
- ...
- ...
- .IQ \"Turn indent off
- A second block of text...
- ...
- ...
- .IR 2P \"Indent right by an additional 2 picas (i.e. 4 picas)
- A third block of text...
- ...
- ...
-</pre>
-
-The first block of text is right indented by 2 picas (i.e. the line
-length is shortened by 2 picas to 18 picas). The second block of
-text, after <strong>IQ</strong>, is, as you'd expect, set to the full
-measure. The third block of text -- the one to pay attention to --
-is not right indented by 2 picas, but rather by 4 picas.
-<strong>Mom</strong> adds the value of arguments to <strong>IL,
-IR</strong> and <strong>IB</strong> to whatever value is already
-in effect.
-<p>
-If you wanted the third block of text in the example above to
-be right indented by just 2 picas (the original measure given to
-<strong>IR</strong>), you would enter <kbd>.IR</kbd> without an
-argument.
-<p>
-Because indent arguments are additive, putting a minus sign in front
-of the argument can be used to subtract from the current value.
-In the following example, the first line is indented 18 points, the
-second is indented 36 points (18+18), and the third is again indented
-18 points (36-18).
-<p>
-<pre>
- .IL 18p \"Indent left by 18 points = 18 points
- Now is the time
- .IL 18p \"Indent left by 18 points more = 36 points
- for all good men to come
- .IL -18p \"Indent left by 18 points less = 18 points
- to the aid of the party.
-</pre>
-
-Sometimes, you may want to clear out the stored indent values -- let
-<strong>mom</strong> start indenting with a clean slate, as it were.
-Giving the optional argument <kbd>CLEAR</kbd> to any of the
-&quot;indent quit&quot; macros resets them to zero.
-<br>
-<ul>
- <li><strong>IQ CLEAR</strong>&nbsp;&nbsp;= quit and clear all indents
- <li><strong>ILX CLEAR</strong>&nbsp;= quit and clear indent style left
- <li><strong>IRX CLEAR</strong>&nbsp;= quit and clear indent style right
- <li><strong>IBX CLEAR</strong>&nbsp;= quit and clear indent style both
-</ul>
-<br>
-Indent styles may be combined and manipulated separately. You could,
-for example, have a left indent of 4 picas and a right indent of 6
-picas and control each separately, as in the following example.
-<p>
-<pre>
- .IL 4P \"Indent left 4 picas
- .IR 6P \"Indent right 6 picas
- Some text
- .IRX \"Turn off the right indent only
- More text \"Text is still indented 4 picas left
-</pre>
-
-If, at <kbd>.IRX</kbd>, you wanted the text afterwards to have no
-indents (either left or right), you would enter <kbd>.IQ</kbd>,
-which exits all indent styles at once.
-<p>
-<strong>A word of advice:</strong> Indents are best used only when
-you have a compelling reason not to change the current left margin or
-line length. In many instances where indents might seem expedient,
-it's better to use tabs, or actually change the left margin or the
-line length. <strong>Mom</strong>'s indenting macros are flexible
-and powerful, but easy to get tangled up in. Personally, I don't
-use them much, except for cutarounds and multi-level lists à la html,
-at which they excel.
-<p>
-<strong>NOTE:</strong> see the section
-<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
-for information and advice on using indents with the
-<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
-<p>
-<a name="INDEX_INDENTS"><h3><u>Indents macro list</u></h3>
-<ul>
- <li><a href="#IL">IL</a>&nbsp;&nbsp;(Indent left)
- <li><a href="#IR">IR</a>&nbsp;&nbsp;(Indent right)
- <li><a href="#IB">IB</a>&nbsp;&nbsp;(Indent both)
- <li><a href="#TI">TI</a>&nbsp;&nbsp;(Temporary indent, left)
- <li><a href="#HI">HI</a>&nbsp;&nbsp;(Hanging Indent)
- <ul>
- <li><a href="#NUM_LISTS">A recipe for numbered lists</a>
- </ul>
- <li><a href="#IQ">IQ</a>&nbsp;&nbsp;(Quit indents, all)
- <li><a href="#IQ">ILX</a>&nbsp;(Exit indent style left)
- <li><a href="#IQ">IRX</a>&nbsp;(Exit indent style right)
- <li><a href="#IQ">IBX</a>&nbsp;(Exit indent style both)
-</ul>
-
-<!---IL--->
-
-<hr width="66%" align="left">
-<a name="IL"><h3><u>Indent left</u></h3></a>
-<br>
-<nobr>Macro: <strong>IL</strong> [ &lt;measure&gt; ]</nobr>
-<br>
-<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>IL</strong> indents text from the left margin of the page,
-or if you're in a tab, from the left edge of the tab. Once
-<strong>IL</strong> is on, the left indent is applied uniformly to
-every subsequent line of text, even if you change the line length.
-<p>
-The first time you invoke <strong>IL</strong>, you must give it a
-measure. Subsequent invocations with a measure add to the previous
-measure. A minus sign may be prepended to the argument to subtract
-from the current measure. The
-<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-may be used to specify a text-dependent measure, in which case
-no unit of measure is required. For example,
-<p>
-<pre>
- .IL \w'margarine'
-</pre>
-
-indents text by the width of the word &quot;margarine&quot;.
-<p>
-With no argument, <strong>IL</strong> indents by its last
-active value. See the
-<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
-for more details.
-<p>
-<strong>NOTE:</strong> Calling a tab (with
-<a href="#TAB">TAB</a>)
-automatically cancels any active indents.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IL</strong>
-automatically turns off <strong>IB</strong>.
-<p>
-
-<!---IR--->
-
-<hr width="66%" align="left">
-<a name="IR"><h3><u>Indent right</u></h3></a>
-<br>
-<nobr>Macro: <strong>IR</strong> [ &lt;measure&gt; ]</nobr>
-<br>
-<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>IR</strong> indents text from the right margin of the
-page, or if you're in a tab, from the end of the tab.
-<p>
-The first time you invoke <strong>IR</strong>, you must give it a
-measure. Subsequent invocations with a measure add to the previous
-indent measure. A minus sign may be prepended to the argument to
-subtract from the current indent measure. The
-<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-may be used to specify a text-dependent measure, in which case
-no unit of measure is required. For example,
-<p>
-<pre>
- .IR \w'jello'
-</pre>
-
-indents text by the width of the word &quot;jello&quot;.
-<p>
-With no argument, <strong>IR</strong> indents by its last
-active value. See the
-<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
-for more details.
-<p>
-<strong>NOTE:</strong> Calling a tab (with
-<a href="#TAB">TAB</a>)
-automatically cancels any active indents.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IR</strong>
-automatically turns off <strong>IB</strong>.
-<p>
-
-<!---IB--->
-
-<hr width="66%" align="left">
-<a name="IB"><h3><u>Indent both</u></h3></a>
-<br>
-<nobr>Macro: <strong>IB</strong> [ &lt;left measure&gt; &lt;right measure&gt; ]</nobr>
-<br>
-<em>*The optional arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-<strong>IB</strong> allows you to set or invoke a left and a right
-indent at the same time.
-<p>
-At its first invocation, you must supply a measure for both indents;
-at subsequent invocations when you wish to supply a measure, both must
-be given again. As with <strong>IL</strong> and <strong>IR</strong>,
-the measures are added to the values previously passed to the macro.
-Hence, if you wish to change just one of the values, you must
-give an argument of zero to the other.
-<p>
-<strong>A word of advice:</strong> If you need to manipulate left and
-right indents separately, use a combination of <strong>IL</strong>
-and <strong>IR</strong> instead of <strong>IB</strong>. You'll
-save yourself a lot of grief.
-<p>
-A minus sign may be prepended to the arguments to subtract from their
-current values. The
-<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
-<a href="definitions.html#TERMS_INLINES">inline escape</a>
-may be used to specify text-dependent measures, in which case
-no unit of measure is required. For example,
-<p>
-<pre>
- .IB \w'margarine' \w'jello'
-</pre>
-
-left indents text by the width of the word &quot;margarine&quot;
-and right indents by the width of &quot;jello&quot;.
-<p>
-Like <strong>IL</strong> and <strong>IR</strong>, <strong>IB</strong>
-with no argument indents by its last active values. See the
-<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
-for more details.
-<p>
-<strong>NOTE:</strong> Calling a tab (with
-<a href="#TAB">TAB</a>)
-automatically cancels any active indents.
-<p>
-<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IB</strong>
-automatically turns off <strong>IL</strong> and
-<strong>IR</strong>.
-<p>
-
-<!---TI--->
-
-<hr width="66%" align="left">
-<a name="TI"><h3><u>Temporary (left) indent</u></h3></a>
-<br>
-<nobr>Macro: <strong>TI</strong> [ &lt;measure&gt; ]</nobr>
-<br>
-<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-A temporary indent is one that applies only to the first line of
-text that comes after it. Its chief use is indenting the first
-line of paragraphs. (<strong>Mom</strong>'s
-<a href="docprocessing.html#PP">PP</a>
-macro, for example, uses a temporary indent.)
-<p>
-The first time you invoke <strong>TI</strong>, you must give it
-a measure. If you want to indent the first line of a
-paragraph by, say, 2
-<a href="definitions.html#TERMS_EM">ems</a>,
-do
-<p>
-<pre>
- .TI 2m
-</pre>
-
-Subsequent invocations of <strong>TI</strong> do not require you
-to supply a measure; <strong>mom</strong> keeps track of the
-last measure you gave it.
-<p>
-Because temporary indents are temporary, there's no need to turn
-them off.
-<p>
-<strong>IMPORTANT:</strong> Unlike <strong>IL, IR</strong> and
-<strong>IB</strong>, measures given to <strong>TI</strong>
-are NOT additive. In the following example, the second <kbd>.TI
-2P</kbd> is exactly 2 picas.
-<p>
-<pre>
- .TI 1P
- The beginning of a paragraph...
- .TI 2P
- The beginning of another paragraph...
-</pre>
-
-<!---HI--->
-
-<hr width="66%" align="left">
-<a name="HI"><h3><u>Hanging indent</u></h3></a>
-<br>
-<nobr>Macro: <strong>HI</strong> [ &lt;measure&gt; ]</nobr>
-<br>
-<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
-
-<p>
-A hanging indent looks like this:
-<p>
-<pre>
- The thousand injuries of Fortunato I had borne as best I
- could, but when he ventured upon insult, I vowed
- revenge. You who so well know the nature of my soul
- will not suppose, however, that I gave utterance to a
- threat, at length I would be avenged...
-</pre>
-
-The first line of text &quot;hangs&quot; outside the left
-margin.
-<p>
-In order to use hanging indents, you must first have a left indent
-active (set with either
-<a href="#IL">IL</a>
-or
-<a href="#IB">IB</a>).
-<strong>Mom</strong> will not hang text outside the left margin set with
-<a href="#L_MARGIN">L_MARGIN</a>
-or outside the left margin of a tab.
-<p>
-The first time you invoke <strong>HI</strong>, you must give it
-a measure. If you want the first line of a paragraph to hang by,
-say, 1 pica, do
-<p>
-<pre>
- .IL 1P
- .HI 1P
-</pre>
-
-Subsequent invocations of <strong>HI</strong> do not require you
-to supply a measure; <strong>mom</strong> keeps track of the
-last measure you gave it.
-<p>
-Generally speaking, you should invoke <strong>HI</strong> immediately
-prior to the line you want hung (i.e. without any intervening
-<a href="definitions.html#TERMS_CONTROLLINES">control lines</a>).
-And because hanging indents affect only one line, there's no need to turn
-them off.
-<p>
-<a name="NUM_LISTS"><h3><u>A recipe for numbered lists</u></h3></a>
-<p>
-<strong>PLEASE NOTE: mom</strong> now has macros for setting lists (see
-<a href="docelement.html#LIST_INTRO">Nested lists</a>),
-making this recipe superfluous. It remains here in the hope that
-it will clarify the use of hanging indents generally, if no longer
-specifically.
-<p>
-Consider the following example:
-<p>
-<pre>
- .PAGE 8.5i 11i 1i 1i 1i 1i
- .FAMILY T
- .FT R
- .PT_SIZE 12
- .LS 14
- .JUSTIFY
- .KERN
- .SS 0
- .IL \w'\0\0.' \"Indent left by 2 figure spaces and a period
- .HI \w'\0\0.' \"Hang first line of text back by 2 figure spaces and a period
- 1.\0The most important point to be considered is whether the
- answer to the meaning of life, the universe, and everything
- really is 42. We have no-one's word on the subject except
- Mr. Adams'.
- .HI
- 2.\0If the answer to the meaning of life, the universe,
- and everything is indeed 42, what impact does this have on
- the politics of representation? 42 is, after all not a
- prime number. Are we to infer that prime numbers don't
- deserve equal rights and equal access in the universe?
- .HI
- 3.\0If 42 is deemed non-exclusionary, how do we present it
- as the answer and, at the same time, forestall debate on its
- exclusionary implications?
-</pre>
-
-First, we invoke a left indent with a measure equal to the width
-of 2
-<a href="definitions.html#TERMS_FIGURESPACE">figures spaces</a>
-plus a period (using the
-<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
-inline escape). At this point, the left indent is active; text
-afterwards would normally be indented. However, we invoke a hanging
-indent of exactly the same width, which hangs the first line (and
-first line only!) to the left of the indent by the same distance
-(in this case, that means &quot;out to the left margin&quot;).
-Because we begin the first line with a number, a period, and a
-figure space, the actual text (&quot;The most important point...&quot;)
-starts at exactly the same spot as the indented lines that
-follow.
-<p>
-Notice that subsequent invocations of <strong>HI</strong> without a
-measure produce exactly the same effect.
-<p>
-Paste the example above into a file and preview it with <kbd>groff -mom -X
-&lt;filename&gt;</kbd> to see hanging indents in action.
-<p>
-<strong>IMPORTANT:</strong> Unlike <strong>IL, IR</strong> and
-<strong>IB</strong>, measures given to <strong>HI</strong>
-are NOT additive. Each time you pass a measure to
-<strong>HI</strong>, the measure is treated literally.
-<p>
-
-<!---IX--->
-
-<hr width="66%" align="left">
-<a name="IQ"><h3><u>Quitting indents</u></h3></a>
-<br>
-<nobr>Macro: <strong>IQ</strong>&nbsp;&nbsp;[ CLEAR ]&nbsp;&nbsp;(quit any/all indents -- see <strong>*IMPORTANT NOTE</strong>)</nobr>
-<br>
-<nobr>Macro: <strong>ILX</strong>&nbsp;[ CLEAR ]&nbsp;&nbsp;(exit <strong>I</strong>ndent <strong>L</strong>eft)</nobr>
-<br>
-<nobr>Macro: <strong>IRX</strong>&nbsp;[ CLEAR ]&nbsp;&nbsp;(exit <strong>I</strong>ndent <strong>R</strong>ight)</nobr>
-<br>
-<nobr>Macro: <strong>IBX</strong>&nbsp;[ CLEAR ]&nbsp;&nbsp;(exit <strong>I</strong>ndent <strong>B</strong>oth)</nobr>
-
-<p>
-<strong>*IMPORTANT NOTE:</strong>
-<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<em>Formerly, the macro for quitting all indents was</em>
-<strong>.IX</strong><em>. This usage is now deprecated, in favour
-of</em> <strong>.IQ</strong><em>.</em> <strong>.IX</strong> <em>will
-continue to behave as before, but</em> <strong>mom</strong> <em>will
-issue a warning to stderr indicating that you should update your
-documents.
-<br>
-&nbsp;&nbsp;&nbsp;&nbsp;As a consequence of this change,</em>
-<strong>ILX, IRX</strong> <em>and</em> <strong>IBX</strong> <em>may
-now also be invoked as</em> <strong>ILQ, IRQ</strong> <em>and</em>
-<strong>IBQ</strong><em>. Both forms are acceptable.</em>
-<p>
-Without an argument, the macros to quit indents merely restore your
-original margins and line length. The measures stored in the
-indent macros themselves are saved so you can call them again without
-having to supply a measure.
-<p>
-If you pass these macros the optional argument <strong>CLEAR</strong>,
-they not only restore your original left margin and line length,
-but also clear any values associated with a particular indent style.
-The next time you need an indent of the same style, you have to supply
-a measure again.
-<p>
-<strong>IQ CLEAR</strong>, as you'd suspect, quits and clears
-the values for all indent styles at once.
-
-<p>
-<hr>
-<a href="goodies.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/momdoc/using.html b/contrib/groff/contrib/mom/momdoc/using.html
deleted file mode 100644
index 1265eec8cd97..000000000000
--- a/contrib/groff/contrib/mom/momdoc/using.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
-<title>Using mom</title>
-</head>
-<body bgcolor="#dfdfdf">
-
-<!====================================================================>
-
-<a href="typesetting.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-<p>
-<a name="TOP"></a>
-<a name="USING">
- <h1 align="center"><u>USING MOM</u></h1>
-</a>
-
-<a href="#USING_INTRO">Introduction</a>
-<br>
-<a href="#USING_MACROS">Inputting macros</a>
-<br>
-<a href="#USING_INVOKING">Invoking groff</a>
-<br>
-<a href="#USING_PREVIEWING">Previewing documents</a>
-<p>
-<hr>
-<h2><a name="USING_INTRO"><u>Introduction</u></a></h2>
-
-As explained in the section
-<a href="intro.html#INTRO">What is mom?</a>,
-<strong>mom</strong> can be used in two ways: for straight typesetting
-or for document processing. The difference between the two is
-that in straight typesetting, every macro is a literal
-typesetting instruction that determines precisely how text
-following it will look. Document processing, on the other hand,
-uses markup &quot;tags&quot; (e.g. <kbd>.PP</kbd> for
-paragraphs, <kbd>.HEAD</kbd> for heads, <kbd>.FOOTNOTE</kbd>
-for footnotes, etc.) that make a lot of typesetting decisions
-automatically.
-<p>
-You tell <strong>mom</strong> that you want to use the document
-processing macros with the
-<a href="docprocessing.html#START">START</a>
-macro, explained below. After <strong>START</strong>,
-<strong>mom</strong> determines the appearance of text following
-the markup tags automatically, although you, the user, can easily
-change how <strong>mom</strong> interprets the tags. This gives you
-nearly complete control over document design. In addition, the
-typesetting macros, in combination with document processing, let you
-meet all sorts of typesetting needs that just can't be covered by
-&quot;one macro fits all&quot; markup tags.
-<p>
-<a name="USING_MACROS">
- <h2><u>How to input mom's macros</u></h2>
-</a>
-
-Regardless of which way you use <strong>mom</strong>, the
-following apply.
-<br>
-<ol>
- <li>You need a good text editor for inputting
- <strong>mom</strong> files.
- <p>
- I cannot recommend highly enough that you use an
- editor that lets you write syntax highlighting
- rules for <strong>mom</strong>'s macros and
- <a href="definitions.html#TERMS_INLINES">inline escapes</a>.
- I use the vi clone called elvis, and find it a pure
- joy in this regard. Simply colourizing macros and
- inlines to half-intensity can be enough to make text stand
- out clearly from formatting commands.
- <li>All <strong>mom</strong>'s macros begin with a period
- (dot) and must be entered in upper case (capital)
- letters.
- <li>Macro
- <a href="definitions.html#TERMS_ARGUMENTS">arguments</a>
- are separated from the macro itself by spaces. Multiple
- arguments to the same macro are separated from each
- other by spaces. Any number of spaces may be used. All
- arguments to a macro must appear on the same line as the
- macro.
- <li>Any argument (except a
- <a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>)
- that is not a digit must be entered in upper case
- (capital) letters.
- <li>Any argument that requires a plus or minus sign must
- have the plus or minus sign prepended to the argument
- with no intervening space (e.g. +2, -4).
- <li>Any argument that requires a
- <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
- must have the unit appended directly to the argument,
- with no intervening space (e.g. 4P, .5i, 2v).
- <li><a href="definitions.html#TERMS_STRINGARGUMENT">String arguments</a>,
- in the sense that the term is used in this manual, must
- be surrounded by double-quotes (&quot;text of
- string&quot;). Multiple string arguments are separated
- from each other by spaces (each argument surrounded by
- double-quotes, of course).
- <li>If a string argument, as entered in your text editor,
- becomes uncomfortably long (i.e. runs longer than the
- visible portion of your screen or window), you may break
- it into two or more lines by placing the backslash
- character (<kbd>\</kbd>) at the ends of lines to break
- them up, like this:
- <p>
- <pre>
- .SUBTITLE "An In-Depth Consideration of the \
- Implications of Forty-Two as the Meaning of Life, \
- The Universe, and Everything"
- </pre>
-</ol>
-
-It's important that formatted documents be easy to read/interpret
-when you're looking at them in a text editor. One way to achieve
-this is to group macros that serve a similar purpose together, and
-separate them from other groups of macros with a blank comment line.
-In groff, that's done with <kbd>\#</kbd> on a line by itself.
-Consider the following, which is a template for starting the
-chapter of a book.
-<p>
-<pre>
- .TITLE "My Pulitzer Novel"
- .AUTHOR "Joe Blow"
- .CHAPTER 1
- \#
- .DOCTYPE CHAPTER
- .PRINTSTYLE TYPESET
- \#
- .FAM P
- .PT_SIZE 10
- .LS 12
- \#
- .START
-</pre>
-
-<a name="USING_INVOKING">
- <h2><u>Printing -- invoking groff with mom</u></h2>
-</a>
-
-After you've finished your document, naturally you will want to
-print it. This involves invoking groff from the command line.
-In all likelihood, you already know how to do this, but in case
-you don't, here are two common ways to do it.
-<p>
-<pre>
- groff -mom -l &lt;filename&gt;
- groff -mom &lt;filename&gt; | lpr
-</pre>
-
-In the first, the <strong>-l</strong> option to groff tells
-groff to send the output to your printer. In the second, you're
-doing the same thing, except you're telling groff to pipe the
-output to your printer. Basically, they're the same thing. The
-only advantage to the second is that your system may be set up
-to use something other than <strong>lpr</strong> as your print
-command, in which case, you can replace <strong>lpr</strong>
-with whatever is appropriate to your box.
-<p>
-Sadly, it is well beyond the scope of this manual to tell you
-how to set up a printing system. See the README file for
-minimum requirements to run groff with <strong>mom</strong>.
-<p>
-<strong>NOTE FOR ADVANCED USERS:</strong> I've sporadically had groff
-choke on perfectly innocent sourced files within <strong>mom</strong>
-documents. You'll know you have this problem when groff complains that
-it can't find the sourced file even when you can plainly see that the
-file exists, and that you've given <code>.so</code> the right path and
-name. Should this happen, pass groff the <code>-U</code> (unsafe mode)
-option along with the other options you require. Theoretically, you
-only need <code>-U</code> with <code>.open, .opena, .pso, .sy,</code>
-and <code>.pi</code>, however reality seems, at times, to dictate
-otherwise.
-<p>
-<a name="USING_PREVIEWING">
- <h2><u>How to preview documents</u></h2>
-</a>
-
-Other than printing out hard copy, there are two well-established
-methods for previewing your work. Both assume you have a working
-X server.
-<p>
-Groff itself comes with a quick and dirty previewer called
-gxditview. Invoke it with
-<p>
-<pre>
- groff -X -mom filename
-</pre>
-
-It's not particularly pretty, doesn't have many navigation
-options, requires a lot of work if you want to use other than
-the &quot;standard&quot; groff PostScript fonts, and occasionally
-has difficulty accurately reproducing some of
-<strong>mom</strong>'s macro effects
-(<a href="goodies.html#SMARTQUOTES">smartquotes</a>
-and
-<a href="goodies.html#LEADER">leaders</a>
-come to mind). What it does have going for it is that it's fast and
-doesn't gobble up system resources.
-<p>
-A surer way to preview documents is with <strong>gv</strong>
-(ghostview). This involves processing documents with groff,
-and directing the output to a PostScript file, like this,
-<p>
-<pre>
- groff -mom filename &gt; filename.ps
-</pre>
-then opening .ps file in <strong>gv</strong>.
-<p>
-While that may sound like a lot of work, I've set up my editor
-(elvis) to do it for me. Whenever I'm working on a document that
-needs previewing/checking, I fire up <strong>gv</strong> with the
-&quot;Watch File&quot; option turned on. To look at the file, I
-tell elvis to process it (with groff) and send it to a temporary
-file (<kbd>groff -mom filename &gt; filename.ps</kbd>), then open
-the file inside <strong>gv</strong>. Ever after, when I want to
-look at any changes I make, I simply tell elvis to work his magic
-again. The Watch File option in <strong>gv</strong> registers that
-the file has changed, and automatically loads the new version.
-Voilà! --instant previewing.
-
-<p>
-<hr>
-<a href="typesetting.html#TOP">Next</a>&nbsp;&nbsp;
-<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
-<a href="#TOP">Top</a>&nbsp;&nbsp;
-<a href="toc.html">Back to Table of Contents</a>
-</body>
-</html>
diff --git a/contrib/groff/contrib/mom/om.tmac b/contrib/groff/contrib/mom/om.tmac
deleted file mode 100644
index 37e9161fd841..000000000000
--- a/contrib/groff/contrib/mom/om.tmac
+++ /dev/null
@@ -1,15889 +0,0 @@
-.\" om.tmac
-.ig
-Mom -- a typesetting/document-processing macro set for groff.
-
-Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- Written by Peter Schaffter (peter@faustus.dyn.ca)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-Version 1.3-a
--------------
-Antoine de St-Exupéry asserted that elegance in engineering is
-achieved not when there is nothing left to add, but when there is
-nothing left to take away.
-
-By those standards, mom is a Rube Goldberg contraption. She was
-created over the years while groff, and my understanding of it,
-changed and evolved. However, I'm a firm believer in "if it
-ain't broke, don't fix it," so I'm leaving any major clean-up
-of redundancies and whatnot for a rainy day.
-
-Inasmuch as possible, macros that turn a feature on or off follow
-a similar style. Invoking the macro without an argument turns
-the feature on. Invoking it with any other argument turns it off.
-Use of the argument OFF is recommended, but not required; users
-may find other conventions preferable (e.g. NO, X, END, QUIT, etc.).
-
-"<anything>" in the description of arguments that can be passed
-to a macro means that any argument turns the feature off.
-..
-\#
-\# ====================================================================
-\#
-\# Check which version of groff is being run
-.if (\n[.x]\n[.y] < 118) \
-. ab You need GNU troff version 1.18 or higher to run this version of mom.
-\# Check that GNU troff is being run
-.if !\n[.g]=1 \
-. ab The mom macros require that you be running GNU troff.
-.if \n(.C \
-. ab The groff mom macros do not work in compatibility mode.
-\# Add supplementary styles
-.sty \n[.fp] L \" Light Roman
-.sty \n[.fp] LI \" Light Italic
-.sty \n[.fp] LCD \" Light Condensed Roman
-.sty \n[.fp] LCDI \" Light Condensed Italic
-.sty \n[.fp] LEX \" Light Extended Roman
-.sty \n[.fp] LEXI \" Light Extended Italic
-.sty \n[.fp] CD \" Medium/Book Condensed Roman
-.sty \n[.fp] CDI \" Medium/Book Condensed Italic
-.sty \n[.fp] EX \" Medium/Book Extended Roman
-.sty \n[.fp] EXI \" Medium/Book Extended Italic
-.sty \n[.fp] DB \" DemiBold Roman
-.sty \n[.fp] DBI \" DemiBold Italic
-.sty \n[.fp] BCD \" Bold Condensed Roman
-.sty \n[.fp] BCDI \" Bold Condensed Italic
-.sty \n[.fp] BEX \" Bold Extended Roman
-.sty \n[.fp] BEXI \" Bold Extended Italic
-.sty \n[.fp] HV \" Heavy Roman
-.sty \n[.fp] HVI \" Heavy Italic
-.sty \n[.fp] HVCD \" Heavy Condensed Roman
-.sty \n[.fp] HVCDI \" Heavy Condensed Italic
-.sty \n[.fp] HVEX \" Heavy Extended Roman
-.sty \n[.fp] HVEXI \" Heavy Extended Italic
-.sty \n[.fp] BL \" Black Roman
-.sty \n[.fp] BLI \" Black Italic
-.sty \n[.fp] BLCD \" Black Condensed Roman
-.sty \n[.fp] BLCDI \" Black Condensed Italic
-.sty \n[.fp] BLEX \" Black Extended Roman
-.sty \n[.fp] BLEXI \" Black Extended Italic
-.sty \n[.fp] UBL \" Ultra-Black Roman
-.sty \n[.fp] UBLI \" Ultra-Black Italic
-\#
-\# ====================================================================
-\#
-\# TYPESETTING MACROS, STRINGS, AND ALIASES
-\# ========================================
-\#
-\# +++ALIASES+++
-\#
-\# Alias .als as ALIAS, and .aln (number registers) as ALIASN
-\#
-.als ALIAS als
-.als ALIASN aln
-\#
-\#
-\# ALIASES FOR GROFF REQUESTS
-\# --------------------------
-\#
-.ALIAS MAC de
-.ALIAS BR br
-.ALIAS SP sp
-.ALIAS PAGELENGTH pl
-.ALIAS SPREAD brp
-.ALIAS ESC_CHAR ec
-.ALIAS STRING ds
-\#
-\# ALIASES FOR NUMBER REGISTERS
-\# ----------------------------
-\#
-.ALIASN #PT_SIZE .ps \"fractional point size in units
-.ALIASN #DIVER_DEPTH dn \"diversion depth
-.ALIASN #DIVER_WIDTH dl \"diversion width
-.ALIASN #TRAP_DISTANCE .t \"distance to next trap
-.ALIASN #LEAD .v \"line space (.vs, not .ls)
-.ALIASN #PAGE_LENGTH .p \"page length
-.ALIASN #NUM_ARGS .$ \"number of arguments passed to a macro
-.ALIASN #INDENT .i \"value of current indent
-\#
-\# ====================================================================
-\#
-\# MISCELLANEOUS
-\# =============
-.nr #L_MARGIN \n(.o \" Tabs, etc require #L_MARGIN
-.cflags 4 /\(en \" So slash and en-dashes get broken
-.warn 8192
-\#
-.ig
-About the warn level
---------------------
-
-There's a lot of testing for the presence of number registers and
-strings in this macro file. Many of the registers and strings
-pop into and out of existence on the fly. For convenience, I
-often use
-
- .if \\n[whatever] and .if !\\n[whatever]
-
-to test "if the register exists and is (not) empty." Groff,
-encountering such tests when called with the -ww options, emits
-
- warning: number register whatever not defined.
-
-Groff also warns about strings similarly tested for.
-
-The warn level, above, is high in order to shut off those
-warnings. If you're futzing in this file and need more verbose
-warnings, either comment out ".warn 8192" or set the warnlevel
-to the one you need (but be ready for lots of what I've just
-described).
-..
-\#
-\# ====================================================================
-\#
-\# +++PAGE LAYOUT+++
-\#
-\# Macros that control the physical layout of the page: paper size
-\# and margins.
-\#
-\# PAGE WIDTH
-\# ----------
-\# *Argument:
-\# <width of printer sheet>
-\# *Function:
-\# Stores user supplied page width in register #PAGE_WIDTH.
-\# *Notes:
-\# #PAGE_WIDTH is used to establish the default LL (and right margin).
-\# Requires unit of measure.
-\#
-.MAC PAGEWIDTH END
-. br
-. nr #PAGE_WIDTH \\$1
-. if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
-. if !r#R_MARGIN \{ .R_MARGIN 1i \}
-.END
-\#
-\#
-\# L_MARGIN
-\# --------
-\# *Argument:
-\# <offset from page left>
-\# *Function:
-\# Stores user supplied page offset in register #L_MARGIN.
-\# Sets .po to user supplied offset.
-\# *Notes:
-\# Requires unit of measure.
-\#
-.MAC L_MARGIN END
-. br
-. nr #L_MARGIN (\\$1)
-. po \\n[#L_MARGIN]u
-.END
-\#
-\#
-\# R_MARGIN
-\# --------
-\# *Argument:
-\# <width of right margin>
-\# *Function:
-\# Stores user supplied right margin in register #R_MARGIN.
-\# *Notes:
-\# This is a pseudo-margin. Right margin is actually a function of
-\# line length. The macro calculates line length from the page offset
-\# and the value plugged into #R_MARGIN.
-\#
-\# N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
-\#
-\# Requires unit of measure.
-\#
-.MAC R_MARGIN END
-. br
-. nr #R_MARGIN (\\$1)
-. ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
-. ta \\n(.lu
-. nr #L_LENGTH \\n(.l
-.END
-\#
-\#
-\# T_MARGIN
-\# --------
-\# *Argument:
-\# <distance to advance from top of page>
-\# *Function:
-\# Stores the user supplied top margin in register #T_MARGIN.
-\# Advances user supplied depth from the top of the page.
-\# *Notes:
-\# Requires unit of measure.
-\#
-.MAC T_MARGIN END
-. nr #T_MARGIN (\\$1)
-. nr #TOP 1
-. if !\\n[#DOCS] \{\
-. sp |\\n[#T_MARGIN]u-1v
-. \}
-. wh 0i DO_T_MARGIN
-.END
-\#
-\#
-\# B_MARGIN
-\# --------
-\# *Argument:
-\# <space to leave at the bottom of the page>
-\# *Function:
-\# Stores the user supplied bottom margin in register #B_MARGIN.
-\# *Notes:
-\# Requires unit of measure.
-\#
-.MAC B_MARGIN END
-. br
-. nr #B_MARGIN (\\$1)
-. nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN]
-. nr #B_MARGIN_SET 1
-. wh -\\n[#B_MARGIN]u DO_B_MARGIN
-.END
-\#
-\#
-\# PAGE
-\# ----
-\# *Arguments:
-\# <pagewidth> [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
-\# *Function:
-\# Page set-up. Collects arguments and passes them to the appropriate
-\# macros.
-\# *Notes:
-\# All arguments after pagewidth are optional, but must appear
-\# in the order given above. (User can fill in as much or as
-\# little as desired.)
-\#
-\# All arguments require a unit of measure.
-\#
-.MAC PAGE END
-. br
-. PAGEWIDTH \\$1
-. PAGELENGTH \\$2
-. ie '\\$3'' \{ .L_MARGIN \\n(.o \}
-. el \{ .L_MARGIN \\$3 \}
-. ie '\\$4'' \{ .R_MARGIN 1i \}
-. el \{ .R_MARGIN \\$4 \}
-. if !'\\$5'' \{ .T_MARGIN \\$5 \}
-. if !'\\$6'' \{ .B_MARGIN \\$6 \}
-.END
-\#
-\# =====================================================================
-\#
-\# +++PAGE CONTROL+++
-\#
-\# Generic macros for breaking pages.
-\#
-\# DO_T_MARGIN
-\# -----------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Plants the top margin at the top of each page.
-\# *Notes:
-\# The trap is set in .T_MARGIN or .PAGE
-\#
-.MAC DO_T_MARGIN END
-. ev T_MARGIN
-. nr #TOP 1
-. sp |\\n[#T_MARGIN]u-1v
-. ev
-. sp -\\n[#T_MARGIN_LEAD_ADJ]u
-.END
-\#
-\#
-\# DO_B_MARGIN
-\# -----------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Plants the bottom margin at the bottom of each page.
-\# *Notes:
-\# The trap is set in .B_MARGIN or .PAGE.
-\#
-.MAC DO_B_MARGIN END
-. nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
-. ev B_MARGIN
-. bp
-. ev
-.END
-\#
-\#
-\# NEWPAGE
-\# -------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Breaks to a new page.
-\# *Notes:
-\# If a B_MARGIN has been set, processes that, otherwise, just
-\# breaks to a new page.
-\#
-.MAC NEWPAGE END
-. br
-. nr #NEWPAGE 1
-. ie \\n[#B_MARGIN_SET]=1 \{\
-. ie !\\n[#DOCS]=1 \{\
-. ev NP
-. bp
-. ev
-. \}
-. el \{\
-. if \\n[#COLUMNS]=1 \{ .nr #COL_NUM \\n[#NUM_COLS] \}
-. ie !\\n[#FN_DEPTH] \{\
-. ch FN_OVERFLOW_TRAP
-. DO_B_MARGIN
-. wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
-. \}
-. el \{\
-. DO_B_MARGIN
-. \}
-. \}
-. \}
-. el \{\
-. DO_B_MARGIN
-. \}
-.END
-\#
-\# =====================================================================
-\#
-\# +++GENERAL STYLE MACROS+++
-\#
-\# Macros that are likely to appear together to define general
-\# type style: line length, family, font, point size, and line
-\# spacing.
-\#
-\# LINE LENGTH
-\# -----------
-\# *Argument:
-\# <line length>
-\# *Function:
-\# Stores user supplied line length in register #L_LENGTH.
-\# Sets .ll to #L_LENGTHu
-\# *Notes:
-\# Requires unit of measure.
-\#
-.MAC LL END
-. nr #USER_SET_L_LENGTH 1
-. ll \\$1
-. nr #L_LENGTH \\n(.l
-. ta \\n(.lu
-.END
-\#
-\#
-\# +++FAMILY AND FONT+++
-\#
-\# FALLBACK FONT
-\# -------------
-\# *Argument:
-\# <fallback font> [ ABORT | WARN ] | ABORT | WARN
-\# *Function:
-\# Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font
-\# called "dummy" at font position 0.
-\# *Notes:
-\# Calls to non-existent families cause mom to continue processing
-\# files using the fallback font until a valid family is entered.
-\#
-\# Calls to non-existent fonts generate warnings. If ABORT is passed
-\# to FALLBACK_FONT, mom stops processing files after the warning.
-\# Otherwise, she continues to process files using the fallback font
-\# after the warning is issued. The default fallback font is CR; the
-\# default for font warnings is to abort.
-\#
-.MAC FALLBACK_FONT END
-. if \\n[#NUM_ARGS]=1 \{\
-. if '\\$1'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
-. if '\\$1'WARN' \{\
-. if r#ABORT_FT_ERRORS \{ .nr #ABORT_FT_ERRORS 0 \}
-. \}
-. if !'\\$1'ABORT' \{\
-. if !'\\$1'WARN' \{\
-. fp 0 dummy \\$1
-. \}
-. \}
-. \}
-. if \\n[#NUM_ARGS]=2 \{\
-. fp 0 dummy \\$1
-. if '\\$2'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
-. if '\\$2'WARN' \{ .nr #ABORT_FT_ERRORS 0 \}
-. \}
-.END
-\#
-.FALLBACK_FONT CR ABORT
-\#
-\# FAMILY
-\# ------
-\# *Argument:
-\# <font family>
-\# *Function:
-\# Stores user supplied font family in string $FAMILY. Sets .fam
-\# to $FAMILY.
-\#
-.MAC FAMILY END
-. if \\n[#PRINT_STYLE]=1 \{\
-. fam C
-. return
-. \}
-. if \\n[#IGNORE] \{\
-. fam C
-. return
-. \}
-. if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
-. ds $SAVED_STYLE \\n[.sty]
-. \}
-. ds $FAMILY \\$1
-. ft 0
-. fam \\*[$FAMILY]
-. if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
-. ft \\*[$SAVED_STYLE]
-. if !F\\n[.fn] \{\
-. ft 0
-. \}
-. \}
-. if \\n[#COLLATE]=1 \{\
-. if !r#START \{ .DOC_FAM \\*[$FAMILY] \}
-. \}
-.END
-\#
-\#
-\# FONT
-\# ----
-\# *Argument:
-\# R | I | B | BI | <other style extension>
-\# *Function:
-\# Stores user supplied font in $FONT and sets .ft to $FONT.
-\#
-.MAC FT END
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie '\\$1'I' \{\
-. if \\n[#UNDERLINE_ITALIC]=1 \{\
-. UNDERLINE
-. return
-. \}
-. if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
-. ds $FONT \\$1
-. ft \\*[$FONT]
-. return
-. \}
-. \}
-. el \{ .UNDERLINE OFF \}
-. return
-. \}
-. ds $FONT \\$1
-. ft 0
-. ft \\*[$FONT]
-. if if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
-. if '\\n[.sty]'' \{\
-. if !F\\n[.fn] \{\
-. if !S\\*[$FONT] \{\
-. tm1 "[mom]: Font style "\\*[$FONT]" at line \\n(.c has not been registered.
-. ie \\n[#ABORT_FT_ERRORS]=0 \{\
-. tm1 " Continuing to process using fallback font.
-. \}
-. el .ab Aborting.
-. \}
-. if \\n[.f]=0 \{\
-. tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n(.c does not exist in family "\\n[.fam]",
-. tm1 " or family "\\n[.fam]" has not been installed in font/devps.
-. ie \\n[#ABORT_FT_ERRORS]=0 \{\
-. tm1 " Continuing to process using fallback font.
-. \}
-. el .ab Aborting.
-. \}
-. \}
-. \}
-. \}
-.END
-\#
-\#
-\# POINT SIZE
-\# ----------
-\# *Arguments:
-\# <point size of type>
-\# *Function:
-\# Sets point size to user supplied value in scaled points.
-\# If #AUTO_LEAD is on, sets .vs to #AUTOLEAD_VALUE+#PT_SIZE.
-\# *Notes:
-\# Must NOT use a unit of measure.
-\#
-.MAC PT_SIZE END
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. if \\n[#IGNORE] \{ .return \}
-. nr #PT_SIZE_SET 1
-. ps \\$1
-. if \\n[#AUTO_LEAD] \{\
-. ie \\n[#AUTOLEAD_FACTOR] \{ .vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u \}
-. el \{ .vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u \}
-. \}
-. nr #PT_SIZE_IN_UNITS \\n[.ps]
-.END
-\#
-\#
-\# SIZE (inline)
-\# -------------
-\# *Arguments:
-\# <point size of type>
-\# *Function:
-\# Sets point size to user supplied value in scaled points.
-\# Intended to be called inline with \*[SIZE <n><unit>]
-\# *Notes:
-\# Can be used with a unit of measure or not.
-\#
-.MAC SIZE END
-\c
-.ps \\$1
-.END
-\#
-\#
-\# LEADING
-\# -------
-\# *Argument:
-\# <leading between lines of text>
-\# *Function:
-\# Turns off #AUTOLEAD if it's on.
-\# Sets .vs to user supplied value.
-\# *Notes:
-\# Does not require unit of measure. LS automatically turns off AUTOLEAD.
-\#
-.MAC LS END
-. br
-. nr #OLD_LEAD \\n(.v
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. if \\n[#IGNORE] \{ .return \}
-. if \\n[#AUTO_LEAD] \{\
-. rr #AUTO_LEAD
-. rr #AUTOLEAD_FACTOR
-. \}
-. vs \\$1
-. if \\n[#TOP] \{\
-. nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
-. sp -\\n[#TOP_BASELINE_ADJ]u
-. rr #TOP
-. rr #TOP_BASELINE_ADJ
-. \}
-.END
-\#
-.MAC RESET_LEAD END
-' vs
-. ch RESET_LEAD
-.END
-\#
-\#
-\# AUTOLEAD
-\# --------
-\# *Argument:
-\# <leading value to add to #PT_SIZE> [FACTOR]
-\# *Function:
-\# Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
-\# Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
-\# All subsequent PT_SIZE requests reset the leading in the same way until
-\# AUTOLEAD is turned off.
-\# *Notes:
-\# With the optional FACTOR argument, the current point size is
-\# multiplied by #AUTOLEAD_VALUE instead of the two being added
-\# together.
-\#
-.MAC AUTOLEAD END
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. if \\n[#IGNORE] \{ .return \}
-. nr #AUTO_LEAD 1
-. nr #OLD_LEAD \\n(.v
-. nr #AUTOLEAD_VALUE (p;\\$1)
-. ie \\n[#NUM_ARGS]=2 \{\
-. if '\\$2'FACTOR' \{\
-. nr #AUTOLEAD_FACTOR 1
-. vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u
-. \}
-. \}
-. el \{\
-. vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u
-. \}
-. if \\n[#TOP] \{\
-. nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
-. sp -\\n[#TOP_BASELINE_ADJ]u
-. rr #TOP
-. rr #TOP_BASELINE_ADJ
-. \}
-.END
-\#
-\#
-\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
-\# ------------------------------------------------
-.ds ROM \EfR
-.ds IT \EfI
-.ds BD \EfB
-.ds BDI \Ef(BI
-.ds PREV \EfP
-.ds S \Es
-\#
-\# =====================================================================
-\#
-\# +++KERNING+++
-\#
-\# AUTOMATIC PAIRWISE KERNING
-\# --------------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns automatic pairwise kerning on or off.
-\#
-.MAC KERN END
-. ie '\\$1'' \{\
-. kern
-. nr #KERN 1
-. \}
-. el \{\
-. kern 0
-. nr #KERN 0
-. \}
-.END
-\#
-\#
-.ig
-INLINE KERNING AND HORIZONTAL MOVEMENT
---------------------------------------
-Kerning
-
-Inline kerning provides a simple method for users to adjust the
-amount of space between any two letters. It's predicated on a
-unit of measure "U", which is 1/36 of the current point size as
-returned by \n[.ps]. E.g., if the current point size is 18,
-\n[.ps] returns 18000u, therefore U=500u. Since U remains
-proportional relative to the current point size, the amount
-of kerning between two letters as expressed in Us remains
-visually similar regardless of changes in point size.
-
-N.B.--the amount of inline kerning supplied by \*[BU<n>] or
-\*[FU<n>] is added to or subtracted from any kerning that already
-takes place between two characters when automatic kerning is
-turned on.
-
-In groff v. 1.17.2, it was not possible to pass arguments to macros that
-were called with inline escapes, nor thence to evaluate conditional
-expressions. Consequently, each pseudo-escape \[BU<n>] had to be defined
-separately with ".char".
-
-As of v. 1.18, one can pass arguments to inline strings/macros,
-hence it is now possible to do \*[BU n] where n, inline, is the desired
-number of kern units. The original .char definitions have been left in
-for backward compatibility with documents created prior to mom-1.1.3c.
-..
-\#
-.nr #KERN_UNIT 36
-.ds BU \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
-.ds FU \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
-\#
-\# Initialize strings for pre-1.1.3c-style BU and FU
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<37 \{\
-. ds BU\n[#LOOP] \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
-.\}
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<37 \{\
-. ds FU\n[#LOOP] \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
-.\}
-.rr #LOOP
-\#
-.ig
-Horizontal movements
-
-BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
-specified number of points.
-Left in for backward compatibility with mom-1.1.3c, the
-preferred methods for inline horizontal movements are now
-\*[BCK <n><unit>] and \*[FWD <n><unit>].
-..
-\#
-.ds BCK \h'-\\$1'
-.ds FWD \h'\\$1'
-\#
-.ds BP.25 \h'-.25'
-.ds BP.5 \h'-.5'
-.ds BP.75 \h'-.75'
-.ds BP1 \h'-1p'
-.ds BP1.25 \h'-1.25p'
-.ds BP1.5 \h'-1.5p'
-.ds BP1.75 \h'-1.75p'
-.ds BP2 \h'-2p'
-.ds BP2.25 \h'-2.25p'
-.ds BP2.5 \h'-2.5p'
-.ds BP2.75 \h'-2.75p'
-.ds BP3 \h'-3p'
-.ds BP3.25 \h'-3.25p'
-.ds BP3.5 \h'-3.5p'
-.ds BP3.75 \h'-3.75p'
-.ds BP4 \h'-4p'
-.ds BP4.25 \h'-4.25p'
-.ds BP4.5 \h'-4.5p'
-.ds BP4.75 \h'-4.75p'
-.ds BP5 \h'-5p'
-.ds BP5.25 \h'-5.25p'
-.ds BP5.5 \h'-5.5p'
-.ds BP5.75 \h'-5.75p'
-.ds BP6 \h'-6p'
-.ds BP6.25 \h'-6.25p'
-.ds BP6.5 \h'-6.5p'
-.ds BP6.75 \h'-6.75p'
-.ds BP7 \h'-7p'
-.ds BP7.25 \h'-7.25p'
-.ds BP7.5 \h'-7.5p'
-.ds BP7.75 \h'-7.75p'
-.ds BP8 \h'-8p'
-.ds BP8.25 \h'-8.25p'
-.ds BP8.5 \h'-8.5p'
-.ds BP8.75 \h'-8.75p'
-.ds BP9 \h'-9p'
-.ds BP9.25 \h'-9.25p'
-.ds BP9.5 \h'-9.5p'
-.ds BP9.75 \h'-9.75p'
-.ds BP10 \h'-10p'
-.ds BP10.25 \h'-10.25p'
-.ds BP10.5 \h'-10.5p'
-.ds BP10.75 \h'-10.75p'
-.ds BP11 \h'-11p'
-.ds BP11.25 \h'-11.25p'
-.ds BP11.5 \h'-11.5p'
-.ds BP11.75 \h'-11.75p'
-.ds BP12 \h'-12p'
-.ds BP12.25 \h'-12.25p'
-.ds BP12.5 \h'-12.5p'
-.ds BP12.75 \h'-12.75p'
-\#
-.ds FP.25 \h'.25'
-.ds FP.5 \h'.5'
-.ds FP.75 \h'.75'
-.ds FP1 \h'1p'
-.ds FP1.25 \h'1.25p'
-.ds FP1.5 \h'1.5p'
-.ds FP1.75 \h'1.75p'
-.ds FP2 \h'2p'
-.ds FP2.25 \h'2.25p'
-.ds FP2.5 \h'2.5p'
-.ds FP2.75 \h'2.75p'
-.ds FP3 \h'3p'
-.ds FP3.25 \h'3.25p'
-.ds FP3.5 \h'3.5p'
-.ds FP3.75 \h'3.75p'
-.ds FP4 \h'4p'
-.ds FP4.25 \h'4.25p'
-.ds FP4.5 \h'4.5p'
-.ds FP4.75 \h'4.75p'
-.ds FP5 \h'5p'
-.ds FP5.25 \h'5.25p'
-.ds FP5.5 \h'5.5p'
-.ds FP5.75 \h'5.75p'
-.ds FP6 \h'6p'
-.ds FP6.25 \h'6.25p'
-.ds FP6.5 \h'6.5p'
-.ds FP6.75 \h'6.75p'
-.ds FP7 \h'7p'
-.ds FP7.25 \h'7.25p'
-.ds FP7.5 \h'7.5p'
-.ds FP7.75 \h'7.75p'
-.ds FP8 \h'8p'
-.ds FP8.25 \h'8.25p'
-.ds FP8.5 \h'8.5p'
-.ds FP8.75 \h'8.75p'
-.ds FP9 \h'9p'
-.ds FP9.25 \h'9.25p'
-.ds FP9.5 \h'9.5p'
-.ds FP9.75 \h'9.75p'
-.ds FP10 \h'10p'
-.ds FP10.25 \h'10.25p'
-.ds FP10.5 \h'10.5p'
-.ds FP10.75 \h'10.75p'
-.ds FP11 \h'11p'
-.ds FP11.25 \h'11.25p'
-.ds FP11.5 \h'11.5p'
-.ds FP11.75 \h'11.75p'
-.ds FP12 \h'12p'
-.ds FP12.25 \h'12.25p'
-.ds FP12.5 \h'12.5p'
-.ds FP12.75 \h'12.75p'
-\#
-\#
-\# WHOLE LINE KERNING (RW and EW)
-\# -----------------------------
-\#
-.ig
-The line kerning macros are special instances of track kerning,
-used where a complete line needs to be tightened (or relaxed) in
-order to accomodate or remove one or two more characters
-than the default justification permits.
-..
-\#
-\# *Argument:
-\# <amount of overall "kerning" (letter spacing) to apply to the line>
-\# *Function:
-\# Invokes .tkf (track kerning) for the current font with
-\# 1 as both the upper and lower point size limits, so that
-\# the value entered by the user applies regardless of point
-\# size. RW ("Reduce Whitespace") reduces the amount of space
-\# between all characters by an equal amount. EW ("Extra
-\# Whitespace") increases the amount of space.
-\# *Notes:
-\# Decimal values are acceptable.
-\#
-.ig
-The groff documentation is a tad confusing about what unit of
-measure is used in track kerning, only that the width of each
-character is increased or decreased by the amount(s) passed as
-arguments to .tkf, and something about linear function of point
-size. In fact, with the way I've put this macro together, it
-doesn't matter. All the user needs to know is that a value of
-one will produce an unacceptably tight or loose line at most text
-point sizes; therefore, effective use of RW and EW is in the
-fractional range below 1 (e.g. .25, .5). Given that RW and EW
-are for massaging type, a certain amount of experimentation and
-previewing is expected and necessary.
-
-\n(.f holds the current font number, which is acceptable to .tkf.
-
-RW and EW must be reset to 0 to cancel their effect on subsequent
-output lines.
-..
-\#
-.MAC RW END
-. if \\n[#BR_AT_LINE_KERN] \{\
-. ie \\n[#JUSTIFY]=1 \{ .brp \}
-. el \{ .br \}
-. \}
-. tkf \\n(.f 1 -\\$1 1 -\\$1
-.END
-\#
-\#
-.MAC EW END
-. if \\n[#BR_AT_LINE_KERN] \{\
-. ie \\n[#JUSTIFY]=1 \{ .brp \}
-. el \{ .br \}
-. \}
-. tkf \\n(.f 1 \\$1 1 \\$1
-.END
-\#
-\#
-\# BREAK AT LINE KERN
-\# ------------------
-\# *Arguments:
-\# toggle
-\# *Function:
-\# Enables/disables .br's before .RW and .EW
-\# *Notes:
-\# Mostly, users will want .br's before any kind of line kerning, but
-\# there may be cases where they don't. BR_BEFORE_LINE_KERN is off by
-\# default and must be invoked explicitly.
-\#
-.MAC BR_AT_LINE_KERN END
-. ie '\\$1'' \{ .nr #BR_AT_LINE_KERN 1 \}
-. el \{ .rr #BR_AT_LINE_KERN \}
-.END
-\#
-\# =====================================================================
-\#
-\# +++HYPHENATION+++
-\#
-\# AUTO HYPHENATION
-\# ----------------
-\# *Arguments:
-\# <none> | <anything> | DEFAULT
-\# or
-\# LINES <n> | MARGIN <n> | SPACE <n>
-\# *Function:
-\# Turns auto hyphenation on or off, resets the hyphenation style
-\# to default, or permits the setting of various hyphenation
-\# parameters.
-\# *Notes:
-\# HY, by itself, defaults to .hy 14, i.e. no hyphens after the
-\# first two or before the last two characters of a word, and no
-\# hyphenation of the last line prior to a trap (e.g., at the
-\# bottom of a page).
-\#
-\# HY DEFAULT resets the hyphenation style to .hy 14 (see
-\# above) if that behaviour is desired after changes have been
-\# made to LINES, MARGIN, or SPACE.
-\#
-\# HY LINES <n> sets the number of allowable consecutive hyphenated lines.
-\#
-\# HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end
-\# of a line in QUAD mode before hyphenation is tripped (e.g. if there's
-\# only 6 points left, groff won't try to hyphenate the next word).
-\#
-\# HY SPACE sets the amount of extra interword space (ipPcm) that can
-\# be added in JUSTIFY mode to prevent a line from being hyphenated.
-\#
-.MAC HY END
-. ie '\\$1'' \{\
-. hy 14
-. nr #HYPHENATE 1
-. \}
-. el \{\
-. if !'\\$1'LINES' \{\
-. nh
-. nr #HYPHENATE 0
-. \}
-. if !'\\$1'MARGIN' \{\
-. nh
-. nr #HYPHENATE 0
-. \}
-. if !'\\$1'SPACE' \{\
-. nh
-. nr #HYPHENATE 0
-. \}
-. if !'\\$1'DEFAULT' \{\
-. nh
-. nr #HYPHENATE 0
-. \}
-. if '\\$1'LINES' \{ .hlm \\$2 \}
-. if '\\$1'MARGIN' \{ .hym \\$2 \}
-. if '\\$1'SPACE' \{ .hys \\$2 \}
-. if '\\$1'DEFAULT' \{\
-. hlm -1
-. hym 0
-. hys 0
-. \}
-. \}
-.END
-\#
-\#
-\# HYPHENATION PARAMETERS
-\# ----------------------
-\# *Arguments:
-\# <# of lines> | <size of margin> | <amount of interword space>
-\# *Function:
-\# Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
-\#
-.MAC HY_SET END
-. nr #HY_SET 1
-. hlm \\$1
-. hym \\$2
-. hys \\$3
-.END
-\#
-\# =====================================================================
-\#
-\# +++VERTICAL SPACING+++
-\#
-\# ADVANCE LEAD
-\# ------------
-\# *Argument:
-\# <user supplied lead to advance below current baseline>
-\# *Function:
-\# Creates or modifies register #ALD. Adds user supplied lead
-\# below current baseline.
-\# *Notes:
-\# Requires a unit of measure.
-\#
-.MAC ALD END
-. if \\n(nl=0 \{ .nr #TOP 1 \}
-. if '\\$0'ALD' \{\
-. nr #ALD (\\$1)
-. sp \\n[#ALD]u
-. \}
-. if '\\$0'ADD_SPACE' \{\
-. nr #ALD (\\$1)
-. rs
-. sp \\n[#ALD]u
-. \}
-. if '\\$0'SPACE' \{\
-. sp \\$1u
-. \}
-. if '\\$0'SP' \{\
-. sp \\$1u
-. \}
-.END
-\#
-\#
-\# REVERSE LEAD
-\# ------------
-\# *Argument:
-\# <user supplied lead to reverse above current baseline>
-\# *Function:
-\# Creates or modifies register #RLD. Reverses user supplied
-\# lead above current baseline.
-\# *Notes:
-\# Requires a unit of measure.
-\#
-.MAC RLD END
-. nr #RLD (\\$1)
-. sp -\\n[#RLD]u
-.END
-\#
-\# ALD/RLD STRINGS
-\# ---------------
-.ig
-The strings \*[ALD.25]...\*[ALD12.75] and their corresponding
-\*[RLD] forms have been left in for backward compatibility with
-documents created using mom-1.1.3c or earlier. The prefered methods
-of advancing and reversing on the page inline are \*[UP <n><unit>]
-and \*[DOWN <n><unit>].
-..
-\#
-.ds DOWN \v'\\$1'
-.ds UP \v'-\\$1'
-\#
-.ds ALD.25 \v'.25p'
-.ds ALD.5 \v'.5p'
-.ds ALD.75 \v'.75p'
-.ds ALD1 \v'1p'
-.ds ALD1.25 \v'1.25p'
-.ds ALD1.5 \v'1.5p'
-.ds ALD1.75 \v'1.75p'
-.ds ALD2 \v'2p'
-.ds ALD2.25 \v'2.25p'
-.ds ALD2.5 \v'2.5p'
-.ds ALD2.75 \v'2.75p'
-.ds ALD3 \v'3p'
-.ds ALD3.25 \v'3.25p'
-.ds ALD3.5 \v'3.5p'
-.ds ALD3.75 \v'3.75p'
-.ds ALD4 \v'4p'
-.ds ALD4.25 \v'4.25p'
-.ds ALD4.5 \v'4.5p'
-.ds ALD4.75 \v'4.75p'
-.ds ALD5 \v'5p'
-.ds ALD5.25 \v'5.25p'
-.ds ALD5.5 \v'5.5p'
-.ds ALD5.75 \v'5.75p'
-.ds ALD6 \v'6p'
-.ds ALD6.25 \v'6.25p'
-.ds ALD6.5 \v'6.5p'
-.ds ALD6.75 \v'6.75p'
-.ds ALD7 \v'7p'
-.ds ALD7.25 \v'7.25p'
-.ds ALD7.5 \v'7.5p'
-.ds ALD7.75 \v'7.75p'
-.ds ALD8 \v'8p'
-.ds ALD8.25 \v'8.25p'
-.ds ALD8.5 \v'8.5p'
-.ds ALD8.75 \v'8.75p'
-.ds ALD9 \v'9p'
-.ds ALD9.25 \v'9.25p'
-.ds ALD9.5 \v'9.5p'
-.ds ALD9.75 \v'9.75p'
-.ds ALD10 \v'10p'
-.ds ALD10.25 \v'10.25p'
-.ds ALD10.5 \v'10.5p'
-.ds ALD10.75 \v'10.75p'
-.ds ALD11 \v'11p'
-.ds ALD11.25 \v'11.25p'
-.ds ALD11.5 \v'11.5p'
-.ds ALD11.75 \v'11.75p'
-.ds ALD12 \v'12p'
-.ds ALD12.25 \v'12.5p'
-.ds ALD12.5 \v'12.5p'
-.ds ALD12.75 \v'12.75p'
-\#
-.ds RLD.25 \v'-.25p'
-.ds RLD.5 \v'-.5p'
-.ds RLD.75 \v'-.75p'
-.ds RLD1 \v'-1p'
-.ds RLD1.25 \v'-1.25p'
-.ds RLD1.5 \v'-1.5p'
-.ds RLD1.75 \v'-1.75p'
-.ds RLD2 \v'-2p'
-.ds RLD2.25 \v'-2.25p'
-.ds RLD2.5 \v'-2.5p'
-.ds RLD2.75 \v'-2.75p'
-.ds RLD3 \v'-3p'
-.ds RLD3.25 \v'-3.25p'
-.ds RLD3.5 \v'-3.5p'
-.ds RLD3.75 \v'-3.75p'
-.ds RLD4 \v'-4p'
-.ds RLD4.25 \v'-4.25p'
-.ds RLD4.5 \v'-4.5p'
-.ds RLD4.75 \v'-4.75p'
-.ds RLD5 \v'-5p'
-.ds RLD5.25 \v'-5.25p'
-.ds RLD5.5 \v'-5.5p'
-.ds RLD5.75 \v'-5.75p'
-.ds RLD6 \v'-6p'
-.ds RLD6.25 \v'-6.25p'
-.ds RLD6.5 \v'-6.5p'
-.ds RLD6.75 \v'-6.75p'
-.ds RLD7 \v'-7p'
-.ds RLD7.25 \v'-7.25p'
-.ds RLD7.5 \v'-7.5p'
-.ds RLD7.75 \v'-7.75p'
-.ds RLD8 \v'-8p'
-.ds RLD8.25 \v'-8.25p'
-.ds RLD8.5 \v'-8.5p'
-.ds RLD8.75 \v'-8.75p'
-.ds RLD9 \v'-9p'
-.ds RLD9.25 \v'-9.25p'
-.ds RLD9.5 \v'-9.5p'
-.ds RLD9.75 \v'-9.75p'
-.ds RLD10 \v'-10p'
-.ds RLD10.25 \v'-10.25p'
-.ds RLD10.5 \v'-10.5p'
-.ds RLD10.75 \v'-10.75p'
-.ds RLD11 \v'-11p'
-.ds RLD11.25 \v'-11.25p'
-.ds RLD11.5 \v'-11.5p'
-.ds RLD11.75 \v'-11.75p'
-.ds RLD12 \v'-12p'
-.ds RLD12.25 \v'-12.5p'
-.ds RLD12.5 \v'-12.5p'
-.ds RLD12.75 \v'-12.75p'
-\#
-\# =====================================================================
-\#
-\# +++REFINEMENTS+++
-\#
-\# AUTOMATIC LIGATURES
-\# -------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns automatic ligature generation on or off.
-\# *Notes:
-\# Ligatures may be supplied manually with \(fi, \(fl, etc.
-\#
-.MAC LIGATURES END
-. ie '\\$1'' \{\
-. lg
-. nr #LIGATURES 1
-. \}
-. el \{\
-. lg 0
-. nr #LIGATURES 0
-. \}
-.END
-\#
-\#
-\# SMARTQUOTES
-\# -----------
-\# *Arguments:
-\# [ ,, ] | [ << ] | [ >> ] | <anything>
-\# or
-\# [ DA | DE | ES | FR | IT | NL | NO | PT | SV ] | <anything>
-\# *Function:
-\# Turns smartquotes on (optionally with a quoting style from the
-\# argument list, or off).
-\# *Notes:
-\# The " character is read outside the macro when mom is
-\# processed. The strings for open/close ($QUOTE<n>) are then
-\# defined in the macro.
-\#
-\# (Note to myself: code for " is \N'34'.)
-\#
-.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
-\#
-.MAC SMARTQUOTES END
-. rr #ARGS_TO_SQ
-. ie '\\$1'' \{\
-. nr #OPEN_CLOSE 0
-. ds $QUOTE0 \\[lq]
-. ds $QUOTE1 \\[rq]
-. \}
-. el \{\
-. if '\\$1',,' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Bq]
-. ds $QUOTE1 \\[lq]
-. \}
-. if '\\$1'<<' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fo]
-. ds $QUOTE1 \\[Fc]
-. \}
-. if '\\$1'>>' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fc]
-. ds $QUOTE1 \\[Fo]
-. \}
-. if '\\$1'DA' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fc]
-. ds $QUOTE1 \\[Fo]
-. \}
-. if '\\$1'DE' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Bq]
-. ds $QUOTE1 \\[lq]
-. \}
-. if '\\$1'ES' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[lq]
-. ds $QUOTE1 \\[rq]
-. \}
-. if '\\$1'FR' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fo]\\|
-. ds $QUOTE1 \\|\\[Fc]
-. \}
-. if '\\$1'IT' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fo]\\|
-. ds $QUOTE1 \\|\\[Fc]
-. \}
-. if '\\$1'NL' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[rq]
-. ds $QUOTE1 \\[rq]
-. \}
-. if '\\$1'NO' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fo]
-. ds $QUOTE1 \\[Fc]
-. \}
-. if '\\$1'PT' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fo]
-. ds $QUOTE1 \\[Fc]
-. \}
-. if '\\$1'SV' \{\
-. nr #ARGS_TO_SQ 1
-. ds $QUOTE0 \\[Fc]
-. ds $QUOTE1 \\[Fc]
-. \}
-. if !r#ARGS_TO_SQ \{\
-. ds $QUOTE0 \\[dq]
-. ds $QUOTE1 \\[dq]
-. \}
-. \}
-.END
-\#
-.ds $QUOTE0 \[dq]
-.ds $QUOTE1 \[dq]
-\#
-\# Strings for foot and inch marks
-\#
-.ds FOOT \(fm
-.ds INCH \(fm\(fm
-\#
-\# =====================================================================
-\#
-\# +++LINE BREAKS+++
-\#
-\# NO-SPACE BREAK
-\# --------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Breaks a line without advancing.
-\# *Notes:
-\# EL is the mnemonic used on older, dedicated typesetting machines
-\# to indicate "process the line, without advancing the galley
-\# medium." It stands for End Line.
-\#
-\# The \c inline must be appended to the end of input lines when in
-\# nofill mode; in fill modes, the \c inline must not be used.
-\#
-.MAC EL END
-. TRAP OFF
-. if \\n[#PSEUDO_FILL]=1 \&
-. br
-. sp -1v
-. TRAP
-.END
-\#
-\# An inline escape to accomplish the same thing. Actually
-\# preferable, since it works with filled and non-filled copy and
-\# doesn't require the user to remember to use (or not use) the \c.
-\#
-.ds B \h'|0'\c
-\#
-\# =====================================================================
-\#
-\# +++FILLING/QUADDING/JUSTIFYING+++
-\#
-\# JUSTIFY
-\# -------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Turns fill on and sets .ad to b.
-\# *Notes:
-\# Justifies text left and right.
-\#
-.MAC JUSTIFY END
-. if \\n[#TAB_ACTIVE]=0 \{\
-. nr #QUAD 1
-. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
-. \}
-' ce 0
-. QUAD J
-. if \\n[#PRINT_STYLE]=1 \{ .QUAD L \}
-. nr #PSEUDO_FILL 0
-.END
-\#
-\#
-\# QUAD
-\# ----
-\# *Arguments:
-\# L | LEFT | R | RIGHT | C | CENTER/CENTRE
-\# *Function:
-\# Turns fill on and sets .ad to l, r, or c.
-\# *Notes:
-\# Terminology is a problem here. Some people call quad left
-\# left justified, flush left, or flush left/rag right (and the
-\# reverse for quad right). Quad center is sometimes called rag
-\# both. For our purposes, all "quad" modes mean that groff fill
-\# mode is enabled.
-\#
-.MAC QUAD END
-. ds $QUAD_VALUE \\$1
-. if \\n[#TAB_ACTIVE]=0 \{\
-. nr #QUAD 1
-. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
-. \}
-' ce 0
-' fi
-. if '\\*[$QUAD_VALUE]'L' \{\
-. nr #JUSTIFY 0
-. ad l
-. \}
-. if '\\*[$QUAD_VALUE]'LEFT' \{\
-. nr #JUSTIFY 0
-. ad l
-. \}
-. if '\\*[$QUAD_VALUE]'R' \{\
-. nr #JUSTIFY 0
-. ad r
-. \}
-. if '\\*[$QUAD_VALUE]'RIGHT' \{\
-. nr #JUSTIFY 0
-. ad r
-. \}
-. if '\\*[$QUAD_VALUE]'C' \{\
-. nr #JUSTIFY 0
-. ad c
-. \}
-. if '\\*[$QUAD_VALUE]'CENTER' \{\
-. nr #JUSTIFY 0
-. ad c
-. \}
-. if '\\*[$QUAD_VALUE]'CENTRE' \{\
-. nr #JUSTIFY 0
-. ad c
-. \}
-. if '\\*[$QUAD_VALUE]'J' \{\
-. nr #JUSTIFY 1
-. ad b
-. \}
-. if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
-. nr #JUSTIFY 1
-. ad b
-. \}
-. nr #PSEUDO_FILL 0
-.END
-\#
-\#
-\# LEFT, RIGHT, AND CENTER
-\# -----------------------
-\#
-.ig
-The purpose of these macros is to allow the user to enter lines of
-text that will be quadded LRC *without* the user having to enter .BR
-or .br between lines. For the sake of consistency, all three appear
-to behave similarly (from the point of view of the user), although
-the underlying primitives don't. For this reason, LEFT, RIGHT, and
-CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to restore
-text to groff fill mode.
-..
-\#
-\# LEFT
-\# ----
-\# *Argument:
-\# <none>
-\# *Function:
-\# Turns fill mode off. Allows user to quad lines left without
-\# requiring the .BR or .br macro.
-\# *Notes:
-\# LEFT simply turns fill off. Lines that exceed the current LL will
-\# not be broken, just continued (indefinitely) until a return is
-\# encountered. Note that this behaviour differs from the RIGHT and
-\# CENTER macros.
-\#
-.MAC LEFT END
-. if \\n[#TAB_ACTIVE]=0 \{\
-. rr #QUAD
-. ds $RESTORE_QUAD_VALUE LEFT
-. \}
-. ce 0
-. nf
-. nr #PSEUDO_FILL 1
-.\" Fix for a little conflict with DOCTYPE LETTER
-. if '\\n(.z'LETTERHEAD1' \{ .rr #DATE_FIRST \}
-.END
-\#
-\#
-\# RIGHT
-\# -----
-\# *Argument:
-\# <none>
-\# *Function:
-\# Turns fill on. Allows user to quad lines right without
-\# requiring the .BR or .br macro.
-\# *Notes:
-\# Lines that exceed the current LL will be broken, with the excess
-\# text quadded right.
-\#
-.MAC RIGHT END
-. if \\n[#TAB_ACTIVE]=0 \{\
-. rr #QUAD
-. ds $RESTORE_QUAD_VALUE RIGHT
-. \}
-. fi
-. rj 100000
-. nr #PSEUDO_FILL 1
-.END
-\#
-\#
-\# CENTER
-\# ------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Turns fill on. Allows user to center lines without
-\# requiring the .BR or .br macro.
-\# *Notes:
-\# Lines that exceed the current LL will be broken, with the excess
-\# text centered.
-\#
-.MAC CENTER END
-. if \\n[#TAB_ACTIVE]=0 \{\
-. rr #QUAD
-. ds $RESTORE_QUAD_VALUE CENTER
-. \}
-. fi
-. ce 100000
-. nr #PSEUDO_FILL 1
-.END
-\#
-\# =====================================================================
-\#
-\# +++TABS+++
-\#
-.ig
-There are two different kinds of tabs available: typesetting tabs
-and string tabs.
-
-Typesetting tabs are set with TAB_SET, which requires a tab number,
-an indent (offset) from the left margin and a length (optionally
-with a quad direction and an instruction to fill lines). After tabs
-are set with TAB_SET, they are called with .TAB n, where "n"
-corresponds to the number passed to TAB_SET as a valid tab number.
-
-String tabs allow the user to mark off tab positions inline. Tab
-indents and lengths are calculated from the beginning and end
-positions of the marks. Up to 19 string tabs may be created,
-numbered 1-19. Once created, they are called with .TAB n,
-just like typesetting tabs.
-
-Setting up string tabs is a two-step procedure. First, the user
-enters an input line in which s/he wants to mark off string tabs.
-The beginning of a tab is marked with \*[STn], where "n" is
-the desired number of the tab. The end of the the tab is marked
-with \*[STnX]. All ST's must have a matching STX. String tabs
-may be nested.
-
-Next, the user invokes .ST n for every string tab defined, and
-optionally passes quad information to it. That done, string tabs
-can be called just like typesetting tabs.
-
-String tabs don't preview properly with gxditview. Use gv instead.
-..
-\#
-\# Strings for string tab inlines
-\# ------------------------------
-\#
-\# Initialize string tab markers numbered 1 to 19.
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<20 \{\
-. ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET]
-.\}
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<20 \{\
-. ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK]
-.\}
-.rr #LOOP
-\#
-\#
-\# These are reserved ST numbers for internal use
-.ds ST100 \Ek[#ST100_OFFSET]
-.ds ST100X \Ek[#ST100_MARK]
-.ds ST101 \Ek[#ST101_OFFSET]
-.ds ST101X \Ek[#ST101_MARK]
-\#
-\#
-\# QUAD AND SET STRING TABS
-\# ------------------------
-\# *Arguments:
-\# <stringtab number> L | R | C | J [QUAD]
-\# *Function:
-\# Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
-\# tab based on the collected information.
-\# *Notes:
-\# Like TAB_SET, ST invoked without a quad direction will default to LEFT.
-\# If lines should be filled and quadded, use the optional argument QUAD.
-\# N.B. -- indents *must* be turned off before setting string tabs
-\# inside .PAD
-\#
-.MAC ST END
-. ds $ST\\$1_QUAD_DIR \\$2
-. if \\n[#NUM_ARGS]=3 \{\
-. ds $ST\\$1_FILL QUAD
-. \}
-. nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
-. ie \\n[#IN_TAB] \{\
-. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
-. \}
-. el \{\
-. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
-. \}
-.END
-\#
-\#
-\# TAB SET
-\# -------
-\# *Arguments:
-\# <n> ident(ipPcm) length(ipPcm) [L | R | C | J [QUAD]]
-\# *Function:
-\# Creates macros TABn and TAB n, where "n" is any arbitrary number.
-\# TABn is a typesetting tab (i.e. a tab defined as an indent
-\# from the page left offset plus a line length.)
-\# *Notes:
-\# n = arbitrary digit to identify the tab
-\# indent = indent from left margin; unit of measure required
-\# length = length of tab (unit of measure required; can be
-\# \w'<string>'u--if more than one word in string, surround
-\# with double quotes "\w'<three word string>'"
-\# LRCJ = quad for tab (left, right, center, justified)
-\# If option QUAD afterwards is not given, quad is line for line
-\# (no fill mode), meaning that there's no need for .BR or .br
-\# between lines.
-\# QUAD = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
-\# had been given).
-\#
-\# N.B. -- indents *must* be turned off before setting tabs
-\#
-.ig
-Examples:
---------
-
-.TAB_SET 1 2P+6p 12P C
-
-means "create a tab numbered 1 that starts 2 picas and 6 points from
-the left margin, is 12 picas long, and centre each input line."
-
-.TAB_SET 1 2P+6P 12P C QUAD
-
-means exactly the same thing, except that input lines are joined and
-the area delimted by the tab filled with centered text.
-
-TAB n can be called at any time after being set.
-
-Tabs are NOT columnar in behaviour. If the text inside a
-tab runs to several lines, when you call the next tab a break
-occurs, meaning that the new tab starts one line below the last
-line in the previous tab. For columnar behaviour, you must
-use the multi-column macros in addition to tabs.
-
-If you want tabs to line up bottom-line to bottom-line (most likely
-single line tabs), use .TN (provided the tabs are numbered sequentially).
-Otherwise, you must use .EL then .TAB <n> if you want them to align.
-
-If you want to reset tabs, you must use .TQ before .TAB_SET.
-
-Note that indents are turned off automatically whenever a new
-tab is called with TAB <n>.
-
-Tabs themselves are user-invoked using the TAB macro with a numeric
-argument, e.g. TAB 1.
-
-Generally, in order not to get confused, it's a good idea
-to make sure all indents are off before setting tabs.
-..
-\#
-.MAC TAB_SET END
-. br
-. nr #TAB_NUMBER \\$1
-. ds $CURRENT_TAB \\n[#TAB_NUMBER]
-. nr #TAB_OFFSET (\\$2)
-. nr #TAB_LENGTH (\\$3)
-. MAC TAB\\n[#TAB_NUMBER] DONE \"Define TAB macro
-. if !\\\\n[#TB+]=1 \{ .br \}
-. if \\\\n[#TB+]=1 \{\
-. EL
-. vpt 0
-. rr #TB+
-. \}
-. in 0
-. nr #TAB_ACTIVE 1
-. nr #CURRENT_TAB \\n[#TAB_NUMBER]
-. ds $CURRENT_TAB \\*[$CURRENT_TAB]
-. nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
-. nr #ST_OFFSET \\n[#TAB_OFFSET]
-. po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
-. ll \\n[#TAB_LENGTH]u
-. ta \En(.lu
-. ie '\\$5'QUAD' \{\
-. if '\\$4'L' \{ .QUAD L \}
-. if '\\$4'R' \{ .QUAD R \}
-. if '\\$4'C' \{ .QUAD C \}
-. if '\\$4'J' \{ .JUSTIFY \}
-. \}
-. el \{\
-. if '\\$4'' \{ .LEFT \}
-. if '\\$4'L' \{ .LEFT \}
-. if '\\$4'R' \{ .RIGHT \}
-. if '\\$4'C' \{ .CENTER \}
-. if '\\$4'J' \{ .JUSTIFY \}
-. \}
-. if \\\\n[#TN]=1 \{\
-. TRAP
-. rr #TN
-. \}
-.DONE
-. rr #TAB_ACTIVE
-.END
-\#
-\#
-\# TAB
-\# ---
-\# *Arguments:
-\# <tab number to tab into>
-\# *Function:
-\# Moves to tab number passed as an argument.
-\#
-.MAC TAB END
-. ds $TAB_NUMBER \\$1
-. TAB\\*[$TAB_NUMBER]
-. nr #IN_TAB 1
-.END
-\#
-\#
-\# TAB NEXT
-\# --------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Automagically moves to TAB<n+1> on the same line as the last
-\# line of the previous tab.
-\# *Notes:
-\# The \c inline must be appended to the end of input lines when in
-\# nofill mode; in fill modes, the \c inline must not be used.
-\#
-.MAC TN END
-. nr #TN 1
-. TRAP OFF
-. sp -1v
-. nr #NEXT_TAB \\n[#CURRENT_TAB]+1
-. TAB\\n[#NEXT_TAB]
-. TRAP
-.END
-\#
-\# An inline escape to accomplish the same thing. Actually
-\# preferable, since it works with filled and non-filled copy and
-\# doesn't require the user to remember to use (or not use) the \c.
-\#
-.ds TB+ "\c\\R'#TB+ 1'\\R'#TN 1'\\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c
-\#
-\# TAB QUIT
-\# --------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Sets #TAB_ACTIVE to "0" (off).
-\# Resets left margin to value in effect prior to tabs.
-\# Resets line length to value in effect prior to tabs.
-\# Checks #QUAD to see if we were in flush or quad mode
-\# prior to tabs (0=off, 1=on).
-\# Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
-\# in effect prior to tabs.
-\# *Notes:
-\# TQ *must* come before setting any new tabs if you want the
-\# tabs' indents measured from page left. Otherwise, the tabs'
-\# indents are measured from the left margin of the tab you're
-\# currently in.
-\#
-.MAC TQ END
-. br
-. rr #TAB_ACTIVE
-. rr #IN_TAB
-. po \\n[#L_MARGIN]u
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. ie \\n[#QUAD] \{\
-. ie '\\*[$RESTORE_QUAD_VALUE]'J' \{ .JUSTIFY \}
-. el \{ .QUAD \\*[$RESTORE_QUAD_VALUE] \}
-. \}
-. el \{\
-. if '\\*[$RESTORE_QUAD_VALUE]'LEFT' \{ .LEFT \}
-. if '\\*[$RESTORE_QUAD_VALUE]'RIGHT' \{ .RIGHT \}
-. if '\\*[$RESTORE_QUAD_VALUE]'CENTER' \{ .CENTER \}
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# COLOR HANDLING
-\# ==============
-\#
-\# COLOR
-\# -----
-\# *Arguments:
-\# <pre-defined NEWCOLOR or XCOLOR>
-\# *Function:
-\# Allows the inline escape for setting color to be called
-\# as a macro.
-\#
-.MAC COLOR END
-.ie \\n(.u=1 \{\
-\c
-\\*[\\$1]\c
-.\}
-.el \{ \\*[\\$1] \}
-.END
-\#
-\#
-\# NEWCOLOR
-\# --------
-\# *Arguments:
-\# <color name> [<color scheme>] <color definition>
-\# *Function:
-\# Based on .defcolor, allows users to name and define colors using
-\# one of the four color schemes rgb, cmy, cmyk and grey. The new
-\# color is then defined as a string so that it can be called inline
-\# with \*[COLORNAME] or with .COLOR.
-\# *Notes:
-\# With only two args, the default color scheme is rgb.
-\#
-\# It is highly recommended that users define new colors as
-\# all-cap strings, to differentiate them from x colors, which must
-\# be in lower case.
-\#
-.MAC NEWCOLOR END
-. if \\n[#NUM_ARGS]=2 \{\
-. defcolor \\$1 rgb \\$2
-. \}
-. if \\n[#NUM_ARGS]=3 \{\
-. if '\\$2'RGB' .ds $COLOR_SCHEME rgb
-. if '\\$2'CYM' .ds $COLOR_SCHEME cym
-. if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk
-. if '\\$2'GRAY' .ds $COLOR_SCHEME gray
-. if '\\$2'GREY' .ds $COLOR_SCHEME gray
-. defcolor \\$1 \\*[$COLOR_SCHEME] \\$3
-. \}
-. ds \\$1 \\m[\\$1]
-.END
-\#
-\#
-\# XCOLOR
-\# ------
-\# *Arguments:
-\# <x color name> [<alias>]
-\# *Function:
-\# Defines a string of x color name (i.e. a predefined x
-\# color). If <alias> is given, creates a string of <alias name>
-\# that references the x color name of the first argument.
-\# *Notes:
-\# The color name must be a legal color name from rgb.txt, and
-\# must be given entirely in lower case, all one word.
-\#
-.MAC XCOLOR END
-. ds \\$1 \m[\\$1]
-. if \\n[#NUM_ARGS]=2 .ds \\$2 \m[\\$1]
-.END
-\#
-\# Pre-define xcolors black and white
-\#
-.ds black \m[black]
-.ds BLACK \m[black]
-.ds white \m[white]
-.ds WHITE \m[WHITE]
-\#
-\# =====================================================================
-\#
-\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
-\#
-\# UNDERLINE
-\# ---------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# When on, underlines all letters, words, and digits in a passage,
-\# ignoring punctuation and spaces.
-\# *Notes:
-\# Only for use when the font family is COURIER, to simulate
-\# typewriter-style underlining of italic passages.
-\#
-.MAC UNDERLINE END
-. ie '\\$1'' \{\
-. nr #UNDERLINE_ON 1
-. char A _A
-. char B _B
-. char C _C
-. char D _D
-. char E _E
-. char F _F
-. char G _G
-. char H _H
-. char I _I
-. char J _J
-. char K _K
-. char L _L
-. char M _M
-. char N _N
-. char O _O
-. char P _P
-. char Q _Q
-. char R _R
-. char S _S
-. char T _T
-. char U _U
-. char V _V
-. char W _W
-. char X _X
-. char Y _Y
-. char Z _Z
-. char \[`A] _\[`A]
-. char \[^A] _\[^A]
-. char \['A] _\['A]
-. char \[:A] _\[:A]
-. char \[oA] _\[oA]
-. char \[~A] _\[~A]
-. char \[AE] _\[AE]
-. char \[`E] _\[`E]
-. char \[^E] _\[^E]
-. char \['E] _\['E]
-. char \[:E] _\[:E]
-. char \[`I] _\[`I]
-. char \[^I] _\[^I]
-. char \['I] _\['I]
-. char \[:I] _\[:I]
-. char \[`O] _\[`O]
-. char \[^O] _\[^O]
-. char \['O] _\['O]
-. char \[:O] _\[:O]
-. char \[~O] _\[~O]
-. char \[/O] _\[/O]
-. char \[`U] _\[`U]
-. char \[^U] _\[^U]
-. char \['U] _\['U]
-. char \[:U] _\[:U]
-. char \[,C] _\[,C]
-. char \[-D] _\[-D]
-. char \[~N] _\[~N]
-. char \[TP] _\[TP]
-. char \['Y] _\['Y]
-. char \[:Y] _\[:Y]
-. char a _a
-. char b _b
-. char c _c
-. char d _d
-. char e _e
-. char f _f
-. char g _g
-. char h _h
-. char i _i
-. char j _j
-. char k _k
-. char l _l
-. char m _m
-. char n _n
-. char o _o
-. char p _p
-. char q _q
-. char r _r
-. char s _s
-. char t _t
-. char u _u
-. char v _v
-. char w _w
-. char x _x
-. char y _y
-. char z _z
-. char \[`a] _\[`a]
-. char \[^a] _\[^a]
-. char \['a] _\['a]
-. char \[:a] _\[:a]
-. char \[oa] _\[oa]
-. char \[~a] _\[~a]
-. char \[ae] _\[ae]
-. char \[`e] _\[`e]
-. char \[^e] _\[^e]
-. char \['e] _\['e]
-. char \[:e] _\[:e]
-. char \[`i] _\[`i]
-. char \[^i] _\[^i]
-. char \['i] _\['i]
-. char \[:i] _\[:i]
-. char \[`o] _\[`o]
-. char \[^o] _\[^o]
-. char \['o] _\['o]
-. char \[:o] _\[:o]
-. char \[~o] _\[~o]
-. char \[/o] _\[/o]
-. char \[`u] _\[`u]
-. char \[^u] _\[^u]
-. char \['u] _\['u]
-. char \[:u] _\[:u]
-. char \[,c] _\[,c]
-. char \[Sd] _\[Sd]
-. char \[~n] _\[~n]
-. char \[Tp] _\[Tp]
-. char \['y] _\['y]
-. char \[:y] _\[:y]
-. char \[ss] _\[ss]
-. char ' _'
-. char 1 _1
-. char 2 _2
-. char 3 _3
-. char 4 _4
-. char 5 _5
-. char 6 _6
-. char 7 _7
-. char 8 _8
-. char 9 _9
-. char 0 _0
-. \}
-. el \{\
-. nr #UNDERLINE_ON 0
-. rchar 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 i j k l m n o p q r s t u v w x y z \
- \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
- \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
- \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
- \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
- \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
- \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
- ' 1 2 3 4 5 6 7 8 9 0
-. \}
-.END
-\#
-\#
-\# UL/ULX
-\# ------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Underscores all letters, words, and digits in a passage,
-\# ignoring punctuation and spaces.
-\# *Notes:
-\# Intended to be called with inline escapes \*[UL] (underline
-\# on) and \*[ULX] (underline off). Only works when the font family
-\# is COURIER, to simulate typewriter-style underlining of italic
-\# passages.
-\#
-.MAC UL END
-\c\R'#UNDERLINE_ON 1'
-. char A _A
-. char B _B
-. char C _C
-. char D _D
-. char E _E
-. char F _F
-. char G _G
-. char H _H
-. char I _I
-. char J _J
-. char K _K
-. char L _L
-. char M _M
-. char N _N
-. char O _O
-. char P _P
-. char Q _Q
-. char R _R
-. char S _S
-. char T _T
-. char U _U
-. char V _V
-. char W _W
-. char X _X
-. char Y _Y
-. char Z _Z
-. char \[`A] _\[`A]
-. char \[^A] _\[^A]
-. char \['A] _\['A]
-. char \[:A] _\[:A]
-. char \[oA] _\[oA]
-. char \[~A] _\[~A]
-. char \[AE] _\[AE]
-. char \[`E] _\[`E]
-. char \[^E] _\[^E]
-. char \['E] _\['E]
-. char \[:E] _\[:E]
-. char \[`I] _\[`I]
-. char \[^I] _\[^I]
-. char \['I] _\['I]
-. char \[:I] _\[:I]
-. char \[`O] _\[`O]
-. char \[^O] _\[^O]
-. char \['O] _\['O]
-. char \[:O] _\[:O]
-. char \[~O] _\[~O]
-. char \[/O] _\[/O]
-. char \[`U] _\[`U]
-. char \[^U] _\[^U]
-. char \['U] _\['U]
-. char \[:U] _\[:U]
-. char \[,C] _\[,C]
-. char \[-D] _\[-D]
-. char \[~N] _\[~N]
-. char \[TP] _\[TP]
-. char \['Y] _\['Y]
-. char \[:Y] _\[:Y]
-. char a _a
-. char b _b
-. char c _c
-. char d _d
-. char e _e
-. char f _f
-. char g _g
-. char h _h
-. char i _i
-. char j _j
-. char k _k
-. char l _l
-. char m _m
-. char n _n
-. char o _o
-. char p _p
-. char q _q
-. char r _r
-. char s _s
-. char t _t
-. char u _u
-. char v _v
-. char w _w
-. char x _x
-. char y _y
-. char z _z
-. char \[`a] _\[`a]
-. char \[^a] _\[^a]
-. char \['a] _\['a]
-. char \[:a] _\[:a]
-. char \[oa] _\[oa]
-. char \[~a] _\[~a]
-. char \[ae] _\[ae]
-. char \[`e] _\[`e]
-. char \[^e] _\[^e]
-. char \['e] _\['e]
-. char \[:e] _\[:e]
-. char \[`i] _\[`i]
-. char \[^i] _\[^i]
-. char \['i] _\['i]
-. char \[:i] _\[:i]
-. char \[`o] _\[`o]
-. char \[^o] _\[^o]
-. char \['o] _\['o]
-. char \[:o] _\[:o]
-. char \[~o] _\[~o]
-. char \[/o] _\[/o]
-. char \[`u] _\[`u]
-. char \[^u] _\[^u]
-. char \['u] _\['u]
-. char \[:u] _\[:u]
-. char \[,c] _\[,c]
-. char \[Sd] _\[Sd]
-. char \[~n] _\[~n]
-. char \[Tp] _\[Tp]
-. char \['y] _\['y]
-. char \[:y] _\[:y]
-. char \[ss] _\[ss]
-. char ' _'
-. char 1 _1
-. char 2 _2
-. char 3 _3
-. char 4 _4
-. char 5 _5
-. char 6 _6
-. char 7 _7
-. char 8 _8
-. char 9 _9
-. char 0 _0
-.END
-\#
-\#
-.MAC ULX END
-\c\R'#UNDERLINE_ON 0'
-. rchar 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 i j k l m n o p q r s t u v w x y z \
- \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
- \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
- \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
- \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
- \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
- \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
- ' 1 2 3 4 5 6 7 8 9 0
-.END
-\#
-\#
-\# UNDERSCORE
-\# ----------
-\# *Arguments:
-\# [points below baseline] "text"
-\# *Function:
-\# Places an underscore 2 points under the string if no lead given,
-\# otherwise places underscore under string by user specified amount.
-\# *Notes:
-\# When using this macro, the string to be underscored must begin
-\# with double-quotes ("), regardless of whether it's the sole
-\# argument or the second.
-\# E.g.:
-\# .UNDERSCORE "Text to be underscored
-\# or
-\# .UNDERSCORE 2p "Text to be underscored
-\#
-\# All text is underscored (including punctuation and spaces).
-\# This is the primary difference between UNDERLINE and UNDERSCORE,
-\# aside from the fact the UNDERLINE only works with Courier.
-\#
-\# UNDERSCORE does not work across line breaks. Each line of
-\# text must be entered separately with UNDERSCORE. If the
-\# UNDERSCORE begins in the middle of a line and crosses over a
-\# break, the portion before the break must be entered in its own
-\# UNDERSCORE, as must the portion that comes after the break.
-\#
-.MAC UNDERSCORE END
-. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
-. ie \\n[#NUM_ARGS]=1 \{ \\$1\\s(12\\v'+2p'\\l'|0'\\v'-2p'\\s[\\n[#RESTORE_PT_SIZE]u] \}
-. el \{ \\$2\\s(12\\v'+(\\$1)'\\l'|0'\\v'-(\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] \}
-. rr #RESTORE_PT_SIZE
-.END
-\#
-\#
-\# DOUBLE UNDERSCORE
-\# -----------------
-\# *Arguments:
-\# [points below baseline] [points distance between rules] "text"
-\# *Function:
-\# Same as UNDERSCORE, except it produces a double underscore. The default
-\# distance between the rules is 2 points.
-\# *Notes:
-\# The same double-quote requirement as UNDERSCORE.
-\#
-.MAC UNDERSCORE2 END
-. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
-. if \\n[#NUM_ARGS]=1 \{\
-. PRINT \\$1\\s(12\\v'+2p'\\l'|0'\\v'+2p'\\l'|0'\\v'-4p'\\s[\\n[#RESTORE_PT_SIZE]u]
-. \}
-. if \\n[#NUM_ARGS]=2 \{\
-. PRINT \\$2\\s(12\\v'+\\$1'\\l'|0'\\v'+2p'\\l'|0'\\v'-(2p+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u]
-. \}
-. if \\n[#NUM_ARGS]=3 \{\
-. PRINT \\$3\\s(12\\v'+\\$1'\\l'|0'\\v'+\\$2'\\l'|0'\\v'-(\\$2+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u]
-. \}
-. rr #RESTORE_PT_SIZE
-.END
-\#
-\#
-\# SUPERSCRIPT INLINES
-\# -------------------
-\# *Function:
-\# Prints everything after invocation as superscript.
-\# *Notes:
-\# \*[SUP] and \*[SUPX] turn superscript on and off respectively.
-\# If running type is pseudo-condensed/expanded, invoke the superscript
-\# strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
-\# and \*[EXTSUPX] respectively.
-\#
-.ds SUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.26m'\s[\En[#SUP_PT_SIZE]u]
-\#
-.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.26m'
-\#
-.ds CONDSUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
-\#
-.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[COND]
-\#
-.ds EXTSUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
-\#
-.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[EXT]
-\#
-\#
-\# SLANT
-\# -----
-\#
-\# SETSLANT
-\# --------
-\# *Arguments:
-\# <number of degrees> | RESET
-\# *Function:
-\# Modifies register #DEGREES for use with \*[SLANT], or resets
-\# it to the default. Defines string \*[SLANTX]
-\# *Notes:
-\# \*[SLANT] permits pseudo-italicizing of a font in cases where
-\# no italic font exists in a particular family.
-\#
-\# Default # of degrees is 15.
-\#
-\# Do not use unit of measure with arg to SETSLANT.
-\#
-\# It may be necessary to adjust the spacing on either side of
-\# [SLANT] and [SLANTX].
-\#
-\# In docs, SLANT carries over from para to para.
-\#
-.nr #DEGREES 15
-.ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-.ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-\#
-.MAC SETSLANT END
-. ie '\\$1'RESET' \{\
-. nr #DEGREES 15
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_SLANT] \{ .return \}
-. \}
-. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-. \}
-. el \{\
-. nr #DEGREES \\$1
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_SLANT] \{ .return \}
-. \}
-. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-. \}
-. ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-.END
-\#
-\#
-\# BOLDER
-\# ------
-\#
-\# SETBOLDER
-\# ---------
-\# *Arguments:
-\# <amount of emboldening> | RESET
-\# *Function:
-\# Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
-\# it to the default 700 units.
-\# *Notes:
-\# \*[BOLDER] allows pseudo-emboldening of a font where no bold
-\# font exists in a particular family.
-\#
-\# Default for SETBOLDER is 700 units. Do not use unit of measure
-\# with arg to SETBOLDER.
-\#
-.nr #BOLDER_UNITS 700
-\#
-.MAC SETBOLDER END
-. if \\n[#IGNORE]=1 \{ .return \}
-. ie '\\$1'RESET' \{ .nr #BOLDER_UNITS 700 \}
-. el \{ .nr #BOLDER_UNITS \\$1 \}
-.END
-\#
-\#
-.MAC BOLDER END
-\c
-.bd \\n(.f \\n[#BOLDER_UNITS]
-.END
-\#
-\#
-.MAC BOLDERX END
-\c
-.bd \\n(.f
-.END
-\#
-\# +++CONDENSE/EXTEND+++
-\#
-\# CONDENSE/EXTEND
-\# ---------------
-\# *Arguments:
-\# <percentage to condense/expand type size>
-\# *Function:
-\# Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
-\# new point size (for character width) from arg, and defines string
-\# COND or EXT, which set the type size to the new character width,
-\# and sets the height of type to the value stored in CURRENT_PT_SIZE
-\# *Notes:
-\# CONDENSE_OR_EXTEND is invoked from the aliases
-\# CONDENSE and EXTEND. CONDENSE implies <100, EXTEND
-\# implies >100. Do not use a percent sign in the argument.
-\#
-\# There is no default setting for CONDENSE or EXTEND.
-\# 80 is a good approximation of condensed type, 120 is okay
-\# for extended.
-\#
-\# The value set by CONDENSE or EXTEND applies to all
-\# subsequent \*[COND] or \*[EXT] escapes until a new value is set.
-\#
-\# \*[COND] or \*[EXT] must be turned off before all changes of point
-\# size and reinvoked afterwards (if so desired). This refers to
-\# changes of point size via control lines AND with via inlines.
-\#
-.MAC CONDENSE_OR_EXTEND END
-. if '\\$0'CONDENSE' \{\
-. ds $COND_PERCENT \\$1
-. if \\n[#PRINT_STYLE]=1 \{\
-. rm $COND_PERCENT
-. ds $COND_PERCENT 100
-. \}
-. ds COND \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#CONDENSE 1'\
-\R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
-\Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
-. ds COND_FOR_SUP \
-\R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
-\Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
-. \}
-. if '\\$0'EXTEND' \{\
-. ds $EXT_PERCENT \\$1
-. if \\n[#PRINT_STYLE]=1 \{\
-. rm $EXT_PERCENT
-. ds $EXT_PERCENT 100
-. \}
-. ds EXT \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#EXTEND 1'\
-\R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
-\Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
-. ds EXT_FOR_SUP \
-\R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
-\Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
-. \}
-.END
-\#
-.ds CONDX \ER'#CONDENSE 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
-.ds EXTX \ER'#EXTEND 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
-\#
-\#
-\# +++PAD LINES+++ (insert space)
-\#
-\# PAD MARKER
-\# ----------
-\# *Arguments:
-\# <character to use for marking pad points>
-\# *Function:
-\# Defines string $PAD_MARKER, used in PAD
-\# *Notes:
-\# $PAD_MARKER is normally # (the pound sign).
-\#
-.MAC PAD_MARKER END
-. ds $PAD_MARKER \\$1
-.END
-\#
-\#
-\# PAD
-\# ---
-\# *Argments:
-\# "<string of text with padding markers inserted>"
-\# *Function:
-\# Defines and redefines padding character (default=pound sign
-\# unless padding character has been set with PAD_MARKER)
-\# several times so that when the string is output at the end
-\# of the macro, every # has been converted to an equal-sized
-\# amount of padding (blank space) on a line. # is equivalent to
-\# CompuGraphic's old <IS>.
-\# *Notes:
-\# String tabs may be marked off during PAD.
-\#
-.MAC PAD END
-. if \\n(.u=1 \{ .nr #FILL_MODE 1 \}
-. nf
-. if !d$PAD_MARKER .ds $PAD_MARKER #
-. char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
-. ds $FAMILY_FOR_PAD \\n[.fam]
-\#. fp \\n[.fp] \\*[$FONT]
-. fp \\n[.fp] \\n[.sty]
-. ds $FONT_FOR_PAD \\*[$FONT]
-. nr #SIZE_FOR_PAD \\n[.ps]
-. ds $PAD_STRING \\$1
-. as $PAD_STRING \Ekp
-. di PAD_STRING
-. fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-. br
-. di
-. char \\*[$PAD_MARKER] \R'#SPACE_TO_END \En(.l-\Enp'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
-. di PAD_STRING
-. fam \\*[$FAMILY_FOR_PAD]
-\\f]\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-. br
-. di
-. char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
-. ie \\n[#SILENT] \{\
-. SILENT
-. fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-. br
-. SILENT OFF
-. \}
-. el \{\
-. fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-. br
-. \}
-. if \\n[#FILL_MODE]=1 \{\
-. fi
-. rr #FILL_MODE
-. \}
-. rr #PAD_COUNT
-. rr #SPACE_TO_END
-. rr #PAD_SPACE
-. rm $PAD_STRING
-. rm PAD_STRING
-. rchar #
-. if '\\$2'NOBREAK' \{\
-. TRAP OFF
-. EOL
-. TRAP
-. \}
-.END
-\#
-\#
-\# +++LEADERS+++
-\#
-.ig
-The leader mechanism is primitive, but it works. Basically, every
-macro in this set that includes a line length also sets a single
-groff tab stop at the right hand end of the line. That way,
-whenever Ctrl-A is invoked (always at the end of an input line),
-leader of the correct length gets deposited. Ctrl-A is accessed by
-the string LEADER (i.e. inline, as \*[LEADER]). Leaders within tabs
-get their length from the tab line length.
-..
-\#
-\# SET LEADER CHARACTER
-\# --------------------
-\# *Arguments:
-\# <character to use whenever \*[LEADER] is invoked>
-\# *Function:
-\# Set leader character.
-\#
-.MAC LEADER_CHARACTER END
-. lc \\$1
-.END
-\#
-.ds LEADER 
-\#
-\# +++DROP CAPS+++
-\#
-\# DROP CAP FAMILY
-\# ---------------
-\# *Argument:
-\# <family of drop cap>
-\# *Function:
-\# Creates or modifies string $DC_FAM.
-\#
-.MAC DROPCAP_FAMILY END
-. ds $DC_FAM \\$1
-.END
-\#
-\#
-\# DROP CAP FONT
-\# -------------
-\# *Argument:
-\# <font of drop cap>
-\# *Function:
-\# Creates or modifies string $DC_FT.
-\#
-.MAC DROPCAP_FONT END
-. ds $DC_FT \\$1
-.END
-\#
-\#
-\# DROPCAP COLOR
-\# -------------
-\# *Arguments:
-\# <pre-defined XCOLOR or NEWCOLOR>
-\# *Function:
-\# Defines string $DC_COLOR to argument.
-\# *Notes:
-\# User must define an XCOLOR or NEWCOLOR before using
-\# DC_COLOR.
-\#
-.MAC DROPCAP_COLOR END
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. nr #DC_COLOR 1
-. ds $DC_COLOR \\$1
-.END
-\#
-\#
-\# DROP CAP GUTTER
-\# ---------------
-\# *Argument:
-\# <width of gutter between drop cap and indented text>
-\# *Function:
-\# Creates or modifies register #DC_GUT.
-\# *Notes:
-\# Requires unit of measure. Default is 3p.
-\#
-.MAC DROPCAP_GUTTER END
-. nr #DC_GUT (\\$1)
-.END
-\#
-\#
-\# DROP CAP ADJUST
-\# ---------------
-\# *Argument:
-\# <+|- # of points to in/decrease point size of drop cap letter>
-\# *Function:
-\# Creates or modifies string $DC_ADJUST.
-\# *Notes:
-\# Despite its best efforts, DROPCAP doesn't always get the point
-\# size of the drop cap critically perfect. DROPCAP_ADJUST lets
-\# the user add or subtract points (or fractions of points) to
-\# get the size right.
-\#
-\# Requires the + or - sign.
-\#
-.MAC DROPCAP_ADJUST END
-. ds $DC_ADJUST \\$1
-.END
-\#
-\#
-\# DROP CAP
-\# --------
-\# *Arguments:
-\# <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
-\# *Function:
-\# Calculates point size of dropcap based on # of lines passed as
-\# arg 2. Sets indent for text based on dropcap width+gutter.
-\# Advances and prints dropcap; reverses and prints indented text
-\# to bottom of dropcap, then resets indent to left margin (plus
-\# any indent that was in effect prior to invoking DROPCAP).
-\# *Notes:
-\# Drop caps put a strain on on resource-challenged systems.
-\#
-\# Drop caps when using the doc processing macro PP only work with
-\# initial paragraphs (i.e. at doc start, or after heads), only when
-\# DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
-\# is TYPESET. If these conditions aren't met, DROPCAPS is silently
-\# ignored.
-\#
-\# The COND or EXT argument are processed separately from all
-\# other COND or EXT inlines or macros, hence passing COND or
-\# EXT has no effect on running type.
-\#
-.MAC DROPCAP END
-. if #IGNORE \{ .return \}
-. br
-. if \\n[#DOCS] \{\
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#PP_STYLE]=2 \{ .return \}
-. if \\n[#PP]>1 \{ .return \}
-. ti 0
-. \}
-. \}
-. ds $DROPCAP \\$1
-. nr #DC_LINES \\$2-1
-. if \\n[#CONDENSE]=1 \{\
-. ds $RESTORE_COND \\*[$COND_PERCENT]
-\\*[CONDX]
-. nr #CONDENSE_WAS_ON 1
-. \}
-. if \\n[#EXTEND]=1 \{\
-. ds $RESTORE_EXT \\*[$EXT_PERCENT]
-\\*[EXTX]
-. nr #EXTEND_WAS_ON 1
-. \}
-. if '\\$3'COND' \{ .CONDENSE \\$4 \}
-. if '\\$3'EXT' \{ .EXTEND \\$4 \}
-. if !r#DC_GUT \{ .nr #DC_GUT (3p) \}
-. ds $RESTORE_FAM \\n[.fam]
-. ds $RESTORE_FT \\*[$FONT]
-. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
-. nr #RESTORE_INDENT \\n(.i
-. SIZESPECS
-. nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
-. ie !d$DC_FAM \{ .FAM \\n[.fam] \}
-. el \{ .FAM \\*[$DC_FAM] \}
-. ie !d$DC_FT \{ .FT \\*[$FONT] \}
-. el \{ .FT \\*[$DC_FT] \}
-. while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
-. ps \\n[#PT_SIZE]u+100u
-. SIZESPECS
-. nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
-.\}
-. if d$DC_ADJUST \{ .ps \\*[$DC_ADJUST]p \}
-. mk x
-. sp \\n[#DC_LINES]v
-. ie \\n[#DC_COLOR]=1 \{\
-. ie !'\\$3'' \{\
-. ie '\\$3'COND' \{ .PRINT \m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[] \}
-. el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[] \}
-. \}
-. el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
-. \}
-. el \{\
-. ie !'\\$3'' \{\
-. ie '\\$3'COND' \{ .PRINT \\*[COND]\\*[$DROPCAP]\\*[CONDX] \}
-. el \{ .PRINT \\*[EXT]\\*[$DROPCAP]\\*[EXTX] \}
-. \}
-. el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
-. \}
-. if '\\$3'COND' \{ \E*[COND] \}
-. if '\\$3'EXT' \{ \E*[EXT] \}
-. ie \\n(.i \{ .in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
-. el \{ .in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
-. if '\\$3'COND' \{ \E*[CONDX]\c \}
-. if '\\$3'EXT' \{ \E*[EXTX]\c \}
-. rt \\nxu
-. FAM \\*[$RESTORE_FAM]
-. FT \\*[$RESTORE_FT]
-. ps \\n[#RESTORE_PT_SIZE]u
-. if \\n[#CONDENSE_WAS_ON] \{\
-. CONDENSE \\*[$RESTORE_COND]
-\\*[COND]\c
-. \}
-. if \\n[#EXTEND_WAS_ON] \{\
-. EXTEND \\*[$RESTORE_EXT]
-\\*[EXT]\c
-. \}
-. ie \\n(.u \{ .wh \\n(.du+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF \}
-. el \{ .wh \\n(.du+\\n[#DC_HEIGHT]u DROPCAP_OFF \}
-. rr #CONDENSE_WAS_ON
-. rr #EXTEND_WAS_ON
-. rm $DROPCAP
-. rr #DC_LINES
-. rm $RESTORE_COND
-. rm $RESTORE_EXT
-. rm $RESTORE_FAM
-. rm $RESTORE_FT
-. rr #RESTORE_PT_SIZE
-. rr #RESTORE_INDENT
-. rr #DC_HEIGHT
-. rr #GET_DC_HEIGHT
-. rr x
-.END
-\#
-.MAC DROPCAP_OFF END
-' in \\n[#RESTORE_INDENT]u
-.END
-\#
-\#
-\# RULE
-\# ----
-\# *Argument:
-\# <none>
-\# *Function:
-\# Draws a rule the length of the current measure.
-\# *Notes:
-\#
-.MAC RULE END
-\c
-. EL
-. if \\n(.u=1 \{\
-. nr #FILL_WAS_ON 1
-. ds $CURRENT_QUAD \\*[$QUAD_VALUE]
-. nf
-. \}
-. ie \\n[#INDENT_ACTIVE] \{\
-. nr #RESTORE_L_LENGTH \\n(.l
-. if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \}
-. if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \}
-. PRINT \El'\En(.lu'\c
-. ll \\n[#RESTORE_L_LENGTH]u
-. rr #RESTORE_L_LENGTH
-. \}
-. el \{\
-. PRINT \El'\En(.lu'\c
-. \}
-. if r#FILL_WAS_ON \{\
-. fi
-. rr #FILL_WAS_ON
-. QUAD \\*[$CURRENT_QUAD]
-. rm $CURRENT_QUAD
-. \}
-. EL
-.END
-\#
-\# =====================================================================
-\#
-\# +++WORD AND SENTENCE SPACING+++
-\#
-\# WORD SPACE CONTROL
-\# ------------------
-\# *Argument:
-\# <+|->wordspace | DEFAULT
-\# *Function:
-\# Increases or decreases interword space by user supplied amount.
-\# If DEFAULT, value is set to 12 (groff default).
-\# *Notes:
-\# $WS_CONSTANT is the groff default word space.
-\# $WS_VAR is the user supplied amount by which to in/decrease word space.
-\# $WS is a concatenation of WS_CONSTANT and WS_VAR.
-\#
-\# Because the user supplied value requires a literal + or - sign,
-\# the macro argument is stored in a string.
-\#
-\# \n[.sss] holds the current sentence space value.
-\#
-.MAC WS END
-. ds $WS_CONSTANT 12
-. ds $WS_VAR \\$1
-. ie '\\$1'DEFAULT' .ds $WS_VAR +0
-. el .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR])
-. ie \\n[.sss]=12 \{ .ss \\*[$WS] 12 \}
-. el \{\
-. ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
-. SS \\*[$SS_VAR]
-. \}
-.END
-\#
-\#
-\# SENTENCE SPACE CONTROL
-\# ----------------------
-\# *Argument:
-\# <+-sentencespace> | 0 | DEFAULT
-\# *Function:
-\# Increases or decreases sentence space by user supplied amount.
-\# If 0, sentence spaces are ignored. If DEFAULT, value is
-\# set to 12 (groff default).
-\# *Notes:
-\# Because the user supplied value requires a literal + or - sign,
-\# the macro argument is stored in a string.
-\#
-\# Sentence space applies only to input where sentences are separated
-\# by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
-\# Changing .SS when sentences are separated by only one space has
-\# no effect on the space between sentences.
-\#
-\# \n[.ss] holds the current wordspace value.
-\# \n[.sss] holds the current sentence space value.
-\#
-.MAC SS END
-. ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \}
-. el \{\
-. ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \}
-. el \{\
-. ds $SS_VAR \\$1
-. ss \\n[.ss] (0\\*[$SS_VAR])
-. \}
-. \}
-.END
-\#
-\#
-\# =====================================================================
-\#
-\# +++INDENTS+++
-\#
-.ig
-There are five styles of indents: left, right, both, temporary,
-and hanging. Each is set/invoked with a different macro.
-Indent macros begin with the letter "I", hence .IL means "indent left,"
-.IR means "indent right," and so on.
-
-The first time any of the indent macros is used, it requires an
-argument--the size of the indent (with a unit of measure). The
-size may also be entered using the \w escape--very useful
-for numbered lists using HI. The unit of measure is required.
-Subsequent invocations don't require the argument; the indent
-measure remains the same until it's changed by invoking the macro
-with an argument again.
-
-If no indents are in effect, the arguments passed to indent macros are
-measured from the left and right margins of the page. If a left indent
-or a right indent is already in effect, the arguments passed to
-the indent macros are calculated from the current values; in other words,
-the arguments are additive. If you quit an indent and later return
-to it, its value will be the value last in effect, unless you pass
-it an argument. If you do pass an argument, it is added to the last
-value in effect, unless you cleared the indent with one of
-.I<LRB>X/Q macros.
-
-Example
--------
-
-.IL 2P
-...some text...
-.IL 2P
-...some text...
-.IQ
-...some text...
-.IL
-...some text...
-
-The first .IL 2P indents text 2P from the left margin. The second
-.IL 2P indents text by an additional 2P, i.e. 4P from the left margin.
-.IQ turns the indent off. The last .IL (which has no argument)
-takes its value from the total of all arguments passed to .IL (in
-this case, 2P and 2P), therefore it indents 2P+2P from the left
-margin, i.e. 4P. If you wanted the last .IL to indent just 2P,
-you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass
-the last .IL the argument 2P.
-
-To reverse the sense of an indent added to an indent, you may use
-negative values.
-
-Indents can be turned off individually with ILX, IRX, and IBX.
-LEFT and RIGHT indents may be combined and manipulated
-separately, (e.g. you can have an IL of 2P and an IR of 4P
-operative at the same time, and then change, say, the IL to
-4P--thereby left indenting 6P--while the IR remains at 4P.
-
-IB automatically turns off IL and IR. They have to be reinvoked
-again when needed. IL and IR automatically turn IB off; it, too,
-has to be reinvoked with needed.
-
-All indents can be turned off at once with IQ. The ILX, IRX, IBX,
-and IQ macros simply turn the indents off; the values stored in
-the respective indent macros (IL, IR, IB) remain in effect. If
-the user wishes to clear the values, the I<LRB>X macros should be
-invoked with the single argument CLEAR. IQ CLEAR clears out
-the values stored for all indent styles.
-
-Indents *must* be turned off before settting string tabs
-inside PAD. Generally, in order not to get confused, it's a
-good idea to turn all indents off before setting any tabs.
-
-TI and HI are special cases. There's no need to turn them off,
-since they affect only one line--the first after their
-invocation. Like the other indent styles, the first time
-they're invoked, they require a value in iPpcm; each subsequent
-invocation without an argument will use the same value. To
-change the value, simply pass a new value. Values for TI and HI
-are *not* additive.
-
-HI presupposes that you already have a left or both indent on.
-HI will never hang a line outside the left margin of a document
-or column. In other words, you must have IL or IB on before you
-can use HI.
-..
-\#
-\# INDENT LEFT
-\# -----------
-\#
-.MAC IL END
-. if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
-. nr #INDENT_STYLE_LEFT 1
-. nr #INDENT_ACTIVE 1
-. nr #INDENT_LEFT_ACTIVE 1
-. ie '\\$1'' \{\
-. br
-. in \\n[#L_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-. el \{\
-. br
-. nr #L_INDENT +(\\$1)
-. in \\n[#L_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-.END
-\#
-\#
-\# +++INDENT RIGHT+++
-\#
-.MAC IR END
-. if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
-. nr #INDENT_STYLE_RIGHT 1
-. nr #INDENT_ACTIVE 1
-. nr #INDENT_RIGHT_ACTIVE 1
-. ie '\\$1'' \{\
-. br
-. ie \\n[#TAB_ACTIVE] \{\
-. ll \\n(.lu-\\n[#R_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-. \}
-. el \{\
-. br
-. nr #R_INDENT +(\\$1)
-. ie \\n[#TAB_ACTIVE] \{\
-. ll \\n(.lu-\\n[#R_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
-. ta \\n(.lu-\\n[#L_INDENT]u
-. \}
-. \}
-.END
-\#
-\#
-\# +++INDENT BOTH+++
-\#
-.MAC IB END
-. if \\n[#INDENT_STYLE_LEFT] \{ .ILX \}
-. if \\n[#INDENT_STYLE_RIGHT] \{ .IRX \}
-. nr #INDENT_STYLE_BOTH 1
-. nr #INDENT_ACTIVE 1
-. nr #INDENT_BOTH_ACTIVE 1
-. ie '\\$1'' \{\
-. br
-. in \\n[#BL_INDENT]u
-. ie \\n[#TAB_ACTIVE] \{\
-. ll \\n(.lu-\\n[#BR_INDENT]u
-. ta \\n(.lu-\\n[#BR_INDENT]u
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
-. ta \\n(.lu-\\n[#BR_INDENT]u
-. \}
-. \}
-. el \{\
-. br
-. nr #BL_INDENT (\\n[#INDENT]+\\$1)
-. ie \\n[#NUM_ARGS]=2 \{ .nr #BR_INDENT +(\\$2) \}
-. el \{ .nr #BR_INDENT \\n[#BL_INDENT] \}
-. ie \\n[#TAB_ACTIVE] \{\
-. in \\n[#BL_INDENT]u
-. ll \\n(.lu-\\n[#BR_INDENT]u
-. ta \\n(.lu-\\n[#BL_INDENT]u
-. \}
-. el \{\
-. in \\n[#BL_INDENT]u
-. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
-. ta \\n(.lu-\\n[#BR_INDENT]u
-. \}
-. \}
-.END
-\#
-\#
-\# +++TEMPORARY INDENT+++
-\#
-.MAC TI END
-. br
-. ie '\\$1'' \{\
-. ti \\n[#T_INDENT]u
-. if \\n[#INDENT_LEFT_ACTIVE] \{\
-. ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
-. \}
-. if \\n[#INDENT_BOTH_ACTIVE] \{\
-. ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
-. \}
-. \}
-. el \{\
-. nr #T_INDENT (\\$1)
-. ti \\n[#T_INDENT]u
-. \}
-.END
-\#
-\#
-\# +++HANGING INDENT+++
-\#
-.MAC HI END
-. ie '\\$1'' \{ .ti -\\n[#HL_INDENT]u \}
-. el \{\
-. nr #HL_INDENT (\\$1)
-. ti -\\n[#HL_INDENT]u
-. \}
-.END
-\#
-\#
-\# +++INDENTS OFF+++
-\#
-.MAC ILX END
-. br
-. in 0
-. rr #INDENT_LEFT_ACTIVE
-. if '\\$1'CLEAR' \{\
-. rr #L_INDENT
-. rr #INDENT_STYLE_LEFT
-. \}
-.END
-\#
-\#
-.MAC IRX END
-. br
-. rr #INDENT_RIGHT_ACTIVE
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. if '\\$1'CLEAR' \{\
-. rr #R_INDENT
-. rr #INDENT_STYLE_RIGHT
-. \}
-.END
-\#
-\#
-.MAC IBX END
-. br
-. in 0
-. rr #INDENT_BOTH_ACTIVE
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. if '\\$1'CLEAR' \{\
-. rr #BL_INDENT
-. rr #BR_INDENT
-. rr #INDENT_STYLE_BOTH
-. \}
-.END
-\#
-\#
-.MAC IX END
-. if '\\$0'IX' \{\
-. if !\\n[#IX_WARN] \{\
-. tm1 "[mom]: Use of .IX is now deprecated. Use .IQ instead.
-. tm1 " .IX will continue to behave as before, but to
-. tm1 " avoid this message, please update your document.
-. nr #IX_WARN 1
-. \}
-. \}
-. br
-. in 0
-. rr #INDENT_LEFT_ACTIVE
-. rr #INDENT_RIGHT_ACTIVE
-. rr #INDENT_BOTH_ACTIVE
-. if \\n[#INDENT_STYLE_RIGHT] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. \}
-. if \\n[#INDENT_STYLE_BOTH] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. \}
-. if '\\$1'CLEAR' \{\
-. if \\n[#INDENT_STYLE_RIGHT] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. \}
-. if \\n[#INDENT_STYLE_BOTH] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
-. el \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. \}
-. rr #L_INDENT
-. rr #R_INDENT
-. rr #BL_INDENT
-. rr #BR_INDENT
-. rr #T_INDENT
-. rr #H_INDENT
-. rr #INDENT_STYLE_LEFT
-. rr #INDENT_STYLE_RIGHT
-. rr #INDENT_STYLE_BOTH
-. \}
-. rr #INDENT_ACTIVE
-.END
-\#
-\# =====================================================================
-\#
-\# +++MULTIPLE COLUMNS+++
-\#
-\# MULTIPLE COLUMNS ON
-\# -------------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Marks the top of a column set
-\#
-.MAC MCO END
-.mk c
-.END
-\#
-\# MULTIPLE COLUMN RETURN
-\# ----------------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Returns to the top of a column set
-\#
-.MAC MCR END
-. TRAP OFF
-. sp |\\ncu
-. TRAP
-.END
-\#
-\# MULTIPLE COLUMNS OFF
-\# --------------------
-\# *Arguments:
-\# <none> | <lead to advance beneath bottom of deepest column>
-\# *Function:
-\# Advances to the end of a column set
-\# *Notes:
-\# With no argument, advances to the next baseline (at the current
-\# leading value) beneath the longest column. With an argument
-\# (which requires a unit of measure), advances arg distance
-\# beneath the baseline of the deepest column. If the argument
-\# is zero, advances to the baseline of the deepest column.
-\#
-.MAC MCX END
-. ie '\\$1'' \{\
-. TQ
-. sp |\\n(.hu
-. \}
-. el \{\
-. nr #MCX_ALD (\\$1)
-. TQ
-. ie \\n[#MCX_ALD]=0 \{ .sp |\\n(.hu-1v \}
-. el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \}
-. rr #MCX_ALD
-. \}
-.END
-\#
-\# =====================================================================
-\#
-\# +++TYPESETTING SUPPORT MACROS+++
-\#
-\# TRAP
-\# ----
-\# *Arguments:
-\# toggle
-\# *Function:
-\# Enables/disables traps.
-\# *Notes:
-\# EL and TN don't function as advertised on the last line before
-\# a trap (when they break the preceding line, they spring the
-\# trap, and groff won't back up to the line preceding the trap).
-\# TRAP is a kludge to get EL and TN work properly on last lines.
-\# The user simply enloses the offending lines in TRAP OFF/TRAP.
-\#
-.MAC TRAP END
-. ie '\\$1'' \{ .vpt 1 \}
-. el \{ .vpt 0 \}
-.END
-\#
-\#
-\# SILENT
-\# ------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Diverts text so that it doesn't print, or turns the function off.
-\# *Notes:
-\# Useful for setting up autotabs where you don't want the line with
-\# the tab marks to print.
-\#
-\# Also aliased as COMMENT, in case user wants to input a batch of
-\# text that doesn't print.
-\#
-.MAC SILENT END
-. nr #SILENT 1
-. if \\n[#QUAD] \{ .br \}
-. ie '\\$1'' \{ .di NO_FLASH \}
-. el \{\
-. br
-. di
-. rm NO_FLASH
-. rr #SILENT
-. \}
-.END
-\#
-\#
-\# PRINT
-\# -----
-\# *Function:
-\# Prints anything. A macro that helps keep my code nicely indented.
-\#
-.MAC PRINT END
-. nop \\$*
-.END
-\#
-\#
-\# CAPS
-\# ----
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Converts text to caps, or, if OFF, reverts to normal caps/lc.
-\#
-.MAC CAPS END
-. ie '\\$1'' \{\
-. tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-. tr à\[`A]
-. tr â\[^A]
-. tr á\['A]
-. tr ä\[:A]
-. tr å\[oA]
-. tr ã\[~A]
-. tr æ\[AE]
-. tr è\[`E]
-. tr ê\[^E]
-. tr é\['E]
-. tr ë\[:E]
-. tr ì\[`I]
-. tr î\[^I]
-. tr í\['I]
-. tr ï\[:I]
-. tr ò\[`O]
-. tr ô\[^O]
-. tr ó\['O]
-. tr ö\[:O]
-. tr õ\[~O]
-. tr ø\[/O]
-. tr ù\[`U]
-. tr û\[^U]
-. tr ú\['U]
-. tr ü\[:U]
-. tr ç\[,C]
-. tr ð\[-D]
-. tr ñ\[~N]
-. tr þ\[TP]
-. tr ý\['Y]
-. tr ÿ\[:Y]
-. nr #CAPS_ON 1
-. \}
-. el \{\
-. tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-. tr à\[`a]
-. tr â\[^a]
-. tr á\['a]
-. tr ä\[:a]
-. tr å\[oa]
-. tr ã\[~a]
-. tr æ\[ae]
-. tr è\[`e]
-. tr ê\[^e]
-. tr é\['e]
-. tr ë\[:e]
-. tr ì\[`i]
-. tr î\[^i]
-. tr í\['i]
-. tr ï\[:i]
-. tr ò\[`o]
-. tr ô\[^o]
-. tr ó\['o]
-. tr ö\[:o]
-. tr õ\[~o]
-. tr ø\[/o]
-. tr ù\[`u]
-. tr û\[^u]
-. tr ú\['u]
-. tr ü\[:u]
-. tr ç\[,c]
-. tr ð\[Sd]
-. tr ñ\[~n]
-. tr þ\[Tp]
-. tr ý\['y]
-. tr ÿ\[:y]
-. rr #CAPS_ON
-. \}
-.END
-\#
-\# SIZESPECS
-\# ---------
-\# Argument:
-\# <none>
-\# Function:
-\# Gets cap-height, x-height, and descender depth of the
-\# current font at the current point size.
-\# *Notes:
-\# The routine is diverted so it remains invisible to output.
-\#
-.MAC SIZESPECS END
-. di TYPESIZE
-E\\R'#CAP_HEIGHT \\n[.cht]'
-e\\R'#X_HEIGHT \\n[.cht]'
-y\\R'#DESCENDER \\n[.cdp]'
-. br
-. di
-.END
-\#
-\# =====================================================================
-\#
-\# +++TYPESETTING ALIASES+++
-\#
-.ALIAS ADD_SPACE ALD
-.ALIAS CENTRE CENTER
-.ALIAS COLOUR COLOR
-.ALIAS COMMENT SILENT
-.ALIAS CONDENSE CONDENSE_OR_EXTEND
-.ALIAS EXTEND CONDENSE_OR_EXTEND
-.ALIAS FAM FAMILY
-.ALIAS HYPHENATE HY
-.ALIAS HYPHENATION HY
-.ALIAS HYSET HY_SET
-.ALIAS IBQ IBX
-.ALIAS ILQ ILX
-.ALIAS IQ IX
-.ALIAS IRQ IRX
-.ALIAS LIG LIGATURES
-.ALIAS NEWCOLOUR NEWCOLOR
-.ALIAS PADMARKER PAD_MARKER
-.ALIAS SP ALD
-.ALIAS SPACE ALD
-.ALIAS TABSET TAB_SET
-.ALIAS TB TAB
-.ALIAS UNDERSCORE_2 UNDERSCORE2
-.ALIAS XCOLOUR XCOLOR
-\#
-\#
-\# ====================================================================
-\#
-\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
-\# ===============================================
-\#
-\# +++PAGE DIMENSIONS+++
-\#
-\# PAPER SIZE
-\# ----------
-\# *Arguments:
-\# LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
-\# *Function:
-\# Sets up dimensions for different paper sizes.
-\#
-.MAC PAPER END
-. ds $PAPER \\$1
-. if '\\*[$PAPER]'LETTER' \{\
-. PAGEWIDTH 8.5i
-. PAGELENGTH 11i
-. \}
-. if '\\*[$PAPER]'LEGAL' \{\
-. PAGEWIDTH 8.5i
-. PAGELENGTH 14i
-. \}
-. if '\\*[$PAPER]'STATEMENT' \{\
-. PAGEWIDTH 5.5i
-. PAGELENGTH 8.5i
-. \}
-. if '\\*[$PAPER]'TABLOID' \{\
-. PAGEWIDTH 11i
-. PAGELENGTH 17i
-. \}
-. if '\\*[$PAPER]'LEDGER' \{\
-. PAGEWIDTH 17i
-. PAGELENGTH 11i
-. \}
-. if '\\*[$PAPER]'FOLIO' \{\
-. PAGEWIDTH 8.5i
-. PAGELENGTH 13i
-. \}
-. if '\\*[$PAPER]'QUARTO' \{\
-. PAGEWIDTH 610p
-. PAGELENGTH 780p
-. \}
-. if '\\*[$PAPER]'10x14' \{\
-. PAGEWIDTH 10i
-. PAGELENGTH 14i
-. \}
-. if '\\*[$PAPER]'EXECUTIVE' \{\
-. PAGEWIDTH 7.25i
-. PAGELENGTH 10.5i
-. \}
-. if '\\*[$PAPER]'A3' \{\
-. PAGEWIDTH 842p
-. PAGELENGTH 1190p
-. \}
-. if '\\*[$PAPER]'A4' \{\
-. PAGEWIDTH 595p
-. PAGELENGTH 842p
-. \}
-. if '\\*[$PAPER]'A5' \{\
-. PAGEWIDTH 421p
-. PAGELENGTH 595p
-. \}
-. if '\\*[$PAPER]'B4' \{\
-. PAGEWIDTH 709p
-. PAGELENGTH 1002p
-. \}
-. if '\\*[$PAPER]'B5' \{\
-. PAGEWIDTH 501p
-. PAGELENGTH 709p
-. \}
-. if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
-. if !r#R_MARGIN \{ .R_MARGIN 1i \}
-.END
-\#
-\#
-\# ====================================================================
-\#
-\# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
-\#
-\# PRINTSTYLE
-\# ----------
-\# *Arguments:
-\# TYPESET | TYPEWRITE [SINGLESPACE]
-\# *Function:
-\# Sets type specs for typewriter-style or typeset output.
-\# *Notes:
-\# Number registers: TYPEWRITE=1, TYPESET=2.
-\#
-.MAC PRINTSTYLE END
-. if !\\n[#COLLATE]=1 \{\
-. if !d$PAPER \{ .PAPER LETTER \}
-. if '\\$1'TYPEWRITE' \{\
-. nr #PRINT_STYLE 1
-. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
-. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
-. TYPEWRITER
-. color 0
-. ie '\\$2'SINGLESPACE' \{\
-. nr #SINGLE_SPACE 1
-. vs 12
-. nr #ORIGINAL_DOC_LEAD \\n(.v
-. \}
-. el \{\
-. vs 24
-. nr #ORIGINAL_DOC_LEAD \\n(.v
-. \}
-. QUAD L
-. HY OFF
-. SMARTQUOTES OFF
-. if !\\n[#PP_INDENT] \{\
-. in 3P \"Set indent
-. nr #PP_INDENT \\n(.i \"Read into #PP_INDENT
-. in 0 \"Remove indent
-. \}
-. HDRFTR_RIGHT_CAPS
-. nr #BOLDER_UNITS 0
-. nr #CONDENSE 0
-. nr #EXTEND 0
-. rm IT
-. rm BD
-. rm BDI
-. rm PREV
-. UNDERLINE_SLANT
-. UNDERLINE_ITALIC
-. UNDERLINE_QUOTES
-. nr #IGNORE_COLUMNS 1
-. char \(em --
-. tr `'
-. \}
-. if '\\$1'TYPESET' \{\
-. nr #PRINT_STYLE 2
-. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
-. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
-. FAMILY T
-. FT R
-. if !\\n[#DOC_TYPE]=4 \{ .PT_SIZE 12.5 \}
-. if !\\n[#DOC_TYPE]=4 \{ .LS 16 \}
-. JUSTIFY
-. HY
-. HY_SET 2 36p 1p
-. KERN
-. LIG
-. SS 0
-. SMARTQUOTES
-. if !\\n[#PP_INDENT] \{\
-. in 2m \"Set indent
-. nr #PP_INDENT \\n(.i \"Read into #PP_INDENT
-. in 0 \"Remove indent
-. \}
-. HDRFTR_RIGHT_CAPS
-. rr #IGNORE_COLUMNS
-. \}
-. \}
-.END
-\#
-\#
-\# Macros to control behaviour of PRINTSTYLE TYPEWRITE
-\#
-\# First, a little utility macro.
-\#
-.MAC TYPEWRITER END
-. fam C
-. ft R
-. ps 12
-.END
-\#
-\#
-\# ITALIC MEANS ITALIC
-\# -------------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Instructs TYPEWRITE to treat italics as italics, whether
-\# invoked via control lines or inline.
-\# *Notes:
-\# ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
-\# hence invoking the one automatically turns off the other.
-\#
-.MAC ITALIC_MEANS_ITALIC END
-. if \\n[#PRINT_STYLE]=1 \{\
-. nr #ITALIC_MEANS_ITALIC 1
-. rr #UNDERLINE_ITALIC
-. rm ROM
-. rm IT
-. rm PREV
-. ds ROM \EfR
-. ds IT \EfI
-. ds PREV \EfR
-. \}
-.END
-\#
-\#
-\# UNDERLINE ITALIC
-\# ----------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Instructs TYPEWRITE to underline italics, whether invoked
-\# via control lines or inline.
-\# *Notes:
-\# UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
-\# hence invoking the one automatically turns off the other.
-\#
-\# UNDERLINE_ITALIC is the default for TYPEWRITE.
-\#
-.MAC UNDERLINE_ITALIC END
-. if \\n[#PRINT_STYLE]=1 \{\
-. nr #UNDERLINE_ITALIC 1
-. rr #ITALIC_MEANS_ITALIC
-. rm ROM
-. rm IT
-. rm PREV
-. ds ROM \E*[ULX]
-. ds IT \E*[UL]
-. ds PREV \E*[ULX]
-. \}
-.END
-\#
-\#
-\# UNDERLINE SLANT
-\# ---------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Instructs TYPEWRITE to underline occurences of \*[SLANT], or
-\# turns feature off.
-\# *Notes:
-\# Users may want \*[SLANT] to mean slant in TYPEWRITE, although
-\# most of the time, \*[SLANT] most likely means the user wanted
-\# italic but didn't have it, ergo the need to tell TYPEWRITE to
-\# treat \*[SLANT] as italic (i.e. underlined).
-\#
-\# UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
-\# hence invoking the one automatically turns off the other.
-\#
-\# UNDERLINE_SLANT is the default for TYPEWRITE.
-\#
-.MAC UNDERLINE_SLANT END
-. if \\n[#PRINT_STYLE]=1 \{\
-. rr #SLANT_MEANS_SLANT
-. nr #UNDERLINE_SLANT 1
-. rm SLANT
-. rm SLANTX
-. ds SLANT \ER'#SLANT_ON 1'\E*[UL]
-. ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
-. \}
-.END
-\#
-\#
-.MAC SLANT_MEANS_SLANT END
-. if \\n[#PRINT_STYLE]=1 \{\
-. rr #UNDERLINE_SLANT
-. nr #SLANT_MEANS_SLANT 1
-. rm SLANT
-. rm SLANTX
-. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-. ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-. \}
-.END
-\#
-\#
-.MAC IGNORE_COLUMNS END
-. if \\n[#PRINT_STYLE]=1 \{ .nr #NO_COLUMNS 1 \}
-.END
-\#
-\#
-\# ====================================================================
-\#
-\# +++COPY STYLE -- DRAFT OR FINAL+++
-\#
-\# COPY STYLE
-\# ----------
-\# *Arguments:
-\# DRAFT | FINAL
-\# *Function:
-\# Sets registers that are used to determine what to put
-\# in the default header, and how to number pages.
-\# *Notes:
-\# DOCTYPE must come before COPYSTYLE.
-\#
-.MAC COPYSTYLE END
-. ds $COPY_STYLE \\$1
-. if '\\*[$COPY_STYLE]'DRAFT' \{\
-. nr #COPY_STYLE 1
-. if !d$DRAFT \{ .DRAFT 1 \}
-. \}
-. if '\\*[$COPY_STYLE]'FINAL' \{ .nr #COPY_STYLE 2 \}
-. if !d$CHAPTER_STRING \{ .CHAPTER_STRING "Chapter" \}
-. if !d$DRAFT_STRING \{ .DRAFT_STRING "Draft" \}
-. if !d$REVISION_STRING \{ .REVISION_STRING "Rev." \}
-.\" Default
-. if \\n[#DOC_TYPE]=1 \{\
-. ie \\n[#COPY_STYLE]=1 \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE roman \}
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ie \\n[#DRAFT_WITH_PAGENUM] \{\
-. ds $HDRFTR_CENTER
-. \}
-. el \{\
-. ie '\\*[$REVISION]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE DIGIT \}
-. if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ds $HDRFTR_CENTER
-. rr #USER_DEF_HDRFTR_CENTER
-. \}
-. \}
-. \}
-.\" Chapter
-. if \\n[#DOC_TYPE]=2 \{\
-.\" Copystyle DRAFT
-. ie \\n[#COPY_STYLE]=1 \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE roman \}
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ie \\n[#DRAFT_WITH_PAGENUM] \{\
-. ie '\\*[$CHAPTER]'' \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
-. \}
-. el \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. \}
-. \}
-. el \{\
-. ie '\\*[$REVISION]'' \{\
-. ie '\\*[$CHAPTER]'' \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING], \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. \}
-. \}
-. el \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. ie '\\*[$CHAPTER]'' \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING], \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. \}
-. el \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_TITLE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. \}
-. \}
-. \}
-. \}
-. \}
-.\" Copystyle FINAL
-. el \{\
-. if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE DIGIT \}
-. ie '\\*[$CHAPTER]'' \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
-. \}
-. \}
-. el \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. \}
-. \}
-. \}
-. \}
-. \}
-.\" Named
-. if \\n[#DOC_TYPE]=3 \{\
-. ie \\n[#COPY_STYLE]=1 \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE roman \}
-. ie \\n[#DRAFT_WITH_PAGENUM] \{\
-. ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-. \}
-. el \{\
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ie '\\*[$REVISION]'' \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$DOC_TYPE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT]
-. \}
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. ds $HDRFTR_CENTER \
- \\*[$DOC_TYPE], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. el \{\
-. ds $HDRFTR_CENTER \
- \\*[$DOC_TYPE], \
- \\*[$DRAFT_STRING]\\*[$DRAFT], \
- \\*[$REVISION_STRING] \\*[$REVISION]
-. \}
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{ .PAGENUM_STYLE DIGIT \}
-. ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-. \}
-. \}
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++COLLECT DOC INFO -- STRINGS AND REGISTERS FOR REFERENCE MACROS+++
-\#
-\# *Arguments:
-\# various string/register arguments
-\# *Function:
-\# Collect information about documents.
-\#
-\#
-.MAC DOCTITLE END
-. ds $DOC_TITLE \\$1
-.END
-\#
-.MAC TITLE END \"Document title
-. ds $TITLE \\$1
-.END
-\#
-\#
-.MAC SUBTITLE END \"Document sub-title
-. ds $SUBTITLE \\$1
-.END
-\#
-\#
-.MAC CHAPTER END \"If document is a chapter, the chapter number
-. ds $CHAPTER \\$1
-.END
-\#
-\#
-.MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
-. ds $CHAPTER_TITLE \\$1
-.END
-\#
-\#
-.MAC DRAFT END \"Draft number
-. ie '\\$1'' .ds $DRAFT
-. el .ds $DRAFT " \\$1
-.END
-\#
-\#
-.MAC REVISION END \"Revision number
-. ds $REVISION \\$1
-.END
-\#
-\#
-.MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
-. nr #DRAFT_WITH_PAGENUM 1
-.END
-\#
-\#
-.MAC AUTHOR END \"Author. Enclose all args fully in double quotes.
-. nr #AUTHOR_NUM -1 1
-. while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
-. ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
-.\}
-. nr #NUM_AUTHORS \\n[#NUM_ARGS]%2 \"Use mod 2 to test if odd or even # of authors
-. ie \\n[#NUM_AUTHORS]=1 \{ .nr #AUTHOR_LINES 0 \}
-. el \{ .nr #AUTHOR_LINES 1 \}
-.END
-\#
-\#
-.MAC COPYRIGHT END \"For use on cover page only
-. ds $COPYRIGHT \[co]\\$1
-.END
-\#
-\#
-.MAC MISC END \"For use on cover page only; enclose all args in double quotes
-. nr #MISC_NUM -1 1
-. while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\
-. ds $MISC_\\n+[#MISC_NUM] \\$\\n[#MISC_NUM]
-.\}
-. nr #NUM_MISCS \\n[#NUM_ARGS]
-.END
-\#
-\#
-.MAC PAGENUMBER END \"Page # that appears on page one.
-. nr #n%_AT_PAGENUM_SET \\n%
-. nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
-. rr #n%_AT_PAGENUM_SET
-. nr #PAGE_NUM_SET 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++TYPE OF DOCUMENT+++
-\#
-\# DOCUMENT TYPE
-\# -------------
-\# *Argument:
-\# DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
-\# *Function:
-\# Creates strings and sets registers for document types.
-\# *Notes:
-\# Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
-\#
-.MAC DOCTYPE END
-. if '\\$1'DEFAULT' \{\
-. nr #DOC_TYPE 1
-. \}
-. if '\\$1'CHAPTER' \{\
-. nr #DOC_TYPE 2
-. \}
-. if '\\$1'NAMED' \{\
-. ds $DOC_TYPE \\$2
-. nr #DOC_TYPE 3
-. \}
-. if '\\$1'LETTER' \{\
-. nr #DOC_TYPE 4
-. L_MARGIN 1.125i
-. R_MARGIN 1.125i
-. PT_SIZE 12
-. LS 13.5
-. DOCHEADER OFF
-. PARA_INDENT 3m
-. INDENT_FIRST_PARAS
-. PARA_SPACE
-. ds $SUITE \En[#SUITE]
-. HEADER_MARGIN 3P+6p
-. HEADER_GAP 3P
-. FOOTERS
-. FOOTER_RULE OFF
-. FOOTER_LEFT ""
-. FOOTER_CENTER ""
-. FOOTER_RIGHT_SIZE +0
-. FOOTER_RIGHT "\&.../\E*[$SUITE]
-. FOOTER_ON_FIRST_PAGE
-. em ALL_DONE
-. \}
-.END
-\#
-\# +++LETTER MACROS+++
-\#
-\# First, create a register to hold incrementing numbers to be
-\# appended to LETTERHEAD.
-\#
-.nr #FIELD 0 1
-\#
-\# DATE
-\# ----
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Stores date (entered on the line after .DATE) in diversion
-\# LETTERHEAD<n>
-\#
-.MAC DATE END
-. if !'\\n(.z'' \{ .di \}
-. di LETTERHEAD\\n+[#FIELD]
-. ie \\n[#FIELD]=1 \{\
-. nr #DATE_FIRST 1
-. RIGHT
-. \}
-. el \{\
-. LEFT
-. \}
-.END
-\#
-\#
-\# TO
-\# --
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Stores addressee address (entered on the line after .TO) in
-\# diversion LETTERHEAD<n>
-\#
-.MAC TO END
-. if !'\\n(.z'' \{ .di \}
-. di LETTERHEAD\\n+[#FIELD]
-. LEFT
-.END
-\#
-\#
-\# FROM
-\# ----
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Stores addresser address (entered on the line after .FROM) in
-\# diversion LETTERHEAD<n>
-\#
-.MAC FROM END
-. if !'\\n(.z'' \{ .di \}
-. di LETTERHEAD\\n+[#FIELD]
-. LEFT
-.END
-\#
-\#
-\# GREETING
-\# --------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Stores greeting (entered on the line after .GREETING) in
-\# diversion LETTERHEAD<n>
-\#
-.MAC GREETING END
-. if !'\\n(.z'' \{ .di \}
-. di LETTERHEAD\\n+[#FIELD]
-. LEFT
-.END
-\#
-\#
-\# CLOSING
-\# -------
-\# *Arguments:
-\# <closing string>
-\# *Function:
-\# Stores greeting in diversion CLOSING.
-\#
-.MAC CLOSING END
-. br
-. nr #CLOSING 1
-. di CLOSING
-. LEFT
-.END
-\#
-\#
-\# NO SUITE
-\# --------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Redefines $FOOTER_RIGHT to blank so that a suite number doesn't
-\# appear at the bottom of letter pages.
-\#
-.MAC NO_SUITE END
-. FOOTER_RIGHT ""
-.END
-\#
-\# ====================================================================
-\#
-\# +++DEFAULTS+++
-\#
-\# TYPE-STYLE CONTROL MACROS
-\# -------------------------
-\#
-.ig
-The control macros for family, font, size, quad and color are here
-grouped together. Each (e.g. _FAMILY or _FONT) tests for a calling
-alias before performing the action(s) appropriate to the calling
-macro. Defaults for all these guys are set in DEFAULTS, and listed
-in the "Control Macros" section of the documentation pertinent to
-the macro whose style is to be changed.
-..
-\#
-.MAC _FAMILY END
-. if '\\$0'AUTHOR_FAMILY' .ds $AUTHOR_FAM \\$1
-. if '\\$0'BIBLIOGRAPHY_FAMILY' .ds $BIB_FAM \\$1
-. if '\\$0'BIBLIOGRAPHY_STRING_FAMILY' .ds $BIB_STRING_FAM \\$1
-. if '\\$0'BLOCKQUOTE_FAMILY' .ds $BQUOTE_FAM \\$1
-. if '\\$0'CITATION_FAMILY' .ds $BQUOTE_FAM \\$1
-. if '\\$0'CITE_FAMILY' .ds $BQUOTE_FAM \\$1
-. if '\\$0'CHAPTER_TITLE_FAMILY' .ds $CHAPTER_TITLE_FAM \\$1
-. if '\\$0'COVER_AUTHOR_FAMILY' .ds $COVER_AUTHOR_FAM \\$1
-. if '\\$0'COVER_CHAPTER_TITLE_FAMILY' .ds $COVER_CHAPTER_TITLE_FAM \\$1
-. if '\\$0'COVER_COPYRIGHT_FAMILY' .ds $COVER_COPYRIGHT_FAM \\$1
-. if '\\$0'COVER_DOCTYPE_FAMILY' .ds $COVER_DOCTYPE_FAM \\$1
-. if '\\$0'COVER_FAMILY' .ds $COVER_FAM \\$1
-. if '\\$0'COVER_SUBTITLE_FAMILY' .ds $COVER_SUBTITLE_FAM \\$1
-. if '\\$0'COVER_TITLE_FAMILY' .ds $COVER_TITLE_FAM \\$1
-. if '\\$0'DOC_COVER_AUTHOR_FAMILY' .ds $DOC_COVER_AUTHOR_FAM \\$1
-. if '\\$0'DOC_COVER_CHAPTER_TITLE_FAMILY' .ds $DOC_COVER_CHAPTER_TITLE_FAM \\$1
-. if '\\$0'DOC_COVER_COPYRIGHT_FAMILY' .ds $DOC_COVER_COPYRIGHT_FAM \\$1
-. if '\\$0'DOC_COVER_DOCTYPE_FAMILY' .ds $DOC_COVER_DOCTYPE_FAM \\$1
-. if '\\$0'DOC_COVER_FAMILY' .ds $DOC_COVER_FAM \\$1
-. if '\\$0'DOC_COVER_SUBTITLE_FAMILY' .ds $DOC_COVER_SUBTITLE_FAM \\$1
-. if '\\$0'DOC_COVER_TITLE_FAMILY' .ds $DOC_COVER_TITLE_FAM \\$1
-. if '\\$0'DOCHEADER_FAMILY' .ds $DOCHEADER_FAM \\$1
-. if '\\$0'DOCTYPE_FAMILY' .ds $DOCTYPE_FAM \\$1
-. if '\\$0'ENDNOTE_FAMILY' .ds $EN_FAM \\$1
-. if '\\$0'ENDNOTE_NUMBER_FAMILY' .ds $EN_NUMBER_FAM \\$1
-. if '\\$0'ENDNOTE_LINENUMBER_FAMILY' .ds $EN_LN_FAM \\$1
-. if '\\$0'ENDNOTE_STRING_FAMILY' .ds $EN_STRING_FAM \\$1
-. if '\\$0'ENDNOTE_TITLE_FAMILY' .ds $EN_TITLE_FAM \\$1
-. if '\\$0'EPIGRAPH_FAMILY' .ds $EPI_FAM \\$1
-. if '\\$0'FOOTNOTE_FAMILY' .ds $FN_FAM \\$1
-. if '\\$0'HDRFTR_CENTER_FAMILY' .ds $HDRFTR_CENTER_FAM \\$1
-. if '\\$0'HDRFTR_FAMILY' \{\
-. ds $HDRFTR_FAM \\$1
-. ds $HDRFTR_LEFT_FAM \\$1
-. ds $HDRFTR_CENTER_FAM \\$1
-. ds $HDRFTR_RIGHT_FAM \\$1
-. \}
-. if '\\$0'HDRFTR_LEFT_FAMILY' .ds $HDRFTR_LEFT_FAM \\$1
-. if '\\$0'HDRFTR_RIGHT_FAMILY' .ds $HDRFTR_RIGHT_FAM \\$1
-. if '\\$0'HEAD_FAMILY' .ds $HEAD_FAM \\$1
-. if '\\$0'PAGENUM_FAMILY' .ds $PAGE_NUM_FAM \\$1
-. if '\\$0'PARAHEAD_FAMILY' .ds $PH_FAM \\$1
-. if '\\$0'QUOTE_FAMILY' .ds $QUOTE_FAM \\$1
-. if '\\$0'SUBHEAD_FAMILY' .ds $SH_FAM \\$1
-. if '\\$0'SUBTITLE_FAMILY' .ds $SUBTITLE_FAM \\$1
-. if '\\$0'TITLE_FAMILY' .ds $TITLE_FAM \\$1
-. if '\\$0'TOC_FAMILY' .ds $TOC_FAM \\$1
-. if '\\$0'TOC_FAM' .ds $TOC_FAM \\$1
-. if '\\$0'TOC_HEADER_FAMILY' .ds $TOC_HEADER_FAM \\$1
-. if '\\$0'TOC_HEAD_FAMILY' .ds $TOC_HEAD_FAM \\$1
-. if '\\$0'TOC_PARAHEAD_FAMILY' .ds $TOC_PH_FAM \\$1
-. if '\\$0'TOC_PN_FAMILY' .ds $TOC_PN_FAM \\$1
-. if '\\$0'TOC_SUBHEAD_FAMILY' .ds $TOC_SH_FAM \\$1
-. if '\\$0'TOC_TITLE_FAMILY' .ds $TOC_TITLE_FAM \\$1
-.END
-\#
-\#
-.MAC _FONT END
-. if '\\$0'AUTHOR_FONT' .ds $AUTHOR_FT \\$1
-. if '\\$0'BIBLIOGRAPHY_FONT' .ds $BIB_FT \\$1
-. if '\\$0'BIBLIOGRAPHY_STRING_FONT' .ds $BIB_STRING_FT \\$1
-. if '\\$0'BLOCKQUOTE_FONT' .ds $BQUOTE_FT \\$1
-. if '\\$0'CITATION_FONT' .ds $BQUOTE_FT \\$1
-. if '\\$0'CITE_FONT' .ds $BQUOTE_FT \\$1
-. if '\\$0'CHAPTER_TITLE_FONT' .ds $CHAPTER_TITLE_FT \\$1
-. if '\\$0'COVER_AUTHOR_FONT' .ds $COVER_AUTHOR_FT \\$1
-. if '\\$0'COVER_CHAPTER_TITLE_FONT' .ds $COVER_CHAPTER_TITLE_FT \\$1
-. if '\\$0'COVER_COPYRIGHT_FONT' .ds $COVER_COPYRIGHT_FT \\$1
-. if '\\$0'COVER_DOCTYPE_FONT' .ds $COVER_DOCTYPE_FT \\$1
-. if '\\$0'COVER_SUBTITLE_FONT' .ds $COVER_SUBTITLE_FT \\$1
-. if '\\$0'COVER_TITLE_FONT' .ds $COVER_TITLE_FT \\$1
-. if '\\$0'DOC_COVER_AUTHOR_FONT' .ds $DOC_COVER_AUTHOR_FT \\$1
-. if '\\$0'DOC_COVER_CHAPTER_TITLE_FONT' .ds $DOC_COVER_CHAPTER_TITLE_FT \\$1
-. if '\\$0'DOC_COVER_COPYRIGHT_FONT' .ds $DOC_COVER_COPYRIGHT_FT \\$1
-. if '\\$0'DOC_COVER_DOCTYPE_FONT' .ds $DOC_COVER_DOCTYPE_FT \\$1
-. if '\\$0'DOC_COVER_SUBTITLE_FONT' .ds $DOC_COVER_SUBTITLE_FT \\$1
-. if '\\$0'DOC_COVER_TITLE_FONT' .ds $DOC_COVER_TITLE_FT \\$1
-. if '\\$0'DOCTYPE_FONT' .ds $DOCTYPE_FT \\$1
-. if '\\$0'ENDNOTE_FONT' .ds $EN_FT \\$1
-. if '\\$0'ENDNOTE_NUMBER_FONT' .ds $EN_NUMBER_FT \\$1
-. if '\\$0'ENDNOTE_LINENUMBER_FONT' .ds $EN_LN_FT \\$1
-. if '\\$0'ENDNOTE_STRING_FONT' .ds $EN_STRING_FT \\$1
-. if '\\$0'ENDNOTE_TITLE_FONT' .ds $EN_TITLE_FT \\$1
-. if '\\$0'EPIGRAPH_FONT' .ds $EPI_FT \\$1
-. if '\\$0'FOOTNOTE_FONT' .ds $FN_FT \\$1
-. if '\\$0'HDRFTR_CENTER_FONT' .ds $HDRFTR_CENTER_FT \\$1
-. if '\\$0'HDRFTR_LEFT_FONT' .ds $HDRFTR_LEFT_FT \\$1
-. if '\\$0'HDRFTR_RIGHT_FONT' .ds $HDRFTR_RIGHT_FT \\$1
-. if '\\$0'HEAD_FONT' .ds $HEAD_FT \\$1
-. if '\\$0'PAGENUM_FONT' .ds $PAGE_NUM_FT \\$1
-. if '\\$0'PARAHEAD_FONT' .ds $PH_FT \\$1
-. if '\\$0'QUOTE_FONT' .ds $QUOTE_FT \\$1
-. if '\\$0'SUBHEAD_FONT' .ds $SH_FT \\$1
-. if '\\$0'SUBTITLE_FONT' .ds $SUBTITLE_FT \\$1
-. if '\\$0'TITLE_FONT' .ds $TITLE_FT \\$1
-. if '\\$0'TOC_HEADER_FONT' .ds $TOC_HEADER_FT \\$1
-. if '\\$0'TOC_HEAD_FONT' .ds $TOC_HEAD_FT \\$1
-. if '\\$0'TOC_PARAHEAD_FONT' .ds $TOC_PH_FT \\$1
-. if '\\$0'TOC_PN_FONT' .ds $TOC_PN_FT \\$1
-. if '\\$0'TOC_SUBHEAD_FONT' .ds $TOC_SH_FT \\$1
-. if '\\$0'TOC_TITLE_FONT' .ds $TOC_TITLE_FT \\$1
-.END
-\#
-\#
-.MAC _SIZE END
-. if '\\$0'AUTHOR_SIZE' .ds $AUTHOR_SIZE_CHANGE \\$1
-. if '\\$0'BIBLIOGRAPHY_STRING_SIZE' .ds $BIB_STRING_SIZE_CHANGE \\$1
-. if '\\$0'BLOCKQUOTE_SIZE' .ds $BQUOTE_SIZE_CHANGE \\$1
-. if '\\$0'CITATION_SIZE' .ds $BQUOTE_SIZE_CHANGE \\$1
-. if '\\$0'CITE_SIZE' .ds $BQUOTE_SIZE_CHANGE \\$1
-. if '\\$0'CHAPTER_TITLE_SIZE' .ds $CHAPTER_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'COVER_AUTHOR_SIZE' .ds $COVER_AUTHOR_SIZE_CHANGE \\$1
-. if '\\$0'COVER_CHAPTER_TITLE_SIZE' .ds $COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'COVER_COPYRIGHT_SIZE' .ds $COVER_COPYRIGHT_SIZE_CHANGE \\$1
-. if '\\$0'COVER_DOCTYPE_SIZE' .ds $COVER_DOCTYPE_SIZE_CHANGE \\$1
-. if '\\$0'COVER_SUBTITLE_SIZE' .ds $COVER_SUBTITLE_SIZE_CHANGE \\$1
-. if '\\$0'COVER_TITLE_SIZE' .ds $COVER_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_AUTHOR_SIZE' .ds $DOC_COVER_AUTHOR_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_CHAPTER_TITLE_SIZE' .ds $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_COPYRIGHT_SIZE' .ds $DOC_COVER_COPYRIGHT_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_DOCTYPE_SIZE' .ds $DOC_COVER_DOCTYPE_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_SUBTITLE_SIZE' .ds $DOC_COVER_SUBTITLE_SIZE_CHANGE \\$1
-. if '\\$0'DOC_COVER_TITLE_SIZE' .ds $DOC_COVER_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'DOCTYPE_SIZE' .ds $DOCTYPE_SIZE_CHANGE \\$1
-. if '\\$0'ENDNOTE_NUMBER_SIZE' .ds $EN_NUMBER_SIZE_CHANGE \\$1
-. if '\\$0'ENDNOTE_LINENUMBER_SIZE' .ds $EN_LN_SIZE_CHANGE \\$1
-. if '\\$0'ENDNOTE_STRING_SIZE' .ds $EN_STRING_SIZE_CHANGE \\$1
-. if '\\$0'ENDNOTE_TITLE_SIZE' .ds $EN_TITLE_SIZE_CHANGE \\$1
-. if '\\$0'EPIGRAPH_SIZE' .ds $EPI_SIZE_CHANGE \\$1
-. if '\\$0'FOOTNOTE_SIZE' .ds $FN_SIZE_CHANGE \\$1
-. if '\\$0'HDRFTR_CENTER_SIZE' .ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
-. if '\\$0'HDRFTR_LEFT_SIZE' .ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
-. if '\\$0'HDRFTR_RIGHT_SIZE' .ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
-. if '\\$0'HDRFTR_SIZE' .ds $HDRFTR_SIZE_CHANGE \\$1
-. if '\\$0'HEAD_SIZE' .ds $HEAD_SIZE_CHANGE \\$1
-. if '\\$0'PAGENUM_SIZE' .ds $PAGE_NUM_SIZE_CHANGE \\$1
-. if '\\$0'PARAHEAD_SIZE' .ds $PH_SIZE_CHANGE \\$1
-. if '\\$0'QUOTE_SIZE' .ds $QUOTE_SIZE_CHANGE \\$1
-. if '\\$0'SUBHEAD_SIZE' .ds $SH_SIZE_CHANGE \\$1
-. if '\\$0'SUBTITLE_SIZE' .ds $SUBTITLE_SIZE_CHANGE \\$1
-. if '\\$0'TITLE_SIZE' .ds $TITLE_SIZE_CHANGE \\$1
-. if '\\$0'TOC_HEADER_SIZE' .ds $TOC_HEADER_SIZE_CHANGE \\$1
-. if '\\$0'TOC_HEAD_SIZE' .ds $TOC_HEAD_SIZE_CHANGE \\$1
-. if '\\$0'TOC_PARAHEAD_SIZE' .ds $TOC_PH_SIZE_CHANGE \\$1
-. if '\\$0'TOC_PN_SIZE' .ds $TOC_PN_SIZE_CHANGE \\$1
-. if '\\$0'TOC_SUBHEAD_SIZE' .ds $TOC_SH_SIZE_CHANGE \\$1
-. if '\\$0'TOC_TITLE_SIZE' .ds $TOC_TITLE_SIZE_CHANGE \\$1
-.END
-\#
-\#
-.MAC _COLOR END
-. if \\n[#PRINT_STYLE]=1 \{ .return \}
-. if '\\$0'ATTRIBUTE_COLOR' \{\
-. nr #ATTRIBUTE_COLOR 1
-. ds $ATTRIBUTE_COLOR \\$1
-. \}
-. if '\\$0'AUTHOR_COLOR' \{\
-. nr #AUTHOR_COLOR 1
-. ds $AUTHOR_COLOR \\$1
-. \}
-. if '\\$0'BLOCKQUOTE_COLOR' \{\
-. nr #BQUOTE_COLOR 1
-. ds $BQUOTE_COLOR \\$1
-. \}
-. if '\\$0'CITATION_COLOR' \{\
-. nr #BQUOTE_COLOR 1
-. ds $BQUOTE_COLOR \\$1
-. \}
-. if '\\$0'CITE_COLOR' \{\
-. nr #BQUOTE_COLOR 1
-. ds $BQUOTE_COLOR \\$1
-. \}
-. if '\\$0'CHAPTER_TITLE_COLOR' \{\
-. nr #CHAPTER_TITLE_COLOR 1
-. ds $CHAPTER_TITLE_COLOR \\$1
-. \}
-. if '\\$0'COVER_ATTRIBUTE_COLOR' \{\
-. nr #COVER_ATTRIBUTE_COLOR 1
-. ds $COVER_ATTRIBUTE_COLOR \\$1
-. \}
-. if '\\$0'COVER_AUTHOR_COLOR' \{\
-. nr #COVER_AUTHOR_COLOR 1
-. ds $COVER_AUTHOR_COLOR \\$1
-. \}
-. if '\\$0'COVER_CHAPTER_TITLE_COLOR' \{\
-. nr #COVER_CHAPTER_TITLE_COLOR 1
-. ds $COVER_CHAPTER_TITLE_COLOR \\$1
-. \}
-. if '\\$0'COVER_COLOR' \{\
-. nr #COVER_COLOR 1
-. ds $COVER_COLOR \\$1
-. \}
-. if '\\$0'COVER_COPYRIGHT_COLOR' \{\
-. nr #COVER_COPYRIGHT_COLOR 1
-. ds $COVER_COPYRIGHT_COLOR \\$1
-. \}
-. if '\\$0'COVER_MISC_COLOR' \{\
-. nr #COVER_MISC_COLOR 1
-. ds $COVER_MISC_COLOR \\$1
-. \}
-. if '\\$0'COVER_TITLE_COLOR' \{\
-. nr #COVER_TITLE_COLOR 1
-. ds $COVER_TITLE_COLOR \\$1
-. \}
-. if '\\$0'COVER_SUBTITLE_COLOR' \{\
-. nr #COVER_SUBTITLE_COLOR 1
-. ds $COVER_SUBTITLE_COLOR \\$1
-. \}
-. if '\\$0'COVER_DOCTYPE_COLOR' \{\
-. nr #COVER_DOCTYPE_COLOR 1
-. ds $COVER_DOCTYPE_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_ATTRIBUTE_COLOR' \{\
-. nr #DOC_COVER_ATTRIBUTE_COLOR 1
-. ds $DOC_COVER_ATTRIBUTE_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_AUTHOR_COLOR' \{\
-. nr #DOC_COVER_AUTHOR_COLOR 1
-. ds $DOC_COVER_AUTHOR_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_CHAPTER_TITLE_COLOR' \{\
-. nr #DOC_COVER_CHAPTER_TITLE_COLOR 1
-. ds $DOC_COVER_CHAPTER_TITLE_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_COLOR' \{\
-. nr #DOC_COVER_COLOR 1
-. ds $DOC_COVER_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_COPYRIGHT_COLOR' \{\
-. nr #DOC_COVER_COPYRIGHT_COLOR 1
-. ds $DOC_COVER_COPYRIGHT_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_MISC_COLOR' \{\
-. nr #DOC_COVER_MISC_COLOR 1
-. ds $DOC_COVER_MISC_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_TITLE_COLOR' \{\
-. nr #DOC_COVER_TITLE_COLOR 1
-. ds $DOC_COVER_TITLE_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_SUBTITLE_COLOR' \{\
-. nr #DOC_COVER_SUBTITLE_COLOR 1
-. ds $DOC_COVER_SUBTITLE_COLOR \\$1
-. \}
-. if '\\$0'DOC_COVER_DOCTYPE_COLOR' \{\
-. nr #DOC_COVER_DOCTYPE_COLOR 1
-. ds $DOC_COVER_DOCTYPE_COLOR \\$1
-. \}
-. if '\\$0'DOCHEADER_COLOR' \{\
-. nr #DOCHEADER_COLOR 1
-. ds $DOCHEADER_COLOR \\$1
-. \}
-. if '\\$0'DOCTYPE_COLOR' \{\
-. nr #DOCTYPE_COLOR 1
-. ds $DOCTYPE_COLOR \\$1
-. \}
-. if '\\$0'EPIGRAPH_COLOR' \{\
-. nr #EPI_COLOR 1
-. ds $EPI_COLOR \\$1
-. \}
-. if '\\$0'FINIS_COLOR' \{\
-. nr #FINIS_COLOR 1
-. ds $FINIS_COLOR \\$1
-. \}
-. if '\\$0'FOOTNOTE_COLOR' \{\
-. nr #FOOTNOTE_COLOR 1
-. ds $FOOTNOTE_COLOR \\$1
-. \}
-. if '\\$0'HDRFTR_CENTER_COLOR' \{\
-. nr #HDRFTR_CENTER_COLOR 1
-. ds $HDRFTR_CENTER_COLOR \\$1
-. \}
-. if '\\$0'HDRFTR_COLOR' \{\
-. nr #HDRFTR_COLOR 1
-. ds $HDRFTR_COLOR \\$1
-. \}
-. if '\\$0'HDRFTR_LEFT_COLOR' \{\
-. nr #HDRFTR_LEFT_COLOR 1
-. ds $HDRFTR_LEFT_COLOR \\$1
-. \}
-. if '\\$0'HDRFTR_RIGHT_COLOR' \{\
-. nr #HDRFTR_RIGHT_COLOR 1
-. ds $HDRFTR_RIGHT_COLOR \\$1
-. \}
-. if '\\$0'HDRFTR_RULE_COLOR' \{\
-. nr #HDRFTR_RULE_COLOR 1
-. ds $HDRFTR_RULE_COLOR \\$1
-. \}
-. if '\\$0'HEAD_COLOR' \{\
-. nr #HEAD_COLOR 1
-. ds $HEAD_COLOR \\$1
-. \}
-. if '\\$0'LINEBREAK_COLOR' \{\
-. nr #LINEBREAK_COLOR 1
-. ds $LINEBREAK_COLOR \\$1
-. \}
-. if '\\$0'PAGENUM_COLOR' \{\
-. nr #PAGE_NUM_COLOR 1
-. ds $PAGENUM_COLOR \\$1
-. \}
-. if '\\$0'PARAHEAD_COLOR' \{\
-. nr #PH_COLOR 1
-. ds $PH_COLOR \\$1
-. \}
-. if '\\$0'QUOTE_COLOR' \{\
-. nr #QUOTE_COLOR 1
-. ds $QUOTE_COLOR \\$1
-. \}
-. if '\\$0'SUBHEAD_COLOR' \{\
-. nr #SH_COLOR 1
-. ds $SH_COLOR \\$1
-. \}
-. if '\\$0'SUBTITLE_COLOR' \{\
-. nr #SUBTITLE_COLOR 1
-. ds $SUBTITLE_COLOR \\$1
-. \}
-. if '\\$0'TITLE_COLOR' \{\
-. nr #TITLE_COLOR 1
-. ds $TITLE_COLOR \\$1
-. \}
-.END
-\#
-\#
-.MAC _QUAD END
-. if '\\$0'BIBLIOGRAPHY_QUAD' \{\
-. ds $BIB_QUAD \\$1
-. if '\\*[$BIB_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
-. if '\\*[$BIB_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
-. \}
-. if '\\$0'BIBLIOGRAPHY_STRING_QUAD' .ds $BIB_STRING_QUAD \\$1
-. if '\\$0'BLOCKQUOTE_QUAD' .ds $BQUOTE_QUAD \\$1
-. if '\\$0'CITATION_QUAD' .ds $BQUOTE_QUAD \\$1
-. if '\\$0'CITE_QUAD' .ds $BQUOTE_QUAD \\$1
-. if '\\$0'COVER_COPYRIGHT_QUAD' .ds $COVER_COPYRIGHT_QUAD \\$1
-. if '\\$0'COVER_MISC_QUAD' .ds $COVER_MISC_QUAD \\$1
-. if '\\$0'DOC_COVER_COPYRIGHT_QUAD' .ds $DOC_COVER_COPYRIGHT_QUAD \\$1
-. if '\\$0'DOC_COVER_MISC_QUAD' .ds $DOC_COVER_MISC_QUAD \\$1
-. if '\\$0'DOC_QUAD' \{\
-. ds $DOC_QUAD \\$1
-. QUAD \\*[$DOC_QUAD]
-. \}
-. if '\\$0'ENDNOTE_QUAD' \{\
-. ds $EN_QUAD \\$1
-. if '\\*[$EN_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
-. if '\\*[$EN_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
-. \}
-. if '\\$0'ENDNOTE_STRING_QUAD' .ds $EN_STRING_QUAD \\$1
-. if '\\$0'ENDNOTE_TITLE_QUAD' .ds $EN_TITLE_QUAD \\$1
-. if '\\$0'EPIGRAPH_QUAD' .ds $EPI_QUAD \\$1
-. if '\\$0'FOOTNOTE_QUAD' .ds $FN_QUAD \\$1
-. if '\\$0'HEAD_QUAD' .ds $HEAD_QUAD \\$1
-. if '\\$0'SUBHEAD_QUAD' .ds $SH_QUAD \\$1
-. if '\\$0'TOC_HEADER_QUAD' .ds $TOC_HEADER_QUAD \\$1
-.END
-\#
-\#
-\# DEFAULTS
-\# --------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Sets up defaults if no values are entered prior to START.
-\# *Notes:
-\# The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
-\# $REVISION_STRING are in the COPYSTYLE macro.
-\#
-.MAC DEFAULTS END
-. if !d$PAPER \{ .PAPER LETTER \}
-. if !\\n[#DOC_TYPE] \{ .DOCTYPE DEFAULT \}
-. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
-. el \{\
-. if !\\n[#COPY_STYLE]=1 \{ .PAGENUM_STYLE DIGIT \}
-. \}
-. if !\\n[#COPY_STYLE] \{ .COPYSTYLE FINAL \}
-. if \\n[#DRAFT_WITH_PAGENUM] \{ .COPYSTYLE \\*[$COPY_STYLE] \}
-. if \\n[#DOC_TYPE]=4 \{\
-. if !\\n[#USER_SET_L_LENGTH] \{\
-. R_MARGIN \\n[#R_MARGIN]u
-. rr #USER_SET_L_LENGTH
-. \}
-. if \\n[#PRINT_STYLE]=1 \{ .PRINTSTYLE TYPEWRITE SINGLESPACE \}
-. \}
-. if \\n[#COPY_STYLE]=1 \{\
-. COPYSTYLE DRAFT
-. PAGENUMBER 1
-. \}
-. if !r#DOC_HEADER \{ .DOCHEADER \}
-. if !r#HEADERS_ON \{ .HEADERS \}
-. if !r#PAGINATE \{ .PAGINATE \}
-. if \\n[#FOOTERS_ON] \{\
-. HEADERS OFF
-. if \\n[#PAGE_NUM_POS_SET]=0 \{ .PAGENUM_POS TOP CENTER \}
-. \}
-. if !r#HEADER_MARGIN \{ .HEADER_MARGIN 4P+6p \}
-. if !r#HEADER_GAP \{ .HEADER_GAP 3P \}
-. if \\n[#FOOTERS_ON] \{\
-. if \\n[#PAGINATE]=0 \{\
-. if !r#T_MARGIN \{ .T_MARGIN 6P \}
-. \}
-. \}
-. if \\n[#HEADERS_ON]=0 \{\
-. if \\n[#FOOTERS_ON]=0 \{\
-. if !r#T_MARGIN \{ .T_MARGIN 6P \}
-. \}
-. \}
-. if !r#T_MARGIN \{ .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] \}
-. if !r#DOCHEADER_ADVANCE \{ .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN] \}
-. if !r#FOOTER_MARGIN \{ .FOOTER_MARGIN 3P \}
-. if !r#FOOTER_GAP \{ .FOOTER_GAP 3P \}
-. if !r#B_MARGIN \{ .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u \}
-. if (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
-. tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
-. tm1 " No footers or bottom-of-page page numbers will be printed.
-. tm1 " Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
-. tm1 " If no footers or bottom-of-page page numbers are required,
-. tm1 " type in .FOOTER_MARGIN 0 before .START
-. \}
-. if !r#HDRFTR_RULE_GAP \{\
-. if \\n[#HEADERS_ON] \{ .HDRFTR_RULE_GAP 4p \}
-. if \\n[#FOOTERS_ON] \{ .HDRFTR_RULE_GAP 4p \}
-. \}
-. if !r#HDRFTR_RULE \{ .HDRFTR_RULE \}
-. if !r#PAGE_NUM_SET \{ .PAGENUMBER 1 \}
-.\" Read in number registers and strings for type parameters
-. nr #DOC_L_MARGIN \\n[#L_MARGIN]
-. nr #DOC_L_LENGTH \\n[#L_LENGTH]
-. nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
-. ds $DOC_FAM \\*[$FAMILY]
-. nr #DOC_PT_SIZE \\n[#PT_SIZE]
-. nr #DOC_LEAD \\n[#LEAD]
-.\" #SAVED_DOC_LEAD is set in COLLATE
-. if r#SAVED_DOC_LEAD \{\
-. if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] \{ .nr #RERUN_TRAPS 1 \}
-. \}
-. ie \\n[#ADJ_DOC_LEAD]=1 \{ . \}
-. el \{\
-. if !\\n[#DOC_LEAD_ADJUST_OFF] \{\
-. DOC_LEAD_ADJUST
-. \}
-. \}
-. ds $DOC_QUAD \\*[$QUAD_VALUE]
-. ds $PP_FT \\*[$FONT]
-.\" Counters
-. nr #PP 0
-. nr #FN_NUMBER 0 1
-. nr #EN_NUMBER 0 1
-. nr #FN_COUNT_FOR_COLS 0 1
-. nr #DONE_ONCE 0 1
-. RESET_HEAD_NUMBER
-. RESET_SUBHEAD_NUMBER
-. RESET_PARAHEAD_NUMBER
-.\" General style defaults for both PRINTSTYLEs
-. nr #PP_STYLE 1
-. PARA_INDENT \\n[#PP_INDENT]u
-. if !d$HDRFTR_FAM \{ .HDRFTR_FAMILY \\*[$DOC_FAM] \}
-. if !d$HDRFTR_SIZE_CHANGE \{ .HDRFTR_SIZE +0 \}
-. if !d$PAGE_NUM_FAM \{ .PAGENUM_FAMILY \\*[$DOC_FAM] \}
-. if !d$PAGE_NUM_FT \{ .PAGENUM_FONT R \}
-. if !d$PAGE_NUM_SIZE_CHANGE \{ .PAGENUM_SIZE +0 \}
-. if !r#PAGE_NUM_POS_SET \{ .PAGENUM_POS BOTTOM CENTER \}
-. ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
-. if \\n[#PAGE_NUM_HYPHENS]=0 \{ .PAGENUM_HYPHENS OFF \}
-. if \\n[#PAGE_NUM_HYPHENS]=1 \{ .PAGENUM_HYPHENS \}
-. \}
-. el \{ .PAGENUM_HYPHENS \}
-. if !d$HEAD_QUAD \{ .HEAD_QUAD CENTER \}
-. if !r#HEAD_CAPS \{ .HEAD_CAPS \}
-. if !r#HEAD_UNDERLINE \{ .HEAD_UNDERLINE \}
-. if !d$SH_QUAD \{ .SUBHEAD_QUAD LEFT \}
-. if !r#HDRFTR_RIGHT_CAPS \{ .HDRFTR_RIGHT_CAPS \}
-. if \\n[#HDRFTR_RIGHT_CAPS]=0 \{\
-. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE +0 \}
-. \}
-. if !d$FN_FAM \{ .FOOTNOTE_FAMILY \\*[$DOC_FAM] \}
-. if !d$FN_FT \{ .FOOTNOTE_FONT R \}
-. if !d$FN_QUAD \{ .FOOTNOTE_QUAD \\*[$DOC_QUAD] \}
-. if !r#FN_RULE \{ .FOOTNOTE_RULE \}
-. if !r#FN_MARKERS \{ .FOOTNOTE_MARKERS \}
-. if !\\n[#FN_MARKER_STYLE] \{ .FOOTNOTE_MARKER_STYLE STAR \}
-. if !\\n[#EN_MARKER_STYLE] \{ .ENDNOTE_MARKER_STYLE NUMBER \}
-. if !d$EN_PN_STYLE \{ .ENDNOTES_PAGENUM_STYLE digit \}
-. if !d$EN_FAM \{ .ENDNOTE_FAMILY \\*[$DOC_FAM] \}
-. if !d$EN_FT \{ .ENDNOTE_FONT R \}
-. if !d$EN_QUAD \{ .ENDNOTE_QUAD \\*[$DOC_QUAD] \}
-. if !d$EN_STRING \{ .ENDNOTE_STRING "Endnotes" \}
-. if !d$EN_STRING_FAM \{ .ENDNOTE_STRING_FAMILY \\*[$EN_FAM] \}
-. if !d$EN_STRING_QUAD \{ .ENDNOTE_STRING_QUAD CENTER \}
-. if !r#EN_STRING_UNDERSCORE \{ .ENDNOTE_STRING_UNDERSCORE 2 \}
-. if !r#EN_STRING_CAPS \{ .ENDNOTE_STRING_CAPS \}
-. if !d$EN_TITLE \{\
-. ie \\n[#DOC_TYPE]=2 \{\
-. ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \}
-. el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" \}
-. \}
-. el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \}
-. \}
-. if !d$EN_TITLE_FAM \{ .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM] \}
-. if !d$EN_TITLE_QUAD \{ .ENDNOTE_TITLE_QUAD LEFT \}
-. if !r#EN_TITLE_UNDERSCORE \{ .ENDNOTE_TITLE_UNDERSCORE \}
-. if !d$EN_NUMBER_FAM \{ .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM] \}
-. if !r#EN_NUMBERS_ALIGN_LEFT \{\
-. if !r#EN_NUMBERS_ALIGN_RIGHT \{ .ENDNOTE_NUMBERS_ALIGN_RIGHT 2 \}
-. \}
-. if !d$EN_LN_GAP \{ .ENDNOTE_LINENUMBER_GAP 1.5n \}
-. if !d$BIB_PN_STYLE \{ .BIBLIOGRAPHY_PAGENUM_STYLE digit \}
-. if !d$BIB_FAM \{ .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM] \}
-. if !d$BIB_FT \{ .BIBLIOGRAPHY_FONT R \}
-. if !d$BIB_QUAD \{ .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD] \}
-. if !d$BIB_STRING \{ .BIBLIOGRAPHY_STRING "Bibliography" \}
-. if !d$BIB_STRING_FAM \{ .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM] \}
-. if !d$BIB_STRING_QUAD \{ .BIBLIOGRAPHY_STRING_QUAD CENTER \}
-. if !r#BIB_STRING_UNDERSCORE \{ .BIBLIOGRAPHY_STRING_UNDERSCORE 2 \}
-. if !r#BIB_STRING_CAPS \{ .BIBLIOGRAPHY_STRING_CAPS \}
-. if !d$TOC_HEADER_STRING \{ .TOC_HEADER_STRING "Contents" \}
-. if !d$TOC_HEADER_QUAD \{ .TOC_HEADER_QUAD LEFT \}
-. if !d$TOC_PN_STYLE \{ .TOC_PAGENUM_STYLE roman \}
-. if !r#TOC_PN_PADDING \{ .TOC_PADDING 3 \}
-. if !r#TOC_TITLE_INDENT \{ .TOC_TITLE_INDENT 0 \}
-. if !r#TOC_HEAD_INDENT \{ .TOC_HEAD_INDENT 18p \}
-. if !r#TOC_SH_INDENT \{ .TOC_SUBHEAD_INDENT 30p \}
-. if !r#TOC_PH_INDENT \{ .TOC_PARAHEAD_INDENT 42p \}
-.\" String defaults for both PRINTSTYLEs
-. ie \\n[#DOC_TYPE]=1 \{\
-. ie '\\*[$DOC_TITLE]'' \{\
-. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-. rr #USER_DEF_HDRFTR_LEFT
-. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
-. rr #USER_DEF_HDRFTR_RIGHT
-. \}
-. el \{\
-. if \\n[#COPY_STYLE]=1 \{ .DRAFT_WITH_PAGENUMBER \}
-. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-. rr #USER_DEF_HDRFTR_LEFT
-. if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
-. rr #USER_DEF_HDRFTR_CENTER
-. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$DOC_TITLE]
-. rr #USER_DEF_HDRFTR_RIGHT
-. \}
-. \}
-. el \{\
-. if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-. rr #USER_DEF_HDRFTR_LEFT
-. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
-. rr #USER_DEF_HDRFTR_RIGHT
-. \}
-. if !d$ATTRIBUTE_STRING \{ .ATTRIBUTE_STRING "by" \}
-. if !d$FINIS_STRING \{ .FINIS_STRING "END" \}
-.\" Covers
-. if !r#DOC_COVERS_OFF \{ .nr #DOC_COVERS 1 \}
-. if !r#COVERS_OFF \{ .nr #COVERS 1 \}
-. if !d$COVER_COPYRIGHT_QUAD \{ .COVER_COPYRIGHT_QUAD R \}
-. if !d$COVER_MISC_QUAD \{ .COVER_MISC_QUAD L \}
-. if !d$DOC_COVER_COPYRIGHT_QUAD \{ .DOC_COVER_COPYRIGHT_QUAD R \}
-. if !d$DOC_COVER_MISC_QUAD \{ .DOC_COVER_MISC_QUAD L \}
-.\" Defaults for printstyle TYPEWRITE
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES \}
-. if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF \}
-.\" +Quotes and blockquotes
-. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 2 \}
-.\" +Epigraphs
-. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 2 \}
-.\" +Linebreaks
-. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 2p \}
-.\" +Footnotes
-. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE +0 \}
-. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 2i \}
-.\" +Paragraph heads
-. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
-.\" +Endnotes
-. if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT \\n[#PP_INDENT] \}
-.\" +Footnotes
-. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 6p \}
-.\" +Slant stuff
-. if !r#SLANT_MEANS_SLANT \{\
-. ie \\n[#UNDERLINE_SLANT]=1 \{ .UNDERLINE_SLANT \}
-. el \{ .UNDERLINE_SLANT OFF \}
-. \}
-. \}
-.\" Defaults for printstyle TYPESET
-. if \\n[#PRINT_STYLE]=2 \{\
-. if !d$DOCHEADER_LEAD_ADJ \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. ie !'\\*[$CHAPTER_STRING]'' \{\
-. DOCHEADER_LEAD +4
-. \}
-. el \{ .DOCHEADER_LEAD +0 \}
-. \}
-. el \{ .DOCHEADER_LEAD +0 \}
-. \}
-.\" +Cover
-. if !d$COVER_LEAD_ADJ \{ .COVER_LEAD +0 \}
-. if !d$COVER_FAM \{ .COVER_FAMILY \\*[$DOC_FAM] \}
-.\" (title)
-. if !d$COVER_TITLE_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_TITLE_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_TITLE_FT \{ .COVER_TITLE_FONT B \}
-. if !d$COVER_TITLE_SIZE_CHANGE \{ .COVER_TITLE_SIZE +3.5 \}
-.\" (chapter title)
-. if !d$COVER_CHAPTER_TITLE_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_CHAPTER_TITLE_FT \{ .COVER_CHAPTER_TITLE_FONT BI \}
-. if !d$COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .COVER_CHAPTER_TITLE_SIZE +4 \}
-.\" (subtitle)
-. if !d$COVER_SUBTITLE_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_SUBTITLE_FT \{ .COVER_SUBTITLE_FONT R \}
-. if !d$COVER_SUBTITLE_SIZE_CHANGE \{ .COVER_SUBTITLE_SIZE +0 \}
-.\" (attribution and author[s])
-. if !d$COVER_AUTHOR_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_AUTHOR_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_AUTHOR_FT \{ .COVER_AUTHOR_FONT I \}
-. if !d$COVER_AUTHOR_SIZE_CHANGE \{ .COVER_AUTHOR_SIZE +0 \}
-.\" (doctype if "named")
-. if !d$COVER_DOCTYPE_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_DOCTYPE_FT \{ .COVER_DOCTYPE_FONT BI \}
-. if !d$COVER_DOCTYPE_SIZE_CHANGE \{ .COVER_DOCTYPE_SIZE +3 \}
-.\" (copyright)
-. if !d$COVER_COPYRIGHT_FAM \{\
-. ie !d$COVER_FAM \{ .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
-. el \{ .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM] \}
-. \}
-. if !d$COVER_COPYRIGHT_FT \{ .COVER_COPYRIGHT_FONT R \}
-. if !d$COVER_COPYRIGHT_SIZE_CHANGE \{ .COVER_COPYRIGHT_SIZE -2 \}
-.\" +Doc cover
-. if !d$DOC_COVER_LEAD_ADJ \{ .DOC_COVER_LEAD +0 \}
-. if !d$DOC_COVER_FAM \{ .DOC_COVER_FAMILY \\*[$DOC_FAM] \}
-.\" (title)
-. if !d$DOC_COVER_TITLE_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_TITLE_FT \{ .DOC_COVER_TITLE_FONT B \}
-. if !d$DOC_COVER_TITLE_SIZE_CHANGE \{ .DOC_COVER_TITLE_SIZE +3.5 \}
-.\" (chapter title)
-. if !d$DOC_COVER_CHAPTER_TITLE_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_CHAPTER_TITLE_FT \{ .DOC_COVER_CHAPTER_TITLE_FONT BI \}
-. if !d$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .DOC_COVER_CHAPTER_TITLE_SIZE +4 \}
-.\" (subtitle)
-. if !d$DOC_COVER_SUBTITLE_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_SUBTITLE_FT \{ .DOC_COVER_SUBTITLE_FONT R \}
-. if !d$DOC_COVER_SUBTITLE_SIZE_CHANGE \{ .DOC_COVER_SUBTITLE_SIZE +0 \}
-.\" (attribution and author[s])
-. if !d$DOC_COVER_AUTHOR_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_AUTHOR_FT \{ .DOC_COVER_AUTHOR_FONT I \}
-. if !d$DOC_COVER_AUTHOR_SIZE_CHANGE \{ .DOC_COVER_AUTHOR_SIZE +0 \}
-.\" (doctype if "named")
-. if !d$DOC_COVER_DOCTYPE_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_DOCTYPE_FT \{ .DOC_COVER_DOCTYPE_FONT BI \}
-. if !d$DOC_COVER_DOCTYPE_SIZE_CHANGE \{ .DOC_COVER_DOCTYPE_SIZE +3 \}
-.\" (copyright)
-. if !d$DOC_COVER_COPYRIGHT_FAM \{\
-. ie !d$DOC_COVER_FAM \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM] \}
-. \}
-. if !d$DOC_COVER_COPYRIGHT_FT \{ .DOC_COVER_COPYRIGHT_FONT R \}
-. if !d$DOC_COVER_COPYRIGHT_SIZE_CHANGE \{ .DOC_COVER_COPYRIGHT_SIZE -2 \}
-.\" +Docheader
-. if !d$DOCHEADER_FAM \{ .DOCHEADER_FAMILY \\*[$DOC_FAM] \}
-. if !d$TITLE_FAM \{\
-. ie !d$DOCHEADER_FAM \{ .TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
-. \}
-. if !d$TITLE_FT \{ .TITLE_FONT B \}
-. if !d$TITLE_SIZE_CHANGE \{\
-. ie \\n[#DOC_TYPE]=2 \{ .TITLE_SIZE +4 \}
-. el \{ .TITLE_SIZE +3.5 \}
-. \}
-. if !d$CHAPTER_TITLE_FAM \{\
-. ie !d$DOCHEADER_FAM \{ .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
-. \}
-. if !d$CHAPTER_TITLE_FT \{ .CHAPTER_TITLE_FONT BI \}
-. if !d$CHAPTER_TITLE_SIZE_CHANGE \{ .CHAPTER_TITLE_SIZE +4 \}
-. if !d$SUBTITLE_FAM \{\
-. ie !d$DOCHEADER_FAM \{ .SUBTITLE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM] \}
-. \}
-. if !d$SUBTITLE_FT \{ .SUBTITLE_FONT R \}
-. if !d$SUBTITLE_SIZE_CHANGE \{ .SUBTITLE_SIZE +0 \}
-. if !d$AUTHOR_FAM \{\
-. ie !d$DOCHEADER_FAM \{ .AUTHOR_FAMILY \\*[$DOC_FAM] \}
-. el \{ .AUTHOR_FAMILY \\*[$DOCHEADER_FAM] \}
-. \}
-. if !d$AUTHOR_FT \{ .AUTHOR_FONT I \}
-. if !d$AUTHOR_SIZE_CHANGE \{ .AUTHOR_SIZE +0 \}
-. if !d$DOCTYPE_FAM \{\
-. ie !d$DOCHEADER_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM] \}
-. el \{ .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM] \}
-. \}
-. if !d$DOCTYPE_FT \{ .DOCTYPE_FONT BI \}
-. if !d$DOCTYPE_SIZE_CHANGE \{ .DOCTYPE_SIZE +3 \}
-.\" +Headers and footers
-. if !d$HDRFTR_LEFT_FAM \{ .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] \}
-. if !d$HDRFTR_LEFT_FT \{ .HDRFTR_LEFT_FONT R \}
-. if \\n[#HDRFTR_LEFT_CAPS] \{\
-. if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE -2 \}
-. \}
-. if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE -.5 \}
-. if !d$HDRFTR_CENTER_FAM \{ .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] \}
-. if !d$HDRFTR_CENTER_FT \{ .HDRFTR_CENTER_FONT I \}
-. if \\n[#HDRFTR_CENTER_CAPS] \{\
-. if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -2 \}
-. \}
-. if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -.5 \}
-. if !d$HDRFTR_RIGHT_FAM \{ .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] \}
-. if !d$HDRFTR_RIGHT_FT \{ .HDRFTR_RIGHT_FONT R \}
-. if \\n[#HDRFTR_RIGHT_CAPS] \{\
-. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -2 \}
-. \}
-. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -.5 \}
-.\" +Heads
-. if !d$HEAD_FAM \{ .HEAD_FAMILY \\*[$DOC_FAM] \}
-. if !d$HEAD_FT \{ .HEAD_FONT B \}
-. if !d$HEAD_SIZE_CHANGE \{ .HEAD_SIZE +1 \}
-. if !r#HEAD_SPACE \{ .HEAD_SPACE \}
-.\" +Subheads
-. if !d$SH_FAM \{ .SUBHEAD_FAMILY \\*[$DOC_FAM] \}
-. if !d$SH_FT \{ .SUBHEAD_FONT B \}
-. if !d$SH_SIZE_CHANGE \{ .SUBHEAD_SIZE +.5 \}
-.\" +Paragraph heads
-. if !d$PH_FAM \{ .PARAHEAD_FAMILY \\*[$DOC_FAM] \}
-. if !d$PH_FT \{ .PARAHEAD_FONT BI \}
-. if !d$PH_SIZE_CHANGE \{ .PARAHEAD_SIZE -.25 \}
-. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
-.\" +Quotes
-. if !d$QUOTE_FAM \{ .QUOTE_FAMILY \\*[$DOC_FAM] \}
-. if !d$QUOTE_FT \{ .QUOTE_FONT I \}
-. if !d$QUOTE_SIZE_CHANGE \{ .QUOTE_SIZE +0 \}
-. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 3 \}
-.\" +Blockquotes
-.\" Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
-. if !d$BQUOTE_FAM \{ .BLOCKQUOTE_FAMILY \\*[$DOC_FAM] \}
-. if !d$BQUOTE_FT \{ .BLOCKQUOTE_FONT R \}
-. if !d$BQUOTE_SIZE_CHANGE \{ .BLOCKQUOTE_SIZE -1 \}
-. if !d$BQUOTE_QUAD \{ .BLOCKQUOTE_QUAD LEFT \}
-.\" +Epigraphs
-. if !d$EPI_FAM \{ .EPIGRAPH_FAMILY \\*[$DOC_FAM] \}
-. if !d$EPI_FT \{ .EPIGRAPH_FONT R \}
-. if !d$EPI_SIZE_CHANGE \{ .EPIGRAPH_SIZE -1.5 \}
-. if !r#EPI_AUTOLEAD \{ .EPIGRAPH_AUTOLEAD 2 \}
-. if !d$EPI_QUAD \{ .EPIGRAPH_QUAD \\*[$DOC_QUAD] \}
-. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 3 \}
-.\" +Linebreaks
-. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 3p \}
-.\" +Footnotes
-. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 4P \}
-. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 3p \}
-. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE -2 \}
-. if !r#FN_AUTOLEAD \{ .FOOTNOTE_AUTOLEAD 2 \}
-.\" +Endnotes
-. if !r#EN_PS \{ .ENDNOTE_PT_SIZE \\n[#DOC_PT_SIZE]u \}
-. if !d$EN_STRING_FT \{ .ENDNOTE_STRING_FONT B \}
-. if !d$EN_STRING_SIZE_CHANGE \{ .ENDNOTE_STRING_SIZE +1 \}
-. if !d$EN_TITLE_FT \{ .ENDNOTE_TITLE_FONT B \}
-. if !d$EN_TITLE_SIZE_CHANGE \{ .ENDNOTE_TITLE_SIZE +0 \}
-. if !d$EN_NUMBER_FT \{ .ENDNOTE_NUMBER_FONT B \}
-. if !d$EN_NUMBER_SIZE_CHANGE \{ .ENDNOTE_NUMBER_SIZE +0 \}
-. if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT 1.5m \}
-.\" +Bibliography
-. if !r#BIB_LIST \{ .BIBLIOGRAPHY_TYPE LIST . \}
-. if !r#BIB_PS \{ .BIBLIOGRAPHY_PT_SIZE \\n[#DOC_PT_SIZE]u \}
-. if !d$BIB_STRING_FT \{ .BIBLIOGRAPHY_STRING_FONT B \}
-. if !d$BIB_STRING_SIZE_CHANGE \{ .BIBLIOGRAPHY_STRING_SIZE +1 \}
-.\" +Table of contents
-. if !d$TOC_FAM \{ .TOC_FAMILY \\*[$DOC_FAM] \}
-. if !r#TOC_PS \{ .TOC_PT_SIZE \\n[#DOC_PT_SIZE]u \}
-. if !r#TOC_LEAD \{ .TOC_LEAD \\n[#DOC_LEAD]u ADJUST \}
-. if !d$TOC_HEADER_FAM \{ .TOC_HEADER_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_HEADER_SIZE_CHANGE \{ .TOC_HEADER_SIZE +4 \}
-. if !d$TOC_HEADER_FT \{ .TOC_HEADER_FONT B \}
-. if !d$TOC_TITLE_FAM \{ .TOC_TITLE_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_PN_FAM \{ .TOC_PN_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_HEAD_FAM \{ .TOC_HEAD_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_SH_FAM \{ .TOC_SUBHEAD_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_PH_FAM \{ .TOC_PARAHEAD_FAMILY \\*[$TOC_FAM] \}
-. if !d$TOC_TITLE_FT \{ .TOC_TITLE_FONT BI \}
-. if !d$TOC_PN_FT \{ .TOC_PN_FONT R \}
-. if !d$TOC_HEAD_FT \{ .TOC_HEAD_FONT B \}
-. if !d$TOC_SH_FT \{ .TOC_SUBHEAD_FONT R \}
-. if !d$TOC_PH_FT \{ .TOC_PARAHEAD_FONT I \}
-. if !d$TOC_TITLE_SIZE_CHANGE \{ .TOC_TITLE_SIZE +.5 \}
-. if !d$TOC_PN_SIZE_CHANGE \{ .TOC_PN_SIZE +0 \}
-. if !d$TOC_HEAD_SIZE_CHANGE \{ .TOC_HEAD_SIZE +.5 \}
-. if !d$TOC_SH_SIZE_CHANGE \{ .TOC_SUBHEAD_SIZE +0 \}
-. if !d$TOC_PH_SIZE_CHANGE \{ .TOC_PARAHEAD_SIZE +0 \}
-. \}
-.\" +Refer support
-. if !r#ENDNOTE_REFS \{ .nr #FN_REFS 1 \}
-. if '\\*[$REF_FN_INDENT]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS FOOTNOTE 2m \}
-. if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS FOOTNOTE 1.5m \}
-. \}
-. if '\\*[$REF_EN_INDENT]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS ENDNOTE 2m \}
-. if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS ENDNOTE 1.5m \}
-. \}
-. if '\\*[$REF_BIB_INDENT]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS BIBLIO 2m \}
-. if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS BIBLIO 1.5m :\}
-. \}
-.\" Adjust doc leading for PRINTSTYLE TYPESET
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#ADJ_DOC_LEAD]=1 \{ .DOC_LEAD_ADJUST \}
-. el \{ . \}
-. \}
-.\" This diversion is to get a value for #FN_AUTOLEAD
-. di NULL
-. ev NULL
-. if \\n[#PRINT_STYLE]=1 \{\
-. ps 12
-. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
-. el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
-. AUTOLEAD \\n[#FN_AUTOLEAD]
-. \}
-. nr #FN_LEAD \\n[#LEAD]
-. if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u \}
-. ev
-. di
-. ie !\\n[#COLLATE] \{\
-.\" DOC_LEAD adjusted (or not) here
-. TRAPS
-. rr #DOC_LEAD_ADJUST_OFF
-.\" Endnote, bibliography and toc leading
-. nr #OK_PROCESS_LEAD 1
-. nr #RESTORE_DOC_LEAD \\n(.v
-. nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{\
-. ENDNOTE_LEAD 12 ADJUST
-. BIBLIOGRAPHY_LEAD 12 ADJUST
-. \}
-. el \{\
-. ie \\n[#EN_SINGLESPACE] \{ .ENDNOTE_LEAD 12 ADJUST \}
-. el \{ .ENDNOTE_LEAD 24 ADJUST \}
-. ie \\n[#BIB_SINGLESPACE] \{ .BIBLIOGRAPHY_LEAD 12 ADJUST \}
-. el \{ .BIBLIOGRAPHY_LEAD 24 ADJUST \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie !d$EN_LEAD \{ .ENDNOTE_LEAD 14 ADJUST \}
-. el \{ .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD] \}
-. ie !d$BIB_LEAD \{ .BIBLIOGRAPHY_LEAD 14 ADJUST \}
-. el \{ .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD] \}
-. ie !d$TOC_LEAD \{ .TOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
-. el \{ .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD] \}
-. rm $ADJUST_EN_LEAD
-. rm $ADJUST_BIB_LEAD
-. rm $ADJUST_TOC_LEAD
-. \}
-. ie !d$BIB_SPACE \{ .BIBLIOGRAPHY_SPACING 1v \}
-. el \{\
-. if \\n[#DEFER_BIB_SPACING]=1 \{\
-. BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
-. rr #DEFER_BIB_SPACING
-. \}
-. \}
-. DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-. nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
-. \}
-. el \{\
-. if \\n[#COLLATE] \{\
-. if !\\n[#PRINT_STYLE]=1 \{\
-. if \\n[#RERUN_TRAPS] \{ .TRAPS \}
-. \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{ .nr #IGNORE 1 \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++START THE DOCUMENT+++
-\#
-\# THE START MACRO
-\# ---------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Reads in default document style parameters and any parameter
-\# the user has changed before issuing START.
-\# Using the information gathered in the opening macros,
-\# prints appropriate title (or chapter #), subtitle, author
-\# and document type (if appropriate).
-\# *Notes:
-\# The .PRINT \& (zero-width character) is required to get the
-\# subsequent .sp request to work as advertised.
-\#
-\# The overall document line length, family, and point-size
-\# are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
-\# use in the HEADER and FOOTER macros.
-\#
-\# First, define some strings for point sizes
-\#
-\# Doc cover
-.ds $DOC_COVER_AUTHOR_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_AUTHOR_SIZE_CHANGE]
-.ds $DOC_COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $DOC_COVER_COPYRIGHT_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $DOC_COVER_DOCTYPE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_DOCTYPE_SIZE_CHANGE]
-.ds $DOC_COVER_SUBTITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_SUBTITLE_SIZE_CHANGE]
-.ds $DOC_COVER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_TITLE_SIZE_CHANGE]
-\# Cover
-.ds $COVER_AUTHOR_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_AUTHOR_SIZE_CHANGE]
-.ds $COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COVER_COPYRIGHT_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $COVER_DOCTYPE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_DOCTYPE_SIZE_CHANGE]
-.ds $COVER_SUBTITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_SUBTITLE_SIZE_CHANGE]
-.ds $COVER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_TITLE_SIZE_CHANGE]
-\# Docheader
-.ds $AUTHOR_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
-.ds $CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COPYRIGHT_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COPYRIGHT_SIZE_CHANGE]
-.ds $DOCTYPE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
-.ds $SUBTITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
-.ds $TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
-\#
-\# Next, some utility macros for various routines to prevent repetition
-\#
-.MAC PRINT_AUTHORS END
-. nr #AUTHORS \\n[#AUTHOR_NUM]
-. nr #NEXT_AUTHOR 0 1
-. ie r#DOING_COVER \{\
-. if \\n[#COVER]=1 \{\
-. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-. ie \\n[#COVER_AUTHOR_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-. \}
-. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
-.\}
-. \}
-. if \\n[#DOC_COVER]=1 \{\
-. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-. ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-. \}
-. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
-.\}
-. \}
-. \}
-. el \{\
-. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-. ie \\n[#AUTHOR_COLOR]=1 \{\
-. PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-. \}
-. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
-.\}
-. \}
-.END
-\#
-.MAC DEFAULT_DOCHEADER END
-. CENTER
-. FAMILY \\*[$TITLE_FAM]
-. FT \\*[$TITLE_FT]
-. PT_SIZE \\*[$TITLE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-. ie \\n[#TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$TITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$TITLE] \}
-. if !'\\*[$SUBTITLE]'' \{\
-. FAMILY \\*[$SUBTITLE_FAM]
-. FT \\*[$SUBTITLE_FT]
-. PT_SIZE \\*[$SUBTITLE_PT_SIZE]
-. ie \\n[#SUBTITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$SUBTITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$SUBTITLE] \}
-. \}
-. if !'\\*[$AUTHOR_1]'' \{\
-. FAMILY \\*[$AUTHOR_FAM]
-. FT \\*[$AUTHOR_FT]
-. PT_SIZE \\*[$AUTHOR_PT_SIZE]
-. if !'\\*[$ATTRIBUTE_STRING]'' \{\
-. ie \\n[#ATTRIBUTE_COLOR]=1 \{\
-. PRINT \m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-. \}
-. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \}
-. \}
-. PRINT_AUTHORS
-. \}
-.END
-\#
-\#
-.MAC CHAPTER_DOCHEADER END
-. CENTER
-. FAMILY \\*[$TITLE_FAM]
-. FT \\*[$TITLE_FT]
-. PT_SIZE \\*[$TITLE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-.\" Chapter title only
-. ie '\\*[$CHAPTER]'' \{\
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$CHAPTER_TITLE_FAM]
-. FT \\*[$CHAPTER_TITLE_FT]
-. PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-. \}
-. ie \\n[#TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. \}
-. el \{\
-. ie \\n[#TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \}
-. \}
-. \}
-.\" Chapter string, possibly with a chapter title
-. el \{\
-. ie \\n[#TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
-. if !'\\*[$CHAPTER_TITLE]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$CHAPTER_TITLE_FAM]
-. FT \\*[$CHAPTER_TITLE_FT]
-. PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-. ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. RLD \\n[#DOC_LEAD]u \" Just looks better this way
-. \}
-. \}
-. \}
-.END
-\#
-\#
-.MAC NAMED_DOCHEADER END
-. CENTER
-. FAMILY \\*[$TITLE_FAM]
-. FT \\*[$TITLE_FT]
-. PT_SIZE \\*[$TITLE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-. ie \\n[#TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$TITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$TITLE] \}
-. if !'\\*[$SUBTITLE]'' \{\
-. FAMILY \\*[$SUBTITLE_FAM]
-. FT \\*[$SUBTITLE_FT]
-. PT_SIZE \\*[$SUBTITLE_PT_SIZE]
-. ie \\n[#SUBTITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$SUBTITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$SUBTITLE] \}
-. \}
-. if !'\\*[$AUTHOR_1]'' \{\
-. FAMILY \\*[$AUTHOR_FAM]
-. FT \\*[$AUTHOR_FT]
-. PT_SIZE \\*[$AUTHOR_PT_SIZE]
-. if !'\\*[$ATTRIBUTE_STRING]'' \{\
-. ie \\n[#ATTRIBUTE_COLOR]=1 \{\
-. PRINT \m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-. \}
-. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \}
-. \}
-. PRINT_AUTHORS
-. \}
-. FAMILY \\*[$DOCTYPE_FAM]
-. FT \\*[$DOCTYPE_FT]
-. PT_SIZE \\*[$DOCTYPE_PT_SIZE]
-. LS \\n[#DOCHEADER_LEAD]u
-. ALD \\n[#DOCHEADER_LEAD]u
-. ie \\n[#DOCTYPE_COLOR]=1 \{\
-. COLOR \\*[$DOCTYPE_COLOR]
-. UNDERSCORE "\\*[$DOC_TYPE]
-. \}
-. el .UNDERSCORE "\\*[$DOC_TYPE]
-.END
-\#
-\#
-\# COVER PAGE
-\# ----------
-\# *Arguments:
-\# TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE ...
-\# ... [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC ]
-\# *Function:
-\# Toggles the number register for each cover page element
-\# passed as an argument.
-\# *Notes:
-\# TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must
-\# be supplied. After that, users may enter as many or as few of
-\# the arguments as they like; however, the arguments must appear
-\# in the order given above.
-\#
-\# If called as DOC_COVER, performs the same operations, but
-\# applies everything to a doc cover.
-\#
-.MAC COVER END
-. ie '\\$0'DOC_COVER' \{\
-. nr #DOC_COVER 1
-. if '\\$1'TITLE' \{ .nr #DOC_COVER_TITLE 1 \}
-. if '\\$1'DOCTITLE' \{ .nr #DOC_COVER_TITLE 2 \}
-. if '\\$1'CHAPTER' \{ .nr #DOC_COVER_TITLE 3 \}
-. if '\\$1'CHAPTER_TITLE' \{ .nr #DOC_COVER_TITLE 4 \}
-. if '\\$1'CHAPTER+TITLE' \{ .nr #DOC_COVER_TITLE 5 \}
-. if '\\$1'COVERTITLE' \{ .nr #DOC_COVER_TITLE 6 \}
-. if '\\$2'SUBTITLE' \{ .nr #DOC_COVER_SUBTITLE 1 \}
-. if '\\$2'AUTHOR' \{ .nr #DOC_COVER_AUTHOR 1 \}
-. if '\\$2'DOCTYPE' \{ .nr #DOC_COVER_DOCTYPE 1 \}
-. if '\\$2'COPYRIGHT' \{ .nr #DOC_COVER_COPYRIGHT 1 \}
-. if '\\$2'MISC' \{ .nr #DOC_COVER_MISC 1 \}
-. if '\\$3'AUTHOR' \{ .nr #DOC_COVER_AUTHOR 1 \}
-. if '\\$3'DOCTYPE' \{ .nr #DOC_COVER_DOCTYPE 1 \}
-. if '\\$3'COPYRIGHT' \{ .nr #DOC_COVER_COPYRIGHT 1 \}
-. if '\\$3'MISC' \{ .nr #DOC_COVER_MISC 1 \}
-. if '\\$4'DOCTYPE' \{ .nr #DOC_COVER_DOCTYPE 1 \}
-. if '\\$4'COPYRIGHT' \{ .nr #DOC_COVER_COPYRIGHT 1 \}
-. if '\\$4'MISC' \{ .nr #DOC_COVER_MISC 1 \}
-. if '\\$5'COPYRIGHT' \{ .nr #DOC_COVER_COPYRIGHT 1 \}
-. if '\\$5'MISC' \{ .nr #DOC_COVER_MISC 1 \}
-. if '\\$6'MISC' \{ .nr #DOC_COVER_MISC 1 \}
-. \}
-. el \{\
-. nr #COVER 1
-. if '\\$1'TITLE' \{ .nr #COVER_TITLE 1 \}
-. if '\\$1'DOCTITLE' \{ .nr #COVER_TITLE 2 \}
-. if '\\$1'CHAPTER' \{ .nr #COVER_TITLE 3 \}
-. if '\\$1'CHAPTER_TITLE' \{ .nr #COVER_TITLE 4 \}
-. if '\\$1'CHAPTER+TITLE' \{ .nr #COVER_TITLE 5 \}
-. if '\\$1'COVERTITLE' \{ .nr #COVER_TITLE 6 \}
-. if '\\$2'SUBTITLE' \{ .nr #COVER_SUBTITLE 1 \}
-. if '\\$2'AUTHOR' \{ .nr #COVER_AUTHOR 1 \}
-. if '\\$2'DOCTYPE' \{ .nr #COVER_DOCTYPE 1 \}
-. if '\\$2'COPYRIGHT' \{ .nr #COVER_COPYRIGHT 1 \}
-. if '\\$2'MISC' \{ .nr #COVER_MISC 1 \}
-. if '\\$3'AUTHOR' \{ .nr #COVER_AUTHOR 1 \}
-. if '\\$3'DOCTYPE' \{ .nr #COVER_DOCTYPE 1 \}
-. if '\\$3'COPYRIGHT' \{ .nr #COVER_COPYRIGHT 1 \}
-. if '\\$3'MISC' \{ .nr #COVER_MISC 1 \}
-. if '\\$4'DOCTYPE' \{ .nr #COVER_DOCTYPE 1 \}
-. if '\\$4'COPYRIGHT' \{ .nr #COVER_COPYRIGHT 1 \}
-. if '\\$4'MISC' \{ .nr #COVER_MISC 1 \}
-. if '\\$5'COPYRIGHT' \{ .nr #COVER_COPYRIGHT 1 \}
-. if '\\$5'MISC' \{ .nr #COVER_MISC 1 \}
-. if '\\$6'MISC' \{ .nr #COVER_MISC 1 \}
-. \}
-.END
-\#
-\#
-.MAC COVERTITLE END
-. ie '\\$0'DOC_COVERTITLE' .ds $DOC_COVER_TITLE \\$1
-. el .ds $COVER_TITLE \\$1
-.END
-\#
-\#
-\# COVER PAGE LEADING
-\# ------------------
-\# *Arguments:
-\# <+|- amount by which to in/decrease leading of cover/doc cover>
-\# *Function:
-\# Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ
-\# or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called
-\# with an alias (DOC_COVER_LEAD).
-\# *Notes:
-\# A unit of measure must be supplied. Decimal fractions OK.
-\# Default is +0, i.e. same as DOC_LEAD.
-\#
-.MAC COVER_LEAD END
-. ie '\\$0'DOC_COVER_LEAD' \{\
-. ds $DOC_COVER_LEAD_ADJ \\$1
-. \}
-. el \{\
-. ds $COVER_LEAD_ADJ \\$1
-. \}
-.END
-\#
-\#
-\# COVER PAGE START POSITION
-\# -------------------------
-\# *Arguments:
-\# <distance from page top at which to start cover/doc cover>
-\# *Function:
-\# Stores user supplied lead in/decrease in #COVER_START_POS
-\# or #DOC_COVER_START_POS, depending on whether the macro was
-\# called by an alias (DOC_COVER_ADVANCE).
-\# *Notes:
-\# A unit of measure must be supplied. Decimal fractions OK.
-\# If user doesn't invoke this macro, the default starting
-\# position for both covers and doc covers is 1/3 of the way
-\# down the page (setup in DO_COVER).
-\#
-.MAC COVER_ADVANCE END
-. ie '\\$0'DOC_COVER_ADVANCE' \{\
-. nr #DOC_COVER_START_POS (\\$1)
-. \}
-. el \{\
-. nr #COVER_START_POS (\\$1)
-. \}
-.END
-\#
-\#
-\# COVERS - WHETHER TO PRINT
-\# -------------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or removes registers #COVERS and #COVERS_OFF, checked for
-\# in DEFAULTS (in START) prior to printing
-\#
-.MAC COVERS END
-. ie '\\$0'DOC_COVERS' \{\
-. ie '\\$1'' \{\
-. rr #DOC_COVERS_OFF
-. nr #DOC_COVERS 1
-. \}
-. el \{\
-. rr #DOC_COVERS
-. nr #DOC_COVERS_OFF 1
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{\
-. rr #COVERS_OFF
-. nr #COVERS 1
-. \}
-. el \{\
-. rr #COVERS
-. nr #COVERS_OFF 1
-. \}
-. \}
-.END
-\#
-\#
-.MAC DO_COVER END
-. nr #DOING_COVER 1
-. ev COVER
-. evc 0
-. TRAP OFF
-. if \\n[#PAGINATE]=1 \{\
-. nr #PAGINATION_WAS_ON 1
-. rr #PAGINATE
-. \}
-. if \\n[#HEADERS_ON]=1 \{\
-. nr #HEADERS_WERE_ON 1
-. HEADERS OFF
-. \}
-. if \\n[#FOOTERS_ON]=1 \{\
-. nr #FOOTERS_WERE_ON 1
-. FOOTERS OFF
-. \}
-. if \\n[#COLUMNS]=1 \{\
-. nr #COLUMNS_WERE_ON 1
-. rr #COLUMNS
-. \}
-.\" Doc cover
-. ie '\\$0'DO_DOC_COVER' \{\
-. if !r#DOC_COVER_START_POS \{\
-. nr #DOC_COVER_START_POS \\n[#PAGE_LENGTH]/3
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. LS \\n[#DOC_LEAD]u\\*[$DOC_COVER_LEAD_ADJ]
-. nr #DOC_COVER_LEAD \\n[#LEAD]
-. \}
-. PRINT \&
-. sp |\\n[#DOC_COVER_START_POS]u-1v
-. if \\n[#DOC_COVER_COLOR]=1 \{\
-. nf
-\m[\\*[$DOC_COVER_COLOR]]
-. EOL
-. \}
-. CENTER
-. FAMILY \\*[$DOC_COVER_TITLE_FAM]
-. FT \\*[$DOC_COVER_TITLE_FT]
-. PT_SIZE \\*[$DOC_COVER_TITLE_PT_SIZE]
-. LS \\n[#DOC_COVER_LEAD]u
-. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
-. if \\n[#DOC_COVER_TITLE]=1 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$TITLE] \}
-. \}
-. \}
-. if \\n[#DOC_COVER_TITLE]=2 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$DOC_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$DOC_TITLE] \}
-. \}
-. \}
-. if \\n[#DOC_COVER_TITLE]=3 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
-. \}
-. \}
-. if \\n[#DOC_COVER_TITLE]=4 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$CHAPTER_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. \}
-. \}
-. if \\n[#DOC_COVER_TITLE]=5 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
-. \}
-. if !'\\*[$CHAPTER_TITLE]'' \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. UNDERSCORE "\\*[$CHAPTER_TITLE]"
-. \}
-. el \{\
-. FAMILY \\*[$DOC_COVER_CHAPTER_TITLE_FAM]
-. FT \\*[$DOC_COVER_CHAPTER_TITLE_FT]
-. PT_SIZE \\*[$DOC_COVER_CHAPTER_TITLE_PT_SIZE]
-. ie \\n[#DOC_COVER_CHAPTER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. \}
-. \}
-. \}
-. if \\n[#DOC_COVER_TITLE]=6 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$DOC_COVER_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_COVER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$DOC_COVER_TITLE] \}
-. \}
-. \}
-. if \\n[#DOC_COVER_SUBTITLE]=1 \{\
-. FAMILY \\*[$DOC_COVER_SUBTITLE_FAM]
-. FT \\*[$DOC_COVER_SUBTITLE_FT]
-. PT_SIZE \\*[$DOC_COVER_SUBTITLE_PT_SIZE]
-. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
-. ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$SUBTITLE] \}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !r#DOC_COVER_SUBTITLE \{ .SP \}
-. \}
-. if \\n[#DOC_COVER_AUTHOR]=1 \{\
-. FAMILY \\*[$DOC_COVER_AUTHOR_FAM]
-. FT \\*[$DOC_COVER_AUTHOR_FT]
-. PT_SIZE \\*[$DOC_COVER_AUTHOR_PT_SIZE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u/2u
-. \}
-. if !'\\*[$ATTRIBUTE_STRING]'' \{\
-. ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-. \}
-. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \}
-. \}
-. PRINT_AUTHORS
-. \}
-. FAMILY \\*[$DOC_COVER_DOCTYPE_FAM]
-. FT \\*[$DOC_COVER_DOCTYPE_FT]
-. PT_SIZE \\*[$DOC_COVER_DOCTYPE_PT_SIZE]
-. SP
-. if \\n[#DOC_COVER_DOCTYPE]=1 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. UNDERSCORE2 "\\*[$DOC_TYPE]
-. \}
-. el \{\
-. ie \\n[#DOC_COVER_DOCTYPE_COLOR]=1 \{\
-. COLOR \\*[$DOC_COVER_DOCTYPE_COLOR]
-. UNDERSCORE "\\*[$DOC_TYPE]
-. \}
-. el .UNDERSCORE "\\*[$DOC_TYPE]
-. \}
-. \}
-. sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
-. ie \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. \}
-. el \{\
-. FAMILY \\*[$DOC_COVER_COPYRIGHT_FAM]
-. FT \\*[$DOC_COVER_COPYRIGHT_FT]
-. AUTOLEAD 2
-. PT_SIZE \\*[$DOC_COVER_COPYRIGHT_PT_SIZE]
-. \}
-. if \\n[#DOC_COVER_COPYRIGHT]=1 \{\
-. QUAD \\*[$DOC_COVER_COPYRIGHT_QUAD]
-. ie \\n[#DOC_COVER_COPYRIGHT_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
-. \}
-. el \{ .PRINT \\*[$COPYRIGHT] \}
-. \}
-. sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
-. if \\n[#DOC_COVER_MISC]=1 \{\
-. QUAD \\*[$DOC_COVER_MISC_QUAD]
-. nr #MISCS \\n[#MISC_NUM]
-. sp -\\n[#MISCS]+1
-. nr #NEXT_MISC 0 1
-. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
-. ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\
-. PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
-. br
-. \}
-. el \{\
-. PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
-. br
-. \}
-.\}
-. \}
-. \}
-.\" Cover
-. el \{\
-. if !r#COVER_START_POS \{\
-. nr #COVER_START_POS \\n[#PAGE_LENGTH]/3
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. LS \\n[#DOC_LEAD]u\\*[$COVER_LEAD_ADJ]
-. nr #COVER_LEAD \\n[#LEAD]
-. \}
-. PRINT \&
-. sp |\\n[#COVER_START_POS]u-1v
-. if \\n[#COVER_COLOR]=1 \{\
-. nf
-\m[\\*[$COVER_COLOR]]
-. EOL
-. \}
-. CENTER
-. FAMILY \\*[$COVER_TITLE_FAM]
-. FT \\*[$COVER_TITLE_FT]
-. PT_SIZE \\*[$COVER_TITLE_PT_SIZE]
-. LS \\n[#COVER_LEAD]u
-. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
-. if \\n[#COVER_TITLE]=1 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$TITLE] \}
-. \}
-. \}
-. if \\n[#COVER_TITLE]=2 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$DOC_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$DOC_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$DOC_TITLE] \}
-. \}
-. \}
-. if \\n[#COVER_TITLE]=3 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
-. \}
-. \}
-. if \\n[#COVER_TITLE]=4 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$CHAPTER_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. \}
-. \}
-. if \\n[#COVER_TITLE]=5 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
-. \}
-. if !'\\*[$CHAPTER_TITLE]'' \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. UNDERSCORE "\\*[$CHAPTER_TITLE]"
-. \}
-. el \{\
-. FAMILY \\*[$COVER_CHAPTER_TITLE_FAM]
-. FT \\*[$COVER_CHAPTER_TITLE_FT]
-. PT_SIZE \\*[$COVER_CHAPTER_TITLE_PT_SIZE]
-. ie \\n[#COVER_CHAPTER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$CHAPTER_TITLE] \}
-. \}
-. \}
-. \}
-. if \\n[#COVER_TITLE]=6 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERSCORE "\\*[$COVER_TITLE]"
-. CAPS OFF
-. \}
-. el \{\
-. ie \\n[#COVER_TITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$COVER_TITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$COVER_TITLE] \}
-. \}
-. \}
-. if \\n[#COVER_SUBTITLE]=1 \{\
-. FAMILY \\*[$COVER_SUBTITLE_FAM]
-. FT \\*[$COVER_SUBTITLE_FT]
-. PT_SIZE \\*[$COVER_SUBTITLE_PT_SIZE]
-. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
-. ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE]\m[]
-. \}
-. el \{ .PRINT \\*[$SUBTITLE] \}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !r#COVER_SUBTITLE \{ .SP \}
-. \}
-. if \\n[#COVER_AUTHOR]=1 \{\
-. FAMILY \\*[$COVER_AUTHOR_FAM]
-. FT \\*[$COVER_AUTHOR_FT]
-. PT_SIZE \\*[$COVER_AUTHOR_PT_SIZE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u/2u
-. \}
-. if !'\\*[$ATTRIBUTE_STRING]'' \{\
-. ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-. \}
-. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \}
-. \}
-. PRINT_AUTHORS
-. \}
-. FAMILY \\*[$COVER_DOCTYPE_FAM]
-. FT \\*[$COVER_DOCTYPE_FT]
-. PT_SIZE \\*[$COVER_DOCTYPE_PT_SIZE]
-. SP
-. if \\n[#COVER_DOCTYPE]=1 \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. UNDERSCORE2 "\\*[$DOC_TYPE]
-. \}
-. el \{\
-. ie \\n[#COVER_DOCTYPE_COLOR]=1 \{\
-. COLOR \\*[$COVER_DOCTYPE_COLOR]
-. UNDERSCORE "\\*[$DOC_TYPE]
-. \}
-. el .UNDERSCORE "\\*[$DOC_TYPE]
-. \}
-. \}
-. sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
-. ie \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. \}
-. el \{\
-. FAMILY \\*[$COVER_COPYRIGHT_FAM]
-. FT \\*[$COVER_COPYRIGHT_FT]
-. AUTOLEAD 2
-. PT_SIZE \\*[$COVER_COPYRIGHT_PT_SIZE]
-. \}
-. if \\n[#COVER_COPYRIGHT]=1 \{\
-. QUAD \\*[$COVER_COPYRIGHT_QUAD]
-. ie \\n[#COVER_COPYRIGHT_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
-. \}
-. el \{ .PRINT \\*[$COPYRIGHT] \}
-. \}
-. sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
-. if \\n[#COVER_MISC]=1 \{\
-. QUAD \\*[$COVER_MISC_QUAD]
-. nr #MISCS \\n[#MISC_NUM]
-. sp -\\n[#MISCS]+1
-. nr #NEXT_MISC 0 1
-. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
-. ie \\n[#COVER_MISC_COLOR]=1 \{\
-. PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
-. br
-. \}
-. el \{\
-. PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
-. br
-. \}
-.\}
-. \}
-. \}
-. EOL
-. TRAP
-. NEWPAGE
-. ev
-. if \\n[#PAGINATION_WAS_ON] \{\
-. rr #PAGINATION_WAS_ON
-. PAGINATE
-. PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1
-. \}
-. if \\n[#HEADERS_WERE_ON] \{\
-. rr #HEADERS_WERE_ON
-. HEADERS
-. \}
-. if \\n[#FOOTERS_WERE_ON] \{\
-. rr #FOOTERS_WERE_ON
-. FOOTERS
-. \}
-. if \\n[#COLUMNS_WERE_ON]=1 \{\
-. rr #COLUMNS_WERE_ON 1
-. nr #COLUMNS 1
-. \}
-. rr #DOING_COVER
-.END
-\#
-\#
-.MAC START END
-. if !\\n[#PRINT_STYLE] \{\
-. PRINTSTYLE TYPEWRITE
-. PRINT \&
-. po 6P
-. ll 39P
-. ta \\n(.lu
-. sp |1i-1v
-. CENTER
-. PRINT "You neglected to enter a PRINTSTYLE"
-. fl
-. ab PRINTSTYLE missing
-. \}
-. nr #DOCS 1
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if \\n[#COLLATE] \{\
-. COPYSTYLE \\*[$COPY_STYLE]
-. nr #HEADERS_ON \\n[#HEADER_STATE]
-. if \\n[#PAGE_NUM_V_POS]=1 \{ .nr #PAGINATE \\n[#PAGINATION_STATE] \}
-. sp |\\n[#HEADER_MARGIN]u
-. PRINT \&
-. if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
-. PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
-. rm $RESTORE_PAGENUM_STYLE
-. \}
-. \}
-. DEFAULTS
-.\" Quote and blockquote default leads are the same as #DOC_LEAD, so
-.\" they have to be set after DEFAULTS (where DOC_LEAD is finalized)
-. if !r#Q_AUTOLEAD \{ .nr #Q_LEAD \\n[#DOC_LEAD] \}
-. if !r#BQ_AUTOLEAD \{ .nr #BQ_LEAD \\n[#DOC_LEAD] \}
-. if !r#EN_Q_AUTOLEAD \{ .nr #EN_Q_LEAD \\n[#EN_LEAD] \}
-. if !r#EN_BQ_AUTOLEAD \{ .nr #EN_BQ_LEAD \\n[#EN_LEAD] \}
-.\" Covers and doc covers
-. if \\n[#DOC_COVERS]=1 \{\
-. if \\n[#DOC_COVER]=1 \{\
-. DO_DOC_COVER
-. rr #DOC_COVER
-. rr #DOC_COVER_TITLE
-. rr #DOC_COVER_SUBTITLE
-. rr #DOC_COVER_AUTHOR
-. rr #DOC_COVER_DOCTYPE
-. rr #DOC_COVER_COPYRIGHT
-. rr #DOC_COVER_MISC
-. \}
-. \}
-. if \\n[#COVERS]=1 \{\
-. if \\n[#COVER]=1 \{\
-. DO_COVER
-. rr #COVER
-. rr #COVER_TITLE
-. rr #COVER_SUBTITLE
-. rr #COVER_AUTHOR
-. rr #COVER_DOCTYPE
-. rr #COVER_COPYRIGHT
-. rr #COVER_MISC
-. \}
-. \}
-.\" Collate related stuff
-. ie \\n[#COLLATED_DOC]=1 \{\
-.\" Collect TITLE for TOC.
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-. ie \\n[#USER_SET_TITLE_ITEM] \{\
-. ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM]\\|
-. rr #USER_SET_TITLE_ITEM
-. rm $USER_SET_TITLE_ITEM
-. \}
-. el \{\
-. ie \\n[#DOC_TYPE]=2 \{\
-. ie '\\*[$CHAPTER_TITLE]'' \{\
-. ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
-. \}
-. el \{\
-. ie '\\*[$CHAPTER]'' \{\
-. ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE]\\|
-. \}
-. el \{\
-. ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
-. \}
-. \}
-. \}
-. el \{\
-. ds $TOC_TITLE_ITEM \\*[$TITLE]\\|
-. \}
-. \}
-. if \\n[#TOC_AUTHORS]=1 \{\
-. ie '\\*[$TOC_AUTHORS]'' \{\
-. as $TOC_TITLE_ITEM /\\|\\*[$AUTHOR_1]\\|
-. \}
-. el \{\
-. as $TOC_TITLE_ITEM /\\|\\*[$TOC_AUTHORS]\\|
-. rm $TOC_AUTHORS
-. \}
-. \}
-.\" Note the use of \!, which transparently embeds the macros used
-.\" in the TOC_ENTRIES diversion. The elements they control must be
-.\" processed literally when the diversion is output.
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-\!. fam C
-\!. ft R
-\!. ps 12
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_TITLE_FAM]
-\!. FT \\*[$TOC_TITLE_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-. \}
-. el \{\
-. nr #FIRST_DOC_TITLE_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. af #FIRST_DOC_TITLE_PN \\g[#PAGENUMBER]
-. nr #FIRST_DOC_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
-. \}
-.\" End TITLE collection
-. if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
-. sp |\\n[#HEADER_MARGIN]u
-. PRINT_PAGE_NUMBER
-. \}
-. rr #COLLATE
-. rr #PAGINATION_STATE
-.\" End collate stuff
-. ie \\n[#DOC_HEADER]=0 \{\
-. PRINT \&
-. if \\n[#DOC_TYPE]=4 \{\
-. if !'\\n(.z'' \{ .di \}
-. \}
-. nr #STORED_PP_INDENT \\n[#PP_INDENT]
-. PARA_INDENT 0
-. PP
-. PARA_INDENT \\n[#STORED_PP_INDENT]u
-. rr #STORED_PP_INDENT
-. ie r#ADVANCE_FROM_TOP \{\
-. sp |\\n[#ADVANCE_FROM_TOP]u-1v
-. if \\n[#ADJ_DOC_LEAD]=1 \{ .SHIM \}
-. \}
-. el \{ .sp |\\n[#T_MARGIN]u-1v \}
-. if \\n[#COLUMNS] \{\
-. mk dc
-. nr #COL_NUM 0 1
-. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. ll \\n[#COL_L_LENGTH]u
-. \}
-. nr #PP 0
-. rr #DOC_HEADER
-. if r#ADVANCE_FROM_TOP \{ .rr #ADVANCE_FROM_TOP \}
-. \}
-. el \{\
-. if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] \}
-. nr #DOCHEADER_LEAD \\n[#LEAD]
-.\" Default
-. if \\n[#DOC_TYPE]=1 \{\
-. PRINT \&
-. sp |\\n[#DOCHEADER_ADVANCE]u-1v
-. ev DOCHEADER
-. if \\n[#DOCHEADER_COLOR]=1 \{\
-. nf
-\m[\\*[$DOCHEADER_COLOR]]
-. EOL
-. \}
-. L_MARGIN \\n[#DOC_L_MARGIN]u
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#PRINT_STYLE]=1 \{\
-. CENTER
-. TYPEWRITER
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. CAPS
-. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\}
-. CAPS OFF
-. if !'\\*[$SUBTITLE]'' \{\
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. PRINT \\*[$SUBTITLE]
-. \}
-. if '\\*[$SUBTITLE]'' \{\
-. ALD \\n[#DOC_LEAD]u
-. \}
-. ie !'\\*[$AUTHOR_1]'' \{\
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. if !d$SUBTITLE \{\
-. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u*2u \}
-. \}
-. PRINT \\*[$ATTRIBUTE_STRING]
-. nr #AUTHORS \\n[#AUTHOR_NUM]
-. nr #NEXT_AUTHOR 0 1
-. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.\}
-. if \\n[#AUTHOR_LINES]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u/2u \}
-. \}
-. \}
-. el \{\
-. ie !d$SUBTITLE \{\
-. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \}
-. el \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. el \{\
-. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. DEFAULT_DOCHEADER
-. di DOCHEADER_DIVERSION \" This diversion is only
-. br \" necessary to find the depth of the
-. DEFAULT_DOCHEADER \" docheader
-. br
-. di
-. nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \"Storing the depth (height) of the diversion
-. \"in #DOCHEADER_DEPTH
-. rm DOCHEADER_DIVERSION \" Removing the diversion macro
-. \}
-. ev
-. \}
-.\" Chapter
-. if \\n[#DOC_TYPE]=2 \{\
-. PRINT \&
-. sp |\\n[#DOCHEADER_ADVANCE]u-1v
-. ev DOCHEADER
-. if \\n[#DOCHEADER_COLOR]=1 \{\
-. nf
-\m[\\*[$DOCHEADER_COLOR]]
-. EOL
-. \}
-. L_MARGIN \\n[#DOC_L_MARGIN]u
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#PRINT_STYLE]=1 \{\
-. CENTER
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. ie '\\*[$CHAPTER]'' \{\
-. CAPS
-. ie !'\\*[$CHAPTER_TITLE]'' \{\
-. PRINT \\*[$CHAPTER_TITLE]
-. \}
-. el \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING]
-. \}
-. CAPS OFF
-. \}
-. el \{\
-. CAPS
-. PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-. CAPS OFF
-. if !'\\*[$CHAPTER_TITLE]'' \{\
-. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. UNDERSCORE "\\*[$CHAPTER_TITLE]
-. \}
-. \}
-. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. CHAPTER_DOCHEADER
-. di DOCHEADER_DIVERSION \" This diversion is only
-. br \" necessary to find the depth of the
-. CHAPTER_DOCHEADER \" docheader
-. br
-. di
-. nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \" Storing the depth (height) of the diversion
-. \" in #DOCHEADER_DEPTH
-. rm DOCHEADER_DIVERSION \" Removing the diversion macro
-. \}
-. ev
-. \}
-.\" Named
-. if \\n[#DOC_TYPE]=3 \{\
-. PRINT \&
-. sp |\\n[#DOCHEADER_ADVANCE]u-1v
-. ev DOCHEADER
-. if \\n[#DOCHEADER_COLOR]=1 \{\
-. nf
-\m[\\*[$DOCHEADER_COLOR]]
-. EOL
-. \}
-. L_MARGIN \\n[#DOC_L_MARGIN]u
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#PRINT_STYLE]=1 \{\
-. CENTER
-. TYPEWRITER
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. CAPS
-. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\}
-. CAPS OFF
-. if !'\\*[$SUBTITLE]'' \{\
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. PRINT \\*[$SUBTITLE]
-. \}
-. if '\\*[$SUBTITLE]'' \{\
-. ALD \\n[#DOC_LEAD]u
-. \}
-. ie !'\\*[$AUTHOR_1]'' \{\
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. if !d$SUBTITLE \{\
-. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u*2u \}
-. \}
-. PRINT \\*[$ATTRIBUTE_STRING]
-. nr #AUTHORS \\n[#AUTHOR_NUM]
-. nr #NEXT_AUTHOR 0 1
-. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.\}
-. if \\n[#AUTHOR_LINES]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u/2u \}
-. \}
-. vs \\n[#DOC_LEAD]u
-. \}
-. el \{\
-. ie !d$SUBTITLE \{\
-. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \}
-. el \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. el \{\
-. ie \\n[#SINGLE_SPACE] \{ . \}
-. el \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. UNDERSCORE2 "\\*[$DOC_TYPE]
-. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. NAMED_DOCHEADER
-. di DOCHEADER_DIVERSION \" This diversion is only
-. br \" necessary to find the depth of the
-. NAMED_DOCHEADER \" docheader
-. br
-. di
-. nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \"Storing the depth (height) of the diversion
-. \"in #DOCHEADER_DEPTH
-. rm DOCHEADER_DIVERSION \" Removing the diversion macro
-. \}
-. ev
-. \}
-. if !\\n[#DOC_TYPE]=4 \{\
-. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
-. nr #DOCHEADER_SPACE_ADJ \\n[#DOCHEADER_DEPTH]%\\n[#DOC_LEAD]
-. ie !\\n[#DOCHEADER_SPACE_ADJ]=0 \{ .nr #DOCHEADER_EXTRA_SPACE \\n[#DOC_LEAD]-\\n[#DOCHEADER_SPACE_ADJ] \}
-. el \{ .nr #DOCHEADER_EXTRA_SPACE 0 \}
-. if \\n[#PRINT_STYLE]=2 \{ .ALD (\\n[#DOC_LEAD]u*2u)+\\n[#DOCHEADER_EXTRA_SPACE]u \}
-. if \\n[#COLUMNS] \{\
-. nr #COL_NUM 0 1
-. nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
-. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. LL \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. mk dc
-. \}
-. \}
-. \}
-. LS \\n[#DOC_LEAD]u
-. if \\n[#ADJ_DOC_LEAD]=1 \{ .SHIM \}
-. QUAD \\*[$DOC_QUAD]
-. CLEANUP_DEFAULTS
-. nr #START_FOR_FOOTERS 1
-. if \\n[#COLLATED_DOC]=1 \{\
-. if !\\n[MNinit_DEFERRED]=1 \{\
-. MN_INIT rerun
-. \}
-. \}
-. if \\n[#MNinit_DEFERRED]=1 \{\
-. rr #MNinit_DEFERRED
-. nr #START_FOR_MNinit 1
-. MN_INIT \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
-. \}
-. nr #START_FOR_MNinit 2
-. if !\\n[#DOC_TYPE]=4 \{ .em TERMINATE \}
-. if \\n[#LINENUMBERS]=2 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. \}
-. if \\n[#RUN_ON]=1 \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
-. if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
-. \}
-.END
-\#
-.MAC CLEANUP_DEFAULTS END
-. nr #START 1
-.\" Family strings for docheader
-. rm $AUTHOR_FAM
-. rm $CHAPTER_TITLE_FAM
-. rm $DOCTYPE_FAM
-. rm $SUBTITLE_FAM
-. rm $TITLE_FAM
-.\" Family strings for cover
-. rm $COVER_AUTHOR_FAM
-. rm $COVER_CHAPTER_TITLE_FAM
-. rm $COVER_COPYRIGHT_FAM
-. rm $COVER_DOCTYPE_FAM
-. rm $COVER_LEAD_ADJ
-. rm $COVER_SUBTITLE_FAM
-. rm $COVER_TITLE_FAM
-.\" Family strings for doc cover
-. rm $DOC_COVER_AUTHOR_FAM
-. rm $DOC_COVER_CHAPTER_TITLE_FAM
-. rm $DOC_COVER_COPYRIGHT_FAM
-. rm $DOC_COVER_DOCTYPE_FAM
-. rm $DOC_COVER_LEAD_ADJ
-. rm $DOC_COVER_SUBTITLE_FAM
-. rm $DOC_COVER_TITLE_FAM
-.\" Quad args to copyright and misc
-. rm $COVER_COPYRIGHT_QUAD
-. rm $COVER_MISC_QUAD
-. rm $DOC_COVER_COPYRIGHT_QUAD
-. rm $DOC_COVER_MISC_QUAD
-.\" Miscellaneous strings
-. rm $TOC_TITLE_ITEM
-. rm $DOCHEADER_LEAD_ADJ
-.\" Various registers
-. rr #ADJ_DOC_LEAD
-. rr #ADVANCE_FROM_TOP
-. rr #AUTHOR_NUM
-. rr #AUTHORS
-. rr #COVER_LEAD
-. rr #DEPTH_1
-. rr #DEPTH_2
-. rr #DOC_COVER_LEAD
-. rr #DOCHEADER_ADVANCE
-. rr #DOCHEADER_EXTRA_SPACE
-. rr #DOCHEADER_LEAD
-. rr #DOCHEADER_SPACE_ADJ
-. rr #MISC_NUM
-. rr #MISCS
-. rr #NEXT_AUTHOR
-. rr #NEXT_MISC
-. rr #NUM_AUTHORS
-.END
-\#
-\# ====================================================================
-\#
-\# +++MACROS TO CHANGE SOME DEFAULTS+++
-\#
-\# DOCUMENT HEADER
-\# ---------------
-\# *Argument:
-\# <none> | <anything> [distance to advance from top of page]
-\# *Function:
-\# Turns printing of document header on or off. If a second argument
-\# in units of measure is given, advances that distance from the
-\# top of the page without printing the document header.
-\# *Notes:
-\# Default is on. If the 1st argument is <anything> (which turns
-\# document headers off), the optional 2nd argument may be given
-\# (with a unit of measure).
-\#
-.MAC DOCHEADER END
-. ie '\\$1'' \{ .nr #DOC_HEADER 1 \}
-. el \{\
-. if !'\\$2'' \{ .nr #ADVANCE_FROM_TOP (\\$2) \}
-. nr #DOC_HEADER 0
-. \}
-.END
-\#
-\#
-\# DOCUMENT HEADER LEADING
-\# -----------------------
-\# *Arguments:
-\# <+|- amount by which to in/decrease leading of doc header>
-\# *Function:
-\# Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ.
-\# *Notes:
-\# A unit of measure must be supplied. Decimal fractions OK.
-\# Default is +0, i.e. same as DOC_LEAD.
-\#
-.MAC DOCHEADER_LEAD END
-. ds $DOCHEADER_LEAD_ADJ \\$1
-.END
-\#
-\#
-\# DOCHEADER ADVANCE
-\# -----------------
-\# *Arguments:
-\# <docheader start position>
-\# *Function:
-\# Creates register #DOCHEADER_ADVANCE, used in START.
-\# *Notes:
-\# Unit of measure required.
-\# Default is same as T_MARGIN.
-\#
-.MAC DOCHEADER_ADVANCE END
-. nr #DOCHEADER_ADVANCE (\\$1)
-.END
-\#
-\#
-\# DOCUMENT LEFT MARGIN
-\# --------------------
-\# *Argument:
-\# <left margin of document>
-\# *Function:
-\# Creates or modifies register #DOC_L_MARGIN.
-\# *Notes:
-\# Affects EVERYTHING on the page.
-\#
-.MAC DOC_LEFT_MARGIN END
-. br
-. nr #DOC_L_MARGIN (\\$1)
-. L_MARGIN \\n[#DOC_L_MARGIN]u
-.END
-\#
-\#
-\# DOCUMENT RIGHT MARGIN
-\# ---------------------
-\# *Argument:
-\# <right margin of document>
-\# *Function:
-\# Creates or modifies register #DOC_R_MARGIN.
-\# *Notes:
-\# Affects EVERYTHING on the page.
-\#
-.MAC DOC_RIGHT_MARGIN END
-. br
-. nr #DOC_R_MARGIN (\\$1)
-. R_MARGIN \\n[#DOC_R_MARGIN]
-. nr #DOC_L_LENGTH \\n[#L_LENGTH]
-.END
-\#
-\#
-\# DOCUMENT LINE LENGTH
-\# --------------------
-\# *Argument:
-\# <line length of document>
-\# *Function:
-\# Creates or modifies string $DOC_L_LENGTH.
-\# *Notes:
-\# Affects EVERYTHING on the page.
-\#
-.MAC DOC_LINE_LENGTH END
-. br
-. nr #DOC_L_LENGTH (\\$1)
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-.END
-\#
-\#
-\# DOCUMENT FAMILY
-\# ---------------
-\# *Argument:
-\# <family of running text>
-\# *Function:
-\# Creates or modifies string $DOC_FAM.
-\# *Notes:
-\# Affects everything EXCEPT headers and footers.
-\#
-.MAC DOC_FAMILY END
-. br
-. ds $DOC_FAM \\$1
-. ds $FAMILY \\*[$DOC_FAM]
-. TITLE_FAMILY \\*[$DOC_FAM]
-. SUBTITLE_FAMILY \\*[$DOC_FAM]
-. AUTHOR_FAMILY \\*[$DOC_FAM]
-. DOCTYPE_FAMILY \\*[$DOC_FAM]
-. HEAD_FAMILY \\*[$DOC_FAM]
-. SUBHEAD_FAMILY \\*[$DOC_FAM]
-. QUOTE_FAMILY \\*[$DOC_FAM]
-. BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
-. EPIGRAPH_FAMILY \\*[$DOC_FAM]
-. HDRFTR_FAMILY \\*[$DOC_FAM]
-. FOOTNOTE_FAMILY \\*[$DOC_FAM]
-.END
-\#
-\#
-\# DOCUMENT POINT SIZE
-\# -------------------
-\# *Argument:
-\# <point size of running text>
-\# *Function:
-\# Creates or modifies register #DOC_PT_SIZE.
-\# *Notes:
-\# DOC_PT_SIZE is the basis for calculating all type sizes in
-\# a document.
-\#
-.MAC DOC_PT_SIZE END
-. if \\n[#IGNORE] \{ .return \}
-. br
-. PT_SIZE \\$1
-. nr #DOC_PT_SIZE \\n[#PT_SIZE]
-.END
-\#
-\#
-\# DOCUMENT LEAD
-\# -------------
-\# *Argument:
-\# <lead (".vs") of running text> [ADJUST]
-\# *Function:
-\# Creates or modifies register #DOC_LEAD. If the optional
-\# ADJUST argument is given, adjusts leading so that the last
-\# line of text falls exactly on #B_MARGIN.
-\# *Notes:
-\# DOC_LEAD is the basis for calculating all leading changes in
-\# a document. Default for TYPESET is 16; 24 for TYPEWRITE.
-\#
-\# Because the visible bottom or footer margin of a page depends
-\# on the overall document lead supplied by the register #DOC_LEAD,
-\# DOC_LEAD, in the body of a document, should always be associated
-\# with the start of a new page (in other words, just before or
-\# just after a manual NEWPAGE).
-\#
-.MAC DOC_LEAD END
-. if \\n[#IGNORE] \{ .return \}
-. br
-. vs \\$1
-. nr #DOC_LEAD \\n[#LEAD]
-. if '\\$2'ADJUST' \{ .TRAPS \}
-.END
-\#
-\#
-\# ADJUST DOCUMENT LEAD
-\# --------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Adjusts document lead so that the last line of text falls exactly
-\# on #B_MARGIN.
-\#
-.MAC DOC_LEAD_ADJUST END
-. ie '\\$1'' \{\
-. nr #ADJ_DOC_LEAD 1
-. \}
-. el \{\
-. nr #ADJ_DOC_LEAD 0
-. nr #DOC_LEAD_ADJUST_OFF 1
-. \}
-.END
-\#
-\#
-\# SHIM
-\# ----
-\# *Argument:
-\# None
-\# *Function:
-\# Advances to the next "legal" baseline.
-\# *Notes:
-\# If a user plays around with spacing in a doc (say, with ALD),
-\# it isn't easy to get mom back on track so she can achieve
-\# perfectly flush bottom margins. Any time SHIM is used, it
-\# ensures that the next output line falls on a legal baseline.
-\#
-\# First, a little convenience macro
-\#
-.MAC PROCESS_SHIM END
-. while \\n+[#LEGAL_BASELINE]<\\n[#CURRENT_V_POS] \{\
-.
-.\}
-. nr #SHIM \\n[#LEGAL_BASELINE]-\\n[#CURRENT_V_POS]
-.END
-\#
-\#
-.MAC SHIM END
-. nr #LEGAL_BASELINE \\n[#T_MARGIN]-1v \\n[#DOC_LEAD]
-. if !r#CURRENT_V_POS \{ .nr #CURRENT_V_POS \\n(.d \}
-. ie r#ADVANCE_FROM_TOP \{\
-. ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
-. while \\n-[#LEGAL_BASELINE]>\\n[#CURRENT_V_POS] \{\
-.
-.\}
-. nr #LEGAL_BASELINE +\\n[#DOC_LEAD]
-. nr #SHIM \\n[#LEGAL_BASELINE]-\\n[#CURRENT_V_POS]
-. \}
-. el \{\
-. PROCESS_SHIM
-. \}
-. \}
-. el \{\
-. PROCESS_SHIM
-. \}
-. ALD \\n[#SHIM]u
-. rr #CURRENT_V_POS
-.END
-\#
-\#
-\#
-\# ====================================================================
-\#
-\# +++INTERNATIONALIZATION+++
-\#
-\# ATTRIBUTE STRING
-\# ----------------
-\# *Argument:
-\# <what goes in the "by" slot before author in the document header>
-\# *Function:
-\# Creates or modifies string $ATTRIBUTE_STRING.
-\# *Notes:
-\# Default is "by". A blank string ("") may be used if no
-\# attribution is desired.
-\#
-.MAC ATTRIBUTE_STRING END
-. ds $ATTRIBUTE_STRING \\$1
-.END
-\#
-\#
-\# CHAPTER STRING
-\# --------------
-\# *Argument:
-\# <what to print any time the word "chapter" is required>
-\# *Function:
-\# Creates or modifies string $CHAPTER_STRING.
-\# *Notes:
-\# Default is "chapter".
-\#
-.MAC CHAPTER_STRING END
-. ds $CHAPTER_STRING \\$1
-.END
-\#
-\#
-\# DRAFT STRING
-\# ------------
-\# *Argument:
-\# <what to print any time the word "draft" is required>
-\# *Function:
-\# Creates or modifies string $DRAFT_STRING.
-\# *Notes:
-\# Default is "draft".
-\#
-.MAC DRAFT_STRING END
-. ds $DRAFT_STRING \\$1
-.END
-\#
-\#
-\# REVISION STRING
-\# ---------------
-\# *Argument:
-\# <what to print any time the word "revision" is required>
-\# *Function:
-\# Creates or modifies string $REVISION_STRING.
-\# *Notes:
-\# Default is "revision".
-\#
-.MAC REVISION_STRING END
-. ds $REVISION_STRING \\$1
-.END
-\#
-\#
-\# FINIS STRING
-\# ------------
-\# *Argument:
-\# <what to print with the finis macro>
-\# *Function:
-\# Creates or modifies string $FINIS_STRING.
-\# *Notes:
-\# Default is "END".
-\#
-.MAC FINIS_STRING END
-. nr #FINIS 1
-. CAPS
-. ds $FINIS_STRING \\$1
-. CAPS OFF
-.END
-\#
-\#
-\# ====================================================================
-\#
-\# +++RECTO/VERSO+++
-\#
-\# RECTO_VERSO
-\# -----------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages. Also
-\# switches page numbers left and right if either is chosen rather
-\# than the default centered page numbers. Switches left and right
-\# margins if differing values have been entered.
-\# *Notes:
-\# Default is OFF.
-\#
-.MAC RECTO_VERSO END
-. ie '\\$1'' \{ .nr #RECTO_VERSO 1 \}
-. el \{ .nr #RECTO_VERSO 0 \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++EPIGRAPHS+++
-\#
-\# EPIGRAPH INDENT
-\# ---------------
-\# *Argument:
-\# <value by which to multiply PP_INDENT for block epigraphs>
-\# *Function:
-\# Creates or modifies register #EPI_OFFSET_VALUE.
-\# *Notes:
-\# Default is 2 for TYPEWRITE, 3 for TYPESET.
-\#
-.MAC EPIGRAPH_INDENT END
-. nr #EPI_OFFSET_VALUE \\$1
-.END
-\#
-\#
-\# EPIGRAPH AUTOLEAD
-\# -----------------
-\# *Argument:
-\# <amount of lead to add to the epigraph ps for epigraph leading>
-\# *Function:
-\# Creates or modifies register #EPI_AUTOLEAD.
-\# *Notes:
-\# Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
-\#
-.MAC EPIGRAPH_AUTOLEAD END
-. nr #EPI_AUTOLEAD \\$1
-.END
-\#
-\#
-\# EPIGRAPH
-\# --------
-\# *Arguments:
-\# BLOCK | <anything>
-\# *Function:
-\# Places an epigraph before the document's text, after the
-\# document header, or after a HEAD.
-\# *Notes:
-\# #EPIGRAPH 1 = centered; 2 = block
-\#
-\# By default, epigraphs are centered, allowing the user
-\# to input them on a line per line basis. To change this
-\# behaviour, the user can supply the argument BLOCK, which
-\# will produce indented, filled text similar to BLOCKQUOTE.
-\#
-\# If a block epigraph contains more than one para, ALL paras of
-\# the epigraph must be preceded by PP. Otherwise, PP is optional.
-\#
-.MAC EPIGRAPH END
-. nr #PP_STYLE 2
-. nr #Q_PP 0
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if \\n[#START] \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#AUTHOR_LINES]=1 \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. ie '\\$1'' \{\
-. nr #EPIGRAPH 1
-. ev EPIGRAPH
-. nr #IN_DIVER 1
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. CHECK_INDENT
-. if \\n[#COLUMNS] \{\
-. ie \\n[#START] \{\
-. ll \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. \}
-. CENTER
-. if \\n[#PRINT_STYLE]=1 \{\
-. fam C
-. ft R
-. if '\\*[$EPI_FT]'I' \{\
-. FT I
-. \}
-. ps 12
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. nr #EPI_LEAD \\n[#LEAD]
-. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$EPI_FAM]
-. FT \\*[$EPI_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
-. if \\n[#EPI_COLOR]=1 \{\
-. nf
-\m[\\*[$EPI_COLOR]]
-. EOL
-. \}
-. AUTOLEAD \\n[#EPI_AUTOLEAD]
-. nr #EPI_LEAD \\n[#LEAD]
-. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-. \}
-. di EPI_TEXT
-. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-. hy 14
-. nr #EPI_ACTIVE 1
-. \}
-. el \{\
-. ie '\\$1'BLOCK' \{\
-. nr #EPIGRAPH 2
-. ev EPIGRAPH
-. ie \\n[#START] \{\
-. ie \\n[#COLUMNS] \{\
-. ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-. ta \\n(.lu
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-. ta \\n(.lu
-. \}
-. \}
-. el \{\
-. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-. ta \\n(.lu
-. \}
-. CHECK_INDENT
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. fam C
-. ft R
-. if '\\*[$EPI_FT]'I' \{\
-. FT I
-. \}
-. ps 12
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u/2u \}
-. QUAD LEFT
-. HY OFF
-. nr #EPI_LEAD \\n[#LEAD]
-. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-. di EPI_TEXT
-. nr #EPI_ACTIVE 1
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$EPI_FAM]
-. FT \\*[$EPI_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
-. if \\n[#EPI_COLOR]=1 \{\
-. nf
-\m[\\*[$EPI_COLOR]]
-. EOL
-. \}
-. AUTOLEAD \\n[#EPI_AUTOLEAD]
-. QUAD \\*[$EPI_QUAD]
-. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-. hy 14
-. nr #EPI_LEAD \\n[#LEAD]
-. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-. di EPI_TEXT
-. nr #EPI_ACTIVE 1
-. \}
-. \}
-. el \{\
-. DO_EPIGRAPH
-. \}
-. \}
-.END
-\#
-\#
-\# DO EPIGRAPH
-\# -----------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Ends diversion started in EPIGRAPH. Makes spacing
-\# adjustments to compensate for the difference between epigraph
-\# leading and overall document leading, so that the bottom of
-\# the pages remain flush.
-\# *Notes:
-\# In addition to its usual place at the beginning of a
-\# document, EPIGRAPH may also be used after HEAD.
-\#
-.MAC DO_EPIGRAPH END
-. br
-. di
-. rr #IN_DIVER
-. if \\n[#RESET_FN_COUNTERS]=2 \{\
-. if !\\n[#FN_COUNT]=1 \{\
-. if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-. DIVER_FN_2_POST
-. rr #RESET_FN_COUNTERS
-. \}
-. \}
-. \}
-. nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
-. nr #DONE_ONCE 0 1
-. REMOVE_INDENT
-. ev
-. nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
-. nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
-. ie \\n[#START] \{\
-. RLD \\n[#SHIM]u
-. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
-. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.\}
-. if \\n[#PRINT_STYLE]=2 \{\
-. RLD \\n[#DOC_LEAD]u
-. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
-. \}
-. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
-. nr #EPI_FITS 1
-. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
-. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.\}
-. ie \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u/2u \}
-. \}
-. el \{\
-. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
-. \}
-. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-. \}
-. \}
-. if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
-. \}
-. el \{\
-. nr #EPI_LINES_TO_TRAP 0 1
-. while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\
-. nr #LOOP 1
-.\}
-. nr #EPI_LINES_TO_TRAP -1
-. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
-. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.\}
-. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
-. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u \}
-. \}
-. \}
-. if \\n[#EPIGRAPH]=1 \{\
-. po \\n[#L_MARGIN]u
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. \}
-. if \\n[#EPIGRAPH]=2 \{\
-. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-. if \\n[#COLUMNS] \{\
-. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-. \}
-. po \\n[#EPI_OFFSET]u
-. \}
-. nf
-. EPI_TEXT
-. br
-. ie \\n[#START] \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. el \{\
-. ie \\n[#EPI_LINES]%2=1 \{ .ALD \\n[#DOC_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u/2u \}
-. \}
-. SHIM
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_WHITESPACE]u/2u
-. \}
-. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-. \}
-. SHIM
-. \}
-. \}
-. el \{\
-. rr #EPI_ACTIVE
-. ie \\n[#EPI_FITS] \{\
-. ie \\n[#FN_FOR_EPI] \{\
-. nr #EPI_LINES_TO_END 1
-. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
-. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.\}
-. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-. \}
-. el \{\
-. ie \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
-. \}
-. el \{\
-. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
-. ALD \\n[#EPI_WHITESPACE]u/2u
-. \}
-. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
-. if \\n[#LOOP] \{ .nr #EPI_LINES_TO_END +1 \}
-. rr #LOOP
-. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
-. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-. nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.\}
-. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !\\n[#SINGLE_SPACE] \{\
-. nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
-. ie \\n[#EPI_LINES_EVEN] \{ .ALD .5v \}
-. el \{ .RLD .5v \}
-. rr #EPI_LINES_EVEN
-. \}
-. \}
-. \}
-. \}
-. nr #PP_STYLE 1
-. rr #EPI_FITS
-. ALD \\n[#DOC_LEAD]u
-. QUAD \\*[$DOC_QUAD]
-. po \\n[#L_MARGIN]u
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. if \\n[#START] \{\
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. mk dc
-. \}
-. \}
-. if \\n[#LINENUMBERS]=2 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++FINIS MACRO+++
-\#
-\# FINIS
-\# -----
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Deposits --END-- at the end of a document.
-\#
-.MAC FINIS END
-. br
-. ev FINIS
-. evc 0
-. if \\n[#TAB_ACTIVE] \{ .TQ \}
-. if \\n[#INDENT_ACTIVE] \{ .IQ CLEAR \}
-. nr #EM_ADJUST (1m/8)
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. ALD \\n[#DOC_LEAD]u
-. CENTER
-. if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#FINIS_COLOR] \{\
-. PRINT "\m[\\*[$FINIS_COLOR]]\v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[]
-. \}
-. el \{ .PRINT \v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[] \}
-. \}
-. ev
-.END
-\#
-\# ====================================================================
-\#
-\# +++HEADERS/FOOTERS+++
-\#
-\# Define a string so that the current page number can be incorporated
-\# into the strings for hdrftr left, right, and center. NOTE: This is
-\# not the same thing as using the shortform # in hdrftr strings.
-\#
-.ds PAGE# \En[#PAGENUMBER]
-\#
-\#
-\# HDRFTR RULE GAP
-\# ---------------
-\# *Argument:
-\# <amount of space between header/footer and header/footer rule>
-\# *Function:
-\# Creates or modifies register #HDRFTR_RULE_GAP to hold amount
-\# of space between header/footer and header/footer rule.
-\# *Notes:
-\# Default is 4p.
-\#
-.MAC HDRFTR_RULE_GAP END
-. nr #HDRFTR_RULE_GAP (\\$1)
-.END
-\#
-\#
-\# HDRFTR LEFT
-\# -----------
-\# *Argument:
-\# <what to put in the left position of page header/footers>
-\# *Function:
-\# Creates or modifies string $HDRFTR_LEFT.
-\# Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
-\# overrides the $HDRFTR_LEFT string created by default
-\# in DEFAULTS.
-\# *Notes:
-\# Especially useful if doc has more than one author, and a list
-\# of authors by last name is desired in header/footers.
-\# Default is author.
-\#
-\# If the argument is the # character, simply prints the current
-\# page number.
-\#
-\# If the user wants to *incorporate* the page number into the string,
-\# \*[PAGE#] must be used. For example, if the user wants to put
-\# an elipsis before the page number in the string, s/he should use
-\# ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_LEFT END
-. nr #USER_DEF_HDRFTR_LEFT 1
-. ds $HDRFTR_LEFT \\$1
-.END
-\#
-\#
-\# HDRFTR LEFT CAPS
-\# ----------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Turns capitalisation of $HDRFTR_LEFT (typically, the author of
-\# the document) on or off.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HDRFTR_LEFT_CAPS END
-. ie '\\$1'' \{\
-. nr #HDRFTR_LEFT_CAPS 1
-. \}
-. el \{\
-. nr #HDRFTR_LEFT_CAPS 0
-. ds $HDRFTR_LEFT_SIZE_CHANGE +0
-. \}
-.END
-\#
-\#
-\# HDRFTR CENTER
-\# -------------
-\# *Argument:
-\# <what to put in the centre position of page header/footers>
-\# *Function:
-\# Creates or modifies string $HDRFTR_CENTER.
-\# Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
-\# overrides the $HDRFTR_CENTER string created by default
-\# in COPYSTYLE.
-\# *Notes:
-\# Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
-\# CHAPTER, draft and revision number if COPYSTYLE DRAFT.
-\#
-\# If the argument is the # character, simply prints the current
-\# page number.
-\#
-\# If the user wants to *incorporate* the page number into the string,
-\# \*[PAGE#] must be used. For example, if the user wants to put
-\# an elipsis before the page number in the string, s/he should use
-\# ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_CENTER END
-. nr #USER_DEF_HDRFTR_CENTER 1
-. if '\\$0'FOOTER_CENTER' \{\
-. ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
-. ds $HDRFTR_CENTER_NEW \\$1
-. \}
-. if '\\$0'FOOTER_CENTRE' \{\
-. ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
-. ds $HDRFTR_CENTER_NEW \\$1
-. \}
-. ds $HDRFTR_CENTER \\$1
-.END
-\#
-\#
-\# HDRFTR CENTER CAPS
-\# ------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
-\# the document) on or off.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HDRFTR_CENTER_CAPS END
-. ie '\\$1'' \{\
-. nr #HDRFTR_CENTER_CAPS 1
-. \}
-. el \{\
-. nr #HDRFTR_CENTER_CAPS 0
-. ds $HDRFTR_CENTER_SIZE_CHANGE +0
-. \}
-.END
-\#
-\#
-\# HDRFTR CENTER PADDING
-\# ---------------------
-\# *Argument:
-\# LEFT | RIGHT <amount of padding to put left or right of hdrftr
-\# center string>
-\# *Function:
-\# Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or
-\# #HDRFTR_CTR_PAD_RIGHT.
-\# *Notes:
-\# By default, the HDRFTR_CENTER string is centered on the doc
-\# line length. Long titles or long author names can screw up
-\# visual centering, or create overprints. This macro allows the
-\# user to pad the center string by the specified amount of space
-\# to fix these problems. Use only one of LEFT or RIGHT.
-\#
-\# A unit of measure is required.
-\#
-.MAC HDRFTR_CENTER_PAD END
-. if '\\$1'LEFT' \{\
-. nr #HDRFTR_CTR_PAD_LEFT (\\$2)
-. \}
-. if '\\$1'RIGHT' \{\
-. nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
-. \}
-.END
-\#
-\#
-\# SWITCH HDRFTR CENTER PADDING SIDE - support macro
-\# --------------------------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Switches the padding side of hdrftr center padding.
-\# *Notes:
-\# Required to keep spacing around hdrftr string constant
-\# in recto/verso documents.
-\#
-.MAC SWITCH_HDRFTR_CENTER_PAD END
-. nr #HDRFTR_CTR_PAD_TMP \\n[#HDRFTR_CTR_PAD_LEFT]
-. HDRFTR_CENTER_PAD LEFT \\n[#HDRFTR_CTR_PAD_RIGHT]u
-. HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u
-.END
-\#
-\#
-\# HDRFTR RIGHT
-\# ------------
-\# *Argument:
-\# <what to put in the right position of page header/footers>
-\# *Function:
-\# Creates or modifies string $HDRFTR_RIGHT.
-\# Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
-\# overrides the $HDRFTR_RIGHT string created by default
-\# in DEFAULTS.
-\# *Notes:
-\# Default is document title.
-\#
-\# If the argument is the # character, simply prints the current
-\# page number.
-\#
-\# If the user wants to *incorporate* the page number into the string,
-\# \*[PAGE#] must be used. For example, if the user wants to put
-\# an elipsis before the page number in the string, s/he should use
-\# ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_RIGHT END
-. nr #USER_DEF_HDRFTR_RIGHT 1
-. ds $HDRFTR_RIGHT \\$1
-.END
-\#
-\#
-\# HDRFTR RIGHT CAPS
-\# -----------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
-\# the document) on or off.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HDRFTR_RIGHT_CAPS END
-. ie '\\$1'' \{\
-. nr #HDRFTR_RIGHT_CAPS 1
-. \}
-. el \{\
-. nr #HDRFTR_RIGHT_CAPS 0
-. ds $HDRFTR_RIGHT_SIZE_CHANGE +0
-. \}
-.END
-\#
-\#
-\# HDRFTR RULE
-\# -----------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
-\# under the header/over the footer. Otherwise, turns HDRFTR_RULE
-\# on or off.
-\#
-.MAC HDRFTR_RULE END \"To print rule under header/over footer.
-. ie '\\$0'HDRFTR_RULE_INTERNAL' \{\
-. ie \\n[#USERDEF_HDRFTR] \{\
-. nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
-. ps 12
-. if \\n[#HEADERS_ON] \{\
-. rt \\nyu
-. ALD \\n[#HDRFTR_RULE_GAP]u
-. \}
-. if \\n[#FOOTERS_ON] \{\
-. rt \\nyu
-. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p
-. \}
-. ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_RULE_COLOR]]\\l'\\n[#DOC_L_LENGTH]u'\m[]
-. \}
-. el \{\
-. PRINT \\l'\\n[#DOC_L_LENGTH]u'
-. \}
-. br
-. \}
-. el \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \{\
-. nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
-. \}
-. el \{ .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT] \}
-. ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \{\
-. nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
-. \}
-. el \{ .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] \}
-. \}
-. ps 12
-. if \\n[#HEADERS_ON] \{\
-. rt \\nyu
-. ALD \\n[#HDRFTR_RULE_GAP]u
-. \}
-. if \\n[#FOOTERS_ON] \{\
-. rt \\nyu
-. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p
-. \}
-. ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_RULE_COLOR]]\\l'\\n[#DOC_L_LENGTH]u'\m[]
-. \}
-. el \{\
-. PRINT \\l'\\n[#DOC_L_LENGTH]u'
-. \}
-. br
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{ .nr #HDRFTR_RULE 1 \}
-. el \{ .nr #HDRFTR_RULE 0 \}
-. \}
-.END
-\#
-\#
-.ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
-\#
-\#
-\# HDRFTR PLAIN
-\# ------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Sets the family, font, and point size of all strings in
-\# header/footers to the same family and point size as running
-\# text. Font for the header/footer becomes roman throughout.
-\#
-.MAC HDRFTR_PLAIN END
-. HDRFTR_FAMILY \\*[$DOC_FAM]
-. HDRFTR_PT_SIZE \\n[#DOC_PT_SIZE]
-. HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
-. HDRFTR_LEFT_FONT R
-. HDRFTR_LEFT_SIZE +0
-. HDRFTR_LEFT_CAPS OFF
-. HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
-. HDRFTR_CENTER_FONT R
-. HDRFTR_CENTER_SIZE +0
-. HDRFTR_CENTER_CAPS OFF
-. HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
-. HDRFTR_RIGHT_FONT R
-. HDRFTR_RIGHT_SIZE +0
-. HDRFTR_RIGHT_CAPS OFF
-.END
-\#
-\#
-\# SWITCH HDRFTR
-\# -------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or modifies register #SWITCH_HDRFTR, used to switch
-\# default location of HDRFTR_LEFT and HDRFTR_RIGHT.
-\# *Notes:
-\#
-.ig
-Typically, the author string appears at the left of header/footers,
-and the title string appears at the right. This switches the
-location of the two. Useful in conjuction with RECTO_VERSO to tweak
-switches on alternate pages to come out as the user wishes. The
-assumption of RECTO_VERSO is that the first page of the document
-(recto) is odd, and even though it has no header/footer, if it did
-have one, it would print as AUTHOR...CENTER...TITLE (or whatever
-strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that
-the next page, which does have a header/footer, will come out as
-TITLE...CENTER...AUTHOR (or whatever strings the user has supplied
-for HDRFTR_LEFT/RIGHT). SWITCH_HDRFTRS allows the user to get the
-desired string in the desired place on the desired recto/verso page.
-
-Default is OFF.
-..
-\#
-.MAC SWITCH_HDRFTR END
-. ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \}
-. el \{ .nr #SWITCH_HDRFTR 0 \}
-.END
-\#
-\#
-\# USER DEFINED HDRFTR RECTO
-\# -------------------------
-\# *Arguments:
-\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
-\# *Function:
-\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
-\# stores string in $USERDEF_HDRFTR_RECTO.
-\# *Notes:
-\# For use when users don't want 3-part headers/footers, but rather
-\# want to design their own headers/footers and need different
-\# headers/footers on recto and verso pages. Using just
-\# HEADER_RECTO, even when recto/verso is not on, allows users to
-\# design their own headers/footers for doc pages.
-\#
-.MAC HDRFTR_RECTO END
-. nr #USERDEF_HDRFTR 1
-. if '\\$1'L' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
-. if '\\$1'LEFT' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
-. if '\\$1'C' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
-. if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
-. if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
-. if '\\$1'R' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
-. if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
-. ds $USERDEF_HDRFTR_RECTO \\$2
-.END
-\#
-\#
-\# USER DEFINED HDRFTR VERSO
-\# -------------------------
-\# *Arguments:
-\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
-\# *Function:
-\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
-\# stores string in $USERDEF_HDRFTR_VERSO.
-\# *Notes:
-\# For use when users don't want 3-part headers/footers, but rather
-\# want to design their own headers/footers and need different
-\# headers/footers on recto and verso pages.
-\#
-.MAC HDRFTR_VERSO END
-. nr #USERDEF_HDRFTR 1
-. if '\\$1'L' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
-. if '\\$1'LEFT' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
-. if '\\$1'C' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
-. if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
-. if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
-. if '\\$1'R' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
-. if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
-. ds $USERDEF_HDRFTR_VERSO \\$2
-.END
-\#
-\#
-\# PRINT FOOTER ON FIRST PAGE
-\# --------------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #PRINT_FOOTER_ON_PAGE_1
-\# *Notes:
-\# Lets user choose whether to print footer on first
-\# page of doc.
-\#
-.MAC FOOTER_ON_FIRST_PAGE END
-. ie '\\$1'' \{ .nr #PRINT_FOOTER_ON_PAGE_1 1 \}
-. el \{ .rr #PRINT_FOOTER_ON_PAGE_1 \}
-.END
-\#
-\#
-\# PRINT PAGE NUMBER ON FIRST PAGE
-\# -------------------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #PRINT_PAGENUM_ON_PAGE_1
-\# *Notes:
-\# Lets user choose whether to print page number on first
-\# page of doc and after collate when footers are on or page numbering
-\# has been user set at top of page.
-\#
-.MAC PAGENUM_ON_FIRST_PAGE END
-. ie '\\$1'' \{ .nr #PRINT_PAGENUM_ON_PAGE_1 1 \}
-. el \{ .rr #PRINT_PAGENUM_ON_PAGE_1 \}
-.END
-\#
-\#
-\# PRINT HEADER/FOOTER
-\# -------------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Based on defaults or values entered by user, prints a
-\# three-part title at either the top or the bottom of the page.
-\# *Notes:
-\# Called from within either HEADER or FOOTER.
-\#
-.MAC PRINT_HDRFTR END
-. if \\n[#DOC_TYPE]=4 \{\
-. nr #SUITE \En[.pn]
-. \}
-. if \\n[#FOOTERS_ON] \{\
-. if \\n[#START_FOR_FOOTERS] \{\
-. rr #START_FOR_FOOTERS
-. if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{ .return \}
-. \}
-. \}
-. if \\n[#USERDEF_HDRFTR] \{\
-. PRINT_USERDEF_HDRFTR
-. return
-. \}
-. if \\n[#SWITCH_HDRFTR] \{\
-. ds $HDRFTR_TMP_SWITCH \\*[$HDRFTR_LEFT]
-. ds $HDRFTR_LEFT \\*[$HDRFTR_RIGHT]
-. ds $HDRFTR_RIGHT \\*[$HDRFTR_TMP_SWITCH]
-. ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
-. ds $HDRFTR_LEFT_SIZE_CHANGE \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
-. ds $HDRFTR_RIGHT_SIZE_CHANGE \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
-. nr #HDRFTR_TMP_CAPS_SWITCH \\n[#HDRFTR_LEFT_CAPS]
-. nr #HDRFTR_LEFT_CAPS \\n[#HDRFTR_RIGHT_CAPS]
-. nr #HDRFTR_RIGHT_CAPS \\n[#HDRFTR_TMP_CAPS_SWITCH]
-. ds $HDRFTR_TMP_COLOR_SWITCH \\*[$HDRFTR_LEFT_COLOR]
-. ds $HDRFTR_LEFT_COLOR \\*[$HDRFTR_RIGHT_COLOR]
-. ds $HDRFTR_RIGHT_COLOR \\*[$HDRFTR_TMP_COLOR_SWITCH]
-. rr #HDRFTR_TMP_CAPS_SWITCH
-. rm $HDRFTR_TMP_SWITCH
-. rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
-. rm $HDRFTR_TMP_COLOR_SWITCH
-. nr #SWITCH_HDRFTR 0
-. \}
-. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-. if \\n[#ENDNOTES] \{ .PAGENUM_STYLE \\*[$EN_PN_STYLE] \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. if o \{ .RIGHT \}
-. if e \{ .LEFT \}
-. if \\n[#RECTO_VERSO]=0 \{ .LEFT \}
-. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS \}
-. ie '\\*[$HDRFTR_LEFT]'#' \{\
-. PRINT \\n[#PAGENUMBER]
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
-. CENTER
-. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
-. rt \\nyu
-. ie '\\*[$HDRFTR_CENTER]'#' \{\
-. PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
-. if o \{ .LEFT \}
-. if e \{ .RIGHT \}
-. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \}
-. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \}
-. rt \\nyu
-. ie '\\*[$HDRFTR_RIGHT]'#' \{\
-. PRINT \\n[#PAGENUMBER]
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \\*[$HDRFTR_RIGHT] \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#HDRFTR_COLOR]=1 \{\
-. nf
-\m[\\*[$HDRFTR_COLOR]]
-. EOL
-. \}
-. fam \\*[$HDRFTR_LEFT_FAM]
-. ft \\*[$HDRFTR_LEFT_FT]
-. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
-. vs 12
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. if o \{ .LEFT \}
-. if e \{ .RIGHT \}
-. if \\n[#RECTO_VERSO]=0 \{ .LEFT \}
-. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS \}
-. ie '\\*[$HDRFTR_LEFT]'#' \{\
-. ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[]
-. \}
-. el \{\
-. PRINT \\n[#PAGENUMBER]
-. \}
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_LEFT]'' \{\
-. ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[]
-. \}
-. el \{\
-. PRINT \\*[$HDRFTR_LEFT]
-. \}
-. \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
-. fam \\*[$HDRFTR_CENTER_FAM]
-. ft \\*[$HDRFTR_CENTER_FT]
-. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
-. vs 12
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. CENTER
-. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
-. rt \\nyu
-. ie '\\*[$HDRFTR_CENTER]'#' \{\
-. ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
-. PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
-. \}
-. el \{\
-. PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-. \}
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_CENTER]'' \{\
-. ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
-. PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
-. \}
-. el \{\
-. PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-. \}
-. \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
-. fam \\*[$HDRFTR_RIGHT_FAM]
-. ft \\*[$HDRFTR_RIGHT_FT]
-. ps \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
-. vs 12
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. if o \{ .RIGHT \}
-. if e \{ .LEFT \}
-. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \}
-. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \}
-. rt \\nyu
-. ie '\\*[$HDRFTR_RIGHT]'#' \{\
-. ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[]
-. \}
-. el \{\
-. PRINT \\n[#PAGENUMBER]
-. \}
-. \}
-. el \{\
-. ie !'\\*[$HDRFTR_RIGHT]'' \{\
-. ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
-. PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[]
-. \}
-. el \{\
-. PRINT \\*[$HDRFTR_RIGHT]
-. \}
-. \}
-. el \{ .PRINT \& \}
-. \}
-. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
-. \}
-. if \\n[#HDRFTR_RULE] \{\
-. HDRFTR_RULE_INTERNAL
-. \}
-. br
-.END
-\#
-\#
-\# PRINT USER DEFINED HEADER/FOOTER
-\# --------------------------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Based on defaults or values entered by user, prints a single part
-\# (i.e. not 3-part) title at either the top or the bottom of the page.
-\# *Notes:
-\# Called from within PRINT_HDRFTR.
-\#
-.MAC PRINT_USERDEF_HDRFTR END
-. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-. fc ^ #
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$HDRFTR_FAM]
-. FT R
-. PT_SIZE \\n[#HDRFTR_PT_SIZE]u
-. if \\n[#HDRFTR_COLOR]=1 \{\
-. nf
-. COLOR \\*[$HDRFTR_COLOR]
-. \}
-. \}
-. ie \\n[#RECTO_VERSO] \{\
-. if o \{\
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
-. PRINT \\*[$USERDEF_HDRFTR_RECTO]
-. EOL
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. \}
-. if e \{\
-. ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
-. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 \{ .LEFT \}
-. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 \{ .CENTER \}
-. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 \{ .RIGHT \}
-. PRINT \\*[$USERDEF_HDRFTR_VERSO]
-. EOL
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. \}
-. el \{\
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
-. PRINT \\*[$USERDEF_HDRFTR_RECTO]
-. EOL
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
-. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
-. PRINT \\*[$USERDEF_HDRFTR_RECTO]
-. EOL
-. if \\n[#FOOTERS_ON] \{\
-. di NULL
-. SIZESPECS
-. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-. di
-. \}
-. \}
-. fc
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
-. el \m[black]
-. \}
-. if \\n[#HDRFTR_RULE] \{\
-. HDRFTR_RULE_INTERNAL
-. \}
-.END
-\#
-\#
-\# +++HEADERS+++
-\#
-\# HEADERS (off or on)
-\# -------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns headers at the top of the page off or on.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HEADERS END
-. ie '\\$1'' \{ .nr #HEADERS_ON 1 \}
-. el \{ .nr #HEADERS_ON 0 \}
-.END
-\#
-\#
-\# HEADER MARGIN
-\# -------------
-\# *Argument:
-\# <amount of space between top of page and header>
-\# *Function:
-\# Creates or modifies register #HEADER_MARGIN to hold amount
-\# of space between top of page and header.
-\# *Notes:
-\# Requires unit of measure. Default is 4P+6p, measured top-of-page
-\# to baseline.
-\#
-.MAC HEADER_MARGIN END
-. nr #HEADER_MARGIN (\\$1)
-.END
-\#
-\#
-\# HEADER GAP
-\# ----------
-\# *Argument:
-\# <amount of space between header and running text>
-\# *Function:
-\# Creates or modifies register #HEADER_GAP to hold amount
-\# of space between header and running text.
-\# *Notes:
-\# Default is 1P+6p.
-\#
-.MAC HEADER_GAP END
-. nr #HEADER_GAP (\\$1)
-.END
-\#
-\#
-\# HEADER
-\# ------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
-\# *Notes:
-\# In order to convert the title string to caps in the header (in the
-\# event that the user enters .TITLE in caps/lc), I've used
-\# quad left, quad centre, and quad right to arrange the three bits
-\# of the header, rather than .tl. This allows the use of the CAPS macro.
-\# The downside is that I have to add \\v'-(\\n[#LEAD]u*<n>) in order
-\# for -Tlatin1 output to align the header/footer strings on the baseline.
-\# The console output still isn't brilliant, but at least it's
-\# comprehensible.
-\#
-.MAC HEADER END
-. MNtop
-. rr #FROM_FOOTER
-. nr #FROM_HEADER 1
-. nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]
-. if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
-. rr #RULED
-. if \\n[#RESET_FN_NUMBER] \{ .nr #FN_NUMBER 0 1 \}
-. po \\n[#DOC_L_MARGIN]u
-. if \\n[#RECTO_VERSO] \{\
-. if !\\n[#TOC_RV_SWITCH] \{\
-. nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
-. DOC_LEFT_MARGIN \\n[#DOC_R_MARGIN]u
-. DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
-. SWITCH_HDRFTR_CENTER_PAD
-. \}
-. rr #TOC_RV_SWITCH
-. \}
-. ev HEADER
-. if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
-. sp |\\n[#HEADER_MARGIN]u-1v
-. mk y
-. ll \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#PRINT_STYLE]=1 \{\
-. fam C
-. ft R
-. ps 12\\*[$HDRFTR_SIZE_CHANGE]
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. fam \\*[$HDRFTR_FAM]
-. ft R
-. ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
-. vs 12
-. \}
-. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
-. if \\n[#CAPS_ON] \{\
-. nr #CAPS_WAS_ON 1
-. CAPS OFF
-. \}
-. if \\n[#UNDERLINE_ON] \{\
-. nr #UNDERLINE_WAS_ON 1
-. UNDERLINE OFF
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#ENDNOTES]=1 \{\
-.\" Single-spaced endotes have a different lead
-. if \\n[#EN_SINGLESPACE] \{\
-. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-. nr #DOC_LEAD \\n[#EN_LEAD]u
-. \}
-. \}
-. \}
-. ie \\n[#HEADERS_ON] \{\
-. PRINT_HDRFTR
-. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-. \}
-. el \{\
-. ie \\n[#PAGE_NUM_V_POS]=1 \{\
-. ie \\n[#PAGINATE] \{\
-. PRINT_PAGE_NUMBER
-. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-. \}
-. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
-. \}
-. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#ENDNOTES]=1 \{\
-. if \\n[#EN_SINGLESPACE] \{\
-. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-. rr #RESTORE_DOC_LEAD
-. \}
-. \}
-. \}
-. nr #PAGE_TOP \\n(nl
-. ev
-. po \\n[#L_MARGIN]u
-. if \\n[#RECTO_VERSO] \{\
-. nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
-. \}
-. if \\n[#CAPS_WAS_ON] \{\
-. CAPS
-. rr #CAPS_WAS_ON
-. \}
-. if \\n[#UNDERLINE_WAS_ON] \{\
-. UNDERLINE
-. rr #UNDERLINE_WAS_ON
-. \}
-. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. if \\n[#QUOTE] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. el \{\
-. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-. po \\n[#Q_OFFSET]u
-. \}
-. ALD \\n[#Q_LEAD_DIFF]u
-. \}
-. if \\n[#EPIGRAPH] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. el \{\
-. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-. po \\n[#EPI_OFFSET]u
-. \}
-. \}
-. ie \\n[#EPIGRAPH] \{\
-. ie !\\n[#EPI_ACTIVE] \{\
-. ns
-. rr #EPI_ACTIVE
-. \}
-. el \{\
-. ie \\n[#EPI_FITS] \{ .ns \}
-. el \{ .ALD \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u \}
-. \}
-. \}
-. el \{ .ns \}
-. ns
-. if \\n[#COLUMNS] \{\
-. nr #FN_COUNT_FOR_COLS 0 1
-. nr #L_MARGIN \\n[#DOC_L_MARGIN]
-. if \\n[#RECTO_VERSO] \{ .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u \}
-. nr #COL_NUM 0 1
-. mk dc
-. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#QUOTE] \{\
-. po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
-. \}
-. if \\n[#EPIGRAPH] \{\
-. if \\n[#EPI_ACTIVE] \{\
-. ie \\n[#EPI_FITS] \{ . \}
-. el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \}
-. \}
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
-. \}
-. \}
-. if \\n[#RESET_FN_COUNTERS]=1 \{\
-. rr #RESET_FN_COUNTERS
-. PROCESS_FN_IN_DIVER
-. nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
-. if \\n[#COLUMNS]=1 \{ .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1 \}
-. ie \\n[#RESET_FN_NUMBER]=1 \{ .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1 \}
-. el \{ .nr #FN_NUMBER \\n[#FN_NUMBER] 1 \}
-. rm FN_IN_DIVER
-. if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#SLANT_ON] \{\
-. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
-. \}
-. \}
-. rr #FROM_HEADER
-. rr #DEFER_SPACE_ADDED
-. if !\\n[#FN_DEPTH] \{\
-. if r#DIVERTED \{ .rr #DIVERTED \}
-. \}
-. if \\n[#MN_OVERFLOW_LEFT]=1 \{\
-. MN LEFT
-. nf
-. MN_OVERFLOW_LEFT
-. MN
-. \}
-. if \\n[#MN_OVERFLOW_RIGHT]=1 \{\
-. MN RIGHT
-. nf
-. MN_OVERFLOW_RIGHT
-. MN
-. \}
-. rm MN_OVERFLOW_LEFT
-. rr #MN_OVERFLOW_LEFT
-. rr #no-repeat-MN-left
-. rm MN_OVERFLOW_RIGHT
-. rr #MN_OVERFLOW_RIGHT
-. rr #no-repeat-MN-right
-.END
-\#
-\# ====================================================================
-\#
-\# +++FOOTERS+++
-\#
-\# FOOTERS (off or on)
-\# -------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns footers at the bottom of the page off or on.
-\# *Notes:
-\# Default is off. If on, page numbers automatically go at
-\# the top, centered, unless pagination has been turned off,
-\# or the pagenumber position has been changed to left or right.
-\#
-.MAC FOOTERS END
-. ie '\\$1'' \{\
-. nr #FOOTERS_ON 1
-. PAGE_NUM_POS TOP CENTER
-. \}
-. el \{ .nr #FOOTERS_ON 0 \}
-.END
-\#
-\#
-\# FOOTER MARGIN
-\# -------------
-\# *Argument:
-\# <footer margin>
-\# *Function:
-\# Creates or modifies register #FOOTER_MARGIN which holds the
-\# amount of space to leave between the page number and the bottom
-\# of the page.
-\# *Notes:
-\# Unit of measure required. Default is 3P.
-\#
-.MAC FOOTER_MARGIN END
-. ie \\n%>0 \{ .nr #FOOTER_MARGIN (\\$1) \}
-. el \{ . \}
-.END
-\#
-\#
-\# FOOTER GAP
-\# ----------
-\# *Argument:
-\# <distance from end of running text to page # or footer>
-\# *Function:
-\# Creates or modifies register #FOOTER_GAP which holds the
-\# amount of space to leave between running text and the page number.
-\# *Notes:
-\# Requires unit of measure. Default is 3P. Measured baseline to
-\# baseline.
-\#
-.MAC FOOTER_GAP END
-. ie \\n%>0 \{ .nr #FOOTER_GAP (\\$1) \}
-. el \{ . \}
-.END
-\#
-\#
-\# FOOTER
-\# ------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Places footer at bottom of page if #FOOTERS=1, otherwise
-\# places page number at bottom of page (if #PAGINATE=1).
-\# Page numbers are in arabic or roman according to COPYSTYLE.
-\# DRAFT starts the document at page 1 regardless of PAGENUMBER.
-\# FINAL respects PAGENUMBER.
-\#
-.MAC FOOTER END
-. ev PAGE_TRANSITION
-. if \\n[MN-left]>0 \{\
-. if !\\n[#no-repeat-MN-left]=1 \{\
-. MNbottom-left
-. nr #no-repeat-MN-left 1
-. \}
-. if '\\n(.z'MN_OVERFLOW_LEFT' \{\
-. di
-. nr #MN_OVERFLOW_LEFT 1
-. rr #OVERFLOW_LEFT
-. \}
-. \}
-. if \\n[MN-right]>0 \{\
-. if (\\n[MN-right] > 0) \{\
-. if !\\n[#no-repeat-MN-right]=1 \{\
-. MNbottom-right
-. \}
-. \}
-. if '\\n(.z'MN_OVERFLOW_RIGHT' \{\
-. di
-. nr #MN_OVERFLOW_RIGHT 1
-. rr #OVERFLOW_RIGHT
-. \}
-. \}
-. ch MN_OVERFLOW_TRAP
-. nr #SAVED_LEAD \\n(.v
-. nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
-. if !\\n[#FN_DEFER] \{\
-. nr #DIVER_DEPTH 0
-. if \\n[#FN_DEPTH] \{\
-. if \\n[#DIVERTED]=3 \{ .nr #FN_DEPTH +\\n[#VFP_DIFF] \}
-. vpt 0
-. sp |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
-. vpt 1
-. po \\n[#DOC_L_MARGIN]u
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. nr #FROM_FOOTER 1
-. \}
-. nf
-. FOOTNOTES
-. rm FOOTNOTES
-. if dRUNON_FOOTNOTES \{ .rm RUNON_FOOTNOTES \}
-. if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#SAVED_LEAD]u \}
-. if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#SAVED_LEAD]u \}
-. if '\\n(.z'FN_OVERFLOW' \{\
-. di
-. nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
-. \}
-. nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
-. nr #FN_COUNT 0
-. if \\n[#COL_NEXT] \{\
-. ie !\\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #COL_NUM \\n-[#COL_NUM] \}
-. el \{ .nr #COL_NUM \\n[#NUM_COLS] 1 \}
-. \}
-. \}
-. rr #DIVERTED
-. \}
-. ie \\n[#COLUMNS]=1 \{\
-. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .DO_FOOTER \}
-. el \{\
-. ie \\n[#ENDNOTES] \{ .sp |\\n(ecu-\\n[#EN_LEAD]u \}
-. el \{ .sp |\\n(dcu \}
-. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
-. LS \\n[#SAVED_LEAD]u
-. if \\n[#PREV_FN_DEFERRED] \{\
-. nr #PREV_FN_DEFERRED 2
-. \}
-. rr #RULED
-. if !\\n[#EPIGRAPH] \{ .rr #COL_NEXT \}
-. if !\\n[#QUOTE] \{ .rr #COL_NEXT \}
-. if \\n[#RESET_FN_COUNTERS]=1 \{\
-. rr #RESET_FN_COUNTERS
-. PROCESS_FN_IN_DIVER
-. LS \\n[#SAVED_LEAD]u
-. nr #FN_COUNT \\n[#FN_COUNT] 1
-. nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1
-. rm FN_IN_DIVER
-. if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
-. \}
-. rr #DEFER_SPACE_ADDED
-. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. if \\n[#QUOTE] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. el \{\
-. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \}
-. po \\n[#Q_OFFSET]u
-. \}
-. \}
-. if \\n[#EPIGRAPH] \{\
-. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. el \{\
-. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-. if \\n[#COLUMNS] \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) \}
-. po \\n[#EPI_OFFSET]u
-. \}
-. \}
-. ie \\n[#EPIGRAPH] \{\
-. ie !\\n[#EPI_ACTIVE] \{\
-. ns
-. rr #EPI_ACTIVE
-. \}
-. el \{\
-. sp |\\n(dcu+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-. rr #EPI_ACTIVE
-. \}
-. \}
-. el \{ .ns \}
-. ev
-. \}
-. ns
-. rr #DIVERTED
-. \}
-. el \{ .DO_FOOTER \}
-.END
-\#
-\#
-\# PROCESS FOOTER
-\# --------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Prints footer (page number, or 3-part footer).
-\# Resets CAPS and UNDERLINE if they were on.
-\#
-.MAC DO_FOOTER END
-.\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
-.\" placement of page numbers (or footers). It's reset to its original
-.\" position at the end of the macro.
-. if r#SAVED_FOOTER_POS \{ .ch FOOTER \\n[#SAVED_FOOTER_POS]u \}
-. rr #SAVED_FOOTER_POS
-. ie (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
-. nr #SKIP_FOOTER 1
-. \}
-. el \{\
-. vpt 0
-. sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-1v
-. mk y
-. vpt 1
-. \}
-. ev FOOTER
-. po \\n[#DOC_L_MARGIN]u
-. ll \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. FAMILY \\*[$HDRFTR_FAM]
-. FT R
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. LS \\n[#SAVED_LEAD]u
-. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
-. if \\n[#CAPS_ON] \{\
-. nr #CAPS_WAS_ON 1
-. CAPS OFF
-. \}
-. if \\n[#UNDERLINE_ON] \{\
-. nr #UNDERLINE_WAS_ON 1
-. UNDERLINE OFF
-. \}
-. ie \\n[#FOOTERS_ON] \{\
-. if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_HDRFTR \}
-. \}
-. el \{\
-. if \\n[#PAGINATE] \{\
-. if \\n[#PAGE_NUM_V_POS]=2 \{\
-. if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_PAGE_NUMBER \}
-. \}
-. \}
-. \}
-. rr #SKIP_FOOTER
-. if \\n[#CAPS_WAS_ON] \{\
-. CAPS
-. rr #CAPS_WAS_ON
-. \}
-. if \\n[#UNDERLINE_WAS_ON] \{\
-. UNDERLINE
-. rr #UNDERLINE_WAS_ON
-. \}
-. ev
-. rr #SAVED_LEAD
-. bp
-.\" This ev pops the PAGE_TRANSITION environment still active at the
-.\" end of HEADER
-. ev
-.END
-\#
-\# ====================================================================
-\#
-\# +++HEADS+++
-\#
-\# ---Head numbers---
-\#
-\# NUMBER HEADS
-\# ------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #NUMBER_HEAD; sets incrementing register #HEAD_NUM.
-\# *Notes:
-\# Default is OFF.
-\#
-.MAC NUMBER_HEADS END
-. ie '\\$1'' \{\
-. nr #NUMBER_HEAD 1
-. if !\\n[#HEAD_NUM] \{ .nr #HEAD_NUM 0 1 \}
-. \}
-. el \{ .rr #NUMBER_HEAD \}
-.END
-\#
-\#
-\# RESET HEAD NUMBER
-\# -----------------
-\# *Arguments:
-\# <none> | <desired head number>
-\# *Function:
-\# Resets incrementing register #HEAD_NUM to 1 or, if there's
-\# an argument, to user supplied number.
-\# *Notes:
-\# Also resets subhead and parahead numbers. If this is not
-\# desired, subhead and parahead numbers may be reset individually.
-\#
-.MAC RESET_HEAD_NUMBER END
-. ie '\\$1'' \{\
-. nr #HEAD_NUM 0 1
-. nr #SH_NUM 0 1
-. nr #PH_NUM 0 1
-. \}
-. el \{\
-. nr #HEAD_NUM \\$1-1 1
-. nr #SH_NUM 0 1
-. nr #PH_NUM 0 1
-. \}
-.END
-\#
-\#
-\# NUMBER SUBHEADS
-\# ---------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #NUMBER_SH; sets incrementing register #SH_NUM.
-\# *Notes:
-\# Default is OFF.
-\#
-.MAC NUMBER_SUBHEADS END
-. ie '\\$1'' \{\
-. nr #NUMBER_SH 1
-. if !\\n[#SH_NUM] \{ .nr #SH_NUM 0 1 \}
-. \}
-. el \{ .rr #NUMBER_SH \}
-.END
-\#
-\#
-\# RESET SUBHEAD NUMBER
-\# --------------------
-\# *Arguments:
-\# <none> | <desired subhead number>
-\# *Function:
-\# Resets incrementing register #SH_NUM to 1 or, if there's
-\# an argument, to user supplied number.
-\# *Notes:
-\# When the subhead number is reset, it resets the parahead number as
-\# well. If this behaviour is not what's wanted, RESET_SUBHEAD_NUMBER
-\# allows the user to set the parahead number to whatever s/he desires.
-\#
-.MAC RESET_SUBHEAD_NUMBER END
-. ie '\\$1'' \{ .nr #SH_NUM 0 1 \}
-. el \{\
-. nr #SH_NUM \\$1-1 1
-. nr #PH_NUM 0 1
-. \}
-.END
-\#
-\#
-\# NUMBER PARAHEADS
-\# ----------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #NUMBER_PH; sets incrementing register #PH_NUM.
-\# *Notes:
-\# Default is OFF.
-\#
-.MAC NUMBER_PARAHEADS END
-. ie '\\$1'' \{\
-. nr #NUMBER_PH 1
-. if !\\n[#PH_NUM] \{ .nr #PH_NUM 0 1 \}
-. \}
-. el \{ .rr #NUMBER_PH \}
-.END
-\#
-\#
-\# RESET PARAHEAD NUMBER
-\# ---------------------
-\# *Arguments:
-\# <none> | <desired parahead number>
-\# *Function:
-\# Resets incrementing register #PH_NUM to 1 or, if there's
-\# an argument, to user supplied number.
-\# *Notes:
-\# Resetting the parahead number resets the parahead number
-\# only.
-\#
-.MAC RESET_PARAHEAD_NUMBER END
-. ie '\\$1'' \{ .nr #PH_NUM 0 1 \}
-. el \{ nr #SH_NUM \\$1-1 1 \}
-.END
-\#
-\#
-\# ---Main heads---
-\#
-\# HEAD CAPS
-\# ---------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or modifies register #HEAD_CAPS.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HEAD_CAPS END
-. ie '\\$1'' \{ .nr #HEAD_CAPS 1 \}
-. el \{ .nr #HEAD_CAPS 0 \}
-.END
-\#
-\#
-\# HEAD SPACE
-\# ----------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates register #HEAD_SPACE, which toggles whether the space
-\# before heads is 1 extra line space ("off") or 2 ("on"). Used only
-\# in PRINTSTYLE TYPESET.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HEAD_SPACE END
-. ie '\\$1'' \{ .nr #HEAD_SPACE 1 \}
-. el \{ .nr #HEAD_SPACE 0 \}
-.END
-\#
-\#
-\# HEAD UNDERLINE
-\# --------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or modifies register #HEAD_UNDERLINE.
-\# *Notes:
-\# Default is on.
-\#
-.MAC HEAD_UNDERLINE END
-. ie '\\$1'' \{ .nr #HEAD_UNDERLINE 1 \}
-. el \{ .nr #HEAD_UNDERLINE 0 \}
-.END
-\#
-\#
-\# MAIN HEAD
-\# ---------
-\# *Arguments:
-\# "text of main head" ["text of main head"] ...
-\# *Function:
-\# In TYPEWRITE, prints main heads centered, all caps, underlined.
-\# In TYPESET, prints bold main heads 1 point larger than running
-\# text, all caps, underlined.
-\# *Notes:
-\# The HEAD macro requires that double-quotes (") surround
-\# each line of text.
-\#
-.MAC HEAD END
-. br
-.\" Collect head for TOC.
-. nr #ARG_NUM 0 1
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
-. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\\|
-. \}
-. el \{\
-.\" Note that in the .as lines, below, \ at the end has a literal
-.\" space after it.
-. ie \\n[#NUMBER_HEAD] \{\
-. ie \\n[#ARG_NUM]=0 \{\
-. as $TOC_HEAD_ITEM \\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\
-. nr #HEAD_NUM \\n-[#HEAD_NUM]
-. \}
-. el \{\
-. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\
-. \}
-. \}
-. el \{\
-. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\
-. \}
-. \}
-.\}
-.\" Note the use of \!, which transparently embeds the macros used
-.\" in the TOC_ENTRIES diversion. The elements they control must be
-.\" processed literally when the diversion is output.
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-\!. fam C
-\!. ft R
-\!. ps 12
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_HEAD_FAM]
-\!. FT \\*[$TOC_HEAD_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\h'2m'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_HEAD_INDENT]u'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-.\" End collection of head for TOC
-.\" Process head
-. nr #HEAD 1
-. ev HEAD
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. CHECK_INDENT
-. QUAD \\*[$HEAD_QUAD]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. UNDERLINE OFF
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$HEAD_FAM]
-. FT \\*[$HEAD_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HEAD_SIZE_CHANGE]
-. LS \\n[#DOC_LEAD]u
-. \}
-. if r#QUOTE \{ .rr #QUOTE \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. if \\n[#PRINT_STYLE]=1 \{ .ne \\n[#NUM_ARGS]+2 \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#HEAD_SPACE] \{ .ne \\n[#NUM_ARGS]+3 \}
-. el \{ .ne \\n[#NUM_ARGS]+2 \}
-. \}
-. ie \\n[#START] \{\
-. if \\n[#DOC_HEADER]=0 \{ .RLD 1v \}
-. \}
-. el \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !\\n[#LINEBREAK] \{\
-. ALD \\n[#DOC_LEAD]u
-. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#PP_SPACE] \{\
-. ie \\n[#END_QUOTE] \{ . \}
-. el \{\
-. if !\\n[#LINEBREAK] \{\
-. if \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#END_QUOTE] \{\
-. if !\\n[#Q_FITS] \{\
-. RLD \\n[#DOC_LEAD]u
-. if \\n[#PP_ACTIVE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#Q_AT_TOP] \{\
-. RLD \\n[#DOC_LEAD]u
-. if \\n[#Q_AT_TOP] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. if \\n[#LINEBREAK] \{\
-. if \\n[#HEAD_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. \}
-.\" Print head
-. nr #ARG_NUM 0 1
-. if \\n[#HEAD_CAPS] \{ .CAPS \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#HEAD_COLOR]=1 \{\
-. TRAP OFF
-. COLOR \\*[$HEAD_COLOR]
-. EOL
-. TRAP
-. \}
-. \}
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. ie \\n[#NUMBER_HEAD] \{\
-. ie \\n[#ARG_NUM]=0 \{\
-. br
-. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\}
-. el \{ .UNDERSCORE "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\}
-. br
-. \}
-. el \{\
-. br
-. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\}
-. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\}
-. br
-. \}
-. \}
-. el \{\
-. br
-. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\}
-. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\}
-. br
-. \}
-.\}
-. REMOVE_INDENT
-. CAPS OFF
-. ev
-. ALD \\n[#DOC_LEAD]u
-. RESET_SUBHEAD_NUMBER
-. RESET_PARAHEAD_NUMBER
-. if r#START \{ .rr #START \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. if r#QUOTE \{ .rr #QUOTE \}
-. if r#Q_FITS \{ .rr #Q_FITS \}
-. if r#END_QUOTE \{ .rr #END_QUOTE \}
-. if r#LINEBREAK \{ .rr #LINEBREAK \}
-. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
-. if r#PP_ACTIVE \{ .rr #PP_ACTIVE \}
-. rr #ARG_NUM
-. rm $TOC_HEAD_ITEM
-. nr #PP 0
-.END
-\#
-\#
-\# ---Subheads---
-\#
-\# SUBHEAD
-\# -------
-\# *Arguments:
-\# "text of subhead" ["text of subhead"] ...
-\# *Function:
-\# In TYPEWRITE, prints subheads underlined.
-\# In TYPESET, prints subheads bold, .5 points larger than running
-\# text.
-\# In both styles, a line space precedes the subhead, and a small
-\# amount of lead comes after.
-\# *Notes:
-\# As with the HEAD macro, double-quotes (") must surround
-\# each line of text.
-\#
-.MAC SUBHEAD END
-. br
-.\" Collect subhead for TOC.
-. nr #ARG_NUM 0 1
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
-. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\\|
-. \}
-. el \{\
-.\" Note that in the .as lines, below, \ at the end has a literal
-.\" space after it.
-. ie \\n[#NUMBER_SH] \{\
-. ie \\n[#ARG_NUM]=0 \{\
-. as $TOC_SH_ITEM \\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]\
-. nr #SH_NUM \\n-[#SH_NUM]
-. \}
-. el \{\
-. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\
-. \}
-. \}
-. el \{\
-. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\
-. \}
-. \}
-.\}
-.\" Note the use of \!, which transparently embeds the macros used
-.\" in the TOC_ENTRIES diversion. The elements they control must be
-.\" processed literally when the diversion is output.
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-\!. fam C
-\!. ft R
-\!. ps 12
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_SH_FAM]
-\!. FT \\*[$TOC_SH_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\h'4m'\\*[$TOC_SH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_SH_INDENT]u'\\*[$TOC_SH_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-.\" End collection of head for TOC
-.\" Process subhead
-. nr #ARG_NUM 0 1
-. if r#QUOTE \{ .rr #QUOTE \}
-. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
-. ev SUBHEAD
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. CHECK_INDENT
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. QUAD \\*[$SH_QUAD]
-. UNDERLINE OFF
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$SH_FAM]
-. FT \\*[$SH_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SH_SIZE_CHANGE]
-. LS \\n[#DOC_LEAD]u
-. QUAD \\*[$SH_QUAD]
-. \}
-. if \\n[#PRINT_STYLE]=1 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/5 \}
-. if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \}
-. ie \\n[#START] \{ .RLD 1v \}
-. el \{\
-. ie ( \\n[#TRAP_DISTANCE] < (\\n[#DOC_LEAD]*(\\n[#NUM_ARGS]+1)) ) \{\
-. ie \\n[#COLUMNS] \{ .COL_NEXT \}
-. el \{ .bp \}
-. \}
-. el \{\
-. ie \\n[#HEAD]=1 \{ . \}
-. el \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#PP_SPACE]=1 \{\
-. ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. el \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. el \{\
-. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. \}
-. \}
-. \}
-.\" Print subhead
-. if \\n[#PRINT_STYLE]=1 \{\
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. ie \\n[#NUMBER_SH] \{\
-. ie \\n[#ARG_NUM]=0 \{\
-. ie \\n[#NUMBER_HEAD] \{\
-. br
-. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-. el \{\
-. br
-. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-. \}
-. el \{\
-. br
-. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\}
-. el \{ .UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\}
-. br
-. \}
-. \}
-. el \{\
-. br
-. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-.\}
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#SH_COLOR]=1 \{ .COLOR \\*[$SH_COLOR] \}
-. ie \\n[#PP_SPACE]=0 \{\
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. ie \\n[#NUMBER_SH] \{\
-. ie \\n[#ARG_NUM]=0 \{\
-. ie \\n[#NUMBER_HEAD] \{\
-. br
-. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-. el \{\
-. br
-. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-. \}
-. el \{\
-. br
-. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-. \}
-. el \{\
-. br
-. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
-. br
-. \}
-.\}
-. \}
-. el \{\
-. ALD \\n[#DOC_LEAD]u
-. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
-. if \\n[#END_QUOTE] \{ .RLD \\n[#DOC_LEAD]u \}
-. if \\n[#EPIGRAPH] \{ .RLD \\n[#DOC_LEAD]u \}
-. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-. PRINT "\\$[\\n+[#ARG_NUM]]
-.\}
-. ALD \\n[#DOC_LEAD]u
-. \}
-. \}
-. REMOVE_INDENT
-. ev
-. RESET_PARAHEAD_NUMBER
-. if r#START \{ .rr #START \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. if r#Q_FITS \{ .rr #Q_FITS \}
-. if r#END_QUOTE \{ .rr #END_QUOTE \}
-. if r#LINEBREAK \{ .rr #LINEBREAK \}
-. rm $TOC_SH_ITEM
-. nr #PP 0
-. nr #HEAD 2
-.END
-\#
-\# ---Paragraph heads---
-\#
-\# PARAHEAD INDENT
-\# ---------------
-\# *Argument:
-\# <size of indent>
-\# *Function:
-\# Creates or modifies register #PH_INDENT.
-\# *Notes:
-\# Default is 1/2 #PP_INDENT for TYPESET and TYPEWRITE.
-\#
-.MAC PARAHEAD_INDENT END
-. nr #PH_INDENT (\\$1)
-.END
-\#
-\#
-\# PARAHEAD
-\# --------
-\# *Arguments:
-\# "<para head>"
-\# *Function:
-\# Deposits a paragraph head at the start and into the body of a
-\# paragraph.
-\# *Notes:
-\# PARAHEAD *must* come after PP.
-\#
-.MAC PARAHEAD END
-.\" Collect parahead for TOC.
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. ie \\n[#NUMBER_PH] \{\
-. ds $TOC_PH_ITEM \\n+[#PH_NUM].\0\\$1\\|
-. nr #PH_NUM \\n-[#PH_NUM]
-. \}
-. el \{\
-. ds $TOC_PH_ITEM \\$1\\|
-. \}
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-\!. fam C
-\!. ft R
-\!. ps 12
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PH_FAM]
-\!. FT \\*[$TOC_PH_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PH_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\h'6m'\\*[$TOC_PH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_PH_INDENT]u'\\*[$TOC_PH_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-.\" End collection of parahead for TOC
-.\" Process parahead
-. if \\n[#SLANT_ON] \{\
-. nr #SLANT_WAS_ON 1
-\E*[SLANTX]
-. \}
-. ie \\n[#PP]=1 \{\
-. if \\n[#INDENT_FIRST_PARAS] \{\
-. ti \\n[#PH_INDENT]u
-. \}
-. \}
-. el \{ .ti \\n[#PH_INDENT]u \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. UNDERLINE OFF
-. ie \\n[#NUMBER_PH] \{\
-. if \\n[#NUMBER_HEAD] \{\
-. ie \\n[#NUMBER_SH] \{\
-. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
-\0
-. \}
-. el \{\
-. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1
-\0
-. \}
-. \}
-. ie \\n[#NUMBER_SH] \{\
-. if !\\n[#NUMBERED] \{\
-. UNDERSCORE "\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1
-\0
-. \}
-. \}
-. el \{\
-. if !\\n[#NUMBERED] \{\
-. UNDERSCORE "\\n+[#PH_NUM].\\ \\$1
-\0
-. \}
-. \}
-. \}
-. el \{\
-. UNDERSCORE "\\$1
-\0
-. \}
-. if \\n[#SLANT_WAS_ON] \{\
-. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
-. if \\n[#SLANT_MEANS_SLANT] \{\
-\E*[SLANT]\c
-. \}
-. rr #SLANT_WAS_ON
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAM \\*[$PH_FAM]
-. FT \\*[$PH_FT]
-. PT_SIZE \\*[$PH_SIZE_CHANGE]
-. if \\n[#PH_COLOR]=1 \{ .COLOR \\*[$PH_COLOR] \}
-. ie \\n[#NUMBER_PH] \{\
-. if \\n[#NUMBER_HEAD] \{\
-. ie \\n[#NUMBER_SH] \{\
-. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
-. \}
-. el \{\
-. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
-. \}
-. \}
-. ie \\n[#NUMBER_SH] \{\
-. if !\\n[#NUMBERED] \{\
-. PRINT "\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
-. \}
-. \}
-. el \{\
-. if !\\n[#NUMBERED] \{\
-. PRINT "\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
-. \}
-. \}
-. \}
-. el \{\
-. PRINT "\\$1\h'.6m'\c"
-. \}
-. \}
-. FAMILY \\*[$DOC_FAM]
-. FT \\*[$PP_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u
-. if \\n[#PH_COLOR]=1 \m[]\c
-. if \\n[#SLANT_WAS_ON] \{\
-. rr #SLANT_WAS_ON
-\E*[SLANT]\c
-. \}
-. rr #NUMBERED
-. rm $TOC_PH_ITEM
-.END
-\#
-\#
-\# ====================================================================
-\#
-\# +++LINE BREAKS+++
-\#
-\# LINEBREAK CHARACTER
-\# -------------------
-\# *Arguments:
-\# [character] [iterations] [vertical adjustment]
-\# *Function:
-\# Allows user to specify a line break character and the number
-\# of times to repeat it horiontally.
-\# *Notes:
-\# Without an argument, LINEBREAK_CHAR will deposit a blank line.
-\#
-\# Vertical adjustment requires a unit of measure (most likely
-\# "p"), and has to be preceded by +|-
-\#
-.MAC LINEBREAK_CHAR END
-. nr #REPEAT 1
-. ds $LINEBREAK_CHAR \\$1
-. ds $LINEBREAK_CHAR_V_ADJ \\$3
-. if '\\*[$LINEBREAK_CHAR_V_ADJ]'' \{\
-. ds $LINEBREAK_CHAR_V_ADJ +0
-. \}
-. while \\$2>\\n[#REPEAT] \{\
-. as $LINEBREAK_CHAR "\\ \\$1
-. nr #REPEAT \\n[#REPEAT]+1
-.\}
-. rr #REPEAT
-.END
-\#
-\#
-\# LINE BREAK
-\# ----------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Deposits line break character.
-\# *Notes:
-\# If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
-\#
-.MAC LINEBREAK END
-. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
-. po \\n[#DOC_L_MARGIN]u
-. ie '\\*[$LINEBREAK_CHAR]'' \{ .ALD \\n[#DOC_LEAD]u*2 \}
-. el \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#END_QUOTE] \{ . \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#END_QUOTE] \{ . \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. ev LINEBREAK
-. evc 0
-. CENTER
-. PRINT \m[\\*[$LINEBREAK_COLOR]]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\\*[$LINEBREAK_CHAR]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\m[]
-. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
-. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u \}
-. ev
-. QUAD \\*[$DOC_QUAD]
-. \}
-. nr #LINEBREAK 1
-. if r#QUOTE \{ .rr #QUOTE \}
-. if r#END_QUOTE \{ .rr #END_QUOTE \}
-. nr #PP 0
-.END
-\#
-\# ====================================================================
-\#
-\# +++PARAGRAPHS+++
-\#
-\# PARAGRAPH FONT
-\# --------------
-\# *Argument:
-\# <font of running text>
-\# *Function:
-\# Creates or modifies string $PP_FT.
-\# *Notes:
-\# Affects all paragraphs.
-\#
-.MAC PP_FONT END
-. if \\n[#IGNORE] \{ .return \}
-. br
-. ds $PP_FT \\$1
-. FT \\*[$PP_FT]
-.END
-\#
-\#
-\# PARAGRAPH INDENT
-\# ----------------
-\# *Argument:
-\# <amount to indent paragraphs in running text (ipPcm)>
-\# *Function:
-\# Allows user to change the default para indent. The change will
-\# affect the indent of QUOTEs and BLOCKQUOTEs as well.
-\# *Notes:
-\# Default for printstyle TYPEWRITE is 1/2-inch. Default for
-\# printstyle TYPESET is 2 ems. The defaults are set in
-\# PRINTSTYLE, not DEFAULTS.
-\#
-.MAC PARA_INDENT END
-. nr #PP_INDENT (\\$1)
-.END
-\#
-\#
-\# INDENT FIRST PARAGRAPHS
-\# -----------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# By default, the first para of a document, as well as the first
-\# paras of blockquotes and block-style epigraphs are not indented.
-\# When invoked, this macro will indent all paras.
-\# *Notes:
-\# Default is OFF.
-\#
-.MAC INDENT_FIRST_PARAS END
-. ie '\\$1'' \{ .nr #INDENT_FIRST_PARAS 1 \}
-. el \{ .rr #INDENT_FIRST_PARAS \}
-.END
-\#
-\#
-\# INTER-PARAGRAPH SPACING
-\# -----------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Adds a line space between paragraphs in body text. Block quotes
-\# are unaffected.
-\# *Notes:
-\# Default is OFF. PARA_SPACE ON is not recommended for use
-\# with PRINTSTYLE TYPEWRITE.
-\#
-.MAC PARA_SPACE END
-. ie '\\$1'' \{ .nr #PP_SPACE 1 \}
-. el \{ .rr #PP_SPACE \}
-.END
-\#
-\#
-\# PARAGRAPH
-\# ---------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Figures out what to do with paragraphs under differing conditions.
-\# *Notes:
-\# For the time being, there's no automatic widow/orphan control.
-\# Controlling them isn't just a matter of establishing an arbitrary
-\# number of lines needed for a para, since groff doesn't then
-\# handle single line paragraphs gracefully. Usually, the whole
-\# page needs to be tweaked.
-\#
-\# Note the use of transparent line break (\!.br) to get
-\# PP to work within blockquotes and epigraphs.
-\#
-\# PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
-\#
-.MAC PP END
-. br
-. if \\n[#DOC_TYPE]=4 \{\
-. if !'\\n(.z'' \{ .di \}
-. nr #TOTAL_FIELDS \\n[#FIELD]
-. nr #FIELD 0 1
-. nr #NUM_FIELDS 0 1
-. if \\n[#TOTAL_FIELDS]>0 \{\
-. while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\
-. nf
-. LETTERHEAD\\n+[#FIELD]
-. QUAD \\*[$DOC_QUAD]
-. ALD \\n[#DOC_LEAD]u
-. if \\n[#DATE_FIRST]=1 \{ .ALD \\n[#DOC_LEAD]u \}
-. rr #DATE_FIRST
-. rm LETTERHEAD\\n[#FIELD]
-.\}
-. rr #FIELD
-. rr #NUM_FIELDS
-. rr #TOTAL_FIELDS
-. \}
-. \}
-. rr #PP_ACTIVE
-. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
-. if \\n[#PP_STYLE]=1 \{\
-. if \\n[#ENDNOTE] \{\
-. nr #RESET_PARA_SPACE \\n[#PP_SPACE]
-. ie \\n[#EN_PP_SPACE] \{ .PARA_SPACE \}
-. el \{ .PARA_SPACE OFF \}
-. \}
-. br
-. if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
-. if \\n[#COLUMNS] \{\
-. if !\\n[#ENDNOTE] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. \}
-. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
-. ie \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. ie \\n[#ENDNOTE] \{ .vs \\n[#EN_LEAD]u \}
-. el \{ .vs \\n[#DOC_LEAD]u \}
-. QUAD \\*[$DOC_QUAD]
-. UNDERLINE OFF
-. if \\n[#SLANT_ON] \{\
-. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
-. \}
-. \}
-. el \{\
-. ie \\n[#ENDNOTE] \{\
-. FAMILY \\*[$EN_FAM]
-. FT \\*[$EN_FT]
-. PT_SIZE \\n[#EN_PS]u
-. vs \\n[#EN_LEAD]u
-. QUAD \\*[$EN_QUAD]
-. \}
-. el \{\
-. FAMILY \\*[$DOC_FAM]
-. FT \\*[$PP_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u
-. LS \\n[#DOC_LEAD]u
-. QUAD \\*[$DOC_QUAD]
-. \}
-. \}
-. ie \\n[#PP]=0 \{\
-. if \\n[#INDENT_FIRST_PARAS] \{\
-. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
-. el \{ .ti \\n[#PP_INDENT]u \}
-. if '\\n(.z'END_NOTES' \{\
-. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-. \}
-. \}
-. if r#END_QUOTE \{\
-. if \\n[#END_QUOTE] \{\
-. if !\\n[#LINEBREAK] \{\
-. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
-. el \{ .ti \\n[#PP_INDENT]u \}
-. if '\\n(.z'END_NOTES' \{\
-. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-. \}
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. br
-. if \\n[#PP_SPACE] \{\
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#END_QUOTE] \{\
-. ALD \\n[#DOC_LEAD]u
-. rr #END_QUOTE
-. nr #NO_SPACE 1
-. nr #BASELINE_MARK \\n(nl
-. \}
-. el \{\
-. if \\n[#NO_SPACE]=1 \{\
-. rr #NO_SPACE
-. \}
-. if !\\n(nl=\\n[#BASELINE_MARK] \{\
-. ALD \\n[#DOC_LEAD]u
-. rr #BASELINE_MARK
-. \}
-. \}
-. \}
-. \}
-. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
-. el \{ .ti \\n[#PP_INDENT]u \}
-. if '\\n(.z'END_NOTES' \{\
-. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-. \}
-. \}
-. if r#START \{ .rr #START \}
-. if r#QUOTE \{ .rr #QUOTE \}
-. if r#END_QUOTE \{ .rr #END_QUOTE \}
-. if r#HEAD \{ .rr #HEAD \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. if r#Q_FITS \{ .rr #Q_FITS \}
-. if r#LINEBREAK \{ .rr #LINEBREAK \}
-. if \\n[#ENDNOTE] \{\
-. ie \\n[#RESET_PARA_SPACE] \{ .PARA_SPACE \}
-. el \{ .PARA_SPACE OFF \}
-. \}
-. if \\n[#CONDENSE] \{\
-\E*[COND]\c
-. \}
-. if \\n[#EXTEND]=1 \{\
-\E*[EXT]\c
-. \}
-. nr #PP +1
-. \}
-. if \\n[#PP_STYLE]=2 \{\
-\!. br
-. if \\n[#BROKEN_QUOTE] \{\
-. ie \\n(nl=\\n[#PAGE_TOP] \{ .nr #Q_PP 1 \}
-. el \{ .nr #Q_PP 0 \}
-. rr #BROKEN_QUOTE
-. \}
-. ie \\n[#Q_PP]=0 \{\
-. if \\n[#INDENT_FIRST_PARAS] \{\
-. ti \\n[#PP_INDENT]u/2u
-. \}
-. if \\n[#ENDNOTE] \{\
-. ie \\n[#INDENT_FIRSTS] \{ .ti \\n[#PP_INDENT]u/2u \}
-. el \{ .ti 0 \}
-. \}
-. \}
-. el \{\
-. ti \\n[#PP_INDENT]u/2u
-. \}
-. if \\n[#CONDENSE] \{\
-\E*[COND]\c
-. \}
-. if \\n[#EXTEND]=1 \{\
-\E*[EXT]\c
-. \}
-. nr #Q_PP +1
-. \}
-. nr #PP_ACTIVE 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++QUOTES+++
-\#
-\# ---Line for line quotes, i.e. poetry or code snippets---
-\#
-\# UNDERLINE QUOTES
-\# ----------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or modifies register #UNDERLINE_QUOTES (toggle).
-\# If on, line for line quotes are underlined when printstyle
-\# is TYPEWRITE.
-\# *Notes:
-\# Default is ON for printstyle TYPEWRITE.
-\#
-.MAC UNDERLINE_QUOTES END
-. ie '\\$1'' \{ .nr #UNDERLINE_QUOTES 1 \}
-. el \{ .rr #UNDERLINE_QUOTES \}
-.END
-\#
-\#
-\# QUOTE INDENT
-\# ------------
-\# *Argument:
-\# <value by which to multiply PP_INDENT for indented quoted text>
-\# *Function:
-\# Creates or modifies register #Q_OFFSET_VALUE.
-\# *Notes:
-\# Default is 3 for typeset; 2 for typewrite
-\#
-.MAC QUOTE_INDENT END
-. nr #Q_OFFSET_VALUE \\$1
-.END
-\#
-\#
-\# QUOTE_AUTOLEAD
-\# --------------
-\# *Arguments:
-\# <autolead value>
-\# *Function:
-\# Sets autolead for quotes and/or blockquotes.
-\#
-.MAC QUOTE_AUTOLEAD END
-. if '\\$0'QUOTE_AUTOLEAD' \{ .nr #Q_AUTOLEAD \\$1 \}
-. if '\\$0'BLOCKQUOTE_AUTOLEAD' \{ .nr #BQ_AUTOLEAD \\$1 \}
-. if '\\$0'ENDNOTE_QUOTE_AUTOLEAD' \{ .nr #EN_Q_AUTOLEAD \\$1 \}
-. if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' \{ .nr #EN_BQ_AUTOLEAD \\$1 \}
-.END
-\#
-.ALIAS BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
-.ALIAS ENDNOTE_QUOTE_AUTOLEAD QUOTE_AUTOLEAD
-.ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
-\#
-\# ALWAYS FULLSPACE QUOTES
-\# -----------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles register #FULLSPACE_QUOTES.
-\# *Notes:
-\# If user doesn't like the default 1/2 line space above and below
-\# quotes, s/he can turn it off here. Has no effect in TYPEWRITE.
-\#
-.MAC ALWAYS_FULLSPACE_QUOTES END
-. if '\\$1'' \{ .nr #FULLSPACE_QUOTES 1 \}
-. el \{ .rr #FULLSPACE_QUOTES \}
-.END
-\#
-\#
-\# QUOTE
-\# -----
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Indents quoted text on a line for line basis, or turns QUOTE off.
-\# *Notes:
-\# Owing to the need to bottom align TYPESET pages, quoted text gets
-\# diverted so its depth can be measured (in DO_QUOTE) for determining
-\# how much space to put before and after.
-\#
-.MAC QUOTE END
-. br
-. if \\n[#LINENUMBERS]=1 \{\
-. nr #LINENUMBERS 2
-. nr #NEXT_LN \\n(ln
-. nm
-. \}
-. ie '\\$1'' \{\
-. ev QUOTE
-. if \\n[#LINENUMBERS]=2 \{\
-. if \\n[#SILENT_QUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
-. \}
-. nr #IN_DIVER 1
-. nr #QUOTE 1
-. di P_QUOTE
-. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
-. if \\n[#LINENUMBERS]=2 \{\
-. if \\n[#QUOTE_LN]=1 \{\
-. nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
-. \}
-. \}
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
-. ta \\n(.lu
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. LEFT
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$QUOTE_FAM]
-. FT \\*[$QUOTE_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
-. ie !r#Q_AUTOLEAD \{ .LS \\n[#Q_LEAD]u \}
-. el \{\
-. AUTOLEAD \\n[#Q_AUTOLEAD]
-. nr #Q_LEAD \\n(.v
-. \}
-. if \\n[#ENDNOTE] \{\
-. PT_SIZE \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
-. ie !r#EN_Q_AUTOLEAD \{ .LS \\n[#EN_Q_LEAD]u \}
-. el \{\
-. AUTOLEAD \\n[#EN_Q_AUTOLEAD]
-. nr #EN_Q_LEAD \\n(.v
-. \}
-. \}
-. nr #Q_LEAD_REAL \\n(.v
-. LEFT
-. if \\n[#QUOTE_COLOR]=1 \{\
-. nf
-\m[\\*[$QUOTE_COLOR]]
-. EOL
-. \}
-. \}
-. if \\n[#LINENUMBERS]=2 \{\
-. ie \\n[#QUOTE_LN]=1 \{\
-. if '\\*[$Q_LN_GUTTER]'' .ds $Q_LN_GUTTER \\*[$LN_GUTTER]
-. nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
-. \}
-. el \{\
-. if !\\n[#SILENT_QUOTE_LN] \{ .NUMBER_LINES OFF \}
-. \}
-. \}
-. nr #Q_TOP \\n(nl
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_QUOTES] \{\
-. FT I
-. \}
-. \}
-. \}
-. el \{ .DO_QUOTE \}
-.END
-\#
-\# ---Blockquotes---
-\#
-\# BLOCKQUOTE
-\# ----------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Indents quoted text in fill mode and shortens line length
-\# equivalently, or turns BLOCKQUOTE off.
-\# *Notes:
-\# Owing to the need to bottom align TYPESET pages, quoted text gets
-\# diverted so its depth can be measured (in DO_QUOTE) for determining
-\# how much space to put before and after.
-\#
-\# .PP after blockquote is optional if there's only one para,
-\# but REQUIRED if there's more than one.
-\#
-.MAC BLOCKQUOTE END
-. br
-. if \\n[#LINENUMBERS]=1 \{\
-. nr #LINENUMBERS 2
-. nr #NEXT_LN \\n(ln
-. nm
-. \}
-. ie '\\$1'' \{\
-. ev BLOCKQUOTE
-. if \\n[#LINENUMBERS]=2 \{\
-. if \\n[#SILENT_BQUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
-. \}
-. nr #IN_DIVER 1
-. nr #QUOTE 2
-. nr #PP_STYLE 2
-. nr #Q_PP 0
-. di B_QUOTE
-. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. if \\n[#ENDNOTE] \{\
-. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. \}
-. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-. ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. \}
-. \}
-. ta \\n(.lu
-. CHECK_INDENT
-. if \\n[#COLUMNS] \{\
-. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. if \\n[#ENDNOTE] \{\
-. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. \}
-. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-. ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-. \}
-. \}
-. ta \\n(.lu
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#DOC_LEAD]u
-. QUAD LEFT
-. HY OFF
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$BQUOTE_FAM]
-. FT \\*[$BQUOTE_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
-. ie !\\n[#BQ_AUTOLEAD] \{ .LS \\n[#BQ_LEAD]u \}
-. el \{\
-. AUTOLEAD \\n[#BQ_AUTOLEAD]
-. nr #BQ_LEAD \\n(.v
-. \}
-. if \\n[#ENDNOTE] \{\
-. PT_SIZE \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
-. ie !r#EN_BQ_AUTOLEAD \{ .LS \\n[#EN_BQ_LEAD]u \}
-. el \{\
-. AUTOLEAD \\n[#EN_BQ_AUTOLEAD]
-. nr #EN_BQ_LEAD \\n(.v
-. \}
-. \}
-. nr #Q_LEAD_REAL \\n(.v
-. if \\n[#BQUOTE_COLOR]=1 \{\
-. nf
-\m[\\*[$BQUOTE_COLOR]]
-. EOL
-. \}
-. QUAD \\*[$BQUOTE_QUAD]
-. nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-. hy 14
-. \}
-. if \\n[#LINENUMBERS]=2 \{\
-. ie \\n[#BQUOTE_LN]=1 \{\
-. if '\\*[$BQ_LN_GUTTER]'' .ds $BQ_LN_GUTTER \\*[$LN_GUTTER]
-. nm \\n(ln "" \\*[$BQ_LN_GUTTER] -3-\\*[$BQ_LN_GUTTER]
-. \}
-. el \{\
-. if !\\n[#SILENT_BQUOTE_LN] \{ .NUMBER_LINES OFF \}
-. \}
-. \}
-. nr #Q_TOP \\n(nl
-. if \\n[#INDENT_FIRST_PARAS] \{\
-. ie !\\n[#ENDNOTE] \{\
-. if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#PP_INDENT]u/2u \}
-. if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#PP_INDENT]u/2u \}
-. \}
-. el \{\
-. if \\n[#INDENT_FIRSTS]=1 \{\
-. if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
-. if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
-. \}
-. \}
-. \}
-. \}
-. el \{ .DO_QUOTE \}
-.END
-\#
-\#
-\# DO QUOTE
-\# --------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Ends the diversion P_QUOTE or B_QUOTE. Spaces them according to
-\# PRINTSTYLE, whether there's inter-paragraph spacing, and page
-\# position. TYPEWRITE treats spacing the same way in all circumstance
-\# (viz. an extra line space). TYPESET puts in only half
-\# line spaces if the entire quote plus 1 line of body under the quote
-\# fits on the the page; otherwise it puts in a full extra blank
-\# line. (This is to ensure the page remains bottom aligned).
-\#
-.MAC DO_QUOTE END
-. br
-. if \\n[#DIVER_LN_OFF] \{\
-\!. NUMBER_LINES OFF
-. rr #DIVER_LN_OFF
-. \}
-. di
-. rr #IN_DIVER
-. if \\n[#RESET_FN_COUNTERS]=2 \{\
-. if !\\n[#FN_COUNT]=1 \{\
-. if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-. DIVER_FN_2_POST
-. rr #RESET_FN_COUNTERS
-. \}
-. \}
-. \}
-. nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
-. nr #DONE_ONCE 0 1
-. REMOVE_INDENT
-. ev
-. nr #Q_DEPTH (\\n[#DIVER_DEPTH]-\\n[#Q_LEAD_REAL])+\\n[#LEAD]
-. nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
-. SILENT
-. br
-. nf
-. nr #CURRENT_V_POS \\n(nl+\\n[#Q_LEAD_DIFF]+(\\n[#DIVER_DEPTH]-\\n[#Q_DEPTH_REAL])
-. SHIM
-. SILENT OFF
-. nr #Q_SPACE_ADJ \\n[#SHIM]/2
-. nr #TRAP \\n(.t-1
-. if \\n[#ENDNOTE] \{\
-. nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
-. ALWAYS_FULLSPACE_QUOTES
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#START]=1 \{ . \}
-. if \\n[#START]=0 \{\
-. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. if \\n[#HEAD] \{\
-. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#PP_SPACE] \{\
-. ie \\n[#HEAD]>0 \{ . \}
-. el \{\
-. ie \\n[#START] \{ . \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. el \{\
-. ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
-. ie (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH]<\\n[#DOC_LEAD] \{\
-. Q_NOFIT
-. \}
-. el \{\
-. Q_FITS
-. \}
-. \}
-. el \{\
-. Q_NOFIT
-. \}
-. \}
-. \}
-. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-. if \\n[#COLUMNS] \{\
-. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-. \}
-. if !\\n[#ENDNOTE] \{ .po \\n[#Q_OFFSET]u \}
-. if \\n[#ENDNOTE] \{\
-. in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u
-. \}
-. ie \\n[#START]=1 \{\
-. ie !\\n[#Q_LEAD_DIFF]<0 \{ .ALD \\n[#Q_SPACE_ADJ]u \}
-. el \{ .RLD 0-\\n[#Q_LEAD_DIFF]u \}
-. \}
-. el \{\
-. ALD \\n[#Q_SPACE_ADJ]u
-. \}
-. if \\n[#QUOTE]=1 \{\
-. nf
-. P_QUOTE
-. if !\\n[#START] \{ .rr #QUOTE \}
-. \}
-. if \\n[#QUOTE]=2 \{\
-. nf
-. B_QUOTE
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. ALD \\n[#DOC_LEAD]u
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#START] \{\
-. ie \\n[#PP_SPACE] \{\
-.
-. \}
-. el \{\
-. ALD \\n[#DOC_LEAD]u
-. SHIM
-. \}
-. \}
-. el \{\
-. ie \\n[#PP_SPACE] \{ . \}
-. el \{\
-. ie \\n[#HEAD]=1 \{\
-. ALD \\n[#DOC_LEAD]u
-. SHIM
-. \}
-. el \{\
-. ie \\n[#FULLSPACE_QUOTES] \{\
-. ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. el \{ .ALD (\\n[#DOC_LEAD]u/2u) \}
-. ie \\n[#Q_FITS] \{\
-. ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
-. nr #Q_AT_TOP 1
-. nr #DELAY_SHIM 1
-. \}
-. el \{ .SHIM \}
-. \}
-. el \{\
-. SHIM
-.\" Make sure that Q_LEAD_DIFF is not added to the first line of
-.\" normal text at the top of any page following output of a quote
-.\" whose last line falls on B_MARGIN of the previous page.
-. if \\n(nl=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
-. PRINT \&
-. br
-. sp -1v-\\n[#Q_LEAD_DIFF]u
-. \}
-. \}
-. \}
-. \}
-. \}
-. \}
-. if \\n[#LINENUMBERS]=2 \{\
-. nr #LINENUMBERS 1
-. ie \\n[#RESTORE_LN_NUM]=1 \{ .nm \\n[#NEXT_LN] \}
-. el \{ .nm +0 \}
-. \}
-. if \\n[#ENDNOTE] \{ .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] \}
-. if r#HEAD \{ .rr #HEAD \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. rr #Q_PP
-. rr #LINEBREAK
-. nr #PP_STYLE 1
-. nr #END_QUOTE 1
-. if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
-. if \\n[#ENDNOTE] \{\
-. in \\n[#EN_TEXT_INDENT]u
-. \}
-. if \\n[#COLUMNS] \{\
-. if !\\n[#ENDNOTE] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. if \\n[#ENDNOTE] \{\
-. in \\n[#EN_TEXT_INDENT]u
-. \}
-. \}
-. ie !\\n[#ENDNOTE] \{\
-. nr #RESET_PP_INDENT \\n[#PP_INDENT]
-. PARA_INDENT 0
-. PP
-. PARA_INDENT \\n[#RESET_PP_INDENT]u
-. QUAD \\*[$DOC_QUAD]
-. \}
-. el \{\
-. nr #RESET_EN_PP_INDENT \\n[#EN_PP_INDENT]
-. ENDNOTE_PARA_INDENT 0
-. PP
-. ENDNOTE_PARA_INDENT \\n[#RESET_EN_PP_INDENT]u
-. QUAD \\*[EN_QUAD]
-. \}
-. if r#DELAY_SHIM \{\
-. SHIM
-. rr #DELAY_SHIM
-. \}
-.END
-\#
-\#
-\# Utility macros for DO_QUOTE
-\# ---------------------------
-\#
-.MAC Q_FITS END
-. nr #Q_FITS 1
-. ie \\n[#HEAD]=1 \{\
-. ALD \\n[#Q_LEAD_DIFF]u
-. \}
-. el \{\
-. ie \\n[#START] \{ . \}
-. el \{\
-. ie \\n[#FULLSPACE_QUOTES] \{\
-. ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
-. \}
-. el \{\
-.\" This seems to be the only way to get the baseline of quotes that start
-.\" at the top of the page to fall on the first line of the "grid" (i.e on
-.\" the first legal baseline of the page).
-. ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
-. if \\n[#QUOTE]=1 \{\
-. rn P_QUOTE Q_TEMP
-. di P_QUOTE
-. vs \\n[#Q_LEAD]u
-. PRINT \&
-. sp -1v+\\n[#Q_LEAD_DIFF]u
-. Q_TEMP
-. di
-. \}
-. if \\n[#QUOTE]=2 \{\
-. rn B_QUOTE Q_TEMP
-. di B_QUOTE
-. vs \\n[#BQ_LEAD]u
-. PRINT \&
-. sp -1v+\\n[#Q_LEAD_DIFF]u
-. Q_TEMP
-. di
-. \}
-. rm Q_TEMP
-. \}
-. el \{\
-. ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u
-. \}
-. \}
-. \}
-. if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
-. \}
-.END
-\#
-.MAC Q_NOFIT END
-. rr #Q_FITS
-. ie r#HEAD \{\
-. if \\n[#HEAD]=1 \{ . \}
-. \}
-. el \{\
-. ie \\n[#FULLSPACE_QUOTES] \{\
-. ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
-. el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
-. \}
-. el \{ .ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u \}
-. nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
-. while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
-.
-.\}
-. nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
-. nr #Q_SPACE_ADJ (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
-.\" Hack to deal with the fact that even though the above routine
-.\" makes the bottom line of the quote fall exactly on the bottom
-.\" margin when traps are disabled, it refuses to do so when traps
-.\" are on. The difference by which it's off is #Q_LEAD_DIFF
-.\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above). Hack
-.\" solution: temporarily lower the FOOTER trap position.
-. nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS]
-. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# BREAK QUOTE
-\# -----------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Ends the diversion P_QUOTE or B_QUOTE, breaks to a new
-\# page, and reinvokes BLOCKQUOTE.
-\# *Notes:
-\# Because quotes go into a diversion before they're output,
-\# footnotes in quotes that cross pages behave erratically. The footnote
-\# isn't processed until the diversion ends, hence the footnote
-\# marker in the quote isn't always correct for the new page (it's
-\# picked up from the old one). BREAK_QUOTE is a workaround for
-\# this problem.
-\#
-.MAC BREAK_QUOTE END
-. br
-. di
-. nr #BROKEN_QUOTE 1
-. REMOVE_INDENT
-. ev
-. nr #Q_DEPTH \\n[#DIVER_DEPTH]+\\n[#LEAD]
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. if \\n[#HEAD] \{\
-. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#PP_SPACE] \{\
-. ie \\n[#HEAD]=1 \{ . \}
-. el \{\
-. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. el \{\
-. rr #Q_FITS
-. ie r#HEAD \{\
-. if \\n[#HEAD]=1 \{ . \}
-. \}
-. el \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. \}
-. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \}
-. po \\n[#Q_OFFSET]u
-. if \\n[#QUOTE]=1 \{\
-. nf
-. P_QUOTE
-. \}
-. if \\n[#QUOTE]=2 \{\
-. nf
-. B_QUOTE
-. \}
-. if r#HEAD \{ .rr #HEAD \}
-. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
-. rr #Q_PP
-. rr #LINEBREAK
-. nr #PP_STYLE 1
-. nr #END_QUOTE 1
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_QUOTES] \{\
-. UNDERLINE OFF
-. \}
-. \}
-. po \\n[#L_MARGIN]u
-. if \\n[#COLUMNS] \{\
-. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-. nr #L_MARGIN \\n(.o
-. \}
-. QUAD \\*[$DOC_QUAD]
-. sp |\\n[#PAGE_LENGTH]u \" To trip footer/header
-. BLOCKQUOTE
-.END
-\#
-\# ====================================================================
-\#
-\# +++PAGINATION+++
-\#
-\# PAGINATE
-\# --------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns page numbering off or on during document processing.
-\# *Notes:
-\# Default is on.
-\#
-.MAC PAGINATE END
-. ie '\\$1'' \{ .nr #PAGINATE 1 \}
-. el \{ .nr #PAGINATE 0 \}
-.END
-\#
-\#
-\# SUSPEND PAGINATION (before ENDNOTES)
-\# ------------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Creates register #SUSPEND_PAGINATION
-\# *Notes:
-\# Useful only to suspend pagination before outputting endnotes.
-\#
-.MAC SUSPEND_PAGINATION END
-. nr #SUSPEND_PAGINATION 1
-.END
-\#
-\# RESTORE PAGINATION (after ENDNOTES)
-\# ------------------
-\# *Argument:
-\# <none>
-\# *Function:
-\# Removes register #SUSPEND_PAGINATION. Creates register
-\# #DEFER_PAGINATION
-\# *Notes:
-\# Useful only to restore pagination after outputting endnotes.
-\#
-.MAC RESTORE_PAGINATION END
-. rr #SUSPEND_PAGINATION
-. if \\n[#PAGE_NUM_V_POS]=1 \{ .PAGINATE \}
-. if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #DEFER_PAGINATION 1 \}
-.END
-\#
-\#
-\# PAGE NUMBER FORMAT
-\# ------------------
-\# *Arguments:
-\# DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\# Assigns user entered format to #PAGENUMBER.
-\#
-.MAC PAGENUM_STYLE END
-. nr #PAGENUM_STYLE_SET 1
-. if '\\$1'DIGIT' \{\
-. ds $PAGENUM_STYLE \\$1
-. af #PAGENUMBER 1
-. \}
-. if '\\$1'ROMAN' \{\
-. ds $PAGENUM_STYLE \\$1
-. af #PAGENUMBER I
-. \}
-. if '\\$1'roman' \{\
-. ds $PAGENUM_STYLE \\$1
-. af #PAGENUMBER i
-. \}
-. if '\\$1'ALPHA' \{\
-. ds $PAGENUM_STYLE \\$1
-. af #PAGENUMBER A
-. \}
-. if '\\$1'alpha' \{\
-. ds $PAGENUM_STYLE \\$1
-. af #PAGENUMBER a
-. \}
-.END
-\#
-\#
-\# HYPHENS AROUND PAGE NUMBERS
-\# ---------------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Creates or modifies register #PAGE_NUM_HYPHENS.
-\# Used to dis/enable hyphens on either side of page numbers.
-\# *Notes:
-\# Default is on.
-\#
-.MAC PAGENUM_HYPHENS END
-. nr #PAGE_NUM_HYPHENS_SET 1
-. ie '\\$1'' \{ .nr #PAGE_NUM_HYPHENS 1 \}
-. el \{ .rr #PAGE_NUM_HYPHENS \}
-.END
-\#
-\#
-\# PAGENUMBER POSITION
-\# -------------------
-\# *Arguments:
-\# TOP | BOTTOM LEFT | CENTER | RIGHT
-\# *Function:
-\# Creates or modifies various PAGE_NUM_H | V_POS registers.
-\# Used to position page numbers.
-\# *Notes:
-\# Default is center/bottom.
-\#
-.MAC PAGENUM_POS END
-. nr #PAGE_NUM_POS_SET 1
-. if '\\$1'TOP' \{ .nr #PAGE_NUM_V_POS 1 \}
-. if '\\$1'BOTTOM' \{ .nr #PAGE_NUM_V_POS 2 \}
-. if '\\$2'LEFT' \{ .nr #PAGE_NUM_H_POS 1 \}
-. if '\\$2'CENTER' \{ .nr #PAGE_NUM_H_POS 2 \}
-. if '\\$2'CENTRE' \{ .nr #PAGE_NUM_H_POS 2 \}
-. if '\\$2'RIGHT' \{ .nr #PAGE_NUM_H_POS 3 \}
-.END
-\#
-\#
-.MAC PN_WITH_HYPHENS END
-. nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12
-. ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u'
-. PRINT \m[\\*[$PAGENUM_COLOR]]\\*[$HYPHEN]\|\\n[#PAGENUMBER]\|\\*[$HYPHEN]
-.br
-.END
-\#
-\#
-\# PRINT PAGE NUMBER
-\# -----------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Prints page number if PAGINATE=1.
-\#
-.MAC PRINT_PAGE_NUMBER END
-. ev PAGENUMBER
-. nf
-. na
-. po \\n[#DOC_L_MARGIN]u
-. ll \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. FAMILY \\*[$PAGE_NUM_FAM]
-. FT \\*[$PAGE_NUM_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
-. if o \{\
-. ie \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT \}
-. el \{ .RIGHT \}
-. \}
-. if e \{\
-. ie \\n[#PAGE_NUM_H_POS]=1 \{ .RIGHT \}
-. el \{ .LEFT \}
-. \}
-. if \\n[#PAGE_NUM_H_POS]=2 \{ .CENTER \}
-. if \\n[#RECTO_VERSO]=0 \{\
-. if \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT \}
-. if \\n[#PAGE_NUM_H_POS]=2 \{ .CENTER \}
-. if \\n[#PAGE_NUM_H_POS]=3 \{ .RIGHT \}
-. \}
-. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-. if \\n[#EN_FIRST_PAGE] \{\
-. if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
-. rr #EN_FIRST_PAGE
-. \}
-. if \\n[#BIB_FIRST_PAGE] \{\
-. if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
-. rr #BIB_FIRST_PAGE
-. \}
-. if \\n[#TOC_FIRST_PAGE] \{\
-. PAGENUMBER 1
-. rr #TOC_FIRST_PAGE
-. \}
-. ie \\n[#DRAFT_WITH_PAGENUM] \{\
-. ie '\\*[$REVISION]'' \{\
-. PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]"
-. \}
-. el \{\
-. ie '\\*[$DRAFT]'' \{\
-. PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
-. \}
-. el \{\
-. PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#PAGE_NUM_HYPHENS] \{\
-. if '\\*[$PAGENUM_STYLE]'DIGIT' \{\
-. di NULL
-1\\R'#CAP_HEIGHT \\n[.cht]'
-. di
-. PN_WITH_HYPHENS
-. \}
-. if '\\*[$PAGENUM_STYLE]'ROMAN' \{\
-. di NULL
-I\\R'#CAP_HEIGHT \\n[.cht]'
-. di
-. PN_WITH_HYPHENS
-. \}
-. if '\\*[$PAGENUM_STYLE]'ALPHA' \{\
-. di NULL
-E\\R'#CAP_HEIGHT \\n[.cht]'
-. di
-. PN_WITH_HYPHENS
-. \}
-. if '\\*[$PAGENUM_STYLE]'roman' \{\
-. PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
-. \}
-. if '\\*[$PAGENUM_STYLE]'alpha' \{\
-. PRINT "\m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-"
-. \}
-. \}
-. el \{ .PRINT "\m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]" \}
-. \}
-. ev
-.END
-\#
-\# ====================================================================
-\#
-\# +++FOOTNOTES+++
-\#
-.ig
-Mom's footnote handling is baroque, to say the least. There are
-redundancies in a number of the macros involved, as well as some
-registers that probably don't get used anymore. The baggage is left
-in in case some new footnote oddity/challenge gets thrown my way.
-
-The macros are heavily commented.
-..
-\#
-\# FOOTNOTE AUTOLEAD
-\# -----------------
-\# *Arguments:
-\# <autolead value for footnotes>
-\# *Function:
-\# Creates or modifies register #FN_AUTOLEAD.
-\# *Notes:
-\# Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
-\#
-.MAC FOOTNOTE_AUTOLEAD END
-. nr #FN_AUTOLEAD \\$1
-.END
-\#
-\#
-\# FOOTNOTE MARKERS
-\# ----------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns generation of footnote markers on or off.
-\# *Notes:
-\# Default is on.
-\#
-.MAC FOOTNOTE_MARKERS END
-. ie '\\$1'' \{ .nr #FN_MARKERS 1 \}
-. el \{ .nr #FN_MARKERS 0 \}
-.END
-\#
-\#
-\# FOOTNOTE MARKER STYLE
-\# ---------------------
-\# *Arguments:
-\# STAR | NUMBER | LINE
-\# *Function:
-\# Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
-\# the style of footnote markers.
-\# *Notes:
-\# 1=STAR; 2=NUMBER; 3=LINE. LINE means "use output line numbers".
-\# Default is STAR.
-\#
-.MAC FOOTNOTE_MARKER_STYLE END
-. if '\\$1'STAR' \{\
-. if \\n[#FN_MARKER_STYLE]=3 \{\
-. if !\\n[#NEWPAGE]=1 \{\
-. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE.
-. tm1 " You cannot change footnote marker style without
-. tm1 " first breaking to a new page with NEWPAGE.
-. tm1 " Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n(.c.
-. return
-. \}
-. \}
-. if \\n[#RUN_ON]=1 \{\
-. tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n(.c is incompatible
-. tm1 " with RUN_ON footnotes. Ignoring request.
-. return
-. \}
-. nr #FN_MARKER_STYLE 1
-. if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
-. FOOTNOTE_MARKERS
-. \}
-. if '\\$1'NUMBER' \{\
-. if \\n[#FN_MARKER_STYLE]=3 \{\
-. if !\\n[#NEWPAGE]=1 \{\
-. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER.
-. tm1 " You cannot change footnote marker style without
-. tm1 " first breaking to a new page with NEWPAGE.
-. tm1 " Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c.
-. return
-. \}
-. \}
-. if \\n[#RUN_ON]=1 \{\
-. tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c is incompatible
-. tm1 " with RUN_ON footnotes. Ignoring request.
-. return
-. \}
-. nr #FN_MARKER_STYLE 2
-. if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
-. FOOTNOTE_MARKERS
-. \}
-. if '\\$1'LINE' \{\
-. nr #FN_MARKER_STYLE 3
-. FOOTNOTE_MARKERS OFF
-. if !\\n[#FN_LN_SEP] \{\
-. if !\\n[#FN_LN_BRACKETS] \{ .FOOTNOTE_LINENUMBER_BRACKETS SQUARE \}
-. \}
-. \}
-.END
-\#
-\#
-\# FOOTNOTE LINENUMBER MARK
-\# ------------------------
-\# *Function:
-\# This string, when called inline, stores the current output line
-\# number in register #FN_MARK for use with FOOTNOTE.
-\#
-.ds FN-MARK \R'#FN_MARK \En(ln'
-\#
-\#
-\# FOOTNOTE LINENUMBER SEPARATOR
-\# -----------------------------
-\# *Argument:
-\# <user-defined separator>
-\# *Function:
-\# Stores user-defined separator (for use then
-\# FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP. The
-\# separator is intended to be used when the user wishes a
-\# separator, rather than the choice of brackets offered by
-\# FOOTNOTE_LINENUMBER_BRACKETS.
-\#
-.MAC FOOTNOTE_LINENUMBER_SEPARATOR END
-. rr #FN_LN_BRACKETS
-. nr #FN_LN_SEP 1
-. ds $FN_LN_SEP "\\$1
-.END
-\#
-\#
-\# FOOTNOTE LINENUMBER BRACKETS
-\# ----------------------------
-\# *Argument:
-\# PARENS | SQUARE | BRACES or ( | [ | {
-\# *Function:
-\# Sets register #FN_LN_BRACKETS to 1, and creates strings
-\# $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given
-\# argument.
-\#
-.MAC FOOTNOTE_LINENUMBER_BRACKETS END
-. rr #FN_LN_SEP
-. nr #FN_LN_BRACKETS 1
-. if '\\$1'PARENS' \{\
-. ds $FN_OPEN_BRACKET (
-. ds $FN_CLOSE_BRACKET )
-. \}
-. if '\\$1'(' \{\
-. ds $FN_OPEN_BRACKET (
-. ds $FN_CLOSE_BRACKET )
-. \}
-. if '\\$1'SQUARE' \{\
-. ds $FN_OPEN_BRACKET [
-. ds $FN_CLOSE_BRACKET ]
-. \}
-. if '\\$1'[' \{\
-. ds $FN_OPEN_BRACKET [
-. ds $FN_CLOSE_BRACKET ]
-. \}
-. if '\\$1'BRACES' \{\
-. ds $FN_OPEN_BRACKET {
-. ds $FN_CLOSE_BRACKET }
-. \}
-. if '\\$1'{' \{\
-. ds $FN_OPEN_BRACKET {
-. ds $FN_CLOSE_BRACKET }
-. \}
-.END
-\#
-\#
-\# RESET FOOTNOTE NUMBER
-\# ---------------------
-\# *Arguments:
-\# <none> | PAGE
-\# *Function:
-\# Resets register #FN_NUMBER to 1. If argument is PAGE, creates
-\# toggle #RESET_FN_NUMBER which is checked in HEADER. If 1,
-\# numbered footnotes on every page start at 1.
-\#
-.MAC RESET_FOOTNOTE_NUMBER END
-. ie '\\$1'' \{ .nr #FN_NUMBER 0 1 \}
-. el \{ .nr #RESET_FN_NUMBER 1 \}
-.END
-\#
-\#
-\# FOOTNOTE RULE LENGTH
-\# --------------------
-\# *Arguments:
-\# <length of rule used to separate footnotes from running text>
-\# *Function:
-\# Creates or modifies registers #FN_RULE_LENGTH.
-\# *Notes:
-\# Requires unit of measure (iPpcm).
-\# Default is 4P for both PRINTSTYLEs.
-\#
-.MAC FOOTNOTE_RULE_LENGTH END
-. nr #FN_RULE_LENGTH (\\$1)
-.END
-\#
-\#
-\# FOOTNOTE_RULE_ADJ
-\# -----------------
-\# *Arguments:
-\# <number of points to raise footnote rule from it's baseline position>
-\# *Function:
-\# Creates or modifies register #FN_RULE_ADJ.
-\# *Notes:
-\# Default is 3p for both TYPESTYLES.
-\#
-\# Requires unit of measure.
-\#
-.MAC FOOTNOTE_RULE_ADJ END
-. nr #FN_RULE_ADJ (\\$1)
-.END
-\#
-\#
-\# FOOTNOTE RULE
-\# -------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns printing of footnote separator rule on or off. If invoked as
-\# PRINT_FOOTNOTE_RULE, prints footnote separator rule.
-\# *Notes:
-\# Default is on.
-\#
-\# Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
-\# if the footnote number (#FN_COUNT) is 1.
-\#
-.MAC FOOTNOTE_RULE END
-. ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
-. if \\n[#FN_RULE]=0 \{ .RLD 1v \}
-\!. PT_SIZE 12
-. RLD 1v
-. LEFT
-. PRINT \v'-\\n[#FN_RULE_ADJ]u'\l'\\n[#FN_RULE_LENGTH]u'\v'+\\n[#FN_RULE_ADJ]u'
-\!. PT_SIZE \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
-. QUAD \\*[$FN_QUAD]
-. \}
-. el \{\
-. ie '\\$1'' \{ .nr #FN_RULE 1 \}
-. el \{ .nr #FN_RULE 0 \}
-. \}
-.END
-\#
-\#
-\# FOOTNOTE SPACING
-\# ----------------
-\# *Arguments:
-\# <per item post footnote spacing> | <anything>
-\# *Function:
-\# Enables printing of post footnote spacing.
-\# *Notes:
-\# Default is no space.
-\#
-.MAC FOOTNOTE_SPACING END
-. ie \B'\\$1' \{ .nr #FN_SPACE (\\$1) \}
-. el \{ .nr #FN_SPACE 0 \}
-.END
-\#
-\#
-\# RUN ON FOOTNOTES
-\# ----------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Toggles run-on footnotes on or off.
-\#
-.MAC FOOTNOTES_RUN_ON END
-. ie '\\$1'' \{\
-. if \\n[#FN_COUNT]>0 \{\
-. tm1 "[mom]: Switching to run-on footnotes at line \\n(.c will cause
-. tm1 " you to loose footnotes already formatted for this page.
-. tm1 " Ignoring request FOOTNOTES_RUN_ON.
-. rr #RUN_ON
-. return
-. \}
-. nr #RUN_ON 1
-. if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
-. if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
-. \}
-. el \{\
-. if \\n[#FN_COUNT]>0 \{\
-. if \\n[#RUN_ON]=1 \{\
-. tm1 "[mom]: Switching off run-on footnotes at line \\n(.c will cause
-. tm1 " you to loose footnotes already formatted for this page.
-. tm1 " Ignoring request FOOTNOTES_RUN_ON \\$1.
-. return
-. \}
-. \}
-. rr #RUN_ON
-. \}
-.END
-\#
-\#
-.MAC RUNON_WARNING END
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. tm1 "[mom]: The footnote marker style active at line \\n(.c is STAR,
-. tm1 " which is incompatible with run-on footnotes. Please change
-. tm1 " the footnote marker style to LINE. Continuing to process,
-. tm1 " but ignoring request FOOTNOTES_RUN_ON.
-. rr #RUN_ON
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. tm1 "[mom]: The footnote marker style active at line \\n(.c is NUMBER,
-. tm1 " which is incompatible with run-on footnotes. Please change
-. tm1 " the footnote marker style to LINE. Continuing to process,
-. tm1 " but ignoring request FOOTNOTES_RUN_ON.
-. rr #RUN_ON
-. \}
-.END
-\#
-\# FOOTNOTE
-\# --------
-\# *Arguments:
-\# <none> | INDENT L|LEFT|R|RIGHT|B|BOTH <indent value> | <anything>
-\# *Function:
-\# Begins collecting and diverting footnote text if no argument
-\# given. Otherwise, ends diversion FOOTNOTES, measures footnote
-\# depth, and sets footnote trap.
-\# *Notes:
-\# The input line preceding a footnote call MUST terminate with \c
-\# or the footnote marker will be spaced away from the word it
-\# should be joined to.
-\#
-\# If FOOTNOTE is invoked with INDENT, the footnote will
-\# be indented. An indent style and an indent value must be given.
-\# Subsequent footnotes will NOT be indented; INDENT must be given
-\# for each footnote the user wants indented.
-\#
-.MAC FOOTNOTE END
-. if !\\n(.u \{ .nr #ADD_BREAK 1 \}
-. ie '\\$1'' \{\
-. if \\n[#FN_MARKER_STYLE]=3 \{\
-. if !\\n[#LINENUMBERS] \{\
-. tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
-. tm1 " FOOTNOTE_MARKER_STYLE is LINE.
-. ab Aborting on FOOTNOTE at line \\n(.c.
-. \}
-. if \\n[#FN_MARK]=0 \{ .nr #FN_MARK \\n(ln \}
-. nr #FN_MARK_2 \\n(ln
-. if '\\n(.z'P_QUOTE' \{\
-. nr #FN_MARK -1
-. nr #FN_MARK_2 -1
-. \}
-. if \\n[#IN_DIVER]=1 \{\
-. if '\\n(.z'P_QUOTE' \{\
-. if !\\n[#QUOTE_LN]=1 \{\
-. if !\\n[#SILENT_QUOTE_LN]=1 \{\
-. tm1 "[mom]: You have requested a line-numbered footnote inside a
-. tm1 " QUOTE at line \\n(.c, but line-numbering has not been enabled
-. tm1 " for QUOTES. Printing footnote with label "0".
-. rr #FN_MARK
-. rr #FN_MARK_2
-. \}
-. \}
-. \}
-. if '\\n(.z'B_QUOTE' \{\
-. if !\\n[#BQUOTE_LN]=1 \{\
-. if !\\n[#SILENT_BQUOTE_LN]=1 \{\
-. tm1 "[mom]: You have requested a line-numbered footnote inside a
-. tm1 " BLOCKQUOTE at line \\n(.c, but line-numbering has not been enabled
-. tm1 " for BLOCKQUOTES. Printing footnote with label "0".
-. rr #FN_MARK
-. rr #FN_MARK_2
-. \}
-. \}
-. \}
-. \}
-. \}
-.\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE
-.\" or EPIGRAPH.
-. if \\n[#IN_DIVER]=1 \{\
-. nr #PAGE_POS \\n(nl+\\n(.d+\\n[#DOC_LEAD]
-. nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1)
-. nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
-.\" Are we on a "defer" line? If so, defer the text of the footnote.
-. ie \\n[#SPACE_TO_FOOTER]=\\n[#DOC_LEAD]:\\n[#SPACE_TO_FOOTER]=0 \{\
-. nr #DIVER_FN 2 \" treat like a normal deferred footnote
-. \}
-. el \{\
-. nr #DIVER_FN 2 \" treat like a normal footnote
-. \}
-. if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \{\
-. nr #DIVER_FN 1 \" move this footnote
-. \}
-.\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE
-.\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
-.\" line may *seem* to belong to the final line of the page, but will,
-.\" in fact, become the first word of the subsequent page. In such
-.\" circumstances, we want the the footnote to be treated as a "moved"
-.\" diversion footnote.
-. if \\n(.k>\\n(.l \{ .nr #DIVER_FN 1 \}
-. if r#DIVER_FN \{\
-. if !\\n[#DIVER_FN]=2 \{ .\\n+[#DONE_ONCE] \}
-.\" A footnote inside a diversion will become the 1st footnote on the
-.\" following page/column.
-. if \\n[#DIVER_FN]=1 \{ .DIVER_FN_1_PRE \}
-.\" A footnote inside a diversion that should be treated like a
-.\" normal footnote (including defers.)
-. if \\n[#DIVER_FN]=2 \{ .DIVER_FN_2_PRE \}
-. \}
-. nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1
-. nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1
-. \}
-.\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or
-.\" EPIGRAPH.
-.\"
-.\" Test for situation where, because a final line of running text
-.\" isn't yet adjusted at this point, the last word on the line may
-.\" *seem* to belong to the final line of the page, but will, in
-.\" fact, become the first word of the subsequent page. In such
-.\" circumstances, we want the the footnote marker in running text to
-.\" be the correct one for the 1st footnote on the page.
-. if \\n(.k>\\n(.l \{\
-. if (\\n(nl+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. nr #FN_COUNT_FOR_COLS 0 1
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#RESET_FN_NUMBER] \{\
-. nr #FN_NUMBER 0 1
-. nr #NOT_YET_ADJUSTED 1
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. nr #FN_COUNT 0 1
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#RESET_FN_NUMBER] \{\
-. nr #FN_NUMBER 0 1
-. nr #NOT_YET_ADJUSTED 1
-. \}
-. \}
-. \}
-. \}
-. \}
-. if \\n[#FN_MARKERS] \{\
-.\" Housekeeping
-. if \\n[#CONDENSE] \{ \*[CONDX]\c \}
-. if \\n[#EXTEND] \{ \*[EXTX]\c \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_ON] \{\
-. nr #UNDERLINE_WAS_ON 1
-. UNDERLINE OFF
-. \}
-. \}
-.\" Add footnote markers to running text...
-. if !\\n[#NO_FN_MARKER] \{\
-.\" ...but not if TERMINATE has not been called
-. if !r#TERMINATE \{\
-.\" Marker style star/dagger/double-dagger
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-.\" Columnar docs either move col to col, or last col to next page.
-.\" They require their own special FN_COUNT because regular FN_COUNT
-.\" is used to figure out things like whether or not to put a rule
-.\" above footnotes (in addition to keeping track of the footnote
-.\" count in non-columnar docs).
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#FN_COUNT_FOR_COLS]=0 \{ .PRINT \*[BU2]*\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT \*[BU1]\(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \*[BU2]**\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \*[BU1]\(dg\(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \(dd\(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \*[BU2]***\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dd\(dd\(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \*[BU2]****\c \}
-. \}
-. el \{\
-. if \\n[#FN_COUNT]=0 \{ .PRINT \*[BU2]*\c \}
-. if \\n[#FN_COUNT]=1 \{ .PRINT \*[BU1]\(dg\c \}
-. if \\n[#FN_COUNT]=2 \{ .PRINT \(dd\c \}
-. if \\n[#FN_COUNT]=3 \{ .PRINT \*[BU2]**\c \}
-. if \\n[#FN_COUNT]=4 \{ .PRINT \*[BU1]\(dg\(dg\c \}
-. if \\n[#FN_COUNT]=5 \{ .PRINT \(dd\(dd\c \}
-. if \\n[#FN_COUNT]=6 \{ .PRINT \*[BU2]***\c \}
-. if \\n[#FN_COUNT]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
-. if \\n[#FN_COUNT]=8 \{ .PRINT \(dd\(dd\(dd\c \}
-. if \\n[#FN_COUNT]=9 \{ .PRINT \*[BU2]****\c \}
-. \}
-. \}
-.\" Marker style superscript numbers
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#PRINT_STYLE]=1 \{ .PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c" \}
-. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c" \}
-. \}
-. \}
-. \}
-. \}
-.\" More housekeeping
-.\"
-.\" #SPACE_REMAINING is the space left between where we are
-.\" on the page and the bottom margin. It's used to determine whether
-.\" or not the footnote will overflow, and how many lines of
-.\" footnotes will fit on the page if some have to overflow.
-. ie \\n[#DIVER_FN]=2 \{\
-. nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS])
-. \}
-. el \{\
-. nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n(nl
-. \}
-. if \\n[#FROM_DIVERT_FN]=1 \{\
-. nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]
-. rr #FROM_DIVERT_FN
-. \}
-. nr #PP_STYLE_PREV \\n[#PP_STYLE]
-. nr #PP_STYLE 2
-. if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
-. INDENT_FIRST_PARAS
-.\" Prepare FOOTNOTE to receive footnote text.
-. ev FOOTNOTES
-. ll \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS]=1 \{\
-. ll \\n[#COL_L_LENGTH]u
-. ta \\n(.lu
-. \}
-. if \\n[#FN_R_INDENT] \{\
-. ll -\\n[#FN_R_INDENT]u
-. ta \\n(.lu
-. \}
-. if \\n[#FN_BR_INDENT] \{\
-. ll -\\n[#FN_BR_INDENT]u
-. ta \\n(.lu
-. \}
-. FAMILY \\*[$FN_FAM]
-. FT \\*[$FN_FT]
-. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
-. AUTOLEAD \\n[#FN_AUTOLEAD]
-. QUAD \\*[$FN_QUAD]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
-. el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
-. QUAD LEFT
-. HY OFF
-. \}
-. nr #FN_LEAD \\n[#LEAD]
-.\" Begin diversion FOOTNOTES or FN_IN_DIVER
-. ie r#COUNTERS_RESET \{\
-. ie \\n[#DONE_ONCE]=1 \{\
-. ie \\n[#RUN_ON] \{\
-. di RUNON_FN_IN_DIVER
-. nr #RUNON_FN_IN_DIVER 1
-. \}
-. el \{ .di FN_IN_DIVER \}
-. \}
-. el \{\
-. ie \\n[#RUN_ON] \{\
-. da RUNON_FN_IN_DIVER
-. nr #RUNON_FN_IN_DIVER 1
-. \}
-. el \{ .da FN_IN_DIVER \}
-. \}
-. \\n+[#DONE_ONCE]
-. \}
-. el \{\
-. ie \\n[#RUN_ON] \{\
-. da RUNON_FOOTNOTES
-. nr #RUNON_FOOTNOTES 1
-. \}
-. el \{ .da FOOTNOTES \}
-. \}
-. if \\n[#FOOTNOTE_COLOR]=1 \{\
-. TRAP OFF
-. nf
-\m[\\*[$FOOTNOTE_COLOR]]
-. EOL
-. fi
-. TRAP
-. \}
-. if \\n[#EPIGRAPH] \{ .nr #FN_FOR_EPI 1 \}
-.\" When a deferred footnote is also the 1st footnote on the page,
-.\" and when the page it's output on also has footnotes, some
-.\" whitespace is needed between the deferred footnote and the
-.\" first footnote belonging to the output page so that there's
-.\" no confusion when two stars (or two number 1s) appear in
-.\" footnotes...
-. if \\n[#FN_DEFER_SPACE] \{\
-.\" ...but only add the extra space if TERMINATE has not been called
-. if !r#TERMINATE \{\
-.\" ...and not if defer space has already been added
-. if !\\n[#DEFER_SPACE_ADDED] \{\
-.\" ...and not if the footnote count the last time we checked for
-.\" a defer situation inside a diversion is greater than 1.
-. if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{ .ALD 1v \}
-. if \\n[#RESET_FN_NUMBER] \{ .ALD 1v \}
-. nr #DEFER_SPACE_ADDED 1
-. \}
-. \}
-. \}
-. rr #FN_DEFER_SPACE
-. rr #SAVED_DIVER_FN_COUNT
-. \}
-. if \\n[#DIVERTED]=3 \{\
-. if \\n[#FN_COUNT]>0 \{\
-\!. RLD 1v
-. \}
-. \}
-.\" Add footnote rule (or, if no rule, some whitespace).
-.\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE
-.\" is run.
-. if \\n+[#FN_COUNT]=1 \{\
-.\" If a footnote is called in a diversion, and the footnote has to
-.\" be moved, don't put in the rule now (it's taken care of when
-.\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
-. if !\\n[#DONT_RULE_ME]=1 \{\
-. if !\\n[#FN_DEPTH] \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. if !\\n[#RUN_ON] \{ .ALD \\n[#DOC_LEAD]u \}
-. \}
-. ie \\n[#FN_RULE]=1 \{\
-. if !\\n[#RUN_ON] \{ .PRINT_FOOTNOTE_RULE \}
-. \}
-. el \{ .ALD 1v \}
-. nr #RULED 1
-. \}
-. \}
-. \}
-. rr #DONT_RULE_ME
-.\" Add footnote markers to footnote text...
-. ie \\n[#FN_MARKERS] \{\
-. if \\n[#FN_SPACE]>0 \{\
-. if \\n[#FN_COUNT]>0 \{\
-. ALD \\n[#FN_SPACE]u
-. \}
-. \}
-. if !\\n[#NO_FN_MARKER] \{\
-.\" ...but not if TERMINATE has been called.
-. if !r#TERMINATE \{\
-. if \\n[#REF]=1 \{\
-\!. in +\\*[$REF_FN_INDENT]
-\!. ti -\\*[$REF_FN_INDENT]
-. \}
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. \\n+[#FN_COUNT_FOR_COLS]
-. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT *\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT **\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \(dg\(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \(dd\(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT ***\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dg\(dg\(dg\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \(dd\(dd\(dd\c \}
-. if \\n[#FN_COUNT_FOR_COLS]=10 \{ .PRINT ****\c \}
-. \}
-. el \{\
-. if \\n[#FN_COUNT]=1 \{ .PRINT *\c \}
-. if \\n[#FN_COUNT]=2 \{ .PRINT \(dg\c \}
-. if \\n[#FN_COUNT]=3 \{ .PRINT \(dd\c \}
-. if \\n[#FN_COUNT]=4 \{ .PRINT **\c \}
-. if \\n[#FN_COUNT]=5 \{ .PRINT \(dg\(dg\c \}
-. if \\n[#FN_COUNT]=6 \{ .PRINT \(dd\(dd\c \}
-. if \\n[#FN_COUNT]=7 \{ .PRINT ***\c \}
-. if \\n[#FN_COUNT]=8 \{ .PRINT \(dg\(dg\(dg\c \}
-. if \\n[#FN_COUNT]=9 \{ .PRINT \(dd\(dd\(dd\c \}
-. if \\n[#FN_COUNT]=10 \{ .PRINT ****\c \}
-. \}
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#COLUMNS]=1 \{\
-. \\n+[#FN_COUNT_FOR_COLS]
-. \}
-. if \\n[#NOT_YET_ADJUSTED]=1 \{\
-. nr #FN_NUMBER 1 1
-. rr #NOT_YET_ADJUSTED
-. \}
-. if \\n[#PRINT_STYLE]=1 \{ .PRINT "(\\n[#FN_NUMBER])\c" \}
-. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 2]\c" \}
-. \}
-. \}
-. \}
-. \}
-. el \{\
-.\" Line-numbered footnotes handling
-. if \\n[#FN_MARKER_STYLE]=3 \{\
-. if \\n[#FN_SPACE]>0 \{\
-. if !\\n[#RUN_ON]=1 \{\
-. if \\n[#FN_COUNT]>0 \{\
-. ALD \\n[#FN_SPACE]u
-. \}
-. \}
-. \}
-. if \\n[#REF]=1 \{\
-. if !\\n[#RUN_ON]=1 \{\
-\!. in +\\*[$REF_FN_INDENT]
-\!. ti -\\*[$REF_FN_INDENT]
-. \}
-. \}
-. ie \\n[#FN_LN_BRACKETS]=1 \{\
-. ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
-. ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
-. as $FN_LINENUMBER \\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
-. \}
-. el \{\
-. as $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
-. \}
-. \}
-. el \{\
-. ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
-. ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
-. \}
-. el \{\
-. ds $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
-. \}
-. \}
-. if !\\n[#NO_FN_MARKER] \{\
-. PRINT \\*[$FN_LINENUMBER]\c
-. \}
-. rm $FN_LINENUMBER
-. nr #FN_MARK 0
-. \}
-. \}
-. \}
-.\" If INDENT arg is passed to FOOTNOTE, calculate the indent...
-. el \{\
-. ie '\\$1'INDENT' \{\
-. ev FOOTNOTES
-. if '\\$2'L' \{ .in (\\$3) \}
-. if '\\$2'LEFT' \{ .in (\\$3) \}
-. if '\\$2'R' \{ .nr #FN_R_INDENT (\\$3) \}
-. if '\\$2'RIGHT' \{ .nr #FN_R_INDENT (\\$3) \}
-. if '\\$2'B' \{\
-. nr #FN_BL_INDENT (\\$3)
-. ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
-. el \{ .nr #FN_BR_INDENT (\\$4) \}
-. in \\n[#FN_BL_INDENT]u
-. \}
-. if '\\$2'BOTH' \{\
-. nr #FN_BL_INDENT (\\$3)
-. ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
-. el \{ .nr #FN_BR_INDENT (\\$4) \}
-. in \\n[#FN_BL_INDENT]u
-. \}
-. ev
-.\" ...then re-run FOOTNOTE without an argument.
-. FOOTNOTE
-. \}
-. el \{\
-. br
-.\" Add "defer space" if the previously diverted footnote was the
-.\" 1st footnote proper to its page (i.e. it looks like a deferred
-.\" footnote but it's really an overflow).
-. if \\n[#DIVERTED] \{\
-. if \\n[#PREV_FN_DEFERRED]=1 \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{ .ALD \\n[#FN_LEAD]u \}
-. if \\n[#RESET_FN_NUMBER] \{ .ALD \\n[#FN_LEAD]u \}
-. nr #PREV_FN_DEFERRED 2
-. \}
-. \}
-. if \\n[#REF]=1 \{\
-\!. in
-. \}
-.\" Terminate FOOTNOTES or FN_IN_DIVER diversion
-. di
-. HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-. hy 14
-.\" More housekeeping
-.\" Turn off indent possibly set by FOOTNOTE INDENT
-. in 0
-.\" Restore sentence spacing
-. if \\n[#PRINT_STYLE]=2 \{\
-. if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
-. rm $RESTORE_SS_VAR
-. \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_WAS_ON] \{\
-. UNDERLINE
-. rr #UNDERLINE_WAS_ON
-. \}
-. \}
-. ev
-. rr #FN_R_INDENT
-. rr #FN_BR_INDENT
-. nr #PP_STYLE \\n[#PP_STYLE_PREV]
-. if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
-. rr #INDENT_FIRSTS
-.\" Calculate footnote depth, but not if #COUNTERS_RESET (created in
-.\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now
-.\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in
-.\" PROCESS_FN_IN_DIVER).
-. ie r#COUNTERS_RESET \{\
-. rr #COUNTERS_RESET
-. \}
-. el \{\
-. nr #GET_DEPTH 1
-.\" If the footnote is the 1st on the page and it falls too close
-.\" to the bottom margin, defer the footnote text to the next page...
-. if (\\n[#SPACE_REMAINING]-1)<=(\\n[#DOC_LEAD]) \{\
-.\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1
-. if !\\n[#PREV_FN_DEFERRED]=1 \{\
-. nr #FN_DEFER 1
-. nr #FN_DEPTH +\\n[#DIVER_DEPTH]
-. rr #GET_DEPTH
-.\" This is required so that the defer space clause can distinguish
-.\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside
-.\" QUOTE, BLOCKQUOTE or EPIGRAPH
-. if \\n[#DIVER_FN]=2 \{\
-. nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT]
-. rr #DIVER_FN
-. \}
-. \}
-. \}
-.\" Calculate the footnote depth.
-. if \\n[#GET_DEPTH]=1 \{\
-.\" Save the previous footnote depth (for use when there will be
-.\" some overflowed footnote text).
-. nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH]
-.\" Add the depth of the current footnote to any already existent
-.\" footnotes.
-. nr #FN_DEPTH +\\n[#DIVER_DEPTH]
-.\" Special handling for run-on footnotes
-. if \\n[#RUN_ON]=1 \{\
-. if \\n[#RUNON_FOOTNOTES] \{\
-. unformat RUNON_FOOTNOTES
-. \}
-. if \\n[#RUNON_FN_IN_DIVER] \{\
-. unformat RUNON_FN_IN_DIVER
-. \}
-. ev FOOTNOTES
-.\" Recreate FOOTNOTES with rule followed by text of unformatted
-.\" run-on footnotes.
-. di FOOTNOTES
-. ie \\n[#FN_RULE]=0 \{ .RLD 1v \}
-. el \{\
-. PRINT \v'-\\n[#FN_RULE_ADJ]u'\l'\\n[#FN_RULE_LENGTH]u'\v'+\\n[#FN_RULE_ADJ]u'
-. \}
-. br
-. if \\n[#RUNON_FOOTNOTES] \{\
-. RUNON_FOOTNOTES
-. rr #RUNON_FOOTNOTES
-. \}
-. if \\n[#RUNON_FN_IN_DIVER] \{\
-. RUNON_FN_IN_DIVER
-. rr #RUNON_FN_IN_DIVER
-. \}
-. br
-. di
-. ev
-. nr #FN_DEPTH \\n[#DIVER_DEPTH]
-. nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS]
-. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-. \}
-.\" Save the new depth
-. nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH]
-.\" Signal that defer space should be added when PROCESS_FN_LEFTOVER
-.\" processes deferred footnotes.
-. if \\n[#FN_DEFER] \{\
-. if \\n[#FN_COUNT]=2 \{\
-. ie \\n[#COLUMNS] \{\
-. if !\\n[#FROM_FOOTER] \{\
-. if \\n[#FN_DEFER]=1 \{ .nr #FN_DEFER_SPACE 1 \}
-. if \\n[#FN_COUNT_FOR_COLS]>=1 \{ .rr #FN_DEFER_SPACE \}
-. if \\n[#FROM_HEADER] \{ .nr #FN_DEFER_SPACE 1 \}
-. \}
-. \}
-. el \{\
-. nr #FN_DEFER_SPACE 1
-. \}
-. \}
-. rr #FN_DEFER
-. \}
-.\" If the depth of the whole footnote won't fit in the space
-.\" between where we are on the page and the bottom margin, calculate
-.\" how much of it will fit.
-. if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
-. nr #FN_LINES 0 1
-. while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
-. nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
-.\}
-. nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1]
-. nr #OVERFLOW 1
-.\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to
-.\" be deferred, comes up with a depth equal to exactly 1 line
-.\" of footnotes, i.e. enough room to print the rule and nothing
-.\" else. The following tests for such a condition, and rather than
-.\" attempting to treat the footnote as an overflow, it tells mom to
-.\" treat it as a special kind of deferred footnote (#FN_DEFER 2).
-. if \\n[#SAVED_FN_DEPTH_1]=0 \{\
-. if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\
-. nr #FN_DEFER 2
-. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2]
-. rr #OVERFLOW
-. \}
-. \}
-. \}
-.\" Calculate VFP based on whether the footnote overflows, or is to
-.\" be treated normally.
-. ie \\n[#OVERFLOW]=1 \{\
-. if \\n[#RUN_ON] \{\
-. rr #VARIABLE_FOOTER_POS
-. nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP]
-. \}
-. ie \\n[#FN_COUNT]=1 \{\
-. ie \\n[#RULED]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. ie \\n[#FROM_FOOTER] \{\
-. ie \\n[#FN_COUNT_FOR_COLS]>1 \{\
-. nr #FN_DEPTH -\\n[#FN_DEPTH]
-. if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
-. if !\\n[#PREV_FN_DEFERRED]=1 \{\
-. nr #FN_DEPTH -\\n[#VFP_DIFF]
-. \}
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
-. if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
-. \}
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
-. \}
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
-. \}
-. \}
-. el \{ .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) \}
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
-. if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
-. if !\\n[#PREV_FN_DEFERRED]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if !\\n[#FROM_FOOTER] \{\
-.
-. \}
-. \}
-. el \{\
-. nr #FN_DEPTH -\\n[#VFP_DIFF]
-. \}
-. \}
-. if \\n[#DIVERTED]=3 \{\
-. if !\\n[#PREV_FN_DEFERRED] \{\
-. if !\\n[#FROM_FOOTER] \{\
-. if \\n[#FN_COUNT]=1 \{\
-. if !\\n[#VFP_DIFF] \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. da FOOTNOTES
-\!. ALD \\n[#FN_LEAD]u
-. di
-. \}
-. if \\n[#RESET_FN_NUMBER] \{\
-. da FOOTNOTES
-\!. ALD \\n[#FN_LEAD]u
-. di
-. \}
-. \}
-. \}
-. \}
-. \}
-. \}
-. \}
-. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
-. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
-. nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
-. \}
-. rr #OVERFLOW
-. rr #RULED
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
-. if \\n[#PREV_FN_DEFERRED]=1 \{\
-. if \\n[#DIVERTED] \{\
-. if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\
-. nr #FN_DEPTH +\\n[#FN_LEAD]
-. nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD]
-. rr #PREV_FN_DEFERRED
-. \}
-. \}
-. \}
-. if \\n[#FN_COUNT]>1 \{\
-. nr #NO_BACK_UP 1
-. rr #DIVERTED
-. rr #RULED
-. \}
-. \}
-. \}
-. \}
-. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.\" See VFP_CHECK for an explanation of the next lines.
-.\" The trap has to be removed, prior to setting it, each time
-.\" FOOTNOTE is run.
-. if \\n[#PRINT_STYLE]=2 \{\
-. ch VFP_CHECK
-. wh \\n[#VARIABLE_FOOTER_POS]u-\\n[#DOC_LEAD]u VFP_CHECK
-. \}
-.\" If we have a footnote whose text has to be deferred to the next
-.\" page, reset the FOOTER trap to its original location.
-. if \\n[#FN_DEFER] \{\
-. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-. \}
-. \}
-. nr #NO_FN_MARKER 0
-. \}
-. if \\n[#ADD_BREAK] \{\
-. br
-. rr #ADD_BREAK
-. \}
-.END
-\#
-\# Utility macros to manage footnotes that occur inside diversions
-\# ---------------------------------------------------------------
-\#
-.ig
-There are some redundancies here; they're left in in case unforeseen
-footnote situations crop up in the future that might require
-manipulation of them.
-..
-\#
-\# 1. Pre-footnote processing for footnotes in diversions
-\#
-\# a) A footnote inside a diversion will be moved entirely (marker
-\# in running text and text of footnote) to the next page/column.
-\#
-.MAC DIVER_FN_1_PRE END
-. nr #RESET_FN_COUNTERS 1
-. nr #COUNTERS_RESET 1
-. if \\n[#DONE_ONCE]=1 \{\
-. if \\n[#FN_DEFER] \{\
-. if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_DEFER_SPACE 1 \}
-. \}
-. el \{\
-. nr #FN_DEFER_SPACE 1
-. \}
-. \}
-. \}
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. if \\n[#FN_COUNT]>0 \{ .nr #FN_COUNT 0 1 \}
-. if \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. nr #FN_COUNT_FOR_COLS 0 1
-. \}
-. \}
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#RESET_FN_NUMBER]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
-. \}
-. el \{\
-. nr #FN_NUMBER 0 1
-. \}
-. \}
-. \}
-. \}
-.END
-\#
-\# b) Treat as a normal footnote, including defers.
-\#
-.MAC DIVER_FN_2_PRE END
-. nr #RESET_FN_COUNTERS 2
-.END
-\#
-\# 2. Post-footnote processing for footnotes in diversions
-\#
-\# Even when a footnote inside a diversion is treated as
-\# "normal," some manipulation of registers is required. The
-\# macro is called in DO_QUOTE (i.e. at the termination of
-\# quotes and blockquotes) and in DO_EPIGRAPH.
-\#
-.MAC DIVER_FN_2_POST END
-. if \\n[#DONE_ONCE]=1 \{\
-. if \\n[#FN_MARKER_STYLE]=1 \{\
-. if \\n[#FN_COUNT]=0 \{\
-. nr #DONT_RULE_ME 1
-. \}
-. if \\n[#FN_COUNT]>0 \{\
-. nr #FN_COUNT 0 1
-. \}
-. if \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT_FOR_COLS 0 1 \}
-. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. \}
-. \}
-. \}
-. if \\n[#FN_MARKER_STYLE]=2 \{\
-. if \\n[#FN_COUNT]=0 \{\
-. nr #DONT_RULE_ME 1
-. \}
-. if \\n[#FN_COUNT]>0 \{\
-. nr #FN_COUNT 0 1
-. \}
-. if \\n[#RESET_FN_NUMBER]=1 \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
-. \}
-. el \{\
-. nr #FN_NUMBER 0 1
-. \}
-. \}
-. \}
-. \}
-.END
-\#
-\# The main macros that handle footnote processing.
-\# -----------------------------------------------
-\#
-.ig
-Sometimes, #VARIABLE_FOOTER_POS sets FOOTER at a location that gives
-the impression another line of running text could fit on the page.
-VFP_CHECK is always set to the line just above the one where FOOTER
-will be sprung, and checks for this condition. If it exists, FOOTER
-is set one line lower on the page, thus squeezing in an extra line
-of running text. This is a judgment call on my part, but seems to
-work well. If there are problems (e.g. footnotes really do look
-jammed), the user should probably adjust FOOTNOTE_AUTOLEAD and/or
-FOOTNOTE_RULE_ADJ.
-
-The macro has to be run in its own environment, otherwise the first
-word of the last line before the footnotes gets chopped.
-..
-\#
-.MAC VFP_CHECK END
-. ev VFP_CHECK
-.\" The trap also has to be removed each time VFP_CHECK is run
-. if \\n[#PRINT_STYLE]=2 \{\
-. ch VFP_CHECK
-. SIZESPECS
-. ie !\\n[#IN_DIVER] \{ .nr #PAGE_POS \\n(nl \}
-. el \{ .nr #PAGE_POS \\n(nl+\\n(.d+(\\n[#DOC_LEAD]) \}
-. nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS])
-. nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
-. nr #FN_GAP \\n[#SPACE_TO_FOOTER]%\\n[#DOC_LEAD]
-. if !\\n[#FN_GAP]<0 \{\
-. if \\n[#FN_GAP]<\\n[#DOC_LEAD] \{\
-. ie (\\n[#PAGE_POS]+(\\n[#FN_DEPTH]+\\n[#FN_GAP]))>(\\n[#VISUAL_B_MARGIN]) \{\
-. nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
-. \}
-. el \{\
-. ie \\n[#DOC_LEAD]-\\n[#FN_GAP]<\\n[#DESCENDER] \{\
-. nr #VARIABLE_FOOTER_POS +\\n[#DOC_LEAD]
-. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-. \}
-. el \{\
-. nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
-. \}
-. \}
-. \}
-. \}
-. \}
-. ev
-.END
-\#
-.ig
-FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed
-as #VARIABLE_FOOTER_POSITION changes the position of FOOTER.
-FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch"
-the overflow. The diversion is ended in FOOTER, immediately after
-FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER
-is run (either in HEADER, or in FOOTER if moving col to col).
-..
-\#
-.MAC FN_OVERFLOW_TRAP END
-. if \\n[#FN_COUNT] \{\
-. di FN_OVERFLOW
-. ie !\\n[#NO_BACK_UP]=1 \{\
-. if \\n[#PREV_FN_DEFERRED] \{\
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#FROM_FOOTER] \{\
-. if \\n[#PREV_FN_DEFERRED] \{\
-. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. rr #PREV_FN_DEFERRED
-. \}
-. \}
-. \}
-. if !\\n[#FROM_FOOTER] \{\
-. if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\
-\!. RLD \\n[#FN_LEAD]u
-. \}
-. \}
-. \}
-. \}
-. el \{\
-\!. RLD \\n[#FN_LEAD]u
-. \}
-. \}
-. \}
-. el \{\
-. rr #NO_BACK_UP
-. rr #PREV_FN_DEFERRED
-. \}
-. \}
-.\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
-.\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
-.\" area allowable for running text.
-. nr #FROM_DIVERT_FN 1
-.END
-\#
-.ig
-PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
-FOOTER if we're moving from one column to the next (i.e. after
-outputting FOOTNOTES). It checks for whether we have a "deferred
-footnote" situation, and resets counters and number registers
-accordingly. Lastly, if we have some footnote overflow, it calls
-DIVERT_FN_OVERFLOW.
-..
-\#
-.MAC PROCESS_FN_LEFTOVER END
-. if \\n[#PREV_FN_DEFERRED]=2 \{\
-. if \\n[#FN_COUNT_AT_FOOTER]>1 \{ .rr #PREV_FN_DEFERRED \}
-. \}
-. if !\\n[#FN_DEFER] \{\
-. nr #FN_COUNT 0 1
-. nr #FN_DEPTH 0
-. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
-. \}
-. if r#FN_DEFER \{\
-. if \\n[#FN_DEFER]=1 \{\
-. nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
-. \}
-. if \\n[#FN_DEFER]=2 \{\
-. nr #FN_DEPTH 0
-. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
-. \}
-. \}
-. nr #SPACE_REMAINING 0
-. ch FOOTER -\\n[#B_MARGIN]u
-. if \\n[#FN_DEFER] \{\
-. nr #NO_FN_MARKER 1
-. FOOTNOTE
-. nf
-. FOOTNOTE OFF
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. if !\\n[#FROM_FOOTER] \{\
-. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .nr #PREV_FN_DEFERRED 1 \}
-. \}
-. \}
-. \}
-. el \{ .nr #PREV_FN_DEFERRED 1 \}
-. \}
-. if !\\n[#FN_DEFER] \{\
-. if \\n[#FN_OVERFLOW_DEPTH] \{\
-. DIVERT_FN_LEFTOVER
-. \}
-. \}
-. ie \\n[#COLUMNS]=1 \{\
-. if \\n[#COL_NUM]>1 \{\
-. if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT 0 1 \}
-. \}
-. \}
-. el \{ .nr #FN_COUNT 0 1 \}
-. if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
-. rr #FROM_DIVERT_FN
-.END
-\#
-.ig
-DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at
-the top of HEADER, and in FOOTER if we're moving from one column
-to the next).
-..
-\#
-.MAC DIVERT_FN_LEFTOVER END
-. nr #NO_FN_MARKER 1
-. nr #DIVERTED 1
-. FOOTNOTE
-. nf
-. FN_OVERFLOW
-. FOOTNOTE OFF
-. if \\n[#PREV_FN_DEFERRED] \{\
-. nr #FN_DEPTH -\\n[#FN_LEAD]
-. nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD]
-. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-. if \\n[#PREV_FN_DEFERRED]=2 \{\
-. nr #PREV_FN_DEFERRED 1
-. rr #DIVERTED
-. \}
-. \}
-. rr #FN_OVERFLOW_DEPTH
-.END
-\#
-.ig
-This is a special macro to deal with footnotes that are set inside
-diversions (QUOTE, BLOCKQUOTE and EPIGRAPH). It's called in HEADER
-(and in FOOTER, if we're moving from column to column), and comes
-after PROCESS_FOOTNOTE_LEFTOVER in those two macros.
-..
-\#
-.MAC PROCESS_FN_IN_DIVER END
-. nr #SPACE_REMAINING 0
-. ch FOOTER -\\n[#B_MARGIN]u
-. nr #NO_FN_MARKER 1
-. if !\\n[#RESET_FN_COUNTERS]=2 \{\
-. rr #RESET_FN_COUNTERS
-. \}
-. FOOTNOTE
-. if \\n[#FN_OVERFLOW_DEPTH] \{ .nf \}
-. ie dRUNON_FN_IN_DIVER \{\
-. RUNON_FN_IN_DIVER
-. rm RUNON_FN_IN_DIVER
-. \}
-. el \{\
-. nf
-. FN_IN_DIVER
-. \}
-. FOOTNOTE OFF
-. rr #DIVER_FN
-.END
-\#
-\# ====================================================================
-\#
-\# +++ENDNOTES+++
-\#
-.ig
-When endnotes are output, the spacing between the notes is always
-1 extra linespace. This can have bottom margin consequences. If
-this doesn't bother you, don't worry about it. If it does bother
-you, and you want to adjust the spacing between any two endnotes (as
-they're output), make the spacing adjustments (.ALD/.RLD) at the
-*end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top.
-
-Endnotes must be output manually with .ENDNOTES. This allows user
-the flexibility to output endnotes at the end of each collated
-document, or to output them at the end of the entire document.
-..
-\#
-\# Control macros
-\#
-\# ENDNOTE POINT SIZE
-\# ------------------
-\# *Argument:
-\# <base point size for endnotes>
-\# *Function:
-\# Creates or modifies register #EN_PS.
-\# *Notes:
-\# Default is same as running text in body of document.
-\#
-\# This size control macro differs from other size control macros
-\# in that it sets an absolute point size, not a relative one. This
-\# is because a) endnotes always appear separate from the body of
-\# a document and therefore don't need to be relative to the body
-\# of the document, and b) there are quite a few elements of the
-\# endnotes page(s) that need to be relative to the base point size
-\# of that page. If the base endnote point size were relative to
-\# the body of the document (i.e. a _SIZE macro taking a +|- value)
-\# getting the rest of the endnote elements sized properly could
-\# become very confusing.
-\#
-.MAC ENDNOTE_PT_SIZE END
-. nr #EN_PS (p;\\$1)
-.END
-\#
-\#
-\# ENDNOTE LEAD
-\# ------------
-\# *Argument:
-\# <base leading to use in endnotes> [ ADJUST ]
-\# *Function:
-\# Creates or modifies register #EN_LEAD. Creates or removes
-\# register #ADJ_EN_LEAD. Stores arguments in strings if ENDNOTE_LEAD
-\# set before START.
-\# *Notes:
-\# Default is 14 points for TYPESET, adjusted; 24 for TYPEWRITE.
-\#
-.MAC ENDNOTE_LEAD END
-. if !\\n[#OK_PROCESS_LEAD] \{\
-. ds $EN_LEAD \\$1
-. if !'\\$2'' \{\
-. ds $ADJUST_EN_LEAD \\$2
-. \}
-. return
-. \}
-. rr #ADJ_EN_LEAD
-. nr #EN_LEAD (p;\\$1)
-. if '\\$2'ADJUST' \{\
-. nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
-. nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
-. nr #ADJ_DOC_LEAD 1
-. nr #ADJ_EN_LEAD 1
-. nr #NO_TRAP_RESET 1
-. DOC_LEAD \\n[#EN_LEAD]u ADJUST
-. nr #EN_LEAD \\n[#DOC_LEAD]
-. DOC_LEAD \\n[#ORIG_DOC_LEAD]u
-. rr #NO_TRAP_RESET
-. nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
-. rr #ORIG_DOC_LEAD
-. \}
-.END
-\#
-\#
-\# ENDNOTES_HDRFTR_CENTER
-\# ----------------------
-\# *Argument:
-\# toggle
-\# *Function:
-\# Creates or removes toggle register #EN_HDRFTR_CENTER, used to
-\# determine whether mom should print a/the hdrftr center string
-\# on the endnotes page. Primarily to enable/disable printing of the
-\# chapter name in hdrftrs when DOCTYPE CHAPTER.
-\# *Notes:
-\# Default is OFF
-\#
-.MAC ENDNOTES_HDRFTR_CENTER END
-. ie '\\$1'' \{ .nr #EN_HDRFTR_CENTER 1 \}
-. el \{ .rr #EN_HDRFTR_CENTER \}
-.END
-\#
-\#
-\# ENDNOTE STRING
-\# --------------
-\# *Argument:
-\# <title for endnotes page>
-\# *Function:
-\# Creates or modifies string $EN_STRING.
-\# *Notes:
-\# Default is "Endnotes"
-\#
-.MAC ENDNOTE_STRING END
-. ds $EN_STRING \\$1
-.END
-\#
-\#
-\# ENDNOTE STRING UNDERSCORE
-\# -------------------------
-\# *Arguments:
-\# toggle | 2
-\# *Function:
-\# Turns underscoring of endnote main title on or off. If the argument
-\# is the digit "2", turns on double-underscoring.
-\# *Notes:
-\# Default is double-underscored.
-\#
-.MAC ENDNOTE_STRING_UNDERSCORE END
-. ie '\\$1'' \{ .nr #EN_STRING_UNDERSCORE 1 \}
-. el \{\
-. ie '\\$1'2' \{ .nr #EN_STRING_UNDERSCORE 2 \}
-. el \{ .nr #EN_STRING_UNDERSCORE 0 \}
-. \}
-.END
-\#
-\#
-\# ENDNOTE STRING CAPS
-\# -------------------
-\# *Arguments:
-\# <none> | <anything>
-\# *Function:
-\# Turns capitalization of the endnotes pages title string
-\# "Endnotes" on or off.
-\# *Notes:
-\# Users may want the endnotes pages title string to be in caps,
-\# but the toc entry for endnotes in lower case. If the argument
-\# to ENDNOTE_STRING is in lower case and ENDNOTE_STRING_CAPS is
-\# turned on, this is exactly what will happen.
-\#
-\# Default is on.
-\#
-.MAC ENDNOTE_STRING_CAPS END
-. ie '\\$1'' \{ .nr #EN_STRING_CAPS 1 \}
-. el \{ .rr #EN_STRING_CAPS \}
-.END
-\#
-\#
-\# ENDNOTE TITLE
-\# -------------
-\# *Argument:
-\# <string that appears before the first endnote pertaining to any document>
-\# *Function:
-\# Creates string $EN_TITLE_STRING.
-\# *Notes:
-\# Default is the document title, or, if doc is a chapter, "Chapter #"
-\#
-.MAC ENDNOTE_TITLE END
-. ds $EN_TITLE \\$1
-.END
-\#
-\#
-.MAC ENDNOTE_TITLE_SPACE END
-. nr #EN_TITLE_SPACE (\\$1)
-.END
-\#
-\#
-\# ENDNOTE TITLE UNDERSCORE
-\# ------------------------
-\# *Argument:
-\# toggle
-\# *Function:
-\# Creates or removes register #EN_TITLE_UNDERSCORE.
-\# *Notes:
-\# Default is to underscore the endnote titles.
-\#
-.MAC ENDNOTE_TITLE_UNDERSCORE END
-. ie '\\$1'' \{ .nr #EN_TITLE_UNDERSCORE 1 \}
-. el \{ .rr #EN_TITLE_UNDERSCORE \}
-.END
-\#
-\#
-\# ENDNOTE MARKER STYLE
-\# --------------------
-\# *Arguments:
-\# NUMBER | LINE
-\# *Function:
-\# Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine
-\# the style of endnote markers (labels).
-\# *Notes:
-\# 1=NUMBER; 2=LINE. LINE means "use output line numbers".
-\# Default is NUMBER.
-\#
-.MAC ENDNOTE_MARKER_STYLE END
-. if '\\$1'NUMBER' \{\
-. nr #EN_MARKER_STYLE 1
-. \}
-. if '\\$1'LINE' \{\
-. nr #EN_MARKER_STYLE 2
-. if !\\n[#EN_LN_SEP] \{\
-. if !\\n[#EN_LN_BRACKETS] \{ .ENDNOTE_LINENUMBER_BRACKETS SQUARE \}
-. \}
-. \}
-.END
-\#
-\#
-\# ENDNOTE LINENUMBER MARK
-\# -----------------------
-\# *Function:
-\# This string, when called inline, stores the current output line
-\# number in register #EN_MARK for use with ENDNOTE.
-\#
-.ds EN-MARK \R'#EN_MARK \En(ln'
-\#
-\#
-\# ENDNOTE LINENUMBER SEPARATOR
-\# ----------------------------
-\# *Argument:
-\# <user-defined separator>
-\# *Function:
-\# Stores user-defined separator (for use then
-\# ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP. The
-\# separator is intended to be used when the user wishes a
-\# separator, rather than the choice of brackets offered by
-\# ENDNOTE_LINENUMBER_BRACKETS.
-\#
-.MAC ENDNOTE_LINENUMBER_SEPARATOR END
-. rr #EN_LN_BRACKETS
-. nr #EN_LN_SEP 1
-. ds $EN_LN_SEP "\\$1
-.END
-\#
-\#
-\# ENDNOTE LINENUMBER BRACKETS
-\# ---------------------------
-\# *Argument:
-\# PARENS | SQUARE | BRACES or ( | [ | {
-\# *Function:
-\# Sets register #EN_LN_BRACKETS to 1, and creates strings
-\# $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument.
-\#
-.MAC ENDNOTE_LINENUMBER_BRACKETS END
-. rr #EN_LN_SEP
-. nr #EN_LN_BRACKETS 1
-. if '\\$1'PARENS' \{\
-. ds $EN_OPEN_BRACKET (
-. ds $EN_CLOSE_BRACKET )
-. \}
-. if '\\$1'(' \{\
-. ds $EN_OPEN_BRACKET (
-. ds $EN_CLOSE_BRACKET )
-. \}
-. if '\\$1'SQUARE' \{\
-. ds $EN_OPEN_BRACKET [
-. ds $EN_CLOSE_BRACKET ]
-. \}
-. if '\\$1'[' \{\
-. ds $EN_OPEN_BRACKET [
-. ds $EN_CLOSE_BRACKET ]
-. \}
-. if '\\$1'BRACES' \{\
-. ds $EN_OPEN_BRACKET {
-. ds $EN_CLOSE_BRACKET }
-. \}
-. if '\\$1'{' \{\
-. ds $EN_OPEN_BRACKET {
-. ds $EN_CLOSE_BRACKET }
-. \}
-.END
-\#
-\#
-\# ENDNOTE LINENUMBER GAP
-\# ----------------------
-\# *Argument:
-\# <space between line-number labels and endnotes text>
-\# *Function:
-\# Defines string $EN_LN_GAP, used during printing of line-number
-\# labels in ENDNOTE.
-\#
-.MAC ENDNOTE_LINENUMBER_GAP END
-. ds $EN_LN_GAP \\$1
-.END
-\#
-\#
-\# ENDNOTE NUMBERS ALIGN RIGHT
-\# ---------------------------
-\# *Argument:
-\# <max. number of digit placeholders that will appear in endnotes>
-\# *Function:
-\# Toggles register #EN_NUMBERS_ALIGN_RIGHT on; creates register
-\# #EN_NUMBER_PLACEHOLDERS.
-\# *Notes:
-\# Default is for footnote numbers to be right aligned to 2 placeholders.
-\#
-.MAC ENDNOTE_NUMBERS_ALIGN_RIGHT END
-. rr #EN_NUMBERS_ALIGN_LEFT
-. nr #EN_NUMBERS_ALIGN_RIGHT 1
-. nr #EN_NUMBER_PLACEHOLDERS \\$1
-.END
-\#
-\#
-\# ENDNOTE NUMBERS ALIGN LEFT
-\# --------------------------
-\# *Argument:
-\# none
-\# *Function:
-\# Toggles register #EN_NUMBERS_ALIGN_LEFT on.
-\# *Notes:
-\# Default is for footnote numbers to be right aligned to 2 placeholders
-\# (i.e. not left aligned).
-\#
-.MAC ENDNOTE_NUMBERS_ALIGN_LEFT END
-. rr #EN_NUMBERS_ALIGN_RIGHT
-. nr #EN_NUMBERS_ALIGN_LEFT 1
-.END
-\#
-\#
-\# ENDNOTE PARAGRAPH INDENT
-\# ------------------------
-\# *Argument:
-\# <first line indent of paras subsequent to 1st in endnotes>
-\# *Function:
-\# Creates register #EN_PP_INDENT for use in .PP.
-\# *Notes:
-\# Requires a unit of measure.
-\#
-\# Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
-\#
-.MAC ENDNOTE_PARA_INDENT END
-. nr #EN_PP_INDENT (\\$1)
-.END
-\#
-\#
-\# TURN OFF COLUMN MODE FOR ENDNOTES
-\# ---------------------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Creates or removes register #EN_NO_COLS
-\# *Notes:
-\# Allows user to tell mom not to set endnotes in columnar
-\# documents in columns. Default is to set endnotes in columns.
-\#
-.MAC ENDNOTES_NO_COLUMNS END
-. ie '\\$1'' \{ .nr #EN_NO_COLS 1 \}
-. el \{ .rr #EN_NO_COLS \}
-.END
-\#
-\#
-\# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE
-\# -------------------------------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Creates or removes register #EN_NO_FIRST_PN
-\# *Notes:
-\# For use if FOOTERS are on. Tells ENDNOTES not to put a page
-\# number on the first endnotes page. Some users may want this.
-\# Default is to print a page number at the top of the first
-\# endnotes page when footers are on.
-\#
-.MAC ENDNOTES_NO_FIRST_PAGENUM END
-. ie '\\$1'' \{ .nr #EN_NO_FIRST_PN 1 \}
-. el \{ .rr #EN_NO_FIRST_PN \}
-.END
-\#
-\#
-\# PAGE HEADERS ON ENDNOTES PAGES
-\# ------------------------------
-\# *Argument:
-\# <none> | ALL
-\# *Function:
-\# Creates or removes register #EN_ALLOWS_HEADERS or
-\# #EN_ALLOWS_HEADERS_ALL
-\# *Notes:
-\# Whether ENDNOTES puts a page header at the top of endnotes
-\# pages if page headers are used throughout the document.
-\# Default is to insert the page headers, but not on the first
-\# page. If the optional argument ALL is given, ENDNOTES puts a
-\# page header on the first page as well.
-\#
-.MAC ENDNOTES_ALLOWS_HEADERS END
-. ie '\\$1'' \{ .nr #EN_ALLOWS_HEADERS 1 \}
-. el \{\
-. ie '\\$1'ALL' \{\
-. nr #EN_ALLOWS_HEADERS 1
-. nr #EN_ALLOWS_HEADERS_ALL 1
-. \}
-. el \{\
-. rr #EN_ALLOWS_HEADERS
-. rr #EN_ALLOWS_HEADERS_ALL
-. \}
-. \}
-.END
-\#
-\#
-\# ENDNOTES PAGES PAGE NUMBERING STYLE
-\# -----------------------------------
-\# *Argument:
-\# DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\# Creates or modifies $EN_PN_STYLE.
-\# *Notes:
-\# Allows user to define what style should be used for endnotes
-\# pages page numbering. Arguments are the same as for
-\# PAGENUM_STYLE.
-\#
-\# Default is DIGIT.
-\#
-.MAC ENDNOTES_PAGENUM_STYLE END
-. ds $EN_PN_STYLE \\$1
-.END
-\#
-\#
-\# FIRST PAGE NUMBER FOR ENDNOTES
-\# ------------------------------
-\# *Argument:
-\# <page number that appears on page 1 of endnotes pages>
-\# *Function:
-\# Creates or modifies string $EN_FIRST_PN
-\# *Notes:
-\# To be used with caution, only if all endnotes
-\# are to be output at once, i.e. not at the end of the separate
-\# docs of a collated doc
-\#
-.MAC ENDNOTES_FIRST_PAGENUMBER END
-. nr #EN_FIRST_PN \\$1
-.END
-\#
-\# SINGLESPACE ENDNOTES
-\# --------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Sets lead of endnotes pages in TYPEWRITE to 12 points,
-\# adjusted.
-\# *Notes:
-\# Default is to double-space endnotes pages.
-\#
-.MAC SINGLESPACE_ENDNOTES END
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{\
-. nr #EN_SINGLESPACE 1
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. ENDNOTE_LEAD 12 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{\
-. nr #EN_SINGLESPACE 1
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. ENDNOTE_LEAD 12 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. el \{\
-. rr #EN_SINGLESPACE
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. ENDNOTE_LEAD 24 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. \}
-. \}
-.END
-\#
-\#
-\# ENDNOTE PARAGRAPH SPACE
-\# -----------------------
-\# *Argument:
-\# toggle
-\# *Function:
-\# Creates toggle register #EN_PP_SPACE for use in .PP.
-\# *Notes:
-\# Like PARA_SPACE. Default is not to space endnote paras.
-\#
-.MAC ENDNOTE_PARA_SPACE END
-. ie '\\$1'' \{ .nr #EN_PP_SPACE 1 \}
-. el \{ .rr #EN_PP_SPACE \}
-.END
-\#
-\#
-\# ENDNOTE
-\# -------
-\# *Argument:
-\# toggle
-\# *Function:
-\# Places superscript endnote number in text, then collects and
-\# processes endnote in diversion END_NOTES.
-\# *Notes:
-\# \c must be appended to the word immediately preceding .ENDNOTE
-\# when ENDNOTE_MARKER_STYLE is NUMBER.
-\#
-.MAC ENDNOTE END
-. if !\\n(.u \{ .nr #ADD_BREAK 1 \}
-. ie '\\$1'' \{\
-. nr #ENDNOTE 1
-. if \\n[#EN_MARKER_STYLE]=1 \{\
-. if \\n[#CONDENSE] \{ \*[CONDX]\c \}
-. if \\n[#EXTEND] \{ \*[EXTX]\c \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_ON] \{\
-. nr #UNDERLINE_WAS_ON 1
-. UNDERLINE OFF
-. \}
-. if \\n[#SLANT_ON] \{\
-. nr #SLANT_WAS_ON 1
-\*[SLANTX]\c
-. \}
-. PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
-. \}
-. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c" \}
-. \}
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-. if !\\n[#LINENUMBERS] \{\
-. tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
-. tm1 " ENDNOTE_MARKER_STYLE is LINE.
-. ab Aborting on ENDNOTE at line \\n(.c.
-. \}
-. if \\n[#EN_MARK]=0 \{ .nr #EN_MARK \\n(ln \}
-. nr #EN_MARK_2 \\n(ln
-. if '\\n(.z'P_QUOTE' \{\
-. nr #EN_MARK -1
-. nr #EN_MARK_2 -1
-. \}
-. \}
-. nr #PP_STYLE_PREV \\n[#PP_STYLE]
-. nr #PP_STYLE 1
-. if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
-. INDENT_FIRST_PARAS
-. ev EN
-. da END_NOTES
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
-. el \{ .LL \\n[#COL_L_LENGTH]u \}
-. ta \\n(.lu
-. \}
-. vs \\n[#EN_LEAD]u
-. if \\n[#EN_NUMBER]=1 \{\
-\!. ne 3
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$EN_TITLE_FAM]
-. FT \\*[$EN_TITLE_FT]
-. PT_SIZE \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
-. \}
-. sp
-. if !'\\*[$EN_TITLE]'' \{\
-. if '\\*[$EN_TITLE_QUAD]'L' \{ .LEFT \}
-. if '\\*[$EN_TITLE_QUAD]'LEFT' \{ .LEFT \}
-. if '\\*[$EN_TITLE_QUAD]'C' \{ .CENTER \}
-. if '\\*[$EN_TITLE_QUAD]'CENTER' \{ .CENTER \}
-. if '\\*[$EN_TITLE_QUAD]'CENTRE' \{ .CENTER \}
-. if '\\*[$EN_TITLE_QUAD]'R' \{ .RIGHT \}
-. if '\\*[$EN_TITLE_QUAD]'RIGHT' \{ .RIGHT \}
-. ie \\n[#EN_TITLE_UNDERSCORE] \{\
-. UNDERSCORE "\\*[$EN_TITLE]
-. \}
-. el \{\
-. PRINT "\\*[$EN_TITLE]
-. \}
-. \}
-. \}
-. ie \\n[#EN_NUMBER]=1 \{\
-. if !'\\*[$EN_TITLE]'' \{ .sp \}
-. \}
-. el \{ .sp \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#EN_MARKER_STYLE]=1 \{\
-. FAMILY \\*[$EN_NUMBER_FAM]
-. FT \\*[$EN_NUMBER_FT]
-. PT_SIZE \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
-. \}
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-. FAMILY \\*[$EN_LN_FAM]
-. FT \\*[$EN_LN_FT]
-. PT_SIZE \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE]
-. \}
-. \}
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-. ENDNOTE_NUMBERS_ALIGN_LEFT
-. ie \\n[#EN_LN_BRACKETS]=1 \{\
-. ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m'
-. ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
-. as $EN_LINENUMBER \\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
-. \}
-. el \{\
-. as $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
-. \}
-. \}
-. el \{\
-. ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
-. ds $EN_LINENUMBER \\n[#EN_MARK]\\*[$EN_LN_SEP]
-. \}
-. el \{\
-. ds $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP]
-. \}
-. \}
-. nr #EN_MARK 0
-. \}
-\!. TRAP OFF
-. nr #RESET_L_LENGTH \\n(.l
-. ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
-. RIGHT
-. \}
-. el \{\
-. nr #EN_NUMBER_L_LENGTH \w'\En[#EN_NUMBER].\0'
-. LEFT
-. \}
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-. if !\\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. nr #EN_NUMBER_L_LENGTH \w'\\*[$EN_LINENUMBER]'+\\*[$EN_LN_GAP]
-. LEFT
-. \}
-. \}
-. ll \\n[#EN_NUMBER_L_LENGTH]u
-. if \\n[#EN_MARKER_STYLE]=1 \{\
-\En[#EN_NUMBER].
-. \}
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-\\*[$EN_LINENUMBER]
-. rm $EN_LINENUMBER
-. \}
-. EOL
-. ll \\n[#RESET_L_LENGTH]u
-. nr #EN_FIGURE_SPACE \w'\0.'
-. ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. in \\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u
-. \}
-. el \{\
-. ti \\n[#EN_NUMBER_L_LENGTH]u
-. \}
-. nr #EN_TEXT_INDENT \\n(.i
-. QUAD \\*[$EN_QUAD]
-\!. TRAP
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$EN_FAM]
-. FT \\*[$EN_FT]
-. PT_SIZE \\n[#EN_PS]u
-. \}
-. if \\n[#REF]=1 \{\
-. ie !\\n[#EN_MARKER_STYLE]=2 \{\
-. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-. in \\*[$REF_EN_INDENT]
-. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
-. \}
-. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-. in \\*[$REF_EN_INDENT]
-. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u-\\n[#EN_FIGURE_SPACE]u)
-. \}
-. \}
-. el \{\
-. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-. in \\*[$REF_EN_INDENT]
-. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. br
-. in 0
-. if \\n[#EN_MARKER_STYLE]=2 \{\
-\!. in 0
-. \}
-. di
-.\" Restore sentence spacing
-. if \\n[#PRINT_STYLE]=2 \{\
-. if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
-. rm $RESTORE_SS_VAR
-. \}
-. ev
-. nr #PP_STYLE \\n[#PP_STYLE_PREV]
-. if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
-. rr #INDENT_FIRSTS
-. rr #ENDNOTE
-. if \\n[#PRINT_STYLE]=1 \{\
-. if \\n[#UNDERLINE_WAS_ON] \{\
-. rr #UNDERLINE_WAS_ON
-. UNDERLINE
-. \}
-. \}
-. if \\n[#SLANT_WAS_ON] \{\
-. rr #SLANT_WAS_ON
-\*[SLANT]\c
-. \}
-. \}
-. if \\n[#ADD_BREAK] \{\
-. br
-. rr #ADD_BREAK
-. \}
-.END
-\#
-\#
-\# ENDNOTES
-\# --------
-\# *Arguments:
-\# none
-\# *Function:
-\# Sets new document leading from #EN_LEAD, breaks to a new page,
-\# sets up an endnotes page based on registers and strings associated
-\# with endnotes, then outputs diversion END_NOTES.
-\#
-.MAC ENDNOTES END
-. nr #ENDNOTES 1
-. nr #EN_FIRST_PAGE 1
-. nr #HEADER_STATE \\n[#HEADERS_ON]
-. ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if \\n[#HEADERS_ON]=1 \{\
-. if !\\n[#EN_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
-. \}
-. if \\n[#HEADER_STATE]=1 \{\
-. ie \\n[#EN_HDRFTR_CENTER]=1 \{ . \}
-. el \{ .rm $HDRFTR_CENTER \}
-. \}
-. ie !\\n[#SUSPEND_PAGINATION] \{\
-. if \\n[#PAGINATE]=1 \{\
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. PAGENUM_STYLE \\*[$EN_PN_STYLE]
-. if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN]-1 \}
-. if r#EN_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
-. el \{ .nr #PAGINATE 0 \}
-. \}
-. if \\n[#FOOTERS_ON]=1 \{\
-. if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-. \}
-. NEWPAGE
-. if \\n[#FOOTERS_ON]=1 \{\
-. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-. rm $HDRFTR_CENTER_OLD
-. rm $HDRFTR_CENTER_NEW
-. \}
-. ie !\\n[#SUSPEND_PAGINATION] \{\
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. if r#EN_NO_FIRST_PN \{\
-. if \\n[#PAGINATION_STATE]=1 \{\
-. nr #PAGINATE 1
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
-. \}
-. rr #PAGINATION_STATE
-. PAGENUM_STYLE \\*[$EN_PN_STYLE]
-. if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
-. if \\n[#HEADER_STATE]=1 \{\
-. if \\n[#EN_ALLOWS_HEADERS] \{ .HEADERS \}
-. \}
-.\" Collect endnotes title string for TOC
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-. ds $TOC_TITLE_ITEM \\*[$EN_STRING]\\|
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_TITLE_FAM]
-\!. FT \\*[$TOC_TITLE_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-.\" End collection of endnotes title string for TOC
-.\" Process endnotes
-. if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#EN_LEAD]u \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#EN_NO_COLS] \{\
-. if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
-. nr #COLUMNS 0
-. \}
-. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-. ie \\n[#ADJ_EN_LEAD] \{\
-. nr #DOC_LEAD \\n[#EN_LEAD]
-. \}
-. el \{ .DOC_LEAD \\n[#EN_LEAD]u \}
-. \}
-. PRINT \&
-. ie r#EN_TITLE_SPACE \{ .sp |\\n[#EN_TITLE_SPACE]u \}
-. el \{ .sp |\\n[#T_MARGIN]u \}
-. mk ec
-. if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-. \}
-. ev ENDNOTES
-. if !'\\*[$EN_STRING]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#EN_LEAD]u
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
-. el \{ .LL \\n[#COL_L_LENGTH]u \}
-. ta \\n(.lu
-. \}
-. FAMILY \\*[$EN_STRING_FAM]
-. FT \\*[$EN_STRING_FT]
-. PT_SIZE \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
-. vs \\n[#EN_LEAD]u
-. \}
-. if '\\*[$EN_STRING_QUAD]'L' \{ .LEFT \}
-. if '\\*[$EN_STRING_QUAD]'LEFT' \{ .LEFT \}
-. if '\\*[$EN_STRING_QUAD]'C' \{ .CENTER \}
-. if '\\*[$EN_STRING_QUAD]'CENTER' \{ .CENTER \}
-. if '\\*[$EN_STRING_QUAD]'CENTRE' \{ .CENTER \}
-. if '\\*[$EN_STRING_QUAD]'R' \{ .RIGHT \}
-. if '\\*[$EN_STRING_QUAD]'RIGHT' \{ .RIGHT \}
-. EOL
-. if \\n[#EN_STRING_CAPS] \{ .CAPS \}
-. ie \\n[#EN_STRING_UNDERSCORE] \{\
-. ie \\n[#EN_STRING_UNDERSCORE]=2 \{\
-. UNDERSCORE2 "\\*[$EN_STRING]
-. \}
-. el \{\
-. UNDERSCORE "\\*[$EN_STRING]
-. \}
-. \}
-. el \{\
-. PRINT "\\*[$EN_STRING]
-. \}
-. \}
-. CAPS OFF
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE]=1 \{\
-. ALD \\n[#EN_LEAD]u*2u
-. \}
-. el \{\
-. ie \\n[#EN_SINGLESPACE]=1 \{\
-. ALD \\n[#EN_LEAD]u*2
-. \}
-. el \{\
-.
-. \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#EN_LEAD]u \}
-. QUAD \\*[$EN_QUAD]
-. nf
-. END_NOTES
-. br
-. ev
-. rm END_NOTES
-. if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#DOC_LEAD]u \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#ADJ_EN_LEAD] \{\
-. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
-. \}
-. el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
-. rr #RESTORE_DOC_LEAD
-. \}
-. if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
-. if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
-. if \\n[#LINENUMBERS]=2 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. \}
-. rr #ENDNOTES
-.END
-\#
-\# ====================================================================
-\#
-\# +++BIBLIOGRAPHY+++
-\#
-.ig
-Mom treats bibliographies and endnotes very similarly. The chief
-difference is that endnotes are collected and formatted inside a
-diversion, while bibliographies are built "by hand." ENDNOTES sets
-up the endnotes page and outputs the formatted diversion.
-BIBLIOGRAPHY sets up the bibliography page, then awaits refer
-commands.
-
-All of the bibliography control macros have their exact
-counterparts in the endnotes control macros. It was tempting to do
-fancy stuff with aliases to avoid the repetition, but for reasons
-of my own sanity, and for the benefit of anyone wanting to play
-around with the bibliography control macros, I decided to keep them
-separate.
-
-Because the bibliography control macros all have endnotes
-equivalents, refer to the appropriate, similar endnote macro for
-Arguments, Function and Notes.
-..
-\# Bibliography control macros
-\#
-.MAC BIBLIOGRAPHY_PT_SIZE END
-. nr #BIB_PS (p;\\$1)
-.END
-\#
-.MAC BIBLIOGRAPHY_LEAD END
-. if !\\n[#OK_PROCESS_LEAD] \{\
-. ds $BIB_LEAD \\$1
-. if !'\\$2'' \{\
-. ds $ADJUST_BIB_LEAD \\$2
-. \}
-. return
-. \}
-. rr #ADJ_BIB_LEAD
-. nr #BIB_LEAD (p;\\$1)
-. if '\\$2'ADJUST' \{\
-. nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
-. nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
-. nr #ADJ_DOC_LEAD 1
-. nr #ADJ_BIB_LEAD 1
-. nr #NO_TRAP_RESET 1
-. DOC_LEAD \\n[#BIB_LEAD]u ADJUST
-. nr #BIB_LEAD \\n[#DOC_LEAD]
-. DOC_LEAD \\n[#ORIG_DOC_LEAD]u
-. rr #NO_TRAP_RESET
-. nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
-. rr #ORIG_DOC_LEAD
-. \}
-.END
-\#
-.MAC BIBLIOGRAPHY_HDRFTR_CENTER END
-. ie '\\$1'' \{ .nr #BIB_HDRFTR_CENTER 1 \}
-. el \{ .rr #BIB_HDRFTR_CENTER \}
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING END
-. ds $BIB_STRING \\$1
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING_UNDERSCORE END
-. ie '\\$1'' \{ .nr #BIB_STRING_UNDERSCORE 1 \}
-. el \{\
-. ie '\\$1'2' \{ .nr #BIB_STRING_UNDERSCORE 2 \}
-. el \{ .nr #BIB_STRING_UNDERSCORE 0 \}
-. \}
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING_CAPS END
-. ie '\\$1'' \{ .nr #BIB_STRING_CAPS 1 \}
-. el \{ .rr #BIB_STRING_CAPS \}
-.END
-\#
-.MAC BIBLIOGRAPHY_NO_COLUMNS END
-. ie '\\$1'' \{ .nr #BIB_NO_COLS 1 \}
-. el \{ .rr #BIB_NO_COLS \}
-.END
-\#
-.MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END
-. ie '\\$1'' \{ .nr #BIB_NO_FIRST_PN 1 \}
-. el \{ .rr #BIB_NO_FIRST_PN \}
-.END
-\#
-.MAC BIBLIOGRAPHY_ALLOWS_HEADERS END
-. ie '\\$1'' \{ .nr #BIB_ALLOWS_HEADERS 1 \}
-. el \{\
-. ie '\\$1'ALL' \{\
-. nr #BIB_ALLOWS_HEADERS 1
-. nr #BIB_ALLOWS_HEADERS_ALL 1
-. \}
-. el \{\
-. rr #BIB_ALLOWS_HEADERS
-. rr #BIB_ALLOWS_HEADERS_ALL
-. \}
-. \}
-.END
-\#
-.MAC BIBLIOGRAPHY_PAGENUM_STYLE END
-. ds $BIB_PN_STYLE \\$1
-.END
-\#
-.MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END
-. nr #BIB_FIRST_PN \\$1
-.END
-\#
-.MAC SINGLESPACE_BIBLIOGRAPHY END
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE] \{\
-. nr #BIB_SINGLESPACE 1
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. BIBLIOGRAPHY_LEAD 12 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{\
-. nr #BIB_SINGLESPACE 1
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. BIBLIOGRAPHY_LEAD 12 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. el \{\
-. rr #BIB_SINGLESPACE
-. rr #IGNORE
-. if \\n[#OK_PROCESS_LEAD] \{\
-. BIBLIOGRAPHY_LEAD 24 ADJUST
-. nr #IGNORE 1
-. \}
-. \}
-. \}
-. \}
-.END
-\#
-\#
-\# Style for outputting collected bibliographic references
-\# -------------------------------------------------------
-\# *Argument:
-\# LIST | PLAIN [ <list separator> ] [ <list prefix> ]
-\# *Function:
-\# Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
-\# *Notes:
-\# Technically, user is supposed to enter PLAIN if s/he wants an
-\# unumbered bibliography, but the el clause says "any arg but
-\# LIST means unumbered." Effectively, any arg but LIST produces
-\# a "plain" bibliographic list.
-\#
-\# The 2nd and 3rd args have the same options as the 2nd arg to LIST.
-\#
-.MAC BIBLIOGRAPHY_TYPE END
-. ie '\\$1'LIST' \{\
-. nr #BIB_LIST 1
-. ie '\\$2'' \{\
-. if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
-. \}
-. el .ds $BIB_LIST_SEPARATOR \\$2
-. ie '\\$3'' .ds $BIB_LIST_PREFIX
-. el .ds $BIB_LIST_PREFIX \\$3
-. \}
-. el \{ .nr #BIB_LIST 0 \}
-.END
-\#
-\# Spacing between items in bibliographies
-\# ---------------------------------------
-\# *Argument:
-\# <amount of space>
-\# *Function:
-\# Gets value for #BIB_SPACE in units.
-\# *Notes:
-\# Requires a unit of measure.
-\#
-.MAC BIBLIOGRAPHY_SPACING END
-. ds $BIB_SPACE \\$1
-. if \\n[#BIB_LEAD]=0 \{\
-. nr #DEFER_BIB_SPACING 1
-. return
-. \}
-. ds $EVAL_BIB_SPACE \\*[$BIB_SPACE]
-. substring $EVAL_BIB_SPACE -1
-. ie '\\*[$EVAL_BIB_SPACE]'v' \{\
-. substring $BIB_SPACE 0 0
-. nr #BIB_SPACE \\n[#BIB_LEAD]*\\*[$BIB_SPACE]
-. \}
-. el \{\
-. nr #BIB_SPACE (\\$1)
-. \}
-.END
-\#
-\# Set up bibliography page
-\# ------------------------
-\# *Function:
-\# Sets up a new page, with title, ready to accept the output
-\# of refer's $LIST$ or .R1 bibliography .R2
-\# *Notes:
-\# Bibliography pages are set up almost identically to endnotes pages.
-\#
-.MAC BIBLIOGRAPHY END
-. nr #BIBLIOGRAPHY 1
-. nr #BIB_FIRST_PAGE 1
-. nr #HEADER_STATE \\n[#HEADERS_ON]
-. ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if \\n[#HEADERS_ON]=1 \{\
-. if !\\n[#BIB_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
-. \}
-. if \\n[#HEADER_STATE]=1 \{\
-. ie \\n[#BIB_HDRFTR_CENTER]=1 \{ . \}
-. el \{ .rm $HDRFTR_CENTER \}
-. \}
-. ie !\\n[#SUSPEND_PAGINATION] \{\
-. if \\n[#PAGINATE]=1 \{\
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-. if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN]-1 \}
-. if r#BIB_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
-. el \{ .nr #PAGINATE 0 \}
-. \}
-. if \\n[#FOOTERS_ON]=1 \{\
-. if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-. \}
-. NEWPAGE
-. if \\n[#FOOTERS_ON]=1 \{\
-. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-. rm $HDRFTR_CENTER_OLD
-. rm $HDRFTR_CENTER_NEW
-. \}
-. ie !\\n[#SUSPEND_PAGINATION] \{\
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. if r#BIB_NO_FIRST_PN \{\
-. if \\n[#PAGINATION_STATE]=1 \{\
-. nr #PAGINATE 1
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
-. \}
-. rr #PAGINATION_STATE
-. PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-. if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
-. if \\n[#HEADER_STATE]=1 \{\
-. if \\n[#BIB_ALLOWS_HEADERS] \{ .HEADERS \}
-. \}
-.\" Collect bibliography title string for TOC
-. nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-. af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-. ds $TOC_TITLE_ITEM \\*[$BIB_STRING]\\|
-. ev TOC_EV
-. da TOC_ENTRIES
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_TITLE_FAM]
-\!. FT \\*[$TOC_TITLE_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
-. \}
-\!. TRAP OFF
-. ie \\n[#PRINT_STYLE]=1 \{\
-\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-\!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
-. \}
-\!. EOL
-\!. ST 100 L
-\!. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-\!. FAMILY \\*[$TOC_PN_FAM]
-\!. FT \\*[$TOC_PN_FT]
-\!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-\!. TAB 100
-\!. PRINT \\*[LEADER]
-\!. TN
-\!. TRAP
-\!. PRINT \\n[#TOC_ENTRY_PN]
-\!. TQ
-. di
-. ev
-.\" End collection of bibliography title string for TOC
-.\" Process bibliography
-. if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#BIB_LEAD]u \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. if \\n[#BIB_NO_COLS] \{\
-. if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
-. nr #COLUMNS 0
-. \}
-. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-. ie \\n[#ADJ_BIB_LEAD] \{\
-. nr #DOC_LEAD \\n[#BIB_LEAD]
-. \}
-. el \{ .DOC_LEAD \\n[#BIB_LEAD]u \}
-. \}
-. PRINT \&
-. ie r#BIB_TITLE_SPACE \{ .sp |\\n[#BIB_TITLE_SPACE]u \}
-. el \{ .sp |\\n[#T_MARGIN]u \}
-. mk ec
-. if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-. \}
-. if !'\\*[$BIB_STRING]'' \{\
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. vs \\n[#BIB_LEAD]u
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. LL \\n[#DOC_L_LENGTH]u
-. ta \\n(.lu
-. if \\n[#COLUMNS] \{\
-. ie \\n[#BIB_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
-. el \{ .LL \\n[#COL_L_LENGTH]u \}
-. ta \\n(.lu
-. \}
-. FAMILY \\*[$BIB_STRING_FAM]
-. FT \\*[$BIB_STRING_FT]
-. PT_SIZE \\n[#BIB_PS]u\\*[$BIB_STRING_SIZE_CHANGE]
-. vs \\n[#BIB_LEAD]u
-. \}
-. if '\\*[$BIB_STRING_QUAD]'L' \{ .LEFT \}
-. if '\\*[$BIB_STRING_QUAD]'LEFT' \{ .LEFT \}
-. if '\\*[$EN_STRING_QUAD]'C' \{ .CENTER \}
-. if '\\*[$BIB_STRING_QUAD]'CENTER' \{ .CENTER \}
-. if '\\*[$BIB_STRING_QUAD]'CENTRE' \{ .CENTER \}
-. if '\\*[$BIB_STRING_QUAD]'R' \{ .RIGHT \}
-. if '\\*[$BIB_STRING_QUAD]'RIGHT' \{ .RIGHT \}
-. EOL
-. if \\n[#BIB_STRING_CAPS] \{ .CAPS \}
-. ie \\n[#BIB_STRING_UNDERSCORE] \{\
-. ie \\n[#BIB_STRING_UNDERSCORE]=2 \{\
-. UNDERSCORE2 "\\*[$BIB_STRING]
-. \}
-. el \{\
-. UNDERSCORE "\\*[$BIB_STRING]
-. \}
-. \}
-. el \{\
-. PRINT "\\*[$BIB_STRING]
-. \}
-. \}
-. CAPS OFF
-. FAMILY \\*[$BIB_FAMILY]
-. FT \\*[$BIB_FT]
-. PT_SIZE -\\*[$BIB_STRING_SIZE_CHANGE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE]=1 \{\
-. ALD \\n[#BIB_LEAD]*3u
-. \}
-. el \{\
-. ie \\n[#BIB_SINGLESPACE]=1 \{\
-. ALD \\n[#BIB_LEAD]u*3u
-. \}
-. el \{\
-. ALD \\n[#BIB_LEAD]u
-. \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#BIB_LEAD]u*2u \}
-. QUAD \\*[$BIB_QUAD]
-. if \\n[#PRINT_STYLE]=1 \{\
-. ie \\n[#SINGLE_SPACE]=1 \{\
-. vs \\n[#BIB_LEAD]u
-. \}
-. el \{\
-. ie \\n[#BIB_SINGLESPACE]=1 \{\
-. vs \\n[#BIB_LEAD]u
-. \}
-. el \{\
-. vs \\n[#BIB_LEAD]u
-. \}
-. \}
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie \\n[#ADJ_BIB_LEAD] \{\
-. nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
-. \}
-. el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
-. rr #RESTORE_DOC_LEAD
-. \}
-. if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
-. if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
-. rr #BIBLIOGRAPHY
-. if \\n[#LINENUMBERS]=2 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++TABLE OF CONTENTS+++
-\#
-\# Strings to allocate space for leaders and entry page numbers
-\#
-.ds $TOC_PN \\*[ST100]\\F[\\*[$TOC_PN_FAM]]\\f[\\*[$TOC_PN_FT]]\\s[\\n[#TOC_PS]u]#\\*[ST100X]\\*[ST101]\\s[\\*[$TOC_PN_SIZE_CHANGE]]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\*[ST101X]
-.ds $TOC_PN_TYPEWRITE \\*[ST100]#\\*[ST100X]\\*[ST101]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST101X]
-\#
-\# TOC ENTRIES PAGE NUMBERS PADDING
-\# --------------------------------
-\# *Argument:
-\# <number of placeholders for toc entries page numbers>
-\# *Function:
-\# Creates or modifies register #TOC_PN_PADDING.
-\# *Notes:
-\# "Placeholders" is the maximum number of digits in a page
-\# number numeral.
-\#
-\# Default is 3.
-\#
-.MAC TOC_PADDING END
-. nr #TOC_PN_PADDING \\$1
-.END
-\#
-\#
-\# PAGINATE TOC
-\# ------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Creates or removes register #PAGINATE_TOC.
-\# *Notes:
-\# Default is to paginate toc.
-\#
-.MAC PAGINATE_TOC END
-. ie '\\$1'' \{ .nr #PAGINATE_TOC 1 \}
-. el \{ .nr #PAGINATE_TOC 0 \}
-.END
-\#
-\#
-\# TOC POINT SIZE
-\# --------------
-\# *Argument:
-\# <base point size for toc pages>
-\# *Function:
-\# Creates or modifies register #TOC_PS.
-\# *Notes:
-\# This size control macro differs from other size control macros
-\# in that it sets an absolute point size, not a relative one.
-\# See notes for ENDNOTE_PT_SIZE for explanation. No unit of
-\# measure required.
-\#
-\# No unit of measure required (points assumed). Default is 11.5
-\# for TYPESET.
-\#
-.MAC TOC_PT_SIZE END
-. nr #TOC_PS (p;\\$1)
-.END
-\#
-\#
-\# TOC LEADING
-\# -----------
-\# *Argument:
-\# <leading for toc pages> [ADJUST]
-\# *Function:
-\# Creates or modifies register #TOC_LEAD. If optional ADJUST
-\# given, adjusts lead to fill page. If #OK_PROCESS_LEAD doesn't
-\# exist, stores arguments for when it's okay to run the macro.
-\# *Notes:
-\# No unit of measure required (points assumed).
-\#
-\# Default is same as DOC_LEAD.
-\#
-.MAC TOC_LEAD END
-. if !\\n[#OK_PROCESS_LEAD] \{\
-. ds $TOC_LEAD \\$1
-. if !'\\$2'' \{\
-. ds $ADJUST_TOC_LEAD \\$2
-. \}
-. return
-. \}
-. rr #ADJ_TOC_LEAD
-. nr #TOC_LEAD (p;\\$1)
-. if '\\$2'ADJUST' \{\
-. nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
-. nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
-. nr #ADJ_DOC_LEAD 1
-. nr #ADJ_TOC_LEAD 1
-. nr #NO_TRAP_RESET 1
-. DOC_LEAD \\n[#TOC_LEAD]u ADJUST
-. nr #TOC_LEAD \\n[#DOC_LEAD]
-. DOC_LEAD \\n[#ORIG_DOC_LEAD]u
-. rr #NO_TRAP_RESET
-. nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
-. rr #ORIG_DOC_LEAD
-. \}
-.END
-\#
-\#
-\# TOC PAGES PAGE-NUMBERING STYLE
-\# ------------------------------
-\# *Argument:
-\# DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\# Creates or modifies string $TOC_PN_STYLE
-\# *Notes:
-\# Page numbering style for page numbers that appear in the
-\# headers/footers of toc pages. See notes for PAGENUM_STYLE.
-\#
-\# Default is roman.
-\#
-.MAC TOC_PAGENUM_STYLE END
-. ds $TOC_PN_STYLE \\$1
-.END
-\#
-\#
-\# TOC RECTO_VERSO SWITCH
-\# ----------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Creates or removes register #TOC_RV_SWITCH
-\# *Notes:
-\# Allows switching of L/R margins if a doc is recto/verso and
-\# the first toc page happens to fall the wrong way
-\#
-.MAC TOC_RV_SWITCH END
-. ie '\\$1'' \{ .nr #TOC_RV_SWITCH 1 \}
-. el \{ .rr #TOC_RV_SWITCH \}
-.END
-\#
-\# - for TOC "doc header" (i.e. "Contents")
-\#
-\# TOC HEADER STRING
-\# -----------------
-\# *Argument:
-\# <string for "doc header" of first toc page>
-\# *Function:
-\# Creates or modifies string $TOC_HEADER_STRING
-\# *Notes:
-\# Default is "Contents".
-\#
-.MAC TOC_HEADER_STRING END
-. ds $TOC_HEADER_STRING \\$1
-.END
-\#
-\# - for TOC entries page number numerals
-\#
-\# Control macros for toc doc titles, heads, subheads and paraheads
-\# ----------------------------------------------------------------
-\#
-\# All these control macros behave the same way, setting the family,
-\# font, point size and indent from the left margin of the different
-\# kinds of entries that can appear in the toc. The way they
-\# operate is identical to all other _FAMILY, _FONT and _SIZE
-\# control macros. _INDENT takes an absolute value.
-\# TOC_APPENDS_AUTHORS is unique in this section.
-\#
-\# - for title entries
-\#
-.MAC TOC_TITLE_INDENT END
-. nr #TOC_TITLE_INDENT (\\$1)
-.END
-\#
-\#
-.MAC TOC_TITLE_ENTRY END
-. nr #USER_SET_TITLE_ITEM 1
-. ds $USER_SET_TITLE_ITEM \\$1
-.END
-\#
-\#
-\# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES
-\# -----------------------------------------
-\# *Argument:
-\# <none> | <name(s) of author(s) as they should appear in toc doc title entries>
-\# *Function:
-\# Creates register #TOC_AUTHORS (to tell TOC to append authors
-\# to toc doc title entries). Optionally creates string
-\# $TOC_AUTHORS.
-\# *Notes:
-\# Normally, TOC does not append the author(s) to a toc doc title
-\# entry. This special macro instructs TOC to do so.
-\#
-\# If user has multiple authors for each doc when collating,
-\# TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between
-\# COLLATE and START in each doc. Otherwise, mom prints only the
-\# first author given to AUTHOR.
-\#
-.MAC TOC_APPENDS_AUTHOR END
-. nr #TOC_AUTHORS 1
-. if !'\\$1'' \{\
-. ds $TOC_AUTHORS \\$1
-. \}
-.END
-\#
-\# - for head entries
-\#
-.MAC TOC_HEAD_INDENT END
-. nr #TOC_HEAD_INDENT (\\$1)
-.END
-\#
-\# - for subhead entries
-\#
-.MAC TOC_SUBHEAD_INDENT END
-. nr #TOC_SH_INDENT (\\$1)
-.END
-\#
-\# - for parahead entries
-\#
-.MAC TOC_PARAHEAD_INDENT END
-. nr #TOC_PH_INDENT (\\$1)
-.END
-\#
-\#
-.MAC TOC END
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if !r#PAGINATE_TOC \{ .PAGINATE_TOC \}
-. nr #TOC_FIRST_PAGE 1
-. if \\n[#FINIS] \{\
-. if \\n[#FOOTERS_WERE_ON] \{\
-. FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
-. \}
-. \}
-. if \\n[#FOOTERS_ON]=1 \{\
-. if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-. ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
-. el \{ .PAGINATION OFF \}
-. \}
-. if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS OFF \} \" But have to turn FOOTERS off again so they don't print when FINIS was called
-. COLLATE
-. if \\n[#FINIS] \{\
-. if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \} \" Finally, turn footers on if they were on
-. rr #FOOTERS_WERE_ON
-. if \\n[#PAGINATION_WAS_ON] \{\
-. nr #PAGINATE 1
-. rr #PAGINATION_WAS_ON
-. \}
-. rr #FINIS
-. \}
-. ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
-. el \{ .PAGINATION OFF \}
-. if \\n[#FOOTERS_ON]=1 \{\
-. ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-. rm $HDRFTR_CENTER_OLD
-. rm $HDRFTR_CENTER_NEW
-. \}
-. rr #COLLATED_DOC
-. DOCHEADER OFF
-. PAGENUMBER 1
-. if \\n[#PRINT_STYLE]=1 \{\
-. rr #IGNORE
-. DOC_LEAD 24 ADJUST
-. nr #IGNORE 1
-. \}
-. if \\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 3 \}
-. START
-. PP
-. nr #COLUMNS 0
-. if \\n[#PRINT_STYLE]=2 \{\
-. ie r#ADJ_TOC_LEAD \{\
-. nr #NO_TRAP_RESET 1
-. DOC_LEAD \\n[#TOC_LEAD]u ADJUST
-. rr #NO_TRAP_RESET
-. \}
-. el \{ .DOC_LEAD \\n[#TOC_LEAD]u \}
-. \}
-. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-. if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-. \}
-. DOC_LINE_LENGTH \\n[#DOC_L_LENGTH]u
-. QUAD \\*[$TOC_HEADER_QUAD]
-. PAGENUM_STYLE \\*[$TOC_PN_STYLE]
-. if \\n[#PRINT_STYLE]=1 \{\
-. TYPEWRITER
-. \}
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$TOC_HEADER_FAM]
-. FT \\*[$TOC_HEADER_FT]
-. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
-. \}
-. ie \\n[#PRINT_STYLE]=1 \{\
-. CAPS
-. UNDERLINE
-. PRINT "\\*[$TOC_HEADER_STRING]"
-. UNDERLINE OFF
-. CAPS OFF
-. \}
-. el \{\
-. PRINT "\\*[$TOC_HEADER_STRING]"
-. \}
-. LEFT
-. SP
-.\" In collated docs, this bit inserts the first doc's title
-.\" underneath the TOC header, before the TOC_ENTRIES diversion
-.\" gets output.
-. nf
-. if d$FIRST_DOC_TITLE \{\
-. nr #RESTORE_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
-. TOC_PADDING \\n[#FIRST_DOC_TOC_PN_PADDING]
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$TOC_TITLE_FAM]
-. FT \\*[$TOC_TITLE_FT]
-. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
-. \}
-. ie \\n[#PRINT_STYLE]=1 \{\
-. PAD "\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN_TYPEWRITE]"
-. \}
-. el \{\
-. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN]"
-. \}
-. EOL
-. ST 100 L
-. ST 101 R
-. if \\n[#PRINT_STYLE]=2 \{\
-. FAMILY \\*[$TOC_PN_FAM]
-. FT \\*[$TOC_PN_FT]
-. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
-. \}
-. TAB 100
-. PRINT \\*[LEADER]
-. TN
-. PRINT \\n[#FIRST_DOC_TITLE_PN]
-. TQ
-. \}
-. TOC_PADDING \\n[#RESTORE_TOC_PN_PADDING]
-. nf
-. TOC_ENTRIES
-. br
-. rr #TOC
-. if \\n[#LINENUMBERS]=3 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. nn 1
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++COLUMNS+++
-\#
-\# COLUMNS
-\# -------
-\# *Arguments:
-\# <number of columns> <width of gutters>
-\# *Function:
-\# Creates registers associated with setting docs in columns.
-\# Calculates column line lengths and offsets
-\# *Notes:
-\# COLUMNS, if used, s/b the last macro invoked before START.
-\#
-.MAC COLUMNS END
-. if \\n[#IGNORE_COLUMNS]=1 \{ .return \}
-. nr #COLUMNS 1
-. nr #NUM_COLS \\$1
-. nr #GUTTER (\\$2)
-. nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
-. nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
-. nr #COL_NUM 0 1
-. while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
-. nr #COL_TOTAL \\n+[#COL_TOTAL]
-.\}
-. if \\n[#NUM_COLS]=1 \{\
-. if !\\n[#COLLATE]=1 \{ .MN_INIT \}
-. \}
-. rr #COL_TOTAL
-. rr #COL_NUM
-.END
-\#
-\#
-\# NEXT COLUMN
-\# -----------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Breaks current column and moves to next column.
-\# If current column is the last on the page, breaks
-\# to a new page.
-\#
-.MAC COL_NEXT END
-. if \\n[#COLUMNS] \{\
-. nr #COL_NEXT 1
-. ie '\\$0'COL_NEXT' \{ .br \}
-. el \{\
-. brp
-. RLD 1v
-. \}
-. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-. bp
-. \}
-. el \{ .FOOTER \}
-. \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++LISTS+++
-\#
-\# LIST
-\# ----
-\# *Arguments:
-\# [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] [ <separator> | NONE ] [ <prefix> ] [ <anything> ]
-\# *Function:
-\# Stores indent information in effect prior to invocation and
-\# initializes a list with the supplied enumerator (and separator).
-\# *Notes:
-\# Default enumerator is a bullet.
-\#
-\# Enumerator *must* be supplied for every list that's to the
-\# right of another list, every time, unless the default bullet is
-\# desired.
-\#
-\# <anything> moves back one list level intuitively, or exits lists
-\# completely if the level in which it's invoked is the first.
-\#
-.MAC LIST END
-. ds $1ST_LETTER \\$1
-. substring $1ST_LETTER 0 0
-. if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
-. ie '\\*[$1ST_LETTER]'R' \{\
-. ds $LAST_CHAR \\$1
-. substring $LAST_CHAR -1
-. if !\B'\\*[$LAST_CHAR]' \{\
-. tm1 "[mom]: You must append a number to the \\$1 argument to LIST at line \\n(.c.
-. tm1 " The number should be the total number of items in this list.
-. tm1 " See the documentation.
-. ab Aborting LIST
-. \}
-. ds $ROMAN_WIDTH \\$1
-. substring $ROMAN_WIDTH 1
-. while !\B'\\*[$ROMAN_WIDTH]' \{\
-. substring $ROMAN_WIDTH 1
-.\}
-. length #ROMAN_LENGTH \\*[$ROMAN_WIDTH]
-. ds $LIST_ARG_1 \\$1
-. substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1)
-. \}
-. el \{\
-. ds $LIST_ARG_1 \\$1
-. \}
-. if !r#DEPTH \{\
-. nr #STORED_HL_INDENT \\n[#HL_INDENT]
-. nr #STORED_T_INDENT \\n[#T_INDENT]
-. nr #CURRENT_L_LENGTH \\n(.l
-. nr #DEPTH 0 1
-. if \\n[#INDENT_ACTIVE]=1 \{\
-. if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-. nr #STORED_L_INDENT \\n[#L_INDENT]
-. nr #RESTORE_PREV_INDENT 1
-. \}
-. if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
-. nr #STORED_BL_INDENT \\n[#BL_INDENT]
-. nr #STORED_BR_INDENT \\n[#BR_INDENT]
-. IBX
-. nr #ORIG_L_LENGTH \\n(.l
-. IB
-. nr #RESTORE_PREV_INDENT 2
-. \}
-. if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
-. nr #STORED_R_INDENT \\n[#R_INDENT]
-. IRX
-. nr #ORIG_L_LENGTH \\n(.l
-. IR
-. nr #RESTORE_PREV_INDENT 3
-. if \\n[#INDENT_LEFT_ACTIVE]=1 \{ .nr #RESTORE_PREV_INDENT 4 \}
-. \}
-. \}
-. \}
-. if \\n[#NUM_ARGS]=0 \{\
-. nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
-. ds $ENUMERATOR\\n+[#DEPTH] \(bu
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-. ds $SEPARATOR
-. \}
-. if \\n[#NUM_ARGS]>0 \{\
-. rr #ARGS_TO_LIST \" Clear this before processing arg 1.
-. if '\\*[$LIST_ARG_1]'DASH' \{\
-. nr #ARGS_TO_LIST 1
-. ds $ENUMERATOR\\n+[#DEPTH] \(en
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-. ds $SEPARATOR\\n[#DEPTH]
-. \}
-. if '\\*[$LIST_ARG_1]'BULLET' \{\
-. nr #ARGS_TO_LIST 1
-. ds $ENUMERATOR\\n+[#DEPTH] \(bu
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-. ds $SEPARATOR\\n[#DEPTH]
-. \}
-. if '\\*[$LIST_ARG_1]'DIGIT' \{\
-. nr #ARGS_TO_LIST 1
-. nr #ENUMERATOR\\n+[#DEPTH] 0 1
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-. ds $SEPARATOR\\n[#DEPTH] .
-. ds $PREFIX\\n[#DEPTH]
-. if \\n[#NUM_ARGS]>=2 \{\
-. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-. el .ds $SEPARATOR\\n[#DEPTH] \\$2
-. if \\n[#NUM_ARGS]=3 \{\
-. ds $PREFIX\\n[#DEPTH] \\$3
-. \}
-. \}
-. \}
-. if '\\*[$LIST_ARG_1]'alpha' \{\
-. nr #ARGS_TO_LIST 1
-. nr #ENUMERATOR\\n+[#DEPTH] 0 1
-. af #ENUMERATOR\\n[#DEPTH] a
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-. ds $SEPARATOR\\n[#DEPTH] )
-. ds $PREFIX\\n[#DEPTH]
-. if \\n[#NUM_ARGS]>=2 \{\
-. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-. el .ds $SEPARATOR\\n[#DEPTH] \\$2
-. if \\n[#NUM_ARGS]=3 \{\
-. ds $PREFIX\\n[#DEPTH] \\$3
-. \}
-. \}
-. \}
-. if '\\*[$LIST_ARG_1]'ALPHA' \{\
-. nr #ARGS_TO_LIST 1
-. nr #ENUMERATOR\\n+[#DEPTH] 0 1
-. af #ENUMERATOR\\n[#DEPTH] A
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-. ds $SEPARATOR\\n[#DEPTH] )
-. ds $PREFIX\\n[#DEPTH]
-. if \\n[#NUM_ARGS]>=2 \{\
-. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-. el .ds $SEPARATOR\\n[#DEPTH] \\$2
-. if \\n[#NUM_ARGS]=3 \{\
-. ds $PREFIX\\n[#DEPTH] \\$3
-. \}
-. \}
-. \}
-. if '\\*[$1ST_LETTER]'R' \{\
-. nr #ARGS_TO_LIST 1
-. nr #ENUMERATOR\\n+[#DEPTH] 0 1
-. if '\\*[$LIST_ARG_1]'roman' \{\
-. af #ENUMERATOR\\n[#DEPTH] i
-. \}
-. if '\\*[$LIST_ARG_1]'ROMAN' \{\
-. af #ENUMERATOR\\n[#DEPTH] I
-. \}
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] roman
-. ds $SEPARATOR\\n[#DEPTH] )
-. ds $PREFIX\\n[#DEPTH]
-. if \\n[#NUM_ARGS]>=2 \{\
-. ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-. el .ds $SEPARATOR\\n[#DEPTH] \\$2
-. if \\n[#NUM_ARGS]=3 \{\
-. ds $PREFIX\\n[#DEPTH] \\$3
-. \}
-. \}
-. \}
-. if '\\*[$LIST_ARG_1]'USER' \{\
-. nr #ARGS_TO_LIST 1
-. ds $ENUMERATOR\\n+[#DEPTH] \\$2
-. ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-. ds $SEPARATOR\\n[#DEPTH]
-. ds $PREFIX\\n[#DEPTH]
-. \}
-. if \\n[#NUM_ARGS]=1 \{\
-. if !r#ARGS_TO_LIST \{\
-. ie \\n[#DEPTH]=1 \{\
-. ie \\n[#NEXT_DEPTH_BACK]=0 \{\
-. SET_LIST_INDENT
-. if \\n[#QUIT]=1 \{\
-. QUIT_LISTS
-. return
-. \}
-. return
-. \}
-. el \{\
-. QUIT_LISTS
-. return
-. \}
-. \}
-. el \{\
-. SET_LIST_INDENT
-. return
-. \}
-. \}
-. \}
-. \}
-. nr #TOTAL_LISTS \\n[#DEPTH]
-. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
-. if '\\*[$LIST_ARG_1]'ALPHA'\{\
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
-. \}
-. \}
-. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
-. GET_ROMAN_INDENT
-. \}
-. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
-. \}
-. LL \\n[#CURRENT_L_LENGTH]u
-. ie \\n[#DEPTH]=1 \{\
-. ie \\n[#INDENT_ACTIVE]=1 \{\
-. if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-. nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
-. \}
-. if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
-. nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
-. \}
-. if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
-. ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-. \" Don't do anything; we already have a left indent
-. \}
-. el \{\
-. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. el \{\
-. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-. \}
-. \}
-. el \{\
-. nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-. \}
-.END
-\#
-\#
-\# ITEM
-\# ----
-\# *Arguments:
-\# none
-\# *Function:
-\# Prints enumerator for a given list depth and prepares mom to
-\# receive the text of an item.
-\#
-.MAC ITEM END
-. if \\n[#LINENUMBERS]=1 \{\
-. NUMBER_LINES OFF
-. nr #LINENUMBERS 2
-. \}
-. if \\n[#KERN]=1 \{\
-. nr #KERN_WAS_ON 1
-. KERN OFF
-. \}
-. IL
-. ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
-. TRAP OFF
-. HI \\n[#HL_INDENT\\n[#DEPTH]]u
-. if '\\*[$SEPARATOR\\n[#DEPTH]]')' \{ .nr #SEP_TYPE 1 \}
-. if '\\*[$SEPARATOR\\n[#DEPTH]]']' \{ .nr #SEP_TYPE 1 \}
-. if '\\*[$SEPARATOR\\n[#DEPTH]]'}' \{ .nr #SEP_TYPE 1 \}
-. ie \\n[#IN_BIB_LIST]=1 \{\
-. ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. el \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \h'-\w'\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. el \{\
-. ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
-.\" DIGIT
-. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
-. ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
-. ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. el \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. el \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. el \{\
-.\" ALPHA
-. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-.\" alpha
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. \}
-. el \{\
-. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
-. ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
-.\" ROMAN I, padded
-. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-.\" roman i, padded
-. el \{\
-. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-.\" No pad
-. el \{\
-.\" ROMAN I, no pad
-. ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
-. ie \\n[#SEP_TYPE]=1 \{\
-. PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-. \}
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-.\" roman i, no pad
-. el \{\
-. PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. \}
-. if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
-. PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-. \}
-. \}
-. rr #SEP_TYPE
-. EOL
-. if \\n[#REF]=1 \{\
-. IL +\\*[$REF_BIB_INDENT]
-. ti \\n[#L_INDENT]u-\\*[$REF_BIB_INDENT]
-. \}
-. TRAP
-. if \\n[#KERN_WAS_ON]=1 \{\
-. KERN
-. rr #KERN_WAS_ON
-. \}
-. if \\n[#LINENUMBERS]=2 \{\
-. NUMBER_LINES RESUME
-. nr #LINENUMBERS 1
-. \}
-.END
-\#
-\# A utility macro that determines the space to reserve for
-\# roman numeral enumerated lists. Limit is 20 roman numerals
-\# per list. If this isn't enough, the user can add to the
-\# macro.
-\#
-.MAC GET_ROMAN_INDENT END
-. if '\\*[$LIST_ARG_1]'roman' \{\
-. if '\\*[$ROMAN_WIDTH]'1' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 1
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'2' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 2
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'3' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 3
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'4' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 4
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'5' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 5
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'6' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 6
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'7' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 7
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'8' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 8
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'9' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 9
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'10' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 10
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'11' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 11
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'12' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 12
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'13' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 13
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'14' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 14
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'15' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 15
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'16' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 16
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'17' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 17
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'18' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 18
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'19' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 19
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'20' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 20
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. \}
-. if '\\*[$LIST_ARG_1]'ROMAN' \{\
-. if '\\*[$ROMAN_WIDTH]'1' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 1
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'2' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 2
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'3' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 3
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'4' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 4
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'5' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 5
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'6' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 6
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'7' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 7
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'8' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 8
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'9' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 9
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'10' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 10
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'11' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 11
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'12' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 12
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'13' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 13
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'14' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 14
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'15' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 15
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'16' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 16
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'17' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 17
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'18' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 18
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'19' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 19
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. if '\\*[$ROMAN_WIDTH]'20' \{\
-. ds $ROMAN_WIDTH\\n[#DEPTH] 20
-. nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-. \}
-. \}
-.END
-\#
-\# SHIFT LIST
-\# ----------
-\# *Arguments:
-\# <amount by which to indent a list to the right>
-\# *Function:
-\# Adds the value of the arg to the current list's indent.
-\# *Notes:
-\# Requires a unit of measure.
-\#
-.MAC SHIFT_LIST END
-. ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
-. nr #SHIFT_LIST\\n[#DEPTH] (\\$1)
-. nr #LIST_INDENT\\n[#DEPTH] \\n(.i+\\n[#L_INDENT]+\\n[#SHIFT_LIST\\n[#DEPTH]]
-. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]
-. \}
-. el \{\
-. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]+(\\$1)
-. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]
-. \}
-.END
-\#
-\#
-\# PAD LIST DIGITS
-\# ---------------
-\# *Arguments:
-\# [ LEFT ]
-\# *Function:
-\# Adds a figure space to a list's hanging and left indent. If
-\# LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM.
-\#
-.MAC PAD_LIST_DIGITS END
-. if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
-. nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0'
-. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]]
-. nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]'
-. if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
-. \}
-. if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \{\
-. if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
-. \}
-. if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
-. if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
-. \}
-.END
-\#
-\#
-\# RESET LIST
-\# ----------
-\# *Arguments:
-\# none
-\# *Function:
-\# Resets register enumerators to 1 or a.
-\#
-.MAC RESET_LIST END
-. ie '\\$1'' \{ .nr #ENUMERATOR\\n[#DEPTH] 0 1 \}
-. el \{ .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1 \}
-.END
-\#
-\#
-\# QUIT LISTS
-\# ----------
-\# *Arguments:
-\# none
-\# *Function:
-\# Exits lists cleanly and restores any indents that were in
-\# effect prior to LIST.
-\#
-.MAC QUIT_LISTS END
-. IQ CLEAR
-. nr #HL_INDENT \\n[#STORED_HL_INDENT]
-. nr #T_INDENT \\n[#STORED_T_INDENT]
-. rr #STORED_HL_INDENT
-. if \\n[#RESTORE_PREV_INDENT]=1 \{\
-. nr #L_INDENT \\n[#STORED_L_INDENT]
-. IL
-. rr #STORED_L_INDENT
-. \}
-. if \\n[#RESTORE_PREV_INDENT]=2 \{\
-. nr #BL_INDENT \\n[#STORED_BL_INDENT]
-. nr #BR_INDENT \\n[#STORED_BR_INDENT]
-. LL \\n[#ORIG_L_LENGTH]u
-. IB
-. rr #STORED_BL_INDENT
-. rr #STORED_BR_INDENT
-. \}
-. if \\n[#RESTORE_PREV_INDENT]=3 \{\
-. nr #R_INDENT \\n[#STORED_R_INDENT]
-. LL \\n[#ORIG_L_LENGTH]u
-. IR
-. rr #STORED_R_INDENT
-. \}
-. if \\n[#RESTORE_PREV_INDENT]=4 \{\
-. nr #R_INDENT \\n[#STORED_R_INDENT]
-. nr #L_INDENT \\n[#STORED_L_INDENT]
-. LL \\n[#ORIG_L_LENGTH]u
-. IR
-. IL
-. rr #STORED_R_INDENT
-. rr #STORED_L_INDENT
-. \}
-.\" Clean up after exiting last depth of list
-. nr #REMOVE 0 1
-. while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\
-. rr #LIST_INDENT\\n[#REMOVE]
-. rr #ENUMERATOR\\n[#REMOVE]
-. rm $ENUMERATOR\\n[#REMOVE]
-. rr #SEPARATOR\\n[#REMOVE]
-. rm $ENUMERATOR_TYPE\\n[#REMOVE]
-. rr #PAD_LIST_DIGITS\\n[#REMOVE]
-.\}
-. rr #REMOVE
-. rr #TOTAL_LISTS
-. rr #QUIT
-. rr #DEPTH
-. rr #NEXT_DEPTH_BACK
-. rr #RESTORE_PREV_INDENT
-. rr #ORIG_L_LENGTH
-. rr #CURRENT_L_LENGTH
-.END
-\#
-\#
-\# SET LIST INDENT
-\# ---------------
-\# *Arguments:
-\# none
-\# *Function:
-\# Restores indent of prev. list in nested lists. Also sets the
-\# #QUIT register if an invocation of LIST OFF applies to the first
-\# level of list.
-\#
-.MAC SET_LIST_INDENT END
-. nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
-. if \\n[#NEXT_DEPTH_BACK]=0 \{\
-. nr #QUIT 1
-. return
-. \}
-. nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]
-. nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]]
-.END
-\#
-\# ====================================================================
-\#
-\# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
-\#
-\# COLLATE
-\# -------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Turns headers off (if on) and saves header state, sets register
-\# #COLLATE to 1 (toggle), and breaks to a new page.
-\# *Notes:
-\# COLLATE exists primarily to allow putting multiple chapters in
-\# a single file, although it can be used for any document type. After
-\# COLLATE, any of the macros that normally precede START may be
-\# used, and should behave as expected.
-\#
-\# N.B.--the START macro *must* be used after COLLATE (and any other
-\# macros that alter mom's behaviour).
-\#
-.MAC COLLATE END
-. nr #COLLATE 1
-. nr #HEADER_STATE \\n[#HEADERS_ON]
-. HEADERS OFF
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. nr #PAGINATION_STATE \\n[#PAGINATE]
-. PAGINATION OFF
-. \}
-. IQ CLEAR
-. TQ
-.\" Collect first doc's title for TOC
-. if \\n[#COLLATED_DOC]=0 \{\
-. ie \\n[#USER_SET_TITLE_ITEM] \{\
-. ds $FIRST_DOC_TITLE \\*[$USER_SET_TITLE_ITEM]\\|
-. rr #USER_SET_TITLE_ITEM
-. rm $USER_SET_TITLE_ITEM
-. \}
-. el \{\
-. ie \\n[#DOC_TYPE]=2 \{\
-. ie '\\*[$CHAPTER_TITLE]'' \{\
-. ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
-. \}
-. el \{\
-. ie '\\*[$CHAPTER]'' \{\
-. ds $FIRST_DOC_TITLE \\*[$CHAPTER_TITLE]\\|
-. \}
-. el \{\
-. ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
-. \}
-. \}
-. \}
-. el \{\
-. ds $FIRST_DOC_TITLE \\*[$TITLE]\\|
-. \}
-. \}
-. if \\n[#TOC_AUTHORS]=1 \{\
-. ie '\\*[$TOC_AUTHORS]'' \{\
-. as $FIRST_DOC_TITLE /\\|\\*[$AUTHOR_1]\\|
-. \}
-. el \{\
-. as $FIRST_DOC_TITLE /\\|\\*[$TOC_AUTHORS]\\|
-. rm $TOC_AUTHORS
-. \}
-. \}
-. nr #COLLATED_DOC 1
-. \}
-.\" End title collection for TOC
-. LL \\n[#DOC_L_LENGTH]u
-. QUAD $DOC_QUAD
-. nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
-. LS \\n[#DOC_LEAD]u
-\*[SLANTX]
-\*[CONDX]
-\*[EXTX]
-' NEWPAGE
-. if \\n[#DEFER_PAGINATION] \{ .PAGINATE \}
-. if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
-. PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
-. rm $RESTORE_PAGENUM_STYLE
-. \}
-. rm $EN_TITLE
-. rr #PAGENUM_STYLE_SET
-.END
-\#
-\#
-\# NUMBER_LINES
-\# ------------
-\# *Arguments:
-\# <starting line number> [ <increment> [ <gutter> ] ]
-\# or
-\# <anything> | RESUME
-\# *Function:
-\# Begin, suspend/turn off, or resume numbering of output lines.
-\#
-.MAC NUMBER_LINES END
-. br
-. if '\\n(.z'EPI_TEXT' \{ .return \}
-. if '\\$1'' \{\
-. tm1 "[mom]: NUMBER_LINES at line \\n(.c has no argument.
-. tm1 " Most likely, you have forgotten to give it a starting line number.
-. ab Aborting on NUMBER_LINES.
-. \}
-. if !\\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 1 \}
-.\" Test whether the first arg is a digit.
-. if \B'\\$1' \{\
-. nr #LN \\$1
-. ds $LN_NUM \\$1
-. if !'\\n(.z'' \{ .nr #RESTORE_LN_NUM 1 \}
-. ie '\\$2'' \{\
-. if '\\*[$LN_INC]'' .ds $LN_INC 1
-. \}
-. el .ds $LN_INC \\$2
-. ie '\\$3'' \{\
-. if '\\*[$LN_GUTTER]'' .ds $LN_GUTTER 2
-. \}
-. el .ds $LN_GUTTER \\$3
-. \}
-. ie !\\n[#LN] \{\
-.\" In other words, the first arg was not a digit.
-. rr #LN
-. ie '\\$1'RESUME' \{\
-. nm +0
-. \}
-. el \{\
-. nm
-. if !\\n[#LINENUMBERS]=2 \{ .rr #LINENUMBERS \}
-. \}
-. \}
-. el \{\
-. nm \\*[$LN_NUM] \\*[$LN_INC] \\*[$LN_GUTTER] -3-\\*[$LN_GUTTER]
-. if !'\\n(.z'' \{ .nr #DIVER_LN_OFF 1 \}
-. \}
-. rr #LN
-.END
-\#
-\#
-\# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
-\# ---------------------------------------------------------
-\# *Argument:
-\# <gutter> | <anything>
-\# *Function:
-\# Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric
-\# argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering
-\# off.
-\# *Notes:
-\# #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE.
-\# The single numeric argument allows establishing a different gutter from
-\# the one used for line numbers in running text.
-\#
-.MAC NUMBER_QUOTE_LINES END
-. ie \\n[#NUM_ARGS]=0 \{ .nr #QUOTE_LN 1 \}
-. el \{\
-. ie \B'\\$1' \{\
-. nr #QUOTE_LN 1
-. ds $Q_LN_GUTTER \\$1
-. \}
-. el \{\
-. ie '\\$1'SILENT' \{ .nr #SILENT_QUOTE_LN 1 \}
-. el \{\
-. rr #QUOTE_LN
-. rr #SILENT_QUOTE_LN
-. \}
-. \}
-. \}
-.END
-\#
-\#
-.MAC NUMBER_BLOCKQUOTE_LINES END
-. ie \\n[#NUM_ARGS]=0 \{ .nr #BQUOTE_LN 1 \}
-. el \{\
-. ie \B'\\$1' \{\
-. nr #BQUOTE_LN 1
-. ds $BQ_LN_GUTTER \\$1
-. \}
-. el \{\
-. ie '\\$1'SILENT' \{ .nr #SILENT_BQUOTE_LN 1 \}
-. el \{\
-. rr #BQUOTE_LN
-. rr #SILENT_BQUOTE_LN
-. \}
-. \}
-. \}
-.END
-\#
-\# OUTPUT BLANK PAGES
-\# ------------------
-\# *Argument:
-\# <number of blank pages to output>
-\# *Function:
-\# Outputs blank pages.
-\# *Notes:
-\# If recto/verso, each page is recto/verso, even if there's
-\# nothing on it.
-\#
-\# The argument to BLANKPAGE is non-optional.
-\#
-.MAC BLANKPAGE END
-. nr #HOW_MANY \\$1
-. nr #PAGES 0 1
-. while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\
-. if \\n[#HEADERS_ON]=1 \{\
-. nr #HEADERS_WERE_ON 1
-. HEADERS OFF
-. \}
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
-. PAGINATION OFF
-. \}
-. NEWPAGE
-. PRINT \&
-. if \\n[#FOOTERS_ON]=1 \{\
-. nr #FOOTERS_WERE_ON 1
-. FOOTERS OFF
-. \}
-. if \\n[#PAGE_NUM_V_POS]=2 \{\
-. if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
-. PAGINATION OFF
-. \}
-. if \\n[#HEADERS_WERE_ON] \{ .HEADERS \}
-. if \\n[#PAGE_NUM_V_POS]=1 \{\
-. if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
-. \}
-.\}
-. NEWPAGE
-. if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \}
-. if \\n[#PAGE_NUM_V_POS]=2 \{\
-. if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
-. \}
-. rr #HEADERS_WERE_ON
-. rr #FOOTERS_WERE_ON
-. rr #PAGINATE_WAS_ON
-.END
-\#
-\#
-\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
-\# ---------------------------------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Sets header/footer/footnotes/etc... traps.
-\#
-\# Calculates the number of lines that actually fit on a
-\# page based on #B_MARGIN and resets page bottom trap to coincide
-\# with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
-\# adjusts #DOC_LEAD so that the last line of text on a page falls
-\# exactly on #B_MARGIN.
-\#
-.MAC TRAPS END
-.\" Remove all header/footer traps
-. if !\\n[#NO_TRAP_RESET] \{\
-. ch DO_T_MARGIN
-. ch DO_B_MARGIN
-. ch HEADER
-. ch FOOTER
-. ch FN_OVERFLOW_TRAP
-.\" Plant header trap
-. wh 0 HEADER
-. \}
-.\" Adjust lead so last line of text falls on B_MARGIN,...
-. ie \\n[#ADJ_DOC_LEAD]=1 \{\
-. nr #LINES_PER_PAGE 0 1
-. nr #DOC_LEAD_ADJ 0 1
-. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-1v
-.\" Get the number of unadjusted lines that fit on the page; always a
-.\" bit short of the bottom margin
-. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
-.
-.\}
-. nr #LINES_PER_PAGE -1
-.\" Add machine units, 1 at a time, increasing the leading until the
-.\" new leading fills the page properly
-. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
-.
-.\}
-. DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
-.\" The "visual" bottom margin is what \n(nl would report on the
-.\" last line before the FOOTER trap is sprung
-. nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD])
-.\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN
-. nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
-.\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN
-. nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
-.\" Set the FN_OVERFLOW_TRAP position
-. nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
-. if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u
-. \}
-.\" ...or calculate new B_MARGIN based on # of lines (at #DOC_LEAD) that fit
-.\" on the page.
-. el \{\
-. nr #LINES_PER_PAGE 0 1
-. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v
-. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
-.
-.\}
-. nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD]-1v)
-. nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
-. nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
-. nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
-. \}
-.\" Set footer and footnote overflow traps
-. if !\\n[#NO_TRAP_RESET] \{\
-. nr #FN_COUNT 0 1
-. nr #SPACE_REMAINING 0
-. nr #FN_DEPTH 0
-. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-. wh 20i FOOTER
-. wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
-. ch FOOTER -\\n[#B_MARGIN]u
-. \}
-.END
-\#
-\#
-\# CHECK INDENT
-\# ------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Adds left, right, or both indent values to document elements
-\# like heads and subheads that are processed in environments.
-\#
-.MAC CHECK_INDENT END
-. if \\n[#INDENT_LEFT_ACTIVE] \{\
-. in \\n[#L_INDENT]u
-. if \\n[#QUOTE] \{\
-. in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
-. ll -\\n[#L_INDENT]u
-. ta \\n(.lu
-. \}
-. if \\n[#EPIGRAPH] \{\
-. in -\\n[#L_INDENT]u
-. ll -\\n[#L_INDENT]u
-. ta \\n(.lu
-. \}
-. \}
-. if \\n[#INDENT_RIGHT_ACTIVE] \{\
-. ll -\\n[#R_INDENT]u
-. ta \\n(.lu
-. \}
-. if \\n[#INDENT_BOTH_ACTIVE] \{\
-. in \\n[#BL_INDENT]u
-. ll -\\n[#BR_INDENT]u
-. ta \\n(.lu
-. if \\n[#QUOTE] \{\
-. in -\\n[#BL_INDENT]u
-. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
-. ll -\\n[#BR_INDENT]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll -(\\n[#BR_INDENT]u/2u)
-. ta \\n(.lu
-. \}
-. \}
-. if \\n[#EPIGRAPH] \{\
-. in -\\n[#BL_INDENT]u
-. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
-. ll -\\n[#BR_INDENT]u
-. ta \\n(.lu
-. \}
-. el \{\
-. ll -(\\n[#BR_INDENT]u/2u)
-. ta \\n(.lu
-. \}
-. \}
-. \}
-.END
-\#
-\#
-\# REMOVE INDENT
-\# -------------
-\# *Arguments:
-\# <none>
-\# *Function:
-\# Removes left, right, or both indent values from document elements
-\# like heads and subheads that are processed in environments.
-\#
-.MAC REMOVE_INDENT END
-. in 0
-. ll \\n[#L_LENGTH]u
-. ta \\n(.lu
-.END
-\#
-\#
-\# This .em (for all DOC_TYPEs except 4 [LETTER]) ensures that
-\# deferred footnotes that happen on the 2nd to last page get
-\# output.
-\#
-.MAC TERMINATE END
-. ie \\n[#FN_DEPTH] \{\
-. ie \\n[#FN_DEFER] \{\
-. br
-. nr #TERMINATE 1
-. FOOTNOTE
-. nf
-. FOOTNOTE OFF
-. \}
-. el \{\
-. br
-. ch FN_OVERFLOW_TRAP
-. DO_B_MARGIN
-. \}
-. \}
-. el \{\
-. br
-. ch FN_OVERFLOW_TRAP
-. DO_B_MARGIN
-. \}
-.END
-\#
-\# END MACRO FOR LETTERS
-\# ---------------------
-\# *Arguments:
-\# none
-\# *Function:
-\# The .em macro executed at the end of letters. Turns footers
-\# and pagination off, terminates and outputs diversion CLOSING
-\# (indented with the author's name underneath).
-\#
-.MAC ALL_DONE END
-. br
-. FOOTERS OFF
-. PAGINATION OFF
-. if \\n[#DOC_TYPE]=4 \{\
-. br
-. if !'\\n(.z'' \{ .di \}
-. IQ CLEAR
-. TQ
-. TAB_SET 1 \\n[#DOC_L_LENGTH]u/2u \\n[#DOC_L_LENGTH]u/2u LEFT
-. ALD \\n[#DOC_LEAD]u*2u
-. TAB 1
-. if \\n[#CLOSING] \{\
-. nf
-. CLOSING
-. \}
-. ALD \\n[#DOC_LEAD]u*3u
-. PRINT \\*[$AUTHOR_1]
-. \}
-. DO_FOOTER
-.END
-\#
-\# Set up a default papersize of US letter
-\#
-.PAPER LETTER
-\#
-\# ====================================================================
-\#
-\# +++DOCUMENT PROCESSING ALIASES+++
-\#
-\# Aliases to make life easier for users: synonyms, short forms
-\# and alternate spellings.
-\#
-.ALIAS BREAK_BLOCKQUOTE BREAK_QUOTE
-.ALIAS BREAK_CITATION BREAK_QUOTE
-.ALIAS BREAK_CITE BREAK_QUOTE
-.ALIAS BLOCKQUOTE_INDENT QUOTE_INDENT
-.ALIAS CITATION BLOCKQUOTE
-.ALIAS CITATION_FAMILY BLOCKQUOTE_FAMILY
-.ALIAS CITATION_FONT BLOCKQUOTE_FONT
-.ALIAS CITATION_SIZE BLOCKQUOTE_SIZE
-.ALIAS CITATION_COLOR BLOCKQUOTE_COLOR
-.ALIAS CITATION_QUAD BLOCKQUOTE_QUAD
-.ALIAS CITE BLOCKQUOTE
-.ALIAS CITE_FAMILY BLOCKQUOTE_FAMILY
-.ALIAS CITE_FONT BLOCKQUOTE_FONT
-.ALIAS CITE_SIZE BLOCKQUOTE_SIZE
-.ALIAS CITE_COLOR BLOCKQUOTE_COLOR
-.ALIAS CITE_QUAD BLOCKQUOTE_QUAD
-.ALIAS DOC_R_MARGIN DOC_RIGHT_MARGIN
-.ALIAS DOC_L_MARGIN DOC_LEFT_MARGIN
-.ALIAS DOC_L_LENGTH DOC_LINE_LENGTH
-.ALIAS DOC_RMARGIN DOC_RIGHT_MARGIN
-.ALIAS DOC_LMARGIN DOC_LEFT_MARGIN
-.ALIAS DOC_LLENGTH DOC_LINE_LENGTH
-.ALIAS DOC_FAM DOC_FAMILY
-.ALIAS DOC_LS DOC_LEAD
-.ALIAS DOC_PS DOC_PT_SIZE
-.ALIAS FILL QUAD
-.ALIAS PAGENUM PAGENUMBER
-.ALIAS PAGINATION PAGINATE
-.ALIAS PP_FT PP_FONT
-.ALIAS REF_INDENT INDENT_REFS
-.ALIAS TOC_PS TOC_PT_SIZE
-\#
-\# HEADER and FOOTER macros
-\# ------------------------
-\# Because the type-style of headers and footers are managed
-\# identically, and the type-style macros (_<type parameter>) all
-\# require the correct name of the calling macro, it's necessary
-\# to create HEADER_ and FOOTER_ macros here. They're basically
-\# "aliases" of HDRFTR_, but required because you can't alias an
-\# alias.
-\#
-.MAC FOOTER_CENTER_COLOR END
-. HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTER_COLOUR END
-. HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FAM END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FAMILY END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FONT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTER_PS END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTER_SIZE END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_CAPS END
-. HDRFTR_CENTER_CAPS \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_COLOR END
-. HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_COLOUR END
-. HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FAM END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FAMILY END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FONT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_PS END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_SIZE END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_COLOR END
-. HDRFTR_COLOR \\$1
-.END
-\#
-.MAC FOOTER_COLOUR END
-. HDRFTR_COLOR \\$1
-.END
-\#
-.MAC FOOTER_FAM END
-. HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_FAMILY END
-. HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_COLOR END
-. HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_LEFT_COLOUR END
-. HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FAM END
-. HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FAMILY END
-. HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FONT END
-. HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FT END
-. HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC FOOTER_LEFT_PS END
-. HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_LEFT_SIZE END
-. HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_COLOR END
-. HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_COLOUR END
-. HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FAM END
-. HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FAMILY END
-. HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FONT END
-. HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FT END
-. HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_PS END
-. HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_SIZE END
-. HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RULE_COLOR END
-. HDRFTR_RULE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_SIZE END
-. HDRFTR_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTER_COLOR END
-. HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTER_COLOUR END
-. HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTER_FAM END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTER_FAMILY END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTER_FONT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTER_FT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTER_PS END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTER_SIZE END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTRE_COLOR END
-. HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTRE_COLOUR END
-. HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FAM END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FAMILY END
-. HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FONT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FT END
-. HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTRE_PS END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTRE_SIZE END
-. HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_COLOR END
-. HDRFTR_COLOR \\$1
-.END
-\#
-.MAC HEADER_COLOUR END
-. HDRFTR_COLOR \\$1
-.END
-\#
-.MAC HEADER_FAM END
-. HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC HEADER_FAMILY END
-. HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_COLOR END
-. HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC HEADER_LEFT_COLOUR END
-. HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC HEADER_LEFT_FAM END
-. HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_FAMILY END
-. HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_FONT END
-. HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC HEADER_LEFT_FT END
-. HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC HEADER_LEFT_PS END
-. HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC HEADER_LEFT_SIZE END
-. HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RIGHT_COLOR END
-. HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC HEADER_RIGHT_COLOUR END
-. HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FAM END
-. HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FAMILY END
-. HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FONT END
-. HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FT END
-. HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC HEADER_RIGHT_PS END
-. HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RIGHT_SIZE END
-. HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RULE_COLOR END
-. HDRFTR_RULE_COLOR \\$1
-.END
-\#
-.MAC HEADER_SIZE END
-. HDRFTR_SIZE \\$1
-.END
-\#
-\# HEADER and FOOTER aliases for HDRFTR macros.
-\#
-.ALIAS BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS ENDNOTES_FOOTER_CENTER ENDNOTES_HDRFTR_CENTER
-.ALIAS ENDNOTES_FOOTER_CENTRE ENDNOTES_HDRFTR_CENTRE
-.ALIAS ENDNOTES_HEADER_CENTER ENDNOTES_HDRFTR_CENTER
-.ALIAS ENDNOTES_HEADER_CENTRE ENDNOTES_HDRFTR_CENTRE
-.ALIAS FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS
-.ALIAS FOOTER_CENTER HDRFTR_CENTER
-.ALIAS FOOTER_CENTER_PAD HDRFTR_CENTER_PAD
-.ALIAS FOOTER_CENTRE HDRFTR_CENTER
-.ALIAS FOOTER_CENTRE_PAD HDRFTR_CENTER_PAD
-.ALIAS FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS
-.ALIAS FOOTER_LEFT HDRFTR_LEFT
-.ALIAS FOOTER_PLAIN HDRFTR_PLAIN
-.ALIAS FOOTER_RECTO HDRFTR_RECTO
-.ALIAS FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
-.ALIAS FOOTER_RIGHT HDRFTR_RIGHT
-.ALIAS FOOTER_RULE_GAP HDRFTR_RULE_GAP
-.ALIAS FOOTER_RULE HDRFTR_RULE
-.ALIAS FOOTER_VERSO HDRFTR_VERSO
-.ALIAS HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS
-.ALIAS HEADER_CENTER HDRFTR_CENTER
-.ALIAS HEADER_CENTER_PAD HDRFTR_CENTER_PAD
-.ALIAS HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS
-.ALIAS HEADER_CENTRE HDRFTR_CENTER
-.ALIAS HEADER_CENTRE_PAD HDRFTR_CENTER_PAD
-.ALIAS HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS
-.ALIAS HEADER_LEFT HDRFTR_LEFT
-.ALIAS HEADER_PLAIN HDRFTR_PLAIN
-.ALIAS HEADER_RECTO HDRFTR_RECTO
-.ALIAS HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
-.ALIAS HEADER_RIGHT HDRFTR_RIGHT
-.ALIAS HEADER_RULE_GAP HDRFTR_RULE_GAP
-.ALIAS HEADER_RULE HDRFTR_RULE
-.ALIAS HEADER_VERSO HDRFTR_VERSO
-.ALIAS SWITCH_FOOTERS SWITCH_HDRFTR
-.ALIAS SWITCH_HEADERS SWITCH_HDRFTR
-\#
-\# Type-style aliases
-\#
-.ALIAS AUTHOR_FAMILY _FAMILY
-.ALIAS BIBLIOGRAPHY_FAMILY _FAMILY
-.ALIAS BIBLIOGRAPHY_STRING_FAMILY _FAMILY
-.ALIAS BLOCKQUOTE_FAMILY _FAMILY
-.ALIAS CHAPTER_TITLE_FAMILY _FAMILY
-.ALIAS COVER_AUTHOR_FAMILY _FAMILY
-.ALIAS COVER_CHAPTER_TITLE_FAMILY _FAMILY
-.ALIAS COVER_COPYRIGHT_FAMILY _FAMILY
-.ALIAS COVER_DOCTYPE_FAMILY _FAMILY
-.ALIAS COVER_FAMILY _FAMILY
-.ALIAS COVER_SUBTITLE_FAMILY _FAMILY
-.ALIAS COVER_TITLE_FAMILY _FAMILY
-.ALIAS DOC_COVER_AUTHOR_FAMILY _FAMILY
-.ALIAS DOC_COVER_CHAPTER_TITLE_FAMILY _FAMILY
-.ALIAS DOC_COVER_COPYRIGHT_FAMILY _FAMILY
-.ALIAS DOC_COVER_DOCTYPE_FAMILY _FAMILY
-.ALIAS DOC_COVER_FAMILY _FAMILY
-.ALIAS DOC_COVER_SUBTITLE_FAMILY _FAMILY
-.ALIAS DOC_COVER_TITLE_FAMILY _FAMILY
-.ALIAS DOCHEADER_FAMILY _FAMILY
-.ALIAS DOCTYPE_FAMILY _FAMILY
-.ALIAS ENDNOTE_FAMILY _FAMILY
-.ALIAS ENDNOTE_NUMBER_FAMILY _FAMILY
-.ALIAS ENDNOTE_LINENUMBER_FAMILY _FAMILY
-.ALIAS ENDNOTE_STRING_FAMILY _FAMILY
-.ALIAS ENDNOTE_TITLE_FAMILY _FAMILY
-.ALIAS EPIGRAPH_FAMILY _FAMILY
-.ALIAS FOOTNOTE_FAMILY _FAMILY
-.ALIAS HDRFTR_CENTER_FAMILY _FAMILY
-.ALIAS HDRFTR_FAMILY _FAMILY
-.ALIAS HDRFTR_LEFT_FAMILY _FAMILY
-.ALIAS HDRFTR_RIGHT_FAMILY _FAMILY
-.ALIAS HEAD_FAMILY _FAMILY
-.ALIAS PAGENUM_FAMILY _FAMILY
-.ALIAS PARAHEAD_FAMILY _FAMILY
-.ALIAS QUOTE_FAMILY _FAMILY
-.ALIAS SUBHEAD_FAMILY _FAMILY
-.ALIAS SUBTITLE_FAMILY _FAMILY
-.ALIAS TITLE_FAMILY _FAMILY
-.ALIAS TOC_FAM _FAMILY
-.ALIAS TOC_FAMILY _FAMILY
-.ALIAS TOC_HEADER_FAMILY _FAMILY
-.ALIAS TOC_HEAD_FAMILY _FAMILY
-.ALIAS TOC_PARAHEAD_FAMILY _FAMILY
-.ALIAS TOC_PN_FAMILY _FAMILY
-.ALIAS TOC_SUBHEAD_FAMILY _FAMILY
-.ALIAS TOC_TITLE_FAMILY _FAMILY
-\#
-.ALIAS AUTHOR_FONT _FONT
-.ALIAS BIBLIOGRAPHY_STRING_FONT _FONT
-.ALIAS BIBLIOGRAPHY_FONT _FONT
-.ALIAS BLOCKQUOTE_FONT _FONT
-.ALIAS CHAPTER_TITLE_FONT _FONT
-.ALIAS COVER_AUTHOR_FONT _FONT
-.ALIAS COVER_CHAPTER_TITLE_FONT _FONT
-.ALIAS COVER_COPYRIGHT_FONT _FONT
-.ALIAS COVER_DOCTYPE_FONT _FONT
-.ALIAS COVER_SUBTITLE_FONT _FONT
-.ALIAS COVER_TITLE_FONT _FONT
-.ALIAS DOC_COVER_AUTHOR_FONT _FONT
-.ALIAS DOC_COVER_CHAPTER_TITLE_FONT _FONT
-.ALIAS DOC_COVER_COPYRIGHT_FONT _FONT
-.ALIAS DOC_COVER_DOCTYPE_FONT _FONT
-.ALIAS DOC_COVER_SUBTITLE_FONT _FONT
-.ALIAS DOC_COVER_TITLE_FONT _FONT
-.ALIAS DOCTYPE_FONT _FONT
-.ALIAS ENDNOTE_FONT _FONT
-.ALIAS ENDNOTE_NUMBER_FONT _FONT
-.ALIAS ENDNOTE_LINENUMBER_FONT _FONT
-.ALIAS ENDNOTE_STRING_FONT _FONT
-.ALIAS ENDNOTE_TITLE_FONT _FONT
-.ALIAS EPIGRAPH_FONT _FONT
-.ALIAS FOOTNOTE_FONT _FONT
-.ALIAS HDRFTR_CENTER_FONT _FONT
-.ALIAS HDRFTR_LEFT_FONT _FONT
-.ALIAS HDRFTR_RIGHT_FONT _FONT
-.ALIAS HEAD_FONT _FONT
-.ALIAS PAGENUM_FONT _FONT
-.ALIAS PARAHEAD_FONT _FONT
-.ALIAS QUOTE_FONT _FONT
-.ALIAS SUBHEAD_FONT _FONT
-.ALIAS SUBTITLE_FONT _FONT
-.ALIAS TITLE_FONT _FONT
-.ALIAS TOC_HEADER_FONT _FONT
-.ALIAS TOC_HEAD_FONT _FONT
-.ALIAS TOC_PARAHEAD_FONT _FONT
-.ALIAS TOC_PN_FONT _FONT
-.ALIAS TOC_SUBHEAD_FONT _FONT
-.ALIAS TOC_TITLE_FONT _FONT
-\#
-.ALIAS AUTHOR_SIZE _SIZE
-.ALIAS BIBLIOGRAPHY_STRING_SIZE _SIZE
-.ALIAS BLOCKQUOTE_SIZE _SIZE
-.ALIAS CHAPTER_TITLE_SIZE _SIZE
-.ALIAS COVER_AUTHOR_SIZE _SIZE
-.ALIAS COVER_CHAPTER_TITLE_SIZE _SIZE
-.ALIAS COVER_COPYRIGHT_SIZE _SIZE
-.ALIAS COVER_DOCTYPE_SIZE _SIZE
-.ALIAS COVER_SUBTITLE_SIZE _SIZE
-.ALIAS COVER_TITLE_SIZE _SIZE
-.ALIAS DOC_COVER_AUTHOR_SIZE _SIZE
-.ALIAS DOC_COVER_CHAPTER_TITLE_SIZE _SIZE
-.ALIAS DOC_COVER_COPYRIGHT_SIZE _SIZE
-.ALIAS DOC_COVER_DOCTYPE_SIZE _SIZE
-.ALIAS DOC_COVER_SUBTITLE_SIZE _SIZE
-.ALIAS DOC_COVER_TITLE_SIZE _SIZE
-.ALIAS DOCTYPE_SIZE _SIZE
-.ALIAS ENDNOTE_NUMBER_SIZE _SIZE
-.ALIAS ENDNOTE_LINENUMBER_SIZE _SIZE
-.ALIAS ENDNOTE_STRING_SIZE _SIZE
-.ALIAS ENDNOTE_TITLE_SIZE _SIZE
-.ALIAS EPIGRAPH_SIZE _SIZE
-.ALIAS FOOTNOTE_SIZE _SIZE
-.ALIAS HDRFTR_CENTER_SIZE _SIZE
-.ALIAS HDRFTR_LEFT_SIZE _SIZE
-.ALIAS HDRFTR_RIGHT_SIZE _SIZE
-.ALIAS HDRFTR_SIZE _SIZE
-.ALIAS HEAD_SIZE _SIZE
-.ALIAS PAGENUM_SIZE _SIZE
-.ALIAS PARAHEAD_SIZE _SIZE
-.ALIAS QUOTE_SIZE _SIZE
-.ALIAS SUBHEAD_SIZE _SIZE
-.ALIAS SUBTITLE_SIZE _SIZE
-.ALIAS TITLE_SIZE _SIZE
-.ALIAS TOC_HEADER_SIZE _SIZE
-.ALIAS TOC_HEAD_SIZE _SIZE
-.ALIAS TOC_PARAHEAD_SIZE _SIZE
-.ALIAS TOC_PN_SIZE _SIZE
-.ALIAS TOC_SUBHEAD_SIZE _SIZE
-.ALIAS TOC_TITLE_SIZE _SIZE
-\#
-.ALIAS ATTRIBUTE_COLOR _COLOR
-.ALIAS AUTHOR_COLOR _COLOR
-.ALIAS BLOCKQUOTE_COLOR _COLOR
-.ALIAS CHAPTER_TITLE_COLOR _COLOR
-.ALIAS COVER_ATTRIBUTE_COLOR _COLOR
-.ALIAS COVER_AUTHOR_COLOR _COLOR
-.ALIAS COVER_CHAPTER_TITLE_COLOR _COLOR
-.ALIAS COVER_COLOR _COLOR
-.ALIAS COVER_COPYRIGHT_COLOR _COLOR
-.ALIAS COVER_DOCTYPE_COLOR _COLOR
-.ALIAS COVER_MISC_COLOR _COLOR
-.ALIAS COVER_SUBTITLE_COLOR _COLOR
-.ALIAS COVER_TITLE_COLOR _COLOR
-.ALIAS DOC_COVER_ATTRIBUTE_COLOR _COLOR
-.ALIAS DOC_COVER_AUTHOR_COLOR _COLOR
-.ALIAS DOC_COVER_CHAPTER_TITLE_COLOR _COLOR
-.ALIAS DOC_COVER_COLOR _COLOR
-.ALIAS DOC_COVER_COPYRIGHT_COLOR _COLOR
-.ALIAS DOC_COVER_DOCTYPE_COLOR _COLOR
-.ALIAS DOC_COVER_MISC_COLOR _COLOR
-.ALIAS DOC_COVER_SUBTITLE_COLOR _COLOR
-.ALIAS DOC_COVER_TITLE_COLOR _COLOR
-.ALIAS DOCHEADER_COLOR _COLOR
-.ALIAS DOCTYPE_COLOR _COLOR
-.ALIAS EPIGRAPH_COLOR _COLOR
-.ALIAS FINIS_COLOR _COLOR
-.ALIAS FOOTNOTE_COLOR _COLOR
-.ALIAS HDRFTR_CENTER_COLOR _COLOR
-.ALIAS HDRFTR_COLOR _COLOR
-.ALIAS HDRFTR_LEFT_COLOR _COLOR
-.ALIAS HDRFTR_RIGHT_COLOR _COLOR
-.ALIAS HDRFTR_RULE_COLOR _COLOR
-.ALIAS HEAD_COLOR _COLOR
-.ALIAS LINEBREAK_COLOR _COLOR
-.ALIAS PAGENUM_COLOR _COLOR
-.ALIAS PARAHEAD_COLOR _COLOR
-.ALIAS QUOTE_COLOR _COLOR
-.ALIAS SUBHEAD_COLOR _COLOR
-.ALIAS SUBTITLE_COLOR _COLOR
-.ALIAS TITLE_COLOR _COLOR
-\#
-.ALIAS BIBLIOGRAPHY_QUAD _QUAD
-.ALIAS BIBLIOGRAPHY_STRING_QUAD _QUAD
-.ALIAS BLOCKQUOTE_QUAD _QUAD
-.ALIAS COVER_COPYRIGHT_QUAD _QUAD
-.ALIAS COVER_MISC_QUAD _QUAD
-.ALIAS DOC_COVER_COPYRIGHT_QUAD _QUAD
-.ALIAS DOC_COVER_MISC_QUAD _QUAD
-.ALIAS DOC_QUAD _QUAD
-.ALIAS ENDNOTE_QUAD _QUAD
-.ALIAS ENDNOTE_STRING_QUAD _QUAD
-.ALIAS ENDNOTE_TITLE_QUAD _QUAD
-.ALIAS EPIGRAPH_QUAD _QUAD
-.ALIAS FOOTNOTE_QUAD _QUAD
-.ALIAS HEAD_QUAD _QUAD
-.ALIAS SUBHEAD_QUAD _QUAD
-.ALIAS TOC_HEADER_QUAD _QUAD
-\#
-\# Support aliases
-\#
-.ALIAS COL_BREAK COL_NEXT
-.ALIAS DOC_COVER_ADVANCE COVER_ADVANCE
-.ALIAS DOC_COVER COVER
-.ALIAS DOC_COVERS COVERS
-.ALIAS DOC_COVER_LEAD COVER_LEAD
-.ALIAS DOC_COVERTITLE COVERTITLE
-.ALIAS DO_DOC_COVER DO_COVER
-.ALIAS PRINT_FOOTNOTE_RULE FOOTNOTE_RULE
-\#
-\# Miscellaneous aliases
-.ALIAS SECTION LINEBREAK
-.ALIAS SECTION_CHAR LINEBREAK_CHAR
-\#
-\# Miscellaneous macros to take care of backward compatibility
-\# -----------------------------------------------------------
-\#
-\# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF
-\# unnecessary for users. However, I used both macros extensively
-\# throughout this file (in conjunction with TRAP...TRAP OFF).
-\# EOL is the "old" EL, for the personal use of om.tmac
-\#
-.MAC EOL END
-. br
-. sp -1v
-.END
-\#
-\# REFER SUPPORT
-\# -------------
-\#
-\# Footnote references
-\# -------------------
-\# *Function:
-\# Instruct REF to put references in footnotes.
-\#
-.MAC FOOTNOTE_REFS END
-. if r#EN_REF \{ .rr #EN_REF \}
-. nr #FN_REF 1
-.END
-\#
-\# Endnote references
-\# ------------------
-\# *Function:
-\# Instruct REF to collect references for endnotes output.
-\#
-.MAC ENDNOTE_REFS END
-. if r#FN_REF \{ .rr #FN_REF \}
-. nr #EN_REF 1
-.END
-\#
-\# Prepare mom for a reference
-\# ---------------------------
-\# *Argument:
-\# <none> | INDENT L|LEFT|R|RIGHT|B|BOTH <indent value>
-\# *Function:
-\# Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or
-\# #REF_EN is set to 1.
-\# *Notes:
-\# For convenience, REF is a toggle.
-\#
-\# REF optionally takes the same arguments as FOOTNOTE, allowing
-\# users to indent references that go in footnotes when footnote
-\# indenting is required. FOOTNOTE_REFS must be on for this.
-\#
-.MAC REF END
-. ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\
-. if !\\n[#REF_WARNING]=1 \{\
-. tm1 "[mom]: Before REF at line \\n(.c, neither FOOTNOTE_REFS nor ENDNOTE_REFS
-. tm1 " has been selected. If "sort" and "accumulate" are in your refer
-. tm1 " commands, references will be collected for later output with $LIST$.
-. tm1 " Otherwise, they will disappear.
-. nr #REF_WARNING 1
-. \}
-. \}
-. el \{\
-. ie \\n[#REF]=1 \{\
-. if \\n[#FN_REF]=1 \{ .FOOTNOTE OFF \}
-. if \\n[#EN_REF]=1 \{ .ENDNOTE OFF \}
-. rr #REF
-. \}
-. el \{\
-. rr #REF_WARNING
-. nr #REF 1
-. if \\n[#FN_REF]=1 \{ .FOOTNOTE \\$1 \\$2 \\$3 \}
-. if \\n[#EN_REF]=1 \{ .ENDNOTE \}
-. \}
-. \}
-.END
-\#
-\# Embedded references in text (with brackets)
-\# -------------------------------------------
-\#
-.MAC REF_BRACKETS_START END
-. ds $CURRENT_EV \\n[.ev]
-. ev REFERENCE
-. evc \\*[$CURRENT_EV]
-. di REFERENCE
-.END
-\#
-.MAC REF_BRACKETS_END END
-. br
-. di
-. ev
-. chop REFERENCE
-. unformat REFERENCE
-. if '\\$0'REF)' \{ .nop (\\*[REFERENCE]) \}
-. if '\\$0'REF]' \{ .nop [\\*[REFERENCE]] \}
-. if '\\$0'REF}' \{ .nop {\\*[REFERENCE]} \}
-.END
-\#
-\# These three pairs of aliases allow users to embed references in
-\# text and have them surrounded by (), [] or {}.
-\#
-.ALIAS REF( REF_BRACKETS_START
-.ALIAS REF) REF_BRACKETS_END
-\#
-.ALIAS REF[ REF_BRACKETS_START
-.ALIAS REF{ REF_BRACKETS_START
-\#
-.ALIAS REF} REF_BRACKETS_END
-.ALIAS REF] REF_BRACKETS_END
-\#
-\# Second-line indent for refs
-\# ---------------------------
-\# *Argument:
-\# FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries>
-\# *Function:
-\# Sets strings $REF_FN_INDENT, $REF_EN_INDENT or $REF_BIB_INDENT.
-\# *Notes:
-\# Indent value requires a unit of measure.
-\#
-.MAC INDENT_REFS END
-. if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT \\$2
-. if '\\$1'ENDNOTE' .ds $REF_EN_INDENT \\$2
-. if '\\$1'BIBLIO' .ds $REF_BIB_INDENT \\$2
-.END
-\#
-\# Hyphenation of references
-\# -------------------------
-\# *Argument:
-\# <none> | <anything>
-\# *Function:
-\# Sets register #REF_HYPHENATE
-\#
-.MAC HYPHENATE_REFS END
-. ie '\\$1'' \{ .nr #REF_HYPHENATE 1 \}
-. el \{\
-. if r#REF_HY \{ .rr #REF_HY \}
-. \}
-.END
-\#
-.ig
-The remainder of the definitions in this section are modified
-versions of the definitions found in the refer module of s.tmac.
-..
-\#
-\# This one is directly from s.tmac.
-.de @error
-.tm \\n(.F:\\n(.c: macro error: \\$*
-..
-\#
-.ig
-The following strings define the order of entries for different
-types of references. Each letter in the string refers to a database
-field (A for author, T1/T2 for article and book titles, etc).
-Mom is set up for MLA-style bibliographies. Other styles can be
-implemented here by re-ordering the fields.
-..
-\# Book - type 2
-.ds ref*spec!2 Q A T1 d t l r E S e V a C I D P O
-\# Article within book - type 3
-.ds ref*spec!3 Q A T2 B d t l r E S e V a C I D P O
-\# Journal article - type 1
-.ds ref*spec!1 Q A T2 J S N D P O
-\# Tech report - type 4
-.ds ref*spec!4 Q A T1 R G C I D P O
-\# Internet site - type 0
-.ds ref*spec!0 Q A T2 s E c d o a u O
-\#
-\# Refer's "1st" macro. Since it is possible to define database
-\# fields using any single letter, we remove all possible string
-\# definitions of the form [X and [x
-\#
-.de ]-
-.rm [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 [i [j [k [l [m \
- [n [o [p [q [r [s [t [u [v [w [x [y [z
-.rm ref*string
-.rr ref*type
-..
-\#
-\# Refer's "2nd" macro; builds up a reference with ref*build, and
-\# prints it with ref*print.
-\#
-.de ][
-.nr ref*type \\$1
-.if \\n[ref*type]=3 \{\
-. if !'\\*([R'' \{\
-. nr ref*type 4
-. ds ref*spec!4 Q A T2 B R C I D P O
-. \}
-. if !'\\*([G'' \{\
-. nr ref*type 4
-. ds ref*spec!4 Q A T2 B G C I D P O
-. \}
-.\}
-.if r [T \{\
-. als [T1 [T
-. als [T2 [T
-.\}
-.ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
-.el \{\
-. @error unknown reference type `\\n[ref*type]'
-. ref*build \\*[ref*spec!0]
-.\}
-.if !\\n[.hy]=0 \{\
-.nr #RESTORE_HY \\n[.hy]
-.if !r#REF_HY .nh
-.\}
-.ref*print
-.if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY]
-.rr #RESTORE_HY
-.rm ref*string
-.rm [F [T1 [T2
-..
-\#
-\# Refer's "3rd" macros, which set up and terminate the output
-\# of collected references
-\#
-.de ]<
-.als ref*print ref*end-print
-.nr #REF 1
-.if \\n[#BIB_LIST]=1 \{\
-. nr #IN_BIB_LIST 1
-. LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX]
-.\}
-..
-\#
-.de ]>
-.LIST OFF
-.rr #REF
-.rr #IN_BIB_LIST
-.als ref*print ref*normal-print
-..
-\#
-\# Output
-\# ------
-\#
-\# Output normal, non-collected refs
-\#
-.de ref*normal-print
-.nr #CURRENT_HY \\n[.hy]
-\\*[ref*string]
-..
-\#
-\# Output collected refs
-\#
-.de ref*end-print
-.\" 10 is abritrary
-.nn 10
-.ie \\n[#BIB_LIST]=0 \{\
-.in +\\*[$REF_BIB_INDENT]
-.ti -\\*[$REF_BIB_INDENT]
-.\}
-.el .ITEM
-\\*[ref*string]
-.sp \\n[#BIB_SPACE]u
-.ie \\n[#BIB_LIST]=0 .in
-.el .IL -\\*[$REF_BIB_INDENT]u
-.nn 0
-..
-\#
-.als ref*print ref*normal-print
-\#
-\# Build up the ref*string
-\#
-.ig
-Correct MLA "typewritten" style (printstyle TYPEWRITE) demands
-two spaces after each period. The spaces are hardwired into the
-string definitions (ref*add-<x>), so we have to make sure that there
-aren't two spaces when the printstyle is TYPESET. Since I find that
-references look a bit crowded with 0 sentence space, I've bumped it
-up to +4. User's sentence spacing is reset in FOOTNOTES and ENDNOTES.
-..
-\#
-.de ref*build
-.if \\n[#PRINT_STYLE]=2 \{\
-. ds $RESTORE_SS_VAR \\*[$SS_VAR]
-. SS +4
-.\}
-.rm ref*string ref*post-punct
-.nr ref*suppress-period 1
-.while \\n[.$] \{\
-. if d [\\$1 \{\
-. ie d ref*add-\\$1 .ref*add-\\$1
-. el .ref*add-dflt \\$1
-. \}
-. shift
-.\}
-.\" now add a final period
-.ie d ref*string \{\
-. if !\\n[ref*suppress-period] .as ref*string .
-. if d ref*post-punct \{\
-. as ref*string "\\*[ref*post-punct]
-. rm ref*post-punct
-. \}
-.\}
-.el .ds ref*string
-..
-\#
-\# The following macros determine how entries are formatted WRT
-\# punctuation, type style, additional strings, etc.
-\#
-.ig
-o First argument is the database field letter.
-o Second argument is the punctuation character to use to separate this
- field from the previous field.
-o Third argument is a string with which to prefix this field.
-o Fourth argument is a string with which to postfix this field.
-o Fifth argument is a string to add after the punctuation character
- supplied by the next field.
-..
-\#
-\# %A Author(s)
-.de ref*add-A
-.ref*field A ,
-.if r [A .nr ref*suppress-period \\n([A
-..
-\# %T Title (generic)
-.de ref*add-T1
-.ref*field T . " \E*[IT]" "" \E*[PREV]
-.if \\n([T .nr ref*suppress-period \\n([T
-..
-\# %T Title of a chapter or article
-.de ref*add-T2
-.ref*field T . " \(lq" "" "\(rq"
-.if \\n([T .nr ref*suppress-period \\n([T
-..
-\# %B Book title (when citing an article from a book)
-.de ref*add-B
-.ie \\n([T .ref*field B "" ".\E*[IT]" "" \E*[PREV]
-.el .ref*field B . " \E*[IT]" "" \E*[PREV]
-\# refer doesn't set reg [T to 1 for these book titles, so we do it here
-.ds eval*[B \\*([B
-.substring eval*[B -1
-.rr [T
-.if '\\*[eval*[B]'!' .nr [T 1
-.if '\\*[eval*[B]'?' .nr [T 1
-.rm eval*[B
-..
-\# %R Report number for technical reports
-.de ref*add-R
-.ref*field R . " "
-..
-\# %J Journal name
-.de ref*add-J
-.ie \\n([T .ref*field J "" " \E*[IT]" "" \E*[PREV]
-.el .ref*field J . " \E*[IT]" "" \E*[PREV]
-..
-\# %E Editor(s)
-.de ref*add-E
-.ie !\\n[ref*type]=0 \{\
-. ie \\n([E>0 \{\
-. ie \\n([T .ref*field E "" " Eds. "
-. el .ref*field E . " Eds. "
-. \}
-. el \{\
-. ie \\n([T .ref*field E "" " Ed. "
-. el .ref*field E . " Ed. "
-. \}
-.\}
-.el \{\
-. ie \\n([T .ref*field E "" " "
-. el .ref*field E . " "
-.\}
-.rr [T
-..
-\# %e Edition
-.de ref*add-e
-.ie \\n([T .ref*field e "" " " " edition"
-.el .ref*field e . " " " edition"
-.rr [T
-..
-\# %V Volume (of a journal, or series of books)
-.de ref*add-V
-.if \\n[ref*type]=1 \{\
-. ref*field V
-.\}
-.if \\n[ref*type]=2 \{\
-. ie \\n([T .ref*field V "" " "
-. el .ref*field V . " "
-.\}
-.if \\n[ref*type]=3 \{\
-. ie \\n([T .ref*field V "" " "
-. el .ref*field V . " "
-.\}
-.rr [T
-..
-\# %N Journal number
-.de ref*add-N
-.ref*field N
-..
-\# %S Series (books or journals)
-.de ref*add-S
-.if \\n[ref*type]=1 \{\
-. ref*field S
-.\}
-.if \\n[ref*type]=2 \{\
-. ie \\n([T .ref*field S "" " "
-. el .ref*field S . " "
-.\}
-.if \\n[ref*type]=3 \{\
-. ie \\n([T .ref*field S "" " "
-. el .ref*field S . " "
-.\}
-.rr [T
-\# refer doesn't set reg [T to 1 for series titles, so we do it here
-.ds eval*[S \\*([S
-.substring eval*[S -1
-.if '\\*[eval*[S]'!' .nr [T 1
-.if '\\*[eval*[S]'?' .nr [T 1
-.rm eval*[S
-..
-\# %C City
-.de ref*add-C
-.ie \\n([T .ref*field C "" " "
-.el .ref*field C . " "
-.rr [T
-..
-\# %I Publisher (I stands for Issuer)
-.de ref*add-I
-.ie !'\\*([C'' .ref*field I :
-.el \{\
-. ie \\n([T .ref*field I "" " "
-. el .ref*field I . " "
-.\}
-.rr [T
-..
-\# %D Date of publication
-.de ref*add-D
-.if \\n[ref*type]=1 \{\
-. ie !'\\*([V''.ref*field D "" "(" ")"
-. el .ref*field D
-.\}
-.if \\n[ref*type]=2 .ref*field D ,
-.if \\n[ref*type]=3 \{\
-. ie '\\*([C'' \{\
-. ie '\\*([I'' .ref*field D . " "
-. el .ref*field D ,
-. \}
-. el .ref*field D ,
-.\}
-.if \\n[ref*type]=4 .ref*field D ,
-..
-\# %P Page number(s)
-.de ref*add-P
-.ie \\n[ref*type]=1 .ref*field P :
-.el .ref*field P . " "
-..
-\# %G Gov't. ordering number
-.de ref*add-G
-.ref*field G . " "
-..
-\# %O Other (usually goes at end of ref)
-.de ref*add-O
-.ref*field O . " "
-.ie r [O .nr ref*suppress-period \\n([O
-.el .nr ref*suppress-period 1
-..
-\#
-.de ref*add-dflt
-.ref*field \\$1 ,
-..
-\#
-\# Book reprints
-\# -------------
-\# %d date of publication (the orignal date of publication)
-.de ref*add-d
-.ie \\n([T .ref*field d "" " "
-.el .ref*field d . " "
-.rr [T
-..
-\# %a additions (such as a new intro to reprints)
-.de ref*add-a
-.ie \\n([T .ref*field a "" " "
-.el .ref*field a . " "
-.rr [T
-..
-\# %t title, if different from original title (the T field, which s/b
-\# the original title)
-.de ref*add-t
-.ie \\n([T .ref*field t "" " Rpt. as \E*[IT]" "" \E*[PREV]
-.el .ref*field t . " Rpt. as \E*[IT]" "" \E*[PREV]
-.rr [T
-..
-\#
-\# Translated works
-\# ----------------
-\# %l Trans(l)ator
-.de ref*add-l
-.ie \\n([T .ref*field l "" " Trans. "
-.el .ref*field l . " Trans. "
-.rr [T
-..
-\# %r Translato(r) and edito(r)
-.de ref*add-r
-.ie \\n([T .ref*field r "" " Trans. and Ed. "
-.el .ref*field r . " Trans. and Ed. "
-.rr [T
-..
-\#
-\# Internet
-\# --------
-\# %s Site name
-.de ref*add-s
-.ie \\n([s .ref*field s "" ".\E*[IT]" "" \E*[PREV]
-.el .ref*field s . " \E*[IT]" "" \E*[PREV]
-.\" refer doesn't set reg [T to 1 for these book titles, so we do it here
-.ds eval*[s \\*([s
-.substring eval*[s -1
-.rr [T
-.if '\\*[eval*[s]'!' .nr [T 1
-.if '\\*[eval*[s]'?' .nr [T 1
-.rm eval*[s
-..
-\# %c content of site, if unclear (i.e. advertisement, cartoon,
-\# interview, etc.)
-.de ref*add-c
-.ie \\n([T .ref*field c "" " "
-.el .ref*field c . " "
-.rr [T
-..
-\# %o organization, group or sponsor of site
-.de ref*add-o
-.ie \\n([T .ref*field o "" " "
-.el .ref*field o . " "
-.rr [T
-..
-\# %a access date, i.e. the date you read it
-.de ref*add-a
-.ie \\n([T .ref*field a "" " "
-.el .ref*field a . " "
-.rr [T
-..
-\# %u URL
-.de ref*add-u
-.ref*field u "" " <" ">"
-.rr [T
-..
-\#
-\# Build up reference string from ref*add-<x> macros.
-\#
-.de ref*field
-.if d ref*string \{\
-. ie d ref*post-punct \{\
-. as ref*string "\\$2\\*[ref*post-punct] \"
-. rm ref*post-punct
-. \}
-. el .as ref*string "\\$2 \"
-.\}
-.as ref*string "\\$3\\*([\\$1\\$4
-.if \\n[.$]>4 .ds ref*post-punct "\\$5
-.nr ref*suppress-period 0
-..
-\#
-\# MARGIN NOTES
-\# ------------
-\# This is a wrapper for MNinit.
-\#
-\# I could use a 'while' loop to assign args to strings, but too many
-\# 'while' loops are slowing things down.
-\#
-.MAC MN_INIT END
-. if !'\\$1'rerun' \{\
-. ds $MN-arg1 \\$1
-. ds $MN-arg2 \\$2
-. ds $MN-arg3 \\$3
-. ds $MN-arg4 \\$4
-. ds $MN-arg5 \\$5
-. ds $MN-arg6 \\$6
-. ds $MN-arg7 \\$7
-. ds $MN-arg8 \\$8
-. ds $MN-arg9 \\$9
-. \}
-. ie \\n[#START_FOR_MNinit]=0 \{\
-. nr #MNinit_DEFERRED 1
-. nr #START_FOR_MNinit 1
-. return
-. \}
-. el \{\
-. MNinit \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
-. \}
-.END
-\#
-.MAC MN_OVERFLOW_TRAP END
-. if \\n[#OVERFLOW_LEFT]=1 \{\
-. nr #no-repeat-MN-left 1
-. di MN_OVERFLOW_LEFT
-. \}
-. if \\n[#OVERFLOW_RIGHT]=1 \{\
-. nr #no-repeat-MN-right 1
-. di MN_OVERFLOW_RIGHT
-. \}
-. rr #OVERFLOW_LEFT
-. rr #OVERFLOW_RIGHT
-.END
-\#
-.ig
-The remainder of the margin notes macros and routines are adapted
-from Werner Lemberg's MN.tmac.
-..
-\#
-\# MNinit
-\# ------
-\# Usage:
-\# MNinit [ragged|symmetric] \
-\# left-width right-width separation \
-\# font fontsize vertical-spacing \
-\# color hyphenation-flags
-\#
-\# Initialize margin notes. Empty arguments (denoted with "") set
-\# default values. If the first argument is the string `ragged',
-\# left and right margin notes are printed ragged-right. If it is
-\# `symmetric', left margin notes are printed ragged-left and right
-\# margin notes ragged-right. If omitted, margin notes are left
-\# and right adjusted.
-\#
-\#
-.de MNinit
-. nr #MNinit 1
-. ds MN-left-ad b\"
-. ds MN-right-ad b\"
-. if '\\$1'RAGGED' \{\
-. ds MN-left-ad l\"
-. ds MN-right-ad l\"
-. shift
-. \}
-. if '\\$1'SYMMETRIC' \{\
-. ds MN-left-ad r\"
-. ds MN-right-ad l\"
-. shift
-. \}
-. ie \B'\\$3' \
-. nr MN-sep (n;\\$3)
-. el \
-. nr MN-sep 1m
-. if ((\\n[.o] - \\n[MN-sep]) < 1n) \
-. ab MN: Left margin too small (<1n) for requested margin notes separation.
-. ie \B'\\$1' \{\
-. nr MN-left-width (n;\\$1)
-. nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width])
-. \}
-. el \{\
-. nr MN-left-width (\\n[.o] - \\n[MN-sep])
-. nr MN-left-start 0
-. \}
-. if (\\n[MN-left-start] < 0) \
-. ab MN: Left margin too small for requested margin notes settings.
-. if (\\n[MN-left-width] < 1n) \
-. ab MN: Left margin notes width too small (<1n).
-.
-. ie \B'\\$2' \{\
-. nr MN-right-width (n;\\$2)
-. nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
-. if \\n[#COLUMNS]=1 \{\
-. if !\\n[#NUM_COLS]=1 \{\
-. nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-. \}
-. \}
-. \}
-. el \{\
-. nr MN-right-width \\n[MN-left-width]
-. nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
-. if \\n[#COLUMNS]=1 \{\
-. if !\\n[#NUM_COLS]=1 \{\
-. nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-. \}
-. \}
-. \}
-. ie \A'\\$4' \{\
-. ds MN-font \\$4\"
-. if \\n[#PRINT_STYLE]=1 .ds MN-font CR
-. \}
-. el \{\
-. ds MN-font \\*[$PP_FT]
-. if \\n[#PRINT_STYLE]=1 .ds MN-font CR
-. \}
-. ie \B'\\$5' \{\
-. ps \\$5
-. nr MN-size \\n[.ps]
-. ps
-. if \\n[#PRINT_STYLE]=1 \{\
-. ps 12
-. nr MN-size \\n[.ps]
-. ps
-. \}
-. \}
-. el \{\
-. nr MN-size \\n[#DOC_PT_SIZE]
-. \}
-. ie \B'\\$6' \{\
-' vs \\$6
-. nr MN-spacing \\n(.v
-' vs
-. if '\\$6'DOC' \{ .nr MN-spacing \\n[#DOC_LEAD] \}
-. if \\n[#PRINT_STYLE]=1 \{\
-. nr MN-spacing \\n[#DOC_LEAD]
-. \}
-. \}
-. el \{\
-. nr MN-spacing \\n[#DOC_LEAD]
-. \}
-. ie \A'\\$7' \
-. if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\"
-. el \
-. if !\\n[#PRINT_STYLE]=1 .ds MN-color
-. ie \B'\\$8' \
-. nr MN-hy \\$8
-. el \
-. nr MN-hy \\n[.hy]
-. ev MNbottom-left-env
-. if \A'\\*[MN-font]' \
-. ft \\*[MN-font]
-. if \\n[MN-size] \
-. ps \\n[MN-size]u
-. if \\n[MN-spacing] \
-. vs \\n[MN-spacing]u
-. ll \\n[MN-left-width]u
-. ad \\*[MN-left-ad]
-. hy \\n[MN-hy]
-' in 0
-. nop \m[\\*[MN-color]]\c
-. ev
-. ev MNbottom-right-env
-. if \A'\\*[MN-font]' \
-. ft \\*[MN-font]
-. if \\n[MN-size] \
-. ps \\n[MN-size]u
-. if \\n[MN-spacing] \
-. vs \\n[MN-spacing]u
-. ll \\n[MN-right-width]u
-. ad \\*[MN-right-ad]
-. hy \\n[MN-hy]
-' in 0
-. nop \m[\\*[MN-color]]\c
-. ev
-. nr MN-active 0
-..
-\# MN
-\# --
-\# Usage:
-\#
-\# MN LEFT|RIGHT
-\# margin note text
-\# MN
-\#
-\# With a parameter, start a margin note, otherwise end a margin note.
-\# If the parameter is the string `left', define a left margin note,
-\# otherwise define a right margin note.
-\#
-.de MN
-.ds MN-dir \\$1
-.if \\n[#COLUMNS]=1 \{\
-. if \\n[#NUM_COLS]>2 \{\
-. tm MN: More than two columns. Ignoring margin notes.
-. return
-. \}
-. if !\\n[#NUM_COLS]=1 \{\
-. ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
-. el .ds MN-dir RIGHT
-. \}
-.\}
-. if !\\n[#MNinit]=1 \{\
-. tm MN: You must set parameters with MN_INIT before using MN.
-. ab Aborting
-. \}
-. ie !'\\$1'' \{\
-. if \\n[MN-active] \{\
-. tm MN: Can't handle nested margin notes.
-. return
-. \}
-. nr MN-active 1
-. ev MN-env
-. ie '\\*[MN-dir]'LEFT' \{\
-. nr MN-left +1
-. ds MN-curr l-\\n[MN-left]\"
-. evc MNbottom-left-env
-. \}
-. el \{\
-. nr MN-right +1
-. ds MN-curr r-\\n[MN-right]\"
-. evc MNbottom-right-env
-. \}
-. mk MN-mk-\\*[MN-curr]
-. di MN-div-\\*[MN-curr]
-. \}
-. el \{\
-. if \\n[MN-active] \{\
-. br
-. di
-. nr MN-div-\\*[MN-curr]-depth \\n(dn
-. ev
-. \}
-. nr MN-active 0
-. \}
-..
-\#
-\# MNtop
-\# -----
-\# Resets these registers (called in HEADER)
-.de MNtop
-. nr MN-left 0
-. nr MN-right 0
-. nr MN-active 0
-..
-\#
-\# MNbottom-left
-\# -------------
-\# The "left" half of Werner's original MNbottom.
-\#
-.de MNbottom-left
-. nr MN-curr 0
-. nr MN-last-pos 0
-. nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
-. vpt 0
-. mk MN-curr-pos
-. if \\n[MN-active] \{\
-. di
-. tm MN: Margin note finished by new page. Ignored.
-. \}
-. po \\n[MN-left-start]u
-. ev MNbottom-left-env
-. nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-. while (\\n[MN-curr] < \\n[MN-left]) \{\
-. nr MN-curr +1
-. ie (\\n[MN-last-pos] < \\n[MN-mk-l-\\n[MN-curr]]) \
-. sp |\\n[MN-mk-l-\\n[MN-curr]]u+\\n[MN-lead-adj]u
-. el \{\
-. nr MN-shifted 1
-. sp 1v
-. SHIM
-. if \\n[#SHIM]u>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
-. tm MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down.
-. \}
-.\" If last margin note doesn't fit
-. if ( (\\n(nl+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]) ) \{\
-. if \\n[MN-shifted]=1 \{\
-. sp -(1v+\\n[#SHIM]u)
-. rm MN-div-l-\\n[MN-curr]
-. tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
-. tm1 " Ignoring margin note.
-. rr MN-shifted
-. \}
-. nr #no-repeat-MN-left 1
-. nr #OVERFLOW_LEFT 1
-. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-. vpt 1
-. \}
-. MN-div-l-\\n[MN-curr]
-. br
-. nr MN-last-pos \\n[nl]
-.\}
-. ev
-. po
-. if !\\n[#no-repeat-MN-left]=1 \{\
-. if \\n[MN-right]=0 .vpt 1
-. \}
-..
-\#
-\# MNbottom-right
-\# --------------
-\# The "right" half of Werner's original MNbottom.
-\#
-.de MNbottom-right
-. nr MN-curr 0
-. nr MN-last-pos 0
-. nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
-. vpt 0
-. po \\n[MN-right-start]u
-. ev MNbottom-right-env
-. nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-. while (\\n[MN-curr] < \\n[MN-right]) \{\
-. nr MN-curr +1
-. ie (\\n[MN-last-pos] < \\n[MN-mk-r-\\n[MN-curr]]) \
-. sp |\\n[MN-mk-r-\\n[MN-curr]]u+\\n[MN-lead-adj]u
-. el \{\
-. nr MN-shifted 1
-. sp 1v
-. SHIM
-. tm MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
-. \}
-.\" If last margin note doesn't fit
-. if ( (\\n(nl+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]) ) \{\
-. if \\n[MN-shifted]=1 \{\
-. sp -(1v+\\n[#SHIM]u)
-. rm MN-div-r-\\n[MN-curr]
-. tm1 "[mom]: No room to start right margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
-. tm1 " Ignoring margin note.
-. rr MN-shifted
-. \}
-. nr #no-repeat-MN-right 1
-. nr #OVERFLOW_RIGHT 1
-. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-. vpt 1
-. \}
-. MN-div-r-\\n[MN-curr]
-. br
-. nr MN-last-pos \\n[nl]
-.\}
-. ev
-. po
-' sp |\\n[MN-curr-pos]u
-. if !\\n[#no-repeat-MN-right]=1 .vpt 1
-..
diff --git a/contrib/groff/contrib/pdfmark/ChangeLog b/contrib/groff/contrib/pdfmark/ChangeLog
deleted file mode 100644
index 97417ccc8368..000000000000
--- a/contrib/groff/contrib/pdfmark/ChangeLog
+++ /dev/null
@@ -1,137 +0,0 @@
-2005-06-22 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- pdfroff.sh portability enhancement.
-
- * pdfroff.sh: (ARGLIST): Variable removed.
- (GROFF_STYLE): Use it for all groff invocations.
- (INPUT_FILES): Pass to all groff invocations, instead of ARGLIST.
- (CS_MACRO, CE_MACRO): Initialize independently.
- (CS_FILTER): Simplify quoting; it used to confuse some shells.
- (Source): CVS keyword removed; replaced by...
- (RCSfile, Revision): these.
-
-2005-06-17 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * pdfroff.sh: (MATCH): Correct quoting.
- (Source): Add terminating `$' on CVS keyword.
-
-2005-06-17 Zvezdan Petkovic <zpetkovic@acm.org>
-
- * Makefile.sub: (RM): Define as `rm -f', for `make' programs
- which don't predefine it.
-
-2005-06-16 Bernd Warken
-
- * pdfroff.sh: (NULLDEV): Correct misspelled instance of NULDEV.
-
-2005-05-28 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub (.ms.pdf): Use `--stylesheet', not `--style'.
-
-2005-05-17 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Improve portability of `pdfroff' shell script.
-
- * pdfroff.sh: Add space in shebang, conforming to portability
- guidelines in `autoconf' docs.
- (searchpath): New shell function; use it instead of `type' command
- to locate prerequisite helper programs.
-
- * pdfroff.man: Document influence of `OSTYPE' and `PATH_SEPARATOR'
- environment variables.
-
- * Makefile.sub: (pdfroff): Make it depend on SH_DEPS_SED_SCRIPT,
- from arch/misc/shdeps.sh; use it to customize PATH_SEPARATOR
- initialization code for `searchpath' function in pdfroff.sh.
-
-2005-05-16 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Interim documentation update.
-
- * pdfmark.ms: (GROFF-WEBSITE): New string; use it in references and
- examples.
- (Section 2.5): Add definitions of D and Z operators, for use with
- pdfhref macro.
- (Section 2.5.4): Complete description of pdfhref macro usage for
- `Linking to Internet Resources'; provide examples.
-
-2005-05-14 Nick Stoughton <nick@usenix.org>
-
- * pdfmark.tmac (LB): Renamed to ...
- (PDFLB): This to avoid conflicts with mm's LB macro.
-
-2005-05-02 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Handle parsing anomalies in Cygwin's `ash', and similar, shells.
-
- * pdfroff.sh: ($CAT, $GREP, $SED, $GROFF, $DIFF): Avoid interpreting
- misdirected error messages, which `type' sends to `stdout' in some
- shells, as a successful program file match.
-
- ($AWK, $GS): Likewise; also ensure that multiple choice match
- prototypes are eval'ed as such, in case token splitting occurs
- before variable expansion.
-
-2005-04-24 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Add support for folded outlines in PDF documents.
-
- * pdfmark.tmac (PDFOUTLINE.FOLDLEVEL): New register.
- (pdf:bm.emit): Use it.
-
- * pdfmark.ms: Document it.
-
-2005-03-25 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.in: Removed.
-
-2005-03-24 Werner LEMBERG <wl@gnu.org>
-
- * Makefile: Renamed to...
- * Makefile.in: This.
-
-2005-03-22 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * pdfroff.sh: Eliminate invalid program reference to $AWK, when
- invoked with `--no-reference-dictionary' option.
-
-2005-03-02 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- * contrib/pdfmark/Makefile.sub (install_data): Use $(INSTALL_SCRIPT)
- to install `pdfroff'.
- * contrib/pdfmark/pdfroff.man (opte): New macro.
- Use it to remove spurious equal signs from SYNOPSIS.
-
-2005-02-28 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- Provide `pdfroff' shell script, and manpage to document it;
- runs multiple groff passes, to format PDF documents.
-
- * pdfroff.sh: New shell script template;
- * pdfroff.man: New man page to document it.
-
- Integrate `pdfmark' into normal groff build system;
- install macro `pdfmark' packages, build and install `pdfroff',
- and PDF format documentation.
-
- * Makefile.sub: Rewritten.
- * pdfmark.tmac: Modified.
- (pdfhref): New macro operators, `D' and `Z'.
- (pdf*href-D, pdf*href-Z): New macros: implement them.
- (pdf*href.mark.resolve, pdf*href.mark.emit, pdf*href.mark.flush):
- Modified macro algorithm, to eliminate inconsistencies between
- `grohtml' representations of `opminy' from differing groff versions.
- (pdf*href.mark, pdf*href.mark.release, pdf*href.mark.close):
- deleted (redundant macros).
- (PDFHREF.LEADING): Default value changed (was 2.5p; now -1.0p).
- Global comment updates.
-
- * TODO: Updated.
-
-2004-12-10 Werner LEMBERG <wl@gnu.org>
-
- * TODO: Updated.
-
-2004-12-08 Keith Marshall <keith.d.marshall@ntlworld.com>
-
- First import of pdfmark files.
diff --git a/contrib/groff/contrib/pdfmark/Makefile.sub b/contrib/groff/contrib/pdfmark/Makefile.sub
deleted file mode 100644
index 39376007c997..000000000000
--- a/contrib/groff/contrib/pdfmark/Makefile.sub
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright (C) 2005, Free Software Foundation, Inc.
-# Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-MAN1=\
- pdfroff.n
-
-CMDFILES=\
- pdfroff
-
-TMACFILES=\
- pdfmark.tmac \
- spdf.tmac
-
-PDFDOCFILES=\
- pdfmark.pdf
-
-CLEANADD=\
- gnu.eps \
- $(PDFDOCFILES) \
- $(CMDFILES)
-
-# Some `makes' don't predefine RM...
-RM=rm -f
-
-GROFF_BIN_DIR=$(top_builddir)/src/roff/groff
-GROFF_OTHER_BIN_DIRS=\
- $(top_builddir)/src/roff/troff \
- $(top_builddir)/src/devices/grops
-GROFF_BIN_DIRS=$(GROFF_BIN_DIR) $(GROFF_OTHER_BIN_DIRS)
-GROFF_BIN_PATH=`echo $(GROFF_BIN_DIRS) | sed -e 's| *|$(SH_SEP)|g'`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-MFLAG=-M$(srcdir) -M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-PFLAG=-dpaper=$(PAGE) -P-p$(PAGE)
-
-PDFROFF=\
- export GROFF_COMMAND_PREFIX; GROFF_COMMAND_PREFIX=''; \
- export GROFF_BIN_DIR; GROFF_BIN_DIR=$(GROFF_BIN_DIR); \
- export GROFF_BIN_PATH; GROFF_BIN_PATH=$(GROFF_BIN_PATH); \
- ./pdfroff $(FFLAG) $(MFLAG) $(PFLAG)
-
-.SUFFIXES: .ms .pdf
-.ms.pdf:
- $(RM) $@
- $(PDFROFF) -mspdf --stylesheet=$(srcdir)/cover.ms $< >$@
-
-all: pdfroff $(make_pdfdoc)
-
-pdfdoc: gnu.eps $(PDFDOCFILES)
-
-gnu.eps:
- if test -f $(top_srcdir)/doc/gnu.eps; then \
- cp $(top_srcdir)/doc/gnu.eps . ; \
- elif test -f $(top_builddir)/doc/gnu.eps; then \
- cp $(top_builddir)/doc/gnu.eps . ; \
- else \
- xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 | \
- $(pnmtops_nosetpage) -noturn -rle >$@ ; \
- fi
-
-pdfroff: pdfroff.sh $(SH_DEPS_SED_SCRIPT)
- $(RM) $@
- sed -f $(SH_DEPS_SED_SCRIPT) \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e "s|@GROFF_AWK_INTERPRETERS@|$(ALT_AWK_PROGS)|" \
- -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(ALT_GHOSTSCRIPT_PROGS)|" \
- -e "s|@GROFF_BIN_DIR@|$(bindir)|" $(srcdir)/pdfroff.sh >$@
- chmod +x $@
-
-install_data: $(make_install_pdfdoc)
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- for f in $(CMDFILES); do \
- $(RM) $(bindir)/$$f; \
- $(INSTALL_SCRIPT) $$f $(bindir)/$$f; \
- done
- -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
- for f in $(TMACFILES); do \
- $(RM) $(tmacdir)/$$f; \
- $(INSTALL_DATA) $(srcdir)/$$f $(tmacdir)/$$f; \
- done
-
-install_pdfdoc:
- -test -d $(pdfdocdir) || $(mkinstalldirs) $(pdfdocdir)
- for f in $(PDFDOCFILES); do \
- $(RM) $(pdfdocdir)/$$f; \
- $(INSTALL_DATA) $$f $(pdfdocdir)/$$f; \
- done
-
-uninstall_sub:
- for f in $(CMDFILES); do \
- $(RM) $(bindir)/$$f; \
- done
- for f in $(TMACFILES); do \
- $(RM) $(tmacdir)/$$f; \
- done
- for f in $(PDFDOCFILES); do \
- $(RM) $(pdfdocdir)/$$f; \
- done
diff --git a/contrib/groff/contrib/pdfmark/PROBLEMS b/contrib/groff/contrib/pdfmark/PROBLEMS
deleted file mode 100644
index 2fa848bdc447..000000000000
--- a/contrib/groff/contrib/pdfmark/PROBLEMS
+++ /dev/null
@@ -1,25 +0,0 @@
-Known PROBLEMS in pdfmark.tmac
-==============================
-
-Bounding boxes for link hot-spots which straddle a page break
-are not computed correctly.
-
-*** Resolved: 06-Dec-2004 (KDM): pdfmark.tmac.patch-20041206 ***
-
---------
-
-Documents including a large number of cross references may fail,
-with an 'input stack limit exceeded' error.
-
-*** Resolved: 27-Sep-2004 (KDM): pdfmark.tmac.patch-20040927 ***
-
---------
-
-Links placed in diversions, such as footnotes or floating keeps,
-resolve to the wrong destinations; (mapping order becomes confused
-between links in diversion, and links in running text following
-the diversion).
-
---------
-
-Annotations placed by .pdfnote cannot exceed about 200 chars.
diff --git a/contrib/groff/contrib/pdfmark/README b/contrib/groff/contrib/pdfmark/README
deleted file mode 100644
index 276d610fae4e..000000000000
--- a/contrib/groff/contrib/pdfmark/README
+++ /dev/null
@@ -1,50 +0,0 @@
-README for pdfmark.tmac
-=======================
-
-Copyright (C) 2004, Free Software Foundation Inc.
-Contributed by Keith Marshall (keith.d.marshall@ntlworld.com)
-
-This is free software. See file COPYING, for copying permissions,
-and warranty disclaimer.
-
-This is a preview release of a proposed pdfmark.tmac macro package,
-for use with GNU troff (groff). It is not yet complete, and should
-be considered as an alpha release; there are a few problems to be
-resolved (see file PROBLEMS).
-
-Partial documentation is provided, in groff-ms format. To convert
-this to PDF format, you will require a working groff installation,
-a working ghostscript installation, with the gs command in your PATH,
-and a GNU-compatible make. The tarball should be unpacked in the
-top directory of your groff source tree, then:
-
- cd <groff-current>/contrib/pdfmark
- make pdfmark
-
-where <groff-current> is the top directory of your current groff
-source tree.
-
-Included in this package, are:
-
- pdfmark.tmac -- the core pdfmark macro set
- spdf.tmac -- a rudimentary set of bindings for ms macros
- pdfmark.ms -- preliminary documentation
- cover.ms -- a template for the documentation cover sheet
- gnu.eps -- the groff logo, copied from the groff distribution
- Makefile -- makefile, for formatting the documentation
- README -- this file
- PROBLEMS -- a list of known problems
- TODO -- a list of planned features, not yet implemented
-
-To make the pdfmark macros generally usable, copy pdfmark.tmac to the
-'site-tmac' directory appropriate to your groff installation; (ms users
-may also wish to copy spdf.tmac). The macros may then be accessed, by
-including the '-mpdfmark' option on the groff command line; (for ms
-users, '-mspdf' is equivalent to '-ms -mpdfmark', with some extra
-macros 'thrown in').
-
-Comments, and bug reports are welcomed. Please post to the groff
-mailing list, groff@gnu.org; (you must be subscribed to this list to
-post mails). To subscribe, visit
-
- http://lists.gnu.org/mailman/listinfo/groff
diff --git a/contrib/groff/contrib/pdfmark/TODO b/contrib/groff/contrib/pdfmark/TODO
deleted file mode 100644
index a63b14f90f59..000000000000
--- a/contrib/groff/contrib/pdfmark/TODO
+++ /dev/null
@@ -1,53 +0,0 @@
-TODO items for pdfmark.tmac
-===========================
-
-Add copyright information to PDF documentation.
-
---------
-
-Add acknowledgements and trade mark ownership notifications
-to PDF documentation.
-
---------
-
-Provide documentation in man page and texinfo formats.
-
---------
-
-Add comments in spdf.tmac, to clarify its operation.
-Also add commentary in pdfmark.tmac, to clarify operation of
-recent changes.
-
---------
-
-Make Makefile generic, so 'configure' can resolve target
-system dependencies.
-
-* Comment added 2005-02-26 by Keith Marshall <keith.d.marshall@ntlworld.com>
-
-If this refers to contrib/pdfmark/Makefile, then it is addressed by the new
-`pdfroff' script; the original Makefile may be considered redundant. Local
-system dependencies are resolved by `configure', and applied to `pdfroff',
-when it is generated from `pdfroff.sh'.
-
---------
-
-Improve Makefile.sub, to integrate pdfmark.tmac installation
-into a regular groff build. Add it to groff's Makefile.in.
-
-* Comment added 2005-02-26 by Keith Marshall <keith.d.marshall@ntlworld.com>
-
-Completed.
-
---------
-
-Provide a `pdfmark' script (or call it `groff2pdf'?) which
-actually converts a groff input file to pdf, and which
-takes care of the necessary intermediate steps to handle
-PDF marks.
-
-* Comment added 2005-02-26 by Keith Marshall <keith.d.marshall@ntlworld.com>
-
-This facility now provided by `pdfroff' script; documented in `pdfroff.man'.
-Man page still requires an additional section, to describe use of `stylesheet'
-feature. Script also requires documentation in PDF and texinfo formats.
diff --git a/contrib/groff/contrib/pdfmark/cover.ms b/contrib/groff/contrib/pdfmark/cover.ms
deleted file mode 100644
index 1fe7e542c486..000000000000
--- a/contrib/groff/contrib/pdfmark/cover.ms
+++ /dev/null
@@ -1,57 +0,0 @@
-.de CS
-.if !rCO .nr CO 0
-.if !rTL .nr TL 0
-.\".nr PO*SAVED \\n[PO]
-.nr LL*SAVED \\n[LL]
-.nr HM*SAVED \\n[HM]
-.nr HM 0
-.nr PO (2.1c+\\n[CO]u)
-.nr LL 17.1c
-\&
-.nr PS*SAVED \\n[PS]
-.nr VS*SAVED \\n[VS]
-.nr PS 24
-.nr VS 30
-.CD
-.fam T
-.sp |(5.9c+\\n[TL]u)
-.als AU au@first
-..
-.de au@first
-.sp 1.5v
-.als AU au@next
-.AU \\$@
-..
-.de au@next
-.DE
-.nr PS 18
-.nr VS 18
-.CD
-.sp 0.5v
-\\$*
-..
-.de AI
-\H'-4z'\\$*\H'0'
-..
-.de CE
-.DE
-.sp |17.5c
-.PSPIC gnu.eps
-.nr PS 19
-.CD
-.fam H
-.tkf HR 10z 2p 20z 4p
-\H'-4z'A GNU MANUAL\H'0'
-.DE
-.\".nr PO \\n[PO*SAVED]
-.nr LL \\n[LL*SAVED]
-.nr PS \\n[PS*SAVED]
-.nr VS \\n[VS*SAVED]
-.nr HM \\n[HM*SAVED]
-.\".rr PO*SAVED
-.rr LL*SAVED
-.rr PS*SAVED
-.rr VS*SAVED
-.rr HM*SAVED
-.fam
-..
diff --git a/contrib/groff/contrib/pdfmark/pdfmark.ms b/contrib/groff/contrib/pdfmark/pdfmark.ms
deleted file mode 100644
index 0e9f0747faed..000000000000
--- a/contrib/groff/contrib/pdfmark/pdfmark.ms
+++ /dev/null
@@ -1,2531 +0,0 @@
-.\" vim: ft=groff
-.CS
-Portable Document Format
-Publishing with GNU Troff
-.AU Keith Marshall
-.AI <keith.d.marshall@ntlworld.com>
-.CE
-.\"
-.\" Specify the Internet address for the groff web site.
-.\" Currently, there are two available addresses; a copy is maintained at ...
-.\"
-.ds GROFF-WEBSITE http://www.gnu.org/software/groff
-.\"
-.\" ... but the official home site is at ...
-.\"
-.ds GROFF-WEBSITE http://groff.ffii.org
-.\"
-.\" Set the PDF default document view attribute, to ensure that the document
-.\" outline is visible, each time the document is opened in Acrobat Reader.
-.\"
-.pdfview /PageMode /UseOutlines
-.\"
-.\" Initialise the outline view to show only three heading levels,
-.\" with additional subordinate level headings folded.
-.\"
-.nr PDFOUTLINE.FOLDLEVEL 3
-.\"
-.\" Add document identification meta-data
-.\"
-.pdfinfo /Title Portable Document Format Publishing with GNU Troff
-.pdfinfo /Author Keith Marshall
-.pdfinfo /Subject Tips and Techniques for Exploiting PDF Features with GNU Troff
-.pdfinfo /Keywords groff troff PDF pdfmark
-.\"
-.\" Set the default cross reference format to indicate section numbers,
-.\" rather than page numbers, when we insert a reference pointer.
-.\"
-.ds PDFHREF.INFO section \\*[SN-NO-DOT] \\$*
-.\"
-.\" Define a macro, to print reference links WITHOUT the usual "see" prefix.
-.\"
-.de XR-NO-PREFIX
-.rn PDFHREF.PREFIX xx
-.ds PDFHREF.PREFIX
-.XR \\$@
-.rn xx PDFHREF.PREFIX
-..
-.\"
-.\" Define a string,
-.\" to insert a Registered Trade Mark symbol as a superscript.
-.\"
-.ds rg \*{\(rg\*}
-.\"
-.\" Establish the page layout.
-.\"
-.nr PO 2.5c
-.nr LL 17.0c
-.nr LT 17.0c
-.nr HY 0
-.nr FF 3
-.nr DI 5n
-.\"
-.\" Generate headers in larger point sizes, for NH levels < 4,
-.\" with point size increasing by 1.5p, for each lesser NH level.
-.\"
-.nr GROWPS 4
-.nr PSINCR 1.5p
-.\"
-.de EM
-.\".I "\s'+0.3'\\$1\s0" "\\$2" "\\$3"
-.I \\$@
-..
-.de CWB
-\\$5\fC\\$3\fP\f(CB\\$1\fP\fC\\$2\fP\\$4
-..
-.de CWI
-\\$5\fC\\$3\fP\f(CI\\$1\fP\fC\\$2\fP\\$4
-..
-.de CWBI
-\\$5\fC\\$3\fP\f[CBI]\\$1\fP\fC\\$2\fP\\$4
-..
-.ds = \f(CB\\$1\f(CR\\$4\f[CBI]\\$2\f(CR\\$3
-.\"
-.NH 1
-.\" When we use numbered section headings, we might like to automatically
-.\" insert a table of contents entry, using the text of the heading itself.
-.\" The "ms" macros don't provide any standard mechanism for doing this,
-.\" but "spdf.tmac" adds the "XN" macro, which will do it for us.
-.\"
-.\" Here's a simple example of how we might use it. In this case, the word
-.\" "Introduction" will appear both in the body of the document, as the text
-.\" of the heading, and it will be added to the table of contents, which is
-.\" subsequently "printed" using the "TC" macro; in both locations, it will
-.\" be prefixed by the section number.
-.\"
-.\" As an additional side effect, any use of "XN" will cause the table of
-.\" contents entry to be automatically reproduced, with the exception of its
-.\" page number reference, as a PDF document outline entry. Thus, the use
-.\" of "XN" to specify numbered section headings results in the automatic
-.\" creation of a numbered PDF document outline. This automatic creation
-.\" of the outline is completely transparent, and will occur regardless
-.\" of whether the "TC" macro is subsequently invoked, or not.
-.\"
-.XN Introduction
-.\"
-.\" If using an old s.tmac, without the SN-NO-DOT extension,
-.\" make sure we get SOMETHING in section number references.
-.\"
-.if !dSN-NO-DOT .als SN-NO-DOT SN
-.LP
-It might appear that it is a fairly simple matter to
-produce documents in Adobe\*(rg\~\(lqPortable\~Document\~Format\(rq,
-commonly known as PDF, using
-.CW groff ) GNU\~Troff\~(
-as the document formatter.
-Indeed,
-.CW groff 's
-default output format is the native Adobe\*(rg\~PostScript\*(rg format,
-which PDF producers such as Adobe\*(rg Acrobat\*(rg Distiller\*(rg,
-or GhostScript, expect as their input format.
-Thus, the PDF production process would seem to entail simply
-formatting the document source with
-.CW groff ,
-to produce a PostScript\*(rg version of the document,
-which can subsequently be processed by Acrobat\*(rg Distiller\*(rg
-or GhostScript, to generate the final PDF document.
-.LP
-For many PDF production requirements,
-the production cycle described above may be sufficient.
-However, this is a limited PDF production method,
-in which the resultant PDF document represents no more than
-an on screen image of the printed form of the document, if
-.CW groff 's
-PostScript\*(rg output were printed directly.
-.LP
-The Portable Document Format provides a number of features,
-which significantly enhance the experience of reading a document on screen,
-but which are of little or no value to a document which is merely printed.
-It
-.EM is
-possible to exploit these PDF features, which are described in the Adobe\*(rg
-.\"
-.de pdfmark-manual
-.\" This is an example of a resource reference specified by URI ...
-.\" We may need to refer often to the Adobe pdfmark Reference Manual,
-.\" so we create the internet link definition using a macro, to make
-.\" it reusable.
-.\"
-.\" Note also, that we protect the description of the reference by
-.\" preceding it with "--", to avoid "invalid character in name" type
-.\" error messages from groff (caused by the use of "\~").
-.\"
-.pdfhref W -D http://partners.adobe.com/asn/acrobat/docs/pdfmark.pdf \
- -P \(lq -A \(rq\\$1 -- pdfmark\~Reference\~Manual
-..
-.pdfmark-manual ,
-with some refinement of the simple PDF production method, provided
-appropriate \(lqfeature implementing\(rq instructions can be embedded into
-.CW groff 's
-PostScript\*(rg rendering of the document.
-This, of course, implies that the original document source, which
-.CW groff
-will process to generate the PostScript\*(rg description of the document,
-must include appropriate markup to exploit the desired PDF features.
-It is this preparation of the
-.CW groff
-document source to exploit a number of these features,
-which provides the principal focus of this document.
-.LP
-The markup techniques to be described have been utilised in the production of
-the PDF version of this document itself.
-This has been formatted using
-.CW groff 's
-.CW ms
-macro package;
-thus, usage examples may be found in the document source file,
-.CW \n(.F ,
-to which comments have been added,
-to help identify appropriate markup examples for implementing PDF features,
-such as:\(en
-.QS
-.IP \(bu
-Selecting a default document view, which defines how the document will appear
-when opened in the reader application; for example, when this document is
-opened in Acrobat\*(rg\~Reader, it should display the top of the cover sheet,
-in the document view pane, while a document outline should appear to the left,
-in the \(lqBookmarks\(rq pane.
-.IP \(bu
-Adding document identification \(lqmeta\(hydata\(rq,
-which can be accessed, in Acrobat\*(rg\~Reader,
-by inspecting the \(lqFile\^/\^Document\~Properties\^/\^Summary\(rq.
-.IP \(bu
-Creating a document outline, which will be displayed in the \(lqBookmarks\(rq
-pane of Acrobat\*(rg\~Reader, such that readers may quickly navigate to any
-section of the document, simply by clicking on the associated heading
-in the outline view.
-.IP \(bu
-Embedding active links in the body of the document, such that readers may
-quickly navigate to related material at another location within the same
-document, or in another PDF document, or even to a related Internet resource,
-specified by its URI.
-.IP \(bu
-Adding annotations, in the form of \(lqsticky notes\(rq, at strategic
-points within the PDF document.
-.QE
-.LP
-All of the techniques described have been tested on
-.EM both
-GNU/Linux, and on Microsoft\*(rg Windows\(tm2000 operating platforms, using
-.CW groff
-.CW 1.19.1 ,\c
-.pdfhref L -D footnote1 -- \**
-.FS
-.pdfhref M footnote1
-Later versions should, and some earlier versions may, be equally suitable.
-See
-.pdfhref W \*[GROFF-WEBSITE]
-for information and availability of the latest version.
-.FE
-in association with
-.CW AFPL
-.CW GhostScript
-.CW 8.14 .\c
-.pdfhref L -D footnote2 -- \**
-.FS
-.pdfhref M footnote2
-Again, other versions may be suitable.
-See
-.pdfhref W http://ghostscript.com
-for information and availability.
-.FE
-Other tools employed, which should be readily available on
-.EM any
-.SM
-UNIX\(tm
-.LG
-or GNU/Linux system, are
-.CW sed ,
-.CW awk
-and
-.CW make ,
-together with an appropriate text editor, for creating and marking up the
-.CW groff
-input files.
-These additional utilities are not provided, as standard,
-on the Microsoft\*(rg Windows\(tm platform,
-but several third party implementations are available.
-Some worth considering include the MKS\*(rg\~Toolkit,\**
-.FS
-A commercial offering; see
-.pdfhref W http://mkssoftware.com/products/tk/default.asp
-for information.
-.FE
-Cygwin,\**
-.FS
-A
-.EM free
-but comprehensive
-.SM
-POSIX
-.LG
-emulation environment and
-.SM
-UNIX\(tm
-.LG
-toolkit for 32\(hybit Microsoft\*(rg Windows\(tm platforms; see
-.pdfhref W http://cygwin.com
-for information and download.
-.FE
-or MSYS.\**
-.FS
-Another free, but minimal suite of common
-.SM
-UNIX\(tm
-.LG
-tools for 32\(hybit Microsoft\*(rg Windows\(tm, available for download from
-.pdfhref W -A ; http://www.mingw.org
-it
-.EM does
-include those tools listed above,
-and is the package which was actually used when performing the Windows\(tm2000
-platform tests referred to in the text.
-.FE
-This list is by no means exhaustive, and should in no way be construed as an
-endorsement of any of these packages, nor to imply that other similar packages,
-which may be available, are in any way inferior to them.
-.bp
-.NH 1
-.\" We may wish a section heading to represent a named destination,
-.\" so that we can create a linked reference to it, from some other
-.\" part of the PDF document, (or even from another PDF document).
-.\"
-.\" Here we use the "-N" option of the "XN" macro, to create a named
-.\" PDF link destination, at the location of the heading. Notice that
-.\" we also use the "--" marker to separate the heading text from the
-.\" preceding option specification; it is not strictly necessary in
-.\" this case, but it does help to set off the heading text from the
-.\" option specification.
-.\"
-.XN -N pdf-features -- Exploiting PDF Document Features
-.LP
-To establish a consistent framework for adding PDF features, a
-.CW groff
-macro package, named
-.CW pdfmark.tmac ,
-has been provided.
-Thus, to incorporate PDF features in a document,
-the appropriate macro calls, as described below, may be placed in the
-.CW groff
-document source, which should then be processed with a
-.CW groff
-command of the form
-.QP
-.fam C
-groff -Tps [-m
-.I name "] -m"
-.B pdfmark
-.I options \& [-
-.I "file ..." \& "...] "
-.LP
-It may be noted that the
-.CW pdfmark
-macros have no dependencies on, and no known conflicts with,
-any other
-.CW groff
-macro package; thus, users are free to use any other macro package,
-of their choice, to format their documents, while also using the
-.CW pdfmark
-macros to add PDF features.
-.NH 2
-.XN -N pdfmark-operator -- The \F[C]pdfmark\F[] Operator
-.LP
-All PDF features are implemented by embedding instances of the
-.B \F[C]pdfmark\F[]
-operator, as described in the Adobe\*(rg
-.pdfmark-manual ,
-into
-.CW groff 's
-PostScript\*(rg output stream.
-To facilitate the use of this operator, the
-.CW pdfmark
-macro package defines the primitive
-.CW pdfmark
-macro; it simply emits its argument list,
-as arguments to a
-.CW pdfmark
-operator, in the PostScript\*(rg output stream.
-.LP
-.pdfhref M -N pdfmark-example
-To illustrate the use of the
-.CW pdfmark
-macro, the following is a much simplified example of how a bookmark
-may be added to a PDF document outline
-.QP
-.CW ".pdfmark \e"
-.RS 4
-.nf
-.fam C
-/Count 2 \e
-/Title (An Example of a Bookmark with Two Children) \e
-/View [/FitH \en[PDFPAGE.Y]] \e
-/OUT
-.RE
-.LP
-In general, users should rarely need to use the
-.CW pdfmark
-macro directly.
-In particular, the above example is too simple for general use; it
-.EM will
-create a bookmark, but it does
-.EM not
-address the issues of setting the proper value for the
-.CW /Count
-key, nor of computing the
-.CW PDFPAGE.Y
-value used in the
-.CW /View
-key. The
-.CW pdfmark
-macro package includes a more robust mechanism for creating bookmarks,
-.\"
-.\" Here is an example of how a local reference may be planted,
-.\" using the automatic formatting feature of the "pdfhref" macro.
-.\"
-.\" This is a forward reference to the named destination "add-outline",
-.\" which is defined below, using the "XN" wrapper macro, from the
-.\" "spdf.tmac" macro package. The automatically formatted reference
-.\" will be enclosed in parentheses, as specified by the use of
-.\" "-P" and "-A" options.
-.\"
-.pdfhref L -P ( -A ), -D add-outline
-.\"
-which addresses these issues automatically.
-Nevertheless, the
-.CW pdfmark
-macro may be useful to users wishing to implement more advanced PDF features,
-than those currently supported directly by the
-.CW pdfmark
-macro package.
-.NH 2
-.XN -N docview -- Selecting an Initial Document View
-.LP
-By default,
-when a PDF document is opened,
-the first page will be displayed,
-at the default magnification set for the reader,
-and outline and thumbnail views will be hidden.
-When using a PDF reader,
-such as Acrobat\*(rg\~Reader,
-which supports the
-.CW /DOCVIEW
-class of the
-.CW pdfmark
-operator,
-these default initial view settings may be overridden,
-using the
-.CW pdfview
-macro.
-For example
-.QP
-.CW ".pdfview /PageMode /UseOutlines"
-.LP
-will cause Acrobat\*(rg\~Reader to open the document outline view,
-to the left of the normal page view,
-while
-.QP
-.CW ".pdfview /PageMode /UseThumbs"
-.LP
-will open the thumbnail view instead.
-.LP
-Note that the two
-.CW /PageMode
-examples, above, are mutually exclusive \(em it is not possible to have
-.EM both
-outline and thumbnail views open simultaneously.
-However, it
-.EM is
-permitted to add
-.CW /Page
-and
-.CW /View
-keys, to force the document to open at a page other than the first,
-or to change the magnification at which the document is initially displayed;
-see the
-.pdfmark-manual
-for more information.
-.LP
-It should be noted that the view controlling meta\(hydata, defined by the
-.CW pdfview
-macro, is not written immediately to the PostScript\*(rg output stream,
-but is stored in an internal meta\(hydata \(lqcache\(rq,
-(simply implemented as a
-.CW groff
-diversion).
-This \(lqcached\(lq meta\(hydata must be written out later, by invoking the
-.CW pdfsync
-macro,
-.\"
-.\" Here is another example of how we may introduce a forward reference.
-.\" This time we are using the shorter notation afforded by the "XR" macro
-.\" provided by "spdf.tmac"; this example is equivalent to the native
-.\" "pdfmark.tmac" form
-.\" .pdfhref L -D pdfsync -P ( -A ).
-.\"
-.XR pdfsync ). (
-.\"
-.NH 2
-.XN -N docinfo -- Adding Document Identification Meta-Data
-.LP
-In addition to the
-.CW /DOCVIEW
-class of meta\(hydata described above,
-.XR docview ), (
-we may also wish to include document identification meta\(hydata,
-which belongs to the PDF
-.CW /DOCINFO
-class.
-.LP
-To do this, we use the
-.CW pdfinfo
-macro.
-As an example of how it is used,
-the identification meta\(hydata attached to this document
-was specified using a macro sequence similar to:\(en
-.DS I
-.CW
-\&.pdfinfo /Title PDF Document Publishing with GNU Troff
-\&.pdfinfo /Author Keith Marshall
-\&.pdfinfo /Subject How to Exploit PDF Features with GNU Troff
-\&.pdfinfo /Keywords groff troff PDF pdfmark
-.DE
-Notice that the
-.CW pdfinfo
-macro is repeated, once for each
-.CW /DOCINFO
-record to be placed in the document.
-In each case, the first argument is the name of the applicable
-.CW /DOCINFO
-key, which
-.EM must
-be named with an initial solidus character;
-all additional arguments are collected together,
-to define the value to be associated with the specified key.
-.LP
-As is the case with the
-.CW pdfview
-macro,
-.XR docview ), (
-the
-.CW /DOCINFO
-records specified with the
-.CW pdfinfo
-macro are not immediately written to the PostScript\*(rg output stream;
-they are stored in the same meta\(hydata cache as
-.CW /DOCVIEW
-specifications, until this cache is explicitly flushed,
-by invoking the
-.CW pdfsync
-macro,
-.XR pdfsync ). (
-.NH 2
-.XN -N add-outline -- Creating a Document Outline
-.LP
-A PDF document outline comprises a table of references,
-to \(lqbookmarked\(rq locations within the document.
-When the document is viewed in an \(lqoutline\~aware\(rq PDF document reader,
-such as Adobe\*(rg Acrobat\*(rg Reader,
-this table of \(lqbookmarks\(rq may be displayed in a document outline pane,
-or \(lqBookmarks\(rq pane, to the left of the main document view.
-Individual references in the outline view may then be selected,
-by clicking with the mouse,
-to jump directly to the associated marked location in the document view.
-.LP
-The document outline may be considered as a collection of \(lqhypertext\(rq
-references to \(lqbookmarked\(rq locations within the document.
-The
-.CW pdfmark
-macro package provides a single generalised macro,
-.CW pdfhref ,
-for creating and linking to \(lqhypertext\(rq reference marks.
-This macro will be described more comprehensively in a later section,
-.XR pdfhref ); (
-the description here is restricted to its use for defining document outline entries.
-.NH 3
-.XN -N basic-outline -- A Basic Document Outline
-.LP
-In its most basic form, the document outline comprises a structured list of headings,
-each associated with a marked location, or \(lqbookmark\(rq, in the document text,
-and a specification for how that marked location should be displayed,
-when this bookmark is selected.
-.LP
-To create a PDF bookmark, the
-.CW pdfhref
-macro is used,
-at the point in the document where the bookmark is to be placed,
-in the form
-.QP
-.fam C
-.B ".pdfhref O"
-.I level > <
-.I "descriptive text ..."
-.LP
-in which the reference class
-.CWB O \& \& \(rq \(lq
-stipulates that this is an outline reference.
-.LP
-Alternatively, for those users who may prefer to think of a document outline
-simply as a collection of bookmarks, the
-.CW pdfbookmark
-macro is also provided \(em indeed,
-.CW pdfhref
-invokes it, when processing the
-.CWB O \& \& \(rq \(lq
-reference class operator.
-It may be invoked directly, in the form
-.QP
-.fam C
-.B .pdfbookmark
-.I level > <
-.I "descriptive text ..."
-.LP
-Irrespective of which of the above macro forms is employed, the
-.CWI level > <
-argument is required.
-It is a numeric argument, defining the nesting level of the \(lqbookmark\(rq
-in the outline hierarchy, with one being the topmost level.
-Its function may be considered analagous to the
-.EM "heading level"
-of the document's section headings,
-for example, as specified with the
-.CW NH
-macro, if using the
-.CW ms
-macros to format the document.
-.LP
-All further arguments, following the
-.CWI level > <
-argument, are collected together, to specify the heading text which will appear
-in the document's outline view.
-Thus, the outline entry for this section of this document,
-which has a level three heading,
-might be specified as
-.QP
-.CW
-\&.pdfhref O 3 \*(SN A Basic Document Outline
-.LP
-or, in the alternative form using the
-.CW pdfbookmark
-macro, as
-.QP
-.CW
-\&.pdfbookmark 3 \*(SN A Basic Document Outline
-.NH 3
-.XN Hierarchical Structure in a Document Outline
-.LP
-When a document outline is created, using the
-.CW pdfhref
-macro as described in
-.\"
-.\" Here is an example of how we can temporarily modify the format of
-.\" a reference link, in this case to indicate only the section number
-.\" of the link target, in the form "section #", (or, if we define
-.\" "SECREF.BEGIN" before the call, its content followed by the
-.\" section number).
-.\"
-.\" We first define a macro, which will get the reference data from
-.\" pdfhref, as arguments, and will return the formatted output, as we
-.\" require it, the string "PDFHREF.TEXT".
-.\"
-.de SECREF
-.while \\n(.$ \{\
-. ie '\\$1'section' \{\
-. if !dSECREF.BEGIN .ds SECREF.BEGIN \\$1
-. ds PDFHREF.TEXT \\*[SECREF.BEGIN]\~\\$2
-. rm SECREF.BEGIN
-. shift \\n(.$
-. \}
-. el .shift
-. \}
-..
-.\" We now tell "pdfhref" to use our formatting macro, in place of
-.\" its builtin default formatter, before we specify the reference.
-.\"
-.pdfhref F SECREF
-.pdfhref L -A , -D basic-outline
-.\"
-.\" At this point, we would normally revert the "pdfhref" formatter
-.\" to use its default, built in macro. However, in this particular
-.\" case, we want to use our custom format one more time, before we
-.\" revert it, so we will omit the reversion step this time.
-.\"
-and any entry is added at a nesting level greater than one,
-then a hierarchical structure is automatically defined for the outline.
-However, as was noted in the simplified
-.pdfhref L -D pdfmark-example -- example
-in
-.pdfhref L -A , -D pdfmark-operator
-.\"
-.\" And now, we revert to default "pdfhref" formatting behaviour,
-.\" by completing the call we delayed above.
-.\"
-.pdfhref F
-.\"
-the data required by the
-.CW pdfmark
-operator to create the outline entry may not be fully defined,
-when the outline reference is defined in the
-.CW groff
-document source.
-Specifically, when the outline entry is created, its
-.CW /Count
-key must be assigned a value equal to the number of its subordinate entries,
-at the next inner level of the outline hierarchy;
-typically however,
-these subordinate entries will be defined
-.EM later
-in the document source, and the appropriate
-.CW /Count
-value will be unknown, when defining the parent entry.
-.LP
-To resolve this paradox, the
-.CW pdfhref
-macro creates the outline entry in two distinct phases \(em
-a destination marker is placed in the PostScript\*(rg output stream immediately,
-when the outline reference is defined,
-but the actual outline entry is stored in an internal \(lqoutline cache\(rq,
-until its subordinate hierarchy has been fully defined;
-it can then be inserted in the output stream, with its
-.CW /Count
-value correctly assigned.
-Effectively, to ensure integrity of the document outline structure,
-this means that each top level outline entry, and
-.EM all
-of its subordinates, are retained in the cache, until the
-.EM next
-top level entry is defined.
-.LP
-One potential problem, which arises from the use of the \(lqoutline cache\(rq,
-is that, at the end of any document formatting run, the last top level outline entry,
-and any subordinates defined after it, will remain in the cache, and will
-.EM not
-be automatically written to the output stream.
-To avoid this problem, the user should follow the guidelines given in
-.\"
-.\" Here is a more conventional example of how to temporarily change
-.\" to the format used to display reference links. We will again use
-.\" the "SECREF" format, which we defined above, but on this occasion
-.\" we will immediately revert to the default format, after the link
-.\" has been placed.
-.\"
-.pdfhref F SECREF
-.pdfhref L -D pdfsync -A ,
-.pdfhref F
-.\"
-to synchronise the output state with the cache state,
-.XR pdfsync ), (
-at the end of the
-.CW groff
-formatting run.
-.NH 3
-.XN -N outline-view -- Associating a Document View with an Outline Reference
-.LP
-Each \(lqbookmark\(rq entry, in a PDF document outline,
-is associated with a specific document view.
-When the reader selects any outline entry,
-the document view changes to display the document context
-associated with that entry.
-.LP
-The document view specification,
-to be associated with any document outline entry,
-is established at the time when the outline entry is created.
-However, rather than requiring that each individual use of the
-.CW pdhref
-macro, to create an outline entry,
-should include its own view specification,
-the actual specification assigned to each entry is derived from
-a generalised specification defined in the string
-.CW PDFBOOKMARK.VIEW ,
-together with the setting of the numeric register
-.CW PDFHREF.VIEW.LEADING ,
-which determine the effective view specification as follows:\(en
-.QS
-.IP \*[= PDFBOOKMARK.VIEW]
-Establishes the magnification at which the document will be viewed,
-at the location of the \(lqbookmark\(rq; by default, it is defined by
-.RS
-.QP
-.CW ".ds PDFBOOKMARK.VIEW /FitH \e\en[PDFPAGE.Y] u"
-.RE
-.IP
-which displays the associated document view,
-with the \(lqbookmark\(rq location positioned at the top of the display window,
-and with the magnification set to fit the page width to the width of the window.
-.IP \*[= PDFHREF.VIEW.LEADING]
-Specifies additional spacing,
-to be placed between the top of the display window
-and the actual location of the \(lqbookmark\(rq on the displayed page view.
-By default, it is set as
-.RS
-.QP
-.CW ".nr PDFHREF.VIEW.LEADING 5.0p"
-.RE
-.IP
-Note that
-.CW PDFHREF.VIEW.LEADING
-does not represent true \(lqleading\(rq, in the typographical sense,
-since any preceding text, set in the specified display space,
-will be visible at the top of the document viewing window,
-when the reference is selected.
-.IP
-Also note that the specification of
-.CW PDFHREF.VIEW.LEADING
-is shared by
-.EM all
-reference views defined by the
-.CW pdfhref
-macro; whereas
-.CW PDFBOOKMARK.VIEW
-is applied exclusively to outline references,
-there is no independent
-.CW PDFBOOKMARK.VIEW.LEADING
-specification.
-.QE
-.LP
-If desired, the view specification may be changed, by redefining the string
-.CW PDFBOOKMARK.VIEW ,
-and possibly also the numeric register
-.CW PDFHREF.VIEW.LEADING .
-Any alternative definition for
-.CW PDFBOOKMARK.VIEW
-.EM must
-be specified in terms of valid view specification parameters,
-as described in the Adobe\*(rg
-.pdfmark-manual .
-.LP
-Note the use of the register
-.CW PDFPAGE.Y ,
-in the default definition of
-.CW PDFBOOKMARK.VIEW
-above.
-This register is computed by
-.CW pdfhref ,
-when creating an outline entry;
-it specifies the vertical position of the \(lqbookmark\(rq,
-in basic
-.CW groff
-units, relative to the
-.EM bottom
-edge of the document page on which it is defined,
-and is followed, in the
-.CW PDFBOOKMARK.VIEW
-definition, by the
-.CW grops
-.CW u \(rq \(lq
-operator, to convert it to PostScript\*(rg units on output.
-It may be used in any redefined specification for
-.CW PDFBOOKMARK.VIEW ,
-(or in the analogous definition of
-.CW PDFHREF.VIEW ,
-described in
-.XR-NO-PREFIX pdfhref-view ),
-but
-.EM not
-in any other context,
-since its value is undefined outside the scope of the
-.CW pdfhref
-macro.
-.LP
-Since
-.CW PDFPAGE.Y
-is computed relative to the
-.EM bottom
-of the PDF output page,
-it is important to ensure that the page length specified to
-.CW troff
-correctly matches the size of the logical PDF page.
-This is most effectively ensured,
-by providing
-.EM identical
-page size specifications to
-.CW groff ,
-.CW grops
-and to the PostScript\*(rg to PDF converter employed,
-and avoiding any page length changes within the document source.
-.LP
-Also note that
-.CW PDFPAGE.Y
-is the only automatically computed \(lqbookmark\(rq location parameter;
-if the user redefines
-.CW PDFBOOKMARK.VIEW ,
-and the modified view specification requires any other positional parameters,
-then the user
-.EM must
-ensure that these are computed
-.EM before
-invoking the
-.CW pdfhref
-macro.
-.NH 3
-.XN -N outline-folding -- Folding the Outline to Conceal Less Significant Headings
-.LP
-When a document incorporates many subheadings,
-at deeply nested levels,
-it may be desirable to \(lqfold\(rq the outline
-such that only the major heading levels are initially visible,
-yet making the inferior subheadings accessible,
-by allowing the reader to expand the view of any heading branch on demand.
-.LP
-The
-.CW pdfmark
-macros support this capability,
-through the setting of the
-.CW PDFOUTLINE.FOLDLEVEL
-register.
-This register should be set to the number of heading levels
-which it is desired to show in expanded form, in the
-.EM initial
-document outline display;
-all subheadings at deeper levels will still be added to the outline,
-but will not become visible until the outline branch containing them is expanded.
-'ne 5
-For example, the setting used in this document:
-.QS
-.LD
-.fam C
-\&.\e" Initialise the outline view to show only three heading levels,
-\&.\e" with additional subordinate level headings folded.
-\&.\e"
-\&.nr PDFOUTLINE.FOLDLEVEL 3
-.DE
-.QE
-.LP
-results in only the first three levels of headings being displayed
-in the document outline,
-.EM until
-the reader chooses to expand the view,
-and so reveal the lower level headings in any outline branch.
-.LP
-The initial default setting of
-.CW PDFOUTLINE.FOLDLEVEL ,
-if the document author does not choose to change it,
-is 10,000.
-This is orders of magnitude greater than the maximum heading level
-which is likely to be used in any document;
-thus the default behaviour will be to show document outlines fully expanded,
-to display all headings defined,
-at all levels within each document.
-.LP
-The setting of
-.CW PDFOUTLINE.FOLDLEVEL
-may be changed at any time;
-however, the effect of each such change may be difficult to predict,
-since it is applied not only to outline entries which are defined
-.EM after
-the setting is changed,
-but also to any entries which remain in the outline cache,
-.EM at
-this time.
-Therefore, it is recommended that
-.CW PDFOUTLINE.FOLDLEVEL
-should be set
-.EM once ,
-at the start of each document;
-if it
-.EM is
-deemed necessary to change it at any other time,
-the outline cache should be flushed,
-.XR pdfsync ), (
-.EM immediately
-before the change,
-which should immediately preceed a level one heading.
-.NH 3
-.XN -N multipart-outline -- Outlines for Multipart Documents
-.LP
-When a document outline is created, using the
-.CW pdfhref
-macro, each reference mark is automatically assigned a name,
-composed of a fixed stem followed by a serially generated numeric qualifier.
-This ensures that, for each single part document, every outline reference
-has a uniquely named destination.
-.LP
-As the overall size of the PDF document increases,
-it may become convenient to divide it into smaller,
-individually formatted PostScript\*(rg components,
-which are then assembled, in the appropriate order,
-to create a composite PDF document.
-While this strategy may simplify the overall process of creating and
-editing larger documents, it does introduce a problem in creating
-an overall document outline,
-since each individual PostScript\*(rg component will be assigned
-duplicated sequences of \(lqbookmark\(rq names,
-with each name ultimately referring to multiple locations in the composite document.
-To avoid such reference naming conflicts, the
-.CW pdfhref
-macro allows the user to specify a \(lqtag\(rq,
-which is appended to the automatically generated \(lqbookmark\(rq name;
-this may be used as a discriminating mark, to distinguish otherwise
-similarly named destinations, in different sections of the composite document.
-.LP
-To create a \(lqtagged\(rq document outline,
-the syntax for invocation of the
-.CW pdfhref
-macro is modified, by the inclusion of an optional \(lqtag\(rq specification,
-.EM before
-the nesting level argument, i.e.
-.QP
-.fam C
-.B ".pdfhref O"
-.B -T \& [
-.I tag >] <
-.I level > <
-.I "descriptive text ..."
-.LP
-The optional
-.CWI tag > <
-argument may be composed of any characters of the user's choice;
-however, its initial character
-.EM "must not"
-be any decimal digit, and ideally it should be kept short
-\(em one or two characters at most.
-.LP
-By employing a different tag in each section,
-the user can ensure that \(lqbookmark\(rq names remain unique,
-throughout all the sections of a composite document.
-For example, when using the
-.CW spdf.tmac
-macro package, which adds
-.CW pdfmark
-capabilities to the standard
-.CW ms
-package,
-.XR using-spdf ), (
-the table of contents is collected into a separate PostScript\*(rg section
-from the main body of the document.
-In the \(lqbody\(rq section, the document outline is \(lquntagged\(rq,
-but in the \(lqTable\~of\~Contents\(rq section, a modified version of the
-.CW TC
-macro adds an outline entry for the start of the \(lqTable\~of\~Contents\(rq,
-invoking the
-.CW pdfhref
-macro as
-.QP
-.CW ".pdfhref O -T T 1 \e\e*[TOC]"
-.LP
-to tag the associated outline destination name with the single character suffix,
-.CW T \(rq. \(lq
-Alternatively, as in the case of the basic outline,
-.XR basic-outline ), (
-this may equally well be specified as
-.QP
-.CW ".pdfbookmark -T T 1 \e\e*[TOC]"
-.NH 3
-.XN Delegation of the Outline Definition
-.LP
-Since the most common use of a document outline
-is to provide a quick method of navigating through a document,
-using active \(lqhypertext\(rq links to chapter and section headings,
-it may be convenient to delegate the responsibility of creating the outline
-to a higher level macro, which is itself used to
-define and format the section headings.
-This approach has been adopted in the
-.CW spdf.tmac
-package, to be described later,
-.XR using-spdf ). (
-.LP
-When such an approach is adopted,
-the user will rarely, if ever, invoke the
-.CW pdfhref
-macro directly, to create a document outline.
-For example, the structure and content of the outline for this document
-has been exclusively defined, using a combination of the
-.CW NH
-macro, from the
-.CW ms
-package, to establish the structure, and the
-.CW XN
-macro from
-.CW spdf.tmac ,
-to define the content.
-In this case,
-the responsibility for invoking the
-.CW pdfhref
-macro, to create the document outline,
-is delegated to the
-.CW XN
-macro.
-.NH 2
-.XN -N pdfhref -- Adding Reference Marks and Links
-.LP
-.pdfhref F SECREF
-.ds SECREF.BEGIN Section
-.pdfhref L -D add-outline
-.pdfhref F
-has shown how the
-.CW pdfhref
-macro may be used to create a PDF document outline.
-While this is undoubtedly a powerful capability,
-it is by no means the only trick in the repertoire of this versatile macro.
-.LP
-The macro name,
-.CW pdfhref ,
-which is a contraction of \(lqPDF HyperText Reference\(rq,
-indicates that the general purpose of this macro is to define
-.EM any
-type of dynamic reference mark, within a PDF document.
-Its generalised usage syntax takes the form
-.QP
-.fam C
-.B .pdfhref
-.BI class > <
-.I "-options ...\&" ] [
-[--]
-.I "descriptive text ...\&" ] [
-.LP
-where
-.CW <\f(CIclass\fP>
-represents a required single character argument,
-which defines the specific reference operation to be performed,
-and may be selected from:\(en
-.QS
-.IP \*[= O]
-Add an entry to the document outline.
-This operation has been described earlier,
-.XR add-outline ). (
-.IP \*[= M]
-Place a \(lqnamed destination\(rq reference mark at the current output position,
-in the current PDF document,
-.XR mark-dest ). (
-.IP \*[= D]
-Specify the content of a PDF document reference dictionary entry;
-typically, such entries are generated automatically,
-by transformation of the intermediate output resulting from the use of
-.CW pdfhref
-.CWB M \& \& \(rq, \(lq
-with the
-.CWB -X \& \& \(rq \(lq
-modifier,
-.XR create-map ); (
-however, it is also possible to specify such entries manually,
-.XR user-format ). (
-.IP \*[= L]
-Insert an active link to a named destination,
-.XR link-named ), (
-at the current output position in the current PDF document,
-such that when the reader clicks on the link text,
-the document view changes to show the location of the named destination.
-.IP \*[= W]
-Insert an active link to a \(lqweb\(rq resource,
-.XR add-weblink ), (
-at the current output position in the current PDF document.
-This is effectively the same as using the
-.CWB L \& \& \(rq \(lq
-operator to establish a link to a named destination in another PDF document,
-.XR link-extern ), (
-except that in this case, the destination is specified by a
-\(lquniform resource identifier\(rq, or
-.CW URI ;
-this may represent any Internet or local resource
-which can be specified in this manner.
-.IP \*[= F]
-Specify a user defined macro, to be called by
-.CW pdfhref ,
-when formatting the text in the active region of a link,
-.XR set-format ). (
-.IP \*[= Z]
-Define the absolute position on the physical PDF output page,
-where the \(lqhot\(hyspot\(rq associated with an active link is to be placed.
-Invoked in pairs, marking the starting and ending PDF page co\(hyordinates
-for each link \(lqhot\(hyspot\(rq, this operator is rarely, if ever,
-specified directly by the user;
-rather, appropriate
-.CW pdfhref
-.CWB Z \& \& \(rq \(lq
-specifications are inserted automatically into the document reference map
-during the PDF document formatting process,
-.XR create-map ). (
-.IP \*[= I]
-Initialise support for
-.CW pdfhref
-features.
-The current
-.CW pdfhref
-implementation provides only one such feature which requires initialisation
-\(em a helper macro which must be attached to a user supplied page trap handler,
-in order to support mapping of reference \(lqhot\(hyspots\(rq
-which extend through a page transition;
-.XR page-trap ). (
-.QE
-.NH 3
-.XN Optional Features of the \F[C]pdfhref\F[] Macro
-.LP
-The behaviour of a number of the
-.CW pdfhref
-macro operations can be modified,
-by including
-.EM "option specifiers" \(rq \(lq
-after the operation specifying argument,
-but
-.EM before
-any other arguments normally associated with the operation.
-In
-.EM all
-cases, an option is specified by an
-.EM "option flag" \(rq, \(lq
-comprising an initial hyphen,
-followed by one or two option identifying characters.
-Additionally,
-.EM some
-options require
-.EM "exactly one"
-option argument;
-for these options, the argument
-.EM must
-be specified, and it
-.EM must
-be separated from the preceding option flag by one or more
-.EM spaces ,
-(tabs
-.EM "must not"
-be used).
-It may be noted that this paradigm for specifying options
-is reminiscent of most
-.SM
-UNIX\(tm
-.LG
-shells; however, in the case of the
-.CW pdfhref
-macro, omission of the space separating an option flag from its argument is
-.EM never
-permitted.
-.LP
-A list of
-.EM all
-general purpose options supported by the
-.CW pdfhref
-macro is given below.
-Note that not all options are supported for all
-.CW pdfhref
-operations; the operations affected by each option are noted in the list.
-For
-.EM most
-operations, if an unsupported option is specified,
-it will be silently ignored; however, this behaviour should
-not be relied upon.
-.LP
-The general purpose options, supported by the
-.CW pdfhref
-macro, are:\(en
-.QS
-.IP \*[= -N\0 name > <]
-Allows the
-.CWI name > <
-associated with a PDF reference destination
-to be defined independently from the following text,
-which describes the reference.
-This option affects only the
-.CWB M \& \& \(rq \(lq
-operation of the
-.CW pdfhref
-macro,
-.XR mark-dest ). (
-.IP \*[= -E]
-Also used exclusively with the
-.CWB M \& \& \(rq \(lq
-operator, the
-.CWB -E
-option causes any specified
-.CWI descriptive \& \& \~\c
-.CWI text
-arguments,
-.XR mark-dest ), (
-to be copied, or
-.EM echoed ,
-in the body text of the document,
-at the point where the reference mark is defined;
-(without the
-.CWB -E
-option, such
-.CWI descriptive \& \& \~\c
-.CWI text
-will appear
-.EM only
-at points where links to the reference mark are placed,
-and where the standard reference display format,
-.XR set-format ), (
-is used).
-.IP \*[= -D\0 dest > <]
-Specifies the
-.CW URI ,
-or the destination name associated with a PDF active link,
-independently of the following text,
-which describes the link and demarcates the link \(lqhot\(hyspot\(rq.
-This option affects the behaviour of the
-.CW pdfhref
-macro's
-.CWB L \& \& \(rq \(lq
-and
-.CWB W \& \& \(rq \(lq
-operations.
-.IP
-When used with the
-.CWB L \& \& \(rq \(lq
-operator, the
-.CWI dest > <
-argument must specify a PDF \(lqnamed destination\(rq,
-as defined using
-.CW pdfhref
-with the
-.CWB M \& \& \(rq \(lq
-operator.
-.IP
-When used with the
-.CWB W \& \& \(rq \(lq
-operator,
-.CWI dest > <
-must specify a link destination in the form of a
-\(lquniform resource identifier\(rq, or
-.CW URI ,
-.XR add-weblink ). (
-.IP \*[= -F\0 file > <]
-When used with the
-.CWB L \& \& \(rq \(lq
-.CW pdfhref
-operator,
-.CWI file > <
-specifies an external PDF file in which the named destination
-for the link reference is defined.
-This option
-.EM must
-be specified with the
-.CWB L \& \& \(rq \(lq
-operator,
-to create a link to a destination in a different PDF document;
-when the
-.CWB L \& \& \(rq \(lq
-operator is used
-.EM without
-this option, the link destination is assumed to be defined
-within the same document.
-.IP \*[= -P\0 \(dqprefix\(hytext\(dq > <]
-Specifies
-.CWI \(dqprefix\(hytext\(dq > <
-to be attached to the
-.EM start
-of the text describing an active PDF document link,
-with no intervening space, but without itself being included in the
-active area of the link \(lqhot\(hyspot\(rq;
-it is effective with the
-.CWB L \& \& \(rq \(lq
-and
-.CWB W \& \& \(rq \(lq
-.CW pdfhref
-operators.
-.IP
-Typically, this option would be used to insert punctuation before
-the link \(lqhot\(hyspot\(rq.
-Thus, there is little reason for the inclusion of spaces in
-.CWI \(dqprefix\(hytext\(dq > < ;
-however, if such space is required, then the enclosing double quotes
-.EM must
-be specified, as indicated.
-.IP \*[= -A\0 \(dqaffixed\(hytext\(dq > <]
-Specifies
-.CWI \(dqaffixed\(hytext\(dq > <
-to be attached to the
-.EM end
-of the text describing an active PDF document link,
-with no intervening space, but without itself being included in the
-active area of the link \(lqhot\(hyspot\(rq;
-it is effective with the
-.CWB L \& \& \(rq \(lq
-and
-.CWB W \& \& \(rq \(lq
-.CW pdfhref
-operators.
-.IP
-Typically, this option would be used to insert punctuation after
-the link \(lqhot\(hyspot\(rq.
-Thus, there is little reason for the inclusion of spaces in
-.CWI \(dqaffixed\(hytext\(dq > < ;
-however, if such space is required, then the enclosing double quotes
-.EM must
-be specified, as indicated.
-.IP \*[= -T\0 tag > <]
-When specified with the
-.CWB O \& \& \(rq \(lq
-operator,
-.CWI tag > <
-is appended to the \(lqbookmark\(rq name assigned to the generated outline entry.
-This option is
-.EM required ,
-to distinguish between the series of \(lqbookmark\(rq names generated in
-individual passes of the
-.CW groff
-formatter, when the final PDF document is to be assembled
-from a number of separately formatted components;
-.XR multipart-outline ). (
-.IP \*[= -X]
-This
-.CW pdfhref
-option is used with either the
-.CWB M \& \& \(rq \(lq
-operator, or with the
-.CWB L \& \& \(rq \(lq
-operator.
-.IP
-When used with the
-.CWB M \& \& \(rq \(lq
-operator,
-.XR mark-dest ), (
-it ensures that a cross reference record for the marked destination
-will be included in the document reference map,
-.XR export-map ). (
-.IP
-When used with the
-.CWB L \& \& \(rq \(lq
-operator,
-.XR link-named ), (
-it causes the reference to be displayed in the standard cross reference format,
-.XR set-format ), (
-but substituting the
-.CWI descriptive \& \& \~\c
-.CWI text
-specified in the
-.CW pdfhref \& \(lq
-.CW L \(rq
-argument list,
-for the description specified in the document reference map.
-.IP \*[= --]
-Marks the end of the option specifiers.
-This may be used with all
-.CW pdfhref
-operations which accept options, to prevent
-.CW pdfhref
-from interpreting any following arguments as option specifiers,
-even if they would otherwise be interpreted as such.
-It is also useful when the argument list to
-.CW pdfhref
-contains special characters \(em any special character,
-which is not legal in a
-.CW groff
-macro name, will cause a parsing error, if
-.CW pdfhref
-attempts to match it as a possible option flag;
-using the
-.CW -- \(rq \(lq
-flag prevents this, so suppressing the
-.CW groff
-warning message, which would otherwise ensue.
-.IP
-Using this flag after
-.EM all
-sequences of macro options is recommended,
-even when it is not strictly necessary,
-if only for the entirely cosmetic benefit of visually separating
-the main argument list from the sequence of preceding options.
-.QE
-.LP
-In addition to the
-.CW pdfhref
-options listed above, a supplementary set of two character options are defined.
-These supplementary options, listed below, are intended for use with the
-.CWB L \& \& \(rq \(lq
-operator, in conjunction with the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option, to specify alternate file names,
-in formats compatible with the file naming conventions
-of alternate operating systems;
-they will be silently ignored, if used in any other context.
-.LP
-The supported alternate file name options,
-which are ignored if the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option is not specified, are:\(en
-.QS
-.IP \*[= -DF\0 dos\(hyfile > <]
-Specifies the name of the file in which a link destination is defined,
-using the file naming semantics of the
-.CW MS\(hyDOS \*(rg
-operating system.
-When the PDF document is read on a machine
-where the operating system uses the
-.CW MS\(hyDOS \*(rg
-file system, then
-.CWI dos\(hyfile > <
-is used as the name of the file containing the reference destination,
-overriding the
-.CWI file > <
-argument specified with the
-.CWB -F
-option.
-.IP \*[= -MF\0 mac\(hyfile > <]
-Specifies the name of the file in which a link destination is defined,
-using the file naming semantics of the
-.CW Apple \*(rg
-.CW Macintosh \*(rg
-operating system.
-When the PDF document is read on a machine
-where the operating system uses the
-.CW Macintosh \*(rg
-file system, then
-.CWI mac\(hyfile > <
-is used as the name of the file containing the reference destination,
-overriding the
-.CWI file > <
-argument specified with the
-.CWB -F
-option.
-.IP \*[= -UF\0 unix\(hyfile > <]
-Specifies the name of the file in which a link destination is defined,
-using the file naming semantics of the
-.CW UNIX \(tm
-operating system.
-When the PDF document is read on a machine
-where the operating system uses
-.CW POSIX
-file naming semantics, then
-.CWI unix\(hyfile > <
-is used as the name of the file containing the reference destination,
-overriding the
-.CWI file > <
-argument specified with the
-.CWB -F
-option.
-.IP \*[= -WF\0 win\(hyfile > <]
-Specifies the name of the file in which a link destination is defined,
-using the file naming semantics of the
-.CW MS\(hyWindows \*(rg
-32\(hybit operating system.
-When the PDF document is read on a machine
-where the operating system uses any of the
-.CW MS\(hyWindows \*(rg
-file systems, with long file name support, then
-.CWI win\(hyfile > <
-is used as the name of the file containing the reference destination,
-overriding the
-.CWI file > <
-argument specified with the
-.CWB -F
-option.
-.QE
-.NH 3
-.XN -N mark-dest -- Marking a Reference Destination
-.LP
-The
-.CW pdfhref
-macro may be used to create active links to any Internet resource,
-specified by its
-.CW URI ,
-or to any \(lqnamed destination\(rq,
-either within the same document, or in another PDF document.
-Although the PDF specification allows link destinations to be defined
-in terms of a page number, and an associated view specification,
-this style of reference is not currently supported by the
-.CW pdfhref
-macro, because it is not possible to adequately bind the specification
-for the destination with the intended reference context.
-.LP
-References to Internet resources are interpreted in accordance with the
-.CW W3C
-standard for defining a
-.CW URI ;
-hence the only prerequisite, for creating a link to any Internet resource,
-is that the
-.CW URI
-be properly specified, when declaring the reference;
-.XR add-weblink ). (
-In the case of references to \(lqnamed destinations\(rq in PDF documents,
-however, it is necessary to provide a mechanism for creating such
-\(lqnamed destinations\(rq.
-This may be accomplished, by invoking the
-.CW pdfhref
-macro in the form
-.QP
-.fam C
-.B ".pdfhref M"
-.B -N \& [
-.I name >] <
-.B -X ] [
-.B -E ] [
-.I "descriptive text ...\&" ] [
-.LP
-This creates a \(lqnamed destination\(rq reference mark, with its name specified by
-.CWI name > < ,
-or, if the
-.CWB -N
-option is not specified, by the first word of
-.CWI descriptive \& \& \~\c
-.CWI text \& \& ;
-(note that this imposes the restriction that,
-if the
-.CWB -N
-option is omitted, then
-.EM "at least"
-one word of
-.CWI descriptive \& \& \~\c
-.CWI text
-.EM must
-be specified).
-Additionally, a reference view will be automatically defined,
-and associated with the reference mark,
-.XR pdfhref-view ), (
-.\" and, if any
-.\" .CWI descriptive
-.\" .CWI text
-.\" is specified, or the
-and, if the
-.CWB -X
-option is specified, and no document cross reference map has been imported,
-.XR import-map ), (
-then a cross reference mapping record,
-.XR export-map ), (
-will be written to the
-.CW stdout
-stream;
-this may be captured, and subsequently used to generate a cross reference map
-for the document,
-.XR create-map ). (
-.LP
-When a \(lqnamed destination\(rq reference mark is created, using the
-.CW pdfhref
-macro's
-.CWB M \& \& \(rq \(lq
-operator, there is normally no visible effect in the formatted document; any
-.CWI descriptive \& \& \~\c
-.CWI text
-which is specified will simply be stored in the cross reference map,
-for use when a link to the reference mark is created.
-This default behaviour may be changed, by specifying the
-.CWB -E
-option, which causes any specified
-.CWI descriptive \& \& \~\c
-.CWI text
-to be \(lqechoed\(rq in the document text,
-at the point where the reference mark is placed,
-in addition to its inclusion in the cross reference map.
-.NH 4
-.XN -N export-map -- Mapping a Destination for Cross Referencing
-.LP
-Effective cross referencing of
-.EM any
-document formatted by
-.CW groff
-requires multiple pass formatting.
-Details of how this multiple pass formatting may be accomplished,
-when working with the
-.CW pdfmark
-macros, will be discussed later,
-.XR do-xref ); (
-at this stage, the discussion will be restricted to the initial preparation,
-which is required at the time when the cross reference destinations are defined.
-.LP
-The first stage, in the process of cross referencing a document,
-is the generation of a cross reference map.
-Again, the details of
-.EM how
-the cross reference map is generated will be discussed in
-.pdfhref F SECREF L -D do-xref -A ;
-.pdfhref F
-however, it is important to recognise that
-.EM what
-content is included in the cross reference map is established
-when the reference destination is defined \(em it is derived
-from the reference data exported on the
-.CW stderr
-stream by the
-.CW pdfhref
-macro, when it is invoked with the
-.CWB M \& \& \(rq \(lq
-operator, and is controlled by whatever definition of the string
-.CW PDFHREF.INFO
-is in effect, when the
-.CW pdfhref
-macro is invoked.
-.LP
-The initial default setting of
-.CW PDFHREF.INFO
-is
-.QP
-.CW ".ds PDFHREF.INFO page \e\en% \e\e$*"
-.LP
-which ensures that the cross reference map will contain
-at least a page number reference, supplemented by any
-.CWI descriptive \& \& \~\c
-.CWI text
-which is specified for the reference mark, as defined by the
-.CW pdfhref
-macro, with its
-.CWB M \& \& \(rq \(lq
-operator; this may be redefined by the user,
-to export additional cross reference information,
-or to modify the default format for cross reference links,
-.XR set-format ). (
-.NH 4
-.XN -N pdfhref-view -- Associating a Document View with a Reference Mark
-.LP
-In the same manner as each document outline reference, defined by the
-.CW pdfhref
-macro with the
-.CWB O \& \& \(rq \(lq
-operator,
-.XR add-outline ), (
-has a specific document view associated with it,
-each reference destination marked by
-.CW pdfhref
-with the
-.CWB M \& \& \(rq \(lq
-operator, requires an associated document view specification.
-.LP
-The mechanism whereby a document view is associated with a reference mark
-is entirely analogous to that employed for outline references,
-.XR outline-view ), (
-except that the
-.CW PDFHREF.VIEW
-string specification is used, in place of the
-.CW PDFBOOKMARK.VIEW
-specification.
-Thus, the reference view is defined in terms of:\(en
-.QS
-.IP \*[= PDFHREF.VIEW]
-A string,
-establishing the position of the reference mark within the viewing window,
-and the magnification at which the document will be viewed,
-at the location of the marked reference destination;
-by default, it is defined by
-.RS
-.QP
-.CW ".ds PDFHREF.VIEW /FitH \e\en[PDFPAGE.Y] u"
-.RE
-.IP
-which displays the reference destination at the top of the viewing window,
-with the magnification set to fit the page width to the width of the window.
-.IP \*[= PDFHREF.VIEW.LEADING]
-A numeric register,
-specifying additional spacing, to be placed between the top of the display
-window and the actual position at which the location of the reference
-destination appears within the window.
-This register is shared with the view specification for outline references,
-and thus has the same default initial setting,
-.RS
-.QP
-.CW ".nr PDFHREF.VIEW.LEADING 5.0p"
-.RE
-.IP
-as in the case of outline reference views.
-.IP
-Again, notice that
-.CW PDFHREF.VIEW.LEADING
-does not represent true typographic \(lqleading\(rq,
-since any preceding text, set in the specified display space,
-will be visible at the top of the viewing window,
-when the reference is selected.
-.QE
-.LP
-Just as the view associated with outline references may be changed,
-by redefining
-.CW PDFBOOKMARK.VIEW ,
-so the view associated with marked reference destinations may be changed,
-by redefining
-.CW PDFHREF.VIEW ,
-and, if desired,
-.CW PDFHREF.VIEW.LEADING ;
-such changes will become effective for all reference destinations marked
-.EM after
-these definitions are changed.
-(Notice that, since the specification of
-.CW PDFHREF.VIEW.LEADING
-is shared by both outline reference views and marked reference views,
-if it is changed, then the views for
-.EM both
-reference types are changed accordingly).
-.LP
-It may again be noted, that the
-.CW PDFPAGE.Y
-register is used in the definition of
-.CW PDFHREF.VIEW ,
-just as it is in the definition of
-.CW PDFBOOKMARK.VIEW ;
-all comments in
-.pdfhref F SECREF L -D outline-view
-.pdfhref F
-relating to its use, and indeed to page position computations in general,
-apply equally to marked reference views and to outline reference views.
-.NH 3
-.XN -N link-named -- Linking to a Marked Reference Destination
-.LP
-Any named destination, such as those marked by the
-.CW pdfhref
-macro, using it's
-.CWB M \& \& \(rq \(lq
-operator, may be referred to from any point in
-.EM any
-PDF document, using an
-.EM "active link" ;
-such active links are created by again using the
-.CW pdfhref
-macro, but in this case, with the
-.CWB L \& \& \(rq \(lq
-operator.
-This operator provides support for two distinct cases,
-depending on whether the reference destination is defined in
-the same document as the link,
-.XR link-intern ), (
-or is defined as a named destination in a different PDF document,
-.XR link-extern ). (
-.NH 4
-.XN -N link-intern -- References within a Single PDF Document
-.LP
-The general syntactic form for invoking the
-.CW pdfhref
-macro,
-when creating a link to a named destination within the same PDF document is
-.QP
-.fam C
-.B .pdfhref
-.B L
-.B -D \& [
-.BI dest-name >] <
-.B -P \& [
-.BI prefix-text >] <
-.B -A \& [
-.BI affixed-text >] <
-\e
-.br
-\0\0\0
-.B -X ] [
-.B -- ] [
-.I "descriptive text ...\&" ] [
-.LP
-where
-.CWI dest-name > <
-specifies the name of the link destination,
-as specified using the
-.CW pdfhref
-.CWB M \& \& \(rq \(lq
-operation; (it may be defined either earlier in the document,
-to create a backward reference, or later, to create a forward reference).
-.\"
-.\" Here's a example of how to add an iconic annotation.
-.\"
-.\".pdfnote -T "Internal Cross References" \
-.\" This description is rather terse, and could benefit from \
-.\" the inclusion of an example.
-.LP
-If any
-.CWI descriptive \& \& \~\c
-.CWI text
-arguments are specified, then they will be inserted into the
-.CW groff
-output stream, to define the text appearing in the \(lqhot\(hyspot\(rq
-region of the link;
-this will be printed in the link colour specified by the string,
-.CW PDFHREF.TEXT.COLOUR ,
-which is described in
-.XR-NO-PREFIX set-colour .
-If the
-.CWB -X
-option is also specified, then the
-.CWI descriptive \& \& \~\c
-.CWI text
-will be augmented, by prefacing it with page and section number indicators,
-in accordance with the reference formatting rules which are in effect,
-.XR set-format ); (
-such indicators will be included within the active link region,
-and will also be printed in the link colour.
-.LP
-Note that
-.EM either
-the
-.CWB -D \& \& \~\c
-.CWBI dest\(hyname > <
-option,
-.EM or
-the
-.CWI descriptive \& \& \~\c
-.CWI text
-arguments,
-.EM "but not both" ,
-may be omitted.
-If the
-.CWB -D \& \& \~\c
-.CWBI dest\(hyname > <
-option is omitted, then the first word of
-.CWI descriptive \& \& \~\c
-.CWI text \& \& ,
-i.e.\~all text up to but not including the first space,
-will be interpreted as the
-.CWBI dest\(hyname > <
-for the link; this text will also appear in the running text of the document,
-within the active region of the link.
-Alternatively, if the
-.CWB -D \& \& \~\c
-.CWBI dest\(hyname > <
-option
-.EM is
-specified, and
-.CWI descriptive \& \& \~\c
-.CWI text
-is not,
-then the running text which defines the reference,
-and its active region,
-will be derived from the reference description which is specified
-when the named destination is marked,
-.XR mark-dest ), (
-and will be formatted according to the reference formatting rules
-which are in effect, when the reference is placed,
-.XR set-format ); (
-in this case, it is not necessary to specify the
-.CWB -X
-option to activate automatic formatting of the reference \(em it is implied,
-by the omission of all
-.CWI descriptive \& \& \~\c
-.CWI text
-arguments.
-.LP
-The
-.CWB -P \& \& \~\c
-.CWBI prefix\(hytext > <
-and
-.CWB -A \& \& \~\c
-.CWBI affixed\(hytext > <
-options may be used to specify additional text
-which will be placed before and after the linked text respectively,
-with no intervening space.
-Such prefixed and affixed text will be printed in the normal text colour,
-and will not be included within the active region of the link.
-This feature is mostly useful for creating parenthetical references,
-or for placing punctuation adjacent to,
-but not included within,
-the text which defines the active region of the link.
-.LP
-The operation of the
-.CW pdfhref
-macro, when used with its
-.CWB L \& \& \(rq \(lq
-operator to place a link to a named PDF destination,
-may best be illustrated by an example.
-However, since the appearance of the link will be influenced by
-factors established when the named destination is marked,
-.XR mark-dest ), (
-and also by the formatting rules in effect when the link is placed,
-the presentation of a suitable exanple will be deferred,
-until the formatting mechanism has been explained,
-.XR set-format ). (
-.NH 4
-.XN -N link-extern -- References to Destinations in Other PDF Documents
-.LP
-The
-.CW pdfhref
-macro's
-.CWB L \& \& \(rq \(lq
-operator is not restricted to creating reference links
-within a single PDF document.
-When the link destination is defined in a different document,
-then the syntactic form for invoking
-.CW pdfhref
-is modified, by the addition of options to specify the
-name and location of the PDF file in which the destination is defined.
-Thus, the extended
-.CW pdfhref
-syntactic form becomes
-.QP
-.fam C
-.B .pdfhref
-.B L
-.B -F
-.BI file > <
-.B -D \& [
-.BI dest-name >] <
-\e
-.br
-\0\0\0
-.B -DF \& [
-.BI dos-file >] <
-.B -MF \& [
-.BI mac-file >] <
-.B -UF \& [
-.BI unix-file >] <
-\e
-.br
-\0\0\0
-.B -WF \& [
-.BI win-file >] <
-.B -P \& [
-.BI prefix-text >] <
-.B -A \& [
-.BI affixed-text >] <
-\e
-.br
-\0\0\0
-.B -X ] [
-.B -- ] [
-.I "descriptive text ...\&" ] [
-.LP
-where the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option serves
-.EM two
-purposes: it both indicates to the
-.CW pdfhref
-macro that the specified reference destination
-is defined in an external PDF file,
-and it also specifies the normal path name,
-which is to be used to locate this file,
-when a user selects the reference.
-.LP
-In addition to the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option, which
-.EM must
-be specified when referring to a destination in an external PDF file,
-the
-.CWB -DF \& \& \~\c
-.CWBI dos\(hyfile > < ,
-.CWB -MF \& \& \~\c
-.CWBI mac\(hyfile > < ,
-.CWB -UF \& \& \~\c
-.CWBI unix\(hyfile > <
-and
-.CWB -WF \& \& \~\c
-.CWBI win\(hyfile > <
-options may be used to specify the location of the file
-containing the reference destination,
-in a variety of operating system dependent formats.
-These options assign their arguments to the
-.CW /DosFile ,
-.CW /MacFile ,
-.CW /UnixFile
-and
-.CW /WinFile
-keys of the generated
-.CW pdfmark
-respectively; thus when any of these options are specified,
-.EM "in addition to"
-the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option, and the document is read on the appropriate operating systems,
-then the path names specified by
-.CWBI dos\(hyfile > < ,
-.CWBI mac\(hyfile > < ,
-.CWBI unix\(hyfile > <
-and
-.CWBI win\(hyfile > <
-will be searched,
-.EM instead
-of the path name specified by
-.CWBI file > < ,
-for each of the
-.CW MS\(hyDOS \*(rg,
-.CW Apple \*(rg
-.CW Macintosh \*(rg,
-.CW UNIX \(tm
-and
-.CW MS\(hyWindows \*(rg
-operating systems, respectively; see the
-.pdfmark-manual ,
-for further details.
-.LP
-Other than the use of these additional options,
-which specify that the reference destination is in an external PDF file,
-the behaviour of the
-.CW pdfhref
-.CWB L \& \& \(rq \(lq
-operator, with the
-.CWB -F \& \& \~\c
-.CWBI file > <
-option, remains identical to its behaviour
-.EM without
-this option,
-.XR link-intern ), (
-with respect to the interpretation of other options,
-the handling of the
-.CWI descriptive \& \& \~\c
-.CWI text
-arguments, and the formatting of the displayed reference.
-.LP
-Once again, since the appearance of the reference is determined by
-factors specified in the document reference map,
-and also by the formatting rules in effect when the reference is placed,
-the presentation of an example of the placing of
-a reference to an external destination will be deferred,
-until the formatting mechanism has been explained,
-.XR set-format ). (
-.NH 3
-.XN -N add-weblink -- Linking to Internet Resources
-.LP
-In addition to supporting the creation of cross references
-to named destinations in PDF documents, the
-.CW pdfhref
-macro also has the capability to create active links to Internet resources,
-or indeed to
-.EM any
-resource which may be specified by a Uniform Resource Identifier,
-(which is usually abbreviated to the acronym \(lqURI\(rq,
-and sometimes also referred to as a Uniform Resource Locator,
-or \(lqURL\(rq).
-.LP
-Since the mechanism for creating a link to a URI differs somewhat
-from that for creating PDF references, the
-.CW pdfhref
-macro is invoked with the
-.CWB W \& \& \(rq \(lq
-(for \(lqweb\(hylink\(rq) operator, rather than the
-.CWB L \& \& \(rq \(lq
-operator; nevertheless, the invocation syntax is similar, having the form
-.QP
-.fam C
-.B .pdfhref
-.B W
-.B -D \& [
-.BI URI >] <
-.B -P \& [
-.BI prefix-text >] <
-.B -A \& [
-.BI affixed-text >] <
-\e
-.br
-\0\0\0
-.B -- ] [
-.I "descriptive text ...\&"
-.LP
-where the optional
-.CWB -D
-.CWBI URI > <
-modifier specifies the address for the target Internet resource,
-in any appropriate
-.EM "Uniform Resource Identifier"
-format, while the
-.CWI descriptive
-.CWI text
-argument specifies the text which is to appear in the \(lqhot\(hyspot\(rq
-region, and the
-.CWB -P
-.CWBI prefix\(hytext > <
-and
-.CWB -A
-.CWBI affixed\(hytext > <
-options have the same effect as in the case of local document links,
-.XR link-intern ). (
-.LP
-Notice that it is not mandatory to include the
-.CWB -D
-.CWBI URI > <
-in the link specification; if it
-.EM is
-specified, then it is not necessary for the URI to appear,
-in the running text of the document \(em the
-.CWI descriptive
-.CWI text
-argument exactly defines the text
-which will appear within the \(lqhot\(hyspot\(rq region,
-and this need not include the URI.
-However, if the
-.CWB -D \& \& \~\c
-.CWBI URI > <
-specification is omitted, then the
-.CWI descriptive
-.CWI text
-argument
-.EM must
-be an
-.EM exact
-representation of the URI, which
-.EM will ,
-therefore, appear as the entire content of the \(lqhot\(hyspot\(rq.
-For example, we could introduce a reference to
-.pdfhref W -D \*[GROFF-WEBSITE] -A , the groff web site
-in which the actual URI is concealed, by using mark up such as:\(en
-.DS I
-.CW
-For example, we could introduce a reference to
-\&.pdfhref W -D \*[GROFF-WEBSITE] -A , the groff web site
-in which the actual URI is concealed,
-.DE
-Alternatively,
-to refer the reader to the groff web site,
-making it obvious that the appropriate URI is
-.pdfhref W -A , \*[GROFF-WEBSITE]
-the requisite mark up might be:\(en
-.DS I
-.CW
-to refer the reader to the groff web site,
-making it obvious that the appropriate URI is
-\&.pdfhref W -A , \*[GROFF-WEBSITE]
-the requisite mark up might be:\e(en
-.DE
-.NH 3
-.XN -N set-format -- Establishing a Format for References
-.LP
-There are two principal aspects to be addressed,
-when defining the format to be used when displaying references.
-Firstly, it is desirable to provide a visual cue,
-to indicate that the text describing the reference is imbued
-with special properties \(em it is dynamically linked to the reference
-destination \(em and secondly, the textual content should
-describe where the link leads, and ideally,
-it should also describe the content of the reference destination.
-.LP
-The visual cue,
-that a text region defines a dynamically linked reference,
-is most commonly provided by printing the text within the active
-region in a distinctive colour.
-This technique will be employed automatically by the
-.CW pdfhref
-macro \(em
-.XR set-colour
-\(em unless the user specifically chooses to adopt, and implement,
-some alternative strategy.
-.NH 4
-.XN -N set-colour -- Using Colour to Demarcate Link Regions
-.LP
-Typically, when a PDF document contains
-.EM active
-references to other locations, either within the same document,
-or even in other documents, or on the World Wide Web,
-it is usually desirable to make the regions
-where these active links are placed stand out from the surrounding text.
-.NH 4
-.XN -N user-format -- Specifying Reference Text Explicitly
-.NH 4
-.XN -N auto-format -- Using Automatically Formatted Reference Text
-.NH 4
-.XN -N custom-format -- Customising Automatically Formatted Reference Text
-.LP
-It is incumbent on the user,
-if employing automatic formatting of the displayed reference,
-.XR set-format ), (
-to ensure that an appropriate reference definition
-is created for the reference destination,
-and is included in the reference map for the document
-in which the reference will appear;
-thus, it may be easiest to
-.EM always
-use manual formatting for external references.
-.NH 3
-.XN Problematic Links
-.LP
-Irrespective of whether a
-.CW pdfhref
-reference is placed using the
-.CWB L \& \& \(rq \(lq
-operator, or the
-.CWB W \& \& \(rq \(lq
-operator, there may be occasions when the resulting link
-does function as expected.
-A number of scenarios, which are known to be troublesome,
-are described below.
-.NH 4
-.XN -N page-trap -- Links with a Page Transition in the Active Region
-.LP
-When a link is placed near the bottom of a page,
-it is possible that its active region, or \(lqhot\(hyspot\(rq,
-may extend on to the next page.
-In this situation, a page trap macro is required
-to intercept the page transition, and to restart the mapping of
-the \(lqhot\(hyspot\(rq boundary on the new page.
-.LP
-The
-.CW pdfmark
-macro package includes a suitable page trap macro, to satisfy this requirement.
-However, to avoid pre\(hyempting any other requirement the user may have for
-a page transition trap, this is
-.EM not
-installed as an active page trap,
-unless explicitly requested by the user.
-.LP
-To enable proper handling of page transitions,
-which occur within the active regions of reference links,
-the user should:\(en
-.QS
-.nr ITEM 0 1
-.IP \n+[ITEM].
-Define a page transition macro, to provide whatever features may be required,
-when a page transition occurs \(em e.g.\& printing footnotes,
-adding page footers and headers, etc.
-This macro should end by setting the output position at the correct
-vertical page offset, where the printing of running text is to restart,
-following the page transition.
-.IP \n+[ITEM].
-Plant a trap to invoke this macro, at the appropriate vertical position
-marking the end of normal running text on each page.
-.KS
-.IP \n+[ITEM].
-Initialise the
-.CW pdfhref
-hook into this page transition trap, by invoking
-.RS
-.IP
-.fam C
-.B "pdfhref I -PT"
-.BI macro-name > <
-.LP
-where
-.CWBI macro-name > <
-is the name of the user supplied page trap macro,
-to ensure that
-.CW pdfhref
-will correctly restart mapping of active link regions,
-at the start of each new page.
-.KE
-.RE
-.QE
-.LP
-It may be observed that this initialisation of the
-.CW pdfhref
-page transition hook is, typically, required only once
-.EM before
-document formatting begins.
-Users of document formatting macro packages may reasonably expect that
-this initialisation should be performed by the macro package itself.
-Thus, writers of such macro packages which include
-.CW pdfmark
-bindings, should provide appropriate initialisation,
-so relieving the end user of this responsibility.
-The following example, abstracted from the sample
-.CW ms
-binding package,
-.CW spdf.tmac ,
-illustrates how this may be accomplished:\(en
-.DS I
-.CW
-\&.\e" groff "ms" provides the "pg@bottom" macro, which has already
-\&.\e" been installed as a page transition trap. To ensure proper
-\&.\e" mapping of "pdfhref" links which overflow the bottom of any
-\&.\e" page, we need to install the "pdfhref" page transition hook,
-\&.\e" as an addendum to this macro.
-\&.
-\&.pdfhref I -PT pg@bottom
-.DE
-.NH 2
-.XN -N add-note -- Annotating a PDF Document using Pop-Up Notes
-.NH 2
-.XN -N pdfsync -- Synchronising Output and \F[C]pdfmark\F[] Contexts
-.LP
-It has been noted previously, that the
-.CW pdfview
-macro,
-.XR docview ), (
-the
-.CW pdfinfo
-macro,
-.XR docinfo ), (
-and the
-.CW pdfhref
-macro, when used to create a document outline,
-.XR add-outline ), (
-do not immediately write their
-.CW pdfmark
-output to the PostScript\*(rg data stream;
-instead, they cache their output, in a
-.CW groff
-diversion, in the case of the
-.CW pdfview
-and
-.CW pdfinfo
-macros, or in an ordered collection of strings and numeric registers,
-in the case of the document outline,
-until a more appropriate time for copying it out.
-In the case of
-.CW pdfview
-and
-.CW pdfinfo
-\(lqmeta\(hydata\(rq,
-this \(lqmore appropriate time\(rq is explicitly chosen by the user;
-in the case of document outline data,
-.EM some
-cached data may be implicitly written out as the document outline is compiled,
-but there will
-.EM always
-be some remaining data, which must be explicitly flushed out, before the
-.CW groff
-formatting process is allowed to complete.
-.LP
-To allow the user to choose when cached
-.CW pdfmark
-data is to be flushed to the output stream, the
-.CW pdfmark
-macro package provides the
-.CW pdfsync
-macro, (to synchronise the cache and output states).
-In its simplest form, it is invoked without arguments, i.e.
-.QP
-.fam C
-.B .pdfsync
-.LP
-This form of invocation ensures that
-.EM both
-the \(lqmeta\(hydata cache\(rq, containing
-.CW pdfview
-and
-.CW pdfinfo
-data,
-.EM and
-the \(lqoutline cache\(rq,
-containing any previously uncommitted document outline data,
-are flushed; ideally, this should be included in a
-.CW groff
-\(lqend macro\(rq, to ensure that
-.EM both
-caches are flushed, before
-.CW groff
-terminates.
-.LP
-Occasionally,
-it may be desirable to flush either the \(lqmeta\(hydata cache\(rq,
-without affecting the \(lqoutline cache\(rq, or vice\(hyversa,
-at a user specified time, prior to reaching the end of the document.
-This may be accomplished, by invoking the
-.CW pdfsync
-macro with an argument, i.e.
-.QP
-.fam C
-.B ".pdfsync M"
-.LP
-to flush only the \(lqmeta\(hydata cache\(rq, or
-.QP
-.fam C
-.B ".pdfsync O"
-.LP
-to flush only the \(lqoutline cache\(rq.
-.LP
-The \(lqmeta\(hydata cache\(rq can normally be safely flushed
-in this manner, at any time
-.EM after
-output of the first page has started;
-(it may cause formatting problems,
-most notably the appearance of unwanted white space, if flushed earlier,
-or indeed, if flushed immediately after a page transition,
-but before the output of the content on the new page has commenced).
-Caution is required, however, when explicitly flushing the
-\(lqoutline cache\(rq, since if the outline is to be
-subsequently extended, then the first outline entry after flushing
-.EM must
-be specified at level 1.
-Nevertheless, such explict flushing may occasionally be necessary;
-for example, the
-.CW TC
-macro in the
-.CW spdf.tmac
-package,
-.XR using-spdf ), (
-invokes
-.CW ".pdfsync\ O" \(rq \(lq
-to ensure that the outline for the \(lqbody\(rq section of the document
-is terminated,
-.EM before
-it commences the formatting of the table of contents section.
-.bp
-.NH 1
-.XN -N pdf-layout -- PDF Document Layout
-.LP
-The
-.CW pdfmark
-macros described in the preceding section,
-.XR pdf-features ), (
-provide no inherent document formatting capability of their own.
-However,
-they may be used in conjunction with any other
-.CW groff
-macro package of the user's choice,
-to add such capability.
-.LP
-In preparing this document, the standard
-.CW ms
-macro package, supplied as a component of the GNU Troff distribution,
-has been employed.
-To facilitate the use of the
-.CW pdfmark
-macros with the
-.CW ms
-macros,
-a binding macro package,
-.CW spdf.tmac ,
-has been created.
-The use of this binding macro package is described in the following section,
-.XR using-spdf ); (
-it may also serve as an example to users of other standard
-.CW groff
-macro packages,
-as to how the
-.CW pdfmark
-macros may be employed with their chosen primary macro package.
-.NH 2
-.XN -N using-spdf -- Using \F[C]pdfmark\F[] Macros with the \F[C]ms\F[] Macro Package
-.LP
-The use of the binding macro package,
-.CW spdf.tmac ,
-allows for the use of the
-.CW pdfmark
-macros in conjunction with the
-.CW ms
-macros,
-simply by issuing a
-.CW groff
-command of the form
-.QP
-.fam C
-groff -Tps
-.B -mspdf
-.I "-options ...\&" ] [
-file(s) ...
-.LP
-When using the
-.CW spdf.tmac
-package, the
-.CW groff
-input files may be marked up using any of the standard
-.CW ms
-macros to specify document formatting,
-while PDF features may be added,
-using any of the
-.CW pdfmark
-macros described previously,
-.XR pdf-features ). (
-Additionally,
-.CW spdf.tmac
-defines a number of convenient extensions to the
-.CW ms
-macro set, to better accomodate the use of PDF features within the
-.CW ms
-formatting framework,
-and to address a number of
-.CW ms
-document layout issues,
-which require special handling when producing PDF documents.
-These additional macros,
-and the issues they are intended to address,
-are described below.
-.NH 3
-.XN \F[C]ms\F[] Section Headings in PDF Documents
-.LP
-Traditionally,
-.CW ms
-provides the
-.CW NH
-and
-.CW SH
-macros, to specify section headings.
-However,
-there is no standard mechanism for generating a
-table of contents entry based on the text of the section heading;
-neither is there any recognised standard method for establishing a
-cross reference link to the section.
-.LP
-To address this
-.CW ms
-limitation,
-.CW spdf.tmac
-defines the
-.CW XN
-macro,
-.XR xn-macro ), (
-to be used in conjunction with the
-.CW NH
-macro.
-.NH 4
-.XN -N xn-macro -- The \F[C]XN\F[] Macro
-.NH 1
-.XN The PDF Publishing Process
-.NH 2
-.XN -N do-xref -- Resolving Cross References
-.NH 3
-.XN -N create-map -- Creating a Document Reference Map
-.NH 3
-.XN -N import-map -- Deploying a Document Reference Map
-.TC
diff --git a/contrib/groff/contrib/pdfmark/pdfmark.tmac b/contrib/groff/contrib/pdfmark/pdfmark.tmac
deleted file mode 100644
index 385185c42af5..000000000000
--- a/contrib/groff/contrib/pdfmark/pdfmark.tmac
+++ /dev/null
@@ -1,1562 +0,0 @@
-.\" -*- nroff -*-
-.ig
-
-pdfmark.tmac
-
-Copyright (C) 2004
- Free Software Foundation, Inc.
- Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-Author's Note
-=============
-
-While I have written this macro package from scratch, much of my
-inspiration has come from discussion on the groff mailing list
-(mailto:groff@gnu.org). I am particularly indebted to:
-
- Kees Zeelenberg, for an earlier macro package he posted,
- a study of which helped me to get started.
-
- Carlos J. G. Duarte and Werner Lemberg, whose discussion
- on computation of the bounding boxes for link "hot-spots"
- forms the basis of such computations in this package.
-..
-.if !\n(.g .ab These pdfmark macros require groff.
-.\"
-.\" Check if we have already been loaded -- do not reload
-.if d pdfmark .nx
-.\"
-.\" ======================================================================
-.\" Module PDFMARK: Insert Arbitrary PDFMARK Code in the PostScript Stream
-.\" ======================================================================
-.\"
-.\" PDFMARK output may be disabled, by zeroing the PDFOPMODE register,
-.\" ( which mimics a more generic OPMODE, if it is defined ).
-.\"
-.if rOPMODE .aln PDFOPMODE OPMODE
-.\"
-.\" but if OPMODE wasn't defined,
-.\" then make the default PDFMARK mode ENABLED.
-.\"
-.if !rPDFOPMODE .nr PDFOPMODE 1
-.\"
-.\" The "pdfmark" macro is responsible for emitting the appropriate
-.\" PostScript code.
-.\"
-.de pdfmark
-.\" ----------------------------------------------------------------
-.\" Usage:
-.\" .pdfmark text of pdfmark instruction
-.\" Macro supplies the required opening "[" and closing "pdfmark"
-.\" operator; DO NOT include them in the instruction text!
-.\" ----------------------------------------------------------------
-.\"
-.if \\n[PDFOPMODE] \X'ps:exec [\\$* pdfmark'\c
-..
-.\"
-.\" Some supporting macros defer actual pdfmark output until an
-.\" appropriate time for it to be written; the "pdfsync" macro
-.\" provides a mechanism for flushing such deferred output;
-.\" it should be called from an end macro, and at any other time
-.\" when it may be deemed necessary to flush pdfmark context.
-.\"
-.de pdfsync
-.\" ----------------------------------------------------------------
-.\" Usage:
-.\" .pdfsync buffer ...
-.\" Arguments indicate which "buffer(s)" to flush:
-.\" O -> bookmark (outline) cache
-.\" M -> document metadata diversion
-.\" If no argument, flush ALL buffers
-.\" ----------------------------------------------------------------
-.\"
-.ie \\n(.$ \{\
-. while \\n(.$ \{\
-. if '\\$1'O' .pdf:bm.sync 1
-. if '\\$1'M' \{\
-. if dpdf:metadata .pdf:metadata
-. rm pdf:metadata
-. \}
-. shift
-. \}
-. \}
-.el .pdfsync O M
-..
-.\"
-.\" some helper functions ...
-.\"
-.\" "pdf:warn" and "pdf:error" write diagnostic messages to stderr
-.\"
-.de pdf:warn
-.\" ----------------------------------------------------------
-.\" Usage:
-.\" .pdf:warn text of message
-.\" ----------------------------------------------------------
-.\"
-.tm \\n(.F:\\n(.c: macro warning: \\$*
-..
-.de pdf:error
-.\" ----------------------------------------------------------
-.\" Usage:
-.\" .pdf:error text of message
-.\" ----------------------------------------------------------
-.\"
-.tm \\n(.F:\\n(.c: macro error: \\$*
-..
-.\" "pdf:pop", assisted by "pdf*pop", allows us to retrieve register,
-.\" or string values, from a string masquerading as a data queue,
-.\" or as a stack.
-.\"
-.de pdf:pop
-.\" ----------------------------------------------------------------
-.\" Usage:
-.\" .pdf:pop <type> <to-name> <from-name>
-.\" $1 = nr for numeric register, ds for string
-.\" $2 = name of register or string to be assigned
-.\" $3 = name of string, from which data is to be retrieved
-.\" ----------------------------------------------------------------
-.\"
-.pdf*pop \\$* \\*[\\$3]
-..
-.de pdf*pop
-.ds pdf:stack \\$3
-.\\$1 \\$2 \\$4
-.shift 4
-.ie \\n(.$ .ds \\*[pdf:stack] \\$*
-.el .rm \\*[pdf:stack]
-.rm pdf:stack
-..
-.\"
-.\"
-.\" ===========================================================
-.\" Module PDFINFO: Insert MetaData Entries into a PDF Document
-.\" ===========================================================
-.\"
-.\" N.B.
-.\" Output from the macros in this module is deferred, until
-.\" subsequent invocation of .pdfsync, or .pdfexit
-.\"
-.\" ."pdfinfo" provides a general purpose form of metadata entry ...
-.\" it allows arbitrary text to be associated with any specified
-.\" metadata field name.
-.\"
-.de pdfinfo
-.\" -------------------------------------------------------------------
-.\" Usage:
-.\" .pdfinfo /FieldName field content ...
-.\" Examples:
-.\" .pdfinfo /Title A PDF Document
-.\" .pdfinfo /Author Keith Marshall
-.\" -------------------------------------------------------------------
-.\"
-.ds pdf:meta.field \\$1
-.shift
-.da pdf:metadata
-\!.pdfmark \\*[pdf:meta.field] (\\$*) /DOCINFO
-.di
-.rm pdf:meta.field
-..
-.\"
-.\" Macro "pdfview" defines a special form of metadata entry ...
-.\" it uses the /DOCVIEW pdfmark, to specify the initial (default) view,
-.\" when the document is opened.
-.\"
-.de pdfview
-.\" -------------------------------------------------------------------
-.\" Usage:
-.\" .pdfview view parameters ...
-.\" Examples:
-.\" .pdfview /PageMode /UseOutlines
-.\" .pdfview /Page 2 /View [/FitH \n(.p u]
-.\" -------------------------------------------------------------------
-.\"
-.da pdf:metadata
-\!.pdfmark \\$* /DOCVIEW
-.di
-..
-.\"
-.\"
-.\" =====================================================================
-.\" Module PDFNOTE: Insert "Sticky Note" Style Comments in a PDF Document
-.\" =====================================================================
-.\"
-.\" "PDFNOTE.WIDTH" and "PDFNOTE.HEIGHT" set the preferred size for
-.\" display of the "sticky note" pane, when opened. Acrobat Reader
-.\" seems not to honour these -- perhaps GhostScript doesn't encode
-.\" them correctly! Anyway, let's set some suitable default values,
-.\" in case the user has a set up which does work as advertised.
-.\"
-.nr PDFNOTE.WIDTH 3.5i
-.nr PDFNOTE.HEIGHT 2.0i
-.\"
-.\" "pdf:bbox" defines the expression used to set the size and location
-.\" of the bounding rectangle for display of notes and link "hot-spots".
-.\" This is defined, such that a note is placed at troff's current text
-.\" position on the current page, with its displayed image size defined
-.\" by the "PDFNOTE.WIDTH" and "PDFNOTE.HEIGHT" registers, while the
-.\" bounds for a link "hot-spot" are matched to the text region which
-.\" defines the "hot-spot".
-.\"
-.ds pdf:bbox \\n[pdf:llx] u \\n[pdf:lly] u \\n[pdf:urx] u \\n[pdf:ury] u
-.\"
-.\" Getting line breaks into the text of a PDFNOTE is tricky -- we need
-.\" to get a "\n" into the PostScript stream, but three levels of "\" are
-.\" swallowed, when we invoke "pdfnote". The following definition of "PDFLB",
-.\" (for LineBreak), is rather ugly, but does allow us to use
-.\"
-.\" .pdfnote Some text.\*[PDFLB]Some more text, on a new line.
-.\"
-.ds PDFLB \\\\\\\\\\\\\\\\n
-.\"
-.de pdfnote
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" .pdfnote [-T "Text for Title"] Text of note ...
-.\" ----------------------------------------------------------------------
-.\"
-.if \\n[PDFOPMODE] \{\
-.\"
-.\" First, compute the bounding rectangle,
-.\" for this PDFNOTE instance
-.\"
-. mk pdf:ury
-. nr pdf:llx \\n(.k+\\n(.o+\\n[.in]
-. nr pdf:lly \\n[pdf:ury]-\\n[PDFNOTE.HEIGHT]
-. nr pdf:urx \\n[pdf:llx]+\\n[PDFNOTE.WIDTH]
-. ds pdf:note.instance /Rect [\\*[pdf:bbox]]
-.\"
-.\" Parse any specified (recognisable) PDFNOTE options
-.\"
-. while dpdf:note\\$1 \{\
-. pdf:note\\$1 \\$@
-. shift \\n[pdf:note.argc]
-. \}
-.\"
-.\" Emit the note, and clean up
-.\"
-. pdfmark \\*[pdf:note.instance] /Contents (\\$*) /ANN
-. rm pdf:note.instance
-. rr pdf:note.argc
-. \}
-..
-.de pdf:note-T
-.nr pdf:note.argc 2
-.as pdf:note.instance " /Title (\\$2)
-..
-.\"
-.\"
-.\" =====================================================================
-.\" Module PDFBOOKMARK: Add an Outline Reference in the PDF Bookmark Pane
-.\" =====================================================================
-.\"
-.\" "PDFBOOKMARK.VIEW" controls how the document will be displayed,
-.\" when the user selects a bookmark. This default setting will fit
-.\" the page width to the viewing window, with the bookmarked entry
-.\" located at the top of the viewable area.
-.\"
-.ds PDFBOOKMARK.VIEW /FitH \\n[PDFPAGE.Y] u
-.\"
-.\" "PDFOUTLINE.FOLDLEVEL" controls how the document outline will be
-.\" displayed. It is a number, defining the maximum heading level
-.\" which will be visible, without outline expansion by the user, in
-.\" the initial view of the document outline. Assuming that no sane
-.\" document will ever extend to 10,000 levels of nested headings,
-.\" this initial default value causes outlines to be fully expanded.
-.\"
-.nr PDFOUTLINE.FOLDLEVEL 10000
-.\"
-.\" The actual job of creating an outline reference
-.\" is performed by the "pdfbookmark" macro.
-.\"
-.de pdfbookmark
-.\" ------------------------------------------------------------------
-.\" Usage:
-.\" .pdfbookmark [-T tag] level "Text of Outline Entry"
-.\"
-.\" $1 = nesting level for bookmark (1 is top level)
-.\" $2 = text for bookmark, (in PDF viewer bookmarks list)
-.\" $3 = suffix for PDF internal bookmark name (optional)
-.\" ------------------------------------------------------------------
-.\"
-.if \\n[PDFOPMODE] \{\
-.\"
-.\" Make the bookmark name "untagged" by default,
-.\" then parse any specified options, to set a "tag", if required
-.\"
-. ds pdf:href-T
-. while dpdf:href.opt\\$1 \{\
-. pdf:href.opt\\$1 \\$@
-. shift \\n[pdf:href.argc]
-. \}
-. rr pdf:href.argc
-.\"
-.\" If we found "--" to mark the end of the options, discard it
-.\"
-. if '\\$1'--' .shift
-.\"
-.\" Synchronise the bookmark cache
-.\" to the requested bookmark nesting level
-.\"
-. pdf:bm.sync \\$1
-. shift
-.\"
-.\" Increment the bookmark serialisation index
-.\" in order to generate a uniquely serialised bookmark name,
-.\" ( which we return in the string "PDFBOOKMARK.NAME" ),
-.\" and insert this bookmark into the cache
-.\"
-. pdf:href.sety
-. nr pdf:bm.nr +1
-. ds PDFBOOKMARK.NAME pdf:bm\\n[pdf:bm.nr]\\*[pdf:href-T]
-. ds pdf:bm\\n[pdf:bm.nr] /Dest /\\*[PDFBOOKMARK.NAME]
-. pdfmark \\*[pdf:bm\\n[pdf:bm.nr]] /View [\\*[PDFBOOKMARK.VIEW]] /DEST
-. as pdf:bm\\n[pdf:bm.nr] " /Title (\\$*)
-. pdf:href.options.clear
-. rr PDFPAGE.Y
-. \}
-..
-.\"
-.\" Macro "pdf:bm.sync" is called for each bookmark created,
-.\" to establish a cache entry at the appropriate nesting level.
-.\" It will flush ALL previous cache content, when called to
-.\" add a new bookmark at level 1, or if simply called at
-.\" level 1, without adding any bookmark.
-.\"
-.de pdf:bm.sync
-.\" ------------------------------------------------------------------
-.\" Usage:
-.\" .pdf:bm.sync level
-.\" $1 = nesting level of current bookmark, or 1 to flush cache
-.\" ------------------------------------------------------------------
-.\"
-.\" First validate the bookmark nesting level
-.\" adjusting it if required
-.\"
-.if \\$1>\\n[pdf:bm.nl] .nr pdf:bm.nl +1
-.ie \\$1>\\n[pdf:bm.nl] \{\
-. pdf:warn adjusted level \\$1 bookmark; should be <= \\n[pdf:bm.nl]
-. \}
-.el .nr pdf:bm.nl \\$1
-.if \\n[pdf:bm.nl]<1 \{\
-. pdf:warn bad arg (\\$1) in \\$0 \\$1; \\$0 1 forced
-. nr pdf:bm.nl 1
-. \}
-.\"
-.\" If reverting from a higher to a lower nesting level,
-.\" cyclicly adjust cache counts for each pending higher level
-.\"
-.if \\n[pdf:bm.lc]>=\\n[pdf:bm.nl] \{\
-. nr pdf:bm.lc +1
-. if !rpdf:bm.c\\n[pdf:bm.lc].c .nr pdf:bm.c\\n[pdf:bm.lc].c 0
-. while \\n[pdf:bm.lc]>\\n[pdf:bm.nl] \{\
-. as pdf:bm.c\\n[pdf:bm.lc] " \\n[pdf:bm.c\\n[pdf:bm.lc].c]
-. rr pdf:bm.c\\n[pdf:bm.lc].c
-. nr pdf:bm.lc -1
-. \}
-. \}
-.\"
-.\" Update the cache level,
-.\" flushing when we are at level 1
-.\"
-.nr pdf:bm.lc \\n[pdf:bm.nl]
-.ie \\n[pdf:bm.nl]=1 \{\
-. while \\n[pdf:bm.ic]<\\n[pdf:bm.nr] .pdf:bm.emit 0
-. rr pdf:bm.rc
-. \}
-.el .nr pdf:bm.c\\n[pdf:bm.nl].c +1
-..
-.\" Macro "pdf:bm.emit" is called, when the cache is at level 1.
-.\" This flushes ALL pending bookmarks from the cache, i.e. the
-.\" preceding level 1 bookmark, and any nested dependents,
-.\" which it may have.
-.\"
-.de pdf:bm.emit
-.\" ------------------------------------------------------------------
-.\" Usage:
-.\" .pdf:bm.emit flag
-.\" $1 = reference counting flag, used to control recursion
-.\" ------------------------------------------------------------------
-.\"
-.\" First check for nested dependents,
-.\" and append the "dependent count" to the bookmark, as required.
-.\"
-.nr pdf:bm.ic +1
-.nr pdf:bm.lc +1
-.pdf:pop nr pdf:bm.rc pdf:bm.c\\n[pdf:bm.lc]
-.if \\n[pdf:bm.rc] \{\
-. ds pdf:bm.fold
-. if \\n[pdf:bm.lc]>\\n[PDFOUTLINE.FOLDLEVEL] .ds pdf:bm.fold -
-. as pdf:bm\\n[pdf:bm.ic] " /Count \\*[pdf:bm.fold]\\n[pdf:bm.rc]
-. rm pdf:bm.fold
-. \}
-.pdfmark \\*[pdf:bm\\n[pdf:bm.ic]] /OUT
-.rm pdf:bm\\n[pdf:bm.ic]
-.\"
-.\" For ALL dependents, if any,
-.\" recursively flush out any higher level dependents,
-.\" which they themselves may have
-.\"
-.while \\n[pdf:bm.rc] \{\
-. nr pdf:bm.rc -1
-. pdf:bm.emit \\n[pdf:bm.rc]
-. \}
-.\"
-.\" Finally,
-.\" unwind the recursive call stack, until we return to the top level.
-.\"
-.nr pdf:bm.rc \\$1
-.nr pdf:bm.lc -1
-..
-.nr pdf:bm.nr 0
-.nr pdf:bm.nl 1
-.nr pdf:bm.lc 0
-.nr pdf:bm.ic 0
-.\"
-.\"
-.\" =============================================================
-.\" Module PDFHREF: Create Hypertext References in a PDF Document
-.\" =============================================================
-.\"
-.\" "PDFHREF.VIEW" controls how the document will be displayed,
-.\" when the user follows a link to a named reference.
-.\"
-.ds PDFHREF.VIEW /FitH \\n[PDFPAGE.Y] u
-.\"
-.\" This default setting will fit the page width to the viewing
-.\" window, with the bookmarked entry located close to the top
-.\" of the viewable area. "PDFHREF.VIEW.LEADING" controls the
-.\" actual distance below the top of the viewing window, where
-.\" the reference will be positioned; 5 points is a reasonable
-.\" default offset.
-.\"
-.nr PDFHREF.VIEW.LEADING 5.0p
-.\"
-.\" Yuk!!!
-.\" PDF view co-ordinates are mapped from the bottom left corner,
-.\" of the page, whereas page printing co-ordinates are mapped
-.\" conventionally, from top left.
-.\"
-.\" Macro "pdf:href.sety" transforms the vertical position of the
-.\" last printed baseline, from the printing co-ordinate domain to
-.\" the PDF view domain.
-.\"
-.de pdf:href.sety
-.\" ----------------------------------------------------------------
-.\" Usage:
-.\" .pdf:href.sety
-.\" ----------------------------------------------------------------
-.\"
-.\" This computation yields the vertical view co-ordinate
-.\" in groff's basic units; don't forget to append grops' "u"
-.\" conversion operator, when writing the pdfmark!
-.\"
-.nr PDFPAGE.Y \\n(.p-\\n(nl+\\n[PDFHREF.VIEW.LEADING]
-..
-.\" When we create a link "hot-spot" ...
-.\" "PDFHREF.LEADING" sets the distance above the top of the glyph
-.\" bounding boxes, in each line of link text, over which the link
-.\" hot-spot will extend, while "PDFHREF.HEIGHT" sets the hot-spot
-.\" height, PER LINE of text occupied by the reference.
-.\"
-.\" Since most fonts specify some leading space within the bounding
-.\" boxes of their glyphs, a better appearance may be achieved when
-.\" NEGATIVE leading is specified for link hot-spots; indeed, when
-.\" the default 10pt Times font is used, -1.0 point seems to be a
-.\" reasonable default value for "PDFHREF.LEADING" -- it may be
-.\" changed, if desired.
-.\"
-.\" "PDFHREF.HEIGHT" is initially set as one vertical spacing unit;
-.\" note that it is defined as a string, so it will adapt to changes
-.\" in the vertical spacing. Changing it is NOT RECOMMENDED.
-.\"
-.nr PDFHREF.LEADING -1.0p
-.ds PDFHREF.HEIGHT 1.0v
-.\"
-.\" PDF readers generally place a rectangular border around link
-.\" "hot-spots". Within text, this looks rather ugly, so we set
-.\" "PDFHREF.BORDER" to suppress it -- the three zeroes represent
-.\" the border parameters in the "/Border [0 0 0]" PDFMARK string,
-.\" and may be changed to any valid form, as defined in Adobe's
-.\" PDFMARK Reference Manual.
-.\"
-.ds PDFHREF.BORDER 0 0 0
-.\"
-.\" "PDFHREF.COLOUR" (note British spelling) defines the colour to
-.\" be used for display of link "hot-spots". This will apply both
-.\" to borders, if used, and, by default to text; however, actual
-.\" text colour is set by "PDFHREF.TEXT.COLOUR", which may be reset
-.\" independently of "PDFHREF.COLOUR", to achieve contrasting text
-.\" and border colours.
-.\"
-.\" "PDFHREF.COLOUR" must be set to a sequence of three values,
-.\" each in the range 0.0 .. 1.0, representing the red, green, and
-.\" blue components of the colour specification in the RGB colour
-.\" domain, which is shared by "groff" and the PDF readers.
-.\"
-.ds PDFHREF.COLOUR 0.35 0.00 0.60
-.defcolor pdf:href.colour rgb \*[PDFHREF.COLOUR]
-.\"
-.\" "PDFHREF.TEXT.COLOUR", on the other hand, is simply defined
-.\" using any "groff" colour name -- this default maps it to the
-.\" same colour value as "PDFHREF.COLOUR".
-.\"
-.ds PDFHREF.TEXT.COLOUR pdf:href.colour
-.\"
-.\" Accommodate users who prefer the American spelling, COLOR, to
-.\" the British spelling, COLOUR.
-.\"
-.als PDFHREF.COLOR PDFHREF.COLOUR
-.als PDFHREF.TEXT.COLOR PDFHREF.TEXT.COLOUR
-.\"
-.\" All PDF "Hypertext" reference capabilities are accessed
-.\" through the "pdfhref" macro
-.\"
-.de pdfhref
-.\" -----------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref <subcommand [options ...] [parameters ...]> ...
-.\" -----------------------------------------------------------------
-.\"
-.if \\n[PDFOPMODE] \{\
-.\"
-.\" Loop over all subcommands specified in the argument list
-.\"
-. while \\n(.$ \{\
-. \"
-. \" Initially, assume each subcommand will complete successfully
-. \"
-. nr pdf:href.ok 1
-. \"
-. \" Initialise -E and -X flags in the OFF state
-. \"
-. nr pdf:href-E 0
-. nr pdf:href-X 0
-. \"
-. \" Handle the case where subcommand is specified as "-class",
-. \" setting up appropriate macro aliases for subcommand handlers.
-. \"
-. if dpdf*href\\$1 .als pdf*href pdf*href\\$1
-. if dpdf*href\\$1.link .als pdf*href.link pdf*href\\$1.link
-. if dpdf*href\\$1.file .als pdf*href.file pdf*href\\$1.file
-. \"
-. \" Repeat macro alias setup
-. \" for the case where the subcommand is specified as "class",
-. \" (without a leading hyphen)
-. \"
-. if dpdf*href-\\$1 .als pdf*href pdf*href-\\$1
-. if dpdf*href-\\$1.link .als pdf*href.link pdf*href-\\$1.link
-. if dpdf*href-\\$1.file .als pdf*href.file pdf*href-\\$1.file
-. \"
-. \" Process one subcommand ...
-. \"
-. ie dpdf*href \{\
-. \"
-. \" Subcommand "class" is recognised ...
-. \" discard the "class" code from the argument list,
-. \" set the initial argument count to swallow all arguments,
-. \" and invoke the selected subcommand handler.
-. \"
-. shift
-. nr pdf:argc \\n(.$
-. pdf*href \\$@
-. \"
-. \" When done,
-. \" discard all arguments actually consumed by the handler,
-. \" before proceeding to the next subcommand (if any).
-. \"
-. shift \\n[pdf:argc]
-. \}
-. el \{\
-. \"
-. \" Subcommand "class" is not recognised ...
-. \" issue a warning, and discard the entire argument list,
-. \" so aborting this "pdfhref" invocation
-. \"
-. pdf:warn \\$0: undefined reference class '\\$1' ignored
-. shift \\n(.$
-. \}
-. \"
-. \" Clean up temporary reference data,
-. \" to ensure it doesn't propagate to any future reference
-. \"
-. rm pdf*href pdf:href.link pdf:href.files
-. rr pdf:href-E pdf:href-X
-. pdf:href.options.clear
-. \}
-. rr pdf:href.ok
-. \}
-..
-.\"
-.\" Macros "pdf:href.flag" and "pdf:href.option"
-.\" provide a generic mechanism for switching on flag type options,
-.\" and for decoding options with arguments, respectively
-.\"
-.de pdf:href.flag
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.nr pdf:href\\$1 1
-.nr pdf:href.argc 1
-..
-.de pdf:href.option
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.ds pdf:href\\$1 \\$2
-.nr pdf:href.argc 2
-..
-.\"
-.\" Valid PDFHREF options are simply declared
-.\" by aliasing option handlers to "pdf:href.option",
-.\" or to "pdf:href.flag", as appropriate
-.\"
-.als pdf:href.opt-A pdf:href.option \" affixed text
-.als pdf:href.opt-D pdf:href.option \" destination name
-.als pdf:href.opt-E pdf:href.flag \" echo link descriptor
-.als pdf:href.opt-F pdf:href.option \" remote file specifier
-.als pdf:href.opt-N pdf:href.option \" reference name
-.als pdf:href.opt-P pdf:href.option \" prefixed text
-.als pdf:href.opt-T pdf:href.option \" bookmark "tag"
-.als pdf:href.opt-X pdf:href.flag \" cross reference
-.\"
-.\" For references to another document file
-.\" we also need to support OS dependent file name specifiers
-.\"
-.als pdf:href.opt-DF pdf:href.option \" /DOSFile specifier
-.als pdf:href.opt-MF pdf:href.option \" /MacFile specifier
-.als pdf:href.opt-UF pdf:href.option \" /UnixFile specifier
-.als pdf:href.opt-WF pdf:href.option \" /WinFile specifier
-.\"
-.\" Macro "pdf:href.options.clear" ensures that ALL option
-.\" argument strings are deleted, after "pdfhref" has completed
-.\" all processing which depends on them
-.\"
-.de pdf:href.options.clear
-.\" -----------------------------------------------------------------
-.\" Usage:
-.\" .pdf:href.options.clear [option ...]
-.\" -----------------------------------------------------------------
-.\"
-.\" When an option list is specified ...
-.\"
-.ie \\n(.$ \{\
-. \"
-. \" then loop through the list,
-. \" deleting each specified option argument string in turn
-. \"
-. while \\n(.$ \{\
-. if dpdf:href-\\$1 .rm pdf:href-\\$1
-. shift
-. \}
-. \}
-.\"
-.\" ... but when no list is specified,
-.\" then recurse, to clear all known option argument strings
-.\"
-.el .pdf:href.options.clear A D F N P T DF MF UF WF
-..
-.\"
-.\" "PDFHREF.INFO" establishes the content of the cross reference
-.\" data record, which is exported via the "stderr" stream, when a
-.\" cross reference anchor is created using a "pdfhref" macro request
-.\" of the form
-.\"
-.\" .pdfhref M -N name -X text ...
-.\"
-.\" .ds PDFHREF.INFO \\*[PDFHREF.NAME] reference data ...
-.\"
-.ds PDFHREF.INFO page \\n% \\$*
-.\"
-.\" Macro "pdf*href-M" is the handler invoked by "pdfhref", when
-.\" called with the "M" reference class specifier, to create a
-.\" named cross reference mark, and to emit a cross reference
-.\" data record, as specified by "PDFHREF.INFO".
-.\"
-.de pdf*href-M
-.\" -----------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref M [-X] [-N name | -D name] [-E] descriptive text ...
-.\" -----------------------------------------------------------------
-.\"
-.\" Initially, declare the -D and -N string options as empty,
-.\" so we avoid warning messages when we try to use them, and find
-.\" that they are undefined.
-.\"
-.ds pdf:href-D
-.ds pdf:href-N
-.\"
-.\" Parse, interpret, and strip any specified options from the
-.\" argument list. (Note that only options with a declared handler
-.\" will be processed; there is no provision for detecting invalid
-.\" options -- anything which is not recognised is assumed to start
-.\" the "descriptive text" component of the argument list).
-.\"
-.while dpdf:href.opt\\$1 \{\
-. pdf:href.opt\\$1 \\$@
-. shift \\n[pdf:href.argc]
-. \}
-.\"
-.\" If we found "--", to mark the end of the options,
-.\" then we should discard it.
-.\"
-.if '\\$1'--' .shift
-.\"
-.\" All PDF reference markers MUST be named. The name may have been
-.\" supplied using the "-N Name" option, (or the "-D Name" option);
-.\" if not, deduce it from the first "word" in the "descriptive text",
-.\" if any, and set the marker -- if we still can't identify the name
-.\" for the destination, then this marker will not be created.
-.\"
-.pdf*href.set \\*[pdf:href-N] \\*[pdf:href-D] \\$1
-.\"
-.\" If we specified a cross reference, with the "-X" option, and the
-.\" reference mark has been sucessfully created, then we now need to
-.\" write the cross reference info to the STDERR stream
-.\"
-.if \\n[pdf:href-X] .pdf*href.export \\*[PDFHREF.INFO]
-.\"
-.\" Irrespective of whether this marker is created, or not,
-.\" the descriptive text will be copied to the groff output stream,
-.\" provided the "-E" option was specified
-.\"
-.if \\n[pdf:href-E] \&\\$*
-..
-.\"
-.de pdf*href.set
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.pdf*href.map.init
-.ie \\n(.$ \{\
-. \"
-. \" a marker name has been supplied ...
-. \" if we are formatting for immediate output,
-. \" emit PDFMARK code to establish the associated view
-. \"
-. ie '\\n(.z'' \{\
-. pdf:href.sety
-. pdfmark /Dest /\\$1 /View [\\*[PDFHREF.VIEW]] /DEST
-. ds PDFHREF.NAME \\$1
-. rr PDFPAGE.Y
-. \}
-. \"
-. \" but, when formatting a diversion ...
-. \" delay output of the PDFMARK code, until the diversion
-. \" is eventually written out
-. \"
-. el \!.\\$0 \\$@
-. \"
-. \" check if we also need to emit cross reference data
-. \" (caller will do this if "pdf:href-X" is set, but it is
-. \" not necessary, when "pdf:href.map" already exists)
-. \"
-. if dpdf:href.map .nr pdf:href-X 0
-. \}
-.el \{\
-. \" marker is unnamed ...
-. \" issue error message; do not emit reference data
-. \"
-. pdf:warn pdfhref destination marker must be named
-. nr pdf:href-X 0
-. \}
-..
-.de pdf*href.export
-.\"
-.\" Called ONLY by "pdf*href-M",
-.\" this macro ensures that the emission of exported reference data
-.\" is synchronised with the placement of the reference mark,
-.\" especially when the mark is defined within a diversion.
-.\"
-.ie '\\n(.z'' .tm gropdf-info:href \\*[PDFHREF.NAME] \\$*
-.el \!.\\$0 \\$@
-..
-.\"
-.\" Macro "pdf*href-D" is invoked when "pdfhref" is called
-.\" with the "D" reference class specifier; it provides a
-.\" standardised mechanism for interpreting reference data
-.\" exported by the "M" reference class, and may be used
-.\" to directly define external reference data, without the
-.\" use of "M" reference class designators in the source
-.\" document.
-.\"
-.de pdf*href-D
-.ds pdf:href-N
-.\"
-.\" Parse, interpret, and strip any specified options from the
-.\" argument list. (Note that only options with a declared handler
-.\" will be processed; there is no provision for detecting invalid
-.\" options -- anything which is not recognised is assumed to start
-.\" the "descriptive text" component of the argument list).
-.\"
-.while dpdf:href.opt\\$1 \{\
-. pdf:href.opt\\$1 \\$@
-. shift \\n[pdf:href.argc]
-. \}
-.\"
-.\" If we found "--", to mark the end of the options,
-.\" then we should discard it.
-.\"
-.if '\\$1'--' .shift
-.\"
-.ie '\\*[pdf:href-N]'' \{\
-. pdf:warn pdfhref defined reference requires a name
-. \}
-.el \{\
-. ds pdf:href(\\*[pdf:href-N]).info \\$*
-. \}
-..
-.\"
-.\" Macro "pdf*href-F" is invoked when "pdfhref" is called
-.\" with the "F" reference class specifier; it allows the user
-.\" to provide an alternative interpreter macro, which will be
-.\" called when a "PDFHREF.INFO" record is retrieved to define
-.\" the text of a cross reference link "hot spot".
-.\"
-.de pdf*href-F
-.\" ----------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref F [macro-name]
-.\" ----------------------------------------------------------------
-.\"
-.\" Set macro specified by "macro-name" as the format interpreter
-.\" for parsing "PDFHREF.INFO" records; if "macro-name" is omitted,
-.\" or is specified as the reserved name "default", then use the
-.\" default format parser, "pdf*href.format", defined below.
-.\"
-.if '\\$1'default' .shift \\n(.$
-.ie \\n(.$ .als pdf*href.format \\$1
-.el .als pdf*href.format pdf*href.default
-.nr pdf:argc 1
-..
-.\" The default reference formatting macro is defined below.
-.\" It parses the "PDFHREF.INFO" record specific to each reference,
-.\" recognising the keywords "file", "page" and "section", when they
-.\" appear in initial key/value pairs, replacing the key/value pair
-.\" with "PDFHREF.FILEREF", "PDFHREF.PAGEREF" or "PDFHREF.SECTREF"
-.\" respectively; any additional data in the "PDFHREF.INFO" record
-.\" is enclosed in typographic double quotes, and the parsed record
-.\" is appended to "PDFHREF.PREFIX", to be returned as the formatted
-.\" reference text.
-.\"
-.\" Default definitions for the reference strings "PDFHREF.PREFIX",
-.\" "PDFHREF.FILEREF", "PDFHREF.PAGEREF" and "PDFHREF.SECTREF" are
-.\" provided, in the English language. Users may substitute any
-.\" desired alternative definitions, for example, when formatting
-.\" documents in other languages. In each case, "\\$1" may be used
-.\" in the substitution, to represent the "value" component of the
-.\" respective key/value pair specified in the "PDFHREF.INFO" record.
-.\"
-.ds PDFHREF.PREFIX see
-.ds PDFHREF.PAGEREF page \\$1,
-.ds PDFHREF.SECTREF section \\$1,
-.ds PDFHREF.FILEREF \\$1
-.\"
-.de pdf*href.format
-.\" -----------------------------------------------------------------
-.\" Usage: (to be called ONLY by "pdfhref")
-.\" .pdf*href.format cross reference data ...
-.\" -----------------------------------------------------------------
-.\"
-.\" This macro is responsible for defining the strings "PDFHREF.TEXT"
-.\" and "PDFHREF.DESC", which are used by the "pdfhref" macro, as the
-.\" basis for generating the text content of a link "hot spot"; (any
-.\" user specified alternate formatter MUST do likewise).
-.\"
-.\" Note that "PDFHREF.TEXT" defines the overall format for the "link
-.\" text", while "PDFHREF.DESC" is the descriptive component thereof.
-.\"
-.\" This default implementation, subject to user customisation of the
-.\" "internationalisation" strings defined above, formats "hot spots"
-.\" of the style
-.\"
-.\" see page N, section S, "descriptive text ..."
-.\"
-.ds PDFHREF.TEXT \\*[PDFHREF.PREFIX]
-.while d\\$0.\\$1 \{\
-. \\$0.\\$1 "\\$2"
-. shift 2
-. \}
-.\"
-.\" Retrieve the descriptive text from the cross reference data,
-.\" ONLY IF no overriding description has been set by the calling
-.\" "pdfhref" macro invocation.
-.\"
-.if \\n(.$ .if !dPDFHREF.DESC .ds PDFHREF.DESC \\$*
-.\"
-.\" Augment "PDFHREF.TEXT" so the descriptive text will be included
-.\" in the text of the formatted reference
-.\"
-.if dPDFHREF.DESC .as PDFHREF.TEXT " \(lq\\\\*[PDFHREF.DESC]\(rq
-.\"
-.\" Finally, suppress any leading spaces,
-.\" which may have been included in the PDFHREF.TEXT definition.
-.\"
-.ds PDFHREF.TEXT \\*[PDFHREF.TEXT]
-..
-.de pdf*href.format.file
-.\" ----------------------------------------------------------------------
-.\" Include a file identifier in a formatted reference.
-.\" This is invoked ONLY by "pdf*href.format", and ONLY IF the
-.\" reference data includes an initial file identifier tuple.
-.\" ----------------------------------------------------------------------
-.\"
-.as PDFHREF.TEXT " \\*[PDFHREF.FILEREF]
-..
-.de pdf*href.format.page
-.\" ----------------------------------------------------------------------
-.\" Include a page number in a formatted reference.
-.\" This is invoked ONLY by "pdf*href.format", and ONLY IF the
-.\" reference data includes an initial page number tuple.
-.\" ----------------------------------------------------------------------
-.\"
-.as PDFHREF.TEXT " \\*[PDFHREF.PAGEREF]
-..
-.de pdf*href.format.section
-.\" ----------------------------------------------------------------------
-.\" Include a section number in a formatted reference.
-.\" This is invoked ONLY by "pdf*href.format", and ONLY IF the
-.\" reference data includes an initial section number tuple.
-.\" ----------------------------------------------------------------------
-.\"
-.as PDFHREF.TEXT " \\*[PDFHREF.SECTREF]
-..
-.\"
-.\" Make "pdf*href.format" the default cross reference formatter
-.\"
-.als pdf*href.default pdf*href.format
-.\"
-.\"
-.\" Macro "pdf*href" provides a generic mechanism for placing link
-.\" "hot-spots" in a PDF document. ALL "pdfhref" class macros which
-.\" create "hot-spots" are aliased to this macro; each must also have
-.\" an appropriately aliased definition for "pdf*href.template".
-.\"
-.de pdf*href
-.\" ------------------------------------------------------------------
-.\" Usage:
-.\" .pdf*href class [options ...] [link text ...]
-.\" ------------------------------------------------------------------
-.\"
-.\" First, we initialise an empty string, which will be affixed to
-.\" the end of the "link text". (This is needed to cancel the effect
-.\" of a "\c" escape, which is placed at the end of the "link text"
-.\" to support the "-A" option -- any text supplied by the user, when
-.\" the "-A" option is specified, will replace this empty string).
-.\"
-.ds pdf:href-A
-.\"
-.\" Now we interpret, and remove any specified options from the
-.\" argument list. (Note that only options with a declared handler
-.\" will be processed; there is no provision for detecting invalid
-.\" options -- anything which is not recognised is assumed to start
-.\" the "link text" component of the argument list).
-.\"
-.while dpdf:href.opt\\$1 \{\
-. pdf:href.opt\\$1 \\$@
-. shift \\n[pdf:href.argc]
-. \}
-.\"
-.\" If we found "--", to mark the end of the options, then we should
-.\" discard it.
-.\"
-.if '\\$1'--' .shift
-.\"
-.\" All PDF link classes REQUIRE a named destination. This may have
-.\" been supplied using the "-D Name" option, but, if not, deduce it
-.\" from the first "word" in the "link text", if any -- if we still
-.\" can't identify the destination, then set "pdf:href.ok" to zero,
-.\" so this link will not be created.
-.\"
-.if !dpdf:href-D .pdf:href.option -D \\$1
-.if '\\*[pdf:href-D]'' \{\
-. pdf:error pdfhref has no destination
-. nr pdf:href.ok 0
-. \}
-.\"
-.\" Some PDF link classes support a "/File (FilePathName)" argument.
-.\"
-.if dpdf*href.file \{\
-. \"
-. \" When this is supported, it may be specified by supplying
-. \" the "-F FileName" option, which is captured in "pdf:href-F".
-. \"
-. if dpdf:href-F \{\
-. \"
-. \" the /File key is present, so set up the link specification
-. \" to establish the reference to the specified file
-. \"
-. als pdf*href.link pdf*href.file
-. ds pdf:href.files /File (\\*[pdf:href-F])
-. \"
-. \" in addition to the /File key,
-. \" there may also be platform dependent alternate file names
-. \"
-. if dpdf:href-DF .as pdf:href.files " /DOSFile (\\*[pdf:href-DF])
-. if dpdf:href-MF .as pdf:href.files " /MacFile (\\*[pdf:href-MF])
-. if dpdf:href-UF .as pdf:href.files " /UnixFile (\\*[pdf:href-UF])
-. if dpdf:href-WF .as pdf:href.files " /WinFile (\\*[pdf:href-WF])
-. \}
-. \" In some cases, the "/File" key is REQUIRED.
-. \" We will know it is missing, if "pdf*href.link" is not defined.
-. \"
-. if !dpdf*href.link \{\
-. \"
-. \" When a REQUIRED "/File" key specification is not supplied,
-. \" then complain, and set "pdf:href.ok" to abort the creation
-. \" of the current reference.
-. \"
-. pdf:error pdfhref: required -F specification omitted
-. nr pdf:href.ok 0
-. \}
-. \" Now, we have no further use for "pdf*href.file".
-. \"
-. rm pdf*href.file
-. \}
-.\"
-.\" Now, initialise a string, defining the PDFMARK code sequence
-.\" to create the reference, using the appropriate type indicators.
-.\"
-.ds pdf:href.link /Subtype /Link \\*[pdf*href.link]
-.\"
-.\" And now, we have no further use for "pdf*href.link".
-.\"
-.rm pdf*href.link
-.\"
-.\" If the user specified any "link prefix" text, (using the "-P text"
-.\" option), then emit it BEFORE processing the "link text" itself.
-.\"
-.if dpdf:href-P \&\\*[pdf:href-P]\c
-.ie \\n[pdf:href.ok] \{\
-. \"
-. \" This link is VALID (so far as we can determine) ...
-. \" Modify the "link text" argument specification, as required,
-. \" to include any pre-formatted cross reference information
-. \"
-. ie \\n(.$ \{\
-. \"
-. \" One or more "link text" argument(s) are present,
-. \" so, set the link description from the argument(s) ...
-. \"
-. ds PDFHREF.DESC \\\\$*
-. ie \\n[pdf:href-X] \{\
-. \"
-. \" ... and, when the "-X" flag is set,
-. \" also include formatted location information,
-. \" derived from the cross reference record.
-. \"
-. pdf*href.format \\*[pdf:href(\\*[pdf:href-D]).info]
-. \}
-. el \{\
-. \" ... but, when the "-X" flag is NOT set,
-. \" use only the argument(s) as the entire content
-. \" of the "link text"
-. \"
-. rn PDFHREF.DESC PDFHREF.TEXT
-. \}
-. \}
-. el \{\
-. \" No "link text" arguments are present,
-. \" so, format the cross reference record to define
-. \" the content of the "link text".
-. \"
-. pdf*href.format \\*[pdf:href(\\*[pdf:href-D]).info]
-. \}
-. \" Apply border and colour specifications to the PDFMARK string
-. \" definition, as required.
-. \"
-. if dPDFHREF.BORDER .as pdf:href.link " /Border [\\*[PDFHREF.BORDER]]
-. if dPDFHREF.COLOUR .as pdf:href.link " /Color [\\*[PDFHREF.COLOUR]]
-. \"
-. \" Emit the "link text", in its appropriate colour, marking the
-. \" limits of its bounding box(es), as the before and after output
-. \" text positions.
-. \"
-. pdf*href.mark.begin "\\*[pdf:href.link]"
-. if dPDFHREF.COLOUR .defcolor pdf:href.colour rgb \\*[PDFHREF.COLOUR]
-. nop \&\m[\\*[PDFHREF.TEXT.COLOUR]]\\*[PDFHREF.TEXT]\m[]\c
-. pdf*href.mark.end
-. \"
-. \" Clean up the temporary registers and strings, used to
-. \" compute the "hot-spot" bounds, and format the reference,
-. \"
-. rm PDFHREF.DESC PDFHREF.TEXT
-. \}
-.\"
-.\" But when we identify an INVALID link ...
-.\" We simply emit the "link text", with no colour change, no border,
-.\" and no associated "hot-spot".
-.\"
-.el \&\\$*\c
-.\"
-.\" And then, if the user specified any affixed text, (using the
-.\" "-A text" option), we tack it on at the end.
-.\"
-.nop \&\\*[pdf:href-A]
-..
-.de pdf*href.map.init
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.\"
-.if dpdf:href.map-1 \{\
-. \"
-. \" We have a reference map, but we haven't started to parse it yet.
-. \" This must be the first map reference in pass 2, so we need to
-. \" "kick-start" the parsing process, by loading the first indexed
-. \" sub-map into the global map.
-. \"
-. rn pdf:href.map-1 pdf:href.map
-. als pdf:href.map.internal pdf:href.map
-. nr pdf:href.map.index 1 1
-. \}
-.als pdf*href.map.init pdf*href.mark.idle
-..
-.\"
-.\" "pdf*href-Z" is used to add link co-ordinate entries to the
-.\" "pdf:href.map". Primarily, it is used by the "pdfroff" formatter,
-.\" to pass link co-ordinate data from one "groff" formatting pass to
-.\" the next, and is not generally useful to the end user.
-.\"
-.de pdf*href-Z
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref Z page-index x-displacement y-displacement
-.\" Where:
-.\" page-index is the reference mark's page number
-.\" x-displacement is its offset from the left edge of the page
-.\" y-displacement is its offset from the top edge of the page
-.\" ( both displacement values are expressed in basic groff units, )
-.\" ( and measured perpendicular to their respective page edges. )
-.\" ----------------------------------------------------------------------
-.\"
-.ie \\n(.$=3 .ds pdf:href.map-\\n+[pdf*href-Z.index] \\$*
-.el .pdf:error pdfhref Z operator expects exactly three arguments
-..
-.\" Initialise the auto-incrementing "pdf*href-Z.index" register,
-.\" to ensure that sub-map numbering starts at 1.
-.\"
-.nr pdf*href-Z.index 0 1
-.\"
-.de pdf*href.map.read
-.\" ----------------------------------------------------------------------
-.\" Usage: (internal use only):
-.\" .pdf*href.map.read co-ordinate name list ...
-.\" ----------------------------------------------------------------------
-.\"
-.\" Reads values from "pdf:href.map" to each named register, in turn
-.\" Reading to "null" discards the corresponding value in "pdf:href.map"
-.\"
-.while \\n(.$ \{\
-. \"
-. \" Loop over all registers named in the argument list,
-. \" assigning values from "pdf:href.map" to each in turn.
-. \"
-. pdf:pop nr pdf:\\$1 pdf:href.map.internal
-. if !dpdf:href.map.internal \{\
-. \"
-. \" We ran out of map references in the current sub-map,
-. \" so move on to the next indexed sub-map, if any.
-. \"
-. if dpdf:href.map-\\n+[pdf:href.map.index] \{\
-. rn pdf:href.map-\\n[pdf:href.map.index] pdf:href.map
-. als pdf:href.map.internal pdf:href.map
-. \}
-. \}
-. \"
-. \" Proceed to the next named co-ordinate, (if any), specified
-. \" in the argument list.
-. \"
-. shift
-. \}
-.\"
-.\" Discard any assignments to a register named "null"
-.\"
-.rr pdf:null
-..
-.de pdf*href.mark.begin
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.pdf*href.map.init
-.ie dpdf:href.map \{\
-. \"
-. \" Once we have established a document reference map,
-. \" then this, and all subsequent calls to "pdf*href.mark.begin",
-. \" may be redirected to the reference mark resolver, and the
-. \" "pdf*href.mark.end" macro has nothing further to do.
-. \"
-. pdf*href.mark.resolve \\$@
-. rn pdf*href.mark.resolve pdf*href.mark.begin
-. als pdf*href.mark.end pdf*href.mark.idle
-. \}
-.el \{\
-. \" Since we don't yet have a document reference map, the
-. \" reference mark resolver will not work, in this pass of the
-. \" formatter; this, and all subsequent calls to "pdf*href.mark.begin",
-. \" may be redirected to "pdf*href.mark.end", which is responsible
-. \" for emitting the reference mark data to be incorporated into
-. \" the reference map in a subsequent formatting pass.
-. \"
-. pdf*href.mark.end
-. als pdf*href.mark.begin pdf*href.mark.end
-. \}
-..
-.de pdf*href.mark.resolve
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.ie '\\n(.z'' \{\
-. ds pdf:href.link \\$1
-. nr pdf:urx \\n(.o+\\n(.l
-. pdf*href.map.read spg llx ury epg urx.end lly.end
-. ie \\n[pdf:spg]=\\n[pdf:epg] \{\
-. \"
-. \" This link is entirely contained on a single page ...
-. \" emit the text, which defines the content of the link region,
-. \" then make it active.
-. \"
-. pdf*href.mark.emit 1 \\n[pdf:urx.end]
-. if \\n[pdf:lly]<\\n[pdf:lly.end] \{\
-. \"
-. \" This link spans multiple output lines; we must save its
-. \" original end co-ordinates, then define a new intermediate
-. \" end point, to create a PDFMARK "hot-spot" extending from
-. \" the start of the link to the end if its first line.
-. \"
-. nr pdf:ury +1v
-. nr pdf:llx \\n(.o+\\n[.in]
-. nr pdf:lly \\n[pdf:lly.end]-\\*[PDFHREF.HEIGHT]
-. if \\n[pdf:ury]<\\n[pdf:lly] \{\
-. nr pdf:lly +\\*[PDFHREF.HEIGHT]-1v
-. pdf*href.mark.emit 2
-. nr pdf:ury \\n[pdf:lly.end]-\\*[PDFHREF.HEIGHT]
-. \}
-. pdf*href.mark.emit 0 \\n[pdf:urx.end]
-. \}
-. pdf*href.mark.flush
-. \}
-. el \{\
-. \" This link is split across a page break, so ...
-. \" We must mark the "hot-spot" region on the current page,
-. \" BEFORE we emit the link text, as we will have moved off
-. \" this page, by the time the text has been output.
-. \"
-. \" First step: define the region from the start of the link,
-. \" to the end of its first line.
-. \"
-. pdf*href.mark.emit 1 \\n[pdf:urx]
-. \"
-. \" All additional regions MUST align with the left margin.
-. \"
-. nr pdf:llx \\n(.o+\\n[.in]
-. \"
-. \" If the current page can accomodate more than the current line,
-. \" then it will include a second active region for this link; this
-. \" will extend from just below the current line to the end of page
-. \" trap, if any, or the bottom of the page otherwise, and occupy
-. \" the full width of the page, between the margins.
-. \"
-. nr pdf:ury +1v
-. pdf*href.mark.emit 3
-. \"
-. \" We now need a page transition trap, to map the active link
-. \" region(s), which overflow on to the following page(s); (the
-. \" handler for this trap MUST have been previously installed).
-. \"
-. ie dpdf*href.mark.hook \{\
-. \"
-. \" The page transition trap handler has been installed,
-. \" so we may activate both it, and also the appropriate
-. \" termination handler, to deactivate it when done.
-. \"
-. als pdf*href.mark.hook pdf*href.mark.trap
-. \"
-. \" Now we set up "pdf:epg" to count the number of page breaks
-. \" which this link will span, and emit the link text, leaving
-. \" the page trap macro to map active regions on intervening
-. \" pages, which are included in the link.
-. \"
-. nr pdf:epg -\\n[pdf:spg] 1
-. \}
-. el \{\
-. \" There was no handler initialised for the page trap,
-. \" so we are unable to map the active regions for this link;
-. \" we may discard the remaining map data for this link,
-. \" and issue a diagnostic.
-. \"
-. pdf:error pdfhref: link dissociated at page break (trap not initialised)
-. if dPDFHREF.BROKEN.COLOR \{\
-. \"
-. \" The user may opt to have such broken links highlighted.
-. \" We use "PDFHREF.BROKEN.COLOUR" to specify this requirement,
-. \" but the user may prefer the American spelling, so we will
-. \" handle both as equivalent.
-. \"
-. als PDFHREF.BROKEN.COLOUR PDFHREF.BROKEN.COLOR
-. \}
-. if dPDFHREF.BROKEN.COLOUR \{\
-. if dPDFHREF.COLOUR .als PDFHREF.COLOUR PDFHREF.BROKEN.COLOUR
-. \}
-. \}
-. \}
-. \}
-.el \!.\\$0 \\$@
-..
-.\"
-.\" Macro "pdf*href.mark.emit" is called only by "pdf*href". It is
-.\" responsible for emitting the PDFMARK code, to establish the
-.\" "hot-spot" region associated with a document or resource link.
-.\"
-.de pdf*href.mark.emit
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" .pdf*href.mark.emit <action> [<end-urx>]
-.\" <action> == 0 --> normal operation -- link height = 1 line
-.\" <action> == 1 --> start of link -- add leading above text
-.\" <action> == 2 --> overtall link -- set intermediate baseline
-.\" <action> == 3 --> split link -- break at bottom of page
-.\" ----------------------------------------------------------------------
-.\"
-.if \\$1=1 \{\
-. \"
-. \" Initialising a new link region ...
-. \" Some different versions of "groff" disagree about the vertical
-. \" displacement of "opminy", as emitted by "\O1|\h'-\w"|"u'\O2\c",
-. \" relative to the current text baseline. Therefore, recompute
-. \" the link displacement, independently of "opminy".
-. \"
-. mk pdf:ury.base
-. while \\n[pdf:ury.base]<\\n[pdf:ury] .nr pdf:ury.base +1v
-. nr pdf:ury.base -1m+\\n[PDFHREF.LEADING]
-. \"
-. \" adjust the end-point vertical displacement by the same offset,
-. \" and then relocate the link starting point to its new displacement,
-. \" as established by this base line relative computation.
-. \"
-. nr pdf:lly.end +\\n[pdf:ury.base]-\\n[pdf:ury]+\\*[PDFHREF.HEIGHT]
-. rnn pdf:ury.base pdf:ury
-. \}
-.if \\$1<2 \{\
-. \"
-. \" Link segment fits on a single line ...
-. \" Set its height and end-point horizontal displacement accordingly.
-. \"
-. nr pdf:lly \\n[pdf:ury]+\\*[PDFHREF.HEIGHT]
-. if \\n[pdf:lly]>=\\n[pdf:lly.end] .nr pdf:urx \\$2
-. \}
-.ie \\$1=3 \{\
-. \"
-. \" Link segment extends beyond the next page break ...
-. \" Recompute truncated height, to just fit portion on current page,
-. \" recursing to emit it, and leaving page trap mechanism to place
-. \" continuation region(s) on following page(s).
-. \"
-. nr pdf:lly (\\n[.t]u-\\n[.V]u)/1v
-. if \\n[pdf:lly]>0 \{\
-. nr pdf:lly \\n[pdf:ury]+\\n[pdf:lly]v-1v+\\*[PDFHREF.HEIGHT]
-. pdf*href.mark.emit 2
-. \}
-. \}
-.el \{\
-. \" Link region size and placement has been fully specified ...
-. \" Emit it.
-. \"
-. pdfmark \\*[pdf:href.link] /Rect [\\*[pdf:bbox]] /ANN
-. \}
-..
-.\"
-.\" When "pdf*href" emits a link for which the "hot-spot" spans a
-.\" page break, then we need to provide a "hook" in to the page break
-.\" trap, so we can map the "hot-spot" regions which are to be placed
-.\" on either side of the page break.
-.\"
-.\" Macro "pdf*href.mark.idle" is a dummy macro, which provide this
-.\" "hook" for normal page breaks, where there is no link "hot-spot"
-.\" crossing the break.
-.\"
-.de pdf*href.mark.idle
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" Called only as an internal hook, by a page trap macro.
-.\" Expects no arguments, and does nothing.
-.\" ----------------------------------------------------------------------
-..
-.\"
-.\" Macro "pdf*href.mark.trap" is the active "hook", which is substituted
-.\" for "pdf*href,mark.idle" at those page breaks which are crossed by
-.\" a link "hot-spot".
-.\"
-.de pdf*href.mark.trap
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" Called only as an internal hook, by a page trap macro.
-.\" Expects no arguments. Maps residual link "hot-spot" regions,
-.\" which spill beyond any page break. Not to be invoked directly
-.\" by the user, nor by any user supplied macro.
-.\" ----------------------------------------------------------------------
-.\"
-.mk pdf:ury
-.nr pdf:ury +1v-1m-\\n[PDFHREF.LEADING]
-.ie \\n-[pdf:epg] \{\
-. \"
-. \" The link "hot-spot" extends across more than one page break,
-. \" so, for each page which is completely contained within the
-. \" extent of the link, simply mark the entire text area on the
-. \" page as a "hot-spot".
-. \"
-. pdf*href.mark.emit 3
-. \}
-.el \{\
-. \" The link "hot-spot" ends on the page which immediately follows
-. \" the current page transition, so we may now finalise this link.
-. \"
-. nr pdf:lly \\n[pdf:ury]+\\*[PDFHREF.HEIGHT]
-. if \\n[pdf:lly.end]>\\n[pdf:lly] \{\
-. \"
-. \" The "hot-spot" extends beyond the first line of text,
-. \" on its final page; compute and emit "hot-spot" region to cover
-. \" the full with of the text area, including all but the last
-. \" line of the link text.
-. \"
-. while \\n[pdf:lly.end]>\\n[pdf:lly] .nr pdf:lly +1v
-. nr pdf:lly -1v
-. pdf*href.mark.emit 2
-. \"
-. \" Now, adjust the vertical "hot-spot" mapping reference,
-. \" to identify the correct position for the the last line of
-. \" text, over which the "hot-spot" extends.
-. \"
-. nr pdf:ury \\n[pdf:lly.end]-\\*[PDFHREF.HEIGHT]
-. \}
-. \"
-. \" We now have exactly one final line of text, over which we must
-. \" emit a "hot-spot" region; map it, terminate page trap processing
-. \" for this "hot-spot", and clean up the "hot-spot" mapping context.
-. \"
-. pdf*href.mark.emit 0 \\n[pdf:urx.end]
-. als pdf*href.mark.hook pdf*href.mark.idle
-. pdf*href.mark.flush
-. \}
-..
-.de pdf*href.mark.flush
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-.rr pdf:spg pdf:epg
-.rr pdf:llx pdf:lly pdf:urx pdf:ury
-.if dPDFHREF.COLOR .als PDFHREF.COLOUR PDFHREF.COLOR
-.rr pdf:urx.end pdf:lly.end
-..
-.de pdf*href.mark.end
-.\" ----------------------------------------------------------------------
-.\" ----------------------------------------------------------------------
-\O1|\h'-\w"|"u'\O2\c
-..
-.\" Macro "pdf*href-I" is used for one time initialisation of special
-.\" "pdfhref" features; (currently, only the above page trap hook is
-.\" supported, but it is implemented with one level of indirection, to
-.\" accommodate possible future expansion).
-.
-.de pdf*href-I
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref I -<option> <optarg> [-<option> <optarg>] ...
-.\" ----------------------------------------------------------------------
-.\"
-.\" Loop over all arguments, in pairs ...
-.
-.while \\n(.$ \{\
-. \"
-. \" handing them off to their respective initialisers,
-. \" when suitable initialisers exist, or complaining otherwise.
-. \"
-. ie dpdf*href\\$1.init .pdf*href\\$1.init \\$2
-. el .pdf*error pdfhref:init: unknown feature '\\$1'
-. shift 2
-. \}
-..
-.\" Before we can use the page break "hook", we need to initialise it
-.\" as an addendum to a regular page break trap. To ensure that we don't
-.\" compromise the user's page trap setup, we leave the onus for this
-.\" initialisation with the user, but we provide the "pdf*href-PT.init"
-.\" macro, (invoked by ".pdfhref I -PT <macro-name>"), to implement a
-.\" suitable initialisation action.
-.
-.de pdf*href-PT.init
-.\" ----------------------------------------------------------------------
-.\" Usage:
-.\" .pdfhref I -PT <macro-name>
-.\" <macro-name> == name of user's page break trap macro
-.\" ----------------------------------------------------------------------
-.\"
-.\" Initially, map the page break hook to its default, do nothing helper.
-.
-.als pdf*href.mark.hook pdf*href.mark.idle
-.ie !\\n(.$ \{\
-. \"
-. \" Don't have enough arguments to specify a page trap macro name,
-. \" so simply plant "pdf*href.mark.hook" as a top of page trap.
-. \"
-. wh 0 pdf*href.mark.hook
-. \}
-.el \{\
-. \" Page trap macro name is specified in "\\$1" ...
-. \"
-. ie d\\$1 \{\
-. \"
-. \" When this page trap macro already exists, then we simply
-. \" append a call to "pdf*href.mark.hook" to it.
-. \"
-. am \\$1 pdf*href.mark.idle
-. pdf*href.mark.hook
-. pdf*href.mark.idle
-. \}
-. el \{\
-. \" However, when the specified page trap macro does not yet
-. \" exist, then we create it, and plant it as a top of page
-. \" trap.
-. \"
-. de \\$1 pdf*href.mark.idle
-. pdf*href.mark.hook
-. pdf*href.mark.idle
-. wh 0 \\$1
-. \}
-. \}
-..
-.
-.\" "pdf*href-L" is the generic handler for creating references to
-.\" named destinations in PDF documents. It supports both local
-.\" references, to locations within the same document, through its
-.\" "pdf*href-L.link" attribute, and also references to locations
-.\" in any other PDF document, through "pdf*href-L.file".
-.\"
-.als pdf*href-L pdf*href
-.ds pdf*href-L.link /Dest /\\\\*[pdf:href-D]
-.ds pdf*href-L.file /Action /GoToR \\\\*[pdf:href.files] \\*[pdf*href-L.link]
-.\"
-.\" "pdf*href-O" is the "official" handler for creating PDF
-.\" document outlines. It is simply an alias to "pdfbookmark",
-.\" which may also be invoked directly, if preferred. Neither
-.\" a "pdf*href-O.link" nor a "pdf*href-O.file" attribute is
-.\" required.
-.\"
-.als pdf*href-O pdfbookmark
-.\"
-.\" "pdf*href-W" is the generic handler for creating references to
-.\" web resources, (or any resource specified by a uniform resource
-.\" identifier). Such resource links are fully specified by the
-.\" "pdf*href-W.link" attribute.
-.\"
-.als pdf*href-W pdf*href
-.ds pdf*href-W.link /Action << /Subtype /URI /URI (\\\\*[pdf:href-D]) >>
-.\"
-.\" pdfmark.tmac: end of file / vim: ft=groff
diff --git a/contrib/groff/contrib/pdfmark/pdfroff.man b/contrib/groff/contrib/pdfmark/pdfroff.man
deleted file mode 100644
index 7d83cdd92849..000000000000
--- a/contrib/groff/contrib/pdfmark/pdfroff.man
+++ /dev/null
@@ -1,552 +0,0 @@
-.TH PDFROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.\" --------------------------------------------------------------------
-.\" Legal Matters
-.\" --------------------------------------------------------------------
-.ig
-pdfroff.1
-
-File position: <groff-source>/contrib/pdfmark/pdfroff.man
-
-Last update:
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2005 Free Software Foundation, Inc.
-written by Keith Marshall <keith.d.marshall@ntlworld.com>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Front-Cover Texts, no Back-Cover Texts, and the following Invariant
-Sections:--
-
- a) This "Legal Matters" section, extending from the start of
- the document, to the end of the enclosing ".ig" section.
-
- b) The entire section bearing the heading "AUTHOR", extending
- from the ".SH AUTHOR" tag, to the end of the document.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.\" --------------------------------------------------------------------
-.
-.SH NAME
-pdfroff \- create PDF documents using
-.I groff
-.
-.hw pdfmark
-.de Q
-\&\\$3\*(lq\\$1\*(rq\\$2
-..
-.de nohy
-.hy 0
-\&\\$*
-.hy
-..
-.\" --------------------------------------------------------------------
-.
-.SH SYNOPSIS
-.de cmd
-. if r@i .in
-. nr @i \\n(.i
-. in +\w'\f[B]\\$1\0'u
-. ti \\n(@iu
-. B \\$1\0\c
-..
-.de opt
-. tr -\-
-. RB [ -\\$1\c
-. IR \&\\$2 ]
-. tr --
-..
-.de opta
-. ie \\n(.$>1 .opt \\$1 \0\\$2
-. el .opt \\$1
-..
-.de opte
-. tr -\-
-. RB [ -\\$1 =\c
-. IR \&\\$2 ]
-. tr --
-..
-.de optx
-. tr -\-
-. RB [ --no\\$1 \0|\0\c
-. BR -\\$1 =\c
-. IR \&\\$2 ]
-. tr --
-..
-.ad l
-.hy 0
-.ll -5
-.cmd pdfroff
-.opt abcegilpstzCEGNRSUVXZ
-.opta d cs
-.opta f fam
-.opta F dir
-.opta I dir
-.opta L arg
-.opta m name
-.opta M dir
-.opta n num
-.opta o list
-.opta P arg
-.opta r cn
-.opta T dev
-.opta w name
-.opta W name
-.opt -no-toc-relocation
-.opte -stylesheet name
-.optx -pdf-output name
-.optx -reference-dictionary name
-.opt -report-progress
-.B file
-.I ...
-.ll
-.sp
-.cmd pdfroff
-.B -h
-|
-.B --help
-.sp
-.cmd pdfroff
-.B -v
-|
-.B --version
-.RI [ option
-.IR ... ]
-.rr @i
-.in
-.ad
-.hy
-.P
-The command line is parsed in accordance with normal GNU conventions,
-but with one exception \(em when specifying any short form option
-(i.e., a single character option introduced by a single hyphen),
-and if that option expects an argument, then it
-.I must
-be specified independently (i.e., it may
-.I not
-be appended to any group of other single character short form options).
-.P
-Long form option names (i.e., those introduced by a double hyphen)
-may be abbreviated to their minimum length unambigous initial substring.
-.
-.\" --------------------------------------------------------------------
-.
-.SH DESCRIPTION
-.B pdfroff
-is a wrapper program for the GNU text processing system,
-.BR groff .
-It transparently handles the mechanics of multiple pass
-.B groff
-processing, when applied to suitably marked up
-.B groff
-source files,
-such that tables of contents and body text are formatted separately,
-and are subsequently combined in the correct order, for final publication
-as a single PDF document.
-A further optional
-.Q style\0sheet
-capability is provided;
-this allows for the definition of content which is required to preceed the
-table of contents, in the published document.
-.P
-For each invocation of
-.BR pdfroff ,
-the ultimate
-.B groff
-output stream is post\(hyprocessed by the GhostScript interpreter,
-to produce a finished PDF document.
-.P
-.B pdfroff
-makes no assumptions about, and imposes no restrictions on,
-the use of any
-.B groff
-macro packages which the user may choose to employ,
-in order to achieve a desired document format;
-however, it
-.I does
-include specific built in support for the
-.B pdfmark
-macro package, should the user choose to employ it.
-Specifically, if the
-.I pdfhref
-macro, defined in the
-.B pdfmark.tmac
-package, is used to define public reference marks,
-or dynamic links to such reference marks, then
-.B pdfroff
-will perform as many preformatting
-.B groff
-passes as required, up to a maximum limit of
-.IR four ,
-in order to compile a document reference dictionary,
-to resolve references, and to expand the dynamically defined
-content of links.
-.
-.\" --------------------------------------------------------------------
-.
-.SH USAGE
-.B pdfroff
-usage closely mirrors that of
-.B groff
-itself.
-Indeed,
-with the exception of the
-.BR \-h ,
-.BR \-v ,
-and
-.BI \-T \0dev
-short form options, and
-all long form options,
-which are parsed internally by
-.BR pdfroff ,
-all options and file name arguments specified on the command line are
-passed on to
-.BR groff ,
-to control the formatting of the PDF document.
-Consequently,
-.B pdfroff
-accepts all options and arguments, as specified in
-.BR groff (@MAN1EXT@),
-which may also be considered as the definitive reference for all standard
-.BR pdfroff
-options and argument usage.
-.
-.\" --------------------------------------------------------------------
-.
-.SH OPTIONS
-.B pdfroff
-accepts all of the short form options
-(i.e., those introduced by a single hyphen),
-which are available with
-.B groff
-itself.
-In most cases, these are simply passed transparently to
-.BR groff ;
-the following, however, are handled specially by
-.BR pdfroff .
-.TP
-.B \-h
-Same as
-.BR \-\-help ;
-see below.
-.TP
-.B \-i
-Process standard input, after all other specified input files.
-This is passed transparently to
-.BR groff ,
-but, if grouped with other options, it
-.I must
-be the first in the group.
-Hiding it within a group will
-break standard input processing, in the multiple pass
-.B groff
-processing context of
-.BR pdfroff .
-.TP
-.BI \-T \0dev
-Only
-.BI \-T \0ps
-is supported by
-.BR pdfroff .
-Attempting to specify any other device will cause
-.B pdfroff
-to abort.
-.TP
-.B \-v
-Same as
-.BR \-\-version ;
-see below.
-.P
-See
-.BR groff (@MAN1EXT@)
-for a description of all other short form options,
-which are transparently passed through
-.BR pdfroff
-to
-.BR groff .
-.P
-All long form options
-(i.e., those introduced by a double hyphen)
-are interpreted locally by
-.BR pdfroff ;
-they are
-.B not
-passed on to
-.BR groff ,
-unless otherwise stated below.
-.TP
-.B \-\-help
-Causes
-.B pdfroff
-to display a summary of the its usage syntax, and supported options,
-and then exit.
-.TP
-.B \-\-no\-pdf\-output
-May be used with the
-.BI \-\-reference\-dictionary= name
-option (described below) to eliminate the overhead of PDF formatting,
-when running
-.B pdfroff
-to create a reference dictionary, for use in a different document.
-.TP
-.B \-\-no\-reference\-dictionary
-May be used to eliminate the overhead of creating a reference dictionary,
-when it is known that the target PDF document will contain no public
-references, created by the
-.I pdfhref
-macro.
-.TP
-.B \-\-no\-toc\-relocation
-May be used to eliminate the extra
-.B groff
-processing pass,
-which is required to generate a table of contents,
-and relocate it to the start of the PDF document,
-when processing any document which lacks an automatically
-generated table of contents.
-.TP
-.BI \-\-pdf\-output= name
-Specifies the name to be used for the resultant PDF document;
-if unspecified, the PDF output is written to standard output.
-A future version of
-.B pdfroff
-may use this option,
-to encode the document name in a generated reference dictionary.
-.TP
-.BI \-\-reference\-dictionary= name
-Specifies the name to be used for the generated reference dictionary file;
-if unspecified, the reference dictionary is created in a temporary file,
-which is deleted when
-.B pdfroff
-completes processing of the current document.
-This option
-.I must
-be specified, if it is desired to save the reference dictionary,
-for use in references placed in other PDF documents.
-.TP
-.B \-\-report\-progress
-Causes
-.B pdfroff
-to display an informational message on standard error,
-at the start of each
-.B groff
-processing pass.
-.TP
-.BI \-\-stylesheet= name
-Specifies the name of an
-.IR "input file" ,
-to be used as a style sheet for formatting of content,
-which is to be placed
-.I before
-the table of contents,
-in the formatted PDF document.
-.TP
-.B \-\-version
-Causes
-.B pdfroff
-to display a version identification message.
-The entire command line is then passed transparently to
-.BR groff ,
-in a
-.I one
-pass operation
-.IR only ,
-in order to display the associated
-.B groff
-version information, before exiting.
-.
-.\" --------------------------------------------------------------------
-.
-.SH ENVIRONMENT
-The following environment variables may be set, and exported,
-to modify the behaviour of
-.BR pdfroff .
-.TP
-.B GROFF_TMPDIR
-Identifies the directory in which
-.B pdfroff
-should create temporary files.
-If
-.B GROFF_TMPDIR
-is
-.I not
-specified, then the variables
-.BR TMPDIR ,
-.B TMP
-and
-.B TEMP
-are considered in turn, as possible temporary file repositories.
-If none of these are set, then temporary files will be created
-in the current directory.
-.TP
-.B GROFF_GHOSTSCRIPT_INTERPRETER
-Specifies the program to be invoked, when
-.B pdfroff
-converts
-.B groff
-PostScript output to PDF.
-If
-.B GROFF_GHOSTSCRIPT_INTERPRETER
-is not specified, then
-.B pdfroff
-will search the process
-.BR PATH ,
-looking for a program with any of the well known names
-for the GhostScript interpreter;
-if no GhostScript interpreter can be found,
-.B pdfroff
-will abort.
-.TP
-.B GROFF_AWK_INTERPRETER
-Specifies the program to be invoked, when
-.B pdfroff
-is extracting reference dictionary entries from a
-.B groff
-intermediate message stream.
-If
-.B GROFF_AWK_INTERPRETER
-is not specified, then
-.B pdfroff
-will search the process
-.BR PATH ,
-looking for any of the preferred programs, `gawk', `mawk', `nawk'
-and `awk', in this order;
-if none of these are found,
-.B pdfroff
-will issue a warning message, and continue processing;
-however, in this case, no reference dictionary will be created.
-.TP
-.B OSTYPE
-Typically defined automatically by the operating system,
-.B OSTYPE
-is used on Microsoft Win32/MS\(hyDOS platforms
-.IR only ,
-to infer the default
-.B PATH_SEPARATOR
-character,
-which is used when parsing the process
-.B PATH
-to search for external helper programs.
-.TP
-.B PATH_SEPARATOR
-If set,
-.B PATH_SEPARATOR
-overrides the default separator character,
-(':' on POSIX/UNIX systems,
-inferred from
-.B OSTYPE
-on Microsoft Win32/MS\(hyDOS),
-which is used when parsing the process
-.B PATH
-to search for external helper programs.
-.TP
-.B SHOW_PROGRESS
-If this is set to a non-empty value, then
-.B pdfroff
-will always behave as if the
-.B \-\-report\-progress
-option is specified, on the command line.
-.
-.\" --------------------------------------------------------------------
-.
-.SH FILES
-Input and output files for
-.B pdfroff
-may be named according to any convention of the user's choice.
-Typically, input files may be named according to the choice of the
-principal formatting macro package, e.g.,
-.IB file .ms
-might be an input file for formatting using the
-.B ms
-macros
-.RB ( s.tmac );
-normally, the final output file should be named
-.IB file .pdf\c
-\&.
-.P
-Temporary files, created by
-.BR pdfroff ,
-are placed in the directory specified by environment variables (see
-section
-.BR ENVIRONMENT ),
-and named according to the convention
-.BI pdf $$ .*\c
-\&, where
-.I $$
-is the standard shell variable representing the process ID of the
-.B pdfroff
-process itself, and
-.I *
-represents any of a number of extensions used by
-.B pdfroff
-for temporary and intermediate files.
-.
-.\" --------------------------------------------------------------------
-.
-.SH SEE ALSO
-See
-.BR groff (@MAN1EXT@)
-for the definitive reference to document formatting with
-.BR groff .
-Since
-.B pdfroff
-provides a superset of all
-.B groff
-capabilities,
-.BR groff (@MAN1EXT@)
-may also be considered to be the definitive reference to all
-.I standard
-capabilities of
-.BR pdfroff ,
-with this document providing the reference to
-.BR pdfroff 's
-extended features.
-.P
-While
-.B pdfroff
-imposes neither any restriction on, nor any requirement for,
-the use of any specific
-.B groff
-macro package, a number of supplied macro packages,
-and in particular those associated with the package
-.BR pdfmark.tmac ,
-are best suited for use with
-.BR pdfroff
-as the preferred formatter.
-Detailed documentation on the use of these packages may be found,
-in PDF format, in the reference guide
-.BR "\*(lqPortable Document Format Publishing with GNU Troff\*(rq" ,
-included in the installed documentation set as
-.hy 0
-.BR @PDFDOCDIR@/pdfmark.pdf .
-.hy
-.
-.\" --------------------------------------------------------------------
-.
-.SH AUTHOR
-Copyright \(co 2005, Free Software Foundation, Inc.
-.LP
-This man page is distributed under the terms of the
-GNU Free Documentation License (FDL), version 1.1 or later,
-and is part of the
-.I GNU troff
-software package.
-It was originally written by Keith Marshall,
-.nohy <keith.d.marshall@ntlworld.com>,
-who also wrote the implementation of the
-.I pdfroff
-program, to which it relates.
-.LP
-You should have received a copy of the FDL as part of the
-.I GNU troff
-distribution; it is also available on\-line, at the GNU
-.Q copyleft
-site,
-.nohy <http://www.gnu.org/copyleft/fdl.html>.
-.
-.\" --------------------------------------------------------------------
-.\" EOF / vim: ft=groff
diff --git a/contrib/groff/contrib/pdfmark/pdfroff.sh b/contrib/groff/contrib/pdfmark/pdfroff.sh
deleted file mode 100644
index 03bed4e1f3eb..000000000000
--- a/contrib/groff/contrib/pdfmark/pdfroff.sh
+++ /dev/null
@@ -1,572 +0,0 @@
-#! /bin/sh
-# ------------------------------------------------------------------------------
-#
-# Function: Format PDF Output from groff Markup
-#
-# Copyright (C) 2005, Free Software Foundation, Inc.
-# Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ------------------------------------------------------------------------------
-#
-# Set up an identifier for the NULL device.
-# In most cases "/dev/null" will be correct, but some shells on
-# MS-DOS/MS-Windows systems may require us to use "NUL".
-#
- NULLDEV="/dev/null"
- test -c $NULLDEV || NULLDEV="NUL"
-#
-# Set up the command name to use in diagnostic messages.
-# (We can't assume we have 'basename', so use the full path if required.
-# Also use the 'exec 2>...' workaround for a bug in Cygwin's 'ash').
-#
- CMD=`exec 2>$NULLDEV; basename $0` || CMD=$0
-#
-# To ensure that prerequisite helper programs are available, and are
-# executable, a [fairly] portable method of detecting such programs is
-# provided by function `searchpath'.
-#
- searchpath(){
- #
- # Usage: searchpath progname path
- #
- IFS="${PATH_SEPARATOR-":"}" prog=':'
- for dir in $2
- do
- for ext in '' '.exe'
- #
- # try `progname' with all well known extensions
- # (e.g. Win32 may require `progname.exe')
- #
- do
- try="$dir/$1$ext"
- test -f "$try" && test -x "$try" && prog="$try" && break
- done
- test "$prog" = ":" || break
- done
- echo "$prog"
- }
-# @PATH_SEARCH_SETUP@
-#
-# We need both 'grep' and 'sed' programs, to parse script options,
-# and we also need 'cat', to display help and some error messages,
-# so ensure they are all installed, before we continue.
-#
- CAT=`searchpath cat "$PATH"`
- GREP=`searchpath grep "$PATH"`
- SED=`searchpath sed "$PATH"`
-#
-# Another fundamental requirement is the 'groff' program itself;
-# we MUST use a 'groff' program located in 'GROFF_BIN_DIR', if this
-# is specified; if not, we will search 'GROFF_BIN_PATH', only falling
-# back to a 'PATH' search, if neither of these is specified.
-#
- if test -n "$GROFF_BIN_DIR"
- then
- GPATH=GROFF_BIN_DIR
- GROFF=`searchpath groff "$GROFF_BIN_DIR"`
-#
- elif test -n "$GROFF_BIN_PATH"
- then
- GPATH=GROFF_BIN_PATH
- GROFF=`searchpath groff "$GROFF_BIN_PATH"`
-#
- else
- GPATH=PATH
- GROFF=`searchpath groff "$PATH"`
- fi
-#
-# If one or more of these is missing, diagnose and bail out.
-#
- NO='' NOPROG="$CMD: installation problem: cannot find program"
- test "$CAT" = ":" && echo >&2 "$NOPROG 'cat' in PATH" && NO="$NO 'cat'"
- test "$GREP" = ":" && echo >&2 "$NOPROG 'grep' in PATH" && NO="$NO 'grep'"
- test "$GROFF" = ":" && echo >&2 "$NOPROG 'groff' in $GPATH" && NO="$NO 'groff'"
- test "$SED" = ":" && echo >&2 "$NOPROG 'sed' in PATH" && NO="$NO 'sed'"
- if test -n "$NO"
- then
- set $NO
- test $# -gt 1 && NO="s" IS="are" || NO='' IS="is"
- while test $# -gt 0
- do
- test $# -gt 2 && NO="$NO $1,"
- test $# -eq 2 && NO="$NO $1 and" && shift
- test $# -lt 2 && NO="$NO $1"
- shift
- done
- $CAT >&2 <<-ETX
-
- *** FATAL INSTALLATION ERROR ***
-
- The program$NO $IS required by '$CMD',
- but cannot be found; '$CMD' is unable to continue.
-
- ETX
- exit 1
- fi
-#
-# Set up temporary/intermediate file locations.
-#
- WRKFILE=${GROFF_TMPDIR=${TMPDIR-${TMP-${TEMP-"."}}}}/pdf$$.tmp
-#
- REFCOPY=${GROFF_TMPDIR}/pdf$$.cmp
- REFFILE=${GROFF_TMPDIR}/pdf$$.ref
-#
- CS_DATA=""
- TC_DATA=${GROFF_TMPDIR}/pdf$$.tc
- BD_DATA=${GROFF_TMPDIR}/pdf$$.ps
-#
-# Set a trap, to delete temporary files on exit.
-# (FIXME: may want to include other signals, in released version).
-#
- trap "rm -f ${GROFF_TMPDIR}/pdf$$.*" 0
-#
-# Initialise 'groff' format control settings,
-# to discriminate table of contents and document body formatting passes.
-#
- TOC_FORMAT="-rPHASE=1"
- BODY_FORMAT="-rPHASE=2"
-#
- LONGOPTS="
- help reference-dictionary no-reference-dictionary
- stylesheet pdf-output no-pdf-output
- version report-progress no-toc-relocation
- "
-# Parse the command line, to identify 'pdfroff' specific options.
-# Collect all other parameters into new argument and file lists,
-# to be passed on to 'groff', enforcing the '-Tps' option.
-#
- DIFF="" STREAM="" INPUT_FILES=""
- SHOW_VERSION="" GROFF_STYLE="$GROFF -Tps"
- while test $# -gt 0
- do
- case "$1" in
-#
-# Long options must be processed locally ...
-#
- --*)
-#
-# First identify, matching any abbreviation to its full form.
-#
- MATCH="" OPTNAME=`IFS==; set dummy $1; echo $2`
- for OPT in $LONGOPTS
- do
- MATCH="$MATCH"`echo --$OPT | $GREP "^$OPTNAME"`
- done
-#
-# For options in the form --option=value
-# capture any specified value into $OPTARG.
-#
- OPTARG=`echo $1 | $SED -n s?"^${OPTNAME}="??p`
-#
-# Perform case specific processing for matched option ...
-#
- case "$MATCH" in
-
- --help)
- $CAT >&2 <<-ETX
- Usage: $CMD [-option ...] [--long-option ...] [file ...]
-
- Options:
- -h
- --help
- Display this usage summary, and exit.
-
- -v
- --version
- Display a version identification message and exit.
-
- --report-progress
- Enable console messages, indicating the progress of the
- PDF document formatting process.
-
- --pdf-output=name
- Write the PDF output stream to file 'name'; if this option
- is unspecified, standard output is used for PDF output.
-
- --no-pdf-output
- Suppress the generation of PDF output entirely; use this
- with the --reference-dictionary option, if processing a
- document stream to produce only a reference dictionary.
-
- --no-reference-dictionary
- Suppress the generation of a '$CMD' reference dictionary
- for the PDF document. Normally '$CMD' will create a
- reference dictionary, at the start of document processing;
- this option can accelerate processing, if it is known in
- advance, that no reference dictionary is required.
-
- --reference-dictionary=name
- Save the document reference dictionary in file 'name'.
- If 'name' already exists, when processing commences, it
- will be used as the base case, from which the updated
- dictionary will be derived. If this option is not used,
- then the reference dictionary, created during the normal
- execution of '$CMD', will be deleted on completion of
- document processing.
-
- --stylesheet=name
- Use the file 'name' as a 'groff' style sheet, to control
- the appearance of the document's front cover section. If
- this option is not specified, then no special formatting
- is applied, to create a front cover section.
-
- --no-toc-relocation
- Suppress the multiple pass 'groff' processing, which is
- normally required to position the table of contents at the
- start of a PDF document.
-
- ETX
- exit 0
- ;;
-
- --version)
- GROFF_STYLE="$GROFF_STYLE \"$1\""
- SHOW_VERSION="GNU pdfroff (groff) version @VERSION@"
- ;;
-
- --report-progress)
- SHOW_PROGRESS=echo
- ;;
-
- --pdf-output)
- PDF_OUTPUT="$OPTARG"
- ;;
-
- --no-pdf-output)
- PDF_OUTPUT="$NULLDEV"
- ;;
-
- --reference-dictionary)
- REFFILE="$OPTARG"
- ;;
-
- --no-reference-dictionary)
- AWK=":" DIFF=":" REFFILE="$NULLDEV" REFCOPY="$NULLDEV"
- ;;
-
- --stylesheet)
- STYLESHEET="$OPTARG" CS_DATA=${GROFF_TMPDIR}/pdf$$.cs
- ;;
-
- --no-toc-relocation)
- TC_DATA="" TOC_FORMAT="" BODY_FORMAT=""
- ;;
-#
-# any other non-null match must have matched more than one defined case,
-# so report the ambiguity, and bail out.
-#
- --*)
- echo >&2 "$CMD: ambiguous abbreviation in option '$1'"
- exit 1
- ;;
-#
-# while no match at all simply represents an undefined case.
-#
- *)
- echo >&2 "$CMD: unknown option '$1'"
- exit 1
- ;;
- esac
- ;;
-#
-# A solitary hyphen, as an argument, means "stream STDIN through groff",
-# while the "-i" option means "append STDIN stream to specified input files",
-# so set up a mechanism to achieve this, for ALL 'groff' passes.
-#
- - | -i*)
- STREAM="$CAT ${GROFF_TMPDIR}/pdf$$.in |"
- test "$1" = "-" && INPUT_FILES="$INPUT_FILES $1" \
- || GROFF_STYLE="$GROFF_STYLE $1"
- ;;
-#
-# Those standard options which expect an argument, but are specified with
-# an intervening space, between flag and argument, must be reparsed, so we
-# can trap illegal use of '-T dev', or missing input files.
-#
- -[dfFILmMnoPrTwW])
- OPTNAME="$1"
- shift; set reparse "$OPTNAME$@"
- ;;
-#
-# Among standard options, '-Tdev' is treated as a special case.
-# '-Tps' is automatically enforced, so if specified, is silently ignored.
-#
- -Tps) ;;
-#
-# No other '-Tdev' option is permitted.
-#
- -T*) echo >&2 "$CMD: option '$1' is incompatible with PDF output"
- exit 1
- ;;
-#
-# '-h' and '-v' options redirect to their equivalent long forms ...
-#
- -h*) set redirect --help
- ;;
-#
- -v*) shift; set redirect --version "$@"
- ;;
-#
-# All other standard options are simply passed through to 'groff',
-# with no validation beforehand.
-#
- -*) GROFF_STYLE="$GROFF_STYLE \"$1\""
- ;;
-#
-# All non-option arguments are considered as possible input file names,
-# and are passed on to 'groff', unaltered.
-#
- *) INPUT_FILES="$INPUT_FILES \"$1\""
- ;;
- esac
- shift
- done
-#
-# If the '-v' or '--version' option was specified,
-# then we simply emulate the behaviour of 'groff', with this option,
-# and quit.
-#
- if test -n "$SHOW_VERSION"
- then
- echo >&2 "$SHOW_VERSION"
- echo >&2; eval $GROFF_STYLE $INPUT_FILES
- exit $?
- fi
-#
-# Establish how to invoke 'echo', suppressing the terminating newline.
-# (Adapted from 'autoconf' code, as found in 'configure' scripts).
-#
- case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,*-n*) n='' c='' ;;
- *c*) n='-n' c='' ;;
- *) n='' c='\c' ;;
- esac
-#
-# If STDIN is specified among the input files,
-# or if no input files are specified, then we need to capture STDIN,
-# so we can replay it into each 'groff' processing pass.
-#
- test -z "$INPUT_FILES" && STREAM="$CAT ${GROFF_TMPDIR}/pdf$$.in |"
- test -n "$STREAM" && $CAT > ${GROFF_TMPDIR}/pdf$$.in
-#
-# Unless reference resolution is explicitly suppressed,
-# we initiate it by touching the cross reference dictionary file,
-# and initialise the comparator, to kickstart the reference resolver loop.
-#
- SAY=":"
- if test -z "$DIFF"
- then
- >> $REFFILE
- echo kickstart > $REFCOPY
- test "${SHOW_PROGRESS+"set"}" = "set" && SAY=echo
-#
-# In order to correctly resolve 'pdfmark' references,
-# we need to have both the 'awk' and 'diff' programs available.
-#
- NO=''
- if test -n "$GROFF_AWK_INTERPRETER"
- then
- AWK="$GROFF_AWK_INTERPRETER"
- test -f "$AWK" && test -x "$AWK" || AWK=":"
- else
- for prog in @GROFF_AWK_INTERPRETERS@
- do
- AWK=`searchpath $prog "$PATH"`
- test "$AWK" = ":" || break
- done
- fi
- DIFF=`searchpath diff "$PATH"`
- test "$AWK" = ":" && echo >&2 "$NOPROG 'awk' in PATH" && NO="$NO 'awk'"
- test "$DIFF" = ":" && echo >&2 "$NOPROG 'diff' in PATH" && NO="$NO 'diff'"
- if test -n "$NO"
- then
- set $NO
- SAY=":" AWK=":" DIFF=":"
- test $# -gt 1 && NO="s $1 and $2 are" || NO=" $1 is"
- $CAT >&2 <<-ETX
-
- *** WARNING ***
-
- The program$NO required, but cannot be found;
- consequently, '$CMD' is unable to resolve 'pdfmark' references.
-
- Document processing will continue, but no 'pdfmark' reference dictionary
- will be compiled; if any 'pdfmark' reference appears in the resulting PDF
- document, the formatting may not be correct.
-
- ETX
- fi
- fi
-#
-# Run the multi-pass 'pdfmark' reference resolver loop ...
-#
- $SAY >&2 $n Resolving references ..$c
- until $DIFF $REFCOPY $REFFILE 1>$NULLDEV 2>&1
- do
-#
-# until all references are resolved, to yield consistent values
-# in each of two consecutive passes, or until it seems that no consistent
-# resolution is achievable.
-#
- $SAY >&2 $n .$c
- PASS_INDICATOR="${PASS_INDICATOR}."
- if test "$PASS_INDICATOR" = "...."
- then
-#
-# More than three passes required indicates a probable inconsistency
-# in the source document; diagnose, and bail out.
-#
- $SAY >&2 " failed"
- $CAT >&2 <<-ETX
- $CMD: unable to resolve references consistently after three passes
- $CMD: the source document may exhibit instability about the reference(s) ...
- ETX
-#
-# Report the unresolved references, as a diff between the two pass files,
-# preferring 'unified' or 'context' diffs, when available
-#
- DIFFOPT=''
- $DIFF -c0 $NULLDEV $NULLDEV 1>$NULLDEV 2>&1 && DIFFOPT='-c0'
- $DIFF -u0 $NULLDEV $NULLDEV 1>$NULLDEV 2>&1 && DIFFOPT='-u0'
- $DIFF >&2 $DIFFOPT $REFCOPY $REFFILE
- exit 1
- fi
-#
-# Replace the comparison file copy from any previous pass,
-# with the most recently updated copy of the reference dictionary.
-# (Some versions of 'mv' may not support overwriting of an existing file,
-# so remove the old comparison file first).
-#
- rm -f $REFCOPY
- mv $REFFILE $REFCOPY
-#
-# Run 'groff' and 'awk', to identify reference marks in the document source,
-# filtering them into the reference dictionary; discard incomplete 'groff' output
-# at this stage.
-#
- eval $STREAM $GROFF_STYLE -Z 1>$NULLDEV 2>$WRKFILE $REFCOPY $INPUT_FILES
- $AWK '/^gropdf-info:href/ {$1 = ".pdfhref D -N"; print}' $WRKFILE > $REFFILE
- done
- $SAY >&2 " done"
-#
-# To get to here ...
-# We MUST have resolved all 'pdfmark' references, such that the content of the
-# updated reference dictionary file EXACTLY matches the last saved copy.
-#
-# If PDF output has been suppressed, then there is nothing more to do.
-#
- test "$PDF_OUTPUT" = "$NULLDEV" && exit 0
-#
-# We are now ready to start preparing the intermediate PostScript files,
-# from which the PDF output will be compiled -- but before proceding further ...
-# let's make sure we have a GhostScript interpreter to convert them!
-#
- if test -n "$GROFF_GHOSTSCRIPT_INTERPRETER"
- then
- GS="$GROFF_GHOSTSCRIPT_INTERPRETER"
- test -f "$GS" && test -x "$GS" || GS=":"
- else
- for prog in @GROFF_GHOSTSCRIPT_INTERPRETERS@
- do
- GS=`searchpath $prog "$PATH"`
- test "$GS" = ":" || break
- done
- fi
-#
-# If we could not find a GhostScript interpreter, then we can do no more.
-#
- if test "$GS" = ":"
- then
- echo >&2 "$CMD: installation problem: cannot find GhostScript interpreter"
- $CAT >&2 <<-ETX
-
- *** FATAL INSTALLATION ERROR ***
-
- '$CMD' requires a GhostScript interpreter to convert PostScript to PDF.
- Since you do not appear to have one installed, '$CMD' connot continue.
-
- ETX
- exit 1
- fi
-#
-# We now extend the local copy of the reference dictionary file,
-# to create a full 'pdfmark' reference map for the document ...
-#
- $AWK '/^grohtml-info/ {print ".pdfhref Z", $2, $3, $4}' $WRKFILE >> $REFCOPY
-#
-# Re-enable progress reporting, if necessary ...
-# (Missing 'awk' or 'diff' may have disabled it, to avoid display
-# of spurious messages associated with reference resolution).
-#
- test "${SHOW_PROGRESS+"set"}" = "set" && SAY=echo
-#
-# If a document cover style sheet is specified ...
-# then we run a special formatting pass, to create a cover section file.
-#
- if test -n "$STYLESHEET"
- then
- DOT='^\.[ ]*'
- CS_MACRO=${CS_MACRO-"CS"} CE_MACRO=${CE_MACRO-"CE"}
- $SAY >&2 $n "Formatting document ... front cover section ..$c"
- CS_FILTER="$STREAM $SED -n '/${DOT}${CS_MACRO}/,/${DOT}${CE_MACRO}/p'"
- eval $CS_FILTER $INPUT_FILES | eval $GROFF_STYLE $STYLESHEET - > $CS_DATA
- $SAY >&2 ". done"
- fi
-#
-# If table of contents relocation is to be performed (it is, by default),
-# then we run an extra 'groff' pass, to format a TOC intermediate file.
-#
- if test -n "$TC_DATA"
- then
- $SAY >&2 $n "Formatting document ... table of contents ..$c"
- eval $STREAM $GROFF_STYLE $TOC_FORMAT $REFCOPY $INPUT_FILES > $TC_DATA
- $SAY >&2 ". done"
- fi
-#
-# In all cases, a final 'groff' pass is required, to format the document body.
-#
- $SAY >&2 $n "Formatting document ... body section ..$c"
- eval $STREAM $GROFF_STYLE $BODY_FORMAT $REFCOPY $INPUT_FILES > $BD_DATA
- $SAY >&2 ". done"
-#
-# Finally ...
-# Invoke GhostScript as a PDF writer, to bind all of the generated
-# PostScript intermediate files into a single PDF output file.
-#
- $SAY >&2 $n "Writing PDF output ..$c"
- PDFWRITE="$GS -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite"
-#
-# (This 'sed' script is a hack, to eliminate redundant blank pages).
-#
- $SED '
- :again
- /%%EndPageSetup/b finish
- /%%Page:/{
- N
- b again
- }
- b
- :finish
- N
- /^%%Page:.*0 *Cg *EP/d
- ' $TC_DATA $BD_DATA | $PDFWRITE -sOutputFile=${PDF_OUTPUT-"-"} $CS_DATA -
- $SAY >&2 ". done"
-#
-# ------------------------------------------------------------------------------
-# $RCSfile: pdfroff.sh,v $ $Revision: 1.7 $: end of file
diff --git a/contrib/groff/contrib/pdfmark/spdf.tmac b/contrib/groff/contrib/pdfmark/spdf.tmac
deleted file mode 100644
index 52bde1685fb0..000000000000
--- a/contrib/groff/contrib/pdfmark/spdf.tmac
+++ /dev/null
@@ -1,225 +0,0 @@
-.\" -*- nroff -*-
-.ig
-
-spdf.tmac
-
-Copyright (C) 2004
- Free Software Foundation, Inc.
- Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-..
-.\"
-.if !rOPMODE .nr OPMODE 1
-.\"
-.mso s.tmac
-.mso pdfmark.tmac
-.\"
-.\" Omitted Sections
-.\" ================
-.\"
-.\" Define section markers, for special document sections,
-.\" which are to be omitted from regular document processing.
-.\"
-.de OMIT OMIT
-.de \\$1
-.omit@begin \\$1 \\$2
-..
-.de \\$2
-.omit@end \\$1 \\$2
-..
-.OMIT CS CE \" front cover text, processed independently
-.OMIT MS ME \" menu definitions, for info documents only
-.\"
-.de omit@begin
-.ds omit@section \\$1
-.ig \\$2
-..
-.de omit@end
-.if !'\\*[omit@section]'\\$1' .@error \\$2 without \\$1
-.rm omit@section
-..
-.de XM
-.\"
-.pdfhref M -X \\$@
-..
-.de XR
-.if \\n(.$ \{\
-. if \\n[OPMODE] \{\
-. ds spdf!opts -D "\\$1"
-. if \\n(.$>1 .as spdf!opts " -A "\\$2"
-. if \\n(.$>2 .as spdf!opts " -P "\\$3"
-. pdfhref L \\*[spdf!opts]
-. rm spdf!opts
-. \}
-. \}
-..
-.\"
-.\" Document Outlines, Section Headings and Table of Contents
-.\" =========================================================
-.\"
-.de XN
-.\" Use AFTER .NH n, to define the text of the numbered heading,
-.\" automatically generating a matching formatted TOC entry, and
-.\" a PDF document outline entry.
-.\"
-.\" String registers XNVS1, XNVS2 and XNVS3 establish additional leading,
-.\" prior to top level headings, preceding each level of indented subheading,
-.\" and following each nested level of subheading, respectively
-.\" (strings are used, rather than numeric registers, so that these
-.\" additional spacing parameters may be set relative to the current
-.\" document line spacing, as set by \n[VS]).
-.\"
-.rm xn*ref
-.while dopt*XN\\$1 \{\
-. opt*XN\\$1 \\$*
-. shift \\n[xn*argc]
-. \}
-.rr xn*argc
-.if '\\$1'--' .shift
-.if dxn*ref .XM -N \\*[xn*ref] -- \\$@
-.rm xn*ref
-.pdfhref O \\n[nh*hl] "\\*(SN \\$*"
-.XS
-.if rtc*hl \{\
-. if !dXNVS1 .ds XNVS1 1.0v \" default leading for top level
-. if !dXNVS2 .ds XNVS2 0.3v \" default leading at nesting increment
-. if !dXNVS3 .ds XNVS3 0.6v \" default leading following nested group
-. if \\n[nh*hl]==1 \{\
-. sp \\*[XNVS1]
-. nr tc*hl-max 1
-. \}
-. ie \\n[nh*hl]<\\n[tc*hl] .if \\n[nh*hl]>1 .sp \\*[XNVS3]
-. el \{\
-. ie \\n[nh*hl]>\\n[tc*hl] .sp \\*[XNVS2]
-. el \{\
-. if !r tc*hl-max .nr tc*hl-max 1
-. ie \\n[tc*hl-max]>\\n[nh*hl] .sp \\*[XNVS3]
-. el .nr tc*hl-max \\n[nh*hl]
-. \}
-. \}
-. \}
-.nr tc*hl \\n[nh*hl]
-\h'\\n[nh*hl]-1m'\c
-\&\\*(SN\h'1n'\\$*
-.\".pdfhref L -D \\*[PDFBOOKMARK.NAME] -- \&\\*(SN\h'1n'\\$*
-.XE
-\&\\$*
-..
-.de opt*XN-N
-.nr xn*argc 2
-.ds xn*ref \\$2
-..
-.de opt*XN-X
-.nr xn*argc 1
-.if !dxn*ref .ds xn*ref \\\\$1
-..
-.de LU
-.LP
-The content for this section is not yet available.
-..
-.de AN
-.ie \\n(.$ .@AN \\$*
-.el .@AN Note
-..
-.de @AN
-.SH
-\\$*
-.LP
-..
-.nr PDF-TOC-ONLY 1
-.nr PDF-BODY-TEXT 2
-.de OP
-.ie rPHASE \{\
-. ie \\n(.$ \{\
-. nr op:request 0
-. while \\n(.$ \{\
-. if \\$1=\\n[PHASE] .nr op:request 1
-. shift
-. \}
-. \}
-. el .nr op:request 1
-. if !\\n[op:request]=\\n[OPMODE] \{\
-. nr OPMODE \\n[op:request]
-. nop \O[\\n[OPMODE]]\c
-. \}
-. \}
-.el .nr OPMODE 1
-..
-.nr SAME-PAGE 0
-.de NN
-.if !\\n[SAME-PAGE] .bp
-.nr SAME-PAGE 0
-.NH \\$1
-.nn*setname \\$2
-.shift 2
-.XN -N \\*[nn*name] -- \\$@
-.rm nn*name
-..
-.de nn*setname
-.ds nn*name \\$1
-.shift
-.while \\n(.$ \{\
-. as nn*name -\\$1
-. shift
-. \}
-..
-.de PXREF
-.nn*setname \\$2
-.XR \\*[nn*name] )\\$1 (
-.rm nn*name
-..
-.de IS
-.RS
-.nr LL \\n(LL-\\n(PI
-..
-.de IE
-.RE
-.nr LL \\n(LL+\\n(PI
-..
-.\" Override the standard ms macro,
-.\" to ensure the document outline cache is flushed
-.\" BEFORE emitting the table of contents.
-.de TC
-.pdfsync O
-.P1
-.OP \n[PDF-TOC-ONLY]
-.pg@begin 1 i
-.if \\n[OPMODE] .pdf@toc
-.PX \\$1
-..
-.de pdf@toc
-.pdfhref O -T T 1 "\\*[TOC]"
-.pdfsync O
-..
-.de pdf@exit
-.if \\n[OPMODE] .pdfsync
-.pg@end-text
-..
-.em pdf@exit
-.OP \n[PDF-BODY-TEXT]
-.
-.\" groff "ms" provides the "pg@bottom" macro, which has already
-.\" been installed as a page transition trap. To ensure proper
-.\" mapping of "pdfhref" links which overflow the bottom of any
-.\" page, we need to install the "pdfhref" page transition hook,
-.\" as an addendum to this macro.
-.
-.pdfhref I -PT pg@bottom
-.\"
-.\" spdf.tmac: end of file: vim: ft=groff
diff --git a/contrib/groff/contrib/pic2graph/Makefile.sub b/contrib/groff/contrib/pic2graph/Makefile.sub
deleted file mode 100644
index d01a4353d441..000000000000
--- a/contrib/groff/contrib/pic2graph/Makefile.sub
+++ /dev/null
@@ -1,19 +0,0 @@
-MAN1=pic2graph.n
-CLEANADD=pic2graph
-
-all: pic2graph
-
-pic2graph: pic2graph.sh
- rm -f $@; \
- sed -e "s|@g@|$(g)|g" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/pic2graph.sh >$@; \
- chmod +x $@
-
-install_data: pic2graph
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/pic2graph
- $(INSTALL_SCRIPT) pic2graph $(bindir)/pic2graph
-
-uninstall_sub:
- -rm -f $(bindir)/pic2graph
diff --git a/contrib/groff/contrib/pic2graph/pic2graph.man b/contrib/groff/contrib/pic2graph/pic2graph.man
deleted file mode 100644
index 36008cba4a50..000000000000
--- a/contrib/groff/contrib/pic2graph/pic2graph.man
+++ /dev/null
@@ -1,140 +0,0 @@
-.\" $Id: pic2graph.man,v 1.5 2003/10/28 07:46:24 wlemb Exp $
-.\" This documentation is released to the public domain.
-.TH PIC2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.IX pic2graph
-.SH NAME
-pic2graph \- convert a PIC diagram into a cropped image
-.
-.
-.SH SYNOPSIS
-.B pic2graph
-[
-.B \-unsafe
-]
-[
-.BI \-format\ fmt
-]
-[
-.BI \-eqn\ delim
-]
-.
-.
-.SH DESCRIPTION
-Reads a PIC program as input; produces an image file (by default in
-Portable Network Graphics format) suitable for the Web as output.
-Also translates
-.BR @g@eqn (@MAN1EXT@)
-constructs, so it can be used for generating images of mathematical
-formulae.
-.P
-PIC is a rather expressive graphics minilanguage suitable for
-producing box-and-arrow diagrams of the kind frequently used in
-technical papers and textbooks. The language is sufficiently flexible
-to be quite useful for state charts, Petri-net diagrams, flow charts,
-simple circuit schematics, jumper layouts, and other kinds of
-illustration involving repetitive uses of simple geometric forms and
-splines. Because PIC descriptions are procedural and object-based,
-they are both compact and easy to modify.
-.P
-The PIC language is fully documented in "\fIMaking Pictures With GNU
-PIC\fP", a document which is part of the
-.BR groff (@MAN1EXT@)
-distribution.
-.P
-Your input PIC code should \fInot\fR be wrapped with the .PS and .PE macros
-that normally guard it within
-.BR groff (@MAN1EXT@)
-macros.
-.P
-The output image will be a black-on-white graphic clipped to the
-smallest possible bounding box that contains all the black pixels.
-By specifying command-line options to be passed to
-.BR convert (1)
-you can give it a border, set the background transparent, set the
-image's pixel density, or perform other useful transformations.
-.P
-This program uses
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-and the ImageMagick
-.BR convert (1)
-program.
-These programs must be installed on your system and accessible on your
-$PATH for \fBpic2graph\fR to work.
-.
-.
-.SH OPTIONS
-.TP
-.B \-unsafe
-Run
-.BR @g@pic (@MAN1EXT@)
-and
-.BR groff (@MAN1EXT@)
-in the `unsafe' mode enabling the PIC macro
-.B sh
-to execute arbitrary commands. The default is to forbid this.
-.TP
-.BI \-format\ fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-Any format that
-.BR convert (1)
-can emit is supported.
-.TP
-.BI \-eqn\ delim
-Change the fencepost characters that delimit
-.BR @g@eqn (@MAN1EXT@)
-directives
-.RB ( $
-and
-.BR $ ,
-by default). This option requires an argument, but an empty string is
-accepted as a directive to disable
-.BR @g@eqn (@MAN1EXT@)
-processing.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR convert (1).
-.
-.
-.SH FILES
-.TP \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-The
-.BR @g@eqn (@MAN1EXT@)
-initialization file.
-.
-.
-.SH ENVIRONMENT
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-If this is not set
-.B pic2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.SH "SEE ALSO"
-.BR eqn2graph (@MAN1EXT@),
-.BR grap2graph (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR convert (1).
-.
-.
-.SH AUTHOR
-Eric S. Raymond <esr@thyrsus.com>, based on a recipe by W. Richard Stevens.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/contrib/pic2graph/pic2graph.sh b/contrib/groff/contrib/pic2graph/pic2graph.sh
deleted file mode 100644
index 5a066cef2e25..000000000000
--- a/contrib/groff/contrib/pic2graph/pic2graph.sh
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /bin/sh
-#
-# pic2graph -- compile PIC image descriptions to bitmap images
-#
-# by Eric S. Raymond <esr@thyrsus.com>, July 2002
-
-# In Unixland, the magic is in knowing what to string together...
-#
-# Take a pic/eqn diagram on stdin, emit cropped bitmap on stdout.
-# The pic markup should *not* be wrapped in .PS/.PE, this script will do that.
-# An -unsafe option on the command line enables gpic/groff "unsafe" mode.
-# A -format FOO option changes the image output format to any format
-# supported by convert(1). An -eqn option changes the eqn delimiters.
-# All other options are passed to convert(1). The default format in PNG.
-#
-# Requires the groff suite and the ImageMagick tools. Both are open source.
-# This code is released to the public domain.
-#
-# Here are the assumptions behind the option processing:
-#
-# 1. Only the -U option of gpic(1) is relevant. -C doesn't matter because
-# we're generating our own .PS/.PE, -[ntcz] are irrelevant because we're
-# generating Postscript.
-#
-# 2. Ditto for groff(1), though it's a longer and more tedious demonstration.
-#
-# 3. Many options of convert(1) are potentially relevant (especially
-# -density, -interlace, -transparency, -border, and -comment).
-#
-# Thus, we pass -U to gpic and groff, and everything else to convert(1).
-#
-# We don't have complete option coverage on eqn because this is primarily
-# intended as a pic translator; we can live with eqn defaults.
-#
-# $Id: pic2graph.sh,v 1.7 2005/05/18 07:03:07 wl Exp $
-#
-groffpic_opts=""
-gs_opts=""
-convert_opts=""
-format="png"
-eqndelim='$$'
-
-while [ "$1" ]
-do
- case $1 in
- -unsafe)
- groffpic_opts="-U";;
- -format)
- format=$2
- shift;;
- -eqn)
- eqndelim=$2
- shift;;
- -v | --version)
- echo "GNU pic2graph (groff) version @VERSION@"
- exit 0;;
- --help)
- echo "usage: pic2graph [ option ...] < in > out"
- exit 0;;
- *)
- convert_opts="$convert_opts $1";;
- esac
- shift
-done
-
-if [ "$eqndelim" ]
-then
- eqndelim="delim $eqndelim"
-fi
-
-# create temporary directory
-tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
- test -z "$d" && continue
-
- tmp=`(umask 077 && mktemp -d -q "$d/pic2graph-XXXXXX") 2> /dev/null` \
- && test -n "$tmp" && test -d "$tmp" \
- && break
-
- tmp=$d/pic2graph$$-$RANDOM
- (umask 077 && mkdir $tmp) 2> /dev/null \
- && break
-done;
-if test -z "$tmp"; then
- echo "$0: cannot create temporary directory" >&2
- { (exit 1); exit 1; }
-fi
-
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
-
-# Here goes:
-# 1. Wrap the input in dummy .PS/PE macros (and add possibly null .EQ/.EN)
-# 2. Process through eqn and pic to emit troff markup.
-# 3. Process through groff to emit Postscript.
-# 4. Use convert(1) to crop the PostScript and turn it into a bitmap.
-(echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \
- groff -e -p $groffpic_opts -Tps -P-pletter > $tmp/pic2graph.ps \
- && convert -trim -crop 0x0 $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \
- && cat $tmp/pic2graph.$format
-
-# End
diff --git a/contrib/groff/doc/Makefile.in b/contrib/groff/doc/Makefile.in
deleted file mode 100644
index 05fb5bc2a798..000000000000
--- a/contrib/groff/doc/Makefile.in
+++ /dev/null
@@ -1,150 +0,0 @@
-# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-# Use this file to produce documentation in various formats; e.g. you can
-# say
-#
-# make groff.pdf
-#
-# to get the groff texinfo manual as a PDF file.
-#
-# Note that you have to compile the groff package first.
-
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
-pnmtops=@pnmtops_nosetpage@
-
-# These may be overridden if cross-compiling.
-TROFFBIN=$(top_builddir)/src/roff/troff/troff
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's| *|:|g'`
-
-# info files are distributed with the groff package, so makeinfo is
-# usually not needed (however, to build from CVS you NEED it!)
-# FIXME: Add autoconf test to check whether makeinfo exists.
-MAKEINFO=makeinfo
-
-# Users who want to print out the groff manual are expected to have
-# a working TeX installation.
-TEXI2DVI=texi2dvi
-
-groff_bin_dirs=\
- $(top_builddir)/src/roff/groff \
- $(top_builddir)/src/roff/troff \
- $(top_builddir)/src/preproc/pic \
- $(top_builddir)/src/preproc/eqn \
- $(top_builddir)/src/preproc/tbl \
- $(top_builddir)/src/preproc/grn \
- $(top_builddir)/src/preproc/refer \
- $(top_builddir)/src/preproc/soelim \
- $(top_builddir)/src/preproc/html \
- $(top_builddir)/src/devices/grops \
- $(top_builddir)/src/devices/grodvi \
- $(top_builddir)/src/devices/grotty \
- $(top_builddir)/src/devices/grolj4 \
- $(top_builddir)/src/devices/grolbp \
- $(top_builddir)/src/devices/grohtml
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-TROFF=$(TROFFBIN) $(TFLAG) $(FFLAG) -ww
-GROFF=GROFF_COMMAND_PREFIX=''; \
- export GROFF_COMMAND_PREFIX; \
- GROFF_BIN_PATH=$(GROFF_BIN_PATH); \
- export GROFF_BIN_PATH; \
- sed -e "s;@VERSION@;$(version)$(revision);" $< \
- | $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-imagedir=img
-
-.SUFFIXES: .me .ms .ps .html .txt .texinfo .dvi .pdf
-.PHONY: all prepare_examples clean distclean realclean extraclean
-
-# For simplicity, we always call grn and eqn.
-.me.txt:
- $(GROFF) -Tascii -ge -me >$@
-.me.ps:
- $(GROFF) -Tps -ge -me >$@
-
-.ms.html:
- $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
- -P-D$(imagedir) -Thtml -ms >$@
-.ms.txt:
- $(GROFF) -Tascii -ms -mwww >$@
-.ms.ps:
- $(GROFF) -Tps -ms -mwww >$@
-
-.texinfo.dvi:
- $(TEXI2DVI) -e $<
-.texinfo.pdf:
- $(TEXI2DVI) -e --pdf $<
-.texinfo.html:
- $(MAKEINFO) --enable-encoding -I$(srcdir) --html --no-split $< \
- && $(SHELL) $(srcdir)/fixinfo.sh $@
-
-
-all: prepare_examples
-
-prepare_examples: grnexmpl.g groff.css
- test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
- test -f groff.css || cp $(srcdir)/groff.css .
-
-groff: groff.texinfo
- $(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
- xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | $(pnmtops) -noturn >$@
-gnu.png: gnu.xpm
- xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtopng >$@
-
-pic.html: pic.ms
- $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
- -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
- -Thtml -ms >$@
-
-webpage.html: webpage.ms gnu.png gnu.eps groff.css
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-
-clean:
- -rm -f *.ps *.html *.txt core
- -rm -f *.aux *.dvi *.pdf *.log *.toc texput.log
- -rm -f *.cp *.cps *.cv *.cn *.es *.ess *.fn *.fns *.ky *.kys \
- *.ma *.mas *.op *.ops *.pg *.pgs *.rq *.rqs *.st *.sts \
- *.tp *.tps *.tr *.vr *.vrs
- -rm -rf img
-
-distclean: clean
-
-realclean: distclean
- -rm -f *.png *.eps
-
-extraclean: distclean
- -rm -f core *~ \#* junk temp grot
diff --git a/contrib/groff/doc/Makefile.sub b/contrib/groff/doc/Makefile.sub
deleted file mode 100644
index 5357f1840586..000000000000
--- a/contrib/groff/doc/Makefile.sub
+++ /dev/null
@@ -1,233 +0,0 @@
-# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's| *|$(SH_SEP)|g'`
-
-# info files are distributed with the groff package, so makeinfo is
-# usually not needed (however, to build from CVS you NEED it!)
-# FIXME: Add autoconf test to check whether makeinfo exists.
-MAKEINFO=makeinfo
-
-groff_bin_dirs=\
- $(top_builddir)/src/roff/groff \
- $(top_builddir)/src/roff/troff \
- $(top_builddir)/src/preproc/pic \
- $(top_builddir)/src/preproc/eqn \
- $(top_builddir)/src/preproc/tbl \
- $(top_builddir)/src/preproc/grn \
- $(top_builddir)/src/preproc/refer \
- $(top_builddir)/src/preproc/soelim \
- $(top_builddir)/src/preproc/html \
- $(top_builddir)/src/devices/grops \
- $(top_builddir)/src/devices/grohtml
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-GROFF=\
- GROFF_COMMAND_PREFIX=''; \
- export GROFF_COMMAND_PREFIX; \
- GROFF_BIN_PATH=$(GROFF_BIN_PATH); \
- export GROFF_BIN_PATH; \
- sed -e "s;@VERSION@;$(version)$(revision);" $< \
- | $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-DOCFILES=\
- meref.me \
- meintro.me \
- pic.ms
-
-PROCESSEDDOCFILES=\
- meref.ps \
- meintro.ps \
- pic.ps
-
-HTMLDOCFILES=\
- pic.html
-
-HTMLDOCFILESALL=\
- pic*.html
-
-HTMLDOCIMAGEFILES=\
- pic*
-
-EXAMPLEFILES=\
- webpage.ms \
- groff.css \
- grnexmpl.g \
- grnexmpl.me
-
-PROCESSEDEXAMPLEFILES=\
- webpage.ps \
- grnexmpl.ps
-
-HTMLEXAMPLEFILES=\
- webpage.html
-
-HTMLEXAMPLEIMAGEFILES=\
- webpage*
-
-imagedir=img
-htmldocimagedir=$(htmldocdir)/$(imagedir)
-exampleimagedir=$(exampledir)/$(imagedir)
-
-CLEANADD=\
- $(PROCESSEDDOCFILES) \
- $(PROCESSEDEXAMPLEFILES) \
- $(HTMLEXAMPLEFILES) \
- $(HTMLDOCFILESALL) \
- groff.aux groff.cp* groff.dvi groff.es* groff.fn* groff.html groff.ky* \
- groff.log groff.ma* groff.op* groff.pdf groff.pg* groff.ps groff.rq* \
- groff.st* groff.toc groff.tp groff.vr* \
- examples.stamp
-
-CLEANDIRADD=\
- $(imagedir)
-
-CLEANNOTSRCDIRADD=\
- groff.css \
- grnexmpl.g \
- groff \
- groff-* \
- gnu.eps \
- gnu.png
-
-.SUFFIXES: .me .ms .ps .html
-
-# For simplicity, we always call grn and eqn.
-.me.ps:
- $(GROFF) -Tps -ge -me >$@
-
-.ms.html:
- $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
- -P-D$(imagedir) -Thtml -ms >$@
-.ms.ps:
- $(GROFF) -Tps -ms -mwww >$@
-
-
-all: groff $(PROCESSEDDOCFILES) prepare_examples \
- $(PROCESSEDEXAMPLEFILES) $(make_html)
-
-html: $(HTMLDOCFILES) $(HTMLEXAMPLEFILES)
-
-prepare_examples: examples.stamp
-
-examples.stamp: grnexmpl.g groff.css gnu.eps
- test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
- test -f groff.css || cp $(srcdir)/groff.css .
- if test ! -f gnu.eps; then \
- if test -f $(srcdir)/gnu.eps; then \
- cp $(srcdir)/gnu.eps .; \
- elif test -f $(top_builddir)/contrib/pdfmark/gnu.eps; then \
- cp $(top_builddir)/contrib/pdfmark/gnu.eps .; \
- fi; \
- fi
- echo timestamp > $@
-
-groff: groff.texinfo
- $(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
- xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | \
- $(pnmtops_nosetpage) -noturn -rle >$@
-
-gnu.png: gnu.xpm
- xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtopng >$@
-
-pic.html: pic.ms
- $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
- -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
- -Thtml -ms >$@
-
-webpage.html: webpage.ms gnu.png groff.css
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-distfiles: groff gnu.eps gnu.png
-
-install_data: groff $(DOCFILES) $(PROCESSEDDOCFILES) $(make_install_html) \
- $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
- -test -d $(infodir) || $(mkinstalldirs) $(infodir)
-# Prefer info files in builddir over srcdir; we test for
-# the existence of `groff'.
- d=.; \
- test -f "groff" || d=$(srcdir); \
- for f in $$d/groff `ls $$d/groff-*`; do \
- rm -f $(infodir)/`basename $$f`; \
- $(INSTALL_DATA) $$f $(infodir)/`basename $$f`; \
- done
- $(INSTALL_INFO) --info-dir=$(infodir) $(infodir)/groff
- -test -d $(docdir) || $(mkinstalldirs) $(docdir)
- for f in $(DOCFILES); do \
- rm -f $(docdir)/$$f; \
- $(INSTALL_DATA) $(srcdir)/$$f $(docdir)/$$f; \
- done
- for f in $(PROCESSEDDOCFILES); do \
- rm -f $(docdir)/$$f; \
- $(INSTALL_DATA) $$f $(docdir)/$$f; \
- done
- -test -d $(exampledir) || $(mkinstalldirs) $(exampledir)
- for f in $(EXAMPLEFILES); do \
- rm -f $(exampledir)/$$f; \
- $(INSTALL_DATA) $(srcdir)/$$f $(exampledir)/$$f; \
- done
- for f in $(PROCESSEDEXAMPLEFILES); do \
- rm -f $(exampledir)/$$f; \
- $(INSTALL_DATA) $$f $(exampledir)/$$f; \
- done
-
-install_html: $(HTMLDOCFILES) $(HTMLEXAMPLEFILES)
- -test -d $(htmldocdir) || $(mkinstalldirs) $(htmldocdir)
- for f in `ls $(HTMLDOCFILESALL)`; do \
- rm -f $(htmldocdir)/$$f; \
- $(INSTALL_DATA) $$f $(htmldocdir)/$$f; \
- done
- -test -d $(htmldocimagedir) || $(mkinstalldirs) $(htmldocimagedir)
- rm -f $(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
- $(INSTALL_DATA) $(imagedir)/$(HTMLDOCIMAGEFILES) $(htmldocimagedir)
- -test -d $(exampledir) || $(mkinstalldirs) $(exampledir)
- for f in $(HTMLEXAMPLEFILES); do \
- rm -f $(exampledir)/$$f; \
- $(INSTALL_DATA) $$f $(exampledir)/$$f; \
- done
- -test -d $(exampleimagedir) || $(mkinstalldirs) $(exampleimagedir)
- rm -f $(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
- $(INSTALL_DATA) $(imagedir)/$(HTMLEXAMPLEIMAGEFILES) $(exampleimagedir)
-
-uninstall_sub:
- -for f in groff `ls groff-*`; do \
- rm -f $(infodir)/$$f; \
- done
- $(INSTALL_INFO) --remove --info-dir=$(infodir) $(infodir)/groff
- -for f in $(DOCFILES) $(PROCESSEDDOCFILES); do \
- rm -f $(docdir)/$$f; \
- done
- -for f in `ls $(HTMLDOCFILESALL)`; do \
- rm -f $(htmldocdir)/$$f; \
- done
- -rm -f $(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
- -rmdir $(htmldocimagedir)
- -for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES) $(HTMLEXAMPLEFILES); do \
- rm -f $(exampledir)/$$f; \
- done
- -rm -f $(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
- -rmdir $(exampleimagedir)
diff --git a/contrib/groff/doc/fdl.texi b/contrib/groff/doc/fdl.texi
deleted file mode 100644
index 994044df6fbc..000000000000
--- a/contrib/groff/doc/fdl.texi
+++ /dev/null
@@ -1,452 +0,0 @@
-
-@node GNU Free Documentation License
-@appendixsec GNU Free Documentation License
-
-@cindex FDL, GNU Free Documentation License
-@center Version 1.2, November 2002
-
-@display
-Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@enumerate 0
-@item
-PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document @dfn{free} in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of ``copyleft'', which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-@item
-APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The ``Document'', below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as ``you''. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A ``Modified Version'' of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A ``Secondary Section'' is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The ``Invariant Sections'' are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The ``Cover Texts'' are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A ``Transparent'' copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not ``Transparent'' is called ``Opaque''.
-
-Examples of suitable formats for Transparent copies include plain
-@sc{ascii} without markup, Texinfo input format, La@TeX{} input
-format, @acronym{SGML} or @acronym{XML} using a publicly available
-@acronym{DTD}, and standard-conforming simple @acronym{HTML},
-PostScript or @acronym{PDF} designed for human modification. Examples
-of transparent image formats include @acronym{PNG}, @acronym{XCF} and
-@acronym{JPG}. Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, @acronym{SGML} or
-@acronym{XML} for which the @acronym{DTD} and/or processing tools are
-not generally available, and the machine-generated @acronym{HTML},
-PostScript or @acronym{PDF} produced by some word processors for
-output purposes only.
-
-The ``Title Page'' means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, ``Title Page'' means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section ``Entitled XYZ'' means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as ``Acknowledgements'',
-``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
-of such a section when you modify the Document means that it remains a
-section ``Entitled XYZ'' according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-@item
-VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-@item
-COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-@item
-MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-@enumerate A
-@item
-Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
-@item
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
-@item
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
-@item
-Preserve all the copyright notices of the Document.
-
-@item
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
-@item
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
-@item
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
-@item
-Include an unaltered copy of this License.
-
-@item
-Preserve the section Entitled ``History'', Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled ``History'' in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
-@item
-Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the ``History'' section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
-@item
-For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
-@item
-Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
-@item
-Delete any section Entitled ``Endorsements''. Such a section
-may not be included in the Modified Version.
-
-@item
-Do not retitle any existing section to be Entitled ``Endorsements'' or
-to conflict in title with any Invariant Section.
-
-@item
-Preserve any Warranty Disclaimers.
-@end enumerate
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled ``Endorsements'', provided it contains
-nothing but endorsements of your Modified Version by various
-parties---for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-@item
-COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled ``History''
-in the various original documents, forming one section Entitled
-``History''; likewise combine any sections Entitled ``Acknowledgements'',
-and any sections Entitled ``Dedications''. You must delete all
-sections Entitled ``Endorsements.''
-
-@item
-COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-@item
-AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an ``aggregate'' if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-@item
-TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled ``Acknowledgements'',
-``Dedications'', or ``History'', the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-@item
-TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-@uref{http://www.gnu.org/copyleft/}.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License ``or any later version'' applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-@end enumerate
-
-@page
-@appendixsubsec ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-@smallexample
-@group
- Copyright (C) @var{year} @var{your name}.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-@end group
-@end smallexample
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the ``with...Texts.'' line with this:
-
-@smallexample
-@group
- with the Invariant Sections being @var{list their titles}, with
- the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
- being @var{list}.
-@end group
-@end smallexample
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-@c Local Variables:
-@c ispell-local-pdict: "ispell-dict"
-@c End:
-
diff --git a/contrib/groff/doc/fixinfo.sh b/contrib/groff/doc/fixinfo.sh
deleted file mode 100644
index b5d91f52ed2a..000000000000
--- a/contrib/groff/doc/fixinfo.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#! /bin/sh
-#
-# Fix a problem with HTML output produced by makeinfo 4.8.
-#
-# groff.texinfo uses (after macro expansion) something like
-#
-# @deffn ...
-# @XXindex ...
-# @deffnx ...
-#
-# which has worked with earlier versions (using an undocumented feature
-# of the implementation of @deffn and @deffnx). Version 4.8 has new
-# code for generating HTML, and the above construction produces wrong
-# HTML output: It starts a new <blockquote> without closing it properly.
-# The very problem is that, according to the documentation, the @deffnx
-# must immediately follow the @deffn line, making it impossible to add
-# entries into user-defined indices if supplied with macro wrappers around
-# @deffn and @deffnx.
-#
-# Note that this script is a quick hack and tightly bound to the current
-# groff.texinfo macro code. Hopefully, a new texinfo version makes it
-# unnecessary.
-
-t=${TMPDIR-.}/gro$$.tmp
-
-cat $1 | sed '
-1 {
- N
- N
-}
-:b
-$b
-N
-/^<blockquote>\n<p>.*\n\n \&mdash;/ {
- s/^<blockquote>\n<p>\(.*\n\)\n \&mdash;/\1\&mdash;/
- n
- N
- N
- bb
-}
-$b
-P
-D
-' > $t
-rm $1
-mv $t $1
diff --git a/contrib/groff/doc/gnu.eps b/contrib/groff/doc/gnu.eps
deleted file mode 100644
index f09ba024b663..000000000000
--- a/contrib/groff/doc/gnu.eps
+++ /dev/null
@@ -1,1018 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: pnmtops
-%%Title: noname.ps
-%%Pages: 1
-%%BoundingBox: 203 311 408 481
-%%EndComments
-/rlestr1 1 string def
-/readrlestring {
- /rlestr exch def
- currentfile rlestr1 readhexstring pop
- 0 get
- dup 127 le {
- currentfile rlestr 0
- 4 3 roll
- 1 add getinterval
- readhexstring pop
- length
- } {
- 256 exch sub dup
- currentfile rlestr1 readhexstring pop
- 0 get
- exch 0 exch 1 exch 1 sub {
- rlestr exch 2 index put
- } for
- pop
- } ifelse
-} bind def
-/readstring {
- dup length 0 {
- 3 copy exch
- 1 index sub
- getinterval
- readrlestring
- add
- 2 copy le { exit } if
- } loop
- pop pop
-} bind def
-/rpicstr 107 string def
-/gpicstr 107 string def
-/bpicstr 107 string def
-%%EndProlog
-%%Page: 1 1
-gsave
-203.76 311.04 translate
-204.48 169.92 scale
-213 177 4
-[ 213 0 0 -177 0 177 ]
-{ rpicstr readstring }
-{ gpicstr readstring }
-{ bpicstr readstring }
-true 3
-colorimage
-96fffff096fffff096fffff096fffff096fffff096fffff0ebff04eddcaa
-bddeb0fffff0ebff04eddcaabddeb0fffff0ebff04eddcaabddeb0fffff0
-edff0ad988777478864555678adfb4fffff0edff0ad98877747886455567
-8adfb4fffff0edff0ad988777478864555678adfb4fffff0efff0dfdbba9
-4afcb867b544777675447cb5fffff0efff0dfdbba94afcb867b544777675
-447cb5fffff0efff0dfdbba94afcb867b544777675447cb5fffff0f0ff10
-faab6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f0ff10fa
-ab6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f0ff10faab
-6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f1ff12fb9de8
-9476454897d54a44397443575554339fd6ff06d978778998889ce9fffff0
-f1ff12fb9de89476454897d54a44397443575554339fd6ff06d978778998
-889ce9fffff0f1ff12fb9de89476454897d54a44397443575554339fd6ff
-06d978778998889ce9fffff0f2ff14fc9cfff834455554669b487434a544
-4755555346cfd9ff0afc869cfdcfa9fedaa988dfebfffff0f2ff14fc9cff
-f834455554669b487434a5444755555346cfd9ff0afc869cfdcfa9fedaa9
-88dfebfffff0f2ff14fc9cfff834455554669b487434a5444755555346cf
-d9ff0afc869cfdcfa9fedaa988dfebfffff0f2ff159bffd5ae8453455445
-4c74b4444744449445665549effcff00fee1ff0ce8977adb887476456444
-4aee99ebfffff0f2ff159bffd5ae84534554454c74b44447444494456655
-49effcff00fee1ff0ce8977adb8874764564444aee99ebfffff0f2ff159b
-ffd5ae84534554454c74b4444744449445665549effcff00fee1ff0ce897
-7adb8874764564444aee99ebfffff0f4ff1dfee8defd9975ca4535454445
-c47844455444554456444558bfffffff76afe3ff0ee8448baa5665444444
-4535797efc8becfffff0f4ff1dfee8defd9975ca4535454445c478444554
-44554456444558bfffffff76afe3ff0ee8448baa56654444444535797efc
-8becfffff0f4ff1dfee8defd9975ca4535454445c4784445544455445644
-4558bfffffff76afe3ff0ee8448baa56654444444535797efc8becfffff0
-f4ff1de7cef97cd76758a454545456754b4454545446455463855caaacdd
-a7bdafecff01fdbefaff10fd77a86754454445444444896446effc9eedff
-fff0f4ff1de7cef97cd76758a454545456754b4454545446455463855caa
-acdda7bdafecff01fdbefaff10fd77a86754454445444444896446effc9e
-edfffff0f4ff1de7cef97cd76758a454545456754b445454544645546385
-5caaacdda7bdafecff01fdbefaff10fd77a86754454445444444896446ef
-fc9eedfffff0f5ff1efe8e758a849ec65488444467c86467945646444444
-54555757efca78bffaefecff19d675affffffffeed976666844443444343
-444455677898affbaeeefffff0f5ff1efe8e758a849ec65488444467c864
-6794564644444454555757efca78bffaefecff19d675affffffffeed9766
-66844443444343444455677898affbaeeefffff0f5ff1efe8e758a849ec6
-5488444467c8646794564644444454555757efca78bffaefecff19d675af
-fffffffeed976666844443444343444455677898affbaeeefffff0f5ff1d
-c79889555655afc64664457efd75b594485445455445494674eefddeefda
-ebff039efb6466fc4412466558444334563454434555434459cfffe9efef
-fffff0f5ff1dc79889555655afc64664457efd75b5944854454554454946
-74eefddeefdaebff039efb6466fc44124665584443345634544345554344
-59cfffe9efeffffff0f5ff1dc79889555655afc64664457efd75b5944854
-45455445494674eefddeefdaebff039efb6466fc44124665584443345634
-54434555434459cfffe9efeffffff0f6ff1ef9ac796686455447eea64589
-dffffffddc669557656856684494cecba66c8eebff1aa8fefecb985677b6
-5554844434345346433456457899998effffadeffffff0f6ff1ef9ac7966
-86455447eea64589dffffffddc669557656856684494cecba66c8eebff1a
-a8fefecb985677b65554844434345346433456457899998effffadefffff
-f0f6ff1ef9ac796686455447eea64589dffffffddc669557656856684494
-cecba66c8eebff1aa8fefecb985677b65554844434345346433456457899
-998effffadeffffff0f6ff1dc7ffeffb557555465bfe77ccfffecccbba56
-8c9dfe8aefbed8dbfeeffd99eaff1bf57deef85544545555565343334534
-53345434644454444579fffbdff0fffff0f6ff1dc7ffeffb557555465bfe
-77ccfffecccbba568c9dfe8aefbed8dbfeeffd99eaff1bf57deef8554454
-555556534333453453345434644454444579fffbdff0fffff0f6ff1dc7ff
-effb557555465bfe77ccfffecccbba568c9dfe8aefbed8dbfeeffd99eaff
-1bf57deef8554454555556534333453453345434644454444579fffbdff0
-fffff0f7ff1efe9ffdedffe7445465959ffbefe967abbbcdcb97778999aa
-acceefffeb89dfe9ff1094679d9964454555569a65664345334443fa4403
-4568ffbef0fffff0f7ff1efe9ffdedffe7445465959ffbefe967abbbcdcb
-97778999aaacceefffeb89dfe9ff1094679d9964454555569a6566434533
-4443fa44034568ffbef0fffff0f7ff1efe9ffdedffe7445465959ffbefe9
-67abbbcdcb97778999aaacceefffeb89dfe9ff1094679d9964454555569a
-65664345334443fa44034568ffbef0fffff0f7ff0ef9ffc5457bff944545
-bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96434689d556686887
-75874765675444443333344455789cfffaeff1fffff0f7ff0ef9ffc5457b
-ff944545bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96434689d5
-5668688775874765675444443333344455789cfffaeff1fffff0f7ff0ef9
-ffc5457bff944545bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96
-434689d55668688775874765675444443333344455789cfffaeff1fffff0
-f7ff0c9ddea6544469e856567efceb9dd5ff05fda754445bdefcff04c65d
-fe5444fa33043446effebff1fffff0f7ff0c9ddea6544469e856567efceb
-9dd5ff05fda754445bdefcff04c65dfe5444fa33043446effebff1fffff0
-f7ff0c9ddea6544469e856567efceb9dd5ff05fda754445bdefcff04c65d
-fe5444fa33043446effebff1fffff0f8ff0cf8bc7559bb853459679aa9fe
-9dcaff03fea68ed6fc3307344456765467dfaff1fffff0f8ff0cf8bc7559
-bb853459679aa9fe9dcaff03fea68ed6fc3307344456765467dfaff1ffff
-f0f8ff0cf8bc7559bb853459679aa9fe9dcaff03fea68ed6fc3307344456
-765467dfaff1fffff0f9ff0dfd74469cb646bdb63459eeffd8efc8ff0dc7
-cd33334444588754334457dfccf1fffff0f9ff0dfd74469cb646bdb63459
-eeffd8efc8ff0dc7cd33334444588754334457dfccf1fffff0f9ff0dfd74
-469cb646bdb63459eeffd8efc8ff0dc7cd33334444588754334457dfccf1
-fffff0f9ff0cf89644445885457dc436cefb8ec6ff028ab445fc33053456
-76654debf1fffff0f9ff0cf89644445885457dc436cefb8ec6ff028ab445
-fc3305345676654debf1fffff0f9ff0cf89644445885457dc436cefb8ec6
-ff028ab445fc3305345676654debf1fffff0f9ff0bc8ffeb744445544489
-5befb9c5ff0cfb8c95433334444444577769faf1fffff0f9ff0bc8ffeb74
-44455444895befb9c5ff0cfb8c95433334444444577769faf1fffff0f9ff
-0bc8ffeb7444455444895befb9c5ff0cfb8c95433334444444577769faf1
-fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02b8fc43fc33044445
-5568caf1fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02b8fc43fc
-330444455568caf1fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02
-b8fc43fc330444455568caf1fffff0faff0be7e555444569a7444558dfd8
-c3ff0cfa7fb53334433333457abbebeff2fffff0faff0be7e555444569a7
-444558dfd8c3ff0cfa7fb53334433333457abbebeff2fffff0faff0be7e5
-55444569a7444558dfd8c3ff0cfa7fb53334433333457abbebeff2fffff0
-faff0b9bfc9cea7544568855da8b8eecff05edbbaaaabcefdcff0b97e633
-333334578865569dcff2fffff0faff0b9bfc9cea7544568855da8b8eecff
-05edbbaaaabcefdcff0b97e633333334578865569dcff2fffff0faff0b9b
-fc9cea7544568855da8b8eecff05edbbaaaabcefdcff0b97e63333333457
-8865569dcff2fffff0fbff0cfe7ffffeefffd9445776eff7dfeeff09eb86
-7789998778778adff6ff02cbcdefebff0bfaa5333433433469dfffffbff2
-fffff0fbff0cfe7ffffeefffd9445776eff7dfeeff09eb86778999877877
-8adff6ff02cbcdefebff0bfaa5333433433469dfffffbff2fffff0fbff0c
-fe7ffffeefffd9445776eff7dfeeff09eb867789998778778adff6ff02cb
-cdefebff0bfaa5333433433469dfffffbff2fffff0fbff0bf9dfffcbaaab
-ceeb556cffabeeff0be769cedbb9988aa9abba88cff9ff05fea8998889ad
-ebff0a77344555455444467cffaff2fffff0fbff0bf9dfffcbaaabceeb55
-6cffabeeff0be769cedbb9988aa9abba88cff9ff05fea8998889adebff0a
-77344555455444467cffaff2fffff0fbff0bf9dfffcbaaabceeb556cffab
-eeff0be769cedbb9988aa9abba88cff9ff05fea8998889adebff0a773445
-55455444467cffaff2fffff0fbff0be8ff94443344446afb9efc8fefff0d
-fc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0ac874
-55544433344458ffbff2fffff0fbff0be8ff94443344446afb9efc8fefff
-0dfc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0ac8
-7455544433344458ffbff2fffff0fbff0be8ff94443344446afb9efc8fef
-ff0dfc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0a
-c87455544433344458ffbff2fffff0fbff0a9dc856789a987544dfffe7ef
-ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
-f7da53333333344456efbff2fffff0fbff0a9dc856789a987544dfffe7ef
-ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
-f7da53333333344456efbff2fffff0fbff0a9dc856789a987544dfffe7ef
-ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
-f7da53333333344456efbff2fffff0fbff0a8f998887765567977bffadef
-ff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89
-efedff0af9c85333333443344679cef2fffff0fbff0a8f99888776556797
-7bffadefff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5b
-ecfffc89efedff0af9c85333333443344679cef2fffff0fbff0a8f998887
-765567977bffadefff1ca58efffffffdcfefffceffffffeb8549ffffd996
-8ceffb5becfffc89efedff0af9c85333333443344679cef2fffff0fcff0b
-faad444444568aa86576df9ff0ff1dfa8efffffeffff9c885de67cffec9b
-fd848ddab98effffe754547ffffe89edff0afd9f645aa6434696445ecef2
-fffff0fcff0bfaad444444568aa86576df9ff0ff1dfa8efffffeffff9c88
-5de67cffec9bfd848ddab98effffe754547ffffe89edff0afd9f645aa643
-4696445ecef2fffff0fcff0bfaad444444568aa86576df9ff0ff1dfa8eff
-fffeffff9c885de67cffec9bfd848ddab98effffe754547ffffe89edff0a
-fd9f645aa6434696445ecef2fffff0fcff0bf666544565654458dec9bf9f
-f0ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d444734
-9aeffd8cedff097d443347984348684eddf2fffff0fcff0bf66654456565
-4458dec9bf9ff0ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88be
-fdca8d4447349aeffd8cedff097d443347984348684eddf2fffff0fcff0b
-f666544565654458dec9bf9ff0ff1e9bfffffff9c8d99aa9485967ee6766
-cf9c65be88befdca8d4447349aeffd8cedff097d443347984348684eddf2
-fffff0fcff0bb888aaa8877655554ceffdbff1ff20e8cfffffc9b9aaab69
-b74b69586865565ba6d786b7559c5d644945a3465da9ea8eeeff09786443
-3434685345bfbcf2fffff0fcff0bb888aaa8877655554ceffdbff1ff20e8
-cfffffc9b9aaab69b74b69586865565ba6d786b7559c5d644945a3465da9
-ea8eeeff097864433434685345bfbcf2fffff0fcff0bb888aaa887765555
-4ceffdbff1ff20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c
-5d644945a3465da9ea8eeeff097864433434685345bfbcf2fffff0fcff0b
-6efddb9865554445569ffaeff1ff218effffff887b8a8c57c66887475875
-4764655a869e644566d548a3943333335bd7dfefff099a44333344447944
-bfbaf2fffff0fcff0b6efddb9865554445569ffaeff1ff218effffff887b
-8a8c57c668874758754764655a869e644566d548a3943333335bd7dfefff
-099a44333344447944bfbaf2fffff0fcff0b6efddb9865554445569ffaef
-f1ff218effffff887b8a8c57c668874758754764655a869e644566d548a3
-943333335bd7dfefff099a44333344447944bfbaf2fffff0fdff0bfe7ffc
-544444555556666df8f1ff22f8cfbea86ea55d697e56d575a54645854655
-4355a64ba454439b34c454334333345a7befff099d544555433445b65dba
-f2fffff0fdff0bfe7ffc544444555556666df8f1ff22f8cfbea86ea55d69
-7e56d575a546458546554355a64ba454439b34c454334333345a7befff09
-9d544555433445b65dbaf2fffff0fdff0bfe7ffc544444555556666df8f1
-ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c4
-54334333345a7befff099d544555433445b65dbaf2fffff0fdff02fbae95
-fb44034547eee9f1ff239cdd9bc65bd55d677f56e574c454459645544345
-6855d555654d7386453344533334b99ff0ff09ab4444345543454885a9f2
-fffff0fdff02fbae95fb44034547eee9f1ff239cdd9bc65bd55d677f56e5
-74c4544596455443456855d555654d7386453344533334b99ff0ff09ab44
-44345543454885a9f2fffff0fdff02fbae95fb44034547eee9f1ff239cdd
-9bc65bd55d677f56e574c4544596455443456855d555654d738645334453
-3334b99ff0ff09ab4444345543454885a9f2fffff0fdff0bf8d9444578b9
-bcba75356e9cf2ff24f9aff768f549e55a857f55d463b444459547645445
-5655ab584844a3784643637443335bb8f0ff09baa443444345544448e9f2
-fffff0fdff0bf8d9444578b9bcba75356e9cf2ff24f9aff768f549e55a85
-7f55d463b4444595476454455655ab584844a3784643637443335bb8f0ff
-09baa443444345544448e9f2fffff0fdff0bf8d9444578b9bcba75356e9c
-f2ff24f9aff768f549e55a857f55d463b4444595476454455655ab584844
-a3784643637443335bb8f0ff09baa443444345544448e9f2fffff0fdff0b
-f7fb59bba8754444458def8ff2ff25bce9fa56f648f659956f55d4749444
-44a65784563455945b6594b4546c354363854333349b9ff1ff09aba43334
-5533344346e9f2fffff0fdff0bf7fb59bba8754444458def8ff2ff25bce9
-fa56f648f659956f55d474944444a65784563455945b6594b4546c354363
-854333349b9ff1ff09aba433345533344346e9f2fffff0fdff0bf7fb59bb
-a8754444458def8ff2ff25bce9fa56f648f659956f55d474944444a65784
-563455945b6594b4546c354363854333349b9ff1ff09aba4333455333443
-46e9f2fffff0fdff0bf7ffb854346788787569ce9ff3ff26fe8ff77655f6
-45f756a46e55a474744544b566a4754554a446846479864a454353754343
-43499cf1ff098d7643333568634446daf2fffff0fdff0bf7ffb854346788
-787569ce9ff3ff26fe8ff77655f645f756a46e55a474744544b566a47545
-54a446846479864a45435375434343499cf1ff098d7643333568634446da
-f2fffff0fdff0bf7ffb854346788787569ce9ff3ff26fe8ff77655f645f7
-56a46e55a474744544b566a4754554a446846479864a4543537543434349
-9cf1ff098d7643333568634446daf2fffff0fdff0bf8ff84589876555676
-6acd9ff3ff27e7ee99b445e754e945945f54c584654544b577c464545485
-66458a5d5c38644465454343434486eff2ff0a7f8ac7333334774446faef
-f3fffff0fdff0bf8ff845898765556766acd9ff3ff27e7ee99b445e754e9
-45945f54c584654544b577c46454548566458a5d5c386444654543434344
-86eff2ff0a7f8ac7333334774446faeff3fffff0fdff0bf8ff8458987655
-56766acd9ff3ff27e7ee99b445e754e945945f54c584654544b577c46454
-548566458a5d5c38644465454343434486eff2ff0a7f8ac7333334774446
-faeff3fffff0fdff0bf8fe576544455666567ace9ff3ff278dbb6a9544d8
-54da45a46f64d584554644c576c4858554655788fe8b8447844546444453
-4344467df3ff0bfe8e5544333334557554cbdff3fffff0fdff0bf8fe5765
-44455666567ace9ff3ff278dbb6a9544d854da45a46f64d584554644c576
-c4858554655788fe8b84478445464444534344467df3ff0bfe8e55443333
-34557554cbdff3fffff0fdff0bf8fe576544455666567ace9ff3ff278dbb
-6a9544d854da45a46f64d584554644c576c4858554655788fe8b84478445
-464444534344467df3ff0bfe8e5544333334557554cbdff3fffff0fdff0b
-fafc57555666655654448d8ff4ff29f8cff6489735c854bc55c56e54d584
-454844c578d485a6755433a47cf96445b4454735446444344456dff4ff02
-faae57fc3304355854ebdff3fffff0fdff0bfafc57555666655654448d8f
-f4ff29f8cff6489735c854bc55c56e54d584454844c578d485a6755433a4
-7cf96445b4454735446444344456dff4ff02faae57fc3304355854ebdff3
-fffff0fdff0bfafc57555666655654448d8ff4ff29f8cff6489735c854bc
-55c56e54d584454844c578d485a6755433a47cf96445b445473544644434
-4456dff4ff02faae57fc3304355854ebdff3fffff0fdff0bfdf9a44578ad
-b985445bff8ff4ff299afff6488a34c954ad54d66e44d494444655b679d4
-a5c59666c9c445bfb343b54555364465443444456ef4ff03f8efd543fc33
-0355a4cbeff3fffff0fdff0bfdf9a44578adb985445bff8ff4ff299afff6
-488a34c954ad54d66e44d494444655b679d4a5c59666c9c445bfb343b545
-55364465443444456ef4ff03f8efd543fc330355a4cbeff3fffff0fdff0b
-fdf9a44578adb985445bff8ff4ff299afff6488a34c954ad54d66e44d494
-444655b679d4a5c59666c9c445bfb343b54555364465443444456ef4ff03
-f8efd543fc330355a4cbeff3fffff0fcff0af67bdfea6546988655cf8ff5
-ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc3
-334543437735553444564434443446f4ff0bf7ffa43453333333347cebef
-f3fffff0fcff0af67bdfea6546988655cf8ff5ff2afaadff55487c34c954
-9d44c76c44b4a5445546975bc4a5d4a55dfdc33345434377355534445644
-34443446f4ff0bf7ffa43453333333347cebeff3fffff0fcff0af67bdfea
-6546988655cf8ff5ff2afaadff55487c34c9549d44c76c44b4a544554697
-5bc4a5d4a55dfdc3334543437735553444564434443446f4ff0bf7ffa434
-53333333347cebeff3fffff0fdff0bfcf9fb85456875543345cf8ff5ff2b
-a8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e53465
-554368345434445545454433446ef5ff0bf7fd533346334333345dfbeff3
-fffff0fdff0bfcf9fb85456875543345cf8ff5ff2ba8fb9d44486e34a754
-9c45d66a4594a4444446685ca47694844ae5e53465554368345434445545
-454433446ef5ff0bf7fd533346334333345dfbeff3fffff0fdff0bfcf9fb
-85456875543345cf8ff5ff2ba8fb9d44486e34a7549c45d66a4594a44444
-46685ca47694844ae5e53465554368345434445545454433446ef5ff0bf7
-fd533346334333345dfbeff3fffff0fdff0bfbfea558754444697657ff8f
-f6ff2dfa9ffe5e44466f45a7558b45e5763694b44544574d6c9576556347
-e4db747ca544683444344554454454353446eff6ff0ad654343334643443
-3489fbf2fffff0fdff0bfbfea558754444697657ff8ff6ff2dfa9ffe5e44
-466f45a7558b45e5763694b44544574d6c9576556347e4db747ca5446834
-44344554454454353446eff6ff0ad6543433346434433489fbf2fffff0fd
-ff0bfbfea558754444697657ff8ff6ff2dfa9ffe5e44466f45a7558b45e5
-763694b44544574d6c9576556347e4db747ca54468344434455445445435
-3446eff6ff0ad6543433346434433489fbf2fffff0fdff0bfaee88754445
-9b85448cfd9cf6ff2d9affff5b54565e5486547847d4644866844535457a
-4959fe9a6544d5affb4486866834443444644544643744468ef6ff0a958b
-433333364334347ffaf2fffff0fdff0bfaee887544459b85448cfd9cf6ff
-2d9affff5b54565e5486547847d4644866844535457a4959fe9a6544d5af
-fb4486866834443444644544643744468ef6ff0a958b433333364334347f
-faf2fffff0fdff0bfaee887544459b85448cfd9cf6ff2d9affff5b54565e
-5486547847d4644866844535457a4959fe9a6544d5affb44868668344434
-44644544643744468ef6ff0a958b433333364334347ffaf2fffff0fdff0b
-fadc985459da534784578ad8f7ff2ff8bffbbf7844566f54855455488444
-464853543646696fedcdc84a46555effa543545b44444344744644554764
-5ad7acf7ff0a74d543333333543343affbf2fffff0fdff0bfadc985459da
-534784578ad8f7ff2ff8bffbbf7844566f54855455488444464853543646
-696fedcdc84a46555effa543545b444443447446445547645ad7acf7ff0a
-74d543333333543343affbf2fffff0fdff0bfadc985459da534784578ad8
-f7ff2ff8bffbbf7844566f54855455488444464853543646696fedcdc84a
-46555effa543545b444443447446445547645ad7acf7ff0a74d543333333
-543343affbf2fffff0fdff0bfb9ba56ce9534775444598f7f8ff30fe7cff
-fc5f9654556f655455445846a7577a556577bf777855547a7b683836acee
-63455c5445444464574365448457ed9af8ff02fb8663fc33043433436ffa
-f2fffff0fdff0bfb9ba56ce9534775444598f7f8ff30fe7cfffc5f965455
-6f655455445846a7577a556577bf777855547a7b683836acee63455c5445
-444464574365448457ed9af8ff02fb8663fc33043433436ffaf2fffff0fd
-ff0bfb9ba56ce9534775444598f7f8ff30fe7cfffc5f9654556f65545544
-5846a7577a556577bf777855547a7b683836acee63455c54454444645743
-65448457ed9af8ff02fb8663fc33043433436ffaf2fffff0fdff0cfe8eda
-e9444454465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aa
-a954578887445aedc4bf8a7a76633455335b7b8487446447a94464445444
-8ff99ff9ff0be7e834334334333343343afbf2fffff0fdff0cfe8edae944
-4454465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aaa954
-578887445aedc4bf8a7a76633455335b7b8487446447a944644454448ff9
-9ff9ff0be7e834334334333343343afbf2fffff0fdff0cfe8edae9444454
-465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aaa9545788
-87445aedc4bf8a7a76633455335b7b8487446447a944644454448ff99ff9
-ff0be7e834334334333343343afbf2fffff0fcff0b7eec56b64346544455
-66ce9ffaff32fe7dffff7c7ba5565566487884963466556778887666789b
-effff65d9358c585455954ad8c73445534556644444334544cfe69f9ff0b
-7bd44334333343333334dfbef2fffff0fcff0b7eec56b6434654445566ce
-9ffaff32fe7dffff7c7ba5565566487884963466556778887666789befff
-f65d9358c585455954ad8c73445534556644444334544cfe69f9ff0b7bd4
-4334333343333334dfbef2fffff0fcff0b7eec56b6434654445566ce9ffa
-ff32fe7dffff7c7ba5565566487884963466556778887666789beffff65d
-9358c585455954ad8c73445534556644444334544cfe69f9ff0b7bd44334
-333343333334dfbef2fffff0fcff0b7c94774445544454445bef8cfaff0e
-e8dfffffa887b46644886ec7458aeff9ff1deefffffffe48ec5359484379
-58f9566ab87dbefecaa967675574578de69ffbff02f87b63f9330234ef9f
-f2fffff0fcff0b7c94774445544454445bef8cfaff0ee8dfffffa887b466
-44886ec7458aeff9ff1deefffffffe48ec535948437958f9566ab87dbefe
-caa967675574578de69ffbff02f87b63f9330234ef9ff2fffff0fcff0b7c
-94774445544454445bef8cfaff0ee8dfffffa887b46644886ec7458aeff9
-ff1deefffffffe48ec535948437958f9566ab87dbefecaa967675574578d
-e69ffbff02f87b63f9330234ef9ff2fffff0fcff0ca97bb6444444585446
-449ff8bffcff0dfe7effffaec7b6c46545bd7579cff2ff2ac57dc6335364
-543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494333433
-333334334afdaff2fffff0fcff0ca97bb6444444585446449ff8bffcff0d
-fe7effffaec7b6c46545bd7579cff2ff2ac57dc6335364543a58efffffb7
-9ffffffffdcb86557455cf97cffddeffea556494333433333334334afdaf
-f2fffff0fcff0ca97bb6444444585446449ff8bffcff0dfe7effffaec7b6
-c46545bd7579cff2ff2ac57dc6335364543a58efffffb79ffffffffdcb86
-557455cf97cffddeffea556494333433333334334afdaff2fffff0fcff0c
-c9ec64444448754475345fff89fcff0bc8efffea6bc6b484959866aef0ff
-08fe745885443334549ffcff01b6effcff17fdb685554bfc654456b847e7
-e633433343333333436ff9eff2fffff0fcff0cc9ec64444448754475345f
-ff89fcff0bc8efffea6bc6b484959866aef0ff08fe745885443334549ffc
-ff01b6effcff17fdb685554bfc654456b847e7e633433343333333436ff9
-eff2fffff0fcff0cc9ec64444448754475345fff89fcff0bc8efffea6bc6
-b484959866aef0ff08fe745885443334549ffcff01b6effcff17fdb68555
-4bfc654456b847e7e633433343333333436ff9eff2fffff0fcff1be7a644
-654595644853464cfff88dffffd99fffffc969e59595746aeff7ff00eff8
-ff0dea454589333684dffffdeffffc6ffaff0ea555635cfec8668aeff764
-54233334fc33014bf9f1fffff0fcff1be7a644654595644853464cfff88d
-ffffd99fffffc969e59595746aeff7ff00eff8ff0dea454589333684dfff
-fdeffffc6ffaff0ea555635cfec8668aeff76454233334fc33014bf9f1ff
-fff0fcff1be7a644654595644853464cfff88dffffd99fffffc969e59595
-746aeff7ff00eff8ff0dea454589333684dffffdeffffc6ffaff0ea55563
-5cfec8668aeff76454233334fc33014bf9f1fffff0fcff19f7d658546857
-4476447445efffb988889dffffff8957e564459ef8ff03fea9568ff8ff0d
-feedb845339d75bfffc57fffffb7faff0cfee644338ebdfb99eac5333553
-fb33023467ccf1fffff0fcff19f7d6585468574476447445efffb988889d
-ffffff8957e564459ef8ff03fea9568ff8ff0dfeedb845339d75bfffc57f
-ffffb7faff0cfee644338ebdfb99eac5333553fb33023467ccf1fffff0fc
-ff19f7d6585468574476447445efffb988889dffffff8957e564459ef8ff
-03fea9568ff8ff0dfeedb845339d75bfffc57fffffb7faff0cfee644338e
-bdfb99eac5333553fb33023467ccf1fffff0fcff0cfab7a5467465576447
-7544b9cffcff07fdecda5d56e437dff9ff05fecaaada35effaff10eeefff
-eedeb436e7487ff9a87efffff9affaff13cd554334448543443333334333
-43333334447a9ff1fffff0fcff0cfab7a54674655764477544b9cffcff07
-fdecda5d56e437dff9ff05fecaaada35effaff10eeefffeedeb436e7487f
-f9a87efffff9affaff13cd55433444854344333333433343333334447a9f
-f1fffff0fcff0cfab7a54674655764477544b9cffcff07fdecda5d56e437
-dff9ff05fecaaada35effaff10eeefffeedeb436e7487ff9a87efffff9af
-faff13cd55433444854344333333433343333334447a9ff1fffff0fcff0c
-fc9e94664655764458473455cefcff06f99b875d75838ff8ff04c4466553
-39faff11fe7445effffef955b3346ec8646effffef6dfaff02db9443fc33
-0034f7330248fe9ff1fffff0fcff0cfc9e94664655764458473455cefcff
-06f99b875d75838ff8ff04c446655339faff11fe7445effffef955b3346e
-c8646effffef6dfaff02db9443fc330034f7330248fe9ff1fffff0fcff0c
-fc9e94664655764458473455cefcff06f99b875d75838ff8ff04c4466553
-39faff11fe7445effffef955b3346ec8646effffef6dfaff02db9443fc33
-0034f7330248fe9ff1fffff0fbff157f9764556664457464345577fddfff
-ffea4a475d8434f8ff05fa444343336ff9ff10d844aeffefffd553338f94
-33afffffcfb7faff03fbd54334fc330b4334433333343333443dfadff1ff
-fff0fbff157f9764556664457464345577fddfffffea4a475d8434f8ff05
-fa444343336ff9ff10d844aeffefffd553338f9433afffffcfb7faff03fb
-d54334fc330b4334433333343333443dfadff1fffff0fbff157f97645566
-64457464345577fddfffffea4a475d8434f8ff05fa444343336ff9ff10d8
-44aeffefffd553338f9433afffffcfb7faff03fbd54334fc330b43344333
-33343333443dfadff1fffff0fbff158deb457866437655733543459b67ff
-ffa947584b8357f8ff05e433344336eff9ff10fea46cffeffc644358de64
-34dffffebff6faff02fe9944f533044233343ceaf0fffff0fbff158deb45
-7866437655733543459b67ffffa947584b8357f8ff05e433344336eff9ff
-10fea46cffeffc644358de6434dffffebff6faff02fe9944f53304423334
-3ceaf0fffff0fbff158deb457866437655733543459b67ffffa947584b83
-57f8ff05e433344336eff9ff10fea46cffeffc644358de6434dffffebff6
-faff02fe9944f533044233343ceaf0fffff0fbff15bbfb66969445554843
-4634554865faedb645594a639ef8ff04934334338ffbff14d7558dfffaaa
-cffffb4368adfe6338dfffffcff7effaff01c844fc33013434fc33054333
-33335e9ef0fffff0fbff15bbfb669694455548434634554865faedb64559
-4a639ef8ff04934334338ffbff14d7558dfffaaacffffb4368adfe6338df
-ffffcff7effaff01c844fc33013434fc3305433333335e9ef0fffff0fbff
-15bbfb669694455548434634554865faedb645594a639ef8ff0493433433
-8ffbff14d7558dfffaaacffffb4368adfe6338dfffffcff7effaff01c844
-fc33013434fc3305433333335e9ef0fffff0fbff14e9fb5d6b5446545544
-4534544685f77e7645674545f8ff04fd4335337cfbff15b5335646fffffc
-8bbffea8aeffed733aabaadedff8effaff01f854fa330043fb330334447b
-bff0fffff0fbff14e9fb5d6b54465455444534544685f77e7645674545f8
-ff04fd4335337cfbff15b5335646fffffc8bbffea8aeffed733aabaadedf
-f8effaff01f854fa330043fb330334447bbff0fffff0fbff14e9fb5d6b54
-465455444534544685f77e7645674545f8ff04fd4335337cfbff15b53356
-46fffffc8bbffea8aeffed733aabaadedff8effaff01f854fa330043fb33
-0334447bbff0fffff0fbff14f8c5d896547544644444344555a5f75c6654
-664489f8ff04f6335438bffcff15f946aeff74efffffd58ffffefffffa94
-368dfc8ccff7f9ff01fb44f433024475a9effffff0fbff14f8c5d8965475
-44644444344555a5f75c6654664489f8ff04f6335438bffcff15f946aeff
-74efffffd58ffffefffffa94368dfc8ccff7f9ff01fb44f433024475a9ef
-fffff0fbff14f8c5d896547544644444344555a5f75c6654664489f8ff04
-f6335438bffcff15f946aeff74efffffd58ffffefffffa94368dfc8ccff7
-f9ff01fb44f433024475a9effffff0fbff14fa6de8756574564454544436
-54b6f56a6754543bdff8ff12b4367469bffffffffc65cfffff849fffffb6
-9ffcff07f883357cfeebffe6f9ff09fd654333333334443334fc330253ad
-cceffffff0fbff14fa6de875657456445454443654b6f56a6754543bdff8
-ff12b4367469bffffffffc65cfffff849fffffb69ffcff07f883357cfeeb
-ffe6f9ff09fd654333333334443334fc330253adcceffffff0fbff14fa6d
-e875657456445454443654b6f56a6754543bdff8ff12b4367469bfffffff
-fc65cfffff849fffffb69ffcff07f883357cfeebffe6f9ff09fd65433333
-3334443334fc330253adcceffffff0fbff13fe8ffa756856554464634445
-55a5e56a7845535ff8ff04fc537fdaf5fcff0aa38fffffffd44efffffaae
-fcff07f98334bfffffffb7f9ff10fb64334333333344333433333343566e
-9feffffff0fbff13fe8ffa75685655446463444555a5e56a7845535ff8ff
-04fc537fdaf5fcff0aa38fffffffd44efffffaaefcff07f98334bfffffff
-b7f9ff10fb64334333333344333433333343566e9feffffff0fbff13fe8f
-fa75685655446463444555a5e56a7845535ff8ff04fc537fdaf5fcff0aa3
-8fffffffd44efffffaaefcff07f98334bfffffffb7f9ff10fb6433433333
-3344333433333343566e9feffffff0faff129ef759685457455443544555
-75b45a765443bff8ff04c57affffc6fcff0057fcff11f93dfffffc58efff
-fffffa53339efeffff8bf8ff0f84334333333344333334333433bf78cfef
-fffff0faff129ef75968545745544354455575b45a765443bff8ff04c57a
-ffffc6fcff0057fcff11f93dfffffc58effffffffa53339efeffff8bf8ff
-0f84334333333344333334333433bf78cfeffffff0faff129ef759685457
-45544354455575b45a765443bff8ff04c57affffc6fcff0057fcff11f93d
-fffffc58effffffffa53339efeffff8bf8ff0f8433433333334433333433
-3433bf78cfeffffff0faff11cbfb57954568484444444555548559675434
-f8ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc53
-3356779bff8df8ff0efc443533333344443333443646fe8aeefffff0faff
-11cbfb57954568484444444555548559675434f8ff20fd9bafffff6affff
-fffc5dfffcb9876639fffffe54bffffffffc533356779bff8df8ff0efc44
-3533333344443333443646fe8aeefffff0faff11cbfb5795456848444444
-4555548559675434f8ff20fd9bafffff6afffffffc5dfffcb9876639ffff
-fe54bffffffffc533356779bff8df8ff0efc443533333344443333443646
-fe8aeefffff0faff11f8fea9945895584534444956457459664437f7ff19
-e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fc330159
-7bf7ff0d743534333334443343535559fe8feefffff0faff11f8fea99458
-95584534444956457459664437f7ff19e8effffe4dfffffffa38fb533343
-3335cfffffc4bffffffffe93fc3301597bf7ff0d74353433333444334353
-5559fe8feefffff0faff11f8fea9945895584534444956457459664437f7
-ff19e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fc33
-01597bf7ff0d743534333334443343535559fe8feefffff0faff11fbafff
-8678c4644434445c5645544b66644bf7ff14eefffffa6ffffffffd345333
-34333894bffffff6bffcff06d4354456875449f7ff0dc434333333344445
-43537cbfd8efeefffff0faff11fbafff8678c4644434445c5645544b6664
-4bf7ff14eefffffa6ffffffffd34533334333894bffffff6bffcff06d435
-4456875449f7ff0dc43433333334444543537cbfd8efeefffff0faff11fb
-afff8678c4644434445c5645544b66644bf7ff14eefffffa6ffffffffd34
-533334333894bffffff6bffcff06d4354456875449f7ff0dc43433333334
-444543537cbfd8efeefffff0f9ff108efff6c894744444446b5645555b67
-544ef4ff11f7affffffffe533334333338b97ffffffeadfcff07f6464545
-557744eff8ff0cf5333433334333453356fffb6eedfffff0f9ff108efff6
-c894744444446b5645555b67544ef4ff11f7affffffffe533334333338b9
-7ffffffeadfcff07f6464545557744eff8ff0cf5333433334333453356ff
-fb6eedfffff0f9ff108efff6c894744444446b5645555b67544ef4ff11f7
-affffffffe533334333338b97ffffffeadfcff07f6464545557744eff8ff
-0cf5333433334333453356fffb6eedfffff0f9ff10e8eff8ea7544734454
-886544555b56648ff4ff01f4effcff0b5335843345338a7dffffff79fcff
-07fe469333435777cff8ff0cf644453333334466659efa77dfedfffff0f9
-ff10e8eff8ea7544734454886544555b56648ff4ff01f4effcff0b533584
-3345338a7dffffff79fcff07fe469333435777cff8ff0cf6444533333344
-66659efa77dfedfffff0f9ff10e8eff8ea7544734454886544555b56648f
-f4ff01f4effcff0b5335843345338a7dffffff79fcff07fe469333435777
-cff8ff0cf644453333334466659efa77dfedfffff0f9ff10fd9dfceb6559
-533844a59554565a5554eff4ff00e6fcff0cfe45bdc43344436edeffffff
-67fcff07fe747334334789eff8ff0bfb4446333344458e66b758efecffff
-f0f9ff10fd9dfceb6559533844a59554565a5554eff4ff00e6fcff0cfe45
-bdc43344436edeffffff67fcff07fe747334334789eff8ff0bfb44463333
-44458e66b758efecfffff0f9ff10fd9dfceb6559533844a59554565a5554
-eff4ff00e6fcff0cfe45bdc43344436edeffffff67fcff07fe7473343347
-89eff8ff0bfb4446333344458e66b758efecfffff0f8ff0ef8efee669a43
-484585b4657649453cf3ff009afbff0b4cffd33333435daefffffe5dfcff
-06eec533333336bff7ff09fd69b643345874bd636beafffff0f8ff0ef8ef
-ee669a43484585b4657649453cf3ff009afbff0b4cffd33333435daeffff
-fe5dfcff06eec533333336bff7ff09fd69b643345874bd636beafffff0f8
-ff0ef8efee669a43484585b4657649453cf3ff009afbff0b4cffd3333343
-5daefffffe5dfcff06eec533333336bff7ff09fd69b643345874bd636bea
-fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff007efbff0b88fe
-f5333334775ffffff8affcff07feeb43333356768ff7ff07c9fb87dcfed8
-76ade9fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff007efbff
-0b88fef5333334775ffffff8affcff07feeb43333356768ff7ff07c9fb87
-dcfed876ade9fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff00
-7efbff0b88fef5333334775ffffff8affcff07feeb43333356768ff7ff07
-c9fb87dcfed876ade9fffff0f7ff0ccbffbae86594775d6684547655f2ff
-006ffbff07e77cdc433346a56ff6ff0583333377845ff7ff06f566887777
-8bdffbff07feffdfdffffffffef5fffff0f7ff0ccbffbae86594775d6684
-547655f2ff006ffbff07e77cdc433346a56ff6ff0583333377845ff7ff06
-f5668877778bdffbff07feffdfdffffffffef5fffff0f7ff0ccbffbae865
-94775d6684547655f2ff006ffbff07e77cdc433346a56ff6ff0583333377
-845ff7ff06f5668877778bdffbff07feffdfdffffffffef5fffff0f7ff0c
-fdaeefffda55b4ab586554954bf3ff01fc4efcff08feeda49fd88989b59f
-f6ff05d445569c94cff7ff03fbdedeeffbff0ddeffe58bff6e6ffffebde5
-97bdbef8fffff0f7ff0cfdaeefffda55b4ab586554954bf3ff01fc4efcff
-08feeda49fd88989b59ff6ff05d445569c94cff7ff03fbdedeeffbff0dde
-ffe58bff6e6ffffebde597bdbef8fffff0f7ff0cfdaeefffda55b4ab5865
-54954bf3ff01fc4efcff08feeda49fd88989b59ff6ff05d445569c94cff7
-ff03fbdedeeffbff0ddeffe58bff6e6ffffebde597bdbef8fffff0f6ff0b
-fabdfffcbb49e6bf7654854ff3ff01f95efaff05fd67aab75558f5ff05f9
-45669859dff6ff008ff9ff0fa4cff738fe579fcbfe76db549b6577affaff
-fff0f6ff0bfabdfffcbb49e6bf7654854ff3ff01f95efaff05fd67aab755
-58f5ff05f945669859dff6ff008ff9ff0fa4cff738fe579fcbfe76db549b
-6577affafffff0f6ff0bfabdfffcbb49e6bf7654854ff3ff01f95efaff05
-fd67aab75558f5ff05f945669859dff6ff008ff9ff0fa4cff738fe579fcb
-fe76db549b6577affafffff0f5ff0afcacfc94aa79fd6855578ff3ff01f5
-9efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5dff56fd45
-eb48dfa55d849b46b6effafffff0f5ff0afcacfc94aa79fd6855578ff3ff
-01f59efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5dff56
-fd45eb48dfa55d849b46b6effafffff0f5ff0afcacfc94aa79fd6855578f
-f3ff01f59efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5d
-ff56fd45eb48dfa55d849b46b6effafffff0f4ff09febabefecffcde8cd5
-dff3ff01e6aef9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8
-ee5dd436bff846d48c4c6ef9fffff0f4ff09febabefecffcde8cd5dff3ff
-01e6aef9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8ee5dd4
-36bff846d48c4c6ef9fffff0f4ff09febabefecffcde8cd5dff3ff01e6ae
-f9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8ee5dd436bff8
-46d48c4c6ef9fffff0f2ff06bbbbceffffffe5f2ff0198ccf7ff01efdff3
-ff04fd58fff97ff6ff00f8f8ff0efa6fffffec59358876446467558aeffa
-fffff0f2ff06bbbbceffffffe5f2ff0198ccf7ff01efdff3ff04fd58fff9
-7ff6ff00f8f8ff0efa6fffffec59358876446467558aeffafffff0f2ff06
-bbbbceffffffe5f2ff0198ccf7ff01efdff3ff04fd58fff97ff6ff00f8f8
-ff0efa6fffffec59358876446467558aeffafffff0f0ff04ecbcceff69f2
-ff025cfacee8ff03a4cffb58f6ff01fbcffaff0fcaa957766664678889bd
-eff9fffffebffafffff0f0ff04ecbcceff69f2ff025cfacee8ff03a4cffb
-58f6ff01fbcffaff0fcaa957766664678889bdeff9fffffebffafffff0f0
-ff04ecbcceff69f2ff025cfacee8ff03a4cffb58f6ff01fbcffaff0fcaa9
-57766664678889bdeff9fffffebffafffff0eeff02fdc94ef3ff03fd3efb
-cde8ff04f77ffe46dff6ff009ffaff047bcc89bceffaff04faffffffbffa
-fffff0eeff02fdc94ef3ff03fd3efbcde8ff04f77ffe46dff6ff009ffaff
-047bcc89bceffaff04faffffffbffafffff0eeff02fdc94ef3ff03fd3efb
-cde8ff04f77ffe46dff6ff009ffaff047bcc89bceffaff04faffffffbffa
-fffff0edff01f96ff3ff03f73cfedde8ff04fb4dffa78ef6ff00dafaff02
-8fffcff8ff04fafffffebffafffff0edff01f96ff3ff03f73cfedde8ff04
-fb4dffa78ef6ff00dafaff028fffcff8ff04fafffffebffafffff0edff01
-f96ff3ff03f73cfedde8ff04fb4dffa78ef6ff00dafaff028fffcff8ff04
-fafffffebffafffff0edff01f4cff3ff03d54efffee7ff0498fff5d7eef7
-ff01f9effbff029ffeaffcff08eddbba9997ab79adbffafffff0edff01f4
-cff3ff03d54efffee7ff0498fff5d7eef7ff01f9effbff029ffeaffcff08
-eddbba9997ab79adbffafffff0edff01f4cff3ff03d54efffee7ff0498ff
-f5d7eef7ff01f9effbff029ffeaffcff08eddbba9997ab79adbffafffff0
-edff00c6f2ff027956dfe6ff04e5eff78e7df7ff01fe9ffcff10fd787658
-a987765445785796a8dd55a9cffafffff0edff00c6f2ff027956dfe6ff04
-e5eff78e7df7ff01fe9ffcff10fd787658a987765445785796a8dd55a9cf
-fafffff0edff00c6f2ff027956dfe6ff04e5eff78e7df7ff01fe9ffcff10
-fd787658a987765445785796a8dd55a9cffafffff0edff007af3ff02fc5f
-b7e5ff05f56ff95fe9cff7ff00dbfcff0ffe9a7684bbb968d74bff78f9fe
-df97dff9fffff0edff007af3ff02fc5fb7e5ff05f56ff95fe9cff7ff00db
-fcff0ffe9a7684bbb968d74bff78f9fedf97dff9fffff0edff007af3ff02
-fc5fb7e5ff05f56ff95fe9cff7ff00dbfcff0ffe9a7684bbb968d74bff78
-f9fedf97dff9fffff0eeff01fe4ef3ff02f78f95f0ff00edf6ff06fd5dfa
-4effaaeff8ff01fbdffbff0d9bd5fffe6af94aff77f9ffefe7dff9fffff0
-eeff01fe4ef3ff02f78f95f0ff00edf6ff06fd5dfa4effaaeff8ff01fbdf
-fbff0d9bd5fffe6af94aff77f9ffefe7dff9fffff0eeff01fe4ef3ff02f7
-8f95f0ff00edf6ff06fd5dfa4effaaeff8ff01fbdffbff0d9bd5fffe6af9
-4aff77f9ffefe7dff9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4
-aeffecf8ff0688fc4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9
-fffff7dff9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4aeffecf8
-ff0688fc4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9fffff7df
-f9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4aeffecf8ff0688fc
-4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9fffff7dff9fffff0
-eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
-fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
-eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
-fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
-eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
-fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
-eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c59fc
-ff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9ffff
-f0eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c59
-fcff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9ff
-fff0eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c
-59fcff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9
-fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff01685a
-fbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7df
-f9fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff0168
-5afbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7
-dff9fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff01
-685afbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8ffff
-f7dff9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458d
-f8ff01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6
-dff9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458df8
-ff01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6df
-f9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458df8ff
-01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6dff9
-fffff0eeff005ef5ff02fe55dffcff00abf4ff08f5affffffffeb858effa
-ff01d54eeeff0d8bc7fffe4afc5aff77f8fffff6eff9fffff0eeff005ef5
-ff02fe55dffcff00abf4ff08f5affffffffeb858effaff01d54eeeff0d8b
-c7fffe4afc5aff77f8fffff6eff9fffff0eeff005ef5ff02fe55dffcff00
-abf4ff08f5affffffffeb858effaff01d54eeeff0d8bc7fffe4afc5aff77
-f8fffff6eff9fffff0efff01fb5ff5ff01c44dfbff00eff4ff0098faff01
-d74bfaff02fc4befefff0d7bb7fffe4afd4aff87f8fffff6eff9fffff0ef
-ff01fb5ff5ff01c44dfbff00eff4ff0098faff01d74bfaff02fc4befefff
-0d7bb7fffe4afd4aff87f8fffff6eff9fffff0efff01fb5ff5ff01c44dfb
-ff00eff4ff0098faff01d74bfaff02fc4befefff0d7bb7fffe4afd4aff87
-f8fffff6eff9fffff0efff01f6bff6ff02fd44cfefff01fc4df9ff01b58e
-faff0474dfedc88af2ff0d7bb7fffe49fe4bff78f7fffff6eff9fffff0ef
-ff01f6bff6ff02fd44cfefff01fc4df9ff01b58efaff0474dfedc88af2ff
-0d7bb7fffe49fe4bff78f7fffff6eff9fffff0efff01f6bff6ff02fd44cf
-efff01fc4df9ff01b58efaff0474dfedc88af2ff0d7bb7fffe49fe4bff78
-f7fffff6eff9fffff0efff00b5f5ff01b55ceeff04f6cfb6448efbff01a5
-affbff0596544557776df3ff0d7bb7fffe49fe4cff78f8fffff6eff9ffff
-f0efff00b5f5ff01b55ceeff04f6cfb6448efbff01a5affbff0596544557
-776df3ff0d7bb7fffe49fe4cff78f8fffff6eff9fffff0efff00b5f5ff01
-b55ceeff04f6cfb6448efbff01a5affbff0596544557776df3ff0d7bb7ff
-fe49fe4cff78f8fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05
-e6f8357755dffcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe
-4cff88f7fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05e6f835
-7755dffcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe4cff88
-f7fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05e6f8357755df
-fcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe4cff88f7ffff
-f6eff9fffff0f0ff01f59ff8ff03eb7457afedff05a8a37ffffceffbff02
-fa57dff8ff01fa8ff4ff0d7bb8fffd4afe4dff89f7fffff6eff9fffff0f0
-ff01f59ff8ff03eb7457afedff05a8a37ffffceffbff02fa57dff8ff01fa
-8ff4ff0d7bb8fffd4afe4dff89f7fffff6eff9fffff0f0ff01f59ff8ff03
-eb7457afedff05a8a37ffffceffbff02fa57dff8ff01fa8ff4ff0d7bb8ff
-fd4afe4dff89f7fffff6eff9fffff0f0ff0086faff05eca876678ccdecff
-027d53bff7ff01e75bf7ff005ff4ff0c7cb8fffd4afe4cffacf8fffff6f8
-fffff0f0ff0086faff05eca876678ccdecff027d53bff7ff01e75bf7ff00
-5ff4ff0c7cb8fffd4afe4cffacf8fffff6f8fffff0f0ff0086faff05eca8
-76678ccdecff027d53bff7ff01e75bf7ff005ff4ff0c7cb8fffd4afe4cff
-acf8fffff6f8fffff0f1ff01fa4efcff08fb75468beffe9db9efedff026d
-84eff6ff0185aff8ff006df4ff0c6cb8fffc4bfb4dff8cf7fffff5f8ffff
-f0f1ff01fa4efcff08fb75468beffe9db9efedff026d84eff6ff0185aff8
-ff006df4ff0c6cb8fffc4bfb4dff8cf7fffff5f8fffff0f1ff01fa4efcff
-08fb75468beffe9db9efedff026d84eff6ff0185aff8ff006df4ff0c6cb8
-fffc4bfb4dff8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bfffffff
-fa8abfedff076dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4b
-fb4cff8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bffffffffa8abf
-edff076dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4bfb4cff
-8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bffffffffa8abfedff07
-6dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4bfb4cff8cf7ff
-fff5f8fffff0f2ff01fa4cfcff0284efe9fcff02fe87bfedff07befdffff
-75dca65ef1ff00a9f4ff0c6da9fffc4bfb4cff8bf7fffff5f8fffff0f2ff
-01fa4cfcff0284efe9fcff02fe87bfedff07befdffff75dca65ef1ff00a9
-f4ff0c6da9fffc4bfb4cff8bf7fffff5f8fffff0f2ff01fa4cfcff0284ef
-e9fcff02fe87bfedff07befdffff75dca65ef1ff00a9f4ff0c6da9fffc4b
-fb4cff8bf7fffff5f8fffff0f2ff0873bffffffffd4bff9dfbff01c4efed
-ff07dcfffffe43643567f1ff00a9f4ff0c6c99fffb4bfb4cff8cf7fffff5
-f8fffff0f2ff0873bffffffffd4bff9dfbff01c4efedff07dcfffffe4364
-3567f1ff00a9f4ff0c6c99fffb4bfb4cff8cf7fffff5f8fffff0f2ff0873
-bffffffffd4bff9dfbff01c4efedff07dcfffffe43643567f1ff00a9f4ff
-0c6c99fffb4bfb4cff8cf7fffff5f8fffff0f3ff01f939fcff03f66fff7f
-fbff00f6f1ff00cef9ff06fe433333569adff4ff01db7cf4ff0c5d99fffb
-4aa539ff7cf7fffff5f8fffff0f3ff01f939fcff03f66fff7ffbff00f6f1
-ff00cef9ff06fe433333569adff4ff01db7cf4ff0c5d99fffb4aa539ff7c
-f7fffff5f8fffff0f3ff01f939fcff03f66fff7ffbff00f6f1ff00cef9ff
-06fe433333569adff4ff01db7cf4ff0c5d99fffb4aa539ff7cf7fffff5f8
-fffff0f3ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe63
-33333b546ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8ffff
-f0f3ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe633333
-3b546ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8fffff0f3
-ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe6333333b54
-6ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8fffff0f3ff09
-f4effea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553a
-f5ff02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f4
-effea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553af5
-ff02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f4ef
-fea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553af5ff
-02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f77863
-577347dffffb9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff028344
-7ff4ff0c6ec8fffb4afff9344497ffffe5f8fffff0f3ff09f77863577347
-dffffb9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff0283447ff4ff
-0c6ec8fffb4afff9344497ffffe5f8fffff0f3ff09f77863577347dffffb
-9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff0283447ff4ff0c6ec8
-fffb4afff9344497ffffe5f8fffff0f3ff09fe99abfffedffffffabffbff
-01f8c9f5ff005df1ff026cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe4
-6745a7fffeb6f8fffff0f3ff09fe99abfffedffffffabffbff01f8c9f5ff
-005df1ff026cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe46745a7fffe
-b6f8fffff0f3ff09fe99abfffedffffffabffbff01f8c9f5ff005df1ff02
-6cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe46745a7fffeb6f8fffff0
-ebff01f9dffbff01f8f8f1ff01baeff6ff025ce4aff8ff03fe743337f3ff
-0c5eb8fffa45ffe5ff6cf7eadda6f8fffff0ebff01f9dffbff01f8f8f1ff
-01baeff6ff025ce4aff8ff03fe743337f3ff0c5eb8fffa45ffe5ff6cf7ea
-dda6f8fffff0ebff01f9dffbff01f8f8f1ff01baeff6ff025ce4aff8ff03
-fe743337f3ff0c5eb8fffa45ffe5ff6cf7eadda6f8fffff0ebff01f8dffb
-ff01f8f8f2ff05c5464afffffefaff03fe6ff57ff9ff04feb643345ef3ff
-0c4eb8fff944cf88ff5bf7a37ba6f8fffff0ebff01f8dffbff01f8f8f2ff
-05c5464afffffefaff03fe6ff57ff9ff04feb643345ef3ff0c4eb8fff944
-cf88ff5bf7a37ba6f8fffff0ebff01f8dffbff01f8f8f2ff05c5464affff
-fefaff03fe6ff57ff9ff04feb643345ef3ff0c4eb8fff944cf88ff5bf7a3
-7ba6f8fffff0ebff01f9cffbff01f9e7f2ff05aedfe5bffdeff8ff01f99f
-faff05eed7433346bff3ff0c4db9fff846df59ff6bf7a35ca7f8fffff0eb
-ff01f9cffbff01f9e7f2ff05aedfe5bffdeff8ff01f99ffaff05eed74333
-46bff3ff0c4db9fff846df59ff6bf7a35ca7f8fffff0ebff01f9cffbff01
-f9e7f2ff05aedfe5bffdeff8ff01f99ffaff05eed7433346bff3ff0c4db9
-fff846df59ff6bf7a35ca7f8fffff0ebff01f9cffbff02fac8dff1ff02fc
-4df8efff04fc64333378f2ff0c4ca9fff639ee84af5bf7834b97f8fffff0
-ebff01f9cffbff02fac8dff1ff02fc4df8efff04fc64333378f2ff0c4ca9
-fff639ee84af5bf7834b97f8fffff0ebff01f9cffbff02fac8dff1ff02fc
-4df8efff04fc64333378f2ff0c4ca9fff639ee84af5bf7834b97f8fffff0
-ebff01fabffaff01a85ef0ff0179e8f0ff05fe853333356ef2ff0c4da558
-5445759a5a5bf7c69b97f8fffff0ebff01fabffaff01a85ef0ff0179e8f0
-ff05fe853333356ef2ff0c4da5585445759a5a5bf7c69b97f8fffff0ebff
-01fabffaff01a85ef0ff0179e8f0ff05fe853333356ef2ff0c4da5585445
-759a5a5bf7c69b97f8fffff0ebff01fb9ff9ff0097f0ff01d6aaf0ff05e7
-43433346dff2ff0c4da85eedba8654444bf7edfb97f8fffff0ebff01fb9f
-f9ff0097f0ff01d6aaf0ff05e743433346dff2ff0c4da85eedba8654444b
-f7edfb97f8fffff0ebff01fb9ff9ff0097f0ff01d6aaf0ff05e743433346
-dff2ff0c4da85eedba8654444bf7edfb97f8fffff0ebff01fd8ff9ff01e6
-cff1ff01f96af1ff05fe743433346ef1ff0c5d8668aceffffffe5bf7effc
-97f8fffff0ebff01fd8ff9ff01e6cff1ff01f96af1ff05fe743433346ef1
-ff0c5d8668aceffffffe5bf7effc97f8fffff0ebff01fd8ff9ff01e6cff1
-ff01f96af1ff05fe743433346ef1ff0c5d8668aceffffffe5bf7effc97f8
-fffff0ebff01fe7ff9ff01f89ff1ff01fe58f3ff07feede744443346dff1
-ff0c7d746456555666685bf7fffd98f8fffff0ebff01fe7ff9ff01f89ff1
-ff01fe58f3ff07feede744443346dff1ff0c7d746456555666685bf7fffd
-98f8fffff0ebff01fe7ff9ff01f89ff1ff01fe58f3ff07feede744443346
-dff1ff0c7d746456555666685bf7fffd98f8fffff0eaff007ff9ff01eb8f
-f0ff00b5f1ff05c889755459eff1ff0c6c8555bfffffec585bf7fffda8f8
-fffff0eaff007ff9ff01eb8ff0ff00b5f1ff05c889755459eff1ff0c6c85
-55bfffffec585bf7fffda8f8fffff0eaff007ff9ff01eb8ff0ff00b5f1ff
-05c889755459eff1ff0c6c8555bfffffec585bf7fffda8f8fffff0eaff00
-7ff9ff01bd8ff0ff01f6cff2ff09eeffedbafd8efffeeedff6ff0dfe6965
-97feffffffd55bf6fffea9f8fffff0eaff007ff9ff01bd8ff0ff01f6cff2
-ff09eeffedbafd8efffeeedff6ff0dfe696597feffffffd55bf6fffea9f8
-fffff0eaff007ff9ff01bd8ff0ff01f6cff2ff09eeffedbafd8efffeeedf
-f6ff0dfe696597feffffffd55bf6fffea9f8fffff0eaff007ef9ff01db9c
-f0ff01fb8fedff06fb67656764666df9ff0efd84434658abceeeecb64af6
-fffea8f8fffff0eaff007ef9ff01db9cf0ff01fb8fedff06fb6765676466
-6df9ff0efd84434658abceeeecb64af6fffea8f8fffff0eaff007ef9ff01
-db9cf0ff01fb8fedff06fb67656764666df9ff0efd84434658abceeeecb6
-4af6fffea8f8fffff0eaff009bf9ff01f9c8efff007eecff05ccfffebefe
-7af9ff0ef86aa98999a8764444364af6fffea9f8fffff0eaff009bf9ff01
-f9c8efff007eecff05ccfffebefe7af9ff0ef86aa98999a8764444364af6
-fffea9f8fffff0eaff009bf9ff01f9c8efff007eecff05ccfffebefe7af9
-ff0ef86aa98999a8764444364af6fffea9f8fffff0eaff00baf9ff02fe95
-acf0ff00d8ecff06fbdf97cceee6effaff0eb86544665567594666444ae6
-fffd9af8fffff0eaff00baf9ff02fe95acf0ff00d8ecff06fbdf97cceee6
-effaff0eb86544665567594666444ae6fffd9af8fffff0eaff00baf9ff02
-fe95acf0ff00d8ecff06fbdf97cceee6effaff0eb8654466556759466644
-4ae6fffd9af8fffff0eaff00d8f8ff03fbcb88eff2ff01fd8fedff06fe9e
-b4386efc7ffaff0efeb764957acb5756544649d5fffd8af8fffff0eaff00
-d8f8ff03fbcb88eff2ff01fd8fedff06fe9eb4386efc7ffaff0efeb76495
-7acb5756544649d5fffd8af8fffff0eaff00d8f8ff03fbcb88eff2ff01fd
-8fedff06fe9eb4386efc7ffaff0efeb764957acb5756544649d5fffd8af8
-fffff0eaff00f7f8ff04fcbffd88eff2ff00c9edff06fd7ed5439eff8af8
-ff0ce5f7aefe6ecdbddc58d6fffc8af8fffff0eaff00f7f8ff04fcbffd88
-eff2ff00c9edff06fd7ed5439eff8af8ff0ce5f7aefe6ecdbddc58d6fffc
-8af8fffff0eaff00f7f8ff04fcbffd88eff2ff00c9edff06fd7ed5439eff
-8af8ff0ce5f7aefe6ecdbddc58d6fffc8af8fffff0eaff00f7f7ff03baac
-fd7cf2ff01fc9ff1ff0aeffebaa638e8547fffd5dff9ff0ce5f6adec58de
-ebba57e6fffb8af8fffff0eaff00f7f7ff03baacfd7cf2ff01fc9ff1ff0a
-effebaa638e8547fffd5dff9ff0ce5f6adec58deebba57e6fffb8af8ffff
-f0eaff00f7f7ff03baacfd7cf2ff01fc9ff1ff0aeffebaa638e8547fffd5
-dff9ff0ce5f6adec58deebba57e6fffb8af8fffff0eaff01facff7ff03eb
-9cf7dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10fe
-b5b76554445569a738f6fffa88ccccdffbfffff0eaff01facff7ff03eb9c
-f7dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10feb5
-b76554445569a738f6fffa88ccccdffbfffff0eaff01facff7ff03eb9cf7
-dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10feb5b7
-6554445569a738f6fffa88ccccdffbfffff0eaff01fd9ff6ff02fab86af2
-ff1be749effecbceefffeed996543344444333334bdeb36a454779bec68e
-fbff00b6fb440b5444564ae6fffd855554456dfcfffff0eaff01fd9ff6ff
-02fab86af2ff1be749effecbceefffeed996543344444333334bdeb36a45
-4779bec68efbff00b6fb440b5444564ae6fffd855554456dfcfffff0eaff
-01fd9ff6ff02fab86af2ff1be749effecbceefffeed99654334444433333
-4bdeb36a454779bec68efbff00b6fb440b5444564ae6fffd855554456dfc
-fffff0e9ff006ff6ff02fe99e7f1ff08a455533469cdcdb643f93326349f
-fff73435469766774688898899996444455555455555454af6ffff864544
-44489afffffff0e9ff006ff6ff02fe99e7f1ff08a455533469cdcdb643f9
-3326349ffff73435469766774688898899996444455555455555454af6ff
-ff86454444489afffffff0e9ff006ff6ff02fe99e7f1ff08a455533469cd
-cdb643f93326349ffff73435469766774688898899996444455555455555
-454af6ffff86454444489afffffff0e9ff008df6ff02f9e8f8f1ff06fc44
-5bdcdb9754fb33143444334438fffffd455844678bdfdacebaabababa8fa
-990f98775cf5efff78bbcbaaaab77ffffff0e9ff008df6ff02f9e8f8f1ff
-06fc445bdcdb9754fb33143444334438fffffd455844678bdfdacebaabab
-aba8fa990f98775cf5efff78bbcbaaaab77ffffff0e9ff008df6ff02f9e8
-f8f1ff06fc445bdcdb9754fb33143444334438fffffd455844678bdfdace
-baabababa8fa990f98775cf5efff78bbcbaaaab77ffffff0e9ff00d8f6ff
-02f8d9acf0ff04e534444343fc332c4433456655437ffffffe466857eca3
-7be8788767888888778799998aaabbba5bc5efff7899866658869ffffff0
-e9ff00d8f6ff02f8d9acf0ff04e534444343fc332c4433456655437fffff
-fe466857eca37be8788767888888778799998aaabbba5bc5efff78998666
-58869ffffff0e9ff00d8f6ff02f8d9acf0ff04e534444343fc332c443345
-6655437ffffffe466857eca37be8788767888888778799998aaabbba5bc5
-efff7899866658869ffffff0e9ff00f7f6ff02f98e8ef0ff35fc74333334
-688887abcbaaefefded9afffffff488666fed347c49ddcbbaabbba75a469
-c85cccdccb7db5cffe7cfff8bd6ff9cffffff0e9ff00f7f6ff02f98e8ef0
-ff35fc74333334688887abcbaaefefded9afffffff488666fed347c49ddc
-bbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0e9ff00f7
-f6ff02f98e8ef0ff35fc74333334688887abcbaaefefded9afffffff4886
-66fed347c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cf
-fffff0e9ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b5
-85dfe447c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dfffff
-f0e9ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b585df
-e447c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0e9
-ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b585dfe447
-c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0e9ff01
-f8dff7ff02f78cafecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff
-15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9dffffff0e9ff01f8dff7ff
-02f78cafecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff15a7f48f
-e99fffffff8ff5dffe6dfff9ce6ff9dffffff0e9ff01f8dff7ff02f78caf
-ecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff15a7f48fe99fffff
-ff8ff5dffe6dfff9ce6ff9dffffff0e9ff01fbaff7ff02f96cafe2ff0bfb
-8ffffffe58d8955ff65cb6faff1596e58ff88ffffffd7ee5dfff6dfff8cd
-7ff9effffff0e9ff01fbaff7ff02f96cafe2ff0bfb8ffffffe58d8955ff6
-5cb6faff1596e58ff88ffffffd7ee5dfff6dfff8cd7ff9effffff0e9ff01
-fbaff7ff02f96cafe2ff0bfb8ffffffe58d8955ff65cb6faff1596e58ff8
-8ffffffd7ee5dfff6dfff8cd7ff9effffff0e8ff007ff6ff01798fe2ff0b
-f6dffffffd58e7765ef66e97faff1596f57ff98ffffffd7ff5efff6dfff8
-dd8ff8effffff0e8ff007ff6ff01798fe2ff0bf6dffffffd58e7765ef66e
-97faff1596f57ff98ffffffd7ff5efff6dfff8dd8ff8effffff0e8ff007f
-f6ff01798fe2ff0bf6dffffffd58e7765ef66e97faff1596f57ff98fffff
-fd7ff5efff6dfff8dd8ff8effffff0e8ff00baf6ff01f66ce2ff0bc6ffff
-fffd69e6685be66f88faff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7
-fffffff0e8ff00baf6ff01f66ce2ff0bc6fffffffd69e6685be66f88faff
-1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e8ff00baf6ff01
-f66ce2ff0bc6fffffffd69e6685be66f88faff1596f59ff99ffffffe8fe6
-ffff5efff8ec9ff7fffffff0e8ff00f7f6ff03fe87fffde5ff0cfe7dffff
-fffc5af67938d67f6afaff15a5d59ff89fffffff9fe7ffff5efff8fbaff7
-fffffff0e8ff00f7f6ff03fe87fffde5ff0cfe7dfffffffc5af67938d67f
-6afaff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e8ff00f7
-f6ff03fe87fffde5ff0cfe7dfffffffc5af67938d67f6afaff15a5d59ff8
-9fffffff9fe7ffff5efff8fbaff7fffffff0e8ff01f9cff6ff02fbbff7e6
-ff0dfd88effffffffb5ce67935d78e5efaff1595c49ff89fffffff9fe7ff
-ff5efff8fabff6fffffff0e8ff01f9cff6ff02fbbff7e6ff0dfd88efffff
-fffb5ce67935d78e5efaff1595c49ff89fffffff9fe7ffff5efff8fabff6
-fffffff0e8ff01f9cff6ff02fbbff7e6ff0dfd88effffffffb5ce67935d7
-8e5efaff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e8ff01
-fd8ff5ff01aee8e9ff04fefeb88aeffcff07fb4ec8a944b7ad5ffaff1596
-c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e8ff01fd8ff5ff01ae
-e8e9ff04fefeb88aeffcff07fb4ec8a944b7ad5ffaff1596c49ff7afffff
-ff9fe7ffff5ffff8f9dff7fffffff0e8ff01fd8ff5ff01aee8e9ff04fefe
-b88aeffcff07fb4ec8a944b7ad5ffaff1596c49ff7afffffff9fe7ffff5f
-fff8f9dff7fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788
-cffaff07fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8
-f8efe6fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788cffa
-ff07fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8f8ef
-e6fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788cffaff07
-fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8f8efe6ff
-fffff0e7ff00b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faa
-e6a566d79ffaff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0
-e7ff00b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faae6a566
-d79ffaff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e7ff00
-b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faae6a566d79ffa
-ff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e7ff01f9bff6
-ff03cbb9fe8ff3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586
-d4aff5affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff01f9bff6ff03cb
-b9fe8ff3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586d4aff5
-affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff01f9bff6ff03cbb9fe8f
-f3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586d4aff5afffff
-fe7fe8ffff7ffff7f7ffb5fffffff0e6ff007ef6ff03adc9fadff3ff08b5
-44333334333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9f
-e8ffff7fffe8f7ffc8fffffff0e6ff007ef6ff03adc9fadff3ff08b54433
-3334333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9fe8ff
-ff7fffe8f7ffc8fffffff0e6ff007ef6ff03adc9fadff3ff08b544333334
-333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9fe8ffff7f
-ffe8f7ffc8fffffff0e6ff00d9f6ff03cae7f8fef3ff0083fb33014339f7
-ff06f68f6dfc5947c5f9ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcb
-fffffff0e6ff00d9f6ff03cae7f8fef3ff0083fb33014339f7ff06f68f6d
-fc5947c5f9ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e6
-ff00d9f6ff03cae7f8fef3ff0083fb33014339f7ff06f68f6dfc5947c5f9
-ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e6ff01facff7
-ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c466677766
-78776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff01facf
-f7ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c4666777
-6678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff01fa
-cff7ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c46667
-776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e5ff00
-8ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6ffe7769c6
-eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcafffffff0e5
-ff008ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6ffe77
-69c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaffffff
-f0e5ff008ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6f
-fe7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaff
-fffff0e5ff01e7eff7ff0afa45dffcfffdbefdfffaeffaff07f7cd6ffcbf
-fbf86ff8ff07b69e6fffd46bd49efaff15c6f3cfe4effffffccfe9fffe9f
-fc67d9ffbbfffffff0e5ff01e7eff7ff0afa45dffcfffdbefdfffaeffaff
-07f7cd6ffcbffbf86ff8ff07b69e6fffd46bd49efaff15c6f3cfe4efffff
-fccfe9fffe9ffc67d9ffbbfffffff0e5ff01e7eff7ff0afa45dffcfffdbe
-fdfffaeffaff07f7cd6ffcbffbf86ff8ff07b69e6fffd46bd49efaff15c6
-f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e5ff01fe7cf7ff09fe
-74affcfcfe8cefffb6f9ff07fa9a8efe9ffffd4df8ff08b6cd7ffff55da8
-77dffbff15b6d4dfd4effffffddff9fffe9fffa9caffadfffffff0e5ff01
-fe7cf7ff09fe74affcfcfe8cefffb6f9ff07fa9a8efe9ffffd4df8ff08b6
-cd7ffff55da877dffbff15b6d4dfd4effffffddff9fffe9fffa9caffadff
-fffff0e5ff01fe7cf7ff09fe74affcfcfe8cefffb6f9ff07fa9a8efe9fff
-fd4df8ff08b6cd7ffff55da877dffbff15b6d4dfd4effffffddff9fffe9f
-ffa9caffadfffffff0e4ff01f9bff8ff09fe946ffbfbfbcebfff5cf9ff07
-fe8e8afe9fcdff76f8ff0985e99ffff85e5adc69effcff15d6435554ffff
-fffebff8fffe8fff8aabefaffffffff0e4ff01f9bff8ff09fe946ffbfbfb
-cebfff5cf9ff07fe8e8afe9fcdff76f8ff0985e99ffff85e5adc69effcff
-15d6435554fffffffebff8fffe8fff8aabefaffffffff0e4ff01f9bff8ff
-09fe946ffbfbfbcebfff5cf9ff07fe8e8afe9fcdff76f8ff0985e99ffff8
-5e5adc69effcff15d6435554fffffffebff8fffe8fff8aabefaffffffff0
-e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8ffb7f8ff09d5
-65cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9fff6656896cff
-fffff0e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8ffb7f8
-ff09d565cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9fff6656
-896cfffffff0e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8
-ffb7f8ff09d565cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9f
-ff6656896cfffffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fe
-df97fff7ff98f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfe
-dd648dfffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fedf97ff
-f7ff98f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfedd648d
-fffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fedf97fff7ff98
-f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfedd648dfffff0
-e2ff01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7f
-fc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2
-ff01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7ffc
-54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2ff
-01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7ffc54
-bfe767777665555567988899aa86455557aaaaababbbb969fffff0e1ff00
-8ef8ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536
-ce4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff008e
-f8ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536ce
-4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff008ef8
-ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536ce4c
-edeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff00edf7ff
-0796eaaf859ba7fcdff8ff05ebfcbf7ef6eff4ff079478affffe95344eec
-ff03d8fffff0e1ff00edf7ff0796eaaf859ba7fcdff8ff05ebfcbf7ef6ef
-f4ff079478affffe95344eecff03d8fffff0e1ff00edf7ff0796eaaf859b
-a7fcdff8ff05ebfcbf7ef6eff4ff079478affffe95344eecff03d8fffff0
-d7ff07fdbb9fd85da6bfaff7ff03e9ec8f7cf3ff1ffc75bfffffffd53899
-abccccccbbabbabaaabcdeedcb98888999a9987afffff0d7ff07fdbb9fd8
-5da6bfaff7ff03e9ec8f7cf3ff1ffc75bfffffffd53899abccccccbbabba
-baaabcdeedcb98888999a9987afffff0d7ff07fdbb9fd85da6bfaff7ff03
-e9ec8f7cf3ff1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98
-888999a9987afffff0d6ff06aad9ff96e86edcf7ff039dd7e8cff2ff00fe
-fcff19fed787666556677788888999987667789bcccccccdeefffffff0d6
-ff06aad9ff96e86edcf7ff039dd7e8cff2ff00fefcff19fed78766655667
-7788888999987667789bcccccccdeefffffff0d6ff06aad9ff96e86edcf7
-ff039dd7e8cff2ff00fefcff19fed787666556677788888999987667789b
-cccccccdeefffffff0d7ff07fddbfd98e67e77faf8ff03f9cd7ebdd3ffff
-f0d7ff07fddbfd98e67e77faf8ff03f9cd7ebdd3fffff0d7ff07fddbfd98
-e67e77faf8ff03f9cd7ebdd3fffff0d7ff08fbaffffecd8ba9adbffaff04
-fe9bc7ebbfd3fffff0d7ff08fbaffffecd8ba9adbffaff04fe9bc7ebbfd3
-fffff0d7ff08fbaffffecd8ba9adbffaff04fe9bc7ebbfd3fffff0d7ff08
-bcdfffffefb7e88fbefbff04edcbee7eacd2fffff0d7ff08bcdfffffefb7
-e88fbefbff04edcbee7eacd2fffff0d7ff08bcdfffffefb7e88fbefbff04
-edcbee7eacd2fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
-efffeca99ed6fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
-efffeca99ed6fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
-efffeca99ed6fffff0d8ff18faf8ffffffc9e8e89efe9fffffffe76cff8d
-8cfd98adfbb8ced7fffff0d8ff18faf8ffffffc9e8e89efe9fffffffe76c
-ff8d8cfd98adfbb8ced7fffff0d8ff18faf8ffffffc9e8e89efe9fffffff
-e76cff8d8cfd98adfbb8ced7fffff0d8ff19f9f8ffffdbe7ca9caeff8fff
-ffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f8ffffdbe7ca9cae
-ff8fffffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f8ffffdbe7
-ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f9ff
-eacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8fffff0d8ff19
-f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8fffff0
-d8ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8
-fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444b8498ff7
-bfd8fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444b849
-8ff7bfd8fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444
-b8498ff7bfd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c8e68ff95
-433386447865afd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c8e68
-ff95433386447865afd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c
-8e68ff95433386447865afd8fffff0d6ff17ce9effff9c8f9fbdfffffeff
-6f7b5eff643343453543688fd8fffff0d6ff17ce9effff9c8f9fbdfffffe
-ff6f7b5eff643343453543688fd8fffff0d6ff17ce9effff9c8f9fbdffff
-feff6f7b5eff643343453543688fd8fffff0d6ff17e9efffffab6cdb9eff
-fffdff6f8b4fff64434437443345bfd8fffff0d6ff17e9efffffab6cdb9e
-fffffdff6f8b4fff64434437443345bfd8fffff0d6ff17e9efffffab6cdb
-9efffffdff6f8b4fff64434437443345bfd8fffff0d6ff16dbffffffe89a
-fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16dbffffffe89a
-fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16dbffffffe89a
-fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16befffffff9b6
-cbeafeffffafb5fef9bfc359d834433598d7fffff0d6ff16befffffff9b6
-cbeafeffffafb5fef9bfc359d834433598d7fffff0d6ff16befffffff9b6
-cbeafeffffafb5fef9bfc359d834433598d7fffff0d1ff119c8ffbffefff
-8ee58fff99e548784433455ed7fffff0d1ff119c8ffbffefff8ee58fff99
-e548784433455ed7fffff0d1ff119c8ffbffefff8ee58fff99e548784433
-455ed7fffff0d1ff01fccffcff0bb9fa8afffb7743333333548ed7fffff0
-d1ff01fccffcff0bb9fa8afffb7743333333548ed7fffff0d1ff01fccffc
-ff0bb9fa8afffb7743333333548ed7fffff0d1ff00fafbff0cfa68858eff
-fc87433333356549d8fffff0d1ff00fafbff0cfa68858efffc8743333335
-6549d8fffff0d1ff00fafbff0cfa68858efffc87433333356549d8fffff0
-d1ff00ebfaff0cb99a769effffdca7568effe69ad9fffff0d1ff00ebfaff
-0cb99a769effffdca7568effe69ad9fffff0d1ff00ebfaff0cb99a769eff
-ffdca7568effe69ad9fffff0d1ff00cff9ff03feffc7effcff03efffb68a
-d9fffff0d1ff00cff9ff03feffc7effcff03efffb68ad9fffff0d1ff00cf
-f9ff03feffc7effcff03efffb68ad9fffff0c7ff01fedffbff02fe645ad9
-fffff0c7ff01fedffbff02fe645ad9fffff0c7ff01fedffbff02fe645ad9
-fffff096fffff096fffff096fffff096fffff096fffff096fffff096ffff
-f096fffff096fffff0
-grestore
-showpage
-%%Trailer
diff --git a/contrib/groff/doc/gnu.png b/contrib/groff/doc/gnu.png
deleted file mode 100644
index 019a7ae78a67..000000000000
--- a/contrib/groff/doc/gnu.png
+++ /dev/null
Binary files differ
diff --git a/contrib/groff/doc/gnu.xpm b/contrib/groff/doc/gnu.xpm
deleted file mode 100644
index bc549343cd84..000000000000
--- a/contrib/groff/doc/gnu.xpm
+++ /dev/null
@@ -1,198 +0,0 @@
-/* XPM */
-static char *noname[] = {
-/* width height ncolors chars_per_pixel */
-"213 177 14 1",
-/* colors */
-"` c #FFF",
-"a c #DDD",
-"b c #BBB",
-"c c #999",
-"d c #777",
-"e c #555",
-"f c #333",
-"g c #EEE",
-"h c #CCC",
-"i c #AAA",
-"j c #888",
-"k c #666",
-"l c #444",
-"m c #222",
-/* pixels */
-"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````````gaahiibaag`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````acjjdddldjjkleeekdjia``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"```````````````````````````````````abbicli`hbjkdbelldddkdelldh```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````iibkcjellcaeaklcelfljllkekdeeejba````````````````````````````````````````````````````````````````````````````````````````````gha````````````````````````````````````````````````````",
-"```````````````````````````````bcagjcldkleljcdaelillfcdllfedeeelffc`````````````````````````````````````````````````````````````````````````````````````acdjddjccjjjch```````````````````````````````````````````````",
-"`````````````````````````````hch```jflleeeelkkcbljdlfliellldeeeeeflkh````````````````````````````````````````````````````````````````````````````````hjkch`ah`ic`gaiicjja````````````````````````````````````````````",
-"````````````````````````````cb``aeigjlefleellelhdlblllldllllcllekkeelcg``````````g``````````````````````````````````````````````````````````````gjcddiabjjdldkleklllliggcc```````````````````````````````````````````",
-"`````````````````````````ggjag`accdehilefelelllehldjllleellleellekllleejb```````dki```````````````````````````````````````````````````````````gjlljbiiekkelllllllefedcdg`hjb`````````````````````````````````````````",
-"````````````````````````gdhg`cdhadkdejilelelelekdelbllelelellkleelkfjeehiiihaaidbai``````````````````````````````````````````abg`````````````addijkdellelllelllllljckllkg``hcg```````````````````````````````````````",
-"```````````````````````gjgdejijlcghkeljjllllkdhjklkdcleklklllllleleeededg`hidjb``ig`````````````````````````````````````````akdei````````ggacdkkkkjllllflllflflllleekddjcji``big`````````````````````````````````````",
-"``````````````````````hdcjjceeekeei`hklkklledg`adebeclljelleleellelclkdlgg`aagg`ai``````````````````````````````````````````cg`bklkklllllllllkkeejlllfflekflellfleeelfllech```gcg````````````````````````````````````",
-"`````````````````````cihdckkjkleelldggiklejca``````aahkkceedkekjekkjllclhghbikkhjg``````````````````````````````````````````ij`g`ghbcjekddbkeeeljlllflfleflklfflekledjccccjg````ia```````````````````````````````````",
-"````````````````````hd``g``beedeeelkeb`gddhh```ghhhbbiekjhca`gjig`bgajab`gg``acc`````````````````````````````````````````````edagg`jeelleleeeeekeflfffleflefflelflklllelllledc```ba``````````````````````````````````",
-"```````````````````gc``aga``gdllelkecec``bg`gckdibbbhahbcdddjccciiihhgg```gbjca```````````````````````````````````````````````clkdcaccklleleeeekcikekklflefflllflllllllllllllekj``bg`````````````````````````````````",
-"```````````````````c``heledb``cllelebadj``gcdig`````````````gaaahhbhhhhhhgag```````````````````````````````````````````````````gcklflkjcaeekkjkjjddejdldkekdelllllfffffllleedjch```ig````````````````````````````````",
-"``````````````````caagikelllkcgjekekdg`hgbca```````````````````````````````````````````````````````````````````````````````````````aidelllebag````````hkea`gelllfffffffffffffllkg``gb````````````````````````````````",
-"`````````````````jbhdeecbbjefleckdciic`gca`````````````````````````````````````````````````````````````````````````````````````````````````````````````gikjgakffffffffflllekdkelkda`i````````````````````````````````",
-"```````````````adllkchbklkbabkflecgg``ajg`````````````````````````````````````````````````````````````````````````````````````````````````````````````````hdhaffffllllejjdelfflleda`hh```````````````````````````````",
-"```````````````jckllllejjeledahlfkhg`bjg````````````````````````````````````````````````````````````````````````````````````````````````````````````````````jiblleffffffffflekdkkelagb```````````````````````````````",
-"``````````````hj``gbdlllleellljcebg`bc```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````bjhcelffffllllllledddkc`i```````````````````````````````",
-"`````````````gdhbbhihabklllleekkk``bc`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````bj`hlfffffffffllleeekjhi```````````````````````````````",
-"````````````gdgeeelllekcidllleeja`aj```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````id`befffllfffffledibbgbg``````````````````````````````",
-"````````````cb`hchgidellekjjeeaijbjg````````````````````````````````````````gabbiiiibhg`````````````````````````````````````````````````````````````````````````cdgkfffffffledjjkeekcah``````````````````````````````",
-"```````````gd````gg```aclleddkg``da`````````````````````````````````````gbjkddjcccjddjddjia`````````````````````hbhag````````````````````````````````````````````iieffflfflfflkca`````b``````````````````````````````",
-"```````````ca```hbiiibhggbeekh``ib````````````````````````````````````gdkchgabbccjjiicibbijjh````````````````gijccjjjcia``````````````````````````````````````````ddflleeeleellllkdh``i``````````````````````````````",
-"``````````gj``clllffllllki`bcg`hj````````````````````````````````````hkcijccibag`gghbijkkjiidjh````````````bcibicjjiba`hba````````````````````````````````````````hjdleeelllffflllej``b``````````````````````````````",
-"``````````cahjekdjcicjdella```gd```````````````````````````````````adldia```````````````ghjddkkda```````gcdjjdcbhgabicjighb````````````````````````````````````````daiefffffffflllekg`b``````````````````````````````",
-"``````````j`ccjjjddkeekdcddb``ia``````````````````````````````````iejg```````ah`g```hg``````gbjelc````acckjhg``bebgh```hjcg````````````````````````````````````````chjeffffffllffllkdchg`````````````````````````````",
-"`````````iiallllllekjiijkedka`c``````````````````````````````````ijg`````g````chjjeagkdh``ghcb`ajljaaibcjg````gdeleld````gjc```````````````````````````````````````ac`kleiiklflkcklleghg`````````````````````````````",
-"`````````kkkellekekellejaghcb`c`````````````````````````````````cb```````chjacciicljeckdggkdkkh`chkebgjjbg`ahijallldflcig``ajh``````````````````````````````````````dallffldcjlfljkjlgaa`````````````````````````````",
-"````````bjjjiiijjddkeeeelhg``ab```````````````````````````````gjh`````hcbciiibkcbdlbkcejkjkeekebikadjkbdeecheakllcleiflkeaicgijg````````````````````````````````````djkllfflflkjefleb`bh`````````````````````````````",
-"````````kg`aabcjkeeellleekc``ig```````````````````````````````jg``````jjdbjijhedhkkjjdldejdeldklkeeijkcgkllekkaeljifclffffffebada```````````````````````````````````cillfffflllldcllb`bi`````````````````````````````",
-"```````gd``hellllleeeeekkkka`j```````````````````````````````jh`bgijkgieeakcdgekaedeielklejelkeelfeeiklbilellfcbflhlelfflffffleidb``````````````````````````````````caelleeelffllebkeabi`````````````````````````````",
-"```````bigcellllllllllleldgggc``````````````````````````````chaacbhkebaeeakdd`ekgedlhlelleckleellflekjeeaeeekeladfjkleffllefffflbcc`````````````````````````````````ibllllfleelfleljjeic`````````````````````````````",
-"```````jacllledjbcbhbidefekgch`````````````````````````````ci``dkj`elcgeeijed`eealkfblllleceldklelleekeeibejljllifdjlklfkfdllfffebbj````````````````````````````````biillflllfleelllljgc`````````````````````````````",
-"```````d`becbbijdelllllejag`j`````````````````````````````bhgc`iek`klj`keccek`eealdlclllllikedjlekfleeclebkeclblelkhfelfkfjelfffflcbc```````````````````````````````ibilfffleefffllflkgc`````````````````````````````",
-"```````d``bjelflkdjjdjdekchgc````````````````````````````gj``ddkee`kle`dekilkgeeildldllellbekkildeleelillkjlkldcjklilelfefdelflflflcch``````````````````````````````jadklffffekjkflllkai`````````````````````````````",
-"```````j``jlejcjdkeeekdkkihac```````````````````````````gdggccbllegdelgclecle`elhejlkelellbeddhlkleleljekklejieaehfjklllkelelflflflljkg`````````````````````````````d`jihdffffflddlllk`ig````````````````````````````",
-"```````j`gedkellleekkkekdihgc```````````````````````````jabbkicellajelaileilk`klaejleelkllhedkhljejeelkeedjj`gjbjlldjllelklllleflflllkda```````````````````````````gjgeellfffffleedeelhba````````````````````````````",
-"```````i`hedeeekkkkeekellljaj``````````````````````````jh``kljcdfehjelbheehekgelaejlleljllhedjaljeikdeelffildh`cklleblleldfellklllfllleka``````````````````````````iigedfffffffffeejelgba````````````````````````````",
-"```````a`cilledjiabcjelleb``j`````````````````````````ci```kljjiflhceliaelakkgllalcllllkeebkdcalieheckkkhchlleb`bflfbeleeefkllkellfllllekg`````````````````````````jg`aelfffffffffeeilhbg````````````````````````````",
-"`````````kdba`gikelkcjjkeeh`j````````````````````````iia``eeljdhflhcelcallhdkhllblielleelkcdebhliealieea`ahffflelflfddfeeeflllekllflllfllk`````````````````````````d``ilfleffffffffldhgbg````````````````````````````",
-"```````h`c`bjelekjdeelffleh`j```````````````````````ij`bcallljkgflidelchleakkileclillllllkkjehildkcljlligegeflkeeelfkjflelfllleelelellffllkg```````````````````````d`aeffflkfflfffflea`bg````````````````````````````",
-"```````b`gieejdellllkcdked``j``````````````````````ic``geglllkk`leideejblegedkfkclbllelledlakhcedkeekfldglabdldhiellkjflllflleellellelfefllkg`````````````````````akelflffflklfllffljc`b`````````````````````````````",
-"```````iggjjdelllecbjelljh`ach````````````````````ci````ebelekegeljkeldjldalklljkkjllefeledilcec`gcikellaei``blljkjkkjflllflllkllellklfdlllkjg````````````````````cejblffffffklfflfld``i`````````````````````````````",
-"```````iahcjelecaiefldjledjiaj```````````````````jb``bb`djllekk`eljeeleeljjllllkljefelfklkkck`gahahjlilkeeeg``ielfeleblllllflldllklleeldkleiadih``````````````````dlaelfffffffelfflfi``b`````````````````````````````",
-"```````bcbiekhgceflddelllecj`d`````````````````gdh```he`ckeleek`keeleellejlkideddieekeddb`dddjeeeldidbkjfjfkihggkfleehellellllkledlfkelljledgaci`````````````````bjkkfffffffffflfflfk``i`````````````````````````````",
-"```````gjgaigcllllellkellebagib```````````````gda``ghgegbeeelkk`eeeldli`accajliiiceledjjjdlleigahlb`jididkkffleeffebdbjljdllklldicllklllelllj``cc```````````````gdgjflfflfflfffflfflfi`b`````````````````````````````",
-"````````dgghekbklflkellleekkhgc``````````````gda````dhdbieekeekkljdjjlckflkkeekddjjjdkkkdjcbg````keacfejhejeleeceliajhdflleefleekklllllfflellh`gkc``````````````dballfflfffflffffffla`bg`````````````````````````````",
-"````````dhclddllleelllelllebg`jh````````````gja`````ijjdblkklljjkghdlejig```````````````gg```````gljghefecljlfdcej`cekkibjdabg`ghiickdkdeedledjagkc````````````jdbkfffffffffffffffflg`c``````````````````````````````",
-"````````icdbbkllllllejellkllc``jb``````````gdg````ighdbkhlkelebadedch`````````````````````````````hedahkffefklelfiejg`````bdc````````ahbjkeedleeh`cdh``aag``gieeklclffflffffffflffli`ai``````````````````````````````",
-"````````hcghklllllljdelldefle```jc````````hjg```gikbhkbljlcecjkkig`````````````````````````````````gdlejjellffflelc`````````bkg``````````abkjeeelb`hkellekbjldgdgkfflffflffffffflfk``cg``````````````````````````````",
-"````````gdikllkeleceklljeflklh```jja````acc`````hckcgececedlkig```````````````````g`````````````````gilelejcfffkjla````ag````hk`````````````ieeekfeh`ghjkkjig``dklelmfffflfffffffflb`c```````````````````````````````",
-"`````````dakejelkjedlldklldlleg```bcjjjjca``````jcedgekllecg`````````````````gicekj``````````````````ggabjleffcadeb```hed`````bd`````````````ggkllffjgba`bccgihefffeefffffffffffflkdhh```````````````````````````````",
-"`````````ibdielkdlkeedkllddellbch``````````aghaieaekglfda````````````````ghiiiaifeg`````````````ggg```ggagblfkgdljd``cijdg`````ci`````````````haeelffllljelfllfffffflffflffffffllldic````````````````````````````````",
-"`````````hcgclkklkeedkllejldfleehg`````````ccbjdeadejfj`````````````````hllkkeeffc`````````````gdlleg````g`ceebfflkghjklkg````g`ka````````````abcllfffffffffflfffffffffffffffffflj`gc````````````````````````````````",
-"``````````d`cdkleekkklledlklfleedd`aa`````gilildeajlfl`````````````````illlflfffk```````````````ajllig``g```aeefffj`clffi`````h`bd`````````````baelfflfffffffflffllfffffflffffllfa`ia````````````````````````````````",
-"``````````jagbledjkklfdkeedffelflecbkd````icldejlbjfed````````````````glfffllffkg````````````````gilkh``g``hkllfejagklfla````gb``k`````````````gccllfffffffffffffffffffffflmffflfhgi`````````````````````````````````",
-"``````````bb`bkkckclleeeljlflkfleeljke`igabkleeclikfcg````````````````cflfflffj```````````adeeja```iiih````blfkjia`gkffja`````h``dg`````````````hjllffffffffflflfffffffflfffffffegcg`````````````````````````````````",
-"``````````gc`beakbellkeleellleflellkje`ddgdklekdlele`````````````````alffeffdh``````````beffeklk`````hjbb``gijig``gadffiibiiaga``jg``````````````jelfffffffffffflffffffffffffllldbb``````````````````````````````````",
-"```````````jheajckeldellklllllflleeeie`dehkkelkklljc`````````````````kffelfjb``````````clkig``dlg`````aej````g`````iclfkja`hjhh``d```````````````bllfffffffffffffffffffffffflldeic```````````````````````````````````",
-"```````````ikagjdekedlekllelelllfkelbk`ekikdelelfba`````````````````blfkdlkcb````````hkeh`````jlc`````bkc``````````jjffedh`ggb``gk```````````````akelfffffffflllffflffffffffefiahh```````````````````````````````````",
-"```````````gj``idekjekeellklkfllleeeiegekidjleefe``````````````````hefd`ai`e````````ifj```````allg`````iig`````````cjfflb```````bd```````````````bklfflfffffffllffflfffffflfekkgc````````````````````````````````````",
-"````````````cg`deckjeledleellfelleeedebleidkellfb`````````````````hedi````hk````````ed`````````cfa`````hejg````````iefffcg`g````jb````````````````jlfflfffffffllffffflffflffb`djh````````````````````````````````````",
-"````````````hb`bedcelekjljllllllleeeeljeeckdelfl`````````````````acbi`````ki```````hea```hbcjdkkfc`````gelb````````hefffekddcb``ja`````````````````hllfeffffffllllffffllfklk`gji`````````````````````````````````````",
-"`````````````j`gicclejceejlefllllcekledleckkllfd``````````````````gjg````gla```````ifj`beffflffffeh`````hlb````````gcfffffffffecdb``````````````````dlfeflffffflllfflfefeeec`gj``````````````````````````````````````",
-"`````````````bi```jkdjhlklllflllehekleellbkkkllb``````````````````gg`````ik````````aflefffflfffjclb``````kb`````````alfellekjdellc``````````````````hlflfffffffllllelfefdhb`ajg``````````````````````````````````````",
-"``````````````jg```khjcldlllllllkbekleeeebkdellg`````````````````````````di````````gefffflfffffjbcd``````gia`````````klkleleeeddllg``````````````````effflfffflfffleffek```bkg```````````````````````````````````````",
-"``````````````gjg``jgidelldflleljjkelleeebekklj``````````````````````````lg`````````effejlffleffjida``````dc`````````glkcffflfedddh``````````````````kllleffffffllkkkecg`idda````````````````````````````````````````",
-"```````````````aca`hgbkeeceffjllieceelekeieeelg`````````````````````````gk`````````glebahlfflllfkgag``````kd`````````gdldfflffldjcg``````````````````blllkfffflllejgkkbdejg``````````````````````````````````````````",
-"`````````````````jg`ggkkcilfljlejeblkedklclefh``````````````````````````ci``````````lh``affffflfeaig`````gea````````gghefffffffkb````````````````````akcbklfflejdlbakfkb`````````````````````````````````````````````",
-"`````````````````gc```icbkflieldkjiebeeeecelc```````````````````````````dg``````````jj`g`efffffldde``````ji``````````ggblfffffekdkj```````````````````hc`bjdah`gajdkia```````````````````````````````````````````````",
-"``````````````````hb``bigjkeclddeakkjleldkee````````````````````````````k```````````gddhahlffflkiek`````````````````````jfffffddjle````````````````````ekkjjddddjba````````````g``a`a````````g```````````````````````",
-"```````````````````aigg```aieeblibejkeelcelb```````````````````````````hlg`````````ggailc`ajjcjcbec`````````````````````alleekchclh````````````````````bagagg```````````ag``gejb``kgk````gbagecdbabg`````````````````",
-"`````````````````````iba```hbblcgkb`dkeljel````````````````````````````ceg`````````````akdiibdeeej```````````````````````clekkcjeca`````````````````````j```````````````ilh``dfj`gedc`hb`gdkabelcbkeddi``````````````",
-"```````````````````````hih`hcliidc`akjeeedj````````````````````````````ecg````````````gg`acjcibag`````````````````````````clddedai``````````````````````ca```````````````bea``ek`alegblja`ieeajlcblkbkg``````````````",
-"`````````````````````````gbibg`gh``hagjhaea```````````````````````````gkig```````````````gg```gg```````````````````````````kla```h``````````````````````gj````````````````akg`ajggeaalfkb``jlkaljhlhkg```````````````",
-"````````````````````````````bbbbhg``````ge````````````````````````````cjhh``````````````````g`a````````````````````````````aej```cd``````````````````````j`````````````````ik`````ghecfejjdkllklkdeejig``````````````",
-"````````````````````````````````ghbhhg``kc````````````````````````````eh`ihg````````````````````````````````````````````````ilh``bej`````````````````````bh`````````````hiiceddkkkklkdjjjcbag``c`````gb``````````````",
-"`````````````````````````````````````ahclg```````````````````````````afg`bha`````````````````````````````````````````````````dd``glka`````````````````````c`````````````dbhhjcbhg``````````````i``````b``````````````",
-"```````````````````````````````````````ck````````````````````````````dfh`gaa`````````````````````````````````````````````````bla``idjg````````````````````ai````````````j```h``````````````````i`````gb``````````````",
-"```````````````````````````````````````lh```````````````````````````aelg```g``````````````````````````````````````````````````cj```eadgg```````````````````cg```````````c``gi`````````gaabbicccdibdciab``````````````",
-"``````````````````````````````````````hk````````````````````````````dceka`````````````````````````````````````````````````````geg``djgda```````````````````gc``````````adjdkejicjddkelledjedckijaaeeich``````````````",
-"``````````````````````````````````````di```````````````````````````he`bd```````````````````````````````````````````````````````ek``ce`gch```````````````````ab`````````gcidkjlbbbckjadlb``dj`c`ga`cda````````````````",
-"`````````````````````````````````````glg```````````````````````````dj`ce````````````````````````````````ga`````````````````````aea`ilg``iig``````````````````ba```````````cbae```gki`cli``dd`c``g`gda````````````````",
-"`````````````````````````````````````bk```````````````````````````hlg`bkjg```````````````````````````gggblig``gh````````````````jj`hli```gjcg`````````````````ig``````````jbbe````ki`ilc``dd`c`````da````````````````",
-"`````````````````````````````````````di``````````````````````````gec``ajegg`````````````````````````ckkdjcecaaaa````````````````gkbaec`````accig```````````````cjg````````kbhe````ei`ilj``jk`j``g``da````````````````",
-"`````````````````````````````````````lg``````````````````````````dd````hkkj```````````````````````````````hjkkdjdjjjjb```````````bkhec````````acjbg`````````````gjg```````diak```gei`blc``de`j`````da````````````````",
-"````````````````````````````````````he``````````````````````````ikg`````dela````````````````````````````ghbhhhaaggg```````````````kjei```````````bdjiag```````gbiig```````dbak````lb`bli``de`j`````da````````````````",
-"````````````````````````````````````jc````````````````````````gdk````````bkb`````````````````````````akkdjddkeleja````````````````ilkh``````````````hcjjccccjcbg``````````dbhd````ei`hec``dk`j`````ka````````````````",
-"````````````````````````````````````eg```````````````````````geea`````````ib`````````````````````````ei````````gbjejg`````````````aelg````````````````````````````````````jbhd```gli`hei``dd`j`````kg````````````````",
-"```````````````````````````````````be```````````````````````hlla``````````g`````````````````````````cj````````````adlb`````````````hlbg```````````````````````````````````dbbd```gli`ali``jd`j`````kg````````````````",
-"```````````````````````````````````kb``````````````````````allh````````````````````````````````````hla``````````````bejg````````````dla`gahjji````````````````````````````dbbd```glc`glb``dj`d`````kg````````````````",
-"``````````````````````````````````be``````````````````````beeh`````````````````````````````````````kh`bklljg``````````iei```````````ckelleedddka``````````````````````````dbbd```glc`glh``dj`j`````kg````````````````",
-"`````````````````````````````````geh```````````````````gikejg`````````````````````````````````````gk`jfeddeea``````````akkb````````````g``````aeg`````````````````````````dbij```glc`glh``jj`d`````kg````````````````",
-"`````````````````````````````````ec`````````````````gbdledi```````````````````````````````````````ijifd````hg````````````ieda``````````````````ij`````````````````````````dbbj```ali`gla``jc`d`````kg````````````````",
-"````````````````````````````````jk````````````ghijdkkdjhha````````````````````````````````````````daefb```````````````````gdeb``````````````````e`````````````````````````dhbj```ali`glh``ih`j`````k`````````````````",
-"```````````````````````````````ilg`````````bdelkjbg``gcabcg```````````````````````````````````````kajlg`````````````````````jei`````````````````ka````````````````````````khbj```hlb`bla``jh`d`````e`````````````````",
-"``````````````````````````````ila````````cedccb````````ijib```````````````````````````````````````kahe````hdledcg````````````i``````````````````jb````````````````````````khic```hlb`blh``jh`d`````e`````````````````",
-"`````````````````````````````ilh````````jlg`gc`````````gjdb```````````````````````````````````````bg`a````deahikeg``````````````````````````````ic````````````````````````kaic```hlb`blh``jb`d`````e`````````````````",
-"````````````````````````````dfb````````alb``ca``````````hlg```````````````````````````````````````ah`````glfklfekd``````````````````````````````ic````````````````````````khcc```blb`blh``jh`d`````e`````````````````",
-"```````````````````````````cfc`````````kk```d````````````k``````````````````````````````hg```````````````glfffffekcia`````````````````````````abdh````````````````````````eacc```bliiefc``dh`d`````e`````````````````",
-"```````````````````````````ed`````````blb```d````````````db```````````````````````````gag````````````````gkffffffbelkg```````````````````````gjde`````````````````````````kaic```bldcahkb`kh`d`````e`````````````````",
-"```````````````````````````lg``gikcghjlc```gj````````````je````````````````````````gjkka``````````````````gkfffflaeefi```````````````````````dedd`````````````````````````eabj```blk``ghegkh`d`````e`````````````````",
-"```````````````````````````ddjkfeddflda````bc````````````ceb``````````````````````akig``````````````````````bjig``eblk``````````````````````jflld`````````````````````````kghj```bli```cflllcd````ge`````````````````",
-"```````````````````````````gccib```ga``````ib````````````jhc``````````````````````ea``````````````````````````````khbfg````````````````````jlfflh`````````````````````````egbc```bfj``glkdleid```gbk`````````````````",
-"```````````````````````````````````````````ca````````````j`j``````````````````````````````big`````````````````````ehgli``````````````````gdlfffd``````````````````````````egbj```ile``ge``kh`dgiaaik`````````````````",
-"```````````````````````````````````````````ja````````````j`j````````````````````````````helkli`````g`````````````gk``ed````````````````gbklffleg``````````````````````````lgbj```cllh`jj``eb`difdbik`````````````````",
-"```````````````````````````````````````````ch````````````cgd````````````````````````````iga`geb``ag``````````````````cc`````````````ggadlffflkb```````````````````````````labc```jlka`ec``kb`difehid`````````````````",
-"```````````````````````````````````````````ch````````````ihja````````````````````````````````hla`j```````````````````````````````````hklffffdj````````````````````````````lhic```kfcggjli`eb`djflbcd`````````````````",
-"```````````````````````````````````````````ib`````````````ijeg````````````````````````````````dcgj`````````````````````````````````gjefffffekg````````````````````````````laieejelledecieieb`dhkcbcd`````````````````",
-"```````````````````````````````````````````bc```````````````cd````````````````````````````````akii````````````````````````````````gdlflffflka`````````````````````````````laijeggabijkellllb`dga`bcd`````````````````",
-"```````````````````````````````````````````aj```````````````gkh````````````````````````````````cki```````````````````````````````gdlflffflkg``````````````````````````````eajkkjihg``````geb`dg``hcd`````````````````",
-"```````````````````````````````````````````gd````````````````jc````````````````````````````````gej```````````````````````````ggagdllllfflka```````````````````````````````dadlklekeeekkkkjeb`d```acj`````````````````",
-"````````````````````````````````````````````d```````````````gbj`````````````````````````````````be``````````````````````````````hjjcdeelecg```````````````````````````````khjeeeb`````ghejeb`d```aij`````````````````",
-"````````````````````````````````````````````d```````````````baj``````````````````````````````````kh`````````````````````````````gg``gabi`ajg```ggga``````````````````````gkckecd`g``````aeeb`k```gic`````````````````",
-"````````````````````````````````````````````dg``````````````abch`````````````````````````````````bj````````````````````````````````````````bkdkekdklkkka```````````````ajllflkejibhgggghbkli`k```gij`````````````````",
-"````````````````````````````````````````````cb```````````````chj``````````````````````````````````dg````````````````````````````````````````hh```gbg`gdi```````````````jkiicjcccijdkllllfkli`k```gic`````````````````",
-"````````````````````````````````````````````bi```````````````gceih````````````````````````````````aj`````````````````````````````````````````ba`cdhhgggkg`````````````bjkellkkeekdeclkkkllligk```aci`````````````````",
-"````````````````````````````````````````````aj`````````````````bhbjjg``````````````````````````````aj````````````````````````````````````````gcgblfjkg`hd``````````````gbdklcedihbedekellklcae```aji`````````````````",
-"`````````````````````````````````````````````d`````````````````hb``ajjg`````````````````````````````hc```````````````````````````````````````adgaelfcg``ji````````````````ge`dig`gkghabaahejak```hji`````````````````",
-"`````````````````````````````````````````````d``````````````````biih`adh`````````````````````````````hc```````````````````````````````g``gbiikfjgjeld```aea```````````````ge`kiaghejaggbbiedgk```bji`````````````````",
-"`````````````````````````````````````````````ih```````````````````gbch`da`````````````````````````````jkh`````````````````````hckkeeeekdcjkdlielbieeeh```hka`````````````gbebdkeellleekcidfj`k```ijjhhhha````````````",
-"`````````````````````````````````````````````ac``````````````````````ibjki````````````````````````````gdlcg``ghbhgg```ggacckelfflllllffffflbagbfkilelddcbghkjg``````````bkllllllllllelllekligk```ajeeeelleka`````````",
-"``````````````````````````````````````````````k``````````````````````gccgd``````````````````````````````ileeefflkchahabklfffffffffffffffflc````dflfelkcdkkddlkjjjcjjccccklllleeeeeleeeeeleli`k````jklellllljci```````",
-"``````````````````````````````````````````````ja`````````````````````cgj`j```````````````````````````````hllebahabcdelffffffffffflllffllfj`````aleejllkdjba`aihgbiibibibijcccccccccccccjddeh`eg```djbbhbiiiibdd``````",
-"``````````````````````````````````````````````aj`````````````````````jacih````````````````````````````````gefllllflfffffffffllfflekkeelfd``````glkkjedghifdbgjdjjdkdjjjjjjddjdccccjiiibbbiebheg```djccjkkkejjkc``````",
-"```````````````````````````````````````````````d`````````````````````cjgjg`````````````````````````````````hdlffffflkjjjjdibhbiig`g`agaci```````ljjkkk`gafldhlcaahbbiibbbideilkchjehhhahhbdabeh``gdh```jbak``ch``````",
-"```````````````````````````````````````````````d`````````````````````dj`j`````````````````````````````````````gahaaag``````````````````aj```````edbejea`glldhlb```````````jkglcg`id```````jggeh``ada```jhgk``ca``````",
-"```````````````````````````````````````````````ja````````````````````djhi``````````````````````````````````````````h```````````````````gd``````gejhkclc`geecbla```````````id`lj`gcc```````j``ea``gka```chgk``ca``````",
-"```````````````````````````````````````````````bi````````````````````ckhi``````````````````````````````````````````````````````````````bj``````gejajcee``kehbk````````````ckgej``jj``````adggea```ka```jhad``cg``````",
-"````````````````````````````````````````````````d`````````````````````dcj``````````````````````````````````````````````````````````````ka``````aejgddkeg`kkgcd````````````ck`ed``cj``````ad``eg```ka```jaaj``jg``````",
-"````````````````````````````````````````````````bi`````````````````````kkh````````````````````````````````````````````````````````````hk```````akcgkkjebgkk`jj````````````ck`ec``cc``````gj`gk````eg```jghc``d```````",
-"`````````````````````````````````````````````````d`````````````````````gjd```a```````````````````````````````````````````````````````gda```````hei`kdcfjakd`ki````````````ieaec``jc```````c`gd````eg```j`bi``d```````",
-"`````````````````````````````````````````````````ch``````````````````````bb``d`````````````````````````````````````````````````````ajjg````````behgkdcfeadjgeg````````````cehlc``jc```````c`gd````eg```j`ib``k```````",
-"`````````````````````````````````````````````````aj```````````````````````iggj```````````````````````````````````````````````g`gbjjig``````````blghjicllbdiae`````````````ckhlc``di```````c`gd````e````j`ca``d```````",
-"``````````````````````````````````````````````````dg```````````````````````ihc``a`````````````````````````````````abckdkkeeeedjjh``````````````blgbjakdejdhcd`````````````jkalc`gdi```````c`gd````k````j`jg`gk```````",
-"``````````````````````````````````````````````````bj```````````````````````ihc``a```````````````````````````````bklffffflffflg`````````````````ce`iigkiekkadc`````````````jkalc`gki``````gj`gj````k````j`j``ae```````",
-"```````````````````````````````````````````````````cb`````````````````````hbbc`gj````````````````````````````gclffffffffffffd``````````````````jk`ji`dakeeaea`````````````jkali``ei``````gd`gj````d````d`d``be```````",
-"````````````````````````````````````````````````````dg````````````````````iahc`ia```````````````````````````bellffffflffflfla``````````````````dk`db`cdkekge``````````````ckgfb``lh```````c`gj````d```gj`d``hj```````",
-"````````````````````````````````````````````````````ac````````````````````higd`j`g``````````````````````````jffffffffffflffc```````````````````kj`ka`hecldhe``````````````iegfh``liiicdjccj`aj```hlc``gj`d``hb```````",
-"`````````````````````````````````````````````````````ih````````````````````dgjhd````````````````````````````chkkekeelkcagkfi```````````````````ec`k``glbljhlkkkdddkkdjddkkekalh``lcbbbiccdj`hd```gelkabj`d``hi```````",
-"``````````````````````````````````````````````````````jg```````````````````gjcdd```h``````````````````````````hejgdiach`gjklh`````````````````gec`k``gddkchkggggaaagaagg``heglh`ala``````bc`ad````ihkldjgj``hi```````",
-"``````````````````````````````````````````````````````gdg````````````````````ilea``h```abg`a```ig``````````````dhak``hb``b`jk`````````````````bkcgk```alkbalcg````````````hk`fh`glg``````hh`gc```gc``hkdac``bb```````",
-"```````````````````````````````````````````````````````gdh```````````````````gdli``h`h`gjhg```bk```````````````icijg`gc````ala````````````````bkhad````eeaijdda```````````bkala`alg``````aa``c```gc```ichi``ia```````",
-"`````````````````````````````````````````````````````````cb``````````````````gclk``b`b`bhgb```eh```````````````gjgji`gc`ha``dk````````````````jegcc````jegeiahkcg`````````aklfeeel```````gb``j```gj```jiibg`i````````",
-"``````````````````````````````````````````````````````````ic```````````````````cla`b`hgja`c``bii````````````````a`jicbb`aj``bd````````````````aekeh````jkakejggdlc``````````ghbihg```````gj`ge```gc```kkekjckh```````",
-"```````````````````````````````````````````````````````````hda`````````````````alkgb`aachbjg`jhh`````````````````ga`cd```d``cj```````````````````ig```gjcgkgjec`adeb``````````````````````ekij```gb```ha`gaaklja`````",
-"````````````````````````````````````````````````````````````gjh`````````````````cdhj`gbhkchi`j`b````````````````````ik``gd``kh````````````````````````heigd``helb`gdkddddkkeeeeekdcjjjcciijkleeeediiiiibibbbbckc`````",
-"``````````````````````````````````````````````````````````````jg`````````````````cccigigekgj`j`b```````````````````ajcb`bi`bj`````````````````````````ieihc```aefkhglhgagggghbcciichaahhbbbbiiccicjiiiiiiiicjcjc`````",
-"``````````````````````````````````````````````````````````````ga``````````````````ckgii`jecbid`ha`````````````````gb`hb`dg`kg`````````````````````````cldji````gcefllg````````````````````````````````````````aj`````",
-"```````````````````````````````````````````````````````````````````````````````````abbc`ajeaikb`i```````````````````gcghj`dh```````````````````````````hdeb```````aefjccibhhhhhhbbibbibiiibhaggahbcjjjjccciccjdi`````",
-"````````````````````````````````````````````````````````````````````````````````````iiac``ckgjkgah``````````````````caadgjh``````````````````````````````g`````````gadjdkkkeekkdddjjjjjccccjdkkddjcbhhhhhhhagg```````",
-"```````````````````````````````````````````````````````````````````````````````````aab`acjgkdgdd`i`````````````````chadgba```````````````````````````````````````````````````````````````````````````````````````````",
-"```````````````````````````````````````````````````````````````````````````````````bi````ghajbiciab``````````````gcbhdgbb````````````````````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````````````````````````````````````````````````bha`````g`bdgjj`bg``````````gahbggdgih`````````````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````gbc`````gghadgcj``i`````````jeda`gdgcg```ghiccg`````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````i`j``````hcgjgjcg`gc```````gdkh``jajh`acjia`bbjhg```````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````c`j````abgdhichig``j```````jik``chjhgjdeg``gg``jba``````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````c`c``gih`cgcgdgia`bb```````kid`hcch`dhdlkhildb`gjb``````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````igb`ab`gia`jgj`cg`c````````kij`jci`gddlllbjlcj``db``````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````aaa`b`bcg``jbc`j`ab````````ehjgkj``celfffjklldjkei``````````````````````````````````````````````````````````````````````````````````",
-"````````````````````````````````````````````````````````````````````````````````````hgcg````chj`c`ba`````g``k`dbeg``klfflflefelfkjj``````````````````````````````````````````````````````````````````````````````````",
-"````````````````````````````````````````````````````````````````````````````````````gcg`````ibkhabcg`````a``k`jbl```kllfllfdllffleb``````````````````````````````````````````````````````````````````````````````````",
-"````````````````````````````````````````````````````````````````````````````````````ab``````gjci`iba`````aa`jbhidb``jflfklfllfflkk```````````````````````````````````````````````````````````````````````````````````",
-"````````````````````````````````````````````````````````````````````````````````````bg```````cbkhbgi`g````i`be`g`cb`hfecajfllffecj```````````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````````````````````````````````````````````````````````````chj``b``g```jggej```ccgeljdjllffleeg```````````````````````````````````````````````````````````````````````````````````",
-"```````````````````````````````````````````````````````````````````````````````````````````````hh`````````bc`iji```bddlfffffffeljg```````````````````````````````````````````````````````````````````````````````````",
-"```````````````````````````````````````````````````````````````````````````````````````````````i```````````ikjjejg```hjdlffffffekelc`````````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````````````````````````````````````````````````````````````gb````````````bccidkcg````ahidekjg``gkci```````````````````````````````````````````````````````````````````````````````",
-"``````````````````````````````````````````````````````````````````````````````````````````````h````````````````g``hdg`````````g```bkji```````````````````````````````````````````````````````````````````````````````",
-"```````````````````````````````````````````````````````````````````````````````````````````````````````````````````ga````````````gklei```````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
-"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````"
-};
diff --git a/contrib/groff/doc/grnexmpl.g b/contrib/groff/doc/grnexmpl.g
deleted file mode 100644
index ba1a1b8790d4..000000000000
--- a/contrib/groff/doc/grnexmpl.g
+++ /dev/null
@@ -1,3250 +0,0 @@
-sungremlinfile
-0 320.00 240.00
-ARC
-320.00 240.00
-320.00 416.00
-320.00 416.00
-320.00 64.00
-496.00 240.00
-144.00 240.00
-*
-4 0
-0
-CURVE BSPLINE
-764.00 288.00
-776.00 304.00
-764.00 320.00
-*
-3 0
-0
-CURVE BSPLINE
-768.00 288.00
-780.00 304.00
-768.00 320.00
-*
-3 0
-0
-CURVE BSPLINE
-768.00 320.00
-788.00 320.00
-800.00 304.00
-*
-3 0
-0
-CURVE BSPLINE
-768.00 288.00
-788.00 288.00
-800.00 304.00
-*
-3 0
-0
-ARC
-192.00 268.00
-192.00 267.00
-192.00 269.00
-192.00 267.00
-193.00 268.00
-191.00 268.00
-*
-3 0
-0
-ARC
-192.00 212.00
-192.00 211.00
-192.00 213.00
-192.00 211.00
-193.00 212.00
-191.00 212.00
-*
-3 0
-0
-CENTRIGHT
-476.00 32.00
-430.00 28.00
-453.00 28.00
-476.00 28.00
-*
-1 1
-10 $DP sub 2$
-CENTRIGHT
-476.00 224.00
-430.00 220.00
-453.00 220.00
-476.00 220.00
-*
-1 1
-10 $DP sub 2$
-CENTRIGHT
-476.00 256.00
-430.00 252.00
-453.00 252.00
-476.00 252.00
-*
-1 1
-10 $DP sub 2$
-CENTRIGHT
-476.00 448.00
-430.00 444.00
-453.00 444.00
-476.00 444.00
-*
-1 1
-10 $DP sub 2$
-VECTOR
-604.00 344.00
-612.00 344.00
-612.00 364.00
-620.00 364.00
-*
-6 0
-0
-ARC
-416.00 320.00
-416.00 319.00
-416.00 321.00
-416.00 319.00
-417.00 320.00
-415.00 320.00
-*
-3 0
-0
-CENTLEFT
-596.00 336.00
-596.00 332.00
-604.00 332.00
-613.00 332.00
-*
-1 1
-3 $-$
-CENTLEFT
-596.00 368.00
-596.00 364.00
-604.00 364.00
-612.00 364.00
-*
-1 1
-3 $+$
-POLYGON
-592.00 320.00
-592.00 384.00
-656.00 352.00
-592.00 320.00
-*
-3 1
-0
-ARC
-392.00 390.00
-392.00 392.00
-392.00 392.00
-392.00 388.00
-390.00 390.00
-394.00 390.00
-*
-3 0
-0
-VECTOR
-396.00 388.00
-384.00 384.00
-*
-3 0
-0
-ARC
-392.00 378.00
-392.00 380.00
-392.00 380.00
-392.00 376.00
-390.00 378.00
-394.00 378.00
-*
-3 0
-0
-ARC
-312.00 326.00
-312.00 328.00
-312.00 328.00
-312.00 324.00
-314.00 326.00
-310.00 326.00
-*
-3 0
-0
-CENTRIGHT
-276.00 352.00
-243.00 348.00
-259.00 348.00
-276.00 348.00
-*
-1 1
-7 $vv B2$
-POLYGON
-280.00 356.00
-280.00 348.00
-284.00 348.00
-288.00 352.00
-284.00 356.00
-*
-3 21
-0
-VECTOR
-308.00 324.00
-320.00 320.00
-*
-3 0
-0
-ARC
-312.00 314.00
-312.00 316.00
-312.00 316.00
-312.00 312.00
-314.00 314.00
-310.00 314.00
-*
-3 0
-0
-CENTLEFT
-292.00 212.00
-292.00 208.00
-300.00 208.00
-308.00 208.00
-*
-1 1
-3 $+$
-CENTLEFT
-292.00 268.00
-292.00 264.00
-300.00 264.00
-309.00 264.00
-*
-1 1
-3 $-$
-POLYGON
-288.00 192.00
-288.00 288.00
-384.00 240.00
-288.00 192.00
-*
-3 1
-0
-ARC
-256.00 268.00
-256.00 267.00
-256.00 269.00
-256.00 267.00
-257.00 268.00
-255.00 268.00
-*
-3 0
-0
-VECTOR
-328.00 268.00
-416.00 268.00
-416.00 320.00
-356.00 320.00
-*
-6 0
-0
-VECTOR
-356.00 328.00
-356.00 312.00
-*
-3 0
-0
-VECTOR
-352.00 328.00
-352.00 312.00
-*
-6 0
-0
-VECTOR
-320.00 320.00
-352.00 320.00
-*
-6 0
-0
-VECTOR
-312.00 312.00
-256.00 312.00
-256.00 268.00
-288.00 268.00
-*
-6 0
-0
-VECTOR
-224.00 276.00
-224.00 260.00
-*
-3 0
-0
-VECTOR
-228.00 276.00
-228.00 260.00
-*
-6 0
-0
-VECTOR
-228.00 268.00
-256.00 268.00
-*
-6 0
-0
-VECTOR
-224.00 268.00
-192.00 268.00
-192.00 384.00
-316.00 384.00
-*
-6 0
-0
-VECTOR
-320.00 392.00
-320.00 376.00
-*
-3 0
-0
-VECTOR
-316.00 392.00
-316.00 376.00
-*
-6 0
-0
-VECTOR
-312.00 328.00
-312.00 352.00
-288.00 352.00
-*
-6 0
-0
-VECTOR
-392.00 392.00
-416.00 392.00
-416.00 320.00
-*
-6 0
-0
-VECTOR
-320.00 384.00
-384.00 384.00
-*
-6 0
-0
-VECTOR
-192.00 256.00
-192.00 268.00
-160.00 268.00
-*
-6 0
-0
-ARC
-160.00 266.00
-160.00 268.00
-160.00 268.00
-160.00 264.00
-158.00 266.00
-162.00 266.00
-*
-3 0
-0
-VECTOR
-164.00 256.00
-152.00 260.00
-*
-3 0
-0
-ARC
-160.00 254.00
-160.00 256.00
-160.00 256.00
-160.00 252.00
-158.00 254.00
-162.00 254.00
-*
-3 0
-0
-ARC
-194.00 256.00
-196.00 256.00
-196.00 256.00
-192.00 256.00
-194.00 254.00
-194.00 258.00
-*
-3 0
-0
-VECTOR
-204.00 260.00
-200.00 248.00
-*
-3 0
-0
-VECTOR
-200.00 248.00
-200.00 232.00
-*
-6 0
-0
-VECTOR
-152.00 260.00
-128.00 260.00
-*
-6 0
-0
-ARC
-96.00 266.00
-96.00 268.00
-96.00 268.00
-96.00 264.00
-98.00 266.00
-94.00 266.00
-*
-3 0
-0
-VECTOR
-92.00 256.00
-104.00 260.00
-*
-3 0
-0
-ARC
-96.00 254.00
-96.00 256.00
-96.00 256.00
-96.00 252.00
-98.00 254.00
-94.00 254.00
-*
-3 0
-0
-VECTOR
-124.00 268.00
-124.00 252.00
-*
-3 0
-0
-VECTOR
-128.00 268.00
-128.00 252.00
-*
-6 0
-0
-VECTOR
-104.00 260.00
-124.00 260.00
-*
-6 0
-0
-VECTOR
-96.00 268.00
-96.00 320.00
-40.00 320.00
-*
-6 0
-0
-ARC
-28.00 338.00
-28.00 340.00
-28.00 340.00
-28.00 336.00
-30.00 338.00
-26.00 338.00
-*
-3 0
-0
-VECTOR
-24.00 336.00
-40.00 320.00
-*
-3 0
-0
-ARC
-28.00 302.00
-28.00 304.00
-28.00 304.00
-28.00 300.00
-30.00 302.00
-26.00 302.00
-*
-3 0
-0
-ARC
-14.00 320.00
-12.00 320.00
-12.00 320.00
-16.00 320.00
-14.00 322.00
-14.00 318.00
-*
-3 0
-0
-VECTOR
-96.00 252.00
-76.00 252.00
-*
-6 0
-0
-ARC
-68.00 258.00
-68.00 260.00
-68.00 260.00
-68.00 256.00
-70.00 258.00
-66.00 258.00
-*
-3 0
-0
-VECTOR
-64.00 248.00
-76.00 252.00
-*
-3 0
-0
-ARC
-68.00 246.00
-68.00 248.00
-68.00 248.00
-68.00 244.00
-70.00 246.00
-66.00 246.00
-*
-3 0
-0
-VECTOR
-352.00 384.00
-352.00 416.00
-512.00 416.00
-*
-6 0
-0
-VECTOR
-512.00 424.00
-512.00 408.00
-*
-3 0
-0
-VECTOR
-516.00 424.00
-516.00 408.00
-*
-6 0
-0
-VECTOR
-516.00 416.00
-564.00 416.00
-564.00 368.00
-592.00 368.00
-*
-6 0
-0
-VECTOR
-564.00 416.00
-564.00 448.00
-516.00 448.00
-*
-6 0
-0
-ARC
-480.00 454.00
-480.00 456.00
-480.00 456.00
-480.00 452.00
-482.00 454.00
-478.00 454.00
-*
-3 0
-0
-VECTOR
-476.00 444.00
-488.00 448.00
-*
-3 0
-0
-ARC
-480.00 442.00
-480.00 444.00
-480.00 444.00
-480.00 440.00
-482.00 442.00
-478.00 442.00
-*
-3 0
-0
-VECTOR
-512.00 456.00
-512.00 440.00
-*
-3 0
-0
-VECTOR
-516.00 456.00
-516.00 440.00
-*
-6 0
-0
-VECTOR
-488.00 448.00
-512.00 448.00
-*
-6 0
-0
-VECTOR
-480.00 440.00
-480.00 416.00
-*
-6 0
-0
-ARC
-352.00 384.00
-352.00 383.00
-352.00 385.00
-352.00 383.00
-353.00 384.00
-351.00 384.00
-*
-3 0
-0
-ARC
-480.00 416.00
-480.00 415.00
-480.00 417.00
-480.00 415.00
-481.00 416.00
-479.00 416.00
-*
-3 0
-0
-ARC
-564.00 416.00
-564.00 415.00
-564.00 417.00
-564.00 415.00
-565.00 416.00
-563.00 416.00
-*
-3 0
-0
-VECTOR
-480.00 456.00
-480.00 472.00
-*
-6 0
-0
-BOTCENT
-480.00 488.00
-452.00 488.00
-480.00 488.00
-509.00 488.00
-*
-1 1
-12 $- ^ vv REF$
-POLYGON
-484.00 480.00
-476.00 480.00
-476.00 476.00
-480.00 472.00
-484.00 476.00
-*
-3 21
-0
-ARC
-550.00 396.00
-548.00 396.00
-548.00 396.00
-552.00 396.00
-550.00 394.00
-550.00 398.00
-*
-3 0
-0
-VECTOR
-540.00 400.00
-544.00 388.00
-*
-3 0
-0
-VECTOR
-544.00 388.00
-544.00 316.00
-*
-6 0
-0
-VECTOR
-552.00 396.00
-552.00 416.00
-*
-6 0
-0
-ARC
-552.00 416.00
-552.00 415.00
-552.00 417.00
-552.00 415.00
-553.00 416.00
-551.00 416.00
-*
-3 0
-0
-CENTRIGHT
-516.00 352.00
-483.00 348.00
-499.00 348.00
-516.00 348.00
-*
-1 1
-7 $vv B1$
-POLYGON
-520.00 356.00
-520.00 348.00
-524.00 348.00
-528.00 352.00
-524.00 356.00
-*
-3 21
-0
-VECTOR
-512.00 280.00
-512.00 296.00
-*
-3 0
-0
-VECTOR
-516.00 280.00
-516.00 296.00
-*
-6 0
-0
-VECTOR
-564.00 288.00
-564.00 256.00
-516.00 256.00
-*
-6 0
-0
-ARC
-480.00 250.00
-480.00 248.00
-480.00 248.00
-480.00 252.00
-482.00 250.00
-478.00 250.00
-*
-3 0
-0
-VECTOR
-476.00 260.00
-488.00 256.00
-*
-3 0
-0
-ARC
-480.00 262.00
-480.00 260.00
-480.00 260.00
-480.00 264.00
-482.00 262.00
-478.00 262.00
-*
-3 0
-0
-VECTOR
-512.00 248.00
-512.00 264.00
-*
-3 0
-0
-VECTOR
-516.00 248.00
-516.00 264.00
-*
-6 0
-0
-VECTOR
-488.00 256.00
-512.00 256.00
-*
-6 0
-0
-VECTOR
-480.00 264.00
-480.00 288.00
-*
-6 0
-0
-ARC
-480.00 288.00
-480.00 289.00
-480.00 287.00
-480.00 289.00
-481.00 288.00
-479.00 288.00
-*
-3 0
-0
-ARC
-564.00 288.00
-564.00 289.00
-564.00 287.00
-564.00 289.00
-565.00 288.00
-563.00 288.00
-*
-3 0
-0
-VECTOR
-480.00 248.00
-480.00 232.00
-*
-6 0
-0
-ARC
-550.00 308.00
-548.00 308.00
-548.00 308.00
-552.00 308.00
-550.00 310.00
-550.00 306.00
-*
-3 0
-0
-VECTOR
-540.00 304.00
-544.00 316.00
-*
-3 0
-0
-VECTOR
-552.00 308.00
-552.00 288.00
-*
-6 0
-0
-ARC
-552.00 288.00
-552.00 289.00
-552.00 287.00
-552.00 289.00
-553.00 288.00
-551.00 288.00
-*
-3 0
-0
-VECTOR
-528.00 352.00
-544.00 352.00
-*
-6 0
-0
-ARC
-544.00 352.00
-544.00 351.00
-544.00 353.00
-544.00 351.00
-545.00 352.00
-543.00 352.00
-*
-3 0
-0
-VECTOR
-516.00 288.00
-564.00 288.00
-564.00 336.00
-592.00 336.00
-*
-6 0
-0
-VECTOR
-512.00 288.00
-448.00 288.00
-448.00 64.00
-*
-6 0
-0
-VECTOR
-352.00 416.00
-352.00 448.00
-*
-6 0
-0
-ARC
-352.00 416.00
-352.00 415.00
-352.00 417.00
-352.00 415.00
-353.00 416.00
-351.00 416.00
-*
-3 0
-0
-BOTCENT
-352.00 460.00
-343.00 460.00
-352.00 460.00
-361.00 460.00
-*
-1 1
-3 $A$
-POLYGON
-356.00 448.00
-348.00 448.00
-348.00 452.00
-352.00 456.00
-356.00 452.00
-*
-3 21
-0
-BOTCENT
-320.00 396.00
-307.00 396.00
-320.00 396.00
-333.00 396.00
-*
-1 1
-6 $cc F$
-BOTRIGHT
-348.00 328.00
-321.00 328.00
-334.00 328.00
-348.00 328.00
-*
-1 1
-6 $cc O$
-BOTCENT
-228.00 280.00
-215.00 280.00
-228.00 280.00
-242.00 280.00
-*
-1 1
-6 $cc C$
-BOTCENT
-128.00 272.00
-116.00 272.00
-128.00 272.00
-141.00 272.00
-*
-1 1
-6 $cc S$
-CENTLEFT
-204.00 256.00
-204.00 252.00
-227.00 252.00
-250.00 252.00
-*
-1 1
-10 $DP sub 2$
-BOTCENT
-68.00 264.00
-56.00 264.00
-68.00 264.00
-80.00 264.00
-*
-1 1
-4 $PN$
-TOPRIGHT
-388.00 380.00
-342.00 371.00
-365.00 371.00
-388.00 371.00
-*
-1 1
-10 $DP sub 2$
-TOPCENT
-392.00 348.00
-372.00 339.00
-392.00 339.00
-412.00 339.00
-*
-1 1
-6 $AGND$
-POLYGON
-396.00 352.00
-388.00 352.00
-388.00 356.00
-392.00 360.00
-396.00 356.00
-*
-3 21
-0
-VECTOR
-392.00 360.00
-392.00 376.00
-*
-6 0
-0
-TOPRIGHT
-540.00 396.00
-494.00 387.00
-517.00 387.00
-540.00 387.00
-*
-1 1
-10 $DP sub 1$
-CENTRIGHT
-508.00 440.00
-476.00 436.00
-492.00 436.00
-508.00 436.00
-*
-1 1
-7 $cc D1$
-CENTRIGHT
-508.00 408.00
-476.00 404.00
-492.00 404.00
-508.00 404.00
-*
-1 1
-7 $cc D2$
-BOTRIGHT
-508.00 268.00
-476.00 268.00
-492.00 268.00
-508.00 268.00
-*
-1 1
-7 $cc D1$
-BOTRIGHT
-508.00 300.00
-476.00 300.00
-492.00 300.00
-508.00 300.00
-*
-1 1
-7 $cc D2$
-VECTOR
-672.00 392.00
-672.00 344.00
-720.00 344.00
-720.00 392.00
-672.00 392.00
-*
-3 0
-0
-ARC
-696.00 396.00
-696.00 392.00
-696.00 400.00
-696.00 392.00
-700.00 396.00
-692.00 396.00
-*
-3 0
-0
-TOPCENT
-696.00 392.00
-688.00 383.00
-696.00 383.00
-705.00 383.00
-*
-1 1
-3 $R$
-ARC
-668.00 368.00
-668.00 364.00
-668.00 372.00
-668.00 364.00
-672.00 368.00
-664.00 368.00
-*
-3 0
-0
-CENTLEFT
-676.00 368.00
-676.00 364.00
-688.00 364.00
-700.00 364.00
-*
-1 1
-4 $CK$
-ARC
-724.00 368.00
-724.00 364.00
-724.00 372.00
-724.00 364.00
-720.00 368.00
-728.00 368.00
-*
-3 0
-0
-CENTRIGHT
-720.00 368.00
-688.00 364.00
-704.00 364.00
-720.00 364.00
-*
-1 1
-7 $O bar$
-CENTLEFT
-676.00 352.00
-676.00 348.00
-684.00 348.00
-693.00 348.00
-*
-1 1
-3 $D$
-CENTRIGHT
-720.00 352.00
-703.00 348.00
-711.00 348.00
-720.00 348.00
-*
-1 1
-3 $O$
-VECTOR
-656.00 352.00
-672.00 352.00
-*
-6 0
-0
-VECTOR
-720.00 352.00
-736.00 352.00
-736.00 176.00
-768.00 176.00
-*
-6 0
-0
-VECTOR
-728.00 368.00
-800.00 368.00
-*
-6 0
-0
-BOTRIGHT
-804.00 376.00
-762.00 376.00
-783.00 376.00
-804.00 376.00
-*
-1 1
-6 $DOWN$
-POLYGON
-800.00 372.00
-800.00 364.00
-804.00 364.00
-808.00 368.00
-804.00 372.00
-*
-3 21
-0
-VECTOR
-516.00 192.00
-564.00 192.00
-564.00 144.00
-592.00 144.00
-*
-6 0
-0
-VECTOR
-512.00 192.00
-432.00 192.00
-432.00 416.00
-*
-6 0
-0
-VECTOR
-512.00 200.00
-512.00 184.00
-*
-3 0
-0
-VECTOR
-516.00 200.00
-516.00 184.00
-*
-6 0
-0
-VECTOR
-564.00 192.00
-564.00 224.00
-516.00 224.00
-*
-6 0
-0
-ARC
-480.00 230.00
-480.00 232.00
-480.00 232.00
-480.00 228.00
-482.00 230.00
-478.00 230.00
-*
-3 0
-0
-VECTOR
-476.00 220.00
-488.00 224.00
-*
-3 0
-0
-ARC
-480.00 218.00
-480.00 220.00
-480.00 220.00
-480.00 216.00
-482.00 218.00
-478.00 218.00
-*
-3 0
-0
-VECTOR
-512.00 232.00
-512.00 216.00
-*
-3 0
-0
-VECTOR
-516.00 232.00
-516.00 216.00
-*
-6 0
-0
-VECTOR
-488.00 224.00
-512.00 224.00
-*
-6 0
-0
-VECTOR
-480.00 216.00
-480.00 192.00
-*
-6 0
-0
-ARC
-480.00 192.00
-480.00 191.00
-480.00 193.00
-480.00 191.00
-481.00 192.00
-479.00 192.00
-*
-3 0
-0
-ARC
-564.00 192.00
-564.00 191.00
-564.00 193.00
-564.00 191.00
-565.00 192.00
-563.00 192.00
-*
-3 0
-0
-VECTOR
-480.00 232.00
-480.00 248.00
-*
-6 0
-0
-VECTOR
-552.00 172.00
-552.00 192.00
-*
-6 0
-0
-ARC
-552.00 192.00
-552.00 191.00
-552.00 193.00
-552.00 191.00
-553.00 192.00
-551.00 192.00
-*
-3 0
-0
-TOPRIGHT
-508.00 220.00
-476.00 211.00
-492.00 211.00
-508.00 211.00
-*
-1 1
-7 $cc D1$
-TOPRIGHT
-508.00 188.00
-476.00 179.00
-492.00 179.00
-508.00 179.00
-*
-1 1
-7 $cc D2$
-VECTOR
-224.00 212.00
-192.00 212.00
-192.00 96.00
-316.00 96.00
-*
-6 0
-0
-VECTOR
-312.00 168.00
-256.00 168.00
-256.00 212.00
-288.00 212.00
-*
-6 0
-0
-VECTOR
-328.00 212.00
-416.00 212.00
-416.00 160.00
-356.00 160.00
-*
-6 0
-0
-VECTOR
-604.00 136.00
-612.00 136.00
-612.00 116.00
-620.00 116.00
-*
-6 0
-0
-ARC
-416.00 160.00
-416.00 161.00
-416.00 159.00
-416.00 161.00
-417.00 160.00
-415.00 160.00
-*
-3 0
-0
-CENTLEFT
-596.00 112.00
-596.00 108.00
-604.00 108.00
-613.00 108.00
-*
-1 1
-3 $-$
-CENTLEFT
-596.00 144.00
-596.00 140.00
-604.00 140.00
-612.00 140.00
-*
-1 1
-3 $+$
-POLYGON
-592.00 160.00
-592.00 96.00
-656.00 128.00
-592.00 160.00
-*
-3 1
-0
-ARC
-392.00 90.00
-392.00 88.00
-392.00 88.00
-392.00 92.00
-390.00 90.00
-394.00 90.00
-*
-3 0
-0
-VECTOR
-396.00 92.00
-384.00 96.00
-*
-3 0
-0
-ARC
-392.00 102.00
-392.00 100.00
-392.00 100.00
-392.00 104.00
-390.00 102.00
-394.00 102.00
-*
-3 0
-0
-ARC
-312.00 154.00
-312.00 152.00
-312.00 152.00
-312.00 156.00
-314.00 154.00
-310.00 154.00
-*
-3 0
-0
-CENTRIGHT
-276.00 128.00
-243.00 124.00
-259.00 124.00
-276.00 124.00
-*
-1 1
-7 $vv B2$
-POLYGON
-280.00 124.00
-280.00 132.00
-284.00 132.00
-288.00 128.00
-284.00 124.00
-*
-3 21
-0
-VECTOR
-308.00 156.00
-320.00 160.00
-*
-3 0
-0
-ARC
-312.00 166.00
-312.00 164.00
-312.00 164.00
-312.00 168.00
-314.00 166.00
-310.00 166.00
-*
-3 0
-0
-VECTOR
-356.00 152.00
-356.00 168.00
-*
-3 0
-0
-VECTOR
-352.00 152.00
-352.00 168.00
-*
-6 0
-0
-VECTOR
-320.00 160.00
-352.00 160.00
-*
-6 0
-0
-VECTOR
-320.00 88.00
-320.00 104.00
-*
-3 0
-0
-VECTOR
-316.00 88.00
-316.00 104.00
-*
-6 0
-0
-VECTOR
-312.00 152.00
-312.00 128.00
-288.00 128.00
-*
-6 0
-0
-VECTOR
-392.00 88.00
-416.00 88.00
-416.00 160.00
-*
-6 0
-0
-VECTOR
-320.00 96.00
-384.00 96.00
-*
-6 0
-0
-VECTOR
-352.00 96.00
-352.00 64.00
-512.00 64.00
-*
-6 0
-0
-VECTOR
-512.00 56.00
-512.00 72.00
-*
-3 0
-0
-VECTOR
-516.00 56.00
-516.00 72.00
-*
-6 0
-0
-VECTOR
-516.00 64.00
-564.00 64.00
-564.00 112.00
-592.00 112.00
-*
-6 0
-0
-VECTOR
-564.00 64.00
-564.00 32.00
-516.00 32.00
-*
-6 0
-0
-ARC
-480.00 26.00
-480.00 24.00
-480.00 24.00
-480.00 28.00
-482.00 26.00
-478.00 26.00
-*
-3 0
-0
-VECTOR
-476.00 36.00
-488.00 32.00
-*
-3 0
-0
-ARC
-480.00 38.00
-480.00 36.00
-480.00 36.00
-480.00 40.00
-482.00 38.00
-478.00 38.00
-*
-3 0
-0
-VECTOR
-512.00 24.00
-512.00 40.00
-*
-3 0
-0
-VECTOR
-516.00 24.00
-516.00 40.00
-*
-6 0
-0
-VECTOR
-488.00 32.00
-512.00 32.00
-*
-6 0
-0
-VECTOR
-480.00 40.00
-480.00 64.00
-*
-6 0
-0
-ARC
-352.00 96.00
-352.00 97.00
-352.00 95.00
-352.00 97.00
-353.00 96.00
-351.00 96.00
-*
-3 0
-0
-ARC
-480.00 64.00
-480.00 65.00
-480.00 63.00
-480.00 65.00
-481.00 64.00
-479.00 64.00
-*
-3 0
-0
-ARC
-564.00 64.00
-564.00 65.00
-564.00 63.00
-564.00 65.00
-565.00 64.00
-563.00 64.00
-*
-3 0
-0
-VECTOR
-480.00 24.00
-480.00 8.00
-*
-6 0
-0
-TOPCENT
-480.00 -4.00
-452.00 -13.00
-480.00 -13.00
-509.00 -13.00
-*
-1 1
-12 $- ^ vv REF$
-POLYGON
-484.00 0.00
-476.00 0.00
-476.00 4.00
-480.00 8.00
-484.00 4.00
-*
-3 21
-0
-ARC
-550.00 84.00
-548.00 84.00
-548.00 84.00
-552.00 84.00
-550.00 86.00
-550.00 82.00
-*
-3 0
-0
-VECTOR
-540.00 80.00
-544.00 92.00
-*
-3 0
-0
-VECTOR
-544.00 92.00
-544.00 164.00
-*
-6 0
-0
-VECTOR
-552.00 84.00
-552.00 64.00
-*
-6 0
-0
-ARC
-552.00 64.00
-552.00 65.00
-552.00 63.00
-552.00 65.00
-553.00 64.00
-551.00 64.00
-*
-3 0
-0
-CENTRIGHT
-516.00 128.00
-483.00 124.00
-499.00 124.00
-516.00 124.00
-*
-1 1
-7 $vv B1$
-POLYGON
-520.00 124.00
-520.00 132.00
-524.00 132.00
-528.00 128.00
-524.00 124.00
-*
-3 21
-0
-ARC
-550.00 172.00
-548.00 172.00
-548.00 172.00
-552.00 172.00
-550.00 170.00
-550.00 174.00
-*
-3 0
-0
-VECTOR
-540.00 176.00
-544.00 164.00
-*
-3 0
-0
-VECTOR
-528.00 128.00
-544.00 128.00
-*
-6 0
-0
-ARC
-544.00 128.00
-544.00 129.00
-544.00 127.00
-544.00 129.00
-545.00 128.00
-543.00 128.00
-*
-3 0
-0
-VECTOR
-352.00 64.00
-352.00 32.00
-*
-6 0
-0
-ARC
-352.00 64.00
-352.00 65.00
-352.00 63.00
-352.00 65.00
-353.00 64.00
-351.00 64.00
-*
-3 0
-0
-CENTCENT
-352.00 16.00
-344.00 12.00
-352.00 12.00
-360.00 12.00
-*
-1 1
-3 $B$
-POLYGON
-356.00 32.00
-348.00 32.00
-348.00 28.00
-352.00 24.00
-356.00 28.00
-*
-3 21
-0
-TOPCENT
-320.00 84.00
-307.00 75.00
-320.00 75.00
-333.00 75.00
-*
-1 1
-6 $cc F$
-TOPRIGHT
-348.00 160.00
-321.00 151.00
-334.00 151.00
-348.00 151.00
-*
-1 1
-6 $cc O$
-BOTRIGHT
-388.00 100.00
-342.00 100.00
-365.00 100.00
-388.00 100.00
-*
-1 1
-10 $DP sub 2$
-BOTCENT
-392.00 132.00
-372.00 132.00
-392.00 132.00
-412.00 132.00
-*
-1 1
-6 $AGND$
-POLYGON
-396.00 128.00
-388.00 128.00
-388.00 124.00
-392.00 120.00
-396.00 124.00
-*
-3 21
-0
-VECTOR
-392.00 120.00
-392.00 104.00
-*
-6 0
-0
-BOTRIGHT
-540.00 84.00
-494.00 84.00
-517.00 84.00
-540.00 84.00
-*
-1 1
-10 $DP sub 1$
-BOTRIGHT
-508.00 44.00
-476.00 44.00
-492.00 44.00
-508.00 44.00
-*
-1 1
-7 $cc D1$
-BOTRIGHT
-508.00 76.00
-476.00 76.00
-492.00 76.00
-508.00 76.00
-*
-1 1
-7 $cc D2$
-VECTOR
-672.00 88.00
-672.00 136.00
-720.00 136.00
-720.00 88.00
-672.00 88.00
-*
-3 0
-0
-ARC
-696.00 84.00
-696.00 88.00
-696.00 80.00
-696.00 88.00
-700.00 84.00
-692.00 84.00
-*
-3 0
-0
-BOTCENT
-696.00 88.00
-688.00 88.00
-696.00 88.00
-705.00 88.00
-*
-1 1
-3 $R$
-ARC
-668.00 112.00
-668.00 116.00
-668.00 108.00
-668.00 116.00
-672.00 112.00
-664.00 112.00
-*
-3 0
-0
-CENTLEFT
-676.00 112.00
-676.00 108.00
-688.00 108.00
-700.00 108.00
-*
-1 1
-4 $CK$
-ARC
-724.00 112.00
-724.00 116.00
-724.00 108.00
-724.00 116.00
-720.00 112.00
-728.00 112.00
-*
-3 0
-0
-CENTRIGHT
-720.00 112.00
-688.00 108.00
-704.00 108.00
-720.00 108.00
-*
-1 1
-7 $O bar$
-CENTLEFT
-676.00 128.00
-676.00 124.00
-684.00 124.00
-693.00 124.00
-*
-1 1
-3 $D$
-CENTRIGHT
-720.00 128.00
-703.00 124.00
-711.00 124.00
-720.00 124.00
-*
-1 1
-3 $O$
-VECTOR
-656.00 128.00
-672.00 128.00
-*
-6 0
-0
-VECTOR
-720.00 128.00
-800.00 128.00
-*
-6 0
-0
-CENTRIGHT
-804.00 120.00
-780.00 116.00
-792.00 116.00
-804.00 116.00
-*
-1 1
-4 $UP$
-POLYGON
-800.00 124.00
-800.00 132.00
-804.00 132.00
-808.00 128.00
-804.00 124.00
-*
-3 21
-0
-ARC
-256.00 212.00
-256.00 213.00
-256.00 211.00
-256.00 213.00
-257.00 212.00
-255.00 212.00
-*
-3 0
-0
-VECTOR
-224.00 204.00
-224.00 220.00
-*
-3 0
-0
-VECTOR
-228.00 204.00
-228.00 220.00
-*
-6 0
-0
-VECTOR
-228.00 212.00
-256.00 212.00
-*
-6 0
-0
-VECTOR
-192.00 224.00
-192.00 212.00
-160.00 212.00
-*
-6 0
-0
-ARC
-160.00 214.00
-160.00 212.00
-160.00 212.00
-160.00 216.00
-158.00 214.00
-162.00 214.00
-*
-3 0
-0
-VECTOR
-164.00 224.00
-152.00 220.00
-*
-3 0
-0
-ARC
-160.00 226.00
-160.00 224.00
-160.00 224.00
-160.00 228.00
-158.00 226.00
-162.00 226.00
-*
-3 0
-0
-ARC
-194.00 224.00
-196.00 224.00
-196.00 224.00
-192.00 224.00
-194.00 226.00
-194.00 222.00
-*
-3 0
-0
-VECTOR
-204.00 220.00
-200.00 232.00
-*
-3 0
-0
-VECTOR
-152.00 220.00
-128.00 220.00
-*
-6 0
-0
-ARC
-96.00 214.00
-96.00 212.00
-96.00 212.00
-96.00 216.00
-98.00 214.00
-94.00 214.00
-*
-3 0
-0
-VECTOR
-92.00 224.00
-104.00 220.00
-*
-3 0
-0
-ARC
-96.00 226.00
-96.00 224.00
-96.00 224.00
-96.00 228.00
-98.00 226.00
-94.00 226.00
-*
-3 0
-0
-VECTOR
-124.00 212.00
-124.00 228.00
-*
-3 0
-0
-VECTOR
-128.00 212.00
-128.00 228.00
-*
-6 0
-0
-VECTOR
-104.00 220.00
-124.00 220.00
-*
-6 0
-0
-VECTOR
-96.00 212.00
-96.00 160.00
-40.00 160.00
-*
-6 0
-0
-VECTOR
-96.00 228.00
-76.00 228.00
-*
-6 0
-0
-ARC
-68.00 222.00
-68.00 220.00
-68.00 220.00
-68.00 224.00
-70.00 222.00
-66.00 222.00
-*
-3 0
-0
-VECTOR
-64.00 232.00
-76.00 228.00
-*
-3 0
-0
-ARC
-68.00 234.00
-68.00 232.00
-68.00 232.00
-68.00 236.00
-70.00 234.00
-66.00 234.00
-*
-3 0
-0
-TOPCENT
-228.00 200.00
-215.00 191.00
-228.00 191.00
-242.00 191.00
-*
-1 1
-6 $cc C$
-TOPCENT
-128.00 208.00
-116.00 199.00
-128.00 199.00
-141.00 199.00
-*
-1 1
-6 $cc S$
-CENTLEFT
-204.00 224.00
-204.00 220.00
-227.00 220.00
-250.00 220.00
-*
-1 1
-10 $DP sub 2$
-CENTRIGHT
-154.00 240.00
-129.00 236.00
-141.00 236.00
-154.00 236.00
-*
-1 1
-5 $ITS$
-CENTCENT
-94.00 240.00
-84.00 236.00
-94.00 236.00
-105.00 236.00
-*
-1 1
-4 $SP$
-TOPCENT
-68.00 216.00
-56.00 207.00
-68.00 207.00
-80.00 207.00
-*
-1 1
-4 $PN$
-ARC
-432.00 416.00
-432.00 415.00
-432.00 417.00
-432.00 415.00
-433.00 416.00
-431.00 416.00
-*
-3 0
-0
-ARC
-448.00 64.00
-448.00 63.00
-448.00 65.00
-448.00 63.00
-449.00 64.00
-447.00 64.00
-*
-3 0
-0
-VECTOR
-480.00 248.00
-480.00 232.00
-*
-6 0
-0
-CENTRIGHT
-452.00 240.00
-396.00 236.00
-424.00 236.00
-452.00 236.00
-*
-1 1
-12 $+ ^ vv REF$
-POLYGON
-452.00 244.00
-452.00 236.00
-456.00 236.00
-460.00 240.00
-456.00 244.00
-*
-3 21
-0
-VECTOR
-460.00 240.00
-480.00 240.00
-*
-6 0
-0
-ARC
-480.00 240.00
-480.00 241.00
-480.00 239.00
-480.00 241.00
-481.00 240.00
-479.00 240.00
-*
-3 0
-0
-VECTOR
-160.00 252.00
-160.00 228.00
-*
-6 0
-0
-VECTOR
-160.00 240.00
-224.00 240.00
-*
-6 0
-0
-ARC
-160.00 240.00
-160.00 239.00
-160.00 241.00
-160.00 239.00
-161.00 240.00
-159.00 240.00
-*
-3 0
-0
-ARC
-200.00 240.00
-200.00 239.00
-200.00 241.00
-200.00 239.00
-201.00 240.00
-199.00 240.00
-*
-3 0
-0
-CENTLEFT
-236.00 240.00
-236.00 236.00
-252.00 236.00
-268.00 236.00
-*
-1 1
-5 $GND$
-POLYGON
-232.00 244.00
-232.00 236.00
-228.00 236.00
-224.00 240.00
-228.00 244.00
-*
-3 21
-0
-TOPRIGHT
-540.00 172.00
-494.00 163.00
-517.00 163.00
-540.00 163.00
-*
-1 1
-10 $DP sub 1$
-BOTRIGHT
-540.00 308.00
-494.00 308.00
-517.00 308.00
-540.00 308.00
-*
-1 1
-10 $DP sub 1$
-VECTOR
-340.00 260.00
-340.00 220.00
-300.00 240.00
-340.00 260.00
-*
-3 0
-0
-VECTOR
-340.00 232.00
-384.00 232.00
-384.00 224.00
-*
-6 0
-0
-POLYGON
-380.00 224.00
-392.00 224.00
-384.00 216.00
-376.00 224.00
-*
-6 21
-0
-VECTOR
-340.00 248.00
-392.00 248.00
-*
-6 0
-0
-BOTLEFT
-396.00 256.00
-396.00 256.00
-416.00 256.00
-437.00 256.00
-*
-1 1
-8 $vv INC$
-POLYGON
-400.00 252.00
-400.00 244.00
-396.00 244.00
-392.00 248.00
-396.00 252.00
-*
-3 21
-0
-CENTRIGHT
-336.00 248.00
-319.00 244.00
-327.00 244.00
-336.00 244.00
-*
-1 1
-3 $-$
-CENTRIGHT
-336.00 232.00
-320.00 228.00
-328.00 228.00
-336.00 228.00
-*
-1 1
-3 $+$
-VECTOR
-784.00 192.00
-768.00 192.00
-768.00 160.00
-784.00 160.00
-*
-3 0
-0
-ARC
-784.00 176.00
-784.00 160.00
-784.00 192.00
-*
-3 180
-0
-VECTOR
-784.00 256.00
-768.00 256.00
-768.00 224.00
-784.00 224.00
-*
-3 0
-0
-ARC
-784.00 240.00
-784.00 224.00
-784.00 256.00
-*
-3 180
-0
-ARC
-832.00 312.00
-832.00 296.00
-832.00 328.00
-*
-3 180
-0
-VECTOR
-832.00 328.00
-816.00 328.00
-816.00 296.00
-832.00 296.00
-*
-3 0
-0
-VECTOR
-744.00 368.00
-744.00 312.00
-772.00 312.00
-*
-6 0
-0
-VECTOR
-744.00 312.00
-744.00 240.00
-768.00 240.00
-*
-6 0
-0
-VECTOR
-728.00 112.00
-744.00 112.00
-744.00 232.00
-768.00 232.00
-*
-6 0
-0
-VECTOR
-800.00 304.00
-816.00 304.00
-*
-6 0
-0
-VECTOR
-816.00 320.00
-800.00 320.00
-800.00 332.00
-720.00 332.00
-*
-6 0
-0
-CENTRIGHT
-708.00 332.00
-683.00 328.00
-695.00 328.00
-708.00 328.00
-*
-1 1
-5 $ITS$
-POLYGON
-712.00 336.00
-712.00 328.00
-716.00 328.00
-720.00 332.00
-716.00 336.00
-*
-3 21
-0
-VECTOR
-760.00 332.00
-760.00 184.00
-768.00 184.00
-*
-6 0
-0
-VECTOR
-760.00 248.00
-768.00 248.00
-*
-6 0
-0
-VECTOR
-752.00 128.00
-752.00 168.00
-768.00 168.00
-*
-6 0
-0
-CENTLEFT
-828.00 240.00
-828.00 236.00
-843.00 236.00
-858.00 236.00
-*
-1 1
-5 $ABP$
-POLYGON
-816.00 244.00
-816.00 236.00
-820.00 236.00
-824.00 240.00
-820.00 244.00
-*
-3 21
-0
-VECTOR
-800.00 240.00
-816.00 240.00
-*
-6 0
-0
-CENTLEFT
-828.00 176.00
-828.00 172.00
-844.00 172.00
-860.00 172.00
-*
-1 1
-5 $ABN$
-POLYGON
-816.00 180.00
-816.00 172.00
-820.00 172.00
-824.00 176.00
-820.00 180.00
-*
-3 21
-0
-VECTOR
-800.00 176.00
-816.00 176.00
-*
-6 0
-0
-VECTOR
-848.00 312.00
-864.00 312.00
-*
-6 0
-0
-POLYGON
-864.00 316.00
-864.00 308.00
-868.00 308.00
-872.00 312.00
-868.00 316.00
-*
-3 21
-0
-CENTLEFT
-876.00 312.00
-876.00 308.00
-891.00 308.00
-907.00 308.00
-*
-1 1
-5 $ABC$
-ARC
-760.00 332.00
-760.00 331.00
-760.00 333.00
-760.00 331.00
-761.00 332.00
-759.00 332.00
-*
-3 0
-0
-ARC
-744.00 368.00
-744.00 367.00
-744.00 369.00
-744.00 367.00
-745.00 368.00
-743.00 368.00
-*
-3 0
-0
-ARC
-744.00 312.00
-744.00 311.00
-744.00 313.00
-744.00 311.00
-745.00 312.00
-743.00 312.00
-*
-3 0
-0
-ARC
-760.00 248.00
-760.00 247.00
-760.00 249.00
-760.00 247.00
-761.00 248.00
-759.00 248.00
-*
-3 0
-0
-VECTOR
-752.00 168.00
-752.00 296.00
-772.00 296.00
-*
-6 0
-0
-ARC
-752.00 128.00
-752.00 127.00
-752.00 129.00
-752.00 127.00
-753.00 128.00
-751.00 128.00
-*
-3 0
-0
-ARC
-752.00 168.00
-752.00 167.00
-752.00 169.00
-752.00 167.00
-753.00 168.00
-751.00 168.00
-*
-3 0
-0
-ARC
-28.00 178.00
-28.00 180.00
-28.00 180.00
-28.00 176.00
-30.00 178.00
-26.00 178.00
-*
-3 0
-0
-VECTOR
-24.00 176.00
-40.00 160.00
-*
-3 0
-0
-ARC
-28.00 142.00
-28.00 144.00
-28.00 144.00
-28.00 140.00
-30.00 142.00
-26.00 142.00
-*
-3 0
-0
-ARC
-14.00 160.00
-12.00 160.00
-12.00 160.00
-16.00 160.00
-14.00 162.00
-14.00 158.00
-*
-3 0
-0
-VECTOR
-28.00 300.00
-0.00 300.00
-0.00 180.00
-28.00 180.00
-*
-6 0
-0
-VECTOR
-12.00 320.00
--16.00 320.00
--16.00 160.00
-12.00 160.00
-*
-6 0
-0
-VECTOR
-28.00 140.00
--32.00 140.00
--32.00 340.00
-28.00 340.00
-*
-6 0
-0
-CENTRIGHT
--60.00 268.00
--116.00 264.00
--88.00 264.00
--60.00 264.00
-*
-1 1
-12 $+ ^ vv REF$
-POLYGON
--56.00 272.00
--56.00 264.00
--52.00 264.00
--48.00 268.00
--52.00 272.00
-*
-3 21
-0
-VECTOR
--48.00 268.00
--32.00 268.00
-*
-6 0
-0
-ARC
--32.00 268.00
--32.00 267.00
--32.00 269.00
--32.00 267.00
--31.00 268.00
--33.00 268.00
-*
-3 0
-0
-ARC
--16.00 240.00
--16.00 239.00
--16.00 241.00
--16.00 239.00
--15.00 240.00
--17.00 240.00
-*
-3 0
-0
-VECTOR
--48.00 240.00
--16.00 240.00
-*
-6 0
-0
-POLYGON
--56.00 244.00
--56.00 236.00
--52.00 236.00
--48.00 240.00
--52.00 244.00
-*
-3 21
-0
-CENTRIGHT
--60.00 240.00
--100.00 236.00
--80.00 236.00
--60.00 236.00
-*
-1 1
-6 $AGND$
-CENTRIGHT
--60.00 212.00
--117.00 208.00
--89.00 208.00
--60.00 208.00
-*
-1 1
-12 $- ^ vv REF$
-POLYGON
--56.00 216.00
--56.00 208.00
--52.00 208.00
--48.00 212.00
--52.00 216.00
-*
-3 21
-0
-VECTOR
--48.00 212.00
-0.00 212.00
-*
-6 0
-0
-ARC
-0.00 212.00
-0.00 211.00
-0.00 213.00
-0.00 211.00
-1.00 212.00
--1.00 212.00
-*
-3 0
-0
-BOTRIGHT
-24.00 344.00
--6.00 344.00
-9.00 344.00
-24.00 344.00
-*
-1 1
-5 $ABP$
-BOTRIGHT
-12.00 324.00
--19.00 324.00
--4.00 324.00
-12.00 324.00
-*
-1 1
-5 $ABC$
-BOTRIGHT
-24.00 304.00
--8.00 304.00
-8.00 304.00
-24.00 304.00
-*
-1 1
-5 $ABN$
-BOTRIGHT
-24.00 184.00
--6.00 184.00
-9.00 184.00
-24.00 184.00
-*
-1 1
-5 $ABP$
-BOTRIGHT
-12.00 164.00
--19.00 164.00
--4.00 164.00
-12.00 164.00
-*
-1 1
-5 $ABC$
-BOTRIGHT
-24.00 144.00
--8.00 144.00
-8.00 144.00
-24.00 144.00
-*
-1 1
-5 $ABN$
-VECTOR
-68.00 260.00
-52.00 260.00
-52.00 220.00
-68.00 220.00
-*
-6 0
-0
-VECTOR
-68.00 244.00
-68.00 236.00
-*
-6 0
-0
-VECTOR
-68.00 240.00
-40.00 240.00
-*
-6 0
-0
-VECTOR
-52.00 260.00
-40.00 260.00
-*
-6 0
-0
-CENTRIGHT
-32.00 260.00
--21.00 256.00
-5.00 256.00
-32.00 256.00
-*
-1 1
-12 $+ ^ vv SIG$
-POLYGON
-32.00 264.00
-32.00 256.00
-36.00 256.00
-40.00 260.00
-36.00 264.00
-*
-3 21
-0
-POLYGON
-32.00 244.00
-32.00 236.00
-36.00 236.00
-40.00 240.00
-36.00 244.00
-*
-3 21
-0
-CENTRIGHT
-32.00 240.00
--22.00 236.00
-5.00 236.00
-32.00 236.00
-*
-1 1
-12 $- ^ vv SIG$
-ARC
-52.00 260.00
-52.00 259.00
-52.00 261.00
-52.00 259.00
-53.00 260.00
-51.00 260.00
-*
-3 0
-0
-ARC
-68.00 240.00
-68.00 239.00
-68.00 241.00
-68.00 239.00
-69.00 240.00
-67.00 240.00
-*
-3 0
-0
-VECTOR
-64.00 112.00
-96.00 112.00
-96.00 96.00
-*
-6 0
-0
-VECTOR
-88.00 96.00
-104.00 96.00
-*
-3 0
-0
-VECTOR
-88.00 92.00
-104.00 92.00
-*
-6 0
-0
-VECTOR
-96.00 92.00
-96.00 76.00
-*
-6 0
-0
-ARC
-90.00 68.00
-88.00 68.00
-88.00 68.00
-92.00 68.00
-90.00 70.00
-90.00 66.00
-*
-3 0
-0
-VECTOR
-92.00 64.00
-96.00 76.00
-*
-3 0
-0
-ARC
-102.00 68.00
-100.00 68.00
-100.00 68.00
-104.00 68.00
-102.00 70.00
-102.00 66.00
-*
-3 0
-0
-VECTOR
-128.00 92.00
-128.00 4.00
-*
-6 0
-0
-VECTOR
-120.00 96.00
-136.00 96.00
-*
-3 0
-0
-VECTOR
-120.00 92.00
-136.00 92.00
-*
-6 0
-0
-BOTCENT
-128.00 124.00
-119.00 124.00
-128.00 124.00
-137.00 124.00
-*
-1 1
-3 $A$
-POLYGON
-132.00 120.00
-124.00 120.00
-124.00 116.00
-128.00 112.00
-132.00 116.00
-*
-3 21
-0
-VECTOR
-128.00 112.00
-128.00 96.00
-*
-6 0
-0
-VECTOR
-88.00 68.00
-76.00 68.00
-76.00 28.00
-88.00 28.00
-*
-6 0
-0
-VECTOR
-104.00 68.00
-116.00 68.00
-116.00 28.00
-104.00 28.00
-*
-6 0
-0
-BOTLEFT
-100.00 100.00
-100.00 100.00
-114.00 100.00
-128.00 100.00
-*
-1 1
-6 $cc Y$
-BOTLEFT
-132.00 100.00
-132.00 100.00
-145.00 100.00
-158.00 100.00
-*
-1 1
-6 $cc Z$
-BOTRIGHT
-92.00 72.00
-46.00 72.00
-69.00 72.00
-92.00 72.00
-*
-1 1
-10 $DP sub 1$
-CENTRIGHT
-52.00 112.00
-8.00 108.00
-30.00 108.00
-52.00 108.00
-*
-1 1
-10 $+ ^ vv O$
-POLYGON
-56.00 116.00
-56.00 108.00
-60.00 108.00
-64.00 112.00
-60.00 116.00
-*
-3 21
-0
-BOTCENT
-384.00 300.00
-362.00 300.00
-384.00 300.00
-406.00 300.00
-*
-1 1
-10 $+ ^ vv O$
-POLYGON
-388.00 288.00
-380.00 288.00
-380.00 292.00
-384.00 296.00
-388.00 292.00
-*
-3 21
-0
-VECTOR
-384.00 288.00
-384.00 268.00
-*
-6 0
-0
-ARC
-384.00 268.00
-384.00 267.00
-384.00 269.00
-384.00 267.00
-385.00 268.00
-383.00 268.00
-*
-3 0
-0
-TOPCENT
-384.00 180.00
-362.00 171.00
-384.00 171.00
-407.00 171.00
-*
-1 1
-10 $- ^ vv O$
-POLYGON
-388.00 192.00
-380.00 192.00
-380.00 188.00
-384.00 184.00
-388.00 188.00
-*
-3 21
-0
-VECTOR
-384.00 192.00
-384.00 212.00
-*
-6 0
-0
-ARC
-384.00 212.00
-384.00 213.00
-384.00 211.00
-384.00 213.00
-385.00 212.00
-383.00 212.00
-*
-3 0
-0
-TOPLEFT
-132.00 -4.00
-132.00 -13.00
-145.00 -13.00
-158.00 -13.00
-*
-1 1
-6 $cc Z$
-VECTOR
-64.00 -16.00
-96.00 -16.00
-96.00 0.00
-*
-6 0
-0
-VECTOR
-88.00 0.00
-104.00 0.00
-*
-3 0
-0
-VECTOR
-88.00 4.00
-104.00 4.00
-*
-6 0
-0
-VECTOR
-96.00 4.00
-96.00 20.00
-*
-6 0
-0
-ARC
-90.00 28.00
-88.00 28.00
-88.00 28.00
-92.00 28.00
-90.00 26.00
-90.00 30.00
-*
-3 0
-0
-VECTOR
-92.00 32.00
-96.00 20.00
-*
-3 0
-0
-ARC
-102.00 28.00
-100.00 28.00
-100.00 28.00
-104.00 28.00
-102.00 26.00
-102.00 30.00
-*
-3 0
-0
-VECTOR
-120.00 0.00
-136.00 0.00
-*
-3 0
-0
-VECTOR
-120.00 4.00
-136.00 4.00
-*
-6 0
-0
-TOPCENT
-128.00 -28.00
-120.00 -37.00
-128.00 -37.00
-136.00 -37.00
-*
-1 1
-3 $B$
-POLYGON
-132.00 -24.00
-124.00 -24.00
-124.00 -20.00
-128.00 -16.00
-132.00 -20.00
-*
-3 21
-0
-VECTOR
-128.00 -16.00
-128.00 0.00
-*
-6 0
-0
-TOPLEFT
-100.00 -4.00
-100.00 -13.00
-114.00 -13.00
-128.00 -13.00
-*
-1 1
-6 $cc Y$
-CENTRIGHT
-92.00 24.00
-46.00 20.00
-69.00 20.00
-92.00 20.00
-*
-1 1
-10 $DP sub 1$
-CENTRIGHT
-52.00 -16.00
-8.00 -20.00
-30.00 -20.00
-52.00 -20.00
-*
-1 1
-10 $+ ^ vv O$
-POLYGON
-56.00 -20.00
-56.00 -12.00
-60.00 -12.00
-64.00 -16.00
-60.00 -20.00
-*
-3 21
-0
-VECTOR
-116.00 48.00
-152.00 48.00
-*
-6 0
-0
-CENTLEFT
-164.00 48.00
-164.00 44.00
-184.00 44.00
-205.00 44.00
-*
-1 1
-8 $vv INC$
-POLYGON
-152.00 44.00
-152.00 52.00
-156.00 52.00
-160.00 48.00
-156.00 44.00
-*
-3 21
-0
-ARC
-116.00 48.00
-116.00 49.00
-116.00 47.00
-116.00 49.00
-117.00 48.00
-115.00 48.00
-*
-3 0
-0
-ARC
-128.00 48.00
-128.00 49.00
-128.00 47.00
-128.00 49.00
-129.00 48.00
-127.00 48.00
-*
-3 0
-0
-ARC
-76.00 48.00
-76.00 49.00
-76.00 47.00
-76.00 49.00
-77.00 48.00
-75.00 48.00
-*
-3 0
-0
-VECTOR
-56.00 48.00
-76.00 48.00
-*
-6 0
-0
-POLYGON
-48.00 52.00
-48.00 44.00
-52.00 44.00
-56.00 48.00
-52.00 52.00
-*
-3 21
-0
-CENTRIGHT
-48.00 48.00
-15.00 44.00
-31.00 44.00
-48.00 44.00
-*
-1 1
-7 $vv B1$
--1
diff --git a/contrib/groff/doc/grnexmpl.me b/contrib/groff/doc/grnexmpl.me
deleted file mode 100644
index 54dbb188a083..000000000000
--- a/contrib/groff/doc/grnexmpl.me
+++ /dev/null
@@ -1,84 +0,0 @@
-.nr pp 12
-.nr tp 12
-.nr sp 12
-.nr fi 0
-.ls 1
-.po 1i
-.pl 11i
-.EQ
-gsize 12
-delim $$
-define // 'over down 10'
-define sw 'phi sub'
-define aa 'A sub'
-define vv 'V sub'
-define mm 'M sub'
-define nn 'N sub'
-define cc 'C sub'
-define ll 'L sub'
-define rr 'R sub'
-define ss 'S sub'
-define gg 'g sub'
-define ff 'F sub'
-define qq 'Q sub'
-define qqq '{C prime} sub'
-define pp 'P sub'
-define tt 'T sub'
-define zz 'Z sub'
-define kk 'K sub'
-define ii 'I sub'
-define iis 'IC sub'
-define e2 '2 sup'
-define sunc '{ sin x } / x'
-define vddm1V 'vv DD - 1 ^ roman V'
-define vssp1V 'vv SS + 1 ^ roman V'
-.EN
-.pp
-The following slide shows the complete schematics of the
-fully-differential RIC. The operation includes a
-correlated-double-sampling phase that occurs once every 256
-clock periods, also called the
-.i "spreading ratio" .
-This reset phase is controlled by clocks $ DP sub 1 $ and $ DP
-sub 2 $ in which the integrator is initialized by totally
-removing the charge from $ cc F $ and storing the low-frequency
-noise of the op amp in $ cc C $. At the same time the comparison
-thresholds are set.
-.fl
-.po -0.2i
-.sp 2
-.lp
-.(b
-.EQ
-gsize -4
-.EN
-.GS
-roman 1
-italics 2
-bold 3
-special 4
-narrow 1
-medium 3
-thick 5
-width 5.5
-l mg
-file grnexmpl.g
-.GE
-.EQ
-gsize +4
-.EN
-.)b
-.fl
-.po +0.2i
-.pp
-The faster clocks are $ PN $, $ ITS $ and $ SP $. The sampling
-capacitor $ cc S $ performs the delayed subtraction of a sample
-of the input signal $ +- ^ vv SIG $ and a choice of $ - ^ vv REF
-$, $ AGND $ or $ + ^ vv REF $ according to the operations
-performed by the logic partially depicted operating on past
-results of the comparisons. The synchronous comparators are
-reset at this fast rates, thus performing one comparison for
-every fast clock cycle. The dynamic common-mode feedback
-arrangement operates synchronously with the reset time slot and
-its configuration is equivalent to that in the differential
-feedback path.
diff --git a/contrib/groff/doc/groff b/contrib/groff/doc/groff
deleted file mode 100644
index a84b02ab1a5f..000000000000
--- a/contrib/groff/doc/groff
+++ /dev/null
@@ -1,301 +0,0 @@
-This is groff, produced by makeinfo version 4.8 from ./groff.texinfo.
-
- This manual documents GNU `troff' version 1.19.2.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
-Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-Indirect:
-groff-1: 1019
-groff-2: 295973
-groff-3: 504320
-
-Tag Table:
-(Indirect)
-Node: Top1019
-Node: Introduction2325
-Node: What Is groff?2800
-Node: What Is groff?-Footnotes4312
-Ref: What Is groff?-Footnote-14381
-Node: History4418
-Node: groff Capabilities9373
-Node: Macro Package Intro10564
-Node: Preprocessor Intro11192
-Node: Output device intro12694
-Node: Credits13164
-Node: Invoking groff13673
-Node: Groff Options14966
-Node: Environment25163
-Node: Macro Directories26995
-Node: Font Directories28326
-Node: Paper Size29972
-Node: Invocation Examples31322
-Node: Invocation Examples-Footnotes32519
-Ref: Invocation Examples-Footnote-132598
-Node: grog32831
-Node: Tutorial for Macro Users34109
-Node: Basics34530
-Node: Basics-Footnotes39350
-Ref: Basics-Footnote-139403
-Ref: Basics-Footnote-239497
-Node: Common Features39611
-Node: Paragraphs40401
-Node: Sections and Chapters41908
-Node: Headers and Footers42409
-Node: Page Layout Adjustment43291
-Node: Displays43567
-Node: Footnotes and Annotations44834
-Node: Table of Contents45502
-Node: Indices46026
-Node: Paper Formats46437
-Node: Multiple Columns46819
-Node: Font and Size Changes47078
-Node: Predefined Strings47391
-Node: Preprocessor Support47738
-Node: Configuration and Customization48303
-Node: Macro Packages48681
-Node: man49238
-Node: Man options49675
-Node: Man options-Footnotes52369
-Ref: Man options-Footnote-152432
-Node: Man usage53158
-Node: Man font macros59203
-Node: Miscellaneous man macros61035
-Node: Predefined man strings62766
-Node: Preprocessors in man pages63333
-Node: Optional man extensions63956
-Node: mdoc67956
-Node: ms68130
-Node: ms Intro68634
-Node: General ms Structure69312
-Node: General ms Structure-Footnotes71762
-Ref: General ms Structure-Footnote-171843
-Node: ms Document Control Registers71889
-Node: ms Cover Page Macros78370
-Node: ms Body Text81390
-Node: Paragraphs in ms81879
-Node: Headings in ms83593
-Node: Highlighting in ms85686
-Node: Lists in ms88277
-Node: Indentation values in ms91700
-Node: Tabstops in ms92329
-Node: ms Displays and Keeps92751
-Node: ms Insertions96705
-Node: Example multi-page table98277
-Node: ms Footnotes98733
-Node: ms Page Layout99998
-Node: ms Headers and Footers100524
-Node: ms Margins101575
-Node: ms Multiple Columns101829
-Node: ms TOC102646
-Node: ms Strings and Special Characters105378
-Node: ms Strings and Special Characters-Footnotes108185
-Ref: ms Strings and Special Characters-Footnote-1108292
-Node: Differences from AT&T ms108379
-Node: Missing ms Macros110611
-Node: Additional ms Macros111381
-Node: Naming Conventions112649
-Node: me113680
-Node: mm113843
-Node: gtroff Reference113995
-Node: Text114914
-Node: Filling and Adjusting115478
-Node: Hyphenation116200
-Node: Sentences116992
-Node: Tab Stops118142
-Node: Implicit Line Breaks119045
-Node: Input Conventions120067
-Node: Input Encodings120868
-Node: Measurements122838
-Node: Measurements-Footnotes125037
-Ref: Measurements-Footnote-1125102
-Node: Default Units125174
-Node: Expressions126229
-Node: Identifiers128959
-Node: Embedded Commands132821
-Node: Requests133573
-Node: Request and Macro Arguments135159
-Node: Request and Macro Arguments-Footnotes137649
-Ref: Request and Macro Arguments-Footnote-1137744
-Ref: Request and Macro Arguments-Footnote-2137872
-Node: Macros138226
-Node: Escapes138612
-Node: Comments141491
-Node: Comments-Footnotes144067
-Ref: Comments-Footnote-1144124
-Node: Registers144223
-Node: Setting Registers144731
-Node: Interpolating Registers147031
-Node: Auto-increment147848
-Node: Assigning Formats149398
-Node: Built-in Registers152319
-Node: Manipulating Filling and Adjusting155845
-Node: Manipulating Hyphenation164378
-Node: Manipulating Hyphenation-Footnotes175860
-Ref: Manipulating Hyphenation-Footnote-1175949
-Node: Manipulating Spacing176024
-Node: Tabs and Fields180017
-Node: Tabs and Fields-Footnotes186016
-Ref: Tabs and Fields-Footnote-1186087
-Node: Leaders186165
-Node: Leaders-Footnotes187769
-Ref: Leaders-Footnote-1187824
-Node: Fields187905
-Node: Character Translations189333
-Node: Troff and Nroff Mode198558
-Node: Line Layout200553
-Node: Line Control206489
-Node: Page Layout209161
-Node: Page Control212829
-Node: Fonts and Symbols216572
-Node: Changing Fonts217152
-Node: Font Families219286
-Node: Font Positions223857
-Node: Using Symbols227002
-Node: Using Symbols-Footnotes241711
-Ref: Using Symbols-Footnote-1241778
-Ref: Using Symbols-Footnote-2242231
-Ref: Using Symbols-Footnote-3242302
-Ref: Using Symbols-Footnote-4242541
-Node: Special Fonts242604
-Node: Artificial Fonts243789
-Node: Ligatures and Kerning249299
-Node: Sizes255325
-Node: Sizes-Footnotes256161
-Ref: Sizes-Footnote-1256212
-Node: Changing Type Sizes256624
-Node: Fractional Type Sizes262096
-Node: Strings265127
-Node: Conditionals and Loops273132
-Node: Operators in Conditionals273359
-Node: Operators in Conditionals-Footnotes276430
-Ref: Operators in Conditionals-Footnote-1276521
-Ref: Operators in Conditionals-Footnote-2276600
-Node: if-else276699
-Node: while278272
-Node: Writing Macros280659
-Node: Copy-in Mode285498
-Node: Parameters286392
-Node: Page Motions288653
-Node: Drawing Requests295973
-Node: Traps305698
-Node: Page Location Traps306310
-Node: Diversion Traps312136
-Node: Input Line Traps312751
-Node: Blank Line Traps313780
-Node: End-of-input Traps314067
-Node: Diversions314740
-Node: Environments321718
-Node: Suppressing output325588
-Node: Colors327413
-Node: I/O330986
-Node: Postprocessor Access339093
-Node: Miscellaneous340659
-Node: Miscellaneous-Footnotes346141
-Ref: Miscellaneous-Footnote-1346208
-Node: Gtroff Internals346278
-Node: Gtroff Internals-Footnotes350590
-Ref: Gtroff Internals-Footnote-1350663
-Node: Debugging350797
-Node: Warnings356625
-Node: Warnings-Footnotes359562
-Ref: Warnings-Footnote-1359619
-Node: Implementation Differences359740
-Node: Implementation Differences-Footnotes364371
-Ref: Implementation Differences-Footnote-1364464
-Node: Preprocessors364599
-Node: geqn364901
-Node: Invoking geqn365035
-Node: gtbl365141
-Node: Invoking gtbl365266
-Node: gpic365372
-Node: Invoking gpic365497
-Node: ggrn365603
-Node: Invoking ggrn365728
-Node: grap365834
-Node: grefer366110
-Node: Invoking grefer366246
-Node: gsoelim366362
-Node: Invoking gsoelim366488
-Node: Output Devices366609
-Node: Special Characters366848
-Node: grotty367017
-Node: Invoking grotty367166
-Node: grops367282
-Node: Invoking grops367441
-Node: Embedding PostScript367581
-Node: grodvi367715
-Node: Invoking grodvi367852
-Node: grolj4367968
-Node: Invoking grolj4368106
-Node: grolbp368222
-Node: Invoking grolbp368361
-Node: grohtml368477
-Node: Invoking grohtml368665
-Node: grohtml specific registers and strings368833
-Node: gxditview369710
-Node: Invoking gxditview369846
-Node: File formats369977
-Node: gtroff Output370248
-Node: gtroff Output-Footnotes372088
-Ref: gtroff Output-Footnote-1372155
-Node: Language Concepts372290
-Node: Separation373036
-Node: Argument Units375287
-Node: Document Parts376440
-Node: Command Reference377842
-Node: Comment Command378253
-Node: Simple Commands378746
-Node: Simple Commands-Footnotes384666
-Ref: Simple Commands-Footnote-1384737
-Node: Graphics Commands384798
-Node: Device Control Commands392117
-Node: Obsolete Command396165
-Node: Intermediate Output Examples397446
-Node: Output Language Compatibility400238
-Node: Font Files402294
-Node: Font Files-Footnotes402908
-Ref: Font Files-Footnote-1402969
-Node: DESC File Format403030
-Node: Font File Format407429
-Node: Font File Format-Footnotes413661
-Ref: Font File Format-Footnote-1413734
-Ref: Font File Format-Footnote-2413825
-Node: Installation414044
-Node: Copying This Manual414170
-Node: GNU Free Documentation License414408
-Node: Request Index436816
-Node: Escape Index452702
-Node: Operator Index459046
-Node: Register Index460527
-Node: Macro Index474109
-Node: String Index486712
-Node: Glyph Name Index495323
-Node: Font File Keyword Index495628
-Node: Program and File Index498671
-Node: Concept Index504320
-
-End Tag Table
-
-
-Local Variables:
-coding: iso-8859-1
-End:
diff --git a/contrib/groff/doc/groff-1 b/contrib/groff/doc/groff-1
deleted file mode 100644
index 04207e40395d..000000000000
--- a/contrib/groff/doc/groff-1
+++ /dev/null
@@ -1,8695 +0,0 @@
-This is groff, produced by makeinfo version 4.8 from ./groff.texinfo.
-
- This manual documents GNU `troff' version 1.19.2.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
-Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
-
-GNU troff
-*********
-
-This manual documents GNU `troff' version 1.19.2.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
-Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-* Menu:
-
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-
-
-File: groff, Node: Introduction, Next: Invoking groff, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-GNU `troff' (or `groff') is a system for typesetting documents.
-`troff' is very flexible and has been in existence (and use) for about
-3 decades. It is quite widespread and firmly entrenched in the UNIX
-community.
-
-* Menu:
-
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-
-
-File: groff, Node: What Is groff?, Next: History, Prev: Introduction, Up: Introduction
-
-1.1 What Is `groff'?
-====================
-
-`groff' belongs to an older generation of document preparation systems,
-which operate more like compilers than the more recent interactive
-WYSIWYG(1) (*note What Is groff?-Footnote-1::) systems. `groff' and
-its contemporary counterpart, TeX, both work using a "batch" paradigm:
-The input (or "source") files are normal text files with embedded
-formatting commands. These files can then be processed by `groff' to
-produce a typeset document on a variety of devices.
-
- Likewise, `groff' should not be confused with a "word processor",
-since that term connotes an integrated system that includes an editor
-and a text formatter. Also, many word processors follow the WYSIWYG
-paradigm discussed earlier.
-
- Although WYSIWYG systems may be easier to use, they have a number of
-disadvantages compared to `troff':
-
- * They must be used on a graphics display to work on a document.
-
- * Most of the WYSIWYG systems are either non-free or are not very
- portable.
-
- * `troff' is firmly entrenched in all UNIX systems.
-
- * It is difficult to have a wide range of capabilities available
- within the confines of a GUI/window system.
-
- * It is more difficult to make global changes to a document.
-
- "GUIs normally make it simple to accomplish simple actions and
- impossible to accomplish complex actions." -Doug Gwyn (22/Jun/91
- in `comp.unix.wizards')
-
-
-File: groff, Node: What Is groff?-Footnotes, Up: What Is groff?
-
- (1) What You See Is What You Get
-
-
-File: groff, Node: History, Next: groff Capabilities, Prev: What Is groff?, Up: Introduction
-
-1.2 History
-===========
-
-`troff' can trace its origins back to a formatting program called
-`runoff', written by J. E. Saltzer, which ran on MIT's CTSS operating
-system in the mid-sixties. This name came from the common phrase of
-the time "I'll run off a document." Bob Morris ported it to the 635
-architecture and called the program `roff' (an abbreviation of
-`runoff'). It was rewritten as `rf' for the PDP-7 (before having
-UNIX), and at the same time (1969), Doug McIllroy rewrote an extended
-and simplified version of `roff' in the BCPL programming language.
-
- The first version of UNIX was developed on a PDP-7 which was sitting
-around Bell Labs. In 1971 the developers wanted to get a PDP-11 for
-further work on the operating system. In order to justify the cost for
-this system, they proposed that they would implement a document
-formatting system for the AT&T patents division. This first formatting
-program was a reimplementation of McIllroy's `roff', written by
-J. F. Ossanna.
-
- When they needed a more flexible language, a new version of `roff'
-called `nroff' ("Newer `roff'") was written. It had a much more
-complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of `nroff' that would drive it. It was dubbed `troff', for
-"typesetter `roff'", although many people have speculated that it
-actually means "Times `roff'" because of the use of the Times font
-family in `troff' by default. As such, the name `troff' is pronounced
-`t-roff' rather than `trough'.
-
- With `troff' came `nroff' (they were actually the same program
-except for some `#ifdef's), which was for producing output for line
-printers and character terminals. It understood everything `troff'
-did, and ignored the commands which were not applicable (e.g. font
-changes).
-
- Since there are several things which cannot be done easily in
-`troff', work on several preprocessors began. These programs would
-transform certain parts of a document into `troff', which made a very
-natural use of pipes in UNIX.
-
- The `eqn' preprocessor allowed mathematical formulæ to be specified
-in a much simpler and more intuitive manner. `tbl' is a preprocessor
-for formatting tables. The `refer' preprocessor (and the similar
-program, `bib') processes citations in a document according to a
-bibliographic database.
-
- Unfortunately, Ossanna's `troff' was written in PDP-11 assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000 lines of uncommented code
-and still dependent on the CAT. As the CAT became less common, and was
-no longer supported by the manufacturer, the need to make it support
-other devices became a priority. However, before this could be done,
-Ossanna was killed in a car accident.
-
- So, Brian Kernighan took on the task of rewriting `troff'. The
-newly rewritten version produced device independent code which was very
-easy for postprocessors to read and translate to the appropriate
-printer codes. Also, this new version of `troff' (called `ditroff' for
-"device independent `troff'") had several extensions, which included
-drawing functions.
-
- Due to the additional abilities of the new version of `troff',
-several new preprocessors appeared. The `pic' preprocessor provides a
-wide range of drawing functions. Likewise the `ideal' preprocessor did
-the same, although via a much different paradigm. The `grap'
-preprocessor took specifications for graphs, but, unlike other
-preprocessors, produced `pic' code.
-
- James Clark began work on a GNU implementation of `ditroff' in
-early 1989. The first version, `groff' 0.3.1, was released June 1990.
-`groff' included:
-
- * A replacement for `ditroff' with many extensions.
-
- * The `soelim', `pic', `tbl', and `eqn' preprocessors.
-
- * Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
- X Windows. GNU `troff' also eliminated the need for a separate
- `nroff' program with a postprocessor which would produce ASCII
- output.
-
- * A version of the `me' macros and an implementation of the `man'
- macros.
-
- Also, a front-end was included which could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
- Development of GNU `troff' progressed rapidly, and saw the additions
-of a replacement for `refer', an implementation of the `ms' and `mm'
-macros, and a program to deduce how to format a document (`grog').
-
- It was declared a stable (i.e. non-beta) package with the release of
-version 1.04 around November 1991.
-
- Beginning in 1999, `groff' has new maintainers (the package was an
-orphan for a few years). As a result, new features and programs like
-`grn', a preprocessor for gremlin images, and an output device to
-produce HTML output have been added.
-
-
-File: groff, Node: groff Capabilities, Next: Macro Package Intro, Prev: History, Up: Introduction
-
-1.3 `groff' Capabilities
-========================
-
-So what exactly is `groff' capable of doing? `groff' provides a wide
-range of low-level text formatting operations. Using these, it is
-possible to perform a wide range of formatting tasks, such as
-footnotes, table of contents, multiple columns, etc. Here's a list of
-the most important operations supported by `groff':
-
- * text filling, adjusting, and centering
-
- * hyphenation
-
- * page control
-
- * font and glyph size control
-
- * vertical spacing (e.g. double-spacing)
-
- * line length and indenting
-
- * macros, strings, diversions, and traps
-
- * number registers
-
- * tabs, leaders, and fields
-
- * input and output conventions and character translation
-
- * overstrike, bracket, line drawing, and zero-width functions
-
- * local horizontal and vertical motions and the width function
-
- * three-part titles
-
- * output line numbering
-
- * conditional acceptance of input
-
- * environment switching
-
- * insertions from the standard input
-
- * input/output file switching
-
- * output and error messages
-
-
-File: groff, Node: Macro Package Intro, Next: Preprocessor Intro, Prev: groff Capabilities, Up: Introduction
-
-1.4 Macro Packages
-==================
-
-Since `groff' provides such low-level facilities, it can be quite
-difficult to use by itself. However, `groff' provides a "macro"
-facility to specify how certain routine operations (e.g. starting
-paragraphs, printing headers and footers, etc.) should be done. These
-macros can be collected together into a "macro package". There are a
-number of macro packages available; the most common (and the ones
-described in this manual) are `man', `mdoc', `me', `ms', and `mm'.
-
-
-File: groff, Node: Preprocessor Intro, Next: Output device intro, Prev: Macro Package Intro, Up: Introduction
-
-1.5 Preprocessors
-=================
-
-Although `groff' provides most functions needed to format a document,
-some operations would be unwieldy (e.g. to draw pictures). Therefore,
-programs called "preprocessors" were written which understand their own
-language and produce the necessary `groff' operations. These
-preprocessors are able to differentiate their own input from the rest
-of the document via markers.
-
- To use a preprocessor, UNIX pipes are used to feed the output from
-the preprocessor into `groff'. Any number of preprocessors may be used
-on a given document; in this case, the preprocessors are linked
-together into one pipeline. However, with `groff', the user does not
-need to construct the pipe, but only tell `groff' what preprocessors to
-use.
-
- `groff' currently has preprocessors for producing tables (`tbl'),
-typesetting equations (`eqn'), drawing pictures (`pic' and `grn'), and
-for processing bibliographies (`refer'). An associated program which
-is useful when dealing with preprocessors is `soelim'.
-
- A free implementation of `grap', a preprocessor for drawing graphs,
-can be obtained as an extra package; `groff' can use `grap' also.
-
- There are other preprocessors in existence, but, unfortunately, no
-free implementations are available. Among them are preprocessors for
-drawing mathematical pictures (`ideal') and chemical structures
-(`chem').
-
-
-File: groff, Node: Output device intro, Next: Credits, Prev: Preprocessor Intro, Up: Introduction
-
-1.6 Output Devices
-==================
-
-`groff' actually produces device independent code which may be fed into
-a postprocessor to produce output for a particular device. Currently,
-`groff' has postprocessors for POSTSCRIPT devices, character terminals,
-X Windows (for previewing), TeX DVI format, HP LaserJet 4 and Canon LBP
-printers (which use CAPSL), and HTML.
-
-
-File: groff, Node: Credits, Prev: Output device intro, Up: Introduction
-
-1.7 Credits
-===========
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the `groff' package by James Clark, and
-Eric Allman's papers on the `me' macro package.
-
- The section on the `man' macro package is partly based on Susan G.
-Kleinmann's `groff_man' manual page written for the Debian GNU/Linux
-system.
-
- Larry Kollar contributed the section in the `ms' macro package.
-
-
-File: groff, Node: Invoking groff, Next: Tutorial for Macro Users, Prev: Introduction, Up: Top
-
-2 Invoking `groff'
-******************
-
-This section focuses on how to invoke the `groff' front end. This
-front end takes care of the details of constructing the pipeline among
-the preprocessors, `gtroff' and the postprocessor.
-
- It has become a tradition that GNU programs get the prefix `g' to
-distinguish it from its original counterparts provided by the host (see
-*Note Environment::, for more details). Thus, for example, `geqn' is
-GNU `eqn'. On operating systems like GNU/Linux or the Hurd, which
-don't contain proprietary versions of `troff', and on
-MS-DOS/MS-Windows, where `troff' and associated programs are not
-available at all, this prefix is omitted since GNU `troff' is the only
-used incarnation of `troff'. Exception: `groff' is never replaced by
-`roff'.
-
- In this document, we consequently say `gtroff' when talking about
-the GNU `troff' program. All other implementations of `troff' are
-called AT&T `troff' which is the common origin of all `troff' derivates
-(with more or less compatible changes). Similarly, we say `gpic',
-`geqn', etc.
-
-* Menu:
-
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-
-
-File: groff, Node: Groff Options, Next: Environment, Prev: Invoking groff, Up: Invoking groff
-
-2.1 Options
-===========
-
-`groff' normally runs the `gtroff' program and a postprocessor
-appropriate for the selected device. The default device is `ps' (but
-it can be changed when `groff' is configured and built). It can
-optionally preprocess with any of `gpic', `geqn', `gtbl', `ggrn',
-`grap', `grefer', or `gsoelim'.
-
- This section only documents options to the `groff' front end. Many
-of the arguments to `groff' are passed on to `gtroff', therefore those
-are also included. Arguments to pre- or postprocessors can be found in
-*Note Invoking gpic::, *Note Invoking geqn::, *Note Invoking gtbl::,
-*Note Invoking ggrn::, *Note Invoking grefer::, *Note Invoking
-gsoelim::, *Note Invoking grotty::, *Note Invoking grops::, *Note
-Invoking grohtml::, *Note Invoking grodvi::, *Note Invoking grolj4::,
-*Note Invoking grolbp::, and *Note Invoking gxditview::.
-
- The command line format for `groff' is:
-
-
- groff [ -abceghilpstvzCEGNRSUVXZ ] [ -FDIR ] [ -mNAME ]
- [ -TDEF ] [ -fFAM ] [ -wNAME ] [ -WNAME ]
- [ -MDIR ] [ -dCS ] [ -rCN ] [ -nNUM ]
- [ -oLIST ] [ -PARG ] [ -LARG ] [ -IDIR ]
- [ FILES... ]
-
- The command line format for `gtroff' is as follows.
-
-
- gtroff [ -abcivzCERU ] [ -wNAME ] [ -WNAME ] [ -dCS ]
- [ -fFAM ] [ -mNAME ] [ -nNUM ]
- [ -oLIST ] [ -rCN ] [ -TNAME ]
- [ -FDIR ] [ -MDIR ] [ FILES... ]
-
-Obviously, many of the options to `groff' are actually passed on to
-`gtroff'.
-
- Options without an argument can be grouped behind a single `-'. A
-filename of `-' denotes the standard input. It is possible to have
-whitespace between an option and its parameter.
-
- The `grog' command can be used to guess the correct `groff' command
-to format a file.
-
- Here's the description of the command-line options:
-
-`-h'
- Print a help message.
-
-`-e'
- Preprocess with `geqn'.
-
-`-t'
- Preprocess with `gtbl'.
-
-`-g'
- Preprocess with `ggrn'.
-
-`-G'
- Preprocess with `grap'.
-
-`-p'
- Preprocess with `gpic'.
-
-`-s'
- Preprocess with `gsoelim'.
-
-`-c'
- Suppress color output.
-
-`-R'
- Preprocess with `grefer'. No mechanism is provided for passing
- arguments to `grefer' because most `grefer' options have
- equivalent commands which can be included in the file. *Note
- grefer::, for more details.
-
- Note that `gtroff' also accepts a `-R' option, which is not
- accessible via `groff'. This option prevents the loading of the
- `troffrc' and `troffrc-end' files.
-
-`-v'
- Make programs run by `groff' print out their version number.
-
-`-V'
- Print the pipeline on `stdout' instead of executing it. If
- specified more than once, print the pipeline on `stderr' and
- execute it.
-
-`-z'
- Suppress output from `gtroff'. Only error messages are printed.
-
-`-Z'
- Do not postprocess the output of `gtroff'. Normally `groff'
- automatically runs the appropriate postprocessor.
-
-`-PARG'
- Pass ARG to the postprocessor. Each argument should be passed
- with a separate `-P' option. Note that `groff' does not prepend
- `-' to ARG before passing it to the postprocessor.
-
-`-l'
- Send the output to a spooler for printing. The command used for
- this is specified by the `print' command in the device description
- file (see *Note Font Files::, for more info). If not present,
- `-l' is ignored.
-
-`-LARG'
- Pass ARG to the spooler. Each argument should be passed with a
- separate `-L' option. Note that `groff' does not prepend a `-' to
- ARG before passing it to the postprocessor. If the `print'
- keyword in the device description file is missing, `-L' is ignored.
-
-`-TDEV'
- Prepare output for device DEV. The default device is `ps', unless
- changed when `groff' was configured and built. The following are
- the output devices currently available:
-
- `ps'
- For POSTSCRIPT printers and previewers.
-
- `dvi'
- For TeX DVI format.
-
- `X75'
- For a 75dpi X11 previewer.
-
- `X75-12'
- For a 75dpi X11 previewer with a 12pt base font in the
- document.
-
- `X100'
- For a 100dpi X11 previewer.
-
- `X100-12'
- For a 100dpi X11 previewer with a 12pt base font in the
- document.
-
- `ascii'
- For typewriter-like devices using the (7-bit) ASCII character
- set.
-
- `latin1'
- For typewriter-like devices that support the Latin-1
- (ISO 8859-1) character set.
-
- `utf8'
- For typewriter-like devices which use the Unicode (ISO 10646)
- character set with UTF-8 encoding.
-
- `cp1047'
- For typewriter-like devices which use the EBCDIC encoding IBM
- cp1047.
-
- `lj4'
- For HP LaserJet4-compatible (or other PCL5-compatible)
- printers.
-
- `lbp'
- For Canon CAPSL printers (LBP-4 and LBP-8 series laser
- printers).
-
- `html'
- To produce HTML output. Note that the HTML driver consists
- of two parts, a preprocessor (`pre-grohtml') and a
- postprocessor (`post-grohtml').
-
- The predefined `gtroff' string register `.T' contains the current
- output device; the read-only number register `.T' is set to 1 if
- this option is used (which is always true if `groff' is used to
- call `gtroff'). *Note Built-in Registers::.
-
- The postprocessor to be used for a device is specified by the
- `postpro' command in the device description file. (*Note Font
- Files::, for more info.) This can be overridden with the `-X'
- option.
-
-`-X'
- Preview with `gxditview' instead of using the usual postprocessor.
- This is unlikely to produce good results except with `-Tps'.
-
- Note that this is not the same as using `-TX75' or `-TX100' to
- view a document with `gxditview': The former uses the metrics of
- the specified device, whereas the latter uses X-specific fonts and
- metrics.
-
-`-N'
- Don't allow newlines with `eqn' delimiters. This is the same as
- the `-N' option in `geqn'.
-
-`-S'
- Safer mode. Pass the `-S' option to `gpic' and disable the
- `open', `opena', `pso', `sy', and `pi' requests. For security
- reasons, this is enabled by default.
-
-`-U'
- Unsafe mode. This enables the `open', `opena', `pso', `sy', and
- `pi' requests.
-
-`-a'
- Generate an ASCII approximation of the typeset output. The
- read-only register `.A' is then set to 1. *Note Built-in
- Registers::. A typical example is
-
-
- groff -a -man -Tdvi troff.man | less
-
- which shows how lines are broken for the DVI device. Note that
- this option is rather useless today since graphic output devices
- are available virtually everywhere.
-
-`-b'
- Print a backtrace with each warning or error message. This
- backtrace should help track down the cause of the error. The line
- numbers given in the backtrace may not always be correct: `gtroff'
- can get confused by `as' or `am' requests while counting line
- numbers.
-
-`-i'
- Read the standard input after all the named input files have been
- processed.
-
-`-wNAME'
- Enable warning NAME. Available warnings are described in *Note
- Debugging::. Multiple `-w' options are allowed.
-
-`-WNAME'
- Inhibit warning NAME. Multiple `-W' options are allowed.
-
-`-E'
- Inhibit all error messages.
-
-`-C'
- Enable compatibility mode. *Note Implementation Differences::,
- for the list of incompatibilities between `groff' and AT&T `troff'.
-
-`-dCS'
-`-dNAME=S'
- Define C or NAME to be a string S. C must be a one-letter name;
- NAME can be of arbitrary length. All string assignments happen
- before loading any macro file (including the start-up file).
-
-`-fFAM'
- Use FAM as the default font family. *Note Font Families::.
-
-`-mNAME'
- Read in the file `NAME.tmac'. Normally `groff' searches for this
- in its macro directories. If it isn't found, it tries `tmac.NAME'
- (searching in the same directories).
-
-`-nNUM'
- Number the first page NUM.
-
-`-oLIST'
- Output only pages in LIST, which is a comma-separated list of page
- ranges; `N' means print page N, `M-N' means print every page
- between M and N, `-N' means print every page up to N, `N-' means
- print every page beginning with N. `gtroff' exits after printing
- the last page in the list. All the ranges are inclusive on both
- ends.
-
- Within `gtroff', this information can be extracted with the `.P'
- register. *Note Built-in Registers::.
-
- If your document restarts page numbering at the beginning of each
- chapter, then `gtroff' prints the specified page range for each
- chapter.
-
-`-rCN'
-`-rNAME=N'
- Set number register C or NAME to the value N. C must be a
- one-letter name; NAME can be of arbitrary length. N can be any
- `gtroff' numeric expression. All register assignments happen
- before loading any macro file (including the start-up file).
-
-`-FDIR'
- Search `DIR' for subdirectories `devNAME' (NAME is the name of the
- device), for the `DESC' file, and for font files before looking in
- the standard directories (*note Font Directories::). This option
- is passed to all pre- and postprocessors using the
- `GROFF_FONT_PATH' environment variable.
-
-`-MDIR'
- Search directory `DIR' for macro files before the standard
- directories (*note Macro Directories::).
-
-`-IDIR'
- This option may be used to specify a directory to search for files.
- It is passed to the following programs:
-
- * `gsoelim' (see *Note gsoelim:: for more details); it also
- implies `groff''s `-s' option.
-
- * `gtroff'; it is used to search files named in the `psbb' and
- `so' requests.
-
- * `grops'; it is used to search files named in the
- `\X'ps: import' and `\X'ps: file' escapes.
-
- The current directory is always searched first. This option may be
- specified more than once; the directories will be searched in the
- order specified. No directory search is performed for files
- specified using an absolute path.
-
-
-File: groff, Node: Environment, Next: Macro Directories, Prev: Groff Options, Up: Invoking groff
-
-2.2 Environment
-===============
-
-There are also several environment variables (of the operating system,
-not within `gtroff') which can modify the behavior of `groff'.
-
-`GROFF_COMMAND_PREFIX'
- If this is set to X, then `groff' runs `Xtroff' instead of
- `gtroff'. This also applies to `tbl', `pic', `eqn', `grn',
- `refer', and `soelim'. It does not apply to `grops', `grodvi',
- `grotty', `pre-grohtml', `post-grohtml', `grolj4', and `gxditview'.
-
- The default command prefix is determined during the installation
- process. If a non-GNU troff system is found, prefix `g' is used,
- none otherwise.
-
-`GROFF_TMAC_PATH'
- A colon-separated list of directories in which to search for macro
- files (before the default directories are tried). *Note Macro
- Directories::.
-
-`GROFF_TYPESETTER'
- The default output device.
-
-`GROFF_FONT_PATH'
- A colon-separated list of directories in which to search for the
- `dev'NAME directory (before the default directories are tried).
- *Note Font Directories::.
-
-`GROFF_BIN_PATH'
- This search path, followed by `PATH', is used for commands executed
- by `groff'.
-
-`GROFF_TMPDIR'
- The directory in which `groff' creates temporary files. If this is
- not set and `TMPDIR' is set, temporary files are created in that
- directory. Otherwise temporary files are created in a
- system-dependent default directory (on Unix and GNU/Linux systems,
- this is usually `/tmp'). `grops', `grefer', `pre-grohtml', and
- `post-grohtml' can create temporary files in this directory.
-
- Note that MS-DOS and MS-Windows ports of `groff' use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-
-File: groff, Node: Macro Directories, Next: Font Directories, Prev: Environment, Up: Invoking groff
-
-2.3 Macro Directories
-=====================
-
-All macro file names must be named `NAME.tmac' or `tmac.NAME' to make
-the `-mNAME' command line option work. The `mso' request doesn't have
-this restriction; any file name can be used, and `gtroff' won't try to
-append or prepend the `tmac' string.
-
- Macro files are kept in the "tmac directories", all of which
-constitute the "tmac path". The elements of the search path for macro
-files are (in that order):
-
- * The directories specified with `gtroff''s or `groff''s `-M'
- command line option.
-
- * The directories given in the `GROFF_TMAC_PATH' environment
- variable.
-
- * The current directory (only if in unsafe mode using the `-U'
- command line switch).
-
- * The home directory.
-
- * A platform-dependent directory, a site-specific
- (platform-independent) directory, and the main tmac directory; the
- default locations are
-
-
- /usr/local/lib/groff/site-tmac
- /usr/local/share/groff/site-tmac
- /usr/local/share/groff/1.18.2/tmac
-
- assuming that the version of `groff' is 1.18.2, and the
- installation prefix was `/usr/local'. It is possible to fine-tune
- those directories during the installation process.
-
-
-File: groff, Node: Font Directories, Next: Paper Size, Prev: Macro Directories, Up: Invoking groff
-
-2.4 Font Directories
-====================
-
-Basically, there is no restriction how font files for `groff' are named
-and how long font names are; however, to make the font family mechanism
-work (*note Font Families::), fonts within a family should start with
-the family name, followed by the shape. For example, the Times family
-uses `T' for the family name and `R', `B', `I', and `BI' to indicate
-the shapes `roman', `bold', `italic', and `bold italic', respectively.
-Thus the final font names are `TR', `TB', `TI', and `TBI'.
-
- All font files are kept in the "font directories" which constitute
-the "font path". The file search functions will always append the
-directory `dev'NAME, where NAME is the name of the output device.
-Assuming, say, DVI output, and `/foo/bar' as a font directory, the font
-files for `grodvi' must be in `/foo/bar/devdvi'.
-
- The elements of the search path for font files are (in that order):
-
- * The directories specified with `gtroff''s or `groff''s `-F'
- command line option. All device drivers and some preprocessors
- also have this option.
-
- * The directories given in the `GROFF_FONT_PATH' environment
- variable.
-
- * A site-specific directory and the main font directory; the default
- locations are
-
-
- /usr/local/share/groff/site-font
- /usr/local/share/groff/1.18.2/font
-
- assuming that the version of `groff' is 1.18.2, and the
- installation prefix was `/usr/local'. It is possible to fine-tune
- those directories during the installation process.
-
-
-File: groff, Node: Paper Size, Next: Invocation Examples, Prev: Font Directories, Up: Invoking groff
-
-2.5 Paper Size
-==============
-
-In groff, the page size for `gtroff' and for output devices are handled
-separately. *Note Page Layout::, for vertical manipulation of the page
-size. *Note Line Layout::, for horizontal changes.
-
- A default paper size can be set in the device's `DESC' file. Most
-output devices also have a command line option `-p' to override the
-default paper size and option `-l' to use landscape orientation. *Note
-DESC File Format::, for a description of the `papersize' keyword which
-takes the same argument as `-p'.
-
- A convenient shorthand to set a particular paper size for `gtroff'
-is command line option `-dpaper=SIZE'. This defines string `paper'
-which is processed in file `papersize.tmac' (loaded in the start-up
-file `troffrc' by default). Possible values for SIZE are the same as
-the predefined values for the `papersize' keyword (but only in
-lowercase) except `a7'-`d7'. An appended `l' (ell) character denotes
-landscape orientation.
-
- For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-
- groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-
- Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-
-File: groff, Node: Invocation Examples, Prev: Paper Size, Up: Invoking groff
-
-2.6 Invocation Examples
-=======================
-
-This section lists several common uses of `groff' and the corresponding
-command lines.
-
-
- groff file
-
-This command processes `file' without a macro package or a
-preprocessor. The output device is the default, `ps', and the output
-is sent to `stdout'.
-
-
- groff -t -mandoc -Tascii file | less
-
-This is basically what a call to the `man' program does. `gtroff'
-processes the manual page `file' with the `mandoc' macro file (which in
-turn either calls the `man' or the `mdoc' macro package), using the
-`tbl' preprocessor and the ASCII output device. Finally, the `less'
-pager displays the result.
-
-
- groff -X -m me file
-
-Preview `file' with `gxditview', using the `me' macro package. Since
-no `-T' option is specified, use the default device (`ps'). Note that
-you can either say `-m me' or `-me'; the latter is an anachronism from
-the early days of UNIX.(1) (*note Invocation Examples-Footnote-1::)
-
-
- groff -man -rD1 -z file
-
-Check `file' with the `man' macro package, forcing double-sided
-printing - don't produce any output.
-
-* Menu:
-
-* grog::
-
-
-File: groff, Node: Invocation Examples-Footnotes, Up: Invocation Examples
-
- (1) The same is true for the other main macro packages that come
-with `groff': `man', `mdoc', `ms', `mm', and `mandoc'. This won't work
-in general; for example, to load `trace.tmac', either `-mtrace' or
-`-m trace' must be used.
-
-
-File: groff, Node: grog, Prev: Invocation Examples, Up: Invocation Examples
-
-2.6.1 `grog'
-------------
-
-`grog' reads files, guesses which of the `groff' preprocessors and/or
-macro packages are required for formatting them, and prints the `groff'
-command including those options on the standard output. It generates
-one or more of the options `-e', `-man', `-me', `-mm', `-mom', `-ms',
-`-mdoc', `-mdoc-old', `-p', `-R', `-g', `-G', `-s', and `-t'.
-
- A special file name `-' refers to the standard input. Specifying no
-files also means to read the standard input. Any specified options are
-included in the printed command. No space is allowed between options
-and their arguments. The only options recognized are `-C' (which is
-also passed on) to enable compatibility mode, and `-v' to print the
-version number and exit.
-
- For example,
-
-
- grog -Tdvi paper.ms
-
-guesses the appropriate command to print `paper.ms' and then prints it
-to the command line after adding the `-Tdvi' option. For direct
-execution, enclose the call to `grog' in backquotes at the UNIX shell
-prompt:
-
-
- `grog -Tdvi paper.ms` > paper.dvi
-
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e. either a file or a pager program like
-`less').
-
-
-File: groff, Node: Tutorial for Macro Users, Next: Macro Packages, Prev: Invoking groff, Up: Top
-
-3 Tutorial for Macro Users
-**************************
-
-Most users tend to use a macro package to format their papers. This
-means that the whole breadth of `groff' is not necessary for most
-people. This chapter covers the material needed to efficiently use a
-macro package.
-
-* Menu:
-
-* Basics::
-* Common Features::
-
-
-File: groff, Node: Basics, Next: Common Features, Prev: Tutorial for Macro Users, Up: Tutorial for Macro Users
-
-3.1 Basics
-==========
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.(1) (*note Basics-Footnote-1::) References
-are made throughout to more detailed information, if desired.
-
- `gtroff' reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing. The input
-consists of text, or words to be printed, and embedded commands
-("requests" and "escapes"), which tell `gtroff' how to format the
-output. For more detail on this, see *Note Embedded Commands::.
-
- The word "argument" is used in this chapter to mean a word or number
-which appears on the same line as a request, and which modifies the
-meaning of that request. For example, the request
-
-
- .sp
-
-spaces one line, but
-
-
- .sp 4
-
-spaces four lines. The number 4 is an argument to the `sp' request
-which says to space four lines instead of one. Arguments are separated
-from the request and from each other by spaces (_no_ tabs). More
-details on this can be found in *Note Request and Macro Arguments::.
-
- The primary function of `gtroff' is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result. For
-example, the input:
-
-
- Now is the time
- for all good men
- to come to the aid
- of their party.
- Four score and seven
- years ago, etc.
-
-is read, packed onto output lines, and justified to produce:
-
- Now is the time for all good men to come to the aid of their party.
- Four score and seven years ago, etc.
-
- Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph. To do
-this it is possible to cause a "break", which starts a new output line.
-Some requests cause a break automatically, as normally do blank input
-lines and input lines beginning with a space.
-
- Not all input lines are text to be formatted. Some input lines are
-requests which describe how to format the text. Requests always have a
-period (`.') or an apostrophe (`'') as the first character of the input
-line.
-
- The text formatter also does more complex things, such as
-automatically numbering pages, skipping over page boundaries, putting
-footnotes in the correct place, and so forth.
-
- Here are a few hints for preparing text for input to `gtroff'.
-
- * First, keep the input lines short. Short input lines are easier to
- edit, and `gtroff' packs words onto longer lines anyhow.
-
- * In keeping with this, it is helpful to begin a new line after every
- comma or phrase, since common corrections are to add or delete
- sentences or phrases.
-
- * End each sentence with two spaces - or better, start each sentence
- on a new line. `gtroff' recognizes characters that usually end a
- sentence, and inserts sentence space accordingly.
-
- * Do not hyphenate words at the end of lines - `gtroff' is smart
- enough to hyphenate words as needed, but is not smart enough to
- take hyphens out and join a word back together. Also, words such
- as "mother-in-law" should not be broken over a line, since then a
- space can occur where not wanted, such as "mother- in-law".
-
- `gtroff' double-spaces output text automatically if you use the
-request `.ls 2'. Reactivate single-spaced mode by typing `.ls 1'.(2)
-(*note Basics-Footnote-2::)
-
- A number of requests allow to change the way the output looks,
-sometimes called the "layout" of the output page. Most of these
-requests adjust the placing of "whitespace" (blank lines or spaces).
-
- The `bp' request starts a new page, causing a line break.
-
- The request `.sp N' leaves N lines of blank space. N can be omitted
-(meaning skip a single line) or can be of the form Ni (for N inches) or
-Nc (for N centimeters). For example, the input:
-
-
- .sp 1.5i
- My thoughts on the subject
- .sp
-
-leaves one and a half inches of space, followed by the line "My
-thoughts on the subject", followed by a single blank line (more
-measurement units are available, see *Note Measurements::).
-
- Text lines can be centered by using the `ce' request. The line
-after `ce' is centered (horizontally) on the page. To center more than
-one line, use `.ce N' (where N is the number of lines to center),
-followed by the N lines. To center many lines without counting them,
-type:
-
-
- .ce 1000
- lines to center
- .ce 0
-
-The `.ce 0' request tells `groff' to center zero more lines, in other
-words, stop centering.
-
- All of these requests cause a break; that is, they always start a new
-line. To start a new line without performing any other action, use
-`br'.
-
-
-File: groff, Node: Basics-Footnotes, Up: Basics
-
- (1) This section is derived from `Writing Papers with nroff using
--me' by Eric P. Allman.
-
- (2) If you need finer granularity of the vertical space, use the
-`pvs' request (*note Changing Type Sizes::).
-
-
-File: groff, Node: Common Features, Prev: Basics, Up: Tutorial for Macro Users
-
-3.2 Common Features
-===================
-
-`gtroff' provides very low-level operations for formatting a document.
-There are many common routine operations which are done in all
-documents. These common operations are written into "macros" and
-collected into a "macro package".
-
- All macro packages provide certain common capabilities which fall
-into the following categories.
-
-* Menu:
-
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-
-
-File: groff, Node: Paragraphs, Next: Sections and Chapters, Prev: Common Features, Up: Common Features
-
-3.2.1 Paragraphs
-----------------
-
-One of the most common and most used capability is starting a
-paragraph. There are a number of different types of paragraphs, any of
-which can be initiated with macros supplied by the macro package.
-Normally, paragraphs start with a blank line and the first line
-indented, like the text in this manual. There are also block style
-paragraphs, which omit the indentation:
-
-
- Some men look at constitutions with sanctimonious
- reverence, and deem them like the ark of the covenant, too
- sacred to be touched.
-
-And there are also indented paragraphs which begin with a tag or label
-at the margin and the remaining text indented.
-
-
- one This is the first paragraph. Notice how the first
- line of the resulting paragraph lines up with the
- other lines in the paragraph.
-
-
- longlabel
- This paragraph had a long label. The first
- character of text on the first line does not line up
- with the text on second and subsequent lines,
- although they line up with each other.
-
- A variation of this is a bulleted list.
-
-
- . Bulleted lists start with a bullet. It is possible
- to use other glyphs instead of the bullet. In nroff
- mode using the ASCII character set for output, a dot
- is used instead of a real bullet.
-
-
-File: groff, Node: Sections and Chapters, Next: Headers and Footers, Prev: Paragraphs, Up: Common Features
-
-3.2.2 Sections and Chapters
----------------------------
-
-Most macro packages supply some form of section headers. The simplest
-kind is simply the heading on a line by itself in bold type. Others
-supply automatically numbered section heading or different heading
-styles at different levels. Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-
-File: groff, Node: Headers and Footers, Next: Page Layout Adjustment, Prev: Sections and Chapters, Up: Common Features
-
-3.2.3 Headers and Footers
--------------------------
-
-Every macro package gives some way to manipulate the "headers" and
-"footers" (also called "titles") on each page. This is text put at the
-top and bottom of each page, respectively, which contain data like the
-current page number, the current chapter title, and so on. Its
-appearance is not affected by the running text. Some packages allow
-for different ones on the even and odd pages (for material printed in a
-book form).
-
- The titles are called "three-part titles", that is, there is a
-left-justified part, a centered part, and a right-justified part. An
-automatically generated page number may be put in any of these fields
-with the `%' character (see *Note Page Layout::, for more details).
-
-
-File: groff, Node: Page Layout Adjustment, Next: Displays, Prev: Headers and Footers, Up: Common Features
-
-3.2.4 Page Layout
------------------
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-
-File: groff, Node: Displays, Next: Footnotes and Annotations, Prev: Page Layout Adjustment, Up: Common Features
-
-3.2.5 Displays
---------------
-
-"Displays" are sections of text to be set off from the body of the
-paper. Major quotes, tables, and figures are types of displays, as are
-all the examples used in this document.
-
- "Major quotes" are quotes which are several lines long, and hence
-are set in from the rest of the text without quote marks around them.
-
- A "list" is an indented, single-spaced, unfilled display. Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
- A "keep" is a display of lines which are kept on a single page if
-possible. An example for a keep might be a diagram. Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
- "Floating keeps" move relative to the text. Hence, they are good for
-things which are referred to by name, such as "See figure 3". A
-floating keep appears at the bottom of the current page if it fits;
-otherwise, it appears at the top of the next page. Meanwhile, the
-surrounding text `flows' around the keep, thus leaving no blank areas.
-
-
-File: groff, Node: Footnotes and Annotations, Next: Table of Contents, Prev: Displays, Up: Common Features
-
-3.2.6 Footnotes and Annotations
--------------------------------
-
-There are a number of requests to save text for later printing.
-
- "Footnotes" are printed at the bottom of the current page.
-
- "Delayed text" is very similar to a footnote except that it is
-printed when called for explicitly. This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
- Most macro packages which supply this functionality also supply a
-means of automatically numbering either type of annotation.
-
-
-File: groff, Node: Table of Contents, Next: Indices, Prev: Footnotes and Annotations, Up: Common Features
-
-3.2.7 Table of Contents
------------------------
-
-"Tables of contents" are a type of delayed text having a tag (usually
-the page number) attached to each entry after a row of dots. The table
-accumulates throughout the paper until printed, usually after the paper
-has ended. Many macro packages provide the ability to have several
-tables of contents (e.g. a standard table of contents, a list of
-tables, etc).
-
-
-File: groff, Node: Indices, Next: Paper Formats, Prev: Table of Contents, Up: Common Features
-
-3.2.8 Indices
--------------
-
-While some macro packages use the term "index", none actually provide
-that functionality. The facilities they call indices are actually more
-appropriate for tables of contents.
-
- To produce a real index in a document, external tools like the
-`makeindex' program are necessary.
-
-
-File: groff, Node: Paper Formats, Next: Multiple Columns, Prev: Indices, Up: Common Features
-
-3.2.9 Paper Formats
--------------------
-
-Some macro packages provide stock formats for various kinds of
-documents. Many of them provide a common format for the title and
-opening pages of a technical paper. The `mm' macros in particular
-provide formats for letters and memoranda.
-
-
-File: groff, Node: Multiple Columns, Next: Font and Size Changes, Prev: Paper Formats, Up: Common Features
-
-3.2.10 Multiple Columns
------------------------
-
-Some macro packages (but not `man') provide the ability to have two or
-more columns on a page.
-
-
-File: groff, Node: Font and Size Changes, Next: Predefined Strings, Prev: Multiple Columns, Up: Common Features
-
-3.2.11 Font and Size Changes
-----------------------------
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-
-File: groff, Node: Predefined Strings, Next: Preprocessor Support, Prev: Font and Size Changes, Up: Common Features
-
-3.2.12 Predefined Strings
--------------------------
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-
-File: groff, Node: Preprocessor Support, Next: Configuration and Customization, Prev: Predefined Strings, Up: Common Features
-
-3.2.13 Preprocessor Support
----------------------------
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
- For example, all macro packages mark tables (which are processed with
-`gtbl') by placing them between `TS' and `TE' macros. The `ms' macro
-package has an option, `.TS H', that prints a caption at the top of a
-new page (when the table is too long to fit on a single page).
-
-
-File: groff, Node: Configuration and Customization, Prev: Preprocessor Support, Up: Common Features
-
-3.2.14 Configuration and Customization
---------------------------------------
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves. This ranges from setting the default type size
-to changing the appearance of section headers.
-
-
-File: groff, Node: Macro Packages, Next: gtroff Reference, Prev: Tutorial for Macro Users, Up: Top
-
-4 Macro Packages
-****************
-
-This chapter documents the main macro packages that come with `groff'.
-
- Different main macro packages can't be used at the same time; for
-example
-
-
- groff -m man foo.man -m ms bar.doc
-
-doesn't work. Note that option arguments are processed before
-non-option arguments; the above (failing) sample is thus reordered to
-
-
- groff -m man -m ms foo.man bar.doc
-
-* Menu:
-
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-
-
-File: groff, Node: man, Next: mdoc, Prev: Macro Packages, Up: Macro Packages
-
-4.1 `man'
-=========
-
-This is the most popular and probably the most important macro package
-of `groff'. It is easy to use, and a vast majority of manual pages are
-based on it.
-
-* Menu:
-
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-
-
-File: groff, Node: Man options, Next: Man usage, Prev: man, Up: man
-
-4.1.1 Options
--------------
-
-The command line format for using the `man' macros with `groff' is:
-
-
- groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ]
- [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ]
- [ -rPNNN ] [ -rSXX ] [ -rXNNN ]
- [ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ]
-
-It is possible to use `-man' instead of `-m man'.
-
-`-rcR=1'
- This option (the default if a TTY output device is used) creates a
- single, very long page instead of multiple pages. Use `-rcR=0' to
- disable it.
-
-`-rC1'
- If more than one manual page is given on the command line, number
- the pages continuously, rather than starting each at 1.
-
-`-rD1'
- Double-sided printing. Footers for even and odd pages are
- formatted differently.
-
-`-rFT=DIST'
- Set the position of the footer text to DIST. If positive, the
- distance is measured relative to the top of the page, otherwise it
- is relative to the bottom. The default is -0.5i.
-
-`-rHY=FLAGS'
- Set hyphenation flags. Possible values are 1 to hyphenate without
- restrictions, 2 to not hyphenate the last word on a page, 4 to
- not hyphenate the last two characters of a word, and 8 to not
- hyphenate the first two characters of a word. These values are
- additive; the default is 14.
-
-`-rIN=LENGTH'
- Set the body text indentation to LENGTH. If not specified, the
- indentation defaults to 7n (7 characters) in nroff mode and 7.2n
- otherwise. For nroff, this value should always be an integer
- multiple of unit `n' to get consistent indentation.
-
-`-rLL=LENGTH'
- Set line length to LENGTH. If not specified, the line length is
- set to respect any value set by a prior `ll' request (which _must_
- be in effect when the `TH' macro is invoked), if this differs from
- the built-in default for the formatter; otherwise it defaults to
- 78n in nroff mode (this is 78 characters per line) and 6.5i in
- troff mode.(1) (*note Man options-Footnote-1::)
-
-`-rLT=LENGTH'
- Set title length to LENGTH. If not specified, the title length
- defaults to the line length.
-
-`-rPNNN'
- Page numbering starts with NNN rather than with 1.
-
-`-rSXX'
- Use XX (which can be 10, 11, or 12pt) as the base document font
- size instead of the default value of 10pt.
-
-`-rSN=LENGTH'
- Set the indentation for sub-subheadings to LENGTH. If not
- specified, the indentation defaults to 3n.
-
-`-rXNNN'
- After page NNN, number pages as NNNa, NNNb, NNNc, etc. For
- example, the option `-rX2' produces the following page numbers: 1,
- 2, 2a, 2b, 2c, etc.
-
-
-File: groff, Node: Man options-Footnotes, Up: Man options
-
- (1) Note that the use of a `.ll LENGTH' request to initialize the
-line length, prior to use of the `TH' macro, is supported for backward
-compatibility with some versions of the `man' program. _Always_ use the
-`-rLL=LENGTH' option, or an equivalent `.nr LL LENGTH' request, in
-preference to such a `.ll LENGTH' request. In particular, note that in
-nroff mode, the request `.ll 65n', (with any LENGTH expression which
-evaluates equal to 65n, i.e., the formatter's default line length in
-nroff mode), will _not_ set the line length to 65n (it will be adjusted
-to the `man' macro package's default setting of 78n), whereas the use
-of the `-rLL=65n' option, or the `.nr LL 65n' request _will_ establish
-a line length of 65n.
-
-
-File: groff, Node: Man usage, Next: Man font macros, Prev: Man options, Up: man
-
-4.1.2 Usage
------------
-
-This section describes the available macros for manual pages. For
-further customization, put additional macros and requests into the file
-`man.local' which is loaded immediately after the `man' package.
-
- -- Macro: .TH title section [extra1 [extra2 [extra3]]]
- Set the title of the man page to TITLE and the section to SECTION,
- which must have a value between 1 and 8. The value of SECTION may
- also have a string appended, e.g. `.pm', to indicate a specific
- subsection of the man pages.
-
- Both TITLE and SECTION are positioned at the left and right in the
- header line (with SECTION in parentheses immediately appended to
- TITLE. EXTRA1 is positioned in the middle of the footer line.
- EXTRA2 is positioned at the left in the footer line (or at the
- left on even pages and at the right on odd pages if double-sided
- printing is active). EXTRA3 is centered in the header line.
-
- For HTML output, headers and footers are completely suppressed.
-
- Additionally, this macro starts a new page; the new line number
- is 1 again (except if the `-rC1' option is given on the command
- line) - this feature is intended only for formatting multiple man
- pages; a single man page should contain exactly one `TH' macro at
- the beginning of the file.
-
- -- Macro: .SH [heading]
- Set up an unnumbered section heading sticking out to the left.
- Prints out all the text following `SH' up to the end of the line
- (or the text in the next line if there is no argument to `SH') in
- bold face (or the font specified by the string `HF'), one size
- larger than the base document size. Additionally, the left margin
- and the indentation for the following text is reset to its default
- value.
-
- -- Macro: .SS [heading]
- Set up an unnumbered (sub)section heading. Prints out all the text
- following `SS' up to the end of the line (or the text in the next
- line if there is no argument to `SS') in bold face (or the font
- specified by the string `HF'), at the same size as the base
- document size. Additionally, the left margin and the indentation
- for the following text is reset to its default value.
-
- -- Macro: .TP [nnn]
- Set up an indented paragraph with label. The indentation is set to
- NNN if that argument is supplied (the default unit is `n' if
- omitted), otherwise it is set to the previous indentation value
- specified with `TP', `IP', or `HP' (or to the default value if
- none of them have been used yet).
-
- The first line of text following this macro is interpreted as a
- string to be printed flush-left, as it is appropriate for a label.
- It is not interpreted as part of a paragraph, so there is no
- attempt to fill the first line with text from the following input
- lines. Nevertheless, if the label is not as wide as the
- indentation the paragraph starts at the same line (but indented),
- continuing on the following lines. If the label is wider than the
- indentation the descriptive part of the paragraph begins on the
- line following the label, entirely indented. Note that neither
- font shape nor font size of the label is set to a default value;
- on the other hand, the rest of the text has default font settings.
-
- -- Macro: .LP
- -- Macro: .PP
- -- Macro: .P
- These macros are mutual aliases. Any of them causes a line break
- at the current position, followed by a vertical space downwards by
- the amount specified by the `PD' macro. The font size and shape
- are reset to the default value (10pt roman if no `-rS' option is
- given on the command line). Finally, the current left margin and
- the indentation is restored.
-
- -- Macro: .IP [designator [nnn]]
- Set up an indented paragraph, using DESIGNATOR as a tag to mark
- its beginning. The indentation is set to NNN if that argument is
- supplied (default unit is `n'), otherwise it is set to the
- previous indentation value specified with `TP', `IP', or `HP' (or
- the default value if none of them have been used yet). Font size
- and face of the paragraph (but not the designator) are reset to
- their default values.
-
- To start an indented paragraph with a particular indentation but
- without a designator, use `""' (two double quotes) as the first
- argument of `IP'.
-
- For example, to start a paragraph with bullets as the designator
- and 4 en indentation, write
-
-
- .IP \(bu 4
-
-
- -- Macro: .HP [nnn]
- Set up a paragraph with hanging left indentation. The indentation
- is set to NNN if that argument is supplied (default unit is `n'),
- otherwise it is set to the previous indentation value specified
- with `TP', `IP', or `HP' (or the default value if non of them have
- been used yet). Font size and face are reset to their default
- values.
-
- -- Macro: .RS [nnn]
- Move the left margin to the right by the value NNN if specified
- (default unit is `n'); otherwise it is set to the previous
- indentation value specified with `TP', `IP', or `HP' (or to the
- default value if none of them have been used yet). The
- indentation value is then set to the default.
-
- Calls to the `RS' macro can be nested.
-
- -- Macro: .RE [nnn]
- Move the left margin back to level NNN, restoring the previous left
- margin. If no argument is given, it moves one level back. The
- first level (i.e., no call to `RS' yet) has number 1, and each call
- to `RS' increases the level by 1.
-
- To summarize, the following macros cause a line break with the
-insertion of vertical space (which amount can be changed with the `PD'
-macro): `SH', `SS', `TP', `LP' (`PP', `P'), `IP', and `HP'.
-
- The macros `RS' and `RE' also cause a break but do not insert
-vertical space.
-
- Finally, the macros `SH', `SS', `LP' (`PP', `P'), and `RS' reset the
-indentation to its default value.
-
-
-File: groff, Node: Man font macros, Next: Miscellaneous man macros, Prev: Man usage, Up: man
-
-4.1.3 Macros to set fonts
--------------------------
-
-The standard font is roman; the default text size is 10 point. If
-command line option `-rS=N' is given, use Npt as the default text size.
-
- -- Macro: .SM [text]
- Set the text on the same line or the text on the next line in a
- font that is one point size smaller than the default font.
-
- -- Macro: .SB [text]
- Set the text on the same line or the text on the next line in bold
- face font, one point size smaller than the default font.
-
- -- Macro: .BI text
- Set its arguments alternately in bold face and italic, without a
- space between the arguments. Thus,
-
-
- .BI this "word and" that
-
- produces "thisword andthat" with "this" and "that" in bold face,
- and "word and" in italics.
-
- -- Macro: .IB text
- Set its arguments alternately in italic and bold face, without a
- space between the arguments.
-
- -- Macro: .RI text
- Set its arguments alternately in roman and italic, without a space
- between the arguments.
-
- -- Macro: .IR text
- Set its arguments alternately in italic and roman, without a space
- between the arguments.
-
- -- Macro: .BR text
- Set its arguments alternately in bold face and roman, without a
- space between the arguments.
-
- -- Macro: .RB text
- Set its arguments alternately in roman and bold face, without a
- space between the arguments.
-
- -- Macro: .B [text]
- Set TEXT in bold face. If no text is present on the line where
- the macro is called, then the text of the next line appears in bold
- face.
-
- -- Macro: .I [text]
- Set TEXT in italic. If no text is present on the line where the
- macro is called, then the text of the next line appears in italic.
-
-
-File: groff, Node: Miscellaneous man macros, Next: Predefined man strings, Prev: Man font macros, Up: man
-
-4.1.4 Miscellaneous macros
---------------------------
-
-The default indentation is 7.2n in troff mode and 7n in nroff mode
-except for `grohtml' which ignores indentation.
-
- -- Macro: .DT
- Set tabs every 0.5 inches. Since this macro is always executed
- during a call to the `TH' macro, it makes sense to call it only if
- the tab positions have been changed.
-
- -- Macro: .PD [nnn]
- Adjust the empty space before a new paragraph (or section). The
- optional argument gives the amount of space (default unit is `v');
- without parameter, the value is reset to its default value (1 line
- in nroff mode, 0.4v otherwise).
-
- This affects the macros `SH', `SS', `TP', `LP' (as well as `PP'
- and `P'), `IP', and `HP'.
-
- The following two macros are included for BSD compatibility.
-
- -- Macro: .AT [system [release]]
- Alter the footer for use with AT&T manpages. This command exists
- only for compatibility; don't use it. The first argument SYSTEM
- can be:
-
- `3'
- 7th Edition (the default)
-
- `4'
- System III
-
- `5'
- System V
-
- An optional second argument RELEASE to `AT' specifies the release
- number (such as "System V Release 3").
-
- -- Macro: .UC [version]
- Alters the footer for use with BSD manpages. This command exists
- only for compatibility; don't use it. The argument can be:
-
- `3'
- 3rd Berkeley Distribution (the default)
-
- `4'
- 4th Berkeley Distribution
-
- `5'
- 4.2 Berkeley Distribution
-
- `6'
- 4.3 Berkeley Distribution
-
- `7'
- 4.4 Berkeley Distribution
-
-
-File: groff, Node: Predefined man strings, Next: Preprocessors in man pages, Prev: Miscellaneous man macros, Up: man
-
-4.1.5 Predefined strings
-------------------------
-
-The following strings are defined:
-
- -- String: \*[S]
- Switch back to the default font size.
-
- -- String: \*[HF]
- The typeface used for headings. The default is `B'.
-
- -- String: \*[R]
- The `registered' sign.
-
- -- String: \*[Tm]
- The `trademark' sign.
-
- -- String: \*[lq]
- -- String: \*[rq]
- Left and right quote. This is equal to `\(lq' and `\(rq',
- respectively.
-
-
-File: groff, Node: Preprocessors in man pages, Next: Optional man extensions, Prev: Predefined man strings, Up: man
-
-4.1.6 Preprocessors in `man' pages
-----------------------------------
-
-If a preprocessor like `gtbl' or `geqn' is needed, it has become common
-usage to make the first line of the man page look like this:
-
-
- '\" WORD
-
-Note the single space character after the double quote. WORD consists
-of letters for the needed preprocessors: `e' for `geqn', `r' for
-`grefer', `t' for `gtbl'. Modern implementations of the `man' program
-read this first line and automatically call the right preprocessor(s).
-
-
-File: groff, Node: Optional man extensions, Prev: Preprocessors in man pages, Up: man
-
-4.1.7 Optional `man' extensions
--------------------------------
-
-Use the file `man.local' for local extensions to the `man' macros or
-for style changes.
-
-Custom headers and footers
-..........................
-
-In groff versions 1.18.2 and later, you can specify custom headers and
-footers by redefining the following macros in `man.local'.
-
- -- Macro: .PT
- Control the content of the headers. Normally, the header prints
- the command name and section number on either side, and the
- optional fifth argument to `TH' in the center.
-
- -- Macro: .BT
- Control the content of the footers. Normally, the footer prints
- the page number and the third and fourth arguments to `TH'.
-
- Use the `FT' number register to specify the footer position. The
- default is -0.5i.
-
-Ultrix-specific man macros
-..........................
-
-The `groff' source distribution includes a file named `man.ultrix',
-containing macros compatible with the Ultrix variant of `man'. Copy
-this file into `man.local' (or use the `mso' request to load it) to
-enable the following macros.
-
- -- Macro: .CT key
- Print `<CTRL/KEY>'.
-
- -- Macro: .CW
- Print subsequent text using the constant width (Courier) typeface.
-
- -- Macro: .Ds
- Begin a non-filled display.
-
- -- Macro: .De
- End a non-filled display started with `Ds'.
-
- -- Macro: .EX [indent]
- Begins a non-filled display using the constant width (Courier)
- typeface. Use the optional INDENT argument to indent the display.
-
- -- Macro: .EE
- End a non-filled display started with `EX'.
-
- -- Macro: .G [text]
- Sets TEXT in Helvetica. If no text is present on the line where
- the macro is called, then the text of the next line appears in
- Helvetica.
-
- -- Macro: .GL [text]
- Sets TEXT in Helvetica Oblique. If no text is present on the line
- where the macro is called, then the text of the next line appears
- in Helvetica Oblique.
-
- -- Macro: .HB [text]
- Sets TEXT in Helvetica Bold. If no text is present on the line
- where the macro is called, then all text up to the next `HB'
- appears in Helvetica Bold.
-
- -- Macro: .TB [text]
- Identical to `HB'.
-
- -- Macro: .MS title sect [punct]
- Set a manpage reference in Ultrix format. The TITLE is in Courier
- instead of italic. Optional punctuation follows the section
- number without an intervening space.
-
- -- Macro: .NT [`C'] [title]
- Begin a note. Print the optional title, or the word "Note",
- centered on the page. Text following the macro makes up the body
- of the note, and is indented on both sides. If the first argument
- is `C', the body of the note is printed centered (the second
- argument replaces the word "Note" if specified).
-
- -- Macro: .NE
- End a note begun with `NT'.
-
- -- Macro: .PN path [punct]
- Set the path name in constant width (Courier), followed by
- optional punctuation.
-
- -- Macro: .Pn [punct] path [punct]
- When called with two arguments, identical to `PN'. When called
- with three arguments, set the second argument in constant width
- (Courier), bracketed by the first and third arguments in the
- current font.
-
- -- Macro: .R
- Switch to roman font and turn off any underlining in effect.
-
- -- Macro: .RN
- Print the string `<RETURN>'.
-
- -- Macro: .VS [`4']
- Start printing a change bar in the margin if the number `4' is
- specified. Otherwise, this macro does nothing.
-
- -- Macro: .VE
- End printing the change bar begun by `VS'.
-
-Simple example
-..............
-
-The following example `man.local' file alters the `SH' macro to add
-some extra vertical space before printing the heading. Headings are
-printed in Helvetica Bold.
-
-
- .\" Make the heading fonts Helvetica
- .ds HF HB
- .
- .\" Put more whitespace in front of headings.
- .rn SH SH-orig
- .de SH
- . if t .sp (u;\\n[PD]*2)
- . SH-orig \\$*
- ..
-
-
-File: groff, Node: mdoc, Next: ms, Prev: man, Up: Macro Packages
-
-4.2 `mdoc'
-==========
-
-See the `groff_mdoc(7)' man page (type `man groff_mdoc' at the command
-line).
-
-
-File: groff, Node: ms, Next: me, Prev: mdoc, Up: Macro Packages
-
-4.3 `ms'
-========
-
-The `-ms' macros are suitable for reports, letters, books, user
-manuals, and so forth. The package provides macros for cover pages,
-section headings, paragraphs, lists, footnotes, pagination, and a table
-of contents.
-
-* Menu:
-
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-
-
-File: groff, Node: ms Intro, Next: General ms Structure, Prev: ms, Up: ms
-
-4.3.1 Introduction to `ms'
---------------------------
-
-The original `-ms' macros were included with AT&T `troff' as well as
-the `man' macros. While the `man' package is intended for brief
-documents that can be read on-line as well as printed, the `ms' macros
-are suitable for longer documents that are meant to be printed rather
-than read on-line.
-
- The `ms' macro package included with `groff' is a complete,
-bottom-up re-implementation. Several macros (specific to AT&T or
-Berkeley) are not included, while several new commands are. *Note
-Differences from AT&T ms::, for more information.
-
-
-File: groff, Node: General ms Structure, Next: ms Document Control Registers, Prev: ms Intro, Up: ms
-
-4.3.2 General structure of an `ms' document
--------------------------------------------
-
-The `ms' macro package expects a certain amount of structure, but not
-as much as packages such as `man' or `mdoc'.
-
- The simplest documents can begin with a paragraph macro (such as
-`LP' or `PP'), and consist of text separated by paragraph macros or
-even blank lines. Longer documents have a structure as follows:
-
-*Document type*
- If you invoke the `RP' (report) macro on the first line of the
- document, `groff' prints the cover page information on its own
- page; otherwise it prints the information on the first page with
- your document text immediately following. Other document formats
- found in AT&T `troff' are specific to AT&T or Berkeley, and are
- not supported in `groff'.
-
-*Format and layout*
- By setting number registers, you can change your document's type
- (font and size), margins, spacing, headers and footers, and
- footnotes. *Note ms Document Control Registers::, for more
- details.
-
-*Cover page*
- A cover page consists of a title, the author's name and
- institution, an abstract, and the date.(1) (*note General ms
- Structure-Footnote-1::) *Note ms Cover Page Macros::, for more
- details.
-
-*Body*
- Following the cover page is your document. You can use the `ms'
- macros to write reports, letters, books, and so forth. The
- package is designed for structured documents, consisting of
- paragraphs interspersed with headings and augmented by lists,
- footnotes, tables, and other common constructs. *Note ms Body
- Text::, for more details.
-
-*Table of contents*
- Longer documents usually include a table of contents, which you can
- invoke by placing the `TC' macro at the end of your document. The
- `ms' macros have minimal indexing facilities, consisting of the
- `IX' macro, which prints an entry on standard error. Printing the
- table of contents at the end is necessary since `groff' is a
- single-pass text formatter, thus it cannot determine the page
- number of each section until that section has actually been set
- and printed. Since `ms' output is intended for hardcopy, you can
- manually relocate the pages containing the table of contents
- between the cover page and the body text after printing.
-
-
-File: groff, Node: General ms Structure-Footnotes, Up: General ms Structure
-
- (1) Actually, only the title is required.
-
-
-File: groff, Node: ms Document Control Registers, Next: ms Cover Page Macros, Prev: General ms Structure, Up: ms
-
-4.3.3 Document control registers
---------------------------------
-
-The following is a list of document control number registers. For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the `RP' macro. You can set other
-registers later in your document, but you should keep them together at
-the beginning to make them easy to find and edit as necessary.
-
-Margin Settings
-...............
-
- -- Register: \n[PO]
- Defines the page offset (i.e., the left margin). There is no
- explicit right margin setting; the combination of the `PO' and `LL'
- registers implicitly define the right margin width.
-
- Effective: next page.
-
- Default value: 1i.
-
- -- Register: \n[LL]
- Defines the line length (i.e., the width of the body text).
-
- Effective: next paragraph.
-
- Default: 6i.
-
- -- Register: \n[LT]
- Defines the title length (i.e., the header and footer width). This
- is usually the same as `LL', but not necessarily.
-
- Effective: next paragraph.
-
- Default: 6i.
-
- -- Register: \n[HM]
- Defines the header margin height at the top of the page.
-
- Effective: next page.
-
- Default: 1i.
-
- -- Register: \n[FM]
- Defines the footer margin height at the bottom of the page.
-
- Effective: next page.
-
- Default: 1i.
-
-Text Settings
-.............
-
- -- Register: \n[PS]
- Defines the point size of the body text. If the value is larger
- than or equal to 1000, divide it by 1000 to get a fractional point
- size. For example, `.nr PS 10250' sets the document's point size
- to 10.25p.
-
- Effective: next paragraph.
-
- Default: 10p.
-
- -- Register: \n[VS]
- Defines the space between lines (line height plus leading). If the
- value is larger than or equal to 1000, divide it by 1000 to get a
- fractional point size. Due to backwards compatibility, `VS' must
- be smaller than 40000 (this is 40.0p).
-
- Effective: next paragraph.
-
- Default: 12p.
-
- -- Register: \n[PSINCR]
- Defines an increment in point size, which will be applied to
- section headings at nesting levels below the value specified in
- `GROWPS'. The value of `PSINCR' should be specified in points,
- with the p scaling factor, and may include a fractional component;
- for example, `.nr PSINCR 1.5p' sets a point size increment of 1.5p.
-
- Effective: next section heading.
-
- Default: 1p.
-
- -- Register: \n[GROWPS]
- Defines the heading level below which the point size increment set
- by `PSINCR' becomes effective. Section headings at and above the
- level specified by `GROWPS' will be printed at the point size set
- by `PS'; for each level below the value of `GROWPS', the point
- size will be increased in steps equal to the value of `PSINCR'.
- Setting `GROWPS' to any value less than 2 disables the incremental
- heading size feature.
-
- Effective: next section heading.
-
- Default: 0.
-
- -- Register: \n[HY]
- Defines the hyphenation level. `HY' sets safely the value of the
- low-level `hy' register. Setting the value of `HY' to 0 is
- equivalent to using the `nh' request.
-
- Effective: next paragraph.
-
- Default: 14.
-
- -- Register: \n[FAM]
- Defines the font family used to typeset the document.
-
- Effective: next paragraph.
-
- Default: as defined in the output device.
-
-Paragraph Settings
-..................
-
- -- Register: \n[PI]
- Defines the initial indentation of a (`PP' macro) paragraph.
-
- Effective: next paragraph.
-
- Default: 5n.
-
- -- Register: \n[PD]
- Defines the space between paragraphs.
-
- Effective: next paragraph.
-
- Default: 0.3v.
-
- -- Register: \n[QI]
- Defines the indentation on both sides of a quoted (`QP' macro)
- paragraph.
-
- Effective: next paragraph.
-
- Default: 5n.
-
- -- Register: \n[PORPHANS]
- Defines the minimum number of initial lines of any paragraph which
- should be kept together, to avoid orphan lines at the bottom of a
- page. If a new paragraph is started close to the bottom of a page,
- and there is insufficient space to accommodate `PORPHANS' lines
- before an automatic page break, then the page break will be forced,
- before the start of the paragraph.
-
- Effective: next paragraph.
-
- Default: 1.
-
- -- Register: \n[HORPHANS]
- Defines the minimum number of lines of the following paragraph
- which should be kept together with any section heading introduced
- by the `NH' or `SH' macros. If a section heading is placed close
- to the bottom of a page, and there is insufficient space to
- accommodate both the heading and at least `HORPHANS' lines of the
- following paragraph, before an automatic page break, then the page
- break will be forced before the heading.
-
- Effective: next paragraph.
-
- Default: 1.
-
-Footnote Settings
-.................
-
- -- Register: \n[FL]
- Defines the length of a footnote.
-
- Effective: next footnote.
-
- Default: `\n[LL]' * 5 / 6.
-
- -- Register: \n[FI]
- Defines the footnote indentation.
-
- Effective: next footnote.
-
- Default: 2n.
-
- -- Register: \n[FF]
- The footnote format:
- `0'
- Print the footnote number as a superscript; indent the
- footnote (default).
-
- `1'
- Print the number followed by a period (like 1.) and indent the
- footnote.
-
- `2'
- Like 1, without an indentation.
-
- `3'
- Like 1, but print the footnote number as a hanging paragraph.
-
- Effective: next footnote.
-
- Default: 0.
-
- -- Register: \n[FPS]
- Defines the footnote point size. If the value is larger than or
- equal to 1000, divide it by 1000 to get a fractional point size.
-
- Effective: next footnote.
-
- Default: `\n[PS]' - 2.
-
- -- Register: \n[FVS]
- Defines the footnote vertical spacing. If the value is larger
- than or equal to 1000, divide it by 1000 to get a fractional point
- size.
-
- Effective: next footnote.
-
- Default: `\n[FPS]' + 2.
-
- -- Register: \n[FPD]
- Defines the footnote paragraph spacing.
-
- Effective: next footnote.
-
- Default: `\n[PD]' / 2.
-
-Miscellaneous Number Registers
-..............................
-
- -- Register: \n[MINGW]
- Defines the minimum width between columns in a multi-column
- document.
-
- Effective: next page.
-
- Default: 2n.
-
-
-File: groff, Node: ms Cover Page Macros, Next: ms Body Text, Prev: ms Document Control Registers, Up: ms
-
-4.3.4 Cover page macros
------------------------
-
-Use the following macros to create a cover page for your document in
-the order shown.
-
- -- Macro: .RP [`no']
- Specifies the report format for your document. The report format
- creates a separate cover page. The default action (no `RP' macro)
- is to print a subset of the cover page on page 1 of your document.
-
- If you use the word `no' as an optional argument, `groff' prints a
- title page but does not repeat any of the title page information
- (title, author, abstract, etc.) on page 1 of the document.
-
- -- Macro: .P1
- (P-one) Prints the header on page 1. The default is to suppress
- the header.
-
- -- Macro: .DA [...]
- (optional) Prints the current date, or the arguments to the macro
- if any, on the title page (if specified) and in the footers. This
- is the default for `nroff'.
-
- -- Macro: .ND [...]
- (optional) Prints the current date, or the arguments to the macro
- if any, on the title page (if specified) but not in the footers.
- This is the default for `troff'.
-
- -- Macro: .TL
- Specifies the document title. `groff' collects text following the
- `TL' macro into the title, until reaching the author name or
- abstract.
-
- -- Macro: .AU
- Specifies the author's name, which appears on the line (or lines)
- immediately following. You can specify multiple authors as
- follows:
-
-
- .AU
- John Doe
- .AI
- University of West Bumblefuzz
- .AU
- Martha Buck
- .AI
- Monolithic Corporation
-
- ...
-
-
- -- Macro: .AI
- Specifies the author's institution. You can specify multiple
- institutions in the same way that you specify multiple authors.
-
- -- Macro: .AB [`no']
- Begins the abstract. The default is to print the word ABSTRACT,
- centered and in italics, above the text of the abstract. The word
- `no' as an optional argument suppresses this heading.
-
- -- Macro: .AE
- Ends the abstract.
-
- The following is example mark-up for a title page.
-
-
- .RP
- .TL
- The Inevitability of Code Bloat
- in Commercial and Free Software
- .AU
- J. Random Luser
- .AI
- University of West Bumblefuzz
- .AB
- This report examines the long-term growth
- of the code bases in two large, popular software
- packages; the free Emacs and the commercial
- Microsoft Word.
- While differences appear in the type or order
- of features added, due to the different
- methodologies used, the results are the same
- in the end.
- .PP
- The free software approach is shown to be
- superior in that while free software can
- become as bloated as commercial offerings,
- free software tends to have fewer serious
- bugs and the added features are in line with
- user demand.
- .AE
-
- ... the rest of the paper follows ...
-
-
-File: groff, Node: ms Body Text, Next: ms Page Layout, Prev: ms Cover Page Macros, Up: ms
-
-4.3.5 Body text
----------------
-
-This section describes macros used to mark up the body of your
-document. Examples include paragraphs, sections, and other groups.
-
-* Menu:
-
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-
-
-File: groff, Node: Paragraphs in ms, Next: Headings in ms, Prev: ms Body Text, Up: ms Body Text
-
-4.3.5.1 Paragraphs
-..................
-
-The following paragraph types are available.
-
- -- Macro: .PP
- -- Macro: .LP
- Sets a paragraph with an initial indentation.
-
- -- Macro: .QP
- Sets a paragraph that is indented at both left and right margins.
- The effect is identical to the HTML `<BLOCKQUOTE>' element. The
- next paragraph or heading returns margins to normal.
-
- -- Macro: .XP
- Sets a paragraph whose lines are indented, except for the first
- line. This is a Berkeley extension.
-
- The following markup uses all four paragraph macros.
-
-
- .NH 2
- Cases used in the study
- .LP
- The following software and versions were
- considered for this report.
- .PP
- For commercial software, we chose
- .B "Microsoft Word for Windows" ,
- starting with version 1.0 through the
- current version (Word 2000).
- .PP
- For free software, we chose
- .B Emacs ,
- from its first appearance as a standalone
- editor through the current version (v20).
- See [Bloggs 2002] for details.
- .QP
- Franklin's Law applied to software:
- software expands to outgrow both
- RAM and disk space over time.
- .LP
- Bibliography:
- .XP
- Bloggs, Joseph R.,
- .I "Everyone's a Critic" ,
- Underground Press, March 2002.
- A definitive work that answers all questions
- and criticisms about the quality and usability of
- free software.
-
- The `PORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-
-File: groff, Node: Headings in ms, Next: Highlighting in ms, Prev: Paragraphs in ms, Up: ms Body Text
-
-4.3.5.2 Headings
-................
-
-Use headings to create a hierarchical structure for your document. The
-`ms' macros print headings in *bold*, using the same font family and
-point size as the body text.
-
- The following describes the heading macros:
-
- -- Macro: .NH curr-level
- -- Macro: .NH S level0 ...
- Numbered heading. The argument is either a numeric argument to
- indicate the level of the heading, or the letter `S' followed by
- numeric arguments to set the heading level explicitly.
-
- If you specify heading levels out of sequence, such as invoking
- `.NH 3' after `.NH 1', `groff' prints a warning on standard error.
-
- -- String: \*[SN]
- -- String: \*[SN-DOT]
- -- String: \*[SN-NO-DOT]
- After invocation of `NH', the assigned section number is made
- available in the strings `SN-DOT' (exactly as it appears in the
- printed section heading) and `SN-NO-DOT' (with the final period
- omitted). The string `SN' is also defined, as an alias for
- `SN-DOT'; if preferred, you may redefine it as an alias for
- `SN-NO-DOT', by including the initialization
-
-
- .ds SN-NO-DOT
- .als SN SN-NO-DOT
-
- *before* your first use of `NH', or simply
-
-
- .als SN SN-NO-DOT
-
- *after* your first use of `NH'.
-
- -- Macro: .SH [match-level]
- Unnumbered subheading.
-
- The optional MATCH-LEVEL argument is a GNU extension. It is a
- number indicating the level of the heading, in a manner analogous
- to the CURR-LEVEL argument to `.NH'. Its purpose is to match the
- point size, at which the heading is printed, to the size of a
- numbered heading at the same level, when the `GROWPS' and `PSINCR'
- heading size adjustment mechanism is in effect. *Note ms Document
- Control Registers::.
-
- The `HORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with the `NH' and `SH' macros, to inhibit the
-printing of orphaned section headings at the bottom of any page.
-
-
-File: groff, Node: Highlighting in ms, Next: Lists in ms, Prev: Headings in ms, Up: ms Body Text
-
-4.3.5.3 Highlighting
-....................
-
-The `ms' macros provide a variety of methods to highlight or emphasize
-text:
-
- -- Macro: .B [txt [post [pre]]]
- Sets its first argument in *bold type*. If you specify a second
- argument, `groff' prints it in the previous font after the bold
- text, with no intervening space (this allows you to set
- punctuation after the highlighted text without highlighting the
- punctuation). Similarly, it prints the third argument (if any) in
- the previous font *before* the first argument. For example,
-
-
- .B foo ) (
-
- prints (*foo*).
-
- If you give this macro no arguments, `groff' prints all text
- following in bold until the next highlighting, paragraph, or
- heading macro.
-
- -- Macro: .R [txt [post [pre]]]
- Sets its first argument in roman (or regular) type. It operates
- similarly to the `B' macro otherwise.
-
- -- Macro: .I [txt [post [pre]]]
- Sets its first argument in _italic type_. It operates similarly
- to the `B' macro otherwise.
-
- -- Macro: .CW [txt [post [pre]]]
- Sets its first argument in a `constant width face'. It operates
- similarly to the `B' macro otherwise.
-
- -- Macro: .BI [txt [post [pre]]]
- Sets its first argument in bold italic type. It operates
- similarly to the `B' macro otherwise.
-
- -- Macro: .BX [txt]
- Prints its argument and draws a box around it. If you want to box
- a string that contains spaces, use a digit-width space (`\0').
-
- -- Macro: .UL [txt [post]]
- Prints its first argument with an underline. If you specify a
- second argument, `groff' prints it in the previous font after the
- underlined text, with no intervening space.
-
- -- Macro: .LG
- Prints all text following in larger type (two points larger than
- the current point size) until the next font size, highlighting,
- paragraph, or heading macro. You can specify this macro multiple
- times to enlarge the point size as needed.
-
- -- Macro: .SM
- Prints all text following in smaller type (two points smaller than
- the current point size) until the next type size, highlighting,
- paragraph, or heading macro. You can specify this macro multiple
- times to reduce the point size as needed.
-
- -- Macro: .NL
- Prints all text following in the normal point size (that is, the
- value of the `PS' register).
-
- -- String: \*[{]
- -- String: \*[}]
- Text enclosed with `\*{' and `\*}' is printed as a superscript.
-
-
-File: groff, Node: Lists in ms, Next: Indentation values in ms, Prev: Highlighting in ms, Up: ms Body Text
-
-4.3.5.4 Lists
-.............
-
-The `IP' macro handles duties for all lists.
-
- -- Macro: .IP [marker [width]]
- The MARKER is usually a bullet glyph (`\[bu]') for unordered
- lists, a number (or auto-incrementing number register) for
- numbered lists, or a word or phrase for indented (glossary-style)
- lists.
-
- The WIDTH specifies the indentation for the body of each list
- item; its default unit is `n'. Once specified, the indentation
- remains the same for all list items in the document until specified
- again.
-
- The `PORPHANS' register (*note ms Document Control Registers::)
- operates in conjunction with the `IP' macro, to inhibit the
- printing of orphaned list markers at the bottom of any page.
-
- The following is an example of a bulleted list.
-
-
- A bulleted list:
- .IP \[bu] 2
- lawyers
- .IP \[bu]
- guns
- .IP \[bu]
- money
-
- Produces:
-
-
- A bulleted list:
-
- o lawyers
-
- o guns
-
- o money
-
- The following is an example of a numbered list.
-
-
- .nr step 1 1
- A numbered list:
- .IP \n[step] 3
- lawyers
- .IP \n+[step]
- guns
- .IP \n+[step]
- money
-
- Produces:
-
-
- A numbered list:
-
- 1. lawyers
-
- 2. guns
-
- 3. money
-
- Note the use of the auto-incrementing number register in this
-example.
-
- The following is an example of a glossary-style list.
-
-
- A glossary-style list:
- .IP lawyers 0.4i
- Two or more attorneys.
- .IP guns
- Firearms, preferably
- large-caliber.
- .IP money
- Gotta pay for those
- lawyers and guns!
-
- Produces:
-
-
- A glossary-style list:
-
- lawyers
- Two or more attorneys.
-
- guns Firearms, preferably large-caliber.
-
- money
- Gotta pay for those lawyers and guns!
-
- In the last example, the `IP' macro places the definition on the
-same line as the term if it has enough space; otherwise, it breaks to
-the next line and starts the definition below the term. This may or
-may not be the effect you want, especially if some of the definitions
-break and some do not. The following examples show two possible ways
-to force a break.
-
- The first workaround uses the `br' request to force a break after
-printing the term or label.
-
-
- A glossary-style list:
- .IP lawyers 0.4i
- Two or more attorneys.
- .IP guns
- .br
- Firearms, preferably large-caliber.
- .IP money
- Gotta pay for those lawyers and guns!
-
- The second workaround uses the `\p' escape to force the break. Note
-the space following the escape; this is important. If you omit the
-space, `groff' prints the first word on the same line as the term or
-label (if it fits) *then* breaks the line.
-
-
- A glossary-style list:
- .IP lawyers 0.4i
- Two or more attorneys.
- .IP guns
- \p Firearms, preferably large-caliber.
- .IP money
- Gotta pay for those lawyers and guns!
-
- To set nested lists, use the `RS' and `RE' macros. *Note
-Indentation values in ms::, for more information.
-
- For example:
-
-
- .IP \[bu] 2
- Lawyers:
- .RS
- .IP \[bu]
- Dewey,
- .IP \[bu]
- Cheatham,
- .IP \[bu]
- and Howe.
- .RE
- .IP \[bu]
- Guns
-
- Produces:
-
-
- o Lawyers:
-
- o Dewey,
-
- o Cheatham,
-
- o and Howe.
-
- o Guns
-
-
-File: groff, Node: Indentation values in ms, Next: Tabstops in ms, Prev: Lists in ms, Up: ms Body Text
-
-4.3.5.5 Indentation values
-..........................
-
-In many situations, you may need to indentation a section of text while
-still wrapping and filling. *Note Lists in ms::, for an example of
-nested lists.
-
- -- Macro: .RS
- -- Macro: .RE
- These macros begin and end an indented section. The `PI' register
- controls the amount of indentation, allowing the indented text to
- line up under hanging and indented paragraphs.
-
- *Note ms Displays and Keeps::, for macros to indentation and turn off
-filling.
-
-
-File: groff, Node: Tabstops in ms, Next: ms Displays and Keeps, Prev: Indentation values in ms, Up: ms Body Text
-
-4.3.5.6 Tab Stops
-.................
-
-Use the `ta' request to define tab stops as needed. *Note Tabs and
-Fields::.
-
- -- Macro: .TA
- Use this macro to reset the tab stops to the default for `ms'
- (every 5n). You can redefine the `TA' macro to create a different
- set of default tab stops.
-
-
-File: groff, Node: ms Displays and Keeps, Next: ms Insertions, Prev: Tabstops in ms, Up: ms Body Text
-
-4.3.5.7 Displays and keeps
-..........................
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
- Displays turn off filling, so lines of code are displayed as-is
-without inserting `br' requests in between each line. Displays can be
-"kept" on a single page, or allowed to break across pages.
-
- -- Macro: .DS L
- -- Macro: .LD
- -- Macro: .DE
- Left-justified display. The `.DS L' call generates a page break,
- if necessary, to keep the entire display on one page. The `LD'
- macro allows the display to break across pages. The `DE' macro
- ends the display.
-
- -- Macro: .DS I
- -- Macro: .ID
- -- Macro: .DE
- Indents the display as defined by the `DI' register. The `.DS I'
- call generates a page break, if necessary, to keep the entire
- display on one page. The `ID' macro allows the display to break
- across pages. The `DE' macro ends the display.
-
- -- Macro: .DS B
- -- Macro: .BD
- -- Macro: .DE
- Sets a block-centered display: the entire display is
- left-justified, but indented so that the longest line in the
- display is centered on the page. The `.DS B' call generates a
- page break, if necessary, to keep the entire display on one page.
- The `BD' macro allows the display to break across pages. The `DE'
- macro ends the display.
-
- -- Macro: .DS C
- -- Macro: .CD
- -- Macro: .DE
- Sets a centered display: each line in the display is centered. The
- `.DS C' call generates a page break, if necessary, to keep the
- entire display on one page. The `CD' macro allows the display to
- break across pages. The `DE' macro ends the display.
-
- -- Macro: .DS R
- -- Macro: .RD
- -- Macro: .DE
- Right-justifies each line in the display. The `.DS R' call
- generates a page break, if necessary, to keep the entire display on
- one page. The `RD' macro allows the display to break across
- pages. The `DE' macro ends the display.
-
- -- Macro: .Ds
- -- Macro: .De
- These two macros were formerly provided as aliases for `DS' and
- `DE', respectively. They have been removed, and should no longer
- be used. The original implementations of `DS' and `DE' are
- retained, and should be used instead. X11 documents which actually
- use `Ds' and `De' always load a specific macro file from the X11
- distribution (`macros.t') which provides proper definitions for
- the two macros.
-
- On occasion, you may want to "keep" other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following. The `ms' macros provide the `KS' and `KE' macros for this
-purpose.
-
- -- Macro: .KS
- -- Macro: .KE
- The `KS' macro begins a block of text to be kept on a single page,
- and the `KE' macro ends the block.
-
- -- Macro: .KF
- -- Macro: .KE
- Specifies a "floating keep"; if the keep cannot fit on the current
- page, `groff' holds the contents of the keep and allows text
- following the keep (in the source file) to fill in the remainder of
- the current page. When the page breaks, whether by an explicit
- `bp' request or by reaching the end of the page, `groff' prints
- the floating keep at the top of the new page. This is useful for
- printing large graphics or tables that do not need to appear
- exactly where specified.
-
- You can also use the `ne' request to force a page break if there is
-not enough vertical space remaining on the page.
-
- Use the following macros to draw a box around a section of text (such
-as a display).
-
- -- Macro: .B1
- -- Macro: .B2
- Marks the beginning and ending of text that is to have a box drawn
- around it. The `B1' macro begins the box; the `B2' macro ends it.
- Text in the box is automatically placed in a diversion (keep).
-
-
-File: groff, Node: ms Insertions, Next: Example multi-page table, Prev: ms Displays and Keeps, Up: ms Body Text
-
-4.3.5.8 Tables, figures, equations, and references
-..................................................
-
-The `ms' macros support the standard `groff' preprocessors: `tbl',
-`pic', `eqn', and `refer'. You mark text meant for preprocessors by
-enclosing it in pairs of tags as follows.
-
- -- Macro: .TS [`H']
- -- Macro: .TE
- Denotes a table, to be processed by the `tbl' preprocessor. The
- optional argument `H' to `TS' instructs `groff' to create a
- running header with the information up to the `TH' macro. `groff'
- prints the header at the beginning of the table; if the table runs
- onto another page, `groff' prints the header on the next page as
- well.
-
- -- Macro: .PS
- -- Macro: .PE
- Denotes a graphic, to be processed by the `pic' preprocessor. You
- can create a `pic' file by hand, using the AT&T `pic' manual
- available on the Web as a reference, or by using a graphics
- program such as `xfig'.
-
- -- Macro: .EQ [align]
- -- Macro: .EN
- Denotes an equation, to be processed by the `eqn' preprocessor.
- The optional ALIGN argument can be `C', `L', or `I' to center (the
- default), left-justify, or indent the equation.
-
- -- Macro: .[
- -- Macro: .]
- Denotes a reference, to be processed by the `refer' preprocessor.
- The GNU `refer(1)' man page provides a comprehensive reference to
- the preprocessor and the format of the bibliographic database.
-
-* Menu:
-
-* Example multi-page table::
-
-
-File: groff, Node: Example multi-page table, Next: ms Footnotes, Prev: ms Insertions, Up: ms Body Text
-
-4.3.5.9 An example multi-page table
-...................................
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-
- .TS H
- allbox expand;
- cb | cb .
- Text ...of heading...
- _
- .TH
- .T&
- l | l .
- ... the rest of the table follows...
- .CW
- .TE
-
-
-File: groff, Node: ms Footnotes, Prev: Example multi-page table, Up: ms Body Text
-
-4.3.5.10 Footnotes
-..................
-
-The `ms' macro package has a flexible footnote system. You can specify
-either numbered footnotes or symbolic footnotes (that is, using a
-marker such as a dagger symbol).
-
- -- String: \*[*]
- Specifies the location of a numbered footnote marker in the text.
-
- -- Macro: .FS
- -- Macro: .FE
- Specifies the text of the footnote. The default action is to
- create a numbered footnote; you can create a symbolic footnote by
- specifying a "mark" glyph (such as `\[dg]' for the dagger glyph)
- in the body text and as an argument to the `FS' macro, followed by
- the text of the footnote and the `FE' macro.
-
- You can control how `groff' prints footnote numbers by changing the
-value of the `FF' register. *Note ms Document Control Registers::.
-
- Footnotes can be safely used within keeps and displays, but you
-should avoid using numbered footnotes within floating keeps. You can
-set a second `\**' marker between a `\**' and its corresponding `.FS'
-entry; as long as each `FS' macro occurs _after_ the corresponding
-`\**' and the occurrences of `.FS' are in the same order as the
-corresponding occurrences of `\**'.
-
-
-File: groff, Node: ms Page Layout, Next: Differences from AT&T ms, Prev: ms Body Text, Up: ms
-
-4.3.6 Page layout
------------------
-
-The default output from the `ms' macros provides a minimalist page
-layout: it prints a single column, with the page number centered at the
-top of each page. It prints no footers.
-
- You can change the layout by setting the proper number registers and
-strings.
-
-* Menu:
-
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-
-
-File: groff, Node: ms Headers and Footers, Next: ms Margins, Prev: ms Page Layout, Up: ms Page Layout
-
-4.3.6.1 Headers and footers
-...........................
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
- -- String: \*[LH]
- -- String: \*[CH]
- -- String: \*[RH]
- Sets the left, center, and right headers.
-
- -- String: \*[LF]
- -- String: \*[CF]
- -- String: \*[RF]
- Sets the left, center, and right footers.
-
- For documents that need different information printed in the even and
-odd pages, use the following macros:
-
- -- Macro: .OH 'left'center'right'
- -- Macro: .EH 'left'center'right'
- -- Macro: .OF 'left'center'right'
- -- Macro: .EF 'left'center'right'
- The `OH' and `EH' macros define headers for the odd and even
- pages; the `OF' and `EF' macros define footers for the odd and
- even pages. This is more flexible than defining the individual
- strings.
-
- You can replace the quote (`'') marks with any character not
- appearing in the header or footer text.
-
-
-File: groff, Node: ms Margins, Next: ms Multiple Columns, Prev: ms Headers and Footers, Up: ms Page Layout
-
-4.3.6.2 Margins
-...............
-
-You control margins using a set of number registers. *Note ms Document
-Control Registers::, for details.
-
-
-File: groff, Node: ms Multiple Columns, Next: ms TOC, Prev: ms Margins, Up: ms Page Layout
-
-4.3.6.3 Multiple columns
-........................
-
-The `ms' macros can set text in as many columns as will reasonably fit
-on the page. The following macros are available; all of them force a
-page break if a multi-column mode is already set. However, if the
-current mode is single-column, starting a multi-column mode does _not_
-force a page break.
-
- -- Macro: .1C
- Single-column mode.
-
- -- Macro: .2C
- Two-column mode.
-
- -- Macro: .MC [width [gutter]]
- Multi-column mode. If you specify no arguments, it is equivalent
- to the `2C' macro. Otherwise, WIDTH is the width of each column
- and GUTTER is the space between columns. The `MINGW' number
- register controls the default gutter width.
-
-
-File: groff, Node: ms TOC, Next: ms Strings and Special Characters, Prev: ms Multiple Columns, Up: ms Page Layout
-
-4.3.6.4 Creating a table of contents
-....................................
-
-The facilities in the `ms' macro package for creating a table of
-contents are semi-automated at best. Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in `XS' and `XE' macros.
-
- -- Macro: .XS [page]
- -- Macro: .XA [page]
- -- Macro: .XE
- These macros define a table of contents or an individual entry in
- the table of contents, depending on their use. The macros are very
- simple; they cannot indent a heading based on its level. The
- easiest way to work around this is to add tabs to the table of
- contents string. The following is an example:
-
-
- .NH 1
- Introduction
- .XS
- Introduction
- .XE
- .LP
- ...
- .CW
- .NH 2
- Methodology
- .XS
- Methodology
- .XE
- .LP
- ...
-
- You can manually create a table of contents by beginning with the
- `XS' macro for the first entry, specifying the page number for
- that entry as the argument to `XS'. Add subsequent entries using
- the `XA' macro, specifying the page number for that entry as the
- argument to `XA'. The following is an example:
-
-
- .XS 1
- Introduction
- .XA 2
- A Brief History of the Universe
- .XA 729
- Details of Galactic Formation
- ...
- .XE
-
-
- -- Macro: .TC [`no']
- Prints the table of contents on a new page, setting the page number
- to *i* (Roman lowercase numeral one). You should usually place
- this macro at the end of the file, since `groff' is a single-pass
- formatter and can only print what has been collected up to the
- point that the `TC' macro appears.
-
- The optional argument `no' suppresses printing the title specified
- by the string register `TOC'.
-
- -- Macro: .PX [`no']
- Prints the table of contents on a new page, using the current page
- numbering sequence. Use this macro to print a manually-generated
- table of contents at the beginning of your document.
-
- The optional argument `no' suppresses printing the title specified
- by the string register `TOC'.
-
- The `Groff and Friends HOWTO' includes a `sed' script that
-automatically inserts `XS' and `XE' macro entries after each heading in
-a document.
-
- Altering the `NH' macro to automatically build the table of contents
-is perhaps initially more difficult, but would save a great deal of
-time in the long run if you use `ms' regularly.
-
-
-File: groff, Node: ms Strings and Special Characters, Prev: ms TOC, Up: ms Page Layout
-
-4.3.6.5 Strings and Special Characters
-......................................
-
-The `ms' macros provide the following predefined strings. You can
-change the string definitions to help in creating documents in
-languages other than English.
-
- -- String: \*[REFERENCES]
- Contains the string printed at the beginning of the references
- (bibliography) page. The default is `References'.
-
- -- String: \*[ABSTRACT]
- Contains the string printed at the beginning of the abstract. The
- default is `ABSTRACT'.
-
- -- String: \*[TOC]
- Contains the string printed at the beginning of the table of
- contents.
-
- -- String: \*[MONTH1]
- -- String: \*[MONTH2]
- -- String: \*[MONTH3]
- -- String: \*[MONTH4]
- -- String: \*[MONTH5]
- -- String: \*[MONTH6]
- -- String: \*[MONTH7]
- -- String: \*[MONTH8]
- -- String: \*[MONTH9]
- -- String: \*[MONTH10]
- -- String: \*[MONTH11]
- -- String: \*[MONTH12]
- Prints the full name of the month in dates. The default is
- `January', `February', etc.
-
- The following special characters are available(1) (*note ms Strings
-and Special Characters-Footnote-1::):
-
- -- String: \*[-]
- Prints an em dash.
-
- -- String: \*[Q]
- -- String: \*[U]
- Prints typographer's quotes in troff, and plain quotes in nroff.
- `\*Q' is the left quote and `\*U' is the right quote.
-
- Improved accent marks are available in the `ms' macros.
-
- -- Macro: .AM
- Specify this macro at the beginning of your document to enable
- extended accent marks and special characters. This is a Berkeley
- extension.
-
- To use the accent marks, place them *after* the character being
- accented.
-
- Note that groff's native support for accents is superior to the
- following definitions.
-
- The following accent marks are available after invoking the `AM'
-macro:
-
- -- String: \*[']
- Acute accent.
-
- -- String: \*[`]
- Grave accent.
-
- -- String: \*[^]
- Circumflex.
-
- -- String: \*[,]
- Cedilla.
-
- -- String: \*[~]
- Tilde.
-
- -- String: \*[:]
- Umlaut.
-
- -- String: \*[v]
- Hacek.
-
- -- String: \*[_]
- Macron (overbar).
-
- -- String: \*[.]
- Underdot.
-
- -- String: \*[o]
- Ring above.
-
- The following are standalone characters available after invoking the
-`AM' macro:
-
- -- String: \*[?]
- Upside-down question mark.
-
- -- String: \*[!]
- Upside-down exclamation point.
-
- -- String: \*[8]
- German ß ligature.
-
- -- String: \*[3]
- Yogh.
-
- -- String: \*[Th]
- Uppercase thorn.
-
- -- String: \*[th]
- Lowercase thorn.
-
- -- String: \*[D-]
- Uppercase eth.
-
- -- String: \*[d-]
- Lowercase eth.
-
- -- String: \*[q]
- Hooked o.
-
- -- String: \*[ae]
- Lowercase æ ligature.
-
- -- String: \*[Ae]
- Uppercase Æ ligature.
-
-
-File: groff, Node: ms Strings and Special Characters-Footnotes, Up: ms Strings and Special Characters
-
- (1) For an explanation what special characters are see *Note Special
-Characters::.
-
-
-File: groff, Node: Differences from AT&T ms, Next: Naming Conventions, Prev: ms Page Layout, Up: ms
-
-4.3.7 Differences from AT&T `ms'
---------------------------------
-
-This section lists the (minor) differences between the `groff -ms'
-macros and AT&T `troff -ms' macros.
-
- * The internals of `groff -ms' differ from the internals of AT&T
- `troff -ms'. Documents that depend upon implementation details of
- AT&T `troff -ms' may not format properly with `groff -ms'.
-
- * The general error-handling policy of `groff -ms' is to detect and
- report errors, rather than silently to ignore them.
-
- * `groff -ms' does not work in compatibility mode (this is, with the
- `-C' option).
-
- * There is no special support for typewriter-like devices.
-
- * `groff -ms' does not provide cut marks.
-
- * Multiple line spacing is not supported. Use a larger vertical
- spacing instead.
-
- * Some UNIX `ms' documentation says that the `CW' and `GW' number
- registers can be used to control the column width and gutter
- width, respectively. These number registers are not used in
- `groff -ms'.
-
- * Macros that cause a reset (paragraphs, headings, etc.) may change
- the indentation. Macros that change the indentation do not
- increment or decrement the indentation, but rather set it
- absolutely. This can cause problems for documents that define
- additional macros of their own. The solution is to use not the
- `in' request but instead the `RS' and `RE' macros.
-
- * To make `groff -ms' use the default page offset (which also
- specifies the left margin), the `PO' register must stay undefined
- until the first `-ms' macro is evaluated. This implies that `PO'
- should not be used early in the document, unless it is changed
- also: Remember that accessing an undefined register automatically
- defines it.
-
- -- Register: \n[GS]
- This number register is set to 1 by the `groff -ms' macros, but it
- is not used by the `AT&T' `troff -ms' macros. Documents that need
- to determine whether they are being formatted with `AT&T' `troff
- -ms' or `groff -ms' should use this number register.
-
-* Menu:
-
-* Missing ms Macros::
-* Additional ms Macros::
-
-
-File: groff, Node: Missing ms Macros, Next: Additional ms Macros, Prev: Differences from AT&T ms, Up: Differences from AT&T ms
-
-4.3.7.1 `troff' macros not appearing in `groff'
-...............................................
-
-Macros missing from `groff -ms' are cover page macros specific to Bell
-Labs and Berkeley. The macros known to be missing are:
-
-`.TM'
- Technical memorandum; a cover sheet style
-
-`.IM'
- Internal memorandum; a cover sheet style
-
-`.MR'
- Memo for record; a cover sheet style
-
-`.MF'
- Memo for file; a cover sheet style
-
-`.EG'
- Engineer's notes; a cover sheet style
-
-`.TR'
- Computing Science Tech Report; a cover sheet style
-
-`.OK'
- Other keywords
-
-`.CS'
- Cover sheet information
-
-`.MH'
- A cover sheet macro
-
-
-File: groff, Node: Additional ms Macros, Prev: Missing ms Macros, Up: Differences from AT&T ms
-
-4.3.7.2 `groff' macros not appearing in AT&T `troff'
-....................................................
-
-The `groff -ms' macros have a few minor extensions compared to the AT&T
-`troff -ms' macros.
-
- -- Macro: .AM
- Improved accent marks. *Note ms Strings and Special Characters::,
- for details.
-
- -- Macro: .DS I
- Indented display. The default behavior of AT&T `troff -ms' was to
- indent; the `groff' default prints displays flush left with the
- body text.
-
- -- Macro: .CW
- Print text in `constant width' (Courier) font.
-
- -- Macro: .IX
- Indexing term (printed on standard error). You can write a script
- to capture and process an index generated in this manner.
-
- The following additional number registers appear in `groff -ms':
-
- -- Register: \n[MINGW]
- Specifies a minimum space between columns (for multi-column
- output); this takes the place of the `GW' register that was
- documented but apparently not implemented in AT&T `troff'.
-
- Several new string registers are available as well. You can change
-these to handle (for example) the local language. *Note ms Strings and
-Special Characters::, for details.
-
-
-File: groff, Node: Naming Conventions, Prev: Differences from AT&T ms, Up: ms
-
-4.3.8 Naming Conventions
-------------------------
-
-The following conventions are used for names of macros, strings and
-number registers. External names available to documents that use the
-`groff -ms' macros contain only uppercase letters and digits.
-
- Internally the macros are divided into modules; naming conventions
-are as follows:
-
- * Names used only within one module are of the form MODULE`*'NAME.
-
- * Names used outside the module in which they are defined are of the
- form MODULE`@'NAME.
-
- * Names associated with a particular environment are of the form
- ENVIRONMENT`:'NAME; these are used only within the `par' module.
-
- * NAME does not have a module prefix.
-
- * Constructed names used to implement arrays are of the form
- ARRAY`!'INDEX.
-
- Thus the groff ms macros reserve the following names:
-
- * Names containing the characters `*', `@', and `:'.
-
- * Names containing only uppercase letters and digits.
-
-
-File: groff, Node: me, Next: mm, Prev: ms, Up: Macro Packages
-
-4.4 `me'
-========
-
-See the `meintro.me' and `meref.me' documents in groff's `doc'
-directory.
-
-
-File: groff, Node: mm, Prev: me, Up: Macro Packages
-
-4.5 `mm'
-========
-
-See the `groff_mm(7)' man page (type `man groff_mm' at the command
-line).
-
-
-File: groff, Node: gtroff Reference, Next: Preprocessors, Prev: Macro Packages, Up: Top
-
-5 `gtroff' Reference
-********************
-
-This chapter covers *all* of the facilities of `gtroff'. Users of
-macro packages may skip it if not interested in details.
-
-* Menu:
-
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-
-
-File: groff, Node: Text, Next: Measurements, Prev: gtroff Reference, Up: gtroff Reference
-
-5.1 Text
-========
-
-`gtroff' input files contain text with control commands interspersed
-throughout. But, even without control codes, `gtroff' still does
-several things with the input text:
-
- * filling and adjusting
-
- * adding additional space after sentences
-
- * hyphenating
-
- * inserting implicit line breaks
-
-* Menu:
-
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-
-
-File: groff, Node: Filling and Adjusting, Next: Hyphenation, Prev: Text, Up: Text
-
-5.1.1 Filling and Adjusting
----------------------------
-
-When `gtroff' reads text, it collects words from the input and fits as
-many of them together on one output line as it can. This is known as
-"filling".
-
- Once `gtroff' has a "filled" line, it tries to "adjust" it. This
-means it widens the spacing between words until the text reaches the
-right margin (in the default adjustment mode). Extra spaces between
-words are preserved, but spaces at the end of lines are ignored.
-Spaces at the front of a line cause a "break" (breaks are explained in
-*Note Implicit Line Breaks::).
-
- *Note Manipulating Filling and Adjusting::.
-
-
-File: groff, Node: Hyphenation, Next: Sentences, Prev: Filling and Adjusting, Up: Text
-
-5.1.2 Hyphenation
------------------
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, `gtroff' hyphenates words so that it
-can justify lines without inserting too much space between words. It
-uses an internal hyphenation algorithm (a simplified version of the
-algorithm used within TeX) to indicate which words can be hyphenated
-and how to do so. When a word is hyphenated, the first part of the
-word is added to the current filled line being output (with an attached
-hyphen), and the other portion is added to the next line to be filled.
-
- *Note Manipulating Hyphenation::.
-
-
-File: groff, Node: Sentences, Next: Tab Stops, Prev: Hyphenation, Up: Text
-
-5.1.3 Sentences
----------------
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks. For
-example, the `Chicago typsetting manual' says that a period at the end
-of a sentence should have twice as much space following it as would a
-comma or a period as part of an abbreviation.
-
- `gtroff' does this by flagging certain characters (normally `!',
-`?', and `.') as "end-of-sentence" characters. When `gtroff'
-encounters one of these characters at the end of a line, it appends a
-normal space followed by a "sentence space" in the formatted output.
-(This justifies one of the conventions mentioned in *Note Input
-Conventions::.)
-
- In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: `"', `'', `)',
-`]', `*', `\[dg]', and `\[rq]'.
-
- See the `cflags' request in *Note Using Symbols::, for more details.
-
- To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append `\&'.
-
-
-File: groff, Node: Tab Stops, Next: Implicit Line Breaks, Prev: Sentences, Up: Text
-
-5.1.4 Tab Stops
----------------
-
-`gtroff' translates "tabulator characters", also called "tabs"
-(normally code point ASCII `0x09' or EBCDIC `0x05'), in the input into
-movements to the next tabulator stop. These tab stops are initially
-located every half inch across the page. Using this, simple tables can
-be made easily. However, it can often be deceptive as the appearance
-(and width) of the text on a terminal and the results from `gtroff' can
-vary greatly.
-
- Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results. For
-example, the following input
-
- 1 2 3
- 4 5
-
-produces
-
- 1 2 3 4 5
-
- *Note Tabs and Fields::.
-
-
-File: groff, Node: Implicit Line Breaks, Next: Input Conventions, Prev: Tab Stops, Up: Text
-
-5.1.5 Implicit Line Breaks
---------------------------
-
-An important concept in `gtroff' is the "break". When a break occurs,
-`gtroff' outputs the partially filled line (unjustified), and resumes
-collecting and filling text on the next output line.
-
- There are several ways to cause a break in `gtroff'. A blank line
-not only causes a break, but it also outputs a one-line vertical space
-(effectively a blank line). Note that this behaviour can be modified
-with the blank line macro request `blm'. *Note Blank Line Traps::.
-
- A line that begins with a space causes a break and the space is
-output at the beginning of the next line. Note that this space isn't
-adjusted, even in fill mode.
-
- The end of file also causes a break - otherwise the last line of the
-document may vanish!
-
- Certain requests also cause breaks, implicitly or explicitly. This
-is discussed in *Note Manipulating Filling and Adjusting::.
-
-
-File: groff, Node: Input Conventions, Next: Input Encodings, Prev: Implicit Line Breaks, Up: Text
-
-5.1.6 Input Conventions
------------------------
-
-Since `gtroff' does filling automatically, it is traditional in `groff'
-not to try and type things in as nicely formatted paragraphs. These
-are some conventions commonly used when typing `gtroff' text:
-
- * Break lines after punctuation, particularly at the end of a
- sentence and in other logical places. Keep separate phrases on
- lines by themselves, as entire phrases are often added or deleted
- when editing.
-
- * Try to keep lines less than 40-60 characters, to allow space for
- inserting more text.
-
- * Do not try to do any formatting in a WYSIWYG manner (i.e., don't
- try using spaces to get proper indentation).
-
-
-File: groff, Node: Input Encodings, Prev: Input Conventions, Up: Text
-
-5.1.7 Input Encodings
----------------------
-
-Currently, the following input encodings are available.
-
-cp1047
- This input encoding works only on EBCDIC platforms (and vice
- versa, the other input encodings don't work with EBCDIC); the file
- `cp1047.tmac' is by default loaded at start-up.
-
-latin-1
- This is the default input encoding on non-EBCDIC platforms; the
- file `latin1.tmac' is loaded at start-up.
-
-latin-2
- To use this encoding, either say `.mso latin2.tmac' at the very
- beginning of your document or use `-mlatin2' as a command line
- argument for `groff'.
-
-latin-9 (latin-0)
- This encoding is intended (at least in Europe) to replace latin-1
- encoding. The main difference to latin-1 is that latin-9 contains
- the Euro character. To use this encoding, either say
- `.mso latin9.tmac' at the very beginning of your document or use
- `-mlatin9' as a command line argument for `groff'.
-
- Note that it can happen that some input encoding characters are not
-available for a particular output device. For example, saying
-
-
- groff -Tlatin1 -mlatin9 ...
-
-will fail if you use the Euro character in the input. Usually, this
-limitation is present only for devices which have a limited set of
-output glyphs (e.g. `-Tascii' and `-Tlatin1'); for other devices it is
-usually sufficient to install proper fonts which contain the necessary
-glyphs.
-
- Due to the importance of the Euro glyph in Europe, the groff package
-now comes with a POSTSCRIPT font called `freeeuro.pfa' which provides
-various glyph shapes for the Euro. With other words, latin-9 encoding
-is supported for the `-Tps' device out of the box (latin-2 isn't).
-
- By its very nature, `-Tutf8' supports all input encodings; `-Tdvi'
-has support for both latin-2 and latin-9 if the command line `-mec' is
-used also to load the file `ec.tmac' (which flips to the EC fonts).
-
-
-File: groff, Node: Measurements, Next: Expressions, Prev: Text, Up: gtroff Reference
-
-5.2 Measurements
-================
-
-`gtroff' (like many other programs) requires numeric parameters to
-specify various measurements. Most numeric parameters(1) (*note
-Measurements-Footnote-1::) may have a "measurement unit" attached.
-These units are specified as a single character which immediately
-follows the number or expression. Each of these units are understood,
-by `gtroff', to be a multiple of its "basic unit". So, whenever a
-different measurement unit is specified `gtroff' converts this into its
-"basic units". This basic unit, represented by a `u', is a device
-dependent measurement which is quite small, ranging from 1/75th to
-1/72000th of an inch. The values may be given as fractional numbers;
-however, fractional basic units are always rounded to integers.
-
- Some of the measurement units are completely independent of any of
-the current settings (e.g. type size) of `gtroff'.
-
-`i'
- Inches. An antiquated measurement unit still in use in certain
- backwards countries with incredibly low-cost computer equipment.
- One inch is equal to 2.54cm.
-
-`c'
- Centimeters. One centimeter is equal to 0.3937in.
-
-`p'
- Points. This is a typesetter's measurement used for measure type
- size. It is 72 points to an inch.
-
-`P'
- Pica. Another typesetting measurement. 6 Picas to an inch (and
- 12 points to a pica).
-
-`s'
-`z'
- *Note Fractional Type Sizes::, for a discussion of these units.
-
-`f'
- Fractions. Value is 65536. *Note Colors::, for usage.
-
- The other measurements understood by `gtroff' depend on settings
-currently in effect in `gtroff'. These are very useful for specifying
-measurements which should look proper with any size of text.
-
-`m'
- Ems. This unit is equal to the current font size in points. So
- called because it is _approximately_ the width of the letter `m'
- in the current font.
-
-`n'
- Ens. In `groff', this is half of an em.
-
-`v'
- Vertical space. This is equivalent to the current line spacing.
- *Note Sizes::, for more information about this.
-
-`M'
- 100ths of an em.
-
-* Menu:
-
-* Default Units::
-
-
-File: groff, Node: Measurements-Footnotes, Up: Measurements
-
- (1) those that specify vertical or horizontal motion or a type size
-
-
-File: groff, Node: Default Units, Prev: Measurements, Up: Measurements
-
-5.2.1 Default Units
--------------------
-
-Many requests take a default unit. While this can be helpful at times,
-it can cause strange errors in some expressions. For example, the line
-length request expects em units. Here are several attempts to get a
-line length of 3.5 inches and their results:
-
-
- 3.5i => 3.5i
- 7/2 => 0i
- 7/2i => 0i
- (7 / 2)u => 0i
- 7i/2 => 0.1i
- 7i/2u => 3.5i
-
-Everything is converted to basic units first. In the above example it
-is assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).
-The value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u
-which is 25u, and this is approximately 0.1i. As can be seen, a
-scaling indicator after a closing parenthesis is simply ignored.
-
- Thus, the safest way to specify measurements is to always attach a
-scaling indicator. If you want to multiply or divide by a certain
-scalar value, use `u' as the unit for that value.
-
-
-File: groff, Node: Expressions, Next: Identifiers, Prev: Measurements, Up: gtroff Reference
-
-5.3 Expressions
-===============
-
-`gtroff' has most arithmetic operators common to other languages:
-
- * Arithmetic: `+' (addition), `-' (subtraction), `/' (division), `*'
- (multiplication), `%' (modulo).
-
- `gtroff' only provides integer arithmetic. The internal type used
- for computing results is `int', which is usually a 32bit signed
- integer.
-
- * Comparison: `<' (less than), `>' (greater than), `<=' (less than
- or equal), `>=' (greater than or equal), `=' (equal), `==' (the
- same as `=').
-
- * Logical: `&' (logical and), `:' (logical or).
-
- * Unary operators: `-' (negating, i.e. changing the sign), `+' (just
- for completeness; does nothing in expressions), `!' (logical not;
- this works only within `if' and `while' requests). See below for
- the use of unary operators in motion requests.
-
- * Extrema: `>?' (maximum), `<?' (minimum).
-
- Example:
-
-
- .nr x 5
- .nr y 3
- .nr z (\n[x] >? \n[y])
-
- The register `z' now contains 5.
-
- * Scaling: `(C;E)'. Evaluate E using C as the default scaling
- indicator. If C is missing, ignore scaling indicators in the
- evaluation of E.
-
- Parentheses may be used as in any other language. However, in
-`gtroff' they are necessary to ensure order of evaluation. `gtroff'
-has no operator precedence; expressions are evaluated left to right.
-This means that `gtroff' evaluates `3+5*4' as if it were parenthesized
-like `(3+5)*4', not as `3+(5*4)', as might be expected.
-
- For many requests which cause a motion on the page, the unary
-operators `+' and `-' work differently if leading an expression. They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
- Similarly, a leading `|' operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the _input_ line.
-
- `+' and `-' are also treated differently by the following requests
-and escapes: `bp', `in', `ll', `lt', `nm', `nr', `pl', `pn', `po', `ps',
-`pvs', `rt', `ti', `\H', `\R', and `\s'. Here, leading plus and minus
-signs indicate increments and decrements.
-
- *Note Setting Registers::, for some examples.
-
- -- Escape: \B'anything'
- Return 1 if ANYTHING is a valid numeric expression; or 0 if
- ANYTHING is empty or not a valid numeric expression.
-
- Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
- *Note Request and Macro Arguments::, and *Note Conditionals and
-Loops::.
-
-
-File: groff, Node: Identifiers, Next: Embedded Commands, Prev: Expressions, Up: gtroff Reference
-
-5.4 Identifiers
-===============
-
-Like any other language, `gtroff' has rules for properly formed
-"identifiers". In `gtroff', an identifier can be made up of almost any
-printable character, with the exception of the following characters:
-
- * Whitespace characters (spaces, tabs, and newlines).
-
- * Backspace (ASCII `0x08' or EBCDIC `0x16') and character code
- `0x01'.
-
- * The following input characters are invalid and are ignored if
- `groff' runs on a machine based on ASCII, causing a warning
- message of type `input' (see *Note Debugging::, for more details):
- `0x00', `0x0B', `0x0D'-`0x1F', `0x80'-`0x9F'.
-
- And here are the invalid input characters if `groff' runs on an
- EBCDIC host: `0x00', `0x08', `0x09', `0x0B', `0x0D'-`0x14',
- `0x17'-`0x1F', `0x30'-`0x3F'.
-
- Currently, some of these reserved codepoints are used internally,
- thus making it non-trivial to extend `gtroff' to cover Unicode or
- other character sets and encodings which use characters of these
- ranges.
-
- Note that invalid characters are removed before parsing; an
- identifier `foo', followed by an invalid character, followed by
- `bar' is treated as `foobar'.
-
- For example, any of the following is valid.
-
-
- br
- PP
- (l
- end-list
- @_
-
-Note that identifiers longer than two characters with a closing bracket
-(`]') in its name can't be accessed with escape sequences which expect
-an identifier as a parameter. For example, `\[foo]]' accesses the
-glyph `foo', followed by `]', whereas `\C'foo]'' really asks for glyph
-`foo]'.
-
- To avoid problems with the `refer' preprocessor, macro names should
-not start with `[' or `]'. Due to backwards compatibility, everything
-after `.[' and `.]' is handled as a special argument to `refer'. For
-example, `.[foo' makes `refer' to start a reference, using `foo' as a
-parameter.
-
- -- Escape: \A'ident'
- Test whether an identifier IDENT is valid in `gtroff'. It expands
- to the character 1 or 0 according to whether its argument (usually
- delimited by quotes) is or is not acceptable as the name of a
- string, macro, diversion, number register, environment, or font.
- It returns 0 if no argument is given. This is useful for looking
- up user input in some sort of associative table.
-
-
- \A'end-list'
- => 1
-
-
- *Note Escapes::, for details on parameter delimiting characters.
-
- Identifiers in `gtroff' can be any length, but, in some contexts,
-`gtroff' needs to be told where identifiers end and text begins (and in
-different ways depending on their length):
-
- * Single character.
-
- * Two characters. Must be prefixed with `(' in some situations.
-
- * Arbitrary length (`gtroff' only). Must be bracketed with `['
- and `]' in some situations. Any length identifier can be put in
- brackets.
-
- Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing. When `gtroff' finds an
-undefined identifier, it emits a warning, doing the following:
-
- * If the identifier is a string, macro, or diversion, `gtroff'
- defines it as empty.
-
- * If the identifier is a number register, `gtroff' defines it with a
- value of 0.
-
- *Note Warnings::., *Note Interpolating Registers::, and *Note
-Strings::.
-
- Note that macros, strings, and diversions share the same name space.
-
-
- .de xxx
- . nop foo
- ..
- .
- .di xxx
- bar
- .br
- .di
- .
- .xxx
- => bar
-
-As can be seen in the previous example, `gtroff' reuses the identifier
-`xxx', changing it from a macro to a diversion. No warning is emitted!
-The contents of the first macro definition is lost.
-
- *Note Interpolating Registers::, and *Note Strings::.
-
-
-File: groff, Node: Embedded Commands, Next: Registers, Prev: Identifiers, Up: gtroff Reference
-
-5.5 Embedded Commands
-=====================
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking. In order to gain further functionality,
-`gtroff' allows commands to be embedded into the text, in two ways.
-
- The first is a "request" which takes up an entire line, and does
-some large-scale operation (e.g. break lines, start new pages).
-
- The other is an "escape" which can be usually embedded anywhere in
-the text; most requests can accept it even as an argument. Escapes
-generally do more minor operations like sub- and superscripts, print a
-symbol, etc.
-
-* Menu:
-
-* Requests::
-* Macros::
-* Escapes::
-
-
-File: groff, Node: Requests, Next: Macros, Prev: Embedded Commands, Up: Embedded Commands
-
-5.5.1 Requests
---------------
-
-A request line begins with a control character, which is either a single
-quote (`'', the "no-break control character") or a period (`.', the
-normal "control character"). These can be changed; see *Note Character
-Translations::, for details. After this there may be optional tabs or
-spaces followed by an identifier which is the name of the request.
-This may be followed by any number of space-separated arguments (_no_
-tabs here).
-
- Since a control character followed by whitespace only is ignored, it
-is common practice to use this feature for structuring the source code
-of documents or macro packages.
-
-
- .de foo
- . tm This is foo.
- ..
- .
- .
- .de bar
- . tm This is bar.
- ..
-
- Another possibility is to use the blank line macro request `blm' by
-assigning an empty macro to it.
-
-
- .de do-nothing
- ..
- .blm do-nothing \" activate blank line macro
-
- .de foo
- . tm This is foo.
- ..
-
-
- .de bar
- . tm This is bar.
- ..
-
- .blm \" deactivate blank line macro
-
- *Note Blank Line Traps::.
-
- To begin a line with a control character without it being
-interpreted, precede it with `\&'. This represents a zero width space,
-which means it does not affect the output.
-
- In most cases the period is used as a control character. Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
-* Menu:
-
-* Request and Macro Arguments::
-
-
-File: groff, Node: Request and Macro Arguments, Prev: Requests, Up: Requests
-
-5.5.1.1 Request and Macro Arguments
-...................................
-
-Arguments to requests and macros are processed much like the shell: The
-line is split into arguments according to spaces.(1) (*note Request and
-Macro Arguments-Footnote-1::)
-
- An argument to a macro which is intended to contain spaces can
-either be enclosed in double quotes, or have the spaces "escaped" with
-backslashes. This is _not_ true for requests.
-
- Here are a few examples for a hypothetical macro `uh':
-
-
- .uh The Mouse Problem
- .uh "The Mouse Problem"
- .uh The\ Mouse\ Problem
-
-The first line is the `uh' macro being called with 3 arguments, `The',
-`Mouse', and `Problem'. The latter two have the same effect of calling
-the `uh' macro with one argument, `The Mouse Problem'.(2) (*note
-Request and Macro Arguments-Footnote-2::)
-
- A double quote which isn't preceded by a space doesn't start a macro
-argument. If not closing a string, it is printed literally.
-
- For example,
-
-
- .xxx a" "b c" "de"fg"
-
-has the arguments `a"', `b c', `de', and `fg"'. Don't rely on this
-obscure behaviour!
-
- There are two possibilities to get a double quote reliably.
-
- * Enclose the whole argument with double quotes and use two
- consecutive double quotes to represent a single one. This
- traditional solution has the disadvantage that double quotes don't
- survive argument expansion again if called in compatibility mode
- (using the `-C' option of `groff'):
-
-
- .de xx
- . tm xx: `\\$1' `\\$2' `\\$3'
- .
- . yy "\\$1" "\\$2" "\\$3"
- ..
- .de yy
- . tm yy: `\\$1' `\\$2' `\\$3'
- ..
- .xx A "test with ""quotes""" .
- => xx: `A' `test with "quotes"' `.'
- => yy: `A' `test with ' `quotes""'
-
- If not in compatibility mode, you get the expected result
-
-
- xx: `A' `test with "quotes"' `.'
- yy: `A' `test with "quotes"' `.'
-
- since `gtroff' preserves the input level.
-
- * Use the double quote glyph `\(dq'. This works with and without
- compatibility mode enabled since `gtroff' doesn't convert `\(dq'
- back to a double quote input character.
-
- Not that this method won't work with UNIX `troff' in general since
- the glyph `dq' isn't defined normally.
-
- Double quotes in the `ds' request are handled differently. *Note
-Strings::, for more details.
-
-
-File: groff, Node: Request and Macro Arguments-Footnotes, Up: Request and Macro Arguments
-
- (1) Plan 9's `troff' implementation also allows tabs for argument
-separation - `gtroff' intentionally doesn't support this.
-
- (2) The last solution, i.e., using escaped spaces, is "classical" in
-the sense that it can be found in most `troff' documents.
-Nevertheless, it is not optimal in all situations, since `\ ' inserts a
-fixed-width, non-breaking space character which can't stretch.
-`gtroff' provides a different command `\~' to insert a stretchable,
-non-breaking space.
-
-
-File: groff, Node: Macros, Next: Escapes, Prev: Requests, Up: Embedded Commands
-
-5.5.2 Macros
-------------
-
-`gtroff' has a "macro" facility for defining a series of lines which
-can be invoked by name. They are called in the same manner as requests
-- arguments also may be passed basically in the same manner.
-
- *Note Writing Macros::, and *Note Request and Macro Arguments::.
-
-
-File: groff, Node: Escapes, Prev: Macros, Up: Embedded Commands
-
-5.5.3 Escapes
--------------
-
-Escapes may occur anywhere in the input to `gtroff'. They usually
-begin with a backslash and are followed by a single character which
-indicates the function to be performed. The escape character can be
-changed; see *Note Character Translations::.
-
- Escape sequences which require an identifier as a parameter accept
-three possible syntax forms.
-
- * The next single character is the identifier.
-
- * If this single character is an opening parenthesis, take the
- following two characters as the identifier. Note that there is no
- closing parenthesis after the identifier.
-
- * If this single character is an opening bracket, take all characters
- until a closing bracket as the identifier.
-
-Examples:
-
-
- \fB
- \n(XX
- \*[TeX]
-
- Other escapes may require several arguments and/or some special
-format. In such cases the argument is traditionally enclosed in single
-quotes (and quotes are always used in this manual for the definitions
-of escape sequences). The enclosed text is then processed according to
-what that escape expects. Example:
-
-
- \l'1.5i\(bu'
-
- Note that the quote character can be replaced with any other
-character which does not occur in the argument (even a newline or a
-space character) in the following escapes: `\o', `\b', and `\X'. This
-makes e.g.
-
-
- A caf
- \o
- e\'
-
-
- in Paris
- => A café in Paris
-
-possible, but it is better not to use this feature to avoid confusion.
-
- The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: `\%', `\ ', `\|', `\^', `\{', `\}', `\'', `\`', `\-', `\_',
-`\!', `\?', `\@', `\)', `\/', `\,', `\&', `\:', `\~', `\0', `\a', `\c',
-`\d', `\e', `\E', `\p', `\r', `\t', and `\u'. Again, don't use these
-if possible.
-
- No newline characters as delimiters are allowed in the following
-escapes: `\A', `\B', `\Z', `\C', and `\w'.
-
- Finally, the escapes `\D', `\h', `\H', `\l', `\L', `\N', `\R', `\s',
-`\S', `\v', and `\x' can't use the following characters as delimiters:
-
- * The digits `0'-`9'.
-
- * The (single-character) operators `+-/*%<>=&:().'.
-
- * The space, tab, and newline characters.
-
- * All escape sequences except `\%', `\:', `\{', `\}', `\'', `\`',
- `\-', `\_', `\!', `\@', `\/', `\c', `\e', and `\p'.
-
- To have a backslash (actually, the current escape character) appear
-in the output several escapes are defined: `\\', `\e' or `\E'. These
-are very similar, and only differ with respect to being used in macros
-or diversions. *Note Character Translations::, for an exact
-description of those escapes.
-
- *Note Implementation Differences::, *Note Copy-in Mode::, and *Note
-Diversions::, *Note Identifiers::, for more information.
-
-* Menu:
-
-* Comments::
-
-
-File: groff, Node: Comments, Prev: Escapes, Up: Escapes
-
-5.5.3.1 Comments
-................
-
-Probably one of the most(1) (*note Comments-Footnote-1::) common forms
-of escapes is the comment.
-
- -- Escape: \"
- Start a comment. Everything to the end of the input line is
- ignored.
-
- This may sound simple, but it can be tricky to keep the comments
- from interfering with the appearance of the final output.
-
- If the escape is to the right of some text or a request, that
- portion of the line is ignored, but the space leading up to it is
- noticed by `gtroff'. This only affects the `ds' and `as' request
- and its variants.
-
- One possibly irritating idiosyncracy is that tabs must not be used
- to line up comments. Tabs are not treated as whitespace between
- the request and macro arguments.
-
- A comment on a line by itself is treated as a blank line, because
- after eliminating the comment, that is all that remains:
-
-
- Test
- \" comment
- Test
-
- produces
-
-
- Test
-
- Test
-
- To avoid this, it is common to start the line with `.\"' which
- causes the line to be treated as an undefined request and thus
- ignored completely.
-
- Another commenting scheme seen sometimes is three consecutive
- single quotes (`'''') at the beginning of a line. This works, but
- `gtroff' gives a warning about an undefined macro (namely `'''),
- which is harmless, but irritating.
-
- -- Escape: \#
- To avoid all this, `gtroff' has a new comment mechanism using the
- `\#' escape. This escape works the same as `\"' except that the
- newline is also ignored:
-
-
- Test
- \# comment
- Test
-
- produces
-
-
- Test Test
-
- as expected.
-
- -- Request: .ig [end]
- Ignore all input until `gtroff' encounters the macro named `.'END
- on a line by itself (or `..' if END is not specified). This is
- useful for commenting out large blocks of text:
-
-
- text text text...
- .ig
- This is part of a large block
- of text that has been
- temporarily(?) commented out.
-
- We can restore it simply by removing
- the .ig request and the ".." at the
- end of the block.
- ..
- More text text text...
-
- produces
-
-
- text text text... More text text text...
-
- Note that the commented-out block of text does not cause a break.
-
- The input is read in copy-mode; auto-incremented registers _are_
- affected (*note Auto-increment::).
-
-
-File: groff, Node: Comments-Footnotes, Up: Comments
-
- (1) Unfortunately, this is a lie. But hopefully future `gtroff'
-hackers will believe it `:-)'
-
-
-File: groff, Node: Registers, Next: Manipulating Filling and Adjusting, Prev: Embedded Commands, Up: gtroff Reference
-
-5.6 Registers
-=============
-
-Numeric variables in `gtroff' are called "registers". There are a
-number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
- *Note Identifiers::, for details on register identifiers.
-
-* Menu:
-
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-
-
-File: groff, Node: Setting Registers, Next: Interpolating Registers, Prev: Registers, Up: Registers
-
-5.6.1 Setting Registers
------------------------
-
-Define or set registers using the `nr' request or the `\R' escape.
-
- -- Request: .nr ident value
- -- Escape: \R'ident value'
- Set number register IDENT to VALUE. If IDENT doesn't exist,
- `gtroff' creates it.
-
- The argument to `\R' usually has to be enclosed in quotes. *Note
- Escapes::, for details on parameter delimiting characters.
-
- The `\R' escape doesn't produce an input token in `gtroff'; with
- other words, it vanishes completely after `gtroff' has processed
- it.
-
- For example, the following two lines are equivalent:
-
-
- .nr a (((17 + (3 * 4))) % 4)
- \R'a (((17 + (3 * 4))) % 4)'
- => 1
-
- Both `nr' and `\R' have two additional special forms to increment or
-decrement a register.
-
- -- Request: .nr ident +value
- -- Request: .nr ident -value
- -- Escape: \R'ident +value'
- -- Escape: \R'ident -value'
- Increment (decrement) register IDENT by VALUE.
-
-
- .nr a 1
- .nr a +1
- \na
- => 2
-
- To assign the negated value of a register to another register,
- some care must be taken to get the desired result:
-
-
- .nr a 7
- .nr b 3
- .nr a -\nb
- \na
- => 4
- .nr a (-\nb)
- \na
- => -3
-
- The surrounding parentheses prevent the interpretation of the
- minus sign as a decrementing operator. An alternative is to start
- the assignment with a `0':
-
-
- .nr a 7
- .nr b -3
- .nr a \nb
- \na
- => 4
- .nr a 0\nb
- \na
- => -3
-
-
- -- Request: .rr ident
- Remove number register IDENT. If IDENT doesn't exist, the request
- is ignored.
-
- -- Request: .rnn ident1 ident2
- Rename number register IDENT1 to IDENT2. If either IDENT1 or
- IDENT2 doesn't exist, the request is ignored.
-
- -- Request: .aln ident1 ident2
- Create an alias IDENT1 for a number register IDENT2. The new name
- and the old name are exactly equivalent. If IDENT1 is undefined,
- a warning of type `reg' is generated, and the request is ignored.
- *Note Debugging::, for information about warnings.
-
-
-File: groff, Node: Interpolating Registers, Next: Auto-increment, Prev: Setting Registers, Up: Registers
-
-5.6.2 Interpolating Registers
------------------------------
-
-Numeric registers can be accessed via the `\n' escape.
-
- -- Escape: \ni
- -- Escape: \n(id
- -- Escape: \n[ident]
- Interpolate number register with name IDENT (one-character name I,
- two-character name ID). This means that the value of the register
- is expanded in-place while `gtroff' is parsing the input line.
- Nested assignments (also called indirect assignments) are possible.
-
-
- .nr a 5
- .nr as \na+\na
- \n(as
- => 10
-
-
- .nr a1 5
- .nr ab 6
- .ds str b
- .ds num 1
- \n[a\n[num]]
- => 5
- \n[a\*[str]]
- => 6
-
-
-
-File: groff, Node: Auto-increment, Next: Assigning Formats, Prev: Interpolating Registers, Up: Registers
-
-5.6.3 Auto-increment
---------------------
-
-Number registers can also be auto-incremented and auto-decremented.
-The increment or decrement value can be specified with a third argument
-to the `nr' request or `\R' escape.
-
- -- Request: .nr ident value incr
- Set number register IDENT to VALUE; the increment for
- auto-incrementing is set to INCR. Note that the `\R' escape
- doesn't support this notation.
-
- To activate auto-incrementing, the escape `\n' has a special syntax
-form.
-
- -- Escape: \n+i
- -- Escape: \n-i
- -- Escape: \n(+id
- -- Escape: \n(-id
- -- Escape: \n+(id
- -- Escape: \n-(id
- -- Escape: \n[+ident]
- -- Escape: \n[-ident]
- -- Escape: \n+[ident]
- -- Escape: \n-[ident]
- Before interpolating, increment or decrement IDENT (one-character
- name I, two-character name ID) by the auto-increment value as
- specified with the `nr' request (or the `\R' escape). If no
- auto-increment value has been specified, these syntax forms are
- identical to `\n'.
-
- For example,
-
-
- .nr a 0 1
- .nr xx 0 5
- .nr foo 0 -2
- \n+a, \n+a, \n+a, \n+a, \n+a
- .br
- \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
- .br
- \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-
-produces
-
-
- 1, 2, 3, 4, 5
- -5, -10, -15, -20, -25
- -2, -4, -6, -8, -10
-
- To change the increment value without changing the value of a
-register (A in the example), the following can be used:
-
-
- .nr a \na 10
-
-
-File: groff, Node: Assigning Formats, Next: Built-in Registers, Prev: Auto-increment, Up: Registers
-
-5.6.4 Assigning Formats
------------------------
-
-When a register is used in the text of an input file (as opposed to
-part of an expression), it is textually replaced (or interpolated) with
-a representation of that number. This output format can be changed to
-a variety of formats (numbers, Roman numerals, etc.). This is done
-using the `af' request.
-
- -- Request: .af ident format
- Change the output format of a number register. The first argument
- IDENT is the name of the number register to be changed, and the
- second argument FORMAT is the output format. The following output
- formats are available:
-
- `1'
- Decimal arabic numbers. This is the default format: 0, 1, 2,
- 3, ....
-
- `0...0'
- Decimal numbers with as many digits as specified. So, `00'
- would result in printing numbers as 01, 02, 03, ....
-
- In fact, any digit instead of zero will do; `gtroff' only
- counts how many digits are specified. As a consequence,
- `af''s default format `1' could be specified as `0' also (and
- exactly this is returned by the `\g' escape, see below).
-
- `I'
- Upper-case Roman numerals: 0, I, II, III, IV, ....
-
- `i'
- Lower-case Roman numerals: 0, i, ii, iii, iv, ....
-
- `A'
- Upper-case letters: 0, A, B, C, ..., Z, AA, AB, ....
-
- `a'
- Lower-case letters: 0, a, b, c, ..., z, aa, ab, ....
-
- Omitting the number register format causes a warning of type
- `missing'. *Note Debugging::, for more details. Specifying a
- nonexistent format causes an error.
-
- The following example produces `10, X, j, 010':
-
-
- .nr a 10
- .af a 1 \" the default format
- \na,
- .af a I
- \na,
- .af a a
- \na,
- .af a 001
- \na
-
- The largest number representable for the `i' and `I' formats is
- 39999 (or -39999); UNIX `troff' uses `z' and `w' to represent
- 10000 and 5000 in Roman numerals, and so does `gtroff'.
- Currently, the correct glyphs of Roman numeral five thousand and
- Roman numeral ten thousand (Unicode code points `U+2182' and
- `U+2181', respectively) are not available.
-
- If IDENT doesn't exist, it is created.
-
- Changing the output format of a read-only register causes an
- error. It is necessary to first copy the register's value to a
- writeable register, then apply the `af' request to this other
- register.
-
- -- Escape: \gi
- -- Escape: \g(id
- -- Escape: \g[ident]
- Return the current format of the specified register IDENT
- (one-character name I, two-character name ID). For example, `\ga'
- after the previous example would produce the string `000'. If the
- register hasn't been defined yet, nothing is returned.
-
-
-File: groff, Node: Built-in Registers, Prev: Assigning Formats, Up: Registers
-
-5.6.5 Built-in Registers
-------------------------
-
-The following lists some built-in registers which are not described
-elsewhere in this manual. Any register which begins with a `.' is
-read-only. A complete listing of all built-in registers can be found in
-*Note Register Index::.
-
-`\n[.F]'
- This string-valued register returns the current input file name.
-
-`\n[.H]'
- Horizontal resolution in basic units.
-
-`\n[.U]'
- If `gtroff' is called with the `-U' command line option, the
- number register `.U' is set to 1, and zero otherwise. *Note Groff
- Options::.
-
-`\n[.V]'
- Vertical resolution in basic units.
-
-`\n[seconds]'
- The number of seconds after the minute, normally in the range 0
- to 59, but can be up to 61 to allow for leap seconds. Initialized
- at start-up of `gtroff'.
-
-`\n[minutes]'
- The number of minutes after the hour, in the range 0 to 59.
- Initialized at start-up of `gtroff'.
-
-`\n[hours]'
- The number of hours past midnight, in the range 0 to 23.
- Initialized at start-up of `gtroff'.
-
-`\n[dw]'
- Day of the week (1-7).
-
-`\n[dy]'
- Day of the month (1-31).
-
-`\n[mo]'
- Current month (1-12).
-
-`\n[year]'
- The current year.
-
-`\n[yr]'
- The current year minus 1900. Unfortunately, the documentation of
- UNIX Version 7's `troff' had a year 2000 bug: It incorrectly
- claimed that `yr' contains the last two digits of the year. That
- claim has never been true of either AT&T `troff' or GNU `troff'.
- Old `troff' input that looks like this:
-
-
- '\" The following line stopped working after 1999
- This document was formatted in 19\n(yr.
-
- can be corrected as follows:
-
-
- This document was formatted in \n[year].
-
- or, to be portable to older `troff' versions, as follows:
-
-
- .nr y4 1900+\n(yr
- This document was formatted in \n(y4.
-
-`\n[.c]'
-`\n[c.]'
- The current _input_ line number. Register `.c' is read-only,
- whereas `c.' (a `gtroff' extension) is writable also, affecting
- both `.c' and `c.'.
-
-`\n[ln]'
- The current _output_ line number after a call to the `nm' request
- to activate line numbering.
-
- *Note Miscellaneous::, for more information about line numbering.
-
-`\n[.x]'
- The major version number. For example, if the version number is
- 1.03 then `.x' contains `1'.
-
-`\n[.y]'
- The minor version number. For example, if the version number is
- 1.03 then `.y' contains `03'.
-
-`\n[.Y]'
- The revision number of `groff'.
-
-`\n[$$]'
- The process ID of `gtroff'.
-
-`\n[.g]'
- Always 1. Macros should use this to determine whether they are
- running under GNU `troff'.
-
-`\n[.A]'
- If the command line option `-a' is used to produce an ASCII
- approximation of the output, this is set to 1, zero otherwise.
- *Note Groff Options::.
-
-`\n[.P]'
- This register is set to 1 (and to 0 otherwise) if the current page
- is actually being printed, i.e., if the `-o' option is being used
- to only print selected pages. *Note Groff Options::, for more
- information.
-
-`\n[.T]'
- If `gtroff' is called with the `-T' command line option, the
- number register `.T' is set to 1, and zero otherwise. *Note Groff
- Options::.
-
-`\*[.T]'
- A single read-write string register which contains the current
- output device (for example, `latin1' or `ps'). This is the only
- string register defined by `gtroff'.
-
-
-File: groff, Node: Manipulating Filling and Adjusting, Next: Manipulating Hyphenation, Prev: Registers, Up: gtroff Reference
-
-5.7 Manipulating Filling and Adjusting
-======================================
-
-Various ways of causing "breaks" were given in *Note Implicit Line
-Breaks::. The `br' request likewise causes a break. Several other
-requests also cause breaks, but implicitly. These are `bp', `ce',
-`cf', `fi', `fl', `in', `nf', `rj', `sp', `ti', and `trf'.
-
- -- Request: .br
- Break the current line, i.e., the input collected so far is emitted
- without adjustment.
-
- If the no-break control character is used, `gtroff' suppresses the
- break:
-
-
- a
- 'br
- b
- => a b
-
-
- Initially, `gtroff' fills and adjusts text to both margins. Filling
-can be disabled via the `nf' request and re-enabled with the `fi'
-request.
-
- -- Request: .fi
- -- Register: \n[.u]
- Activate fill mode (which is the default). This request implicitly
- enables adjusting; it also inserts a break in the text currently
- being filled. The read-only number register `.u' is set to 1.
-
- The fill mode status is associated with the current environment
- (*note Environments::).
-
- See *Note Line Control::, for interaction with the `\c' escape.
-
- -- Request: .nf
- Activate no-fill mode. Input lines are output as-is, retaining
- line breaks and ignoring the current line length. This command
- implicitly disables adjusting; it also causes a break. The number
- register `.u' is set to 0.
-
- The fill mode status is associated with the current environment
- (*note Environments::).
-
- See *Note Line Control::, for interaction with the `\c' escape.
-
- -- Request: .ad [mode]
- -- Register: \n[.j]
- Set adjusting mode.
-
- Activation and deactivation of adjusting is done implicitly with
- calls to the `fi' or `nf' requests.
-
- MODE can have one of the following values:
-
- `l'
- Adjust text to the left margin. This produces what is
- traditionally called ragged-right text.
-
- `r'
- Adjust text to the right margin, producing ragged-left text.
-
- `c'
- Center filled text. This is different to the `ce' request
- which only centers text without filling.
-
- `b'
- `n'
- Justify to both margins. This is the default used by
- `gtroff'.
-
- Finally, MODE can be the numeric argument returned by the `.j'
- register.
-
- With no argument, `gtroff' adjusts lines in the same way it did
- before adjusting was deactivated (with a call to `na', for
- example).
-
-
- text
- .ad r
- .nr ad \n[.j]
- text
- .ad c
- text
- .na
- text
- .ad \" back to centering
- text
- .ad \n[ad] \" back to right justifying
-
- The current adjustment mode is available in the read-only number
- register `.j'; it can be stored and subsequently used to set
- adjustment.
-
- The adjustment mode status is associated with the current
- environment (*note Environments::).
-
- -- Request: .na
- Disable adjusting. This request won't change the current
- adjustment mode: A subsequent call to `ad' uses the previous
- adjustment setting.
-
- The adjustment mode status is associated with the current
- environment (*note Environments::).
-
- -- Request: .brp
- -- Escape: \p
- Adjust the current line and cause a break.
-
- In most cases this produces very ugly results since `gtroff'
- doesn't have a sophisticated paragraph building algorithm (as TeX
- have, for example); instead, `gtroff' fills and adjusts a paragraph
- line by line:
-
-
- This is an uninteresting sentence.
- This is an uninteresting sentence.\p
- This is an uninteresting sentence.
-
- is formatted as
-
-
- This is an uninteresting sentence. This is an
- uninteresting sentence.
- This is an uninteresting sentence.
-
-
- -- Request: .ss word_space_size [sentence_space_size]
- -- Register: \n[.ss]
- -- Register: \n[.sss]
- Change the size of a space between words. It takes its units as
- one twelfth of the space width parameter for the current font.
- Initially both the WORD_SPACE_SIZE and SENTENCE_SPACE_SIZE are 12.
- In fill mode, the values specify the minimum distance.
-
- If two arguments are given to the `ss' request, the second
- argument sets the sentence space size. If the second argument is
- not given, sentence space size is set to WORD_SPACE_SIZE. The
- sentence space size is used in two circumstances: If the end of a
- sentence occurs at the end of a line in fill mode, then both an
- inter-word space and a sentence space are added; if two spaces
- follow the end of a sentence in the middle of a line, then the
- second space is a sentence space. If a second argument is never
- given to the `ss' request, the behaviour of UNIX `troff' is the
- same as that exhibited by GNU `troff'. In GNU `troff', as in UNIX
- `troff', a sentence should always be followed by either a newline
- or two spaces.
-
- The read-only number registers `.ss' and `.sss' hold the values of
- the parameters set by the first and second arguments of the `ss'
- request.
-
- The word space and sentence space values are associated with the
- current environment (*note Environments::).
-
- Contrary to AT&T `troff', this request is _not_ ignored if a TTY
- output device is used; the given values are then rounded down to a
- multiple of 12 (*note Implementation Differences::).
-
- The request is ignored if there is no parameter.
-
- Another useful application of the `ss' request is to insert
- discardable horizontal space, i.e., space which is discarded at a
- line break. For example, paragraph-style footnotes could be
- separated this way:
-
-
- .ll 4.5i
- 1.\ This is the first footnote.\c
- .ss 48
- .nop
- .ss 12
- 2.\ This is the second footnote.
-
- The result:
-
-
- 1. This is the first footnote. 2. This
- is the second footnote.
-
- Note that the `\h' escape produces unbreakable space.
-
- -- Request: .ce [nnn]
- -- Register: \n[.ce]
- Center text. While the `.ad c' request also centers text, it
- fills the text as well. `ce' does not fill the text it affects.
- This request causes a break. The number of lines still to be
- centered is associated with the current environment (*note
- Environments::).
-
- The following example demonstrates the differences. Here the
- input:
-
-
- .ll 4i
- .ce 1000
- This is a small text fragment which shows the differences
- between the `.ce' and the `.ad c' request.
- .ce 0
-
- .ad c
- This is a small text fragment which shows the differences
- between the `.ce' and the `.ad c' request.
-
- And here the result:
-
-
- This is a small text fragment which
- shows the differences
- between the `.ce' and the `.ad c' request.
-
- This is a small text fragment which
- shows the differences between the `.ce'
- and the `.ad c' request.
-
- With no arguments, `ce' centers the next line of text. NNN
- specifies the number of lines to be centered. If the argument is
- zero or negative, centering is disabled.
-
- The basic length for centering text is the line length (as set
- with the `ll' request) minus the indentation (as set with the `in'
- request). Temporary indentation is ignored.
-
- As can be seen in the previous example, it is a common idiom to
- turn on centering for a large number of lines, and to turn off
- centering after text to be centered. This is useful for any
- request which takes a number of lines as an argument.
-
- The `.ce' read-only number register contains the number of lines
- remaining to be centered, as set by the `ce' request.
-
- -- Request: .rj [nnn]
- -- Register: \n[.rj]
- Justify unfilled text to the right margin. Arguments are
- identical to the `ce' request. The `.rj' read-only number
- register is the number of lines to be right-justified as set by
- the `rj' request. This request causes a break. The number of
- lines still to be right-justified is associated with the current
- environment (*note Environments::).
-
-
-File: groff, Node: Manipulating Hyphenation, Next: Manipulating Spacing, Prev: Manipulating Filling and Adjusting, Up: gtroff Reference
-
-5.8 Manipulating Hyphenation
-============================
-
-Here a description of requests which influence hyphenation.
-
- -- Request: .hy [mode]
- -- Register: \n[.hy]
- Enable hyphenation. The request has an optional numeric argument,
- MODE, to restrict hyphenation if necessary:
-
- `1'
- The default argument if MODE is omitted. Hyphenate without
- restrictions. This is also the start-up value of `gtroff'.
-
- `2'
- Do not hyphenate the last word on a page or column.
-
- `4'
- Do not hyphenate the last two characters of a word.
-
- `8'
- Do not hyphenate the first two characters of a word.
-
- Values in the previous table are additive. For example, the
- value 12 causes `gtroff' to neither hyphenate the last two nor the
- first two characters of a word.
-
- The current hyphenation restrictions can be found in the read-only
- number register `.hy'.
-
- The hyphenation mode is associated with the current environment
- (*note Environments::).
-
- -- Request: .nh
- Disable hyphenation (i.e., set the hyphenation mode to zero). Note
- that the hyphenation mode of the last call to `hy' is not
- remembered.
-
- The hyphenation mode is associated with the current environment
- (*note Environments::).
-
- -- Request: .hlm [nnn]
- -- Register: \n[.hlm]
- -- Register: \n[.hlc]
- Set the maximum number of consecutive hyphenated lines to NNN. If
- this number is negative, there is no maximum. The default value
- is -1 if NNN is omitted. This value is associated with the
- current environment (*note Environments::). Only lines output
- from a given environment count towards the maximum associated with
- that environment. Hyphens resulting from `\%' are counted;
- explicit hyphens are not.
-
- The current setting of `hlm' is available in the `.hlm' read-only
- number register. Also the number of immediately preceding
- consecutive hyphenated lines are available in the read-only number
- register `.hlc'.
-
- -- Request: .hw word1 word2 ...
- Define how WORD1, WORD2, etc. are to be hyphenated. The words
- must be given with hyphens at the hyphenation points. For example:
-
-
- .hw in-sa-lub-rious
-
- Besides the space character, any character whose hyphenation code
- value is zero can be used to separate the arguments of `hw' (see
- the documentation for the `hcode' request below for more
- information). In addition, this request can be used more than
- once.
-
- Hyphenation exceptions specified with the `hw' request are
- associated with the current hyphenation language; it causes an
- error if there is no current hyphenation language.
-
- This request is ignored if there is no parameter.
-
- In old versions of `troff' there was a limited amount of space to
- store such information; fortunately, with `gtroff', this is no
- longer a restriction.
-
- -- Escape: \%
- -- Escape: \:
- To tell `gtroff' how to hyphenate words on the fly, use the `\%'
- escape, also known as the "hyphenation character". Preceding a
- word with this character prevents it from being hyphenated;
- putting it inside a word indicates to `gtroff' that the word may
- be hyphenated at that point. Note that this mechanism only
- affects that one occurrence of the word; to change the hyphenation
- of a word for the entire document, use the `hw' request.
-
- The `\:' escape inserts a zero-width break point (that is, the
- word breaks but without adding a hyphen).
-
-
- ... check the /var/log/\:httpd/\:access_log file ...
-
- Note that `\X' and `\Y' start a word, that is, the `\%' escape in
- (say) `\X'...'\%foobar' and `\Y'...'\%foobar' no longer prevents
- hyphenation but inserts a hyphenation point at the beginning of
- `foobar'; most likely this isn't what you want to do.
-
- -- Request: .hc [char]
- Change the hyphenation character to CHAR. This character then
- works the same as the `\%' escape, and thus, no longer appears in
- the output. Without an argument, `hc' resets the hyphenation
- character to be `\%' (the default) only.
-
- The hyphenation character is associated with the current
- environment (*note Environments::).
-
- -- Request: .hpf pattern_file
- -- Request: .hpfa pattern_file
- -- Request: .hpfcode a b [c d ...]
- Read in a file of hyphenation patterns. This file is searched for
- in the same way as `NAME.tmac' (or `tmac.NAME') is searched for if
- the `-mNAME' option is specified.
-
- It should have the same format as (simple) TeX patterns files.
- More specifically, the following scanning rules are implemented.
-
- * A percent sign starts a comment (up to the end of the line)
- even if preceded by a backslash.
-
- * No support for `digraphs' like `\$'.
-
- * `^^XX' (X is 0-9 or a-f) and `^^X' (character code of X in
- the range 0-127) are recognized; other use of `^' causes an
- error.
-
- * No macro expansion.
-
- * `hpf' checks for the expression `\patterns{...}' (possibly
- with whitespace before and after the braces). Everything
- between the braces is taken as hyphenation patterns.
- Consequently, `{' and `}' are not allowed in patterns.
-
- * Similarly, `\hyphenation{...}' gives a list of hyphenation
- exceptions.
-
- * `\endinput' is recognized also.
-
- * For backwards compatibility, if `\patterns' is missing, the
- whole file is treated as a list of hyphenation patterns (only
- recognizing the `%' character as the start of a comment).
-
- If no `hpf' request is specified (either in the document or in a
- macro package), `gtroff' won't hyphenate at all.
-
- The `hpfa' request appends a file of patterns to the current list.
-
- The `hpfcode' request defines mapping values for character codes in
- hyphenation patterns. `hpf' or `hpfa' then apply the mapping
- (after reading the patterns) before replacing or appending them to
- the current list of patterns. Its arguments are pairs of
- character codes - integers from 0 to 255. The request maps
- character code A to code B, code C to code D, and so on. You can
- use character codes which would be invalid otherwise.
-
- The set of hyphenation patterns is associated with the current
- language set by the `hla' request. The `hpf' request is usually
- invoked by the `troffrc' or `troffrc-end' file; by default,
- `troffrc' loads hyphenation patterns and exceptions for American
- English (in files `hyphen.us' and `hyphenex.us').
-
- A second call to `hpf' (for the same language) will replace the
- hyphenation patterns with the new ones.
-
- Invoking `hpf' causes an error if there is no current hyphenation
- language.
-
- -- Request: .hcode c1 code1 [c2 code2 ...]
- Set the hyphenation code of character C1 to CODE1, that of C2 to
- CODE2, etc. A hyphenation code must be a single input character
- (not a special character) other than a digit or a space.
-
- To make hyphenation work, hyphenation codes must be set up. At
- start-up, groff only assigns hyphenation codes to the letters
- `a'-`z' (mapped to themselves) and to the letters `A'-`Z' (mapped
- to `a'-`z'); all other hyphenation codes are set to zero.
- Normally, hyphenation patterns contain only lowercase letters
- which should be applied regardless of case. With other words, the
- words `FOO' and `Foo' should be hyphenated exactly the same way as
- the word `foo' is hyphenated, and this is what `hcode' is good
- for. Words which contain other letters won't be hyphenated
- properly if the corresponding hyphenation patterns actually do
- contain them. For example, the following `hcode' requests are
- necessary to assign hyphenation codes to the letters `ÄäÖöÜüß'
- (this is needed for German):
-
-
- .hcode ä ä Ä ä
- .hcode ö ö Ö ö
- .hcode ü ü Ü ü
- .hcode ß ß
-
- Without those assignments, groff treats German words like
- `Kindergärten' (the plural form of `kindergarten') as two
- substrings `kinderg' and `rten' because the hyphenation code of
- the umlaut a is zero by default. There is a German hyphenation
- pattern which covers `kinder', so groff finds the hyphenation
- `kin-der'. The other two hyphenation points (`kin-der-gär-ten')
- are missed.
-
- This request is ignored if it has no parameter.
-
- -- Request: .hym [length]
- -- Register: \n[.hym]
- Set the (right) hyphenation margin to LENGTH. If the current
- adjustment mode is not `b' or `n', the line is not hyphenated if
- it is shorter than LENGTH. Without an argument, the hyphenation
- margin is reset to its default value, which is 0. The default
- scaling indicator for this request is `m'. The hyphenation margin
- is associated with the current environment (*note Environments::).
-
- A negative argument resets the hyphenation margin to zero, emitting
- a warning of type `range'.
-
- The current hyphenation margin is available in the `.hym' read-only
- number register.
-
- -- Request: .hys [hyphenation_space]
- -- Register: \n[.hys]
- Set the hyphenation space to HYPHENATION_SPACE. If the current
- adjustment mode is `b' or `n', don't hyphenate the line if it can
- be justified by adding no more than HYPHENATION_SPACE extra space
- to each word space. Without argument, the hyphenation space is
- set to its default value, which is 0. The default scaling
- indicator for this request is `m'. The hyphenation space is
- associated with the current environment (*note Environments::).
-
- A negative argument resets the hyphenation space to zero, emitting
- a warning of type `range'.
-
- The current hyphenation space is available in the `.hys' read-only
- number register.
-
- -- Request: .shc [glyph]
- Set the "soft hyphen character" to GLYPH.(1) (*note Manipulating
- Hyphenation-Footnote-1::) If the argument is omitted, the soft
- hyphen character is set to the default glyph `\(hy' (this is the
- start-up value of `gtroff' also). The soft hyphen character is
- the glyph that is inserted when a word is hyphenated at a line
- break. If the soft hyphen character does not exist in the font of
- the character immediately preceding a potential break point, then
- the line is not broken at that point. Neither definitions
- (specified with the `char' request) nor translations (specified
- with the `tr' request) are considered when finding the soft hyphen
- character.
-
- -- Request: .hla language
- -- Register: \n[.hla]
- Set the current hyphenation language to the string LANGUAGE.
- Hyphenation exceptions specified with the `hw' request and
- hyphenation patterns specified with the `hpf' and `hpfa' requests
- are both associated with the current hyphenation language. The
- `hla' request is usually invoked by the `troffrc' or the
- `troffrc-end' files; `troffrc' sets the default language to `us'.
-
- The current hyphenation language is available as a string in the
- read-only number register `.hla'.
-
-
- .ds curr_language \n[.hla]
- \*[curr_language]
- => us
-
-
-
-File: groff, Node: Manipulating Hyphenation-Footnotes, Up: Manipulating Hyphenation
-
- (1) "Soft hyphen character" is a misnomer since it is an output
-glyph.
-
-
-File: groff, Node: Manipulating Spacing, Next: Tabs and Fields, Prev: Manipulating Hyphenation, Up: gtroff Reference
-
-5.9 Manipulating Spacing
-========================
-
- -- Request: .sp [distance]
- Space downwards DISTANCE. With no argument it advances 1 line. A
- negative argument causes `gtroff' to move up the page the
- specified distance. If the argument is preceded by a `|' then
- `gtroff' moves that distance from the top of the page. This
- request causes a line break. The default scaling indicator is `v'.
-
- If a vertical trap is sprung during execution of `sp', the amount
- of vertical space after the trap is discarded. For example, this
-
-
- .de xxx
- ..
- .
- .wh 0 xxx
- .
- .pl 5v
- foo
- .sp 2
- bar
- .sp 50
- baz
-
- results in
-
-
- foo
-
-
- bar
-
- baz
-
- The amount of discarded space is available in the number register
- `.trunc'.
-
- To protect `sp' against vertical traps, use the `vpt' request:
-
-
- .vpt 0
- .sp -3
- .vpt 1
-
-
- -- Request: .ls [nnn]
- -- Register: \n[.L]
- Output NNN-1 blank lines after each line of text. With no
- argument, `gtroff' uses the previous value before the last `ls'
- call.
-
-
- .ls 2 \" This causes double-spaced output
- .ls 3 \" This causes triple-spaced output
- .ls \" Again double-spaced
-
- The line spacing is associated with the current environment (*note
- Environments::).
-
- The read-only number register `.L' contains the current line
- spacing setting.
-
- *Note Changing Type Sizes::, for the requests `vs' and `pvs' as
-alternatives to `ls'.
-
- -- Escape: \x'spacing'
- -- Register: \n[.a]
- Sometimes, extra vertical spacing is only needed occasionally, e.g.
- to allow space for a tall construct (like an equation). The `\x'
- escape does this. The escape is given a numerical argument,
- usually enclosed in quotes (like `\x'3p''); the default scaling
- indicator is `v'. If this number is positive extra vertical space
- is inserted below the current line. A negative number adds space
- above. If this escape is used multiple times on the same line,
- the maximum of the values is used.
-
- *Note Escapes::, for details on parameter delimiting characters.
-
- The `.a' read-only number register contains the most recent
- (nonnegative) extra vertical line space.
-
- Using `\x' can be necessary in combination with the `\b' escape,
- as the following example shows.
-
-
- This is a test with the \[rs]b escape.
- .br
- This is a test with the \[rs]b escape.
- .br
- This is a test with \b'xyz'\x'-1m'\x'1m'.
- .br
- This is a test with the \[rs]b escape.
- .br
- This is a test with the \[rs]b escape.
-
- produces
-
-
- This is a test with the \b escape.
- This is a test with the \b escape.
- x
- This is a test with y.
- z
- This is a test with the \b escape.
- This is a test with the \b escape.
-
-
- -- Request: .ns
- -- Request: .rs
- -- Register: \n[.ns]
- Enable "no-space mode". In this mode, spacing (either via `sp' or
- via blank lines) is disabled. The `bp' request to advance to the
- next page is also disabled, except if it is accompanied by a page
- number (see *Note Page Control::, for more information). This
- mode ends when actual text is output or the `rs' request is
- encountered which ends no-space mode. The read-only number
- register `.ns' is set to 1 as long as no-space mode is active.
-
- This request is useful for macros that conditionally insert
- vertical space before the text starts (for example, a paragraph
- macro could insert some space except when it is the first
- paragraph after a section header).
-
-
-File: groff, Node: Tabs and Fields, Next: Character Translations, Prev: Manipulating Spacing, Up: gtroff Reference
-
-5.10 Tabs and Fields
-====================
-
-A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
-movement to the next tab stop (much like it did on a typewriter).
-
- -- Escape: \t
- This escape is a non-interpreted tab character. In copy mode
- (*note Copy-in Mode::), `\t' is the same as a real tab character.
-
- -- Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
- -- Register: \n[.tabs]
- Change tab stop positions. This request takes a series of tab
- specifiers as arguments (optionally divided into two groups with
- the letter `T') which indicate where each tab stop is to be
- (overriding any previous settings).
-
- Tab stops can be specified absolutely, i.e., as the distance from
- the left margin. For example, the following sets 6 tab stops every
- one inch.
-
-
- .ta 1i 2i 3i 4i 5i 6i
-
- Tab stops can also be specified using a leading `+' which means
- that the specified tab stop is set relative to the previous tab
- stop. For example, the following is equivalent to the previous
- example.
-
-
- .ta 1i +1i +1i +1i +1i +1i
-
- `gtroff' supports an extended syntax to specify repeat values after
- the `T' mark (these values are always taken as relative) - this is
- the usual way to specify tabs set at equal intervals. The
- following is, yet again, the same as the previous examples. It
- does even more since it defines an infinite number of tab stops
- separated by one inch.
-
-
- .ta T 1i
-
- Now we are ready to interpret the full syntax given at the
- beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
- at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
- NN+RN+RN, and so on.
-
- Example: `4c +6c T 3c 5c 2c' is equivalent to `4c 10c 13c 18c 20c
- 23c 28c 30c ...'.
-
- The material in each tab column (i.e., the column between two tab
- stops) may be justified to the right or left or centered in the
- column. This is specified by appending `R', `L', or `C' to the tab
- specifier. The default justification is `L'. Example:
-
-
- .ta 1i 2iC 3iR
-
- Some notes:
-
- * The default unit of the `ta' request is `m'.
-
- * A tab stop is converted into a non-breakable horizontal
- movement which can be neither stretched nor squeezed. For
- example,
-
-
- .ds foo a\tb\tc
- .ta T 5i
- \*[foo]
-
- creates a single line which is a bit longer than 10 inches (a
- string is used to show exactly where the tab characters are).
- Now consider the following:
-
-
- .ds bar a\tb b\tc
- .ta T 5i
- \*[bar]
-
- `gtroff' first converts the tab stops of the line into
- unbreakable horizontal movements, then splits the line after
- the second `b' (assuming a sufficiently short line length).
- Usually, this isn't what the user wants.
-
- * Superfluous tabs (i.e., tab characters which do not
- correspond to a tab stop) are ignored except the first one
- which delimits the characters belonging to the last tab stop
- for right-justifying or centering. Consider the following
- example
-
-
- .ds Z foo\tbar\tfoo
- .ds ZZ foo\tbar\tfoobar
- .ds ZZZ foo\tbar\tfoo\tbar
- .ta 2i 4iR
- \*[Z]
- .br
- \*[ZZ]
- .br
- \*[ZZZ]
- .br
-
- which produces the following output:
-
-
- foo bar foo
- foo bar foobar
- foo bar foobar
-
- The first line right-justifies the second `foo' relative to
- the tab stop. The second line right-justifies `foobar'. The
- third line finally right-justifies only `foo' because of the
- additional tab character which marks the end of the string
- belonging to the last defined tab stop.
-
- * Tab stops are associated with the current environment (*note
- Environments::).
-
- * Calling `ta' without an argument removes all tab stops.
-
- * The start-up value of `gtroff' is `T 0.8i'.
-
- The read-only number register `.tabs' contains a string
- representation of the current tab settings suitable for use as an
- argument to the `ta' request.
-
-
- .ds tab-string \n[.tabs]
- \*[tab-string]
- => T120u
-
- The `troff' version of the Plan 9 operating system uses register
- `.S' for the same purpose.
-
- -- Request: .tc [fill-glyph]
- Normally `gtroff' fills the space to the next tab stop with
- whitespace. This can be changed with the `tc' request. With no
- argument `gtroff' reverts to using whitespace, which is the
- default. The value of this "tab repetition character" is
- associated with the current environment (*note Environments::).(1)
- (*note Tabs and Fields-Footnote-1::)
-
- -- Request: .linetabs n
- -- Register: \n[.linetabs]
- If N is missing or not zero, enable "line-tabs" mode, or disable
- it otherwise (the default). In line-tabs mode, `gtroff' computes
- tab distances relative to the (current) output line instead of the
- input line.
-
- For example, the following code:
-
-
- .ds x a\t\c
- .ds y b\t\c
- .ds z c
- .ta 1i 3i
- \*x
- \*y
- \*z
-
- in normal mode, results in the output
-
-
- a b c
-
- in line-tabs mode, the same code outputs
-
-
- a b c
-
- Line-tabs mode is associated with the current environment. The
- read-only register `.linetabs' is set to 1 if in line-tabs mode,
- and 0 in normal mode.
-
-* Menu:
-
-* Leaders::
-* Fields::
-
-
-File: groff, Node: Tabs and Fields-Footnotes, Up: Tabs and Fields
-
- (1) "Tab repetition character" is a misnomer since it is an output
-glyph.
-
-
-File: groff, Node: Leaders, Next: Fields, Prev: Tabs and Fields, Up: Tabs and Fields
-
-5.10.1 Leaders
---------------
-
-Sometimes it may may be desirable to use the `tc' request to fill a
-particular tab stop with a given glyph (for example dots in a table of
-contents), but also normal tab stops on the rest of the line. For this
-`gtroff' provides an alternate tab mechanism, called "leaders" which
-does just that.
-
- A leader character (character code 1) behaves similarly to a tab
-character: It moves to the next tab stop. The only difference is that
-for this movement, the fill glyph defaults to a period character and
-not to space.
-
- -- Escape: \a
- This escape is a non-interpreted leader character. In copy mode
- (*note Copy-in Mode::), `\a' is the same as a real leader
- character.
-
- -- Request: .lc [fill-glyph]
- Declare the "leader repetition character".(1) (*note
- Leaders-Footnote-1::) Without an argument, leaders act the same as
- tabs (i.e., using whitespace for filling). `gtroff''s start-up
- value is a dot (`.'). The value of the leader repetition
- character is associated with the current environment (*note
- Environments::).
-
- For a table of contents, to name an example, tab stops may be
-defined so that the section number is one tab stop, the title is the
-second with the remaining space being filled with a line of dots, and
-then the page number slightly separated from the dots.
-
-
- .ds entry 1.1\tFoo\a\t12
- .lc .
- .ta 1i 5i +.25i
- \*[entry]
-
-This produces
-
-
- 1.1 Foo.......................................... 12
-
-
-File: groff, Node: Leaders-Footnotes, Up: Leaders
-
- (1) "Leader repetition character" is a misnomer since it is an
-output glyph.
-
-
-File: groff, Node: Fields, Prev: Leaders, Up: Tabs and Fields
-
-5.10.2 Fields
--------------
-
-"Fields" are a more general way of laying out tabular data. A field is
-defined as the data between a pair of "delimiting characters". It
-contains substrings which are separated by "padding characters". The
-width of a field is the distance on the _input_ line from the position
-where the field starts to the next tab stop. A padding character
-inserts stretchable space similar to TeX's `\hss' command (thus it can
-even be negative) to make the sum of all substring lengths plus the
-stretchable space equal to the field width. If more than one padding
-character is inserted, the available space is evenly distributed among
-them.
-
- -- Request: .fc [delim-char [padding-char]]
- Define a delimiting and a padding character for fields. If the
- latter is missing, the padding character defaults to a space
- character. If there is no argument at all, the field mechanism is
- disabled (which is the default). Note that contrary to e.g. the
- tab repetition character, delimiting and padding characters are
- _not_ associated to the current environment (*note Environments::).
-
- Example:
-
-
- .fc # ^
- .ta T 3i
- #foo^bar^smurf#
- .br
- #foo^^bar^smurf#
-
- and here the result:
-
-
- foo bar smurf
- foo bar smurf
-
-
-
-File: groff, Node: Character Translations, Next: Troff and Nroff Mode, Prev: Tabs and Fields, Up: gtroff Reference
-
-5.11 Character Translations
-===========================
-
-The control character (`.') and the no-break control character (`'')
-can be changed with the `cc' and `c2' requests, respectively.
-
- -- Request: .cc [c]
- Set the control character to C. With no argument the default
- control character `.' is restored. The value of the control
- character is associated with the current environment (*note
- Environments::).
-
- -- Request: .c2 [c]
- Set the no-break control character to C. With no argument the
- default control character `'' is restored. The value of the
- no-break control character is associated with the current
- environment (*note Environments::).
-
- -- Request: .eo
- Disable the escape mechanism completely. After executing this
- request, the backslash character `\' no longer starts an escape
- sequence.
-
- This request can be very helpful in writing macros since it is not
- necessary then to double the escape character. Here an example:
-
-
- .\" This is a simplified version of the
- .\" .BR request from the man macro package
- .eo
- .de BR
- . ds result \&
- . while (\n[.$] >= 2) \{\
- . as result \fB\$1\fR\$2
- . shift 2
- . \}
- . if \n[.$] .as result \fB\$1
- \*[result]
- . ft R
- ..
- .ec
-
-
- -- Request: .ec [c]
- Set the escape character to C. With no argument the default
- escape character `\' is restored. It can be also used to
- re-enable the escape mechanism after an `eo' request.
-
- Note that changing the escape character globally will likely break
- macro packages since `gtroff' has no mechanism to `intern' macros,
- i.e., to convert a macro definition into an internal form which is
- independent of its representation (TeX has this mechanism). If a
- macro is called, it is executed literally.
-
- -- Request: .ecs
- -- Request: .ecr
- The `ecs' request saves the current escape character in an
- internal register. Use this request in combination with the `ec'
- request to temporarily change the escape character.
-
- The `ecr' request restores the escape character saved with `ecs'.
- Without a previous call to `ecs', this request sets the escape
- character to `\'.
-
- -- Escape: \\
- -- Escape: \e
- -- Escape: \E
- Print the current escape character (which is the backslash
- character `\' by default).
-
- `\\' is a `delayed' backslash; more precisely, it is the default
- escape character followed by a backslash, which no longer has
- special meaning due to the leading escape character. It is _not_
- an escape sequence in the usual sense! In any unknown escape
- sequence `\X' the escape character is ignored and X is printed.
- But if X is equal to the current escape character, no warning is
- emitted.
-
- As a consequence, only at top-level or in a diversion a backslash
- glyph is printed; in copy-in mode, it expands to a single
- backslash which then combines with the following character to an
- escape sequence.
-
- The `\E' escape differs from `\e' by printing an escape character
- that is not interpreted in copy mode. Use this to define strings
- with escapes that work when used in copy mode (for example, as a
- macro argument). The following example defines strings to begin
- and end a superscript:
-
-
- .ds { \v'-.3m'\s'\En[.s]*60/100'
- .ds } \s0\v'.3m'
-
- Another example to demonstrate the differences between the various
- escape sequences, using a strange escape character, `-'.
-
-
- .ec -
- .de xxx
- --A'123'
- ..
- .xxx
- => -A'foo'
-
- The result is surprising for most users, expecting `1' since `foo'
- is a valid identifier. What has happened? As mentioned above,
- the leading escape character makes the following character
- ordinary. Written with the default escape character the sequence
- `--' becomes `\-' - this is the minus sign.
-
- If the escape character followed by itself is a valid escape
- sequence, only `\E' yields the expected result:
-
-
- .ec -
- .de xxx
- -EA'123'
- ..
- .xxx
- => 1
-
-
- -- Escape: \.
- Similar to `\\', the sequence `\.' isn't a real escape sequence.
- As before, a warning message is suppressed if the escape character
- is followed by a dot, and the dot itself is printed.
-
-
- .de foo
- . nop foo
- .
- . de bar
- . nop bar
- \\..
- .
- ..
- .foo
- .bar
- => foo bar
-
- The first backslash is consumed while the macro is read, and the
- second is swallowed while exexuting macro `foo'.
-
- A "translation" is a mapping of an input character to an output
-glyph. The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (*note Gtroff
-Internals::, for more on this process).
-
- -- Request: .tr abcd...
- -- Request: .trin abcd...
- Translate character A to glyph B, character C to glyph D, etc. If
- there is an odd number of arguments, the last one is translated to
- an unstretchable space (`\ ').
-
- The `trin' request is identical to `tr', but when you unformat a
- diversion with `asciify' it ignores the translation. *Note
- Diversions::, for details about the `asciify' request.
-
- Some notes:
-
- * Special characters (`\(XX', `\[XXX]', `\C'XXX'', `\'', `\`',
- `\-', `\_'), glyphs defined with the `char' request, and
- numbered glyphs (`\N'XXX'') can be translated also.
-
- * The `\e' escape can be translated also.
-
- * Characters can be mapped onto the `\%' and `\~' escapes (but
- `\%' and `\~' can't be mapped onto another glyph).
-
- * The following characters can't be translated: space (with one
- exception, see below), backspace, newline, leader (and `\a'),
- tab (and `\t').
-
- * Translations are not considered for finding the soft hyphen
- character set with the `shc' request.
-
- * The pair `C\&' (this is an arbitrary character C followed by
- the zero width space character) maps this character to
- nothing.
-
-
- .tr a\&
- foo bar
- => foo br
-
- It is even possible to map the space character to nothing:
-
-
- .tr aa \&
- foo bar
- => foobar
-
- As shown in the example, the space character can't be the
- first character/glyph pair as an argument of `tr'.
- Additionally, it is not possible to map the space character
- to any other glyph; requests like `.tr aa x' undo `.tr aa \&'
- instead.
-
- If justification is active, lines are justified in spite of
- the `empty' space character (but there is no minimal
- distance, i.e. the space character, between words).
-
- * After an output glyph has been constructed (this happens at
- the moment immediately before the glyph is appended to an
- output glyph list, either by direct output, in a macro,
- diversion, or string), it is no longer affected by `tr'.
-
- * Translating character to glyphs where one of them or both are
- undefined is possible also; `tr' does not check whether the
- entities in its argument do exist.
-
- *Note Gtroff Internals::.
-
- * `troff' no longer has a hard-coded dependency on Latin-1; all
- `charXXX' entities have been removed from the font
- description files. This has a notable consequence which
- shows up in warnings like `can't find character with input
- code XXX' if the `tr' request isn't handled properly.
-
- Consider the following translation:
-
-
- .tr éÉ
-
- This maps input character `é' onto glyph `É', which is
- identical to glyph `char201'. But this glyph intentionally
- doesn't exist! Instead, `\[char201]' is treated as an input
- character entity and is by default mapped onto `\['E]', and
- `gtroff' doesn't handle translations of translations.
-
- The right way to write the above translation is
-
-
- .tr é\['E]
-
- With other words, the first argument of `tr' should be an
- input character or entity, and the second one a glyph entity.
-
- * Without an argument, the `tr' request is ignored.
-
- -- Request: .trnt abcd...
- `trnt' is the same as the `tr' request except that the
- translations do not apply to text that is transparently throughput
- into a diversion with `\!'. *Note Diversions::, for more
- information.
-
- For example,
-
-
- .tr ab
- .di x
- \!.tm a
- .di
- .x
-
- prints `b' to the standard error stream; if `trnt' is used instead
- of `tr' it prints `a'.
-
-
-File: groff, Node: Troff and Nroff Mode, Next: Line Layout, Prev: Character Translations, Up: gtroff Reference
-
-5.12 Troff and Nroff Mode
-=========================
-
-Originally, `nroff' and `troff' were two separate programs, the former
-for TTY output, the latter for everything else. With GNU `troff', both
-programs are merged into one executable, sending its output to a device
-driver (`grotty' for TTY devices, `grops' for POSTSCRIPT, etc.) which
-interprets the intermediate output of `gtroff'. For UNIX `troff' it
-makes sense to talk about "Nroff mode" and "Troff mode" since the
-differences are hardcoded. For GNU `troff', this distinction is not
-appropriate because `gtroff' simply takes the information given in the
-font files for a particular device without handling requests specially
-if a TTY output device is used.
-
- Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: `gtroff' provides two built-in conditions `n'
-and `t' for the `if', `ie', and `while' requests to decide whether
-`gtroff' shall behave like `nroff' or like `troff'.
-
- -- Request: .troff
- Make the `t' built-in condition true (and the `n' built-in
- condition false) for `if', `ie', and `while' conditional requests.
- This is the default if `gtroff' (_not_ `groff') is started with
- the `-R' switch to avoid loading of the start-up files `troffrc'
- and `troffrc-end'. Without `-R', `gtroff' stays in troff mode if
- the output device is not a TTY (e.g. `ps').
-
- -- Request: .nroff
- Make the `n' built-in condition true (and the `t' built-in
- condition false) for `if', `ie', and `while' conditional requests.
- This is the default if `gtroff' uses a TTY output device; the
- code for switching to nroff mode is in the file `tty.tmac' which
- is loaded by the start-up file `troffrc'.
-
- *Note Conditionals and Loops::, for more details on built-in
-conditions.
-
-
-File: groff, Node: Line Layout, Next: Line Control, Prev: Troff and Nroff Mode, Up: gtroff Reference
-
-5.13 Line Layout
-================
-
-The following drawing shows the dimensions which `gtroff' uses for
-placing a line of output onto the page. They are labeled with the
-request which manipulates each dimension.
-
-
- -->| in |<--
- |<-----------ll------------>|
- +----+----+----------------------+----+
- | : : : |
- +----+----+----------------------+----+
- -->| po |<--
- |<--------paper width---------------->|
-
-These dimensions are:
-
-`po'
- "Page offset" - this is the leftmost position of text on the final
- output, defining the "left margin".
-
-`in'
- "Indentation" - this is the distance from the left margin where
- text is printed.
-
-`ll'
- "Line length" - this is the distance from the left margin to right
- margin.
-
- A simple demonstration:
-
-
- .ll 3i
- This is text without indentation.
- The line length has been set to 3\~inch.
- .in +.5i
- .ll -.5i
- Now the left and right margins are both increased.
- .in
- .ll
- Calling .in and .ll without parameters restore
- the previous values.
-
- Result:
-
-
- This is text without indenta-
- tion. The line length has
- been set to 3 inch.
- Now the left and
- right margins are
- both increased.
- Calling .in and .ll without
- parameters restore the previ-
- ous values.
-
- -- Request: .po [offset]
- -- Request: .po +offset
- -- Request: .po -offset
- -- Register: \n[.o]
- Set horizontal page offset to OFFSET (or increment or decrement
- the current value by OFFSET). Note that this request does not
- cause a break, so changing the page offset in the middle of text
- being filled may not yield the expected result. The initial value
- is 1i. For TTY output devices, it is set to 0 in the startup file
- `troffrc'; the default scaling indicator is `m' (and not `v' as
- incorrectly documented in the original UNIX troff manual).
-
- The current page offset can be found in the read-only number
- register `.o'.
-
- If `po' is called without an argument, the page offset is reset to
- the previous value before the last call to `po'.
-
-
- .po 3i
- \n[.o]
- => 720
- .po -1i
- \n[.o]
- => 480
- .po
- \n[.o]
- => 720
-
-
- -- Request: .in [indent]
- -- Request: .in +indent
- -- Request: .in -indent
- -- Register: \n[.i]
- Set indentation to INDENT (or increment or decrement the current
- value by INDENT). This request causes a break. Initially, there
- is no indentation.
-
- If `in' is called without an argument, the indentation is reset to
- the previous value before the last call to `in'. The default
- scaling indicator is `m'.
-
- The indentation is associated with the current environment (*note
- Environments::).
-
- If a negative indentation value is specified (which is not
- allowed), `gtroff' emits a warning of type `range' and sets the
- indentation to zero.
-
- The effect of `in' is delayed until a partially collected line (if
- it exists) is output. A temporary indentation value is reset to
- zero also.
-
- The current indentation (as set by `in') can be found in the
- read-only number register `.i'.
-
- -- Request: .ti offset
- -- Request: .ti +offset
- -- Request: .ti -offset
- -- Register: \n[.in]
- Temporarily indent the next output line by OFFSET. If an
- increment or decrement value is specified, adjust the temporary
- indentation relative to the value set by the `in' request.
-
- This request causes a break; its value is associated with the
- current environment (*note Environments::). The default scaling
- indicator is `m'. A call of `ti' without an argument is ignored.
-
- If the total indentation value is negative (which is not allowed),
- `gtroff' emits a warning of type `range' and sets the temporary
- indentation to zero. `Total indentation' is either OFFSET if
- specified as an absolute value, or the temporary plus normal
- indentation, if OFFSET is given as a relative value.
-
- The effect of `ti' is delayed until a partially collected line (if
- it exists) is output.
-
- The read-only number register `.in' is the indentation that applies
- to the current output line.
-
- The difference between `.i' and `.in' is that the latter takes
- into account whether a partially collected line still uses the old
- indentation value or a temporary indentation value is active.
-
- -- Request: .ll [length]
- -- Request: .ll +length
- -- Request: .ll -length
- -- Register: \n[.l]
- -- Register: \n[.ll]
- Set the line length to LENGTH (or increment or decrement the
- current value by LENGTH). Initially, the line length is set to
- 6.5i. The effect of `ll' is delayed until a partially collected
- line (if it exists) is output. The default scaling indicator is
- `m'.
-
- If `ll' is called without an argument, the line length is reset to
- the previous value before the last call to `ll'. If a negative
- line length is specified (which is not allowed), `gtroff' emits a
- warning of type `range' and sets the line length to zero.
-
- The line length is associated with the current environment (*note
- Environments::).
-
- The current line length (as set by `ll') can be found in the
- read-only number register `.l'. The read-only number register
- `.ll' is the line length that applies to the current output line.
-
- Similar to `.i' and `.in', the difference between `.l' and `.ll'
- is that the latter takes into account whether a partially
- collected line still uses the old line length value.
-
-
-File: groff, Node: Line Control, Next: Page Layout, Prev: Line Layout, Up: gtroff Reference
-
-5.14 Line Control
-=================
-
-It is important to understand how `gtroff' handles input and output
-lines.
-
- Many escapes use positioning relative to the input line. For
-example, this
-
-
- This is a \h'|1.2i'test.
-
- This is a
- \h'|1.2i'test.
-
-produces
-
-
- This is a test.
-
- This is a test.
-
- The main usage of this feature is to define macros which act exactly
-at the place where called.
-
-
- .\" A simple macro to underline a word
- .de underline
- . nop \\$1\l'|0\[ul]'
- ..
-
-In the above example, `|0' specifies a negative distance from the
-current position (at the end of the just emitted argument `\$1') back
-to the beginning of the input line. Thus, the `\l' escape draws a line
-from right to left.
-
- `gtroff' makes a difference between input and output line
-continuation; the latter is also called "interrupting" a line.
-
- -- Escape: \<RET>
- -- Escape: \c
- -- Register: \n[.int]
- Continue a line. `\<RET>' (this is a backslash at the end of a
- line immediately followed by a newline) works on the input level,
- suppressing the effects of the following newline in the input.
-
-
- This is a \
- .test
- => This is a .test
-
- The `|' operator is also affected.
-
- `\c' works on the output level. Anything after this escape on the
- same line is ignored, except `\R' which works as usual. Anything
- before `\c' on the same line will be appended to the current
- partial output line. The next non-command line after an
- interrupted line counts as a new input line.
-
- The visual results depend on whether no-fill mode is active.
-
- * If no-fill mode is active (using the `nf' request), the next
- input text line after `\c' will be handled as a continuation
- of the same input text line.
-
-
- .nf
- This is a \c
- test.
- => This is a test.
-
- * If fill mode is active (using the `fi' request), a word
- interrupted with `\c' will be continued with the text on the
- next input text line, without an intervening space.
-
-
- This is a te\c
- st.
- => This is a test.
-
-
- Note that an intervening control line which causes a break is
- stronger than `\c', flushing out the current partial line in the
- usual way.
-
- The `.int' register contains a positive value if the last output
- line was interrupted with `\c'; this is associated with the
- current environment (*note Environments::).
-
-
-File: groff, Node: Page Layout, Next: Page Control, Prev: Line Control, Up: gtroff Reference
-
-5.15 Page Layout
-================
-
-`gtroff' provides some very primitive operations for controlling page
-layout.
-
- -- Request: .pl [length]
- -- Request: .pl +length
- -- Request: .pl -length
- -- Register: \n[.p]
- Set the "page length" to LENGTH (or increment or decrement the
- current value by LENGTH). This is the length of the physical
- output page. The default scaling indicator is `v'.
-
- The current setting can be found in the read-only number register
- `.p'.
-
- Note that this only specifies the size of the page, not the top and
- bottom margins. Those are not set by `gtroff' directly. *Note
- Traps::, for further information on how to do this.
-
- Negative `pl' values are possible also, but not very useful: No
- trap is sprung, and each line is output on a single page (thus
- suppressing all vertical spacing).
-
- If no argument or an invalid argument is given, `pl' sets the page
- length to 11i.
-
- `gtroff' provides several operations which help in setting up top
-and bottom titles (or headers and footers).
-
- -- Request: .tl 'left'center'right'
- Print a "title line". It consists of three parts: a left
- justified portion, a centered portion, and a right justified
- portion. The argument separator `'' can be replaced with any
- character not occurring in the title line. The `%' character is
- replaced with the current page number. This character can be
- changed with the `pc' request (see below).
-
- Without argument, `tl' is ignored.
-
- Some notes:
-
- * A title line is not restricted to the top or bottom of a page.
-
- * `tl' prints the title line immediately, ignoring a partially
- filled line (which stays untouched).
-
- * It is not an error to omit closing delimiters. For example,
- `.tl /foo' is equivalent to `.tl /foo///': It prints a title
- line with the left justified word `foo'; the centered and
- right justfied parts are empty.
-
- * `tl' accepts the same parameter delimiting characters as the
- `\A' escape; see *Note Escapes::.
-
- -- Request: .lt [length]
- -- Request: .lt +length
- -- Request: .lt -length
- -- Register: \n[.lt]
- The title line is printed using its own line length, which is
- specified (or incremented or decremented) with the `lt' request.
- Initially, the title line length is set to 6.5i. If a negative
- line length is specified (which is not allowed), `gtroff' emits a
- warning of type `range' and sets the title line length to zero.
- The default scaling indicator is `m'. If `lt' is called without
- an argument, the title length is reset to the previous value
- before the last call to `lt'.
-
- The current setting of this is available in the `.lt' read-only
- number register; it is associated with the current environment
- (*note Environments::).
-
- -- Request: .pn page
- -- Request: .pn +page
- -- Request: .pn -page
- -- Register: \n[.pn]
- Change (increase or decrease) the page number of the _next_ page.
- The only argument is the page number; the request is ignored
- without a parameter.
-
- The read-only number register `.pn' contains the number of the next
- page: either the value set by a `pn' request, or the number of the
- current page plus 1.
-
- -- Request: .pc [char]
- Change the page number character (used by the `tl' request) to a
- different character. With no argument, this mechanism is disabled.
- Note that this doesn't affect the number register `%'.
-
- *Note Traps::.
-
-
-File: groff, Node: Page Control, Next: Fonts and Symbols, Prev: Page Layout, Up: gtroff Reference
-
-5.16 Page Control
-=================
-
- -- Request: .bp [page]
- -- Request: .bp +page
- -- Request: .bp -page
- -- Register: \n[%]
- Stop processing the current page and move to the next page. This
- request causes a break. It can also take an argument to set
- (increase, decrease) the page number of the next page (which
- actually becomes the current page after `bp' has finished). The
- difference between `bp' and `pn' is that `pn' does not cause a
- break or actually eject a page. *Note Page Layout::.
-
-
- .de newpage \" define macro
- 'bp \" begin page
- 'sp .5i \" vertical space
- .tl 'left top'center top'right top' \" title
- 'sp .3i \" vertical space
- .. \" end macro
-
- `bp' has no effect if not called within the top-level diversion
- (*note Diversions::).
-
- The read-write register `%' holds the current page number.
-
- The number register `.pe' is set to 1 while `bp' is active. *Note
- Page Location Traps::.
-
- -- Request: .ne [space]
- It is often necessary to force a certain amount of space before a
- new page occurs. This is most useful to make sure that there is
- not a single "orphan" line left at the bottom of a page. The `ne'
- request ensures that there is a certain distance, specified by the
- first argument, before the next page is triggered (see *Note
- Traps::, for further information). The default scaling indicator
- for `ne' is `v'; the default value of SPACE is 1v if no argument
- is given.
-
- For example, to make sure that no fewer than 2 lines get orphaned,
- do the following before each paragraph:
-
-
- .ne 2
- text text text
-
- `ne' will then automatically cause a page break if there is space
- for one line only.
-
- -- Request: .sv [space]
- -- Request: .os
- `sv' is similar to the `ne' request; it reserves the specified
- amount of vertical space. If the desired amount of space exists
- before the next trap (or the bottom page boundary if no trap is
- set), the space is output immediately (ignoring a partially filled
- line which stays untouched). If there is not enough space, it is
- stored for later output via the `os' request. The default value
- is 1v if no argument is given; the default scaling indicator is
- `v'.
-
- Both `sv' and `os' ignore no-space mode. While the `sv' request
- allows negative values for SPACE, `os' will ignore them.
-
- -- Register: \n[nl]
- This register contains the current vertical position. If the
- vertical position is zero and the top of page transition hasn't
- happened yet, `nl' is set to negative value. `gtroff' itself does
- this at the very beginning of a document before anything has been
- printed, but the main usage is to plant a header trap on a page if
- this page has already started.
-
- Consider the following:
-
-
- .de xxx
- . sp
- . tl ''Header''
- . sp
- ..
- .
- First page.
- .bp
- .wh 0 xxx
- .nr nl (-1)
- Second page.
-
- Result:
-
-
- First page.
-
- ...
-
- Header
-
- Second page.
-
- ...
-
- Without resetting `nl' to a negative value, the just planted trap
- would be active beginning with the _next_ page, not the current
- one.
-
- *Note Diversions::, for a comparison with the `.h' and `.d'
- registers.
-
-
-File: groff, Node: Fonts and Symbols, Next: Sizes, Prev: Page Control, Up: gtroff Reference
-
-5.17 Fonts and Symbols
-======================
-
-`gtroff' can switch fonts at any point in the text.
-
- The basic set of fonts is `R', `I', `B', and `BI'. These are Times
-Roman, Italic, Bold, and Bold Italic. For non-TTY devices, there is
-also at least one symbol font which contains various special symbols
-(Greek, mathematics).
-
-* Menu:
-
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-
-
-File: groff, Node: Changing Fonts, Next: Font Families, Prev: Fonts and Symbols, Up: Fonts and Symbols
-
-5.17.1 Changing Fonts
----------------------
-
- -- Request: .ft [font]
- -- Escape: \ff
- -- Escape: \f(fn
- -- Escape: \f[font]
- -- Register: \n[.sty]
- The `ft' request and the `\f' escape change the current font to
- FONT (one-character name F, two-character name FN).
-
- If FONT is a style name (as set with the `sty' request or with the
- `styles' command in the `DESC' file), use it within the current
- font family (as set with the `fam' request, `\F' escape, or with
- the `family' command in the `DESC' file).
-
- With no argument or using `P' as an argument, `.ft' switches to
- the previous font. Use `\f[]' to do this with the escape. The
- old syntax forms `\fP' or `\f[P]' are also supported.
-
- Fonts are generally specified as upper-case strings, which are
- usually 1 to 4 characters representing an abbreviation or acronym
- of the font name. This is no limitation, just a convention.
-
- The example below produces two identical lines.
-
-
- eggs, bacon,
- .ft B
- spam
- .ft
- and sausage.
-
- eggs, bacon, \fBspam\fP and sausage.
-
- Note that `\f' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \f[I]x\f[]
-
- The current style name is available in the read-only number
- register `.sty' (this is a string-valued register); if the current
- font isn't a style, the empty string is returned. It is
- associated with the current environment.
-
- *Note Font Positions::, for an alternative syntax.
-
- -- Request: .ftr f [g]
- Translate font F to font G. Whenever a font named F is referred
- to in a `\f' escape sequence, in the `F' and `S' conditional
- operators, or in the `ft', `ul', `bd', `cs', `tkf', `special',
- `fspecial', `fp', or `sty' requests, font G is used. If G is
- missing or equal to F the translation is undone.
-
-
-File: groff, Node: Font Families, Next: Font Positions, Prev: Changing Fonts, Up: Fonts and Symbols
-
-5.17.2 Font Families
---------------------
-
-Due to the variety of fonts available, `gtroff' has added the concept
-of "font families" and "font styles". The fonts are specified as the
-concatenation of the font family and style. Specifying a font without
-the family part causes `gtroff' to use that style of the current family.
-
- Currently, fonts for the devices `-Tps', `-Tdvi', `-Tlj4', `-Tlbp',
-and the X11 fonts are set up to this mechanism. By default, `gtroff'
-uses the Times family with the four styles `R', `I', `B', and `BI'.
-
- This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (*note Groff Options::).
-
- -- Request: .fam [family]
- -- Register: \n[.fam]
- -- Escape: \Ff
- -- Escape: \F(fm
- -- Escape: \F[family]
- -- Register: \n[.fn]
- Switch font family to FAMILY (one-character name F, two-character
- name FM). If no argument is given, switch back to the previous
- font family. Use `\F[]' to do this with the escape. Note that
- `\FP' doesn't work; it selects font family `P' instead.
-
- The value at start-up is `T'. The current font family is
- available in the read-only number register `.fam' (this is a
- string-valued register); it is associated with the current
- environment.
-
-
- spam,
- .fam H \" helvetica family
- spam, \" used font is family H + style R = HR
- .ft B \" family H + style B = font HB
- spam,
- .fam T \" times family
- spam, \" used font is family T + style B = TB
- .ft AR \" font AR (not a style)
- baked beans,
- .ft R \" family T + style R = font TR
- and spam.
-
- Note that `\F' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font family on the
- fly:
-
-
- .mc \F[P]x\F[]
-
- The `.fn' register contains the current "real font name" of the
- current font. This is a string-valued register. If the current
- font is a style, the value of `\n[.fn]' is the proper
- concatenation of family and style name.
-
- -- Request: .sty n style
- Associate STYLE with font position N. A font position can be
- associated either with a font or with a style. The current font
- is the index of a font position and so is also either a font or a
- style. If it is a style, the font that is actually used is the
- font which name is the concatenation of the name of the current
- family and the name of the current style. For example, if the
- current font is 1 and font position 1 is associated with style `R'
- and the current font family is `T', then font `TR' will be used.
- If the current font is not a style, then the current family is
- ignored. If the requests `cs', `bd', `tkf', `uf', or `fspecial'
- are applied to a style, they will instead be applied to the member
- of the current family corresponding to that style.
-
- N must be a non-negative integer value.
-
- The default family can be set with the `-f' option (*note Groff
- Options::). The `styles' command in the `DESC' file controls
- which font positions (if any) are initially associated with styles
- rather than fonts. For example, the default setting for
- POSTSCRIPT fonts
-
-
- styles R I B BI
-
- is equivalent to
-
-
- .sty 1 R
- .sty 2 I
- .sty 3 B
- .sty 4 BI
-
- `fam' and `\F' always check whether the current font position is
- valid; this can give surprising results if the current font
- position is associated with a style.
-
- In the following example, we want to access the POSTSCRIPT font
- `FooBar' from the font family `Foo':
-
-
- .sty \n[.fp] Bar
- .fam Foo
- => warning: can't find font `FooR'
-
- The default font position at start-up is 1; for the POSTSCRIPT
- device, this is associated with style `R', so `gtroff' tries to
- open `FooR'.
-
- A solution to this problem is to use a dummy font like the
- following:
-
-
- .fp 0 dummy TR \" set up dummy font at position 0
- .sty \n[.fp] Bar \" register style `Bar'
- .ft 0 \" switch to font at position 0
- .fam Foo \" activate family `Foo'
- .ft Bar \" switch to font `FooBar'
-
- *Note Font Positions::.
-
-
-File: groff, Node: Font Positions, Next: Using Symbols, Prev: Font Families, Up: Fonts and Symbols
-
-5.17.3 Font Positions
----------------------
-
-For the sake of old phototypesetters and compatibility with old versions
-of `troff', `gtroff' has the concept of font "positions", on which
-various fonts are mounted.
-
- -- Request: .fp pos font [external-name]
- -- Register: \n[.f]
- -- Register: \n[.fp]
- Mount font FONT at position POS (which must be a non-negative
- integer). This numeric position can then be referred to with font
- changing commands. When `gtroff' starts it is using font
- position 1 (which must exist; position 0 is unused usually at
- start-up).
-
- The current font in use, as a font position, is available in the
- read-only number register `.f'. This can be useful to remember the
- current font for later recall. It is associated with the current
- environment (*note Environments::).
-
-
- .nr save-font \n[.f]
- .ft B
- ... text text text ...
- .ft \n[save-font]
-
- The number of the next free font position is available in the
- read-only number register `.fp'. This is useful when mounting a
- new font, like so:
-
-
- .fp \n[.fp] NEATOFONT
-
- Fonts not listed in the `DESC' file are automatically mounted on
- the next available font position when they are referenced. If a
- font is to be mounted explicitly with the `fp' request on an unused
- font position, it should be mounted on the first unused font
- position, which can be found in the `.fp' register. Although
- `gtroff' does not enforce this strictly, it is not allowed to
- mount a font at a position whose number is much greater (approx.
- 1000 positions) than that of any currently used position.
-
- The `fp' request has an optional third argument. This argument
- gives the external name of the font, which is used for finding the
- font description file. The second argument gives the internal
- name of the font which is used to refer to the font in `gtroff'
- after it has been mounted. If there is no third argument then the
- internal name is used as the external name. This feature makes it
- possible to use fonts with long names in compatibility mode.
-
- Both the `ft' request and the `\f' escape have alternative syntax
-forms to access font positions.
-
- -- Request: .ft nnn
- -- Escape: \fn
- -- Escape: \f(nn
- -- Escape: \f[nnn]
- Change the current font position to NNN (one-digit position N,
- two-digit position NN), which must be a non-negative integer.
-
- If NNN is associated with a style (as set with the `sty' request
- or with the `styles' command in the `DESC' file), use it within
- the current font family (as set with the `fam' request, the `\F'
- escape, or with the `family' command in the `DESC' file).
-
-
- this is font 1
- .ft 2
- this is font 2
- .ft \" switch back to font 1
- .ft 3
- this is font 3
- .ft
- this is font 1 again
-
- *Note Changing Fonts::, for the standard syntax form.
-
-
-File: groff, Node: Using Symbols, Next: Special Fonts, Prev: Font Positions, Up: Fonts and Symbols
-
-5.17.4 Using Symbols
---------------------
-
-A "glyph" is a graphical representation of a "character". While a
-character is an abstract entity containing semantic information, a
-glyph is something which can be actually seen on screen or paper. It
-is possible that a character has multiple glyph representation forms
-(for example, the character `A' can be either written in a roman or an
-italic font, yielding two different glyphs); sometimes more than one
-character maps to a single glyph (this is a "ligature" - the most
-common is `fi').
-
- A "symbol" is simply a named glyph. Within `gtroff', all glyph
-names of a particular font are defined in its font file. If the user
-requests a glyph not available in this font, `gtroff' looks up an
-ordered list of "special fonts". By default, the POSTSCRIPT output
-device supports the two special fonts `SS' (slanted symbols) and `S'
-(symbols) (the former is looked up before the latter). Other output
-devices use different names for special fonts. Fonts mounted with the
-`fonts' keyword in the `DESC' file are globally available. To install
-additional special fonts locally (i.e. for a particular font), use the
-`fspecial' request.
-
- Here the exact rules how `gtroff' searches a given symbol:
-
- * If the symbol has been defined with the `char' request, use it.
- This hides a symbol with the same name in the current font.
-
- * Check the current font.
-
- * If the symbol has been defined with the `fchar' request, use it.
-
- * Check whether the current font has a font-specific list of special
- fonts; test all fonts in the order of appearance in the last
- `fspecial' call if appropriate.
-
- * If the symbol has been defined with the `fschar' request for the
- current font, use it.
-
- * Check all fonts in the order of appearance in the last `special'
- call.
-
- * If the symbol has been defined with the `schar' request, use it.
-
- * As a last resort, consult all fonts loaded up to now for special
- fonts and check them, starting with the lowest font number. Note
- that this can sometimes lead to surprising results since the
- `fonts' line in the `DESC' file often contains empty positions
- which are filled later on. For example, consider the following:
-
-
- fonts 3 0 0 FOO
-
- This mounts font `foo' at font position 3. We assume that `FOO'
- is a special font, containing glyph `foo', and that no font has
- been loaded yet. The line
-
-
- .fspecial BAR BAZ
-
- makes font `BAZ' special only if font `BAR' is active. We further
- assume that `BAZ' is really a special font, i.e., the font
- description file contains the `special' keyword, and that it also
- contains glyph `foo' with a special shape fitting to font `BAR'.
- After executing `fspecial', font `BAR' is loaded at font
- position 1, and `BAZ' at position 2.
-
- We now switch to a new font `XXX', trying to access glyph `foo'
- which is assumed to be missing. There are neither font-specific
- special fonts for `XXX' nor any other fonts made special with the
- `special' request, so `gtroff' starts the search for special fonts
- in the list of already mounted fonts, with increasing font
- positions. Consequently, it finds `BAZ' before `FOO' even for
- `XXX' which is not the intended behaviour.
-
- *Note Font Files::, and *Note Special Fonts::, for more details.
-
- The list of available symbols is device dependent; see the
-`groff_char(7)' man page for a complete list of all glyphs. For
-example, say
-
-
- man -Tdvi groff_char > groff_char.dvi
-
-for a list using the default DVI fonts (not all versions of the `man'
-program support the `-T' option). If you want to use an additional
-macro package to change the used fonts, `groff' must be called directly:
-
-
- groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-
- Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm
-which is described in
-`http://partners.adobe.com/asn/tech/type/unicodegn.jsp'. The (frozen)
-set of glyph names which can't be derived algorithmically is called
-"groff glyph list (GGL)".
-
- * A glyph for Unicode character U+XXXX[X[X]] which is not a
- composite character will be named `uXXXX[X[X]]'. X must be an
- uppercase hexadecimal digit. Examples: `u1234', `u008E',
- `u12DB8'. The largest Unicode value is 0x10FFFF. There must be at
- least four `X' digits; if necessary, add leading zeroes (after the
- `u'). No zero padding is allowed for character codes greater than
- 0xFFFF. Surrogates (i.e., Unicode values greater than 0xFFFF
- represented with character codes from the surrogate area
- U+D800-U+DFFF) are not allowed too.
-
- * A glyph representing more than a single input character will be
- named
-
- `u' COMPONENT1 `_' COMPONENT2 `_' COMPONENT3 ...
-
- Example: `u0045_0302_0301'.
-
- For simplicity, all Unicode characters which are composites must be
- decomposed maximally (this is normalization form D in the Unicode
- standard); for example, `u00CA_0301' is not a valid glyph name
- since U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be
- further decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302
- (COMBINING CIRCUMFLEX ACCENT). `u0045_0302_0301' is thus the
- glyph name for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND
- ACUTE.
-
- * groff maintains a table to decompose all algorithmically derived
- glyph names which are composites itself. For example, `u0100'
- (LATIN LETTER A WITH MACRON) will be automatically decomposed into
- `u0041_0304'. Additionally, a glyph name of the GGL is preferred
- to an algorithmically derived glyph name; groff also automatically
- does the mapping. Example: The glyph `u0045_0302' will be mapped
- to `^E'.
-
- * glyph names of the GGL can't be used in composite glyph names; for
- example, `^E_u0301' is invalid.
-
- -- Escape: \(nm
- -- Escape: \[name]
- -- Escape: \[component1 component2 ...]
- Insert a symbol NAME (two-character name NM) or a composite glyph
- with component glyphs COMPONENT1, COMPONENT2, .... There is no
- special syntax for one-character names - the natural form `\N'
- would collide with escapes.(1) (*note Using Symbols-Footnote-1::)
-
- If NAME is undefined, a warning of type `char' is generated, and
- the escape is ignored. *Note Debugging::, for information about
- warnings.
-
- groff resolves `\[...]' with more than a single component as
- follows:
-
- * Any component which is found in the GGL will be converted to
- the `uXXXX' form.
-
- * Any component `uXXXX' which is found in the list of
- decomposable glyphs will be decomposed.
-
- * The resulting elements are then concatenated with `_'
- inbetween, dropping the leading `u' in all elements but the
- first.
-
- No check for the existence of any component (similar to `tr'
- request) will be done.
-
- Examples:
-
- `\[A ho]'
- `A' maps to `u0041', `ho' maps to `u02DB', thus the final
- glyph name would be `u0041_02DB'. Note this is not the
- expected result: The ogonek glyph `ho' is a spacing ogonek,
- but for a proper composite a non-spacing ogonek (U+0328) is
- necessary. Looking into the file `composite.tmac' one can
- find `.composite ho u0328' which changes the mapping of `ho'
- while a composite glyph name is constructed, causing the
- final glyph name to be `u0041_0328'.
-
- `\[^E u0301]'
- `\[^E aa]'
- `\[E a^ aa]'
- `\[E ^ ']'
- `^E' maps to `u0045_0302', thus the final glyph name is
- `u0045_0302_0301' in all forms (assuming proper calls of the
- `composite' request).
-
- It is not possible to define glyphs with names like `A ho' within
- a groff font file. This is not really a limitation; instead, you
- have to define `u0041_0328'.
-
- -- Escape: \C'xxx'
- Typeset the glyph named XXX.(2) (*note Using Symbols-Footnote-2::)
- Normally it is more convenient to use `\[XXX]', but `\C' has the
- advantage that it is compatible with newer versions of AT&T
- `troff' and is available in compatibility mode.
-
- -- Request: .composite from to
- Map glyph name FROM to glyph name TO if it is used in `\[...]'
- with more than one component. See above for examples.
-
- This mapping is based on glyph names only; no check for the
- existence of either glyph is done.
-
- A set of default mappings for many accents can be found in the file
- `composite.tmac' which is loaded at start-up.
-
- -- Escape: \N'n'
- Typeset the glyph with code N in the current font (`n' is *not*
- the input character code). The number N can be any non-negative
- decimal integer. Most devices only have glyphs with codes between
- 0 and 255; the Unicode output device uses codes in the range
- 0-65535. If the current font does not contain a glyph with that
- code, special fonts are _not_ searched. The `\N' escape sequence
- can be conveniently used in conjunction with the `char' request:
-
-
- .char \[phone] \f[ZD]\N'37'
-
- The code of each glyph is given in the fourth column in the font
- description file after the `charset' command. It is possible to
- include unnamed glyphs in the font description file by using a
- name of `---'; the `\N' escape sequence is the only way to use
- these.
-
- No kerning is applied to glyphs accessed with `\N'.
-
- Some escape sequences directly map onto special glyphs.
-
- -- Escape: \'
- This is a backslash followed by the apostrophe character, ASCII
- character `0x27' (EBCDIC character `0x7D'). The same as `\[aa]',
- the acute accent.
-
- -- Escape: \`
- This is a backslash followed by ASCII character `0x60' (EBCDIC
- character `0x79' usually). The same as `\[ga]', the grave accent.
-
- -- Escape: \-
- This is the same as `\[-]', the minus sign in the current font.
-
- -- Request: .cflags n c1 c2 ...
- Input characters and symbols have certain properties associated
- with it.(3) (*note Using Symbols-Footnote-3::) These properties
- can be modified with the `cflags' request. The first argument is
- the sum of the desired flags and the remaining arguments are the
- characters or symbols to have those properties. It is possible to
- omit the spaces between the characters or symbols.
-
- `1'
- The character ends sentences (initially characters `.?!' have
- this property).
-
- `2'
- Lines can be broken before the character (initially no
- characters have this property).
-
- `4'
- Lines can be broken after the character (initially the
- character `-' and the symbols `\[hy]' and `\[em]' have this
- property).
-
- `8'
- The character overlaps horizontally if used as a horizontal
- line building element. Initially the symbols `\[ul]',
- `\[rn]', `\[ru]', `\[radicalex]', and `\[sqrtex]' have this
- property.
-
- `16'
- The character overlaps vertically if used as vertical line
- building element. Initially symbol `\[br]' has this property.
-
- `32'
- An end-of-sentence character followed by any number of
- characters with this property is treated as the end of a
- sentence if followed by a newline or two spaces; in other
- words the character is "transparent" for the purposes of
- end-of-sentence recognition - this is the same as having a
- zero space factor in TeX (initially characters `"')]*' and
- the symbols `\[dg]' and `\[rq]' have this property).
-
- -- Request: .char g [string]
- -- Request: .fchar g [string]
- -- Request: .fschar f g [string]
- -- Request: .schar g [string]
- Define a new glyph G to be STRING (which can be empty).(4) (*note
- Using Symbols-Footnote-4::) Every time glyph G needs to be
- printed, STRING is processed in a temporary environment and the
- result is wrapped up into a single object. Compatibility mode is
- turned off and the escape character is set to `\' while STRING is
- being processed. Any emboldening, constant spacing or track
- kerning is applied to this object rather than to individual
- characters in STRING.
-
- A glyph defined by these requests can be used just like a normal
- glyph provided by the output device. In particular, other
- characters can be translated to it with the `tr' or `trin'
- requests; it can be made the leader character by the `lc' request;
- repeated patterns can be drawn with the glyph using the `\l' and
- `\L' escape sequences; words containing the glyph can be
- hyphenated correctly if the `hcode' request is used to give the
- glyph's symbol a hyphenation code.
-
- There is a special anti-recursion feature: Use of `g' within the
- glyph's definition is handled like normal characters and symbols
- not defined with `char'.
-
- Note that the `tr' and `trin' requests take precedence if `char'
- accesses the same symbol.
-
-
- .tr XY
- X
- => Y
- .char X Z
- X
- => Y
- .tr XX
- X
- => Z
-
- The `fchar' request defines a fallback glyph: `gtroff' only checks
- for glyphs defined with `fchar' if it cannot find the glyph in the
- current font. `gtroff' carries out this test before checking
- special fonts.
-
- `fschar' defines a fallback glyph for font F: `gtroff' checks for
- glyphs defined with `fschar' after the list of fonts declared as
- font-specific special fonts with the `fspecial' request, but
- before the list of fonts declared as global special fonts with the
- `special' request.
-
- Finally, the `schar' request defines a global fallback glyph:
- `gtroff' checks for glyphs defined with `schar' after the list of
- fonts declared as global special fonts with the `special' request,
- but before the already mounted special fonts.
-
- *Note Using Symbols::, for a detailed description of the glyph
- searching mechanism in `gtroff'.
-
- -- Request: .rchar c1 c2 ...
- -- Request: .rfschar f c1 c2 ...
- Remove the definitions of glyphs C1, C2, .... This undoes the
- effect of a `char', `fchar', or `schar' request.
-
- It is possible to omit the whitespace between arguments.
-
- The request `rfschar' removes glyph definitions defined with
- `fschar' for glyph f.
-
- *Note Special Characters::.
-
-
-File: groff, Node: Using Symbols-Footnotes, Up: Using Symbols
-
- (1) Note that a one-character symbol is not the same as an input
-character, i.e., the character `a' is not the same as `\[a]'. By
-default, `groff' defines only a single one-character symbol, `\[-]'; it
-is usually accessed as `\-'. On the other hand, `gtroff' has the
-special feature that `\[charXXX]' is the same as the input character
-with character code XXX. For example, `\[char97]' is identical to the
-letter `a' if ASCII encoding is active.
-
- (2) `\C' is actually a misnomer since it accesses an output glyph.
-
- (3) Note that the output glyphs themselves don't have such
-properties. For `gtroff', a glyph is a numbered box with a given
-width, depth, and height, nothing else. All manipulations with the
-`cflags' request work on the input level.
-
- (4) `char' is a misnomer since an output glyph is defined.
-
-
-File: groff, Node: Special Fonts, Next: Artificial Fonts, Prev: Using Symbols, Up: Fonts and Symbols
-
-5.17.5 Special Fonts
---------------------
-
-Special fonts are those that `gtroff' searches when it cannot find the
-requested glyph in the current font. The Symbol font is usually a
-special font.
-
- `gtroff' provides the following two requests to add more special
-fonts. *Note Using Symbols::, for a detailed description of the glyph
-searching mechanism in `gtroff'.
-
- Usually, only non-TTY devices have special fonts.
-
- -- Request: .special [s1 s2 ...]
- -- Request: .fspecial f [s1 s2 ...]
- Use the `special' request to define special fonts. Initially, this
- list is empty.
-
- Use the `fspecial' request to designate special fonts only when
- font F is active. Initially, this list is empty.
-
- Previous calls to `special' or `fspecial' are overwritten; without
- arguments, the particular list of special fonts is set to empty.
- Special fonts are searched in the order they appear as arguments.
-
- All fonts which appear in a call to `special' or `fspecial' are
- loaded.
-
- *Note Using Symbols::, for the exact search order of glyphs.
-
-
-File: groff, Node: Artificial Fonts, Next: Ligatures and Kerning, Prev: Special Fonts, Up: Fonts and Symbols
-
-5.17.6 Artificial Fonts
------------------------
-
-There are a number of requests and escapes for artificially creating
-fonts. These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when `nroff' and `troff' were
-separate programs. Most of them are no longer necessary in GNU
-`troff'. Nevertheless, they are supported.
-
- -- Escape: \H'height'
- -- Escape: \H'+height'
- -- Escape: \H'-height'
- -- Register: \n[.height]
- Change (increment, decrement) the height of the current font, but
- not the width. If HEIGHT is zero, restore the original height.
- Default scaling indicator is `z'.
-
- The read-only number register `.height' contains the font height as
- set by `\H'.
-
- Currently, only the `-Tps' device supports this feature.
-
- Note that `\H' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \H'+5z'x\H'0'
-
- In compatibility mode, `gtroff' behaves differently: If an
- increment or decrement is used, it is always taken relative to the
- current point size and not relative to the previously selected font
- height. Thus,
-
-
- .cp 1
- \H'+5'test \H'+5'test
-
- prints the word `test' twice with the same font height (five
- points larger than the current font size).
-
- -- Escape: \S'slant'
- -- Register: \n[.slant]
- Slant the current font by SLANT degrees. Positive values slant to
- the right. Only integer values are possible.
-
- The read-only number register `.slant' contains the font slant as
- set by `\S'.
-
- Currently, only the `-Tps' device supports this feature.
-
- Note that `\S' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \S'20'x\S'0'
-
- This request is incorrectly documented in the original UNIX troff
- manual; the slant is always set to an absolute value.
-
- -- Request: .ul [lines]
- The `ul' request normally underlines subsequent lines if a TTY
- output device is used. Otherwise, the lines are printed in italics
- (only the term `underlined' is used in the following). The single
- argument is the number of input lines to be underlined; with no
- argument, the next line is underlined. If LINES is zero or
- negative, stop the effects of `ul' (if it was active). Requests
- and empty lines do not count for computing the number of underlined
- input lines, even if they produce some output like `tl'. Lines
- inserted by macros (e.g. invoked by a trap) do count.
-
- At the beginning of `ul', the current font is stored and the
- underline font is activated. Within the span of a `ul' request,
- it is possible to change fonts, but after the last line affected by
- `ul' the saved font is restored.
-
- This number of lines still to be underlined is associated with the
- current environment (*note Environments::). The underline font
- can be changed with the `uf' request.
-
- The `ul' request does not underline spaces.
-
- -- Request: .cu [lines]
- The `cu' request is similar to `ul' but underlines spaces as well
- (if a TTY output device is used).
-
- -- Request: .uf font
- Set the underline font (globally) used by `ul' and `cu'. By
- default, this is the font at position 2. FONT can be either a
- non-negative font position or the name of a font.
-
- -- Request: .bd font [offset]
- -- Request: .bd font1 font2 [offset]
- -- Register: \n[.b]
- Artificially create a bold font by printing each glyph twice,
- slightly offset.
-
- Two syntax forms are available.
-
- * Imitate a bold font unconditionally. The first argument
- specifies the font to embolden, and the second is the number
- of basic units, minus one, by which the two glyphs are
- offset. If the second argument is missing, emboldening is
- turned off.
-
- FONT can be either a non-negative font position or the name
- of a font.
-
- OFFSET is available in the `.b' read-only register if a
- special font is active; in the `bd' request, its default unit
- is `u'.
-
- * Imitate a bold form conditionally. Embolden FONT1 by OFFSET
- only if font FONT2 is the current font. This command can be
- issued repeatedly to set up different emboldening values for
- different current fonts. If the second argument is missing,
- emboldening is turned off for this particular current font.
-
- This affects special fonts only (either set up with the
- `special' command in font files or with the `fspecial'
- request).
-
- -- Request: .cs font [width [em-size]]
- Switch to and from "constant glyph space mode". If activated, the
- width of every glyph is WIDTH/36 ems. The em size is given
- absolutely by EM-SIZE; if this argument is missing, the em value
- is taken from the current font size (as set with the `ps' request)
- when the font is effectively in use. Without second and third
- argument, constant glyph space mode is deactivated.
-
- Default scaling indicator for EM-SIZE is `z'; WIDTH is an integer.
-
-
-File: groff, Node: Ligatures and Kerning, Prev: Artificial Fonts, Up: Fonts and Symbols
-
-5.17.7 Ligatures and Kerning
-----------------------------
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph. For example, the letters `f' and `i' can form a
-ligature `fi' as in the word `file'. This produces a cleaner look
-(albeit subtle) to the printed output. Usually, ligatures are not
-available in fonts for TTY output devices.
-
- Most POSTSCRIPT fonts support the fi and fl ligatures. The C/A/T
-typesetter that was the target of AT&T `troff' also supported `ff',
-`ffi', and `ffl' ligatures. Advanced typesetters or `expert' fonts may
-include ligatures for `ft' and `ct', although GNU `troff' does not
-support these (yet).
-
- Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the `char' request (and its
-siblings) are taken into account.
-
- -- Request: .lg [flag]
- -- Register: \n[.lg]
- Switch the ligature mechanism on or off; if the parameter is
- non-zero or missing, ligatures are enabled, otherwise disabled.
- Default is on. The current ligature mode can be found in the
- read-only number register `.lg' (set to 1 or 2 if ligatures are
- enabled, 0 otherwise).
-
- Setting the ligature mode to 2 enables the two-character ligatures
- (fi, fl, and ff) and disables the three-character ligatures (ffi
- and ffl).
-
- "Pairwise kerning" is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability. In
-most cases (but not always) the distance is decreased. Typewriter-like
-fonts and fonts for terminals where all glyphs have the same width
-don't use kerning.
-
- -- Request: .kern [flag]
- -- Register: \n[.kern]
- Switch kerning on or off. If the parameter is non-zero or missing,
- enable pairwise kerning, otherwise disable it. The read-only
- number register `.kern' is set to 1 if pairwise kerning is enabled,
- 0 otherwise.
-
- If the font description file contains pairwise kerning information,
- glyphs from that font are kerned. Kerning between two glyphs can
- be inhibited by placing `\&' between them: `V\&A'.
-
- *Note Font File Format::.
-
- "Track kerning" expands or reduces the space between glyphs. This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column. It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
- -- Request: .tkf f s1 n1 s2 n2
- Enable track kerning for font F. If the current font is F the
- width of every glyph is increased by an amount between N1 and N2
- (N1, N2 can be negative); if the current point size is less than
- or equal to S1 the width is increased by N1; if it is greater than
- or equal to S2 the width is increased by N2; if the point size is
- greater than or equal to S1 and less than or equal to S2 the
- increase in width is a linear function of the point size.
-
- The default scaling indicator is `z' for S1 and S2, `p' for N1 and
- N2.
-
- Note that the track kerning amount is added even to the rightmost
- glyph in a line; for large values it is thus recommended to
- increase the line length by the same amount to compensate it.
-
- Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed. There are two escapes to help
-with this.
-
- -- Escape: \/
- Increase the width of the preceding glyph so that the spacing
- between that glyph and the following glyph is correct if the
- following glyph is a roman glyph. For example, if an italic `f'
- is immediately followed by a roman right parenthesis, then in many
- fonts the top right portion of the `f' overlaps the top left of
- the right parenthesis. Use this escape sequence whenever an
- italic glyph is immediately followed by a roman glyph without any
- intervening space. This small amount of space is also called
- "italic correction".
-
-
- -- Escape: \,
- Modify the spacing of the following glyph so that the spacing
- between that glyph and the preceding glyph is correct if the
- preceding glyph is a roman glyph. Use this escape sequence
- whenever a roman glyph is immediately followed by an italic glyph
- without any intervening space. In analogy to above, this space
- could be called "left italic correction", but this term isn't used
- widely.
-
-
- -- Escape: \&
- Insert a zero-width character, which is invisible. Its intended
- use is to stop interaction of a character with its surrounding.
-
- * It prevents the insertion of extra space after an
- end-of-sentence character.
-
-
- Test.
- Test.
- => Test. Test.
- Test.\&
- Test.
- => Test. Test.
-
- * It prevents interpretation of a control character at the
- beginning of an input line.
-
-
- .Test
- => warning: `Test' not defined
- \&.Test
- => .Test
-
- * It prevents kerning between two glyphs.
-
- * It is needed to map an arbitrary character to nothing in the
- `tr' request (*note Character Translations::).
-
- -- Escape: \)
- This escape is similar to `\&' except that it behaves like a
- character declared with the `cflags' request to be transparent for
- the purposes of an end-of-sentence character.
-
- Its main usage is in macro definitions to protect against arguments
- starting with a control character.
-
-
- .de xxx
- \)\\$1
- ..
- .de yyy
- \&\\$1
- ..
- This is a test.\c
- .xxx '
- This is a test.
- =>This is a test.' This is a test.
- This is a test.\c
- .yyy '
- This is a test.
- =>This is a test.' This is a test.
-
-
-
-File: groff, Node: Sizes, Next: Strings, Prev: Fonts and Symbols, Up: gtroff Reference
-
-5.18 Sizes
-==========
-
-`gtroff' uses two dimensions with each line of text, type size and
-vertical spacing. The "type size" is approximately the height of the
-tallest glyph.(1) (*note Sizes-Footnote-1::) "Vertical spacing" is the
-amount of space `gtroff' allows for a line of text; normally, this is
-about 20% larger than the current type size. Ratios smaller than this
-can result in hard-to-read text; larger than this, it spreads the text
-out more vertically (useful for term papers). By default, `gtroff'
-uses 10 point type on 12 point spacing.
-
- The difference between type size and vertical spacing is known, by
-typesetters, as "leading" (this is pronounced `ledding').
-
-* Menu:
-
-* Changing Type Sizes::
-* Fractional Type Sizes::
-
-
-File: groff, Node: Sizes-Footnotes, Up: Sizes
-
- (1) This is usually the parenthesis. Note that in most cases the
-real dimensions of the glyphs in a font are _not_ related to its type
-size! For example, the standard POSTSCRIPT font families `Times
-Roman', `Helvetica', and `Courier' can't be used together at 10pt; to
-get acceptable output, the size of `Helvetica' has to be reduced by one
-point, and the size of `Courier' must be increased by one point.
-
-
-File: groff, Node: Changing Type Sizes, Next: Fractional Type Sizes, Prev: Sizes, Up: Sizes
-
-5.18.1 Changing Type Sizes
---------------------------
-
- -- Request: .ps [size]
- -- Request: .ps +size
- -- Request: .ps -size
- -- Escape: \ssize
- -- Register: \n[.s]
- Use the `ps' request or the `\s' escape to change (increase,
- decrease) the type size (in points). Specify SIZE as either an
- absolute point size, or as a relative change from the current size.
- The size 0, or no argument, goes back to the previous size.
-
- Default scaling indicator of `size' is `z'. If `size' is zero or
- negative, it is set to 1u.
-
- The read-only number register `.s' returns the point size in
- points as a decimal fraction. This is a string. To get the point
- size in scaled points, use the `.ps' register instead.
-
- `.s' is associated with the current environment (*note
- Environments::).
-
-
- snap, snap,
- .ps +2
- grin, grin,
- .ps +2
- wink, wink, \s+2nudge, nudge,\s+8 say no more!
- .ps 10
-
- The `\s' escape may be called in a variety of ways. Much like
- other escapes there must be a way to determine where the argument
- ends and the text begins. Any of the following forms are valid:
-
- `\sN'
- Set the point size to N points. N must be either 0 or in the
- range 4 to 39.
-
- `\s+N'
- `\s-N'
- Increase or decrease the point size by N points. N must be
- exactly one digit.
-
- `\s(NN'
- Set the point size to NN points. NN must be exactly two
- digits.
-
- `\s+(NN'
- `\s-(NN'
- `\s(+NN'
- `\s(-NN'
- Increase or decrease the point size by NN points. NN must be
- exactly two digits.
-
- Note that `\s' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \s[20]x\s[0]
-
- *Note Fractional Type Sizes::, for yet another syntactical form of
- using the `\s' escape.
-
- -- Request: .sizes s1 s2 ... sn [0]
- Some devices may only have certain permissible sizes, in which case
- `gtroff' rounds to the nearest permissible size. The `DESC' file
- specifies which sizes are permissible for the device.
-
- Use the `sizes' request to change the permissible sizes for the
- current output device. Arguments are in scaled points; the
- `sizescale' line in the `DESC' file for the output device provides
- the scaling factor. For example, if the scaling factor is 1000,
- then the value 12000 is 12 points.
-
- Each argument can be a single point size (such as `12000'), or a
- range of sizes (such as `4000-72000'). You can optionally end the
- list with a zero.
-
- -- Request: .vs [space]
- -- Request: .vs +space
- -- Request: .vs -space
- -- Register: \n[.v]
- Change (increase, decrease) the vertical spacing by SPACE. The
- default scaling indicator is `p'.
-
- If `vs' is called without an argument, the vertical spacing is
- reset to the previous value before the last call to `vs'.
-
- `gtroff' creates a warning of type `range' if SPACE is negative;
- the vertical spacing is then set to smallest positive value, the
- vertical resolution (as given in the `.V' register).
-
- Note that `.vs 0' isn't saved in a diversion since it doesn't
- result in a vertical motion. You explicitly have to repeat this
- command before inserting the diversion.
-
- The read-only number register `.v' contains the current vertical
- spacing; it is associated with the current environment (*note
- Environments::).
-
- The effective vertical line spacing consists of four components.
-Breaking a line causes the following actions (in the given order).
-
- * Move the current point vertically by the "extra pre-vertical line
- space". This is the minimum value of all `\x' escapes with a
- negative argument in the current output line.
-
- * Move the current point vertically by the vertical line spacing as
- set with the `vs' request.
-
- * Output the current line.
-
- * Move the current point vertically by the "extra post-vertical line
- space". This is the maximum value of all `\x' escapes with a
- positive argument in the line which has just been output.
-
- * Move the current point vertically by the "post-vertical line
- spacing" as set with the `pvs' request.
-
- It is usually better to use `vs' or `pvs' instead of `ls' to produce
-double-spaced documents: `vs' and `pvs' have a finer granularity for
-the inserted vertical space compared to `ls'; furthermore, certain
-preprocessors assume single-spacing.
-
- *Note Manipulating Spacing::, for more details on the `\x' escape
-and the `ls' request.
-
- -- Request: .pvs [space]
- -- Request: .pvs +space
- -- Request: .pvs -space
- -- Register: \n[.pvs]
- Change (increase, decrease) the post-vertical spacing by SPACE.
- The default scaling indicator is `p'.
-
- If `pvs' is called without an argument, the post-vertical spacing
- is reset to the previous value before the last call to `pvs'.
-
- `gtroff' creates a warning of type `range' if SPACE is zero or
- negative; the vertical spacing is then set to zero.
-
- The read-only number register `.pvs' contains the current
- post-vertical spacing; it is associated with the current
- environment (*note Environments::).
-
-
-File: groff, Node: Fractional Type Sizes, Prev: Changing Type Sizes, Up: Sizes
-
-5.18.2 Fractional Type Sizes
-----------------------------
-
-A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
-specified in the `DESC' file (1 by default). There is a new scale
-indicator `z' which has the effect of multiplying by SIZESCALE.
-Requests and escape sequences in `gtroff' interpret arguments that
-represent a point size as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of `z'.
-Arguments treated in this way are the argument to the `ps' request, the
-third argument to the `cs' request, the second and fourth arguments to
-the `tkf' request, the argument to the `\H' escape sequence, and those
-variants of the `\s' escape sequence that take a numeric expression as
-their argument (see below).
-
- For example, suppose SIZESCALE is 1000; then a scaled point is
-equivalent to a millipoint; the request `.ps 10.25' is equivalent to
-`.ps 10.25z' and thus sets the point size to 10250 scaled points, which
-is equal to 10.25 points.
-
- `gtroff' disallows the use of the `z' scale indicator in instances
-where it would make no sense, such as a numeric expression whose
-default scale indicator was neither `u' nor `z'. Similarly it would
-make no sense to use a scaling indicator other than `z' or `u' in a
-numeric expression whose default scale indicator was `z', and so
-`gtroff' disallows this as well.
-
- There is also new scale indicator `s' which multiplies by the number
-of units in a scaled point. So, for example, `\n[.ps]s' is equal to
-`1m'. Be sure not to confuse the `s' and `z' scale indicators.
-
- -- Register: \n[.ps]
- A read-only number register returning the point size in scaled
- points.
-
- `.ps' is associated with the current environment (*note
- Environments::).
-
- -- Register: \n[.psr]
- -- Register: \n[.sr]
- The last-requested point size in scaled points is contained in the
- `.psr' read-only number register. The last requested point size
- in points as a decimal fraction can be found in `.sr'. This is a
- string-valued read-only number register.
-
- Note that the requested point sizes are device-independent, whereas
- the values returned by the `.ps' and `.s' registers are not. For
- example, if a point size of 11pt is requested, and a `sizes'
- request (or a `sizescale' line in a `DESC' file) specifies 10.95pt
- instead, this value is actually used.
-
- Both registers are associated with the current environment (*note
- Environments::).
-
- The `\s' escape has the following syntax for working with fractional
-type sizes:
-
-`\s[N]'
-`\s'N''
- Set the point size to N scaled points; N is a numeric expression
- with a default scale indicator of `z'.
-
-`\s[+N]'
-`\s[-N]'
-`\s+[N]'
-`\s-[N]'
-`\s'+N''
-`\s'-N''
-`\s+'N''
-`\s-'N''
- Increase or or decrease the point size by N scaled points; N is a
- numeric expression with a default scale indicator of `z'.
-
- *Note Font Files::.
-
-
-File: groff, Node: Strings, Next: Conditionals and Loops, Prev: Sizes, Up: gtroff Reference
-
-5.19 Strings
-============
-
-`gtroff' has string variables, which are entirely for user convenience
-(i.e. there are no built-in strings exept `.T', but even this is a
-read-write string variable).
-
- -- Request: .ds name [string]
- -- Request: .ds1 name [string]
- -- Escape: \*n
- -- Escape: \*(nm
- -- Escape: \*[name arg1 arg2 ...]
- Define and access a string variable NAME (one-character name N,
- two-character name NM). If NAME already exists, `ds' overwrites
- the previous definition. Only the syntax form using brackets can
- take arguments which are handled identically to macro arguments;
- the single exception is that a closing bracket as an argument must
- be enclosed in double quotes. *Note Request and Macro
- Arguments::, and *Note Parameters::.
-
- Example:
-
-
- .ds foo a \\$1 test
- .
- This is \*[foo nice].
- => This is a nice test.
-
- The `\*' escape "interpolates" (expands in-place) a
- previously-defined string variable. To be more precise, the stored
- string is pushed onto the input stack which is then parsed by
- `gtroff'. Similar to number registers, it is possible to nest
- strings, i.e. string variables can be called within string
- variables.
-
- If the string named by the `\*' escape does not exist, it is
- defined as empty, and a warning of type `mac' is emitted (see
- *Note Debugging::, for more details).
-
- *Caution:* Unlike other requests, the second argument to the `ds'
- request takes up the entire line including trailing spaces. This
- means that comments on a line with such a request can introduce
- unwanted space into a string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-
- Instead the comment should be put on another line or have the
- comment escape adjacent with the end of the string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
-
- To produce leading space the string can be started with a double
- quote. No trailing quote is needed; in fact, any trailing quote is
- included in your string.
-
-
- .ds sign " Yours in a white wine sauce,
-
- Strings are not limited to a single line of text. A string can
- span several lines by escaping the newlines with a backslash. The
- resulting string is stored _without_ the newlines.
-
-
- .ds foo lots and lots \
- of text are on these \
- next several lines
-
- It is not possible to have real newlines in a string. To put a
- single double quote character into a string, use two consecutive
- double quote characters.
-
- The `ds1' request turns off compatibility mode while interpreting
- a string. To be more precise, a "compatibility save" input token
- is inserted at the beginning of the string, and a "compatibility
- restore" input token at the end.
-
-
- .nr xxx 12345
- .ds aa The value of xxx is \\n[xxx].
- .ds1 bb The value of xxx ix \\n[xxx].
- .
- .cp 1
- .
- \*(aa
- => warning: number register `[' not defined
- => The value of xxx is 0xxx].
- \*(bb
- => The value of xxx ix 12345.
-
- Strings, macros, and diversions (and boxes) share the same name
- space. Internally, even the same mechanism is used to store them.
- This has some interesting consequences. For example, it is
- possible to call a macro with string syntax and vice versa.
-
-
- .de xxx
- a funny test.
- ..
- This is \*[xxx]
- => This is a funny test.
-
- .ds yyy a funny test
- This is
- .yyy
- => This is a funny test.
-
- Diversions and boxes can be also called with string syntax.
-
- Another consequence is that you can copy one-line diversions or
- boxes to a string.
-
-
- .di xxx
- a \fItest\fR
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => This is a test.
-
- As the previous example shows, it is possible to store formatted
- output in strings. The `\c' escape prevents the insertion of an
- additional blank line in the output.
-
- Copying diversions longer than a single output line produces
- unexpected results.
-
-
- .di xxx
- a funny
- .br
- test
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => test This is a funny.
-
- Usually, it is not predictable whether a diversion contains one or
- more output lines, so this mechanism should be avoided. With UNIX
- `troff', this was the only solution to strip off a final newline
- from a diversion. Another disadvantage is that the spaces in the
- copied string are already formatted, making them unstretchable.
- This can cause ugly results.
-
- A clean solution to this problem is available in GNU `troff',
- using the requests `chop' to remove the final newline of a
- diversion, and `unformat' to make the horizontal spaces
- stretchable again.
-
-
- .box xxx
- a funny
- .br
- test
- .br
- .box
- .chop xxx
- .unformat xxx
- This is \*[xxx].
- => This is a funny test.
-
- *Note Gtroff Internals::, for more information.
-
- -- Request: .as name [string]
- -- Request: .as1 name [string]
- The `as' request is similar to `ds' but appends STRING to the
- string stored as NAME instead of redefining it. If NAME doesn't
- exist yet, it is created.
-
-
- .as sign " with shallots, onions and garlic,
-
- The `as1' request is similar to `as', but compatibility mode is
- switched off while the appended string is interpreted. To be more
- precise, a "compatibility save" input token is inserted at the
- beginning of the appended string, and a "compatibility restore"
- input token at the end.
-
- Rudimentary string manipulation routines are given with the next two
-requests.
-
- -- Request: .substring str n1 [n2]
- Replace the string named STR with the substring defined by the
- indices N1 and N2. The first character in the string has index 0.
- If N2 is omitted, it is taken to be equal to the string's length.
- If the index value N1 or N2 is negative, it is counted from the
- end of the string, going backwards: The last character has
- index -1, the character before the last character has index -2,
- etc.
-
-
- .ds xxx abcdefgh
- .substring xxx 1 -4
- \*[xxx]
- => bcde
-
-
- -- Request: .length reg str
- Compute the number of characters of STR and return it in the
- number register REG. If REG doesn't exist, it is created. `str'
- is read in copy mode.
-
-
- .ds xxx abcd\h'3i'efgh
- .length yyy \*[xxx]
- \n[yyy]
- => 14
-
-
- -- Request: .rn xx yy
- Rename the request, macro, diversion, or string XX to YY.
-
- -- Request: .rm xx
- Remove the request, macro, diversion, or string XX. `gtroff'
- treats subsequent invocations as if the object had never been
- defined.
-
- -- Request: .als new old
- Create an alias named NEW for the request, string, macro, or
- diversion object named OLD. The new name and the old name are
- exactly equivalent (it is similar to a hard rather than a soft
- link). If OLD is undefined, `gtroff' generates a warning of type
- `mac' and ignores the request.
-
- -- Request: .chop xx
- Remove (chop) the last character from the macro, string, or
- diversion named XX. This is useful for removing the newline from
- the end of diversions that are to be interpolated as strings.
- This command can be used repeatedly; see *Note Gtroff Internals::,
- for details on nodes inserted additionally by `gtroff'.
-
- *Note Identifiers::, and *Note Comments::.
-
-
-File: groff, Node: Conditionals and Loops, Next: Writing Macros, Prev: Strings, Up: gtroff Reference
-
-5.20 Conditionals and Loops
-===========================
-
-* Menu:
-
-* Operators in Conditionals::
-* if-else::
-* while::
-
-
-File: groff, Node: Operators in Conditionals, Next: if-else, Prev: Conditionals and Loops, Up: Conditionals and Loops
-
-5.20.1 Operators in Conditionals
---------------------------------
-
-In `if' and `while' requests, there are several more operators
-available:
-
-`e'
-`o'
- True if the current page is even or odd numbered (respectively).
-
-`n'
- True if the document is being processed in nroff mode (i.e., the
- `.nroff' command has been issued).
-
-`t'
- True if the document is being processed in troff mode (i.e., the
- `.troff' command has been issued).
-
-`v'
- Always false. This condition is for compatibility with other
- `troff' versions only (identifying a `-Tversatec' device).
-
-`'XXX'YYY''
- True if the string XXX is equal to the string YYY. Other
- characters can be used in place of the single quotes; the same set
- of delimiters as for the `\D' escape is used (*note Escapes::).
- `gtroff' formats the strings before being compared:
-
-
- .ie "|"\fR|\fP" \
- true
- .el \
- false
- => true
-
- The resulting motions, glyph sizes, and fonts have to match,(1)
- (*note Operators in Conditionals-Footnote-1::) and not the
- individual motion, size, and font requests. In the previous
- example, `|' and `\fR|\fP' both result in a roman `|' glyph with
- the same point size and at the same location on the page, so the
- strings are equal. If `.ft I' had been added before the `.ie',
- the result would be "false" because (the first) `|' produces an
- italic `|' rather than a roman one.
-
-`r XXX'
- True if there is a number register named XXX.
-
-`d XXX'
- True if there is a string, macro, diversion, or request named XXX.
-
-`m XXX'
- True if there is a color named XXX.
-
-`c G'
- True if there is a glyph G available(2) (*note Operators in
- Conditionals-Footnote-2::); G is either an ASCII character or a
- special character (`\(GG' or `\[GGG]'); the condition is also true
- if G has been defined by the `char' request.
-
-`F FONT'
- True if a font named FONT exists. FONT is handled as if it was
- opened with the `ft' request (this is, font translation and styles
- are applied), without actually mounting it.
-
- This test doesn't load the complete font but only its header to
- verify its validity.
-
-`S STYLE'
- True if style STYLE has been registered. Font translation is
- applied.
-
- Note that these operators can't be combined with other operators like
-`:' or `&'; only a leading `!' (without whitespace between the
-exclamation mark and the operator) can be used to negate the result.
-
-
- .nr xxx 1
- .ie !r xxx \
- true
- .el \
- false
- => false
-
- A whitespace after `!' always evaluates to zero (this bizarre
-behaviour is due to compatibility with UNIX `troff').
-
-
- .nr xxx 1
- .ie ! r xxx \
- true
- .el \
- false
- => r xxx true
-
- It is possible to omit the whitespace before the argument to the
-`r', `d', and `c' operators.
-
- *Note Expressions::.
-
-
-File: groff, Node: Operators in Conditionals-Footnotes, Up: Operators in Conditionals
-
- (1) The created output nodes must be identical. *Note Gtroff
-Internals::.
-
- (2) The name of this conditional operator is a misnomer since it
-tests names of output glyphs.
-
-
-File: groff, Node: if-else, Next: while, Prev: Operators in Conditionals, Up: Conditionals and Loops
-
-5.20.2 if-else
---------------
-
-`gtroff' has if-then-else constructs like other languages, although the
-formatting can be painful.
-
- -- Request: .if expr anything
- Evaluate the expression EXPR, and executes ANYTHING (the remainder
- of the line) if EXPR evaluates to a value greater than zero
- (true). ANYTHING is interpreted as though it was on a line by
- itself (except that leading spaces are swallowed). *Note
- Expressions::, for more info.
-
-
- .nr xxx 1
- .nr yyy 2
- .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
- => true
-
-
- -- Request: .nop anything
- Executes ANYTHING. This is similar to `.if 1'.
-
- -- Request: .ie expr anything
- -- Request: .el anything
- Use the `ie' and `el' requests to write an if-then-else. The
- first request is the `if' part and the latter is the `else' part.
-
-
- .ie n .ls 2 \" double-spacing in nroff
- .el .ls 1 \" single-spacing in troff
-
-
- -- Escape: \{
- -- Escape: \}
- In many cases, an if (or if-else) construct needs to execute more
- than one request. This can be done using the `\{' and `\}'
- escapes. The following example shows the possible ways to use
- these escapes (note the position of the opening and closing
- braces).
-
-
- .ie t \{\
- . ds lq ``
- . ds rq ''
- .\}
- .el \
- .\{\
- . ds lq "
- . ds rq "\}
-
-
- *Note Expressions::.
-
-
-File: groff, Node: while, Prev: if-else, Up: Conditionals and Loops
-
-5.20.3 while
-------------
-
-`gtroff' provides a looping construct using the `while' request, which
-is used much like the `if' (and related) requests.
-
- -- Request: .while expr anything
- Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
- remainder of the line) until EXPR evaluates to 0.
-
-
- .nr a 0 1
- .while (\na < 9) \{\
- \n+a,
- .\}
- \n+a
- => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-
- Some remarks.
-
- * The body of a `while' request is treated like the body of a
- `de' request: `gtroff' temporarily stores it in a macro which
- is deleted after the loop has been exited. It can
- considerably slow down a macro if the body of the `while'
- request (within the macro) is large. Each time the macro is
- executed, the `while' body is parsed and stored again as a
- temporary macro.
-
-
- .de xxx
- . nr num 10
- . while (\\n[num] > 0) \{\
- . \" many lines of code
- . nr num -1
- . \}
- ..
-
- The traditional and ofter better solution (UNIX `troff'
- doesn't have the `while' request) is to use a recursive macro
- instead which is parsed only once during its definition.
-
-
- .de yyy
- . if (\\n[num] > 0) \{\
- . \" many lines of code
- . nr num -1
- . yyy
- . \}
- ..
- .
- .de xxx
- . nr num 10
- . yyy
- ..
-
- Note that the number of available recursion levels is set
- to 1000 (this is a compile-time constant value of `gtroff').
-
- * The closing brace of a `while' body must end a line.
-
-
- .if 1 \{\
- . nr a 0 1
- . while (\n[a] < 10) \{\
- . nop \n+[a]
- .\}\}
- => unbalanced \{ \}
-
-
- -- Request: .break
- Break out of a `while' loop. Be sure not to confuse this with the
- `br' request (causing a line break).
-
- -- Request: .continue
- Finish the current iteration of a `while' loop, immediately
- restarting the next iteration.
-
- *Note Expressions::.
-
-
-File: groff, Node: Writing Macros, Next: Page Motions, Prev: Conditionals and Loops, Up: gtroff Reference
-
-5.21 Writing Macros
-===================
-
-A "macro" is a collection of text and embedded commands which can be
-invoked multiple times. Use macros to define common operations.
-
- -- Request: .de name [end]
- -- Request: .de1 name [end]
- -- Request: .dei name [end]
- -- Request: .dei1 name [end]
- Define a new macro named NAME. `gtroff' copies subsequent lines
- (starting with the next one) into an internal buffer until it
- encounters the line `..' (two dots). The optional second argument
- to `de' changes this to a macro to `.END'.
-
- There can be whitespace after the first dot in the line containing
- the ending token (either `.' or macro `END').
-
- Here a small example macro called `P' which causes a break and
- inserts some vertical space. It could be used to separate
- paragraphs.
-
-
- .de P
- . br
- . sp .8v
- ..
-
- The following example defines a macro within another. Remember
- that expansion must be protected twice; once for reading the macro
- and once for executing.
-
-
- \# a dummy macro to avoid a warning
- .de end
- ..
- .
- .de foo
- . de bar end
- . nop \f[B]Hallo \\\\$1!\f[]
- . end
- ..
- .
- .foo
- .bar Joe
- => Hallo Joe!
-
- Since `\f' has no expansion, it isn't necessary to protect its
- backslash. Had we defined another macro within `bar' which takes
- a parameter, eight backslashes would be necessary before `$1'.
-
- The `de1' request turns off compatibility mode while executing the
- macro. On entry, the current compatibility mode is saved and
- restored at exit.
-
-
- .nr xxx 12345
- .
- .de aa
- The value of xxx is \\n[xxx].
- ..
- .de1 bb
- The value of xxx ix \\n[xxx].
- ..
- .
- .cp 1
- .
- .aa
- => warning: number register `[' not defined
- => The value of xxx is 0xxx].
- .bb
- => The value of xxx ix 12345.
-
- The `dei' request defines a macro indirectly. That is, it expands
- strings whose names are NAME or END before performing the append.
-
- This:
-
-
- .ds xx aa
- .ds yy bb
- .dei xx yy
-
- is equivalent to:
-
-
- .de aa bb
-
- The `dei1' request is similar to `dei' but with compatibility mode
- switched off during execution of the defined macro.
-
- If compatibility mode is on, `de' (and `dei') behave similar to
- `de1' (and `dei1'): A `compatibility save' token is inserted at
- the beginning, and a `compatibility restore' token at the end, with
- compatibility mode switched on during execution. *Note Gtroff
- Internals::, for more information on switching compatibility mode
- on and off in a single document.
-
- Using `trace.tmac', you can trace calls to `de' and `de1'.
-
- Note that macro identifiers are shared with identifiers for
- strings and diversions.
-
- -- Request: .am name [end]
- -- Request: .am1 name [end]
- -- Request: .ami name [end]
- -- Request: .ami1 name [end]
- Works similarly to `de' except it appends onto the macro named
- NAME. So, to make the previously defined `P' macro actually do
- indented instead of block paragraphs, add the necessary code to the
- existing macro like this:
-
-
- .am P
- .ti +5n
- ..
-
- The `am1' request turns off compatibility mode while executing the
- appended macro piece. To be more precise, a "compatibility save"
- input token is inserted at the beginning of the appended code, and
- a "compatibility restore" input token at the end.
-
- The `ami' request appends indirectly, meaning that `gtroff'
- expands strings whose names are NAME or END before performing the
- append.
-
- The `ami1' request is similar to `ami' but compatibility mode is
- switched off during execution of the defined macro.
-
- Using `trace.tmac', you can trace calls to `am' and `am1'.
-
- *Note Strings::, for the `als' request to rename a macro.
-
- The `de', `am', `di', `da', `ds', and `as' requests (together with
-its variants) only create a new object if the name of the macro,
-diversion or string diversion is currently undefined or if it is
-defined to be a request; normally they modify the value of an existing
-object.
-
- -- Request: .return [anything]
- Exit a macro, immediately returning to the caller.
-
- If called with an argument, exit twice, namely the current macro
- and the macro one level higher. This is used to define a wrapper
- macro for `return' in `trace.tmac'.
-
-* Menu:
-
-* Copy-in Mode::
-* Parameters::
-
-
-File: groff, Node: Copy-in Mode, Next: Parameters, Prev: Writing Macros, Up: Writing Macros
-
-5.21.1 Copy-in Mode
--------------------
-
-When `gtroff' reads in the text for a macro, string, or diversion, it
-copies the text (including request lines, but excluding escapes) into
-an internal buffer. Escapes are converted into an internal form,
-except for `\n', `\$', `\*', `\\' and `\<RET>' which are evaluated and
-inserted into the text where the escape was located. This is known as
-"copy-in" mode or "copy" mode.
-
- What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash. Compare this to the `\def' and
-`\edef' commands in TeX.
-
- The following example prints the numbers 20 and 10:
-
-
- .nr x 20
- .de y
- .nr x 10
- \&\nx
- \&\\nx
- ..
- .y
-
-
-File: groff, Node: Parameters, Prev: Copy-in Mode, Up: Writing Macros
-
-5.21.2 Parameters
------------------
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
- -- Register: \n[.$]
- The number of arguments passed to a macro or string. This is a
- read-only number register.
-
- Note that the `shift' request can change its value.
-
- Any individual argument can be retrieved with one of the following
-escapes:
-
- -- Escape: \$n
- -- Escape: \$(nn
- -- Escape: \$[nnn]
- Retrieve the Nth, NNth or NNNth argument. As usual, the first
- form only accepts a single number (larger than zero), the second a
- two-digit number (larger or equal to 10), and the third any
- positive integer value (larger than zero). Macros and strings can
- have an unlimited number of arguments. Note that due to copy-in
- mode, use two backslashes on these in actual use to prevent
- interpolation until the macro is actually invoked.
-
- -- Request: .shift [n]
- Shift the arguments 1 position, or as many positions as specified
- by its argument. After executing this request, argument I becomes
- argument I-N; arguments 1 to N are no longer available. Shifting
- by negative amounts is currently undefined.
-
- The register `.$' is adjusted accordingly.
-
- -- Escape: \$*
- -- Escape: \$@
- In some cases it is convenient to use all of the arguments at once
- (for example, to pass the arguments along to another macro). The
- `\$*' escape concatenates all the arguments separated by spaces. A
- similar escape is `\$@', which concatenates all the arguments with
- each surrounded by double quotes, and separated by spaces. If not
- in compatibility mode, the input level of double quotes is
- preserved (see *Note Request and Macro Arguments::).
-
- -- Escape: \$0
- The name used to invoke the current macro. The `als' request can
- make a macro have more than one name.
-
-
- .de generic-macro
- . ...
- . if \\n[error] \{\
- . tm \\$0: Houston, we have a problem.
- . return
- . \}
- ..
- .
- .als foo generic-macro
- .als bar generic-macro
-
-
- *Note Request and Macro Arguments::.
-
-
-File: groff, Node: Page Motions, Next: Drawing Requests, Prev: Writing Macros, Up: gtroff Reference
-
-5.22 Page Motions
-=================
-
-*Note Manipulating Spacing::, for a discussion of the main request for
-vertical motion, `sp'.
-
- -- Request: .mk [reg]
- -- Request: .rt [dist]
- The request `mk' can be used to mark a location on a page, for
- movement to later. This request takes a register name as an
- argument in which to store the current page location. With no
- argument it stores the location in an internal register. The
- results of this can be used later by the `rt' or the `sp' request
- (or the `\v' escape).
-
- The `rt' request returns _upwards_ to the location marked with the
- last `mk' request. If used with an argument, return to a position
- which distance from the top of the page is DIST (no previous call
- to `mk' is necessary in this case). Default scaling indicator is
- `v'.
-
- Here a primitive solution for a two-column macro.
-
-
- .nr column-length 1.5i
- .nr column-gap 4m
- .nr bottom-margin 1m
- .
-
-
- .de 2c
- . br
- . mk
- . ll \\n[column-length]u
- . wh -\\n[bottom-margin]u 2c-trap
- . nr right-side 0
- ..
- .
-
-
- .de 2c-trap
- . ie \\n[right-side] \{\
- . nr right-side 0
- . po -(\\n[column-length]u + \\n[column-gap]u)
- . \" remove trap
- . wh -\\n[bottom-margin]u
- . \}
- . el \{\
- . \" switch to right side
- . nr right-side 1
- . po +(\\n[column-length]u + \\n[column-gap]u)
- . rt
- . \}
- ..
- .
-
-
- .pl 1.5i
- .ll 4i
- This is a small test which shows how the
- rt request works in combination with mk.
-
- .2c
- Starting here, text is typeset in two columns.
- Note that this implementation isn't robust
- and thus not suited for a real two-column
- macro.
-
- Result:
-
-
- This is a small test which shows how the
- rt request works in combination with mk.
-
- Starting here, isn't robust
- text is typeset and thus not
- in two columns. suited for a
- Note that this real two-column
- implementation macro.
-
-
- The following escapes give fine control of movements about the page.
-
- -- Escape: \v'e'
- Move vertically, usually from the current location on the page (if
- no absolute position operator `|' is used). The argument E
- specifies the distance to move; positive is downwards and negative
- upwards. The default scaling indicator for this escape is `v'.
- Beware, however, that `gtroff' continues text processing at the
- point where the motion ends, so you should always balance motions
- to avoid interference with text processing.
-
- `\v' doesn't trigger a trap. This can be quite useful; for
- example, consider a page bottom trap macro which prints a marker
- in the margin to indicate continuation of a footnote or something
- similar.
-
- There are some special-case escapes for vertical motion.
-
- -- Escape: \r
- Move upwards 1v.
-
- -- Escape: \u
- Move upwards .5v.
-
- -- Escape: \d
- Move down .5v.
-
- -- Escape: \h'e'
- Move horizontally, usually from the current location (if no
- absolute position operator `|' is used). The expression E
- indicates how far to move: positive is rightwards and negative
- leftwards. The default scaling indicator for this escape is `m'.
-
- This horizontal space is not discarded at the end of a line. To
- insert discardable space of a certain length use the `ss' request.
-
- There are a number of special-case escapes for horizontal motion.
-
- -- Escape: \<SP>
- An unbreakable and unpaddable (i.e. not expanded during filling)
- space. (Note: This is a backslash followed by a space.)
-
- -- Escape: \~
- An unbreakable space that stretches like a normal inter-word space
- when a line is adjusted.
-
- -- Escape: \|
- A 1/6th em space. Ignored for TTY output devices (rounded to
- zero).
-
- -- Escape: \^
- A 1/12th em space. Ignored for TTY output devices (rounded to
- zero).
-
- -- Escape: \0
- A space the size of a digit.
-
- The following string sets the TeX logo:
-
-
- .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-
- -- Escape: \w'text'
- -- Register: \n[st]
- -- Register: \n[sb]
- -- Register: \n[rst]
- -- Register: \n[rsb]
- -- Register: \n[ct]
- -- Register: \n[ssc]
- -- Register: \n[skw]
- Return the width of the specified TEXT in basic units. This
- allows horizontal movement based on the width of some arbitrary
- text (e.g. given as an argument to a macro).
-
-
- The length of the string `abc' is \w'abc'u.
- => The length of the string `abc' is 72u.
-
- Font changes may occur in TEXT which don't affect current settings.
-
- After use, `\w' sets several registers:
-
- `st'
- `sb'
- The highest and lowest point of the baseline, respectively,
- in TEXT.
-
- `rst'
- `rsb'
- Like the `st' and `sb' registers, but takes account of the
- heights and depths of glyphs. With other words, this gives
- the highest and lowest point of TEXT. Values below the
- baseline are negative.
-
- `ct'
- Defines the kinds of glyphs occurring in TEXT:
-
- 0
- only short glyphs, no descenders or tall glyphs.
-
- 1
- at least one descender.
-
- 2
- at least one tall glyph.
-
- 3
- at least one each of a descender and a tall glyph.
-
- `ssc'
- The amount of horizontal space (possibly negative) that
- should be added to the last glyph before a subscript.
-
- `skw'
- How far to right of the center of the last glyph in the `\w'
- argument, the center of an accent from a roman font should be
- placed over that glyph.
-
- -- Escape: \kp
- -- Escape: \k(ps
- -- Escape: \k[position]
- Store the current horizontal position in the _input_ line in
- number register with name POSITION (one-character name P,
- two-character name PS). Use this, for example, to return to the
- beginning of a string for highlighting or other decoration.
-
- -- Register: \n[hp]
- The current horizontal position at the input line.
-
- -- Register: \n[.k]
- A read-only number register containing the current horizontal
- output position (relative to the current indentation).
-
- -- Escape: \o'abc'
- Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
- resulting spacing is the largest width of the affected glyphs.
-
- -- Escape: \zg
- Print glyph G with zero width, i.e., without spacing. Use this to
- overstrike glyphs left-aligned.
-
- -- Escape: \Z'anything'
- Print ANYTHING, then restore the horizontal and vertical position.
- The argument may not contain tabs or leaders.
-
- The following is an example of a strike-through macro:
-
-
- .de ST
- .nr ww \w'\\$1'
- \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
- ..
- .
- This is
- .ST "a test"
- an actual emergency!
-
-
-
-
-Local Variables:
-coding: iso-8859-1
-End:
diff --git a/contrib/groff/doc/groff-2 b/contrib/groff/doc/groff-2
deleted file mode 100644
index 1861ac7254e3..000000000000
--- a/contrib/groff/doc/groff-2
+++ /dev/null
@@ -1,4910 +0,0 @@
-This is groff, produced by makeinfo version 4.8 from ./groff.texinfo.
-
- This manual documents GNU `troff' version 1.19.2.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003, 2004, 2005 Free Software
-Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: Drawing Requests, Next: Traps, Prev: Page Motions, Up: gtroff Reference
-
-5.23 Drawing Requests
-=====================
-
-`gtroff' provides a number of ways to draw lines and other figures on
-the page. Used in combination with the page motion commands (see *Note
-Page Motions::, for more info), a wide variety of figures can be drawn.
-However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use graphic preprocessors like `gpic'
-or `ggrn'. *Note gpic::, and *Note ggrn::, for more information.
-
- All drawing is done via escapes.
-
- -- Escape: \l'l'
- -- Escape: \l'lg'
- Draw a line horizontally. L is the length of the line to be
- drawn. If it is positive, start the line at the current location
- and draw to the right; its end point is the new current location.
- Negative values are handled differently: The line starts at the
- current location and draws to the left, but the current location
- doesn't move.
-
- L can also be specified absolutely (i.e. with a leading `|') which
- draws back to the beginning of the input line. Default scaling
- indicator is `m'.
-
- The optional second parameter G is a glyph to draw the line with.
- If this second argument is not specified, `gtroff' uses the
- underscore glyph, `\[ru]'.
-
- To separate the two arguments (to prevent `gtroff' from
- interpreting a drawing glyph as a scaling indicator if the glyph is
- represented by a single character) use `\&'.
-
- Here a small useful example:
-
-
- .de box
- \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
- ..
-
- Note that this works by outputting a box rule (a vertical line),
- then the text given as an argument and then another box rule.
- Finally, the line drawing escapes both draw from the current
- location to the beginning of the _input_ line - this works because
- the line length is negative, not moving the current point.
-
- -- Escape: \L'l'
- -- Escape: \L'lg'
- Draw vertical lines. Its parameters are similar to the `\l'
- escape, except that the default scaling indicator is `v'. The
- movement is downwards for positive values, and upwards for
- negative values. The default glyph is the box rule glyph,
- `\[br]'. As with the vertical motion escapes, text processing
- blindly continues where the line ends.
-
-
- This is a \L'3v'test.
-
- Here the result, produced with `grotty'.
-
-
- This is a
- |
- |
- |test.
-
-
- -- Escape: \D'command arg ...'
- The `\D' escape provides a variety of drawing functions. Note
- that on character devices, only vertical and horizontal lines are
- supported within `grotty'; other devices may only support a subset
- of the available drawing functions.
-
- The default scaling indicator for all subcommands of `\D' is `m'
- for horizontal distances and `v' for vertical ones. Exceptions
- are `\D'f ...'' and `\D't ...'' which use `u' as the default, and
- `\D'FX ...'' which arguments are treated similar to the `defcolor'
- request.
-
- `\D'l DX DY''
- Draw a line from the current location to the relative point
- specified by (DX,DY), where positive values mean down and
- right, respectively. The end point of the line is the new
- current location.
-
- The following example is a macro for creating a box around a
- text string; for simplicity, the box margin is taken as a
- fixed value, 0.2m.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l (\\n[@wd]u + .4m) 0'\
- \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \\$1\
- \h'.2m'
- ..
-
- First, the width of the string is stored in register `@wd'.
- Then, four lines are drawn to form a box, properly offset by
- the box margin. The registers `rst' and `rsb' are set by the
- `\w' escape, containing the largest height and depth of the
- whole string.
-
- `\D'c D''
- Draw a circle with a diameter of D with the leftmost point at
- the current position. After drawing, the current location is
- positioned at the rightmost point of the circle.
-
- `\D'C D''
- Draw a solid circle with the same parameters and behaviour as
- an outlined circle. No outline is drawn.
-
- `\D'e X Y''
- Draw an ellipse with a horizontal diameter of X and a vertical
- diameter of Y with the leftmost point at the current position.
- After drawing, the current location is positioned at the
- rightmost point of the ellipse.
-
- `\D'E X Y''
- Draw a solid ellipse with the same parameters and behaviour
- as an outlined ellipse. No outline is drawn.
-
- `\D'a DX1 DY1 DX2 DY2''
- Draw an arc clockwise from the current location through the
- two specified relative locations (DX1,DY1) and (DX2,DY2).
- The coordinates of the first point are relative to the
- current position, and the coordinates of the second point are
- relative to the first point. After drawing, the current
- position is moved to the final point of the arc.
-
- `\D'~ DX1 DY1 DX2 DY2 ...''
- Draw a spline from the current location to the relative point
- (DX1,DY1) and then to (DX2,DY2), and so on. The current
- position is moved to the terminal point of the drawn curve.
-
- `\D'f N''
- Set the shade of gray to be used for filling solid objects
- to N; N must be an integer between 0 and 1000, where 0
- corresponds solid white and 1000 to solid black, and values
- in between correspond to intermediate shades of gray. This
- applies only to solid circles, solid ellipses, and solid
- polygons. By default, a level of 1000 is used.
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- Don't use this command! It has the serious drawback that it
- will be always rounded to the next integer multiple of the
- horizontal resolution (the value of the `hor' keyword in the
- `DESC' file). Use `\M' (*note Colors::) or `\D'Fg ...''
- instead.
-
- `\D'p DX1 DY1 DX2 DY2 ...''
- Draw a polygon from the current location to the relative
- position (DX1,DY1) and then to (DX2,DY2) and so on. When the
- specified data points are exhausted, a line is drawn back to
- the starting point. The current position is changed by
- adding the sum of all arguments with odd index to the actual
- horizontal position and the even ones to the vertical
- position.
-
- `\D'P DX1 DY1 DX2 DY2 ...''
- Draw a solid polygon with the same parameters and behaviour
- as an outlined polygon. No outline is drawn.
-
- Here a better variant of the box macro to fill the box with
- some color. Note that the box must be drawn before the text
- since colors in `gtroff' are not transparent; the filled
- polygon would hide the text completely.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \M[lightcyan]\
- \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
- (\\n[@wd]u + .4m) 0 \
- 0 (\\n[rst]u - \\n[rsb]u + .4m) \
- -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \M[]\
- \\$1\
- \h'.2m'
- ..
-
- `\D't N''
- Set the current line thickness to N machine units. A value of
- zero selects the smallest available line thickness. A
- negative value makes the line thickness proportional to the
- current point size (this is the default behaviour of AT&T
- `troff').
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- `\D'FSCHEME COLOR_COMPONENTS''
- Change current fill color. SCHEME is a single letter
- denoting the color scheme: `r' (rgb), `c' (cmy), `k' (cmyk),
- `g' (gray), or `d' (default color). The color components use
- exactly the same syntax as in the `defcolor' request (*note
- Colors::); the command `\D'Fd'' doesn't take an argument.
-
- _No_ position changing!
-
- Examples:
-
-
- \D'Fg .3' \" same gray as \D'f 700' \D'Fr #0000ff' \"
- blue
-
- *Note Graphics Commands::.
-
- -- Escape: \b'string'
- "Pile" a sequence of glyphs vertically, and center it vertically
- on the current line. Use it to build large brackets and braces.
-
- Here an example how to create a large opening brace:
-
-
- \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-
- The first glyph is on the top, the last glyph in STRING is at the
- bottom. Note that `gtroff' separates the glyphs vertically by 1m,
- and the whole object is centered 0.5m above the current baseline;
- the largest glyph width is used as the width for the whole object.
- This rather unflexible positioning algorithm doesn't work with
- `-Tdvi' since the bracket pieces vary in height for this device.
- Instead, use the `eqn' preprocessor.
-
- *Note Manipulating Spacing::, how to adjust the vertical spacing
- with the `\x' escape.
-
-
-File: groff, Node: Traps, Next: Diversions, Prev: Drawing Requests, Up: gtroff Reference
-
-5.24 Traps
-==========
-
-"Traps" are locations, which, when reached, call a specified macro.
-These traps can occur at a given location on the page, at a given
-location in the current diversion, at a blank line, after a certain
-number of input lines, or at the end of input.
-
- Setting a trap is also called "planting". It is also said that a
-trap is "sprung" if the associated macro is executed.
-
-* Menu:
-
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* End-of-input Traps::
-
-
-File: groff, Node: Page Location Traps, Next: Diversion Traps, Prev: Traps, Up: Traps
-
-5.24.1 Page Location Traps
---------------------------
-
-"Page location traps" perform an action when `gtroff' reaches or passes
-a certain vertical location on the page. Page location traps have a
-variety of purposes, including:
-
- * setting headers and footers
-
- * setting body text in multiple columns
-
- * setting footnotes
-
- -- Request: .vpt flag
- -- Register: \n[.vpt]
- Enable vertical position traps if FLAG is non-zero, or disables
- them otherwise. Vertical position traps are traps set by the `wh'
- or `dt' requests. Traps set by the `it' request are not vertical
- position traps. The parameter that controls whether vertical
- position traps are enabled is global. Initially vertical position
- traps are enabled. The current setting of this is available in the
- `.vpt' read-only number register.
-
- Note that a page can't be ejected if `vpt' is set to zero.
-
- -- Request: .wh dist [macro]
- Set a page location trap. Non-negative values for DIST set the
- trap relative to the top of the page; negative values set the trap
- relative to the bottom of the page. Default scaling indicator is
- `v'.
-
- MACRO is the name of the macro to execute when the trap is sprung.
- If MACRO is missing, remove the first trap (if any) at DIST.
-
- The following is a simple example of how many macro packages set
- headers and footers.
-
-
- .de hd \" Page header
- ' sp .5i
- . tl 'Title''date'
- ' sp .3i
- ..
- .
- .de fo \" Page footer
- ' sp 1v
- . tl ''%''
- ' bp
- ..
- .
- .wh 0 hd \" trap at top of the page
- .wh -1i fo \" trap one inch from bottom
-
- A trap at or below the bottom of the page is ignored; it can be
- made active by either moving it up or increasing the page length
- so that the trap is on the page.
-
- It is possible to have more than one trap at the same location; to
- do so, the traps must be defined at different locations, then
- moved together with the `ch' request; otherwise the second trap
- would replace the first one. Earlier defined traps hide later
- defined traps if moved to the same position (the many empty lines
- caused by the `bp' request are omitted in the following example):
-
-
- .de a
- . nop a
- ..
- .de b
- . nop b
- ..
- .de c
- . nop c
- ..
- .
- .wh 1i a
- .wh 2i b
- .wh 3i c
- .bp
- => a b c
-
-
- .ch b 1i
- .ch c 1i
- .bp
- => a
-
-
- .ch a 0.5i
- .bp
- => a b
-
-
- -- Register: \n[.t]
- A read-only number register holding the distance to the next trap.
-
- If there are no traps between the current position and the bottom
- of the page, it contains the distance to the page bottom. In a
- diversion, the distance to the page bottom is infinite (the
- returned value is the biggest integer which can be represented in
- `groff') if there are no diversion traps.
-
- -- Request: .ch macro [dist]
- Change the location of a trap. The first argument is the name of
- the macro to be invoked at the trap, and the second argument is
- the new location for the trap (note that the parameters are
- specified in opposite order as in the `wh' request). This is
- useful for building up footnotes in a diversion to allow more
- space at the bottom of the page for them.
-
- Default scaling indicator for DIST is `v'. If DIST is missing,
- the trap is removed.
-
-
- -- Register: \n[.ne]
- The read-only number register `.ne' contains the amount of space
- that was needed in the last `ne' request that caused a trap to be
- sprung. Useful in conjunction with the `.trunc' register. *Note
- Page Control::, for more information.
-
- Since the `.ne' register is only set by traps it doesn't make much
- sense to use it outside of trap macros.
-
- -- Register: \n[.trunc]
- A read-only register containing the amount of vertical space
- truncated by the most recently sprung vertical position trap, or,
- if the trap was sprung by an `ne' request, minus the amount of
- vertical motion produced by the `ne' request. In other words, at
- the point a trap is sprung, it represents the difference of what
- the vertical position would have been but for the trap, and what
- the vertical position actually is.
-
- Since the `.trunc' register is only set by traps it doesn't make
- much sense to use it outside of trap macros.
-
- -- Register: \n[.pe]
- A read-only register which is set to 1 while a page is ejected with
- the `bp' request (or by the end of input).
-
- Outside of traps this register is always zero. In the following
- example, only the second call to `x' is caused by `bp'.
-
-
- .de x
- \&.pe=\\n[.pe]
- .br
- ..
- .wh 1v x
- .wh 4v x
- A line.
- .br
- Another line.
- .br
- => A line.
- .pe=0
- Another line.
-
- .pe=1
-
-
- An important fact to consider while designing macros is that
-diversions and traps do not interact normally. For example, if a trap
-invokes a header macro (while outputting a diversion) which tries to
-change the font on the current page, the effect will not be visible
-before the diversion has completely been printed (except for input
-protected with `\!' or `\?') since the data in the diversion is already
-formatted. In most cases, this is not the expected behaviour.
-
-
-File: groff, Node: Diversion Traps, Next: Input Line Traps, Prev: Page Location Traps, Up: Traps
-
-5.24.2 Diversion Traps
-----------------------
-
- -- Request: .dt [dist macro]
- Set a trap _within_ a diversion. DIST is the location of the trap
- (identical to the `wh' request; default scaling indicator is `v')
- and MACRO is the name of the macro to be invoked. If called
- without arguments, the diversion trap is removed.
-
- Note that there exists only a single diversion trap.
-
- The number register `.t' still works within diversions. *Note
- Diversions::, for more information.
-
-
-File: groff, Node: Input Line Traps, Next: Blank Line Traps, Prev: Diversion Traps, Up: Traps
-
-5.24.3 Input Line Traps
------------------------
-
- -- Request: .it n macro
- -- Request: .itc n macro
- Set an input line trap. N is the number of lines of input which
- may be read before springing the trap, MACRO is the macro to be
- invoked. Request lines are not counted as input lines.
-
- For example, one possible use is to have a macro which prints the
- next N lines in a bold font.
-
-
- .de B
- . it \\$1 B-end
- . ft B
- ..
- .
- .de B-end
- . ft R
- ..
-
- The `itc' request is identical except that an interrupted text
- line (ending with `\c') is not counted as a separate line.
-
- Both requests are associated with the current environment (*note
- Environments::); switching to another environment disables the
- current input trap, and going back reactivates it, restoring the
- number of already processed lines.
-
-
-File: groff, Node: Blank Line Traps, Next: End-of-input Traps, Prev: Input Line Traps, Up: Traps
-
-5.24.4 Blank Line Traps
------------------------
-
- -- Request: .blm macro
- Set a blank line trap. `gtroff' executes MACRO when it encounters
- a blank line in the input file.
-
-
-File: groff, Node: End-of-input Traps, Prev: Blank Line Traps, Up: Traps
-
-5.24.5 End-of-input Traps
--------------------------
-
- -- Request: .em macro
- Set a trap at the end of input. MACRO is executed after the last
- line of the input file has been processed.
-
- For example, if the document had to have a section at the bottom
- of the last page for someone to approve it, the `em' request could
- be used.
-
-
- .de approval
- . ne 5v
- . sp |(\\n[.t] - 6v)
- . in +4i
- . lc _
- . br
- Approved:\t\a
- . sp
- Date:\t\t\a
- ..
- .
- .em approval
-
-
-
-File: groff, Node: Diversions, Next: Environments, Prev: Traps, Up: gtroff Reference
-
-5.25 Diversions
-===============
-
-In `gtroff' it is possible to "divert" text into a named storage area.
-Due to the similarity to defining macros it is sometimes said to be
-stored in a macro. This is used for saving text for output at a later
-time, which is useful for keeping blocks of text on the same page,
-footnotes, tables of contents, and indices.
-
- For orthogonality it is said that `gtroff' is in the "top-level
-diversion" if no diversion is active (i.e., the data is diverted to the
-output device).
-
- -- Request: .di macro
- -- Request: .da macro
- Begin a diversion. Like the `de' request, it takes an argument of
- a macro name to divert subsequent text into. The `da' macro
- appends to an existing diversion.
-
- `di' or `da' without an argument ends the diversion.
-
- -- Request: .box macro
- -- Request: .boxa macro
- Begin (or appends to) a diversion like the `di' and `da' requests.
- The difference is that `box' and `boxa' do not include a
- partially-filled line in the diversion.
-
- Compare this:
-
-
- Before the box.
- .box xxx
- In the box.
- .br
- .box
- After the box.
- .br
- => Before the box. After the box.
- .xxx
- => In the box.
-
- with this:
-
-
- Before the diversion.
- .di yyy
- In the diversion.
- .br
- .di
- After the diversion.
- .br
- => After the diversion.
- .yyy
- => Before the diversion. In the diversion.
-
- `box' or `boxa' without an argument ends the diversion.
-
- -- Register: \n[.z]
- -- Register: \n[.d]
- Diversions may be nested. The read-only number register `.z'
- contains the name of the current diversion (this is a string-valued
- register). The read-only number register `.d' contains the current
- vertical place in the diversion. If not in a diversion it is the
- same as register `nl'.
-
- -- Register: \n[.h]
- The "high-water mark" on the current page. It corresponds to the
- text baseline of the lowest line on the page. This is a read-only
- register.
-
-
- .tm .h==\n[.h], nl==\n[nl]
- => .h==0, nl==-1
- This is a test.
- .br
- .sp 2
- .tm .h==\n[.h], nl==\n[nl]
- => .h==40, nl==120
-
- As can be seen in the previous example, empty lines are not
- considered in the return value of the `.h' register.
-
- -- Register: \n[dn]
- -- Register: \n[dl]
- After completing a diversion, the read-write number registers `dn'
- and `dl' contain the vertical and horizontal size of the diversion.
- Note that only the just processed lines are counted: For the
- computation of `dn' and `dl', the requests `da' and `boxa' are
- handled as if `di' and `box' had been used - lines which have been
- already stored in a macro are not taken into account.
-
-
- .\" Center text both horizontally & vertically
- .
- .\" Enclose macro definitions in .eo and .ec
- .\" to avoid the doubling of the backslash
- .eo
- .\" macro .(c starts centering mode
- .de (c
- . br
- . ev (c
- . evc 0
- . in 0
- . nf
- . di @c
- ..
-
-
- .\" macro .)c terminates centering mode
- .de )c
- . br
- . ev
- . di
- . nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
- . sp \n[@s]u
- . ce 1000
- . @c
- . ce 0
- . sp \n[@s]u
- . br
- . fi
- . rr @s
- . rm @s
- . rm @c
- ..
- .\" End of macro definitions, restore escape mechanism
- .ec
-
-
- -- Escape: \!
- -- Escape: \?anything\?
- Prevent requests, macros, and escapes from being interpreted when
- read into a diversion. Both escapes take the given text and
- "transparently" embed it into the diversion. This is useful for
- macros which shouldn't be invoked until the diverted text is
- actually output.
-
- The `\!' escape transparently embeds text up to and including the
- end of the line. The `\?' escape transparently embeds text until
- the next occurrence of the `\?' escape. Example:
-
-
- \?ANYTHING\?
-
- ANYTHING may not contain newlines; use `\!' to embed newlines in
- a diversion. The escape sequence `\?' is also recognized in copy
- mode and turned into a single internal code; it is this code that
- terminates ANYTHING. Thus the following example prints 4.
-
-
- .nr x 1
- .nf
- .di d
- \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
- .di
- .nr x 2
- .di e
- .d
- .di
- .nr x 3
- .di f
- .e
- .di
- .nr x 4
- .f
-
- Both escapes read the data in copy mode.
-
- If `\!' is used in the top-level diversion, its argument is
- directly embedded into the `gtroff' intermediate output. This can
- be used for example to control a postprocessor which processes the
- data before it is sent to the device driver.
-
- The `\?' escape used in the top-level diversion produces no output
- at all; its argument is simply ignored.
-
- -- Request: .output string
- Emit STRING directly to the `gtroff' intermediate output (subject
- to copy-mode interpretation); this is similar to `\!' used at the
- top level. An initial double quote in STRING is stripped off to
- allow initial blanks.
-
- This request can't be used before the first page has started - if
- you get an error, simply insert `.br' before the `output' request.
-
- Without argument, `output' is ignored.
-
- Use with caution! It is normally only needed for mark-up used by a
- postprocessor which does something with the output before sending
- it to the output device, filtering out STRING again.
-
- -- Request: .asciify div
- "Unformat" the diversion specified by DIV in such a way that ASCII
- characters, characters translated with the `trin' request, space
- characters, and some escape sequences that were formatted and
- diverted are treated like ordinary input characters when the
- diversion is reread. It can be also used for gross hacks; for
- example, the following sets register `n' to 1.
-
-
- .tr @.
- .di x
- @nr n 1
- .br
- .di
- .tr @@
- .asciify x
- .x
-
- *Note Copy-in Mode::.
-
- -- Request: .unformat div
- Like `asciify', unformat the specified diversion. However,
- `unformat' only unformats spaces and tabs between words.
- Unformatted tabs are treated as input tokens, and spaces are
- stretchable again.
-
- The vertical size of lines is not preserved; glyph information
- (font, font size, space width, etc.) is retained.
-
-
-File: groff, Node: Environments, Next: Suppressing output, Prev: Diversions, Up: gtroff Reference
-
-5.26 Environments
-=================
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers. To solve this
-`gtroff' processes text in "environments". An environment contains
-most of the parameters that control text processing. It is possible to
-switch amongst these environments; by default `gtroff' processes text
-in environment 0. The following is the information kept in an
-environment.
-
- * font parameters (size, family, style, glyph height and slant, space
- and sentence space size)
-
- * page parameters (line length, title length, vertical spacing, line
- spacing, indentation, line numbering, centering, right-justifying,
- underlining, hyphenation data)
-
- * fill and adjust mode
-
- * tab stops, tab and leader characters, escape character, no-break
- and hyphen indicators, margin character data
-
- * partially collected lines
-
- * input traps
-
- * drawing and fill colours
-
- These environments may be given arbitrary names (see *Note
-Identifiers::, for more info). Old versions of `troff' only had
-environments named `0', `1', and `2'.
-
- -- Request: .ev [env]
- -- Register: \n[.ev]
- Switch to another environment. The argument ENV is the name of
- the environment to switch to. With no argument, `gtroff' switches
- back to the previous environment. There is no limit on the number
- of named environments; they are created the first time that they
- are referenced. The `.ev' read-only register contains the name or
- number of the current environment. This is a string-valued
- register.
-
- Note that a call to `ev' (with argument) pushes the previously
- active environment onto a stack. If, say, environments `foo',
- `bar', and `zap' are called (in that order), the first `ev'
- request without parameter switches back to environment `bar'
- (which is popped off the stack), and a second call switches back
- to environment `foo'.
-
- Here is an example:
-
-
- .ev footnote-env
- .fam N
- .ps 6
- .vs 8
- .ll -.5i
- .ev
-
- ...
-
- .ev footnote-env
- \(dg Note the large, friendly letters.
- .ev
-
-
- -- Request: .evc env
- Copy the environment ENV into the current environment.
-
- The following environment data is not copied:
-
- * Partially filled lines.
-
- * The status whether the previous line was interrupted.
-
- * The number of lines still to center, or to right-justify, or
- to underline (with or without underlined spaces); they are
- set to zero.
-
- * The status whether a temporary indentation is active.
-
- * Input traps and its associated data.
-
- * Line numbering mode is disabled; it can be reactivated with
- `.nm +0'.
-
- * The number of consecutive hyphenated lines (set to zero).
-
- -- Register: \n[.w]
- -- Register: \n[.cht]
- -- Register: \n[.cdp]
- -- Register: \n[.csk]
- The `\n[.w]' register contains the width of the last glyph added
- to the current environment.
-
- The `\n[.cht]' register contains the height of the last glyph
- added to the current environment.
-
- The `\n[.cdp]' register contains the depth of the last glyph added
- to the current environment. It is positive for glyphs extending
- below the baseline.
-
- The `\n[.csk]' register contains the "skew" (how far to the right
- of the glyph's center that `gtroff' should place an accent) of the
- last glyph added to the current environment.
-
- -- Register: \n[.n]
- The `\n[.n]' register contains the length of the previous output
- line in the current environment.
-
-
-File: groff, Node: Suppressing output, Next: Colors, Prev: Environments, Up: gtroff Reference
-
-5.27 Suppressing output
-=======================
-
- -- Escape: \Onum
- Disable or enable output depending on the value of NUM:
-
- `\O0'
- Disable any glyphs from being emitted to the device driver,
- provided that the escape occurs at the outer level (see
- `\O[3]' and `\O[4]'). Motion is not suppressed so
- effectively `\O[0]' means _pen up_.
-
- `\O1'
- Enable output of glyphs, provided that the escape occurs at
- the outer level.
-
- `\O0' and `\O1' also reset the four registers `opminx', `opminy',
- `opmaxx', and `opmaxy' to -1. *Note Register Index::. These four
- registers mark the top left and bottom right hand corners of a box
- which encompasses all written glyphs.
-
- For example the input text:
-
-
- Hello \O[0]world \O[1]this is a test.
-
- produces the following output:
-
-
- Hello this is a test.
-
- `\O2'
- Provided that the escape occurs at the outer level, enable
- output of glyphs and also write out to `stderr' the page
- number and four registers encompassing the glyphs previously
- written since the last call to `\O'.
-
- `\O3'
- Begin a nesting level. At start-up, `gtroff' is at outer
- level.
-
- `\O4'
- End a nesting level.
-
- `\O[5PFILENAME]'
- This escape is `grohtml' specific. Provided that this escape
- occurs at the outer nesting level write the `filename' to
- `stderr'. The position of the image, P, must be specified
- and must be one of `l', `r', `c', or `i' (left, right,
- centered, inline). FILENAME will be associated with the
- production of the next inline image.
-
-
-File: groff, Node: Colors, Next: I/O, Prev: Suppressing output, Up: gtroff Reference
-
-5.28 Colors
-===========
-
- -- Request: .color [n]
- -- Register: \n[.color]
- If N is missing or non-zero, activate colors (this is the default);
- otherwise, turn it off.
-
- The read-only number register `.color' is 1 if colors are active,
- 0 otherwise.
-
- Internally, `color' sets a global flag; it does not produce a
- token. Similar to the `cp' request, you should use it at the
- beginning of your document to control color output.
-
- Colors can be also turned off with the `-c' command line option.
-
- -- Request: .defcolor ident scheme color_components
- Define color with name IDENT. SCHEME can be one of the following
- values: `rgb' (three components), `cmy' (three components), `cmyk'
- (four components), and `gray' or `grey' (one component).
-
- Color components can be given either as a hexadecimal string or as
- positive decimal integers in the range 0-65535. A hexadecimal
- string contains all color components concatenated. It must start
- with either `#' or `##'; the former specifies hex values in the
- range 0-255 (which are internally multiplied by 257), the latter
- in the range 0-65535. Examples: `#FFC0CB' (pink), `##ffff0000ffff'
- (magenta). The default color name value is device-specific
- (usually black). It is possible that the default color for `\m'
- and `\M' is not identical.
-
- A new scaling indicator `f' has been introduced which multiplies
- its value by 65536; this makes it convenient to specify color
- components as fractions in the range 0 to 1 (1f equals 65536u).
- Example:
-
-
- .defcolor darkgreen rgb 0.1f 0.5f 0.2f
-
- Note that `f' is the default scaling indicator for the `defcolor'
- request, thus the above statement is equivalent to
-
-
- .defcolor darkgreen rgb 0.1 0.5 0.2
-
-
- -- Request: .gcolor [color]
- -- Escape: \mc
- -- Escape: \m(co
- -- Escape: \m[color]
- -- Register: \n[.m]
- Set (glyph) drawing color. The following examples show how to
- turn the next four words red.
-
-
- .gcolor red
- these are in red
- .gcolor
- and these words are in black.
-
-
- \m[red]these are in red\m[] and these words are in black.
-
- The escape `\m[]' returns to the previous color, as does a call to
- `gcolor' without an argument.
-
- The name of the current drawing color is available in the
- read-only, string-valued number register `.m'.
-
- The drawing color is associated with the current environment
- (*note Environments::).
-
- Note that `\m' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the color on the fly:
-
-
- .mc \m[red]x\m[]
-
-
- -- Request: .fcolor [color]
- -- Escape: \Mc
- -- Escape: \M(co
- -- Escape: \M[color]
- -- Register: \n[.M]
- Set fill (background) color for filled objects drawn with the
- `\D'...'' commands.
-
- A red ellipse can be created with the following code:
-
-
- \M[red]\h'0.5i'\D'E 2i 1i'\M[]
-
- The escape `\M[]' returns to the previous fill color, as does a
- call to `fcolor' without an argument.
-
- The name of the current fill (background) color is available in the
- read-only, string-valued number register `.M'.
-
- The fill color is associated with the current environment (*note
- Environments::).
-
- Note that `\M' doesn't produce an input token in `gtroff'.
-
-
-File: groff, Node: I/O, Next: Postprocessor Access, Prev: Colors, Up: gtroff Reference
-
-5.29 I/O
-========
-
-`gtroff' has several requests for including files:
-
- -- Request: .so file
- Read in the specified FILE and includes it in place of the `so'
- request. This is quite useful for large documents, e.g. keeping
- each chapter in a separate file. *Note gsoelim::, for more
- information.
-
- Since `gtroff' replaces the `so' request with the contents of
- `file', it makes a difference whether the data is terminated with
- a newline or not: Assuming that file `xxx' contains the word `foo'
- without a final newline, this
-
-
- This is
- .so xxx
- bar
-
- yields `This is foobar'.
-
- The search path for FILE can be controlled with the `-I' command
- line option.
-
- -- Request: .pso command
- Read the standard output from the specified COMMAND and includes
- it in place of the `pso' request.
-
- This request causes an error if used in safer mode (which is the
- default). Use `groff''s or `troff''s `-U' option to activate
- unsafe mode.
-
- The comment regarding a final newline for the `so' request is valid
- for `pso' also.
-
- -- Request: .mso file
- Identical to the `so' request except that `gtroff' searches for
- the specified FILE in the same directories as macro files for the
- the `-m' command line option. If the file name to be included has
- the form `NAME.tmac' and it isn't found, `mso' tries to include
- `tmac.NAME' and vice versa.
-
- -- Request: .trf file
- -- Request: .cf file
- Transparently output the contents of FILE. Each line is output as
- if it were preceded by `\!'; however, the lines are not subject to
- copy mode interpretation. If the file does not end with a newline,
- then a newline is added (`trf' only). For example, to define a
- macro `x' containing the contents of file `f', use
-
-
- .di x
- .trf f
- .di
-
- Both `trf' and `cf', when used in a diversion, embeds an object in
- the diversion which, when reread, causes the contents of FILE to
- be transparently copied through to the output. In UNIX `troff',
- the contents of FILE is immediately copied through to the output
- regardless of whether there is a current diversion; this behaviour
- is so anomalous that it must be considered a bug.
-
- While `cf' copies the contents of FILE completely unprocessed,
- `trf' disallows characters such as NUL that are not valid `gtroff'
- input characters (*note Identifiers::).
-
- Both requests cause a line break.
-
- -- Request: .nx [file]
- Force `gtroff' to continue processing of the file specified as an
- argument. If no argument is given, immediately jump to the end of
- file.
-
- -- Request: .rd [prompt [arg1 arg2 ...]]
- Read from standard input, and include what is read as though it
- were part of the input file. Text is read until a blank line is
- encountered.
-
- If standard input is a TTY input device (keyboard), write PROMPT
- to standard error, followed by a colon (or send BEL for a beep if
- no argument is given).
-
- Arguments after PROMPT are available for the input. For example,
- the line
-
-
- .rd data foo bar
-
- with the input `This is \$2.' prints
-
-
- This is bar.
-
-
- Using the `nx' and `rd' requests, it is easy to set up form letters.
-The form letter template is constructed like this, putting the
-following lines into a file called `repeat.let':
-
-
- .ce
- \*(td
- .sp 2
- .nf
- .rd
- .sp
- .rd
- .fi
- Body of letter.
- .bp
- .nx repeat.let
-
-When this is run, a file containing the following lines should be
-redirected in. Note that requests included in this file are executed
-as though they were part of the form letter. The last block of input
-is the `ex' request which tells `groff' to stop processing. If this
-was not there, `groff' would not know when to stop.
-
-
- Trent A. Fisher
- 708 NW 19th Av., #202
- Portland, OR 97209
-
- Dear Trent,
-
- Len Adollar
- 4315 Sierra Vista
- San Diego, CA 92103
-
- Dear Mr. Adollar,
-
- .ex
-
- -- Request: .pi pipe
- Pipe the output of `gtroff' to the shell command(s) specified by
- PIPE. This request must occur before `gtroff' has a chance to
- print anything.
-
- `pi' causes an error if used in safer mode (which is the default).
- Use `groff''s or `troff''s `-U' option to activate unsafe mode.
-
- Multiple calls to `pi' are allowed, acting as a chain. For
- example,
-
-
- .pi foo
- .pi bar
- ...
-
- is the same as `.pi foo | bar'.
-
- Note that the intermediate output format of `gtroff' is piped to
- the specified commands. Consequently, calling `groff' without the
- `-Z' option normally causes a fatal error.
-
- -- Request: .sy cmds
- -- Register: \n[systat]
- Execute the shell command(s) specified by CMDS. The output is not
- saved anyplace, so it is up to the user to do so.
-
- This request causes an error if used in safer mode (which is the
- default). Use `groff''s or `troff''s `-U' option to activate
- unsafe mode.
-
- For example, the following code fragment introduces the current
- time into a document:
-
-
- .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
- (localtime(time))[2,1,0]' > /tmp/x\n[$$]
- .so /tmp/x\n[$$]
- .sy rm /tmp/x\n[$$]
- \nH:\nM:\nS
-
- Note that this works by having the `perl' script (run by `sy')
- print out the `nr' requests which set the number registers `H',
- `M', and `S', and then reads those commands in with the `so'
- request.
-
- For most practical purposes, the number registers `seconds',
- `minutes', and `hours' which are initialized at start-up of
- `gtroff' should be sufficient. Use the `af' request to get a
- formatted output:
-
-
- .af hours 00
- .af minutes 00
- .af seconds 00
- \n[hours]:\n[minutes]:\n[seconds]
-
- The `systat' read-write number register contains the return value
- of the `system()' function executed by the last `sy' request.
-
- -- Request: .open stream file
- -- Request: .opena stream file
- Open the specified FILE for writing and associates the specified
- STREAM with it.
-
- The `opena' request is like `open', but if the file exists, append
- to it instead of truncating it.
-
- Both `open' and `opena' cause an error if used in safer mode
- (which is the default). Use `groff''s or `troff''s `-U' option to
- activate unsafe mode.
-
- -- Request: .write stream data
- -- Request: .writec stream data
- Write to the file associated with the specified STREAM. The
- stream must previously have been the subject of an open request.
- The remainder of the line is interpreted as the `ds' request reads
- its second argument: A leading `"' is stripped, and it is read in
- copy-in mode.
-
- The `writec' request is like `write', but only `write' appends a
- newline to the data.
-
- -- Request: .writem stream xx
- Write the contents of the macro or string XX to the file
- associated with the specified STREAM.
-
- XX is read in copy mode, i.e., already formatted elements are
- ignored. Consequently, diversions must be unformatted with the
- `asciify' request before calling `writem'. Usually, this means a
- loss of information.
-
- -- Request: .close stream
- Close the specified STREAM; the stream is no longer an acceptable
- argument to the `write' request.
-
- Here a simple macro to write an index entry.
-
-
- .open idx test.idx
- .
- .de IX
- . write idx \\n[%] \\$*
- ..
- .
- .IX test entry
- .
- .close idx
-
-
- -- Escape: \Ve
- -- Escape: \V(ev
- -- Escape: \V[env]
- Interpolate the contents of the specified environment variable ENV
- (one-character name E, two-character name EV) as returned by the
- function `getenv'. `\V' is interpreted in copy-in mode.
-
-
-File: groff, Node: Postprocessor Access, Next: Miscellaneous, Prev: I/O, Up: gtroff Reference
-
-5.30 Postprocessor Access
-=========================
-
-There are two escapes which give information directly to the
-postprocessor. This is particularly useful for embedding POSTSCRIPT
-into the final document.
-
- -- Escape: \X'xxx'
- Embeds its argument into the `gtroff' output preceded with `x X'.
-
- The escapes `\&', `\)', `\%', and `\:' are ignored within `\X',
- `\ ' and `\~' are converted to single space characters. All other
- escapes (except `\\' which produces a backslash) cause an error.
-
- If the `use_charnames_in_special' keyword is set in the `DESC'
- file, special characters no longer cause an error; the name XX is
- represented as `\(XX)' in the `x X' output command. Additionally,
- the backslash is represented as `\\'.
-
- `use_charnames_in_special' is currently used by `grohtml' only.
-
- -- Escape: \Yn
- -- Escape: \Y(nm
- -- Escape: \Y[name]
- This is approximately equivalent to `\X'\*[NAME]'' (one-character
- name N, two-character name NM). However, the contents of the
- string or macro NAME are not interpreted; also it is permitted for
- NAME to have been defined as a macro and thus contain newlines (it
- is not permitted for the argument to `\X' to contain newlines).
- The inclusion of newlines requires an extension to the UNIX `troff'
- output format, and confuses drivers that do not know about this
- extension (*note Device Control Commands::).
-
- *Note Output Devices::.
-
-
-File: groff, Node: Miscellaneous, Next: Gtroff Internals, Prev: Postprocessor Access, Up: gtroff Reference
-
-5.31 Miscellaneous
-==================
-
-This section documents parts of `gtroff' which cannot (yet) be
-categorized elsewhere in this manual.
-
- -- Request: .nm [start [inc [space [indent]]]]
- Print line numbers. START is the line number of the _next_ output
- line. INC indicates which line numbers are printed. For example,
- the value 5 means to emit only line numbers which are multiples
- of 5; this defaults to 1. SPACE is the space to be left between
- the number and the text; this defaults to one digit space. The
- fourth argument is the indentation of the line numbers, defaulting
- to zero. Both SPACE and INDENT are given as multiples of digit
- spaces; they can be negative also. Without any arguments, line
- numbers are turned off.
-
- `gtroff' reserves three digit spaces for the line number (which is
- printed right-justified) plus the amount given by INDENT; the
- output lines are concatenated to the line numbers, separated by
- SPACE, and _without_ reducing the line length. Depending on the
- value of the horizontal page offset (as set with the `po'
- request), line numbers which are longer than the reserved space
- stick out to the left, or the whole line is moved to the right.
-
- Parameters corresponding to missing arguments are not changed; any
- non-digit argument (to be more precise, any argument starting with
- a character valid as a delimiter for identifiers) is also treated
- as missing.
-
- If line numbering has been disabled with a call to `nm' without an
- argument, it can be reactivated with `.nm +0', using the
- previously active line numbering parameters.
-
- The parameters of `nm' are associated with the current environment
- (*note Environments::). The current output line number is
- available in the number register `ln'.
-
-
- .po 1m
- .ll 2i
- This test shows how line numbering works with groff.
- .nm 999
- This test shows how line numbering works with groff.
- .br
- .nm xxx 3 2
- .ll -\w'0'u
- This test shows how line numbering works with groff.
- .nn 2
- This test shows how line numbering works with groff.
-
- And here the result:
-
-
- This test shows how
- line numbering works
- 999 with groff. This
- 1000 test shows how line
- 1001 numbering works with
- 1002 groff.
- This test shows how
- line numbering
- works with groff.
- This test shows how
- 1005 line numbering
- works with groff.
-
-
- -- Request: .nn [skip]
- Temporarily turn off line numbering. The argument is the number
- of lines not to be numbered; this defaults to 1.
-
- -- Request: .mc glyph [dist]
- Print a "margin character" to the right of the text.(1) (*note
- Miscellaneous-Footnote-1::) The first argument is the glyph to be
- printed. The second argument is the distance away from the right
- margin. If missing, the previously set value is used; default is
- 10pt). For text lines that are too long (that is, longer than the
- text length plus DIST), the margin character is directly appended
- to the lines.
-
- With no arguments the margin character is turned off. If this
- occurs before a break, no margin character is printed.
-
- For compatibility with AT&T `troff', a call to `mc' to set the
- margin character can't be undone immediately; at least one line
- gets a margin character. Thus
-
-
- .ll 1i
- .mc \[br]
- .mc
- xxx
- .br
- xxx
-
- produces
-
-
- xxx |
- xxx
-
- For empty lines and lines produced by the `tl' request no margin
- character is emitted.
-
- The margin character is associated with the current environment
- (*note Environments::).
-
- This is quite useful for indicating text that has changed, and, in
- fact, there are programs available for doing this (they are called
- `nrchbar' and `changebar' and can be found in any
- `comp.sources.unix' archive).
-
-
- .ll 3i
- .mc |
- This paragraph is highlighted with a margin
- character.
- .sp
- Note that vertical space isn't marked.
- .br
- \&
- .br
- But we can fake it with `\&'.
-
- Result:
-
-
- This paragraph is highlighted |
- with a margin character. |
-
- Note that vertical space isn't |
- marked. |
- |
- But we can fake it with `\&'. |
-
-
- -- Request: .psbb filename
- -- Register: \n[llx]
- -- Register: \n[lly]
- -- Register: \n[urx]
- -- Register: \n[ury]
- Retrieve the bounding box of the PostScript image found in
- FILENAME. The file must conform to Adobe's "Document Structuring
- Conventions" (DSC); the command searches for a `%%BoundingBox'
- comment and extracts the bounding box values into the number
- registers `llx', `lly', `urx', and `ury'. If an error occurs (for
- example, `psbb' cannot find the `%%BoundingBox' comment), it sets
- the four number registers to zero.
-
- The search path for FILENAME can be controlled with the `-I'
- command line option.
-
-
-File: groff, Node: Miscellaneous-Footnotes, Up: Miscellaneous
-
- (1) "Margin character" is a misnomer since it is an output glyph.
-
-
-File: groff, Node: Gtroff Internals, Next: Debugging, Prev: Miscellaneous, Up: gtroff Reference
-
-5.32 `gtroff' Internals
-=======================
-
-`gtroff' processes input in three steps. One or more input characters
-are converted to an "input token".(1) (*note Gtroff
-Internals-Footnote-1::) Then, one or more input tokens are converted
-to an "output node". Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
- Actually, before step one happens, `gtroff' converts certain escape
-sequences into reserved input characters (not accessible by the user);
-such reserved characters are used for other internal processing also -
-this is the very reason why not all characters are valid input. *Note
-Identifiers::, for more on this topic.
-
- For example, the input string `fi\[:u]' is converted into a
-character token `f', a character token `i', and a special token `:u'
-(representing u umlaut). Later on, the character tokens `f' and `i'
-are merged to a single output node representing the ligature glyph `fi'
-(provided the current font has a glyph for this ligature); the same
-happens with `:u'. All output glyph nodes are `processed' which means
-that they are invariably associated with a given font, font size,
-advance width, etc. During the formatting process, `gtroff' itself
-adds various nodes to control the data flow.
-
- Macros, diversions, and strings collect elements in two chained
-lists: a list of input tokens which have been passed unprocessed, and a
-list of output nodes. Consider the following the diversion.
-
-
- .di xxx
- a
- \!b
- c
- .br
- .di
-
-It contains these elements.
-
-node list token list element number
-line start node -- 1
-glyph node `a' -- 2
-word space node -- 3
--- `b' 4
--- `\n' 5
-glyph node `c' -- 6
-vertical size node -- 7
-vertical size node -- 8
--- `\n' 9
-
-Elements 1, 7, and 8 are inserted by `gtroff'; the latter two (which
-are always present) specify the vertical extent of the last line,
-possibly modified by `\x'. The `br' request finishes the current
-partial line, inserting a newline input token which is subsequently
-converted to a space when the diversion is reread. Note that the word
-space node has a fixed width which isn't stretchable anymore. To
-convert horizontal space nodes back to input tokens, use the `unformat'
-request.
-
- Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
- Note that the `chop' request simply reduces the number of elements
-in a macro, string, or diversion by one. Exceptions are "compatibility
-save" and "compatibility ignore" input tokens which are ignored. The
-`substring' request also ignores those input tokens.
-
- Some requests like `tr' or `cflags' work on glyph identifiers only;
-this means that the associated glyph can be changed without destroying
-this association. This can be very helpful for substituting glyphs.
-In the following example, we assume that glyph `foo' isn't available by
-default, so we provide a substitution using the `fchar' request and map
-it to input character `x'.
-
-
- .fchar \[foo] foo
- .tr x \[foo]
-
-Now let us assume that we install an additional special font `bar'
-which has glyph `foo'.
-
-
- .special bar
- .rchar \[foo]
-
-Since glyphs defined with `fchar' are searched before glyphs in special
-fonts, we must call `rchar' to remove the definition of the fallback
-glyph. Anyway, the translation is still active; `x' now maps to the
-real glyph `foo'.
-
- Macro and request arguments preserve the compatibility mode:
-
-
- .cp 1 \" switch to compatibility mode
- .de xx
- \\$1
- ..
- .cp 0 \" switch compatibility mode off
- .xx caf\['e]
- => café
-
-Since compatibility mode is on while `de' is called, the macro `xx'
-activates compatibility mode while executing. Argument `$1' can still
-be handled properly because it inherits the compatibility mode status
-which was active at the point where `xx' is called.
-
- After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-
-File: groff, Node: Gtroff Internals-Footnotes, Up: Gtroff Internals
-
- (1) Except the escapes `\f', `\F', `\H', `\m', `\M', `\R', `\s', and
-`\S' which are processed immediately if not in copy-in mode.
-
-
-File: groff, Node: Debugging, Next: Implementation Differences, Prev: Gtroff Internals, Up: gtroff Reference
-
-5.33 Debugging
-==============
-
-`gtroff' is not easy to debug, but there are some useful features and
-strategies for debugging.
-
- -- Request: .lf line [filename]
- Change the line number and optionally the file name `gtroff' shall
- use for error and warning messages. LINE is the input line number
- of the _next_ line.
-
- Without argument, the request is ignored.
-
- This is a debugging aid for documents which are split into many
- files, then put together with `soelim' and other preprocessors.
- Usually, it isn't invoked manually.
-
- Note that other `troff' implementations (including the original
- AT&T version) handle `lf' differently. For them, LINE changes the
- line number of the _current_ line.
-
- -- Request: .tm string
- -- Request: .tm1 string
- -- Request: .tmc string
- Send STRING to the standard error output; this is very useful for
- printing debugging messages among other things.
-
- STRING is read in copy mode.
-
- The `tm' request ignores leading spaces of STRING; `tm1' handles
- its argument similar to the `ds' request: a leading double quote
- in STRING is stripped to allow initial blanks.
-
- The `tmc' request is similar to `tm1' but does not append a
- newline (as is done in `tm' and `tm1').
-
- -- Request: .ab [string]
- Similar to the `tm' request, except that it causes `gtroff' to
- stop processing. With no argument it prints `User Abort.' to
- standard error.
-
- -- Request: .ex
- The `ex' request also causes `gtroff' to stop processing; see also
- *Note I/O::.
-
- When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-
- .if \n(DB .tm debugging output
-
-To activate these statements say
-
-
- groff -rDB=1 file
-
- If it is known in advance that there will be many errors and no
-useful output, `gtroff' can be forced to suppress formatted output with
-the `-z' flag.
-
- -- Request: .pm
- Print the entire symbol table on `stderr'. Names of all defined
- macros, strings, and diversions are print together with their size
- in bytes. Since `gtroff' sometimes adds nodes by itself, the
- returned size can be larger than expected.
-
- This request differs from UNIX `troff': `gtroff' reports the sizes
- of diversions, ignores an additional argument to print only the
- total of the sizes, and the size isn't returned in blocks of 128
- characters.
-
- -- Request: .pnr
- Print the names and contents of all currently defined number
- registers on `stderr'.
-
- -- Request: .ptr
- Print the names and positions of all traps (not including input
- line traps and diversion traps) on `stderr'. Empty slots in the
- page trap list are printed as well, because they can affect the
- priority of subsequently planted traps.
-
- -- Request: .fl
- Instruct `gtroff' to flush its output immediately. The intent is
- for interactive use, but this behaviour is currently not
- implemented in `gtroff'. Contrary to UNIX `troff', TTY output is
- sent to a device driver also (`grotty'), making it non-trivial to
- communicate interactively.
-
- This request causes a line break.
-
- -- Request: .backtrace
- Print a backtrace of the input stack to the standard error stream.
-
- Consider the following in file `test':
-
-
- .de xxx
- . backtrace
- ..
- .de yyy
- . xxx
- ..
- .
- .yyy
-
- On execution, `gtroff' prints the following:
-
-
- test:2: backtrace: macro `xxx'
- test:5: backtrace: macro `yyy'
- test:8: backtrace: file `test'
-
- The option `-b' of `gtroff' internally calls a variant of this
- request on each error and warning.
-
- -- Register: \n[slimit]
- Use the `slimit' number register to set the maximum number of
- objects on the input stack. If `slimit' is less than or equal
- to 0, there is no limit set. With no limit, a buggy recursive
- macro can exhaust virtual memory.
-
- The default value is 1000; this is a compile-time constant.
-
- -- Request: .warnscale si
- Set the scaling indicator used in warnings to SI. Valid values for
- SI are `u', `i', `c', `p', and `P'. At startup, it is set to `i'.
-
- -- Request: .spreadwarn [limit]
- Make `gtroff' emit a warning if the additional space inserted for
- each space between words in an output line is larger or equal to
- LIMIT. A negative value is changed to zero; no argument toggles
- the warning on and off without changing LIMIT. The default scaling
- indicator is `m'. At startup, `spreadwarn' is deactivated, and
- LIMIT is set to 3m.
-
- For example,
-
-
- .spreadwarn 0.2m
-
- will cause a warning if `gtroff' must add 0.2m or more for each
- interword space in a line.
-
- This request is active only if text is justified to both margins
- (using `.ad b').
-
- `gtroff' has command line options for printing out more warnings
-(`-w') and for printing backtraces (`-b') when a warning or an error
-occurs. The most verbose level of warnings is `-ww'.
-
- -- Request: .warn [flags]
- -- Register: \n[.warn]
- Control the level of warnings checked for. The FLAGS are the sum
- of the numbers associated with each warning that is to be enabled;
- all other warnings are disabled. The number associated with each
- warning is listed below. For example, `.warn 0' disables all
- warnings, and `.warn 1' disables all warnings except that about
- missing glyphs. If no argument is given, all warnings are enabled.
-
- The read-only number register `.warn' contains the current warning
- level.
-
-* Menu:
-
-* Warnings::
-
-
-File: groff, Node: Warnings, Prev: Debugging, Up: Debugging
-
-5.33.1 Warnings
----------------
-
-The warnings that can be given to `gtroff' are divided into the
-following categories. The name associated with each warning is used by
-the `-w' and `-W' options; the number is used by the `warn' request and
-by the `.warn' register.
-
-`char'
-`1'
- Non-existent glyphs.(1) (*note Warnings-Footnote-1::) This is
- enabled by default.
-
-`number'
-`2'
- Invalid numeric expressions. This is enabled by default. *Note
- Expressions::.
-
-`break'
-`4'
- In fill mode, lines which could not be broken so that their length
- was less than the line length. This is enabled by default.
-
-`delim'
-`8'
- Missing or mismatched closing delimiters.
-
-`el'
-`16'
- Use of the `el' request with no matching `ie' request. *Note
- if-else::.
-
-`scale'
-`32'
- Meaningless scaling indicators.
-
-`range'
-`64'
- Out of range arguments.
-
-`syntax'
-`128'
- Dubious syntax in numeric expressions.
-
-`di'
-`256'
- Use of `di' or `da' without an argument when there is no current
- diversion.
-
-`mac'
-`512'
- Use of undefined strings, macros and diversions. When an undefined
- string, macro, or diversion is used, that string is automatically
- defined as empty. So, in most cases, at most one warning is given
- for each name.
-
-`reg'
-`1024'
- Use of undefined number registers. When an undefined number
- register is used, that register is automatically defined to have a
- value of 0. So, in most cases, at most one warning is given for
- use of a particular name.
-
-`tab'
-`2048'
- Use of a tab character where a number was expected.
-
-`right-brace'
-`4096'
- Use of `\}' where a number was expected.
-
-`missing'
-`8192'
- Requests that are missing non-optional arguments.
-
-`input'
-`16384'
- Invalid input characters.
-
-`escape'
-`32768'
- Unrecognized escape sequences. When an unrecognized escape
- sequence `\X' is encountered, the escape character is ignored, and
- X is printed.
-
-`space'
-`65536'
- Missing space between a request or macro and its argument. This
- warning is given when an undefined name longer than two characters
- is encountered, and the first two characters of the name make a
- defined name. The request or macro is not invoked. When this
- warning is given, no macro is automatically defined. This is
- enabled by default. This warning never occurs in compatibility
- mode.
-
-`font'
-`131072'
- Non-existent fonts. This is enabled by default.
-
-`ig'
-`262144'
- Invalid escapes in text ignored with the `ig' request. These are
- conditions that are errors when they do not occur in ignored text.
-
-`color'
-`524288'
- Color related warnings.
-
-`all'
- All warnings except `di', `mac' and `reg'. It is intended that
- this covers all warnings that are useful with traditional macro
- packages.
-
-`w'
- All warnings.
-
-
-File: groff, Node: Warnings-Footnotes, Up: Warnings
-
- (1) `char' is a misnomer since it reports missing glyphs - there
-aren't missing input characters, only invalid ones.
-
-
-File: groff, Node: Implementation Differences, Prev: Debugging, Up: gtroff Reference
-
-5.34 Implementation Differences
-===============================
-
-GNU `troff' has a number of features which cause incompatibilities with
-documents written with old versions of `troff'.
-
- Long names cause some incompatibilities. UNIX `troff' interprets
-
-
- .dsabcd
-
-as defining a string `ab' with contents `cd'. Normally, GNU `troff'
-interprets this as a call of a macro named `dsabcd'. Also UNIX `troff'
-interprets `\*[' or `\n[' as references to a string or number register
-called `['. In GNU `troff', however, this is normally interpreted as
-the start of a long name. In compatibility mode GNU `troff' interprets
-long names in the traditional way (which means that they are not
-recognized as names).
-
- -- Request: .cp [n]
- -- Request: .do cmd
- -- Register: \n[.C]
- If N is missing or non-zero, turn on compatibility mode;
- otherwise, turn it off.
-
- The read-only number register `.C' is 1 if compatibility mode is
- on, 0 otherwise.
-
- Compatibility mode can be also turned on with the `-C' command line
- option.
-
- The `do' request turns off compatibility mode while executing its
- arguments as a `gtroff' command.
-
-
- .do fam T
-
- executes the `fam' request when compatibility mode is enabled.
-
- `gtroff' restores the previous compatibility setting before
- interpreting any files sourced by the CMD.
-
- Two other features are controlled by `-C'. If not in compatibility
-mode, GNU `troff' preserves the input level in delimited arguments:
-
-
- .ds xx '
- \w'abc\*(xxdef'
-
-In compatibility mode, the string `72def'' is returned; without `-C'
-the resulting string is `168' (assuming a TTY output device).
-
- Finally, the escapes `\f', `\H', `\m', `\M', `\R', `\s', and `\S'
-are transparent for recognizing the beginning of a line only in
-compatibility mode (this is a rather obscure feature). For example,
-the code
-
-
- .de xx
- Hallo!
- ..
- \fB.xx\fP
-
-prints `Hallo!' in bold face if in compatibility mode, and `.xx' in
-bold face otherwise.
-
- GNU `troff' does not allow the use of the escape sequences `\|',
-`\^', `\&', `\{', `\}', `\<SP>', `\'', `\`', `\-', `\_', `\!', `\%',
-and `\c' in names of strings, macros, diversions, number registers,
-fonts or environments; UNIX `troff' does. The `\A' escape sequence
-(*note Identifiers::) may be helpful in avoiding use of these escape
-sequences in names.
-
- Fractional point sizes cause one noteworthy incompatibility. In
-UNIX `troff' the `ps' request ignores scale indicators and thus
-
-
- .ps 10u
-
-sets the point size to 10 points, whereas in GNU `troff' it sets the
-point size to 10 scaled points. *Note Fractional Type Sizes::, for
-more information.
-
- In GNU `troff' there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored with the glyph
-node; once a glyph node has been constructed it is unaffected by any
-subsequent requests that are executed, including `bd', `cs', `tkf',
-`tr', or `fp' requests. Normally glyphs are constructed from input
-characters at the moment immediately before the glyph is added to the
-current output line. Macros, diversions and strings are all, in fact,
-the same type of object; they contain lists of input characters and
-glyph nodes in any combination. A glyph node does not behave like an
-input character for the purposes of macro processing; it does not
-inherit any of the special properties that the input character from
-which it was constructed might have had. For example,
-
-
- .di x
- \\\\
- .br
- .di
- .x
-
-prints `\\' in GNU `troff'; each pair of input backslashes is turned
-into one output backslash and the resulting output backslashes are not
-interpreted as escape characters when they are reread. UNIX `troff'
-would interpret them as escape characters when they were reread and
-would end up printing one `\'. The correct way to obtain a printable
-backslash is to use the `\e' escape sequence: This always prints a
-single instance of the current escape character, regardless of whether
-or not it is used in a diversion; it also works in both GNU `troff' and
-UNIX `troff'.(1) (*note Implementation Differences-Footnote-1::) To
-store, for some reason, an escape sequence in a diversion that will be
-interpreted when the diversion is reread, either use the traditional
-`\!' transparent output facility, or, if this is unsuitable, the new
-`\?' escape sequence.
-
- *Note Diversions::, and *Note Gtroff Internals::, for more
-information.
-
-
-File: groff, Node: Implementation Differences-Footnotes, Up: Implementation Differences
-
- (1) To be completely independent of the current escape character,
-use `\(rs' which represents a reverse solidus (backslash) glyph.
-
-
-File: groff, Node: Preprocessors, Next: Output Devices, Prev: gtroff Reference, Up: Top
-
-6 Preprocessors
-***************
-
-This chapter describes all preprocessors that come with `groff' or
-which are freely available.
-
-* Menu:
-
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* grefer::
-* gsoelim::
-
-
-File: groff, Node: geqn, Next: gtbl, Prev: Preprocessors, Up: Preprocessors
-
-6.1 `geqn'
-==========
-
-* Menu:
-
-* Invoking geqn::
-
-
-File: groff, Node: Invoking geqn, Prev: geqn, Up: geqn
-
-6.1.1 Invoking `geqn'
----------------------
-
-
-File: groff, Node: gtbl, Next: gpic, Prev: geqn, Up: Preprocessors
-
-6.2 `gtbl'
-==========
-
-* Menu:
-
-* Invoking gtbl::
-
-
-File: groff, Node: Invoking gtbl, Prev: gtbl, Up: gtbl
-
-6.2.1 Invoking `gtbl'
----------------------
-
-
-File: groff, Node: gpic, Next: ggrn, Prev: gtbl, Up: Preprocessors
-
-6.3 `gpic'
-==========
-
-* Menu:
-
-* Invoking gpic::
-
-
-File: groff, Node: Invoking gpic, Prev: gpic, Up: gpic
-
-6.3.1 Invoking `gpic'
----------------------
-
-
-File: groff, Node: ggrn, Next: grap, Prev: gpic, Up: Preprocessors
-
-6.4 `ggrn'
-==========
-
-* Menu:
-
-* Invoking ggrn::
-
-
-File: groff, Node: Invoking ggrn, Prev: ggrn, Up: ggrn
-
-6.4.1 Invoking `ggrn'
----------------------
-
-
-File: groff, Node: grap, Next: grefer, Prev: ggrn, Up: Preprocessors
-
-6.5 `grap'
-==========
-
-A free implementation of `grap', written by Ted Faber, is available as
-an extra package from the following address:
-
- `http://www.lunabase.org/~faber/Vault/software/grap/'
-
-
-File: groff, Node: grefer, Next: gsoelim, Prev: grap, Up: Preprocessors
-
-6.6 `grefer'
-============
-
-* Menu:
-
-* Invoking grefer::
-
-
-File: groff, Node: Invoking grefer, Prev: grefer, Up: grefer
-
-6.6.1 Invoking `grefer'
------------------------
-
-
-File: groff, Node: gsoelim, Prev: grefer, Up: Preprocessors
-
-6.7 `gsoelim'
-=============
-
-* Menu:
-
-* Invoking gsoelim::
-
-
-File: groff, Node: Invoking gsoelim, Prev: gsoelim, Up: gsoelim
-
-6.7.1 Invoking `gsoelim'
-------------------------
-
-
-File: groff, Node: Output Devices, Next: File formats, Prev: Preprocessors, Up: Top
-
-7 Output Devices
-****************
-
-* Menu:
-
-* Special Characters::
-* grotty::
-* grops::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-
-
-File: groff, Node: Special Characters, Next: grotty, Prev: Output Devices, Up: Output Devices
-
-7.1 Special Characters
-======================
-
-*Note Font Files::.
-
-
-File: groff, Node: grotty, Next: grops, Prev: Special Characters, Up: Output Devices
-
-7.2 `grotty'
-============
-
-* Menu:
-
-* Invoking grotty::
-
-
-File: groff, Node: Invoking grotty, Prev: grotty, Up: grotty
-
-7.2.1 Invoking `grotty'
------------------------
-
-
-File: groff, Node: grops, Next: grodvi, Prev: grotty, Up: Output Devices
-
-7.3 `grops'
-===========
-
-* Menu:
-
-* Invoking grops::
-* Embedding PostScript::
-
-
-File: groff, Node: Invoking grops, Next: Embedding PostScript, Prev: grops, Up: grops
-
-7.3.1 Invoking `grops'
-----------------------
-
-
-File: groff, Node: Embedding PostScript, Prev: Invoking grops, Up: grops
-
-7.3.2 Embedding POSTSCRIPT
---------------------------
-
-
-File: groff, Node: grodvi, Next: grolj4, Prev: grops, Up: Output Devices
-
-7.4 `grodvi'
-============
-
-* Menu:
-
-* Invoking grodvi::
-
-
-File: groff, Node: Invoking grodvi, Prev: grodvi, Up: grodvi
-
-7.4.1 Invoking `grodvi'
------------------------
-
-
-File: groff, Node: grolj4, Next: grolbp, Prev: grodvi, Up: Output Devices
-
-7.5 `grolj4'
-============
-
-* Menu:
-
-* Invoking grolj4::
-
-
-File: groff, Node: Invoking grolj4, Prev: grolj4, Up: grolj4
-
-7.5.1 Invoking `grolj4'
------------------------
-
-
-File: groff, Node: grolbp, Next: grohtml, Prev: grolj4, Up: Output Devices
-
-7.6 `grolbp'
-============
-
-* Menu:
-
-* Invoking grolbp::
-
-
-File: groff, Node: Invoking grolbp, Prev: grolbp, Up: grolbp
-
-7.6.1 Invoking `grolbp'
------------------------
-
-
-File: groff, Node: grohtml, Next: gxditview, Prev: grolbp, Up: Output Devices
-
-7.7 `grohtml'
-=============
-
-* Menu:
-
-* Invoking grohtml::
-* grohtml specific registers and strings::
-
-
-File: groff, Node: Invoking grohtml, Next: grohtml specific registers and strings, Prev: grohtml, Up: grohtml
-
-7.7.1 Invoking `grohtml'
-------------------------
-
-
-File: groff, Node: grohtml specific registers and strings, Prev: Invoking grohtml, Up: grohtml
-
-7.7.2 `grohtml' specific registers and strings
-----------------------------------------------
-
- -- Register: \n[ps4html]
- -- String: \*[www-image-template]
- The registers `ps4html' and `www-image-template' are defined by
- the `pre-grohtml' preprocessor. `pre-grohtml' reads in the
- `troff' input, marks up the inline equations and passes the result
- firstly to
-
-
- troff -Tps -rps4html=1 -dwww-image-template=TEMPLATE
-
- and secondly to
-
-
- troff -Thtml
-
- The PostScript device is used to create all the image files, and
- the register `ps4html' enables the macro sets to ignore floating
- keeps, footers, and headings.
-
- The register `www-image-template' is set to the user specified
- template name or the default name.
-
-
-File: groff, Node: gxditview, Prev: grohtml, Up: Output Devices
-
-7.8 `gxditview'
-===============
-
-* Menu:
-
-* Invoking gxditview::
-
-
-File: groff, Node: Invoking gxditview, Prev: gxditview, Up: gxditview
-
-7.8.1 Invoking `gxditview'
---------------------------
-
-
-File: groff, Node: File formats, Next: Installation, Prev: Output Devices, Up: Top
-
-8 File formats
-**************
-
-All files read and written by `gtroff' are text files. The following
-two sections describe their format.
-
-* Menu:
-
-* gtroff Output::
-* Font Files::
-
-
-File: groff, Node: gtroff Output, Next: Font Files, Prev: File formats, Up: File formats
-
-8.1 `gtroff' Output
-===================
-
-This section describes the intermediate output format of GNU `troff'.
-This output is produced by a run of `gtroff' before it is fed into a
-device postprocessor program.
-
- As `groff' is a wrapper program around `gtroff' that automatically
-calls a postprocessor, this output does not show up normally. This is
-why it is called "intermediate". `groff' provides the option `-Z' to
-inhibit postprocessing, such that the produced intermediate output is
-sent to standard output just like calling `gtroff' manually.
-
- Here, the term "troff output" describes what is output by `gtroff',
-while "intermediate output" refers to the language that is accepted by
-the parser that prepares this output for the postprocessors. This
-parser is smarter on whitespace and implements obsolete elements for
-compatibility, otherwise both formats are the same.(1) (*note gtroff
-Output-Footnote-1::)
-
- The main purpose of the intermediate output concept is to facilitate
-the development of postprocessors by providing a common programming
-interface for all devices. It has a language of its own that is
-completely different from the `gtroff' language. While the `gtroff'
-language is a high-level programming language for text processing, the
-intermediate output language is a kind of low-level assembler language
-by specifying all positions on the page for writing and drawing.
-
- The intermediate output produced by `gtroff' is fairly readable,
-while output from AT&T `troff' is rather hard to understand because of
-strange habits that are still supported, but not used any longer by
-`gtroff'.
-
-* Menu:
-
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-
-
-File: groff, Node: gtroff Output-Footnotes, Up: gtroff Output
-
- (1) The parser and postprocessor for intermediate output can be
-found in the file
-`GROFF-SOURCE-DIR/src/libs/libdriver/input.cpp'.
-
-
-File: groff, Node: Language Concepts, Next: Command Reference, Prev: gtroff Output, Up: gtroff Output
-
-8.1.1 Language Concepts
------------------------
-
-During the run of `gtroff', the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device. So the language of the intermediate output format can be quite
-small. Its only elements are commands with and without arguments. In
-this section, the term "command" always refers to the intermediate
-output language, and never to the `gtroff' language used for document
-formatting. There are commands for positioning and text writing, for
-drawing, and for device controlling.
-
-* Menu:
-
-* Separation::
-* Argument Units::
-* Document Parts::
-
-
-File: groff, Node: Separation, Next: Argument Units, Prev: Language Concepts, Up: Language Concepts
-
-8.1.1.1 Separation
-..................
-
-AT&T `troff' output has strange requirements on whitespace. The
-`gtroff' output parser, however, is smart about whitespace by making it
-maximally optional. The whitespace characters, i.e., the tab, space,
-and newline characters, always have a syntactical meaning. They are
-never printable because spacing within the output is always done by
-positioning commands.
-
- Any sequence of space or tab characters is treated as a single
-"syntactical space". It separates commands and arguments, but is only
-required when there would occur a clashing between the command code and
-the arguments without the space. Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet. Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
- A line break is a syntactical element, too. Every command argument
-can be followed by whitespace, a comment, or a newline character. Thus
-a "syntactical line break" is defined to consist of optional
-syntactical space that is optionally followed by a comment, and a
-newline character.
-
- The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments. For historical
-reasons, the parser allows to stack such commands on the same line, but
-fortunately, in `gtroff''s intermediate output, every command with at
-least one argument is followed by a line break, thus providing
-excellent readability.
-
- The other commands - those for drawing and device controlling - have
-a more complicated structure; some recognize long command names, and
-some take a variable number of arguments. So all `D' and `x' commands
-were designed to request a syntactical line break after their last
-argument. Only one command, `x X', has an argument that can stretch
-over several lines; all other commands must have all of their arguments
-on the same line as the command, i.e., the arguments may not be
-splitted by a line break.
-
- Empty lines (these are lines containing only space and/or a
-comment), can occur everywhere. They are just ignored.
-
-
-File: groff, Node: Argument Units, Next: Document Parts, Prev: Separation, Up: Language Concepts
-
-8.1.1.2 Argument Units
-......................
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding
-scale indicator is not written with the output command arguments. Most
-commands assume the scale indicator `u', the basic unit of the device,
-some use `z', the scaled point unit of the device, while others, such
-as the color commands, expect plain integers.
-
- Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters. The names of characters and
-fonts can be of arbitrary length. A character that is to be printed
-will always be in the current font.
-
- A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded `#' character is
-regarded as part of the argument, not as the beginning of a comment
-command. An integer argument is already terminated by the next
-non-digit character, which then is regarded as the first character of
-the next argument or command.
-
-
-File: groff, Node: Document Parts, Prev: Argument Units, Up: Language Concepts
-
-8.1.1.3 Document Parts
-......................
-
-A correct intermediate output document consists of two parts, the
-"prologue" and the "body".
-
- The task of the prologue is to set the general device parameters
-using three exactly specified commands. `gtroff''s prologue is
-guaranteed to consist of the following three lines (in that order):
-
-
- x T DEVICE
- x res N H V
- x init
-
-with the arguments set as outlined in *Note Device Control Commands::.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the prologue.
-
- The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the ones
-used in the prologue. Processing is terminated as soon as the first
-`x stop' command is encountered; the last line of any `gtroff'
-intermediate output always contains such a command.
-
- Semantically, the body is page oriented. A new page is started by a
-`p' command. Positioning, writing, and drawing commands are always
-done within the current page, so they cannot occur before the first `p'
-command. Absolute positioning (by the `H' and `V' commands) is done
-relative to the current page; all other positioning is done relative to
-the current location within this page.
-
-
-File: groff, Node: Command Reference, Next: Intermediate Output Examples, Prev: Language Concepts, Up: gtroff Output
-
-8.1.2 Command Reference
------------------------
-
-This section describes all intermediate output commands, both from AT&T
-`troff' as well as the `gtroff' extensions.
-
-* Menu:
-
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-
-
-File: groff, Node: Comment Command, Next: Simple Commands, Prev: Command Reference, Up: Command Reference
-
-8.1.2.1 Comment Command
-.......................
-
-`#ANYTHING<end of line>'
- A comment. Ignore any characters from the `#' character up to the
- next newline character.
-
- This command is the only possibility for commenting in the
- intermediate output. Each comment can be preceded by arbitrary
- syntactical space; every command can be terminated by a comment.
-
-
-File: groff, Node: Simple Commands, Next: Graphics Commands, Prev: Comment Command, Up: Command Reference
-
-8.1.2.2 Simple Commands
-.......................
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments. Most of them are
-commands for positioning and text writing. These commands are smart
-about whitespace. Optionally, syntactical space can be inserted
-before, after, and between the command letter and its arguments. All
-of these commands are stackable, i.e., they can be preceded by other
-simple commands or followed by arbitrary other commands on the same
-line. A separating syntactical space is only necessary when two
-integer arguments would clash or if the preceding argument ends with a
-string argument.
-
-`C XXX<whitespace>'
- Print a special character named XXX. The trailing syntactical
- space or line break is necessary to allow glyph names of arbitrary
- length. The glyph is printed at the current print position; the
- glyph's size is read from the font file. The print position is
- not changed.
-
-`c G'
- Print glyph G at the current print position;(1) (*note Simple
- Commands-Footnote-1::) the glyph's size is read from the font
- file. The print position is not changed.
-
-`f N'
- Set font to font number N (a non-negative integer).
-
-`H N'
- Move right to the absolute vertical position N (a non-negative
- integer in basic units `u' relative to left edge of current page.
-
-`h N'
- Move N (a non-negative integer) basic units `u' horizontally to
- the right. The original UNIX troff manual allows negative values
- for N also, but `gtroff' doesn't use this.
-
-`m COLOR-SCHEME [COMPONENT ...]'
- Set the color for text (glyphs), line drawing, and the outline of
- graphic objects using different color schemes; the analoguous
- command for the filling color of graphic objects is `DF'. The
- color components are specified as integer arguments between 0 and
- 65536. The number of color components and their meaning vary for
- the different color schemes. These commands are generated by
- `gtroff''s escape sequence `\m'. No position changing. These
- commands are a `gtroff' extension.
-
- `mc CYAN MAGENTA YELLOW'
- Set color using the CMY color scheme, having the 3 color
- components CYAN, MAGENTA, and YELLOW.
-
- `md'
- Set color to the default color value (black in most cases).
- No component arguments.
-
- `mg GRAY'
- Set color to the shade of gray given by the argument, an
- integer between 0 (black) and 65536 (white).
-
- `mk CYAN MAGENTA YELLOW BLACK'
- Set color using the CMYK color scheme, having the 4 color
- components CYAN, MAGENTA, YELLOW, and BLACK.
-
- `mr RED GREEN BLUE'
- Set color using the RGB color scheme, having the 3 color
- components RED, GREEN, and BLUE.
-
-`N N'
- Print glyph with index N (a non-negative integer) of the current
- font. This command is a `gtroff' extension.
-
-`n B A'
- Inform the device about a line break, but no positioning is done by
- this command. In AT&T `troff', the integer arguments B and A
- informed about the space before and after the current line to make
- the intermediate output more human readable without performing any
- action. In `groff', they are just ignored, but they must be
- provided for compatibility reasons.
-
-`p N'
- Begin a new page in the outprint. The page number is set to N.
- This page is completely independent of pages formerly processed
- even if those have the same page number. The vertical position on
- the outprint is automatically set to 0. All positioning, writing,
- and drawing is always done relative to a page, so a `p' command
- must be issued before any of these commands.
-
-`s N'
- Set point size to N scaled points (this is unit `z'). AT&T
- `troff' used the unit points (`p') instead. *Note Output Language
- Compatibility::.
-
-`t XXX<whitespace>'
-`t XXX DUMMY-ARG<whitespace>'
- Print a word, i.e., a sequence of characters XXX representing
- output glyphs which names are single characters, terminated by a
- space character or a line break; an optional second integer
- argument is ignored (this allows the formatter to generate an even
- number of arguments). The first glyph should be printed at the
- current position, the current horizontal position should then be
- increased by the width of the first glyph, and so on for each
- glyph. The widths of the glyphs are read from the font file,
- scaled for the current point size, and rounded to a multiple of
- the horizontal resolution. Special characters cannot be printed
- using this command (use the `C' command for special characters).
- This command is a `gtroff' extension; it is only used for devices
- whose `DESC' file contains the `tcommand' keyword (*note DESC File
- Format::).
-
-`u N XXX<whitespace>'
- Print word with track kerning. This is the same as the `t'
- command except that after printing each glyph, the current
- horizontal position is increased by the sum of the width of that
- glyph and N (an integer in basic units `u'). This command is a
- `gtroff' extension; it is only used for devices whose `DESC' file
- contains the `tcommand' keyword (*note DESC File Format::).
-
-`V N'
- Move down to the absolute vertical position N (a non-negative
- integer in basic units `u') relative to upper edge of current page.
-
-`v N'
- Move N basic units `u' down (N is a non-negative integer). The
- original UNIX troff manual allows negative values for N also, but
- `gtroff' doesn't use this.
-
-`w'
- Informs about a paddable white space to increase readability. The
- spacing itself must be performed explicitly by a move command.
-
-
-File: groff, Node: Simple Commands-Footnotes, Up: Simple Commands
-
- (1) `c' is actually a misnomer since it outputs a glyph.
-
-
-File: groff, Node: Graphics Commands, Next: Device Control Commands, Prev: Simple Commands, Up: Command Reference
-
-8.1.2.3 Graphics Commands
-.........................
-
-Each graphics or drawing command in the intermediate output starts with
-the letter `D', followed by one or two characters that specify a
-subcommand; this is followed by a fixed or variable number of integer
-arguments that are separated by a single space character. A `D'
-command may not be followed by another command on the same line (apart
-from a comment), so each `D' command is terminated by a syntactical
-line break.
-
- `gtroff' output follows the classical spacing rules (no space
-between command and subcommand, all arguments are preceded by a single
-space character), but the parser allows optional space between the
-command letters and makes the space before the first argument optional.
-As usual, each space can be any sequence of tab and space characters.
-
- Some graphics commands can take a variable number of arguments. In
-this case, they are integers representing a size measured in basic
-units `u'. The arguments called H1, H2, ..., HN stand for horizontal
-distances where positive means right, negative left. The arguments
-called V1, V2, ..., VN stand for vertical distances where positive
-means down, negative up. All these distances are offsets relative to
-the current location.
-
- Each graphics command directly corresponds to a similar `gtroff'
-`\D' escape sequence. *Note Drawing Requests::.
-
- Unknown `D' commands are assumed to be device-specific. Its
-arguments are parsed as strings; the whole information is then sent to
-the postprocessor.
-
- In the following command reference, the syntax element <line
-break> means a syntactical line break as defined above.
-
-`D~ H1 V1 H2 V2 ... HN VN<line break>'
- Draw B-spline from current position to offset (H1,V1), then to
- offset (H2,V2), if given, etc. up to (HN,VN). This command takes
- a variable number of argument pairs; the current position is moved
- to the terminal point of the drawn curve.
-
-`Da H1 V1 H2 V2<line break>'
- Draw arc from current position to (H1,V1)+(H2,V2) with center at
- (H1,V1); then move the current position to the final point of the
- arc.
-
-`DC D<line break>'
-`DC D DUMMY-ARG<line break>'
- Draw a solid circle using the current fill color with diameter D
- (integer in basic units `u') with leftmost point at the current
- position; then move the current position to the rightmost point of
- the circle. An optional second integer argument is ignored (this
- allows the formatter to generate an even number of arguments).
- This command is a `gtroff' extension.
-
-`Dc D<line break>'
- Draw circle line with diameter D (integer in basic units `u') with
- leftmost point at the current position; then move the current
- position to the rightmost point of the circle.
-
-`DE H V<line break>'
- Draw a solid ellipse in the current fill color with a horizontal
- diameter of H and a vertical diameter of V (both integers in basic
- units `u') with the leftmost point at the current position; then
- move to the rightmost point of the ellipse. This command is a
- `gtroff' extension.
-
-`De H V<line break>'
- Draw an outlined ellipse with a horizontal diameter of H and a
- vertical diameter of V (both integers in basic units `u') with the
- leftmost point at current position; then move to the rightmost
- point of the ellipse.
-
-`DF COLOR-SCHEME [COMPONENT ...]<line break>'
- Set fill color for solid drawing objects using different color
- schemes; the analoguous command for setting the color of text, line
- graphics, and the outline of graphic objects is `m'. The color
- components are specified as integer arguments between 0 and 65536.
- The number of color components and their meaning vary for the
- different color schemes. These commands are generated by
- `gtroff''s escape sequences `\D'F ...'' and `\M' (with no other
- corresponding graphics commands). No position changing. This
- command is a `gtroff' extension.
-
- `DFc CYAN MAGENTA YELLOW<line break>'
- Set fill color for solid drawing objects using the CMY color
- scheme, having the 3 color components CYAN, MAGENTA, and
- YELLOW.
-
- `DFd<line break>'
- Set fill color for solid drawing objects to the default fill
- color value (black in most cases). No component arguments.
-
- `DFg GRAY<line break>'
- Set fill color for solid drawing objects to the shade of gray
- given by the argument, an integer between 0 (black) and 65536
- (white).
-
- `DFk CYAN MAGENTA YELLOW BLACK<line break>'
- Set fill color for solid drawing objects using the CMYK color
- scheme, having the 4 color components CYAN, MAGENTA, YELLOW,
- and BLACK.
-
- `DFr RED GREEN BLUE<line break>'
- Set fill color for solid drawing objects using the RGB color
- scheme, having the 3 color components RED, GREEN, and BLUE.
-
-`Df N<line break>'
- The argument N must be an integer in the range -32767 to 32767.
-
- 0 <= N <= 1000
- Set the color for filling solid drawing objects to a shade of
- gray, where 0 corresponds to solid white, 1000 (the default)
- to solid black, and values in between to intermediate shades
- of gray; this is obsoleted by command `DFg'.
-
- N < 0 or N > 1000
- Set the filling color to the color that is currently being
- used for the text and the outline, see command `m'. For
- example, the command sequence
-
-
- mg 0 0 65536
- Df -1
-
- sets all colors to blue.
-
- No position changing. This command is a `gtroff' extension.
-
-`Dl H V<line break>'
- Draw line from current position to offset (H,V) (integers in basic
- units `u'); then set current position to the end of the drawn line.
-
-`Dp H1 V1 H2 V2 ... HN VN<line break>'
- Draw a polygon line from current position to offset (H1,V1), from
- there to offset (H2,V2), etc. up to offset (HN,VN), and from there
- back to the starting position. For historical reasons, the
- position is changed by adding the sum of all arguments with odd
- index to the actual horizontal position and the even ones to the
- vertical position. Although this doesn't make sense it is kept
- for compatibility. This command is a `gtroff' extension.
-
-`Dp H1 V1 H2 V2 ... HN VN<line break>'
- Draw a solid polygon in the current fill color rather than an
- outlined polygon, using the same arguments and positioning as the
- corresponding `Dp' command. This command is a `gtroff' extension.
-
-`Dt N<line break>'
- Set the current line thickness to N (an integer in basic units
- `u') if N>0; if N=0 select the smallest available line thickness;
- if N<0 set the line thickness proportional to the point size (this
- is the default before the first `Dt' command was specified). For
- historical reasons, the horizontal position is changed by adding
- the argument to the actual horizontal position, while the vertical
- position is not changed. Although this doesn't make sense it is
- kept for compatibility. This command is a `gtroff' extension.
-
-
-File: groff, Node: Device Control Commands, Next: Obsolete Command, Prev: Graphics Commands, Up: Command Reference
-
-8.1.2.4 Device Control Commands
-...............................
-
-Each device control command starts with the letter `x', followed by a
-space character (optional or arbitrary space or tab in `gtroff') and a
-subcommand letter or word; each argument (if any) must be preceded by a
-syntactical space. All `x' commands are terminated by a syntactical
-line break; no device control command can be followed by another
-command on the same line (except a comment).
-
- The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence
-of characters terminated by the next tab, space, or newline character.
-All characters of the subcommand word but the first are simply ignored.
-For example, `gtroff' outputs the initialization command `x i' as
-`x init' and the resolution command `x r' as `x res'.
-
- In the following, the syntax element <line break> means a
-syntactical line break (*note Separation::).
-
-`xF NAME<line break>'
- The `F' stands for FILENAME.
-
- Use NAME as the intended name for the current file in error
- reports. This is useful for remembering the original file name
- when `gtroff' uses an internal piping mechanism. The input file is
- not changed by this command. This command is a `gtroff' extension.
-
-`xf N S<line break>'
- The `f' stands for FONT.
-
- Mount font position N (a non-negative integer) with font named S
- (a text word). *Note Font Positions::.
-
-`xH N<line break>'
- The `H' stands for HEIGHT.
-
- Set glyph height to N (a positive integer in scaled points `z').
- AT&T `troff' uses the unit points (`p') instead. *Note Output
- Language Compatibility::.
-
-`xi<line break>'
- The `i' stands for INIT.
-
- Initialize device. This is the third command of the prologue.
-
-`xp<line break>'
- The `p' stands for PAUSE.
-
- Parsed but ignored. The original UNIX troff manual writes
-
- pause device, can be restarted
-
-`xr N H V<line break>'
- The `r' stands for RESOLUTION.
-
- Resolution is N, while H is the minimal horizontal motion, and V
- the minimal vertical motion possible with this device; all
- arguments are positive integers in basic units `u' per inch. This
- is the second command of the prologue.
-
-`xS N<line break>'
- The `S' stands for SLANT.
-
- Set slant to N (an integer in basic units `u').
-
-`xs<line break>'
- The `s' stands for STOP.
-
- Terminates the processing of the current file; issued as the last
- command of any intermediate troff output.
-
-`xt<line break>'
- The `t' stands for TRAILER.
-
- Generate trailer information, if any. In GTROFF, this is actually
- just ignored.
-
-`xT XXX<line break>'
- The `T' stands for TYPESETTER.
-
- Set name of device to word XXX, a sequence of characters ended by
- the next white space character. The possible device names coincide
- with those from the `groff' `-T' option. This is the first
- command of the prologue.
-
-`xu N<line break>'
- The `u' stands for UNDERLINE.
-
- Configure underlining of spaces. If N is 1, start underlining of
- spaces; if N is 0, stop underlining of spaces. This is needed for
- the `cu' request in nroff mode and is ignored otherwise. This
- command is a `gtroff' extension.
-
-`xX ANYTHING<line break>'
- The `x' stands for X-ESCAPE.
-
- Send string ANYTHING uninterpreted to the device. If the line
- following this command starts with a `+' character this line is
- interpreted as a continuation line in the following sense. The
- `+' is ignored, but a newline character is sent instead to the
- device, the rest of the line is sent uninterpreted. The same
- applies to all following lines until the first character of a line
- is not a `+' character. This command is generated by the `gtroff'
- escape sequence `\X'. The line-continuing feature is a `gtroff'
- extension.
-
-
-File: groff, Node: Obsolete Command, Prev: Device Control Commands, Up: Command Reference
-
-8.1.2.5 Obsolete Command
-........................
-
-In AT&T `troff' output, the writing of a single glyph is mostly done by
-a very strange command that combines a horizontal move and a single
-character giving the glyph name. It doesn't have a command code, but
-is represented by a 3-character argument consisting of exactly 2 digits
-and a character.
-
-DDG
- Move right DD (exactly two decimal digits) basic units `u', then
- print glyph G (represented as a single character).
-
- In `gtroff', arbitrary syntactical space around and within this
- command is allowed to be added. Only when a preceding command on
- the same line ends with an argument of variable length a
- separating space is obligatory. In AT&T `troff', large clusters
- of these and other commands are used, mostly without spaces; this
- made such output almost unreadable.
-
- For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two decimal
-digits. In `gtroff', this is only used for the devices `X75',
-`X75-12', `X100', and `X100-12'. For other devices, the commands `t'
-and `u' provide a better functionality.
-
-
-File: groff, Node: Intermediate Output Examples, Next: Output Language Compatibility, Prev: Command Reference, Up: gtroff Output
-
-8.1.3 Intermediate Output Examples
-----------------------------------
-
-This section presents the intermediate output generated from the same
-input for three different devices. The input is the sentence `hell
-world' fed into `gtroff' on the command line.
-
-High-resolution device `ps'
- This is the standard output of `gtroff' if no `-T' option is given.
-
- shell> echo "hell world" | groff -Z -T ps
-
- x T ps
- x res 72000 1 1
- x init
- p1
- x font 5 TR
- f5
- s10000
- V12000
- H72000
- thell
- wh2500
- tw
- H96620
- torld
- n12000 0
- x trailer
- V792000
- x stop
-
- This output can be fed into `grops' to get its representation as a
- PostScript file.
-
-Low-resolution device `latin1'
- This is similar to the high-resolution device except that the
- positioning is done at a minor scale. Some comments (lines
- starting with `#') were added for clarification; they were not
- generated by the formatter.
-
- shell> echo "hell world" | groff -Z -T latin1
-
- # prologue
- x T latin1
- x res 240 24 40
- x init
- # begin a new page
- p1
- # font setup
- x font 1 R
- f1
- s10
- # initial positioning on the page
- V40
- H0
- # write text `hell'
- thell
- # inform about space, and issue a horizontal jump
- wh24
- # write text `world'
- tworld
- # announce line break, but do nothing because ...
- n40 0
- # ... the end of the document has been reached
- x trailer
- V2640
- x stop
-
- This output can be fed into `grotty' to get a formatted text
- document.
-
-AT&T `troff' output
- Since a computer monitor has a very low resolution compared to
- modern printers the intermediate output for the X Window devices
- can use the jump-and-write command with its 2-digit displacements.
-
- shell> echo "hell world" | groff -Z -T X100
-
- x T X100
- x res 100 1 1
- x init
- p1
- x font 5 TR
- f5
- s10
- V16
- H100
- # write text with jump-and-write commands
- ch07e07l03lw06w11o07r05l03dh7
- n16 0
- x trailer
- V1100
- x stop
-
- This output can be fed into `xditview' or `gxditview' for
- displaying in X.
-
- Due to the obsolete jump-and-write command, the text clusters in
- the AT&T `troff' output are almost unreadable.
-
-
-File: groff, Node: Output Language Compatibility, Prev: Intermediate Output Examples, Up: gtroff Output
-
-8.1.4 Output Language Compatibility
------------------------------------
-
-The intermediate output language of AT&T `troff' was first documented
-in the UNIX troff manual, with later additions documented in `A
-Typesetter-indenpendent TROFF', written by Brian Kernighan.
-
- The `gtroff' intermediate output format is compatible with this
-specification except for the following features.
-
- * The classical quasi device independence is not yet implemented.
-
- * The old hardware was very different from what we use today. So the
- `groff' devices are also fundamentally different from the ones in
- AT&T `troff'. For example, the AT&T PostScript device is called
- `post' and has a resolution of only 720 units per inch, suitable
- for printers 20 years ago, while `groff''s `ps' device has a
- resolution of 72000 units per inch. Maybe, by implementing some
- rescaling mechanism similar to the classical quasi device
- independence, `groff' could emulate AT&T's `post' device.
-
- * The B-spline command `D~' is correctly handled by the intermediate
- output parser, but the drawing routines aren't implemented in some
- of the postprocessor programs.
-
- * The argument of the commands `s' and `x H' has the implicit unit
- scaled point `z' in `gtroff', while AT&T `troff' has point (`p').
- This isn't an incompatibility but a compatible extension, for both
- units coincide for all devices without a `sizescale' parameter in
- the `DESC' file, including all postprocessors from AT&T and
- `groff''s text devices. The few `groff' devices with a
- `sizescale' parameter either do not exist for AT&T `troff', have a
- different name, or seem to have a different resolution. So
- conflicts are very unlikely.
-
- * The position changing after the commands `Dp', `DP', and `Dt' is
- illogical, but as old versions of `gtroff' used this feature it is
- kept for compatibility reasons.
-
-
-
-File: groff, Node: Font Files, Prev: gtroff Output, Up: File formats
-
-8.2 Font Files
-==============
-
-The `gtroff' font format is roughly a superset of the `ditroff' font
-format (as used in later versions of AT&T `troff' and its descendants).
-Unlike the `ditroff' font format, there is no associated binary
-format; all files are text files.(1) (*note Font Files-Footnote-1::)
-The font files for device NAME are stored in a directory `devNAME'.
-There are two types of file: a device description file called `DESC'
-and for each font F a font file called `F'.
-
-* Menu:
-
-* DESC File Format::
-* Font File Format::
-
-
-File: groff, Node: Font Files-Footnotes, Up: Font Files
-
- (1) Plan 9 `troff' has also abandoned the binary format.
-
-
-File: groff, Node: DESC File Format, Next: Font File Format, Prev: Font Files, Up: Font Files
-
-8.2.1 `DESC' File Format
-------------------------
-
-The `DESC' file can contain the following types of line. Except for
-the `charset' keyword which must comes last (if at all), the order of
-the lines is not important.
-
-`res N'
- There are N machine units per inch.
-
-`hor N'
- The horizontal resolution is N machine units. All horizontal
- quantities are rounded to be multiples of this value.
-
-`vert N'
- The vertical resolution is N machine units. All vertical
- quantities are rounded to be multiples of this value.
-
-`sizescale N'
- The scale factor for point sizes. By default this has a value
- of 1. One scaled point is equal to one point/N. The arguments to
- the `unitwidth' and `sizes' commands are given in scaled points.
- *Note Fractional Type Sizes::, for more information.
-
-`unitwidth N'
- Quantities in the font files are given in machine units for fonts
- whose point size is N scaled points.
-
-`prepro PROGRAM'
- Call PROGRAM as a preprocessor. Currently, this keyword is used
- by `groff' with option `-Thtml' only.
-
-`postpro PROGRAM'
- Call PROGRAM as a postprocessor. For example, the line
-
-
- postpro grodvi
-
- in the file `devdvi/DESC' makes `groff' call `grodvi' if option
- `-Tdvi' is given (and `-Z' isn't used).
-
-`tcommand'
- This means that the postprocessor can handle the `t' and `u'
- intermediate output commands.
-
-`sizes S1 S2 ... SN 0'
- This means that the device has fonts at S1, S2, ... SN scaled
- points. The list of sizes must be terminated by 0 (this is digit
- zero). Each SI can also be a range of sizes M-N. The list can
- extend over more than one line.
-
-`styles S1 S2 ... SM'
- The first M font positions are associated with styles S1 ... SM.
-
-`fonts N F1 F2 F3 ... FN'
- Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N
- where M is the number of styles. This command may extend over
- more than one line. A font name of 0 means no font is mounted on
- the corresponding font position.
-
-`family FAM'
- The default font family is FAM.
-
-`use_charnames_in_special'
- This command indicates that `gtroff' should encode special
- characters inside special commands. Currently, this is only used
- by the HTML output device. *Note Postprocessor Access::.
-
-`papersize STRING ...'
- Select a paper size. Valid values for STRING are the ISO paper
- types `A0'-`A7', `B0'-`B7', `C0'-`C7', `D0'-`D7', `DL', and the US
- paper types `letter', `legal', `tabloid', `ledger', `statement',
- `executive', `com10', and `monarch'. Case is not significant for
- STRING if it holds predefined paper types. Alternatively, STRING
- can be a file name (e.g. `/etc/papersize'); if the file can be
- opened, `groff' reads the first line and tests for the above paper
- sizes. Finally, STRING can be a custom paper size in the format
- `LENGTH,WIDTH' (no spaces before and after the comma). Both
- LENGTH and WIDTH must have a unit appended; valid values are `i'
- for inches, `C' for centimeters, `p' for points, and `P' for
- picas. Example: `12c,235p'. An argument which starts with a
- digit is always treated as a custom paper format. `papersize'
- sets both the vertical and horizontal dimension of the output
- medium.
-
- More than one argument can be specified; `groff' scans from left to
- right and uses the first valid paper specification.
-
-`pass_filenames'
- Tell `gtroff' to emit the name of the source file currently being
- processed. This is achieved by the intermediate output command
- `F'. Currently, this is only used by the HTML output device.
-
-`print PROGRAM'
- Use PROGRAM as a spooler program for printing. If omitted, the
- `-l' and `-L' options of `groff' are ignored.
-
-`charset'
- This line and everything following in the file are ignored. It is
- allowed for the sake of backwards compatibility.
-
- The `res', `unitwidth', `fonts', and `sizes' lines are mandatory.
-Other commands are ignored by `gtroff' but may be used by
-postprocessors to store arbitrary information about the device in the
-`DESC' file.
-
- Here a list of obsolete keywords which are recognized by `groff' but
-completely ignored: `spare1', `spare2', `biggestfont'.
-
-
-File: groff, Node: Font File Format, Prev: DESC File Format, Up: Font Files
-
-8.2.2 Font File Format
-----------------------
-
-A "font file", also (and probably better) called a "font description
-file", has two sections. The first section is a sequence of lines each
-containing a sequence of blank delimited words; the first word in the
-line is a key, and subsequent words give a value for that key.
-
-`name F'
- The name of the font is F.
-
-`spacewidth N'
- The normal width of a space is N.
-
-`slant N'
- The glyphs of the font have a slant of N degrees. (Positive means
- forward.)
-
-`ligatures LIG1 LIG2 ... LIGN [0]'
- Glyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are
- `ff', `fi', `fl', `ffi' and `ffl'. For backwards compatibility,
- the list of ligatures may be terminated with a 0. The list of
- ligatures may not extend over more than one line.
-
-`special'
- The font is "special"; this means that when a glyph is requested
- that is not present in the current font, it is searched for in any
- special fonts that are mounted.
-
- Other commands are ignored by `gtroff' but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
- The first section can contain comments which start with the `#'
-character and extend to the end of a line.
-
- The second section contains one or two subsections. It must contain
-a `charset' subsection and it may also contain a `kernpairs'
-subsection. These subsections can appear in any order. Each
-subsection starts with a word on a line by itself.
-
- The word `charset' starts the character set subsection.(1) (*note
-Font File Format-Footnote-1::) The `charset' line is followed by a
-sequence of lines. Each line gives information for one glyph. A line
-comprises a number of fields separated by blanks or tabs. The format is
-
- NAME METRICS TYPE CODE [ENTITY-NAME] [`--' COMMENT]
-
-NAME identifies the glyph name(2) (*note Font File Format-Footnote-2::):
-If NAME is a single character C then it corresponds to the `gtroff'
-input character C; if it is of the form `\C' where C is a single
-character, then it corresponds to the special character `\[C]';
-otherwise it corresponds to the special character `\[NAME]'. If it is
-exactly two characters XX it can be entered as `\(XX'. Note that
-single-letter special characters can't be accessed as `\C'; the only
-exception is `\-' which is identical to `\[-]'.
-
- `gtroff' supports 8-bit input characters; however some utilities
-have difficulties with eight-bit characters. For this reason, there is
-a convention that the entity name `charN' is equivalent to the single
-input character whose code is N. For example, `char163' would be
-equivalent to the character with code 163 which is the pounds sterling
-sign in the ISO Latin-1 character set. You shouldn't use `charN'
-entities in font description files since they are related to input, not
-output. Otherwise, you get hard-coded connections between input and
-output encoding which prevents use of different (input) character sets.
-
- The name `---' is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the `\N' escape sequence in
-`gtroff'.
-
- The TYPE field gives the glyph type:
-
-`1'
- the glyph has a descender, for example, `p';
-
-`2'
- the glyph has an ascender, for example, `b';
-
-`3'
- the glyph has both an ascender and a descender, for example, `('.
-
- The CODE field gives the code which the postprocessor uses to print
-the glyph. The glyph can also be input to `gtroff' using this code by
-means of the `\N' escape sequence. CODE can be any integer. If it
-starts with `0' it is interpreted as octal; if it starts with `0x' or
-`0X' it is interpreted as hexadecimal. Note, however, that the `\N'
-escape sequence only accepts a decimal integer.
-
- The ENTITY-NAME field gives an ASCII string identifying the glyph
-which the postprocessor uses to print the `gtroff' glyph NAME. This
-field is optional and has been introduced so that the HTML device
-driver can encode its character set. For example, the glyph `\[Po]' is
-represented as `&pound;' in HTML 4.0.
-
- Anything on the line after the ENTITY-NAME field resp. after `--'
-will be ignored.
-
- The METRICS field has the form:
-
- WIDTH[`,'HEIGHT[`,'DEPTH[`,'ITALIC-CORRECTION
- [`,'LEFT-ITALIC-CORRECTION[`,'SUBSCRIPT-CORRECTION]]]]]
-
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only). Missing subfields are
-assumed to be 0. The subfields are all decimal integers. Since there
-is no associated binary format, these values are not required to fit
-into a variable of type `char' as they are in `ditroff'. The WIDTH
-subfield gives the width of the glyph. The HEIGHT subfield gives the
-height of the glyph (upwards is positive); if a glyph does not extend
-above the baseline, it should be given a zero height, rather than a
-negative height. The DEPTH subfield gives the depth of the glyph, that
-is, the distance from the baseline to the lowest point below the
-baseline to which the glyph extends (downwards is positive); if a glyph
-does not extend below the baseline, it should be given a zero depth,
-rather than a negative depth. The ITALIC-CORRECTION subfield gives the
-amount of space that should be added after the glyph when it is
-immediately to be followed by a glyph from a roman font. The
-LEFT-ITALIC-CORRECTION subfield gives the amount of space that should
-be added before the glyph when it is immediately to be preceded by a
-glyph from a roman font. The SUBSCRIPT-CORRECTION gives the amount of
-space that should be added after a glyph before adding a subscript.
-This should be less than the italic correction.
-
- A line in the `charset' section can also have the format
-
-
- NAME "
-
-This indicates that NAME is just another name for the glyph mentioned
-in the preceding line.
-
- The word `kernpairs' starts the kernpairs section. This contains a
-sequence of lines of the form:
-
-
- C1 C2 N
-
-This means that when glyph C1 appears next to glyph C2 the space
-between them should be increased by N. Most entries in the kernpairs
-section have a negative value for N.
-
-
-File: groff, Node: Font File Format-Footnotes, Up: Font File Format
-
- (1) This keyword is misnamed since it starts a list of ordered
-glyphs, not characters.
-
- (2) The distinction between input, characters, and output, glyphs,
-is not clearly separated in the terminology of `groff'; for example,
-the `char' request should be called `glyph' since it defines an output
-entity.
-
-
-File: groff, Node: Installation, Next: Copying This Manual, Prev: File formats, Up: Top
-
-9 Installation
-**************
-
-
-File: groff, Node: Copying This Manual, Next: Request Index, Prev: Installation, Up: Top
-
-Appendix A Copying This Manual
-******************************
-
-* Menu:
-
-* GNU Free Documentation License:: License for copying this manual.
-
-
-File: groff, Node: GNU Free Documentation License, Up: Copying This Manual
-
-A.1 GNU Free Documentation License
-==================================
-
- Version 1.2, November 2002
-
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-A.1.1 ADDENDUM: How to use this License for your documents
-----------------------------------------------------------
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-
-File: groff, Node: Request Index, Next: Escape Index, Prev: Copying This Manual, Up: Top
-
-Appendix B Request Index
-************************
-
-Requests appear without the leading control character (normally either
-`.' or `'').
-
-
-* Menu:
-
-* ab: Debugging. (line 40)
-* ad: Manipulating Filling and Adjusting.
- (line 52)
-* af: Assigning Formats. (line 13)
-* aln: Setting Registers. (line 79)
-* als: Strings. (line 224)
-* am: Writing Macros. (line 107)
-* am1: Writing Macros. (line 108)
-* ami: Writing Macros. (line 109)
-* ami1: Writing Macros. (line 110)
-* as: Strings. (line 170)
-* as1: Strings. (line 171)
-* asciify: Diversions. (line 195)
-* backtrace: Debugging. (line 94)
-* bd: Artificial Fonts. (line 96)
-* blm: Blank Line Traps. (line 7)
-* box: Diversions. (line 25)
-* boxa: Diversions. (line 26)
-* bp: Page Control. (line 7)
-* br: Manipulating Filling and Adjusting.
- (line 12)
-* break: while. (line 73)
-* brp: Manipulating Filling and Adjusting.
- (line 112)
-* c2: Character Translations.
- (line 16)
-* cc: Character Translations.
- (line 10)
-* ce: Manipulating Filling and Adjusting.
- (line 189)
-* cf: I/O. (line 49)
-* cflags: Using Symbols. (line 241)
-* ch: Page Location Traps. (line 106)
-* char: Using Symbols. (line 281)
-* chop: Strings. (line 231)
-* close: I/O. (line 230)
-* color: Colors. (line 7)
-* composite: Using Symbols. (line 197)
-* continue: while. (line 77)
-* cp: Implementation Differences.
- (line 23)
-* cs: Artificial Fonts. (line 127)
-* cu: Artificial Fonts. (line 87)
-* da: Diversions. (line 18)
-* de: Writing Macros. (line 10)
-* de1: Writing Macros. (line 11)
-* defcolor: Colors. (line 21)
-* dei: Writing Macros. (line 12)
-* dei1: Writing Macros. (line 13)
-* di: Diversions. (line 17)
-* do: Implementation Differences.
- (line 24)
-* ds: Strings. (line 11)
-* ds1: Strings. (line 12)
-* dt: Diversion Traps. (line 7)
-* ec: Character Translations.
- (line 47)
-* ecr: Character Translations.
- (line 59)
-* ecs: Character Translations.
- (line 58)
-* el: if-else. (line 28)
-* em: End-of-input Traps. (line 7)
-* eo: Character Translations.
- (line 22)
-* ev: Environments. (line 38)
-* evc: Environments. (line 72)
-* ex: Debugging. (line 45)
-* fam: Font Families. (line 19)
-* fc: Fields. (line 18)
-* fchar: Using Symbols. (line 282)
-* fcolor: Colors. (line 85)
-* fi: Manipulating Filling and Adjusting.
- (line 30)
-* fl: Debugging. (line 85)
-* fp: Font Positions. (line 11)
-* fschar: Using Symbols. (line 283)
-* fspecial: Special Fonts. (line 18)
-* ft <1>: Font Positions. (line 58)
-* ft: Changing Fonts. (line 7)
-* ftr: Changing Fonts. (line 53)
-* gcolor: Colors. (line 51)
-* hc: Manipulating Hyphenation.
- (line 105)
-* hcode: Manipulating Hyphenation.
- (line 174)
-* hla: Manipulating Hyphenation.
- (line 253)
-* hlm: Manipulating Hyphenation.
- (line 45)
-* hpf: Manipulating Hyphenation.
- (line 114)
-* hpfa: Manipulating Hyphenation.
- (line 115)
-* hpfcode: Manipulating Hyphenation.
- (line 116)
-* hw: Manipulating Hyphenation.
- (line 61)
-* hy: Manipulating Hyphenation.
- (line 9)
-* hym: Manipulating Hyphenation.
- (line 209)
-* hys: Manipulating Hyphenation.
- (line 224)
-* ie: if-else. (line 27)
-* if: if-else. (line 10)
-* ig: Comments. (line 67)
-* in: Line Layout. (line 91)
-* it: Input Line Traps. (line 7)
-* itc: Input Line Traps. (line 8)
-* kern: Ligatures and Kerning.
- (line 41)
-* lc: Leaders. (line 23)
-* length: Strings. (line 204)
-* lf: Debugging. (line 10)
-* lg: Ligatures and Kerning.
- (line 23)
-* linetabs: Tabs and Fields. (line 147)
-* ll: Line Layout. (line 145)
-* ls: Manipulating Spacing.
- (line 51)
-* lt: Page Layout. (line 60)
-* mc: Miscellaneous. (line 76)
-* mk: Page Motions. (line 10)
-* mso: I/O. (line 41)
-* na: Manipulating Filling and Adjusting.
- (line 104)
-* ne: Page Control. (line 34)
-* nf: Manipulating Filling and Adjusting.
- (line 41)
-* nh: Manipulating Hyphenation.
- (line 37)
-* nm: Miscellaneous. (line 10)
-* nn: Miscellaneous. (line 72)
-* nop: if-else. (line 24)
-* nr <1>: Auto-increment. (line 11)
-* nr: Setting Registers. (line 9)
-* nroff: Troff and Nroff Mode.
- (line 32)
-* ns: Manipulating Spacing.
- (line 113)
-* nx: I/O. (line 74)
-* open: I/O. (line 198)
-* opena: I/O. (line 199)
-* os: Page Control. (line 55)
-* output: Diversions. (line 180)
-* pc: Page Layout. (line 89)
-* pi: I/O. (line 138)
-* pl: Page Layout. (line 10)
-* pm: Debugging. (line 64)
-* pn: Page Layout. (line 77)
-* pnr: Debugging. (line 75)
-* po: Line Layout. (line 61)
-* ps: Changing Type Sizes. (line 7)
-* psbb: Miscellaneous. (line 141)
-* pso: I/O. (line 30)
-* ptr: Debugging. (line 79)
-* pvs: Changing Type Sizes. (line 133)
-* rchar: Using Symbols. (line 340)
-* rd: I/O. (line 79)
-* return: Writing Macros. (line 143)
-* rfschar: Using Symbols. (line 341)
-* rj: Manipulating Filling and Adjusting.
- (line 238)
-* rm: Strings. (line 219)
-* rn: Strings. (line 216)
-* rnn: Setting Registers. (line 75)
-* rr: Setting Registers. (line 71)
-* rs: Manipulating Spacing.
- (line 114)
-* rt: Page Motions. (line 11)
-* schar: Using Symbols. (line 284)
-* shc: Manipulating Hyphenation.
- (line 240)
-* shift: Parameters. (line 30)
-* sizes: Changing Type Sizes. (line 69)
-* so: I/O. (line 9)
-* sp: Manipulating Spacing.
- (line 7)
-* special: Special Fonts. (line 17)
-* spreadwarn: Debugging. (line 131)
-* ss: Manipulating Filling and Adjusting.
- (line 134)
-* sty: Font Families. (line 61)
-* substring: Strings. (line 188)
-* sv: Page Control. (line 54)
-* sy: I/O. (line 160)
-* ta: Tabs and Fields. (line 14)
-* tc: Tabs and Fields. (line 139)
-* ti: Line Layout. (line 117)
-* tkf: Ligatures and Kerning.
- (line 60)
-* tl: Page Layout. (line 35)
-* tm: Debugging. (line 25)
-* tm1: Debugging. (line 26)
-* tmc: Debugging. (line 27)
-* tr: Character Translations.
- (line 153)
-* trf: I/O. (line 48)
-* trin: Character Translations.
- (line 154)
-* trnt: Character Translations.
- (line 245)
-* troff: Troff and Nroff Mode.
- (line 24)
-* uf: Artificial Fonts. (line 91)
-* ul: Artificial Fonts. (line 65)
-* unformat: Diversions. (line 215)
-* vpt: Page Location Traps. (line 17)
-* vs: Changing Type Sizes. (line 84)
-* warn: Debugging. (line 154)
-* warnscale: Debugging. (line 127)
-* wh: Page Location Traps. (line 29)
-* while: while. (line 10)
-* write: I/O. (line 210)
-* writec: I/O. (line 211)
-* writem: I/O. (line 221)
-
-
-File: groff, Node: Escape Index, Next: Operator Index, Prev: Request Index, Up: Top
-
-Appendix C Escape Index
-***********************
-
-Any escape sequence `\X' with X not in the list below emits a warning,
-printing glyph X.
-
-
-* Menu:
-
-* \: Using Symbols. (line 139)
-* \!: Diversions. (line 133)
-* \": Comments. (line 10)
-* \#: Comments. (line 50)
-* \$: Parameters. (line 19)
-* \$*: Parameters. (line 38)
-* \$0: Parameters. (line 48)
-* \$@: Parameters. (line 39)
-* \%: Manipulating Hyphenation.
- (line 84)
-* \&: Ligatures and Kerning.
- (line 102)
-* \': Using Symbols. (line 229)
-* \): Ligatures and Kerning.
- (line 131)
-* \*: Strings. (line 13)
-* \,: Ligatures and Kerning.
- (line 92)
-* \-: Using Symbols. (line 238)
-* \.: Character Translations.
- (line 126)
-* \/: Ligatures and Kerning.
- (line 80)
-* \0: Page Motions. (line 139)
-* \<colon>: Manipulating Hyphenation.
- (line 85)
-* \<RET>: Line Control. (line 43)
-* \<SP>: Page Motions. (line 123)
-* \?: Diversions. (line 134)
-* \\: Character Translations.
- (line 68)
-* \^: Page Motions. (line 135)
-* \`: Using Symbols. (line 234)
-* \a: Leaders. (line 18)
-* \A: Identifiers. (line 55)
-* \b: Drawing Requests. (line 223)
-* \B: Expressions. (line 65)
-* \C: Using Symbols. (line 191)
-* \c: Line Control. (line 44)
-* \D: Drawing Requests. (line 71)
-* \d: Page Motions. (line 109)
-* \E: Character Translations.
- (line 70)
-* \e: Character Translations.
- (line 69)
-* \f: Font Positions. (line 59)
-* \F: Font Families. (line 21)
-* \f: Changing Fonts. (line 8)
-* \g: Assigning Formats. (line 75)
-* \h: Page Motions. (line 112)
-* \H: Artificial Fonts. (line 13)
-* \k: Page Motions. (line 203)
-* \L: Drawing Requests. (line 50)
-* \l: Drawing Requests. (line 16)
-* \M: Colors. (line 86)
-* \m: Colors. (line 52)
-* \N: Using Symbols. (line 207)
-* \n <1>: Auto-increment. (line 19)
-* \n: Interpolating Registers.
- (line 9)
-* \O: Suppressing output. (line 7)
-* \o: Page Motions. (line 218)
-* \p: Manipulating Filling and Adjusting.
- (line 113)
-* \r: Page Motions. (line 103)
-* \R: Setting Registers. (line 10)
-* \s: Changing Type Sizes. (line 10)
-* \S: Artificial Fonts. (line 45)
-* \t: Tabs and Fields. (line 10)
-* \u: Page Motions. (line 106)
-* \V: I/O. (line 248)
-* \v: Page Motions. (line 87)
-* \w: Page Motions. (line 147)
-* \X: Postprocessor Access.
- (line 11)
-* \x: Manipulating Spacing.
- (line 71)
-* \Y: Postprocessor Access.
- (line 25)
-* \Z: Page Motions. (line 226)
-* \z: Page Motions. (line 222)
-* \{: if-else. (line 38)
-* \|: Page Motions. (line 131)
-* \}: if-else. (line 38)
-* \~: Page Motions. (line 127)
-
-
-File: groff, Node: Operator Index, Next: Register Index, Prev: Escape Index, Up: Top
-
-Appendix D Operator Index
-*************************
-
-
-* Menu:
-
-* !: Expressions. (line 21)
-* %: Expressions. (line 8)
-* &: Expressions. (line 19)
-* (: Expressions. (line 41)
-* ): Expressions. (line 41)
-* *: Expressions. (line 8)
-* +: Expressions. (line 8)
-* -: Expressions. (line 8)
-* /: Expressions. (line 8)
-* <: Expressions. (line 15)
-* <=: Expressions. (line 15)
-* <?: Expressions. (line 26)
-* <colon>: Expressions. (line 19)
-* =: Expressions. (line 15)
-* ==: Expressions. (line 15)
-* >: Expressions. (line 15)
-* >=: Expressions. (line 15)
-* >?: Expressions. (line 26)
-
-
-File: groff, Node: Register Index, Next: Macro Index, Prev: Operator Index, Up: Top
-
-Appendix E Register Index
-*************************
-
-The macro package or program a specific register belongs to is appended
-in brackets.
-
- A register name `x' consisting of exactly one character can be
-accessed as `\nx'. A register name `xx' consisting of exactly two
-characters can be accessed as `\n(xx'. Register names `xxx' of any
-length can be accessed as `\n[xxx]'.
-
-
-* Menu:
-
-* $$: Built-in Registers. (line 96)
-* % <1>: Page Control. (line 10)
-* %: Page Layout. (line 89)
-* .$: Parameters. (line 10)
-* .a: Manipulating Spacing.
- (line 72)
-* .A: Built-in Registers. (line 103)
-* .b: Artificial Fonts. (line 98)
-* .C: Implementation Differences.
- (line 25)
-* .c: Built-in Registers. (line 73)
-* .cdp: Environments. (line 96)
-* .ce: Manipulating Filling and Adjusting.
- (line 190)
-* .cht: Environments. (line 95)
-* .color: Colors. (line 8)
-* .csk: Environments. (line 97)
-* .d: Diversions. (line 62)
-* .ev: Environments. (line 39)
-* .f: Font Positions. (line 12)
-* .F: Built-in Registers. (line 12)
-* .fam: Font Families. (line 20)
-* .fn: Font Families. (line 24)
-* .fp: Font Positions. (line 13)
-* .g: Built-in Registers. (line 99)
-* .h: Diversions. (line 69)
-* .H: Built-in Registers. (line 15)
-* .height: Artificial Fonts. (line 16)
-* .hla: Manipulating Hyphenation.
- (line 254)
-* .hlc: Manipulating Hyphenation.
- (line 47)
-* .hlm: Manipulating Hyphenation.
- (line 46)
-* .hy: Manipulating Hyphenation.
- (line 10)
-* .hym: Manipulating Hyphenation.
- (line 210)
-* .hys: Manipulating Hyphenation.
- (line 225)
-* .i: Line Layout. (line 94)
-* .in: Line Layout. (line 120)
-* .int: Line Control. (line 45)
-* .j: Manipulating Filling and Adjusting.
- (line 53)
-* .k: Page Motions. (line 214)
-* .kern: Ligatures and Kerning.
- (line 42)
-* .l: Line Layout. (line 148)
-* .L: Manipulating Spacing.
- (line 52)
-* .lg: Ligatures and Kerning.
- (line 24)
-* .linetabs: Tabs and Fields. (line 148)
-* .ll: Line Layout. (line 149)
-* .lt: Page Layout. (line 63)
-* .M: Colors. (line 89)
-* .m: Colors. (line 55)
-* .n: Environments. (line 112)
-* .ne: Page Location Traps. (line 118)
-* .ns: Manipulating Spacing.
- (line 115)
-* .o: Line Layout. (line 64)
-* .p: Page Layout. (line 13)
-* .P: Built-in Registers. (line 108)
-* .pe: Page Location Traps. (line 139)
-* .pn: Page Layout. (line 80)
-* .ps: Fractional Type Sizes.
- (line 35)
-* .psr: Fractional Type Sizes.
- (line 42)
-* .pvs: Changing Type Sizes. (line 136)
-* .rj: Manipulating Filling and Adjusting.
- (line 239)
-* .s: Changing Type Sizes. (line 11)
-* .slant: Artificial Fonts. (line 46)
-* .sr: Fractional Type Sizes.
- (line 43)
-* .ss: Manipulating Filling and Adjusting.
- (line 135)
-* .sss: Manipulating Filling and Adjusting.
- (line 136)
-* .sty: Changing Fonts. (line 11)
-* .t: Page Location Traps. (line 97)
-* .T: Built-in Registers. (line 114)
-* .tabs: Tabs and Fields. (line 15)
-* .trunc: Page Location Traps. (line 127)
-* .u: Manipulating Filling and Adjusting.
- (line 31)
-* .v: Changing Type Sizes. (line 87)
-* .V: Built-in Registers. (line 23)
-* .vpt: Page Location Traps. (line 18)
-* .w: Environments. (line 94)
-* .warn: Debugging. (line 155)
-* .x: Built-in Registers. (line 85)
-* .Y: Built-in Registers. (line 93)
-* .y: Built-in Registers. (line 89)
-* .z: Diversions. (line 61)
-* c.: Built-in Registers. (line 74)
-* ct: Page Motions. (line 152)
-* dl: Diversions. (line 87)
-* dn: Diversions. (line 86)
-* dw: Built-in Registers. (line 39)
-* dy: Built-in Registers. (line 42)
-* FAM [ms]: ms Document Control Registers.
- (line 110)
-* FF [ms]: ms Document Control Registers.
- (line 184)
-* FI [ms]: ms Document Control Registers.
- (line 177)
-* FL [ms]: ms Document Control Registers.
- (line 170)
-* FM [ms]: ms Document Control Registers.
- (line 47)
-* FPD [ms]: ms Document Control Registers.
- (line 221)
-* FPS [ms]: ms Document Control Registers.
- (line 204)
-* FVS [ms]: ms Document Control Registers.
- (line 212)
-* GROWPS [ms]: ms Document Control Registers.
- (line 88)
-* GS [ms]: Differences from AT&T ms.
- (line 46)
-* HM [ms]: ms Document Control Registers.
- (line 40)
-* HORPHANS [ms]: ms Document Control Registers.
- (line 154)
-* hours: Built-in Registers. (line 35)
-* hp: Page Motions. (line 211)
-* HY [ms]: ms Document Control Registers.
- (line 101)
-* LL [ms]: ms Document Control Registers.
- (line 25)
-* llx: Miscellaneous. (line 142)
-* lly: Miscellaneous. (line 143)
-* ln: Built-in Registers. (line 79)
-* LT [ms]: ms Document Control Registers.
- (line 32)
-* MINGW [ms] <1>: Additional ms Macros.
- (line 28)
-* MINGW [ms]: ms Document Control Registers.
- (line 231)
-* minutes: Built-in Registers. (line 31)
-* mo: Built-in Registers. (line 45)
-* nl: Page Control. (line 68)
-* opmaxx: Suppressing output. (line 19)
-* opmaxy: Suppressing output. (line 19)
-* opminx: Suppressing output. (line 19)
-* opminy: Suppressing output. (line 19)
-* PD [ms]: ms Document Control Registers.
- (line 127)
-* PI [ms]: ms Document Control Registers.
- (line 120)
-* PO [ms]: ms Document Control Registers.
- (line 16)
-* PORPHANS [ms]: ms Document Control Registers.
- (line 142)
-* PS [ms]: ms Document Control Registers.
- (line 57)
-* ps4html [grohtml]: grohtml specific registers and strings.
- (line 7)
-* PSINCR [ms]: ms Document Control Registers.
- (line 77)
-* QI [ms]: ms Document Control Registers.
- (line 134)
-* rsb: Page Motions. (line 151)
-* rst: Page Motions. (line 150)
-* sb: Page Motions. (line 149)
-* seconds: Built-in Registers. (line 26)
-* skw: Page Motions. (line 154)
-* slimit: Debugging. (line 119)
-* ssc: Page Motions. (line 153)
-* st: Page Motions. (line 148)
-* systat: I/O. (line 161)
-* urx: Miscellaneous. (line 144)
-* ury: Miscellaneous. (line 145)
-* VS [ms]: ms Document Control Registers.
- (line 67)
-* year: Built-in Registers. (line 48)
-* yr: Built-in Registers. (line 51)
-
-
-File: groff, Node: Macro Index, Next: String Index, Prev: Register Index, Up: Top
-
-Appendix F Macro Index
-**********************
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally `.').
-
-
-* Menu:
-
-* 1C [ms]: ms Multiple Columns. (line 13)
-* 2C [ms]: ms Multiple Columns. (line 16)
-* [ [ms]: ms Insertions. (line 33)
-* ] [ms]: ms Insertions. (line 34)
-* AB [ms]: ms Cover Page Macros.
- (line 60)
-* AE [ms]: ms Cover Page Macros.
- (line 65)
-* AI [ms]: ms Cover Page Macros.
- (line 56)
-* AM [ms] <1>: Additional ms Macros.
- (line 10)
-* AM [ms]: ms Strings and Special Characters.
- (line 51)
-* AT [man]: Miscellaneous man macros.
- (line 26)
-* AU [ms]: ms Cover Page Macros.
- (line 38)
-* B [man]: Man font macros. (line 48)
-* B [ms]: Highlighting in ms. (line 10)
-* B1 [ms]: ms Displays and Keeps.
- (line 94)
-* B2 [ms]: ms Displays and Keeps.
- (line 95)
-* BD [ms]: ms Displays and Keeps.
- (line 31)
-* BI [man]: Man font macros. (line 18)
-* BI [ms]: Highlighting in ms. (line 39)
-* BR [man]: Man font macros. (line 40)
-* BT [man]: Optional man extensions.
- (line 21)
-* BX [ms]: Highlighting in ms. (line 43)
-* CD [ms]: ms Displays and Keeps.
- (line 41)
-* CT [man]: Optional man extensions.
- (line 36)
-* CW [man]: Optional man extensions.
- (line 39)
-* CW [ms] <1>: Additional ms Macros.
- (line 19)
-* CW [ms]: Highlighting in ms. (line 35)
-* DA [ms]: ms Cover Page Macros.
- (line 23)
-* De [man]: Optional man extensions.
- (line 45)
-* De [ms]: ms Displays and Keeps.
- (line 57)
-* DE [ms]: ms Displays and Keeps.
- (line 16)
-* Ds [man]: Optional man extensions.
- (line 42)
-* DS [ms]: Additional ms Macros.
- (line 14)
-* Ds [ms]: ms Displays and Keeps.
- (line 56)
-* DS [ms]: ms Displays and Keeps.
- (line 14)
-* DT [man]: Miscellaneous man macros.
- (line 10)
-* EE [man]: Optional man extensions.
- (line 52)
-* EF [ms]: ms Headers and Footers.
- (line 26)
-* EH [ms]: ms Headers and Footers.
- (line 24)
-* EN [ms]: ms Insertions. (line 28)
-* EQ [ms]: ms Insertions. (line 27)
-* EX [man]: Optional man extensions.
- (line 48)
-* FE [ms]: ms Footnotes. (line 15)
-* FS [ms]: ms Footnotes. (line 14)
-* G [man]: Optional man extensions.
- (line 55)
-* GL [man]: Optional man extensions.
- (line 60)
-* HB [man]: Optional man extensions.
- (line 65)
-* HP [man]: Man usage. (line 98)
-* I [man]: Man font macros. (line 53)
-* I [ms]: Highlighting in ms. (line 31)
-* IB [man]: Man font macros. (line 28)
-* ID [ms]: ms Displays and Keeps.
- (line 23)
-* IP [man]: Man usage. (line 78)
-* IP [ms]: Lists in ms. (line 9)
-* IR [man]: Man font macros. (line 36)
-* IX [ms]: Additional ms Macros.
- (line 22)
-* KE [ms]: ms Displays and Keeps.
- (line 73)
-* KF [ms]: ms Displays and Keeps.
- (line 77)
-* KS [ms]: ms Displays and Keeps.
- (line 72)
-* LD [ms]: ms Displays and Keeps.
- (line 15)
-* LG [ms]: Highlighting in ms. (line 52)
-* LP [man]: Man usage. (line 68)
-* LP [ms]: Paragraphs in ms. (line 10)
-* MC [ms]: ms Multiple Columns. (line 19)
-* MS [man]: Optional man extensions.
- (line 73)
-* ND [ms]: ms Cover Page Macros.
- (line 28)
-* NE [man]: Optional man extensions.
- (line 85)
-* NH [ms]: Headings in ms. (line 13)
-* NL [ms]: Highlighting in ms. (line 64)
-* NT [man]: Optional man extensions.
- (line 78)
-* OF [ms]: ms Headers and Footers.
- (line 25)
-* OH [ms]: ms Headers and Footers.
- (line 23)
-* P [man]: Man usage. (line 70)
-* P1 [ms]: ms Cover Page Macros.
- (line 19)
-* PD [man]: Miscellaneous man macros.
- (line 15)
-* PE [ms]: ms Insertions. (line 21)
-* Pn [man]: Optional man extensions.
- (line 92)
-* PN [man]: Optional man extensions.
- (line 88)
-* PP [man]: Man usage. (line 69)
-* PP [ms]: Paragraphs in ms. (line 9)
-* PS [ms]: ms Insertions. (line 20)
-* PT [man]: Optional man extensions.
- (line 16)
-* PX [ms]: ms TOC. (line 65)
-* QP [ms]: Paragraphs in ms. (line 13)
-* R [man]: Optional man extensions.
- (line 98)
-* R [ms]: Highlighting in ms. (line 27)
-* RB [man]: Man font macros. (line 44)
-* RD [ms]: ms Displays and Keeps.
- (line 49)
-* RE [man]: Man usage. (line 115)
-* RE [ms]: Indentation values in ms.
- (line 12)
-* RI [man]: Man font macros. (line 32)
-* RN [man]: Optional man extensions.
- (line 101)
-* RP [ms]: ms Cover Page Macros.
- (line 10)
-* RS [man]: Man usage. (line 106)
-* RS [ms]: Indentation values in ms.
- (line 11)
-* SB [man]: Man font macros. (line 14)
-* SH [man]: Man usage. (line 32)
-* SH [ms]: Headings in ms. (line 43)
-* SM [man]: Man font macros. (line 10)
-* SM [ms]: Highlighting in ms. (line 58)
-* SS [man]: Man usage. (line 41)
-* TA [ms]: Tabstops in ms. (line 10)
-* TB [man]: Optional man extensions.
- (line 70)
-* TC [ms]: ms TOC. (line 55)
-* TE [ms]: ms Insertions. (line 12)
-* TH [man]: Man usage. (line 11)
-* TL [ms]: ms Cover Page Macros.
- (line 33)
-* TP [man]: Man usage. (line 49)
-* TS [ms]: ms Insertions. (line 11)
-* UC [man]: Miscellaneous man macros.
- (line 43)
-* UL [ms]: Highlighting in ms. (line 47)
-* VE [man]: Optional man extensions.
- (line 108)
-* VS [man]: Optional man extensions.
- (line 104)
-* XA [ms]: ms TOC. (line 13)
-* XE [ms]: ms TOC. (line 14)
-* XP [ms]: Paragraphs in ms. (line 18)
-* XS [ms]: ms TOC. (line 12)
-
-
-File: groff, Node: String Index, Next: Glyph Name Index, Prev: Macro Index, Up: Top
-
-Appendix G String Index
-***********************
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
- A string name `x' consisting of exactly one character can be
-accessed as `\*x'. A string name `xx' consisting of exactly two
-characters can be accessed as `\*(xx'. String names `xxx' of any
-length can be accessed as `\*[xxx]'.
-
-
-* Menu:
-
-* ! [ms]: ms Strings and Special Characters.
- (line 101)
-* ' [ms]: ms Strings and Special Characters.
- (line 65)
-* * [ms]: ms Footnotes. (line 11)
-* , [ms]: ms Strings and Special Characters.
- (line 74)
-* - [ms]: ms Strings and Special Characters.
- (line 41)
-* . [ms]: ms Strings and Special Characters.
- (line 89)
-* .T: Built-in Registers. (line 119)
-* 3 [ms]: ms Strings and Special Characters.
- (line 107)
-* 8 [ms]: ms Strings and Special Characters.
- (line 104)
-* ? [ms]: ms Strings and Special Characters.
- (line 98)
-* \*[<colon>] [ms]: ms Strings and Special Characters.
- (line 80)
-* ^ [ms]: ms Strings and Special Characters.
- (line 71)
-* _ [ms]: ms Strings and Special Characters.
- (line 86)
-* ` [ms]: ms Strings and Special Characters.
- (line 68)
-* ABSTRACT [ms]: ms Strings and Special Characters.
- (line 15)
-* Ae [ms]: ms Strings and Special Characters.
- (line 128)
-* ae [ms]: ms Strings and Special Characters.
- (line 125)
-* CF [ms]: ms Headers and Footers.
- (line 16)
-* CH [ms]: ms Headers and Footers.
- (line 11)
-* d- [ms]: ms Strings and Special Characters.
- (line 119)
-* D- [ms]: ms Strings and Special Characters.
- (line 116)
-* HF [man]: Predefined man strings.
- (line 12)
-* LF [ms]: ms Headers and Footers.
- (line 15)
-* LH [ms]: ms Headers and Footers.
- (line 10)
-* lq [man]: Predefined man strings.
- (line 21)
-* MONTH1 [ms]: ms Strings and Special Characters.
- (line 23)
-* MONTH10 [ms]: ms Strings and Special Characters.
- (line 32)
-* MONTH11 [ms]: ms Strings and Special Characters.
- (line 33)
-* MONTH12 [ms]: ms Strings and Special Characters.
- (line 34)
-* MONTH2 [ms]: ms Strings and Special Characters.
- (line 24)
-* MONTH3 [ms]: ms Strings and Special Characters.
- (line 25)
-* MONTH4 [ms]: ms Strings and Special Characters.
- (line 26)
-* MONTH5 [ms]: ms Strings and Special Characters.
- (line 27)
-* MONTH6 [ms]: ms Strings and Special Characters.
- (line 28)
-* MONTH7 [ms]: ms Strings and Special Characters.
- (line 29)
-* MONTH8 [ms]: ms Strings and Special Characters.
- (line 30)
-* MONTH9 [ms]: ms Strings and Special Characters.
- (line 31)
-* o [ms]: ms Strings and Special Characters.
- (line 92)
-* q [ms]: ms Strings and Special Characters.
- (line 122)
-* Q [ms]: ms Strings and Special Characters.
- (line 44)
-* R [man]: Predefined man strings.
- (line 15)
-* REFERENCES [ms]: ms Strings and Special Characters.
- (line 11)
-* RF [ms]: ms Headers and Footers.
- (line 17)
-* RH [ms]: ms Headers and Footers.
- (line 12)
-* rq [man]: Predefined man strings.
- (line 22)
-* S [man]: Predefined man strings.
- (line 9)
-* SN [ms]: Headings in ms. (line 22)
-* SN-DOT [ms]: Headings in ms. (line 23)
-* SN-NO-DOT [ms]: Headings in ms. (line 24)
-* th [ms]: ms Strings and Special Characters.
- (line 113)
-* Th [ms]: ms Strings and Special Characters.
- (line 110)
-* Tm [man]: Predefined man strings.
- (line 18)
-* TOC [ms]: ms Strings and Special Characters.
- (line 19)
-* U [ms]: ms Strings and Special Characters.
- (line 45)
-* v [ms]: ms Strings and Special Characters.
- (line 83)
-* www-image-template [grohtml]: grohtml specific registers and strings.
- (line 8)
-* { [ms]: Highlighting in ms. (line 68)
-* } [ms]: Highlighting in ms. (line 69)
-* ~ [ms]: ms Strings and Special Characters.
- (line 77)
-
-
-File: groff, Node: Glyph Name Index, Next: Font File Keyword Index, Prev: String Index, Up: Top
-
-Appendix H Glyph Name Index
-***************************
-
-A glyph name `xx' consisting of exactly two characters can be accessed
-as `\(xx'. Glyph names `xxx' of any length can be accessed as `\[xxx]'.
-
-
-File: groff, Node: Font File Keyword Index, Next: Program and File Index, Prev: Glyph Name Index, Up: Top
-
-Appendix I Font File Keyword Index
-**********************************
-
-
-* Menu:
-
-* #: Font File Format. (line 36)
-* ---: Font File Format. (line 51)
-* biggestfont: DESC File Format. (line 109)
-* charset <1>: Font File Format. (line 44)
-* charset: DESC File Format. (line 101)
-* family <1>: DESC File Format. (line 64)
-* family <2>: Font Positions. (line 61)
-* family: Changing Fonts. (line 11)
-* fonts <1>: DESC File Format. (line 58)
-* fonts <2>: Special Fonts. (line 18)
-* fonts: Using Symbols. (line 15)
-* hor: DESC File Format. (line 14)
-* kernpairs: Font File Format. (line 135)
-* ligatures: Font File Format. (line 22)
-* name: Font File Format. (line 12)
-* papersize: DESC File Format. (line 72)
-* pass_filenames: DESC File Format. (line 92)
-* postpro: DESC File Format. (line 36)
-* prepro: DESC File Format. (line 32)
-* print: DESC File Format. (line 97)
-* res: DESC File Format. (line 11)
-* sizes: DESC File Format. (line 49)
-* sizescale: DESC File Format. (line 22)
-* slant: Font File Format. (line 18)
-* spacewidth: Font File Format. (line 15)
-* spare1: DESC File Format. (line 109)
-* spare2: DESC File Format. (line 109)
-* special <1>: Font File Format. (line 28)
-* special: Artificial Fonts. (line 116)
-* styles <1>: DESC File Format. (line 55)
-* styles <2>: Font Positions. (line 61)
-* styles <3>: Font Families. (line 76)
-* styles: Changing Fonts. (line 11)
-* tcommand: DESC File Format. (line 45)
-* unitwidth: DESC File Format. (line 28)
-* use_charnames_in_special <1>: DESC File Format. (line 67)
-* use_charnames_in_special: Postprocessor Access.
- (line 17)
-* vert: DESC File Format. (line 18)
-
-
-File: groff, Node: Program and File Index, Next: Concept Index, Prev: Font File Keyword Index, Up: Top
-
-Appendix J Program and File Index
-*********************************
-
-
-* Menu:
-
-* an.tmac: man. (line 6)
-* changebar: Miscellaneous. (line 111)
-* composite.tmac: Using Symbols. (line 197)
-* cp1047.tmac: Input Encodings. (line 9)
-* DESC <1>: Special Fonts. (line 18)
-* DESC <2>: Using Symbols. (line 15)
-* DESC <3>: Font Positions. (line 61)
-* DESC <4>: Font Families. (line 76)
-* DESC: Changing Fonts. (line 11)
-* DESC file format: DESC File Format. (line 6)
-* DESC, and font mounting: Font Positions. (line 37)
-* DESC, and use_charnames_in_special: Postprocessor Access.
- (line 17)
-* ditroff: History. (line 58)
-* ec.tmac: Input Encodings. (line 41)
-* eqn: ms Insertions. (line 7)
-* freeeuro.pfa: Input Encodings. (line 41)
-* geqn: Groff Options. (line 6)
-* geqn, invocation in manual pages: Preprocessors in man pages.
- (line 12)
-* ggrn: Groff Options. (line 6)
-* gpic: Groff Options. (line 6)
-* grap: Groff Options. (line 6)
-* grefer: Groff Options. (line 6)
-* grefer, invocation in manual pages: Preprocessors in man pages.
- (line 12)
-* groff: Groff Options. (line 6)
-* grog: grog. (line 6)
-* grohtml: Miscellaneous man macros.
- (line 6)
-* gsoelim: Groff Options. (line 6)
-* gtbl: Groff Options. (line 6)
-* gtbl, invocation in manual pages: Preprocessors in man pages.
- (line 12)
-* gtroff: Groff Options. (line 6)
-* hyphen.us: Manipulating Hyphenation.
- (line 161)
-* hyphenex.us: Manipulating Hyphenation.
- (line 161)
-* latin1.tmac: Input Encodings. (line 14)
-* latin2.tmac: Input Encodings. (line 18)
-* latin9.tmac: Input Encodings. (line 23)
-* makeindex: Indices. (line 10)
-* man, invocation of preprocessors: Preprocessors in man pages.
- (line 12)
-* man-old.tmac: man. (line 6)
-* man.local <1>: Optional man extensions.
- (line 6)
-* man.local: Man usage. (line 6)
-* man.tmac: man. (line 6)
-* man.ultrix: Optional man extensions.
- (line 30)
-* nrchbar: Miscellaneous. (line 111)
-* papersize.tmac: Paper Size. (line 16)
-* perl: I/O. (line 171)
-* pic: ms Insertions. (line 7)
-* post-grohtml: Groff Options. (line 165)
-* pre-grohtml: Groff Options. (line 165)
-* refer: ms Insertions. (line 7)
-* soelim: Debugging. (line 10)
-* tbl: ms Insertions. (line 7)
-* trace.tmac: Writing Macros. (line 101)
-* troffrc <1>: Line Layout. (line 64)
-* troffrc <2>: Troff and Nroff Mode.
- (line 24)
-* troffrc <3>: Manipulating Hyphenation.
- (line 161)
-* troffrc <4>: Paper Size. (line 16)
-* troffrc: Groff Options. (line 80)
-* troffrc-end <1>: Troff and Nroff Mode.
- (line 24)
-* troffrc-end <2>: Manipulating Hyphenation.
- (line 161)
-* troffrc-end: Groff Options. (line 80)
-* tty.tmac: Troff and Nroff Mode.
- (line 32)
-
-
-
-Local Variables:
-coding: iso-8859-1
-End:
diff --git a/contrib/groff/doc/groff-3 b/contrib/groff/doc/groff-3
deleted file mode 100644
index 691dceda2e76..000000000000
--- a/contrib/groff/doc/groff-3
+++ /dev/null
Binary files differ
diff --git a/contrib/groff/doc/groff.css b/contrib/groff/doc/groff.css
deleted file mode 100644
index ba36f6ede9ce..000000000000
--- a/contrib/groff/doc/groff.css
+++ /dev/null
@@ -1,17 +0,0 @@
-
-body {
- margin-top: 5%;
- margin-left: 5%;
- margin-right: 5%;
- margin-bottom: 5%;
- background-color: white;
- color: black;
-}
-
-pre {
- background-color: lightgrey;
- color: black;
- border: thin;
- border-style: solid;
-}
-
diff --git a/contrib/groff/doc/groff.texinfo b/contrib/groff/doc/groff.texinfo
deleted file mode 100644
index a23993ea9222..000000000000
--- a/contrib/groff/doc/groff.texinfo
+++ /dev/null
@@ -1,15797 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-
-@c
-@c Please convert this manual with `texi2dvi -e groff.texinfo' due to
-@c problems in texinfo regarding expansion of user-defined macros.
-@c
-@c You need texinfo 4.6 or newer to format this document!
-@c
-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename groff
-@settitle The GNU Troff Manual
-@setchapternewpage odd
-@footnotestyle separate
-@c %**end of header (This is for running Texinfo on a region.)
-
-@documentlanguage en
-@documentencoding ISO-8859-1
-
-
-@smallbook
-
-@finalout
-
-
-@copying
-This manual documents GNU @code{troff} version 1.19.2.
-
-Copyright @copyright{} 1994-2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being `A GNU Manual,''
-and with the Back-Cover Texts as in (a) below. A copy of the
-license is included in the section entitled `GNU Free Documentation
-License.''
-
-(a) The FSF's Back-Cover Text is: `You have freedom to copy and modify
-this GNU Manual, like GNU software. Copies published by the Free
-Software Foundation raise funds for GNU development.''
-@end quotation
-@end copying
-
-
-@c We use the following indices:
-@c
-@c cindex: concepts
-@c rqindex: requests
-@c esindex: escapes
-@c vindex: registers
-@c kindex: commands in font files
-@c pindex: programs and files
-@c tindex: environment variables
-@c maindex: macros
-@c stindex: strings
-@c opindex: operators
-@c
-@c tindex and cindex are merged.
-
-@defcodeindex rq
-@defcodeindex es
-@defcodeindex ma
-@defcodeindex st
-@defcodeindex op
-@syncodeindex tp cp
-
-
-@c To avoid uppercasing in @deffn while converting to info, we define
-@c our special @Var{}.
-
-@macro Var{arg}
-@r{@slanted{\arg\}}
-@end macro
-
-
-@c To assure correct HTML translation, some ugly hacks are necessary.
-@c While processing a @def... request, the HTML translator looks at the
-@c next line to decide whether it should start indentation or not. If
-@c it is something starting with @def... (e.g. @deffnx), it doesn't.
-@c So we must assure during macro expansion that a @def... is seen.
-@c
-@c The following macros have to be used:
-@c
-@c One item:
-@c
-@c @Def...
-@c
-@c Two items:
-@c
-@c @Def...List
-@c @Def...ListEnd
-@c
-@c More than two:
-@c
-@c @Def...List
-@c @Def...Item
-@c @Def...Item
-@c ...
-@c @Def...ListEnd
-@c
-@c The definition block must end with
-@c
-@c @endDef...
-@c
-@c The above is valid for texinfo 4.0f and above.
-
-
-@c a dummy macro to assure the `@def...'
-
-@macro defdummy
-@c
-@end macro
-
-
-@c definition of requests
-
-@macro Defreq{name, arg}
-@deffn Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqList{name, arg}
-@deffn Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqItem{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqListEnd{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro endDefreq
-@end deffn
-@end macro
-
-
-@c definition of escapes
-
-@macro Defesc{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro DefescList{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescItem{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescListEnd{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro endDefesc
-@end deffn
-@end macro
-
-
-@c definition of registers
-
-@macro Defreg{name}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro DefregList{name}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregItem{name}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregListEnd{name}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro endDefreg
-@end deffn
-@end macro
-
-
-@c definition of registers specific to macro packages, preprocessors, etc.
-
-@macro Defmpreg{name, package}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregList{name, package}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregItem{name, package}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregListEnd{name, package}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmpreg
-@end deffn
-@end macro
-
-
-@c definition of macros
-
-@macro Defmac{name, arg, package}
-@defmac @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacList{name, arg, package}
-@defmac @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacItem{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacListEnd{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmac
-@end defmac
-@end macro
-
-
-@c definition of strings
-
-@macro Defstr{name, package}
-@deffn String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrList{name, package}
-@deffn String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrItem{name, package}
-@deffnx String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrListEnd{name, package}
-@deffnx String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefstr
-@end deffn
-@end macro
-
-
-@c our example macro
-
-@macro Example
-@example
-@group
-@end macro
-
-@macro endExample
-@end group
-@end example
-@end macro
-
-
-@c <text>
-
-@tex
-\gdef\Langlemacro{\angleleft}
-\gdef\Ranglemacro{\angleright}
-@end tex
-
-@iftex
-@set Langlemacro @Langlemacro
-@set Ranglemacro @Ranglemacro
-@end iftex
-
-@ifnottex
-@set Langlemacro <
-@set Ranglemacro >
-@end ifnottex
-
-@macro angles{text}
-@value{Langlemacro}@r{\text\}@value{Ranglemacro}
-@end macro
-
-
-@c a <= sign
-@c
-@c A value defined with @set is embedded into three group levels if
-@c called with @value, so we need seven \aftergroup to put \le outside
-@c of the groups -- this is necessary to get proper mathematical spacing.
-
-@tex
-\gdef\LEmacro{\aftergroup\aftergroup\aftergroup\aftergroup
- \aftergroup\aftergroup\aftergroup\le}
-@end tex
-
-@iftex
-@set LEmacro @LEmacro
-@end iftex
-
-@ifnottex
-@set LEmacro <=
-@end ifnottex
-
-@macro LE
-@value{LEmacro}
-@end macro
-
-
-@c We need special parentheses, brackets, and braces:
-@c
-@c . Real parentheses in @deffn produce an error while compiling with
-@c TeX.
-@c . Real brackets use the wrong font in @deffn, overriding @t{}.
-@c
-@c . @{ and @} fail with info if used in a macro.
-@c
-@c Since macros aren't expanded in @deffn during -E, the following
-@c definitions are for non-TeX only.
-@c
-@c This is true for texinfo 4.0 and above.
-
-@iftex
-@set Lparenmacro @lparen
-@set Rparenmacro @rparen
-@set Lbrackmacro @lbrack
-@set Rbrackmacro @rbrack
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end iftex
-
-@ifnottex
-@set Lparenmacro (
-@set Rparenmacro )
-@set Lbrackmacro [
-@set Rbrackmacro ]
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end ifnottex
-
-@macro Lparen{}
-@value{Lparenmacro}
-@end macro
-@macro Rparen{}
-@value{Rparenmacro}
-@end macro
-@macro Lbrack{}
-@value{Lbrackmacro}
-@end macro
-@macro Rbrack{}
-@value{Rbrackmacro}
-@end macro
-@macro Lbrace{}
-@value{Lbracemacro}
-@end macro
-@macro Rbrace{}
-@value{Rbracemacro}
-@end macro
-
-
-@c This suppresses the word `Appendix' in the appendix headers.
-
-@tex
-\gdef\gobblefirst#1#2{#2}
-\gdef\putwordAppendix{\gobblefirst}
-@end tex
-
-
-@c We map some latin-1 characters to corresponding texinfo macros.
-
-@tex
-\global\catcode`^^e4\active % ä
-\gdef^^e4{\"a}
-\global\catcode`^^c4\active % Ä
-\gdef^^c4{\"A}
-\global\catcode`^^e9\active % é
-\gdef^^e9{\'e}
-\global\catcode`^^c9\active % É
-\gdef^^c9{\'E}
-\global\catcode`^^f6\active % ö
-\gdef^^f6{\"o}
-\global\catcode`^^d6\active % Ö
-\gdef^^d6{\"O}
-\global\catcode`^^fc\active % ü
-\gdef^^fc{\"u}
-\global\catcode`^^dc\active % Ü
-\gdef^^dc{\"U}
-\global\catcode`^^e6\active % æ
-\gdef^^e6{\ae}
-\global\catcode`^^c6\active % Æ
-\gdef^^c6{\AE}
-\global\catcode`^^df\active % ß
-\gdef^^df{\ss}
-@end tex
-
-
-@c Note: We say `Roman numerals' but `roman font'.
-
-
-@dircategory Typesetting
-@direntry
-* Groff: (groff). The GNU troff document formatting system.
-@end direntry
-
-
-@titlepage
-@title groff
-@subtitle The GNU implementation of @code{troff}
-@subtitle Edition 1.19.2
-@subtitle Summer 2005
-@author by Trent A.@tie{}Fisher
-@author and Werner Lemberg (@email{bug-groff@@gnu.org})
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-
-@contents
-
-@ifinfo
-@node Top, Introduction, (dir), (dir)
-@top GNU troff
-
-@insertcopying
-@end ifinfo
-
-@ifhtml
-@menu
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-@end menu
-
-@node Top, Introduction, (dir), (dir)
-@top GNU troff
-
-@insertcopying
-@end ifhtml
-
-@menu
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-@end menu
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Introduction, Invoking groff, Top, Top
-@chapter Introduction
-@cindex introduction
-
-GNU @code{troff} (or @code{groff}) is a system for typesetting
-documents. @code{troff} is very flexible and has been in existence (and
-use) for about 3@tie{}decades. It is quite widespread and firmly
-entrenched in the @acronym{UNIX} community.
-
-@menu
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-@end menu
-
-
-@c =====================================================================
-
-@node What Is groff?, History, Introduction, Introduction
-@section What Is @code{groff}?
-@cindex what is @code{groff}?
-@cindex @code{groff} -- what is it?
-
-@code{groff} belongs to an older generation of document preparation
-systems, which operate more like compilers than the more recent
-interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
-systems. @code{groff} and its contemporary counterpart, @TeX{}, both
-work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
-normal text files with embedded formatting commands. These files can
-then be processed by @code{groff} to produce a typeset document on a
-variety of devices.
-
-Likewise, @code{groff} should not be confused with a @dfn{word
-processor}, since that term connotes an integrated system that includes
-an editor and a text formatter. Also, many word processors follow the
-@acronym{WYSIWYG} paradigm discussed earlier.
-
-Although @acronym{WYSIWYG} systems may be easier to use, they have a
-number of disadvantages compared to @code{troff}:
-
-@itemize @bullet
-@item
-They must be used on a graphics display to work on a document.
-
-@item
-Most of the @acronym{WYSIWYG} systems are either non-free or are not
-very portable.
-
-@item
-@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
-
-@item
-It is difficult to have a wide range of capabilities available within
-the confines of a GUI/window system.
-
-@item
-It is more difficult to make global changes to a document.
-@end itemize
-
-@quotation
-``GUIs normally make it simple to accomplish simple actions and
-impossible to accomplish complex actions.'' --Doug Gwyn (22/Jun/91 in
-@code{comp.unix.wizards})
-@end quotation
-
-
-@c =====================================================================
-
-@node History, groff Capabilities, What Is groff?, Introduction
-@section History
-@cindex history
-
-@cindex @code{runoff}, the program
-@cindex @code{rf}, the program
-@code{troff} can trace its origins back to a formatting program called
-@code{runoff}, written by J.@tie{}E.@tie{}Saltzer, which ran on MIT's CTSS
-operating system in the mid-sixties. This name came from the common
-phrase of the time ``I'll run off a document.'' Bob Morris ported it to
-the 635 architecture and called the program @code{roff} (an abbreviation
-of @code{runoff}). It was rewritten as @code{rf} for the @w{PDP-7}
-(before having @acronym{UNIX}), and at the same time (1969), Doug
-McIllroy rewrote an extended and simplified version of @code{roff} in
-the @acronym{BCPL} programming language.
-
-@cindex @code{roff}, the program
-The first version of @acronym{UNIX} was developed on a @w{PDP-7} which
-was sitting around Bell Labs. In 1971 the developers wanted to get a
-@w{PDP-11} for further work on the operating system. In order to
-justify the cost for this system, they proposed that they would
-implement a document formatting system for the @acronym{AT&T} patents
-division. This first formatting program was a reimplementation of
-McIllroy's @code{roff}, written by J.@tie{}F.@tie{}Ossanna.
-
-@cindex @code{nroff}, the program
-When they needed a more flexible language, a new version of @code{roff}
-called @code{nroff} (``Newer @code{roff}'') was written. It had a much
-more complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of @code{nroff} that would drive it. It was dubbed
-@code{troff}, for ``typesetter @code{roff}'', although many people have
-speculated that it actually means ``Times @code{roff}'' because of the
-use of the Times font family in @code{troff} by default. As such, the
-name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
-
-With @code{troff} came @code{nroff} (they were actually the same program
-except for some @samp{#ifdef}s), which was for producing output for line
-printers and character terminals. It understood everything @code{troff}
-did, and ignored the commands which were not applicable (e.g.@: font
-changes).
-
-Since there are several things which cannot be done easily in
-@code{troff}, work on several preprocessors began. These programs would
-transform certain parts of a document into @code{troff}, which made a
-very natural use of pipes in @acronym{UNIX}.
-
-The @code{eqn} preprocessor allowed mathematical formulæ to be
-specified in a much simpler and more intuitive manner. @code{tbl} is a
-preprocessor for formatting tables. The @code{refer} preprocessor (and
-the similar program, @code{bib}) processes citations in a document
-according to a bibliographic database.
-
-Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000@tie{}lines of uncommented
-code and still dependent on the CAT. As the CAT became less common, and
-was no longer supported by the manufacturer, the need to make it support
-other devices became a priority. However, before this could be done,
-Ossanna was killed in a car accident.
-
-@pindex ditroff
-@cindex @code{ditroff}, the program
-So, Brian Kernighan took on the task of rewriting @code{troff}. The
-newly rewritten version produced device independent code which was
-very easy for postprocessors to read and translate to the appropriate
-printer codes. Also, this new version of @code{troff} (called
-@code{ditroff} for ``device independent @code{troff}'') had several
-extensions, which included drawing functions.
-
-Due to the additional abilities of the new version of @code{troff},
-several new preprocessors appeared. The @code{pic} preprocessor
-provides a wide range of drawing functions. Likewise the @code{ideal}
-preprocessor did the same, although via a much different paradigm. The
-@code{grap} preprocessor took specifications for graphs, but, unlike
-other preprocessors, produced @code{pic} code.
-
-James Clark began work on a GNU implementation of @code{ditroff} in
-early@tie{}1989. The first version, @code{groff}@tie{}0.3.1, was released
-June@tie{}1990. @code{groff} included:
-
-@itemize @bullet
-@item
-A replacement for @code{ditroff} with many extensions.
-
-@item
-The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
-
-@item
-Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
-X@tie{}Windows. GNU @code{troff} also eliminated the need for a
-separate @code{nroff} program with a postprocessor which would produce
-@acronym{ASCII} output.
-
-@item
-A version of the @file{me} macros and an implementation of the
-@file{man} macros.
-@end itemize
-
-Also, a front-end was included which could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
-Development of GNU @code{troff} progressed rapidly, and saw the
-additions of a replacement for @code{refer}, an implementation of the
-@file{ms} and @file{mm} macros, and a program to deduce how to format a
-document (@code{grog}).
-
-It was declared a stable (i.e.@: non-beta) package with the release of
-version@tie{}1.04 around November@tie{}1991.
-
-Beginning in@tie{}1999, @code{groff} has new maintainers (the package was
-an orphan for a few years). As a result, new features and programs like
-@code{grn}, a preprocessor for gremlin images, and an output device to
-produce @acronym{HTML} output have been added.
-
-
-@c =====================================================================
-
-@node groff Capabilities, Macro Package Intro, History, Introduction
-@section @code{groff} Capabilities
-@cindex @code{groff} capabilities
-@cindex capabilities of @code{groff}
-
-So what exactly is @code{groff} capable of doing? @code{groff} provides
-a wide range of low-level text formatting operations. Using these, it
-is possible to perform a wide range of formatting tasks, such as
-footnotes, table of contents, multiple columns, etc. Here's a list of
-the most important operations supported by @code{groff}:
-
-@itemize @bullet
-@item
-text filling, adjusting, and centering
-
-@item
-hyphenation
-
-@item
-page control
-
-@item
-font and glyph size control
-
-@item
-vertical spacing (e.g.@: double-spacing)
-
-@item
-line length and indenting
-
-@item
-macros, strings, diversions, and traps
-
-@item
-number registers
-
-@item
-tabs, leaders, and fields
-
-@item
-input and output conventions and character translation
-
-@item
-overstrike, bracket, line drawing, and zero-width functions
-
-@item
-local horizontal and vertical motions and the width function
-
-@item
-three-part titles
-
-@item
-output line numbering
-
-@item
-conditional acceptance of input
-
-@item
-environment switching
-
-@item
-insertions from the standard input
-
-@item
-input/output file switching
-
-@item
-output and error messages
-@end itemize
-
-
-@c =====================================================================
-
-@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
-@section Macro Packages
-@cindex macro packages
-
-Since @code{groff} provides such low-level facilities, it can be quite
-difficult to use by itself. However, @code{groff} provides a
-@dfn{macro} facility to specify how certain routine operations
-(e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
-should be done. These macros can be collected together into a @dfn{macro
-package}. There are a number of macro packages available; the most
-common (and the ones described in this manual) are @file{man},
-@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
-
-
-@c =====================================================================
-
-@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
-@section Preprocessors
-@cindex preprocessors
-
-Although @code{groff} provides most functions needed to format a
-document, some operations would be unwieldy (e.g.@: to draw pictures).
-Therefore, programs called @dfn{preprocessors} were written which
-understand their own language and produce the necessary @code{groff}
-operations. These preprocessors are able to differentiate their own
-input from the rest of the document via markers.
-
-To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
-from the preprocessor into @code{groff}. Any number of preprocessors
-may be used on a given document; in this case, the preprocessors are
-linked together into one pipeline. However, with @code{groff}, the user
-does not need to construct the pipe, but only tell @code{groff} what
-preprocessors to use.
-
-@code{groff} currently has preprocessors for producing tables
-(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
-(@code{pic} and @code{grn}), and for processing bibliographies
-(@code{refer}). An associated program which is useful when dealing with
-preprocessors is @code{soelim}.
-
-A free implementation of @code{grap}, a preprocessor for drawing graphs,
-can be obtained as an extra package; @code{groff} can use @code{grap}
-also.
-
-There are other preprocessors in existence, but, unfortunately, no free
-implementations are available. Among them are preprocessors for drawing
-mathematical pictures (@code{ideal}) and chemical structures
-(@code{chem}).
-
-
-@c =====================================================================
-
-@node Output device intro, Credits, Preprocessor Intro, Introduction
-@section Output Devices
-@cindex postprocessors
-@cindex output devices
-@cindex devices for output
-
-@code{groff} actually produces device independent code which may be
-fed into a postprocessor to produce output for a particular device.
-Currently, @code{groff} has postprocessors for @sc{PostScript}
-devices, character terminals, X@tie{}Windows (for previewing), @TeX{}
-DVI format, HP LaserJet@tie{}4 and Canon LBP printers (which use
-@acronym{CAPSL}), and @acronym{HTML}.
-
-
-@c =====================================================================
-
-@node Credits, , Output device intro, Introduction
-@section Credits
-@cindex credits
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the @code{groff} package by James Clark,
-and Eric Allman's papers on the @file{me} macro package.
-
-The section on the @file{man} macro package is partly based on
-Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
-Debian GNU/Linux system.
-
-Larry Kollar contributed the section in the @file{ms} macro package.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Invoking groff, Tutorial for Macro Users, Introduction, Top
-@chapter Invoking @code{groff}
-@cindex invoking @code{groff}
-@cindex @code{groff} invocation
-
-This section focuses on how to invoke the @code{groff} front end. This
-front end takes care of the details of constructing the pipeline among
-the preprocessors, @code{gtroff} and the postprocessor.
-
-It has become a tradition that GNU programs get the prefix @samp{g} to
-distinguish it from its original counterparts provided by the host (see
-@ref{Environment}, for more details). Thus, for example, @code{geqn} is
-GNU @code{eqn}. On operating systems like GNU/Linux or the Hurd, which
-don't contain proprietary versions of @code{troff}, and on
-MS-DOS/MS-Windows, where @code{troff} and associated programs are not
-available at all, this prefix is omitted since GNU @code{troff} is the
-only used incarnation of @code{troff}. Exception: @samp{groff} is never
-replaced by @samp{roff}.
-
-In this document, we consequently say @samp{gtroff} when talking about
-the GNU @code{troff} program. All other implementations of @code{troff}
-are called @acronym{AT&T} @code{troff} which is the common origin of
-all @code{troff} derivates (with more or less compatible changes).
-Similarly, we say @samp{gpic}, @samp{geqn}, etc.
-
-@menu
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-@end menu
-
-
-@c =====================================================================
-
-@node Groff Options, Environment, Invoking groff, Invoking groff
-@section Options
-@cindex options
-
-@pindex groff
-@pindex gtroff
-@pindex gpic
-@pindex geqn
-@pindex ggrn
-@pindex grap
-@pindex gtbl
-@pindex grefer
-@pindex gsoelim
-@code{groff} normally runs the @code{gtroff} program and a postprocessor
-appropriate for the selected device. The default device is @samp{ps}
-(but it can be changed when @code{groff} is configured and built). It
-can optionally preprocess with any of @code{gpic}, @code{geqn},
-@code{gtbl}, @code{ggrn}, @code{grap}, @code{grefer}, or @code{gsoelim}.
-
-This section only documents options to the @code{groff} front end. Many
-of the arguments to @code{groff} are passed on to @code{gtroff},
-therefore those are also included. Arguments to pre- or postprocessors
-can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
-gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking
-gsoelim}, @ref{Invoking grotty}, @ref{Invoking grops}, @ref{Invoking
-grohtml}, @ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking
-grolbp}, and @ref{Invoking gxditview}.
-
-The command line format for @code{groff} is:
-
-@Example
-groff [ -abceghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
- [ -T@var{def} ] [ -f@var{fam} ] [ -w@var{name} ] [ -W@var{name} ]
- [ -M@var{dir} ] [ -d@var{cs} ] [ -r@var{cn} ] [ -n@var{num} ]
- [ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ] [ -I@var{dir} ]
- [ @var{files}@dots{} ]
-@endExample
-
-The command line format for @code{gtroff} is as follows.
-
-@Example
-gtroff [ -abcivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
- [ -f@var{fam} ] [ -m@var{name} ] [ -n@var{num} ]
- [ -o@var{list} ] [ -r@var{cn} ] [ -T@var{name} ]
- [ -F@var{dir} ] [ -M@var{dir} ] [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-Obviously, many of the options to @code{groff} are actually passed on to
-@code{gtroff}.
-
-Options without an argument can be grouped behind a single@tie{}@option{-}.
-A filename of@tie{}@file{-} denotes the standard input. It is possible to
-have whitespace between an option and its parameter.
-
-The @code{grog} command can be used to guess the correct @code{groff}
-command to format a file.
-
-Here's the description of the command-line options:
-
-@cindex command-line options
-@table @samp
-@item -h
-Print a help message.
-
-@item -e
-Preprocess with @code{geqn}.
-
-@item -t
-Preprocess with @code{gtbl}.
-
-@item -g
-Preprocess with @code{ggrn}.
-
-@item -G
-Preprocess with @code{grap}.
-
-@item -p
-Preprocess with @code{gpic}.
-
-@item -s
-Preprocess with @code{gsoelim}.
-
-@item -c
-Suppress color output.
-
-@item -R
-Preprocess with @code{grefer}. No mechanism is provided for passing
-arguments to @code{grefer} because most @code{grefer} options have
-equivalent commands which can be included in the file. @xref{grefer},
-for more details.
-
-@pindex troffrc
-@pindex troffrc-end
-Note that @code{gtroff} also accepts a @option{-R} option, which is not
-accessible via @code{groff}. This option prevents the loading of the
-@file{troffrc} and @file{troffrc-end} files.
-
-@item -v
-Make programs run by @code{groff} print out their version number.
-
-@item -V
-Print the pipeline on @code{stdout} instead of executing it. If specified
-more than once, print the pipeline on @code{stderr} and execute it.
-
-@item -z
-Suppress output from @code{gtroff}. Only error messages are printed.
-
-@item -Z
-Do not postprocess the output of @code{gtroff}. Normally @code{groff}
-automatically runs the appropriate postprocessor.
-
-@item -P@var{arg}
-Pass @var{arg} to the postprocessor. Each argument should be passed
-with a separate @option{-P} option. Note that @code{groff} does not
-prepend @samp{-} to @var{arg} before passing it to the postprocessor.
-
-@item -l
-Send the output to a spooler for printing. The command used for this is
-specified by the @code{print} command in the device description file
-(see @ref{Font Files}, for more info). If not present, @option{-l} is
-ignored.
-
-@item -L@var{arg}
-Pass @var{arg} to the spooler. Each argument should be passed with a
-separate @option{-L} option. Note that @code{groff} does not prepend
-a @samp{-} to @var{arg} before passing it to the postprocessor.
-If the @code{print} keyword in the device description file is missing,
-@option{-L} is ignored.
-
-@item -T@var{dev}
-Prepare output for device @var{dev}. The default device is @samp{ps},
-unless changed when @code{groff} was configured and built. The
-following are the output devices currently available:
-
-@table @code
-@item ps
-For @sc{PostScript} printers and previewers.
-
-@item dvi
-For @TeX{} DVI format.
-
-@item X75
-For a 75@dmn{dpi} X11 previewer.
-
-@item X75-12
-For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item X100
-For a 100@dmn{dpi} X11 previewer.
-
-@item X100-12
-For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item ascii
-@cindex encoding, output, @acronym{ASCII}
-@cindex @acronym{ASCII}, output encoding
-@cindex output encoding, @acronym{ASCII}
-For typewriter-like devices using the (7-bit) @acronym{ASCII}
-character set.
-
-@item latin1
-@cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), output encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), output encoding
-@cindex output encoding, @w{latin-1} (ISO @w{8859-1})
-For typewriter-like devices that support the @w{Latin-1}
-(ISO@tie{}@w{8859-1}) character set.
-
-@item utf8
-@cindex encoding, output, @w{utf-8}
-@cindex @w{utf-8}, output encoding
-@cindex output encoding, @w{utf-8}
-For typewriter-like devices which use the Unicode (ISO@tie{}10646)
-character set with @w{UTF-8} encoding.
-
-@item cp1047
-@cindex encoding, output, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, output encoding
-@cindex output encoding, @acronym{EBCDIC}
-@cindex encoding, output, cp1047
-@cindex cp1047, output encoding
-@cindex output encoding, cp1047
-@cindex IBM cp1047 output encoding
-For typewriter-like devices which use the @acronym{EBCDIC} encoding IBM
-cp1047.
-
-@item lj4
-For HP LaserJet4-compatible (or other PCL5-compatible) printers.
-
-@item lbp
-For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
-printers).
-
-@pindex pre-grohtml
-@pindex post-grohtml
-@cindex @code{grohtml}, the program
-@item html
-To produce @acronym{HTML} output. Note that the @acronym{HTML} driver
-consists of two parts, a preprocessor (@code{pre-grohtml}) and a
-postprocessor (@code{post-grohtml}).
-@end table
-
-@cindex output device name string register (@code{.T})
-@cindex output device usage number register (@code{.T})
-The predefined @code{gtroff} string register @code{.T} contains the
-current output device; the read-only number register @code{.T} is set
-to@tie{}1 if this option is used (which is always true if @code{groff} is
-used to call @code{gtroff}). @xref{Built-in Registers}.
-
-The postprocessor to be used for a device is specified by the
-@code{postpro} command in the device description file. (@xref{Font
-Files}, for more info.) This can be overridden with the @option{-X}
-option.
-
-@item -X
-Preview with @code{gxditview} instead of using the usual postprocessor.
-This is unlikely to produce good results except with @option{-Tps}.
-
-Note that this is not the same as using @option{-TX75} or
-@option{-TX100} to view a document with @code{gxditview}: The former
-uses the metrics of the specified device, whereas the latter uses
-X-specific fonts and metrics.
-
-@item -N
-Don't allow newlines with @code{eqn} delimiters. This is the same as
-the @option{-N} option in @code{geqn}.
-
-@item -S
-@cindex @code{open} request, and safer mode
-@cindex @code{opena} request, and safer mode
-@cindex @code{pso} request, and safer mode
-@cindex @code{sy} request, and safer mode
-@cindex @code{pi} request, and safer mode
-@cindex safer mode
-@cindex mode, safer
-Safer mode. Pass the @option{-S} option to @code{gpic} and disable the
-@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
-requests. For security reasons, this is enabled by default.
-
-@item -U
-@cindex mode, unsafe
-@cindex unsafe mode
-Unsafe mode. This enables the @code{open}, @code{opena}, @code{pso},
-@code{sy}, and @code{pi} requests.
-
-@item -a
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-Generate an @acronym{ASCII} approximation of the typeset output. The
-read-only register @code{.A} is then set to@tie{}1. @xref{Built-in
-Registers}. A typical example is
-
-@Example
-groff -a -man -Tdvi troff.man | less
-@endExample
-
-@noindent
-which shows how lines are broken for the DVI device. Note that this
-option is rather useless today since graphic output devices are
-available virtually everywhere.
-
-@item -b
-Print a backtrace with each warning or error message. This backtrace
-should help track down the cause of the error. The line numbers given
-in the backtrace may not always be correct: @code{gtroff} can get
-confused by @code{as} or @code{am} requests while counting line numbers.
-
-@item -i
-Read the standard input after all the named input files have been
-processed.
-
-@item -w@var{name}
-Enable warning @var{name}. Available warnings are described in
-@ref{Debugging}. Multiple @option{-w} options are allowed.
-
-@item -W@var{name}
-Inhibit warning @var{name}. Multiple @option{-W} options are allowed.
-
-@item -E
-Inhibit all error messages.
-
-@item -C
-Enable compatibility mode. @xref{Implementation Differences}, for the
-list of incompatibilities between @code{groff} and @acronym{AT&T}
-@code{troff}.
-
-@item -d@var{c}@var{s}
-@itemx -d@var{name}=@var{s}
-Define @var{c} or @var{name} to be a string@tie{}@var{s}. @var{c}@tie{}must
-be a one-letter name; @var{name} can be of arbitrary length. All string
-assignments happen before loading any macro file (including the start-up
-file).
-
-@item -f@var{fam}
-Use @var{fam} as the default font family. @xref{Font Families}.
-
-@item -m@var{name}
-Read in the file @file{@var{name}.tmac}. Normally @code{groff} searches
-for this in its macro directories. If it isn't found, it tries
-@file{tmac.@var{name}} (searching in the same directories).
-
-@item -n@var{num}
-Number the first page @var{num}.
-
-@item -o@var{list}
-@cindex print current page register (@code{.P})
-Output only pages in @var{list}, which is a comma-separated list of page
-ranges; @samp{@var{n}} means print page@tie{}@var{n}, @samp{@var{m}-@var{n}}
-means print every page between @var{m} and@tie{}@var{n}, @samp{-@var{n}}
-means print every page up to@tie{}@var{n}, @samp{@var{n}-} means print every
-page beginning with@tie{}@var{n}. @code{gtroff} exits after printing the
-last page in the list. All the ranges are inclusive on both ends.
-
-Within @code{gtroff}, this information can be extracted with the
-@samp{.P} register. @xref{Built-in Registers}.
-
-If your document restarts page numbering at the beginning of each
-chapter, then @code{gtroff} prints the specified page range for each
-chapter.
-
-@item -r@var{c}@var{n}
-@itemx -r@var{name}=@var{n}
-Set number register@tie{}@var{c} or @var{name} to the value@tie{}@var{n}.
-@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
-length. @var{n}@tie{}can be any @code{gtroff} numeric expression. All
-register assignments happen before loading any macro file (including
-the start-up file).
-
-@item -F@var{dir}
-Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
-(@var{name} is the name of the device), for the @file{DESC} file, and
-for font files before looking in the standard directories (@pxref{Font
-Directories}). This option is passed to all pre- and postprocessors
-using the @env{GROFF_FONT_PATH} environment variable.
-
-@item -M@var{dir}
-Search directory @file{@var{dir}} for macro files before the standard
-directories (@pxref{Macro Directories}).
-
-@item -I@var{dir}
-This option may be used to specify a directory to search for files.
-It is passed to the following programs:
-
-@itemize
-@item
-@code{gsoelim} (see @ref{gsoelim} for more details);
-it also implies @code{groff}'s @option{-s} option.
-
-@item
-@code{gtroff}; it is used to search files named in the @code{psbb} and
-@code{so} requests.
-
-@item
-@code{grops}; it is used to search files named in the
-@w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes.
-@end itemize
-
-The current directory is always searched first. This option may be specified
-more than once; the directories will be searched in the order specified. No
-directory search is performed for files specified using an absolute path.
-@end table
-
-
-@c =====================================================================
-
-@node Environment, Macro Directories, Groff Options, Invoking groff
-@section Environment
-@cindex environment variables
-@cindex variables in environment
-
-There are also several environment variables (of the operating system,
-not within @code{gtroff}) which can modify the behavior of @code{groff}.
-
-@table @code
-@item GROFF_COMMAND_PREFIX
-@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
-@cindex command prefix
-@cindex prefix, for commands
-If this is set to@tie{}@var{X}, then @code{groff} runs @code{@var{X}troff}
-instead of @code{gtroff}. This also applies to @code{tbl}, @code{pic},
-@code{eqn}, @code{grn}, @code{refer}, and @code{soelim}. It does not
-apply to @code{grops}, @code{grodvi}, @code{grotty}, @code{pre-grohtml},
-@code{post-grohtml}, @code{grolj4}, and @code{gxditview}.
-
-The default command prefix is determined during the installation process.
-If a non-GNU troff system is found, prefix @samp{g} is used, none
-otherwise.
-
-@item GROFF_TMAC_PATH
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for macro files
-(before the default directories are tried). @xref{Macro Directories}.
-
-@item GROFF_TYPESETTER
-@tindex GROFF_TYPESETTER@r{, environment variable}
-The default output device.
-
-@item GROFF_FONT_PATH
-@tindex GROFF_FONT_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for the
-@code{dev}@var{name} directory (before the default directories are
-tried). @xref{Font Directories}.
-
-@item GROFF_BIN_PATH
-@tindex GROFF_BIN_PATH@r{, environment variable}
-This search path, followed by @code{PATH}, is used for commands executed
-by @code{groff}.
-
-@item GROFF_TMPDIR
-@tindex GROFF_TMPDIR@r{, environment variable}
-@tindex TMPDIR@r{, environment variable}
-The directory in which @code{groff} creates temporary files. If this is
-not set and @env{TMPDIR} is set, temporary files are created in that
-directory. Otherwise temporary files are created in a system-dependent
-default directory (on Unix and GNU/Linux systems, this is usually
-@file{/tmp}). @code{grops}, @code{grefer}, @code{pre-grohtml}, and
-@code{post-grohtml} can create temporary files in this directory.
-@end table
-
-Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-
-@c =====================================================================
-
-@node Macro Directories, Font Directories, Environment, Invoking groff
-@section Macro Directories
-@cindex macro directories
-@cindex directories for macros
-@cindex searching macros
-@cindex macros, searching
-
-All macro file names must be named @code{@var{name}.tmac} or
-@code{tmac.@var{name}} to make the @option{-m@var{name}} command line
-option work. The @code{mso} request doesn't have this restriction; any
-file name can be used, and @code{gtroff} won't try to append or prepend
-the @samp{tmac} string.
-
-@cindex tmac, directory
-@cindex directory, for tmac files
-@cindex tmac, path
-@cindex path, for tmac files
-@cindex searching macro files
-@cindex macro files, searching
-@cindex files, macro, searching
-Macro files are kept in the @dfn{tmac directories}, all of which
-constitute the @dfn{tmac path}. The elements of the search path for
-macro files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-M} command line option.
-
-@item
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-The directories given in the @env{GROFF_TMAC_PATH} environment
-variable.
-
-@item
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@cindex current directory
-@cindex directory, current
-The current directory (only if in unsafe mode using the @option{-U}
-command line switch).
-
-@item
-@cindex home directory
-@cindex directory, home
-The home directory.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-@cindex platform-specific directory
-@cindex directory, platform-specific
-A platform-dependent directory, a site-specific (platform-independent)
-directory, and the main tmac directory; the default locations are
-
-@Example
-/usr/local/lib/groff/site-tmac
-/usr/local/share/groff/site-tmac
-/usr/local/share/groff/1.18.2/tmac
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.18.2, and the installation
-prefix was @file{/usr/local}. It is possible to fine-tune those
-directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Directories, Paper Size, Macro Directories, Invoking groff
-@section Font Directories
-@cindex font directories
-@cindex directories for fonts
-@cindex searching fonts
-@cindex fonts, searching
-
-Basically, there is no restriction how font files for @code{groff} are
-named and how long font names are; however, to make the font family
-mechanism work (@pxref{Font Families}), fonts within a family should
-start with the family name, followed by the shape. For example, the
-Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
-@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
-`italic', and `bold italic', respectively. Thus the final font names
-are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
-
-@cindex font path
-@cindex path, for font files
-All font files are kept in the @dfn{font directories} which constitute
-the @dfn{font path}. The file search functions will always append the
-directory @code{dev}@var{name}, where @var{name} is the name of the
-output device. Assuming, say, DVI output, and @file{/foo/bar} as a
-font directory, the font files for @code{grodvi} must be in
-@file{/foo/bar/devdvi}.
-
-The elements of the search path for font files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-F} command line option. All device drivers and some
-preprocessors also have this option.
-
-@item
-@tindex GROFF_FONT_PATH@r{, environment variable}
-The directories given in the @env{GROFF_FONT_PATH} environment
-variable.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-A site-specific directory and the main font directory; the default
-locations are
-
-@Example
-/usr/local/share/groff/site-font
-/usr/local/share/groff/1.18.2/font
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.18.2, and the installation
-prefix was @file{/usr/local}. It is possible to fine-tune those
-directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Paper Size, Invocation Examples, Font Directories, Invoking groff
-@section Paper Size
-@cindex paper size
-@cindex size, paper
-@cindex landscape page orientation
-@cindex orientation, landscape
-@cindex page orientation, landscape
-
-In groff, the page size for @code{gtroff} and for output devices are
-handled separately. @xref{Page Layout}, for vertical manipulation of
-the page size. @xref{Line Layout}, for horizontal changes.
-
-A default paper size can be set in the device's @file{DESC} file. Most
-output devices also have a command line option @option{-p} to override
-the default paper size and option @option{-l} to use landscape
-orientation. @xref{DESC File Format}, for a description of the
-@code{papersize} keyword which takes the same argument as @option{-p}.
-
-@pindex papersize.tmac
-@pindex troffrc
-A convenient shorthand to set a particular paper size for @code{gtroff}
-is command line option @option{-dpaper=@var{size}}. This defines string
-@code{paper} which is processed in file @file{papersize.tmac} (loaded in
-the start-up file @file{troffrc} by default). Possible values for
-@var{size} are the same as the predefined values for the
-@code{papersize} keyword (but only in lowercase) except
-@code{a7}-@code{d7}. An appended @samp{l} (ell) character denotes
-landscape orientation.
-
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-@Example
-groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-@endExample
-
-Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-
-@c =====================================================================
-
-@node Invocation Examples, , Paper Size, Invoking groff
-@section Invocation Examples
-@cindex invocation examples
-@cindex examples of invocation
-
-This section lists several common uses of @code{groff} and the
-corresponding command lines.
-
-@Example
-groff file
-@endExample
-
-@noindent
-This command processes @file{file} without a macro package or a
-preprocessor. The output device is the default, @samp{ps}, and the
-output is sent to @code{stdout}.
-
-@Example
-groff -t -mandoc -Tascii file | less
-@endExample
-
-@noindent
-This is basically what a call to the @code{man} program does.
-@code{gtroff} processes the manual page @file{file} with the
-@file{mandoc} macro file (which in turn either calls the @file{man} or
-the @file{mdoc} macro package), using the @code{tbl} preprocessor and
-the @acronym{ASCII} output device. Finally, the @code{less} pager
-displays the result.
-
-@Example
-groff -X -m me file
-@endExample
-
-@noindent
-Preview @file{file} with @code{gxditview}, using the @file{me} macro
-package. Since no @option{-T} option is specified, use the default
-device (@samp{ps}). Note that you can either say @w{@samp{-m me}} or
-@w{@samp{-me}}; the latter is an anachronism from the early days of
-@acronym{UNIX}.@footnote{The same is true for the other main macro
-packages that come with @code{groff}: @file{man}, @file{mdoc},
-@file{ms}, @file{mm}, and @file{mandoc}. This won't work in general;
-for example, to load @file{trace.tmac}, either @samp{-mtrace} or
-@w{@samp{-m trace}} must be used.}
-
-@Example
-groff -man -rD1 -z file
-@endExample
-
-@noindent
-Check @file{file} with the @file{man} macro package, forcing
-double-sided printing -- don't produce any output.
-
-@menu
-* grog::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node grog, , Invocation Examples, Invocation Examples
-@subsection @code{grog}
-
-@pindex grog
-@code{grog} reads files, guesses which of the @code{groff} preprocessors
-and/or macro packages are required for formatting them, and prints the
-@code{groff} command including those options on the standard output. It
-generates one or more of the options @option{-e}, @option{-man},
-@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
-@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
-@option{-s}, and @option{-t}.
-
-A special file name@tie{}@file{-} refers to the standard input. Specifying
-no files also means to read the standard input. Any specified options
-are included in the printed command. No space is allowed between
-options and their arguments. The only options recognized are
-@option{-C} (which is also passed on) to enable compatibility mode, and
-@option{-v} to print the version number and exit.
-
-For example,
-
-@Example
-grog -Tdvi paper.ms
-@endExample
-
-@noindent
-guesses the appropriate command to print @file{paper.ms} and then prints
-it to the command line after adding the @option{-Tdvi} option. For
-direct execution, enclose the call to @code{grog} in backquotes at the
-@acronym{UNIX} shell prompt:
-
-@Example
-`grog -Tdvi paper.ms` > paper.dvi
-@endExample
-
-@noindent
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e.@: either a file or a pager program like
-@code{less}).
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
-@chapter Tutorial for Macro Users
-@cindex tutorial for macro users
-@cindex macros, tutorial for users
-@cindex user's tutorial for macros
-@cindex user's macro tutorial
-
-Most users tend to use a macro package to format their papers. This
-means that the whole breadth of @code{groff} is not necessary for most
-people. This chapter covers the material needed to efficiently use a
-macro package.
-
-@menu
-* Basics::
-* Common Features::
-@end menu
-
-
-@c =====================================================================
-
-@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
-@section Basics
-@cindex basics of macros
-@cindex macro basics
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.@footnote{This section is derived from
-@cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
-References are made throughout to more detailed information, if desired.
-
-@code{gtroff} reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing. The input
-consists of text, or words to be printed, and embedded commands
-(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
-format the output. For more detail on this, see @ref{Embedded
-Commands}.
-
-The word @dfn{argument} is used in this chapter to mean a word or number
-which appears on the same line as a request, and which modifies the
-meaning of that request. For example, the request
-
-@Example
-.sp
-@endExample
-
-@noindent
-spaces one line, but
-
-@Example
-.sp 4
-@endExample
-
-@noindent
-spaces four lines. The number@tie{}4 is an argument to the @code{sp}
-request which says to space four lines instead of one. Arguments are
-separated from the request and from each other by spaces (@emph{no}
-tabs). More details on this can be found in @ref{Request and Macro
-Arguments}.
-
-The primary function of @code{gtroff} is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result. For
-example, the input:
-
-@Example
-Now is the time
-for all good men
-to come to the aid
-of their party.
-Four score and seven
-years ago, etc.
-@endExample
-
-@noindent
-is read, packed onto output lines, and justified to produce:
-
-@quotation
-Now is the time for all good men to come to the aid of their party.
-Four score and seven years ago, etc.
-@end quotation
-
-@cindex break
-@cindex line break
-Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph. To do
-this it is possible to cause a @dfn{break}, which starts a new output
-line. Some requests cause a break automatically, as normally do blank
-input lines and input lines beginning with a space.
-
-Not all input lines are text to be formatted. Some input lines are
-requests which describe how to format the text. Requests always have a
-period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
-the input line.
-
-The text formatter also does more complex things, such as automatically
-numbering pages, skipping over page boundaries, putting footnotes in the
-correct place, and so forth.
-
-Here are a few hints for preparing text for input to @code{gtroff}.
-
-@itemize @bullet
-@item
-First, keep the input lines short. Short input lines are easier to
-edit, and @code{gtroff} packs words onto longer lines anyhow.
-
-@item
-In keeping with this, it is helpful to begin a new line after every
-comma or phrase, since common corrections are to add or delete sentences
-or phrases.
-
-@item
-End each sentence with two spaces -- or better, start each sentence on a
-new line. @code{gtroff} recognizes characters that usually end a
-sentence, and inserts sentence space accordingly.
-
-@item
-Do not hyphenate words at the end of lines -- @code{gtroff} is smart
-enough to hyphenate words as needed, but is not smart enough to take
-hyphens out and join a word back together. Also, words such as
-``mother-in-law'' should not be broken over a line, since then a space
-can occur where not wanted, such as ``@w{mother- in}-law''.
-@end itemize
-
-@cindex double-spacing (@code{ls})
-@cindex spacing
-@code{gtroff} double-spaces output text automatically if you use the
-request @w{@samp{.ls 2}}. Reactivate single-spaced mode by typing
-@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the
-vertical space, use the @code{pvs} request (@pxref{Changing Type
-Sizes}).}
-
-A number of requests allow to change the way the output looks,
-sometimes called the @dfn{layout} of the output page. Most of these
-requests adjust the placing of @dfn{whitespace} (blank lines or
-spaces).
-
-@cindex new page (@code{bp})
-The @code{bp} request starts a new page, causing a line break.
-
-@cindex blank line (@code{sp})
-@cindex empty line (@code{sp})
-@cindex line, empty (@code{sp})
-The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
-space. @var{N}@tie{}can be omitted (meaning skip a single line) or can
-be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
-@var{N}@tie{}centimeters). For example, the input:
-
-@Example
-.sp 1.5i
-My thoughts on the subject
-.sp
-@endExample
-
-@noindent
-leaves one and a half inches of space, followed by the line ``My
-thoughts on the subject'', followed by a single blank line (more
-measurement units are available, see @ref{Measurements}).
-
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Text lines can be centered by using the @code{ce} request. The line
-after @code{ce} is centered (horizontally) on the page. To center more
-than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
-of lines to center), followed by the @var{N}@tie{}lines. To center many
-lines without counting them, type:
-
-@Example
-.ce 1000
-lines to center
-.ce 0
-@endExample
-
-@noindent
-The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
-lines, in other words, stop centering.
-
-@cindex line break (@code{br})
-@cindex break (@code{br})
-All of these requests cause a break; that is, they always start a new
-line. To start a new line without performing any other action, use
-@code{br}.
-
-
-@c =====================================================================
-
-@node Common Features, , Basics, Tutorial for Macro Users
-@section Common Features
-@cindex common features
-@cindex features, common
-
-@code{gtroff} provides very low-level operations for formatting a
-document. There are many common routine operations which are done in
-all documents. These common operations are written into @dfn{macros}
-and collected into a @dfn{macro package}.
-
-All macro packages provide certain common capabilities which fall into
-the following categories.
-
-@menu
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs, Sections and Chapters, Common Features, Common Features
-@subsection Paragraphs
-@cindex paragraphs
-
-One of the most common and most used capability is starting a
-paragraph. There are a number of different types of paragraphs, any
-of which can be initiated with macros supplied by the macro package.
-Normally, paragraphs start with a blank line and the first line
-indented, like the text in this manual. There are also block style
-paragraphs, which omit the indentation:
-
-@Example
-Some men look at constitutions with sanctimonious
-reverence, and deem them like the ark of the covenant, too
-sacred to be touched.
-@endExample
-
-@noindent
-And there are also indented paragraphs which begin with a tag or label
-at the margin and the remaining text indented.
-
-@Example
-one This is the first paragraph. Notice how the first
- line of the resulting paragraph lines up with the
- other lines in the paragraph.
-@endExample
-@Example
-longlabel
- This paragraph had a long label. The first
- character of text on the first line does not line up
- with the text on second and subsequent lines,
- although they line up with each other.
-@endExample
-
-A variation of this is a bulleted list.
-
-@Example
-. Bulleted lists start with a bullet. It is possible
- to use other glyphs instead of the bullet. In nroff
- mode using the ASCII character set for output, a dot
- is used instead of a real bullet.
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
-@subsection Sections and Chapters
-
-Most macro packages supply some form of section headers. The simplest
-kind is simply the heading on a line by itself in bold type. Others
-supply automatically numbered section heading or different heading
-styles at different levels. Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-@c ---------------------------------------------------------------------
-
-@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
-@subsection Headers and Footers
-
-Every macro package gives some way to manipulate the @dfn{headers} and
-@dfn{footers} (also called @dfn{titles}) on each page. This is text
-put at the top and bottom of each page, respectively, which contain
-data like the current page number, the current chapter title, and so
-on. Its appearance is not affected by the running text. Some packages
-allow for different ones on the even and odd pages (for material printed
-in a book form).
-
-The titles are called @dfn{three-part titles}, that is, there is a
-left-justified part, a centered part, and a right-justified part. An
-automatically generated page number may be put in any of these fields
-with the @samp{%} character (see @ref{Page Layout}, for more details).
-
-@c ---------------------------------------------------------------------
-
-@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
-@subsection Page Layout
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-@c ---------------------------------------------------------------------
-
-@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
-@subsection Displays
-@cindex displays
-
-@dfn{Displays} are sections of text to be set off from the body of
-the paper. Major quotes, tables, and figures are types of displays, as
-are all the examples used in this document.
-
-@cindex quotes, major
-@cindex major quotes
-@dfn{Major quotes} are quotes which are several lines long, and hence
-are set in from the rest of the text without quote marks around them.
-
-@cindex list
-A @dfn{list} is an indented, single-spaced, unfilled display. Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
-@cindex keep
-A @dfn{keep} is a display of lines which are kept on a single page if
-possible. An example for a keep might be a diagram. Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
-@cindex keep, floating
-@cindex floating keep
-@dfn{Floating keeps} move relative to the text. Hence, they are good for
-things which are referred to by name, such as ``See figure@tie{}3''. A
-floating keep appears at the bottom of the current page if it fits;
-otherwise, it appears at the top of the next page. Meanwhile, the
-surrounding text `flows' around the keep, thus leaving no blank areas.
-
-@c ---------------------------------------------------------------------
-
-@node Footnotes and Annotations, Table of Contents, Displays, Common Features
-@subsection Footnotes and Annotations
-@cindex footnotes
-@cindex annotations
-
-There are a number of requests to save text for later printing.
-
-@dfn{Footnotes} are printed at the bottom of the current page.
-
-@cindex delayed text
-@dfn{Delayed text} is very similar to a footnote except that it is
-printed when called for explicitly. This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
-Most macro packages which supply this functionality also supply a means
-of automatically numbering either type of annotation.
-
-@c ---------------------------------------------------------------------
-
-@node Table of Contents, Indices, Footnotes and Annotations, Common Features
-@subsection Table of Contents
-@cindex table of contents
-@cindex contents, table of
-
-@dfn{Tables of contents} are a type of delayed text having a tag
-(usually the page number) attached to each entry after a row of dots.
-The table accumulates throughout the paper until printed, usually after
-the paper has ended. Many macro packages provide the ability to have
-several tables of contents (e.g.@: a standard table of contents, a list
-of tables, etc).
-
-@c ---------------------------------------------------------------------
-
-@node Indices, Paper Formats, Table of Contents, Common Features
-@subsection Indices
-@cindex index, in macro package
-
-While some macro packages use the term @dfn{index}, none actually
-provide that functionality. The facilities they call indices are
-actually more appropriate for tables of contents.
-
-@pindex makeindex
-To produce a real index in a document, external tools like the
-@code{makeindex} program are necessary.
-
-@c ---------------------------------------------------------------------
-
-@node Paper Formats, Multiple Columns, Indices, Common Features
-@subsection Paper Formats
-@cindex paper formats
-
-Some macro packages provide stock formats for various kinds of
-documents. Many of them provide a common format for the title and
-opening pages of a technical paper. The @file{mm} macros in particular
-provide formats for letters and memoranda.
-
-@c ---------------------------------------------------------------------
-
-@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
-@subsection Multiple Columns
-
-Some macro packages (but not @file{man}) provide the ability to have two
-or more columns on a page.
-
-@c ---------------------------------------------------------------------
-
-@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
-@subsection Font and Size Changes
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-@c ---------------------------------------------------------------------
-
-@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
-@subsection Predefined Strings
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
-@subsection Preprocessor Support
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
-For example, all macro packages mark tables (which are processed with
-@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
-The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that prints
-a caption at the top of a new page (when the table is too long to fit on
-a single page).
-
-@c ---------------------------------------------------------------------
-
-@node Configuration and Customization, , Preprocessor Support, Common Features
-@subsection Configuration and Customization
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves. This ranges from setting the default type size
-to changing the appearance of section headers.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
-@chapter Macro Packages
-@cindex macro packages
-@cindex packages, macros
-
-This chapter documents the main macro packages that come with
-@code{groff}.
-
-Different main macro packages can't be used at the same time; for example
-
-@Example
-groff -m man foo.man -m ms bar.doc
-@endExample
-
-@noindent
-doesn't work. Note that option arguments are processed before non-option
-arguments; the above (failing) sample is thus reordered to
-
-@Example
-groff -m man -m ms foo.man bar.doc
-@endExample
-
-@menu
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-@end menu
-
-
-@c =====================================================================
-
-@node man, mdoc, Macro Packages, Macro Packages
-@section @file{man}
-@cindex manual pages
-@cindex man pages
-@pindex an.tmac
-@pindex man.tmac
-@pindex man-old.tmac
-
-This is the most popular and probably the most important macro package
-of @code{groff}. It is easy to use, and a vast majority of manual pages
-are based on it.
-
-@menu
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Man options, Man usage, man, man
-@subsection Options
-
-The command line format for using the @file{man} macros with
-@code{groff} is:
-
-@Example
-groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
- [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
- [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
- [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
-
-@table @code
-@item -rcR=1
-This option (the default if a TTY output device is used) creates a
-single, very long page instead of multiple pages. Use @code{-rcR=0}
-to disable it.
-
-@item -rC1
-If more than one manual page is given on the command line, number the
-pages continuously, rather than starting each at@tie{}1.
-
-@item -rD1
-Double-sided printing. Footers for even and odd pages are formatted
-differently.
-
-@item -rFT=@var{dist}
-Set the position of the footer text to @var{dist}. If positive, the
-distance is measured relative to the top of the page, otherwise it is
-relative to the bottom. The default is @minus{}0.5@dmn{i}.
-
-@item -rHY=@var{flags}
-Set hyphenation flags. Possible values are 1@tie{}to hyphenate without
-restrictions, 2@tie{} to not hyphenate the last word on a page,
-4@tie{}to not hyphenate the last two characters of a word, and
-8@tie{}to not hyphenate the first two characters of a word. These
-values are additive; the default is@tie{}14.
-
-@item -rIN=@var{length}
-Set the body text indentation to @var{length}.
-If not specified, the indentation defaults to 7@dmn{n}
-(7@tie{}characters) in nroff mode and 7.2@dmn{n} otherwise.
-For nroff, this value should always be an integer multiple of unit @samp{n}
-to get consistent indentation.
-
-@item -rLL=@var{length}
-Set line length to @var{length}. If not specified, the line length
-is set to respect any value set by a prior @samp{ll} request (which
-@emph{must} be in effect when the @samp{TH} macro is invoked), if
-this differs from the built-in default for the formatter; otherwise it
-defaults to 78@dmn{n} in nroff mode (this is 78 characters per
-line) and 6.5@dmn{i} in troff mode.@footnote{Note that the use of
-a @samp{.ll @var{length}} request to initialize the line length, prior
-to use of the @samp{TH} macro, is supported for backward compatibility
-with some versions of the @code{man} program. @emph{Always} use the
-@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL @var{length}}
-request, in preference to such a @samp{.ll @var{length}} request.
-In particular, note that in nroff mode, the request @samp{.ll 65n},
-(with any @var{length} expression which evaluates equal to 65@dmn{n},
-i.e., the formatter's default line length in nroff mode), will @emph{not}
-set the line length to 65@dmn{n} (it will be adjusted to the @code{man}
-macro package's default setting of 78@dmn{n}), whereas the use of the
-@option{-rLL=65n} option, or the @samp{.nr LL 65n}
-request @emph{will} establish a line length of 65@dmn{n}.}
-
-@item -rLT=@var{length}
-Set title length to @var{length}. If not specified, the title length
-defaults to the line length.
-
-@item -rP@var{nnn}
-Page numbering starts with @var{nnn} rather than with@tie{}1.
-
-@item -rS@var{xx}
-Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
-document font size instead of the default value of@tie{}10@dmn{pt}.
-
-@item -rSN=@var{length}
-Set the indentation for sub-subheadings to @var{length}.
-If not specified, the indentation defaults to 3@dmn{n}.
-
-@item -rX@var{nnn}
-After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
-@var{nnn}c, etc. For example, the option @option{-rX2} produces the
-following page numbers: 1, 2, 2a, 2b, 2c, etc.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Man usage, Man font macros, Man options, man
-@subsection Usage
-@cindex @code{man} macros
-@cindex macros for manual pages [@code{man}]
-
-@pindex man.local
-This section describes the available macros for manual pages. For
-further customization, put additional macros and requests into the file
-@file{man.local} which is loaded immediately after the @file{man}
-package.
-
-@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
-Set the title of the man page to @var{title} and the section to
-@var{section}, which must have a value between 1 and@tie{}8. The value
-of @var{section} may also have a string appended, e.g.@: @samp{.pm},
-to indicate a specific subsection of the man pages.
-
-Both @var{title} and @var{section} are positioned at the left and right
-in the header line (with @var{section} in parentheses immediately
-appended to @var{title}. @var{extra1} is positioned in the middle of
-the footer line. @var{extra2} is positioned at the left in the footer
-line (or at the left on even pages and at the right on odd pages if
-double-sided printing is active). @var{extra3} is centered in the
-header line.
-
-For @acronym{HTML} output, headers and footers are completely suppressed.
-
-Additionally, this macro starts a new page; the new line number is@tie{}1
-again (except if the @option{-rC1} option is given on the command line)
--- this feature is intended only for formatting multiple man pages; a
-single man page should contain exactly one @code{TH} macro at the
-beginning of the file.
-@endDefmac
-
-@Defmac {SH, [@Var{heading}], man}
-Set up an unnumbered section heading sticking out to the left. Prints
-out all the text following @code{SH} up to the end of the line (or the
-text in the next line if there is no argument to @code{SH}) in bold
-face (or the font specified by the string @code{HF}), one size larger than
-the base document size. Additionally, the left margin and the indentation
-for the following text is reset to its default value.
-@endDefmac
-
-@Defmac {SS, [@Var{heading}], man}
-Set up an unnumbered (sub)section heading. Prints out all the text
-following @code{SS} up to the end of the line (or the text in the next
-line if there is no argument to @code{SS}) in bold face (or the font
-specified by the string @code{HF}), at the same size as the base document
-size. Additionally, the left margin and the indentation for the
-following text is reset to its default value.
-@endDefmac
-
-@Defmac {TP, [@Var{nnn}], man}
-Set up an indented paragraph with label. The indentation is set to
-@var{nnn} if that argument is supplied (the default unit is @samp{n}
-if omitted), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
-value if none of them have been used yet).
-
-The first line of text following this macro is interpreted as a string
-to be printed flush-left, as it is appropriate for a label. It is not
-interpreted as part of a paragraph, so there is no attempt to fill the
-first line with text from the following input lines. Nevertheless, if
-the label is not as wide as the indentation the paragraph starts
-at the same line (but indented), continuing on the following lines.
-If the label is wider than the indentation the descriptive part
-of the paragraph begins on the line following the label, entirely
-indented. Note that neither font shape nor font size of the label is
-set to a default value; on the other hand, the rest of the text has
-default font settings.
-@endDefmac
-
-@DefmacList {LP, , man}
-@DefmacItem {PP, , man}
-@DefmacListEnd {P, , man}
-These macros are mutual aliases. Any of them causes a line break at
-the current position, followed by a vertical space downwards by the
-amount specified by the @code{PD} macro. The font size and shape are
-reset to the default value (10@dmn{pt} roman if no @option{-rS} option
-is given on the command line). Finally, the current left margin and the
-indentation is restored.
-@endDefmac
-
-@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
-Set up an indented paragraph, using @var{designator} as a tag to mark
-its beginning. The indentation is set to @var{nnn} if that argument
-is supplied (default unit is @samp{n}), otherwise it is set to the
-previous indentation value specified with @code{TP}, @code{IP}, or
-@code{HP} (or the default value if none of them have been used yet).
-Font size and face of the paragraph (but not the designator) are reset
-to their default values.
-
-To start an indented paragraph with a particular indentation but without
-a designator, use @samp{""} (two double quotes) as the first argument of
-@code{IP}.
-
-For example, to start a paragraph with bullets as the designator and
-4@tie{}en indentation, write
-
-@Example
-.IP \(bu 4
-@endExample
-@endDefmac
-
-@Defmac {HP, [@Var{nnn}], man}
-@cindex hanging indentation [@code{man}]
-@cindex @code{man} macros, hanging indentation
-Set up a paragraph with hanging left indentation. The indentation is
-set to @var{nnn} if that argument is supplied (default unit is
-@samp{n}), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or the default
-value if non of them have been used yet). Font size and face are reset
-to their default values.
-@endDefmac
-
-@Defmac {RS, [@Var{nnn}], man}
-@cindex left margin, how to move [@code{man}]
-@cindex @code{man} macros, moving left margin
-Move the left margin to the right by the value @var{nnn} if specified
-(default unit is @samp{n}); otherwise it is set to the previous
-indentation value specified with @code{TP}, @code{IP}, or @code{HP}
-(or to the default value if none of them have been used yet). The
-indentation value is then set to the default.
-
-Calls to the @code{RS} macro can be nested.
-@endDefmac
-
-@Defmac {RE, [@Var{nnn}], man}
-Move the left margin back to level @var{nnn}, restoring the previous left
-margin. If no argument is given, it moves one level back. The first
-level (i.e., no call to @code{RS} yet) has number@tie{}1, and each call
-to @code{RS} increases the level by@tie{}1.
-@endDefmac
-
-@cindex line breaks, with vertical space [@code{man}]
-@cindex @code{man} macros, line breaks with vertical space
-To summarize, the following macros cause a line break with the insertion
-of vertical space (which amount can be changed with the @code{PD}
-macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
-@code{P}), @code{IP}, and @code{HP}.
-
-@cindex line breaks, without vertical space [@code{man}]
-@cindex @code{man} macros, line breaks without vertical space
-The macros @code{RS} and @code{RE} also cause a break but do not insert
-vertical space.
-
-@cindex default indentation, resetting [@code{man}]
-@cindex indentaion, resetting to default [@code{man}]
-@cindex @code{man} macros, resetting default indentation
-Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP}, @code{P}),
-and @code{RS} reset the indentation to its default value.
-
-@c ---------------------------------------------------------------------
-
-@node Man font macros, Miscellaneous man macros, Man usage, man
-@subsection Macros to set fonts
-@cindex font selection [@code{man}]
-@cindex @code{man} macros, how to set fonts
-
-The standard font is roman; the default text size is 10@tie{}point.
-If command line option @option{-rS=@var{n}} is given, use
-@var{n}@dmn{pt} as the default text size.
-
-@Defmac {SM, [@Var{text}], man}
-Set the text on the same line or the text on the next line in a font
-that is one point size smaller than the default font.
-@endDefmac
-
-@Defmac {SB, [@Var{text}], man}
-@cindex bold face [@code{man}]
-@cindex @code{man} macros, bold face
-Set the text on the same line or the text on the next line in bold face
-font, one point size smaller than the default font.
-@endDefmac
-
-@Defmac {BI, text, man}
-Set its arguments alternately in bold face and italic, without a space
-between the arguments. Thus,
-
-@Example
-.BI this "word and" that
-@endExample
-
-@noindent
-produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
-and ``word and'' in italics.
-@endDefmac
-
-@Defmac {IB, text, man}
-Set its arguments alternately in italic and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RI, text, man}
-Set its arguments alternately in roman and italic, without a space between
-the arguments.
-@endDefmac
-
-@Defmac {IR, text, man}
-Set its arguments alternately in italic and roman, without a space between
-the arguments.
-@endDefmac
-
-@Defmac {BR, text, man}
-Set its arguments alternately in bold face and roman, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RB, text, man}
-Set its arguments alternately in roman and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {B, [@Var{text}], man}
-Set @var{text} in bold face. If no text is present on the line where
-the macro is called, then the text of the next line appears in bold
-face.
-@endDefmac
-
-@Defmac {I, [@Var{text}], man}
-@cindex italic fonts [@code{man}]
-@cindex @code{man} macros, italic fonts
-Set @var{text} in italic. If no text is present on the line where the
-macro is called, then the text of the next line appears in italic.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Miscellaneous man macros, Predefined man strings, Man font macros, man
-@subsection Miscellaneous macros
-
-@pindex grohtml
-@cindex @code{man} macros, default indentation
-@cindex default indentation [@code{man}]
-The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
-nroff mode except for @code{grohtml} which ignores indentation.
-
-@Defmac {DT, , man}
-@cindex tab stops [@code{man}]
-@cindex @code{man} macros, tab stops
-Set tabs every 0.5@tie{}inches. Since this macro is always executed
-during a call to the @code{TH} macro, it makes sense to call it only if
-the tab positions have been changed.
-@endDefmac
-
-@Defmac {PD, [@Var{nnn}], man}
-@cindex empty space before a paragraph [@code{man}]
-@cindex @code{man} macros, empty space before a paragraph
-Adjust the empty space before a new paragraph (or section). The
-optional argument gives the amount of space (default unit is
-@samp{v}); without parameter, the value is reset to its default value
-(1@tie{}line in nroff mode, 0.4@dmn{v}@tie{}otherwise).
-
-This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
-well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
-@endDefmac
-
-The following two macros are included for
-BSD compatibility.
-
-@Defmac {AT, [@Var{system} [@Var{release}]], man}
-@cindex @code{man}macros, BSD compatibility
-Alter the footer for use with @acronym{AT&T} manpages.
-This command exists only for compatibility; don't use it.
-The first argument @var{system} can be:
-
-@table @code
-@item 3
-7th Edition (the default)
-
-@item 4
-System III
-
-@item 5
-System V
-@end table
-
-An optional second argument @var{release} to @code{AT} specifies the
-release number (such as ``System V Release 3'').
-@endDefmac
-
-@Defmac {UC, [@Var{version}], man}
-@cindex @code{man}macros, BSD compatibility
-Alters the footer for use with @acronym{BSD} manpages.
-This command exists only for compatibility; don't use it.
-The argument can be:
-
-@table @code
-@item 3
-3rd Berkeley Distribution (the default)
-
-@item 4
-4th Berkeley Distribution
-
-@item 5
-4.2 Berkeley Distribution
-
-@item 6
-4.3 Berkeley Distribution
-
-@item 7
-4.4 Berkeley Distribution
-@end table
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
-@subsection Predefined strings
-
-The following strings are defined:
-
-@Defstr {S, man}
-Switch back to the default font size.
-@endDefstr
-
-@Defstr {HF, man}
-The typeface used for headings.
-The default is @samp{B}.
-@endDefstr
-
-@Defstr {R, man}
-The `registered' sign.
-@endDefstr
-
-@Defstr {Tm, man}
-The `trademark' sign.
-@endDefstr
-
-@DefstrList {lq, man}
-@DefstrListEnd {rq, man}
-@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
-@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
-Left and right quote. This is equal to @code{\(lq} and @code{\(rq},
-respectively.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
-@subsection Preprocessors in @file{man} pages
-
-@cindex preprocessor, calling convention
-@cindex calling convention of preprocessors
-If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
-become common usage to make the first line of the man page look like
-this:
-
-@Example
-'\" @var{word}
-@endExample
-
-@pindex geqn@r{, invocation in manual pages}
-@pindex grefer@r{, invocation in manual pages}
-@pindex gtbl@r{, invocation in manual pages}
-@pindex man@r{, invocation of preprocessors}
-@noindent
-Note the single space character after the double quote. @var{word}
-consists of letters for the needed preprocessors: @samp{e} for
-@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
-Modern implementations of the @code{man} program read this first line
-and automatically call the right preprocessor(s).
-
-@c ---------------------------------------------------------------------
-
-@node Optional man extensions, , Preprocessors in man pages, man
-@subsection Optional @file{man} extensions
-
-@pindex man.local
-Use the file @file{man.local} for local extensions
-to the @code{man} macros or for style changes.
-
-@unnumberedsubsubsec Custom headers and footers
-@cindex @code{man} macros, custom headers and footers
-
-In groff versions 1.18.2 and later, you can specify custom
-headers and footers by redefining the following macros in
-@file{man.local}.
-
-@Defmac {PT, , man}
-Control the content of the headers.
-Normally, the header prints the command name
-and section number on either side, and the
-optional fifth argument to @code{TH} in the center.
-@endDefmac
-
-@Defmac {BT, , man}
-Control the content of the footers.
-Normally, the footer prints the page number
-and the third and fourth arguments to @code{TH}.
-
-Use the @code{FT} number register to specify the
-footer position.
-The default is @minus{}0.5@dmn{i}.
-@endDefmac
-
-@unnumberedsubsubsec Ultrix-specific man macros
-@cindex Ultrix-specific @code{man} macros
-@cindex @code{man} macros, Ultrix-specific
-
-@pindex man.ultrix
-The @code{groff} source distribution includes
-a file named @file{man.ultrix}, containing
-macros compatible with the Ultrix variant of
-@code{man}.
-Copy this file into @file{man.local} (or use the @code{mso} request to
-load it) to enable the following macros.
-
-@Defmac {CT, @Var{key}, man}
-Print @samp{<CTRL/@var{key}>}.
-@endDefmac
-
-@Defmac {CW, , man}
-Print subsequent text using the constant width (Courier) typeface.
-@endDefmac
-
-@Defmac {Ds, , man}
-Begin a non-filled display.
-@endDefmac
-
-@Defmac {De, , man}
-End a non-filled display started with @code{Ds}.
-@endDefmac
-
-@Defmac {EX, [@Var{indent}], man}
-Begins a non-filled display
-using the constant width (Courier) typeface.
-Use the optional @var{indent} argument to
-indent the display.
-@endDefmac
-
-@Defmac {EE, , man}
-End a non-filled display started with @code{EX}.
-@endDefmac
-
-@Defmac {G, [@Var{text}], man}
-Sets @var{text} in Helvetica.
-If no text is present on the line where
-the macro is called, then the text of the
-next line appears in Helvetica.
-@endDefmac
-
-@Defmac {GL, [@Var{text}], man}
-Sets @var{text} in Helvetica Oblique.
-If no text is present on the line where
-the macro is called, then the text of the
-next line appears in Helvetica Oblique.
-@endDefmac
-
-@Defmac {HB, [@Var{text}], man}
-Sets @var{text} in Helvetica Bold.
-If no text is present on the line where
-the macro is called, then all text up to
-the next @code{HB} appears in Helvetica Bold.
-@endDefmac
-
-@Defmac {TB, [@Var{text}], man}
-Identical to @code{HB}.
-@endDefmac
-
-@Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
-Set a manpage reference in Ultrix format.
-The @var{title} is in Courier instead of italic.
-Optional punctuation follows the section number without
-an intervening space.
-@endDefmac
-
-@Defmac {NT, [@code{C}] [@Var{title}], man}
-Begin a note.
-Print the optional @Var{title}, or the word ``Note'',
-centered on the page.
-Text following the macro makes up the body of the note,
-and is indented on both sides.
-If the first argument is @code{C}, the body of the
-note is printed centered (the second argument replaces
-the word ``Note'' if specified).
-@endDefmac
-
-@Defmac {NE, , man}
-End a note begun with @code{NT}.
-@endDefmac
-
-@Defmac {PN, @Var{path} [@Var{punct}], man}
-Set the path name in constant width (Courier),
-followed by optional punctuation.
-@endDefmac
-
-@Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
-When called with two arguments, identical to @code{PN}.
-When called with three arguments,
-set the second argument in constant width (Courier),
-bracketed by the first and third arguments in the current font.
-@endDefmac
-
-@Defmac {R, , man}
-Switch to roman font and turn off any underlining in effect.
-@endDefmac
-
-@Defmac {RN, , man}
-Print the string @samp{<RETURN>}.
-@endDefmac
-
-@Defmac {VS, [@code{4}], man}
-Start printing a change bar in the margin if
-the number @code{4} is specified.
-Otherwise, this macro does nothing.
-@endDefmac
-
-@Defmac {VE, , man}
-End printing the change bar begun by @code{VS}.
-@endDefmac
-
-@unnumberedsubsubsec Simple example
-
-The following example @file{man.local} file
-alters the @code{SH} macro to add some extra
-vertical space before printing the heading.
-Headings are printed in Helvetica Bold.
-
-@Example
-.\" Make the heading fonts Helvetica
-.ds HF HB
-.
-.\" Put more whitespace in front of headings.
-.rn SH SH-orig
-.de SH
-. if t .sp (u;\\n[PD]*2)
-. SH-orig \\$*
-..
-@endExample
-
-@c =====================================================================
-
-@node mdoc, ms, man, Macro Packages
-@section @file{mdoc}
-@cindex @code{mdoc} macros
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
-at the command line).
-
-
-@c =====================================================================
-
-@node ms, me, mdoc, Macro Packages
-@section @file{ms}
-@cindex @code{ms} macros
-
-The @file{-ms} macros are suitable for reports, letters, books, user
-manuals, and so forth. The package provides macros for cover pages,
-section headings, paragraphs, lists, footnotes, pagination, and a
-table of contents.
-
-@menu
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Intro, General ms Structure, ms, ms
-@subsection Introduction to @file{ms}
-
-The original @file{-ms} macros were included with @acronym{AT&T}
-@code{troff} as well as the @file{man} macros. While the @file{man}
-package is intended for brief documents that can be read on-line as
-well as printed, the @file{ms} macros are suitable for longer
-documents that are meant to be printed rather than read on-line.
-
-The @file{ms} macro package included with @code{groff} is a complete,
-bottom-up re-implementation. Several macros (specific to
-@acronym{AT&T} or Berkeley) are not included, while several new
-commands are. @xref{Differences from AT&T ms}, for more information.
-
-@c ---------------------------------------------------------------------
-
-@node General ms Structure, ms Document Control Registers, ms Intro, ms
-@subsection General structure of an @file{ms} document
-@cindex @code{ms} macros, general structure
-
-The @file{ms} macro package expects a certain amount of structure, but
-not as much as packages such as @file{man} or @file{mdoc}.
-
-The simplest documents can begin with a paragraph macro (such as
-@code{LP} or @code{PP}), and consist of text separated by paragraph
-macros or even blank lines. Longer documents have a structure as
-follows:
-
-@table @strong
-@item Document type
-If you invoke the @code{RP} (report) macro on the first line of the
-document, @code{groff} prints the cover page information on its own
-page; otherwise it prints the information on the first page with your
-document text immediately following. Other document formats found in
-@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or
-Berkeley, and are not supported in @code{groff}.
-
-@item Format and layout
-By setting number registers, you can change your document's type (font
-and size), margins, spacing, headers and footers, and footnotes.
-@xref{ms Document Control Registers}, for more details.
-
-@item Cover page
-A cover page consists of a title, the author's name and institution,
-an abstract, and the date.@footnote{Actually, only the title is
-required.} @xref{ms Cover Page Macros}, for more details.
-
-@item Body
-Following the cover page is your document. You can use the @file{ms}
-macros to write reports, letters, books, and so forth. The package is
-designed for structured documents, consisting of paragraphs
-interspersed with headings and augmented by lists, footnotes, tables,
-and other common constructs. @xref{ms Body Text}, for more details.
-
-@item Table of contents
-Longer documents usually include a table of contents, which you can
-invoke by placing the @code{TC} macro at the end of your document.
-The @file{ms} macros have minimal indexing facilities, consisting of
-the @code{IX} macro, which prints an entry on standard error.
-Printing the table of contents at the end is necessary since
-@code{groff} is a single-pass text formatter, thus it cannot determine
-the page number of each section until that section has actually been
-set and printed. Since @file{ms} output is intended for hardcopy, you
-can manually relocate the pages containing the table of contents
-between the cover page and the body text after printing.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
-@subsection Document control registers
-@cindex @code{ms} macros, document control registers
-
-The following is a list of document control number registers. For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the @code{RP} macro. You can set
-other registers later in your document, but you should keep them
-together at the beginning to make them easy to find and edit as
-necessary.
-
-@unnumberedsubsubsec Margin Settings
-
-@Defmpreg {PO, ms}
-Defines the page offset (i.e., the left margin). There is no explicit
-right margin setting; the combination of the @code{PO} and @code{LL}
-registers implicitly define the right margin width.
-
-Effective: next page.
-
-Default value: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LL, ms}
-Defines the line length (i.e., the width of the body text).
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LT, ms}
-Defines the title length (i.e., the header and footer width). This
-is usually the same as @code{LL}, but not necessarily.
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {HM, ms}
-Defines the header margin height at the top of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {FM, ms}
-Defines the footer margin height at the bottom of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@unnumberedsubsubsec Text Settings
-
-@Defmpreg {PS, ms}
-Defines the point size of the body text. If the value is larger than
-or equal to 1000, divide it by 1000 to get a fractional point size.
-For example, @samp{.nr PS 10250} sets the document's point size to
-10.25@dmn{p}.
-
-Effective: next paragraph.
-
-Default: 10@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {VS, ms}
-Defines the space between lines (line height plus leading). If the
-value is larger than or equal to 1000, divide it by 1000 to get a
-fractional point size. Due to backwards compatibility, @code{VS} must
-be smaller than 40000 (this is 40.0@dmn{p}).
-
-Effective: next paragraph.
-
-Default: 12@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {PSINCR, ms}
-Defines an increment in point size, which will be applied to section
-headings at nesting levels below the value specified in @code{GROWPS}.
-The value of @code{PSINCR} should be specified in points, with the
-@dmn{p} scaling factor, and may include a fractional component; for
-example, @w{@samp{.nr PSINCR 1.5p}} sets a point size increment of
-1.5@dmn{p}.
-
-Effective: next section heading.
-
-Default: 1@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {GROWPS, ms}
-Defines the heading level below which the point size increment set by
-@code{PSINCR} becomes effective. Section headings at and above the
-level specified by @code{GROWPS} will be printed at the point size set
-by @code{PS}; for each level below the value of @code{GROWPS}, the
-point size will be increased in steps equal to the value of
-@code{PSINCR}. Setting @code{GROWPS} to any value less than@tie{}2
-disables the incremental heading size feature.
-
-Effective: next section heading.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {HY, ms}
-Defines the hyphenation level. @code{HY} sets safely the value of the
-low-level @code{hy} register. Setting the value of @code{HY}
-to@tie{}0 is equivalent to using the @code{nh} request.
-
-Effective: next paragraph.
-
-Default: 14.
-@endDefmpreg
-
-@Defmpreg {FAM, ms}
-Defines the font family used to typeset the document.
-
-Effective: next paragraph.
-
-Default: as defined in the output device.
-@endDefmpreg
-
-@unnumberedsubsubsec Paragraph Settings
-
-@Defmpreg {PI, ms}
-Defines the initial indentation of a (@code{PP} macro) paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PD, ms}
-Defines the space between paragraphs.
-
-Effective: next paragraph.
-
-Default: 0.3@dmn{v}.
-@endDefmpreg
-
-@Defmpreg {QI, ms}
-Defines the indentation on both sides of a quoted (@code{QP} macro)
-paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PORPHANS, ms}
-Defines the minimum number of initial lines of any paragraph which
-should be kept together, to avoid orphan lines at the bottom of a
-page. If a new paragraph is started close to the bottom of a page,
-and there is insufficient space to accommodate @code{PORPHANS} lines
-before an automatic page break, then the page break will be forced,
-before the start of the paragraph.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@Defmpreg {HORPHANS, ms}
-Defines the minimum number of lines of the following paragraph which
-should be kept together with any section heading introduced by the
-@code{NH} or @code{SH} macros. If a section heading is placed close
-to the bottom of a page, and there is insufficient space to
-accommodate both the heading and at least @code{HORPHANS} lines of the
-following paragraph, before an automatic page break, then the page
-break will be forced before the heading.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@unnumberedsubsubsec Footnote Settings
-
-@Defmpreg {FL, ms}
-Defines the length of a footnote.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[LL]} * 5 / 6}.
-@endDefmpreg
-
-@Defmpreg {FI, ms}
-Defines the footnote indentation.
-
-Effective: next footnote.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {FF, ms}
-The footnote format:
-@table @code
-@item 0
-Print the footnote number as a superscript; indent the footnote
-(default).
-
-@item 1
-Print the number followed by a period (like 1.@:) and indent the
-footnote.
-
-@item 2
-Like 1, without an indentation.
-
-@item 3
-Like 1, but print the footnote number as a hanging paragraph.
-@end table
-
-Effective: next footnote.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {FPS, ms}
-Defines the footnote point size. If the value is larger than or equal
-to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PS]} - 2}.
-@endDefmpreg
-
-@Defmpreg {FVS, ms}
-Defines the footnote vertical spacing. If the value is larger than or
-equal to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[FPS]} + 2}.
-@endDefmpreg
-
-@Defmpreg {FPD, ms}
-Defines the footnote paragraph spacing.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PD]} / 2}.
-@endDefmpreg
-
-@unnumberedsubsubsec Miscellaneous Number Registers
-
-@Defmpreg {MINGW, ms}
-Defines the minimum width between columns in a multi-column document.
-
-Effective: next page.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@c ---------------------------------------------------------------------
-
-@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
-@subsection Cover page macros
-@cindex @code{ms} macros, cover page
-@cindex cover page macros, [@code{ms}]
-
-Use the following macros to create a cover page for your document in
-the order shown.
-
-@Defmac {RP, [@code{no}], ms}
-Specifies the report format for your document. The report format
-creates a separate cover page. The default action (no @code{RP}
-macro) is to print a subset of the cover page on page@tie{}1 of your
-document.
-
-If you use the word @code{no} as an optional argument, @code{groff}
-prints a title page but does not repeat any of the title page
-information (title, author, abstract, etc.@:) on page@tie{}1 of the
-document.
-@endDefmac
-
-@Defmac {P1, , ms}
-(P-one) Prints the header on page@tie{}1. The default is to suppress
-the header.
-@endDefmac
-
-@Defmac {DA, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) and in the footers. This is the
-default for @code{nroff}.
-@endDefmac
-
-@Defmac {ND, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) but not in the footers. This is
-the default for @code{troff}.
-@endDefmac
-
-@Defmac {TL, , ms}
-Specifies the document title. @code{groff} collects text following
-the @code{TL} macro into the title, until reaching the author name or
-abstract.
-@endDefmac
-
-@Defmac {AU, , ms}
-Specifies the author's name, which appears on the line (or lines)
-immediately following. You can specify multiple authors as follows:
-
-@Example
-.AU
-John Doe
-.AI
-University of West Bumblefuzz
-.AU
-Martha Buck
-.AI
-Monolithic Corporation
-
-...
-@endExample
-@endDefmac
-
-@Defmac {AI, , ms}
-Specifies the author's institution. You can specify multiple
-institutions in the same way that you specify multiple authors.
-@endDefmac
-
-@Defmac {AB, [@code{no}], ms}
-Begins the abstract. The default is to print the word
-@acronym{ABSTRACT}, centered and in italics, above the text of the
-abstract. The word @code{no} as an optional argument suppresses this
-heading.
-@endDefmac
-
-@Defmac {AE, , ms}
-Ends the abstract.
-@endDefmac
-
-The following is example mark-up for a title page.
-@cindex title page, example markup
-@cindex example markup, title page
-
-@Example
-@cartouche
-.RP
-.TL
-The Inevitability of Code Bloat
-in Commercial and Free Software
-.AU
-J. Random Luser
-.AI
-University of West Bumblefuzz
-.AB
-This report examines the long-term growth
-of the code bases in two large, popular software
-packages; the free Emacs and the commercial
-Microsoft Word.
-While differences appear in the type or order
-of features added, due to the different
-methodologies used, the results are the same
-in the end.
-.PP
-The free software approach is shown to be
-superior in that while free software can
-become as bloated as commercial offerings,
-free software tends to have fewer serious
-bugs and the added features are in line with
-user demand.
-.AE
-
-... the rest of the paper follows ...
-@end cartouche
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
-@subsection Body text
-@cindex @code{ms} macros, body text
-
-This section describes macros used to mark up the body of your
-document. Examples include paragraphs, sections, and other groups.
-
-@menu
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
-@subsubsection Paragraphs
-@cindex @code{ms} macros, paragraph handling
-
-The following paragraph types are available.
-
-@DefmacList {PP, , ms}
-@DefmacListEnd {LP, , ms}
-Sets a paragraph with an initial indentation.
-@endDefmac
-
-@Defmac {QP, , ms}
-Sets a paragraph that is indented at both left and right margins. The
-effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
-The next paragraph or heading returns margins to normal.
-@endDefmac
-
-@Defmac {XP, , ms}
-Sets a paragraph whose lines are indented, except for the first line.
-This is a Berkeley extension.
-@endDefmac
-
-The following markup uses all four paragraph macros.
-
-@Example
-@cartouche
-.NH 2
-Cases used in the study
-.LP
-The following software and versions were
-considered for this report.
-.PP
-For commercial software, we chose
-.B "Microsoft Word for Windows" ,
-starting with version 1.0 through the
-current version (Word 2000).
-.PP
-For free software, we chose
-.B Emacs ,
-from its first appearance as a standalone
-editor through the current version (v20).
-See [Bloggs 2002] for details.
-.QP
-Franklin's Law applied to software:
-software expands to outgrow both
-RAM and disk space over time.
-.LP
-Bibliography:
-.XP
-Bloggs, Joseph R.,
-.I "Everyone's a Critic" ,
-Underground Press, March 2002.
-A definitive work that answers all questions
-and criticisms about the quality and usability of
-free software.
-@end cartouche
-@endExample
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-@c ---------------------------------------------------------------------
-
-@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
-@subsubsection Headings
-@cindex @code{ms} macros, headings
-
-Use headings to create a hierarchical structure for your document.
-The @file{ms} macros print headings in @strong{bold}, using the same
-font family and point size as the body text.
-
-The following describes the heading macros:
-
-@DefmacList {NH, @Var{curr-level}, ms}
-@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
-Numbered heading. The argument is either a numeric argument to
-indicate the level of the heading, or the letter@tie{}@code{S}
-followed by numeric arguments to set the heading level explicitly.
-
-If you specify heading levels out of sequence, such as invoking
-@samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on
-standard error.
-@endDefmac
-
-@DefstrList {SN, ms}
-@DefstrItem {SN-DOT, ms}
-@DefstrListEnd {SN-NO-DOT, ms}
-After invocation of @code{NH}, the assigned section number is made
-available in the strings @code{SN-DOT} (exactly as it appears in the
-printed section heading) and @code{SN-NO-DOT} (with the final period
-omitted). The string @code{SN} is also defined, as an alias for
-@code{SN-DOT}; if preferred, you may redefine it as an alias for
-@code{SN-NO-DOT}, by including the initialization
-
-@Example
-.ds SN-NO-DOT
-.als SN SN-NO-DOT
-@endExample
-
-@noindent
-@strong{before} your first use of @code{NH}, or simply
-
-@Example
-.als SN SN-NO-DOT
-@endExample
-
-@noindent
-@strong{after} your first use of @code{NH}.
-@endDefstr
-
-@Defmac {SH, [@Var{match-level}], ms}
-Unnumbered subheading.
-
-The optional @var{match-level} argument is a GNU extension. It is a
-number indicating the level of the heading, in a manner analogous to
-the @var{curr-level} argument to @code{.NH}. Its purpose is to match
-the point size, at which the heading is printed, to the size of a
-numbered heading at the same level, when the @code{GROWPS} and
-@code{PSINCR} heading size adjustment mechanism is in effect.
-@xref{ms Document Control Registers}.
-@endDefmac
-
-The @code{HORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{NH} and @code{SH} macros, to
-inhibit the printing of orphaned section headings at the bottom of any
-page.
-
-@c ---------------------------------------------------------------------
-
-@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
-@subsubsection Highlighting
-@cindex @code{ms} macros, highlighting
-
-The @file{ms} macros provide a variety of methods to highlight or
-emphasize text:
-
-@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @strong{bold type}. If you specify a
-second argument, @code{groff} prints it in the previous font after the
-bold text, with no intervening space (this allows you to set
-punctuation after the highlighted text without highlighting the
-punctuation). Similarly, it prints the third argument (if any) in the
-previous font @strong{before} the first argument. For example,
-
-@Example
-.B foo ) (
-@endExample
-
-prints (@strong{foo}).
-
-If you give this macro no arguments, @code{groff} prints all text
-following in bold until the next highlighting, paragraph, or heading
-macro.
-@endDefmac
-
-@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in roman (or regular) type. It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @emph{italic type}. It operates similarly
-to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in a @code{constant width face}. It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in bold italic type. It operates similarly to
-the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BX, [@Var{txt}], ms}
-Prints its argument and draws a box around it. If you want to box a
-string that contains spaces, use a digit-width space (@code{\0}).
-@endDefmac
-
-@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
-Prints its first argument with an underline. If you specify a second
-argument, @code{groff} prints it in the previous font after the
-underlined text, with no intervening space.
-@endDefmac
-
-@Defmac {LG, , ms}
-Prints all text following in larger type (two points larger than the
-current point size) until the next font size, highlighting, paragraph,
-or heading macro. You can specify this macro multiple times to
-enlarge the point size as needed.
-@endDefmac
-
-@Defmac {SM, , ms}
-Prints all text following in smaller type (two points smaller than the
-current point size) until the next type size, highlighting, paragraph,
-or heading macro. You can specify this macro multiple times to reduce
-the point size as needed.
-@endDefmac
-
-@Defmac {NL, , ms}
-Prints all text following in the normal point size (that is, the value
-of the @code{PS} register).
-@endDefmac
-
-@DefstrList {@Lbrace{}, ms}
-@DefstrListEnd {@Rbrace{}, ms}
-Text enclosed with @code{\*@{} and @code{\*@}} is printed as a
-superscript.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Lists in ms, Indentation values in ms, Highlighting in ms, ms Body Text
-@subsubsection Lists
-@cindex @code{ms} macros, lists
-
-The @code{IP} macro handles duties for all lists.
-
-@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
-The @var{marker} is usually a bullet glyph (@code{\[bu]}) for
-unordered lists, a number (or auto-incrementing number register) for
-numbered lists, or a word or phrase for indented (glossary-style)
-lists.
-
-The @var{width} specifies the indentation for the body of each list
-item; its default unit is @samp{n}. Once specified, the indentation
-remains the same for all list items in the document until specified
-again.
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{IP} macro, to inhibit the
-printing of orphaned list markers at the bottom of any page.
-@endDefmac
-
-The following is an example of a bulleted list.
-@cindex example markup, bulleted list [@code{ms}]
-@cindex bulleted list, example markup [@code{ms}]
-
-@Example
-A bulleted list:
-.IP \[bu] 2
-lawyers
-.IP \[bu]
-guns
-.IP \[bu]
-money
-@endExample
-
-Produces:
-
-@Example
-A bulleted list:
-
-o lawyers
-
-o guns
-
-o money
-@endExample
-
-The following is an example of a numbered list.
-@cindex example markup, numbered list [@code{ms}]
-@cindex numbered list, example markup [@code{ms}]
-
-@Example
-.nr step 1 1
-A numbered list:
-.IP \n[step] 3
-lawyers
-.IP \n+[step]
-guns
-.IP \n+[step]
-money
-@endExample
-
-Produces:
-
-@Example
-A numbered list:
-
-1. lawyers
-
-2. guns
-
-3. money
-@endExample
-
-Note the use of the auto-incrementing number register in this example.
-
-The following is an example of a glossary-style list.
-@cindex example markup, glossary-style list [@code{ms}]
-@cindex glossary-style list, example markup [@code{ms}]
-
-@Example
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-Firearms, preferably
-large-caliber.
-.IP money
-Gotta pay for those
-lawyers and guns!
-@endExample
-
-Produces:
-
-@Example
-A glossary-style list:
-
-lawyers
- Two or more attorneys.
-
-guns Firearms, preferably large-caliber.
-
-money
- Gotta pay for those lawyers and guns!
-@endExample
-
-In the last example, the @code{IP} macro places the definition on the
-same line as the term if it has enough space; otherwise, it breaks to
-the next line and starts the definition below the term. This may or
-may not be the effect you want, especially if some of the definitions
-break and some do not. The following examples show two possible ways
-to force a break.
-
-The first workaround uses the @code{br} request to force a break after
-printing the term or label.
-
-@Example
-@cartouche
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-.br
-Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@end cartouche
-@endExample
-
-The second workaround uses the @code{\p} escape to force the break.
-Note the space following the escape; this is important. If you omit
-the space, @code{groff} prints the first word on the same line as the
-term or label (if it fits) @strong{then} breaks the line.
-
-@Example
-@cartouche
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-\p Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@end cartouche
-@endExample
-
-To set nested lists, use the @code{RS} and @code{RE} macros.
-@xref{Indentation values in ms}, for more information.
-@cindex @code{ms} macros, nested lists
-@cindex nested lists [@code{ms}]
-
-For example:
-
-@Example
-@cartouche
-.IP \[bu] 2
-Lawyers:
-.RS
-.IP \[bu]
-Dewey,
-.IP \[bu]
-Cheatham,
-.IP \[bu]
-and Howe.
-.RE
-.IP \[bu]
-Guns
-@end cartouche
-@endExample
-
-Produces:
-
-@Example
-o Lawyers:
-
- o Dewey,
-
- o Cheatham,
-
- o and Howe.
-
-o Guns
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text
-@subsubsection Indentation values
-
-In many situations, you may need to indentation a section of text
-while still wrapping and filling. @xref{Lists in ms}, for an example
-of nested lists.
-
-@DefmacList {RS, , ms}
-@DefmacListEnd {RE, , ms}
-These macros begin and end an indented section. The @code{PI}
-register controls the amount of indentation, allowing the indented
-text to line up under hanging and indented paragraphs.
-@endDefmac
-
-@xref{ms Displays and Keeps}, for macros to indentation and turn off
-filling.
-
-@c ---------------------------------------------------------------------
-
-@node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text
-@subsubsection Tab Stops
-
-Use the @code{ta} request to define tab stops as needed. @xref{Tabs
-and Fields}.
-
-@Defmac{TA, , ms}
-Use this macro to reset the tab stops to the default for @file{ms}
-(every 5n). You can redefine the @code{TA} macro to create a
-different set of default tab stops.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
-@subsubsection Displays and keeps
-@cindex @code{ms} macros, displays
-@cindex @code{ms} macros, keeps
-@cindex keeps [@code{ms}]
-@cindex displays [@code{ms}]
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
-Displays turn off filling, so lines of code are displayed as-is
-without inserting @code{br} requests in between each line. Displays
-can be @dfn{kept} on a single page, or allowed to break across pages.
-
-@DefmacList {DS, @t{L}, ms}
-@DefmacItem {LD, , ms}
-@DefmacListEnd {DE, , ms}
-Left-justified display. The @samp{.DS L} call generates a page break,
-if necessary, to keep the entire display on one page. The @code{LD}
-macro allows the display to break across pages. The @code{DE} macro
-ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{I}, ms}
-@DefmacItem {ID, , ms}
-@DefmacListEnd {DE, , ms}
-Indents the display as defined by the @code{DI} register. The
-@samp{.DS I} call generates a page break, if necessary, to keep the
-entire display on one page. The @code{ID} macro allows the display to
-break across pages. The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{B}, ms}
-@DefmacItem {BD, , ms}
-@DefmacListEnd {DE, , ms}
-Sets a block-centered display: the entire display is left-justified,
-but indented so that the longest line in the display is centered on
-the page. The @samp{.DS B} call generates a page break, if necessary,
-to keep the entire display on one page. The @code{BD} macro allows
-the display to break across pages. The @code{DE} macro ends the
-display.
-@endDefmac
-
-@DefmacList {DS, @t{C}, ms}
-@DefmacItem {CD, , ms}
-@DefmacListEnd {DE, , ms}
-Sets a centered display: each line in the display is centered. The
-@samp{.DS C} call generates a page break, if necessary, to keep the
-entire display on one page. The @code{CD} macro allows the display to
-break across pages. The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{R}, ms}
-@DefmacItem {RD, , ms}
-@DefmacListEnd {DE, , ms}
-Right-justifies each line in the display. The @samp{.DS R} call
-generates a page break, if necessary, to keep the entire display on
-one page. The @code{RD} macro allows the display to break across
-pages. The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {Ds, , ms}
-@DefmacListEnd {De, , ms}
-These two macros were formerly provided as aliases for @code{DS} and
-@code{DE}, respectively. They have been removed, and should no longer
-be used. The original implementations of @code{DS} and @code{DE} are
-retained, and should be used instead. X11 documents which actually
-use @code{Ds} and @code{De} always load a specific macro file from the
-X11 distribution (@file{macros.t}) which provides proper definitions
-for the two macros.
-@endDefmac
-
-On occasion, you may want to @dfn{keep} other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following. The @file{ms} macros provide the @code{KS} and @code{KE}
-macros for this purpose.
-
-@DefmacList {KS, , ms}
-@DefmacListEnd {KE, , ms}
-The @code{KS} macro begins a block of text to be kept on a single
-page, and the @code{KE} macro ends the block.
-@endDefmac
-
-@DefmacList {KF, , ms}
-@DefmacListEnd {KE, , ms}
-Specifies a @dfn{floating keep}; if the keep cannot fit on the current
-page, @code{groff} holds the contents of the keep and allows text
-following the keep (in the source file) to fill in the remainder of
-the current page. When the page breaks, whether by an explicit
-@code{bp} request or by reaching the end of the page, @code{groff}
-prints the floating keep at the top of the new page. This is useful
-for printing large graphics or tables that do not need to appear
-exactly where specified.
-@endDefmac
-
-You can also use the @code{ne} request to force a page break if there
-is not enough vertical space remaining on the page.
-
-Use the following macros to draw a box around a section of text (such
-as a display).
-
-@DefmacList {B1, , ms}
-@DefmacListEnd {B2, , ms}
-Marks the beginning and ending of text that is to have a box drawn
-around it. The @code{B1} macro begins the box; the @code{B2} macro
-ends it. Text in the box is automatically placed in a diversion
-(keep).
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
-@subsubsection Tables, figures, equations, and references
-@cindex @code{ms} macros, tables
-@cindex @code{ms} macros, figures
-@cindex @code{ms} macros, equations
-@cindex @code{ms} macros, references
-@cindex tables [@code{ms}]
-@cindex figures [@code{ms}]
-@cindex equations [@code{ms}]
-@cindex references [@code{ms}]
-
-The @file{ms} macros support the standard @code{groff} preprocessors:
-@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
-@pindex tbl
-@pindex pic
-@pindex eqn
-@pindex refer
-You mark text meant for preprocessors by enclosing it
-in pairs of tags as follows.
-
-@DefmacList {TS, [@code{H}], ms}
-@DefmacListEnd {TE, , ms}
-Denotes a table, to be processed by the @code{tbl} preprocessor. The
-optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to
-create a running header with the information up to the @code{TH}
-macro. @code{groff} prints the header at the beginning of the table;
-if the table runs onto another page, @code{groff} prints the header on
-the next page as well.
-@endDefmac
-
-@DefmacList {PS, , ms}
-@DefmacListEnd {PE, , ms}
-Denotes a graphic, to be processed by the @code{pic} preprocessor.
-You can create a @code{pic} file by hand, using the @acronym{AT&T}
-@code{pic} manual available on the Web as a reference, or by using a
-graphics program such as @code{xfig}.
-@endDefmac
-
-@DefmacList {EQ, [@Var{align}], ms}
-@DefmacListEnd {EN, , ms}
-Denotes an equation, to be processed by the @code{eqn} preprocessor.
-The optional @var{align} argument can be @code{C}, @code{L},
-or@tie{}@code{I} to center (the default), left-justify, or indent the
-equation.
-@endDefmac
-
-@DefmacList {[, , ms}
-@DefmacListEnd {], , ms}
-Denotes a reference, to be processed by the @code{refer} preprocessor.
-The @acronym{GNU} @cite{refer(1)} man page provides a comprehensive
-reference to the preprocessor and the format of the bibliographic
-database.
-@endDefmac
-
-@menu
-* Example multi-page table::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
-@subsubsection An example multi-page table
-@cindex example markup, multi-page table [@code{ms}]
-@cindex multi-page table, example markup [@code{ms}]
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-@Example
-@cartouche
-.TS H
-allbox expand;
-cb | cb .
-Text ...of heading...
-_
-.TH
-.T&
-l | l .
-... the rest of the table follows...
-.CW
-.TE
-@end cartouche
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Footnotes, , Example multi-page table, ms Body Text
-@subsubsection Footnotes
-@cindex @code{ms} macros, footnotes
-@cindex footnotes [@code{ms}]
-
-The @file{ms} macro package has a flexible footnote system. You can
-specify either numbered footnotes or symbolic footnotes (that is,
-using a marker such as a dagger symbol).
-
-@Defstr {*, ms}
-Specifies the location of a numbered footnote marker in the text.
-@endDefesc
-
-@DefmacList {FS, , ms}
-@DefmacListEnd {FE, , ms}
-Specifies the text of the footnote. The default action is to create a
-numbered footnote; you can create a symbolic footnote by specifying a
-@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the
-body text and as an argument to the @code{FS} macro, followed by the
-text of the footnote and the @code{FE} macro.
-@endDefmac
-
-You can control how @code{groff} prints footnote numbers by changing
-the value of the @code{FF} register. @xref{ms Document Control
-Registers}.
-
-@cindex footnotes, and keeps [@code{ms}]
-@cindex keeps, and footnotes [@code{ms}]
-@cindex footnotes, and displays [@code{ms}]
-@cindex displays, and footnotes [@code{ms}]
-Footnotes can be safely used within keeps and displays, but you should
-avoid using numbered footnotes within floating keeps. You can set a
-second @code{\**} marker between a @code{\**} and its corresponding
-@code{.FS} entry; as long as each @code{FS} macro occurs @emph{after}
-the corresponding @code{\**} and the occurrences of @code{.FS} are in
-the same order as the corresponding occurrences of @code{\**}.
-
-@c ---------------------------------------------------------------------
-
-@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
-@subsection Page layout
-@cindex @code{ms} macros, page layout
-@cindex page layout [@code{ms}]
-
-The default output from the @file{ms} macros provides a minimalist
-page layout: it prints a single column, with the page number centered
-at the top of each page. It prints no footers.
-
-You can change the layout by setting the proper number registers and
-strings.
-
-@menu
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
-@subsubsection Headers and footers
-@cindex @code{ms} macros, headers
-@cindex @code{ms} macros, footers
-@cindex headers [@code{ms}]
-@cindex footers [@code{ms}]
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
-@DefstrList {LH, ms}
-@DefstrItem {CH, ms}
-@DefstrListEnd {RH, ms}
-Sets the left, center, and right headers.
-@endDefstr
-
-@DefstrList {LF, ms}
-@DefstrItem {CF, ms}
-@DefstrListEnd {RF, ms}
-Sets the left, center, and right footers.
-@endDefstr
-
-For documents that need different information printed in the even and
-odd pages, use the following macros:
-
-@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItem {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItem {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacListEnd {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-The @code{OH} and @code{EH} macros define headers for the odd and even
-pages; the @code{OF} and @code{EF} macros define footers for the odd
-and even pages. This is more flexible than defining the individual
-strings.
-
-You can replace the quote (@code{'}) marks with any character not
-appearing in the header or footer text.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
-@subsubsection Margins
-@cindex @code{ms} macros, margins
-
-You control margins using a set of number registers. @xref{ms
-Document Control Registers}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
-@subsubsection Multiple columns
-@cindex @code{ms} macros, multiple columns
-@cindex multiple columns [@code{ms}]
-
-The @file{ms} macros can set text in as many columns as will
-reasonably fit on the page. The following macros are available; all
-of them force a page break if a multi-column mode is already set.
-However, if the current mode is single-column, starting a multi-column
-mode does @emph{not} force a page break.
-
-@Defmac {1C, , ms}
-Single-column mode.
-@endDefmac
-
-@Defmac {2C, , ms}
-Two-column mode.
-@endDefmac
-
-@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
-Multi-column mode. If you specify no arguments, it is equivalent to
-the @code{2C} macro. Otherwise, @var{width} is the width of each
-column and @var{gutter} is the space between columns. The
-@code{MINGW} number register controls the default gutter width.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
-@subsubsection Creating a table of contents
-@cindex @code{ms} macros, creating table of contents
-@cindex table of contents, creating [@code{ms}]
-
-The facilities in the @file{ms} macro package for creating a table of
-contents are semi-automated at best. Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in @code{XS} and @code{XE} macros.
-
-@DefmacList {XS, [@Var{page}], ms}
-@DefmacItem {XA, [@Var{page}], ms}
-@DefmacListEnd {XE, , ms}
-These macros define a table of contents or an individual entry in the
-table of contents, depending on their use. The macros are very
-simple; they cannot indent a heading based on its level. The easiest
-way to work around this is to add tabs to the table of contents
-string. The following is an example:
-
-@Example
-@cartouche
-.NH 1
-Introduction
-.XS
-Introduction
-.XE
-.LP
-...
-.CW
-.NH 2
-Methodology
-.XS
-Methodology
-.XE
-.LP
-...
-@end cartouche
-@endExample
-
-You can manually create a table of contents by beginning with the
-@code{XS} macro for the first entry, specifying the page number for
-that entry as the argument to @code{XS}. Add subsequent entries using
-the @code{XA} macro, specifying the page number for that entry as the
-argument to @code{XA}. The following is an example:
-
-@Example
-@cartouche
-.XS 1
-Introduction
-.XA 2
-A Brief History of the Universe
-.XA 729
-Details of Galactic Formation
-...
-.XE
-@end cartouche
-@endExample
-@endDefmac
-
-@Defmac {TC, [@code{no}], ms}
-Prints the table of contents on a new page, setting the page number
-to@tie{}@strong{i} (Roman lowercase numeral one). You should usually
-place this macro at the end of the file, since @code{groff} is a
-single-pass formatter and can only print what has been collected up to
-the point that the @code{TC} macro appears.
-
-The optional argument @code{no} suppresses printing the title
-specified by the string register @code{TOC}.
-@endDefmac
-
-@Defmac{PX, [@code{no}], ms}
-Prints the table of contents on a new page, using the current page
-numbering sequence. Use this macro to print a manually-generated
-table of contents at the beginning of your document.
-
-The optional argument @code{no} suppresses printing the title
-specified by the string register @code{TOC}.
-@endDefmac
-
-The @cite{Groff and Friends HOWTO} includes a @code{sed} script that
-automatically inserts @code{XS} and @code{XE} macro entries after each
-heading in a document.
-
-Altering the @code{NH} macro to automatically build the table of
-contents is perhaps initially more difficult, but would save a great
-deal of time in the long run if you use @file{ms} regularly.
-
-@c ---------------------------------------------------------------------
-
-@node ms Strings and Special Characters, , ms TOC, ms Page Layout
-@subsubsection Strings and Special Characters
-@cindex @code{ms} macros, strings
-@cindex @code{ms} macros, special characters
-@cindex @code{ms} macros, accent marks
-@cindex accent marks [@code{ms}]
-@cindex special characters [@code{ms}]
-@cindex strings [@code{ms}]
-
-The @file{ms} macros provide the following predefined strings. You
-can change the string definitions to help in creating documents in
-languages other than English.
-
-@Defstr {REFERENCES, ms}
-Contains the string printed at the beginning of the references
-(bibliography) page. The default is @samp{References}.
-@endDefstr
-
-@Defstr {ABSTRACT, ms}
-Contains the string printed at the beginning of the abstract. The
-default is @samp{ABSTRACT}.
-@endDefstr
-
-@Defstr {TOC, ms}
-Contains the string printed at the beginning of the table of contents.
-@endDefstr
-
-@DefstrList {MONTH1, ms}
-@DefstrItem {MONTH2, ms}
-@DefstrItem {MONTH3, ms}
-@DefstrItem {MONTH4, ms}
-@DefstrItem {MONTH5, ms}
-@DefstrItem {MONTH6, ms}
-@DefstrItem {MONTH7, ms}
-@DefstrItem {MONTH8, ms}
-@DefstrItem {MONTH9, ms}
-@DefstrItem {MONTH10, ms}
-@DefstrItem {MONTH11, ms}
-@DefstrListEnd {MONTH12, ms}
-Prints the full name of the month in dates. The default is
-@samp{January}, @samp{February}, etc.
-@endDefstr
-
-The following special characters are available@footnote{For an
-explanation what special characters are see @ref{Special
-Characters}.}:
-
-@Defstr {-, ms}
-Prints an em dash.
-@endDefstr
-
-@DefstrList {Q, ms}
-@DefstrListEnd {U, ms}
-Prints typographer's quotes in troff, and plain quotes in nroff.
-@code{\*Q} is the left quote and @code{\*U} is the right quote.
-@endDefstr
-
-Improved accent marks are available in the @file{ms} macros.
-
-@Defmac {AM, , ms}
-Specify this macro at the beginning of your document to enable
-extended accent marks and special characters. This is a Berkeley
-extension.
-
-To use the accent marks, place them @strong{after} the character being
-accented.
-
-Note that groff's native support for accents is superior to the
-following definitions.
-@endDefmac
-
-The following accent marks are available after invoking the @code{AM}
-macro:
-
-@Defstr {\', ms}
-Acute accent.
-@endDefstr
-
-@Defstr {\`, ms}
-Grave accent.
-@endDefstr
-
-@Defstr {^, ms}
-Circumflex.
-@endDefstr
-
-@Defstr {\,, ms}
-Cedilla.
-@endDefstr
-
-@Defstr {~, ms}
-Tilde.
-@endDefstr
-
-@deffn String @t{\*[:]}
-@ifnotinfo
-@stindex : @r{[}ms@r{]}
-@end ifnotinfo
-@ifinfo
-@stindex \*[@r{<colon>}] @r{[}ms@r{]}
-@end ifinfo
-Umlaut.
-@end deffn
-
-@Defstr {v, ms}
-Hacek.
-@endDefstr
-
-@Defstr {_, ms}
-Macron (overbar).
-@endDefstr
-
-@Defstr {., ms}
-Underdot.
-@endDefstr
-
-@Defstr {o, ms}
-Ring above.
-@endDefstr
-
-The following are standalone characters available after invoking the
-@code{AM} macro:
-
-@Defstr {?, ms}
-Upside-down question mark.
-@endDefstr
-
-@Defstr {!, ms}
-Upside-down exclamation point.
-@endDefstr
-
-@Defstr {8, ms}
-German ß ligature.
-@endDefstr
-
-@Defstr {3, ms}
-Yogh.
-@endDefstr
-
-@Defstr {Th, ms}
-Uppercase thorn.
-@endDefstr
-
-@Defstr {th, ms}
-Lowercase thorn.
-@endDefstr
-
-@Defstr {D-, ms}
-Uppercase eth.
-@endDefstr
-
-@Defstr {d-, ms}
-Lowercase eth.
-@endDefstr
-
-@Defstr {q, ms}
-Hooked o.
-@endDefstr
-
-@Defstr {ae, ms}
-Lowercase æ ligature.
-@endDefstr
-
-@Defstr {Ae, ms}
-Uppercase Æ ligature.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Differences from AT&T ms, Naming Conventions, ms Page Layout, ms
-@subsection Differences from @acronym{AT&T} @file{ms}
-@cindex @code{ms} macros, differences from @acronym{AT&T}
-@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
-
-This section lists the (minor) differences between the @code{groff
--ms} macros and @acronym{AT&T} @code{troff -ms} macros.
-
-@itemize @bullet
-@item
-The internals of @code{groff -ms} differ from the internals of
-@acronym{AT&T} @code{troff -ms}. Documents that depend upon
-implementation details of @acronym{AT&T} @code{troff -ms} may not
-format properly with @code{groff -ms}.
-
-@item
-The general error-handling policy of @code{groff -ms} is to detect and
-report errors, rather than silently to ignore them.
-
-@item
-@code{groff -ms} does not work in compatibility mode (this is, with
-the @option{-C} option).
-
-@item
-There is no special support for typewriter-like devices.
-
-@item
-@code{groff -ms} does not provide cut marks.
-
-@item
-Multiple line spacing is not supported. Use a larger vertical spacing
-instead.
-
-@item
-Some @acronym{UNIX} @code{ms} documentation says that the @code{CW}
-and @code{GW} number registers can be used to control the column width
-and gutter width, respectively. These number registers are not used in
-@code{groff -ms}.
-
-@item
-Macros that cause a reset (paragraphs, headings, etc.@:) may change
-the indentation. Macros that change the indentation do not increment
-or decrement the indentation, but rather set it absolutely. This can
-cause problems for documents that define additional macros of their
-own. The solution is to use not the @code{in} request but instead the
-@code{RS} and @code{RE} macros.
-
-@item
-To make @code{groff -ms} use the default page offset (which also
-specifies the left margin), the @code{PO} register must stay undefined
-until the first @file{-ms} macro is evaluated. This implies that
-@code{PO} should not be used early in the document, unless it is
-changed also: Remember that accessing an undefined register
-automatically defines it.
-@end itemize
-
-@Defmpreg {GS, ms}
-This number register is set to@tie{}1 by the @code{groff -ms} macros,
-but it is not used by the @code{AT&T} @code{troff -ms} macros.
-Documents that need to determine whether they are being formatted with
-@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this
-number register.
-@endDefmpreg
-
-@menu
-* Missing ms Macros::
-* Additional ms Macros::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
-@subsubsection @code{troff} macros not appearing in @code{groff}
-
-Macros missing from @code{groff -ms} are cover page macros specific to
-Bell Labs and Berkeley. The macros known to be missing are:
-
-@table @code
-@item .TM
-Technical memorandum; a cover sheet style
-
-@item .IM
-Internal memorandum; a cover sheet style
-
-@item .MR
-Memo for record; a cover sheet style
-
-@item .MF
-Memo for file; a cover sheet style
-
-@item .EG
-Engineer's notes; a cover sheet style
-
-@item .TR
-Computing Science Tech Report; a cover sheet style
-
-@item .OK
-Other keywords
-
-@item .CS
-Cover sheet information
-
-@item .MH
-A cover sheet macro
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Additional ms Macros, , Missing ms Macros, Differences from AT&T ms
-@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
-
-The @code{groff -ms} macros have a few minor extensions
-compared to the @acronym{AT&T} @code{troff -ms} macros.
-
-@Defmac {AM, , ms}
-Improved accent marks.
-@xref{ms Strings and Special Characters}, for details.
-@endDefmac
-
-@Defmac {DS, @t{I}, ms}
-Indented display.
-The default behavior of @acronym{AT&T} @code{troff -ms}
-was to indent; the @code{groff} default prints displays
-flush left with the body text.
-@endDefmac
-
-@Defmac {CW, , ms}
-Print text in @code{constant width} (Courier) font.
-@endDefmac
-
-@Defmac {IX, , ms}
-Indexing term (printed on standard error).
-You can write a script to capture and process an index
-generated in this manner.
-@endDefmac
-
-The following additional number registers
-appear in @code{groff -ms}:
-
-@Defmpreg {MINGW, ms}
-Specifies a minimum space
-between columns (for multi-column output); this takes the
-place of the @code{GW} register that was documented but apparently
-not implemented in @acronym{AT&T} @code{troff}.
-@endDefmpreg
-
-Several new string registers are available as well.
-You can change these to handle (for example) the local language.
-@xref{ms Strings and Special Characters}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node Naming Conventions, , Differences from AT&T ms, ms
-@subsection Naming Conventions
-@cindex @code{ms} macros, naming conventions
-@cindex naming conventions, @code{ms} macros
-
-The following conventions are used for names of macros, strings and
-number registers. External names available to documents that use the
-@code{groff -ms} macros contain only uppercase letters and digits.
-
-Internally the macros are divided into modules; naming conventions are
-as follows:
-
-@itemize @bullet
-@item
-Names used only within one module are of the form
-@var{module}@code{*}@var{name}.
-
-@item
-Names used outside the module in which they are defined are of the
-form @var{module}@code{@@}@var{name}.
-
-@item
-Names associated with a particular environment are of the form
-@var{environment}@code{:}@var{name}; these are used only within the
-@code{par} module.
-
-@item
-@var{name} does not have a module prefix.
-
-@item
-Constructed names used to implement arrays are of the form
-@var{array}@code{!}@var{index}.
-@end itemize
-
-Thus the groff ms macros reserve the following names:
-
-@itemize @bullet
-@item
-Names containing the characters @code{*}, @code{@@},
-and@tie{}@code{:}.
-
-@item
-Names containing only uppercase letters and digits.
-@end itemize
-
-
-@c =====================================================================
-
-@node me, mm, ms, Macro Packages
-@section @file{me}
-@cindex @code{me} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @file{meintro.me} and @file{meref.me} documents in
-groff's @file{doc} directory.
-
-
-@c =====================================================================
-
-@node mm, , me, Macro Packages
-@section @file{mm}
-@cindex @code{mm} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at
-the command line).
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node gtroff Reference, Preprocessors, Macro Packages, Top
-@chapter @code{gtroff} Reference
-@cindex reference, @code{gtroff}
-@cindex @code{gtroff}, reference
-
-This chapter covers @strong{all} of the facilities of @code{gtroff}.
-Users of macro packages may skip it if not interested in details.
-
-
-@menu
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-@end menu
-
-
-@c =====================================================================
-
-@node Text, Measurements, gtroff Reference, gtroff Reference
-@section Text
-@cindex text, @code{gtroff} processing
-
-@code{gtroff} input files contain text with control commands
-interspersed throughout. But, even without control codes, @code{gtroff}
-still does several things with the input text:
-
-@itemize @bullet
-@item
-filling and adjusting
-
-@item
-adding additional space after sentences
-
-@item
-hyphenating
-
-@item
-inserting implicit line breaks
-@end itemize
-
-@menu
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Filling and Adjusting, Hyphenation, Text, Text
-@subsection Filling and Adjusting
-@cindex filling
-@cindex adjusting
-
-When @code{gtroff} reads text, it collects words from the input and fits
-as many of them together on one output line as it can. This is known as
-@dfn{filling}.
-
-@cindex leading spaces
-@cindex spaces, leading and trailing
-@cindex extra spaces
-@cindex trailing spaces
-Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust}
-it. This means it widens the spacing between words until the text
-reaches the right margin (in the default adjustment mode). Extra spaces
-between words are preserved, but spaces at the end of lines are ignored.
-Spaces at the front of a line cause a @dfn{break} (breaks are
-explained in @ref{Implicit Line Breaks}).
-
-@xref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Hyphenation, Sentences, Filling and Adjusting, Text
-@subsection Hyphenation
-@cindex hyphenation
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, @code{gtroff} hyphenates words so
-that it can justify lines without inserting too much space between
-words. It uses an internal hyphenation algorithm (a simplified version
-of the algorithm used within @TeX{}) to indicate which words can be
-hyphenated and how to do so. When a word is hyphenated, the first part
-of the word is added to the current filled line being output (with
-an attached hyphen), and the other portion is added to the next
-line to be filled.
-
-@xref{Manipulating Hyphenation}.
-
-@c ---------------------------------------------------------------------
-
-@node Sentences, Tab Stops, Hyphenation, Text
-@subsection Sentences
-@cindex sentences
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks. For
-example, the @cite{Chicago typsetting manual} says that a period at the
-end of a sentence should have twice as much space following it as would
-a comma or a period as part of an abbreviation.
-
-@c XXX exact citation of Chicago manual
-
-@cindex sentence space
-@cindex space between sentences
-@cindex french-spacing
-@code{gtroff} does this by flagging certain characters (normally
-@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
-When @code{gtroff} encounters one of these characters at the end of a
-line, it appends a normal space followed by a @dfn{sentence space} in
-the formatted output. (This justifies one of the conventions mentioned
-in @ref{Input Conventions}.)
-
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: @samp{"},
-@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, and @code{\[rq]}.
-
-See the @code{cflags} request in @ref{Using Symbols}, for more details.
-
-@cindex @code{\&}, at end of sentence
-To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append @code{\&}.
-
-@c ---------------------------------------------------------------------
-
-@node Tab Stops, Implicit Line Breaks, Sentences, Text
-@subsection Tab Stops
-@cindex tab stops
-@cindex stops, tabulator
-@cindex tab character
-@cindex character, tabulator
-
-@cindex @acronym{EBCDIC} encoding
-@cindex encoding, @acronym{EBCDIC}
-@code{gtroff} translates @dfn{tabulator characters}, also called
-@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
-@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
-tabulator stop. These tab stops are initially located every half inch
-across the page. Using this, simple tables can be made easily.
-However, it can often be deceptive as the appearance (and width) of the
-text on a terminal and the results from @code{gtroff} can vary greatly.
-
-Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results.
-For example, the following input
-
-@multitable {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3
-@item
-@tab @tab 4 @tab 5
-@end multitable
-
-@noindent
-produces
-
-@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3 @tab @tab 4 @tab 5
-@end multitable
-
-@xref{Tabs and Fields}.
-
-@c ---------------------------------------------------------------------
-
-@node Implicit Line Breaks, Input Conventions, Tab Stops, Text
-@subsection Implicit Line Breaks
-@cindex implicit line breaks
-@cindex implicit breaks of lines
-@cindex line, implicit breaks
-@cindex break, implicit
-@cindex line break
-
-An important concept in @code{gtroff} is the @dfn{break}. When a break
-occurs, @code{gtroff} outputs the partially filled line
-(unjustified), and resumes collecting and filling text on the next output
-line.
-
-@cindex blank line
-@cindex empty line
-@cindex line, blank
-@cindex blank line macro (@code{blm})
-There are several ways to cause a break in @code{gtroff}. A blank
-line not only causes a break, but it also outputs a one-line vertical
-space (effectively a blank line). Note that this behaviour can be
-modified with the blank line macro request @code{blm}.
-@xref{Blank Line Traps}.
-
-@cindex fill mode
-@cindex mode, fill
-A line that begins with a space causes a break and the space is
-output at the beginning of the next line. Note that this space isn't
-adjusted, even in fill mode.
-
-The end of file also causes a break -- otherwise the last line of
-the document may vanish!
-
-Certain requests also cause breaks, implicitly or explicitly. This is
-discussed in @ref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Input Conventions, Input Encodings, Implicit Line Breaks, Text
-@subsection Input Conventions
-@cindex input conventions
-@cindex conventions for input
-
-Since @code{gtroff} does filling automatically, it is traditional in
-@code{groff} not to try and type things in as nicely formatted
-paragraphs. These are some conventions commonly used when typing
-@code{gtroff} text:
-
-@itemize @bullet
-@item
-Break lines after punctuation, particularly at the end of a sentence
-and in other logical places. Keep separate phrases on lines by
-themselves, as entire phrases are often added or deleted when editing.
-
-@item
-Try to keep lines less than 40-60@tie{}characters, to allow space for
-inserting more text.
-
-@item
-Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
-don't try using spaces to get proper indentation).
-@end itemize
-
-@c ---------------------------------------------------------------------
-
-@node Input Encodings, , Input Conventions, Text
-@subsection Input Encodings
-
-Currently, the following input encodings are available.
-
-@table @asis
-@item cp1047
-@cindex encoding, input, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, input encoding
-@cindex input encoding, @acronym{EBCDIC}
-@cindex encoding, input, cp1047
-@cindex cp1047, input encoding
-@cindex input encoding, cp1047
-@cindex IBM cp1047 input encoding
-@pindex cp1047.tmac
-This input encoding works only on @acronym{EBCDIC} platforms (and vice
-versa, the other input encodings don't work with @acronym{EBCDIC}); the
-file @file{cp1047.tmac} is by default loaded at start-up.
-
-@item latin-1
-@cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), input encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), input encoding
-@cindex input encoding, @w{latin-1} (ISO @w{8859-1})
-@pindex latin1.tmac
-This is the default input encoding on non-@acronym{EBCDIC} platforms;
-the file @file{latin1.tmac} is loaded at start-up.
-
-@item latin-2
-@cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
-@cindex @w{latin-2} (ISO @w{8859-2}), input encoding
-@cindex ISO @w{8859-2} (@w{latin-2}), input encoding
-@cindex input encoding, @w{latin-2} (ISO @w{8859-2})
-@pindex latin2.tmac
-To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
-beginning of your document or use @samp{-mlatin2} as a command line
-argument for @code{groff}.
-
-@item latin-9 (latin-0)
-@cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
-@cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
-@cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
-@cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
-@pindex latin9.tmac
-This encoding is intended (at least in Europe) to replace @w{latin-1}
-encoding. The main difference to @w{latin-1} is that @w{latin-9}
-contains the Euro character. To use this encoding, either say
-@w{@samp{.mso latin9.tmac}} at the very beginning of your document or
-use @samp{-mlatin9} as a command line argument for @code{groff}.
-@end table
-
-Note that it can happen that some input encoding characters are not
-available for a particular output device. For example, saying
-
-@Example
-groff -Tlatin1 -mlatin9 ...
-@endExample
-
-@noindent
-will fail if you use the Euro character in the input. Usually, this
-limitation is present only for devices which have a limited set of
-output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
-devices it is usually sufficient to install proper fonts which contain
-the necessary glyphs.
-
-@pindex freeeuro.pfa
-@pindex ec.tmac
-Due to the importance of the Euro glyph in Europe, the groff package now
-comes with a @sc{PostScript} font called @file{freeeuro.pfa} which
-provides various glyph shapes for the Euro. With other words,
-@w{latin-9} encoding is supported for the @option{-Tps} device out of
-the box (@w{latin-2} isn't).
-
-By its very nature, @option{-Tutf8} supports all input encodings;
-@option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
-command line @option{-mec} is used also to load the file @file{ec.tmac}
-(which flips to the EC fonts).
-
-
-@c =====================================================================
-
-@node Measurements, Expressions, Text, gtroff Reference
-@section Measurements
-@cindex measurements
-
-@cindex units of measurement
-@cindex basic unit (@code{u})
-@cindex machine unit (@code{u})
-@cindex measurement unit
-@cindex @code{u} unit
-@cindex unit, @code{u}
-@code{gtroff} (like many other programs) requires numeric parameters to
-specify various measurements. Most numeric parameters@footnote{those
-that specify vertical or horizontal motion or a type size} may have a
-@dfn{measurement unit} attached. These units are specified as a single
-character which immediately follows the number or expression. Each of
-these units are understood, by @code{gtroff}, to be a multiple of its
-@dfn{basic unit}. So, whenever a different measurement unit is
-specified @code{gtroff} converts this into its @dfn{basic units}. This
-basic unit, represented by a @samp{u}, is a device dependent measurement
-which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
-inch. The values may be given as fractional numbers; however,
-fractional basic units are always rounded to integers.
-
-Some of the measurement units are completely independent of any of the
-current settings (e.g.@: type size) of @code{gtroff}.
-
-@table @code
-@item i
-@cindex inch unit (@code{i})
-@cindex @code{i} unit
-@cindex unit, @code{i}
-Inches. An antiquated measurement unit still in use in certain
-backwards countries with incredibly low-cost computer equipment. One
-inch is equal to@tie{}2.54@dmn{cm}.
-
-@item c
-@cindex centimeter unit (@code{c})
-@cindex @code{c} unit
-@cindex unit, @code{c}
-Centimeters. One centimeter is equal to@tie{}0.3937@dmn{in}.
-
-@item p
-@cindex point unit (@code{p})
-@cindex @code{p} unit
-@cindex unit, @code{p}
-Points. This is a typesetter's measurement used for measure type size.
-It is 72@tie{}points to an inch.
-
-@item P
-@cindex pica unit (@code{P})
-@cindex @code{P} unit
-@cindex unit, @code{P}
-Pica. Another typesetting measurement. 6@tie{}Picas to an inch (and
-12@tie{}points to a pica).
-
-@item s
-@itemx z
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@xref{Fractional Type Sizes}, for a discussion of these units.
-
-@item f
-@cindex @code{f} unit
-@cindex unit, @code{f}
-Fractions. Value is 65536.
-@xref{Colors}, for usage.
-@end table
-
-The other measurements understood by @code{gtroff} depend on
-settings currently in effect in @code{gtroff}. These are very useful
-for specifying measurements which should look proper with any size of
-text.
-
-@table @code
-@item m
-@cindex em unit (@code{m})
-@cindex @code{m} unit
-@cindex unit, @code{m}
-Ems. This unit is equal to the current font size in points. So called
-because it is @emph{approximately} the width of the letter@tie{}@samp{m}
-in the current font.
-
-@item n
-@cindex en unit (@code{n})
-@cindex @code{n} unit
-@cindex unit, @code{n}
-Ens. In @code{groff}, this is half of an em.
-
-@item v
-@cindex vertical space unit (@code{v})
-@cindex space, vertical, unit (@code{v})
-@cindex @code{v} unit
-@cindex unit, @code{v}
-Vertical space. This is equivalent to the current line spacing.
-@xref{Sizes}, for more information about this.
-
-@item M
-@cindex @code{M} unit
-@cindex unit, @code{M}
-100ths of an em.
-@end table
-
-@menu
-* Default Units::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Default Units, , Measurements, Measurements
-@subsection Default Units
-@cindex default units
-@cindex units, default
-
-Many requests take a default unit. While this can be helpful at times,
-it can cause strange errors in some expressions. For example, the line
-length request expects em units. Here are several attempts to get a
-line length of 3.5@tie{}inches and their results:
-
-@Example
-3.5i @result{} 3.5i
-7/2 @result{} 0i
-7/2i @result{} 0i
-(7 / 2)u @result{} 0i
-7i/2 @result{} 0.1i
-7i/2u @result{} 3.5i
-@endExample
-
-@noindent
-Everything is converted to basic units first. In the above example it
-is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
-equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}). The value
-7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
-1680@dmn{u}/66@dmn{u} which is 25@dmn{u}, and this is approximately
-0.1@dmn{i}. As can be seen, a scaling indicator after a closing
-parenthesis is simply ignored.
-
-@cindex measurements, specifying safely
-Thus, the safest way to specify measurements is to always
-attach a scaling indicator. If you want to multiply or divide by a
-certain scalar value, use @samp{u} as the unit for that value.
-
-
-@c =====================================================================
-
-@node Expressions, Identifiers, Measurements, gtroff Reference
-@section Expressions
-@cindex expressions
-
-@code{gtroff} has most arithmetic operators common to other languages:
-
-@itemize @bullet
-@item
-@cindex arithmetic operators
-@cindex operators, arithmetic
-@opindex +
-@opindex -
-@opindex /
-@opindex *
-@opindex %
-Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
-(division), @samp{*} (multiplication), @samp{%} (modulo).
-
-@code{gtroff} only provides integer arithmetic. The internal type used
-for computing results is @samp{int}, which is usually a 32@dmn{bit}
-signed integer.
-
-@item
-@cindex comparison operators
-@cindex operators, comparison
-@opindex <
-@opindex >
-@opindex >=
-@opindex <=
-@opindex =
-@opindex ==
-Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
-(less than or equal), @samp{>=} (greater than or equal), @samp{=}
-(equal), @samp{==} (the same as @samp{=}).
-
-@item
-@cindex logical operators
-@cindex operators, logical
-@opindex &
-@ifnotinfo
-@opindex :
-@end ifnotinfo
-@ifinfo
-@opindex @r{<colon>}
-@end ifinfo
-Logical: @samp{&} (logical and), @samp{:} (logical or).
-
-@item
-@cindex unary operators
-@cindex operators, unary
-@opindex -
-@opindex +
-@opindex !
-@cindex @code{if} request, and the @samp{!} operator
-@cindex @code{while} request, and the @samp{!} operator
-Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
-(just for completeness; does nothing in expressions), @samp{!} (logical
-not; this works only within @code{if} and @code{while} requests). See
-below for the use of unary operators in motion requests.
-
-@item
-@cindex extremum operators (@code{>?}, @code{<?})
-@cindex operators, extremum (@code{>?}, @code{<?})
-@opindex >?
-@opindex <?
-Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
-
-Example:
-
-@Example
-.nr x 5
-.nr y 3
-.nr z (\n[x] >? \n[y])
-@endExample
-
-@noindent
-The register@tie{}@code{z} now contains@tie{}5.
-
-@item
-@cindex scaling operator
-@cindex operator, scaling
-Scaling: @code{(@var{c};@var{e})}. Evaluate@tie{}@var{e} using@tie{}@var{c}
-as the default scaling indicator. If @var{c} is missing, ignore scaling
-indicators in the evaluation of@tie{}@var{e}.
-@end itemize
-
-@cindex parentheses
-@cindex order of evaluation in expressions
-@cindex expression, order of evaluation
-@opindex (
-@opindex )
-Parentheses may be used as in any other language. However, in
-@code{gtroff} they are necessary to ensure order of evaluation.
-@code{gtroff} has no operator precedence; expressions are evaluated left
-to right. This means that @code{gtroff} evaluates @samp{3+5*4} as if it were
-parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might be
-expected.
-
-@cindex @code{+}, and page motion
-@cindex @code{-}, and page motion
-@cindex motion operators
-@cindex operators, motion
-For many requests which cause a motion on the page, the unary operators
-@samp{+} and @samp{-} work differently if leading an expression. They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
-@cindex @code{|}, and page motion
-@cindex absolute position operator (@code{|})
-@cindex position, absolute, operator (@code{|})
-Similarly, a leading @samp{|} operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the @emph{input} line.
-
-@cindex @code{bp} request, using @code{+} and@tie{}@code{-}
-@cindex @code{in} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ll} request, using @code{+} and@tie{}@code{-}
-@cindex @code{lt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nm} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nr} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pl} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pn} request, using @code{+} and@tie{}@code{-}
-@cindex @code{po} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ps} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
-@cindex @code{rt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ti} request, using @code{+} and@tie{}@code{-}
-@cindex @code{\H}, using @code{+} and@tie{}@code{-}
-@cindex @code{\R}, using @code{+} and@tie{}@code{-}
-@cindex @code{\s}, using @code{+} and@tie{}@code{-}
-@samp{+} and @samp{-} are also treated differently by the following
-requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
-@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
-@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
-Here, leading plus and minus signs indicate increments and decrements.
-
-@xref{Setting Registers}, for some examples.
-
-@Defesc {\\B, ', anything, '}
-@cindex numeric expression, valid
-@cindex valid numeric expression
-Return@tie{}1 if @var{anything} is a valid numeric expression;
-or@tie{}0 if @var{anything} is empty or not a valid numeric expression.
-@endDefesc
-
-@cindex space characters, in expressions
-@cindex expressions, and space characters
-Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
-@xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
-
-
-@c =====================================================================
-
-@node Identifiers, Embedded Commands, Expressions, gtroff Reference
-@section Identifiers
-@cindex identifiers
-
-Like any other language, @code{gtroff} has rules for properly formed
-@dfn{identifiers}. In @code{gtroff}, an identifier can be made up of
-almost any printable character, with the exception of the following
-characters:
-
-@itemize @bullet
-@item
-@cindex whitespace characters
-@cindex newline character
-@cindex character, whitespace
-Whitespace characters (spaces, tabs, and newlines).
-
-@item
-@cindex character, backspace
-@cindex backspace character
-@cindex @acronym{EBCDIC} encoding of backspace
-Backspace (@acronym{ASCII}@tie{}@code{0x08} or
-@acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
-
-@item
-@cindex invalid input characters
-@cindex input characters, invalid
-@cindex characters, invalid input
-@cindex Unicode
-The following input characters are invalid and are ignored if
-@code{groff} runs on a machine based on @acronym{ASCII}, causing a
-warning message of type @samp{input} (see @ref{Debugging}, for more
-details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
-@code{0x80}-@code{0x9F}.
-
-And here are the invalid input characters if @code{groff} runs on an
-@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
-@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
-@code{0x30}-@code{0x3F}.
-
-Currently, some of these reserved codepoints are used internally, thus
-making it non-trivial to extend @code{gtroff} to cover Unicode or other
-character sets and encodings which use characters of these ranges.
-
-Note that invalid characters are removed before parsing; an
-identifier @code{foo}, followed by an invalid character, followed by
-@code{bar} is treated as @code{foobar}.
-@end itemize
-
-For example, any of the following is valid.
-
-@Example
-br
-PP
-(l
-end-list
-@@_
-@endExample
-
-@cindex @code{]}, as part of an identifier
-@noindent
-Note that identifiers longer than two characters with a closing bracket
-(@samp{]}) in its name can't be accessed with escape sequences which
-expect an identifier as a parameter. For example, @samp{\[foo]]}
-accesses the glyph @samp{foo}, followed by @samp{]}, whereas
-@samp{\C'foo]'} really asks for glyph @samp{foo]}.
-
-@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
-@cindex @code{[}, macro names starting with, and @code{refer}
-@cindex @code{]}, macro names starting with, and @code{refer}
-@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
-To avoid problems with the @code{refer} preprocessor, macro names
-should not start with @samp{[} or @samp{]}. Due to backwards
-compatibility, everything after @samp{.[} and @samp{.]} is handled as
-a special argument to @code{refer}. For example, @samp{.[foo} makes
-@code{refer} to start a reference, using @samp{foo} as a parameter.
-
-@Defesc {\\A, ', ident, '}
-Test whether an identifier @var{ident} is valid in @code{gtroff}. It
-expands to the character@tie{}1 or@tie{}0 according to whether its
-argument (usually delimited by quotes) is or is not acceptable as the
-name of a string, macro, diversion, number register, environment, or
-font. It returns@tie{}0 if no argument is given. This is useful for
-looking up user input in some sort of associative table.
-
-@Example
-\A'end-list'
- @result{} 1
-@endExample
-@endDefesc
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-Identifiers in @code{gtroff} can be any length, but, in some contexts,
-@code{gtroff} needs to be told where identifiers end and text begins
-(and in different ways depending on their length):
-
-@itemize @bullet
-@item
-Single character.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-Two characters. Must be prefixed with @samp{(} in some situations.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-Arbitrary length (@code{gtroff} only). Must be bracketed with @samp{[}
-and@tie{}@samp{]} in some situations. Any length identifier can be put
-in brackets.
-@end itemize
-
-@cindex undefined identifiers
-@cindex identifiers, undefined
-Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing.
-When @code{gtroff} finds an undefined identifier, it emits a
-warning, doing the following:
-
-@itemize @bullet
-@item
-If the identifier is a string, macro, or diversion,
-@code{gtroff} defines it as empty.
-
-@item
-If the identifier is a number register, @code{gtroff}
-defines it with a value of@tie{}0.
-@end itemize
-
-@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
-
-Note that macros, strings, and diversions share the same name space.
-
-@Example
-.de xxx
-. nop foo
-..
-.
-.di xxx
-bar
-.br
-.di
-.
-.xxx
- @result{} bar
-@endExample
-
-@noindent
-As can be seen in the previous example, @code{gtroff} reuses the
-identifier @samp{xxx}, changing it from a macro to a diversion.
-No warning is emitted! The contents of the first macro definition is
-lost.
-
-@xref{Interpolating Registers}, and @ref{Strings}.
-
-
-@c =====================================================================
-
-@node Embedded Commands, Registers, Identifiers, gtroff Reference
-@section Embedded Commands
-@cindex embedded commands
-@cindex commands, embedded
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking. In order to gain further functionality,
-@code{gtroff} allows commands to be embedded into the text, in two ways.
-
-The first is a @dfn{request} which takes up an entire line, and does
-some large-scale operation (e.g.@: break lines, start new pages).
-
-The other is an @dfn{escape} which can be usually embedded anywhere
-in the text; most requests can accept it even as an argument.
-Escapes generally do more minor operations like sub- and superscripts,
-print a symbol, etc.
-
-@menu
-* Requests::
-* Macros::
-* Escapes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Requests, Macros, Embedded Commands, Embedded Commands
-@subsection Requests
-@cindex requests
-
-@cindex control character (@code{.})
-@cindex character, control (@code{.})
-@cindex no-break control character (@code{'})
-@cindex character, no-break control (@code{'})
-@cindex control character, no-break (@code{'})
-A request line begins with a control character, which is either a single
-quote (@samp{'}, the @dfn{no-break control character}) or a period
-(@samp{.}, the normal @dfn{control character}). These can be changed;
-see @ref{Character Translations}, for details. After this there may be
-optional tabs or spaces followed by an identifier which is the name of
-the request. This may be followed by any number of space-separated
-arguments (@emph{no} tabs here).
-
-@cindex structuring source code of documents or macro packages
-@cindex documents, structuring the source code
-@cindex macro packages, structuring the source code
-Since a control character followed by whitespace only is ignored, it
-is common practice to use this feature for structuring the source code
-of documents or macro packages.
-
-@Example
-.de foo
-. tm This is foo.
-..
-.
-.
-.de bar
-. tm This is bar.
-..
-@endExample
-
-@cindex blank line
-@cindex blank line macro (@code{blm})
-Another possibility is to use the blank line macro request @code{blm}
-by assigning an empty macro to it.
-
-@Example
-.de do-nothing
-..
-.blm do-nothing \" activate blank line macro
-
-.de foo
-. tm This is foo.
-..
-
-
-.de bar
-. tm This is bar.
-..
-
-.blm \" deactivate blank line macro
-@endExample
-
-@xref{Blank Line Traps}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-@cindex @code{\&}, escaping control characters
-To begin a line with a control character without it being interpreted,
-precede it with @code{\&}. This represents a zero width space, which
-means it does not affect the output.
-
-In most cases the period is used as a control character. Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
-@menu
-* Request and Macro Arguments::
-@end menu
-
-@node Request and Macro Arguments, , Requests, Requests
-@subsubsection Request and Macro Arguments
-@cindex request arguments
-@cindex macro arguments
-@cindex arguments to requests and macros
-
-Arguments to requests and macros are processed much like the shell:
-The line is split into arguments according to
-spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
-tabs for argument separation -- @code{gtroff} intentionally doesn't
-support this.}
-
-@cindex spaces, in a macro argument
-An argument to a macro which is intended to contain spaces can either be
-enclosed in double quotes, or have the spaces @dfn{escaped} with
-backslashes. This is @emph{not} true for requests.
-
-Here are a few examples for a hypothetical macro @code{uh}:
-
-@Example
-.uh The Mouse Problem
-.uh "The Mouse Problem"
-.uh The\ Mouse\ Problem
-@endExample
-
-@cindex @code{\~}, difference to @code{\@key{SP}}
-@cindex @code{\@key{SP}}, difference to @code{\~}
-@noindent
-The first line is the @code{uh} macro being called with 3 arguments,
-@samp{The}, @samp{Mouse}, and @samp{Problem}. The latter two have the
-same effect of calling the @code{uh} macro with one argument, @samp{The
-Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
-is ``classical'' in the sense that it can be found in most @code{troff}
-documents. Nevertheless, it is not optimal in all situations, since
-@w{@samp{\ }} inserts a fixed-width, non-breaking space character which
-can't stretch. @code{gtroff} provides a different command @code{\~} to
-insert a stretchable, non-breaking space.}
-
-@cindex @code{"}, in a macro argument
-@cindex double quote, in a macro argument
-A double quote which isn't preceded by a space doesn't start a macro
-argument. If not closing a string, it is printed literally.
-
-For example,
-
-@Example
-.xxx a" "b c" "de"fg"
-@endExample
-
-@noindent
-has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
-Don't rely on this obscure behaviour!
-
-There are two possibilities to get a double quote reliably.
-
-@itemize @bullet
-@item
-Enclose the whole argument with double quotes and use two consecutive double
-quotes to represent a single one. This traditional solution has the
-disadvantage that double quotes don't survive argument expansion again if
-called in compatibility mode (using the @option{-C} option of @code{groff}):
-
-@Example
-.de xx
-. tm xx: `\\$1' `\\$2' `\\$3'
-.
-. yy "\\$1" "\\$2" "\\$3"
-..
-.de yy
-. tm yy: `\\$1' `\\$2' `\\$3'
-..
-.xx A "test with ""quotes""" .
- @result{} xx: `A' `test with "quotes"' `.'
- @result{} yy: `A' `test with ' `quotes""'
-@endExample
-
-@noindent
-If not in compatibility mode, you get the expected result
-
-@Example
-xx: `A' `test with "quotes"' `.'
-yy: `A' `test with "quotes"' `.'
-@endExample
-
-@noindent
-since @code{gtroff} preserves the input level.
-
-@item
-Use the double quote glyph @code{\(dq}. This works with and without
-compatibility mode enabled since @code{gtroff} doesn't convert @code{\(dq}
-back to a double quote input character.
-
-Not that this method won't work with @acronym{UNIX} @code{troff} in general
-since the glyph `dq' isn't defined normally.
-@end itemize
-
-@cindex @code{ds} request, and double quotes
-Double quotes in the @code{ds} request are handled differently.
-@xref{Strings}, for more details.
-
-@c ---------------------------------------------------------------------
-
-@node Macros, Escapes, Requests, Embedded Commands
-@subsection Macros
-@cindex macros
-
-@code{gtroff} has a @dfn{macro} facility for defining a series of lines
-which can be invoked by name. They are called in the same manner as
-requests -- arguments also may be passed basically in the same manner.
-
-@xref{Writing Macros}, and @ref{Request and Macro Arguments}.
-
-@c ---------------------------------------------------------------------
-
-@node Escapes, , Macros, Embedded Commands
-@subsection Escapes
-@cindex escapes
-
-Escapes may occur anywhere in the input to @code{gtroff}. They usually
-begin with a backslash and are followed by a single character which
-indicates the function to be performed. The escape character can be
-changed; see @ref{Character Translations}.
-
-Escape sequences which require an identifier as a parameter accept three
-possible syntax forms.
-
-@itemize @bullet
-@item
-The next single character is the identifier.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-If this single character is an opening parenthesis, take the following
-two characters as the identifier. Note that there is no closing
-parenthesis after the identifier.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-If this single character is an opening bracket, take all characters
-until a closing bracket as the identifier.
-@end itemize
-
-@noindent
-Examples:
-
-@Example
-\fB
-\n(XX
-\*[TeX]
-@endExample
-
-@cindex @code{'}, delimiting arguments
-@cindex argument delimiting characters
-@cindex characters, argument delimiting
-@cindex delimiting characters for arguments
-Other escapes may require several arguments and/or some special format.
-In such cases the argument is traditionally enclosed in single quotes
-(and quotes are always used in this manual for the definitions of escape
-sequences). The enclosed text is then processed according to what that
-escape expects. Example:
-
-@Example
-\l'1.5i\(bu'
-@endExample
-
-@cindex @code{\o}, possible quote characters
-@cindex @code{\b}, possible quote characters
-@cindex @code{\X}, possible quote characters
-Note that the quote character can be replaced with any other character
-which does not occur in the argument (even a newline or a space
-character) in the following escapes: @code{\o}, @code{\b}, and
-@code{\X}. This makes e.g.
-
-@Example
-A caf
-\o
-e\'
-
-
-in Paris
- @result{} A café in Paris
-@endExample
-
-@noindent
-possible, but it is better not to use this feature to avoid confusion.
-
-@cindex @code{\%}, used as delimiter
-@cindex @code{\@key{SP}}, used as delimiter
-@cindex @code{\|}, used as delimiter
-@cindex @code{\^}, used as delimiter
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\?}, used as delimiter
-@cindex @code{\@@}, used as delimiter
-@cindex @code{\)}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\,}, used as delimiter
-@cindex @code{\&}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\~}, used as delimiter
-@cindex @code{\0}, used as delimiter
-@cindex @code{\a}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\d}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\E}, used as delimiter
-@cindex @code{\p}, used as delimiter
-@cindex @code{\r}, used as delimiter
-@cindex @code{\t}, used as delimiter
-@cindex @code{\u}, used as delimiter
-The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
-@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\?}, @code{\@@}, @code{\)}, @code{\/}, @code{\,}, @code{\&},
-@code{\:}, @code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d},
-@code{\e}, @code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.
-Again, don't use these if possible.
-
-@cindex @code{\A}, allowed delimiters
-@cindex @code{\B}, allowed delimiters
-@cindex @code{\Z}, allowed delimiters
-@cindex @code{\C}, allowed delimiters
-@cindex @code{\w}, allowed delimiters
-No newline characters as delimiters are allowed in the following
-escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
-
-@cindex @code{\D}, allowed delimiters
-@cindex @code{\h}, allowed delimiters
-@cindex @code{\H}, allowed delimiters
-@cindex @code{\l}, allowed delimiters
-@cindex @code{\L}, allowed delimiters
-@cindex @code{\N}, allowed delimiters
-@cindex @code{\R}, allowed delimiters
-@cindex @code{\s}, allowed delimiters
-@cindex @code{\S}, allowed delimiters
-@cindex @code{\v}, allowed delimiters
-@cindex @code{\x}, allowed delimiters
-Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
-@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v},
-and @code{\x} can't use the following characters as delimiters:
-
-@itemize @bullet
-@item
-@cindex numbers, and delimiters
-@cindex digits, and delimiters
-The digits @code{0}-@code{9}.
-
-@item
-@cindex operators, as delimiters
-@cindex @code{+}, as delimiter
-@cindex @code{-}, as delimiter
-@cindex @code{/}, as delimiter
-@cindex @code{*}, as delimiter
-@cindex @code{%}, as delimiter
-@cindex @code{<}, as delimiter
-@cindex @code{>}, as delimiter
-@cindex @code{=}, as delimiter
-@cindex @code{&}, as delimiter
-@ifnotinfo
-@cindex @code{:}, as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex <colon>, as delimiter
-@end ifinfo
-@cindex @code{(}, as delimiter
-@cindex @code{)}, as delimiter
-@cindex @code{.}, as delimiter
-The (single-character) operators @samp{+-/*%<>=&:().}.
-
-@item
-@cindex space character
-@cindex character, space
-@cindex tab character
-@cindex character, tab
-@cindex newline character
-@cindex character, newline
-The space, tab, and newline characters.
-
-@item
-@cindex @code{\%}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\@@}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\p}, used as delimiter
-All escape sequences except @code{\%}, @code{\:}, @code{\@{}, @code{\@}},
-@code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!}, @code{\@@},
-@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
-@end itemize
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-To have a backslash (actually, the current escape character) appear in the
-output several escapes are defined: @code{\\}, @code{\e} or @code{\E}.
-These are very similar, and only differ with respect to being used in
-macros or diversions. @xref{Character Translations}, for an exact
-description of those escapes.
-
-@xref{Implementation Differences}, @ref{Copy-in Mode}, and @ref{Diversions},
-@ref{Identifiers}, for more information.
-
-@menu
-* Comments::
-@end menu
-
-@node Comments, , Escapes, Escapes
-@subsubsection Comments
-@cindex comments
-
-Probably one of the most@footnote{Unfortunately, this is a lie. But
-hopefully future @code{gtroff} hackers will believe it @code{:-)}}
-common forms of escapes is the comment.
-
-@Defesc {\\", , , }
-Start a comment. Everything to the end of the input line is ignored.
-
-This may sound simple, but it can be tricky to keep the comments from
-interfering with the appearance of the final output.
-
-@cindex @code{ds}, @code{ds1} requests, and comments
-@cindex @code{as}, @code{as1} requests, and comments
-If the escape is to the right of some text or a request, that portion
-of the line is ignored, but the space leading up to it is noticed by
-@code{gtroff}. This only affects the @code{ds} and @code{as}
-request and its variants.
-
-@cindex tabs, before comments
-@cindex comments, lining up with tabs
-One possibly irritating idiosyncracy is that tabs must not be used to
-line up comments. Tabs are not treated as whitespace between the
-request and macro arguments.
-
-@cindex undefined request
-@cindex request, undefined
-A comment on a line by itself is treated as a blank line, because
-after eliminating the comment, that is all that remains:
-
-@Example
-Test
-\" comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test
-
-Test
-@endExample
-
-To avoid this, it is common to start the line with @code{.\"} which
-causes the line to be treated as an undefined request and thus ignored
-completely.
-
-@cindex @code{'}, as a comment
-Another commenting scheme seen sometimes is three consecutive single
-quotes (@code{'''}) at the beginning of a line. This works, but
-@code{gtroff} gives a warning about an undefined macro (namely
-@code{''}), which is harmless, but irritating.
-@endDefesc
-
-@Defesc {\\#, , , }
-To avoid all this, @code{gtroff} has a new comment mechanism using the
-@code{\#} escape. This escape works the same as @code{\"} except that
-the newline is also ignored:
-
-@Example
-Test
-\# comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test Test
-@endExample
-
-@noindent
-as expected.
-@endDefesc
-
-@Defreq {ig, [@Var{end}]}
-Ignore all input until @code{gtroff} encounters the macro named
-@code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
-specified). This is useful for commenting out large blocks of text:
-
-@Example
-text text text...
-.ig
-This is part of a large block
-of text that has been
-temporarily(?) commented out.
-
-We can restore it simply by removing
-the .ig request and the ".." at the
-end of the block.
-..
-More text text text...
-@endExample
-
-@noindent
-produces
-
-@Example
-text text text@dots{} More text text text@dots{}
-@endExample
-
-@noindent
-Note that the commented-out block of text does not
-cause a break.
-
-The input is read in copy-mode; auto-incremented registers @emph{are}
-affected (@pxref{Auto-increment}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
-@section Registers
-@cindex registers
-
-Numeric variables in @code{gtroff} are called @dfn{registers}. There
-are a number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
-@xref{Identifiers}, for details on register identifiers.
-
-@menu
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Setting Registers, Interpolating Registers, Registers, Registers
-@subsection Setting Registers
-@cindex setting registers (@code{nr}, @code{\R})
-@cindex registers, setting (@code{nr}, @code{\R})
-
-Define or set registers using the @code{nr} request or the
-@code{\R} escape.
-
-@DefreqList {nr, ident value}
-@DefescListEnd {\\R, ', ident value, '}
-Set number register @var{ident} to @var{value}. If @var{ident}
-doesn't exist, @code{gtroff} creates it.
-
-The argument to @code{\R} usually has to be enclosed in quotes.
-@xref{Escapes}, for details on parameter delimiting characters.
-
-The @code{\R} escape doesn't produce an input token in @code{gtroff};
-with other words, it vanishes completely after @code{gtroff} has
-processed it.
-@endDefreq
-
-For example, the following two lines are equivalent:
-
-@Example
-.nr a (((17 + (3 * 4))) % 4)
-\R'a (((17 + (3 * 4))) % 4)'
- @result{} 1
-@endExample
-
-Both @code{nr} and @code{\R} have two additional special forms to
-increment or decrement a register.
-
-@DefreqList {nr, ident @t{+}@Var{value}}
-@DefreqItem {nr, ident @t{-}@Var{value}}
-@DefescItem {\\R, ', ident @t{+}value, '}
-@DefescListEnd {\\R, ', ident @t{-}value, '}
-Increment (decrement) register @var{ident} by @var{value}.
-
-@Example
-.nr a 1
-.nr a +1
-\na
- @result{} 2
-@endExample
-
-@cindex negating register values
-To assign the negated value of a register to another register, some care
-must be taken to get the desired result:
-
-@Example
-.nr a 7
-.nr b 3
-.nr a -\nb
-\na
- @result{} 4
-.nr a (-\nb)
-\na
- @result{} -3
-@endExample
-
-@noindent
-The surrounding parentheses prevent the interpretation of the minus sign
-as a decrementing operator. An alternative is to start the assignment
-with a @samp{0}:
-
-@Example
-.nr a 7
-.nr b -3
-.nr a \nb
-\na
- @result{} 4
-.nr a 0\nb
-\na
- @result{} -3
-@endExample
-@endDefreq
-
-@Defreq {rr, ident}
-@cindex removing number register (@code{rr})
-@cindex number register, removing (@code{rr})
-@cindex register, removing (@code{rr})
-Remove number register @var{ident}. If @var{ident} doesn't exist, the
-request is ignored.
-@endDefreq
-
-@Defreq {rnn, ident1 ident2}
-@cindex renaming number register (@code{rnn})
-@cindex number register, renaming (@code{rnn})
-@cindex register, renaming (@code{rnn})
-Rename number register @var{ident1} to @var{ident2}. If either
-@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
-@endDefreq
-
-@Defreq {aln, ident1 ident2}
-@cindex alias, number register, creating (@code{aln})
-@cindex creating alias, for number register (@code{aln})
-@cindex number register, creating alias (@code{aln})
-@cindex register, creating alias (@code{aln})
-Create an alias @var{ident1} for a number register @var{ident2}. The
-new name and the old name are exactly equivalent. If @var{ident1} is
-undefined, a warning of type @samp{reg} is generated, and the request
-is ignored. @xref{Debugging}, for information about warnings.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Interpolating Registers, Auto-increment, Setting Registers, Registers
-@subsection Interpolating Registers
-@cindex interpolating registers (@code{\n})
-@cindex registers, interpolating (@code{\n})
-
-Numeric registers can be accessed via the @code{\n} escape.
-
-@DefescList {\\n, , i, }
-@DefescItem {\\n, @Lparen{}, id, }
-@DefescListEnd {\\n, @Lbrack{}, ident, @Rbrack{}}
-@cindex nested assignments
-@cindex assignments, nested
-@cindex indirect assignments
-@cindex assignments, indirect
-Interpolate number register with name @var{ident} (one-character
-name@tie{}@var{i}, two-character name @var{id}). This means that the value
-of the register is expanded in-place while @code{gtroff} is parsing the
-input line. Nested assignments (also called indirect assignments) are
-possible.
-
-@Example
-.nr a 5
-.nr as \na+\na
-\n(as
- @result{} 10
-@endExample
-
-@Example
-.nr a1 5
-.nr ab 6
-.ds str b
-.ds num 1
-\n[a\n[num]]
- @result{} 5
-\n[a\*[str]]
- @result{} 6
-@endExample
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
-@subsection Auto-increment
-@cindex auto-increment
-@cindex increment, automatic
-
-Number registers can also be auto-incremented and auto-decremented.
-The increment or decrement value can be specified with a third
-argument to the @code{nr} request or @code{\R} escape.
-
-@Defreq {nr, ident value incr}
-@cindex @code{\R}, difference to @code{nr}
-Set number register @var{ident} to @var{value}; the increment for
-auto-incrementing is set to @var{incr}. Note that the @code{\R}
-escape doesn't support this notation.
-@endDefreq
-
-To activate auto-incrementing, the escape @code{\n} has a special
-syntax form.
-
-@DefescList {\\n, +, i, }
-@DefescItem {\\n, -, i, }
-@DefescItem {\\n, @Lparen{}+, id, }
-@DefescItem {\\n, @Lparen{}-, id, }
-@DefescItem {\\n, +@Lparen{}, id, }
-@DefescItem {\\n, -@Lparen{}, id, }
-@DefescItem {\\n, @Lbrack{}+, ident, @Rbrack{}}
-@DefescItem {\\n, @Lbrack{}-, ident, @Rbrack{}}
-@DefescItem {\\n, +@Lbrack{}, ident, @Rbrack{}}
-@DefescListEnd {\\n, -@Lbrack{}, ident, @Rbrack{}}
-Before interpolating, increment or decrement @var{ident}
-(one-character name@tie{}@var{i}, two-character name @var{id}) by the
-auto-increment value as specified with the @code{nr} request (or the
-@code{\R} escape). If no auto-increment value has been specified,
-these syntax forms are identical to @code{\n}.
-@endDefesc
-
-For example,
-
-@Example
-.nr a 0 1
-.nr xx 0 5
-.nr foo 0 -2
-\n+a, \n+a, \n+a, \n+a, \n+a
-.br
-\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
-.br
-\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-@endExample
-
-@noindent
-produces
-
-@Example
-1, 2, 3, 4, 5
--5, -10, -15, -20, -25
--2, -4, -6, -8, -10
-@endExample
-
-@cindex increment value without changing the register
-@cindex value, incrementing without changing the register
-To change the increment value without changing the value of a register
-(@var{a} in the example), the following can be used:
-
-@Example
-.nr a \na 10
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Assigning Formats, Built-in Registers, Auto-increment, Registers
-@subsection Assigning Formats
-@cindex assigning formats (@code{af})
-@cindex formats, assigning (@code{af})
-
-When a register is used in the text of an input file (as opposed to
-part of an expression), it is textually replaced (or interpolated)
-with a representation of that number. This output format can be
-changed to a variety of formats (numbers, Roman numerals, etc.). This
-is done using the @code{af} request.
-
-@Defreq {af, ident format}
-Change the output format of a number register. The first argument
-@var{ident} is the name of the number register to be changed, and the
-second argument @var{format} is the output format. The following
-output formats are available:
-
-@table @code
-@item 1
-Decimal arabic numbers. This is the default format: 0, 1, 2,
-3,@tie{}@enddots{}
-
-@item 0@dots{}0
-Decimal numbers with as many digits as specified. So, @samp{00} would
-result in printing numbers as 01, 02, 03,@tie{}@enddots{}
-
-In fact, any digit instead of zero will do; @code{gtroff} only counts
-how many digits are specified. As a consequence, @code{af}'s default
-format @samp{1} could be specified as @samp{0} also (and exactly this is
-returned by the @code{\g} escape, see below).
-
-@item I
-@cindex Roman numerals
-@cindex numerals, Roman
-Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
-
-@item i
-Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
-
-@item A
-Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
-
-@item a
-Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
-@end table
-
-Omitting the number register format causes a warning of type
-@samp{missing}. @xref{Debugging}, for more details. Specifying a
-nonexistent format causes an error.
-
-The following example produces @samp{10, X, j, 010}:
-
-@Example
-.nr a 10
-.af a 1 \" the default format
-\na,
-.af a I
-\na,
-.af a a
-\na,
-.af a 001
-\na
-@endExample
-
-@cindex Roman numerals, maximum and minimum
-@cindex maximum values of Roman numerals
-@cindex minimum values of Roman numerals
-The largest number representable for the @samp{i} and @samp{I} formats
-is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
-and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
-@code{gtroff}. Currently, the correct glyphs of Roman numeral five
-thousand and Roman numeral ten thousand (Unicode code points
-@code{U+2182} and @code{U+2181}, respectively) are not available.
-
-If @var{ident} doesn't exist, it is created.
-
-@cindex read-only register, changing format
-@cindex changing format, and read-only registers
-Changing the output format of a read-only register causes an error. It
-is necessary to first copy the register's value to a writeable register,
-then apply the @code{af} request to this other register.
-@endDefreq
-
-@DefescList {\\g, , i, }
-@DefescItem {\\g, @Lparen{}, id, }
-@DefescListEnd {\\g, @Lbrack{}, ident, @Rbrack{}}
-@cindex format of register (@code{\g})
-@cindex register, format (@code{\g})
-Return the current format of the specified register @var{ident}
-(one-character name@tie{}@var{i}, two-character name @var{id}). For
-example, @samp{\ga} after the previous example would produce the
-string @samp{000}. If the register hasn't been defined yet, nothing
-is returned.
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Built-in Registers, , Assigning Formats, Registers
-@subsection Built-in Registers
-@cindex built-in registers
-@cindex registers, built-in
-
-The following lists some built-in registers which are not described
-elsewhere in this manual. Any register which begins with a @samp{.} is
-read-only. A complete listing of all built-in registers can be found in
-@ref{Register Index}.
-
-@table @code
-@item \n[.F]
-@cindex current input file name register (@code{.F})
-@cindex input file name, current, register (@code{.F})
-@vindex .F
-This string-valued register returns the current input file name.
-
-@item \n[.H]
-@cindex horizontal resolution register (@code{.H})
-@cindex resolution, horizontal, register (@code{.H})
-@vindex .H
-Horizontal resolution in basic units.
-
-@item \n[.U]
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-If @code{gtroff} is called with the @option{-U} command line option, the
-number register @code{.U} is set to@tie{}1, and zero otherwise.
-@xref{Groff Options}.
-
-@item \n[.V]
-@cindex vertical resolution register (@code{.V})
-@cindex resolution, vertical, register (@code{.V})
-@vindex .V
-Vertical resolution in basic units.
-
-@item \n[seconds]
-@cindex seconds, current time (@code{seconds})
-@cindex time, current, seconds (@code{seconds})
-@cindex current time, seconds (@code{seconds})
-@vindex seconds
-The number of seconds after the minute, normally in the range@tie{}0
-to@tie{}59, but can be up to@tie{}61 to allow for leap seconds. Initialized
-at start-up of @code{gtroff}.
-
-@item \n[minutes]
-@cindex minutes, current time (@code{minutes})
-@cindex time, current, minutes (@code{minutes})
-@cindex current time, minutes (@code{minutes})
-@vindex minutes
-The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[hours]
-@cindex hours, current time (@code{hours})
-@cindex time, current, hours (@code{hours})
-@cindex current time, hours (@code{hours})
-@vindex hours
-The number of hours past midnight, in the range@tie{}0 to@tie{}23.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[dw]
-@cindex day of the week register (@code{dw})
-@cindex date, day of the week register (@code{dw})
-@vindex dw
-Day of the week (1-7).
-
-@item \n[dy]
-@cindex day of the month register (@code{dy})
-@cindex date, day of the month register (@code{dy})
-@vindex dy
-Day of the month (1-31).
-
-@item \n[mo]
-@cindex month of the year register (@code{mo})
-@cindex date, month of the year register (@code{mo})
-@vindex mo
-Current month (1-12).
-
-@item \n[year]
-@cindex date, year register (@code{year}, @code{yr})
-@cindex year, current, register (@code{year}, @code{yr})
-@vindex year
-The current year.
-
-@item \n[yr]
-@vindex yr
-The current year minus@tie{}1900. Unfortunately, the documentation of
-@acronym{UNIX} Version@tie{}7's @code{troff} had a year@tie{}2000 bug: It
-incorrectly claimed that @code{yr} contains the last two digits of the
-year. That claim has never been true of either @acronym{AT&T}
-@code{troff} or GNU @code{troff}. Old @code{troff} input that looks
-like this:
-
-@Example
-'\" The following line stopped working after 1999
-This document was formatted in 19\n(yr.
-@endExample
-
-@noindent
-can be corrected as follows:
-
-@Example
-This document was formatted in \n[year].
-@endExample
-
-@noindent
-or, to be portable to older @code{troff} versions, as follows:
-
-@Example
-.nr y4 1900+\n(yr
-This document was formatted in \n(y4.
-@endExample
-
-@item \n[.c]
-@vindex .c
-@itemx \n[c.]
-@vindex c.
-@cindex input line number register (@code{.c}, @code{c.})
-@cindex line number, input, register (@code{.c}, @code{c.})
-The current @emph{input} line number. Register @samp{.c} is read-only,
-whereas @samp{c.} (a @code{gtroff} extension) is writable also,
-affecting both @samp{.c} and @samp{c.}.
-
-@item \n[ln]
-@vindex ln
-@cindex output line number register (@code{ln})
-@cindex line number, output, register (@code{ln})
-The current @emph{output} line number after a call to the @code{nm}
-request to activate line numbering.
-
-@xref{Miscellaneous}, for more information about line numbering.
-
-@item \n[.x]
-@vindex .x
-@cindex major version number register (@code{.x})
-@cindex version number, major, register (@code{.x})
-The major version number. For example, if the version number
-is 1.03 then @code{.x} contains@tie{}@samp{1}.
-
-@item \n[.y]
-@vindex .y
-@cindex minor version number register (@code{.y})
-@cindex version number, minor, register (@code{.y})
-The minor version number. For example, if the version number
-is 1.03 then @code{.y} contains@tie{}@samp{03}.
-
-@item \n[.Y]
-@vindex .Y
-@cindex revision number register (@code{.Y})
-The revision number of @code{groff}.
-
-@item \n[$$]
-@vindex $$
-@cindex process ID of @code{gtroff} register (@code{$$})
-@cindex @code{gtroff}, process ID register (@code{$$})
-The process ID of @code{gtroff}.
-
-@item \n[.g]
-@vindex .g
-@cindex @code{gtroff}, identification register (@code{.g})
-@cindex GNU-specific register (@code{.g})
-Always@tie{}1. Macros should use this to determine whether they are
-running under GNU @code{troff}.
-
-@item \n[.A]
-@vindex .A
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-If the command line option @option{-a} is used to produce an
-@acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
-otherwise. @xref{Groff Options}.
-
-@item \n[.P]
-@vindex .P
-This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
-page is actually being printed, i.e., if the @option{-o} option is being
-used to only print selected pages. @xref{Groff Options}, for more
-information.
-
-@item \n[.T]
-@vindex .T
-If @code{gtroff} is called with the @option{-T} command line option, the
-number register @code{.T} is set to@tie{}1, and zero otherwise.
-@xref{Groff Options}.
-
-@item \*[.T]
-@stindex .T
-@cindex output device name string register (@code{.T})
-A single read-write string register which contains the current output
-device (for example, @samp{latin1} or @samp{ps}). This is the only
-string register defined by @code{gtroff}.
-@end table
-
-
-@c =====================================================================
-
-@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
-@section Manipulating Filling and Adjusting
-@cindex manipulating filling and adjusting
-@cindex filling and adjusting, manipulating
-@cindex adjusting and filling, manipulating
-@cindex justifying text
-@cindex text, justifying
-
-@cindex break
-@cindex line break
-@cindex @code{bp} request, causing implicit linebreak
-@cindex @code{ce} request, causing implicit linebreak
-@cindex @code{cf} request, causing implicit linebreak
-@cindex @code{fi} request, causing implicit linebreak
-@cindex @code{fl} request, causing implicit linebreak
-@cindex @code{in} request, causing implicit linebreak
-@cindex @code{nf} request, causing implicit linebreak
-@cindex @code{rj} request, causing implicit linebreak
-@cindex @code{sp} request, causing implicit linebreak
-@cindex @code{ti} request, causing implicit linebreak
-@cindex @code{trf} request, causing implicit linebreak
-Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
-Breaks}. The @code{br} request likewise causes a break. Several
-other requests also cause breaks, but implicitly. These are
-@code{bp}, @code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in},
-@code{nf}, @code{rj}, @code{sp}, @code{ti}, and @code{trf}.
-
-@Defreq {br, }
-Break the current line, i.e., the input collected so far is emitted
-without adjustment.
-
-If the no-break control character is used, @code{gtroff} suppresses
-the break:
-
-@Example
-a
-'br
-b
- @result{} a b
-@endExample
-@endDefreq
-
-Initially, @code{gtroff} fills and adjusts text to both margins.
-Filling can be disabled via the @code{nf} request and re-enabled with
-the @code{fi} request.
-
-@DefreqList {fi, }
-@DefregListEnd {.u}
-@cindex fill mode (@code{fi})
-@cindex mode, fill (@code{fi})
-Activate fill mode (which is the default). This request implicitly
-enables adjusting; it also inserts a break in the text currently being
-filled. The read-only number register @code{.u} is set to@tie{}1.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@Defreq {nf, }
-@cindex no-fill mode (@code{nf})
-@cindex mode, no-fill (@code{nf})
-Activate no-fill mode. Input lines are output as-is, retaining line
-breaks and ignoring the current line length. This command implicitly
-disables adjusting; it also causes a break. The number register
-@code{.u} is set to@tie{}0.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@DefreqList {ad, [@Var{mode}]}
-@DefregListEnd {.j}
-Set adjusting mode.
-
-Activation and deactivation of adjusting is done implicitly with
-calls to the @code{fi} or @code{nf} requests.
-
-@var{mode} can have one of the following values:
-
-@table @code
-@item l
-@cindex ragged-right
-Adjust text to the left margin. This produces what is traditionally
-called ragged-right text.
-
-@item r
-@cindex ragged-left
-Adjust text to the right margin, producing ragged-left text.
-
-@item c
-@cindex centered text
-@cindex @code{ce} request, difference to @samp{.ad@tie{}c}
-Center filled text. This is different to the @code{ce} request which
-only centers text without filling.
-
-@item b
-@itemx n
-Justify to both margins. This is the default used by @code{gtroff}.
-@end table
-
-Finally, @var{mode} can be the numeric argument returned by the @code{.j}
-register.
-
-With no argument, @code{gtroff} adjusts lines in the same way it did
-before adjusting was deactivated (with a call to @code{na}, for
-example).
-
-@Example
-text
-.ad r
-.nr ad \n[.j]
-text
-.ad c
-text
-.na
-text
-.ad \" back to centering
-text
-.ad \n[ad] \" back to right justifying
-@endExample
-
-@cindex adjustment mode register (@code{.j})
-The current adjustment mode is available in the read-only number
-register @code{.j}; it can be stored and subsequently used to set
-adjustment.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {na, }
-Disable adjusting. This request won't change the current adjustment
-mode: A subsequent call to @code{ad} uses the previous adjustment
-setting.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {brp, }
-@DefescListEnd {\\p, , , }
-Adjust the current line and cause a break.
-
-In most cases this produces very ugly results since @code{gtroff}
-doesn't have a sophisticated paragraph building algorithm (as @TeX{}
-have, for example); instead, @code{gtroff} fills and adjusts a paragraph
-line by line:
-
-@Example
- This is an uninteresting sentence.
- This is an uninteresting sentence.\p
- This is an uninteresting sentence.
-@endExample
-
-@noindent
-is formatted as
-
-@Example
- This is an uninteresting sentence. This is an
- uninteresting sentence.
- This is an uninteresting sentence.
-@endExample
-@endDefreq
-
-@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
-@DefregItem {.ss}
-@DefregListEnd {.sss}
-@cindex word space size register (@code{.ss})
-@cindex size of word space register (@code{.ss})
-@cindex space between words register (@code{.ss})
-@cindex sentence space size register (@code{.sss})
-@cindex size of sentence space register (@code{.sss})
-@cindex space between sentences register (@code{.sss})
-Change the size of a space between words. It takes its units as one
-twelfth of the space width parameter for the current font.
-Initially both the @var{word_space_size} and @var{sentence_space_size}
-are@tie{}12. In fill mode, the values specify the minimum distance.
-
-@cindex fill mode
-@cindex mode, fill
-If two arguments are given to the @code{ss} request, the second
-argument sets the sentence space size. If the second argument is not
-given, sentence space size is set to @var{word_space_size}. The
-sentence space size is used in two circumstances: If the end of a
-sentence occurs at the end of a line in fill mode, then both an
-inter-word space and a sentence space are added; if two spaces follow
-the end of a sentence in the middle of a line, then the second space
-is a sentence space. If a second argument is never given to the
-@code{ss} request, the behaviour of @acronym{UNIX} @code{troff} is the
-same as that exhibited by GNU @code{troff}. In GNU @code{troff}, as
-in @acronym{UNIX} @code{troff}, a sentence should always be followed
-by either a newline or two spaces.
-
-The read-only number registers @code{.ss} and @code{.sss} hold the
-values of the parameters set by the first and second arguments of the
-@code{ss} request.
-
-The word space and sentence space values are associated with the current
-environment (@pxref{Environments}).
-
-Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
-ignored if a TTY output device is used; the given values are then
-rounded down to a multiple of@tie{}12 (@pxref{Implementation Differences}).
-
-The request is ignored if there is no parameter.
-
-@cindex discardable horizontal space
-@cindex space, discardable, horizontal
-@cindex horizontal discardable space
-Another useful application of the @code{ss} request is to insert
-discardable horizontal space, i.e., space which is discarded at a line
-break. For example, paragraph-style footnotes could be separated this
-way:
-
-@Example
-.ll 4.5i
-1.\ This is the first footnote.\c
-.ss 48
-.nop
-.ss 12
-2.\ This is the second footnote.
-@endExample
-
-@noindent
-The result:
-
-@Example
-1. This is the first footnote. 2. This
-is the second footnote.
-@endExample
-
-@noindent
-Note that the @code{\h} escape produces unbreakable space.
-@endDefreq
-
-@DefreqList {ce, [@Var{nnn}]}
-@DefregListEnd {.ce}
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Center text. While the @w{@samp{.ad c}} request also centers text,
-it fills the text as well. @code{ce} does not fill the
-text it affects. This request causes a break. The number of lines
-still to be centered is associated with the current environment
-(@pxref{Environments}).
-
-The following example demonstrates the differences.
-Here the input:
-
-@Example
-.ll 4i
-.ce 1000
-This is a small text fragment which shows the differences
-between the `.ce' and the `.ad c' request.
-.ce 0
-
-.ad c
-This is a small text fragment which shows the differences
-between the `.ce' and the `.ad c' request.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
- This is a small text fragment which
- shows the differences
-between the `.ce' and the `.ad c' request.
-
- This is a small text fragment which
-shows the differences between the `.ce'
- and the `.ad c' request.
-@endExample
-
-With no arguments, @code{ce} centers the next line of text. @var{nnn}
-specifies the number of lines to be centered. If the argument is zero
-or negative, centering is disabled.
-
-The basic length for centering text is the line length (as set with the
-@code{ll} request) minus the indentation (as set with the @code{in}
-request). Temporary indentation is ignored.
-
-As can be seen in the previous example, it is a common idiom to turn
-on centering for a large number of lines, and to turn off centering
-after text to be centered. This is useful for any request which takes
-a number of lines as an argument.
-
-The @code{.ce} read-only number register contains the number of lines
-remaining to be centered, as set by the @code{ce} request.
-@endDefreq
-
-@DefreqList {rj, [@Var{nnn}]}
-@DefregListEnd {.rj}
-@cindex justifying text (@code{rj})
-@cindex text, justifying (@code{rj})
-@cindex right-justifying (@code{rj})
-Justify unfilled text to the right margin. Arguments are identical to
-the @code{ce} request. The @code{.rj} read-only number register is
-the number of lines to be right-justified as set by the @code{rj}
-request. This request causes a break. The number of lines still to be
-right-justified is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
-@section Manipulating Hyphenation
-@cindex manipulating hyphenation
-@cindex hyphenation, manipulating
-
-
-Here a description of requests which influence hyphenation.
-
-@DefreqList {hy, [@Var{mode}]}
-@DefregListEnd {.hy}
-Enable hyphenation. The request has an optional numeric argument,
-@var{mode}, to restrict hyphenation if necessary:
-
-@table @code
-@item 1
-The default argument if @var{mode} is omitted. Hyphenate without
-restrictions. This is also the start-up value of @code{gtroff}.
-
-@item 2
-Do not hyphenate the last word on a page or column.
-
-@item 4
-Do not hyphenate the last two characters of a word.
-
-@item 8
-Do not hyphenate the first two characters of a word.
-@end table
-
-Values in the previous table are additive. For example, the
-value@tie{}12 causes @code{gtroff} to neither hyphenate the last
-two nor the first two characters of a word.
-
-@cindex hyphenation restrictions register (@code{.hy})
-The current hyphenation restrictions can be found in the read-only
-number register @samp{.hy}.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {nh, }
-Disable hyphenation (i.e., set the hyphenation mode to zero). Note
-that the hyphenation mode of the last call to @code{hy} is not
-remembered.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hlm, [@Var{nnn}]}
-@DefregItem {.hlm}
-@DefregListEnd {.hlc}
-@cindex explicit hyphen (@code{\%})
-@cindex hyphen, explicit (@code{\%})
-@cindex consecutive hyphenated lines (@code{hlm})
-@cindex lines, consecutive hyphenated (@code{hlm})
-@cindex hyphenated lines, consecutive (@code{hlm})
-Set the maximum number of consecutive hyphenated lines to @var{nnn}.
-If this number is negative, there is no maximum. The default value
-is@tie{}@minus{}1 if @var{nnn} is omitted. This value is associated
-with the current environment (@pxref{Environments}). Only lines
-output from a given environment count towards the maximum associated
-with that environment. Hyphens resulting from @code{\%} are counted;
-explicit hyphens are not.
-
-The current setting of @code{hlm} is available in the @code{.hlm}
-read-only number register. Also the number of immediately preceding
-consecutive hyphenated lines are available in the read-only number
-register @samp{.hlc}.
-@endDefreq
-
-@Defreq {hw, word1 word2 @dots{}}
-Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated. The
-words must be given with hyphens at the hyphenation points. For
-example:
-
-@Example
-.hw in-sa-lub-rious
-@endExample
-
-@noindent
-Besides the space character, any character whose hyphenation code value
-is zero can be used to separate the arguments of @code{hw} (see the
-documentation for the @code{hcode} request below for more information).
-In addition, this request can be used more than once.
-
-Hyphenation exceptions specified with the @code{hw} request are
-associated with the current hyphenation language; it causes an error
-if there is no current hyphenation language.
-
-This request is ignored if there is no parameter.
-
-In old versions of @code{troff} there was a limited amount of space to
-store such information; fortunately, with @code{gtroff}, this is no
-longer a restriction.
-@endDefreq
-
-@DefescList {\\%, , , }
-@deffnx Escape @t{\:}
-@ifnotinfo
-@esindex \:
-@end ifnotinfo
-@ifinfo
-@esindex \@r{<colon>}
-@end ifinfo
-@cindex hyphenation character (@code{\%})
-@cindex character, hyphenation (@code{\%})
-@cindex disabling hyphenation (@code{\%})
-@cindex hyphenation, disabling (@code{\%})
-To tell @code{gtroff} how to hyphenate words on the fly, use the
-@code{\%} escape, also known as the @dfn{hyphenation character}.
-Preceding a word with this character prevents it from being
-hyphenated; putting it inside a word indicates to @code{gtroff} that
-the word may be hyphenated at that point. Note that this mechanism
-only affects that one occurrence of the word; to change the
-hyphenation of a word for the entire document, use the @code{hw}
-request.
-
-The @code{\:} escape inserts a zero-width break point
-(that is, the word breaks but without adding a hyphen).
-
-@Example
-... check the /var/log/\:httpd/\:access_log file ...
-@endExample
-
-@cindex @code{\X}, followed by @code{\%}
-@cindex @code{\Y}, followed by @code{\%}
-@cindex @code{\%}, following @code{\X} or @code{\Y}
-Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
-escape in (say) @w{@samp{\X'...'\%foobar}} and
-@w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts
-a hyphenation point at the beginning of @samp{foobar}; most likely
-this isn't what you want to do.
-@endDefesc
-
-@Defreq {hc, [@Var{char}]}
-Change the hyphenation character to @var{char}. This character then
-works the same as the @code{\%} escape, and thus, no longer appears in
-the output. Without an argument, @code{hc} resets the hyphenation
-character to be @code{\%} (the default) only.
-
-The hyphenation character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hpf, pattern_file}
-@DefreqItem {hpfa, pattern_file}
-@DefreqListEnd {hpfcode, a b [c d @dots{}]}
-@cindex hyphenation patterns (@code{hpf})
-@cindex patterns for hyphenation (@code{hpf})
-Read in a file of hyphenation patterns. This file is searched for in
-the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
-searched for if the @option{-m@var{name}} option is specified.
-
-It should have the same format as (simple) @TeX{} patterns files.
-More specifically, the following scanning rules are implemented.
-
-@itemize @bullet
-@item
-A percent sign starts a comment (up to the end of the line)
-even if preceded by a backslash.
-
-@item
-No support for `digraphs' like @code{\$}.
-
-@item
-@code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}} (character
-code of @var{x} in the range 0-127) are recognized; other use of @code{^}
-causes an error.
-
-@item
-No macro expansion.
-
-@item
-@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
-(possibly with whitespace before and after the braces).
-Everything between the braces is taken as hyphenation patterns.
-Consequently, @code{@{} and @code{@}} are not allowed in patterns.
-
-@item
-Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
-exceptions.
-
-@item
-@code{\endinput} is recognized also.
-
-@item
-For backwards compatibility, if @code{\patterns} is missing,
-the whole file is treated as a list of hyphenation patterns
-(only recognizing the @code{%} character as the start of a comment).
-@end itemize
-
-If no @code{hpf} request is specified (either in the document or in a
-macro package), @code{gtroff} won't hyphenate at all.
-
-The @code{hpfa} request appends a file of patterns to the current list.
-
-The @code{hpfcode} request defines mapping values for character codes in
-hyphenation patterns. @code{hpf} or @code{hpfa} then apply the mapping
-(after reading the patterns) before replacing or appending them to
-the current list of patterns. Its arguments are pairs of character codes
--- integers from 0 to@tie{}255. The request maps character code@tie{}@var{a}
-to code@tie{}@var{b}, code@tie{}@var{c} to code@tie{}@var{d}, and so on. You
-can use character codes which would be invalid otherwise.
-
-@pindex troffrc
-@pindex troffrc-end
-@pindex hyphen.us
-@pindex hyphenex.us
-The set of hyphenation patterns is associated with the current language
-set by the @code{hla} request. The @code{hpf} request is usually
-invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
-@file{troffrc} loads hyphenation patterns and exceptions for American
-English (in files @file{hyphen.us} and @file{hyphenex.us}).
-
-A second call to @code{hpf} (for the same language) will replace the
-hyphenation patterns with the new ones.
-
-Invoking @code{hpf} causes an error if there is no current hyphenation
-language.
-@endDefreq
-
-@Defreq {hcode, c1 code1 [c2 code2 @dots{}]}
-@cindex hyphenation code (@code{hcode})
-@cindex code, hyphenation (@code{hcode})
-Set the hyphenation code of character @var{c1} to @var{code1}, that of
-@var{c2} to @var{code2}, etc. A hyphenation code must be a single
-input character (not a special character) other than a digit or a
-space.
-
-To make hyphenation work, hyphenation codes must be set up. At
-start-up, groff only assigns hyphenation codes to the letters
-@samp{a}-@samp{z} (mapped to themselves) and to the letters
-@samp{A}-@samp{Z} (mapped to @samp{a}-@samp{z}); all other hyphenation
-codes are set to zero. Normally, hyphenation patterns contain only
-lowercase letters which should be applied regardless of case. With
-other words, the words `FOO' and `Foo' should be hyphenated exactly the
-same way as the word `foo' is hyphenated, and this is what @code{hcode}
-is good for. Words which contain other letters won't be hyphenated
-properly if the corresponding hyphenation patterns actually do contain
-them. For example, the following @code{hcode} requests are necessary to
-assign hyphenation codes to the letters @samp{ÄäÖöÜüß} (this is needed
-for German):
-
-@Example
-.hcode ä ä Ä ä
-.hcode ö ö Ö ö
-.hcode ü ü Ü ü
-.hcode ß ß
-@endExample
-
-Without those assignments, groff treats German words like
-@w{`Kindergärten'} (the plural form of `kindergarten') as two
-substrings @w{`kinderg'} and @w{`rten'} because the hyphenation code
-of the umlaut@tie{}a is zero by default. There is a German
-hyphenation pattern which covers @w{`kinder'}, so groff finds the
-hyphenation `kin-der'. The other two hyphenation points
-(`kin-der-gär-ten') are missed.
-
-This request is ignored if it has no parameter.
-@endDefreq
-
-@DefreqList {hym, [@Var{length}]}
-@DefregListEnd {.hym}
-@cindex hyphenation margin (@code{hym})
-@cindex margin for hyphenation (@code{hym})
-@cindex @code{ad} request, and hyphenation margin
-Set the (right) hyphenation margin to @var{length}. If the current
-adjustment mode is not @samp{b} or @samp{n}, the line is not
-hyphenated if it is shorter than @var{length}. Without an argument,
-the hyphenation margin is reset to its default value, which is@tie{}0.
-The default scaling indicator for this request is @samp{m}. The
-hyphenation margin is associated with the current environment
-(@pxref{Environments}).
-
-A negative argument resets the hyphenation margin to zero, emitting
-a warning of type @samp{range}.
-
-@cindex hyphenation margin register (@code{.hym})
-The current hyphenation margin is available in the @code{.hym} read-only
-number register.
-@endDefreq
-
-@DefreqList {hys, [@Var{hyphenation_space}]}
-@DefregListEnd {.hys}
-@cindex hyphenation space (@code{hys})
-@cindex @code{ad} request, and hyphenation space
-Set the hyphenation space to @var{hyphenation_space}. If the current
-adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line
-if it can be justified by adding no more than @var{hyphenation_space}
-extra space to each word space. Without argument, the hyphenation
-space is set to its default value, which is@tie{}0. The default
-scaling indicator for this request is @samp{m}. The hyphenation
-space is associated with the current environment
-(@pxref{Environments}).
-
-A negative argument resets the hyphenation space to zero, emitting a
-warning of type @samp{range}.
-
-@cindex hyphenation space register (@code{.hys})
-The current hyphenation space is available in the @code{.hys} read-only
-number register.
-@endDefreq
-
-@Defreq {shc, [@Var{glyph}]}
-@cindex soft hyphen character, setting (@code{shc})
-@cindex character, soft hyphen, setting (@code{shc})
-@cindex glyph, soft hyphen (@code{hy})
-@cindex soft hyphen glyph (@code{hy})
-@cindex @code{char} request, and soft hyphen character
-@cindex @code{tr} request, and soft hyphen character
-Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
-hyphen character} is a misnomer since it is an output glyph.} If the
-argument is omitted, the soft hyphen character is set to the default
-glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
-The soft hyphen character is the glyph that is inserted when a word is
-hyphenated at a line break. If the soft hyphen character does not
-exist in the font of the character immediately preceding a potential
-break point, then the line is not broken at that point. Neither
-definitions (specified with the @code{char} request) nor translations
-(specified with the @code{tr} request) are considered when finding the
-soft hyphen character.
-@endDefreq
-
-@DefreqList {hla, language}
-@DefregListEnd {.hla}
-@cindex @code{hpf} request, and hyphenation language
-@cindex @code{hw} request, and hyphenation language
-@pindex troffrc
-@pindex troffrc-end
-Set the current hyphenation language to the string @var{language}.
-Hyphenation exceptions specified with the @code{hw} request and
-hyphenation patterns specified with the @code{hpf} and @code{hpfa}
-requests are both associated with the current hyphenation language.
-The @code{hla} request is usually invoked by the @file{troffrc} or the
-@file{troffrc-end} files; @file{troffrc} sets the default language to
-@samp{us}.
-
-@cindex hyphenation language register (@code{.hla})
-The current hyphenation language is available as a string in the
-read-only number register @samp{.hla}.
-
-@Example
-.ds curr_language \n[.hla]
-\*[curr_language]
- @result{} us
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
-@section Manipulating Spacing
-@cindex manipulating spacing
-@cindex spacing, manipulating
-
-@Defreq {sp, [@Var{distance}]}
-Space downwards @var{distance}. With no argument it advances
-1@tie{}line. A negative argument causes @code{gtroff} to move up the page
-the specified distance. If the argument is preceded by a @samp{|}
-then @code{gtroff} moves that distance from the top of the page. This
-request causes a line break. The default scaling indicator is @samp{v}.
-
-If a vertical trap is sprung during execution of @code{sp}, the amount of
-vertical space after the trap is discarded. For example, this
-
-@Example
-.de xxx
-..
-.
-.wh 0 xxx
-.
-.pl 5v
-foo
-.sp 2
-bar
-.sp 50
-baz
-@endExample
-
-@noindent
-results in
-
-@Example
-foo
-
-
-bar
-
-baz
-@endExample
-
-@cindex @code{sp} request, and traps
-@cindex discarded space in traps
-@cindex space, discarded, in traps
-@cindex traps, and discarded space
-The amount of discarded space is available in the number register
-@code{.trunc}.
-
-To protect @code{sp} against vertical traps, use the @code{vpt} request:
-
-@Example
-.vpt 0
-.sp -3
-.vpt 1
-@endExample
-@endDefreq
-
-@DefreqList {ls, [@Var{nnn}]}
-@DefregListEnd {.L}
-@cindex double-spacing (@code{ls})
-Output @w{@var{nnn}@minus{}1} blank lines after each line of text.
-With no argument, @code{gtroff} uses the previous value before the
-last @code{ls} call.
-
-@Example
-.ls 2 \" This causes double-spaced output
-.ls 3 \" This causes triple-spaced output
-.ls \" Again double-spaced
-@endExample
-
-The line spacing is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line spacing register (@code{.L})
-The read-only number register @code{.L} contains the current line
-spacing setting.
-@endDefreq
-
-@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs}
-as alternatives to @code{ls}.
-
-@DefescList {\\x, ', spacing, '}
-@DefregListEnd {.a}
-Sometimes, extra vertical spacing is only needed occasionally, e.g.@:
-to allow space for a tall construct (like an equation). The @code{\x}
-escape does this. The escape is given a numerical argument, usually
-enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
-is @samp{v}. If this number is positive extra vertical space is
-inserted below the current line. A negative number adds space above.
-If this escape is used multiple times on the same line, the maximum of
-the values is used.
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-@cindex extra post-vertical line space register (@code{.a})
-The @code{.a} read-only number register contains the most recent
-(nonnegative) extra vertical line space.
-
-Using @code{\x} can be necessary in combination with the @code{\b}
-escape, as the following example shows.
-
-@Example
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with \b'xyz'\x'-1m'\x'1m'.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a test with the \b escape.
-This is a test with the \b escape.
- x
-This is a test with y.
- z
-This is a test with the \b escape.
-This is a test with the \b escape.
-@endExample
-@endDefesc
-
-@DefreqList {ns, }
-@DefreqItem {rs, }
-@DefregListEnd {.ns}
-@cindex @code{sp} request, and no-space mode
-@cindex no-space mode (@code{ns})
-@cindex mode, no-space (@code{ns})
-@cindex blank lines, disabling
-@cindex lines, blank, disabling
-Enable @dfn{no-space mode}. In this mode, spacing (either via
-@code{sp} or via blank lines) is disabled. The @code{bp} request to
-advance to the next page is also disabled, except if it is accompanied
-by a page number (see @ref{Page Control}, for more information). This
-mode ends when actual text is output or the @code{rs} request is
-encountered which ends no-space mode. The read-only number register
-@code{.ns} is set to@tie{}1 as long as no-space mode is active.
-
-This request is useful for macros that conditionally
-insert vertical space before the text starts
-(for example, a paragraph macro could insert some space
-except when it is the first paragraph after a section header).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
-@section Tabs and Fields
-@cindex tabs, and fields
-@cindex fields, and tabs
-
-@cindex @acronym{EBCDIC} encoding of a tab
-A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
-char@tie{}5) causes a horizontal movement to the next tab stop (much
-like it did on a typewriter).
-
-@Defesc {\\t, , , }
-@cindex tab character, non-interpreted (@code{\t})
-@cindex character, tab, non-interpreted (@code{\t})
-This escape is a non-interpreted tab character. In copy mode
-(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
-@endDefesc
-
-@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
-@DefregListEnd {.tabs}
-Change tab stop positions. This request takes a series of tab
-specifiers as arguments (optionally divided into two groups with the
-letter @samp{T}) which indicate where each tab stop is to be
-(overriding any previous settings).
-
-Tab stops can be specified absolutely, i.e., as the distance from the
-left margin. For example, the following sets 6@tie{}tab stops every
-one inch.
-
-@Example
-.ta 1i 2i 3i 4i 5i 6i
-@endExample
-
-Tab stops can also be specified using a leading @samp{+}
-which means that the specified tab stop is set relative to
-the previous tab stop. For example, the following is equivalent to the
-previous example.
-
-@Example
-.ta 1i +1i +1i +1i +1i +1i
-@endExample
-
-@code{gtroff} supports an extended syntax to specify repeat values after
-the @samp{T} mark (these values are always taken as relative) -- this is
-the usual way to specify tabs set at equal intervals. The following is,
-yet again, the same as the previous examples. It does even more since
-it defines an infinite number of tab stops separated by one inch.
-
-@Example
-.ta T 1i
-@endExample
-
-Now we are ready to interpret the full syntax given at the beginning:
-Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
-tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
-and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
-@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
-
-Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
-20c 23c 28c 30c @dots{}}.
-
-The material in each tab column (i.e., the column between two tab stops)
-may be justified to the right or left or centered in the column. This
-is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
-specifier. The default justification is @samp{L}. Example:
-
-@Example
-.ta 1i 2iC 3iR
-@endExample
-
-Some notes:
-
-@itemize @bullet
-@item
-The default unit of the @code{ta} request is @samp{m}.
-
-@item
-A tab stop is converted into a non-breakable horizontal movement which
-can be neither stretched nor squeezed. For example,
-
-@Example
-.ds foo a\tb\tc
-.ta T 5i
-\*[foo]
-@endExample
-
-@noindent
-creates a single line which is a bit longer than 10@tie{}inches (a string
-is used to show exactly where the tab characters are). Now consider the
-following:
-
-@Example
-.ds bar a\tb b\tc
-.ta T 5i
-\*[bar]
-@endExample
-
-@noindent
-@code{gtroff} first converts the tab stops of the line into unbreakable
-horizontal movements, then splits the line after the second @samp{b}
-(assuming a sufficiently short line length). Usually, this isn't what
-the user wants.
-
-@item
-Superfluous tabs (i.e., tab characters which do not correspond to a tab
-stop) are ignored except the first one which delimits the characters
-belonging to the last tab stop for right-justifying or centering.
-Consider the following example
-
-@Example
-.ds Z foo\tbar\tfoo
-.ds ZZ foo\tbar\tfoobar
-.ds ZZZ foo\tbar\tfoo\tbar
-.ta 2i 4iR
-\*[Z]
-.br
-\*[ZZ]
-.br
-\*[ZZZ]
-.br
-@endExample
-
-@noindent
-which produces the following output:
-
-@Example
-foo bar foo
-foo bar foobar
-foo bar foobar
-@endExample
-
-@noindent
-The first line right-justifies the second `foo' relative to the tab
-stop. The second line right-justifies `foobar'. The third line finally
-right-justifies only `foo' because of the additional tab character which
-marks the end of the string belonging to the last defined tab stop.
-
-@item
-Tab stops are associated with the current environment
-(@pxref{Environments}).
-
-@item
-Calling @code{ta} without an argument removes all tab stops.
-
-@item
-@cindex tab stops, for TTY output devices
-The start-up value of @code{gtroff} is @w{@samp{T 0.8i}}.
-@end itemize
-
-@cindex tab settings register (@code{.tabs})
-The read-only number register @code{.tabs} contains a string
-representation of the current tab settings suitable for use as an
-argument to the @code{ta} request.
-
-@Example
-.ds tab-string \n[.tabs]
-\*[tab-string]
- @result{} T120u
-@endExample
-
-@cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
-@cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
-The @code{troff} version of the Plan@tie{}9 operating system uses
-register @code{.S} for the same purpose.
-@endDefreq
-
-@Defreq {tc, [@Var{fill-glyph}]}
-@cindex tab repetition character (@code{tc})
-@cindex character, tab repetition (@code{tc})
-@cindex glyph, tab repetition (@code{tc})
-Normally @code{gtroff} fills the space to the next tab stop with
-whitespace. This can be changed with the @code{tc} request. With no
-argument @code{gtroff} reverts to using whitespace, which is the
-default. The value of this @dfn{tab repetition character} is
-associated with the current environment
-(@pxref{Environments}).@footnote{@dfn{Tab repetition character} is a
-misnomer since it is an output glyph.}
-@endDefreq
-
-@DefreqList {linetabs, n}
-@DefregListEnd {.linetabs}
-@cindex tab, line-tabs mode
-@cindex line-tabs mode
-@cindex mode, line-tabs
-If @var{n} is missing or not zero, enable @dfn{line-tabs} mode,
-or disable it otherwise (the default).
-In line-tabs mode, @code{gtroff} computes tab distances
-relative to the (current) output line instead of the input line.
-
-For example, the following code:
-
-@Example
-.ds x a\t\c
-.ds y b\t\c
-.ds z c
-.ta 1i 3i
-\*x
-\*y
-\*z
-@endExample
-
-@noindent
-in normal mode, results in the output
-
-@Example
-a b c
-@endExample
-
-@noindent
-in line-tabs mode, the same code outputs
-
-@Example
-a b c
-@endExample
-
-Line-tabs mode is associated with the current environment.
-The read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
-mode, and 0 in normal mode.
-@endDefreq
-
-@menu
-* Leaders::
-* Fields::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Leaders, Fields, Tabs and Fields, Tabs and Fields
-@subsection Leaders
-@cindex leaders
-
-Sometimes it may may be desirable to use the @code{tc} request to fill a
-particular tab stop with a given glyph (for example dots in a table
-of contents), but also normal tab stops on the rest of the line. For
-this @code{gtroff} provides an alternate tab mechanism, called
-@dfn{leaders} which does just that.
-
-@cindex leader character
-A leader character (character code@tie{}1) behaves similarly to a tab
-character: It moves to the next tab stop. The only difference is that
-for this movement, the fill glyph defaults to a period character and
-not to space.
-
-@Defesc {\\a, , , }
-@cindex leader character, non-interpreted (@code{\a})
-@cindex character, leader, non-interpreted (@code{\a})
-This escape is a non-interpreted leader character. In copy mode
-(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
-character.
-@endDefesc
-
-@Defreq {lc, [@Var{fill-glyph}]}
-@cindex leader repetition character (@code{lc})
-@cindex character, leader repetition (@code{lc})
-@cindex glyph, leader repetition (@code{lc})
-Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
-repetition character} is a misnomer since it is an output glyph.}
-Without an argument, leaders act the same as tabs (i.e., using
-whitespace for filling). @code{gtroff}'s start-up value is a dot
-(@samp{.}). The value of the leader repetition character is
-associated with the current environment (@pxref{Environments}).
-@endDefreq
-
-@cindex table of contents
-@cindex contents, table of
-For a table of contents, to name an example, tab stops may be defined so
-that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots, and then the page
-number slightly separated from the dots.
-
-@Example
-.ds entry 1.1\tFoo\a\t12
-.lc .
-.ta 1i 5i +.25i
-\*[entry]
-@endExample
-
-@noindent
-This produces
-
-@Example
-1.1 Foo.......................................... 12
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Fields, , Leaders, Tabs and Fields
-@subsection Fields
-@cindex fields
-
-@cindex field delimiting character (@code{fc})
-@cindex delimiting character, for fields (@code{fc})
-@cindex character, field delimiting (@code{fc})
-@cindex field padding character (@code{fc})
-@cindex padding character, for fields (@code{fc})
-@cindex character, field padding (@code{fc})
-@dfn{Fields} are a more general way of laying out tabular data. A field
-is defined as the data between a pair of @dfn{delimiting characters}.
-It contains substrings which are separated by @dfn{padding characters}.
-The width of a field is the distance on the @emph{input} line from the
-position where the field starts to the next tab stop. A padding
-character inserts stretchable space similar to @TeX{}'s @code{\hss}
-command (thus it can even be negative) to make the sum of all substring
-lengths plus the stretchable space equal to the field width. If more
-than one padding character is inserted, the available space is evenly
-distributed among them.
-
-@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
-Define a delimiting and a padding character for fields. If the latter
-is missing, the padding character defaults to a space character. If
-there is no argument at all, the field mechanism is disabled (which is
-the default). Note that contrary to e.g.@: the tab repetition
-character, delimiting and padding characters are @emph{not} associated
-to the current environment (@pxref{Environments}).
-
-Example:
-
-@Example
-.fc # ^
-.ta T 3i
-#foo^bar^smurf#
-.br
-#foo^^bar^smurf#
-@endExample
-
-@noindent
-and here the result:
-
-@Example
-foo bar smurf
-foo bar smurf
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
-@section Character Translations
-@cindex character translations
-@cindex translations of characters
-
-@cindex control character, changing (@code{cc})
-@cindex character, control, changing (@code{cc})
-@cindex no-break control character, changing (@code{c2})
-@cindex character, no-break control, changing (@code{c2})
-@cindex control character, no-break, changing (@code{c2})
-The control character (@samp{.}) and the no-break control character
-(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
-respectively.
-
-@Defreq {cc, [@Var{c}]}
-Set the control character to@tie{}@var{c}. With no argument the default
-control character @samp{.} is restored. The value of the control
-character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {c2, [@Var{c}]}
-Set the no-break control character to@tie{}@var{c}. With no argument the
-default control character @samp{'} is restored. The value of the
-no-break control character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {eo, }
-@cindex disabling @code{\} (@code{eo})
-@cindex @code{\}, disabling (@code{eo})
-Disable the escape mechanism completely. After executing this
-request, the backslash character @samp{\} no longer starts an escape
-sequence.
-
-This request can be very helpful in writing macros since it is not
-necessary then to double the escape character. Here an example:
-
-@Example
-.\" This is a simplified version of the
-.\" .BR request from the man macro package
-.eo
-.de BR
-. ds result \&
-. while (\n[.$] >= 2) \@{\
-. as result \fB\$1\fR\$2
-. shift 2
-. \@}
-. if \n[.$] .as result \fB\$1
-\*[result]
-. ft R
-..
-.ec
-@endExample
-@endDefreq
-
-@Defreq {ec, [@Var{c}]}
-@cindex escape character, changing (@code{ec})
-@cindex character, escape, changing (@code{ec})
-Set the escape character to@tie{}@var{c}. With no argument the default
-escape character @samp{\} is restored. It can be also used to
-re-enable the escape mechanism after an @code{eo} request.
-
-Note that changing the escape character globally will likely break
-macro packages since @code{gtroff} has no mechanism to `intern' macros,
-i.e., to convert a macro definition into an internal form which is
-independent of its representation (@TeX{} has this mechanism).
-If a macro is called, it is executed literally.
-@endDefreq
-
-@DefreqList {ecs, }
-@DefreqListEnd {ecr, }
-The @code{ecs} request saves the current escape character
-in an internal register.
-Use this request in combination with the @code{ec} request to
-temporarily change the escape character.
-
-The @code{ecr} request restores the escape character
-saved with @code{ecs}.
-Without a previous call to @code{ecs}, this request
-sets the escape character to @code{\}.
-@endDefreq
-
-@DefescList {\\\\, , , }
-@DefescItem {\\e, , , }
-@DefescListEnd {\\E, , , }
-Print the current escape character (which is the backslash character
-@samp{\} by default).
-
-@code{\\} is a `delayed' backslash; more precisely, it is the default
-escape character followed by a backslash, which no longer has special
-meaning due to the leading escape character. It is @emph{not} an escape
-sequence in the usual sense! In any unknown escape sequence
-@code{\@var{X}} the escape character is ignored and @var{X} is printed.
-But if @var{X} is equal to the current escape character, no warning is
-emitted.
-
-As a consequence, only at top-level or in a diversion a backslash glyph is
-printed; in copy-in mode, it expands to a single backslash which then
-combines with the following character to an escape sequence.
-
-The @code{\E} escape differs from @code{\e} by printing an escape
-character that is not interpreted in copy mode.
-Use this to define strings with escapes that work
-when used in copy mode (for example, as a macro argument).
-The following example defines strings to begin and end
-a superscript:
-
-@Example
-.ds @{ \v'-.3m'\s'\En[.s]*60/100'
-.ds @} \s0\v'.3m'
-@endExample
-
-Another example to demonstrate the differences between the various escape
-sequences, using a strange escape character, @samp{-}.
-
-@Example
-.ec -
-.de xxx
---A'123'
-..
-.xxx
- @result{} -A'foo'
-@endExample
-
-@noindent
-The result is surprising for most users, expecting @samp{1} since
-@samp{foo} is a valid identifier. What has happened? As mentioned
-above, the leading escape character makes the following character
-ordinary. Written with the default escape character the sequence
-@samp{--} becomes @samp{\-} -- this is the minus sign.
-
-If the escape character followed by itself is a valid escape sequence,
-only @code{\E} yields the expected result:
-
-@Example
-.ec -
-.de xxx
--EA'123'
-..
-.xxx
- @result{} 1
-@endExample
-@endDefesc
-
-@Defesc {\\., , , }
-Similar to @code{\\}, the sequence @code{\.} isn't a real escape sequence.
-As before, a warning message is suppressed if the escape character is
-followed by a dot, and the dot itself is printed.
-
-@Example
-.de foo
-. nop foo
-.
-. de bar
-. nop bar
-\\..
-.
-..
-.foo
-.bar
- @result{} foo bar
-@endExample
-
-@noindent
-The first backslash is consumed while the macro is read, and the second
-is swallowed while exexuting macro @code{foo}.
-@endDefesc
-
-A @dfn{translation} is a mapping of an input character to an output
-glyph. The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (@pxref{Gtroff
-Internals}, for more on this process).
-
-@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@DefreqListEnd {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
-glyph@tie{}@var{d}, etc. If there is an odd number of arguments, the
-last one is translated to an unstretchable space (@w{@samp{\ }}).
-
-The @code{trin} request is identical to @code{tr},
-but when you unformat a diversion with @code{asciify}
-it ignores the translation.
-@xref{Diversions}, for details about the @code{asciify} request.
-
-Some notes:
-
-@itemize @bullet
-@item
-@cindex @code{\(}, and translations
-@cindex @code{\[}, and translations
-@cindex @code{\'}, and translations
-@cindex @code{\`}, and translations
-@cindex @code{\-}, and translations
-@cindex @code{\_}, and translations
-@cindex @code{\C}, and translations
-@cindex @code{\N}, and translations
-@cindex @code{char} request, and translations
-@cindex special characters
-@cindex character, special
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
-@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
-glyphs defined with the @code{char} request, and numbered glyphs
-(@code{\N'@var{xxx}'}) can be translated also.
-
-@item
-@cindex @code{\e}, and translations
-The @code{\e} escape can be translated also.
-
-@item
-@cindex @code{\%}, and translations
-@cindex @code{\~}, and translations
-Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
-@code{\%} and @code{\~} can't be mapped onto another glyph).
-
-@item
-@cindex backspace character, and translations
-@cindex character, backspace, and translations
-@cindex leader character, and translations
-@cindex character, leader, and translations
-@cindex newline character, and translations
-@cindex character, newline, and translations
-@cindex tab character, and translations
-@cindex character, tab, and translations
-@cindex @code{\a}, and translations
-@cindex @code{\t}, and translations
-The following characters can't be translated: space (with one exception,
-see below), backspace, newline, leader (and @code{\a}), tab (and
-@code{\t}).
-
-@item
-@cindex @code{shc} request, and translations
-Translations are not considered for finding the soft hyphen character
-set with the @code{shc} request.
-
-@item
-@cindex @code{\&}, and translations
-The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
-followed by the zero width space character) maps this character to nothing.
-
-@Example
-.tr a\&
-foo bar
- @result{} foo br
-@endExample
-
-@noindent
-It is even possible to map the space character to nothing:
-
-@Example
-.tr aa \&
-foo bar
- @result{} foobar
-@endExample
-
-@noindent
-As shown in the example, the space character can't be the first
-character/glyph pair as an argument of @code{tr}. Additionally, it is
-not possible to map the space character to any other glyph; requests
-like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
-
-If justification is active, lines are justified in spite of the
-`empty' space character (but there is no minimal distance, i.e.@: the
-space character, between words).
-
-@item
-After an output glyph has been constructed (this happens at the
-moment immediately before the glyph is appended to an output
-glyph list, either by direct output, in a macro, diversion, or
-string), it is no longer affected by @code{tr}.
-
-@item
-Translating character to glyphs where one of them or both are
-undefined is possible also; @code{tr} does not check whether the
-entities in its argument do exist.
-
-@xref{Gtroff Internals}.
-
-@item
-@code{troff} no longer has a hard-coded dependency on @w{Latin-1};
-all @code{char@var{XXX}} entities have been removed from the font
-description files. This has a notable consequence which shows up in
-warnings like @code{can't find character with input code @var{XXX}}
-if the @code{tr} request isn't handled properly.
-
-Consider the following translation:
-
-@Example
-.tr éÉ
-@endExample
-
-@noindent
-This maps input character @code{é} onto glyph @code{É}, which is
-identical to glyph @code{char201}. But this glyph intentionally
-doesn't exist! Instead, @code{\[char201]} is treated as an input
-character entity and is by default mapped onto @code{\['E]}, and
-@code{gtroff} doesn't handle translations of translations.
-
-The right way to write the above translation is
-
-@Example
-.tr é\['E]
-@endExample
-
-@noindent
-With other words, the first argument of @code{tr} should be an input
-character or entity, and the second one a glyph entity.
-
-@item
-Without an argument, the @code{tr} request is ignored.
-@end itemize
-@endDefreq
-
-@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@cindex @code{\!}, and @code{trnt}
-@code{trnt} is the same as the @code{tr} request except that the
-translations do not apply to text that is transparently throughput
-into a diversion with @code{\!}. @xref{Diversions}, for more
-information.
-
-For example,
-
-@Example
-.tr ab
-.di x
-\!.tm a
-.di
-.x
-@endExample
-
-@noindent
-prints @samp{b} to the standard error stream; if @code{trnt} is used
-instead of @code{tr} it prints @samp{a}.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
-@section Troff and Nroff Mode
-@cindex troff mode
-@cindex mode, troff
-@cindex nroff mode
-@cindex mode, nroff
-
-Originally, @code{nroff} and @code{troff} were two separate programs,
-the former for TTY output, the latter for everything else. With GNU
-@code{troff}, both programs are merged into one executable, sending
-its output to a device driver (@code{grotty} for TTY devices,
-@code{grops} for @sc{PostScript}, etc.) which interprets the
-intermediate output of @code{gtroff}. For @acronym{UNIX} @code{troff}
-it makes sense to talk about @dfn{Nroff mode} and @dfn{Troff mode}
-since the differences are hardcoded. For GNU @code{troff}, this
-distinction is not appropriate because @code{gtroff} simply takes the
-information given in the font files for a particular device without
-handling requests specially if a TTY output device is used.
-
-Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: @code{gtroff} provides two built-in
-conditions @samp{n} and @samp{t} for the @code{if}, @code{ie}, and
-@code{while} requests to decide whether @code{gtroff} shall behave
-like @code{nroff} or like @code{troff}.
-
-@Defreq {troff, }
-@pindex troffrc
-@pindex troffrc-end
-Make the @samp{t} built-in condition true (and the @samp{n} built-in
-condition false) for @code{if}, @code{ie}, and @code{while}
-conditional requests. This is the default if @code{gtroff}
-(@emph{not} @code{groff}) is started with the @option{-R} switch to
-avoid loading of the start-up files @file{troffrc} and
-@file{troffrc-end}. Without @option{-R}, @code{gtroff} stays in troff
-mode if the output device is not a TTY (e.g.@: `ps').
-@endDefreq
-
-@Defreq {nroff, }
-@pindex tty.tmac
-Make the @samp{n} built-in condition true (and the @samp{t} built-in
-condition false) for @code{if}, @code{ie}, and @code{while}
-conditional requests. This is the default if @code{gtroff} uses a TTY
-output device; the code for switching to nroff mode is in the file
-@file{tty.tmac} which is loaded by the start-up file @code{troffrc}.
-@endDefreq
-
-@xref{Conditionals and Loops}, for more details on built-in
-conditions.
-
-
-@c =====================================================================
-
-@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
-@section Line Layout
-@cindex line layout
-@cindex layout, line
-
-@cindex dimensions, line
-@cindex line dimensions
-The following drawing shows the dimensions which @code{gtroff} uses for
-placing a line of output onto the page. They are labeled with the
-request which manipulates each dimension.
-
-@Example
- -->| in |<--
- |<-----------ll------------>|
- +----+----+----------------------+----+
- | : : : |
- +----+----+----------------------+----+
- -->| po |<--
- |<--------paper width---------------->|
-@endExample
-
-@noindent
-These dimensions are:
-
-@ftable @code
-@item po
-@cindex left margin (@code{po})
-@cindex margin, left (@code{po})
-@cindex page offset (@code{po})
-@cindex offset, page (@code{po})
-@dfn{Page offset} -- this is the leftmost position of text on the final
-output, defining the @dfn{left margin}.
-
-@item in
-@cindex indentation (@code{in})
-@cindex line indentation (@code{in})
-@dfn{Indentation} -- this is the distance from the left margin where
-text is printed.
-
-@item ll
-@cindex line length (@code{ll})
-@cindex length of line (@code{ll})
-@dfn{Line length} -- this is the distance from the left margin to right
-margin.
-@end ftable
-
-A simple demonstration:
-
-@Example
-.ll 3i
-This is text without indentation.
-The line length has been set to 3\~inch.
-.in +.5i
-.ll -.5i
-Now the left and right margins are both increased.
-.in
-.ll
-Calling .in and .ll without parameters restore
-the previous values.
-@endExample
-
-Result:
-
-@Example
-This is text without indenta-
-tion. The line length has
-been set to 3 inch.
- Now the left and
- right margins are
- both increased.
-Calling .in and .ll without
-parameters restore the previ-
-ous values.
-@endExample
-
-@DefreqList {po, [@Var{offset}]}
-@DefreqItem {po, @t{+}@Var{offset}}
-@DefreqItem {po, @t{-}@Var{offset}}
-@DefregListEnd {.o}
-@pindex troffrc
-Set horizontal page offset to @var{offset} (or increment or decrement
-the current value by @var{offset}). Note that this request does not
-cause a break, so changing the page offset in the middle of text being
-filled may not yield the expected result. The initial value is
-1@dmn{i}. For TTY output devices, it is set to 0 in the startup file
-@file{troffrc}; the default scaling indicator is @samp{m} (and
-not @samp{v} as incorrectly documented in the original
-@acronym{UNIX} troff manual).
-
-The current page offset can be found in the read-only number register
-@samp{.o}.
-
-If @code{po} is called without an argument, the page offset is reset to
-the previous value before the last call to @code{po}.
-
-@Example
-.po 3i
-\n[.o]
- @result{} 720
-.po -1i
-\n[.o]
- @result{} 480
-.po
-\n[.o]
- @result{} 720
-@endExample
-@endDefreq
-
-@DefreqList {in, [@Var{indent}]}
-@DefreqItem {in, @t{+}@Var{indent}}
-@DefreqItem {in, @t{-}@Var{indent}}
-@DefregListEnd {.i}
-Set indentation to @var{indent} (or increment or decrement the
-current value by @var{indent}). This request causes a break.
-Initially, there is no indentation.
-
-If @code{in} is called without an argument, the indentation is reset to
-the previous value before the last call to @code{in}. The default
-scaling indicator is @samp{m}.
-
-The indentation is associated with the current environment
-(@pxref{Environments}).
-
-If a negative indentation value is specified (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-indentation to zero.
-
-The effect of @code{in} is delayed until a partially collected line
-(if it exists) is output. A temporary indentation value is reset to
-zero also.
-
-The current indentation (as set by @code{in}) can be found in the
-read-only number register @samp{.i}.
-@endDefreq
-
-@DefreqList {ti, offset}
-@DefreqItem {ti, @t{+}@Var{offset}}
-@DefreqItem {ti, @t{-}@Var{offset}}
-@DefregListEnd {.in}
-Temporarily indent the next output line by @var{offset}. If an
-increment or decrement value is specified, adjust the temporary
-indentation relative to the value set by the @code{in} request.
-
-This request causes a break; its value is associated with the current
-environment (@pxref{Environments}). The default scaling indicator
-is @samp{m}. A call of @code{ti} without an argument is ignored.
-
-If the total indentation value is negative (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-temporary indentation to zero. `Total indentation' is either
-@var{offset} if specified as an absolute value, or the temporary plus
-normal indentation, if @var{offset} is given as a relative value.
-
-The effect of @code{ti} is delayed until a partially collected line (if
-it exists) is output.
-
-The read-only number register @code{.in} is the indentation that applies
-to the current output line.
-
-The difference between @code{.i} and @code{.in} is that the latter takes
-into account whether a partially collected line still uses the old
-indentation value or a temporary indentation value is active.
-@endDefreq
-
-@DefreqList {ll, [@Var{length}]}
-@DefreqItem {ll, @t{+}@Var{length}}
-@DefreqItem {ll, @t{-}@Var{length}}
-@DefregItem {.l}
-@DefregListEnd {.ll}
-Set the line length to @var{length} (or increment or decrement the
-current value by @var{length}). Initially, the line length is set to
-6.5@dmn{i}. The effect of @code{ll} is delayed until a partially
-collected line (if it exists) is output. The default scaling
-indicator is @samp{m}.
-
-If @code{ll} is called without an argument, the line length is reset to
-the previous value before the last call to @code{ll}. If a negative
-line length is specified (which is not allowed), @code{gtroff} emits a
-warning of type @samp{range} and sets the line length to zero.
-
-The line length is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line length register (@code{.l})
-The current line length (as set by @code{ll}) can be found in the
-read-only number register @samp{.l}. The read-only number register
-@code{.ll} is the line length that applies to the current output line.
-
-Similar to @code{.i} and @code{.in}, the difference between @code{.l}
-and @code{.ll} is that the latter takes into account whether a partially
-collected line still uses the old line length value.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Line Control, Page Layout, Line Layout, gtroff Reference
-@section Line Control
-@cindex line control
-@cindex control, line
-
-It is important to understand how @code{gtroff} handles input and output
-lines.
-
-Many escapes use positioning relative to the input line. For example,
-this
-
-@Example
-This is a \h'|1.2i'test.
-
-This is a
-\h'|1.2i'test.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a test.
-
-This is a test.
-@endExample
-
-The main usage of this feature is to define macros which act exactly
-at the place where called.
-
-@Example
-.\" A simple macro to underline a word
-.de underline
-. nop \\$1\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-In the above example, @samp{|0} specifies a negative distance from the
-current position (at the end of the just emitted argument @code{\$1}) back
-to the beginning of the input line. Thus, the @samp{\l} escape draws a
-line from right to left.
-
-@cindex input line continuation (@code{\})
-@cindex line, input, continuation (@code{\})
-@cindex continuation, input line (@code{\})
-@cindex output line, continuation (@code{\c})
-@cindex line, output, continuation (@code{\c})
-@cindex continuation, output line (@code{\c})
-@cindex interrupted line
-@cindex line, interrupted
-@code{gtroff} makes a difference between input and output line
-continuation; the latter is also called @dfn{interrupting} a line.
-
-@DefescList {\\@key{RET}, , ,}
-@DefescItem {\\c, , ,}
-@DefregListEnd{.int}
-Continue a line. @code{\@key{RET}} (this is a backslash at the end
-of a line immediately followed by a newline) works on the input level,
-suppressing the effects of the following newline in the input.
-
-@Example
-This is a \
-.test
- @result{} This is a .test
-@endExample
-
-The @samp{|} operator is also affected.
-
-@cindex @code{\R}, after @code{\c}
-@code{\c} works on the output level. Anything after this escape on the
-same line is ignored, except @code{\R} which works as usual. Anything
-before @code{\c} on the same line will be appended to the current partial
-output line. The next non-command line after an interrupted line counts
-as a new input line.
-
-The visual results depend on whether no-fill mode is active.
-
-@itemize @bullet
-@item
-@cindex @code{\c}, and no-fill mode
-@cindex no-fill mode, and @code{\c}
-@cindex mode, no-fill, and @code{\c}
-If no-fill mode is active (using the @code{nf} request), the next input
-text line after @code{\c} will be handled as a continuation of the same
-input text line.
-
-@Example
-.nf
-This is a \c
-test.
- @result{} This is a test.
-@endExample
-
-@item
-@cindex @code{\c}, and fill mode
-@cindex fill mode, and @code{\c}
-@cindex mode, fill, and @code{\c}
-If fill mode is active (using the @code{fi} request), a word interrupted
-with @code{\c} will be continued with the text on the next input text line,
-without an intervening space.
-
-@Example
-This is a te\c
-st.
- @result{} This is a test.
-@endExample
-@end itemize
-
-Note that an intervening control line which causes a break is stronger
-than @code{\c}, flushing out the current partial line in the usual way.
-
-@cindex interrupted line register (@code{.int})
-The @code{.int} register contains a positive value
-if the last output line was interrupted with @code{\c}; this is
-associated with the current environment (@pxref{Environments}).
-@endDefesc
-
-@c =====================================================================
-
-@node Page Layout, Page Control, Line Control, gtroff Reference
-@section Page Layout
-@cindex page layout
-@cindex layout, page
-
-@code{gtroff} provides some very primitive operations for controlling
-page layout.
-
-@DefreqList {pl, [@Var{length}]}
-@DefreqItem {pl, @t{+}@Var{length}}
-@DefreqItem {pl, @t{-}@Var{length}}
-@DefregListEnd {.p}
-@cindex page length (@code{pl})
-@cindex length of page (@code{pl})
-Set the @dfn{page length} to @var{length} (or increment or decrement
-the current value by @var{length}). This is the length of the
-physical output page. The default scaling indicator is @samp{v}.
-
-@cindex page length register (@code{.p})
-The current setting can be found in the read-only number register
-@samp{.p}.
-
-@cindex top margin
-@cindex margin, top
-@cindex bottom margin
-@cindex margin, bottom
-Note that this only specifies the size of the page, not the top and
-bottom margins. Those are not set by @code{gtroff} directly.
-@xref{Traps}, for further information on how to do this.
-
-Negative @code{pl} values are possible also, but not very useful: No
-trap is sprung, and each line is output on a single page (thus
-suppressing all vertical spacing).
-
-If no argument or an invalid argument is given, @code{pl} sets the page
-length to 11@dmn{i}.
-@endDefreq
-
-@cindex headers
-@cindex footers
-@cindex titles
-@code{gtroff} provides several operations which help in setting up top
-and bottom titles (or headers and footers).
-
-@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
-@cindex title line (@code{tl})
-@cindex three-part title (@code{tl})
-@cindex page number character (@code{%})
-Print a @dfn{title line}. It consists of three parts: a left
-justified portion, a centered portion, and a right justified portion.
-The argument separator @samp{'} can be replaced with any character not
-occurring in the title line. The @samp{%} character is replaced with
-the current page number. This character can be changed with the
-@code{pc} request (see below).
-
-Without argument, @code{tl} is ignored.
-
-Some notes:
-
-@itemize @bullet
-@item
-A title line is not restricted to the top or bottom of a page.
-
-@item
-@code{tl} prints the title line immediately, ignoring a partially filled
-line (which stays untouched).
-
-@item
-It is not an error to omit closing delimiters. For example,
-@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
-title line with the left justified word @samp{foo}; the centered and
-right justfied parts are empty.
-
-@item
-@code{tl} accepts the same parameter delimiting characters as the
-@code{\A} escape; see @ref{Escapes}.
-@end itemize
-@endDefreq
-
-@DefreqList {lt, [@Var{length}]}
-@DefreqItem {lt, @t{+}@Var{length}}
-@DefreqItem {lt, @t{-}@Var{length}}
-@DefregListEnd {.lt}
-@cindex length of title line (@code{lt})
-@cindex title line, length (@code{lt})
-@cindex title line length register (@code{.lt})
-The title line is printed using its own line length, which is
-specified (or incremented or decremented) with the @code{lt} request.
-Initially, the title line length is set to 6.5@dmn{i}. If a negative
-line length is specified (which is not allowed), @code{gtroff} emits a
-warning of type @samp{range} and sets the title line length to zero.
-The default scaling indicator is @samp{m}. If @code{lt} is called
-without an argument, the title length is reset to the previous value
-before the last call to @code{lt}.
-
-The current setting of this is available in the @code{.lt} read-only
-number register; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {pn, page}
-@DefreqItem {pn, @t{+}@Var{page}}
-@DefreqItem {pn, @t{-}@Var{page}}
-@DefregListEnd {.pn}
-@cindex page number (@code{pn})
-@cindex number, page (@code{pn})
-Change (increase or decrease) the page number of the @emph{next} page.
-The only argument is the page number; the request is ignored without a
-parameter.
-
-The read-only number register @code{.pn} contains the number of the next
-page: either the value set by a @code{pn} request, or the number of the
-current page plus@tie{}1.
-@endDefreq
-
-@Defreq {pc, [@Var{char}]}
-@cindex changing the page number character (@code{pc})
-@cindex page number character, changing (@code{pc})
-@vindex %
-Change the page number character (used by the @code{tl} request) to a
-different character. With no argument, this mechanism is disabled.
-Note that this doesn't affect the number register@tie{}@code{%}.
-@endDefreq
-
-@xref{Traps}.
-
-
-@c =====================================================================
-
-@node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
-@section Page Control
-@cindex page control
-@cindex control, page
-
-@DefreqList {bp, [@Var{page}]}
-@DefreqItem {bp, @t{+}@Var{page}}
-@DefreqItem {bp, @t{-}@Var{page}}
-@DefregListEnd {%}
-@cindex new page (@code{bp})
-@cindex page, new (@code{bp})
-Stop processing the current page and move to the next page. This
-request causes a break. It can also take an argument to set
-(increase, decrease) the page number of the next page (which actually
-becomes the current page after @code{bp} has finished). The
-difference between @code{bp} and @code{pn} is that @code{pn} does not
-cause a break or actually eject a page. @xref{Page Layout}.
-
-@Example
-.de newpage \" define macro
-'bp \" begin page
-'sp .5i \" vertical space
-.tl 'left top'center top'right top' \" title
-'sp .3i \" vertical space
-.. \" end macro
-@endExample
-
-@cindex @code{bp} request, and top-level diversion
-@cindex top-level diversion, and @code{bp}
-@cindex diversion, top-level, and @code{bp}
-@code{bp} has no effect if not called within the top-level diversion
-(@pxref{Diversions}).
-
-@cindex page number register (@code{%})
-@cindex current page number (@code{%})
-The read-write register@tie{}@code{%} holds the current page number.
-
-The number register @code{.pe} is set to@tie{}1 while @code{bp} is
-active. @xref{Page Location Traps}.
-@endDefreq
-
-@Defreq {ne, [@Var{space}]}
-@cindex orphan lines, preventing with @code{ne}
-@cindex conditional page break (@code{ne})
-@cindex page break, conditional (@code{ne})
-It is often necessary to force a certain amount of space before a new
-page occurs. This is most useful to make sure that there is not a
-single @dfn{orphan} line left at the bottom of a page. The @code{ne}
-request ensures that there is a certain distance, specified by the
-first argument, before the next page is triggered (see @ref{Traps},
-for further information). The default scaling indicator for @code{ne}
-is @samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
-argument is given.
-
-For example, to make sure that no fewer than 2@tie{}lines get orphaned,
-do the following before each paragraph:
-
-@Example
-.ne 2
-text text text
-@endExample
-
-@code{ne} will then automatically cause a page break if there is space
-for one line only.
-@endDefreq
-
-@DefreqList {sv, [@Var{space}]}
-@DefreqListEnd {os, }
-@cindex @code{ne} request, comparison with @code{sv}
-@code{sv} is similar to the @code{ne} request; it reserves the
-specified amount of vertical space. If the desired amount of space
-exists before the next trap (or the bottom page boundary if no trap is
-set), the space is output immediately (ignoring a partially filled line
-which stays untouched). If there is not enough space, it is stored for
-later output via the @code{os} request. The default value is@tie{}1@dmn{v}
-if no argument is given; the default scaling indicator is @samp{v}.
-
-@cindex @code{sv} request, and no-space mode
-@cindex @code{os} request, and no-space mode
-Both @code{sv} and @code{os} ignore no-space mode. While the @code{sv}
-request allows negative values for @var{space}, @code{os} will ignore
-them.
-@endDefreq
-
-@Defreg {nl}
-@cindex current vertical position (@code{nl})
-@cindex vertical position, current (@code{nl})
-@cindex position, vertical, current (@code{nl})
-This register contains the current vertical position. If the vertical
-position is zero and the top of page transition hasn't happened yet,
-@code{nl} is set to negative value. @code{gtroff} itself does this at
-the very beginning of a document before anything has been printed, but
-the main usage is to plant a header trap on a page if this page has
-already started.
-
-Consider the following:
-
-@Example
-.de xxx
-. sp
-. tl ''Header''
-. sp
-..
-.
-First page.
-.bp
-.wh 0 xxx
-.nr nl (-1)
-Second page.
-@endExample
-
-@noindent
-Result:
-
-@Example
-First page.
-
-...
-
- Header
-
-Second page.
-
-...
-@endExample
-
-@noindent
-Without resetting @code{nl} to a negative value, the just planted trap
-would be active beginning with the @emph{next} page, not the current
-one.
-
-@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
-registers.
-@endDefreg
-
-@c =====================================================================
-
-@node Fonts and Symbols, Sizes, Page Control, gtroff Reference
-@section Fonts and Symbols
-@cindex fonts
-
-@code{gtroff} can switch fonts at any point in the text.
-
-The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-These are Times Roman, Italic, Bold, and Bold Italic. For non-TTY
-devices, there is also at least one symbol font which contains various
-special symbols (Greek, mathematics).
-
-@menu
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
-@subsection Changing Fonts
-@cindex fonts
-
-@DefreqList {ft, [@Var{font}]}
-@DefescItem {\\f, , f, }
-@DefescItem {\\f, @Lparen{}, fn, }
-@DefescItem {\\f, @Lbrack{}, font, @Rbrack{}}
-@DefregListEnd {.sty}
-@cindex changing fonts (@code{ft}, @code{\f})
-@cindex fonts, changing (@code{ft}, @code{\f})
-@cindex @code{sty} request, and changing fonts
-@cindex @code{fam} request, and changing fonts
-@cindex @code{\F}, and changing fonts
-@kindex styles
-@kindex family
-@pindex DESC
-The @code{ft} request and the @code{\f} escape change the current font
-to @var{font} (one-character name@tie{}@var{f}, two-character name
-@var{fn}).
-
-If @var{font} is a style name (as set with the @code{sty} request or
-with the @code{styles} command in the @file{DESC} file), use it within
-the current font family (as set with the @code{fam} request, @code{\F}
-escape, or with the @code{family} command in the @file{DESC} file).
-
-@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
-@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
-With no argument or using @samp{P} as an argument, @code{.ft} switches
-to the previous font. Use @code{\f[]} to do this with the escape. The
-old syntax forms @code{\fP} or @code{\f[P]} are also supported.
-
-Fonts are generally specified as upper-case strings, which are usually
-1@tie{}to 4 characters representing an abbreviation or acronym of the
-font name. This is no limitation, just a convention.
-
-The example below produces two identical lines.
-
-@Example
-eggs, bacon,
-.ft B
-spam
-.ft
-and sausage.
-
-eggs, bacon, \fBspam\fP and sausage.
-@endExample
-
-Note that @code{\f} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the font on
-the fly:
-
-@Example
-.mc \f[I]x\f[]
-@endExample
-
-The current style name is available in the read-only number register
-@samp{.sty} (this is a string-valued register); if the current font
-isn't a style, the empty string is returned. It is associated with
-the current environment.
-
-@xref{Font Positions}, for an alternative syntax.
-@endDefreq
-
-@Defreq {ftr, f [@Var{g}]}
-@cindex @code{ft} request, and font translations
-@cindex @code{ul} request, and font translations
-@cindex @code{bd} request, and font translations
-@cindex @code{\f}, and font translations
-@cindex @code{cs} request, and font translations
-@cindex @code{tkf} request, and font translations
-@cindex @code{special} request, and font translations
-@cindex @code{fspecial} request, and font translations
-@cindex @code{fp} request, and font translations
-@cindex @code{sty} request, and font translations
-@cindex @code{if} request, and font translations
-@cindex @code{ie} request, and font translations
-@cindex @code{while} request, and font translations
-Translate font@tie{}@var{f} to font@tie{}@var{g}. Whenever a font
-named@tie{}@var{f} is referred to in a @code{\f} escape sequence,
-in the @code{F} and @code{S} conditional operators, or in the
-@code{ft}, @code{ul}, @code{bd}, @code{cs}, @code{tkf},
-@code{special}, @code{fspecial}, @code{fp}, or @code{sty} requests,
-font@tie{}@var{g} is used. If @var{g} is missing or equal to@tie{}@var{f}
-the translation is undone.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
-@subsection Font Families
-@cindex font families
-@cindex families, font
-@cindex font styles
-@cindex styles, font
-
-Due to the variety of fonts available, @code{gtroff} has added the
-concept of @dfn{font families} and @dfn{font styles}. The fonts are
-specified as the concatenation of the font family and style. Specifying
-a font without the family part causes @code{gtroff} to use that style of
-the current family.
-
-@cindex PostScript fonts
-@cindex fonts, PostScript
-Currently, fonts for the devices @option{-Tps}, @option{-Tdvi},
-@option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are set up to this
-mechanism. By default, @code{gtroff} uses the Times family with the four
-styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-
-This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (@pxref{Groff Options}).
-
-@DefreqList {fam, [@Var{family}]}
-@DefregItem {.fam}
-@DefescItem {\\F, , f, }
-@DefescItem {\\F, @Lparen{}, fm, }
-@DefescItem {\\F, @Lbrack{}, family, @Rbrack{}}
-@DefregListEnd {.fn}
-@cindex changing font family (@code{fam}, @code{\F})
-@cindex font family, changing (@code{fam}, @code{\F})
-Switch font family to @var{family} (one-character name@tie{}@var{f},
-two-character name @var{fm}). If no argument is given, switch
-back to the previous font family. Use @code{\F[]} to do this with the
-escape. Note that @code{\FP} doesn't work; it selects font family
-@samp{P} instead.
-
-The value at start-up is @samp{T}.
-The current font family is available in the read-only number register
-@samp{.fam} (this is a string-valued register); it is associated with
-the current environment.
-
-@Example
-spam,
-.fam H \" helvetica family
-spam, \" used font is family H + style R = HR
-.ft B \" family H + style B = font HB
-spam,
-.fam T \" times family
-spam, \" used font is family T + style B = TB
-.ft AR \" font AR (not a style)
-baked beans,
-.ft R \" family T + style R = font TR
-and spam.
-@endExample
-
-Note that @code{\F} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the font family on
-the fly:
-
-@Example
-.mc \F[P]x\F[]
-@endExample
-
-The @samp{.fn} register contains the current @dfn{real font name}
-of the current font.
-This is a string-valued register.
-If the current font is a style, the value of @code{\n[.fn]}
-is the proper concatenation of family and style name.
-@endDefreq
-
-@Defreq {sty, n style}
-@cindex changing font style (@code{sty})
-@cindex font style, changing (@code{sty})
-@cindex @code{cs} request, and font styles
-@cindex @code{bd} request, and font styles
-@cindex @code{tkf} request, and font styles
-@cindex @code{uf} request, and font styles
-@cindex @code{fspecial} request, and font styles
-Associate @var{style} with font position@tie{}@var{n}. A font position
-can be associated either with a font or with a style. The current
-font is the index of a font position and so is also either a font or a
-style. If it is a style, the font that is actually used is the font
-which name is the concatenation of the name of the current
-family and the name of the current style. For example, if the current
-font is@tie{}1 and font position@tie{}1 is associated with style
-@samp{R} and the current font family is @samp{T}, then font
-@samp{TR} will be used. If the current font is not a style, then the
-current family is ignored. If the requests @code{cs}, @code{bd},
-@code{tkf}, @code{uf}, or @code{fspecial} are applied to a style,
-they will instead be applied to the member of the current family
-corresponding to that style.
-
-@var{n}@tie{}must be a non-negative integer value.
-
-@pindex DESC
-@kindex styles
-The default family can be set with the @option{-f} option
-(@pxref{Groff Options}). The @code{styles} command in the @file{DESC}
-file controls which font positions (if any) are initially associated
-with styles rather than fonts. For example, the default setting for
-@sc{PostScript} fonts
-
-@Example
-styles R I B BI
-@endExample
-
-@noindent
-is equivalent to
-
-@Example
-.sty 1 R
-.sty 2 I
-.sty 3 B
-.sty 4 BI
-@endExample
-
-@code{fam} and @code{\F} always check whether the current font position
-is valid; this can give surprising results if the current font position is
-associated with a style.
-
-In the following example, we want to access the @sc{PostScript} font
-@code{FooBar} from the font family @code{Foo}:
-
-@Example
-.sty \n[.fp] Bar
-.fam Foo
- @result{} warning: can't find font `FooR'
-@endExample
-
-@noindent
-The default font position at start-up is@tie{}1; for the
-@sc{PostScript} device, this is associated with style @samp{R}, so
-@code{gtroff} tries to open @code{FooR}.
-
-A solution to this problem is to use a dummy font like the following:
-
-@Example
-.fp 0 dummy TR \" set up dummy font at position 0
-.sty \n[.fp] Bar \" register style `Bar'
-.ft 0 \" switch to font at position 0
-.fam Foo \" activate family `Foo'
-.ft Bar \" switch to font `FooBar'
-@endExample
-
-@xref{Font Positions}.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Positions, Using Symbols, Font Families, Fonts and Symbols
-@subsection Font Positions
-@cindex font positions
-@cindex positions, font
-
-For the sake of old phototypesetters and compatibility with old versions
-of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
-on which various fonts are mounted.
-
-@DefreqList {fp, pos font [@Var{external-name}]}
-@DefregItem {.f}
-@DefregListEnd {.fp}
-@cindex mounting font (@code{fp})
-@cindex font, mounting (@code{fp})
-Mount font @var{font} at position @var{pos} (which must be a
-non-negative integer). This numeric position can then be referred to
-with font changing commands. When @code{gtroff} starts it is using
-font position@tie{}1 (which must exist; position@tie{}0 is unused
-usually at start-up).
-
-@cindex font position register (@code{.f})
-The current font in use, as a font position, is available in the
-read-only number register @samp{.f}. This can be useful to remember the
-current font for later recall. It is associated with the current
-environment (@pxref{Environments}).
-
-@Example
-.nr save-font \n[.f]
-.ft B
-... text text text ...
-.ft \n[save-font]
-@endExample
-
-@cindex next free font position register (@code{.fp})
-The number of the next free font position is available in the read-only
-number register @samp{.fp}. This is useful when mounting a new font,
-like so:
-
-@Example
-.fp \n[.fp] NEATOFONT
-@endExample
-
-@pindex DESC@r{, and font mounting}
-Fonts not listed in the @file{DESC} file are automatically mounted on
-the next available font position when they are referenced. If a font
-is to be mounted explicitly with the @code{fp} request on an unused
-font position, it should be mounted on the first unused font position,
-which can be found in the @code{.fp} register. Although @code{gtroff}
-does not enforce this strictly, it is not allowed to mount a font at a
-position whose number is much greater (approx.@: 1000 positions) than
-that of any currently used position.
-
-The @code{fp} request has an optional third argument. This argument
-gives the external name of the font, which is used for finding the font
-description file. The second argument gives the internal name of the
-font which is used to refer to the font in @code{gtroff} after it has
-been mounted. If there is no third argument then the internal name is
-used as the external name. This feature makes it possible to use
-fonts with long names in compatibility mode.
-@endDefreq
-
-Both the @code{ft} request and the @code{\f} escape have alternative
-syntax forms to access font positions.
-
-@DefreqList {ft, nnn}
-@DefescItem {\\f, , n, }
-@DefescItem {\\f, @Lparen{}, nn, }
-@DefescListEnd {\\f, @Lbrack{}, nnn, @Rbrack{}}
-@cindex changing font position (@code{\f})
-@cindex font position, changing (@code{\f})
-@cindex @code{sty} request, and font positions
-@cindex @code{fam} request, and font positions
-@cindex @code{\F}, and font positions
-@kindex styles
-@kindex family
-@pindex DESC
-Change the current font position to @var{nnn} (one-digit
-position@tie{}@var{n}, two-digit position @var{nn}), which must be a
-non-negative integer.
-
-If @var{nnn} is associated with a style (as set with the @code{sty}
-request or with the @code{styles} command in the @file{DESC} file), use
-it within the current font family (as set with the @code{fam} request,
-the @code{\F} escape, or with the @code{family} command in the @file{DESC}
-file).
-
-@Example
-this is font 1
-.ft 2
-this is font 2
-.ft \" switch back to font 1
-.ft 3
-this is font 3
-.ft
-this is font 1 again
-@endExample
-
-@xref{Changing Fonts}, for the standard syntax form.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Using Symbols, Special Fonts, Font Positions, Fonts and Symbols
-@subsection Using Symbols
-@cindex using symbols
-@cindex symbols, using
-
-@cindex glyph
-@cindex character
-@cindex ligature
-A @dfn{glyph} is a graphical representation of a @dfn{character}.
-While a character is an abstract entity containing semantic
-information, a glyph is something which can be actually seen on screen
-or paper. It is possible that a character has multiple glyph
-representation forms (for example, the character `A' can be either
-written in a roman or an italic font, yielding two different glyphs);
-sometimes more than one character maps to a single glyph (this is a
-@dfn{ligature} -- the most common is `fi').
-
-@cindex symbol
-@cindex special fonts
-@kindex fonts
-@pindex DESC
-@cindex @code{special} request, and glyph search order
-@cindex @code{fspecial} request, and glyph search order
-A @dfn{symbol} is simply a named glyph. Within @code{gtroff}, all
-glyph names of a particular font are defined in its font file. If the
-user requests a glyph not available in this font, @code{gtroff} looks
-up an ordered list of @dfn{special fonts}. By default, the
-@sc{PostScript} output device supports the two special fonts @samp{SS}
-(slanted symbols) and @samp{S} (symbols) (the former is looked up
-before the latter). Other output devices use different names for
-special fonts. Fonts mounted with the @code{fonts} keyword in the
-@file{DESC} file are globally available. To install additional
-special fonts locally (i.e.@: for a particular font), use the
-@code{fspecial} request.
-
-Here the exact rules how @code{gtroff} searches a given symbol:
-
-@itemize @bullet
-@item
-If the symbol has been defined with the @code{char} request, use it.
-This hides a symbol with the same name in the current font.
-
-@item
-Check the current font.
-
-@item
-If the symbol has been defined with the @code{fchar} request, use it.
-
-@item
-Check whether the current font has a font-specific list of special fonts;
-test all fonts in the order of appearance in the last @code{fspecial}
-call if appropriate.
-
-@item
-If the symbol has been defined with the @code{fschar} request for the
-current font, use it.
-
-@item
-Check all fonts in the order of appearance in the last @code{special}
-call.
-
-@item
-If the symbol has been defined with the @code{schar} request, use it.
-
-@item
-As a last resort, consult all fonts loaded up to now for special fonts
-and check them, starting with the lowest font number. Note that this can
-sometimes lead to surprising results since the @code{fonts} line in the
-@file{DESC} file often contains empty positions which are filled later
-on. For example, consider the following:
-
-@Example
-fonts 3 0 0 FOO
-@endExample
-
-@noindent
-This mounts font @code{foo} at font position@tie{}3. We assume that
-@code{FOO} is a special font, containing glyph @code{foo},
-and that no font has been loaded yet. The line
-
-@Example
-.fspecial BAR BAZ
-@endExample
-
-@noindent
-makes font @code{BAZ} special only if font @code{BAR} is active. We
-further assume that @code{BAZ} is really a special font, i.e., the font
-description file contains the @code{special} keyword, and that it
-also contains glyph @code{foo} with a special shape fitting to font
-@code{BAR}. After executing @code{fspecial}, font @code{BAR} is loaded at
-font position@tie{}1, and @code{BAZ} at position@tie{}2.
-
-We now switch to a new font @code{XXX}, trying to access glyph @code{foo}
-which is assumed to be missing. There are neither font-specific special
-fonts for @code{XXX} nor any other fonts made special with the
-@code{special} request, so @code{gtroff} starts the search for special
-fonts in the list of already mounted fonts, with increasing font
-positions. Consequently, it finds @code{BAZ} before @code{FOO} even for
-@code{XXX} which is not the intended behaviour.
-@end itemize
-
-@xref{Font Files}, and @ref{Special Fonts}, for more details.
-
-@cindex list of available glyphs (@cite{groff_char(7)} man page)
-@cindex available glyphs, list (@cite{groff_char(7)} man page)
-@cindex glyphs, available, list (@cite{groff_char(7)} man page)
-The list of available symbols is device dependent; see the
-@cite{groff_char(7)} man page for a complete list of all glyphs. For
-example, say
-
-@Example
-man -Tdvi groff_char > groff_char.dvi
-@endExample
-
-@noindent
-for a list using the default DVI fonts (not all versions of the
-@code{man} program support the @option{-T} option). If you want to
-use an additional macro package to change the used fonts, @code{groff}
-must be called directly:
-
-@Example
-groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-@endExample
-
-@cindex composite glyph names
-@cindex glyph names, composite
-@cindex groff glyph list (GGL)
-@cindex GGL (groff glyph list)
-@cindex adobe glyph list (AGL)
-@cindex AGL (adobe glyph list)
-Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm
-which is described in
-@uref{http://partners.adobe.com@//asn@//tech@//type@//unicodegn.jsp}.
-The (frozen) set of glyph names which can't be derived algorithmically
-is called @dfn{groff glyph list (GGL)}.
-
-@itemize @bullet
-@item
-A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]] which is
-not a composite character will be named
-@code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}. @var{X} must be an
-uppercase hexadecimal digit. Examples: @code{u1234}, @code{u008E},
-@code{u12DB8}. The largest Unicode value is 0x10FFFF. There must be at
-least four @code{X} digits; if necessary, add leading zeroes (after the
-@samp{u}). No zero padding is allowed for character codes greater than
-0xFFFF. Surrogates (i.e., Unicode values greater than 0xFFFF
-represented with character codes from the surrogate area U+D800-U+DFFF)
-are not allowed too.
-
-@item
-A glyph representing more than a single input character will be named
-
-@display
-@samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
-@end display
-
-@noindent
-Example: @code{u0045_0302_0301}.
-
-For simplicity, all Unicode characters which are composites must be
-decomposed maximally (this is normalization form@tie{}D in the Unicode
-standard); for example, @code{u00CA_0301} is not a valid glyph name
-since U+00CA (@sc{latin capital letter e with circumflex}) can be
-further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
-(@sc{combining circumflex accent}). @code{u0045_0302_0301} is thus the
-glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
-acute}.
-
-@item
-groff maintains a table to decompose all algorithmically derived glyph
-names which are composites itself. For example, @code{u0100} (@sc{latin
-letter a with macron}) will be automatically decomposed into
-@code{u0041_0304}. Additionally, a glyph name of the GGL is preferred
-to an algorithmically derived glyph name; groff also automatically does
-the mapping. Example: The glyph @code{u0045_0302} will be mapped to
-@code{^E}.
-
-@item
-glyph names of the GGL can't be used in composite glyph names; for
-example, @code{^E_u0301} is invalid.
-@end itemize
-
-@DefescList {\\, @Lparen{}, nm, }
-@DefescItem {\\, @Lbrack{}, name, @Rbrack{}}
-@DefescListEnd {\\, @Lbrack{}, component1 component2 @dots{}, @Rbrack{}}
-Insert a symbol @var{name} (two-character name @var{nm}) or a composite
-glyph with component glyphs @var{component1}, @var{component2},
-@enddots{} There is no special syntax for one-character names -- the
-natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
-that a one-character symbol is not the same as an input character, i.e.,
-the character @code{a} is not the same as @code{\[a]}. By default,
-@code{groff} defines only a single one-character symbol, @code{\[-]}; it
-is usually accessed as @code{\-}. On the other hand, @code{gtroff} has
-the special feature that @code{\[char@var{XXX}]} is the same as the
-input character with character code @var{XXX}. For example,
-@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
-encoding is active.}
-
-If @var{name} is undefined, a warning of type @samp{char} is generated,
-and the escape is ignored. @xref{Debugging}, for information about
-warnings.
-
-groff resolves @code{\[...]} with more than a single component as
-follows:
-
-@itemize @bullet
-@item
-Any component which is found in the GGL will be converted to the
-@code{u@var{XXXX}} form.
-
-@item
-Any component @code{u@var{XXXX}} which is found in the list of
-decomposable glyphs will be decomposed.
-
-@item
-The resulting elements are then concatenated with @samp{_} inbetween,
-dropping the leading @samp{u} in all elements but the first.
-@end itemize
-
-No check for the existence of any component (similar to @code{tr}
-request) will be done.
-
-Examples:
-
-@table @code
-@item \[A ho]
-@samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
-final glyph name would be @code{u0041_02DB}. Note this is not the
-expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
-a proper composite a non-spacing ogonek (U+0328) is necessary. Looking
-into the file @file{composite.tmac} one can find @w{@samp{.composite ho
-u0328}} which changes the mapping of @samp{ho} while a composite glyph
-name is constructed, causing the final glyph name to be
-@code{u0041_0328}.
-
-@item \[^E u0301]
-@itemx \[^E aa]
-@itemx \[E a^ aa]
-@itemx \[E ^ ']
-@samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
-@code{u0045_0302_0301} in all forms (assuming proper calls of the
-@code{composite} request).
-@end table
-
-It is not possible to define glyphs with names like @w{@samp{A ho}}
-within a groff font file. This is not really a limitation; instead, you
-have to define @code{u0041_0328}.
-@endDefesc
-
-@Defesc {\\C, ', xxx, '}
-@cindex named character (@code{\C})
-@cindex character, named (@code{\C})
-Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
-misnomer since it accesses an output glyph.} Normally it is more
-convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
-that it is compatible with newer versions of @acronym{AT&T}
-@code{troff} and is available in compatibility mode.
-@endDefesc
-
-@Defreq {composite, from to}
-@pindex composite.tmac
-Map glyph name @var{from} to glyph name @var{to} if it is used in
-@code{\[...]} with more than one component. See above for examples.
-
-This mapping is based on glyph names only; no check for the existence of
-either glyph is done.
-
-A set of default mappings for many accents can be found in the file
-@file{composite.tmac} which is loaded at start-up.
-@endDefreq
-
-@Defesc {\\N, ', n, '}
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-@cindex @code{char} request, used with @code{\N}
-@cindex Unicode
-Typeset the glyph with code@tie{}@var{n} in the current font
-(@code{n}@tie{}is @strong{not} the input character code). The
-number @var{n}@tie{}can be any non-negative decimal integer. Most devices
-only have glyphs with codes between 0 and@tie{}255; the Unicode
-output device uses codes in the range 0--65535. If the current
-font does not contain a glyph with that code, special fonts are
-@emph{not} searched. The @code{\N} escape sequence can be
-conveniently used in conjunction with the @code{char} request:
-
-@Example
-.char \[phone] \f[ZD]\N'37'
-@endExample
-
-@noindent
-@pindex DESC
-@cindex unnamed glyphs
-@cindex glyphs, unnamed
-The code of each glyph is given in the fourth column in the font
-description file after the @code{charset} command. It is possible to
-include unnamed glyphs in the font description file by using a
-name of @samp{---}; the @code{\N} escape sequence is the only way to
-use these.
-
-No kerning is applied to glyphs accessed with @code{\N}.
-@endDefesc
-
-Some escape sequences directly map onto special glyphs.
-
-@Defesc {\\', , , }
-This is a backslash followed by the apostrophe character, @acronym{ASCII}
-character @code{0x27} (@acronym{EBCDIC} character @code{0x7D}). The same
-as @code{\[aa]}, the acute accent.
-@endDefesc
-
-@Defesc {\\`, , , }
-This is a backslash followed by @acronym{ASCII} character @code{0x60}
-(@acronym{EBCDIC} character @code{0x79} usually). The same as
-@code{\[ga]}, the grave accent.
-@endDefesc
-
-@Defesc {\\-, , , }
-This is the same as @code{\[-]}, the minus sign in the current font.
-@endDefesc
-
-@Defreq {cflags, n c1 c2 @dots{}}
-@cindex glyph properties (@code{cflags})
-@cindex character properties (@code{cflags})
-@cindex properties of glyphs (@code{cflags})
-@cindex properties of characters (@code{cflags})
-Input characters and symbols have certain properties associated
-with it.@footnote{Note that the output glyphs themselves don't have
-such properties. For @code{gtroff}, a glyph is a numbered box with
-a given width, depth, and height, nothing else. All manipulations
-with the @code{cflags} request work on the input level.} These
-properties can be modified with the @code{cflags} request. The
-first argument is the sum of the desired flags and the remaining
-arguments are the characters or symbols to have those properties.
-It is possible to omit the spaces between the characters or symbols.
-
-@table @code
-@item 1
-@cindex end-of-sentence characters
-@cindex characters, end-of-sentence
-The character ends sentences (initially characters @samp{.?!} have this
-property).
-
-@item 2
-@cindex hyphenating characters
-@cindex characters, hyphenation
-Lines can be broken before the character (initially no characters have
-this property).
-
-@item 4
-@cindex @code{hy} glyph, and @code{cflags}
-@cindex @code{em} glyph, and @code{cflags}
-Lines can be broken after the character (initially the character
-@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this property).
-
-@item 8
-@cindex overlapping characters
-@cindex characters, overlapping
-@cindex @code{ul} glyph, and @code{cflags}
-@cindex @code{rn} glyph, and @code{cflags}
-@cindex @code{ru} glyph, and @code{cflags}
-@cindex @code{radicalex} glyph, and @code{cflags}
-@cindex @code{sqrtex} glyph, and @code{cflags}
-The character overlaps horizontally if used as a horizontal line building
-element. Initially the symbols @samp{\[ul]}, @samp{\[rn]}, @samp{\[ru]},
-@samp{\[radicalex]}, and @samp{\[sqrtex]} have this property.
-
-@item 16
-@cindex @code{br} glyph, and @code{cflags}
-The character overlaps vertically if used as vertical line building element.
-Initially symbol @samp{\[br]} has this property.
-
-@item 32
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-An end-of-sentence character followed by any number of characters with
-this property is treated as the end of a sentence if followed by a
-newline or two spaces; in other words the character is
-@dfn{transparent} for the purposes of end-of-sentence recognition --
-this is the same as having a zero space factor in @TeX{} (initially
-characters @samp{"')]*} and the symbols @samp{\[dg]} and @samp{\[rq]} have
-this property).
-@end table
-@endDefreq
-
-@DefreqList {char, g [@Var{string}]}
-@DefreqItem {fchar, g [@Var{string}]}
-@DefreqItem {fschar, f g [@Var{string}]}
-@DefreqListEnd {schar, g [@Var{string}]}
-@cindex defining character (@code{char})
-@cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
-@cindex character, defining (@code{char})
-@cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
-@cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
-@cindex creating new characters (@code{char})
-@cindex defining symbol (@code{char})
-@cindex symbol, defining (@code{char})
-@cindex defining glyph (@code{char})
-@cindex glyph, defining (@code{char})
-@cindex escape character, while defining glyph
-@cindex character, escape, while defining glyph
-@cindex @code{tr} request, and glyph definitions
-@cindex @code{cp} request, and glyph definitions
-@cindex @code{rc} request, and glyph definitions
-@cindex @code{lc} request, and glyph definitions
-@cindex @code{\l}, and glyph definitions
-@cindex @code{\L}, and glyph definitions
-@cindex @code{\&}, and glyph definitions
-@cindex @code{\e}, and glyph definitions
-@cindex @code{hcode} request, and glyph definitions
-Define a new glyph@tie{}@var{g} to be @var{string} (which can be
-empty).@footnote{@code{char} is a misnomer since an output glyph is
-defined.} Every time glyph@tie{}@var{g} needs to be printed,
-@var{string} is processed in a temporary environment and the result is
-wrapped up into a single object. Compatibility mode is turned off and
-the escape character is set to @samp{\} while @var{string} is being
-processed. Any emboldening, constant spacing or track kerning is
-applied to this object rather than to individual characters in
-@var{string}.
-
-A glyph defined by these requests can be used just
-like a normal glyph provided by the output device. In particular,
-other characters can be translated to it with the @code{tr} or
-@code{trin} requests; it can be made the leader character by the
-@code{lc} request; repeated patterns can be drawn with the glyph
-using the @code{\l} and @code{\L} escape sequences; words containing
-the glyph can be hyphenated correctly if the @code{hcode} request
-is used to give the glyph's symbol a hyphenation code.
-
-There is a special anti-recursion feature: Use of @code{g} within
-the glyph's definition is handled like normal characters and symbols
-not defined with @code{char}.
-
-Note that the @code{tr} and @code{trin} requests take precedence if
-@code{char} accesses the same symbol.
-
-@Example
-.tr XY
-X
- @result{} Y
-.char X Z
-X
- @result{} Y
-.tr XX
-X
- @result{} Z
-@endExample
-
-The @code{fchar} request defines a fallback glyph:
-@code{gtroff} only checks for glyphs defined with @code{fchar}
-if it cannot find the glyph in the current font.
-@code{gtroff} carries out this test before checking special fonts.
-
-@code{fschar} defines a fallback glyph for font@tie{}@var{f}: @code{gtroff}
-checks for glyphs defined with @code{fschar} after the list of fonts
-declared as font-specific special fonts with the @code{fspecial} request,
-but before the list of fonts declared as global special fonts with the
-@code{special} request.
-
-Finally, the @code{schar} request defines a global fallback glyph:
-@code{gtroff} checks for glyphs defined with @code{schar} after the list
-of fonts declared as global special fonts with the @code{special} request,
-but before the already mounted special fonts.
-
-@xref{Using Symbols}, for a detailed description of the glyph
-searching mechanism in @code{gtroff}.
-@endDefreq
-
-@DefreqList {rchar, c1 c2 @dots{}}
-@DefreqListEnd {rfschar, f c1 c2 @dots{}}
-@cindex removing glyph definition (@code{rchar}, @code{rfschar})
-@cindex glyph, removing definition (@code{rchar}, @code{rfschar})
-@cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
-Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
-This undoes the effect of a @code{char}, @code{fchar}, or
-@code{schar} request.
-
-It is possible to omit the whitespace between arguments.
-
-The request @code{rfschar} removes glyph definitions defined with
-@code{fschar} for glyph@tie{}f.
-@endDefreq
-
-@xref{Special Characters}.
-
-@c ---------------------------------------------------------------------
-
-@node Special Fonts, Artificial Fonts, Using Symbols, Fonts and Symbols
-@subsection Special Fonts
-@cindex special fonts
-@cindex fonts, special
-
-Special fonts are those that @code{gtroff} searches
-when it cannot find the requested glyph in the current font.
-The Symbol font is usually a special font.
-
-@code{gtroff} provides the following two requests to add more special
-fonts. @xref{Using Symbols}, for a detailed description of the glyph
-searching mechanism in @code{gtroff}.
-
-Usually, only non-TTY devices have special fonts.
-
-@DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
-@DefreqListEnd {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
-@kindex fonts
-@pindex DESC
-Use the @code{special} request to define special fonts. Initially, this
-list is empty.
-
-Use the @code{fspecial} request to designate special fonts only when
-font@tie{}@var{f} is active. Initially, this list is empty.
-
-Previous calls to @code{special} or @code{fspecial} are overwritten;
-without arguments, the particular list of special fonts is set to empty.
-Special fonts are searched in the order they appear as arguments.
-
-All fonts which appear in a call to @code{special} or @code{fspecial} are
-loaded.
-
-@xref{Using Symbols}, for the exact search order of glyphs.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
-@subsection Artificial Fonts
-@cindex artificial fonts
-@cindex fonts, artificial
-
-There are a number of requests and escapes for artificially creating
-fonts. These are largely vestiges of the days when output devices
-did not have a wide variety of fonts, and when @code{nroff} and
-@code{troff} were separate programs. Most of them are no longer
-necessary in GNU @code{troff}. Nevertheless, they are supported.
-
-@DefescList {\\H, ', height, '}
-@DefescItem {\\H, ', @t{+}height, '}
-@DefescItem {\\H, ', @t{-}height, '}
-@DefregListEnd {.height}
-@cindex changing the font height (@code{\H})
-@cindex font height, changing (@code{\H})
-@cindex height, font, changing (@code{\H})
-Change (increment, decrement) the height of the current font, but not
-the width. If @var{height} is zero, restore the original height.
-Default scaling indicator is @samp{z}.
-
-The read-only number register @code{.height} contains the font height as
-set by @code{\H}.
-
-Currently, only the @option{-Tps} device supports this feature.
-
-Note that @code{\H} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the font on
-the fly:
-
-@Example
-.mc \H'+5z'x\H'0'
-@endExample
-
-In compatibility mode, @code{gtroff} behaves differently: If an
-increment or decrement is used, it is always taken relative to the
-current point size and not relative to the previously selected font
-height. Thus,
-
-@Example
-.cp 1
-\H'+5'test \H'+5'test
-@endExample
-
-@noindent
-prints the word @samp{test} twice with the same font height (five
-points larger than the current font size).
-@endDefesc
-
-@DefescList {\\S, ', slant, '}
-@DefregListEnd {.slant}
-@cindex changing the font slant (@code{\S})
-@cindex font slant, changing (@code{\S})
-@cindex slant, font, changing (@code{\S})
-Slant the current font by @var{slant} degrees. Positive values slant
-to the right. Only integer values are possible.
-
-The read-only number register @code{.slant} contains the font slant as
-set by @code{\S}.
-
-Currently, only the @option{-Tps} device supports this feature.
-
-Note that @code{\S} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the font on
-the fly:
-
-@Example
-.mc \S'20'x\S'0'
-@endExample
-
-This request is incorrectly documented in the original @acronym{UNIX}
-troff manual; the slant is always set to an absolute value.
-@endDefesc
-
-@Defreq {ul, [@Var{lines}]}
-@cindex underlining (@code{ul})
-The @code{ul} request normally underlines subsequent lines if a TTY
-output device is used. Otherwise, the lines are printed in italics
-(only the term `underlined' is used in the following). The single
-argument is the number of input lines to be underlined; with no
-argument, the next line is underlined. If @var{lines} is zero or
-negative, stop the effects of @code{ul} (if it was active). Requests
-and empty lines do not count for computing the number of underlined
-input lines, even if they produce some output like @code{tl}. Lines
-inserted by macros (e.g.@: invoked by a trap) do count.
-
-At the beginning of @code{ul}, the current font is stored and the
-underline font is activated. Within the span of a @code{ul} request,
-it is possible to change fonts, but after the last line affected by
-@code{ul} the saved font is restored.
-
-This number of lines still to be underlined is associated with the
-current environment (@pxref{Environments}). The underline font can be
-changed with the @code{uf} request.
-
-@c XXX @xref should be changed to grotty
-
-@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
-@c implemented in for TTY output devices, and which problems can arise.
-
-The @code{ul} request does not underline spaces.
-@endDefreq
-
-@Defreq {cu, [@Var{lines}]}
-@cindex continuous underlining (@code{cu})
-@cindex underlining, continuous (@code{cu})
-The @code{cu} request is similar to @code{ul} but underlines spaces as
-well (if a TTY output device is used).
-@endDefreq
-
-@Defreq {uf, font}
-@cindex underline font (@code{uf})
-@cindex font for underlining (@code{uf})
-Set the underline font (globally) used by @code{ul} and @code{cu}. By
-default, this is the font at position@tie{}2. @var{font} can be either
-a non-negative font position or the name of a font.
-@endDefreq
-
-@DefreqList {bd, font [@Var{offset}]}
-@DefreqItem {bd, font1 font2 [@Var{offset}]}
-@DefregListEnd {.b}
-@cindex imitating bold face (@code{bd})
-@cindex bold face, imitating (@code{bd})
-Artificially create a bold font by printing each glyph twice,
-slightly offset.
-
-Two syntax forms are available.
-
-@itemize @bullet
-@item
-Imitate a bold font unconditionally. The first argument specifies the
-font to embolden, and the second is the number of basic units, minus
-one, by which the two glyphs are offset. If the second argument is
-missing, emboldening is turned off.
-
-@var{font} can be either a non-negative font position or the name of a
-font.
-
-@var{offset} is available in the @code{.b} read-only register if a
-special font is active; in the @code{bd} request, its default unit is
-@samp{u}.
-
-@cindex @code{fspecial} request, and imitating bold
-@kindex special
-@cindex embolding of special fonts
-@cindex special fonts, emboldening
-@item
-Imitate a bold form conditionally. Embolden @var{font1} by
-@var{offset} only if font @var{font2} is the current font. This
-command can be issued repeatedly to set up different emboldening
-values for different current fonts. If the second argument is
-missing, emboldening is turned off for this particular current font.
-
-This affects special fonts only (either set up with the @code{special}
-command in font files or with the @code{fspecial} request).
-@end itemize
-@endDefreq
-
-@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
-@cindex constant glyph space mode (@code{cs})
-@cindex mode for constant glyph space (@code{cs})
-@cindex glyph, constant space
-@cindex @code{ps} request, and constant glyph space mode
-Switch to and from @dfn{constant glyph space mode}. If activated, the
-width of every glyph is @math{@var{width}/36} ems. The em size is
-given absolutely by @var{em-size}; if this argument is missing, the em
-value is taken from the current font size (as set with the @code{ps}
-request) when the font is effectively in use. Without second and
-third argument, constant glyph space mode is deactivated.
-
-Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
-an integer.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Ligatures and Kerning, , Artificial Fonts, Fonts and Symbols
-@subsection Ligatures and Kerning
-@cindex ligatures and kerning
-@cindex kerning and ligatures
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph. For example, the letters `f' and `i' can form a
-ligature `fi' as in the word `file'. This produces a cleaner look
-(albeit subtle) to the printed output. Usually, ligatures are not
-available in fonts for TTY output devices.
-
-Most @sc{PostScript} fonts support the fi and fl ligatures. The C/A/T
-typesetter that was the target of @acronym{AT&T} @code{troff} also
-supported `ff', `ffi', and `ffl' ligatures. Advanced typesetters or
-`expert' fonts may include ligatures for `ft' and `ct', although GNU
-@code{troff} does not support these (yet).
-
-Only the current font is checked for ligatures and kerns; neither special
-fonts nor entities defined with the @code{char} request (and its siblings)
-are taken into account.
-
-@DefreqList {lg, [@Var{flag}]}
-@DefregListEnd {.lg}
-@cindex activating ligatures (@code{lg})
-@cindex ligatures, activating (@code{lg})
-@cindex ligatures enabled register (@code{.lg})
-Switch the ligature mechanism on or off; if the parameter is non-zero
-or missing, ligatures are enabled, otherwise disabled. Default is on.
-The current ligature mode can be found in the read-only number register
-@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled, 0@tie{}otherwise).
-
-Setting the ligature mode to@tie{}2 enables the two-character ligatures
-(fi, fl, and ff) and disables the three-character ligatures (ffi and
-ffl).
-@endDefreq
-
-@dfn{Pairwise kerning} is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability.
-In most cases (but not always) the distance is decreased.
-@iftex
-For example, compare the combination of the letters `V' and `A'. With
-kerning, `VA' is printed. Without kerning it appears as `V@w{}A'.
-@end iftex
-Typewriter-like fonts and fonts for terminals where all glyphs
-have the same width don't use kerning.
-
-@DefreqList {kern, [@Var{flag}]}
-@DefregListEnd {.kern}
-@cindex activating kerning (@code{kern})
-@cindex kerning, activating (@code{kern})
-@cindex kerning enabled register (@code{.kern})
-Switch kerning on or off. If the parameter is non-zero or missing,
-enable pairwise kerning, otherwise disable it. The read-only number
-register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
-0@tie{}otherwise.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-If the font description file contains pairwise kerning information,
-glyphs from that font are kerned. Kerning between two glyphs
-can be inhibited by placing @code{\&} between them: @samp{V\&A}.
-
-@xref{Font File Format}.
-@endDefreq
-
-@cindex track kerning
-@cindex kerning, track
-@dfn{Track kerning} expands or reduces the space between glyphs.
-This can be handy, for example, if you need to squeeze a long word
-onto a single line or spread some text to fill a narrow column. It
-must be used with great care since it is usually considered bad
-typography if the reader notices the effect.
-
-@Defreq {tkf, f s1 n1 s2 n2}
-@cindex activating track kerning (@code{tkf})
-@cindex track kerning, activating (@code{tkf})
-Enable track kerning for font@tie{}@var{f}. If the current font
-is@tie{}@var{f} the width of every glyph is increased by an amount
-between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
-the current point size is less than or equal to @var{s1} the width is
-increased by @var{n1}; if it is greater than or equal to @var{s2} the
-width is increased by @var{n2}; if the point size is greater than or
-equal to @var{s1} and less than or equal to @var{s2} the increase in
-width is a linear function of the point size.
-
-The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
-@samp{p} for @var{n1} and @var{n2}.
-
-Note that the track kerning amount is added even to the rightmost glyph
-in a line; for large values it is thus recommended to increase the line
-length by the same amount to compensate it.
-@endDefreq
-
-Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed. There are two escapes to help
-with this.
-
-@Defesc {\\/, , , }
-@cindex italic correction (@code{\/})
-@cindex correction, italic (@code{\/})
-@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
-@cindex roman glyph, correction after italic glyph (@code{\/})
-@cindex italic glyph, correction before roman glyph (@code{\/})
-@cindex glyph, italic correction (@code{\/})
-Increase the width of the preceding glyph so that the spacing
-between that glyph and the following glyph is correct if the
-following glyph is a roman glyph. For example, if an
-italic@tie{}@code{f} is immediately followed by a roman right
-parenthesis, then in many fonts the top right portion of the@tie{}@code{f}
-overlaps the top left of the right parenthesis. Use this escape
-sequence whenever an italic glyph is immediately followed by a
-roman glyph without any intervening space. This small amount of
-space is also called @dfn{italic correction}.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-\f[I]f\f[R])
- @result{} {@it f}@r{)}
-\f[I]f\/\f[R])
- @result{} @i{f}@r{)}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\\,, , , }
-@cindex left italic correction (@code{\,})
-@cindex correction, left italic (@code{\,})
-@cindex glyph, left italic correction (@code{\,})
-@cindex roman glyph, correction before italic glyph (@code{\,})
-@cindex italic glyph, correction after roman glyph (@code{\,})
-Modify the spacing of the following glyph so that the spacing
-between that glyph and the preceding glyph is correct if the
-preceding glyph is a roman glyph. Use this escape sequence
-whenever a roman glyph is immediately followed by an italic
-glyph without any intervening space. In analogy to above, this
-space could be called @dfn{left italic correction}, but this term
-isn't used widely.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-q\f[I]f
- @result{} @r{q}@i{f}
-q\,\f[I]f
- @result{} @r{q}@math{@ptexcomma}@i{f}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\&, , , }
-Insert a zero-width character, which is invisible. Its intended use
-is to stop interaction of a character with its surrounding.
-
-@itemize @bullet
-@item
-It prevents the insertion of extra space after an end-of-sentence
-character.
-
-@Example
-Test.
-Test.
- @result{} Test. Test.
-Test.\&
-Test.
- @result{} Test. Test.
-@endExample
-
-@item
-It prevents interpretation of a control character at the beginning of
-an input line.
-
-@Example
-.Test
- @result{} warning: `Test' not defined
-\&.Test
- @result{} .Test
-@endExample
-
-@item
-It prevents kerning between two glyphs.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-VA
- @result{} @r{VA}
-V\&A
- @result{} @r{V@w{}A}
-@end group
-@end example
-@end iftex
-
-@item
-It is needed to map an arbitrary character to nothing in the @code{tr}
-request (@pxref{Character Translations}).
-@end itemize
-@endDefesc
-
-@Defesc {\\), , , }
-This escape is similar to @code{\&} except that it behaves like a
-character declared with the @code{cflags} request to be transparent
-for the purposes of an end-of-sentence character.
-
-Its main usage is in macro definitions to protect against arguments
-starting with a control character.
-
-@Example
-.de xxx
-\)\\$1
-..
-.de yyy
-\&\\$1
-..
-This is a test.\c
-.xxx '
-This is a test.
- @result{}This is a test.' This is a test.
-This is a test.\c
-.yyy '
-This is a test.
- @result{}This is a test.' This is a test.
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Sizes, Strings, Fonts and Symbols, gtroff Reference
-@section Sizes
-@cindex sizes
-
-@cindex baseline
-@cindex type size
-@cindex size of type
-@cindex vertical spacing
-@cindex spacing, vertical
-@code{gtroff} uses two dimensions with each line of text, type size
-and vertical spacing. The @dfn{type size} is approximately the height
-of the tallest glyph.@footnote{This is usually the parenthesis.
-Note that in most cases the real dimensions of the glyphs in a font
-are @emph{not} related to its type size! For example, the standard
-@sc{PostScript} font families `Times Roman', `Helvetica', and
-`Courier' can't be used together at 10@dmn{pt}; to get acceptable
-output, the size of `Helvetica' has to be reduced by one point, and
-the size of `Courier' must be increased by one point.} @dfn{Vertical
-spacing} is the amount of space @code{gtroff} allows for a line of
-text; normally, this is about 20%@tie{}larger than the current type
-size. Ratios smaller than this can result in hard-to-read text;
-larger than this, it spreads the text out more vertically (useful for
-term papers). By default, @code{gtroff} uses 10@tie{}point type on
-12@tie{}point spacing.
-
-@cindex leading
-The difference between type size and vertical spacing is known, by
-typesetters, as @dfn{leading} (this is pronounced `ledding').
-
-@menu
-* Changing Type Sizes::
-* Fractional Type Sizes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
-@subsection Changing Type Sizes
-
-@DefreqList {ps, [@Var{size}]}
-@DefreqItem {ps, @t{+}@Var{size}}
-@DefreqItem {ps, @t{-}@Var{size}}
-@DefescItem {\\s, , size, }
-@DefregListEnd {.s}
-@cindex changing type sizes (@code{ps}, @code{\s})
-@cindex type sizes, changing (@code{ps}, @code{\s})
-@cindex point sizes, changing (@code{ps}, @code{\s})
-Use the @code{ps} request or the @code{\s} escape to change (increase,
-decrease) the type size (in points). Specify @var{size} as either an
-absolute point size, or as a relative change from the current size.
-The size@tie{}0, or no argument, goes back to the previous size.
-
-Default scaling indicator of @code{size} is @samp{z}. If @code{size}
-is zero or negative, it is set to 1@dmn{u}.
-
-@cindex type size registers (@code{.s}, @code{.ps})
-@cindex point size registers (@code{.s}, @code{.ps})
-The read-only number register @code{.s} returns the point size in
-points as a decimal fraction. This is a string. To get the point
-size in scaled points, use the @code{.ps} register instead.
-
-@code{.s} is associated with the current environment
-(@pxref{Environments}).
-
-@Example
-snap, snap,
-.ps +2
-grin, grin,
-.ps +2
-wink, wink, \s+2nudge, nudge,\s+8 say no more!
-.ps 10
-@endExample
-
-The @code{\s} escape may be called in a variety of ways. Much like
-other escapes there must be a way to determine where the argument ends
-and the text begins. Any of the following forms are valid:
-
-@table @code
-@item \s@var{n}
-Set the point size to @var{n}@tie{}points. @var{n}@tie{}must be either
-0 or in the range 4 to@tie{}39.
-
-@item \s+@var{n}
-@itemx \s-@var{n}
-Increase or decrease the point size by @var{n}@tie{}points.
-@var{n}@tie{}must be exactly one digit.
-
-@item \s(@var{nn}
-Set the point size to @var{nn}@tie{}points. @var{nn} must be exactly
-two digits.
-
-@item \s+(@var{nn}
-@itemx \s-(@var{nn}
-@itemx \s(+@var{nn}
-@itemx \s(-@var{nn}
-Increase or decrease the point size by @var{nn}@tie{}points. @var{nn}
-must be exactly two digits.
-@end table
-
-Note that @code{\s} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the font on
-the fly:
-
-@Example
-.mc \s[20]x\s[0]
-@endExample
-
-@xref{Fractional Type Sizes}, for yet another syntactical form of
-using the @code{\s} escape.
-@endDefreq
-
-@Defreq {sizes, s1 s2 @dots{} sn [0]}
-Some devices may only have certain permissible sizes, in which case
-@code{gtroff} rounds to the nearest permissible size.
-The @file{DESC} file specifies which sizes are permissible for the device.
-
-Use the @code{sizes} request to change the permissible sizes
-for the current output device.
-Arguments are in scaled points;
-the @code{sizescale} line in the
-@file{DESC} file for the output device
-provides the scaling factor.
-For example, if the scaling factor is 1000,
-then the value 12000 is 12@tie{}points.
-
-Each argument can be a single point size (such as @samp{12000}),
-or a range of sizes (such as @samp{4000-72000}).
-You can optionally end the list with a zero.
-@endDefreq
-
-@DefreqList {vs, [@Var{space}]}
-@DefreqItem {vs, @t{+}@Var{space}}
-@DefreqItem {vs, @t{-}@Var{space}}
-@DefregListEnd {.v}
-@cindex changing vertical line spacing (@code{vs})
-@cindex vertical line spacing, changing (@code{vs})
-@cindex vertical line spacing register (@code{.v})
-Change (increase, decrease) the vertical spacing by @var{space}. The
-default scaling indicator is @samp{p}.
-
-If @code{vs} is called without an argument, the vertical spacing is
-reset to the previous value before the last call to @code{vs}.
-
-@cindex @code{.V} register, and @code{vs}
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-negative; the vertical spacing is then set to smallest positive value,
-the vertical resolution (as given in the @code{.V} register).
-
-Note that @w{@samp{.vs 0}} isn't saved in a diversion since it doesn't
-result in a vertical motion. You explicitly have to repeat this command
-before inserting the diversion.
-
-The read-only number register @code{.v} contains the current vertical
-spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@cindex vertical line spacing, effective value
-The effective vertical line spacing consists of four components. Breaking
-a line causes the following actions (in the given order).
-
-@itemize @bullet
-@item
-@cindex extra pre-vertical line space (@code{\x})
-@cindex line space, extra pre-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra pre-vertical line
-space}. This is the minimum value of all @code{\x} escapes with a
-negative argument in the current output line.
-
-@item
-Move the current point vertically by the vertical line spacing as set with
-the @code{vs} request.
-
-@item
-Output the current line.
-
-@item
-@cindex extra post-vertical line space (@code{\x})
-@cindex line space, extra post-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra post-vertical line
-space}. This is the maximum value of all @code{\x} escapes with a
-positive argument in the line which has just been output.
-
-@item
-@cindex post-vertical line spacing
-@cindex line spacing, post-vertical (@code{pvs})
-Move the current point vertically by the @dfn{post-vertical line spacing}
-as set with the @code{pvs} request.
-@end itemize
-
-@cindex double-spacing (@code{vs}, @code{pvs})
-It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
-to produce double-spaced documents: @code{vs} and @code{pvs} have a finer
-granularity for the inserted vertical space compared to @code{ls};
-furthermore, certain preprocessors assume single-spacing.
-
-@xref{Manipulating Spacing}, for more details on the @code{\x} escape
-and the @code{ls} request.
-
-@DefreqList {pvs, [@Var{space}]}
-@DefreqItem {pvs, @t{+}@Var{space}}
-@DefreqItem {pvs, @t{-}@Var{space}}
-@DefregListEnd {.pvs}
-@cindex @code{ls} request, alternative to (@code{pvs})
-@cindex post-vertical line spacing, changing (@code{pvs})
-@cindex post-vertical line spacing register (@code{.pvs})
-Change (increase, decrease) the post-vertical spacing by
-@var{space}. The default scaling indicator is @samp{p}.
-
-If @code{pvs} is called without an argument, the post-vertical spacing is
-reset to the previous value before the last call to @code{pvs}.
-
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-zero or negative; the vertical spacing is then set to zero.
-
-The read-only number register @code{.pvs} contains the current
-post-vertical spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Fractional Type Sizes, , Changing Type Sizes, Sizes
-@subsection Fractional Type Sizes
-@cindex fractional type sizes
-@cindex fractional point sizes
-@cindex type sizes, fractional
-@cindex point sizes, fractional
-@cindex sizes, fractional
-
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@cindex @code{ps} request, with fractional type sizes
-@cindex @code{cs} request, with fractional type sizes
-@cindex @code{tkf} request, with fractional type sizes
-@cindex @code{\H}, with fractional type sizes
-@cindex @code{\s}, with fractional type sizes
-A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points,
-where @var{sizescale} is specified in the @file{DESC} file (1@tie{}by
-default). There is a new scale indicator @samp{z} which has the
-effect of multiplying by @var{sizescale}. Requests and escape
-sequences in @code{gtroff} interpret arguments that represent a point
-size as being in units of scaled points, but they evaluate each such
-argument using a default scale indicator of @samp{z}. Arguments
-treated in this way are the argument to the @code{ps} request, the
-third argument to the @code{cs} request, the second and fourth
-arguments to the @code{tkf} request, the argument to the @code{\H}
-escape sequence, and those variants of the @code{\s} escape sequence
-that take a numeric expression as their argument (see below).
-
-For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
-is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
-equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
-10250@tie{}scaled points, which is equal to 10.25@tie{}points.
-
-@code{gtroff} disallows the use of the @samp{z} scale indicator in
-instances where it would make no sense, such as a numeric
-expression whose default scale indicator was neither @samp{u} nor
-@samp{z}. Similarly it would make
-no sense to use a scaling indicator other than @samp{z} or @samp{u} in a
-numeric expression whose default scale indicator was @samp{z}, and so
-@code{gtroff} disallows this as well.
-
-There is also new scale indicator @samp{s} which multiplies by the
-number of units in a scaled point. So, for example, @samp{\n[.ps]s} is
-equal to @samp{1m}. Be sure not to confuse the @samp{s} and @samp{z}
-scale indicators.
-
-@Defreg {.ps}
-A read-only number register returning the point size in scaled points.
-
-@code{.ps} is associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-@DefregList {.psr}
-@DefregListEnd {.sr}
-@cindex last-requested point size registers (@code{.psr}, @code{.sr})
-@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
-@cindex @code{.ps} register, in comparison with @code{.psr}
-@cindex @code{.s} register, in comparison with @code{.sr}
-The last-requested point size in scaled points is contained in the
-@code{.psr} read-only number register. The last requested point size
-in points as a decimal fraction can be found in @code{.sr}. This is a
-string-valued read-only number register.
-
-Note that the requested point sizes are device-independent, whereas
-the values returned by the @code{.ps} and @code{.s} registers are not.
-For example, if a point size of 11@dmn{pt} is requested, and a
-@code{sizes} request (or a @code{sizescale} line in a @file{DESC} file)
-specifies 10.95@dmn{pt} instead, this value is actually used.
-
-Both registers are associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-The @code{\s} escape has the following syntax for working with
-fractional type sizes:
-
-@table @code
-@item \s[@var{n}]
-@itemx \s'@var{n}'
-Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a numeric
-expression with a default scale indicator of @samp{z}.
-
-@item \s[+@var{n}]
-@itemx \s[-@var{n}]
-@itemx \s+[@var{n}]
-@itemx \s-[@var{n}]
-@itemx \s'+@var{n}'
-@itemx \s'-@var{n}'
-@itemx \s+'@var{n}'
-@itemx \s-'@var{n}'
-Increase or or decrease the point size by @var{n}@tie{}scaled points;
-@var{n}@tie{}is a numeric expression with a default scale indicator of
-@samp{z}.
-@end table
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node Strings, Conditionals and Loops, Sizes, gtroff Reference
-@section Strings
-@cindex strings
-
-@code{gtroff} has string variables, which are entirely for user
-convenience (i.e.@: there are no built-in strings exept @code{.T}, but
-even this is a read-write string variable).
-
-@DefreqList {ds, name [@Var{string}]}
-@DefreqItem {ds1, name [@Var{string}]}
-@DefescItem {\\*, , n, }
-@DefescItem {\\*, @Lparen{}, nm, }
-@DefescListEnd {\\*, @Lbrack{}, name arg1 arg2 @dots{}, @Rbrack{}}
-@cindex string interpolation (@code{\*})
-@cindex string expansion (@code{\*})
-@cindex interpolation of strings (@code{\*})
-@cindex expansion of strings (@code{\*})
-@cindex string arguments
-@cindex arguments, of strings
-Define and access a string variable @var{name} (one-character
-name@tie{}@var{n}, two-character name @var{nm}). If @var{name} already
-exists, @code{ds} overwrites the previous definition. Only the syntax form
-using brackets can take arguments which are handled identically to
-macro arguments; the single exception is that a closing bracket as an
-argument must be enclosed in double quotes. @xref{Request and Macro
-Arguments}, and @ref{Parameters}.
-
-Example:
-
-@Example
-.ds foo a \\$1 test
-.
-This is \*[foo nice].
- @result{} This is a nice test.
-@endExample
-
-The @code{\*} escape @dfn{interpolates} (expands in-place) a
-previously-defined string variable. To be more precise, the stored
-string is pushed onto the input stack which is then parsed by
-@code{gtroff}. Similar to number registers, it is possible to nest
-strings, i.e. string variables can be called within string variables.
-
-If the string named by the @code{\*} escape does not exist, it is
-defined as empty, and a warning of type @samp{mac} is emitted (see
-@ref{Debugging}, for more details).
-
-@cindex comments, with @code{ds}
-@cindex @code{ds} request, and comments
-@strong{Caution:} Unlike other requests, the second argument to the
-@code{ds} request takes up the entire line including trailing spaces.
-This means that comments on a line with such a request can introduce
-unwanted space into a string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-@endExample
-
-@noindent
-Instead the comment should be put on another line or have the comment
-escape adjacent with the end of the string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
-@endExample
-
-@cindex trailing quotes
-@cindex quotes, trailing
-@cindex leading spaces with @code{ds}
-@cindex spaces with @code{ds}
-@cindex @code{ds} request, and leading spaces
-To produce leading space the string can be started with a double
-quote. No trailing quote is needed; in fact, any trailing quote is
-included in your string.
-
-@Example
-.ds sign " Yours in a white wine sauce,
-@endExample
-
-@cindex multi-line strings
-@cindex strings, multi-line
-@cindex newline character, in strings, escaping
-@cindex escaping newline characters, in strings
-Strings are not limited to a single line of text. A string can span
-several lines by escaping the newlines with a backslash. The
-resulting string is stored @emph{without} the newlines.
-
-@Example
-.ds foo lots and lots \
-of text are on these \
-next several lines
-@endExample
-
-It is not possible to have real newlines in a string. To put a single
-double quote character into a string, use two consecutive double quote
-characters.
-
-The @code{ds1} request turns off compatibility mode
-while interpreting a string. To be more precise, a @dfn{compatibility
-save} input token is inserted at the beginning of the string, and a
-@dfn{compatibility restore} input token at the end.
-
-@Example
-.nr xxx 12345
-.ds aa The value of xxx is \\n[xxx].
-.ds1 bb The value of xxx ix \\n[xxx].
-.
-.cp 1
-.
-\*(aa
- @result{} warning: number register `[' not defined
- @result{} The value of xxx is 0xxx].
-\*(bb
- @result{} The value of xxx ix 12345.
-@endExample
-
-@cindex name space, common, of macros, diversions, and strings
-@cindex common name space of macros, diversions, and strings
-@cindex macros, shared name space with strings and diversions
-@cindex strings, shared name space with macros and diversions
-@cindex diversions, shared name space with macros and strings
-Strings, macros, and diversions (and boxes) share the same name space.
-Internally, even the same mechanism is used to store them. This has
-some interesting consequences. For example, it is possible to call a
-macro with string syntax and vice versa.
-
-@Example
-.de xxx
-a funny test.
-..
-This is \*[xxx]
- @result{} This is a funny test.
-
-.ds yyy a funny test
-This is
-.yyy
- @result{} This is a funny test.
-@endExample
-
-Diversions and boxes can be also called with string syntax.
-
-Another consequence is that you can copy one-line diversions or boxes
-to a string.
-
-@Example
-.di xxx
-a \fItest\fR
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
- @result{} @r{This is a }@i{test}.
-@endExample
-
-@noindent
-As the previous example shows, it is possible to store formatted
-output in strings. The @code{\c} escape prevents the insertion of an
-additional blank line in the output.
-
-Copying diversions longer than a single output line produces
-unexpected results.
-
-@Example
-.di xxx
-a funny
-.br
-test
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
- @result{} test This is a funny.
-@endExample
-
-Usually, it is not predictable whether a diversion contains one or
-more output lines, so this mechanism should be avoided. With
-@acronym{UNIX} @code{troff}, this was the only solution to strip off a
-final newline from a diversion. Another disadvantage is that the
-spaces in the copied string are already formatted, making them
-unstretchable. This can cause ugly results.
-
-@cindex stripping final newline in diversions
-@cindex diversion, stripping final newline
-@cindex final newline, stripping in diversions
-@cindex newline, final, stripping in diversions
-@cindex horizontal space, unformatting
-@cindex space, horizontal, unformatting
-@cindex unformatting horizontal space
-A clean solution to this problem is available in GNU @code{troff},
-using the requests @code{chop} to remove the final newline of a
-diversion, and @code{unformat} to make the horizontal spaces
-stretchable again.
-
-@Example
-.box xxx
-a funny
-.br
-test
-.br
-.box
-.chop xxx
-.unformat xxx
-This is \*[xxx].
- @result{} This is a funny test.
-@endExample
-
-@xref{Gtroff Internals}, for more information.
-@endDefreq
-
-@DefreqList {as, name [@Var{string}]}
-@DefreqListEnd {as1, name [@Var{string}]}
-@cindex appending to a string (@code{as})
-@cindex string, appending (@code{as})
-The @code{as} request is similar to @code{ds} but appends @var{string}
-to the string stored as @var{name} instead of redefining it. If
-@var{name} doesn't exist yet, it is created.
-
-@Example
-.as sign " with shallots, onions and garlic,
-@endExample
-
-The @code{as1} request is similar to @code{as}, but compatibility mode
-is switched off while the appended string is interpreted. To be more
-precise, a @dfn{compatibility save} input token is inserted at the
-beginning of the appended string, and a @dfn{compatibility restore}
-input token at the end.
-@endDefreq
-
-Rudimentary string manipulation routines are given with the next two
-requests.
-
-@Defreq {substring, str n1 [@Var{n2}]}
-@cindex substring (@code{substring})
-Replace the string named @var{str} with the substring
-defined by the indices @var{n1} and@tie{}@var{n2}. The first character
-in the string has index@tie{}0. If @var{n2} is omitted, it is taken to
-be equal to the string's length. If the index value @var{n1} or
-@var{n2} is negative, it is counted from the end of the
-string, going backwards: The last character has index@tie{}@minus{}1, the
-character before the last character has index@tie{}@minus{}2, etc.
-
-@Example
-.ds xxx abcdefgh
-.substring xxx 1 -4
-\*[xxx]
- @result{} bcde
-@endExample
-@endDefreq
-
-@Defreq {length, reg str}
-@cindex length of a string (@code{length})
-@cindex string, length of (@code{length})
-Compute the number of characters of @var{str} and return it in the
-number register @var{reg}. If @var{reg} doesn't exist, it is created.
-@code{str} is read in copy mode.
-
-@Example
-.ds xxx abcd\h'3i'efgh
-.length yyy \*[xxx]
-\n[yyy]
- @result{} 14
-@endExample
-@endDefreq
-
-@Defreq {rn, xx yy}
-@cindex renaming request (@code{rn})
-@cindex request, renaming (@code{rn})
-@cindex renaming macro (@code{rn})
-@cindex macro, renaming (@code{rn})
-@cindex renaming string (@code{rn})
-@cindex string, renaming (@code{rn})
-@cindex renaming diversion (@code{rn})
-@cindex diversion, renaming (@code{rn})
-Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
-@endDefreq
-
-@Defreq {rm, xx}
-@cindex removing request (@code{rm})
-@cindex request, removing (@code{rm})
-@cindex removing macro (@code{rm})
-@cindex macro, removing (@code{rm})
-@cindex removing string (@code{rm})
-@cindex string, removing (@code{rm})
-@cindex removing diversion (@code{rm})
-@cindex diversion, removing (@code{rm})
-Remove the request, macro, diversion, or string @var{xx}. @code{gtroff}
-treats subsequent invocations as if the object had never been defined.
-@endDefreq
-
-@Defreq {als, new old}
-@cindex alias, string, creating (@code{als})
-@cindex alias, macro, creating (@code{als})
-@cindex alias, diversion, creating (@code{als})
-@cindex creating alias, for string (@code{als})
-@cindex creating alias, for macro (@code{als})
-@cindex creating alias, for diversion (@code{als})
-@cindex string, creating alias (@code{als})
-@cindex macro, creating alias (@code{als})
-@cindex diversion, creating alias (@code{als})
-Create an alias named @var{new} for the request, string, macro, or
-diversion object named @var{old}. The new name and the old name are
-exactly equivalent (it is similar to a hard rather than a soft
-link). If @var{old} is undefined, @code{gtroff} generates a warning of
-type @samp{mac} and ignores the request.
-@endDefreq
-
-@Defreq {chop, xx}
-Remove (chop) the last character from the macro, string, or diversion
-named @var{xx}. This is useful for removing the newline from the end
-of diversions that are to be interpolated as strings. This command
-can be used repeatedly; see @ref{Gtroff Internals}, for details on
-nodes inserted additionally by @code{gtroff}.
-@endDefreq
-
-@xref{Identifiers}, and @ref{Comments}.
-
-
-@c =====================================================================
-
-@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
-@section Conditionals and Loops
-@cindex conditionals and loops
-@cindex loops and conditionals
-
-@menu
-* Operators in Conditionals::
-* if-else::
-* while::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
-@subsection Operators in Conditionals
-
-@cindex @code{if} request, operators to use with
-@cindex @code{while} request, operators to use with
-In @code{if} and @code{while} requests, there are several more
-operators available:
-
-@table @code
-@item e
-@itemx o
-True if the current page is even or odd numbered (respectively).
-
-@item n
-True if the document is being processed in nroff mode (i.e., the
-@code{.nroff} command has been issued).
-
-@item t
-True if the document is being processed in troff mode (i.e., the
-@code{.troff} command has been issued).
-
-@item v
-Always false. This condition is for compatibility with other
-@code{troff} versions only (identifying a @code{-Tversatec} device).
-
-@item '@var{xxx}'@var{yyy}'
-True if the string @var{xxx} is equal to the string @var{yyy}. Other
-characters can be used in place of the single quotes; the same set of
-delimiters as for the @code{\D} escape is used (@pxref{Escapes}).
-@code{gtroff} formats the strings before being compared:
-
-@Example
-.ie "|"\fR|\fP" \
-true
-.el \
-false
- @result{} true
-@endExample
-
-@noindent
-The resulting motions, glyph sizes, and fonts have to
-match,@footnote{The created output nodes must be identical.
-@xref{Gtroff Internals}.} and not the individual motion, size, and
-font requests. In the previous example, @samp{|} and @samp{\fR|\fP}
-both result in a roman @samp{|} glyph with the same point size and
-at the same location on the page, so the strings are equal. If
-@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result
-would be ``false'' because (the first) @samp{|} produces an italic
-@samp{|} rather than a roman one.
-
-@item r @var{xxx}
-True if there is a number register named @var{xxx}.
-
-@item d @var{xxx}
-True if there is a string, macro, diversion, or request named @var{xxx}.
-
-@item m @var{xxx}
-True if there is a color named @var{xxx}.
-
-@item c @var{g}
-True if there is a glyph @var{g} available@footnote{The name of this
-conditional operator is a misnomer since it tests names of output
-glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
-character (@code{\(@var{gg}} or @code{\[@var{ggg}]}); the condition
-is also true if @var{g} has been defined by the @code{char} request.
-
-@item F @var{font}
-True if a font named @var{font} exists. @var{font} is handled as if it was
-opened with the @code{ft} request (this is, font translation and styles are
-applied), without actually mounting it.
-
-This test doesn't load the complete font but only its header to verify
-its validity.
-
-@item S @var{style}
-True if style @var{style} has been registered. Font translation is applied.
-@end table
-
-Note that these operators can't be combined with other operators like
-@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
-between the exclamation mark and the operator) can be used to negate
-the result.
-
-@Example
-.nr xxx 1
-.ie !r xxx \
-true
-.el \
-false
- @result{} false
-@endExample
-
-A whitespace after @samp{!} always evaluates to zero (this bizarre
-behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
-
-@Example
-.nr xxx 1
-.ie ! r xxx \
-true
-.el \
-false
- @result{} r xxx true
-@endExample
-
-It is possible to omit the whitespace before the argument to the
-@samp{r}, @samp{d}, and @samp{c} operators.
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node if-else, while, Operators in Conditionals, Conditionals and Loops
-@subsection if-else
-@cindex if-else
-
-@code{gtroff} has if-then-else constructs like other languages, although
-the formatting can be painful.
-
-@Defreq {if, expr anything}
-
-Evaluate the expression @var{expr}, and executes @var{anything} (the
-remainder of the line) if @var{expr} evaluates to a value greater than
-zero (true). @var{anything} is interpreted as though it was on a line
-by itself (except that leading spaces are swallowed).
-@xref{Expressions}, for more info.
-
-@Example
-.nr xxx 1
-.nr yyy 2
-.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
- @result{} true
-@endExample
-@endDefreq
-
-@Defreq{nop, anything}
-Executes @var{anything}.
-This is similar to @code{.if@tie{}1}.
-@endDefreq
-
-@DefreqList {ie, expr anything}
-@DefreqListEnd {el, anything}
-Use the @code{ie} and @code{el} requests to write an if-then-else.
-The first request is the `if' part and the latter is the `else' part.
-
-@Example
-.ie n .ls 2 \" double-spacing in nroff
-.el .ls 1 \" single-spacing in troff
-@endExample
-@endDefreq
-
-@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
-@c to @deffn
-@c
-@c and in 4.2 you still can't use @{ in macros.
-
-@c @DefescList {\@{, , , }
-@c @DefescListEnd {\@}, , , }
-@deffn Escape @t{\@{}
-@deffnx Escape @t{\@}}
-@esindex \@{
-@esindex \@}
-@cindex begin of conditional block (@code{\@{})
-@cindex end of conditional block (@code{\@}})
-@cindex conditional block, begin (@code{\@{})
-@cindex conditional block, end (@code{\@}})
-@cindex block, conditional, begin (@code{\@{})
-@cindex block, condititional, end (@code{\@}})
-In many cases, an if (or if-else) construct needs to execute more than
-one request. This can be done using the @code{\@{} and @code{\@}}
-escapes. The following example shows the possible ways to use these
-escapes (note the position of the opening and closing braces).
-
-@Example
-.ie t \@{\
-. ds lq ``
-. ds rq ''
-.\@}
-.el \
-.\@{\
-. ds lq "
-. ds rq "\@}
-@endExample
-@c @endDefesc
-@end deffn
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node while, , if-else, Conditionals and Loops
-@subsection while
-@cindex while
-
-@code{gtroff} provides a looping construct using the @code{while}
-request, which is used much like the @code{if} (and related) requests.
-
-@Defreq {while, expr anything}
-Evaluate the expression @var{expr}, and repeatedly execute
-@var{anything} (the remainder of the line) until @var{expr} evaluates
-to@tie{}0.
-
-@Example
-.nr a 0 1
-.while (\na < 9) \@{\
-\n+a,
-.\@}
-\n+a
- @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-@endExample
-
-Some remarks.
-
-@cindex @code{de} request, and @code{while}
-@itemize @bullet
-@item
-The body of a @code{while} request is treated like the body of a
-@code{de} request: @code{gtroff} temporarily stores it in a macro
-which is deleted after the loop has been exited. It can considerably
-slow down a macro if the body of the @code{while} request (within the
-macro) is large. Each time the macro is executed, the @code{while}
-body is parsed and stored again as a temporary macro.
-
-@Example
-.de xxx
-. nr num 10
-. while (\\n[num] > 0) \@{\
-. \" many lines of code
-. nr num -1
-. \@}
-..
-@endExample
-
-@cindex recursive macros
-@cindex macros, recursive
-@noindent
-The traditional and ofter better solution (@acronym{UNIX} @code{troff}
-doesn't have the @code{while} request) is to use a recursive macro
-instead which is parsed only once during its definition.
-
-@Example
-.de yyy
-. if (\\n[num] > 0) \@{\
-. \" many lines of code
-. nr num -1
-. yyy
-. \@}
-..
-.
-.de xxx
-. nr num 10
-. yyy
-..
-@endExample
-
-@noindent
-Note that the number of available recursion levels is set to@tie{}1000
-(this is a compile-time constant value of @code{gtroff}).
-
-@item
-The closing brace of a @code{while} body must end a line.
-
-@Example
-.if 1 \@{\
-. nr a 0 1
-. while (\n[a] < 10) \@{\
-. nop \n+[a]
-.\@}\@}
- @result{} unbalanced \@{ \@}
-@endExample
-@end itemize
-@endDefreq
-
-@Defreq {break, }
-@cindex @code{while} request, confusing with @code{br}
-@cindex @code{break} request, in a @code{while} loop
-@cindex @code{continue} request, in a @code{while} loop
-Break out of a @code{while} loop. Be sure not to confuse this with
-the @code{br} request (causing a line break).
-@endDefreq
-
-@Defreq {continue, }
-Finish the current iteration of a @code{while} loop, immediately
-restarting the next iteration.
-@endDefreq
-
-@xref{Expressions}.
-
-
-@c =====================================================================
-
-@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
-@section Writing Macros
-@cindex writing macros
-@cindex macros, writing
-
-A @dfn{macro} is a collection of text and embedded commands which can
-be invoked multiple times. Use macros to define common operations.
-
-@DefreqList {de, name [@Var{end}]}
-@DefreqItem {de1, name [@Var{end}]}
-@DefreqItem {dei, name [@Var{end}]}
-@DefreqListEnd {dei1, name [@Var{end}]}
-Define a new macro named @var{name}. @code{gtroff} copies subsequent
-lines (starting with the next one) into an internal buffer until it
-encounters the line @samp{..} (two dots). The optional second
-argument to @code{de} changes this to a macro to @samp{.@var{end}}.
-
-There can be whitespace after the first dot in the line containing the
-ending token (either @samp{.} or macro @samp{@var{end}}).
-
-Here a small example macro called @samp{P} which causes a break and
-inserts some vertical space. It could be used to separate paragraphs.
-
-@Example
-.de P
-. br
-. sp .8v
-..
-@endExample
-
-The following example defines a macro within another. Remember that
-expansion must be protected twice; once for reading the macro and
-once for executing.
-
-@Example
-\# a dummy macro to avoid a warning
-.de end
-..
-.
-.de foo
-. de bar end
-. nop \f[B]Hallo \\\\$1!\f[]
-. end
-..
-.
-.foo
-.bar Joe
- @result{} @b{Hallo Joe!}
-@endExample
-
-@noindent
-Since @code{\f} has no expansion, it isn't necessary to protect its
-backslash. Had we defined another macro within @code{bar} which takes
-a parameter, eight backslashes would be necessary before @samp{$1}.
-
-The @code{de1} request turns off compatibility mode
-while executing the macro. On entry, the current compatibility mode
-is saved and restored at exit.
-
-@Example
-.nr xxx 12345
-.
-.de aa
-The value of xxx is \\n[xxx].
-..
-.de1 bb
-The value of xxx ix \\n[xxx].
-..
-.
-.cp 1
-.
-.aa
- @result{} warning: number register `[' not defined
- @result{} The value of xxx is 0xxx].
-.bb
- @result{} The value of xxx ix 12345.
-@endExample
-
-The @code{dei} request defines a macro indirectly.
-That is, it expands strings whose names
-are @var{name} or @var{end} before performing the append.
-
-This:
-
-@Example
-.ds xx aa
-.ds yy bb
-.dei xx yy
-@endExample
-
-@noindent
-is equivalent to:
-
-@Example
-.de aa bb
-@endExample
-
-The @code{dei1} request is similar to @code{dei} but with compatibility
-mode switched off during execution of the defined macro.
-
-If compatibility mode is on, @code{de} (and @code{dei}) behave similar to
-@code{de1} (and @code{dei1}): A `compatibility save' token is inserted at
-the beginning, and a `compatibility restore' token at the end, with
-compatibility mode switched on during execution. @xref{Gtroff Internals},
-for more information on switching compatibility mode on and off in a
-single document.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{de} and @code{de1}.
-
-Note that macro identifiers are shared with identifiers for strings and
-diversions.
-@endDefreq
-
-@DefreqList {am, name [@Var{end}]}
-@DefreqItem {am1, name [@Var{end}]}
-@DefreqItem {ami, name [@Var{end}]}
-@DefreqListEnd {ami1, name [@Var{end}]}
-@cindex appending to a macro (@code{am})
-@cindex macro, appending (@code{am})
-Works similarly to @code{de} except it appends onto the macro named
-@var{name}. So, to make the previously defined @samp{P} macro actually
-do indented instead of block paragraphs, add the necessary code to the
-existing macro like this:
-
-@Example
-.am P
-.ti +5n
-..
-@endExample
-
-The @code{am1} request turns off compatibility mode
-while executing the appended macro piece. To be more precise, a
-@dfn{compatibility save} input token is inserted at the beginning of
-the appended code, and a @dfn{compatibility restore} input token at
-the end.
-
-The @code{ami} request appends indirectly,
-meaning that @code{gtroff} expands strings whose names
-are @var{name} or @var{end} before performing the append.
-
-The @code{ami1} request is similar to @code{ami} but compatibility mode
-is switched off during execution of the defined macro.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{am} and @code{am1}.
-@endDefreq
-
-@xref{Strings}, for the @code{als} request to rename a macro.
-
-The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and
-@code{as} requests (together with its variants) only create a new object
-if the name of the macro, diversion or string diversion is currently
-undefined or if it is defined to be a request; normally they modify the
-value of an existing object.
-
-@Defreq {return, [@Var{anything}]}
-Exit a macro, immediately returning to the caller.
-
-If called with an argument, exit twice, namely the current macro and the
-macro one level higher. This is used to define a wrapper macro for
-@code{return} in @file{trace.tmac}.
-@endDefreq
-
-@menu
-* Copy-in Mode::
-* Parameters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
-@subsection Copy-in Mode
-@cindex copy-in mode
-@cindex mode, copy-in
-
-@cindex @code{\n}, when reading text for a macro
-@cindex @code{\$}, when reading text for a macro
-@cindex @code{\*}, when reading text for a macro
-@cindex @code{\\}, when reading text for a macro
-@cindex \@key{RET}, when reading text for a macro
-When @code{gtroff} reads in the text for a macro, string, or diversion,
-it copies the text (including request lines, but excluding escapes) into
-an internal buffer. Escapes are converted into an internal form,
-except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and
-@code{\@key{RET}} which are evaluated and inserted into the text where
-the escape was located. This is known as @dfn{copy-in} mode or
-@dfn{copy} mode.
-
-What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash. Compare this to the @code{\def}
-and @code{\edef} commands in @TeX{}.
-
-The following example prints the numbers 20 and@tie{}10:
-
-@Example
-.nr x 20
-.de y
-.nr x 10
-\&\nx
-\&\\nx
-..
-.y
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Parameters, , Copy-in Mode, Writing Macros
-@subsection Parameters
-@cindex parameters
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
-@Defreg {.$}
-@cindex number of arguments register (@code{.$})
-The number of arguments passed to a macro or string. This is a read-only
-number register.
-
-Note that the @code{shift} request can change its value.
-@endDefreg
-
-Any individual argument can be retrieved with one of the following
-escapes:
-
-@DefescList {\\$, , n, }
-@DefescItem {\\$, @Lparen{}, nn, }
-@DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}}
-@cindex copy-in mode, and macro arguments
-@cindex macro, arguments (@code{\$})
-@cindex arguments, macro (@code{\$})
-Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
-argument. As usual, the first form only accepts a single number
-(larger than zero), the second a two-digit number (larger or equal
-to@tie{}10), and the third any positive integer value (larger
-than zero). Macros and strings can have an unlimited number of arguments.
-Note that due to copy-in mode, use two backslashes on these in actual use
-to prevent interpolation until the macro is actually invoked.
-@endDefesc
-
-@Defreq {shift, [@Var{n}]}
-Shift the arguments 1@tie{}position, or as
-many positions as specified by its argument. After executing this
-request, argument@tie{}@var{i} becomes argument @math{@var{i}-@var{n}};
-arguments 1 to@tie{}@var{n} are no longer available. Shifting by
-negative amounts is currently undefined.
-
-The register @code{.$} is adjusted accordingly.
-@endDefreq
-
-@DefescList {\\$*, , , }
-@DefescListEnd {\\$@@, , , }
-In some cases it is convenient to use all of the arguments at once (for
-example, to pass the arguments along to another macro). The @code{\$*}
-escape concatenates all the arguments separated by spaces. A
-similar escape is @code{\$@@}, which concatenates all the
-arguments with each surrounded by double quotes, and separated by
-spaces. If not in compatibility mode, the input level of double quotes
-is preserved (see @ref{Request and Macro Arguments}).
-@endDefesc
-
-@Defesc {\\$0, , , }
-@cindex macro name register (@code{\$0})
-@cindex @code{als} request, and @code{\$0}
-The name used to invoke the current macro.
-The @code{als} request can make a macro have more than one name.
-
-@Example
-.de generic-macro
-. ...
-. if \\n[error] \@{\
-. tm \\$0: Houston, we have a problem.
-. return
-. \@}
-..
-.
-.als foo generic-macro
-.als bar generic-macro
-@endExample
-@endDefesc
-
-@xref{Request and Macro Arguments}.
-
-
-@c =====================================================================
-
-@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
-@section Page Motions
-@cindex page motions
-@cindex motions, page
-
-@xref{Manipulating Spacing}, for a discussion of the main request for
-vertical motion, @code{sp}.
-
-@DefreqList {mk, [@Var{reg}]}
-@DefreqListEnd {rt, [@Var{dist}]}
-@cindex marking vertical page location (@code{mk})
-@cindex page location, vertical, marking (@code{mk})
-@cindex location, vertical, page, marking (@code{mk})
-@cindex vertical page location, marking (@code{mk})
-@cindex returning to marked vertical page location (@code{rt})
-@cindex page location, vertical, returning to marked (@code{rt})
-@cindex location, vertical, page, returning to marked (@code{rt})
-@cindex vertical page location, returning to marked (@code{rt})
-The request @code{mk} can be used to mark a location on a page, for
-movement to later. This request takes a register name as an argument
-in which to store the current page location. With no argument it
-stores the location in an internal register. The results of this can
-be used later by the @code{rt} or the @code{sp} request (or the
-@code{\v} escape).
-
-The @code{rt} request returns @emph{upwards} to the location marked
-with the last @code{mk} request. If used with an argument, return to
-a position which distance from the top of the page is @var{dist} (no
-previous call to @code{mk} is necessary in this case). Default scaling
-indicator is @samp{v}.
-
-Here a primitive solution for a two-column macro.
-
-@Example
-.nr column-length 1.5i
-.nr column-gap 4m
-.nr bottom-margin 1m
-.
-@endExample
-@Example
-.de 2c
-. br
-. mk
-. ll \\n[column-length]u
-. wh -\\n[bottom-margin]u 2c-trap
-. nr right-side 0
-..
-.
-@endExample
-@Example
-.de 2c-trap
-. ie \\n[right-side] \@{\
-. nr right-side 0
-. po -(\\n[column-length]u + \\n[column-gap]u)
-. \" remove trap
-. wh -\\n[bottom-margin]u
-. \@}
-. el \@{\
-. \" switch to right side
-. nr right-side 1
-. po +(\\n[column-length]u + \\n[column-gap]u)
-. rt
-. \@}
-..
-.
-@endExample
-@Example
-.pl 1.5i
-.ll 4i
-This is a small test which shows how the
-rt request works in combination with mk.
-
-.2c
-Starting here, text is typeset in two columns.
-Note that this implementation isn't robust
-and thus not suited for a real two-column
-macro.
-@endExample
-
-Result:
-
-@Example
-This is a small test which shows how the
-rt request works in combination with mk.
-
-Starting here, isn't robust
-text is typeset and thus not
-in two columns. suited for a
-Note that this real two-column
-implementation macro.
-@endExample
-@endDefreq
-
-The following escapes give fine control of movements about the page.
-
-@Defesc {\\v, ', e, '}
-@cindex vertical motion (@code{\v})
-@cindex motion, vertical (@code{\v})
-Move vertically, usually from the current location on the page (if no
-absolute position operator @samp{|} is used). The
-argument@tie{}@var{e} specifies the distance to move; positive is
-downwards and negative upwards. The default scaling indicator for this
-escape is @samp{v}. Beware, however, that @code{gtroff} continues text
-processing at the point where the motion ends, so you should always
-balance motions to avoid interference with text processing.
-
-@code{\v} doesn't trigger a trap. This can be quite useful; for example,
-consider a page bottom trap macro which prints a marker in the margin to
-indicate continuation of a footnote or something similar.
-@endDefesc
-
-There are some special-case escapes for vertical motion.
-
-@Defesc {\\r, , , }
-Move upwards@tie{}1@dmn{v}.
-@endDefesc
-
-@Defesc {\\u, , , }
-Move upwards@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\d, , , }
-Move down@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\h, ', e, '}
-@cindex inserting horizontal space (@code{\h})
-@cindex horizontal space (@code{\h})
-@cindex space, horizontal (@code{\h})
-@cindex horizontal motion (@code{\h})
-@cindex motion, horizontal (@code{\h})
-Move horizontally, usually from the current location (if no absolute
-position operator @samp{|} is used). The expression@tie{}@var{e}
-indicates how far to move: positive is rightwards and negative
-leftwards. The default scaling indicator for this escape is @samp{m}.
-
-This horizontal space is not discarded at the end of a line. To insert
-discardable space of a certain length use the @code{ss} request.
-@endDefesc
-
-There are a number of special-case escapes for horizontal motion.
-
-@Defesc {\\@key{SP}, , , }
-@cindex space, unbreakable
-@cindex unbreakable space
-An unbreakable and unpaddable (i.e.@: not expanded during filling)
-space. (Note: This is a backslash followed by a space.)
-@endDefesc
-
-@Defesc {\\~, , , }
-An unbreakable space that stretches like a normal inter-word space
-when a line is adjusted.
-@endDefesc
-
-@Defesc {\\|, , , }
-A 1/6@dmn{th} em space. Ignored for TTY output devices (rounded to
-zero).
-@endDefesc
-
-@Defesc {\\^, , , }
-A 1/12@dmn{th} em space. Ignored for TTY output devices (rounded to
-zero).
-@endDefesc
-
-@Defesc {\\0, , , }
-@cindex space, width of a digit (@code{\0})
-@cindex digit width space (@code{\0})
-A space the size of a digit.
-@endDefesc
-
-The following string sets the @TeX{} logo:
-
-@Example
-.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-@endExample
-
-@DefescList {\\w, ', text, '}
-@DefregItem {st}
-@DefregItem {sb}
-@DefregItem {rst}
-@DefregItem {rsb}
-@DefregItem {ct}
-@DefregItem {ssc}
-@DefregListEnd {skw}
-@cindex width escape (@code{\w})
-Return the width of the specified @var{text} in basic units.
-This allows horizontal movement based on the width of some
-arbitrary text (e.g.@: given as an argument to a macro).
-
-@Example
-The length of the string `abc' is \w'abc'u.
- @result{} The length of the string `abc' is 72u.
-@endExample
-
-Font changes may occur in @var{text} which don't affect current
-settings.
-
-After use, @code{\w} sets several registers:
-
-@table @code
-@item st
-@itemx sb
-The highest and lowest point of the baseline, respectively, in @var{text}.
-
-@item rst
-@itemx rsb
-Like the @code{st} and @code{sb} registers, but takes account of the
-heights and depths of glyphs. With other words, this gives the
-highest and lowest point of @var{text}. Values below the baseline are
-negative.
-
-@item ct
-Defines the kinds of glyphs occurring in @var{text}:
-
-@table @asis
-@item 0
-only short glyphs, no descenders or tall glyphs.
-
-@item 1
-at least one descender.
-
-@item 2
-at least one tall glyph.
-
-@item 3
-at least one each of a descender and a tall glyph.
-@end table
-
-@item ssc
-The amount of horizontal space (possibly negative) that should be added
-to the last glyph before a subscript.
-
-@item skw
-How far to right of the center of the last glyph in the @code{\w}
-argument, the center of an accent from a roman font should be placed
-over that glyph.
-@end table
-@endDefesc
-
-@DefescList {\\k, , p, }
-@DefescItem {\\k, @Lparen{}, ps, }
-@DefescListEnd {\\k, @Lbrack{}, position, @Rbrack{}}
-@cindex saving horizontal input line position (@code{\k})
-@cindex horizontal input line position, saving (@code{\k})
-@cindex input line position, horizontal, saving (@code{\k})
-@cindex position, horizontal input line, saving (@code{\k})
-@cindex line, input, horizontal position, saving (@code{\k})
-Store the current horizontal position in the @emph{input} line in
-number register with name @var{position} (one-character name@tie{}@var{p},
-two-character name @var{ps}). Use this, for example, to return to the
-beginning of a string for highlighting or other decoration.
-@endDefesc
-
-@Defreg {hp}
-@cindex horizontal input line position register (@code{hp})
-@cindex input line, horizontal position, register (@code{hp})
-@cindex position, horizontal, in input line, register (@code{hp})
-@cindex line, input, horizontal position, register (@code{hp})
-The current horizontal position at the input line.
-@endDefreg
-
-@Defreg {.k}
-@cindex horizontal output line position register (@code{.k})
-@cindex output line, horizontal position, register (@code{.k})
-@cindex position, horizontal, in output line, register (@code{.k})
-@cindex line, output, horizontal position, register (@code{.k})
-A read-only number register containing the current horizontal output
-position (relative to the current indentation).
-@endDefreg
-
-@Defesc {\\o, ', abc, '}
-@cindex overstriking glyphs (@code{\o})
-@cindex glyphs, overstriking (@code{\o})
-Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs
-are centered, and the resulting spacing is the largest width of the
-affected glyphs.
-@endDefesc
-
-@Defesc {\\z, , g, , }
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print glyph @var{g} with zero width, i.e., without spacing. Use
-this to overstrike glyphs left-aligned.
-@endDefesc
-
-@Defesc {\\Z, ', anything, '}
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print @var{anything}, then restore the horizontal and vertical position.
-The argument may not contain tabs or leaders.
-
-The following is an example of a strike-through macro:
-
-@Example
-.de ST
-.nr ww \w'\\$1'
-\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
-..
-.
-This is
-.ST "a test"
-an actual emergency!
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Drawing Requests, Traps, Page Motions, gtroff Reference
-@section Drawing Requests
-@cindex drawing requests
-@cindex requests for drawing
-
-@code{gtroff} provides a number of ways to draw lines and other figures
-on the page. Used in combination with the page motion commands (see
-@ref{Page Motions}, for more info), a wide variety of figures can be
-drawn. However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use graphic preprocessors like
-@code{gpic} or @code{ggrn}. @xref{gpic}, and @ref{ggrn}, for more
-information.
-
-All drawing is done via escapes.
-
-@DefescList {\\l, ', l, '}
-@DefescListEnd {\\l, ', lg, '}
-@cindex drawing horizontal lines (@code{\l})
-@cindex horizontal line, drawing (@code{\l})
-@cindex line, horizontal, drawing (@code{\l})
-Draw a line horizontally. @var{l} is the length of the line to be
-drawn. If it is positive, start the line at the current location and
-draw to the right; its end point is the new current location. Negative
-values are handled differently: The line starts at the current location
-and draws to the left, but the current location doesn't move.
-
-@var{l} can also be specified absolutely (i.e.@: with a leading
-@samp{|}) which draws back to the beginning of the input line.
-Default scaling indicator is @samp{m}.
-
-@cindex underscore glyph (@code{\[ru]})
-@cindex glyph, underscore (@code{\[ru]})
-@cindex line drawing glyph
-@cindex glyph, for line drawing
-The optional second parameter@tie{}@var{g} is a glyph to draw the line
-with. If this second argument is not specified, @code{gtroff} uses
-the underscore glyph, @code{\[ru]}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-To separate the two arguments (to prevent @code{gtroff} from
-interpreting a drawing glyph as a scaling indicator if the glyph is
-represented by a single character) use @code{\&}.
-
-Here a small useful example:
-
-@Example
-.de box
-\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-Note that this works by outputting a box rule (a vertical line), then
-the text given as an argument and then another box rule. Finally, the
-line drawing escapes both draw from the current location to the
-beginning of the @emph{input} line -- this works because the line
-length is negative, not moving the current point.
-@endDefesc
-
-@DefescList {\\L, ', l, '}
-@DefescListEnd {\\L, ', lg, '}
-@cindex drawing vertical lines (@code{\L})
-@cindex vertical line drawing (@code{\L})
-@cindex line, vertical, drawing (@code{\L})
-@cindex line drawing glyph
-@cindex glyph for line drawing
-@cindex box rule glyph (@code{\[br]})
-@cindex glyph, box rule (@code{\[br]})
-Draw vertical lines. Its parameters are
-similar to the @code{\l} escape, except that the default scaling
-indicator is @samp{v}. The movement is downwards for positive values,
-and upwards for negative values. The default glyph is the box rule
-glyph, @code{\[br]}. As with the vertical motion escapes, text
-processing blindly continues where the line ends.
-
-@Example
-This is a \L'3v'test.
-@endExample
-
-@noindent
-Here the result, produced with @code{grotty}.
-
-@Example
-This is a
- |
- |
- |test.
-@endExample
-@endDefesc
-
-@Defesc {\\D, ', command arg @dots{}, '}
-The @code{\D} escape provides a variety of drawing functions.
-Note that on character devices, only vertical and horizontal lines are
-supported within @code{grotty}; other devices may only support a subset
-of the available drawing functions.
-
-The default scaling indicator for all subcommands of @code{\D} is
-@samp{m} for horizontal distances and @samp{v} for vertical ones.
-Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}}
-which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}}
-which arguments are treated similar to the @code{defcolor} request.
-
-@table @code
-@item \D'l @var{dx} @var{dy}'
-@cindex line, drawing (@w{@code{\D'l @dots{}'}})
-@cindex drawing a line (@w{@code{\D'l @dots{}'}})
-Draw a line from the current location to the relative point specified by
-(@var{dx},@var{dy}), where positive values mean down and right,
-respectively. The end point of the line is the new current location.
-
-The following example is a macro for creating a box around a text string;
-for simplicity, the box margin is taken as a fixed value, 0.2@dmn{m}.
-
-@Example
-.de BOX
-. nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l (\\n[@@wd]u + .4m) 0'\
-\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-@noindent
-First, the width of the string is stored in register @code{@@wd}. Then,
-four lines are drawn to form a box, properly offset by the box margin.
-The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
-containing the largest height and depth of the whole string.
-
-@item \D'c @var{d}'
-@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
-@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
-Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at the
-current position. After drawing, the current location is positioned at the
-rightmost point of the circle.
-
-@item \D'C @var{d}'
-@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
-@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
-@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
-Draw a solid circle with the same parameters and behaviour as an outlined
-circle. No outline is drawn.
-
-@item \D'e @var{x} @var{y}'
-@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
-@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
-Draw an ellipse with a horizontal diameter of @var{x} and a vertical
-diameter of @var{y} with the leftmost point at the current position.
-After drawing, the current location is positioned at the rightmost point of
-the ellipse.
-
-@item \D'E @var{x} @var{y}'
-@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
-@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
-@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
-Draw a solid ellipse with the same parameters and behaviour as an
-outlined ellipse. No outline is drawn.
-
-@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
-@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
-@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
-Draw an arc clockwise from the current location through the two
-specified relative locations (@var{dx1},@var{dy1}) and
-(@var{dx2},@var{dy2}). The coordinates of the first point are relative
-to the current position, and the coordinates of the second point are
-relative to the first point. After drawing, the current position is moved
-to the final point of the arc.
-
-@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
-@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
-Draw a spline from the current location to the relative point
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.
-The current position is moved to the terminal point of the drawn curve.
-
-@item \D'f @var{n}'
-@cindex gray shading (@w{@code{\D'f @dots{}'}})
-@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
-Set the shade of gray to be used for filling solid objects to@tie{}@var{n};
-@var{n}@tie{}must be an integer between 0 and@tie{}1000, where 0
-corresponds solid white and 1000 to solid black, and values in between
-correspond to intermediate shades of gray. This applies only to solid
-circles, solid ellipses, and solid polygons. By default, a level of
-1000 is used.
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
-Don't use this command! It has the serious drawback that it will be
-always rounded to the next integer multiple of the horizontal resolution
-(the value of the @code{hor} keyword in the @file{DESC} file). Use
-@code{\M} (@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
-
-@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
-@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
-Draw a polygon from the current location to the relative position
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.
-When the specified data points are exhausted, a line is drawn back
-to the starting point. The current position is changed by adding the
-sum of all arguments with odd index to the actual horizontal position and
-the even ones to the vertical position.
-
-@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
-@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
-@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
-Draw a solid polygon with the same parameters and behaviour as an
-outlined polygon. No outline is drawn.
-
-Here a better variant of the box macro to fill the box with some color.
-Note that the box must be drawn before the text since colors in
-@code{gtroff} are not transparent; the filled polygon would hide the
-text completely.
-
-@Example
-.de BOX
-. nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\M[lightcyan]\
-\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
- (\\n[@@wd]u + .4m) 0 \
- 0 (\\n[rst]u - \\n[rsb]u + .4m) \
- -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\M[]\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-@item \D't @var{n}'
-@cindex line thickness (@w{@code{\D't @dots{}'}})
-@cindex thickness of lines (@w{@code{\D't @dots{}'}})
-Set the current line thickness to @var{n}@tie{}machine units. A value of
-zero selects the smallest available line thickness. A negative value
-makes the line thickness proportional to the current point size (this is
-the default behaviour of @acronym{AT&T} @code{troff}).
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@item \D'F@var{scheme} @var{color_components}'
-@cindex unnamed fill colors (@code{\D'F@dots{}'})
-@cindex fill colors, unnamed (@code{\D'F@dots{}'})
-@cindex colors, fill, unnamed (@code{\D'F@dots{}'})
-Change current fill color. @var{scheme} is a single letter denoting the
-color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
-(gray), or @samp{d} (default color). The color components use exactly
-the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
-command @code{\D'Fd'} doesn't take an argument.
-
-@emph{No} position changing!
-
-Examples:
-
-@Example
-@endExample
-\D'Fg .3' \" same gray as \D'f 700'
-\D'Fr #0000ff' \" blue
-@end table
-@endDefesc
-
-@xref{Graphics Commands}.
-
-@Defesc {\\b, ', string, '}
-@cindex pile, glyph (@code{\b})
-@cindex glyph pile (@code{\b})
-@cindex stacking glyphs (@code{\b})
-@dfn{Pile} a sequence of glyphs vertically, and center it vertically
-on the current line. Use it to build large brackets and braces.
-
-Here an example how to create a large opening brace:
-
-@Example
-\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-@endExample
-
-@cindex @code{\b}, limitations
-@cindex limitations of @code{\b} escape
-The first glyph is on the top, the last glyph in @var{string} is
-at the bottom. Note that @code{gtroff} separates the glyphs
-vertically by 1@dmn{m}, and the whole object is centered 0.5@dmn{m}
-above the current baseline; the largest glyph width is used as the
-width for the whole object. This rather unflexible positioning
-algorithm doesn't work with @option{-Tdvi} since the bracket pieces vary
-in height for this device. Instead, use the @code{eqn} preprocessor.
-
-@xref{Manipulating Spacing}, how to adjust the vertical spacing with
-the @code{\x} escape.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Traps, Diversions, Drawing Requests, gtroff Reference
-@section Traps
-@cindex traps
-
-@dfn{Traps} are locations, which, when reached, call a specified
-macro. These traps can occur at a given location on the page, at a
-given location in the current diversion, at a blank line,
-after a certain number of input lines, or at the end of input.
-
-@cindex planting a trap
-@cindex trap, planting
-Setting a trap is also called @dfn{planting}.
-@cindex trap, springing
-@cindex springing a trap
-It is also said that a trap is @dfn{sprung} if the associated macro
-is executed.
-
-@menu
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* End-of-input Traps::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Page Location Traps, Diversion Traps, Traps, Traps
-@subsection Page Location Traps
-@cindex page location traps
-@cindex traps, page location
-
-@dfn{Page location traps} perform an action when @code{gtroff}
-reaches or passes a certain vertical location on the page. Page
-location traps have a variety of purposes, including:
-
-@itemize
-@item
-setting headers and footers
-
-@item
-setting body text in multiple columns
-
-@item
-setting footnotes
-@end itemize
-
-@DefreqList {vpt, flag}
-@DefregListEnd {.vpt}
-@cindex enabling vertical position traps (@code{vpt})
-@cindex vertical position traps, enabling (@code{vpt})
-@cindex vertical position trap enable register (@code{.vpt})
-Enable vertical position traps if @var{flag} is non-zero, or disables
-them otherwise. Vertical position traps are traps set by the @code{wh}
-or @code{dt} requests. Traps set by the @code{it} request are not
-vertical position traps. The parameter that controls whether vertical
-position traps are enabled is global. Initially vertical position traps
-are enabled. The current setting of this is available in the
-@code{.vpt} read-only number register.
-
-Note that a page can't be ejected if @code{vpt} is set to zero.
-@endDefreq
-
-@Defreq {wh, dist [@Var{macro}]}
-Set a page location trap. Non-negative values for @var{dist} set
-the trap relative to the top of the page; negative values set
-the trap relative to the bottom of the page. Default scaling
-indicator is @samp{v}.
-
-@var{macro} is the name of the macro to execute when the
-trap is sprung. If @var{macro} is missing, remove the first trap
-(if any) at @var{dist}.
-
-@cindex page headers
-@cindex page footers
-@cindex headers
-@cindex footers
-The following is a simple example of how many macro packages
-set headers and footers.
-
-@Example
-.de hd \" Page header
-' sp .5i
-. tl 'Title''date'
-' sp .3i
-..
-.
-.de fo \" Page footer
-' sp 1v
-. tl ''%''
-' bp
-..
-.
-.wh 0 hd \" trap at top of the page
-.wh -1i fo \" trap one inch from bottom
-@endExample
-
-A trap at or below the bottom of the page is ignored; it can be made
-active by either moving it up or increasing the page length so that the
-trap is on the page.
-
-It is possible to have more than one trap at the same location; to do so,
-the traps must be defined at different locations, then moved together with
-the @code{ch} request; otherwise the second trap would replace the first
-one. Earlier defined traps hide later defined traps if moved to the same
-position (the many empty lines caused by the @code{bp} request are omitted
-in the following example):
-
-@Example
-.de a
-. nop a
-..
-.de b
-. nop b
-..
-.de c
-. nop c
-..
-.
-.wh 1i a
-.wh 2i b
-.wh 3i c
-.bp
- @result{} a b c
-@endExample
-@Example
-.ch b 1i
-.ch c 1i
-.bp
- @result{} a
-@endExample
-@Example
-.ch a 0.5i
-.bp
- @result{} a b
-@endExample
-@endDefreq
-
-@Defreg {.t}
-@cindex distance to next trap register (@code{.t})
-@cindex trap, distance, register (@code{.t})
-A read-only number register holding the distance to the next trap.
-
-If there are no traps between the current position and the bottom of the
-page, it contains the distance to the page bottom. In a diversion, the
-distance to the page bottom is infinite (the returned value is the biggest
-integer which can be represented in @code{groff}) if there are no diversion
-traps.
-@endDefreg
-
-@Defreq {ch, macro [@Var{dist}]}
-@cindex changing trap location (@code{ch})
-@cindex trap, changing location (@code{ch})
-Change the location of a trap.
-The first argument is the name of the macro to be invoked at
-the trap, and the second argument is the new location for the trap
-(note that the parameters are specified in opposite order as in the
-@code{wh} request). This is useful for building up footnotes in a
-diversion to allow more space at the bottom of the page for them.
-
-Default scaling indicator for @var{dist} is @samp{v}. If @var{dist}
-is missing, the trap is removed.
-
-@c XXX
-
-@ignore
-@Example
-... (simplified) footnote example ...
-@endExample
-@end ignore
-@endDefreq
-
-@Defreg {.ne}
-The read-only number register @code{.ne} contains the amount of space
-that was needed in the last @code{ne} request that caused a trap to be
-sprung. Useful in conjunction with the @code{.trunc} register.
-@xref{Page Control}, for more information.
-
-Since the @code{.ne} register is only set by traps it doesn't make
-much sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.trunc}
-@cindex @code{ne} request, and the @code{.trunc} register
-@cindex truncated vertical space register (@code{.trunc})
-A read-only register containing the amount of vertical space truncated
-by the most recently sprung vertical position trap, or, if the trap was
-sprung by an @code{ne} request, minus the amount of vertical motion
-produced by the @code{ne} request. In other words, at the point a trap
-is sprung, it represents the difference of what the vertical position
-would have been but for the trap, and what the vertical position
-actually is.
-
-Since the @code{.trunc} register is only set by traps it doesn't make
-much sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.pe}
-@cindex @code{bp} request, and traps (@code{.pe})
-@cindex traps, sprung by @code{bp} request (@code{.pe})
-@cindex page ejecting register (@code{.pe})
-A read-only register which is set to@tie{}1 while a page is ejected with
-the @code{bp} request (or by the end of input).
-
-Outside of traps this register is always zero. In the following example,
-only the second call to@tie{}@code{x} is caused by @code{bp}.
-
-@Example
-.de x
-\&.pe=\\n[.pe]
-.br
-..
-.wh 1v x
-.wh 4v x
-A line.
-.br
-Another line.
-.br
- @result{} A line.
- .pe=0
- Another line.
-
- .pe=1
-@endExample
-@endDefreg
-
-@cindex diversions, and traps
-@cindex traps, and diversions
-An important fact to consider while designing macros is that diversions and
-traps do not interact normally. For example, if a trap invokes a header
-macro (while outputting a diversion) which tries to change the font on the
-current page, the effect will not be visible before the diversion has
-completely been printed (except for input protected with @code{\!} or
-@code{\?}) since the data in the diversion is already formatted. In most
-cases, this is not the expected behaviour.
-
-@c ---------------------------------------------------------------------
-
-@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
-@subsection Diversion Traps
-@cindex diversion traps
-@cindex traps, diversion
-
-@Defreq {dt, [@Var{dist} @Var{macro}]}
-@cindex @code{.t} register, and diversions
-@cindex setting diversion trap (@code{dt})
-@cindex diversion trap, setting (@code{dt})
-@cindex trap, diversion, setting (@code{dt})
-Set a trap @emph{within} a diversion.
-@var{dist} is the location of the trap
-(identical to the @code{wh} request; default scaling indicator is
-@samp{v}) and @var{macro} is the name of the macro to be invoked.
-If called without arguments, the diversion trap is removed.
-
-Note that there exists only a single diversion trap.
-
-The number register @code{.t} still works within diversions.
-@xref{Diversions}, for more information.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
-@subsection Input Line Traps
-@cindex input line traps
-@cindex traps, input line
-
-@DefreqList {it, n macro}
-@DefreqItem {itc, n macro}
-@cindex setting input line trap (@code{it})
-@cindex input line trap, setting (@code{it})
-@cindex trap, input line, setting (@code{it})
-Set an input line trap.
-@var{n}@tie{}is the number of lines of input which may be read before
-springing the trap, @var{macro} is the macro to be invoked.
-Request lines are not counted as input lines.
-
-For example, one possible use is to have a macro which prints the
-next @var{n}@tie{}lines in a bold font.
-
-@Example
-.de B
-. it \\$1 B-end
-. ft B
-..
-.
-.de B-end
-. ft R
-..
-@endExample
-
-@cindex input line traps and interrupted lines (@code{itc})
-@cindex interrupted lines and input line traps (@code{itc})
-@cindex traps, input line, and interrupted lines (@code{itc})
-@cindex lines, interrupted, and input line traps (@code{itc})
-The @code{itc} request is identical
-except that an interrupted text line (ending with @code{\c})
-is not counted as a separate line.
-
-Both requests are associated with the current environment
-(@pxref{Environments}); switching to another environment disables the
-current input trap, and going back reactivates it, restoring the number
-of already processed lines.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Blank Line Traps, End-of-input Traps, Input Line Traps, Traps
-@subsection Blank Line Traps
-@cindex blank line traps
-@cindex traps, blank line
-
-@Defreq {blm, macro}
-@cindex blank line macro (@code{blm})
-Set a blank line trap.
-@code{gtroff} executes @var{macro} when it encounters a blank line in
-the input file.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node End-of-input Traps, , Blank Line Traps, Traps
-@subsection End-of-input Traps
-@cindex end-of-input traps
-@cindex traps, end-of-input
-
-@Defreq {em, macro}
-@cindex setting end-of-input trap (@code{em})
-@cindex end-of-input trap, setting (@code{em})
-@cindex trap, end-of-input, setting (@code{em})
-@cindex end-of-input macro (@code{em})
-@cindex macro, end-of-input (@code{em})
-Set a trap at the end of input. @var{macro} is executed after the
-last line of the input file has been processed.
-
-For example, if the document had to have a section at the bottom of the
-last page for someone to approve it, the @code{em} request could be
-used.
-
-@Example
-.de approval
-. ne 5v
-. sp |(\\n[.t] - 6v)
-. in +4i
-. lc _
-. br
-Approved:\t\a
-. sp
-Date:\t\t\a
-..
-.
-.em approval
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Diversions, Environments, Traps, gtroff Reference
-@section Diversions
-@cindex diversions
-
-In @code{gtroff} it is possible to @dfn{divert} text into a named
-storage area. Due to the similarity to defining macros it is sometimes
-said to be stored in a macro. This is used for saving text for output
-at a later time, which is useful for keeping blocks of text on the same
-page, footnotes, tables of contents, and indices.
-
-@cindex top-level diversion
-@cindex diversion, top-level
-For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
-diversion} if no diversion is active (i.e., the data is diverted to the
-output device).
-
-@DefreqList {di, macro}
-@DefreqListEnd {da, macro}
-@cindex beginning diversion (@code{di})
-@cindex diversion, beginning (@code{di})
-@cindex ending diversion (@code{di})
-@cindex diversion, ending (@code{di})
-@cindex appending to a diversion (@code{da})
-@cindex diversion, appending (@code{da})
-Begin a diversion. Like the @code{de}
-request, it takes an argument of a macro name to divert subsequent text
-into. The @code{da} macro appends to an existing diversion.
-
-@code{di} or @code{da} without an argument ends the diversion.
-@endDefreq
-
-@DefreqList {box, macro}
-@DefreqListEnd {boxa, macro}
-Begin (or appends to) a diversion like the
-@code{di} and @code{da} requests.
-The difference is that @code{box} and @code{boxa}
-do not include a partially-filled line in the diversion.
-
-Compare this:
-
-@Example
-Before the box.
-.box xxx
-In the box.
-.br
-.box
-After the box.
-.br
- @result{} Before the box. After the box.
-.xxx
- @result{} In the box.
-@endExample
-
-@noindent
-with this:
-
-@Example
-Before the diversion.
-.di yyy
-In the diversion.
-.br
-.di
-After the diversion.
-.br
- @result{} After the diversion.
-.yyy
- @result{} Before the diversion. In the diversion.
-@endExample
-
-@code{box} or @code{boxa} without an argument ends the diversion.
-@endDefreq
-
-@DefregList {.z}
-@DefregListEnd {.d}
-@cindex @code{nl} register, and @code{.d}
-@cindex nested diversions
-@cindex diversion, nested
-@cindex diversion name register (@code{.z})
-@cindex vertical position in diversion register (@code{.d})
-@cindex position, vertical, in diversion, register (@code{.d})
-@cindex diversion, vertical position in, register (@code{.d})
-Diversions may be nested. The read-only number register @code{.z}
-contains the name of the current diversion (this is a string-valued
-register). The read-only number register @code{.d} contains the current
-vertical place in the diversion. If not in a diversion it is the same
-as register @code{nl}.
-@endDefreg
-
-@Defreg {.h}
-@cindex high-water mark register (@code{.h})
-@cindex mark, high-water, register (@code{.h})
-@cindex position of lowest text line (@code{.h})
-@cindex text line, position of lowest (@code{.h})
-The @dfn{high-water mark} on the current page. It corresponds to the
-text baseline of the lowest line on the page. This is a read-only
-register.
-
-@Example
-.tm .h==\n[.h], nl==\n[nl]
- @result{} .h==0, nl==-1
-This is a test.
-.br
-.sp 2
-.tm .h==\n[.h], nl==\n[nl]
- @result{} .h==40, nl==120
-@endExample
-
-@cindex @code{.h} register, difference to @code{nl}
-@cindex @code{nl} register, difference to @code{.h}
-@noindent
-As can be seen in the previous example, empty lines are not considered
-in the return value of the @code{.h} register.
-@endDefreg
-
-@DefregList {dn}
-@DefregListEnd {dl}
-@cindex @code{dn} register, and @code{da} (@code{boxa})
-@cindex @code{dl} register, and @code{da} (@code{boxa})
-@cindex @code{da} request, and @code{dn} (@code{dl})
-@cindex @code{boxa} request, and @code{dn} (@code{dl})
-After completing a diversion, the read-write number registers @code{dn}
-and @code{dl} contain the vertical and horizontal size of the diversion.
-Note that only the just processed lines are counted: For the computation
-of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
-handled as if @code{di} and @code{box} had been used -- lines which have
-been already stored in a macro are not taken into account.
-
-@Example
-.\" Center text both horizontally & vertically
-.
-.\" Enclose macro definitions in .eo and .ec
-.\" to avoid the doubling of the backslash
-.eo
-.\" macro .(c starts centering mode
-.de (c
-. br
-. ev (c
-. evc 0
-. in 0
-. nf
-. di @@c
-..
-@endExample
-@Example
-.\" macro .)c terminates centering mode
-.de )c
-. br
-. ev
-. di
-. nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
-. sp \n[@@s]u
-. ce 1000
-. @@c
-. ce 0
-. sp \n[@@s]u
-. br
-. fi
-. rr @@s
-. rm @@s
-. rm @@c
-..
-.\" End of macro definitions, restore escape mechanism
-.ec
-@endExample
-@endDefreg
-
-@DefescList {\\!, , , }
-@DefescListEnd {\\?, , anything, \\?}
-@cindex transparent output (@code{\!}, @code{\?})
-@cindex output, transparent (@code{\!}, @code{\?})
-Prevent requests, macros, and escapes from being
-interpreted when read into a diversion. Both escapes take the given text
-and @dfn{transparently} embed it into the diversion. This is useful for
-macros which shouldn't be invoked until the diverted text is actually
-output.
-
-The @code{\!} escape transparently embeds text up to
-and including the end of the line.
-The @code{\?} escape transparently embeds text until the next
-occurrence of the @code{\?} escape. Example:
-
-@Example
-\?@var{anything}\?
-@endExample
-
-@noindent
-@var{anything} may not contain newlines; use @code{\!} to embed
-newlines in a diversion. The escape sequence @code{\?} is also
-recognized in copy mode and turned into a single internal code; it is
-this code that terminates @var{anything}. Thus the following example
-prints@tie{}4.
-
-@Example
-.nr x 1
-.nf
-.di d
-\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
-.di
-.nr x 2
-.di e
-.d
-.di
-.nr x 3
-.di f
-.e
-.di
-.nr x 4
-.f
-@endExample
-
-Both escapes read the data in copy mode.
-
-@cindex @code{\!}, in top-level diversion
-@cindex top-level diversion, and @code{\!}
-@cindex diversion, top-level, and @code{\!}
-If @code{\!} is used in the top-level diversion, its argument is
-directly embedded into the @code{gtroff} intermediate output. This can
-be used for example to control a postprocessor which processes the data
-before it is sent to the device driver.
-
-@cindex @code{\?}, in top-level diversion
-@cindex top-level diversion, and @code{\?}
-@cindex diversion, top-level, and @code{\?}
-The @code{\?} escape used in the top-level diversion produces no output
-at all; its argument is simply ignored.
-@endDefesc
-
-@cindex @code{\!}, and @code{output}
-@cindex @code{output} request, and @code{\!}
-@Defreq {output, string}
-Emit @var{string} directly to the @code{gtroff} intermediate output
-(subject to copy-mode interpretation); this is similar to @code{\!} used
-at the top level. An initial double quote in @var{string} is stripped off
-to allow initial blanks.
-
-This request can't be used before the first page has started -- if you get
-an error, simply insert @code{.br} before the @code{output} request.
-
-Without argument, @code{output} is ignored.
-
-Use with caution! It is normally only needed for mark-up used by a
-postprocessor which does something with the output before sending it to
-the output device, filtering out @var{string} again.
-@endDefreq
-
-@Defreq {asciify, div}
-@cindex unformatting diversions (@code{asciify})
-@cindex diversion, unformatting (@code{asciify})
-@cindex @code{trin} request, and @code{asciify}
-@dfn{Unformat} the diversion specified by @var{div}
-in such a way that @acronym{ASCII} characters, characters translated with
-the @code{trin} request, space characters, and some escape sequences that
-were formatted and diverted are treated like ordinary input
-characters when the diversion is reread. It can be also used for gross
-hacks; for example, the following sets register@tie{}@code{n} to@tie{}1.
-
-@Example
-.tr @@.
-.di x
-@@nr n 1
-.br
-.di
-.tr @@@@
-.asciify x
-.x
-@endExample
-
-@xref{Copy-in Mode}.
-@endDefreq
-
-@Defreq {unformat, div}
-Like @code{asciify}, unformat the specified diversion.
-However, @code{unformat} only unformats spaces and tabs
-between words.
-Unformatted tabs are treated as input tokens,
-and spaces are stretchable again.
-
-The vertical size of lines is not preserved; glyph information (font,
-font size, space width, etc.)@: is retained.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Environments, Suppressing output, Diversions, gtroff Reference
-@section Environments
-@cindex environments
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers. To solve this
-@code{gtroff} processes text in @dfn{environments}. An
-environment contains most of the parameters that control text
-processing. It is possible to switch amongst these environments; by
-default @code{gtroff} processes text in environment@tie{}0. The
-following is the information kept in an environment.
-
-@itemize @bullet
-@item
-font parameters (size, family, style, glyph height and slant, space
-and sentence space size)
-
-@item
-page parameters (line length, title length, vertical spacing,
-line spacing, indentation, line numbering, centering, right-justifying,
-underlining, hyphenation data)
-
-@item
-fill and adjust mode
-
-@item
-tab stops, tab and leader characters, escape character,
-no-break and hyphen indicators, margin character data
-
-@item
-partially collected lines
-
-@item
-input traps
-
-@item
-drawing and fill colours
-@end itemize
-
-These environments may be given arbitrary names (see @ref{Identifiers},
-for more info). Old versions of @code{troff} only had environments
-named @samp{0}, @samp{1}, and @samp{2}.
-
-@DefreqList {ev, [@Var{env}]}
-@DefregListEnd {.ev}
-@cindex switching environments (@code{ev})
-@cindex environment, switching (@code{ev})
-@cindex environment number/name register (@code{.ev})
-Switch to another environment. The argument @var{env} is the name of
-the environment to switch to. With no argument, @code{gtroff} switches
-back to the previous environment. There is no limit on the number of
-named environments; they are created the first time that they are
-referenced. The @code{.ev} read-only register contains the name or
-number of the current environment. This is a string-valued register.
-
-Note that a call to @code{ev} (with argument) pushes the previously
-active environment onto a stack. If, say, environments @samp{foo},
-@samp{bar}, and @samp{zap} are called (in that order), the first
-@code{ev} request without parameter switches back to environment
-@samp{bar} (which is popped off the stack), and a second call
-switches back to environment @samp{foo}.
-
-Here is an example:
-
-@Example
-.ev footnote-env
-.fam N
-.ps 6
-.vs 8
-.ll -.5i
-.ev
-
-...
-
-.ev footnote-env
-\(dg Note the large, friendly letters.
-.ev
-@endExample
-@endDefreq
-
-@Defreq {evc, env}
-@cindex copying environment (@code{evc})
-@cindex environment, copying (@code{evc})
-Copy the environment @var{env} into the current environment.
-
-The following environment data is not copied:
-
-@itemize @bullet
-@item
-Partially filled lines.
-
-@item
-The status whether the previous line was interrupted.
-
-@item
-The number of lines still to center, or to right-justify, or to underline
-(with or without underlined spaces); they are set to zero.
-
-@item
-The status whether a temporary indentation is active.
-
-@item
-Input traps and its associated data.
-
-@item
-Line numbering mode is disabled; it can be reactivated with
-@w{@samp{.nm +0}}.
-
-@item
-The number of consecutive hyphenated lines (set to zero).
-@end itemize
-@endDefreq
-
-@DefregList {.w}
-@DefregItem {.cht}
-@DefregItem {.cdp}
-@DefregListEnd {.csk}
-@cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex width, of last glyph (@code{.w})
-@cindex height, of last glyph (@code{.cht})
-@cindex depth, of last glyph (@code{.cdp})
-@cindex skew, of last glyph (@code{.csk})
-@cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-The @code{\n[.w]} register contains the
-width of the last glyph added to the current environment.
-
-The @code{\n[.cht]} register contains the
-height of the last glyph added to the current environment.
-
-The @code{\n[.cdp]} register contains the
-depth of the last glyph added to the current environment.
-It is positive for glyphs extending below the baseline.
-
-The @code{\n[.csk]} register contains the
-@dfn{skew} (how far to the right of the glyph's center
-that @code{gtroff} should place an accent)
-of the last glyph added to the current environment.
-@endDefreg
-
-@Defreg {.n}
-@cindex environment, previous line length (@code{.n})
-@cindex line length, previous (@code{.n})
-@cindex length of previous line (@code{.n})
-@cindex previous line length (@code{.n})
-The @code{\n[.n]} register contains the
-length of the previous output line in the current environment.
-@endDefreg
-
-
-@c =====================================================================
-
-@node Suppressing output, Colors, Environments, gtroff Reference
-@section Suppressing output
-
-@Defesc {\\O, , num, }
-@cindex suppressing output (@code{\O})
-@cindex output, suppressing (@code{\O})
-Disable or enable output depending on the value of @var{num}:
-
-@table @samp
-@item \O0
-Disable any glyphs from being emitted to the device driver, provided that
-the escape occurs at the outer level (see @code{\O[3]} and @code{\O[4]}).
-Motion is not suppressed so effectively @code{\O[0]} means @emph{pen up}.
-
-@item \O1
-Enable output of glyphs, provided that the escape occurs at the outer
-level.
-@end table
-
-@vindex opminx
-@vindex opminy
-@vindex opmaxx
-@vindex opmaxy
-@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
-@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
-@xref{Register Index}. These four registers mark the top left and
-bottom right hand corners of a box which encompasses all written glyphs.
-
-For example the input text:
-
-@Example
-Hello \O[0]world \O[1]this is a test.
-@endExample
-
-@noindent
-produces the following output:
-
-@Example
-Hello this is a test.
-@endExample
-
-@table @samp
-@item \O2
-Provided that the escape occurs at the outer level, enable output of
-glyphs and also write out to @code{stderr} the page number and four
-registers encompassing the glyphs previously written since the last call
-to @code{\O}.
-
-@item \O3
-Begin a nesting level. At start-up, @code{gtroff} is at outer level.
-
-@item \O4
-End a nesting level.
-
-@item \O[5@var{P}@var{filename}]
-This escape is @code{grohtml} specific. Provided that this escape
-occurs at the outer nesting level write the @code{filename} to
-@code{stderr}. The position of the image, @var{P}, must be specified
-and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
-right, centered, inline). @var{filename} will be associated with the
-production of the next inline image.
-@end table
-@endDefesc
-
-@c =====================================================================
-
-@node Colors, I/O, Suppressing output, gtroff Reference
-@section Colors
-@cindex colors
-
-@DefreqList {color, [@Var{n}]}
-@DefregListEnd {.color}
-If @var{n} is missing or non-zero, activate colors (this is the default);
-otherwise, turn it off.
-
-The read-only number register @code{.color} is@tie{}1 if colors are active,
-0@tie{}otherwise.
-
-Internally, @code{color} sets a global flag; it does not produce a token.
-Similar to the @code{cp} request, you should use it at the beginning of
-your document to control color output.
-
-Colors can be also turned off with the @option{-c} command line option.
-@endDefreq
-
-@Defreq {defcolor, ident scheme color_components}
-Define color with name @var{ident}. @var{scheme} can be one of the
-following values: @code{rgb} (three components), @code{cmy} (three
-components), @code{cmyk} (four components), and @code{gray} or
-@code{grey} (one component).
-
-@cindex default color
-@cindex color, default
-Color components can be given either as a hexadecimal string or as
-positive decimal integers in the range 0--65535. A hexadecimal string
-contains all color components concatenated. It must start with either
-@code{#} or @code{##}; the former specifies hex values in the range
-0--255 (which are internally multiplied by@tie{}257), the latter in the
-range 0--65535. Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
-(magenta). The default color name @c{default} can't be redefined; its
-value is device-specific (usually black). It is possible that the
-default color for @code{\m} and @code{\M} is not identical.
-
-@cindex @code{f} unit, and colors
-@cindex unit, @code{f}, and colors
-A new scaling indicator@tie{}@code{f} has been introduced which multiplies
-its value by 65536; this makes it convenient to specify color components
-as fractions in the range 0 to@tie{}1 (1f equals 65536u). Example:
-
-@Example
-.defcolor darkgreen rgb 0.1f 0.5f 0.2f
-@endExample
-
-Note that @code{f} is the default scaling indicator for the
-@code{defcolor} request, thus the above statement is equivalent to
-
-@Example
-.defcolor darkgreen rgb 0.1 0.5 0.2
-@endExample
-@endDefreq
-
-@DefreqList {gcolor, [@Var{color}]}
-@DefescItem {\\m, , c, }
-@DefescItem {\\m, @Lparen{}, co, }
-@DefescItem {\\m, @Lbrack{}, color, @Rbrack{}}
-@DefregListEnd {.m}
-Set (glyph) drawing color. The following examples show how to turn the
-next four words red.
-
-@Example
-.gcolor red
-these are in red
-.gcolor
-and these words are in black.
-@endExample
-
-@Example
-\m[red]these are in red\m[] and these words are in black.
-@endExample
-
-The escape @code{\m[]} returns to the previous color, as does a call to
-@code{gcolor} without an argument.
-
-@cindex drawing color name register (@code{.m})
-@cindex name, drawing color, register (@code{.m})
-@cindex color name, drawing, register (@code{.m})
-The name of the current drawing color is available in the read-only,
-string-valued number register @samp{.m}.
-
-The drawing color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\m} doesn't produce an input token in @code{gtroff}.
-As a consequence, it can be used in requests like @code{mc} (which
-expects a single character as an argument) to change the color on
-the fly:
-
-@Example
-.mc \m[red]x\m[]
-@endExample
-@endDefesc
-
-@DefreqList {fcolor, [@Var{color}]}
-@DefescItem {\\M, , c, }
-@DefescItem {\\M, @Lparen{}, co, }
-@DefescItem {\\M, @Lbrack{}, color, @Rbrack{}}
-@DefregListEnd {.M}
-Set fill (background) color for filled objects drawn with the
-@code{\D'@dots{}'} commands.
-
-A red ellipse can be created with the following code:
-
-@Example
-\M[red]\h'0.5i'\D'E 2i 1i'\M[]
-@endExample
-
-The escape @code{\M[]} returns to the previous fill color, as does a call to
-@code{fcolor} without an argument.
-
-@cindex background color name register (@code{.M})
-@cindex name, background color, register (@code{.M})
-@cindex color name, background, register (@code{.M})
-@cindex fill color name register (@code{.M})
-@cindex name, fill color, register (@code{.M})
-@cindex color name, fill, register (@code{.M})
-The name of the current fill (background) color is available in the
-read-only, string-valued number register @samp{.M}.
-
-The fill color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\M} doesn't produce an input token in @code{gtroff}.
-@endDefesc
-
-
-@c =====================================================================
-
-@node I/O, Postprocessor Access, Colors, gtroff Reference
-@section I/O
-@cindex i/o
-@cindex input and output requests
-@cindex requests for input and output
-@cindex output and input requests
-
-@code{gtroff} has several requests for including files:
-
-@Defreq {so, file}
-@cindex including a file (@code{so})
-@cindex file, inclusion (@code{so})
-Read in the specified @var{file} and
-includes it in place of the @code{so} request. This is quite useful for
-large documents, e.g.@: keeping each chapter in a separate file.
-@xref{gsoelim}, for more information.
-
-Since @code{gtroff} replaces the @code{so} request with the contents
-of @code{file}, it makes a difference whether the data is terminated with
-a newline or not: Assuming that file @file{xxx} contains the word
-@samp{foo} without a final newline, this
-
-@Example
-This is
-.so xxx
-bar
-@endExample
-
-@noindent
-yields @samp{This is foobar}.
-
-The search path for @var{file} can be controlled with the @option{-I} command
-line option.
-@endDefreq
-
-@Defreq {pso, command}
-Read the standard output from the specified @var{command}
-and includes it in place of the @code{pso} request.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the default).
-Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
-mode.
-
-The comment regarding a final newline for the @code{so} request is valid
-for @code{pso} also.
-@endDefreq
-
-@Defreq {mso, file}
-Identical to the @code{so} request except that @code{gtroff} searches for
-the specified @var{file} in the same directories as macro files for the
-the @option{-m} command line option. If the file name to be included
-has the form @file{@var{name}.tmac} and it isn't found, @code{mso} tries
-to include @file{tmac.@var{name}} and vice versa.
-@endDefreq
-
-@DefreqList {trf, file}
-@DefreqListEnd {cf, file}
-@cindex transparent output (@code{cf}, @code{trf})
-@cindex output, transparent (@code{cf}, @code{trf})
-Transparently output the contents of @var{file}. Each line is output
-as if it were preceded by @code{\!}; however, the lines are not subject
-to copy mode interpretation. If the file does not end with a newline,
-then a newline is added (@code{trf} only). For example, to define a
-macro@tie{}@code{x} containing the contents of file@tie{}@file{f}, use
-
-@Example
-.di x
-.trf f
-.di
-@endExample
-
-Both @code{trf} and @code{cf}, when used in a diversion,
-embeds an object in the diversion which, when reread, causes the
-contents of @var{file} to be transparently copied through to the
-output. In @acronym{UNIX} @code{troff}, the contents of @var{file}
-is immediately copied through to the output regardless of whether there
-is a current diversion; this behaviour is so anomalous that it must be
-considered a bug.
-
-@cindex @code{trf} request, and invalid characters
-@cindex characters, invalid for @code{trf} request
-@cindex invalid characters for @code{trf} request
-While @code{cf} copies the contents of @var{file} completely unprocessed,
-@code{trf} disallows characters such as NUL that are not valid
-@code{gtroff} input characters (@pxref{Identifiers}).
-
-Both requests cause a line break.
-@endDefreq
-
-@Defreq {nx, [@Var{file}]}
-@cindex processing next file (@code{nx})
-@cindex file, processing next (@code{nx})
-@cindex next file, processing (@code{nx})
-Force @code{gtroff} to continue processing of
-the file specified as an argument. If no argument is given, immediately
-jump to the end of file.
-@endDefreq
-
-@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
-@cindex reading from standard input (@code{rd})
-@cindex standard input, reading from (@code{rd})
-@cindex input, standard, reading from (@code{rd})
-Read from standard input, and include what is read as though it
-were part of the input file. Text is read until a blank line
-is encountered.
-
-If standard input is a TTY input device (keyboard), write @var{prompt}
-to standard error, followed by a colon (or send BEL for a beep if no
-argument is given).
-
-Arguments after @var{prompt} are available for the input. For example,
-the line
-
-@Example
-.rd data foo bar
-@endExample
-
-with the input @w{@samp{This is \$2.}} prints
-
-@Example
-This is bar.
-@endExample
-@endDefreq
-
-@cindex form letters
-@cindex letters, form
-Using the @code{nx} and @code{rd} requests,
-it is easy to set up form letters. The form
-letter template is constructed like this, putting the following lines
-into a file called @file{repeat.let}:
-
-@Example
-.ce
-\*(td
-.sp 2
-.nf
-.rd
-.sp
-.rd
-.fi
-Body of letter.
-.bp
-.nx repeat.let
-@endExample
-
-@cindex @code{ex} request, used with @code{nx} and @code{rd}
-@noindent
-When this is run, a file containing the following lines should be
-redirected in. Note that requests included in this file are executed
-as though they were part of the form letter. The last block of input
-is the @code{ex} request which tells @code{groff} to stop processing. If
-this was not there, @code{groff} would not know when to stop.
-
-@Example
-Trent A. Fisher
-708 NW 19th Av., #202
-Portland, OR 97209
-
-Dear Trent,
-
-Len Adollar
-4315 Sierra Vista
-San Diego, CA 92103
-
-Dear Mr. Adollar,
-
-.ex
-@endExample
-
-@Defreq {pi, pipe}
-Pipe the output of @code{gtroff} to the shell command(s)
-specified by @var{pipe}. This request must occur before
-@code{gtroff} has a chance to print anything.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@code{pi} causes an error if used in safer mode (which is the default).
-Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
-mode.
-
-Multiple calls to @code{pi} are allowed, acting as a chain. For example,
-
-@Example
-.pi foo
-.pi bar
-...
-@endExample
-
-is the same as @w{@samp{.pi foo | bar}}.
-
-@cindex @code{groff}, and @code{pi} request
-@cindex @code{pi} request, and @code{groff}
-Note that the intermediate output format of @code{gtroff} is piped to
-the specified commands. Consequently, calling @code{groff} without the
-@option{-Z} option normally causes a fatal error.
-@endDefreq
-
-@DefreqList {sy, cmds}
-@DefregListEnd {systat}
-Execute the shell command(s) specified by @var{cmds}. The output is not
-saved anyplace, so it is up to the user to do so.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the default).
-Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
-mode.
-
-For example, the following code fragment introduces the current time into a
-document:
-
-@cindex time, current
-@cindex current time
-@pindex perl
-@Example
-.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
- (localtime(time))[2,1,0]' > /tmp/x\n[$$]
-.so /tmp/x\n[$$]
-.sy rm /tmp/x\n[$$]
-\nH:\nM:\nS
-@endExample
-
-@noindent
-Note that this works by having the @code{perl} script (run by @code{sy})
-print out the @code{nr} requests which set the number registers
-@code{H}, @code{M}, and @code{S}, and then reads those commands in with
-the @code{so} request.
-
-For most practical purposes, the number registers @code{seconds},
-@code{minutes}, and @code{hours} which are initialized at start-up of
-@code{gtroff} should be sufficient. Use the @code{af} request to get a
-formatted output:
-
-@Example
-.af hours 00
-.af minutes 00
-.af seconds 00
-\n[hours]:\n[minutes]:\n[seconds]
-@endExample
-
-@cindex @code{system()} return value register (@code{systat})
-The @code{systat} read-write number register contains the return value
-of the @code{system()} function executed by the last @code{sy} request.
-@endDefreq
-
-@DefreqList {open, stream file}
-@DefreqListEnd {opena, stream file}
-@cindex opening file (@code{open})
-@cindex file, opening (@code{open})
-@cindex appending to a file (@code{opena})
-@cindex file, appending to (@code{opena})
-Open the specified @var{file} for writing and
-associates the specified @var{stream} with it.
-
-The @code{opena} request is like @code{open}, but if the file exists,
-append to it instead of truncating it.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-Both @code{open} and @code{opena} cause an error if used in safer mode
-(which is the default). Use @code{groff}'s or @code{troff}'s @option{-U}
-option to activate unsafe mode.
-@endDefreq
-
-@DefreqList {write, stream data}
-@DefreqListEnd {writec, stream data}
-@cindex copy-in mode, and @code{write} requests
-@cindex mode, copy-in, and @code{write} requests
-@cindex writing to file (@code{write})
-@cindex file, writing to (@code{write})
-Write to the file associated with the specified @var{stream}.
-The stream must previously have
-been the subject of an open request. The remainder of the line is
-interpreted as the @code{ds} request reads its second argument: A
-leading @samp{"} is stripped, and it is read in copy-in mode.
-
-The @code{writec} request is like @code{write}, but only
-@code{write} appends a newline to the data.
-@endDefreq
-
-@Defreq {writem, stream xx}
-@cindex @code{asciify} request, and @code{writem}
-Write the contents of the macro or string @var{xx}
-to the file associated with the specified @var{stream}.
-
-@var{xx} is read in copy mode, i.e., already formatted elements are
-ignored. Consequently, diversions must be unformatted with the
-@code{asciify} request before calling @code{writem}. Usually, this
-means a loss of information.
-@endDefreq
-
-@Defreq {close, stream}
-@cindex closing file (@code{close})
-@cindex file, closing (@code{close})
-Close the specified @var{stream};
-the stream is no longer an acceptable argument to the
-@code{write} request.
-
-Here a simple macro to write an index entry.
-
-@Example
-.open idx test.idx
-.
-.de IX
-. write idx \\n[%] \\$*
-..
-.
-.IX test entry
-.
-.close idx
-@endExample
-@endDefreq
-
-@DefescList {\\V, , e, }
-@DefescItem {\\V, @Lparen{}, ev, }
-@DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}}
-Interpolate the contents of the specified environment variable
-@var{env} (one-character name@tie{}@var{e}, two-character name @var{ev})
-as returned by the function @code{getenv}. @code{\V} is interpreted
-in copy-in mode.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
-@section Postprocessor Access
-@cindex postprocessor access
-@cindex access of postprocessor
-
-There are two escapes which give information directly to the
-postprocessor. This is particularly useful for embedding
-@sc{PostScript} into the final document.
-
-@Defesc {\\X, ', xxx, '}
-Embeds its argument into the @code{gtroff}
-output preceded with @w{@samp{x X}}.
-
-@cindex @code{\&}, in @code{\X}
-@cindex @code{\)}, in @code{\X}
-@cindex @code{\%}, in @code{\X}
-@ifnotinfo
-@cindex @code{\:}, in @code{\X}
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, in @code{\X}
-@end ifinfo
-The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
-within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
-space characters. All other escapes (except @code{\\} which produces a
-backslash) cause an error.
-
-@kindex use_charnames_in_special
-@pindex DESC@r{, and @code{use_charnames_in_special}}
-@cindex @code{\X}, and special characters
-If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
-file, special characters no longer cause an error; the name @var{xx} is
-represented as @samp{\(@var{xx})} in the @w{@samp{x X}} output command.
-Additionally, the backslash is represented as @code{\\}.
-
-@samp{use_charnames_in_special} is currently used by @code{grohtml} only.
-@endDefesc
-
-@DefescList {\\Y, , n, }
-@DefescItem {\\Y, @Lparen{}, nm, }
-@DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}}
-This is approximately equivalent to @samp{\X'\*[@var{name}]'}
-(one-character name@tie{}@var{n}, two-character name @var{nm}).
-However, the contents of the string or macro @var{name} are not
-interpreted; also it is permitted for @var{name} to have been defined
-as a macro and thus contain newlines (it is not permitted for the
-argument to @code{\X} to contain newlines). The inclusion of
-newlines requires an extension to the @acronym{UNIX} @code{troff}
-output format, and confuses drivers that do not know about this
-extension (@pxref{Device Control Commands}).
-@endDefesc
-
-@xref{Output Devices}.
-
-
-@c =====================================================================
-
-@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
-@section Miscellaneous
-
-This section documents parts of @code{gtroff} which cannot (yet) be
-categorized elsewhere in this manual.
-
-@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
-@cindex printing line numbers (@code{nm})
-@cindex line numbers, printing (@code{nm})
-@cindex numbers, line, printing (@code{nm})
-Print line numbers.
-@var{start} is the line number of the @emph{next}
-output line. @var{inc} indicates which line numbers are printed.
-For example, the value@tie{}5 means to emit only line numbers which
-are multiples of@tie{}5; this defaults to@tie{}1. @var{space} is the
-space to be left between the number and the text; this defaults to
-one digit space. The fourth argument is the indentation of the line
-numbers, defaulting to zero. Both @var{space} and @var{indent} are
-given as multiples of digit spaces; they can be negative also.
-Without any arguments, line numbers are turned off.
-
-@code{gtroff} reserves three digit spaces for the line number (which is
-printed right-justified) plus the amount given by @var{indent}; the
-output lines are concatenated to the line numbers, separated by
-@var{space}, and @emph{without} reducing the line length. Depending
-on the value of the horizontal page offset (as set with the
-@code{po} request), line numbers which are longer than the reserved
-space stick out to the left, or the whole line is moved to the right.
-
-Parameters corresponding to missing arguments are not changed; any
-non-digit argument (to be more precise, any argument starting with a
-character valid as a delimiter for identifiers) is also treated as
-missing.
-
-If line numbering has been disabled with a call to @code{nm} without
-an argument, it can be reactivated with @samp{.nm +0}, using the
-previously active line numbering parameters.
-
-The parameters of @code{nm} are associated with the current environment
-(@pxref{Environments}). The current output line number is available
-in the number register @code{ln}.
-
-@Example
-.po 1m
-.ll 2i
-This test shows how line numbering works with groff.
-.nm 999
-This test shows how line numbering works with groff.
-.br
-.nm xxx 3 2
-.ll -\w'0'u
-This test shows how line numbering works with groff.
-.nn 2
-This test shows how line numbering works with groff.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
- This test shows how
- line numbering works
- 999 with groff. This
-1000 test shows how line
-1001 numbering works with
-1002 groff.
- This test shows how
- line numbering
- works with groff.
- This test shows how
-1005 line numbering
- works with groff.
-@endExample
-@endDefreq
-
-@Defreq {nn, [@Var{skip}]}
-Temporarily turn off line numbering. The argument is the number
-of lines not to be numbered; this defaults to@tie{}1.
-@endDefreq
-
-@Defreq {mc, glyph [@Var{dist}]}
-@cindex margin glyph (@code{mc})
-@cindex glyph, for margins (@code{mc})
-Print a @dfn{margin character} to the right of the
-text.@footnote{@dfn{Margin character} is a misnomer since it is an
-output glyph.} The first argument is the glyph to be
-printed. The second argument is the distance away from the right
-margin. If missing, the previously set value is used; default is
-10@dmn{pt}). For text lines that are too long (that is, longer than
-the text length plus @var{dist}), the margin character is directly
-appended to the lines.
-
-With no arguments the margin character is turned off.
-If this occurs before a break, no margin character is printed.
-
-For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc}
-to set the margin character can't be undone immediately; at least one
-line gets a margin character. Thus
-
-@Example
-.ll 1i
-.mc \[br]
-.mc
-xxx
-.br
-xxx
-@endExample
-
-@noindent
-produces
-
-@Example
-xxx |
-xxx
-@endExample
-
-@cindex @code{tl} request, and @code{mc}
-For empty lines and lines produced by the @code{tl} request no margin
-character is emitted.
-
-The margin character is associated with the current environment
-(@pxref{Environments}).
-
-@pindex nrchbar
-@pindex changebar
-This is quite useful for indicating text that has changed, and, in fact,
-there are programs available for doing this (they are called
-@code{nrchbar} and @code{changebar} and can be found in any
-@samp{comp.sources.unix} archive).
-
-@Example
-.ll 3i
-.mc |
-This paragraph is highlighted with a margin
-character.
-.sp
-Note that vertical space isn't marked.
-.br
-\&
-.br
-But we can fake it with `\&'.
-@endExample
-
-Result:
-
-@Example
-This paragraph is highlighted |
-with a margin character. |
-
-Note that vertical space isn't |
-marked. |
- |
-But we can fake it with `\&'. |
-@endExample
-@endDefreq
-
-@DefreqList {psbb, filename}
-@DefregItem {llx}
-@DefregItem {lly}
-@DefregItem {urx}
-@DefregListEnd {ury}
-@cindex PostScript, bounding box
-@cindex bounding box
-Retrieve the bounding box of the PostScript image
-found in @var{filename}.
-The file must conform to
-Adobe's @dfn{Document Structuring Conventions} (DSC);
-the command searches for a @code{%%BoundingBox} comment
-and extracts the bounding box values into the number registers
-@code{llx}, @code{lly}, @code{urx}, and @code{ury}.
-If an error occurs (for example, @code{psbb} cannot find
-the @code{%%BoundingBox} comment),
-it sets the four number registers to zero.
-
-The search path for @var{filename} can be controlled with the @option{-I}
-command line option.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
-@section @code{gtroff} Internals
-
-@cindex input token
-@cindex token, input
-@cindex output node
-@cindex node, output
-@code{gtroff} processes input in three steps. One or more input
-characters are converted to an @dfn{input token}.@footnote{Except the
-escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M}, @code{\R},
-@code{\s}, and @code{\S} which are processed immediately if not in
-copy-in mode.} Then, one or more input tokens are converted to an
-@dfn{output node}. Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
-Actually, before step one happens, @code{gtroff} converts certain
-escape sequences into reserved input characters (not accessible by
-the user); such reserved characters are used for other internal
-processing also -- this is the very reason why not all characters
-are valid input. @xref{Identifiers}, for more on this topic.
-
-For example, the input string @samp{fi\[:u]} is converted into a
-character token @samp{f}, a character token @samp{i}, and a special
-token @samp{:u} (representing u@tie{}umlaut). Later on, the character
-tokens @samp{f} and @samp{i} are merged to a single output node
-representing the ligature glyph @samp{fi} (provided the current font
-has a glyph for this ligature); the same happens with @samp{:u}. All
-output glyph nodes are `processed' which means that they are invariably
-associated with a given font, font size, advance width, etc. During
-the formatting process, @code{gtroff} itself adds various nodes to
-control the data flow.
-
-Macros, diversions, and strings collect elements in two chained lists:
-a list of input tokens which have been passed unprocessed, and a list
-of output nodes. Consider the following the diversion.
-
-@Example
-.di xxx
-a
-\!b
-c
-.br
-.di
-@endExample
-
-@noindent
-It contains these elements.
-
-@multitable {@i{vertical size node}} {token list} {element number}
-@item node list @tab token list @tab element number
-
-@item @i{line start node} @tab --- @tab 1
-@item @i{glyph node @code{a}} @tab --- @tab 2
-@item @i{word space node} @tab --- @tab 3
-@item --- @tab @code{b} @tab 4
-@item --- @tab @code{\n} @tab 5
-@item @i{glyph node @code{c}} @tab --- @tab 6
-@item @i{vertical size node} @tab --- @tab 7
-@item @i{vertical size node} @tab --- @tab 8
-@item --- @tab @code{\n} @tab 9
-@end multitable
-
-@cindex @code{\v}, internal representation
-@noindent
-Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
-(which are always present) specify the vertical extent of the last
-line, possibly modified by @code{\x}. The @code{br} request finishes
-the current partial line, inserting a newline input token which is
-subsequently converted to a space when the diversion is reread. Note
-that the word space node has a fixed width which isn't stretchable
-anymore. To convert horizontal space nodes back to input tokens, use
-the @code{unformat} request.
-
-Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
-Note that the @code{chop} request simply reduces the number of elements in a
-macro, string, or diversion by one. Exceptions are @dfn{compatibility save}
-and @dfn{compatibility ignore} input tokens which are ignored. The
-@code{substring} request also ignores those input tokens.
-
-Some requests like @code{tr} or @code{cflags} work on glyph
-identifiers only; this means that the associated glyph can be changed
-without destroying this association. This can be very helpful for
-substituting glyphs. In the following example, we assume that
-glyph @samp{foo} isn't available by default, so we provide a
-substitution using the @code{fchar} request and map it to input
-character @samp{x}.
-
-@Example
-.fchar \[foo] foo
-.tr x \[foo]
-@endExample
-
-@noindent
-Now let us assume that we install an additional special font
-@samp{bar} which has glyph @samp{foo}.
-
-@Example
-.special bar
-.rchar \[foo]
-@endExample
-
-@noindent
-Since glyphs defined with @code{fchar} are searched before glyphs
-in special fonts, we must call @code{rchar} to remove the definition
-of the fallback glyph. Anyway, the translation is still active;
-@samp{x} now maps to the real glyph @samp{foo}.
-
-@cindex compatibility mode, and parameters
-@cindex mode, compatibility, and parameters
-@cindex arguments, and compatibility mode
-@cindex parameters, and compatibility mode
-@cindex macro arguments, and compatibility mode
-@cindex request arguments, and compatibility mode
-Macro and request arguments preserve the compatibility mode:
-
-@Example
-.cp 1 \" switch to compatibility mode
-.de xx
-\\$1
-..
-.cp 0 \" switch compatibility mode off
-.xx caf\['e]
- @result{} café
-@endExample
-
-@noindent
-Since compatibility mode is on while @code{de} is called, the macro
-@code{xx} activates compatibility mode while executing. Argument
-@code{$1} can still be handled properly because it inherits the
-compatibility mode status which was active at the point where @code{xx}
-is called.
-
-After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-
-@c =====================================================================
-
-@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
-@section Debugging
-@cindex debugging
-
-@code{gtroff} is not easy to debug, but there are some useful features
-and strategies for debugging.
-
-@Defreq {lf, line [@Var{filename}]}
-@pindex soelim
-@cindex multi-file documents
-@cindex documents, multi-file
-@cindex setting input line number (@code{lf})
-@cindex input line number, setting (@code{lf})
-@cindex number, input line, setting (@code{lf})
-Change the line number and optionally the file name @code{gtroff} shall
-use for error and warning messages. @var{line} is the input line number
-of the @emph{next} line.
-
-Without argument, the request is ignored.
-
-This is a debugging aid for documents which are split into many files,
-then put together with @code{soelim} and other preprocessors. Usually,
-it isn't invoked manually.
-
-Note that other @code{troff} implementations (including the original
-@acronym{AT&T} version) handle @code{lf} differently. For them,
-@var{line} changes the line number of the @emph{current} line.
-@endDefreq
-
-@DefreqList {tm, string}
-@DefreqItem {tm1, string}
-@DefreqListEnd {tmc, string}
-@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
-@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
-Send @var{string} to the standard error output;
-this is very useful for printing debugging messages among other things.
-
-@var{string} is read in copy mode.
-
-The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
-handles its argument similar to the @code{ds} request: a leading double
-quote in @var{string} is stripped to allow initial blanks.
-
-The @code{tmc} request is similar to @code{tm1} but does
-not append a newline (as is done in @code{tm} and @code{tm1}).
-@endDefreq
-
-@Defreq {ab, [@Var{string}]}
-@cindex aborting (@code{ab})
-Similar to the @code{tm} request, except that
-it causes @code{gtroff} to stop processing. With no argument it
-prints @samp{User Abort.} to standard error.
-@endDefreq
-
-@Defreq {ex, }
-@cindex @code{ex} request, use in debugging
-@cindex exiting (@code{ex})
-The @code{ex} request also causes @code{gtroff} to stop processing;
-see also @ref{I/O}.
-@endDefreq
-
-When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-@Example
-.if \n(DB .tm debugging output
-@endExample
-
-@noindent
-To activate these statements say
-
-@Example
-groff -rDB=1 file
-@endExample
-
-If it is known in advance that there will be many errors and no useful
-output, @code{gtroff} can be forced to suppress formatted output with
-the @option{-z} flag.
-
-@Defreq {pm, }
-@cindex dumping symbol table (@code{pm})
-@cindex symbol table, dumping (@code{pm})
-Print the entire symbol table on @code{stderr}. Names of all defined
-macros, strings, and diversions are print together with their size in
-bytes. Since @code{gtroff} sometimes adds nodes by itself, the
-returned size can be larger than expected.
-
-This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
-reports the sizes of diversions, ignores an additional argument to
-print only the total of the sizes, and the size isn't returned in
-blocks of 128 characters.
-@endDefreq
-
-@Defreq {pnr, }
-@cindex dumping number registers (@code{pnr})
-@cindex number registers, dumping (@code{pnr})
-Print the names and contents of all
-currently defined number registers on @code{stderr}.
-@endDefreq
-
-@Defreq {ptr, }
-@cindex dumping traps (@code{ptr})
-@cindex traps, dumping (@code{ptr})
-Print the names and positions of all traps
-(not including input line traps and diversion traps) on @code{stderr}.
-Empty slots in the page trap list are printed as well, because they can
-affect the priority of subsequently planted traps.
-@endDefreq
-
-@Defreq {fl, }
-@cindex flush output (@code{fl})
-@cindex output, flush (@code{fl})
-@cindex interactive use of @code{gtroff}
-@cindex @code{gtroff}, interactive use
-Instruct @code{gtroff} to flush its output immediately. The intent
-is for interactive use, but this behaviour is currently not
-implemented in @code{gtroff}. Contrary to @acronym{UNIX} @code{troff},
-TTY output is sent to a device driver also (@code{grotty}), making it
-non-trivial to communicate interactively.
-
-This request causes a line break.
-@endDefreq
-
-@Defreq {backtrace, }
-@cindex backtrace of input stack (@code{backtrace})
-@cindex input stack, backtrace (@code{backtrace})
-Print a backtrace of the input stack to the standard error stream.
-
-Consider the following in file @file{test}:
-
-@Example
-.de xxx
-. backtrace
-..
-.de yyy
-. xxx
-..
-.
-.yyy
-@endExample
-
-@noindent
-On execution, @code{gtroff} prints the following:
-
-@Example
-test:2: backtrace: macro `xxx'
-test:5: backtrace: macro `yyy'
-test:8: backtrace: file `test'
-@endExample
-
-The option @option{-b} of @code{gtroff} internally calls a variant of
-this request on each error and warning.
-@endDefreq
-
-@Defreg {slimit}
-@cindex input stack, setting limit
-Use the @code{slimit} number register
-to set the maximum number of objects on the input stack.
-If @code{slimit} is less than or equal to@tie{}0,
-there is no limit set.
-With no limit, a buggy recursive macro can exhaust virtual memory.
-
-The default value is 1000; this is a compile-time constant.
-@endDefreg
-
-@Defreq {warnscale, si}
-Set the scaling indicator used in warnings to @var{si}. Valid values for
-@var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}. At
-startup, it is set to @samp{i}.
-@endDefreq
-
-@Defreq {spreadwarn, [@Var{limit}]}
-Make @code{gtroff} emit a warning if the additional space inserted for
-each space between words in an output line is larger or equal to
-@var{limit}. A negative value is changed to zero; no argument toggles the
-warning on and off without changing @var{limit}. The default scaling
-indicator is @samp{m}. At startup, @code{spreadwarn} is deactivated, and
-@var{limit} is set to 3@dmn{m}.
-
-For example,
-
-@Example
-.spreadwarn 0.2m
-@endExample
-
-@noindent
-will cause a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
-interword space in a line.
-
-This request is active only if text is justified to both margins (using
-@w{@samp{.ad b}}).
-@endDefreq
-
-@cindex warnings
-@code{gtroff} has command line options for printing out more warnings
-(@option{-w}) and for printing backtraces (@option{-b}) when a warning
-or an error occurs. The most verbose level of warnings is @option{-ww}.
-
-@DefreqList {warn, [@Var{flags}]}
-@DefregListEnd {.warn}
-@cindex level of warnings (@code{warn})
-@cindex warnings, level (@code{warn})
-Control the level of warnings checked for. The @var{flags} are the sum
-of the numbers associated with each warning that is to be enabled; all
-other warnings are disabled. The number associated with each warning is
-listed below. For example, @w{@code{.warn 0}} disables all warnings,
-and @w{@code{.warn 1}} disables all warnings except that about missing
-glyphs. If no argument is given, all warnings are enabled.
-
-The read-only number register @code{.warn} contains the current warning
-level.
-@endDefreq
-
-@menu
-* Warnings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Warnings, , Debugging, Debugging
-@subsection Warnings
-@cindex warnings
-
-The warnings that can be given to @code{gtroff} are divided into the
-following categories. The name associated with each warning is used by
-the @option{-w} and @option{-W} options; the number is used by the
-@code{warn} request and by the @code{.warn} register.
-
-@table @samp
-@item char
-@itemx 1
-Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
-missing glyphs -- there aren't missing input characters, only invalid
-ones.} This is enabled by default.
-
-@item number
-@itemx 2
-Invalid numeric expressions. This is enabled by default.
-@xref{Expressions}.
-
-@item break
-@itemx 4
-@cindex fill mode
-@cindex mode, fill
-In fill mode, lines which could not be broken so that their length was
-less than the line length. This is enabled by default.
-
-@item delim
-@itemx 8
-Missing or mismatched closing delimiters.
-
-@item el
-@itemx 16
-@cindex @code{ie} request, and warnings
-@cindex @code{el} request, and warnings
-Use of the @code{el} request with no matching @code{ie} request.
-@xref{if-else}.
-
-@item scale
-@itemx 32
-Meaningless scaling indicators.
-
-@item range
-@itemx 64
-Out of range arguments.
-
-@item syntax
-@itemx 128
-Dubious syntax in numeric expressions.
-
-@item di
-@itemx 256
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-Use of @code{di} or @code{da} without an argument when there is no
-current diversion.
-
-@item mac
-@itemx 512
-@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
-@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
-@cindex @code{ds}, @code{ds1} requests, and warnings
-@cindex @code{as}, @code{as1} requests, and warnings
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-@cindex @code{box}, @code{boxa} requests, and warnings
-@cindex @code{\*}, and warnings
-Use of undefined strings, macros and diversions. When an undefined
-string, macro, or diversion is used, that string is automatically
-defined as empty. So, in most cases, at most one warning is given
-for each name.
-
-@item reg
-@itemx 1024
-@cindex @code{nr} request, and warnings
-@cindex @code{\R}, and warnings
-@cindex @code{\n}, and warnings
-Use of undefined number registers. When an undefined number register is
-used, that register is automatically defined to have a value of@tie{}0.
-So, in most cases, at most one warning is given for use of a particular
-name.
-
-@item tab
-@itemx 2048
-@cindex @code{\t}, and warnings
-Use of a tab character where a number was expected.
-
-@item right-brace
-@itemx 4096
-@cindex @code{\@}}, and warnings
-Use of @code{\@}} where a number was expected.
-
-@item missing
-@itemx 8192
-Requests that are missing non-optional arguments.
-
-@item input
-@itemx 16384
-Invalid input characters.
-
-@item escape
-@itemx 32768
-Unrecognized escape sequences. When an unrecognized escape sequence
-@code{\@var{X}} is encountered, the escape character is ignored, and
-@var{X} is printed.
-
-@item space
-@itemx 65536
-@cindex compatibility mode
-Missing space between a request or macro and its argument. This warning
-is given when an undefined name longer than two characters is
-encountered, and the first two characters of the name make a defined
-name. The request or macro is not invoked. When this warning is
-given, no macro is automatically defined. This is enabled by default.
-This warning never occurs in compatibility mode.
-
-@item font
-@itemx 131072
-Non-existent fonts. This is enabled by default.
-
-@item ig
-@itemx 262144
-Invalid escapes in text ignored with the @code{ig} request. These are
-conditions that are errors when they do not occur in ignored text.
-
-@item color
-@itemx 524288
-Color related warnings.
-
-@item all
-All warnings except @samp{di}, @samp{mac} and @samp{reg}. It is
-intended that this covers all warnings that are useful with traditional
-macro packages.
-
-@item w
-All warnings.
-@end table
-
-
-@c =====================================================================
-
-@node Implementation Differences, , Debugging, gtroff Reference
-@section Implementation Differences
-@cindex implementation differences
-@cindex differences in implementation
-@cindex incompatibilities with @acronym{AT&T} @code{troff}
-@cindex compatibility mode
-@cindex mode, compatibility
-
-GNU @code{troff} has a number of features which cause incompatibilities
-with documents written with old versions of @code{troff}.
-
-@cindex long names
-@cindex names, long
-Long names cause some incompatibilities. @acronym{UNIX} @code{troff}
-interprets
-
-@Example
-.dsabcd
-@endExample
-
-@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-as defining a string @samp{ab} with contents @samp{cd}. Normally, GNU
-@code{troff} interprets this as a call of a macro named
-@code{dsabcd}. Also @acronym{UNIX} @code{troff} interprets
-@code{\*[} or @code{\n[} as references to a string or number register
-called @samp{[}. In GNU @code{troff}, however, this is normally
-interpreted as the start of a long name. In compatibility mode GNU
-@code{troff} interprets long names in the traditional way
-(which means that they are not recognized as names).
-
-@DefreqList {cp, [@Var{n}]}
-@DefreqItem {do, cmd}
-@DefregListEnd {.C}
-If @var{n} is missing or non-zero, turn on compatibility mode;
-otherwise, turn it off.
-
-The read-only number register @code{.C} is@tie{}1 if compatibility mode is
-on, 0@tie{}otherwise.
-
-Compatibility mode can be also turned on with the @option{-C} command line
-option.
-
-The @code{do} request turns off compatibility mode
-while executing its arguments as a @code{gtroff} command.
-
-@Example
-.do fam T
-@endExample
-
-@noindent
-executes the @code{fam} request when compatibility mode
-is enabled.
-
-@code{gtroff} restores the previous compatibility setting
-before interpreting any files sourced by the @var{cmd}.
-@endDefreq
-
-@cindex input level in delimited arguments
-@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
-Two other features are controlled by @option{-C}. If not in
-compatibility mode, GNU @code{troff} preserves the input level in
-delimited arguments:
-
-@Example
-.ds xx '
-\w'abc\*(xxdef'
-@endExample
-
-@noindent
-In compatibility mode, the string @samp{72def'} is returned; without
-@option{-C} the resulting string is @samp{168} (assuming a TTY output
-device).
-
-@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
-Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
-@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
-beginning of a line only in compatibility mode (this is a rather obscure
-feature). For example, the code
-
-@Example
-.de xx
-Hallo!
-..
-\fB.xx\fP
-@endExample
-
-@noindent
-prints @samp{Hallo!} in bold face if in compatibility mode, and
-@samp{.xx} in bold face otherwise.
-
-@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
-GNU @code{troff} does not allow the use of the escape sequences
-@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
-@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\%}, and @code{\c} in names of strings, macros, diversions, number
-registers, fonts or environments; @acronym{UNIX} @code{troff} does. The
-@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
-avoiding use of these escape sequences in names.
-
-@cindex fractional point sizes
-@cindex fractional type sizes
-@cindex point sizes, fractional
-@cindex type sizes, fractional
-@cindex sizes, fractional
-@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
-Fractional point sizes cause one noteworthy incompatibility. In
-@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
-indicators and thus
-
-@Example
-.ps 10u
-@endExample
-
-@noindent
-sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
-sets the point size to 10@tie{}scaled points. @xref{Fractional Type
-Sizes}, for more information.
-
-@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
-@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
-In GNU @code{troff} there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored
-with the glyph node; once a glyph node has been constructed it is
-unaffected by any subsequent requests that are executed, including
-@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests.
-Normally glyphs are constructed from input characters at the
-moment immediately before the glyph is added to the current output
-line. Macros, diversions and strings are all, in fact, the same type of
-object; they contain lists of input characters and glyph nodes in
-any combination. A glyph node does not behave like an input
-character for the purposes of macro processing; it does not inherit any
-of the special properties that the input character from which it was
-constructed might have had. For example,
-
-@Example
-.di x
-\\\\
-.br
-.di
-.x
-@endExample
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-prints @samp{\\} in GNU @code{troff}; each pair of input backslashes
-is turned into one output backslash and the resulting output backslashes
-are not interpreted as escape characters when they are reread.
-@acronym{UNIX} @code{troff} would interpret them as escape characters
-when they were reread and would end up printing one @samp{\}. The
-correct way to obtain a printable backslash is to use the @code{\e}
-escape sequence: This always prints a single instance of the current
-escape character, regardless of whether or not it is used in a
-diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
-@code{troff}.@footnote{To be completely independent of the current
-escape character, use @code{\(rs} which represents a reverse solidus
-(backslash) glyph.} To store, for some reason, an escape sequence in a
-diversion that will be interpreted when the diversion is reread, either
-use the traditional @code{\!} transparent output facility, or, if this
-is unsuitable, the new @code{\?} escape sequence.
-
-@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Preprocessors, Output Devices, gtroff Reference, Top
-@chapter Preprocessors
-@cindex preprocessors
-
-This chapter describes all preprocessors that come with @code{groff} or
-which are freely available.
-
-@menu
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* grefer::
-* gsoelim::
-@end menu
-
-
-@c =====================================================================
-
-@node geqn, gtbl, Preprocessors, Preprocessors
-@section @code{geqn}
-@cindex @code{eqn}, the program
-@cindex @code{geqn}, the program
-
-@c XXX
-
-@menu
-* Invoking geqn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking geqn, , geqn, geqn
-@subsection Invoking @code{geqn}
-@cindex invoking @code{geqn}
-@cindex @code{geqn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gtbl, gpic, geqn, Preprocessors
-@section @code{gtbl}
-@cindex @code{tbl}, the program
-@cindex @code{gtbl}, the program
-
-@c XXX
-
-@menu
-* Invoking gtbl::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gtbl, , gtbl, gtbl
-@subsection Invoking @code{gtbl}
-@cindex invoking @code{gtbl}
-@cindex @code{gtbl}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gpic, ggrn, gtbl, Preprocessors
-@section @code{gpic}
-@cindex @code{pic}, the program
-@cindex @code{gpic}, the program
-
-@c XXX
-
-@menu
-* Invoking gpic::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gpic, , gpic, gpic
-@subsection Invoking @code{gpic}
-@cindex invoking @code{gpic}
-@cindex @code{gpic}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node ggrn, grap, gpic, Preprocessors
-@section @code{ggrn}
-@cindex @code{grn}, the program
-@cindex @code{ggrn}, the program
-
-@c XXX
-
-@menu
-* Invoking ggrn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking ggrn, , ggrn, ggrn
-@subsection Invoking @code{ggrn}
-@cindex invoking @code{ggrn}
-@cindex @code{ggrn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grap, grefer, ggrn, Preprocessors
-@section @code{grap}
-@cindex @code{grap}, the program
-
-A free implementation of @code{grap}, written by Ted Faber,
-is available as an extra package from the following address:
-
-@display
-@uref{http://www.lunabase.org/~faber/Vault/software/grap/}
-@end display
-
-
-@c =====================================================================
-
-@node grefer, gsoelim, grap, Preprocessors
-@section @code{grefer}
-@cindex @code{refer}, the program
-@cindex @code{grefer}, the program
-
-@c XXX
-
-@menu
-* Invoking grefer::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grefer, , grefer, grefer
-@subsection Invoking @code{grefer}
-@cindex invoking @code{grefer}
-@cindex @code{grefer}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gsoelim, , grefer, Preprocessors
-@section @code{gsoelim}
-@cindex @code{soelim}, the program
-@cindex @code{gsoelim}, the program
-
-@c XXX
-
-@menu
-* Invoking gsoelim::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gsoelim, , gsoelim, gsoelim
-@subsection Invoking @code{gsoelim}
-@cindex invoking @code{gsoelim}
-@cindex @code{gsoelim}, invoking
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Output Devices, File formats, Preprocessors, Top
-@chapter Output Devices
-@cindex output devices
-@cindex devices for output
-
-@c XXX
-
-@menu
-* Special Characters::
-* grotty::
-* grops::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-@end menu
-
-
-@c =====================================================================
-
-@node Special Characters, grotty, Output Devices, Output Devices
-@section Special Characters
-@cindex special characters
-@cindex characters, special
-
-@c XXX
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node grotty, grops, Special Characters, Output Devices
-@section @code{grotty}
-@cindex @code{grotty}, the program
-
-@c XXX
-
-@menu
-* Invoking grotty::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grotty, , grotty, grotty
-@subsection Invoking @code{grotty}
-@cindex invoking @code{grotty}
-@cindex @code{grotty}, invoking
-
-@c XXX
-
-@c The following is no longer true; fix and extend it.
-
-@c @pindex less
-@c @cindex Teletype
-@c @cindex ISO 6249 SGR
-@c @cindex terminal control sequences
-@c @cindex control sequences, for terminals
-@c For TTY output devices, underlining is done by emitting sequences of
-@c @samp{_} and @samp{\b} (the backspace character) before the actual
-@c character. Literally, this is printing an underline character, then
-@c moving back one character position, and printing the actual character
-@c at the same position as the underline character (similar to a
-@c typewriter). Usually, a modern terminal can't interpret this (and the
-@c original Teletype machines for which this sequence was appropriate are
-@c no longer in use). You need a pager program like @code{less} which
-@c translates this into ISO 6429 SGR sequences to control terminals.
-
-
-@c =====================================================================
-
-@node grops, grodvi, grotty, Output Devices
-@section @code{grops}
-@cindex @code{grops}, the program
-
-@c XXX
-
-@menu
-* Invoking grops::
-* Embedding PostScript::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grops, Embedding PostScript, grops, grops
-@subsection Invoking @code{grops}
-@cindex invoking @code{grops}
-@cindex @code{grops}, invoking
-
-@c XXX
-
-@c ---------------------------------------------------------------------
-
-@node Embedding PostScript, , Invoking grops, grops
-@subsection Embedding @sc{PostScript}
-@cindex embedding PostScript
-@cindex PostScript, embedding
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grodvi, grolj4, grops, Output Devices
-@section @code{grodvi}
-@cindex @code{grodvi}, the program
-
-@c XXX
-
-@menu
-* Invoking grodvi::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grodvi, , grodvi, grodvi
-@subsection Invoking @code{grodvi}
-@cindex invoking @code{grodvi}
-@cindex @code{grodvi}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grolj4, grolbp, grodvi, Output Devices
-@section @code{grolj4}
-@cindex @code{grolj4}, the program
-
-@c XXX
-
-@menu
-* Invoking grolj4::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolj4, , grolj4, grolj4
-@subsection Invoking @code{grolj4}
-@cindex invoking @code{grolj4}
-@cindex @code{grolj4}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grolbp, grohtml, grolj4, Output Devices
-@section @code{grolbp}
-@cindex @code{grolbp}, the program
-
-@c XXX
-
-@menu
-* Invoking grolbp::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolbp, , grolbp, grolbp
-@subsection Invoking @code{grolbp}
-@cindex invoking @code{grolbp}
-@cindex @code{grolbp}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grohtml, gxditview, grolbp, Output Devices
-@section @code{grohtml}
-@cindex @code{grohtml}, the program
-
-@c XXX
-
-@menu
-* Invoking grohtml::
-* grohtml specific registers and strings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
-@subsection Invoking @code{grohtml}
-@cindex invoking @code{grohtml}
-@cindex @code{grohtml}, invoking
-
-@c XXX
-
-@c ---------------------------------------------------------------------
-
-@node grohtml specific registers and strings, , Invoking grohtml, grohtml
-@subsection @code{grohtml} specific registers and strings
-@cindex registers specific to @code{grohtml}
-@cindex strings specific to @code{grohtml}
-@cindex @code{grohtml}, registers and strings
-
-@DefmpregList {ps4html, grohtml}
-@DefstrListEnd {www-image-template, grohtml}
-The registers @code{ps4html} and @code{www-image-template} are defined
-by the @code{pre-grohtml} preprocessor. @code{pre-grohtml} reads in
-the @code{troff} input, marks up the inline equations and passes the
-result firstly to
-
-@Example
-troff -Tps -rps4html=1 -dwww-image-template=@var{template}
-@endExample
-
-@noindent
-and secondly to
-
-@Example
-troff -Thtml
-@endExample
-
-The PostScript device is used to create all the image files, and the
-register @code{ps4html} enables the macro sets to ignore floating
-keeps, footers, and headings.
-
-The register @code{www-image-template} is set to the user specified
-template name or the default name.
-@endDefmpreg
-
-
-@c =====================================================================
-
-@node gxditview, , grohtml, Output Devices
-@section @code{gxditview}
-@cindex @code{gxditview}, the program
-
-@c XXX
-
-@menu
-* Invoking gxditview::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gxditview, , gxditview, gxditview
-@subsection Invoking @code{gxditview}
-@cindex invoking @code{gxditview}
-@cindex @code{gxditview}, invoking
-
-@c XXX
-@c X11's xditview
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node File formats, Installation, Output Devices, Top
-@chapter File formats
-@cindex file formats
-@cindex formats, file
-
-All files read and written by @code{gtroff} are text files. The
-following two sections describe their format.
-
-@menu
-* gtroff Output::
-* Font Files::
-@end menu
-
-
-@c =====================================================================
-
-@node gtroff Output, Font Files, File formats, File formats
-@section @code{gtroff} Output
-@cindex @code{gtroff}, output
-@cindex output, @code{gtroff}
-
-This section describes the intermediate output format of GNU
-@code{troff}. This output is produced by a run of @code{gtroff}
-before it is fed into a device postprocessor program.
-
-As @code{groff} is a wrapper program around @code{gtroff} that
-automatically calls a postprocessor, this output does not show up
-normally. This is why it is called @dfn{intermediate}.
-@code{groff} provides the option @option{-Z} to inhibit postprocessing,
-such that the produced intermediate output is sent to standard output
-just like calling @code{gtroff} manually.
-
-@cindex troff output
-@cindex output, troff
-@cindex intermediate output
-@cindex output, intermediate
-Here, the term @dfn{troff output} describes what is output by
-@code{gtroff}, while @dfn{intermediate output} refers to the language
-that is accepted by the parser that prepares this output for the
-postprocessors. This parser is smarter on whitespace and implements
-obsolete elements for compatibility, otherwise both formats are the
-same.@footnote{The parser and postprocessor for intermediate output
-can be found in the file@*
-@file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
-
-The main purpose of the intermediate output concept is to facilitate
-the development of postprocessors by providing a common programming
-interface for all devices. It has a language of its own that is
-completely different from the @code{gtroff} language. While the
-@code{gtroff} language is a high-level programming language for text
-processing, the intermediate output language is a kind of low-level
-assembler language by specifying all positions on the page for writing
-and drawing.
-
-The intermediate output produced by @code{gtroff} is fairly readable,
-while output from @acronym{AT&T} @code{troff} is rather hard to
-understand because of strange habits that are still supported, but not
-used any longer by @code{gtroff}.
-
-@menu
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Language Concepts, Command Reference, gtroff Output, gtroff Output
-@subsection Language Concepts
-
-During the run of @code{gtroff}, the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device. So the language of the intermediate output format can be quite
-small. Its only elements are commands with and without arguments.
-In this section, the term @dfn{command} always refers to the intermediate
-output language, and never to the @code{gtroff} language used for document
-formatting. There are commands for positioning and text writing, for drawing, and
-for device controlling.
-
-@menu
-* Separation::
-* Argument Units::
-* Document Parts::
-@end menu
-
-@node Separation, Argument Units, Language Concepts, Language Concepts
-@subsubsection Separation
-
-@acronym{AT&T} @code{troff} output has strange requirements on whitespace.
-The @code{gtroff} output parser, however, is smart about whitespace by
-making it maximally optional. The whitespace characters, i.e., the
-tab, space, and newline characters, always have a syntactical meaning.
-They are never printable because spacing within the output is always
-done by positioning commands.
-
-Any sequence of space or tab characters is treated as a single
-@dfn{syntactical space}. It separates commands and arguments, but is
-only required when there would occur a clashing between the command code
-and the arguments without the space. Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet. Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
-A line break is a syntactical element, too. Every command argument can be
-followed by whitespace, a comment, or a newline character. Thus a
-@dfn{syntactical line break} is defined to consist of optional
-syntactical space that is optionally followed by a comment, and a
-newline character.
-
-The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments. For historical reasons,
-the parser allows to stack such commands on the same line, but
-fortunately, in @code{gtroff}'s intermediate output, every command with
-at least one argument is followed by a line break, thus providing
-excellent readability.
-
-The other commands -- those for drawing and device controlling --
-have a more complicated structure; some recognize long command names,
-and some take a variable number of arguments. So all @samp{D} and
-@samp{x} commands were designed to request a syntactical line break
-after their last argument. Only one command, @w{@samp{x X}},
-has an argument that can stretch over several lines; all other
-commands must have all of their arguments on the same line as the
-command, i.e., the arguments may not be splitted by a line break.
-
-Empty lines (these are lines containing only space and/or a comment), can
-occur everywhere. They are just ignored.
-
-@node Argument Units, Document Parts, Separation, Language Concepts
-@subsubsection Argument Units
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding
-scale indicator is not written with the output command arguments.
-Most commands assume the scale indicator @samp{u}, the basic unit of
-the device, some use @samp{z}, the scaled point unit of the device,
-while others, such as the color commands, expect plain integers.
-
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters. The names of characters and
-fonts can be of arbitrary length. A character that is to be printed
-will always be in the current font.
-
-A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded @samp{#} character is
-regarded as part of the argument, not as the beginning of a comment
-command. An integer argument is already terminated by the next
-non-digit character, which then is regarded as the first character of
-the next argument or command.
-
-@node Document Parts, , Argument Units, Language Concepts
-@subsubsection Document Parts
-
-A correct intermediate output document consists of two parts, the
-@dfn{prologue} and the @dfn{body}.
-
-The task of the prologue is to set the general device parameters
-using three exactly specified commands. @code{gtroff}'s prologue
-is guaranteed to consist of the following three lines (in that order):
-
-@Example
-x T @var{device}
-x res @var{n} @var{h} @var{v}
-x init
-@endExample
-
-@noindent
-with the arguments set as outlined in @ref{Device Control Commands}.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the
-prologue.
-
-The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the
-ones used in the prologue. Processing is terminated as soon as the
-first @w{@samp{x stop}} command is encountered; the last line of any
-@code{gtroff} intermediate output always contains such a command.
-
-Semantically, the body is page oriented. A new page is started by a
-@samp{p} command. Positioning, writing, and drawing commands are
-always done within the current page, so they cannot occur before the
-first @samp{p} command. Absolute positioning (by the @samp{H} and
-@samp{V} commands) is done relative to the current page; all other
-positioning is done relative to the current location within this page.
-
-@c ---------------------------------------------------------------------
-
-@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
-@subsection Command Reference
-
-This section describes all intermediate output commands, both from
-@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
-
-@menu
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-@end menu
-
-@node Comment Command, Simple Commands, Command Reference, Command Reference
-@subsubsection Comment Command
-
-@table @code
-@item #@var{anything}@angles{end of line}
-A comment. Ignore any characters from the @samp{#} character up to
-the next newline character.
-
-This command is the only possibility for commenting in the intermediate
-output. Each comment can be preceded by arbitrary syntactical space;
-every command can be terminated by a comment.
-@end table
-
-@node Simple Commands, Graphics Commands, Comment Command, Command Reference
-@subsubsection Simple Commands
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments. Most of them
-are commands for positioning and text writing. These commands are
-smart about whitespace. Optionally, syntactical space can be inserted
-before, after, and between the command letter and its arguments.
-All of these commands are stackable, i.e., they can be preceded by
-other simple commands or followed by arbitrary other commands on the
-same line. A separating syntactical space is only necessary when two
-integer arguments would clash or if the preceding argument ends with a
-string argument.
-
-@table @code
-@ignore
-.if (\n[@USE_ENV_STACK] == 1) \{\
-.command {
-Open a new environment by copying the actual device configuration data
-to the environment stack.
-.
-The current environment is setup by the device specification and
-manipulated by the setting commands.
-.
-.
-.command }
-Close the actual environment (opened by a preceding
-.BR { \~command)
-and restore the previous environment from the environment
-stack as the actual device configuration data.
-.
-\} \" endif @USE_ENV_STACK
-@end ignore
-
-@item C @var{xxx}@angles{whitespace}
-Print a special character named @var{xxx}. The trailing
-syntactical space or line break is necessary to allow glyph names
-of arbitrary length. The glyph is printed at the current print
-position; the glyph's size is read from the font file. The print
-position is not changed.
-
-@item c @var{g}
-Print glyph@tie{}@var{g} at the current print position;@footnote{@samp{c}
-is actually a misnomer since it outputs a glyph.} the glyph's size is
-read from the font file. The print position is not changed.
-
-@item f @var{n}
-Set font to font number@tie{}@var{n} (a non-negative integer).
-
-@item H @var{n}
-Move right to the absolute vertical position@tie{}@var{n} (a
-non-negative integer in basic units @samp{u} relative to left edge
-of current page.
-
-@item h @var{n}
-Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
-to the right. The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
-Set the color for text (glyphs), line drawing, and the outline of
-graphic objects using different color schemes; the analoguous command
-for the filling color of graphic objects is @samp{DF}. The color
-components are specified as integer arguments between 0 and 65536.
-The number of color components and their meaning vary for the
-different color schemes. These commands are generated by
-@code{gtroff}'s escape sequence @code{\m}. No position changing.
-These commands are a @code{gtroff} extension.
-
-@table @code
-@item mc @var{cyan} @var{magenta} @var{yellow}
-Set color using the CMY color scheme, having the 3@tie{}color components
-@var{cyan}, @var{magenta}, and @var{yellow}.
-
-@item md
-Set color to the default color value (black in most cases).
-No component arguments.
-
-@item mg @var{gray}
-Set color to the shade of gray given by the argument, an integer
-between 0 (black) and 65536 (white).
-
-@item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
-Set color using the CMYK color scheme, having the 4@tie{}color components
-@var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
-
-@item mr @var{red} @var{green} @var{blue}
-Set color using the RGB color scheme, having the 3@tie{}color components
-@var{red}, @var{green}, and @var{blue}.
-@end table
-
-@item N @var{n}
-Print glyph with index@tie{}@var{n} (a non-negative integer) of the
-current font. This command is a @code{gtroff} extension.
-
-@item n @var{b} @var{a}
-Inform the device about a line break, but no positioning is done by
-this command. In @acronym{AT&T} @code{troff}, the integer arguments
-@var{b} and@tie{}@var{a} informed about the space before and after the
-current line to make the intermediate output more human readable
-without performing any action. In @code{groff}, they are just ignored, but
-they must be provided for compatibility reasons.
-
-@item p @var{n}
-Begin a new page in the outprint. The page number is set
-to@tie{}@var{n}. This page is completely independent of pages formerly
-processed even if those have the same page number. The vertical
-position on the outprint is automatically set to@tie{}0. All
-positioning, writing, and drawing is always done relative to a page,
-so a @samp{p} command must be issued before any of these commands.
-
-@item s @var{n}
-Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
-@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
-@xref{Output Language Compatibility}.
-
-@item t @var{xxx}@angles{whitespace}
-@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
-Print a word, i.e., a sequence of characters @var{xxx} representing
-output glyphs which names are single characters, terminated by
-a space character or a line break; an optional second integer argument
-is ignored (this allows the formatter to generate an even number of
-arguments). The first glyph should be printed at the current
-position, the current horizontal position should then be increased by
-the width of the first glyph, and so on for each glyph.
-The widths of the glyphs are read from the font file, scaled for the
-current point size, and rounded to a multiple of the horizontal
-resolution. Special characters cannot be printed using this command
-(use the @samp{C} command for special characters). This command is a
-@code{gtroff} extension; it is only used for devices whose @file{DESC}
-file contains the @code{tcommand} keyword (@pxref{DESC File Format}).
-
-@item u @var{n} @var{xxx}@angles{whitespace}
-Print word with track kerning. This is the same as the @samp{t}
-command except that after printing each glyph, the current
-horizontal position is increased by the sum of the width of that
-glyph and@tie{}@var{n} (an integer in basic units @samp{u}).
-This command is a @code{gtroff} extension; it is only used for devices
-whose @file{DESC} file contains the @code{tcommand} keyword
-(@pxref{DESC File Format}).
-
-@item V @var{n}
-Move down to the absolute vertical position@tie{}@var{n} (a
-non-negative integer in basic units @samp{u}) relative to upper edge
-of current page.
-
-@item v @var{n}
-Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
-integer). The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item w
-Informs about a paddable white space to increase readability.
-The spacing itself must be performed explicitly by a move command.
-@end table
-
-@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
-@subsubsection Graphics Commands
-
-Each graphics or drawing command in the intermediate output starts
-with the letter @samp{D}, followed by one or two characters that
-specify a subcommand; this is followed by a fixed or variable number
-of integer arguments that are separated by a single space character.
-A @samp{D} command may not be followed by another command on the same line
-(apart from a comment), so each @samp{D} command is terminated by a
-syntactical line break.
-
-@code{gtroff} output follows the classical spacing rules (no space
-between command and subcommand, all arguments are preceded by a
-single space character), but the parser allows optional space between
-the command letters and makes the space before the first argument
-optional. As usual, each space can be any sequence of tab and space
-characters.
-
-Some graphics commands can take a variable number of arguments.
-In this case, they are integers representing a size measured in basic
-units @samp{u}. The arguments called @var{h1}, @var{h2}, @dots{},
-@var{hn} stand for horizontal distances where positive means right,
-negative left. The arguments called @var{v1}, @var{v2}, @dots{},
-@var{vn} stand for vertical distances where positive means down,
-negative up. All these distances are offsets relative to the current
-location.
-
-Each graphics command directly corresponds to a similar @code{gtroff}
-@code{\D} escape sequence. @xref{Drawing Requests}.
-
-Unknown @samp{D} commands are assumed to be device-specific.
-Its arguments are parsed as strings; the whole information is then
-sent to the postprocessor.
-
-In the following command reference, the syntax element
-@angles{line break} means a syntactical line break as defined above.
-
-@table @code
-@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw B-spline from current position to offset (@var{h1},@var{v1}),
-then to offset (@var{h2},@var{v2}), if given, etc.@: up to
-(@var{hn},@var{vn}). This command takes a variable number of argument
-pairs; the current position is moved to the terminal point of the drawn
-curve.
-
-@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
-Draw arc from current position to
-(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
-(@var{h1},@var{v1}); then move the current position to the final point
-of the arc.
-
-@item DC @var{d}@angles{line break}
-@itemx DC @var{d} @var{dummy-arg}@angles{line break}
-Draw a solid circle using the current fill color with
-diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
-point at the current position; then move the current position to the
-rightmost point of the circle. An optional second integer argument is
-ignored (this allows the formatter to generate an even number of
-arguments). This command is a @code{gtroff} extension.
-
-@item Dc @var{d}@angles{line break}
-Draw circle line with diameter@tie{}@var{d} (integer in basic units
-@samp{u}) with leftmost point at the current position; then move the
-current position to the rightmost point of the circle.
-
-@item DE @var{h} @var{v}@angles{line break}
-Draw a solid ellipse in the current fill color with a horizontal
-diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
-integers in basic units @samp{u}) with the leftmost point at the
-current position; then move to the rightmost point of the ellipse.
-This command is a @code{gtroff} extension.
-
-@item De @var{h} @var{v}@angles{line break}
-Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h}
-and a vertical diameter of@tie{}@var{v} (both integers in basic units
-@samp{u}) with the leftmost point at current position; then move to
-the rightmost point of the ellipse.
-
-@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
-Set fill color for solid drawing objects using different color
-schemes; the analoguous command for setting the color of text, line
-graphics, and the outline of graphic objects is @samp{m}.
-The color components are specified as integer arguments between 0 and
-65536. The number of color components and their meaning vary for the
-different color schemes. These commands are generated by @code{gtroff}'s
-escape sequences @w{@code{\D'F @dots{}'}} and @code{\M} (with no other
-corresponding graphics commands). No position changing. This command
-is a @code{gtroff} extension.
-
-@table @code
-@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
-Set fill color for solid drawing objects using the CMY color scheme,
-having the 3@tie{}color components @var{cyan}, @var{magenta}, and
-@var{yellow}.
-
-@item DFd@angles{line break}
-Set fill color for solid drawing objects to the default fill color value
-(black in most cases). No component arguments.
-
-@item DFg @var{gray}@angles{line break}
-Set fill color for solid drawing objects to the shade of gray given by
-the argument, an integer between 0 (black) and 65536 (white).
-
-@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
-Set fill color for solid drawing objects using the CMYK color scheme,
-having the 4@tie{}color components @var{cyan}, @var{magenta}, @var{yellow},
-and @var{black}.
-
-@item DFr @var{red} @var{green} @var{blue}@angles{line break}
-Set fill color for solid drawing objects using the RGB color scheme,
-having the 3@tie{}color components @var{red}, @var{green}, and @var{blue}.
-@end table
-
-@item Df @var{n}@angles{line break}
-The argument@tie{}@var{n} must be an integer in the range @math{-32767}
-to 32767.
-
-@table @asis
-@item @math{0 @LE{} @var{n} @LE{} 1000}
-Set the color for filling solid drawing objects to a shade of gray,
-where 0 corresponds to solid white, 1000 (the default) to solid black,
-and values in between to intermediate shades of gray; this is
-obsoleted by command @samp{DFg}.
-
-@item @math{@var{n} < 0} or @math{@var{n} > 1000}
-Set the filling color to the color that is currently being used for
-the text and the outline, see command @samp{m}. For example, the
-command sequence
-
-@Example
-mg 0 0 65536
-Df -1
-@endExample
-
-@noindent
-sets all colors to blue.
-@end table
-
-@noindent
-No position changing. This command is a @code{gtroff} extension.
-
-@item Dl @var{h} @var{v}@angles{line break}
-Draw line from current position to offset (@var{h},@var{v}) (integers
-in basic units @samp{u}); then set current position to the end of the
-drawn line.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a polygon line from current position to offset (@var{h1},@var{v1}),
-from there to offset (@var{h2},@var{v2}), etc.@: up to offset
-(@var{hn},@var{vn}), and from there back to the starting position.
-For historical reasons, the position is changed by adding the sum of
-all arguments with odd index to the actual horizontal position and the
-even ones to the vertical position. Although this doesn't make sense
-it is kept for compatibility.
-@ignore
-As the polygon is closed, the end of drawing is the starting point, so
-the position doesn't change.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a solid polygon in the current fill color rather than an outlined
-polygon, using the same arguments and positioning as the corresponding
-@samp{Dp} command.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dt @var{n}@angles{line break}
-Set the current line thickness to@tie{}@var{n} (an integer in basic
-units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
-smallest available line thickness; if @math{@var{n}<0} set the line
-thickness proportional to the point size (this is the default before
-the first @samp{Dt} command was specified). For historical reasons,
-the horizontal position is changed by adding the argument to the actual
-horizontal position, while the vertical position is not changed.
-Although this doesn't make sense it is kept for compatibility.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-@end table
-
-@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
-@subsubsection Device Control Commands
-
-Each device control command starts with the letter @samp{x},
-followed by a space character (optional or arbitrary space or tab in
-@code{gtroff}) and a subcommand letter or word; each argument (if any)
-must be preceded by a syntactical space. All @samp{x} commands are
-terminated by a syntactical line break; no device control command can
-be followed by another command on the same line (except a comment).
-
-The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence
-of characters terminated by the next tab, space, or newline character.
-All characters of the subcommand word but the first are simply ignored.
-For example, @code{gtroff} outputs the initialization command
-@w{@samp{x i}} as @w{@samp{x init}} and the resolution command
-@w{@samp{x r}} as @w{@samp{x res}}.
-
-In the following, the syntax element @angles{line break} means a
-syntactical line break (@pxref{Separation}).
-
-@table @code
-@item xF @var{name}@angles{line break}
-The @samp{F} stands for @var{Filename}.
-
-Use @var{name} as the intended name for the current file in error
-reports. This is useful for remembering the original file name when
-@code{gtroff} uses an internal piping mechanism. The input file is
-not changed by this command. This command is a @code{gtroff} extension.
-
-@item xf @var{n} @var{s}@angles{line break}
-The @samp{f} stands for @var{font}.
-
-Mount font position@tie{}@var{n} (a non-negative integer) with font
-named@tie{}@var{s} (a text word). @xref{Font Positions}.
-
-@item xH @var{n}@angles{line break}
-The @samp{H} stands for @var{Height}.
-
-Set glyph height to@tie{}@var{n} (a positive integer in scaled
-points @samp{z}). @acronym{AT&T} @code{troff} uses the unit points
-(@samp{p}) instead. @xref{Output Language Compatibility}.
-
-@item xi@angles{line break}
-The @samp{i} stands for @var{init}.
-
-Initialize device. This is the third command of the prologue.
-
-@item xp@angles{line break}
-The @samp{p} stands for @var{pause}.
-
-Parsed but ignored. The original @acronym{UNIX} troff manual writes
-
-@display
-pause device, can be restarted
-@end display
-
-@item xr @var{n} @var{h} @var{v}@angles{line break}
-The @samp{r} stands for @var{resolution}.
-
-Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
-motion, and @var{v} the minimal vertical motion possible with this
-device; all arguments are positive integers in basic units @samp{u}
-per inch. This is the second command of the prologue.
-
-@item xS @var{n}@angles{line break}
-The @samp{S} stands for @var{Slant}.
-
-Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
-
-@item xs@angles{line break}
-The @samp{s} stands for @var{stop}.
-
-Terminates the processing of the current file; issued as the last
-command of any intermediate troff output.
-
-@item xt@angles{line break}
-The @samp{t} stands for @var{trailer}.
-
-Generate trailer information, if any. In @var{gtroff}, this is
-actually just ignored.
-
-@item xT @var{xxx}@angles{line break}
-The @samp{T} stands for @var{Typesetter}.
-
-Set name of device to word @var{xxx}, a sequence of characters ended
-by the next white space character. The possible device names coincide
-with those from the @code{groff} @option{-T} option. This is the first
-command of the prologue.
-
-@item xu @var{n}@angles{line break}
-The @samp{u} stands for @var{underline}.
-
-Configure underlining of spaces. If @var{n} is@tie{}1, start
-underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
-This is needed for the @code{cu} request in nroff mode and is ignored
-otherwise. This command is a @code{gtroff} extension.
-
-@item xX @var{anything}@angles{line break}
-The @samp{x} stands for @var{X-escape}.
-
-Send string @var{anything} uninterpreted to the device. If the line
-following this command starts with a @samp{+} character this line is
-interpreted as a continuation line in the following sense. The
-@samp{+} is ignored, but a newline character is sent instead to the
-device, the rest of the line is sent uninterpreted. The same applies
-to all following lines until the first character of a line is not a
-@samp{+} character. This command is generated by the @code{gtroff}
-escape sequence @code{\X}. The line-continuing feature is a
-@code{gtroff} extension.
-@end table
-
-@node Obsolete Command, , Device Control Commands, Command Reference
-@subsubsection Obsolete Command
-In @acronym{AT&T} @code{troff} output, the writing of a single
-glyph is mostly done by a very strange command that combines a
-horizontal move and a single character giving the glyph name. It
-doesn't have a command code, but is represented by a 3-character
-argument consisting of exactly 2@tie{}digits and a character.
-
-@table @asis
-@item @var{dd}@var{g}
-Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
-then print glyph@tie{}@var{g} (represented as a single character).
-
-In @code{gtroff}, arbitrary syntactical space around and within this
-command is allowed to be added. Only when a preceding command on the
-same line ends with an argument of variable length a separating space
-is obligatory. In @acronym{AT&T} @code{troff}, large clusters of these
-and other commands are used, mostly without spaces; this made such output
-almost unreadable.
-@end table
-
-For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two
-decimal digits. In @code{gtroff}, this is only used for the devices
-@code{X75}, @code{X75-12}, @code{X100}, and @code{X100-12}. For other
-devices, the commands @samp{t} and @samp{u} provide a better
-functionality.
-
-@c ---------------------------------------------------------------------
-
-@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
-@subsection Intermediate Output Examples
-
-This section presents the intermediate output generated from the same
-input for three different devices. The input is the sentence
-@samp{hell world} fed into @code{gtroff} on the command line.
-
-@table @asis
-@item High-resolution device @code{ps}
-
-This is the standard output of @code{gtroff} if no @option{-T} option
-is given.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T ps
-
-x T ps
-x res 72000 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10000
-V12000
-H72000
-thell
-wh2500
-tw
-H96620
-torld
-n12000 0
-@group
-x trailer
-V792000
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grops} to get its representation as
-a PostScript file.
-
-@item Low-resolution device @code{latin1}
-
-This is similar to the high-resolution device except that the
-positioning is done at a minor scale. Some comments (lines starting
-with @samp{#}) were added for clarification; they were not generated
-by the formatter.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T latin1
-
-# prologue
-x T latin1
-x res 240 24 40
-x init
-@end group
-# begin a new page
-p1
-# font setup
-x font 1 R
-f1
-s10
-# initial positioning on the page
-V40
-H0
-# write text `hell'
-thell
-# inform about space, and issue a horizontal jump
-wh24
-# write text `world'
-tworld
-# announce line break, but do nothing because ...
-n40 0
-@group
-# ... the end of the document has been reached
-x trailer
-V2640
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grotty} to get a formatted text
-document.
-
-@item @acronym{AT&T} @code{troff} output
-Since a computer monitor has a very low resolution compared to modern
-printers the intermediate output for the X@tie{}Window devices can use
-the jump-and-write command with its 2-digit displacements.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T X100
-
-x T X100
-x res 100 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10
-V16
-H100
-# write text with jump-and-write commands
-ch07e07l03lw06w11o07r05l03dh7
-n16 0
-@group
-x trailer
-V1100
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{xditview} or @code{gxditview}
-for displaying in@tie{}X.
-
-Due to the obsolete jump-and-write command, the text clusters in the
-@acronym{AT&T} @code{troff} output are almost unreadable.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Output Language Compatibility, , Intermediate Output Examples, gtroff Output
-@subsection Output Language Compatibility
-
-The intermediate output language of @acronym{AT&T} @code{troff}
-was first documented in the @acronym{UNIX} troff manual, with later
-additions documented in @cite{A Typesetter-indenpendent TROFF},
-written by Brian Kernighan.
-
-The @code{gtroff} intermediate output format is compatible with this
-specification except for the following features.
-
-@itemize @bullet
-@item
-The classical quasi device independence is not yet implemented.
-
-@item
-The old hardware was very different from what we use today. So the
-@code{groff} devices are also fundamentally different from the ones in
-@acronym{AT&T} @code{troff}. For example, the @acronym{AT&T}
-PostScript device is called @code{post} and has a resolution of only
-720 units per inch, suitable for printers 20 years ago, while
-@code{groff}'s @code{ps} device has a resolution of
-72000 units per inch. Maybe, by implementing some rescaling
-mechanism similar to the classical quasi device independence,
-@code{groff} could emulate @acronym{AT&T}'s @code{post} device.
-
-@item
-The B-spline command @samp{D~} is correctly handled by the
-intermediate output parser, but the drawing routines aren't
-implemented in some of the postprocessor programs.
-
-@item
-The argument of the commands @samp{s} and @w{@samp{x H}} has the
-implicit unit scaled point @samp{z} in @code{gtroff}, while
-@acronym{AT&T} @code{troff} has point (@samp{p}). This isn't an
-incompatibility but a compatible extension, for both units coincide
-for all devices without a @code{sizescale} parameter in the @file{DESC}
-file, including all postprocessors from @acronym{AT&T} and
-@code{groff}'s text devices. The few @code{groff} devices with
-a @code{sizescale} parameter either do not exist for @acronym{AT&T}
-@code{troff}, have a different name, or seem to have a different
-resolution. So conflicts are very unlikely.
-
-@item
-The position changing after the commands @samp{Dp}, @samp{DP}, and
-@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
-feature it is kept for compatibility reasons.
-
-@ignore
-Temporarily, there existed some confusion on the positioning after the
-@samp{D} commands that are groff extensions. This has been clarified
-by establishing the classical rule for all @code{groff} drawing commands:
-
-@itemize
-@item
-The position after a graphic object has been drawn is at its end;
-for circles and ellipses, the `end' is at the right side.
-
-@item
-From this, the positionings specified for the drawing commands above
-follow quite naturally.
-@end itemize
-@end ignore
-
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Files, , gtroff Output, File formats
-@section Font Files
-@cindex font files
-@cindex files, font
-
-The @code{gtroff} font format is roughly a superset of the
-@code{ditroff} font format (as used in later versions of @acronym{AT&T}
-@code{troff} and its descendants). Unlike the @code{ditroff} font
-format, there is no associated binary format; all files are text
-files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
-format.} The font files for device @var{name} are stored in a directory
-@file{dev@var{name}}. There are two types of file: a device description
-file called @file{DESC} and for each font@tie{}@var{f} a font file
-called@tie{}@file{@var{f}}.
-
-@menu
-* DESC File Format::
-* Font File Format::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node DESC File Format, Font File Format, Font Files, Font Files
-@subsection @file{DESC} File Format
-@cindex @file{DESC} file, format
-@cindex font description file, format
-@cindex format of font description file
-@pindex DESC@r{ file format}
-
-The @file{DESC} file can contain the following types of line. Except
-for the @code{charset} keyword which must comes last (if at all), the
-order of the lines is not important.
-
-@table @code
-@item res @var{n}
-@kindex res
-@cindex device resolution
-@cindex resolution, device
-There are @var{n}@tie{}machine units per inch.
-
-@item hor @var{n}
-@kindex hor
-@cindex horizontal resolution
-@cindex resolution, horizontal
-The horizontal resolution is @var{n}@tie{}machine units. All horizontal
-quantities are rounded to be multiples of this value.
-
-@item vert @var{n}
-@kindex vert
-@cindex vertical resolution
-@cindex resolution, vertical
-The vertical resolution is @var{n}@tie{}machine units. All vertical
-quantities are rounded to be multiples of this value.
-
-@item sizescale @var{n}
-@kindex sizescale
-The scale factor for point sizes. By default this has a value of@tie{}1.
-One scaled point is equal to one point/@var{n}. The arguments to the
-@code{unitwidth} and @code{sizes} commands are given in scaled points.
-@xref{Fractional Type Sizes}, for more information.
-
-@item unitwidth @var{n}
-@kindex unitwidth
-Quantities in the font files are given in machine units for fonts whose
-point size is @var{n}@tie{}scaled points.
-
-@item prepro @var{program}
-@kindex prepro
-Call @var{program} as a preprocessor. Currently, this keyword is used
-by @code{groff} with option @option{-Thtml} only.
-
-@item postpro @var{program}
-@kindex postpro
-Call @var{program} as a postprocessor. For example, the line
-
-@Example
-postpro grodvi
-@endExample
-
-@noindent
-in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi}
-if option @option{-Tdvi} is given (and @option{-Z} isn't used).
-
-@item tcommand
-@kindex tcommand
-This means that the postprocessor can handle the @samp{t} and @samp{u}
-intermediate output commands.
-
-@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
-@kindex sizes
-This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
-@var{sn} scaled points. The list of sizes must be terminated by@tie{}0
-(this is digit zero). Each @var{si} can also be a range of sizes
-@var{m}-@var{n}. The list can extend over more than one line.
-
-@item styles @var{S1} @var{S2} @dots{} @var{Sm}
-@kindex styles
-The first @var{m}@tie{}font positions are associated with styles
-@var{S1} @dots{} @var{Sm}.
-
-@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
-@kindex fonts
-Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
-@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
-styles. This command may extend over more than one line. A font name
-of@tie{}0 means no font is mounted on the corresponding font position.
-
-@item family @var{fam}
-@kindex family
-The default font family is @var{fam}.
-
-@item use_charnames_in_special
-@kindex use_charnames_in_special
-This command indicates that @code{gtroff} should encode special
-characters inside special commands. Currently, this is only used
-by the @acronym{HTML} output device. @xref{Postprocessor Access}.
-
-@item papersize @var{string} @dots{}
-@kindex papersize
-Select a paper size. Valid values for @var{string} are the ISO paper
-types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
-@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
-@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
-@code{executive}, @code{com10}, and @code{monarch}. Case is not significant
-for @var{string} if it holds predefined paper types. Alternatively,
-@var{string} can be a file name (e.g.@: @file{/etc/papersize}); if the file
-can be opened, @code{groff} reads the first line and tests for the above
-paper sizes. Finally, @var{string} can be a custom paper size in the format
-@code{@var{length},@var{width}} (no spaces before and after the comma).
-Both @var{length} and @var{width} must have a unit appended; valid values
-are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for points, and
-@samp{P} for picas. Example: @code{12c,235p}. An argument which starts
-with a digit is always treated as a custom paper format. @code{papersize}
-sets both the vertical and horizontal dimension of the output medium.
-
-More than one argument can be specified; @code{groff} scans from left to
-right and uses the first valid paper specification.
-
-@item pass_filenames
-@kindex pass_filenames
-Tell @code{gtroff} to emit the name of the source file currently
-being processed. This is achieved by the intermediate output command
-@samp{F}. Currently, this is only used by the @acronym{HTML} output
-device.
-
-@item print @var{program}
-@kindex print
-Use @var{program} as a spooler program for printing. If omitted,
-the @option{-l} and @option{-L} options of @code{groff} are ignored.
-
-@item charset
-@kindex charset
-This line and everything following in the file are ignored. It is
-allowed for the sake of backwards compatibility.
-@end table
-
-The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
-are mandatory. Other commands are ignored by @code{gtroff} but may be
-used by postprocessors to store arbitrary information about the device
-in the @file{DESC} file.
-
-@kindex spare1
-@kindex spare2
-@kindex biggestfont
-Here a list of obsolete keywords which are recognized by @code{groff}
-but completely ignored: @code{spare1}, @code{spare2},
-@code{biggestfont}.
-
-@c ---------------------------------------------------------------------
-
-@node Font File Format, , DESC File Format, Font Files
-@subsection Font File Format
-@cindex font file, format
-@cindex font description file, format
-@cindex format of font files
-@cindex format of font description files
-
-A @dfn{font file}, also (and probably better) called a @dfn{font
-description file}, has two sections. The first section is a sequence
-of lines each containing a sequence of blank delimited words; the first
-word in the line is a key, and subsequent words give a value for that
-key.
-
-@table @code
-@item name @var{f}
-@kindex name
-The name of the font is@tie{}@var{f}.
-
-@item spacewidth @var{n}
-@kindex spacewidth
-The normal width of a space is@tie{}@var{n}.
-
-@item slant @var{n}
-@kindex slant
-The glyphs of the font have a slant of @var{n}@tie{}degrees.
-(Positive means forward.)
-
-@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
-@kindex ligatures
-Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
-possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
-@samp{ffl}. For backwards compatibility, the list of ligatures may be
-terminated with a@tie{}0. The list of ligatures may not extend over more
-than one line.
-
-@item special
-@cindex special fonts
-@kindex special
-The font is @dfn{special}; this means that when a glyph is requested
-that is not present in the current font, it is searched for in any
-special fonts that are mounted.
-@end table
-
-Other commands are ignored by @code{gtroff} but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
-@cindex comments in font files
-@cindex font files, comments
-@kindex #
-The first section can contain comments which start with the @samp{#}
-character and extend to the end of a line.
-
-The second section contains one or two subsections. It must contain a
-@code{charset} subsection and it may also contain a @code{kernpairs}
-subsection. These subsections can appear in any order. Each
-subsection starts with a word on a line by itself.
-
-@kindex charset
-The word @code{charset} starts the character set
-subsection.@footnote{This keyword is misnamed since it starts a list
-of ordered glyphs, not characters.} The @code{charset} line is
-followed by a sequence of lines. Each line gives information for one
-glyph. A line comprises a number of fields separated by blanks or
-tabs. The format is
-
-@quotation
-@var{name} @var{metrics} @var{type} @var{code}
-[@var{entity-name}] [@code{--} @var{comment}]
-@end quotation
-
-@cindex 8-bit input
-@cindex input, 8-bit
-@cindex accessing unnamed glyphs with @code{\N}
-@cindex unnamed glyphs, accessing with @code{\N}
-@cindex characters, unnamed, accessing with @code{\N}
-@cindex glyphs, unnamed, accessing with @code{\N}
-@kindex ---
-@noindent
-@var{name} identifies the glyph name@footnote{The distinction between
-input, characters, and output, glyphs, is not clearly separated in the
-terminology of @code{groff}; for example, the @code{char} request
-should be called @code{glyph} since it defines an output entity.}:
-If @var{name} is a single character@tie{}@var{c} then it corresponds
-to the @code{gtroff} input character@tie{}@var{c}; if it is of the form
-@samp{\@var{c}} where @var{c} is a single character, then it
-corresponds to the special character @code{\[@var{c}]}; otherwise it
-corresponds to the special character @samp{\[@var{name}]}. If it
-is exactly two characters @var{xx} it can be entered as
-@samp{\(@var{xx}}. Note that single-letter special characters can't
-be accessed as @samp{\@var{c}}; the only exception is @samp{\-} which
-is identical to @code{\[-]}.
-
-@code{gtroff} supports 8-bit input characters; however some utilities
-have difficulties with eight-bit characters. For this reason, there is
-a convention that the entity name @samp{char@var{n}} is equivalent to
-the single input character whose code is@tie{}@var{n}. For example,
-@samp{char163} would be equivalent to the character with code@tie{}163
-which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character set.
-You shouldn't use @samp{char@var{n}} entities in font description files
-since they are related to input, not output. Otherwise, you get
-hard-coded connections between input and output encoding which
-prevents use of different (input) character sets.
-
-The name @samp{---} is special and indicates that the glyph is
-unnamed; such glyphs can only be used by means of the @code{\N}
-escape sequence in @code{gtroff}.
-
-The @var{type} field gives the glyph type:
-
-@table @code
-@item 1
-the glyph has a descender, for example, @samp{p};
-
-@item 2
-the glyph has an ascender, for example, @samp{b};
-
-@item 3
-the glyph has both an ascender and a descender, for example, @samp{(}.
-@end table
-
-The @var{code} field gives the code which the postprocessor uses to
-print the glyph. The glyph can also be input to @code{gtroff}
-using this code by means of the @code{\N} escape sequence. @var{code}
-can be any integer. If it starts with @samp{0} it is interpreted as
-octal; if it starts with @samp{0x} or @samp{0X} it is interpreted as
-hexadecimal. Note, however, that the @code{\N} escape sequence only
-accepts a decimal integer.
-
-The @var{entity-name} field gives an @acronym{ASCII} string
-identifying the glyph which the postprocessor uses to print the
-@code{gtroff} glyph @var{name}. This field is optional and has been
-introduced so that the @acronym{HTML} device driver can encode its
-character set. For example, the glyph @samp{\[Po]} is
-represented as @samp{&pound;} in @acronym{HTML} 4.0.
-
-Anything on the line after the @var{entity-name} field resp.@: after
-@samp{--} will be ignored.
-
-The @var{metrics} field has the form:
-
-@display
-@group
-@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
- [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
-@end group
-@end display
-
-@noindent
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only). Missing subfields are
-assumed to be@tie{}0. The subfields are all decimal integers. Since
-there is no associated binary format, these values are not required to
-fit into a variable of type @samp{char} as they are in @code{ditroff}.
-The @var{width} subfield gives the width of the glyph. The @var{height}
-subfield gives the height of the glyph (upwards is positive); if a
-glyph does not extend above the baseline, it should be given a zero
-height, rather than a negative height. The @var{depth} subfield gives
-the depth of the glyph, that is, the distance from the baseline to the
-lowest point below the baseline to which the glyph extends (downwards is
-positive); if a glyph does not extend below the baseline, it should be
-given a zero depth, rather than a negative depth. The
-@var{italic-correction} subfield gives the amount of space that should
-be added after the glyph when it is immediately to be followed by a
-glyph from a roman font. The @var{left-italic-correction} subfield
-gives the amount of space that should be added before the glyph when it
-is immediately to be preceded by a glyph from a roman font. The
-@var{subscript-correction} gives the amount of space that should be
-added after a glyph before adding a subscript. This should be less
-than the italic correction.
-
-A line in the @code{charset} section can also have the format
-
-@Example
-@var{name} "
-@endExample
-
-@noindent
-This indicates that @var{name} is just another name for the glyph
-mentioned in the preceding line.
-
-@kindex kernpairs
-The word @code{kernpairs} starts the kernpairs section. This contains a
-sequence of lines of the form:
-
-@Example
-@var{c1} @var{c2} @var{n}
-@endExample
-
-@noindent
-This means that when glyph @var{c1} appears next to glyph @var{c2}
-the space between them should be increased by@tie{}@var{n}. Most
-entries in the kernpairs section have a negative value for@tie{}@var{n}.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Installation, Copying This Manual, File formats, Top
-@chapter Installation
-@cindex installation
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Copying This Manual, Request Index, Installation, Top
-@appendix Copying This Manual
-
-@menu
-* GNU Free Documentation License:: License for copying this manual.
-@end menu
-
-@include fdl.texi
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Request Index, Escape Index, Copying This Manual, Top
-@appendix Request Index
-
-Requests appear without the leading control character (normally either
-@samp{.} or @samp{'}).
-
-@printindex rq
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Escape Index, Operator Index, Request Index, Top
-@appendix Escape Index
-
-Any escape sequence @code{\@var{X}} with @var{X} not in the list below
-emits a warning, printing glyph @var{X}.
-
-@printindex es
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Operator Index, Register Index, Escape Index, Top
-@appendix Operator Index
-
-@printindex op
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Register Index, Macro Index, Operator Index, Top
-@appendix Register Index
-
-The macro package or program a specific register belongs to is appended in
-brackets.
-
-A register name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\nx}. A register name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\n(xx}. Register names @code{xxx}
-of any length can be accessed as @samp{\n[xxx]}.
-
-@printindex vr
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Index, String Index, Register Index, Top
-@appendix Macro Index
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally @samp{.}).
-
-@printindex ma
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node String Index, Glyph Name Index, Macro Index, Top
-@appendix String Index
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
-A string name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\*x}. A string name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\*(xx}. String names @code{xxx}
-of any length can be accessed as @samp{\*[xxx]}.
-
-
-@printindex st
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Glyph Name Index, Font File Keyword Index, String Index, Top
-@appendix Glyph Name Index
-
-A glyph name @code{xx} consisting of exactly two characters can be
-accessed as @samp{\(xx}. Glyph names @code{xxx} of any length can be
-accessed as @samp{\[xxx]}.
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
-@appendix Font File Keyword Index
-
-@printindex ky
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Program and File Index, Concept Index, Font File Keyword Index, Top
-@appendix Program and File Index
-
-@printindex pg
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Concept Index, , Program and File Index, Top
-@appendix Concept Index
-
-@printindex cp
-
-
-@bye
diff --git a/contrib/groff/doc/meintro.me b/contrib/groff/doc/meintro.me
deleted file mode 100644
index 0e245e81c73d..000000000000
--- a/contrib/groff/doc/meintro.me
+++ /dev/null
@@ -1,2243 +0,0 @@
-.\" Copyright (c) 1986 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" @(#)intro.me 6.4 (Berkeley) 7/17/89
-.\"
-.\" Modified for groff by jjc@jclark.com.
-.\"UC 7
-.ll 6.5i
-.lt 6.5i
-.ds MO @VERSION@
-.nr si 3n
-.he 'USING GROFF AND \-ME''%'
-.\"eh 'USD:22-%''Writing Papers with NROFF using \-me'
-.\"oh 'Writing Papers with NROFF using \-me''USD:22-%'
-.ds U \s-1UNIX\s0
-.ds N \s-1NROFF\s0
-.ds T \s-1TROFF\s0
-.ds G \s-1GROFF\s0
-.+c
-.(l C
-.sz 14
-.b "Writing Papers with GROFF using \-me"
-.sz
-.sp 2
-.ul
-Eric P. Allman*
-.(f
-*Author's current address:
-Britton Lee, Inc.,
-1919 Addison Suite 105,
-Berkeley, California 94704.
-.)f
-.sp
-Project INGRES
-Electronics Research Laboratory
-University of California, Berkeley
-Berkeley, California 94720
-.sp 2
-.i "Modified for \*G by James Clark"
-.)l
-.sp 4
-.pp
-This document describes
-the text processing facilities
-available on the \*U\(dg
-.(f
-\(dg\*U is a trademark
-of AT&T Bell Laboratories
-.)f
-operating system
-via \*G and the
-\-me
-macro package.
-It is assumed
-that the reader
-already is generally familiar
-with the \*U operating system
-and a text editor
-such as
-.b ex .
-This is intended to be a casual introduction,
-and
-as such not all material is covered.
-In particular,
-many variations and additional features
-of the \-me macro package
-are not explained.
-For a complete discussion of this
-and other issues,
-see
-.ul
-The \-me Reference Manual
-and
-.ul
-The \*N/\*T Reference Manual.
-.pp
-\*G, a computer program
-that runs on the \*U operating system,
-reads an input file
-prepared by the user
-and outputs a formatted paper
-suitable for publication or framing.
-The input consists of
-.i text ,
-or words to be printed,
-and
-.i requests ,
-which give instructions
-to the \*G program
-telling how to format the printed copy.
-.pp
-Section 1
-describes the basics
-of text processing.
-Section 2
-describes the basic requests.
-Section 3
-introduces displays.
-Annotations,
-such as footnotes,
-are handled in
-section 4.
-The more complex requests
-which are not discussed in section 2
-are covered in section 5.
-Finally,
-section 6
-discusses things you will need
-to know
-if you want to typeset documents.
-If you are a novice,
-you probably won't want to read beyond section 4
-until you have tried some of the basic features out.
-.pp
-When you have your raw text ready,
-call the \*G formatter by typing
-as a request to the \*U shell:
-.(b
-groff \-me \-T\c
-.i "type files"
-.)b
-where
-.i type
-describes the type of
-output device you are using.
-A complete description of options
-to the \*G command can be found in
-.b groff (1).
-.pp
-The word
-.i argument
-is used in this manual
-to mean a word or number
-which appears on the same line
-as a request
-which modifies the meaning
-of that request.
-For example,
-the request
-.(b
-\&.sp
-.)b
-spaces one line,
-but
-.(b
-\&.sp 4
-.)b
-spaces four lines.
-The number
-.b 4
-is an
-.i argument
-to the
-.b .sp
-request
-which says to space four lines
-instead of one.
-Arguments are separated from the request
-and from each other
-by spaces.
-.sh 1 "Basics of Text Processing"
-.pp
-The primary function
-of \*G
-is to
-.i collect
-words from input lines,
-.i fill
-output lines with those words,
-.i justify
-the right hand margin by inserting extra spaces
-in the line,
-and output the result.
-For example,
-the input:
-.(b
-Now is the time
-for all good men
-to come to the aid
-of their party.
-Four score and seven
-years ago,...
-.)b
-will be read,
-packed onto output lines,
-and justified
-to produce:
-.(b F
-Now is the time
-for all good men
-to come to the aid
-of their party.
-Four score and seven
-years ago,...
-.)b
-Sometimes you may want to start a new output line
-even though the line you are on
-is not yet full;
-for example,
-at the end of a paragraph.
-To do this
-you can cause a
-.i break ,
-which
-starts a new output line.
-Some requests
-cause a break automatically,
-as do blank input lines
-and input lines beginning with a space.
-.pp
-Not all input lines
-are text to be formatted.
-Some of the input lines
-are
-.i requests
-which describe
-how to format the text.
-Requests always have a period
-or an apostrophe
-(\c
-.q "\|\(aa\|" )
-as the first character
-of the input line.
-.pp
-The text formatter
-also does more complex things,
-such as automatically numbering pages,
-skipping over page folds,
-putting footnotes in the correct place,
-and so forth.
-.pp
-I can offer you a few hints
-for preparing text
-for input to \*G.
-First,
-keep the input lines short.
-Short input lines are easier to edit,
-and \*G will pack words onto longer lines
-for you anyhow.
-In keeping with this,
-it is helpful
-to begin a new line
-after every period,
-comma,
-or phrase,
-since common corrections
-are to add or delete sentences
-or phrases.
-Second,
-do not put spaces at the end of lines,
-since this can sometimes confuse the \*N
-processor.
-Third,
-do not hyphenate words at the end of lines
-(except words that should have hyphens in them,
-such as
-.q mother-in-law );
-\*G is smart enough to hyphenate words
-for you as needed,
-but is not smart enough
-to take hyphens out
-and join a word back together.
-Also,
-words such as
-.q mother-in-law
-should not be broken
-over a line,
-since then you will get a space
-where not wanted,
-such as
-.tr @-
-.nh
-.q "mother@\ in@law" .
-.br
-.tr @@
-.hy 14
-.sh 1 "Basic Requests"
-.sh 2 "Paragraphs"
-.pp
-Paragraphs are begun
-by using the
-.b .pp
-request.
-For example,
-the input:
-.(b
-\&.pp
-Now is the time for all good men
-to come to the aid of their party.
-Four score and seven years ago,...
-.)b
-produces a blank line
-followed by an indented first line.
-The result is:
-.(b F
-.ti +\n(piu
-Now is the time for all good men
-to come to the aid of their party.
-Four score and seven years ago,...
-.)b
-.pp
-Notice that the sentences
-of the paragraphs
-.i "must not"
-begin with a space,
-since blank lines
-and lines beginning with spaces
-cause a break.
-For example,
-if I had typed:
-.(b
-\&.pp
-Now is the time for all good men
- to come to the aid of their party.
-Four score and seven years ago,...
-.)b
-The output would be:
-.(b F
-.ti +\n(piu
-Now is the time for all good men
- to come to the aid of their party.
-Four score and seven years ago,...
-.)b
-A new line begins after the word
-.q men
-because the second line began with a space character.
-.pp
-There are many
-fancier
-types of paragraphs,
-which will be described later.
-.sh 2 "Headers and Footers"
-.pp
-Arbitrary headers and footers
-can be put
-at the top and bottom
-of every page.
-Two requests
-of the form
-.b .he \ \c
-.i title
-and
-.b .fo \ \c
-.i title
-define the titles to put at the head and the foot
-of every page,
-respectively.
-The titles are called
-.i three-part
-titles,
-that is,
-there is a left-justified part,
-a centered part,
-and a right-justified part.
-To separate these three parts
-the first character of
-.i title
-(whatever it may be)
-is used as a delimiter.
-Any character may be used,
-but
-backslash
-and double quote marks
-should be avoided.
-The percent sign
-is replaced by the current page number
-whenever found in the title.
-For example,
-the input:
-.(b
-\&.he \(aa\(aa%\(aa\(aa
-\&.fo \(aaJane Jones\(aa\(aaMy Book\(aa
-.)b
-results in the page number
-centered at the top
-of each page,
-.q "Jane Jones"
-in the lower left corner,
-and
-.q "My Book"
-in the lower right corner.
-.sh 2 "Double Spacing"
-.pp
-.ls 2
-\*G will double space output text automatically if you
-use the request
-.b ".ls\ 2" ,
-as is done in this section.
-You can revert to single spaced mode
-by typing
-.b ".ls\ 1" .
-.ls 1
-.sh 2 "Page Layout"
-.pp
-A number of requests allow
-you to change the way the printed copy looks,
-sometimes called the
-.i layout
-of the output page.
-Most of these requests adjust the placing
-of
-.q "white space"
-(blank lines or spaces).
-In these explanations,
-characters in italics
-should be replaced with values you wish to use;
-bold characters
-represent characters which should actually be typed.
-.pp
-The
-.b .bp
-request
-starts a new page.
-.pp
-The request
-.b .sp \ \c
-.i N
-leaves
-.i N
-lines of blank space.
-.i N
-can be omitted
-(meaning skip a single line)
-or can be of the form
-.i N \^\c
-.b i
-(for
-.i N
-inches)
-or
-.i N \^\c
-.b c
-(for
-.i N
-centimeters).
-For example, the input:
-.(b
-\&.sp 1.5i
-My thoughts on the subject
-\&.sp
-.)b
-leaves one and a half inches of space,
-followed by the line
-.q "My thoughts on the subject" ,
-followed by a single blank line.
-.pp
-The
-.b .in \ \c
-.i +N
-request
-changes the amount of white space
-on the left of the page
-(the
-.i indent ).
-The argument
-.i N
-can be of the form
-.b + \c
-.i N
-(meaning leave
-.i N
-spaces more than you are already leaving),
-.b \- \c
-.i N
-(meaning leave less than you do now),
-or just
-.i N
-(meaning leave exactly
-.i N
-spaces).
-.i N
-can be of the form
-.i N \^\c
-.b i
-or
-.i N \^\c
-.b c
-also.
-For example,
-the input:
-.(b
-initial text
-\&.in 5
-some text
-\&.in +1i
-more text
-\&.in \-2c
-final text
-.)b
-produces
-.q "some text"
-indented exactly five spaces
-from the left margin,
-.q "more text"
-indented five spaces
-plus one inch
-from the left margin
-(fifteen spaces
-on a pica typewriter),
-and
-.q "final text"
-indented five spaces
-plus one inch
-minus two centimeters
-from the margin.
-That is,
-the output is:
-.(b
-initial text
-.in +5
-some text
-.in +1i
-more text
-.in -2c
-final text
-.)b
-.pp
-The
-.b .ti \ \c
-.i +N
-(temporary indent)
-request is used like
-.b .in \ \c
-.i +N
-when the indent
-should apply to one line only,
-after which it should revert
-to the previous indent.
-For example,
-the input:
-.(b
-\&.in 1i
-\&.ti 0
-Ware, James R. The Best of Confucius,
-Halcyon House, 1950.
-An excellent book containing translations of
-most of Confucius\(aa most delightful sayings.
-A definite must for anyone interested in the early foundations
-of Chinese philosophy.
-.)b
-produces:
-.in 1i+\n($iu
-.ti \n($iu
-Ware, James R. The Best of Confucius,
-Halcyon House, 1950.
-An excellent book containing translations of
-most of Confucius' most delightful sayings.
-A definite must for anyone interested in the early foundations
-of Chinese philosophy.
-.pp
-Text lines can be centered
-by using the
-.b .ce
-request.
-The line after the
-.b .ce
-is centered
-(horizontally)
-on the page.
-To center more than one line,
-use
-.b .ce \ \c
-.i N
-(where
-.i N
-is the number of lines to center),
-followed by the
-.i N
-lines.
-If you want to center many lines
-but don't want to count them,
-type:
-.(b
-\&.ce 1000
-lines to center
-\&.ce 0
-.)b
-The
-.b ".ce\ 0"
-request tells \*G to center zero more lines,
-in other words,
-stop centering.
-.pp
-All of these requests
-cause a break;
-that is,
-they always start
-a new line.
-If you want to start a new line
-without performing any other action,
-use
-.b .br .
-.sh 1 "Displays"
-.pp
-Displays are sections of text
-to be set off
-from the body of the paper.
-Major quotes,
-tables,
-and figures
-are types of displays,
-as are all the examples
-used in this document.
-All displays
-except centered blocks
-are output
-single spaced.
-.sh 2 "Major Quotes"
-.pp
-Major quotes
-are quotes which are several lines long,
-and hence are set in from the rest
-of the text
-without quote marks
-around them.
-These can be generated
-using the commands
-.b .(q
-and
-.b .)q
-to surround the quote.
-For example,
-the input:
-.(b
-As Weizenbaum points out:
-\&.(q
-It is said that to explain is to explain away.
-This maxim is nowhere so well fulfilled
-as in the areas of computer programming,...
-\&.)q
-.)b
-generates as output:
-.lp
-As Weizenbaum points out:
-.(q
-It is said that to explain is to explain away.
-This maxim is nowhere so well fulfilled
-as in the areas of computer programming,...
-.)q
-.sh 2 "Lists"
-.pp
-A
-.i list
-is an indented,
-single spaced,
-unfilled display.
-Lists should be used
-when the material to be printed
-should not be filled and justified
-like normal text,
-such as columns of figures
-or the examples used in this paper.
-Lists are surrounded
-by the requests
-.b .(l
-and
-.b .)l .
-For example,
-type:
-.(b
-Alternatives to avoid deadlock are:
-\&.(l
-Lock in a specified order
-Detect deadlock and back out one process
-Lock all resources needed before proceeding
-\&.)l
-.)b
-will produce:
-.br
-Alternatives to avoid deadlock are:
-.(l
-Lock in a specified order
-Detect deadlock and back out one process
-Lock all resources needed before proceeding
-.)l
-.sh 2 "Keeps"
-.pp
-A
-.i keep
-is a display of lines
-which are kept on a single page
-if possible.
-An example of where you would use a keep
-might be a diagram.
-Keeps differ from lists
-in that lists may be broken
-over a page boundary
-whereas keeps will not.
-.pp
-Blocks are the basic kind of keep.
-They begin with the request
-.b .(b
-and end with the request
-.b .)b .
-If there is not room on the current page
-for everything in the block,
-a new page is begun.
-This has the unpleasant effect
-of leaving blank space
-at the bottom of the page.
-When this is not appropriate,
-you can use the alternative,
-called
-.i "floating keeps" .
-.pp
-.i "Floating keeps"
-move relative to the text.
-Hence,
-they are good for things
-which will be referred to
-by name,
-such as
-.q "See figure 3" .
-A floating keep will appear
-at the bottom of the current page
-if it will fit;
-otherwise,
-it will appear at the top
-of the next page.
-Floating keeps begin with the line
-.b .(z
-and end with the line
-.b .)z .
-For an example of a floating keep,
-see figure 1.
-.(z
-.in 1i
-.xl -1i
-.hl
-\&.(z
-\&.hl
-Text of keep to be floated.
-\&.sp
-\&.ce
-Figure 1. Example of a Floating Keep.
-\&.hl
-\&.)z
-.sp
-.ce
-Figure 1. Example of a Floating Keep.
-.hl
-.)z
-The
-.b .hl
-request is used
-to draw a horizontal line
-so that the figure
-stands out from the text.
-.sh 2 "Fancier Displays"
-.pp
-Keeps and lists are normally collected in
-.i nofill
-mode,
-so that they are good for tables and such.
-If you want a display
-in fill mode
-(for text),
-type
-.b ".(l\ F"
-(Throughout this section,
-comments applied to
-.b .(l
-also apply to
-.b .(b
-and
-.b .(z ).
-This kind of display
-will be indented from both margins.
-For example,
-the input:
-.(b
-\&.(l F
-And now boys and girls,
-a newer, bigger, better toy than ever before!
-Be the first on your block to have your own computer!
-Yes kids, you too can have one of these modern
-data processing devices.
-You too can produce beautifully formatted papers
-without even batting an eye!
-\&.)l
-.)b
-will be output as:
-.(b F
-And now boys and girls,
-a newer, bigger, better toy than ever before!
-Be the first on your block to have your own computer!
-Yes kids, you too can have one of these modern
-data processing devices.
-You too can produce beautifully formatted papers
-without even batting an eye!
-.)b
-.pp
-Lists and blocks are also normally indented
-(floating keeps are normally left justified).
-To get a left-justified list,
-type
-.b ".(l\ L" .
-To get a list centered
-line-for-line,
-type
-.b ".(l C" .
-For example,
-to get a filled,
-left justified list, enter:
-.(b
-\&.(l L F
-text of block
-\&.)l
-.)b
-The input:
-.(b
-\&.(l
-first line of unfilled display
-more lines
-\&.)l
-.)b
-produces the indented text:
-.(b
-first line of unfilled display
-more lines
-.)b
-Typing the character
-.b L
-after the
-.b .(l
-request produces the left justified result:
-.(b L
-first line of unfilled display
-more lines
-.)b
-Using
-.b C
-instead of
-.b L
-produces the line-at-a-time centered output:
-.(b C
-first line of unfilled display
-more lines
-.)b
-.pp
-Sometimes it may be
-that you want to center several lines
-as a group,
-rather than centering them
-one line at a time.
-To do this
-use centered blocks,
-which are surrounded by the requests
-.b .(c
-and
-.b .)c .
-All the lines are centered as a unit,
-such that the longest line is centered
-and the rest are
-lined up around that line.
-Notice that lines
-do not move
-relative to each other
-using centered blocks,
-whereas they do
-using the
-.b C
-argument to keeps.
-.pp
-Centered blocks are
-.i not
-keeps,
-and may be used
-in conjunction
-with keeps.
-For example,
-to center a group of lines
-as a unit
-and keep them
-on one page,
-use:
-.(b
-\&.(b L
-\&.(c
-first line of unfilled display
-more lines
-\&.)c
-\&.)b
-.)b
-to produce:
-.(b L
-.(c
-first line of unfilled display
-more lines
-.)c
-.)b
-If the block requests
-(\c
-.b .(b
-and
-.b .)b )
-had been omitted
-the result would have been the same,
-but with no guarantee
-that the lines of the centered block
-would have all been on one page.
-Note the use of the
-.b L
-argument to
-.b .(b ;
-this causes the centered block
-to center within the entire line
-rather than within the line
-minus the indent.
-Also,
-the center requests
-must
-be nested
-.i inside
-the keep requests.
-.sh 1 "Annotations"
-.pp
-There are a number of requests
-to save text
-for later printing.
-.i Footnotes
-are printed at the bottom of the current page.
-.i "Delayed text"
-is intended to be a variant form
-of footnote;
-the text is printed only
-when explicitly called for,
-such as at the end of each chapter.
-.i Indexes
-are a type of delayed text
-having a tag
-(usually the page number)
-attached to each entry
-after a row of dots.
-Indexes are also saved
-until called for explicitly.
-.sh 2 "Footnotes"
-.pp
-Footnotes begin with the request
-.b .(f
-and end with the request
-.b .)f .
-The current footnote number is maintained
-automatically,
-and can be used by typing \e**,
-to produce a footnote number\**.
-.(f
-\**Like this.
-.)f
-The number is automatically incremented
-after every footnote.
-For example,
-the input:
-.(b
-\&.(q
-A man who is not upright
-and at the same time is presumptuous;
-one who is not diligent and at the same time is ignorant;
-one who is untruthful and at the same time is incompetent;
-such men I do not count among acquaintances.\e**
-\&.(f
-\e**James R. Ware,
-\&.ul
-The Best of Confucius,
-Halcyon House, 1950.
-Page 77.
-\&.)f
-\&.)q
-.)b
-generates the result:
-.(q
-A man who is not upright
-and at the same time is presumptuous;
-one who is not diligent and at the same time is ignorant;
-one who is untruthful and at the same time is incompetent;
-such men I do not count among acquaintances.\**
-.(f
-\**James R. Ware,
-.ul
-The Best of Confucius,
-Halcyon House, 1950.
-Page 77.
-.)f
-.)q
-It is important
-that the footnote
-appears
-.i inside
-the quote,
-so that you can be sure
-that the footnote
-will appear
-on the same page
-as the quote.
-.sh 2 "Delayed Text"
-.pp
-Delayed text
-is very similar to a footnote
-except that it is printed
-when called for explicitly.
-This allows a list of
-references to
-appear
-(for example)
-at the end of each chapter,
-as is the convention in some disciplines.
-Use
-.b \e*#
-on delayed text
-instead of
-.b \e**
-as on footnotes.
-.pp
-If you are using delayed text
-as your standard reference mechanism,
-you can still use footnotes,
-except that you may want to reference them
-with special characters*
-.(f
-*Such as an asterisk.
-.)f
-rather than numbers.
-.sh 2 "Indexes"
-.pp
-An
-.q index
-(actually more like a table of contents,
-since the entries are not sorted alphabetically)
-resembles delayed text,
-in that it is saved until called for.
-However,
-each entry has the page number
-(or some other tag)
-appended to the last line
-of the index entry
-after a row of dots.
-.pp
-Index entries begin with the request
-.b .(x
-and end with
-.b .)x .
-The
-.b .)x
-request may have a argument,
-which is the value to print
-as the
-.q "page number" .
-It defaults to the current page number.
-If the page number given is an underscore
-(\c
-.q _ )
-no page number
-or line of dots
-is printed at all.
-To get the line of dots
-without a page number,
-type
-.b ".)x """"" ,
-which specifies an explicitly null page number.
-.pp
-The
-.b .xp
-request prints the index.
-.pp
-For example,
-the input:
-.(b
-\&.(x
-Sealing wax
-\&.)x
-\&.(x
-Cabbages and kings
-\&.)x _
-\&.(x
-Why the sea is boiling hot
-\&.)x 2.5a
-\&.(x
-Whether pigs have wings
-\&.)x ""
-\&.(x
-This is a terribly long index entry, such as might be used
-for a list of illustrations, tables, or figures; I expect it to
-take at least two lines.
-\&.)x
-\&.xp
-.)b
-generates:
-.(x
-Sealing wax
-.)x
-.(x
-Cabbages and kings
-.)x _
-.(x
-Why the sea is boiling hot
-.)x 2.5a
-.(x
-Whether pigs have wings
-.)x ""
-.(x
-This is a terribly long index entry, such as might be used
-for a list of illustrations, tables, or figures; I expect it to
-take at least two lines.
-.)x
-.xp
-.pp
-The
-.b .(x
-request may have a single character
-argument,
-specifying the
-.q name
-of the index;
-the normal index is
-.b x .
-Thus,
-several
-.q indices
-may be maintained simultaneously
-(such as a list of tables, table of contents, etc.).
-.pp
-Notice that the index must be printed
-at the
-.i end
-of the paper,
-rather than at the beginning
-where it will probably appear
-(as a table of contents);
-the pages may have to be physically rearranged
-after printing.
-.sh 1 "Fancier Features"
-.pp
-A large number of fancier requests
-exist,
-notably requests to provide other sorts of paragraphs,
-numbered sections of the form
-.b 1.2.3
-(such as used in this document),
-and multicolumn output.
-.sh 2 "More Paragraphs"
-.pp
-Paragraphs generally start with
-a blank line
-and with the first line
-indented.
-It is possible to get
-left-justified block-style paragraphs
-by using
-.b .lp
-instead of
-.b .pp ,
-as demonstrated by the next paragraph.
-.lp
-Sometimes you want to use paragraphs
-that have the
-.i body
-indented,
-and the first line
-exdented
-(opposite of indented)
-with a label.
-This can be done with the
-.b .ip
-request.
-A word specified on the same line as
-.b .ip
-is printed in the margin,
-and the body is lined up
-at a prespecified position
-(normally five spaces).
-For example,
-the input:
-.(b
-\&.ip one
-This is the first paragraph.
-Notice how the first line
-of the resulting paragraph lines up
-with the other lines in the paragraph.
-\&.ip two
-And here we are at the second paragraph already.
-You may notice that the argument to \c
-.b .ip
-appears
-in the margin.
-\&.lp
-We can continue text...
-.)b
-produces as output:
-.ip one
-This is the first paragraph.
-Notice how the first line of the resulting paragraph lines up
-with the other lines in the paragraph.
-.ip two
-And here we are at the second paragraph already.
-You may notice that the argument to
-.b .ip
-appears
-in the margin.
-.lp
-We can continue text without starting a new indented
-paragraph
-by using the
-.b .lp
-request.
-.pp
-If you have spaces in the label of a
-.b .ip
-request,
-you must use an
-.q "unpaddable space"
-instead of a regular space.
-This is typed as a backslash character
-(\c
-.q \e )
-followed by a space.
-For example,
-to print the label
-.q "Part 1" ,
-enter:
-.(b
-\&.ip "Part\e 1"
-.)b
-.pp
-If a label of an indented paragraph
-(that is, the argument to
-.b .ip )
-is longer than the space allocated for the label,
-.b .ip
-will begin a new line after the label.
-For example,
-the input:
-.(b
-\&.ip longlabel
-This paragraph had a long label.
-The first character of text on the first line
-will not line up with the text on second and subsequent lines,
-although they will line up with each other.
-.)b
-will produce:
-.ip longlabel
-This paragraph had a long label.
-The first character of text on the first line
-will not line up with the text on second and subsequent lines,
-although they will line up with each other.
-.pp
-It is possible to change the size of the label
-by using a second argument
-which is the size of the label.
-For example,
-the above example could be done correctly
-by saying:
-.(b
-\&.ip longlabel 10
-.)b
-which will make the paragraph indent
-10 spaces for this paragraph only.
-If you have many paragraphs to indent
-all the same amount,
-use the
-.i "number register"
-.b ii .
-For example, to leave one inch of space
-for the label,
-type:
-.(b
-\&.nr ii 1i
-.)b
-somewhere before the first call to
-.b .ip .
-Refer to the reference manual
-for more information.
-.pp
-If
-.b .ip
-is used
-with no argument at all
-no hanging tag will be printed.
-For example,
-the input:
-.(b
-\&.ip [a]
-This is the first paragraph of the example.
-We have seen this sort of example before.
-\&.ip
-This paragraph is lined up with the previous paragraph,
-but it has no tag in the margin.
-.)b
-produces as output:
-.ip [a]
-This is the first paragraph of the example.
-We have seen this sort of example before.
-.ip
-This paragraph is lined up with the previous paragraph,
-but it has no tag in the margin.
-.pp
-A special case of
-.b .ip
-is
-.b .np ,
-which automatically
-numbers paragraphs sequentially from 1.
-The numbering is reset at the next
-.b .pp ,
-.b .lp ,
-or
-.b .sh
-(to be described in the next section)
-request.
-For example,
-the input:
-.(b
-\&.np
-This is the first point.
-\&.np
-This is the second point.
-Points are just regular paragraphs
-which are given sequence numbers automatically
-by the .np request.
-\&.pp
-This paragraph will reset numbering by .np.
-\&.np
-For example,
-we have reverted to numbering from one now.
-.)b
-generates:
-.np
-This is the first point.
-.np
-This is the second point.
-Points are just regular paragraphs
-which are given sequence numbers automatically
-by the .np request.
-.pp
-This paragraph will reset numbering by .np.
-.np
-For example,
-we have reverted to numbering from one now.
-.pp
-The
-.b .bu
-request gives lists of this sort that are identified with
-bullets rather than numbers.
-The paragraphs are also crunched together.
-For example,
-the input:
-.(b
-\&.bu
-\&One egg yolk
-\&.bu
-\&One tablespoon cream or top milk
-\&.bu
-\&Salt, cayenne, and lemon juice to taste
-\&.bu
-\&A generous two tablespoonfuls of butter
-.)b
-produces\**:
-.(f
-\**By the way,
-if you put the first three ingredients in a a heavy, deep pan
-and whisk the ingredients madly over a medium flame
-(never taking your hand off the handle of the pot)
-until the mixture reaches the consistency of custard
-(just a minute or two),
-then mix in the butter off-heat,
-you will have a wonderful Hollandaise sauce.
-.)f
-.bu
-One egg yolk
-.bu
-One tablespoon cream or top milk
-.bu
-Salt, cayenne, and lemon juice to taste
-.bu
-A generous two tablespoonfuls of butter
-.sh 2 "Section Headings"
-.pp
-Section numbers
-(such as the ones used in this document)
-can be automatically generated
-using the
-.b .sh
-request.
-You must tell
-.b .sh
-the
-.i depth
-of the section number
-and a section title.
-The depth
-specifies how many numbers
-are to appear
-(separated by decimal points)
-in the section number.
-For example,
-the section number
-.b 4.2.5
-has a depth of three.
-.pp
-Section numbers
-are incremented
-in a fairly intuitive fashion.
-If you add a number
-(increase the depth),
-the new number starts out
-at one.
-If you subtract section numbers
-(or keep the same number)
-the final number is incremented.
-For example,
-the input:
-.(b
-\&.sh 1 "The Preprocessor"
-\&.sh 2 "Basic Concepts"
-\&.sh 2 "Control Inputs"
-\&.sh 3
-\&.sh 3
-\&.sh 1 "Code Generation"
-\&.sh 3
-.)b
-produces as output the result:
-.(b
-.b
-1. The Preprocessor
-1.1. Basic Concepts
-1.2. Control Inputs
-1.2.1.
-1.2.2.
-2. Code Generation
-2.1.1.
-.)b
-.pp
-You can specify the section number to begin
-by placing the section number after the section title,
-using spaces instead of dots.
-For example,
-the request:
-.(b
-\&.sh 3 "Another section" 7 3 4
-.)b
-will begin the section numbered
-.b 7.3.4 ;
-all subsequent
-.b .sh
-requests will number relative to this number.
-.pp
-There are more complex features
-which will cause each section to be indented
-proportionally to the depth of the section.
-For example, if you enter:
-.(b
-\&.nr si \c
-.i N
-.)b
-each section will be indented by an amount
-.i N .
-.i N
-must have a scaling factor attached,
-that is, it must be of the form
-.i Nx ,
-where
-.i x
-is a character telling what units
-.i N
-is in.
-Common values for
-.i x
-are
-.b i
-for inches,
-.b c
-for centimeters,
-and
-.b n
-for
-.i ens
-(the width of a single character).
-For example,
-to indent each section
-one-half inch,
-type:
-.(b
-\&.nr si 0.5i
-.)b
-After this,
-sections will be indented by
-one-half inch
-per level of depth in the section number.
-For example,
-this document was produced
-using the request
-.(b
-\&.nr si 3n
-.)b
-at the beginning of the input file,
-giving three spaces of indent
-per section depth.
-.pp
-Section headers without automatically generated numbers
-can be done using:
-.(b
-\&.uh "Title"
-.)b
-which will do a section heading,
-but will put no number on the section.
-.sh 2 "Parts of the Basic Paper"
-.pp
-There are some requests
-which assist in setting up
-papers.
-The
-.b .tp
-request
-initializes for a title page.
-There are no headers or footers
-on a title page,
-and unlike other pages
-you can space down
-and leave blank space
-at the top.
-For example,
-a typical title page might appear as:
-.(b
-\&.tp
-\&.sp 2i
-\&.(l C
-THE GROWTH OF TOENAILS
-IN UPPER PRIMATES
-\&.sp
-by
-\&.sp
-Frank N. Furter
-\&.)l
-\&.bp
-.)b
-.pp
-The
-.b .+c \ \c
-.i T
-request can be used
-to start chapters.
-Each chapter is automatically numbered
-from one,
-and a heading is printed at the top of each chapter
-with the chapter number
-and the chapter name
-.i T .
-For example,
-to begin a chapter called
-.q Conclusions ,
-use the request:
-.(b
-\&.+c "CONCLUSIONS"
-.)b
-which will produce,
-on a new page,
-the lines
-.(b C
-CHAPTER 5
-CONCLUSIONS
-.)b
-with appropriate spacing for a thesis.
-Also, the header is moved to the foot of the page
-on the first page of a chapter.
-Although the
-.b .+c
-request was not designed to work only with the
-.b .th
-request,
-it is tuned for the format acceptable
-for a PhD thesis
-at Berkeley.
-.pp
-If the
-title parameter
-.i T
-is omitted from the
-.b .+c
-request,
-the result is a chapter with no heading.
-This can also be used at the beginning
-of a paper;
-for example,
-.b .+c
-was used to generate page one
-of this document.
-.pp
-Although
-papers traditionally have the abstract,
-table of contents,
-and so forth at the front of the paper,
-it is more convenient to format
-and print them last
-when using \*G.
-This is so that index entries
-can be collected and then printed
-for the table of contents
-(or whatever).
-At the end of the paper,
-issue the
-.b ".++ P"
-request,
-which begins the preliminary part
-of the paper.
-After issuing this request,
-the
-.b .+c
-request will begin a preliminary section
-of the paper.
-Most notably,
-this prints the page number
-restarted from one
-in lower case Roman numbers.
-.b .+c
-may be used repeatedly
-to begin different parts of the
-front material
-for example,
-the abstract,
-the table of contents,
-acknowledgments,
-list of illustrations,
-etc.
-The request
-.b ".++ B"
-may also be used
-to begin the bibliographic section
-at the end of the paper.
-For example,
-the paper might appear
-as outlined in figure 2.
-(In this figure,
-comments begin with the sequence
-.b \e" .)
-.(z
-.hl
-.if t .in 0.5i
-.if t .ta 2i
-.if n .ta 3i
-\&.th \e" set for thesis mode
-\&.fo \(aa\(aaDRAFT\(aa\(aa \e" define footer for each page
-\&.tp \e" begin title page
-\&.(l C \e" center a large block
-THE GROWTH OF TOENAILS
-IN UPPER PRIMATES
-\&.sp
-by
-\&.sp
-Frank Furter
-\&.)l \e" end centered part
-\&.+c INTRODUCTION \e" begin chapter named "INTRODUCTION"
-\&.(x t \e" make an entry into index `t'
-Introduction
-\&.)x \e" end of index entry
-text of chapter one
-\&.+c "NEXT CHAPTER" \e" begin another chapter
-\&.(x t \e" enter into index `t' again
-Next Chapter
-\&.)x
-text of chapter two
-\&.+c CONCLUSIONS
-\&.(x t
-Conclusions
-\&.)x
-text of chapter three
-\&.++ B \e" begin bibliographic information
-\&.+c BIBLIOGRAPHY \e" begin another `chapter'
-\&.(x t
-Bibliography
-\&.)x
-text of bibliography
-\&.++ P \e" begin preliminary material
-\&.+c "TABLE OF CONTENTS"
-\&.xp t \e" print index `t' collected above
-\&.+c PREFACE \e" begin another preliminary section
-text of preface
-.sp 2
-.in 0
-.ce
-Figure 2. Outline of a Sample Paper
-.hl
-.)z
-.sh 2 "Equations and Tables"
-.pp
-Two special \*U programs exist
-to format special types of material.
-.b Eqn
-sets equations.
-.b Tbl
-arranges to print
-extremely pretty tables
-in a variety of formats.
-This document will only describe
-the embellishments
-to the standard features;
-consult the reference manuals
-for those processors
-for a description of their use.
-.pp
-The
-.b eqn
-program is described fully
-in the document
-.ul
-Typesetting Mathematics \- User's Guide
-by Brian W. Kernighan
-and Lorinda L. Cherry.
-Equations are centered,
-and are kept on one page.
-They are introduced by the
-.b .EQ
-request and terminated by the
-.b .EN
-request.
-.pp
-The
-.b .EQ
-request may take an
-equation number as an
-optional argument,
-which is printed vertically centered
-on the right hand side
-of the equation.
-If the equation becomes too long
-it should be split
-between two lines.
-To do this, type:
-.(b
-\&.EQ (eq 34)
-text of equation 34
-\&.EN C
-\&.EQ
-continuation of equation 34
-\&.EN
-.)b
-The
-.b C
-on the
-.b .EN
-request
-specifies that the equation
-will be continued.
-.pp
-The
-.b tbl
-program produces tables.
-It is fully described
-(including numerous examples)
-in the document
-.ul
-Tbl \- A Program to Format Tables
-by M. E. Lesk.
-Tables begin with the
-.b .TS
-request
-and end with the
-.b .TE
-request.
-Tables are normally kept on a single page.
-If you have a table which is too big
-to fit on a single page,
-so that you know it will extend
-to several pages,
-begin the table with the request
-.b ".TS\ H"
-and put the request
-.b .TH
-after the part of the table
-which you want
-duplicated at the top of every page
-that the table is printed on.
-For example, a table definition
-for a long table might look like:
-.ds TA \|\h'.4n'\v'-.2n'\s-4\zT\s0\v'.2n'\h'-.4n'\(ci\|
-.if n .ds TA \ \o'-T'\ \"
-.(b
-\&.TS H
-c s s
-n n n.
-THE TABLE TITLE
-\&.TH
-text of the table
-\&.TE
-.)b
-.pp
-.sh 2 "Two Column Output"
-.pp
-You can get two column output
-automatically
-by using the request
-.b .2c .
-This causes everything after it
-to be output in two-column form.
-The request
-.b .bc
-will start a new column;
-it differs from
-.b .bp
-in that
-.b .bp
-may leave a totally blank column
-when it starts a new page.
-To revert to single column output,
-use
-.b .1c .
-.sh 2 "Defining Macros"
-.pp
-A
-.i macro
-is a collection of requests and text
-which may be used
-by stating a simple request.
-Macros begin with the line
-.b ".de" \ \c
-.i xx
-(where
-.i xx
-is the name of the macro to be defined)
-and end with the line consisting of two dots.
-After defining the macro,
-stating the line
-.b . \c
-.i xx
-is the same as stating all the other lines.
-For example,
-to define a macro
-that spaces 3 lines
-and then centers the next input line,
-enter:
-.(b
-\&.de SS
-\&.sp 3
-\&.ce
-\&..
-.)b
-and use it by typing:
-.(b
-\&.SS
-\&Title Line
-(beginning of text)
-.)b
-.pp
-Macro names may be one or two characters.
-In order to avoid conflicts
-with names in \-me,
-always use upper case letters as names.
-The only names to avoid are
-.b TS ,
-.b TH ,
-.b TE ,
-.b EQ ,
-and
-.b EN .
-.sh 2 "Annotations Inside Keeps"
-.pp
-Sometimes you may want to put
-a footnote
-or index entry inside a keep.
-For example,
-if you want to maintain a
-.q "list of figures"
-you will want to do something like:
-.(b
-\&.(z
-\&.(c
-text of figure
-\&.)c
-\&.ce
-Figure 5.
-\&.(x f
-Figure 5
-\&.)x
-\&.)z
-.)b
-which you may hope
-will give you a figure
-with a label
-and an entry in the index
-.b f
-(presumably a list of figures index).
-Unfortunately,
-the
-index entry
-is read and interpreted
-when the keep is read,
-not when it is printed,
-so the page number in the index is likely to be wrong.
-The solution is to use the magic string
-.b \e!
-at the beginning of all the lines dealing with the index.
-In other words,
-you should use:
-.(b
-\&.(z
-\&.(c
-Text of figure
-\&.)c
-\&.ce
-Figure 5.
-\e!.(x f
-\e!Figure 5
-\e!.)x
-\&.)z
-.)b
-which will defer the processing of the index
-until the figure is output.
-This will guarantee
-that the page number in the index
-is correct.
-The same comments apply
-to
-blocks
-(with
-.b .(b
-and
-.b .)b )
-as well.
-.sh 1 "\*T and the Photosetter"
-.pp
-With a little care,
-you can prepare
-documents that
-will print nicely
-on either a regular terminal
-or when phototypeset
-using the \*T formatting program.
-.sh 2 "Fonts"
-.pp
-A
-.i font
-is a style of type.
-There are three fonts
-that are available simultaneously,
-Times Roman,
-Times Italic,
-and Times Bold,
-plus the special math font.
-The normal font is Roman.
-.pp
-There are ways of switching between fonts.
-The requests
-.b .r ,
-.b .i ,
-.b .b ,
-and
-.b .bi
-switch to Roman,
-italic,
-bold,
-and bold-italic fonts respectively.
-You can set a single word
-in some font
-by typing (for example):
-.(b
-\&.i word
-.)b
-which will set
-.i word
-in italics
-but does not affect the surrounding text.
-.pp
-Notice that if you are setting more than one word
-in whatever font,
-you must surround that word with double quote marks
-(`\|"\|')
-so that it will appear to the \*G processor as a single word.
-The quote marks will not appear in the formatted text.
-If you do want a quote mark to appear,
-you should quote the entire string
-(even if a single word),
-and use
-.i two
-quote marks where you want one to appear.
-For example,
-if you want to produce the text:
-.(b
-.i """Master Control\|"""
-.)b
-in italics, you must type:
-.(b
-\&.i """Master Control\e|"""
-.)b
-The
-.b \e|
-produces a very narrow space
-so that the
-.q l
-does not overlap the quote sign in \*G,
-like this:
-.(b
-.i """Master Control"""
-.)b
-.pp
-There are also some
-.q pseudo-fonts
-available.
-The input:
-.(b
-\&.(b
-\&.u underlined
-\&.bx "words in a box"
-\&.)b
-.)b
-generates
-.(b
-.u underlined
-.bx "words in a box"
-.)b
-Notice that pseudo font requests
-set only the single parameter in the pseudo font;
-ordinary font requests will begin setting all text
-in the special font
-if you do not provide a parameter.
-No more than one word
-should appear
-with these three font requests
-in the middle of lines.
-This is because
-of the way \*G justifies text.
-For example,
-if you were to issue the requests:
-.(b
-\&.u "some bold italics"
-and
-\&.bx "words in a box"
-.)b
-in the middle of a line
-\*G would produce
-.u "some bold italics"
-and
-.bx "words in a box" ,\p
-which I think you will agree does not look good.
-.pp
-The second parameter
-of all font requests
-is set in the original font.
-For example,
-the font request:
-.(b
-\&.b bold face
-.)b
-generates
-.q bold
-in bold font,
-but sets
-.q face
-in the font of the surrounding text,
-resulting in:
-.(b
-.b bold face.
-.)b
-To set the two words
-.b bold
-and
-.b face
-both in
-.b "bold face" ,
-type:
-.(b
-\&.b "bold face"
-.)b
-.pp
-You can mix fonts in a word by using the
-special sequence
-.b \ec
-at the end of a line
-to indicate
-.q "continue text processing" ;
-this allows input lines
-to be joined together
-without a space between them.
-For example, the input:
-.(b
-\&.u under \ec
-\&.i italics
-.)b
-generates
-.u under \c
-.i italics ,
-but if we had typed:
-.(b
-\&.u under
-\&.i italics
-.)b
-the result would have been
-.u under
-.i italics
-as two words.
-.sh 2 "Point Sizes"
-.pp
-The phototypesetter
-supports different sizes of type,
-measured in points.
-The default point size
-is 10 points
-for most text,
-8 points for footnotes.
-To change the pointsize,
-type:
-.(b
-\&.sz \c
-.i +N
-.)b
-where
-.i N
-is the size wanted in points.
-The
-.i "vertical spacing"
-(distance between the bottom of most letters
-(the
-.i baseline )
-between adjacent lines)
-is set to be proportional
-to the type size.
-.pp
-These pointsize changes are
-.i temporary !!!
-For example,
-to reset the pointsize of basic text to twelve point, use:
-.(b
-\&.nr pp 12
-\&.nr sp 12
-\&.nr tp 12
-.)b
-to reset the default pointsize of
-paragraphs,
-section headers,
-and titles respectively.
-If you only want to set the names of sections in a larger pointsize,
-use:
-.(b
-\&.nr sp 11
-.)b
-alone \*- this sets section titles
-(e.g.,
-.b "Point Sizes"
-above)
-in a larger font than the default.
-.pp
-A single word or phrase can be set in a smaller pointsize
-than the surrounding text
-using the
-.b .sm
-request.
-This is especially convenient for words that are all capitals,
-due to the optical illusion that makes them look even larger
-than they actually are.
-For example:
-.(b
-\&.sm UNIX
-.)b
-prints as
-.sm UNIX
-rather than
-UNIX.
-.pp
-Warning:
-changing point sizes
-on the phototypesetter
-is a slow mechanical operation.
-On laser printers it may require loading new fonts.
-Size changes
-should be considered carefully.
-.sh 2 "Quotes"
-.pp
-It is conventional when using
-the typesetter to
-use pairs of grave and acute accents
-to generate double quotes,
-rather than the
-double quote character
-(`\|"\|').
-This is because it looks better
-to use grave and acute accents;
-for example, compare
-"quote" to
-``quote''.
-.pp
-You may use the sequences
-.b \e*(lq
-and
-.b \e*(rq
-to stand for the left and right quote
-respectively.
-For example,
-use:
-.(b
-\e*(lqSome things aren\(aat true
-even if they did happen.\e*(rq
-.)b
-to generate the result:
-.(b
-.q "Some things aren't true even if they did happen."
-.)b
-As a shorthand,
-the special font request:
-.(b
-\&.q "quoted text"
-.)b
-will generate
-.q "quoted text" .
-Notice that you must surround
-the material to be quoted
-with double quote marks
-if it is more than one word.
-.sh 0
-.sp 1i
-.b Acknowledgments
-.pp
-I would like to thank
-Bob Epstein,
-Bill Joy,
-and Larry Rowe
-for having the courage
-to use the \-me macros
-to produce non-trivial papers
-during the development stages;
-Ricki Blau,
-Pamela Humphrey,
-and Jim Joyce
-for their help with the documentation phase;
-peter kessler
-for numerous complaints years after I was
-.q done
-with this project,
-most accompanied by fixes
-(hence forcing me to fix several small bugs);
-and the plethora of people who have contributed ideas
-and have given support for the project.
-.sp 1i
-This document applies to the version of the \-me macros
-included with \*G version \*(MO.
diff --git a/contrib/groff/doc/meref.me b/contrib/groff/doc/meref.me
deleted file mode 100644
index 5b68aa16ca06..000000000000
--- a/contrib/groff/doc/meref.me
+++ /dev/null
@@ -1,2223 +0,0 @@
-.\" Copyright (c) 1986 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" @(#)ref.me 6.4 (Berkeley) 7/17/89
-.\"
-.\" Modified by jjc@jclark.com for groff.
-.\"UC 7
-.ll 6.5i
-.lt 6.5i
-.\"pn 0
-.ds MO @VERSION@
-.de TL \" *** title line
-.lp
-.di XX
-..
-.ie \n(.g \{\
-.de DE
-\?\h'|\\n(DIu'\c\?
-..
-.\}
-.el \{\
-.de DE
-\\\\h'|\\\\n(DIu'\\\\c
-..
-.\}
-.am DE
-.br
-.di
-.in +\\n(DIu
-.ti 0
-.cu 1000
-.XX
-.rm XX
-.cu 0
-..
-.ds G \s-1GROFF\s0
-.ds N \s-1NROFF\s0
-.ds T \s-1TROFF\s0
-.nr DI 1.5i
-.he '\-ME REFERENCE MANUAL''%'
-.de NR
-.b "\en\\$1" "\\$2"
-..
-.de ST
-.b "\e*\\$1" "\\$2"
-..
-.\"sc
-.\"eh 'USD:23-%''\-me Reference Manual'
-.\"oh '\-me Reference Manual''USD:23-%'
-.+c
-.ce 20
-.sz 14
-.b "\-ME REFERENCE MANUAL"
-.sz
-.sp
-.i "\*G Version \*(MO\(dg"
-.(f
-\(dgBased on Berkeley Release 2.31.
-.)f
-.sp 2
-.ul
-Eric P. Allman*
-.(f
-*Author's current address:
-Britton Lee, Inc.,
-1919 Addison Suite 105,
-Berkeley, California 94704.
-.)f
-.sp
-Project INGRES
-Electronics Research Laboratory
-University of California, Berkeley
-Berkeley, California 94720
-.sp 2
-.i "Modified for \*G by James Clark"
-.ce 0
-.sp 4
-.pp
-This document describes
-in extremely terse form
-the features
-of the
-.b \-me
-macro package
-for \*G.
-Some familiarity is assumed
-with
-\*G.
-Specifically,
-the reader should understand
-breaks,
-fonts,
-pointsizes,
-the use and definition of number registers
-and strings,
-how to define macros,
-and scaling factors for ens, points,
-.b v 's
-(vertical line spaces),
-etc.
-.pp
-For a more casual introduction
-to text processing
-using \*G,
-refer to the document
-.ul
-Writing Papers with \*G using \-me.
-.pp
-There are a number of macro parameters
-that may be adjusted.
-Fonts may be set to a font number only.
-Font 0 is no font change;
-the font of the surrounding text
-is used instead.
-Notice that font 0 is a
-.q pseudo-font ;
-that is,
-it is simulated by the macros.
-This means that although it is legal to set a font register
-to zero,
-it is not legal to use the escape character form,
-such as:
-.(b
-\ef0
-.)b
-.pp
-All distances
-are in basic units,
-so it is nearly always necessary
-to use a scaling factor.
-For example,
-the request
-to set the paragraph indent
-to eight one-en spaces is:
-.(b
-\&.nr pi 8n
-.)b
-and not
-.(b
-\&.nr pi 8
-.)b
-which would set the paragraph indent to eight basic units,
-or about 0.02 inch.
-Default parameter values are given in brackets
-in the remainder of this document.
-.pp
-Registers and strings
-of the form
-.b $ \c
-.i x
-may be used in expressions
-but should not be changed.
-Macros of the form
-.b $ \c
-.i x
-perform some function
-(as described)
-and may be redefined
-to change this function.
-This may be a sensitive operation;
-look at the body of the original macro
-before changing it.
-.pp
-All names in \-me
-follow a rigid naming convention.
-The user may define number registers,
-strings,
-and macros,
-provided that s/he
-uses single character upper case names
-or double character names
-consisting of letters and digits,
-with at least one upper case letter.
-In no case should special characters
-be used in user-defined names.
-Locally defined macros
-should all be of the form
-.b .* \c
-.i X ,
-where
-.i X
-is any letter
-(upper or lower case)
-or digit.
-.pp
-This documentation applies to \*G version
-\*(MO
-of the \-me macros.
-.sh 1 "Paragraphing"
-.pp
-These macros are used
-to begin paragraphs.
-The standard paragraph macro
-is
-.b .pp ;
-the others are all variants
-to be used for special purposes.
-.pp
-After the first call to one of the paragraphing macros
-defined in this section
-or the
-.b .sh
-macro
-(defined in the next session),
-the effects of changing parameters
-which will have a global effect
-on the format of the page
-(notably page length and header and footer margins)
-are not well defined
-and should be avoided.
-.TL
-.b .lp
-.DE
-Begin left-justified paragraph.
-Centering and underlining
-are turned off if they were on,
-the font is set to
-.NR (pf
-[1]
-the type size
-is set to
-.NR (pp
-[10p],
-and a
-.NR (ps
-space is inserted
-before the paragraph
-[0.35v]
-The indent is reset
-to
-.NR ($i
-[0]
-plus
-.NR (po
-[0]
-unless the paragraph
-is inside a display.
-(see
-.b .ba ).
-At least
-the first two lines
-of the paragraph
-are kept together
-on a page.
-.TL
-.b .pp
-.DE
-Like
-.b .lp ,
-except that it puts
-.NR (pi
-[5n]
-units of indent.
-This is the standard paragraph macro.
-.TL
-.b .ip
-.i T
-.i I
-.DE
-Indented paragraph
-with hanging tag.
-The body of the following paragraph
-is indented
-.i I
-spaces
-(or
-.NR (ii
-[5n]
-spaces
-if
-.i I
-is not specified)
-more than a non-indented paragraph
-(such as with
-.b .pp )
-is.
-The title
-.i T
-is exdented (opposite of indented).
-The result is a paragraph
-with an even left edge
-and
-.i T
-printed in the margin.
-Any spaces in
-.i T
-must be unpaddable.
-If
-.i T
-will not fit in the space provided,
-.b .ip
-will start a new line.
-.TL
-.b .np
-.DE
-A variant of .ip which numbers paragraphs.
-Numbering is reset
-after a
-.b .lp ,
-.b .pp ,
-or
-.b .sh .
-The current paragraph number
-is in
-.NR ($p .
-.TL
-.b .bu
-.DE
-Like
-.b .np
-except that paragraphs are marked with bullets (\(bu).
-Leading space is eliminated to create compact lists.
-.sh 1 "Section Headings"
-.pp
-Numbered sections
-are similar to paragraphs
-except that a
-section number
-is automatically
-generated for each one.
-The section numbers are of the form
-.b 1.2.3 .
-The
-.i depth
-of the section
-is the count of numbers
-(separated by decimal points)
-in the section number.
-.pp
-Unnumbered section headings are similar,
-except that no number is attached
-to the heading.
-.TL
-.b .sh
-.i +N
-.i T
-.i "a b c d e f"
-.DE
-Begin numbered section
-of depth
-.i N .
-If
-.i N
-is missing
-the current depth
-(maintained in
-the number register
-.NR ($0 )
-is used.
-The values of
-the individual parts of the section number
-are maintained in
-.NR ($1
-through
-.NR ($6 .
-There is a
-.NR (ss
-[1v]
-space before the section.
-.i T
-is printed
-as a section title
-in font
-.NR (sf
-[8]
-and size
-.NR (sp
-[10p].
-The
-.q name
-of the section may be accessed via
-.ST ($n .
-If
-.NR (si
-is non-zero,
-the base indent
-is set to
-.NR (si
-times the section depth,
-and the section title
-is exdented.
-(See
-.b .ba .)
-Also,
-an additional indent of
-.NR (so
-[0]
-is added to the section title
-(but not to the body of the section).
-The font is then set
-to the paragraph font,
-so that more information may occur
-on the line
-with the section number
-and title.
-.b .sh
-insures that there is enough room
-to print the section head
-plus the beginning of a paragraph
-(about 3 lines total).
-If
-.i a
-through
-.i f
-are specified,
-the section number is set to that number
-rather than incremented automatically.
-If any of
-.i a
-through
-.i f
-are a hyphen
-that number is not reset.
-If
-.i T
-is a single underscore
-(\c
-.q _ )
-then the section depth and numbering is reset,
-but the base indent is not reset
-and nothing is printed out.
-This is useful to automatically
-coordinate section numbers with
-chapter numbers.
-.TL
-.b .sx
-.i +N
-.DE
-Go to section depth
-.i N
-[\c
-.b \-1 ],
-but do not print the number
-and title,
-and do not increment the section number
-at level
-.i N .
-This has the effect
-of starting a new paragraph
-at level
-.i N .
-.TL
-.b .uh
-.i T
-.DE
-Unnumbered section heading.
-The title
-.i T
-is printed
-with the same rules for spacing,
-font, etc.,
-as for
-.b .sh .
-.TL
-.b .$p
-.i T
-.i B
-.i N
-.DE
-Print section heading.
-May be redefined
-to get fancier headings.
-.i T
-is the title passed on the
-.b .sh
-or
-.b .uh
-line;
-.i B
-is the section number for this section,
-and
-.i N
-is the depth of this section.
-These parameters are not always present;
-in particular,
-.b .sh
-passes all three,
-.b .uh
-passes only the first,
-and
-.b .sx
-passes three,
-but the first two
-are null strings.
-Care should be taken if this macro
-is redefined;
-it is quite complex and subtle.
-.TL
-.b .$0
-.i T
-.i B
-.i N
-.DE
-This macro is called automatically
-after every call to
-.b .$p .
-It is normally undefined,
-but may be used
-to automatically put
-every section title
-into the table of contents
-or for some similar function.
-.i T
-is the section title
-for the section title which was just printed,
-.i B
-is the section number,
-and
-.i N
-is the section depth.
-.TL
-.b .$1
-\-
-.b .$6
-.DE
-Traps called just before printing that depth section.
-May be defined to
-(for example)
-give variable spacing
-before sections.
-These macros are called from
-.b .$p ,
-so if you redefine that macro
-you may lose this feature.
-.sh 1 "Headers and Footers"
-.ds TP \fI\(aal\|\(aam\^\(aar\^\(aa\fP
-.pp
-Headers and footers
-are put at the top and bottom
-of every page
-automatically.
-They are set in font
-.NR (tf
-[3]
-and size
-.NR (tp
-[10p].
-Each of the definitions
-apply as of the
-.i next
-page.
-Three-part titles
-must be quoted
-if there are two blanks adjacent
-anywhere in the title
-or more than eight blanks total.
-.pp
-The spacing
-of headers and footers
-are controlled by three number registers.
-.NR (hm
-[4v]
-is the distance from the top of the page
-to the top of the header,
-.NR (fm
-[3v]
-is the distance from the bottom of the page
-to the bottom of the footer,
-.NR (tm
-[7v]
-is the distance from the top of the page
-to the top of the text,
-and
-.NR (bm
-[6v]
-is the distance from the bottom of the page
-to the bottom of the text
-(nominal).
-The macros
-.b .m1 ,
-.b .m2 ,
-.b .m3 ,
-and
-.b .m4
-are also supplied for compatibility
-with
-\s-1ROFF\s0 documents.
-.TL
-.b .he
-\*(TP
-.DE
-Define three-part header,
-to be printed on the top
-of every page.
-.TL
-.b .fo
-\*(TP
-.DE
-Define footer,
-to be printed at the bottom
-of every page.
-.TL
-.b .eh
-\*(TP
-.DE
-Define header,
-to be printed at the top of every
-even-numbered page.
-.TL
-.b .oh
-\*(TP
-.DE
-Define header,
-to be printed at the top of every
-odd-numbered page.
-.TL
-.b .ef
-\*(TP
-.DE
-Define footer,
-to be printed at the bottom
-of every even-numbered page.
-.TL
-.b .of
-\*(TP
-.DE
-Define footer,
-to be printed at the bottom
-of every odd-numbered page.
-.TL
-.b .hx
-.DE
-Suppress headers and footers
-on the next page.
-.TL
-.b .m1
-.i +N
-.DE
-Set the space between the top of the page
-and the header
-[4v].
-.TL
-.b .m2
-.i +N
-.DE
-Set the space between the header
-and the first line of text
-[2v].
-.TL
-.b .m3
-.i +N
-.DE
-Set the space
-between the bottom of the text
-and the footer
-[2v].
-.TL
-.b .m4
-.i +N
-.DE
-Set the space
-between the footer
-and the bottom of the page
-[4v].
-.TL
-.b .ep
-.DE
-End this page,
-but do not begin the next page.
-Useful for forcing out footnotes,
-but other than
-that hardly every used.
-Must be followed by a
-.b .bp
-or the end of input.
-.TL
-.b .$h
-.DE
-Called at every page
-to print the header.
-May be redefined
-to provide fancy
-(e.g.,
-multi-line)
-headers,
-but doing so
-loses the function of the
-.b .he ,
-.b .fo ,
-.b .eh ,
-.b .oh ,
-.b .ef ,
-and
-.b .of
-requests,
-as well as the chapter-style title feature
-of
-.b .+c .
-.TL
-.b .$f
-.DE
-Print footer;
-same comments apply
-as in
-.b .$h .
-.TL
-.b .$H
-.DE
-A normally undefined macro
-which is called
-at the top of each page
-(after putting out
-the header,
-initial saved floating keeps,
-etc.);
-in other words,
-this macro is called immediately before
-printing text
-on a page.
-It can be used for column headings
-and the like.
-.sh 1 "Displays"
-.pp
-All displays except centered blocks
-and block quotes
-are preceded and followed
-by an extra
-.NR (bs
-[same as
-.NR (ps ]
-space.
-Quote spacing is stored in a separate register;
-centered blocks have no default initial or trailing space.
-The vertical spacing of all displays except quotes
-and centered blocks
-is stored in register
-.NR ($V
-instead of
-.NR ($v .
-.TL
-.b .(l
-.i m
-.i f
-.DE
-Begin list.
-Lists are single spaced,
-unfilled text.
-If
-.i f
-is
-.b F ,
-the list will be filled.
-If
-.i m
-[\c
-.b I ]
-is
-.b I
-the list is indented by
-.NR (bi
-[4m];
-if
-.b M
-the list is indented to the left margin;
-if
-.b L
-the list is left justified with respect to the text
-(different from
-.b M
-only if the base indent
-(stored in
-.NR ($i
-and set with
-.b .ba )
-is not zero);
-and if
-.b C
-the list is centered on a line-by-line basis.
-The list is set in font
-.NR (df
-[0].
-Must be matched by a
-.b .)l .
-This macro is almost like
-.b .(b
-except that no attempt is made
-to keep the display on one page.
-.TL
-.b .)l
-.DE
-End list.
-.TL
-.b .(q
-.DE
-Begin major quote.
-These are single spaced,
-filled,
-moved in from the text
-on both sides
-by
-.NR (qi
-[4n],
-preceded and followed
-by
-.NR (qs
-[same as
-.NR (bs ]
-space,
-and are set in point size
-.NR (qp
-[one point smaller than surrounding text].
-.TL
-.b .)q
-.DE
-End major quote.
-.TL
-.b .(b
-.i m
-.i f
-.DE
-Begin block.
-Blocks are a form of
-.i keep ,
-where the text of a keep
-is kept together on one page
-if possible
-(keeps are useful
-for tables and figures
-which should not be broken
-over a page).
-If the block will not fit
-on the current page
-a new page is begun,
-.i unless
-that would leave more than
-.NR (bt
-[0]
-white space
-at the bottom of the text.
-If
-.NR (bt
-is zero, the threshold feature
-is turned off.
-Blocks are not filled
-unless
-.i f
-is
-.b F ,
-when they are filled.
-The block will be left-justified
-if
-.i m
-is
-.b L ,
-indented by
-.NR (bi
-[4m]
-if
-.i m
-is
-.b I
-or absent,
-centered
-(line-for-line)
-if
-.i m
-is
-.b C ,
-and left justified to the margin
-(not to the base indent)
-if
-.i m
-is
-.b M .
-The block is set in font
-.NR (df
-[0].
-.TL
-.b .)b
-.DE
-End block.
-.TL
-.b .(z
-.i m
-.i f
-.DE
-Begin floating keep.
-Like
-.b .(b
-except that the keep is
-.i floated
-to the bottom of the page
-or the top of the next page.
-Therefore,
-its position relative to the text changes.
-The floating keep is preceded and followed
-by
-.NR (zs
-[1v]
-space.
-Also,
-it defaults to mode
-.b M .
-.TL
-.b .)z
-.DE
-End floating keep.
-.TL
-.b .(c
-.DE
-Begin centered block.
-The next keep
-is centered as a block,
-rather than on a line-by-line basis
-as with
-.b ".(b C" .
-This call may be nested
-inside keeps.
-.TL
-.b .)c
-.DE
-End centered block.
-.sh 1 Annotations
-.TL
-.b .(d
-.DE
-Begin delayed text.
-Everything in the next keep
-is saved for output
-later with
-.b .pd ,
-in a manner
-similar to footnotes.
-.TL
-.b .)d
-.i n
-.DE
-End delayed text.
-The delayed text number register
-.NR ($d
-and the associated string
-.ST #
-are incremented if
-.ST #
-has been referenced.
-.TL
-.b .pd
-.DE
-Print delayed text.
-Everything diverted via
-.b .(d
-is printed and truncated.
-This might be used
-at the end of each chapter.
-.TL
-.b .(f
-.DE
-Begin footnote.
-The text of the footnote
-is floated to the bottom
-of the page
-and set in font
-.NR (ff
-[1]
-and size
-.NR (fp
-[8p].
-Each entry
-is preceded by
-.NR (fs
-[0.2v]
-space,
-is indented
-.NR (fi
-[3n]
-on the first line,
-and is indented
-.NR (fu
-[0]
-from the right margin.
-Footnotes line up underneath
-two column output.
-If the text of the footnote
-will not all fit on one page
-it will be carried over
-to the next page.
-.TL
-.b .)f
-.i n
-.DE
-End footnote.
-The number register
-.NR ($f
-and the associated string
-.ST *
-are incremented
-if they have been referenced.
-.TL
-.b .$s
-.DE
-The macro to output the footnote separator.
-This macro may be redefined
-to give other size lines or other types
-of separators.
-Currently
-it draws a 1.5i line.
-.TL
-.b .(x
-.i x
-.DE
-Begin index entry.
-Index entries are saved in the index
-.i x
-[\c
-.b x ]
-until called up with
-.b .xp.
-Each entry is preceded
-by a
-.NR (xs
-[0.2v]
-space.
-Each entry is
-.q undented
-by
-.NR (xu
-[0.5i];
-this register tells how far the page number
-extends into the right margin.
-.TL
-.b .)x
-.i P
-.i A
-.DE
-End index entry.
-The index entry
-is finished with a row of dots
-with
-.i A
-[null]
-right justified on the last line
-(such as for an author's name),
-followed by P
-[\c
-.NR % ].
-If
-.i A
-is specified,
-.i P
-must be specified;
-.NR %
-can be used to print the current page number.
-If
-.i P
-is an underscore,
-no page number
-and no row of dots
-are printed.
-.TL
-.b .xp
-.i x
-.DE
-Print index
-.i x
-[\c
-.b x ].
-The index is formatted in the font, size, and so forth
-in effect at the time it is printed,
-rather than at the time it is collected.
-.sh 1 "Columned Output"
-.TL
-.b .2c
-.i +S
-.i N
-.DE
-Enter two-column mode.
-The column separation is set to
-.i +S
-[4n, 0.5i in ACM mode]
-(saved in
-.NR ($s ).
-The column width,
-calculated to fill the single column line length
-with both columns,
-is stored in
-.NR ($l .
-The current column
-is in
-.NR ($c .
-You can test register
-.NR ($m
-[1]
-to see if you are in single column
-or double column mode.
-Actually,
-the request enters
-.i N
-[2]
-column output.
-.TL
-.b .1c
-.DE
-Revert to single-column mode.
-.TL
-.b .bc
-.DE
-Begin column.
-This is like
-.b .bp
-except that it begins a new column
-on a new page
-only if necessary,
-rather than forcing a whole new page
-if there is another column left
-on the current page.
-.sh 1 "Fonts and Sizes"
-.TL
-.b .sz
-.i +P
-.DE
-The pointsize is set to
-.i P
-[10p],
-and the line spacing is set proportionally.
-The line spacing as a percentage of the pointsize expressed in units
-is stored in
-.NR ($v .
-The percentage used internally
-by displays and annotations
-is stored in
-.NR ($V
-(although this is not used by
-.b .sz ).
-This size is
-.i not
-sticky beyond many macros:
-in particular,
-.NR (pp
-(paragraph pointsize)
-modifies the pointsize every time a new paragraph is begun
-using the
-.b \&.pp ,
-.b \&.lp ,
-.b \&.ip ,
-.b \&.np ,
-or
-.b \&.bu
-macros.
-Also,
-.NR (fp
-(footnote pointsize),
-.NR (qp
-(quote pointsize),
-.NR (sp
-(section header pointsize),
-and
-.NR (tp
-(title pointsize)
-may modify the pointsize.
-.TL
-.b .r
-.i W
-.i X
-.DE
-Set
-.i W
-in roman font,
-appending
-.i X
-in the previous font.
-To append different font requests,
-use
-.i X
-=
-.b \ec .
-If no parameters,
-change to roman font.
-.TL
-.b .i
-.i W
-.i X
-.DE
-Set
-.i W
-in italics,
-appending
-.i X
-in the previous font.
-If no parameters,
-change to italic font.
-.TL
-.b .b
-.i W
-.i X
-.DE
-Set
-.i W
-in bold font
-and append
-.i X
-in the previous font.
-If no parameters,
-switch to bold font.
-.TL
-.b .u
-.i W
-.i X
-.DE
-Underline
-.i W
-and append
-.i X .
-This is a true underlining,
-as opposed to the
-.b .ul
-request,
-which changes to
-.q "underline font"
-(usually italics in \*G).
-It won't work right
-if
-.i W
-is spread or broken (including hyphenated).
-In other words,
-it is safe in nofill mode only.
-.TL
-.b .q
-.i W
-.i X
-.DE
-Quote
-.i W
-and append
-.i X .
-In \*G
-this surrounds
-.i W
-with
-.b \*(lq ,
-and
-.b \*(rq .
-.TL
-.b .bi
-.i W
-.i X
-.DE
-Set
-.i W
-in bold italics
-and append
-.i X .
-.TL
-.b .bx
-.i W
-.i X
-.DE
-Sets
-.i W
-in a box,
-with
-.i X
-appended.
-It won't work right
-if
-.i W
-is spread or broken (including hyphenated).
-In other words,
-it is safe in nofill mode only.
-.TL
-.b .sm
-.i W
-.i X
-.DE
-Sets
-.i W
-in a smaller pointsize,
-with
-.i X
-appended.
-.sh 1 "Roff Support"
-.TL
-.b .ix
-.i +N
-.DE
-Indent,
-no break.
-Equivalent to
-.b \(aain
-.i N .
-.TL
-.b .bl
-.i N
-.DE
-Leave
-.i N
-contiguous white space,
-on the next page if not enough room
-on this page.
-Equivalent to a
-.b .sp
-.i N
-inside a block.
-.TL
-.b .pa
-.i +N
-.DE
-Equivalent to
-.b .bp .
-.TL
-.b .ro
-.DE
-Set page number
-in roman numerals.
-Equivalent to
-.b ".af % i" .
-.TL
-.b .ar
-.DE
-Set page number in Arabic.
-Equivalent to
-.b ".af % 1" .
-.TL
-.b .n1
-.DE
-Number lines in margin from one
-on each page.
-.TL
-.b .n2
-.i N
-.DE
-Number lines from
-.i N ,
-stop if
-.i N
-= 0.
-.TL
-.b .sk
-.DE
-Leave the next output page blank,
-except for headers and footers.
-This is used to leave space
-for a full-page diagram
-which is produced externally
-and pasted in later.
-To get a partial-page paste-in display,
-say
-.b .sv \ \c
-.i N ,
-where
-.i N
-is the amount of space
-to leave;
-this space will be output immediately
-if there is room,
-and will otherwise be output
-at the top of the next page.
-However, be warned:
-if
-.i N
-is greater than the amount of available space
-on an empty page,
-no space will ever be output.
-.sh 1 "Preprocessor Support"
-.TL
-.b .EQ
-.i m
-.i T
-.DE
-Begin equation.
-The equation is centered
-if
-.i m
-is
-.b C
-or omitted,
-indented
-.NR (bi
-[4m]
-if
-.i m
-is
-.b I ,
-and left justified if
-.i m
-is
-.b L .
-.i T
-is a title printed on the right margin
-next to the equation.
-See
-.i "Typesetting Mathematics \- User's Guide"
-by Brian W. Kernighan
-and Lorinda L. Cherry.
-.TL
-.b .EN
-.i c
-.DE
-End equation.
-If
-.i c
-is
-.b C
-the equation must be continued
-by immediately following
-with another
-.b .EQ ,
-the text of which
-can be centered
-along with this one.
-Otherwise,
-the equation is printed,
-always on one page,
-with
-.NR (es
-[0.5v]
-space
-above and below it.
-.TL
-.b .TS
-.i h
-.DE
-Table start.
-Tables are single spaced
-and kept on one page
-if possible.
-If you have a large table
-which will not fit on one page,
-use
-.i h
-=
-.b H
-and follow the header part
-(to be printed on every page of the table)
-with a
-.b .TH .
-See
-.i "Tbl \- A Program to Format Tables"
-by M. E. Lesk.
-.TL
-.b .TH
-.DE
-With
-.b ".TS H" ,
-ends the header portion of the table.
-.TL
-.b .TE
-.DE
-Table end.
-Note that this table
-does not float,
-in fact,
-it is not even guaranteed to stay on one page
-if you use requests such as
-.b .sp
-intermixed with the text
-of the table.
-If you want it to float
-(or if you use requests
-inside the table),
-surround the entire table
-(including the
-.b .TS
-and
-.b .TE
-requests)
-with the requests
-.b .(z
-and
-.b .)z .
-.TL
-.b .PS
-.i h
-.i w
-.DE
-Begin
-.i pic
-picture.
-.i H
-is the height and
-.i w
-is the width,
-both in basic units.
-.TL
-.b .PE
-.DE
-End picture.
-.TL
-.b .IS
-.DE
-Begin
-.i ideal
-picture.
-.TL
-.b .IE
-.DE
-End
-.i ideal
-picture.
-.TL
-.b .IF
-.DE
-End
-.i ideal
-picture (alternate form).
-.TL
-.b .GS
-.i x
-.DE
-Begin
-.i gremlin
-picture.
-.i X
-can be either
-.b C ,
-.b L ,
-or
-.b R
-to center, left, or right justify the
-whole picture.
-Default is centering the image.
-.TL
-.b .GE
-.DE
-End
-.i gremlin
-picture.
-.TL
-.b .GF
-.DE
-End
-.i gremlin
-picture (alternate form).
-.sh 1 "Miscellaneous"
-.TL
-.b .re
-.DE
-Reset tabs every 0.5i.
-.TL
-.b .ba
-.i +N
-.DE
-Set the base indent
-to
-.i +N
-[0]
-(saved in
-.NR ($i ).
-All paragraphs,
-sections,
-and displays
-come out indented by this amount.
-Titles and footnotes
-are unaffected.
-The
-.b .sh
-request performs a
-.b .ba
-request
-if
-.NR (si
-[0] is not zero,
-and sets the base indent to
-.NR (si \c
-.b * \c
-.NR ($0 .
-.TL
-.b .xl
-.i +N
-.DE
-Set the line length to
-.i N
-[6.0i].
-This differs
-from
-.b .ll
-because it only affects the current environment.
-.TL
-.b .ll
-.i +N
-.DE
-Set line length in all environments
-to
-.i N
-[6.0i].
-This should not be used
-after output has begun,
-and particularly not in two-column output.
-The current line length is stored in
-.NR ($l .
-.TL
-.b .hl
-.DE
-Draws a horizontal line
-the length of the page.
-This is useful
-inside floating keeps
-to differentiate
-between the text
-and the figure.
-.sh 1 "Standard Papers"
-.TL
-.b .tp
-.DE
-Begin title page.
-Spacing at the top of the page
-can occur,
-and headers and footers are suppressed.
-Also,
-the page number
-is not incremented
-for this page.
-.TL
-.b .++
-.i m
-.i H
-.DE
-This request defines the section of the paper
-which we are entering.
-The section type is defined by
-.i m .
-.b C
-means that we are entering the chapter portion
-of the paper,
-.b A
-means that we are entering the appendix portion
-of the paper,
-.b P
-means that the material following
-should be the preliminary portion
-(abstract, table of contents, etc.)
-portion of the paper,
-.b AB
-means that we are entering the abstract
-(numbered independently from 1
-in Arabic numerals),
-and
-.b B
-means that we are entering the bibliographic
-portion at the end of the paper.
-Also, the variants
-.b RC
-and
-.b RA
-are allowed,
-which specify renumbering of pages
-from one at the beginning of each
-chapter or appendix,
-respectively.
-The section type is available in register
-.NR (_M
-[1]; value 1 is equivalent to type
-.b C
-or
-.b RC ,
-value 2 represents type
-.b A
-or
-.b RA ,
-and values 3 to 5 are type
-.b P ,
-.b B ,
-and
-.b AB ,
-respectively.
-The
-.i H
-parameter defines the new header.
-If there are any spaces in it,
-the entire header must be quoted.
-If you want the header to have the chapter number
-in it,
-Use the string
-.b "\e\e\e\en(ch" .
-For example, to number appendixes
-.b A.1
-etc.,
-type
-.b ".++ RA \(aa\(aa\(aa\e\e\e\en(ch.%\(aa" .
-Each section
-(chapter, appendix, etc.)
-should be preceded by the
-.b .+c
-request.
-It should be mentioned
-that it is easier when using
-\*T to put the front material
-at the end of the paper,
-so that the table of contents
-can be collected and put out;
-this material can then be physically
-moved to the beginning of the paper.
-.TL
-.b .+c
-.i T
-.DE
-Begin chapter with title
-.i T .
-The chapter number
-is maintained in
-.NR (ch .
-This register is incremented
-every time
-.b .+c
-is called with a parameter.
-The title and chapter number
-are printed by
-.b .$c .
-The header is moved to the footer
-on the first page
-of each chapter.
-If
-.i T
-is omitted,
-.b .$c
-is not called;
-this is useful for doing your own
-.q "title page"
-at the beginning of papers
-without a title page proper.
-.b .$c
-calls
-.b .$C
-as a hook so that chapter titles can be inserted
-into a table of contents automatically.
-The footnote numbering is reset to one.
-.TL
-.b .$c
-.i T
-.DE
-Print chapter number
-(from
-.NR (ch )
-and
-.i T .
-This macro can be redefined to your liking.
-It is defined by default
-to be acceptable
-for a PhD thesis
-at Berkeley.
-This macro calls
-.b $C ,
-which can be defined to make index entries,
-or whatever.
-.TL
-.b .$C
-.i K
-.i N
-.i T
-.DE
-This macro is called by
-.b .$c .
-It is normally undefined,
-but can be used to automatically insert
-index entries,
-or whatever.
-.i K
-is a keyword,
-either
-.q Chapter
-or
-.q Appendix
-(depending on the
-.b .++
-mode);
-.i N
-is the chapter or appendix number,
-and
-.i T
-is the chapter or appendix title.
-.sh 1 "Predefined Strings"
-.TL
-.ST *
-.DE
-Footnote number, actually
-.ST [ \c
-.NR ($f \c
-.ST ] .
-This macro is incremented
-after each call to
-.b .)f .
-.TL
-.ST #
-.DE
-Delayed text number.
-Actually
-[\c
-.NR ($d ].
-.TL
-.ST {
-.DE
-Superscript.
-This string gives upward movement
-and a change to a smaller point size.
-Extra space is left above the line
-to allow room for the superscript.
-.TL
-.ST }
-.DE
-Unsuperscript.
-Inverse to
-.ST { .
-For example,
-to produce a superscript
-you might type
-.b x \c
-.ST { \c
-.b 2 \c
-.ST } ,
-which will produce
-.b x\*{2\*} .
-.TL
-.ST <
-.DE
-Subscript.
-Extra space is left below the line
-to allow for the subscript.
-.TL
-.ST >
-.DE
-Inverse to
-.ST < .
-.TL
-.ST (dw
-.DE
-The day of the week,
-as a word.
-.TL
-.ST (mo
-.DE
-The month,
-as a word.
-.TL
-.ST (td
-.DE
-Today's date,
-directly printable.
-The date is of the form February 15, 2003.
-Other forms of the date can be used
-by using
-.NR (dy
-(the day of the month;
-for example, 15),
-.ST (mo
-(as noted above)
-or
-.NR (mo
-(the same,
-but as an ordinal number;
-for example, February is 2),
-.NR (y4
-(the current year),
-and
-.NR (y2
-(the last two digits of the current year).
-.TL
-.ST (lq
-.DE
-Left quote marks.
-.TL
-.ST (rq
-.DE
-Right quote.
-.TL
-.ST \-
-.DE
-.ie \w'\(34'>0 \(34
-.el 3/4
-em dash.
-.sh 1 "Special Characters and Marks"
-.pp
-There are a number of special characters
-and diacritical marks
-(such as accents)
-available through \-me.
-.ta 15 +5 +6
-.nf
-Name Usage Example
-Acute accent \e*\(aa a\e*\(aa a\*'
-Grave accent \e*\(ga e\e*\(ga e\*`
-Umlaut \e*: u\e*: u\*:
-Tilde \e*~ n\e*~ n\*~
-Caret \e*^ e\e*^ e\*^
-Cedilla \e*, c\e*, c\*,
-Czech \e*v e\e*v e\*v
-Circle \e*o A\e*o A\*o
-There exists \e*(qe \*(qe
-For all \e*(qa \*(qa
-.fi
-.sp 1i
-.b Acknowledgments
-.pp
-I would like to thank
-Bob Epstein,
-Bill Joy,
-and Larry Rowe
-for having the courage
-to use the \-me macros
-to produce non-trivial papers
-during the development stages;
-Ricki Blau,
-Pamela Humphrey,
-and Jim Joyce
-for their help with the documentation phase;
-peter kessler
-for numerous complaints,
-most accompanied by fixes;
-and the plethora of people who have contributed ideas
-and have given support for the project.
-.bp
-.b Summary
-.pp
-This alphabetical list summarizes all macros, strings, and number registers
-available in the \-me macros.
-Selected
-.i troff
-commands, registers, and functions are included as well;
-those listed can generally be used with impunity.
-.pp
-The columns are the name of the
-command, macro, register, or string;
-the type of the object,
-and the description.
-Types are
-.b M
-for macro or builtin command
-(invoked with
-.b \&.
-or
-.b \&\'
-in the first input column),
-.b S
-for a string
-(invoked with
-.b \e*
-or
-.b \e*( ),
-.b R
-for a number register
-(invoked with
-.b \en
-or
-.b \en( ),
-and
-.b F
-for a
-.i troff
-builtin function
-(invoked by preceding it with a single backslash).
-.pp
-Lines marked with \(sc are
-.i troff
-internal codes.
-Lines marked with \(dg or \(dd
-may be defined by the user to get special functions;
-\(dd indicates that these are defined by default
-and changing them may have unexpected side effects.
-Lines marked with \(de
-are specific to
-.i ditroff
-(device-independent
-.i troff ).
-.de $H
-.ev 1
-.ta \w'\e(space)\(sc\ 'u +\w'TYPE 'u
-NAME TYPE DESCRIPTION
-.ev
-..
-.(l
-.$H
-\e(space) F\(sc unpaddable space
-\e" F\(sc comment (to end of line)
-\e*# S optional delayed text tag string
-\e$\fI\&N\fP F\(sc interpolate argument \fI\&N\fP
-\en($0 R section depth
-\&.$0 M\(dg invoked after section title printed
-\en($1 R first section number
-\&.$1 M\(dg invoked before printing depth 1 section
-\en($2 R second section number
-\&.$2 M\(dg invoked before printing depth 2 section
-\en($3 R third section number
-\&.$3 M\(dg invoked before printing depth 3 section
-\en($4 R fourth section number
-\&.$4 M\(dg invoked before printing depth 4 section
-\en($5 R fifth section number
-\&.$5 M\(dg invoked before printing depth 5 section
-\en($6 R sixth section number
-\&.$6 M\(dg invoked before printing depth 6 section
-\&.$C M\(dg called at beginning of chapter
-\&.$H M\(dg text header
-\en($V R\(dd relative vertical spacing in displays
-\en($c R current column number
-\&.$c M\(dd print chapter title
-\en($d R delayed text number
-\en($f R footnote number
-\&.$f M\(dd print footer
-\&.$h M\(dd print header
-\en($i R paragraph base indent
-\en($l R column width
-\en($m R number of columns in effect
-\e*($n S section name
-\en($p R numbered paragraph number
-\&.$p M\(dd print section heading (internal macro)
-\en($s R column indent
-\&.$s M\(dd footnote separator (from text)
-\en($v R\(dd relative vertical spacing in text
-\en% R\(sc current page number
-\e& F\(sc zero width character, useful for hiding controls
-\e(\fI\&xx\fP F\(sc interpolate special character \fI\&xx\fP
-\&.(b M begin block
-\&.(c M begin centered block
-\&.(d M begin delayed text
-\&.(f M begin footnote
-\&.(l M begin list
-\&.(q M begin quote
-\&.(x M begin index entry
-\&.(z M begin floating keep
-\&.)b M end block
-\&.)c M end centered block
-\&.)d M end delayed text
-\&.)f M end footnote
-\&.)l M end list
-\&.)q M end quote
-\&.)x M end index entry
-\&.)z M end floating keep
-\e*\fI\&x\fP F\(sc interpolate string \fI\&x\fP
-\e*(\fI\&xx\fP F\(sc interpolate string \fI\&xx\fP
-\e** S optional footnote tag string
-\&.++ M set paper section type
-\&.+c M begin chapter
-\e*, S cedilla
-\e\- F\(sc minus sign
-\e*\- S 3/4 em dash
-\e0 F\(sc unpaddable digit-width space
-\&.1c M revert to single column output
-\&.2c M begin two column output
-\e*: S umlaut
-\e*< S begin subscript
-\e*> S end subscript
-\&.EN M end equation
-\&.EQ M begin equation
-\eL\'\fI\&d\fP\' F\(sc vertical line drawing function for distance \fI\&d\fP
-\&.GE M\(de end \fIgremlin\fP picture
-\&.GF M\(de end \fIgremlin\fP picture (with flyback)
-\&.GS M\(de start \fIgremlin\fP picture
-\&.IE M\(de end \fIideal\fP picture
-\&.IF M\(de end \fIideal\fP picture (with flyback)
-\&.IS M\(de start \fIideal\fP picture
-\&.PE M\(de end \fIpic\fP picture
-\&.PF M\(de end \fIpic\fP picture (with flyback)
-\&.PS M\(de start \fIpic\fP picture
-\&.TE M end table
-\&.TH M end header of table
-\&.TS M begin table
-\e*{ S begin superscript
-\en(\&.$ R\(sc number of arguments to macro
-\en(\&.i R\(sc current indent
-\en(\&.l R\(sc current line length
-\en(\&.s R\(sc current point size
-\e*(\&\' S acute accent
-\e*(\&\` S grave accent
-\e(\' F\(sc acute accent
-\e(\` F\(sc grave accent
-\e*} S end superscript
-\e^ F\(sc 1/12 em narrow space
-\e*^ S caret
-\&.ad M\(sc set text adjustment
-\&.af M\(sc assign format to register
-\&.am M\(sc append to macro
-\&.ar M set page numbers in Arabic
-\&.as M\(sc append to string
-\&.b M bold font
-\&.ba M set base indent
-\&.bc M begin new column
-\&.bi M bold italic
-\en(bi R display (block) indent
-\&.bl M blank lines (even at top of page)
-\en(bm R bottom title margin
-\&.bp M\(sc begin page
-\&.br M\(sc break (start new line)
-\en(bs R display (block) pre/post spacing
-\en(bt R block keep threshold
-\&.bx M boxed
-\ec F\(sc continue input
-\&.ce M\(sc center lines
-\en(ch R current chapter number
-\&.de M\(sc define macro
-\en(df R display font
-\&.ds M\(sc define string
-\en(dw R\(sc current day of week
-\e*(dw S current day of week
-\en(dy R\(sc day of month
-\ee F\(sc printable version of \e
-\&.ef M set footer (even numbered pages only)
-\&.eh M set header (even numbered pages only)
-\&.el M\(sc else part of conditional
-\&.ep M end page
-\en(es R equation pre/post space
-\ef\fI\&f\fP F\(sc inline font change to font \fI\&f\fP
-\ef(\fI\&ff\fP F\(sc inline font change to font \fI\&ff\fP
-\&.fc M\(sc set field characters
-\en(ff R footnote font
-\&.fi M\(sc fill output lines
-\en(fi R footnote indent (first line only)
-\en(fm R footer margin
-\&.fo M set footer
-\en(fp R footnote pointsize
-\en(fs R footnote prespace
-\en(fu R footnote undent (from right margin)
-\eh\'\fI\&d\fP\' F\(sc local horizontal motion for distance \fI\&d\fP
-\&.hc M\(sc set hyphenation character
-\&.he M set header
-\&.hl M draw horizontal line
-\en(hm R header margin
-\&.hx M suppress headers and footers on next page
-\&.hy M\(sc set hyphenation mode
-\&.i M italic font
-\&.ie M\(sc conditional with else
-\&.if M\(sc conditional
-\en(ii R indented paragraph indent
-\&.in M\(sc indent (transient, use .ba for pervasive)
-\&.ip M begin indented paragraph
-\&.ix M indent, no break
-\el\'\fI\&d\fP\' F\(sc horizontal line drawing function for distance \fI\&d\fP
-\&.lc M\(sc set leader repetition character
-\&.ll M set line length
-\&.lp M begin left justified paragraph
-\e*(lq S left quote marks
-\&.ls M\(sc set multi-line spacing
-\&.m1 M set space from top of page to header
-\&.m2 M set space from header to text
-\&.m3 M set space from text to footer
-\&.m4 M set space from footer to bottom of page
-\&.mc M\(sc insert margin character
-\&.mk M\(sc mark vertical position
-\en(mo R\(sc month of year
-\e*(mo S current month
-\en\fI\&x\fP F\(sc interpolate number register \fI\&x\fP
-\en(\fI\&xx\fP F\(sc interpolate number register \fI\&xx\fP
-\&.n1 M number lines in margin
-\&.n2 M number lines in margin
-\&.na M\(sc turn off text adjustment
-\&.ne M\(sc need vertical space
-\&.nf M\(sc don't fill output lines
-\&.nh M\(sc turn off hyphenation
-\&.np M begin numbered paragraph
-\&.nr M\(sc set number register
-\&.ns M\(sc no space mode
-\e*o S circle (e.g., for Norse A\*o)
-\&.of M set footer (odd numbered pages only)
-\&.oh M set header (odd numbered pages only)
-\&.pa M begin page
-\&.pd M print delayed text
-\en(pf R paragraph font
-\en(pi R paragraph indent
-\&.pl M\(sc set page length
-\&.pn M\(sc set next page number
-\&.po M\(sc page offset
-\en(po R simulated page offset
-\&.pp M begin paragraph
-\en(pp R paragraph pointsize
-\en(ps R paragraph prespace
-\&.q M quoted
-\e*(qa S for all
-\e*(qe S there exists
-\en(qi R quote indent (also shortens line)
-\en(qp R quote pointsize
-\en(qs R quote pre/post space
-\&.r M roman font
-\&.rb M real bold font
-\&.re M reset tabs
-\&.rm M\(sc remove macro or string
-\&.rn M\(sc rename macro or string
-\&.ro M set page numbers in roman
-\e*(rq S right quote marks
-\&.rr M\(sc remove register
-\&.rs M\(sc restore spacing
-\&.rt M\(sc return to vertical position
-\es\fI\&S\fP F\(sc inline size change to size \fI\&S\fP
-\en(sf R section title font
-\&.sh M begin numbered section
-\en(si R relative base indent per section depth
-\&.sk M skip next page
-\&.sm M set argument in a smaller pointsize
-\&.so M\(sc source input file
-\en(so R additional section title offset
-\&.sp M\(sc vertical space
-\en(sp R section title pointsize
-\en(ss R section prespace
-\&.sx M change section depth
-\&.sz M set pointsize and vertical spacing
-\&.ta M\(sc set tab stops
-\&.tc M\(sc set tab repetition character
-\e*(td S today's date
-\en(tf R title font
-\&.ti M\(sc temporary indent (next line only)
-\&.tl M\(sc three part title
-\en(tm R top title margin
-\&.tp M begin title page
-\en(tp R title pointsize
-\&.tr M\(sc translate
-\&.u M underlined
-\&.uh M unnumbered section
-\&.ul M\(sc underline next line
-\ev\'\fI\&d\fP\' F\(sc local vertical motion for distance \fI\&d\fP
-\e*v S inverted `v' for czeck ``e\*v''
-\ew\'\fI\&S\fP\' F\(sc return width of string \fI\&S\fP
-\&.xl M set line length (local)
-\&.xp M print index
-\en(xs R index entry prespace
-\en(xu R index undent (from right margin)
-\en(y2 R year (last two digits only)
-\en(y4 R year (all digits)
-\en(yr R\(sc year minus 1900
-\en(zs R floating keep pre/post space
-\e{ F\(sc begin conditional group
-\e| F\(sc 1/6 em narrow space
-\e} F\(sc end conditional group
-\e*~ S tilde
-\en(_M R section type (as set with .++ macro)
-.)l
-.rm $H
diff --git a/contrib/groff/doc/pic.ms b/contrib/groff/doc/pic.ms
deleted file mode 100644
index 6c6b66a5b599..000000000000
--- a/contrib/groff/doc/pic.ms
+++ /dev/null
@@ -1,2982 +0,0 @@
-.\" For tolerably obvious reason, this needs to be processed through PIC.
-.\" It also needs to be processed through TBL and EQN. Use "groff -p -e -t".
-.\" There is no hope that this will ever look right under nroff.
-.\"
-.\" Comments beginning with %% are cut lines so portions of this
-.\" document can be automatically extracted. %%TUTORIAL%% begins the
-.\" tutorial part; %%REFERENCE%% the reference part. %%POSTLUDE%% the
-.\" bibliography and end matter after the reference part.
-.\"
-.\" This document was written for free use and redistribution by
-.\" Eric S. Raymond <esr@thyrsus.com> in August 1995.
-.\"
-.\" $Id: pic.ms,v 1.29 2005/04/27 20:52:34 wl Exp $
-.\"
-.\" Set a proper TeX and LaTeX
-.ie t \{\
-. ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X\"
-. ds lx L\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\*(tx\"
-.\}
-.el \{\
-. ds tx TeX\"
-. ds lx LaTeX\"
-.\}
-.\"
-.de CE\" Centered caption for figure. Assumes previous .KS
-.ce 1
-Figure \\n(H1-\\$1
-.sp 1
-.KE
-..
-.\" Definitions end here
-.TL
-Making Pictures With GNU PIC
-.AU
-Eric S. Raymond
-.AI
-\[la]\fIesr@snark.thyrsus.com\fP\[ra]
-.AB
-The \fBpic\fP language is a \fBtroff\fP extension that makes it easy
-to create and alter box-and-arrow diagrams of the kind frequently used
-in technical papers and textbooks. This paper is both an introduction
-to and reference for \fIgpic\/\fP(1), the implementation distributed by
-the Free Software Foundation for use with \fIgroff\/\fP(1).
-.AE
-.\"%%TUTORIAL%%
-.
-.
-.NH 1
-Introduction to PIC
-.
-.NH 2
-Why PIC?
-.PP
-The \fBpic\fP language provides an easy way to write procedural
-box-and-arrow diagrams to be included in \fBtroff\fP documents. The
-language is sufficiently flexible to be quite useful for state charts,
-Petri-net diagrams, flow charts, simple circuit schematics, jumper
-layouts, and other kinds of illustration involving repetitive uses of
-simple geometric forms and splines. Because these descriptions are
-procedural and object-based, they are both compact and easy to modify.
-.PP
-The \fIgpic\/\fP(1) implementation of \fBpic\fP is distributed by the
-Free Software Foundation for use with their \fIgroff\/\fP(1)
-implementation of \fBtroff\fP. Because both implementations are
-widely available in source form for free, they are good bets for
-writing very portable documentation.
-.
-.NH 2
-PIC Versions
-.PP
-The original 1984 pre-\fIditroff\/\fP(1) version of \fBpic\fP is long
-obsolete. The rewritten 1991 version is still available as part of
-the Documenter's Work Bench module of System V.
-.PP
-Where differences between Documenter's Work Bench (1991) \fBpic\fP and GNU
-\fBpic\fP need to be described, original \fBpic\fP is referred to as
-\[lq]DWB pic\[rq]. Details on the history of the program are given at the
-end of this document.
-.PP
-In this document, the \fIgpic\/\fP(1) extensions will be marked as such.
-.
-.
-.NH 1
-Invoking PIC
-.PP
-Every \fBpic\fP description is a little program, which gets compiled
-by \fIpic\/\fP(1) into \fIgtroff\/\fP(1) macros. Programs that process or
-display \fIgtroff\/\fP(1) output need not know or care that parts of the
-image began life as \fBpic\fP descriptions.
-.PP
-The \fIpic\/\fP(1) program tries to translate anything between \fB.PS\fP
-and \fB.PE\fP markers, and passes through everything else. The normal
-definitions of \fB.PS\fP and \fB.PE\fP in the \fIms\fP macro package
-and elsewhere have also the side-effect of centering the \fBpic\fP output
-on the page.
-.
-.NH 2
-PIC Error Messages
-.PP
-If you make a \fBpic\fP syntax error, \fIgpic\/\fP(1) will issue an
-error message in the standard \fIgcc\/\fP(1)-like syntax. A typical
-error message looks like this,
-.KS
-.DS
-.CW
-pic:pic.ms:<nnn>: parse error before `<token>'
-pic:pic.ms:<nnn>: giving up on this picture
-.DE
-.R
-.KE
-.LP
-where \[la]nnn\[ra] is a line number, and \[la]token\[ra] is a token near (usually
-just after) the error location.
-.
-.
-.NH 1
-Basic PIC Concepts
-.PP
-Pictures are described procedurally, as collections of objects
-connected by motions. Normally, \fBpic\fP tries to string together
-objects left-to-right in the sequence they are described, joining them
-at visually natural points. Here is an example illustrating the
-flow of data in \fBpic\fP processing:
-.KS
-.PS
-ellipse "document";
-arrow;
-box width 0.6 "\fIgpic\/\fP(1)"
-arrow;
-box width 1.1 "\fIgtbl\/\fP(1) or \fIgeqn\/\fP(1)" "(optional)" dashed;
-arrow;
-box width 0.6 "\fIgtroff\/\fP(1)";
-arrow;
-ellipse "PostScript"
-.PE
-.CE "1: Flow of \fBpic\fP data"
-.PP
-This was produced from the following \fBpic\fP program:
-.KS
-.DS
-.ps -1
-.vs -1
-.CW
-\&.PS
-ellipse "document";
-arrow;
-box width 0.6 "\efIpic\e/\efP(1)"
-arrow;
-box width 1.1 "\efIgtbl\e/\efP(1) or \efIgeqn\e/\efP(1)" "(optional)" dashed;
-arrow;
-box width 0.6 "\efIgtroff\e/\efP(1)";
-arrow;
-ellipse "PostScript"
-\&.PE
-.DE
-.R
-.KE
-.LP
-This little program illustrates several \fBpic\fP basics. Firstly, we
-see how to invoke three object types; ellipses, arrows, and boxes. We
-see how to declare text lines to go within an object (and that text
-can have font changes in it). We see how to change the line style of
-an object from solid to dashed. And we see that a box can be made
-wider than its default size to accommodate more text (we'll discuss
-this facility in detail in the next section).
-.PP
-We also get to see \fBpic\fP's simple syntax. Statements are ended by
-newlines or semicolons. String quotes are required around all text
-arguments, whether or not they contain spaces. In general, the order
-of command arguments and modifiers like \[lq]width 1.2\[rq] or
-\[lq]dashed\[rq] doesn't matter, except that the order of text arguments
-is significant.
-.PP
-Here are all but one of the basic \fBpic\fP objects at their default sizes:
-.KS
-.PS
-box "box";
-move;
-line "line" "";
-move;
-arrow "arrow" "";
-move;
-circle "circle";
-move;
-ellipse "ellipse";
-move;
-arc; down; move; "arc"
-.PE
-.CE "2: Basic \fBpic\fP objects"
-.PP
-The missing simple object type is a \fIspline\fP. There is also a way
-to collect objects into \fIblock composites\fP which allows you to
-treat the whole group as a single object (resembling a box) for many
-purposes. We'll describe both of these later on.
-.PP
-The box, ellipse, circle, and block composite objects are \fIclosed\/\fR;
-lines, arrows, arcs and splines are \fIopen\fP. This distinction
-will often be important in explaining command modifiers.
-.PP
-Figure \n[H1]-2 was produced by the following \fBpic\fP program,
-which introduces some more basic concepts:
-.KS
-.DS
-.CW
-\&.PS
-box "box";
-move;
-line "line" "";
-move;
-arrow "arrow" "";
-move;
-circle "circle";
-move;
-ellipse "ellipse";
-move;
-arc; down; move; "arc"
-\&.PE
-.DE
-.ft R
-.KE
-.PP
-The first thing to notice is the \fImove\fP command, which moves a
-default distance (1/2 inch) in the current movement direction.
-.PP
-Secondly, see how we can also decorate lines and arrows with text.
-The line and arrow commands each take two arguments here, specifying
-text to go above and below the object. If you wonder why one argument
-would not do, contemplate the output of \fBarrow "ow!"\fP:
-.KS
-.PS
-arrow "ow!"
-.PE
-.CE "3: Text centered on an arrow"
-.PP
-When a command takes one text string, \fBpic\fP tries to place it at
-the object's geometric center. As you add more strings, \fBpic\fP
-treats them as a vertical block to be centered. The program
-.KS
-.DS
-.CW
-line "1";
-line "1" "2";
-line "1" "2" "3";
-line "1" "2" "3" "4";
-line "1" "2" "3" "4" "5";
-.DE
-.ft R
-.KE
-.LP
-for example, gives you this:
-.KS
-.sp 2
-.PS
-line "1";
-line "1" "2";
-line "1" "2" "3";
-line "1" "2" "3" "4";
-line "1" "2" "3" "4" "5";
-.PE
-.sp 2
-.CE "4: Effects of multiple text arguments"
-.PP
-The last line of Figure 3.2's program, `\fBarc; down; move;
-"arc"\fP', describing the captioned arc, introduces several new ideas.
-Firstly, we see how to change the direction in which objects are
-joined. Had we written \fBarc; move; "arc"\fP,
-omitting \fBdown\fP the caption would have been joined to the top
-of the arc, like this:
-.KS
-.PS
-arc; move; "arc";
-.PE
-.CE "5: Result of \fBarc; move; \"arc\"\fP"
-.PP
-This is because drawing an arc changes the default direction to the
-one its exit end points at. To reinforce this point, consider:
-.KS
-.PS
-arc cw; move; "arc";
-.PE
-.CE "6: Result of \fBarc cw; move; \"arc\"\fP"
-.PP
-All we've done differently here is specify \[lq]cw\[rq] for a clockwise arc
-(\[lq]ccw\[rq] specifies counter-clockwise direction).
-Observe how it changes the default direction to down, rather than up.
-.PP
-Another good way to see this via with the following program:
-.KS
-.DS
-.CW
-line; arc; arc cw; line
-.DE
-.ft R
-.KE
-.LP
-which yields:
-.KS
-.PS
-line; arc; arc cw; line;
-.PE
-.CE "7: Result of \fBline; arc; arc cw; line\fP"
-.LP
-Notice that we did not have to specify \[lq]up\[rq] for the second arc to be
-joined to the end of the first.
-.PP
-Finally, observe that a string, alone, is treated as text to be
-surrounded by an invisible box of a size either specified by width
-and height attributes or by the defaults \fBtextwid\fR and
-\fBtextht\fR. Both are initially zero (because we don't know the
-default font size).
-.
-.
-.NH 1
-Sizes and Spacing
-.PP
-Sizes are specified in inches. If you don't like inches, it's
-possible to set a global style variable \fBscale\fP that changes the
-unit. Setting \fBscale = 2.54\fP will effectively change the internal
-unit to centimeters (all other size variable values will be scaled
-correspondingly).
-.
-.NH 2
-Default Sizes of Objects
-.PP
-Here are the default sizes for \fBpic\fP objects:
-.TS H
-center, tab(@), linesize(2);
-lb | lb
-l | l.
-.sp 2p
-Object@Default Size
-.sp 2p
-_
-.sp 2p
-.TH
-box@0.75" wide by 0.5" high
-circle@0.5" diameter
-ellipse@0.75" wide by 0.5" high
-arc@0.5" radius
-line@0.5" long
-arrow@0.5" long
-.sp 5p
-_
-.TE
-.PP
-The simplest way to think about these defaults is that they make the
-other basic objects fit snugly into a default-sized box.
-.
-.NH 2
-Objects Do Not Stretch!
-.PP
-Text is rendered in the current font with normal troff line spacing.
-Boxes, circles, and ellipses do \fInot\fP automatically resize to fit
-enclosed text. Thus, if you say \fBbox "this text far too long for a
-default box"\fP you'll get this:
-.KS
-.PS
-box "this text is far too long for a default box"
-.PE
-.CE "1: Boxes do not automatically resize"
-.LP
-which is probably not the effect you want.
-.
-.NH 2
-Resizing Boxes
-.PP
-To change the box size, you can specify a box width with the \[lq]width\[rq]
-modifier:
-.KS
-.PS
-box width 3 "this text is far too long for a default box"
-.PE
-.CE "2: Result of \fBbox width 3 \"text far too long\"\fP"
-.PP
-This modifier takes a dimension in inches. There is also a \[lq]height\[rq]
-modifier that will change a box's height. The \fBwidth\fP keyword may
-be abbreviated to \fBwid\fP; the \fBheight\fP keyword to \fBht\fP.
-.
-.NH 2
-Resizing Other Object Types
-.PP
-To change the size of a circle, give it a \fBrad[ius]\fP or
-\fBdiam[eter]\fP modifier; this changes the radius or diameter of the
-circle, according to the numeric argument that follows.
-.KS
-.PS
-{circle rad 0.1; move down 0.2 from last circle .s; "0.1"};
-move; circle rad 0.2 "0.2"; move; circle rad 0.3 "0.3";
-.PE
-.CE "3: Circles with increasing radii"
-.PP
-The \fBmove\fP command can also take a dimension, which just tells
-it how many inches to move in the current direction.
-.PP
-Ellipses are sized to fit in the rectangular box defined by their
-axes, and can be resized with \fBwidth\fP and \fBheight\fP like boxes.
-.PP
-You can also change the radius of curvature of an arc with \fBrad[ius]\fP
-(which specifies the radius of the circle of which the arc is a segment).
-Larger values yield flatter arcs.
-.KS
-.PS
-{arc rad 0.1; move down 0.3 from last arc .center; "0.1"};
-move;
-{arc rad 0.2; move down 0.4 from last arc .center; "0.2"};
-move;
-{arc rad 0.3; move down 0.5 from last arc .center; "0.3"};
-.PE
-.CE "4: \fBarc rad\fP with increasing radii"
-.PP
-Observe that because an arc is defined as a quarter circle, increasing
-the radius also increases the size of the arc's bounding box.
-.
-.NH 2
-The `same' Keyword
-.PP
-In place of a dimension specification, you can use the keyword
-\fBsame\fR. This gives the object the same size as the previous one
-of its type. As an example, the program
-.KS
-.DS
-.CW
-\&.PS
-box; box wid 1 ht 1; box same; box
-\&.PE
-.R
-.DE
-.KE
-.LP
-gives you
-.KS
-.PS
-box; box wid 1 ht 1; box same; box
-.PE
-.CE "5: The \fBsame\fP keyword"
-.
-.
-.NH 1
-Generalized Lines and Splines
-.
-.NH 2
-Diagonal Lines
-.PP
-It is possible to specify diagonal lines or arrows by adding multiple \fBup\fP,
-\fBdown\fP, \fBleft\fP, and \fBright\fP modifiers to the line object.
-Any of these can have a multiplier. To understand the effects, think
-of the drawing area as being gridded with standard-sized boxes.
-.KS
-.PS
-# Draw a demonstration up left arrow with grid box overlay
-define gridarrow
-{
- move right 0.1
- [
- {arrow up left $1;}
- box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
- for i = 2 to ($1 / 0.5) do {
- box wid 0.5 ht 0.5 dotted with .sw at last box .se;
- }
- move down from last arrow .center;
- [
- if ( $1 == boxht ) then {
- "\fBline up left\fP"
- } else {
- sprintf("\fBarrow up left %g\fP", $1)
- }
- ]
- ]
- move right 0.1 from last [] .e;
-}
-gridarrow(0.5);
-gridarrow(1);
-gridarrow(1.5);
-gridarrow(2);
-undef gridarrow
-.PE
-.CE "1: Diagonal arrows (dotted boxes show the implied 0.5-inch grid)"
-.
-.NH 2
-Multi-Segment Line Objects
-.PP
-A \[lq]line\[rq] or \[lq]arrow\[rq] object may actually be a path
-consisting of any number of segments of varying lengths and directions.
-To describe a path, connect several line or arrow commands with the
-keyword \fBthen\fP.
-.KS
-.PS
-define zigzag { $1 right 1 then down .5 left 1 then right 1 }
-zigzag(line);
-.PE
-.CE "2: \fBline right 1 then down .5 left 1 then right 1\fP"
-.
-.NH 2
-Spline Objects
-.PP
-If you start a path with the \fBspline\fP keyword, the path vertices
-are treated as control points for a spline curve fit.
-.KS
-.PS
-[zigzag(spline);]
-move down 0.2 from last [] .s;
-"The spline curve..."
-move right from last [] .e;
-[
- zigzag(line dashed);
- spline from start of last line right 1 then down .5 left 1 then right 1;
- "1" at last spline .start + (-0.1, 0);
- "2" at last spline .start + (1.1, 0);
- "3" at last spline .end + (-1.1, 0);
- "4" at last spline .end + (0.1, 0);
-]
-move down 0.2 from last [] .s;
-"...with tangents displayed"
-undef zigzag;
-.PE
-.CE "3: \fBspline right 1 then down .5 left 1 then right 1\fP"
-.PP
-You can describe many natural-looking but irregular curves this
-way. For example:
-.KS
-.PS
-[spline right then up then left then down ->;]
-move down 0.2 from last [] .s;
-["\fBspline right then up then left then down ->;\fP"]
-move right 3 from last [] .se;
-"\fBspline left then up right then down right ->;\fP"
-move up 0.2;
-[spline left then up right then down right ->;]
-.PE
-.CE "4: Two more spline examples"
-.LP
-Note the arrow decorations. Arrowheads can be applied naturally to
-any path-based object, line or spline. We'll see how in the next
-section.
-.
-.
-.NH 1
-Decorating Objects
-.
-.NH 2
-Dashed Objects
-.PP
-We've already seen that the modifier \fBdashed\fP can change the line
-style of an object from solid to dashed. GNU \fBgpic\fP permits you to
-dot or dash ellipses, circles, and arcs (and splines in \*[tx] mode
-only); some versions of DWB may only permit dashing of lines and
-boxes. It's possible to change the dash interval by specifying a
-number after the modifier.
-.PP
-.KS
-.PS
-box dashed "default";
-move;
-box dashed 0.05 "0.05";
-move;
-box dashed 0.1 "0.1";
-move;
-box dashed 0.15 "0.15";
-move;
-box dashed 0.2 "0.2";
-.PE
-.CE "1: Dashed objects"
-.
-.NH 2
-Dotted Objects
-.PP
-Another available qualifier is \fBdotted\fP. GNU \fBgpic\fP permits
-you to dot or dash ellipses, circles, and arcs (and splines in \*[tx]
-mode only); some versions of DWB may only permit dashing of lines and
-boxes. It too can be suffixed with a number to specify the interval
-between dots:
-.KS
-.PS
-box dotted "default";
-move;
-box dotted 0.05 "0.05";
-move;
-box dotted 0.1 "0.1";
-move;
-box dotted 0.15 "0.15";
-move;
-box dotted 0.2 "0.2";
-.PE
-.CE "2: Dotted objects"
-.
-.NH 2
-Rounding Box Corners
-.PP
-It is also possible, in GNU \fBgpic\fP only, to modify a box so it has
-rounded corners:
-.KS
-.PS
-box rad 0.05 "rad 0.05";
-move;
-box rad 0.1 "rad 0.1";
-move;
-box rad 0.15 "rad 0.15";
-move;
-box rad 0.2 "rad 0.2";
-move;
-box rad 0.25 "rad 0.25";
-.PE
-.CE "3: \fBbox rad\fP with increasing radius values"
-.PP
-Radius values higher than half the minimum box dimension are silently
-truncated to that value.
-.
-.NH 2
-Arrowheads
-.PP
-Lines and arcs can be decorated as well. Any line or arc (and any
-spline as well) can be decorated with arrowheads by adding one or more
-as modifiers:
-.KS
-.PS
-line <- ->
-.PE
-.CE "4: Double-headed line made with \fBline <- ->\fP"
-.PP
-In fact, the \fBarrow\fP command is just shorthand for \fBline ->\fP. And
-there is a double-head modifier <->, so the figure above could have been made
-with \fBline <->\fP.
-.PP
-Arrowheads have a \fBwidth\fP attribute, the distance across the rear;
-and a \fBheight\fP attribute, the length of the arrowhead along the shaft.
-.PP
-Arrowhead style is controlled by the style variable \fBarrowhead\fP.
-The DWB and GNU versions interpret it differently. DWB defaults to
-open arrowheads and an \fBarrowhead\fP value of\~2; the Kernighan
-paper says a value of\~7 will make solid arrowheads. GNU \fBgpic\fP
-defaults to solid arrowheads and an \fBarrowhead\fP value of\~1; a
-value of\~0 will produce open arrowheads. Note that solid arrowheads are
-always filled with the current outline color.
-.
-.NH 2
-Line Thickness
-.PP
-It's also possible to change the line thickness of an object (this is
-a GNU extension, DWB \fBpic\fP doesn't support it).
-The default thickness of the lines used to draw objects is controlled by the
-.B linethick
-variable.
-This gives the thickness of lines in points.
-A negative value means use the default thickness:
-in \*[tx] output mode, this means use a thickness of 8 milliinches;
-in \*[tx] output mode with the
-.B -c
-option, this means use the line thickness specified by
-.B .ps
-lines; in troff output mode, this means use a thickness proportional
-to the pointsize. A zero value means draw the thinnest possible line
-supported by the output device. Initially it has a value of -1.
-There is also a \fBthickness\fP attribute (which can be abbreviated to
-\fBthick\fP). For example, \fBcircle thickness 1.5\fP would draw a
-circle using a line with a thickness of 1.5 points. The thickness of
-lines is not affected by the value of the
-.B scale
-variable, nor by any width or height given in the
-.B .PS
-line.
-.
-.NH 2
-Invisible Objects
-.PP
-The modifier \fBinvis[ible]\fP makes an object entirely invisible. This
-used to be useful for positioning text in an invisible object that is
-properly joined to neighboring ones. Newer DWB versions and GNU
-\fBpic\fP treat stand-alone text in exactly this way.
-.
-.NH 2
-Filled Objects
-.PP
-It is possible to fill boxes, circles, and ellipses. The
-modifier \fBfill[ed]\fP accomplishes this. You can suffix it with a fill
-value; the default is given by the stule variable \fBfillval\fP.
-.PP
-DWB \fBpic\fP and \fBgpic\fP have opposite conventions for fill values
-and different defaults. DWB \fBfillval\fP defaults to 0.3 and smaller
-values are darker; GNU \fBfillval\fP uses 0 for white and 1 for black.
-.KS
-.PS
-circle fill; move; circle fill 0.4; move; circle fill 0.9;
-.PE
-.CE "5: \fBcircle fill; move; circle fill 0.4; move; circle fill 0.9;\fR"
-.PP
-GNU \fBgpic\fP makes some additional guarantees. A fill value greater
-than 1 can also be used: this means fill with the shade of gray that
-is currently being used for text and lines. Normally this will be
-black, but output devices may provide a mechanism for changing this.
-The invisible attribute does not affect the filling of objects. Any
-text associated with a filled object will be added after the object
-has been filled, so that the text will not be obscured by the filling.
-.PP
-The closed-object modifier \fBsolid\fP is equivalent to \fBfill\fP
-with the darkest fill value (DWB \fBpic\fP had this capability but
-mentioned it only in a reference section).
-.
-.NH 2
-Colored Objects
-.PP
-As a GNU extension, three additional modifiers are available to specify
-colored objects. \fBoutline\fP sets the color of the outline, \fBshaded\fP
-the fill color, and \fBcolor\fP sets both. All three keywords expect a
-suffix specifying the color. Example:
-.KS
-.PS
-box color "yellow"; arrow color "cyan"; circle shaded "green" outline "black";
-.PE
-.CE "6: \fBbox color ""yellow""; arrow color ""cyan""; \
-circle shaded ""green"" outline ""black"";\fR"
-.PP
-Alternative spellings are \fBcolour\fP, \fBcolored\fP, \fBcoloured\fP,
-and \fBoutlined\fP.
-.PP
-Currently, color support is not available in \*[tx] mode. Predefined color
-names for \fIgroff\/\fP(1) are in the device macro files, for example
-\f(CWps.tmac\fP; additional colors can be defined with the \fB.defcolor\fP
-request (see the manual page of GNU \fItroff\/\fP(1) for more details).
-.PP
-\fBpic\fP assumes that at the beginning of a picture both glyph and fill
-color are set to the default value.
-.
-.
-.NH 1
-More About Text Placement
-.PP
-By default, text is centered at the geometric center of the object it is
-associated with. The modifier \fBljust\fP causes the left end to be
-at the specified point (which means that the text lies to the right of
-the specified place!), the modifier \fBrjust\fP puts the right end at
-the place. The modifiers \fBabove\fP and \fBbelow\fP center the text
-one half line space in the given direction.
-.PP
-Text attributes can be combined:
-.KS
-.PS
-[line up "ljust text" ljust;]
-move 1.5;
-[line up "rjust text" rjust;]
-move;
-[arrow 1 "ljust above" ljust above;]
-move;
-[arrow 1 "rjust below" rjust below;]
-.PE
-.CE "1: Text attributes"
-.PP
-What actually happens is that \fIn\fP text strings are centered in a box
-that is \fBtextwid\fP wide by \fBtextht\fP high. Both these variables
-are initially zero (that is \fBpic\fR's way of not making assumptions
-about \fI[tg]roff\/\fP(1)'s default point size).
-.PP
-In GNU \fBgpic\fR, objects can have an
-.B aligned
-attribute.
-This will only work when the postprocessor is
-\fBgrops\fP.
-Any text associated with an object having the
-.B aligned
-attribute will be rotated about the center of the object
-so that it is aligned in the direction from the start point
-to the end point of the object.
-Note that this attribute will have no effect for objects whose start and
-end points are coincident.
-.
-.
-.NH 1
-More About Direction Changes
-.PP
-We've already seen how to change the direction in which objects are
-composed from rightwards to downwards. Here are some more
-illustrative examples:
-.KS
-.PS
-down;
-[
- "\fBright; box; arrow; circle; arrow; ellipse\fP";
- move 0.2;
- [right; box; arrow; circle; arrow; ellipse;]
-]
-move down 0.3 from last [] .s;
-[
- "\fBleft; box; arrow; circle; arrow; ellipse\fP"
- move 0.2;
- [left; box; arrow; circle; arrow; ellipse;]
-]
-# move down 0.3 from last [] .sw;
-# To re-join this illustrations, delete everything from here down to
-# the next #-comment, and uncomment the move line above
-.PE
-.CE "1: Effects of different motion directions (right and left)"
-.KS
-.PS
-# To re-join this illustrations, delete everything down to here, then
-# comment out the next `down' line.
-# Don't forget to re-number the figures following!
-down;
-[
- "\fBdown; box; arrow; circle; arrow; ellipse;\fP"
- move 0.2;
- box; arrow; circle; arrow; ellipse;
-]
-move right 2 from last [] .e;
-[
- up; box; arrow; circle; arrow; ellipse;
- move 0.2;
- "\fBup; box; arrow; circle; arrow; ellipse;\fP"
-]
-.PE
-.CE "2: Effects of different motion directions (up and down)"
-.PP
-Something that may appear surprising happens if you change directions
-in the obvious way:
-.KS
-.PS
-box; arrow; circle; down; arrow; ellipse
-.PE
-.CE "3: \fBbox; arrow; circle; down; arrow; ellipse\fP"
-.LP
-You might have expected that program to yield this:
-.KS
-.PS
-box; arrow; circle; move to last circle .s; down; arrow; ellipse
-.PE
-.CE "4: More intuitive?"
-.LP
-But, in fact, to get Figure \*[SN]3 you have to do this:
-.KS
-.DS
-.CW
-\&.PS
-box;
-arrow;
-circle;
-move to last circle .s;
-down;
-arrow;
-ellipse
-\&.PE
-.R
-.DE
-.KE
-.LP
-Why is this? Because the exit point for the current direction is
-already set when you draw the object. The second arrow in Figure
-\*[SN]2 dropped downwards from the circle's attachment point for an
-object to be joined to the right.
-.PP
-The meaning of the command \fBmove to last circle .s\fP should be obvious.
-In order to see how it generalizes, we'll need to go into detail on two
-important topics; locations and object names.
-.
-.
-.NH 1
-Naming Objects
-.PP
-The most natural way to name locations in \fBpic\fP is relative to
-objects. In order to do this, you have to be able you have to be able
-to name objects. The \fBpic\fP language has rich facilities for this
-that try to emulate the syntax of English.
-.
-.NH 2
-Naming Objects By Order Of Drawing
-.PP
-The simplest (and generally the most useful) way to name an object is
-with a \fBlast\fP clause. It needs to be followed by an object type
-name; \fBbox\fP, \fBcircle\fP, \fBellipse\fP, \fBline\fP, \fBarrow\fP,
-\fBspline\fP, \fB""\fP, or \fB[]\fP (the last type refers to a \fIcomposite
-object\fP which we'll discuss later). So, for example, the \fBlast
-circle\fP clause in the program attached to Figure \*[SN]3 refers to the
-last circle drawn.
-.PP
-More generally, objects of a given type are implicitly numbered
-(starting from\~1). You can refer to (say) the third ellipse in the
-current picture with \fB3rd ellipse\fP, or to the first box as \fB1st
-box\fP, or to the fifth text string (which isn't an attribute to another
-object) as \fB5th ""\fP.
-.PP
-Objects are also numbered backwards by type from the last one.
-You can say \fB2nd last box\fP to get the second-to-last box, or
-\fB3rd last ellipse\fP to get the third-to-last ellipse.
-.PP
-In places where \fIn\/\fBth\fR is allowed, \fB`\fIexpr\/\fB'th\fR is
-also allowed. Note that
-.B 'th
-is a single token: no space is allowed between the
-.B '
-and the \fBth\fP.
-For example,
-.IP
-.KS
-.DS
-.CW
-for i = 1 to 4 do {
- line from `i'th box.nw to `i+1'th box.se
-}
-.DE
-.R
-.KE
-.
-.NH 2
-Naming Objects With Labels
-.PP
-You can also specify an object by referring to a label. A label is a
-word (which must begin with a capital letter) followed by a colon;
-you declare it by placing it immediately before the object drawing command.
-For example, the program
-.KS
-.DS
-.CW
-\&.PS
-A: box "first" "object"
-move;
-B: ellipse "second" "object"
-move;
-arrow right at A .r;
-\&.PE
-.R
-.DE
-.KE
-.LP
-declares labels \fBA\fP and \fBB\fP for its first and second objects.
-Here's what that looks like:
-.KS
-.PS
-A: box "first" "object"
-move;
-B: ellipse "second" "object"
-move;
-arrow right at A .r;
-.PE
-.CE "1: Example of label use"
-The \fBat\fP statement in the fourth line uses the label \fBA\fP (the
-behavior of \fBat\fP will be explained in the next section). We'll
-see later on that labels are most useful for referring to block composite
-objects.
-.PP
-Labels are not constants but variables (you can view colon as a sort
-of assignment). You can say something like \fBA: A + (1,0);\fP
-and the effect will be to reassign the label \fBA\fR to designate a
-position one inch to the right of its old value.
-.
-.
-.NH 1
-Describing locations
-.PP
-The location of points can be described in many different ways. All these
-forms are interchangeable as for as the \fBpic\fP language syntax is
-concerned; where you can use one, any of the others that would make
-semantic sense are allowed.
-.PP
-The special label \fBHere\fR always refers to the current position.
-.
-.NH 2
-Absolute Coordinates
-.PP
-The simplest is absolute coordinates in inches; \fBpic\fP uses a
-Cartesian system with (0,0) at the lower left corner of the virtual
-drawing surface for each picture (that is, X increases to the right
-and Y increases upwards). An absolute location may always be written in the
-conventional form as two comma-separated numbers surrounded by
-parentheses (and this is recommended for clarity). In contexts where
-it creates no ambiguity, the pair of X and Y coordinates suffices
-without parentheses.
-.PP
-It is a good idea to avoid absolute coordinates, however. They tend
-to make picture descriptions difficult to understand and modify.
-Instead, there are quite a number of ways to specify locations
-relative to \fBpic\fP objects and previous locations.
-.PP
-Another possibility of surprise is the fact that \fBpic\fP crops the
-picture to the smallest bounding box before writing it out. For
-example, if you have a picture consisting of a small box with its lower
-left corner at (2,2) and another small box with its upper right corner
-at (5,5), the width and height of the image are both 3\~units and
-not\~5. To get the origin at (0,0) included, simply add an invisible
-object to the picture, positioning the object's left corner at (0,0).
-.
-.NH 2
-Locations Relative to Objects
-.PP
-The symbol \fBHere\fP always refers to the position of the last object
-drawn or the destination of the last \fBmove\fP.
-.PP
-Alone and unqualified, a \fBlast circle\fP or any other way of
-specifying a closed-object or arc location refers as a position to the
-geometric center of the object. Unqualified, the name of a line or
-spline object refers to the position of the object start.
-.PP
-Also, \fBpic\fP objects have quite a few named locations
-associated with them. One of these is the object center, which can be
-indicated (redundantly) with the suffix \fB.center\fP (or just \fB.c\fP).
-Thus, \fBlast circle \&.center\fP is equivalent to \fBlast
-circle\fP.
-.NH 3
-Locations Relative to Closed Objects
-.PP
-Every closed object (box, circle, ellipse, or block composite) also
-has eight compass points associated with it;
-.KS
-.PS
-define dot {circle fill rad 0.02 at $1}
-
-define compass { [
- ME: $1;
- dot(ME.c); "\fB .c\fP" at ME .c ljust;
- dot(ME.n); "\fB.n\fP" at ME .n above
- dot(ME.ne); "\fB .ne\fP" at ME .ne above
- dot(ME.e); "\fB .e\fP" at ME .e ljust
- dot(ME.se); "\fB .se\fP" at ME .se below
- dot(ME.s); "\fB.s\fP" at ME .s below
- dot(ME.sw); "\fB.sw \fP" at ME .sw below
- dot(ME.w); "\fB.w \fP" at ME .w rjust
- dot(ME.nw); "\fB.nw \fP" at ME .nw above
-] }
-compass(box wid 1.5 ht 1);
-move right from last [] .e;
-compass(circle diam 1);
-move right from last [] .e;
-compass(ellipse wid 1.5 ht 1);
-.PE
-.CE "1: Compass points"
-.LP
-these are the locations where eight compass rays from the geometric center
-would intersect the figure. So when we say \fBlast circle .s\fP we are
-referring to the south compass point of the last circle drawn. The
-explanation of Figure 7.3's program is now complete.
-.PP
-(In case you dislike compass points, the names \fB.top\fP,
-\&\fB.bottom\fP, \fB.left\fP and \fB.right\fP are synonyms for \fB.n\fP,
-\&\fB.s\fP, \fB.e\fP, and \fB.w\fP respectively; they can even be
-abbreviated to \fB.t\fP, \fB.b\fP, \fB.l\fP and \fB.r\fP).
-.PP
-The names \fBcenter\fP, \fBtop\fP, \fBbottom\fP, \fBleft\fP, \fBright\fP,
-\fBnorth\fP, \fBsouth\fP, \fBeast\fP, and \fBwest\fP can also be used
-(without the leading dot) in a prefix form marked by \fBof\fP; thus,
-\fBcenter of last circle\fP and \fBtop of 2nd last ellipse\fP are both
-valid object references. Finally, the names \fBleft\fP and \fBright\fP
-can be prefixed with \fBupper\fP and \fBlower\fP which both have the
-obvious meaning.
-.PP
-Arc objects also have compass point; they are the compass points of
-the implied circle.
-.NH 3
-Locations Relative to Open Objects
-.PP
-Every open object (line, arrow, arc, or spline) has three named
-points: \fB.start\fP, \fB.center\fP (or \fB.c\fP), and \fB.end\fP. They
-can also be used without leading dots in the \fBof\fP prefix form.
-The center of an arc is the center of its circle, but the center of
-a line, path, or spline is halfway between its endpoints.
-.KS
-.PS
-define critical {
- [ ME: $1;
- dot(ME.c); "\fB.center\fP" rjust at ME.center + (-0.1, 0.1)
- dot(ME.start); "\fB.start\fP" rjust at ME.start + (-0.1, 0.1)
- dot(ME.end); "\fB.end\fP" rjust at ME.end + (-0.1, 0.1)
- ]
-}
-critical(line up right 1);
-move right 1 from last [] .e;
-critical(arc rad 0.5 cw);
-move down 0.5 from 2nd last [] .s;
-critical(line right 1 then down .5 left 1 then right 1);
-move right 1 from last [] .e;
-critical(spline right 1 then up right then left then left 1);
-.PE
-.CE "2: Special points on open objects"
-.PP
-.
-.NH 2
-Ways of Composing Positions
-.PP
-Once you have two positions to work with, there are several ways to
-combine them to specify new positions.
-.NH 3
-Vector Sums and Displacements
-.PP
-Positions may be added or subtracted to yield a new position (to be
-more precise, you can only add a position and an expression pair; the
-latter must be on the right side of the addition or subtraction sign).
-The result is the conventional vector sum or difference of coordinates.
-For example, \fBlast box .ne + (0.1, 0)\fP is a valid position. This
-example illustrates a common use, to define a position slightly offset
-from a named one (say, for captioning purposes).
-.NH 3
-Interpolation Between Positions
-.PP
-A position may be interpolated between any two positions. The syntax
-is `\fIfraction\fP \fBof the way between\fP \fIposition1\fP \fBand\fP
-\fIposition2\fP'. For example, you can say \fB1/3 of the way between
-here and last ellipse .ne\fP. The fraction may be in
-numerator/denominator form or may be an ordinary number (values are
-\fInot\fP restricted to [0,1]). As an alternative to this verbose
-syntax, you can say `\fIfraction\fP \fB<\,\fP\fIposition1\fP \fB,\fP
-\fIposition2\/\fP\fB>\fP'; thus, the example could also be written as
-\fB1/3 <here, last ellipse>\fP.
-.KS
-.PS
-arrow up right;
-P: 1/3 of the way between last arrow .start and last arrow .end;
-dot(P); move right 0.1; "P";
-.PE
-.CE "3: \fBP: 1/3 of the way between last arrow .start and last arrow .end\fP"
-.PP
-This facility can be used, for example, to draw double connections.
-.KS
-.PS
-A: box "yin"; move;
-B: box "yang";
-arrow right at 1/4 <A.e,A.ne>;
-arrow left at 1/4 <B.w,B.sw>;
-.PE
-.CE "4: Doubled arrows"
-.LP
-You can get Figure \n[H1]-4 from the following program:
-.KS
-.DS
-.CW
-\&.PS
-A: box "yin"; move;
-B: box "yang";
-arrow right at 1/4 <A.e,A.ne>;
-arrow left at 1/4 <B.w,B.sw>;
-\&.PE
-.R
-.DE
-.KE
-.LP
-Note the use of the short form for interpolating points.
-.NH 3
-Projections of Points
-.PP
-Given two positions \fIp\fP and \fIq\fP, the position
-\fB(\,\fP\fIp\fP\fB,\fP \fIq\fP\fB)\fP has the X coordinate of \fIp\fP
-and the Y coordinate of \fIq\fP. This can be helpful in placing an
-object at one of the corners of the virtual box defined by two other
-objects.
-.KS
-.PS
-box invis wid 2 height 1;
-dot(last box .ne); "\fB(B,A)\fP is here" ljust at last circle + (0.1, 0.1);
-dot(last box .se); "B" ljust at last circle + (0.1, -0.1)
-dot(last box .sw); "\fB(A,B)\fP is here" rjust at last circle + (-0.1, -0.1);
-dot(last box .nw); "A" ljust at last circle + (-0.1, 0.1)
-.PE
-.CE "5: Using (\fIx\fP, \fIy\fP) composition"
-.
-.NH 2
-Using Locations
-.PP
-There are four ways to use locations; \fBat\fP, \fBfrom\fP, \fBto\fP,
-and \fBwith\fP. All three are object modifiers; that is, you use them
-as suffixes to a drawing command.
-.PP
-The \fBat\fP modifier says to draw a closed object or arc with its
-center at the following location, or to draw a line/spline/arrow
-starting at the following location.
-.PP
-The \fBto\fP modifier can be used alone to specify a move destination.
-The \fBfrom\fP modifier can be used alone in the same way as \fBat\fP.
-.PP
-The \fBfrom\fP and \fBto\fP modifiers can be used with a \fBline\fR or
-\fBarc\fR command to specify start and end points of the object. In
-conjunction with named locations, this offers a very flexible
-mechanism for connecting objects. For example, the following program
-.KS
-.DS
-.CW
-\&.PS
-box "from"
-move 0.75;
-ellipse "to"
-arc cw from 1/3 of the way \e
- between last box .n and last box .ne to last ellipse .n;
-\&.PE
-.R
-.DE
-.KE
-.LP
-yields:
-.KS
-.PS
-box "from"
-move 0.75;
-ellipse "to"
-arc cw from 1/3 of the way \
- between last box .n and last box .ne to last ellipse .n;
-.PE
-.CE "6: A tricky connection specified with English-like syntax"
-.PP
-The \fBwith\fP modifier allows you to identify a named attachment
-point of an object (or a position within the object) with another point.
-This is very useful for connecting objects in a natural way. For an
-example, consider these two programs:
-.KS
-.PS
-[
- [
- box wid 0.5 ht 0.5;
- box wid 0.75 ht 0.75;
- ]
- move down 0.3 from last [] .s 0.1;
- "\fBbox wid 0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
-]
-move from last [].e 1.5
-[
- [
- box wid 0.5 ht 0.5;
- box wid 0.75 ht 0.75 with .sw at last box .se;
- ]
- move down 0.3 from last [] .s 0.1;
- box invisible "\fBbox wid 0.5 ht 0.5;\fP" \
- "\fBbox wid 0.75 ht 0.75 with .sw at last box .se;\fP"
-]
-.PE
-.CE "7: Using the \fBwith\fP modifier for attachments"
-.
-.NH 2
-The `chop' Modifier
-.PP
-When drawing lines between circles that don't intersect them at a
-compass point, it is useful to be able to shorten a line by the radius
-of the circle at either or both ends. Consider the following program:
-.KS
-.DS
-.CW
-\&.PS
-circle "x"
-circle "y" at 1st circle - (0.4, 0.6)
-circle "z" at 1st circle + (0.4, -0.6)
-arrow from 1st circle to 2nd circle chop
-arrow from 2nd circle to 3rd circle chop
-arrow from 3rd circle to 1st circle chop
-\&.PE
-.DE
-.R
-.KE
-.LP
-It yields the following:
-.KS
-.PS
-circle "x"
-circle "y" at 1st circle - (0.4, 0.6)
-circle "z" at 1st circle + (0.4, -0.6)
-arrow from 1st circle to 2nd circle chop
-arrow from 2nd circle to 3rd circle chop
-arrow from 3rd circle to 1st circle chop
-.PE
-.CE "8: The \fBchop\fR modifier"
-.LP
-Notice that the \fBchop\fR attribute moves arrowheads rather than
-stepping on them. By default, the \fBchop\fR modifier shortens both
-ends of the line by \fBcirclerad\fR. By suffixing it with a number
-you can change the amount of chopping.
-.PP
-If you say \fBline .\|.\|.\& chop \fIr1\fP chop \fIr2\fP\fR with \fIr1\fP
-and \fIr2\fP both numbers, you can vary the amount of chopping at both
-ends. You can use this in combination with trigonometric functions
-to write code that will deal with more complex intersections.
-.
-.
-.NH 1
-Object Groups
-.PP
-There are two different ways to group objects in \fBpic\fP; \fIbrace
-grouping\fP and \fIblock composites\fP.
-.
-.NH 2
-Brace Grouping
-.PP
-The simpler method is simply to group a set of objects within curly
-bracket or brace characters. On exit from this grouping, the current
-position and direction are restored to their value when the opening
-brace was encountered.
-.
-.NH 2
-Block Composites
-.PP
-A block composite object is created a series of commands enclosed by
-square brackets. The composite can be treated for most purposes like
-a single closed object, with the size and shape of its bounding box.
-Here is an example. The program fragment
-.KS
-.DS
-.CW
-A: [
- circle;
- line up 1 at last circle .n;
- line down 1 at last circle .s;
- line right 1 at last circle .e;
- line left 1 at last circle .w;
- box dashed with .nw at last circle .se + (0.2, -0.2);
- Caption: center of last box;
-]
-.R
-.DE
-.KE
-.LP
-yields the block in figure \n[H1]-1, which we show both with and
-without its attachment points. The block's location becomes the
-value of \fBA\fP.
-.KS
-.PS
-define junction {
- circle;
- line up 1 at last circle .n;
- line down 1 at last circle .s;
- line right 1 at last circle .e;
- line left 1 at last circle .w;
- box dashed with .nw at last circle .se + (0.2, -0.2);
- Caption: center of last box;
-}
-[junction();]
-move;
-compass([junction()]);
-.PE
-.CE "1: A sample composite object"
-.LP
-To refer to one of the composite's attachment points, you can say
-(for example) \fBA .s\fP. For purposes of object naming, composites
-are a class. You could write \fBlast [] .s\fP as an equivalent
-reference, usable anywhere a location is needed. This construction is
-very important for putting together large, multi-part diagrams.
-.PP
-Blocks are also a variable-scoping mechanism, like a \fIgroff\/\fP(1)
-environment. All variable assignments done inside a block are undone
-at the end of it. To get at values within a block, write a name of
-the block followed by a dot, followed by the label you
-want. For example, we could refer the the center of the box in the
-above composite as \fBlast [] .Caption\fP or \fBA.Caption\fP.
-.PP
-This kind of reference to a label can be used in any way any other
-location can be. For example, if we added \fB"Hi!" at A.Caption\fP
-the result would look like this:
-.KS
-.PS
-A: [junction();]
-"Hi!" at A.Caption;
-.PE
-.CE "2: Adding a caption using interior labeling"
-.PP
-You can also use interior labels in either part of a \fBwith\fR
-modifier. This means that the example composite could be placed
-relative to its caption box by a command containing \fBwith A.Caption
-at\fP.
-.PP
-Note that both width and height of the block composite object are always
-positive:
-.KS
-.PS
-[
- [
- box wid -0.5 ht 0.5
- box wid 0.75 ht 0.75
- ]
- move down 0.3 from last [].s 0.1
- "\fBbox wid -0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
-]
-move from last [].e 2
-[
- [
- [ box wid -0.5 ht 0.5 ]
- box wid 0.75 ht 0.75
- ]
- move down 0.3 from last [].s 0.1
- "\fB[box wid -0.5 ht 0.5]; box wid 0.75 ht 0.75\fP"
-]
-.PE
-.CE "3: Composite block objects always have positive width and height
-.PP
-Blocks may be nested. This means you can use block attachment points
-to build up complex diagrams hierarchically, from the inside out.
-Note that \fBlast\fP and the other sequential naming mechanisms
-don't look inside blocks, so if you have a program that looks
-like
-.KS
-.DS
-.CW
-\&.PS
-P: [box "foo"; ellipse "bar"];
-Q: [
- [box "baz"; ellipse "quxx"]
- "random text";
- ]
-arrow from 2nd last [];
-\&.PE
-.R
-.DE
-.KE
-.LP
-the arrow in the last line will be attached to object \fBP\fP, not
-object \fBQ\fP.
-.PP
-In DWB \fBpic\fP, only references one level deep into enclosed blocks
-were permitted. GNU \fBgpic\fP removes this restriction.
-.PP
-The combination of block variable scoping, assignability of labels and
-the macro facility that we'll describe later on can be used to
-simulate functions with local variables (just wrap the macro body in
-block braces).
-.
-.
-.NH 1
-Style Variables
-.PP
-There are a number of global style variables in \fBpic\fR that can be used to
-change its overall behavior. We've mentioned several of them in
-previous sections. They're all described here. For each variable,
-the default is given.
-.TS H
-center, tab(@), linesize(2);
-lb | lb | lb
-l | n | l.
-.sp 2p
-Style Variable@Default@What It Does
-.sp 2p
-_
-.sp 2p
-.TH
-boxht@0.5@Default height of a box
-boxwid@0.75@Default width of a box
-lineht@0.5@Default length of vertical line
-linewid@0.75@Default length of horizontal line
-linethick@-1@Default line thickness
-arcrad @0.25@Default radius of an arc
-circlerad@0.25@Default radius of a circle
-ellipseht@0.5@Default height of an ellipse
-ellipsewid@0.75@Default width of an ellipse
-moveht@0.5@Default length of vertical move
-movewid@0.75@Default length of horizontal move
-textht@0@Default height of box enclosing a text object
-textwid@0@Default width of box enclosing a text object
-arrowht@0.1@Length of arrowhead along shaft
-arrowwid@0.05@Width of rear of arrowhead
-arrowhead@1@Enable/disable arrowhead filling
-dashwid@0.05@Interval for dashed lines
-maxpswid@11@Maximum width of picture
-maxpsht@8.5@Maximum height of picture
-scale@1@Unit scale factor
-fillval@0.5@Default fill value
-.sp 5p
-_
-.TE
-Any of these variables can be set with a simple assignment statement.
-For example:
-.KS
-.PS
-[boxht=1; boxwid=0.3; movewid=0.2; box; move; box; move; box; move; box;]
-.PE
-.CE "1: \fBboxht=1; boxwid=0.3; movewid=0.2; box; move; box; move; box; move; box;\fP"
-.PP
-In GNU \fBpic\fR, setting the \fBscale\fR variable re-scales all
-size-related state variables so that their values remain equivalent in
-the new units.
-.PP
-The command \fBreset\fP resets all style variables to their defaults.
-You can give it a list of variable names as arguments (optionally
-separated by commas), in which case it resets only those.
-.PP
-State variables retain their values across pictures until reset.
-.
-.
-.NH 1
-Expressions, Variables, and Assignment
-.PP
-A number is a valid expression, of course (all numbers are stored
-internally as floating-point). Decimal-point notation is acceptable;
-in GNU \fBgpic\fR, scientific notation in C's `e' format (like
-\f(CW5e-2\fP) is accepted.
-.PP
-Anywhere a number is expected, the language will also accept a
-variable. Variables may be the built-in style variable described in
-the last section, or new variables created by assignment.
-.PP
-DWB \fBpic\fP supports only the ordinary assignment via \fB=\fP, which
-defines the variable (on the left side of the equal sign) in the current
-block if it is not already defined there, and then changes the value (on
-the right side) in the current block. The variable is not visible outside
-of the block. This is similar to the C\~programming language where a
-variable within a block shadows a variable with the same name outside of
-the block.
-.PP
-GNU \fBgpic\fP supports an alternate form of assignment using \fB:=\fP.
-The variable must already be defined, and the value will be assigned to
-that variable without creating a variable local to the current block.
-For example, this
-.KS
-.DS
-.CW
-x=5
-y=5
-[
- x:=3
- y=3
-]
-print x " " y
-.DE
-.KE
-.LP
-prints \fB3 5\fP.
-.PP
-You can use the height, width, radius, and x and y coordinates of any
-object or corner in expressions. If \fBA\fP is an object label or name,
-all the following are valid:
-.KS
-.DS
-.CW
-A.x # x coordinate of the center of A
-A.ne.y # y coordinate of the northeast corner of A
-A.wid # the width of A
-A.ht # and its height
-2nd last circle.rad # the radius of the 2nd last circle
-.R
-.DE
-.KE
-.LP
-Note the second expression, showing how to extract a corner coordinate.
-.PP
-Basic arithmetic resembling those of C operators are available; \fB+\fP,
-\fB*\fP, \fB-\fP, \fB/\fP, and \fB%\fP. So is \fB^\fP for exponentiation.
-Grouping is permitted in the usual way using parentheses. GNU \fBgpic\fP
-allows logical operators to appear in expressions; \fB!\&\fP (logical
-negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP, \fB!=\fP,
-\fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
-.PP
-Various built-in functions are supported: \fBsin(\fIx\fB)\fR,
-\fBcos(\fIx\fB)\fR, \fBlog(\fIx\fB)\fR, \fBexp(\fIx\fB)\fR,
-\fBsqrt(\fIx\fB)\fR, \fBmax(\fIx\fB,\fIy\fB)\fR,
-\fBatan2(\fIx\fB,\fIy\fB)\fR, \fBmin(\fIx\fB,\fIy\fB)\fR,
-\fBint(\fIx\fB)\fR, \fBrand()\fP, and \fBsrand()\fP.
-Both \fBexp\fP and \fBlog\fP are
-base\~10; \fBint\fP does integer truncation; \fBrand()\fP returns a
-random number in [0-1), and \fBsrand()\fP sets the seed for
-a new sequence of pseudo-random numbers to be returned by \fBrand()\fP
-(\fBsrand()\fP is a GNU extension).
-.PP
-GNU \fBgpic\fP also documents a one-argument form or rand,
-\fBrand(\fIx\fB)\fR, which returns a random number between 1 and
-\fIx\fP, but this is deprecated and may be removed in a future
-version.
-.PP
-The function \fBsprintf()\fP behaves like a C \fIsprintf\/\fP(3)
-function that only takes %, %e, %f, and %g format strings.
-.
-.
-.NH 1
-Macros
-.PP
-You can define macros in \fBpic\fP. This is useful for diagrams with
-repetitive parts. In conjunction with the scope rules for block
-composites, it effectively gives you the ability to write functions.
-.PP
-The syntax is
-.DS
-.CW
-\fBdefine\fP \fIname\fP \fB{\fP \fIreplacement text \fB}\fP
-.R
-.DE
-.LP
-This defines \fIname\fR as a macro to be replaced by the replacement
-text (not including the braces). The macro may be called as
-.DS
-.CW
-\fIname\fB(\fIarg1, arg2, \|.\|.\|.\& argn\fB)\fR
-.R
-.DE
-.LP
-The arguments (if any) will be substituted for tokens \fB$1\fP, \fB$2\fP
-\&.\|.\|.\& \fB$n\fP
-appearing in the replacement text.
-.PP
-As an example of macro use, consider this:
-.KS
-.DS
-.CW
-.ps -1
-.vs -1
-\&.PS
-# Plot a single jumper in a box, $1 is the on-off state.
-define jumper { [
- shrinkfactor = 0.8;
- Outer: box invis wid 0.45 ht 1;
-
- # Count on end ] to reset these
- boxwid = Outer.wid * shrinkfactor / 2;
- boxht = Outer.ht * shrinkfactor / 2;
-
- box fill (!$1) with .s at center of Outer;
- box fill ($1) with .n at center of Outer;
-] }
-
-# Plot a block of six jumpers.
-define jumperblock {
- jumper($1);
- jumper($2);
- jumper($3);
- jumper($4);
- jumper($5);
- jumper($6);
-
- jwidth = last [].Outer.wid;
- jheight = last [].Outer.ht;
-
- box with .nw at 6th last [].nw wid 6*jwidth ht jheight;
-
- # Use {} to avoid changing position from last box draw.
- # This is necessary so move in any direction will work as expected
- {"Jumpers in state $1$2$3$4$5$6" at last box .s + (0,-0.2);}
-}
-
-# Sample macro invocations.
-jumperblock(1,1,0,0,1,0);
-move;
-jumperblock(1,0,1,0,1,1);
-\&.PE
-.ps
-.vs
-.R
-.DE
-.KE
-.LP
-It yields the following:
-.KS
-.PS
-# Plot a single jumper in a box, $1 is the on-off state.
-define jumper { [
- shrinkfactor = 0.8;
- Outer: box invis wid 0.45 ht 1;
-
- # Count on end ] to reset these
- boxwid = Outer.wid * shrinkfactor / 2;
- boxht = Outer.ht * shrinkfactor / 2;
-
- box fill (!$1) with .s at center of Outer;
- box fill ($1) with .n at center of Outer;
-] }
-
-# Plot a block of six jumpers
-define jumperblock {
- jumper($1);
- jumper($2);
- jumper($3);
- jumper($4);
- jumper($5);
- jumper($6);
-
- jwidth = last [].Outer.wid;
- jheight = last [].Outer.ht;
-
- box with .nw at 6th last [].nw wid 6*jwidth ht jheight;
-
- # Use {} to avoid changing position from last box draw.
- # This is necessary so move in any direction will work as expected
- {"Jumpers in state $1$2$3$4$5$6" at last box .s + (0,-0.2);}
-}
-
-# Sample macro invocations
-jumperblock(1,1,0,0,1,0);
-move 0.25;
-jumperblock(1,0,1,0,1,1);
-.PE
-.CE "1: Sample use of a macro"
-.LP
-This macro example illustrates how you can combine [], brace grouping,
-and variable assignment to write true functions.
-.PP
-One detail the example above does not illustrate is the fact that
-macro argument parsing is not token-oriented. If you call
-\fBjumper(\ 1\ )\fP, the value of $1 will be \fB"\ 1\ "\fP. You could
-even call \fBjumper(big\ string)\fP to give $1 the value
-\fB"big\ string"\fP.
-.PP
-If you want to pass in a coordinate pair, you can avoid getting
-tripped up by the comma by wrapping the pair in parentheses.
-.PP
-Macros persist through pictures. To undefine a macro, say \fBundef\fP
-\fIname\fR; for example,
-.DS
-\f(CWundef jumper\fP
-\f(CWundef jumperblock\fP
-.DE
-.LP
-would undefine the two macros in the jumper block example.
-.
-.
-.NH 1
-Import/Export Commands
-.PP
-Commands that import or export data between \fBpic\fR and its
-environment are described here.
-.
-.NH 2
-File and Table Insertion
-.PP
-The statement
-.DS
-\f(CWcopy\fP \fIfilename\fR
-.DE
-.LP
-inserts the contents of \fIfilename\fR in the \fBpic\fP input stream.
-Any \fB.PS\fP/\fB.PE\fP pair in the file will be ignored. You
-can use this to include pre-generated images.
-.PP
-A variant of this statement replicates the \fBcopy thru\fP feature of
-\fIgrap\fP(1). The call
-.DS
-\f(CWcopy\fP \fIfilename\fR \f(CWthru\fP \fImacro\fP
-.DE
-.LP
-calls \fImacro\fP (which may be either a name or replacement text)
-on the arguments obtained by breaking each line of the file into
-blank-separated fields. The macro may have up to 9\~arguments. The
-replacement text may be delimited by braces or by a pair of instances
-of any character not appearing in the rest of the text.
-.PP
-If you write
-.DS
-\f(CWcopy\fP \f(CWthru\fP \fImacro\fP
-.DE
-.LP
-omitting the filename, lines to be parsed are taken from the input
-source up to the next \fB.PE\fP.
-.PP
-In either of the last two \fBcopy\fP commands, GNU \fBgpic\fP permits a
-trailing `\fBuntil\fP \fIword\/\fP' clause to be added which terminates
-the copy when the first word matches the argument (the default
-behavior is therefore equivalent to \fBuntil .PE\fP).
-.PP
-Accordingly, the command
-.RS
-.KS
-.IP
-.CW
-.nf
-\&.PS
-copy thru % circle at ($1,$2) % until "END"
-1 2
-3 4
-5 6
-END
-box
-\&.PE
-.R
-.fi
-.KE
-.RE
-.LP
-is equivalent to
-.RS
-.KS
-.IP
-.CW
-.nf
-\&.PS
-circle at (1,2)
-circle at (3,4)
-circle at (5,6)
-box
-\&.PE
-.R
-.fi
-.KE
-.RE
-.
-.NH 2
-Debug Messages
-.PP
-The command \fBprint\fR accepts any number of arguments, concatenates
-their output forms, and writes the result to standard error. Each
-argument must be an expression, a position, or a text string.
-.
-.NH 2
-Escape to Post-Processor
-.PP
-If you write
-.DS
-\fBcommand\fR \fIarg\fR\|.\|.\|.
-.DE
-.LP
-\fBpic\fP concatenates the arguments and pass them through as a line
-to troff or \*[tx]. Each
-.I arg
-must be an expression, a position, or text.
-This has a similar effect to a line beginning with
-.B .
-or
-\fB\e\fR\|,
-but allows the values of variables to be passed through.
-.LP
-For example,
-.KS
-.DS
-.CW
-.nf
-\&.PS
-x = 14
-command ".ds string x is " x "."
-\&.PE
-\e*[string]
-.DE
-.R
-.KE
-.LP
-prints
-.DS
-.CW
-x is 14.
-.R
-.DE
-.
-.NH 2
-Executing Shell Commands
-.PP
-The command
-.DS
-\f(CWsh\fP \f(CW{\fP \fIanything.\|.\|.\fP \f(CW}\fP
-.DE
-.LP
-macro-expands the text in braces, then executes it as a shell command.
-This could be used to generate images or data tables for later
-inclusion. The delimiters shown as {} here may also be two copies of
-any one character not present in the shell command text. In either
-case, the body may contain balanced {} pairs. Strings in the body
-may contain balanced or unbalanced braces in any case.
-.
-.
-.NH 1
-Control-flow constructs
-.PP
-The \fBpic\fP language provides conditionals and looping. For
-example,
-.KS
-.DS
-.CW
-pi = atan2(0,-1);
-for i = 0 to 2 * pi by 0.1 do {
- "-" at (i/2, 0);
- "." at (i/2, sin(i)/2);
- ":" at (i/2, cos(i)/2);
-}
-.R
-.DE
-.KE
-.LP
-which yields this:
-.KS
-.PS
-pi = atan2(0,-1);
-for i = 0 to 2 * pi by 0.1 do {
- "-" at (i/2, 0);
- "." at (i/2, sin(i)/2);
- ":" at (i/2, cos(i)/2);
-}
-.PE
-.CE "1: Plotting with a \fBfor\fP loop"
-.LP
-The syntax of the \fBfor\fP statement is:
-.DS
-\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\/\fR \fBto\fR \fIexpr2\/\fR \
-[\fBby\fR [\fB*\fR]\fIexpr3\/\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
-.DE
-The semantics are as follows: Set
-.I variable
-to \fIexpr1\fR.
-While the value of
-.I variable
-is less than or equal to
-\fIexpr2\fR,
-do
-.I body
-and increment
-.I variable
-by
-\fIexpr3\fR;
-if
-.B by
-is not given, increment
-.I variable
-by\~1.
-If
-.I expr3
-is prefixed by\~\c
-.B *
-then
-.I variable
-will instead be multiplied by
-\fIexpr3\fR.
-The value of
-.I expr3
-can be negative for the additive case;
-.I variable
-is then tested whether it is greater than or equal to
-\fIexpr2\fR.
-For the multiplicative case,
-.I expr3
-must be greater than zero.
-If the constraints aren't met, the loop isn't executed.
-.I X
-can be any character not occurring in
-\fIbody\fR; or the two \fIX\/\fPs may be paired braces (as in the
-\fBsh\fR command).
-.PP
-The syntax of the \fBif\fP statement is as follows:
-.DS
-\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
-[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\/\fR]
-.DE
-Its semantics are as follows: Evaluate
-\fIexpr\fR;
-if it is non-zero then do
-\fIif-true\fR,
-otherwise do
-\fIif-false\fR.
-.I X
-can be any character not occurring in
-\fIif-true\fR.
-.I Y
-can be any character not occurring in
-\fIif-false\fR.
-.PP
-Eithe or both of the
-.I X
-or
-.I Y
-pairs may instead be balanced pairs of
-braces ({ and\~}) as in the \fBsh\fR command. In either case, the
-\fIif-true\fR may contain balanced pairs of braces. None of these
-delimiters will be seen inside strings.
-.PP
-All the usual relational operators my be used in conditional expressions;
-\fB!\&\fP (logical negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP,
-\fB!=\fP, \fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
-.PP
-String comparison is also supported using \fB==\fP and \fB!=\fP. String
-comparisons may need to be parenthesized to avoid syntactic
-ambiguities.
-.
-.
-.NH 1
-Interface To [gt]roff
-.PP
-The output of \fBpic\fP is \fB[gt]roff\fP drawing commands. The GNU
-\fIgpic\/\fP(1) command warns that it relies on drawing extensions
-present in \fIgroff\/\fP(1) that are not present in \fItroff\/\fP(1).
-.
-.NH 2
-Scaling Arguments
-.PP
-The DWB \fIpic\/\fP(1) program will accept one or two arguments to
-\&\fB.PS\fP, which is interpreted as a width and height in inches to
-which the results of \fIpic\/\fP(1) should be scaled (width and height
-scale independently). If there is only one argument, it is
-interpreted as a width to scale the picture to, and height will be
-scaled by the same proportion.
-.PP
-GNU \fBgpic\fP is less general; it will accept a single width to scale
-to, or a zero width and a maximum height to scale to. With
-two non-zero arguments, it will scale to the maximum height.
-.
-.NH 2
-How Scaling is Handled
-.PP
-When \fBpic\fP processes a picture description on input, it passes
-\fB.PS\fP and \fB.PE\fP through to the postprocessor. The \fB.PS\fP
-gets decorated with two numeric arguments which are the X and
-Y\~dimensions of the picture in inches. The post-processor can use
-these to reserve space for the picture and center it.
-.PP
-The GNU incarnation of the \fBms\fP macro package, for example, includes
-the following definitions:
-.KS
-.DS
-.ps -1
-.vs -1
-.CW
-\&.de PS
-\&.br
-\&.sp \e\en[DD]u
-\&.ie \e\en[.$]<2 .@error bad arguments to PS (not preprocessed with pic?)
-\&.el \e{\e
-\&. ds@need (u;\e\e$1)+1v
-\&. in +(u;\e\en[.l]-\e\en[.i]-\e\e$2/2>?0)
-\&.\e}
-\&..
-\&.de PE
-\&.par@reset
-\&.sp \e\en[DD]u+.5m
-\&..
-.R
-.DE
-.ps
-.vs
-.KE
-.LP
-Equivalent definition will be supplied by GNU \fIpic\/\fP(1) if you use
-the \-mpic option; this should make it usable with macro pages other
-than \fIms\/\fR(1).
-.PP
-If \fB.PF\fP is used instead of \fB.PE\fP, the \fBtroff\fP position is
-restored to what it was at the picture start (Kernighan notes that
-the\~F stands for \[lq]flyback\[rq]).
-.PP
-The invocation
-.DS
-\&\fB.PS <\,\fP\fIfile\fP
-.DE
-.LP
-causes the contents of \fIfile\fP to replace the \fB.PS\fP line. This
-feature is deprecated; use `\fBcopy\fP \fIfile\fR' instead).
-.
-.NH 2
-PIC and [gt]roff commands
-.PP
-By default, input lines that begin with a period are passed to the
-postprocessor, embedded at the corresponding point in the output.
-Messing with horizontal or vertical spacing is an obvious recipe for
-bugs, but point size and font changes will usually be safe.
-.PP
-Point sizes and font changes are also safe within text strings, as
-long as they are undone before the end of string.
-.PP
-The state of \fB[gt]roff\fP's fill mode is preserved across pictures.
-.
-.NH 2
-PIC and EQN
-.PP
-The Kernighan paper notes that there is a subtle problem with
-complicated equations inside \fBpic\fR pictures; they come out wrong if
-\fIeqn\/\fP(1) has to leave extra vertical space for the equation.
-If your equation involves more than subscripts and superscripts, you
-must add to the beginning of each equation the extra information
-\fBspace\~0\fP. He gives the following example:
-.KS
-.DS
-.CW
-arrow
-box "$space 0 {H( omega )} over {1 - H( omega )}$"
-arrow
-.R
-.DE
-.KE
-.EQ
-delim @@
-.EN
-.KS
-.PS
-arrow
-box "@space 0 {H( omega )} over {1 - H( omega )}@"
-arrow
-.PE
-.CE "1: Equations within pictures"
-.
-.NH 2
-Absolute Positioning of Pictures
-.PP
-A \fBpic\fP picture is positioned vertically by troff at the current
-position. The topmost position possible on a page is not the paper edge
-but a position which is one baseline lower so that the first row of glyphs
-is visible. To make a picture really start at the paper edge you have
-to make the baseline-to-baseline distance zero, this is, you must set the
-vertical spacing to\~0 (using \fB.vs\fP) before starting the picture.
-.
-.
-.NH 1
-Interface to TeX
-.PP
-.PP
-\*[tx] mode is enabled by the
-.B \-t
-option.
-In \*[tx] mode, pic will define a vbox called
-.B \egraph
-for each picture; the name can be changed with the pseudo-variable
-.B figname
-(which is actually a specially parsed command).
-You must yourself print that vbox using, for example, the command
-.RS
-.LP
-.CW
-\ecenterline{\ebox\egraph}
-.RE
-.LP
-Actually, since the vbox has a height of zero (it is defined with \evtop)
-this will produce slightly more vertical space above the picture than
-below it;
-.RS
-.LP
-.CW
-\ecenterline{\eraise 1em\ebox\egraph}
-.RE
-.LP
-would avoid this.
-.PP
-To make the vbox having a positive height and a depth of zero (as used
-e.g.\& by \*(lx's \f(CW\%graphics.sty\fP), define the following macro in
-your document:
-.KS
-.DS
-.CW
-\edef\egpicbox#1{%
- \evbox{\eunvbox\ecsname #1\eendcsname\ekern 0pt}}
-.R
-.DE
-.KE
-.LP
-Now you can simply say
-.B \egpicbox{graph}
-instead of \ebox\egraph.
-.PP
-You must use a \*[tx] driver that supports the
-.B tpic
-specials, version\~2.
-.PP
-Lines beginning with
-.B \e
-are passed through transparently; a
-.B %
-is added to the end of the line to avoid unwanted spaces.
-You can safely use this feature to change fonts or to
-change the value of \fB\ebaselineskip\fP.
-Anything else may well produce undesirable results; use at your own risk.
-Lines beginning with a period are not given any special treatment.
-.PP
-The \*[tx] mode of \fIpic\/\fP(1) will \fInot\fP translate \fBtroff\fP
-font and size changes included in text strings!
-.PP
-Here an example how to use \fBfigname\fP.
-.KS
-.DS
-.CW
-\&.PS
-figname = foo;
-\&...
-\&.PE
-
-\&.PS
-figname = bar;
-\&...
-\&.PE
-
-\ecenterline{\ebox\efoo \ehss \ebox\ebar}
-.DE
-.R
-.KE
-.LP
-Use this feature sparsingly and only if really needed:
-A different name means a new box register in \*[tx], and the maximum number
-of box registers is only 256.
-Also be careful not to use a predefined \*[tx] or \*[lx] macro name as
-an argument to \fBfigname\fP since this inevitably causes an error.
-.
-.
-.NH 1
-Obsolete Commands
-.PP
-GNU \fIgpic\/\fP(1) has a command
-.DS
-\fBplot\fR \fIexpr\fR [\fB"\fItext\fB"\fR]
-.DE
-This is a text object which is constructed by using
-.I text
-as a format string for sprintf
-with an argument of
-\fIexpr\fP.
-If
-.I text
-is omitted a format string of \fB"%g"\fP is used.
-Attributes can be specified in the same way as for a normal text
-object.
-Be very careful that you specify an appropriate format string;
-\fBpic\fP does only very limited checking of the string.
-This is deprecated in favour of
-\fBsprintf\fP.
-.
-.
-.NH 1
-Some Larger Examples
-.PP
-Here are a few larger examples, with complete source code.
-One of our earlier examples is generated in an instructive way using a
-for loop:
-.KS
-.DS
-.ps -1
-.vs -1
-.CW
-\&.PS
-# Draw a demonstration up left arrow with grid box overlay
-define gridarrow
-{
- move right 0.1
- [
- {arrow up left $1;}
- box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
- for i = 2 to ($1 / 0.5) do
- {
- box wid 0.5 ht 0.5 dotted with .sw at last box .se;
- }
- move down from last arrow .center;
- [
- if ( $1 == boxht ) \e
- then { "\efBline up left\efP" } \e
- else { sprintf("\efBarrow up left %g\efP", $1) };
- ]
- ]
- move right 0.1 from last [] .e;
-}
-gridarrow(0.5);
-gridarrow(1);
-gridarrow(1.5);
-gridarrow(2);
-undef gridarrow
-\&.PE
-.R
-.DE
-.ps
-.vs
-.KE
-.KS
-.PS
-# Draw a demonstration up left arrow with grid box overlay
-define gridarrow
-{
- move right 0.1
- [
- {arrow up left $1;}
- box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
- for i = 2 to ($1 / 0.5) do
- {
- box wid 0.5 ht 0.5 dotted with .sw at last box .se;
- }
- move down from last arrow .center;
- [
- if ( $1 == boxht ) \
- then { "\fBline up left\fP" } \
- else { sprintf("\fBarrow up left %g\fP", $1) };
- ]
- ]
- move right 0.1 from last [] .e;
-}
-gridarrow(0.5);
-gridarrow(1);
-gridarrow(1.5);
-gridarrow(2);
-undef gridarrow
-.PE
-.CE "1: Diagonal arrows (dotted boxes show the implied 0.5-inch grid)"
-.PP
-Here's an example concocted to demonstrate layout of a large,
-multiple-part pattern:
-.KS
-.DS
-.ps -1
-.vs -1
-.CW
-\&.PS
-define filter {box ht 0.25 rad 0.125}
-lineht = 0.25;
-Top: [
- right;
- box "\efBms\efR" "sources";
- move;
- box "\efBHTML\efR" "sources";
- move;
- box "\efBlinuxdoc-sgml\efP" "sources" wid 1.5;
- move;
- box "\efBTexinfo\efP" "sources";
-
- line down from 1st box .s lineht;
- A: line down;
- line down from 2nd box .s; filter "\efBhtml2ms\efP";
- B: line down;
- line down from 3rd box .s; filter "\efBformat\efP";
- C: line down;
- line down from 4th box .s; filter "\efBtexi2roff\efP";
- D: line down;
-]
-move down 1 from last [] .s;
-Anchor: box wid 1 ht 0.75 "\efBms\efR" "intermediate" "form";
-arrow from Top.A.end to Anchor.nw;
-arrow from Top.B.end to 1/3 of the way between Anchor.nw and Anchor.ne;
-arrow from Top.C.end to 2/3 of the way between Anchor.nw and Anchor.ne;
-arrow from Top.D.end to Anchor.ne
-{
- # PostScript column
- move to Anchor .sw;
- line down left then down ->;
- filter "\efBpic\efP";
- arrow;
- filter "\efBeqn\efP";
- arrow;
- filter "\efBtbl\efP";
- arrow;
- filter "\efBgroff\efP";
- arrow;
- box "PostScript";
-
- # HTML column
- move to Anchor .se;
- line down right then down ->;
- A: filter dotted "\efBpic2img\efP";
- arrow;
- B: filter dotted "\efBeqn2html\efP";
- arrow;
- C: filter dotted "\efBtbl2html\efP";
- arrow;
- filter "\efBms2html\efP";
- arrow;
- box "HTML";
-
- # Nonexistence caption
- box dashed wid 1 at B + (2,0) "These tools" "don't yet exist";
- line chop 0 chop 0.1 dashed from last box .nw to A.e ->;
- line chop 0 chop 0.1 dashed from last box .w to B.e ->;
- line chop 0 chop 0.1 dashed from last box .sw to C.e ->;
-}
-\&.PE
-.R
-.DE
-.ps
-.vs
-.KE
-.KS
-.PS
-define filter {box ht 0.25 rad 0.125}
-lineht = 0.25;
-Top: [
- right;
- box "\fBms\fR" "sources";
- move;
- box "\fBHTML\fR" "sources";
- move;
- box "\fBlinuxdoc-sgml\fP" "sources" wid 1.5;
- move;
- box "\fBTexinfo\fP" "sources";
-
- line down from 1st box .s lineht;
- A: line down;
- line down from 2nd box .s; filter "\fBhtml2ms\fP";
- B: line down;
- line down from 3rd box .s; filter "\fBformat\fP";
- C: line down;
- line down from 4th box .s; filter "\fBtexi2roff\fP";
- D: line down;
-]
-move down 1 from last [] .s;
-Anchor: box wid 1 ht 0.75 "\fBms\fR" "intermediate" "form";
-arrow from Top.A.end to Anchor.nw;
-arrow from Top.B.end to 1/3 of the way between Anchor.nw and Anchor.ne;
-arrow from Top.C.end to 2/3 of the way between Anchor.nw and Anchor.ne;
-arrow from Top.D.end to Anchor.ne
-{
- # PostScript column
- move to Anchor .sw;
- line down left then down ->;
- filter "\fBpic\fP";
- arrow;
- filter "\fBeqn\fP";
- arrow;
- filter "\fBtbl\fP";
- arrow;
- filter "\fBgroff\fP";
- arrow;
- box "PostScript";
-
- # HTML column
- move to Anchor .se;
- line down right then down ->;
- A: filter dotted "\fBpic2img\fP";
- arrow;
- B: filter dotted "\fBeqn2html\fP";
- arrow;
- C: filter dotted "\fBtbl2html\fP";
- arrow;
- filter "\fBms2html\fP";
- arrow;
- box "HTML";
-
- # Nonexistence caption
- box dashed wid 1 at B + (2,0) "These tools" "don't yet exist";
- line chop 0 chop 0.1 dashed from last box .nw to A.e ->;
- line chop 0 chop 0.1 dashed from last box .w to B.e ->;
- line chop 0 chop 0.1 dashed from last box .sw to C.e ->;
-}
-.PE
-.CE "2: Hypothetical production flow for dual-mode publishing"
-.LP
-.\"%%REFERENCE%%
-.
-.
-.NH 1
-PIC Reference
-.PP
-This is an annotated grammar of \fBpic\fP.
-.
-.NH 2
-Lexical Items
-.PP
-In general, \fBpic\fP is a free-format, token-oriented language that
-ignores whitespace outside strings. But certain lines and contructs
-are specially interpreted at the lexical level:
-.PP
-A comment begins with \fB#\fP and continues to \fB\en\fP (comments may
-also follow text in a line). A line beginning with a period or
-backslash may be interpreted as text to be passed through to the
-post-processor, depending on command-line options. An end-of-line
-backslash is interpreted as a request to continue the line; the
-backslash and following newline are ignored.
-.PP
-.RS
-Here are the grammar terminals:
-.IP \s[-1]INT\s[0]
-A positive integer.
-.IP \s[-1]NUMBER\s[0]
-A floating point numeric constant. May contain a decimal point or be
-expressed in scientific notation in the style of \fIprintf\/\fP(3)'s %e
-escape. A trailing `i' or `I' (indicating the unit `inch') is ignored.
-.IP \s[-1]TEXT\s[0]
-A string enclosed in double quotes. A double quote within \s[-1]TEXT\s[0]
-must be preceded by a backslash. Instead of \s[-1]TEXT\s[0] you can use
-.DS
-.CW
-sprintf ( TEXT [, <expr> ...] )
-.R
-.DE
-.IP
-except after the `until' and `last' keywords, and after all ordinal
-keywords (`th' and friends).
-.IP \s[-1]VARIABLE\s[0]
-A string starting with a character from the set [a-z], optionally
-followed by one or more characters of the set [a-zA-Z0-9_].
-(Values of variables are preserved across pictures.)
-.IP \s[-1]LABEL\s[0]
-A string starting with a character from the set [A-Z], optionally
-followed by one or more characters of the set [a-zA-Z0-9_].
-.IP \s[-1]COMMAND-LINE\s[0]
-A line starting with a command character (`.' in groff mode, `\e' in
-\*[tx] mode).
-.IP \s[-1]BALANCED-TEXT\s[0]
-A string either enclosed by `{' and `}' or with \fIX\fP and \fIX\fP,
-where \fIX\fP doesn't occur in the string.
-.IP \s[-1]BALANCED-BODY\s[0]
-Delimiters as in \s[-1]BALANCED-TEXT\s[0]; the body will be interpreted as
-`\fB\[la]command\[ra].\|.\|.\fP'.
-.IP \s[-1]FILENAME\s[0]
-The name of a file. This has the same semantics as \s[-1]TEXT\s[0].
-.IP \s[-1]MACRONAME\s[0]
-Either \s[-1]VARIABLE\s[0] or \s[-1]LABEL\s[0].
-.RE
-.
-.NH 2
-Semi-Formal Grammar
-.PP
-Tokens not enclosed in \[la]\|\[ra] are literals, except:
-.IP 1.
-\fB\en\fP is a newline.
-.IP 2.
-Three dots is a suffix meaning `replace with 0 or more repetitions
-of the preceding element(s).
-.IP 3.
-An enclosure in square brackets has its usual meaning of `this clause is
-optional'.
-.IP 4.
-Square-bracket-enclosed portions within tokens are optional. Thus,
-`h\^[eigh]\^t' matches either `height' or `ht'.
-.LP
-If one of these special tokens has to be referred to literally, it is
-surrounded with single quotes.
-.PP
-The top-level \fBpic\fP object is a picture.
-.DS
-.CW
-<picture> ::=
- .PS [NUMBER [NUMBER]]\en
- <statement> ...
- .PE \en
-.R
-.DE
-.PP
-The arguments, if present, represent the width and height of the picture,
-causing \fBpic\fR to attempt to scale it to the given dimensions in
-inches. In no case, however, will the X and Y\~dimensions of the
-picture exceed the values of the style variables \fBmaxpswid\fP and
-\fBmaxpsheight\fP (which default to the normal 8.5\^i by 11\^i page size).
-.PP
-If the ending `.PE' is replaced by `.PF', the page vertical position is
-restored to its value at the time `.PS' was encountered. Another
-alternate form of invocation is `.PS\ <\s[-1]FILENAME\s[0]', which
-replaces the `.PS' line with a file to be interpreted by \fBpic\fR (but
-this feature is deprecated).
-.PP
-The `.PS', `.PE', and `.PF' macros to perform centering and scaling are
-normally supplied by the post-processor.
-.PP
-In the following, either `|' or a new line starts an alternative.
-.DS
-.CW
-<statement> ::=
- <command> ;
- <command> \en
-.R
-.DE
-.DS
-.CW
-<command> ::=
- <primitive> [<attribute>]
- LABEL : [;] <command>
- LABEL : [;] <command> [<position>]
- { <command> ... }
- VARIABLE [:] = <any-expr>
- figname = MACRONAME
- up | down | left | right
- COMMAND-LINE
- command <print-arg> ...
- print <print-arg> ...
- sh BALANCED-TEXT
- copy FILENAME
- copy [FILENAME] thru MACRONAME [until TEXT]
- copy [FILENAME] thru BALANCED-BODY [until TEXT]
- for VARIABLE = <expr> to <expr> [by [*] <expr>] do BALANCED-BODY
- if <any-expr> then BALANCED-BODY [else BALANCED-BODY]
- reset [VARIABLE [[,] VARIABLE ...]]
-.R
-.DE
-.DS
-.CW
-<print-arg> ::=
- TEXT
- <expr>
- <position>
-.R
-.DE
-.PP
-The current position and direction are saved on entry to a `{\ .\|.\|.\ }'
-construction and restored on exit from it.
-.PP
-Note that in `if' constructions, newlines can only occur in
-\s[-1]BALANCED-BODY\s[0]. This means that
-.DS
-.CW
-if
-{ ... }
-else
-{ ... }
-.R
-.DE
-.PP
-will fail. You have to use the braces on the same line as the keywords:
-.DS
-.CW
-if {
-\&...
-} else {
-\&...
-}
-.R
-.DE
-.PP
-This restriction doesn't hold for the body after the `do' in a `for'
-construction.
-.PP
-At the beginning of each picture, `figname' is reset to the vbox name
-`graph'; this command has only a meaning in \*[tx] mode. While the grammar
-rules allow digits and the underscore in the value of `figname', \*[tx]
-normally accepts uppercase and lowercase letters only as box names
-(you have to use `\ecsname' if you really need to circumvent this
-limitation).
-.DS
-.CW
-<any-expr> ::=
- <expr>
- <text-expr>
- <any-expr> <logical-op> <any-expr>
- ! <any-expr>
-.R
-.DE
-.DS
-.CW
-<logical-op> ::=
- == | != | && | '||'
-.R
-.DE
-.DS
-.CW
-<text-expr> ::=
- TEXT == TEXT
- TEXT != TEXT
-.R
-.DE
-.PP
-Logical operators are handled specially by \fBpic\fP since they can
-deal with text strings also. \fBpic\fP uses \%\fIstrcmp\/\fP(3) to test
-for equality of strings; an empty string is considered as `false' for
-`&&' and `|\||'.
-.DS
-.CW
-<primitive> ::=
- box \fR# closed object \[em] rectangle\fP
- circle \fR# closed object \[em] circle\fP
- ellipse \fR# closed object \[em] ellipse\fP
- arc \fR# open object \[em] quarter-circle\fP
- line \fR# open object \[em] line\fP
- arrow \fR# open object \[em] line with arrowhead\fP
- spline \fR# open object \[em] spline curve\fP
- move
- TEXT TEXT ... \fR# text within invisible box\fP
- plot <expr> TEXT \fR# formatted text\fP
- '[' <command> ... ']'
-.R
-.DE
-.PP
-Drawn objects within `[\ .\|.\|.\ ]' are treated as a single composite
-object with a rectangular shape (that of the bounding box of all the
-elements). Variable and label assignments within a block are local to
-the block. Current direction of motion is restored to the value at start
-of block upon exit. Position is \fInot\fR restored (unlike `{\ }');
-instead, the current position becomes the exit position for the current
-direction on the block's bounding box.
-.DS
-.CW
-<attribute> ::=
- h[eigh]t <expr> \fR# set height of closed figure \fP
- wid[th] <expr> \fR# set width of closed figure \fP
- rad[ius] <expr> \fR# set radius of circle/arc \fP
- diam[eter] <expr> \fR# set diameter of circle/arc \fP
- up [<expr>] \fR# move up \fP
- down [<expr>] \fR# move down \fP
- left [<expr>] \fR# move left \fP
- right [<expr>] \fR# move right \fP
- from <position> \fR# set from position of open figure\fP
- to <position> \fR# set to position of open figure\fP
- at <position> \fR# set center of open figure\fP
- with <path> \fR# fix corner/named point at specified location\fP
- with <position> \fR# fix position of object at specified location\fP
- by <expr-pair> \fR# set object's attachment point\fP
- then \fR# sequential segment composition\fP
- dotted [<expr>] \fR# set dotted line style\fP
- dashed [<expr>] \fR# set dashed line style\fP
- thick[ness] <expr> \fR# set thickness of lines\fP
- chop [<expr>] \fR# chop end(s) of segment\fP
- '->' | '<-' | '<->' \fR# decorate with arrows\fP
- invis[ible] \fR# make primitive invisible\fP
- solid \fR# make closed figure solid\fP
- fill[ed] [<expr>] \fR# set fill density for figure\fP
- colo[u]r[ed] TEXT \fR# set fill and outline color for figure\fP
- outline[d] TEXT \fR# set outline color for figure\fP
- shaded TEXT \fR# set fill color for figure\fP
- same \fR# copy size of previous object\fP
- cw | ccw \fR# set orientation of curves\fP
- ljust | rjust \fR# adjust text horizontally\fP
- above | below \fR# adjust text vertically\fP
- aligned \fR# align parallel to object\fP
- TEXT TEXT ... \fR# text within object\fP
- <expr> \fR# motion in the current direction\fR
-.R
-.DE
-.PP
-Missing attributes are supplied from defaults; inappropriate ones are
-silently ignored. For lines, splines, and arcs, height and width
-refer to arrowhead size.
-.PP
-The `at' primitive sets the center of the current object. The
-`with' attribute fixes the specified feature of the given object
-to a specified location. (Note that `with' is incorrectly described
-in the Kernighan paper.)
-.PP
-The `by' primitive is not documented in the tutorial portion of
-the Kernighan paper, and should probably be considered unreliable.
-.PP
-The primitive `arrow' is a synonym for `line\ ->'.
-.PP
-Text is normally an attribute of some object, in which case successive
-strings are vertically stacked and centered on the object's center by
-default. Standalone text is treated as though placed in an invisible
-box.
-.PP
-A text item consists of a string or sprintf-expression, optionally
-followed by positioning information. Text (or strings specified with
-`sprintf') may contain [gtn]roff font changes, size changes, and local
-motions, provided those changes are undone before the end of the current
-item.
-.PP
-A position is an (x,y) coordinate pair. There are lots of different
-ways to specify positions:
-.DS
-.CW
-<position> ::=
- <position-not-place>
- <place>
- ( <position> )
-.R
-.DE
-.DS
-.CW
-<position-not-place> ::=
- <expr-pair>
- <position> + <expr-pair>
- <position> - <expr-pair>
- ( <position> , <position> )
- <expr> [of the way] between <position> and <position>
- <expr> '<' <position> , <position> '>'
-.R
-.DE
-.DS
-.CW
-<expr-pair> ::=
- <expr> , <expr>
- ( expr-pair )
-.R
-.DE
-.DS
-.CW
-<place> ::=
- <label>
- <label> <corner>
- <corner> [of] <label>
- Here
-.R
-.DE
-.DS
-.CW
-<label> ::=
- LABEL [. LABEL ...]
- <nth-primitive>
-.R
-.DE
-.DS
-.CW
-<corner> ::=
- .n | .e | .w | .s
- .ne | .se | .nw | .sw
- .c[enter] | .start | .end
- .t[op] | .b[ot[tom]] | .l[eft] | .r[ight]
- left | right | <top-of> | <bottom-of>
- <north-of> | <south-of> | <east-of> | <west-of>
- <center-of> | <start-of> | <end-of>
- upper left | lower left | upper right | lower right
-.R
-.DE
-.DS
-.CW
-<\,\f(CIxxx\/\fP-of> ::=
- \f(CIxxx\fP \fR# followed by `of'\fP
-.R
-.DE
-.DS
-.CW
-<nth-primitive> ::=
- <ordinal> <object-type>
- [<ordinal>] last <object-type>
-.R
-.DE
-.DS
-.CW
-<ordinal> ::=
- INT th
- INT st | INT nd | INT rd
- ` <any-expr> 'th
-.R
-.DE
-.DS
-.CW
-<object-type> ::=
- box
- circle
- ellipse
- arc
- line
- arrow
- spline
- '[]'
- TEXT
-.R
-.DE
-.PP
-As Kernighan notes, \[lq]since barbarisms like \fB1th\fP and \fB3th\fP are
-barbaric, synonyms like \fB1st\fP and \fB3rd\fP are accepted as well.\[rq]
-Objects of a given type are numbered from 1 upwards in order of
-declaration; the \fBlast\fP modifier counts backwards.
-.PP
-The \[lq]'th\[rq] form (which allows you to select a previous object with
-an expression, as opposed to a numeric literal) is not documented in DWB's
-\fIpic\/\fR(1).
-.PP
-The \[la]\,\fIxxx\/\fP-of\|\[ra] rule is special: The lexical parser checks whether
-\fIxxx\fP is followed by the token `of' without eliminating it so that
-the grammar parser can still see `of'. Valid examples of specifying a
-place with corner and label are thus
-.DS
-.CW
-A .n
-\&.n of A
-\&.n A
-north of A
-.R
-.DE
-.LP
-while
-.DS
-.CW
-north A
-A north
-.R
-.DE
-both cause a syntax error. (DWB \fBpic\fP also allows the weird form
-`A\ north\ of'.)
-.PP
-Here the special rules for the `with' keyword using a path:
-.DS
-.CW
-<path> ::=
- <relative-path>
- ( <relative-path> , <relative-path> )
-.R
-.DE
-.DS
-.CW
-<relative-path> ::=
- <corner>
- . LABEL [. LABEL ...] [<corner>]
-.R
-.DE
-.PP
-The following style variables control output:
-.TS H
-center tab(@), linesize(2);
-lb | lb | lb
-l | n | l.
-.sp 2p
-Style Variable@Default@What It Does
-.sp 2p
-_
-.sp 2p
-.TH
-boxht@0.5@Default height of a box
-boxwid@0.75@Default height of a box
-lineht@0.5@Default length of vertical line
-linewid@0.75@Default length of horizontal line
-arcrad @0.25@Default radius of an arc
-circlerad@0.25@Default radius of a circle
-ellipseht@0.5@Default height of an ellipse
-ellipsewid@0.75@Default width of an ellipse
-moveht@0.5@Default length of vertical move
-movewid@0.75@Default length of horizontal move
-textht@0@Default height of box enclosing a text object
-textwid@0@Default width of box enclosing a text object
-arrowht@0.1@Length of arrowhead along shaft
-arrowwid@0.05@Width of rear of arrowhead
-arrowhead@1@Enable/disable arrowhead filling
-dashwid@0.05@Interval for dashed lines
-maxpswid@11@Maximum width of picture
-maxpsht@8.5@Maximum height of picture
-scale@1@Unit scale factor
-fillval@0.5@Default fill value
-.sp 5p
-_
-.TE
-Any of these can be set by assignment, or reset using the \fBreset\fP
-statement. Style variables assigned within `[\ ]' blocks are restored to
-their beginning-of-block value on exit; top-level assignments persist
-across pictures. Dimensions are divided by \fBscale\fR on output.
-.PP
-All \fBpic\fP expressions are evaluated in floating point; units
-are always inches (a trailing `i' or `I' is ignored). Expressions have
-the following simple grammar, with semantics very similar to
-C\~expressions:
-.DS
-.CW
-<expr> ::=
- VARIABLE
- NUMBER
- <place> <place-attribute>
- <expr> <op> <expr>
- - <expr>
- ( <any-expr> )
- ! <expr>
- <func1> ( <any-expr> )
- <func2> ( <any-expr> , <any-expr> )
- rand ( )
-.R
-.DE
-.DS
-.CW
-<place-attribute>
- .x | .y | .h[eigh]t | .wid[th] | .rad
-.R
-.DE
-.DS
-.CW
-<op> ::=
- + | - | * | / | % | ^ | '<' | '>' | '<=' | '>='
-.R
-.DE
-.DS
-.CW
-<func1> ::=
- sin | cos | log | exp | sqrt | int | rand | srand
-.R
-.DE
-.DS
-.CW
-<func2> ::=
- atan2 | max | min
-.R
-.DE
-.LP
-Both \fBexp\fP and \fBlog\fP are base 10; \fBint\fP does integer
-truncation; and \fBrand()\fP returns a random number in [0-1).
-.PP
-There are \fBdefine\fP and \fBundef\fR statements which are not part
-of the grammar (they behave as pre-processor macros to the language).
-These may be used to define pseudo-functions.
-.DS
-.CW
-\fBdefine\fP \fIname\fP \fB{\fP \fIreplacement-text\fP \fB}\fP
-.R
-.DE
-.LP
-This defines \fIname\fR as a macro to be replaced by the replacement
-text (not including the braces). The macro may be called as
-.DS
-.CW
-\fIname\/\fB(\,\fIarg1, arg2, .\|.\|., argn\fB\/)\fR
-.R
-.DE
-.LP
-The arguments (if any) will be substituted for tokens $1, $2 .\|.\|.\& $n
-appearing in the replacement text. To undefine a macro, say \fBundef\fP
-\fIname\fR, specifying the name to be undefined.
-.\"%%POSTLUDE%%
-.
-.
-.NH 1
-History and Acknowledgements
-.PP
-Original \fBpic\fP was written to go with Joseph Ossanna's original
-\fItroff\/\fP(1) by Brian Kernighan, and later re-written by Kernighan
-with substantial enhancements (apparently as part of the evolution of
-\fItroff\/\fP(1) into \fIditroff\/\fP(1) to generate
-device-independent output).
-.PP
-The language had been inspired by some earlier graphics languages
-including \fBideal\fP and \fBgrap\fP. Kernighan credits Chris van Wyk
-(the designer of \fBideal\fP) with many of the ideas that went into
-\fBpic\fP.
-.PP
-.\" the original definitions of EQ and EN cause insertion of vertical
-.\" space which is not appropriate here
-.de EQ
-..
-.de EN
-..
-.EQ
-delim $$
-.EN
-The \fBpic\fP language was originally described by Brian Kernighan in
-Bell Labs Computing Science Technical Report #116 (you can obtain a
-PostScript copy of the revised version, [1], by sending a mail message to
-\fInetlib@research.att.com\fP with a body of `send 116 from
-research/cstr'). There have been two revisions, in 1984 and 1991.
-.PP
-The document you are reading effectively subsumes Kernighan's
-description; it was written to fill in lacun\[ae] in the exposition and
-integrate in descriptions of the GNU \fIgpic\/\fP(1) features.
-.PP
-The GNU \fBgpic\fR implementation was written by James Clark
-\[la]\,\fIjjc@jclark.com\/\fP\[ra]. It is currently maintained by Werner
-Lemberg \[la]\,\fIwl@gnu.org\/\fP\[ra].
-.
-.
-.NH 1
-Bibliography
-.IP 1.
-Kernighan, B. W. \fBPIC \[em] A Graphics Language for Typesetting
-(Revised User Manual)\fP. Bell Labs Computing Science Technical Report
-#116, December 1991.
-.IP 2.
-Van Wyk, C. J. \fBA high-level language for specifying pictures\fP.
-\fIACM Transactions On Graphics\fP 1,2 (1982) 163-182.
-.
-.\" end of pic.ms
diff --git a/contrib/groff/doc/texinfo.tex b/contrib/groff/doc/texinfo.tex
deleted file mode 100644
index 7bee6f411094..000000000000
--- a/contrib/groff/doc/texinfo.tex
+++ /dev/null
@@ -1,7086 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-%
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{2004-11-25.16}
-%
-% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
-% Foundation, Inc.
-%
-% This texinfo.tex file is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation; either version 2, or (at
-% your option) any later version.
-%
-% This texinfo.tex file is distributed in the hope that it will be
-% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-% General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this texinfo.tex file; see the file COPYING. If not, write
-% to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor,
-% Boston, MA 02110-1301, USA.
-%
-% As a special exception, when this file is read by TeX when processing
-% a Texinfo source document, you may use the result without
-% restriction. (This has been our intent since Texinfo was invented.)
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
-% ftp://tug.org/tex/texinfo.tex
-% (and all CTAN mirrors, see http://www.ctan.org).
-% The texinfo.tex in any given distribution could well be out
-% of date, so if that's what you're using, please check.
-%
-% Send bug reports to bug-texinfo@gnu.org. Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem. Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution. For a simple
-% manual foo.texi, however, you can get away with this:
-% tex foo.texi
-% texindex foo.??
-% tex foo.texi
-% tex foo.texi
-% dvips foo.dvi -o # or whatever; this makes foo.ps.
-% The extra TeX runs get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages, to some
-% extent. You can get the existing language-specific files from the
-% full Texinfo distribution.
-%
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
-\message{Basics,}
-\chardef\other=12
-
-% We never want plain's \outer definition of \+ in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Save some plain tex macros whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexfootnote=\footnote
-\let\ptexgtr=>
-\let\ptexhat=^
-\let\ptexi=\i
-\let\ptexindent=\indent
-\let\ptexinsert=\insert
-\let\ptexlbrace=\{
-\let\ptexless=<
-\let\ptexnewwrite\newwrite
-\let\ptexnoindent=\noindent
-\let\ptexplus=+
-\let\ptexrbrace=\}
-\let\ptexslash=\/
-\let\ptexstar=\*
-\let\ptext=\t
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
- \let\linenumber = \empty % Pre-3.0.
-\else
- \def\linenumber{l.\the\inputlineno:\space}
-\fi
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-
-% In some macros, we cannot use the `\? notation---the left quote is
-% in some cases the escape char.
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
-\chardef\dotChar = `\.
-\chardef\exclamChar= `\!
-\chardef\questChar = `\?
-\chardef\semiChar = `\;
-\chardef\underChar = `\_
-
-\chardef\spaceChar = `\ %
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode\spaceChar=\spacecat}
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-% The following is used inside several \edef's.
-\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
-
-% Hyphenation fixes.
-\hyphenation{
- Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
- ap-pen-dix bit-map bit-maps
- data-base data-bases eshell fall-ing half-way long-est man-u-script
- man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
- par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
- spell-ing spell-ings
- stand-alone strong-est time-stamp time-stamps which-ever white-space
- wide-spread wrap-around
-}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @| inserts a changebar to the left of the current line. It should
-% surround any changed text. This approach does *not* work if the
-% change spans more than two lines of output. To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
- % \vadjust can only be used in horizontal mode.
- \leavevmode
- %
- % Append this vertical mode material after the current line in the output.
- \vadjust{%
- % We want to insert a rule with the height and depth of the current
- % leading; that is exactly what \strutbox is supposed to record.
- \vskip-\baselineskip
- %
- % \vadjust-items are inserted at the left edge of the type. So
- % the \llap here moves out into the left-hand margin.
- \llap{%
- %
- % For a thicker or thinner bar, change the `1pt'.
- \vrule height\baselineskip width1pt
- %
- % This is the space between the bar and the text.
- \hskip 12pt
- }%
- }%
-}
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal. We don't just call \tracingall here,
-% since that produces some useless output on the terminal. We also make
-% some effort to order the tracing commands to reduce output in the log
-% file; cf. trace.sty in LaTeX.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{%
- \tracingstats2
- \tracingpages1
- \tracinglostchars2 % 2 gives us more in etex
- \tracingparagraphs1
- \tracingoutput1
- \tracingmacros2
- \tracingrestores1
- \showboxbreadth\maxdimen \showboxdepth\maxdimen
- \ifx\eTeXversion\undefined\else % etex gives us more logging
- \tracingscantokens1
- \tracingifs1
- \tracinggroups1
- \tracingnesting2
- \tracingassigns1
- \fi
- \tracingcommands3 % 3 gives us more in etex
- \errorcontextlines16
-}%
-
-% add check for \lastpenalty to plain's definitions. If the last thing
-% we did was a \nobreak, we don't want to insert more space.
-%
-\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
- \removelastskip\penalty-50\smallskip\fi\fi}
-\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
- \removelastskip\penalty-100\medskip\fi\fi}
-\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
- \removelastskip\penalty-200\bigskip\fi\fi}
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument. Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
- \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
- %
- \ifodd\pageno \advance\hoffset by \bindingoffset
- \else \advance\hoffset by -\bindingoffset\fi
- %
- % Do this outside of the \shipout so @code etc. will be expanded in
- % the headline as they should be, not taken literally (outputting ''code).
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
- %
- {%
- % Have to do this stuff outside the \shipout because we want it to
- % take effect in \write's, yet the group defined by the \vbox ends
- % before the \shipout runs.
- %
- \escapechar = `\\ % use backslash in output files.
- \indexdummies % don't expand commands in the output.
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
- % Do this early so pdf references go to the beginning of the page.
- \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
- %
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
- \vskip-\topandbottommargin
- \vtop to0pt{%
- \line{\ewtop\hfil\ewtop}%
- \nointerlineskip
- \line{%
- \vbox{\moveleft\cornerthick\nstop}%
- \hfill
- \vbox{\moveright\cornerthick\nstop}%
- }%
- \vss}%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
- \ifodd\pageno\hskip\bindingoffset\fi
- \vbox\bgroup
- \fi
- %
- \unvbox\headlinebox
- \pagebody{#1}%
- \ifdim\ht\footlinebox > 0pt
- % Only leave this space if the footline is nonempty.
- % (We lessened \vsize for it in \oddfootingxxx.)
- % The \baselineskip=24pt in plain's \makefootline has no effect.
- \vskip 2\baselineskip
- \unvbox\footlinebox
- \fi
- %
- \ifcropmarks
- \egroup % end of \vbox\bgroup
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
- \vbox to0pt{\vss
- \line{%
- \vbox{\moveleft\cornerthick\nsbot}%
- \hfill
- \vbox{\moveright\cornerthick\nsbot}%
- }%
- \nointerlineskip
- \line{\ewbot\hfil\ewbot}%
- }%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
- }% end of group with \normalturnoffactive
- \advancepageno
- \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
- \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks. Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
- {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
- {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1. The argument is the rest of
-% the input line (except we remove a trailing comment). #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg{\parseargusing{}}
-\def\parseargusing#1#2{%
- \def\next{#2}%
- \begingroup
- \obeylines
- \spaceisspace
- #1%
- \parseargline\empty% Insert the \empty token, see \finishparsearg below.
-}
-
-{\obeylines %
- \gdef\parseargline#1^^M{%
- \endgroup % End of the group started in \parsearg.
- \argremovecomment #1\comment\ArgTerm%
- }%
-}
-
-% First remove any @comment, then any @c comment.
-\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
-
-% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
-%
-% \argremovec might leave us with trailing space, e.g.,
-% @end itemize @c foo
-% This space token undergoes the same procedure and is eventually removed
-% by \finishparsearg.
-%
-\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
-\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
-\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
- \def\temp{#3}%
- \ifx\temp\empty
- % We cannot use \next here, as it holds the macro to run;
- % thus we reuse \temp.
- \let\temp\finishparsearg
- \else
- \let\temp\argcheckspaces
- \fi
- % Put the space token in:
- \temp#1 #3\ArgTerm
-}
-
-% If a _delimited_ argument is enclosed in braces, they get stripped; so
-% to get _exactly_ the rest of the line, we had to prevent such situation.
-% We prepended an \empty token at the very beginning and we expand it now,
-% just before passing the control to \next.
-% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
-% either the null string, or it ends with \^^M---thus there is no danger
-% that a pair of braces would be stripped.
-%
-% But first, we have to remove the trailing space token.
-%
-\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
-
-% \parseargdef\foo{...}
-% is roughly equivalent to
-% \def\foo{\parsearg\Xfoo}
-% \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick. --kasal, 16nov03
-
-\def\parseargdef#1{%
- \expandafter \doparseargdef \csname\string#1\endcsname #1%
-}
-\def\doparseargdef#1#2{%
- \def#2{\parsearg#1}%
- \def#1##1%
-}
-
-% Several utility definitions with active space:
-{
- \obeyspaces
- \gdef\obeyedspace{ }
-
- % Make each space character in the input produce a normal interword
- % space in the output. Don't allow a line break at this space, as this
- % is used only in environments like @example, where each line of input
- % should produce a line of output anyway.
- %
- \gdef\sepspaces{\obeyspaces\let =\tie}
-
- % If an index command is used in an @example environment, any spaces
- % therein should become regular spaces in the raw index file, not the
- % expansion of \tie (\leavevmode \penalty \@M \ ).
- \gdef\unsepspaces{\let =\space}
-}
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-% Define the framework for environments in texinfo.tex. It's used like this:
-%
-% \envdef\foo{...}
-% \def\Efoo{...}
-%
-% It's the responsibility of \envdef to insert \begingroup before the
-% actual body; @end closes the group after calling \Efoo. \envdef also
-% defines \thisenv, so the current environment is known; @end checks
-% whether the environment name matches. The \checkenv macro can also be
-% used to check whether the current environment is the one expected.
-%
-% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-% are not treated as enviroments; they don't open a group. (The
-% implementation of @end takes care not to call \endgroup in this
-% special case.)
-
-
-% At runtime, environments start with this:
-\def\startenvironment#1{\begingroup\def\thisenv{#1}}
-% initialize
-\let\thisenv\empty
-
-% ... but they get defined via ``\envdef\foo{...}'':
-\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
-\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
-
-% Check whether we're in the right environment:
-\def\checkenv#1{%
- \def\temp{#1}%
- \ifx\thisenv\temp
- \else
- \badenverr
- \fi
-}
-
-% Evironment mismatch, #1 expected:
-\def\badenverr{%
- \errhelp = \EMsimple
- \errmessage{This command can appear only \inenvironment\temp,
- not \inenvironment\thisenv}%
-}
-\def\inenvironment#1{%
- \ifx#1\empty
- out of any environment%
- \else
- in environment \expandafter\string#1%
- \fi
-}
-
-% @end foo executes the definition of \Efoo.
-% But first, it executes a specialized version of \checkenv
-%
-\parseargdef\end{%
- \if 1\csname iscond.#1\endcsname
- \else
- % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
- \expandafter\checkenv\csname#1\endcsname
- \csname E#1\endcsname
- \endgroup
- \fi
-}
-
-\newhelp\EMsimple{Press RETURN to continue.}
-
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
- % Definitions to produce \{ and \} commands for indices,
- % and @{ and @} for the aux file.
- \catcode`\{ = \other \catcode`\} = \other
- \catcode`\[ = 1 \catcode`\] = 2
- \catcode`\! = 0 \catcode`\\ = \other
- !gdef!lbracecmd[\{]%
- !gdef!rbracecmd[\}]%
- !gdef!lbraceatcmd[@{]%
- !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% @comma{} to avoid , parsing problems.
-\let\comma = ,
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown @ordf @ordm
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
- \def\temp{#1}%
- \ifx\temp\imacro \ptexi
- \else\ifx\temp\jmacro \j
- \else \errmessage{@dotless can be used only with i or j}%
- \fi\fi
-}
-
-% The \TeX{} logo, as in plain, but resetting the spacing so that a
-% period following counts as ending a sentence. (Idea found in latex.)
-%
-\edef\TeX{\TeX \spacefactor=1000 }
-
-% @LaTeX{} logo. Not quite the same results as the definition in
-% latex.ltx, since we use a different font for the raised A; it's most
-% convenient for us to use an explicitly smaller font, rather than using
-% the \scriptstyle font (since we don't reset \scriptstyle and
-% \scriptscriptstyle).
-%
-\def\LaTeX{%
- L\kern-.36em
- {\setbox0=\hbox{T}%
- \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
- \kern-.15em
- \TeX
-}
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @/ allows a line break.
-\let\/=\allowbreak
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
-
-% @w prevents a word break. Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line. According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0). If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-% Another complication is that the group might be very large. This can
-% cause the glue on the previous page to be unduly stretched, because it
-% does not have much material. In this case, it's better to add an
-% explicit \vfill so that the extra space is at the bottom. The
-% threshold for doing this is if the group is more than \vfilllimit
-% percent of a page (\vfilllimit can be changed inside of @tex).
-%
-\newbox\groupbox
-\def\vfilllimit{0.7}
-%
-\envdef\group{%
- \ifnum\catcode`\^^M=\active \else
- \errhelp = \groupinvalidhelp
- \errmessage{@group invalid in context where filling is enabled}%
- \fi
- \startsavinginserts
- %
- \setbox\groupbox = \vtop\bgroup
- % Do @comment since we are called inside an environment such as
- % @example, where each end-of-line in the input causes an
- % end-of-line in the output. We don't want the end-of-line after
- % the `@group' to put extra space in the output. Since @group
- % should appear on a line by itself (according to the Texinfo
- % manual), we don't worry about eating any user text.
- \comment
-}
-%
-% The \vtop produces a box with normal height and large depth; thus, TeX puts
-% \baselineskip glue before it, and (when the next line of text is done)
-% \lineskip glue after it. Thus, space below is not quite equal to space
-% above. But it's pretty close.
-\def\Egroup{%
- % To get correct interline space between the last line of the group
- % and the first line afterwards, we have to propagate \prevdepth.
- \endgraf % Not \par, as it may have been set to \lisppar.
- \global\dimen1 = \prevdepth
- \egroup % End the \vtop.
- % \dimen0 is the vertical size of the group's box.
- \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
- % \dimen2 is how much space is left on the page (more or less).
- \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
- % if the group doesn't fit on the current page, and it's a big big
- % group, force a page break.
- \ifdim \dimen0 > \dimen2
- \ifdim \pagetotal < \vfilllimit\pageheight
- \page
- \fi
- \fi
- \box\groupbox
- \prevdepth = \dimen1
- \checkinserts
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil \mil=0.001in
-
-% Old definition--didn't work.
-%\parseargdef\need{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\parseargdef\need{%
- % Ensure vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
- % If the @need value is less than one line space, it's useless.
- \dimen0 = #1\mil
- \dimen2 = \ht\strutbox
- \advance\dimen2 by \dp\strutbox
- \ifdim\dimen0 > \dimen2
- %
- % Do a \strut just to make the height of this box be normal, so the
- % normal leading is inserted relative to the preceding line.
- % And a page break here is fine.
- \vtop to #1\mil{\strut\vfil}%
- %
- % TeX does not even consider page breaks if a penalty added to the
- % main vertical list is 10000 or more. But in order to see if the
- % empty box we just added fits on the page, we must make it consider
- % page breaks. On the other hand, we don't want to actually break the
- % page after the empty box. So we use a penalty of 9999.
- %
- % There is an extremely small chance that TeX will actually break the
- % page at this \penalty, if there are no other feasible breakpoints in
- % sight. (If the user is using lots of big @group commands, which
- % almost-but-not-quite fill up a page, TeX will have a hard time doing
- % good page breaking, for example.) However, I could not construct an
- % example where a page broke at this \penalty; if it happens in a real
- % document, then we can reconsider our strategy.
- \penalty9999
- %
- % Back up by the size of the box, whether we did a page break or not.
- \kern -#1\mil
- %
- % Do not allow a page break right after this kern.
- \nobreak
- \fi
-}
-
-% @br forces paragraph break (and is undocumented).
-
-\let\br = \par
-
-% @page forces the start of a new page.
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
-
-% This defn is used inside nofill environments such as @example.
-\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
- \leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-% paragraph. For more general purposes, use the \margin insertion
-% class. WHICH is `l' or `r'.
-%
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-%
-\def\doinmargin#1#2{\strut\vadjust{%
- \nobreak
- \kern-\strutdepth
- \vtop to \strutdepth{%
- \baselineskip=\strutdepth
- \vss
- % if you have multiple lines of stuff to put here, you'll need to
- % make the vbox yourself of the appropriate size.
- \ifx#1l%
- \llap{\ignorespaces #2\hskip\inmarginspacing}%
- \else
- \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
- \fi
- \null
- }%
-}}
-\def\inleftmargin{\doinmargin l}
-\def\inrightmargin{\doinmargin r}
-%
-% @inmargin{TEXT [, RIGHT-TEXT]}
-% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-% else use TEXT for both).
-%
-\def\inmargin#1{\parseinmargin #1,,\finish}
-\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \def\lefttext{#1}% have both texts
- \def\righttext{#2}%
- \else
- \def\lefttext{#1}% have only one text
- \def\righttext{#1}%
- \fi
- %
- \ifodd\pageno
- \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
- \else
- \def\temp{\inleftmargin\lefttext}%
- \fi
- \temp
-}
-
-% @include file insert text of that file as input.
-%
-\def\include{\parseargusing\filenamecatcodes\includezzz}
-\def\includezzz#1{%
- \pushthisfilestack
- \def\thisfile{#1}%
- {%
- \makevalueexpandable
- \def\temp{\input #1 }%
- \expandafter
- }\temp
- \popthisfilestack
-}
-\def\filenamecatcodes{%
- \catcode`\\=\other
- \catcode`~=\other
- \catcode`^=\other
- \catcode`_=\other
- \catcode`|=\other
- \catcode`<=\other
- \catcode`>=\other
- \catcode`+=\other
- \catcode`-=\other
-}
-
-\def\pushthisfilestack{%
- \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
-}
-\def\pushthisfilestackX{%
- \expandafter\pushthisfilestackY\thisfile\StackTerm
-}
-\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
- \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
-}
-
-\def\popthisfilestack{\errthisfilestackempty}
-\def\errthisfilestackempty{\errmessage{Internal error:
- the stack of filenames is empty.}}
-
-\def\thisfile{}
-
-% @center line
-% outputs that line, centered.
-%
-\parseargdef\center{%
- \ifhmode
- \let\next\centerH
- \else
- \let\next\centerV
- \fi
- \next{\hfil \ignorespaces#1\unskip \hfil}%
-}
-\def\centerH#1{%
- {%
- \hfil\break
- \advance\hsize by -\leftskip
- \advance\hsize by -\rightskip
- \line{#1}%
- \break
- }%
-}
-\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
-
-% @sp n outputs n lines of vertical space
-
-\parseargdef\sp{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore is another way to write a comment
-
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% NCHARS can also be the word `asis' or `none'.
-% We cannot feasibly implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\parseargdef\paragraphindent{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \defaultparindent = 0pt
- \else
- \defaultparindent = #1em
- \fi
- \fi
- \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\parseargdef\exampleindent{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \lispnarrowing = 0pt
- \else
- \lispnarrowing = #1em
- \fi
- \fi
-}
-
-% @firstparagraphindent WORD
-% If WORD is `none', then suppress indentation of the first paragraph
-% after a section heading. If WORD is `insert', then do indent at such
-% paragraphs.
-%
-% The paragraph indentation is suppressed or not by calling
-% \suppressfirstparagraphindent, which the sectioning commands do.
-% We switch the definition of this back and forth according to WORD.
-% By default, we suppress indentation.
-%
-\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-\def\insertword{insert}
-%
-\parseargdef\firstparagraphindent{%
- \def\temp{#1}%
- \ifx\temp\noneword
- \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
- \else\ifx\temp\insertword
- \let\suppressfirstparagraphindent = \relax
- \else
- \errhelp = \EMsimple
- \errmessage{Unknown @firstparagraphindent option `\temp'}%
- \fi\fi
-}
-
-% Here is how we actually suppress indentation. Redefine \everypar to
-% \kern backwards by \parindent, and then reset itself to empty.
-%
-% We also make \indent itself not actually do anything until the next
-% paragraph.
-%
-\gdef\dosuppressfirstparagraphindent{%
- \gdef\indent{%
- \restorefirstparagraphindent
- \indent
- }%
- \gdef\noindent{%
- \restorefirstparagraphindent
- \noindent
- }%
- \global\everypar = {%
- \kern -\parindent
- \restorefirstparagraphindent
- }%
-}
-
-\gdef\restorefirstparagraphindent{%
- \global \let \indent = \ptexindent
- \global \let \noindent = \ptexnoindent
- \global \everypar = {}%
-}
-
-
-% @asis just yields its argument. Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}. So make
-% _ active, and distinguish by seeing if the current family is \slfam,
-% which is what @var uses.
-{
- \catcode\underChar = \active
- \gdef\mathunderscore{%
- \catcode\underChar=\active
- \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
- }
-}
-% Another complication: we want \\ (and @\) to output a \ character.
-% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-% this is not advertised and we don't care. Texinfo does not
-% otherwise define @\.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
- \tex
- \mathunderscore
- \let\\ = \mathbackslash
- \mathactive
- $\finishmath
-}
-\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an argument
-% to a command which sets the catcodes (such as @item or @section).
-%
-{
- \catcode`^ = \active
- \catcode`< = \active
- \catcode`> = \active
- \catcode`+ = \active
- \gdef\mathactive{%
- \let^ = \ptexhat
- \let< = \ptexless
- \let> = \ptexgtr
- \let+ = \ptexplus
- }
-}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{$\ptexbullet$}
-\def\minus{$-$}
-
-% @dots{} outputs an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
- \leavevmode
- \hbox to 1.5em{%
- \hskip 0pt plus 0.25fil
- .\hfil.\hfil.%
- \hskip 0pt plus 0.5fil
- }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
- \dots
- \spacefactor=3000
-}
-
-% @comma{} is so commas can be inserted into text without messing up
-% Texinfo's parsing.
-%
-\let\comma = ,
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
- \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \iflinks
- \tryauxfile
- % Open the new aux file. TeX will close it automatically at exit.
- \immediate\openout\auxfile=\jobname.aux
- \fi % \openindices needs to do some work in any case.
- \openindices
- \let\setfilename=\comment % Ignore extra @setfilename cmds.
- %
- % If texinfo.cnf is present on the system, read it.
- % Useful for site-wide @afourpaper, etc.
- \openin 1 texinfo.cnf
- \ifeof 1 \else \input texinfo.cnf \fi
- \closein 1
- %
- \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
- \newindex{cp}%
- \newcodeindex{fn}%
- \newcodeindex{vr}%
- \newcodeindex{tp}%
- \newcodeindex{ky}%
- \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-\newtoks\toksA
-\newtoks\toksB
-\newtoks\toksC
-\newtoks\toksD
-\newbox\boxA
-\newcount\countA
-\newif\ifpdf
-\newif\ifpdfmakepagedest
-
-% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-% can be set). So we test for \relax and 0 as well as \undefined,
-% borrowed from ifpdf.sty.
-\ifx\pdfoutput\undefined
-\else
- \ifx\pdfoutput\relax
- \else
- \ifcase\pdfoutput
- \else
- \pdftrue
- \fi
- \fi
-\fi
-%
-\ifpdf
- \input pdfcolor
- \pdfcatalog{/PageMode /UseOutlines}%
- \def\dopdfimage#1#2#3{%
- \def\imagewidth{#2}%
- \def\imageheight{#3}%
- % without \immediate, pdftex seg faults when the same image is
- % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
- \ifnum\pdftexversion < 14
- \immediate\pdfimage
- \else
- \immediate\pdfximage
- \fi
- \ifx\empty\imagewidth\else width \imagewidth \fi
- \ifx\empty\imageheight\else height \imageheight \fi
- \ifnum\pdftexversion<13
- #1.pdf%
- \else
- {#1.pdf}%
- \fi
- \ifnum\pdftexversion < 14 \else
- \pdfrefximage \pdflastximage
- \fi}
- \def\pdfmkdest#1{{%
- % We have to set dummies so commands such as @code in a section title
- % aren't expanded.
- \atdummies
- \normalturnoffactive
- \pdfdest name{#1} xyz%
- }}
- \def\pdfmkpgn#1{#1}
- \let\linkcolor = \Blue % was Cyan, but that seems light?
- \def\endlink{\Black\pdfendlink}
- % Adding outlines to PDF; macros for calculating structure of outlines
- % come from Petr Olsak
- \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
- \else \csname#1\endcsname \fi}
- \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
- \advance\tempnum by 1
- \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
- %
- % #1 is the section text. #2 is the pdf expression for the number
- % of subentries (or empty, for subsubsections). #3 is the node
- % text, which might be empty if this toc entry had no
- % corresponding node. #4 is the page number.
- %
- \def\dopdfoutline#1#2#3#4{%
- % Generate a link to the node text if that exists; else, use the
- % page number. We could generate a destination for the section
- % text in the case where a section has no node, but it doesn't
- % seem worthwhile, since most documents are normally structured.
- \def\pdfoutlinedest{#3}%
- \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
- %
- \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
- }
- %
- \def\pdfmakeoutlines{%
- \begingroup
- % Thanh's hack / proper braces in bookmarks
- \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
- \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
- %
- % Read toc silently, to get counts of subentries for \pdfoutline.
- \def\numchapentry##1##2##3##4{%
- \def\thischapnum{##2}%
- \def\thissecnum{0}%
- \def\thissubsecnum{0}%
- }%
- \def\numsecentry##1##2##3##4{%
- \advancenumber{chap\thischapnum}%
- \def\thissecnum{##2}%
- \def\thissubsecnum{0}%
- }%
- \def\numsubsecentry##1##2##3##4{%
- \advancenumber{sec\thissecnum}%
- \def\thissubsecnum{##2}%
- }%
- \def\numsubsubsecentry##1##2##3##4{%
- \advancenumber{subsec\thissubsecnum}%
- }%
- \def\thischapnum{0}%
- \def\thissecnum{0}%
- \def\thissubsecnum{0}%
- %
- % use \def rather than \let here because we redefine \chapentry et
- % al. a second time, below.
- \def\appentry{\numchapentry}%
- \def\appsecentry{\numsecentry}%
- \def\appsubsecentry{\numsubsecentry}%
- \def\appsubsubsecentry{\numsubsubsecentry}%
- \def\unnchapentry{\numchapentry}%
- \def\unnsecentry{\numsecentry}%
- \def\unnsubsecentry{\numsubsecentry}%
- \def\unnsubsubsecentry{\numsubsubsecentry}%
- \input \jobname.toc
- %
- % Read toc second time, this time actually producing the outlines.
- % The `-' means take the \expnumber as the absolute number of
- % subentries, which we calculated on our first read of the .toc above.
- %
- % We use the node names as the destinations.
- \def\numchapentry##1##2##3##4{%
- \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
- \def\numsecentry##1##2##3##4{%
- \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
- \def\numsubsecentry##1##2##3##4{%
- \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
- \def\numsubsubsecentry##1##2##3##4{% count is always zero
- \dopdfoutline{##1}{}{##3}{##4}}%
- %
- % PDF outlines are displayed using system fonts, instead of
- % document fonts. Therefore we cannot use special characters,
- % since the encoding is unknown. For example, the eogonek from
- % Latin 2 (0xea) gets translated to a | character. Info from
- % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
- %
- % xx to do this right, we have to translate 8-bit characters to
- % their "best" equivalent, based on the @documentencoding. Right
- % now, I guess we'll just let the pdf reader have its way.
- \indexnofonts
- \turnoffactive
- \input \jobname.toc
- \endgroup
- }
- %
- \def\makelinks #1,{%
- \def\params{#1}\def\E{END}%
- \ifx\params\E
- \let\nextmakelinks=\relax
- \else
- \let\nextmakelinks=\makelinks
- \ifnum\lnkcount>0,\fi
- \picknum{#1}%
- \startlink attr{/Border [0 0 0]}
- goto name{\pdfmkpgn{\the\pgn}}%
- \linkcolor #1%
- \advance\lnkcount by 1%
- \endlink
- \fi
- \nextmakelinks
- }
- \def\picknum#1{\expandafter\pn#1}
- \def\pn#1{%
- \def\p{#1}%
- \ifx\p\lbrace
- \let\nextpn=\ppn
- \else
- \let\nextpn=\ppnn
- \def\first{#1}
- \fi
- \nextpn
- }
- \def\ppn#1{\pgn=#1\gobble}
- \def\ppnn{\pgn=\first}
- \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
- \def\skipspaces#1{\def\PP{#1}\def\D{|}%
- \ifx\PP\D\let\nextsp\relax
- \else\let\nextsp\skipspaces
- \ifx\p\space\else\addtokens{\filename}{\PP}%
- \advance\filenamelength by 1
- \fi
- \fi
- \nextsp}
- \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
- \ifnum\pdftexversion < 14
- \let \startlink \pdfannotlink
- \else
- \let \startlink \pdfstartlink
- \fi
- \def\pdfurl#1{%
- \begingroup
- \normalturnoffactive\def\@{@}%
- \makevalueexpandable
- \leavevmode\Red
- \startlink attr{/Border [0 0 0]}%
- user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
- \endgroup}
- \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
- \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
- \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
- \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
- \def\maketoks{%
- \expandafter\poptoks\the\toksA|ENDTOKS|\relax
- \ifx\first0\adn0
- \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
- \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
- \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
- \else
- \ifnum0=\countA\else\makelink\fi
- \ifx\first.\let\next=\done\else
- \let\next=\maketoks
- \addtokens{\toksB}{\the\toksD}
- \ifx\first,\addtokens{\toksB}{\space}\fi
- \fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \next}
- \def\makelink{\addtokens{\toksB}%
- {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
- \def\pdflink#1{%
- \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
- \linkcolor #1\endlink}
- \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\else
- \let\pdfmkdest = \gobble
- \let\pdfurl = \gobble
- \let\endlink = \relax
- \let\linkcolor = \relax
- \let\pdfmakeoutlines = \relax
-\fi % \ifx\pdfoutput
-
-
-\message{fonts,}
-
-% Change the current font style to #1, remembering it in \curfontstyle.
-% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-% italics, not bold italics.
-%
-\def\setfontstyle#1{%
- \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
- \csname ten#1\endcsname % change the current font
-}
-
-% Select #1 fonts with the current style.
-%
-\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-
-\def\rm{\fam=0 \setfontstyle{rm}}
-\def\it{\fam=\itfam \setfontstyle{it}}
-\def\sl{\fam=\slfam \setfontstyle{sl}}
-\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-\def\tt{\fam=\ttfam \setfontstyle{tt}}
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf.
-\newfam\sffam
-\def\sf{\fam=\sffam \setfontstyle{sf}}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this font style.
-\def\ttsl{\setfontstyle{ttsl}}
-
-% Default leading.
-\newdimen\textleading \textleading = 13.2pt
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly. There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
- \normalbaselineskip = #1\relax
- \normallineskip = \lineskipfactor\normalbaselineskip
- \normalbaselines
- \setbox\strutbox =\hbox{%
- \vrule width0pt height\strutheightpercent\baselineskip
- depth \strutdepthpercent \baselineskip
- }%
-}
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx} %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-% Text fonts (11.2pt, magstep1).
-\def\textnominalsize{11pt}
-\edef\mainmagstep{\magstephalf}
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstep1}
-\setfont\deftt\ttshape{10}{\magstep1}
-\setfont\defttsl\ttslshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}
-\setfont\smalltt\ttshape{9}{1000}
-\setfont\smallbf\bfshape{10}{900}
-\setfont\smallit\itshape{9}{1000}
-\setfont\smallsl\slshape{9}{1000}
-\setfont\smallsf\sfshape{9}{1000}
-\setfont\smallsc\scshape{10}{900}
-\setfont\smallttsl\ttslshape{10}{900}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-
-% Fonts for small examples (8pt).
-\def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}
-\setfont\smallertt\ttshape{8}{1000}
-\setfont\smallerbf\bfshape{10}{800}
-\setfont\smallerit\itshape{8}{1000}
-\setfont\smallersl\slshape{8}{1000}
-\setfont\smallersf\sfshape{8}{1000}
-\setfont\smallersc\scshape{10}{800}
-\setfont\smallerttsl\ttslshape{10}{800}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-
-% Fonts for title page (20.4pt):
-\def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-\def\authortt{\sectt}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\def\chapnominalsize{17pt}
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\def\secnominalsize{14pt}
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% Subsection fonts (13.15pt).
-\def\ssecnominalsize{13pt}
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1315}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-
-% Reduced fonts for @acro in text (10pt).
-\def\reducednominalsize{10pt}
-\setfont\reducedrm\rmshape{10}{1000}
-\setfont\reducedtt\ttshape{10}{1000}
-\setfont\reducedbf\bfshape{10}{1000}
-\setfont\reducedit\itshape{10}{1000}
-\setfont\reducedsl\slshape{10}{1000}
-\setfont\reducedsf\sfshape{10}{1000}
-\setfont\reducedsc\scshape{10}{1000}
-\setfont\reducedttsl\ttslshape{10}{1000}
-\font\reducedi=cmmi10
-\font\reducedsy=cmsy10
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
- \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
- \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
- \textfont\ttfam=\tentt \textfont\sffam=\tensf
-}
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE. We do this because \STYLE needs to also set the
-% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
-% \tenSTYLE to set the current font.
-%
-% Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower). These relative commands are used in
-% the LaTeX logo and acronyms.
-%
-% This all needs generalizing, badly.
-%
-\def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
- \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
- \let\tenttsl=\textttsl
- \def\curfontsize{text}%
- \def\lsize{reduced}\def\lllsize{smaller}%
- \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
- \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
- \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \def\curfontsize{title}%
- \def\lsize{chap}\def\lllsize{subsec}%
- \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
-\def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
- \let\tenttsl=\chapttsl
- \def\curfontsize{chap}%
- \def\lsize{sec}\def\lllsize{text}%
- \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
- \let\tenttsl=\secttsl
- \def\curfontsize{sec}%
- \def\lsize{subsec}\def\lllsize{reduced}%
- \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
- \let\tenttsl=\ssecttsl
- \def\curfontsize{ssec}%
- \def\lsize{text}\def\lllsize{small}%
- \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts
-\def\reducedfonts{%
- \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
- \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
- \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
- \let\tenttsl=\reducedttsl
- \def\curfontsize{reduced}%
- \def\lsize{small}\def\lllsize{smaller}%
- \resetmathfonts \setleading{10.5pt}}
-\def\smallfonts{%
- \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
- \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
- \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
- \let\tenttsl=\smallttsl
- \def\curfontsize{small}%
- \def\lsize{smaller}\def\lllsize{smaller}%
- \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
- \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
- \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
- \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
- \let\tenttsl=\smallerttsl
- \def\curfontsize{smaller}%
- \def\lsize{smaller}\def\lllsize{smaller}%
- \resetmathfonts \setleading{9.5pt}}
-
-% Set the fonts to use with the @small... environments.
-\let\smallexamplefonts = \smallfonts
-
-% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
-% can fit this many characters:
-% 8.5x11=86 smallbook=72 a4=90 a5=69
-% If we use \scriptfonts (8pt), then we can fit this many characters:
-% 8.5x11=90+ smallbook=80 a4=90+ a5=77
-% For me, subjectively, the few extra characters that fit aren't worth
-% the additional smallness of 8pt. So I'm making the default 9pt.
-%
-% By the way, for comparison, here's what fits with @example (10pt):
-% 8.5x11=71 smallbook=60 a4=75 a5=58
-%
-% I wish the USA used A4 paper.
-% --karl, 24jan03.
-
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts \rm
-
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
-\setfont\shortcontsl\slshape{12}{1000}
-\setfont\shortconttt\ttshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
- \ptexslash\fi\fi\fi}
-\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
-
-% like \smartslanted except unconditionally uses \ttsl.
-% @var is set to this for defun arguments.
-\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
-
-% like \smartslanted except unconditionally use \sl. We never want
-% ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\slanted=\smartslanted
-\let\var=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-
-% @b, explicit bold.
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% @sansserif, explicit sans.
-\def\sansserif#1{{\sf #1}}
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph. Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-% Set sfcode to normal for the chars that usually have another value.
-% Can't use plain's \frenchspacing because it uses the `\x notation, and
-% sometimes \x has an active definition that messes things up.
-%
-\catcode`@=11
- \def\frenchspacing{%
- \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
- \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
- }
-\catcode`@=\other
-
-\def\t#1{%
- {\tt \rawbackslash \frenchspacing #1}%
- \null
-}
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\keyrm\rmshape{8}{1000}
-\font\keysy=cmsy9
-\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
- {%
- % Change normal interword space to be same as for the current font.
- \spaceskip = \fontdimen2\font
- %
- % Switch to typewriter.
- \tt
- %
- % But `\ ' produces the large typewriter interword space.
- \def\ {{\spaceskip = 0pt{} }}%
- %
- % Turn off hyphenation.
- \nohyphenation
- %
- \rawbackslash
- \frenchspacing
- #1%
- }%
- \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in @code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-% -- rms.
-{
- \catcode`\-=\active
- \catcode`\_=\active
- %
- \global\def\code{\begingroup
- \catcode`\-=\active \let-\codedash
- \catcode`\_=\active \let_\codeunder
- \codex
- }
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{%
- % this is all so @math{@code{var_name}+1} can work. In math mode, _
- % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
- % will therefore expand the active definition of _, which is us
- % (inside @code that is), therefore an endless loop.
- \ifusingtt{\ifmmode
- \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
- \else\normalunderscore \fi
- \discretionary{}{}{}}%
- {\_}%
-}
-\def\codex #1{\tclose{#1}\endgroup}
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-% `example' (@kbd uses ttsl only inside of @example and friends),
-% or `code' (@kbd uses normal tty font always).
-\parseargdef\kbdinputstyle{%
- \def\arg{#1}%
- \ifx\arg\worddistinct
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
- \else\ifx\arg\wordexample
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
- \else\ifx\arg\wordcode
- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
- \else
- \errhelp = \EMsimple
- \errmessage{Unknown @kbdinputstyle option `\arg'}%
- \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct.'
-\kbdinputstyle distinct
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
-\let\indicateurl=\code
-\let\env=\code
-\let\command=\code
-
-% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-% second argument specifying the text to display and an optional third
-% arg as text to display instead of (rather than in addition to) the url
-% itself. First (mandatory) arg is the url. Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{\begingroup
- \unsepspaces
- \pdfurl{#1}%
- \setbox0 = \hbox{\ignorespaces #3}%
- \ifdim\wd0 > 0pt
- \unhbox0 % third arg given, show only that
- \else
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \ifpdf
- \unhbox0 % PDF: 2nd arg given, show only it
- \else
- \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
- \fi
- \else
- \code{#1}% only url given, so show it
- \fi
- \fi
- \endlink
-\endgroup}
-
-% @url synonym for @uref, since that's how everyone uses it.
-%
-\let\url=\uref
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
- \def\email#1{\doemail#1,,\finish}
- \def\doemail#1,#2,#3\finish{\begingroup
- \unsepspaces
- \pdfurl{mailto:#1}%
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
- \endlink
- \endgroup}
-\else
- \let\email=\uref
-\fi
-
-% Check if we are currently using a typewriter font. Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find. We need it for
-% Polish suppressed-l. --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}} % roman font
-\def\sc#1{{\smallcaps#1}} % smallcaps font
-\def\ii#1{{\it #1}} % italic font
-
-% @acronym for "FBI", "NATO", and the like.
-% We print this one point size smaller, since it's intended for
-% all-uppercase.
-%
-\def\acronym#1{\doacronym #1,,\finish}
-\def\doacronym#1,#2,#3\finish{%
- {\selectfonts\lsize #1}%
- \def\temp{#2}%
- \ifx\temp\empty \else
- \space ({\unsepspaces \ignorespaces \temp \unskip})%
- \fi
-}
-
-% @abbr for "Comput. J." and the like.
-% No font change, but don't do end-of-sentence spacing.
-%
-\def\abbr#1{\doabbr #1,,\finish}
-\def\doabbr#1,#2,#3\finish{%
- {\frenchspacing #1}%
- \def\temp{#2}%
- \ifx\temp\empty \else
- \space ({\unsepspaces \ignorespaces \temp \unskip})%
- \fi
-}
-
-% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
-%
-\def\pounds{{\it\$}}
-
-% @euro{} comes from a separate font, depending on the current style.
-% We use the free feym* fonts from the eurosym package by Henrik
-% Theiling, which support regular, slanted, bold and bold slanted (and
-% "outlined" (blackboard board, sort of) versions, which we don't need).
-% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-%
-% Although only regular is the truly official Euro symbol, we ignore
-% that. The Euro is designed to be slightly taller than the regular
-% font height.
-%
-% feymr - regular
-% feymo - slanted
-% feybr - bold
-% feybo - bold slanted
-%
-% There is no good (free) typewriter version, to my knowledge.
-% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
-% Hmm.
-%
-% Also doesn't work in math. Do we need to do math with euro symbols?
-% Hope not.
-%
-%
-\def\euro{{\eurofont e}}
-\def\eurofont{%
- % We set the font at each command, rather than predefining it in
- % \textfonts and the other font-switching commands, so that
- % installations which never need the symbold don't have to have the
- % font installed.
- %
- % There is only one designed size (nominal 10pt), so we always scale
- % that to the current nominal size.
- %
- % By the way, simply using "at 1em" works for cmr10 and the like, but
- % does not work for cmbx10 and other extended/shrunken fonts.
- %
- \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
- %
- \ifx\curfontstyle\bfstylename
- % bold:
- \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
- \else
- % regular:
- \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
- \fi
- \thiseurofont
-}
-
-% @registeredsymbol - R in a circle. The font for the R should really
-% be smaller yet, but lllsize is the best we can do for now.
-% Adapted from the plain.tex definition of \copyright.
-%
-\def\registeredsymbol{%
- $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
- \hfil\crcr\Orb}}%
- }$%
-}
-
-% Laurent Siebenmann reports \Orb undefined with:
-% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
-% so we'll define it if necessary.
-%
-\ifx\Orb\undefined
-\def\Orb{\mathhexbox20D}
-\fi
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page. Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
-\envdef\titlepage{%
- % Open one extra group, as we want to close it in the middle of \Etitlepage.
- \begingroup
- \parindent=0pt \textfonts
- % Leave some space at the very top of the page.
- \vglue\titlepagetopglue
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
- % Most title ``pages'' are actually two pages long, with space
- % at the top of the second. We don't want the ragged left on the second.
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- \let\page = \oldpage
- \page
- \null
- }%
-}
-
-\def\Etitlepage{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- % It is important to do the page break before ending the group,
- % because the headline and footline are only empty inside the group.
- % If we use the new definition of \page, we always get a blank page
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
- %
- % Need this before the \...aftertitlepage checks so that if they are
- % in effect the toc pages will come out with page numbers.
- \HEADINGSon
- %
- % If they want short, they certainly want long too.
- \ifsetshortcontentsaftertitlepage
- \shortcontents
- \contents
- \global\let\shortcontents = \relax
- \global\let\contents = \relax
- \fi
- %
- \ifsetcontentsaftertitlepage
- \contents
- \global\let\contents = \relax
- \global\let\shortcontents = \relax
- \fi
-}
-
-\def\finishtitlepage{%
- \vskip4pt \hrule height 2pt width \hsize
- \vskip\titlepagebottomglue
- \finishedtitlepagetrue
-}
-
-%%% Macros to be used within @titlepage:
-
-\let\subtitlerm=\tenrm
-\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
-
-\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
- \let\tt=\authortt}
-
-\parseargdef\title{%
- \checkenv\titlepage
- \leftline{\titlefonts\rm #1}
- % print a rule at the page bottom also.
- \finishedtitlepagefalse
- \vskip4pt \hrule height 4pt width \hsize \vskip4pt
-}
-
-\parseargdef\subtitle{%
- \checkenv\titlepage
- {\subtitlefont \rightline{#1}}%
-}
-
-% @author should come last, but may come many times.
-% It can also be used inside @quotation.
-%
-\parseargdef\author{%
- \def\temp{\quotation}%
- \ifx\thisenv\temp
- \def\quotationauthor{#1}% printed in \Equotation.
- \else
- \checkenv\titlepage
- \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
- {\authorfont \leftline{#1}}%
- \fi
-}
-
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline % headline on even pages
-\newtoks\oddheadline % headline on odd pages
-\newtoks\evenfootline % footline on even pages
-\newtoks\oddfootline % footline on odd pages
-
-% Now make TeX use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
- \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
- \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what @headings on does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
-\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
-\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
-\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
-\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
- \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
- %
- % Leave some space for the footline. Hopefully ok to assume
- % @evenfooting will not be used by itself.
- \global\advance\pageheight by -\baselineskip
- \global\advance\vsize by -\baselineskip
-}
-
-\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-
-
-% @headings double turns headings on for double-sided printing.
-% @headings single turns headings on for single-sided printing.
-% @headings off turns them off.
-% @headings on same as @headings double, retained for compatibility.
-% @headings after turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{%
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% This produces Day Month Year style of output.
-% Only define if not already defined, in case a txi-??.tex file has set
-% up a different format (e.g., txi-cs.tex does this).
-\ifx\today\undefined
-\def\today{%
- \number\day\space
- \ifcase\month
- \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
- \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
- \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
- \fi
- \space\number\year}
-\fi
-
-% @settitle line... specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg{\gdef\thistitle}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\itemzzz #1{\begingroup %
- \advance\hsize by -\rightskip
- \advance\hsize by -\tableindent
- \setbox0=\hbox{\itemindicate{#1}}%
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
- % command is, e.g., @kindex, the whatsit would get put into the
- % horizontal list on a line by itself, resulting in extra blank space.
- \ifdim \wd0>\itemmax
- %
- % Make this a paragraph so we get the \parskip glue and wrapping,
- % but leave it ragged-right.
- \begingroup
- \advance\leftskip by-\tableindent
- \advance\hsize by\tableindent
- \advance\rightskip by0pt plus1fil
- \leavevmode\unhbox0\par
- \endgroup
- %
- % We're going to be starting a paragraph, but we don't want the
- % \parskip glue -- logically it's part of the @item we just started.
- \nobreak \vskip-\parskip
- %
- % Stop a page break at the \parskip glue coming up. However, if
- % what follows is an environment such as @example, there will be no
- % \parskip glue; then the negative vskip we just inserted would
- % cause the example and the item to crash together. So we use this
- % bizarre value of 10001 as a signal to \aboveenvbreak to insert
- % \parskip glue after all. Section titles are handled this way also.
- %
- \penalty 10001
- \endgroup
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
- % following text (if any) will end up on the same line.
- \noindent
- % Do this with kerns and \unhbox so that if there is a footnote in
- % the item text, it can migrate to the main vertical list and
- % eventually be printed.
- \nobreak\kern-\tableindent
- \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
- \unhbox0
- \nobreak\kern\dimen0
- \endgroup
- \itemxneedsnegativevskiptrue
- \fi
-}
-
-\def\item{\errmessage{@item while not in a list environment}}
-\def\itemx{\errmessage{@itemx while not in a list environment}}
-
-% @table, @ftable, @vtable.
-\envdef\table{%
- \let\itemindex\gobble
- \tablecheck{table}%
-}
-\envdef\ftable{%
- \def\itemindex ##1{\doind {fn}{\code{##1}}}%
- \tablecheck{ftable}%
-}
-\envdef\vtable{%
- \def\itemindex ##1{\doind {vr}{\code{##1}}}%
- \tablecheck{vtable}%
-}
-\def\tablecheck#1{%
- \ifnum \the\catcode`\^^M=\active
- \endgroup
- \errmessage{This command won't work in this context; perhaps the problem is
- that we are \inenvironment\thisenv}%
- \def\next{\doignore{#1}}%
- \else
- \let\next\tablex
- \fi
- \next
-}
-\def\tablex#1{%
- \def\itemindicate{#1}%
- \parsearg\tabley
-}
-\def\tabley#1{%
- {%
- \makevalueexpandable
- \edef\temp{\noexpand\tablez #1\space\space\space}%
- \expandafter
- }\temp \endtablez
-}
-\def\tablez #1 #2 #3 #4\endtablez{%
- \aboveenvbreak
- \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
- \ifnum 0#2>0 \tableindent=#2\mil \fi
- \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
- \itemmax=\tableindent
- \advance \itemmax by -\itemmargin
- \advance \leftskip by \tableindent
- \exdentamount=\tableindent
- \parindent = 0pt
- \parskip = \smallskipamount
- \ifdim \parskip=0pt \parskip=2pt \fi
- \let\item = \internalBitem
- \let\itemx = \internalBitemx
-}
-\def\Etable{\endgraf\afterenvbreak}
-\let\Eftable\Etable
-\let\Evtable\Etable
-\let\Eitemize\Etable
-\let\Eenumerate\Etable
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\envdef\itemize{\parsearg\doitemize}
-
-\def\doitemize#1{%
- \aboveenvbreak
- \itemmax=\itemindent
- \advance\itemmax by -\itemmargin
- \advance\leftskip by \itemindent
- \exdentamount=\itemindent
- \parindent=0pt
- \parskip=\smallskipamount
- \ifdim\parskip=0pt \parskip=2pt \fi
- \def\itemcontents{#1}%
- % @itemize with no arg is equivalent to @itemize @bullet.
- \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
- \let\item=\itemizeitem
-}
-
-% Definition of @item while inside @itemize and @enumerate.
-%
-\def\itemizeitem{%
- \advance\itemno by 1 % for enumerations
- {\let\par=\endgraf \smallbreak}% reasonable place to break
- {%
- % If the document has an @itemize directly after a section title, a
- % \nobreak will be last on the list, and \sectionheading will have
- % done a \vskip-\parskip. In that case, we don't want to zero
- % parskip, or the item text will crash with the heading. On the
- % other hand, when there is normal text preceding the item (as there
- % usually is), we do want to zero parskip, or there would be too much
- % space. In that case, we won't have a \nobreak before. At least
- % that's the theory.
- \ifnum\lastpenalty<10000 \parskip=0in \fi
- \noindent
- \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
- \vadjust{\penalty 1200}}% not good to break after first line of item.
- \flushcr
-}
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list. No
-% argument is the same as `1'.
-%
-\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
- % If we were given no argument, pretend we were given `1'.
- \def\thearg{#1}%
- \ifx\thearg\empty \def\thearg{1}\fi
- %
- % Detect if the argument is a single token. If so, it might be a
- % letter. Otherwise, the only valid thing it can be is a number.
- % (We will always have one token, because of the test we just made.
- % This is a good thing, since \splitoff doesn't work given nothing at
- % all -- the first parameter is undelimited.)
- \expandafter\splitoff\thearg\endmark
- \ifx\rest\empty
- % Only one token in the argument. It could still be anything.
- % A ``lowercase letter'' is one whose \lccode is nonzero.
- % An ``uppercase letter'' is one whose \lccode is both nonzero, and
- % not equal to itself.
- % Otherwise, we assume it's a number.
- %
- % We need the \relax at the end of the \ifnum lines to stop TeX from
- % continuing to look for a <number>.
- %
- \ifnum\lccode\expandafter`\thearg=0\relax
- \numericenumerate % a number (we hope)
- \else
- % It's a letter.
- \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
- \lowercaseenumerate % lowercase letter
- \else
- \uppercaseenumerate % uppercase letter
- \fi
- \fi
- \else
- % Multiple tokens in the argument. We hope it's a number.
- \numericenumerate
- \fi
-}
-
-% An @enumerate whose labels are integers. The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
- \itemno = \thearg
- \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more lowercase letters in @enumerate; get a bigger
- alphabet}%
- \fi
- \char\lccode\itemno
- }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more uppercase letters in @enumerate; get a bigger
- alphabet}
- \fi
- \char\uccode\itemno
- }%
-}
-
-% Call \doitemize, adding a period to the first argument and supplying the
-% common last two arguments. Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
- \advance\itemno by -1
- \doitemize{#1.}\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble. Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-% @multitable @columnfractions .25 .3 .45
-% @item ...
-%
-% Numbers following @columnfractions are the percent of the total
-% current hsize to be used for each column. You may use as many
-% columns as desired.
-
-
-% Or use a template:
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item ...
-% using the widest term desired in each column.
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab do not need to be on their own lines, but it will not hurt
-% if they are.
-
-% Sample multitable:
-
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item first col stuff @tab second col stuff @tab third col
-% @item
-% first col stuff
-% @tab
-% second col stuff
-% @tab
-% third col
-% @item first col stuff @tab second col stuff
-% @tab Many paragraphs of text may be used in any column.
-%
-% They will wrap at the width determined by the template.
-% @item@tab@tab This will be in third column.
-% @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-% to baseline.
-% 0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the @columnfraction, usually a decimal number like .5, but might
-% be just 1. We just use it, whatever it is.
-%
-\def\pickupwholefraction#1 {%
- \global\advance\colcount by 1
- \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
- \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
- \def\firstarg{#1}%
- \ifx\firstarg\xendsetuptable
- \let\go = \relax
- \else
- \ifx\firstarg\xcolumnfractions
- \global\setpercenttrue
- \else
- \ifsetpercent
- \let\go\pickupwholefraction
- \else
- \global\advance\colcount by 1
- \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
- % separator; typically that is always in the input, anyway.
- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
- \fi
- \fi
- \ifx\go\pickupwholefraction
- % Put the argument back for the \pickupwholefraction call, so
- % we'll always have a period there to be parsed.
- \def\go{\pickupwholefraction#1}%
- \else
- \let\go = \setuptable
- \fi%
- \fi
- \go
-}
-
-% multitable-only commands.
-%
-% @headitem starts a heading row, which we typeset in bold.
-% Assignments have to be global since we are inside the implicit group
-% of an alignment entry. Note that \everycr resets \everytab.
-\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
-%
-% A \tab used to include \hskip1sp. But then the space in a template
-% line is not enough. That is bad. So let's go back to just `&' until
-% we encounter the problem it was intended to solve again.
-% --karl, nathan@acm.org, 20apr99.
-\def\tab{\checkenv\multitable &\the\everytab}%
-
-% @multitable ... @end multitable definitions:
-%
-\newtoks\everytab % insert after every tab.
-%
-\envdef\multitable{%
- \vskip\parskip
- \startsavinginserts
- %
- % @item within a multitable starts a normal row.
- % We use \def instead of \let so that if one of the multitable entries
- % contains an @itemize, we don't choke on the \item (seen as \crcr aka
- % \endtemplate) expanding \doitemize.
- \def\item{\crcr}%
- %
- \tolerance=9500
- \hbadness=9500
- \setmultitablespacing
- \parskip=\multitableparskip
- \parindent=\multitableparindent
- \overfullrule=0pt
- \global\colcount=0
- %
- \everycr = {%
- \noalign{%
- \global\everytab={}%
- \global\colcount=0 % Reset the column counter.
- % Check for saved footnotes, etc.
- \checkinserts
- % Keeps underfull box messages off when table breaks over pages.
- %\filbreak
- % Maybe so, but it also creates really weird page breaks when the
- % table breaks over pages. Wouldn't \vfil be better? Wait until the
- % problem manifests itself, so it can be fixed for real --karl.
- }%
- }%
- %
- \parsearg\domultitable
-}
-\def\domultitable#1{%
- % To parse everything between @multitable and @item:
- \setuptable#1 \endsetuptable
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
- \halign\bgroup &%
- \global\advance\colcount by 1
- \multistrut
- \vtop{%
- % Use the current \colcount to find the correct column width:
- \hsize=\expandafter\csname col\the\colcount\endcsname
- %
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- %
- % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- %
- % If the user has set preamble in terms of percent of \hsize we will
- % use that dimension as the width of the column, and the \leftskip
- % will keep entries from bumping into each other. Table will start at
- % left margin and final column will justify at right margin.
- %
- % Make sure we don't inherit \rightskip from the outer environment.
- \rightskip=0pt
- \ifnum\colcount=1
- % The first column will be indented with the surrounding text.
- \advance\hsize by\leftskip
- \else
- \ifsetpercent \else
- % If user has not set preamble in terms of percent of \hsize
- % we will advance \hsize by \multitablecolspace.
- \advance\hsize by \multitablecolspace
- \fi
- % In either case we will make \leftskip=\multitablecolspace:
- \leftskip=\multitablecolspace
- \fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighting sequences respectively
- % marking characters.
- \noindent\ignorespaces##\unskip\multistrut
- }\cr
-}
-\def\Emultitable{%
- \crcr
- \egroup % end the \halign
- \global\setpercentfalse
-}
-
-\def\setmultitablespacing{%
- \def\multistrut{\strut}% just use the standard line spacing
- %
- % Compute \multitablelinespace (if not defined by user) for use in
- % \multitableparskip calculation. We used define \multistrut based on
- % this, but (ironically) that caused the spacing to be off.
- % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
-\ifdim\multitablelinespace=0pt
-\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-\global\advance\multitablelinespace by-\ht0
-\fi
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%% If so, set to same dimension as multitablelinespace.
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi}
-
-
-\message{conditionals,}
-
-% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
-% @ifnotxml always succeed. They currently do nothing; we don't
-% attempt to check whether the conditionals are properly nested. But we
-% have to remember that they are conditionals, so that @end doesn't
-% attempt to close an environment group.
-%
-\def\makecond#1{%
- \expandafter\let\csname #1\endcsname = \relax
- \expandafter\let\csname iscond.#1\endcsname = 1
-}
-\makecond{iftex}
-\makecond{ifnotdocbook}
-\makecond{ifnothtml}
-\makecond{ifnotinfo}
-\makecond{ifnotplaintext}
-\makecond{ifnotxml}
-
-% Ignore @ignore, @ifhtml, @ifinfo, and the like.
-%
-\def\direntry{\doignore{direntry}}
-\def\documentdescription{\doignore{documentdescription}}
-\def\docbook{\doignore{docbook}}
-\def\html{\doignore{html}}
-\def\ifdocbook{\doignore{ifdocbook}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\ifplaintext{\doignore{ifplaintext}}
-\def\ifxml{\doignore{ifxml}}
-\def\ignore{\doignore{ignore}}
-\def\menu{\doignore{menu}}
-\def\xml{\doignore{xml}}
-
-% Ignore text until a line `@end #1', keeping track of nested conditionals.
-%
-% A count to remember the depth of nesting.
-\newcount\doignorecount
-
-\def\doignore#1{\begingroup
- % Scan in ``verbatim'' mode:
- \catcode`\@ = \other
- \catcode`\{ = \other
- \catcode`\} = \other
- %
- % Make sure that spaces turn into tokens that match what \doignoretext wants.
- \spaceisspace
- %
- % Count number of #1's that we've seen.
- \doignorecount = 0
- %
- % Swallow text until we reach the matching `@end #1'.
- \dodoignore{#1}%
-}
-
-{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
- \obeylines %
- %
- \gdef\dodoignore#1{%
- % #1 contains the command name as a string, e.g., `ifinfo'.
- %
- % Define a command to find the next `@end #1', which must be on a line
- % by itself.
- \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
- % And this command to find another #1 command, at the beginning of a
- % line. (Otherwise, we would consider a line `@c @ifset', for
- % example, to count as an @ifset for nesting.)
- \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
- %
- % And now expand that command.
- \obeylines %
- \doignoretext ^^M%
- }%
-}
-
-\def\doignoreyyy#1{%
- \def\temp{#1}%
- \ifx\temp\empty % Nothing found.
- \let\next\doignoretextzzz
- \else % Found a nested condition, ...
- \advance\doignorecount by 1
- \let\next\doignoretextyyy % ..., look for another.
- % If we're here, #1 ends with ^^M\ifinfo (for example).
- \fi
- \next #1% the token \_STOP_ is present just after this macro.
-}
-
-% We have to swallow the remaining "\_STOP_".
-%
-\def\doignoretextzzz#1{%
- \ifnum\doignorecount = 0 % We have just found the outermost @end.
- \let\next\enddoignore
- \else % Still inside a nested condition.
- \advance\doignorecount by -1
- \let\next\doignoretext % Look for the next @end.
- \fi
- \next
-}
-
-% Finish off ignored text.
-\def\enddoignore{\endgroup\ignorespaces}
-
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.
-% We rely on the fact that \parsearg sets \catcode`\ =10.
-%
-\parseargdef\set{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
- {%
- \makevalueexpandable
- \def\temp{#2}%
- \edef\next{\gdef\makecsname{SET#1}}%
- \ifx\temp\empty
- \next{}%
- \else
- \setzzz#2\endsetzzz
- \fi
- }%
-}
-% Remove the trailing space \setxxx inserted.
-\def\setzzz#1 \endsetzzz{\next{#1}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\parseargdef\clear{%
- {%
- \makevalueexpandable
- \global\expandafter\let\csname SET#1\endcsname=\relax
- }%
-}
-
-% @value{foo} gets the text saved in variable foo.
-\def\value{\begingroup\makevalueexpandable\valuexxx}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-{
- \catcode`\- = \active \catcode`\_ = \active
- %
- \gdef\makevalueexpandable{%
- \let\value = \expandablevalue
- % We don't want these characters active, ...
- \catcode`\-=\other \catcode`\_=\other
- % ..., but we might end up with active ones in the argument if
- % we're called from @code, as @code{@value{foo-bar_}}, though.
- % So \let them to their normal equivalents.
- \let-\realdash \let_\normalunderscore
- }
-}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we call \makevalueexpandable in \indexdummies).
-% The command has to be fully expandable (if the variable is set), since
-% the result winds up in the index file. This means that if the
-% variable's value contains other Texinfo commands, it's almost certain
-% it will fail (although perhaps we could fix that with sufficient work
-% to do a one-level expansion on the result, instead of complete).
-%
-\def\expandablevalue#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- {[No value for ``#1'']}%
- \message{Variable `#1', used in @value, is not set.}%
- \else
- \csname SET#1\endcsname
- \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-% To get special treatment of `@end ifset,' call \makeond and the redefine.
-%
-\makecond{ifset}
-\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
-\def\doifset#1#2{%
- {%
- \makevalueexpandable
- \let\next=\empty
- \expandafter\ifx\csname SET#2\endcsname\relax
- #1% If not set, redefine \next.
- \fi
- \expandafter
- }\next
-}
-\def\ifsetfail{\doignore{ifset}}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-% The `\else' inside the `\doifset' parameter is a trick to reuse the
-% above code: if the variable is not set, do nothing, if it is set,
-% then redefine \next to \ifclearfail.
-%
-\makecond{ifclear}
-\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
-\def\ifclearfail{\doignore{ifclear}}
-
-% @dircategory CATEGORY -- specify a category of the dir file
-% which this file should belong to. Ignore this in TeX.
-\let\dircategory=\comment
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within macros and \if's.
-\edef\newwrite{\makecsname{ptexnewwrite}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index. The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
- \fi
- \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
- \noexpand\doindex{#1}}
-}
-
-% @defindex foo == \newindex{foo}
-%
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-%
-\def\defcodeindex{\parsearg\newcodeindex}
-%
-\def\newcodeindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1
- \fi
- \expandafter\xdef\csname#1index\endcsname{%
- \noexpand\docodeindex{#1}}%
-}
-
-
-% @synindex foo bar makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-%
-% @syncodeindex foo bar similar, but put all entries made for index foo
-% inside @code.
-%
-\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-
-% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-% #3 the target index (bar).
-\def\dosynindex#1#2#3{%
- % Only do \closeout if we haven't already done it, else we'll end up
- % closing the target index.
- \expandafter \ifx\csname donesynindex#2\endcsname \undefined
- % The \closeout helps reduce unnecessary open files; the limit on the
- % Acorn RISC OS is a mere 16 files.
- \expandafter\closeout\csname#2indfile\endcsname
- \expandafter\let\csname\donesynindex#2\endcsname = 1
- \fi
- % redefine \fooindfile:
- \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
- \expandafter\let\csname#2indfile\endcsname=\temp
- % redefine \fooindex:
- \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-% and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
- \def\@{@}% change to @@ when we switch to @ as escape char in index files.
- \def\ {\realbackslash\space }%
- % Need these in case \tex is in effect and \{ is a \delimiter again.
- % But can't use \lbracecmd and \rbracecmd because texindex assumes
- % braces and backslashes are used only as delimiters.
- \let\{ = \mylbrace
- \let\} = \myrbrace
- %
- % \definedummyword defines \#1 as \realbackslash #1\space, thus
- % effectively preventing its expansion. This is used only for control
- % words, not control letters, because the \space would be incorrect
- % for control characters, but is needed to separate the control word
- % from whatever follows.
- %
- % For control letters, we have \definedummyletter, which omits the
- % space.
- %
- % These can be used both for control words that take an argument and
- % those that do not. If it is followed by {arg} in the input, then
- % that will dutifully get written to the index (or wherever).
- %
- \def\definedummyword##1{%
- \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
- }%
- \def\definedummyletter##1{%
- \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
- }%
- \let\definedummyaccent\definedummyletter
- %
- % Do the redefinitions.
- \commondummies
-}
-
-% For the aux file, @ is the escape character. So we want to redefine
-% everything using @ instead of \realbackslash. When everything uses
-% @, this will be simpler.
-%
-\def\atdummies{%
- \def\@{@@}%
- \def\ {@ }%
- \let\{ = \lbraceatcmd
- \let\} = \rbraceatcmd
- %
- % (See comments in \indexdummies.)
- \def\definedummyword##1{%
- \expandafter\def\csname ##1\endcsname{@##1\space}%
- }%
- \def\definedummyletter##1{%
- \expandafter\def\csname ##1\endcsname{@##1}%
- }%
- \let\definedummyaccent\definedummyletter
- %
- % Do the redefinitions.
- \commondummies
-}
-
-% Called from \indexdummies and \atdummies. \definedummyword and
-% \definedummyletter must be defined first.
-%
-\def\commondummies{%
- %
- \normalturnoffactive
- %
- \commondummiesnofonts
- %
- \definedummyletter{_}%
- %
- % Non-English letters.
- \definedummyword{AA}%
- \definedummyword{AE}%
- \definedummyword{L}%
- \definedummyword{OE}%
- \definedummyword{O}%
- \definedummyword{aa}%
- \definedummyword{ae}%
- \definedummyword{l}%
- \definedummyword{oe}%
- \definedummyword{o}%
- \definedummyword{ss}%
- \definedummyword{exclamdown}%
- \definedummyword{questiondown}%
- \definedummyword{ordf}%
- \definedummyword{ordm}%
- %
- % Although these internal commands shouldn't show up, sometimes they do.
- \definedummyword{bf}%
- \definedummyword{gtr}%
- \definedummyword{hat}%
- \definedummyword{less}%
- \definedummyword{sf}%
- \definedummyword{sl}%
- \definedummyword{tclose}%
- \definedummyword{tt}%
- %
- \definedummyword{LaTeX}%
- \definedummyword{TeX}%
- %
- % Assorted special characters.
- \definedummyword{bullet}%
- \definedummyword{comma}%
- \definedummyword{copyright}%
- \definedummyword{registeredsymbol}%
- \definedummyword{dots}%
- \definedummyword{enddots}%
- \definedummyword{equiv}%
- \definedummyword{error}%
- \definedummyword{euro}%
- \definedummyword{expansion}%
- \definedummyword{minus}%
- \definedummyword{pounds}%
- \definedummyword{point}%
- \definedummyword{print}%
- \definedummyword{result}%
- %
- % Handle some cases of @value -- where it does not contain any
- % (non-fully-expandable) commands.
- \makevalueexpandable
- %
- % Normal spaces, not active ones.
- \unsepspaces
- %
- % No macro expansion.
- \turnoffmacros
-}
-
-% \commondummiesnofonts: common to \commondummies and \indexnofonts.
-%
-% Better have this without active chars.
-{
- \catcode`\~=\other
- \gdef\commondummiesnofonts{%
- % Control letters and accents.
- \definedummyletter{!}%
- \definedummyaccent{"}%
- \definedummyaccent{'}%
- \definedummyletter{*}%
- \definedummyaccent{,}%
- \definedummyletter{.}%
- \definedummyletter{/}%
- \definedummyletter{:}%
- \definedummyaccent{=}%
- \definedummyletter{?}%
- \definedummyaccent{^}%
- \definedummyaccent{`}%
- \definedummyaccent{~}%
- \definedummyword{u}%
- \definedummyword{v}%
- \definedummyword{H}%
- \definedummyword{dotaccent}%
- \definedummyword{ringaccent}%
- \definedummyword{tieaccent}%
- \definedummyword{ubaraccent}%
- \definedummyword{udotaccent}%
- \definedummyword{dotless}%
- %
- % Texinfo font commands.
- \definedummyword{b}%
- \definedummyword{i}%
- \definedummyword{r}%
- \definedummyword{sc}%
- \definedummyword{t}%
- %
- % Commands that take arguments.
- \definedummyword{acronym}%
- \definedummyword{cite}%
- \definedummyword{code}%
- \definedummyword{command}%
- \definedummyword{dfn}%
- \definedummyword{emph}%
- \definedummyword{env}%
- \definedummyword{file}%
- \definedummyword{kbd}%
- \definedummyword{key}%
- \definedummyword{math}%
- \definedummyword{option}%
- \definedummyword{samp}%
- \definedummyword{strong}%
- \definedummyword{tie}%
- \definedummyword{uref}%
- \definedummyword{url}%
- \definedummyword{var}%
- \definedummyword{verb}%
- \definedummyword{w}%
- }
-}
-
-% \indexnofonts is used when outputting the strings to sort the index
-% by, and when constructing control sequence names. It eliminates all
-% control sequences and just writes whatever the best ASCII sort string
-% would be for a given command (usually its argument).
-%
-\def\indexnofonts{%
- % Accent commands should become @asis.
- \def\definedummyaccent##1{%
- \expandafter\let\csname ##1\endcsname\asis
- }%
- % We can just ignore other control letters.
- \def\definedummyletter##1{%
- \expandafter\def\csname ##1\endcsname{}%
- }%
- % Hopefully, all control words can become @asis.
- \let\definedummyword\definedummyaccent
- %
- \commondummiesnofonts
- %
- % Don't no-op \tt, since it isn't a user-level command
- % and is used in the definitions of the active chars like <, >, |, etc.
- % Likewise with the other plain tex font commands.
- %\let\tt=\asis
- %
- \def\ { }%
- \def\@{@}%
- % how to handle braces?
- \def\_{\normalunderscore}%
- %
- % Non-English letters.
- \def\AA{AA}%
- \def\AE{AE}%
- \def\L{L}%
- \def\OE{OE}%
- \def\O{O}%
- \def\aa{aa}%
- \def\ae{ae}%
- \def\l{l}%
- \def\oe{oe}%
- \def\o{o}%
- \def\ss{ss}%
- \def\exclamdown{!}%
- \def\questiondown{?}%
- \def\ordf{a}%
- \def\ordm{o}%
- %
- \def\LaTeX{LaTeX}%
- \def\TeX{TeX}%
- %
- % Assorted special characters.
- % (The following {} will end up in the sort string, but that's ok.)
- \def\bullet{bullet}%
- \def\comma{,}%
- \def\copyright{copyright}%
- \def\registeredsymbol{R}%
- \def\dots{...}%
- \def\enddots{...}%
- \def\equiv{==}%
- \def\error{error}%
- \def\euro{euro}%
- \def\expansion{==>}%
- \def\minus{-}%
- \def\pounds{pounds}%
- \def\point{.}%
- \def\print{-|}%
- \def\result{=>}%
- %
- % Don't write macro names.
- \emptyusermacros
-}
-
-\let\indexbackslash=0 %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% Most index entries go through here, but \dosubind is the general case.
-% #1 is the index name, #2 is the entry text.
-\def\doind#1#2{\dosubind{#1}{#2}{}}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% empty if called from \doind, as we usually are (the main exception
-% is with most defuns, which call us directly).
-%
-\def\dosubind#1#2#3{%
- \iflinks
- {%
- % Store the main index entry text (including the third arg).
- \toks0 = {#2}%
- % If third arg is present, precede it with a space.
- \def\thirdarg{#3}%
- \ifx\thirdarg\empty \else
- \toks0 = \expandafter{\the\toks0 \space #3}%
- \fi
- %
- \edef\writeto{\csname#1indfile\endcsname}%
- %
- \ifvmode
- \dosubindsanitize
- \else
- \dosubindwrite
- \fi
- }%
- \fi
-}
-
-% Write the entry in \toks0 to the index file:
-%
-\def\dosubindwrite{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
- \fi
- %
- % Remember, we are within a group.
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
- % Process the index entry with all font commands turned off, to
- % get the string to sort by.
- {\indexnofonts
- \edef\temp{\the\toks0}% need full expansion
- \xdef\indexsorttmp{\temp}%
- }%
- %
- % Set up the complete index entry, with both the sort key and
- % the original text, including any font commands. We write
- % three arguments to \entry to the .?? file (four in the
- % subentry case), texindex reduces to two when writing the .??s
- % sorted result.
- \edef\temp{%
- \write\writeto{%
- \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
- }%
- \temp
-}
-
-% Take care of unwanted page breaks:
-%
-% If a skip is the last thing on the list now, preserve it
-% by backing up by \lastskip, doing the \write, then inserting
-% the skip again. Otherwise, the whatsit generated by the
-% \write will make \lastskip zero. The result is that sequences
-% like this:
-% @end defun
-% @tindex whatever
-% @defun ...
-% will have extra space inserted, because the \medbreak in the
-% start of the @defun won't see the skip inserted by the @end of
-% the previous defun.
-%
-% But don't do any of this if we're not in vertical mode. We
-% don't want to do a \vskip and prematurely end a paragraph.
-%
-% Avoid page breaks due to these extra skips, too.
-%
-% But wait, there is a catch there:
-% We'll have to check whether \lastskip is zero skip. \ifdim is not
-% sufficient for this purpose, as it ignores stretch and shrink parts
-% of the skip. The only way seems to be to check the textual
-% representation of the skip.
-%
-% The following is almost like \def\zeroskipmacro{0.0pt} except that
-% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
-%
-\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
-%
-% ..., ready, GO:
-%
-\def\dosubindsanitize{%
- % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
- \skip0 = \lastskip
- \edef\lastskipmacro{\the\lastskip}%
- \count255 = \lastpenalty
- %
- % If \lastskip is nonzero, that means the last item was a
- % skip. And since a skip is discardable, that means this
- % -\skip0 glue we're inserting is preceded by a
- % non-discardable item, therefore it is not a potential
- % breakpoint, therefore no \nobreak needed.
- \ifx\lastskipmacro\zeroskipmacro
- \else
- \vskip-\skip0
- \fi
- %
- \dosubindwrite
- %
- \ifx\lastskipmacro\zeroskipmacro
- % If \lastskip was zero, perhaps the last item was a penalty, and
- % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
- % to re-insert the same penalty (values >10000 are used for various
- % signals); since we just inserted a non-discardable item, any
- % following glue (such as a \parskip) would be a breakpoint. For example:
- %
- % @deffn deffn-whatever
- % @vindex index-whatever
- % Description.
- % would allow a break between the index-whatever whatsit
- % and the "Description." paragraph.
- \ifnum\count255>9999 \penalty\count255 \fi
- \else
- % On the other hand, if we had a nonzero \lastskip,
- % this make-up glue would be preceded by a non-discardable item
- % (the whatsit from the \write), so we must insert a \nobreak.
- \nobreak\vskip\skip0
- \fi
-}
-
-% The index entry written in the file actually looks like
-% \entry {sortstring}{page}{topic}
-% or
-% \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-% \initial {c}
-% before the first topic whose initial is c
-% \entry {topic}{pagelist}
-% for a topic that is used without subtopics
-% \primary {topic}
-% for the beginning of a topic that is used with subtopics
-% \secondary {subtopic}{pagelist}
-% for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\parseargdef\printindex{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
- \smallfonts \rm
- \tolerance = 9500
- \everypar = {}% don't want the \kern\-parindent from indentation suppression.
- %
- % See if the index file exists and is nonempty.
- % Change catcode of @ here so that if the index file contains
- % \initial {@}
- % as its first line, TeX doesn't complain about mismatched braces
- % (because it thinks @} is a control sequence).
- \catcode`\@ = 11
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- \putwordIndexNonexistent
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
- \putwordIndexIsEmpty
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\backslashcurfont}%
- \catcode`\\ = 0
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
- \enddoublecolumns
- \fi
- \fi
- \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
- % Some minor font changes for the special characters.
- \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
- %
- % Remove any glue we may have, we'll be inserting our own.
- \removelastskip
- %
- % We like breaks before the index initials, so insert a bonus.
- \nobreak
- \vskip 0pt plus 3\baselineskip
- \penalty 0
- \vskip 0pt plus -3\baselineskip
- %
- % Typeset the initial. Making this add up to a whole number of
- % baselineskips increases the chance of the dots lining up from column
- % to column. It still won't often be perfect, because of the stretch
- % we need before each entry, but it's better.
- %
- % No shrink because it confuses \balancecolumns.
- \vskip 1.67\baselineskip plus .5\baselineskip
- \leftline{\secbf #1}%
- % Do our best not to break after the initial.
- \nobreak
- \vskip .33\baselineskip plus .1\baselineskip
-}}
-
-% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
-% then page number (#2) flushed to the right margin. It is used for index
-% and table of contents entries. The paragraph is indented by \leftskip.
-%
-% A straightforward implementation would start like this:
-% \def\entry#1#2{...
-% But this frozes the catcodes in the argument, and can cause problems to
-% @code, which sets - active. This problem was fixed by a kludge---
-% ``-'' was active throughout whole index, but this isn't really right.
-%
-% The right solution is to prevent \entry from swallowing the whole text.
-% --kasal, 21nov03
-\def\entry{%
- \begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
- \par
- %
- % Do not fill out the last line with white space.
- \parfillskip = 0in
- %
- % No extra space above this paragraph.
- \parskip = 0in
- %
- % Do not prefer a separate line ending with a hyphen to fewer lines.
- \finalhyphendemerits = 0
- %
- % \hangindent is only relevant when the entry text and page number
- % don't both fit on one line. In that case, bob suggests starting the
- % dots pretty far over on the line. Unfortunately, a large
- % indentation looks wrong when the entry text itself is broken across
- % lines. So we use a small indentation and put up with long leaders.
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
- \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
- % A bit of stretch before each entry for the benefit of balancing
- % columns.
- \vskip 0pt plus1pt
- %
- % Swallow the left brace of the text (first parameter):
- \afterassignment\doentry
- \let\temp =
-}
-\def\doentry{%
- \bgroup % Instead of the swallowed brace.
- \noindent
- \aftergroup\finishentry
- % And now comes the text of the entry.
-}
-\def\finishentry#1{%
- % #1 is the page number.
- %
- % The following is kludged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
- \def\tempb{#1}%
- \edef\tempc{\tempa}%
- \edef\tempd{\tempb}%
- \ifx\tempc\tempd
- \ %
- \else
- %
- % If we must, put the page number on a line of its own, and fill out
- % this line with blank space. (The \hfil is overwhelmed with the
- % fill leaders glue in \indexdotfill if the page number does fit.)
- \hfil\penalty50
- \null\nobreak\indexdotfill % Have leaders before the page number.
- %
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
- \ifpdf
- \pdfgettoks#1.%
- \ \the\toksA
- \else
- \ #1%
- \fi
- \fi
- \par
- \endgroup
-}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
- \parfillskip=0in
- \parskip=0in
- \hangindent=1in
- \hangafter=1
- \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
- \ifpdf
- \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
- \else
- #2
- \fi
- \par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
- \output = {%
- %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
- % that case we just ship out what is in \partialpage with the normal
- % output routine. Generally, \partialpage will be empty when this
- % runs and this will be a no-op. See the indexspread.tex test case.
- \ifvoid\partialpage \else
- \onepageout{\pagecontents\partialpage}%
- \fi
- %
- \global\setbox\partialpage = \vbox{%
- % Unvbox the main output page.
- \unvbox\PAGE
- \kern-\topskip \kern\baselineskip
- }%
- }%
- \eject % run that output routine to set \partialpage
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
- % execution time, so we may as well do it in one place.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
- % below is chosen so that the gutter has the same value (well, +-<1pt)
- % as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
- % been clobbered.
- %
- \doublecolumnhsize = \hsize
- \advance\doublecolumnhsize by -.04154\hsize
- \divide\doublecolumnhsize by 2
- \hsize = \doublecolumnhsize
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
- \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
- \dimen@ = \vsize
- \divide\dimen@ by 2
- \advance\dimen@ by -\ht\partialpage
- %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
- \unvbox255
- \penalty\outputpenalty
-}
-%
-% Re-output the contents of the output page -- any previous material,
-% followed by the two boxes we just split, in box0 and box2.
-\def\pagesofar{%
- \unvbox\partialpage
- %
- \hsize = \doublecolumnhsize
- \wd0=\hsize \wd2=\hsize
- \hbox to\pagewidth{\box0\hfil\box2}%
-}
-%
-% All done with double columns.
-\def\enddoublecolumns{%
- \output = {%
- % Split the last of the double-column material. Leave it on the
- % current page, no automatic page break.
- \balancecolumns
- %
- % If we end up splitting too much material for the current page,
- % though, there will be another page break right after this \output
- % invocation ends. Having called \balancecolumns once, we do not
- % want to call it again. Therefore, reset \output to its normal
- % definition right away. (We hope \balancecolumns will never be
- % called on to balance too much material, but if it is, this makes
- % the output somewhat more palatable.)
- \global\output = {\onepageout{\pagecontents\PAGE}}%
- }%
- \eject
- \endgroup % started in \begindoublecolumns
- %
- % \pagegoal was set to the doubled \vsize above, since we restarted
- % the current page. We're now back to normal single-column
- % typesetting, so reset \pagegoal to the normal \vsize (after the
- % \endgroup where \vsize got restored).
- \pagegoal = \vsize
-}
-%
-% Called at the end of the double column material.
-\def\balancecolumns{%
- \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
- \divide\dimen@ by 2 % target to split to
- %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
- {%
- \vbadness = 10000
- \loop
- \global\setbox3 = \copy0
- \global\setbox1 = \vsplit3 to \dimen@
- \ifdim\ht3>\dimen@
- \global\advance\dimen@ by 1pt
- \repeat
- }%
- %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
- %
- \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-% \unnumberedno is an oxymoron, of course. But we count the unnumbered
-% sections so that we can refer to them unambiguously in the pdf
-% outlines by their "section number". We avoid collisions with chapter
-% numbers by starting them at 10000. (If a document ever has 10000
-% chapters, we're in trouble anyway, I'm sure.)
-\newcount\unnumberedno \unnumberedno = 10000
-\newcount\chapno
-\newcount\secno \secno=0
-\newcount\subsecno \subsecno=0
-\newcount\subsubsecno \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno \appendixno = `\@
-%
-% \def\appendixletter{\char\the\appendixno}
-% We do the following ugly conditional instead of the above simple
-% construct for the sake of pdftex, which needs the actual
-% letter in the expansion, not just typeset.
-%
-\def\appendixletter{%
- \ifnum\appendixno=`A A%
- \else\ifnum\appendixno=`B B%
- \else\ifnum\appendixno=`C C%
- \else\ifnum\appendixno=`D D%
- \else\ifnum\appendixno=`E E%
- \else\ifnum\appendixno=`F F%
- \else\ifnum\appendixno=`G G%
- \else\ifnum\appendixno=`H H%
- \else\ifnum\appendixno=`I I%
- \else\ifnum\appendixno=`J J%
- \else\ifnum\appendixno=`K K%
- \else\ifnum\appendixno=`L L%
- \else\ifnum\appendixno=`M M%
- \else\ifnum\appendixno=`N N%
- \else\ifnum\appendixno=`O O%
- \else\ifnum\appendixno=`P P%
- \else\ifnum\appendixno=`Q Q%
- \else\ifnum\appendixno=`R R%
- \else\ifnum\appendixno=`S S%
- \else\ifnum\appendixno=`T T%
- \else\ifnum\appendixno=`U U%
- \else\ifnum\appendixno=`V V%
- \else\ifnum\appendixno=`W W%
- \else\ifnum\appendixno=`X X%
- \else\ifnum\appendixno=`Y Y%
- \else\ifnum\appendixno=`Z Z%
- % The \the is necessary, despite appearances, because \appendixletter is
- % expanded while writing the .toc file. \char\appendixno is not
- % expandable, thus it is written literally, thus all appendixes come out
- % with the same letter (or @) in the toc without it.
- \else\char\the\appendixno
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it. @section does likewise.
-% However, they are not reliable, because we don't use marks.
-\def\thischapter{}
-\def\thissection{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% we only have subsub.
-\chardef\maxseclevel = 3
-%
-% A numbered section within an unnumbered changes to unnumbered too.
-% To achive this, remember the "biggest" unnum. sec. we are currently in:
-\chardef\unmlevel = \maxseclevel
-%
-% Trace whether the current chapter is an appendix or not:
-% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
-\def\chapheadtype{N}
-
-% Choose a heading macro
-% #1 is heading type
-% #2 is heading level
-% #3 is text for heading
-\def\genhead#1#2#3{%
- % Compute the abs. sec. level:
- \absseclevel=#2
- \advance\absseclevel by \secbase
- % Make sure \absseclevel doesn't fall outside the range:
- \ifnum \absseclevel < 0
- \absseclevel = 0
- \else
- \ifnum \absseclevel > 3
- \absseclevel = 3
- \fi
- \fi
- % The heading type:
- \def\headtype{#1}%
- \if \headtype U%
- \ifnum \absseclevel < \unmlevel
- \chardef\unmlevel = \absseclevel
- \fi
- \else
- % Check for appendix sections:
- \ifnum \absseclevel = 0
- \edef\chapheadtype{\headtype}%
- \else
- \if \headtype A\if \chapheadtype N%
- \errmessage{@appendix... within a non-appendix chapter}%
- \fi\fi
- \fi
- % Check for numbered within unnumbered:
- \ifnum \absseclevel > \unmlevel
- \def\headtype{U}%
- \else
- \chardef\unmlevel = 3
- \fi
- \fi
- % Now print the heading:
- \if \headtype U%
- \ifcase\absseclevel
- \unnumberedzzz{#3}%
- \or \unnumberedseczzz{#3}%
- \or \unnumberedsubseczzz{#3}%
- \or \unnumberedsubsubseczzz{#3}%
- \fi
- \else
- \if \headtype A%
- \ifcase\absseclevel
- \appendixzzz{#3}%
- \or \appendixsectionzzz{#3}%
- \or \appendixsubseczzz{#3}%
- \or \appendixsubsubseczzz{#3}%
- \fi
- \else
- \ifcase\absseclevel
- \chapterzzz{#3}%
- \or \seczzz{#3}%
- \or \numberedsubseczzz{#3}%
- \or \numberedsubsubseczzz{#3}%
- \fi
- \fi
- \fi
- \suppressfirstparagraphindent
-}
-
-% an interface:
-\def\numhead{\genhead N}
-\def\apphead{\genhead A}
-\def\unnmhead{\genhead U}
-
-% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
-% all lower-level sectioning counters to zero.
-%
-% Also set \chaplevelprefix, which we prepend to @float sequence numbers
-% (e.g., figures), q.v. By default (before any chapter), that is empty.
-\let\chaplevelprefix = \empty
-%
-\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz#1{%
- % section resetting is \global in case the chapter is in a group, such
- % as an @include file.
- \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
- \global\advance\chapno by 1
- %
- % Used for \float.
- \gdef\chaplevelprefix{\the\chapno.}%
- \resetallfloatnos
- %
- \message{\putwordChapter\space \the\chapno}%
- %
- % Write the actual heading.
- \chapmacro{#1}{Ynumbered}{\the\chapno}%
- %
- % So @section and the like are numbered underneath this chapter.
- \global\let\section = \numberedsec
- \global\let\subsection = \numberedsubsec
- \global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz#1{%
- \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
- \global\advance\appendixno by 1
- \gdef\chaplevelprefix{\appendixletter.}%
- \resetallfloatnos
- %
- \def\appendixnum{\putwordAppendix\space \appendixletter}%
- \message{\appendixnum}%
- %
- \chapmacro{#1}{Yappendix}{\appendixletter}%
- %
- \global\let\section = \appendixsec
- \global\let\subsection = \appendixsubsec
- \global\let\subsubsection = \appendixsubsubsec
-}
-
-\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz#1{%
- \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
- \global\advance\unnumberedno by 1
- %
- % Since an unnumbered has no number, no prefix for figures.
- \global\let\chaplevelprefix = \empty
- \resetallfloatnos
- %
- % This used to be simply \message{#1}, but TeX fully expands the
- % argument to \message. Therefore, if #1 contained @-commands, TeX
- % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
- % expanded @cite (which turns out to cause errors because \cite is meant
- % to be executed, not expanded).
- %
- % Anyway, we don't want the fully-expanded definition of @cite to appear
- % as a result of the \message, we just want `@cite' itself. We use
- % \the<toks register> to achieve this: TeX expands \the<toks> only once,
- % simply yielding the contents of <toks register>. (We also do this for
- % the toc entries.)
- \toks0 = {#1}%
- \message{(\the\toks0)}%
- %
- \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
- %
- \global\let\section = \unnumberedsec
- \global\let\subsection = \unnumberedsubsec
- \global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\parseargdef\centerchap{%
- % Well, we could do the following in a group, but that would break
- % an assumption that \chapmacro is called at the outermost level.
- % Thus we are safer this way: --kasal, 24feb04
- \let\centerparametersmaybe = \centerparameters
- \unnmhead0{#1}%
- \let\centerparametersmaybe = \relax
-}
-
-% @top is like @unnumbered.
-\let\top\unnumbered
-
-% Sections.
-\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
-\def\seczzz#1{%
- \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
- \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
-}
-
-\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz#1{%
- \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
- \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
-}
-\let\appendixsec\appendixsection
-
-\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz#1{%
- \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
- \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
-}
-
-% Subsections.
-\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz#1{%
- \global\subsubsecno=0 \global\advance\subsecno by 1
- \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
-}
-
-\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz#1{%
- \global\subsubsecno=0 \global\advance\subsecno by 1
- \sectionheading{#1}{subsec}{Yappendix}%
- {\appendixletter.\the\secno.\the\subsecno}%
-}
-
-\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz#1{%
- \global\subsubsecno=0 \global\advance\subsecno by 1
- \sectionheading{#1}{subsec}{Ynothing}%
- {\the\unnumberedno.\the\secno.\the\subsecno}%
-}
-
-% Subsubsections.
-\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz#1{%
- \global\advance\subsubsecno by 1
- \sectionheading{#1}{subsubsec}{Ynumbered}%
- {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz#1{%
- \global\advance\subsubsecno by 1
- \sectionheading{#1}{subsubsec}{Yappendix}%
- {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz#1{%
- \global\advance\subsubsecno by 1
- \sectionheading{#1}{subsubsec}{Ynothing}%
- {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\let\section = \numberedsec
-\let\subsection = \numberedsubsec
-\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-% 1) We use \vbox rather than the earlier \line to permit
-% overlong headings to fold.
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
-% heading is obnoxious; this forbids it.
-% 3) Likewise, headings look best if no \parindent is used, and
-% if justification is not attempted. Hence \raggedright.
-
-
-\def\majorheading{%
- {\advance\chapheadingskip by 10pt \chapbreak }%
- \parsearg\chapheadingzzz
-}
-
-\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
-\def\chapheadingzzz#1{%
- {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}%
- \bigskip \par\penalty 200\relax
- \suppressfirstparagraphindent
-}
-
-% @heading, @subheading, @subsubheading.
-\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
- \suppressfirstparagraphindent}
-\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
- \suppressfirstparagraphindent}
-\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
- \suppressfirstparagraphindent}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{%
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-% Chapter opening.
-%
-% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
-% Yappendix, Yomitfromtoc), #3 the chapter number.
-%
-% To test against our argument.
-\def\Ynothingkeyword{Ynothing}
-\def\Yomitfromtockeyword{Yomitfromtoc}
-\def\Yappendixkeyword{Yappendix}
-%
-\def\chapmacro#1#2#3{%
- \pchapsepmacro
- {%
- \chapfonts \rm
- %
- % Have to define \thissection before calling \donoderef, because the
- % xref code eventually uses it. On the other hand, it has to be called
- % after \pchapsepmacro, or the headline will change too soon.
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- %
- % Only insert the separating space if we have a chapter/appendix
- % number, and don't print the unnumbered ``number''.
- \def\temptype{#2}%
- \ifx\temptype\Ynothingkeyword
- \setbox0 = \hbox{}%
- \def\toctype{unnchap}%
- \def\thischapter{#1}%
- \else\ifx\temptype\Yomitfromtockeyword
- \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
- \def\toctype{omit}%
- \xdef\thischapter{}%
- \else\ifx\temptype\Yappendixkeyword
- \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
- \def\toctype{app}%
- % We don't substitute the actual chapter name into \thischapter
- % because we don't want its macros evaluated now. And we don't
- % use \thissection because that changes with each section.
- %
- \xdef\thischapter{\putwordAppendix{} \appendixletter:
- \noexpand\thischaptername}%
- \else
- \setbox0 = \hbox{#3\enspace}%
- \def\toctype{numchap}%
- \xdef\thischapter{\putwordChapter{} \the\chapno:
- \noexpand\thischaptername}%
- \fi\fi\fi
- %
- % Write the toc entry for this chapter. Must come before the
- % \donoderef, because we include the current node name in the toc
- % entry, and \donoderef resets it to empty.
- \writetocentry{\toctype}{#1}{#3}%
- %
- % For pdftex, we have to write out the node definition (aka, make
- % the pdfdest) after any page break, but before the actual text has
- % been typeset. If the destination for the pdf outline is after the
- % text, then jumping from the outline may wind up with the text not
- % being visible, for instance under high magnification.
- \donoderef{#2}%
- %
- % Typeset the actual heading.
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent=\wd0 \centerparametersmaybe
- \unhbox0 #1\par}%
- }%
- \nobreak\bigskip % no page break after a chapter title
- \nobreak
-}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerparameters{%
- \advance\rightskip by 3\rightskip
- \leftskip = \rightskip
- \parfillskip = 0pt
-}
-
-
-% I don't think this chapter style is supported any more, so I'm not
-% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
-%
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-%
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\nobreak
-}
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-}
-\def\CHAPFopen{%
- \global\let\chapmacro=\chfopen
- \global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles. These macros combine the section number parts and
-% call the generic \sectionheading to do the printing.
-%
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
-
-% Subsection titles.
-\newskip\subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
-
-% Subsubsection titles.
-\def\subsubsecheadingskip{\subsecheadingskip}
-\def\subsubsecheadingbreak{\subsecheadingbreak}
-
-
-% Print any size, any type, section title.
-%
-% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-% section number.
-%
-\def\sectionheading#1#2#3#4{%
- {%
- % Switch to the right set of fonts.
- \csname #2fonts\endcsname \rm
- %
- % Insert space above the heading.
- \csname #2headingbreak\endcsname
- %
- % Only insert the space after the number if we have a section number.
- \def\sectionlevel{#2}%
- \def\temptype{#3}%
- %
- \ifx\temptype\Ynothingkeyword
- \setbox0 = \hbox{}%
- \def\toctype{unn}%
- \gdef\thissection{#1}%
- \else\ifx\temptype\Yomitfromtockeyword
- % for @headings -- no section number, don't include in toc,
- % and don't redefine \thissection.
- \setbox0 = \hbox{}%
- \def\toctype{omit}%
- \let\sectionlevel=\empty
- \else\ifx\temptype\Yappendixkeyword
- \setbox0 = \hbox{#4\enspace}%
- \def\toctype{app}%
- \gdef\thissection{#1}%
- \else
- \setbox0 = \hbox{#4\enspace}%
- \def\toctype{num}%
- \gdef\thissection{#1}%
- \fi\fi\fi
- %
- % Write the toc entry (before \donoderef). See comments in \chfplain.
- \writetocentry{\toctype\sectionlevel}{#1}{#4}%
- %
- % Write the node reference (= pdf destination for pdftex).
- % Again, see comments in \chfplain.
- \donoderef{#3}%
- %
- % Output the actual section heading.
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent=\wd0 % zero if no section number
- \unhbox0 #1}%
- }%
- % Add extra space after the heading -- half of whatever came above it.
- % Don't allow stretch, though.
- \kern .5 \csname #2headingskip\endcsname
- %
- % Do not let the kern be a potential breakpoint, as it would be if it
- % was followed by glue.
- \nobreak
- %
- % We'll almost certainly start a paragraph next, so don't let that
- % glue accumulate. (Not a breakpoint because it's preceded by a
- % discardable item.)
- \vskip-\parskip
- %
- % This is purely so the last item on the list is a known \penalty >
- % 10000. This is so \startdefun can avoid allowing breakpoints after
- % section headings. Otherwise, it would insert a valid breakpoint between:
- %
- % @section sec-whatever
- % @deffn def-whatever
- \penalty 10001
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.
-%
-% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
-% We append the current node name (if any) and page number as additional
-% arguments for the \{chap,sec,...}entry macros which will eventually
-% read this. The node name is used in the pdf outlines as the
-% destination to jump to.
-%
-% We open the .toc file for writing here instead of at @setfilename (or
-% any other fixed time) so that @contents can be anywhere in the document.
-% But if #1 is `omit', then we don't do anything. This is used for the
-% table of contents chapter openings themselves.
-%
-\newif\iftocfileopened
-\def\omitkeyword{omit}%
-%
-\def\writetocentry#1#2#3{%
- \edef\writetoctype{#1}%
- \ifx\writetoctype\omitkeyword \else
- \iftocfileopened\else
- \immediate\openout\tocfile = \jobname.toc
- \global\tocfileopenedtrue
- \fi
- %
- \iflinks
- \toks0 = {#2}%
- \toks2 = \expandafter{\lastnode}%
- \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
- {\the\toks2}{\noexpand\folio}}}%
- \temp
- \fi
- \fi
- %
- % Tell \shipout to create a pdf destination on each page, if we're
- % writing pdf. These are used in the table of contents. We can't
- % just write one on every page because the title pages are numbered
- % 1 and 2 (the page numbers aren't printed), and so are the first
- % two pages of the document. Thus, we'd have two destinations named
- % `1', and two named `2'.
- \ifpdf \global\pdfmakepagedesttrue \fi
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Prepare to read what we've written to \tocfile.
-%
-\def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
- \immediate\closeout\tocfile
- %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \def\thischapter{}%
- \chapmacro{#1}{Yomitfromtoc}{}%
- %
- \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- %
- % Roman numerals for page numbers.
- \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
-}
-
-
-% Normal (long) toc.
-\def\contents{%
- \startcontents{\putwordTOC}%
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \ifeof 1 \else
- \pdfmakeoutlines
- \fi
- \closein 1
- \endgroup
- \lastnegativepageno = \pageno
- \global\pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
- \startcontents{\putwordShortTOC}%
- %
- \let\numchapentry = \shortchapentry
- \let\appentry = \shortchapentry
- \let\unnchapentry = \shortunnchapentry
- % We want a true roman here for the page numbers.
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf
- \let\sl=\shortcontsl \let\tt=\shortconttt
- \rm
- \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\numsecentry##1##2##3##4{}
- \let\appsecentry = \numsecentry
- \let\unnsecentry = \numsecentry
- \let\numsubsecentry = \numsecentry
- \let\appsubsecentry = \numsecentry
- \let\unnsubsecentry = \numsecentry
- \let\numsubsubsecentry = \numsecentry
- \let\appsubsubsecentry = \numsecentry
- \let\unnsubsubsecentry = \numsecentry
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \input \jobname.toc
- \fi
- \closein 1
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \global\pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
-%
-\def\shortchaplabel#1{%
- % This space should be enough, since a single number is .5em, and the
- % widest letter (M) is 1em, at least in the Computer Modern fonts.
- % But use \hss just in case.
- % (This space doesn't include the extra space that gets added after
- % the label; that gets put in by \shortchapentry above.)
- %
- % We'd like to right-justify chapter numbers, but that looks strange
- % with appendix letters. And right-justifying numbers and
- % left-justifying letters looks strange when there is less than 10
- % chapters. Have to read the whole toc once to know how many chapters
- % there are before deciding ...
- \hbox to 1em{#1\hss}%
-}
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapters, in the main contents.
-\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
-% Chapters, in the short toc.
-% See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3#4{%
- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
-}
-
-% Appendices, in the main contents.
-% Need the word Appendix, and a fixed-size box.
-%
-\def\appendixbox#1{%
- % We use M since it's probably the widest letter.
- \setbox0 = \hbox{\putwordAppendix{} M}%
- \hbox to \wd0{\putwordAppendix{} #1\hss}}
-%
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
-
-% Unnumbered chapters.
-\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
-
-% Sections.
-\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
-\let\appsecentry=\numsecentry
-\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
-% Subsections.
-\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsecentry=\numsubsecentry
-\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
-
-% And subsubsections.
-\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsubsecentry=\numsubsubsecentry
-\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
-
-% This parameter controls the indentation of the various levels.
-% Same as \defaultparindent.
-\newdimen\tocindent \tocindent = 15pt
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-% We use the same \entry macro as for the index entries.
-\let\tocentry = \entry
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\def\subsecentryfonts{\textfonts}
-\def\subsubsecentryfonts{\textfonts}
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-%
-\setbox\errorbox=\hbox to \dimen0{\hfil
- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
- \advance\hsize by -2\dimen2 % Rules.
- \vbox{%
- \hrule height\dimen2
- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
- \kern3pt\vrule width\dimen2}% Space to right.
- \hrule height\dimen2}
- \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\envdef\tex{%
- \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
- \catcode `\%=14
- \catcode `\+=\other
- \catcode `\"=\other
- \catcode `\|=\other
- \catcode `\<=\other
- \catcode `\>=\other
- \escapechar=`\\
- %
- \let\b=\ptexb
- \let\bullet=\ptexbullet
- \let\c=\ptexc
- \let\,=\ptexcomma
- \let\.=\ptexdot
- \let\dots=\ptexdots
- \let\equiv=\ptexequiv
- \let\!=\ptexexclam
- \let\i=\ptexi
- \let\indent=\ptexindent
- \let\noindent=\ptexnoindent
- \let\{=\ptexlbrace
- \let\+=\tabalign
- \let\}=\ptexrbrace
- \let\/=\ptexslash
- \let\*=\ptexstar
- \let\t=\ptext
- %
- \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
- \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
- \def\@{@}%
-}
-% There is no need to define \Etex.
-
-% Define @lisp ... @end lisp.
-% @lisp environment forms a group so it can rebind things,
-% including the definition of @end lisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments. \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical. We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip.
-%
-\def\aboveenvbreak{{%
- % =10000 instead of <10000 because of a special case in \itemzzz and
- % \sectionheading, q.v.
- \ifnum \lastpenalty=10000 \else
- \advance\envskipamount by \parskip
- \endgraf
- \ifdim\lastskip<\envskipamount
- \removelastskip
- % it's not a good place to break if the last penalty was \nobreak
- % or better ...
- \ifnum\lastpenalty<10000 \penalty-50 \fi
- \vskip\envskipamount
- \fi
- \fi
-}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
- \ctl\leaders\hrule height\circthick\hfil\ctr
- \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
- \cbl\leaders\hrule height\circthick\hfil\cbr
- \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\envdef\cartouche{%
- \ifhmode\par\fi % can't be in the midst of a paragraph.
- \startsavinginserts
- \lskip=\leftskip \rskip=\rightskip
- \leftskip=0pt\rightskip=0pt % we want these *outside*.
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
- \advance\cartouter by 18.4pt % allow for 3pt kerns on either
- % side, and for 6pt waste from
- % each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
- \vbox\bgroup
- \baselineskip=0pt\parskip=0pt\lineskip=0pt
- \carttop
- \hbox\bgroup
- \hskip\lskip
- \vrule\kern3pt
- \vbox\bgroup
- \kern3pt
- \hsize=\cartinner
- \baselineskip=\normbskip
- \lineskip=\normlskip
- \parskip=\normpskip
- \vskip -\parskip
- \comment % For explanation, see the end of \def\group.
-}
-\def\Ecartouche{%
- \ifhmode\par\fi
- \kern3pt
- \egroup
- \kern3pt\vrule
- \hskip\rskip
- \egroup
- \cartbot
- \egroup
- \checkinserts
-}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
- \aboveenvbreak
- \hfuzz = 12pt % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
- \let\par = \lisppar % don't ignore blank lines
- \obeylines % each line of input is a line of output
- \parskip = 0pt
- \parindent = 0pt
- \emergencystretch = 0pt % don't try to avoid overfull boxes
- % @cartouche defines \nonarrowing to inhibit narrowing
- % at next level down.
- \ifx\nonarrowing\relax
- \advance \leftskip by \lispnarrowing
- \exdentamount=\lispnarrowing
- \fi
- \let\exdent=\nofillexdent
-}
-
-% If you want all examples etc. small: @set dispenvsize small.
-% If you want even small examples the full size: @set dispenvsize nosmall.
-% This affects the following displayed environments:
-% @example, @display, @format, @lisp
-%
-\def\smallword{small}
-\def\nosmallword{nosmall}
-\let\SETdispenvsize\relax
-\def\setnormaldispenv{%
- \ifx\SETdispenvsize\smallword
- \smallexamplefonts \rm
- \fi
-}
-\def\setsmalldispenv{%
- \ifx\SETdispenvsize\nosmallword
- \else
- \smallexamplefonts \rm
- \fi
-}
-
-% We often define two environments, @foo and @smallfoo.
-% Let's do it by one command:
-\def\makedispenv #1#2{
- \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
- \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
- \expandafter\let\csname E#1\endcsname \afterenvbreak
- \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
-}
-
-% Define two synonyms:
-\def\maketwodispenvs #1#2#3{
- \makedispenv{#1}{#3}
- \makedispenv{#2}{#3}
-}
-
-% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
-%
-% @smallexample and @smalllisp: use smaller fonts.
-% Originally contributed by Pavel@xerox.
-%
-\maketwodispenvs {lisp}{example}{%
- \nonfillstart
- \tt
- \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
- \gobble % eat return
-}
-
-% @display/@smalldisplay: same as @lisp except keep current font.
-%
-\makedispenv {display}{%
- \nonfillstart
- \gobble
-}
-
-% @format/@smallformat: same as @display except don't narrow margins.
-%
-\makedispenv{format}{%
- \let\nonarrowing = t%
- \nonfillstart
- \gobble
-}
-
-% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
-\envdef\flushleft{%
- \let\nonarrowing = t%
- \nonfillstart
- \gobble
-}
-\let\Eflushleft = \afterenvbreak
-
-% @flushright.
-%
-\envdef\flushright{%
- \let\nonarrowing = t%
- \nonfillstart
- \advance\leftskip by 0pt plus 1fill
- \gobble
-}
-\let\Eflushright = \afterenvbreak
-
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins. We keep \parskip nonzero in general, since
-% we're doing normal filling. So, when using \aboveenvbreak and
-% \afterenvbreak, temporarily make \parskip 0.
-%
-\envdef\quotation{%
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
- \parindent=0pt
- %
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
- \ifx\nonarrowing\relax
- \advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
- \exdentamount = \lispnarrowing
- \let\nonarrowing = \relax
- \fi
- \parsearg\quotationlabel
-}
-
-% We have retained a nonzero parskip for the environment, since we're
-% doing normal filling.
-%
-\def\Equotation{%
- \par
- \ifx\quotationauthor\undefined\else
- % indent a bit.
- \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
- \fi
- {\parskip=0pt \afterenvbreak}%
-}
-
-% If we're given an argument, typeset it in bold with a colon after.
-\def\quotationlabel#1{%
- \def\temp{#1}%
- \ifx\temp\empty \else
- {\bf #1: }%
- \fi
-}
-
-
-% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter,
-% we need the curly braces so that makeinfo sees the @verb command, eg:
-% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
-%
-% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
-%
-% [Knuth] p.344; only we need to do the other characters Texinfo sets
-% active too. Otherwise, they get lost as the first character on a
-% verbatim line.
-\def\dospecials{%
- \do\ \do\\\do\{\do\}\do\$\do\&%
- \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
- \do\<\do\>\do\|\do\@\do+\do\"%
-}
-%
-% [Knuth] p. 380
-\def\uncatcodespecials{%
- \def\do##1{\catcode`##1=\other}\dospecials}
-%
-% [Knuth] pp. 380,381,391
-% Disable Spanish ligatures ?` and !` of \tt font
-\begingroup
- \catcode`\`=\active\gdef`{\relax\lq}
-\endgroup
-%
-% Setup for the @verb command.
-%
-% Eight spaces for a tab
-\begingroup
- \catcode`\^^I=\active
- \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-\endgroup
-%
-\def\setupverb{%
- \tt % easiest (and conventionally used) font for verbatim
- \def\par{\leavevmode\endgraf}%
- \catcode`\`=\active
- \tabeightspaces
- % Respect line breaks,
- % print special symbols as themselves, and
- % make each space count
- % must do in this order:
- \obeylines \uncatcodespecials \sepspaces
-}
-
-% Setup for the @verbatim environment
-%
-% Real tab expansion
-\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-%
-\def\starttabbox{\setbox0=\hbox\bgroup}
-\begingroup
- \catcode`\^^I=\active
- \gdef\tabexpand{%
- \catcode`\^^I=\active
- \def^^I{\leavevmode\egroup
- \dimen0=\wd0 % the width so far, or since the previous tab
- \divide\dimen0 by\tabw
- \multiply\dimen0 by\tabw % compute previous multiple of \tabw
- \advance\dimen0 by\tabw % advance to next multiple of \tabw
- \wd0=\dimen0 \box0 \starttabbox
- }%
- }
-\endgroup
-\def\setupverbatim{%
- \nonfillstart
- \advance\leftskip by -\defbodyindent
- % Easiest (and conventionally used) font for verbatim
- \tt
- \def\par{\leavevmode\egroup\box0\endgraf}%
- \catcode`\`=\active
- \tabexpand
- % Respect line breaks,
- % print special symbols as themselves, and
- % make each space count
- % must do in this order:
- \obeylines \uncatcodespecials \sepspaces
- \everypar{\starttabbox}%
-}
-
-% Do the @verb magic: verbatim text is quoted by unique
-% delimiter characters. Before first delimiter expect a
-% right brace, after last delimiter expect closing brace:
-%
-% \def\doverb'{'<char>#1<char>'}'{#1}
-%
-% [Knuth] p. 382; only eat outer {}
-\begingroup
- \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
- \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-\endgroup
-%
-\def\verb{\begingroup\setupverb\doverb}
-%
-%
-% Do the @verbatim magic: define the macro \doverbatim so that
-% the (first) argument ends when '@end verbatim' is reached, ie:
-%
-% \def\doverbatim#1@end verbatim{#1}
-%
-% For Texinfo it's a lot easier than for LaTeX,
-% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-% we need not redefine '\', '{' and '}'.
-%
-% Inspired by LaTeX's verbatim command set [latex.ltx]
-%
-\begingroup
- \catcode`\ =\active
- \obeylines %
- % ignore everything up to the first ^^M, that's the newline at the end
- % of the @verbatim input line itself. Otherwise we get an extra blank
- % line in the output.
- \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
- % We really want {...\end verbatim} in the body of the macro, but
- % without the active space; thus we have to use \xdef and \gobble.
-\endgroup
-%
-\envdef\verbatim{%
- \setupverbatim\doverbatim
-}
-\let\Everbatim = \afterenvbreak
-
-
-% @verbatiminclude FILE - insert text of file in verbatim environment.
-%
-\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
-%
-\def\doverbatiminclude#1{%
- {%
- \makevalueexpandable
- \setupverbatim
- \input #1
- \afterenvbreak
- }%
-}
-
-% @copying ... @end copying.
-% Save the text away for @insertcopying later.
-%
-% We save the uninterpreted tokens, rather than creating a box.
-% Saving the text in a box would be much easier, but then all the
-% typesetting commands (@smallbook, font changes, etc.) have to be done
-% beforehand -- and a) we want @copying to be done first in the source
-% file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
-%
-\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
-%
-\def\insertcopying{%
- \begingroup
- \parindent = 0pt % paragraph indentation looks wrong on title page
- \scanexp\copyingtext
- \endgroup
-}
-
-\message{defuns,}
-% @defun etc.
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-% Start the processing of @deffn:
-\def\startdefun{%
- \ifnum\lastpenalty<10000
- \medbreak
- \else
- % If there are two @def commands in a row, we'll have a \nobreak,
- % which is there to keep the function description together with its
- % header. But if there's nothing but headers, we need to allow a
- % break somewhere. Check specifically for penalty 10002, inserted
- % by \defargscommonending, instead of 10000, since the sectioning
- % commands also insert a nobreak penalty, and we don't want to allow
- % a break between a section heading and a defun.
- %
- \ifnum\lastpenalty=10002 \penalty2000 \fi
- %
- % Similarly, after a section heading, do not allow a break.
- % But do insert the glue.
- \medskip % preceded by discardable penalty, so not a breakpoint
- \fi
- %
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
-}
-
-\def\dodefunx#1{%
- % First, check whether we are in the right environment:
- \checkenv#1%
- %
- % As above, allow line break if we have multiple x headers in a row.
- % It's not a great place, though.
- \ifnum\lastpenalty=10002 \penalty3000 \fi
- %
- % And now, it's time to reuse the body of the original defun:
- \expandafter\gobbledefun#1%
-}
-\def\gobbledefun#1\startdefun{}
-
-% \printdefunline \deffnheader{text}
-%
-\def\printdefunline#1#2{%
- \begingroup
- % call \deffnheader:
- #1#2 \endheader
- % common ending:
- \interlinepenalty = 10000
- \advance\rightskip by 0pt plus 1fil
- \endgraf
- \nobreak\vskip -\parskip
- \penalty 10002 % signal to \startdefun and \dodefunx
- % Some of the @defun-type tags do not enable magic parentheses,
- % rendering the following check redundant. But we don't optimize.
- \checkparencounts
- \endgroup
-}
-
-\def\Edefun{\endgraf\medbreak}
-
-% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-% the only thing remainnig is to define \deffnheader.
-%
-\def\makedefun#1{%
- \expandafter\let\csname E#1\endcsname = \Edefun
- \edef\temp{\noexpand\domakedefun
- \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
- \temp
-}
-
-% \domakedefun \deffn \deffnx \deffnheader
-%
-% Define \deffn and \deffnx, without parameters.
-% \deffnheader has to be defined explicitly.
-%
-\def\domakedefun#1#2#3{%
- \envdef#1{%
- \startdefun
- \parseargusing\activeparens{\printdefunline#3}%
- }%
- \def#2{\dodefunx#1}%
- \def#3%
-}
-
-%%% Untyped functions:
-
-% @deffn category name args
-\makedefun{deffn}{\deffngeneral{}}
-
-% @deffn category class name args
-\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-
-% \defopon {category on}class name args
-\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deffngeneral {subind}category name args
-%
-\def\deffngeneral#1#2 #3 #4\endheader{%
- % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
- \dosubind{fn}{\code{#3}}{#1}%
- \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
-}
-
-%%% Typed functions:
-
-% @deftypefn category type name args
-\makedefun{deftypefn}{\deftypefngeneral{}}
-
-% @deftypeop category class type name args
-\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-
-% \deftypeopon {category on}class type name args
-\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypefngeneral {subind}category type name args
-%
-\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
- \dosubind{fn}{\code{#4}}{#1}%
- \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-%%% Typed variables:
-
-% @deftypevr category type var args
-\makedefun{deftypevr}{\deftypecvgeneral{}}
-
-% @deftypecv category class type var args
-\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-
-% \deftypecvof {category of}class type var args
-\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypecvgeneral {subind}category type var args
-%
-\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
- \dosubind{vr}{\code{#4}}{#1}%
- \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-%%% Untyped variables:
-
-% @defvr category var args
-\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
-
-% @defcv category class var args
-\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-
-% \defcvof {category of}class var args
-\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
-
-%%% Type:
-% @deftp category name args
-\makedefun{deftp}#1 #2 #3\endheader{%
- \doind{tp}{\code{#2}}%
- \defname{#1}{}{#2}\defunargs{#3\unskip}%
-}
-
-% Remaining @defun-like shortcuts:
-\makedefun{defun}{\deffnheader{\putwordDeffunc} }
-\makedefun{defmac}{\deffnheader{\putwordDefmac} }
-\makedefun{defspec}{\deffnheader{\putwordDefspec} }
-\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
-\makedefun{defvar}{\defvrheader{\putwordDefvar} }
-\makedefun{defopt}{\defvrheader{\putwordDefopt} }
-\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-\makedefun{defmethod}{\defopon\putwordMethodon}
-\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the category, such as "Function".
-% #2 is the return type, if any.
-% #3 is the function name.
-%
-% We are followed by (but not passed) the arguments, if any.
-%
-\def\defname#1#2#3{%
- % Get the values of \leftskip and \rightskip as they were outside the @def...
- \advance\leftskip by -\defbodyindent
- %
- % How we'll format the type name. Putting it in brackets helps
- % distinguish it from the body text that may end up on the next line
- % just below it.
- \def\temp{#1}%
- \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
- %
- % Figure out line sizes for the paragraph shape.
- % The first line needs space for \box0; but if \rightskip is nonzero,
- % we need only space for the part of \box0 which exceeds it:
- \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
- % The continuations:
- \dimen2=\hsize \advance\dimen2 by -\defargsindent
- % (plain.tex says that \dimen1 should be used only as global.)
- \parshape 2 0in \dimen0 \defargsindent \dimen2
- %
- % Put the type name to the right margin.
- \noindent
- \hbox to 0pt{%
- \hfil\box0 \kern-\hsize
- % \hsize has to be shortened this way:
- \kern\leftskip
- % Intentionally do not respect \rightskip, since we need the space.
- }%
- %
- % Allow all lines to be underfull without complaint:
- \tolerance=10000 \hbadness=10000
- \exdentamount=\defbodyindent
- {%
- % defun fonts. We use typewriter by default (used to be bold) because:
- % . we're printing identifiers, they should be in tt in principle.
- % . in languages with many accents, such as Czech or French, it's
- % common to leave accents off identifiers. The result looks ok in
- % tt, but exceedingly strange in rm.
- % . we don't want -- and --- to be treated as ligatures.
- % . this still does not fix the ?` and !` ligatures, but so far no
- % one has made identifiers using them :).
- \df \tt
- \def\temp{#2}% return value type
- \ifx\temp\empty\else \tclose{\temp} \fi
- #3% output function name
- }%
- {\rm\enskip}% hskip 0.5 em of \tenrm
- %
- \boldbrax
- % arguments will be output next, if any.
-}
-
-% Print arguments in slanted roman (not ttsl), inconsistently with using
-% tt for the name. This is because literal text is sometimes needed in
-% the argument list (groff manual), and ttsl and tt are not very
-% distinguishable. Prevent hyphenation at `-' chars.
-%
-\def\defunargs#1{%
- % use sl by default (not ttsl),
- % tt for the names.
- \df \sl \hyphenchar\font=0
- %
- % On the other hand, if an argument has two dashes (for instance), we
- % want a way to get ttsl. Let's try @var for that.
- \let\var=\ttslanted
- #1%
- \sl\hyphenchar\font=45
-}
-
-% We want ()&[] to print specially on the defun line.
-%
-\def\activeparens{%
- \catcode`\(=\active \catcode`\)=\active
- \catcode`\[=\active \catcode`\]=\active
- \catcode`\&=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-% Be sure that we always have a definition for `(', etc. For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-{
- \activeparens
- \global\let(=\lparen \global\let)=\rparen
- \global\let[=\lbrack \global\let]=\rbrack
- \global\let& = \&
-
- \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
- \gdef\magicamp{\let&=\amprm}
-}
-
-\newcount\parencount
-
-% If we encounter &foo, then turn on ()-hacking afterwards
-\newif\ifampseen
-\def\amprm#1 {\ampseentrue{\bf\&#1 }}
-
-\def\parenfont{%
- \ifampseen
- % At the first level, print parens in roman,
- % otherwise use the default font.
- \ifnum \parencount=1 \rm \fi
- \else
- % The \sf parens (in \boldbrax) actually are a little bolder than
- % the contained text. This is especially needed for [ and ] .
- \sf
- \fi
-}
-\def\infirstlevel#1{%
- \ifampseen
- \ifnum\parencount=1
- #1%
- \fi
- \fi
-}
-\def\bfafterword#1 {#1 \bf}
-
-\def\opnr{%
- \global\advance\parencount by 1
- {\parenfont(}%
- \infirstlevel \bfafterword
-}
-\def\clnr{%
- {\parenfont)}%
- \infirstlevel \sl
- \global\advance\parencount by -1
-}
-
-\newcount\brackcount
-\def\lbrb{%
- \global\advance\brackcount by 1
- {\bf[}%
-}
-\def\rbrb{%
- {\bf]}%
- \global\advance\brackcount by -1
-}
-
-\def\checkparencounts{%
- \ifnum\parencount=0 \else \badparencount \fi
- \ifnum\brackcount=0 \else \badbrackcount \fi
-}
-\def\badparencount{%
- \errmessage{Unbalanced parentheses in @def}%
- \global\parencount=0
-}
-\def\badbrackcount{%
- \errmessage{Unbalanced square braces in @def}%
- \global\brackcount=0
-}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scantokens#1{%
- \toks0={#1}%
- \immediate\openout\macscribble=\jobname.tmp
- \immediate\write\macscribble{\the\toks0}%
- \immediate\closeout\macscribble
- \input \jobname.tmp
- }
-\fi
-
-\def\scanmacro#1{%
- \begingroup
- \newlinechar`\^^M
- \let\xeatspaces\eatspaces
- % Undo catcode changes of \startcontents and \doprintindex
- % When called from @insertcopying or (short)caption, we need active
- % backslash to get it printed correctly. Previously, we had
- % \catcode`\\=\other instead. We'll see whether a problem appears
- % with macro expansion. --kasal, 19aug04
- \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
- % ... and \example
- \spaceisspace
- %
- % Append \endinput to make sure that TeX does not see the ending newline.
- %
- % I've verified that it is necessary both for e-TeX and for ordinary TeX
- % --kasal, 29nov03
- \scantokens{#1\endinput}%
- \endgroup
-}
-
-\def\scanexp#1{%
- \edef\temp{\noexpand\scanmacro{#1}}%
- \temp
-}
-
-\newcount\paramno % Count of parameters
-\newtoks\macname % Macro name
-\newif\ifrecursive % Is it recursive?
-\def\macrolist{} % List of all defined macros in the form
- % \do\macro1\do\macro2...
-
-% Utility routines.
-% This does \let #1 = #2, with \csnames; that is,
-% \let \csname#1\endcsname = \csname#2\endcsname
-% (except of course we have to play expansion games).
-%
-\def\cslet#1#2{%
- \expandafter\let
- \csname#1\expandafter\endcsname
- \csname#2\endcsname
-}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=\other \catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-
-\def\scanctxt{%
- \catcode`\"=\other
- \catcode`\+=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\@=\other
- \catcode`\^=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\~=\other
-}
-
-\def\scanargctxt{%
- \scanctxt
- \catcode`\\=\other
- \catcode`\^^M=\other
-}
-
-\def\macrobodyctxt{%
- \scanctxt
- \catcode`\{=\other
- \catcode`\}=\other
- \catcode`\^^M=\other
- \usembodybackslash
-}
-
-\def\macroargctxt{%
- \scanctxt
- \catcode`\\=\other
-}
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
- \getargs{#1}% now \macname is the macname and \argl the arglist
- \ifx\argl\empty % no arguments
- \paramno=0%
- \else
- \expandafter\parsemargdef \argl;%
- \fi
- \if1\csname ismacro.\the\macname\endcsname
- \message{Warning: redefining \the\macname}%
- \else
- \expandafter\ifx\csname \the\macname\endcsname \relax
- \else \errmessage{Macro name \the\macname\space already defined}\fi
- \global\cslet{macsave.\the\macname}{\the\macname}%
- \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
- % Add the macroname to \macrolist
- \toks0 = \expandafter{\macrolist\do}%
- \xdef\macrolist{\the\toks0
- \expandafter\noexpand\csname\the\macname\endcsname}%
- \fi
- \begingroup \macrobodyctxt
- \ifrecursive \expandafter\parsermacbody
- \else \expandafter\parsemacbody
- \fi}
-
-\parseargdef\unmacro{%
- \if1\csname ismacro.#1\endcsname
- \global\cslet{#1}{macsave.#1}%
- \global\expandafter\let \csname ismacro.#1\endcsname=0%
- % Remove the macro name from \macrolist:
- \begingroup
- \expandafter\let\csname#1\endcsname \relax
- \let\do\unmacrodo
- \xdef\macrolist{\macrolist}%
- \endgroup
- \else
- \errmessage{Macro #1 not defined}%
- \fi
-}
-
-% Called by \do from \dounmacro on each macro. The idea is to omit any
-% macro definitions that have been changed to \relax.
-%
-\def\unmacrodo#1{%
- \ifx#1\relax
- % remove this
- \else
- \noexpand\do \noexpand #1%
- \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% Parse the optional {params} list. Set up \paramno and \paramlist
-% so \defmacro knows what to do. Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
-
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
- \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-\def\parsemargdefxxx#1,{%
- \if#1;\let\next=\relax
- \else \let\next=\parsemargdefxxx
- \advance\paramno by 1%
- \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
- {\xeatspaces{\hash\the\paramno}}%
- \edef\paramlist{\paramlist\hash\the\paramno,}%
- \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-\def\defmacro{%
- \let\hash=##% convert placeholders to macro parameter chars
- \ifrecursive
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\scanmacro{\temp}}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup\noexpand\scanmacro{\temp}}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{\egroup\noexpand\scanmacro{\temp}}%
- \fi
- \else
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \expandafter\noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \fi
- \fi}
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {. If so it reads up to the closing }, if not, it reads the whole
-% line. Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
- \ifx\nchar\bgroup\else
- \expandafter\parsearg
- \fi \next}
-
-% We want to disable all macros during \shipout so that they are not
-% expanded by \write.
-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
- \edef\next{\macrolist}\expandafter\endgroup\next}
-
-% For \indexnofonts, we need to get rid of all macros, leaving only the
-% arguments (if present). Of course this is not nearly correct, but it
-% is the best we can do for now. makeinfo does not expand macros in the
-% argument to @deffn, which ends up writing an index entry, and texindex
-% isn't prepared for an index sort entry that starts with \.
-%
-% Since macro invocations are followed by braces, we can just redefine them
-% to take a single TeX argument. The case of a macro invocation that
-% goes to end-of-line is not handled.
-%
-\def\emptyusermacros{\begingroup
- \def\do##1{\let\noexpand##1=\noexpand\asis}%
- \edef\next{\macrolist}\expandafter\endgroup\next}
-
-
-% @alias.
-% We need some trickery to remove the optional spaces around the equal
-% sign. Just make them active and then expand them all to nothing.
-\def\alias{\parseargusing\obeyspaces\aliasxxx}
-\def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{%
- {%
- \expandafter\let\obeyedspace=\empty
- \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
- }%
- \next
-}
-
-
-\message{cross references,}
-
-\newwrite\auxfile
-
-\newif\ifhavexrefs % True if xref values are known.
-\newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
-% @node's only job in TeX is to define \lastnode, which is used in
-% cross-references. The @node line might or might not have commas, and
-% might or might not have spaces before the first comma, like:
-% @node foo , bar , ...
-% We don't want such trailing spaces in the node name.
-%
-\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
-%
-% also remove a trailing comma, in case of something like this:
-% @node Help-Cross, , , Cross-refs
-\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
-
-\let\nwnode=\node
-\let\lastnode=\empty
-
-% Write a cross-reference definition for the current node. #1 is the
-% type (Ynumbered, Yappendix, Ynothing).
-%
-\def\donoderef#1{%
- \ifx\lastnode\empty\else
- \setref{\lastnode}{#1}%
- \global\let\lastnode=\empty
- \fi
-}
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-\newcount\savesfregister
-%
-\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), which consists of three parts:
-% 1) NAME-title - the current sectioning name taken from \thissection,
-% or the anchor name.
-% 2) NAME-snt - section number and type, passed as the SNT arg, or
-% empty for anchors.
-% 3) NAME-pg - the page number.
-%
-% This is called from \donoderef, \anchor, and \dofloat. In the case of
-% floats, there is an additional part, which is not written here:
-% 4) NAME-lof - the text as it should appear in a @listoffloats.
-%
-\def\setref#1#2{%
- \pdfmkdest{#1}%
- \iflinks
- {%
- \atdummies % preserve commands, but don't expand them
- \turnoffactive
- \otherbackslash
- \edef\writexrdef##1##2{%
- \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
- ##1}{##2}}% these are parameters of \writexrdef
- }%
- \toks0 = \expandafter{\thissection}%
- \immediate \writexrdef{title}{\the\toks0 }%
- \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
- \writexrdef{pg}{\folio}% will be written later, during \shipout
- }%
- \fi
-}
-
-% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual. All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
- \unsepspaces
- \def\printedmanual{\ignorespaces #5}%
- \def\printedrefname{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual\unskip}%
- \setbox0=\hbox{\printedrefname\unskip}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
- % Use the node name inside the square brackets.
- \def\printedrefname{\ignorespaces #1}%
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printedrefname{\ignorespaces #1}%
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
- \def\printedrefname{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printedrefname{\ignorespaces #1}%
- \fi%
- \fi
- \fi
- \fi
- %
- % Make link in pdf output.
- \ifpdf
- \leavevmode
- \getfilename{#4}%
- {\turnoffactive \otherbackslash
- \ifnum\filenamelength>0
- \startlink attr{/Border [0 0 0]}%
- goto file{\the\filename.pdf} name{#1}%
- \else
- \startlink attr{/Border [0 0 0]}%
- goto name{\pdfmkpgn{#1}}%
- \fi
- }%
- \linkcolor
- \fi
- %
- % Float references are printed completely differently: "Figure 1.2"
- % instead of "[somenode], p.3". We distinguish them by the
- % LABEL-title being set to a magic string.
- {%
- % Have to otherify everything special to allow the \csname to
- % include an _ in the xref name, etc.
- \indexnofonts
- \turnoffactive
- \otherbackslash
- \expandafter\global\expandafter\let\expandafter\Xthisreftitle
- \csname XR#1-title\endcsname
- }%
- \iffloat\Xthisreftitle
- % If the user specified the print name (third arg) to the ref,
- % print it instead of our usual "Figure 1.2".
- \ifdim\wd0 = 0pt
- \refx{#1-snt}%
- \else
- \printedrefname
- \fi
- %
- % if the user also gave the printed manual name (fifth arg), append
- % "in MANUALNAME".
- \ifdim \wd1 > 0pt
- \space \putwordin{} \cite{\printedmanual}%
- \fi
- \else
- % node/anchor (non-float) references.
- %
- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
- % insert empty discretionaries after hyphens, which means that it will
- % not find a line break at a hyphen in a node names. Since some manuals
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
- \ifdim \wd1 > 0pt
- \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
- {\turnoffactive \otherbackslash
- % Only output a following space if the -snt ref is nonempty; for
- % @unnumbered and @anchor, it won't be.
- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
- \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
- }%
- % output the `[mynode]' via a macro so it can be overridden.
- \xrefprintnodename\printedrefname
- %
- % But we always want a comma and a space:
- ,\space
- %
- % output the `page 3'.
- \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
- \fi
- \fi
- \endlink
-\endgroup}
-
-% This macro is called from \xrefX for the `[nodename]' part of xref
-% output. It's a separate macro only so it can be changed more easily,
-% since square brackets don't work well in some documents. Particularly
-% one that Bob is working on :).
-%
-\def\xrefprintnodename#1{[#1]}
-
-% Things referred to by \setref.
-%
-\def\Ynothing{}
-\def\Yomitfromtoc{}
-\def\Ynumbered{%
- \ifnum\secno=0
- \putwordChapter@tie \the\chapno
- \else \ifnum\subsecno=0
- \putwordSection@tie \the\chapno.\the\secno
- \else \ifnum\subsubsecno=0
- \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
- \else
- \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
- \fi\fi\fi
-}
-\def\Yappendix{%
- \ifnum\secno=0
- \putwordAppendix@tie @char\the\appendixno{}%
- \else \ifnum\subsecno=0
- \putwordSection@tie @char\the\appendixno.\the\secno
- \else \ifnum\subsubsecno=0
- \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
- \else
- \putwordSection@tie
- @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
- \fi\fi\fi
-}
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
-\def\refx#1#2{%
- {%
- \indexnofonts
- \otherbackslash
- \expandafter\global\expandafter\let\expandafter\thisrefX
- \csname XR#1\endcsname
- }%
- \ifx\thisrefX\relax
- % If not defined, say something at least.
- \angleleft un\-de\-fined\angleright
- \iflinks
- \ifhavexrefs
- \message{\linenumber Undefined cross reference `#1'.}%
- \else
- \ifwarnedxrefs\else
- \global\warnedxrefstrue
- \message{Cross reference values unknown; you must run TeX again.}%
- \fi
- \fi
- \fi
- \else
- % It's defined, so just use it.
- \thisrefX
- \fi
- #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file. Usually it's
-% just a \def (we prepend XR to the control sequence name to avoid
-% collisions). But if this is a float type, we have more work to do.
-%
-\def\xrdef#1#2{%
- \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
- %
- % Was that xref control sequence that we just defined for a float?
- \expandafter\iffloat\csname XR#1\endcsname
- % it was a float, and we have the (safe) float type in \iffloattype.
- \expandafter\let\expandafter\floatlist
- \csname floatlist\iffloattype\endcsname
- %
- % Is this the first time we've seen this float type?
- \expandafter\ifx\floatlist\relax
- \toks0 = {\do}% yes, so just \do
- \else
- % had it before, so preserve previous elements in list.
- \toks0 = \expandafter{\floatlist\do}%
- \fi
- %
- % Remember this xref in the control sequence \floatlistFLOATTYPE,
- % for later use in \listoffloats.
- \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
- \fi
-}
-
-% Read the last existing aux file, if any. No error if none exists.
-%
-\def\tryauxfile{%
- \openin 1 \jobname.aux
- \ifeof 1 \else
- \readauxfile
- \global\havexrefstrue
- \fi
- \closein 1
-}
-
-\def\readauxfile{\begingroup
- \catcode`\^^@=\other
- \catcode`\^^A=\other
- \catcode`\^^B=\other
- \catcode`\^^C=\other
- \catcode`\^^D=\other
- \catcode`\^^E=\other
- \catcode`\^^F=\other
- \catcode`\^^G=\other
- \catcode`\^^H=\other
- \catcode`\^^K=\other
- \catcode`\^^L=\other
- \catcode`\^^N=\other
- \catcode`\^^P=\other
- \catcode`\^^Q=\other
- \catcode`\^^R=\other
- \catcode`\^^S=\other
- \catcode`\^^T=\other
- \catcode`\^^U=\other
- \catcode`\^^V=\other
- \catcode`\^^W=\other
- \catcode`\^^X=\other
- \catcode`\^^Z=\other
- \catcode`\^^[=\other
- \catcode`\^^\=\other
- \catcode`\^^]=\other
- \catcode`\^^^=\other
- \catcode`\^^_=\other
- % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
- % in xref tags, i.e., node names. But since ^^e4 notation isn't
- % supported in the main text, it doesn't seem desirable. Furthermore,
- % that is not enough: for node names that actually contain a ^
- % character, we would end up writing a line like this: 'xrdef {'hat
- % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
- % argument, and \hat is not an expandable control sequence. It could
- % all be worked out, but why? Either we support ^^ or we don't.
- %
- % The other change necessary for this was to define \auxhat:
- % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
- % and then to call \auxhat in \setq.
- %
- \catcode`\^=\other
- %
- % Special characters. Should be turned off anyway, but...
- \catcode`\~=\other
- \catcode`\[=\other
- \catcode`\]=\other
- \catcode`\"=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
- \catcode`\%=\other
- \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- %
- % This is to support \ in node names and titles, since the \
- % characters end up in a \csname. It's easier than
- % leaving it active and making its active definition an actual \
- % character. What I don't understand is why it works in the *value*
- % of the xrdef. Seems like it should be a catcode12 \, and that
- % should not typeset properly. But it works, so I'm moving on for
- % now. --karl, 15jan04.
- \catcode`\\=\other
- %
- % Make the characters 128-255 be printing characters.
- {%
- \count 1=128
- \def\loop{%
- \catcode\count 1=\other
- \advance\count 1 by 1
- \ifnum \count 1<256 \loop \fi
- }%
- }%
- %
- % @ is our escape character in .aux files, and we need braces.
- \catcode`\{=1
- \catcode`\}=2
- \catcode`\@=0
- %
- \input \jobname.aux
-\endgroup}
-
-
-\message{insertions,}
-% including footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-{\catcode `\@=11
-%
-% Auto-number footnotes. Otherwise like plain.
-\gdef\footnote{%
- \let\indent=\ptexindent
- \let\noindent=\ptexnoindent
- \global\advance\footnoteno by \@ne
- \edef\thisfootno{$^{\the\footnoteno}$}%
- %
- % In case the footnote comes at the end of a sentence, preserve the
- % extra spacing after we do the footnote number.
- \let\@sf\empty
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
- %
- % Remove inadvertent blank space before typesetting the footnote number.
- \unskip
- \thisfootno\@sf
- \dofootnote
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter. Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset (and anything else that uses
-% \parseargline) fails inside footnotes because the tokens are fixed when
-% the footnote is read. --karl, 16nov96.
-%
-\gdef\dofootnote{%
- \insert\footins\bgroup
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
- \hsize=\pagewidth
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox
- \floatingpenalty\@MM
- \leftskip\z@skip
- \rightskip\z@skip
- \spaceskip\z@skip
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
- \smallfonts \rm
- %
- % Because we use hanging indentation in footnotes, a @noindent appears
- % to exdent this text, so make it be a no-op. makeinfo does not use
- % hanging indentation so @noindent can still be needed within footnote
- % text after an @example or the like (not that this is good style).
- \let\noindent = \relax
- %
- % Hang the footnote text off the number. Use \everypar in case the
- % footnote extends for more than one paragraph.
- \everypar = {\hang}%
- \textindent{\thisfootno}%
- %
- % Don't crash into the line above the footnote text. Since this
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
- \futurelet\next\fo@t
-}
-}%end \catcode `\@=11
-
-% In case a @footnote appears in a vbox, save the footnote text and create
-% the real \insert just after the vbox finished. Otherwise, the insertion
-% would be lost.
-% Similarily, if a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is finished.
-% And the same can be done for other insert classes. --kasal, 16nov03.
-
-% Replace the \insert primitive by a cheating macro.
-% Deeper inside, just make sure that the saved insertions are not spilled
-% out prematurely.
-%
-\def\startsavinginserts{%
- \ifx \insert\ptexinsert
- \let\insert\saveinsert
- \else
- \let\checkinserts\relax
- \fi
-}
-
-% This \insert replacement works for both \insert\footins{foo} and
-% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
-%
-\def\saveinsert#1{%
- \edef\next{\noexpand\savetobox \makeSAVEname#1}%
- \afterassignment\next
- % swallow the left brace
- \let\temp =
-}
-\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
-\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
-
-\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
-
-\def\placesaveins#1{%
- \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
- {\box#1}%
-}
-
-% eat @SAVE -- beware, all of them have catcode \other:
-{
- \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
- \gdef\gobblesave @SAVE{}
-}
-
-% initialization:
-\def\newsaveins #1{%
- \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
- \next
-}
-\def\newsaveinsX #1{%
- \csname newbox\endcsname #1%
- \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
- \checksaveins #1}%
-}
-
-% initialize:
-\let\checkinserts\empty
-\newsaveins\footins
-\newsaveins\margin
-
-
-% @image. We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front. If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
- % Do not bother showing banner with epsf.tex v2.7k (available in
- % doc/epsf.tex and on ctan).
- \def\epsfannounce{\toks0 = }%
- \input epsf.tex
-\fi
-\closein 1
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
- it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
- \errhelp = \noepsfhelp
- \errmessage{epsf.tex not found, images will be ignored}%
- \global\warnednoepsftrue
- \fi
- \else
- \imagexxx #1,,,,,\finish
- \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is (ignored optional) html alt text.
-% #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing this stuff.
-\newif\ifimagevmode
-\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
- \catcode`\^^M = 5 % in case we're inside an example
- \normalturnoffactive % allow _ et al. in names
- % If the image is by itself, center it.
- \ifvmode
- \imagevmodetrue
- \nobreak\bigskip
- % Usually we'll have text after the image which will insert
- % \parskip glue, so insert it here too to equalize the space
- % above and below.
- \nobreak\vskip\parskip
- \nobreak
- \line\bgroup\hss
- \fi
- %
- % Output the image.
- \ifpdf
- \dopdfimage{#1}{#2}{#3}%
- \else
- % \epsfbox itself resets \epsf?size at each figure.
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
- \epsfbox{#1.eps}%
- \fi
- %
- \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
-\endgroup}
-
-
-% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
-% etc. We don't actually implement floating yet, we always include the
-% float "here". But it seemed the best name for the future.
-%
-\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
-
-% There may be a space before second and/or third parameter; delete it.
-\def\eatcommaspace#1, {#1,}
-
-% #1 is the optional FLOATTYPE, the text label for this float, typically
-% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
-% this float will not be numbered and cannot be referred to.
-%
-% #2 is the optional xref label. Also must be present for the float to
-% be referable.
-%
-% #3 is the optional positioning argument; for now, it is ignored. It
-% will somehow specify the positions allowed to float to (here, top, bottom).
-%
-% We keep a separate counter for each FLOATTYPE, which we reset at each
-% chapter-level command.
-\let\resetallfloatnos=\empty
-%
-\def\dofloat#1,#2,#3,#4\finish{%
- \let\thiscaption=\empty
- \let\thisshortcaption=\empty
- %
- % don't lose footnotes inside @float.
- %
- % BEWARE: when the floats start float, we have to issue warning whenever an
- % insert appears inside a float which could possibly float. --kasal, 26may04
- %
- \startsavinginserts
- %
- % We can't be used inside a paragraph.
- \par
- %
- \vtop\bgroup
- \def\floattype{#1}%
- \def\floatlabel{#2}%
- \def\floatloc{#3}% we do nothing with this yet.
- %
- \ifx\floattype\empty
- \let\safefloattype=\empty
- \else
- {%
- % the floattype might have accents or other special characters,
- % but we need to use it in a control sequence name.
- \indexnofonts
- \turnoffactive
- \xdef\safefloattype{\floattype}%
- }%
- \fi
- %
- % If label is given but no type, we handle that as the empty type.
- \ifx\floatlabel\empty \else
- % We want each FLOATTYPE to be numbered separately (Figure 1,
- % Table 1, Figure 2, ...). (And if no label, no number.)
- %
- \expandafter\getfloatno\csname\safefloattype floatno\endcsname
- \global\advance\floatno by 1
- %
- {%
- % This magic value for \thissection is output by \setref as the
- % XREFLABEL-title value. \xrefX uses it to distinguish float
- % labels (which have a completely different output format) from
- % node and anchor labels. And \xrdef uses it to construct the
- % lists of floats.
- %
- \edef\thissection{\floatmagic=\safefloattype}%
- \setref{\floatlabel}{Yfloat}%
- }%
- \fi
- %
- % start with \parskip glue, I guess.
- \vskip\parskip
- %
- % Don't suppress indentation if a float happens to start a section.
- \restorefirstparagraphindent
-}
-
-% we have these possibilities:
-% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
-% @float Foo,lbl & no caption: Foo 1.1
-% @float Foo & @caption{Cap}: Foo: Cap
-% @float Foo & no caption: Foo
-% @float ,lbl & Caption{Cap}: 1.1: Cap
-% @float ,lbl & no caption: 1.1
-% @float & @caption{Cap}: Cap
-% @float & no caption:
-%
-\def\Efloat{%
- \let\floatident = \empty
- %
- % In all cases, if we have a float type, it comes first.
- \ifx\floattype\empty \else \def\floatident{\floattype}\fi
- %
- % If we have an xref label, the number comes next.
- \ifx\floatlabel\empty \else
- \ifx\floattype\empty \else % if also had float type, need tie first.
- \appendtomacro\floatident{\tie}%
- \fi
- % the number.
- \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
- \fi
- %
- % Start the printed caption with what we've constructed in
- % \floatident, but keep it separate; we need \floatident again.
- \let\captionline = \floatident
- %
- \ifx\thiscaption\empty \else
- \ifx\floatident\empty \else
- \appendtomacro\captionline{: }% had ident, so need a colon between
- \fi
- %
- % caption text.
- \appendtomacro\captionline{\scanexp\thiscaption}%
- \fi
- %
- % If we have anything to print, print it, with space before.
- % Eventually this needs to become an \insert.
- \ifx\captionline\empty \else
- \vskip.5\parskip
- \captionline
- %
- % Space below caption.
- \vskip\parskip
- \fi
- %
- % If have an xref label, write the list of floats info. Do this
- % after the caption, to avoid chance of it being a breakpoint.
- \ifx\floatlabel\empty \else
- % Write the text that goes in the lof to the aux file as
- % \floatlabel-lof. Besides \floatident, we include the short
- % caption if specified, else the full caption if specified, else nothing.
- {%
- \atdummies \turnoffactive \otherbackslash
- % since we read the caption text in the macro world, where ^^M
- % is turned into a normal character, we have to scan it back, so
- % we don't write the literal three characters "^^M" into the aux file.
- \scanexp{%
- \xdef\noexpand\gtemp{%
- \ifx\thisshortcaption\empty
- \thiscaption
- \else
- \thisshortcaption
- \fi
- }%
- }%
- \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
- \ifx\gtemp\empty \else : \gtemp \fi}}%
- }%
- \fi
- \egroup % end of \vtop
- %
- % place the captured inserts
- %
- % BEWARE: when the floats start float, we have to issue warning whenever an
- % insert appears inside a float which could possibly float. --kasal, 26may04
- %
- \checkinserts
-}
-
-% Append the tokens #2 to the definition of macro #1, not expanding either.
-%
-\def\appendtomacro#1#2{%
- \expandafter\def\expandafter#1\expandafter{#1#2}%
-}
-
-% @caption, @shortcaption
-%
-\def\caption{\docaption\thiscaption}
-\def\shortcaption{\docaption\thisshortcaption}
-\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
-\def\defcaption#1#2{\egroup \def#1{#2}}
-
-% The parameter is the control sequence identifying the counter we are
-% going to use. Create it if it doesn't exist and assign it to \floatno.
-\def\getfloatno#1{%
- \ifx#1\relax
- % Haven't seen this figure type before.
- \csname newcount\endcsname #1%
- %
- % Remember to reset this floatno at the next chap.
- \expandafter\gdef\expandafter\resetallfloatnos
- \expandafter{\resetallfloatnos #1=0 }%
- \fi
- \let\floatno#1%
-}
-
-% \setref calls this to get the XREFLABEL-snt value. We want an @xref
-% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
-% first read the @float command.
-%
-\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
-
-% Magic string used for the XREFLABEL-title value, so \xrefX can
-% distinguish floats from other xref types.
-\def\floatmagic{!!float!!}
-
-% #1 is the control sequence we are passed; we expand into a conditional
-% which is true if #1 represents a float ref. That is, the magic
-% \thissection value which we \setref above.
-%
-\def\iffloat#1{\expandafter\doiffloat#1==\finish}
-%
-% #1 is (maybe) the \floatmagic string. If so, #2 will be the
-% (safe) float type for this float. We set \iffloattype to #2.
-%
-\def\doiffloat#1=#2=#3\finish{%
- \def\temp{#1}%
- \def\iffloattype{#2}%
- \ifx\temp\floatmagic
-}
-
-% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
-%
-\parseargdef\listoffloats{%
- \def\floattype{#1}% floattype
- {%
- % the floattype might have accents or other special characters,
- % but we need to use it in a control sequence name.
- \indexnofonts
- \turnoffactive
- \xdef\safefloattype{\floattype}%
- }%
- %
- % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
- \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
- \ifhavexrefs
- % if the user said @listoffloats foo but never @float foo.
- \message{\linenumber No `\safefloattype' floats to list.}%
- \fi
- \else
- \begingroup
- \leftskip=\tocindent % indent these entries like a toc
- \let\do=\listoffloatsdo
- \csname floatlist\safefloattype\endcsname
- \endgroup
- \fi
-}
-
-% This is called on each entry in a list of floats. We're passed the
-% xref label, in the form LABEL-title, which is how we save it in the
-% aux file. We strip off the -title and look up \XRLABEL-lof, which
-% has the text we're supposed to typeset here.
-%
-% Figures without xref labels will not be included in the list (since
-% they won't appear in the aux file).
-%
-\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
-\def\listoffloatsdoentry#1-title\finish{{%
- % Can't fully expand XR#1-lof because it can contain anything. Just
- % pass the control sequence. On the other hand, XR#1-pg is just the
- % page number, and we want to fully expand that so we can get a link
- % in pdf output.
- \toksA = \expandafter{\csname XR#1-lof\endcsname}%
- %
- % use the same \entry macro we use to generate the TOC and index.
- \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
- \writeentry
-}}
-
-\message{localization,}
-% and i18n.
-
-% @documentlanguage is usually given very early, just after
-% @setfilename. If done too late, it may not override everything
-% properly. Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
-%
-\parseargdef\documentlanguage{%
- \tex % read txi-??.tex file in plain TeX.
- % Read the file if it exists.
- \openin 1 txi-#1.tex
- \ifeof 1
- \errhelp = \nolanghelp
- \errmessage{Cannot read language file txi-#1.tex}%
- \else
- \input txi-#1.tex
- \fi
- \closein 1
- \endgroup
-}
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty. Maybe you need to install it? In the current directory
-should work if nowhere else does.}
-
-
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
-
-
-% Page size parameters.
-%
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything. We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize. We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
- \ifx\emergencystretch\thisisundefined
- % Allow us to assign to \emergencystretch anyway.
- \def\emergencystretch{\dimen0}%
- \else
- \emergencystretch = .15\hsize
- \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
-% physical page width.
-%
-% We also call \setleading{\textleading}, so the caller should define
-% \textleading. The caller should also set \parskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6#7#8{%
- \voffset = #3\relax
- \topskip = #6\relax
- \splittopskip = \topskip
- %
- \vsize = #1\relax
- \advance\vsize by \topskip
- \outervsize = \vsize
- \advance\outervsize by 2\topandbottommargin
- \pageheight = \vsize
- %
- \hsize = #2\relax
- \outerhsize = \hsize
- \advance\outerhsize by 0.5in
- \pagewidth = \hsize
- %
- \normaloffset = #4\relax
- \bindingoffset = #5\relax
- %
- \ifpdf
- \pdfpageheight #7\relax
- \pdfpagewidth #8\relax
- \fi
- %
- \setleading{\textleading}
- %
- \parindent = \defaultparindent
- \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
- \textleading = 13.2pt
- %
- % If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}%
- {\voffset}{.25in}%
- {\bindingoffset}{36pt}%
- {11in}{8.5in}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-\def\smallbook{{\globaldefs = 1
- \parskip = 2pt plus 1pt
- \textleading = 12pt
- %
- \internalpagesizes{7.5in}{5in}%
- {\voffset}{.25in}%
- {\bindingoffset}{16pt}%
- {9.25in}{7in}%
- %
- \lispnarrowing = 0.3in
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
- \defbodyindent = .5cm
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
- \textleading = 13.2pt
- %
- % Double-side printing via postscript on Laserjet 4050
- % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
- % To change the settings for a different printer or situation, adjust
- % \normaloffset until the front-side and back-side texts align. Then
- % do the same for \bindingoffset. You can set these for testing in
- % your texinfo source file like this:
- % @tex
- % \global\normaloffset = -6mm
- % \global\bindingoffset = 10mm
- % @end tex
- \internalpagesizes{51\baselineskip}{160mm}
- {\voffset}{\hoffset}%
- {\bindingoffset}{44pt}%
- {297mm}{210mm}%
- %
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
- \defbodyindent = 5mm
-}}
-
-% Use @afivepaper to print on European A5 paper.
-% From romildo@urano.iceb.ufop.br, 2 July 2000.
-% He also recommends making @example and @lisp be small.
-\def\afivepaper{{\globaldefs = 1
- \parskip = 2pt plus 1pt minus 0.1pt
- \textleading = 12.5pt
- %
- \internalpagesizes{160mm}{120mm}%
- {\voffset}{\hoffset}%
- {\bindingoffset}{8pt}%
- {210mm}{148mm}%
- %
- \lispnarrowing = 0.2in
- \tolerance = 800
- \hfuzz = 1.2pt
- \contentsrightmargin = 0pt
- \defbodyindent = 2mm
- \tableindent = 12mm
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.
-\def\afourlatex{{\globaldefs = 1
- \afourpaper
- \internalpagesizes{237mm}{150mm}%
- {\voffset}{4.6mm}%
- {\bindingoffset}{7mm}%
- {297mm}{210mm}%
- %
- % Must explicitly reset to 0 because we call \afourpaper.
- \globaldefs = 0
-}}
-
-% Use @afourwide to print on A4 paper in landscape format.
-\def\afourwide{{\globaldefs = 1
- \afourpaper
- \internalpagesizes{241mm}{165mm}%
- {\voffset}{-2.95mm}%
- {\bindingoffset}{7mm}%
- {297mm}{210mm}%
- \globaldefs = 0
-}}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
- \globaldefs = 1
- %
- \parskip = 3pt plus 2pt minus 1pt
- \setleading{\textleading}%
- %
- \dimen0 = #1
- \advance\dimen0 by \voffset
- %
- \dimen2 = \hsize
- \advance\dimen2 by \normaloffset
- %
- \internalpagesizes{#1}{\hsize}%
- {\voffset}{\normaloffset}%
- {\bindingoffset}{44pt}%
- {\dimen0}{\dimen2}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}%$ font-lock fix
-
-% This macro is used to make a character print one way in \tt
-% (where it can probably be output as-is), and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise. Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font. Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts. But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \backslashcurfont outputs one backslash character in current font,
-% as in \char`\\.
-\global\chardef\backslashcurfont=`\\
-\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
-
-% \rawbackslash defines an active \ to do \backslashcurfont.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.
-{\catcode`\\=\active
- @gdef@rawbackslash{@let\=@backslashcurfont}
- @gdef@otherbackslash{@let\=@realbackslash}
-}
-
-% \realbackslash is an actual character `\' with catcode other.
-{\catcode`\\=\other @gdef@realbackslash{\}}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\backslashcurfont}}
-
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{%
- @let"=@normaldoublequote
- @let\=@realbackslash
- @let~=@normaltilde
- @let^=@normalcaret
- @let_=@normalunderscore
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
- @let+=@normalplus
- @let$=@normaldollar %$ font-lock fix
- @unsepspaces
-}
-
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'. (Thus, \ is not expandable when this is in
-% effect.)
-%
-@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
- @ifx\@eatinput @let\ = @normalbackslash @fi
- @catcode`+=@active
- @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
-
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
-@c End:
-
-@c vim:sw=2:
-
-@ignore
- arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-@end ignore
diff --git a/contrib/groff/doc/webpage.ms b/contrib/groff/doc/webpage.ms
deleted file mode 100644
index 6811661c7b04..000000000000
--- a/contrib/groff/doc/webpage.ms
+++ /dev/null
@@ -1,1832 +0,0 @@
-.\" This file gives a small example how a web page could look like if created
-.\" with groff.
-.\"
-.\"
-.\" To make it work with other output devices also, we include www.tmac
-.\" directly.
-.\"
-.nr PS 10
-.nr VS 12
-.if '\*[.T]'html' .nr LL 10i
-.if r ps4html .nr LL 10i
-.
-.HEAD "<link rel=""stylesheet"" type=""text/css"" href=""groff.css"" >"
-.\" .HEAD "<link rel=""icon"" type=""image/png"" href=""http://www.gnu.org/graphics/gnu-mini.png"" >"
-.
-.mso www.tmac
-.
-.de blm-macro
-. nr tmp \\n[.i]
-. LP
-. in \\n[tmp]u
-..
-.blm blm-macro
-.
-.HX 0
-.
-.defcolor mydarkred rgb 0.65f 0.1f 0.2f
-.defcolor mydarkgreen rgb 0.1f 0.5f 0.2f
-.defcolor mydarkblue rgb 0.1f 0.2f 0.6f
-.
-.ds GNU \m[mydarkred]G\m[]\m[mydarkgreen]N\m[]\m[mydarkblue]U\m[]
-.
-.NHR
-.HTL
-.
-Home of Groff (GNU Troff).
-.
-.
-.HTML-IMAGE-LEFT
-.PSPIC -L gnu.eps 2i 2i
-.ie r ps4html \
-. nop \v'-0.66i'\h'2.0i'\s[100]\*[GNU] Troff\s0
-.el \
-. nop \v'-0.66i'\h'2.0i'\s[60]\*[GNU] Troff\s0
-.HTML-IMAGE-END
-.
-.HR
-.HnS 1
-GNU Troff (\c
-.URL http://\:groff.ffii.org/ Groff )
-\[em] a
-.URL http://\:www.gnu.org/ GNU
-project.
-.HnE
-.HR
-.LK
-.
-.LP
-.DC T HE mydarkred
-groff (GNU Troff) software
-is a typesetting package which reads plain text mixed with
-formatting commands and produces formatted output.
-Groff now supports HTML.
-.
-.
-.SH
-Download
-
-The source code of the currently released versions of groff is
-available at the
-.URL "http://\:groff.ffii.org/\:groff/" "FFII host (Germany)" ,
-.URL "ftp://\:ftp.gnu.org/\:gnu/\:groff/" "GNU host (USA)" ,
-and its mirrors.
-.
-The USA site also contains older, obsolete versions.
-
-The most actual pre-release, development version is available from a
-CVS repository, see below.
-.
-Development snapshots (produced twice a day from the CVS repository)
-can be downloaded from
-.URL "http://\:groff.ffii.org/\:groff/\:devel" here .
-
-For a special version of groff on the Microsoft operating systems, see
-.URL "http://\:gnuwin32.sf.net/\:packages/\:groffl.htm" "Groff for Windows" .
-
-GNU troff is released under the
-.URL http://\:www.gnu.org/\:copyleft/\:gpl.html "GNU Copyright License" .
-
-User issues lead:
-.MTO Ted.Harding@\:nessie.mcc.ac.uk "Ted Harding" .
-.br
-Technical issues lead:
-.MTO wl@\:gnu.org "Werner Lemberg" .
-.
-.
-.SH
-README
-
-This is the GNU groff document formatting system.
-The version number is given in the file VERSION.
-
-Included in this release are implementations of troff, pic, eqn, tbl,
-grn, refer, \-man, \-mdoc, and \-ms macros, and drivers for PostScript,
-TeX dvi format, HP LaserJet\~4 printers, Canon CAPSL printers, HTML format
-(beta status), and typewriter-like devices.
-Also included is a modified version of the Berkeley \-me macros, an enhanced
-version of the X11 xditview previewer, and an implementation of the \-mm
-macros contributed by
-.MTO jh@\:axis.se "J\[:o]rgen H\[:a]gg" .
-
-See the file INSTALL for installation instructions.
-You will require a C++ compiler.
-
-The file NEWS describes recent user-visible changes to groff.
-
-Groff is free software.
-See the file COPYING for copying permission.
-
-The file PROBLEMS describes various problems that have been encountered in
-compiling, installing, and running groff.
-
-The most recent released version of groff is always available by
-.URL "ftp://\:ftp.gnu.org/\:gnu/\:groff" "anonymous ftp" .
-
-The current development version of groff is available from a
-.URL "http://\:savannah.gnu.org/\:cvs/\:?group=groff" "CVS repository" .
-You can access it by first selecting a parent directory in
-which to create a working copy (call it, say, ~/cvswork), and then
-executing the commands
-
-.in 2m
-.nf
-.ft C
-cd ~/cvswork
-CVS_RSH=ssh; export CVS_RSH
-cvs -d:ext:anoncvs@savannah.gnu.org/cvsroot/groff -z5 co groff
-.ft P
-.fi
-.in
-
-(Note that you need an SSH client for security reasons.)
-
-This will create a subdirectory, ~/cvswork/groff, with a `checked out'
-copy of the CVS repository.
-An update of this working copy may be
-achieved, at any later time by invoking the commands
-
-.in 2m
-.nf
-.ft C
-cd ~/cvswork/groff
-CVS_RSH=ssh cvs -z5 update -dP
-.ft P
-.fi
-.in
-
-Please read the CVS info pages for further details.
-
-Finally, it is possible to access the CVS with a
-.URL http://\:savannah.gnu.org/\:cvs/\:?group=groff "web browser" .
-
-Alternatively, you can download snapshots (which are updated twice a day).
-The complete groff source as a single file is available
-.URL http://\:groff.ffii.org/\:groff/\:devel/\:groff-current.tar.gz here .
-
-A diff file relative to groff-\[la]version\[ra], the latest official groff
-release is available at
-
-.in 2m
-.ft C
-http://groff.ffii.org/groff/devel/groff-\[la]version\[ra]-current.diff.gz
-.ft P
-.in
-
-Assuming that groff-\[la]version\[ra].tar.gz and
-groff-\[la]version\[ra]-current.diff.gz are in the same directory, do the
-following to apply the diff file:
-
-.in 2m
-.nf
-.ft C
-tar xzvf groff-\[la]version\[ra].tar.gz
-cd groff-\[la]version\[ra]
-gunzip -c ../groff-\[la]version\[ra]-current.diff.gz | patch -p1
-.ft P
-.fi
-.in
-
-Depending on your requirements, you may need at least some of the
-following tools to build groff directly from its source:
-
-.in 2m
-.nf
-ghostscript
-the psutils package
-the netpbm package
-texinfo 4.8
-bison \[>=] 1.875b or byacc
-.fi
-.in
-
-Note that texinfo and bison or byacc are required only for building from
-CVS sources (either a checked out working copy, or a daily snapshot).
-They are not required for building from a stable release tarball.
-Also note that the version numbers stated are the minimum supported.
-No version of texinfo < 4.8 will work, and the original release of bison
-1.875 is known not to work; you \fImay\fP find that bison releases < 1.875
-will work, but in case of difficulty, please update to a later version
-\fIbefore\fP posting a bug report.
-
-For \fIall\fP sources, you need ghostscript for creation of either PDF or
-HTML output; the netpbm and psutils packages are required only for HTML
-output.
-If you don't intend to produce output in either of these formats, then
-these packages are unnecessary.
-
-Please report bugs using the form in the file BUG-REPORT; the idea of this
-is to make sure that FSF has all the information it needs to fix the bug.
-At the very least, read the BUG-REPORT form and make sure that you supply
-all the information that it asks for.
-Even if you are not sure that something is a bug, report it using
-BUG-REPORT: this will enable us to determine whether it really is a bug or
-not.
-
-Three mailing lists are available:
-
-.ULS
-.LI
-.MTO bug-groff@gnu.org bug-groff@gnu.org
-for reporting bugs
-
-.LI
-.MTO groff@gnu.org groff@gnu.org
-for general discussion of groff
-
-.LI
-.MTO groff-commit@gnu.org groff-commit@gnu.org
-a read-only list showing commitments to the CVS repository
-.ULE
-
-You can post mails directly to the `bug-groff' list, without subscribing;
-to post mails to the `groff' list you must subscribe to it.
-
-To subscribe, send e-mail to \[la]list\[ra]-request@\[la]domain\[ra]
-(example:
-.MTO groff-request@\:gnu.org groff-request@\:gnu.org
-for the `groff' list) with the word `subscribe' in either the
-subject or body of the e-mail (don't include the quotes).
-Alternatively, you may subscribe by visiting the web pages at
-
-.in 2m
-.nf
-.URL http://lists.gnu.org/mailman/listinfo/bug-groff
-.URL http://lists.gnu.org/mailman/listinfo/groff
-.URL http://lists.gnu.org/mailman/listinfo/groff-commit
-.fi
-.in
-
-Each of these web pages also provides a link to a browseable archive of
-postings to the corresponding mailing list.
-
-GNU groff was written by
-.MTO jjc@\:jclark.com "James Clark" .
-It is now maintained by
-.MTO Ted.Harding@\:nessie.mcc.ac.uk "Ted Harding"
-and
-.MTO wl@\:gnu.org "Werner Lemberg" .
-.
-.
-.SH
-NEWS VERSION 1.19.2
-.
-.SH 2 troff
-
-.ULS
-.LI
-Analogously to the .ft and \ef pair, two new requests `gcolor' and
-`fcolor' (which pair with \em and \eM, respectively) have been added to
-set the glyph and background colours.
-
-.LI
-A new read-only, string-valued register `.sty' returns the name of the
-current style.
-
-.LI
-Two new conditional operators `F\~\[la]name\[ra]' and `S\~\[la]name\[ra]'
-have been added.
-`F' is true if a font \[la]name\[ra] exists.
-`S' is true if a style \[la]name\[ra] has been registered.
-
-.LI
-Cyrillic characters have been added to the `utf8' and `html' output
-devices.
-.ULE
-.
-.
-.SH 2
-pic
-
-.ULS
-.LI
-The `by' argument in a `for' loop can now be negative if it is additive.
-For the multiplicative case, it must be greater than zero.
-.ULE
-.
-.
-.SH 2
-eqn
-
-.ULS
-.LI
-The following keywords aren't new but haven't been documented previously:
-
-.in 2m
-\fBundef NAME\fP (to undefine a macro)
-.br
-\fBcopy "FILE"\fP (a synonym for `include')
-.br
-\fBspace n\fP (to modify the vertical spacing before and after an equation)
-.in
-
-.LI
-The following macros aren't new but haven't been documented previously:
-
-.in 2m
-\fBAlpha, .\|.\|., Omega\fP (the same as `ALPHA', .\|.\|., `OMEGA')
-.br
-\fBldots\fP (three dots on the base line)
-.br
-\fBdollar\fP (a dollar glyph)
-.in
-
-.LI
-The following keywords have been extended. Again, this isn't new but
-hasn't been documented previously:
-
-.in 2m
-.ft B
-col n { .\|.\|. }
-.br
-lcol n { .\|.\|. }
-.br
-rcol n { .\|.\|. }
-.br
-ccol n { .\|.\|. }
-.br
-pile n { .\|.\|. }
-.br
-lpile n { .\|.\|. }
-.br
-rpile n { .\|.\|. }
-.br
-cpile n { .\|.\|. }
-.ft P
-(set vertical spacing between rows to\~N)
-.ULE
-.
-.
-.SH 2
-grohtml
-
-.ULS
-.LI
-This device driver has been raised to beta stage; its set of tags should
-be stable now.
-
-.LI
-New command line option `\-s' to set the base point size.
-
-.LI
-New command line option `\-S' to set the split level while generating
-multiple files.
-.ULE
-.
-.
-.SH 2
-grotty
-
-.ULS
-.LI
-Experimental support for zero-width and double-width characters.
-.ULE
-.
-.
-.SH 2
-gxditview
-
-.ULS
-.LI
-On platforms which have the X\~Window System this program is now built and
-installed automatically.
-.ULE
-.
-.
-.SH 2
-xtotroff
-
-.ULS
-.LI
-This program to create font definition files for xditview isn't new but
-hasn't been installed previously.
-.ULE
-.
-.
-.SH 2
-groffer
-
-.ULS
-.LI
-A security problem (reported as CAN-2004-0969) has been fixed.
-.ULE
-.
-.
-.SH 2
-gdiffmk
-
-.ULS
-.LI
-A new script contributed by Mike Bianchi.
-It compares two groff, nroff, or troff documents and creates an output with
-added margin characters (using `.mc') to indicate the differences.
-.ULE
-.
-.
-.SH 2
-pdfroff
-
-.ULS
-.LI
-A new wrapper script contributed by Keith Marshall to easily create PDF
-documents with groff.
-.ULE
-.
-.
-.SH 2
-macro packages
-
-.ULS
-.LI
-ms.tmac
-
-.ULS
-.LI
-Support for fractional point sizes: A value for the `PS', `VS', `FPS',
-and `VPS' register larger than or equal to 1000 is always divided by 1000.
-For example, `.nr\~PS\~10250' sets the document's font size to 10.25 points.
-
-.LI
-The `Ds' and `De' macros provided in ms since groff version 1.19 have
-been removed; the equivalent `DS' and `DE' macros should be used instead.
-X11 documents which actually use `Ds' and `De' always load a
-specific macro file from the X11 distribution (`macros.t') which
-provides proper definitions for the two macros.
-
-.LI
-The following registers have been added for improving layout control:
-
-.IP PORPHANS
-Defines number of lines following `LP', `PP', `QP', `IP' or `XP' which
-must be kept together, before any automatic page break.
-
-.IP HORPHANS
-Sets number of lines of following paragraph which must be kept with a
-heading, defined by `NH' or `SH', before any automatic page break.
-
-.IP GROWPS
-Sets the first level of heading (set with `NH') which will keep the
-same point size as body text.
-
-.IP PSINCR
-Sets the point size increment for each level of heading (set with
-`NH'), below the threshold level set by `GROWPS'; e.g., if
-\en[PS]\~=\~10, \en[GROWPS]\~=\~3 and \en[PSINCR]\~=\~2.0p, then `.NH\~1'
-will produce 14pt headings, `.NH\~2' will produce 12pt, and all other levels
-will remain at 10pt (because \en[PS]\~=\~10).
-
-.LI
-The `SH' macro now accepts a numeric argument, to make heading size
-match that of `NH' with same argument value when the `GROWPS'/`PSINCR'
-feature is enabled.
-.ULE
-
-Please refer to the documentation of the ms package for other, minor
-improvements.
-
-.LI
-me.tmac
-
-The section type set with the `++' request is available in the `_M'
-register.
-This isn't new but hasn't been documented before.
-
-.LI
-www.tmac
-
-The `HR' macro no longer causes an empty line for non-HTML devices.
-
-A new macro `HEAD' has been added to directly add data to the
-<head>...</head> block.
-
-New macros `OLS' and `OLE' to start and end an ordered list.
-
-New macros `DLS' and `DLE' to start and end a definition list.
-.ULE
-.
-.
-.SH 2
-pdfmark
-
-.ULS
-.LI
-A new macro package contributed by Keith Marshall which implements PDF
-marks.
-This is in alpha stage currently.
-.ULE
-.
-.
-.SH 2
-miscellaneous
-
-.ULS
-.LI
-Two new keywords to the DESC file have been added which are needed for
-grohtml: `image_generator' and `unscaled_charwidths'.
-The former gives the name of the program which creates PNG images,
-and the latter makes troff always use unscaled character widths.
-.ULE
-.
-.
-.SH
-NEWS VERSION 1.19.1
-.
-.SH 2
-groff
-
-.ULS
-.LI
-The argument of the command line option `\-I' is now also passed to troff
-and grops, specifying a directory to search for files on the command line,
-files named in `so' and `psbb' requests, and files named in \eX'ps:\~file'
-and \eX'ps:\~import' escapes.
-
-.LI
-If option `\-V' is used more than once, the commands will be both printed
-on standard error and run.
-.ULE
-.
-.
-.SH 2
-troff
-
-.ULS
-.LI
-Two new read-only, string-valued registers `.m' and `.M' return the
-name of the current drawing and background color, respectively.
-
-.LI
-New read-only register `.U' which is set to\~1 if in safer mode and set
-to\~0 if in unsafe mode.
-
-.LI
-An input encoding file for \%latin-5 (a.k.a.\& ISO \%8859-9) has been
-added.
-Example use:
-
-.in 2m
-.ft C
-groff \-Tdvi \-mlatin5 my_file > my_file.dvi
-.ft R
-.in
-
-Note that some output devices don't support all glyphs of this encoding.
-
-.LI
-If the `return' request is called with an argument, it exits twice,
-namely the current macro and the macro one level higher.
-This is used to define a wrapper macro for `return' in trace.tmac.
-
-.LI
-For completeness, two new requests have been added: `dei1' and `ami1'.
-They are equivalent to `dei' and `ami', respectively, but the macros
-are executed with compatibility mode off (similar to `de1' and `am1').
-
-.LI
-New command line option `\-I' to specify a directory for files (both
-those on the command line and those named in `psbb' requests).
-This is also handled by the groff wrapper program.
-
-.LI
-Since version 1.19 you can say `.vs\~0'.
-Older versions emit a warning and convert this to `.vs\~\en[.V]'.
-
-This hasn't been documented properly.
-Note that `.vs\~0' isn't saved in a diversion since it doesn't result
-in vertical motion.
-.ULE
-.
-.
-.SH 2
-pic
-
-.ULS
-.LI
-Dashed and dotted ellipses have been implemented.
-.ULE
-.
-.
-.SH 2
-tbl
-
-.ULS
-.LI
-New key character `x' to make tbl call a user-defined macro on a table
-cell.
-Patch by
-.MTO hj.oertel@\:surfeu.de "Heinz-J\[:u]rgen Oertel" .
-.ULE
-.
-.
-.SH 2
-grap2graph
-
-.ULS
-.LI
-A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S. Raymond" .
-It converts a grap diagram into a cropped image.
-Since it uses gs and the PNM library, virtually all graphics formats
-are available for output.
-[Note that the grap program itself isn't part of the groff package;
-see the file MORE.STUFF how to obtain grap.]
-.ULE
-.
-.
-.SH 2
-grohtml
-
-.ULS
-.LI
-New option `\-j' to emit output splitted into multiple files.
-.ULE
-.
-.
-.SH 2
-grops
-
-.ULS
-.LI
-New command line option `\-I' to specify a directory to search for files
-on the command line and files named in \eX'ps:\~import' and \eX'ps:\~file'
-escapes.
-This is also handled by the groff wrapper program.
-
-.LI
-The default value for the `broken' keyword in the DESC file is now\~0.
-.ULE
-.
-.
-.SH 2
-grolj4
-
-.ULS
-.LI
-A new man page `lj4_font(5)' documents how fonts are accessed with
-grolj4.
-
-.LI
-The built-in fonts for LJ4 and newer PCL\~5 devices have been completely
-revised, mainly to access as much glyphs as possible.
-The provided metric files should be compatible with recent PCL\~5 printers
-also.
-Additionally, font description files have been added for the Arial and
-Times New Roman family, the MS symbol, and Wingdings fonts.
-.ULE
-.
-.
-.SH 2
-afmtodit
-
-.ULS
-.LI
-New option `\-x' to prevent use of built-in Adobe Glyph List.
-.ULE
-.
-.
-.SH 2
-hpftodit
-
-.ULS
-.LI
-Completely revised to handle HP TrueType metric files also.
-See the hpftodit manual page for more details.
-.ULE
-.
-.
-.SH 2
-groffer
-
-.ULS
-.LI
-This version is a rewrite of groffer in many parts, but it is kept in
-the old single script style.
-
-.ULS
-.LI
-New options: \-\-text (\-\-mode\~text), \-\-tty-viewer, \-\-X (\-\-mode\~X),
-\-\-X-viewer, \-\-html (\-\-mode\~html), \-\-html-view, \-\-apropos-data,
-\-\-apropos-devel, \-\-apropos-progs.
-
-.LI
-New documentation file README_SH.
-
-.LI
-Enhancement of the configuration files and the `apropos' handling.
-.ULE
-.ULE
-.
-.
-.SH 2
-macro packages
-
-.ULS
-.LI
-www.tmac: New macro `JOBNAME' to split output into multiple files.
-
-.LI
-In mdoc, multiple calls to `.Lb' are now supported in the LIBRARY
-section.
-.ULE
-.
-.
-.SH
-NEWS VERSION 1.19
-.
-.SH 2
-troff
-
-.ULS
-.LI
-Input encoding files for \%latin-9 (a.k.a.\& \%latin-0 and ISO \%8859-15)
-and \%latin-2 (ISO \%8859-2) have been added.
-Example use:
-
-.in 2m
-.ft C
-groff -Tdvi -mlatin9 my_file > my_file.dvi
-.ft P
-.in
-
-You still need proper fonts with the necessary glyphs.
-Out of the box, the groff package supports \%latin-9 only for \-Tps,
-\-Tdvi, and \-Tutf8, and \%latin-2 only for \-Tdvi and \-Tutf8.
-
-.LI
-Composite glyphs are now supported.
-To do this, a subset of the Adobe Glyph List (AGL) Algorithm as described in
-.URL http://partners.adobe.com/asn/tech/type/unicodegn.jsp \
- http://partners.adobe.com/asn/tech/type/unicodegn.jsp
-is used to construct glyph names based on Unicode character codes.
-The existing groff glyph names are frozen; no glyph names which can't be
-constructed algorithmically will be added in the future.
-
-The \e[...] escape sequence has been extended to specify multiple glyph
-components.
-Example:
-
-.in 2m
-.ft C
-\e[A ho]
-.ft R
-.in
-
-this accesses a glyph with the name `u0041_0328'.
-
-Some groff glyphs which are useful as composites map to `wrong' Unicode
-code points.
-For example, `ho' maps to U+02DB which is a spacing ogonek, whereas a
-non-spacing ogonek U+0328 is needed for composite glyphs.
-The new request
-
-.in 2m
-.ft C
-\&.composite from to
-.ft R
-.in
-
-will change the mapping while a composite glyph name is constructed.
-To make \e[A\~ho] yield the expected result,
-
-.in 2m
-.ft C
-\&.composite ho u0328
-.ft R
-.in
-
-is needed.
-[The new file `composite.tmac' loaded at start-up already
-contains proper calls to `.composite'.]
-
-Please refer to the info pages of groff and to the groff_char man page
-for more details.
-
-.LI
-A new request `fschar' has been added to define font-specific fallback
-characters.
-They are searched after the list of fonts declared with the
-`fspecial' request but before the list of fonts declared with `special'.
-
-.LI
-Fallback characters defined with `fschar' can be removed with the
-new `rfschar' request.
-
-.LI
-A new request `schar' has been added to define global fallback
-characters.
-They are searched after the list of fonts declared with the
-`special' request but before the already mounted special fonts.
-
-.LI
-In groff versions 1.18 and 1.18.1, \eD'f\~...'\& didn't move the current
-point horizontally.
-Despite of being silly, this change has been reverted for backwards
-compatibility.
-Consequently, the intermediate output command `Df' also moves the
-position horizontally again.
-
-\eD'f\~...'\& is deprecated since it depends on the horizontal resolution
-of the output device (given with the `hor' parameter in the DESC file).
-Use the new \eD'Fg\~...'\& escape instead.
-
-.LI
-For orthogonality, new \eD subcommands to change the fill color are
-available:
-
-.in 2m
-.ft C
-\eD'Fr ...' \f[R](rgb)\f[]
-.br
-\eD'Fc ...' \f[R](cmy)\f[]
-.br
-\eD'Fg ...' \f[R](gray)\f[]
-.br
-\eD'Fk ...' \f[R](cmyk)\f[]
-.br
-\eD'Fd' \f[R](default color)\f[]
-.ft R
-.in
-
-The arguments are the same as with the `defcolor' request.
-The current position is \f[I]not\f[] changed.
-
-.LI
-The values set with \eH and \eS are now available in number registers
-\en[.height] and \en[.slant], respectively.
-
-.LI
-The `.pe' number register isn't new but hasn't been documented before.
-It is set to\~1 during a page ejection caused by the `bp' request.
-
-.LI
-The new glyph symbol `tno' is a textual variant of `no'.
-
-.LI
-The new glyph symbol `+e' represents U+03F5, GREEK LUNATE EPSILON SYMBOL.
-(Well, it is not really new since it has been previously supported by
-grolj4.)
-The mapping for both the dvi and lj4 symbol font has been
-changed accordingly so that Greek small letter epsilon, `*e', has the
-same glyph shape as with other devices.
-.ULE
-.
-.
-.SH 2
-grops
-
-.ULS
-.LI
-The font `freeeuro.pfa' has been added to provide various default glyph
-shapes for `eu' and `Eu'.
-
-.LI
-It is now possible to access all glyphs in a Type\~1 font, not only 256
-(provided the font file created by afmtodit has proper entries).
-grops constructs additional encoding vectors on the fly if necessary.
-
-.LI
-The paper size is now emitted via the %%DocumentMedia and PageSize
-mechanisms so that it is no longer required to tell `gv' or `ps2pdf'
-about the paper size.
-The `broken' flag value\~16 omits this feature
-(the used PostScript command `setpagedevice' is a LanguageLevel\~2
-extension).
-Patch by
-.MTO egil@\:kvaleberg.no "Egil Kvaleberg" .
-
-.LI
-Non-slanted PostScript metrics have been changed again; they no longer
-contain negative left italic correction values.
-This assures correct spacing with eqn.
-.ULE
-.
-.
-.SH 2
-grodvi
-
-.ULS
-.LI
-The font cmtex10 has been added as the special font `SC' to the DVI fonts.
-It is used as a font-specific special font for CW and CWI.
-
-.LI
-New options \-l and \-p to set landscape orientation and the paper size.
-grodvi now emits a `papersize' special which is understood by DVI drivers
-like dvips.
-
-Consequently, the DESC file should contain a `papersize' keyword.
-
-.LI
-The glyph shapes for \e[*f] and \e[*e] have been exchanged with \e[+f] and
-\e[+e], respectively, to be in sync with all other devices.
-
-.LI
-Glyphs \e[HE] and \e[DI] have been replaced with \e[u2662] and \e[u2661],
-respectively, since the former two glyphs have a black (filled) shape
-which grodvi doesn't provide by default (it never has actually).
-.ULE
-.
-.
-.SH 2
-grolj4
-
-.ULS
-.LI
-The glyphs \e[*e] and \e[+e] have been exchanged to be in sync with
-all other devices.
-
-.LI
-The glyph \e[~=] is now called \e[|=]. Similar to other devices, \e[~=]
-is now another name for glyph \e[~~].
-.ULE
-.
-.
-.SH 2
-grotty
-
-.ULS
-.LI
-New option `\-r'.
-It is similar to the \-i option except it tells grotty to
-use the `reverse video' attribute to render italic fonts.
-.ULE
-.
-.
-.SH 2
-pic
-
-.ULS
-.LI
-New command `figname' to set the name of a picture's output box in TeX
-mode.
-.ULE
-.
-.
-.SH 2
-refer
-
-.ULS
-.LI
-The environment variable `REFER' to override the name of the default
-database isn't new but hasn't been documented before.
-.ULE
-.
-.
-.SH 2
-soelim
-
-.ULS
-.LI
-New option `\-r' to avoid emission of `.lf' lines.
-
-.LI
-New option `\-t' to emit TeX comment lines (giving current file and the
-line number) instead of `.lf' lines.
-.ULE
-.
-.
-.SH 2
-afmtodit
-
-.ULS
-.LI
-Unencoded glyphs in an AFM file are output also (since grops can now emit
-multiple encoding vectors for a single font).
-
-.LI
-New option `\-m' to prevent negative left italic correction values.
-
-.LI
-The mapping and encoding file together with file `DESC' are now searched
-in the default font directory also.
-Please refer to the man page of afmtodit for more details.
-.ULE
-.
-.
-.SH 2
-macro packages
-
-.ULS
-.LI
-.MTO kollar@\:alltel.net "Larry Kollar"
-and others made the man macros more customizable.
-
-.ULS
-.LI
-New command line options \-rFT, \-rIN, and \-rSN to set the vertical
-location of the footer line, the body text indentation, and the
-sub-subheading indentation.
-
-.LI
-New command line option \-rHY (similar to the ms macros) to control
-hyphenation.
-
-.LI
-New macros `.PT' and `.BT' to print the header and footer strings.
-They can be replaced with a customized version in `man.local'.
-
-.LI
-The string `HF' now holds the typeface to print headings and
-subheadings.
-
-.LI
-Similar to the ms macros, the LT register now defaults to LL if not
-explicitly specified on the command line.
-.ULE
-
-.LI
-troff's start-up file `troffrc' now includes `papersize.tmac' to set
-the paper size with the command line option `-dpaper=<size>'.
-
-Possible values for `<size>' are the same as the predefined `papersize'
-values in the DESC file (only lowercase; see the groff_font man page)
-except \%a7-d7.
-An appended `l' (ell) character denotes landscape orientation.
-Examples: `a4', `c3l', `letterl'.
-
-Most output drivers need additional command line switches `\-p' and
-`\-l' to override the default paper length and orientation as set in
-the driver specific DESC file.
-
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-.in 2m
-.ft C
-groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-.ft R
-.in
-.ULE
-.
-.
-.SH
-NEWS VERSION 1.18.1
-.
-.SH 2
-troff
-
-.ULS
-.LI
-The non-slanted PostScript font definition files have been regenerated to
-include left and right italic correction values.
-Applying those to a glyph (this is, prepending the glyph with `\e,' and
-appending `\e/' to the glyph) sets the glyph width to the real value given
-by the horizontal bounding box values.
-Without those escapes, the advance width for the particular glyph is used
-(which can differ considerably).
-
-Most users will neither need this feature nor notice a difference in
-existing documents (provided \e, and \e/ is used as advertised, namely for
-italic fonts only); its main goal is to improve image generation with
-grohtml.
-
-This is an experimental change, and feedback is welcome.
-.ULE
-.
-.SH 2
-tbl
-
-.ULS
-.LI
-Added global option `nospaces' to ignore leading and trailing spaces in data
-items.
-.ULE
-.
-.SH 2
-grolbp
-
-.ULS
-.LI
-The option \-w (\-\-linewidth) has been added (similar to other device
-drivers) to set the default line width.
-.ULE
-.
-.SH 2
-grn
-
-.ULS
-.LI
-Support for b-spline and Bezier curves has been added.
-.ULE
-.
-.SH 2
-groffer
-
-.ULS
-.LI
-New option \-\-shell to select the shell under wich groffer shall run.
-.ULE
-.
-.SH 2
-Macro Packages
-
-.ULS
-.LI
-The string `Am' (producing an ampersand) has been added to mdoc for
-compatibility with NetBSD.
-
-.LI
-`.IX' is now deprecated for mom; you should use `.IQ' (Indent Quit)
-instead.
-
-.LI
-In mom, new inlines `FWD', `BCK', `UP', and `DOWN' deal with horizontal
-and vertical movements; please refer to contrib/mom/NEWS for more
-details.
-
-.LI
-New macro ENDNOTES_HDRFTR_CENTER for mom to better control headers.
-.ULE
-.
-.SH 2
-Miscellaneous
-
-.ULS
-.LI
-The `papersize' keyword in the DESC file now accepts multiple arguments.
-It is scanned from left to the right, and the first valid argument is used.
-This makes it possible to provide a fallback paper size.
-
-Example:
-
-.in 2m
-.ft C
-papersize /etc/papersize a4
-.ft P
-.in
-
-.LI
-A local font directory has been prepended to the default font path; it
-defaults to /usr/local/share/groff/site-font. Similar to the normal
-font searching process, files must be placed into a dev\f[I]XXX\f[]
-subdirectory, e.g.
-
-.in 2m
-.ft C
-/usr/local/share/groff/site-font/devps/FOO
-.ft P
-.in
-
-for a PostScript font definition file FOO.
-.ULE
-.
-.
-.SH
-NEWS VERSION 1.18
-
-This section describes recent user-visible changes in groff.
-Bug fixes are not described.
-There are more details in the man pages.
-
-.ad c
-\s[+5]\m[red]\
-Please read the changes below regarding
-.ie '\*[.T]'html' \
-. URL #grotty grotty ,
-.el \
-. nop grotty,
-groff's tty frontend.\
-\m[]\s[0]
-.br
-.ad n
-.
-.SH 2
-Troff
-
-.ULS
-.LI
-Color support has been added to troff and pic (and to the device drivers
-grops, grodvi, grotty, and grohtml -- other preprocessors and drivers will
-follow).
-A new function `defcolor' defines colors; the escape sequence `\em' sets the
-drawing color, the escape sequence `\eM' specifies the background color for
-closed objects created with \eD'.\|.\|.' commands.
-`\em[]' and `\eM[]' switch back to the previous color.
-`\em' and `\eM' correspond to the new troff output command sets starting
-with `m' and `DF'.
-The device-specific default color is called `default' and can't be
-redefined.
-
-Use the `color' request to toggle the usage of colors (default is on); the
-read-only register `.color' is\~0 if colors are not active, and non-zero
-otherwise.
-
-The old `Df' output command is mapped onto `DFg'; all color output
-commands don't change the current font position (consequently, `Df'
-doesn't either).
-
-Outputting color can be disabled in troff and groff with the option\~\-c
-(it is always disabled in compatibility mode).
-See the section on grotty for the
-.ie '\*[.T]'html' \
-. URL #GROFF_NO_SGR GROFF_NO_SGR
-.el \
-. nop GROFF_NO_SGR
-environment variable also.
-
-For defining color components as fractions between 0 and\~1, a new scaling
-indicator `f' has been defined: 1f\~=\~65536u.
-For testing whether a color is defined (with .if and .ie), a new
-conditional operator `m' is available.
-
-More details can be found in the groff_diff.7 manual page and in
-groff.texinfo.
-
-.LI
-Similar to \em and \eM, \ef[] switches back to the previous font.
-\efP (and \ef[P]) is still valid for backwards compatibility.
-
-.LI
-The new escape \eF is the same as `.fam'; \eF[] switches back to previous
-family -- \eF[P] selects family `P'.
-
-.LI
-Two new glyph symbols are available: `eu' is the official Euro symbol;
-`Eu' is a font-specific glyph variant.
-
-.LI
-The new glyph symbols `t+\-', `tdi', and `tmu' are textual variants of
-`+\-', `di', and `mu', respectively.
-
-.LI
-Latin-1 character 181 (PS name `mu', Unicode name U+00B5 MICRO SIGN) has
-got the troff glyph name `mc'.
-
-.LI
-\-Tutf8 is now available on EBCDIC hosts.
-
-.LI
-Strings can take arguments, using this syntax: \e*[foo\~arg1\~arg2\~.\|.\|.].
-Example:
-
-.in 2m
-.nf
-.ft C
-\&.ds xxx This is a \e\e$1 test.
-\e*[xxx nice]
-.ft P
-.fi
-.in
-
-.LI
-It is now possible to have whitespace between the first and second dot (or
-the name of the ending macro) to end a macro definition.
-Example:
-
-.in 2m
-.nf
-.ft C
-\&.de !
-\&..
-\&.
-\&.de foo
-\&. nop Hello, I'm `foo'.
-\&. nop I will now define `bar'.
-\&. de bar !
-\&. nop Hello, I'm `bar'.
-\&. !
-\&..
-.ft P
-.fi
-.in
-
-.LI
-`.fn' is a new string-valued register which returns the (internal) real
-font name; styles and families are properly concatenated.
-
-.LI
-Three new read/write registers `seconds', `minutes', and `hours' contain
-the current time, set at start-up of troff.
-Use the `af' request to control their output format.
-
-.LI
-The new request `fchar' can be used to provide fallback characters.
-It has the same syntax as the `char' request; the only difference is that
-a character defined with `.char' hides the glyph with the same name in the
-current font, whereas a character defined with `.fchar' is checked only if
-the particular glyph isn't found in the current font.
-This test happens before checking special fonts.
-
-.LI
-In analogy to the `tmc' request, `.writec' is the same as `.write' but
-doesn't emit a final newline.
-
-.LI
-The new request `itc' is a variant of `.it' for which a line interrupted
-with \ec counts as one input line.
-
-.LI
-Two new requests `ds1' and `as1' which are similar to `ds' and `as' but
-with compatibility mode disabled during expansion of strings defined by
-them.
-
-.LI
-The syntax of the `substring' request has been changed:
-The first character in a string now has index\~0, the last character
-has index\~\-1.
-Note that this is an incompatible change.
-
-.LI
-To emit strings directly to the intermediate output, a new `output'
-request has been added; it is similar to `\e!' used at the top level.
-
-.LI
-`.hpf' has been extended.
-It can now handle most TeX hyphenation pattern files without
-modification.
-To do that, the commands \epatterns, \ehyphenation, and \eendinput are
-recognized.
-Please refer to groff_diff.7 for more information.
-
-.LI
-`hpfcode' is a new request to provide an input encoding mapping for the
-`hpf' request.
-
-.LI
-The new request `hpfa' appends hyphenation patterns (`hpf' replaces
-already existing patterns).
-
-.LI
-A new request `ami' (append macro indirect) has been added.
-The first and second parameter of `ami' are taken from string registers
-rather than directly; this very special request is needed to make
-`trace.tmac' independent from the escape character (which might even
-be disabled).
-
-.LI
-The new request `sizes' is similar to the `sizes' command in DESC files.
-It expects the same syntax; the data must be on a single line, and the
-final `0' can be omitted.
-
-.LI
-`trin' (translate input) is a new request which is similar to `tr' with
-the exception that the `asciify' request will use the character code (if
-any) before the character translation.
-Example:
-
-.in 2m
-.nf
-.ft C
-\&.trin ax
-\&.di xxx
-a
-\&.br
-\&.di
-\&.xxx
-\&.trin aa
-\&.asciify xxx
-\&.xxx
-.ft P
-.fi
-.in
-
-The result is `x\~a'. Using `tr', the result would be `x\~x'.
-
-.LI
-The request `pvs' isn't new, but hasn't been documented before.
-It adds vertical space after a line has been output.
-This makes it an alternative to the `ls' request to produce
-double-spaced documents.
-The read-only register `.pvs' holds the current amount of the
-post-vertical line space.
-
-.LI
-For compatibility with plan 9's troff, multiple `pi' requests are
-supported:
-
-.in 2m
-.nf
-.ft C
-\&.pi foo
-\&.pi bar
-.ft P
-.fi
-.in
-
-is now equivalent to
-
-.in 2m
-.ft C
-\&.pi foo | bar
-.ft P
-.in
-
-.LI
-A new escape sequence `\eO' is available to disable and enable glyph
-output.
-Please see groff_diff.man and groff.texinfo for more details.
-
-.LI
-The escapes `\e%', `\e&', `\e)', and `\e:' no longer cause an error in \eX;
-they are ignored now.
-Additionally `\e\ ' and `\e~' are converted to single space characters.
-
-.LI
-The default tab distance in nroff mode is now 0.8i to be compatible
-with UNIX troff.
-
-.LI
-Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
-request was a bad idea.
-Instead, it is now translated to `\e%', and the default hyphenation
-character is again \e[hy].
-Note that the glyph \e[shc] is not useful for typographic purposes;
-it only exists to have glyph names for all latin-1 characters.
-.ULE
-.
-.SH 2
-Macro Packages
-
-.ULS
-.LI
-.MTO df191@\:ncf.ca "Peter Schaffter"
-has contributed a new major macro package called `mom', mainly for
-non-scientific writers, which takes care of many typographic issues.
-It comes with a complete reference (in HTML format) and some examples.
-`mom' has been designed to format documents for PostScript output only.
-
-.LI
-Two macros `AT' (AT&T) and `UC' (Univ. of California) have been added to
-the man macros for compatibility with older BSD releases.
-
-.LI
-Both the man and mdoc macro packages now use the LL and LT registers for
-setting the line and title length, respectively (similar to those
-registers in the ms macro package).
-If not set on the command line or in a macro file loaded before the macro
-package itself, they default to 78n in nroff mode and 6.5i in troff mode.
-
-.LI
-The `\-xwidth' specifier in the mdoc macro package has been removed.
-Its functionality is now integrated directly into `\-width'.
-Similarly, `\-column' has been extended to has this functionality also.
-
-.LI
-A new macro `Ex' has been added to the mdoc macro package to document an
-exit status.
-
-.LI
-`troff.man' has been split. Differences to UNIX troff are now documented
-in the new man page `groff_diff.man'.
-
-.LI
-The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
-now automatically loaded for \-Tdvi), using a dvips special to load the EPS
-file.
-
-.LI
-The trace.tmac package now traces calls to `am' also.
-Additionally, it works in compatibility mode.
-
-.LI
-`troff.1' has been split.
-Differences to UNIX troff are now documented in the new man page
-`groff_diff.7'.
-
-.LI
-`groff_mwww.7' has been renamed to `groff_www.7'.
-The file mwww.tmac has been removed.
-
-.LI
-`groff_ms.7' has been completely rewritten.
-It now contains a complete reference to the ms macros.
-
-.LI
-`groff_trace.7' documents the trace macro package.
-
-.LI
-Changes in www.tmac
-
-Note that HTML support is still in alpha change, so it is rather likely
-that both macro names and macro syntax will change.
-Some of the macros mentioned below aren't really new but haven't been
-documented properly before.
-
-.ULS
-.LI
-The following macros have been renamed:
-
-.in 2m
-.nf
-MAILTO -> MTO
-IMAGE -> IMG
-LINE -> HR
-.fi
-.in
-
-.LI
-For consistency, the macros `URL', `FTL', and `MTO' now all have the
-address as the first parameter followed by the description.
-
-.LI
-By default, grohtml generates links to all section headings at the top
-of the document.
-Use the new `LK' macro to specify a different place.
-
-.LI
-For specifying the background color and a background image, use the
-new macros `BCL' and `BGIMG', respectively.
-
-.LI
-The macro `NHR' has been added; it suppresses the generation of top and
-bottom rules which grohtml emits by default.
-
-.LI
-The new macro `HX' determines the cut-off point for automatic link
-generation to headings.
-
-.LI
-The image position parameter names in `IMG' have been changed to `\-L',
-`\-R', and `\-C'.
-
-.LI
-New macro `PIMG' for inclusion of a PNG image (it will automatically
-convert it into an EPS file if not \-Thtml is used).
-
-.LI
-New macro `MPIMG' for putting a PNG image into the left or right margin
-(it will automatically convert it into an EPS file if not \-Thtml is used).
-
-.LI
-New macros `HnS', `HnE' to start and end a header line block.
-
-.LI
-New macro `DC' to produce dropcap characters.
-
-.LI
-New macro `HTL' to generate an HTML title line only but no H1 heading.
-
-.LI
-New macros `ULS' and `ULE' to start and end an unordered list.
-The new macro `LI' inserts a list item.
-.ULE
-.ULE
-.
-.
-.SH 2
-groff
-
-.ULS
-.LI
-The new command line `\-c' disables color output (which is always disabled
-in compatibility mode).
-.ULE
-.
-.
-.SH 2
-Nroff
-
-.ULS
-.LI
-Two new command line options `\-c' and `\-C'; the former passes `\-c' to
-grotty (switching to the old output scheme); the latter passes `\-C' to
-groff (enabling compatibility mode).
-.ULE
-.
-.
-.SH 2
-pic
-
-.ULS
-.LI
-New keywords `color' (or `colour', `colored', `coloured'), `outline' (or
-`outlined'), and `shaded' are available.
-`outline' sets the color of the outline, `shaded' the fill color, and
-`color' sets both.
-Example:
-
-.in 2m
-.ft C
-circle shaded "green" outline "black" ;
-.ft P
-.in
-
-Filled arrows always use the outline color for filling.
-
-Color support for TeX output is not implemented yet.
-.ULE
-.
-.
-.SH 2
-Pic2graph
-
-.ULS
-.LI
-A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
-It converts a PIC diagram into a cropped image.
-Since it uses gs and the PNM library, virtually all graphics formats
-are available for output.
-.ULE
-.
-.
-.SH 2
-Eqn2graph
-
-.ULS
-.LI
-A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
-It converts an EQN diagram into a cropped image.
-Since it uses gs and the PNM library, virtually all graphics formats
-are available for output.
-.ULE
-.
-.
-.SH 2
-Groffer
-
-.ULS
-.LI
-A new script contributed by
-.MTO bwarken@mayn.de "Bernd Warken" .
-It displays groff files and man pages on X and tty, taking care of most
-parameters automatically.
-.ULE
-.
-.
-.SH 2
-Grog
-
-.ULS
-.LI
-Documents using the mom macro package are recognized.
-.ULE
-.
-.
-.SH 2
-grops
-
-.ULS
-.LI
-Color support has been added.
-
-.LI
-A new option `\-p' is available to select the output paper size.
-It has the same syntax as the new `papersize' keyword in the DESC file.
-.ULE
-.
-.
-.SH 2
-Grodvi
-
-.ULS
-.LI
-By default, font sizes are now available in the range 5\-10000pt, similar
-to PS fonts.
-If you want the old behaviour (i.e., font sizes at discrete values only),
-insert the following at the start of your document:
-
-.in 2m
-.nf
-.ft C
-\&.if '\e*[.T]'dvi' \e
-\&. sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 \e
-\& 1728 1800 2000 2074 2200 2400 2488 2800 3600
-.ft P
-.fi
-.in
-
-.LI
-A new font file HBI (using cmssbxo10; this is slanted sans serif bold
-extended) has been added.
-
-.LI
-Two font families are now available: `T' and `H'.
-
-.LI
-EC and TC fonts have been integrated.
-Use `\-mec' (calling the file ec.tmac) to switch to them.
-Those fonts give a much better coverage of the symbols defined by groff
-than the CM fonts.
-
-Note that ec.tmac must be called before any language-specific files; it
-doesn't take care of hcode values.
-
-.LI
-Color support has been added.
-For drawing commands, colors are translated to gray values currently.
-.ULE
-.
-.
-.TAG grotty
-.SH 2
-Grotty
-
-.ULS
-.LI
-Color support has been added, using the SGR (ISO\~6429, sometimes called
-ANSI color) escape sequences.
-
-.LI
-SGR escape sequences are now used by default for underlining and bold
-printing also, no longer using the backspace character trick.
-To revert to the old behaviour, use the `\-c' switch.
-
-Note that you have to use the `\-R' option of `less' to make SGR escapes
-display correctly.
-On the other hand, terminal programs and consoles like `xterm' which
-support SGR sequences natively can directly display the output of grotty.
-Consequently, the options `\-b', `\-B', `\-u', and `\-U' work only in
-combination with `\-c' and are ignored silently otherwise.
-
-For the `man' program, it may be necessary to add the `\-R' option of
-`less' to the $PAGER environment variable; alternatively, you can use
-`man's `\-P' option (or adapt its configuration file accordingly).
-See man(1) for more details.
-
-.TAG GROFF_NO_SGR
-.LI
-If the environment variable GROFF_NO_SGR is set, SGR output is disabled,
-reverting to the old behaviour.
-
-.LI
-A new special \eX'tty:\~sgr\~n' has been added; if n is non-zero or missing,
-enable SGR output (the default).
-
-.LI
-If the new option `\-i' is used (only in SGR mode), grotty sends escape
-sequences to set the italic font attribute instead of the underline
-attribute for italic fonts.
-Note that many terminals don't have support for this (including xterm).
-.ULE
-.
-.
-.SH 2
-grohtml
-
-.ULS
-.LI
-Color support for glyphs has been added.
-
-.LI
-New option `\-h' to select the style of headings in HTML output.
-
-.LI
-New option `\-b' to set the background colour to white.
-
-.LI
-New options `\-a' and `\-g' to control the number of bits for anti-aliasing
-used for text and graphics, respectively.
-Default value is\~4; 0\~means no anti-aliasing.
-
-.LI
-groff character/glyph entities now map onto HTML\~4 character entities.
-.ULE
-.
-.
-.SH 2
-Grolbp
-
-.ULS
-.LI
-Valid paper sizes are now specified as with the new `papersize' keyword
-in the DESC file.
-Specifically, the old custom paper type format `custAAAxBBB' is no longer
-supported.
-.ULE
-.
-.
-.SH 2
-Miscellaneous
-
-.ULS
-.LI
-A new manual page `ditroff.7' is available.
-
-.LI
-The groff texinfo manual will now be installed, together with a bunch
-of examples.
-
-.LI
-A new keyword `papersize' has been added to the DESC file format.
-Its argument is either
-
-.ULS
-.LI
-a predefined paper format (e.g. `A4' or `letter')
-
-.LI
-a file name pointing to a file which must contain a paper size
-specification in its first line (e.g. `/etc/papersize')
-
-.LI
-a custom paper size definition like `35c,4i'
-.ULE
-
-See groff_font(5) for more details.
-This keyword only affects the physical dimensions of the output medium;
-grops, grolj4, and grolbp use it currently.
-troff completely ignores it.
-.ULE
-.
-.HR
-.
-\s[-2]\f[I]This document was produced using
-.URL http://groff.ffii.org/ groff-\n[.x].\n[.y].\n[.Y] .
-.br
-The image at the top has been contributed by Imogen Mulley (born 1991),
-based on a similar picture found on the
-.URL http://www.gnu.org "GNU server" .
-.HR
-.\" EOF
diff --git a/contrib/groff/font/devX100-12/CB b/contrib/groff/font/devX100-12/CB
deleted file mode 100644
index 7d0a0bb35399..000000000000
--- a/contrib/groff/font/devX100-12/CB
+++ /dev/null
@@ -1,213 +0,0 @@
-name CB
-spacewidth 10
-charset
---- 10,9 0 00
---- 10,1 0 040
-! 10,11 0 041
-" 10,11 0 042
-dq "
-# 10,11,1 0 043
-sh "
-$ 10,12,1 0 044
-Do "
-% 10,11 0 045
-& 10,9 0 046
-' 10,11 0 047
-cq "
-( 10,11,2 0 050
-) 10,11,2 0 051
-* 10,11 0 052
-+ 10,9 0 053
-, 10,2,3 0 054
-\- 10,6 0 055
-. 10,2 0 056
-/ 10,12,2 0 057
-sl "
-0 10,11 0 060
-1 10,11 0 061
-2 10,11 0 062
-3 10,11 0 063
-4 10,11 0 064
-5 10,11 0 065
-6 10,11 0 066
-7 10,11 0 067
-8 10,11 0 070
-9 10,11 0 071
-: 10,7 0 072
-; 10,7,3 0 073
-< 10,9 0 074
-= 10,7 0 075
-> 10,9 0 076
-? 10,10 0 077
-@ 10,11,1 0 0100
-at "
-A 10,10 0 0101
-B 10,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 10,10 0 0105
-F 10,10 0 0106
-G 10,10 0 0107
-H 10,10 0 0110
-I 10,10 0 0111
-J 10,10 0 0112
-K 10,10 0 0113
-L 10,10 0 0114
-M 10,10 0 0115
-N 10,10 0 0116
-O 10,10 0 0117
-P 10,10 0 0120
-Q 10,10,2 0 0121
-R 10,10 0 0122
-S 10,10 0 0123
-T 10,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 10,10 0 0127
-X 10,10 0 0130
-Y 10,10 0 0131
-Z 10,10 0 0132
-[ 10,11,2 0 0133
-lB "
-\ 10,12,2 0 0134
-rs "
-] 10,11,2 0 0135
-rB "
-^ 10,11 0 0136
-a^ "
-ha "
-_ 10,0,3 0 0137
-` 10,11 0 0140
-oq "
-a 10,7 0 0141
-b 10,11 0 0142
-c 10,7 0 0143
-d 10,11 0 0144
-e 10,7 0 0145
-f 10,11 0 0146
-g 10,7,3 0 0147
-h 10,11 0 0150
-i 10,10 0 0151
-j 10,10,3 0 0152
-k 10,11 0 0153
-l 10,11 0 0154
-m 10,7 0 0155
-n 10,7 0 0156
-o 10,7 0 0157
-p 10,7,3 0 0160
-q 10,7,3 0 0161
-r 10,7 0 0162
-s 10,7 0 0163
-t 10,9 0 0164
-u 10,7 0 0165
-v 10,7 0 0166
-w 10,7 0 0167
-x 10,7 0 0170
-y 10,7,3 0 0171
-z 10,7 0 0172
-{ 10,11,2 0 0173
-lC "
-| 10,11,2 0 0174
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 10,1 0 0240
-r! 10,7,3 0 0241
-ct 10,10 0 0242
-Po 10,10 0 0243
-Cs 10,8 0 0244
-Ye 10,10 0 0245
-bb 10,11,2 0 0246
-sc 10,11,1 0 0247
-ad 10,10 0 0250
-co 10,10 0 0251
-Of 10,10 0 0252
-Fo 10,7 0 0253
-tno 10,7 0 0254
-- 10,6 0 0255
-hy "
-rg 10,10 0 0256
-a- 10,10 0 0257
-de 10,11 0 0260
-t+- 10,9 0 0261
-S2 10,11 0 0262
-S3 10,11 0 0263
-aa 10,11 0 0264
-mc 10,7,3 0 0265
-ps 10,11,1 0 0266
-pc 10,6 0 0267
-ac 10,1,3 0 0270
-S1 10,11 0 0271
-Om 10,10 0 0272
-Fc 10,7 0 0273
-14 10,11 0 0274
-12 10,11 0 0275
-34 10,11 0 0276
-r? 10,7,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,13 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 10,10 0 0306
-,C 10,10,3 0 0307
-`E 10,14 0 0310
-'E 10,14 0 0311
-^E 10,14 0 0312
-:E 10,13 0 0313
-`I 10,14 0 0314
-'I 10,14 0 0315
-^I 10,14 0 0316
-:I 10,13 0 0317
--D 10,10 0 0320
-~N 10,13 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,13 0 0325
-:O 10,13 0 0326
-tmu 10,8 0 0327
-/O 10,11,1 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 10,14 0 0335
-TP 10,10 0 0336
-ss 10,11 0 0337
-`a 10,11 0 0340
-'a 10,11 0 0341
-^a 10,11 0 0342
-~a 10,10 0 0343
-:a 10,10 0 0344
-oa 10,12 0 0345
-ae 10,7 0 0346
-,c 10,7,3 0 0347
-`e 10,11 0 0350
-'e 10,11 0 0351
-^e 10,11 0 0352
-:e 10,10 0 0353
-`i 10,11 0 0354
-'i 10,11 0 0355
-^i 10,11 0 0356
-:i 10,10 0 0357
-Sd 10,12 0 0360
-~n 10,10 0 0361
-`o 10,11 0 0362
-'o 10,11 0 0363
-^o 10,11 0 0364
-~o 10,10 0 0365
-:o 10,10 0 0366
-tdi 10,9 0 0367
-/o 10,8,1 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 10,11,3 0 0375
-Tp 10,11,3 0 0376
-:y 10,10,3 0 0377
diff --git a/contrib/groff/font/devX100-12/CBI b/contrib/groff/font/devX100-12/CBI
deleted file mode 100644
index 4f3853dd9d92..000000000000
--- a/contrib/groff/font/devX100-12/CBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CBI
-spacewidth 10
-charset
---- 10,9 0 00
---- 10,1 0 040
-! 10,11 0 041
-" 10,11 0 042
-dq "
-# 10,11,1 0 043
-sh "
-$ 10,12,1 0 044
-Do "
-% 10,11 0 045
-& 10,9 0 046
-' 10,11 0 047
-cq "
-( 10,11,2 0 050
-) 10,11,2 0 051
-* 10,11 0 052
-+ 10,9 0 053
-, 10,2,3 0 054
-\- 10,6 0 055
-. 10,2 0 056
-/ 10,12,2 0 057
-sl "
-0 10,11 0 060
-1 10,11 0 061
-2 10,11 0 062
-3 10,11 0 063
-4 10,11 0 064
-5 10,11 0 065
-6 10,11 0 066
-7 10,11 0 067
-8 10,11 0 070
-9 10,11 0 071
-: 10,7 0 072
-; 10,7,3 0 073
-< 10,9 0 074
-= 10,7 0 075
-> 10,9 0 076
-? 10,10 0 077
-@ 10,11,1 0 0100
-at "
-A 10,10 0 0101
-B 10,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 10,10 0 0105
-F 10,10 0 0106
-G 10,10 0 0107
-H 10,10 0 0110
-I 10,10 0 0111
-J 10,10 0 0112
-K 10,10 0 0113
-L 10,10 0 0114
-M 10,10 0 0115
-N 10,10 0 0116
-O 10,10 0 0117
-P 10,10 0 0120
-Q 10,10,2 0 0121
-R 10,10 0 0122
-S 10,10 0 0123
-T 10,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 10,10 0 0127
-X 10,10 0 0130
-Y 10,10 0 0131
-Z 10,10 0 0132
-[ 10,11,2 0 0133
-lB "
-\ 10,12,2 0 0134
-rs "
-] 10,11,2 0 0135
-rB "
-^ 10,11 0 0136
-a^ "
-ha "
-_ 10,0,3 0 0137
-` 10,11 0 0140
-oq "
-a 10,7 0 0141
-b 10,11 0 0142
-c 10,7 0 0143
-d 10,11 0 0144
-e 10,7 0 0145
-f 10,11 0 0146
-g 10,7,3 0 0147
-h 10,11 0 0150
-i 10,10 0 0151
-j 10,10,3 0 0152
-k 10,11 0 0153
-l 10,11 0 0154
-m 10,7 0 0155
-n 10,7 0 0156
-o 10,7 0 0157
-p 10,7,3 0 0160
-q 10,7,3 0 0161
-r 10,7 0 0162
-s 10,7 0 0163
-t 10,9 0 0164
-u 10,7 0 0165
-v 10,7 0 0166
-w 10,7 0 0167
-x 10,7 0 0170
-y 10,7,3 0 0171
-z 10,7 0 0172
-{ 10,11,2 0 0173
-lC "
-| 10,11,2 0 0174
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 10,1 0 0240
-r! 10,7,4 0 0241
-ct 10,10 0 0242
-Po 10,10 0 0243
-Cs 10,8 0 0244
-Ye 10,10 0 0245
-bb 10,11,2 0 0246
-sc 10,11,1 0 0247
-ad 10,10 0 0250
-co 10,10 0 0251
-Of 10,10 0 0252
-Fo 10,7 0 0253
-tno 10,7 0 0254
-- 10,6 0 0255
-hy "
-rg 10,10 0 0256
-a- 10,9 0 0257
-de 10,11 0 0260
-t+- 10,10 0 0261
-S2 10,11 0 0262
-S3 10,11 0 0263
-aa 10,11 0 0264
-mc 10,7,3 0 0265
-ps 10,11,1 0 0266
-pc 10,6 0 0267
-ac 10,0,3 0 0270
-S1 10,11 0 0271
-Om 10,10 0 0272
-Fc 10,7 0 0273
-14 10,11 0 0274
-12 10,11 0 0275
-34 10,11 0 0276
-r? 10,7,4 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,13 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 10,10 0 0306
-,C 10,10,3 0 0307
-`E 10,14 0 0310
-'E 10,14 0 0311
-^E 10,14 0 0312
-:E 10,13 0 0313
-`I 10,14 0 0314
-'I 10,14 0 0315
-^I 10,14 0 0316
-:I 10,13 0 0317
--D 10,10 0 0320
-~N 10,13 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,13 0 0325
-:O 10,13 0 0326
-tmu 10,8 0 0327
-/O 10,10 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 10,14 0 0335
-TP 10,10 0 0336
-ss 10,11 0 0337
-`a 10,11 0 0340
-'a 10,11 0 0341
-^a 10,11 0 0342
-~a 10,10 0 0343
-:a 10,10 0 0344
-oa 10,11 0 0345
-ae 10,7 0 0346
-,c 10,7,3 0 0347
-`e 10,11 0 0350
-'e 10,11 0 0351
-^e 10,11 0 0352
-:e 10,10 0 0353
-`i 10,11 0 0354
-'i 10,11 0 0355
-^i 10,11 0 0356
-:i 10,10 0 0357
-Sd 10,12 0 0360
-~n 10,10 0 0361
-`o 10,11 0 0362
-'o 10,11 0 0363
-^o 10,11 0 0364
-~o 10,10 0 0365
-:o 10,10 0 0366
-tdi 10,9 0 0367
-/o 10,8,1 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 10,11,3 0 0375
-Tp 10,11,3 0 0376
-:y 10,10,3 0 0377
diff --git a/contrib/groff/font/devX100-12/CI b/contrib/groff/font/devX100-12/CI
deleted file mode 100644
index d4cc23487a0b..000000000000
--- a/contrib/groff/font/devX100-12/CI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CI
-spacewidth 10
-charset
---- 10,9 0 00
---- 10,1 0 040
-! 10,11 0 041
-" 10,11 0 042
-dq "
-# 10,11,1 0 043
-sh "
-$ 10,12,1 0 044
-Do "
-% 10,11 0 045
-& 10,9 0 046
-' 10,11 0 047
-cq "
-( 10,11,2 0 050
-) 10,11,2 0 051
-* 10,10 0 052
-+ 10,9 0 053
-, 10,2,2 0 054
-\- 10,5 0 055
-. 10,2 0 056
-/ 10,11,2 0 057
-sl "
-0 10,11 0 060
-1 10,11 0 061
-2 10,11 0 062
-3 10,11 0 063
-4 10,11 0 064
-5 10,11 0 065
-6 10,11 0 066
-7 10,11 0 067
-8 10,11 0 070
-9 10,11 0 071
-: 10,7 0 072
-; 10,7,2 0 073
-< 10,9 0 074
-= 10,7 0 075
-> 10,9 0 076
-? 10,10 0 077
-@ 10,11,1 0 0100
-at "
-A 10,10 0 0101
-B 10,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 10,10 0 0105
-F 10,10 0 0106
-G 10,10 0 0107
-H 10,10 0 0110
-I 10,10 0 0111
-J 10,10 0 0112
-K 10,10 0 0113
-L 10,10 0 0114
-M 10,10 0 0115
-N 10,10 0 0116
-O 10,10 0 0117
-P 10,10 0 0120
-Q 10,10,2 0 0121
-R 10,10 0 0122
-S 10,10 0 0123
-T 10,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 10,10 0 0127
-X 10,10 0 0130
-Y 10,10 0 0131
-Z 10,10 0 0132
-[ 10,11,2 0 0133
-lB "
-\ 10,11,2 0 0134
-rs "
-] 10,11,2 0 0135
-rB "
-^ 10,11 0 0136
-a^ "
-ha "
-_ 10,0,3 0 0137
-` 10,11 0 0140
-oq "
-a 10,7 0 0141
-b 10,10 0 0142
-c 10,7 0 0143
-d 10,10 0 0144
-e 10,7 0 0145
-f 10,10 0 0146
-g 10,7,3 0 0147
-h 10,10 0 0150
-i 10,11 0 0151
-j 10,11,3 0 0152
-k 10,10 0 0153
-l 10,10 0 0154
-m 10,7 0 0155
-n 10,7 0 0156
-o 10,7 0 0157
-p 10,7,3 0 0160
-q 10,7,3 0 0161
-r 10,7 0 0162
-s 10,7 0 0163
-t 10,9 0 0164
-u 10,7 0 0165
-v 10,7 0 0166
-w 10,7 0 0167
-x 10,7 0 0170
-y 10,7,3 0 0171
-z 10,7 0 0172
-{ 10,11,2 0 0173
-lC "
-| 10,10,2 0 0174
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 10,1 0 0240
-r! 10,7,4 0 0241
-ct 10,10 0 0242
-Po 10,10 0 0243
-Cs 10,8 0 0244
-Ye 10,10 0 0245
-bb 10,11,2 0 0246
-sc 10,11,1 0 0247
-ad 10,10 0 0250
-co 10,10 0 0251
-Of 10,10 0 0252
-Fo 10,7 0 0253
-tno 10,6 0 0254
-- 10,5 0 0255
-hy "
-rg 10,10 0 0256
-a- 10,10 0 0257
-de 10,11 0 0260
-t+- 10,9 0 0261
-S2 10,11 0 0262
-S3 10,11 0 0263
-aa 10,11 0 0264
-mc 10,7,3 0 0265
-ps 10,11,1 0 0266
-pc 10,6 0 0267
-ac 10,0,3 0 0270
-S1 10,11 0 0271
-Om 10,10 0 0272
-Fc 10,7 0 0273
-14 10,11 0 0274
-12 10,11 0 0275
-34 10,11 0 0276
-r? 10,7,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,13 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 10,10 0 0306
-,C 10,10,3 0 0307
-`E 10,14 0 0310
-'E 10,14 0 0311
-^E 10,14 0 0312
-:E 10,13 0 0313
-`I 10,14 0 0314
-'I 10,14 0 0315
-^I 10,14 0 0316
-:I 10,13 0 0317
--D 10,10 0 0320
-~N 10,13 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,13 0 0325
-:O 10,13 0 0326
-tmu 10,8 0 0327
-/O 10,10 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 10,14 0 0335
-TP 10,10 0 0336
-ss 10,11 0 0337
-`a 10,11 0 0340
-'a 10,11 0 0341
-^a 10,11 0 0342
-~a 10,10 0 0343
-:a 10,10 0 0344
-oa 10,11 0 0345
-ae 10,7 0 0346
-,c 10,7,3 0 0347
-`e 10,11 0 0350
-'e 10,11 0 0351
-^e 10,11 0 0352
-:e 10,10 0 0353
-`i 10,11 0 0354
-'i 10,11 0 0355
-^i 10,11 0 0356
-:i 10,10 0 0357
-Sd 10,11 0 0360
-~n 10,10 0 0361
-`o 10,11 0 0362
-'o 10,11 0 0363
-^o 10,11 0 0364
-~o 10,10 0 0365
-:o 10,10 0 0366
-tdi 10,8 0 0367
-/o 10,8,1 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 10,11,3 0 0375
-Tp 10,11,3 0 0376
-:y 10,10,3 0 0377
diff --git a/contrib/groff/font/devX100-12/CR b/contrib/groff/font/devX100-12/CR
deleted file mode 100644
index 3908ef5eae83..000000000000
--- a/contrib/groff/font/devX100-12/CR
+++ /dev/null
@@ -1,213 +0,0 @@
-name CR
-spacewidth 10
-charset
---- 10,9 0 00
---- 10,1 0 040
-! 10,11 0 041
-" 10,11 0 042
-dq "
-# 10,11,1 0 043
-sh "
-$ 10,12,1 0 044
-Do "
-% 10,11 0 045
-& 10,9 0 046
-' 10,11 0 047
-cq "
-( 10,11,2 0 050
-) 10,11,2 0 051
-* 10,11 0 052
-+ 10,9 0 053
-, 10,2,2 0 054
-\- 10,5 0 055
-. 10,2 0 056
-/ 10,11,2 0 057
-sl "
-0 10,11 0 060
-1 10,11 0 061
-2 10,11 0 062
-3 10,11 0 063
-4 10,11 0 064
-5 10,11 0 065
-6 10,11 0 066
-7 10,11 0 067
-8 10,11 0 070
-9 10,11 0 071
-: 10,7 0 072
-; 10,7,2 0 073
-< 10,9 0 074
-= 10,7 0 075
-> 10,9 0 076
-? 10,10 0 077
-@ 10,11,1 0 0100
-at "
-A 10,10 0 0101
-B 10,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 10,10 0 0105
-F 10,10 0 0106
-G 10,10 0 0107
-H 10,10 0 0110
-I 10,10 0 0111
-J 10,10 0 0112
-K 10,10 0 0113
-L 10,10 0 0114
-M 10,10 0 0115
-N 10,10 0 0116
-O 10,10 0 0117
-P 10,10 0 0120
-Q 10,10,2 0 0121
-R 10,10 0 0122
-S 10,10 0 0123
-T 10,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 10,10 0 0127
-X 10,10 0 0130
-Y 10,10 0 0131
-Z 10,10 0 0132
-[ 10,11,2 0 0133
-lB "
-\ 10,11,2 0 0134
-rs "
-] 10,11,2 0 0135
-rB "
-^ 10,11 0 0136
-a^ "
-ha "
-_ 10,0,3 0 0137
-` 10,11 0 0140
-oq "
-a 10,7 0 0141
-b 10,10 0 0142
-c 10,7 0 0143
-d 10,10 0 0144
-e 10,7 0 0145
-f 10,10 0 0146
-g 10,7,3 0 0147
-h 10,10 0 0150
-i 10,10 0 0151
-j 10,10,3 0 0152
-k 10,10 0 0153
-l 10,10 0 0154
-m 10,7 0 0155
-n 10,7 0 0156
-o 10,7 0 0157
-p 10,7,3 0 0160
-q 10,7,3 0 0161
-r 10,7 0 0162
-s 10,7 0 0163
-t 10,9 0 0164
-u 10,7 0 0165
-v 10,7 0 0166
-w 10,7 0 0167
-x 10,7 0 0170
-y 10,7,3 0 0171
-z 10,7 0 0172
-{ 10,11,2 0 0173
-lC "
-| 10,10,2 0 0174
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 10,1 0 0240
-r! 10,7,3 0 0241
-ct 10,10 0 0242
-Po 10,10 0 0243
-Cs 10,8 0 0244
-Ye 10,10 0 0245
-bb 10,10,2 0 0246
-sc 10,11,1 0 0247
-ad 10,10 0 0250
-co 10,10 0 0251
-Of 10,10 0 0252
-Fo 10,7 0 0253
-tno 10,6 0 0254
-- 10,5 0 0255
-hy "
-rg 10,10 0 0256
-a- 10,9 0 0257
-de 10,11 0 0260
-t+- 10,9 0 0261
-S2 10,11 0 0262
-S3 10,11 0 0263
-aa 10,11 0 0264
-mc 10,7,3 0 0265
-ps 10,11,1 0 0266
-pc 10,6 0 0267
-ac 10,1,3 0 0270
-S1 10,11 0 0271
-Om 10,10 0 0272
-Fc 10,7 0 0273
-14 10,11 0 0274
-12 10,11 0 0275
-34 10,11 0 0276
-r? 10,7,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,13 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 10,10 0 0306
-,C 10,10,3 0 0307
-`E 10,14 0 0310
-'E 10,14 0 0311
-^E 10,14 0 0312
-:E 10,13 0 0313
-`I 10,14 0 0314
-'I 10,14 0 0315
-^I 10,14 0 0316
-:I 10,13 0 0317
--D 10,10 0 0320
-~N 10,13 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,13 0 0325
-:O 10,13 0 0326
-tmu 10,8 0 0327
-/O 10,10 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 10,14 0 0335
-TP 10,10 0 0336
-ss 10,11 0 0337
-`a 10,11 0 0340
-'a 10,11 0 0341
-^a 10,11 0 0342
-~a 10,10 0 0343
-:a 10,10 0 0344
-oa 10,12 0 0345
-ae 10,7 0 0346
-,c 10,7,3 0 0347
-`e 10,11 0 0350
-'e 10,11 0 0351
-^e 10,11 0 0352
-:e 10,10 0 0353
-`i 10,11 0 0354
-'i 10,11 0 0355
-^i 10,11 0 0356
-:i 10,10 0 0357
-Sd 10,11 0 0360
-~n 10,10 0 0361
-`o 10,11 0 0362
-'o 10,11 0 0363
-^o 10,11 0 0364
-~o 10,10 0 0365
-:o 10,10 0 0366
-tdi 10,8 0 0367
-/o 10,8,1 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 10,11,3 0 0375
-Tp 10,11,3 0 0376
-:y 10,10,3 0 0377
diff --git a/contrib/groff/font/devX100-12/DESC b/contrib/groff/font/devX100-12/DESC
deleted file mode 100644
index ead70b97f03a..000000000000
--- a/contrib/groff/font/devX100-12/DESC
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 100
-X11
-hor 1
-vert 1
-unitwidth 12
-postpro gxditview
diff --git a/contrib/groff/font/devX100-12/HB b/contrib/groff/font/devX100-12/HB
deleted file mode 100644
index f38c623cc4ec..000000000000
--- a/contrib/groff/font/devX100-12/HB
+++ /dev/null
@@ -1,213 +0,0 @@
-name HB
-spacewidth 5
-charset
---- 12,11 0 00
---- 5,1 0 040
-! 6,12 0 041
-" 8,12 0 042
-dq "
-# 9,12 0 043
-sh "
-$ 9,13,1 0 044
-Do "
-% 14,12 0 045
-& 12,12 0 046
-' 4,12 0 047
-cq "
-( 6,12,3 0 050
-) 6,12,3 0 051
-* 6,12 0 052
-+ 10,8 0 053
-, 4,2,3 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 5,8 0 072
-; 5,8,3 0 073
-< 10,8 0 074
-= 10,7 0 075
-> 10,8 0 076
-? 10,12 0 077
-@ 16,12,2 0 0100
-at "
-A 12,12 0 0101
-B 11,12 0 0102
-C 12,12 0 0103
-D 12,12 0 0104
-E 10,12 0 0105
-F 10,12 0 0106
-G 12,12 0 0107
-H 12,12 0 0110
-I 4,12 0 0111
-J 9,12 0 0112
-K 12,12 0 0113
-L 10,12 0 0114
-M 13,12 0 0115
-N 12,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,1 0 0121
-R 12,12 0 0122
-S 11,12 0 0123
-T 10,12 0 0124
-U 12,12 0 0125
-V 11,12 0 0126
-W 15,12 0 0127
-X 11,12 0 0130
-Y 11,12 0 0131
-Z 10,12 0 0132
-[ 6,12,3 0 0133
-lB "
-\ 5,12 0 0134
-rs "
-] 6,12,3 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 6,13 0 0140
-oq "
-a 9,9 0 0141
-b 10,12 0 0142
-c 9,9 0 0143
-d 10,12 0 0144
-e 10,9 0 0145
-f 6,12 0 0146
-g 10,9,4 0 0147
-h 10,12 0 0150
-i 4,12 0 0151
-j 5,12,4 0 0152
-k 9,12 0 0153
-l 4,12 0 0154
-m 14,9 0 0155
-n 10,9 0 0156
-o 10,9 0 0157
-p 10,9,4 0 0160
-q 10,9,4 0 0161
-r 6,9 0 0162
-s 9,9 0 0163
-t 6,11 0 0164
-u 10,9 0 0165
-v 9,9 0 0166
-w 13,9 0 0167
-x 9,9 0 0170
-y 9,9,4 0 0171
-z 8,9 0 0172
-{ 6,12,3 0 0173
-lC "
-| 4,12,4 0 0174
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 5,1 0 0240
-r! 6,9,3 0 0241
-ct 9,10,1 0 0242
-Po 9,12 0 0243
-Cs 9,9 0 0244
-Ye 9,12 0 0245
-bb 5,12,4 0 0246
-sc 9,12,3 0 0247
-ad 6,12 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 9,8 0 0253
-tno 10,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,11 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,13 0 0264
-mc 10,9,3 0 0265
-ps 9,12,3 0 0266
-pc 5,6 0 0267
-ac 6,0,4 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 9,8 0 0273
-14 14,12 0 0274
-12 14,12 0 0275
-34 14,12 0 0276
-r? 10,9,3 0 0277
-`A 12,16 0 0300
-'A 12,16 0 0301
-^A 12,16 0 0302
-~A 12,15 0 0303
-:A 12,15 0 0304
-oA 12,16 0 0305
-AE 15,12 0 0306
-,C 12,12,4 0 0307
-`E 10,16 0 0310
-'E 10,16 0 0311
-^E 10,16 0 0312
-:E 10,15 0 0313
-`I 4,16 0 0314
-'I 4,16 0 0315
-^I 4,16 0 0316
-:I 4,15 0 0317
--D 12,12 0 0320
-~N 12,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,9 0 0327
-/O 13,12 0 0330
-`U 12,16 0 0331
-'U 12,16 0 0332
-^U 12,16 0 0333
-:U 12,15 0 0334
-'Y 11,16 0 0335
-TP 11,12 0 0336
-ss 10,12 0 0337
-`a 9,13 0 0340
-'a 9,13 0 0341
-^a 9,13 0 0342
-~a 9,12 0 0343
-:a 9,12 0 0344
-oa 9,13 0 0345
-ae 15,9 0 0346
-,c 9,9,4 0 0347
-`e 10,13 0 0350
-'e 10,13 0 0351
-^e 10,13 0 0352
-:e 10,12 0 0353
-`i 4,13 0 0354
-'i 4,13 0 0355
-^i 4,13 0 0356
-:i 4,12 0 0357
-Sd 10,12 0 0360
-~n 10,12 0 0361
-`o 10,13 0 0362
-'o 10,13 0 0363
-^o 10,13 0 0364
-~o 10,12 0 0365
-:o 10,12 0 0366
-tdi 10,8 0 0367
-/o 10,9 0 0370
-`u 10,13 0 0371
-'u 10,13 0 0372
-^u 10,13 0 0373
-:u 10,12 0 0374
-'y 9,13,4 0 0375
-Tp 10,12,4 0 0376
-:y 9,12,4 0 0377
diff --git a/contrib/groff/font/devX100-12/HBI b/contrib/groff/font/devX100-12/HBI
deleted file mode 100644
index e1b583287a8d..000000000000
--- a/contrib/groff/font/devX100-12/HBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HBI
-spacewidth 5
-charset
---- 12,11 0 00
---- 5,1 0 040
-! 6,12 0 041
-" 8,12 0 042
-dq "
-# 9,12 0 043
-sh "
-$ 9,13,1 0 044
-Do "
-% 14,12 0 045
-& 12,12 0 046
-' 4,12 0 047
-cq "
-( 6,12,3 0 050
-) 6,12,3 0 051
-* 6,12 0 052
-+ 10,8 0 053
-, 4,2,3 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 5,8 0 072
-; 5,8,3 0 073
-< 10,8 0 074
-= 10,7 0 075
-> 10,8 0 076
-? 10,12 0 077
-@ 16,12,2 0 0100
-at "
-A 12,12 0 0101
-B 12,12 0 0102
-C 12,12 0 0103
-D 12,12 0 0104
-E 11,12 0 0105
-F 10,12 0 0106
-G 13,12 0 0107
-H 12,12 0 0110
-I 4,12 0 0111
-J 9,12 0 0112
-K 12,12 0 0113
-L 10,12 0 0114
-M 13,12 0 0115
-N 12,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,1 0 0121
-R 12,12 0 0122
-S 11,12 0 0123
-T 10,12 0 0124
-U 12,12 0 0125
-V 11,12 0 0126
-W 15,12 0 0127
-X 11,12 0 0130
-Y 11,12 0 0131
-Z 10,12 0 0132
-[ 6,12,3 0 0133
-lB "
-\ 5,12 0 0134
-rs "
-] 6,12,3 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 6,13 0 0140
-oq "
-a 9,9 0 0141
-b 10,12 0 0142
-c 9,9 0 0143
-d 10,12 0 0144
-e 9,9 0 0145
-f 5,12 0 0146
-g 10,9,4 0 0147
-h 10,12 0 0150
-i 4,12 0 0151
-j 5,12,4 0 0152
-k 9,12 0 0153
-l 5,12 0 0154
-m 14,9 0 0155
-n 10,9 0 0156
-o 10,9 0 0157
-p 10,9,4 0 0160
-q 10,9,4 0 0161
-r 6,9 0 0162
-s 9,9 0 0163
-t 6,12 0 0164
-u 10,9 0 0165
-v 9,9 0 0166
-w 13,9 0 0167
-x 9,9 0 0170
-y 9,9,4 0 0171
-z 8,9 0 0172
-{ 6,12,3 0 0173
-lC "
-| 3,12,4 0 0174
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ti "
---- 5,1 0 0240
-r! 6,9,3 0 0241
-ct 9,10,1 0 0242
-Po 9,12 0 0243
-Cs 9,9 0 0244
-Ye 9,12 0 0245
-bb 5,12,4 0 0246
-sc 9,12,3 0 0247
-ad 6,12 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 9,8 0 0253
-tno 10,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,11 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,13 0 0264
-mc 10,9,4 0 0265
-ps 9,12,3 0 0266
-pc 5,6 0 0267
-ac 6,0,4 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 9,8 0 0273
-14 14,12 0 0274
-12 14,12 0 0275
-34 14,12 0 0276
-r? 10,9,3 0 0277
-`A 12,16 0 0300
-'A 12,16 0 0301
-^A 12,16 0 0302
-~A 12,15 0 0303
-:A 12,15 0 0304
-oA 12,15 0 0305
-AE 17,12 0 0306
-,C 12,12,4 0 0307
-`E 11,16 0 0310
-'E 11,16 0 0311
-^E 11,16 0 0312
-:E 11,15 0 0313
-`I 4,16 0 0314
-'I 4,16 0 0315
-^I 4,16 0 0316
-:I 4,15 0 0317
--D 12,12 0 0320
-~N 12,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,8 0 0327
-/O 13,12 0 0330
-`U 12,16 0 0331
-'U 12,16 0 0332
-^U 12,16 0 0333
-:U 12,15 0 0334
-'Y 11,16 0 0335
-TP 11,12 0 0336
-ss 10,12 0 0337
-`a 9,13 0 0340
-'a 9,13 0 0341
-^a 9,13 0 0342
-~a 9,12 0 0343
-:a 9,12 0 0344
-oa 9,13 0 0345
-ae 15,9 0 0346
-,c 9,9,4 0 0347
-`e 9,13 0 0350
-'e 9,13 0 0351
-^e 9,13 0 0352
-:e 9,12 0 0353
-`i 4,13 0 0354
-'i 4,13 0 0355
-^i 4,13 0 0356
-:i 4,12 0 0357
-Sd 10,13 0 0360
-~n 10,12 0 0361
-`o 10,13 0 0362
-'o 10,13 0 0363
-^o 10,13 0 0364
-~o 10,12 0 0365
-:o 10,12 0 0366
-tdi 10,8 0 0367
-/o 10,9 0 0370
-`u 10,13 0 0371
-'u 10,13 0 0372
-^u 10,13 0 0373
-:u 10,12 0 0374
-'y 9,13,4 0 0375
-Tp 10,12,4 0 0376
-:y 9,12,4 0 0377
diff --git a/contrib/groff/font/devX100-12/HI b/contrib/groff/font/devX100-12/HI
deleted file mode 100644
index 0364fc4f6aca..000000000000
--- a/contrib/groff/font/devX100-12/HI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HI
-spacewidth 5
-charset
---- 12,11 0 00
---- 5,1 0 040
-! 5,12 0 041
-" 6,12 0 042
-dq "
-# 9,12 0 043
-sh "
-$ 9,13,1 0 044
-Do "
-% 14,12 0 045
-& 11,12 0 046
-' 3,12 0 047
-cq "
-( 6,12,3 0 050
-) 6,12,3 0 051
-* 6,12 0 052
-+ 10,9 0 053
-, 4,2,2 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 4,9 0 072
-; 4,9,2 0 073
-< 10,9 0 074
-= 10,6 0 075
-> 10,9 0 076
-? 9,12 0 077
-@ 17,12,1 0 0100
-at "
-A 11,12 0 0101
-B 11,12 0 0102
-C 12,12 0 0103
-D 12,12 0 0104
-E 11,12 0 0105
-F 10,12 0 0106
-G 13,12 0 0107
-H 12,12 0 0110
-I 4,12 0 0111
-J 8,12 0 0112
-K 11,12 0 0113
-L 9,12 0 0114
-M 13,12 0 0115
-N 12,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,1 0 0121
-R 12,12 0 0122
-S 11,12 0 0123
-T 10,12 0 0124
-U 12,12 0 0125
-V 11,12 0 0126
-W 16,12 0 0127
-X 11,12 0 0130
-Y 11,12 0 0131
-Z 10,12 0 0132
-[ 5,12,3 0 0133
-lB "
-\ 5,12 0 0134
-rs "
-] 5,12,3 0 0135
-rB "
-^ 8,12 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 6,13 0 0140
-oq "
-a 9,9 0 0141
-b 9,12 0 0142
-c 8,9 0 0143
-d 9,12 0 0144
-e 9,9 0 0145
-f 5,12 0 0146
-g 9,9,4 0 0147
-h 9,12 0 0150
-i 3,12 0 0151
-j 4,12,4 0 0152
-k 8,12 0 0153
-l 4,12 0 0154
-m 14,9 0 0155
-n 9,9 0 0156
-o 9,9 0 0157
-p 9,9,4 0 0160
-q 9,9,4 0 0161
-r 5,9 0 0162
-s 8,9 0 0163
-t 5,11 0 0164
-u 9,9 0 0165
-v 8,9 0 0166
-w 12,9 0 0167
-x 8,9 0 0170
-y 8,9,4 0 0171
-z 8,9 0 0172
-{ 6,12,3 0 0173
-lC "
-| 3,12,4 0 0174
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 5,1 0 0240
-r! 6,9,3 0 0241
-ct 9,10,1 0 0242
-Po 9,12 0 0243
-Cs 9,10 0 0244
-Ye 9,12 0 0245
-bb 4,12,4 0 0246
-sc 9,12,3 0 0247
-ad 5,12 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 9,8 0 0253
-tno 10,6 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,11 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,13 0 0264
-mc 9,9,4 0 0265
-ps 9,12,3 0 0266
-pc 5,7 0 0267
-ac 6,0,4 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 9,8 0 0273
-14 14,12 0 0274
-12 14,13 0 0275
-34 14,12 0 0276
-r? 10,9,3 0 0277
-`A 11,16 0 0300
-'A 11,16 0 0301
-^A 11,16 0 0302
-~A 11,15 0 0303
-:A 11,15 0 0304
-oA 11,15 0 0305
-AE 16,12 0 0306
-,C 12,12,3 0 0307
-`E 11,16 0 0310
-'E 11,16 0 0311
-^E 11,16 0 0312
-:E 11,15 0 0313
-`I 4,16 0 0314
-'I 4,16 0 0315
-^I 4,16 0 0316
-:I 4,15 0 0317
--D 12,12 0 0320
-~N 12,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,8 0 0327
-/O 13,12 0 0330
-`U 12,16 0 0331
-'U 12,16 0 0332
-^U 12,16 0 0333
-:U 12,15 0 0334
-'Y 11,16 0 0335
-TP 11,12 0 0336
-ss 10,12 0 0337
-`a 9,13 0 0340
-'a 9,13 0 0341
-^a 9,13 0 0342
-~a 9,12 0 0343
-:a 9,12 0 0344
-oa 9,13 0 0345
-ae 15,9 0 0346
-,c 8,9,3 0 0347
-`e 9,13 0 0350
-'e 9,13 0 0351
-^e 9,13 0 0352
-:e 9,12 0 0353
-`i 4,13 0 0354
-'i 4,13 0 0355
-^i 4,13 0 0356
-:i 4,12 0 0357
-Sd 9,12 0 0360
-~n 9,12 0 0361
-`o 9,13 0 0362
-'o 9,13 0 0363
-^o 9,13 0 0364
-~o 9,12 0 0365
-:o 9,12 0 0366
-tdi 10,9 0 0367
-/o 10,9 0 0370
-`u 9,13 0 0371
-'u 9,13 0 0372
-^u 9,13 0 0373
-:u 9,12 0 0374
-'y 8,13,4 0 0375
-Tp 9,12,4 0 0376
-:y 8,12,4 0 0377
diff --git a/contrib/groff/font/devX100-12/HR b/contrib/groff/font/devX100-12/HR
deleted file mode 100644
index 9ef0cd1c348f..000000000000
--- a/contrib/groff/font/devX100-12/HR
+++ /dev/null
@@ -1,213 +0,0 @@
-name HR
-spacewidth 5
-charset
---- 12,11 0 00
---- 5,1 0 040
-! 5,12 0 041
-" 6,12 0 042
-dq "
-# 9,11 0 043
-sh "
-$ 9,13,2 0 044
-Do "
-% 14,12 0 045
-& 11,12 0 046
-' 3,12 0 047
-cq "
-( 6,12,4 0 050
-) 6,12,4 0 051
-* 6,12 0 052
-+ 10,9 0 053
-, 4,2,2 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 4,9 0 072
-; 4,9,2 0 073
-< 10,9 0 074
-= 10,6 0 075
-> 10,9 0 076
-? 9,12 0 077
-@ 17,12,2 0 0100
-at "
-A 11,12 0 0101
-B 11,12 0 0102
-C 12,12 0 0103
-D 12,12 0 0104
-E 11,12 0 0105
-F 10,12 0 0106
-G 13,12 0 0107
-H 12,12 0 0110
-I 4,12 0 0111
-J 8,12 0 0112
-K 11,12 0 0113
-L 9,12 0 0114
-M 13,12 0 0115
-N 12,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,1 0 0121
-R 12,12 0 0122
-S 11,12 0 0123
-T 10,12 0 0124
-U 12,12 0 0125
-V 11,12 0 0126
-W 15,12 0 0127
-X 11,12 0 0130
-Y 11,12 0 0131
-Z 10,12 0 0132
-[ 5,12,3 0 0133
-lB "
-\ 5,12 0 0134
-rs "
-] 5,12,3 0 0135
-rB "
-^ 8,12 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 6,13 0 0140
-oq "
-a 9,9 0 0141
-b 9,12 0 0142
-c 8,9 0 0143
-d 9,12 0 0144
-e 9,9 0 0145
-f 5,12 0 0146
-g 9,9,4 0 0147
-h 9,12 0 0150
-i 3,12 0 0151
-j 4,12,4 0 0152
-k 8,12 0 0153
-l 3,12 0 0154
-m 14,9 0 0155
-n 9,9 0 0156
-o 9,9 0 0157
-p 9,9,4 0 0160
-q 9,9,4 0 0161
-r 5,9 0 0162
-s 8,9 0 0163
-t 5,11 0 0164
-u 9,9 0 0165
-v 8,9 0 0166
-w 12,9 0 0167
-x 8,9 0 0170
-y 8,9,3 0 0171
-z 8,9 0 0172
-{ 6,12,4 0 0173
-lC "
-| 4,12,4 0 0174
-ba "
-} 6,12,4 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 5,1 0 0240
-r! 6,9,3 0 0241
-ct 9,11,2 0 0242
-Po 9,12 0 0243
-Cs 9,10 0 0244
-Ye 9,12 0 0245
-bb 4,12,4 0 0246
-sc 9,12,3 0 0247
-ad 5,12 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 9,8 0 0253
-tno 10,6 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,11 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,13 0 0264
-mc 9,9,4 0 0265
-ps 9,12,3 0 0266
-pc 5,6 0 0267
-ac 6,0,4 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 9,8 0 0273
-14 14,12 0 0274
-12 14,13 0 0275
-34 14,12 0 0276
-r? 10,9,3 0 0277
-`A 11,16 0 0300
-'A 11,16 0 0301
-^A 11,16 0 0302
-~A 11,15 0 0303
-:A 11,15 0 0304
-oA 11,15 0 0305
-AE 16,12 0 0306
-,C 12,12,4 0 0307
-`E 11,16 0 0310
-'E 11,16 0 0311
-^E 11,16 0 0312
-:E 11,15 0 0313
-`I 4,16 0 0314
-'I 4,16 0 0315
-^I 4,16 0 0316
-:I 4,15 0 0317
--D 12,12 0 0320
-~N 12,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,8 0 0327
-/O 13,13,1 0 0330
-`U 12,16 0 0331
-'U 12,16 0 0332
-^U 12,16 0 0333
-:U 12,15 0 0334
-'Y 11,16 0 0335
-TP 11,12 0 0336
-ss 10,12 0 0337
-`a 9,13 0 0340
-'a 9,13 0 0341
-^a 9,13 0 0342
-~a 9,12 0 0343
-:a 9,12 0 0344
-oa 9,13 0 0345
-ae 15,9 0 0346
-,c 8,9,4 0 0347
-`e 9,13 0 0350
-'e 9,13 0 0351
-^e 9,13 0 0352
-:e 9,12 0 0353
-`i 4,13 0 0354
-'i 4,13 0 0355
-^i 4,13 0 0356
-:i 4,12 0 0357
-Sd 9,12 0 0360
-~n 9,12 0 0361
-`o 9,13 0 0362
-'o 9,13 0 0363
-^o 9,13 0 0364
-~o 9,12 0 0365
-:o 9,12 0 0366
-tdi 10,9 0 0367
-/o 10,10 0 0370
-`u 9,13 0 0371
-'u 9,13 0 0372
-^u 9,13 0 0373
-:u 9,12 0 0374
-'y 8,13,3 0 0375
-Tp 9,12,4 0 0376
-:y 8,12,3 0 0377
diff --git a/contrib/groff/font/devX100-12/Makefile.sub b/contrib/groff/font/devX100-12/Makefile.sub
deleted file mode 100644
index d0747579afe5..000000000000
--- a/contrib/groff/font/devX100-12/Makefile.sub
+++ /dev/null
@@ -1,2 +0,0 @@
-DEV=X100-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
diff --git a/contrib/groff/font/devX100-12/NB b/contrib/groff/font/devX100-12/NB
deleted file mode 100644
index 2c799004e359..000000000000
--- a/contrib/groff/font/devX100-12/NB
+++ /dev/null
@@ -1,213 +0,0 @@
-name NB
-spacewidth 4
-charset
---- 15,11 0 00
---- 4,1 0 040
-! 5,12 0 041
-" 6,12 0 042
-dq "
-# 10,12 0 043
-sh "
-$ 10,14,1 0 044
-Do "
-% 14,12 0 045
-& 14,12 0 046
-' 4,12 0 047
-cq "
-( 6,12,2 0 050
-) 6,12,2 0 051
-* 8,12 0 052
-+ 10,8 0 053
-, 5,3,3 0 054
-\- 5,5 0 055
-. 5,3 0 056
-/ 5,12 0 057
-sl "
-0 10,12 0 060
-1 10,12 0 061
-2 10,12 0 062
-3 10,12 0 063
-4 10,12 0 064
-5 10,12 0 065
-6 10,12 0 066
-7 10,12 0 067
-8 10,12 0 070
-9 10,12 0 071
-: 5,8 0 072
-; 5,8,3 0 073
-< 10,9 0 074
-= 10,7 0 075
-> 10,9 0 076
-? 8,12 0 077
-@ 12,12,1 0 0100
-at "
-A 13,12 0 0101
-B 13,12 0 0102
-C 13,12 0 0103
-D 14,12 0 0104
-E 12,12 0 0105
-F 12,12 0 0106
-G 14,12 0 0107
-H 15,12 0 0110
-I 7,12 0 0111
-J 11,12 0 0112
-K 13,12 0 0113
-L 12,12 0 0114
-M 16,12 0 0115
-N 14,12 0 0116
-O 14,12 0 0117
-P 13,12 0 0120
-Q 14,12,3 0 0121
-R 14,12 0 0122
-S 11,12 0 0123
-T 12,12 0 0124
-U 14,12 0 0125
-V 13,12 0 0126
-W 16,12 0 0127
-X 12,12 0 0130
-Y 12,12 0 0131
-Z 11,12 0 0132
-[ 6,12,2 0 0133
-lB "
-\ 10,12 0 0134
-rs "
-] 7,12,2 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 8,0,2 0 0137
-` 6,12 0 0140
-oq "
-a 10,8 0 0141
-b 11,12 0 0142
-c 9,8 0 0143
-d 11,12 0 0144
-e 10,8 0 0145
-f 7,12 0 0146
-g 10,9,3 0 0147
-h 11,12 0 0150
-i 6,12 0 0151
-j 6,12,3 0 0152
-k 11,12 0 0153
-l 6,12 0 0154
-m 16,8 0 0155
-n 11,8 0 0156
-o 11,8 0 0157
-p 11,8,3 0 0160
-q 10,8,3 0 0161
-r 9,8 0 0162
-s 8,8 0 0163
-t 7,11 0 0164
-u 11,8 0 0165
-v 10,8 0 0166
-w 15,8 0 0167
-x 10,8 0 0170
-y 10,8,3 0 0171
-z 9,8 0 0172
-{ 6,12,2 0 0173
-lC "
-| 10,12 0 0174
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,9,3 0 0241
-ct 10,10,2 0 0242
-Po 10,12 0 0243
-Cs 10,10 0 0244
-Ye 10,12 0 0245
-bb 10,12 0 0246
-sc 9,12,3 0 0247
-ad 6,11 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 8,7 0 0253
-tno 10,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,9 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,12 0 0264
-mc 11,8,3 0 0265
-ps 12,12 0 0266
-pc 5,6 0 0267
-ac 6,1,3 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 8,7 0 0273
-14 14,12 0 0274
-12 14,12 0 0275
-34 14,12 0 0276
-r? 8,9,3 0 0277
-`A 13,16 0 0300
-'A 13,16 0 0301
-^A 13,16 0 0302
-~A 13,15 0 0303
-:A 13,15 0 0304
-oA 13,16 0 0305
-AE 16,12 0 0306
-,C 13,12,3 0 0307
-`E 12,16 0 0310
-'E 12,16 0 0311
-^E 12,16 0 0312
-:E 12,15 0 0313
-`I 7,16 0 0314
-'I 7,16 0 0315
-^I 7,16 0 0316
-:I 7,15 0 0317
--D 14,12 0 0320
-~N 14,15 0 0321
-`O 14,16 0 0322
-'O 14,16 0 0323
-^O 14,16 0 0324
-~O 14,15 0 0325
-:O 14,15 0 0326
-tmu 10,8 0 0327
-/O 14,13,1 0 0330
-`U 14,16 0 0331
-'U 14,16 0 0332
-^U 14,16 0 0333
-:U 14,15 0 0334
-'Y 12,16 0 0335
-TP 13,12 0 0336
-ss 10,12 0 0337
-`a 10,12 0 0340
-'a 10,12 0 0341
-^a 10,12 0 0342
-~a 10,11 0 0343
-:a 10,11 0 0344
-oa 10,12 0 0345
-ae 15,8 0 0346
-,c 9,8,3 0 0347
-`e 10,12 0 0350
-'e 10,12 0 0351
-^e 10,12 0 0352
-:e 10,11 0 0353
-`i 6,12 0 0354
-'i 6,12 0 0355
-^i 6,12 0 0356
-:i 6,11 0 0357
-Sd 11,13 0 0360
-~n 11,11 0 0361
-`o 11,12 0 0362
-'o 11,12 0 0363
-^o 11,12 0 0364
-~o 11,11 0 0365
-:o 11,11 0 0366
-tdi 10,8 0 0367
-/o 10,10,2 0 0370
-`u 11,12 0 0371
-'u 11,12 0 0372
-^u 11,12 0 0373
-:u 11,11 0 0374
-'y 10,12,3 0 0375
-Tp 11,12,3 0 0376
-:y 10,11,3 0 0377
diff --git a/contrib/groff/font/devX100-12/NBI b/contrib/groff/font/devX100-12/NBI
deleted file mode 100644
index a394aaba80c1..000000000000
--- a/contrib/groff/font/devX100-12/NBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 14,11 0 00
---- 4,1 0 040
-! 6,12 0 041
-" 7,12 0 042
-dq "
-# 10,12 0 043
-sh "
-$ 9,14,1 0 044
-Do "
-% 15,12 0 045
-& 15,12 0 046
-' 5,12 0 047
-cq "
-( 7,12,2 0 050
-) 7,12,2 0 051
-* 8,12 0 052
-+ 10,8 0 053
-, 5,3,3 0 054
-\- 5,5 0 055
-. 5,3 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 5,8 0 072
-; 5,8,3 0 073
-< 10,8 0 074
-= 10,7 0 075
-> 10,8 0 076
-? 8,12 0 077
-@ 12,12 0 0100
-at "
-A 12,12 0 0101
-B 13,12 0 0102
-C 13,12 0 0103
-D 14,12 0 0104
-E 12,12 0 0105
-F 12,12 0 0106
-G 14,12 0 0107
-H 14,12 0 0110
-I 7,12 0 0111
-J 11,12 0 0112
-K 13,12 0 0113
-L 12,12 0 0114
-M 16,12 0 0115
-N 14,12 0 0116
-O 14,12 0 0117
-P 12,12 0 0120
-Q 14,12,3 0 0121
-R 14,12 0 0122
-S 11,12 0 0123
-T 12,12 0 0124
-U 14,12 0 0125
-V 12,12 0 0126
-W 16,12 0 0127
-X 12,12 0 0130
-Y 12,12 0 0131
-Z 12,12 0 0132
-[ 7,12,2 0 0133
-lB "
-\ 10,12 0 0134
-rs "
-] 7,12,2 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 6,12 0 0140
-oq "
-a 11,8 0 0141
-b 10,12 0 0142
-c 9,8 0 0143
-d 11,12 0 0144
-e 9,8 0 0145
-f 6,12,3 0 0146
-g 10,9,3 0 0147
-h 11,12 0 0150
-i 6,12 0 0151
-j 6,12,3 0 0152
-k 11,12 0 0153
-l 6,12 0 0154
-m 15,8 0 0155
-n 11,8 0 0156
-o 10,8 0 0157
-p 11,8,3 0 0160
-q 10,8,3 0 0161
-r 9,8 0 0162
-s 8,8 0 0163
-t 7,11 0 0164
-u 11,8 0 0165
-v 9,8 0 0166
-w 14,8 0 0167
-x 9,8 0 0170
-y 9,8,3 0 0171
-z 9,8 0 0172
-{ 7,12,2 0 0173
-lC "
-| 10,12 0 0174
-ba "
-} 7,12,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 6,9,3 0 0241
-ct 10,10,2 0 0242
-Po 10,12 0 0243
-Cs 10,10 0 0244
-Ye 10,12 0 0245
-bb 10,12 0 0246
-sc 9,12,3 0 0247
-ad 6,11 0 0250
-co 12,12 0 0251
-Of 7,12 0 0252
-Fo 8,7 0 0253
-tno 10,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,12 0 0256
-a- 6,11 0 0257
-de 7,12 0 0260
-t+- 10,8 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 6,12 0 0264
-mc 11,8,3 0 0265
-ps 11,12 0 0266
-pc 5,6 0 0267
-ac 5,1,3 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 8,7 0 0273
-14 14,12 0 0274
-12 14,12 0 0275
-34 14,12 0 0276
-r? 8,9,3 0 0277
-`A 12,16 0 0300
-'A 12,16 0 0301
-^A 12,16 0 0302
-~A 12,15 0 0303
-:A 12,15 0 0304
-oA 12,16 0 0305
-AE 15,12 0 0306
-,C 13,12,3 0 0307
-`E 12,16 0 0310
-'E 12,16 0 0311
-^E 12,16 0 0312
-:E 12,15 0 0313
-`I 7,16 0 0314
-'I 7,16 0 0315
-^I 7,16 0 0316
-:I 7,15 0 0317
--D 14,12 0 0320
-~N 14,15 0 0321
-`O 14,16 0 0322
-'O 14,16 0 0323
-^O 14,16 0 0324
-~O 14,15 0 0325
-:O 14,15 0 0326
-tmu 10,8 0 0327
-/O 14,13,1 0 0330
-`U 14,16 0 0331
-'U 14,16 0 0332
-^U 14,16 0 0333
-:U 14,15 0 0334
-'Y 12,16 0 0335
-TP 12,12 0 0336
-ss 10,12,3 0 0337
-`a 11,12 0 0340
-'a 11,12 0 0341
-^a 11,12 0 0342
-~a 11,11 0 0343
-:a 11,11 0 0344
-oa 11,13 0 0345
-ae 14,8 0 0346
-,c 9,8,3 0 0347
-`e 9,12 0 0350
-'e 9,12 0 0351
-^e 9,12 0 0352
-:e 9,11 0 0353
-`i 6,12 0 0354
-'i 6,12 0 0355
-^i 6,12 0 0356
-:i 6,11 0 0357
-Sd 10,13 0 0360
-~n 11,11 0 0361
-`o 10,12 0 0362
-'o 10,12 0 0363
-^o 10,12 0 0364
-~o 10,11 0 0365
-:o 10,11 0 0366
-tdi 10,8 0 0367
-/o 10,10,2 0 0370
-`u 11,12 0 0371
-'u 11,12 0 0372
-^u 11,12 0 0373
-:u 11,11 0 0374
-'y 9,12,3 0 0375
-Tp 11,11,3 0 0376
-:y 9,11,3 0 0377
diff --git a/contrib/groff/font/devX100-12/NI b/contrib/groff/font/devX100-12/NI
deleted file mode 100644
index f24cb792d910..000000000000
--- a/contrib/groff/font/devX100-12/NI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NI
-spacewidth 4
-charset
---- 14,11 0 00
---- 4,1 0 040
-! 6,12 0 041
-" 7,12 0 042
-dq "
-# 9,12 0 043
-sh "
-$ 9,14,1 0 044
-Do "
-% 14,12 0 045
-& 14,12 0 046
-' 5,12 0 047
-cq "
-( 6,12,2 0 050
-) 5,12,2 0 051
-* 8,12 0 052
-+ 10,9 0 053
-, 4,2,3 0 054
-\- 5,4 0 055
-. 4,2 0 056
-/ 10,12,2 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 5,8 0 072
-; 5,8,3 0 073
-< 10,9 0 074
-= 10,6 0 075
-> 10,9 0 076
-? 7,12 0 077
-@ 12,12 0 0100
-at "
-A 12,12 0 0101
-B 12,12 0 0102
-C 12,12 0 0103
-D 13,12 0 0104
-E 12,12 0 0105
-F 11,12 0 0106
-G 13,12 0 0107
-H 14,12 0 0110
-I 7,12 0 0111
-J 10,12 0 0112
-K 12,12 0 0113
-L 11,12 0 0114
-M 16,12 0 0115
-N 13,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,3 0 0121
-R 13,12 0 0122
-S 11,12 0 0123
-T 11,12 0 0124
-U 13,12 0 0125
-V 11,12 0 0126
-W 15,12 0 0127
-X 12,12 0 0130
-Y 11,12 0 0131
-Z 11,12 0 0132
-[ 6,12,2 0 0133
-lB "
-\ 10,12 0 0134
-rs "
-] 6,12,2 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 5,12 0 0140
-oq "
-a 10,8 0 0141
-b 9,12 0 0142
-c 8,8 0 0143
-d 10,12 0 0144
-e 7,8 0 0145
-f 5,12,3 0 0146
-g 9,9,3 0 0147
-h 10,12 0 0150
-i 6,12 0 0151
-j 5,12,3 0 0152
-k 9,12 0 0153
-l 6,12 0 0154
-m 15,8 0 0155
-n 10,8 0 0156
-o 8,8 0 0157
-p 9,8,3 0 0160
-q 9,8,3 0 0161
-r 7,8 0 0162
-s 7,8 0 0163
-t 6,11 0 0164
-u 10,8 0 0165
-v 8,8 0 0166
-w 13,8 0 0167
-x 8,8 0 0170
-y 8,8,3 0 0171
-z 8,8 0 0172
-{ 6,12,2 0 0173
-lC "
-| 10,12 0 0174
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 6,9,3 0 0241
-ct 9,10,2 0 0242
-Po 9,12 0 0243
-Cs 9,10 0 0244
-Ye 9,12 0 0245
-bb 10,12 0 0246
-sc 8,12,3 0 0247
-ad 6,11 0 0250
-co 12,12 0 0251
-Of 7,12 0 0252
-Fo 7,6 0 0253
-tno 10,6 0 0254
-- 5,4 0 0255
-hy "
-rg 12,12 0 0256
-a- 5,10 0 0257
-de 7,12 0 0260
-t+- 10,9 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 5,12 0 0264
-mc 10,8,3 0 0265
-ps 11,12 0 0266
-pc 5,5 0 0267
-ac 5,1,3 0 0270
-S1 6,12 0 0271
-Om 6,12 0 0272
-Fc 7,6 0 0273
-14 14,12 0 0274
-12 14,12 0 0275
-34 14,12 0 0276
-r? 7,9,3 0 0277
-`A 12,16 0 0300
-'A 12,16 0 0301
-^A 12,16 0 0302
-~A 12,15 0 0303
-:A 12,15 0 0304
-oA 12,16 0 0305
-AE 14,12 0 0306
-,C 12,12,3 0 0307
-`E 12,16 0 0310
-'E 12,16 0 0311
-^E 12,16 0 0312
-:E 12,15 0 0313
-`I 7,16 0 0314
-'I 7,16 0 0315
-^I 7,16 0 0316
-:I 7,15 0 0317
--D 13,12 0 0320
-~N 13,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,8 0 0327
-/O 13,13,1 0 0330
-`U 13,16 0 0331
-'U 13,16 0 0332
-^U 13,16 0 0333
-:U 13,15 0 0334
-'Y 11,16 0 0335
-TP 11,12 0 0336
-ss 9,12,3 0 0337
-`a 10,12 0 0340
-'a 10,12 0 0341
-^a 10,12 0 0342
-~a 10,11 0 0343
-:a 10,11 0 0344
-oa 10,13 0 0345
-ae 12,8 0 0346
-,c 8,8,3 0 0347
-`e 7,12 0 0350
-'e 7,12 0 0351
-^e 7,12 0 0352
-:e 7,11 0 0353
-`i 6,12 0 0354
-'i 6,12 0 0355
-^i 6,12 0 0356
-:i 6,11 0 0357
-Sd 8,13 0 0360
-~n 10,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 10,8 0 0367
-/o 8,10,2 0 0370
-`u 10,12 0 0371
-'u 10,12 0 0372
-^u 10,12 0 0373
-:u 10,11 0 0374
-'y 8,12,3 0 0375
-Tp 9,11,3 0 0376
-:y 8,11,3 0 0377
diff --git a/contrib/groff/font/devX100-12/NR b/contrib/groff/font/devX100-12/NR
deleted file mode 100644
index 38f903f5d70c..000000000000
--- a/contrib/groff/font/devX100-12/NR
+++ /dev/null
@@ -1,213 +0,0 @@
-name NR
-spacewidth 4
-charset
---- 14,11 0 00
---- 4,1 0 040
-! 5,12 0 041
-" 6,12 0 042
-dq "
-# 9,12 0 043
-sh "
-$ 9,13,2 0 044
-Do "
-% 14,12 0 045
-& 13,12 0 046
-' 3,12 0 047
-cq "
-( 6,12,2 0 050
-) 6,12,2 0 051
-* 8,12 0 052
-+ 10,9 0 053
-, 4,2,3 0 054
-\- 5,4 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 9,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 9,12 0 063
-4 9,12 0 064
-5 9,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
-9 9,12 0 071
-: 4,8 0 072
-; 4,8,3 0 073
-< 10,8 0 074
-= 10,6 0 075
-> 10,8 0 076
-? 7,12 0 077
-@ 12,12,1 0 0100
-at "
-A 12,12 0 0101
-B 12,12 0 0102
-C 12,12 0 0103
-D 13,12 0 0104
-E 12,12 0 0105
-F 11,12 0 0106
-G 13,12 0 0107
-H 14,12 0 0110
-I 7,12 0 0111
-J 9,12 0 0112
-K 13,12 0 0113
-L 11,12 0 0114
-M 16,12 0 0115
-N 13,12 0 0116
-O 13,12 0 0117
-P 11,12 0 0120
-Q 13,12,3 0 0121
-R 12,12 0 0122
-S 10,12 0 0123
-T 11,12 0 0124
-U 13,12 0 0125
-V 12,12 0 0126
-W 16,12 0 0127
-X 11,12 0 0130
-Y 12,12 0 0131
-Z 10,12 0 0132
-[ 6,12,2 0 0133
-lB "
-\ 10,12 0 0134
-rs "
-] 6,12,2 0 0135
-rB "
-^ 10,12 0 0136
-a^ "
-ha "
-_ 8,0,2 0 0137
-` 5,12 0 0140
-oq "
-a 9,8 0 0141
-b 9,12 0 0142
-c 7,8 0 0143
-d 10,12 0 0144
-e 8,8 0 0145
-f 6,12 0 0146
-g 9,8,3 0 0147
-h 10,12 0 0150
-i 5,12 0 0151
-j 5,12,3 0 0152
-k 10,12 0 0153
-l 5,12 0 0154
-m 15,8 0 0155
-n 10,8 0 0156
-o 8,8 0 0157
-p 9,8,3 0 0160
-q 9,8,3 0 0161
-r 7,8 0 0162
-s 8,8 0 0163
-t 7,11 0 0164
-u 10,8 0 0165
-v 9,8 0 0166
-w 13,8 0 0167
-x 9,8 0 0170
-y 9,8,3 0 0171
-z 8,8 0 0172
-{ 6,12,2 0 0173
-lC "
-| 10,12 0 0174
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,9,3 0 0241
-ct 9,10,2 0 0242
-Po 9,12 0 0243
-Cs 9,10 0 0244
-Ye 9,12 0 0245
-bb 10,12 0 0246
-sc 8,12,3 0 0247
-ad 5,11 0 0250
-co 12,12 0 0251
-Of 6,12 0 0252
-Fo 7,6 0 0253
-tno 10,6 0 0254
-- 5,4 0 0255
-hy "
-rg 12,12 0 0256
-a- 5,10 0 0257
-de 7,12 0 0260
-t+- 10,9 0 0261
-S2 6,12 0 0262
-S3 6,12 0 0263
-aa 5,12 0 0264
-mc 10,8,3 0 0265
-ps 10,12,3 0 0266
-pc 5,5 0 0267
-ac 5,1,3 0 0270
-S1 6,12 0 0271
-Om 5,12 0 0272
-Fc 7,6 0 0273
-14 14,12 0 0274
-12 13,12 0 0275
-34 14,12 0 0276
-r? 7,9,3 0 0277
-`A 12,16 0 0300
-'A 12,16 0 0301
-^A 12,16 0 0302
-~A 12,15 0 0303
-:A 12,15 0 0304
-oA 12,16 0 0305
-AE 17,12 0 0306
-,C 12,12,3 0 0307
-`E 12,16 0 0310
-'E 12,16 0 0311
-^E 12,16 0 0312
-:E 12,15 0 0313
-`I 7,16 0 0314
-'I 7,16 0 0315
-^I 7,16 0 0316
-:I 7,15 0 0317
--D 13,12 0 0320
-~N 13,15 0 0321
-`O 13,16 0 0322
-'O 13,16 0 0323
-^O 13,16 0 0324
-~O 13,15 0 0325
-:O 13,15 0 0326
-tmu 10,8 0 0327
-/O 13,13,1 0 0330
-`U 13,16 0 0331
-'U 13,16 0 0332
-^U 13,16 0 0333
-:U 13,15 0 0334
-'Y 12,16 0 0335
-TP 11,12 0 0336
-ss 10,12 0 0337
-`a 9,12 0 0340
-'a 9,12 0 0341
-^a 9,12 0 0342
-~a 9,11 0 0343
-:a 9,11 0 0344
-oa 9,13 0 0345
-ae 13,8 0 0346
-,c 7,8,3 0 0347
-`e 8,12 0 0350
-'e 8,12 0 0351
-^e 8,12 0 0352
-:e 8,11 0 0353
-`i 5,12 0 0354
-'i 5,12 0 0355
-^i 5,12 0 0356
-:i 5,11 0 0357
-Sd 8,13 0 0360
-~n 10,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 10,8 0 0367
-/o 8,9,1 0 0370
-`u 10,12 0 0371
-'u 10,12 0 0372
-^u 10,12 0 0373
-:u 10,11 0 0374
-'y 9,12,3 0 0375
-Tp 9,11,3 0 0376
-:y 9,11,3 0 0377
diff --git a/contrib/groff/font/devX100-12/S b/contrib/groff/font/devX100-12/S
deleted file mode 100644
index c898a48e9b7a..000000000000
--- a/contrib/groff/font/devX100-12/S
+++ /dev/null
@@ -1,221 +0,0 @@
-name S
-special
-spacewidth 4
-charset
---- 4,1 0 040
-! 5,11 0 041
-fa 11,12 0 042
-# 8,11 0 043
-sh "
-te 9,12 0 044
-% 13,11,1 0 045
-& 13,11 0 046
-st 7,8 0 047
-( 5,12,2 0 050
-) 5,12,2 0 051
-** 8,8 0 052
-+ 9,9 0 053
-pl "
-, 4,3,2 0 054
-\- 9,5 0 055
-mi "
-. 4,3 0 056
-/ 5,11 0 057
-sl "
-0 8,12 0 060
-1 8,12 0 061
-2 8,12 0 062
-3 8,12 0 063
-4 8,12 0 064
-5 8,12 0 065
-6 8,12 0 066
-7 8,12 0 067
-8 8,12 0 070
-9 8,12 0 071
-: 4,8 0 072
-; 4,8,2 0 073
-< 9,9 0 074
-= 9,6 0 075
-eq "
-> 9,9 0 076
-? 7,11 0 077
-=~ 9,8 0 0100
-*A 12,11 0 0101
-*B 11,11 0 0102
-*X 12,11 0 0103
-*D 10,11 0 0104
-*E 10,11 0 0105
-*F 12,11 0 0106
-*G 10,11 0 0107
-*Y 12,11 0 0110
-*I 6,11 0 0111
-+h 10,12 0 0112
-*K 12,11 0 0113
-*L 11,11 0 0114
-*M 14,11 0 0115
-*N 11,11 0 0116
-*O 12,11 0 0117
-*P 12,11 0 0120
-*H 12,11 0 0121
-*R 9,11 0 0122
-*S 10,11 0 0123
-*T 10,11 0 0124
---- 11,11 0 0125
-ts 8,8,4 0 0126
-*W 12,12 0 0127
-*C 11,11 0 0130
-*Q 13,11 0 0131
-*Z 10,11 0 0132
-[ 6,12,2 0 0133
-lB "
-tf 14,8 0 0134
-3d "
-] 5,12,2 0 0135
-rB "
-pp 11,11 0 0136
-_ 8,0,3 0 0137
-radicalex 8,13 0 0140
-*a 11,9 0 0141
-*b 9,13,4 0 0142
-*x 9,9,3 0 0143
-*d 8,12 0 0144
-*e 7,9 0 0145
-*f 9,11,3 0 0146
-*g 7,9,4 0 0147
-*y 10,9,3 0 0150
-*i 5,9 0 0151
-+f 10,9,3 0 0152
-*k 9,9 0 0153
-*l 9,13 0 0154
-*m 9,9,4 0 0155
-*n 8,9 0 0156
-*o 9,9 0 0157
-*p 9,9 0 0160
-*h 9,12 0 0161
-*r 9,9,4 0 0162
-*s 10,9 0 0163
-*t 7,9 0 0164
-*u 9,9 0 0165
-+p 11,10 0 0166
-*w 11,9 0 0167
-*c 8,13,4 0 0170
-*q 11,9,4 0 0171
-*z 8,13,4 0 0172
-lC 8,12,2 0 0173
-{ "
-ba 3,11,3 0 0174
-| "
-rC 8,12,2 0 0175
-} "
-ap 9,5 0 0176
-*U 10,11 0 0241
-fm 4,12 0 0242
-<= 9,11 0 0243
-f/ 3,11 0 0244
-if 12,7 0 0245
-Fn 8,12,3 0 0246
-CL 12,9,1 0 0247
-DI 12,9 0 0250
-HE 12,9 0 0251
-SP 12,9,1 0 0252
-<> 17,9 0 0253
-<- 16,9 0 0254
-ua 10,13,2 0 0255
-arrowverttp "
--> 16,9 0 0256
-da 10,13,2 0 0257
-arrowvertbt "
-de 6,11 0 0260
-+- 9,11 0 0261
-sd 7,12 0 0262
->= 9,11 0 0263
-mu 9,9 0 0264
-pt 11,7 0 0265
-pd 8,13,1 0 0266
-bu 8,8 0 0267
-di 9,8 0 0270
-!= 9,9,1 0 0271
-== 9,8 0 0272
-~= 9,7 0 0273
-~~ "
---- 16,3 0 0274
-arrowvertex 10,13,4 0 0275
-an 16,5 0 0276
-CR 10,10,1 0 0277
-Ah 13,11 0 0300
-Im 11,13,1 0 0301
-Re 13,13 0 0302
-wp 16,9,4 0 0303
-c* 12,11 0 0304
-c+ 12,11 0 0305
-es 13,12 0 0306
-ca 12,9 0 0307
-cu 12,9 0 0310
-sp 11,8 0 0311
-ip 11,7,3 0 0312
-nb 11,9,1 0 0313
-sb 11,8 0 0314
-ib 11,8,2 0 0315
-mo 11,7 0 0316
-nm 11,8,1 0 0317
-/_ 12,11 0 0320
-gr 11,12 0 0321
-rg 13,11 0 0322
-co 13,11 0 0323
-tm 14,11 0 0324
---- 13,13,2 0 0325
-sr 9,13,3 0 0326
-sqrt "
-md 4,5 0 0327
-no 12,5 0 0330
-AN 10,8 0 0331
-OR 10,8 0 0332
-hA 17,9 0 0333
-lA 16,9 0 0334
-uA 10,13,2 0 0335
-rA 16,9 0 0336
-dA 10,13,2 0 0337
-lz 8,12 0 0340
-la 5,13,2 0 0341
---- 13,11 0 0342
---- 13,11 0 0343
---- 13,11 0 0344
---- 11,13,2 0 0345
-parenlefttp 6,13,4 0 0346
-parenleftex 6,13,4 0 0347
-parenleftbt 6,13,4 0 0350
-bracketlefttp 6,13,4 0 0351
-lc "
-bracketleftex 6,13,4 0 0352
-bracketleftbt 6,13,4 0 0353
-lf "
-bracelefttp 8,13,4 0 0354
-lt "
-braceleftmid 8,13,4 0 0355
-lk "
-braceleftbt 8,13,4 0 0356
-lb "
-bracerightex 8,13,4 0 0357
-braceleftex "
-braceex "
-bv "
-ra 5,13,2 0 0361
-is 5,13,4 0 0362
-integral "
---- 11,13,4 0 0363
---- 11,13,4 0 0364
---- 11,13,4 0 0365
-parenrighttp 7,13,4 0 0366
-parenrightex 6,13,4 0 0367
-parenrightbt 6,13,4 0 0370
-bracketrighttp 6,13,4 0 0371
-rc "
-bracketrightex 6,13,4 0 0372
-bracketrightbt 6,13,4 0 0373
-rf "
-bracerighttp 8,13,4 0 0374
-rt "
-bracerightmid 8,13,4 0 0375
-rk "
-bracerightbt 8,13,4 0 0376
-rb "
diff --git a/contrib/groff/font/devX100-12/TB b/contrib/groff/font/devX100-12/TB
deleted file mode 100644
index 52635cf057a5..000000000000
--- a/contrib/groff/font/devX100-12/TB
+++ /dev/null
@@ -1,213 +0,0 @@
-name TB
-spacewidth 5
-charset
---- 12,11 0 00
---- 5,1 0 040
-! 6,11 0 041
-" 9,11 0 042
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 16,12 0 045
-& 14,11 0 046
-' 5,11 0 047
-cq "
-( 6,11,3 0 050
-) 6,11,3 0 051
-* 8,11 0 052
-+ 9,8 0 053
-, 4,2,3 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 5,7 0 072
-; 5,7,3 0 073
-< 9,8 0 074
-= 9,7 0 075
-> 9,8 0 076
-? 8,11 0 077
-@ 16,11,2 0 0100
-at "
-A 12,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 11,11 0 0104
-E 10,11 0 0105
-F 10,11 0 0106
-G 12,11 0 0107
-H 12,11 0 0110
-I 6,11 0 0111
-J 8,11,2 0 0112
-K 13,11 0 0113
-L 11,11 0 0114
-M 15,11 0 0115
-N 12,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11,3 0 0121
-R 12,11 0 0122
-S 9,11 0 0123
-T 11,11 0 0124
-U 12,11 0 0125
-V 12,11 0 0126
-W 17,11 0 0127
-X 12,11 0 0130
-Y 12,11 0 0131
-Z 11,11 0 0132
-[ 6,11,3 0 0133
-lB "
-\ 5,11 0 0134
-rs "
-] 6,11,3 0 0135
-rB "
-^ 9,11 0 0136
-a^ "
-ha "
-_ 8,0,4 0 0137
-` 6,12 0 0140
-oq "
-a 8,8 0 0141
-b 9,11 0 0142
-c 7,8 0 0143
-d 9,11 0 0144
-e 7,8 0 0145
-f 6,11 0 0146
-g 8,8,4 0 0147
-h 9,11 0 0150
-i 5,11 0 0151
-j 5,11,4 0 0152
-k 9,11 0 0153
-l 5,11 0 0154
-m 13,8 0 0155
-n 9,8 0 0156
-o 8,8 0 0157
-p 9,8,4 0 0160
-q 9,8,4 0 0161
-r 7,8 0 0162
-s 6,8 0 0163
-t 6,11 0 0164
-u 9,8 0 0165
-v 8,8 0 0166
-w 12,8 0 0167
-x 8,8 0 0170
-y 8,8,4 0 0171
-z 7,8 0 0172
-{ 7,11,3 0 0173
-lC "
-| 4,11,3 0 0174
-ba "
-} 7,11,3 0 0175
-rC "
-~ 9,8 0 0176
-a~ "
-ti "
---- 5,1 0 0240
-r! 6,8,4 0 0241
-ct 8,10,2 0 0242
-Po 8,11 0 0243
-Cs 8,8 0 0244
-Ye 8,11 0 0245
-bb 4,12,3 0 0246
-sc 8,11,4 0 0247
-ad 6,11 0 0250
-co 12,11 0 0251
-Of 5,11 0 0252
-Fo 8,7 0 0253
-tno 9,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 6,10 0 0257
-de 7,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 6,12 0 0264
-mc 9,8,3 0 0265
-ps 9,11,4 0 0266
-pc 4,6 0 0267
-ac 6,0,4 0 0270
-S1 5,11 0 0271
-Om 6,11 0 0272
-Fc 8,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 8,8,3 0 0277
-`A 12,15 0 0300
-'A 12,15 0 0301
-^A 12,15 0 0302
-~A 12,14 0 0303
-:A 12,14 0 0304
-oA 12,16 0 0305
-AE 16,11 0 0306
-,C 11,11,4 0 0307
-`E 10,15 0 0310
-'E 10,15 0 0311
-^E 10,15 0 0312
-:E 10,14 0 0313
-`I 6,15 0 0314
-'I 6,15 0 0315
-^I 6,15 0 0316
-:I 6,14 0 0317
--D 11,11 0 0320
-~N 12,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 9,8 0 0327
-/O 13,12,1 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 12,15 0 0335
-TP 10,11 0 0336
-ss 9,11 0 0337
-`a 8,12 0 0340
-'a 8,12 0 0341
-^a 8,12 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,13 0 0345
-ae 12,8 0 0346
-,c 7,8,4 0 0347
-`e 7,12 0 0350
-'e 7,12 0 0351
-^e 7,12 0 0352
-:e 7,11 0 0353
-`i 5,12 0 0354
-'i 5,12 0 0355
-^i 5,12 0 0356
-:i 5,11 0 0357
-Sd 8,11 0 0360
-~n 9,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 9,8 0 0367
-/o 8,9,1 0 0370
-`u 9,12 0 0371
-'u 9,12 0 0372
-^u 9,12 0 0373
-:u 9,11 0 0374
-'y 8,12,4 0 0375
-Tp 9,11,4 0 0376
-:y 8,11,4 0 0377
diff --git a/contrib/groff/font/devX100-12/TBI b/contrib/groff/font/devX100-12/TBI
deleted file mode 100644
index 03f035c918ae..000000000000
--- a/contrib/groff/font/devX100-12/TBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TBI
-spacewidth 4
-charset
---- 13,11 0 00
---- 4,1 0 040
-! 6,11 0 041
-" 9,11 0 042
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 13,11 0 046
-' 5,11 0 047
-cq "
-( 6,11,3 0 050
-) 6,11,3 0 051
-* 8,11 0 052
-+ 10,9 0 053
-, 4,2,3 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 5,7 0 072
-; 5,7,3 0 073
-< 10,8 0 074
-= 10,7 0 075
-> 10,8 0 076
-? 8,11 0 077
-@ 14,11,2 0 0100
-at "
-A 11,11 0 0101
-B 11,11 0 0102
-C 11,11 0 0103
-D 12,11 0 0104
-E 11,11 0 0105
-F 11,11 0 0106
-G 12,11 0 0107
-H 13,11 0 0110
-I 6,11 0 0111
-J 8,11,2 0 0112
-K 11,11 0 0113
-L 10,11 0 0114
-M 15,11 0 0115
-N 12,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11,4 0 0121
-R 11,11 0 0122
-S 9,11 0 0123
-T 10,11 0 0124
-U 12,11 0 0125
-V 11,11 0 0126
-W 15,11 0 0127
-X 11,11 0 0130
-Y 10,11 0 0131
-Z 10,11 0 0132
-[ 6,12,3 0 0133
-lB "
-\ 5,12 0 0134
-rs "
-] 6,12,3 0 0135
-rB "
-^ 10,11 0 0136
-a^ "
-ha "
-_ 8,0,2 0 0137
-` 6,12 0 0140
-oq "
-a 8,8 0 0141
-b 8,11 0 0142
-c 7,8 0 0143
-d 8,11 0 0144
-e 7,8 0 0145
-f 6,11,3 0 0146
-g 8,8,3 0 0147
-h 9,11 0 0150
-i 5,11 0 0151
-j 5,11,3 0 0152
-k 8,11 0 0153
-l 5,11 0 0154
-m 13,8 0 0155
-n 9,8 0 0156
-o 8,8 0 0157
-p 8,8,3 0 0160
-q 8,8,3 0 0161
-r 6,8 0 0162
-s 6,8 0 0163
-t 5,10 0 0164
-u 9,8 0 0165
-v 7,8 0 0166
-w 11,8 0 0167
-x 8,8 0 0170
-y 7,8,3 0 0171
-z 6,8,1 0 0172
-{ 6,12,3 0 0173
-lC "
-| 4,12 0 0174
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 6,8,4 0 0241
-ct 8,10,2 0 0242
-Po 8,11 0 0243
-Cs 8,9 0 0244
-Ye 8,11 0 0245
-bb 4,12 0 0246
-sc 8,11,3 0 0247
-ad 6,11 0 0250
-co 12,11 0 0251
-Of 4,11 0 0252
-Fo 8,7 0 0253
-tno 10,5 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 6,10 0 0257
-de 7,11 0 0260
-t+- 10,10 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 6,12 0 0264
-mc 9,8,3 0 0265
-ps 8,11,3 0 0266
-pc 4,5 0 0267
-ac 6,1,3 0 0270
-S1 5,11 0 0271
-Om 5,11 0 0272
-Fc 8,7 0 0273
-14 13,11 0 0274
-12 13,11 0 0275
-34 13,11 0 0276
-r? 8,8,4 0 0277
-`A 11,15 0 0300
-'A 11,15 0 0301
-^A 11,15 0 0302
-~A 11,14 0 0303
-:A 11,14 0 0304
-oA 11,15 0 0305
-AE 15,11 0 0306
-,C 11,11,3 0 0307
-`E 11,15 0 0310
-'E 11,15 0 0311
-^E 11,15 0 0312
-:E 11,14 0 0313
-`I 6,15 0 0314
-'I 6,15 0 0315
-^I 6,15 0 0316
-:I 6,14 0 0317
--D 12,11 0 0320
-~N 12,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 10,9 0 0327
-/O 12,12,2 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 10,15 0 0335
-TP 10,11 0 0336
-ss 8,12,3 0 0337
-`a 8,12 0 0340
-'a 8,12 0 0341
-^a 8,12 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,12 0 0345
-ae 12,8 0 0346
-,c 7,8,3 0 0347
-`e 7,12 0 0350
-'e 7,12 0 0351
-^e 7,12 0 0352
-:e 7,11 0 0353
-`i 5,12 0 0354
-'i 5,12 0 0355
-^i 5,12 0 0356
-:i 5,11 0 0357
-Sd 8,11 0 0360
-~n 9,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 10,9 0 0367
-/o 8,10,2 0 0370
-`u 9,12 0 0371
-'u 9,12 0 0372
-^u 9,12 0 0373
-:u 9,11 0 0374
-'y 7,12,3 0 0375
-Tp 8,11,3 0 0376
-:y 7,11,3 0 0377
diff --git a/contrib/groff/font/devX100-12/TI b/contrib/groff/font/devX100-12/TI
deleted file mode 100644
index 0f2e2e99551a..000000000000
--- a/contrib/groff/font/devX100-12/TI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TI
-spacewidth 4
-charset
---- 12,11 0 00
---- 4,1 0 040
-! 6,11 0 041
-" 7,10 0 042
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 13,11 0 046
-' 4,10 0 047
-cq "
-( 6,11,3 0 050
-) 6,11,3 0 051
-* 8,11 0 052
-+ 11,9 0 053
-, 4,2,2 0 054
-\- 5,4 0 055
-. 4,2 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 5,7 0 072
-; 5,7,2 0 073
-< 11,9 0 074
-= 11,6 0 075
-> 11,9 0 076
-? 8,11 0 077
-@ 15,11,3 0 0100
-at "
-A 10,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 12,11 0 0104
-E 10,11 0 0105
-F 10,11 0 0106
-G 12,11 0 0107
-H 12,11 0 0110
-I 6,11 0 0111
-J 7,11 0 0112
-K 11,11 0 0113
-L 9,11 0 0114
-M 14,11 0 0115
-N 11,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11,3 0 0121
-R 10,11 0 0122
-S 8,11 0 0123
-T 9,11 0 0124
-U 12,11 0 0125
-V 10,11 0 0126
-W 14,11 0 0127
-X 10,11 0 0130
-Y 9,11 0 0131
-Z 9,11 0 0132
-[ 6,11,3 0 0133
-lB "
-\ 5,11 0 0134
-rs "
-] 6,11,3 0 0135
-rB "
-^ 7,11 0 0136
-a^ "
-ha "
-_ 8,0,4 0 0137
-` 6,12 0 0140
-oq "
-a 8,8 0 0141
-b 8,11 0 0142
-c 7,8 0 0143
-d 8,11 0 0144
-e 7,8 0 0145
-f 5,11,4 0 0146
-g 8,8,4 0 0147
-h 8,11 0 0150
-i 5,11 0 0151
-j 5,11,4 0 0152
-k 7,11 0 0153
-l 5,11 0 0154
-m 12,8 0 0155
-n 8,8 0 0156
-o 8,8 0 0157
-p 8,8,4 0 0160
-q 8,8,4 0 0161
-r 6,8 0 0162
-s 6,8 0 0163
-t 5,10 0 0164
-u 8,8 0 0165
-v 7,8 0 0166
-w 11,8 0 0167
-x 7,8 0 0170
-y 7,8,4 0 0171
-z 6,8 0 0172
-{ 7,11,3 0 0173
-lC "
-| 5,11,3 0 0174
-ba "
-} 7,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 6,8,3 0 0241
-ct 8,9,1 0 0242
-Po 8,11 0 0243
-Cs 8,9 0 0244
-Ye 8,11 0 0245
-bb 5,11,3 0 0246
-sc 8,12,1 0 0247
-ad 6,11 0 0250
-co 13,11 0 0251
-Of 5,11 0 0252
-Fo 8,6 0 0253
-tno 11,6 0 0254
-- 5,4 0 0255
-hy "
-rg 13,11 0 0256
-a- 6,10 0 0257
-de 7,11 0 0260
-t+- 11,11 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 6,12 0 0264
-mc 8,8,4 0 0265
-ps 9,11,3 0 0266
-pc 4,5 0 0267
-ac 6,1,3 0 0270
-S1 5,11 0 0271
-Om 5,11 0 0272
-Fc 8,6 0 0273
-14 13,11 0 0274
-12 13,11 0 0275
-34 13,11 0 0276
-r? 8,8,3 0 0277
-`A 10,15 0 0300
-'A 10,15 0 0301
-^A 10,15 0 0302
-~A 10,14 0 0303
-:A 10,14 0 0304
-oA 10,15 0 0305
-AE 15,11 0 0306
-,C 11,11,3 0 0307
-`E 10,15 0 0310
-'E 10,15 0 0311
-^E 10,15 0 0312
-:E 10,14 0 0313
-`I 6,15 0 0314
-'I 6,15 0 0315
-^I 6,15 0 0316
-:I 6,14 0 0317
--D 12,11 0 0320
-~N 11,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 11,9 0 0327
-/O 12,12,1 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 9,15 0 0335
-TP 10,11 0 0336
-ss 8,11,4 0 0337
-`a 8,12 0 0340
-'a 8,12 0 0341
-^a 8,12 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,13 0 0345
-ae 11,8 0 0346
-,c 7,8,3 0 0347
-`e 7,12 0 0350
-'e 7,12 0 0351
-^e 7,12 0 0352
-:e 7,11 0 0353
-`i 5,12 0 0354
-'i 5,12 0 0355
-^i 5,12 0 0356
-:i 5,11 0 0357
-Sd 8,12 0 0360
-~n 8,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 11,8 0 0367
-/o 8,9,1 0 0370
-`u 8,12 0 0371
-'u 8,12 0 0372
-^u 8,12 0 0373
-:u 8,11 0 0374
-'y 7,12,4 0 0375
-Tp 8,11,4 0 0376
-:y 7,11,4 0 0377
diff --git a/contrib/groff/font/devX100-12/TR b/contrib/groff/font/devX100-12/TR
deleted file mode 100644
index ae83687b2887..000000000000
--- a/contrib/groff/font/devX100-12/TR
+++ /dev/null
@@ -1,213 +0,0 @@
-name TR
-spacewidth 4
-charset
---- 12,11 0 00
---- 4,1 0 040
-! 5,11 0 041
-" 7,11 0 042
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 14,11 0 045
-& 13,11 0 046
-' 3,11 0 047
-cq "
-( 5,11,3 0 050
-) 5,11,3 0 051
-* 8,11 0 052
-+ 9,8 0 053
-, 4,2,1 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,11,2 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,8 0 072
-; 4,8,1 0 073
-< 9,9 0 074
-= 9,6 0 075
-> 9,9 0 076
-? 7,11 0 077
-@ 15,11,3 0 0100
-at "
-A 12,11 0 0101
-B 11,11 0 0102
-C 11,11 0 0103
-D 12,11 0 0104
-E 10,11 0 0105
-F 9,11 0 0106
-G 12,11 0 0107
-H 12,11 0 0110
-I 5,11 0 0111
-J 6,11 0 0112
-K 12,11 0 0113
-L 10,11 0 0114
-M 15,11 0 0115
-N 12,11 0 0116
-O 12,11 0 0117
-P 9,11 0 0120
-Q 12,11,3 0 0121
-R 11,11 0 0122
-S 9,11 0 0123
-T 10,11 0 0124
-U 12,11 0 0125
-V 12,11 0 0126
-W 16,11 0 0127
-X 12,11 0 0130
-Y 12,11 0 0131
-Z 10,11 0 0132
-[ 5,11,3 0 0133
-lB "
-\ 5,11 0 0134
-rs "
-] 5,11,3 0 0135
-rB "
-^ 8,11 0 0136
-a^ "
-ha "
-_ 8,0,2 0 0137
-` 6,11 0 0140
-oq "
-a 7,8 0 0141
-b 8,11 0 0142
-c 7,8 0 0143
-d 8,11 0 0144
-e 7,8 0 0145
-f 6,11 0 0146
-g 8,8,4 0 0147
-h 8,11 0 0150
-i 5,11 0 0151
-j 4,11,4 0 0152
-k 8,11 0 0153
-l 5,11 0 0154
-m 13,8 0 0155
-n 8,8 0 0156
-o 8,8 0 0157
-p 8,8,4 0 0160
-q 8,8,4 0 0161
-r 6,8 0 0162
-s 6,8 0 0163
-t 5,10 0 0164
-u 8,8 0 0165
-v 8,8 0 0166
-w 12,8 0 0167
-x 8,8 0 0170
-y 8,8,4 0 0171
-z 7,8 0 0172
-{ 8,11,3 0 0173
-lC "
-| 3,11 0 0174
-ba "
-} 8,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,8,3 0 0241
-ct 8,10,2 0 0242
-Po 8,11 0 0243
-Cs 8,10 0 0244
-Ye 8,11 0 0245
-bb 3,11 0 0246
-sc 8,11,3 0 0247
-ad 6,11 0 0250
-co 13,11 0 0251
-Of 5,11 0 0252
-Fo 8,7 0 0253
-tno 9,5 0 0254
-- 5,5 0 0255
-hy "
-rg 13,11 0 0256
-a- 6,10 0 0257
-de 7,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 6,11 0 0264
-mc 8,8,3 0 0265
-ps 8,11,4 0 0266
-pc 4,6 0 0267
-ac 6,0,4 0 0270
-S1 5,11 0 0271
-Om 5,11 0 0272
-Fc 8,7 0 0273
-14 13,11 0 0274
-12 13,11 0 0275
-34 13,11 0 0276
-r? 7,8,3 0 0277
-`A 12,15 0 0300
-'A 12,15 0 0301
-^A 12,15 0 0302
-~A 12,14 0 0303
-:A 12,14 0 0304
-oA 12,14 0 0305
-AE 15,11 0 0306
-,C 11,11,4 0 0307
-`E 10,15 0 0310
-'E 10,15 0 0311
-^E 10,15 0 0312
-:E 10,14 0 0313
-`I 5,15 0 0314
-'I 5,15 0 0315
-^I 5,15 0 0316
-:I 5,14 0 0317
--D 12,11 0 0320
-~N 12,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 9,7 0 0327
-/O 12,12,1 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 12,15 0 0335
-TP 9,11 0 0336
-ss 8,11 0 0337
-`a 7,12 0 0340
-'a 7,12 0 0341
-^a 7,12 0 0342
-~a 7,11 0 0343
-:a 7,11 0 0344
-oa 7,12 0 0345
-ae 11,8 0 0346
-,c 7,8,4 0 0347
-`e 7,12 0 0350
-'e 7,12 0 0351
-^e 7,12 0 0352
-:e 7,11 0 0353
-`i 5,12 0 0354
-'i 5,12 0 0355
-^i 5,12 0 0356
-:i 5,11 0 0357
-Sd 8,11 0 0360
-~n 8,11 0 0361
-`o 8,12 0 0362
-'o 8,12 0 0363
-^o 8,12 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 9,9 0 0367
-/o 8,10,2 0 0370
-`u 8,12 0 0371
-'u 8,12 0 0372
-^u 8,12 0 0373
-:u 8,11 0 0374
-'y 8,12,4 0 0375
-Tp 8,11,4 0 0376
-:y 8,11,4 0 0377
diff --git a/contrib/groff/font/devX100/CB b/contrib/groff/font/devX100/CB
deleted file mode 100644
index 04b75cbbe8b1..000000000000
--- a/contrib/groff/font/devX100/CB
+++ /dev/null
@@ -1,213 +0,0 @@
-name CB
-spacewidth 9
-charset
---- 9,9 0 00
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042
-dq "
-# 9,10,1 0 043
-sh "
-$ 9,11,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046
-' 9,9 0 047
-cq "
-( 9,9,2 0 050
-) 9,9,2 0 051
-* 9,9 0 052
-+ 9,8 0 053
-, 9,2,2 0 054
-\- 9,5 0 055
-. 9,2 0 056
-/ 9,10,2 0 057
-sl "
-0 9,10 0 060
-1 9,10 0 061
-2 9,10 0 062
-3 9,10 0 063
-4 9,10 0 064
-5 9,10 0 065
-6 9,10 0 066
-7 9,10 0 067
-8 9,10 0 070
-9 9,10 0 071
-: 9,7 0 072
-; 9,7,2 0 073
-< 9,8 0 074
-= 9,6 0 075
-> 9,8 0 076
-? 9,9 0 077
-@ 9,9 0 0100
-at "
-A 9,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 9,9 0 0111
-J 9,9 0 0112
-K 9,9 0 0113
-L 9,9 0 0114
-M 9,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 9,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 9,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 9,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 9,9,2 0 0133
-lB "
-\ 9,10,2 0 0134
-rs "
-] 9,9,2 0 0135
-rB "
-^ 9,9 0 0136
-a^ "
-ha "
-_ 9,0,2 0 0137
-` 9,9 0 0140
-oq "
-a 9,7 0 0141
-b 9,10 0 0142
-c 9,7 0 0143
-d 9,10 0 0144
-e 9,7 0 0145
-f 9,10 0 0146
-g 9,7,3 0 0147
-h 9,10 0 0150
-i 9,10 0 0151
-j 9,10,3 0 0152
-k 9,10 0 0153
-l 9,10 0 0154
-m 9,7 0 0155
-n 9,7 0 0156
-o 9,7 0 0157
-p 9,7,3 0 0160
-q 9,7,3 0 0161
-r 9,7 0 0162
-s 9,7 0 0163
-t 9,9 0 0164
-u 9,7 0 0165
-v 9,7 0 0166
-w 9,7 0 0167
-x 9,7 0 0170
-y 9,7,3 0 0171
-z 9,7 0 0172
-{ 9,9,2 0 0173
-lC "
-| 9,9,2 0 0174
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 9,1 0 0240
-r! 9,7,2 0 0241
-ct 9,9,1 0 0242
-Po 9,9 0 0243
-Cs 9,7 0 0244
-Ye 9,9 0 0245
-bb 9,9,2 0 0246
-sc 9,10,1 0 0247
-ad 9,10 0 0250
-co 9,9 0 0251
-Of 9,9 0 0252
-Fo 9,6 0 0253
-tno 9,5 0 0254
-- 9,5 0 0255
-hy "
-rg 9,9 0 0256
-a- 9,9 0 0257
-de 9,9 0 0260
-t+- 9,8 0 0261
-S2 9,10 0 0262
-S3 9,10 0 0263
-aa 9,9 0 0264
-mc 9,7,3 0 0265
-ps 9,10,1 0 0266
-pc 9,5 0 0267
-ac 9,1,3 0 0270
-S1 9,10 0 0271
-Om 9,9 0 0272
-Fc 9,6 0 0273
-14 9,10 0 0274
-12 9,10 0 0275
-34 9,10 0 0276
-r? 9,7,2 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,12 0 0304
-oA 9,12 0 0305
-AE 9,9 0 0306
-,C 9,9,4 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,12 0 0313
-`I 9,12 0 0314
-'I 9,12 0 0315
-^I 9,12 0 0316
-:I 9,12 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 9,8 0 0327
-/O 9,10 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,12 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 9,9 0 0337
-`a 9,10 0 0340
-'a 9,10 0 0341
-^a 9,10 0 0342
-~a 9,10 0 0343
-:a 9,10 0 0344
-oa 9,10 0 0345
-ae 9,7 0 0346
-,c 9,7,4 0 0347
-`e 9,10 0 0350
-'e 9,10 0 0351
-^e 9,10 0 0352
-:e 9,10 0 0353
-`i 9,10 0 0354
-'i 9,10 0 0355
-^i 9,10 0 0356
-:i 9,10 0 0357
-Sd 9,10 0 0360
-~n 9,10 0 0361
-`o 9,10 0 0362
-'o 9,10 0 0363
-^o 9,10 0 0364
-~o 9,10 0 0365
-:o 9,10 0 0366
-tdi 9,8 0 0367
-/o 9,7 0 0370
-`u 9,10 0 0371
-'u 9,10 0 0372
-^u 9,10 0 0373
-:u 9,10 0 0374
-'y 9,10,3 0 0375
-Tp 9,9,3 0 0376
-:y 9,10,3 0 0377
diff --git a/contrib/groff/font/devX100/CBI b/contrib/groff/font/devX100/CBI
deleted file mode 100644
index 82aae1731a0b..000000000000
--- a/contrib/groff/font/devX100/CBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CBI
-spacewidth 9
-charset
---- 9,9 0 00
---- 9,1 0 040
-! 9,10 0 041
-" 9,9 0 042
-dq "
-# 9,11,1 0 043
-sh "
-$ 9,11,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046
-' 9,9 0 047
-cq "
-( 9,9,2 0 050
-) 9,9,2 0 051
-* 9,10 0 052
-+ 9,8 0 053
-, 9,2,2 0 054
-\- 9,5 0 055
-. 9,2 0 056
-/ 9,10,2 0 057
-sl "
-0 9,10 0 060
-1 9,10 0 061
-2 9,10 0 062
-3 9,10 0 063
-4 9,10 0 064
-5 9,10 0 065
-6 9,10 0 066
-7 9,10 0 067
-8 9,10 0 070
-9 9,10 0 071
-: 9,7 0 072
-; 9,7,2 0 073
-< 9,8 0 074
-= 9,6 0 075
-> 9,8 0 076
-? 9,9 0 077
-@ 9,9 0 0100
-at "
-A 9,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 9,9 0 0111
-J 9,9 0 0112
-K 9,9 0 0113
-L 9,9 0 0114
-M 9,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 9,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 9,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 9,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 9,9,2 0 0133
-lB "
-\ 9,10,2 0 0134
-rs "
-] 9,9,2 0 0135
-rB "
-^ 9,9 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 9,9 0 0140
-oq "
-a 9,7 0 0141
-b 9,10 0 0142
-c 9,7 0 0143
-d 9,10 0 0144
-e 9,7 0 0145
-f 9,10 0 0146
-g 9,7,3 0 0147
-h 9,10 0 0150
-i 9,10 0 0151
-j 9,10,3 0 0152
-k 9,10 0 0153
-l 9,10 0 0154
-m 9,7 0 0155
-n 9,7 0 0156
-o 9,7 0 0157
-p 9,7,3 0 0160
-q 9,7,3 0 0161
-r 9,7 0 0162
-s 9,7 0 0163
-t 9,9 0 0164
-u 9,7 0 0165
-v 9,7 0 0166
-w 9,7 0 0167
-x 9,7 0 0170
-y 9,7,3 0 0171
-z 9,7 0 0172
-{ 9,9,2 0 0173
-lC "
-| 9,9,2 0 0174
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 9,1 0 0240
-r! 9,7,3 0 0241
-ct 9,9,1 0 0242
-Po 9,9 0 0243
-Cs 9,7 0 0244
-Ye 9,9 0 0245
-bb 9,10,2 0 0246
-sc 9,10,1 0 0247
-ad 9,10 0 0250
-co 9,9 0 0251
-Of 9,9 0 0252
-Fo 9,6 0 0253
-tno 9,6 0 0254
-- 9,5 0 0255
-hy "
-rg 9,9 0 0256
-a- 9,9 0 0257
-de 9,10 0 0260
-t+- 9,8 0 0261
-S2 9,10 0 0262
-S3 9,10 0 0263
-aa 9,10 0 0264
-mc 9,7,3 0 0265
-ps 9,10,1 0 0266
-pc 9,5 0 0267
-ac 9,1,3 0 0270
-S1 9,10 0 0271
-Om 9,9 0 0272
-Fc 9,6 0 0273
-14 9,10 0 0274
-12 9,10 0 0275
-34 9,10 0 0276
-r? 9,7,2 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,12 0 0304
-oA 9,12 0 0305
-AE 9,9 0 0306
-,C 9,9,4 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,12 0 0313
-`I 9,12 0 0314
-'I 9,12 0 0315
-^I 9,12 0 0316
-:I 9,12 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 9,8 0 0327
-/O 9,9 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,12 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 9,9 0 0337
-`a 9,10 0 0340
-'a 9,10 0 0341
-^a 9,10 0 0342
-~a 9,10 0 0343
-:a 9,10 0 0344
-oa 9,10 0 0345
-ae 9,7 0 0346
-,c 9,7,4 0 0347
-`e 9,10 0 0350
-'e 9,10 0 0351
-^e 9,10 0 0352
-:e 9,10 0 0353
-`i 9,10 0 0354
-'i 9,10 0 0355
-^i 9,10 0 0356
-:i 9,10 0 0357
-Sd 9,10 0 0360
-~n 9,10 0 0361
-`o 9,10 0 0362
-'o 9,10 0 0363
-^o 9,10 0 0364
-~o 9,10 0 0365
-:o 9,10 0 0366
-tdi 9,8 0 0367
-/o 9,8 0 0370
-`u 9,10 0 0371
-'u 9,10 0 0372
-^u 9,10 0 0373
-:u 9,10 0 0374
-'y 9,10,3 0 0375
-Tp 9,9,3 0 0376
-:y 9,10,3 0 0377
diff --git a/contrib/groff/font/devX100/CI b/contrib/groff/font/devX100/CI
deleted file mode 100644
index 206868503b1f..000000000000
--- a/contrib/groff/font/devX100/CI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CI
-spacewidth 9
-charset
---- 9,9 0 00
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042
-dq "
-# 9,10,1 0 043
-sh "
-$ 9,10,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046
-' 9,9 0 047
-cq "
-( 9,10,3 0 050
-) 9,10,3 0 051
-* 9,9 0 052
-+ 9,8 0 053
-, 9,2,2 0 054
-\- 9,5 0 055
-. 9,2 0 056
-/ 9,10,2 0 057
-sl "
-0 9,10 0 060
-1 9,10 0 061
-2 9,10 0 062
-3 9,10 0 063
-4 9,10 0 064
-5 9,10 0 065
-6 9,10 0 066
-7 9,10 0 067
-8 9,10 0 070
-9 9,10 0 071
-: 9,7 0 072
-; 9,7,2 0 073
-< 9,8 0 074
-= 9,6 0 075
-> 9,8 0 076
-? 9,9 0 077
-@ 9,9 0 0100
-at "
-A 9,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 9,9 0 0111
-J 9,9 0 0112
-K 9,9 0 0113
-L 9,9 0 0114
-M 9,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 9,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 9,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 9,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 9,10,3 0 0133
-lB "
-\ 9,10,2 0 0134
-rs "
-] 9,10,3 0 0135
-rB "
-^ 9,9 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 9,9 0 0140
-oq "
-a 9,7 0 0141
-b 9,10 0 0142
-c 9,7 0 0143
-d 9,10 0 0144
-e 9,7 0 0145
-f 9,10 0 0146
-g 9,7,3 0 0147
-h 9,10 0 0150
-i 9,10 0 0151
-j 9,10,3 0 0152
-k 9,10 0 0153
-l 9,10 0 0154
-m 9,7 0 0155
-n 9,7 0 0156
-o 9,7 0 0157
-p 9,7,3 0 0160
-q 9,7,3 0 0161
-r 9,7 0 0162
-s 9,7 0 0163
-t 9,9 0 0164
-u 9,7 0 0165
-v 9,7 0 0166
-w 9,7 0 0167
-x 9,7 0 0170
-y 9,7,3 0 0171
-z 9,7 0 0172
-{ 9,10,3 0 0173
-lC "
-| 9,9,2 0 0174
-ba "
-} 9,10,3 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ti "
---- 9,1 0 0240
-r! 9,7,2 0 0241
-ct 9,10 0 0242
-Po 9,9 0 0243
-Cs 9,7 0 0244
-Ye 9,9 0 0245
-bb 9,9,2 0 0246
-sc 9,9,1 0 0247
-ad 9,9 0 0250
-co 9,9 0 0251
-Of 9,9 0 0252
-Fo 9,7 0 0253
-tno 9,6 0 0254
-- 9,5 0 0255
-hy "
-rg 9,9 0 0256
-a- 9,9 0 0257
-de 9,10 0 0260
-t+- 9,8 0 0261
-S2 9,10 0 0262
-S3 9,10 0 0263
-aa 9,9 0 0264
-mc 9,7,3 0 0265
-ps 9,9,1 0 0266
-pc 9,5 0 0267
-ac 9,1,3 0 0270
-S1 9,10 0 0271
-Om 9,9 0 0272
-Fc 9,7 0 0273
-14 9,10 0 0274
-12 9,10 0 0275
-34 9,10 0 0276
-r? 9,7,2 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,11 0 0304
-oA 9,12 0 0305
-AE 9,9 0 0306
-,C 9,9,3 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,11 0 0313
-`I 9,12 0 0314
-'I 9,12 0 0315
-^I 9,12 0 0316
-:I 9,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,11 0 0326
-tmu 9,8 0 0327
-/O 9,9 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,11 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 9,9 0 0337
-`a 9,10 0 0340
-'a 9,10 0 0341
-^a 9,10 0 0342
-~a 9,10 0 0343
-:a 9,9 0 0344
-oa 9,11 0 0345
-ae 9,7 0 0346
-,c 9,7,3 0 0347
-`e 9,10 0 0350
-'e 9,10 0 0351
-^e 9,10 0 0352
-:e 9,9 0 0353
-`i 9,10 0 0354
-'i 9,10 0 0355
-^i 9,10 0 0356
-:i 9,9 0 0357
-Sd 9,10 0 0360
-~n 9,10 0 0361
-`o 9,10 0 0362
-'o 9,10 0 0363
-^o 9,10 0 0364
-~o 9,10 0 0365
-:o 9,9 0 0366
-tdi 9,8 0 0367
-/o 9,7 0 0370
-`u 9,10 0 0371
-'u 9,10 0 0372
-^u 9,10 0 0373
-:u 9,9 0 0374
-'y 9,10,3 0 0375
-Tp 9,9,3 0 0376
-:y 9,9,3 0 0377
diff --git a/contrib/groff/font/devX100/CR b/contrib/groff/font/devX100/CR
deleted file mode 100644
index 9c0ef0909cb5..000000000000
--- a/contrib/groff/font/devX100/CR
+++ /dev/null
@@ -1,213 +0,0 @@
-name CR
-spacewidth 9
-charset
---- 9,9 0 00
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042
-dq "
-# 9,9,1 0 043
-sh "
-$ 9,11,2 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046
-' 9,9 0 047
-cq "
-( 9,10,2 0 050
-) 9,10,2 0 051
-* 9,9 0 052
-+ 9,8 0 053
-, 9,2,2 0 054
-\- 9,5 0 055
-. 9,2 0 056
-/ 9,10,1 0 057
-sl "
-0 9,10 0 060
-1 9,10 0 061
-2 9,10 0 062
-3 9,10 0 063
-4 9,10 0 064
-5 9,10 0 065
-6 9,10 0 066
-7 9,10 0 067
-8 9,10 0 070
-9 9,10 0 071
-: 9,7 0 072
-; 9,7,2 0 073
-< 9,8 0 074
-= 9,6 0 075
-> 9,8 0 076
-? 9,9 0 077
-@ 9,9,1 0 0100
-at "
-A 9,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 9,9 0 0111
-J 9,9 0 0112
-K 9,9 0 0113
-L 9,9 0 0114
-M 9,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 9,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 9,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 9,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 9,10,2 0 0133
-lB "
-\ 9,10,1 0 0134
-rs "
-] 9,10,2 0 0135
-rB "
-^ 9,9 0 0136
-a^ "
-ha "
-_ 9,0,3 0 0137
-` 9,10 0 0140
-oq "
-a 9,7 0 0141
-b 9,10 0 0142
-c 9,7 0 0143
-d 9,10 0 0144
-e 9,7 0 0145
-f 9,10 0 0146
-g 9,7,3 0 0147
-h 9,10 0 0150
-i 9,10 0 0151
-j 9,10,3 0 0152
-k 9,10 0 0153
-l 9,10 0 0154
-m 9,7 0 0155
-n 9,7 0 0156
-o 9,7 0 0157
-p 9,7,3 0 0160
-q 9,7,3 0 0161
-r 9,7 0 0162
-s 9,7 0 0163
-t 9,9 0 0164
-u 9,7 0 0165
-v 9,7 0 0166
-w 9,7 0 0167
-x 9,7 0 0170
-y 9,7,3 0 0171
-z 9,7 0 0172
-{ 9,10,2 0 0173
-lC "
-| 9,9,2 0 0174
-ba "
-} 9,10,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ti "
---- 9,1 0 0240
-r! 9,7,2 0 0241
-ct 9,9 0 0242
-Po 9,9 0 0243
-Cs 9,7 0 0244
-Ye 9,9 0 0245
-bb 9,9,2 0 0246
-sc 9,9,1 0 0247
-ad 9,9 0 0250
-co 9,9 0 0251
-Of 9,9 0 0252
-Fo 9,7 0 0253
-tno 9,6 0 0254
-- 9,5 0 0255
-hy "
-rg 9,9 0 0256
-a- 9,9 0 0257
-de 9,10 0 0260
-t+- 9,8 0 0261
-S2 9,10 0 0262
-S3 9,10 0 0263
-aa 9,10 0 0264
-mc 9,7,3 0 0265
-ps 9,9,1 0 0266
-pc 9,5 0 0267
-ac 9,0,3 0 0270
-S1 9,10 0 0271
-Om 9,9 0 0272
-Fc 9,7 0 0273
-14 9,10 0 0274
-12 9,10 0 0275
-34 9,10 0 0276
-r? 9,7,2 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,11 0 0304
-oA 9,12 0 0305
-AE 9,9 0 0306
-,C 9,9,3 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,11 0 0313
-`I 9,12 0 0314
-'I 9,12 0 0315
-^I 9,12 0 0316
-:I 9,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,11 0 0326
-tmu 9,8 0 0327
-/O 9,9 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,11 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 9,9 0 0337
-`a 9,10 0 0340
-'a 9,10 0 0341
-^a 9,10 0 0342
-~a 9,10 0 0343
-:a 9,9 0 0344
-oa 9,10 0 0345
-ae 9,7 0 0346
-,c 9,7,3 0 0347
-`e 9,10 0 0350
-'e 9,10 0 0351
-^e 9,10 0 0352
-:e 9,9 0 0353
-`i 9,10 0 0354
-'i 9,10 0 0355
-^i 9,10 0 0356
-:i 9,9 0 0357
-Sd 9,12 0 0360
-~n 9,10 0 0361
-`o 9,10 0 0362
-'o 9,10 0 0363
-^o 9,10 0 0364
-~o 9,10 0 0365
-:o 9,9 0 0366
-tdi 9,8 0 0367
-/o 9,7 0 0370
-`u 9,10 0 0371
-'u 9,10 0 0372
-^u 9,10 0 0373
-:u 9,9 0 0374
-'y 9,10,3 0 0375
-Tp 9,9,3 0 0376
-:y 9,9,3 0 0377
diff --git a/contrib/groff/font/devX100/DESC b/contrib/groff/font/devX100/DESC
deleted file mode 100644
index 7f63535e0e65..000000000000
--- a/contrib/groff/font/devX100/DESC
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 100
-X11
-hor 1
-vert 1
-unitwidth 10
-postpro gxditview
diff --git a/contrib/groff/font/devX100/HB b/contrib/groff/font/devX100/HB
deleted file mode 100644
index e08449bfb4d7..000000000000
--- a/contrib/groff/font/devX100/HB
+++ /dev/null
@@ -1,213 +0,0 @@
-name HB
-spacewidth 4
-charset
---- 10,11 0 00
---- 4,1 0 040
-! 4,11 0 041
-" 7,11 0 042
-dq "
-# 9,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 13,11 0 045
-& 11,10 0 046
-' 4,11 0 047
-cq "
-( 5,11,3 0 050
-) 5,11,3 0 051
-* 6,11 0 052
-+ 9,8 0 053
-, 4,2,1 0 054
-\- 4,5 0 055
-. 4,2 0 056
-/ 4,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 5,8 0 072
-; 5,8,1 0 073
-< 8,7 0 074
-= 9,6 0 075
-> 8,7 0 076
-? 9,11 0 077
-@ 14,11,1 0 0100
-at "
-A 10,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 11,11 0 0104
-E 9,11 0 0105
-F 9,11 0 0106
-G 11,11 0 0107
-H 10,11 0 0110
-I 4,11 0 0111
-J 8,11 0 0112
-K 10,11 0 0113
-L 8,11 0 0114
-M 13,11 0 0115
-N 11,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11 0 0121
-R 11,11 0 0122
-S 10,11 0 0123
-T 8,11 0 0124
-U 11,11 0 0125
-V 10,11 0 0126
-W 14,11 0 0127
-X 9,11 0 0130
-Y 10,11 0 0131
-Z 9,11 0 0132
-[ 5,11,3 0 0133
-lB "
-\ 4,11 0 0134
-rs "
-] 5,11,3 0 0135
-rB "
-^ 8,11 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 5,11 0 0140
-oq "
-a 8,8 0 0141
-b 9,11 0 0142
-c 8,8 0 0143
-d 9,11 0 0144
-e 8,8 0 0145
-f 4,11 0 0146
-g 9,8,3 0 0147
-h 9,11 0 0150
-i 4,11 0 0151
-j 4,11,3 0 0152
-k 8,11 0 0153
-l 4,11 0 0154
-m 12,8 0 0155
-n 9,8 0 0156
-o 9,8 0 0157
-p 9,8,3 0 0160
-q 9,8,3 0 0161
-r 6,8 0 0162
-s 8,8 0 0163
-t 5,10 0 0164
-u 9,8 0 0165
-v 8,8 0 0166
-w 10,8 0 0167
-x 7,8 0 0170
-y 8,8,3 0 0171
-z 6,8 0 0172
-{ 6,11,3 0 0173
-lC "
-| 4,11,3 0 0174
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,8,3 0 0241
-ct 8,9,1 0 0242
-Po 8,11 0 0243
-Cs 8,9 0 0244
-Ye 9,11 0 0245
-bb 4,11,3 0 0246
-sc 8,11,3 0 0247
-ad 5,11 0 0250
-co 12,11 0 0251
-Of 6,11 0 0252
-Fo 9,7 0 0253
-tno 9,6 0 0254
-- 4,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 5,10 0 0257
-de 6,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 5,11 0 0264
-mc 9,8,3 0 0265
-ps 8,11,3 0 0266
-pc 4,5 0 0267
-ac 5,0,3 0 0270
-S1 4,11 0 0271
-Om 6,11 0 0272
-Fc 9,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 9,8,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,14 0 0303
-:A 10,14 0 0304
-oA 10,14 0 0305
-AE 15,11 0 0306
-,C 11,11,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,14 0 0313
-`I 4,14 0 0314
-'I 4,14 0 0315
-^I 4,14 0 0316
-:I 4,14 0 0317
--D 11,11 0 0320
-~N 11,14 0 0321
-`O 12,14 0 0322
-'O 12,14 0 0323
-^O 12,14 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 9,8 0 0327
-/O 12,11 0 0330
-`U 11,14 0 0331
-'U 11,14 0 0332
-^U 11,14 0 0333
-:U 11,14 0 0334
-'Y 10,14 0 0335
-TP 10,11 0 0336
-ss 8,11 0 0337
-`a 8,11 0 0340
-'a 8,11 0 0341
-^a 8,11 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,11 0 0345
-ae 13,8 0 0346
-,c 9,8,3 0 0347
-`e 8,11 0 0350
-'e 8,11 0 0351
-^e 8,11 0 0352
-:e 8,11 0 0353
-`i 4,11 0 0354
-'i 4,11 0 0355
-^i 4,11 0 0356
-:i 4,11 0 0357
-Sd 9,11 0 0360
-~n 9,11 0 0361
-`o 9,11 0 0362
-'o 9,11 0 0363
-^o 9,11 0 0364
-~o 9,11 0 0365
-:o 9,11 0 0366
-tdi 9,8 0 0367
-/o 9,8 0 0370
-`u 9,11 0 0371
-'u 9,11 0 0372
-^u 9,11 0 0373
-:u 9,11 0 0374
-'y 8,11,3 0 0375
-Tp 9,11,3 0 0376
-:y 8,11,3 0 0377
diff --git a/contrib/groff/font/devX100/HBI b/contrib/groff/font/devX100/HBI
deleted file mode 100644
index eee7804e5faf..000000000000
--- a/contrib/groff/font/devX100/HBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HBI
-spacewidth 4
-charset
---- 10,11 0 00
---- 4,1 0 040
-! 5,11 0 041
-" 7,11 0 042
-dq "
-# 10,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 11,10 0 046
-' 4,11 0 047
-cq "
-( 5,11,3 0 050
-) 6,11,3 0 051
-* 6,11 0 052
-+ 9,8 0 053
-, 4,2,2 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 4,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 5,8 0 072
-; 5,8,2 0 073
-< 8,7 0 074
-= 9,6 0 075
-> 9,7 0 076
-? 9,11 0 077
-@ 14,11,2 0 0100
-at "
-A 9,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 11,11 0 0104
-E 9,11 0 0105
-F 8,11 0 0106
-G 11,11 0 0107
-H 10,11 0 0110
-I 4,11 0 0111
-J 8,11 0 0112
-K 10,11 0 0113
-L 8,11 0 0114
-M 13,11 0 0115
-N 11,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11 0 0121
-R 10,11 0 0122
-S 10,11 0 0123
-T 8,11 0 0124
-U 11,11 0 0125
-V 10,11 0 0126
-W 14,11 0 0127
-X 9,11 0 0130
-Y 10,11 0 0131
-Z 9,11 0 0132
-[ 5,11,3 0 0133
-lB "
-\ 6,11 0 0134
-rs "
-] 5,11,3 0 0135
-rB "
-^ 8,11 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 5,11 0 0140
-oq "
-a 8,8 0 0141
-b 9,11 0 0142
-c 8,8 0 0143
-d 9,11 0 0144
-e 8,8 0 0145
-f 5,11 0 0146
-g 9,8,3 0 0147
-h 9,11 0 0150
-i 4,11 0 0151
-j 4,11,3 0 0152
-k 8,11 0 0153
-l 4,11 0 0154
-m 12,8 0 0155
-n 9,8 0 0156
-o 8,8 0 0157
-p 9,8,3 0 0160
-q 9,8,3 0 0161
-r 6,8 0 0162
-s 8,8 0 0163
-t 5,10 0 0164
-u 9,8 0 0165
-v 8,8 0 0166
-w 11,8 0 0167
-x 7,8 0 0170
-y 7,8,3 0 0171
-z 6,8 0 0172
-{ 6,11,3 0 0173
-lC "
-| 4,11,3 0 0174
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,8,3 0 0241
-ct 8,9,1 0 0242
-Po 9,11 0 0243
-Cs 9,8 0 0244
-Ye 9,11 0 0245
-bb 4,11,3 0 0246
-sc 9,11,3 0 0247
-ad 5,11 0 0250
-co 12,11 0 0251
-Of 6,11 0 0252
-Fo 11,7 0 0253
-tno 9,6 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 5,11 0 0257
-de 6,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 5,11 0 0264
-mc 9,8,3 0 0265
-ps 8,11,3 0 0266
-pc 4,5 0 0267
-ac 5,1,3 0 0270
-S1 5,11 0 0271
-Om 6,11 0 0272
-Fc 11,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 13,11 0 0276
-r? 8,8,3 0 0277
-`A 9,14 0 0300
-'A 9,14 0 0301
-^A 9,14 0 0302
-~A 9,14 0 0303
-:A 9,14 0 0304
-oA 9,14 0 0305
-AE 14,11 0 0306
-,C 11,11,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,14 0 0313
-`I 4,14 0 0314
-'I 4,14 0 0315
-^I 4,14 0 0316
-:I 4,14 0 0317
--D 11,11 0 0320
-~N 11,14 0 0321
-`O 12,14 0 0322
-'O 12,14 0 0323
-^O 12,14 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 9,8 0 0327
-/O 12,11 0 0330
-`U 11,14 0 0331
-'U 11,14 0 0332
-^U 11,14 0 0333
-:U 11,14 0 0334
-'Y 10,14 0 0335
-TP 10,11 0 0336
-ss 9,11 0 0337
-`a 8,11 0 0340
-'a 8,11 0 0341
-^a 8,11 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,11 0 0345
-ae 13,8 0 0346
-,c 8,8,3 0 0347
-`e 8,11 0 0350
-'e 8,11 0 0351
-^e 8,11 0 0352
-:e 8,11 0 0353
-`i 4,11 0 0354
-'i 4,11 0 0355
-^i 4,11 0 0356
-:i 4,11 0 0357
-Sd 8,11 0 0360
-~n 9,11 0 0361
-`o 8,11 0 0362
-'o 8,11 0 0363
-^o 8,11 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 9,8 0 0367
-/o 8,8 0 0370
-`u 9,11 0 0371
-'u 9,11 0 0372
-^u 9,11 0 0373
-:u 9,11 0 0374
-'y 7,11,3 0 0375
-Tp 9,11,3 0 0376
-:y 7,11,3 0 0377
diff --git a/contrib/groff/font/devX100/HI b/contrib/groff/font/devX100/HI
deleted file mode 100644
index 498612ab5956..000000000000
--- a/contrib/groff/font/devX100/HI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HI
-spacewidth 4
-charset
---- 11,11 0 00
---- 4,1 0 040
-! 4,11 0 041
-" 5,11 0 042
-dq "
-# 9,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 10,10 0 046
-' 3,11 0 047
-cq "
-( 5,11,3 0 050
-) 5,11,3 0 051
-* 8,11 0 052
-+ 9,8 0 053
-, 3,2,2 0 054
-\- 5,5 0 055
-. 3,2 0 056
-/ 4,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,8 0 072
-; 4,8,2 0 073
-< 9,7 0 074
-= 9,6 0 075
-> 9,7 0 076
-? 8,11 0 077
-@ 13,11,1 0 0100
-at "
-A 11,11 0 0101
-B 10,11 0 0102
-C 10,11 0 0103
-D 10,11 0 0104
-E 9,11 0 0105
-F 9,11 0 0106
-G 11,11 0 0107
-H 11,11 0 0110
-I 5,11 0 0111
-J 9,11 0 0112
-K 10,11 0 0113
-L 8,11 0 0114
-M 14,11 0 0115
-N 11,11 0 0116
-O 11,11 0 0117
-P 9,11 0 0120
-Q 11,11 0 0121
-R 10,11 0 0122
-S 9,11 0 0123
-T 8,11 0 0124
-U 11,11 0 0125
-V 11,11 0 0126
-W 14,11 0 0127
-X 10,11 0 0130
-Y 9,11 0 0131
-Z 9,11 0 0132
-[ 5,11,3 0 0133
-lB "
-\ 6,11 0 0134
-rs "
-] 5,11,3 0 0135
-rB "
-^ 7,11 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 4,11 0 0140
-oq "
-a 8,8 0 0141
-b 8,11 0 0142
-c 7,8 0 0143
-d 8,11 0 0144
-e 8,8 0 0145
-f 4,11 0 0146
-g 8,8,3 0 0147
-h 8,11 0 0150
-i 4,11 0 0151
-j 3,11,3 0 0152
-k 7,11 0 0153
-l 3,11 0 0154
-m 11,8 0 0155
-n 8,8 0 0156
-o 8,8 0 0157
-p 8,8,3 0 0160
-q 8,8,3 0 0161
-r 5,8 0 0162
-s 7,8 0 0163
-t 4,10 0 0164
-u 8,8 0 0165
-v 7,8 0 0166
-w 10,8 0 0167
-x 7,8 0 0170
-y 7,8,3 0 0171
-z 7,8 0 0172
-{ 5,11,3 0 0173
-lC "
-| 4,11,3 0 0174
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,8,3 0 0241
-ct 8,9,1 0 0242
-Po 9,11 0 0243
-Cs 8,8 0 0244
-Ye 9,11 0 0245
-bb 4,11,3 0 0246
-sc 8,11,3 0 0247
-ad 5,10 0 0250
-co 12,11 0 0251
-Of 5,11 0 0252
-Fo 8,6 0 0253
-tno 9,6 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 4,10 0 0257
-de 6,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 4,11 0 0264
-mc 8,8,3 0 0265
-ps 8,11,3 0 0266
-pc 4,5 0 0267
-ac 3,0,3 0 0270
-S1 5,11 0 0271
-Om 5,11 0 0272
-Fc 8,6 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 8,8,3 0 0277
-`A 11,14 0 0300
-'A 11,14 0 0301
-^A 11,14 0 0302
-~A 11,14 0 0303
-:A 11,13 0 0304
-oA 11,14 0 0305
-AE 15,11 0 0306
-,C 10,11,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,13 0 0313
-`I 5,14 0 0314
-'I 5,14 0 0315
-^I 5,14 0 0316
-:I 5,13 0 0317
--D 10,11 0 0320
-~N 11,14 0 0321
-`O 11,14 0 0322
-'O 11,14 0 0323
-^O 11,14 0 0324
-~O 11,14 0 0325
-:O 11,13 0 0326
-tmu 9,8 0 0327
-/O 11,11 0 0330
-`U 11,14 0 0331
-'U 11,14 0 0332
-^U 11,14 0 0333
-:U 11,13 0 0334
-'Y 9,14 0 0335
-TP 9,11 0 0336
-ss 8,11 0 0337
-`a 8,11 0 0340
-'a 8,11 0 0341
-^a 8,11 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,11 0 0345
-ae 12,8 0 0346
-,c 7,8,3 0 0347
-`e 8,11 0 0350
-'e 8,11 0 0351
-^e 8,11 0 0352
-:e 8,11 0 0353
-`i 3,11 0 0354
-'i 3,11 0 0355
-^i 3,11 0 0356
-:i 3,11 0 0357
-Sd 8,11 0 0360
-~n 8,11 0 0361
-`o 8,11 0 0362
-'o 8,11 0 0363
-^o 8,11 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 9,8 0 0367
-/o 8,9,1 0 0370
-`u 8,11 0 0371
-'u 8,11 0 0372
-^u 8,11 0 0373
-:u 8,11 0 0374
-'y 7,11,3 0 0375
-Tp 8,11,3 0 0376
-:y 7,11,3 0 0377
diff --git a/contrib/groff/font/devX100/HR b/contrib/groff/font/devX100/HR
deleted file mode 100644
index 1b6aa8407db5..000000000000
--- a/contrib/groff/font/devX100/HR
+++ /dev/null
@@ -1,213 +0,0 @@
-name HR
-spacewidth 4
-charset
---- 10,11 0 00
---- 4,1 0 040
-! 4,11 0 041
-" 5,11 0 042
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 10,10 0 046
-' 3,11 0 047
-cq "
-( 5,11,3 0 050
-) 5,11,3 0 051
-* 7,11 0 052
-+ 9,8 0 053
-, 3,2,2 0 054
-\- 4,5 0 055
-. 3,2 0 056
-/ 4,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 3,8 0 072
-; 4,8,2 0 073
-< 8,7 0 074
-= 9,6 0 075
-> 8,7 0 076
-? 8,11 0 077
-@ 13,11,1 0 0100
-at "
-A 9,11 0 0101
-B 9,11 0 0102
-C 10,11 0 0103
-D 10,11 0 0104
-E 9,11 0 0105
-F 8,11 0 0106
-G 11,11 0 0107
-H 10,11 0 0110
-I 4,11 0 0111
-J 7,11 0 0112
-K 9,11 0 0113
-L 8,11 0 0114
-M 12,11 0 0115
-N 10,11 0 0116
-O 11,11 0 0117
-P 9,11 0 0120
-Q 11,11 0 0121
-R 10,11 0 0122
-S 9,11 0 0123
-T 9,11 0 0124
-U 10,11 0 0125
-V 9,11 0 0126
-W 13,11 0 0127
-X 9,11 0 0130
-Y 9,11 0 0131
-Z 9,11 0 0132
-[ 4,11,3 0 0133
-lB "
-\ 4,11 0 0134
-rs "
-] 4,11,3 0 0135
-rB "
-^ 7,11 0 0136
-a^ "
-ha "
-_ 8,0,3 0 0137
-` 5,11 0 0140
-oq "
-a 8,8 0 0141
-b 7,11 0 0142
-c 7,8 0 0143
-d 8,11 0 0144
-e 8,8 0 0145
-f 4,11 0 0146
-g 8,8,3 0 0147
-h 8,11 0 0150
-i 3,11 0 0151
-j 3,11,3 0 0152
-k 7,11 0 0153
-l 3,11 0 0154
-m 11,8 0 0155
-n 8,8 0 0156
-o 8,8 0 0157
-p 8,8,3 0 0160
-q 8,8,3 0 0161
-r 5,8 0 0162
-s 7,8 0 0163
-t 4,10 0 0164
-u 7,8 0 0165
-v 7,8 0 0166
-w 10,8 0 0167
-x 7,8 0 0170
-y 7,8,3 0 0171
-z 7,8 0 0172
-{ 5,11,3 0 0173
-lC "
-| 3,11,3 0 0174
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,8,3 0 0241
-ct 8,9,1 0 0242
-Po 8,11 0 0243
-Cs 8,8 0 0244
-Ye 7,11 0 0245
-bb 3,11,3 0 0246
-sc 8,11,3 0 0247
-ad 5,10 0 0250
-co 12,11 0 0251
-Of 6,11 0 0252
-Fo 8,7 0 0253
-tno 9,6 0 0254
-- 4,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 4,10 0 0257
-de 6,11 0 0260
-t+- 9,9 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 5,11 0 0264
-mc 8,8,3 0 0265
-ps 8,11,3 0 0266
-pc 4,5 0 0267
-ac 5,0,3 0 0270
-S1 5,11 0 0271
-Om 6,11 0 0272
-Fc 8,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 8,8,3 0 0277
-`A 9,14 0 0300
-'A 9,14 0 0301
-^A 9,14 0 0302
-~A 9,14 0 0303
-:A 9,13 0 0304
-oA 9,14 0 0305
-AE 14,11 0 0306
-,C 10,11,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,13 0 0313
-`I 4,14 0 0314
-'I 4,14 0 0315
-^I 4,14 0 0316
-:I 4,13 0 0317
--D 10,11 0 0320
-~N 10,14 0 0321
-`O 11,14 0 0322
-'O 11,14 0 0323
-^O 11,14 0 0324
-~O 11,14 0 0325
-:O 11,13 0 0326
-tmu 9,8 0 0327
-/O 11,11 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 9,14 0 0335
-TP 9,11 0 0336
-ss 7,11 0 0337
-`a 8,11 0 0340
-'a 8,11 0 0341
-^a 8,11 0 0342
-~a 8,11 0 0343
-:a 8,11 0 0344
-oa 8,12 0 0345
-ae 13,8 0 0346
-,c 8,8,3 0 0347
-`e 8,11 0 0350
-'e 8,11 0 0351
-^e 8,11 0 0352
-:e 8,11 0 0353
-`i 3,11 0 0354
-'i 3,11 0 0355
-^i 3,11 0 0356
-:i 3,11 0 0357
-Sd 8,11 0 0360
-~n 8,11 0 0361
-`o 8,11 0 0362
-'o 8,11 0 0363
-^o 8,11 0 0364
-~o 8,11 0 0365
-:o 8,11 0 0366
-tdi 9,8 0 0367
-/o 8,8 0 0370
-`u 8,11 0 0371
-'u 8,11 0 0372
-^u 8,11 0 0373
-:u 8,11 0 0374
-'y 7,11,3 0 0375
-Tp 8,11,3 0 0376
-:y 7,11,3 0 0377
diff --git a/contrib/groff/font/devX100/Makefile.sub b/contrib/groff/font/devX100/Makefile.sub
deleted file mode 100644
index 4d40f0fd5dec..000000000000
--- a/contrib/groff/font/devX100/Makefile.sub
+++ /dev/null
@@ -1,2 +0,0 @@
-DEV=X100
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
diff --git a/contrib/groff/font/devX100/NB b/contrib/groff/font/devX100/NB
deleted file mode 100644
index ccb4bc0ad4a6..000000000000
--- a/contrib/groff/font/devX100/NB
+++ /dev/null
@@ -1,213 +0,0 @@
-name NB
-spacewidth 4
-charset
---- 12,11 0 00
---- 4,1 0 040
-! 4,11 0 041
-" 5,11 0 042
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 13,11 0 046
-' 3,11 0 047
-cq "
-( 5,11,2 0 050
-) 5,11,2 0 051
-* 6,11 0 052
-+ 8,8 0 053
-, 4,3,2 0 054
-\- 5,5 0 055
-. 4,3 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 8,8 0 074
-= 8,6 0 075
-> 8,8 0 076
-? 7,11 0 077
-@ 14,11 0 0100
-at "
-A 11,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 12,11 0 0104
-E 10,11 0 0105
-F 10,11 0 0106
-G 12,11 0 0107
-H 12,11 0 0110
-I 7,11 0 0111
-J 9,11 0 0112
-K 12,11 0 0113
-L 10,11 0 0114
-M 14,11 0 0115
-N 12,11 0 0116
-O 12,11 0 0117
-P 10,11 0 0120
-Q 12,11,3 0 0121
-R 12,11 0 0122
-S 10,11 0 0123
-T 11,11 0 0124
-U 12,11 0 0125
-V 11,11 0 0126
-W 14,11 0 0127
-X 12,11 0 0130
-Y 11,11 0 0131
-Z 9,11 0 0132
-[ 5,11,2 0 0133
-lB "
-\ 7,11 0 0134
-rs "
-] 5,11,2 0 0135
-rB "
-^ 8,11 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 6,11 0 0140
-oq "
-a 9,7 0 0141
-b 10,11 0 0142
-c 8,7 0 0143
-d 10,11 0 0144
-e 9,7 0 0145
-f 6,11 0 0146
-g 8,8,3 0 0147
-h 10,11 0 0150
-i 5,10 0 0151
-j 5,10,3 0 0152
-k 9,11 0 0153
-l 5,11 0 0154
-m 15,7 0 0155
-n 10,7 0 0156
-o 9,7 0 0157
-p 10,7,3 0 0160
-q 9,7,3 0 0161
-r 7,7 0 0162
-s 7,7 0 0163
-t 6,10 0 0164
-u 10,7 0 0165
-v 7,7 0 0166
-w 12,7 0 0167
-x 9,7 0 0170
-y 7,7,3 0 0171
-z 7,7 0 0172
-{ 6,11,2 0 0173
-lC "
-| 8,11 0 0174
-ba "
-} 6,11,2 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,8,3 0 0241
-ct 8,8,1 0 0242
-Po 9,11 0 0243
-Cs 9,10 0 0244
-Ye 11,11 0 0245
-bb 8,11 0 0246
-sc 7,11,2 0 0247
-ad 7,10 0 0250
-co 12,11 0 0251
-Of 6,11 0 0252
-Fo 8,6 0 0253
-tno 8,6 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 7,9 0 0257
-de 6,11 0 0260
-t+- 8,8 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 6,11 0 0264
-mc 10,7,3 0 0265
-ps 10,11 0 0266
-pc 5,6 0 0267
-ac 5,0,3 0 0270
-S1 5,11 0 0271
-Om 6,11 0 0272
-Fc 8,6 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 7,8,3 0 0277
-`A 11,15 0 0300
-'A 11,15 0 0301
-^A 11,15 0 0302
-~A 11,14 0 0303
-:A 11,14 0 0304
-oA 11,15 0 0305
-AE 15,11 0 0306
-,C 11,11,3 0 0307
-`E 10,15 0 0310
-'E 10,15 0 0311
-^E 10,15 0 0312
-:E 10,14 0 0313
-`I 7,15 0 0314
-'I 7,15 0 0315
-^I 7,15 0 0316
-:I 7,14 0 0317
--D 12,11 0 0320
-~N 12,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 8,8 0 0327
-/O 12,11 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 11,15 0 0335
-TP 10,11 0 0336
-ss 9,11 0 0337
-`a 9,11 0 0340
-'a 9,11 0 0341
-^a 9,11 0 0342
-~a 9,10 0 0343
-:a 9,10 0 0344
-oa 9,11 0 0345
-ae 14,7 0 0346
-,c 8,7,3 0 0347
-`e 9,11 0 0350
-'e 9,11 0 0351
-^e 9,11 0 0352
-:e 9,10 0 0353
-`i 5,11 0 0354
-'i 5,11 0 0355
-^i 5,11 0 0356
-:i 5,10 0 0357
-Sd 9,11 0 0360
-~n 10,10 0 0361
-`o 9,11 0 0362
-'o 9,11 0 0363
-^o 9,11 0 0364
-~o 9,10 0 0365
-:o 9,10 0 0366
-tdi 8,8 0 0367
-/o 9,8,1 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 7,11,3 0 0375
-Tp 10,11,3 0 0376
-:y 7,10,3 0 0377
diff --git a/contrib/groff/font/devX100/NBI b/contrib/groff/font/devX100/NBI
deleted file mode 100644
index 954457aefa8a..000000000000
--- a/contrib/groff/font/devX100/NBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 12,11 0 00
---- 4,1 0 040
-! 5,11 0 041
-" 6,11 0 042
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11,1 0 045
-& 13,11 0 046
-' 4,11 0 047
-cq "
-( 5,11,2 0 050
-) 6,11,2 0 051
-* 7,11 0 052
-+ 8,8 0 053
-, 4,2,3 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,7 0 072
-; 5,7,3 0 073
-< 9,9 0 074
-= 9,7 0 075
-> 9,9 0 076
-? 7,11 0 077
-@ 13,11 0 0100
-at "
-A 11,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 12,11 0 0104
-E 10,11 0 0105
-F 10,11 0 0106
-G 11,11 0 0107
-H 12,11 0 0110
-I 6,11 0 0111
-J 8,11 0 0112
-K 12,11 0 0113
-L 10,11 0 0114
-M 15,11 0 0115
-N 13,11 0 0116
-O 12,11 0 0117
-P 11,11 0 0120
-Q 12,11,2 0 0121
-R 12,11 0 0122
-S 10,11 0 0123
-T 11,11 0 0124
-U 12,11 0 0125
-V 11,11 0 0126
-W 15,11 0 0127
-X 11,11 0 0130
-Y 9,11 0 0131
-Z 10,11 0 0132
-[ 7,11,2 0 0133
-lB "
-\ 9,11 0 0134
-rs "
-] 7,11,2 0 0135
-rB "
-^ 8,11 0 0136
-a^ "
-ha "
-_ 9,0,2 0 0137
-` 5,11 0 0140
-oq "
-a 10,7 0 0141
-b 8,11 0 0142
-c 8,7 0 0143
-d 10,11 0 0144
-e 8,7 0 0145
-f 5,11,3 0 0146
-g 8,9,3 0 0147
-h 10,11 0 0150
-i 5,10 0 0151
-j 4,10,3 0 0152
-k 9,11 0 0153
-l 5,11 0 0154
-m 15,7 0 0155
-n 10,7 0 0156
-o 8,7 0 0157
-p 8,7,3 0 0160
-q 9,7,3 0 0161
-r 7,7 0 0162
-s 8,7 0 0163
-t 5,9 0 0164
-u 10,7 0 0165
-v 8,7 0 0166
-w 13,7 0 0167
-x 9,7 0 0170
-y 9,7,3 0 0171
-z 9,7 0 0172
-{ 6,11,2 0 0173
-lC "
-| 9,11 0 0174
-ba "
-} 6,11,2 0 0175
-rC "
-~ 11,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,8,3 0 0241
-ct 8,8,1 0 0242
-Po 10,11 0 0243
-Cs 8,9 0 0244
-Ye 10,11 0 0245
-bb 8,11 0 0246
-sc 9,11,2 0 0247
-ad 6,10 0 0250
-co 12,11 0 0251
-Of 8,11 0 0252
-Fo 10,7 0 0253
-tno 9,7 0 0254
-- 5,5 0 0255
-hy "
-rg 12,11 0 0256
-a- 6,9 0 0257
-de 6,11 0 0260
-t+- 8,8 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 5,11 0 0264
-mc 10,7,3 0 0265
-ps 9,11 0 0266
-pc 5,6 0 0267
-ac 5,0,3 0 0270
-S1 5,11 0 0271
-Om 8,11 0 0272
-Fc 10,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 7,8,3 0 0277
-`A 11,15 0 0300
-'A 11,15 0 0301
-^A 11,15 0 0302
-~A 11,14 0 0303
-:A 11,14 0 0304
-oA 11,15 0 0305
-AE 14,11 0 0306
-,C 11,11,3 0 0307
-`E 10,15 0 0310
-'E 10,15 0 0311
-^E 10,15 0 0312
-:E 10,14 0 0313
-`I 6,15 0 0314
-'I 6,15 0 0315
-^I 6,15 0 0316
-:I 6,14 0 0317
--D 12,11 0 0320
-~N 13,14 0 0321
-`O 12,15 0 0322
-'O 12,15 0 0323
-^O 12,15 0 0324
-~O 12,14 0 0325
-:O 12,14 0 0326
-tmu 8,8 0 0327
-/O 12,11 0 0330
-`U 12,15 0 0331
-'U 12,15 0 0332
-^U 12,15 0 0333
-:U 12,14 0 0334
-'Y 9,15 0 0335
-TP 11,11 0 0336
-ss 10,11,3 0 0337
-`a 10,11 0 0340
-'a 10,11 0 0341
-^a 10,11 0 0342
-~a 10,10 0 0343
-:a 10,10 0 0344
-oa 10,11 0 0345
-ae 13,7 0 0346
-,c 8,7,3 0 0347
-`e 8,11 0 0350
-'e 8,11 0 0351
-^e 8,11 0 0352
-:e 8,10 0 0353
-`i 5,11 0 0354
-'i 5,11 0 0355
-^i 5,11 0 0356
-:i 5,10 0 0357
-Sd 8,11 0 0360
-~n 10,10 0 0361
-`o 8,11 0 0362
-'o 8,11 0 0363
-^o 8,11 0 0364
-~o 8,10 0 0365
-:o 8,10 0 0366
-tdi 8,8 0 0367
-/o 8,7 0 0370
-`u 10,11 0 0371
-'u 10,11 0 0372
-^u 10,11 0 0373
-:u 10,10 0 0374
-'y 9,11,3 0 0375
-Tp 8,11,3 0 0376
-:y 9,10,3 0 0377
diff --git a/contrib/groff/font/devX100/NI b/contrib/groff/font/devX100/NI
deleted file mode 100644
index 72cdad31ec10..000000000000
--- a/contrib/groff/font/devX100/NI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NI
-spacewidth 4
-charset
---- 11,11 0 00
---- 4,1 0 040
-! 5,11 0 041
-" 6,11 0 042
-dq "
-# 11,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 12,11,1 0 045
-& 11,11 0 046
-' 4,11 0 047
-cq "
-( 5,11,2 0 050
-) 5,11,2 0 051
-* 6,11 0 052
-+ 8,8 0 053
-, 4,2,2 0 054
-\- 5,5 0 055
-. 4,2 0 056
-/ 9,11,3 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 9,8 0 074
-= 8,6 0 075
-> 9,8 0 076
-? 6,11 0 077
-@ 12,11 0 0100
-at "
-A 11,11 0 0101
-B 9,11 0 0102
-C 10,11 0 0103
-D 11,11 0 0104
-E 9,11 0 0105
-F 8,11 0 0106
-G 10,11 0 0107
-H 11,11 0 0110
-I 7,11 0 0111
-J 8,11 0 0112
-K 10,11 0 0113
-L 9,11 0 0114
-M 14,11 0 0115
-N 12,11 0 0116
-O 10,11 0 0117
-P 10,11 0 0120
-Q 10,11,2 0 0121
-R 11,11 0 0122
-S 10,11 0 0123
-T 10,11 0 0124
-U 12,11 0 0125
-V 10,11 0 0126
-W 13,11 0 0127
-X 10,11 0 0130
-Y 9,11 0 0131
-Z 10,11 0 0132
-[ 6,11,2 0 0133
-lB "
-\ 8,11 0 0134
-rs "
-] 6,11,2 0 0135
-rB "
-^ 6,11 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 4,11 0 0140
-oq "
-a 9,7 0 0141
-b 7,11 0 0142
-c 6,7 0 0143
-d 9,11 0 0144
-e 6,7 0 0145
-f 5,11,3 0 0146
-g 7,8,3 0 0147
-h 9,11 0 0150
-i 4,11 0 0151
-j 4,11,3 0 0152
-k 8,11 0 0153
-l 4,11 0 0154
-m 14,7 0 0155
-n 9,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 8,7,3 0 0161
-r 7,7 0 0162
-s 7,7 0 0163
-t 5,9 0 0164
-u 9,7 0 0165
-v 7,7 0 0166
-w 11,7 0 0167
-x 8,7 0 0170
-y 7,7,3 0 0171
-z 8,7 0 0172
-{ 6,11,2 0 0173
-lC "
-| 9,11 0 0174
-ba "
-} 6,11,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,8,3 0 0241
-ct 8,9,2 0 0242
-Po 9,11 0 0243
-Cs 8,9 0 0244
-Ye 9,11 0 0245
-bb 8,11 0 0246
-sc 7,11,2 0 0247
-ad 7,10 0 0250
-co 13,11 0 0251
-Of 6,11 0 0252
-Fo 8,7 0 0253
-tno 8,6 0 0254
-- 5,5 0 0255
-hy "
-rg 13,11 0 0256
-a- 6,9 0 0257
-de 6,11 0 0260
-t+- 8,8 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 4,11 0 0264
-mc 9,7,3 0 0265
-ps 9,11 0 0266
-pc 5,6 0 0267
-ac 5,0,3 0 0270
-S1 5,11 0 0271
-Om 6,11 0 0272
-Fc 8,7 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 6,8,3 0 0277
-`A 11,14 0 0300
-'A 11,14 0 0301
-^A 11,14 0 0302
-~A 11,14 0 0303
-:A 11,14 0 0304
-oA 11,14 0 0305
-AE 14,11 0 0306
-,C 10,11,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,14 0 0313
-`I 7,14 0 0314
-'I 7,14 0 0315
-^I 7,14 0 0316
-:I 7,14 0 0317
--D 11,11 0 0320
-~N 12,14 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,14 0 0325
-:O 10,14 0 0326
-tmu 8,8 0 0327
-/O 10,11 0 0330
-`U 12,14 0 0331
-'U 12,14 0 0332
-^U 12,14 0 0333
-:U 12,14 0 0334
-'Y 9,14 0 0335
-TP 10,11 0 0336
-ss 8,11,3 0 0337
-`a 9,11 0 0340
-'a 9,11 0 0341
-^a 9,11 0 0342
-~a 9,10 0 0343
-:a 9,10 0 0344
-oa 9,11 0 0345
-ae 10,7 0 0346
-,c 6,7,3 0 0347
-`e 6,11 0 0350
-'e 6,11 0 0351
-^e 6,11 0 0352
-:e 6,10 0 0353
-`i 4,11 0 0354
-'i 4,11 0 0355
-^i 4,11 0 0356
-:i 4,10 0 0357
-Sd 7,11 0 0360
-~n 9,10 0 0361
-`o 7,11 0 0362
-'o 7,11 0 0363
-^o 7,11 0 0364
-~o 7,10 0 0365
-:o 7,10 0 0366
-tdi 8,8 0 0367
-/o 7,8,1 0 0370
-`u 9,11 0 0371
-'u 9,11 0 0372
-^u 9,11 0 0373
-:u 9,10 0 0374
-'y 7,11,3 0 0375
-Tp 7,11,3 0 0376
-:y 7,10,3 0 0377
diff --git a/contrib/groff/font/devX100/NR b/contrib/groff/font/devX100/NR
deleted file mode 100644
index 8b6b3f06fbff..000000000000
--- a/contrib/groff/font/devX100/NR
+++ /dev/null
@@ -1,213 +0,0 @@
-name NR
-spacewidth 4
-charset
---- 12,11 0 00
---- 4,1 0 040
-! 3,11 0 041
-" 5,11 0 042
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 13,11 0 046
-' 3,11 0 047
-cq "
-( 5,11,2 0 050
-) 6,11,2 0 051
-* 7,11 0 052
-+ 9,7 0 053
-, 4,2,2 0 054
-\- 5,4 0 055
-. 4,2 0 056
-/ 4,11 0 057
-sl "
-0 8,11 0 060
-1 8,11 0 061
-2 8,11 0 062
-3 8,11 0 063
-4 8,11 0 064
-5 8,11 0 065
-6 8,11 0 066
-7 8,11 0 067
-8 8,11 0 070
-9 8,11 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 10,7 0 074
-= 9,6 0 075
-> 10,7 0 076
-? 6,11 0 077
-@ 13,11 0 0100
-at "
-A 10,11 0 0101
-B 10,11 0 0102
-C 11,11 0 0103
-D 11,11 0 0104
-E 10,11 0 0105
-F 10,11 0 0106
-G 11,11 0 0107
-H 12,11 0 0110
-I 6,11 0 0111
-J 7,11 0 0112
-K 11,11 0 0113
-L 10,11 0 0114
-M 16,11 0 0115
-N 13,11 0 0116
-O 11,11 0 0117
-P 10,11 0 0120
-Q 11,11,2 0 0121
-R 11,11 0 0122
-S 8,11 0 0123
-T 10,11 0 0124
-U 13,11 0 0125
-V 10,11 0 0126
-W 16,11 0 0127
-X 13,11 0 0130
-Y 10,11 0 0131
-Z 9,11 0 0132
-[ 4,11,2 0 0133
-lB "
-\ 8,11 0 0134
-rs "
-] 4,11,2 0 0135
-rB "
-^ 7,11 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 5,11 0 0140
-oq "
-a 8,7 0 0141
-b 7,11 0 0142
-c 7,7 0 0143
-d 8,11 0 0144
-e 7,7 0 0145
-f 5,11 0 0146
-g 8,7,3 0 0147
-h 9,11 0 0150
-i 4,10 0 0151
-j 4,10,3 0 0152
-k 9,11 0 0153
-l 4,11 0 0154
-m 14,7 0 0155
-n 9,7 0 0156
-o 7,7 0 0157
-p 8,7,3 0 0160
-q 7,7,3 0 0161
-r 7,7 0 0162
-s 6,7 0 0163
-t 5,9 0 0164
-u 9,7 0 0165
-v 8,7 0 0166
-w 12,7 0 0167
-x 8,7 0 0170
-y 8,7,3 0 0171
-z 7,7 0 0172
-{ 4,11,2 0 0173
-lC "
-| 9,11 0 0174
-ba "
-} 5,11,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,8,3 0 0241
-ct 8,9,2 0 0242
-Po 8,11 0 0243
-Cs 8,9 0 0244
-Ye 8,11 0 0245
-bb 9,11 0 0246
-sc 7,11,2 0 0247
-ad 6,10 0 0250
-co 14,11 0 0251
-Of 6,11 0 0252
-Fo 7,6 0 0253
-tno 9,5 0 0254
-- 5,4 0 0255
-hy "
-rg 14,11 0 0256
-a- 5,9 0 0257
-de 6,11 0 0260
-t+- 9,7 0 0261
-S2 5,11 0 0262
-S3 5,11 0 0263
-aa 5,11 0 0264
-mc 9,7,3 0 0265
-ps 9,11,2 0 0266
-pc 4,5 0 0267
-ac 5,1,3 0 0270
-S1 5,11 0 0271
-Om 5,11 0 0272
-Fc 7,6 0 0273
-14 12,11 0 0274
-12 12,11 0 0275
-34 12,11 0 0276
-r? 6,8,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,14 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 15,11 0 0306
-,C 11,11,3 0 0307
-`E 10,14 0 0310
-'E 10,14 0 0311
-^E 10,14 0 0312
-:E 10,14 0 0313
-`I 6,14 0 0314
-'I 6,14 0 0315
-^I 6,14 0 0316
-:I 6,14 0 0317
--D 11,11 0 0320
-~N 13,14 0 0321
-`O 11,14 0 0322
-'O 11,14 0 0323
-^O 11,14 0 0324
-~O 11,14 0 0325
-:O 11,14 0 0326
-tmu 9,7 0 0327
-/O 11,11 0 0330
-`U 13,14 0 0331
-'U 13,14 0 0332
-^U 13,14 0 0333
-:U 13,14 0 0334
-'Y 10,14 0 0335
-TP 10,11 0 0336
-ss 8,11 0 0337
-`a 8,11 0 0340
-'a 8,11 0 0341
-^a 8,11 0 0342
-~a 8,10 0 0343
-:a 8,10 0 0344
-oa 8,11 0 0345
-ae 12,7 0 0346
-,c 7,7,3 0 0347
-`e 7,11 0 0350
-'e 7,11 0 0351
-^e 7,11 0 0352
-:e 7,10 0 0353
-`i 4,11 0 0354
-'i 4,11 0 0355
-^i 4,11 0 0356
-:i 4,10 0 0357
-Sd 7,11 0 0360
-~n 9,10 0 0361
-`o 7,11 0 0362
-'o 7,11 0 0363
-^o 7,11 0 0364
-~o 7,10 0 0365
-:o 7,10 0 0366
-tdi 9,7 0 0367
-/o 7,8,1 0 0370
-`u 9,11 0 0371
-'u 9,11 0 0372
-^u 9,11 0 0373
-:u 9,10 0 0374
-'y 8,11,3 0 0375
-Tp 8,11,3 0 0376
-:y 8,10,3 0 0377
diff --git a/contrib/groff/font/devX100/S b/contrib/groff/font/devX100/S
deleted file mode 100644
index ebf37c984d96..000000000000
--- a/contrib/groff/font/devX100/S
+++ /dev/null
@@ -1,221 +0,0 @@
-name S
-special
-spacewidth 4
-charset
---- 4,1 0 040
-! 5,10 0 041
-fa 9,10 0 042
-# 7,10 0 043
-sh "
-te 8,10 0 044
-% 12,10 0 045
-& 11,10 0 046
-st 6,7 0 047
-( 5,10,3 0 050
-) 5,10,3 0 051
-** 7,8 0 052
-+ 8,7 0 053
-pl "
-, 3,2,2 0 054
-\- 8,4 0 055
-mi "
-. 3,2 0 056
-/ 4,10 0 057
-sl "
-0 7,10 0 060
-1 7,10 0 061
-2 7,10 0 062
-3 7,10 0 063
-4 7,10 0 064
-5 7,10 0 065
-6 7,10 0 066
-7 7,10 0 067
-8 7,10 0 070
-9 7,10 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 8,7 0 074
-= 8,5 0 075
-eq "
-> 8,7 0 076
-? 6,10 0 077
-=~ 8,7 0 0100
-*A 11,10 0 0101
-*B 9,10 0 0102
-*X 11,10 0 0103
-*D 9,10 0 0104
-*E 9,10 0 0105
-*F 11,10 0 0106
-*G 9,10 0 0107
-*Y 11,10 0 0110
-*I 5,10 0 0111
-+h 9,10 0 0112
-*K 10,10 0 0113
-*L 10,10 0 0114
-*M 13,10 0 0115
-*N 11,10 0 0116
-*O 10,10 0 0117
-*P 11,10 0 0120
-*H 10,10 0 0121
-*R 8,10 0 0122
-*S 9,10 0 0123
-*T 9,10 0 0124
---- 9,10 0 0125
-ts 7,7,3 0 0126
-*W 11,10 0 0127
-*C 9,10 0 0130
-*Q 11,10 0 0131
-*Z 9,10 0 0132
-[ 5,10,3 0 0133
-lB "
-tf 10,7 0 0134
-3d "
-] 5,10,3 0 0135
-rB "
-pp 10,10 0 0136
-_ 7,0,3 0 0137
-radicalex 7,12 0 0140
-*a 9,7 0 0141
-*b 8,11,3 0 0142
-*x 8,7,3 0 0143
-*d 7,11 0 0144
-*e 6,7 0 0145
-*f 9,10,3 0 0146
-*g 6,7,3 0 0147
-*y 8,7,3 0 0150
-*i 5,7 0 0151
-+f 9,7,3 0 0152
-*k 8,7 0 0153
-*l 8,10 0 0154
-*m 8,7,2 0 0155
-*n 8,7 0 0156
-*o 8,7 0 0157
-*p 8,7 0 0160
-*h 7,10 0 0161
-*r 8,7,3 0 0162
-*s 8,7 0 0163
-*t 6,7 0 0164
-*u 8,7 0 0165
-+p 11,8 0 0166
-*w 11,7 0 0167
-*c 7,12,3 0 0170
-*q 9,7,3 0 0171
-*z 7,11,3 0 0172
-lC 7,10,3 0 0173
-{ "
-ba 3,10,3 0 0174
-| "
-rC 7,10,3 0 0175
-} "
-ap 8,5 0 0176
-*U 9,10 0 0241
-fm 4,10 0 0242
-<= 8,9 0 0243
-f/ 4,10 0 0244
-if 10,6 0 0245
-Fn 7,10,3 0 0246
-CL 11,7 0 0247
-DI 11,7 0 0250
-HE 11,7 0 0251
-SP 11,7 0 0252
-<> 15,7 0 0253
-<- 14,7 0 0254
-ua 9,12,3 0 0255
-arrowverttp "
--> 14,7 0 0256
-da 9,12,3 0 0257
-arrowvertbt "
-de 6,10 0 0260
-+- 8,9 0 0261
-sd 6,10 0 0262
->= 8,9 0 0263
-mu 8,7 0 0264
-pt 10,6 0 0265
-pd 7,11 0 0266
-bu 7,6 0 0267
-di 8,7 0 0270
-!= 8,7 0 0271
-== 8,6 0 0272
-~= 8,7 0 0273
-~~ "
---- 15,2 0 0274
-arrowvertex 9,12,3 0 0275
-an 15,4 0 0276
-CR 10,9 0 0277
-Ah 12,10 0 0300
-Im 10,11,1 0 0301
-Re 12,11 0 0302
-wp 12,9,3 0 0303
-c* 11,9 0 0304
-c+ 11,9 0 0305
-es 12,11 0 0306
-ca 10,7 0 0307
-cu 10,7 0 0310
-sp 10,7 0 0311
-ip 10,7,2 0 0312
-nb 10,8,1 0 0313
-sb 10,7 0 0314
-ib 10,7,2 0 0315
-mo 10,7 0 0316
-nm 10,8,1 0 0317
-/_ 11,10 0 0320
-gr 10,11 0 0321
-rg 12,10 0 0322
-co 12,10 0 0323
-tm 11,10 0 0324
---- 12,11,1 0 0325
-sr 8,12 0 0326
-sqrt "
-md 4,5 0 0327
-no 10,5 0 0330
-AN 9,7 0 0331
-OR 9,7 0 0332
-hA 15,7 0 0333
-lA 14,7 0 0334
-uA 9,12 0 0335
-rA 14,7 0 0336
-dA 9,12 0 0337
-lz 7,11 0 0340
-la 5,12,3 0 0341
---- 12,10 0 0342
---- 12,10 0 0343
---- 11,10 0 0344
---- 10,11,1 0 0345
-parenlefttp 6,12,3 0 0346
-parenleftex 6,12,3 0 0347
-parenleftbt 6,12,3 0 0350
-bracketlefttp 6,12,3 0 0351
-lc "
-bracketleftex 6,12,3 0 0352
-bracketleftbt 6,12,3 0 0353
-lf "
-bracelefttp 7,12,3 0 0354
-lt "
-braceleftmid 7,12,3 0 0355
-lk "
-braceleftbt 7,12,3 0 0356
-lb "
-bracerightex 7,12,3 0 0357
-braceleftex "
-braceex "
-bv "
-ra 5,12,3 0 0361
-is 4,12,1 0 0362
-integral "
---- 10,12,3 0 0363
---- 10,12,3 0 0364
---- 10,12,3 0 0365
-parenrighttp 6,12,3 0 0366
-parenrightex 6,12,3 0 0367
-parenrightbt 6,12,3 0 0370
-bracketrighttp 6,12,3 0 0371
-rc "
-bracketrightex 6,12,3 0 0372
-bracketrightbt 6,12,3 0 0373
-rf "
-bracerighttp 7,12,3 0 0374
-rt "
-bracerightmid 7,12,3 0 0375
-rk "
-bracerightbt 7,12,3 0 0376
-rb "
diff --git a/contrib/groff/font/devX100/TB b/contrib/groff/font/devX100/TB
deleted file mode 100644
index f2d18da931f2..000000000000
--- a/contrib/groff/font/devX100/TB
+++ /dev/null
@@ -1,213 +0,0 @@
-name TB
-spacewidth 3
-charset
---- 11,9 0 00
---- 3,1 0 040
-! 4,10 0 041
-" 7,10 0 042
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 14,10 0 045
-& 12,10 0 046
-' 4,10 0 047
-cq "
-( 5,10,3 0 050
-) 5,10,3 0 051
-* 7,10 0 052
-+ 8,7 0 053
-, 3,2,2 0 054
-\- 4,4 0 055
-. 3,2 0 056
-/ 4,10 0 057
-sl "
-0 7,10 0 060
-1 7,10 0 061
-2 7,10 0 062
-3 7,10 0 063
-4 7,10 0 064
-5 7,10 0 065
-6 7,10 0 066
-7 7,10 0 067
-8 7,10 0 070
-9 7,10 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 8,7 0 074
-= 8,5 0 075
-> 8,7 0 076
-? 7,10 0 077
-@ 14,10,2 0 0100
-at "
-A 10,10 0 0101
-B 9,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 9,10 0 0105
-F 8,10 0 0106
-G 11,10 0 0107
-H 11,10 0 0110
-I 5,10 0 0111
-J 7,10,1 0 0112
-K 11,10 0 0113
-L 9,10 0 0114
-M 13,10 0 0115
-N 10,10 0 0116
-O 11,10 0 0117
-P 9,10 0 0120
-Q 11,10,3 0 0121
-R 10,10 0 0122
-S 8,10 0 0123
-T 9,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 14,10 0 0127
-X 10,10 0 0130
-Y 10,10 0 0131
-Z 9,10 0 0132
-[ 5,10,3 0 0133
-lB "
-\ 4,10 0 0134
-rs "
-] 5,10,3 0 0135
-rB "
-^ 8,10 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 5,11 0 0140
-oq "
-a 7,7 0 0141
-b 8,10 0 0142
-c 6,7 0 0143
-d 7,10 0 0144
-e 6,7 0 0145
-f 5,10 0 0146
-g 7,7,3 0 0147
-h 8,10 0 0150
-i 4,10 0 0151
-j 4,10,3 0 0152
-k 8,10 0 0153
-l 4,10 0 0154
-m 12,7 0 0155
-n 8,7 0 0156
-o 7,7 0 0157
-p 8,7,3 0 0160
-q 7,7,3 0 0161
-r 6,7 0 0162
-s 6,7 0 0163
-t 5,9 0 0164
-u 7,7 0 0165
-v 7,7 0 0166
-w 10,7 0 0167
-x 7,7 0 0170
-y 7,7,3 0 0171
-z 6,7 0 0172
-{ 7,10,3 0 0173
-lC "
-| 3,10,2 0 0174
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,7 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,7,3 0 0241
-ct 7,9,2 0 0242
-Po 8,10 0 0243
-Cs 8,8 0 0244
-Ye 8,10 0 0245
-bb 3,10,2 0 0246
-sc 7,10,2 0 0247
-ad 5,10 0 0250
-co 12,10 0 0251
-Of 5,10 0 0252
-Fo 9,6 0 0253
-tno 9,5 0 0254
-- 4,4 0 0255
-hy "
-rg 12,10 0 0256
-a- 5,9 0 0257
-de 6,10 0 0260
-t+- 8,9 0 0261
-S2 4,10 0 0262
-S3 4,10 0 0263
-aa 5,11 0 0264
-mc 7,7,3 0 0265
-ps 8,10,3 0 0266
-pc 4,6 0 0267
-ac 5,0,3 0 0270
-S1 4,10 0 0271
-Om 5,10 0 0272
-Fc 9,6 0 0273
-14 10,10 0 0274
-12 10,10 0 0275
-34 10,10 0 0276
-r? 7,7,3 0 0277
-`A 10,14 0 0300
-'A 10,14 0 0301
-^A 10,14 0 0302
-~A 10,13 0 0303
-:A 10,13 0 0304
-oA 10,14 0 0305
-AE 14,10 0 0306
-,C 10,10,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,13 0 0313
-`I 5,14 0 0314
-'I 5,14 0 0315
-^I 5,14 0 0316
-:I 5,13 0 0317
--D 11,10 0 0320
-~N 10,13 0 0321
-`O 11,14 0 0322
-'O 11,14 0 0323
-^O 11,14 0 0324
-~O 11,13 0 0325
-:O 11,13 0 0326
-tmu 8,7 0 0327
-/O 11,11,1 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 10,14 0 0335
-TP 9,10 0 0336
-ss 8,10 0 0337
-`a 7,11 0 0340
-'a 7,11 0 0341
-^a 7,11 0 0342
-~a 7,10 0 0343
-:a 7,10 0 0344
-oa 7,11 0 0345
-ae 11,7 0 0346
-,c 7,7,3 0 0347
-`e 7,11 0 0350
-'e 7,11 0 0351
-^e 7,11 0 0352
-:e 7,10 0 0353
-`i 4,11 0 0354
-'i 4,11 0 0355
-^i 4,11 0 0356
-:i 4,10 0 0357
-Sd 7,10 0 0360
-~n 8,10 0 0361
-`o 7,11 0 0362
-'o 7,11 0 0363
-^o 7,11 0 0364
-~o 7,10 0 0365
-:o 7,10 0 0366
-tdi 8,7 0 0367
-/o 7,8,1 0 0370
-`u 7,11 0 0371
-'u 7,11 0 0372
-^u 7,11 0 0373
-:u 7,10 0 0374
-'y 7,11,3 0 0375
-Tp 8,10,3 0 0376
-:y 7,10,3 0 0377
diff --git a/contrib/groff/font/devX100/TBI b/contrib/groff/font/devX100/TBI
deleted file mode 100644
index a1d3329d55c9..000000000000
--- a/contrib/groff/font/devX100/TBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TBI
-spacewidth 3
-charset
---- 11,9 0 00
---- 3,1 0 040
-! 7,10 0 041
-" 7,10 0 042
-dq "
-# 8,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 14,10 0 045
-& 10,10 0 046
-' 4,10 0 047
-cq "
-( 6,10,3 0 050
-) 6,10,3 0 051
-* 7,10 0 052
-+ 9,7 0 053
-, 4,2,2 0 054
-\- 5,4 0 055
-. 3,2 0 056
-/ 6,10 0 057
-sl "
-0 7,10 0 060
-1 7,10 0 061
-2 7,10 0 062
-3 7,10 0 063
-4 7,10 0 064
-5 7,10 0 065
-6 7,10 0 066
-7 7,10 0 067
-8 7,10 0 070
-9 7,10 0 071
-: 5,7 0 072
-; 4,7,2 0 073
-< 8,6 0 074
-= 10,5 0 075
-> 8,6 0 076
-? 8,10 0 077
-@ 15,10,2 0 0100
-at "
-A 9,10 0 0101
-B 9,10 0 0102
-C 9,10 0 0103
-D 10,10 0 0104
-E 10,10 0 0105
-F 9,10 0 0106
-G 10,10 0 0107
-H 11,10 0 0110
-I 5,10 0 0111
-J 7,10,1 0 0112
-K 11,10 0 0113
-L 9,10 0 0114
-M 13,10 0 0115
-N 11,10 0 0116
-O 10,10 0 0117
-P 9,10 0 0120
-Q 10,10,3 0 0121
-R 10,10 0 0122
-S 8,10 0 0123
-T 10,10 0 0124
-U 10,10 0 0125
-V 10,10 0 0126
-W 13,10 0 0127
-X 9,10 0 0130
-Y 8,10 0 0131
-Z 8,10 0 0132
-[ 6,10,3 0 0133
-lB "
-\ 6,10 0 0134
-rs "
-] 5,10,3 0 0135
-rB "
-^ 8,10 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 6,10 0 0140
-oq "
-a 8,7 0 0141
-b 7,10 0 0142
-c 6,7 0 0143
-d 7,10 0 0144
-e 7,7 0 0145
-f 5,10,3 0 0146
-g 6,7,3 0 0147
-h 8,10 0 0150
-i 4,10 0 0151
-j 4,10,3 0 0152
-k 7,10 0 0153
-l 4,10 0 0154
-m 11,7 0 0155
-n 8,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 6,7 0 0162
-s 6,7 0 0163
-t 4,9 0 0164
-u 7,7 0 0165
-v 6,7 0 0166
-w 9,7 0 0167
-x 6,7 0 0170
-y 6,7,3 0 0171
-z 6,7 0 0172
-{ 7,10,3 0 0173
-lC "
-| 4,10 0 0174
-ba "
-} 7,10,3 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 7,7,3 0 0241
-ct 7,8,1 0 0242
-Po 7,10 0 0243
-Cs 8,8 0 0244
-Ye 7,10 0 0245
-bb 4,10 0 0246
-sc 8,10,3 0 0247
-ad 6,9 0 0250
-co 12,10 0 0251
-Of 6,10 0 0252
-Fo 8,6 0 0253
-tno 9,5 0 0254
-- 5,4 0 0255
-hy "
-rg 12,10 0 0256
-a- 6,9 0 0257
-de 6,10 0 0260
-t+- 9,9 0 0261
-S2 4,10 0 0262
-S3 4,10 0 0263
-aa 6,10 0 0264
-mc 7,7,3 0 0265
-ps 8,10,3 0 0266
-pc 4,5 0 0267
-ac 5,0,3 0 0270
-S1 4,10 0 0271
-Om 6,10 0 0272
-Fc 8,6 0 0273
-14 10,10 0 0274
-12 10,10 0 0275
-34 10,10 0 0276
-r? 8,7,3 0 0277
-`A 9,13 0 0300
-'A 9,13 0 0301
-^A 9,13 0 0302
-~A 9,13 0 0303
-:A 9,13 0 0304
-oA 9,13 0 0305
-AE 14,10 0 0306
-,C 9,10,3 0 0307
-`E 10,13 0 0310
-'E 10,13 0 0311
-^E 10,13 0 0312
-:E 10,13 0 0313
-`I 5,13 0 0314
-'I 5,13 0 0315
-^I 5,13 0 0316
-:I 5,13 0 0317
--D 10,10 0 0320
-~N 11,13 0 0321
-`O 10,13 0 0322
-'O 10,13 0 0323
-^O 10,13 0 0324
-~O 10,13 0 0325
-:O 10,13 0 0326
-tmu 9,7 0 0327
-/O 10,11,1 0 0330
-`U 10,13 0 0331
-'U 10,13 0 0332
-^U 10,13 0 0333
-:U 10,13 0 0334
-'Y 8,13 0 0335
-TP 9,10 0 0336
-ss 7,10,3 0 0337
-`a 8,10 0 0340
-'a 8,10 0 0341
-^a 8,11 0 0342
-~a 8,10 0 0343
-:a 8,10 0 0344
-oa 8,11 0 0345
-ae 11,7 0 0346
-,c 6,7,3 0 0347
-`e 7,10 0 0350
-'e 7,10 0 0351
-^e 7,11 0 0352
-:e 7,10 0 0353
-`i 4,10 0 0354
-'i 4,10 0 0355
-^i 4,11 0 0356
-:i 4,10 0 0357
-Sd 7,10 0 0360
-~n 8,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,11 0 0364
-~o 7,10 0 0365
-:o 7,10 0 0366
-tdi 9,7 0 0367
-/o 7,8,1 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,11 0 0373
-:u 7,10 0 0374
-'y 6,10,2 0 0375
-Tp 7,10,3 0 0376
-:y 6,10,2 0 0377
diff --git a/contrib/groff/font/devX100/TI b/contrib/groff/font/devX100/TI
deleted file mode 100644
index 9cd74e6ce3fc..000000000000
--- a/contrib/groff/font/devX100/TI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TI
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 5,10 0 041
-" 6,10 0 042
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 12,10 0 045
-& 11,10 0 046
-' 3,10 0 047
-cq "
-( 5,10,3 0 050
-) 5,10,3 0 051
-* 7,10 0 052
-+ 10,7 0 053
-, 4,2,1 0 054
-\- 5,4 0 055
-. 3,2 0 056
-/ 4,10 0 057
-sl "
-0 7,10 0 060
-1 7,10 0 061
-2 7,10 0 062
-3 7,10 0 063
-4 7,10 0 064
-5 7,10 0 065
-6 7,10 0 066
-7 7,10 0 067
-8 7,10 0 070
-9 7,10 0 071
-: 4,7 0 072
-; 4,7,1 0 073
-< 10,7,1 0 074
-= 10,5 0 075
-> 10,7,1 0 076
-? 7,10 0 077
-@ 13,10,3 0 0100
-at "
-A 9,10 0 0101
-B 8,10 0 0102
-C 9,10 0 0103
-D 10,10 0 0104
-E 9,10 0 0105
-F 9,10 0 0106
-G 10,10 0 0107
-H 10,10 0 0110
-I 5,10 0 0111
-J 6,10 0 0112
-K 10,10 0 0113
-L 8,10 0 0114
-M 12,10 0 0115
-N 11,10 0 0116
-O 10,10 0 0117
-P 9,10 0 0120
-Q 10,10,3 0 0121
-R 9,10 0 0122
-S 7,10 0 0123
-T 8,10 0 0124
-U 10,10 0 0125
-V 9,10 0 0126
-W 11,10 0 0127
-X 9,10 0 0130
-Y 8,10 0 0131
-Z 8,10 0 0132
-[ 6,10,3 0 0133
-lB "
-\ 4,10 0 0134
-rs "
-] 6,10,3 0 0135
-rB "
-^ 6,10 0 0136
-a^ "
-ha "
-_ 7,0,4 0 0137
-` 5,10 0 0140
-oq "
-a 7,7 0 0141
-b 7,10 0 0142
-c 6,7 0 0143
-d 7,10 0 0144
-e 7,7 0 0145
-f 5,10,3 0 0146
-g 6,7,3 0 0147
-h 7,10 0 0150
-i 4,10 0 0151
-j 4,10,3 0 0152
-k 7,10 0 0153
-l 4,10 0 0154
-m 10,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 5,7 0 0162
-s 6,7 0 0163
-t 5,9 0 0164
-u 7,7 0 0165
-v 6,7 0 0166
-w 9,7 0 0167
-x 7,7 0 0170
-y 7,7,3 0 0171
-z 6,7 0 0172
-{ 6,10,3 0 0173
-lC "
-| 4,10,3 0 0174
-ba "
-} 6,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 6,7,3 0 0241
-ct 7,9,2 0 0242
-Po 7,10 0 0243
-Cs 7,8 0 0244
-Ye 7,10 0 0245
-bb 4,10,3 0 0246
-sc 7,11,2 0 0247
-ad 5,10 0 0250
-co 12,10 0 0251
-Of 5,10 0 0252
-Fo 7,6 0 0253
-tno 9,6 0 0254
-- 5,4 0 0255
-hy "
-rg 12,10 0 0256
-a- 5,10 0 0257
-de 6,10 0 0260
-t+- 10,9 0 0261
-S2 4,10 0 0262
-S3 4,10 0 0263
-aa 4,10 0 0264
-mc 7,7,3 0 0265
-ps 8,10,3 0 0266
-pc 4,4 0 0267
-ac 5,0,3 0 0270
-S1 4,10 0 0271
-Om 5,10 0 0272
-Fc 7,6 0 0273
-14 10,10 0 0274
-12 10,10 0 0275
-34 10,10 0 0276
-r? 7,7,3 0 0277
-`A 9,13 0 0300
-'A 9,13 0 0301
-^A 9,13 0 0302
-~A 9,13 0 0303
-:A 9,12 0 0304
-oA 9,13 0 0305
-AE 13,10 0 0306
-,C 9,10,3 0 0307
-`E 9,13 0 0310
-'E 9,13 0 0311
-^E 9,13 0 0312
-:E 9,12 0 0313
-`I 5,13 0 0314
-'I 5,13 0 0315
-^I 5,13 0 0316
-:I 5,12 0 0317
--D 10,10 0 0320
-~N 11,13 0 0321
-`O 10,13 0 0322
-'O 10,13 0 0323
-^O 10,13 0 0324
-~O 10,13 0 0325
-:O 10,12 0 0326
-tmu 10,7 0 0327
-/O 10,11,1 0 0330
-`U 10,13 0 0331
-'U 10,13 0 0332
-^U 10,13 0 0333
-:U 10,12 0 0334
-'Y 8,13 0 0335
-TP 9,10 0 0336
-ss 7,10,3 0 0337
-`a 7,10 0 0340
-'a 7,10 0 0341
-^a 7,11 0 0342
-~a 7,10 0 0343
-:a 7,9 0 0344
-oa 7,10 0 0345
-ae 10,7 0 0346
-,c 6,7,3 0 0347
-`e 7,10 0 0350
-'e 7,10 0 0351
-^e 7,11 0 0352
-:e 7,9 0 0353
-`i 4,10 0 0354
-'i 4,10 0 0355
-^i 4,11 0 0356
-:i 4,9 0 0357
-Sd 7,10 0 0360
-~n 7,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,11 0 0364
-~o 7,10 0 0365
-:o 7,9 0 0366
-tdi 10,7 0 0367
-/o 7,8,1 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,11 0 0373
-:u 7,9 0 0374
-'y 7,10,3 0 0375
-Tp 7,10,3 0 0376
-:y 7,9,3 0 0377
diff --git a/contrib/groff/font/devX100/TR b/contrib/groff/font/devX100/TR
deleted file mode 100644
index 02d7ef4d9ece..000000000000
--- a/contrib/groff/font/devX100/TR
+++ /dev/null
@@ -1,213 +0,0 @@
-name TR
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 5,10 0 041
-" 6,10 0 042
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 12,10 0 045
-& 11,10 0 046
-' 3,10 0 047
-cq "
-( 5,10,3 0 050
-) 5,10,3 0 051
-* 7,10 0 052
-+ 8,7 0 053
-, 4,1,2 0 054
-\- 4,4 0 055
-. 4,1 0 056
-/ 4,10,2 0 057
-sl "
-0 7,10 0 060
-1 7,10 0 061
-2 7,10 0 062
-3 7,10 0 063
-4 7,10 0 064
-5 7,10 0 065
-6 7,10 0 066
-7 7,10 0 067
-8 7,10 0 070
-9 7,10 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 8,7 0 074
-= 8,5 0 075
-> 8,7 0 076
-? 6,10 0 077
-@ 13,10,2 0 0100
-at "
-A 11,10 0 0101
-B 9,10 0 0102
-C 10,10 0 0103
-D 10,10 0 0104
-E 9,10 0 0105
-F 8,10 0 0106
-G 11,10 0 0107
-H 10,10 0 0110
-I 5,10 0 0111
-J 6,10 0 0112
-K 10,10 0 0113
-L 9,10 0 0114
-M 13,10 0 0115
-N 11,10 0 0116
-O 10,10 0 0117
-P 8,10 0 0120
-Q 10,10,3 0 0121
-R 9,10 0 0122
-S 8,10 0 0123
-T 9,10 0 0124
-U 10,10 0 0125
-V 9,10 0 0126
-W 13,10 0 0127
-X 10,10 0 0130
-Y 9,10 0 0131
-Z 8,10 0 0132
-[ 5,10,3 0 0133
-lB "
-\ 4,10 0 0134
-rs "
-] 5,10,3 0 0135
-rB "
-^ 7,10 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 5,11 0 0140
-oq "
-a 7,7 0 0141
-b 7,10 0 0142
-c 7,7 0 0143
-d 7,10 0 0144
-e 7,7 0 0145
-f 4,10 0 0146
-g 7,7,3 0 0147
-h 7,10 0 0150
-i 3,10 0 0151
-j 4,10,3 0 0152
-k 7,10 0 0153
-l 3,10 0 0154
-m 11,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 5,7 0 0162
-s 6,7 0 0163
-t 4,8 0 0164
-u 7,7 0 0165
-v 7,7 0 0166
-w 11,7 0 0167
-x 7,7 0 0170
-y 7,7,3 0 0171
-z 6,7 0 0172
-{ 7,10,3 0 0173
-lC "
-| 3,10 0 0174
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 5,7,3 0 0241
-ct 7,8,1 0 0242
-Po 8,10 0 0243
-Cs 7,8 0 0244
-Ye 7,10 0 0245
-bb 3,10 0 0246
-sc 7,10,3 0 0247
-ad 5,10 0 0250
-co 12,10 0 0251
-Of 4,10 0 0252
-Fo 7,6 0 0253
-tno 9,6 0 0254
-- 4,4 0 0255
-hy "
-rg 12,10 0 0256
-a- 4,9 0 0257
-de 6,10 0 0260
-t+- 8,7 0 0261
-S2 4,10 0 0262
-S3 4,10 0 0263
-aa 5,11 0 0264
-mc 7,7,3 0 0265
-ps 7,10,3 0 0266
-pc 4,5 0 0267
-ac 5,0,3 0 0270
-S1 4,10 0 0271
-Om 5,10 0 0272
-Fc 7,6 0 0273
-14 10,10 0 0274
-12 10,10 0 0275
-34 10,10 0 0276
-r? 6,7,3 0 0277
-`A 11,14 0 0300
-'A 11,14 0 0301
-^A 11,14 0 0302
-~A 11,14 0 0303
-:A 11,13 0 0304
-oA 11,14 0 0305
-AE 13,10 0 0306
-,C 10,10,3 0 0307
-`E 9,14 0 0310
-'E 9,14 0 0311
-^E 9,14 0 0312
-:E 9,13 0 0313
-`I 5,14 0 0314
-'I 5,14 0 0315
-^I 5,14 0 0316
-:I 5,13 0 0317
--D 10,10 0 0320
-~N 11,14 0 0321
-`O 10,14 0 0322
-'O 10,14 0 0323
-^O 10,14 0 0324
-~O 10,14 0 0325
-:O 10,13 0 0326
-tmu 8,7 0 0327
-/O 10,11,1 0 0330
-`U 10,14 0 0331
-'U 10,14 0 0332
-^U 10,14 0 0333
-:U 10,13 0 0334
-'Y 9,14 0 0335
-TP 8,10 0 0336
-ss 7,10 0 0337
-`a 7,11 0 0340
-'a 7,11 0 0341
-^a 7,11 0 0342
-~a 7,11 0 0343
-:a 7,10 0 0344
-oa 7,11 0 0345
-ae 11,7 0 0346
-,c 7,7,3 0 0347
-`e 7,11 0 0350
-'e 7,11 0 0351
-^e 7,11 0 0352
-:e 7,10 0 0353
-`i 3,11 0 0354
-'i 3,11 0 0355
-^i 3,11 0 0356
-:i 3,10 0 0357
-Sd 7,10 0 0360
-~n 7,11 0 0361
-`o 7,11 0 0362
-'o 7,11 0 0363
-^o 7,11 0 0364
-~o 7,11 0 0365
-:o 7,10 0 0366
-tdi 8,7 0 0367
-/o 7,8,1 0 0370
-`u 7,11 0 0371
-'u 7,11 0 0372
-^u 7,11 0 0373
-:u 7,10 0 0374
-'y 7,11,3 0 0375
-Tp 7,10,3 0 0376
-:y 7,10,3 0 0377
diff --git a/contrib/groff/font/devX75-12/CB b/contrib/groff/font/devX75-12/CB
deleted file mode 100644
index 9fd44180fb08..000000000000
--- a/contrib/groff/font/devX75-12/CB
+++ /dev/null
@@ -1,213 +0,0 @@
-name CB
-spacewidth 7
-charset
---- 7,7 0 00
---- 7,1 0 040
-! 7,9 0 041
-" 7,8 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,10,2 0 044
-Do "
-% 7,8 0 045
-& 7,8 0 046
-' 7,8 0 047
-cq "
-( 7,9,2 0 050
-) 7,9,2 0 051
-* 7,9 0 052
-+ 7,6 0 053
-, 7,2,1 0 054
-\- 7,4 0 055
-. 7,2 0 056
-/ 7,8,2 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 7,6 0 072
-; 7,6,1 0 073
-< 7,7 0 074
-= 7,5 0 075
-> 7,7 0 076
-? 7,8 0 077
-@ 7,8 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 7,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 7,8 0 0107
-H 7,8 0 0110
-I 7,8 0 0111
-J 7,8 0 0112
-K 7,8 0 0113
-L 7,8 0 0114
-M 7,8 0 0115
-N 7,8 0 0116
-O 7,8 0 0117
-P 7,8 0 0120
-Q 7,8,2 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 7,8 0 0126
-W 7,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 7,9,2 0 0133
-lB "
-\ 7,8,2 0 0134
-rs "
-] 7,9,2 0 0135
-rB "
-^ 7,8 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 7,9 0 0140
-oq "
-a 7,6 0 0141
-b 7,9 0 0142
-c 7,6 0 0143
-d 7,9 0 0144
-e 7,6 0 0145
-f 7,9 0 0146
-g 7,6,3 0 0147
-h 7,9 0 0150
-i 7,9 0 0151
-j 7,9,3 0 0152
-k 7,9 0 0153
-l 7,9 0 0154
-m 7,6 0 0155
-n 7,6 0 0156
-o 7,6 0 0157
-p 7,6,3 0 0160
-q 7,6,3 0 0161
-r 7,6 0 0162
-s 7,6 0 0163
-t 7,8 0 0164
-u 7,6 0 0165
-v 7,6 0 0166
-w 7,6 0 0167
-x 7,6 0 0170
-y 7,6,3 0 0171
-z 7,6 0 0172
-{ 7,9,2 0 0173
-lC "
-| 7,8,2 0 0174
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 7,1 0 0240
-r! 7,6,3 0 0241
-ct 7,8,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 7,8 0 0245
-bb 7,8,2 0 0246
-sc 7,9,1 0 0247
-ad 7,9 0 0250
-co 7,8 0 0251
-Of 7,9 0 0252
-Fo 7,5 0 0253
-tno 7,5 0 0254
-- 7,4 0 0255
-hy "
-rg 7,8 0 0256
-a- 7,8 0 0257
-de 7,8 0 0260
-t+- 7,6 0 0261
-S2 7,8 0 0262
-S3 7,8 0 0263
-aa 7,9 0 0264
-mc 7,6,3 0 0265
-ps 7,9,1 0 0266
-pc 7,5 0 0267
-ac 7,0,3 0 0270
-S1 7,8 0 0271
-Om 7,9 0 0272
-Fc 7,5 0 0273
-14 7,9,1 0 0274
-12 7,9,1 0 0275
-34 7,9,1 0 0276
-r? 7,6,3 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 7,8 0 0306
-,C 7,8,3 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 7,11 0 0314
-'I 7,11 0 0315
-^I 7,11 0 0316
-:I 7,10 0 0317
--D 7,8 0 0320
-~N 7,11 0 0321
-`O 7,11 0 0322
-'O 7,11 0 0323
-^O 7,11 0 0324
-~O 7,11 0 0325
-:O 7,10 0 0326
-tmu 7,6 0 0327
-/O 7,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 7,9 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,8 0 0344
-oa 7,10 0 0345
-ae 7,6 0 0346
-,c 7,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,8 0 0353
-`i 7,9 0 0354
-'i 7,9 0 0355
-^i 7,9 0 0356
-:i 7,8 0 0357
-Sd 7,9 0 0360
-~n 7,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,9 0 0364
-~o 7,9 0 0365
-:o 7,8 0 0366
-tdi 7,6 0 0367
-/o 7,7,1 0 0370
-`u 7,9 0 0371
-'u 7,9 0 0372
-^u 7,9 0 0373
-:u 7,8 0 0374
-'y 7,9,3 0 0375
-Tp 7,8,3 0 0376
-:y 7,8,3 0 0377
diff --git a/contrib/groff/font/devX75-12/CBI b/contrib/groff/font/devX75-12/CBI
deleted file mode 100644
index 131bbeef8215..000000000000
--- a/contrib/groff/font/devX75-12/CBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CBI
-spacewidth 7
-charset
---- 7,7 0 00
---- 7,1 0 040
-! 7,9 0 041
-" 7,8 0 042
-dq "
-# 7,9 0 043
-sh "
-$ 7,10,2 0 044
-Do "
-% 7,8 0 045
-& 7,8 0 046
-' 7,8 0 047
-cq "
-( 7,9,2 0 050
-) 7,9,2 0 051
-* 7,8 0 052
-+ 7,6 0 053
-, 7,2,1 0 054
-\- 7,4 0 055
-. 7,2 0 056
-/ 7,9,1 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 7,6 0 072
-; 7,6,1 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 7,8 0 077
-@ 7,8,1 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 7,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 7,8 0 0107
-H 7,8 0 0110
-I 7,8 0 0111
-J 7,8 0 0112
-K 7,8 0 0113
-L 7,8 0 0114
-M 7,8 0 0115
-N 7,8 0 0116
-O 7,8 0 0117
-P 7,8 0 0120
-Q 7,8,2 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 7,8 0 0126
-W 7,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 7,9,2 0 0133
-lB "
-\ 7,9,1 0 0134
-rs "
-] 7,9,2 0 0135
-rB "
-^ 7,8 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 7,9 0 0140
-oq "
-a 7,6 0 0141
-b 7,9 0 0142
-c 7,6 0 0143
-d 7,9 0 0144
-e 7,6 0 0145
-f 7,9 0 0146
-g 7,6,3 0 0147
-h 7,9 0 0150
-i 7,9 0 0151
-j 7,9,3 0 0152
-k 7,9 0 0153
-l 7,9 0 0154
-m 7,6 0 0155
-n 7,6 0 0156
-o 7,6 0 0157
-p 7,6,3 0 0160
-q 7,6,3 0 0161
-r 7,6 0 0162
-s 7,6 0 0163
-t 7,8 0 0164
-u 7,6 0 0165
-v 7,6 0 0166
-w 7,6 0 0167
-x 7,6 0 0170
-y 7,6,3 0 0171
-z 7,6 0 0172
-{ 7,9,2 0 0173
-lC "
-| 7,8,1 0 0174
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 7,1 0 0240
-r! 7,6,2 0 0241
-ct 7,8,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 7,8 0 0245
-bb 7,8,1 0 0246
-sc 7,9,1 0 0247
-ad 7,9 0 0250
-co 7,8 0 0251
-Of 7,8 0 0252
-Fo 7,5 0 0253
-tno 7,5 0 0254
-- 7,4 0 0255
-hy "
-rg 7,8 0 0256
-a- 7,8 0 0257
-de 7,8 0 0260
-t+- 7,6 0 0261
-S2 7,8 0 0262
-S3 7,8 0 0263
-aa 7,9 0 0264
-mc 7,6,3 0 0265
-ps 7,9,1 0 0266
-pc 7,5 0 0267
-ac 7,0,3 0 0270
-S1 7,8 0 0271
-Om 7,8 0 0272
-Fc 7,5 0 0273
-14 7,9 0 0274
-12 7,9 0 0275
-34 7,9 0 0276
-r? 7,6,2 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 7,8 0 0306
-,C 7,8,3 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 7,11 0 0314
-'I 7,11 0 0315
-^I 7,11 0 0316
-:I 7,10 0 0317
--D 7,8 0 0320
-~N 7,11 0 0321
-`O 7,11 0 0322
-'O 7,11 0 0323
-^O 7,11 0 0324
-~O 7,11 0 0325
-:O 7,10 0 0326
-tmu 7,6 0 0327
-/O 7,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 7,8 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,8 0 0344
-oa 7,10 0 0345
-ae 7,6 0 0346
-,c 7,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,8 0 0353
-`i 7,9 0 0354
-'i 7,9 0 0355
-^i 7,9 0 0356
-:i 7,8 0 0357
-Sd 7,10 0 0360
-~n 7,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,9 0 0364
-~o 7,9 0 0365
-:o 7,8 0 0366
-tdi 7,6 0 0367
-/o 7,7,1 0 0370
-`u 7,9 0 0371
-'u 7,9 0 0372
-^u 7,9 0 0373
-:u 7,8 0 0374
-'y 7,9,3 0 0375
-Tp 7,8,3 0 0376
-:y 7,8,3 0 0377
diff --git a/contrib/groff/font/devX75-12/CI b/contrib/groff/font/devX75-12/CI
deleted file mode 100644
index 5770928d5dee..000000000000
--- a/contrib/groff/font/devX75-12/CI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CI
-spacewidth 7
-charset
---- 7,7 0 00
---- 7,1 0 040
-! 7,8 0 041
-" 7,8 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,10,1 0 044
-Do "
-% 7,8 0 045
-& 7,8 0 046
-' 7,8 0 047
-cq "
-( 7,9,2 0 050
-) 7,9,2 0 051
-* 7,8 0 052
-+ 7,6 0 053
-, 7,2,1 0 054
-\- 7,4 0 055
-. 7,1 0 056
-/ 7,8,1 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 7,5 0 072
-; 7,5,1 0 073
-< 7,7 0 074
-= 7,5 0 075
-> 7,7 0 076
-? 7,8 0 077
-@ 7,8 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 7,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 7,8 0 0107
-H 7,8 0 0110
-I 7,8 0 0111
-J 7,8 0 0112
-K 7,8 0 0113
-L 7,8 0 0114
-M 7,8 0 0115
-N 7,8 0 0116
-O 7,8 0 0117
-P 7,8 0 0120
-Q 7,8,2 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 7,8 0 0126
-W 7,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 7,9,2 0 0133
-lB "
-\ 7,8,1 0 0134
-rs "
-] 7,9,2 0 0135
-rB "
-^ 7,8 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 7,9 0 0140
-oq "
-a 7,6 0 0141
-b 7,9 0 0142
-c 7,6 0 0143
-d 7,9 0 0144
-e 7,6 0 0145
-f 7,9 0 0146
-g 7,6,3 0 0147
-h 7,9 0 0150
-i 7,9 0 0151
-j 7,9,3 0 0152
-k 7,9 0 0153
-l 7,9 0 0154
-m 7,6 0 0155
-n 7,6 0 0156
-o 7,6 0 0157
-p 7,6,3 0 0160
-q 7,6,3 0 0161
-r 7,6 0 0162
-s 7,6 0 0163
-t 7,8 0 0164
-u 7,6 0 0165
-v 7,6 0 0166
-w 7,6 0 0167
-x 7,6 0 0170
-y 7,6,3 0 0171
-z 7,6 0 0172
-{ 7,9,2 0 0173
-lC "
-| 7,8,1 0 0174
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ti "
---- 7,1 0 0240
-r! 7,6,3 0 0241
-ct 7,8,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 7,8 0 0245
-bb 7,8,2 0 0246
-sc 7,9,1 0 0247
-ad 7,8 0 0250
-co 7,8 0 0251
-Of 7,8 0 0252
-Fo 7,6 0 0253
-tno 7,5 0 0254
-- 7,4 0 0255
-hy "
-rg 7,8 0 0256
-a- 7,8 0 0257
-de 7,8 0 0260
-t+- 7,6 0 0261
-S2 7,8 0 0262
-S3 7,8 0 0263
-aa 7,9 0 0264
-mc 7,6,3 0 0265
-ps 7,9,1 0 0266
-pc 7,4 0 0267
-ac 7,0,3 0 0270
-S1 7,8 0 0271
-Om 7,8 0 0272
-Fc 7,6 0 0273
-14 7,9,1 0 0274
-12 7,9,1 0 0275
-34 7,9,1 0 0276
-r? 7,6,2 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 7,8 0 0306
-,C 7,8,3 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 7,11 0 0314
-'I 7,11 0 0315
-^I 7,11 0 0316
-:I 7,10 0 0317
--D 7,8 0 0320
-~N 7,11 0 0321
-`O 7,11 0 0322
-'O 7,11 0 0323
-^O 7,11 0 0324
-~O 7,11 0 0325
-:O 7,10 0 0326
-tmu 7,6 0 0327
-/O 7,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 7,9 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,8 0 0344
-oa 7,10 0 0345
-ae 7,6 0 0346
-,c 7,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,8 0 0353
-`i 7,9 0 0354
-'i 7,9 0 0355
-^i 7,9 0 0356
-:i 7,8 0 0357
-Sd 7,10 0 0360
-~n 7,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,9 0 0364
-~o 7,9 0 0365
-:o 7,8 0 0366
-tdi 7,6 0 0367
-/o 7,7,1 0 0370
-`u 7,9 0 0371
-'u 7,9 0 0372
-^u 7,9 0 0373
-:u 7,8 0 0374
-'y 7,9,3 0 0375
-Tp 7,9,3 0 0376
-:y 7,8,3 0 0377
diff --git a/contrib/groff/font/devX75-12/CR b/contrib/groff/font/devX75-12/CR
deleted file mode 100644
index dc9ab158b54a..000000000000
--- a/contrib/groff/font/devX75-12/CR
+++ /dev/null
@@ -1,213 +0,0 @@
-name CR
-spacewidth 7
-charset
---- 7,7 0 00
---- 7,1 0 040
-! 7,9 0 041
-" 7,8 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,9,1 0 044
-Do "
-% 7,8 0 045
-& 7,8 0 046
-' 7,8 0 047
-cq "
-( 7,9,2 0 050
-) 7,9,2 0 051
-* 7,8 0 052
-+ 7,6 0 053
-, 7,2,1 0 054
-\- 7,4 0 055
-. 7,1 0 056
-/ 7,9,1 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 7,5 0 072
-; 7,5,1 0 073
-< 7,7 0 074
-= 7,5 0 075
-> 7,7 0 076
-? 7,8 0 077
-@ 7,8 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 7,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 7,8 0 0107
-H 7,8 0 0110
-I 7,8 0 0111
-J 7,8 0 0112
-K 7,8 0 0113
-L 7,8 0 0114
-M 7,8 0 0115
-N 7,8 0 0116
-O 7,8 0 0117
-P 7,8 0 0120
-Q 7,8,1 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 7,8 0 0126
-W 7,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 7,9,2 0 0133
-lB "
-\ 7,9,1 0 0134
-rs "
-] 7,9,2 0 0135
-rB "
-^ 7,8 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 7,9 0 0140
-oq "
-a 7,6 0 0141
-b 7,9 0 0142
-c 7,6 0 0143
-d 7,9 0 0144
-e 7,6 0 0145
-f 7,9 0 0146
-g 7,6,3 0 0147
-h 7,9 0 0150
-i 7,9 0 0151
-j 7,9,3 0 0152
-k 7,9 0 0153
-l 7,9 0 0154
-m 7,6 0 0155
-n 7,6 0 0156
-o 7,6 0 0157
-p 7,6,3 0 0160
-q 7,6,3 0 0161
-r 7,6 0 0162
-s 7,6 0 0163
-t 7,8 0 0164
-u 7,6 0 0165
-v 7,6 0 0166
-w 7,6 0 0167
-x 7,6 0 0170
-y 7,6,3 0 0171
-z 7,6 0 0172
-{ 7,8,2 0 0173
-lC "
-| 7,8,2 0 0174
-ba "
-} 7,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 7,1 0 0240
-r! 7,6,3 0 0241
-ct 7,8,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 7,8 0 0245
-bb 7,8,2 0 0246
-sc 7,9,1 0 0247
-ad 7,8 0 0250
-co 7,8 0 0251
-Of 7,8 0 0252
-Fo 7,6 0 0253
-tno 7,5 0 0254
-- 7,4 0 0255
-hy "
-rg 7,8 0 0256
-a- 7,8 0 0257
-de 7,8 0 0260
-t+- 7,6 0 0261
-S2 7,8 0 0262
-S3 7,8 0 0263
-aa 7,9 0 0264
-mc 7,6,3 0 0265
-ps 7,9,1 0 0266
-pc 7,4 0 0267
-ac 7,0,3 0 0270
-S1 7,8 0 0271
-Om 7,8 0 0272
-Fc 7,6 0 0273
-14 7,9,1 0 0274
-12 7,9,1 0 0275
-34 7,9,1 0 0276
-r? 7,6,2 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 7,8 0 0306
-,C 7,8,3 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 7,11 0 0314
-'I 7,11 0 0315
-^I 7,11 0 0316
-:I 7,10 0 0317
--D 7,8 0 0320
-~N 7,11 0 0321
-`O 7,11 0 0322
-'O 7,11 0 0323
-^O 7,11 0 0324
-~O 7,11 0 0325
-:O 7,10 0 0326
-tmu 7,6 0 0327
-/O 7,9,1 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 7,9 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,8 0 0344
-oa 7,9 0 0345
-ae 7,6 0 0346
-,c 7,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,8 0 0353
-`i 7,9 0 0354
-'i 7,9 0 0355
-^i 7,9 0 0356
-:i 7,8 0 0357
-Sd 7,10 0 0360
-~n 7,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,9 0 0364
-~o 7,9 0 0365
-:o 7,8 0 0366
-tdi 7,6 0 0367
-/o 7,7,1 0 0370
-`u 7,9 0 0371
-'u 7,9 0 0372
-^u 7,9 0 0373
-:u 7,8 0 0374
-'y 7,9,3 0 0375
-Tp 7,9,3 0 0376
-:y 7,8,3 0 0377
diff --git a/contrib/groff/font/devX75-12/DESC b/contrib/groff/font/devX75-12/DESC
deleted file mode 100644
index 4793e599e0a6..000000000000
--- a/contrib/groff/font/devX75-12/DESC
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 75
-X11
-hor 1
-vert 1
-unitwidth 12
-postpro gxditview
diff --git a/contrib/groff/font/devX75-12/HB b/contrib/groff/font/devX75-12/HB
deleted file mode 100644
index abc64f7907cc..000000000000
--- a/contrib/groff/font/devX75-12/HB
+++ /dev/null
@@ -1,213 +0,0 @@
-name HB
-spacewidth 4
-charset
---- 9,9 0 00
---- 4,1 0 040
-! 4,9 0 041
-" 5,9 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 7,9,2 0 044
-Do "
-% 12,9 0 045
-& 9,9 0 046
-' 3,9 0 047
-cq "
-( 6,9,3 0 050
-) 6,9,3 0 051
-* 6,9 0 052
-+ 7,6 0 053
-, 4,2,2 0 054
-\- 5,4 0 055
-. 4,2 0 056
-/ 4,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 8,9 0 077
-@ 12,9,1 0 0100
-at "
-A 8,9 0 0101
-B 9,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 7,9 0 0106
-G 10,9 0 0107
-H 9,9 0 0110
-I 4,9 0 0111
-J 7,9 0 0112
-K 9,9 0 0113
-L 7,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 10,9 0 0117
-P 8,9 0 0120
-Q 10,9 0 0121
-R 9,9 0 0122
-S 9,9 0 0123
-T 8,9 0 0124
-U 9,9 0 0125
-V 8,9 0 0126
-W 10,9 0 0127
-X 8,9 0 0130
-Y 8,9 0 0131
-Z 7,9 0 0132
-[ 4,9,3 0 0133
-lB "
-\ 4,9 0 0134
-rs "
-] 4,9,3 0 0135
-rB "
-^ 7,9 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 4,10 0 0140
-oq "
-a 7,7 0 0141
-b 7,9 0 0142
-c 7,7 0 0143
-d 7,9 0 0144
-e 7,7 0 0145
-f 5,9 0 0146
-g 7,7,3 0 0147
-h 7,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 7,9 0 0153
-l 3,9 0 0154
-m 11,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 5,7 0 0162
-s 7,7 0 0163
-t 5,9 0 0164
-u 7,7 0 0165
-v 8,7 0 0166
-w 11,7 0 0167
-x 7,7 0 0170
-y 8,7,3 0 0171
-z 6,7 0 0172
-{ 5,9,3 0 0173
-lC "
-| 4,9,3 0 0174
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,7,3 0 0241
-ct 7,8,1 0 0242
-Po 7,9 0 0243
-Cs 7,7 0 0244
-Ye 7,9 0 0245
-bb 4,9,2 0 0246
-sc 7,9,3 0 0247
-ad 5,9 0 0250
-co 11,9 0 0251
-Of 6,9 0 0252
-Fo 8,6 0 0253
-tno 8,6 0 0254
-- 5,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,9 0 0257
-de 5,8 0 0260
-t+- 7,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,10 0 0264
-mc 7,7,3 0 0265
-ps 7,9,3 0 0266
-pc 4,5 0 0267
-ac 4,1,3 0 0270
-S1 4,9 0 0271
-Om 6,9 0 0272
-Fc 8,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 8,7,3 0 0277
-`A 8,12 0 0300
-'A 8,12 0 0301
-^A 8,12 0 0302
-~A 8,12 0 0303
-:A 8,11 0 0304
-oA 8,12 0 0305
-AE 13,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 4,12 0 0314
-'I 4,12 0 0315
-^I 4,12 0 0316
-:I 4,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 10,12 0 0322
-'O 10,12 0 0323
-^O 10,12 0 0324
-~O 10,12 0 0325
-:O 10,11 0 0326
-tmu 7,6 0 0327
-/O 10,9,1 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,11 0 0334
-'Y 8,12 0 0335
-TP 8,9 0 0336
-ss 8,9 0 0337
-`a 7,10 0 0340
-'a 7,10 0 0341
-^a 7,10 0 0342
-~a 7,10 0 0343
-:a 7,9 0 0344
-oa 7,11 0 0345
-ae 11,7 0 0346
-,c 7,7,3 0 0347
-`e 7,10 0 0350
-'e 7,10 0 0351
-^e 7,10 0 0352
-:e 7,9 0 0353
-`i 3,10 0 0354
-'i 3,10 0 0355
-^i 3,10 0 0356
-:i 3,9 0 0357
-Sd 7,10 0 0360
-~n 7,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,10 0 0364
-~o 7,10 0 0365
-:o 7,9 0 0366
-tdi 7,6 0 0367
-/o 7,7 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,10 0 0373
-:u 7,9 0 0374
-'y 8,10,3 0 0375
-Tp 7,9,3 0 0376
-:y 8,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/HBI b/contrib/groff/font/devX75-12/HBI
deleted file mode 100644
index 9409aa002a66..000000000000
--- a/contrib/groff/font/devX75-12/HBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HBI
-spacewidth 4
-charset
---- 10,9 0 00
---- 4,1 0 040
-! 4,9 0 041
-" 6,9 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,9,1 0 044
-Do "
-% 13,9 0 045
-& 9,9 0 046
-' 4,9 0 047
-cq "
-( 5,9,3 0 050
-) 5,9,3 0 051
-* 6,9 0 052
-+ 8,6 0 053
-, 3,2,2 0 054
-\- 5,4 0 055
-. 3,2 0 056
-/ 5,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 4,7 0 072
-; 4,7,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 8,9 0 077
-@ 11,9,1 0 0100
-at "
-A 8,9 0 0101
-B 9,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 7,9 0 0106
-G 9,9 0 0107
-H 10,9 0 0110
-I 5,9 0 0111
-J 7,9 0 0112
-K 9,9 0 0113
-L 7,9 0 0114
-M 12,9 0 0115
-N 10,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9 0 0121
-R 9,9 0 0122
-S 8,9 0 0123
-T 7,9 0 0124
-U 8,9 0 0125
-V 9,9 0 0126
-W 10,9 0 0127
-X 9,9 0 0130
-Y 7,9 0 0131
-Z 7,9 0 0132
-[ 4,9,3 0 0133
-lB "
-\ 5,9 0 0134
-rs "
-] 4,9,3 0 0135
-rB "
-^ 6,9 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 4,9 0 0140
-oq "
-a 6,7 0 0141
-b 7,9 0 0142
-c 7,7 0 0143
-d 7,9 0 0144
-e 7,7 0 0145
-f 5,9 0 0146
-g 7,7,3 0 0147
-h 7,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 7,9 0 0153
-l 3,9 0 0154
-m 11,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 5,7 0 0162
-s 7,7 0 0163
-t 5,9 0 0164
-u 7,7 0 0165
-v 7,7 0 0166
-w 10,7 0 0167
-x 7,7 0 0170
-y 7,7,3 0 0171
-z 6,7 0 0172
-{ 5,9,3 0 0173
-lC "
-| 4,9,3 0 0174
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,7,3 0 0241
-ct 7,8,1 0 0242
-Po 7,9 0 0243
-Cs 7,7 0 0244
-Ye 7,9 0 0245
-bb 4,9,2 0 0246
-sc 7,9,3 0 0247
-ad 5,9 0 0250
-co 11,9 0 0251
-Of 6,9 0 0252
-Fo 10,6 0 0253
-tno 8,5 0 0254
-- 5,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,9 0 0257
-de 5,8 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 7,7,3 0 0265
-ps 7,9,3 0 0266
-pc 4,5 0 0267
-ac 4,1,3 0 0270
-S1 4,9 0 0271
-Om 6,9 0 0272
-Fc 10,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 7,7,2 0 0277
-`A 8,12 0 0300
-'A 8,12 0 0301
-^A 8,12 0 0302
-~A 8,12 0 0303
-:A 8,11 0 0304
-oA 8,12 0 0305
-AE 11,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,11 0 0317
--D 9,9 0 0320
-~N 10,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,11 0 0326
-tmu 8,6 0 0327
-/O 9,9 0 0330
-`U 8,12 0 0331
-'U 8,12 0 0332
-^U 8,12 0 0333
-:U 8,11 0 0334
-'Y 7,12 0 0335
-TP 8,9 0 0336
-ss 7,9 0 0337
-`a 6,10 0 0340
-'a 6,10 0 0341
-^a 6,10 0 0342
-~a 6,10 0 0343
-:a 6,9 0 0344
-oa 6,10 0 0345
-ae 10,7 0 0346
-,c 7,7,3 0 0347
-`e 7,10 0 0350
-'e 7,10 0 0351
-^e 7,10 0 0352
-:e 7,9 0 0353
-`i 3,10 0 0354
-'i 3,10 0 0355
-^i 3,10 0 0356
-:i 3,9 0 0357
-Sd 7,10 0 0360
-~n 7,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,10 0 0364
-~o 7,10 0 0365
-:o 7,9 0 0366
-tdi 8,6 0 0367
-/o 7,8 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,10 0 0373
-:u 7,9 0 0374
-'y 7,10,3 0 0375
-Tp 7,9,3 0 0376
-:y 7,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/HI b/contrib/groff/font/devX75-12/HI
deleted file mode 100644
index de99f2ec25d8..000000000000
--- a/contrib/groff/font/devX75-12/HI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HI
-spacewidth 4
-charset
---- 10,9 0 00
---- 4,1 0 040
-! 3,9 0 041
-" 5,9 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,9,1 0 044
-Do "
-% 11,9 0 045
-& 9,9 0 046
-' 3,9 0 047
-cq "
-( 4,9,3 0 050
-) 4,9,3 0 051
-* 5,9 0 052
-+ 7,6 0 053
-, 3,1,2 0 054
-\- 5,4 0 055
-. 3,1 0 056
-/ 4,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 8,6 0 074
-= 7,5 0 075
-> 8,6 0 076
-? 7,9 0 077
-@ 12,9,1 0 0100
-at "
-A 9,9 0 0101
-B 8,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 8,9 0 0107
-H 10,9 0 0110
-I 4,9 0 0111
-J 8,9 0 0112
-K 8,9 0 0113
-L 7,9 0 0114
-M 12,9 0 0115
-N 10,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9 0 0121
-R 8,9 0 0122
-S 8,9 0 0123
-T 7,9 0 0124
-U 9,9 0 0125
-V 8,9 0 0126
-W 11,9 0 0127
-X 9,9 0 0130
-Y 8,9 0 0131
-Z 9,9 0 0132
-[ 4,9,3 0 0133
-lB "
-\ 4,9 0 0134
-rs "
-] 4,9,3 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 7,0,3 0 0137
-` 2,10 0 0140
-oq "
-a 7,7 0 0141
-b 7,9 0 0142
-c 6,7 0 0143
-d 7,9 0 0144
-e 6,7 0 0145
-f 3,9 0 0146
-g 7,7,3 0 0147
-h 7,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 6,9 0 0153
-l 3,9 0 0154
-m 9,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 4,7 0 0162
-s 6,7 0 0163
-t 4,9 0 0164
-u 7,7 0 0165
-v 6,7 0 0166
-w 9,7 0 0167
-x 6,7 0 0170
-y 6,7,3 0 0171
-z 6,7 0 0172
-{ 5,9,3 0 0173
-lC "
-| 4,9,3 0 0174
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,6,3 0 0241
-ct 8,8,1 0 0242
-Po 8,9 0 0243
-Cs 7,7 0 0244
-Ye 7,9 0 0245
-bb 4,9,2 0 0246
-sc 7,9,3 0 0247
-ad 3,9 0 0250
-co 11,9 0 0251
-Of 5,9 0 0252
-Fo 7,6 0 0253
-tno 8,6 0 0254
-- 5,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,9 0 0257
-de 5,8 0 0260
-t+- 7,7 0 0261
-S2 4,8 0 0262
-S3 4,8 0 0263
-aa 2,10 0 0264
-mc 7,7,3 0 0265
-ps 8,9,3 0 0266
-pc 3,4 0 0267
-ac 3,1,3 0 0270
-S1 4,8 0 0271
-Om 5,9 0 0272
-Fc 7,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 7,6,3 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,11 0 0304
-oA 9,12 0 0305
-AE 11,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 4,12 0 0314
-'I 4,12 0 0315
-^I 4,12 0 0316
-:I 4,11 0 0317
--D 9,9 0 0320
-~N 10,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,11 0 0326
-tmu 7,6 0 0327
-/O 10,9 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,11 0 0334
-'Y 8,12 0 0335
-TP 8,9 0 0336
-ss 7,9 0 0337
-`a 7,10 0 0340
-'a 7,10 0 0341
-^a 7,10 0 0342
-~a 7,10 0 0343
-:a 7,9 0 0344
-oa 7,10 0 0345
-ae 11,7 0 0346
-,c 6,7,3 0 0347
-`e 6,10 0 0350
-'e 6,10 0 0351
-^e 6,10 0 0352
-:e 6,9 0 0353
-`i 3,10 0 0354
-'i 3,10 0 0355
-^i 3,10 0 0356
-:i 3,9 0 0357
-Sd 7,11 0 0360
-~n 7,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,10 0 0364
-~o 7,10 0 0365
-:o 7,9 0 0366
-tdi 7,6 0 0367
-/o 7,7 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,10 0 0373
-:u 7,9 0 0374
-'y 6,10,3 0 0375
-Tp 7,9,3 0 0376
-:y 7,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/HR b/contrib/groff/font/devX75-12/HR
deleted file mode 100644
index 013e7b2fdcc9..000000000000
--- a/contrib/groff/font/devX75-12/HR
+++ /dev/null
@@ -1,213 +0,0 @@
-name HR
-spacewidth 4
-charset
---- 9,9 0 00
---- 4,1 0 040
-! 3,9 0 041
-" 5,9 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 7,9,1 0 044
-Do "
-% 11,9 0 045
-& 9,9 0 046
-' 3,9 0 047
-cq "
-( 4,9,3 0 050
-) 4,9,3 0 051
-* 5,9 0 052
-+ 7,6 0 053
-, 4,1,2 0 054
-\- 5,4 0 055
-. 3,1 0 056
-/ 4,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 7,9 0 077
-@ 12,9,1 0 0100
-at "
-A 9,9 0 0101
-B 8,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 3,9 0 0111
-J 7,9 0 0112
-K 8,9 0 0113
-L 7,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 10,9 0 0117
-P 8,9 0 0120
-Q 10,9 0 0121
-R 8,9 0 0122
-S 8,9 0 0123
-T 7,9 0 0124
-U 8,9 0 0125
-V 9,9 0 0126
-W 11,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 3,9,3 0 0133
-lB "
-\ 4,9 0 0134
-rs "
-] 3,9,3 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 7,0,2 0 0137
-` 2,10 0 0140
-oq "
-a 7,7 0 0141
-b 7,9 0 0142
-c 7,7 0 0143
-d 7,9 0 0144
-e 7,7 0 0145
-f 3,9 0 0146
-g 7,7,3 0 0147
-h 7,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 6,9 0 0153
-l 3,9 0 0154
-m 9,7 0 0155
-n 7,7 0 0156
-o 7,7 0 0157
-p 7,7,3 0 0160
-q 7,7,3 0 0161
-r 4,7 0 0162
-s 6,7 0 0163
-t 3,9 0 0164
-u 7,7 0 0165
-v 7,7 0 0166
-w 9,7 0 0167
-x 6,7 0 0170
-y 7,7,3 0 0171
-z 6,7 0 0172
-{ 4,9,3 0 0173
-lC "
-| 3,9,3 0 0174
-ba "
-} 4,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 3,7,3 0 0241
-ct 7,8,1 0 0242
-Po 7,9 0 0243
-Cs 7,7 0 0244
-Ye 7,9 0 0245
-bb 3,9,2 0 0246
-sc 6,9,3 0 0247
-ad 3,9 0 0250
-co 11,9 0 0251
-Of 5,9 0 0252
-Fo 7,6 0 0253
-tno 8,6 0 0254
-- 5,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,9 0 0257
-de 5,8 0 0260
-t+- 7,7 0 0261
-S2 4,8 0 0262
-S3 4,8 0 0263
-aa 2,10 0 0264
-mc 7,7,3 0 0265
-ps 7,9,3 0 0266
-pc 3,4 0 0267
-ac 3,1,3 0 0270
-S1 4,8 0 0271
-Om 5,9 0 0272
-Fc 7,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 7,6,3 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,11 0 0304
-oA 9,12 0 0305
-AE 11,9 0 0306
-,C 9,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 3,12 0 0314
-'I 3,12 0 0315
-^I 3,12 0 0316
-:I 3,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 10,12 0 0322
-'O 10,12 0 0323
-^O 10,12 0 0324
-~O 10,12 0 0325
-:O 10,11 0 0326
-tmu 7,6 0 0327
-/O 10,10,1 0 0330
-`U 8,12 0 0331
-'U 8,12 0 0332
-^U 8,12 0 0333
-:U 8,11 0 0334
-'Y 9,12 0 0335
-TP 8,9 0 0336
-ss 7,9 0 0337
-`a 7,10 0 0340
-'a 7,10 0 0341
-^a 7,10 0 0342
-~a 7,10 0 0343
-:a 7,9 0 0344
-oa 7,10 0 0345
-ae 11,7 0 0346
-,c 7,7,3 0 0347
-`e 7,10 0 0350
-'e 7,10 0 0351
-^e 7,10 0 0352
-:e 7,9 0 0353
-`i 3,10 0 0354
-'i 3,10 0 0355
-^i 3,10 0 0356
-:i 3,9 0 0357
-Sd 7,10 0 0360
-~n 7,10 0 0361
-`o 7,10 0 0362
-'o 7,10 0 0363
-^o 7,10 0 0364
-~o 7,10 0 0365
-:o 7,9 0 0366
-tdi 7,6 0 0367
-/o 7,7 0 0370
-`u 7,10 0 0371
-'u 7,10 0 0372
-^u 7,10 0 0373
-:u 7,9 0 0374
-'y 7,10,3 0 0375
-Tp 7,9,3 0 0376
-:y 7,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/Makefile.sub b/contrib/groff/font/devX75-12/Makefile.sub
deleted file mode 100644
index 37f4b7cba358..000000000000
--- a/contrib/groff/font/devX75-12/Makefile.sub
+++ /dev/null
@@ -1,2 +0,0 @@
-DEV=X75-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
diff --git a/contrib/groff/font/devX75-12/NB b/contrib/groff/font/devX75-12/NB
deleted file mode 100644
index 5b23c8a38d96..000000000000
--- a/contrib/groff/font/devX75-12/NB
+++ /dev/null
@@ -1,213 +0,0 @@
-name NB
-spacewidth 4
-charset
---- 11,9 0 00
---- 4,1 0 040
-! 4,9 0 041
-" 6,9 0 042
-dq "
-# 8,9 0 043
-sh "
-$ 7,10,1 0 044
-Do "
-% 13,9 0 045
-& 11,9 0 046
-' 4,9 0 047
-cq "
-( 5,9,2 0 050
-) 5,9,2 0 051
-* 6,9 0 052
-+ 8,7 0 053
-, 4,2,2 0 054
-\- 4,4 0 055
-. 4,2 0 056
-/ 4,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 4,6 0 072
-; 4,6,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 7,9 0 077
-@ 11,9 0 0100
-at "
-A 11,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 10,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 10,9 0 0107
-H 11,9 0 0110
-I 5,9 0 0111
-J 8,9 0 0112
-K 10,9 0 0113
-L 9,9 0 0114
-M 12,9 0 0115
-N 11,9 0 0116
-O 10,9 0 0117
-P 9,9 0 0120
-Q 10,9,2 0 0121
-R 10,9 0 0122
-S 8,9 0 0123
-T 9,9 0 0124
-U 10,9 0 0125
-V 11,9 0 0126
-W 14,9 0 0127
-X 10,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 5,9,2 0 0133
-lB "
-\ 6,9 0 0134
-rs "
-] 5,9,2 0 0135
-rB "
-^ 6,9 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 5,9 0 0140
-oq "
-a 8,6 0 0141
-b 8,9 0 0142
-c 7,6 0 0143
-d 9,9 0 0144
-e 7,6 0 0145
-f 5,9 0 0146
-g 7,7,3 0 0147
-h 9,9 0 0150
-i 5,9 0 0151
-j 3,9,3 0 0152
-k 8,9 0 0153
-l 5,9 0 0154
-m 13,6 0 0155
-n 9,6 0 0156
-o 8,6 0 0157
-p 8,6,3 0 0160
-q 8,6,3 0 0161
-r 6,6 0 0162
-s 6,6 0 0163
-t 5,9 0 0164
-u 9,6 0 0165
-v 7,6 0 0166
-w 11,6 0 0167
-x 8,6 0 0170
-y 7,6,3 0 0171
-z 7,6 0 0172
-{ 5,9,2 0 0173
-lC "
-| 8,9 0 0174
-ba "
-} 5,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 4,6,3 0 0241
-ct 7,7,1 0 0242
-Po 8,9 0 0243
-Cs 8,8 0 0244
-Ye 9,9 0 0245
-bb 8,9 0 0246
-sc 6,9,1 0 0247
-ad 5,9 0 0250
-co 10,9 0 0251
-Of 6,9 0 0252
-Fo 8,6 0 0253
-tno 7,5 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 6,8 0 0257
-de 5,9 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 5,9 0 0264
-mc 9,6,3 0 0265
-ps 10,9 0 0266
-pc 3,5 0 0267
-ac 5,0,3 0 0270
-S1 4,9 0 0271
-Om 6,9 0 0272
-Fc 8,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 7,6,3 0 0277
-`A 11,12 0 0300
-'A 11,12 0 0301
-^A 11,12 0 0302
-~A 11,12 0 0303
-:A 11,12 0 0304
-oA 11,12 0 0305
-AE 14,9 0 0306
-,C 9,9,3 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,12 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,12 0 0317
--D 10,9 0 0320
-~N 11,12 0 0321
-`O 10,12 0 0322
-'O 10,12 0 0323
-^O 10,12 0 0324
-~O 10,12 0 0325
-:O 10,12 0 0326
-tmu 8,7 0 0327
-/O 10,9 0 0330
-`U 10,12 0 0331
-'U 10,12 0 0332
-^U 10,12 0 0333
-:U 10,12 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 8,9 0 0337
-`a 8,9 0 0340
-'a 8,9 0 0341
-^a 8,9 0 0342
-~a 8,9 0 0343
-:a 8,9 0 0344
-oa 8,9 0 0345
-ae 11,6 0 0346
-,c 7,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,9 0 0353
-`i 5,9 0 0354
-'i 5,9 0 0355
-^i 5,9 0 0356
-:i 5,9 0 0357
-Sd 8,9 0 0360
-~n 9,9 0 0361
-`o 8,9 0 0362
-'o 8,9 0 0363
-^o 8,9 0 0364
-~o 8,9 0 0365
-:o 8,9 0 0366
-tdi 8,7 0 0367
-/o 8,7,1 0 0370
-`u 9,9 0 0371
-'u 9,9 0 0372
-^u 9,9 0 0373
-:u 9,9 0 0374
-'y 7,9,3 0 0375
-Tp 8,9,3 0 0376
-:y 7,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/NBI b/contrib/groff/font/devX75-12/NBI
deleted file mode 100644
index b7c038ce50a2..000000000000
--- a/contrib/groff/font/devX75-12/NBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 11,9 0 00
---- 4,1 0 040
-! 5,9 0 041
-" 6,9 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 7,10,1 0 044
-Do "
-% 12,9 0 045
-& 12,9 0 046
-' 4,9 0 047
-cq "
-( 5,9,2 0 050
-) 5,9,2 0 051
-* 6,9 0 052
-+ 8,7 0 053
-, 3,2,2 0 054
-\- 4,4 0 055
-. 3,2 0 056
-/ 6,9 0 057
-sl "
-0 7,9 0 060
-1 7,9 0 061
-2 7,9 0 062
-3 7,9 0 063
-4 7,9 0 064
-5 7,9 0 065
-6 7,9 0 066
-7 7,9 0 067
-8 7,9 0 070
-9 7,9 0 071
-: 4,6 0 072
-; 4,6,2 0 073
-< 7,7 0 074
-= 7,5 0 075
-> 7,7 0 076
-? 6,9 0 077
-@ 11,9 0 0100
-at "
-A 10,9 0 0101
-B 9,9 0 0102
-C 9,9 0 0103
-D 10,9 0 0104
-E 9,9 0 0105
-F 8,9 0 0106
-G 10,9 0 0107
-H 11,9 0 0110
-I 6,9 0 0111
-J 8,9 0 0112
-K 10,9 0 0113
-L 9,9 0 0114
-M 14,9 0 0115
-N 11,9 0 0116
-O 10,9 0 0117
-P 9,9 0 0120
-Q 10,9,2 0 0121
-R 10,9 0 0122
-S 8,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 10,9 0 0126
-W 13,9 0 0127
-X 11,9 0 0130
-Y 9,9 0 0131
-Z 9,9 0 0132
-[ 6,9,2 0 0133
-lB "
-\ 6,9 0 0134
-rs "
-] 6,9,2 0 0135
-rB "
-^ 8,9 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 4,9 0 0140
-oq "
-a 8,6 0 0141
-b 7,9 0 0142
-c 6,6 0 0143
-d 8,9 0 0144
-e 7,6 0 0145
-f 5,9,3 0 0146
-g 7,8,3 0 0147
-h 8,9 0 0150
-i 4,9 0 0151
-j 4,9,3 0 0152
-k 8,9 0 0153
-l 4,9 0 0154
-m 12,6 0 0155
-n 8,6 0 0156
-o 7,6 0 0157
-p 8,6,3 0 0160
-q 8,6,3 0 0161
-r 6,6 0 0162
-s 7,6 0 0163
-t 5,8 0 0164
-u 8,6 0 0165
-v 7,6 0 0166
-w 11,6 0 0167
-x 7,6 0 0170
-y 6,6,3 0 0171
-z 7,6 0 0172
-{ 6,9,2 0 0173
-lC "
-| 8,9 0 0174
-ba "
-} 6,9,2 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ti "
---- 4,1 0 0240
-r! 5,6,3 0 0241
-ct 7,7,1 0 0242
-Po 9,9 0 0243
-Cs 8,8 0 0244
-Ye 10,9 0 0245
-bb 8,9 0 0246
-sc 6,9,2 0 0247
-ad 4,9 0 0250
-co 10,9 0 0251
-Of 6,9 0 0252
-Fo 9,6 0 0253
-tno 7,5 0 0254
-- 4,4 0 0255
-hy "
-rg 10,9 0 0256
-a- 5,8 0 0257
-de 5,9 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 8,6,3 0 0265
-ps 8,9 0 0266
-pc 5,5 0 0267
-ac 4,0,3 0 0270
-S1 4,9 0 0271
-Om 5,9 0 0272
-Fc 9,6 0 0273
-14 10,9 0 0274
-12 10,9 0 0275
-34 10,9 0 0276
-r? 6,6,3 0 0277
-`A 10,12 0 0300
-'A 10,12 0 0301
-^A 10,12 0 0302
-~A 10,12 0 0303
-:A 10,12 0 0304
-oA 10,12 0 0305
-AE 12,9 0 0306
-,C 9,9,3 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,12 0 0313
-`I 6,12 0 0314
-'I 6,12 0 0315
-^I 6,12 0 0316
-:I 6,12 0 0317
--D 10,9 0 0320
-~N 11,12 0 0321
-`O 10,12 0 0322
-'O 10,12 0 0323
-^O 10,12 0 0324
-~O 10,12 0 0325
-:O 10,12 0 0326
-tmu 8,7 0 0327
-/O 10,9 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,12 0 0334
-'Y 9,12 0 0335
-TP 9,9 0 0336
-ss 9,9,2 0 0337
-`a 8,9 0 0340
-'a 8,9 0 0341
-^a 8,10 0 0342
-~a 8,9 0 0343
-:a 8,9 0 0344
-oa 8,10 0 0345
-ae 11,6 0 0346
-,c 6,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,10 0 0352
-:e 7,9 0 0353
-`i 4,9 0 0354
-'i 4,9 0 0355
-^i 4,10 0 0356
-:i 4,9 0 0357
-Sd 7,9 0 0360
-~n 8,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,10 0 0364
-~o 7,9 0 0365
-:o 7,9 0 0366
-tdi 8,7 0 0367
-/o 7,6 0 0370
-`u 8,9 0 0371
-'u 8,9 0 0372
-^u 8,10 0 0373
-:u 8,9 0 0374
-'y 6,9,3 0 0375
-Tp 8,9,3 0 0376
-:y 6,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/NI b/contrib/groff/font/devX75-12/NI
deleted file mode 100644
index d7ac74fac613..000000000000
--- a/contrib/groff/font/devX75-12/NI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NI
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 4,9 0 041
-" 6,9 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 10,9 0 045
-& 10,9 0 046
-' 4,9 0 047
-cq "
-( 5,9,2 0 050
-) 5,9,2 0 051
-* 7,9 0 052
-+ 8,7 0 053
-, 2,2,1 0 054
-\- 4,4 0 055
-. 2,2 0 056
-/ 8,9,1 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 3,6 0 072
-; 3,6,1 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 5,9 0 077
-@ 11,9 0 0100
-at "
-A 8,9 0 0101
-B 8,9 0 0102
-C 9,9 0 0103
-D 10,9 0 0104
-E 9,9 0 0105
-F 9,9 0 0106
-G 9,9 0 0107
-H 10,9 0 0110
-I 5,9 0 0111
-J 7,9 0 0112
-K 9,9 0 0113
-L 8,9 0 0114
-M 13,9 0 0115
-N 11,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9,2 0 0121
-R 10,9 0 0122
-S 9,9 0 0123
-T 8,9 0 0124
-U 8,9 0 0125
-V 9,9 0 0126
-W 13,9 0 0127
-X 10,9 0 0130
-Y 8,9 0 0131
-Z 9,9 0 0132
-[ 6,9,2 0 0133
-lB "
-\ 8,9 0 0134
-rs "
-] 6,9,2 0 0135
-rB "
-^ 6,9 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 4,9 0 0140
-oq "
-a 8,6 0 0141
-b 7,9 0 0142
-c 6,6 0 0143
-d 8,9 0 0144
-e 6,6 0 0145
-f 4,9,3 0 0146
-g 6,7,3 0 0147
-h 8,9 0 0150
-i 4,9 0 0151
-j 3,9,3 0 0152
-k 7,9 0 0153
-l 4,9 0 0154
-m 12,6 0 0155
-n 8,6 0 0156
-o 6,6 0 0157
-p 7,6,3 0 0160
-q 7,6,3 0 0161
-r 5,6 0 0162
-s 6,6 0 0163
-t 4,8 0 0164
-u 8,6 0 0165
-v 7,6 0 0166
-w 10,6 0 0167
-x 6,6 0 0170
-y 6,6,3 0 0171
-z 6,6 0 0172
-{ 5,9,2 0 0173
-lC "
-| 6,9 0 0174
-ba "
-} 5,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,7,2 0 0241
-ct 6,7,1 0 0242
-Po 8,9 0 0243
-Cs 9,8 0 0244
-Ye 9,9 0 0245
-bb 6,9 0 0246
-sc 6,9,2 0 0247
-ad 5,9 0 0250
-co 10,9 0 0251
-Of 5,9 0 0252
-Fo 7,5 0 0253
-tno 7,5 0 0254
-- 4,4 0 0255
-hy "
-rg 10,9 0 0256
-a- 5,8 0 0257
-de 5,9 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 8,6,3 0 0265
-ps 9,9 0 0266
-pc 5,5 0 0267
-ac 4,0,3 0 0270
-S1 4,9 0 0271
-Om 4,9 0 0272
-Fc 7,5 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 5,7,2 0 0277
-`A 8,12 0 0300
-'A 8,12 0 0301
-^A 8,12 0 0302
-~A 8,12 0 0303
-:A 8,12 0 0304
-oA 8,12 0 0305
-AE 13,9 0 0306
-,C 9,9,3 0 0307
-`E 9,12 0 0310
-'E 9,12 0 0311
-^E 9,12 0 0312
-:E 9,12 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,12 0 0317
--D 10,9 0 0320
-~N 11,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 8,7 0 0327
-/O 9,9 0 0330
-`U 8,12 0 0331
-'U 8,12 0 0332
-^U 8,12 0 0333
-:U 8,12 0 0334
-'Y 8,12 0 0335
-TP 8,9 0 0336
-ss 8,9,3 0 0337
-`a 8,9 0 0340
-'a 8,9 0 0341
-^a 8,9 0 0342
-~a 8,9 0 0343
-:a 8,9 0 0344
-oa 8,10 0 0345
-ae 9,6 0 0346
-,c 6,6,3 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,9 0 0353
-`i 4,9 0 0354
-'i 4,9 0 0355
-^i 4,9 0 0356
-:i 4,9 0 0357
-Sd 6,9 0 0360
-~n 8,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,9 0 0366
-tdi 8,7 0 0367
-/o 6,6 0 0370
-`u 8,9 0 0371
-'u 8,9 0 0372
-^u 8,9 0 0373
-:u 8,9 0 0374
-'y 6,9,3 0 0375
-Tp 7,9,3 0 0376
-:y 8,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/NR b/contrib/groff/font/devX75-12/NR
deleted file mode 100644
index 2658838148f1..000000000000
--- a/contrib/groff/font/devX75-12/NR
+++ /dev/null
@@ -1,213 +0,0 @@
-name NR
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 4,9 0 041
-" 6,9 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 11,9 0 045
-& 9,9 0 046
-' 4,9 0 047
-cq "
-( 4,9,2 0 050
-) 4,9,2 0 051
-* 6,9 0 052
-+ 8,7 0 053
-, 4,2,1 0 054
-\- 4,4 0 055
-. 4,2 0 056
-/ 4,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 4,6 0 072
-; 4,6,1 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 5,9 0 077
-@ 10,9 0 0100
-at "
-A 10,9 0 0101
-B 8,9 0 0102
-C 9,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 10,9 0 0107
-H 10,9 0 0110
-I 6,9 0 0111
-J 7,9 0 0112
-K 9,9 0 0113
-L 8,9 0 0114
-M 12,9 0 0115
-N 10,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 7,9 0 0123
-T 8,9 0 0124
-U 10,9 0 0125
-V 10,9 0 0126
-W 12,9 0 0127
-X 9,9 0 0130
-Y 10,9 0 0131
-Z 7,9 0 0132
-[ 4,9,2 0 0133
-lB "
-\ 6,9 0 0134
-rs "
-] 4,9,2 0 0135
-rB "
-^ 6,9 0 0136
-a^ "
-ha "
-_ 8,0,2 0 0137
-` 3,9 0 0140
-oq "
-a 7,6 0 0141
-b 6,9 0 0142
-c 6,6 0 0143
-d 7,9 0 0144
-e 6,6 0 0145
-f 4,9 0 0146
-g 7,7,3 0 0147
-h 8,9 0 0150
-i 4,9 0 0151
-j 4,9,3 0 0152
-k 7,9 0 0153
-l 4,9 0 0154
-m 12,6 0 0155
-n 8,6 0 0156
-o 6,6 0 0157
-p 7,6,3 0 0160
-q 6,6,3 0 0161
-r 6,6 0 0162
-s 6,6 0 0163
-t 4,8 0 0164
-u 8,6 0 0165
-v 6,6 0 0166
-w 10,6 0 0167
-x 7,6 0 0170
-y 6,6,3 0 0171
-z 6,6 0 0172
-{ 4,9,2 0 0173
-lC "
-| 8,9 0 0174
-ba "
-} 4,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,7,2 0 0241
-ct 7,7,1 0 0242
-Po 8,9 0 0243
-Cs 8,8 0 0244
-Ye 8,9 0 0245
-bb 8,9 0 0246
-sc 6,9,2 0 0247
-ad 4,9 0 0250
-co 11,9 0 0251
-Of 5,9 0 0252
-Fo 7,6 0 0253
-tno 7,5 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 5,8 0 0257
-de 5,9 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 3,9 0 0264
-mc 8,6,3 0 0265
-ps 8,9,2 0 0266
-pc 4,5 0 0267
-ac 4,0,3 0 0270
-S1 4,9 0 0271
-Om 5,9 0 0272
-Fc 7,6 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 5,7,2 0 0277
-`A 10,12 0 0300
-'A 10,12 0 0301
-^A 10,12 0 0302
-~A 10,12 0 0303
-:A 10,12 0 0304
-oA 10,12 0 0305
-AE 13,9 0 0306
-,C 9,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,12 0 0313
-`I 6,12 0 0314
-'I 6,12 0 0315
-^I 6,12 0 0316
-:I 6,12 0 0317
--D 9,9 0 0320
-~N 10,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 8,7 0 0327
-/O 9,9 0 0330
-`U 10,12 0 0331
-'U 10,12 0 0332
-^U 10,12 0 0333
-:U 10,12 0 0334
-'Y 10,12 0 0335
-TP 8,9 0 0336
-ss 7,9 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,9 0 0344
-oa 7,9 0 0345
-ae 10,6 0 0346
-,c 6,6,3 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,9 0 0353
-`i 4,9 0 0354
-'i 4,9 0 0355
-^i 4,9 0 0356
-:i 4,9 0 0357
-Sd 6,9 0 0360
-~n 8,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 8,7 0 0367
-/o 6,7,1 0 0370
-`u 8,9 0 0371
-'u 8,9 0 0372
-^u 8,9 0 0373
-:u 8,9 0 0374
-'y 6,9,3 0 0375
-Tp 7,9,3 0 0376
-:y 6,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/S b/contrib/groff/font/devX75-12/S
deleted file mode 100644
index ad70dc6f5cb6..000000000000
--- a/contrib/groff/font/devX75-12/S
+++ /dev/null
@@ -1,221 +0,0 @@
-name S
-special
-spacewidth 3
-charset
---- 3,1 0 040
-! 4,9 0 041
-fa 9,9 0 042
-# 7,9 0 043
-sh "
-te 7,9 0 044
-% 10,9 0 045
-& 10,9 0 046
-st 6,6 0 047
-( 5,9,3 0 050
-) 5,9,3 0 051
-** 6,7 0 052
-+ 7,6 0 053
-pl "
-, 3,1,2 0 054
-\- 7,4 0 055
-mi "
-. 3,1 0 056
-/ 3,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-eq "
-> 7,6 0 076
-? 6,9 0 077
-=~ 7,6 0 0100
-*A 9,9 0 0101
-*B 8,9 0 0102
-*X 9,9 0 0103
-*D 8,9 0 0104
-*E 8,9 0 0105
-*F 10,9 0 0106
-*G 8,9 0 0107
-*Y 9,9 0 0110
-*I 4,9 0 0111
-+h 8,9 0 0112
-*K 9,9 0 0113
-*L 9,9 0 0114
-*M 11,9 0 0115
-*N 9,9 0 0116
-*O 9,9 0 0117
-*P 9,9 0 0120
-*H 9,9 0 0121
-*R 7,9 0 0122
-*S 7,9 0 0123
-*T 8,9 0 0124
---- 9,9 0 0125
-ts 7,6,3 0 0126
-*W 10,9 0 0127
-*C 8,9 0 0130
-*Q 10,9 0 0131
-*Z 8,9 0 0132
-[ 5,9,3 0 0133
-lB "
-tf 9,6 0 0134
-3d "
-] 5,9,3 0 0135
-rB "
-pp 8,9 0 0136
-_ 6,0,3 0 0137
-radicalex 6,12 0 0140
-*a 8,6 0 0141
-*b 7,10,3 0 0142
-*x 7,6,3 0 0143
-*d 7,10 0 0144
-*e 6,6 0 0145
-*f 8,8,3 0 0146
-*g 7,6,3 0 0147
-*y 8,6,3 0 0150
-*i 3,6 0 0151
-+f 8,6,3 0 0152
-*k 7,6 0 0153
-*l 7,9 0 0154
-*m 8,6,3 0 0155
-*n 7,6 0 0156
-*o 7,6 0 0157
-*p 7,6 0 0160
-*h 7,9 0 0161
-*r 7,6,3 0 0162
-*s 8,6 0 0163
-*t 6,6 0 0164
-*u 8,6 0 0165
-+p 9,7 0 0166
-*w 9,6 0 0167
-*c 6,11,3 0 0170
-*q 9,6,3 0 0171
-*z 6,10,3 0 0172
-lC 6,9,3 0 0173
-{ "
-ba 3,9,3 0 0174
-| "
-rC 6,9,3 0 0175
-} "
-ap 7,5 0 0176
-*U 8,9 0 0241
-fm 3,9 0 0242
-<= 7,7 0 0243
-f/ 4,9 0 0244
-if 9,5 0 0245
-Fn 6,9,3 0 0246
-CL 9,6,1 0 0247
-DI 7,6 0 0250
-HE 9,6 0 0251
-SP 9,6,1 0 0252
-<> 13,6 0 0253
-<- 12,6 0 0254
-ua 7,12,4 0 0255
-arrowverttp "
--> 12,6 0 0256
-da 7,12,3 0 0257
-arrowvertbt "
-de 5,9 0 0260
-+- 7,7 0 0261
-sd 5,9 0 0262
->= 7,7 0 0263
-mu 7,6 0 0264
-pt 9,5 0 0265
-pd 6,10 0 0266
-bu 6,5 0 0267
-di 7,6 0 0270
-!= 7,7 0 0271
-== 7,6 0 0272
-~= 7,6 0 0273
-~~ "
---- 11,1 0 0274
-arrowvertex 7,12,4 0 0275
-an 13,4 0 0276
-CR 8,8 0 0277
-Ah 10,9 0 0300
-Im 9,10,1 0 0301
-Re 10,10 0 0302
-wp 10,8,3 0 0303
-c* 10,9 0 0304
-c+ 10,9 0 0305
-es 10,9 0 0306
-ca 10,6 0 0307
-cu 10,6 0 0310
-sp 9,6 0 0311
-ip 9,6,2 0 0312
-nb 9,7,1 0 0313
-sb 9,6 0 0314
-ib 9,6,2 0 0315
-mo 8,6 0 0316
-nm 8,7,1 0 0317
-/_ 10,9 0 0320
-gr 9,9 0 0321
-rg 10,9 0 0322
-co 10,9 0 0323
-tm 11,9 0 0324
---- 10,10,1 0 0325
-sr 7,12 0 0326
-sqrt "
-md 3,4 0 0327
-no 9,4 0 0330
-AN 8,6 0 0331
-OR 8,6 0 0332
-hA 13,6 0 0333
-lA 12,6 0 0334
-uA 8,11,1 0 0335
-rA 12,6 0 0336
-dA 8,12 0 0337
-lz 6,9 0 0340
-la 4,10,1 0 0341
---- 10,9 0 0342
---- 10,9 0 0343
---- 10,9 0 0344
---- 9,10,1 0 0345
-parenlefttp 5,12,4 0 0346
-parenleftex 5,12,4 0 0347
-parenleftbt 5,12,4 0 0350
-bracketlefttp 5,12,4 0 0351
-lc "
-bracketleftex 5,12,4 0 0352
-bracketleftbt 5,12,3 0 0353
-lf "
-bracelefttp 6,12,4 0 0354
-lt "
-braceleftmid 6,12,4 0 0355
-lk "
-braceleftbt 6,12,3 0 0356
-lb "
-bracerightex 6,12,4 0 0357
-braceleftex "
-braceex "
-bv "
-ra 4,10,2 0 0361
-is 4,12,3 0 0362
-integral "
---- 9,12,4 0 0363
---- 9,12,4 0 0364
---- 9,12,3 0 0365
-parenrighttp 5,12,4 0 0366
-parenrightex 5,12,4 0 0367
-parenrightbt 5,12,4 0 0370
-bracketrighttp 5,12,4 0 0371
-rc "
-bracketrightex 5,12,4 0 0372
-bracketrightbt 5,12,3 0 0373
-rf "
-bracerighttp 6,12,4 0 0374
-rt "
-bracerightmid 6,12,4 0 0375
-rk "
-bracerightbt 6,12,3 0 0376
-rb "
diff --git a/contrib/groff/font/devX75-12/TB b/contrib/groff/font/devX75-12/TB
deleted file mode 100644
index 43441084a7b2..000000000000
--- a/contrib/groff/font/devX75-12/TB
+++ /dev/null
@@ -1,213 +0,0 @@
-name TB
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 4,9 0 041
-" 5,9 0 042
-dq "
-# 6,9 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 12,9 0 045
-& 10,9 0 046
-' 3,9 0 047
-cq "
-( 4,9,3 0 050
-) 4,9,3 0 051
-* 6,9 0 052
-+ 7,6 0 053
-, 4,2,2 0 054
-\- 4,4 0 055
-. 4,2 0 056
-/ 4,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 4,6 0 072
-; 4,6,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 8,6 0 076
-? 7,9 0 077
-@ 12,9,2 0 0100
-at "
-A 9,9 0 0101
-B 9,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 9,9 0 0107
-H 10,9 0 0110
-I 5,9 0 0111
-J 7,9,1 0 0112
-K 10,9 0 0113
-L 8,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9,2 0 0121
-R 9,9 0 0122
-S 7,9 0 0123
-T 9,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 12,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 8,9 0 0132
-[ 4,9,3 0 0133
-lB "
-\ 3,9 0 0134
-rs "
-] 4,9,3 0 0135
-rB "
-^ 7,9 0 0136
-a^ "
-ha "
-_ 6,0,3 0 0137
-` 4,9 0 0140
-oq "
-a 7,6 0 0141
-b 6,9 0 0142
-c 6,6 0 0143
-d 6,9 0 0144
-e 7,6 0 0145
-f 4,9 0 0146
-g 6,6,3 0 0147
-h 6,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 7,9 0 0153
-l 3,9 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 7,6 0 0157
-p 6,6,3 0 0160
-q 6,6,3 0 0161
-r 5,6 0 0162
-s 6,6 0 0163
-t 4,8 0 0164
-u 6,6 0 0165
-v 6,6 0 0166
-w 9,6 0 0167
-x 6,6 0 0170
-y 6,6,3 0 0171
-z 6,6 0 0172
-{ 5,9,3 0 0173
-lC "
-| 3,9,3 0 0174
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,6 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,3 0 0241
-ct 6,7,2 0 0242
-Po 6,9 0 0243
-Cs 7,8 0 0244
-Ye 8,9 0 0245
-bb 3,9,3 0 0246
-sc 6,9,3 0 0247
-ad 4,9 0 0250
-co 11,9 0 0251
-Of 4,9 0 0252
-Fo 8,6 0 0253
-tno 8,5 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,8 0 0257
-de 5,9 0 0260
-t+- 7,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 6,6,3 0 0265
-ps 8,9,3 0 0266
-pc 3,5 0 0267
-ac 4,0,3 0 0270
-S1 4,9 0 0271
-Om 4,9 0 0272
-Fc 8,6 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 7,6,3 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,12 0 0304
-oA 9,12 0 0305
-AE 13,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,12 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,12 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 7,6 0 0327
-/O 9,10,1 0 0330
-`U 9,12 0 0331
-'U 9,12 0 0332
-^U 9,12 0 0333
-:U 9,12 0 0334
-'Y 9,12 0 0335
-TP 8,9 0 0336
-ss 8,9 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,9 0 0344
-oa 7,10 0 0345
-ae 8,6 0 0346
-,c 6,6,3 0 0347
-`e 7,9 0 0350
-'e 7,9 0 0351
-^e 7,9 0 0352
-:e 7,9 0 0353
-`i 3,9 0 0354
-'i 3,9 0 0355
-^i 3,9 0 0356
-:i 3,9 0 0357
-Sd 7,9 0 0360
-~n 6,9 0 0361
-`o 7,9 0 0362
-'o 7,9 0 0363
-^o 7,9 0 0364
-~o 7,9 0 0365
-:o 7,9 0 0366
-tdi 7,6 0 0367
-/o 7,7,1 0 0370
-`u 6,9 0 0371
-'u 6,9 0 0372
-^u 6,9 0 0373
-:u 6,9 0 0374
-'y 6,9,3 0 0375
-Tp 6,9,3 0 0376
-:y 6,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/TBI b/contrib/groff/font/devX75-12/TBI
deleted file mode 100644
index 85e2ad6744dd..000000000000
--- a/contrib/groff/font/devX75-12/TBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TBI
-spacewidth 3
-charset
---- 10,9 0 00
---- 3,1 0 040
-! 5,9 0 041
-" 7,9 0 042
-dq "
-# 7,9 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 12,9 0 045
-& 9,9 0 046
-' 4,9 0 047
-cq "
-( 6,9,2 0 050
-) 6,9,2 0 051
-* 6,9 0 052
-+ 7,6 0 053
-, 4,2,1 0 054
-\- 4,4 0 055
-. 4,2 0 056
-/ 5,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 5,6 0 072
-; 5,6,1 0 073
-< 9,7 0 074
-= 8,5 0 075
-> 9,7 0 076
-? 6,9 0 077
-@ 12,9,1 0 0100
-at "
-A 8,9 0 0101
-B 8,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 9,9 0 0107
-H 10,9 0 0110
-I 5,9 0 0111
-J 6,9,1 0 0112
-K 8,9 0 0113
-L 8,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 8,9 0 0120
-Q 9,9,3 0 0121
-R 8,9 0 0122
-S 8,9 0 0123
-T 7,9 0 0124
-U 10,9 0 0125
-V 8,9 0 0126
-W 11,9 0 0127
-X 8,9 0 0130
-Y 7,9 0 0131
-Z 7,9 0 0132
-[ 6,9,2 0 0133
-lB "
-\ 5,9 0 0134
-rs "
-] 7,9,2 0 0135
-rB "
-^ 8,9 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 4,9 0 0140
-oq "
-a 7,6 0 0141
-b 6,9 0 0142
-c 5,6 0 0143
-d 6,9 0 0144
-e 6,6 0 0145
-f 3,9,3 0 0146
-g 5,6,3 0 0147
-h 6,9 0 0150
-i 4,9 0 0151
-j 4,9,3 0 0152
-k 6,9 0 0153
-l 4,9 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,3 0 0160
-q 6,6,3 0 0161
-r 5,6 0 0162
-s 5,6 0 0163
-t 3,7 0 0164
-u 7,6 0 0165
-v 6,6 0 0166
-w 8,6 0 0167
-x 6,6 0 0170
-y 6,6,3 0 0171
-z 6,6,1 0 0172
-{ 6,9,2 0 0173
-lC "
-| 4,9 0 0174
-ba "
-} 6,9,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,3 0 0241
-ct 6,8,2 0 0242
-Po 6,9 0 0243
-Cs 8,7 0 0244
-Ye 6,9 0 0245
-bb 4,9 0 0246
-sc 7,9,3 0 0247
-ad 5,9 0 0250
-co 11,9 0 0251
-Of 6,9 0 0252
-Fo 9,6 0 0253
-tno 8,6 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,8 0 0257
-de 5,9 0 0260
-t+- 7,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 7,6,3 0 0265
-ps 7,9,3 0 0266
-pc 3,5 0 0267
-ac 4,0,3 0 0270
-S1 4,9 0 0271
-Om 6,9 0 0272
-Fc 9,6 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 6,6,3 0 0277
-`A 8,12 0 0300
-'A 8,12 0 0301
-^A 8,12 0 0302
-~A 8,12 0 0303
-:A 8,12 0 0304
-oA 8,12 0 0305
-AE 12,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,12 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,12 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,12 0 0326
-tmu 7,6 0 0327
-/O 9,10,1 0 0330
-`U 10,12 0 0331
-'U 10,12 0 0332
-^U 10,12 0 0333
-:U 10,12 0 0334
-'Y 7,12 0 0335
-TP 8,9 0 0336
-ss 7,9,3 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,9 0 0344
-oa 7,9 0 0345
-ae 10,6 0 0346
-,c 5,6,3 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,9 0 0353
-`i 3,9 0 0354
-'i 3,9 0 0355
-^i 3,9 0 0356
-:i 3,9 0 0357
-Sd 6,9 0 0360
-~n 7,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,9 0 0366
-tdi 7,6 0 0367
-/o 6,7,1 0 0370
-`u 7,9 0 0371
-'u 7,9 0 0372
-^u 7,9 0 0373
-:u 7,9 0 0374
-'y 6,9,3 0 0375
-Tp 6,9,3 0 0376
-:y 6,9,3 0 0377
diff --git a/contrib/groff/font/devX75-12/TI b/contrib/groff/font/devX75-12/TI
deleted file mode 100644
index 598bbacaed85..000000000000
--- a/contrib/groff/font/devX75-12/TI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TI
-spacewidth 3
-charset
---- 9,9 0 00
---- 3,1 0 040
-! 4,9 0 041
-" 5,9 0 042
-dq "
-# 6,9 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 10,9 0 045
-& 9,9 0 046
-' 3,9 0 047
-cq "
-( 4,9,3 0 050
-) 4,9,3 0 051
-* 6,9 0 052
-+ 8,6 0 053
-, 3,1,2 0 054
-\- 4,4 0 055
-. 3,1 0 056
-/ 4,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 4,6 0 072
-; 4,6,2 0 073
-< 8,7 0 074
-= 8,5 0 075
-> 8,7 0 076
-? 6,9 0 077
-@ 12,9,1 0 0100
-at "
-A 8,9 0 0101
-B 8,9 0 0102
-C 7,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 8,9 0 0106
-G 8,9 0 0107
-H 9,9 0 0110
-I 5,9 0 0111
-J 5,9 0 0112
-K 8,9 0 0113
-L 7,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 7,9 0 0117
-P 8,9 0 0120
-Q 7,9,2 0 0121
-R 8,9 0 0122
-S 6,9 0 0123
-T 7,9 0 0124
-U 8,9 0 0125
-V 7,9 0 0126
-W 10,9 0 0127
-X 8,9 0 0130
-Y 7,9 0 0131
-Z 7,9 0 0132
-[ 5,9,2 0 0133
-lB "
-\ 3,9 0 0134
-rs "
-] 5,9,2 0 0135
-rB "
-^ 5,9 0 0136
-a^ "
-ha "
-_ 6,0,3 0 0137
-` 4,9 0 0140
-oq "
-a 6,6 0 0141
-b 6,9 0 0142
-c 5,6 0 0143
-d 6,9 0 0144
-e 6,6 0 0145
-f 4,9,3 0 0146
-g 5,6,3 0 0147
-h 6,9 0 0150
-i 4,9 0 0151
-j 4,9,3 0 0152
-k 6,9 0 0153
-l 3,9 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,3 0 0160
-q 6,6,3 0 0161
-r 4,6 0 0162
-s 5,6 0 0163
-t 4,7 0 0164
-u 6,6 0 0165
-v 6,6 0 0166
-w 9,6 0 0167
-x 6,6 0 0170
-y 6,6,3 0 0171
-z 5,6 0 0172
-{ 5,9,3 0 0173
-lC "
-| 4,9,3 0 0174
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 5,6,3 0 0241
-ct 6,8,2 0 0242
-Po 6,9 0 0243
-Cs 7,7 0 0244
-Ye 6,9 0 0245
-bb 4,9,3 0 0246
-sc 6,9,2 0 0247
-ad 4,8 0 0250
-co 11,9 0 0251
-Of 4,9 0 0252
-Fo 6,6 0 0253
-tno 8,5 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,8 0 0257
-de 5,9 0 0260
-t+- 8,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 6,6,3 0 0265
-ps 7,9,2 0 0266
-pc 3,4 0 0267
-ac 4,0,3 0 0270
-S1 3,9 0 0271
-Om 4,9 0 0272
-Fc 6,6 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 6,6,3 0 0277
-`A 8,12 0 0300
-'A 8,12 0 0301
-^A 8,12 0 0302
-~A 8,12 0 0303
-:A 8,11 0 0304
-oA 8,12 0 0305
-AE 11,9 0 0306
-,C 7,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 5,12 0 0314
-'I 5,12 0 0315
-^I 5,12 0 0316
-:I 5,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 7,12 0 0322
-'O 7,12 0 0323
-^O 7,12 0 0324
-~O 7,12 0 0325
-:O 7,11 0 0326
-tmu 8,6 0 0327
-/O 7,10,1 0 0330
-`U 8,12 0 0331
-'U 8,12 0 0332
-^U 8,12 0 0333
-:U 8,11 0 0334
-'Y 7,12 0 0335
-TP 8,9 0 0336
-ss 6,9,3 0 0337
-`a 7,9 0 0340
-'a 7,9 0 0341
-^a 7,9 0 0342
-~a 7,9 0 0343
-:a 7,8 0 0344
-oa 7,9 0 0345
-ae 9,6 0 0346
-,c 5,6,3 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,8 0 0353
-`i 4,9 0 0354
-'i 4,9 0 0355
-^i 4,9 0 0356
-:i 4,8 0 0357
-Sd 6,9 0 0360
-~n 6,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 8,6 0 0367
-/o 6,7,1 0 0370
-`u 6,9 0 0371
-'u 6,9 0 0372
-^u 6,9 0 0373
-:u 6,8 0 0374
-'y 6,9,3 0 0375
-Tp 6,9,3 0 0376
-:y 6,8,3 0 0377
diff --git a/contrib/groff/font/devX75-12/TR b/contrib/groff/font/devX75-12/TR
deleted file mode 100644
index a62bb376fa66..000000000000
--- a/contrib/groff/font/devX75-12/TR
+++ /dev/null
@@ -1,213 +0,0 @@
-name TR
-spacewidth 3
-charset
---- 9,9 0 00
---- 3,1 0 040
-! 3,9 0 041
-" 5,9 0 042
-dq "
-# 6,8 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 10,9 0 045
-& 10,9 0 046
-' 2,9 0 047
-cq "
-( 5,9,3 0 050
-) 5,9,3 0 051
-* 6,9 0 052
-+ 7,6 0 053
-, 3,1,2 0 054
-\- 4,4 0 055
-. 3,1 0 056
-/ 3,9 0 057
-sl "
-0 6,9 0 060
-1 6,9 0 061
-2 6,9 0 062
-3 6,9 0 063
-4 6,9 0 064
-5 6,9 0 065
-6 6,9 0 066
-7 6,9 0 067
-8 6,9 0 070
-9 6,9 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 7,6 0 074
-= 7,5 0 075
-> 7,6 0 076
-? 5,9 0 077
-@ 11,9,2 0 0100
-at "
-A 9,9 0 0101
-B 8,9 0 0102
-C 8,9 0 0103
-D 9,9 0 0104
-E 8,9 0 0105
-F 7,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 4,9 0 0111
-J 5,9 0 0112
-K 9,9 0 0113
-L 7,9 0 0114
-M 11,9 0 0115
-N 9,9 0 0116
-O 9,9 0 0117
-P 7,9 0 0120
-Q 9,9,2 0 0121
-R 8,9 0 0122
-S 7,9 0 0123
-T 7,9 0 0124
-U 9,9 0 0125
-V 9,9 0 0126
-W 12,9 0 0127
-X 9,9 0 0130
-Y 9,9 0 0131
-Z 8,9 0 0132
-[ 4,9,3 0 0133
-lB "
-\ 3,9 0 0134
-rs "
-] 4,9,3 0 0135
-rB "
-^ 6,9 0 0136
-a^ "
-ha "
-_ 6,0,3 0 0137
-` 4,9 0 0140
-oq "
-a 6,6 0 0141
-b 6,9 0 0142
-c 6,6 0 0143
-d 6,9 0 0144
-e 6,6 0 0145
-f 4,9 0 0146
-g 6,6,3 0 0147
-h 6,9 0 0150
-i 3,9 0 0151
-j 3,9,3 0 0152
-k 6,9 0 0153
-l 3,9 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,3 0 0160
-q 6,6,3 0 0161
-r 4,6 0 0162
-s 6,6 0 0163
-t 4,7 0 0164
-u 6,6 0 0165
-v 6,6 0 0166
-w 9,6 0 0167
-x 6,6 0 0170
-y 6,6,3 0 0171
-z 6,6 0 0172
-{ 6,9,3 0 0173
-lC "
-| 3,9 0 0174
-ba "
-} 6,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,3 0 0241
-ct 6,7,1 0 0242
-Po 6,9 0 0243
-Cs 7,8 0 0244
-Ye 6,9 0 0245
-bb 3,9 0 0246
-sc 6,9,3 0 0247
-ad 3,8 0 0250
-co 10,9 0 0251
-Of 5,9 0 0252
-Fo 7,5 0 0253
-tno 8,5 0 0254
-- 4,4 0 0255
-hy "
-rg 11,9 0 0256
-a- 4,8 0 0257
-de 5,9 0 0260
-t+- 7,7 0 0261
-S2 4,9 0 0262
-S3 4,9 0 0263
-aa 4,9 0 0264
-mc 6,6,3 0 0265
-ps 7,9,3 0 0266
-pc 3,4 0 0267
-ac 3,0,3 0 0270
-S1 4,9 0 0271
-Om 5,9 0 0272
-Fc 7,5 0 0273
-14 9,9 0 0274
-12 9,9 0 0275
-34 9,9 0 0276
-r? 5,6,3 0 0277
-`A 9,12 0 0300
-'A 9,12 0 0301
-^A 9,12 0 0302
-~A 9,12 0 0303
-:A 9,11 0 0304
-oA 9,12 0 0305
-AE 11,9 0 0306
-,C 8,9,3 0 0307
-`E 8,12 0 0310
-'E 8,12 0 0311
-^E 8,12 0 0312
-:E 8,11 0 0313
-`I 4,12 0 0314
-'I 4,12 0 0315
-^I 4,12 0 0316
-:I 4,11 0 0317
--D 9,9 0 0320
-~N 9,12 0 0321
-`O 9,12 0 0322
-'O 9,12 0 0323
-^O 9,12 0 0324
-~O 9,12 0 0325
-:O 9,11 0 0326
-tmu 7,6 0 0327
-/O 9,10 0 0330
-`U 8,12 0 0331
-'U 8,12 0 0332
-^U 8,12 0 0333
-:U 8,11 0 0334
-'Y 9,12 0 0335
-TP 7,9 0 0336
-ss 6,9 0 0337
-`a 6,9 0 0340
-'a 6,9 0 0341
-^a 6,9 0 0342
-~a 6,9 0 0343
-:a 6,8 0 0344
-oa 6,9 0 0345
-ae 9,6 0 0346
-,c 5,6,3 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,8 0 0353
-`i 3,9 0 0354
-'i 3,9 0 0355
-^i 3,9 0 0356
-:i 3,8 0 0357
-Sd 6,9 0 0360
-~n 6,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 7,6 0 0367
-/o 6,6,1 0 0370
-`u 6,9 0 0371
-'u 6,9 0 0372
-^u 6,9 0 0373
-:u 6,8 0 0374
-'y 6,9,3 0 0375
-Tp 6,9,3 0 0376
-:y 6,8,3 0 0377
diff --git a/contrib/groff/font/devX75/CB b/contrib/groff/font/devX75/CB
deleted file mode 100644
index 1169f5b810b5..000000000000
--- a/contrib/groff/font/devX75/CB
+++ /dev/null
@@ -1,213 +0,0 @@
-name CB
-spacewidth 6
-charset
---- 6,5 0 00
---- 6,1 0 040
-! 6,7 0 041
-" 6,6 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,7,1 0 044
-Do "
-% 6,6 0 045
-& 6,6 0 046
-' 6,6 0 047
-cq "
-( 6,7,1 0 050
-) 6,7,1 0 051
-* 6,7 0 052
-+ 6,6 0 053
-, 6,1,2 0 054
-\- 6,4 0 055
-. 6,1 0 056
-/ 6,7,1 0 057
-sl "
-0 6,7 0 060
-1 6,7 0 061
-2 6,7 0 062
-3 6,7 0 063
-4 6,7 0 064
-5 6,7 0 065
-6 6,7 0 066
-7 6,7 0 067
-8 6,7 0 070
-9 6,7 0 071
-: 6,4 0 072
-; 6,4,2 0 073
-< 6,6 0 074
-= 6,5 0 075
-> 6,6 0 076
-? 6,6 0 077
-@ 6,7,1 0 0100
-at "
-A 6,6 0 0101
-B 6,6 0 0102
-C 6,6 0 0103
-D 6,6 0 0104
-E 6,6 0 0105
-F 6,6 0 0106
-G 6,6 0 0107
-H 6,6 0 0110
-I 6,6 0 0111
-J 6,6 0 0112
-K 6,6 0 0113
-L 6,6 0 0114
-M 6,6 0 0115
-N 6,6 0 0116
-O 6,6 0 0117
-P 6,6 0 0120
-Q 6,6,1 0 0121
-R 6,6 0 0122
-S 6,6 0 0123
-T 6,6 0 0124
-U 6,6 0 0125
-V 6,6 0 0126
-W 6,6 0 0127
-X 6,6 0 0130
-Y 6,6 0 0131
-Z 6,6 0 0132
-[ 6,7,1 0 0133
-lB "
-\ 6,7,1 0 0134
-rs "
-] 6,7,1 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 6,8 0 0140
-oq "
-a 6,5 0 0141
-b 6,7 0 0142
-c 6,5 0 0143
-d 6,7 0 0144
-e 6,5 0 0145
-f 6,7 0 0146
-g 6,5,2 0 0147
-h 6,7 0 0150
-i 6,7 0 0151
-j 6,7,2 0 0152
-k 6,7 0 0153
-l 6,7 0 0154
-m 6,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 6,5,2 0 0160
-q 6,5,2 0 0161
-r 6,5 0 0162
-s 6,5 0 0163
-t 6,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 6,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 6,5 0 0172
-{ 6,7,1 0 0173
-lC "
-| 6,7,2 0 0174
-ba "
-} 6,7,1 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ti "
---- 6,1 0 0240
-r! 6,5,2 0 0241
-ct 6,7,1 0 0242
-Po 6,7 0 0243
-Cs 6,6 0 0244
-Ye 6,7 0 0245
-bb 6,7,2 0 0246
-sc 6,7,1 0 0247
-ad 6,7 0 0250
-co 6,7 0 0251
-Of 6,7 0 0252
-Fo 6,5 0 0253
-tno 6,5 0 0254
-- 6,4 0 0255
-hy "
-rg 6,7 0 0256
-a- 6,7 0 0257
-de 6,7 0 0260
-t+- 6,6 0 0261
-S2 6,7 0 0262
-S3 6,7 0 0263
-aa 6,8 0 0264
-mc 6,5,2 0 0265
-ps 6,7,1 0 0266
-pc 6,5 0 0267
-ac 6,1,2 0 0270
-S1 6,7 0 0271
-Om 6,7 0 0272
-Fc 6,5 0 0273
-14 6,8,1 0 0274
-12 6,8,1 0 0275
-34 6,8,1 0 0276
-r? 6,4,2 0 0277
-`A 6,9 0 0300
-'A 6,9 0 0301
-^A 6,9 0 0302
-~A 6,9 0 0303
-:A 6,9 0 0304
-oA 6,9 0 0305
-AE 6,6 0 0306
-,C 6,6,2 0 0307
-`E 6,9 0 0310
-'E 6,9 0 0311
-^E 6,9 0 0312
-:E 6,9 0 0313
-`I 6,9 0 0314
-'I 6,9 0 0315
-^I 6,9 0 0316
-:I 6,9 0 0317
--D 6,6 0 0320
-~N 6,9 0 0321
-`O 6,9 0 0322
-'O 6,9 0 0323
-^O 6,9 0 0324
-~O 6,9 0 0325
-:O 6,9 0 0326
-tmu 6,6 0 0327
-/O 6,6,1 0 0330
-`U 6,9 0 0331
-'U 6,9 0 0332
-^U 6,9 0 0333
-:U 6,9 0 0334
-'Y 6,9 0 0335
-TP 6,6 0 0336
-ss 6,7 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,8 0 0344
-oa 6,9 0 0345
-ae 6,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,8 0 0352
-:e 6,8 0 0353
-`i 6,8 0 0354
-'i 6,8 0 0355
-^i 6,8 0 0356
-:i 6,8 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,8 0 0366
-tdi 6,6 0 0367
-/o 6,6,1 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,8 0 0374
-'y 6,8,2 0 0375
-Tp 6,7,2 0 0376
-:y 6,8,2 0 0377
diff --git a/contrib/groff/font/devX75/CBI b/contrib/groff/font/devX75/CBI
deleted file mode 100644
index e644b30ebfdd..000000000000
--- a/contrib/groff/font/devX75/CBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CBI
-spacewidth 6
-charset
---- 6,5 0 00
---- 6,1 0 040
-! 6,7 0 041
-" 6,7 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,7,1 0 044
-Do "
-% 6,7 0 045
-& 6,6 0 046
-' 6,7 0 047
-cq "
-( 6,7,2 0 050
-) 6,7,2 0 051
-* 6,7 0 052
-+ 6,6 0 053
-, 6,1,2 0 054
-\- 6,4 0 055
-. 6,1 0 056
-/ 6,7,1 0 057
-sl "
-0 6,7 0 060
-1 6,7 0 061
-2 6,7 0 062
-3 6,7 0 063
-4 6,7 0 064
-5 6,7 0 065
-6 6,7 0 066
-7 6,7 0 067
-8 6,7 0 070
-9 6,7 0 071
-: 6,4 0 072
-; 6,4,2 0 073
-< 6,6 0 074
-= 6,5 0 075
-> 6,6 0 076
-? 6,7 0 077
-@ 6,7,1 0 0100
-at "
-A 6,6 0 0101
-B 6,6 0 0102
-C 6,6 0 0103
-D 6,6 0 0104
-E 6,6 0 0105
-F 6,6 0 0106
-G 6,6 0 0107
-H 6,6 0 0110
-I 6,6 0 0111
-J 6,6 0 0112
-K 6,6 0 0113
-L 6,6 0 0114
-M 6,6 0 0115
-N 6,6 0 0116
-O 6,6 0 0117
-P 6,6 0 0120
-Q 6,6,1 0 0121
-R 6,6 0 0122
-S 6,6 0 0123
-T 6,6 0 0124
-U 6,6 0 0125
-V 6,6 0 0126
-W 6,6 0 0127
-X 6,6 0 0130
-Y 6,6 0 0131
-Z 6,6 0 0132
-[ 6,7,2 0 0133
-lB "
-\ 6,7,1 0 0134
-rs "
-] 6,7,2 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 6,8 0 0140
-oq "
-a 6,5 0 0141
-b 6,7 0 0142
-c 6,5 0 0143
-d 6,7 0 0144
-e 6,5 0 0145
-f 6,7 0 0146
-g 6,5,2 0 0147
-h 6,7 0 0150
-i 6,7 0 0151
-j 6,7,2 0 0152
-k 6,7 0 0153
-l 6,7 0 0154
-m 6,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 6,5,2 0 0160
-q 6,5,2 0 0161
-r 6,5 0 0162
-s 6,5 0 0163
-t 6,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 6,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 6,5 0 0172
-{ 6,7,2 0 0173
-lC "
-| 6,7,1 0 0174
-ba "
-} 6,7,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ti "
---- 6,1 0 0240
-r! 6,5,2 0 0241
-ct 6,7,1 0 0242
-Po 6,6 0 0243
-Cs 6,6 0 0244
-Ye 6,6 0 0245
-bb 6,7,1 0 0246
-sc 6,7,1 0 0247
-ad 6,7 0 0250
-co 6,7 0 0251
-Of 6,6 0 0252
-Fo 6,4 0 0253
-tno 6,5 0 0254
-- 6,4 0 0255
-hy "
-rg 6,7 0 0256
-a- 6,7 0 0257
-de 6,7 0 0260
-t+- 6,6 0 0261
-S2 6,7 0 0262
-S3 6,7 0 0263
-aa 6,8 0 0264
-mc 6,5,2 0 0265
-ps 6,7,1 0 0266
-pc 6,4 0 0267
-ac 6,0,2 0 0270
-S1 6,7 0 0271
-Om 6,6 0 0272
-Fc 6,4 0 0273
-14 6,8,1 0 0274
-12 6,8,1 0 0275
-34 6,8,1 0 0276
-r? 6,6,2 0 0277
-`A 6,9 0 0300
-'A 6,9 0 0301
-^A 6,9 0 0302
-~A 6,9 0 0303
-:A 6,8 0 0304
-oA 6,9 0 0305
-AE 6,6 0 0306
-,C 6,6,2 0 0307
-`E 6,9 0 0310
-'E 6,9 0 0311
-^E 6,9 0 0312
-:E 6,8 0 0313
-`I 6,9 0 0314
-'I 6,9 0 0315
-^I 6,9 0 0316
-:I 6,8 0 0317
--D 6,6 0 0320
-~N 6,9 0 0321
-`O 6,9 0 0322
-'O 6,9 0 0323
-^O 6,9 0 0324
-~O 6,9 0 0325
-:O 6,8 0 0326
-tmu 6,6 0 0327
-/O 6,7 0 0330
-`U 6,9 0 0331
-'U 6,9 0 0332
-^U 6,9 0 0333
-:U 6,8 0 0334
-'Y 6,9 0 0335
-TP 6,6 0 0336
-ss 6,7 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,7 0 0344
-oa 6,9 0 0345
-ae 6,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,8 0 0352
-:e 6,7 0 0353
-`i 6,8 0 0354
-'i 6,8 0 0355
-^i 6,8 0 0356
-:i 6,7 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,7 0 0366
-tdi 6,6 0 0367
-/o 6,5 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,7 0 0374
-'y 6,8,2 0 0375
-Tp 6,7,2 0 0376
-:y 6,7,2 0 0377
diff --git a/contrib/groff/font/devX75/CI b/contrib/groff/font/devX75/CI
deleted file mode 100644
index 8d0fe7b48ee0..000000000000
--- a/contrib/groff/font/devX75/CI
+++ /dev/null
@@ -1,213 +0,0 @@
-name CI
-spacewidth 6
-charset
---- 6,5 0 00
---- 6,1 0 040
-! 6,7 0 041
-" 6,7 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,7,1 0 044
-Do "
-% 6,7 0 045
-& 6,6 0 046
-' 6,7 0 047
-cq "
-( 6,7,1 0 050
-) 6,7,1 0 051
-* 6,7 0 052
-+ 6,6 0 053
-, 6,1,2 0 054
-\- 6,4 0 055
-. 6,1 0 056
-/ 6,7,1 0 057
-sl "
-0 6,7 0 060
-1 6,7 0 061
-2 6,7 0 062
-3 6,7 0 063
-4 6,7 0 064
-5 6,7 0 065
-6 6,7 0 066
-7 6,7 0 067
-8 6,7 0 070
-9 6,7 0 071
-: 6,4 0 072
-; 6,4,2 0 073
-< 6,6 0 074
-= 6,5 0 075
-> 6,6 0 076
-? 6,6 0 077
-@ 6,7 0 0100
-at "
-A 6,6 0 0101
-B 6,6 0 0102
-C 6,6 0 0103
-D 6,6 0 0104
-E 6,6 0 0105
-F 6,6 0 0106
-G 6,6 0 0107
-H 6,6 0 0110
-I 6,6 0 0111
-J 6,6 0 0112
-K 6,6 0 0113
-L 6,6 0 0114
-M 6,6 0 0115
-N 6,6 0 0116
-O 6,6 0 0117
-P 6,6 0 0120
-Q 6,6,2 0 0121
-R 6,6 0 0122
-S 6,6 0 0123
-T 6,6 0 0124
-U 6,6 0 0125
-V 6,6 0 0126
-W 6,6 0 0127
-X 6,6 0 0130
-Y 6,6 0 0131
-Z 6,6 0 0132
-[ 6,7,1 0 0133
-lB "
-\ 6,7,1 0 0134
-rs "
-] 6,7,1 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 6,8 0 0140
-oq "
-a 6,5 0 0141
-b 6,7 0 0142
-c 6,5 0 0143
-d 6,7 0 0144
-e 6,5 0 0145
-f 6,7 0 0146
-g 6,5,2 0 0147
-h 6,7 0 0150
-i 6,7 0 0151
-j 6,7,2 0 0152
-k 6,7 0 0153
-l 6,7 0 0154
-m 6,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 6,5,2 0 0160
-q 6,5,2 0 0161
-r 6,5 0 0162
-s 6,5 0 0163
-t 6,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 6,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 6,5 0 0172
-{ 6,7,1 0 0173
-lC "
-| 6,7,1 0 0174
-ba "
-} 6,7,1 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ti "
---- 6,1 0 0240
-r! 6,5,2 0 0241
-ct 6,6 0 0242
-Po 6,7 0 0243
-Cs 6,6 0 0244
-Ye 6,6 0 0245
-bb 6,7,2 0 0246
-sc 6,7,1 0 0247
-ad 6,7 0 0250
-co 6,7 0 0251
-Of 6,7 0 0252
-Fo 6,4 0 0253
-tno 6,5 0 0254
-- 6,4 0 0255
-hy "
-rg 6,7 0 0256
-a- 6,7 0 0257
-de 6,7 0 0260
-t+- 6,6 0 0261
-S2 6,7 0 0262
-S3 6,7 0 0263
-aa 6,8 0 0264
-mc 6,5,2 0 0265
-ps 6,7,1 0 0266
-pc 6,4 0 0267
-ac 6,0,2 0 0270
-S1 6,7 0 0271
-Om 6,7 0 0272
-Fc 6,4 0 0273
-14 6,8,1 0 0274
-12 6,8,1 0 0275
-34 6,8,1 0 0276
-r? 6,4,2 0 0277
-`A 6,9 0 0300
-'A 6,9 0 0301
-^A 6,9 0 0302
-~A 6,9 0 0303
-:A 6,8 0 0304
-oA 6,9 0 0305
-AE 6,6 0 0306
-,C 6,6,2 0 0307
-`E 6,9 0 0310
-'E 6,9 0 0311
-^E 6,9 0 0312
-:E 6,8 0 0313
-`I 6,9 0 0314
-'I 6,9 0 0315
-^I 6,9 0 0316
-:I 6,8 0 0317
--D 6,6 0 0320
-~N 6,9 0 0321
-`O 6,9 0 0322
-'O 6,9 0 0323
-^O 6,9 0 0324
-~O 6,9 0 0325
-:O 6,8 0 0326
-tmu 6,6 0 0327
-/O 6,6 0 0330
-`U 6,9 0 0331
-'U 6,9 0 0332
-^U 6,9 0 0333
-:U 6,8 0 0334
-'Y 6,9 0 0335
-TP 6,6 0 0336
-ss 6,7 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,7 0 0344
-oa 6,9 0 0345
-ae 6,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,8 0 0352
-:e 6,7 0 0353
-`i 6,8 0 0354
-'i 6,8 0 0355
-^i 6,8 0 0356
-:i 6,7 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,7 0 0366
-tdi 6,6 0 0367
-/o 6,6,1 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,7 0 0374
-'y 6,8,2 0 0375
-Tp 6,7,2 0 0376
-:y 6,7,2 0 0377
diff --git a/contrib/groff/font/devX75/CR b/contrib/groff/font/devX75/CR
deleted file mode 100644
index 75689d51e620..000000000000
--- a/contrib/groff/font/devX75/CR
+++ /dev/null
@@ -1,213 +0,0 @@
-name CR
-spacewidth 6
-charset
---- 6,5 0 00
---- 6,1 0 040
-! 6,7 0 041
-" 6,7 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,7,1 0 044
-Do "
-% 6,6 0 045
-& 6,6 0 046
-' 6,7 0 047
-cq "
-( 6,7,2 0 050
-) 6,7,2 0 051
-* 6,7 0 052
-+ 6,6 0 053
-, 6,1,2 0 054
-\- 6,4 0 055
-. 6,1 0 056
-/ 6,7,1 0 057
-sl "
-0 6,7 0 060
-1 6,7 0 061
-2 6,7 0 062
-3 6,7 0 063
-4 6,7 0 064
-5 6,7 0 065
-6 6,7 0 066
-7 6,7 0 067
-8 6,7 0 070
-9 6,7 0 071
-: 6,4 0 072
-; 6,4,2 0 073
-< 6,6 0 074
-= 6,5 0 075
-> 6,6 0 076
-? 6,6 0 077
-@ 6,7,1 0 0100
-at "
-A 6,6 0 0101
-B 6,6 0 0102
-C 6,6 0 0103
-D 6,6 0 0104
-E 6,6 0 0105
-F 6,6 0 0106
-G 6,6 0 0107
-H 6,6 0 0110
-I 6,6 0 0111
-J 6,6 0 0112
-K 6,6 0 0113
-L 6,6 0 0114
-M 6,6 0 0115
-N 6,6 0 0116
-O 6,6 0 0117
-P 6,6 0 0120
-Q 6,6,1 0 0121
-R 6,6 0 0122
-S 6,6 0 0123
-T 6,6 0 0124
-U 6,6 0 0125
-V 6,6 0 0126
-W 6,6 0 0127
-X 6,6 0 0130
-Y 6,6 0 0131
-Z 6,6 0 0132
-[ 6,7,2 0 0133
-lB "
-\ 6,7,1 0 0134
-rs "
-] 6,7,2 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 6,8 0 0140
-oq "
-a 6,5 0 0141
-b 6,7 0 0142
-c 6,5 0 0143
-d 6,7 0 0144
-e 6,5 0 0145
-f 6,7 0 0146
-g 6,5,2 0 0147
-h 6,7 0 0150
-i 6,7 0 0151
-j 6,7,2 0 0152
-k 6,7 0 0153
-l 6,7 0 0154
-m 6,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 6,5,2 0 0160
-q 6,5,2 0 0161
-r 6,5 0 0162
-s 6,5 0 0163
-t 6,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 6,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 6,5 0 0172
-{ 6,7,2 0 0173
-lC "
-| 6,7,2 0 0174
-ba "
-} 6,7,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ti "
---- 6,1 0 0240
-r! 6,5,2 0 0241
-ct 6,7,1 0 0242
-Po 6,7 0 0243
-Cs 6,6 0 0244
-Ye 6,7 0 0245
-bb 6,7,2 0 0246
-sc 6,6,1 0 0247
-ad 6,7 0 0250
-co 6,7 0 0251
-Of 6,6 0 0252
-Fo 6,4 0 0253
-tno 6,5 0 0254
-- 6,4 0 0255
-hy "
-rg 6,7 0 0256
-a- 6,7 0 0257
-de 6,7 0 0260
-t+- 6,6 0 0261
-S2 6,7 0 0262
-S3 6,7 0 0263
-aa 6,8 0 0264
-mc 6,5,2 0 0265
-ps 6,6,1 0 0266
-pc 6,4 0 0267
-ac 6,1,2 0 0270
-S1 6,7 0 0271
-Om 6,6 0 0272
-Fc 6,4 0 0273
-14 6,8,1 0 0274
-12 6,8,1 0 0275
-34 6,8,1 0 0276
-r? 6,4,2 0 0277
-`A 6,9 0 0300
-'A 6,9 0 0301
-^A 6,9 0 0302
-~A 6,9 0 0303
-:A 6,8 0 0304
-oA 6,9 0 0305
-AE 6,6 0 0306
-,C 6,6,2 0 0307
-`E 6,9 0 0310
-'E 6,9 0 0311
-^E 6,9 0 0312
-:E 6,8 0 0313
-`I 6,9 0 0314
-'I 6,9 0 0315
-^I 6,9 0 0316
-:I 6,8 0 0317
--D 6,6 0 0320
-~N 6,9 0 0321
-`O 6,9 0 0322
-'O 6,9 0 0323
-^O 6,9 0 0324
-~O 6,9 0 0325
-:O 6,8 0 0326
-tmu 6,6 0 0327
-/O 6,6 0 0330
-`U 6,9 0 0331
-'U 6,9 0 0332
-^U 6,9 0 0333
-:U 6,8 0 0334
-'Y 6,9 0 0335
-TP 6,6 0 0336
-ss 6,7 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,7 0 0344
-oa 6,9 0 0345
-ae 6,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,8 0 0352
-:e 6,7 0 0353
-`i 6,8 0 0354
-'i 6,8 0 0355
-^i 6,8 0 0356
-:i 6,7 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,7 0 0366
-tdi 6,6 0 0367
-/o 6,5 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,7 0 0374
-'y 6,8,2 0 0375
-Tp 6,7,2 0 0376
-:y 6,7,2 0 0377
diff --git a/contrib/groff/font/devX75/DESC b/contrib/groff/font/devX75/DESC
deleted file mode 100644
index 172170c9c0b5..000000000000
--- a/contrib/groff/font/devX75/DESC
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 75
-X11
-hor 1
-vert 1
-unitwidth 10
-postpro gxditview
diff --git a/contrib/groff/font/devX75/HB b/contrib/groff/font/devX75/HB
deleted file mode 100644
index 38a1d38af613..000000000000
--- a/contrib/groff/font/devX75/HB
+++ /dev/null
@@ -1,213 +0,0 @@
-name HB
-spacewidth 3
-charset
---- 7,7 0 00
---- 3,1 0 040
-! 4,8 0 041
-" 5,8 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,8,1 0 044
-Do "
-% 8,8 0 045
-& 8,8 0 046
-' 3,8 0 047
-cq "
-( 4,8,2 0 050
-) 4,8,2 0 051
-* 4,8 0 052
-+ 6,6 0 053
-, 3,2,2 0 054
-\- 5,4 0 055
-. 3,2 0 056
-/ 4,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 5,6 0 074
-= 6,5 0 075
-> 5,6 0 076
-? 6,8 0 077
-@ 11,7,2 0 0100
-at "
-A 8,8 0 0101
-B 7,8 0 0102
-C 8,8 0 0103
-D 7,8 0 0104
-E 6,8 0 0105
-F 6,8 0 0106
-G 8,8 0 0107
-H 7,8 0 0110
-I 3,8 0 0111
-J 6,8 0 0112
-K 7,8 0 0113
-L 6,8 0 0114
-M 10,8 0 0115
-N 8,8 0 0116
-O 8,8 0 0117
-P 7,8 0 0120
-Q 8,8,1 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 8,8 0 0126
-W 11,8 0 0127
-X 8,8 0 0130
-Y 9,8 0 0131
-Z 7,8 0 0132
-[ 4,8,2 0 0133
-lB "
-\ 4,8 0 0134
-rs "
-] 4,8,2 0 0135
-rB "
-^ 5,8 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 6,6 0 0141
-b 6,8 0 0142
-c 5,6 0 0143
-d 6,8 0 0144
-e 6,6 0 0145
-f 4,8 0 0146
-g 6,6,2 0 0147
-h 6,8 0 0150
-i 3,8 0 0151
-j 3,8,2 0 0152
-k 6,8 0 0153
-l 3,8 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,2 0 0160
-q 6,6,2 0 0161
-r 4,6 0 0162
-s 6,6 0 0163
-t 4,8 0 0164
-u 6,6 0 0165
-v 6,6 0 0166
-w 8,6 0 0167
-x 7,6 0 0170
-y 6,6,2 0 0171
-z 6,6 0 0172
-{ 5,8,2 0 0173
-lC "
-| 3,8,2 0 0174
-ba "
-} 5,8,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,2 0 0241
-ct 6,7,1 0 0242
-Po 6,8 0 0243
-Cs 6,7 0 0244
-Ye 7,8 0 0245
-bb 3,8,2 0 0246
-sc 6,8,2 0 0247
-ad 3,8 0 0250
-co 10,8 0 0251
-Of 5,8 0 0252
-Fo 7,4 0 0253
-tno 7,5 0 0254
-- 5,4 0 0255
-hy "
-rg 10,8 0 0256
-a- 3,8 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 3,9 0 0264
-mc 6,6,2 0 0265
-ps 6,8,2 0 0266
-pc 3,4 0 0267
-ac 3,0,2 0 0270
-S1 3,7 0 0271
-Om 5,8 0 0272
-Fc 7,4 0 0273
-14 9,8 0 0274
-12 9,8 0 0275
-34 9,8 0 0276
-r? 6,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,10 0 0304
-oA 8,11 0 0305
-AE 10,8 0 0306
-,C 8,8,2 0 0307
-`E 6,11 0 0310
-'E 6,11 0 0311
-^E 6,11 0 0312
-:E 6,10 0 0313
-`I 3,11 0 0314
-'I 3,11 0 0315
-^I 3,11 0 0316
-:I 3,10 0 0317
--D 7,8 0 0320
-~N 8,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,10 0 0326
-tmu 6,6 0 0327
-/O 8,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 9,11 0 0335
-TP 7,8 0 0336
-ss 6,8 0 0337
-`a 6,9 0 0340
-'a 6,9 0 0341
-^a 6,9 0 0342
-~a 6,9 0 0343
-:a 6,9 0 0344
-oa 6,9 0 0345
-ae 9,6 0 0346
-,c 5,6,2 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,9 0 0353
-`i 3,9 0 0354
-'i 3,9 0 0355
-^i 3,9 0 0356
-:i 3,9 0 0357
-Sd 6,9 0 0360
-~n 6,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,9 0 0366
-tdi 6,6 0 0367
-/o 6,6 0 0370
-`u 6,9 0 0371
-'u 6,9 0 0372
-^u 6,9 0 0373
-:u 6,9 0 0374
-'y 6,9,2 0 0375
-Tp 6,8,2 0 0376
-:y 6,9,2 0 0377
diff --git a/contrib/groff/font/devX75/HBI b/contrib/groff/font/devX75/HBI
deleted file mode 100644
index a4f308efb3a6..000000000000
--- a/contrib/groff/font/devX75/HBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HBI
-spacewidth 3
-charset
---- 7,7 0 00
---- 3,1 0 040
-! 4,8 0 041
-" 6,8 0 042
-dq "
-# 7,7 0 043
-sh "
-$ 6,8,1 0 044
-Do "
-% 9,8 0 045
-& 8,8 0 046
-' 3,8 0 047
-cq "
-( 5,8,2 0 050
-) 5,8,2 0 051
-* 6,8 0 052
-+ 6,6 0 053
-, 3,2,2 0 054
-\- 5,4 0 055
-. 3,2 0 056
-/ 5,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 6,6 0 074
-= 6,5 0 075
-> 7,6 0 076
-? 6,8 0 077
-@ 10,7,2 0 0100
-at "
-A 8,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 8,8 0 0104
-E 6,8 0 0105
-F 5,8 0 0106
-G 8,8 0 0107
-H 7,8 0 0110
-I 3,8 0 0111
-J 6,8 0 0112
-K 8,8 0 0113
-L 6,8 0 0114
-M 10,8 0 0115
-N 8,8 0 0116
-O 8,8 0 0117
-P 7,8 0 0120
-Q 8,8 0 0121
-R 8,8 0 0122
-S 7,8 0 0123
-T 6,8 0 0124
-U 7,8 0 0125
-V 8,8 0 0126
-W 10,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 4,8,2 0 0133
-lB "
-\ 5,8 0 0134
-rs "
-] 4,8,2 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 6,6 0 0141
-b 6,8 0 0142
-c 5,6 0 0143
-d 6,8 0 0144
-e 6,6 0 0145
-f 3,8 0 0146
-g 6,6,2 0 0147
-h 6,8 0 0150
-i 3,8 0 0151
-j 3,8,2 0 0152
-k 6,8 0 0153
-l 3,8 0 0154
-m 9,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,2 0 0160
-q 6,6,2 0 0161
-r 4,6 0 0162
-s 6,6 0 0163
-t 4,8 0 0164
-u 6,6 0 0165
-v 6,6 0 0166
-w 8,6 0 0167
-x 5,6 0 0170
-y 6,6,2 0 0171
-z 5,6 0 0172
-{ 5,8,2 0 0173
-lC "
-| 4,8,2 0 0174
-ba "
-} 5,8,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,2 0 0241
-ct 7,7,1 0 0242
-Po 7,7 0 0243
-Cs 6,7 0 0244
-Ye 7,8 0 0245
-bb 4,8,1 0 0246
-sc 7,8,2 0 0247
-ad 4,8 0 0250
-co 10,8 0 0251
-Of 5,8 0 0252
-Fo 8,5 0 0253
-tno 7,5 0 0254
-- 5,4 0 0255
-hy "
-rg 10,8 0 0256
-a- 4,8 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 3,9 0 0264
-mc 6,6,2 0 0265
-ps 7,8,2 0 0266
-pc 3,4 0 0267
-ac 3,1,2 0 0270
-S1 3,7 0 0271
-Om 5,8 0 0272
-Fc 8,5 0 0273
-14 9,8 0 0274
-12 9,8 0 0275
-34 9,8 0 0276
-r? 6,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,10 0 0304
-oA 8,11 0 0305
-AE 10,8 0 0306
-,C 7,8,2 0 0307
-`E 6,11 0 0310
-'E 6,11 0 0311
-^E 6,11 0 0312
-:E 6,10 0 0313
-`I 3,11 0 0314
-'I 3,11 0 0315
-^I 3,11 0 0316
-:I 3,10 0 0317
--D 8,8 0 0320
-~N 8,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,10 0 0326
-tmu 6,6 0 0327
-/O 8,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 7,8 0 0337
-`a 6,9 0 0340
-'a 6,9 0 0341
-^a 6,9 0 0342
-~a 6,9 0 0343
-:a 6,8 0 0344
-oa 6,9 0 0345
-ae 9,6 0 0346
-,c 5,6,2 0 0347
-`e 6,9 0 0350
-'e 6,9 0 0351
-^e 6,9 0 0352
-:e 6,8 0 0353
-`i 3,9 0 0354
-'i 3,9 0 0355
-^i 3,9 0 0356
-:i 3,8 0 0357
-Sd 6,9 0 0360
-~n 6,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 6,6 0 0367
-/o 8,6 0 0370
-`u 6,9 0 0371
-'u 6,9 0 0372
-^u 6,9 0 0373
-:u 6,8 0 0374
-'y 6,9,2 0 0375
-Tp 6,8,2 0 0376
-:y 6,8,2 0 0377
diff --git a/contrib/groff/font/devX75/HI b/contrib/groff/font/devX75/HI
deleted file mode 100644
index 9a83699b086f..000000000000
--- a/contrib/groff/font/devX75/HI
+++ /dev/null
@@ -1,213 +0,0 @@
-name HI
-spacewidth 3
-charset
---- 8,7 0 00
---- 3,1 0 040
-! 4,8 0 041
-" 4,8 0 042
-dq "
-# 7,7 0 043
-sh "
-$ 6,8,1 0 044
-Do "
-% 9,8 0 045
-& 8,8 0 046
-' 2,8 0 047
-cq "
-( 4,8,2 0 050
-) 4,8,2 0 051
-* 4,8 0 052
-+ 6,6 0 053
-, 3,1,2 0 054
-\- 6,4 0 055
-. 3,1 0 056
-/ 3,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 6,6 0 074
-= 7,5 0 075
-> 6,6 0 076
-? 6,8 0 077
-@ 11,8,2 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 8,8 0 0103
-D 8,8 0 0104
-E 7,8 0 0105
-F 6,8 0 0106
-G 8,8 0 0107
-H 8,8 0 0110
-I 3,8 0 0111
-J 5,8 0 0112
-K 7,8 0 0113
-L 5,8 0 0114
-M 9,8 0 0115
-N 8,8 0 0116
-O 8,8 0 0117
-P 7,8 0 0120
-Q 8,8,1 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 5,8 0 0124
-U 8,8 0 0125
-V 7,8 0 0126
-W 10,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 4,8,2 0 0133
-lB "
-\ 3,8 0 0134
-rs "
-] 4,8,2 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 5,6 0 0141
-b 5,8 0 0142
-c 5,6 0 0143
-d 5,8 0 0144
-e 5,6 0 0145
-f 4,8 0 0146
-g 5,6,2 0 0147
-h 6,8 0 0150
-i 2,8 0 0151
-j 2,8,2 0 0152
-k 5,8 0 0153
-l 2,8 0 0154
-m 8,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 5,6,2 0 0160
-q 5,6,2 0 0161
-r 4,6 0 0162
-s 5,6 0 0163
-t 4,8 0 0164
-u 5,6 0 0165
-v 6,6 0 0166
-w 8,6 0 0167
-x 6,6 0 0170
-y 5,6,2 0 0171
-z 5,6 0 0172
-{ 4,8,2 0 0173
-lC "
-| 3,8,2 0 0174
-ba "
-} 4,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,2 0 0241
-ct 7,7,1 0 0242
-Po 6,8 0 0243
-Cs 6,7 0 0244
-Ye 6,8 0 0245
-bb 3,8,2 0 0246
-sc 6,8,2 0 0247
-ad 3,8 0 0250
-co 10,8 0 0251
-Of 5,8 0 0252
-Fo 8,5 0 0253
-tno 7,5 0 0254
-- 6,4 0 0255
-hy "
-rg 10,8 0 0256
-a- 3,8 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,8 0 0262
-S3 3,8 0 0263
-aa 3,9 0 0264
-mc 5,6,2 0 0265
-ps 6,8,2 0 0266
-pc 3,5 0 0267
-ac 3,1,2 0 0270
-S1 3,8 0 0271
-Om 5,8 0 0272
-Fc 8,5 0 0273
-14 9,8,1 0 0274
-12 9,8,1 0 0275
-34 9,8,1 0 0276
-r? 6,6,2 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 10,8 0 0306
-,C 8,8,2 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 3,11 0 0314
-'I 3,11 0 0315
-^I 3,11 0 0316
-:I 3,10 0 0317
--D 8,8 0 0320
-~N 8,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,10 0 0326
-tmu 6,6 0 0327
-/O 8,8 0 0330
-`U 8,11 0 0331
-'U 8,11 0 0332
-^U 8,11 0 0333
-:U 8,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 6,8 0 0337
-`a 5,9 0 0340
-'a 5,9 0 0341
-^a 5,9 0 0342
-~a 5,9 0 0343
-:a 5,8 0 0344
-oa 5,9 0 0345
-ae 8,6 0 0346
-,c 5,6,2 0 0347
-`e 5,9 0 0350
-'e 5,9 0 0351
-^e 5,9 0 0352
-:e 5,8 0 0353
-`i 2,9 0 0354
-'i 2,9 0 0355
-^i 2,9 0 0356
-:i 2,8 0 0357
-Sd 6,9 0 0360
-~n 6,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 6,6 0 0367
-/o 6,6 0 0370
-`u 5,9 0 0371
-'u 5,9 0 0372
-^u 5,9 0 0373
-:u 5,8 0 0374
-'y 5,9,2 0 0375
-Tp 5,8,2 0 0376
-:y 5,8,2 0 0377
diff --git a/contrib/groff/font/devX75/HR b/contrib/groff/font/devX75/HR
deleted file mode 100644
index 1e9466b0c092..000000000000
--- a/contrib/groff/font/devX75/HR
+++ /dev/null
@@ -1,213 +0,0 @@
-name HR
-spacewidth 3
-charset
---- 8,7 0 00
---- 3,1 0 040
-! 3,8 0 041
-" 4,8 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 6,8,1 0 044
-Do "
-% 9,8 0 045
-& 8,8 0 046
-' 2,8 0 047
-cq "
-( 4,8,2 0 050
-) 4,8,2 0 051
-* 4,8 0 052
-+ 6,6 0 053
-, 3,1,2 0 054
-\- 4,4 0 055
-. 3,1 0 056
-/ 3,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 3,6 0 072
-; 3,6,2 0 073
-< 6,6 0 074
-= 5,5 0 075
-> 6,6 0 076
-? 6,8 0 077
-@ 11,8,2 0 0100
-at "
-A 7,8 0 0101
-B 7,8 0 0102
-C 8,8 0 0103
-D 8,8 0 0104
-E 7,8 0 0105
-F 6,8 0 0106
-G 8,8 0 0107
-H 8,8 0 0110
-I 3,8 0 0111
-J 5,8 0 0112
-K 7,8 0 0113
-L 6,8 0 0114
-M 9,8 0 0115
-N 8,8 0 0116
-O 8,8 0 0117
-P 7,8 0 0120
-Q 8,8,1 0 0121
-R 7,8 0 0122
-S 7,8 0 0123
-T 5,8 0 0124
-U 8,8 0 0125
-V 7,8 0 0126
-W 9,8 0 0127
-X 7,8 0 0130
-Y 7,8 0 0131
-Z 7,8 0 0132
-[ 3,8,2 0 0133
-lB "
-\ 3,8 0 0134
-rs "
-] 3,8,2 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 6,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 5,6 0 0141
-b 6,8 0 0142
-c 5,6 0 0143
-d 6,8 0 0144
-e 5,6 0 0145
-f 4,8 0 0146
-g 6,6,2 0 0147
-h 6,8 0 0150
-i 2,8 0 0151
-j 2,8,1 0 0152
-k 5,8 0 0153
-l 2,8 0 0154
-m 8,6 0 0155
-n 6,6 0 0156
-o 6,6 0 0157
-p 6,6,2 0 0160
-q 6,6,2 0 0161
-r 4,6 0 0162
-s 5,6 0 0163
-t 4,8 0 0164
-u 5,6 0 0165
-v 6,6 0 0166
-w 8,6 0 0167
-x 6,6 0 0170
-y 5,6,2 0 0171
-z 5,6 0 0172
-{ 3,8,2 0 0173
-lC "
-| 3,8,2 0 0174
-ba "
-} 3,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 3,6,2 0 0241
-ct 6,7,1 0 0242
-Po 6,8 0 0243
-Cs 5,7 0 0244
-Ye 6,8 0 0245
-bb 3,8,2 0 0246
-sc 6,8,2 0 0247
-ad 3,8 0 0250
-co 9,7 0 0251
-Of 4,8 0 0252
-Fo 6,5 0 0253
-tno 7,5 0 0254
-- 4,4 0 0255
-hy "
-rg 9,7 0 0256
-a- 3,8 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 3,8 0 0264
-mc 5,6,2 0 0265
-ps 6,8,2 0 0266
-pc 3,4 0 0267
-ac 3,0,2 0 0270
-S1 3,7 0 0271
-Om 4,8 0 0272
-Fc 6,5 0 0273
-14 9,8 0 0274
-12 9,8 0 0275
-34 9,8 0 0276
-r? 6,6,2 0 0277
-`A 7,11 0 0300
-'A 7,11 0 0301
-^A 7,11 0 0302
-~A 7,11 0 0303
-:A 7,10 0 0304
-oA 7,11 0 0305
-AE 10,8 0 0306
-,C 8,8,2 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 3,11 0 0314
-'I 3,11 0 0315
-^I 3,11 0 0316
-:I 3,10 0 0317
--D 8,8 0 0320
-~N 8,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,10 0 0326
-tmu 6,6 0 0327
-/O 8,9,1 0 0330
-`U 8,11 0 0331
-'U 8,11 0 0332
-^U 8,11 0 0333
-:U 8,10 0 0334
-'Y 7,11 0 0335
-TP 7,8 0 0336
-ss 5,8 0 0337
-`a 5,9 0 0340
-'a 5,9 0 0341
-^a 5,9 0 0342
-~a 5,9 0 0343
-:a 5,8 0 0344
-oa 5,9 0 0345
-ae 8,6 0 0346
-,c 5,6,2 0 0347
-`e 5,9 0 0350
-'e 5,9 0 0351
-^e 5,9 0 0352
-:e 5,8 0 0353
-`i 2,9 0 0354
-'i 2,9 0 0355
-^i 2,9 0 0356
-:i 2,8 0 0357
-Sd 6,9 0 0360
-~n 5,9 0 0361
-`o 6,9 0 0362
-'o 6,9 0 0363
-^o 6,9 0 0364
-~o 6,9 0 0365
-:o 6,8 0 0366
-tdi 6,6 0 0367
-/o 6,6 0 0370
-`u 5,9 0 0371
-'u 5,9 0 0372
-^u 5,9 0 0373
-:u 5,8 0 0374
-'y 5,9,2 0 0375
-Tp 6,8,2 0 0376
-:y 5,8,2 0 0377
diff --git a/contrib/groff/font/devX75/Makefile.sub b/contrib/groff/font/devX75/Makefile.sub
deleted file mode 100644
index 2a90fcab7e2b..000000000000
--- a/contrib/groff/font/devX75/Makefile.sub
+++ /dev/null
@@ -1,2 +0,0 @@
-DEV=X75
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
diff --git a/contrib/groff/font/devX75/NB b/contrib/groff/font/devX75/NB
deleted file mode 100644
index 8dbe017870d1..000000000000
--- a/contrib/groff/font/devX75/NB
+++ /dev/null
@@ -1,213 +0,0 @@
-name NB
-spacewidth 2
-charset
---- 10,7 0 00
---- 2,1 0 040
-! 3,8 0 041
-" 6,8 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 6,9,1 0 044
-Do "
-% 11,8 0 045
-& 9,8 0 046
-' 4,8 0 047
-cq "
-( 5,8,2 0 050
-) 5,8,2 0 051
-* 6,8 0 052
-+ 6,6 0 053
-, 3,2,2 0 054
-\- 4,4 0 055
-. 3,2 0 056
-/ 5,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 3,5 0 072
-; 3,5,2 0 073
-< 7,6 0 074
-= 6,5 0 075
-> 7,6 0 076
-? 6,8 0 077
-@ 10,8 0 0100
-at "
-A 8,8 0 0101
-B 8,8 0 0102
-C 8,8 0 0103
-D 9,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 8,8 0 0107
-H 10,8 0 0110
-I 5,8 0 0111
-J 7,8 0 0112
-K 9,8 0 0113
-L 7,8 0 0114
-M 12,8 0 0115
-N 9,8 0 0116
-O 8,8 0 0117
-P 8,8 0 0120
-Q 8,8,1 0 0121
-R 9,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 9,8 0 0125
-V 9,8 0 0126
-W 12,8 0 0127
-X 9,8 0 0130
-Y 9,8 0 0131
-Z 7,8 0 0132
-[ 4,8,2 0 0133
-lB "
-\ 5,8 0 0134
-rs "
-] 4,8,2 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 5,0,2 0 0137
-` 4,8 0 0140
-oq "
-a 5,5 0 0141
-b 7,8 0 0142
-c 6,5 0 0143
-d 7,8 0 0144
-e 6,5 0 0145
-f 5,8 0 0146
-g 6,6,2 0 0147
-h 7,8 0 0150
-i 5,8 0 0151
-j 5,8,2 0 0152
-k 6,8 0 0153
-l 5,8 0 0154
-m 11,5 0 0155
-n 7,5 0 0156
-o 7,5 0 0157
-p 7,5,2 0 0160
-q 7,5,2 0 0161
-r 5,5 0 0162
-s 5,5 0 0163
-t 4,7 0 0164
-u 7,5 0 0165
-v 7,5 0 0166
-w 10,5 0 0167
-x 7,5 0 0170
-y 7,5,2 0 0171
-z 6,5 0 0172
-{ 5,8,2 0 0173
-lC "
-| 6,8 0 0174
-ba "
-} 5,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 3,6,2 0 0241
-ct 6,6,1 0 0242
-Po 8,8 0 0243
-Cs 8,6 0 0244
-Ye 9,8 0 0245
-bb 6,8 0 0246
-sc 5,8,2 0 0247
-ad 4,8 0 0250
-co 9,8 0 0251
-Of 4,8 0 0252
-Fo 7,5 0 0253
-tno 6,5 0 0254
-- 4,4 0 0255
-hy "
-rg 9,8 0 0256
-a- 5,7 0 0257
-de 4,8 0 0260
-t+- 6,6 0 0261
-S2 3,8 0 0262
-S3 3,8 0 0263
-aa 4,8 0 0264
-mc 7,5,2 0 0265
-ps 8,8 0 0266
-pc 3,5 0 0267
-ac 4,1,2 0 0270
-S1 3,8 0 0271
-Om 5,8 0 0272
-Fc 7,5 0 0273
-14 9,8 0 0274
-12 9,8 0 0275
-34 9,8 0 0276
-r? 6,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,11 0 0304
-oA 8,11 0 0305
-AE 11,8 0 0306
-,C 8,8,2 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,11 0 0313
-`I 5,11 0 0314
-'I 5,11 0 0315
-^I 5,11 0 0316
-:I 5,11 0 0317
--D 9,8 0 0320
-~N 9,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,11 0 0326
-tmu 6,6 0 0327
-/O 8,8 0 0330
-`U 9,11 0 0331
-'U 9,11 0 0332
-^U 9,11 0 0333
-:U 9,11 0 0334
-'Y 9,11 0 0335
-TP 8,8 0 0336
-ss 8,8 0 0337
-`a 5,8 0 0340
-'a 5,8 0 0341
-^a 5,9 0 0342
-~a 5,8 0 0343
-:a 5,8 0 0344
-oa 5,8 0 0345
-ae 9,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,9 0 0352
-:e 6,8 0 0353
-`i 5,8 0 0354
-'i 5,8 0 0355
-^i 5,9 0 0356
-:i 5,8 0 0357
-Sd 7,8 0 0360
-~n 7,8 0 0361
-`o 7,8 0 0362
-'o 7,8 0 0363
-^o 7,9 0 0364
-~o 7,8 0 0365
-:o 7,8 0 0366
-tdi 6,6 0 0367
-/o 7,6,1 0 0370
-`u 7,8 0 0371
-'u 7,8 0 0372
-^u 7,9 0 0373
-:u 7,8 0 0374
-'y 7,8,2 0 0375
-Tp 7,8,2 0 0376
-:y 7,8,2 0 0377
diff --git a/contrib/groff/font/devX75/NBI b/contrib/groff/font/devX75/NBI
deleted file mode 100644
index 89c769caa06c..000000000000
--- a/contrib/groff/font/devX75/NBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NBI
-spacewidth 2
-charset
---- 10,7 0 00
---- 2,1 0 040
-! 5,8 0 041
-" 6,8 0 042
-dq "
-# 8,7 0 043
-sh "
-$ 6,9,1 0 044
-Do "
-% 11,8 0 045
-& 10,8 0 046
-' 4,8 0 047
-cq "
-( 4,8,1 0 050
-) 5,8,1 0 051
-* 6,8 0 052
-+ 6,6 0 053
-, 3,2,2 0 054
-\- 4,4 0 055
-. 3,2 0 056
-/ 5,8 0 057
-sl "
-0 6,8 0 060
-1 6,8 0 061
-2 6,8 0 062
-3 6,8 0 063
-4 6,8 0 064
-5 6,8 0 065
-6 6,8 0 066
-7 6,8 0 067
-8 6,8 0 070
-9 6,8 0 071
-: 4,5 0 072
-; 4,5,2 0 073
-< 7,6 0 074
-= 6,5 0 075
-> 7,6 0 076
-? 6,8 0 077
-@ 11,8 0 0100
-at "
-A 8,8 0 0101
-B 8,8 0 0102
-C 7,8 0 0103
-D 9,8 0 0104
-E 8,8 0 0105
-F 7,8 0 0106
-G 8,8 0 0107
-H 10,8 0 0110
-I 6,8 0 0111
-J 7,8 0 0112
-K 10,8 0 0113
-L 7,8 0 0114
-M 11,8 0 0115
-N 8,8 0 0116
-O 8,8 0 0117
-P 8,8 0 0120
-Q 8,8,2 0 0121
-R 9,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 8,8 0 0125
-V 8,8 0 0126
-W 11,8 0 0127
-X 8,8 0 0130
-Y 7,8 0 0131
-Z 8,8 0 0132
-[ 5,8,1 0 0133
-lB "
-\ 5,8 0 0134
-rs "
-] 5,8,1 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 5,0,2 0 0137
-` 4,8 0 0140
-oq "
-a 7,5 0 0141
-b 7,8 0 0142
-c 6,5 0 0143
-d 7,8 0 0144
-e 6,5 0 0145
-f 5,8,2 0 0146
-g 6,6,2 0 0147
-h 7,8 0 0150
-i 4,8 0 0151
-j 4,8,2 0 0152
-k 7,8 0 0153
-l 4,8 0 0154
-m 10,5 0 0155
-n 7,5 0 0156
-o 6,5 0 0157
-p 7,5,2 0 0160
-q 7,5,2 0 0161
-r 5,5 0 0162
-s 4,5 0 0163
-t 4,7 0 0164
-u 7,5 0 0165
-v 6,5 0 0166
-w 10,5 0 0167
-x 7,5 0 0170
-y 7,5,2 0 0171
-z 5,5 0 0172
-{ 5,8,1 0 0173
-lC "
-| 6,8 0 0174
-ba "
-} 5,8,1 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 4,6,2 0 0241
-ct 6,6,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 7,8 0 0245
-bb 6,8 0 0246
-sc 6,8,2 0 0247
-ad 4,8 0 0250
-co 9,8 0 0251
-Of 6,8 0 0252
-Fo 8,5 0 0253
-tno 6,5 0 0254
-- 4,4 0 0255
-hy "
-rg 9,8 0 0256
-a- 5,7 0 0257
-de 4,8 0 0260
-t+- 6,6 0 0261
-S2 3,8 0 0262
-S3 3,8 0 0263
-aa 4,8 0 0264
-mc 7,5,2 0 0265
-ps 8,8 0 0266
-pc 3,5 0 0267
-ac 4,1,2 0 0270
-S1 3,8 0 0271
-Om 5,8 0 0272
-Fc 8,5 0 0273
-14 9,8 0 0274
-12 9,8 0 0275
-34 9,8 0 0276
-r? 6,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,11 0 0304
-oA 8,11 0 0305
-AE 10,8 0 0306
-,C 7,8,2 0 0307
-`E 8,11 0 0310
-'E 8,11 0 0311
-^E 8,11 0 0312
-:E 8,11 0 0313
-`I 6,11 0 0314
-'I 6,11 0 0315
-^I 6,11 0 0316
-:I 6,11 0 0317
--D 9,8 0 0320
-~N 8,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,11 0 0326
-tmu 6,6 0 0327
-/O 8,8 0 0330
-`U 8,11 0 0331
-'U 8,11 0 0332
-^U 8,11 0 0333
-:U 8,11 0 0334
-'Y 7,11 0 0335
-TP 8,8 0 0336
-ss 8,8,2 0 0337
-`a 7,8 0 0340
-'a 7,8 0 0341
-^a 7,8 0 0342
-~a 7,8 0 0343
-:a 7,8 0 0344
-oa 7,9 0 0345
-ae 9,5 0 0346
-,c 6,5,2 0 0347
-`e 6,8 0 0350
-'e 6,8 0 0351
-^e 6,8 0 0352
-:e 6,8 0 0353
-`i 4,8 0 0354
-'i 4,8 0 0355
-^i 4,8 0 0356
-:i 4,8 0 0357
-Sd 6,8 0 0360
-~n 7,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,8 0 0366
-tdi 6,6 0 0367
-/o 6,5 0 0370
-`u 7,8 0 0371
-'u 7,8 0 0372
-^u 7,8 0 0373
-:u 7,8 0 0374
-'y 7,8,2 0 0375
-Tp 7,8,2 0 0376
-:y 7,8,2 0 0377
diff --git a/contrib/groff/font/devX75/NI b/contrib/groff/font/devX75/NI
deleted file mode 100644
index 70b989c7f140..000000000000
--- a/contrib/groff/font/devX75/NI
+++ /dev/null
@@ -1,213 +0,0 @@
-name NI
-spacewidth 2
-charset
---- 9,7 0 00
---- 2,1 0 040
-! 4,8 0 041
-" 6,8 0 042
-dq "
-# 8,7 0 043
-sh "
-$ 5,9,1 0 044
-Do "
-% 9,8 0 045
-& 9,8 0 046
-' 4,8 0 047
-cq "
-( 5,8,1 0 050
-) 5,8,1 0 051
-* 6,8 0 052
-+ 6,5 0 053
-, 2,2,1 0 054
-\- 4,3 0 055
-. 2,2 0 056
-/ 5,8,1 0 057
-sl "
-0 5,8 0 060
-1 5,8 0 061
-2 5,8 0 062
-3 5,8 0 063
-4 5,8 0 064
-5 5,8 0 065
-6 5,8 0 066
-7 5,8 0 067
-8 5,8 0 070
-9 5,8 0 071
-: 3,5 0 072
-; 3,5,1 0 073
-< 7,5 0 074
-= 6,4 0 075
-> 7,5 0 076
-? 6,8 0 077
-@ 9,8 0 0100
-at "
-A 8,8 0 0101
-B 7,8 0 0102
-C 6,8 0 0103
-D 8,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 8,8 0 0107
-H 9,8 0 0110
-I 5,8 0 0111
-J 5,8 0 0112
-K 8,8 0 0113
-L 7,8 0 0114
-M 12,8 0 0115
-N 9,8 0 0116
-O 7,8 0 0117
-P 7,8 0 0120
-Q 7,8,2 0 0121
-R 8,8 0 0122
-S 7,8 0 0123
-T 7,8 0 0124
-U 7,8 0 0125
-V 8,8 0 0126
-W 11,8 0 0127
-X 8,8 0 0130
-Y 8,8 0 0131
-Z 8,8 0 0132
-[ 5,8,1 0 0133
-lB "
-\ 5,8 0 0134
-rs "
-] 5,8,1 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 5,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 6,5 0 0141
-b 6,8 0 0142
-c 5,5 0 0143
-d 6,8 0 0144
-e 5,5 0 0145
-f 4,8,2 0 0146
-g 5,6,2 0 0147
-h 6,8 0 0150
-i 3,8 0 0151
-j 3,8,2 0 0152
-k 6,8 0 0153
-l 3,8 0 0154
-m 9,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 6,5,2 0 0160
-q 6,5,2 0 0161
-r 5,5 0 0162
-s 4,5 0 0163
-t 3,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 9,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 6,5 0 0172
-{ 5,8,1 0 0173
-lC "
-| 6,8 0 0174
-ba "
-} 5,8,1 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 4,6,2 0 0241
-ct 5,6,1 0 0242
-Po 6,8 0 0243
-Cs 8,8 0 0244
-Ye 8,8 0 0245
-bb 6,8 0 0246
-sc 6,8,1 0 0247
-ad 4,7 0 0250
-co 9,8 0 0251
-Of 5,8 0 0252
-Fo 6,5 0 0253
-tno 6,4 0 0254
-- 4,3 0 0255
-hy "
-rg 9,8 0 0256
-a- 4,7 0 0257
-de 4,8 0 0260
-t+- 6,5 0 0261
-S2 3,8 0 0262
-S3 3,8 0 0263
-aa 3,8 0 0264
-mc 6,5,2 0 0265
-ps 8,8 0 0266
-pc 3,4 0 0267
-ac 4,1,2 0 0270
-S1 3,8 0 0271
-Om 4,8 0 0272
-Fc 6,5 0 0273
-14 7,8 0 0274
-12 7,8 0 0275
-34 7,8 0 0276
-r? 6,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,10 0 0304
-oA 8,11 0 0305
-AE 10,8 0 0306
-,C 6,8,2 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 5,11 0 0314
-'I 5,11 0 0315
-^I 5,11 0 0316
-:I 5,10 0 0317
--D 8,8 0 0320
-~N 9,11 0 0321
-`O 7,11 0 0322
-'O 7,11 0 0323
-^O 7,11 0 0324
-~O 7,11 0 0325
-:O 7,10 0 0326
-tmu 6,5 0 0327
-/O 7,8 0 0330
-`U 7,11 0 0331
-'U 7,11 0 0332
-^U 7,11 0 0333
-:U 7,10 0 0334
-'Y 8,10 0 0335
-TP 7,8 0 0336
-ss 7,8,2 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,7 0 0344
-oa 6,9 0 0345
-ae 8,5 0 0346
-,c 5,5,2 0 0347
-`e 5,8 0 0350
-'e 5,8 0 0351
-^e 5,8 0 0352
-:e 5,7 0 0353
-`i 3,8 0 0354
-'i 3,8 0 0355
-^i 3,8 0 0356
-:i 3,7 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,7 0 0366
-tdi 6,5 0 0367
-/o 6,5 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,7 0 0374
-'y 6,8,2 0 0375
-Tp 6,8,2 0 0376
-:y 6,7,2 0 0377
diff --git a/contrib/groff/font/devX75/NR b/contrib/groff/font/devX75/NR
deleted file mode 100644
index 87f9518cbcdb..000000000000
--- a/contrib/groff/font/devX75/NR
+++ /dev/null
@@ -1,213 +0,0 @@
-name NR
-spacewidth 3
-charset
---- 9,7 0 00
---- 3,1 0 040
-! 4,8 0 041
-" 6,8 0 042
-dq "
-# 8,8 0 043
-sh "
-$ 5,9,1 0 044
-Do "
-% 9,8 0 045
-& 10,8 0 046
-' 4,8 0 047
-cq "
-( 4,8,1 0 050
-) 4,8,1 0 051
-* 6,8 0 052
-+ 6,5 0 053
-, 3,2,1 0 054
-\- 4,3 0 055
-. 4,2 0 056
-/ 4,8 0 057
-sl "
-0 5,8 0 060
-1 5,8 0 061
-2 5,8 0 062
-3 5,8 0 063
-4 5,8 0 064
-5 5,8 0 065
-6 5,8 0 066
-7 5,8 0 067
-8 5,8 0 070
-9 5,8 0 071
-: 4,5 0 072
-; 4,5,1 0 073
-< 7,5 0 074
-= 6,4 0 075
-> 7,5 0 076
-? 5,8 0 077
-@ 9,8 0 0100
-at "
-A 8,8 0 0101
-B 7,8 0 0102
-C 7,8 0 0103
-D 8,8 0 0104
-E 7,8 0 0105
-F 7,8 0 0106
-G 8,8 0 0107
-H 9,8 0 0110
-I 4,8 0 0111
-J 5,8 0 0112
-K 8,8 0 0113
-L 7,8 0 0114
-M 10,8 0 0115
-N 9,8 0 0116
-O 8,8 0 0117
-P 7,8 0 0120
-Q 8,8,1 0 0121
-R 8,8 0 0122
-S 6,8 0 0123
-T 8,8 0 0124
-U 8,8 0 0125
-V 8,8 0 0126
-W 12,8 0 0127
-X 7,8 0 0130
-Y 8,8 0 0131
-Z 6,8 0 0132
-[ 3,8,1 0 0133
-lB "
-\ 5,8 0 0134
-rs "
-] 3,8,1 0 0135
-rB "
-^ 6,8 0 0136
-a^ "
-ha "
-_ 5,0,2 0 0137
-` 3,8 0 0140
-oq "
-a 6,5 0 0141
-b 5,8 0 0142
-c 5,5 0 0143
-d 6,8 0 0144
-e 5,5 0 0145
-f 4,8 0 0146
-g 6,5,2 0 0147
-h 6,8 0 0150
-i 4,7 0 0151
-j 4,7,2 0 0152
-k 7,8 0 0153
-l 4,8 0 0154
-m 10,5 0 0155
-n 7,5 0 0156
-o 5,5 0 0157
-p 5,5,2 0 0160
-q 6,5,2 0 0161
-r 5,5 0 0162
-s 5,5 0 0163
-t 3,7 0 0164
-u 6,5 0 0165
-v 6,5 0 0166
-w 8,5 0 0167
-x 6,5 0 0170
-y 6,5,2 0 0171
-z 5,5 0 0172
-{ 4,8,1 0 0173
-lC "
-| 6,8 0 0174
-ba "
-} 4,8,1 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ti "
---- 3,1 0 0240
-r! 4,6,2 0 0241
-ct 6,6,1 0 0242
-Po 7,8 0 0243
-Cs 7,7 0 0244
-Ye 8,8 0 0245
-bb 6,8 0 0246
-sc 5,8,2 0 0247
-ad 4,7 0 0250
-co 10,8 0 0251
-Of 5,8 0 0252
-Fo 6,4 0 0253
-tno 6,4 0 0254
-- 4,3 0 0255
-hy "
-rg 10,8 0 0256
-a- 5,7 0 0257
-de 4,8 0 0260
-t+- 6,5 0 0261
-S2 3,8 0 0262
-S3 3,8 0 0263
-aa 3,8 0 0264
-mc 6,5,2 0 0265
-ps 7,8,2 0 0266
-pc 4,4 0 0267
-ac 3,1,2 0 0270
-S1 3,8 0 0271
-Om 5,8 0 0272
-Fc 6,4 0 0273
-14 7,8 0 0274
-12 7,8 0 0275
-34 7,8 0 0276
-r? 5,6,2 0 0277
-`A 8,11 0 0300
-'A 8,11 0 0301
-^A 8,11 0 0302
-~A 8,11 0 0303
-:A 8,10 0 0304
-oA 8,11 0 0305
-AE 11,8 0 0306
-,C 7,8,2 0 0307
-`E 7,11 0 0310
-'E 7,11 0 0311
-^E 7,11 0 0312
-:E 7,10 0 0313
-`I 4,11 0 0314
-'I 4,11 0 0315
-^I 4,11 0 0316
-:I 4,10 0 0317
--D 8,8 0 0320
-~N 9,11 0 0321
-`O 8,11 0 0322
-'O 8,11 0 0323
-^O 8,11 0 0324
-~O 8,11 0 0325
-:O 8,10 0 0326
-tmu 6,5 0 0327
-/O 8,8 0 0330
-`U 8,11 0 0331
-'U 8,11 0 0332
-^U 8,11 0 0333
-:U 8,10 0 0334
-'Y 8,11 0 0335
-TP 7,8 0 0336
-ss 7,8 0 0337
-`a 6,8 0 0340
-'a 6,8 0 0341
-^a 6,8 0 0342
-~a 6,8 0 0343
-:a 6,7 0 0344
-oa 6,8 0 0345
-ae 8,5 0 0346
-,c 5,5,2 0 0347
-`e 5,8 0 0350
-'e 5,8 0 0351
-^e 5,8 0 0352
-:e 5,7 0 0353
-`i 4,8 0 0354
-'i 4,8 0 0355
-^i 4,8 0 0356
-:i 4,7 0 0357
-Sd 5,8 0 0360
-~n 7,8 0 0361
-`o 5,8 0 0362
-'o 5,8 0 0363
-^o 5,8 0 0364
-~o 5,8 0 0365
-:o 5,7 0 0366
-tdi 6,5 0 0367
-/o 5,5,1 0 0370
-`u 6,8 0 0371
-'u 6,8 0 0372
-^u 6,8 0 0373
-:u 6,7 0 0374
-'y 6,8,2 0 0375
-Tp 5,8,2 0 0376
-:y 6,7,2 0 0377
diff --git a/contrib/groff/font/devX75/S b/contrib/groff/font/devX75/S
deleted file mode 100644
index 324bb42c0bf5..000000000000
--- a/contrib/groff/font/devX75/S
+++ /dev/null
@@ -1,221 +0,0 @@
-name S
-special
-spacewidth 3
-charset
---- 3,1 0 040
-! 3,7 0 041
-fa 7,7 0 042
-# 5,7 0 043
-sh "
-te 6,7 0 044
-% 8,7 0 045
-& 7,7 0 046
-st 5,5 0 047
-( 4,7,2 0 050
-) 4,7,2 0 051
-** 5,6 0 052
-+ 6,5 0 053
-pl "
-, 2,1,2 0 054
-\- 6,3 0 055
-mi "
-. 2,2 0 056
-/ 3,7 0 057
-sl "
-0 5,7 0 060
-1 5,7 0 061
-2 5,7 0 062
-3 5,7 0 063
-4 5,7 0 064
-5 5,7 0 065
-6 5,7 0 066
-7 5,7 0 067
-8 5,7 0 070
-9 5,7 0 071
-: 2,5 0 072
-; 2,5,2 0 073
-< 7,5 0 074
-= 6,4 0 075
-eq "
-> 6,5 0 076
-? 5,7 0 077
-=~ 6,6 0 0100
-*A 8,7 0 0101
-*B 6,7 0 0102
-*X 8,7 0 0103
-*D 7,7 0 0104
-*E 6,7 0 0105
-*F 8,7 0 0106
-*G 6,7 0 0107
-*Y 8,7 0 0110
-*I 3,7 0 0111
-+h 7,7 0 0112
-*K 7,7 0 0113
-*L 7,7 0 0114
-*M 10,7 0 0115
-*N 8,7 0 0116
-*O 7,7 0 0117
-*P 8,7 0 0120
-*H 7,7 0 0121
-*R 6,7 0 0122
-*S 6,7 0 0123
-*T 6,7 0 0124
---- 8,7 0 0125
-ts 5,5,2 0 0126
-*W 9,7 0 0127
-*C 7,7 0 0130
-*Q 9,7 0 0131
-*Z 6,7 0 0132
-[ 3,7,2 0 0133
-lB "
-tf 7,5 0 0134
-3d "
-] 3,7,2 0 0135
-rB "
-pp 7,7 0 0136
-_ 5,0,2 0 0137
-radicalex 5,10 0 0140
-*a 7,5 0 0141
-*b 5,8,2 0 0142
-*x 6,5,2 0 0143
-*d 5,8 0 0144
-*e 5,5 0 0145
-*f 6,7,2 0 0146
-*g 6,5,2 0 0147
-*y 6,5,2 0 0150
-*i 4,5 0 0151
-+f 6,5,2 0 0152
-*k 6,5 0 0153
-*l 6,8 0 0154
-*m 6,5,2 0 0155
-*n 6,5 0 0156
-*o 5,5 0 0157
-*p 6,5 0 0160
-*h 5,7 0 0161
-*r 5,5,3 0 0162
-*s 6,5 0 0163
-*t 5,5 0 0164
-*u 6,5 0 0165
-+p 8,6 0 0166
-*w 8,5 0 0167
-*c 5,8,2 0 0170
-*q 7,5,2 0 0171
-*z 5,8,2 0 0172
-lC 5,7,2 0 0173
-{ "
-ba 2,7,2 0 0174
-| "
-rC 5,7,2 0 0175
-} "
-ap 6,4 0 0176
-*U 7,7 0 0241
-fm 3,8 0 0242
-<= 6,7 0 0243
-f/ 3,7 0 0244
-if 7,4 0 0245
-Fn 5,7,2 0 0246
-CL 7,5 0 0247
-DI 7,5 0 0250
-HE 7,5 0 0251
-SP 7,5 0 0252
-<> 10,5 0 0253
-<- 10,5 0 0254
-ua 6,10,4 0 0255
-arrowverttp "
--> 10,5 0 0256
-da 6,10,2 0 0257
-arrowvertbt "
-de 4,7 0 0260
-+- 6,7 0 0261
-sd 4,8 0 0262
->= 6,7 0 0263
-mu 6,5 0 0264
-pt 7,4 0 0265
-pd 5,8 0 0266
-bu 5,4 0 0267
-di 6,5 0 0270
-!= 6,5 0 0271
-== 6,5 0 0272
-~= 6,5 0 0273
-~~ "
---- 9,1 0 0274
-arrowvertex 6,10,4 0 0275
-an 10,3 0 0276
-CR 7,6 0 0277
-Ah 8,7 0 0300
-Im 7,8,1 0 0301
-Re 8,8 0 0302
-wp 9,6,2 0 0303
-c* 8,7 0 0304
-c+ 8,7 0 0305
-es 8,8,1 0 0306
-ca 8,5 0 0307
-cu 8,5 0 0310
-sp 7,5 0 0311
-ip 7,5,2 0 0312
-nb 7,6,1 0 0313
-sb 7,5 0 0314
-ib 7,5,2 0 0315
-mo 7,5 0 0316
-nm 7,6,1 0 0317
-/_ 8,7 0 0320
-gr 7,7 0 0321
-rg 8,7,1 0 0322
-co 8,7,1 0 0323
-tm 10,7 0 0324
---- 9,8,1 0 0325
-sr 6,10 0 0326
-sqrt "
-md 3,3 0 0327
-no 7,3 0 0330
-AN 6,5 0 0331
-OR 6,5 0 0332
-hA 11,5 0 0333
-lA 10,5 0 0334
-uA 6,10 0 0335
-rA 10,5 0 0336
-dA 6,10 0 0337
-lz 7,7 0 0340
-la 3,7,2 0 0341
---- 8,7,1 0 0342
---- 8,7,1 0 0343
---- 9,7 0 0344
---- 7,8,1 0 0345
-parenlefttp 4,10,4 0 0346
-parenleftex 4,10,4 0 0347
-parenleftbt 4,10,4 0 0350
-bracketlefttp 4,10,4 0 0351
-lc "
-bracketleftex 4,10,4 0 0352
-bracketleftbt 4,10,2 0 0353
-lf "
-bracelefttp 5,10,4 0 0354
-lt "
-braceleftmid 5,10,4 0 0355
-lk "
-braceleftbt 5,10,2 0 0356
-lb "
-bracerightex 5,10,4 0 0357
-braceleftex "
-braceex "
-bv "
-ra 3,7,2 0 0361
-is 3,10,2 0 0362
-integral "
---- 7,10,4 0 0363
---- 7,10,4 0 0364
---- 7,10,2 0 0365
-parenrighttp 4,10,4 0 0366
-parenrightex 4,10,4 0 0367
-parenrightbt 4,10,4 0 0370
-bracketrighttp 4,10,4 0 0371
-rc "
-bracketrightex 4,10,4 0 0372
-bracketrightbt 4,10,2 0 0373
-rf "
-bracerighttp 5,10,4 0 0374
-rt "
-bracerightmid 5,10,4 0 0375
-rk "
-bracerightbt 5,10,2 0 0376
-rb "
diff --git a/contrib/groff/font/devX75/TB b/contrib/groff/font/devX75/TB
deleted file mode 100644
index 42802e38f66a..000000000000
--- a/contrib/groff/font/devX75/TB
+++ /dev/null
@@ -1,213 +0,0 @@
-name TB
-spacewidth 2
-charset
---- 9,7 0 00
---- 2,1 0 040
-! 4,7 0 041
-" 5,7 0 042
-dq "
-# 6,7 0 043
-sh "
-$ 5,8,1 0 044
-Do "
-% 9,7 0 045
-& 9,7 0 046
-' 3,7 0 047
-cq "
-( 4,7,3 0 050
-) 4,7,3 0 051
-* 6,7 0 052
-+ 6,5 0 053
-, 4,2,1 0 054
-\- 3,3 0 055
-. 3,2 0 056
-/ 3,7 0 057
-sl "
-0 5,7 0 060
-1 5,7 0 061
-2 5,7 0 062
-3 5,7 0 063
-4 5,7 0 064
-5 5,7 0 065
-6 5,7 0 066
-7 5,7 0 067
-8 5,7 0 070
-9 5,7 0 071
-: 4,5 0 072
-; 4,5,1 0 073
-< 6,5 0 074
-= 6,4 0 075
-> 6,5 0 076
-? 6,7 0 077
-@ 11,7,2 0 0100
-at "
-A 7,7 0 0101
-B 7,7 0 0102
-C 7,7 0 0103
-D 8,7 0 0104
-E 7,7 0 0105
-F 7,7 0 0106
-G 7,7 0 0107
-H 9,7 0 0110
-I 5,7 0 0111
-J 5,7,1 0 0112
-K 8,7 0 0113
-L 7,7 0 0114
-M 10,7 0 0115
-N 8,7 0 0116
-O 7,7 0 0117
-P 6,7 0 0120
-Q 7,7,2 0 0121
-R 7,7 0 0122
-S 6,7 0 0123
-T 7,7 0 0124
-U 7,7 0 0125
-V 8,7 0 0126
-W 10,7 0 0127
-X 7,7 0 0130
-Y 8,7 0 0131
-Z 7,7 0 0132
-[ 4,7,3 0 0133
-lB "
-\ 3,7 0 0134
-rs "
-] 4,7,3 0 0135
-rB "
-^ 6,7 0 0136
-a^ "
-ha "
-_ 5,0,3 0 0137
-` 4,8 0 0140
-oq "
-a 5,5 0 0141
-b 5,7 0 0142
-c 5,5 0 0143
-d 6,7 0 0144
-e 5,5 0 0145
-f 3,7 0 0146
-g 5,5,3 0 0147
-h 5,7 0 0150
-i 3,8 0 0151
-j 4,8,2 0 0152
-k 5,7 0 0153
-l 3,7 0 0154
-m 8,5 0 0155
-n 6,5 0 0156
-o 6,5 0 0157
-p 5,5,2 0 0160
-q 5,5,2 0 0161
-r 4,5 0 0162
-s 4,5 0 0163
-t 4,7 0 0164
-u 5,5 0 0165
-v 5,5 0 0166
-w 6,5 0 0167
-x 5,5 0 0170
-y 5,5,2 0 0171
-z 5,5 0 0172
-{ 4,7,3 0 0173
-lC "
-| 3,7,2 0 0174
-ba "
-} 4,7,3 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 4,4,3 0 0241
-ct 6,6,1 0 0242
-Po 6,7 0 0243
-Cs 6,6 0 0244
-Ye 6,7 0 0245
-bb 3,7,2 0 0246
-sc 5,7,2 0 0247
-ad 4,8 0 0250
-co 9,7 0 0251
-Of 4,7 0 0252
-Fo 6,5 0 0253
-tno 7,5 0 0254
-- 3,3 0 0255
-hy "
-rg 9,7 0 0256
-a- 4,7 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 4,7 0 0264
-mc 5,5,3 0 0265
-ps 6,7,3 0 0266
-pc 3,4 0 0267
-ac 3,0,3 0 0270
-S1 3,7 0 0271
-Om 4,7 0 0272
-Fc 6,5 0 0273
-14 7,7 0 0274
-12 7,7 0 0275
-34 7,7 0 0276
-r? 6,4,3 0 0277
-`A 7,10 0 0300
-'A 7,10 0 0301
-^A 7,10 0 0302
-~A 7,10 0 0303
-:A 7,10 0 0304
-oA 7,10 0 0305
-AE 9,7 0 0306
-,C 7,7,3 0 0307
-`E 7,10 0 0310
-'E 7,10 0 0311
-^E 7,10 0 0312
-:E 7,10 0 0313
-`I 5,10 0 0314
-'I 5,10 0 0315
-^I 5,10 0 0316
-:I 5,10 0 0317
--D 8,7 0 0320
-~N 8,10 0 0321
-`O 7,10 0 0322
-'O 7,10 0 0323
-^O 7,10 0 0324
-~O 7,10 0 0325
-:O 7,10 0 0326
-tmu 6,5 0 0327
-/O 7,8,1 0 0330
-`U 7,10 0 0331
-'U 7,10 0 0332
-^U 7,10 0 0333
-:U 7,10 0 0334
-'Y 8,10 0 0335
-TP 6,7 0 0336
-ss 6,7 0 0337
-`a 5,8 0 0340
-'a 5,8 0 0341
-^a 5,8 0 0342
-~a 5,8 0 0343
-:a 5,8 0 0344
-oa 5,8 0 0345
-ae 8,5 0 0346
-,c 5,5,3 0 0347
-`e 5,8 0 0350
-'e 5,8 0 0351
-^e 5,8 0 0352
-:e 5,8 0 0353
-`i 3,8 0 0354
-'i 3,8 0 0355
-^i 3,8 0 0356
-:i 3,8 0 0357
-Sd 6,8 0 0360
-~n 6,8 0 0361
-`o 6,8 0 0362
-'o 6,8 0 0363
-^o 6,8 0 0364
-~o 6,8 0 0365
-:o 6,8 0 0366
-tdi 6,5 0 0367
-/o 6,6,1 0 0370
-`u 5,8 0 0371
-'u 5,8 0 0372
-^u 5,8 0 0373
-:u 5,8 0 0374
-'y 5,8,3 0 0375
-Tp 5,7,3 0 0376
-:y 5,8,3 0 0377
diff --git a/contrib/groff/font/devX75/TBI b/contrib/groff/font/devX75/TBI
deleted file mode 100644
index 3e13236dfd28..000000000000
--- a/contrib/groff/font/devX75/TBI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TBI
-spacewidth 2
-charset
---- 8,7 0 00
---- 2,1 0 040
-! 6,7 0 041
-" 6,7 0 042
-dq "
-# 8,7 0 043
-sh "
-$ 5,7 0 044
-Do "
-% 11,7 0 045
-& 8,7 0 046
-' 4,7 0 047
-cq "
-( 6,7,2 0 050
-) 6,7,2 0 051
-* 7,8 0 052
-+ 7,5 0 053
-, 4,2,1 0 054
-\- 3,3 0 055
-. 4,2 0 056
-/ 5,7 0 057
-sl "
-0 5,7 0 060
-1 5,7 0 061
-2 5,7 0 062
-3 5,7 0 063
-4 5,7 0 064
-5 5,7 0 065
-6 5,7 0 066
-7 5,7 0 067
-8 5,7 0 070
-9 5,7 0 071
-: 3,5 0 072
-; 5,5,1 0 073
-< 6,5 0 074
-= 7,4 0 075
-> 6,5 0 076
-? 5,7 0 077
-@ 11,7,2 0 0100
-at "
-A 6,7 0 0101
-B 7,7 0 0102
-C 7,7 0 0103
-D 7,7 0 0104
-E 7,7 0 0105
-F 7,7 0 0106
-G 7,7 0 0107
-H 8,7 0 0110
-I 4,7 0 0111
-J 5,7,1 0 0112
-K 7,7 0 0113
-L 6,7 0 0114
-M 10,7 0 0115
-N 8,7 0 0116
-O 7,7 0 0117
-P 6,7 0 0120
-Q 7,7,2 0 0121
-R 7,7 0 0122
-S 6,7 0 0123
-T 6,7 0 0124
-U 8,7 0 0125
-V 7,7 0 0126
-W 9,7 0 0127
-X 7,7 0 0130
-Y 6,7 0 0131
-Z 6,7 0 0132
-[ 5,7,2 0 0133
-lB "
-\ 5,7 0 0134
-rs "
-] 5,7,2 0 0135
-rB "
-^ 7,7 0 0136
-a^ "
-ha "
-_ 5,0,2 0 0137
-` 4,8 0 0140
-oq "
-a 5,5 0 0141
-b 5,7 0 0142
-c 5,5 0 0143
-d 5,7 0 0144
-e 5,5 0 0145
-f 4,7,3 0 0146
-g 4,5,3 0 0147
-h 5,7 0 0150
-i 3,7 0 0151
-j 3,7,3 0 0152
-k 5,7 0 0153
-l 3,7 0 0154
-m 7,5 0 0155
-n 5,5 0 0156
-o 5,5 0 0157
-p 5,5,3 0 0160
-q 5,5,3 0 0161
-r 4,5 0 0162
-s 4,5 0 0163
-t 4,6 0 0164
-u 5,5 0 0165
-v 4,5 0 0166
-w 7,5 0 0167
-x 4,5 0 0170
-y 5,5,2 0 0171
-z 4,5 0 0172
-{ 5,7,2 0 0173
-lC "
-| 3,7 0 0174
-ba "
-} 5,7,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 5,5,3 0 0241
-ct 5,6,1 0 0242
-Po 5,7 0 0243
-Cs 7,6 0 0244
-Ye 5,7 0 0245
-bb 3,7 0 0246
-sc 5,7,2 0 0247
-ad 5,7 0 0250
-co 9,7 0 0251
-Of 5,7 0 0252
-Fo 8,5 0 0253
-tno 7,5 0 0254
-- 3,3 0 0255
-hy "
-rg 9,7 0 0256
-a- 4,7 0 0257
-de 4,7 0 0260
-t+- 7,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 4,7 0 0264
-mc 5,5,3 0 0265
-ps 8,7,3 0 0266
-pc 4,4 0 0267
-ac 3,0,3 0 0270
-S1 3,7 0 0271
-Om 5,7 0 0272
-Fc 8,5 0 0273
-14 7,7 0 0274
-12 7,7 0 0275
-34 7,7 0 0276
-r? 5,5,3 0 0277
-`A 6,10 0 0300
-'A 6,10 0 0301
-^A 6,10 0 0302
-~A 6,10 0 0303
-:A 6,10 0 0304
-oA 6,10 0 0305
-AE 9,7 0 0306
-,C 7,7,3 0 0307
-`E 7,10 0 0310
-'E 7,10 0 0311
-^E 7,10 0 0312
-:E 7,10 0 0313
-`I 4,10 0 0314
-'I 4,10 0 0315
-^I 4,10 0 0316
-:I 4,10 0 0317
--D 7,7 0 0320
-~N 8,10 0 0321
-`O 7,10 0 0322
-'O 7,10 0 0323
-^O 7,10 0 0324
-~O 7,10 0 0325
-:O 7,10 0 0326
-tmu 7,5 0 0327
-/O 7,8,1 0 0330
-`U 8,10 0 0331
-'U 8,10 0 0332
-^U 8,10 0 0333
-:U 8,10 0 0334
-'Y 6,10 0 0335
-TP 6,7 0 0336
-ss 6,7,3 0 0337
-`a 5,8 0 0340
-'a 5,8 0 0341
-^a 5,8 0 0342
-~a 5,8 0 0343
-:a 5,8 0 0344
-oa 5,8 0 0345
-ae 8,5 0 0346
-,c 5,5,3 0 0347
-`e 5,8 0 0350
-'e 5,8 0 0351
-^e 5,8 0 0352
-:e 5,8 0 0353
-`i 3,8 0 0354
-'i 3,8 0 0355
-^i 3,8 0 0356
-:i 3,8 0 0357
-Sd 5,8 0 0360
-~n 5,8 0 0361
-`o 5,8 0 0362
-'o 5,8 0 0363
-^o 5,8 0 0364
-~o 5,8 0 0365
-:o 5,8 0 0366
-tdi 7,5 0 0367
-/o 5,6,1 0 0370
-`u 5,8 0 0371
-'u 5,8 0 0372
-^u 5,8 0 0373
-:u 5,8 0 0374
-'y 5,8,2 0 0375
-Tp 5,7,3 0 0376
-:y 5,8,2 0 0377
diff --git a/contrib/groff/font/devX75/TI b/contrib/groff/font/devX75/TI
deleted file mode 100644
index b8cae5554d3e..000000000000
--- a/contrib/groff/font/devX75/TI
+++ /dev/null
@@ -1,213 +0,0 @@
-name TI
-spacewidth 2
-charset
---- 7,7 0 00
---- 2,1 0 040
-! 3,7 0 041
-" 4,8 0 042
-dq "
-# 5,7 0 043
-sh "
-$ 5,8,1 0 044
-Do "
-% 9,7 0 045
-& 8,7 0 046
-' 3,8 0 047
-cq "
-( 3,7,2 0 050
-) 4,7,2 0 051
-* 5,7 0 052
-+ 7,5 0 053
-, 3,1,2 0 054
-\- 4,3 0 055
-. 3,1 0 056
-/ 4,7 0 057
-sl "
-0 5,7 0 060
-1 5,7 0 061
-2 5,7 0 062
-3 5,7 0 063
-4 5,7 0 064
-5 5,7 0 065
-6 5,7 0 066
-7 5,7 0 067
-8 5,7 0 070
-9 5,7 0 071
-: 3,5 0 072
-; 3,5,2 0 073
-< 5,5 0 074
-= 7,4 0 075
-> 5,5 0 076
-? 5,7 0 077
-@ 10,7,2 0 0100
-at "
-A 7,7 0 0101
-B 6,7 0 0102
-C 7,7 0 0103
-D 7,7 0 0104
-E 6,7 0 0105
-F 6,7 0 0106
-G 8,7 0 0107
-H 7,7 0 0110
-I 3,7 0 0111
-J 4,7 0 0112
-K 7,7 0 0113
-L 6,7 0 0114
-M 10,7 0 0115
-N 7,7 0 0116
-O 7,7 0 0117
-P 6,7 0 0120
-Q 7,7,2 0 0121
-R 6,7 0 0122
-S 5,7 0 0123
-T 6,7 0 0124
-U 7,7 0 0125
-V 6,7 0 0126
-W 9,7 0 0127
-X 6,7 0 0130
-Y 6,7 0 0131
-Z 6,7 0 0132
-[ 4,7,2 0 0133
-lB "
-\ 5,7 0 0134
-rs "
-] 4,7,2 0 0135
-rB "
-^ 5,7 0 0136
-a^ "
-ha "
-_ 5,0,3 0 0137
-` 3,8 0 0140
-oq "
-a 5,5 0 0141
-b 5,7 0 0142
-c 5,5 0 0143
-d 5,7 0 0144
-e 5,5 0 0145
-f 3,7,3 0 0146
-g 4,5,3 0 0147
-h 5,7 0 0150
-i 3,7 0 0151
-j 3,7,3 0 0152
-k 5,7 0 0153
-l 3,7 0 0154
-m 7,5 0 0155
-n 5,5 0 0156
-o 5,5 0 0157
-p 5,5,3 0 0160
-q 5,5,3 0 0161
-r 4,5 0 0162
-s 4,5 0 0163
-t 3,6 0 0164
-u 5,5 0 0165
-v 5,5 0 0166
-w 7,5 0 0167
-x 4,5 0 0170
-y 5,5,3 0 0171
-z 4,5 0 0172
-{ 4,7,2 0 0173
-lC "
-| 3,7,2 0 0174
-ba "
-} 4,7,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 4,5,2 0 0241
-ct 5,6,1 0 0242
-Po 5,7 0 0243
-Cs 5,7 0 0244
-Ye 7,7 0 0245
-bb 3,7,2 0 0246
-sc 5,7,2 0 0247
-ad 3,7 0 0250
-co 9,7 0 0251
-Of 4,7 0 0252
-Fo 5,5 0 0253
-tno 7,4 0 0254
-- 4,3 0 0255
-hy "
-rg 9,7 0 0256
-a- 3,7 0 0257
-de 4,7 0 0260
-t+- 7,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 3,8 0 0264
-mc 5,5,3 0 0265
-ps 6,7,3 0 0266
-pc 3,3 0 0267
-ac 3,0,2 0 0270
-S1 3,7 0 0271
-Om 3,7 0 0272
-Fc 5,5 0 0273
-14 7,7 0 0274
-12 7,7 0 0275
-34 7,7 0 0276
-r? 5,5,2 0 0277
-`A 7,10 0 0300
-'A 7,10 0 0301
-^A 7,10 0 0302
-~A 7,10 0 0303
-:A 7,9 0 0304
-oA 7,10 0 0305
-AE 8,7 0 0306
-,C 7,7,2 0 0307
-`E 6,10 0 0310
-'E 6,10 0 0311
-^E 6,10 0 0312
-:E 6,9 0 0313
-`I 3,10 0 0314
-'I 3,10 0 0315
-^I 3,10 0 0316
-:I 3,9 0 0317
--D 7,7 0 0320
-~N 7,10 0 0321
-`O 7,10 0 0322
-'O 7,10 0 0323
-^O 7,10 0 0324
-~O 7,10 0 0325
-:O 7,9 0 0326
-tmu 7,5 0 0327
-/O 7,8,1 0 0330
-`U 7,10 0 0331
-'U 7,10 0 0332
-^U 7,10 0 0333
-:U 7,9 0 0334
-'Y 6,9 0 0335
-TP 6,7 0 0336
-ss 6,7,2 0 0337
-`a 5,8 0 0340
-'a 5,8 0 0341
-^a 5,8 0 0342
-~a 5,8 0 0343
-:a 5,7 0 0344
-oa 5,8 0 0345
-ae 7,5 0 0346
-,c 5,5,2 0 0347
-`e 5,8 0 0350
-'e 5,8 0 0351
-^e 5,8 0 0352
-:e 5,7 0 0353
-`i 3,8 0 0354
-'i 3,8 0 0355
-^i 3,8 0 0356
-:i 3,7 0 0357
-Sd 5,8 0 0360
-~n 5,8 0 0361
-`o 5,8 0 0362
-'o 5,8 0 0363
-^o 5,8 0 0364
-~o 5,8 0 0365
-:o 5,7 0 0366
-tdi 7,5 0 0367
-/o 5,6,1 0 0370
-`u 5,8 0 0371
-'u 5,8 0 0372
-^u 5,8 0 0373
-:u 5,7 0 0374
-'y 5,8,3 0 0375
-Tp 5,7,3 0 0376
-:y 5,7,3 0 0377
diff --git a/contrib/groff/font/devX75/TR b/contrib/groff/font/devX75/TR
deleted file mode 100644
index 4465c5a03a20..000000000000
--- a/contrib/groff/font/devX75/TR
+++ /dev/null
@@ -1,213 +0,0 @@
-name TR
-spacewidth 2
-charset
---- 8,7 0 00
---- 2,1 0 040
-! 3,7 0 041
-" 4,7 0 042
-dq "
-# 5,7 0 043
-sh "
-$ 5,8,1 0 044
-Do "
-% 8,7 0 045
-& 8,7 0 046
-' 2,7 0 047
-cq "
-( 4,7,2 0 050
-) 4,7,2 0 051
-* 5,7 0 052
-+ 6,5 0 053
-, 3,1,2 0 054
-\- 4,3 0 055
-. 3,1 0 056
-/ 3,7 0 057
-sl "
-0 5,7 0 060
-1 5,7 0 061
-2 5,7 0 062
-3 5,7 0 063
-4 5,7 0 064
-5 5,7 0 065
-6 5,7 0 066
-7 5,7 0 067
-8 5,7 0 070
-9 5,7 0 071
-: 3,5 0 072
-; 3,5,2 0 073
-< 5,5 0 074
-= 6,4 0 075
-> 5,5 0 076
-? 4,7 0 077
-@ 9,7,2 0 0100
-at "
-A 8,7 0 0101
-B 6,7 0 0102
-C 7,7 0 0103
-D 7,7 0 0104
-E 6,7 0 0105
-F 6,7 0 0106
-G 7,7 0 0107
-H 8,7 0 0110
-I 4,7 0 0111
-J 4,7 0 0112
-K 7,7 0 0113
-L 6,7 0 0114
-M 10,7 0 0115
-N 8,7 0 0116
-O 7,7 0 0117
-P 6,7 0 0120
-Q 7,7,2 0 0121
-R 7,7 0 0122
-S 5,7 0 0123
-T 6,7 0 0124
-U 8,7 0 0125
-V 8,7 0 0126
-W 10,7 0 0127
-X 8,7 0 0130
-Y 8,7 0 0131
-Z 6,7 0 0132
-[ 3,7,2 0 0133
-lB "
-\ 3,7 0 0134
-rs "
-] 3,7,2 0 0135
-rB "
-^ 5,7 0 0136
-a^ "
-ha "
-_ 5,0,3 0 0137
-` 3,8 0 0140
-oq "
-a 4,5 0 0141
-b 5,7 0 0142
-c 4,5 0 0143
-d 5,7 0 0144
-e 4,5 0 0145
-f 4,7 0 0146
-g 5,5,2 0 0147
-h 5,7 0 0150
-i 3,7 0 0151
-j 3,7,2 0 0152
-k 5,7 0 0153
-l 4,7 0 0154
-m 8,5 0 0155
-n 5,5 0 0156
-o 5,5 0 0157
-p 5,5,2 0 0160
-q 5,5,2 0 0161
-r 4,5 0 0162
-s 4,5 0 0163
-t 4,6 0 0164
-u 5,5 0 0165
-v 5,5 0 0166
-w 8,5 0 0167
-x 6,5 0 0170
-y 5,5,2 0 0171
-z 5,5 0 0172
-{ 4,7,2 0 0173
-lC "
-| 2,7,2 0 0174
-ba "
-} 4,7,2 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ti "
---- 2,1 0 0240
-r! 3,5,2 0 0241
-ct 5,6,1 0 0242
-Po 5,7 0 0243
-Cs 5,7 0 0244
-Ye 5,7 0 0245
-bb 2,7 0 0246
-sc 5,8,1 0 0247
-ad 5,7 0 0250
-co 9,7 0 0251
-Of 4,7 0 0252
-Fo 5,5 0 0253
-tno 7,4 0 0254
-- 4,3 0 0255
-hy "
-rg 9,7 0 0256
-a- 4,7 0 0257
-de 4,7 0 0260
-t+- 6,7 0 0261
-S2 3,7 0 0262
-S3 3,7 0 0263
-aa 3,7 0 0264
-mc 5,5,2 0 0265
-ps 6,7,2 0 0266
-pc 2,3 0 0267
-ac 4,0,3 0 0270
-S1 3,7 0 0271
-Om 4,7 0 0272
-Fc 5,5 0 0273
-14 8,7 0 0274
-12 8,7 0 0275
-34 8,7 0 0276
-r? 4,5,2 0 0277
-`A 8,10 0 0300
-'A 8,10 0 0301
-^A 8,10 0 0302
-~A 8,10 0 0303
-:A 8,9 0 0304
-oA 8,10 0 0305
-AE 9,7 0 0306
-,C 7,7,3 0 0307
-`E 6,10 0 0310
-'E 6,10 0 0311
-^E 6,10 0 0312
-:E 6,9 0 0313
-`I 4,10 0 0314
-'I 4,10 0 0315
-^I 4,10 0 0316
-:I 4,9 0 0317
--D 7,7 0 0320
-~N 8,10 0 0321
-`O 7,10 0 0322
-'O 7,10 0 0323
-^O 7,10 0 0324
-~O 7,10 0 0325
-:O 7,9 0 0326
-tmu 6,5 0 0327
-/O 8,8,1 0 0330
-`U 8,10 0 0331
-'U 8,10 0 0332
-^U 8,10 0 0333
-:U 8,9 0 0334
-'Y 8,10 0 0335
-TP 6,7 0 0336
-ss 5,7 0 0337
-`a 4,8 0 0340
-'a 4,8 0 0341
-^a 4,8 0 0342
-~a 4,8 0 0343
-:a 4,7 0 0344
-oa 4,8 0 0345
-ae 6,5 0 0346
-,c 4,5,3 0 0347
-`e 4,8 0 0350
-'e 4,8 0 0351
-^e 4,8 0 0352
-:e 4,7 0 0353
-`i 4,8 0 0354
-'i 4,8 0 0355
-^i 4,8 0 0356
-:i 4,7 0 0357
-Sd 5,8 0 0360
-~n 5,8 0 0361
-`o 5,8 0 0362
-'o 5,8 0 0363
-^o 5,8 0 0364
-~o 5,8 0 0365
-:o 5,7 0 0366
-tdi 6,5 0 0367
-/o 5,6,1 0 0370
-`u 5,8 0 0371
-'u 5,8 0 0372
-^u 5,8 0 0373
-:u 5,7 0 0374
-'y 5,8,2 0 0375
-Tp 5,7,2 0 0376
-:y 5,7,2 0 0377
diff --git a/contrib/groff/font/devascii/DESC.proto b/contrib/groff/font/devascii/DESC.proto
deleted file mode 100644
index 88399ab16d91..000000000000
--- a/contrib/groff/font/devascii/DESC.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-res 240
-hor 24
-vert 40
-unitwidth 10
-sizes 10 0
-fonts 4 R I B BI
-tcommand
-postpro grotty
diff --git a/contrib/groff/font/devascii/Makefile.sub b/contrib/groff/font/devascii/Makefile.sub
deleted file mode 100644
index 238f7b742991..000000000000
--- a/contrib/groff/font/devascii/Makefile.sub
+++ /dev/null
@@ -1,31 +0,0 @@
-DEV=ascii
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-CLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-$(FONTS): R.proto
- @echo Making $@
- @-rm -f $@
- @(charwidth=`expr $(RES) / $(CPI)` ; \
- sed -e "s/^name [A-Z]*$$/name $@/" \
- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
- -e "s/^internalname .*$$/internalname $@/" \
- -e "/^internalname/s/BI/3/" \
- -e "/^internalname/s/B/2/" \
- -e "/^internalname/s/I/1/" \
- -e "/^internalname .*[^ 0-9]/d" \
- $(srcdir)/R.proto >$@)
-
-DESC: DESC.proto
- @echo Making $@
- @-rm -f $@
- @sed -e "s/^res .*$$/res $(RES)/" \
- -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
- -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
- $(srcdir)/DESC.proto >$@
diff --git a/contrib/groff/font/devascii/R.proto b/contrib/groff/font/devascii/R.proto
deleted file mode 100644
index 7144dae5470f..000000000000
--- a/contrib/groff/font/devascii/R.proto
+++ /dev/null
@@ -1,190 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
---- 24 0 0000
---- 24 0 0001
---- 24 0 0002
---- 24 0 0003
---- 24 0 0004
---- 24 0 0005
---- 24 0 0006
---- 24 0 0007
---- 24 0 0010
---- 24 0 0011
---- 24 0 0012
---- 24 0 0013
---- 24 0 0014
---- 24 0 0015
---- 24 0 0016
---- 24 0 0017
---- 24 0 0020
---- 24 0 0021
---- 24 0 0022
---- 24 0 0023
---- 24 0 0024
---- 24 0 0025
---- 24 0 0026
---- 24 0 0027
---- 24 0 0030
---- 24 0 0031
---- 24 0 0032
---- 24 0 0033
---- 24 0 0034
---- 24 0 0035
---- 24 0 0036
---- 24 0 0037
-! 24 0 0041
-" 24 0 0042
-dq "
-lq "
-rq "
-# 24 0 0043
-sh "
-$ 24 0 0044
-Do "
-% 24 0 0045
-& 24 0 0046
-' 24 0 0047
-aa "
-fm "
-aq "
-cq "
-( 24 0 0050
-) 24 0 0051
-* 24 0 0052
-** "
-+ 24 0 0053
-pl "
-, 24 0 0054
-\- 24 0 0055
-hy "
-- "
-mi "
-en "
-. 24 0 0056
-/ 24 0 0057
-sl "
-f/ "
-0 24 0 0060
-1 24 0 0061
-2 24 0 0062
-3 24 0 0063
-4 24 0 0064
-5 24 0 0065
-6 24 0 0066
-7 24 0 0067
-8 24 0 0070
-9 24 0 0071
-: 24 0 0072
-; 24 0 0073
-< 24 0 0074
-la "
-fo "
-= 24 0 0075
-eq "
-> 24 0 0076
-ra "
-fc "
-? 24 0 0077
-@ 24 0 0100
-at "
-A 24 0 0101
-*A "
-B 24 0 0102
-*B "
-C 24 0 0103
-D 24 0 0104
-E 24 0 0105
-*E "
-F 24 0 0106
-G 24 0 0107
-H 24 0 0110
-*Y "
-I 24 0 0111
-*I "
-J 24 0 0112
-K 24 0 0113
-*K "
-L 24 0 0114
-M 24 0 0115
-*M "
-N 24 0 0116
-*N "
-O 24 0 0117
-ci "
-*O "
-P 24 0 0120
-*R "
-Q 24 0 0121
-R 24 0 0122
-S 24 0 0123
-T 24 0 0124
-*T "
-U 24 0 0125
-V 24 0 0126
-W 24 0 0127
-X 24 0 0130
-*X "
-Y 24 0 0131
-*U "
-Z 24 0 0132
-*Z "
-[ 24 0 0133
-lB "
-\ 24 0 0134
-rs "
-] 24 0 0135
-rB "
-a^ 24 0 0136
-^ "
-ha "
-_ 24 0 0137
-ru "
-ul "
-` 24 0 0140
-oq "
-ga "
-a 24 0 0141
-b 24 0 0142
-c 24 0 0143
-d 24 0 0144
-e 24 0 0145
-f 24 0 0146
-g 24 0 0147
-h 24 0 0150
-i 24 0 0151
-j 24 0 0152
-k 24 0 0153
-l 24 0 0154
-m 24 0 0155
-n 24 0 0156
-o 24 0 0157
-*o "
-p 24 0 0160
-q 24 0 0161
-r 24 0 0162
-s 24 0 0163
-t 24 0 0164
-u 24 0 0165
-v 24 0 0166
-w 24 0 0167
-x 24 0 0170
-mu "
-tmu "
-y 24 0 0171
-z 24 0 0172
-lC 24 0 0173
-{ "
-ba 24 0 0174
-or "
-bv "
-br "
-| "
-rC 24 0 0175
-} "
-a~ 24 0 0176
-~ "
-ap "
-ti "
---- 24 0 0177
diff --git a/contrib/groff/font/devcp1047/DESC.proto b/contrib/groff/font/devcp1047/DESC.proto
deleted file mode 100644
index 88399ab16d91..000000000000
--- a/contrib/groff/font/devcp1047/DESC.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-res 240
-hor 24
-vert 40
-unitwidth 10
-sizes 10 0
-fonts 4 R I B BI
-tcommand
-postpro grotty
diff --git a/contrib/groff/font/devcp1047/Makefile.sub b/contrib/groff/font/devcp1047/Makefile.sub
deleted file mode 100644
index 42721cb9b86e..000000000000
--- a/contrib/groff/font/devcp1047/Makefile.sub
+++ /dev/null
@@ -1,32 +0,0 @@
-DEV=cp1047
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-CLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-$(FONTS): R.proto
- @echo Making $@
- @-rm -f $@
- @(charwidth=`expr $(RES) / $(CPI)` ; \
- sed -e "s/^name [A-Z]*$$/name $@/" \
- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
- -e "s/^internalname .*$$/internalname $@/" \
- -e "/^internalname/s/BI/3/" \
- -e "/^internalname/s/B/2/" \
- -e "/^internalname/s/I/1/" \
- -e "/^internalname .*[^ 0-9]/d" \
- $(srcdir)/R.proto >$@)
-
-DESC: DESC.proto
- @echo Making $@
- @-rm -f $@
- @sed -e "s/^res .*$$/res $(RES)/" \
- -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
- -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
- $(srcdir)/DESC.proto >$@
-
diff --git a/contrib/groff/font/devcp1047/R.proto b/contrib/groff/font/devcp1047/R.proto
deleted file mode 100644
index 866ad87dc437..000000000000
--- a/contrib/groff/font/devcp1047/R.proto
+++ /dev/null
@@ -1,322 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
---- 24 0 0000
---- 24 0 0001
---- 24 0 0002
---- 24 0 0003
---- 24 0 0004
---- 24 0 0005
---- 24 0 0006
---- 24 0 0007
---- 24 0 0010
---- 24 0 0011
---- 24 0 0012
---- 24 0 0013
---- 24 0 0014
---- 24 0 0015
---- 24 0 0016
---- 24 0 0017
---- 24 0 0020
---- 24 0 0021
---- 24 0 0022
---- 24 0 0023
---- 24 0 0024
---- 24 0 0025
---- 24 0 0026
---- 24 0 0027
---- 24 0 0030
---- 24 0 0031
---- 24 0 0032
---- 24 0 0033
---- 24 0 0034
---- 24 0 0035
---- 24 0 0036
---- 24 0 0037
---- 24 0 0040
---- 24 0 0041
---- 24 0 0042
---- 24 0 0043
---- 24 0 0044
---- 24 0 0045
---- 24 0 0046
---- 24 0 0047
---- 24 0 0050
---- 24 0 0051
---- 24 0 0052
---- 24 0 0053
---- 24 0 0054
---- 24 0 0055
---- 24 0 0056
---- 24 0 0057
---- 24 0 0060
---- 24 0 0061
---- 24 0 0062
---- 24 0 0063
---- 24 0 0064
---- 24 0 0065
---- 24 0 0066
---- 24 0 0067
---- 24 0 0070
---- 24 0 0071
---- 24 0 0072
---- 24 0 0073
---- 24 0 0074
---- 24 0 0075
---- 24 0 0076
---- 24 0 0077
---- 24 0 0100
---- 24 0 0101
-^a 24 0 0102
-:a 24 0 0103
-`a 24 0 0104
-'a 24 0 0105
-~a 24 0 0106
-oa 24 0 0107
-,c 24 0 0110
-~n 24 0 0111
-ct 24 0 0112
-. 24 0 0113
-< 24 0 0114
-fo "
-la "
-( 24 0 0115
-+ 24 0 0116
-pl "
-| 24 0 0117
-ba "
-br "
-bv "
-or "
-& 24 0 0120
-'e 24 0 0121
-^e 24 0 0122
-:e 24 0 0123
-`e 24 0 0124
-'i 24 0 0125
-^i 24 0 0126
-:i 24 0 0127
-`i 24 0 0130
-ss 24 0 0131
-! 24 0 0132
-$ 24 0 0133
-Do "
-* 24 0 0134
-** "
-) 24 0 0135
-; 24 0 0136
-^ 24 0 0137
-a^ "
-ha "
-\- 24 0 0140
-- "
-en "
-hy "
-mi "
-/ 24 0 0141
-f/ "
-sl "
-^A 24 0 0142
-:A 24 0 0143
-`A 24 0 0144
-'A 24 0 0145
-~A 24 0 0146
-oA 24 0 0147
-,C 24 0 0150
-~N 24 0 0151
-bb 24 0 0152
-, 24 0 0153
-% 24 0 0154
-_ 24 0 0155
-ru "
-ul "
-> 24 0 0156
-fc "
-ra "
-? 24 0 0157
-/o 24 0 0160
-'E 24 0 0161
-^E 24 0 0162
-:E 24 0 0163
-`E 24 0 0164
-'I 24 0 0165
-^I 24 0 0166
-:I 24 0 0167
-`I 24 0 0170
-` 24 0 0171
-ga "
-oq "
-: 24 0 0172
-# 24 0 0173
-sh "
-@ 24 0 0174
-at "
-' 24 0 0175
-aq "
-fm "
-cq "
-= 24 0 0176
-eq "
-" 24 0 0177
-dq "
-lq "
-rq "
-/O 24 0 0200
-a 24 0 0201
-b 24 0 0202
-c 24 0 0203
-d 24 0 0204
-e 24 0 0205
-f 24 0 0206
-g 24 0 0207
-h 24 0 0210
-i 24 0 0211
-Fo 24 0 0212
-Fc 24 0 0213
-Sd 24 0 0214
-'y 24 0 0215
-Tp 24 0 0216
-+- 24 0 0217
-t+- "
-de 24 0 0220
-j 24 0 0221
-k 24 0 0222
-l 24 0 0223
-m 24 0 0224
-n 24 0 0225
-o 24 0 0226
-*o "
-p 24 0 0227
-q 24 0 0230
-r 24 0 0231
-Of 24 0 0232
-Om 24 0 0233
-ae 24 0 0234
-ac 24 0 0235
-AE 24 0 0236
-Cs 24 0 0237
-*m 24 0 0240
-mc "
-~ 24 0 0241
-a~ "
-ap "
-ti "
-s 24 0 0242
-t 24 0 0243
-u 24 0 0244
-v 24 0 0245
-w 24 0 0246
-x 24 0 0247
-y 24 0 0250
-z 24 0 0251
-r! 24 0 0252
-r? 24 0 0253
--D 24 0 0254
-[ 24 0 0255
-lB "
-TP 24 0 0256
-rg 24 0 0257
-no 24 0 0260
-tno "
-Po 24 0 0261
-Ye 24 0 0262
-md 24 0 0263
-pc "
-co 24 0 0264
-sc 24 0 0265
-ps 24 0 0266
-14 24 0 0267
-12 24 0 0270
-34 24 0 0271
-'Y 24 0 0272
-ad 24 0 0273
-a- 24 0 0274
-] 24 0 0275
-rB "
-aa 24 0 0276
-mu 24 0 0277
-tmu "
-{ 24 0 0300
-lC "
-A 24 0 0301
-*A "
-B 24 0 0302
-*B "
-C 24 0 0303
-D 24 0 0304
-E 24 0 0305
-*E "
-F 24 0 0306
-G 24 0 0307
-H 24 0 0310
-*Y "
-I 24 0 0311
-*I "
-shc 24 0 0312
-^o 24 0 0313
-:o 24 0 0314
-`o 24 0 0315
-'o 24 0 0316
-~o 24 0 0317
-} 24 0 0320
-rC "
-J 24 0 0321
-K 24 0 0322
-*K "
-L 24 0 0323
-M 24 0 0324
-*M "
-N 24 0 0325
-*N "
-O 24 0 0326
-*O "
-ci "
-P 24 0 0327
-*R "
-Q 24 0 0330
-R 24 0 0331
-S1 24 0 0332
-^u 24 0 0333
-:u 24 0 0334
-`u 24 0 0335
-'u 24 0 0336
-:y 24 0 0337
-\ 24 0 0340
-rs "
-di 24 0 0341
-tdi "
-S 24 0 0342
-T 24 0 0343
-*T "
-U 24 0 0344
-V 24 0 0345
-W 24 0 0346
-X 24 0 0347
-*X "
-Y 24 0 0350
-*U "
-Z 24 0 0351
-*Z "
-S2 24 0 0352
-^O 24 0 0353
-:O 24 0 0354
-`O 24 0 0355
-'O 24 0 0356
-~O 24 0 0357
-0 24 0 0360
-1 24 0 0361
-2 24 0 0362
-3 24 0 0363
-4 24 0 0364
-5 24 0 0365
-6 24 0 0366
-7 24 0 0367
-8 24 0 0370
-9 24 0 0371
-S3 24 0 0372
-^U 24 0 0373
-:U 24 0 0374
-`U 24 0 0375
-'U 24 0 0376
---- 24 0 0377
diff --git a/contrib/groff/font/devdvi/CW b/contrib/groff/font/devdvi/CW
deleted file mode 100644
index 99d5df90523b..000000000000
--- a/contrib/groff/font/devdvi/CW
+++ /dev/null
@@ -1,152 +0,0 @@
-name CW
-special
-internalname cmtt10
-spacewidth 550498
-checksum -538297224
-designsize 10485760
-charset
-*G 550498,640797 2 0000
-*D 550498,640797 2 0001
-*H 550498,640797 2 0002
-*L 550498,640797 2 0003
-*C 550498,640797 2 0004
-*P 550498,640797 2 0005
-*S 550498,640797 2 0006
-*U 550498,640797 2 0007
-*F 550498,640797 2 0010
-*Q 550498,640797 2 0011
-*W 550498,640797 2 0012
-ff 550498,640797 2 0013
-fi 550498,640797 2 0014
-fl 550498,640797 2 0015
-Fi 550498,407779,233018 1 0016
-Fl 550498,407779,233018 1 0017
-.i 550498,451470 0 0020
-.j 550498,451470,233018 1 0021
-ga 550498,640797 2 0022
-aa 550498,640797 2 0023
-ah 550498,593466 2 0024
-ab 550498,640797 2 0025
-a- 550498,593027 2 0026
-ao 550498,640797 2 0027
-ac 550498,0,203891 1 0030
-ss 550498,640797 2 0031
-ae 550498,451470 0 0032
-oe 550498,451470 0 0033
-/o 550498,567979,116509 3 0034
-AE 550498,640797 2 0035
-OE 550498,640797 2 0036
-/O 550498,699051,58254 3 0037
-u2423 550498,230104,116509 1 0040
-! 550498,640797 2 0041
-dq 550498,640797 2 0042
-" "
-sh 550498,640797 2 0043
-# "
-Do 550498,728178,87381 3 0044
-$ "
-% 550498,728178,87381 3 0045
-& 550498,640797 2 0046
-cq 550498,640797 2 0047
-' "
-( 550498,728178,87379 3 0050
-) 550498,728178,87379 3 0051
-* 550498,546134 2 0052
-+ 550498,556326,-84470 2 0053
-, 550498,131072,145635 1 0054
-\- 550498,556326,-84470 2 0055
-- "
-. 550498,131072 0 0056
-sl 550498,728178,87379 3 0057
-/ "
-0 550498,640797 2 0060
-1 550498,640797 2 0061
-2 550498,640797 2 0062
-3 550498,640797 2 0063
-4 550498,640797 2 0064
-5 550498,640797 2 0065
-6 550498,640797 2 0066
-7 550498,640797 2 0067
-8 550498,640797 2 0070
-9 550498,640797 2 0071
-: 550498,451470 0 0072
-; 550498,451470,145635 1 0073
-< 550498,582542,-58254 2 0074
-= 550498,435813,-204984 0 0075
-> 550498,582542,-58254 2 0076
-? 550498,640797 2 0077
-at 550498,640797 2 0100
-@ "
-A 550498,640797 2 0101
-B 550498,640797 2 0102
-C 550498,640797 2 0103
-D 550498,640797 2 0104
-E 550498,640797 2 0105
-F 550498,640797 2 0106
-G 550498,640797 2 0107
-H 550498,640797 2 0110
-I 550498,640797 2 0111
-J 550498,640797 2 0112
-K 550498,640797 2 0113
-L 550498,640797 2 0114
-M 550498,640797 2 0115
-N 550498,640797 2 0116
-O 550498,640797 2 0117
-P 550498,640797 2 0120
-Q 550498,640797,145635 3 0121
-R 550498,640797 2 0122
-S 550498,640797 2 0123
-T 550498,640797 2 0124
-U 550498,640797 2 0125
-V 550498,640797 2 0126
-W 550498,640797 2 0127
-X 550498,640797 2 0130
-Y 550498,640797 2 0131
-Z 550498,640797 2 0132
-lB 550498,728178,87379 3 0133
-[ "
-rs 550498,728178,87379 3 0134
-\ "
-rB 550498,728178,87379 3 0135
-] "
-ha 550498,640797 2 0136
-^ "
-a^ "
-_ 550498,0,99757 1 0137
-oq 550498,640797 2 0140
-` "
-a 550498,451470 0 0141
-b 550498,640797 2 0142
-c 550498,451470 0 0143
-d 550498,640797 2 0144
-e 550498,451470 0 0145
-f 550498,640797 2 0146
-g 550498,451470,233018 1 0147
-h 550498,640797 2 0150
-i 550498,640797 2 0151
-j 550498,640797,233018 3 0152
-k 550498,640797 2 0153
-l 550498,640797 2 0154
-m 550498,451470 0 0155
-n 550498,451470 0 0156
-o 550498,451470 0 0157
-p 550498,451470,233018 1 0160
-q 550498,451470,233018 1 0161
-r 550498,451470 0 0162
-s 550498,451470 0 0163
-t 550498,580466 2 0164
-u 550498,451470 0 0165
-v 550498,451470 0 0166
-w 550498,451470 0 0167
-x 550498,451470 0 0170
-y 550498,451470,233018 1 0171
-z 550498,451470 0 0172
-{ 550498,728178,87379 3 0173
-lC "
-| 550498,728178,87379 3 0174
-ba "
-} 550498,728178,87379 3 0175
-rC "
-~ 550498,640797 2 0176
-a~ "
-ad 550498,640797 2 0177
diff --git a/contrib/groff/font/devdvi/CWEC b/contrib/groff/font/devdvi/CWEC
deleted file mode 100644
index d7779019e1a0..000000000000
--- a/contrib/groff/font/devdvi/CWEC
+++ /dev/null
@@ -1,280 +0,0 @@
-name CWEC
-internalname ectt1000
-spacewidth 550368
-checksum 1900807883
-designsize 10485760
-charset
-ga 550368,640640 2 0000
-aa 550368,640640 2 0001
-a^ 550368,669760 2 0002
-a~ 550368,669760 2 0003
-ad 550368,640640 2 0004
-a" 550368,640640 2 0005
-ao 550368,669760 2 0006
-ah 550368,669760 2 0007
-ab 550368,669760 2 0010
-a- 550368,640640 2 0011
-a. 550368,640640 2 0012
-ac 550368,0,203840 1 0013
-ho 550368,0,232960 1 0014
-bq 550368,131040,145600 1 0015
-fo 550368,460096 2 0016
-fc 550368,460096 2 0017
-lq 550368,640640 2 0020
-rq 550368,640640 2 0021
-Bq 550368,131040,145600 1 0022
-Fo 550368,460096 2 0023
-Fc 550368,460096 2 0024
-en 550368,451360 0 0025
-em 550368,451360 0 0026
---- 0,451360 0 0027
---- 550368,728000,87360 3 0030
-.i 550368,451360 0 0031
-.j 550368,451360,232960 1 0032
-ff 550368,640640 2 0033
-fi 550368,640640 2 0034
-fl 550368,640640 2 0035
-Fi 550368,640640 2 0036
-Fl 550368,640640 2 0037
-u2423 550368,451360,116480 1 0040
-u01C3 550368,640640 2 0041
-! "
-dq 550368,640640 2 0042
-" "
-sh 550368,640640 2 0043
-# "
-Do 550368,728000,87360 3 0044
-$ "
-% 550368,728000,87360 3 0045
-& 550368,640640 2 0046
-cq 550368,640640 2 0047
-' "
-( 550368,728000,87360 3 0050
-) 550368,728000,87360 3 0051
-* 550368,546000 2 0052
-+ 550368,556192,-84448 2 0053
-, 550368,131040,145600 1 0054
-- 550368,451360 0 0055
-. 550368,131040 0 0056
-sl 550368,728000,87360 3 0057
-/ "
-0 550368,640640 2 0060
-1 550368,640640 2 0061
-2 550368,640640 2 0062
-3 550368,640640 2 0063
-4 550368,640640 2 0064
-5 550368,640640 2 0065
-6 550368,640640 2 0066
-7 550368,640640 2 0067
-8 550368,640640 2 0070
-9 550368,640640 2 0071
-: 550368,451360 0 0072
-; 550368,451360,145600 1 0073
-< 550368,581362,-58240 2 0074
-= 550368,435706,-204934 0 0075
-> 550368,581362,-58240 2 0076
-? 550368,640640 2 0077
-at 550368,640640 2 0100
-@ "
-A 550368,640640 2 0101
-B 550368,640640 2 0102
-C 550368,640640 2 0103
-D 550368,640640 2 0104
-E 550368,640640 2 0105
-F 550368,640640 2 0106
-G 550368,640640 2 0107
-H 550368,640640 2 0110
-I 550368,640640 2 0111
-J 550368,640640 2 0112
-K 550368,640640 2 0113
-L 550368,640640 2 0114
-M 550368,640640 2 0115
-N 550368,640640 2 0116
-O 550368,640640 2 0117
-P 550368,640640 2 0120
-Q 550368,640640,145600 3 0121
-R 550368,640640 2 0122
-S 550368,640640 2 0123
-T 550368,640640 2 0124
-U 550368,640640 2 0125
-V 550368,640640 2 0126
-W 550368,640640 2 0127
-X 550368,640640 2 0130
-Y 550368,640640 2 0131
-Z 550368,640640 2 0132
-lB 550368,728000,87360 3 0133
-[ "
-rs 550368,728000,87360 3 0134
-\ "
-rB 550368,728000,87360 3 0135
-] "
-ha 550368,640640 2 0136
-^ "
-_ 550368,0,99733 1 0137
-oq 550368,640640 2 0140
-` "
-a 550368,451360 0 0141
-b 550368,640640 2 0142
-c 550368,451360 0 0143
-d 550368,640640 2 0144
-e 550368,451360 0 0145
-f 550368,640640 2 0146
-g 550368,451360,232960 1 0147
-h 550368,640640 2 0150
-i 550368,640640 2 0151
-j 550368,640640,232960 3 0152
-k 550368,640640 2 0153
-l 550368,640640 2 0154
-m 550368,451360 0 0155
-n 550368,451360 0 0156
-o 550368,451360 0 0157
-p 550368,451360,232960 1 0160
-q 550368,451360,232960 1 0161
-r 550368,451360 0 0162
-s 550368,451360 0 0163
-t 550368,581362 2 0164
-u 550368,451360 0 0165
-v 550368,451360 0 0166
-w 550368,451360 0 0167
-x 550368,451360 0 0170
-y 550368,451360,232960 1 0171
-z 550368,451360 0 0172
-lC 550368,728000,87360 3 0173
-{ "
-u01C0 550368,728000,87360 3 0174
-ba "
-| "
-rC 550368,728000,87360 3 0175
-} "
-~ 550368,640640 2 0176
-hy 550368,451360 0 0177
-u0041_0306 550368,859040 2 0200
-u0041_0328 550368,640640,232960 3 0201
-'C 550368,816227 2 0202
-u0043_030C 550368,859040 2 0203
-u0044_030C 550368,859040 2 0204
-u0045_030C 550368,859040 2 0205
-u0045_0328 550368,640640,232960 3 0206
-u0047_0306 550368,859040 2 0207
-u004C_0301 550368,816227 2 0210
-u004C_030C 550368,859040 2 0211
-/L 550368,640640 2 0212
-u004E_0301 550368,816227 2 0213
-u004E_030C 550368,859040 2 0214
-u014A 550368,640640 2 0215
-u004F_030B 550368,816227 2 0216
-u0052_0301 550368,816227 2 0217
-u0052_030C 550368,859040 2 0220
-u0053_0301 550368,816227 2 0221
-vS 550368,859040 2 0222
-u0053_0327 550368,640640,203840 3 0223
-u0054_030C 550368,859040 2 0224
-u0054_0327 550368,640640,203840 3 0225
-u0055_030B 550368,816227 2 0226
-u0055_030A 550368,859040 2 0227
-:Y 550368,859040 2 0230
-u005A_0301 550368,816227 2 0231
-vZ 550368,859040 2 0232
-u005A_0307 550368,816227 2 0233
-IJ 550368,640640 2 0234
-u0049_0307 550368,816227 2 0235
-u0111 550368,640640 2 0236
-sc 550368,640640,232960 3 0237
-u0061_0306 550368,669760 2 0240
-u0061_0328 550368,451360,232960 1 0241
-'c 550368,640640 2 0242
-u0063_030C 550368,669760 2 0243
-u0064_030C 550368,640640 2 0244
-u0065_030C 550368,669760 2 0245
-u0065_0328 550368,451360,232960 1 0246
-u0067_0306 550368,669760,232960 3 0247
-u006C_0301 550368,816227 2 0250
-u006C_030C 550368,640640 2 0251
-/l 550368,640640 2 0252
-u006E_0301 550368,640640 2 0253
-u006E_030C 550368,669760 2 0254
-u016A 550368,451360,232960 1 0255
-u006F_030B 550368,640640 2 0256
-u0072_0301 550368,640640 2 0257
-u0072_030C 550368,669760 2 0260
-u0073_0301 550368,640640 2 0261
-vs 550368,669760 2 0262
-u0073_0327 550368,451360,203840 1 0263
-u0074_030C 550368,640640 2 0264
-u0074_0327 550368,581362,203840 3 0265
-u0075_030B 550368,640640 2 0266
-u0075_030A 550368,669760 2 0267
-:y 550368,640640,232960 3 0270
-u007A_0301 550368,640640 2 0271
-vz 550368,669760 2 0272
-u007A_0307 550368,640640 2 0273
-ij 550368,640640,232960 3 0274
-r! 550368,407680,232960 1 0275
-r? 550368,407680,232960 1 0276
-Po 550368,640640 2 0277
-`A 550368,816227 2 0300
-'A 550368,816227 2 0301
-^A 550368,859040 2 0302
-~A 550368,859040 2 0303
-:A 550368,859040 2 0304
-oA 550368,816227 2 0305
-AE 550368,640640 2 0306
-,C 550368,640640,203840 3 0307
-`E 550368,816227 2 0310
-'E 550368,816227 2 0311
-^E 550368,859040 2 0312
-:E 550368,859040 2 0313
-`I 550368,816227 2 0314
-'I 550368,816227 2 0315
-^I 550368,859040 2 0316
-:I 550368,859040 2 0317
-u0189 550368,640640 2 0320
-u0110 "
--D "
-~N 550368,859040 2 0321
-`O 550368,816227 2 0322
-'O 550368,816227 2 0323
-^O 550368,859040 2 0324
-~O 550368,859040 2 0325
-:O 550368,859040 2 0326
-OE 550368,640640 2 0327
-/O 550368,698880,58240 3 0330
-`U 550368,816227 2 0331
-'U 550368,816227 2 0332
-^U 550368,859040 2 0333
-:U 550368,859040 2 0334
-'Y 550368,816227 2 0335
-TP 550368,640640 2 0336
---- 550368,640640 2 0337
-`a 550368,640640 2 0340
-'a 550368,640640 2 0341
-^a 550368,669760 2 0342
-~a 550368,669760 2 0343
-:a 550368,640640 2 0344
-oa 550368,669760 2 0345
-ae 550368,451360 0 0346
-,c 550368,451360,203840 1 0347
-`e 550368,640640 2 0350
-'e 550368,640640 2 0351
-^e 550368,669760 2 0352
-:e 550368,640640 2 0353
-`i 550368,640640 2 0354
-'i 550368,640640 2 0355
-^i 550368,669760 2 0356
-:i 550368,640640 2 0357
-Sd 550368,640640 2 0360
-~n 550368,669760 2 0361
-`o 550368,640640 2 0362
-'o 550368,640640 2 0363
-^o 550368,669760 2 0364
-~o 550368,669760 2 0365
-:o 550368,640640 2 0366
-oe 550368,451360 0 0367
-/o 550368,567840,116480 3 0370
-`u 550368,640640 2 0371
-'u 550368,640640 2 0372
-^u 550368,669760 2 0373
-:u 550368,640640 2 0374
-'y 550368,640640,232960 3 0375
-Tp 550368,640640,232960 3 0376
-ss 550368,640640 2 0377
diff --git a/contrib/groff/font/devdvi/CWI b/contrib/groff/font/devdvi/CWI
deleted file mode 100644
index e39575d34642..000000000000
--- a/contrib/groff/font/devdvi/CWI
+++ /dev/null
@@ -1,152 +0,0 @@
-name CWI
-internalname cmitt10
-spacewidth 550498
-slant 14.036243
-checksum -538297224
-designsize 10485760
-charset
-*G 550498,640797,0,182045 2 0000
-*D 550498,640797,0,182045 2 0001
-*H 550498,640797,0,182045 2 0002
-*L 550498,640797,0,182045 2 0003
-*C 550498,640797,0,182045 2 0004
-*P 550498,640797,0,182045 2 0005
-*S 550498,640797,0,182045 2 0006
-*U 550498,640797,0,182045 2 0007
-*F 550498,640797,0,182045 2 0010
-*Q 550498,640797,0,182045 2 0011
-*W 550498,640797,0,182045 2 0012
-ff 550498,640797,0,182045 2 0013
-fi 550498,640797,0,182045 2 0014
-fl 550498,640797,0,182045 2 0015
-Fi 550498,407779,233018,182045 1 0016
-Fl 550498,407779,233018,182045 1 0017
-.i 550498,451470,0,182045 0 0020
-.j 550498,451470,233018,182045 1 0021
-ga 550498,640797,0,182045 2 0022
-aa 550498,640797,0,182045 2 0023
-ah 550498,593466,0,182045 2 0024
-ab 550498,640797,0,182045 2 0025
-a- 550498,593027,0,182045 2 0026
-ao 550498,640797,0,182045 2 0027
-ac 550498,0,203891,182045 1 0030
-ss 550498,640797,233018,182045 3 0031
-ae 550498,451470,0,182045 0 0032
-oe 550498,451470,0,182045 0 0033
-/o 550498,567979,116509,182045 3 0034
-AE 550498,640797,0,182045 2 0035
-OE 550498,640797,0,182045 2 0036
-/O 550498,699051,58254,182045 3 0037
-u2423 550498,230104,116509,182045 1 0040
-! 550498,640797,0,182045 2 0041
-dq 550498,640797,0,182045 2 0042
-" "
-sh 550498,640797,0,182045 2 0043
-# "
-Do 550498,640797,0,182045 2 0044
-$ "
-% 550498,728178,87381,182045 3 0045
-& 550498,640797,0,182045 2 0046
-cq 550498,640797,0,182045 2 0047
-' "
-( 550498,728178,87379,182045 3 0050
-) 550498,728178,87379,182045 3 0051
-* 550498,546134,0,182045 2 0052
-+ 550498,556326,-84470,182045 2 0053
-, 550498,131072,145635,182045 1 0054
-\- 550498,556326,-84470,182045 2 0055
-- "
-. 550498,131072,0,182045 0 0056
-sl 550498,728178,87379,182045 3 0057
-/ "
-0 550498,640797,0,182045 2 0060
-1 550498,640797,0,182045 2 0061
-2 550498,640797,0,182045 2 0062
-3 550498,640797,0,182045 2 0063
-4 550498,640797,233018,182045 3 0064
-5 550498,640797,0,182045 2 0065
-6 550498,640797,0,182045 2 0066
-7 550498,640797,233018,182045 3 0067
-8 550498,640797,0,182045 2 0070
-9 550498,640797,0,182045 2 0071
-: 550498,451470,0,182045 0 0072
-; 550498,451470,145635,182045 1 0073
-< 550498,582542,-58254,182045 2 0074
-= 550498,435813,-204984,182045 0 0075
-> 550498,582542,-58254,182045 2 0076
-? 550498,640797,0,182045 2 0077
-at 550498,640797,0,182045 2 0100
-@ "
-A 550498,640797,0,182045 2 0101
-B 550498,640797,0,182045 2 0102
-C 550498,640797,0,182045 2 0103
-D 550498,640797,0,182045 2 0104
-E 550498,640797,0,182045 2 0105
-F 550498,640797,0,182045 2 0106
-G 550498,640797,0,182045 2 0107
-H 550498,640797,0,182045 2 0110
-I 550498,640797,0,182045 2 0111
-J 550498,640797,0,182045 2 0112
-K 550498,640797,0,182045 2 0113
-L 550498,640797,0,182045 2 0114
-M 550498,640797,0,182045 2 0115
-N 550498,640797,0,182045 2 0116
-O 550498,640797,0,182045 2 0117
-P 550498,640797,0,182045 2 0120
-Q 550498,640797,145635,182045 3 0121
-R 550498,640797,0,182045 2 0122
-S 550498,640797,0,182045 2 0123
-T 550498,640797,0,182045 2 0124
-U 550498,640797,0,182045 2 0125
-V 550498,640797,0,182045 2 0126
-W 550498,640797,0,182045 2 0127
-X 550498,640797,0,182045 2 0130
-Y 550498,640797,0,182045 2 0131
-Z 550498,640797,0,182045 2 0132
-lB 550498,728178,87379,182045 3 0133
-[ "
-rs 550498,728178,87379,182045 3 0134
-\ "
-rB 550498,728178,87379,182045 3 0135
-] "
-ha 550498,640797,0,182045 2 0136
-^ "
-a^ "
-_ 550498,0,99757,182045 1 0137
-oq 550498,640797,0,182045 2 0140
-` "
-a 550498,451470,0,182045 0 0141
-b 550498,640797,0,182045 2 0142
-c 550498,451470,0,182045 0 0143
-d 550498,640797,0,182045 2 0144
-e 550498,451470,0,182045 0 0145
-f 550498,640797,233018,182045 3 0146
-g 550498,451470,233018,182045 1 0147
-h 550498,640797,0,182045 2 0150
-i 550498,640797,0,182045 2 0151
-j 550498,640797,233018,182045 3 0152
-k 550498,640797,0,182045 2 0153
-l 550498,640797,0,182045 2 0154
-m 550498,451470,0,182045 0 0155
-n 550498,451470,0,182045 0 0156
-o 550498,451470,0,182045 0 0157
-p 550498,451470,233018,182045 1 0160
-q 550498,451470,233018,182045 1 0161
-r 550498,451470,0,182045 0 0162
-s 550498,451470,0,182045 0 0163
-t 550498,640797,0,182045 2 0164
-u 550498,451470,0,182045 0 0165
-v 550498,451470,0,182045 0 0166
-w 550498,451470,0,182045 0 0167
-x 550498,451470,0,182045 0 0170
-y 550498,451470,233018,182045 1 0171
-z 550498,451470,0,182045 0 0172
-{ 550498,728178,87379,182045 3 0173
-lC "
-| 550498,728178,87379,182045 3 0174
-ba "
-} 550498,728178,87379,182045 3 0175
-rC "
-~ 550498,640797,0,182045 2 0176
-a~ "
-ad 550498,640797,0,182045 2 0177
diff --git a/contrib/groff/font/devdvi/CWIEC b/contrib/groff/font/devdvi/CWIEC
deleted file mode 100644
index 5e2356bdaddb..000000000000
--- a/contrib/groff/font/devdvi/CWIEC
+++ /dev/null
@@ -1,281 +0,0 @@
-name CWIEC
-internalname ecit1000
-spacewidth 550368
-slant 14.036243
-checksum 1900807883
-designsize 10485760
-charset
-ga 550368,640640,0,182000 2 0000
-aa 550368,640640,0,182000 2 0001
-a^ 550368,669760 2 0002
-a~ 550368,669760,0,182000 2 0003
-ad 550368,640640,0,182000 2 0004
-a" 550368,640640,0,182000 2 0005
-ao 550368,669760,0,182000 2 0006
-ah 550368,669760 2 0007
-ab 550368,669760,0,182000 2 0010
-a- 550368,640640,0,182000 2 0011
-a. 550368,640640,0,182000 2 0012
-ac 550368,0,203840,182000 1 0013
-ho 550368,0,232960,182000 1 0014
-bq 550368,131040,145600,182000 1 0015
-fo 550368,460096,0,182000 2 0016
-fc 550368,460096,0,182000 2 0017
-lq 550368,640640,0,182000 2 0020
-rq 550368,640640,0,182000 2 0021
-Bq 550368,131040,145600,182000 1 0022
-Fo 550368,460096,0,182000 2 0023
-Fc 550368,460096,0,182000 2 0024
-en 550368,451360,0,182000 0 0025
-em 550368,451360,0,182000 0 0026
---- 0,451360 0 0027
---- 550368,728000,87360,182000 3 0030
-.i 550368,451360,0,182000 0 0031
-.j 550368,451360,232960,182000 1 0032
-ff 550368,640640,232960,182000 3 0033
-fi 550368,640640,232960,182000 3 0034
-fl 550368,640640,232960,182000 3 0035
-Fi 550368,640640,232960,182000 3 0036
-Fl 550368,640640,232960,182000 3 0037
-u2423 550368,451360,116480,182000 1 0040
-u01C3 550368,640640,0,182000 2 0041
-! "
-dq 550368,640640,0,182000 2 0042
-" "
-sh 550368,640640,0,182000 2 0043
-# "
-Do 550368,728000,87360,182000 3 0044
-$ "
-% 550368,728000,87360,182000 3 0045
-& 550368,640640,0,182000 2 0046
-cq 550368,640640,0,182000 2 0047
-' "
-( 550368,728000,87360,182000 3 0050
-) 550368,728000,87360,182000 3 0051
-* 550368,546000,0,182000 2 0052
-+ 550368,556192,-84448,182000 2 0053
-, 550368,131040,145600,182000 1 0054
-- 550368,451360,0,182000 0 0055
-. 550368,131040,0,182000 0 0056
-sl 550368,728000,87360,182000 3 0057
-/ "
-0 550368,640640,0,182000 2 0060
-1 550368,640640,0,182000 2 0061
-2 550368,640640,0,182000 2 0062
-3 550368,640640,0,182000 2 0063
-4 550368,640640,232960,182000 3 0064
-5 550368,640640,0,182000 2 0065
-6 550368,640640,0,182000 2 0066
-7 550368,640640,0,182000 2 0067
-8 550368,640640,0,182000 2 0070
-9 550368,640640,0,182000 2 0071
-: 550368,451360,0,182000 0 0072
-; 550368,451360,145600,182000 1 0073
-< 550368,582400,-58240,182000 2 0074
-= 550368,435706,-204934,182000 0 0075
-> 550368,582400,-58240,182000 2 0076
-? 550368,640640,0,182000 2 0077
-at 550368,640640,0,182000 2 0100
-@ "
-A 550368,640640,0,182000 2 0101
-B 550368,640640,0,182000 2 0102
-C 550368,640640,0,182000 2 0103
-D 550368,640640,0,182000 2 0104
-E 550368,640640,0,182000 2 0105
-F 550368,640640,0,182000 2 0106
-G 550368,640640,0,182000 2 0107
-H 550368,640640,0,182000 2 0110
-I 550368,640640,0,182000 2 0111
-J 550368,640640,0,182000 2 0112
-K 550368,640640,0,182000 2 0113
-L 550368,640640,0,182000 2 0114
-M 550368,640640,0,182000 2 0115
-N 550368,640640,0,182000 2 0116
-O 550368,640640,0,182000 2 0117
-P 550368,640640,0,182000 2 0120
-Q 550368,640640,145600,182000 3 0121
-R 550368,640640,0,182000 2 0122
-S 550368,640640,0,182000 2 0123
-T 550368,640640,0,182000 2 0124
-U 550368,640640,0,182000 2 0125
-V 550368,640640,0,182000 2 0126
-W 550368,640640,0,182000 2 0127
-X 550368,640640,0,182000 2 0130
-Y 550368,640640,0,182000 2 0131
-Z 550368,640640,0,182000 2 0132
-lB 550368,728000,87360,182000 3 0133
-[ "
-rs 550368,728000,87360,182000 3 0134
-\ "
-rB 550368,728000,87360,182000 3 0135
-] "
-ha 550368,640640,0,182000 2 0136
-^ "
-_ 550368,0,99733,182000 1 0137
-oq 550368,640640,0,182000 2 0140
-` "
-a 550368,451360,0,182000 0 0141
-b 550368,640640,0,182000 2 0142
-c 550368,451360,0,182000 0 0143
-d 550368,640640,0,182000 2 0144
-e 550368,451360,0,182000 0 0145
-f 550368,640640,232960,182000 3 0146
-g 550368,451360,232960,182000 1 0147
-h 550368,640640,0,182000 2 0150
-i 550368,640640,0,182000 2 0151
-j 550368,640640,232960,182000 3 0152
-k 550368,640640,0,182000 2 0153
-l 550368,640640,0,182000 2 0154
-m 550368,451360,0,182000 0 0155
-n 550368,451360,0,182000 0 0156
-o 550368,451360,0,182000 0 0157
-p 550368,451360,232960,182000 1 0160
-q 550368,451360,232960,182000 1 0161
-r 550368,451360,0,182000 0 0162
-s 550368,451360,0,182000 0 0163
-t 550368,640640,0,182000 2 0164
-u 550368,451360,0,182000 0 0165
-v 550368,451360,0,182000 0 0166
-w 550368,451360,0,182000 0 0167
-x 550368,451360,0,182000 0 0170
-y 550368,451360,232960,182000 1 0171
-z 550368,451360,0,182000 0 0172
-lC 550368,728000,87360,182000 3 0173
-{ "
-u01C0 550368,728000,87360,182000 3 0174
-ba "
-| "
-rC 550368,728000,87360,182000 3 0175
-} "
-~ 550368,640640,0,182000 2 0176
-hy 550368,451360,0,182000 0 0177
-u0041_0306 550368,859040,0,182000 2 0200
-u0041_0328 550368,640640,232960,182000 3 0201
-'C 550368,816379,0,182000 2 0202
-u0043_030C 550368,859040,0,182000 2 0203
-u0044_030C 550368,859040,0,182000 2 0204
-u0045_030C 550368,859040,0,182000 2 0205
-u0045_0328 550368,640640,232960,182000 3 0206
-u0047_0306 550368,859040,0,182000 2 0207
-u004C_0301 550368,816379,0,182000 2 0210
-u004C_030C 550368,859040,0,182000 2 0211
-/L 550368,640640,0,182000 2 0212
-u004E_0301 550368,816379,0,182000 2 0213
-u004E_030C 550368,859040,0,182000 2 0214
-u014A 550368,640640,0,160160 2 0215
-u004F_030B 550368,816379,0,182000 2 0216
-u0052_0301 550368,816379,0,182000 2 0217
-u0052_030C 550368,859040,0,182000 2 0220
-u0053_0301 550368,816379,0,182000 2 0221
-vS 550368,859040,0,182000 2 0222
-u0053_0327 550368,640640,203840,182000 3 0223
-u0054_030C 550368,859040,0,182000 2 0224
-u0054_0327 550368,640640,203840,182000 3 0225
-u0055_030B 550368,816379,0,182000 2 0226
-u0055_030A 550368,859040,0,182000 2 0227
-:Y 550368,859040,0,182000 2 0230
-u005A_0301 550368,816379,0,182000 2 0231
-vZ 550368,859040,0,182000 2 0232
-u005A_0307 550368,816379,0,182000 2 0233
-IJ 550368,640640,0,182000 2 0234
-u0049_0307 550368,816379,0,182000 2 0235
-u0111 550368,640640,0,182000 2 0236
-sc 550368,640640,232960,182000 3 0237
-u0061_0306 550368,669760,0,182000 2 0240
-u0061_0328 550368,451360,232960,182000 1 0241
-'c 550368,640640,0,182000 2 0242
-u0063_030C 550368,669760,0,182000 2 0243
-u0064_030C 550368,640640,0,182000 2 0244
-u0065_030C 550368,669760,0,182000 2 0245
-u0065_0328 550368,451360,232960,182000 1 0246
-u0067_0306 550368,669760,232960,182000 3 0247
-u006C_0301 550368,816379,0,182000 2 0250
-u006C_030C 550368,640640,0,182000 2 0251
-/l 550368,640640,0,182000 2 0252
-u006E_0301 550368,640640,0,182000 2 0253
-u006E_030C 550368,669760,0,182000 2 0254
-u016A 550368,451360,232960,182000 1 0255
-u006F_030B 550368,669760,0,182000 2 0256
-u0072_0301 550368,640640,0,182000 2 0257
-u0072_030C 550368,669760,0,182000 2 0260
-u0073_0301 550368,640640,0,182000 2 0261
-vs 550368,669760,0,182000 2 0262
-u0073_0327 550368,451360,203840,182000 1 0263
-u0074_030C 550368,640640,0,182000 2 0264
-u0074_0327 550368,640640,203840,182000 3 0265
-u0075_030B 550368,640640,0,182000 2 0266
-u0075_030A 550368,669760,0,182000 2 0267
-:y 550368,669760,232960,182000 3 0270
-u007A_0301 550368,640640,0,182000 2 0271
-vz 550368,669760,0,182000 2 0272
-u007A_0307 550368,640640,0,182000 2 0273
-ij 550368,640640,232960,182000 3 0274
-r! 550368,407680,232960,182000 1 0275
-r? 550368,407680,232960,182000 1 0276
-Po 550368,640640,0,182000 2 0277
-`A 550368,816379,0,182000 2 0300
-'A 550368,816379,0,182000 2 0301
-^A 550368,859040,0,182000 2 0302
-~A 550368,859040,0,182000 2 0303
-:A 550368,859040,0,182000 2 0304
-oA 550368,816379,0,182000 2 0305
-AE 550368,640640,0,182000 2 0306
-,C 550368,640640,203840,182000 3 0307
-`E 550368,816379,0,182000 2 0310
-'E 550368,816379,0,182000 2 0311
-^E 550368,859040,0,182000 2 0312
-:E 550368,859040,0,182000 2 0313
-`I 550368,816379,0,182000 2 0314
-'I 550368,816379,0,182000 2 0315
-^I 550368,859040,0,182000 2 0316
-:I 550368,859040,0,182000 2 0317
-u0189 550368,640640,0,182000 2 0320
-u0110 "
--D "
-~N 550368,859040,0,182000 2 0321
-`O 550368,816379,0,182000 2 0322
-'O 550368,816379,0,182000 2 0323
-^O 550368,859040,0,182000 2 0324
-~O 550368,859040,0,182000 2 0325
-:O 550368,859040,0,182000 2 0326
-OE 550368,640640,0,182000 2 0327
-/O 550368,698880,58240,182000 3 0330
-`U 550368,816379,0,182000 2 0331
-'U 550368,816379,0,182000 2 0332
-^U 550368,859040,0,182000 2 0333
-:U 550368,859040,0,182000 2 0334
-'Y 550368,816379,0,182000 2 0335
-TP 550368,640640,0,182000 2 0336
---- 550368,640640,0,182000 2 0337
-`a 550368,640640,0,182000 2 0340
-'a 550368,640640,0,182000 2 0341
-^a 550368,669760,0,182000 2 0342
-~a 550368,669760,0,182000 2 0343
-:a 550368,669760,0,182000 2 0344
-oa 550368,669760,0,182000 2 0345
-ae 550368,451360,0,182000 0 0346
-,c 550368,451360,203840,182000 1 0347
-`e 550368,640640,0,182000 2 0350
-'e 550368,640640,0,182000 2 0351
-^e 550368,669760,0,182000 2 0352
-:e 550368,669760,0,182000 2 0353
-`i 550368,640640,0,182000 2 0354
-'i 550368,640640,0,182000 2 0355
-^i 550368,669760,0,182000 2 0356
-:i 550368,669760,0,182000 2 0357
-Sd 550368,640640,0,182000 2 0360
-~n 550368,669760,0,182000 2 0361
-`o 550368,640640,0,182000 2 0362
-'o 550368,640640,0,182000 2 0363
-^o 550368,669760,0,182000 2 0364
-~o 550368,669760,0,182000 2 0365
-:o 550368,669760,0,182000 2 0366
-oe 550368,451360,0,182000 0 0367
-/o 550368,567840,116480,182000 3 0370
-`u 550368,640640,0,182000 2 0371
-'u 550368,640640,0,182000 2 0372
-^u 550368,669760,0,182000 2 0373
-:u 550368,669760,0,182000 2 0374
-'y 550368,640640,232960,182000 3 0375
-Tp 550368,640640,232960,182000 3 0376
-ss 550368,640640,232960,182000 3 0377
diff --git a/contrib/groff/font/devdvi/CWITC b/contrib/groff/font/devdvi/CWITC
deleted file mode 100644
index 65d6ddb6083b..000000000000
--- a/contrib/groff/font/devdvi/CWITC
+++ /dev/null
@@ -1,138 +0,0 @@
-name CWITC
-special
-internalname tcit1000
-spacewidth 550368
-slant 14.036243
-checksum 1703447420
-designsize 10485760
-charset
---- 550368,628074,0,182000 2 0000
---- 550368,628074,0,182000 2 0001
---- 550368,669760,0,182000 2 0002
---- 550368,669760,0,182000 2 0003
---- 550368,669760,0,182000 2 0004
---- 550368,628074,0,182000 2 0005
---- 550368,669760,0,182000 2 0006
---- 550368,669760,0,182000 2 0007
---- 550368,669760,0,182000 2 0010
---- 550368,669760,0,182000 2 0011
---- 550368,628074,0,182000 2 0012
---- 550368,0,203840,182000 1 0013
---- 550368,0,232960,182000 1 0014
---- 550368,104832,232960,182000 1 0015
---- 550368,104832,232960,182000 1 0022
---- 550368,451360,0,182000 0 0025
---- 550368,451360,0,182000 0 0026
---- 0,640640 2 0027
-<- 550368,435706,-204934,182000 0 0030
--> 550368,435706,-204934,182000 0 0031
---- 550368,640640,0,182000 2 0032
---- 550368,829920,0,182000 2 0033
---- 550368,640640,0,182000 2 0034
---- 550368,640640,0,182000 2 0035
---- 0,640640 2 0037
-u2422 550368,640640,0,182000 2 0040
-Do 550368,728000,87360,182000 3 0044
-$ "
-aq 550368,640640,0,182000 2 0047
---- 550368,551096,-94640,182000 2 0052
-, 550368,130000,145600,182000 1 0054
---- 550368,435706,-204934,182000 0 0055
-. 550368,130000,0,182000 0 0056
-f/ 550368,728000,87360,182000 3 0057
-0 550368,451360,0,182000 0 0060
-1 550368,451360,0,182000 0 0061
-2 550368,451360,0,182000 0 0062
-3 550368,451360,232960,182000 1 0063
-4 550368,451360,232960,182000 1 0064
-5 550368,451360,232960,182000 1 0065
-6 550368,640640,0,182000 2 0066
-7 550368,451360,232960,182000 1 0067
-8 550368,640640,0,182000 2 0070
-9 550368,451360,232960,182000 1 0071
-la 550368,728000,87360,182000 3 0074
-\- 550368,551096,-84448,182000 2 0075
-ra 550368,728000,87360,182000 3 0076
-u2127 550368,640640,0,182000 2 0115
-ci 550368,728000,232960,182000 3 0117
-u03A9 550368,640640,0,182000 2 0127
-u301A 550368,728000,87360,182000 3 0133
-u301B 550368,728000,87360,182000 3 0135
-ua 550368,640640,0,182000 2 0136
-da 550368,640640,0,182000 2 0137
---- 550368,640640,0,182000 2 0140
---- 550368,551096,-94640,182000 2 0142
---- 550368,551096,-94640,182000 2 0143
---- 550368,571115,18930,182000 3 0144
---- 550368,640640,0,182000 2 0154
---- 550368,551096,-94640,182000 2 0155
-u266A 672672,640640 2 0156
-ti 550368,130000,0,182000 0 0176
-~ "
---- 550368,435706,-204934,182000 0 0177
---- 550368,640640,0,182000 2 0200
---- 550368,640640,0,182000 2 0201
---- 550368,640640,0,182000 2 0202
---- 550368,640640,0,182000 2 0203
-dg 550368,640640,232960,182000 3 0204
-dd 550368,640640,232960,182000 3 0205
-u2016 550368,728000,87360,182000 3 0206
-%0 550368,728000,87360,182000 3 0207
-bu 550368,534352,-106288,182000 2 0210
-u2103 550368,640640,0,182000 2 0211
---- 550368,728000,87360,182000 3 0212
---- 550368,571115,116480,182000 3 0213
-Fn 550368,640640,232960,182000 3 0214
-u20A1 550368,728000,87360,182000 3 0215
-u20A9 550368,640640,0,182000 2 0216
-u20A6 550368,640640,0,182000 2 0217
---- 550368,728000,87360,182000 3 0220
-u20B1 550368,640640,0,182000 2 0221
-u20A4 550368,640640,0,182000 2 0222
-u211E 550368,640640,0,182000 2 0223
-u203D 550368,640640,0,182000 2 0224
---- 550368,407680,232960,182000 1 0225
-u20AB 550368,728000,0,182000 2 0226
-tm 550368,728000,0,182000 2 0227
-u2031 550368,728000,87360,182000 3 0230
---- 550368,640640,232960,182000 3 0231
-u0E3F 550368,728000,87360,182000 3 0232
-u2116 550368,640640,0,182000 2 0233
-u2052 550368,728000,0,182000 2 0234
-u212E 550368,640640,0,182000 2 0235
-u25E6 550368,534352,-106288,182000 2 0236
-u2120 550368,728000,0,182000 2 0237
-u2045 550368,728000,87360,182000 3 0240
-u2046 550368,728000,87360,182000 3 0241
-ct 550368,571115,116480,182000 3 0242
-Po 550368,640640,0,182000 2 0243
-Cs 550368,580323,0,182000 2 0244
-Ye 550368,640640,0,182000 2 0245
-bb 550368,728000,87360,182000 3 0246
-sc 550368,640640,232960,182000 3 0247
---- 550368,640640,0,182000 2 0250
-co 550368,728000,232960,182000 3 0251
-Of 550368,728000,0,182000 2 0252
---- 550368,728000,232960,182000 3 0253
-tno 550368,451360,0,182000 0 0254
-u2117 550368,728000,232960,182000 3 0255
-rg 550368,728000,232960,182000 3 0256
---- 550368,640640,0,182000 2 0257
-de 550368,640640,0,182000 2 0260
-t+- 550368,551096,-84448,182000 2 0261
-S2 550368,728000,0,182000 2 0262
-S3 550368,728000,0,182000 2 0263
---- 550368,640640,0,182000 2 0264
-mc 550368,451360,232960,182000 1 0265
-ps 550368,640640,232960,182000 3 0266
-pc 550368,451360,0,182000 0 0267
-u203B 550368,514453,0,182000 2 0270
-S1 550368,728000,0,182000 2 0271
-Om 550368,728000,0,182000 2 0272
---- 550368,728000,14560,182000 3 0273
---- 550368,728000,232960,182000 3 0274
---- 550368,728000,232960,182000 3 0275
---- 550368,728000,232960,182000 3 0276
-Eu 550368,640640,0,182000 2 0277
-tmu 550368,551096,-84448,182000 2 0326
-tdi 550368,551096,-84448,182000 2 0366
diff --git a/contrib/groff/font/devdvi/CWTC b/contrib/groff/font/devdvi/CWTC
deleted file mode 100644
index 4e2eea32fec3..000000000000
--- a/contrib/groff/font/devdvi/CWTC
+++ /dev/null
@@ -1,137 +0,0 @@
-name CWTC
-special
-internalname tctt1000
-spacewidth 550368
-checksum 1703447420
-designsize 10485760
-charset
---- 550368,627768 2 0000
---- 550368,627768 2 0001
---- 550368,669760 2 0002
---- 550368,669760 2 0003
---- 550368,669760 2 0004
---- 550368,627768 2 0005
---- 550368,669760 2 0006
---- 550368,669760 2 0007
---- 550368,669760 2 0010
---- 550368,669760 2 0011
---- 550368,627768 2 0012
---- 550368,0,203840 1 0013
---- 550368,0,232960 1 0014
---- 550368,104832,232960 1 0015
---- 550368,104832,232960 1 0022
---- 550368,451360 0 0025
---- 550368,451360 0 0026
---- 0,640640 2 0027
-<- 550368,435706,-204934 0 0030
--> 550368,435706,-204934 0 0031
---- 550368,640640 2 0032
---- 550368,829920 2 0033
---- 550368,640640 2 0034
---- 550368,640640 2 0035
---- 0,640640 2 0037
-u2422 550368,640640 2 0040
-Do 550368,728000,87360 3 0044
-$ "
-aq 550368,640640 2 0047
---- 550368,551096,-94640 2 0052
-, 550368,130000,145600 1 0054
---- 550368,435706,-204934 0 0055
-. 550368,130000 0 0056
-f/ 550368,728000,87360 3 0057
-0 550368,451360 0 0060
-1 550368,451360 0 0061
-2 550368,451360 0 0062
-3 550368,451360,232960 1 0063
-4 550368,451360,232960 1 0064
-5 550368,451360,232960 1 0065
-6 550368,640640 2 0066
-7 550368,451360,232960 1 0067
-8 550368,640640 2 0070
-9 550368,451360,232960 1 0071
-la 550368,728000,87360 3 0074
-\- 550368,551096,-84448 2 0075
-ra 550368,728000,87360 3 0076
-u2127 550368,640640 2 0115
-ci 550368,728000,232960 3 0117
-u03A9 550368,640640 2 0127
-u301A 550368,728000,87360 3 0133
-u301B 550368,728000,87360 3 0135
-ua 550368,640640 2 0136
-da 550368,640640 2 0137
---- 550368,640640 2 0140
---- 550368,551096,-94640 2 0142
---- 550368,551096,-94640 2 0143
---- 550368,571115,18930 3 0144
---- 550368,640640 2 0154
---- 550368,551096,-94640 2 0155
-u266A 672672,640640 2 0156
-ti 550368,130000 0 0176
-~ "
---- 550368,435706,-204934 0 0177
---- 550368,640640 2 0200
---- 550368,640640 2 0201
---- 550368,640640 2 0202
---- 550368,640640 2 0203
-dg 550368,640640,232960 3 0204
-dd 550368,640640,232960 3 0205
-u2016 550368,728000,87360 3 0206
-%0 550368,728000,87360 3 0207
-bu 550368,534352,-106288 2 0210
-u2103 550368,640640 2 0211
---- 550368,728000,87360 3 0212
---- 550368,571115,116480 3 0213
-Fn 550368,640640 2 0214
-u20A1 550368,728000,87360 3 0215
-u20A9 550368,640640 2 0216
-u20A6 550368,640640 2 0217
---- 550368,728000,87360 3 0220
-u20B1 550368,640640 2 0221
-u20A4 550368,640640 2 0222
-u211E 550368,640640 2 0223
-u203D 550368,640640 2 0224
---- 550368,407680,232960 1 0225
-u20AB 550368,728000 2 0226
-tm 550368,728000 2 0227
-u2031 550368,728000,87360 3 0230
---- 550368,640640,232960 3 0231
-u0E3F 550368,728000,87360 3 0232
-u2116 550368,640640 2 0233
-u2052 550368,728000 2 0234
-u212E 550368,640640 2 0235
-u25E6 550368,534352,-106288 2 0236
-u2120 550368,728000 2 0237
-u2045 550368,728000,87360 3 0240
-u2046 550368,728000,87360 3 0241
-ct 550368,571115,116480 3 0242
-Po 550368,640640 2 0243
-Cs 550368,580323 2 0244
-Ye 550368,640640 2 0245
-bb 550368,728000,87360 3 0246
-sc 550368,640640,232960 3 0247
---- 550368,640640 2 0250
-co 550368,728000,232960 3 0251
-Of 550368,728000 2 0252
---- 550368,728000,232960 3 0253
-tno 550368,451360 0 0254
-u2117 550368,728000,232960 3 0255
-rg 550368,728000,232960 3 0256
---- 550368,640640 2 0257
-de 550368,640640 2 0260
-t+- 550368,551096,-84448 2 0261
-S2 550368,728000 2 0262
-S3 550368,728000 2 0263
---- 550368,640640 2 0264
-mc 550368,451360,232960 1 0265
-ps 550368,640640,232960 3 0266
-pc 550368,451360 0 0267
-u203B 550368,514453 2 0270
-S1 550368,728000 2 0271
-Om 550368,728000 2 0272
---- 550368,728000,14560 3 0273
---- 550368,728000,232960 3 0274
---- 550368,728000,232960 3 0275
---- 550368,728000,232960 3 0276
-Eu 550368,640640 2 0277
-tmu 550368,551096,-84448 2 0326
-tdi 550368,551096,-84448 2 0366
diff --git a/contrib/groff/font/devdvi/DESC.in b/contrib/groff/font/devdvi/DESC.in
deleted file mode 100644
index b5df761074c4..000000000000
--- a/contrib/groff/font/devdvi/DESC.in
+++ /dev/null
@@ -1,11 +0,0 @@
-sizescale 100
-unitwidth 131072
-res 57816
-hor 1
-vert 1
-sizes 500-1000000 0
-styles R I B BI
-family T
-fonts 13 0 0 0 0 0 0 0 0 0 MI S EX CW
-tcommand
-postpro grodvi
diff --git a/contrib/groff/font/devdvi/EX b/contrib/groff/font/devdvi/EX
deleted file mode 100644
index a4109845b5ab..000000000000
--- a/contrib/groff/font/devdvi/EX
+++ /dev/null
@@ -1,143 +0,0 @@
-name EX
-special
-internalname cmex10
-checksum -89033454
-designsize 10485760
-charset
-parenleft0 480600,41942,1216362 1 0000
-parenright0 480600,41942,1216362 1 0001
-bracketleft0 436909,41942,1216362 1 0002
-bracketright0 436909,41942,1216362 1 0003
-floorleft0 495163,41942,1216362 1 0004
-floorright0 495163,41942,1216362 1 0005
-ceilingleft0 495163,41942,1216362 1 0006
-ceilingright0 495163,41942,1216362 1 0007
-braceleft0 611672,41942,1216362 1 0010
-braceright0 611672,41942,1216362 1 0011
-angleleft0 495163,41942,1216362 1 0012
-angleright0 495163,41942,1216362 1 0013
-barex 349526,0,629152 1 0014
-bardblex 582544,0,629152 1 0015
-slash0 605845,41942,1216362 1 0016
-backslash0 605845,41942,1216362 1 0017
-parenleft1 626235,41942,1845514 1 0020
-parenright1 626235,41942,1845514 1 0021
-parenleft2 771872,41942,2474666 1 0022
-parenright2 771872,41942,2474666 1 0023
-bracketleft2 553418,41942,2474666 1 0024
-bracketright2 553418,41942,2474666 1 0025
-floorleft2 611672,41942,2474666 1 0026
-floorright2 611672,41942,2474666 1 0027
-ceilingleft2 611672,41942,2474666 1 0030
-ceilingright2 611672,41942,2474666 1 0031
-braceleft2 786434,41942,2474666 1 0032
-braceright2 786434,41942,2474666 1 0033
-angleleft2 786434,41942,2474666 1 0034
-angleright2 786434,41942,2474666 1 0035
-slash2 1095182,41942,2474666 1 0036
-backslash2 1095182,41942,2474666 1 0037
-parenleft3 830126,41942,3103818 1 0040
-parenright3 830126,41942,3103818 1 0041
-bracketleft3 611672,41942,3103818 1 0042
-bracketright3 611672,41942,3103818 1 0043
-floorleft3 669926,41942,3103818 1 0044
-floorright3 669926,41942,3103818 1 0045
-ceilingleft3 669926,41942,3103818 1 0046
-ceilingright3 669926,41942,3103818 1 0047
-braceleft3 844691,41942,3103818 1 0050
-braceright3 844691,41942,3103818 1 0051
-angleleft3 844691,41942,3103818 1 0052
-angleright3 844691,41942,3103818 1 0053
-slash3 1339851,41942,3103818 1 0054
-backslash3 1339851,41942,3103818 1 0055
-slash1 850515,41942,1845514 1 0056
-backslash1 850515,41942,1845514 1 0057
-parenlefttp 917507,41942,1845514 1 0060
-parenrighttp 917507,41942,1845514 1 0061
-bracketlefttp 699053,41942,1845514 1 0062
-bracketrighttp 699053,41942,1845514 1 0063
-bracketleftbt 699053,41942,1845514 1 0064
-bracketrightbt 699053,41942,1845514 1 0065
-bracketleftex 699053,0,629152 1 0066
-bracketrightex 699053,0,629152 1 0067
-lt 932070,0,943728 1 0070
-bracelefttp "
-rt 932070,0,943728 1 0071
-bracerighttp "
-lb 932070,0,943728 1 0072
-braceleftbt "
-rb 932070,0,943728 1 0073
-bracerightbt "
-lk 932070,0,1887456 1 0074
-braceleftmid "
-rk 932070,0,1887456 1 0075
-bracerightmid "
-braceleftex 932070,0,314576 1 0076
-bracerightex "
-braceex "
-arrowvertex 699053,0,629152 1 0077
-parenleftbt 917507,41942,1845514 1 0100
-parenrightbt 917507,41942,1845514 1 0101
-parenleftex 917507,0,629152 1 0102
-parenrightex 917507,0,629152 1 0103
-angleleft1 640798,41942,1845514 1 0104
-angleright1 640798,41942,1845514 1 0105
---- 873816,0,1048590 1 0106
---- 1165088,104859,1572877 1 0107
---- 495162,0,1165096,203891 1 0110
-ointegral 582544,0,2330194,466035 1 0111
-ois "
---- 1165088,0,1048590 1 0112
-bigcircledot 1584520,104859,1572877 1 0113
---- 1165088,0,1048590 1 0114
-bigcircleplus 1584520,104859,1572877 1 0115
---- 1165088,0,1048590 1 0116
-bigcirclemultiply 1584520,104859,1572877 1 0117
---- 1106834,0,1048590 1 0120
---- 990325,0,1048590 1 0121
---- 495162,0,1165096,203891 1 0122
---- 873816,0,1048590 1 0123
---- 873816,0,1048590 1 0124
---- 873816,0,1048590 1 0125
---- 873816,0,1048590 1 0126
---- 873816,0,1048590 1 0127
-sum 1514614,104859,1572877 1 0130
-product 1339851,104859,1572877 1 0131
-integral 582544,0,2330194,466035 1 0132
-bigunion 1165088,104859,1572877 1 0133
-bigintersection 1165088,104859,1572877 1 0134
-bigunionplus 1165088,104859,1572877 1 0135
-biglogicaland 1165088,104859,1572877 1 0136
-biglogicalor 1165088,104859,1572877 1 0137
---- 990325,0,1048590 1 0140
-coproduct 1339851,104859,1572877 1 0141
---- 582544,757306 2 0142
---- 1048579,786432 2 0143
---- 1514614,786432 2 0144
---- 582544,757306 2 0145
---- 1048579,786432 2 0146
---- 1514614,786432 2 0147
-bracketleft1 495163,41942,1845514 1 0150
-bracketright1 495163,41942,1845514 1 0151
-floorleft1 553418,41942,1845514 1 0152
-floorright1 553418,41942,1845514 1 0153
-ceilingleft1 553418,41942,1845514 1 0154
-ceilingright1 553418,41942,1845514 1 0155
-braceleft1 699053,41942,1845514 1 0156
-braceright1 699053,41942,1845514 1 0157
-sqrt0 1048579,41942,1216362 1 0160
-sqrt1 1048579,41942,1845514 1 0161
-sqrt2 1048579,41942,2474666 1 0162
-sqrt3 1048579,41942,3103818 1 0163
---- 1106834,0,1887456 1 0164
---- 1106834,0,629152 1 0165
---- 1106834,41942,587210 1 0166
-arrowvertdblex 815562,0,629152 1 0167
-arrowverttp 699053,0,629152 1 0170
-arrowvertbt 699053,0,629152 1 0171
---- 471864,125827 0 0172
---- 471864,125827 0 0173
---- 471864,125827 0 0174
---- 471864,125827 0 0175
-arrowvertdbltp 815562,0,629152 1 0176
-arrowvertdblbt 815562,0,629152 1 0177
diff --git a/contrib/groff/font/devdvi/HB b/contrib/groff/font/devdvi/HB
deleted file mode 100644
index 7d9847b89a9c..000000000000
--- a/contrib/groff/font/devdvi/HB
+++ /dev/null
@@ -1,297 +0,0 @@
-name HB
-internalname cmssbx10
-spacewidth 384480
-ligatures ff fi fl ffi ffl 0
-checksum -244629176
-designsize 10485760
-kernpairs
-ff cq 80101
-ff ' 80101
-ff ? 80101
-ff ! 80101
-ff ) 80101
-ff rB 80101
-ff ] 80101
-slash@for@l l -267971
-slash@for@l L -307293
-cq ? 128160
-' ? 128160
-cq ! 128160
-' ! 128160
-A t -32040
-A C -32040
-A O -32040
-A G -32040
-A U -32040
-A Q -32040
-A T -96120
-A Y -96120
-A V -128160
-A W -128160
-D X -32040
-D W -32040
-D A -32040
-D V -32040
-D Y -32040
-F o -32040
-F e -32040
-F u -32040
-F r -32040
-F a -32040
-F A -96120
-F O -32040
-F C -32040
-F G -32040
-F Q -32040
-I I 32040
-K O -32040
-K C -32040
-K G -32040
-K Q -32040
-L T -96120
-L Y -96120
-L V -128160
-L W -128160
-O X -32040
-O W -32040
-O A -32040
-O V -32040
-O Y -32040
-P A -96120
-P o -32040
-P e -32040
-P a -32040
-P . -96120
-P , -96120
-T y -96120
-T e -96120
-T o -96120
-T r -96120
-T a -96120
-T A -96120
-T u -96120
-V o -32040
-V e -32040
-V u -32040
-V r -32040
-V a -32040
-V A -96120
-V O -32040
-V C -32040
-V G -32040
-V Q -32040
-W o -32040
-W e -32040
-W u -32040
-W r -32040
-W a -32040
-W A -96120
-W O -32040
-W C -32040
-W G -32040
-W Q -32040
-X O -32040
-X C -32040
-X G -32040
-X Q -32040
-Y e -96120
-Y o -96120
-Y r -96120
-Y a -96120
-Y A -96120
-Y u -96120
-a r -32040
-a y -32040
-a w -32040
-b e 32040
-b o 32040
-b x -32040
-b d 32040
-b c 32040
-b q 32040
-b r -32040
-b y -32040
-b w -32040
-f cq 80101
-f ' 80101
-f ? 80101
-f ! 80101
-f ) 80101
-f rB 80101
-f ] 80101
-g j 32040
-k e -32040
-k a -32040
-k o -32040
-k c -32040
-o e 32040
-o o 32040
-o x -32040
-o d 32040
-o c 32040
-o q 32040
-o r -32040
-o y -32040
-o w -32040
-p e 32040
-p o 32040
-p x -32040
-p d 32040
-p c 32040
-p q 32040
-p r -32040
-p y -32040
-p w -32040
-t y -32040
-t w -32040
-u w -32040
-w e -32040
-w a -32040
-w o -32040
-w c -32040
-y o -32040
-y e -32040
-y a -32040
-y . -96120
-y , -96120
-charset
-*G 608760,728178,0,0,0,-160200 2 0000
-*D 961200,728178 2 0001
-*H 897120,728178,0,0,-32040,-32040 2 0002
-*L 704880,728178 2 0003
-*C 768960,728178 2 0004
-*P 833040,728178 2 0005
-*S 833040,728178 2 0006
-*U 897120,728178,0,0,-32040,-160200 2 0007
-*F 833040,728178,0,0,-32040 2 0010
-*Q 897120,728178,0,0,-32040,-80101 2 0011
-*W 833040,728178 2 0012
-ff 672840,728178,0,80101 2 0013
-fi 614586,728178 2 0014
-fl 614586,728178 2 0015
-Fi 934986,728178 2 0016
-Fl 934986,728178 2 0017
-.i 267971,480597 0 0020
-.j 300011,480597,203890 1 0021
-ga 576720,728178 2 0022
-aa 576720,728178 2 0023
-ah 576720,666283 2 0024
-ab 576720,728178 2 0025
-a- 576720,668757 2 0026
-ao 768960,728178 2 0027
-ac 512640,0,178403 1 0030
-ss 592739,728178 2 0031
-ae 833040,480597 0 0032
-oe 897120,480597 0 0033
-/o 576720,582542,101946 3 0034
-AE 993240,728178 2 0035
-OE 1121400,728178 2 0036
-/O 897120,779150,50973 3 0037
-slash@for@l 267971,480597 0 0040
-! 384480,728178 2 0041
-rq 585458,728178 2 0042
-sh 961200,728178,203888 3 0043
-# "
-Do 576720,786432,58254 3 0044
-$ "
-% 1079109,786432,58254 3 0045
-& 870906,728178 2 0046
-cq 320400,728178 2 0047
-' "
-( 448560,786432,262144 3 0050
-) 448560,786432,262144 3 0051
-* 576720,786432 2 0052
-+ 897120,646624,122336 3 0053
-, 320400,136898,110683 1 0054
-hy 384480,480597 0 0055
-- "
-. 320400,136898 0 0056
-sl 576720,786432,262144 3 0057
-/ "
-0 576720,728178 2 0060
-1 576720,728178 2 0061
-2 576720,728178 2 0062
-3 576720,728178 2 0063
-4 576720,728178 2 0064
-5 576720,728178 2 0065
-6 576720,728178 2 0066
-7 576720,728178 2 0067
-8 576720,728178 2 0070
-9 576720,728178 2 0071
-: 320400,480597 0 0072
-; 320400,480597,110683 1 0073
-r! 384480,524288,203890 3 0074
-= 897120,425984,-98304 0 0075
-r? 544680,524288,203890 3 0076
-? 544680,728178 2 0077
-at 768960,728178 2 0100
-@ "
-A 768960,728178 2 0101
-B 768960,728178 2 0102
-C 736920,728178,0,0,-32040 2 0103
-D 833040,728178,0,0,0,-32040 2 0104
-E 672840,728178 2 0105
-F 640800,728178,0,0,0,-160200 2 0106
-G 768960,728178,0,0,-32040 2 0107
-H 833040,728178 2 0110
-I 346614,728178 2 0111
-J 544680,728178,0,0,0,-32040 2 0112
-K 801000,728178 2 0113
-L 608760,728178,0,0,0,64080 2 0114
-M 1025280,728178 2 0115
-N 833040,728178 2 0116
-O 833040,728178,0,0,-32040,-32040 2 0117
-P 736920,728178,0,0,0,-160200 2 0120
-Q 833040,728178,110683,0,-32040 3 0121
-R 736920,728178 2 0122
-S 640800,728178 2 0123
-T 768960,728178,0,0,0,-160200 2 0124
-U 801000,728178,0,0,32040 2 0125
-V 768960,728178,0,16021,48061,-240299 2 0126
-W 1089360,728178,0,16021,48061,-144179 2 0127
-X 768960,728178 2 0130
-Y 768960,728178,0,28835,32040,-227485 2 0131
-Z 704880,728178 2 0132
-lB 359722,786432,262144 3 0133
-[ "
-lq 585458,728178 2 0134
-rB 359722,786432,262144 3 0135
-] "
-ha 576720,728178 2 0136
-^ "
-a^ "
-a. 320400,728178 2 0137
-oq 320400,728178 2 0140
-` "
-a 550506,480597 0 0141
-b 588371,728178 2 0142
-c 512640,480597 0 0143
-d 588371,728178 2 0144
-e 535942,480597 0 0145
-f 352440,728178,0,80101 2 0146
-g 576720,480597,203890,16021 1 0147
-h 588371,728178 2 0150
-i 267971,728178 2 0151
-j 300011,728178,203890 3 0152
-k 556331,728178 2 0153
-l 267971,728178 2 0154
-m 908771,480597 0 0155
-n 588371,480597 0 0156
-o 576720,480597 0 0157
-p 588371,480597,203890 1 0160
-q 588371,480597,203890 1 0161
-r 390306,480597,0,16021 0 0162
-s 442152,480597 0 0163
-t 423802,617914 2 0164
-u 588371,480597 0 0165
-v 524291,480597,0,16021 0 0166
-w 780611,480597,0,16021 0 0167
-x 524291,480597 0 0170
-y 524291,480597,203890,16021 1 0171
-z 499533,480597 0 0172
-en 576720,480597,0,32040 0 0173
-em 1153440,480597,0,32040 0 0174
-a" 576720,728178 2 0175
-~ 576720,728178 2 0176
-a~ "
-ad 576720,728178 2 0177
diff --git a/contrib/groff/font/devdvi/HBEC b/contrib/groff/font/devdvi/HBEC
deleted file mode 100644
index 8347193951a6..000000000000
--- a/contrib/groff/font/devdvi/HBEC
+++ /dev/null
@@ -1,2078 +0,0 @@
-name HBEC
-internalname ecsx1000
-spacewidth 384384
-ligatures ff fi fl ffi ffl 0
-checksum -1149688141
-designsize 10485760
-kernpairs
-bq Bq 128128
-bq j 128128
-bq .j 128128
-bq g 64064
-bq u0067_0306 64064
-bq y 64064
-bq :y 64064
-bq 'y 64064
-bq v -96096
-bq w -64064
-bq V -128128
-bq W -96096
-bq Y -96096
-bq :Y -96096
-bq 'Y -96096
-bq O -32032
-bq u004F_030B -32032
-bq `O -32032
-bq 'O -32032
-bq ^O -32032
-bq ~O -32032
-bq :O -32032
-bq OE -32032
-bq /O -32032
-bq C -32032
-bq G -32032
-bq 'C -32032
-bq u0043_030C -32032
-bq u0047_0306 -32032
-bq ,C -32032
-bq Q -32032
-lq oq 128128
-lq ` 128128
-lq lq 128128
-rq cq 128128
-rq ' 128128
-rq rq 128128
-Bq bq 128128
-Bq , 128128
-Bq Bq 128128
-Bq j 128128
-Bq .j 128128
-Bq g 64064
-Bq u0067_0306 64064
-Bq y 64064
-Bq :y 64064
-Bq 'y 64064
-Bq v -96096
-Bq w -64064
-Bq V -128128
-Bq W -96096
-Bq Y -96096
-Bq :Y -96096
-Bq 'Y -96096
-Bq O -32032
-Bq u004F_030B -32032
-Bq `O -32032
-Bq 'O -32032
-Bq ^O -32032
-Bq ~O -32032
-Bq :O -32032
-Bq OE -32032
-Bq /O -32032
-Bq C -32032
-Bq G -32032
-Bq 'C -32032
-Bq u0043_030C -32032
-Bq u0047_0306 -32032
-Bq ,C -32032
-Bq Q -32032
-Fc . -96096
-Fc , -96096
-ff cq 80080
-ff ' 80080
-ff oq 80080
-ff ` 80080
-ff lq 80080
-ff rq 80080
-ff ? 80080
-ff u01C3 80080
-ff ! 80080
-ff ) 80080
-ff rB 80080
-ff ] 80080
-cq rq 128128
-' rq 128128
-cq ? 128128
-' ? 128128
-cq u01C3 128128
-cq ! 128128
-' u01C3 128128
-' ! 128128
-A y -32032
-A :y -32032
-A 'y -32032
-A v -32032
-A w -32032
-A c -32032
-A 'c -32032
-A u0063_030C -32032
-A ,c -32032
-A d -32032
-A u0064_030C -32032
-A u0111 -32032
-A Sd -32032
-A e -32032
-A u0065_030C -32032
-A u0065_0328 -32032
-A `e -32032
-A 'e -32032
-A ^e -32032
-A :e -32032
-A o -32032
-A u006F_030B -32032
-A `o -32032
-A 'o -32032
-A ^o -32032
-A ~o -32032
-A :o -32032
-A oe -32032
-A /o -32032
-A q -32032
-A t -32032
-A u0074_030C -32032
-A u0074_0327 -32032
-A C -32032
-A G -32032
-A 'C -32032
-A u0043_030C -32032
-A u0047_0306 -32032
-A ,C -32032
-A Q -32032
-A O -32032
-A u004F_030B -32032
-A `O -32032
-A 'O -32032
-A ^O -32032
-A ~O -32032
-A :O -32032
-A OE -32032
-A /O -32032
-A U -32032
-A u0055_030B -32032
-A u0055_030A -32032
-A `U -32032
-A 'U -32032
-A ^U -32032
-A :U -32032
-A T -96096
-A u0054_030C -96096
-A u0054_0327 -96096
-A Y -96096
-A :Y -96096
-A 'Y -96096
-A V -128128
-A W -128128
-D X -32032
-D W -32032
-D A -32032
-D u0041_0306 -32032
-D u0041_0328 -32032
-D `A -32032
-D 'A -32032
-D ^A -32032
-D ~A -32032
-D :A -32032
-D oA -32032
-D AE -32032
-D V -32032
-D Y -32032
-D :Y -32032
-D 'Y -32032
-F o -32032
-F a -32032
-F e -32032
-F y -32032
-F u -32032
-F r -32032
-F v -32032
-F s -32032
-F c -32032
-F d -32032
-F g -32032
-F m -32032
-F n -32032
-F p -32032
-F w -32032
-F z -32032
-F ae -32032
-F /o -32032
-F A -96096
-F u0041_0306 -96096
-F u0041_0328 -96096
-F `A -96096
-F 'A -96096
-F ^A -96096
-F ~A -96096
-F :A -96096
-F oA -96096
-F AE -96096
-F O -32032
-F u004F_030B -32032
-F `O -32032
-F 'O -32032
-F ^O -32032
-F ~O -32032
-F :O -32032
-F OE -32032
-F /O -32032
-F C -32032
-F G -32032
-F 'C -32032
-F u0043_030C -32032
-F u0047_0306 -32032
-F ,C -32032
-F Q -32032
-I I 32032
-K v -32032
-K o -32032
-K u006F_030B -32032
-K `o -32032
-K 'o -32032
-K ^o -32032
-K ~o -32032
-K :o -32032
-K oe -32032
-K /o -32032
-K C -32032
-K G -32032
-K 'C -32032
-K u0043_030C -32032
-K u0047_0306 -32032
-K ,C -32032
-K Q -32032
-L T -96096
-L u0054_030C -96096
-L u0054_0327 -96096
-L Y -96096
-L :Y -96096
-L 'Y -96096
-L V -128128
-L W -128128
-O X -32032
-O W -32032
-O A -32032
-O u0041_0306 -32032
-O u0041_0328 -32032
-O `A -32032
-O 'A -32032
-O ^A -32032
-O ~A -32032
-O :A -32032
-O oA -32032
-O AE -32032
-O V -32032
-O Y -32032
-O :Y -32032
-O 'Y -32032
-P A -96096
-P u0041_0306 -96096
-P u0041_0328 -96096
-P `A -96096
-P 'A -96096
-P ^A -96096
-P ~A -96096
-P :A -96096
-P oA -96096
-P AE -96096
-P o -32032
-P u006F_030B -32032
-P `o -32032
-P 'o -32032
-P ^o -32032
-P ~o -32032
-P :o -32032
-P oe -32032
-P /o -32032
-P e -32032
-P u0065_030C -32032
-P u0065_0328 -32032
-P `e -32032
-P 'e -32032
-P ^e -32032
-P :e -32032
-P a -32032
-P u0061_0306 -32032
-P u0061_0328 -32032
-P `a -32032
-P 'a -32032
-P ^a -32032
-P ^a -32032
-P ~a -32032
-P :a -32032
-P oa -32032
-P ae -32032
-P . -96096
-P , -96096
-T y -96096
-T e -96096
-T o -96096
-T r -96096
-T a -96096
-T u -96096
-T n -96096
-T .i -96096
-T c -96096
-T d -96096
-T g -96096
-T p -96096
-T s -96096
-T v -96096
-T w -96096
-T x -96096
-T z -96096
-T A -96096
-T u0041_0306 -96096
-T u0041_0328 -96096
-T `A -96096
-T 'A -96096
-T ^A -96096
-T ~A -96096
-T :A -96096
-T oA -96096
-T AE -96096
-V o -32032
-V a -32032
-V e -32032
-V y -32032
-V u -32032
-V r -32032
-V v -32032
-V s -32032
-V c -32032
-V d -32032
-V g -32032
-V m -32032
-V n -32032
-V p -32032
-V w -32032
-V z -32032
-V ae -32032
-V /o -32032
-V A -96096
-V u0041_0306 -96096
-V u0041_0328 -96096
-V `A -96096
-V 'A -96096
-V ^A -96096
-V ~A -96096
-V :A -96096
-V oA -96096
-V AE -96096
-V O -32032
-V u004F_030B -32032
-V `O -32032
-V 'O -32032
-V ^O -32032
-V ~O -32032
-V :O -32032
-V OE -32032
-V /O -32032
-V C -32032
-V G -32032
-V 'C -32032
-V u0043_030C -32032
-V u0047_0306 -32032
-V ,C -32032
-V Q -32032
-W o -32032
-W a -32032
-W e -32032
-W y -32032
-W u -32032
-W r -32032
-W v -32032
-W s -32032
-W c -32032
-W d -32032
-W g -32032
-W m -32032
-W n -32032
-W p -32032
-W w -32032
-W z -32032
-W ae -32032
-W /o -32032
-W A -96096
-W u0041_0306 -96096
-W u0041_0328 -96096
-W `A -96096
-W 'A -96096
-W ^A -96096
-W ~A -96096
-W :A -96096
-W oA -96096
-W AE -96096
-W O -32032
-W u004F_030B -32032
-W `O -32032
-W 'O -32032
-W ^O -32032
-W ~O -32032
-W :O -32032
-W OE -32032
-W /O -32032
-W C -32032
-W G -32032
-W 'C -32032
-W u0043_030C -32032
-W u0047_0306 -32032
-W ,C -32032
-W Q -32032
-X O -32032
-X u004F_030B -32032
-X `O -32032
-X 'O -32032
-X ^O -32032
-X ~O -32032
-X :O -32032
-X OE -32032
-X /O -32032
-X C -32032
-X G -32032
-X 'C -32032
-X u0043_030C -32032
-X u0047_0306 -32032
-X ,C -32032
-X Q -32032
-Y e -96096
-Y o -96096
-Y r -96096
-Y a -96096
-Y u -96096
-Y n -96096
-Y .i -96096
-Y c -96096
-Y d -96096
-Y g -96096
-Y p -96096
-Y s -96096
-Y v -96096
-Y w -96096
-Y x -96096
-Y z -96096
-Y A -96096
-Y u0041_0306 -96096
-Y u0041_0328 -96096
-Y `A -96096
-Y 'A -96096
-Y ^A -96096
-Y ~A -96096
-Y :A -96096
-Y oA -96096
-Y AE -96096
-oq lq 128128
-` lq 128128
-oq ? 128128
-` ? 128128
-oq u01C3 128128
-oq ! 128128
-` u01C3 128128
-` ! 128128
-a r -32032
-a y -32032
-a :y -32032
-a 'y -32032
-a w -32032
-b e 32032
-b u0065_030C 32032
-b u0065_0328 32032
-b `e 32032
-b 'e 32032
-b ^e 32032
-b :e 32032
-b o 32032
-b u006F_030B 32032
-b `o 32032
-b 'o 32032
-b ^o 32032
-b ~o 32032
-b :o 32032
-b oe 32032
-b /o 32032
-b x -32032
-b d 32032
-b c 32032
-b 'c 32032
-b u0063_030C 32032
-b ,c 32032
-b q 32032
-b r -32032
-b y -32032
-b :y -32032
-b 'y -32032
-b w -32032
-e V -96096
-f cq 80080
-f ' 80080
-f oq 80080
-f ` 80080
-f lq 80080
-f rq 80080
-f ? 80080
-f u01C3 80080
-f ! 80080
-f ) 80080
-f rB 80080
-f ] 80080
-g j 32032
-k W -96096
-k V -96096
-k e -32032
-k u0065_030C -32032
-k u0065_0328 -32032
-k `e -32032
-k 'e -32032
-k ^e -32032
-k :e -32032
-k a -32032
-k u0061_0306 -32032
-k u0061_0328 -32032
-k `a -32032
-k 'a -32032
-k ^a -32032
-k ^a -32032
-k ~a -32032
-k :a -32032
-k oa -32032
-k ae -32032
-k o -32032
-k u006F_030B -32032
-k `o -32032
-k 'o -32032
-k ^o -32032
-k ~o -32032
-k :o -32032
-k oe -32032
-k /o -32032
-k c -32032
-k 'c -32032
-k u0063_030C -32032
-k ,c -32032
-o e 32032
-o u0065_030C 32032
-o u0065_0328 32032
-o `e 32032
-o 'e 32032
-o ^e 32032
-o :e 32032
-o o 32032
-o u006F_030B 32032
-o `o 32032
-o 'o 32032
-o ^o 32032
-o ~o 32032
-o :o 32032
-o oe 32032
-o /o 32032
-o x -32032
-o d 32032
-o c 32032
-o 'c 32032
-o u0063_030C 32032
-o ,c 32032
-o q 32032
-o r -32032
-o y -32032
-o :y -32032
-o 'y -32032
-o w -32032
-p e 32032
-p u0065_030C 32032
-p u0065_0328 32032
-p `e 32032
-p 'e 32032
-p ^e 32032
-p :e 32032
-p o 32032
-p u006F_030B 32032
-p `o 32032
-p 'o 32032
-p ^o 32032
-p ~o 32032
-p :o 32032
-p oe 32032
-p /o 32032
-p x -32032
-p d 32032
-p c 32032
-p 'c 32032
-p u0063_030C 32032
-p ,c 32032
-p q 32032
-p r -32032
-p y -32032
-p :y -32032
-p 'y -32032
-p w -32032
-t y -32032
-t :y -32032
-t 'y -32032
-t w -32032
-u w -32032
-w e -32032
-w u0065_030C -32032
-w u0065_0328 -32032
-w `e -32032
-w 'e -32032
-w ^e -32032
-w :e -32032
-w a -32032
-w u0061_0306 -32032
-w u0061_0328 -32032
-w `a -32032
-w 'a -32032
-w ^a -32032
-w ^a -32032
-w ~a -32032
-w :a -32032
-w oa -32032
-w ae -32032
-w o -32032
-w u006F_030B -32032
-w `o -32032
-w 'o -32032
-w ^o -32032
-w ~o -32032
-w :o -32032
-w oe -32032
-w /o -32032
-w c -32032
-w 'c -32032
-w u0063_030C -32032
-w ,c -32032
-y o -32032
-y u006F_030B -32032
-y `o -32032
-y 'o -32032
-y ^o -32032
-y ~o -32032
-y :o -32032
-y oe -32032
-y /o -32032
-y e -32032
-y u0065_030C -32032
-y u0065_0328 -32032
-y `e -32032
-y 'e -32032
-y ^e -32032
-y :e -32032
-y a -32032
-y u0061_0306 -32032
-y u0061_0328 -32032
-y `a -32032
-y 'a -32032
-y ^a -32032
-y ^a -32032
-y ~a -32032
-y :a -32032
-y oa -32032
-y ae -32032
-y . -96096
-y , -96096
-u0041_0306 y -32032
-u0041_0306 :y -32032
-u0041_0306 'y -32032
-u0041_0306 v -32032
-u0041_0306 w -32032
-u0041_0306 c -32032
-u0041_0306 'c -32032
-u0041_0306 u0063_030C -32032
-u0041_0306 ,c -32032
-u0041_0306 d -32032
-u0041_0306 u0064_030C -32032
-u0041_0306 u0111 -32032
-u0041_0306 Sd -32032
-u0041_0306 e -32032
-u0041_0306 u0065_030C -32032
-u0041_0306 u0065_0328 -32032
-u0041_0306 `e -32032
-u0041_0306 'e -32032
-u0041_0306 ^e -32032
-u0041_0306 :e -32032
-u0041_0306 o -32032
-u0041_0306 u006F_030B -32032
-u0041_0306 `o -32032
-u0041_0306 'o -32032
-u0041_0306 ^o -32032
-u0041_0306 ~o -32032
-u0041_0306 :o -32032
-u0041_0306 oe -32032
-u0041_0306 /o -32032
-u0041_0306 q -32032
-u0041_0306 t -32032
-u0041_0306 u0074_030C -32032
-u0041_0306 u0074_0327 -32032
-u0041_0306 C -32032
-u0041_0306 G -32032
-u0041_0306 'C -32032
-u0041_0306 u0043_030C -32032
-u0041_0306 u0047_0306 -32032
-u0041_0306 ,C -32032
-u0041_0306 Q -32032
-u0041_0306 O -32032
-u0041_0306 u004F_030B -32032
-u0041_0306 `O -32032
-u0041_0306 'O -32032
-u0041_0306 ^O -32032
-u0041_0306 ~O -32032
-u0041_0306 :O -32032
-u0041_0306 OE -32032
-u0041_0306 /O -32032
-u0041_0306 U -32032
-u0041_0306 u0055_030B -32032
-u0041_0306 u0055_030A -32032
-u0041_0306 `U -32032
-u0041_0306 'U -32032
-u0041_0306 ^U -32032
-u0041_0306 :U -32032
-u0041_0306 T -96096
-u0041_0306 u0054_030C -96096
-u0041_0306 u0054_0327 -96096
-u0041_0306 Y -96096
-u0041_0306 :Y -96096
-u0041_0306 'Y -96096
-u0041_0306 V -128128
-u0041_0306 W -128128
-'C v -32032
-'C w -32032
-'C c -32032
-'C 'c -32032
-'C u0063_030C -32032
-'C ,c -32032
-'C d -32032
-'C u0064_030C -32032
-'C u0111 -32032
-'C Sd -32032
-'C e -32032
-'C u0065_030C -32032
-'C u0065_0328 -32032
-'C `e -32032
-'C 'e -32032
-'C ^e -32032
-'C :e -32032
-'C o -32032
-'C u006F_030B -32032
-'C `o -32032
-'C 'o -32032
-'C ^o -32032
-'C ~o -32032
-'C :o -32032
-'C oe -32032
-'C /o -32032
-'C q -32032
-'C t -32032
-'C u0074_030C -32032
-'C u0074_0327 -32032
-'C C -32032
-'C G -32032
-'C 'C -32032
-'C u0043_030C -32032
-'C u0047_0306 -32032
-'C ,C -32032
-'C Q -32032
-'C O -32032
-'C u004F_030B -32032
-'C `O -32032
-'C 'O -32032
-'C ^O -32032
-'C ~O -32032
-'C :O -32032
-'C OE -32032
-'C /O -32032
-'C U -32032
-'C u0055_030B -32032
-'C u0055_030A -32032
-'C `U -32032
-'C 'U -32032
-'C ^U -32032
-'C :U -32032
-'C T -96096
-'C u0054_030C -96096
-'C u0054_0327 -96096
-'C Y -96096
-'C :Y -96096
-'C 'Y -96096
-'C V -128128
-'C W -128128
-u0044_030C X -32032
-u0044_030C W -32032
-u0044_030C A -32032
-u0044_030C u0041_0306 -32032
-u0044_030C u0041_0328 -32032
-u0044_030C `A -32032
-u0044_030C 'A -32032
-u0044_030C ^A -32032
-u0044_030C ~A -32032
-u0044_030C :A -32032
-u0044_030C oA -32032
-u0044_030C AE -32032
-u0044_030C V -32032
-u0044_030C Y -32032
-u0044_030C :Y -32032
-u0044_030C 'Y -32032
-u004C_0301 T -96096
-u004C_0301 u0054_030C -96096
-u004C_0301 u0054_0327 -96096
-u004C_0301 Y -96096
-u004C_0301 :Y -96096
-u004C_0301 'Y -96096
-u004C_0301 V -128128
-u004C_0301 W -128128
-u004C_030C T -96096
-u004C_030C u0054_030C -96096
-u004C_030C u0054_0327 -96096
-u004C_030C Y -96096
-u004C_030C :Y -96096
-u004C_030C 'Y -96096
-u004C_030C V -128128
-u004C_030C W -128128
-/L T -96096
-/L u0054_030C -96096
-/L u0054_0327 -96096
-/L Y -96096
-/L :Y -96096
-/L 'Y -96096
-/L V -128128
-/L W -128128
-u004F_030B X -32032
-u004F_030B W -32032
-u004F_030B A -32032
-u004F_030B u0041_0306 -32032
-u004F_030B u0041_0328 -32032
-u004F_030B `A -32032
-u004F_030B 'A -32032
-u004F_030B ^A -32032
-u004F_030B ~A -32032
-u004F_030B :A -32032
-u004F_030B oA -32032
-u004F_030B AE -32032
-u004F_030B V -32032
-u004F_030B Y -32032
-u004F_030B :Y -32032
-u004F_030B 'Y -32032
-u0054_030C y -96096
-u0054_030C e -96096
-u0054_030C o -96096
-u0054_030C r -96096
-u0054_030C a -96096
-u0054_030C u -96096
-u0054_030C n -96096
-u0054_030C .i -96096
-u0054_030C c -96096
-u0054_030C d -96096
-u0054_030C g -96096
-u0054_030C p -96096
-u0054_030C s -96096
-u0054_030C v -96096
-u0054_030C w -96096
-u0054_030C x -96096
-u0054_030C z -96096
-u0054_030C A -96096
-u0054_030C u0041_0306 -96096
-u0054_030C u0041_0328 -96096
-u0054_030C `A -96096
-u0054_030C 'A -96096
-u0054_030C ^A -96096
-u0054_030C ~A -96096
-u0054_030C :A -96096
-u0054_030C oA -96096
-u0054_030C AE -96096
-u0054_0327 y -96096
-u0054_0327 e -96096
-u0054_0327 o -96096
-u0054_0327 r -96096
-u0054_0327 a -96096
-u0054_0327 u -96096
-u0054_0327 n -96096
-u0054_0327 .i -96096
-u0054_0327 c -96096
-u0054_0327 d -96096
-u0054_0327 g -96096
-u0054_0327 p -96096
-u0054_0327 s -96096
-u0054_0327 v -96096
-u0054_0327 w -96096
-u0054_0327 x -96096
-u0054_0327 z -96096
-u0054_0327 A -96096
-u0054_0327 u0041_0306 -96096
-u0054_0327 u0041_0328 -96096
-u0054_0327 `A -96096
-u0054_0327 'A -96096
-u0054_0327 ^A -96096
-u0054_0327 ~A -96096
-u0054_0327 :A -96096
-u0054_0327 oA -96096
-u0054_0327 AE -96096
-:Y e -96096
-:Y o -96096
-:Y r -96096
-:Y a -96096
-:Y u -96096
-:Y n -96096
-:Y .i -96096
-:Y c -96096
-:Y d -96096
-:Y g -96096
-:Y p -96096
-:Y s -96096
-:Y v -96096
-:Y w -96096
-:Y x -96096
-:Y z -96096
-:Y A -96096
-:Y u0041_0306 -96096
-:Y u0041_0328 -96096
-:Y `A -96096
-:Y 'A -96096
-:Y ^A -96096
-:Y ~A -96096
-:Y :A -96096
-:Y oA -96096
-:Y AE -96096
-u0061_0306 r -32032
-u0061_0306 y -32032
-u0061_0306 :y -32032
-u0061_0306 'y -32032
-u0061_0306 w -32032
-u0061_0328 w -32032
-/l cq 32032
-/l ' 32032
-/l a -32032
-/l u0061_0328 -32032
-/l c -32032
-/l 'c -32032
-/l d -32032
-/l e -32032
-/l u0065_0328 -32032
-/l g -32032
-/l o -32032
-/l 'o -32032
-/l s -32032
-/l u0073_0301 -32032
-u006F_030B e 32032
-u006F_030B u0065_030C 32032
-u006F_030B u0065_0328 32032
-u006F_030B `e 32032
-u006F_030B 'e 32032
-u006F_030B ^e 32032
-u006F_030B :e 32032
-u006F_030B o 32032
-u006F_030B u006F_030B 32032
-u006F_030B `o 32032
-u006F_030B 'o 32032
-u006F_030B ^o 32032
-u006F_030B ~o 32032
-u006F_030B :o 32032
-u006F_030B oe 32032
-u006F_030B /o 32032
-u006F_030B x -32032
-u006F_030B d 32032
-u006F_030B c 32032
-u006F_030B 'c 32032
-u006F_030B u0063_030C 32032
-u006F_030B ,c 32032
-u006F_030B q 32032
-u006F_030B r -32032
-u006F_030B y -32032
-u006F_030B :y -32032
-u006F_030B 'y -32032
-u006F_030B w -32032
-u0074_030C y -32032
-u0074_030C :y -32032
-u0074_030C 'y -32032
-u0074_030C w -32032
-u0074_0327 y -32032
-u0074_0327 :y -32032
-u0074_0327 'y -32032
-u0074_0327 w -32032
-u0075_030B w -32032
-u0075_030A w -32032
-:y o -32032
-:y u006F_030B -32032
-:y `o -32032
-:y 'o -32032
-:y ^o -32032
-:y ~o -32032
-:y :o -32032
-:y oe -32032
-:y /o -32032
-:y e -32032
-:y u0065_030C -32032
-:y u0065_0328 -32032
-:y `e -32032
-:y 'e -32032
-:y ^e -32032
-:y :e -32032
-:y a -32032
-:y u0061_0306 -32032
-:y u0061_0328 -32032
-:y `a -32032
-:y 'a -32032
-:y ^a -32032
-:y ^a -32032
-:y ~a -32032
-:y :a -32032
-:y oa -32032
-:y ae -32032
-:y . -96096
-:y , -96096
-`A y -32032
-`A :y -32032
-`A 'y -32032
-`A v -32032
-`A w -32032
-`A c -32032
-`A 'c -32032
-`A u0063_030C -32032
-`A ,c -32032
-`A d -32032
-`A u0064_030C -32032
-`A u0111 -32032
-`A Sd -32032
-`A e -32032
-`A u0065_030C -32032
-`A u0065_0328 -32032
-`A `e -32032
-`A 'e -32032
-`A ^e -32032
-`A :e -32032
-`A o -32032
-`A u006F_030B -32032
-`A `o -32032
-`A 'o -32032
-`A ^o -32032
-`A ~o -32032
-`A :o -32032
-`A oe -32032
-`A /o -32032
-`A q -32032
-`A t -32032
-`A u0074_030C -32032
-`A u0074_0327 -32032
-`A C -32032
-`A G -32032
-`A 'C -32032
-`A u0043_030C -32032
-`A u0047_0306 -32032
-`A ,C -32032
-`A Q -32032
-`A O -32032
-`A u004F_030B -32032
-`A `O -32032
-`A 'O -32032
-`A ^O -32032
-`A ~O -32032
-`A :O -32032
-`A OE -32032
-`A /O -32032
-`A U -32032
-`A u0055_030B -32032
-`A u0055_030A -32032
-`A `U -32032
-`A 'U -32032
-`A ^U -32032
-`A :U -32032
-`A T -96096
-`A u0054_030C -96096
-`A u0054_0327 -96096
-`A Y -96096
-`A :Y -96096
-`A 'Y -96096
-`A V -128128
-`A W -128128
-'A y -32032
-'A :y -32032
-'A 'y -32032
-'A v -32032
-'A w -32032
-'A c -32032
-'A 'c -32032
-'A u0063_030C -32032
-'A ,c -32032
-'A d -32032
-'A u0064_030C -32032
-'A u0111 -32032
-'A Sd -32032
-'A e -32032
-'A u0065_030C -32032
-'A u0065_0328 -32032
-'A `e -32032
-'A 'e -32032
-'A ^e -32032
-'A :e -32032
-'A o -32032
-'A u006F_030B -32032
-'A `o -32032
-'A 'o -32032
-'A ^o -32032
-'A ~o -32032
-'A :o -32032
-'A oe -32032
-'A /o -32032
-'A q -32032
-'A t -32032
-'A u0074_030C -32032
-'A u0074_0327 -32032
-'A C -32032
-'A G -32032
-'A 'C -32032
-'A u0043_030C -32032
-'A u0047_0306 -32032
-'A ,C -32032
-'A Q -32032
-'A O -32032
-'A u004F_030B -32032
-'A `O -32032
-'A 'O -32032
-'A ^O -32032
-'A ~O -32032
-'A :O -32032
-'A OE -32032
-'A /O -32032
-'A U -32032
-'A u0055_030B -32032
-'A u0055_030A -32032
-'A `U -32032
-'A 'U -32032
-'A ^U -32032
-'A :U -32032
-'A T -96096
-'A u0054_030C -96096
-'A u0054_0327 -96096
-'A Y -96096
-'A :Y -96096
-'A 'Y -96096
-'A V -128128
-'A W -128128
-^A y -32032
-^A :y -32032
-^A 'y -32032
-^A v -32032
-^A w -32032
-^A c -32032
-^A 'c -32032
-^A u0063_030C -32032
-^A ,c -32032
-^A d -32032
-^A u0064_030C -32032
-^A u0111 -32032
-^A Sd -32032
-^A e -32032
-^A u0065_030C -32032
-^A u0065_0328 -32032
-^A `e -32032
-^A 'e -32032
-^A ^e -32032
-^A :e -32032
-^A o -32032
-^A u006F_030B -32032
-^A `o -32032
-^A 'o -32032
-^A ^o -32032
-^A ~o -32032
-^A :o -32032
-^A oe -32032
-^A /o -32032
-^A q -32032
-^A t -32032
-^A u0074_030C -32032
-^A u0074_0327 -32032
-^A C -32032
-^A G -32032
-^A 'C -32032
-^A u0043_030C -32032
-^A u0047_0306 -32032
-^A ,C -32032
-^A Q -32032
-^A O -32032
-^A u004F_030B -32032
-^A `O -32032
-^A 'O -32032
-^A ^O -32032
-^A ~O -32032
-^A :O -32032
-^A OE -32032
-^A /O -32032
-^A U -32032
-^A u0055_030B -32032
-^A u0055_030A -32032
-^A `U -32032
-^A 'U -32032
-^A ^U -32032
-^A :U -32032
-^A T -96096
-^A u0054_030C -96096
-^A u0054_0327 -96096
-^A Y -96096
-^A :Y -96096
-^A 'Y -96096
-^A V -128128
-^A W -128128
-~A y -32032
-~A :y -32032
-~A 'y -32032
-~A v -32032
-~A w -32032
-~A c -32032
-~A 'c -32032
-~A u0063_030C -32032
-~A ,c -32032
-~A d -32032
-~A u0064_030C -32032
-~A u0111 -32032
-~A Sd -32032
-~A e -32032
-~A u0065_030C -32032
-~A u0065_0328 -32032
-~A `e -32032
-~A 'e -32032
-~A ^e -32032
-~A :e -32032
-~A o -32032
-~A u006F_030B -32032
-~A `o -32032
-~A 'o -32032
-~A ^o -32032
-~A ~o -32032
-~A :o -32032
-~A oe -32032
-~A /o -32032
-~A q -32032
-~A t -32032
-~A u0074_030C -32032
-~A u0074_0327 -32032
-~A C -32032
-~A G -32032
-~A 'C -32032
-~A u0043_030C -32032
-~A u0047_0306 -32032
-~A ,C -32032
-~A Q -32032
-~A O -32032
-~A u004F_030B -32032
-~A `O -32032
-~A 'O -32032
-~A ^O -32032
-~A ~O -32032
-~A :O -32032
-~A OE -32032
-~A /O -32032
-~A U -32032
-~A u0055_030B -32032
-~A u0055_030A -32032
-~A `U -32032
-~A 'U -32032
-~A ^U -32032
-~A :U -32032
-~A T -96096
-~A u0054_030C -96096
-~A u0054_0327 -96096
-~A Y -96096
-~A :Y -96096
-~A 'Y -96096
-~A V -128128
-~A W -128128
-:A y -32032
-:A :y -32032
-:A 'y -32032
-:A v -32032
-:A w -32032
-:A c -32032
-:A 'c -32032
-:A u0063_030C -32032
-:A ,c -32032
-:A d -32032
-:A u0064_030C -32032
-:A u0111 -32032
-:A Sd -32032
-:A e -32032
-:A u0065_030C -32032
-:A u0065_0328 -32032
-:A `e -32032
-:A 'e -32032
-:A ^e -32032
-:A :e -32032
-:A o -32032
-:A u006F_030B -32032
-:A `o -32032
-:A 'o -32032
-:A ^o -32032
-:A ~o -32032
-:A :o -32032
-:A oe -32032
-:A /o -32032
-:A q -32032
-:A t -32032
-:A u0074_030C -32032
-:A u0074_0327 -32032
-:A C -32032
-:A G -32032
-:A 'C -32032
-:A u0043_030C -32032
-:A u0047_0306 -32032
-:A ,C -32032
-:A Q -32032
-:A O -32032
-:A u004F_030B -32032
-:A `O -32032
-:A 'O -32032
-:A ^O -32032
-:A ~O -32032
-:A :O -32032
-:A OE -32032
-:A /O -32032
-:A U -32032
-:A u0055_030B -32032
-:A u0055_030A -32032
-:A `U -32032
-:A 'U -32032
-:A ^U -32032
-:A :U -32032
-:A T -96096
-:A u0054_030C -96096
-:A u0054_0327 -96096
-:A Y -96096
-:A :Y -96096
-:A 'Y -96096
-:A V -128128
-:A W -128128
-oA y -32032
-oA :y -32032
-oA 'y -32032
-oA v -32032
-oA w -32032
-oA c -32032
-oA 'c -32032
-oA u0063_030C -32032
-oA ,c -32032
-oA d -32032
-oA u0064_030C -32032
-oA u0111 -32032
-oA Sd -32032
-oA e -32032
-oA u0065_030C -32032
-oA u0065_0328 -32032
-oA `e -32032
-oA 'e -32032
-oA ^e -32032
-oA :e -32032
-oA o -32032
-oA u006F_030B -32032
-oA `o -32032
-oA 'o -32032
-oA ^o -32032
-oA ~o -32032
-oA :o -32032
-oA oe -32032
-oA /o -32032
-oA q -32032
-oA t -32032
-oA u0074_030C -32032
-oA u0074_0327 -32032
-oA C -32032
-oA G -32032
-oA 'C -32032
-oA u0043_030C -32032
-oA u0047_0306 -32032
-oA ,C -32032
-oA Q -32032
-oA O -32032
-oA u004F_030B -32032
-oA `O -32032
-oA 'O -32032
-oA ^O -32032
-oA ~O -32032
-oA :O -32032
-oA OE -32032
-oA /O -32032
-oA U -32032
-oA u0055_030B -32032
-oA u0055_030A -32032
-oA `U -32032
-oA 'U -32032
-oA ^U -32032
-oA :U -32032
-oA T -96096
-oA u0054_030C -96096
-oA u0054_0327 -96096
-oA Y -96096
-oA :Y -96096
-oA 'Y -96096
-oA V -128128
-oA W -128128
-u0189 X -32032
-u0110 X -32032
--D X -32032
-u0189 W -32032
-u0110 W -32032
--D W -32032
-u0189 A -32032
-u0110 A -32032
--D A -32032
-u0189 u0041_0306 -32032
-u0110 u0041_0306 -32032
--D u0041_0306 -32032
-u0189 u0041_0328 -32032
-u0110 u0041_0328 -32032
--D u0041_0328 -32032
-u0189 `A -32032
-u0110 `A -32032
--D `A -32032
-u0189 'A -32032
-u0110 'A -32032
--D 'A -32032
-u0189 ^A -32032
-u0110 ^A -32032
--D ^A -32032
-u0189 ~A -32032
-u0110 ~A -32032
--D ~A -32032
-u0189 :A -32032
-u0110 :A -32032
--D :A -32032
-u0189 oA -32032
-u0110 oA -32032
--D oA -32032
-u0189 AE -32032
-u0110 AE -32032
--D AE -32032
-u0189 V -32032
-u0110 V -32032
--D V -32032
-u0189 Y -32032
-u0110 Y -32032
--D Y -32032
-u0189 :Y -32032
-u0110 :Y -32032
--D :Y -32032
-u0189 'Y -32032
-u0110 'Y -32032
--D 'Y -32032
-`O X -32032
-`O W -32032
-`O A -32032
-`O u0041_0306 -32032
-`O u0041_0328 -32032
-`O `A -32032
-`O 'A -32032
-`O ^A -32032
-`O ~A -32032
-`O :A -32032
-`O oA -32032
-`O AE -32032
-`O V -32032
-`O Y -32032
-`O :Y -32032
-`O 'Y -32032
-'O X -32032
-'O W -32032
-'O A -32032
-'O u0041_0306 -32032
-'O u0041_0328 -32032
-'O `A -32032
-'O 'A -32032
-'O ^A -32032
-'O ~A -32032
-'O :A -32032
-'O oA -32032
-'O AE -32032
-'O V -32032
-'O Y -32032
-'O :Y -32032
-'O 'Y -32032
-^O X -32032
-^O W -32032
-^O A -32032
-^O u0041_0306 -32032
-^O u0041_0328 -32032
-^O `A -32032
-^O 'A -32032
-^O ^A -32032
-^O ~A -32032
-^O :A -32032
-^O oA -32032
-^O AE -32032
-^O V -32032
-^O Y -32032
-^O :Y -32032
-^O 'Y -32032
-~O X -32032
-~O W -32032
-~O A -32032
-~O u0041_0306 -32032
-~O u0041_0328 -32032
-~O `A -32032
-~O 'A -32032
-~O ^A -32032
-~O ~A -32032
-~O :A -32032
-~O oA -32032
-~O AE -32032
-~O V -32032
-~O Y -32032
-~O :Y -32032
-~O 'Y -32032
-:O X -32032
-:O W -32032
-:O A -32032
-:O u0041_0306 -32032
-:O u0041_0328 -32032
-:O `A -32032
-:O 'A -32032
-:O ^A -32032
-:O ~A -32032
-:O :A -32032
-:O oA -32032
-:O AE -32032
-:O V -32032
-:O Y -32032
-:O :Y -32032
-:O 'Y -32032
-/O X -32032
-/O W -32032
-/O A -32032
-/O u0041_0306 -32032
-/O u0041_0328 -32032
-/O `A -32032
-/O 'A -32032
-/O ^A -32032
-/O ~A -32032
-/O :A -32032
-/O oA -32032
-/O AE -32032
-/O V -32032
-/O Y -32032
-/O :Y -32032
-/O 'Y -32032
-'Y e -96096
-'Y o -96096
-'Y r -96096
-'Y a -96096
-'Y u -96096
-'Y n -96096
-'Y .i -96096
-'Y c -96096
-'Y d -96096
-'Y g -96096
-'Y p -96096
-'Y s -96096
-'Y v -96096
-'Y w -96096
-'Y x -96096
-'Y z -96096
-'Y A -96096
-'Y u0041_0306 -96096
-'Y u0041_0328 -96096
-'Y `A -96096
-'Y 'A -96096
-'Y ^A -96096
-'Y ~A -96096
-'Y :A -96096
-'Y oA -96096
-'Y AE -96096
-`a r -32032
-`a y -32032
-`a :y -32032
-`a 'y -32032
-`a w -32032
-'a r -32032
-'a y -32032
-'a :y -32032
-'a 'y -32032
-'a w -32032
-^a r -32032
-^a y -32032
-^a :y -32032
-^a 'y -32032
-^a w -32032
-~a r -32032
-~a y -32032
-~a :y -32032
-~a 'y -32032
-~a w -32032
-:a r -32032
-:a y -32032
-:a :y -32032
-:a 'y -32032
-:a w -32032
-oa r -32032
-oa y -32032
-oa :y -32032
-oa 'y -32032
-oa w -32032
-`o e 32032
-`o u0065_030C 32032
-`o u0065_0328 32032
-`o `e 32032
-`o 'e 32032
-`o ^e 32032
-`o :e 32032
-`o o 32032
-`o u006F_030B 32032
-`o `o 32032
-`o 'o 32032
-`o ^o 32032
-`o ~o 32032
-`o :o 32032
-`o oe 32032
-`o /o 32032
-`o x -32032
-`o d 32032
-`o c 32032
-`o 'c 32032
-`o u0063_030C 32032
-`o ,c 32032
-`o q 32032
-`o r -32032
-`o y -32032
-`o :y -32032
-`o 'y -32032
-`o w -32032
-'o e 32032
-'o u0065_030C 32032
-'o u0065_0328 32032
-'o `e 32032
-'o 'e 32032
-'o ^e 32032
-'o :e 32032
-'o o 32032
-'o u006F_030B 32032
-'o `o 32032
-'o 'o 32032
-'o ^o 32032
-'o ~o 32032
-'o :o 32032
-'o oe 32032
-'o /o 32032
-'o x -32032
-'o d 32032
-'o c 32032
-'o 'c 32032
-'o u0063_030C 32032
-'o ,c 32032
-'o q 32032
-'o r -32032
-'o y -32032
-'o :y -32032
-'o 'y -32032
-'o w -32032
-^o e 32032
-^o u0065_030C 32032
-^o u0065_0328 32032
-^o `e 32032
-^o 'e 32032
-^o ^e 32032
-^o :e 32032
-^o o 32032
-^o u006F_030B 32032
-^o `o 32032
-^o 'o 32032
-^o ^o 32032
-^o ~o 32032
-^o :o 32032
-^o oe 32032
-^o /o 32032
-^o x -32032
-^o d 32032
-^o c 32032
-^o 'c 32032
-^o u0063_030C 32032
-^o ,c 32032
-^o q 32032
-^o r -32032
-^o y -32032
-^o :y -32032
-^o 'y -32032
-^o w -32032
-~o e 32032
-~o u0065_030C 32032
-~o u0065_0328 32032
-~o `e 32032
-~o 'e 32032
-~o ^e 32032
-~o :e 32032
-~o o 32032
-~o u006F_030B 32032
-~o `o 32032
-~o 'o 32032
-~o ^o 32032
-~o ~o 32032
-~o :o 32032
-~o oe 32032
-~o /o 32032
-~o x -32032
-~o d 32032
-~o c 32032
-~o 'c 32032
-~o u0063_030C 32032
-~o ,c 32032
-~o q 32032
-~o r -32032
-~o y -32032
-~o :y -32032
-~o 'y -32032
-~o w -32032
-:o e 32032
-:o u0065_030C 32032
-:o u0065_0328 32032
-:o `e 32032
-:o 'e 32032
-:o ^e 32032
-:o :e 32032
-:o o 32032
-:o u006F_030B 32032
-:o `o 32032
-:o 'o 32032
-:o ^o 32032
-:o ~o 32032
-:o :o 32032
-:o oe 32032
-:o /o 32032
-:o x -32032
-:o d 32032
-:o c 32032
-:o 'c 32032
-:o u0063_030C 32032
-:o ,c 32032
-:o q 32032
-:o r -32032
-:o y -32032
-:o :y -32032
-:o 'y -32032
-:o w -32032
-/o e 32032
-/o u0065_030C 32032
-/o u0065_0328 32032
-/o `e 32032
-/o 'e 32032
-/o ^e 32032
-/o :e 32032
-/o o 32032
-/o u006F_030B 32032
-/o `o 32032
-/o 'o 32032
-/o ^o 32032
-/o ~o 32032
-/o :o 32032
-/o oe 32032
-/o /o 32032
-/o x -32032
-/o d 32032
-/o c 32032
-/o 'c 32032
-/o u0063_030C 32032
-/o ,c 32032
-/o q 32032
-/o r -32032
-/o y -32032
-/o :y -32032
-/o 'y -32032
-/o w -32032
-`u w -32032
-'u w -32032
-^u w -32032
-:u w -32032
-'y o -32032
-'y u006F_030B -32032
-'y `o -32032
-'y 'o -32032
-'y ^o -32032
-'y ~o -32032
-'y :o -32032
-'y oe -32032
-'y /o -32032
-'y e -32032
-'y u0065_030C -32032
-'y u0065_0328 -32032
-'y `e -32032
-'y 'e -32032
-'y ^e -32032
-'y :e -32032
-'y a -32032
-'y u0061_0306 -32032
-'y u0061_0328 -32032
-'y `a -32032
-'y 'a -32032
-'y ^a -32032
-'y ^a -32032
-'y ~a -32032
-'y :a -32032
-'y oa -32032
-'y ae -32032
-'y . -96096
-'y , -96096
-charset
-ga 576576,698880 2 0000
-aa 576576,698880 2 0001
-a^ 576576,698880 2 0002
-a~ 576576,698880 2 0003
-ad 576576,728000 2 0004
-a" 576576,698880,0,14555 2 0005
-ao 768768,698880 2 0006
-ah 576576,698880 2 0007
-ab 576576,698880 2 0010
-a- 576576,728000 2 0011
-a. 320320,755976 2 0012
-ac 512512,0,178360 1 0013
-ho 320320,0,203840 1 0014
-bq 320320,136864,110656 1 0015
-fo 512512,524160 2 0016
-fc 512512,524160 2 0017
-lq 393120,755976 2 0020
-rq 393120,755976 2 0021
-Bq 393120,136864,110656 1 0022
-Fo 768768,524160 2 0023
-Fc 768768,524160 2 0024
-en 576576,480480,0,32032 0 0025
-em 1153152,480480,0,32032 0 0026
---- 0,480480 0 0027
---- 512512,782600,29120 3 0030
-.i 267904,480480 0 0031
-.j 299936,480480,203840 1 0032
-ff 672672,755976,0,80080 2 0033
-fi 614432,755976 2 0034
-fl 614432,755976 2 0035
-Fi 934752,755976 2 0036
-Fl 934752,755976 2 0037
-u2423 576576,480480,101920 1 0040
-u01C3 384384,755976 2 0041
-! "
-dq 576576,755976 2 0042
-" "
-sh 960960,755976,232960 3 0043
-# "
-Do 576576,782600,29120 3 0044
-$ "
-% 1078840,782600,29120 3 0045
-& 870688,755976 2 0046
-cq 320320,755976 2 0047
-' "
-( 448448,782600,262080 3 0050
-) 448448,782600,262080 3 0051
-* 576576,782600 2 0052
-+ 896896,646464,122304 3 0053
-, 320320,136864,110656 1 0054
-- 384384,480480 0 0055
-. 320320,136864 0 0056
-sl 576576,782600,262080 3 0057
-/ "
-0 576576,728000 2 0060
-1 576576,728000 2 0061
-2 576576,728000 2 0062
-3 576576,728000 2 0063
-4 576576,728000 2 0064
-5 576576,728000 2 0065
-6 576576,728000 2 0066
-7 576576,728000 2 0067
-8 576576,728000 2 0070
-9 576576,728000 2 0071
-: 320320,480480 0 0072
-; 320320,480480,110656 1 0073
-< 896896,636091,111931 3 0074
-= 896896,425880,-98280 0 0075
-> 896896,636091,111931 3 0076
-? 544544,755976 2 0077
-at 768768,755976 2 0100
-@ "
-A 768768,728000 2 0101
-B 768768,728000 2 0102
-C 736736,728000,0,0,-32032 2 0103
-D 832832,728000,0,0,0,-32032 2 0104
-E 672672,728000 2 0105
-F 640640,728000,0,0,0,-160160 2 0106
-G 768768,728000,0,0,-32032 2 0107
-H 832832,728000 2 0110
-I 340704,728000 2 0111
-J 544544,728000,0,0,0,-32032 2 0112
-K 800800,728000 2 0113
-L 608608,728000,0,0,0,64064 2 0114
-M 1025024,728000 2 0115
-N 832832,728000 2 0116
-O 832832,728000,0,0,-32032,-32032 2 0117
-P 736736,728000,0,0,0,-160160 2 0120
-Q 832832,728000,110656,0,-32032 3 0121
-R 736736,728000 2 0122
-S 640640,728000 2 0123
-T 768768,728000,0,0,0,-160160 2 0124
-U 800800,728000,0,0,32032 2 0125
-V 768768,728000,0,16016,48048,-240240 2 0126
-W 1089088,728000,0,16016,48048,-144144 2 0127
-X 768768,728000 2 0130
-Y 768768,728000,0,28829,32032,-227427 2 0131
-Z 704704,728000 2 0132
-lB 359632,782600,262080 3 0133
-[ "
-rs 576576,782600,262080 3 0134
-\ "
-rB 359632,782600,262080 3 0135
-] "
-ha 704704,755976 2 0136
-^ "
-_ 896896,0,352171 1 0137
-oq 320320,755976 2 0140
-` "
-a 550368,480480 0 0141
-b 588224,755976 2 0142
-c 512512,480480 0 0143
-d 588224,755976 2 0144
-e 535808,480480 0 0145
-f 352352,755976,0,80080 2 0146
-g 576576,480480,203840,16016 1 0147
-h 588224,755976 2 0150
-i 267904,755976 2 0151
-j 299936,755976,203840 3 0152
-k 556192,755976 2 0153
-l 267904,755976 2 0154
-m 908544,480480 0 0155
-n 588224,480480 0 0156
-o 576576,480480 0 0157
-p 588224,480480,203840 1 0160
-q 588224,480480,203840 1 0161
-r 390208,480480,0,16016 0 0162
-s 442042,480480 0 0163
-t 423696,617763 2 0164
-u 588224,480480 0 0165
-v 524160,480480,0,16016 0 0166
-w 780416,480480,0,16016 0 0167
-x 524160,480480 0 0170
-y 524160,480480,203840,16016 1 0171
-z 499408,480480 0 0172
-lC 576576,782600,262080 3 0173
-{ "
-u01C0 320320,782600,262080 3 0174
-ba "
-| "
-rC 576576,782600,262080 3 0175
-} "
-~ 704704,755976 2 0176
-hy 192192,480480 0 0177
-u0041_0306 768768,946400 2 0200
-u0041_0328 768768,728000,203840 3 0201
-'C 736736,905917 2 0202
-u0043_030C 736736,946400,0,0,-32032 2 0203
-u0044_030C 832832,946400,0,0,0,-32032 2 0204
-u0045_030C 672672,946400 2 0205
-u0045_0328 672672,728000,203840 3 0206
-u0047_0306 768768,946400,0,0,-32032 2 0207
-u004C_0301 608608,905917,0,0,0,64064 2 0210
-u004C_030C 608608,946400,0,0,0,64064 2 0211
-/L 704704,728000 2 0212
-u004E_0301 832832,905917 2 0213
-u004E_030C 832832,946400 2 0214
-u014A 864864,728000,0,0,0,-32032 2 0215
-u004F_030B 832832,905917,0,0,-32032,-32032 2 0216
-u0052_0301 736736,905917 2 0217
-u0052_030C 736736,946400 2 0220
-u0053_0301 640640,905917 2 0221
-vS 640640,946400 2 0222
-u0053_0327 640640,728000,178360 3 0223
-u0054_030C 768768,946400,0,0,0,-160160 2 0224
-u0054_0327 768768,728000,178360,0,0,-160160 3 0225
-u0055_030B 800800,905917,0,0,32032 2 0226
-u0055_030A 800800,946400,0,0,32032 2 0227
-:Y 768768,946400,0,28829,32032,-227427 2 0230
-u005A_0301 704704,905917 2 0231
-vZ 704704,946400 2 0232
-u005A_0307 704704,905917 2 0233
-IJ 853216,728000,0,0,0,-32032 2 0234
-u0049_0307 340704,905917 2 0235
-u0111 588224,755976 2 0236
-sc 559104,755976,203840 3 0237
-u0061_0306 550368,698880 2 0240
-u0061_0328 550368,480480,203840 1 0241
-'c 512512,698880 2 0242
-u0063_030C 512512,698880 2 0243
-u0064_030C 767312,755976 2 0244
-u0065_030C 535808,698880 2 0245
-u0065_0328 535808,480480,203840 1 0246
-u0067_0306 576576,698880,203840,16016 3 0247
-u006C_0301 267904,905917,0,123075 2 0250
-u006C_030C 446992,755976 2 0251
-/l 399818,755976,0,29120 2 0252
-u006E_0301 588224,698880 2 0253
-u006E_030C 588224,698880 2 0254
-u016A 588224,480480,203840 1 0255
-u006F_030B 576576,698880,0,14555 2 0256
-u0072_0301 390208,698880,0,16016 2 0257
-u0072_030C 390208,698880,0,16016 2 0260
-u0073_0301 442042,698880 2 0261
-vs 442042,698880 2 0262
-u0073_0327 442042,480480,178360 1 0263
-u0074_030C 423696,755976 2 0264
-u0074_0327 423696,617763,178360 3 0265
-u0075_030B 588224,698880,0,8730 2 0266
-u0075_030A 588224,698880 2 0267
-:y 524160,728000,203840,16016 3 0270
-u007A_0301 499408,698880 2 0271
-vz 499408,698880 2 0272
-u007A_0307 499408,755976 2 0273
-ij 620256,755976,203840 3 0274
-r! 384384,553280,203840 3 0275
-r? 544544,553280,203840 3 0276
-Po 736736,755976 2 0277
-`A 768768,905917 2 0300
-'A 768768,905917 2 0301
-^A 768768,946400 2 0302
-~A 768768,946400 2 0303
-:A 768768,946400 2 0304
-oA 768768,905917 2 0305
-AE 992992,728000 2 0306
-,C 736736,728000,178360,0,-32032 3 0307
-`E 672672,905917 2 0310
-'E 672672,905917 2 0311
-^E 672672,946400 2 0312
-:E 672672,946400 2 0313
-`I 340704,905917 2 0314
-'I 340704,905917,0,85210,0,42605 2 0315
-^I 340704,946400 2 0316
-:I 340704,946400 2 0317
-u0189 832832,728000,0,0,0,-32032 2 0320
-u0110 "
--D "
-~N 832832,946400 2 0321
-`O 832832,905917,0,0,-32032,-32032 2 0322
-'O 832832,905917 2 0323
-^O 832832,946400,0,0,-32032,-32032 2 0324
-~O 832832,946400,0,0,-32032,-32032 2 0325
-:O 832832,946400,0,0,-32032,-32032 2 0326
-OE 1121120,728000 2 0327
-/O 896896,782600,50960 3 0330
-`U 800800,905917,0,0,32032 2 0331
-'U 800800,905917 2 0332
-^U 800800,946400,0,0,32032 2 0333
-:U 800800,946400,0,0,32032 2 0334
-'Y 768768,905917,0,28829,32032,-227427 2 0335
-TP 672672,728000 2 0336
---- 1281280,728000 2 0337
-`a 550368,698880 2 0340
-'a 550368,698880 2 0341
-^a 550368,698880 2 0342
-~a 550368,698880 2 0343
-:a 550368,728000 2 0344
-oa 550368,698880 2 0345
-ae 832832,480480 0 0346
-,c 512512,480480,178360 1 0347
-`e 535808,698880 2 0350
-'e 535808,698880 2 0351
-^e 535808,698880 2 0352
-:e 535808,728000 2 0353
-`i 267904,698880 2 0354
-'i 267904,698880,0,43683 2 0355
-^i 267904,698880 2 0356
-:i 331968,728000 2 0357
-Sd 576576,755976 2 0360
-~n 588224,698880 2 0361
-`o 576576,698880 2 0362
-'o 576576,698880 2 0363
-^o 576576,698880 2 0364
-~o 576576,698880 2 0365
-:o 576576,728000 2 0366
-oe 896896,480480 0 0367
-/o 576576,582400,101920 3 0370
-`u 588224,698880 2 0371
-'u 588224,698880 2 0372
-^u 588224,698880 2 0373
-:u 588224,728000 2 0374
-'y 524160,698880,203840,16016 3 0375
-Tp 588224,755976,203840 3 0376
-ss 592592,755976 2 0377
diff --git a/contrib/groff/font/devdvi/HBI b/contrib/groff/font/devdvi/HBI
deleted file mode 100644
index f410707e25d2..000000000000
--- a/contrib/groff/font/devdvi/HBI
+++ /dev/null
@@ -1,298 +0,0 @@
-name HBI
-internalname cmssbxo10
-spacewidth 384480
-slant 11.999911
-ligatures ff fi fl ffi ffl 0
-checksum 461961576
-designsize 10485760
-kernpairs
-ff cq 80101
-ff ' 80101
-ff ? 80101
-ff ! 80101
-ff ) 80101
-ff rB 80101
-ff ] 80101
-slash@for@l l -267971
-slash@for@l L -307293
-cq ? 128160
-' ? 128160
-cq ! 128160
-' ! 128160
-A t -32040
-A C -32040
-A O -32040
-A G -32040
-A U -32040
-A Q -32040
-A T -96120
-A Y -96120
-A V -128160
-A W -128160
-D X -32040
-D W -32040
-D A -32040
-D V -32040
-D Y -32040
-F o -32040
-F e -32040
-F u -32040
-F r -32040
-F a -32040
-F A -96120
-F O -32040
-F C -32040
-F G -32040
-F Q -32040
-I I 32040
-K O -32040
-K C -32040
-K G -32040
-K Q -32040
-L T -96120
-L Y -96120
-L V -128160
-L W -128160
-O X -32040
-O W -32040
-O A -32040
-O V -32040
-O Y -32040
-P A -96120
-P o -32040
-P e -32040
-P a -32040
-P . -96120
-P , -96120
-T y -96120
-T e -96120
-T o -96120
-T r -96120
-T a -96120
-T A -96120
-T u -96120
-V o -32040
-V e -32040
-V u -32040
-V r -32040
-V a -32040
-V A -96120
-V O -32040
-V C -32040
-V G -32040
-V Q -32040
-W o -32040
-W e -32040
-W u -32040
-W r -32040
-W a -32040
-W A -96120
-W O -32040
-W C -32040
-W G -32040
-W Q -32040
-X O -32040
-X C -32040
-X G -32040
-X Q -32040
-Y e -96120
-Y o -96120
-Y r -96120
-Y a -96120
-Y A -96120
-Y u -96120
-a r -32040
-a y -32040
-a w -32040
-b e 32040
-b o 32040
-b x -32040
-b d 32040
-b c 32040
-b q 32040
-b r -32040
-b y -32040
-b w -32040
-f cq 80101
-f ' 80101
-f ? 80101
-f ! 80101
-f ) 80101
-f rB 80101
-f ] 80101
-g j 32040
-k e -32040
-k a -32040
-k o -32040
-k c -32040
-o e 32040
-o o 32040
-o x -32040
-o d 32040
-o c 32040
-o q 32040
-o r -32040
-o y -32040
-o w -32040
-p e 32040
-p o 32040
-p x -32040
-p d 32040
-p c 32040
-p q 32040
-p r -32040
-p y -32040
-p w -32040
-t y -32040
-t w -32040
-u w -32040
-w e -32040
-w a -32040
-w o -32040
-w c -32040
-y o -32040
-y e -32040
-y a -32040
-y . -96120
-y , -96120
-charset
-*G 608760,728178,0,138757,0,-21443 2 0000
-*D 961200,728178 2 0001
-*H 897120,728178,0,76304,-78474,44264 2 0002
-*L 704880,728178 2 0003
-*C 768960,728178,0,132349,0,66174 2 0004
-*P 833040,728178,0,90698,0,45349 2 0005
-*S 833040,728178,0,122738,0,61370 2 0006
-*U 897120,728178,0,91782,-155862,-68418 2 0007
-*F 833040,728178,0,45349,-109429,45349 2 0010
-*Q 897120,728178,0,91782,-155862,-18190 2 0011
-*W 833040,728178,0,84043,0,42022 2 0012
-ff 672840,728178,0,234878 2 0013
-fi 614586,728178,0,121282 2 0014
-fl 614586,728178,0,124194 2 0015
-Fi 934986,728178,0,121282 2 0016
-Fl 934986,728178,0,124194 2 0017
-.i 267971,480597,0,71570 0 0020
-.j 300011,480597,203890,71570 1 0021
-ga 576720,728178 2 0022
-aa 576720,728178,0,90698 2 0023
-ah 576720,666283,0,60066 2 0024
-ab 576720,728178,0,96523 2 0025
-a- 576720,668757,0,94086 2 0026
-ao 839126,728178 2 0027
-ac 512640,0,178403 1 0030
-ss 592739,728178,0,90698 2 0031
-ae 833040,480597,0,78936 0 0032
-oe 897120,480597,0,78936 0 0033
-/o 576720,582542,101946,34810 3 0034
-AE 993240,728178,0,122738 2 0035
-OE 1121400,728178,0,122738 2 0036
-/O 897120,779150,50973,76304 3 0037
-slash@for@l 267971,480597 0 0040
-! 384480,728178,0,63027 2 0041
-rq 585458,728178,0,28947 2 0042
-sh 961200,728178,203888,58506 3 0043
-# "
-Do 576720,786432,58254,122738 3 0044
-$ "
-% 1079109,786432,58254,29870 3 0045
-& 870906,728178,0,32248 2 0046
-cq 320400,728178,0,95067 2 0047
-' "
-( 448560,786432,262144,135120 3 0050
-) 448560,786432,262144,23680 3 0051
-* 576720,786432,0,119099 2 0052
-+ 897120,646624,122336,23680 3 0053
-, 320400,136898,110683 1 0054
-hy 384480,480597,0,19037 0 0055
-- "
-. 320400,136898 0 0056
-sl 576720,786432,262144,135120 3 0057
-/ "
-0 576720,728178,0,122738 2 0060
-1 576720,728178,0,122738 2 0061
-2 576720,728178,0,122738 2 0062
-3 576720,728178,0,122738 2 0063
-4 576720,728178,0,122738 2 0064
-5 576720,728178,0,122738 2 0065
-6 576720,728178,0,122738 2 0066
-7 576720,728178,0,122738 2 0067
-8 576720,728178,0,122738 2 0070
-9 576720,728178,0,122738 2 0071
-: 320400,480597,0,42443 0 0072
-; 320400,480597,110683,42443 1 0073
-r! 384480,524288,203890,19690 3 0074
-= 897120,425984,-98304,58506 0 0075
-r? 544680,524288,203890 3 0076
-? 544680,728178,0,123822 2 0077
-at 768960,728178,0,76304 2 0100
-@ "
-A 768960,728178 2 0101
-B 768960,728178,0,84043,0,42022 2 0102
-C 736920,728178,0,122738,-78474,61370 2 0103
-D 833040,728178,0,76304,0,44264 2 0104
-E 672840,728178,0,122738,0,61370 2 0105
-F 640800,728178,0,138757,0,-21443 2 0106
-G 768960,728178,0,122738,-78474,61370 2 0107
-H 833040,728178,0,90698,0,45349 2 0110
-I 346614,728178,0,138757,0,69379 2 0111
-J 544680,728178,0,90698,0,13309 2 0112
-K 801000,728178,0,122738,0,61370 2 0113
-L 608760,728178,0,0,0,64080 2 0114
-M 1025280,728178,0,90698,0,13309 2 0115
-N 833040,728178,0,90698,0,13309 2 0116
-O 833040,728178,0,76304,-78474,44264 2 0117
-P 736920,728178,0,84043,0,-76157 2 0120
-Q 833040,728178,110683,76304,-78474,76304 3 0121
-R 736920,728178,0,84043,0,63032 2 0122
-S 640800,728178,0,90698,0,45349 2 0123
-T 768960,728178,0,138757,-116083,-21443 2 0124
-U 801000,728178,0,90698,-78474,13309 2 0125
-V 768960,728178,0,170798,-106717,-85522 2 0126
-W 1089360,728178,0,170798,-106717,10598 2 0127
-X 768960,728178,0,138757,0,69379 2 0130
-Y 768960,728178,0,183613,-122738,-72707 2 0131
-Z 704880,728178,0,122738,0,61370 2 0132
-lB 359722,786432,262144,167160 3 0133
-[ "
-lq 585458,728178,0,148370 2 0134
-rB 359722,786432,262144,110362 3 0135
-] "
-ha 576720,728178,0,55680 2 0136
-^ "
-a^ "
-a. 320400,728178,0,103805 2 0137
-oq 320400,728178,0,95067 2 0140
-` "
-a 550506,480597,0,40613 0 0141
-b 588371,728178,0,35056 2 0142
-c 512640,480597,0,89338 0 0143
-d 588371,728178,0,124194 2 0144
-e 535942,480597,0,78936 0 0145
-f 352440,728178,0,234878 2 0146
-g 576720,480597,203890,118174 1 0147
-h 588371,728178,0,48352 2 0150
-i 267971,728178,0,130019 2 0151
-j 300011,728178,203890,124194 3 0152
-k 556331,728178,0,89338 2 0153
-l 267971,728178,0,124194 2 0154
-m 908771,480597,0,48352 0 0155
-n 588371,480597,0,48352 0 0156
-o 576720,480597,0,71507 0 0157
-p 588371,480597,203890,44669 1 0160
-q 588371,480597,203890,71570 1 0161
-r 390306,480597,0,118174 0 0162
-s 442152,480597,0,82930 0 0163
-t 423802,617914,0,76522 2 0164
-u 588371,480597,0,71570 0 0165
-v 524291,480597,0,118174 0 0166
-w 780611,480597,0,118174 0 0167
-x 524291,480597,0,98949 0 0170
-y 524291,480597,203890,118174 1 0171
-z 499533,480597,0,96037 0 0172
-en 576720,480597,0,95173 0 0173
-em 1153440,480597,0,95173 0 0174
-a" 576720,728178,0,90698 2 0175
-~ 576720,728178,0,90698 2 0176
-a~ "
-ad 576720,728178,0,87784 2 0177
diff --git a/contrib/groff/font/devdvi/HBIEC b/contrib/groff/font/devdvi/HBIEC
deleted file mode 100644
index a34a04f5e749..000000000000
--- a/contrib/groff/font/devdvi/HBIEC
+++ /dev/null
@@ -1,2079 +0,0 @@
-name HBIEC
-internalname ecso1000
-spacewidth 384384
-slant 11.999911
-ligatures ff fi fl ffi ffl 0
-checksum -2073731298
-designsize 10485760
-kernpairs
-bq Bq 128128
-bq j 128128
-bq .j 128128
-bq g 64064
-bq u0067_0306 64064
-bq y 64064
-bq :y 64064
-bq 'y 64064
-bq v -96096
-bq w -64064
-bq V -128128
-bq W -96096
-bq Y -96096
-bq :Y -96096
-bq 'Y -96096
-bq O -32032
-bq u004F_030B -32032
-bq `O -32032
-bq 'O -32032
-bq ^O -32032
-bq ~O -32032
-bq :O -32032
-bq OE -32032
-bq /O -32032
-bq C -32032
-bq G -32032
-bq 'C -32032
-bq u0043_030C -32032
-bq u0047_0306 -32032
-bq ,C -32032
-bq Q -32032
-lq oq 128128
-lq ` 128128
-lq lq 128128
-rq cq 128128
-rq ' 128128
-rq rq 128128
-Bq bq 128128
-Bq , 128128
-Bq Bq 128128
-Bq j 128128
-Bq .j 128128
-Bq g 64064
-Bq u0067_0306 64064
-Bq y 64064
-Bq :y 64064
-Bq 'y 64064
-Bq v -96096
-Bq w -64064
-Bq V -128128
-Bq W -96096
-Bq Y -96096
-Bq :Y -96096
-Bq 'Y -96096
-Bq O -32032
-Bq u004F_030B -32032
-Bq `O -32032
-Bq 'O -32032
-Bq ^O -32032
-Bq ~O -32032
-Bq :O -32032
-Bq OE -32032
-Bq /O -32032
-Bq C -32032
-Bq G -32032
-Bq 'C -32032
-Bq u0043_030C -32032
-Bq u0047_0306 -32032
-Bq ,C -32032
-Bq Q -32032
-Fc . -96096
-Fc , -96096
-ff cq 80080
-ff ' 80080
-ff oq 80080
-ff ` 80080
-ff lq 80080
-ff rq 80080
-ff ? 80080
-ff u01C3 80080
-ff ! 80080
-ff ) 80080
-ff rB 80080
-ff ] 80080
-cq rq 128128
-' rq 128128
-cq ? 128128
-' ? 128128
-cq u01C3 128128
-cq ! 128128
-' u01C3 128128
-' ! 128128
-A y -32032
-A :y -32032
-A 'y -32032
-A v -32032
-A w -32032
-A c -32032
-A 'c -32032
-A u0063_030C -32032
-A ,c -32032
-A d -32032
-A u0064_030C -32032
-A u0111 -32032
-A Sd -32032
-A e -32032
-A u0065_030C -32032
-A u0065_0328 -32032
-A `e -32032
-A 'e -32032
-A ^e -32032
-A :e -32032
-A o -32032
-A u006F_030B -32032
-A `o -32032
-A 'o -32032
-A ^o -32032
-A ~o -32032
-A :o -32032
-A oe -32032
-A /o -32032
-A q -32032
-A t -32032
-A u0074_030C -32032
-A u0074_0327 -32032
-A C -32032
-A G -32032
-A 'C -32032
-A u0043_030C -32032
-A u0047_0306 -32032
-A ,C -32032
-A Q -32032
-A O -32032
-A u004F_030B -32032
-A `O -32032
-A 'O -32032
-A ^O -32032
-A ~O -32032
-A :O -32032
-A OE -32032
-A /O -32032
-A U -32032
-A u0055_030B -32032
-A u0055_030A -32032
-A `U -32032
-A 'U -32032
-A ^U -32032
-A :U -32032
-A T -96096
-A u0054_030C -96096
-A u0054_0327 -96096
-A Y -96096
-A :Y -96096
-A 'Y -96096
-A V -128128
-A W -128128
-D X -32032
-D W -32032
-D A -32032
-D u0041_0306 -32032
-D u0041_0328 -32032
-D `A -32032
-D 'A -32032
-D ^A -32032
-D ~A -32032
-D :A -32032
-D oA -32032
-D AE -32032
-D V -32032
-D Y -32032
-D :Y -32032
-D 'Y -32032
-F o -32032
-F a -32032
-F e -32032
-F y -32032
-F u -32032
-F r -32032
-F v -32032
-F s -32032
-F c -32032
-F d -32032
-F g -32032
-F m -32032
-F n -32032
-F p -32032
-F w -32032
-F z -32032
-F ae -32032
-F /o -32032
-F A -96096
-F u0041_0306 -96096
-F u0041_0328 -96096
-F `A -96096
-F 'A -96096
-F ^A -96096
-F ~A -96096
-F :A -96096
-F oA -96096
-F AE -96096
-F O -32032
-F u004F_030B -32032
-F `O -32032
-F 'O -32032
-F ^O -32032
-F ~O -32032
-F :O -32032
-F OE -32032
-F /O -32032
-F C -32032
-F G -32032
-F 'C -32032
-F u0043_030C -32032
-F u0047_0306 -32032
-F ,C -32032
-F Q -32032
-I I 32032
-K v -32032
-K o -32032
-K u006F_030B -32032
-K `o -32032
-K 'o -32032
-K ^o -32032
-K ~o -32032
-K :o -32032
-K oe -32032
-K /o -32032
-K C -32032
-K G -32032
-K 'C -32032
-K u0043_030C -32032
-K u0047_0306 -32032
-K ,C -32032
-K Q -32032
-L T -96096
-L u0054_030C -96096
-L u0054_0327 -96096
-L Y -96096
-L :Y -96096
-L 'Y -96096
-L V -128128
-L W -128128
-O X -32032
-O W -32032
-O A -32032
-O u0041_0306 -32032
-O u0041_0328 -32032
-O `A -32032
-O 'A -32032
-O ^A -32032
-O ~A -32032
-O :A -32032
-O oA -32032
-O AE -32032
-O V -32032
-O Y -32032
-O :Y -32032
-O 'Y -32032
-P A -96096
-P u0041_0306 -96096
-P u0041_0328 -96096
-P `A -96096
-P 'A -96096
-P ^A -96096
-P ~A -96096
-P :A -96096
-P oA -96096
-P AE -96096
-P o -32032
-P u006F_030B -32032
-P `o -32032
-P 'o -32032
-P ^o -32032
-P ~o -32032
-P :o -32032
-P oe -32032
-P /o -32032
-P e -32032
-P u0065_030C -32032
-P u0065_0328 -32032
-P `e -32032
-P 'e -32032
-P ^e -32032
-P :e -32032
-P a -32032
-P u0061_0306 -32032
-P u0061_0328 -32032
-P `a -32032
-P 'a -32032
-P ^a -32032
-P ^a -32032
-P ~a -32032
-P :a -32032
-P oa -32032
-P ae -32032
-P . -96096
-P , -96096
-T y -96096
-T e -96096
-T o -96096
-T r -96096
-T a -96096
-T u -96096
-T n -96096
-T .i -96096
-T c -96096
-T d -96096
-T g -96096
-T p -96096
-T s -96096
-T v -96096
-T w -96096
-T x -96096
-T z -96096
-T A -96096
-T u0041_0306 -96096
-T u0041_0328 -96096
-T `A -96096
-T 'A -96096
-T ^A -96096
-T ~A -96096
-T :A -96096
-T oA -96096
-T AE -96096
-V o -32032
-V a -32032
-V e -32032
-V y -32032
-V u -32032
-V r -32032
-V v -32032
-V s -32032
-V c -32032
-V d -32032
-V g -32032
-V m -32032
-V n -32032
-V p -32032
-V w -32032
-V z -32032
-V ae -32032
-V /o -32032
-V A -96096
-V u0041_0306 -96096
-V u0041_0328 -96096
-V `A -96096
-V 'A -96096
-V ^A -96096
-V ~A -96096
-V :A -96096
-V oA -96096
-V AE -96096
-V O -32032
-V u004F_030B -32032
-V `O -32032
-V 'O -32032
-V ^O -32032
-V ~O -32032
-V :O -32032
-V OE -32032
-V /O -32032
-V C -32032
-V G -32032
-V 'C -32032
-V u0043_030C -32032
-V u0047_0306 -32032
-V ,C -32032
-V Q -32032
-W o -32032
-W a -32032
-W e -32032
-W y -32032
-W u -32032
-W r -32032
-W v -32032
-W s -32032
-W c -32032
-W d -32032
-W g -32032
-W m -32032
-W n -32032
-W p -32032
-W w -32032
-W z -32032
-W ae -32032
-W /o -32032
-W A -96096
-W u0041_0306 -96096
-W u0041_0328 -96096
-W `A -96096
-W 'A -96096
-W ^A -96096
-W ~A -96096
-W :A -96096
-W oA -96096
-W AE -96096
-W O -32032
-W u004F_030B -32032
-W `O -32032
-W 'O -32032
-W ^O -32032
-W ~O -32032
-W :O -32032
-W OE -32032
-W /O -32032
-W C -32032
-W G -32032
-W 'C -32032
-W u0043_030C -32032
-W u0047_0306 -32032
-W ,C -32032
-W Q -32032
-X O -32032
-X u004F_030B -32032
-X `O -32032
-X 'O -32032
-X ^O -32032
-X ~O -32032
-X :O -32032
-X OE -32032
-X /O -32032
-X C -32032
-X G -32032
-X 'C -32032
-X u0043_030C -32032
-X u0047_0306 -32032
-X ,C -32032
-X Q -32032
-Y e -96096
-Y o -96096
-Y r -96096
-Y a -96096
-Y u -96096
-Y n -96096
-Y .i -96096
-Y c -96096
-Y d -96096
-Y g -96096
-Y p -96096
-Y s -96096
-Y v -96096
-Y w -96096
-Y x -96096
-Y z -96096
-Y A -96096
-Y u0041_0306 -96096
-Y u0041_0328 -96096
-Y `A -96096
-Y 'A -96096
-Y ^A -96096
-Y ~A -96096
-Y :A -96096
-Y oA -96096
-Y AE -96096
-oq lq 128128
-` lq 128128
-oq ? 128128
-` ? 128128
-oq u01C3 128128
-oq ! 128128
-` u01C3 128128
-` ! 128128
-a r -32032
-a y -32032
-a :y -32032
-a 'y -32032
-a w -32032
-b e 32032
-b u0065_030C 32032
-b u0065_0328 32032
-b `e 32032
-b 'e 32032
-b ^e 32032
-b :e 32032
-b o 32032
-b u006F_030B 32032
-b `o 32032
-b 'o 32032
-b ^o 32032
-b ~o 32032
-b :o 32032
-b oe 32032
-b /o 32032
-b x -32032
-b d 32032
-b c 32032
-b 'c 32032
-b u0063_030C 32032
-b ,c 32032
-b q 32032
-b r -32032
-b y -32032
-b :y -32032
-b 'y -32032
-b w -32032
-e V -96096
-f cq 80080
-f ' 80080
-f oq 80080
-f ` 80080
-f lq 80080
-f rq 80080
-f ? 80080
-f u01C3 80080
-f ! 80080
-f ) 80080
-f rB 80080
-f ] 80080
-g j 32032
-k W -96096
-k V -96096
-k e -32032
-k u0065_030C -32032
-k u0065_0328 -32032
-k `e -32032
-k 'e -32032
-k ^e -32032
-k :e -32032
-k a -32032
-k u0061_0306 -32032
-k u0061_0328 -32032
-k `a -32032
-k 'a -32032
-k ^a -32032
-k ^a -32032
-k ~a -32032
-k :a -32032
-k oa -32032
-k ae -32032
-k o -32032
-k u006F_030B -32032
-k `o -32032
-k 'o -32032
-k ^o -32032
-k ~o -32032
-k :o -32032
-k oe -32032
-k /o -32032
-k c -32032
-k 'c -32032
-k u0063_030C -32032
-k ,c -32032
-o e 32032
-o u0065_030C 32032
-o u0065_0328 32032
-o `e 32032
-o 'e 32032
-o ^e 32032
-o :e 32032
-o o 32032
-o u006F_030B 32032
-o `o 32032
-o 'o 32032
-o ^o 32032
-o ~o 32032
-o :o 32032
-o oe 32032
-o /o 32032
-o x -32032
-o d 32032
-o c 32032
-o 'c 32032
-o u0063_030C 32032
-o ,c 32032
-o q 32032
-o r -32032
-o y -32032
-o :y -32032
-o 'y -32032
-o w -32032
-p e 32032
-p u0065_030C 32032
-p u0065_0328 32032
-p `e 32032
-p 'e 32032
-p ^e 32032
-p :e 32032
-p o 32032
-p u006F_030B 32032
-p `o 32032
-p 'o 32032
-p ^o 32032
-p ~o 32032
-p :o 32032
-p oe 32032
-p /o 32032
-p x -32032
-p d 32032
-p c 32032
-p 'c 32032
-p u0063_030C 32032
-p ,c 32032
-p q 32032
-p r -32032
-p y -32032
-p :y -32032
-p 'y -32032
-p w -32032
-t y -32032
-t :y -32032
-t 'y -32032
-t w -32032
-u w -32032
-w e -32032
-w u0065_030C -32032
-w u0065_0328 -32032
-w `e -32032
-w 'e -32032
-w ^e -32032
-w :e -32032
-w a -32032
-w u0061_0306 -32032
-w u0061_0328 -32032
-w `a -32032
-w 'a -32032
-w ^a -32032
-w ^a -32032
-w ~a -32032
-w :a -32032
-w oa -32032
-w ae -32032
-w o -32032
-w u006F_030B -32032
-w `o -32032
-w 'o -32032
-w ^o -32032
-w ~o -32032
-w :o -32032
-w oe -32032
-w /o -32032
-w c -32032
-w 'c -32032
-w u0063_030C -32032
-w ,c -32032
-y o -32032
-y u006F_030B -32032
-y `o -32032
-y 'o -32032
-y ^o -32032
-y ~o -32032
-y :o -32032
-y oe -32032
-y /o -32032
-y e -32032
-y u0065_030C -32032
-y u0065_0328 -32032
-y `e -32032
-y 'e -32032
-y ^e -32032
-y :e -32032
-y a -32032
-y u0061_0306 -32032
-y u0061_0328 -32032
-y `a -32032
-y 'a -32032
-y ^a -32032
-y ^a -32032
-y ~a -32032
-y :a -32032
-y oa -32032
-y ae -32032
-y . -96096
-y , -96096
-u0041_0306 y -32032
-u0041_0306 :y -32032
-u0041_0306 'y -32032
-u0041_0306 v -32032
-u0041_0306 w -32032
-u0041_0306 c -32032
-u0041_0306 'c -32032
-u0041_0306 u0063_030C -32032
-u0041_0306 ,c -32032
-u0041_0306 d -32032
-u0041_0306 u0064_030C -32032
-u0041_0306 u0111 -32032
-u0041_0306 Sd -32032
-u0041_0306 e -32032
-u0041_0306 u0065_030C -32032
-u0041_0306 u0065_0328 -32032
-u0041_0306 `e -32032
-u0041_0306 'e -32032
-u0041_0306 ^e -32032
-u0041_0306 :e -32032
-u0041_0306 o -32032
-u0041_0306 u006F_030B -32032
-u0041_0306 `o -32032
-u0041_0306 'o -32032
-u0041_0306 ^o -32032
-u0041_0306 ~o -32032
-u0041_0306 :o -32032
-u0041_0306 oe -32032
-u0041_0306 /o -32032
-u0041_0306 q -32032
-u0041_0306 t -32032
-u0041_0306 u0074_030C -32032
-u0041_0306 u0074_0327 -32032
-u0041_0306 C -32032
-u0041_0306 G -32032
-u0041_0306 'C -32032
-u0041_0306 u0043_030C -32032
-u0041_0306 u0047_0306 -32032
-u0041_0306 ,C -32032
-u0041_0306 Q -32032
-u0041_0306 O -32032
-u0041_0306 u004F_030B -32032
-u0041_0306 `O -32032
-u0041_0306 'O -32032
-u0041_0306 ^O -32032
-u0041_0306 ~O -32032
-u0041_0306 :O -32032
-u0041_0306 OE -32032
-u0041_0306 /O -32032
-u0041_0306 U -32032
-u0041_0306 u0055_030B -32032
-u0041_0306 u0055_030A -32032
-u0041_0306 `U -32032
-u0041_0306 'U -32032
-u0041_0306 ^U -32032
-u0041_0306 :U -32032
-u0041_0306 T -96096
-u0041_0306 u0054_030C -96096
-u0041_0306 u0054_0327 -96096
-u0041_0306 Y -96096
-u0041_0306 :Y -96096
-u0041_0306 'Y -96096
-u0041_0306 V -128128
-u0041_0306 W -128128
-'C v -32032
-'C w -32032
-'C c -32032
-'C 'c -32032
-'C u0063_030C -32032
-'C ,c -32032
-'C d -32032
-'C u0064_030C -32032
-'C u0111 -32032
-'C Sd -32032
-'C e -32032
-'C u0065_030C -32032
-'C u0065_0328 -32032
-'C `e -32032
-'C 'e -32032
-'C ^e -32032
-'C :e -32032
-'C o -32032
-'C u006F_030B -32032
-'C `o -32032
-'C 'o -32032
-'C ^o -32032
-'C ~o -32032
-'C :o -32032
-'C oe -32032
-'C /o -32032
-'C q -32032
-'C t -32032
-'C u0074_030C -32032
-'C u0074_0327 -32032
-'C C -32032
-'C G -32032
-'C 'C -32032
-'C u0043_030C -32032
-'C u0047_0306 -32032
-'C ,C -32032
-'C Q -32032
-'C O -32032
-'C u004F_030B -32032
-'C `O -32032
-'C 'O -32032
-'C ^O -32032
-'C ~O -32032
-'C :O -32032
-'C OE -32032
-'C /O -32032
-'C U -32032
-'C u0055_030B -32032
-'C u0055_030A -32032
-'C `U -32032
-'C 'U -32032
-'C ^U -32032
-'C :U -32032
-'C T -96096
-'C u0054_030C -96096
-'C u0054_0327 -96096
-'C Y -96096
-'C :Y -96096
-'C 'Y -96096
-'C V -128128
-'C W -128128
-u0044_030C X -32032
-u0044_030C W -32032
-u0044_030C A -32032
-u0044_030C u0041_0306 -32032
-u0044_030C u0041_0328 -32032
-u0044_030C `A -32032
-u0044_030C 'A -32032
-u0044_030C ^A -32032
-u0044_030C ~A -32032
-u0044_030C :A -32032
-u0044_030C oA -32032
-u0044_030C AE -32032
-u0044_030C V -32032
-u0044_030C Y -32032
-u0044_030C :Y -32032
-u0044_030C 'Y -32032
-u004C_0301 T -96096
-u004C_0301 u0054_030C -96096
-u004C_0301 u0054_0327 -96096
-u004C_0301 Y -96096
-u004C_0301 :Y -96096
-u004C_0301 'Y -96096
-u004C_0301 V -128128
-u004C_0301 W -128128
-u004C_030C T -96096
-u004C_030C u0054_030C -96096
-u004C_030C u0054_0327 -96096
-u004C_030C Y -96096
-u004C_030C :Y -96096
-u004C_030C 'Y -96096
-u004C_030C V -128128
-u004C_030C W -128128
-/L T -96096
-/L u0054_030C -96096
-/L u0054_0327 -96096
-/L Y -96096
-/L :Y -96096
-/L 'Y -96096
-/L V -128128
-/L W -128128
-u004F_030B X -32032
-u004F_030B W -32032
-u004F_030B A -32032
-u004F_030B u0041_0306 -32032
-u004F_030B u0041_0328 -32032
-u004F_030B `A -32032
-u004F_030B 'A -32032
-u004F_030B ^A -32032
-u004F_030B ~A -32032
-u004F_030B :A -32032
-u004F_030B oA -32032
-u004F_030B AE -32032
-u004F_030B V -32032
-u004F_030B Y -32032
-u004F_030B :Y -32032
-u004F_030B 'Y -32032
-u0054_030C y -96096
-u0054_030C e -96096
-u0054_030C o -96096
-u0054_030C r -96096
-u0054_030C a -96096
-u0054_030C u -96096
-u0054_030C n -96096
-u0054_030C .i -96096
-u0054_030C c -96096
-u0054_030C d -96096
-u0054_030C g -96096
-u0054_030C p -96096
-u0054_030C s -96096
-u0054_030C v -96096
-u0054_030C w -96096
-u0054_030C x -96096
-u0054_030C z -96096
-u0054_030C A -96096
-u0054_030C u0041_0306 -96096
-u0054_030C u0041_0328 -96096
-u0054_030C `A -96096
-u0054_030C 'A -96096
-u0054_030C ^A -96096
-u0054_030C ~A -96096
-u0054_030C :A -96096
-u0054_030C oA -96096
-u0054_030C AE -96096
-u0054_0327 y -96096
-u0054_0327 e -96096
-u0054_0327 o -96096
-u0054_0327 r -96096
-u0054_0327 a -96096
-u0054_0327 u -96096
-u0054_0327 n -96096
-u0054_0327 .i -96096
-u0054_0327 c -96096
-u0054_0327 d -96096
-u0054_0327 g -96096
-u0054_0327 p -96096
-u0054_0327 s -96096
-u0054_0327 v -96096
-u0054_0327 w -96096
-u0054_0327 x -96096
-u0054_0327 z -96096
-u0054_0327 A -96096
-u0054_0327 u0041_0306 -96096
-u0054_0327 u0041_0328 -96096
-u0054_0327 `A -96096
-u0054_0327 'A -96096
-u0054_0327 ^A -96096
-u0054_0327 ~A -96096
-u0054_0327 :A -96096
-u0054_0327 oA -96096
-u0054_0327 AE -96096
-:Y e -96096
-:Y o -96096
-:Y r -96096
-:Y a -96096
-:Y u -96096
-:Y n -96096
-:Y .i -96096
-:Y c -96096
-:Y d -96096
-:Y g -96096
-:Y p -96096
-:Y s -96096
-:Y v -96096
-:Y w -96096
-:Y x -96096
-:Y z -96096
-:Y A -96096
-:Y u0041_0306 -96096
-:Y u0041_0328 -96096
-:Y `A -96096
-:Y 'A -96096
-:Y ^A -96096
-:Y ~A -96096
-:Y :A -96096
-:Y oA -96096
-:Y AE -96096
-u0061_0306 r -32032
-u0061_0306 y -32032
-u0061_0306 :y -32032
-u0061_0306 'y -32032
-u0061_0306 w -32032
-u0061_0328 w -32032
-/l cq 32032
-/l ' 32032
-/l a -32032
-/l u0061_0328 -32032
-/l c -32032
-/l 'c -32032
-/l d -32032
-/l e -32032
-/l u0065_0328 -32032
-/l g -32032
-/l o -32032
-/l 'o -32032
-/l s -32032
-/l u0073_0301 -32032
-u006F_030B e 32032
-u006F_030B u0065_030C 32032
-u006F_030B u0065_0328 32032
-u006F_030B `e 32032
-u006F_030B 'e 32032
-u006F_030B ^e 32032
-u006F_030B :e 32032
-u006F_030B o 32032
-u006F_030B u006F_030B 32032
-u006F_030B `o 32032
-u006F_030B 'o 32032
-u006F_030B ^o 32032
-u006F_030B ~o 32032
-u006F_030B :o 32032
-u006F_030B oe 32032
-u006F_030B /o 32032
-u006F_030B x -32032
-u006F_030B d 32032
-u006F_030B c 32032
-u006F_030B 'c 32032
-u006F_030B u0063_030C 32032
-u006F_030B ,c 32032
-u006F_030B q 32032
-u006F_030B r -32032
-u006F_030B y -32032
-u006F_030B :y -32032
-u006F_030B 'y -32032
-u006F_030B w -32032
-u0074_030C y -32032
-u0074_030C :y -32032
-u0074_030C 'y -32032
-u0074_030C w -32032
-u0074_0327 y -32032
-u0074_0327 :y -32032
-u0074_0327 'y -32032
-u0074_0327 w -32032
-u0075_030B w -32032
-u0075_030A w -32032
-:y o -32032
-:y u006F_030B -32032
-:y `o -32032
-:y 'o -32032
-:y ^o -32032
-:y ~o -32032
-:y :o -32032
-:y oe -32032
-:y /o -32032
-:y e -32032
-:y u0065_030C -32032
-:y u0065_0328 -32032
-:y `e -32032
-:y 'e -32032
-:y ^e -32032
-:y :e -32032
-:y a -32032
-:y u0061_0306 -32032
-:y u0061_0328 -32032
-:y `a -32032
-:y 'a -32032
-:y ^a -32032
-:y ^a -32032
-:y ~a -32032
-:y :a -32032
-:y oa -32032
-:y ae -32032
-:y . -96096
-:y , -96096
-`A y -32032
-`A :y -32032
-`A 'y -32032
-`A v -32032
-`A w -32032
-`A c -32032
-`A 'c -32032
-`A u0063_030C -32032
-`A ,c -32032
-`A d -32032
-`A u0064_030C -32032
-`A u0111 -32032
-`A Sd -32032
-`A e -32032
-`A u0065_030C -32032
-`A u0065_0328 -32032
-`A `e -32032
-`A 'e -32032
-`A ^e -32032
-`A :e -32032
-`A o -32032
-`A u006F_030B -32032
-`A `o -32032
-`A 'o -32032
-`A ^o -32032
-`A ~o -32032
-`A :o -32032
-`A oe -32032
-`A /o -32032
-`A q -32032
-`A t -32032
-`A u0074_030C -32032
-`A u0074_0327 -32032
-`A C -32032
-`A G -32032
-`A 'C -32032
-`A u0043_030C -32032
-`A u0047_0306 -32032
-`A ,C -32032
-`A Q -32032
-`A O -32032
-`A u004F_030B -32032
-`A `O -32032
-`A 'O -32032
-`A ^O -32032
-`A ~O -32032
-`A :O -32032
-`A OE -32032
-`A /O -32032
-`A U -32032
-`A u0055_030B -32032
-`A u0055_030A -32032
-`A `U -32032
-`A 'U -32032
-`A ^U -32032
-`A :U -32032
-`A T -96096
-`A u0054_030C -96096
-`A u0054_0327 -96096
-`A Y -96096
-`A :Y -96096
-`A 'Y -96096
-`A V -128128
-`A W -128128
-'A y -32032
-'A :y -32032
-'A 'y -32032
-'A v -32032
-'A w -32032
-'A c -32032
-'A 'c -32032
-'A u0063_030C -32032
-'A ,c -32032
-'A d -32032
-'A u0064_030C -32032
-'A u0111 -32032
-'A Sd -32032
-'A e -32032
-'A u0065_030C -32032
-'A u0065_0328 -32032
-'A `e -32032
-'A 'e -32032
-'A ^e -32032
-'A :e -32032
-'A o -32032
-'A u006F_030B -32032
-'A `o -32032
-'A 'o -32032
-'A ^o -32032
-'A ~o -32032
-'A :o -32032
-'A oe -32032
-'A /o -32032
-'A q -32032
-'A t -32032
-'A u0074_030C -32032
-'A u0074_0327 -32032
-'A C -32032
-'A G -32032
-'A 'C -32032
-'A u0043_030C -32032
-'A u0047_0306 -32032
-'A ,C -32032
-'A Q -32032
-'A O -32032
-'A u004F_030B -32032
-'A `O -32032
-'A 'O -32032
-'A ^O -32032
-'A ~O -32032
-'A :O -32032
-'A OE -32032
-'A /O -32032
-'A U -32032
-'A u0055_030B -32032
-'A u0055_030A -32032
-'A `U -32032
-'A 'U -32032
-'A ^U -32032
-'A :U -32032
-'A T -96096
-'A u0054_030C -96096
-'A u0054_0327 -96096
-'A Y -96096
-'A :Y -96096
-'A 'Y -96096
-'A V -128128
-'A W -128128
-^A y -32032
-^A :y -32032
-^A 'y -32032
-^A v -32032
-^A w -32032
-^A c -32032
-^A 'c -32032
-^A u0063_030C -32032
-^A ,c -32032
-^A d -32032
-^A u0064_030C -32032
-^A u0111 -32032
-^A Sd -32032
-^A e -32032
-^A u0065_030C -32032
-^A u0065_0328 -32032
-^A `e -32032
-^A 'e -32032
-^A ^e -32032
-^A :e -32032
-^A o -32032
-^A u006F_030B -32032
-^A `o -32032
-^A 'o -32032
-^A ^o -32032
-^A ~o -32032
-^A :o -32032
-^A oe -32032
-^A /o -32032
-^A q -32032
-^A t -32032
-^A u0074_030C -32032
-^A u0074_0327 -32032
-^A C -32032
-^A G -32032
-^A 'C -32032
-^A u0043_030C -32032
-^A u0047_0306 -32032
-^A ,C -32032
-^A Q -32032
-^A O -32032
-^A u004F_030B -32032
-^A `O -32032
-^A 'O -32032
-^A ^O -32032
-^A ~O -32032
-^A :O -32032
-^A OE -32032
-^A /O -32032
-^A U -32032
-^A u0055_030B -32032
-^A u0055_030A -32032
-^A `U -32032
-^A 'U -32032
-^A ^U -32032
-^A :U -32032
-^A T -96096
-^A u0054_030C -96096
-^A u0054_0327 -96096
-^A Y -96096
-^A :Y -96096
-^A 'Y -96096
-^A V -128128
-^A W -128128
-~A y -32032
-~A :y -32032
-~A 'y -32032
-~A v -32032
-~A w -32032
-~A c -32032
-~A 'c -32032
-~A u0063_030C -32032
-~A ,c -32032
-~A d -32032
-~A u0064_030C -32032
-~A u0111 -32032
-~A Sd -32032
-~A e -32032
-~A u0065_030C -32032
-~A u0065_0328 -32032
-~A `e -32032
-~A 'e -32032
-~A ^e -32032
-~A :e -32032
-~A o -32032
-~A u006F_030B -32032
-~A `o -32032
-~A 'o -32032
-~A ^o -32032
-~A ~o -32032
-~A :o -32032
-~A oe -32032
-~A /o -32032
-~A q -32032
-~A t -32032
-~A u0074_030C -32032
-~A u0074_0327 -32032
-~A C -32032
-~A G -32032
-~A 'C -32032
-~A u0043_030C -32032
-~A u0047_0306 -32032
-~A ,C -32032
-~A Q -32032
-~A O -32032
-~A u004F_030B -32032
-~A `O -32032
-~A 'O -32032
-~A ^O -32032
-~A ~O -32032
-~A :O -32032
-~A OE -32032
-~A /O -32032
-~A U -32032
-~A u0055_030B -32032
-~A u0055_030A -32032
-~A `U -32032
-~A 'U -32032
-~A ^U -32032
-~A :U -32032
-~A T -96096
-~A u0054_030C -96096
-~A u0054_0327 -96096
-~A Y -96096
-~A :Y -96096
-~A 'Y -96096
-~A V -128128
-~A W -128128
-:A y -32032
-:A :y -32032
-:A 'y -32032
-:A v -32032
-:A w -32032
-:A c -32032
-:A 'c -32032
-:A u0063_030C -32032
-:A ,c -32032
-:A d -32032
-:A u0064_030C -32032
-:A u0111 -32032
-:A Sd -32032
-:A e -32032
-:A u0065_030C -32032
-:A u0065_0328 -32032
-:A `e -32032
-:A 'e -32032
-:A ^e -32032
-:A :e -32032
-:A o -32032
-:A u006F_030B -32032
-:A `o -32032
-:A 'o -32032
-:A ^o -32032
-:A ~o -32032
-:A :o -32032
-:A oe -32032
-:A /o -32032
-:A q -32032
-:A t -32032
-:A u0074_030C -32032
-:A u0074_0327 -32032
-:A C -32032
-:A G -32032
-:A 'C -32032
-:A u0043_030C -32032
-:A u0047_0306 -32032
-:A ,C -32032
-:A Q -32032
-:A O -32032
-:A u004F_030B -32032
-:A `O -32032
-:A 'O -32032
-:A ^O -32032
-:A ~O -32032
-:A :O -32032
-:A OE -32032
-:A /O -32032
-:A U -32032
-:A u0055_030B -32032
-:A u0055_030A -32032
-:A `U -32032
-:A 'U -32032
-:A ^U -32032
-:A :U -32032
-:A T -96096
-:A u0054_030C -96096
-:A u0054_0327 -96096
-:A Y -96096
-:A :Y -96096
-:A 'Y -96096
-:A V -128128
-:A W -128128
-oA y -32032
-oA :y -32032
-oA 'y -32032
-oA v -32032
-oA w -32032
-oA c -32032
-oA 'c -32032
-oA u0063_030C -32032
-oA ,c -32032
-oA d -32032
-oA u0064_030C -32032
-oA u0111 -32032
-oA Sd -32032
-oA e -32032
-oA u0065_030C -32032
-oA u0065_0328 -32032
-oA `e -32032
-oA 'e -32032
-oA ^e -32032
-oA :e -32032
-oA o -32032
-oA u006F_030B -32032
-oA `o -32032
-oA 'o -32032
-oA ^o -32032
-oA ~o -32032
-oA :o -32032
-oA oe -32032
-oA /o -32032
-oA q -32032
-oA t -32032
-oA u0074_030C -32032
-oA u0074_0327 -32032
-oA C -32032
-oA G -32032
-oA 'C -32032
-oA u0043_030C -32032
-oA u0047_0306 -32032
-oA ,C -32032
-oA Q -32032
-oA O -32032
-oA u004F_030B -32032
-oA `O -32032
-oA 'O -32032
-oA ^O -32032
-oA ~O -32032
-oA :O -32032
-oA OE -32032
-oA /O -32032
-oA U -32032
-oA u0055_030B -32032
-oA u0055_030A -32032
-oA `U -32032
-oA 'U -32032
-oA ^U -32032
-oA :U -32032
-oA T -96096
-oA u0054_030C -96096
-oA u0054_0327 -96096
-oA Y -96096
-oA :Y -96096
-oA 'Y -96096
-oA V -128128
-oA W -128128
-u0189 X -32032
-u0110 X -32032
--D X -32032
-u0189 W -32032
-u0110 W -32032
--D W -32032
-u0189 A -32032
-u0110 A -32032
--D A -32032
-u0189 u0041_0306 -32032
-u0110 u0041_0306 -32032
--D u0041_0306 -32032
-u0189 u0041_0328 -32032
-u0110 u0041_0328 -32032
--D u0041_0328 -32032
-u0189 `A -32032
-u0110 `A -32032
--D `A -32032
-u0189 'A -32032
-u0110 'A -32032
--D 'A -32032
-u0189 ^A -32032
-u0110 ^A -32032
--D ^A -32032
-u0189 ~A -32032
-u0110 ~A -32032
--D ~A -32032
-u0189 :A -32032
-u0110 :A -32032
--D :A -32032
-u0189 oA -32032
-u0110 oA -32032
--D oA -32032
-u0189 AE -32032
-u0110 AE -32032
--D AE -32032
-u0189 V -32032
-u0110 V -32032
--D V -32032
-u0189 Y -32032
-u0110 Y -32032
--D Y -32032
-u0189 :Y -32032
-u0110 :Y -32032
--D :Y -32032
-u0189 'Y -32032
-u0110 'Y -32032
--D 'Y -32032
-`O X -32032
-`O W -32032
-`O A -32032
-`O u0041_0306 -32032
-`O u0041_0328 -32032
-`O `A -32032
-`O 'A -32032
-`O ^A -32032
-`O ~A -32032
-`O :A -32032
-`O oA -32032
-`O AE -32032
-`O V -32032
-`O Y -32032
-`O :Y -32032
-`O 'Y -32032
-'O X -32032
-'O W -32032
-'O A -32032
-'O u0041_0306 -32032
-'O u0041_0328 -32032
-'O `A -32032
-'O 'A -32032
-'O ^A -32032
-'O ~A -32032
-'O :A -32032
-'O oA -32032
-'O AE -32032
-'O V -32032
-'O Y -32032
-'O :Y -32032
-'O 'Y -32032
-^O X -32032
-^O W -32032
-^O A -32032
-^O u0041_0306 -32032
-^O u0041_0328 -32032
-^O `A -32032
-^O 'A -32032
-^O ^A -32032
-^O ~A -32032
-^O :A -32032
-^O oA -32032
-^O AE -32032
-^O V -32032
-^O Y -32032
-^O :Y -32032
-^O 'Y -32032
-~O X -32032
-~O W -32032
-~O A -32032
-~O u0041_0306 -32032
-~O u0041_0328 -32032
-~O `A -32032
-~O 'A -32032
-~O ^A -32032
-~O ~A -32032
-~O :A -32032
-~O oA -32032
-~O AE -32032
-~O V -32032
-~O Y -32032
-~O :Y -32032
-~O 'Y -32032
-:O X -32032
-:O W -32032
-:O A -32032
-:O u0041_0306 -32032
-:O u0041_0328 -32032
-:O `A -32032
-:O 'A -32032
-:O ^A -32032
-:O ~A -32032
-:O :A -32032
-:O oA -32032
-:O AE -32032
-:O V -32032
-:O Y -32032
-:O :Y -32032
-:O 'Y -32032
-/O X -32032
-/O W -32032
-/O A -32032
-/O u0041_0306 -32032
-/O u0041_0328 -32032
-/O `A -32032
-/O 'A -32032
-/O ^A -32032
-/O ~A -32032
-/O :A -32032
-/O oA -32032
-/O AE -32032
-/O V -32032
-/O Y -32032
-/O :Y -32032
-/O 'Y -32032
-'Y e -96096
-'Y o -96096
-'Y r -96096
-'Y a -96096
-'Y u -96096
-'Y n -96096
-'Y .i -96096
-'Y c -96096
-'Y d -96096
-'Y g -96096
-'Y p -96096
-'Y s -96096
-'Y v -96096
-'Y w -96096
-'Y x -96096
-'Y z -96096
-'Y A -96096
-'Y u0041_0306 -96096
-'Y u0041_0328 -96096
-'Y `A -96096
-'Y 'A -96096
-'Y ^A -96096
-'Y ~A -96096
-'Y :A -96096
-'Y oA -96096
-'Y AE -96096
-`a r -32032
-`a y -32032
-`a :y -32032
-`a 'y -32032
-`a w -32032
-'a r -32032
-'a y -32032
-'a :y -32032
-'a 'y -32032
-'a w -32032
-^a r -32032
-^a y -32032
-^a :y -32032
-^a 'y -32032
-^a w -32032
-~a r -32032
-~a y -32032
-~a :y -32032
-~a 'y -32032
-~a w -32032
-:a r -32032
-:a y -32032
-:a :y -32032
-:a 'y -32032
-:a w -32032
-oa r -32032
-oa y -32032
-oa :y -32032
-oa 'y -32032
-oa w -32032
-`o e 32032
-`o u0065_030C 32032
-`o u0065_0328 32032
-`o `e 32032
-`o 'e 32032
-`o ^e 32032
-`o :e 32032
-`o o 32032
-`o u006F_030B 32032
-`o `o 32032
-`o 'o 32032
-`o ^o 32032
-`o ~o 32032
-`o :o 32032
-`o oe 32032
-`o /o 32032
-`o x -32032
-`o d 32032
-`o c 32032
-`o 'c 32032
-`o u0063_030C 32032
-`o ,c 32032
-`o q 32032
-`o r -32032
-`o y -32032
-`o :y -32032
-`o 'y -32032
-`o w -32032
-'o e 32032
-'o u0065_030C 32032
-'o u0065_0328 32032
-'o `e 32032
-'o 'e 32032
-'o ^e 32032
-'o :e 32032
-'o o 32032
-'o u006F_030B 32032
-'o `o 32032
-'o 'o 32032
-'o ^o 32032
-'o ~o 32032
-'o :o 32032
-'o oe 32032
-'o /o 32032
-'o x -32032
-'o d 32032
-'o c 32032
-'o 'c 32032
-'o u0063_030C 32032
-'o ,c 32032
-'o q 32032
-'o r -32032
-'o y -32032
-'o :y -32032
-'o 'y -32032
-'o w -32032
-^o e 32032
-^o u0065_030C 32032
-^o u0065_0328 32032
-^o `e 32032
-^o 'e 32032
-^o ^e 32032
-^o :e 32032
-^o o 32032
-^o u006F_030B 32032
-^o `o 32032
-^o 'o 32032
-^o ^o 32032
-^o ~o 32032
-^o :o 32032
-^o oe 32032
-^o /o 32032
-^o x -32032
-^o d 32032
-^o c 32032
-^o 'c 32032
-^o u0063_030C 32032
-^o ,c 32032
-^o q 32032
-^o r -32032
-^o y -32032
-^o :y -32032
-^o 'y -32032
-^o w -32032
-~o e 32032
-~o u0065_030C 32032
-~o u0065_0328 32032
-~o `e 32032
-~o 'e 32032
-~o ^e 32032
-~o :e 32032
-~o o 32032
-~o u006F_030B 32032
-~o `o 32032
-~o 'o 32032
-~o ^o 32032
-~o ~o 32032
-~o :o 32032
-~o oe 32032
-~o /o 32032
-~o x -32032
-~o d 32032
-~o c 32032
-~o 'c 32032
-~o u0063_030C 32032
-~o ,c 32032
-~o q 32032
-~o r -32032
-~o y -32032
-~o :y -32032
-~o 'y -32032
-~o w -32032
-:o e 32032
-:o u0065_030C 32032
-:o u0065_0328 32032
-:o `e 32032
-:o 'e 32032
-:o ^e 32032
-:o :e 32032
-:o o 32032
-:o u006F_030B 32032
-:o `o 32032
-:o 'o 32032
-:o ^o 32032
-:o ~o 32032
-:o :o 32032
-:o oe 32032
-:o /o 32032
-:o x -32032
-:o d 32032
-:o c 32032
-:o 'c 32032
-:o u0063_030C 32032
-:o ,c 32032
-:o q 32032
-:o r -32032
-:o y -32032
-:o :y -32032
-:o 'y -32032
-:o w -32032
-/o e 32032
-/o u0065_030C 32032
-/o u0065_0328 32032
-/o `e 32032
-/o 'e 32032
-/o ^e 32032
-/o :e 32032
-/o o 32032
-/o u006F_030B 32032
-/o `o 32032
-/o 'o 32032
-/o ^o 32032
-/o ~o 32032
-/o :o 32032
-/o oe 32032
-/o /o 32032
-/o x -32032
-/o d 32032
-/o c 32032
-/o 'c 32032
-/o u0063_030C 32032
-/o ,c 32032
-/o q 32032
-/o r -32032
-/o y -32032
-/o :y -32032
-/o 'y -32032
-/o w -32032
-`u w -32032
-'u w -32032
-^u w -32032
-:u w -32032
-'y o -32032
-'y u006F_030B -32032
-'y `o -32032
-'y 'o -32032
-'y ^o -32032
-'y ~o -32032
-'y :o -32032
-'y oe -32032
-'y /o -32032
-'y e -32032
-'y u0065_030C -32032
-'y u0065_0328 -32032
-'y `e -32032
-'y 'e -32032
-'y ^e -32032
-'y :e -32032
-'y a -32032
-'y u0061_0306 -32032
-'y u0061_0328 -32032
-'y `a -32032
-'y 'a -32032
-'y ^a -32032
-'y ^a -32032
-'y ~a -32032
-'y :a -32032
-'y oa -32032
-'y ae -32032
-'y . -96096
-'y , -96096
-charset
-ga 576576,698880 2 0000
-aa 576576,698880,0,84486 2 0001
-a^ 576576,698880 2 0002
-a~ 576576,698880,0,84486 2 0003
-ad 576576,728000,0,84851 2 0004
-a" 576576,698880,0,84486 2 0005
-ao 830664,698880 2 0006
-ah 576576,698880 2 0007
-ab 576576,698880,0,90310 2 0010
-a- 576576,728000,0,106691 2 0011
-a. 320320,755976,0,107058 2 0012
-ac 512512,0,178360 1 0013
-ho 320320,0,203840 1 0014
-bq 320320,136864,110656 1 0015
-fo 512512,524160,0,47349 2 0016
-fc 512512,524160,0,47349 2 0017
-lq 393120,755976,0,154523 2 0020
-rq 393120,755976,0,35090 2 0021
-Bq 393120,136864,110656,35090 1 0022
-Fo 768768,524160,0,27709 2 0023
-Fc 768768,524160,0,9419 2 0024
-en 576576,480480,0,95150 0 0025
-em 1153152,480480,0,95150 0 0026
---- 0,480480 0 0027
---- 512512,782600,29120,32339 3 0030
-.i 267904,480480,0,71520 0 0031
-.j 299936,480480,203840,71520 1 0032
-ff 672672,755976,0,241010 2 0033
-fi 614432,755976,0,127442 2 0034
-fl 614432,755976,0,130354 2 0035
-Fi 934752,755976,0,127442 2 0036
-Fl 934752,755976,0,130354 2 0037
-u2423 576576,480480,101920,39690 1 0040
-u01C3 384384,755976,0,69202 2 0041
-! "
-dq 576576,755976,0,72114 2 0042
-" "
-sh 960960,755976,232960,58491 3 0043
-# "
-Do 576576,782600,29120,122707 3 0044
-$ "
-% 1078840,782600,29120,32339 3 0045
-& 870688,755976,0,32240 2 0046
-cq 320320,755976,0,101234 2 0047
-' "
-( 448448,782600,262080,135086 3 0050
-) 448448,782600,262080,23674 3 0051
-* 576576,782600,0,119070 2 0052
-+ 896896,646464,122304,23674 3 0053
-, 320320,136864,110656 1 0054
-- 384384,480480,0,19032 0 0055
-. 320320,136864 0 0056
-sl 576576,782600,262080,135086 3 0057
-/ "
-0 576576,728000,0,122707 2 0060
-1 576576,728000,0,122707 2 0061
-2 576576,728000,0,122707 2 0062
-3 576576,728000,0,122707 2 0063
-4 576576,728000,0,122707 2 0064
-5 576576,728000,0,122707 2 0065
-6 576576,728000,0,122707 2 0066
-7 576576,728000,0,122707 2 0067
-8 576576,728000,0,122707 2 0070
-9 576576,728000,0,122707 2 0071
-: 320320,480480,0,42432 0 0072
-; 320320,480480,110656,42432 1 0073
-< 896896,636091,111931,71141 3 0074
-= 896896,425880,-98280,58491 0 0075
-> 896896,636091,111931 3 0076
-? 544544,755976,0,128744 2 0077
-at 768768,755976,0,80618 2 0100
-@ "
-A 768768,728000 2 0101
-B 768768,728000,0,84022,0,42011 2 0102
-C 736736,728000,0,122707,-78454,61354 2 0103
-D 832832,728000,0,76286,0,44254 2 0104
-E 672672,728000,0,122707,0,61354 2 0105
-F 640640,728000,0,138723,0,-21437 2 0106
-G 768768,728000,0,122707,-78454,61354 2 0107
-H 832832,728000,0,90675,0,45338 2 0110
-I 340704,728000,0,138723,0,69362 2 0111
-J 544544,728000,0,90675,0,13306 2 0112
-K 800800,728000,0,122707,0,61354 2 0113
-L 608608,728000,0,0,0,64064 2 0114
-M 1025024,728000,0,90675,0,13306 2 0115
-N 832832,728000,0,90675,0,13306 2 0116
-O 832832,728000,0,76286,-78454,44254 2 0117
-P 736736,728000,0,84022,0,-76138 2 0120
-Q 832832,728000,110656,76286,-78454,76286 3 0121
-R 736736,728000,0,84022,0,63018 2 0122
-S 640640,728000,0,90675,0,45338 2 0123
-T 768768,728000,0,138723,-116054,-21437 2 0124
-U 800800,728000,0,90675,-78454,13306 2 0125
-V 768768,728000,0,170755,-106691,-85501 2 0126
-W 1089088,728000,0,170755,-106691,10595 2 0127
-X 768768,728000,0,138723,0,69362 2 0130
-Y 768768,728000,0,183568,-122707,-72688 2 0131
-Z 704704,728000,0,122707,0,61354 2 0132
-lB 359632,782600,262080,167118 3 0133
-[ "
-rs 576576,782600,262080 3 0134
-\ "
-rB 359632,782600,262080,110334 3 0135
-] "
-ha 704704,755976,0,59794 2 0136
-^ "
-_ 896896,0,352171 1 0137
-oq 320320,755976,0,101234 2 0140
-` "
-a 550368,480480,0,40605 0 0141
-b 588224,755976,0,35090 2 0142
-c 512512,480480,0,89315 0 0143
-d 588224,755976,0,130354 2 0144
-e 535808,480480,0,78917 0 0145
-f 352352,755976,0,241010 2 0146
-g 576576,480480,203840,118144 1 0147
-h 588224,755976,0,48341 2 0150
-i 267904,755976,0,133266 2 0151
-j 299936,755976,203840,130354 3 0152
-k 556192,755976,0,89315 2 0153
-l 267904,755976,0,130354 2 0154
-m 908544,480480,0,48341 0 0155
-n 588224,480480,0,48341 0 0156
-o 576576,480480,0,71520 0 0157
-p 588224,480480,203840,44658 1 0160
-q 588224,480480,203840,71520 1 0161
-r 390208,480480,0,118144 0 0162
-s 442042,480480,0,82909 0 0163
-t 423696,617763,0,76502 2 0164
-u 588224,480480,0,71520 0 0165
-v 524160,480480,0,118144 0 0166
-w 780416,480480,0,118144 0 0167
-x 524160,480480,0,98925 0 0170
-y 524160,480480,203840,118144 1 0171
-z 499408,480480,0,96013 0 0172
-lC 576576,782600,262080,140910 3 0173
-{ "
-u01C0 320320,782600,262080,82670 3 0174
-ba "
-| "
-rC 576576,782600,262080,29498 3 0175
-} "
-~ 704704,755976,0,96379 2 0176
-hy 192192,480480,0,19032 0 0177
-u0041_0306 768768,946400 2 0200
-u0041_0328 768768,728000,203840 3 0201
-'C 736736,905917,0,122707 2 0202
-u0043_030C 736736,946400,0,122707,-78454,61354 2 0203
-u0044_030C 832832,946400,0,76286,0,44254 2 0204
-u0045_030C 672672,946400,0,122707,0,61354 2 0205
-u0045_0328 672672,728000,203840,122707 3 0206
-u0047_0306 768768,946400,0,122707,-78454,61354 2 0207
-u004C_0301 608608,905917,0,0,0,64064 2 0210
-u004C_030C 608608,946400,0,0,0,64064 2 0211
-/L 704704,728000 2 0212
-u004E_0301 832832,905917,0,90675 2 0213
-u004E_030C 832832,946400,0,90675,0,13306 2 0214
-u014A 864864,728000,0,154739,0,45338 2 0215
-u004F_030B 832832,905917,0,76286,-78454,44254 2 0216
-u0052_0301 736736,905917,0,84022,0,63018 2 0217
-u0052_030C 736736,946400,0,84022,0,63018 2 0220
-u0053_0301 640640,905917,0,90675 2 0221
-vS 640640,946400,0,90675,0,45338 2 0222
-u0053_0327 640640,728000,178360,90675,0,45338 3 0223
-u0054_030C 768768,946400,0,138723,-116054,-21437 2 0224
-u0054_0327 768768,728000,178360,138723,-116054,-21437 3 0225
-u0055_030B 800800,905917,0,90675,-78454,13306 2 0226
-u0055_030A 800800,946400,0,90675,-78454,13306 2 0227
-:Y 768768,946400,0,183568,-122707,-72688 2 0230
-u005A_0301 704704,905917,0,122707 2 0231
-vZ 704704,946400,0,122707,0,61354 2 0232
-u005A_0307 704704,905917,0,122707 2 0233
-IJ 853216,728000,0,90675,0,13306 2 0234
-u0049_0307 340704,905917,0,138723,0,69362 2 0235
-u0111 588224,755976,0,130354 2 0236
-sc 559104,755976,203840 3 0237
-u0061_0306 550368,698880,0,40605 2 0240
-u0061_0328 550368,480480,203840,40605 1 0241
-'c 512512,698880,0,89315 2 0242
-u0063_030C 512512,698880,0,89315 2 0243
-u0064_030C 767312,755976,0,130354 2 0244
-u0065_030C 535808,698880,0,78917 2 0245
-u0065_0328 535808,480480,203840,78917 1 0246
-u0067_0306 576576,698880,203840,118144 3 0247
-u006C_0301 267904,905917,0,130354 2 0250
-u006C_030C 446992,755976,0,130354 2 0251
-/l 399818,755976,0,130354 2 0252
-u006E_0301 588224,698880,0,48341 2 0253
-u006E_030C 588224,698880,0,48341 2 0254
-u016A 588224,480480,203840,48341 1 0255
-u006F_030B 576576,698880,0,71520 2 0256
-u0072_0301 390208,698880,0,118144 2 0257
-u0072_030C 390208,698880,0,118144 2 0260
-u0073_0301 442042,698880,0,82909 2 0261
-vs 442042,698880,0,82909 2 0262
-u0073_0327 442042,480480,178360,82909 1 0263
-u0074_030C 423696,755976,0,135304 2 0264
-u0074_0327 423696,617763,178360,76502 3 0265
-u0075_030B 588224,698880,0,71520 2 0266
-u0075_030A 588224,698880,0,71520 2 0267
-:y 524160,728000,203840,118144 3 0270
-u007A_0301 499408,698880,0,96013 2 0271
-vz 499408,698880,0,96013 2 0272
-u007A_0307 499408,755976,0,96013 2 0273
-ij 620256,755976,203840,133266 3 0274
-r! 384384,553280,203840,25874 3 0275
-r? 544544,553280,203840 3 0276
-Po 857434,755976 2 0277
-`A 768768,905917 2 0300
-'A 768768,905917,0,16302 2 0301
-^A 768768,946400 2 0302
-~A 768768,946400 2 0303
-:A 768768,946400 2 0304
-oA 768768,905917 2 0305
-AE 992992,728000,0,122707 2 0306
-,C 736736,728000,178360,122707,-78454,61354 3 0307
-`E 672672,905917,0,122707,0,61354 2 0310
-'E 672672,905917,0,122707,0,61354 2 0311
-^E 672672,946400,0,122707,0,61354 2 0312
-:E 672672,946400,0,122707 2 0313
-`I 340704,905917,0,138723,0,69362 2 0314
-'I 340704,905917,0,138723,0,69362 2 0315
-^I 340704,946400,0,138723,0,69362 2 0316
-:I 340704,946400,0,138723,0,69362 2 0317
-u0189 832832,728000,0,76286,0,44254 2 0320
-u0110 "
--D "
-~N 832832,946400,0,90675,0,13306 2 0321
-`O 832832,905917,0,76286,-78454,44254 2 0322
-'O 832832,905917,0,76286 2 0323
-^O 832832,946400,0,76286,-78454,44254 2 0324
-~O 832832,946400,0,76286,-78454,44254 2 0325
-:O 832832,946400,0,76286,-78454,44254 2 0326
-OE 1121120,728000,0,122707 2 0327
-/O 896896,782600,50960,76286 3 0330
-`U 800800,905917,0,90675,-78454,13306 2 0331
-'U 800800,905917,0,90675 2 0332
-^U 800800,946400,0,90675,-78454,13306 2 0333
-:U 800800,946400,0,90675,-78454,13306 2 0334
-'Y 768768,905917,0,183568,-122707,-72688 2 0335
-TP 672672,728000,0,84022,0,42011 2 0336
---- 1281280,728000,0,90675,0,45338 2 0337
-`a 550368,698880,0,40605 2 0340
-'a 550368,698880,0,40605 2 0341
-^a 550368,698880,0,40605 2 0342
-~a 550368,698880,0,40605 2 0343
-:a 550368,728000,0,40605 2 0344
-oa 550368,698880,0,40605 2 0345
-ae 832832,480480,0,78917 0 0346
-,c 512512,480480,178360,89315 1 0347
-`e 535808,698880,0,78917 2 0350
-'e 535808,698880,0,78917 2 0351
-^e 535808,698880,0,78917 2 0352
-:e 535808,728000,0,78917 2 0353
-`i 267904,698880,0,117974 2 0354
-'i 267904,698880,0,117974 2 0355
-^i 267904,698880,0,117974 2 0356
-:i 331968,728000,0,117974 2 0357
-Sd 576576,755976,0,102128 2 0360
-~n 588224,698880,0,48341 2 0361
-`o 576576,698880,0,71520 2 0362
-'o 576576,698880,0,71520 2 0363
-^o 576576,698880,0,71520 2 0364
-~o 576576,698880,0,71520 2 0365
-:o 576576,728000,0,71520 2 0366
-oe 896896,480480,0,78917 0 0367
-/o 576576,582400,101920,34802 3 0370
-`u 588224,698880,0,71520 2 0371
-'u 588224,698880,0,71520 2 0372
-^u 588224,698880,0,71520 2 0373
-:u 588224,728000,0,71520 2 0374
-'y 524160,698880,203840,118144 3 0375
-Tp 588224,755976,203840,44658 3 0376
-ss 592592,755976,0,96866 2 0377
diff --git a/contrib/groff/font/devdvi/HBITC b/contrib/groff/font/devdvi/HBITC
deleted file mode 100644
index 9a9fec86b396..000000000000
--- a/contrib/groff/font/devdvi/HBITC
+++ /dev/null
@@ -1,138 +0,0 @@
-name HBITC
-special
-internalname tcso1000
-spacewidth 384384
-slant 11.999911
-checksum 220072497
-designsize 10485760
-charset
---- 576576,660915 2 0000
---- 576576,660915,0,76549 2 0001
---- 576576,698880,0,51541 2 0002
---- 576576,698880,0,84486 2 0003
---- 576576,698880 2 0004
---- 576576,660915,0,76549 2 0005
---- 800800,698880 2 0006
---- 576576,698880 2 0007
---- 576576,698880,0,90310 2 0010
---- 576576,698880,0,100502 2 0011
---- 320320,660915 2 0012
---- 512512,0,178360 1 0013
---- 320320,0,203840 1 0014
---- 448448,137072,203840 1 0015
---- 576576,137072,203840 1 0022
---- 768768,483392,0,95150 2 0025
---- 864864,483392,0,95150 2 0026
---- 0,728000 2 0027
-<- 1153152,425880,-98280 0 0030
--> 1153152,425880,-98280 0 0031
---- 267904,757120,0,487894 2 0032
---- 352352,1004640,0,543309 2 0033
---- 524160,757120,0,487894 2 0034
---- 524160,757120,0,543309 2 0035
---- 0,757120 2 0037
-u2422 588224,757120,0,35048 2 0040
-Do 576576,786240,29120,122707 3 0044
-$ "
-aq 320320,757120,0,104146 2 0047
---- 576576,502320,-21840 2 0052
-, 320320,137072,110656 1 0054
---- 384384,425880,-98280,58491 0 0055
-. 320320,137072 0 0056
-f/ 576576,786240,262080,135086 3 0057
-0 576576,483392,0,58677 2 0060
-1 576576,483392 2 0061
-2 576576,483392,0,56077 2 0062
-3 576576,483392,203840,56077 3 0063
-4 576576,483392,203840,13312 3 0064
-5 576576,483392,203840,38064 3 0065
-6 576576,728000,0,90675 2 0066
-7 576576,483392,203840,102128 3 0067
-8 576576,728000,0,90675 2 0070
-9 576576,483392,203840,38064 3 0071
-la 448448,786240,262080 3 0074
-\- 896896,646464,122304,23674 3 0075
-ra 448448,786240,262080 3 0076
-u2127 832832,728000,0,132317,0,66158 2 0115
-ci 1281280,786240,262080 3 0117
-u03A9 832832,728000,0,84022,0,42011 2 0127
-u301A 464464,786240,262080 3 0133
-u301B 464464,786240,262080 3 0135
-ua 576576,757120,232960,96098 3 0136
-da 576576,757120,232960 3 0137
---- 576576,757120 2 0140
---- 576576,502320,-21840 2 0142
---- 576576,502320,-21840 2 0143
---- 576576,660915,27666 3 0144
---- 1153152,757120 2 0154
---- 576576,502320,-21840 2 0155
-u266A 704704,757120 2 0156
-ti 704704,137072 0 0176
-~ "
---- 192192,425880,-98280,58491 0 0177
---- 704704,757120,0,102690 2 0200
---- 704704,757120,0,79394 2 0201
---- 576576,757120,0,96866 2 0202
---- 576576,757120 2 0203
-dg 512512,757120,203840 3 0204
-dd 512512,757120,203840 3 0205
-u2016 576576,786240,262080 3 0206
-%0 1463224,786240,29120,32339 3 0207
-bu 576576,483392,-37856 2 0210
-u2103 992992,728000,0,122707,-78454,61354 2 0211
---- 704704,786240,29120,122707 3 0212
---- 576576,582400,101920,89315 3 0213
-Fn 352352,757120,0,241010 2 0214
-u20A1 736736,786240,29120,122707,-78454,61354 3 0215
-u20A9 1089088,728000,0,170755,-106691,10595 2 0216
-u20A6 864864,728000,0,90675,0,13306 2 0217
---- 896896,786240,29120,122707,-78454,61354 3 0220
-u20B1 752752,728000,0,84022,0,-76138 2 0221
-u20A4 857434,757120 2 0222
-u211E 736736,728000,0,84022,0,63018 2 0223
-u203D 544544,757120,0,128744 2 0224
---- 544544,553280,203840 3 0225
-u20AB 588224,786240,0,130354 2 0226
-tm 768768,786240,0,550366 2 0227
-u2031 2088494,786240,29120,32339 3 0230
---- 544544,757120,203840 3 0231
-u0E3F 768768,786240,29120,84022,0,42011 3 0232
-u2116 960960,728000,0,90675,0,13306 2 0233
-u2052 576576,786240,0,135086 2 0234
-u212E 794976,728000,0,117602 2 0235
-u25E6 576576,483392,-37856 2 0236
-u2120 768768,786240,0,550366 2 0237
-u2045 416416,786240,262080,29498 3 0240
-u2046 416416,786240,262080,140910 3 0241
-ct 576576,582400,101920,89315 3 0242
-Po 857434,757120 2 0243
-Cs 826203,617763,0,102128 2 0244
-Ye 768768,728000,0,183568 2 0245
-bb 192192,786240,262080,103054 3 0246
-sc 559104,757120,203840 3 0247
---- 576576,757120,0,91042 2 0250
-co 1281280,786240,262080 3 0251
-Of 512512,786240,0,116982 2 0252
---- 1281280,786240,262080 3 0253
-tno 768768,483392,0,70096 2 0254
-u2117 1281280,786240,262080 3 0255
-rg 1281280,786240,262080 3 0256
---- 896896,757120 2 0257
-de 384384,728000 2 0260
-t+- 896896,646464,122304,23674 3 0261
-S2 512512,786240,0,135086 2 0262
-S3 512512,786240,0,135086 2 0263
---- 576576,757120,0,96866 2 0264
-mc 588224,483392,203840,71552 3 0265
-ps 704704,757120,203840 3 0266
-pc 235872,483392 2 0267
-u203B 700819,572691,0,19032 2 0270
-S1 512512,786240,0,135086 2 0271
-Om 512512,786240,0,116982 2 0272
---- 544544,786240,174720,167118 3 0273
---- 512512,786240,203840,135086 3 0274
---- 512512,786240,203840,135086 3 0275
---- 512512,786240,203840,135086 3 0276
-Eu 896896,728000,0,122707 2 0277
-tmu 896896,646464,122304,23674 3 0326
-tdi 896896,646464,122304,23674 3 0366
diff --git a/contrib/groff/font/devdvi/HBTC b/contrib/groff/font/devdvi/HBTC
deleted file mode 100644
index 74c0f272dc34..000000000000
--- a/contrib/groff/font/devdvi/HBTC
+++ /dev/null
@@ -1,137 +0,0 @@
-name HBTC
-special
-internalname tcsx1000
-spacewidth 384384
-checksum -1912309847
-designsize 10485760
-charset
---- 576576,660915 2 0000
---- 576576,660915 2 0001
---- 576576,698880 2 0002
---- 576576,698880 2 0003
---- 576576,698880 2 0004
---- 576576,660915,0,61907 2 0005
---- 800800,698880 2 0006
---- 576576,698880 2 0007
---- 576576,698880 2 0010
---- 576576,698880 2 0011
---- 320320,660915 2 0012
---- 512512,0,178360 1 0013
---- 320320,0,203840 1 0014
---- 448448,137072,203840 1 0015
---- 576576,137072,203840 1 0022
---- 768768,483392,0,32032 2 0025
---- 864864,483392,0,32032 2 0026
---- 0,728000 2 0027
-<- 1153152,425880,-98280 0 0030
--> 1153152,425880,-98280 0 0031
---- 267904,757120,0,359632 2 0032
---- 352352,1004640,0,391664 2 0033
---- 524160,757120,0,359632 2 0034
---- 524160,757120,0,391664 2 0035
---- 0,757120 2 0037
-u2422 588224,757120 2 0040
-Do 576576,786240,29120 3 0044
-$ "
-aq 320320,757120 2 0047
---- 576576,502320,-21840 2 0052
-, 320320,137072,110656 1 0054
---- 384384,425880,-98280 0 0055
-. 320320,137072 0 0056
-f/ 576576,786240,262080 3 0057
-0 576576,483392 2 0060
-1 576576,483392 2 0061
-2 576576,483392 2 0062
-3 576576,483392,203840 3 0063
-4 576576,483392,203840 3 0064
-5 576576,483392,203840 3 0065
-6 576576,728000 2 0066
-7 576576,483392,203840 3 0067
-8 576576,728000 2 0070
-9 576576,483392,203840 3 0071
-la 448448,786240,262080 3 0074
-\- 896896,646464,122304 3 0075
-ra 448448,786240,262080 3 0076
-u2127 832832,728000 2 0115
-ci 1281280,786240,262080 3 0117
-u03A9 832832,728000 2 0127
-u301A 464464,786240,262080 3 0133
-u301B 464464,786240,262080 3 0135
-ua 576576,757120,232960 3 0136
-da 576576,757120,232960 3 0137
---- 576576,757120 2 0140
---- 576576,502320,-21840 2 0142
---- 576576,502320,-21840 2 0143
---- 576576,660915,27666 3 0144
---- 1153152,757120 2 0154
---- 576576,502320,-21840 2 0155
-u266A 704704,757120 2 0156
-ti 704704,137072 0 0176
-~ "
---- 192192,425880,-98280 0 0177
---- 704704,757120 2 0200
---- 704704,757120 2 0201
---- 576576,757120 2 0202
---- 576576,757120 2 0203
-dg 512512,757120,203840 3 0204
-dd 512512,757120,203840 3 0205
-u2016 576576,786240,262080 3 0206
-%0 1463224,786240,29120 3 0207
-bu 576576,483392,-37856 2 0210
-u2103 992992,728000,0,0,-32032 2 0211
---- 704704,786240,29120 3 0212
---- 576576,582400,101920 3 0213
-Fn 352352,757120,0,80080 2 0214
-u20A1 736736,786240,29120,0,-32032 3 0215
-u20A9 1089088,728000,0,16016,48048,-144144 2 0216
-u20A6 864864,728000 2 0217
---- 896896,786240,29120,0,-32032 3 0220
-u20B1 752752,728000,0,0,0,-160160 2 0221
-u20A4 736736,757120 2 0222
-u211E 736736,728000 2 0223
-u203D 544544,757120 2 0224
---- 544544,553280,203840 3 0225
-u20AB 588224,786240 2 0226
-tm 768768,786240,0,550366 2 0227
-u2031 2088494,786240,29120 3 0230
---- 544544,757120,203840 3 0231
-u0E3F 768768,786240,29120 3 0232
-u2116 960960,728000 2 0233
-u2052 576576,786240 2 0234
-u212E 794976,728000 2 0235
-u25E6 576576,483392,-37856 2 0236
-u2120 768768,786240,0,550366 2 0237
-u2045 416416,786240,262080 3 0240
-u2046 416416,786240,262080 3 0241
-ct 576576,582400,101920 3 0242
-Po 736736,757120 2 0243
-Cs 826203,617763 2 0244
-Ye 768768,728000,0,28829 2 0245
-bb 192192,786240,262080 3 0246
-sc 559104,757120,203840 3 0247
---- 576576,757120 2 0250
-co 1281280,786240,262080 3 0251
-Of 512512,786240 2 0252
---- 1281280,786240,262080 3 0253
-tno 768768,483392 2 0254
-u2117 1281280,786240,262080 3 0255
-rg 1281280,786240,262080 3 0256
---- 896896,757120 2 0257
-de 384384,728000 2 0260
-t+- 896896,646464,122304 3 0261
-S2 512512,786240 2 0262
-S3 512512,786240 2 0263
---- 576576,757120 2 0264
-mc 588224,483392,203840 3 0265
-ps 704704,757120,203840 3 0266
-pc 235872,483392 2 0267
-u203B 700819,572691 2 0270
-S1 512512,786240 2 0271
-Om 512512,786240 2 0272
---- 544544,786240,174720 3 0273
---- 512512,786240,203840 3 0274
---- 512512,786240,203840 3 0275
---- 512512,786240,203840 3 0276
-Eu 896896,728000 2 0277
-tmu 896896,646464,122304 3 0326
-tdi 896896,646464,122304 3 0366
diff --git a/contrib/groff/font/devdvi/HI b/contrib/groff/font/devdvi/HI
deleted file mode 100644
index 4034e21bf0ec..000000000000
--- a/contrib/groff/font/devdvi/HI
+++ /dev/null
@@ -1,298 +0,0 @@
-name HI
-internalname cmssi10
-spacewidth 349526
-slant 11.999911
-ligatures ff fi fl ffi ffl 0
-checksum -984248855
-designsize 10485760
-kernpairs
-ff cq 72818
-ff ' 72818
-ff ? 72818
-ff ! 72818
-ff ) 72818
-ff rB 72818
-ff ] 72818
-slash@for@l l -250494
-slash@for@l L -270885
-cq ? 116509
-' ? 116509
-cq ! 116509
-' ! 116509
-A t -29128
-A C -29128
-A O -29128
-A G -29128
-A U -29128
-A Q -29128
-A T -87382
-A Y -87382
-A V -116509
-A W -116509
-D X -29128
-D W -29128
-D A -29128
-D V -29128
-D Y -29128
-F o -29128
-F e -29128
-F u -29128
-F r -29128
-F a -29128
-F A -87382
-F O -29128
-F C -29128
-F G -29128
-F Q -29128
-I I 29128
-K O -29128
-K C -29128
-K G -29128
-K Q -29128
-L T -87382
-L Y -87382
-L V -116509
-L W -116509
-O X -29128
-O W -29128
-O A -29128
-O V -29128
-O Y -29128
-P A -87382
-P o -29128
-P e -29128
-P a -29128
-P . -87382
-P , -87382
-T y -87382
-T e -87382
-T o -87382
-T r -87382
-T a -87382
-T A -87382
-T u -87382
-V o -29128
-V e -29128
-V u -29128
-V r -29128
-V a -29128
-V A -87382
-V O -29128
-V C -29128
-V G -29128
-V Q -29128
-W o -29128
-W e -29128
-W u -29128
-W r -29128
-W a -29128
-W A -87382
-W O -29128
-W C -29128
-W G -29128
-W Q -29128
-X O -29128
-X C -29128
-X G -29128
-X Q -29128
-Y e -87382
-Y o -87382
-Y r -87382
-Y a -87382
-Y A -87382
-Y u -87382
-a r -29128
-a y -29128
-a w -29128
-b e 29128
-b o 29128
-b x -29128
-b d 29128
-b c 29128
-b q 29128
-b r -29128
-b y -29128
-b w -29128
-f cq 72818
-f ' 72818
-f ? 72818
-f ! 72818
-f ) 72818
-f rB 72818
-f ] 72818
-g j 29128
-k e -29128
-k a -29128
-k o -29128
-k c -29128
-o e 29128
-o o 29128
-o x -29128
-o d 29128
-o c 29128
-o q 29128
-o r -29128
-o y -29128
-o w -29128
-p e 29128
-p o 29128
-p x -29128
-p d 29128
-p c 29128
-p q 29128
-p r -29128
-p y -29128
-p w -29128
-t y -29128
-t w -29128
-u w -29128
-w e -29128
-w a -29128
-w o -29128
-w c -29128
-y o -29128
-y e -29128
-y a -29128
-y . -87382
-y , -87382
-charset
-*G 567981,728178,0,140214,0,-5422 2 0000
-*D 873816,728178 2 0001
-*H 815562,728178,0,79216,-75562,50088 2 0002
-*L 640800,728178 2 0003
-*C 699053,728178,0,134389,0,67195 2 0004
-*P 742746,728178,0,84870,0,42435 2 0005
-*S 757307,728178,0,125650,0,62826 2 0006
-*U 815562,728178,0,94694,-152950,-50942 2 0007
-*F 757307,728178,0,48261,-106517,48261 2 0010
-*Q 815562,728178,0,94694,-152950,-10907 2 0011
-*W 757307,728178,0,86955,0,43478 2 0012
-ff 611672,728178,0,227595 2 0013
-fi 562155,728178,0,102349 2 0014
-fl 562155,728178,0,99435 2 0015
-Fi 853427,728178,0,102349 2 0016
-Fl 853427,728178,0,99435 2 0017
-.i 250494,466034,0,43715 0 0020
-.j 279622,466034,203890,43715 1 0021
-ga 524290,728178 2 0022
-aa 524290,728178,0,96523 2 0023
-ah 524290,662642,0,88419 2 0024
-ab 524290,728178,0,99435 2 0025
-a- 524290,638464,0,92018 2 0026
-ao 773347,728178 2 0027
-ac 466035,0,178403 1 0030
-ss 503902,728178,0,96523 2 0031
-ae 757307,466034,0,71070 0 0032
-oe 815562,466034,0,71070 0 0033
-/o 524290,567979,101946,50821 3 0034
-AE 902944,728178,0,125650 2 0035
-OE 1019453,728178,0,125650 2 0036
-/O 815562,779150,50973,79216 3 0037
-slash@for@l 250494,466034 0 0040
-! 334963,728178,0,60114 2 0041
-rq 524290,728178,0,3315 2 0042
-sh 873816,728178,203888,53338 3 0043
-# "
-Do 524290,786432,58254,116982 3 0044
-$ "
-% 873816,786432,58254,32782 3 0045
-& 795173,728178,0,32064 2 0046
-cq 291272,728178,0,81960 2 0047
-' "
-( 407781,786432,262144,138032 3 0050
-) 407781,786432,262144,26592 3 0051
-* 524290,786432,0,123469 2 0052
-+ 815562,611670,87382,26592 3 0053
-, 291272,87381,131072 1 0054
-hy 349526,466034,0,20402 0 0055
-- "
-. 291272,87381 0 0056
-sl 524290,786432,262144,138032 3 0057
-/ "
-0 524290,687400,0,116982 2 0060
-1 524290,687400,0,116982 2 0061
-2 524290,687400,0,116982 2 0062
-3 524290,687400,0,116982 2 0063
-4 524290,687400,0,116982 2 0064
-5 524290,687400,0,116982 2 0065
-6 524290,687400,0,116982 2 0066
-7 524290,687400,0,116982 2 0067
-8 524290,687400,0,116982 2 0070
-9 524290,687400,0,116982 2 0071
-: 291272,466034,0,26240 0 0072
-; 291272,466034,131072,26240 1 0073
-r! 334963,524288,203890,16776 3 0074
-= 815562,387973,-136315,53338 0 0075
-r? 495163,524288,203890 3 0076
-? 495163,728178,0,123822 2 0077
-at 699053,728178,0,79216 2 0100
-@ "
-A 699054,728178 2 0101
-B 699054,728178,0,86955,0,43478 2 0102
-C 669926,728178,0,125650,-75562,62826 2 0103
-D 757309,728178,0,79216,0,50088 2 0104
-E 626235,728178,0,125650,0,62826 2 0105
-F 597109,728178,0,140214,0,-5422 2 0106
-G 699053,728178,0,125650,-75562,62826 2 0107
-H 742746,728178,0,84870,0,42435 2 0110
-I 291274,728178,0,140214,0,70107 2 0111
-J 495163,728178,0,84870,0,13307 2 0112
-K 728182,728178,0,125650,0,62826 2 0113
-L 567981,728178,0,0,0,58254 2 0114
-M 917509,728178,0,84870,0,13307 2 0115
-N 742746,728178,0,84870,0,13307 2 0116
-O 771870,728178,0,79216,-75562,50088 2 0117
-P 669926,728178,0,86955,0,-58682 2 0120
-Q 771870,728178,131072,79216,-75562,79216 3 0121
-R 677208,728178,0,86955,0,65216 2 0122
-S 582544,728178,0,96523,0,48262 2 0123
-T 713616,728178,0,140214,-116083,-5422 2 0124
-U 720901,728178,0,84870,-75562,13307 2 0125
-V 699054,728178,0,169341,-111086,-63677 2 0126
-W 990326,728178,0,169341,-111086,23704 2 0127
-X 699054,728178,0,140214,0,70107 2 0130
-Y 699054,728178,0,180992,-125650,-52026 2 0131
-Z 640798,728178,0,125650,0,62826 2 0132
-lB 302923,786432,262144,167160 3 0133
-[ "
-lq 524290,728178,0,148952 2 0134
-rB 302923,786432,262144,91429 3 0135
-] "
-ha 524290,728178,0,83776 2 0136
-^ "
-a^ "
-a. 291272,712366,0,81512 2 0137
-oq 291272,728178,0,81960 2 0140
-` "
-a 503901,466034,0,10283 0 0141
-b 541766,728178,0,32053 2 0142
-c 466035,466034,0,87406 0 0143
-d 541766,728178,0,99435 2 0144
-e 466035,466034,0,71070 0 0145
-f 320400,728178,0,227595 2 0146
-g 524290,466034,203890,113621 1 0147
-h 541766,728178,0,18642 2 0150
-i 250494,712366,0,101901 2 0151
-j 279622,712366,203890,96075 3 0152
-k 512640,728178,0,87406 2 0153
-l 250494,728178,0,99435 2 0154
-m 833038,466034,0,18642 0 0155
-n 541766,466034,0,18642 0 0156
-o 524290,466034,0,69341 0 0157
-p 541766,466034,203890,40790 1 0160
-q 541766,466034,203890,43715 1 0161
-r 358266,466034,0,113621 0 0162
-s 401955,466034,0,81581 0 0163
-t 378653,599189,0,75757 2 0164
-u 541766,466034,0,43715 0 0165
-v 483512,466034,0,113621 0 0166
-w 716530,466034,0,113621 0 0167
-x 483512,466034,0,96144 0 0170
-y 483512,466034,203890,113621 1 0171
-z 455840,466034,0,91776 0 0172
-en 524290,466034,0,90349 0 0173
-em 1048579,466034,0,90349 0 0174
-a" 524290,728178,0,96523 2 0175
-~ 524290,709454,0,92544 2 0176
-a~ "
-ad 524290,712366,0,66949 2 0177
diff --git a/contrib/groff/font/devdvi/HIEC b/contrib/groff/font/devdvi/HIEC
deleted file mode 100644
index a53f12622eaf..000000000000
--- a/contrib/groff/font/devdvi/HIEC
+++ /dev/null
@@ -1,2079 +0,0 @@
-name HIEC
-internalname ecsi1000
-spacewidth 349440
-slant 11.999911
-ligatures ff fi fl ffi ffl 0
-checksum -132433781
-designsize 10485760
-kernpairs
-bq Bq 116480
-bq j 116480
-bq .j 116480
-bq g 58240
-bq u0067_0306 58240
-bq y 58240
-bq :y 58240
-bq 'y 58240
-bq v -87360
-bq w -58240
-bq V -116480
-bq W -87360
-bq Y -87360
-bq :Y -87360
-bq 'Y -87360
-bq O -29120
-bq u004F_030B -29120
-bq `O -29120
-bq 'O -29120
-bq ^O -29120
-bq ~O -29120
-bq :O -29120
-bq OE -29120
-bq /O -29120
-bq C -29120
-bq G -29120
-bq 'C -29120
-bq u0043_030C -29120
-bq u0047_0306 -29120
-bq ,C -29120
-bq Q -29120
-lq oq 116480
-lq ` 116480
-lq lq 116480
-rq cq 116480
-rq ' 116480
-rq rq 116480
-Bq bq 116480
-Bq , 116480
-Bq Bq 116480
-Bq j 116480
-Bq .j 116480
-Bq g 58240
-Bq u0067_0306 58240
-Bq y 58240
-Bq :y 58240
-Bq 'y 58240
-Bq v -87360
-Bq w -58240
-Bq V -116480
-Bq W -87360
-Bq Y -87360
-Bq :Y -87360
-Bq 'Y -87360
-Bq O -29120
-Bq u004F_030B -29120
-Bq `O -29120
-Bq 'O -29120
-Bq ^O -29120
-Bq ~O -29120
-Bq :O -29120
-Bq OE -29120
-Bq /O -29120
-Bq C -29120
-Bq G -29120
-Bq 'C -29120
-Bq u0043_030C -29120
-Bq u0047_0306 -29120
-Bq ,C -29120
-Bq Q -29120
-Fc . -87360
-Fc , -87360
-ff cq 72800
-ff ' 72800
-ff oq 72800
-ff ` 72800
-ff lq 72800
-ff rq 72800
-ff ? 72800
-ff u01C3 72800
-ff ! 72800
-ff ) 72800
-ff rB 72800
-ff ] 72800
-cq rq 116480
-' rq 116480
-cq ? 116480
-' ? 116480
-cq u01C3 116480
-cq ! 116480
-' u01C3 116480
-' ! 116480
-A y -29120
-A :y -29120
-A 'y -29120
-A v -29120
-A w -29120
-A c -29120
-A 'c -29120
-A u0063_030C -29120
-A ,c -29120
-A d -29120
-A u0064_030C -29120
-A u0111 -29120
-A Sd -29120
-A e -29120
-A u0065_030C -29120
-A u0065_0328 -29120
-A `e -29120
-A 'e -29120
-A ^e -29120
-A :e -29120
-A o -29120
-A u006F_030B -29120
-A `o -29120
-A 'o -29120
-A ^o -29120
-A ~o -29120
-A :o -29120
-A oe -29120
-A /o -29120
-A q -29120
-A t -29120
-A u0074_030C -29120
-A u0074_0327 -29120
-A C -29120
-A G -29120
-A 'C -29120
-A u0043_030C -29120
-A u0047_0306 -29120
-A ,C -29120
-A Q -29120
-A O -29120
-A u004F_030B -29120
-A `O -29120
-A 'O -29120
-A ^O -29120
-A ~O -29120
-A :O -29120
-A OE -29120
-A /O -29120
-A U -29120
-A u0055_030B -29120
-A u0055_030A -29120
-A `U -29120
-A 'U -29120
-A ^U -29120
-A :U -29120
-A T -87360
-A u0054_030C -87360
-A u0054_0327 -87360
-A Y -87360
-A :Y -87360
-A 'Y -87360
-A V -116480
-A W -116480
-D X -29120
-D W -29120
-D A -29120
-D u0041_0306 -29120
-D u0041_0328 -29120
-D `A -29120
-D 'A -29120
-D ^A -29120
-D ~A -29120
-D :A -29120
-D oA -29120
-D AE -29120
-D V -29120
-D Y -29120
-D :Y -29120
-D 'Y -29120
-F o -29120
-F a -29120
-F e -29120
-F y -29120
-F u -29120
-F r -29120
-F v -29120
-F s -29120
-F c -29120
-F d -29120
-F g -29120
-F m -29120
-F n -29120
-F p -29120
-F w -29120
-F z -29120
-F ae -29120
-F /o -29120
-F A -87360
-F u0041_0306 -87360
-F u0041_0328 -87360
-F `A -87360
-F 'A -87360
-F ^A -87360
-F ~A -87360
-F :A -87360
-F oA -87360
-F AE -87360
-F O -29120
-F u004F_030B -29120
-F `O -29120
-F 'O -29120
-F ^O -29120
-F ~O -29120
-F :O -29120
-F OE -29120
-F /O -29120
-F C -29120
-F G -29120
-F 'C -29120
-F u0043_030C -29120
-F u0047_0306 -29120
-F ,C -29120
-F Q -29120
-I I 29120
-K v -29120
-K o -29120
-K u006F_030B -29120
-K `o -29120
-K 'o -29120
-K ^o -29120
-K ~o -29120
-K :o -29120
-K oe -29120
-K /o -29120
-K C -29120
-K G -29120
-K 'C -29120
-K u0043_030C -29120
-K u0047_0306 -29120
-K ,C -29120
-K Q -29120
-L T -87360
-L u0054_030C -87360
-L u0054_0327 -87360
-L Y -87360
-L :Y -87360
-L 'Y -87360
-L V -116480
-L W -116480
-O X -29120
-O W -29120
-O A -29120
-O u0041_0306 -29120
-O u0041_0328 -29120
-O `A -29120
-O 'A -29120
-O ^A -29120
-O ~A -29120
-O :A -29120
-O oA -29120
-O AE -29120
-O V -29120
-O Y -29120
-O :Y -29120
-O 'Y -29120
-P A -87360
-P u0041_0306 -87360
-P u0041_0328 -87360
-P `A -87360
-P 'A -87360
-P ^A -87360
-P ~A -87360
-P :A -87360
-P oA -87360
-P AE -87360
-P o -29120
-P u006F_030B -29120
-P `o -29120
-P 'o -29120
-P ^o -29120
-P ~o -29120
-P :o -29120
-P oe -29120
-P /o -29120
-P e -29120
-P u0065_030C -29120
-P u0065_0328 -29120
-P `e -29120
-P 'e -29120
-P ^e -29120
-P :e -29120
-P a -29120
-P u0061_0306 -29120
-P u0061_0328 -29120
-P `a -29120
-P 'a -29120
-P ^a -29120
-P ^a -29120
-P ~a -29120
-P :a -29120
-P oa -29120
-P ae -29120
-P . -87360
-P , -87360
-T y -87360
-T e -87360
-T o -87360
-T r -87360
-T a -87360
-T u -87360
-T n -87360
-T .i -87360
-T c -87360
-T d -87360
-T g -87360
-T p -87360
-T s -87360
-T v -87360
-T w -87360
-T x -87360
-T z -87360
-T A -87360
-T u0041_0306 -87360
-T u0041_0328 -87360
-T `A -87360
-T 'A -87360
-T ^A -87360
-T ~A -87360
-T :A -87360
-T oA -87360
-T AE -87360
-V o -29120
-V a -29120
-V e -29120
-V y -29120
-V u -29120
-V r -29120
-V v -29120
-V s -29120
-V c -29120
-V d -29120
-V g -29120
-V m -29120
-V n -29120
-V p -29120
-V w -29120
-V z -29120
-V ae -29120
-V /o -29120
-V A -87360
-V u0041_0306 -87360
-V u0041_0328 -87360
-V `A -87360
-V 'A -87360
-V ^A -87360
-V ~A -87360
-V :A -87360
-V oA -87360
-V AE -87360
-V O -29120
-V u004F_030B -29120
-V `O -29120
-V 'O -29120
-V ^O -29120
-V ~O -29120
-V :O -29120
-V OE -29120
-V /O -29120
-V C -29120
-V G -29120
-V 'C -29120
-V u0043_030C -29120
-V u0047_0306 -29120
-V ,C -29120
-V Q -29120
-W o -29120
-W a -29120
-W e -29120
-W y -29120
-W u -29120
-W r -29120
-W v -29120
-W s -29120
-W c -29120
-W d -29120
-W g -29120
-W m -29120
-W n -29120
-W p -29120
-W w -29120
-W z -29120
-W ae -29120
-W /o -29120
-W A -87360
-W u0041_0306 -87360
-W u0041_0328 -87360
-W `A -87360
-W 'A -87360
-W ^A -87360
-W ~A -87360
-W :A -87360
-W oA -87360
-W AE -87360
-W O -29120
-W u004F_030B -29120
-W `O -29120
-W 'O -29120
-W ^O -29120
-W ~O -29120
-W :O -29120
-W OE -29120
-W /O -29120
-W C -29120
-W G -29120
-W 'C -29120
-W u0043_030C -29120
-W u0047_0306 -29120
-W ,C -29120
-W Q -29120
-X O -29120
-X u004F_030B -29120
-X `O -29120
-X 'O -29120
-X ^O -29120
-X ~O -29120
-X :O -29120
-X OE -29120
-X /O -29120
-X C -29120
-X G -29120
-X 'C -29120
-X u0043_030C -29120
-X u0047_0306 -29120
-X ,C -29120
-X Q -29120
-Y e -87360
-Y o -87360
-Y r -87360
-Y a -87360
-Y u -87360
-Y n -87360
-Y .i -87360
-Y c -87360
-Y d -87360
-Y g -87360
-Y p -87360
-Y s -87360
-Y v -87360
-Y w -87360
-Y x -87360
-Y z -87360
-Y A -87360
-Y u0041_0306 -87360
-Y u0041_0328 -87360
-Y `A -87360
-Y 'A -87360
-Y ^A -87360
-Y ~A -87360
-Y :A -87360
-Y oA -87360
-Y AE -87360
-oq lq 116480
-` lq 116480
-oq ? 116480
-` ? 116480
-oq u01C3 116480
-oq ! 116480
-` u01C3 116480
-` ! 116480
-a r -29120
-a y -29120
-a :y -29120
-a 'y -29120
-a w -29120
-b e 29120
-b u0065_030C 29120
-b u0065_0328 29120
-b `e 29120
-b 'e 29120
-b ^e 29120
-b :e 29120
-b o 29120
-b u006F_030B 29120
-b `o 29120
-b 'o 29120
-b ^o 29120
-b ~o 29120
-b :o 29120
-b oe 29120
-b /o 29120
-b x -29120
-b d 29120
-b c 29120
-b 'c 29120
-b u0063_030C 29120
-b ,c 29120
-b q 29120
-b r -29120
-b y -29120
-b :y -29120
-b 'y -29120
-b w -29120
-e V -87360
-f cq 72800
-f ' 72800
-f oq 72800
-f ` 72800
-f lq 72800
-f rq 72800
-f ? 72800
-f u01C3 72800
-f ! 72800
-f ) 72800
-f rB 72800
-f ] 72800
-g j 29120
-k W -87360
-k V -87360
-k e -29120
-k u0065_030C -29120
-k u0065_0328 -29120
-k `e -29120
-k 'e -29120
-k ^e -29120
-k :e -29120
-k a -29120
-k u0061_0306 -29120
-k u0061_0328 -29120
-k `a -29120
-k 'a -29120
-k ^a -29120
-k ^a -29120
-k ~a -29120
-k :a -29120
-k oa -29120
-k ae -29120
-k o -29120
-k u006F_030B -29120
-k `o -29120
-k 'o -29120
-k ^o -29120
-k ~o -29120
-k :o -29120
-k oe -29120
-k /o -29120
-k c -29120
-k 'c -29120
-k u0063_030C -29120
-k ,c -29120
-o e 29120
-o u0065_030C 29120
-o u0065_0328 29120
-o `e 29120
-o 'e 29120
-o ^e 29120
-o :e 29120
-o o 29120
-o u006F_030B 29120
-o `o 29120
-o 'o 29120
-o ^o 29120
-o ~o 29120
-o :o 29120
-o oe 29120
-o /o 29120
-o x -29120
-o d 29120
-o c 29120
-o 'c 29120
-o u0063_030C 29120
-o ,c 29120
-o q 29120
-o r -29120
-o y -29120
-o :y -29120
-o 'y -29120
-o w -29120
-p e 29120
-p u0065_030C 29120
-p u0065_0328 29120
-p `e 29120
-p 'e 29120
-p ^e 29120
-p :e 29120
-p o 29120
-p u006F_030B 29120
-p `o 29120
-p 'o 29120
-p ^o 29120
-p ~o 29120
-p :o 29120
-p oe 29120
-p /o 29120
-p x -29120
-p d 29120
-p c 29120
-p 'c 29120
-p u0063_030C 29120
-p ,c 29120
-p q 29120
-p r -29120
-p y -29120
-p :y -29120
-p 'y -29120
-p w -29120
-t y -29120
-t :y -29120
-t 'y -29120
-t w -29120
-u w -29120
-w e -29120
-w u0065_030C -29120
-w u0065_0328 -29120
-w `e -29120
-w 'e -29120
-w ^e -29120
-w :e -29120
-w a -29120
-w u0061_0306 -29120
-w u0061_0328 -29120
-w `a -29120
-w 'a -29120
-w ^a -29120
-w ^a -29120
-w ~a -29120
-w :a -29120
-w oa -29120
-w ae -29120
-w o -29120
-w u006F_030B -29120
-w `o -29120
-w 'o -29120
-w ^o -29120
-w ~o -29120
-w :o -29120
-w oe -29120
-w /o -29120
-w c -29120
-w 'c -29120
-w u0063_030C -29120
-w ,c -29120
-y o -29120
-y u006F_030B -29120
-y `o -29120
-y 'o -29120
-y ^o -29120
-y ~o -29120
-y :o -29120
-y oe -29120
-y /o -29120
-y e -29120
-y u0065_030C -29120
-y u0065_0328 -29120
-y `e -29120
-y 'e -29120
-y ^e -29120
-y :e -29120
-y a -29120
-y u0061_0306 -29120
-y u0061_0328 -29120
-y `a -29120
-y 'a -29120
-y ^a -29120
-y ^a -29120
-y ~a -29120
-y :a -29120
-y oa -29120
-y ae -29120
-y . -87360
-y , -87360
-u0041_0306 y -29120
-u0041_0306 :y -29120
-u0041_0306 'y -29120
-u0041_0306 v -29120
-u0041_0306 w -29120
-u0041_0306 c -29120
-u0041_0306 'c -29120
-u0041_0306 u0063_030C -29120
-u0041_0306 ,c -29120
-u0041_0306 d -29120
-u0041_0306 u0064_030C -29120
-u0041_0306 u0111 -29120
-u0041_0306 Sd -29120
-u0041_0306 e -29120
-u0041_0306 u0065_030C -29120
-u0041_0306 u0065_0328 -29120
-u0041_0306 `e -29120
-u0041_0306 'e -29120
-u0041_0306 ^e -29120
-u0041_0306 :e -29120
-u0041_0306 o -29120
-u0041_0306 u006F_030B -29120
-u0041_0306 `o -29120
-u0041_0306 'o -29120
-u0041_0306 ^o -29120
-u0041_0306 ~o -29120
-u0041_0306 :o -29120
-u0041_0306 oe -29120
-u0041_0306 /o -29120
-u0041_0306 q -29120
-u0041_0306 t -29120
-u0041_0306 u0074_030C -29120
-u0041_0306 u0074_0327 -29120
-u0041_0306 C -29120
-u0041_0306 G -29120
-u0041_0306 'C -29120
-u0041_0306 u0043_030C -29120
-u0041_0306 u0047_0306 -29120
-u0041_0306 ,C -29120
-u0041_0306 Q -29120
-u0041_0306 O -29120
-u0041_0306 u004F_030B -29120
-u0041_0306 `O -29120
-u0041_0306 'O -29120
-u0041_0306 ^O -29120
-u0041_0306 ~O -29120
-u0041_0306 :O -29120
-u0041_0306 OE -29120
-u0041_0306 /O -29120
-u0041_0306 U -29120
-u0041_0306 u0055_030B -29120
-u0041_0306 u0055_030A -29120
-u0041_0306 `U -29120
-u0041_0306 'U -29120
-u0041_0306 ^U -29120
-u0041_0306 :U -29120
-u0041_0306 T -87360
-u0041_0306 u0054_030C -87360
-u0041_0306 u0054_0327 -87360
-u0041_0306 Y -87360
-u0041_0306 :Y -87360
-u0041_0306 'Y -87360
-u0041_0306 V -116480
-u0041_0306 W -116480
-'C v -29120
-'C w -29120
-'C c -29120
-'C 'c -29120
-'C u0063_030C -29120
-'C ,c -29120
-'C d -29120
-'C u0064_030C -29120
-'C u0111 -29120
-'C Sd -29120
-'C e -29120
-'C u0065_030C -29120
-'C u0065_0328 -29120
-'C `e -29120
-'C 'e -29120
-'C ^e -29120
-'C :e -29120
-'C o -29120
-'C u006F_030B -29120
-'C `o -29120
-'C 'o -29120
-'C ^o -29120
-'C ~o -29120
-'C :o -29120
-'C oe -29120
-'C /o -29120
-'C q -29120
-'C t -29120
-'C u0074_030C -29120
-'C u0074_0327 -29120
-'C C -29120
-'C G -29120
-'C 'C -29120
-'C u0043_030C -29120
-'C u0047_0306 -29120
-'C ,C -29120
-'C Q -29120
-'C O -29120
-'C u004F_030B -29120
-'C `O -29120
-'C 'O -29120
-'C ^O -29120
-'C ~O -29120
-'C :O -29120
-'C OE -29120
-'C /O -29120
-'C U -29120
-'C u0055_030B -29120
-'C u0055_030A -29120
-'C `U -29120
-'C 'U -29120
-'C ^U -29120
-'C :U -29120
-'C T -87360
-'C u0054_030C -87360
-'C u0054_0327 -87360
-'C Y -87360
-'C :Y -87360
-'C 'Y -87360
-'C V -116480
-'C W -116480
-u0044_030C X -29120
-u0044_030C W -29120
-u0044_030C A -29120
-u0044_030C u0041_0306 -29120
-u0044_030C u0041_0328 -29120
-u0044_030C `A -29120
-u0044_030C 'A -29120
-u0044_030C ^A -29120
-u0044_030C ~A -29120
-u0044_030C :A -29120
-u0044_030C oA -29120
-u0044_030C AE -29120
-u0044_030C V -29120
-u0044_030C Y -29120
-u0044_030C :Y -29120
-u0044_030C 'Y -29120
-u004C_0301 T -87360
-u004C_0301 u0054_030C -87360
-u004C_0301 u0054_0327 -87360
-u004C_0301 Y -87360
-u004C_0301 :Y -87360
-u004C_0301 'Y -87360
-u004C_0301 V -116480
-u004C_0301 W -116480
-u004C_030C T -87360
-u004C_030C u0054_030C -87360
-u004C_030C u0054_0327 -87360
-u004C_030C Y -87360
-u004C_030C :Y -87360
-u004C_030C 'Y -87360
-u004C_030C V -116480
-u004C_030C W -116480
-/L T -87360
-/L u0054_030C -87360
-/L u0054_0327 -87360
-/L Y -87360
-/L :Y -87360
-/L 'Y -87360
-/L V -116480
-/L W -116480
-u004F_030B X -29120
-u004F_030B W -29120
-u004F_030B A -29120
-u004F_030B u0041_0306 -29120
-u004F_030B u0041_0328 -29120
-u004F_030B `A -29120
-u004F_030B 'A -29120
-u004F_030B ^A -29120
-u004F_030B ~A -29120
-u004F_030B :A -29120
-u004F_030B oA -29120
-u004F_030B AE -29120
-u004F_030B V -29120
-u004F_030B Y -29120
-u004F_030B :Y -29120
-u004F_030B 'Y -29120
-u0054_030C y -87360
-u0054_030C e -87360
-u0054_030C o -87360
-u0054_030C r -87360
-u0054_030C a -87360
-u0054_030C u -87360
-u0054_030C n -87360
-u0054_030C .i -87360
-u0054_030C c -87360
-u0054_030C d -87360
-u0054_030C g -87360
-u0054_030C p -87360
-u0054_030C s -87360
-u0054_030C v -87360
-u0054_030C w -87360
-u0054_030C x -87360
-u0054_030C z -87360
-u0054_030C A -87360
-u0054_030C u0041_0306 -87360
-u0054_030C u0041_0328 -87360
-u0054_030C `A -87360
-u0054_030C 'A -87360
-u0054_030C ^A -87360
-u0054_030C ~A -87360
-u0054_030C :A -87360
-u0054_030C oA -87360
-u0054_030C AE -87360
-u0054_0327 y -87360
-u0054_0327 e -87360
-u0054_0327 o -87360
-u0054_0327 r -87360
-u0054_0327 a -87360
-u0054_0327 u -87360
-u0054_0327 n -87360
-u0054_0327 .i -87360
-u0054_0327 c -87360
-u0054_0327 d -87360
-u0054_0327 g -87360
-u0054_0327 p -87360
-u0054_0327 s -87360
-u0054_0327 v -87360
-u0054_0327 w -87360
-u0054_0327 x -87360
-u0054_0327 z -87360
-u0054_0327 A -87360
-u0054_0327 u0041_0306 -87360
-u0054_0327 u0041_0328 -87360
-u0054_0327 `A -87360
-u0054_0327 'A -87360
-u0054_0327 ^A -87360
-u0054_0327 ~A -87360
-u0054_0327 :A -87360
-u0054_0327 oA -87360
-u0054_0327 AE -87360
-:Y e -87360
-:Y o -87360
-:Y r -87360
-:Y a -87360
-:Y u -87360
-:Y n -87360
-:Y .i -87360
-:Y c -87360
-:Y d -87360
-:Y g -87360
-:Y p -87360
-:Y s -87360
-:Y v -87360
-:Y w -87360
-:Y x -87360
-:Y z -87360
-:Y A -87360
-:Y u0041_0306 -87360
-:Y u0041_0328 -87360
-:Y `A -87360
-:Y 'A -87360
-:Y ^A -87360
-:Y ~A -87360
-:Y :A -87360
-:Y oA -87360
-:Y AE -87360
-u0061_0306 r -29120
-u0061_0306 y -29120
-u0061_0306 :y -29120
-u0061_0306 'y -29120
-u0061_0306 w -29120
-u0061_0328 w -29120
-/l cq 29120
-/l ' 29120
-/l a -29120
-/l u0061_0328 -29120
-/l c -29120
-/l 'c -29120
-/l d -29120
-/l e -29120
-/l u0065_0328 -29120
-/l g -29120
-/l o -29120
-/l 'o -29120
-/l s -29120
-/l u0073_0301 -29120
-u006F_030B e 29120
-u006F_030B u0065_030C 29120
-u006F_030B u0065_0328 29120
-u006F_030B `e 29120
-u006F_030B 'e 29120
-u006F_030B ^e 29120
-u006F_030B :e 29120
-u006F_030B o 29120
-u006F_030B u006F_030B 29120
-u006F_030B `o 29120
-u006F_030B 'o 29120
-u006F_030B ^o 29120
-u006F_030B ~o 29120
-u006F_030B :o 29120
-u006F_030B oe 29120
-u006F_030B /o 29120
-u006F_030B x -29120
-u006F_030B d 29120
-u006F_030B c 29120
-u006F_030B 'c 29120
-u006F_030B u0063_030C 29120
-u006F_030B ,c 29120
-u006F_030B q 29120
-u006F_030B r -29120
-u006F_030B y -29120
-u006F_030B :y -29120
-u006F_030B 'y -29120
-u006F_030B w -29120
-u0074_030C y -29120
-u0074_030C :y -29120
-u0074_030C 'y -29120
-u0074_030C w -29120
-u0074_0327 y -29120
-u0074_0327 :y -29120
-u0074_0327 'y -29120
-u0074_0327 w -29120
-u0075_030B w -29120
-u0075_030A w -29120
-:y o -29120
-:y u006F_030B -29120
-:y `o -29120
-:y 'o -29120
-:y ^o -29120
-:y ~o -29120
-:y :o -29120
-:y oe -29120
-:y /o -29120
-:y e -29120
-:y u0065_030C -29120
-:y u0065_0328 -29120
-:y `e -29120
-:y 'e -29120
-:y ^e -29120
-:y :e -29120
-:y a -29120
-:y u0061_0306 -29120
-:y u0061_0328 -29120
-:y `a -29120
-:y 'a -29120
-:y ^a -29120
-:y ^a -29120
-:y ~a -29120
-:y :a -29120
-:y oa -29120
-:y ae -29120
-:y . -87360
-:y , -87360
-`A y -29120
-`A :y -29120
-`A 'y -29120
-`A v -29120
-`A w -29120
-`A c -29120
-`A 'c -29120
-`A u0063_030C -29120
-`A ,c -29120
-`A d -29120
-`A u0064_030C -29120
-`A u0111 -29120
-`A Sd -29120
-`A e -29120
-`A u0065_030C -29120
-`A u0065_0328 -29120
-`A `e -29120
-`A 'e -29120
-`A ^e -29120
-`A :e -29120
-`A o -29120
-`A u006F_030B -29120
-`A `o -29120
-`A 'o -29120
-`A ^o -29120
-`A ~o -29120
-`A :o -29120
-`A oe -29120
-`A /o -29120
-`A q -29120
-`A t -29120
-`A u0074_030C -29120
-`A u0074_0327 -29120
-`A C -29120
-`A G -29120
-`A 'C -29120
-`A u0043_030C -29120
-`A u0047_0306 -29120
-`A ,C -29120
-`A Q -29120
-`A O -29120
-`A u004F_030B -29120
-`A `O -29120
-`A 'O -29120
-`A ^O -29120
-`A ~O -29120
-`A :O -29120
-`A OE -29120
-`A /O -29120
-`A U -29120
-`A u0055_030B -29120
-`A u0055_030A -29120
-`A `U -29120
-`A 'U -29120
-`A ^U -29120
-`A :U -29120
-`A T -87360
-`A u0054_030C -87360
-`A u0054_0327 -87360
-`A Y -87360
-`A :Y -87360
-`A 'Y -87360
-`A V -116480
-`A W -116480
-'A y -29120
-'A :y -29120
-'A 'y -29120
-'A v -29120
-'A w -29120
-'A c -29120
-'A 'c -29120
-'A u0063_030C -29120
-'A ,c -29120
-'A d -29120
-'A u0064_030C -29120
-'A u0111 -29120
-'A Sd -29120
-'A e -29120
-'A u0065_030C -29120
-'A u0065_0328 -29120
-'A `e -29120
-'A 'e -29120
-'A ^e -29120
-'A :e -29120
-'A o -29120
-'A u006F_030B -29120
-'A `o -29120
-'A 'o -29120
-'A ^o -29120
-'A ~o -29120
-'A :o -29120
-'A oe -29120
-'A /o -29120
-'A q -29120
-'A t -29120
-'A u0074_030C -29120
-'A u0074_0327 -29120
-'A C -29120
-'A G -29120
-'A 'C -29120
-'A u0043_030C -29120
-'A u0047_0306 -29120
-'A ,C -29120
-'A Q -29120
-'A O -29120
-'A u004F_030B -29120
-'A `O -29120
-'A 'O -29120
-'A ^O -29120
-'A ~O -29120
-'A :O -29120
-'A OE -29120
-'A /O -29120
-'A U -29120
-'A u0055_030B -29120
-'A u0055_030A -29120
-'A `U -29120
-'A 'U -29120
-'A ^U -29120
-'A :U -29120
-'A T -87360
-'A u0054_030C -87360
-'A u0054_0327 -87360
-'A Y -87360
-'A :Y -87360
-'A 'Y -87360
-'A V -116480
-'A W -116480
-^A y -29120
-^A :y -29120
-^A 'y -29120
-^A v -29120
-^A w -29120
-^A c -29120
-^A 'c -29120
-^A u0063_030C -29120
-^A ,c -29120
-^A d -29120
-^A u0064_030C -29120
-^A u0111 -29120
-^A Sd -29120
-^A e -29120
-^A u0065_030C -29120
-^A u0065_0328 -29120
-^A `e -29120
-^A 'e -29120
-^A ^e -29120
-^A :e -29120
-^A o -29120
-^A u006F_030B -29120
-^A `o -29120
-^A 'o -29120
-^A ^o -29120
-^A ~o -29120
-^A :o -29120
-^A oe -29120
-^A /o -29120
-^A q -29120
-^A t -29120
-^A u0074_030C -29120
-^A u0074_0327 -29120
-^A C -29120
-^A G -29120
-^A 'C -29120
-^A u0043_030C -29120
-^A u0047_0306 -29120
-^A ,C -29120
-^A Q -29120
-^A O -29120
-^A u004F_030B -29120
-^A `O -29120
-^A 'O -29120
-^A ^O -29120
-^A ~O -29120
-^A :O -29120
-^A OE -29120
-^A /O -29120
-^A U -29120
-^A u0055_030B -29120
-^A u0055_030A -29120
-^A `U -29120
-^A 'U -29120
-^A ^U -29120
-^A :U -29120
-^A T -87360
-^A u0054_030C -87360
-^A u0054_0327 -87360
-^A Y -87360
-^A :Y -87360
-^A 'Y -87360
-^A V -116480
-^A W -116480
-~A y -29120
-~A :y -29120
-~A 'y -29120
-~A v -29120
-~A w -29120
-~A c -29120
-~A 'c -29120
-~A u0063_030C -29120
-~A ,c -29120
-~A d -29120
-~A u0064_030C -29120
-~A u0111 -29120
-~A Sd -29120
-~A e -29120
-~A u0065_030C -29120
-~A u0065_0328 -29120
-~A `e -29120
-~A 'e -29120
-~A ^e -29120
-~A :e -29120
-~A o -29120
-~A u006F_030B -29120
-~A `o -29120
-~A 'o -29120
-~A ^o -29120
-~A ~o -29120
-~A :o -29120
-~A oe -29120
-~A /o -29120
-~A q -29120
-~A t -29120
-~A u0074_030C -29120
-~A u0074_0327 -29120
-~A C -29120
-~A G -29120
-~A 'C -29120
-~A u0043_030C -29120
-~A u0047_0306 -29120
-~A ,C -29120
-~A Q -29120
-~A O -29120
-~A u004F_030B -29120
-~A `O -29120
-~A 'O -29120
-~A ^O -29120
-~A ~O -29120
-~A :O -29120
-~A OE -29120
-~A /O -29120
-~A U -29120
-~A u0055_030B -29120
-~A u0055_030A -29120
-~A `U -29120
-~A 'U -29120
-~A ^U -29120
-~A :U -29120
-~A T -87360
-~A u0054_030C -87360
-~A u0054_0327 -87360
-~A Y -87360
-~A :Y -87360
-~A 'Y -87360
-~A V -116480
-~A W -116480
-:A y -29120
-:A :y -29120
-:A 'y -29120
-:A v -29120
-:A w -29120
-:A c -29120
-:A 'c -29120
-:A u0063_030C -29120
-:A ,c -29120
-:A d -29120
-:A u0064_030C -29120
-:A u0111 -29120
-:A Sd -29120
-:A e -29120
-:A u0065_030C -29120
-:A u0065_0328 -29120
-:A `e -29120
-:A 'e -29120
-:A ^e -29120
-:A :e -29120
-:A o -29120
-:A u006F_030B -29120
-:A `o -29120
-:A 'o -29120
-:A ^o -29120
-:A ~o -29120
-:A :o -29120
-:A oe -29120
-:A /o -29120
-:A q -29120
-:A t -29120
-:A u0074_030C -29120
-:A u0074_0327 -29120
-:A C -29120
-:A G -29120
-:A 'C -29120
-:A u0043_030C -29120
-:A u0047_0306 -29120
-:A ,C -29120
-:A Q -29120
-:A O -29120
-:A u004F_030B -29120
-:A `O -29120
-:A 'O -29120
-:A ^O -29120
-:A ~O -29120
-:A :O -29120
-:A OE -29120
-:A /O -29120
-:A U -29120
-:A u0055_030B -29120
-:A u0055_030A -29120
-:A `U -29120
-:A 'U -29120
-:A ^U -29120
-:A :U -29120
-:A T -87360
-:A u0054_030C -87360
-:A u0054_0327 -87360
-:A Y -87360
-:A :Y -87360
-:A 'Y -87360
-:A V -116480
-:A W -116480
-oA y -29120
-oA :y -29120
-oA 'y -29120
-oA v -29120
-oA w -29120
-oA c -29120
-oA 'c -29120
-oA u0063_030C -29120
-oA ,c -29120
-oA d -29120
-oA u0064_030C -29120
-oA u0111 -29120
-oA Sd -29120
-oA e -29120
-oA u0065_030C -29120
-oA u0065_0328 -29120
-oA `e -29120
-oA 'e -29120
-oA ^e -29120
-oA :e -29120
-oA o -29120
-oA u006F_030B -29120
-oA `o -29120
-oA 'o -29120
-oA ^o -29120
-oA ~o -29120
-oA :o -29120
-oA oe -29120
-oA /o -29120
-oA q -29120
-oA t -29120
-oA u0074_030C -29120
-oA u0074_0327 -29120
-oA C -29120
-oA G -29120
-oA 'C -29120
-oA u0043_030C -29120
-oA u0047_0306 -29120
-oA ,C -29120
-oA Q -29120
-oA O -29120
-oA u004F_030B -29120
-oA `O -29120
-oA 'O -29120
-oA ^O -29120
-oA ~O -29120
-oA :O -29120
-oA OE -29120
-oA /O -29120
-oA U -29120
-oA u0055_030B -29120
-oA u0055_030A -29120
-oA `U -29120
-oA 'U -29120
-oA ^U -29120
-oA :U -29120
-oA T -87360
-oA u0054_030C -87360
-oA u0054_0327 -87360
-oA Y -87360
-oA :Y -87360
-oA 'Y -87360
-oA V -116480
-oA W -116480
-u0189 X -29120
-u0110 X -29120
--D X -29120
-u0189 W -29120
-u0110 W -29120
--D W -29120
-u0189 A -29120
-u0110 A -29120
--D A -29120
-u0189 u0041_0306 -29120
-u0110 u0041_0306 -29120
--D u0041_0306 -29120
-u0189 u0041_0328 -29120
-u0110 u0041_0328 -29120
--D u0041_0328 -29120
-u0189 `A -29120
-u0110 `A -29120
--D `A -29120
-u0189 'A -29120
-u0110 'A -29120
--D 'A -29120
-u0189 ^A -29120
-u0110 ^A -29120
--D ^A -29120
-u0189 ~A -29120
-u0110 ~A -29120
--D ~A -29120
-u0189 :A -29120
-u0110 :A -29120
--D :A -29120
-u0189 oA -29120
-u0110 oA -29120
--D oA -29120
-u0189 AE -29120
-u0110 AE -29120
--D AE -29120
-u0189 V -29120
-u0110 V -29120
--D V -29120
-u0189 Y -29120
-u0110 Y -29120
--D Y -29120
-u0189 :Y -29120
-u0110 :Y -29120
--D :Y -29120
-u0189 'Y -29120
-u0110 'Y -29120
--D 'Y -29120
-`O X -29120
-`O W -29120
-`O A -29120
-`O u0041_0306 -29120
-`O u0041_0328 -29120
-`O `A -29120
-`O 'A -29120
-`O ^A -29120
-`O ~A -29120
-`O :A -29120
-`O oA -29120
-`O AE -29120
-`O V -29120
-`O Y -29120
-`O :Y -29120
-`O 'Y -29120
-'O X -29120
-'O W -29120
-'O A -29120
-'O u0041_0306 -29120
-'O u0041_0328 -29120
-'O `A -29120
-'O 'A -29120
-'O ^A -29120
-'O ~A -29120
-'O :A -29120
-'O oA -29120
-'O AE -29120
-'O V -29120
-'O Y -29120
-'O :Y -29120
-'O 'Y -29120
-^O X -29120
-^O W -29120
-^O A -29120
-^O u0041_0306 -29120
-^O u0041_0328 -29120
-^O `A -29120
-^O 'A -29120
-^O ^A -29120
-^O ~A -29120
-^O :A -29120
-^O oA -29120
-^O AE -29120
-^O V -29120
-^O Y -29120
-^O :Y -29120
-^O 'Y -29120
-~O X -29120
-~O W -29120
-~O A -29120
-~O u0041_0306 -29120
-~O u0041_0328 -29120
-~O `A -29120
-~O 'A -29120
-~O ^A -29120
-~O ~A -29120
-~O :A -29120
-~O oA -29120
-~O AE -29120
-~O V -29120
-~O Y -29120
-~O :Y -29120
-~O 'Y -29120
-:O X -29120
-:O W -29120
-:O A -29120
-:O u0041_0306 -29120
-:O u0041_0328 -29120
-:O `A -29120
-:O 'A -29120
-:O ^A -29120
-:O ~A -29120
-:O :A -29120
-:O oA -29120
-:O AE -29120
-:O V -29120
-:O Y -29120
-:O :Y -29120
-:O 'Y -29120
-/O X -29120
-/O W -29120
-/O A -29120
-/O u0041_0306 -29120
-/O u0041_0328 -29120
-/O `A -29120
-/O 'A -29120
-/O ^A -29120
-/O ~A -29120
-/O :A -29120
-/O oA -29120
-/O AE -29120
-/O V -29120
-/O Y -29120
-/O :Y -29120
-/O 'Y -29120
-'Y e -87360
-'Y o -87360
-'Y r -87360
-'Y a -87360
-'Y u -87360
-'Y n -87360
-'Y .i -87360
-'Y c -87360
-'Y d -87360
-'Y g -87360
-'Y p -87360
-'Y s -87360
-'Y v -87360
-'Y w -87360
-'Y x -87360
-'Y z -87360
-'Y A -87360
-'Y u0041_0306 -87360
-'Y u0041_0328 -87360
-'Y `A -87360
-'Y 'A -87360
-'Y ^A -87360
-'Y ~A -87360
-'Y :A -87360
-'Y oA -87360
-'Y AE -87360
-`a r -29120
-`a y -29120
-`a :y -29120
-`a 'y -29120
-`a w -29120
-'a r -29120
-'a y -29120
-'a :y -29120
-'a 'y -29120
-'a w -29120
-^a r -29120
-^a y -29120
-^a :y -29120
-^a 'y -29120
-^a w -29120
-~a r -29120
-~a y -29120
-~a :y -29120
-~a 'y -29120
-~a w -29120
-:a r -29120
-:a y -29120
-:a :y -29120
-:a 'y -29120
-:a w -29120
-oa r -29120
-oa y -29120
-oa :y -29120
-oa 'y -29120
-oa w -29120
-`o e 29120
-`o u0065_030C 29120
-`o u0065_0328 29120
-`o `e 29120
-`o 'e 29120
-`o ^e 29120
-`o :e 29120
-`o o 29120
-`o u006F_030B 29120
-`o `o 29120
-`o 'o 29120
-`o ^o 29120
-`o ~o 29120
-`o :o 29120
-`o oe 29120
-`o /o 29120
-`o x -29120
-`o d 29120
-`o c 29120
-`o 'c 29120
-`o u0063_030C 29120
-`o ,c 29120
-`o q 29120
-`o r -29120
-`o y -29120
-`o :y -29120
-`o 'y -29120
-`o w -29120
-'o e 29120
-'o u0065_030C 29120
-'o u0065_0328 29120
-'o `e 29120
-'o 'e 29120
-'o ^e 29120
-'o :e 29120
-'o o 29120
-'o u006F_030B 29120
-'o `o 29120
-'o 'o 29120
-'o ^o 29120
-'o ~o 29120
-'o :o 29120
-'o oe 29120
-'o /o 29120
-'o x -29120
-'o d 29120
-'o c 29120
-'o 'c 29120
-'o u0063_030C 29120
-'o ,c 29120
-'o q 29120
-'o r -29120
-'o y -29120
-'o :y -29120
-'o 'y -29120
-'o w -29120
-^o e 29120
-^o u0065_030C 29120
-^o u0065_0328 29120
-^o `e 29120
-^o 'e 29120
-^o ^e 29120
-^o :e 29120
-^o o 29120
-^o u006F_030B 29120
-^o `o 29120
-^o 'o 29120
-^o ^o 29120
-^o ~o 29120
-^o :o 29120
-^o oe 29120
-^o /o 29120
-^o x -29120
-^o d 29120
-^o c 29120
-^o 'c 29120
-^o u0063_030C 29120
-^o ,c 29120
-^o q 29120
-^o r -29120
-^o y -29120
-^o :y -29120
-^o 'y -29120
-^o w -29120
-~o e 29120
-~o u0065_030C 29120
-~o u0065_0328 29120
-~o `e 29120
-~o 'e 29120
-~o ^e 29120
-~o :e 29120
-~o o 29120
-~o u006F_030B 29120
-~o `o 29120
-~o 'o 29120
-~o ^o 29120
-~o ~o 29120
-~o :o 29120
-~o oe 29120
-~o /o 29120
-~o x -29120
-~o d 29120
-~o c 29120
-~o 'c 29120
-~o u0063_030C 29120
-~o ,c 29120
-~o q 29120
-~o r -29120
-~o y -29120
-~o :y -29120
-~o 'y -29120
-~o w -29120
-:o e 29120
-:o u0065_030C 29120
-:o u0065_0328 29120
-:o `e 29120
-:o 'e 29120
-:o ^e 29120
-:o :e 29120
-:o o 29120
-:o u006F_030B 29120
-:o `o 29120
-:o 'o 29120
-:o ^o 29120
-:o ~o 29120
-:o :o 29120
-:o oe 29120
-:o /o 29120
-:o x -29120
-:o d 29120
-:o c 29120
-:o 'c 29120
-:o u0063_030C 29120
-:o ,c 29120
-:o q 29120
-:o r -29120
-:o y -29120
-:o :y -29120
-:o 'y -29120
-:o w -29120
-/o e 29120
-/o u0065_030C 29120
-/o u0065_0328 29120
-/o `e 29120
-/o 'e 29120
-/o ^e 29120
-/o :e 29120
-/o o 29120
-/o u006F_030B 29120
-/o `o 29120
-/o 'o 29120
-/o ^o 29120
-/o ~o 29120
-/o :o 29120
-/o oe 29120
-/o /o 29120
-/o x -29120
-/o d 29120
-/o c 29120
-/o 'c 29120
-/o u0063_030C 29120
-/o ,c 29120
-/o q 29120
-/o r -29120
-/o y -29120
-/o :y -29120
-/o 'y -29120
-/o w -29120
-`u w -29120
-'u w -29120
-^u w -29120
-:u w -29120
-'y o -29120
-'y u006F_030B -29120
-'y `o -29120
-'y 'o -29120
-'y ^o -29120
-'y ~o -29120
-'y :o -29120
-'y oe -29120
-'y /o -29120
-'y e -29120
-'y u0065_030C -29120
-'y u0065_0328 -29120
-'y `e -29120
-'y 'e -29120
-'y ^e -29120
-'y :e -29120
-'y a -29120
-'y u0061_0306 -29120
-'y u0061_0328 -29120
-'y `a -29120
-'y 'a -29120
-'y ^a -29120
-'y ^a -29120
-'y ~a -29120
-'y :a -29120
-'y oa -29120
-'y ae -29120
-'y . -87360
-'y , -87360
-charset
-ga 524160,669760 2 0000
-aa 524160,669760,0,84120 2 0001
-a^ 524160,669760 2 0002
-a~ 524160,669760,0,84120 2 0003
-ad 524160,689730,0,62688 2 0004
-a" 524160,669760,0,84120 2 0005
-ao 756650,669760 2 0006
-ah 524160,669760 2 0007
-ab 524160,669760,0,87032 2 0010
-a- 524160,689730,0,103456 2 0011
-a. 291200,710738,0,81526 2 0012
-ac 465920,0,178360 1 0013
-ho 291200,0,203840 1 0014
-bq 291200,87360,131040 1 0015
-fo 465920,463008,0,39555 0 0016
-fc 465920,463008,0,39555 0 0017
-lq 349440,757120,0,155106 2 0020
-rq 349440,757120,0,9506 2 0021
-Bq 349440,87360,131040,9506 1 0022
-Fo 698880,463008,0,22390 0 0023
-Fc 698880,463008 0 0024
-en 524160,463008,0,90325 0 0025
-em 1048320,463008,0,90325 0 0026
---- 0,463008 0 0027
---- 465920,782600,29120,35251 3 0030
-.i 250432,463008,0,43706 0 0031
-.j 279552,463008,203840,43706 1 0032
-ff 611520,757120,0,233730 2 0033
-fi 562016,757120,0,108514 2 0034
-fl 562016,757120,0,105602 2 0035
-Fi 853216,757120,0,108514 2 0036
-Fl 853216,757120,0,105602 2 0037
-u2423 524160,463008,101920,34338 1 0040
-u01C3 334880,757120,0,66290 2 0041
-! "
-dq 524160,757120,0,56098 2 0042
-" "
-sh 873600,757120,232960,53326 3 0043
-# "
-Do 524160,782600,29120,116955 3 0044
-$ "
-% 873600,782600,29120,35251 3 0045
-& 794976,757120,0,32051 2 0046
-cq 291200,757120,0,88130 2 0047
-' "
-( 407680,782600,262080,137998 3 0050
-) 407680,782600,262080,26586 3 0051
-* 524160,782600,0,123438 2 0052
-+ 815360,611520,87360,26586 3 0053
-, 291200,87360,131040 1 0054
-- 349440,463008,0,20397 0 0055
-. 291200,87360 0 0056
-sl 524160,782600,262080,137998 3 0057
-/ "
-0 524160,689730,0,116955 2 0060
-1 524160,689730,0,116955 2 0061
-2 524160,689730,0,116955 2 0062
-3 524160,689730,0,116955 2 0063
-4 524160,689730,0,116955 2 0064
-5 524160,689730,0,116955 2 0065
-6 524160,689730,0,116955 2 0066
-7 524160,689730,0,116955 2 0067
-8 524160,689730,0,116955 2 0070
-9 524160,689730,0,116955 2 0071
-: 291200,463008,0,26234 0 0072
-; 291200,463008,131040,26234 1 0073
-< 815360,571045,50091,63819 3 0074
-= 815360,387883,-136277,53326 0 0075
-> 815360,571045,50091 3 0076
-? 495040,757120,0,128744 2 0077
-at 698880,757120,0,83530 2 0100
-@ "
-A 698880,728000 2 0101
-B 698880,728000,0,86934,0,43467 2 0102
-C 669760,728000,0,125619,-75542,62810 2 0103
-D 757120,728000,0,79198,0,50078 2 0104
-E 626080,728000,0,125619,0,62810 2 0105
-F 596960,728000,0,140179,0,-5421 2 0106
-G 698880,728000,0,125619,-75542,62810 2 0107
-H 742560,728000,0,84851,0,42426 2 0110
-I 291200,728000,0,140179,0,70090 2 0111
-J 495040,728000,0,84851,0,13306 2 0112
-K 728000,728000,0,125619,0,62810 2 0113
-L 567840,728000,0,0,0,58240 2 0114
-M 917280,728000,0,84851,0,13306 2 0115
-N 742560,728000,0,84851,0,13306 2 0116
-O 771680,728000,0,79198,-75542,50078 2 0117
-P 669760,728000,0,86934,0,-58666 2 0120
-Q 771680,728000,131040,79198,-75542,79198 3 0121
-R 677040,728000,0,86934,0,65202 2 0122
-S 582400,728000,0,96499,0,48250 2 0123
-T 713440,728000,0,140179,-116054,-5421 2 0124
-U 720720,728000,0,84851,-75542,13306 2 0125
-V 698880,728000,0,169299,-111059,-63661 2 0126
-W 990080,728000,0,169299,-111059,23699 2 0127
-X 698880,728000,0,140179,0,70090 2 0130
-Y 698880,728000,0,180947,-125619,-52013 2 0131
-Z 640640,728000,0,125619,0,62810 2 0132
-lB 302848,782600,262080,167118 3 0133
-[ "
-rs 524160,782600,262080 3 0134
-\ "
-rB 302848,782600,262080,91406 3 0135
-] "
-ha 640640,757120,0,87882 2 0136
-^ "
-_ 815360,0,259754 1 0137
-oq 291200,757120,0,88130 2 0140
-` "
-a 503776,463008,0,10282 0 0141
-b 541632,757120,0,32051 2 0142
-c 465920,463008,0,87386 0 0143
-d 541632,757120,0,105602 2 0144
-e 465920,463008,0,71054 0 0145
-f 320320,757120,0,233730 2 0146
-g 524160,463008,203840,113594 1 0147
-h 541632,757120,0,18638 2 0150
-i 250432,710738,0,101877 2 0151
-j 279552,710738,203840,96086 3 0152
-k 512512,757120,0,87386 2 0153
-l 250432,757120,0,105602 2 0154
-m 832832,463008,0,18638 0 0155
-n 541632,463008,0,18638 0 0156
-o 524160,463008,0,69323 0 0157
-p 541632,463008,203840,40781 1 0160
-q 541632,463008,203840,43706 1 0161
-r 358176,463008,0,113594 0 0162
-s 401856,463008,0,81526 0 0163
-t 378560,599043,0,75738 2 0164
-u 541632,463008,0,43706 0 0165
-v 483392,463008,0,113594 0 0166
-w 716352,463008,0,113594 0 0167
-x 483392,463008,0,96086 0 0170
-y 483392,463008,203840,113594 1 0171
-z 455728,463008,0,91754 0 0172
-lC 524160,782600,262080,140910 3 0173
-{ "
-u01C0 291200,782600,262080,71610 3 0174
-ba "
-| "
-rC 524160,782600,262080,29498 3 0175
-} "
-~ 640640,710738,0,92522 2 0176
-hy 174720,463008,0,20397 0 0177
-u0041_0306 698880,931840 2 0200
-u0041_0328 698880,728000,203840 3 0201
-'C 669760,892202,0,125619 2 0202
-u0043_030C 669760,931840,0,125619,-75542,62810 2 0203
-u0044_030C 757120,931840,0,79198,0,50078 2 0204
-u0045_030C 626080,931840,0,125619,0,62810 2 0205
-u0045_0328 626080,728000,203840,125619 3 0206
-u0047_0306 698880,931840,0,125619,-75542,62810 2 0207
-u004C_0301 567840,892202,0,0,0,58240 2 0210
-u004C_030C 567840,931840,0,0,0,58240 2 0211
-/L 655200,728000 2 0212
-u004E_0301 742560,892202,0,84851 2 0213
-u004E_030C 742560,931840,0,84851,0,13306 2 0214
-u014A 786240,728000,0,154739,0,48250 2 0215
-u004F_030B 771680,892202,0,79198,-75542,50078 2 0216
-u0052_0301 677040,892202,0,86934,0,65202 2 0217
-u0052_030C 677040,931840,0,86934,0,65202 2 0220
-u0053_0301 582400,892202,0,96499 2 0221
-vS 582400,931840,0,96499,0,48250 2 0222
-u0053_0327 582400,728000,178360,96499,0,48250 3 0223
-u0054_030C 713440,931840,0,140179,-116054,-5421 2 0224
-u0054_0327 713440,728000,178360,140179,-116054,-5421 3 0225
-u0055_030B 720720,892202,0,84851,-75542,13306 2 0226
-u0055_030A 720720,931840,0,84851,-75542,13306 2 0227
-:Y 698880,931840,0,180947,-125619,-52013 2 0230
-u005A_0301 640640,892202,0,125619 2 0231
-vZ 640640,931840,0,125619,0,62810 2 0232
-u005A_0307 640640,892202,0,125619 2 0233
-IJ 757120,728000,0,84851,0,13306 2 0234
-u0049_0307 291200,892202,0,140179,0,70090 2 0235
-u0111 541632,757120,0,105602 2 0236
-sc 465920,757120,203840 3 0237
-u0061_0306 503776,669760,0,10282 2 0240
-u0061_0328 503776,463008,203840,10282 1 0241
-'c 465920,669760,0,87386 2 0242
-u0063_030C 465920,669760,0,87386 2 0243
-u0064_030C 663936,757120,0,105602 2 0244
-u0065_030C 465920,669760,0,71054 2 0245
-u0065_0328 465920,463008,203840,71054 1 0246
-u0067_0306 524160,669760,203840,113594 3 0247
-u006C_0301 250432,892202,0,105602 2 0250
-u006C_030C 372736,757120,0,105602 2 0251
-/l 340122,757120,0,105602 2 0252
-u006E_0301 541632,669760,0,18638 2 0253
-u006E_030C 541632,669760,0,18638 2 0254
-u016A 541632,463008,203840,18638 1 0255
-u006F_030B 524160,669760,0,69323 2 0256
-u0072_0301 358176,669760,0,113594 2 0257
-u0072_030C 358176,669760,0,113594 2 0260
-u0073_0301 401856,669760,0,81526 2 0261
-vs 401856,669760,0,81526 2 0262
-u0073_0327 401856,463008,178360,81526 1 0263
-u0074_030C 378560,757120,0,137634 2 0264
-u0074_0327 378560,599043,178360,75738 3 0265
-u0075_030B 541632,669760,0,43706 2 0266
-u0075_030A 541632,669760,0,43706 2 0267
-:y 483392,689730,203840,113594 3 0270
-u007A_0301 455728,669760,0,91754 2 0271
-vz 455728,669760,0,91754 2 0272
-u007A_0307 455728,710738,0,91754 2 0273
-ij 570752,710738,203840,101877 3 0274
-r! 334880,553280,203840,22962 3 0275
-r? 495040,553280,203840 3 0276
-Po 790458,757120 2 0277
-`A 698880,892202 2 0300
-'A 698880,892202,0,20814 2 0301
-^A 698880,931840 2 0302
-~A 698880,931840 2 0303
-:A 698880,931840 2 0304
-oA 698880,892202 2 0305
-AE 902720,728000,0,125619 2 0306
-,C 669760,728000,178360,125619,-75542,62810 3 0307
-`E 626080,892202,0,125619,0,62810 2 0310
-'E 626080,892202,0,125619,0,62810 2 0311
-^E 626080,931840,0,125619,0,62810 2 0312
-:E 626080,931840,0,125619 2 0313
-`I 291200,892202,0,140179,0,70090 2 0314
-'I 291200,892202,0,140179,0,70090 2 0315
-^I 291200,931840,0,140179,0,70090 2 0316
-:I 291200,931840,0,140179,0,70090 2 0317
-u0189 757120,728000,0,79198,0,50078 2 0320
-u0110 "
--D "
-~N 742560,931840,0,84851,0,13306 2 0321
-`O 771680,892202,0,79198,-75542,50078 2 0322
-'O 771680,892202,0,79198 2 0323
-^O 771680,931840,0,79198,-75542,50078 2 0324
-~O 771680,931840,0,79198,-75542,50078 2 0325
-:O 771680,931840,0,79198,-75542,50078 2 0326
-OE 1019200,728000,0,125619 2 0327
-/O 815360,782600,50960,79198 3 0330
-`U 720720,892202,0,84851,-75542,13306 2 0331
-'U 720720,892202,0,84851 2 0332
-^U 720720,931840,0,84851,-75542,13306 2 0333
-:U 720720,931840,0,84851,-75542,13306 2 0334
-'Y 698880,892202,0,180947,-125619,-52013 2 0335
-TP 611520,728000,0,86934,0,43467 2 0336
---- 1164800,728000,0,96499,0,48250 2 0337
-`a 503776,669760,0,10282 2 0340
-'a 503776,669760,0,10282 2 0341
-^a 503776,669760,0,10282 2 0342
-~a 503776,669760,0,10282 2 0343
-:a 503776,689730,0,10282 2 0344
-oa 503776,669760,0,10282 2 0345
-ae 757120,463008,0,71054 0 0346
-,c 465920,463008,178360,87386 1 0347
-`e 465920,669760,0,71054 2 0350
-'e 465920,669760,0,71054 2 0351
-^e 465920,669760,0,71054 2 0352
-:e 465920,689730,0,71054 2 0353
-`i 250432,669760,0,87032 2 0354
-'i 250432,669760,0,87032 2 0355
-^i 250432,669760,0,87032 2 0356
-:i 308672,689730,0,87032 2 0357
-Sd 524160,757120,0,99034 2 0360
-~n 541632,669760,0,18638 2 0361
-`o 524160,669760,0,69323 2 0362
-'o 524160,669760,0,69323 2 0363
-^o 524160,669760,0,69323 2 0364
-~o 524160,669760,0,69323 2 0365
-:o 524160,689730,0,69323 2 0366
-oe 815360,463008,0,71054 0 0367
-/o 524160,571045,101920,50810 3 0370
-`u 541632,669760,0,43706 2 0371
-'u 541632,669760,0,43706 2 0372
-^u 541632,669760,0,43706 2 0373
-:u 541632,689730,0,43706 2 0374
-'y 483392,669760,203840,113594 3 0375
-Tp 541632,757120,203840,40781 3 0376
-ss 503776,757120,0,102690 2 0377
diff --git a/contrib/groff/font/devdvi/HITC b/contrib/groff/font/devdvi/HITC
deleted file mode 100644
index 46d62df75a16..000000000000
--- a/contrib/groff/font/devdvi/HITC
+++ /dev/null
@@ -1,138 +0,0 @@
-name HITC
-special
-internalname tcsi1000
-spacewidth 349440
-slant 11.999911
-checksum -627212161
-designsize 10485760
-charset
---- 524160,631051 2 0000
---- 524160,631051,0,75893 2 0001
---- 524160,662478,0,75502 2 0002
---- 524160,662478,0,84120 2 0003
---- 524160,662478 2 0004
---- 524160,631051,0,75893 2 0005
---- 720720,662478 2 0006
---- 524160,662478 2 0007
---- 524160,662478,0,87032 2 0010
---- 524160,662478,0,98680 2 0011
---- 291200,631051 2 0012
---- 465920,0,178360 1 0013
---- 291200,0,203840 1 0014
---- 407680,87360,203840 1 0015
---- 524160,87360,203840 1 0022
---- 698880,465920,0,90325 0 0025
---- 786240,465920,0,90325 0 0026
---- 0,728000 2 0027
-<- 1048320,387883,-136277 0 0030
--> 1048320,387883,-136277 0 0031
---- 250432,757120,0,429390 2 0032
---- 308672,1019200,0,483269 2 0033
---- 483392,757120,0,429390 2 0034
---- 483392,757120,0,483269 2 0035
---- 0,757120 2 0037
-u2422 541632,757120,0,32045 2 0040
-Do 524160,786240,29120,116955 3 0044
-$ "
-aq 291200,757120,0,85218 2 0047
---- 524160,495040,-29120 2 0052
-, 291200,87360,131040 1 0054
---- 349440,387883,-136277,53326 0 0055
-. 291200,87360 0 0056
-f/ 524160,786240,262080,137998 3 0057
-0 524160,465920,0,54763 0 0060
-1 524160,465920 0 0061
-2 524160,465920,0,55931 0 0062
-3 524160,465920,203840,55931 1 0063
-4 524160,465920,203840 1 0064
-5 524160,465920,203840,40794 1 0065
-6 524160,687232,0,87835 2 0066
-7 524160,465920,203840,99034 1 0067
-8 524160,687232,0,87835 2 0070
-9 524160,465920,203840,40794 1 0071
-la 407680,786240,262080 3 0074
-\- 815360,605282,87360,26586 3 0075
-ra 407680,786240,262080 3 0076
-u2127 757120,728000,0,134355,0,67178 2 0115
-ci 1164800,786240,262080 3 0117
-u03A9 757120,728000,0,86934,0,43467 2 0127
-u301A 422240,786240,262080 3 0133
-u301B 422240,786240,262080 3 0135
-ua 524160,757120,232960,64066 3 0136
-da 524160,757120,232960 3 0137
---- 524160,757120 2 0140
---- 524160,495040,-29120 2 0142
---- 524160,495040,-29120 2 0143
---- 524160,662478,29122 3 0144
---- 1048320,757120 2 0154
---- 524160,495040,-29120 2 0155
-u266A 640640,757120 2 0156
-ti 640640,133120 0 0176
-~ "
---- 174720,387883,-136277,53326 0 0177
---- 640640,757120,0,105602 2 0200
---- 640640,757120,0,108514 2 0201
---- 524160,757120,0,102690 2 0202
---- 524160,757120 2 0203
-dg 465920,757120,203840 3 0204
-dd 465920,757120,203840 3 0205
-u2016 524160,786240,262080 3 0206
-%0 1223040,786240,29120,35251 3 0207
-bu 524160,465920,-58240 0 0210
-u2103 902720,728000,0,125619,-75542,62810 2 0211
---- 640640,786240,29120,116955 3 0212
---- 524160,560560,101920,87386 3 0213
-Fn 320320,757120,0,233730 2 0214
-u20A1 669760,786240,29120,125619,-75542,62810 3 0215
-u20A9 990080,728000,0,169299,-111059,23699 2 0216
-u20A6 771680,728000,0,84851,0,13306 2 0217
---- 815360,786240,29120,125619,-75542,62810 3 0220
-u20B1 684320,728000,0,86934,0,-58666 2 0221
-u20A4 790458,757120 2 0222
-u211E 677040,728000,0,86934,0,65202 2 0223
-u203D 495040,757120,0,128744 2 0224
---- 495040,560560,203840 3 0225
-u20AB 541632,786240,0,105602 2 0226
-tm 698880,786240,0,550366 2 0227
-u2031 1612550,786240,29120,35251 3 0230
---- 495040,757120,203840 3 0231
-u0E3F 698880,786240,29120,86934,0,43467 3 0232
-u2116 859040,728000,0,84851,0,13306 2 0233
-u2052 524160,786240,0,137998 2 0234
-u212E 701792,728000,0,114690 2 0235
-u25E6 524160,465920,-58240 0 0236
-u2120 698880,786240,0,550366 2 0237
-u2045 378560,786240,262080,29498 3 0240
-u2046 378560,786240,262080,140910 3 0241
-ct 524160,560560,101920,87386 3 0242
-Po 790458,757120 2 0243
-Cs 793402,605282,0,99034 2 0244
-Ye 698880,728000,0,180947 2 0245
-bb 174720,786240,262080,108878 3 0246
-sc 465920,757120,203840 3 0247
---- 524160,712194,0,66933 2 0250
-co 1164800,786240,262080 3 0251
-Of 465920,786240,0,116982 2 0252
---- 1164800,786240,262080 3 0253
-tno 698880,465920,0,69914 0 0254
-u2117 1164800,786240,262080 3 0255
-rg 1164800,786240,262080 3 0256
---- 815360,757120 2 0257
-de 349440,728000 2 0260
-t+- 815360,605282,87360,26586 3 0261
-S2 465920,786240,0,137998 2 0262
-S3 465920,786240,0,137998 2 0263
---- 524160,757120,0,102690 2 0264
-mc 541632,465920,203840,43706 1 0265
-ps 640640,757120,203840 3 0266
-pc 247520,465920 0 0267
-u203B 679466,560560,0,20397 2 0270
-S1 465920,786240,0,137998 2 0271
-Om 465920,786240,0,116982 2 0272
---- 495040,786240,220138,167118 3 0273
---- 465920,786240,203840,137998 3 0274
---- 465920,786240,203840,137998 3 0275
---- 465920,786240,203840,137998 3 0276
-Eu 815360,728000,0,125619 2 0277
-tmu 815360,605282,87360,26586 3 0326
-tdi 815360,605282,87360,26586 3 0366
diff --git a/contrib/groff/font/devdvi/HR b/contrib/groff/font/devdvi/HR
deleted file mode 100644
index d9d660b55fe8..000000000000
--- a/contrib/groff/font/devdvi/HR
+++ /dev/null
@@ -1,297 +0,0 @@
-name HR
-internalname cmss10
-spacewidth 349526
-ligatures ff fi fl ffi ffl 0
-checksum 1831058770
-designsize 10485760
-kernpairs
-ff cq 72818
-ff ' 72818
-ff ? 72818
-ff ! 72818
-ff ) 72818
-ff rB 72818
-ff ] 72818
-slash@for@l l -250494
-slash@for@l L -270885
-cq ? 116509
-' ? 116509
-cq ! 116509
-' ! 116509
-A t -29128
-A C -29128
-A O -29128
-A G -29128
-A U -29128
-A Q -29128
-A T -87382
-A Y -87382
-A V -116509
-A W -116509
-D X -29128
-D W -29128
-D A -29128
-D V -29128
-D Y -29128
-F o -29128
-F e -29128
-F u -29128
-F r -29128
-F a -29128
-F A -87382
-F O -29128
-F C -29128
-F G -29128
-F Q -29128
-I I 29128
-K O -29128
-K C -29128
-K G -29128
-K Q -29128
-L T -87382
-L Y -87382
-L V -116509
-L W -116509
-O X -29128
-O W -29128
-O A -29128
-O V -29128
-O Y -29128
-P A -87382
-P o -29128
-P e -29128
-P a -29128
-P . -87382
-P , -87382
-T y -87382
-T e -87382
-T o -87382
-T r -87382
-T a -87382
-T A -87382
-T u -87382
-V o -29128
-V e -29128
-V u -29128
-V r -29128
-V a -29128
-V A -87382
-V O -29128
-V C -29128
-V G -29128
-V Q -29128
-W o -29128
-W e -29128
-W u -29128
-W r -29128
-W a -29128
-W A -87382
-W O -29128
-W C -29128
-W G -29128
-W Q -29128
-X O -29128
-X C -29128
-X G -29128
-X Q -29128
-Y e -87382
-Y o -87382
-Y r -87382
-Y a -87382
-Y A -87382
-Y u -87382
-a r -29128
-a y -29128
-a w -29128
-b e 29128
-b o 29128
-b x -29128
-b d 29128
-b c 29128
-b q 29128
-b r -29128
-b y -29128
-b w -29128
-f cq 72818
-f ' 72818
-f ? 72818
-f ! 72818
-f ) 72818
-f rB 72818
-f ] 72818
-g j 29128
-k e -29128
-k a -29128
-k o -29128
-k c -29128
-o e 29128
-o o 29128
-o x -29128
-o d 29128
-o c 29128
-o q 29128
-o r -29128
-o y -29128
-o w -29128
-p e 29128
-p o 29128
-p x -29128
-p d 29128
-p c 29128
-p q 29128
-p r -29128
-p y -29128
-p w -29128
-t y -29128
-t w -29128
-u w -29128
-w e -29128
-w a -29128
-w o -29128
-w c -29128
-y o -29128
-y e -29128
-y a -29128
-y . -87382
-y , -87382
-charset
-*G 567981,728178,0,0,0,-145637 2 0000
-*D 873816,728178 2 0001
-*H 815562,728178,0,0,-29128,-29128 2 0002
-*L 640800,728178 2 0003
-*C 699053,728178 2 0004
-*P 742746,728178 2 0005
-*S 757307,728178 2 0006
-*U 815562,728178,0,0,-29128,-145637 2 0007
-*F 757307,728178,0,0,-29128 2 0010
-*Q 815562,728178,0,0,-29128,-72818 2 0011
-*W 757307,728178 2 0012
-ff 611672,728178,0,72818 2 0013
-fi 562155,728178 2 0014
-fl 562155,728178 2 0015
-Fi 853427,728178 2 0016
-Fl 853427,728178 2 0017
-.i 250494,466034 0 0020
-.j 279622,466034,203890 1 0021
-ga 524290,728178 2 0022
-aa 524290,728178 2 0023
-ah 524290,662642 2 0024
-ab 524290,728178 2 0025
-a- 524290,638464 2 0026
-ao 699054,728178 2 0027
-ac 466035,0,178403 1 0030
-ss 503902,728178 2 0031
-ae 757307,466034 0 0032
-oe 815562,466034 0 0033
-/o 524290,567979,101946 3 0034
-AE 902944,728178 2 0035
-OE 1019453,728178 2 0036
-/O 815562,779150,50973 3 0037
-slash@for@l 250494,466034 0 0040
-! 334963,728178 2 0041
-rq 524290,728178 2 0042
-sh 873816,728178,203888 3 0043
-# "
-Do 524290,786432,58254 3 0044
-$ "
-% 873816,786432,58254 3 0045
-& 795173,728178 2 0046
-cq 291272,728178 2 0047
-' "
-( 407781,786432,262144 3 0050
-) 407781,786432,262144 3 0051
-* 524290,786432 2 0052
-+ 815562,611670,87382 3 0053
-, 291272,87381,131072 1 0054
-hy 349526,466034 0 0055
-- "
-. 291272,87381 0 0056
-sl 524290,786432,262144 3 0057
-/ "
-0 524290,687400 2 0060
-1 524290,687400 2 0061
-2 524290,687400 2 0062
-3 524290,687400 2 0063
-4 524290,687400 2 0064
-5 524290,687400 2 0065
-6 524290,687400 2 0066
-7 524290,687400 2 0067
-8 524290,687400 2 0070
-9 524290,687400 2 0071
-: 291272,466034 0 0072
-; 291272,466034,131072 1 0073
-r! 334963,524288,203890 3 0074
-= 815562,387973,-136315 0 0075
-r? 495163,524288,203890 3 0076
-? 495163,728178 2 0077
-at 699053,728178 2 0100
-@ "
-A 699054,728178 2 0101
-B 699054,728178 2 0102
-C 669926,728178,0,0,-29128 2 0103
-D 757309,728178,0,0,0,-29128 2 0104
-E 626235,728178 2 0105
-F 597109,728178,0,0,0,-145637 2 0106
-G 699053,728178,0,0,-29128 2 0107
-H 742746,728178 2 0110
-I 291274,728178 2 0111
-J 495163,728178,0,0,0,-29128 2 0112
-K 728182,728178 2 0113
-L 567981,728178,0,0,0,58254 2 0114
-M 917509,728178 2 0115
-N 742746,728178 2 0116
-O 771870,728178,0,0,-29128,-29128 2 0117
-P 669926,728178,0,0,0,-145637 2 0120
-Q 771870,728178,131072,0,-29128 3 0121
-R 677208,728178 2 0122
-S 582544,728178 2 0123
-T 713616,728178,0,0,0,-145637 2 0124
-U 720901,728178,0,0,29126 2 0125
-V 699054,728178,0,14563,43691,-218454 2 0126
-W 990326,728178,0,14563,43691,-131074 2 0127
-X 699054,728178 2 0130
-Y 699054,728178,0,26214,29128,-206803 2 0131
-Z 640798,728178 2 0132
-lB 302923,786432,262144 3 0133
-[ "
-lq 524290,728178 2 0134
-rB 302923,786432,262144 3 0135
-] "
-ha 524290,728178 2 0136
-^ "
-a^ "
-a. 291272,712366 2 0137
-oq 291272,728178 2 0140
-` "
-a 503901,466034 0 0141
-b 541766,728178 2 0142
-c 466035,466034 0 0143
-d 541766,728178 2 0144
-e 466035,466034 0 0145
-f 320400,728178,0,72818 2 0146
-g 524290,466034,203890,14563 1 0147
-h 541766,728178 2 0150
-i 250494,712366 2 0151
-j 279622,712366,203890 3 0152
-k 512640,728178 2 0153
-l 250494,728178 2 0154
-m 833038,466034 0 0155
-n 541766,466034 0 0156
-o 524290,466034 0 0157
-p 541766,466034,203890 1 0160
-q 541766,466034,203890 1 0161
-r 358266,466034,0,14563 0 0162
-s 401955,466034 0 0163
-t 378653,599189 2 0164
-u 541766,466034 0 0165
-v 483512,466034,0,14563 0 0166
-w 716530,466034,0,14563 0 0167
-x 483512,466034 0 0170
-y 483512,466034,203890,14563 1 0171
-z 455840,466034 0 0172
-en 524290,466034,0,29128 0 0173
-em 1048579,466034,0,29128 0 0174
-a" 524290,728178 2 0175
-~ 524290,709454 2 0176
-a~ "
-ad 524290,712366 2 0177
diff --git a/contrib/groff/font/devdvi/HREC b/contrib/groff/font/devdvi/HREC
deleted file mode 100644
index 735f2f1a50ec..000000000000
--- a/contrib/groff/font/devdvi/HREC
+++ /dev/null
@@ -1,2078 +0,0 @@
-name HREC
-internalname ecss1000
-spacewidth 349440
-ligatures ff fi fl ffi ffl 0
-checksum -1936902655
-designsize 10485760
-kernpairs
-bq Bq 116480
-bq j 116480
-bq .j 116480
-bq g 58240
-bq u0067_0306 58240
-bq y 58240
-bq :y 58240
-bq 'y 58240
-bq v -87360
-bq w -58240
-bq V -116480
-bq W -87360
-bq Y -87360
-bq :Y -87360
-bq 'Y -87360
-bq O -29120
-bq u004F_030B -29120
-bq `O -29120
-bq 'O -29120
-bq ^O -29120
-bq ~O -29120
-bq :O -29120
-bq OE -29120
-bq /O -29120
-bq C -29120
-bq G -29120
-bq 'C -29120
-bq u0043_030C -29120
-bq u0047_0306 -29120
-bq ,C -29120
-bq Q -29120
-lq oq 116480
-lq ` 116480
-lq lq 116480
-rq cq 116480
-rq ' 116480
-rq rq 116480
-Bq bq 116480
-Bq , 116480
-Bq Bq 116480
-Bq j 116480
-Bq .j 116480
-Bq g 58240
-Bq u0067_0306 58240
-Bq y 58240
-Bq :y 58240
-Bq 'y 58240
-Bq v -87360
-Bq w -58240
-Bq V -116480
-Bq W -87360
-Bq Y -87360
-Bq :Y -87360
-Bq 'Y -87360
-Bq O -29120
-Bq u004F_030B -29120
-Bq `O -29120
-Bq 'O -29120
-Bq ^O -29120
-Bq ~O -29120
-Bq :O -29120
-Bq OE -29120
-Bq /O -29120
-Bq C -29120
-Bq G -29120
-Bq 'C -29120
-Bq u0043_030C -29120
-Bq u0047_0306 -29120
-Bq ,C -29120
-Bq Q -29120
-Fc . -87360
-Fc , -87360
-ff cq 72800
-ff ' 72800
-ff oq 72800
-ff ` 72800
-ff lq 72800
-ff rq 72800
-ff ? 72800
-ff u01C3 72800
-ff ! 72800
-ff ) 72800
-ff rB 72800
-ff ] 72800
-cq rq 116480
-' rq 116480
-cq ? 116480
-' ? 116480
-cq u01C3 116480
-cq ! 116480
-' u01C3 116480
-' ! 116480
-A y -29120
-A :y -29120
-A 'y -29120
-A v -29120
-A w -29120
-A c -29120
-A 'c -29120
-A u0063_030C -29120
-A ,c -29120
-A d -29120
-A u0064_030C -29120
-A u0111 -29120
-A Sd -29120
-A e -29120
-A u0065_030C -29120
-A u0065_0328 -29120
-A `e -29120
-A 'e -29120
-A ^e -29120
-A :e -29120
-A o -29120
-A u006F_030B -29120
-A `o -29120
-A 'o -29120
-A ^o -29120
-A ~o -29120
-A :o -29120
-A oe -29120
-A /o -29120
-A q -29120
-A t -29120
-A u0074_030C -29120
-A u0074_0327 -29120
-A C -29120
-A G -29120
-A 'C -29120
-A u0043_030C -29120
-A u0047_0306 -29120
-A ,C -29120
-A Q -29120
-A O -29120
-A u004F_030B -29120
-A `O -29120
-A 'O -29120
-A ^O -29120
-A ~O -29120
-A :O -29120
-A OE -29120
-A /O -29120
-A U -29120
-A u0055_030B -29120
-A u0055_030A -29120
-A `U -29120
-A 'U -29120
-A ^U -29120
-A :U -29120
-A T -87360
-A u0054_030C -87360
-A u0054_0327 -87360
-A Y -87360
-A :Y -87360
-A 'Y -87360
-A V -116480
-A W -116480
-D X -29120
-D W -29120
-D A -29120
-D u0041_0306 -29120
-D u0041_0328 -29120
-D `A -29120
-D 'A -29120
-D ^A -29120
-D ~A -29120
-D :A -29120
-D oA -29120
-D AE -29120
-D V -29120
-D Y -29120
-D :Y -29120
-D 'Y -29120
-F o -29120
-F a -29120
-F e -29120
-F y -29120
-F u -29120
-F r -29120
-F v -29120
-F s -29120
-F c -29120
-F d -29120
-F g -29120
-F m -29120
-F n -29120
-F p -29120
-F w -29120
-F z -29120
-F ae -29120
-F /o -29120
-F A -87360
-F u0041_0306 -87360
-F u0041_0328 -87360
-F `A -87360
-F 'A -87360
-F ^A -87360
-F ~A -87360
-F :A -87360
-F oA -87360
-F AE -87360
-F O -29120
-F u004F_030B -29120
-F `O -29120
-F 'O -29120
-F ^O -29120
-F ~O -29120
-F :O -29120
-F OE -29120
-F /O -29120
-F C -29120
-F G -29120
-F 'C -29120
-F u0043_030C -29120
-F u0047_0306 -29120
-F ,C -29120
-F Q -29120
-I I 29120
-K v -29120
-K o -29120
-K u006F_030B -29120
-K `o -29120
-K 'o -29120
-K ^o -29120
-K ~o -29120
-K :o -29120
-K oe -29120
-K /o -29120
-K C -29120
-K G -29120
-K 'C -29120
-K u0043_030C -29120
-K u0047_0306 -29120
-K ,C -29120
-K Q -29120
-L T -87360
-L u0054_030C -87360
-L u0054_0327 -87360
-L Y -87360
-L :Y -87360
-L 'Y -87360
-L V -116480
-L W -116480
-O X -29120
-O W -29120
-O A -29120
-O u0041_0306 -29120
-O u0041_0328 -29120
-O `A -29120
-O 'A -29120
-O ^A -29120
-O ~A -29120
-O :A -29120
-O oA -29120
-O AE -29120
-O V -29120
-O Y -29120
-O :Y -29120
-O 'Y -29120
-P A -87360
-P u0041_0306 -87360
-P u0041_0328 -87360
-P `A -87360
-P 'A -87360
-P ^A -87360
-P ~A -87360
-P :A -87360
-P oA -87360
-P AE -87360
-P o -29120
-P u006F_030B -29120
-P `o -29120
-P 'o -29120
-P ^o -29120
-P ~o -29120
-P :o -29120
-P oe -29120
-P /o -29120
-P e -29120
-P u0065_030C -29120
-P u0065_0328 -29120
-P `e -29120
-P 'e -29120
-P ^e -29120
-P :e -29120
-P a -29120
-P u0061_0306 -29120
-P u0061_0328 -29120
-P `a -29120
-P 'a -29120
-P ^a -29120
-P ^a -29120
-P ~a -29120
-P :a -29120
-P oa -29120
-P ae -29120
-P . -87360
-P , -87360
-T y -87360
-T e -87360
-T o -87360
-T r -87360
-T a -87360
-T u -87360
-T n -87360
-T .i -87360
-T c -87360
-T d -87360
-T g -87360
-T p -87360
-T s -87360
-T v -87360
-T w -87360
-T x -87360
-T z -87360
-T A -87360
-T u0041_0306 -87360
-T u0041_0328 -87360
-T `A -87360
-T 'A -87360
-T ^A -87360
-T ~A -87360
-T :A -87360
-T oA -87360
-T AE -87360
-V o -29120
-V a -29120
-V e -29120
-V y -29120
-V u -29120
-V r -29120
-V v -29120
-V s -29120
-V c -29120
-V d -29120
-V g -29120
-V m -29120
-V n -29120
-V p -29120
-V w -29120
-V z -29120
-V ae -29120
-V /o -29120
-V A -87360
-V u0041_0306 -87360
-V u0041_0328 -87360
-V `A -87360
-V 'A -87360
-V ^A -87360
-V ~A -87360
-V :A -87360
-V oA -87360
-V AE -87360
-V O -29120
-V u004F_030B -29120
-V `O -29120
-V 'O -29120
-V ^O -29120
-V ~O -29120
-V :O -29120
-V OE -29120
-V /O -29120
-V C -29120
-V G -29120
-V 'C -29120
-V u0043_030C -29120
-V u0047_0306 -29120
-V ,C -29120
-V Q -29120
-W o -29120
-W a -29120
-W e -29120
-W y -29120
-W u -29120
-W r -29120
-W v -29120
-W s -29120
-W c -29120
-W d -29120
-W g -29120
-W m -29120
-W n -29120
-W p -29120
-W w -29120
-W z -29120
-W ae -29120
-W /o -29120
-W A -87360
-W u0041_0306 -87360
-W u0041_0328 -87360
-W `A -87360
-W 'A -87360
-W ^A -87360
-W ~A -87360
-W :A -87360
-W oA -87360
-W AE -87360
-W O -29120
-W u004F_030B -29120
-W `O -29120
-W 'O -29120
-W ^O -29120
-W ~O -29120
-W :O -29120
-W OE -29120
-W /O -29120
-W C -29120
-W G -29120
-W 'C -29120
-W u0043_030C -29120
-W u0047_0306 -29120
-W ,C -29120
-W Q -29120
-X O -29120
-X u004F_030B -29120
-X `O -29120
-X 'O -29120
-X ^O -29120
-X ~O -29120
-X :O -29120
-X OE -29120
-X /O -29120
-X C -29120
-X G -29120
-X 'C -29120
-X u0043_030C -29120
-X u0047_0306 -29120
-X ,C -29120
-X Q -29120
-Y e -87360
-Y o -87360
-Y r -87360
-Y a -87360
-Y u -87360
-Y n -87360
-Y .i -87360
-Y c -87360
-Y d -87360
-Y g -87360
-Y p -87360
-Y s -87360
-Y v -87360
-Y w -87360
-Y x -87360
-Y z -87360
-Y A -87360
-Y u0041_0306 -87360
-Y u0041_0328 -87360
-Y `A -87360
-Y 'A -87360
-Y ^A -87360
-Y ~A -87360
-Y :A -87360
-Y oA -87360
-Y AE -87360
-oq lq 116480
-` lq 116480
-oq ? 116480
-` ? 116480
-oq u01C3 116480
-oq ! 116480
-` u01C3 116480
-` ! 116480
-a r -29120
-a y -29120
-a :y -29120
-a 'y -29120
-a w -29120
-b e 29120
-b u0065_030C 29120
-b u0065_0328 29120
-b `e 29120
-b 'e 29120
-b ^e 29120
-b :e 29120
-b o 29120
-b u006F_030B 29120
-b `o 29120
-b 'o 29120
-b ^o 29120
-b ~o 29120
-b :o 29120
-b oe 29120
-b /o 29120
-b x -29120
-b d 29120
-b c 29120
-b 'c 29120
-b u0063_030C 29120
-b ,c 29120
-b q 29120
-b r -29120
-b y -29120
-b :y -29120
-b 'y -29120
-b w -29120
-e V -87360
-f cq 72800
-f ' 72800
-f oq 72800
-f ` 72800
-f lq 72800
-f rq 72800
-f ? 72800
-f u01C3 72800
-f ! 72800
-f ) 72800
-f rB 72800
-f ] 72800
-g j 29120
-k W -87360
-k V -87360
-k e -29120
-k u0065_030C -29120
-k u0065_0328 -29120
-k `e -29120
-k 'e -29120
-k ^e -29120
-k :e -29120
-k a -29120
-k u0061_0306 -29120
-k u0061_0328 -29120
-k `a -29120
-k 'a -29120
-k ^a -29120
-k ^a -29120
-k ~a -29120
-k :a -29120
-k oa -29120
-k ae -29120
-k o -29120
-k u006F_030B -29120
-k `o -29120
-k 'o -29120
-k ^o -29120
-k ~o -29120
-k :o -29120
-k oe -29120
-k /o -29120
-k c -29120
-k 'c -29120
-k u0063_030C -29120
-k ,c -29120
-o e 29120
-o u0065_030C 29120
-o u0065_0328 29120
-o `e 29120
-o 'e 29120
-o ^e 29120
-o :e 29120
-o o 29120
-o u006F_030B 29120
-o `o 29120
-o 'o 29120
-o ^o 29120
-o ~o 29120
-o :o 29120
-o oe 29120
-o /o 29120
-o x -29120
-o d 29120
-o c 29120
-o 'c 29120
-o u0063_030C 29120
-o ,c 29120
-o q 29120
-o r -29120
-o y -29120
-o :y -29120
-o 'y -29120
-o w -29120
-p e 29120
-p u0065_030C 29120
-p u0065_0328 29120
-p `e 29120
-p 'e 29120
-p ^e 29120
-p :e 29120
-p o 29120
-p u006F_030B 29120
-p `o 29120
-p 'o 29120
-p ^o 29120
-p ~o 29120
-p :o 29120
-p oe 29120
-p /o 29120
-p x -29120
-p d 29120
-p c 29120
-p 'c 29120
-p u0063_030C 29120
-p ,c 29120
-p q 29120
-p r -29120
-p y -29120
-p :y -29120
-p 'y -29120
-p w -29120
-t y -29120
-t :y -29120
-t 'y -29120
-t w -29120
-u w -29120
-w e -29120
-w u0065_030C -29120
-w u0065_0328 -29120
-w `e -29120
-w 'e -29120
-w ^e -29120
-w :e -29120
-w a -29120
-w u0061_0306 -29120
-w u0061_0328 -29120
-w `a -29120
-w 'a -29120
-w ^a -29120
-w ^a -29120
-w ~a -29120
-w :a -29120
-w oa -29120
-w ae -29120
-w o -29120
-w u006F_030B -29120
-w `o -29120
-w 'o -29120
-w ^o -29120
-w ~o -29120
-w :o -29120
-w oe -29120
-w /o -29120
-w c -29120
-w 'c -29120
-w u0063_030C -29120
-w ,c -29120
-y o -29120
-y u006F_030B -29120
-y `o -29120
-y 'o -29120
-y ^o -29120
-y ~o -29120
-y :o -29120
-y oe -29120
-y /o -29120
-y e -29120
-y u0065_030C -29120
-y u0065_0328 -29120
-y `e -29120
-y 'e -29120
-y ^e -29120
-y :e -29120
-y a -29120
-y u0061_0306 -29120
-y u0061_0328 -29120
-y `a -29120
-y 'a -29120
-y ^a -29120
-y ^a -29120
-y ~a -29120
-y :a -29120
-y oa -29120
-y ae -29120
-y . -87360
-y , -87360
-u0041_0306 y -29120
-u0041_0306 :y -29120
-u0041_0306 'y -29120
-u0041_0306 v -29120
-u0041_0306 w -29120
-u0041_0306 c -29120
-u0041_0306 'c -29120
-u0041_0306 u0063_030C -29120
-u0041_0306 ,c -29120
-u0041_0306 d -29120
-u0041_0306 u0064_030C -29120
-u0041_0306 u0111 -29120
-u0041_0306 Sd -29120
-u0041_0306 e -29120
-u0041_0306 u0065_030C -29120
-u0041_0306 u0065_0328 -29120
-u0041_0306 `e -29120
-u0041_0306 'e -29120
-u0041_0306 ^e -29120
-u0041_0306 :e -29120
-u0041_0306 o -29120
-u0041_0306 u006F_030B -29120
-u0041_0306 `o -29120
-u0041_0306 'o -29120
-u0041_0306 ^o -29120
-u0041_0306 ~o -29120
-u0041_0306 :o -29120
-u0041_0306 oe -29120
-u0041_0306 /o -29120
-u0041_0306 q -29120
-u0041_0306 t -29120
-u0041_0306 u0074_030C -29120
-u0041_0306 u0074_0327 -29120
-u0041_0306 C -29120
-u0041_0306 G -29120
-u0041_0306 'C -29120
-u0041_0306 u0043_030C -29120
-u0041_0306 u0047_0306 -29120
-u0041_0306 ,C -29120
-u0041_0306 Q -29120
-u0041_0306 O -29120
-u0041_0306 u004F_030B -29120
-u0041_0306 `O -29120
-u0041_0306 'O -29120
-u0041_0306 ^O -29120
-u0041_0306 ~O -29120
-u0041_0306 :O -29120
-u0041_0306 OE -29120
-u0041_0306 /O -29120
-u0041_0306 U -29120
-u0041_0306 u0055_030B -29120
-u0041_0306 u0055_030A -29120
-u0041_0306 `U -29120
-u0041_0306 'U -29120
-u0041_0306 ^U -29120
-u0041_0306 :U -29120
-u0041_0306 T -87360
-u0041_0306 u0054_030C -87360
-u0041_0306 u0054_0327 -87360
-u0041_0306 Y -87360
-u0041_0306 :Y -87360
-u0041_0306 'Y -87360
-u0041_0306 V -116480
-u0041_0306 W -116480
-'C v -29120
-'C w -29120
-'C c -29120
-'C 'c -29120
-'C u0063_030C -29120
-'C ,c -29120
-'C d -29120
-'C u0064_030C -29120
-'C u0111 -29120
-'C Sd -29120
-'C e -29120
-'C u0065_030C -29120
-'C u0065_0328 -29120
-'C `e -29120
-'C 'e -29120
-'C ^e -29120
-'C :e -29120
-'C o -29120
-'C u006F_030B -29120
-'C `o -29120
-'C 'o -29120
-'C ^o -29120
-'C ~o -29120
-'C :o -29120
-'C oe -29120
-'C /o -29120
-'C q -29120
-'C t -29120
-'C u0074_030C -29120
-'C u0074_0327 -29120
-'C C -29120
-'C G -29120
-'C 'C -29120
-'C u0043_030C -29120
-'C u0047_0306 -29120
-'C ,C -29120
-'C Q -29120
-'C O -29120
-'C u004F_030B -29120
-'C `O -29120
-'C 'O -29120
-'C ^O -29120
-'C ~O -29120
-'C :O -29120
-'C OE -29120
-'C /O -29120
-'C U -29120
-'C u0055_030B -29120
-'C u0055_030A -29120
-'C `U -29120
-'C 'U -29120
-'C ^U -29120
-'C :U -29120
-'C T -87360
-'C u0054_030C -87360
-'C u0054_0327 -87360
-'C Y -87360
-'C :Y -87360
-'C 'Y -87360
-'C V -116480
-'C W -116480
-u0044_030C X -29120
-u0044_030C W -29120
-u0044_030C A -29120
-u0044_030C u0041_0306 -29120
-u0044_030C u0041_0328 -29120
-u0044_030C `A -29120
-u0044_030C 'A -29120
-u0044_030C ^A -29120
-u0044_030C ~A -29120
-u0044_030C :A -29120
-u0044_030C oA -29120
-u0044_030C AE -29120
-u0044_030C V -29120
-u0044_030C Y -29120
-u0044_030C :Y -29120
-u0044_030C 'Y -29120
-u004C_0301 T -87360
-u004C_0301 u0054_030C -87360
-u004C_0301 u0054_0327 -87360
-u004C_0301 Y -87360
-u004C_0301 :Y -87360
-u004C_0301 'Y -87360
-u004C_0301 V -116480
-u004C_0301 W -116480
-u004C_030C T -87360
-u004C_030C u0054_030C -87360
-u004C_030C u0054_0327 -87360
-u004C_030C Y -87360
-u004C_030C :Y -87360
-u004C_030C 'Y -87360
-u004C_030C V -116480
-u004C_030C W -116480
-/L T -87360
-/L u0054_030C -87360
-/L u0054_0327 -87360
-/L Y -87360
-/L :Y -87360
-/L 'Y -87360
-/L V -116480
-/L W -116480
-u004F_030B X -29120
-u004F_030B W -29120
-u004F_030B A -29120
-u004F_030B u0041_0306 -29120
-u004F_030B u0041_0328 -29120
-u004F_030B `A -29120
-u004F_030B 'A -29120
-u004F_030B ^A -29120
-u004F_030B ~A -29120
-u004F_030B :A -29120
-u004F_030B oA -29120
-u004F_030B AE -29120
-u004F_030B V -29120
-u004F_030B Y -29120
-u004F_030B :Y -29120
-u004F_030B 'Y -29120
-u0054_030C y -87360
-u0054_030C e -87360
-u0054_030C o -87360
-u0054_030C r -87360
-u0054_030C a -87360
-u0054_030C u -87360
-u0054_030C n -87360
-u0054_030C .i -87360
-u0054_030C c -87360
-u0054_030C d -87360
-u0054_030C g -87360
-u0054_030C p -87360
-u0054_030C s -87360
-u0054_030C v -87360
-u0054_030C w -87360
-u0054_030C x -87360
-u0054_030C z -87360
-u0054_030C A -87360
-u0054_030C u0041_0306 -87360
-u0054_030C u0041_0328 -87360
-u0054_030C `A -87360
-u0054_030C 'A -87360
-u0054_030C ^A -87360
-u0054_030C ~A -87360
-u0054_030C :A -87360
-u0054_030C oA -87360
-u0054_030C AE -87360
-u0054_0327 y -87360
-u0054_0327 e -87360
-u0054_0327 o -87360
-u0054_0327 r -87360
-u0054_0327 a -87360
-u0054_0327 u -87360
-u0054_0327 n -87360
-u0054_0327 .i -87360
-u0054_0327 c -87360
-u0054_0327 d -87360
-u0054_0327 g -87360
-u0054_0327 p -87360
-u0054_0327 s -87360
-u0054_0327 v -87360
-u0054_0327 w -87360
-u0054_0327 x -87360
-u0054_0327 z -87360
-u0054_0327 A -87360
-u0054_0327 u0041_0306 -87360
-u0054_0327 u0041_0328 -87360
-u0054_0327 `A -87360
-u0054_0327 'A -87360
-u0054_0327 ^A -87360
-u0054_0327 ~A -87360
-u0054_0327 :A -87360
-u0054_0327 oA -87360
-u0054_0327 AE -87360
-:Y e -87360
-:Y o -87360
-:Y r -87360
-:Y a -87360
-:Y u -87360
-:Y n -87360
-:Y .i -87360
-:Y c -87360
-:Y d -87360
-:Y g -87360
-:Y p -87360
-:Y s -87360
-:Y v -87360
-:Y w -87360
-:Y x -87360
-:Y z -87360
-:Y A -87360
-:Y u0041_0306 -87360
-:Y u0041_0328 -87360
-:Y `A -87360
-:Y 'A -87360
-:Y ^A -87360
-:Y ~A -87360
-:Y :A -87360
-:Y oA -87360
-:Y AE -87360
-u0061_0306 r -29120
-u0061_0306 y -29120
-u0061_0306 :y -29120
-u0061_0306 'y -29120
-u0061_0306 w -29120
-u0061_0328 w -29120
-/l cq 29120
-/l ' 29120
-/l a -29120
-/l u0061_0328 -29120
-/l c -29120
-/l 'c -29120
-/l d -29120
-/l e -29120
-/l u0065_0328 -29120
-/l g -29120
-/l o -29120
-/l 'o -29120
-/l s -29120
-/l u0073_0301 -29120
-u006F_030B e 29120
-u006F_030B u0065_030C 29120
-u006F_030B u0065_0328 29120
-u006F_030B `e 29120
-u006F_030B 'e 29120
-u006F_030B ^e 29120
-u006F_030B :e 29120
-u006F_030B o 29120
-u006F_030B u006F_030B 29120
-u006F_030B `o 29120
-u006F_030B 'o 29120
-u006F_030B ^o 29120
-u006F_030B ~o 29120
-u006F_030B :o 29120
-u006F_030B oe 29120
-u006F_030B /o 29120
-u006F_030B x -29120
-u006F_030B d 29120
-u006F_030B c 29120
-u006F_030B 'c 29120
-u006F_030B u0063_030C 29120
-u006F_030B ,c 29120
-u006F_030B q 29120
-u006F_030B r -29120
-u006F_030B y -29120
-u006F_030B :y -29120
-u006F_030B 'y -29120
-u006F_030B w -29120
-u0074_030C y -29120
-u0074_030C :y -29120
-u0074_030C 'y -29120
-u0074_030C w -29120
-u0074_0327 y -29120
-u0074_0327 :y -29120
-u0074_0327 'y -29120
-u0074_0327 w -29120
-u0075_030B w -29120
-u0075_030A w -29120
-:y o -29120
-:y u006F_030B -29120
-:y `o -29120
-:y 'o -29120
-:y ^o -29120
-:y ~o -29120
-:y :o -29120
-:y oe -29120
-:y /o -29120
-:y e -29120
-:y u0065_030C -29120
-:y u0065_0328 -29120
-:y `e -29120
-:y 'e -29120
-:y ^e -29120
-:y :e -29120
-:y a -29120
-:y u0061_0306 -29120
-:y u0061_0328 -29120
-:y `a -29120
-:y 'a -29120
-:y ^a -29120
-:y ^a -29120
-:y ~a -29120
-:y :a -29120
-:y oa -29120
-:y ae -29120
-:y . -87360
-:y , -87360
-`A y -29120
-`A :y -29120
-`A 'y -29120
-`A v -29120
-`A w -29120
-`A c -29120
-`A 'c -29120
-`A u0063_030C -29120
-`A ,c -29120
-`A d -29120
-`A u0064_030C -29120
-`A u0111 -29120
-`A Sd -29120
-`A e -29120
-`A u0065_030C -29120
-`A u0065_0328 -29120
-`A `e -29120
-`A 'e -29120
-`A ^e -29120
-`A :e -29120
-`A o -29120
-`A u006F_030B -29120
-`A `o -29120
-`A 'o -29120
-`A ^o -29120
-`A ~o -29120
-`A :o -29120
-`A oe -29120
-`A /o -29120
-`A q -29120
-`A t -29120
-`A u0074_030C -29120
-`A u0074_0327 -29120
-`A C -29120
-`A G -29120
-`A 'C -29120
-`A u0043_030C -29120
-`A u0047_0306 -29120
-`A ,C -29120
-`A Q -29120
-`A O -29120
-`A u004F_030B -29120
-`A `O -29120
-`A 'O -29120
-`A ^O -29120
-`A ~O -29120
-`A :O -29120
-`A OE -29120
-`A /O -29120
-`A U -29120
-`A u0055_030B -29120
-`A u0055_030A -29120
-`A `U -29120
-`A 'U -29120
-`A ^U -29120
-`A :U -29120
-`A T -87360
-`A u0054_030C -87360
-`A u0054_0327 -87360
-`A Y -87360
-`A :Y -87360
-`A 'Y -87360
-`A V -116480
-`A W -116480
-'A y -29120
-'A :y -29120
-'A 'y -29120
-'A v -29120
-'A w -29120
-'A c -29120
-'A 'c -29120
-'A u0063_030C -29120
-'A ,c -29120
-'A d -29120
-'A u0064_030C -29120
-'A u0111 -29120
-'A Sd -29120
-'A e -29120
-'A u0065_030C -29120
-'A u0065_0328 -29120
-'A `e -29120
-'A 'e -29120
-'A ^e -29120
-'A :e -29120
-'A o -29120
-'A u006F_030B -29120
-'A `o -29120
-'A 'o -29120
-'A ^o -29120
-'A ~o -29120
-'A :o -29120
-'A oe -29120
-'A /o -29120
-'A q -29120
-'A t -29120
-'A u0074_030C -29120
-'A u0074_0327 -29120
-'A C -29120
-'A G -29120
-'A 'C -29120
-'A u0043_030C -29120
-'A u0047_0306 -29120
-'A ,C -29120
-'A Q -29120
-'A O -29120
-'A u004F_030B -29120
-'A `O -29120
-'A 'O -29120
-'A ^O -29120
-'A ~O -29120
-'A :O -29120
-'A OE -29120
-'A /O -29120
-'A U -29120
-'A u0055_030B -29120
-'A u0055_030A -29120
-'A `U -29120
-'A 'U -29120
-'A ^U -29120
-'A :U -29120
-'A T -87360
-'A u0054_030C -87360
-'A u0054_0327 -87360
-'A Y -87360
-'A :Y -87360
-'A 'Y -87360
-'A V -116480
-'A W -116480
-^A y -29120
-^A :y -29120
-^A 'y -29120
-^A v -29120
-^A w -29120
-^A c -29120
-^A 'c -29120
-^A u0063_030C -29120
-^A ,c -29120
-^A d -29120
-^A u0064_030C -29120
-^A u0111 -29120
-^A Sd -29120
-^A e -29120
-^A u0065_030C -29120
-^A u0065_0328 -29120
-^A `e -29120
-^A 'e -29120
-^A ^e -29120
-^A :e -29120
-^A o -29120
-^A u006F_030B -29120
-^A `o -29120
-^A 'o -29120
-^A ^o -29120
-^A ~o -29120
-^A :o -29120
-^A oe -29120
-^A /o -29120
-^A q -29120
-^A t -29120
-^A u0074_030C -29120
-^A u0074_0327 -29120
-^A C -29120
-^A G -29120
-^A 'C -29120
-^A u0043_030C -29120
-^A u0047_0306 -29120
-^A ,C -29120
-^A Q -29120
-^A O -29120
-^A u004F_030B -29120
-^A `O -29120
-^A 'O -29120
-^A ^O -29120
-^A ~O -29120
-^A :O -29120
-^A OE -29120
-^A /O -29120
-^A U -29120
-^A u0055_030B -29120
-^A u0055_030A -29120
-^A `U -29120
-^A 'U -29120
-^A ^U -29120
-^A :U -29120
-^A T -87360
-^A u0054_030C -87360
-^A u0054_0327 -87360
-^A Y -87360
-^A :Y -87360
-^A 'Y -87360
-^A V -116480
-^A W -116480
-~A y -29120
-~A :y -29120
-~A 'y -29120
-~A v -29120
-~A w -29120
-~A c -29120
-~A 'c -29120
-~A u0063_030C -29120
-~A ,c -29120
-~A d -29120
-~A u0064_030C -29120
-~A u0111 -29120
-~A Sd -29120
-~A e -29120
-~A u0065_030C -29120
-~A u0065_0328 -29120
-~A `e -29120
-~A 'e -29120
-~A ^e -29120
-~A :e -29120
-~A o -29120
-~A u006F_030B -29120
-~A `o -29120
-~A 'o -29120
-~A ^o -29120
-~A ~o -29120
-~A :o -29120
-~A oe -29120
-~A /o -29120
-~A q -29120
-~A t -29120
-~A u0074_030C -29120
-~A u0074_0327 -29120
-~A C -29120
-~A G -29120
-~A 'C -29120
-~A u0043_030C -29120
-~A u0047_0306 -29120
-~A ,C -29120
-~A Q -29120
-~A O -29120
-~A u004F_030B -29120
-~A `O -29120
-~A 'O -29120
-~A ^O -29120
-~A ~O -29120
-~A :O -29120
-~A OE -29120
-~A /O -29120
-~A U -29120
-~A u0055_030B -29120
-~A u0055_030A -29120
-~A `U -29120
-~A 'U -29120
-~A ^U -29120
-~A :U -29120
-~A T -87360
-~A u0054_030C -87360
-~A u0054_0327 -87360
-~A Y -87360
-~A :Y -87360
-~A 'Y -87360
-~A V -116480
-~A W -116480
-:A y -29120
-:A :y -29120
-:A 'y -29120
-:A v -29120
-:A w -29120
-:A c -29120
-:A 'c -29120
-:A u0063_030C -29120
-:A ,c -29120
-:A d -29120
-:A u0064_030C -29120
-:A u0111 -29120
-:A Sd -29120
-:A e -29120
-:A u0065_030C -29120
-:A u0065_0328 -29120
-:A `e -29120
-:A 'e -29120
-:A ^e -29120
-:A :e -29120
-:A o -29120
-:A u006F_030B -29120
-:A `o -29120
-:A 'o -29120
-:A ^o -29120
-:A ~o -29120
-:A :o -29120
-:A oe -29120
-:A /o -29120
-:A q -29120
-:A t -29120
-:A u0074_030C -29120
-:A u0074_0327 -29120
-:A C -29120
-:A G -29120
-:A 'C -29120
-:A u0043_030C -29120
-:A u0047_0306 -29120
-:A ,C -29120
-:A Q -29120
-:A O -29120
-:A u004F_030B -29120
-:A `O -29120
-:A 'O -29120
-:A ^O -29120
-:A ~O -29120
-:A :O -29120
-:A OE -29120
-:A /O -29120
-:A U -29120
-:A u0055_030B -29120
-:A u0055_030A -29120
-:A `U -29120
-:A 'U -29120
-:A ^U -29120
-:A :U -29120
-:A T -87360
-:A u0054_030C -87360
-:A u0054_0327 -87360
-:A Y -87360
-:A :Y -87360
-:A 'Y -87360
-:A V -116480
-:A W -116480
-oA y -29120
-oA :y -29120
-oA 'y -29120
-oA v -29120
-oA w -29120
-oA c -29120
-oA 'c -29120
-oA u0063_030C -29120
-oA ,c -29120
-oA d -29120
-oA u0064_030C -29120
-oA u0111 -29120
-oA Sd -29120
-oA e -29120
-oA u0065_030C -29120
-oA u0065_0328 -29120
-oA `e -29120
-oA 'e -29120
-oA ^e -29120
-oA :e -29120
-oA o -29120
-oA u006F_030B -29120
-oA `o -29120
-oA 'o -29120
-oA ^o -29120
-oA ~o -29120
-oA :o -29120
-oA oe -29120
-oA /o -29120
-oA q -29120
-oA t -29120
-oA u0074_030C -29120
-oA u0074_0327 -29120
-oA C -29120
-oA G -29120
-oA 'C -29120
-oA u0043_030C -29120
-oA u0047_0306 -29120
-oA ,C -29120
-oA Q -29120
-oA O -29120
-oA u004F_030B -29120
-oA `O -29120
-oA 'O -29120
-oA ^O -29120
-oA ~O -29120
-oA :O -29120
-oA OE -29120
-oA /O -29120
-oA U -29120
-oA u0055_030B -29120
-oA u0055_030A -29120
-oA `U -29120
-oA 'U -29120
-oA ^U -29120
-oA :U -29120
-oA T -87360
-oA u0054_030C -87360
-oA u0054_0327 -87360
-oA Y -87360
-oA :Y -87360
-oA 'Y -87360
-oA V -116480
-oA W -116480
-u0189 X -29120
-u0110 X -29120
--D X -29120
-u0189 W -29120
-u0110 W -29120
--D W -29120
-u0189 A -29120
-u0110 A -29120
--D A -29120
-u0189 u0041_0306 -29120
-u0110 u0041_0306 -29120
--D u0041_0306 -29120
-u0189 u0041_0328 -29120
-u0110 u0041_0328 -29120
--D u0041_0328 -29120
-u0189 `A -29120
-u0110 `A -29120
--D `A -29120
-u0189 'A -29120
-u0110 'A -29120
--D 'A -29120
-u0189 ^A -29120
-u0110 ^A -29120
--D ^A -29120
-u0189 ~A -29120
-u0110 ~A -29120
--D ~A -29120
-u0189 :A -29120
-u0110 :A -29120
--D :A -29120
-u0189 oA -29120
-u0110 oA -29120
--D oA -29120
-u0189 AE -29120
-u0110 AE -29120
--D AE -29120
-u0189 V -29120
-u0110 V -29120
--D V -29120
-u0189 Y -29120
-u0110 Y -29120
--D Y -29120
-u0189 :Y -29120
-u0110 :Y -29120
--D :Y -29120
-u0189 'Y -29120
-u0110 'Y -29120
--D 'Y -29120
-`O X -29120
-`O W -29120
-`O A -29120
-`O u0041_0306 -29120
-`O u0041_0328 -29120
-`O `A -29120
-`O 'A -29120
-`O ^A -29120
-`O ~A -29120
-`O :A -29120
-`O oA -29120
-`O AE -29120
-`O V -29120
-`O Y -29120
-`O :Y -29120
-`O 'Y -29120
-'O X -29120
-'O W -29120
-'O A -29120
-'O u0041_0306 -29120
-'O u0041_0328 -29120
-'O `A -29120
-'O 'A -29120
-'O ^A -29120
-'O ~A -29120
-'O :A -29120
-'O oA -29120
-'O AE -29120
-'O V -29120
-'O Y -29120
-'O :Y -29120
-'O 'Y -29120
-^O X -29120
-^O W -29120
-^O A -29120
-^O u0041_0306 -29120
-^O u0041_0328 -29120
-^O `A -29120
-^O 'A -29120
-^O ^A -29120
-^O ~A -29120
-^O :A -29120
-^O oA -29120
-^O AE -29120
-^O V -29120
-^O Y -29120
-^O :Y -29120
-^O 'Y -29120
-~O X -29120
-~O W -29120
-~O A -29120
-~O u0041_0306 -29120
-~O u0041_0328 -29120
-~O `A -29120
-~O 'A -29120
-~O ^A -29120
-~O ~A -29120
-~O :A -29120
-~O oA -29120
-~O AE -29120
-~O V -29120
-~O Y -29120
-~O :Y -29120
-~O 'Y -29120
-:O X -29120
-:O W -29120
-:O A -29120
-:O u0041_0306 -29120
-:O u0041_0328 -29120
-:O `A -29120
-:O 'A -29120
-:O ^A -29120
-:O ~A -29120
-:O :A -29120
-:O oA -29120
-:O AE -29120
-:O V -29120
-:O Y -29120
-:O :Y -29120
-:O 'Y -29120
-/O X -29120
-/O W -29120
-/O A -29120
-/O u0041_0306 -29120
-/O u0041_0328 -29120
-/O `A -29120
-/O 'A -29120
-/O ^A -29120
-/O ~A -29120
-/O :A -29120
-/O oA -29120
-/O AE -29120
-/O V -29120
-/O Y -29120
-/O :Y -29120
-/O 'Y -29120
-'Y e -87360
-'Y o -87360
-'Y r -87360
-'Y a -87360
-'Y u -87360
-'Y n -87360
-'Y .i -87360
-'Y c -87360
-'Y d -87360
-'Y g -87360
-'Y p -87360
-'Y s -87360
-'Y v -87360
-'Y w -87360
-'Y x -87360
-'Y z -87360
-'Y A -87360
-'Y u0041_0306 -87360
-'Y u0041_0328 -87360
-'Y `A -87360
-'Y 'A -87360
-'Y ^A -87360
-'Y ~A -87360
-'Y :A -87360
-'Y oA -87360
-'Y AE -87360
-`a r -29120
-`a y -29120
-`a :y -29120
-`a 'y -29120
-`a w -29120
-'a r -29120
-'a y -29120
-'a :y -29120
-'a 'y -29120
-'a w -29120
-^a r -29120
-^a y -29120
-^a :y -29120
-^a 'y -29120
-^a w -29120
-~a r -29120
-~a y -29120
-~a :y -29120
-~a 'y -29120
-~a w -29120
-:a r -29120
-:a y -29120
-:a :y -29120
-:a 'y -29120
-:a w -29120
-oa r -29120
-oa y -29120
-oa :y -29120
-oa 'y -29120
-oa w -29120
-`o e 29120
-`o u0065_030C 29120
-`o u0065_0328 29120
-`o `e 29120
-`o 'e 29120
-`o ^e 29120
-`o :e 29120
-`o o 29120
-`o u006F_030B 29120
-`o `o 29120
-`o 'o 29120
-`o ^o 29120
-`o ~o 29120
-`o :o 29120
-`o oe 29120
-`o /o 29120
-`o x -29120
-`o d 29120
-`o c 29120
-`o 'c 29120
-`o u0063_030C 29120
-`o ,c 29120
-`o q 29120
-`o r -29120
-`o y -29120
-`o :y -29120
-`o 'y -29120
-`o w -29120
-'o e 29120
-'o u0065_030C 29120
-'o u0065_0328 29120
-'o `e 29120
-'o 'e 29120
-'o ^e 29120
-'o :e 29120
-'o o 29120
-'o u006F_030B 29120
-'o `o 29120
-'o 'o 29120
-'o ^o 29120
-'o ~o 29120
-'o :o 29120
-'o oe 29120
-'o /o 29120
-'o x -29120
-'o d 29120
-'o c 29120
-'o 'c 29120
-'o u0063_030C 29120
-'o ,c 29120
-'o q 29120
-'o r -29120
-'o y -29120
-'o :y -29120
-'o 'y -29120
-'o w -29120
-^o e 29120
-^o u0065_030C 29120
-^o u0065_0328 29120
-^o `e 29120
-^o 'e 29120
-^o ^e 29120
-^o :e 29120
-^o o 29120
-^o u006F_030B 29120
-^o `o 29120
-^o 'o 29120
-^o ^o 29120
-^o ~o 29120
-^o :o 29120
-^o oe 29120
-^o /o 29120
-^o x -29120
-^o d 29120
-^o c 29120
-^o 'c 29120
-^o u0063_030C 29120
-^o ,c 29120
-^o q 29120
-^o r -29120
-^o y -29120
-^o :y -29120
-^o 'y -29120
-^o w -29120
-~o e 29120
-~o u0065_030C 29120
-~o u0065_0328 29120
-~o `e 29120
-~o 'e 29120
-~o ^e 29120
-~o :e 29120
-~o o 29120
-~o u006F_030B 29120
-~o `o 29120
-~o 'o 29120
-~o ^o 29120
-~o ~o 29120
-~o :o 29120
-~o oe 29120
-~o /o 29120
-~o x -29120
-~o d 29120
-~o c 29120
-~o 'c 29120
-~o u0063_030C 29120
-~o ,c 29120
-~o q 29120
-~o r -29120
-~o y -29120
-~o :y -29120
-~o 'y -29120
-~o w -29120
-:o e 29120
-:o u0065_030C 29120
-:o u0065_0328 29120
-:o `e 29120
-:o 'e 29120
-:o ^e 29120
-:o :e 29120
-:o o 29120
-:o u006F_030B 29120
-:o `o 29120
-:o 'o 29120
-:o ^o 29120
-:o ~o 29120
-:o :o 29120
-:o oe 29120
-:o /o 29120
-:o x -29120
-:o d 29120
-:o c 29120
-:o 'c 29120
-:o u0063_030C 29120
-:o ,c 29120
-:o q 29120
-:o r -29120
-:o y -29120
-:o :y -29120
-:o 'y -29120
-:o w -29120
-/o e 29120
-/o u0065_030C 29120
-/o u0065_0328 29120
-/o `e 29120
-/o 'e 29120
-/o ^e 29120
-/o :e 29120
-/o o 29120
-/o u006F_030B 29120
-/o `o 29120
-/o 'o 29120
-/o ^o 29120
-/o ~o 29120
-/o :o 29120
-/o oe 29120
-/o /o 29120
-/o x -29120
-/o d 29120
-/o c 29120
-/o 'c 29120
-/o u0063_030C 29120
-/o ,c 29120
-/o q 29120
-/o r -29120
-/o y -29120
-/o :y -29120
-/o 'y -29120
-/o w -29120
-`u w -29120
-'u w -29120
-^u w -29120
-:u w -29120
-'y o -29120
-'y u006F_030B -29120
-'y `o -29120
-'y 'o -29120
-'y ^o -29120
-'y ~o -29120
-'y :o -29120
-'y oe -29120
-'y /o -29120
-'y e -29120
-'y u0065_030C -29120
-'y u0065_0328 -29120
-'y `e -29120
-'y 'e -29120
-'y ^e -29120
-'y :e -29120
-'y a -29120
-'y u0061_0306 -29120
-'y u0061_0328 -29120
-'y `a -29120
-'y 'a -29120
-'y ^a -29120
-'y ^a -29120
-'y ~a -29120
-'y :a -29120
-'y oa -29120
-'y ae -29120
-'y . -87360
-'y , -87360
-charset
-ga 524160,669760 2 0000
-aa 524160,669760 2 0001
-a^ 524160,669760 2 0002
-a~ 524160,669760 2 0003
-ad 524160,689730 2 0004
-a" 524160,669760,0,14557 2 0005
-ao 698880,669760 2 0006
-ah 524160,669760 2 0007
-ab 524160,669760 2 0010
-a- 524160,689730 2 0011
-a. 291200,710738 2 0012
-ac 465920,0,178360 1 0013
-ho 291200,0,203840 1 0014
-bq 291200,87360,131040 1 0015
-fo 465920,463008 0 0016
-fc 465920,463008 0 0017
-lq 349440,757120 2 0020
-rq 349440,757120 2 0021
-Bq 349440,87360,131040 1 0022
-Fo 698880,463008 0 0023
-Fc 698880,463008 0 0024
-en 524160,463008,0,29120 0 0025
-em 1048320,463008,0,29120 0 0026
---- 0,463008 0 0027
---- 465920,782600,29120 3 0030
-.i 250432,463008 0 0031
-.j 279552,463008,203840 1 0032
-ff 611520,757120,0,72800 2 0033
-fi 562016,757120 2 0034
-fl 562016,757120 2 0035
-Fi 853216,757120 2 0036
-Fl 853216,757120 2 0037
-u2423 524160,463008,101920 1 0040
-u01C3 334880,757120 2 0041
-! "
-dq 524160,757120 2 0042
-" "
-sh 873600,757120,232960 3 0043
-# "
-Do 524160,782600,29120 3 0044
-$ "
-% 873600,782600,29120 3 0045
-& 794976,757120 2 0046
-cq 291200,757120 2 0047
-' "
-( 407680,782600,262080 3 0050
-) 407680,782600,262080 3 0051
-* 524160,782600 2 0052
-+ 815360,611520,87360 3 0053
-, 291200,87360,131040 1 0054
-- 349440,463008 0 0055
-. 291200,87360 0 0056
-sl 524160,782600,262080 3 0057
-/ "
-0 524160,689730 2 0060
-1 524160,689730 2 0061
-2 524160,689730 2 0062
-3 524160,689730 2 0063
-4 524160,689730 2 0064
-5 524160,689730 2 0065
-6 524160,689730 2 0066
-7 524160,689730 2 0067
-8 524160,689730 2 0070
-9 524160,689730 2 0071
-: 291200,463008 0 0072
-; 291200,463008,131040 1 0073
-< 815360,571045,50091 3 0074
-= 815360,387883,-136277 0 0075
-> 815360,571045,50091 3 0076
-? 495040,757120 2 0077
-at 698880,757120 2 0100
-@ "
-A 698880,728000 2 0101
-B 698880,728000 2 0102
-C 669760,728000,0,0,-29120 2 0103
-D 757120,728000,0,0,0,-29120 2 0104
-E 626080,728000 2 0105
-F 596960,728000,0,0,0,-145600 2 0106
-G 698880,728000,0,0,-29120 2 0107
-H 742560,728000 2 0110
-I 291200,728000 2 0111
-J 495040,728000,0,0,0,-29120 2 0112
-K 728000,728000 2 0113
-L 567840,728000,0,0,0,58240 2 0114
-M 917280,728000 2 0115
-N 742560,728000 2 0116
-O 771680,728000,0,0,-29120,-29120 2 0117
-P 669760,728000,0,0,0,-145600 2 0120
-Q 771680,728000,131040,0,-29120 3 0121
-R 677040,728000 2 0122
-S 582400,728000 2 0123
-T 713440,728000,0,0,0,-145600 2 0124
-U 720720,728000,0,0,29120 2 0125
-V 698880,728000,0,14560,43680,-218400 2 0126
-W 990080,728000,0,14560,43680,-131040 2 0127
-X 698880,728000 2 0130
-Y 698880,728000,0,26208,29120,-206752 2 0131
-Z 640640,728000 2 0132
-lB 302848,782600,262080 3 0133
-[ "
-rs 524160,782600,262080 3 0134
-\ "
-rB 302848,782600,262080 3 0135
-] "
-ha 640640,757120 2 0136
-^ "
-_ 815360,0,259754 1 0137
-oq 291200,757120 2 0140
-` "
-a 503776,463008 0 0141
-b 541632,757120 2 0142
-c 465920,463008 0 0143
-d 541632,757120 2 0144
-e 465920,463008 0 0145
-f 320320,757120,0,72800 2 0146
-g 524160,463008,203840,14560 1 0147
-h 541632,757120 2 0150
-i 250432,710738 2 0151
-j 279552,710738,203840 3 0152
-k 512512,757120 2 0153
-l 250432,757120 2 0154
-m 832832,463008 0 0155
-n 541632,463008 0 0156
-o 524160,463008 0 0157
-p 541632,463008,203840 1 0160
-q 541632,463008,203840 1 0161
-r 358176,463008,0,14560 0 0162
-s 401856,463008 0 0163
-t 378560,599043 2 0164
-u 541632,463008 0 0165
-v 483392,463008,0,14560 0 0166
-w 716352,463008,0,14560 0 0167
-x 483392,463008 0 0170
-y 483392,463008,203840,14560 1 0171
-z 455728,463008 0 0172
-lC 524160,782600,262080 3 0173
-{ "
-u01C0 291200,782600,262080 3 0174
-ba "
-| "
-rC 524160,782600,262080 3 0175
-} "
-~ 640640,710738 2 0176
-hy 174720,463008 0 0177
-u0041_0306 698880,931840 2 0200
-u0041_0328 698880,728000,203840 3 0201
-'C 669760,892202 2 0202
-u0043_030C 669760,931840,0,0,-29120 2 0203
-u0044_030C 757120,931840,0,0,0,-29120 2 0204
-u0045_030C 626080,931840 2 0205
-u0045_0328 626080,728000,203840 3 0206
-u0047_0306 698880,931840,0,0,-29120 2 0207
-u004C_0301 567840,892202,0,0,0,58240 2 0210
-u004C_030C 567840,931840,0,0,0,58240 2 0211
-/L 655200,728000 2 0212
-u004E_0301 742560,892202 2 0213
-u004E_030C 742560,931840 2 0214
-u014A 786240,728000,0,0,0,-29120 2 0215
-u004F_030B 771680,892202,0,0,-29120,-29120 2 0216
-u0052_0301 677040,892202 2 0217
-u0052_030C 677040,931840 2 0220
-u0053_0301 582400,892202 2 0221
-vS 582400,931840 2 0222
-u0053_0327 582400,728000,178360 3 0223
-u0054_030C 713440,931840,0,0,0,-145600 2 0224
-u0054_0327 713440,728000,178360,0,0,-145600 3 0225
-u0055_030B 720720,892202,0,0,29120 2 0226
-u0055_030A 720720,931840,0,0,29120 2 0227
-:Y 698880,931840,0,26208,29120,-206752 2 0230
-u005A_0301 640640,892202 2 0231
-vZ 640640,931840 2 0232
-u005A_0307 640640,892202 2 0233
-IJ 757120,728000,0,0,0,-29120 2 0234
-u0049_0307 291200,892202 2 0235
-u0111 541632,757120 2 0236
-sc 465920,757120,203840 3 0237
-u0061_0306 503776,669760 2 0240
-u0061_0328 503776,463008,203840 1 0241
-'c 465920,669760 2 0242
-u0063_030C 465920,669760 2 0243
-u0064_030C 663936,757120 2 0244
-u0065_030C 465920,669760 2 0245
-u0065_0328 465920,463008,203840 1 0246
-u0067_0306 524160,669760,203840,14560 3 0247
-u006C_0301 250432,892202,0,96354 2 0250
-u006C_030C 372736,757120 2 0251
-/l 340122,757120,0,11645 2 0252
-u006E_0301 541632,669760 2 0253
-u006E_030C 541632,669760 2 0254
-u016A 541632,463008,203840 1 0255
-u006F_030B 524160,669760,0,14557 2 0256
-u0072_0301 358176,669760,0,14560 2 0257
-u0072_030C 358176,669760,0,14560 2 0260
-u0073_0301 401856,669760 2 0261
-vs 401856,669760 2 0262
-u0073_0327 401856,463008,178360 1 0263
-u0074_030C 378560,757120 2 0264
-u0074_0327 378560,599043,178360 3 0265
-u0075_030B 541632,669760,0,5818 2 0266
-u0075_030A 541632,669760 2 0267
-:y 483392,689730,203840,14560 3 0270
-u007A_0301 455728,669760 2 0271
-vz 455728,669760 2 0272
-u007A_0307 455728,710738 2 0273
-ij 570752,710738,203840 3 0274
-r! 334880,553280,203840 3 0275
-r? 495040,553280,203840 3 0276
-Po 669760,757120 2 0277
-`A 698880,892202 2 0300
-'A 698880,892202 2 0301
-^A 698880,931840 2 0302
-~A 698880,931840 2 0303
-:A 698880,931840 2 0304
-oA 698880,892202 2 0305
-AE 902720,728000 2 0306
-,C 669760,728000,178360,0,-29120 3 0307
-`E 626080,892202 2 0310
-'E 626080,892202 2 0311
-^E 626080,931840 2 0312
-:E 626080,931840 2 0313
-`I 291200,892202 2 0314
-'I 291200,892202,0,78541,0,39270 2 0315
-^I 291200,931840 2 0316
-:I 291200,931840 2 0317
-u0189 757120,728000,0,0,0,-29120 2 0320
-u0110 "
--D "
-~N 742560,931840 2 0321
-`O 771680,892202,0,0,-29120,-29120 2 0322
-'O 771680,892202 2 0323
-^O 771680,931840,0,0,-29120,-29120 2 0324
-~O 771680,931840,0,0,-29120,-29120 2 0325
-:O 771680,931840,0,0,-29120,-29120 2 0326
-OE 1019200,728000 2 0327
-/O 815360,782600,50960 3 0330
-`U 720720,892202,0,0,29120 2 0331
-'U 720720,892202 2 0332
-^U 720720,931840,0,0,29120 2 0333
-:U 720720,931840,0,0,29120 2 0334
-'Y 698880,892202,0,26208,29120,-206752 2 0335
-TP 611520,728000 2 0336
---- 1164800,728000 2 0337
-`a 503776,669760 2 0340
-'a 503776,669760 2 0341
-^a 503776,669760 2 0342
-~a 503776,669760 2 0343
-:a 503776,689730 2 0344
-oa 503776,669760 2 0345
-ae 757120,463008 0 0346
-,c 465920,463008,178360 1 0347
-`e 465920,669760 2 0350
-'e 465920,669760 2 0351
-^e 465920,669760 2 0352
-:e 465920,689730 2 0353
-`i 250432,669760 2 0354
-'i 250432,669760,0,34946 2 0355
-^i 250432,669760 2 0356
-:i 308672,689730 2 0357
-Sd 524160,757120 2 0360
-~n 541632,669760 2 0361
-`o 524160,669760 2 0362
-'o 524160,669760 2 0363
-^o 524160,669760 2 0364
-~o 524160,669760 2 0365
-:o 524160,689730 2 0366
-oe 815360,463008 0 0367
-/o 524160,571045,101920 3 0370
-`u 541632,669760 2 0371
-'u 541632,669760 2 0372
-^u 541632,669760 2 0373
-:u 541632,689730 2 0374
-'y 483392,669760,203840,14560 3 0375
-Tp 541632,757120,203840 3 0376
-ss 503776,757120 2 0377
diff --git a/contrib/groff/font/devdvi/HRTC b/contrib/groff/font/devdvi/HRTC
deleted file mode 100644
index 9e7b715af4c1..000000000000
--- a/contrib/groff/font/devdvi/HRTC
+++ /dev/null
@@ -1,137 +0,0 @@
-name HRTC
-special
-internalname tcss1000
-spacewidth 349440
-checksum 1552149760
-designsize 10485760
-charset
---- 524160,631051 2 0000
---- 524160,631051 2 0001
---- 524160,662478 2 0002
---- 524160,662478 2 0003
---- 524160,662478 2 0004
---- 524160,631051,0,46502 2 0005
---- 720720,662478 2 0006
---- 524160,662478 2 0007
---- 524160,662478 2 0010
---- 524160,662478 2 0011
---- 291200,631051 2 0012
---- 465920,0,178360 1 0013
---- 291200,0,203840 1 0014
---- 407680,87360,203840 1 0015
---- 524160,87360,203840 1 0022
---- 698880,465920,0,29120 0 0025
---- 786240,465920,0,29120 0 0026
---- 0,728000 2 0027
-<- 1048320,387883,-136277 0 0030
--> 1048320,387883,-136277 0 0031
---- 250432,757120,0,302848 2 0032
---- 308672,1019200,0,331968 2 0033
---- 483392,757120,0,302848 2 0034
---- 483392,757120,0,331968 2 0035
---- 0,757120 2 0037
-u2422 541632,757120 2 0040
-Do 524160,786240,29120 3 0044
-$ "
-aq 291200,757120 2 0047
---- 524160,495040,-29120 2 0052
-, 291200,87360,131040 1 0054
---- 349440,387883,-136277 0 0055
-. 291200,87360 0 0056
-f/ 524160,786240,262080 3 0057
-0 524160,465920 0 0060
-1 524160,465920 0 0061
-2 524160,465920 0 0062
-3 524160,465920,203840 1 0063
-4 524160,465920,203840 1 0064
-5 524160,465920,203840 1 0065
-6 524160,687232 2 0066
-7 524160,465920,203840 1 0067
-8 524160,687232 2 0070
-9 524160,465920,203840 1 0071
-la 407680,786240,262080 3 0074
-\- 815360,605282,87360 3 0075
-ra 407680,786240,262080 3 0076
-u2127 757120,728000 2 0115
-ci 1164800,786240,262080 3 0117
-u03A9 757120,728000 2 0127
-u301A 422240,786240,262080 3 0133
-u301B 422240,786240,262080 3 0135
-ua 524160,757120,232960 3 0136
-da 524160,757120,232960 3 0137
---- 524160,757120 2 0140
---- 524160,495040,-29120 2 0142
---- 524160,495040,-29120 2 0143
---- 524160,662478,29122 3 0144
---- 1048320,757120 2 0154
---- 524160,495040,-29120 2 0155
-u266A 640640,757120 2 0156
-ti 640640,133120 0 0176
-~ "
---- 174720,387883,-136277 0 0177
---- 640640,757120 2 0200
---- 640640,757120 2 0201
---- 524160,757120 2 0202
---- 524160,757120 2 0203
-dg 465920,757120,203840 3 0204
-dd 465920,757120,203840 3 0205
-u2016 524160,786240,262080 3 0206
-%0 1223040,786240,29120 3 0207
-bu 524160,465920,-58240 0 0210
-u2103 902720,728000,0,0,-29120 2 0211
---- 640640,786240,29120 3 0212
---- 524160,560560,101920 3 0213
-Fn 320320,757120,0,72800 2 0214
-u20A1 669760,786240,29120,0,-29120 3 0215
-u20A9 990080,728000,0,14560,43680,-131040 2 0216
-u20A6 771680,728000 2 0217
---- 815360,786240,29120,0,-29120 3 0220
-u20B1 684320,728000,0,0,0,-145600 2 0221
-u20A4 669760,757120 2 0222
-u211E 677040,728000 2 0223
-u203D 495040,757120 2 0224
---- 495040,560560,203840 3 0225
-u20AB 541632,786240 2 0226
-tm 698880,786240,0,550366 2 0227
-u2031 1612550,786240,29120 3 0230
---- 495040,757120,203840 3 0231
-u0E3F 698880,786240,29120 3 0232
-u2116 859040,728000 2 0233
-u2052 524160,786240 2 0234
-u212E 701792,728000 2 0235
-u25E6 524160,465920,-58240 0 0236
-u2120 698880,786240,0,550366 2 0237
-u2045 378560,786240,262080 3 0240
-u2046 378560,786240,262080 3 0241
-ct 524160,560560,101920 3 0242
-Po 669760,757120 2 0243
-Cs 793402,605282 2 0244
-Ye 698880,728000,0,26208 2 0245
-bb 174720,786240,262080 3 0246
-sc 465920,757120,203840 3 0247
---- 524160,712194 2 0250
-co 1164800,786240,262080 3 0251
-Of 465920,786240 2 0252
---- 1164800,786240,262080 3 0253
-tno 698880,465920 0 0254
-u2117 1164800,786240,262080 3 0255
-rg 1164800,786240,262080 3 0256
---- 815360,757120 2 0257
-de 349440,728000 2 0260
-t+- 815360,605282,87360 3 0261
-S2 465920,786240 2 0262
-S3 465920,786240 2 0263
---- 524160,757120 2 0264
-mc 541632,465920,203840 1 0265
-ps 640640,757120,203840 3 0266
-pc 247520,465920 0 0267
-u203B 679466,560560 2 0270
-S1 465920,786240 2 0271
-Om 465920,786240 2 0272
---- 495040,786240,220138 3 0273
---- 465920,786240,203840 3 0274
---- 465920,786240,203840 3 0275
---- 465920,786240,203840 3 0276
-Eu 815360,728000 2 0277
-tmu 815360,605282,87360 3 0326
-tdi 815360,605282,87360 3 0366
diff --git a/contrib/groff/font/devdvi/MI b/contrib/groff/font/devdvi/MI
deleted file mode 100644
index 6821f7dce7d1..000000000000
--- a/contrib/groff/font/devdvi/MI
+++ /dev/null
@@ -1,136 +0,0 @@
-name MI
-special
-internalname cmmi10
-slant 14.036243
-checksum 195060286
-designsize 10485760
-charset
---- 645166,716526,0,145637 2 0000
---- 873816,716526 2 0001
---- 799829,716526,0,29128 2 0002
---- 728179,716526 2 0003
---- 778424,716526,0,79371 2 0004
---- 871630,716526,0,85195 2 0005
---- 817746,716526,0,60438 2 0006
---- 611669,716526,0,145637 2 0007
---- 699051,716526 2 0010
---- 641962,716526,0,115344 2 0011
---- 809918,716526,0,52610 2 0012
-*a 670776,451470,0,3882 0 0013
-*b 593102,728178,203890,55342 3 0014
-*g 542880,451470,203890,58254 1 0015
-*d 466034,728178,0,39685 2 0016
-+e 425621,451470 0 0017
-*z 458754,728178,203890,77368 3 0020
-*y 520651,451470,203890,37622 1 0021
-*h 492248,728178,0,29128 2 0022
-*i 371130,451470 0 0023
-*k 604147,451470 0 0024
-*l 611672,728178 2 0025
-mc 631819,451470,203890 1 0026
-*m "
-*n 517979,451470,0,66750 0 0027
-*c 458754,728178,203890,48242 3 0030
-*p 597717,451470,0,37622 0 0031
-*r 542130,451470,203890 1 0032
-*s 599171,451470,0,37622 0 0033
-*t 458390,451470,0,118694 0 0034
-*u 566525,451470,0,37622 0 0035
-*f 624778,728178,203890 3 0036
-*x 656086,451470,203890 1 0037
-*q 683034,728178,203890,37622 3 0040
-*w 652691,451470,0,37622 0 0041
-*e 488970,451470 0 0042
-+h 620170,728178 2 0043
-+p 868357,451470,0,29128 0 0044
---- 542130,451470,203890 1 0045
-ts 380474,451470,101946,83739 1 0046
-+f 685944,451470,203890 1 0047
-u21BC 1048579,384696,-139592 0 0050
-u21BD 1048579,384696,-139592 0 0051
-u21C0 1048579,384696,-139592 0 0052
-u21C1 1048579,384696,-139592 0 0053
---- 291272,486275,-38013 2 0054
---- 291272,486275,-38013 2 0055
-u25B7 524290,487880,-36408 2 0056
-u25C1 524290,487880,-36408 2 0057
---- 524290,451470 0 0060
---- 524290,451470 0 0061
---- 524290,451470 0 0062
---- 524290,451470,203890 1 0063
---- 524290,451470,203890 1 0064
---- 524290,451470,203890 1 0065
---- 524290,675749 2 0066
---- 524290,451470,203890 1 0067
---- 524290,675749 2 0070
---- 524290,451470,203890 1 0071
---- 291272,110683 0 0072
---- 291272,110683,203890 1 0073
-< 815562,565285,40997 3 0074
---- 524290,786432,262144 3 0075
-> 815562,565285,40997 3 0076
-u22C6 524290,487880,-36408 2 0077
-pd 556693,728178,0,58254 2 0100
---- 786434,716526 2 0101
---- 795355,716526,0,52610 2 0102
---- 749440,716526,0,75002 2 0103
---- 868134,716526,0,29128 2 0104
---- 774054,716526,0,60438 2 0105
---- 674294,716526,0,145637 2 0106
---- 824442,716526 2 0107
---- 871630,716526,0,85195 2 0110
---- 460938,716526,0,82283 2 0111
---- 581450,716526,0,100853 2 0112
---- 890563,716526,0,75002 2 0113
---- 713616,716526 2 0114
---- 1017266,716526,0,114323 2 0115
---- 842502,716526,0,114323 2 0116
---- 799829,716526,0,29128 2 0117
---- 673200,716526,0,145637 2 0120
---- 828957,716526,203890 3 0121
---- 796173,716526,0,8101 2 0122
---- 642982,716526,0,60438 2 0123
---- 612763,716526,0,145637 2 0124
---- 715944,716526,0,114323 2 0125
---- 611670,716526,0,233018 2 0126
---- 990323,716526,0,145637 2 0127
---- 868718,716526,0,82283 2 0130
---- 608758,716526,0,233018 2 0131
---- 715800,716526,0,75002 2 0132
-u266D 407781,786432 2 0133
-u266E 407781,728178,203890 3 0134
-u266F 407781,728178,203890 3 0135
-u2323 1048579,375013,-149275 0 0136
-u2322 1048579,375013,-149275 0 0137
-u2113 436910,728178 2 0140
---- 554267,451470 0 0141
---- 450014,728178 2 0142
---- 453778,451470 0 0143
---- 545771,728178 2 0144
---- 488245,451470 0 0145
---- 513368,728178,203890,112869 3 0146
---- 500138,451470,203890,37622 1 0147
---- 604147,728178 2 0150
---- 361248,691562 2 0151
---- 431811,691562,203890,60024 3 0152
---- 545893,728178,0,33010 2 0153
---- 312874,728178,0,20634 2 0154
---- 920664,451470 0 0155
---- 629392,451470 0 0156
-*o 508269,451470 0 0157
---- 527566,451470,203890 1 0160
---- 468099,451470,203890,37622 1 0161
---- 473075,451470,0,29128 0 0162
---- 491520,451470 0 0163
---- 378654,644958 2 0164
---- 600266,451470 0 0165
---- 508270,451470,0,37622 0 0166
---- 750694,451470,0,28216 0 0167
---- 599291,451470 0 0170
---- 514098,451470,203890,37622 1 0171
---- 487640,451470,0,46117 0 0172
---- 338120,451470 0 0173
---- 402685,451470,203890 1 0174
-wp 667376,451470,203890 1 0175
---- 524290,749149,0,161291 2 0176
---- 291272,728178,0,418866 2 0177
diff --git a/contrib/groff/font/devdvi/Makefile.sub b/contrib/groff/font/devdvi/Makefile.sub
deleted file mode 100644
index 052e00a462ec..000000000000
--- a/contrib/groff/font/devdvi/Makefile.sub
+++ /dev/null
@@ -1,23 +0,0 @@
-DEV=dvi
-DEVFILES=DESC \
- TR TI TB TBI CW CWI HR HI HB HBI \
- TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
- TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
- MI S EX SA SB SC \
- generate/Makefile \
- generate/msam.map generate/msbm.map \
- generate/texb.map generate/texex.map generate/texi.map generate/texmi.map \
- generate/texr.map generate/texsy.map generate/textt.map generate/textex.map \
- generate/ec.map generate/tc.map
-DEVSCRIPTS=generate/CompileFonts
-
-CLEANADD=DESC
-
-DESC: DESC.in
- cat $(srcdir)/DESC.in >DESC
- if test "$(PAGE)" = A4; then \
- echo "papersize a4" >>DESC; \
- else \
- echo "papersize letter" >>DESC; \
- fi
- test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC
diff --git a/contrib/groff/font/devdvi/S b/contrib/groff/font/devdvi/S
deleted file mode 100644
index 3030135a96b1..000000000000
--- a/contrib/groff/font/devdvi/S
+++ /dev/null
@@ -1,149 +0,0 @@
-name S
-special
-internalname cmsy10
-slant 14.036243
-checksum 555887770
-designsize 10485760
-charset
-mi 815562,611670,87382 3 0000
-\- "
-pc 291272,466035,-58253 2 0001
-md "
-tmu 815562,611670,87382 3 0002
-mu "
-** 524290,487880,-36408 2 0003
-tdi 815562,611670,87382 3 0004
-di "
-u22C4 524290,466035,-58253 2 0005
-t+- 815562,611670,87382 3 0006
-+- "
--+ 815562,611670,87382 3 0007
-c+ 815562,611670,87382 3 0010
-u2296 815562,611670,87382 3 0011
-c* 815562,611670,87382 3 0012
-u2298 815562,611670,87382 3 0013
-u2299 815562,611670,87382 3 0014
-ci 1048579,728178,203890 3 0015
-u25E6 524290,466035,-58253 2 0016
-bu 524290,466035,-58253 2 0017
-u224D 815562,486275,-38013 2 0020
-== 815562,486275,-38013 2 0021
-ib 815562,666864,142576 3 0022
-ip 815562,666864,142576 3 0023
-<= 815562,666864,142576 3 0024
->= 815562,666864,142576 3 0025
-u227C 815562,666864,142576 3 0026
-u227D 815562,666864,142576 3 0027
-ti 815562,384696,-139592 0 0030
-ap "
-~= 815562,506590,-17698 2 0031
-~~ "
-sb 815562,565285,40997 3 0032
-sp 815562,565285,40997 3 0033
-<< 1048579,565285,40997 3 0034
->> 1048579,565285,40997 3 0035
-u227A 815562,565285,40997 3 0036
-u227B 815562,565285,40997 3 0037
-<- 1048579,384696,-139592 0 0040
--> 1048579,384696,-139592 0 0041
-ua 524290,728178,203888 3 0042
-da 524290,728178,203888 3 0043
-<> 1048579,384696,-139592 0 0044
-u2197 1048579,728178,203888 3 0045
-u2198 1048579,728178,203888 3 0046
-|= 815562,486275,-38013 2 0047
-lA 1048579,384696,-139592 0 0050
-rA 1048579,384696,-139592 0 0051
-uA 640798,728178,203888 3 0052
-dA 640798,728178,203888 3 0053
-hA 1048579,384696,-139592 0 0054
-u2196 1048579,728178,203888 3 0055
-u2199 1048579,728178,203888 3 0056
-pt 815562,451470 0 0057
-prime 288358,582544 2 0060
-if 1048579,451470 0 0061
-mo 699053,565285,40997 3 0062
-st 699053,565285,40997 3 0063
-u25B3 932070,728178,203890 3 0064
-u25BD 932070,728178,203890 3 0065
-slashnot 0,728178,203888 3 0066
---- 0,384696,-139592 0 0067
-fa 582544,728178 2 0070
-te 582544,728178 2 0071
-tno 699053,451470 0 0072
-no "
-es 524290,786432,58254 3 0073
-Re 757307,728178 2 0074
-Im 757307,728178 2 0075
-u22A4 815562,728178 2 0076
-pp 815562,728178 2 0077
-Ah 640798,728178 2 0100
-A 837258,716526 2 0101
-B 688715,716526,0,31890 2 0102
-C 552106,716526,0,61170 2 0103
-D 808864,716526,0,29128 2 0104
-E 553419,716526,0,93786 2 0105
-F 753662,716526,0,104130 2 0106
-G 623762,716526,101946,62184 3 0107
-H 885541,716526,0,10123 2 0110
-I 570966,716526,0,77408 2 0111
-J 710704,716526,101946,193694 3 0112
-K 798963,716526,0,15147 2 0113
-L 723229,716526 2 0114
-M 1259235,716526 2 0115
-N 860347,716526,0,154518 2 0116
-O 834786,716526,0,29128 2 0117
-P 729347,716526,0,86216 2 0120
-Q 856341,716526,101946 3 0121
-R 888672,716526 2 0122
-S 634974,716526,0,78638 2 0123
-T 571101,716526,0,266514 2 0124
-U 656232,716526,0,104130 2 0125
-V 642549,716526,0,86216 2 0126
-W 1035766,716526,0,86216 2 0127
-X 747946,716526,0,153541 2 0130
-Y 700802,716526,101946,86216 3 0131
-Z 759930,716526,0,83302 2 0132
-cu 699053,582544 2 0133
-ca 699053,582544 2 0134
-u228E 699053,582544 2 0135
-AN 699053,582544 2 0136
-OR 699053,582544 2 0137
-u22A2 640798,728178 2 0140
-u22A3 640798,728178 2 0141
-lf 466035,786432,262144 3 0142
-rf 466035,786432,262144 3 0143
-lc 466035,786432,262144 3 0144
-rc 466035,786432,262144 3 0145
-{ 524290,786432,262144 3 0146
-lC "
-} 524290,786432,262144 3 0147
-rC "
-la 407781,786432,262144 3 0150
-ra 407781,786432,262144 3 0151
-bar 291272,786432,262144 3 0152
-bv "
-| "
-ba "
-bardbl 524290,786432,262144 3 0153
-va 524290,786432,262144 3 0154
-vA 640798,786432,262144 3 0155
-rs 524290,786432,262144 3 0156
-\ "
-u2240 291272,728178,203888 3 0157
-sqrt 873816,41942,1006634 1 0160
-u2210 786434,716526 2 0161
-gr 873816,716526 2 0162
-is 436909,728178,203890,116509 3 0163
-u2294 699053,582544 2 0164
-u2293 699053,582544 2 0165
-u2291 815562,666864,142576 3 0166
-u2292 815562,666864,142576 3 0167
-sc 466037,728178,203890 3 0170
-dg 466035,728178,203890 3 0171
-dd 466035,728178,203890 3 0172
-ps 640798,728178,203890 3 0173
-CL 815562,728178,135926 3 0174
-u2662 815562,728178,135926 3 0175
-u2661 815562,728178,135926 3 0176
-SP 815562,728178,135926 3 0177
diff --git a/contrib/groff/font/devdvi/SA b/contrib/groff/font/devdvi/SA
deleted file mode 100644
index e78e60110374..000000000000
--- a/contrib/groff/font/devdvi/SA
+++ /dev/null
@@ -1,141 +0,0 @@
-name SA
-special
-internalname msam10
-checksum -1749815603
-designsize 10485760
-charset
-boxdot 815562,707789 2 0000
-boxplus 815562,707789 2 0001
-boxtimes 815562,707789 2 0002
-square 815562,707789 2 0003
-blacksquare 815562,707789 2 0004
-centerdot 291272,576570 2 0005
-lz 699053,725867,116509 3 0006
-lozenge "
-blacklozenge 699053,725867,116509 3 0007
-circlearrowright 815562,610248,85960 3 0010
-circlearrowleft 815562,610248,85960 3 0011
-rightleftharpoons 1048579,547770,14197 3 0012
-leftrightharpoons 1048579,547770,14197 3 0013
-boxminus 815562,707789 2 0014
-Vdash 757307,725867 2 0015
-Vvdash 932070,725867 2 0016
-vDash 640798,725867 2 0017
-twoheadrightarrow 1048579,547770,14197 3 0020
-twoheadleftarrow 1048579,547770,14197 3 0021
-leftleftarrows 1048579,707789,189584 3 0022
-rightrightarrows 1048579,707789,189584 3 0023
-upuparrows 873816,725867,203888 3 0024
-downdownarrows 873816,725867,203888 3 0025
-upharpoonright 436909,725867,203888 3 0026
-downharpoonright 436909,725867,203888 3 0027
-upharpoonleft 436909,725867,203888 3 0030
-downharpoonleft 436909,725867,203888 3 0031
-rightarrowtail 1165088,547770,14197 3 0032
-leftarrowtail 1165088,547770,14197 3 0033
-leftrightarrows 1048579,707789,189584 3 0034
-rightleftarrows 1048579,707789,189584 3 0035
-Lsh 524290,725867 2 0036
-Rsh 524290,725867 2 0037
-rightsquigarrow 1048579,396238,-139592 0 0040
-leftrightsquigarrow 1456360,396238,-139592 0 0041
-looparrowleft 1048579,576570 2 0042
-looparrowright 1048579,576570 2 0043
-circeq 815562,765021,240733 3 0044
-succsim 815562,765021,240733 3 0045
-gtrsim 815562,765021,240733 3 0046
-gtrapprox 815562,792549,268261 3 0047
-multimap 1165088,576570 2 0050
-3d 699053,725867 2 0051
-tf "
-therefore "
-because 699053,725867 2 0052
-doteqdot 815562,610248,85960 3 0053
-triangleq 815562,961197,85960 3 0054
-precsim 815562,765021,240733 3 0055
-lesssim 815562,765021,240733 3 0056
-lessapprox 815562,792549,268261 3 0057
-eqslantless 815562,667592,143304 3 0060
-eqslantgtr 815562,667592,143304 3 0061
-curlyeqprec 815562,667592,143304 3 0062
-curlyeqsucc 815562,667592,143304 3 0063
-preccurlyeq 815562,667592,143304 3 0064
-leqq 815562,792549,268261 3 0065
-leqslant 815562,667592,143304 3 0066
-lessgtr 815562,707789,189584 3 0067
-backprime 288358,576570 2 0070
---- 524290,486557,-37731 2 0071
-risingdotseq 815562,610248,85960 3 0072
-fallingdotseq 815562,610248,85960 3 0073
-succcurlyeq 815562,667592,143304 3 0074
-geqq 815562,792549,268261 3 0075
-geqslant 815562,667592,143304 3 0076
-gtrless 815562,707789,189584 3 0077
-sqsubset 815562,576570,36882 3 0100
-sqsupset 815562,576570,36882 3 0101
-vartriangleright 815562,576570,36882 3 0102
-vartriangleleft 815562,576570,36882 3 0103
-trianglerighteq 815562,667592,143304 3 0104
-trianglelefteq 815562,667592,143304 3 0105
-bigstar 990323,725867,203888 3 0106
-between 524290,792549,268261 3 0107
-blacktriangledown 757307,576570 2 0110
-blacktriangleright 815562,576570,36882 3 0111
-blacktriangleleft 815562,576570,36882 3 0112
---- 524290,486557,-37731 2 0113
---- 524290,486557,-37731 2 0114
-vartriangle 757307,576570 2 0115
-blacktriangle 757307,576570 2 0116
-triangledown 757307,576570 2 0117
-eqcirc 815562,725867 2 0120
-lesseqgtr 815562,928714,404426 3 0121
-gtreqless 815562,928714,404426 3 0122
-lesseqqgtr 815562,1030294,506006 3 0123
-gtreqqless 815562,1030294,506006 3 0124
-Ye 786434,707789,0,26214 2 0125
-yen "
-Rrightarrow 1048579,667592,143304 3 0126
-Lleftarrow 1048579,667592,143304 3 0127
-OK 873816,725867 2 0130
-checkmark "
-veebar 640798,725867,203888 3 0131
-barwedge 640798,725867,203888 3 0132
-doublebarwedge 640798,792549,203888 3 0133
-/_ 757307,725867 2 0134
-angle "
-measuredangle 757307,725867 2 0135
-sphericalangle 757307,547770,36882 3 0136
-varpropto 815562,725867 2 0137
-smallsmile 815562,725867,203888 3 0140
-smallfrown 815562,725867,203888 3 0141
-Subset 815562,576570,36882 3 0142
-Supset 815562,576570,36882 3 0143
-Cup 699053,576570 2 0144
-Cap 699053,576570 2 0145
-curlywedge 797355,576570 2 0146
-curlyvee 797355,576570 2 0147
-leftthreetimes 815562,725867 2 0150
-rightthreetimes 815562,725867 2 0151
-subseteqq 815562,792549,268261 3 0152
-supseteqq 815562,792549,268261 3 0153
-bumpeq 815562,576570,63568 3 0154
-Bumpeq 815562,576570,63568 3 0155
-lll 1398106,576570,36882 3 0156
-ggg 1398106,576570,36882 3 0157
-ulcorner 524290,725867 2 0160
-urcorner 524290,725867 2 0161
-rg 992648,725867,163146 3 0162
-circledR "
-circledS 946045,725867,163146 3 0163
-pitchfork 699053,725867 2 0164
-dotplus 815562,725867,85960 3 0165
-backsim 815562,396238,-139592 0 0166
-backsimeq 815562,486557,-37731 2 0167
-llcorner 524290,396238 0 0170
-lrcorner 524290,396238 0 0171
-maltese 873816,725867 2 0172
-complement 524290,865080 2 0173
-intercal 582544,451470,203888 1 0174
-circledcirc 815562,610248,85960 3 0175
-circledast 815562,610248,85960 3 0176
-circleddash 815562,610248,85960 3 0177
diff --git a/contrib/groff/font/devdvi/SB b/contrib/groff/font/devdvi/SB
deleted file mode 100644
index 811b351a1efd..000000000000
--- a/contrib/groff/font/devdvi/SB
+++ /dev/null
@@ -1,132 +0,0 @@
-name SB
-special
-internalname msbm10
-spacewidth 314576
-slant 14.036243
-checksum -2001332536
-designsize 10485760
-charset
-lvertneqq 815562,794042,263635 3 0000
-gvertneqq 815562,794042,263635 3 0001
-nleq 815562,832390,317448 3 0002
-ngeq 815562,832390,317448 3 0003
-nless 815562,740048,215760 3 0004
-ngtr 815562,740048,215760 3 0005
-nprec 815562,740048,215760 3 0006
-nsucc 815562,740048,215760 3 0007
-lneqq 815562,794042,263635 3 0010
-gneqq 815562,794042,263635 3 0011
-nleqslant 815562,832390,317448 3 0012
-ngeqslant 815562,832390,317448 3 0013
-lneq 815562,666864,142576 3 0014
-gneq 815562,666864,142576 3 0015
-npreceq 815562,832390,317448 3 0016
-nsucceq 815562,832390,317448 3 0017
-precnsim 815562,777110,243501 3 0020
-succnsim 815562,777110,243501 3 0021
-lnsim 815562,777110,243501 3 0022
-gnsim 815562,777110,243501 3 0023
-nleqq 815562,964179,439891 3 0024
-ngeqq 815562,964179,439891 3 0025
-precneqq 815562,794042,263635 3 0026
-succneqq 815562,794042,263635 3 0027
-precnapprox 815562,794042,274379 3 0030
-succnapprox 815562,794042,274379 3 0031
-lnapprox 815562,794042,274379 3 0032
-gnapprox 815562,794042,274379 3 0033
-nsim 815562,384696,-139592 0 0034
-ncong 815562,832390,317448 3 0035
-diagup 932070,722352,203888 3 0036
-diagdown 932070,777110,203888 3 0037
-varsubsetneq 815562,666864,142576 3 0040
-varsupsetneq 815562,666864,142576 3 0041
-nsubseteqq 815562,794042,263635 3 0042
-nsupseteqq 815562,794042,263635 3 0043
-subsetneqq 815562,832390,298650 3 0044
-supsetneqq 815562,832390,298650 3 0045
-varsubsetneqq 815562,794042,263635 3 0046
-varsupsetneqq 815562,794042,263635 3 0047
-subsetneq 815562,666864,142576 3 0050
-supsetneq 815562,666864,142576 3 0051
-nsubseteq 815562,832390,317448 3 0052
-nsupseteq 815562,832390,317448 3 0053
-nparallel 524290,777110,263635 3 0054
-nmid 291272,777110,263635 3 0055
-nshortmid 233018,609920,85632 3 0056
-nshortparallel 407781,609920,85632 3 0057
-nvdash 640798,722352 2 0060
-nVdash 757307,722352 2 0061
-nvDash 640798,722352 2 0062
-nVDash 757307,722352 2 0063
-ntrianglerighteq 815562,832390,317448 3 0064
-ntrianglelefteq 815562,832390,317448 3 0065
-ntriangleleft 815562,740048,215760 3 0066
-ntriangleright 815562,740048,215760 3 0067
-nleftarrow 1048579,384696,-139592 0 0070
-nrightarrow 1048579,384696,-139592 0 0071
-nLeftarrow 1048579,384696,-139592 0 0072
-nRightarrow 1048579,384696,-139592 0 0073
-nLeftrightarrow 1048579,384696,-139592 0 0074
-nleftrightarrow 1048579,384696,-139592 0 0075
-divideontimes 815562,609920,85632 3 0076
-varnothing 815562,609920,85632 3 0077
-nexists 582544,722352 2 0100
-BbbA 757307,722352 2 0101
-BbbB 699053,722352 2 0102
-BbbC 757307,722352 2 0103
-BbbD 757307,722352 2 0104
-BbbE 699053,722352 2 0105
-BbbF 640798,722352 2 0106
-BbbG 815562,722352 2 0107
-BbbH 815562,722352 2 0110
-BbbI 407781,722352 2 0111
-BbbJ 524290,722352,174763 3 0112
-BbbK 815562,722352 2 0113
-BbbL 699053,722352 2 0114
-BbbM 990325,722352 2 0115
-BbbN 757307,722352 2 0116
-BbbO 815562,722352,174763 3 0117
-BbbP 640798,722352 2 0120
-BbbQ 815562,722352,174763 3 0121
-BbbR 757307,722352 2 0122
-BbbS 582544,722352 2 0123
-BbbT 699053,722352 2 0124
-BbbU 757307,722352 2 0125
-BbbV 757307,722352 2 0126
-BbbW 1048579,722352 2 0127
-BbbX 757307,722352 2 0130
-BbbY 757307,722352 2 0131
-BbbZ 699053,722352 2 0132
---- 1980650,865080 2 0133
---- 2446685,865080 2 0134
---- 1980650,865080 2 0135
---- 2446685,943717 2 0136
-Finv 582544,722352 2 0140
-Game 669925,722352 2 0141
-mho 757307,722352 2 0146
-eth 582544,722352 2 0147
-eqsim 815562,486275,-38013 2 0150
-beth 699053,722352 2 0151
-gimel 466035,722352 2 0152
-daleth 699053,722352 2 0153
-lessdot 815562,565285,40997 3 0154
-gtrdot 815562,565285,40997 3 0155
-ltimes 815562,609920,85632 3 0156
-rtimes 815562,609920,85632 3 0157
-shortmid 233018,609920,85632 3 0160
-shortparallel 407781,609920,85632 3 0161
-smallsetminus 815562,609920,85632 3 0162
-thicksim 815562,384696,-139592 0 0163
-thickapprox 815562,506590,-17698 2 0164
-approxeq 815562,609920,85632 3 0165
-succapprox 815562,794042,274379 3 0166
-precapprox 815562,794042,274379 3 0167
-curvearrowleft 1048579,451470 0 0170
-curvearrowright 1048579,451470 0 0171
-digamma 815562,609920,85632 3 0172
-varkappa 699053,451470,0,42235 0 0173
-Bbbk 582544,722352 2 0174
-hslash 566525,722352 2 0175
--h 566525,722352 2 0176
-hbar "
-backepsilon 450016,451470 0 0177
diff --git a/contrib/groff/font/devdvi/SC b/contrib/groff/font/devdvi/SC
deleted file mode 100644
index 43497b2ac793..000000000000
--- a/contrib/groff/font/devdvi/SC
+++ /dev/null
@@ -1,137 +0,0 @@
-name SC
-special
-internalname cmtex10
-spacewidth 550498
-checksum -538297224
-designsize 10485760
-charset
-pc 550498,534482,-106315 2 0000
-md "
-da 550498,640797 2 0001
-*a 550498,451470 0 0002
-*b 550498,640797,233018 3 0003
-AN 550498,512640 2 0004
-tno 550498,451470 0 0005
-no "
-mo 550498,582542,-58254 2 0006
-*p 550498,451470 0 0007
-*l 550498,640797 2 0010
-*g 550498,451470,233018 1 0011
-*d 550498,640797 2 0012
-ua 550498,640797 2 0013
-pm 550498,556326,-84470 2 0014
-c+ 550498,556326,-84470 2 0015
-if 550498,451470 0 0016
-pd 550498,640797 2 0017
-sb 550498,582542,-58254 2 0020
-sp 550498,582542,-58254 2 0021
-ca 550498,512640 2 0022
-cu 550498,512640 2 0023
-fa 550498,640797 2 0024
-te 550498,640797 2 0025
-c* 550498,556326,-84470 2 0026
-u21C6 550498,628053,-12744 2 0027
-<- 550498,435813,-204984 0 0030
--> 550498,435813,-204984 0 0031
-!= 550498,672827,32030 3 0032
-u22C4 550498,534482,-106315 2 0033
-<= 550498,661547,20750 3 0034
->= 550498,661547,20750 3 0035
-== 550498,514818,-125979 2 0036
-OR 550498,512640 2 0037
---- 550498 0 0040
---- 550498,640797 2 0041
---- 550498,640797 2 0042
---- 550498,640797 2 0043
---- 550498,728178,87381 3 0044
---- 550498,728178,87381 3 0045
---- 550498,640797 2 0046
---- 550498,640797 2 0047
---- 550498,728178,87379 3 0050
---- 550498,728178,87379 3 0051
---- 550498,546134 2 0052
---- 550498,556326,-84470 2 0053
---- 550498,131072,145635 1 0054
---- 550498,556326,-84470 2 0055
---- 550498,131072 0 0056
---- 550498,728178,87379 3 0057
---- 550498,640797 2 0060
---- 550498,640797 2 0061
---- 550498,640797 2 0062
---- 550498,640797 2 0063
---- 550498,640797 2 0064
---- 550498,640797 2 0065
---- 550498,640797 2 0066
---- 550498,640797 2 0067
---- 550498,640797 2 0070
---- 550498,640797 2 0071
---- 550498,451470 0 0072
---- 550498,451470,145635 1 0073
---- 550498,582542,-58254 2 0074
---- 550498,435813,-204984 0 0075
---- 550498,582542,-58254 2 0076
---- 550498,640797 2 0077
---- 550498,640797 2 0100
---- 550498,640797 2 0101
---- 550498,640797 2 0102
---- 550498,640797 2 0103
---- 550498,640797 2 0104
---- 550498,640797 2 0105
---- 550498,640797 2 0106
---- 550498,640797 2 0107
---- 550498,640797 2 0110
---- 550498,640797 2 0111
---- 550498,640797 2 0112
---- 550498,640797 2 0113
---- 550498,640797 2 0114
---- 550498,640797 2 0115
---- 550498,640797 2 0116
---- 550498,640797 2 0117
---- 550498,640797 2 0120
---- 550498,640797,145635 3 0121
---- 550498,640797 2 0122
---- 550498,640797 2 0123
---- 550498,640797 2 0124
---- 550498,640797 2 0125
---- 550498,640797 2 0126
---- 550498,640797 2 0127
---- 550498,640797 2 0130
---- 550498,640797 2 0131
---- 550498,640797 2 0132
---- 550498,728178,87379 3 0133
---- 550498,728178,87379 3 0134
---- 550498,728178,87379 3 0135
---- 550498,640797 2 0136
---- 550498,0,99757 1 0137
---- 550498,640797 2 0140
---- 550498,451470 0 0141
---- 550498,640797 2 0142
---- 550498,451470 0 0143
---- 550498,640797 2 0144
---- 550498,451470 0 0145
---- 550498,640797 2 0146
---- 550498,451470,233018 1 0147
---- 550498,640797 2 0150
---- 550498,640797 2 0151
---- 550498,640797,233018 3 0152
---- 550498,640797 2 0153
---- 550498,640797 2 0154
---- 550498,451470 0 0155
---- 550498,451470 0 0156
---- 550498,451470 0 0157
---- 550498,451470,233018 1 0160
---- 550498,451470,233018 1 0161
---- 550498,451470 0 0162
---- 550498,451470 0 0163
---- 550498,580466 2 0164
---- 550498,451470 0 0165
---- 550498,451470 0 0166
---- 550498,451470 0 0167
---- 550498,451470 0 0170
---- 550498,451470,233018 1 0171
---- 550498,451470 0 0172
---- 550498,728178,87379 3 0173
---- 550498,728178,87379 3 0174
---- 550498,728178,87379 3 0175
---- 550498,640797 2 0176
-is 550498,640797,233018 3 0177
diff --git a/contrib/groff/font/devdvi/TB b/contrib/groff/font/devdvi/TB
deleted file mode 100644
index 581840afbd32..000000000000
--- a/contrib/groff/font/devdvi/TB
+++ /dev/null
@@ -1,348 +0,0 @@
-#
-# manually added kerning for `` and ''
-#
-name TB
-internalname cmbx10
-spacewidth 401952
-ligatures ff fi fl ffi ffl 0
-checksum 452076118
-designsize 10485760
-kernpairs
-ff cq 114323
-ff ' 114323
-ff ? 114323
-ff ! 114323
-ff ) 114323
-ff rB 114323
-ff ] 114323
-' ' -100488
-' cq -100488
-cq ' -100488
-cq cq -100488
-slash@for@l l -334960
-slash@for@l L -396128
-cq ? 133984
-' ? 133984
-cq ! 133984
-' ! 133984
-A t -33496
-A C -33496
-A O -33496
-A G -33496
-A U -33496
-A Q -33496
-A T -100488
-A Y -100488
-A V -133984
-A W -133984
-D X -33496
-D W -33496
-D A -33496
-D V -33496
-D Y -33496
-F o -100488
-F e -100488
-F u -100488
-F r -100488
-F a -100488
-F A -133984
-F O -33496
-F C -33496
-F G -33496
-F Q -33496
-I I 33496
-K O -33496
-K C -33496
-K G -33496
-K Q -33496
-L T -100488
-L Y -100488
-L V -133984
-L W -133984
-O X -33496
-O W -33496
-O A -33496
-O V -33496
-O Y -33496
-P A -100488
-P o -33496
-P e -33496
-P a -33496
-P . -100488
-P , -100488
-R t -33496
-R C -33496
-R O -33496
-R G -33496
-R U -33496
-R Q -33496
-R T -100488
-R Y -100488
-R V -133984
-R W -133984
-T y -33496
-T e -100488
-T o -100488
-T r -100488
-T a -100488
-T A -100488
-T u -100488
-V o -100488
-V e -100488
-V u -100488
-V r -100488
-V a -100488
-V A -133984
-V O -33496
-V C -33496
-V G -33496
-V Q -33496
-W o -100488
-W e -100488
-W u -100488
-W r -100488
-W a -100488
-W A -133984
-W O -33496
-W C -33496
-W G -33496
-W Q -33496
-X O -33496
-X C -33496
-X G -33496
-X Q -33496
-Y e -100488
-Y o -100488
-Y r -100488
-Y a -100488
-Y A -100488
-Y u -100488
-oq oq -100488
-oq ` -100488
-` oq -100488
-` ` -100488
-a v -33496
-a j 66992
-a y -33496
-a w -33496
-b e 33496
-b o 33496
-b x -33496
-b d 33496
-b c 33496
-b q 33496
-b v -33496
-b j 66992
-b y -33496
-b w -33496
-c h -33496
-c k -33496
-f cq 114323
-f ' 114323
-f ? 114323
-f ! 114323
-f ) 114323
-f rB 114323
-f ] 114323
-g j 33496
-h t -33496
-h u -33496
-h b -33496
-h y -33496
-h v -33496
-h w -33496
-k a -66992
-k e -33496
-k a -33496
-k o -33496
-k c -33496
-m t -33496
-m u -33496
-m b -33496
-m y -33496
-m v -33496
-m w -33496
-n t -33496
-n u -33496
-n b -33496
-n y -33496
-n v -33496
-n w -33496
-o e 33496
-o o 33496
-o x -33496
-o d 33496
-o c 33496
-o q 33496
-o v -33496
-o j 66992
-o y -33496
-o w -33496
-p e 33496
-p o 33496
-p x -33496
-p d 33496
-p c 33496
-p q 33496
-p v -33496
-p j 66992
-p y -33496
-p w -33496
-t y -33496
-t w -33496
-u w -33496
-v a -66992
-v e -33496
-v a -33496
-v o -33496
-v c -33496
-w e -33496
-w a -33496
-w o -33496
-w c -33496
-y o -33496
-y e -33496
-y a -33496
-y . -100488
-y , -100488
-charset
-*G 725261,719440,0,0,0,-167480 2 0000
-*D 1004880,719440 2 0001
-*H 937888,719440,0,0,-33496,-33496 2 0002
-*L 844682,719440 2 0003
-*C 803904,719440 2 0004
-*P 943714,719440 2 0005
-*S 870896,719440 2 0006
-*U 937888,719440,0,0,-33496,-167480 2 0007
-*F 870896,719440,0,0,-33496 2 0010
-*Q 937888,719440,0,0,-33496,-83741 2 0011
-*W 870896,719440 2 0012
-ff 703416,728178,0,114323 2 0013
-fi 669920,728178 2 0014
-fl 669920,728178 2 0015
-Fi 1004880,728178 2 0016
-Fl 1004880,728178 2 0017
-.i 334960,466034 0 0020
-.j 368456,466034,203890 1 0021
-ga 602928,728178 2 0022
-aa 602928,728178 2 0023
-ah 602928,662642 2 0024
-ab 602928,728178 2 0025
-a- 602928,625066 2 0026
-ao 911674,728178 2 0027
-ac 535936,0,178403 1 0030
-ss 626230,728178 2 0031
-ae 870896,466034 0 0032
-oe 937888,466034 0 0033
-/o 602928,567979,101946 3 0034
-AE 1092261,719440 2 0035
-OE 1226245,719440 2 0036
-/O 937888,770413,50973 3 0037
-slash@for@l 334960,466034 0 0040
-! 367000,728178 2 0041
-rq 632056,728178 2 0042
-sh 1004880,728178,203888 3 0043
-# "
-Do 602928,786432,58254 3 0044
-$ "
-% 1004880,786432,58254 3 0045
-& 937888,728178 2 0046
-cq 334960,728178 2 0047
-' "
-( 468944,786432,262144 3 0050
-) 468944,786432,262144 3 0051
-* 602928,786432 2 0052
-+ 937888,664096,139808 3 0053
-, 334960,163112,203890 1 0054
-hy 401952,466034 0 0055
-- "
-. 334960,163112 0 0056
-sl 602928,786432,262144 3 0057
-/ "
-0 602928,675749 2 0060
-1 602928,675749 2 0061
-2 602928,675749 2 0062
-3 602928,675749 2 0063
-4 602928,675749 2 0064
-5 602928,675749 2 0065
-6 602928,675749 2 0066
-7 602928,675749 2 0067
-8 602928,675749 2 0070
-9 602928,675749 2 0071
-: 334960,466034 0 0072
-; 334960,466034,203890 1 0073
-r! 367000,524288,203890 3 0074
-= 937888,410110,-114178 0 0075
-r? 569432,524288,203890 3 0076
-? 569432,728178 2 0077
-at 937888,728178 2 0100
-@ "
-A 911674,719440 2 0101
-B 857789,719440 2 0102
-C 870896,719440,0,0,-33496 2 0103
-D 924781,719440,0,0,0,-33496 2 0104
-E 792253,719440 2 0105
-F 758757,719440,0,0,0,-167480 2 0106
-G 948083,719440,0,0,-33496 2 0107
-H 943714,719440 2 0110
-I 457294,719440 2 0111
-J 623317,719440,0,0,0,-33496 2 0112
-K 945170,719440 2 0113
-L 725261,719440,0,0,0,66992 2 0114
-M 1144690,719440 2 0115
-N 943714,719440 2 0116
-O 905848,719440,0,0,-33496,-33496 2 0117
-P 824293,719440,0,0,0,-167480 2 0120
-Q 905848,719440,203890,0,-33496 3 0121
-R 904392,719440 2 0122
-S 669920,719440 2 0123
-T 838856,719440,0,0,0,-167480 2 0124
-U 927694,719440,0,0,-20389 2 0125
-V 911674,719440,0,16749,50245,-251219 2 0126
-W 1246634,719440,0,16749,50245,-150731 2 0127
-X 911674,719440 2 0130
-Y 911674,719440,0,30146,33496,-237822 2 0131
-Z 736912,719440 2 0132
-lB 334960,786432,262144 3 0133
-[ "
-lq 632056,728178 2 0134
-rB 334960,786432,262144 3 0135
-] "
-ha 602928,728178 2 0136
-^ "
-a^ "
-a. 334960,728178 2 0137
-oq 334960,728178 2 0140
-` "
-a 586179,466034 0 0141
-b 669920,728178 2 0142
-c 535936,466034 0 0143
-d 669920,728178 2 0144
-e 552685,466034 0 0145
-f 368456,728178,0,114323 2 0146
-g 602928,466034,203890,16749 1 0147
-h 669920,728178 2 0150
-i 334960,728178 2 0151
-j 368456,728178,203890 3 0152
-k 636424,728178 2 0153
-l 334960,728178 2 0154
-m 1004880,466034 0 0155
-n 669920,466034 0 0156
-o 602928,466034 0 0157
-p 669920,466034,203890 1 0160
-q 636424,466034,203890 1 0161
-r 496616,466034 0 0162
-s 475643,466034 0 0163
-t 468944,665763 2 0164
-u 669920,466034 0 0165
-v 636424,466034,0,16749 0 0166
-w 870896,466034,0,16749 0 0167
-x 636424,466034 0 0170
-y 636424,466034,203890,16749 1 0171
-z 535936,466034 0 0172
-en 602928,466034,0,33496 0 0173
-em 1205856,466034,0,33496 0 0174
-a" 602928,728178 2 0175
-~ 602928,728178 2 0176
-a~ "
-ad 602928,728178 2 0177
diff --git a/contrib/groff/font/devdvi/TBEC b/contrib/groff/font/devdvi/TBEC
deleted file mode 100644
index 7ee1a6992d41..000000000000
--- a/contrib/groff/font/devdvi/TBEC
+++ /dev/null
@@ -1,2306 +0,0 @@
-name TBEC
-internalname ecbx1000
-spacewidth 401856
-ligatures ff fi fl ffi ffl 0
-checksum 39675532
-designsize 10485760
-kernpairs
-bq Bq 133952
-bq j 133952
-bq .j 133952
-bq g 66976
-bq u0067_0306 66976
-bq y 66976
-bq :y 66976
-bq 'y 66976
-bq v -100464
-bq w -66976
-bq V -133952
-bq W -100464
-bq Y -100464
-bq :Y -100464
-bq 'Y -100464
-bq O -33488
-bq u004F_030B -33488
-bq `O -33488
-bq 'O -33488
-bq ^O -33488
-bq ~O -33488
-bq :O -33488
-bq OE -33488
-bq /O -33488
-bq C -33488
-bq G -33488
-bq 'C -33488
-bq u0043_030C -33488
-bq u0047_0306 -33488
-bq ,C -33488
-bq Q -33488
-lq oq 133952
-lq ` 133952
-lq lq 133952
-rq cq 133952
-rq ' 133952
-rq rq 133952
-Bq bq 133952
-Bq , 133952
-Bq Bq 133952
-Bq j 133952
-Bq .j 133952
-Bq g 66976
-Bq u0067_0306 66976
-Bq y 66976
-Bq :y 66976
-Bq 'y 66976
-Bq v -100464
-Bq w -66976
-Bq V -133952
-Bq W -100464
-Bq Y -100464
-Bq :Y -100464
-Bq 'Y -100464
-Bq O -33488
-Bq u004F_030B -33488
-Bq `O -33488
-Bq 'O -33488
-Bq ^O -33488
-Bq ~O -33488
-Bq :O -33488
-Bq OE -33488
-Bq /O -33488
-Bq C -33488
-Bq G -33488
-Bq 'C -33488
-Bq u0043_030C -33488
-Bq u0047_0306 -33488
-Bq ,C -33488
-Bq Q -33488
-Fc . -100464
-Fc , -100464
-ff cq 114296
-ff ' 114296
-ff oq 114296
-ff ` 114296
-ff lq 114296
-ff rq 114296
-ff ? 114296
-ff u01C3 114296
-ff ! 114296
-ff ) 114296
-ff rB 114296
-ff ] 114296
-cq rq 133952
-' rq 133952
-cq ? 133952
-' ? 133952
-cq u01C3 133952
-cq ! 133952
-' u01C3 133952
-' ! 133952
-A y -100464
-A :y -100464
-A 'y -100464
-A v -133952
-A w -100464
-A c -33488
-A 'c -33488
-A u0063_030C -33488
-A ,c -33488
-A d -33488
-A u0064_030C -33488
-A u0111 -33488
-A Sd -33488
-A e -33488
-A u0065_030C -33488
-A u0065_0328 -33488
-A `e -33488
-A 'e -33488
-A ^e -33488
-A :e -33488
-A o -33488
-A u006F_030B -33488
-A `o -33488
-A 'o -33488
-A ^o -33488
-A ~o -33488
-A :o -33488
-A oe -33488
-A /o -33488
-A q -33488
-A t -33488
-A u0074_030C -33488
-A u0074_0327 -33488
-A C -33488
-A G -33488
-A 'C -33488
-A u0043_030C -33488
-A u0047_0306 -33488
-A ,C -33488
-A Q -33488
-A O -33488
-A u004F_030B -33488
-A `O -33488
-A 'O -33488
-A ^O -33488
-A ~O -33488
-A :O -33488
-A OE -33488
-A /O -33488
-A U -33488
-A u0055_030B -33488
-A u0055_030A -33488
-A `U -33488
-A 'U -33488
-A ^U -33488
-A :U -33488
-A T -100464
-A u0054_030C -100464
-A u0054_0327 -100464
-A Y -100464
-A :Y -100464
-A 'Y -100464
-A V -133952
-A W -133952
-D X -33488
-D W -33488
-D A -33488
-D u0041_0306 -33488
-D u0041_0328 -33488
-D `A -33488
-D 'A -33488
-D ^A -33488
-D ~A -33488
-D :A -33488
-D oA -33488
-D AE -33488
-D V -33488
-D Y -33488
-D :Y -33488
-D 'Y -33488
-F o -100464
-F a -100464
-F e -100464
-F y -100464
-F u -100464
-F r -100464
-F v -100464
-F s -100464
-F c -100464
-F d -100464
-F g -100464
-F m -100464
-F n -100464
-F p -100464
-F w -100464
-F z -100464
-F ae -100464
-F /o -100464
-F A -133952
-F u0041_0306 -133952
-F u0041_0328 -133952
-F `A -133952
-F 'A -133952
-F ^A -133952
-F ~A -133952
-F :A -133952
-F oA -133952
-F AE -133952
-F O -33488
-F u004F_030B -33488
-F `O -33488
-F 'O -33488
-F ^O -33488
-F ~O -33488
-F :O -33488
-F OE -33488
-F /O -33488
-F C -33488
-F G -33488
-F 'C -33488
-F u0043_030C -33488
-F u0047_0306 -33488
-F ,C -33488
-F Q -33488
-I I 33488
-K v -100464
-K w -33488
-K o -33488
-K u006F_030B -33488
-K `o -33488
-K 'o -33488
-K ^o -33488
-K ~o -33488
-K :o -33488
-K oe -33488
-K /o -33488
-K C -33488
-K G -33488
-K 'C -33488
-K u0043_030C -33488
-K u0047_0306 -33488
-K ,C -33488
-K Q -33488
-L T -100464
-L u0054_030C -100464
-L u0054_0327 -100464
-L Y -100464
-L :Y -100464
-L 'Y -100464
-L V -133952
-L W -133952
-O X -33488
-O W -33488
-O A -33488
-O u0041_0306 -33488
-O u0041_0328 -33488
-O `A -33488
-O 'A -33488
-O ^A -33488
-O ~A -33488
-O :A -33488
-O oA -33488
-O AE -33488
-O V -33488
-O Y -33488
-O :Y -33488
-O 'Y -33488
-P A -100464
-P u0041_0306 -100464
-P u0041_0328 -100464
-P `A -100464
-P 'A -100464
-P ^A -100464
-P ~A -100464
-P :A -100464
-P oA -100464
-P AE -100464
-P o -33488
-P u006F_030B -33488
-P `o -33488
-P 'o -33488
-P ^o -33488
-P ~o -33488
-P :o -33488
-P oe -33488
-P /o -33488
-P e -33488
-P u0065_030C -33488
-P u0065_0328 -33488
-P `e -33488
-P 'e -33488
-P ^e -33488
-P :e -33488
-P a -33488
-P u0061_0306 -33488
-P u0061_0328 -33488
-P `a -33488
-P 'a -33488
-P ^a -33488
-P ^a -33488
-P ~a -33488
-P :a -33488
-P oa -33488
-P ae -33488
-P . -100464
-P , -100464
-R t -33488
-R u0074_030C -33488
-R u0074_0327 -33488
-R C -33488
-R G -33488
-R 'C -33488
-R u0043_030C -33488
-R u0047_0306 -33488
-R ,C -33488
-R Q -33488
-R O -33488
-R u004F_030B -33488
-R `O -33488
-R 'O -33488
-R ^O -33488
-R ~O -33488
-R :O -33488
-R OE -33488
-R /O -33488
-R U -33488
-R u0055_030B -33488
-R u0055_030A -33488
-R `U -33488
-R 'U -33488
-R ^U -33488
-R :U -33488
-R T -100464
-R u0054_030C -100464
-R u0054_0327 -100464
-R Y -100464
-R :Y -100464
-R 'Y -100464
-R V -133952
-R W -133952
-T y -33488
-T e -100464
-T o -100464
-T r -100464
-T a -100464
-T u -100464
-T n -100464
-T .i -100464
-T c -100464
-T d -100464
-T g -100464
-T p -100464
-T s -100464
-T v -100464
-T w -100464
-T x -100464
-T z -100464
-T A -100464
-T u0041_0306 -100464
-T u0041_0328 -100464
-T `A -100464
-T 'A -100464
-T ^A -100464
-T ~A -100464
-T :A -100464
-T oA -100464
-T AE -100464
-V o -100464
-V a -100464
-V e -100464
-V y -100464
-V u -100464
-V r -100464
-V v -100464
-V s -100464
-V c -100464
-V d -100464
-V g -100464
-V m -100464
-V n -100464
-V p -100464
-V w -100464
-V z -100464
-V ae -100464
-V /o -100464
-V A -133952
-V u0041_0306 -133952
-V u0041_0328 -133952
-V `A -133952
-V 'A -133952
-V ^A -133952
-V ~A -133952
-V :A -133952
-V oA -133952
-V AE -133952
-V O -33488
-V u004F_030B -33488
-V `O -33488
-V 'O -33488
-V ^O -33488
-V ~O -33488
-V :O -33488
-V OE -33488
-V /O -33488
-V C -33488
-V G -33488
-V 'C -33488
-V u0043_030C -33488
-V u0047_0306 -33488
-V ,C -33488
-V Q -33488
-W o -100464
-W a -100464
-W e -100464
-W y -100464
-W u -100464
-W r -100464
-W v -100464
-W s -100464
-W c -100464
-W d -100464
-W g -100464
-W m -100464
-W n -100464
-W p -100464
-W w -100464
-W z -100464
-W ae -100464
-W /o -100464
-W A -133952
-W u0041_0306 -133952
-W u0041_0328 -133952
-W `A -133952
-W 'A -133952
-W ^A -133952
-W ~A -133952
-W :A -133952
-W oA -133952
-W AE -133952
-W O -33488
-W u004F_030B -33488
-W `O -33488
-W 'O -33488
-W ^O -33488
-W ~O -33488
-W :O -33488
-W OE -33488
-W /O -33488
-W C -33488
-W G -33488
-W 'C -33488
-W u0043_030C -33488
-W u0047_0306 -33488
-W ,C -33488
-W Q -33488
-X O -33488
-X u004F_030B -33488
-X `O -33488
-X 'O -33488
-X ^O -33488
-X ~O -33488
-X :O -33488
-X OE -33488
-X /O -33488
-X C -33488
-X G -33488
-X 'C -33488
-X u0043_030C -33488
-X u0047_0306 -33488
-X ,C -33488
-X Q -33488
-Y e -100464
-Y o -100464
-Y r -100464
-Y a -100464
-Y u -100464
-Y n -100464
-Y .i -100464
-Y c -100464
-Y d -100464
-Y g -100464
-Y p -100464
-Y s -100464
-Y v -100464
-Y w -100464
-Y x -100464
-Y z -100464
-Y A -100464
-Y u0041_0306 -100464
-Y u0041_0328 -100464
-Y `A -100464
-Y 'A -100464
-Y ^A -100464
-Y ~A -100464
-Y :A -100464
-Y oA -100464
-Y AE -100464
-oq lq 133952
-` lq 133952
-oq ? 133952
-` ? 133952
-oq u01C3 133952
-oq ! 133952
-` u01C3 133952
-` ! 133952
-a v -33488
-a j 66976
-a y -33488
-a :y -33488
-a 'y -33488
-a w -33488
-b e 33488
-b u0065_030C 33488
-b u0065_0328 33488
-b `e 33488
-b 'e 33488
-b ^e 33488
-b :e 33488
-b o 33488
-b u006F_030B 33488
-b `o 33488
-b 'o 33488
-b ^o 33488
-b ~o 33488
-b :o 33488
-b oe 33488
-b /o 33488
-b x -33488
-b d 33488
-b c 33488
-b 'c 33488
-b u0063_030C 33488
-b ,c 33488
-b q 33488
-b v -33488
-b j 66976
-b y -33488
-b :y -33488
-b 'y -33488
-b w -33488
-c h -33488
-c k -33488
-e V -100464
-f cq 114296
-f ' 114296
-f oq 114296
-f ` 114296
-f lq 114296
-f rq 114296
-f ? 114296
-f u01C3 114296
-f ! 114296
-f ) 114296
-f rB 114296
-f ] 114296
-g j 33488
-h W -100464
-h V -100464
-h t -33488
-h u -33488
-h u0075_030B -33488
-h u0075_030A -33488
-h `u -33488
-h 'u -33488
-h ^u -33488
-h :u -33488
-h b -33488
-h y -33488
-h v -33488
-h w -33488
-k W -100464
-k V -100464
-k a -66976
-k u0061_0306 -66976
-k u0061_0328 -66976
-k `a -66976
-k 'a -66976
-k ^a -66976
-k ^a -66976
-k ~a -66976
-k :a -66976
-k oa -66976
-k ae -66976
-k e -33488
-k u0065_030C -33488
-k u0065_0328 -33488
-k `e -33488
-k 'e -33488
-k ^e -33488
-k :e -33488
-k a -33488
-k u0061_0306 -33488
-k u0061_0328 -33488
-k `a -33488
-k 'a -33488
-k ^a -33488
-k ^a -33488
-k ~a -33488
-k :a -33488
-k oa -33488
-k ae -33488
-k o -33488
-k u006F_030B -33488
-k `o -33488
-k 'o -33488
-k ^o -33488
-k ~o -33488
-k :o -33488
-k oe -33488
-k /o -33488
-k c -33488
-k 'c -33488
-k u0063_030C -33488
-k ,c -33488
-m W -100464
-m V -100464
-m t -33488
-m u -33488
-m u0075_030B -33488
-m u0075_030A -33488
-m `u -33488
-m 'u -33488
-m ^u -33488
-m :u -33488
-m b -33488
-m y -33488
-m v -33488
-m w -33488
-n W -100464
-n V -100464
-n t -33488
-n u -33488
-n u0075_030B -33488
-n u0075_030A -33488
-n `u -33488
-n 'u -33488
-n ^u -33488
-n :u -33488
-n b -33488
-n y -33488
-n v -33488
-n w -33488
-o e 33488
-o u0065_030C 33488
-o u0065_0328 33488
-o `e 33488
-o 'e 33488
-o ^e 33488
-o :e 33488
-o o 33488
-o u006F_030B 33488
-o `o 33488
-o 'o 33488
-o ^o 33488
-o ~o 33488
-o :o 33488
-o oe 33488
-o /o 33488
-o x -33488
-o d 33488
-o c 33488
-o 'c 33488
-o u0063_030C 33488
-o ,c 33488
-o q 33488
-o v -33488
-o j 66976
-o y -33488
-o :y -33488
-o 'y -33488
-o w -33488
-p e 33488
-p u0065_030C 33488
-p u0065_0328 33488
-p `e 33488
-p 'e 33488
-p ^e 33488
-p :e 33488
-p o 33488
-p u006F_030B 33488
-p `o 33488
-p 'o 33488
-p ^o 33488
-p ~o 33488
-p :o 33488
-p oe 33488
-p /o 33488
-p x -33488
-p d 33488
-p c 33488
-p 'c 33488
-p u0063_030C 33488
-p ,c 33488
-p q 33488
-p v -33488
-p j 66976
-p y -33488
-p :y -33488
-p 'y -33488
-p w -33488
-t y -33488
-t :y -33488
-t 'y -33488
-t w -33488
-u w -33488
-v a -66976
-v u0061_0306 -66976
-v u0061_0328 -66976
-v `a -66976
-v 'a -66976
-v ^a -66976
-v ^a -66976
-v ~a -66976
-v :a -66976
-v oa -66976
-v ae -66976
-v e -33488
-v u0065_030C -33488
-v u0065_0328 -33488
-v `e -33488
-v 'e -33488
-v ^e -33488
-v :e -33488
-v a -33488
-v u0061_0306 -33488
-v u0061_0328 -33488
-v `a -33488
-v 'a -33488
-v ^a -33488
-v ^a -33488
-v ~a -33488
-v :a -33488
-v oa -33488
-v ae -33488
-v o -33488
-v u006F_030B -33488
-v `o -33488
-v 'o -33488
-v ^o -33488
-v ~o -33488
-v :o -33488
-v oe -33488
-v /o -33488
-v c -33488
-v 'c -33488
-v u0063_030C -33488
-v ,c -33488
-w e -33488
-w u0065_030C -33488
-w u0065_0328 -33488
-w `e -33488
-w 'e -33488
-w ^e -33488
-w :e -33488
-w a -33488
-w u0061_0306 -33488
-w u0061_0328 -33488
-w `a -33488
-w 'a -33488
-w ^a -33488
-w ^a -33488
-w ~a -33488
-w :a -33488
-w oa -33488
-w ae -33488
-w o -33488
-w u006F_030B -33488
-w `o -33488
-w 'o -33488
-w ^o -33488
-w ~o -33488
-w :o -33488
-w oe -33488
-w /o -33488
-w c -33488
-w 'c -33488
-w u0063_030C -33488
-w ,c -33488
-y o -33488
-y u006F_030B -33488
-y `o -33488
-y 'o -33488
-y ^o -33488
-y ~o -33488
-y :o -33488
-y oe -33488
-y /o -33488
-y e -33488
-y u0065_030C -33488
-y u0065_0328 -33488
-y `e -33488
-y 'e -33488
-y ^e -33488
-y :e -33488
-y a -33488
-y u0061_0306 -33488
-y u0061_0328 -33488
-y `a -33488
-y 'a -33488
-y ^a -33488
-y ^a -33488
-y ~a -33488
-y :a -33488
-y oa -33488
-y ae -33488
-y . -100464
-y , -100464
-u0041_0306 y -100464
-u0041_0306 :y -100464
-u0041_0306 'y -100464
-u0041_0306 v -133952
-u0041_0306 w -100464
-u0041_0306 c -33488
-u0041_0306 'c -33488
-u0041_0306 u0063_030C -33488
-u0041_0306 ,c -33488
-u0041_0306 d -33488
-u0041_0306 u0064_030C -33488
-u0041_0306 u0111 -33488
-u0041_0306 Sd -33488
-u0041_0306 e -33488
-u0041_0306 u0065_030C -33488
-u0041_0306 u0065_0328 -33488
-u0041_0306 `e -33488
-u0041_0306 'e -33488
-u0041_0306 ^e -33488
-u0041_0306 :e -33488
-u0041_0306 o -33488
-u0041_0306 u006F_030B -33488
-u0041_0306 `o -33488
-u0041_0306 'o -33488
-u0041_0306 ^o -33488
-u0041_0306 ~o -33488
-u0041_0306 :o -33488
-u0041_0306 oe -33488
-u0041_0306 /o -33488
-u0041_0306 q -33488
-u0041_0306 t -33488
-u0041_0306 u0074_030C -33488
-u0041_0306 u0074_0327 -33488
-u0041_0306 C -33488
-u0041_0306 G -33488
-u0041_0306 'C -33488
-u0041_0306 u0043_030C -33488
-u0041_0306 u0047_0306 -33488
-u0041_0306 ,C -33488
-u0041_0306 Q -33488
-u0041_0306 O -33488
-u0041_0306 u004F_030B -33488
-u0041_0306 `O -33488
-u0041_0306 'O -33488
-u0041_0306 ^O -33488
-u0041_0306 ~O -33488
-u0041_0306 :O -33488
-u0041_0306 OE -33488
-u0041_0306 /O -33488
-u0041_0306 U -33488
-u0041_0306 u0055_030B -33488
-u0041_0306 u0055_030A -33488
-u0041_0306 `U -33488
-u0041_0306 'U -33488
-u0041_0306 ^U -33488
-u0041_0306 :U -33488
-u0041_0306 T -100464
-u0041_0306 u0054_030C -100464
-u0041_0306 u0054_0327 -100464
-u0041_0306 Y -100464
-u0041_0306 :Y -100464
-u0041_0306 'Y -100464
-u0041_0306 V -133952
-u0041_0306 W -133952
-'C v -133952
-'C w -100464
-'C c -33488
-'C 'c -33488
-'C u0063_030C -33488
-'C ,c -33488
-'C d -33488
-'C u0064_030C -33488
-'C u0111 -33488
-'C Sd -33488
-'C e -33488
-'C u0065_030C -33488
-'C u0065_0328 -33488
-'C `e -33488
-'C 'e -33488
-'C ^e -33488
-'C :e -33488
-'C o -33488
-'C u006F_030B -33488
-'C `o -33488
-'C 'o -33488
-'C ^o -33488
-'C ~o -33488
-'C :o -33488
-'C oe -33488
-'C /o -33488
-'C q -33488
-'C t -33488
-'C u0074_030C -33488
-'C u0074_0327 -33488
-'C C -33488
-'C G -33488
-'C 'C -33488
-'C u0043_030C -33488
-'C u0047_0306 -33488
-'C ,C -33488
-'C Q -33488
-'C O -33488
-'C u004F_030B -33488
-'C `O -33488
-'C 'O -33488
-'C ^O -33488
-'C ~O -33488
-'C :O -33488
-'C OE -33488
-'C /O -33488
-'C U -33488
-'C u0055_030B -33488
-'C u0055_030A -33488
-'C `U -33488
-'C 'U -33488
-'C ^U -33488
-'C :U -33488
-'C T -100464
-'C u0054_030C -100464
-'C u0054_0327 -100464
-'C Y -100464
-'C :Y -100464
-'C 'Y -100464
-'C V -133952
-'C W -133952
-u0044_030C X -33488
-u0044_030C W -33488
-u0044_030C A -33488
-u0044_030C u0041_0306 -33488
-u0044_030C u0041_0328 -33488
-u0044_030C `A -33488
-u0044_030C 'A -33488
-u0044_030C ^A -33488
-u0044_030C ~A -33488
-u0044_030C :A -33488
-u0044_030C oA -33488
-u0044_030C AE -33488
-u0044_030C V -33488
-u0044_030C Y -33488
-u0044_030C :Y -33488
-u0044_030C 'Y -33488
-u004C_0301 T -100464
-u004C_0301 u0054_030C -100464
-u004C_0301 u0054_0327 -100464
-u004C_0301 Y -100464
-u004C_0301 :Y -100464
-u004C_0301 'Y -100464
-u004C_0301 V -133952
-u004C_0301 W -133952
-u004C_030C T -100464
-u004C_030C u0054_030C -100464
-u004C_030C u0054_0327 -100464
-u004C_030C Y -100464
-u004C_030C :Y -100464
-u004C_030C 'Y -100464
-u004C_030C V -133952
-u004C_030C W -133952
-/L T -100464
-/L u0054_030C -100464
-/L u0054_0327 -100464
-/L Y -100464
-/L :Y -100464
-/L 'Y -100464
-/L V -133952
-/L W -133952
-u004F_030B X -33488
-u004F_030B W -33488
-u004F_030B A -33488
-u004F_030B u0041_0306 -33488
-u004F_030B u0041_0328 -33488
-u004F_030B `A -33488
-u004F_030B 'A -33488
-u004F_030B ^A -33488
-u004F_030B ~A -33488
-u004F_030B :A -33488
-u004F_030B oA -33488
-u004F_030B AE -33488
-u004F_030B V -33488
-u004F_030B Y -33488
-u004F_030B :Y -33488
-u004F_030B 'Y -33488
-u0052_0301 t -33488
-u0052_0301 u0074_030C -33488
-u0052_0301 u0074_0327 -33488
-u0052_0301 C -33488
-u0052_0301 G -33488
-u0052_0301 'C -33488
-u0052_0301 u0043_030C -33488
-u0052_0301 u0047_0306 -33488
-u0052_0301 ,C -33488
-u0052_0301 Q -33488
-u0052_0301 O -33488
-u0052_0301 u004F_030B -33488
-u0052_0301 `O -33488
-u0052_0301 'O -33488
-u0052_0301 ^O -33488
-u0052_0301 ~O -33488
-u0052_0301 :O -33488
-u0052_0301 OE -33488
-u0052_0301 /O -33488
-u0052_0301 U -33488
-u0052_0301 u0055_030B -33488
-u0052_0301 u0055_030A -33488
-u0052_0301 `U -33488
-u0052_0301 'U -33488
-u0052_0301 ^U -33488
-u0052_0301 :U -33488
-u0052_0301 T -100464
-u0052_0301 u0054_030C -100464
-u0052_0301 u0054_0327 -100464
-u0052_0301 Y -100464
-u0052_0301 :Y -100464
-u0052_0301 'Y -100464
-u0052_0301 V -133952
-u0052_0301 W -133952
-u0054_030C y -33488
-u0054_030C e -100464
-u0054_030C o -100464
-u0054_030C r -100464
-u0054_030C a -100464
-u0054_030C u -100464
-u0054_030C n -100464
-u0054_030C .i -100464
-u0054_030C c -100464
-u0054_030C d -100464
-u0054_030C g -100464
-u0054_030C p -100464
-u0054_030C s -100464
-u0054_030C v -100464
-u0054_030C w -100464
-u0054_030C x -100464
-u0054_030C z -100464
-u0054_030C A -100464
-u0054_030C u0041_0306 -100464
-u0054_030C u0041_0328 -100464
-u0054_030C `A -100464
-u0054_030C 'A -100464
-u0054_030C ^A -100464
-u0054_030C ~A -100464
-u0054_030C :A -100464
-u0054_030C oA -100464
-u0054_030C AE -100464
-u0054_0327 y -33488
-u0054_0327 e -100464
-u0054_0327 o -100464
-u0054_0327 r -100464
-u0054_0327 a -100464
-u0054_0327 u -100464
-u0054_0327 n -100464
-u0054_0327 .i -100464
-u0054_0327 c -100464
-u0054_0327 d -100464
-u0054_0327 g -100464
-u0054_0327 p -100464
-u0054_0327 s -100464
-u0054_0327 v -100464
-u0054_0327 w -100464
-u0054_0327 x -100464
-u0054_0327 z -100464
-u0054_0327 A -100464
-u0054_0327 u0041_0306 -100464
-u0054_0327 u0041_0328 -100464
-u0054_0327 `A -100464
-u0054_0327 'A -100464
-u0054_0327 ^A -100464
-u0054_0327 ~A -100464
-u0054_0327 :A -100464
-u0054_0327 oA -100464
-u0054_0327 AE -100464
-:Y e -100464
-:Y o -100464
-:Y r -100464
-:Y a -100464
-:Y u -100464
-:Y n -100464
-:Y .i -100464
-:Y c -100464
-:Y d -100464
-:Y g -100464
-:Y p -100464
-:Y s -100464
-:Y v -100464
-:Y w -100464
-:Y x -100464
-:Y z -100464
-:Y A -100464
-:Y u0041_0306 -100464
-:Y u0041_0328 -100464
-:Y `A -100464
-:Y 'A -100464
-:Y ^A -100464
-:Y ~A -100464
-:Y :A -100464
-:Y oA -100464
-:Y AE -100464
-u0061_0306 v -33488
-u0061_0306 j 66976
-u0061_0306 y -33488
-u0061_0306 :y -33488
-u0061_0306 'y -33488
-u0061_0306 w -33488
-u0061_0328 g 33488
-u0061_0328 p 33488
-u0061_0328 w -33488
-'c h -33488
-'c k -33488
-u0063_030C h -33488
-u0063_030C k -33488
-/l cq 33488
-/l ' 33488
-u006E_0301 t -33488
-u006E_0301 u -33488
-u006E_0301 u0075_030B -33488
-u006E_0301 u0075_030A -33488
-u006E_0301 `u -33488
-u006E_0301 'u -33488
-u006E_0301 ^u -33488
-u006E_0301 :u -33488
-u006E_0301 b -33488
-u006E_0301 y -33488
-u006E_0301 v -33488
-u006E_0301 w -33488
-u006E_030C t -33488
-u006E_030C u -33488
-u006E_030C u0075_030B -33488
-u006E_030C u0075_030A -33488
-u006E_030C `u -33488
-u006E_030C 'u -33488
-u006E_030C ^u -33488
-u006E_030C :u -33488
-u006E_030C b -33488
-u006E_030C y -33488
-u006E_030C v -33488
-u006E_030C w -33488
-u016A t -33488
-u016A u -33488
-u016A u0075_030B -33488
-u016A u0075_030A -33488
-u016A `u -33488
-u016A 'u -33488
-u016A ^u -33488
-u016A :u -33488
-u016A b -33488
-u016A y -33488
-u016A v -33488
-u016A w -33488
-u006F_030B e 33488
-u006F_030B u0065_030C 33488
-u006F_030B u0065_0328 33488
-u006F_030B `e 33488
-u006F_030B 'e 33488
-u006F_030B ^e 33488
-u006F_030B :e 33488
-u006F_030B o 33488
-u006F_030B u006F_030B 33488
-u006F_030B `o 33488
-u006F_030B 'o 33488
-u006F_030B ^o 33488
-u006F_030B ~o 33488
-u006F_030B :o 33488
-u006F_030B oe 33488
-u006F_030B /o 33488
-u006F_030B x -33488
-u006F_030B d 33488
-u006F_030B c 33488
-u006F_030B 'c 33488
-u006F_030B u0063_030C 33488
-u006F_030B ,c 33488
-u006F_030B q 33488
-u006F_030B v -33488
-u006F_030B j 66976
-u006F_030B y -33488
-u006F_030B :y -33488
-u006F_030B 'y -33488
-u006F_030B w -33488
-u0074_030C y -33488
-u0074_030C :y -33488
-u0074_030C 'y -33488
-u0074_030C w -33488
-u0074_0327 y -33488
-u0074_0327 :y -33488
-u0074_0327 'y -33488
-u0074_0327 w -33488
-u0075_030B w -33488
-u0075_030A w -33488
-:y o -33488
-:y u006F_030B -33488
-:y `o -33488
-:y 'o -33488
-:y ^o -33488
-:y ~o -33488
-:y :o -33488
-:y oe -33488
-:y /o -33488
-:y e -33488
-:y u0065_030C -33488
-:y u0065_0328 -33488
-:y `e -33488
-:y 'e -33488
-:y ^e -33488
-:y :e -33488
-:y a -33488
-:y u0061_0306 -33488
-:y u0061_0328 -33488
-:y `a -33488
-:y 'a -33488
-:y ^a -33488
-:y ^a -33488
-:y ~a -33488
-:y :a -33488
-:y oa -33488
-:y ae -33488
-:y . -100464
-:y , -100464
-`A y -100464
-`A :y -100464
-`A 'y -100464
-`A v -133952
-`A w -100464
-`A c -33488
-`A 'c -33488
-`A u0063_030C -33488
-`A ,c -33488
-`A d -33488
-`A u0064_030C -33488
-`A u0111 -33488
-`A Sd -33488
-`A e -33488
-`A u0065_030C -33488
-`A u0065_0328 -33488
-`A `e -33488
-`A 'e -33488
-`A ^e -33488
-`A :e -33488
-`A o -33488
-`A u006F_030B -33488
-`A `o -33488
-`A 'o -33488
-`A ^o -33488
-`A ~o -33488
-`A :o -33488
-`A oe -33488
-`A /o -33488
-`A q -33488
-`A t -33488
-`A u0074_030C -33488
-`A u0074_0327 -33488
-`A C -33488
-`A G -33488
-`A 'C -33488
-`A u0043_030C -33488
-`A u0047_0306 -33488
-`A ,C -33488
-`A Q -33488
-`A O -33488
-`A u004F_030B -33488
-`A `O -33488
-`A 'O -33488
-`A ^O -33488
-`A ~O -33488
-`A :O -33488
-`A OE -33488
-`A /O -33488
-`A U -33488
-`A u0055_030B -33488
-`A u0055_030A -33488
-`A `U -33488
-`A 'U -33488
-`A ^U -33488
-`A :U -33488
-`A T -100464
-`A u0054_030C -100464
-`A u0054_0327 -100464
-`A Y -100464
-`A :Y -100464
-`A 'Y -100464
-`A V -133952
-`A W -133952
-'A y -100464
-'A :y -100464
-'A 'y -100464
-'A v -133952
-'A w -100464
-'A c -33488
-'A 'c -33488
-'A u0063_030C -33488
-'A ,c -33488
-'A d -33488
-'A u0064_030C -33488
-'A u0111 -33488
-'A Sd -33488
-'A e -33488
-'A u0065_030C -33488
-'A u0065_0328 -33488
-'A `e -33488
-'A 'e -33488
-'A ^e -33488
-'A :e -33488
-'A o -33488
-'A u006F_030B -33488
-'A `o -33488
-'A 'o -33488
-'A ^o -33488
-'A ~o -33488
-'A :o -33488
-'A oe -33488
-'A /o -33488
-'A q -33488
-'A t -33488
-'A u0074_030C -33488
-'A u0074_0327 -33488
-'A C -33488
-'A G -33488
-'A 'C -33488
-'A u0043_030C -33488
-'A u0047_0306 -33488
-'A ,C -33488
-'A Q -33488
-'A O -33488
-'A u004F_030B -33488
-'A `O -33488
-'A 'O -33488
-'A ^O -33488
-'A ~O -33488
-'A :O -33488
-'A OE -33488
-'A /O -33488
-'A U -33488
-'A u0055_030B -33488
-'A u0055_030A -33488
-'A `U -33488
-'A 'U -33488
-'A ^U -33488
-'A :U -33488
-'A T -100464
-'A u0054_030C -100464
-'A u0054_0327 -100464
-'A Y -100464
-'A :Y -100464
-'A 'Y -100464
-'A V -133952
-'A W -133952
-^A y -100464
-^A :y -100464
-^A 'y -100464
-^A v -133952
-^A w -100464
-^A c -33488
-^A 'c -33488
-^A u0063_030C -33488
-^A ,c -33488
-^A d -33488
-^A u0064_030C -33488
-^A u0111 -33488
-^A Sd -33488
-^A e -33488
-^A u0065_030C -33488
-^A u0065_0328 -33488
-^A `e -33488
-^A 'e -33488
-^A ^e -33488
-^A :e -33488
-^A o -33488
-^A u006F_030B -33488
-^A `o -33488
-^A 'o -33488
-^A ^o -33488
-^A ~o -33488
-^A :o -33488
-^A oe -33488
-^A /o -33488
-^A q -33488
-^A t -33488
-^A u0074_030C -33488
-^A u0074_0327 -33488
-^A C -33488
-^A G -33488
-^A 'C -33488
-^A u0043_030C -33488
-^A u0047_0306 -33488
-^A ,C -33488
-^A Q -33488
-^A O -33488
-^A u004F_030B -33488
-^A `O -33488
-^A 'O -33488
-^A ^O -33488
-^A ~O -33488
-^A :O -33488
-^A OE -33488
-^A /O -33488
-^A U -33488
-^A u0055_030B -33488
-^A u0055_030A -33488
-^A `U -33488
-^A 'U -33488
-^A ^U -33488
-^A :U -33488
-^A T -100464
-^A u0054_030C -100464
-^A u0054_0327 -100464
-^A Y -100464
-^A :Y -100464
-^A 'Y -100464
-^A V -133952
-^A W -133952
-~A y -100464
-~A :y -100464
-~A 'y -100464
-~A v -133952
-~A w -100464
-~A c -33488
-~A 'c -33488
-~A u0063_030C -33488
-~A ,c -33488
-~A d -33488
-~A u0064_030C -33488
-~A u0111 -33488
-~A Sd -33488
-~A e -33488
-~A u0065_030C -33488
-~A u0065_0328 -33488
-~A `e -33488
-~A 'e -33488
-~A ^e -33488
-~A :e -33488
-~A o -33488
-~A u006F_030B -33488
-~A `o -33488
-~A 'o -33488
-~A ^o -33488
-~A ~o -33488
-~A :o -33488
-~A oe -33488
-~A /o -33488
-~A q -33488
-~A t -33488
-~A u0074_030C -33488
-~A u0074_0327 -33488
-~A C -33488
-~A G -33488
-~A 'C -33488
-~A u0043_030C -33488
-~A u0047_0306 -33488
-~A ,C -33488
-~A Q -33488
-~A O -33488
-~A u004F_030B -33488
-~A `O -33488
-~A 'O -33488
-~A ^O -33488
-~A ~O -33488
-~A :O -33488
-~A OE -33488
-~A /O -33488
-~A U -33488
-~A u0055_030B -33488
-~A u0055_030A -33488
-~A `U -33488
-~A 'U -33488
-~A ^U -33488
-~A :U -33488
-~A T -100464
-~A u0054_030C -100464
-~A u0054_0327 -100464
-~A Y -100464
-~A :Y -100464
-~A 'Y -100464
-~A V -133952
-~A W -133952
-:A y -100464
-:A :y -100464
-:A 'y -100464
-:A v -133952
-:A w -100464
-:A c -33488
-:A 'c -33488
-:A u0063_030C -33488
-:A ,c -33488
-:A d -33488
-:A u0064_030C -33488
-:A u0111 -33488
-:A Sd -33488
-:A e -33488
-:A u0065_030C -33488
-:A u0065_0328 -33488
-:A `e -33488
-:A 'e -33488
-:A ^e -33488
-:A :e -33488
-:A o -33488
-:A u006F_030B -33488
-:A `o -33488
-:A 'o -33488
-:A ^o -33488
-:A ~o -33488
-:A :o -33488
-:A oe -33488
-:A /o -33488
-:A q -33488
-:A t -33488
-:A u0074_030C -33488
-:A u0074_0327 -33488
-:A C -33488
-:A G -33488
-:A 'C -33488
-:A u0043_030C -33488
-:A u0047_0306 -33488
-:A ,C -33488
-:A Q -33488
-:A O -33488
-:A u004F_030B -33488
-:A `O -33488
-:A 'O -33488
-:A ^O -33488
-:A ~O -33488
-:A :O -33488
-:A OE -33488
-:A /O -33488
-:A U -33488
-:A u0055_030B -33488
-:A u0055_030A -33488
-:A `U -33488
-:A 'U -33488
-:A ^U -33488
-:A :U -33488
-:A T -100464
-:A u0054_030C -100464
-:A u0054_0327 -100464
-:A Y -100464
-:A :Y -100464
-:A 'Y -100464
-:A V -133952
-:A W -133952
-oA y -100464
-oA :y -100464
-oA 'y -100464
-oA v -133952
-oA w -100464
-oA c -33488
-oA 'c -33488
-oA u0063_030C -33488
-oA ,c -33488
-oA d -33488
-oA u0064_030C -33488
-oA u0111 -33488
-oA Sd -33488
-oA e -33488
-oA u0065_030C -33488
-oA u0065_0328 -33488
-oA `e -33488
-oA 'e -33488
-oA ^e -33488
-oA :e -33488
-oA o -33488
-oA u006F_030B -33488
-oA `o -33488
-oA 'o -33488
-oA ^o -33488
-oA ~o -33488
-oA :o -33488
-oA oe -33488
-oA /o -33488
-oA q -33488
-oA t -33488
-oA u0074_030C -33488
-oA u0074_0327 -33488
-oA C -33488
-oA G -33488
-oA 'C -33488
-oA u0043_030C -33488
-oA u0047_0306 -33488
-oA ,C -33488
-oA Q -33488
-oA O -33488
-oA u004F_030B -33488
-oA `O -33488
-oA 'O -33488
-oA ^O -33488
-oA ~O -33488
-oA :O -33488
-oA OE -33488
-oA /O -33488
-oA U -33488
-oA u0055_030B -33488
-oA u0055_030A -33488
-oA `U -33488
-oA 'U -33488
-oA ^U -33488
-oA :U -33488
-oA T -100464
-oA u0054_030C -100464
-oA u0054_0327 -100464
-oA Y -100464
-oA :Y -100464
-oA 'Y -100464
-oA V -133952
-oA W -133952
-u0189 X -33488
-u0110 X -33488
--D X -33488
-u0189 W -33488
-u0110 W -33488
--D W -33488
-u0189 A -33488
-u0110 A -33488
--D A -33488
-u0189 u0041_0306 -33488
-u0110 u0041_0306 -33488
--D u0041_0306 -33488
-u0189 u0041_0328 -33488
-u0110 u0041_0328 -33488
--D u0041_0328 -33488
-u0189 `A -33488
-u0110 `A -33488
--D `A -33488
-u0189 'A -33488
-u0110 'A -33488
--D 'A -33488
-u0189 ^A -33488
-u0110 ^A -33488
--D ^A -33488
-u0189 ~A -33488
-u0110 ~A -33488
--D ~A -33488
-u0189 :A -33488
-u0110 :A -33488
--D :A -33488
-u0189 oA -33488
-u0110 oA -33488
--D oA -33488
-u0189 AE -33488
-u0110 AE -33488
--D AE -33488
-u0189 V -33488
-u0110 V -33488
--D V -33488
-u0189 Y -33488
-u0110 Y -33488
--D Y -33488
-u0189 :Y -33488
-u0110 :Y -33488
--D :Y -33488
-u0189 'Y -33488
-u0110 'Y -33488
--D 'Y -33488
-`O X -33488
-`O W -33488
-`O A -33488
-`O u0041_0306 -33488
-`O u0041_0328 -33488
-`O `A -33488
-`O 'A -33488
-`O ^A -33488
-`O ~A -33488
-`O :A -33488
-`O oA -33488
-`O AE -33488
-`O V -33488
-`O Y -33488
-`O :Y -33488
-`O 'Y -33488
-'O X -33488
-'O W -33488
-'O A -33488
-'O u0041_0306 -33488
-'O u0041_0328 -33488
-'O `A -33488
-'O 'A -33488
-'O ^A -33488
-'O ~A -33488
-'O :A -33488
-'O oA -33488
-'O AE -33488
-'O V -33488
-'O Y -33488
-'O :Y -33488
-'O 'Y -33488
-^O X -33488
-^O W -33488
-^O A -33488
-^O u0041_0306 -33488
-^O u0041_0328 -33488
-^O `A -33488
-^O 'A -33488
-^O ^A -33488
-^O ~A -33488
-^O :A -33488
-^O oA -33488
-^O AE -33488
-^O V -33488
-^O Y -33488
-^O :Y -33488
-^O 'Y -33488
-~O X -33488
-~O W -33488
-~O A -33488
-~O u0041_0306 -33488
-~O u0041_0328 -33488
-~O `A -33488
-~O 'A -33488
-~O ^A -33488
-~O ~A -33488
-~O :A -33488
-~O oA -33488
-~O AE -33488
-~O V -33488
-~O Y -33488
-~O :Y -33488
-~O 'Y -33488
-:O X -33488
-:O W -33488
-:O A -33488
-:O u0041_0306 -33488
-:O u0041_0328 -33488
-:O `A -33488
-:O 'A -33488
-:O ^A -33488
-:O ~A -33488
-:O :A -33488
-:O oA -33488
-:O AE -33488
-:O V -33488
-:O Y -33488
-:O :Y -33488
-:O 'Y -33488
-/O X -33488
-/O W -33488
-/O A -33488
-/O u0041_0306 -33488
-/O u0041_0328 -33488
-/O `A -33488
-/O 'A -33488
-/O ^A -33488
-/O ~A -33488
-/O :A -33488
-/O oA -33488
-/O AE -33488
-/O V -33488
-/O Y -33488
-/O :Y -33488
-/O 'Y -33488
-'Y e -100464
-'Y o -100464
-'Y r -100464
-'Y a -100464
-'Y u -100464
-'Y n -100464
-'Y .i -100464
-'Y c -100464
-'Y d -100464
-'Y g -100464
-'Y p -100464
-'Y s -100464
-'Y v -100464
-'Y w -100464
-'Y x -100464
-'Y z -100464
-'Y A -100464
-'Y u0041_0306 -100464
-'Y u0041_0328 -100464
-'Y `A -100464
-'Y 'A -100464
-'Y ^A -100464
-'Y ~A -100464
-'Y :A -100464
-'Y oA -100464
-'Y AE -100464
-`a v -33488
-`a j 66976
-`a y -33488
-`a :y -33488
-`a 'y -33488
-`a w -33488
-'a v -33488
-'a j 66976
-'a y -33488
-'a :y -33488
-'a 'y -33488
-'a w -33488
-^a v -33488
-^a j 66976
-^a y -33488
-^a :y -33488
-^a 'y -33488
-^a w -33488
-~a v -33488
-~a j 66976
-~a y -33488
-~a :y -33488
-~a 'y -33488
-~a w -33488
-:a v -33488
-:a j 66976
-:a y -33488
-:a :y -33488
-:a 'y -33488
-:a w -33488
-oa v -33488
-oa j 66976
-oa y -33488
-oa :y -33488
-oa 'y -33488
-oa w -33488
-,c h -33488
-,c k -33488
-~n t -33488
-~n u -33488
-~n u0075_030B -33488
-~n u0075_030A -33488
-~n `u -33488
-~n 'u -33488
-~n ^u -33488
-~n :u -33488
-~n b -33488
-~n y -33488
-~n v -33488
-~n w -33488
-`o e 33488
-`o u0065_030C 33488
-`o u0065_0328 33488
-`o `e 33488
-`o 'e 33488
-`o ^e 33488
-`o :e 33488
-`o o 33488
-`o u006F_030B 33488
-`o `o 33488
-`o 'o 33488
-`o ^o 33488
-`o ~o 33488
-`o :o 33488
-`o oe 33488
-`o /o 33488
-`o x -33488
-`o d 33488
-`o c 33488
-`o 'c 33488
-`o u0063_030C 33488
-`o ,c 33488
-`o q 33488
-`o v -33488
-`o j 66976
-`o y -33488
-`o :y -33488
-`o 'y -33488
-`o w -33488
-'o e 33488
-'o u0065_030C 33488
-'o u0065_0328 33488
-'o `e 33488
-'o 'e 33488
-'o ^e 33488
-'o :e 33488
-'o o 33488
-'o u006F_030B 33488
-'o `o 33488
-'o 'o 33488
-'o ^o 33488
-'o ~o 33488
-'o :o 33488
-'o oe 33488
-'o /o 33488
-'o x -33488
-'o d 33488
-'o c 33488
-'o 'c 33488
-'o u0063_030C 33488
-'o ,c 33488
-'o q 33488
-'o v -33488
-'o j 66976
-'o y -33488
-'o :y -33488
-'o 'y -33488
-'o w -33488
-^o e 33488
-^o u0065_030C 33488
-^o u0065_0328 33488
-^o `e 33488
-^o 'e 33488
-^o ^e 33488
-^o :e 33488
-^o o 33488
-^o u006F_030B 33488
-^o `o 33488
-^o 'o 33488
-^o ^o 33488
-^o ~o 33488
-^o :o 33488
-^o oe 33488
-^o /o 33488
-^o x -33488
-^o d 33488
-^o c 33488
-^o 'c 33488
-^o u0063_030C 33488
-^o ,c 33488
-^o q 33488
-^o v -33488
-^o j 66976
-^o y -33488
-^o :y -33488
-^o 'y -33488
-^o w -33488
-~o e 33488
-~o u0065_030C 33488
-~o u0065_0328 33488
-~o `e 33488
-~o 'e 33488
-~o ^e 33488
-~o :e 33488
-~o o 33488
-~o u006F_030B 33488
-~o `o 33488
-~o 'o 33488
-~o ^o 33488
-~o ~o 33488
-~o :o 33488
-~o oe 33488
-~o /o 33488
-~o x -33488
-~o d 33488
-~o c 33488
-~o 'c 33488
-~o u0063_030C 33488
-~o ,c 33488
-~o q 33488
-~o v -33488
-~o j 66976
-~o y -33488
-~o :y -33488
-~o 'y -33488
-~o w -33488
-:o e 33488
-:o u0065_030C 33488
-:o u0065_0328 33488
-:o `e 33488
-:o 'e 33488
-:o ^e 33488
-:o :e 33488
-:o o 33488
-:o u006F_030B 33488
-:o `o 33488
-:o 'o 33488
-:o ^o 33488
-:o ~o 33488
-:o :o 33488
-:o oe 33488
-:o /o 33488
-:o x -33488
-:o d 33488
-:o c 33488
-:o 'c 33488
-:o u0063_030C 33488
-:o ,c 33488
-:o q 33488
-:o v -33488
-:o j 66976
-:o y -33488
-:o :y -33488
-:o 'y -33488
-:o w -33488
-/o e 33488
-/o u0065_030C 33488
-/o u0065_0328 33488
-/o `e 33488
-/o 'e 33488
-/o ^e 33488
-/o :e 33488
-/o o 33488
-/o u006F_030B 33488
-/o `o 33488
-/o 'o 33488
-/o ^o 33488
-/o ~o 33488
-/o :o 33488
-/o oe 33488
-/o /o 33488
-/o x -33488
-/o d 33488
-/o c 33488
-/o 'c 33488
-/o u0063_030C 33488
-/o ,c 33488
-/o q 33488
-/o v -33488
-/o j 66976
-/o y -33488
-/o :y -33488
-/o 'y -33488
-/o w -33488
-`u w -33488
-'u w -33488
-^u w -33488
-:u w -33488
-'y o -33488
-'y u006F_030B -33488
-'y `o -33488
-'y 'o -33488
-'y ^o -33488
-'y ~o -33488
-'y :o -33488
-'y oe -33488
-'y /o -33488
-'y e -33488
-'y u0065_030C -33488
-'y u0065_0328 -33488
-'y `e -33488
-'y 'e -33488
-'y ^e -33488
-'y :e -33488
-'y a -33488
-'y u0061_0306 -33488
-'y u0061_0328 -33488
-'y `a -33488
-'y 'a -33488
-'y ^a -33488
-'y ^a -33488
-'y ~a -33488
-'y :a -33488
-'y oa -33488
-'y ae -33488
-'y . -100464
-'y , -100464
-charset
-ga 602784,679952 2 0000
-aa 602784,679952 2 0001
-a^ 602784,679952 2 0002
-a~ 602784,679952 2 0003
-ad 602784,723632 2 0004
-a" 602784,679952,0,15530 2 0005
-ao 911456,679952 2 0006
-ah 602784,679952 2 0007
-ab 602784,679952 2 0010
-a- 602784,723632 2 0011
-a. 334880,723632 2 0012
-ac 535808,0,178360 1 0013
-ho 334880,0,203840 1 0014
-bq 334880,163072,203840 1 0015
-fo 535808,495040 2 0016
-fc 535808,495040 2 0017
-lq 430976,723632 2 0020
-rq 430976,723632 2 0021
-Bq 430976,163072,203840 1 0022
-Fo 669760,495040 2 0023
-Fc 669760,495040 2 0024
-en 602784,465920,0,33488 0 0025
-em 1205568,465920,0,33488 0 0026
---- 0,465920 0 0027
---- 468832,786240,58240 3 0030
-.i 334880,465920 0 0031
-.j 368368,465920,203840 1 0032
-ff 703248,723632,0,114296 2 0033
-fi 669760,723632 2 0034
-fl 669760,723632 2 0035
-Fi 1004640,723632 2 0036
-Fl 1004640,723632 2 0037
-u2423 602784,465920,101920 1 0040
-u01C3 366912,723632 2 0041
-! "
-dq 602784,723632 2 0042
-" "
-sh 1004640,723632,203840 3 0043
-# "
-Do 602784,786240,58240 3 0044
-$ "
-% 1004640,786240,58240 3 0045
-& 937664,723632 2 0046
-cq 334880,723632 2 0047
-' "
-( 468832,786240,262080 3 0050
-) 468832,786240,262080 3 0051
-* 602784,786240 2 0052
-+ 937664,664768,139776 3 0053
-, 334880,163072,203840 1 0054
-- 401856,465920 0 0055
-. 334880,163072 0 0056
-sl 602784,786240,262080 3 0057
-/ "
-0 602784,679952 2 0060
-1 602784,679952 2 0061
-2 602784,679952 2 0062
-3 602784,679952 2 0063
-4 602784,679952 2 0064
-5 602784,679952 2 0065
-6 602784,679952 2 0066
-7 602784,679952 2 0067
-8 602784,679952 2 0070
-9 602784,679952 2 0071
-: 334880,465920 0 0072
-; 334880,465920,203840 1 0073
-< 937664,613858,89698 3 0074
-= 937664,410018,-114142 0 0075
-> 937664,613858,89698 3 0076
-? 569296,723632 2 0077
-at 937664,723632 2 0100
-@ "
-A 911456,723632 2 0101
-B 857584,723632 2 0102
-C 870688,723632,0,0,-33488 2 0103
-D 924560,723632,0,0,0,-33488 2 0104
-E 792064,723632 2 0105
-F 758576,723632,0,0,0,-167440 2 0106
-G 947856,723632,0,0,-33488 2 0107
-H 943488,723632 2 0110
-I 457184,723632 2 0111
-J 623168,723632,0,0,0,-33488 2 0112
-K 944944,723632 2 0113
-L 725088,723632,0,0,0,66976 2 0114
-M 1144416,723632 2 0115
-N 943488,723632 2 0116
-O 905632,723632,0,0,-33488,-33488 2 0117
-P 824096,723632,0,0,0,-167440 2 0120
-Q 905632,723632,203840,0,-33488 3 0121
-R 904176,723632 2 0122
-S 669760,723632 2 0123
-T 838656,723632,0,0,0,-167440 2 0124
-U 927472,723632,0,0,-20384 2 0125
-V 911456,723632,0,16744,50232,-251160 2 0126
-W 1246336,723632,0,16744,50232,-150696 2 0127
-X 911456,723632 2 0130
-Y 911456,723632,0,30139,33488,-237765 2 0131
-Z 736736,723632 2 0132
-lB 334880,786240,262080 3 0133
-[ "
-rs 602784,786240,262080 3 0134
-\ "
-rB 334880,786240,262080 3 0135
-] "
-ha 736736,723632 2 0136
-^ "
-_ 937664,0,322658 1 0137
-oq 334880,723632 2 0140
-` "
-a 586040,465920 0 0141
-b 669760,723632 2 0142
-c 535808,465920 0 0143
-d 669760,723632 2 0144
-e 552552,465920 0 0145
-f 368368,723632,0,114296 2 0146
-g 602784,465920,203840,16744 1 0147
-h 669760,723632 2 0150
-i 334880,723632 2 0151
-j 368368,723632,203840 3 0152
-k 636272,723632 2 0153
-l 334880,723632 2 0154
-m 1004640,465920 0 0155
-n 669760,465920 0 0156
-o 602784,465920 0 0157
-p 669760,465920,203840 1 0160
-q 636272,465920,203840 1 0161
-r 496496,465920 0 0162
-s 475530,465920 0 0163
-t 468832,664768 2 0164
-u 669760,465920 0 0165
-v 636272,465920,0,16744 0 0166
-w 870688,465920,0,16744 0 0167
-x 636272,465920 0 0170
-y 636272,465920,203840,16744 1 0171
-z 535808,465920 0 0172
-lC 602784,786240,262080 3 0173
-{ "
-u01C0 334880,786240,262080 3 0174
-ba "
-| "
-rC 602784,786240,262080 3 0175
-} "
-~ 736736,723632 2 0176
-hy 200928,465920 0 0177
-u0041_0306 911456,937664 2 0200
-u0041_0328 911456,723632,203840 3 0201
-'C 870688,918813 2 0202
-u0043_030C 870688,937664,0,0,-33488 2 0203
-u0044_030C 924560,937664,0,0,0,-33488 2 0204
-u0045_030C 792064,937664 2 0205
-u0045_0328 792064,723632,203840 3 0206
-u0047_0306 947856,937664,0,0,-33488 2 0207
-u004C_0301 725088,918813,0,0,0,66976 2 0210
-u004C_030C 725088,937664,0,0,0,66976 2 0211
-/L 725088,723632 2 0212
-u004E_0301 943488,918813 2 0213
-u004E_030C 943488,937664 2 0214
-u014A 958048,723632,0,0,0,-33488 2 0215
-u004F_030B 905632,918813,0,0,-33488,-33488 2 0216
-u0052_0301 904176,918813 2 0217
-u0052_030C 904176,937664 2 0220
-u0053_0301 669760,918813 2 0221
-vS 669760,937664 2 0222
-u0053_0327 669760,723632,178360 3 0223
-u0054_030C 838656,937664,0,0,0,-167440 2 0224
-u0054_0327 838656,723632,178360,0,0,-167440 3 0225
-u0055_030B 927472,918813,0,0,-20384 2 0226
-u0055_030A 927472,937664,0,0,-20384 2 0227
-:Y 911456,937664,0,30139,33488,-237765 2 0230
-u005A_0301 736736,918813 2 0231
-vZ 736736,937664 2 0232
-u005A_0307 736736,918813 2 0233
-IJ 1059968,723632,0,0,0,-33488 2 0234
-u0049_0307 457184,918813 2 0235
-u0111 669760,723632 2 0236
-sc 554736,723632,203840 3 0237
-u0061_0306 586040,679952 2 0240
-u0061_0328 586040,465920,203840 1 0241
-'c 535808,679952 2 0242
-u0063_030C 535808,679952 2 0243
-u0064_030C 849576,723632 2 0244
-u0065_030C 552552,679952 2 0245
-u0065_0328 552552,465920,203840 1 0246
-u0067_0306 602784,679952,203840,16744 3 0247
-u006C_0301 334880,918813,0,56493 2 0250
-u006C_030C 526344,723632 2 0251
-/l 405205,723632 2 0252
-u006E_0301 669760,679952 2 0253
-u006E_030C 669760,679952 2 0254
-u016A 669760,465920,203840 1 0255
-u006F_030B 602784,679952,0,15530 2 0256
-u0072_0301 496496,679952 2 0257
-u0072_030C 496496,679952 2 0260
-u0073_0301 475530,679952 2 0261
-vs 475530,679952 2 0262
-u0073_0327 475530,465920,178360 1 0263
-u0074_030C 468832,723632 2 0264
-u0074_0327 468832,664768,178360 3 0265
-u0075_030B 669760,679952 2 0266
-u0075_030A 669760,679952 2 0267
-:y 636272,723632,203840,16744 3 0270
-u007A_0301 535808,679952 2 0271
-vz 535808,679952 2 0272
-u007A_0307 535808,723632 2 0273
-ij 703248,723632,203840 3 0274
-r! 366912,524160,203840 3 0275
-r? 569296,524160,203840 3 0276
-Po 770224,723632 2 0277
-`A 911456,918813 2 0300
-'A 911456,918813 2 0301
-^A 911456,937664 2 0302
-~A 911456,937664 2 0303
-:A 911456,937664 2 0304
-oA 911456,893984 2 0305
-AE 1092000,723632 2 0306
-,C 870688,723632,178360,0,-33488 3 0307
-`E 792064,918813 2 0310
-'E 792064,918813 2 0311
-^E 792064,937664 2 0312
-:E 792064,937664 2 0313
-`I 457184,918813 2 0314
-'I 457184,918813 2 0315
-^I 457184,937664 2 0316
-:I 457184,937664 2 0317
-u0189 924560,723632,0,0,0,-33488 2 0320
-u0110 "
--D "
-~N 943488,937664 2 0321
-`O 905632,918813,0,0,-33488,-33488 2 0322
-'O 905632,918813 2 0323
-^O 905632,937664,0,0,-33488,-33488 2 0324
-~O 905632,937664,0,0,-33488,-33488 2 0325
-:O 905632,937664,0,0,-33488,-33488 2 0326
-OE 1225952,723632 2 0327
-/O 937664,770224,50960 3 0330
-`U 927472,918813,0,0,-20384 2 0331
-'U 927472,918813 2 0332
-^U 927472,937664,0,0,-20384 2 0333
-:U 927472,937664,0,0,-20384 2 0334
-'Y 911456,918813,0,30139,33488,-237765 2 0335
-TP 757120,723632 2 0336
---- 1339520,723632 2 0337
-`a 586040,679952 2 0340
-'a 586040,679952 2 0341
-^a 586040,679952 2 0342
-~a 586040,679952 2 0343
-:a 586040,723632 2 0344
-oa 586040,679952 2 0345
-ae 870688,465920 0 0346
-,c 535808,465920,178360 1 0347
-`e 552552,679952 2 0350
-'e 552552,679952 2 0351
-^e 552552,679952 2 0352
-:e 552552,723632 2 0353
-`i 334880,679952 2 0354
-'i 334880,679952,0,28280 2 0355
-^i 334880,679952 2 0356
-:i 401856,723632 2 0357
-Sd 602784,723632 2 0360
-~n 669760,679952 2 0361
-`o 602784,679952 2 0362
-'o 602784,679952 2 0363
-^o 602784,679952 2 0364
-~o 602784,679952 2 0365
-:o 602784,723632 2 0366
-oe 937664,465920 0 0367
-/o 602784,567840,101920 3 0370
-`u 669760,679952 2 0371
-'u 669760,679952 2 0372
-^u 669760,679952 2 0373
-:u 669760,723632 2 0374
-'y 636272,679952,203840,16744 3 0375
-Tp 669760,723632,203840 3 0376
-ss 626080,723632 2 0377
diff --git a/contrib/groff/font/devdvi/TBI b/contrib/groff/font/devdvi/TBI
deleted file mode 100644
index 5c34bc2d9071..000000000000
--- a/contrib/groff/font/devdvi/TBI
+++ /dev/null
@@ -1,354 +0,0 @@
-#
-# manually added kerning for `` and ''
-#
-name TBI
-internalname cmbxti10
-spacewidth 434573
-slant 14.036243
-ligatures ff fi fl ffi ffl 0
-checksum 1175274390
-designsize 10485760
-kernpairs
-ff cq 111848
-ff ' 111848
-ff ? 111848
-ff ! 111848
-ff ) 111848
-ff rB 111848
-ff ] 111848
-' ' -92624
-cq ' -92624
-' cq -92624
-cq cq -92624
-slash@for@l l -311075
-slash@for@l L -402826
-cq ? 123498
-' ? 123498
-cq ! 123498
-' ! 123498
-A n -30875
-A l -30875
-A r -30875
-A u -30875
-A m -30875
-A t -30875
-A i -30875
-A C -30875
-A O -30875
-A G -30875
-A h -30875
-A b -30875
-A U -30875
-A k -30875
-A v -30875
-A w -30875
-A Q -30875
-A T -92624
-A Y -92624
-A V -123498
-A W -123498
-A e -61749
-A a -61749
-A o -61749
-A d -61749
-A c -61749
-A g -61749
-A q -61749
-D X -30875
-D W -30875
-D A -30875
-D V -30875
-D Y -30875
-F o -92624
-F e -92624
-F u -92624
-F r -92624
-F a -92624
-F A -123498
-F O -30875
-F C -30875
-F G -30875
-F Q -30875
-K O -30875
-K C -30875
-K G -30875
-K Q -30875
-L T -92624
-L Y -92624
-L V -123498
-L W -123498
-L e -61749
-L a -61749
-L o -61749
-L d -61749
-L c -61749
-L g -61749
-L q -61749
-O X -30875
-O W -30875
-O A -30875
-O V -30875
-O Y -30875
-P A -92624
-R n -30875
-R l -30875
-R r -30875
-R u -30875
-R m -30875
-R t -30875
-R i -30875
-R C -30875
-R O -30875
-R G -30875
-R h -30875
-R b -30875
-R U -30875
-R k -30875
-R v -30875
-R w -30875
-R Q -30875
-R T -92624
-R Y -92624
-R V -123498
-R W -123498
-R e -61749
-R a -61749
-R o -61749
-R d -61749
-R c -61749
-R g -61749
-R q -61749
-T y -92624
-T e -92624
-T o -92624
-T r -92624
-T a -92624
-T u -92624
-T A -92624
-V o -92624
-V e -92624
-V u -92624
-V r -92624
-V a -92624
-V A -123498
-V O -30875
-V C -30875
-V G -30875
-V Q -30875
-W A -92624
-X O -30875
-X C -30875
-X G -30875
-X Q -30875
-Y e -92624
-Y o -92624
-Y r -92624
-Y a -92624
-Y u -92624
-Y A -92624
-oq oq -92624
-oq ` -92624
-` oq -92624
-` ` -92624
-b e -61749
-b a -61749
-b o -61749
-b d -61749
-b c -61749
-b g -61749
-b q -61749
-c e -61749
-c a -61749
-c o -61749
-c d -61749
-c c -61749
-c g -61749
-c q -61749
-d l 61749
-e e -61749
-e a -61749
-e o -61749
-e d -61749
-e c -61749
-e g -61749
-e q -61749
-Fn cq 111848
-Fn ' 111848
-f cq 111848
-f ' 111848
-Fn ? 111848
-f ? 111848
-Fn ! 111848
-f ! 111848
-Fn ) 111848
-f ) 111848
-Fn rB 111848
-Fn ] 111848
-f rB 111848
-f ] 111848
-l l 61749
-n cq -123498
-n ' -123498
-o e -61749
-o a -61749
-o o -61749
-o d -61749
-o c -61749
-o g -61749
-o q -61749
-p e -61749
-p a -61749
-p o -61749
-p d -61749
-p c -61749
-p g -61749
-p q -61749
-r e -61749
-r a -61749
-r o -61749
-r d -61749
-r c -61749
-r g -61749
-r q -61749
-w l 61749
-charset
-*G 731666,719440,0,135298,0,-19075 2 0000
-*D 990312,719440 2 0001
-*H 928563,719440,0,95027,-84834,64152 2 0002
-*L 845843,719440 2 0003
-*C 805066,719440,0,158248,0,79125 2 0004
-*P 939632,719440,0,180443,0,90222 2 0005
-*S 866814,719440,0,119859,0,59930 2 0006
-*U 928563,719440,0,113013,-174763,-41360 2 0007
-*F 866814,719440,0,59054,-120805,59054 2 0010
-*Q 928563,719440,0,113013,-174763,-5243 2 0011
-*W 866814,719440,0,104021,0,52011 2 0012
-ff 792256,728178,203890,228357 3 0013
-fi 707205,728178,203890,113890 3 0014
-fl 738078,728178,203890,113890 3 0015
-Fi 1095466,728178,203890,113890 3 0016
-Fl 1110902,728178,203890,113890 3 0017
-.i 372824,466034,0,98840 0 0020
-.j 403699,466034,203890,48354 1 0021
-ga 619819,728178 2 0022
-aa 619819,728178,0,89421 2 0023
-ah 619819,662642,0,86728 2 0024
-ab 619819,728178,0,108354 2 0025
-a- 619819,623318,0,109518 2 0026
-ao 994973,728178 2 0027
-ac 558070,0,178403 1 0030
-ss 697302,728178,203890,102090 3 0031
-ae 866814,466034,0,89131 0 0032
-oe 866814,466034,0,89131 0 0033
-/o 619819,567979,101946,99179 3 0034
-AE 1072450,719440,0,119859 2 0035
-OE 1195947,719440,0,119859 2 0036
-/O 928563,770413,50973,95027 3 0037
-slash@for@l 311075,466034 0 0040
-! 404864,728178,0,119714 2 0041
-rq 650696,728178,0,83248 2 0042
-sh 990312,728178,203888,71653 3 0043
-# "
-Po 910723,728178 2 0044
-% 990312,786432,58254,134859 3 0045
-& 928563,728178,0,89421 2 0046
-cq 372824,728178,0,135734 2 0047
-' "
-( 496322,786432,262144,165733 3 0050
-) 496322,786432,262144,34661 3 0051
-* 619819,786432,0,150296 2 0052
-+ 928563,632637,108349,34661 3 0053
-, 372824,154374,203890 1 0054
-hy 434573,466034,0,27379 0 0055
-- "
-. 372824,154374 0 0056
-sl 619819,786432,262144,165733 3 0057
-/ "
-0 619819,675749,0,138062 2 0060
-1 619819,675749,0,138062 2 0061
-2 619819,675749,0,138062 2 0062
-3 619819,675749,0,138062 2 0063
-4 619819,675749,203890,138062 3 0064
-5 619819,675749,0,138062 2 0065
-6 619819,675749,0,138062 2 0066
-7 619819,675749,203890,138062 3 0067
-8 619819,675749,0,138062 2 0070
-9 619819,675749,0,138062 2 0071
-: 372824,466034,0,70198 0 0072
-; 372824,466034,203890,70198 1 0073
-r! 404864,524288,203890,68741 3 0074
-= 928563,410110,-114178,71653 0 0075
-r? 619819,524288,203890 3 0076
-? 619819,728178,0,120296 2 0077
-at 928563,728178,0,96555 2 0100
-@ "
-A 907592,719440 2 0101
-B 856330,719440,0,104021,0,52011 2 0102
-C 866814,719440,0,148986,-84834,74493 2 0103
-D 918078,719440,0,95027,0,64152 2 0104
-E 793414,719440,0,119859,0,59930 2 0105
-F 762541,719440,0,135298,0,-19075 2 0106
-G 938758,719440,0,77042,-84834,77042 2 0107
-H 939632,719440,0,180443,0,90222 2 0110
-I 494576,719440,0,164424,0,82213 2 0111
-J 640208,719440,0,152045,0,45147 2 0112
-K 938467,719440,0,148986,0,74493 2 0113
-L 731666,719440,0,0,0,61749 2 0114
-M 1124878,719440,0,180443,0,59347 2 0115
-N 939632,719440,0,180443,0,59347 2 0116
-O 896523,719440,0,95027,-84834,64152 2 0117
-P 825454,719440,0,104021,0,-50352 2 0120
-Q 896523,719440,203890,95027,-84834,95027 3 0121
-R 901186,719440,0,26835,0,20126 2 0122
-S 681568,719440,0,118112,0,59056 2 0123
-T 834774,719440,0,135298,-134896,-19075 2 0124
-U 923613,719440,0,180443,-136096,59347 2 0125
-V 907592,719440,0,195298,-133549,-51698 2 0126
-W 1216336,719440,0,195298,-133549,40925 2 0127
-X 907592,719440,0,164424,0,82213 2 0130
-Y 907592,719440,0,207648,-148986,-39347 2 0131
-Z 743317,719440,0,148986,0,74493 2 0132
-lB 373408,786432,262144,196608 3 0133
-[ "
-lq 650696,728178,0,175869 2 0134
-rB 373408,786432,262144,104568 3 0135
-] "
-ha 619819,728178,0,70344 2 0136
-^ "
-a^ "
-a. 372824,728178,0,135734 2 0137
-oq 372824,728178,0,135734 2 0140
-` "
-a 619819,466034,0,98840,-34078,98840 0 0141
-b 558070,728178,0,82430,-34078,82430 2 0142
-c 558070,466034,0,54760,-34078,54760 0 0143
-d 619819,728178,0,113890,-34078,113890 2 0144
-e 558070,466034,0,89131,-34078,89131 0 0145
-Fn 419432,728178,203890,228357,112722,116509 3 0146
-f "
-g 558070,466034,203890,110102,-35829,71266 1 0147
-h 619819,728178,0,98840,0,98840 2 0150
-i 372824,726931,0,119403,-17669,119403 2 0151
-j 372824,726931,203890,175326,50973,110102 3 0152
-k 558070,728178,0,116509,0,98840 2 0153
-l 311075,728178,0,113890,-30875,129714 2 0154
-m 990312,466034,0,98840,-17669,98840 0 0155
-n 681568,466034,0,98840,-17669,98840 0 0156
-o 619819,466034,0,82430,-34078,82430 0 0157
-p 619819,466034,203890,82430,-17182,82430 1 0160
-q 558070,466034,203890,110102,-34078,71266 1 0161
-r 526034,466034,0,116509,-17669,85634 0 0162
-s 510595,466034,0,85634,0,85634 0 0163
-t 403699,665763,0,101072,-39323,101072 2 0164
-u 650694,466034,0,98840,-17669,98840 0 0165
-v 558070,466034,0,116509,-17669,77672 0 0166
-w 805066,466034,0,116509,-17669,87382 0 0167
-x 587782,466034,0,131946,0,131946 0 0170
-y 588946,466034,203890,110102,-17669,71266 1 0171
-z 514382,466034,0,145637,0,98840 0 0172
-en 619819,466034,0,102880 0 0173
-em 1239638,466034,0,102880 0 0174
-a" 619819,728178,0,120296 2 0175
-~ 619819,728178,0,120296 2 0176
-a~ "
-ad 619819,728178,0,120298 2 0177
diff --git a/contrib/groff/font/devdvi/TBIEC b/contrib/groff/font/devdvi/TBIEC
deleted file mode 100644
index 0bc0973fc348..000000000000
--- a/contrib/groff/font/devdvi/TBIEC
+++ /dev/null
@@ -1,2765 +0,0 @@
-name TBIEC
-internalname ecbi1000
-spacewidth 434470
-slant 14.036243
-ligatures ff fi fl ffi ffl 0
-checksum 501947664
-designsize 10485760
-kernpairs
-bq Bq 123469
-bq v -92602
-bq w -92602
-bq T -92602
-bq V -123469
-bq W -123469
-bq Y -92602
-bq :Y -92602
-bq 'Y -92602
-bq O -30867
-bq u004F_030B -30867
-bq `O -30867
-bq 'O -30867
-bq ^O -30867
-bq ~O -30867
-bq :O -30867
-bq OE -30867
-bq /O -30867
-bq C -30867
-bq G -30867
-bq 'C -30867
-bq u0043_030C -30867
-bq u0047_0306 -30867
-bq ,C -30867
-bq Q -30867
-lq oq 123469
-lq ` 123469
-lq lq 123469
-rq cq 123469
-rq ' 123469
-rq rq 123469
-Bq bq 123469
-Bq , 123469
-Bq Bq 123469
-Bq v -92602
-Bq w -92602
-Bq T -92602
-Bq V -123469
-Bq W -123469
-Bq Y -92602
-Bq :Y -92602
-Bq 'Y -92602
-Bq O -30867
-Bq u004F_030B -30867
-Bq `O -30867
-Bq 'O -30867
-Bq ^O -30867
-Bq ~O -30867
-Bq :O -30867
-Bq OE -30867
-Bq /O -30867
-Bq C -30867
-Bq G -30867
-Bq 'C -30867
-Bq u0043_030C -30867
-Bq u0047_0306 -30867
-Bq ,C -30867
-Bq Q -30867
-Fc . -92602
-Fc , -92602
-ff cq 111821
-ff ' 111821
-ff oq 111821
-ff ` 111821
-ff lq 111821
-ff rq 111821
-ff ? 111821
-ff u01C3 111821
-ff ! 111821
-ff ) 111821
-ff rB 111821
-ff ] 111821
-cq rq 123469
-' rq 123469
-cq ? 123469
-' ? 123469
-cq u01C3 123469
-cq ! 123469
-' u01C3 123469
-' ! 123469
-A y -30867
-A :y -30867
-A 'y -30867
-A n -30867
-A u006E_0301 -30867
-A u006E_030C -30867
-A u016A -30867
-A ~n -30867
-A l -30867
-A u006C_0301 -30867
-A u006C_030C -30867
-A r -30867
-A u -30867
-A u0075_030B -30867
-A u0075_030A -30867
-A `u -30867
-A 'u -30867
-A ^u -30867
-A :u -30867
-A m -30867
-A t -30867
-A u0074_030C -30867
-A u0074_0327 -30867
-A i -30867
-A 'i -30867
-A h -30867
-A b -30867
-A k -30867
-A v -30867
-A w -30867
-A C -30867
-A G -30867
-A 'C -30867
-A u0043_030C -30867
-A u0047_0306 -30867
-A ,C -30867
-A Q -30867
-A O -30867
-A u004F_030B -30867
-A `O -30867
-A 'O -30867
-A ^O -30867
-A ~O -30867
-A :O -30867
-A OE -30867
-A /O -30867
-A U -30867
-A u0055_030B -30867
-A u0055_030A -30867
-A `U -30867
-A 'U -30867
-A ^U -30867
-A :U -30867
-A T -92602
-A u0054_030C -92602
-A u0054_0327 -92602
-A Y -92602
-A :Y -92602
-A 'Y -92602
-A V -123469
-A W -123469
-A e -61734
-A u0065_030C -61734
-A u0065_0328 -61734
-A `e -61734
-A 'e -61734
-A ^e -61734
-A :e -61734
-A a -61734
-A u0061_0306 -61734
-A u0061_0328 -61734
-A `a -61734
-A 'a -61734
-A ^a -61734
-A ^a -61734
-A ~a -61734
-A :a -61734
-A oa -61734
-A ae -61734
-A o -61734
-A u006F_030B -61734
-A `o -61734
-A 'o -61734
-A ^o -61734
-A ~o -61734
-A :o -61734
-A oe -61734
-A /o -61734
-A d -61734
-A u0111 -61734
-A c -61734
-A 'c -61734
-A u0063_030C -61734
-A ,c -61734
-A g -61734
-A u0067_0306 -61734
-A q -61734
-D X -30867
-D W -30867
-D A -30867
-D u0041_0306 -30867
-D u0041_0328 -30867
-D `A -30867
-D 'A -30867
-D ^A -30867
-D ~A -30867
-D :A -30867
-D oA -30867
-D AE -30867
-D V -30867
-D Y -30867
-D :Y -30867
-D 'Y -30867
-F o -92602
-F e -92602
-F u0065_0328 -92602
-F u -92602
-F r -92602
-F n -92602
-F v -92602
-F a -92602
-F u0061_0328 -92602
-F A -123469
-F u0041_0306 -123469
-F u0041_0328 -123469
-F `A -123469
-F 'A -123469
-F ^A -123469
-F ~A -123469
-F :A -123469
-F oA -123469
-F AE -123469
-F O -30867
-F u004F_030B -30867
-F `O -30867
-F 'O -30867
-F ^O -30867
-F ~O -30867
-F :O -30867
-F OE -30867
-F /O -30867
-F C -30867
-F G -30867
-F 'C -30867
-F u0043_030C -30867
-F u0047_0306 -30867
-F ,C -30867
-F Q -30867
-K v -30867
-K w -30867
-K O -30867
-K u004F_030B -30867
-K `O -30867
-K 'O -30867
-K ^O -30867
-K ~O -30867
-K :O -30867
-K OE -30867
-K /O -30867
-K C -30867
-K G -30867
-K 'C -30867
-K u0043_030C -30867
-K u0047_0306 -30867
-K ,C -30867
-K Q -30867
-L T -92602
-L u0054_030C -92602
-L u0054_0327 -92602
-L Y -92602
-L :Y -92602
-L 'Y -92602
-L V -123469
-L W -123469
-L e -61734
-L u0065_030C -61734
-L u0065_0328 -61734
-L `e -61734
-L 'e -61734
-L ^e -61734
-L :e -61734
-L a -61734
-L u0061_0306 -61734
-L u0061_0328 -61734
-L `a -61734
-L 'a -61734
-L ^a -61734
-L ^a -61734
-L ~a -61734
-L :a -61734
-L oa -61734
-L ae -61734
-L o -61734
-L u006F_030B -61734
-L `o -61734
-L 'o -61734
-L ^o -61734
-L ~o -61734
-L :o -61734
-L oe -61734
-L /o -61734
-L d -61734
-L u0111 -61734
-L c -61734
-L 'c -61734
-L u0063_030C -61734
-L ,c -61734
-L g -61734
-L u0067_0306 -61734
-L q -61734
-O X -30867
-O W -30867
-O A -30867
-O u0041_0306 -30867
-O u0041_0328 -30867
-O `A -30867
-O 'A -30867
-O ^A -30867
-O ~A -30867
-O :A -30867
-O oA -30867
-O AE -30867
-O V -30867
-O Y -30867
-O :Y -30867
-O 'Y -30867
-P A -92602
-P u0041_0306 -92602
-P u0041_0328 -92602
-P `A -92602
-P 'A -92602
-P ^A -92602
-P ~A -92602
-P :A -92602
-P oA -92602
-P AE -92602
-R n -30867
-R u006E_0301 -30867
-R u006E_030C -30867
-R u016A -30867
-R ~n -30867
-R l -30867
-R u006C_0301 -30867
-R u006C_030C -30867
-R r -30867
-R u -30867
-R u0075_030B -30867
-R u0075_030A -30867
-R `u -30867
-R 'u -30867
-R ^u -30867
-R :u -30867
-R m -30867
-R t -30867
-R u0074_030C -30867
-R u0074_0327 -30867
-R i -30867
-R 'i -30867
-R h -30867
-R b -30867
-R k -30867
-R v -30867
-R w -30867
-R C -30867
-R G -30867
-R 'C -30867
-R u0043_030C -30867
-R u0047_0306 -30867
-R ,C -30867
-R Q -30867
-R O -30867
-R u004F_030B -30867
-R `O -30867
-R 'O -30867
-R ^O -30867
-R ~O -30867
-R :O -30867
-R OE -30867
-R /O -30867
-R U -30867
-R u0055_030B -30867
-R u0055_030A -30867
-R `U -30867
-R 'U -30867
-R ^U -30867
-R :U -30867
-R T -92602
-R u0054_030C -92602
-R u0054_0327 -92602
-R Y -92602
-R :Y -92602
-R 'Y -92602
-R V -123469
-R W -123469
-R e -61734
-R u0065_030C -61734
-R u0065_0328 -61734
-R `e -61734
-R 'e -61734
-R ^e -61734
-R :e -61734
-R a -61734
-R u0061_0306 -61734
-R u0061_0328 -61734
-R `a -61734
-R 'a -61734
-R ^a -61734
-R ^a -61734
-R ~a -61734
-R :a -61734
-R oa -61734
-R ae -61734
-R o -61734
-R u006F_030B -61734
-R `o -61734
-R 'o -61734
-R ^o -61734
-R ~o -61734
-R :o -61734
-R oe -61734
-R /o -61734
-R d -61734
-R u0111 -61734
-R c -61734
-R 'c -61734
-R u0063_030C -61734
-R ,c -61734
-R g -61734
-R u0067_0306 -61734
-R q -61734
-T y -92602
-T e -92602
-T o -92602
-T r -92602
-T a -92602
-T u -92602
-T A -92602
-T u0041_0306 -92602
-T u0041_0328 -92602
-T `A -92602
-T 'A -92602
-T ^A -92602
-T ~A -92602
-T :A -92602
-T oA -92602
-T AE -92602
-V o -92602
-V e -92602
-V u0065_0328 -92602
-V u -92602
-V r -92602
-V n -92602
-V v -92602
-V a -92602
-V u0061_0328 -92602
-V A -123469
-V u0041_0306 -123469
-V u0041_0328 -123469
-V `A -123469
-V 'A -123469
-V ^A -123469
-V ~A -123469
-V :A -123469
-V oA -123469
-V AE -123469
-V O -30867
-V u004F_030B -30867
-V `O -30867
-V 'O -30867
-V ^O -30867
-V ~O -30867
-V :O -30867
-V OE -30867
-V /O -30867
-V C -30867
-V G -30867
-V 'C -30867
-V u0043_030C -30867
-V u0047_0306 -30867
-V ,C -30867
-V Q -30867
-W o -92602
-W e -92602
-W u0065_0328 -92602
-W u -92602
-W r -92602
-W n -92602
-W v -92602
-W a -92602
-W u0061_0328 -92602
-W A -123469
-W u0041_0306 -123469
-W u0041_0328 -123469
-W `A -123469
-W 'A -123469
-W ^A -123469
-W ~A -123469
-W :A -123469
-W oA -123469
-W AE -123469
-W O -30867
-W u004F_030B -30867
-W `O -30867
-W 'O -30867
-W ^O -30867
-W ~O -30867
-W :O -30867
-W OE -30867
-W /O -30867
-W C -30867
-W G -30867
-W 'C -30867
-W u0043_030C -30867
-W u0047_0306 -30867
-W ,C -30867
-W Q -30867
-X O -30867
-X u004F_030B -30867
-X `O -30867
-X 'O -30867
-X ^O -30867
-X ~O -30867
-X :O -30867
-X OE -30867
-X /O -30867
-X C -30867
-X G -30867
-X 'C -30867
-X u0043_030C -30867
-X u0047_0306 -30867
-X ,C -30867
-X Q -30867
-Y e -92602
-Y o -92602
-Y r -92602
-Y a -92602
-Y u -92602
-Y A -92602
-Y u0041_0306 -92602
-Y u0041_0328 -92602
-Y `A -92602
-Y 'A -92602
-Y ^A -92602
-Y ~A -92602
-Y :A -92602
-Y oA -92602
-Y AE -92602
-oq lq 123469
-` lq 123469
-oq ? 123469
-` ? 123469
-oq u01C3 123469
-oq ! 123469
-` u01C3 123469
-` ! 123469
-b e -61734
-b u0065_030C -61734
-b u0065_0328 -61734
-b `e -61734
-b 'e -61734
-b ^e -61734
-b :e -61734
-b a -61734
-b u0061_0306 -61734
-b u0061_0328 -61734
-b `a -61734
-b 'a -61734
-b ^a -61734
-b ^a -61734
-b ~a -61734
-b :a -61734
-b oa -61734
-b ae -61734
-b o -61734
-b u006F_030B -61734
-b `o -61734
-b 'o -61734
-b ^o -61734
-b ~o -61734
-b :o -61734
-b oe -61734
-b /o -61734
-b d -61734
-b u0111 -61734
-b c -61734
-b 'c -61734
-b u0063_030C -61734
-b ,c -61734
-b g -61734
-b u0067_0306 -61734
-b q -61734
-c e -61734
-c u0065_030C -61734
-c u0065_0328 -61734
-c `e -61734
-c 'e -61734
-c ^e -61734
-c :e -61734
-c a -61734
-c u0061_0306 -61734
-c u0061_0328 -61734
-c `a -61734
-c 'a -61734
-c ^a -61734
-c ^a -61734
-c ~a -61734
-c :a -61734
-c oa -61734
-c ae -61734
-c o -61734
-c u006F_030B -61734
-c `o -61734
-c 'o -61734
-c ^o -61734
-c ~o -61734
-c :o -61734
-c oe -61734
-c /o -61734
-c d -61734
-c u0111 -61734
-c c -61734
-c 'c -61734
-c u0063_030C -61734
-c ,c -61734
-c g -61734
-c u0067_0306 -61734
-c q -61734
-d l 61734
-d u006C_0301 61734
-d u006C_030C 61734
-e e -61734
-e u0065_030C -61734
-e u0065_0328 -61734
-e `e -61734
-e 'e -61734
-e ^e -61734
-e :e -61734
-e a -61734
-e u0061_0306 -61734
-e u0061_0328 -61734
-e `a -61734
-e 'a -61734
-e ^a -61734
-e ^a -61734
-e ~a -61734
-e :a -61734
-e oa -61734
-e ae -61734
-e o -61734
-e u006F_030B -61734
-e `o -61734
-e 'o -61734
-e ^o -61734
-e ~o -61734
-e :o -61734
-e oe -61734
-e /o -61734
-e d -61734
-e u0111 -61734
-e c -61734
-e 'c -61734
-e u0063_030C -61734
-e ,c -61734
-e g -61734
-e u0067_0306 -61734
-e q -61734
-f cq 111821
-f ' 111821
-f oq 111821
-f ` 111821
-f lq 111821
-f rq 111821
-f ? 111821
-f u01C3 111821
-f ! 111821
-f ) 111821
-f rB 111821
-f ] 111821
-l l 61734
-l u006C_0301 61734
-l u006C_030C 61734
-n cq -123469
-n ' -123469
-o e -61734
-o u0065_030C -61734
-o u0065_0328 -61734
-o `e -61734
-o 'e -61734
-o ^e -61734
-o :e -61734
-o a -61734
-o u0061_0306 -61734
-o u0061_0328 -61734
-o `a -61734
-o 'a -61734
-o ^a -61734
-o ^a -61734
-o ~a -61734
-o :a -61734
-o oa -61734
-o ae -61734
-o o -61734
-o u006F_030B -61734
-o `o -61734
-o 'o -61734
-o ^o -61734
-o ~o -61734
-o :o -61734
-o oe -61734
-o /o -61734
-o d -61734
-o u0111 -61734
-o c -61734
-o 'c -61734
-o u0063_030C -61734
-o ,c -61734
-o g -61734
-o u0067_0306 -61734
-o q -61734
-p e -61734
-p u0065_030C -61734
-p u0065_0328 -61734
-p `e -61734
-p 'e -61734
-p ^e -61734
-p :e -61734
-p a -61734
-p u0061_0306 -61734
-p u0061_0328 -61734
-p `a -61734
-p 'a -61734
-p ^a -61734
-p ^a -61734
-p ~a -61734
-p :a -61734
-p oa -61734
-p ae -61734
-p o -61734
-p u006F_030B -61734
-p `o -61734
-p 'o -61734
-p ^o -61734
-p ~o -61734
-p :o -61734
-p oe -61734
-p /o -61734
-p d -61734
-p u0111 -61734
-p c -61734
-p 'c -61734
-p u0063_030C -61734
-p ,c -61734
-p g -61734
-p u0067_0306 -61734
-p q -61734
-r e -61734
-r u0065_030C -61734
-r u0065_0328 -61734
-r `e -61734
-r 'e -61734
-r ^e -61734
-r :e -61734
-r a -61734
-r u0061_0306 -61734
-r u0061_0328 -61734
-r `a -61734
-r 'a -61734
-r ^a -61734
-r ^a -61734
-r ~a -61734
-r :a -61734
-r oa -61734
-r ae -61734
-r o -61734
-r u006F_030B -61734
-r `o -61734
-r 'o -61734
-r ^o -61734
-r ~o -61734
-r :o -61734
-r oe -61734
-r /o -61734
-r d -61734
-r u0111 -61734
-r c -61734
-r 'c -61734
-r u0063_030C -61734
-r ,c -61734
-r g -61734
-r u0067_0306 -61734
-r q -61734
-w l 61734
-w u006C_0301 61734
-w u006C_030C 61734
-u0041_0306 y -30867
-u0041_0306 :y -30867
-u0041_0306 'y -30867
-u0041_0306 n -30867
-u0041_0306 u006E_0301 -30867
-u0041_0306 u006E_030C -30867
-u0041_0306 u016A -30867
-u0041_0306 ~n -30867
-u0041_0306 l -30867
-u0041_0306 u006C_0301 -30867
-u0041_0306 u006C_030C -30867
-u0041_0306 r -30867
-u0041_0306 u -30867
-u0041_0306 u0075_030B -30867
-u0041_0306 u0075_030A -30867
-u0041_0306 `u -30867
-u0041_0306 'u -30867
-u0041_0306 ^u -30867
-u0041_0306 :u -30867
-u0041_0306 m -30867
-u0041_0306 t -30867
-u0041_0306 u0074_030C -30867
-u0041_0306 u0074_0327 -30867
-u0041_0306 i -30867
-u0041_0306 'i -30867
-u0041_0306 h -30867
-u0041_0306 b -30867
-u0041_0306 k -30867
-u0041_0306 v -30867
-u0041_0306 w -30867
-u0041_0306 C -30867
-u0041_0306 G -30867
-u0041_0306 'C -30867
-u0041_0306 u0043_030C -30867
-u0041_0306 u0047_0306 -30867
-u0041_0306 ,C -30867
-u0041_0306 Q -30867
-u0041_0306 O -30867
-u0041_0306 u004F_030B -30867
-u0041_0306 `O -30867
-u0041_0306 'O -30867
-u0041_0306 ^O -30867
-u0041_0306 ~O -30867
-u0041_0306 :O -30867
-u0041_0306 OE -30867
-u0041_0306 /O -30867
-u0041_0306 U -30867
-u0041_0306 u0055_030B -30867
-u0041_0306 u0055_030A -30867
-u0041_0306 `U -30867
-u0041_0306 'U -30867
-u0041_0306 ^U -30867
-u0041_0306 :U -30867
-u0041_0306 T -92602
-u0041_0306 u0054_030C -92602
-u0041_0306 u0054_0327 -92602
-u0041_0306 Y -92602
-u0041_0306 :Y -92602
-u0041_0306 'Y -92602
-u0041_0306 V -123469
-u0041_0306 W -123469
-u0041_0306 e -61734
-u0041_0306 u0065_030C -61734
-u0041_0306 u0065_0328 -61734
-u0041_0306 `e -61734
-u0041_0306 'e -61734
-u0041_0306 ^e -61734
-u0041_0306 :e -61734
-u0041_0306 a -61734
-u0041_0306 u0061_0306 -61734
-u0041_0306 u0061_0328 -61734
-u0041_0306 `a -61734
-u0041_0306 'a -61734
-u0041_0306 ^a -61734
-u0041_0306 ^a -61734
-u0041_0306 ~a -61734
-u0041_0306 :a -61734
-u0041_0306 oa -61734
-u0041_0306 ae -61734
-u0041_0306 o -61734
-u0041_0306 u006F_030B -61734
-u0041_0306 `o -61734
-u0041_0306 'o -61734
-u0041_0306 ^o -61734
-u0041_0306 ~o -61734
-u0041_0306 :o -61734
-u0041_0306 oe -61734
-u0041_0306 /o -61734
-u0041_0306 d -61734
-u0041_0306 u0111 -61734
-u0041_0306 c -61734
-u0041_0306 'c -61734
-u0041_0306 u0063_030C -61734
-u0041_0306 ,c -61734
-u0041_0306 g -61734
-u0041_0306 u0067_0306 -61734
-u0041_0306 q -61734
-u0041_0328 n -30867
-u0041_0328 u006E_0301 -30867
-u0041_0328 u006E_030C -30867
-u0041_0328 u016A -30867
-u0041_0328 ~n -30867
-u0041_0328 l -30867
-u0041_0328 u006C_0301 -30867
-u0041_0328 u006C_030C -30867
-u0041_0328 r -30867
-u0041_0328 u -30867
-u0041_0328 u0075_030B -30867
-u0041_0328 u0075_030A -30867
-u0041_0328 `u -30867
-u0041_0328 'u -30867
-u0041_0328 ^u -30867
-u0041_0328 :u -30867
-u0041_0328 m -30867
-u0041_0328 t -30867
-u0041_0328 u0074_030C -30867
-u0041_0328 u0074_0327 -30867
-u0041_0328 i -30867
-u0041_0328 'i -30867
-u0041_0328 h -30867
-u0041_0328 b -30867
-u0041_0328 k -30867
-u0041_0328 v -30867
-u0041_0328 w -30867
-u0041_0328 C -30867
-u0041_0328 G -30867
-u0041_0328 'C -30867
-u0041_0328 u0043_030C -30867
-u0041_0328 u0047_0306 -30867
-u0041_0328 ,C -30867
-u0041_0328 Q -30867
-u0041_0328 O -30867
-u0041_0328 u004F_030B -30867
-u0041_0328 `O -30867
-u0041_0328 'O -30867
-u0041_0328 ^O -30867
-u0041_0328 ~O -30867
-u0041_0328 :O -30867
-u0041_0328 OE -30867
-u0041_0328 /O -30867
-u0041_0328 U -30867
-u0041_0328 u0055_030B -30867
-u0041_0328 u0055_030A -30867
-u0041_0328 `U -30867
-u0041_0328 'U -30867
-u0041_0328 ^U -30867
-u0041_0328 :U -30867
-u0041_0328 T -92602
-u0041_0328 u0054_030C -92602
-u0041_0328 u0054_0327 -92602
-u0041_0328 Y -92602
-u0041_0328 :Y -92602
-u0041_0328 'Y -92602
-u0041_0328 V -123469
-u0041_0328 W -123469
-u0041_0328 e -61734
-u0041_0328 u0065_030C -61734
-u0041_0328 u0065_0328 -61734
-u0041_0328 `e -61734
-u0041_0328 'e -61734
-u0041_0328 ^e -61734
-u0041_0328 :e -61734
-u0041_0328 a -61734
-u0041_0328 u0061_0306 -61734
-u0041_0328 u0061_0328 -61734
-u0041_0328 `a -61734
-u0041_0328 'a -61734
-u0041_0328 ^a -61734
-u0041_0328 ^a -61734
-u0041_0328 ~a -61734
-u0041_0328 :a -61734
-u0041_0328 oa -61734
-u0041_0328 ae -61734
-u0041_0328 o -61734
-u0041_0328 u006F_030B -61734
-u0041_0328 `o -61734
-u0041_0328 'o -61734
-u0041_0328 ^o -61734
-u0041_0328 ~o -61734
-u0041_0328 :o -61734
-u0041_0328 oe -61734
-u0041_0328 /o -61734
-u0041_0328 d -61734
-u0041_0328 u0111 -61734
-u0041_0328 c -61734
-u0041_0328 'c -61734
-u0041_0328 u0063_030C -61734
-u0041_0328 ,c -61734
-u0041_0328 g -61734
-u0041_0328 u0067_0306 -61734
-u0041_0328 q -61734
-u0044_030C X -30867
-u0044_030C W -30867
-u0044_030C A -30867
-u0044_030C u0041_0306 -30867
-u0044_030C u0041_0328 -30867
-u0044_030C `A -30867
-u0044_030C 'A -30867
-u0044_030C ^A -30867
-u0044_030C ~A -30867
-u0044_030C :A -30867
-u0044_030C oA -30867
-u0044_030C AE -30867
-u0044_030C V -30867
-u0044_030C Y -30867
-u0044_030C :Y -30867
-u0044_030C 'Y -30867
-u004C_0301 T -92602
-u004C_0301 u0054_030C -92602
-u004C_0301 u0054_0327 -92602
-u004C_0301 Y -92602
-u004C_0301 :Y -92602
-u004C_0301 'Y -92602
-u004C_0301 V -123469
-u004C_0301 W -123469
-u004C_0301 e -61734
-u004C_0301 u0065_030C -61734
-u004C_0301 u0065_0328 -61734
-u004C_0301 `e -61734
-u004C_0301 'e -61734
-u004C_0301 ^e -61734
-u004C_0301 :e -61734
-u004C_0301 a -61734
-u004C_0301 u0061_0306 -61734
-u004C_0301 u0061_0328 -61734
-u004C_0301 `a -61734
-u004C_0301 'a -61734
-u004C_0301 ^a -61734
-u004C_0301 ^a -61734
-u004C_0301 ~a -61734
-u004C_0301 :a -61734
-u004C_0301 oa -61734
-u004C_0301 ae -61734
-u004C_0301 o -61734
-u004C_0301 u006F_030B -61734
-u004C_0301 `o -61734
-u004C_0301 'o -61734
-u004C_0301 ^o -61734
-u004C_0301 ~o -61734
-u004C_0301 :o -61734
-u004C_0301 oe -61734
-u004C_0301 /o -61734
-u004C_0301 d -61734
-u004C_0301 u0111 -61734
-u004C_0301 c -61734
-u004C_0301 'c -61734
-u004C_0301 u0063_030C -61734
-u004C_0301 ,c -61734
-u004C_0301 g -61734
-u004C_0301 u0067_0306 -61734
-u004C_0301 q -61734
-u004C_030C T -92602
-u004C_030C u0054_030C -92602
-u004C_030C u0054_0327 -92602
-u004C_030C Y -92602
-u004C_030C :Y -92602
-u004C_030C 'Y -92602
-u004C_030C V -123469
-u004C_030C W -123469
-u004C_030C e -61734
-u004C_030C u0065_030C -61734
-u004C_030C u0065_0328 -61734
-u004C_030C `e -61734
-u004C_030C 'e -61734
-u004C_030C ^e -61734
-u004C_030C :e -61734
-u004C_030C a -61734
-u004C_030C u0061_0306 -61734
-u004C_030C u0061_0328 -61734
-u004C_030C `a -61734
-u004C_030C 'a -61734
-u004C_030C ^a -61734
-u004C_030C ^a -61734
-u004C_030C ~a -61734
-u004C_030C :a -61734
-u004C_030C oa -61734
-u004C_030C ae -61734
-u004C_030C o -61734
-u004C_030C u006F_030B -61734
-u004C_030C `o -61734
-u004C_030C 'o -61734
-u004C_030C ^o -61734
-u004C_030C ~o -61734
-u004C_030C :o -61734
-u004C_030C oe -61734
-u004C_030C /o -61734
-u004C_030C d -61734
-u004C_030C u0111 -61734
-u004C_030C c -61734
-u004C_030C 'c -61734
-u004C_030C u0063_030C -61734
-u004C_030C ,c -61734
-u004C_030C g -61734
-u004C_030C u0067_0306 -61734
-u004C_030C q -61734
-u004F_030B X -30867
-u004F_030B W -30867
-u004F_030B A -30867
-u004F_030B u0041_0306 -30867
-u004F_030B u0041_0328 -30867
-u004F_030B `A -30867
-u004F_030B 'A -30867
-u004F_030B ^A -30867
-u004F_030B ~A -30867
-u004F_030B :A -30867
-u004F_030B oA -30867
-u004F_030B AE -30867
-u004F_030B V -30867
-u004F_030B Y -30867
-u004F_030B :Y -30867
-u004F_030B 'Y -30867
-u0052_0301 n -30867
-u0052_0301 u006E_0301 -30867
-u0052_0301 u006E_030C -30867
-u0052_0301 u016A -30867
-u0052_0301 ~n -30867
-u0052_0301 l -30867
-u0052_0301 u006C_0301 -30867
-u0052_0301 u006C_030C -30867
-u0052_0301 r -30867
-u0052_0301 u -30867
-u0052_0301 u0075_030B -30867
-u0052_0301 u0075_030A -30867
-u0052_0301 `u -30867
-u0052_0301 'u -30867
-u0052_0301 ^u -30867
-u0052_0301 :u -30867
-u0052_0301 m -30867
-u0052_0301 t -30867
-u0052_0301 u0074_030C -30867
-u0052_0301 u0074_0327 -30867
-u0052_0301 i -30867
-u0052_0301 'i -30867
-u0052_0301 h -30867
-u0052_0301 b -30867
-u0052_0301 k -30867
-u0052_0301 v -30867
-u0052_0301 w -30867
-u0052_0301 C -30867
-u0052_0301 G -30867
-u0052_0301 'C -30867
-u0052_0301 u0043_030C -30867
-u0052_0301 u0047_0306 -30867
-u0052_0301 ,C -30867
-u0052_0301 Q -30867
-u0052_0301 O -30867
-u0052_0301 u004F_030B -30867
-u0052_0301 `O -30867
-u0052_0301 'O -30867
-u0052_0301 ^O -30867
-u0052_0301 ~O -30867
-u0052_0301 :O -30867
-u0052_0301 OE -30867
-u0052_0301 /O -30867
-u0052_0301 U -30867
-u0052_0301 u0055_030B -30867
-u0052_0301 u0055_030A -30867
-u0052_0301 `U -30867
-u0052_0301 'U -30867
-u0052_0301 ^U -30867
-u0052_0301 :U -30867
-u0052_0301 T -92602
-u0052_0301 u0054_030C -92602
-u0052_0301 u0054_0327 -92602
-u0052_0301 Y -92602
-u0052_0301 :Y -92602
-u0052_0301 'Y -92602
-u0052_0301 V -123469
-u0052_0301 W -123469
-u0052_0301 e -61734
-u0052_0301 u0065_030C -61734
-u0052_0301 u0065_0328 -61734
-u0052_0301 `e -61734
-u0052_0301 'e -61734
-u0052_0301 ^e -61734
-u0052_0301 :e -61734
-u0052_0301 a -61734
-u0052_0301 u0061_0306 -61734
-u0052_0301 u0061_0328 -61734
-u0052_0301 `a -61734
-u0052_0301 'a -61734
-u0052_0301 ^a -61734
-u0052_0301 ^a -61734
-u0052_0301 ~a -61734
-u0052_0301 :a -61734
-u0052_0301 oa -61734
-u0052_0301 ae -61734
-u0052_0301 o -61734
-u0052_0301 u006F_030B -61734
-u0052_0301 `o -61734
-u0052_0301 'o -61734
-u0052_0301 ^o -61734
-u0052_0301 ~o -61734
-u0052_0301 :o -61734
-u0052_0301 oe -61734
-u0052_0301 /o -61734
-u0052_0301 d -61734
-u0052_0301 u0111 -61734
-u0052_0301 c -61734
-u0052_0301 'c -61734
-u0052_0301 u0063_030C -61734
-u0052_0301 ,c -61734
-u0052_0301 g -61734
-u0052_0301 u0067_0306 -61734
-u0052_0301 q -61734
-u0054_030C y -92602
-u0054_030C e -92602
-u0054_030C o -92602
-u0054_030C r -92602
-u0054_030C a -92602
-u0054_030C u -92602
-u0054_030C A -92602
-u0054_030C u0041_0306 -92602
-u0054_030C u0041_0328 -92602
-u0054_030C `A -92602
-u0054_030C 'A -92602
-u0054_030C ^A -92602
-u0054_030C ~A -92602
-u0054_030C :A -92602
-u0054_030C oA -92602
-u0054_030C AE -92602
-u0054_0327 y -92602
-u0054_0327 e -92602
-u0054_0327 o -92602
-u0054_0327 r -92602
-u0054_0327 a -92602
-u0054_0327 u -92602
-u0054_0327 A -92602
-u0054_0327 u0041_0306 -92602
-u0054_0327 u0041_0328 -92602
-u0054_0327 `A -92602
-u0054_0327 'A -92602
-u0054_0327 ^A -92602
-u0054_0327 ~A -92602
-u0054_0327 :A -92602
-u0054_0327 oA -92602
-u0054_0327 AE -92602
-:Y e -92602
-:Y o -92602
-:Y r -92602
-:Y a -92602
-:Y u -92602
-:Y A -92602
-:Y u0041_0306 -92602
-:Y u0041_0328 -92602
-:Y `A -92602
-:Y 'A -92602
-:Y ^A -92602
-:Y ~A -92602
-:Y :A -92602
-:Y oA -92602
-:Y AE -92602
-'c e -61734
-'c u0065_030C -61734
-'c u0065_0328 -61734
-'c `e -61734
-'c 'e -61734
-'c ^e -61734
-'c :e -61734
-'c a -61734
-'c u0061_0306 -61734
-'c u0061_0328 -61734
-'c `a -61734
-'c 'a -61734
-'c ^a -61734
-'c ^a -61734
-'c ~a -61734
-'c :a -61734
-'c oa -61734
-'c ae -61734
-'c o -61734
-'c u006F_030B -61734
-'c `o -61734
-'c 'o -61734
-'c ^o -61734
-'c ~o -61734
-'c :o -61734
-'c oe -61734
-'c /o -61734
-'c d -61734
-'c u0111 -61734
-'c c -61734
-'c 'c -61734
-'c u0063_030C -61734
-'c ,c -61734
-'c g -61734
-'c u0067_0306 -61734
-'c q -61734
-u0063_030C e -61734
-u0063_030C u0065_030C -61734
-u0063_030C u0065_0328 -61734
-u0063_030C `e -61734
-u0063_030C 'e -61734
-u0063_030C ^e -61734
-u0063_030C :e -61734
-u0063_030C a -61734
-u0063_030C u0061_0306 -61734
-u0063_030C u0061_0328 -61734
-u0063_030C `a -61734
-u0063_030C 'a -61734
-u0063_030C ^a -61734
-u0063_030C ^a -61734
-u0063_030C ~a -61734
-u0063_030C :a -61734
-u0063_030C oa -61734
-u0063_030C ae -61734
-u0063_030C o -61734
-u0063_030C u006F_030B -61734
-u0063_030C `o -61734
-u0063_030C 'o -61734
-u0063_030C ^o -61734
-u0063_030C ~o -61734
-u0063_030C :o -61734
-u0063_030C oe -61734
-u0063_030C /o -61734
-u0063_030C d -61734
-u0063_030C u0111 -61734
-u0063_030C c -61734
-u0063_030C 'c -61734
-u0063_030C u0063_030C -61734
-u0063_030C ,c -61734
-u0063_030C g -61734
-u0063_030C u0067_0306 -61734
-u0063_030C q -61734
-u0064_030C l 61734
-u0064_030C u006C_0301 61734
-u0064_030C u006C_030C 61734
-u0065_030C e -61734
-u0065_030C u0065_030C -61734
-u0065_030C u0065_0328 -61734
-u0065_030C `e -61734
-u0065_030C 'e -61734
-u0065_030C ^e -61734
-u0065_030C :e -61734
-u0065_030C a -61734
-u0065_030C u0061_0306 -61734
-u0065_030C u0061_0328 -61734
-u0065_030C `a -61734
-u0065_030C 'a -61734
-u0065_030C ^a -61734
-u0065_030C ^a -61734
-u0065_030C ~a -61734
-u0065_030C :a -61734
-u0065_030C oa -61734
-u0065_030C ae -61734
-u0065_030C o -61734
-u0065_030C u006F_030B -61734
-u0065_030C `o -61734
-u0065_030C 'o -61734
-u0065_030C ^o -61734
-u0065_030C ~o -61734
-u0065_030C :o -61734
-u0065_030C oe -61734
-u0065_030C /o -61734
-u0065_030C d -61734
-u0065_030C u0111 -61734
-u0065_030C c -61734
-u0065_030C 'c -61734
-u0065_030C u0063_030C -61734
-u0065_030C ,c -61734
-u0065_030C g -61734
-u0065_030C u0067_0306 -61734
-u0065_030C q -61734
-u0065_0328 e -61734
-u0065_0328 u0065_030C -61734
-u0065_0328 u0065_0328 -61734
-u0065_0328 `e -61734
-u0065_0328 'e -61734
-u0065_0328 ^e -61734
-u0065_0328 :e -61734
-u0065_0328 a -61734
-u0065_0328 u0061_0306 -61734
-u0065_0328 u0061_0328 -61734
-u0065_0328 `a -61734
-u0065_0328 'a -61734
-u0065_0328 ^a -61734
-u0065_0328 ^a -61734
-u0065_0328 ~a -61734
-u0065_0328 :a -61734
-u0065_0328 oa -61734
-u0065_0328 ae -61734
-u0065_0328 o -61734
-u0065_0328 u006F_030B -61734
-u0065_0328 `o -61734
-u0065_0328 'o -61734
-u0065_0328 ^o -61734
-u0065_0328 ~o -61734
-u0065_0328 :o -61734
-u0065_0328 oe -61734
-u0065_0328 /o -61734
-u0065_0328 d -61734
-u0065_0328 u0111 -61734
-u0065_0328 c -61734
-u0065_0328 'c -61734
-u0065_0328 u0063_030C -61734
-u0065_0328 ,c -61734
-u0065_0328 g -61734
-u0065_0328 u0067_0306 -61734
-u0065_0328 q -61734
-u006C_0301 l 61734
-u006C_0301 u006C_0301 61734
-u006C_0301 u006C_030C 61734
-u006C_030C l 61734
-u006C_030C u006C_0301 61734
-u006C_030C u006C_030C 61734
-/l cq 30867
-/l ' 30867
-`A y -30867
-`A :y -30867
-`A 'y -30867
-`A n -30867
-`A u006E_0301 -30867
-`A u006E_030C -30867
-`A u016A -30867
-`A ~n -30867
-`A l -30867
-`A u006C_0301 -30867
-`A u006C_030C -30867
-`A r -30867
-`A u -30867
-`A u0075_030B -30867
-`A u0075_030A -30867
-`A `u -30867
-`A 'u -30867
-`A ^u -30867
-`A :u -30867
-`A m -30867
-`A t -30867
-`A u0074_030C -30867
-`A u0074_0327 -30867
-`A i -30867
-`A 'i -30867
-`A h -30867
-`A b -30867
-`A k -30867
-`A v -30867
-`A w -30867
-`A C -30867
-`A G -30867
-`A 'C -30867
-`A u0043_030C -30867
-`A u0047_0306 -30867
-`A ,C -30867
-`A Q -30867
-`A O -30867
-`A u004F_030B -30867
-`A `O -30867
-`A 'O -30867
-`A ^O -30867
-`A ~O -30867
-`A :O -30867
-`A OE -30867
-`A /O -30867
-`A U -30867
-`A u0055_030B -30867
-`A u0055_030A -30867
-`A `U -30867
-`A 'U -30867
-`A ^U -30867
-`A :U -30867
-`A T -92602
-`A u0054_030C -92602
-`A u0054_0327 -92602
-`A Y -92602
-`A :Y -92602
-`A 'Y -92602
-`A V -123469
-`A W -123469
-`A e -61734
-`A u0065_030C -61734
-`A u0065_0328 -61734
-`A `e -61734
-`A 'e -61734
-`A ^e -61734
-`A :e -61734
-`A a -61734
-`A u0061_0306 -61734
-`A u0061_0328 -61734
-`A `a -61734
-`A 'a -61734
-`A ^a -61734
-`A ^a -61734
-`A ~a -61734
-`A :a -61734
-`A oa -61734
-`A ae -61734
-`A o -61734
-`A u006F_030B -61734
-`A `o -61734
-`A 'o -61734
-`A ^o -61734
-`A ~o -61734
-`A :o -61734
-`A oe -61734
-`A /o -61734
-`A d -61734
-`A u0111 -61734
-`A c -61734
-`A 'c -61734
-`A u0063_030C -61734
-`A ,c -61734
-`A g -61734
-`A u0067_0306 -61734
-`A q -61734
-'A y -30867
-'A :y -30867
-'A 'y -30867
-'A n -30867
-'A u006E_0301 -30867
-'A u006E_030C -30867
-'A u016A -30867
-'A ~n -30867
-'A l -30867
-'A u006C_0301 -30867
-'A u006C_030C -30867
-'A r -30867
-'A u -30867
-'A u0075_030B -30867
-'A u0075_030A -30867
-'A `u -30867
-'A 'u -30867
-'A ^u -30867
-'A :u -30867
-'A m -30867
-'A t -30867
-'A u0074_030C -30867
-'A u0074_0327 -30867
-'A i -30867
-'A 'i -30867
-'A h -30867
-'A b -30867
-'A k -30867
-'A v -30867
-'A w -30867
-'A C -30867
-'A G -30867
-'A 'C -30867
-'A u0043_030C -30867
-'A u0047_0306 -30867
-'A ,C -30867
-'A Q -30867
-'A O -30867
-'A u004F_030B -30867
-'A `O -30867
-'A 'O -30867
-'A ^O -30867
-'A ~O -30867
-'A :O -30867
-'A OE -30867
-'A /O -30867
-'A U -30867
-'A u0055_030B -30867
-'A u0055_030A -30867
-'A `U -30867
-'A 'U -30867
-'A ^U -30867
-'A :U -30867
-'A T -92602
-'A u0054_030C -92602
-'A u0054_0327 -92602
-'A Y -92602
-'A :Y -92602
-'A 'Y -92602
-'A V -123469
-'A W -123469
-'A e -61734
-'A u0065_030C -61734
-'A u0065_0328 -61734
-'A `e -61734
-'A 'e -61734
-'A ^e -61734
-'A :e -61734
-'A a -61734
-'A u0061_0306 -61734
-'A u0061_0328 -61734
-'A `a -61734
-'A 'a -61734
-'A ^a -61734
-'A ^a -61734
-'A ~a -61734
-'A :a -61734
-'A oa -61734
-'A ae -61734
-'A o -61734
-'A u006F_030B -61734
-'A `o -61734
-'A 'o -61734
-'A ^o -61734
-'A ~o -61734
-'A :o -61734
-'A oe -61734
-'A /o -61734
-'A d -61734
-'A u0111 -61734
-'A c -61734
-'A 'c -61734
-'A u0063_030C -61734
-'A ,c -61734
-'A g -61734
-'A u0067_0306 -61734
-'A q -61734
-^A y -30867
-^A :y -30867
-^A 'y -30867
-^A n -30867
-^A u006E_0301 -30867
-^A u006E_030C -30867
-^A u016A -30867
-^A ~n -30867
-^A l -30867
-^A u006C_0301 -30867
-^A u006C_030C -30867
-^A r -30867
-^A u -30867
-^A u0075_030B -30867
-^A u0075_030A -30867
-^A `u -30867
-^A 'u -30867
-^A ^u -30867
-^A :u -30867
-^A m -30867
-^A t -30867
-^A u0074_030C -30867
-^A u0074_0327 -30867
-^A i -30867
-^A 'i -30867
-^A h -30867
-^A b -30867
-^A k -30867
-^A v -30867
-^A w -30867
-^A C -30867
-^A G -30867
-^A 'C -30867
-^A u0043_030C -30867
-^A u0047_0306 -30867
-^A ,C -30867
-^A Q -30867
-^A O -30867
-^A u004F_030B -30867
-^A `O -30867
-^A 'O -30867
-^A ^O -30867
-^A ~O -30867
-^A :O -30867
-^A OE -30867
-^A /O -30867
-^A U -30867
-^A u0055_030B -30867
-^A u0055_030A -30867
-^A `U -30867
-^A 'U -30867
-^A ^U -30867
-^A :U -30867
-^A T -92602
-^A u0054_030C -92602
-^A u0054_0327 -92602
-^A Y -92602
-^A :Y -92602
-^A 'Y -92602
-^A V -123469
-^A W -123469
-^A e -61734
-^A u0065_030C -61734
-^A u0065_0328 -61734
-^A `e -61734
-^A 'e -61734
-^A ^e -61734
-^A :e -61734
-^A a -61734
-^A u0061_0306 -61734
-^A u0061_0328 -61734
-^A `a -61734
-^A 'a -61734
-^A ^a -61734
-^A ^a -61734
-^A ~a -61734
-^A :a -61734
-^A oa -61734
-^A ae -61734
-^A o -61734
-^A u006F_030B -61734
-^A `o -61734
-^A 'o -61734
-^A ^o -61734
-^A ~o -61734
-^A :o -61734
-^A oe -61734
-^A /o -61734
-^A d -61734
-^A u0111 -61734
-^A c -61734
-^A 'c -61734
-^A u0063_030C -61734
-^A ,c -61734
-^A g -61734
-^A u0067_0306 -61734
-^A q -61734
-~A y -30867
-~A :y -30867
-~A 'y -30867
-~A n -30867
-~A u006E_0301 -30867
-~A u006E_030C -30867
-~A u016A -30867
-~A ~n -30867
-~A l -30867
-~A u006C_0301 -30867
-~A u006C_030C -30867
-~A r -30867
-~A u -30867
-~A u0075_030B -30867
-~A u0075_030A -30867
-~A `u -30867
-~A 'u -30867
-~A ^u -30867
-~A :u -30867
-~A m -30867
-~A t -30867
-~A u0074_030C -30867
-~A u0074_0327 -30867
-~A i -30867
-~A 'i -30867
-~A h -30867
-~A b -30867
-~A k -30867
-~A v -30867
-~A w -30867
-~A C -30867
-~A G -30867
-~A 'C -30867
-~A u0043_030C -30867
-~A u0047_0306 -30867
-~A ,C -30867
-~A Q -30867
-~A O -30867
-~A u004F_030B -30867
-~A `O -30867
-~A 'O -30867
-~A ^O -30867
-~A ~O -30867
-~A :O -30867
-~A OE -30867
-~A /O -30867
-~A U -30867
-~A u0055_030B -30867
-~A u0055_030A -30867
-~A `U -30867
-~A 'U -30867
-~A ^U -30867
-~A :U -30867
-~A T -92602
-~A u0054_030C -92602
-~A u0054_0327 -92602
-~A Y -92602
-~A :Y -92602
-~A 'Y -92602
-~A V -123469
-~A W -123469
-~A e -61734
-~A u0065_030C -61734
-~A u0065_0328 -61734
-~A `e -61734
-~A 'e -61734
-~A ^e -61734
-~A :e -61734
-~A a -61734
-~A u0061_0306 -61734
-~A u0061_0328 -61734
-~A `a -61734
-~A 'a -61734
-~A ^a -61734
-~A ^a -61734
-~A ~a -61734
-~A :a -61734
-~A oa -61734
-~A ae -61734
-~A o -61734
-~A u006F_030B -61734
-~A `o -61734
-~A 'o -61734
-~A ^o -61734
-~A ~o -61734
-~A :o -61734
-~A oe -61734
-~A /o -61734
-~A d -61734
-~A u0111 -61734
-~A c -61734
-~A 'c -61734
-~A u0063_030C -61734
-~A ,c -61734
-~A g -61734
-~A u0067_0306 -61734
-~A q -61734
-:A y -30867
-:A :y -30867
-:A 'y -30867
-:A n -30867
-:A u006E_0301 -30867
-:A u006E_030C -30867
-:A u016A -30867
-:A ~n -30867
-:A l -30867
-:A u006C_0301 -30867
-:A u006C_030C -30867
-:A r -30867
-:A u -30867
-:A u0075_030B -30867
-:A u0075_030A -30867
-:A `u -30867
-:A 'u -30867
-:A ^u -30867
-:A :u -30867
-:A m -30867
-:A t -30867
-:A u0074_030C -30867
-:A u0074_0327 -30867
-:A i -30867
-:A 'i -30867
-:A h -30867
-:A b -30867
-:A k -30867
-:A v -30867
-:A w -30867
-:A C -30867
-:A G -30867
-:A 'C -30867
-:A u0043_030C -30867
-:A u0047_0306 -30867
-:A ,C -30867
-:A Q -30867
-:A O -30867
-:A u004F_030B -30867
-:A `O -30867
-:A 'O -30867
-:A ^O -30867
-:A ~O -30867
-:A :O -30867
-:A OE -30867
-:A /O -30867
-:A U -30867
-:A u0055_030B -30867
-:A u0055_030A -30867
-:A `U -30867
-:A 'U -30867
-:A ^U -30867
-:A :U -30867
-:A T -92602
-:A u0054_030C -92602
-:A u0054_0327 -92602
-:A Y -92602
-:A :Y -92602
-:A 'Y -92602
-:A V -123469
-:A W -123469
-:A e -61734
-:A u0065_030C -61734
-:A u0065_0328 -61734
-:A `e -61734
-:A 'e -61734
-:A ^e -61734
-:A :e -61734
-:A a -61734
-:A u0061_0306 -61734
-:A u0061_0328 -61734
-:A `a -61734
-:A 'a -61734
-:A ^a -61734
-:A ^a -61734
-:A ~a -61734
-:A :a -61734
-:A oa -61734
-:A ae -61734
-:A o -61734
-:A u006F_030B -61734
-:A `o -61734
-:A 'o -61734
-:A ^o -61734
-:A ~o -61734
-:A :o -61734
-:A oe -61734
-:A /o -61734
-:A d -61734
-:A u0111 -61734
-:A c -61734
-:A 'c -61734
-:A u0063_030C -61734
-:A ,c -61734
-:A g -61734
-:A u0067_0306 -61734
-:A q -61734
-oA y -30867
-oA :y -30867
-oA 'y -30867
-oA n -30867
-oA u006E_0301 -30867
-oA u006E_030C -30867
-oA u016A -30867
-oA ~n -30867
-oA l -30867
-oA u006C_0301 -30867
-oA u006C_030C -30867
-oA r -30867
-oA u -30867
-oA u0075_030B -30867
-oA u0075_030A -30867
-oA `u -30867
-oA 'u -30867
-oA ^u -30867
-oA :u -30867
-oA m -30867
-oA t -30867
-oA u0074_030C -30867
-oA u0074_0327 -30867
-oA i -30867
-oA 'i -30867
-oA h -30867
-oA b -30867
-oA k -30867
-oA v -30867
-oA w -30867
-oA C -30867
-oA G -30867
-oA 'C -30867
-oA u0043_030C -30867
-oA u0047_0306 -30867
-oA ,C -30867
-oA Q -30867
-oA O -30867
-oA u004F_030B -30867
-oA `O -30867
-oA 'O -30867
-oA ^O -30867
-oA ~O -30867
-oA :O -30867
-oA OE -30867
-oA /O -30867
-oA U -30867
-oA u0055_030B -30867
-oA u0055_030A -30867
-oA `U -30867
-oA 'U -30867
-oA ^U -30867
-oA :U -30867
-oA T -92602
-oA u0054_030C -92602
-oA u0054_0327 -92602
-oA Y -92602
-oA :Y -92602
-oA 'Y -92602
-oA V -123469
-oA W -123469
-oA e -61734
-oA u0065_030C -61734
-oA u0065_0328 -61734
-oA `e -61734
-oA 'e -61734
-oA ^e -61734
-oA :e -61734
-oA a -61734
-oA u0061_0306 -61734
-oA u0061_0328 -61734
-oA `a -61734
-oA 'a -61734
-oA ^a -61734
-oA ^a -61734
-oA ~a -61734
-oA :a -61734
-oA oa -61734
-oA ae -61734
-oA o -61734
-oA u006F_030B -61734
-oA `o -61734
-oA 'o -61734
-oA ^o -61734
-oA ~o -61734
-oA :o -61734
-oA oe -61734
-oA /o -61734
-oA d -61734
-oA u0111 -61734
-oA c -61734
-oA 'c -61734
-oA u0063_030C -61734
-oA ,c -61734
-oA g -61734
-oA u0067_0306 -61734
-oA q -61734
-u0189 X -30867
-u0110 X -30867
--D X -30867
-u0189 W -30867
-u0110 W -30867
--D W -30867
-u0189 A -30867
-u0110 A -30867
--D A -30867
-u0189 u0041_0306 -30867
-u0110 u0041_0306 -30867
--D u0041_0306 -30867
-u0189 u0041_0328 -30867
-u0110 u0041_0328 -30867
--D u0041_0328 -30867
-u0189 `A -30867
-u0110 `A -30867
--D `A -30867
-u0189 'A -30867
-u0110 'A -30867
--D 'A -30867
-u0189 ^A -30867
-u0110 ^A -30867
--D ^A -30867
-u0189 ~A -30867
-u0110 ~A -30867
--D ~A -30867
-u0189 :A -30867
-u0110 :A -30867
--D :A -30867
-u0189 oA -30867
-u0110 oA -30867
--D oA -30867
-u0189 AE -30867
-u0110 AE -30867
--D AE -30867
-u0189 V -30867
-u0110 V -30867
--D V -30867
-u0189 Y -30867
-u0110 Y -30867
--D Y -30867
-u0189 :Y -30867
-u0110 :Y -30867
--D :Y -30867
-u0189 'Y -30867
-u0110 'Y -30867
--D 'Y -30867
-`O X -30867
-`O W -30867
-`O A -30867
-`O u0041_0306 -30867
-`O u0041_0328 -30867
-`O `A -30867
-`O 'A -30867
-`O ^A -30867
-`O ~A -30867
-`O :A -30867
-`O oA -30867
-`O AE -30867
-`O V -30867
-`O Y -30867
-`O :Y -30867
-`O 'Y -30867
-'O X -30867
-'O W -30867
-'O A -30867
-'O u0041_0306 -30867
-'O u0041_0328 -30867
-'O `A -30867
-'O 'A -30867
-'O ^A -30867
-'O ~A -30867
-'O :A -30867
-'O oA -30867
-'O AE -30867
-'O V -30867
-'O Y -30867
-'O :Y -30867
-'O 'Y -30867
-^O X -30867
-^O W -30867
-^O A -30867
-^O u0041_0306 -30867
-^O u0041_0328 -30867
-^O `A -30867
-^O 'A -30867
-^O ^A -30867
-^O ~A -30867
-^O :A -30867
-^O oA -30867
-^O AE -30867
-^O V -30867
-^O Y -30867
-^O :Y -30867
-^O 'Y -30867
-~O X -30867
-~O W -30867
-~O A -30867
-~O u0041_0306 -30867
-~O u0041_0328 -30867
-~O `A -30867
-~O 'A -30867
-~O ^A -30867
-~O ~A -30867
-~O :A -30867
-~O oA -30867
-~O AE -30867
-~O V -30867
-~O Y -30867
-~O :Y -30867
-~O 'Y -30867
-:O X -30867
-:O W -30867
-:O A -30867
-:O u0041_0306 -30867
-:O u0041_0328 -30867
-:O `A -30867
-:O 'A -30867
-:O ^A -30867
-:O ~A -30867
-:O :A -30867
-:O oA -30867
-:O AE -30867
-:O V -30867
-:O Y -30867
-:O :Y -30867
-:O 'Y -30867
-/O X -30867
-/O W -30867
-/O A -30867
-/O u0041_0306 -30867
-/O u0041_0328 -30867
-/O `A -30867
-/O 'A -30867
-/O ^A -30867
-/O ~A -30867
-/O :A -30867
-/O oA -30867
-/O AE -30867
-/O V -30867
-/O Y -30867
-/O :Y -30867
-/O 'Y -30867
-'Y e -92602
-'Y o -92602
-'Y r -92602
-'Y a -92602
-'Y u -92602
-'Y A -92602
-'Y u0041_0306 -92602
-'Y u0041_0328 -92602
-'Y `A -92602
-'Y 'A -92602
-'Y ^A -92602
-'Y ~A -92602
-'Y :A -92602
-'Y oA -92602
-'Y AE -92602
-`e e -61734
-`e u0065_030C -61734
-`e u0065_0328 -61734
-`e `e -61734
-`e 'e -61734
-`e ^e -61734
-`e :e -61734
-`e a -61734
-`e u0061_0306 -61734
-`e u0061_0328 -61734
-`e `a -61734
-`e 'a -61734
-`e ^a -61734
-`e ^a -61734
-`e ~a -61734
-`e :a -61734
-`e oa -61734
-`e ae -61734
-`e o -61734
-`e u006F_030B -61734
-`e `o -61734
-`e 'o -61734
-`e ^o -61734
-`e ~o -61734
-`e :o -61734
-`e oe -61734
-`e /o -61734
-`e d -61734
-`e u0111 -61734
-`e c -61734
-`e 'c -61734
-`e u0063_030C -61734
-`e ,c -61734
-`e g -61734
-`e u0067_0306 -61734
-`e q -61734
-'e e -61734
-'e u0065_030C -61734
-'e u0065_0328 -61734
-'e `e -61734
-'e 'e -61734
-'e ^e -61734
-'e :e -61734
-'e a -61734
-'e u0061_0306 -61734
-'e u0061_0328 -61734
-'e `a -61734
-'e 'a -61734
-'e ^a -61734
-'e ^a -61734
-'e ~a -61734
-'e :a -61734
-'e oa -61734
-'e ae -61734
-'e o -61734
-'e u006F_030B -61734
-'e `o -61734
-'e 'o -61734
-'e ^o -61734
-'e ~o -61734
-'e :o -61734
-'e oe -61734
-'e /o -61734
-'e d -61734
-'e u0111 -61734
-'e c -61734
-'e 'c -61734
-'e u0063_030C -61734
-'e ,c -61734
-'e g -61734
-'e u0067_0306 -61734
-'e q -61734
-^e e -61734
-^e u0065_030C -61734
-^e u0065_0328 -61734
-^e `e -61734
-^e 'e -61734
-^e ^e -61734
-^e :e -61734
-^e a -61734
-^e u0061_0306 -61734
-^e u0061_0328 -61734
-^e `a -61734
-^e 'a -61734
-^e ^a -61734
-^e ^a -61734
-^e ~a -61734
-^e :a -61734
-^e oa -61734
-^e ae -61734
-^e o -61734
-^e u006F_030B -61734
-^e `o -61734
-^e 'o -61734
-^e ^o -61734
-^e ~o -61734
-^e :o -61734
-^e oe -61734
-^e /o -61734
-^e d -61734
-^e u0111 -61734
-^e c -61734
-^e 'c -61734
-^e u0063_030C -61734
-^e ,c -61734
-^e g -61734
-^e u0067_0306 -61734
-^e q -61734
-:e e -61734
-:e u0065_030C -61734
-:e u0065_0328 -61734
-:e `e -61734
-:e 'e -61734
-:e ^e -61734
-:e :e -61734
-:e a -61734
-:e u0061_0306 -61734
-:e u0061_0328 -61734
-:e `a -61734
-:e 'a -61734
-:e ^a -61734
-:e ^a -61734
-:e ~a -61734
-:e :a -61734
-:e oa -61734
-:e ae -61734
-:e o -61734
-:e u006F_030B -61734
-:e `o -61734
-:e 'o -61734
-:e ^o -61734
-:e ~o -61734
-:e :o -61734
-:e oe -61734
-:e /o -61734
-:e d -61734
-:e u0111 -61734
-:e c -61734
-:e 'c -61734
-:e u0063_030C -61734
-:e ,c -61734
-:e g -61734
-:e u0067_0306 -61734
-:e q -61734
-`o e -61734
-`o u0065_030C -61734
-`o u0065_0328 -61734
-`o `e -61734
-`o 'e -61734
-`o ^e -61734
-`o :e -61734
-`o a -61734
-`o u0061_0306 -61734
-`o u0061_0328 -61734
-`o `a -61734
-`o 'a -61734
-`o ^a -61734
-`o ^a -61734
-`o ~a -61734
-`o :a -61734
-`o oa -61734
-`o ae -61734
-`o o -61734
-`o u006F_030B -61734
-`o `o -61734
-`o 'o -61734
-`o ^o -61734
-`o ~o -61734
-`o :o -61734
-`o oe -61734
-`o /o -61734
-`o d -61734
-`o u0111 -61734
-`o c -61734
-`o 'c -61734
-`o u0063_030C -61734
-`o ,c -61734
-`o g -61734
-`o u0067_0306 -61734
-`o q -61734
-'o e -61734
-'o u0065_030C -61734
-'o u0065_0328 -61734
-'o `e -61734
-'o 'e -61734
-'o ^e -61734
-'o :e -61734
-'o a -61734
-'o u0061_0306 -61734
-'o u0061_0328 -61734
-'o `a -61734
-'o 'a -61734
-'o ^a -61734
-'o ^a -61734
-'o ~a -61734
-'o :a -61734
-'o oa -61734
-'o ae -61734
-'o o -61734
-'o u006F_030B -61734
-'o `o -61734
-'o 'o -61734
-'o ^o -61734
-'o ~o -61734
-'o :o -61734
-'o oe -61734
-'o /o -61734
-'o d -61734
-'o u0111 -61734
-'o c -61734
-'o 'c -61734
-'o u0063_030C -61734
-'o ,c -61734
-'o g -61734
-'o u0067_0306 -61734
-'o q -61734
-^o e -61734
-^o u0065_030C -61734
-^o u0065_0328 -61734
-^o `e -61734
-^o 'e -61734
-^o ^e -61734
-^o :e -61734
-^o a -61734
-^o u0061_0306 -61734
-^o u0061_0328 -61734
-^o `a -61734
-^o 'a -61734
-^o ^a -61734
-^o ^a -61734
-^o ~a -61734
-^o :a -61734
-^o oa -61734
-^o ae -61734
-^o o -61734
-^o u006F_030B -61734
-^o `o -61734
-^o 'o -61734
-^o ^o -61734
-^o ~o -61734
-^o :o -61734
-^o oe -61734
-^o /o -61734
-^o d -61734
-^o u0111 -61734
-^o c -61734
-^o 'c -61734
-^o u0063_030C -61734
-^o ,c -61734
-^o g -61734
-^o u0067_0306 -61734
-^o q -61734
-~o e -61734
-~o u0065_030C -61734
-~o u0065_0328 -61734
-~o `e -61734
-~o 'e -61734
-~o ^e -61734
-~o :e -61734
-~o a -61734
-~o u0061_0306 -61734
-~o u0061_0328 -61734
-~o `a -61734
-~o 'a -61734
-~o ^a -61734
-~o ^a -61734
-~o ~a -61734
-~o :a -61734
-~o oa -61734
-~o ae -61734
-~o o -61734
-~o u006F_030B -61734
-~o `o -61734
-~o 'o -61734
-~o ^o -61734
-~o ~o -61734
-~o :o -61734
-~o oe -61734
-~o /o -61734
-~o d -61734
-~o u0111 -61734
-~o c -61734
-~o 'c -61734
-~o u0063_030C -61734
-~o ,c -61734
-~o g -61734
-~o u0067_0306 -61734
-~o q -61734
-:o e -61734
-:o u0065_030C -61734
-:o u0065_0328 -61734
-:o `e -61734
-:o 'e -61734
-:o ^e -61734
-:o :e -61734
-:o a -61734
-:o u0061_0306 -61734
-:o u0061_0328 -61734
-:o `a -61734
-:o 'a -61734
-:o ^a -61734
-:o ^a -61734
-:o ~a -61734
-:o :a -61734
-:o oa -61734
-:o ae -61734
-:o o -61734
-:o u006F_030B -61734
-:o `o -61734
-:o 'o -61734
-:o ^o -61734
-:o ~o -61734
-:o :o -61734
-:o oe -61734
-:o /o -61734
-:o d -61734
-:o u0111 -61734
-:o c -61734
-:o 'c -61734
-:o u0063_030C -61734
-:o ,c -61734
-:o g -61734
-:o u0067_0306 -61734
-:o q -61734
-Tp e -61734
-Tp u0065_030C -61734
-Tp u0065_0328 -61734
-Tp `e -61734
-Tp 'e -61734
-Tp ^e -61734
-Tp :e -61734
-Tp a -61734
-Tp u0061_0306 -61734
-Tp u0061_0328 -61734
-Tp `a -61734
-Tp 'a -61734
-Tp ^a -61734
-Tp ^a -61734
-Tp ~a -61734
-Tp :a -61734
-Tp oa -61734
-Tp ae -61734
-Tp o -61734
-Tp u006F_030B -61734
-Tp `o -61734
-Tp 'o -61734
-Tp ^o -61734
-Tp ~o -61734
-Tp :o -61734
-Tp oe -61734
-Tp /o -61734
-Tp d -61734
-Tp u0111 -61734
-Tp c -61734
-Tp 'c -61734
-Tp u0063_030C -61734
-Tp ,c -61734
-Tp g -61734
-Tp u0067_0306 -61734
-Tp q -61734
-charset
-ga 619674,684320 2 0000
-aa 619674,684320,0,78478 2 0001
-a^ 555610,684320 2 0002
-a~ 619674,684320,0,109346 2 0003
-ad 619674,723632,0,118082 2 0004
-a" 619674,684320,0,109346 2 0005
-ao 980179,684320 2 0006
-ah 555610,684320 2 0007
-ab 619674,684320,0,97406 2 0010
-a- 619674,723632,0,133515 2 0011
-a. 372736,723632,0,135699 2 0012
-ac 557939,0,178360 1 0013
-ho 372736,0,203840 1 0014
-bq 372736,154336,203840 1 0015
-fo 557939,495040,0,62026 2 0016
-fc 557939,495040,0,62026 2 0017
-lq 465338,723632,0,175826 2 0020
-rq 465338,723632,0,83224 2 0021
-Bq 465338,154336,203840,83224 1 0022
-Fo 681408,495040,0,57808 2 0023
-Fc 681408,495040 2 0024
-en 619674,465920,0,102854 0 0025
-em 1239347,465920,0,102854 0 0026
---- 0,465920 0 0027
---- 496205,778232,58240,134826 3 0030
-.i 372736,465920,0,98814 0 0031
-.j 403603,465920,203840,48339 1 0032
-ff 792064,723632,203840,228301 3 0033
-fi 707034,723632,203840,113859 3 0034
-fl 737901,723632,203840,113859 3 0035
-Fi 1095203,723632,203840,113859 3 0036
-Fl 1110637,723632,203840,113859 3 0037
-u2423 619674,465920,101920,46446,0,23224 1 0040
-u01C3 404768,723632,0,119755 2 0041
-! "
-dq 619674,723632,0,88816 2 0042
-" "
-sh 990080,723632,203840,71637 3 0043
-# "
-Do 619674,778232,58240,138029 3 0044
-$ "
-% 990080,778232,58240,134826 3 0045
-& 928346,723632,0,89398 2 0046
-cq 372736,723632,0,135699 2 0047
-' "
-( 496205,778232,262080,165693 3 0050
-) 496205,778232,262080,34653 3 0051
-* 619674,778232,0,150259 2 0052
-+ 928346,632486,108326,34653 3 0053
-, 372736,154336,203840 1 0054
-- 434470,465920,0,27373 0 0055
-. 372736,154336 0 0056
-sl 619674,778232,262080,165693 3 0057
-/ "
-0 619674,670592,0,138029 2 0060
-1 619674,670592,0,138029 2 0061
-2 619674,670592,0,138029 2 0062
-3 619674,670592,0,138029 2 0063
-4 619674,670592,203840,138029 3 0064
-5 619674,670592,0,138029 2 0065
-6 619674,670592,0,138029 2 0066
-7 619674,670592,0,138029 2 0067
-8 619674,670592,0,138029 2 0070
-9 619674,670592,0,138029 2 0071
-: 372736,465920,0,70251 0 0072
-; 372736,465920,203840,70251 1 0073
-< 928346,613858,89698,91730 3 0074
-= 928346,410018,-114142,71637 0 0075
-> 928346,613858,89698,3786 3 0076
-? 619674,723632,0,120266 2 0077
-at 928346,723632,0,96533 2 0100
-@ "
-A 907379,723632 2 0101
-B 856128,723632,0,103995,0,51998 2 0102
-C 866611,723632,0,148949,-84813,74475 2 0103
-D 917862,723632,0,95003,0,64136 2 0104
-E 793229,723632,0,119755,0,59915 2 0105
-F 762362,723632,0,135262,0,-19074 2 0106
-G 938538,723632,0,77022,-84813,77022 2 0107
-H 939411,723632,0,180398,0,90200 2 0110
-I 494458,723632,0,164382,0,82192 2 0111
-J 640058,723632,0,152006,0,45136 2 0112
-K 938246,723632,0,148949,0,74475 2 0113
-L 731494,723632,0,0,0,61734 2 0114
-M 1124614,723632,0,180398,0,59333 2 0115
-N 939411,723632,0,180398,0,59333 2 0116
-O 896314,723632,0,95003,-84813,64136 2 0117
-P 825261,723632,0,103995,0,-50341 2 0120
-Q 896314,723632,203840,95003,-84813,95003 3 0121
-R 900973,723632,0,26827,0,20120 2 0122
-S 681408,723632,0,118082,0,59042 2 0123
-T 834579,723632,0,135262,-134862,-19074 2 0124
-U 923395,723632,0,180398,-136064,59333 2 0125
-V 907379,723632,0,195250,-133515,-51688 2 0126
-W 1216051,723632,0,195250,-133515,40914 2 0127
-X 907379,723632,0,164382,0,82192 2 0130
-Y 907379,723632,0,207597,-148949,-39341 2 0131
-Z 743142,723632,0,148949,0,74475 2 0132
-lB 373326,778232,262080,196560 3 0133
-[ "
-rs 619674,778232,262080 3 0134
-\ "
-rB 373326,778232,262080,104549 3 0135
-] "
-ha 743142,723632,0,70251 2 0136
-^ "
-_ 928346,0,322658 1 0137
-oq 372736,723632,0,135699 2 0140
-` "
-a 619674,465920,0,98814,-34070,98814 0 0141
-b 557939,723632,0,82410,-34070,82410 2 0142
-c 557939,465920,0,54746,-34070,54746 0 0143
-d 619674,723632,0,113859,-34070,113859 2 0144
-e 557939,465920,0,89107,-34070,89107 0 0145
-f 419328,723632,203840,228301,112694,116480 3 0146
-g 557939,465920,203840,110074,-35818,71246 1 0147
-h 619674,723632,0,98814,0,98814 2 0150
-i 372736,723632,0,119371,-17666,119371 2 0151
-j 372736,723632,203840,175282,50960,110074 3 0152
-k 557939,723632,0,116480,0,98814 2 0153
-l 311002,723632,0,113859,-30867,129682 2 0154
-m 990080,465920,0,98814,-17666,98814 0 0155
-n 681408,465920,0,98814,-17666,98814 0 0156
-o 619674,465920,0,82410,-34070,82410 0 0157
-p 619674,465920,203840,82410,-17181,82410 1 0160
-q 557939,465920,203840,110074,-34070,71246 1 0161
-r 525907,465920,0,116480,-17666,85613 0 0162
-s 510474,465920,0,85613,0,85613 0 0163
-t 403603,670592,0,101046,-39312,101046 2 0164
-u 650541,465920,0,98814,-17666,98814 0 0165
-v 557939,465920,0,116480,-17666,77653 0 0166
-w 804877,465920,0,116480,-17666,87360 0 0167
-x 587642,465920,0,131914,0,131914 0 0170
-y 588806,465920,203840,110074,-17666,71246 1 0171
-z 514259,465920,0,145600,0,98814 0 0172
-lC 619674,778232,262080,153754 3 0173
-{ "
-u01C0 372736,778232,262080,104549 3 0174
-ba "
-| "
-rC 619674,778232,262080,22714 3 0175
-} "
-~ 743142,723632,0,120266 2 0176
-hy 249267,465920,0,27373 0 0177
-u0041_0306 907379,937664 2 0200
-u0041_0328 907379,723632,203840 3 0201
-'C 866611,916128,0,148949 2 0202
-u0043_030C 866611,937664,0,148949,-84813,74475 2 0203
-u0044_030C 917862,937664,0,95003,0,64136 2 0204
-u0045_030C 793229,937664,0,119755,0,59915 2 0205
-u0045_0328 793229,723632,203840,119755 3 0206
-u0047_0306 938538,937664,0,77022,-84813,77022 2 0207
-u004C_0301 731494,916128,0,0,0,61734 2 0210
-u004C_030C 731494,937664,0,0,0,61734 2 0211
-/L 731494,723632 2 0212
-u004E_0301 939411,916128,0,180398 2 0213
-u004E_030C 939411,937664,0,180398,0,59333 2 0214
-u014A 948730,723632,0,179816,0,59042 2 0215
-u004F_030B 896314,916128,0,95003,-84813,64136 2 0216
-u0052_0301 900973,916128,0,26827,0,20120 2 0217
-u0052_030C 900973,937664,0,26827,0,20120 2 0220
-u0053_0301 681408,916128,0,118082 2 0221
-vS 681408,937664,0,118082,0,59042 2 0222
-u0053_0327 681408,723632,178360,118082,0,59042 3 0223
-u0054_030C 834579,937664,0,135262,-134862,-19074 2 0224
-u0054_0327 834579,723632,178360,135262,-134862,-19074 3 0225
-u0055_030B 923395,916128,0,180398,-136064,59333 2 0226
-u0055_030A 923395,937664,0,180398,-136064,59333 2 0227
-:Y 907379,937664,0,207597,-148949,-39341 2 0230
-u005A_0301 743142,916128,0,148949 2 0231
-vZ 743142,937664,0,148949,0,74475 2 0232
-u005A_0307 743142,916128,0,148949 2 0233
-IJ 1050067,723632,0,152006,0,45136 2 0234
-u0049_0307 494458,916128,0,164382,0,82192 2 0235
-u0111 619674,723632,0,113859,-34070,113859 2 0236
-sc 575994,723632,203840 3 0237
-u0061_0306 619674,684320,0,98814,-34070,98814 2 0240
-u0061_0328 619674,465920,203840,98814 1 0241
-'c 557939,684320,0,54746 2 0242
-u0063_030C 557939,684320,0,54746,-34070,54746 2 0243
-u0064_030C 619674,723632,0,113859,-34070,113859 2 0244
-u0065_030C 557939,684320,0,89107,-34070,89107 2 0245
-u0065_0328 557939,465920,203840,89107 1 0246
-u0067_0306 557939,684320,203840,110074,-35818,71246 3 0247
-u006C_0301 311002,916128,0,113859,-30867,129682 2 0250
-u006C_030C 311002,723632,0,113859,-30867,129682 2 0251
-/l 372736,723632,0,113859 2 0252
-u006E_0301 681408,684320,0,98814 2 0253
-u006E_030C 681408,684320,0,98814,-17666,98814 2 0254
-u016A 681408,465920,203840,98814,-17666,98814 1 0255
-u006F_030B 619674,684320,0,82410,-34070,82410 2 0256
-u0072_0301 525907,684320,0,116480,-17666,85613 2 0257
-u0072_030C 525907,684320,0,116480,-17666,85613 2 0260
-u0073_0301 510474,684320,0,85613 2 0261
-vs 510474,684320,0,140213,0,140213 2 0262
-u0073_0327 510474,465920,178360,85613,0,85613 1 0263
-u0074_030C 403603,723632,0,101046,-39312,101046 2 0264
-u0074_0327 403603,670592,178360,101046,-39312,101046 3 0265
-u0075_030B 650541,684320,0,231067,-17666,231067 2 0266
-u0075_030A 650541,684320,0,98814,-17666,98814 2 0267
-:y 588806,684320,203840,110074,-17666,71246 3 0270
-u007A_0301 514259,684320,0,145600,0,98814 2 0271
-vz 514259,684320,0,145600,0,98814 2 0272
-u007A_0307 514259,723632,0,145600,0,98814 2 0273
-ij 681408,723632,203840,119371,50960,110074 3 0274
-r! 404768,524160,203840,68723 3 0275
-r? 619674,524160,203840 3 0276
-Po 910510,723632 2 0277
-`A 907379,916128 2 0300
-'A 907379,916128 2 0301
-^A 907379,937664 2 0302
-~A 907379,937664 2 0303
-:A 907379,937664 2 0304
-oA 907379,893984 2 0305
-AE 1072198,723632,0,119755 2 0306
-,C 866611,723632,178360,148949,-84813,74475 3 0307
-`E 793229,916128,0,119755,0,59915 2 0310
-'E 793229,916128,0,119755,0,59915 2 0311
-^E 793229,937664,0,119755,0,59915 2 0312
-:E 793229,937664,0,119755 2 0313
-`I 494458,916128,0,164382,0,82192 2 0314
-'I 494458,916128,0,164382,0,82192 2 0315
-^I 494458,937664,0,164382,0,82192 2 0316
-:I 494458,937664,0,164382,0,82192 2 0317
-u0189 917862,723632,0,95003,0,64136 2 0320
-u0110 "
--D "
-~N 939411,937664,0,180398,0,59333 2 0321
-`O 896314,916128,0,95003,-84813,64136 2 0322
-'O 896314,916128,0,95003 2 0323
-^O 896314,937664,0,95003,-84813,64136 2 0324
-~O 896314,937664,0,95003,-84813,64136 2 0325
-:O 896314,937664,0,95003,-84813,64136 2 0326
-OE 1195667,723632,0,119755 2 0327
-/O 928346,778232,50960,95003 3 0330
-`U 923395,916128,0,180398,-136064,59333 2 0331
-'U 923395,916128,0,180398 2 0332
-^U 923395,937664,0,180398,-136064,59333 2 0333
-:U 923395,937664,0,180398,-136064,59333 2 0334
-'Y 907379,916128,0,207597,-148949,-39341 2 0335
-TP 763526,723632,0,103995,0,51998 2 0336
---- 1298752,723632,0,118082,0,59042 2 0337
-`a 619674,684320,0,98814,-34070,98814 2 0340
-'a 619674,684320,0,98814,-34070,98814 2 0341
-^a 619674,684320,0,98814,-34070,98814 2 0342
-~a 619674,684320,0,98814,-34070,98814 2 0343
-:a 619674,684320,0,98814,-34070,98814 2 0344
-oa 619674,684320,0,98814,-34070,98814 2 0345
-ae 866611,465920,0,89107 0 0346
-,c 557939,465920,178360,54746,-34070,54746 1 0347
-`e 557939,684320,0,89107,-34070,89107 2 0350
-'e 557939,684320,0,89107,-34070,89107 2 0351
-^e 557939,684320,0,89107,-34070,89107 2 0352
-:e 557939,684320,0,89107,-34070,89107 2 0353
-`i 372736,684320,0,98814 2 0354
-'i 372736,684320,0,98814 2 0355
-^i 372736,684320,0,98814 2 0356
-:i 372736,684320,0,98814 2 0357
-Sd 619674,723632,0,116480 2 0360
-~n 681408,684320,0,98814,-17666,98814 2 0361
-`o 619674,684320,0,82410,-34070,82410 2 0362
-'o 619674,684320,0,82410,-34070,82410 2 0363
-^o 619674,684320,0,82410,-34070,82410 2 0364
-~o 619674,684320,0,82410,-34070,82410 2 0365
-:o 619674,684320,0,82410,-34070,82410 2 0366
-oe 866611,465920,0,89107 0 0367
-/o 619674,567840,101920,99154 3 0370
-`u 650541,684320,0,98814,-17666,98814 2 0371
-'u 650541,684320,0,98814,-17666,98814 2 0372
-^u 650541,684320,0,98814,-17666,98814 2 0373
-:u 650541,684320,0,98814,-17666,98814 2 0374
-'y 588806,684320,203840,110074,-17666,71246 3 0375
-Tp 619674,723632,203840,82410 3 0376
-ss 697133,723632,203840,102064 3 0377
diff --git a/contrib/groff/font/devdvi/TBITC b/contrib/groff/font/devdvi/TBITC
deleted file mode 100644
index 1a68c23786c6..000000000000
--- a/contrib/groff/font/devdvi/TBITC
+++ /dev/null
@@ -1,138 +0,0 @@
-name TBITC
-special
-internalname tcbi1000
-spacewidth 434470
-slant 14.036243
-checksum 487057398
-designsize 10485760
-charset
---- 619674,662664 2 0000
---- 619674,662664,0,73064 2 0001
---- 619674,679952,0,64866 2 0002
---- 619674,679952,0,109346 2 0003
---- 619674,679952 2 0004
---- 619674,662664,0,103931 2 0005
---- 923395,679952 2 0006
---- 619674,679952 2 0007
---- 619674,679952,0,97406 2 0010
---- 619674,679952,0,124779 2 0011
---- 372736,662664 2 0012
---- 557939,0,178360 1 0013
---- 372736,0,203840 1 0014
---- 496205,154336,203840 1 0015
---- 619674,154336,203840 1 0022
---- 868941,472035,0,102854 2 0025
---- 961542,472035,0,102854 2 0026
---- 0,723632 2 0027
-<- 1175283,410018,-114142 0 0030
--> 1175283,410018,-114142 0 0031
---- 372736,723632,0,516589 2 0032
---- 453690,981344,0,575605 2 0033
---- 619674,723632,0,516589 2 0034
---- 619674,723632,0,575605 2 0035
---- 0,723632 2 0037
-u2422 557939,723632,0,82410,-34070,82410 2 0040
-Do 619674,786240,58240,138029 3 0044
-$ "
-aq 372736,723632,0,119683 2 0047
---- 619674,495040,-29120 2 0052
-, 372736,154336,203840 1 0054
---- 434470,410018,-114142,71637 0 0055
-. 372736,154336 0 0056
-f/ 619674,786240,262080,165693 3 0057
-0 619674,472035,0,69189 2 0060
-1 619674,472035 2 0061
-2 619674,472035,0,68491 2 0062
-3 619674,472035,203840,68491 3 0063
-4 619674,472035,203840,17472 3 0064
-5 619674,472035,203840,54746 3 0065
-6 619674,679952,0,107162 2 0066
-7 619674,472035,203840,116480 3 0067
-8 619674,679952,0,107162 2 0070
-9 619674,472035,203840,54746 3 0071
-la 496205,786240,262080 3 0074
-\- 928346,634378,108326,34653 3 0075
-ra 496205,786240,262080 3 0076
-u2127 866611,723632,0,158208,0,79104 2 0115
-ci 1298752,786240,262080 3 0117
-u03A9 866611,723632,0,103995,0,51998 2 0127
-u301A 511638,786240,262080 3 0133
-u301B 511638,786240,262080 3 0135
-ua 619674,723632,203840,95514 3 0136
-da 619674,723632,203840 3 0137
---- 619674,723632 2 0140
---- 619674,495040,-29120 2 0142
---- 619674,495040,-29120 2 0143
---- 619674,634378,26210 3 0144
---- 1175283,723632 2 0154
---- 619674,495040,-29120 2 0155
-u266A 679078,723632 2 0156
-ti 743142,133120 0 0176
-~ "
---- 249267,410018,-114142,71637 0 0177
---- 743142,723632,0,108326 2 0200
---- 743142,723632,0,103085 2 0201
---- 619674,723632,0,120266 2 0202
---- 619674,723632 2 0203
-dg 557939,723632,203840 3 0204
-dd 557939,723632,203840 3 0205
-u2016 619674,786240,262080 3 0206
-%0 1360486,786240,58240,134826 3 0207
-bu 619674,472035,-46010 2 0210
-u2103 1113549,723632,0,148949,-84813,74475 2 0211
---- 743142,786240,58240,138029 3 0212
---- 619674,567840,101920,104133 3 0213
-Fn 419328,723632,203840,228301,112694,116480 3 0214
-u20A1 866611,786240,58240,148949,-84813,74475 3 0215
-u20A9 1216051,723632,0,195250,-133515,40914 2 0216
-u20A6 970278,723632,0,180398,0,59333 2 0217
---- 938538,786240,58240,77022,-84813,77022 3 0220
-u20B1 840694,723632,0,103995,0,-50341 2 0221
-u20A4 910510,723632 2 0222
-u211E 900973,723632,0,26827,0,20120 2 0223
-u203D 683738,723632,0,120266 2 0224
---- 619674,524160,203840 3 0225
-u20AB 619674,786240,0,128419,-34070,128419 2 0226
-tm 804877,786240,0,550366 2 0227
-u2031 1811264,786240,58240,134826 3 0230
---- 588806,723632,203840 3 0231
-u0E3F 856128,786240,58240,103995,0,51998 3 0232
-u2116 1140048,723632,0,180398,0,59333 2 0233
-u2052 619674,786240,0,165693 2 0234
-u212E 834288,723632,0,136659 2 0235
-u25E6 619674,472035,-46010 2 0236
-u2120 804877,786240,0,550366 2 0237
-u2045 465338,786240,262080,22714 3 0240
-u2046 465338,786240,262080,153754 3 0241
-ct 619674,567840,101920,104133 3 0242
-Po 910510,723632 2 0243
-Cs 864454,599043,0,116480 2 0244
-Ye 907379,723632,0,207597 2 0245
-bb 249267,786240,262080,134826 3 0246
-sc 575994,723632,203840 3 0247
---- 619674,723632,0,120266 2 0250
-co 1298752,786240,262080 3 0251
-Of 557939,786240,0,137592 2 0252
---- 1298752,786240,262080 3 0253
-tno 804877,472035,0,85613 2 0254
-u2117 1298752,786240,262080 3 0255
-rg 1298752,786240,262080 3 0256
---- 928346,723632 2 0257
-de 434470,723632 2 0260
-t+- 928346,634378,108326,34653 3 0261
-S2 557939,786240,0,165693 2 0262
-S3 557939,786240,0,165693 2 0263
---- 619674,723632,0,89398 2 0264
-mc 619674,472035,203840,98814,44554,98814 3 0265
-ps 743142,723632,203840 3 0266
-pc 321485,472035 2 0267
-u203B 740811,553278,0,27373 2 0270
-S1 557939,786240,0,165693 2 0271
-Om 557939,786240,0,137592 2 0272
---- 556774,786240,199165,196560 3 0273
---- 557939,786240,203840,165693 3 0274
---- 557939,786240,203840,165693 3 0275
---- 557939,786240,203840,165693 3 0276
-Eu 928346,723632,0,119829 2 0277
-tmu 928346,634378,108326,34653 3 0326
-tdi 928346,634378,108326,34653 3 0366
diff --git a/contrib/groff/font/devdvi/TBTC b/contrib/groff/font/devdvi/TBTC
deleted file mode 100644
index 94e2360fb8ef..000000000000
--- a/contrib/groff/font/devdvi/TBTC
+++ /dev/null
@@ -1,137 +0,0 @@
-name TBTC
-special
-internalname tcbx1000
-spacewidth 401856
-checksum -1650382063
-designsize 10485760
-charset
---- 602784,664624 2 0000
---- 602784,664624 2 0001
---- 602784,679952 2 0002
---- 602784,679952 2 0003
---- 602784,679952 2 0004
---- 602784,664624,0,11531 2 0005
---- 927472,679952 2 0006
---- 602784,679952 2 0007
---- 602784,679952 2 0010
---- 602784,679952 2 0011
---- 334880,664624 2 0012
---- 535808,0,178360 1 0013
---- 334880,0,203840 1 0014
---- 468832,163072,203840 1 0015
---- 602784,163072,203840 1 0022
---- 803712,465920,0,33488 0 0025
---- 904176,465920,0,33488 0 0026
---- 0,723632 2 0027
-<- 1205568,410018,-114142 0 0030
--> 1205568,410018,-114142 0 0031
---- 334880,723632,0,326144 2 0032
---- 416416,981344,0,359632 2 0033
---- 602784,723632,0,326144 2 0034
---- 602784,723632,0,359632 2 0035
---- 0,723632 2 0037
-u2422 669760,723632 2 0040
-Do 602784,786240,58240 3 0044
-$ "
-aq 334880,723632 2 0047
---- 602784,495768,-29120 2 0052
-, 334880,163072,203840 1 0054
---- 401856,410018,-114142 0 0055
-. 334880,163072 0 0056
-f/ 602784,786240,262080 3 0057
-0 602784,465920 0 0060
-1 602784,465920 0 0061
-2 602784,465920 0 0062
-3 602784,465920,203840 1 0063
-4 602784,465920,203840 1 0064
-5 602784,465920,203840 1 0065
-6 602784,679952 2 0066
-7 602784,465920,203840 1 0067
-8 602784,679952 2 0070
-9 602784,465920,203840 1 0071
-la 468832,786240,262080 3 0074
-\- 937664,664624,139776 3 0075
-ra 468832,786240,262080 3 0076
-u2127 870688,723632 2 0115
-ci 1339520,786240,262080 3 0117
-u03A9 870688,723632 2 0127
-u301A 485576,786240,262080 3 0133
-u301B 485576,786240,262080 3 0135
-ua 602784,723632,203840 3 0136
-da 602784,723632,203840 3 0137
---- 602784,723632 2 0140
---- 602784,495768,-29120 2 0142
---- 602784,495768,-29120 2 0143
---- 602784,636270,26210 3 0144
---- 1205568,723632 2 0154
---- 602784,495768,-29120 2 0155
-u266A 736736,723632 2 0156
-ti 736736,133120 0 0176
-~ "
---- 200928,410018,-114142 0 0177
---- 736736,723632 2 0200
---- 736736,723632 2 0201
---- 602784,723632 2 0202
---- 602784,723632 2 0203
-dg 535808,723632,203840 3 0204
-dd 535808,723632,203840 3 0205
-u2016 602784,786240,262080 3 0206
-%0 1406496,786240,58240 3 0207
-bu 602784,495768,-27664 2 0210
-u2103 1138592,723632,0,0,-33488 2 0211
---- 736736,786240,58240 3 0212
---- 602784,567840,101920 3 0213
-Fn 368368,723632,0,114296 2 0214
-u20A1 870688,786240,58240,0,-33488 3 0215
-u20A9 1246336,723632,0,16744,50232,-150696 2 0216
-u20A6 976976,723632 2 0217
---- 947856,786240,58240,0,-33488 3 0220
-u20B1 840840,723632,0,0,0,-167440 2 0221
-u20A4 770224,723632 2 0222
-u211E 904176,723632 2 0223
-u203D 569296,723632 2 0224
---- 569296,524160,203840 3 0225
-u20AB 669760,786240 2 0226
-tm 803712,786240,0,550366 2 0227
-u2031 1889888,786240,58240 3 0230
---- 569296,723632,203840 3 0231
-u0E3F 857584,786240,58240 3 0232
-u2116 1157520,723632 2 0233
-u2052 602784,786240 2 0234
-u212E 833560,723632 2 0235
-u25E6 602784,495768,-27664 2 0236
-u2120 803712,786240,0,550366 2 0237
-u2045 435344,786240,262080 3 0240
-u2046 435344,786240,262080 3 0241
-ct 602784,567840,101920 3 0242
-Po 770224,723632 2 0243
-Cs 810874,599043 2 0244
-Ye 911456,723632,0,30139 2 0245
-bb 200928,786240,262080 3 0246
-sc 554736,723632,203840 3 0247
---- 602784,723632 2 0250
-co 1339520,786240,262080 3 0251
-Of 535808,786240 2 0252
---- 1339520,786240,262080 3 0253
-tno 803712,465920 0 0254
-u2117 1339520,786240,262080 3 0255
-rg 1339520,786240,262080 3 0256
---- 937664,723632 2 0257
-de 401856,723632 2 0260
-t+- 937664,664624,139776 3 0261
-S2 535808,786240 2 0262
-S3 535808,786240 2 0263
---- 602784,723632 2 0264
-mc 669760,465920,203840 1 0265
-ps 736736,723632,203840 3 0266
-pc 288288,465920 0 0267
-u203B 687230,553278 2 0270
-S1 535808,786240 2 0271
-Om 535808,786240 2 0272
---- 569296,786240,199165 3 0273
---- 535808,786240,203840 3 0274
---- 535808,786240,203840 3 0275
---- 535808,786240,203840 3 0276
-Eu 937664,723632 2 0277
-tmu 937664,664624,139776 3 0326
-tdi 937664,664624,139776 3 0366
diff --git a/contrib/groff/font/devdvi/TI b/contrib/groff/font/devdvi/TI
deleted file mode 100644
index 31a0edcc6837..000000000000
--- a/contrib/groff/font/devdvi/TI
+++ /dev/null
@@ -1,355 +0,0 @@
-#
-# manually added kerning for `` and ''
-#
-name TI
-special
-internalname cmti10
-spacewidth 375155
-slant 14.036243
-ligatures ff fi fl ffi ffl 0
-checksum -50321606
-designsize 10485760
-kernpairs
-ff cq 109373
-ff ' 109373
-ff ? 109373
-ff ! 109373
-ff ) 109373
-ff rB 109373
-ff ] 109373
-' ' -80390
-cq ' -80390
-' cq -80390
-cq cq -80390
-slash@for@l l -267968
-slash@for@l L -336125
-cq ? 107187
-' ? 107187
-cq ! 107187
-' ! 107187
-A n -26797
-A l -26797
-A r -26797
-A u -26797
-A m -26797
-A t -26797
-A i -26797
-A C -26797
-A O -26797
-A G -26797
-A h -26797
-A b -26797
-A U -26797
-A k -26797
-A v -26797
-A w -26797
-A Q -26797
-A T -80390
-A Y -80390
-A V -107187
-A W -107187
-A e -53594
-A a -53594
-A o -53594
-A d -53594
-A c -53594
-A g -53594
-A q -53594
-D X -26797
-D W -26797
-D A -26797
-D V -26797
-D Y -26797
-F o -80390
-F e -80390
-F u -80390
-F r -80390
-F a -80390
-F A -107187
-F O -26797
-F C -26797
-F G -26797
-F Q -26797
-K O -26797
-K C -26797
-K G -26797
-K Q -26797
-L T -80390
-L Y -80390
-L V -107187
-L W -107187
-L e -53594
-L a -53594
-L o -53594
-L d -53594
-L c -53594
-L g -53594
-L q -53594
-O X -26797
-O W -26797
-O A -26797
-O V -26797
-O Y -26797
-P A -80390
-R n -26797
-R l -26797
-R r -26797
-R u -26797
-R m -26797
-R t -26797
-R i -26797
-R C -26797
-R O -26797
-R G -26797
-R h -26797
-R b -26797
-R U -26797
-R k -26797
-R v -26797
-R w -26797
-R Q -26797
-R T -80390
-R Y -80390
-R V -107187
-R W -107187
-R e -53594
-R a -53594
-R o -53594
-R d -53594
-R c -53594
-R g -53594
-R q -53594
-T y -80390
-T e -80390
-T o -80390
-T r -80390
-T a -80390
-T u -80390
-T A -80390
-V o -80390
-V e -80390
-V u -80390
-V r -80390
-V a -80390
-V A -107187
-V O -26797
-V C -26797
-V G -26797
-V Q -26797
-W A -80390
-X O -26797
-X C -26797
-X G -26797
-X Q -26797
-Y e -80390
-Y o -80390
-Y r -80390
-Y a -80390
-Y u -80390
-Y A -80390
-oq oq -80390
-oq ` -80390
-` oq -80390
-` ` -80390
-b e -53594
-b a -53594
-b o -53594
-b d -53594
-b c -53594
-b g -53594
-b q -53594
-c e -53594
-c a -53594
-c o -53594
-c d -53594
-c c -53594
-c g -53594
-c q -53594
-d l 53594
-e e -53594
-e a -53594
-e o -53594
-e d -53594
-e c -53594
-e g -53594
-e q -53594
-Fn cq 109373
-Fn ' 109373
-f cq 109373
-f ' 109373
-Fn ? 109373
-f ? 109373
-Fn ! 109373
-f ! 109373
-Fn ) 109373
-f ) 109373
-Fn rB 109373
-Fn ] 109373
-f rB 109373
-f ] 109373
-l l 53594
-n cq -107187
-n ' -107187
-o e -53594
-o a -53594
-o o -53594
-o d -53594
-o c -53594
-o g -53594
-o q -53594
-p e -53594
-p a -53594
-p o -53594
-p d -53594
-p c -53594
-p g -53594
-p q -53594
-r e -53594
-r a -53594
-r o -53594
-r d -53594
-r c -53594
-r g -53594
-r q -53594
-w l 53594
-charset
-*G 657686,716526,0,139518,0,5534 2 0000
-*D 857498,716526 2 0001
-*H 803904,716526,0,98595,-80538,71798 2 0002
-*L 725843,716526 2 0003
-*C 696717,716526,0,160373,0,80187 2 0004
-*P 779437,716526,0,171851,0,85926 2 0005
-*S 750310,716526,0,126120,0,63061 2 0006
-*U 803904,716526,0,116509,-170102,-17475 2 0007
-*F 750310,716526,0,62770,-116363,62770 2 0010
-*Q 803904,716526,0,116509,-170102,4659 2 0011
-*W 750310,716526,0,107552,0,53776 2 0012
-ff 643123,728178,203890,222240 3 0013
-fi 589530,728178,203890,108354 3 0014
-fl 616326,728178,203890,108354 3 0015
-Fi 924490,728178,203890,108354 3 0016
-Fl 937888,728178,203890,108354 3 0017
-.i 321562,451470,0,80440 0 0020
-.j 348358,451470,203890,39176 1 0021
-ga 535936,728178 2 0022
-aa 535936,728178,0,101654 2 0023
-ah 535936,659002,0,86982 2 0024
-ab 535936,728178,0,113306 2 0025
-a- 535936,588949,0,108354 2 0026
-ao 871672,728178 2 0027
-ac 482342,0,178403 1 0030
-ss 562733,728178,203890,110245 3 0031
-ae 750310,451470,0,78789 0 0032
-oe 750310,451470,0,78789 0 0033
-/o 535936,553416,101946,96411 3 0034
-AE 925654,716526,0,126120 2 0035
-OE 1032842,716526,0,126120 2 0036
-/O 803904,767499,50973,98595 3 0037
-slash@for@l 267968,451470 0 0040
-! 321562,728178,0,130200 2 0041
-rq 539432,728178,0,72994 2 0042
-sh 857498,728178,203888,69378 3 0043
-# "
-Po 806453,728178 2 0044
-% 857498,786432,58254,143014 3 0045
-& 803904,728178,0,101654 2 0046
-cq 321562,728178,0,130200 2 0047
-' "
-( 428749,786432,262144,169811 3 0050
-) 428749,786432,262144,38739 3 0051
-* 535936,786432,0,156413 2 0052
-+ 803904,588949,59418,38739 3 0053
-, 321562,110683,203890 1 0054
-hy 375155,451470,0,29637 0 0055
-- "
-. 321562,110683 0 0056
-sl 535936,786432,262144,169811 3 0057
-/ "
-0 535936,675749,0,142141 2 0060
-1 535936,675749,0,142141 2 0061
-2 535936,675749,0,142141 2 0062
-3 535936,675749,0,142141 2 0063
-4 535936,675749,203890,142141 3 0064
-5 535936,675749,0,142141 2 0065
-6 535936,675749,0,142141 2 0066
-7 535936,675749,203890,142141 3 0067
-8 535936,675749,0,142141 2 0070
-9 535936,675749,0,142141 2 0071
-: 321562,451470,0,61022 0 0072
-; 321562,451470,203890,61022 1 0073
-r! 321562,524288,203890,79227 3 0074
-= 803904,384696,-139592,69378 0 0075
-r? 535936,524288,203890 3 0076
-? 535936,728178,0,128451 2 0077
-at 803904,728178,0,100634 2 0100
-@ "
-A 779437,716526 2 0101
-B 738077,716526,0,107552,0,53776 2 0102
-C 750310,716526,0,152334,-80538,76168 2 0103
-D 791670,716526,0,98595,0,71798 2 0104
-E 711280,716526,0,126120,0,63061 2 0105
-F 684483,716526,0,139518,0,5534 2 0106
-G 811186,716526,0,91459,-80538,91459 2 0107
-H 779437,716526,0,171851,0,85926 2 0110
-I 404282,716526,0,165733,0,82867 2 0111
-J 550499,716526,0,147093,0,46750 2 0112
-K 806234,716526,0,152334,0,76168 2 0113
-L 657686,716526,0,0,0,53594 2 0114
-M 940218,716526,0,171851,0,59130 2 0115
-N 779437,716526,0,171851,0,59130 2 0116
-O 803904,716526,0,98595,-80538,71798 2 0117
-P 711280,716526,0,107552,0,-26432 2 0120
-Q 803904,716526,203890,98595,-80538,98595 3 0121
-R 764874,716526,0,40560,0,30421 2 0122
-S 589530,716526,0,125538,0,62770 2 0123
-T 750310,716526,0,139518,-134349,5534 2 0124
-U 779437,716526,0,171851,-121898,59130 2 0125
-V 779437,716526,0,192530,-138936,-21845 2 0126
-W 1047405,716526,0,192530,-138936,58546 2 0127
-X 779437,716526,0,165733,0,82867 2 0130
-Y 779437,716526,0,203248,-152334,-11126 2 0131
-Z 643123,716526,0,152334,0,76168 2 0132
-lB 321562,786432,262144,196608 3 0133
-[ "
-lq 539432,728178,0,176685 2 0134
-rB 321562,786432,262144,110392 3 0135
-] "
-ha 535936,728178,0,69688 2 0136
-^ "
-a^ "
-a. 321562,700301,0,123230 2 0137
-oq 321562,728178,0,130200 2 0140
-` "
-a 535936,451470,0,80440,-46677,80440 0 0141
-b 482342,728178,0,66190,-46677,66190 2 0142
-c 482342,451470,0,59274,-46677,59274 0 0143
-d 535936,728178,0,108354,-46677,108354 2 0144
-e 482342,451470,0,78789,-46677,78789 0 0145
-Fn 321562,728178,203890,222240,104566,112867 3 0146
-f "
-g 482342,451470,203890,92770,-21045,55147 1 0147
-h 535936,728178,0,80440,0,80440 2 0150
-i 321562,687194,0,106846,-32427,106846 2 0151
-j 321562,687194,203890,151701,50973,92770 3 0152
-k 482342,728178,0,112867,0,80440 2 0153
-l 267968,728178,0,108354,-26797,107237 2 0154
-m 857498,451470,0,80440,-32427,80440 0 0155
-n 589530,451470,0,80440,-32427,80440 0 0156
-o 535936,451470,0,66190,-46677,66190 0 0157
-p 535936,451470,203890,66190,-22718,66190 1 0160
-q 482342,451470,203890,92770,-46677,55147 1 0161
-r 442147,451470,0,112867,-32427,86070 0 0162
-s 428749,451470,0,86070,0,86070 0 0163
-t 348358,644958,0,99469,-45875,99469 2 0164
-u 562733,451470,0,80440,-32427,80440 0 0165
-v 482342,451470,0,112867,-32427,75245 0 0166
-w 696717,451470,0,112867,-32427,84651 0 0167
-x 486421,451470,0,126266,0,126266 0 0170
-y 509139,451470,203890,92770,-32427,55147 1 0171
-z 428749,451470,0,128888,0,80440 0 0172
-en 535936,451470,0,96552 0 0173
-em 1071872,451470,0,96552 0 0174
-a" 535936,728178,0,128451 2 0175
-~ 535936,700301,0,121482 2 0176
-a~ "
-ad 535936,700301,0,109832 2 0177
diff --git a/contrib/groff/font/devdvi/TIEC b/contrib/groff/font/devdvi/TIEC
deleted file mode 100644
index ccf4bec0cef0..000000000000
--- a/contrib/groff/font/devdvi/TIEC
+++ /dev/null
@@ -1,2765 +0,0 @@
-name TIEC
-internalname ecti1000
-spacewidth 375066
-slant 14.036243
-ligatures ff fi fl ffi ffl 0
-checksum -1119301501
-designsize 10485760
-kernpairs
-bq Bq 107162
-bq v -80371
-bq w -80371
-bq T -80371
-bq V -107162
-bq W -107162
-bq Y -80371
-bq :Y -80371
-bq 'Y -80371
-bq O -26790
-bq u004F_030B -26790
-bq `O -26790
-bq 'O -26790
-bq ^O -26790
-bq ~O -26790
-bq :O -26790
-bq OE -26790
-bq /O -26790
-bq C -26790
-bq G -26790
-bq 'C -26790
-bq u0043_030C -26790
-bq u0047_0306 -26790
-bq ,C -26790
-bq Q -26790
-lq oq 107162
-lq ` 107162
-lq lq 107162
-rq cq 107162
-rq ' 107162
-rq rq 107162
-Bq bq 107162
-Bq , 107162
-Bq Bq 107162
-Bq v -80371
-Bq w -80371
-Bq T -80371
-Bq V -107162
-Bq W -107162
-Bq Y -80371
-Bq :Y -80371
-Bq 'Y -80371
-Bq O -26790
-Bq u004F_030B -26790
-Bq `O -26790
-Bq 'O -26790
-Bq ^O -26790
-Bq ~O -26790
-Bq :O -26790
-Bq OE -26790
-Bq /O -26790
-Bq C -26790
-Bq G -26790
-Bq 'C -26790
-Bq u0043_030C -26790
-Bq u0047_0306 -26790
-Bq ,C -26790
-Bq Q -26790
-Fc . -80371
-Fc , -80371
-ff cq 109346
-ff ' 109346
-ff oq 109346
-ff ` 109346
-ff lq 109346
-ff rq 109346
-ff ? 109346
-ff u01C3 109346
-ff ! 109346
-ff ) 109346
-ff rB 109346
-ff ] 109346
-cq rq 107162
-' rq 107162
-cq ? 107162
-' ? 107162
-cq u01C3 107162
-cq ! 107162
-' u01C3 107162
-' ! 107162
-A y -26790
-A :y -26790
-A 'y -26790
-A n -26790
-A u006E_0301 -26790
-A u006E_030C -26790
-A u016A -26790
-A ~n -26790
-A l -26790
-A u006C_0301 -26790
-A u006C_030C -26790
-A r -26790
-A u -26790
-A u0075_030B -26790
-A u0075_030A -26790
-A `u -26790
-A 'u -26790
-A ^u -26790
-A :u -26790
-A m -26790
-A t -26790
-A u0074_030C -26790
-A u0074_0327 -26790
-A i -26790
-A 'i -26790
-A h -26790
-A b -26790
-A k -26790
-A v -26790
-A w -26790
-A C -26790
-A G -26790
-A 'C -26790
-A u0043_030C -26790
-A u0047_0306 -26790
-A ,C -26790
-A Q -26790
-A O -26790
-A u004F_030B -26790
-A `O -26790
-A 'O -26790
-A ^O -26790
-A ~O -26790
-A :O -26790
-A OE -26790
-A /O -26790
-A U -26790
-A u0055_030B -26790
-A u0055_030A -26790
-A `U -26790
-A 'U -26790
-A ^U -26790
-A :U -26790
-A T -80371
-A u0054_030C -80371
-A u0054_0327 -80371
-A Y -80371
-A :Y -80371
-A 'Y -80371
-A V -107162
-A W -107162
-A e -53581
-A u0065_030C -53581
-A u0065_0328 -53581
-A `e -53581
-A 'e -53581
-A ^e -53581
-A :e -53581
-A a -53581
-A u0061_0306 -53581
-A u0061_0328 -53581
-A `a -53581
-A 'a -53581
-A ^a -53581
-A ^a -53581
-A ~a -53581
-A :a -53581
-A oa -53581
-A ae -53581
-A o -53581
-A u006F_030B -53581
-A `o -53581
-A 'o -53581
-A ^o -53581
-A ~o -53581
-A :o -53581
-A oe -53581
-A /o -53581
-A d -53581
-A u0111 -53581
-A c -53581
-A 'c -53581
-A u0063_030C -53581
-A ,c -53581
-A g -53581
-A u0067_0306 -53581
-A q -53581
-D X -26790
-D W -26790
-D A -26790
-D u0041_0306 -26790
-D u0041_0328 -26790
-D `A -26790
-D 'A -26790
-D ^A -26790
-D ~A -26790
-D :A -26790
-D oA -26790
-D AE -26790
-D V -26790
-D Y -26790
-D :Y -26790
-D 'Y -26790
-F o -80371
-F e -80371
-F u0065_0328 -80371
-F u -80371
-F r -80371
-F n -80371
-F v -80371
-F a -80371
-F u0061_0328 -80371
-F A -107162
-F u0041_0306 -107162
-F u0041_0328 -107162
-F `A -107162
-F 'A -107162
-F ^A -107162
-F ~A -107162
-F :A -107162
-F oA -107162
-F AE -107162
-F O -26790
-F u004F_030B -26790
-F `O -26790
-F 'O -26790
-F ^O -26790
-F ~O -26790
-F :O -26790
-F OE -26790
-F /O -26790
-F C -26790
-F G -26790
-F 'C -26790
-F u0043_030C -26790
-F u0047_0306 -26790
-F ,C -26790
-F Q -26790
-K v -26790
-K w -26790
-K O -26790
-K u004F_030B -26790
-K `O -26790
-K 'O -26790
-K ^O -26790
-K ~O -26790
-K :O -26790
-K OE -26790
-K /O -26790
-K C -26790
-K G -26790
-K 'C -26790
-K u0043_030C -26790
-K u0047_0306 -26790
-K ,C -26790
-K Q -26790
-L T -80371
-L u0054_030C -80371
-L u0054_0327 -80371
-L Y -80371
-L :Y -80371
-L 'Y -80371
-L V -107162
-L W -107162
-L e -53581
-L u0065_030C -53581
-L u0065_0328 -53581
-L `e -53581
-L 'e -53581
-L ^e -53581
-L :e -53581
-L a -53581
-L u0061_0306 -53581
-L u0061_0328 -53581
-L `a -53581
-L 'a -53581
-L ^a -53581
-L ^a -53581
-L ~a -53581
-L :a -53581
-L oa -53581
-L ae -53581
-L o -53581
-L u006F_030B -53581
-L `o -53581
-L 'o -53581
-L ^o -53581
-L ~o -53581
-L :o -53581
-L oe -53581
-L /o -53581
-L d -53581
-L u0111 -53581
-L c -53581
-L 'c -53581
-L u0063_030C -53581
-L ,c -53581
-L g -53581
-L u0067_0306 -53581
-L q -53581
-O X -26790
-O W -26790
-O A -26790
-O u0041_0306 -26790
-O u0041_0328 -26790
-O `A -26790
-O 'A -26790
-O ^A -26790
-O ~A -26790
-O :A -26790
-O oA -26790
-O AE -26790
-O V -26790
-O Y -26790
-O :Y -26790
-O 'Y -26790
-P A -80371
-P u0041_0306 -80371
-P u0041_0328 -80371
-P `A -80371
-P 'A -80371
-P ^A -80371
-P ~A -80371
-P :A -80371
-P oA -80371
-P AE -80371
-R n -26790
-R u006E_0301 -26790
-R u006E_030C -26790
-R u016A -26790
-R ~n -26790
-R l -26790
-R u006C_0301 -26790
-R u006C_030C -26790
-R r -26790
-R u -26790
-R u0075_030B -26790
-R u0075_030A -26790
-R `u -26790
-R 'u -26790
-R ^u -26790
-R :u -26790
-R m -26790
-R t -26790
-R u0074_030C -26790
-R u0074_0327 -26790
-R i -26790
-R 'i -26790
-R h -26790
-R b -26790
-R k -26790
-R v -26790
-R w -26790
-R C -26790
-R G -26790
-R 'C -26790
-R u0043_030C -26790
-R u0047_0306 -26790
-R ,C -26790
-R Q -26790
-R O -26790
-R u004F_030B -26790
-R `O -26790
-R 'O -26790
-R ^O -26790
-R ~O -26790
-R :O -26790
-R OE -26790
-R /O -26790
-R U -26790
-R u0055_030B -26790
-R u0055_030A -26790
-R `U -26790
-R 'U -26790
-R ^U -26790
-R :U -26790
-R T -80371
-R u0054_030C -80371
-R u0054_0327 -80371
-R Y -80371
-R :Y -80371
-R 'Y -80371
-R V -107162
-R W -107162
-R e -53581
-R u0065_030C -53581
-R u0065_0328 -53581
-R `e -53581
-R 'e -53581
-R ^e -53581
-R :e -53581
-R a -53581
-R u0061_0306 -53581
-R u0061_0328 -53581
-R `a -53581
-R 'a -53581
-R ^a -53581
-R ^a -53581
-R ~a -53581
-R :a -53581
-R oa -53581
-R ae -53581
-R o -53581
-R u006F_030B -53581
-R `o -53581
-R 'o -53581
-R ^o -53581
-R ~o -53581
-R :o -53581
-R oe -53581
-R /o -53581
-R d -53581
-R u0111 -53581
-R c -53581
-R 'c -53581
-R u0063_030C -53581
-R ,c -53581
-R g -53581
-R u0067_0306 -53581
-R q -53581
-T y -80371
-T e -80371
-T o -80371
-T r -80371
-T a -80371
-T u -80371
-T A -80371
-T u0041_0306 -80371
-T u0041_0328 -80371
-T `A -80371
-T 'A -80371
-T ^A -80371
-T ~A -80371
-T :A -80371
-T oA -80371
-T AE -80371
-V o -80371
-V e -80371
-V u0065_0328 -80371
-V u -80371
-V r -80371
-V n -80371
-V v -80371
-V a -80371
-V u0061_0328 -80371
-V A -107162
-V u0041_0306 -107162
-V u0041_0328 -107162
-V `A -107162
-V 'A -107162
-V ^A -107162
-V ~A -107162
-V :A -107162
-V oA -107162
-V AE -107162
-V O -26790
-V u004F_030B -26790
-V `O -26790
-V 'O -26790
-V ^O -26790
-V ~O -26790
-V :O -26790
-V OE -26790
-V /O -26790
-V C -26790
-V G -26790
-V 'C -26790
-V u0043_030C -26790
-V u0047_0306 -26790
-V ,C -26790
-V Q -26790
-W o -80371
-W e -80371
-W u0065_0328 -80371
-W u -80371
-W r -80371
-W n -80371
-W v -80371
-W a -80371
-W u0061_0328 -80371
-W A -107162
-W u0041_0306 -107162
-W u0041_0328 -107162
-W `A -107162
-W 'A -107162
-W ^A -107162
-W ~A -107162
-W :A -107162
-W oA -107162
-W AE -107162
-W O -26790
-W u004F_030B -26790
-W `O -26790
-W 'O -26790
-W ^O -26790
-W ~O -26790
-W :O -26790
-W OE -26790
-W /O -26790
-W C -26790
-W G -26790
-W 'C -26790
-W u0043_030C -26790
-W u0047_0306 -26790
-W ,C -26790
-W Q -26790
-X O -26790
-X u004F_030B -26790
-X `O -26790
-X 'O -26790
-X ^O -26790
-X ~O -26790
-X :O -26790
-X OE -26790
-X /O -26790
-X C -26790
-X G -26790
-X 'C -26790
-X u0043_030C -26790
-X u0047_0306 -26790
-X ,C -26790
-X Q -26790
-Y e -80371
-Y o -80371
-Y r -80371
-Y a -80371
-Y u -80371
-Y A -80371
-Y u0041_0306 -80371
-Y u0041_0328 -80371
-Y `A -80371
-Y 'A -80371
-Y ^A -80371
-Y ~A -80371
-Y :A -80371
-Y oA -80371
-Y AE -80371
-oq lq 107162
-` lq 107162
-oq ? 107162
-` ? 107162
-oq u01C3 107162
-oq ! 107162
-` u01C3 107162
-` ! 107162
-b e -53581
-b u0065_030C -53581
-b u0065_0328 -53581
-b `e -53581
-b 'e -53581
-b ^e -53581
-b :e -53581
-b a -53581
-b u0061_0306 -53581
-b u0061_0328 -53581
-b `a -53581
-b 'a -53581
-b ^a -53581
-b ^a -53581
-b ~a -53581
-b :a -53581
-b oa -53581
-b ae -53581
-b o -53581
-b u006F_030B -53581
-b `o -53581
-b 'o -53581
-b ^o -53581
-b ~o -53581
-b :o -53581
-b oe -53581
-b /o -53581
-b d -53581
-b u0111 -53581
-b c -53581
-b 'c -53581
-b u0063_030C -53581
-b ,c -53581
-b g -53581
-b u0067_0306 -53581
-b q -53581
-c e -53581
-c u0065_030C -53581
-c u0065_0328 -53581
-c `e -53581
-c 'e -53581
-c ^e -53581
-c :e -53581
-c a -53581
-c u0061_0306 -53581
-c u0061_0328 -53581
-c `a -53581
-c 'a -53581
-c ^a -53581
-c ^a -53581
-c ~a -53581
-c :a -53581
-c oa -53581
-c ae -53581
-c o -53581
-c u006F_030B -53581
-c `o -53581
-c 'o -53581
-c ^o -53581
-c ~o -53581
-c :o -53581
-c oe -53581
-c /o -53581
-c d -53581
-c u0111 -53581
-c c -53581
-c 'c -53581
-c u0063_030C -53581
-c ,c -53581
-c g -53581
-c u0067_0306 -53581
-c q -53581
-d l 53581
-d u006C_0301 53581
-d u006C_030C 53581
-e e -53581
-e u0065_030C -53581
-e u0065_0328 -53581
-e `e -53581
-e 'e -53581
-e ^e -53581
-e :e -53581
-e a -53581
-e u0061_0306 -53581
-e u0061_0328 -53581
-e `a -53581
-e 'a -53581
-e ^a -53581
-e ^a -53581
-e ~a -53581
-e :a -53581
-e oa -53581
-e ae -53581
-e o -53581
-e u006F_030B -53581
-e `o -53581
-e 'o -53581
-e ^o -53581
-e ~o -53581
-e :o -53581
-e oe -53581
-e /o -53581
-e d -53581
-e u0111 -53581
-e c -53581
-e 'c -53581
-e u0063_030C -53581
-e ,c -53581
-e g -53581
-e u0067_0306 -53581
-e q -53581
-f cq 109346
-f ' 109346
-f oq 109346
-f ` 109346
-f lq 109346
-f rq 109346
-f ? 109346
-f u01C3 109346
-f ! 109346
-f ) 109346
-f rB 109346
-f ] 109346
-l l 53581
-l u006C_0301 53581
-l u006C_030C 53581
-n cq -107162
-n ' -107162
-o e -53581
-o u0065_030C -53581
-o u0065_0328 -53581
-o `e -53581
-o 'e -53581
-o ^e -53581
-o :e -53581
-o a -53581
-o u0061_0306 -53581
-o u0061_0328 -53581
-o `a -53581
-o 'a -53581
-o ^a -53581
-o ^a -53581
-o ~a -53581
-o :a -53581
-o oa -53581
-o ae -53581
-o o -53581
-o u006F_030B -53581
-o `o -53581
-o 'o -53581
-o ^o -53581
-o ~o -53581
-o :o -53581
-o oe -53581
-o /o -53581
-o d -53581
-o u0111 -53581
-o c -53581
-o 'c -53581
-o u0063_030C -53581
-o ,c -53581
-o g -53581
-o u0067_0306 -53581
-o q -53581
-p e -53581
-p u0065_030C -53581
-p u0065_0328 -53581
-p `e -53581
-p 'e -53581
-p ^e -53581
-p :e -53581
-p a -53581
-p u0061_0306 -53581
-p u0061_0328 -53581
-p `a -53581
-p 'a -53581
-p ^a -53581
-p ^a -53581
-p ~a -53581
-p :a -53581
-p oa -53581
-p ae -53581
-p o -53581
-p u006F_030B -53581
-p `o -53581
-p 'o -53581
-p ^o -53581
-p ~o -53581
-p :o -53581
-p oe -53581
-p /o -53581
-p d -53581
-p u0111 -53581
-p c -53581
-p 'c -53581
-p u0063_030C -53581
-p ,c -53581
-p g -53581
-p u0067_0306 -53581
-p q -53581
-r e -53581
-r u0065_030C -53581
-r u0065_0328 -53581
-r `e -53581
-r 'e -53581
-r ^e -53581
-r :e -53581
-r a -53581
-r u0061_0306 -53581
-r u0061_0328 -53581
-r `a -53581
-r 'a -53581
-r ^a -53581
-r ^a -53581
-r ~a -53581
-r :a -53581
-r oa -53581
-r ae -53581
-r o -53581
-r u006F_030B -53581
-r `o -53581
-r 'o -53581
-r ^o -53581
-r ~o -53581
-r :o -53581
-r oe -53581
-r /o -53581
-r d -53581
-r u0111 -53581
-r c -53581
-r 'c -53581
-r u0063_030C -53581
-r ,c -53581
-r g -53581
-r u0067_0306 -53581
-r q -53581
-w l 53581
-w u006C_0301 53581
-w u006C_030C 53581
-u0041_0306 y -26790
-u0041_0306 :y -26790
-u0041_0306 'y -26790
-u0041_0306 n -26790
-u0041_0306 u006E_0301 -26790
-u0041_0306 u006E_030C -26790
-u0041_0306 u016A -26790
-u0041_0306 ~n -26790
-u0041_0306 l -26790
-u0041_0306 u006C_0301 -26790
-u0041_0306 u006C_030C -26790
-u0041_0306 r -26790
-u0041_0306 u -26790
-u0041_0306 u0075_030B -26790
-u0041_0306 u0075_030A -26790
-u0041_0306 `u -26790
-u0041_0306 'u -26790
-u0041_0306 ^u -26790
-u0041_0306 :u -26790
-u0041_0306 m -26790
-u0041_0306 t -26790
-u0041_0306 u0074_030C -26790
-u0041_0306 u0074_0327 -26790
-u0041_0306 i -26790
-u0041_0306 'i -26790
-u0041_0306 h -26790
-u0041_0306 b -26790
-u0041_0306 k -26790
-u0041_0306 v -26790
-u0041_0306 w -26790
-u0041_0306 C -26790
-u0041_0306 G -26790
-u0041_0306 'C -26790
-u0041_0306 u0043_030C -26790
-u0041_0306 u0047_0306 -26790
-u0041_0306 ,C -26790
-u0041_0306 Q -26790
-u0041_0306 O -26790
-u0041_0306 u004F_030B -26790
-u0041_0306 `O -26790
-u0041_0306 'O -26790
-u0041_0306 ^O -26790
-u0041_0306 ~O -26790
-u0041_0306 :O -26790
-u0041_0306 OE -26790
-u0041_0306 /O -26790
-u0041_0306 U -26790
-u0041_0306 u0055_030B -26790
-u0041_0306 u0055_030A -26790
-u0041_0306 `U -26790
-u0041_0306 'U -26790
-u0041_0306 ^U -26790
-u0041_0306 :U -26790
-u0041_0306 T -80371
-u0041_0306 u0054_030C -80371
-u0041_0306 u0054_0327 -80371
-u0041_0306 Y -80371
-u0041_0306 :Y -80371
-u0041_0306 'Y -80371
-u0041_0306 V -107162
-u0041_0306 W -107162
-u0041_0306 e -53581
-u0041_0306 u0065_030C -53581
-u0041_0306 u0065_0328 -53581
-u0041_0306 `e -53581
-u0041_0306 'e -53581
-u0041_0306 ^e -53581
-u0041_0306 :e -53581
-u0041_0306 a -53581
-u0041_0306 u0061_0306 -53581
-u0041_0306 u0061_0328 -53581
-u0041_0306 `a -53581
-u0041_0306 'a -53581
-u0041_0306 ^a -53581
-u0041_0306 ^a -53581
-u0041_0306 ~a -53581
-u0041_0306 :a -53581
-u0041_0306 oa -53581
-u0041_0306 ae -53581
-u0041_0306 o -53581
-u0041_0306 u006F_030B -53581
-u0041_0306 `o -53581
-u0041_0306 'o -53581
-u0041_0306 ^o -53581
-u0041_0306 ~o -53581
-u0041_0306 :o -53581
-u0041_0306 oe -53581
-u0041_0306 /o -53581
-u0041_0306 d -53581
-u0041_0306 u0111 -53581
-u0041_0306 c -53581
-u0041_0306 'c -53581
-u0041_0306 u0063_030C -53581
-u0041_0306 ,c -53581
-u0041_0306 g -53581
-u0041_0306 u0067_0306 -53581
-u0041_0306 q -53581
-u0041_0328 n -26790
-u0041_0328 u006E_0301 -26790
-u0041_0328 u006E_030C -26790
-u0041_0328 u016A -26790
-u0041_0328 ~n -26790
-u0041_0328 l -26790
-u0041_0328 u006C_0301 -26790
-u0041_0328 u006C_030C -26790
-u0041_0328 r -26790
-u0041_0328 u -26790
-u0041_0328 u0075_030B -26790
-u0041_0328 u0075_030A -26790
-u0041_0328 `u -26790
-u0041_0328 'u -26790
-u0041_0328 ^u -26790
-u0041_0328 :u -26790
-u0041_0328 m -26790
-u0041_0328 t -26790
-u0041_0328 u0074_030C -26790
-u0041_0328 u0074_0327 -26790
-u0041_0328 i -26790
-u0041_0328 'i -26790
-u0041_0328 h -26790
-u0041_0328 b -26790
-u0041_0328 k -26790
-u0041_0328 v -26790
-u0041_0328 w -26790
-u0041_0328 C -26790
-u0041_0328 G -26790
-u0041_0328 'C -26790
-u0041_0328 u0043_030C -26790
-u0041_0328 u0047_0306 -26790
-u0041_0328 ,C -26790
-u0041_0328 Q -26790
-u0041_0328 O -26790
-u0041_0328 u004F_030B -26790
-u0041_0328 `O -26790
-u0041_0328 'O -26790
-u0041_0328 ^O -26790
-u0041_0328 ~O -26790
-u0041_0328 :O -26790
-u0041_0328 OE -26790
-u0041_0328 /O -26790
-u0041_0328 U -26790
-u0041_0328 u0055_030B -26790
-u0041_0328 u0055_030A -26790
-u0041_0328 `U -26790
-u0041_0328 'U -26790
-u0041_0328 ^U -26790
-u0041_0328 :U -26790
-u0041_0328 T -80371
-u0041_0328 u0054_030C -80371
-u0041_0328 u0054_0327 -80371
-u0041_0328 Y -80371
-u0041_0328 :Y -80371
-u0041_0328 'Y -80371
-u0041_0328 V -107162
-u0041_0328 W -107162
-u0041_0328 e -53581
-u0041_0328 u0065_030C -53581
-u0041_0328 u0065_0328 -53581
-u0041_0328 `e -53581
-u0041_0328 'e -53581
-u0041_0328 ^e -53581
-u0041_0328 :e -53581
-u0041_0328 a -53581
-u0041_0328 u0061_0306 -53581
-u0041_0328 u0061_0328 -53581
-u0041_0328 `a -53581
-u0041_0328 'a -53581
-u0041_0328 ^a -53581
-u0041_0328 ^a -53581
-u0041_0328 ~a -53581
-u0041_0328 :a -53581
-u0041_0328 oa -53581
-u0041_0328 ae -53581
-u0041_0328 o -53581
-u0041_0328 u006F_030B -53581
-u0041_0328 `o -53581
-u0041_0328 'o -53581
-u0041_0328 ^o -53581
-u0041_0328 ~o -53581
-u0041_0328 :o -53581
-u0041_0328 oe -53581
-u0041_0328 /o -53581
-u0041_0328 d -53581
-u0041_0328 u0111 -53581
-u0041_0328 c -53581
-u0041_0328 'c -53581
-u0041_0328 u0063_030C -53581
-u0041_0328 ,c -53581
-u0041_0328 g -53581
-u0041_0328 u0067_0306 -53581
-u0041_0328 q -53581
-u0044_030C X -26790
-u0044_030C W -26790
-u0044_030C A -26790
-u0044_030C u0041_0306 -26790
-u0044_030C u0041_0328 -26790
-u0044_030C `A -26790
-u0044_030C 'A -26790
-u0044_030C ^A -26790
-u0044_030C ~A -26790
-u0044_030C :A -26790
-u0044_030C oA -26790
-u0044_030C AE -26790
-u0044_030C V -26790
-u0044_030C Y -26790
-u0044_030C :Y -26790
-u0044_030C 'Y -26790
-u004C_0301 T -80371
-u004C_0301 u0054_030C -80371
-u004C_0301 u0054_0327 -80371
-u004C_0301 Y -80371
-u004C_0301 :Y -80371
-u004C_0301 'Y -80371
-u004C_0301 V -107162
-u004C_0301 W -107162
-u004C_0301 e -53581
-u004C_0301 u0065_030C -53581
-u004C_0301 u0065_0328 -53581
-u004C_0301 `e -53581
-u004C_0301 'e -53581
-u004C_0301 ^e -53581
-u004C_0301 :e -53581
-u004C_0301 a -53581
-u004C_0301 u0061_0306 -53581
-u004C_0301 u0061_0328 -53581
-u004C_0301 `a -53581
-u004C_0301 'a -53581
-u004C_0301 ^a -53581
-u004C_0301 ^a -53581
-u004C_0301 ~a -53581
-u004C_0301 :a -53581
-u004C_0301 oa -53581
-u004C_0301 ae -53581
-u004C_0301 o -53581
-u004C_0301 u006F_030B -53581
-u004C_0301 `o -53581
-u004C_0301 'o -53581
-u004C_0301 ^o -53581
-u004C_0301 ~o -53581
-u004C_0301 :o -53581
-u004C_0301 oe -53581
-u004C_0301 /o -53581
-u004C_0301 d -53581
-u004C_0301 u0111 -53581
-u004C_0301 c -53581
-u004C_0301 'c -53581
-u004C_0301 u0063_030C -53581
-u004C_0301 ,c -53581
-u004C_0301 g -53581
-u004C_0301 u0067_0306 -53581
-u004C_0301 q -53581
-u004C_030C T -80371
-u004C_030C u0054_030C -80371
-u004C_030C u0054_0327 -80371
-u004C_030C Y -80371
-u004C_030C :Y -80371
-u004C_030C 'Y -80371
-u004C_030C V -107162
-u004C_030C W -107162
-u004C_030C e -53581
-u004C_030C u0065_030C -53581
-u004C_030C u0065_0328 -53581
-u004C_030C `e -53581
-u004C_030C 'e -53581
-u004C_030C ^e -53581
-u004C_030C :e -53581
-u004C_030C a -53581
-u004C_030C u0061_0306 -53581
-u004C_030C u0061_0328 -53581
-u004C_030C `a -53581
-u004C_030C 'a -53581
-u004C_030C ^a -53581
-u004C_030C ^a -53581
-u004C_030C ~a -53581
-u004C_030C :a -53581
-u004C_030C oa -53581
-u004C_030C ae -53581
-u004C_030C o -53581
-u004C_030C u006F_030B -53581
-u004C_030C `o -53581
-u004C_030C 'o -53581
-u004C_030C ^o -53581
-u004C_030C ~o -53581
-u004C_030C :o -53581
-u004C_030C oe -53581
-u004C_030C /o -53581
-u004C_030C d -53581
-u004C_030C u0111 -53581
-u004C_030C c -53581
-u004C_030C 'c -53581
-u004C_030C u0063_030C -53581
-u004C_030C ,c -53581
-u004C_030C g -53581
-u004C_030C u0067_0306 -53581
-u004C_030C q -53581
-u004F_030B X -26790
-u004F_030B W -26790
-u004F_030B A -26790
-u004F_030B u0041_0306 -26790
-u004F_030B u0041_0328 -26790
-u004F_030B `A -26790
-u004F_030B 'A -26790
-u004F_030B ^A -26790
-u004F_030B ~A -26790
-u004F_030B :A -26790
-u004F_030B oA -26790
-u004F_030B AE -26790
-u004F_030B V -26790
-u004F_030B Y -26790
-u004F_030B :Y -26790
-u004F_030B 'Y -26790
-u0052_0301 n -26790
-u0052_0301 u006E_0301 -26790
-u0052_0301 u006E_030C -26790
-u0052_0301 u016A -26790
-u0052_0301 ~n -26790
-u0052_0301 l -26790
-u0052_0301 u006C_0301 -26790
-u0052_0301 u006C_030C -26790
-u0052_0301 r -26790
-u0052_0301 u -26790
-u0052_0301 u0075_030B -26790
-u0052_0301 u0075_030A -26790
-u0052_0301 `u -26790
-u0052_0301 'u -26790
-u0052_0301 ^u -26790
-u0052_0301 :u -26790
-u0052_0301 m -26790
-u0052_0301 t -26790
-u0052_0301 u0074_030C -26790
-u0052_0301 u0074_0327 -26790
-u0052_0301 i -26790
-u0052_0301 'i -26790
-u0052_0301 h -26790
-u0052_0301 b -26790
-u0052_0301 k -26790
-u0052_0301 v -26790
-u0052_0301 w -26790
-u0052_0301 C -26790
-u0052_0301 G -26790
-u0052_0301 'C -26790
-u0052_0301 u0043_030C -26790
-u0052_0301 u0047_0306 -26790
-u0052_0301 ,C -26790
-u0052_0301 Q -26790
-u0052_0301 O -26790
-u0052_0301 u004F_030B -26790
-u0052_0301 `O -26790
-u0052_0301 'O -26790
-u0052_0301 ^O -26790
-u0052_0301 ~O -26790
-u0052_0301 :O -26790
-u0052_0301 OE -26790
-u0052_0301 /O -26790
-u0052_0301 U -26790
-u0052_0301 u0055_030B -26790
-u0052_0301 u0055_030A -26790
-u0052_0301 `U -26790
-u0052_0301 'U -26790
-u0052_0301 ^U -26790
-u0052_0301 :U -26790
-u0052_0301 T -80371
-u0052_0301 u0054_030C -80371
-u0052_0301 u0054_0327 -80371
-u0052_0301 Y -80371
-u0052_0301 :Y -80371
-u0052_0301 'Y -80371
-u0052_0301 V -107162
-u0052_0301 W -107162
-u0052_0301 e -53581
-u0052_0301 u0065_030C -53581
-u0052_0301 u0065_0328 -53581
-u0052_0301 `e -53581
-u0052_0301 'e -53581
-u0052_0301 ^e -53581
-u0052_0301 :e -53581
-u0052_0301 a -53581
-u0052_0301 u0061_0306 -53581
-u0052_0301 u0061_0328 -53581
-u0052_0301 `a -53581
-u0052_0301 'a -53581
-u0052_0301 ^a -53581
-u0052_0301 ^a -53581
-u0052_0301 ~a -53581
-u0052_0301 :a -53581
-u0052_0301 oa -53581
-u0052_0301 ae -53581
-u0052_0301 o -53581
-u0052_0301 u006F_030B -53581
-u0052_0301 `o -53581
-u0052_0301 'o -53581
-u0052_0301 ^o -53581
-u0052_0301 ~o -53581
-u0052_0301 :o -53581
-u0052_0301 oe -53581
-u0052_0301 /o -53581
-u0052_0301 d -53581
-u0052_0301 u0111 -53581
-u0052_0301 c -53581
-u0052_0301 'c -53581
-u0052_0301 u0063_030C -53581
-u0052_0301 ,c -53581
-u0052_0301 g -53581
-u0052_0301 u0067_0306 -53581
-u0052_0301 q -53581
-u0054_030C y -80371
-u0054_030C e -80371
-u0054_030C o -80371
-u0054_030C r -80371
-u0054_030C a -80371
-u0054_030C u -80371
-u0054_030C A -80371
-u0054_030C u0041_0306 -80371
-u0054_030C u0041_0328 -80371
-u0054_030C `A -80371
-u0054_030C 'A -80371
-u0054_030C ^A -80371
-u0054_030C ~A -80371
-u0054_030C :A -80371
-u0054_030C oA -80371
-u0054_030C AE -80371
-u0054_0327 y -80371
-u0054_0327 e -80371
-u0054_0327 o -80371
-u0054_0327 r -80371
-u0054_0327 a -80371
-u0054_0327 u -80371
-u0054_0327 A -80371
-u0054_0327 u0041_0306 -80371
-u0054_0327 u0041_0328 -80371
-u0054_0327 `A -80371
-u0054_0327 'A -80371
-u0054_0327 ^A -80371
-u0054_0327 ~A -80371
-u0054_0327 :A -80371
-u0054_0327 oA -80371
-u0054_0327 AE -80371
-:Y e -80371
-:Y o -80371
-:Y r -80371
-:Y a -80371
-:Y u -80371
-:Y A -80371
-:Y u0041_0306 -80371
-:Y u0041_0328 -80371
-:Y `A -80371
-:Y 'A -80371
-:Y ^A -80371
-:Y ~A -80371
-:Y :A -80371
-:Y oA -80371
-:Y AE -80371
-'c e -53581
-'c u0065_030C -53581
-'c u0065_0328 -53581
-'c `e -53581
-'c 'e -53581
-'c ^e -53581
-'c :e -53581
-'c a -53581
-'c u0061_0306 -53581
-'c u0061_0328 -53581
-'c `a -53581
-'c 'a -53581
-'c ^a -53581
-'c ^a -53581
-'c ~a -53581
-'c :a -53581
-'c oa -53581
-'c ae -53581
-'c o -53581
-'c u006F_030B -53581
-'c `o -53581
-'c 'o -53581
-'c ^o -53581
-'c ~o -53581
-'c :o -53581
-'c oe -53581
-'c /o -53581
-'c d -53581
-'c u0111 -53581
-'c c -53581
-'c 'c -53581
-'c u0063_030C -53581
-'c ,c -53581
-'c g -53581
-'c u0067_0306 -53581
-'c q -53581
-u0063_030C e -53581
-u0063_030C u0065_030C -53581
-u0063_030C u0065_0328 -53581
-u0063_030C `e -53581
-u0063_030C 'e -53581
-u0063_030C ^e -53581
-u0063_030C :e -53581
-u0063_030C a -53581
-u0063_030C u0061_0306 -53581
-u0063_030C u0061_0328 -53581
-u0063_030C `a -53581
-u0063_030C 'a -53581
-u0063_030C ^a -53581
-u0063_030C ^a -53581
-u0063_030C ~a -53581
-u0063_030C :a -53581
-u0063_030C oa -53581
-u0063_030C ae -53581
-u0063_030C o -53581
-u0063_030C u006F_030B -53581
-u0063_030C `o -53581
-u0063_030C 'o -53581
-u0063_030C ^o -53581
-u0063_030C ~o -53581
-u0063_030C :o -53581
-u0063_030C oe -53581
-u0063_030C /o -53581
-u0063_030C d -53581
-u0063_030C u0111 -53581
-u0063_030C c -53581
-u0063_030C 'c -53581
-u0063_030C u0063_030C -53581
-u0063_030C ,c -53581
-u0063_030C g -53581
-u0063_030C u0067_0306 -53581
-u0063_030C q -53581
-u0064_030C l 53581
-u0064_030C u006C_0301 53581
-u0064_030C u006C_030C 53581
-u0065_030C e -53581
-u0065_030C u0065_030C -53581
-u0065_030C u0065_0328 -53581
-u0065_030C `e -53581
-u0065_030C 'e -53581
-u0065_030C ^e -53581
-u0065_030C :e -53581
-u0065_030C a -53581
-u0065_030C u0061_0306 -53581
-u0065_030C u0061_0328 -53581
-u0065_030C `a -53581
-u0065_030C 'a -53581
-u0065_030C ^a -53581
-u0065_030C ^a -53581
-u0065_030C ~a -53581
-u0065_030C :a -53581
-u0065_030C oa -53581
-u0065_030C ae -53581
-u0065_030C o -53581
-u0065_030C u006F_030B -53581
-u0065_030C `o -53581
-u0065_030C 'o -53581
-u0065_030C ^o -53581
-u0065_030C ~o -53581
-u0065_030C :o -53581
-u0065_030C oe -53581
-u0065_030C /o -53581
-u0065_030C d -53581
-u0065_030C u0111 -53581
-u0065_030C c -53581
-u0065_030C 'c -53581
-u0065_030C u0063_030C -53581
-u0065_030C ,c -53581
-u0065_030C g -53581
-u0065_030C u0067_0306 -53581
-u0065_030C q -53581
-u0065_0328 e -53581
-u0065_0328 u0065_030C -53581
-u0065_0328 u0065_0328 -53581
-u0065_0328 `e -53581
-u0065_0328 'e -53581
-u0065_0328 ^e -53581
-u0065_0328 :e -53581
-u0065_0328 a -53581
-u0065_0328 u0061_0306 -53581
-u0065_0328 u0061_0328 -53581
-u0065_0328 `a -53581
-u0065_0328 'a -53581
-u0065_0328 ^a -53581
-u0065_0328 ^a -53581
-u0065_0328 ~a -53581
-u0065_0328 :a -53581
-u0065_0328 oa -53581
-u0065_0328 ae -53581
-u0065_0328 o -53581
-u0065_0328 u006F_030B -53581
-u0065_0328 `o -53581
-u0065_0328 'o -53581
-u0065_0328 ^o -53581
-u0065_0328 ~o -53581
-u0065_0328 :o -53581
-u0065_0328 oe -53581
-u0065_0328 /o -53581
-u0065_0328 d -53581
-u0065_0328 u0111 -53581
-u0065_0328 c -53581
-u0065_0328 'c -53581
-u0065_0328 u0063_030C -53581
-u0065_0328 ,c -53581
-u0065_0328 g -53581
-u0065_0328 u0067_0306 -53581
-u0065_0328 q -53581
-u006C_0301 l 53581
-u006C_0301 u006C_0301 53581
-u006C_0301 u006C_030C 53581
-u006C_030C l 53581
-u006C_030C u006C_0301 53581
-u006C_030C u006C_030C 53581
-/l cq 26790
-/l ' 26790
-`A y -26790
-`A :y -26790
-`A 'y -26790
-`A n -26790
-`A u006E_0301 -26790
-`A u006E_030C -26790
-`A u016A -26790
-`A ~n -26790
-`A l -26790
-`A u006C_0301 -26790
-`A u006C_030C -26790
-`A r -26790
-`A u -26790
-`A u0075_030B -26790
-`A u0075_030A -26790
-`A `u -26790
-`A 'u -26790
-`A ^u -26790
-`A :u -26790
-`A m -26790
-`A t -26790
-`A u0074_030C -26790
-`A u0074_0327 -26790
-`A i -26790
-`A 'i -26790
-`A h -26790
-`A b -26790
-`A k -26790
-`A v -26790
-`A w -26790
-`A C -26790
-`A G -26790
-`A 'C -26790
-`A u0043_030C -26790
-`A u0047_0306 -26790
-`A ,C -26790
-`A Q -26790
-`A O -26790
-`A u004F_030B -26790
-`A `O -26790
-`A 'O -26790
-`A ^O -26790
-`A ~O -26790
-`A :O -26790
-`A OE -26790
-`A /O -26790
-`A U -26790
-`A u0055_030B -26790
-`A u0055_030A -26790
-`A `U -26790
-`A 'U -26790
-`A ^U -26790
-`A :U -26790
-`A T -80371
-`A u0054_030C -80371
-`A u0054_0327 -80371
-`A Y -80371
-`A :Y -80371
-`A 'Y -80371
-`A V -107162
-`A W -107162
-`A e -53581
-`A u0065_030C -53581
-`A u0065_0328 -53581
-`A `e -53581
-`A 'e -53581
-`A ^e -53581
-`A :e -53581
-`A a -53581
-`A u0061_0306 -53581
-`A u0061_0328 -53581
-`A `a -53581
-`A 'a -53581
-`A ^a -53581
-`A ^a -53581
-`A ~a -53581
-`A :a -53581
-`A oa -53581
-`A ae -53581
-`A o -53581
-`A u006F_030B -53581
-`A `o -53581
-`A 'o -53581
-`A ^o -53581
-`A ~o -53581
-`A :o -53581
-`A oe -53581
-`A /o -53581
-`A d -53581
-`A u0111 -53581
-`A c -53581
-`A 'c -53581
-`A u0063_030C -53581
-`A ,c -53581
-`A g -53581
-`A u0067_0306 -53581
-`A q -53581
-'A y -26790
-'A :y -26790
-'A 'y -26790
-'A n -26790
-'A u006E_0301 -26790
-'A u006E_030C -26790
-'A u016A -26790
-'A ~n -26790
-'A l -26790
-'A u006C_0301 -26790
-'A u006C_030C -26790
-'A r -26790
-'A u -26790
-'A u0075_030B -26790
-'A u0075_030A -26790
-'A `u -26790
-'A 'u -26790
-'A ^u -26790
-'A :u -26790
-'A m -26790
-'A t -26790
-'A u0074_030C -26790
-'A u0074_0327 -26790
-'A i -26790
-'A 'i -26790
-'A h -26790
-'A b -26790
-'A k -26790
-'A v -26790
-'A w -26790
-'A C -26790
-'A G -26790
-'A 'C -26790
-'A u0043_030C -26790
-'A u0047_0306 -26790
-'A ,C -26790
-'A Q -26790
-'A O -26790
-'A u004F_030B -26790
-'A `O -26790
-'A 'O -26790
-'A ^O -26790
-'A ~O -26790
-'A :O -26790
-'A OE -26790
-'A /O -26790
-'A U -26790
-'A u0055_030B -26790
-'A u0055_030A -26790
-'A `U -26790
-'A 'U -26790
-'A ^U -26790
-'A :U -26790
-'A T -80371
-'A u0054_030C -80371
-'A u0054_0327 -80371
-'A Y -80371
-'A :Y -80371
-'A 'Y -80371
-'A V -107162
-'A W -107162
-'A e -53581
-'A u0065_030C -53581
-'A u0065_0328 -53581
-'A `e -53581
-'A 'e -53581
-'A ^e -53581
-'A :e -53581
-'A a -53581
-'A u0061_0306 -53581
-'A u0061_0328 -53581
-'A `a -53581
-'A 'a -53581
-'A ^a -53581
-'A ^a -53581
-'A ~a -53581
-'A :a -53581
-'A oa -53581
-'A ae -53581
-'A o -53581
-'A u006F_030B -53581
-'A `o -53581
-'A 'o -53581
-'A ^o -53581
-'A ~o -53581
-'A :o -53581
-'A oe -53581
-'A /o -53581
-'A d -53581
-'A u0111 -53581
-'A c -53581
-'A 'c -53581
-'A u0063_030C -53581
-'A ,c -53581
-'A g -53581
-'A u0067_0306 -53581
-'A q -53581
-^A y -26790
-^A :y -26790
-^A 'y -26790
-^A n -26790
-^A u006E_0301 -26790
-^A u006E_030C -26790
-^A u016A -26790
-^A ~n -26790
-^A l -26790
-^A u006C_0301 -26790
-^A u006C_030C -26790
-^A r -26790
-^A u -26790
-^A u0075_030B -26790
-^A u0075_030A -26790
-^A `u -26790
-^A 'u -26790
-^A ^u -26790
-^A :u -26790
-^A m -26790
-^A t -26790
-^A u0074_030C -26790
-^A u0074_0327 -26790
-^A i -26790
-^A 'i -26790
-^A h -26790
-^A b -26790
-^A k -26790
-^A v -26790
-^A w -26790
-^A C -26790
-^A G -26790
-^A 'C -26790
-^A u0043_030C -26790
-^A u0047_0306 -26790
-^A ,C -26790
-^A Q -26790
-^A O -26790
-^A u004F_030B -26790
-^A `O -26790
-^A 'O -26790
-^A ^O -26790
-^A ~O -26790
-^A :O -26790
-^A OE -26790
-^A /O -26790
-^A U -26790
-^A u0055_030B -26790
-^A u0055_030A -26790
-^A `U -26790
-^A 'U -26790
-^A ^U -26790
-^A :U -26790
-^A T -80371
-^A u0054_030C -80371
-^A u0054_0327 -80371
-^A Y -80371
-^A :Y -80371
-^A 'Y -80371
-^A V -107162
-^A W -107162
-^A e -53581
-^A u0065_030C -53581
-^A u0065_0328 -53581
-^A `e -53581
-^A 'e -53581
-^A ^e -53581
-^A :e -53581
-^A a -53581
-^A u0061_0306 -53581
-^A u0061_0328 -53581
-^A `a -53581
-^A 'a -53581
-^A ^a -53581
-^A ^a -53581
-^A ~a -53581
-^A :a -53581
-^A oa -53581
-^A ae -53581
-^A o -53581
-^A u006F_030B -53581
-^A `o -53581
-^A 'o -53581
-^A ^o -53581
-^A ~o -53581
-^A :o -53581
-^A oe -53581
-^A /o -53581
-^A d -53581
-^A u0111 -53581
-^A c -53581
-^A 'c -53581
-^A u0063_030C -53581
-^A ,c -53581
-^A g -53581
-^A u0067_0306 -53581
-^A q -53581
-~A y -26790
-~A :y -26790
-~A 'y -26790
-~A n -26790
-~A u006E_0301 -26790
-~A u006E_030C -26790
-~A u016A -26790
-~A ~n -26790
-~A l -26790
-~A u006C_0301 -26790
-~A u006C_030C -26790
-~A r -26790
-~A u -26790
-~A u0075_030B -26790
-~A u0075_030A -26790
-~A `u -26790
-~A 'u -26790
-~A ^u -26790
-~A :u -26790
-~A m -26790
-~A t -26790
-~A u0074_030C -26790
-~A u0074_0327 -26790
-~A i -26790
-~A 'i -26790
-~A h -26790
-~A b -26790
-~A k -26790
-~A v -26790
-~A w -26790
-~A C -26790
-~A G -26790
-~A 'C -26790
-~A u0043_030C -26790
-~A u0047_0306 -26790
-~A ,C -26790
-~A Q -26790
-~A O -26790
-~A u004F_030B -26790
-~A `O -26790
-~A 'O -26790
-~A ^O -26790
-~A ~O -26790
-~A :O -26790
-~A OE -26790
-~A /O -26790
-~A U -26790
-~A u0055_030B -26790
-~A u0055_030A -26790
-~A `U -26790
-~A 'U -26790
-~A ^U -26790
-~A :U -26790
-~A T -80371
-~A u0054_030C -80371
-~A u0054_0327 -80371
-~A Y -80371
-~A :Y -80371
-~A 'Y -80371
-~A V -107162
-~A W -107162
-~A e -53581
-~A u0065_030C -53581
-~A u0065_0328 -53581
-~A `e -53581
-~A 'e -53581
-~A ^e -53581
-~A :e -53581
-~A a -53581
-~A u0061_0306 -53581
-~A u0061_0328 -53581
-~A `a -53581
-~A 'a -53581
-~A ^a -53581
-~A ^a -53581
-~A ~a -53581
-~A :a -53581
-~A oa -53581
-~A ae -53581
-~A o -53581
-~A u006F_030B -53581
-~A `o -53581
-~A 'o -53581
-~A ^o -53581
-~A ~o -53581
-~A :o -53581
-~A oe -53581
-~A /o -53581
-~A d -53581
-~A u0111 -53581
-~A c -53581
-~A 'c -53581
-~A u0063_030C -53581
-~A ,c -53581
-~A g -53581
-~A u0067_0306 -53581
-~A q -53581
-:A y -26790
-:A :y -26790
-:A 'y -26790
-:A n -26790
-:A u006E_0301 -26790
-:A u006E_030C -26790
-:A u016A -26790
-:A ~n -26790
-:A l -26790
-:A u006C_0301 -26790
-:A u006C_030C -26790
-:A r -26790
-:A u -26790
-:A u0075_030B -26790
-:A u0075_030A -26790
-:A `u -26790
-:A 'u -26790
-:A ^u -26790
-:A :u -26790
-:A m -26790
-:A t -26790
-:A u0074_030C -26790
-:A u0074_0327 -26790
-:A i -26790
-:A 'i -26790
-:A h -26790
-:A b -26790
-:A k -26790
-:A v -26790
-:A w -26790
-:A C -26790
-:A G -26790
-:A 'C -26790
-:A u0043_030C -26790
-:A u0047_0306 -26790
-:A ,C -26790
-:A Q -26790
-:A O -26790
-:A u004F_030B -26790
-:A `O -26790
-:A 'O -26790
-:A ^O -26790
-:A ~O -26790
-:A :O -26790
-:A OE -26790
-:A /O -26790
-:A U -26790
-:A u0055_030B -26790
-:A u0055_030A -26790
-:A `U -26790
-:A 'U -26790
-:A ^U -26790
-:A :U -26790
-:A T -80371
-:A u0054_030C -80371
-:A u0054_0327 -80371
-:A Y -80371
-:A :Y -80371
-:A 'Y -80371
-:A V -107162
-:A W -107162
-:A e -53581
-:A u0065_030C -53581
-:A u0065_0328 -53581
-:A `e -53581
-:A 'e -53581
-:A ^e -53581
-:A :e -53581
-:A a -53581
-:A u0061_0306 -53581
-:A u0061_0328 -53581
-:A `a -53581
-:A 'a -53581
-:A ^a -53581
-:A ^a -53581
-:A ~a -53581
-:A :a -53581
-:A oa -53581
-:A ae -53581
-:A o -53581
-:A u006F_030B -53581
-:A `o -53581
-:A 'o -53581
-:A ^o -53581
-:A ~o -53581
-:A :o -53581
-:A oe -53581
-:A /o -53581
-:A d -53581
-:A u0111 -53581
-:A c -53581
-:A 'c -53581
-:A u0063_030C -53581
-:A ,c -53581
-:A g -53581
-:A u0067_0306 -53581
-:A q -53581
-oA y -26790
-oA :y -26790
-oA 'y -26790
-oA n -26790
-oA u006E_0301 -26790
-oA u006E_030C -26790
-oA u016A -26790
-oA ~n -26790
-oA l -26790
-oA u006C_0301 -26790
-oA u006C_030C -26790
-oA r -26790
-oA u -26790
-oA u0075_030B -26790
-oA u0075_030A -26790
-oA `u -26790
-oA 'u -26790
-oA ^u -26790
-oA :u -26790
-oA m -26790
-oA t -26790
-oA u0074_030C -26790
-oA u0074_0327 -26790
-oA i -26790
-oA 'i -26790
-oA h -26790
-oA b -26790
-oA k -26790
-oA v -26790
-oA w -26790
-oA C -26790
-oA G -26790
-oA 'C -26790
-oA u0043_030C -26790
-oA u0047_0306 -26790
-oA ,C -26790
-oA Q -26790
-oA O -26790
-oA u004F_030B -26790
-oA `O -26790
-oA 'O -26790
-oA ^O -26790
-oA ~O -26790
-oA :O -26790
-oA OE -26790
-oA /O -26790
-oA U -26790
-oA u0055_030B -26790
-oA u0055_030A -26790
-oA `U -26790
-oA 'U -26790
-oA ^U -26790
-oA :U -26790
-oA T -80371
-oA u0054_030C -80371
-oA u0054_0327 -80371
-oA Y -80371
-oA :Y -80371
-oA 'Y -80371
-oA V -107162
-oA W -107162
-oA e -53581
-oA u0065_030C -53581
-oA u0065_0328 -53581
-oA `e -53581
-oA 'e -53581
-oA ^e -53581
-oA :e -53581
-oA a -53581
-oA u0061_0306 -53581
-oA u0061_0328 -53581
-oA `a -53581
-oA 'a -53581
-oA ^a -53581
-oA ^a -53581
-oA ~a -53581
-oA :a -53581
-oA oa -53581
-oA ae -53581
-oA o -53581
-oA u006F_030B -53581
-oA `o -53581
-oA 'o -53581
-oA ^o -53581
-oA ~o -53581
-oA :o -53581
-oA oe -53581
-oA /o -53581
-oA d -53581
-oA u0111 -53581
-oA c -53581
-oA 'c -53581
-oA u0063_030C -53581
-oA ,c -53581
-oA g -53581
-oA u0067_0306 -53581
-oA q -53581
-u0189 X -26790
-u0110 X -26790
--D X -26790
-u0189 W -26790
-u0110 W -26790
--D W -26790
-u0189 A -26790
-u0110 A -26790
--D A -26790
-u0189 u0041_0306 -26790
-u0110 u0041_0306 -26790
--D u0041_0306 -26790
-u0189 u0041_0328 -26790
-u0110 u0041_0328 -26790
--D u0041_0328 -26790
-u0189 `A -26790
-u0110 `A -26790
--D `A -26790
-u0189 'A -26790
-u0110 'A -26790
--D 'A -26790
-u0189 ^A -26790
-u0110 ^A -26790
--D ^A -26790
-u0189 ~A -26790
-u0110 ~A -26790
--D ~A -26790
-u0189 :A -26790
-u0110 :A -26790
--D :A -26790
-u0189 oA -26790
-u0110 oA -26790
--D oA -26790
-u0189 AE -26790
-u0110 AE -26790
--D AE -26790
-u0189 V -26790
-u0110 V -26790
--D V -26790
-u0189 Y -26790
-u0110 Y -26790
--D Y -26790
-u0189 :Y -26790
-u0110 :Y -26790
--D :Y -26790
-u0189 'Y -26790
-u0110 'Y -26790
--D 'Y -26790
-`O X -26790
-`O W -26790
-`O A -26790
-`O u0041_0306 -26790
-`O u0041_0328 -26790
-`O `A -26790
-`O 'A -26790
-`O ^A -26790
-`O ~A -26790
-`O :A -26790
-`O oA -26790
-`O AE -26790
-`O V -26790
-`O Y -26790
-`O :Y -26790
-`O 'Y -26790
-'O X -26790
-'O W -26790
-'O A -26790
-'O u0041_0306 -26790
-'O u0041_0328 -26790
-'O `A -26790
-'O 'A -26790
-'O ^A -26790
-'O ~A -26790
-'O :A -26790
-'O oA -26790
-'O AE -26790
-'O V -26790
-'O Y -26790
-'O :Y -26790
-'O 'Y -26790
-^O X -26790
-^O W -26790
-^O A -26790
-^O u0041_0306 -26790
-^O u0041_0328 -26790
-^O `A -26790
-^O 'A -26790
-^O ^A -26790
-^O ~A -26790
-^O :A -26790
-^O oA -26790
-^O AE -26790
-^O V -26790
-^O Y -26790
-^O :Y -26790
-^O 'Y -26790
-~O X -26790
-~O W -26790
-~O A -26790
-~O u0041_0306 -26790
-~O u0041_0328 -26790
-~O `A -26790
-~O 'A -26790
-~O ^A -26790
-~O ~A -26790
-~O :A -26790
-~O oA -26790
-~O AE -26790
-~O V -26790
-~O Y -26790
-~O :Y -26790
-~O 'Y -26790
-:O X -26790
-:O W -26790
-:O A -26790
-:O u0041_0306 -26790
-:O u0041_0328 -26790
-:O `A -26790
-:O 'A -26790
-:O ^A -26790
-:O ~A -26790
-:O :A -26790
-:O oA -26790
-:O AE -26790
-:O V -26790
-:O Y -26790
-:O :Y -26790
-:O 'Y -26790
-/O X -26790
-/O W -26790
-/O A -26790
-/O u0041_0306 -26790
-/O u0041_0328 -26790
-/O `A -26790
-/O 'A -26790
-/O ^A -26790
-/O ~A -26790
-/O :A -26790
-/O oA -26790
-/O AE -26790
-/O V -26790
-/O Y -26790
-/O :Y -26790
-/O 'Y -26790
-'Y e -80371
-'Y o -80371
-'Y r -80371
-'Y a -80371
-'Y u -80371
-'Y A -80371
-'Y u0041_0306 -80371
-'Y u0041_0328 -80371
-'Y `A -80371
-'Y 'A -80371
-'Y ^A -80371
-'Y ~A -80371
-'Y :A -80371
-'Y oA -80371
-'Y AE -80371
-`e e -53581
-`e u0065_030C -53581
-`e u0065_0328 -53581
-`e `e -53581
-`e 'e -53581
-`e ^e -53581
-`e :e -53581
-`e a -53581
-`e u0061_0306 -53581
-`e u0061_0328 -53581
-`e `a -53581
-`e 'a -53581
-`e ^a -53581
-`e ^a -53581
-`e ~a -53581
-`e :a -53581
-`e oa -53581
-`e ae -53581
-`e o -53581
-`e u006F_030B -53581
-`e `o -53581
-`e 'o -53581
-`e ^o -53581
-`e ~o -53581
-`e :o -53581
-`e oe -53581
-`e /o -53581
-`e d -53581
-`e u0111 -53581
-`e c -53581
-`e 'c -53581
-`e u0063_030C -53581
-`e ,c -53581
-`e g -53581
-`e u0067_0306 -53581
-`e q -53581
-'e e -53581
-'e u0065_030C -53581
-'e u0065_0328 -53581
-'e `e -53581
-'e 'e -53581
-'e ^e -53581
-'e :e -53581
-'e a -53581
-'e u0061_0306 -53581
-'e u0061_0328 -53581
-'e `a -53581
-'e 'a -53581
-'e ^a -53581
-'e ^a -53581
-'e ~a -53581
-'e :a -53581
-'e oa -53581
-'e ae -53581
-'e o -53581
-'e u006F_030B -53581
-'e `o -53581
-'e 'o -53581
-'e ^o -53581
-'e ~o -53581
-'e :o -53581
-'e oe -53581
-'e /o -53581
-'e d -53581
-'e u0111 -53581
-'e c -53581
-'e 'c -53581
-'e u0063_030C -53581
-'e ,c -53581
-'e g -53581
-'e u0067_0306 -53581
-'e q -53581
-^e e -53581
-^e u0065_030C -53581
-^e u0065_0328 -53581
-^e `e -53581
-^e 'e -53581
-^e ^e -53581
-^e :e -53581
-^e a -53581
-^e u0061_0306 -53581
-^e u0061_0328 -53581
-^e `a -53581
-^e 'a -53581
-^e ^a -53581
-^e ^a -53581
-^e ~a -53581
-^e :a -53581
-^e oa -53581
-^e ae -53581
-^e o -53581
-^e u006F_030B -53581
-^e `o -53581
-^e 'o -53581
-^e ^o -53581
-^e ~o -53581
-^e :o -53581
-^e oe -53581
-^e /o -53581
-^e d -53581
-^e u0111 -53581
-^e c -53581
-^e 'c -53581
-^e u0063_030C -53581
-^e ,c -53581
-^e g -53581
-^e u0067_0306 -53581
-^e q -53581
-:e e -53581
-:e u0065_030C -53581
-:e u0065_0328 -53581
-:e `e -53581
-:e 'e -53581
-:e ^e -53581
-:e :e -53581
-:e a -53581
-:e u0061_0306 -53581
-:e u0061_0328 -53581
-:e `a -53581
-:e 'a -53581
-:e ^a -53581
-:e ^a -53581
-:e ~a -53581
-:e :a -53581
-:e oa -53581
-:e ae -53581
-:e o -53581
-:e u006F_030B -53581
-:e `o -53581
-:e 'o -53581
-:e ^o -53581
-:e ~o -53581
-:e :o -53581
-:e oe -53581
-:e /o -53581
-:e d -53581
-:e u0111 -53581
-:e c -53581
-:e 'c -53581
-:e u0063_030C -53581
-:e ,c -53581
-:e g -53581
-:e u0067_0306 -53581
-:e q -53581
-`o e -53581
-`o u0065_030C -53581
-`o u0065_0328 -53581
-`o `e -53581
-`o 'e -53581
-`o ^e -53581
-`o :e -53581
-`o a -53581
-`o u0061_0306 -53581
-`o u0061_0328 -53581
-`o `a -53581
-`o 'a -53581
-`o ^a -53581
-`o ^a -53581
-`o ~a -53581
-`o :a -53581
-`o oa -53581
-`o ae -53581
-`o o -53581
-`o u006F_030B -53581
-`o `o -53581
-`o 'o -53581
-`o ^o -53581
-`o ~o -53581
-`o :o -53581
-`o oe -53581
-`o /o -53581
-`o d -53581
-`o u0111 -53581
-`o c -53581
-`o 'c -53581
-`o u0063_030C -53581
-`o ,c -53581
-`o g -53581
-`o u0067_0306 -53581
-`o q -53581
-'o e -53581
-'o u0065_030C -53581
-'o u0065_0328 -53581
-'o `e -53581
-'o 'e -53581
-'o ^e -53581
-'o :e -53581
-'o a -53581
-'o u0061_0306 -53581
-'o u0061_0328 -53581
-'o `a -53581
-'o 'a -53581
-'o ^a -53581
-'o ^a -53581
-'o ~a -53581
-'o :a -53581
-'o oa -53581
-'o ae -53581
-'o o -53581
-'o u006F_030B -53581
-'o `o -53581
-'o 'o -53581
-'o ^o -53581
-'o ~o -53581
-'o :o -53581
-'o oe -53581
-'o /o -53581
-'o d -53581
-'o u0111 -53581
-'o c -53581
-'o 'c -53581
-'o u0063_030C -53581
-'o ,c -53581
-'o g -53581
-'o u0067_0306 -53581
-'o q -53581
-^o e -53581
-^o u0065_030C -53581
-^o u0065_0328 -53581
-^o `e -53581
-^o 'e -53581
-^o ^e -53581
-^o :e -53581
-^o a -53581
-^o u0061_0306 -53581
-^o u0061_0328 -53581
-^o `a -53581
-^o 'a -53581
-^o ^a -53581
-^o ^a -53581
-^o ~a -53581
-^o :a -53581
-^o oa -53581
-^o ae -53581
-^o o -53581
-^o u006F_030B -53581
-^o `o -53581
-^o 'o -53581
-^o ^o -53581
-^o ~o -53581
-^o :o -53581
-^o oe -53581
-^o /o -53581
-^o d -53581
-^o u0111 -53581
-^o c -53581
-^o 'c -53581
-^o u0063_030C -53581
-^o ,c -53581
-^o g -53581
-^o u0067_0306 -53581
-^o q -53581
-~o e -53581
-~o u0065_030C -53581
-~o u0065_0328 -53581
-~o `e -53581
-~o 'e -53581
-~o ^e -53581
-~o :e -53581
-~o a -53581
-~o u0061_0306 -53581
-~o u0061_0328 -53581
-~o `a -53581
-~o 'a -53581
-~o ^a -53581
-~o ^a -53581
-~o ~a -53581
-~o :a -53581
-~o oa -53581
-~o ae -53581
-~o o -53581
-~o u006F_030B -53581
-~o `o -53581
-~o 'o -53581
-~o ^o -53581
-~o ~o -53581
-~o :o -53581
-~o oe -53581
-~o /o -53581
-~o d -53581
-~o u0111 -53581
-~o c -53581
-~o 'c -53581
-~o u0063_030C -53581
-~o ,c -53581
-~o g -53581
-~o u0067_0306 -53581
-~o q -53581
-:o e -53581
-:o u0065_030C -53581
-:o u0065_0328 -53581
-:o `e -53581
-:o 'e -53581
-:o ^e -53581
-:o :e -53581
-:o a -53581
-:o u0061_0306 -53581
-:o u0061_0328 -53581
-:o `a -53581
-:o 'a -53581
-:o ^a -53581
-:o ^a -53581
-:o ~a -53581
-:o :a -53581
-:o oa -53581
-:o ae -53581
-:o o -53581
-:o u006F_030B -53581
-:o `o -53581
-:o 'o -53581
-:o ^o -53581
-:o ~o -53581
-:o :o -53581
-:o oe -53581
-:o /o -53581
-:o d -53581
-:o u0111 -53581
-:o c -53581
-:o 'c -53581
-:o u0063_030C -53581
-:o ,c -53581
-:o g -53581
-:o u0067_0306 -53581
-:o q -53581
-Tp e -53581
-Tp u0065_030C -53581
-Tp u0065_0328 -53581
-Tp `e -53581
-Tp 'e -53581
-Tp ^e -53581
-Tp :e -53581
-Tp a -53581
-Tp u0061_0306 -53581
-Tp u0061_0328 -53581
-Tp `a -53581
-Tp 'a -53581
-Tp ^a -53581
-Tp ^a -53581
-Tp ~a -53581
-Tp :a -53581
-Tp oa -53581
-Tp ae -53581
-Tp o -53581
-Tp u006F_030B -53581
-Tp `o -53581
-Tp 'o -53581
-Tp ^o -53581
-Tp ~o -53581
-Tp :o -53581
-Tp oe -53581
-Tp /o -53581
-Tp d -53581
-Tp u0111 -53581
-Tp c -53581
-Tp 'c -53581
-Tp u0063_030C -53581
-Tp ,c -53581
-Tp g -53581
-Tp u0067_0306 -53581
-Tp q -53581
-charset
-ga 535808,672672 2 0000
-aa 535808,672672,0,87069 2 0001
-a^ 482227,672672 2 0002
-a~ 535808,672672,0,113859 2 0003
-ad 535808,693578,0,107522 2 0004
-a" 535808,672672,0,113859 2 0005
-ao 852051,672672 2 0006
-ah 482227,672672 2 0007
-ab 535808,672672,0,98717 2 0010
-a- 535808,693578,0,132560 2 0011
-a. 321485,693578,0,123198 2 0012
-ac 482227,0,178360 1 0013
-ho 321485,0,203840 1 0014
-bq 321485,110656,203840 1 0015
-fo 482227,506688,0,73032 2 0016
-fc 482227,506688,0,73032 2 0017
-lq 378560,722176,0,176642 2 0020
-rq 378560,722176,0,73032 2 0021
-Bq 378560,110656,203840,73032 1 0022
-Fo 589389,506688,0,73032 2 0023
-Fc 589389,506688 2 0024
-en 535808,451360,0,96458 0 0025
-em 1071616,451360,0,96458 0 0026
---- 0,451360 0 0027
---- 428646,786240,58240,142979 3 0030
-.i 321485,451360,0,80419 0 0031
-.j 348275,451360,203840,39166 1 0032
-ff 642970,722176,203840,222186 3 0033
-fi 589389,722176,203840,108326 3 0034
-fl 616179,722176,203840,108326 3 0035
-Fi 924269,722176,203840,108326 3 0036
-Fl 937664,722176,203840,108326 3 0037
-u2423 535808,451360,101920,49941,0,24971 1 0040
-u01C3 321485,722176,0,130166 2 0041
-! "
-dq 535808,722176,0,90272 2 0042
-" "
-sh 857293,722176,203840,69362 3 0043
-# "
-Do 535808,786240,58240,142106 3 0044
-$ "
-% 857293,786240,58240,142979 3 0045
-& 803712,722176,0,101629 2 0046
-cq 321485,722176,0,130166 2 0047
-' "
-( 428646,786240,262080,169770 3 0050
-) 428646,786240,262080,38730 3 0051
-* 535808,786240,0,156374 2 0052
-+ 803712,583565,59405,38730 3 0053
-, 321485,110656,203840 1 0054
-- 375066,451360,0,29630 0 0055
-. 321485,110656 0 0056
-sl 535808,786240,262080,169770 3 0057
-/ "
-0 535808,672672,0,142106 2 0060
-1 535808,672672,0,142106 2 0061
-2 535808,672672,0,142106 2 0062
-3 535808,672672,0,142106 2 0063
-4 535808,672672,203840,142106 3 0064
-5 535808,672672,0,142106 2 0065
-6 535808,672672,0,142106 2 0066
-7 535808,672672,0,142106 2 0067
-8 535808,672672,0,142106 2 0070
-9 535808,672672,0,142106 2 0071
-: 321485,451360,0,61006 0 0072
-; 321485,451360,203840,61006 1 0073
-< 803712,559216,40992,87707 3 0074
-= 803712,384606,-139554,69362 0 0075
-> 803712,559216,40992,11939 3 0076
-? 535808,722176,0,128419 2 0077
-at 803712,722176,0,100610 2 0100
-@ "
-A 779251,722176 2 0101
-B 737901,722176,0,107522,0,53763 2 0102
-C 750131,722176,0,152298,-80517,76149 2 0103
-D 791482,722176,0,98571,0,71781 2 0104
-E 711110,722176,0,126090,0,63045 2 0105
-F 684320,722176,0,139485,0,5533 2 0106
-G 810992,722176,0,91437,-80517,91437 2 0107
-H 779251,722176,0,171808,0,85904 2 0110
-I 404186,722176,0,165693,0,82846 2 0111
-J 550368,722176,0,147056,0,46738 2 0112
-K 806042,722176,0,152298,0,76149 2 0113
-L 657530,722176,0,0,0,53581 2 0114
-M 939994,722176,0,171808,0,59114 2 0115
-N 779251,722176,0,171808,0,59114 2 0116
-O 803712,722176,0,98571,-80517,71781 2 0117
-P 711110,722176,0,107522,0,-26426 2 0120
-Q 803712,722176,203840,98571,-80517,98571 3 0121
-R 764691,722176,0,40550,0,30413 2 0122
-S 589389,722176,0,125507,0,62754 2 0123
-T 750131,722176,0,139485,-134317,5533 2 0124
-U 779251,722176,0,171808,-121867,59114 2 0125
-V 779251,722176,0,192483,-138902,-21840 2 0126
-W 1047155,722176,0,192483,-138902,58531 2 0127
-X 779251,722176,0,165693,0,82846 2 0130
-Y 779251,722176,0,203198,-152298,-11125 2 0131
-Z 642970,722176,0,152298,0,76149 2 0132
-lB 321485,786240,262080,196560 3 0133
-[ "
-rs 535808,786240,262080 3 0134
-\ "
-rB 321485,786240,262080,110370 3 0135
-] "
-ha 642970,722176,0,69670 2 0136
-^ "
-_ 803712,0,244102 1 0137
-oq 321485,722176,0,130166 2 0140
-` "
-a 535808,451360,0,80419,-46666,80419 0 0141
-b 482227,722176,0,66174,-46666,66174 2 0142
-c 482227,451360,0,59259,-46666,59259 0 0143
-d 535808,722176,0,108326,-46666,108326 2 0144
-e 482227,451360,0,78770,-46666,78770 0 0145
-f 321485,722176,203840,222186,104541,112840 3 0146
-g 482227,451360,203840,92747,-21040,55134 1 0147
-h 535808,722176,0,80419,0,80419 2 0150
-i 321485,693578,0,106819,-32421,106819 2 0151
-j 321485,693578,203840,151664,50960,92747 3 0152
-k 482227,722176,0,112840,0,80419 2 0153
-l 267904,722176,0,108326,-26790,107210 2 0154
-m 857293,451360,0,80419,-32421,80419 0 0155
-n 589389,451360,0,80419,-32421,80419 0 0156
-o 535808,451360,0,66174,-46666,66174 0 0157
-p 535808,451360,203840,66174,-22714,66174 1 0160
-q 482227,451360,203840,92747,-46666,55134 1 0161
-r 442042,451360,0,112840,-32421,86050 0 0162
-s 428646,451360,0,86050,0,86050 0 0163
-t 348275,644802,0,99445,-45864,99445 2 0164
-u 562598,451360,0,80419,-32421,80419 0 0165
-v 482227,451360,0,112840,-32421,75227 0 0166
-w 696550,451360,0,112840,-32421,84630 0 0167
-x 486304,451360,0,126235,0,126235 0 0170
-y 509018,451360,203840,92747,-32421,55134 1 0171
-z 428646,451360,0,128856,0,80419 0 0172
-lC 535808,786240,262080,154627 3 0173
-{ "
-u01C0 321485,786240,262080,110370 3 0174
-ba "
-| "
-rC 535808,786240,262080,23587 3 0175
-} "
-~ 642970,693578,0,121451 2 0176
-hy 214323,451360,0,29630 0 0177
-u0041_0306 779251,934752 2 0200
-u0041_0328 779251,722176,203840 3 0201
-'C 750131,896954,0,152298 2 0202
-u0043_030C 750131,934752,0,152298,-80517,76149 2 0203
-u0044_030C 791482,934752,0,98571,0,71781 2 0204
-u0045_030C 711110,934752,0,126090,0,63045 2 0205
-u0045_0328 711110,722176,203840,126090 3 0206
-u0047_0306 810992,934752,0,91437,-80517,91437 2 0207
-u004C_0301 657530,896954,0,0,0,53581 2 0210
-u004C_030C 657530,934752,0,0,0,53581 2 0211
-/L 657530,722176 2 0212
-u004E_0301 779251,896954,0,171808 2 0213
-u004E_030C 779251,934752,0,171808,0,59114 2 0214
-u014A 818272,722176,0,179088,0,62754 2 0215
-u004F_030B 803712,896954,0,98571,-80517,71781 2 0216
-u0052_0301 764691,896954,0,40550,0,30413 2 0217
-u0052_030C 764691,934752,0,40550,0,30413 2 0220
-u0053_0301 589389,896954,0,125507 2 0221
-vS 589389,934752,0,125507,0,62754 2 0222
-u0053_0327 589389,722176,178360,125507,0,62754 3 0223
-u0054_030C 750131,934752,0,139485,-134317,5533 2 0224
-u0054_0327 750131,722176,178360,139485,-134317,5533 3 0225
-u0055_030B 779251,896954,0,171808,-121867,59114 2 0226
-u0055_030A 779251,934752,0,171808,-121867,59114 2 0227
-:Y 779251,934752,0,203198,-152298,-11125 2 0230
-u005A_0301 642970,896954,0,152298 2 0231
-vZ 642970,934752,0,152298,0,76149 2 0232
-u005A_0307 642970,896954,0,152298 2 0233
-IJ 886413,722176,0,147056,0,46738 2 0234
-u0049_0307 404186,896954,0,165693,0,82846 2 0235
-u0111 535808,722176,0,108326,-46666,108326 2 0236
-sc 482227,722176,203840 3 0237
-u0061_0306 535808,672672,0,80419,-46666,80419 2 0240
-u0061_0328 535808,451360,203840,80419 1 0241
-'c 482227,672672,0,59259 2 0242
-u0063_030C 482227,672672,0,59259,-46666,59259 2 0243
-u0064_030C 535808,722176,0,108326,-46666,108326 2 0244
-u0065_030C 482227,672672,0,78770,-46666,78770 2 0245
-u0065_0328 482227,451360,203840,78770 1 0246
-u0067_0306 482227,672672,203840,92747,-21040,55134 3 0247
-u006C_0301 267904,896954,0,108326,-26790,107210 2 0250
-u006C_030C 267904,722176,0,108326,-26790,107210 2 0251
-/l 334880,722176,0,108326 2 0252
-u006E_0301 589389,672672,0,80419 2 0253
-u006E_030C 589389,672672,0,80419,-32421,80419 2 0254
-u016A 589389,451360,203840,80419,-32421,80419 1 0255
-u006F_030B 535808,672672,0,66174,-46666,66174 2 0256
-u0072_0301 442042,672672,0,112840,-32421,86050 2 0257
-u0072_030C 442042,672672,0,112840,-32421,86050 2 0260
-u0073_0301 428646,672672,0,86050 2 0261
-vs 428646,672672,0,140650,0,140650 2 0262
-u0073_0327 428646,451360,178360,86050,0,86050 1 0263
-u0074_030C 348275,722176,0,99445,-45864,99445 2 0264
-u0074_0327 348275,644802,178360,99445,-45864,99445 3 0265
-u0075_030B 562598,672672,0,210246,-32421,210246 2 0266
-u0075_030A 562598,672672,0,80419,-32421,80419 2 0267
-:y 509018,672672,203840,92747,-32421,55134 3 0270
-u007A_0301 428646,672672,0,128856,0,80419 2 0271
-vz 428646,672672,0,128856,0,80419 2 0272
-u007A_0307 428646,693578,0,128856,0,80419 2 0273
-ij 589389,693578,203840,106819,50960,92747 3 0274
-r! 321485,524160,203840,79206 3 0275
-r? 535808,524160,203840 3 0276
-Po 806261,722176 2 0277
-`A 779251,896954 2 0300
-'A 779251,896954 2 0301
-^A 779251,934752 2 0302
-~A 779251,934752 2 0303
-:A 779251,934752 2 0304
-oA 779251,896954 2 0305
-AE 925434,722176,0,126090 2 0306
-,C 750131,722176,178360,152298,-80517,76149 3 0307
-`E 711110,896954,0,126090,0,63045 2 0310
-'E 711110,896954,0,126090,0,63045 2 0311
-^E 711110,934752,0,126090,0,63045 2 0312
-:E 711110,934752,0,126090 2 0313
-`I 404186,896954,0,165693,0,82846 2 0314
-'I 404186,896954,0,165693,0,82846 2 0315
-^I 404186,934752,0,165693,0,82846 2 0316
-:I 404186,934752,0,165693,0,82846 2 0317
-u0189 791482,722176,0,98571,0,71781 2 0320
-u0110 "
--D "
-~N 779251,934752,0,171808,0,59114 2 0321
-`O 803712,896954,0,98571,-80517,71781 2 0322
-'O 803712,896954,0,98571 2 0323
-^O 803712,934752,0,98571,-80517,71781 2 0324
-~O 803712,934752,0,98571,-80517,71781 2 0325
-:O 803712,934752,0,98571,-80517,71781 2 0326
-OE 1032595,722176,0,126090 2 0327
-/O 803712,767312,50960,98571 3 0330
-`U 779251,896954,0,171808,-121867,59114 2 0331
-'U 779251,896954,0,171808 2 0332
-^U 779251,934752,0,171808,-121867,59114 2 0333
-:U 779251,934752,0,171808,-121867,59114 2 0334
-'Y 779251,896954,0,203198,-152298,-11125 2 0335
-TP 657530,722176,0,107522,0,53763 2 0336
---- 1125197,722176,0,125507,0,62754 2 0337
-`a 535808,672672,0,80419,-46666,80419 2 0340
-'a 535808,672672,0,80419,-46666,80419 2 0341
-^a 535808,672672,0,80419,-46666,80419 2 0342
-~a 535808,672672,0,80419,-46666,80419 2 0343
-:a 535808,672672,0,80419,-46666,80419 2 0344
-oa 535808,672672,0,80419,-46666,80419 2 0345
-ae 750131,451360,0,78770 0 0346
-,c 482227,451360,178360,59259,-46666,59259 1 0347
-`e 482227,672672,0,78770,-46666,78770 2 0350
-'e 482227,672672,0,78770,-46666,78770 2 0351
-^e 482227,672672,0,78770,-46666,78770 2 0352
-:e 482227,672672,0,78770,-46666,78770 2 0353
-`i 321485,672672,0,80419 2 0354
-'i 321485,672672,0,80419 2 0355
-^i 321485,672672,0,80419 2 0356
-:i 321485,672672,0,80419 2 0357
-Sd 535808,722176,0,112840 2 0360
-~n 589389,672672,0,80419,-32421,80419 2 0361
-`o 535808,672672,0,66174,-46666,66174 2 0362
-'o 535808,672672,0,66174,-46666,66174 2 0363
-^o 535808,672672,0,66174,-46666,66174 2 0364
-~o 535808,672672,0,66174,-46666,66174 2 0365
-:o 535808,672672,0,66174,-46666,66174 2 0366
-oe 750131,451360,0,78770 0 0367
-/o 535808,559216,101920,96458 3 0370
-`u 562598,672672,0,80419,-32421,80419 2 0371
-'u 562598,672672,0,80419,-32421,80419 2 0372
-^u 562598,672672,0,80419,-32421,80419 2 0373
-:u 562598,672672,0,80419,-32421,80419 2 0374
-'y 509018,672672,203840,92747,-32421,55134 3 0375
-Tp 535808,722176,203840,66174 3 0376
-ss 562598,722176,203840,110218 3 0377
diff --git a/contrib/groff/font/devdvi/TITC b/contrib/groff/font/devdvi/TITC
deleted file mode 100644
index 4987eeb7022a..000000000000
--- a/contrib/groff/font/devdvi/TITC
+++ /dev/null
@@ -1,138 +0,0 @@
-name TITC
-special
-internalname tcti1000
-spacewidth 375066
-slant 14.036243
-checksum 427649518
-designsize 10485760
-charset
---- 535808,634477 2 0000
---- 535808,634477,0,79074 2 0001
---- 535808,672672,0,62390 2 0002
---- 535808,672672,0,113859 2 0003
---- 535808,672672 2 0004
---- 535808,634477,0,105864 2 0005
---- 779251,672672 2 0006
---- 535808,672672 2 0007
---- 535808,672672,0,98717 2 0010
---- 535808,672672,0,127254 2 0011
---- 321485,634477 2 0012
---- 482227,0,178360 1 0013
---- 321485,0,203840 1 0014
---- 428646,110656,203840 1 0015
---- 535808,110656,203840 1 0022
---- 750131,450486,0,96528 0 0025
---- 830502,450486,0,96528 0 0026
---- 0,716352 2 0027
-<- 1018035,384606,-139554 0 0030
--> 1018035,384606,-139554 0 0031
---- 321485,728000,0,454288 2 0032
---- 375066,992992,0,510522 2 0033
---- 535808,728000,0,454288 2 0034
---- 535808,728000,0,510522 2 0035
---- 0,728000 2 0037
-u2422 482227,728000,0,66174,-46666,66174 2 0040
-Do 535808,786240,58240,142106 3 0044
-$ "
-aq 321485,728000,0,117062 2 0047
---- 535808,487760,-36400 2 0052
-, 321485,110656,203840 1 0054
---- 375066,384606,-139554,69362 0 0055
-. 321485,110656 0 0056
-f/ 535808,786240,262080,169770 3 0057
-0 535808,450486,0,68272 0 0060
-1 535808,450486 0 0061
-2 535808,450486,0,68840 0 0062
-3 535808,450486,203840,68840 1 0063
-4 535808,450486,203840,12376 1 0064
-5 535808,450486,203840,59259 1 0065
-6 535808,672672,0,115315 2 0066
-7 535808,450486,203840,112840 1 0067
-8 535808,672672,0,115315 2 0070
-9 535808,450486,203840,59259 1 0071
-la 428646,786240,262080 3 0074
-\- 803712,581944,59405,38730 3 0075
-ra 428646,786240,262080 3 0076
-u2127 750131,716352,0,160334,0,80168 2 0115
-ci 1125197,786240,262080 3 0117
-u03A9 750131,716352,0,107526,0,53763 2 0127
-u301A 442042,786240,262080 3 0133
-u301B 442042,786240,262080 3 0135
-ua 535808,728000,203840,96387 3 0136
-da 535808,728000,203840 3 0137
---- 535808,728000 2 0140
---- 535808,487760,-36400 2 0142
---- 535808,487760,-36400 2 0143
---- 535808,634477,27666 3 0144
---- 1018035,728000 2 0154
---- 535808,487760,-36400 2 0155
-u266A 589389,728000 2 0156
-ti 642970,128960 0 0176
-~ "
---- 214323,384606,-139554,69362 0 0177
---- 642970,728000,0,113277 2 0200
---- 642970,728000,0,104250 2 0201
---- 535808,728000,0,128419 2 0202
---- 535808,728000 2 0203
-dg 482227,728000,203840 3 0204
-dd 482227,728000,203840 3 0205
-u2016 535808,786240,262080 3 0206
-%0 1178778,786240,58240,142979 3 0207
-bu 535808,450486,-74547 0 0210
-u2103 964454,716352,0,152298,-80517,76149 2 0211
---- 642970,786240,58240,142106 3 0212
---- 535808,548426,101920,102125 3 0213
-Fn 321485,728000,203840,222186,104541,112840 3 0214
-u20A1 750131,786240,58240,152298,-80517,76149 3 0215
-u20A9 1047155,716352,0,192483,-138902,58531 2 0216
-u20A6 806042,716352,0,171808,0,59114 2 0217
---- 810992,786240,58240,91437,-80517,91437 3 0220
-u20B1 724506,716352,0,107526,0,-26426 2 0221
-u20A4 806261,728000 2 0222
-u211E 764691,716352,0,40550,0,30413 2 0223
-u203D 589389,728000,0,128419 2 0224
---- 535808,524160,203840 3 0225
-u20AB 535808,786240,0,122886,-46666,122886 2 0226
-tm 696550,786240,0,550366 2 0227
-u2031 1515405,786240,58240,142979 3 0230
---- 509018,728000,203840 3 0231
-u0E3F 737901,786240,58240,107526,0,53763 3 0232
-u2116 937373,716352,0,171808,0,59114 2 0233
-u2052 535808,786240,0,169770 2 0234
-u212E 705869,716352,0,136106 2 0235
-u25E6 535808,450486,-74547 0 0236
-u2120 696550,786240,0,550366 2 0237
-u2045 401856,786240,262080,23587 3 0240
-u2046 401856,786240,262080,154627 3 0241
-ct 535808,548426,101920,102125 3 0242
-Po 806261,728000 2 0243
-Cs 816510,581944,0,112840 2 0244
-Ye 779251,716352,0,203198 2 0245
-bb 214323,786240,262080,142979 3 0246
-sc 482227,728000,203840 3 0247
---- 535808,700130,0,109803 2 0250
-co 1125197,786240,262080 3 0251
-Of 482227,786240,0,137592 2 0252
---- 1125197,786240,262080 3 0253
-tno 696550,450486,0,86050 0 0254
-u2117 1125197,786240,262080 3 0255
-rg 1125197,786240,262080 3 0256
---- 803712,728000 2 0257
-de 375066,716352 2 0260
-t+- 803712,581944,59405,38730 3 0261
-S2 482227,786240,0,169770 2 0262
-S3 482227,786240,0,169770 2 0263
---- 535808,728000,0,101629 2 0264
-mc 535808,450486,203840,80419,30867,80419 1 0265
-ps 642970,728000,203840 3 0266
-pc 321485,450486 0 0267
-u203B 704314,548426,0,29630 2 0270
-S1 482227,786240,0,169770 2 0271
-Om 482227,786240,0,137592 2 0272
---- 482227,786240,220138,196560 3 0273
---- 482227,786240,203840,169770 3 0274
---- 482227,786240,203840,169770 3 0275
---- 482227,786240,203840,169770 3 0276
-Eu 803712,716352,0,126090 2 0277
-tmu 803712,581944,59405,38730 3 0326
-tdi 803712,581944,59405,38730 3 0366
diff --git a/contrib/groff/font/devdvi/TR b/contrib/groff/font/devdvi/TR
deleted file mode 100644
index 64f457b99373..000000000000
--- a/contrib/groff/font/devdvi/TR
+++ /dev/null
@@ -1,431 +0,0 @@
-#
-# manually added kerning for `` and ''
-#
-name TR
-special
-internalname cmr10
-spacewidth 349526
-ligatures ff fi fl ffi ffl 0
-checksum 1274110073
-designsize 10485760
-kernpairs
-ff cq 81557
-ff ' 81557
-ff ? 81557
-ff ! 81557
-ff ) 81557
-ff rB 81557
-ff ] 81557
-' ' -87382
-cq ' -87382
-' cq -87382
-cq cq -87382
-slash@for@l l -291272
-slash@for@l L -334963
-cq ? 116509
-' ? 116509
-cq ! 116509
-' ! 116509
-*A t -29128
-A t -29128
-*A C -29128
-A C -29128
-*A *O -29128
-*A O -29128
-A *O -29128
-A O -29128
-*A G -29128
-A G -29128
-*A U -29128
-A U -29128
-*A Q -29128
-A Q -29128
-*A *T -87382
-*A T -87382
-A *T -87382
-A T -87382
-*A Y -87382
-A Y -87382
-*A V -116509
-A V -116509
-*A W -116509
-A W -116509
-D *X -29128
-D X -29128
-D W -29128
-D *A -29128
-D A -29128
-D V -29128
-D Y -29128
-F o -87382
-F e -87382
-F u -87382
-F r -87382
-F a -87382
-F *A -116509
-F A -116509
-F *O -29128
-F O -29128
-F C -29128
-F G -29128
-F Q -29128
-*I *I 29128
-*I I 29128
-I *I 29128
-I I 29128
-*K *O -29128
-*K O -29128
-K *O -29128
-K O -29128
-*K C -29128
-K C -29128
-*K G -29128
-K G -29128
-*K Q -29128
-K Q -29128
-L *T -87382
-L T -87382
-L Y -87382
-L V -116509
-L W -116509
-*O *X -29128
-*O X -29128
-O *X -29128
-O X -29128
-*O W -29128
-O W -29128
-*O *A -29128
-*O A -29128
-O *A -29128
-O A -29128
-*O V -29128
-O V -29128
-*O Y -29128
-O Y -29128
-*R *A -87382
-*R A -87382
-P *A -87382
-P A -87382
-*R o -29128
-P o -29128
-*R e -29128
-P e -29128
-*R a -29128
-P a -29128
-*R . -87382
-P . -87382
-*R , -87382
-P , -87382
-R t -29128
-R C -29128
-R *O -29128
-R O -29128
-R G -29128
-R U -29128
-R Q -29128
-R *T -87382
-R T -87382
-R Y -87382
-R V -116509
-R W -116509
-*T y -29128
-T y -29128
-*T e -87382
-T e -87382
-*T o -87382
-T o -87382
-*T r -87382
-T r -87382
-*T a -87382
-T a -87382
-*T *A -87382
-*T A -87382
-T *A -87382
-T A -87382
-*T u -87382
-T u -87382
-V o -87382
-V e -87382
-V u -87382
-V r -87382
-V a -87382
-V *A -116509
-V A -116509
-V *O -29128
-V O -29128
-V C -29128
-V G -29128
-V Q -29128
-W o -87382
-W e -87382
-W u -87382
-W r -87382
-W a -87382
-W *A -116509
-W A -116509
-W *O -29128
-W O -29128
-W C -29128
-W G -29128
-W Q -29128
-*X *O -29128
-*X O -29128
-X *O -29128
-X O -29128
-*X C -29128
-X C -29128
-*X G -29128
-X G -29128
-*X Q -29128
-X Q -29128
-Y e -87382
-Y o -87382
-Y r -87382
-Y a -87382
-Y *A -87382
-Y A -87382
-Y u -87382
-oq oq -87382
-oq ` -87382
-` oq -87382
-` ` -87382
-a v -29128
-a j 58254
-a y -29128
-a w -29128
-b e 29128
-b o 29128
-b x -29128
-b d 29128
-b c 29128
-b q 29128
-b v -29128
-b j 58254
-b y -29128
-b w -29128
-c h -29128
-c k -29128
-f cq 81557
-f ' 81557
-f ? 81557
-f ! 81557
-f ) 81557
-f rB 81557
-f ] 81557
-g j 29128
-h t -29128
-h u -29128
-h b -29128
-h y -29128
-h v -29128
-h w -29128
-k a -58254
-k e -29128
-k a -29128
-k o -29128
-k c -29128
-m t -29128
-m u -29128
-m b -29128
-m y -29128
-m v -29128
-m w -29128
-n t -29128
-n u -29128
-n b -29128
-n y -29128
-n v -29128
-n w -29128
-o e 29128
-o o 29128
-o x -29128
-o d 29128
-o c 29128
-o q 29128
-o v -29128
-o j 58254
-o y -29128
-o w -29128
-p e 29128
-p o 29128
-p x -29128
-p d 29128
-p c 29128
-p q 29128
-p v -29128
-p j 58254
-p y -29128
-p w -29128
-t y -29128
-t w -29128
-u w -29128
-v a -58254
-v e -29128
-v a -29128
-v o -29128
-v c -29128
-w e -29128
-w a -29128
-w o -29128
-w c -29128
-y o -29128
-y e -29128
-y a -29128
-y . -87382
-y , -87382
-charset
-*G 655362,716526,0,0,0,-145637 2 0000
-*D 873816,716526 2 0001
-*H 815562,716526,0,0,-29128,-29128 2 0002
-*L 728179,716526 2 0003
-*C 699053,716526 2 0004
-*P 786434,716526 2 0005
-*S 757307,716526 2 0006
-*U 815562,716526,0,0,-29128,-145637 2 0007
-*F 757307,716526,0,0,-29128 2 0010
-*Q 815562,716526,0,0,-29128,-72818 2 0011
-*W 757307,716526 2 0012
-ff 611672,728178,0,81557 2 0013
-fi 582544,728178 2 0014
-fl 582544,728178 2 0015
-Fi 873816,728178 2 0016
-Fl 873816,728178 2 0017
-.i 291272,451470 0 0020
-.j 320400,451470,203890 1 0021
-ga 524290,728178 2 0022
-aa 524290,728178 2 0023
-ah 524290,659002 2 0024
-ab 524290,728178 2 0025
-a- 524290,595357 2 0026
-ao 786434,728178 2 0027
-ac 466035,0,178403 1 0030
-ss 524291,728178 2 0031
-ae 757307,451470 0 0032
-oe 815562,451470 0 0033
-/o 524290,553416,101946 3 0034
-AE 946634,716526 2 0035
-OE 1063142,716526 2 0036
-/O 815562,767499,50973 3 0037
-slash@for@l 291272,451470 0 0040
-! 291272,728178 2 0041
-rq 524290,728178 2 0042
-sh 873816,728178,203888 3 0043
-# "
-Do 524290,786432,58254 3 0044
-$ "
-% 873816,786432,58254 3 0045
-& 815562,728178 2 0046
-cq 291272,728178 2 0047
-' "
-( 407781,786432,262144 3 0050
-) 407781,786432,262144 3 0051
-* 524290,786432 2 0052
-pl 815562,611670,87382 3 0053
-+ "
-, 291272,110683,203890 1 0054
-hy 349526,451470 0 0055
-- "
-. 291272,110683 0 0056
-sl 524290,786432,262144 3 0057
-/ "
-0 524290,675749 2 0060
-1 524290,675749 2 0061
-2 524290,675749 2 0062
-3 524290,675749 2 0063
-4 524290,675749 2 0064
-5 524290,675749 2 0065
-6 524290,675749 2 0066
-7 524290,675749 2 0067
-8 524290,675749 2 0070
-9 524290,675749 2 0071
-: 291272,451470 0 0072
-; 291272,451470,203890 1 0073
-r! 291272,524288,203890 3 0074
-eq 815562,384696,-139592 0 0075
-= "
-r? 495163,524288,203890 3 0076
-? 495163,728178 2 0077
-at 815562,728178 2 0100
-@ "
-*A 786434,716526 2 0101
-A "
-*B 742744,716526 2 0102
-B "
-C 757307,716526,0,0,-29128 2 0103
-D 800998,716526,0,0,0,-29128 2 0104
-*E 713616,716526 2 0105
-E "
-F 684490,716526,0,0,0,-145637 2 0106
-G 822843,716526,0,0,-29128 2 0107
-*Y 786434,716526 2 0110
-H "
-*I 378653,716526 2 0111
-I "
-J 538853,716526,0,0,0,-29128 2 0112
-*K 815562,716526 2 0113
-K "
-L 655362,716526,0,0,0,58254 2 0114
-*M 961197,716526 2 0115
-M "
-*N 786434,716526 2 0116
-N "
-*O 815562,716526,0,0,-29128,-29128 2 0117
-O "
-*R 713616,716526,0,0,0,-145637 2 0120
-P "
-Q 815562,716526,203890,0,-29128 3 0121
-R 771870,716526 2 0122
-S 582544,716526 2 0123
-*T 757307,716526,0,0,0,-145637 2 0124
-T "
-U 786434,716526,0,0,-14563 2 0125
-V 786434,716526,0,14563,43691,-218454 2 0126
-W 1077706,716526,0,14563,43691,-131074 2 0127
-*X 786434,716526 2 0130
-X "
-Y 786434,716526,0,26214,29128,-206803 2 0131
-*Z 640798,716526 2 0132
-Z "
-lB 291272,786432,262144 3 0133
-[ "
-lq 524290,728178 2 0134
-rB 291272,786432,262144 3 0135
-] "
-ha 524290,728178 2 0136
-^ "
-a^ "
-a. 291272,700301 2 0137
-oq 291272,728178 2 0140
-` "
-a 524290,451470 0 0141
-b 582544,728178 2 0142
-c 466035,451470 0 0143
-d 582544,728178 2 0144
-e 466035,451470 0 0145
-f 320400,728178,0,81557 2 0146
-g 524290,451470,203890,14563 1 0147
-h 582544,728178 2 0150
-i 291272,700301 2 0151
-j 320400,700301,203890 3 0152
-k 553418,728178 2 0153
-l 291272,728178 2 0154
-m 873816,451470 0 0155
-n 582544,451470 0 0156
-o 524290,451470 0 0157
-p 582544,451470,203890 1 0160
-q 553416,451470,203890 1 0161
-r 410694,451470 0 0162
-s 413606,451470 0 0163
-t 407781,644958 2 0164
-u 582544,451470 0 0165
-v 553418,451470,0,14563 0 0166
-w 757307,451470,0,14563 0 0167
-x 553418,451470 0 0170
-y 553418,451470,203890,14563 1 0171
-z 466035,451470 0 0172
-en 524290,451470,0,29128 0 0173
-em 1048579,451470,0,29128 0 0174
-a" 524290,728178 2 0175
-~ 524290,700301 2 0176
-a~ "
-ad 524290,700301 2 0177
diff --git a/contrib/groff/font/devdvi/TREC b/contrib/groff/font/devdvi/TREC
deleted file mode 100644
index 01a391eaf621..000000000000
--- a/contrib/groff/font/devdvi/TREC
+++ /dev/null
@@ -1,2306 +0,0 @@
-name TREC
-internalname ecrm1000
-spacewidth 349440
-ligatures ff fi fl ffi ffl 0
-checksum 204597937
-designsize 10485760
-kernpairs
-bq Bq 116480
-bq j 116480
-bq .j 116480
-bq g 58240
-bq u0067_0306 58240
-bq y 58240
-bq :y 58240
-bq 'y 58240
-bq v -87360
-bq w -58240
-bq V -116480
-bq W -87360
-bq Y -87360
-bq :Y -87360
-bq 'Y -87360
-bq O -29120
-bq u004F_030B -29120
-bq `O -29120
-bq 'O -29120
-bq ^O -29120
-bq ~O -29120
-bq :O -29120
-bq OE -29120
-bq /O -29120
-bq C -29120
-bq G -29120
-bq 'C -29120
-bq u0043_030C -29120
-bq u0047_0306 -29120
-bq ,C -29120
-bq Q -29120
-lq oq 116480
-lq ` 116480
-lq lq 116480
-rq cq 116480
-rq ' 116480
-rq rq 116480
-Bq bq 116480
-Bq , 116480
-Bq Bq 116480
-Bq j 116480
-Bq .j 116480
-Bq g 58240
-Bq u0067_0306 58240
-Bq y 58240
-Bq :y 58240
-Bq 'y 58240
-Bq v -87360
-Bq w -58240
-Bq V -116480
-Bq W -87360
-Bq Y -87360
-Bq :Y -87360
-Bq 'Y -87360
-Bq O -29120
-Bq u004F_030B -29120
-Bq `O -29120
-Bq 'O -29120
-Bq ^O -29120
-Bq ~O -29120
-Bq :O -29120
-Bq OE -29120
-Bq /O -29120
-Bq C -29120
-Bq G -29120
-Bq 'C -29120
-Bq u0043_030C -29120
-Bq u0047_0306 -29120
-Bq ,C -29120
-Bq Q -29120
-Fc . -87360
-Fc , -87360
-ff cq 81536
-ff ' 81536
-ff oq 81536
-ff ` 81536
-ff lq 81536
-ff rq 81536
-ff ? 81536
-ff u01C3 81536
-ff ! 81536
-ff ) 81536
-ff rB 81536
-ff ] 81536
-cq rq 116480
-' rq 116480
-cq ? 116480
-' ? 116480
-cq u01C3 116480
-cq ! 116480
-' u01C3 116480
-' ! 116480
-A y -87360
-A :y -87360
-A 'y -87360
-A v -116480
-A w -87360
-A c -29120
-A 'c -29120
-A u0063_030C -29120
-A ,c -29120
-A d -29120
-A u0064_030C -29120
-A u0111 -29120
-A Sd -29120
-A e -29120
-A u0065_030C -29120
-A u0065_0328 -29120
-A `e -29120
-A 'e -29120
-A ^e -29120
-A :e -29120
-A o -29120
-A u006F_030B -29120
-A `o -29120
-A 'o -29120
-A ^o -29120
-A ~o -29120
-A :o -29120
-A oe -29120
-A /o -29120
-A q -29120
-A t -29120
-A u0074_030C -29120
-A u0074_0327 -29120
-A C -29120
-A G -29120
-A 'C -29120
-A u0043_030C -29120
-A u0047_0306 -29120
-A ,C -29120
-A Q -29120
-A O -29120
-A u004F_030B -29120
-A `O -29120
-A 'O -29120
-A ^O -29120
-A ~O -29120
-A :O -29120
-A OE -29120
-A /O -29120
-A U -29120
-A u0055_030B -29120
-A u0055_030A -29120
-A `U -29120
-A 'U -29120
-A ^U -29120
-A :U -29120
-A T -87360
-A u0054_030C -87360
-A u0054_0327 -87360
-A Y -87360
-A :Y -87360
-A 'Y -87360
-A V -116480
-A W -116480
-D X -29120
-D W -29120
-D A -29120
-D u0041_0306 -29120
-D u0041_0328 -29120
-D `A -29120
-D 'A -29120
-D ^A -29120
-D ~A -29120
-D :A -29120
-D oA -29120
-D AE -29120
-D V -29120
-D Y -29120
-D :Y -29120
-D 'Y -29120
-F o -87360
-F a -87360
-F e -87360
-F y -87360
-F u -87360
-F r -87360
-F v -87360
-F s -87360
-F c -87360
-F d -87360
-F g -87360
-F m -87360
-F n -87360
-F p -87360
-F w -87360
-F z -87360
-F ae -87360
-F /o -87360
-F A -116480
-F u0041_0306 -116480
-F u0041_0328 -116480
-F `A -116480
-F 'A -116480
-F ^A -116480
-F ~A -116480
-F :A -116480
-F oA -116480
-F AE -116480
-F O -29120
-F u004F_030B -29120
-F `O -29120
-F 'O -29120
-F ^O -29120
-F ~O -29120
-F :O -29120
-F OE -29120
-F /O -29120
-F C -29120
-F G -29120
-F 'C -29120
-F u0043_030C -29120
-F u0047_0306 -29120
-F ,C -29120
-F Q -29120
-I I 29120
-K v -87360
-K w -29120
-K o -29120
-K u006F_030B -29120
-K `o -29120
-K 'o -29120
-K ^o -29120
-K ~o -29120
-K :o -29120
-K oe -29120
-K /o -29120
-K C -29120
-K G -29120
-K 'C -29120
-K u0043_030C -29120
-K u0047_0306 -29120
-K ,C -29120
-K Q -29120
-L T -87360
-L u0054_030C -87360
-L u0054_0327 -87360
-L Y -87360
-L :Y -87360
-L 'Y -87360
-L V -116480
-L W -116480
-O X -29120
-O W -29120
-O A -29120
-O u0041_0306 -29120
-O u0041_0328 -29120
-O `A -29120
-O 'A -29120
-O ^A -29120
-O ~A -29120
-O :A -29120
-O oA -29120
-O AE -29120
-O V -29120
-O Y -29120
-O :Y -29120
-O 'Y -29120
-P A -87360
-P u0041_0306 -87360
-P u0041_0328 -87360
-P `A -87360
-P 'A -87360
-P ^A -87360
-P ~A -87360
-P :A -87360
-P oA -87360
-P AE -87360
-P o -29120
-P u006F_030B -29120
-P `o -29120
-P 'o -29120
-P ^o -29120
-P ~o -29120
-P :o -29120
-P oe -29120
-P /o -29120
-P e -29120
-P u0065_030C -29120
-P u0065_0328 -29120
-P `e -29120
-P 'e -29120
-P ^e -29120
-P :e -29120
-P a -29120
-P u0061_0306 -29120
-P u0061_0328 -29120
-P `a -29120
-P 'a -29120
-P ^a -29120
-P ^a -29120
-P ~a -29120
-P :a -29120
-P oa -29120
-P ae -29120
-P . -87360
-P , -87360
-R t -29120
-R u0074_030C -29120
-R u0074_0327 -29120
-R C -29120
-R G -29120
-R 'C -29120
-R u0043_030C -29120
-R u0047_0306 -29120
-R ,C -29120
-R Q -29120
-R O -29120
-R u004F_030B -29120
-R `O -29120
-R 'O -29120
-R ^O -29120
-R ~O -29120
-R :O -29120
-R OE -29120
-R /O -29120
-R U -29120
-R u0055_030B -29120
-R u0055_030A -29120
-R `U -29120
-R 'U -29120
-R ^U -29120
-R :U -29120
-R T -87360
-R u0054_030C -87360
-R u0054_0327 -87360
-R Y -87360
-R :Y -87360
-R 'Y -87360
-R V -116480
-R W -116480
-T y -29120
-T e -87360
-T o -87360
-T r -87360
-T a -87360
-T u -87360
-T n -87360
-T .i -87360
-T c -87360
-T d -87360
-T g -87360
-T p -87360
-T s -87360
-T v -87360
-T w -87360
-T x -87360
-T z -87360
-T A -87360
-T u0041_0306 -87360
-T u0041_0328 -87360
-T `A -87360
-T 'A -87360
-T ^A -87360
-T ~A -87360
-T :A -87360
-T oA -87360
-T AE -87360
-V o -87360
-V a -87360
-V e -87360
-V y -87360
-V u -87360
-V r -87360
-V v -87360
-V s -87360
-V c -87360
-V d -87360
-V g -87360
-V m -87360
-V n -87360
-V p -87360
-V w -87360
-V z -87360
-V ae -87360
-V /o -87360
-V A -116480
-V u0041_0306 -116480
-V u0041_0328 -116480
-V `A -116480
-V 'A -116480
-V ^A -116480
-V ~A -116480
-V :A -116480
-V oA -116480
-V AE -116480
-V O -29120
-V u004F_030B -29120
-V `O -29120
-V 'O -29120
-V ^O -29120
-V ~O -29120
-V :O -29120
-V OE -29120
-V /O -29120
-V C -29120
-V G -29120
-V 'C -29120
-V u0043_030C -29120
-V u0047_0306 -29120
-V ,C -29120
-V Q -29120
-W o -87360
-W a -87360
-W e -87360
-W y -87360
-W u -87360
-W r -87360
-W v -87360
-W s -87360
-W c -87360
-W d -87360
-W g -87360
-W m -87360
-W n -87360
-W p -87360
-W w -87360
-W z -87360
-W ae -87360
-W /o -87360
-W A -116480
-W u0041_0306 -116480
-W u0041_0328 -116480
-W `A -116480
-W 'A -116480
-W ^A -116480
-W ~A -116480
-W :A -116480
-W oA -116480
-W AE -116480
-W O -29120
-W u004F_030B -29120
-W `O -29120
-W 'O -29120
-W ^O -29120
-W ~O -29120
-W :O -29120
-W OE -29120
-W /O -29120
-W C -29120
-W G -29120
-W 'C -29120
-W u0043_030C -29120
-W u0047_0306 -29120
-W ,C -29120
-W Q -29120
-X O -29120
-X u004F_030B -29120
-X `O -29120
-X 'O -29120
-X ^O -29120
-X ~O -29120
-X :O -29120
-X OE -29120
-X /O -29120
-X C -29120
-X G -29120
-X 'C -29120
-X u0043_030C -29120
-X u0047_0306 -29120
-X ,C -29120
-X Q -29120
-Y e -87360
-Y o -87360
-Y r -87360
-Y a -87360
-Y u -87360
-Y n -87360
-Y .i -87360
-Y c -87360
-Y d -87360
-Y g -87360
-Y p -87360
-Y s -87360
-Y v -87360
-Y w -87360
-Y x -87360
-Y z -87360
-Y A -87360
-Y u0041_0306 -87360
-Y u0041_0328 -87360
-Y `A -87360
-Y 'A -87360
-Y ^A -87360
-Y ~A -87360
-Y :A -87360
-Y oA -87360
-Y AE -87360
-oq lq 116480
-` lq 116480
-oq ? 116480
-` ? 116480
-oq u01C3 116480
-oq ! 116480
-` u01C3 116480
-` ! 116480
-a v -29120
-a j 58240
-a y -29120
-a :y -29120
-a 'y -29120
-a w -29120
-b e 29120
-b u0065_030C 29120
-b u0065_0328 29120
-b `e 29120
-b 'e 29120
-b ^e 29120
-b :e 29120
-b o 29120
-b u006F_030B 29120
-b `o 29120
-b 'o 29120
-b ^o 29120
-b ~o 29120
-b :o 29120
-b oe 29120
-b /o 29120
-b x -29120
-b d 29120
-b c 29120
-b 'c 29120
-b u0063_030C 29120
-b ,c 29120
-b q 29120
-b v -29120
-b j 58240
-b y -29120
-b :y -29120
-b 'y -29120
-b w -29120
-c h -29120
-c k -29120
-e V -87360
-f cq 81536
-f ' 81536
-f oq 81536
-f ` 81536
-f lq 81536
-f rq 81536
-f ? 81536
-f u01C3 81536
-f ! 81536
-f ) 81536
-f rB 81536
-f ] 81536
-g j 29120
-h W -87360
-h V -87360
-h t -29120
-h u -29120
-h u0075_030B -29120
-h u0075_030A -29120
-h `u -29120
-h 'u -29120
-h ^u -29120
-h :u -29120
-h b -29120
-h y -29120
-h v -29120
-h w -29120
-k W -87360
-k V -87360
-k a -58240
-k u0061_0306 -58240
-k u0061_0328 -58240
-k `a -58240
-k 'a -58240
-k ^a -58240
-k ^a -58240
-k ~a -58240
-k :a -58240
-k oa -58240
-k ae -58240
-k e -29120
-k u0065_030C -29120
-k u0065_0328 -29120
-k `e -29120
-k 'e -29120
-k ^e -29120
-k :e -29120
-k a -29120
-k u0061_0306 -29120
-k u0061_0328 -29120
-k `a -29120
-k 'a -29120
-k ^a -29120
-k ^a -29120
-k ~a -29120
-k :a -29120
-k oa -29120
-k ae -29120
-k o -29120
-k u006F_030B -29120
-k `o -29120
-k 'o -29120
-k ^o -29120
-k ~o -29120
-k :o -29120
-k oe -29120
-k /o -29120
-k c -29120
-k 'c -29120
-k u0063_030C -29120
-k ,c -29120
-m W -87360
-m V -87360
-m t -29120
-m u -29120
-m u0075_030B -29120
-m u0075_030A -29120
-m `u -29120
-m 'u -29120
-m ^u -29120
-m :u -29120
-m b -29120
-m y -29120
-m v -29120
-m w -29120
-n W -87360
-n V -87360
-n t -29120
-n u -29120
-n u0075_030B -29120
-n u0075_030A -29120
-n `u -29120
-n 'u -29120
-n ^u -29120
-n :u -29120
-n b -29120
-n y -29120
-n v -29120
-n w -29120
-o e 29120
-o u0065_030C 29120
-o u0065_0328 29120
-o `e 29120
-o 'e 29120
-o ^e 29120
-o :e 29120
-o o 29120
-o u006F_030B 29120
-o `o 29120
-o 'o 29120
-o ^o 29120
-o ~o 29120
-o :o 29120
-o oe 29120
-o /o 29120
-o x -29120
-o d 29120
-o c 29120
-o 'c 29120
-o u0063_030C 29120
-o ,c 29120
-o q 29120
-o v -29120
-o j 58240
-o y -29120
-o :y -29120
-o 'y -29120
-o w -29120
-p e 29120
-p u0065_030C 29120
-p u0065_0328 29120
-p `e 29120
-p 'e 29120
-p ^e 29120
-p :e 29120
-p o 29120
-p u006F_030B 29120
-p `o 29120
-p 'o 29120
-p ^o 29120
-p ~o 29120
-p :o 29120
-p oe 29120
-p /o 29120
-p x -29120
-p d 29120
-p c 29120
-p 'c 29120
-p u0063_030C 29120
-p ,c 29120
-p q 29120
-p v -29120
-p j 58240
-p y -29120
-p :y -29120
-p 'y -29120
-p w -29120
-t y -29120
-t :y -29120
-t 'y -29120
-t w -29120
-u w -29120
-v a -58240
-v u0061_0306 -58240
-v u0061_0328 -58240
-v `a -58240
-v 'a -58240
-v ^a -58240
-v ^a -58240
-v ~a -58240
-v :a -58240
-v oa -58240
-v ae -58240
-v e -29120
-v u0065_030C -29120
-v u0065_0328 -29120
-v `e -29120
-v 'e -29120
-v ^e -29120
-v :e -29120
-v a -29120
-v u0061_0306 -29120
-v u0061_0328 -29120
-v `a -29120
-v 'a -29120
-v ^a -29120
-v ^a -29120
-v ~a -29120
-v :a -29120
-v oa -29120
-v ae -29120
-v o -29120
-v u006F_030B -29120
-v `o -29120
-v 'o -29120
-v ^o -29120
-v ~o -29120
-v :o -29120
-v oe -29120
-v /o -29120
-v c -29120
-v 'c -29120
-v u0063_030C -29120
-v ,c -29120
-w e -29120
-w u0065_030C -29120
-w u0065_0328 -29120
-w `e -29120
-w 'e -29120
-w ^e -29120
-w :e -29120
-w a -29120
-w u0061_0306 -29120
-w u0061_0328 -29120
-w `a -29120
-w 'a -29120
-w ^a -29120
-w ^a -29120
-w ~a -29120
-w :a -29120
-w oa -29120
-w ae -29120
-w o -29120
-w u006F_030B -29120
-w `o -29120
-w 'o -29120
-w ^o -29120
-w ~o -29120
-w :o -29120
-w oe -29120
-w /o -29120
-w c -29120
-w 'c -29120
-w u0063_030C -29120
-w ,c -29120
-y o -29120
-y u006F_030B -29120
-y `o -29120
-y 'o -29120
-y ^o -29120
-y ~o -29120
-y :o -29120
-y oe -29120
-y /o -29120
-y e -29120
-y u0065_030C -29120
-y u0065_0328 -29120
-y `e -29120
-y 'e -29120
-y ^e -29120
-y :e -29120
-y a -29120
-y u0061_0306 -29120
-y u0061_0328 -29120
-y `a -29120
-y 'a -29120
-y ^a -29120
-y ^a -29120
-y ~a -29120
-y :a -29120
-y oa -29120
-y ae -29120
-y . -87360
-y , -87360
-u0041_0306 y -87360
-u0041_0306 :y -87360
-u0041_0306 'y -87360
-u0041_0306 v -116480
-u0041_0306 w -87360
-u0041_0306 c -29120
-u0041_0306 'c -29120
-u0041_0306 u0063_030C -29120
-u0041_0306 ,c -29120
-u0041_0306 d -29120
-u0041_0306 u0064_030C -29120
-u0041_0306 u0111 -29120
-u0041_0306 Sd -29120
-u0041_0306 e -29120
-u0041_0306 u0065_030C -29120
-u0041_0306 u0065_0328 -29120
-u0041_0306 `e -29120
-u0041_0306 'e -29120
-u0041_0306 ^e -29120
-u0041_0306 :e -29120
-u0041_0306 o -29120
-u0041_0306 u006F_030B -29120
-u0041_0306 `o -29120
-u0041_0306 'o -29120
-u0041_0306 ^o -29120
-u0041_0306 ~o -29120
-u0041_0306 :o -29120
-u0041_0306 oe -29120
-u0041_0306 /o -29120
-u0041_0306 q -29120
-u0041_0306 t -29120
-u0041_0306 u0074_030C -29120
-u0041_0306 u0074_0327 -29120
-u0041_0306 C -29120
-u0041_0306 G -29120
-u0041_0306 'C -29120
-u0041_0306 u0043_030C -29120
-u0041_0306 u0047_0306 -29120
-u0041_0306 ,C -29120
-u0041_0306 Q -29120
-u0041_0306 O -29120
-u0041_0306 u004F_030B -29120
-u0041_0306 `O -29120
-u0041_0306 'O -29120
-u0041_0306 ^O -29120
-u0041_0306 ~O -29120
-u0041_0306 :O -29120
-u0041_0306 OE -29120
-u0041_0306 /O -29120
-u0041_0306 U -29120
-u0041_0306 u0055_030B -29120
-u0041_0306 u0055_030A -29120
-u0041_0306 `U -29120
-u0041_0306 'U -29120
-u0041_0306 ^U -29120
-u0041_0306 :U -29120
-u0041_0306 T -87360
-u0041_0306 u0054_030C -87360
-u0041_0306 u0054_0327 -87360
-u0041_0306 Y -87360
-u0041_0306 :Y -87360
-u0041_0306 'Y -87360
-u0041_0306 V -116480
-u0041_0306 W -116480
-'C v -116480
-'C w -87360
-'C c -29120
-'C 'c -29120
-'C u0063_030C -29120
-'C ,c -29120
-'C d -29120
-'C u0064_030C -29120
-'C u0111 -29120
-'C Sd -29120
-'C e -29120
-'C u0065_030C -29120
-'C u0065_0328 -29120
-'C `e -29120
-'C 'e -29120
-'C ^e -29120
-'C :e -29120
-'C o -29120
-'C u006F_030B -29120
-'C `o -29120
-'C 'o -29120
-'C ^o -29120
-'C ~o -29120
-'C :o -29120
-'C oe -29120
-'C /o -29120
-'C q -29120
-'C t -29120
-'C u0074_030C -29120
-'C u0074_0327 -29120
-'C C -29120
-'C G -29120
-'C 'C -29120
-'C u0043_030C -29120
-'C u0047_0306 -29120
-'C ,C -29120
-'C Q -29120
-'C O -29120
-'C u004F_030B -29120
-'C `O -29120
-'C 'O -29120
-'C ^O -29120
-'C ~O -29120
-'C :O -29120
-'C OE -29120
-'C /O -29120
-'C U -29120
-'C u0055_030B -29120
-'C u0055_030A -29120
-'C `U -29120
-'C 'U -29120
-'C ^U -29120
-'C :U -29120
-'C T -87360
-'C u0054_030C -87360
-'C u0054_0327 -87360
-'C Y -87360
-'C :Y -87360
-'C 'Y -87360
-'C V -116480
-'C W -116480
-u0044_030C X -29120
-u0044_030C W -29120
-u0044_030C A -29120
-u0044_030C u0041_0306 -29120
-u0044_030C u0041_0328 -29120
-u0044_030C `A -29120
-u0044_030C 'A -29120
-u0044_030C ^A -29120
-u0044_030C ~A -29120
-u0044_030C :A -29120
-u0044_030C oA -29120
-u0044_030C AE -29120
-u0044_030C V -29120
-u0044_030C Y -29120
-u0044_030C :Y -29120
-u0044_030C 'Y -29120
-u004C_0301 T -87360
-u004C_0301 u0054_030C -87360
-u004C_0301 u0054_0327 -87360
-u004C_0301 Y -87360
-u004C_0301 :Y -87360
-u004C_0301 'Y -87360
-u004C_0301 V -116480
-u004C_0301 W -116480
-u004C_030C T -87360
-u004C_030C u0054_030C -87360
-u004C_030C u0054_0327 -87360
-u004C_030C Y -87360
-u004C_030C :Y -87360
-u004C_030C 'Y -87360
-u004C_030C V -116480
-u004C_030C W -116480
-/L T -87360
-/L u0054_030C -87360
-/L u0054_0327 -87360
-/L Y -87360
-/L :Y -87360
-/L 'Y -87360
-/L V -116480
-/L W -116480
-u004F_030B X -29120
-u004F_030B W -29120
-u004F_030B A -29120
-u004F_030B u0041_0306 -29120
-u004F_030B u0041_0328 -29120
-u004F_030B `A -29120
-u004F_030B 'A -29120
-u004F_030B ^A -29120
-u004F_030B ~A -29120
-u004F_030B :A -29120
-u004F_030B oA -29120
-u004F_030B AE -29120
-u004F_030B V -29120
-u004F_030B Y -29120
-u004F_030B :Y -29120
-u004F_030B 'Y -29120
-u0052_0301 t -29120
-u0052_0301 u0074_030C -29120
-u0052_0301 u0074_0327 -29120
-u0052_0301 C -29120
-u0052_0301 G -29120
-u0052_0301 'C -29120
-u0052_0301 u0043_030C -29120
-u0052_0301 u0047_0306 -29120
-u0052_0301 ,C -29120
-u0052_0301 Q -29120
-u0052_0301 O -29120
-u0052_0301 u004F_030B -29120
-u0052_0301 `O -29120
-u0052_0301 'O -29120
-u0052_0301 ^O -29120
-u0052_0301 ~O -29120
-u0052_0301 :O -29120
-u0052_0301 OE -29120
-u0052_0301 /O -29120
-u0052_0301 U -29120
-u0052_0301 u0055_030B -29120
-u0052_0301 u0055_030A -29120
-u0052_0301 `U -29120
-u0052_0301 'U -29120
-u0052_0301 ^U -29120
-u0052_0301 :U -29120
-u0052_0301 T -87360
-u0052_0301 u0054_030C -87360
-u0052_0301 u0054_0327 -87360
-u0052_0301 Y -87360
-u0052_0301 :Y -87360
-u0052_0301 'Y -87360
-u0052_0301 V -116480
-u0052_0301 W -116480
-u0054_030C y -29120
-u0054_030C e -87360
-u0054_030C o -87360
-u0054_030C r -87360
-u0054_030C a -87360
-u0054_030C u -87360
-u0054_030C n -87360
-u0054_030C .i -87360
-u0054_030C c -87360
-u0054_030C d -87360
-u0054_030C g -87360
-u0054_030C p -87360
-u0054_030C s -87360
-u0054_030C v -87360
-u0054_030C w -87360
-u0054_030C x -87360
-u0054_030C z -87360
-u0054_030C A -87360
-u0054_030C u0041_0306 -87360
-u0054_030C u0041_0328 -87360
-u0054_030C `A -87360
-u0054_030C 'A -87360
-u0054_030C ^A -87360
-u0054_030C ~A -87360
-u0054_030C :A -87360
-u0054_030C oA -87360
-u0054_030C AE -87360
-u0054_0327 y -29120
-u0054_0327 e -87360
-u0054_0327 o -87360
-u0054_0327 r -87360
-u0054_0327 a -87360
-u0054_0327 u -87360
-u0054_0327 n -87360
-u0054_0327 .i -87360
-u0054_0327 c -87360
-u0054_0327 d -87360
-u0054_0327 g -87360
-u0054_0327 p -87360
-u0054_0327 s -87360
-u0054_0327 v -87360
-u0054_0327 w -87360
-u0054_0327 x -87360
-u0054_0327 z -87360
-u0054_0327 A -87360
-u0054_0327 u0041_0306 -87360
-u0054_0327 u0041_0328 -87360
-u0054_0327 `A -87360
-u0054_0327 'A -87360
-u0054_0327 ^A -87360
-u0054_0327 ~A -87360
-u0054_0327 :A -87360
-u0054_0327 oA -87360
-u0054_0327 AE -87360
-:Y e -87360
-:Y o -87360
-:Y r -87360
-:Y a -87360
-:Y u -87360
-:Y n -87360
-:Y .i -87360
-:Y c -87360
-:Y d -87360
-:Y g -87360
-:Y p -87360
-:Y s -87360
-:Y v -87360
-:Y w -87360
-:Y x -87360
-:Y z -87360
-:Y A -87360
-:Y u0041_0306 -87360
-:Y u0041_0328 -87360
-:Y `A -87360
-:Y 'A -87360
-:Y ^A -87360
-:Y ~A -87360
-:Y :A -87360
-:Y oA -87360
-:Y AE -87360
-u0061_0306 v -29120
-u0061_0306 j 58240
-u0061_0306 y -29120
-u0061_0306 :y -29120
-u0061_0306 'y -29120
-u0061_0306 w -29120
-u0061_0328 g 29120
-u0061_0328 p 29120
-u0061_0328 w -29120
-'c h -29120
-'c k -29120
-u0063_030C h -29120
-u0063_030C k -29120
-/l cq 29120
-/l ' 29120
-u006E_0301 t -29120
-u006E_0301 u -29120
-u006E_0301 u0075_030B -29120
-u006E_0301 u0075_030A -29120
-u006E_0301 `u -29120
-u006E_0301 'u -29120
-u006E_0301 ^u -29120
-u006E_0301 :u -29120
-u006E_0301 b -29120
-u006E_0301 y -29120
-u006E_0301 v -29120
-u006E_0301 w -29120
-u006E_030C t -29120
-u006E_030C u -29120
-u006E_030C u0075_030B -29120
-u006E_030C u0075_030A -29120
-u006E_030C `u -29120
-u006E_030C 'u -29120
-u006E_030C ^u -29120
-u006E_030C :u -29120
-u006E_030C b -29120
-u006E_030C y -29120
-u006E_030C v -29120
-u006E_030C w -29120
-u016A t -29120
-u016A u -29120
-u016A u0075_030B -29120
-u016A u0075_030A -29120
-u016A `u -29120
-u016A 'u -29120
-u016A ^u -29120
-u016A :u -29120
-u016A b -29120
-u016A y -29120
-u016A v -29120
-u016A w -29120
-u006F_030B e 29120
-u006F_030B u0065_030C 29120
-u006F_030B u0065_0328 29120
-u006F_030B `e 29120
-u006F_030B 'e 29120
-u006F_030B ^e 29120
-u006F_030B :e 29120
-u006F_030B o 29120
-u006F_030B u006F_030B 29120
-u006F_030B `o 29120
-u006F_030B 'o 29120
-u006F_030B ^o 29120
-u006F_030B ~o 29120
-u006F_030B :o 29120
-u006F_030B oe 29120
-u006F_030B /o 29120
-u006F_030B x -29120
-u006F_030B d 29120
-u006F_030B c 29120
-u006F_030B 'c 29120
-u006F_030B u0063_030C 29120
-u006F_030B ,c 29120
-u006F_030B q 29120
-u006F_030B v -29120
-u006F_030B j 58240
-u006F_030B y -29120
-u006F_030B :y -29120
-u006F_030B 'y -29120
-u006F_030B w -29120
-u0074_030C y -29120
-u0074_030C :y -29120
-u0074_030C 'y -29120
-u0074_030C w -29120
-u0074_0327 y -29120
-u0074_0327 :y -29120
-u0074_0327 'y -29120
-u0074_0327 w -29120
-u0075_030B w -29120
-u0075_030A w -29120
-:y o -29120
-:y u006F_030B -29120
-:y `o -29120
-:y 'o -29120
-:y ^o -29120
-:y ~o -29120
-:y :o -29120
-:y oe -29120
-:y /o -29120
-:y e -29120
-:y u0065_030C -29120
-:y u0065_0328 -29120
-:y `e -29120
-:y 'e -29120
-:y ^e -29120
-:y :e -29120
-:y a -29120
-:y u0061_0306 -29120
-:y u0061_0328 -29120
-:y `a -29120
-:y 'a -29120
-:y ^a -29120
-:y ^a -29120
-:y ~a -29120
-:y :a -29120
-:y oa -29120
-:y ae -29120
-:y . -87360
-:y , -87360
-`A y -87360
-`A :y -87360
-`A 'y -87360
-`A v -116480
-`A w -87360
-`A c -29120
-`A 'c -29120
-`A u0063_030C -29120
-`A ,c -29120
-`A d -29120
-`A u0064_030C -29120
-`A u0111 -29120
-`A Sd -29120
-`A e -29120
-`A u0065_030C -29120
-`A u0065_0328 -29120
-`A `e -29120
-`A 'e -29120
-`A ^e -29120
-`A :e -29120
-`A o -29120
-`A u006F_030B -29120
-`A `o -29120
-`A 'o -29120
-`A ^o -29120
-`A ~o -29120
-`A :o -29120
-`A oe -29120
-`A /o -29120
-`A q -29120
-`A t -29120
-`A u0074_030C -29120
-`A u0074_0327 -29120
-`A C -29120
-`A G -29120
-`A 'C -29120
-`A u0043_030C -29120
-`A u0047_0306 -29120
-`A ,C -29120
-`A Q -29120
-`A O -29120
-`A u004F_030B -29120
-`A `O -29120
-`A 'O -29120
-`A ^O -29120
-`A ~O -29120
-`A :O -29120
-`A OE -29120
-`A /O -29120
-`A U -29120
-`A u0055_030B -29120
-`A u0055_030A -29120
-`A `U -29120
-`A 'U -29120
-`A ^U -29120
-`A :U -29120
-`A T -87360
-`A u0054_030C -87360
-`A u0054_0327 -87360
-`A Y -87360
-`A :Y -87360
-`A 'Y -87360
-`A V -116480
-`A W -116480
-'A y -87360
-'A :y -87360
-'A 'y -87360
-'A v -116480
-'A w -87360
-'A c -29120
-'A 'c -29120
-'A u0063_030C -29120
-'A ,c -29120
-'A d -29120
-'A u0064_030C -29120
-'A u0111 -29120
-'A Sd -29120
-'A e -29120
-'A u0065_030C -29120
-'A u0065_0328 -29120
-'A `e -29120
-'A 'e -29120
-'A ^e -29120
-'A :e -29120
-'A o -29120
-'A u006F_030B -29120
-'A `o -29120
-'A 'o -29120
-'A ^o -29120
-'A ~o -29120
-'A :o -29120
-'A oe -29120
-'A /o -29120
-'A q -29120
-'A t -29120
-'A u0074_030C -29120
-'A u0074_0327 -29120
-'A C -29120
-'A G -29120
-'A 'C -29120
-'A u0043_030C -29120
-'A u0047_0306 -29120
-'A ,C -29120
-'A Q -29120
-'A O -29120
-'A u004F_030B -29120
-'A `O -29120
-'A 'O -29120
-'A ^O -29120
-'A ~O -29120
-'A :O -29120
-'A OE -29120
-'A /O -29120
-'A U -29120
-'A u0055_030B -29120
-'A u0055_030A -29120
-'A `U -29120
-'A 'U -29120
-'A ^U -29120
-'A :U -29120
-'A T -87360
-'A u0054_030C -87360
-'A u0054_0327 -87360
-'A Y -87360
-'A :Y -87360
-'A 'Y -87360
-'A V -116480
-'A W -116480
-^A y -87360
-^A :y -87360
-^A 'y -87360
-^A v -116480
-^A w -87360
-^A c -29120
-^A 'c -29120
-^A u0063_030C -29120
-^A ,c -29120
-^A d -29120
-^A u0064_030C -29120
-^A u0111 -29120
-^A Sd -29120
-^A e -29120
-^A u0065_030C -29120
-^A u0065_0328 -29120
-^A `e -29120
-^A 'e -29120
-^A ^e -29120
-^A :e -29120
-^A o -29120
-^A u006F_030B -29120
-^A `o -29120
-^A 'o -29120
-^A ^o -29120
-^A ~o -29120
-^A :o -29120
-^A oe -29120
-^A /o -29120
-^A q -29120
-^A t -29120
-^A u0074_030C -29120
-^A u0074_0327 -29120
-^A C -29120
-^A G -29120
-^A 'C -29120
-^A u0043_030C -29120
-^A u0047_0306 -29120
-^A ,C -29120
-^A Q -29120
-^A O -29120
-^A u004F_030B -29120
-^A `O -29120
-^A 'O -29120
-^A ^O -29120
-^A ~O -29120
-^A :O -29120
-^A OE -29120
-^A /O -29120
-^A U -29120
-^A u0055_030B -29120
-^A u0055_030A -29120
-^A `U -29120
-^A 'U -29120
-^A ^U -29120
-^A :U -29120
-^A T -87360
-^A u0054_030C -87360
-^A u0054_0327 -87360
-^A Y -87360
-^A :Y -87360
-^A 'Y -87360
-^A V -116480
-^A W -116480
-~A y -87360
-~A :y -87360
-~A 'y -87360
-~A v -116480
-~A w -87360
-~A c -29120
-~A 'c -29120
-~A u0063_030C -29120
-~A ,c -29120
-~A d -29120
-~A u0064_030C -29120
-~A u0111 -29120
-~A Sd -29120
-~A e -29120
-~A u0065_030C -29120
-~A u0065_0328 -29120
-~A `e -29120
-~A 'e -29120
-~A ^e -29120
-~A :e -29120
-~A o -29120
-~A u006F_030B -29120
-~A `o -29120
-~A 'o -29120
-~A ^o -29120
-~A ~o -29120
-~A :o -29120
-~A oe -29120
-~A /o -29120
-~A q -29120
-~A t -29120
-~A u0074_030C -29120
-~A u0074_0327 -29120
-~A C -29120
-~A G -29120
-~A 'C -29120
-~A u0043_030C -29120
-~A u0047_0306 -29120
-~A ,C -29120
-~A Q -29120
-~A O -29120
-~A u004F_030B -29120
-~A `O -29120
-~A 'O -29120
-~A ^O -29120
-~A ~O -29120
-~A :O -29120
-~A OE -29120
-~A /O -29120
-~A U -29120
-~A u0055_030B -29120
-~A u0055_030A -29120
-~A `U -29120
-~A 'U -29120
-~A ^U -29120
-~A :U -29120
-~A T -87360
-~A u0054_030C -87360
-~A u0054_0327 -87360
-~A Y -87360
-~A :Y -87360
-~A 'Y -87360
-~A V -116480
-~A W -116480
-:A y -87360
-:A :y -87360
-:A 'y -87360
-:A v -116480
-:A w -87360
-:A c -29120
-:A 'c -29120
-:A u0063_030C -29120
-:A ,c -29120
-:A d -29120
-:A u0064_030C -29120
-:A u0111 -29120
-:A Sd -29120
-:A e -29120
-:A u0065_030C -29120
-:A u0065_0328 -29120
-:A `e -29120
-:A 'e -29120
-:A ^e -29120
-:A :e -29120
-:A o -29120
-:A u006F_030B -29120
-:A `o -29120
-:A 'o -29120
-:A ^o -29120
-:A ~o -29120
-:A :o -29120
-:A oe -29120
-:A /o -29120
-:A q -29120
-:A t -29120
-:A u0074_030C -29120
-:A u0074_0327 -29120
-:A C -29120
-:A G -29120
-:A 'C -29120
-:A u0043_030C -29120
-:A u0047_0306 -29120
-:A ,C -29120
-:A Q -29120
-:A O -29120
-:A u004F_030B -29120
-:A `O -29120
-:A 'O -29120
-:A ^O -29120
-:A ~O -29120
-:A :O -29120
-:A OE -29120
-:A /O -29120
-:A U -29120
-:A u0055_030B -29120
-:A u0055_030A -29120
-:A `U -29120
-:A 'U -29120
-:A ^U -29120
-:A :U -29120
-:A T -87360
-:A u0054_030C -87360
-:A u0054_0327 -87360
-:A Y -87360
-:A :Y -87360
-:A 'Y -87360
-:A V -116480
-:A W -116480
-oA y -87360
-oA :y -87360
-oA 'y -87360
-oA v -116480
-oA w -87360
-oA c -29120
-oA 'c -29120
-oA u0063_030C -29120
-oA ,c -29120
-oA d -29120
-oA u0064_030C -29120
-oA u0111 -29120
-oA Sd -29120
-oA e -29120
-oA u0065_030C -29120
-oA u0065_0328 -29120
-oA `e -29120
-oA 'e -29120
-oA ^e -29120
-oA :e -29120
-oA o -29120
-oA u006F_030B -29120
-oA `o -29120
-oA 'o -29120
-oA ^o -29120
-oA ~o -29120
-oA :o -29120
-oA oe -29120
-oA /o -29120
-oA q -29120
-oA t -29120
-oA u0074_030C -29120
-oA u0074_0327 -29120
-oA C -29120
-oA G -29120
-oA 'C -29120
-oA u0043_030C -29120
-oA u0047_0306 -29120
-oA ,C -29120
-oA Q -29120
-oA O -29120
-oA u004F_030B -29120
-oA `O -29120
-oA 'O -29120
-oA ^O -29120
-oA ~O -29120
-oA :O -29120
-oA OE -29120
-oA /O -29120
-oA U -29120
-oA u0055_030B -29120
-oA u0055_030A -29120
-oA `U -29120
-oA 'U -29120
-oA ^U -29120
-oA :U -29120
-oA T -87360
-oA u0054_030C -87360
-oA u0054_0327 -87360
-oA Y -87360
-oA :Y -87360
-oA 'Y -87360
-oA V -116480
-oA W -116480
-u0189 X -29120
-u0110 X -29120
--D X -29120
-u0189 W -29120
-u0110 W -29120
--D W -29120
-u0189 A -29120
-u0110 A -29120
--D A -29120
-u0189 u0041_0306 -29120
-u0110 u0041_0306 -29120
--D u0041_0306 -29120
-u0189 u0041_0328 -29120
-u0110 u0041_0328 -29120
--D u0041_0328 -29120
-u0189 `A -29120
-u0110 `A -29120
--D `A -29120
-u0189 'A -29120
-u0110 'A -29120
--D 'A -29120
-u0189 ^A -29120
-u0110 ^A -29120
--D ^A -29120
-u0189 ~A -29120
-u0110 ~A -29120
--D ~A -29120
-u0189 :A -29120
-u0110 :A -29120
--D :A -29120
-u0189 oA -29120
-u0110 oA -29120
--D oA -29120
-u0189 AE -29120
-u0110 AE -29120
--D AE -29120
-u0189 V -29120
-u0110 V -29120
--D V -29120
-u0189 Y -29120
-u0110 Y -29120
--D Y -29120
-u0189 :Y -29120
-u0110 :Y -29120
--D :Y -29120
-u0189 'Y -29120
-u0110 'Y -29120
--D 'Y -29120
-`O X -29120
-`O W -29120
-`O A -29120
-`O u0041_0306 -29120
-`O u0041_0328 -29120
-`O `A -29120
-`O 'A -29120
-`O ^A -29120
-`O ~A -29120
-`O :A -29120
-`O oA -29120
-`O AE -29120
-`O V -29120
-`O Y -29120
-`O :Y -29120
-`O 'Y -29120
-'O X -29120
-'O W -29120
-'O A -29120
-'O u0041_0306 -29120
-'O u0041_0328 -29120
-'O `A -29120
-'O 'A -29120
-'O ^A -29120
-'O ~A -29120
-'O :A -29120
-'O oA -29120
-'O AE -29120
-'O V -29120
-'O Y -29120
-'O :Y -29120
-'O 'Y -29120
-^O X -29120
-^O W -29120
-^O A -29120
-^O u0041_0306 -29120
-^O u0041_0328 -29120
-^O `A -29120
-^O 'A -29120
-^O ^A -29120
-^O ~A -29120
-^O :A -29120
-^O oA -29120
-^O AE -29120
-^O V -29120
-^O Y -29120
-^O :Y -29120
-^O 'Y -29120
-~O X -29120
-~O W -29120
-~O A -29120
-~O u0041_0306 -29120
-~O u0041_0328 -29120
-~O `A -29120
-~O 'A -29120
-~O ^A -29120
-~O ~A -29120
-~O :A -29120
-~O oA -29120
-~O AE -29120
-~O V -29120
-~O Y -29120
-~O :Y -29120
-~O 'Y -29120
-:O X -29120
-:O W -29120
-:O A -29120
-:O u0041_0306 -29120
-:O u0041_0328 -29120
-:O `A -29120
-:O 'A -29120
-:O ^A -29120
-:O ~A -29120
-:O :A -29120
-:O oA -29120
-:O AE -29120
-:O V -29120
-:O Y -29120
-:O :Y -29120
-:O 'Y -29120
-/O X -29120
-/O W -29120
-/O A -29120
-/O u0041_0306 -29120
-/O u0041_0328 -29120
-/O `A -29120
-/O 'A -29120
-/O ^A -29120
-/O ~A -29120
-/O :A -29120
-/O oA -29120
-/O AE -29120
-/O V -29120
-/O Y -29120
-/O :Y -29120
-/O 'Y -29120
-'Y e -87360
-'Y o -87360
-'Y r -87360
-'Y a -87360
-'Y u -87360
-'Y n -87360
-'Y .i -87360
-'Y c -87360
-'Y d -87360
-'Y g -87360
-'Y p -87360
-'Y s -87360
-'Y v -87360
-'Y w -87360
-'Y x -87360
-'Y z -87360
-'Y A -87360
-'Y u0041_0306 -87360
-'Y u0041_0328 -87360
-'Y `A -87360
-'Y 'A -87360
-'Y ^A -87360
-'Y ~A -87360
-'Y :A -87360
-'Y oA -87360
-'Y AE -87360
-`a v -29120
-`a j 58240
-`a y -29120
-`a :y -29120
-`a 'y -29120
-`a w -29120
-'a v -29120
-'a j 58240
-'a y -29120
-'a :y -29120
-'a 'y -29120
-'a w -29120
-^a v -29120
-^a j 58240
-^a y -29120
-^a :y -29120
-^a 'y -29120
-^a w -29120
-~a v -29120
-~a j 58240
-~a y -29120
-~a :y -29120
-~a 'y -29120
-~a w -29120
-:a v -29120
-:a j 58240
-:a y -29120
-:a :y -29120
-:a 'y -29120
-:a w -29120
-oa v -29120
-oa j 58240
-oa y -29120
-oa :y -29120
-oa 'y -29120
-oa w -29120
-,c h -29120
-,c k -29120
-~n t -29120
-~n u -29120
-~n u0075_030B -29120
-~n u0075_030A -29120
-~n `u -29120
-~n 'u -29120
-~n ^u -29120
-~n :u -29120
-~n b -29120
-~n y -29120
-~n v -29120
-~n w -29120
-`o e 29120
-`o u0065_030C 29120
-`o u0065_0328 29120
-`o `e 29120
-`o 'e 29120
-`o ^e 29120
-`o :e 29120
-`o o 29120
-`o u006F_030B 29120
-`o `o 29120
-`o 'o 29120
-`o ^o 29120
-`o ~o 29120
-`o :o 29120
-`o oe 29120
-`o /o 29120
-`o x -29120
-`o d 29120
-`o c 29120
-`o 'c 29120
-`o u0063_030C 29120
-`o ,c 29120
-`o q 29120
-`o v -29120
-`o j 58240
-`o y -29120
-`o :y -29120
-`o 'y -29120
-`o w -29120
-'o e 29120
-'o u0065_030C 29120
-'o u0065_0328 29120
-'o `e 29120
-'o 'e 29120
-'o ^e 29120
-'o :e 29120
-'o o 29120
-'o u006F_030B 29120
-'o `o 29120
-'o 'o 29120
-'o ^o 29120
-'o ~o 29120
-'o :o 29120
-'o oe 29120
-'o /o 29120
-'o x -29120
-'o d 29120
-'o c 29120
-'o 'c 29120
-'o u0063_030C 29120
-'o ,c 29120
-'o q 29120
-'o v -29120
-'o j 58240
-'o y -29120
-'o :y -29120
-'o 'y -29120
-'o w -29120
-^o e 29120
-^o u0065_030C 29120
-^o u0065_0328 29120
-^o `e 29120
-^o 'e 29120
-^o ^e 29120
-^o :e 29120
-^o o 29120
-^o u006F_030B 29120
-^o `o 29120
-^o 'o 29120
-^o ^o 29120
-^o ~o 29120
-^o :o 29120
-^o oe 29120
-^o /o 29120
-^o x -29120
-^o d 29120
-^o c 29120
-^o 'c 29120
-^o u0063_030C 29120
-^o ,c 29120
-^o q 29120
-^o v -29120
-^o j 58240
-^o y -29120
-^o :y -29120
-^o 'y -29120
-^o w -29120
-~o e 29120
-~o u0065_030C 29120
-~o u0065_0328 29120
-~o `e 29120
-~o 'e 29120
-~o ^e 29120
-~o :e 29120
-~o o 29120
-~o u006F_030B 29120
-~o `o 29120
-~o 'o 29120
-~o ^o 29120
-~o ~o 29120
-~o :o 29120
-~o oe 29120
-~o /o 29120
-~o x -29120
-~o d 29120
-~o c 29120
-~o 'c 29120
-~o u0063_030C 29120
-~o ,c 29120
-~o q 29120
-~o v -29120
-~o j 58240
-~o y -29120
-~o :y -29120
-~o 'y -29120
-~o w -29120
-:o e 29120
-:o u0065_030C 29120
-:o u0065_0328 29120
-:o `e 29120
-:o 'e 29120
-:o ^e 29120
-:o :e 29120
-:o o 29120
-:o u006F_030B 29120
-:o `o 29120
-:o 'o 29120
-:o ^o 29120
-:o ~o 29120
-:o :o 29120
-:o oe 29120
-:o /o 29120
-:o x -29120
-:o d 29120
-:o c 29120
-:o 'c 29120
-:o u0063_030C 29120
-:o ,c 29120
-:o q 29120
-:o v -29120
-:o j 58240
-:o y -29120
-:o :y -29120
-:o 'y -29120
-:o w -29120
-/o e 29120
-/o u0065_030C 29120
-/o u0065_0328 29120
-/o `e 29120
-/o 'e 29120
-/o ^e 29120
-/o :e 29120
-/o o 29120
-/o u006F_030B 29120
-/o `o 29120
-/o 'o 29120
-/o ^o 29120
-/o ~o 29120
-/o :o 29120
-/o oe 29120
-/o /o 29120
-/o x -29120
-/o d 29120
-/o c 29120
-/o 'c 29120
-/o u0063_030C 29120
-/o ,c 29120
-/o q 29120
-/o v -29120
-/o j 58240
-/o y -29120
-/o :y -29120
-/o 'y -29120
-/o w -29120
-`u w -29120
-'u w -29120
-^u w -29120
-:u w -29120
-'y o -29120
-'y u006F_030B -29120
-'y `o -29120
-'y 'o -29120
-'y ^o -29120
-'y ~o -29120
-'y :o -29120
-'y oe -29120
-'y /o -29120
-'y e -29120
-'y u0065_030C -29120
-'y u0065_0328 -29120
-'y `e -29120
-'y 'e -29120
-'y ^e -29120
-'y :e -29120
-'y a -29120
-'y u0061_0306 -29120
-'y u0061_0328 -29120
-'y `a -29120
-'y 'a -29120
-'y ^a -29120
-'y ^a -29120
-'y ~a -29120
-'y :a -29120
-'y oa -29120
-'y ae -29120
-'y . -87360
-'y , -87360
-charset
-ga 524160,672672 2 0000
-aa 524160,672672 2 0001
-a^ 524160,672672 2 0002
-a~ 524160,672672 2 0003
-ad 524160,695554 2 0004
-a" 524160,672672,0,10267 2 0005
-ao 786240,672672 2 0006
-ah 524160,672672 2 0007
-ab 524160,672672 2 0010
-a- 524160,695554 2 0011
-a. 291200,695554 2 0012
-ac 465920,0,178360 1 0013
-ho 291200,0,203840 1 0014
-bq 291200,110656,203840 1 0015
-fo 465920,506688 2 0016
-fc 465920,506688 2 0017
-lq 349440,722176 2 0020
-rq 349440,722176 2 0021
-Bq 349440,110656,203840 1 0022
-Fo 582400,506688 2 0023
-Fc 582400,506688 2 0024
-en 524160,451360,0,29120 0 0025
-em 1048320,451360,0,29120 0 0026
---- 0,451360 0 0027
---- 407680,786240,58240 3 0030
-.i 291200,451360 0 0031
-.j 320320,451360,203840 1 0032
-ff 611520,722176,0,81536 2 0033
-fi 582400,722176 2 0034
-fl 582400,722176 2 0035
-Fi 873600,722176 2 0036
-Fl 873600,722176 2 0037
-u2423 524160,451360,101920 1 0040
-u01C3 291200,722176 2 0041
-! "
-dq 524160,722176 2 0042
-" "
-sh 873600,722176,203840 3 0043
-# "
-Do 524160,786240,58240 3 0044
-$ "
-% 873600,786240,58240 3 0045
-& 815360,722176 2 0046
-cq 291200,722176 2 0047
-' "
-( 407680,786240,262080 3 0050
-) 407680,786240,262080 3 0051
-* 524160,786240 2 0052
-+ 815360,611520,87360 3 0053
-, 291200,110656,203840 1 0054
-- 349440,451360 0 0055
-. 291200,110656 0 0056
-sl 524160,786240,262080 3 0057
-/ "
-0 524160,672672 2 0060
-1 524160,672672 2 0061
-2 524160,672672 2 0062
-3 524160,672672 2 0063
-4 524160,672672 2 0064
-5 524160,672672 2 0065
-6 524160,672672 2 0066
-7 524160,672672 2 0067
-8 524160,672672 2 0070
-9 524160,672672 2 0071
-: 291200,451360 0 0072
-; 291200,451360,203840 1 0073
-< 815360,559216,40992 3 0074
-= 815360,384606,-139554 0 0075
-> 815360,559216,40992 3 0076
-? 495040,722176 2 0077
-at 815360,722176 2 0100
-@ "
-A 786240,722176 2 0101
-B 742560,722176 2 0102
-C 757120,722176,0,0,-29120 2 0103
-D 800800,722176,0,0,0,-29120 2 0104
-E 713440,722176 2 0105
-F 684320,722176,0,0,0,-145600 2 0106
-G 822640,722176,0,0,-29120 2 0107
-H 786240,722176 2 0110
-I 378560,722176 2 0111
-J 538720,722176,0,0,0,-29120 2 0112
-K 815360,722176 2 0113
-L 655200,722176,0,0,0,58240 2 0114
-M 960960,722176 2 0115
-N 786240,722176 2 0116
-O 815360,722176,0,0,-29120,-29120 2 0117
-P 713440,722176,0,0,0,-145600 2 0120
-Q 815360,722176,203840,0,-29120 3 0121
-R 771680,722176 2 0122
-S 582400,722176 2 0123
-T 757120,722176,0,0,0,-145600 2 0124
-U 786240,722176,0,0,-14560 2 0125
-V 786240,722176,0,14560,43680,-218400 2 0126
-W 1077440,722176,0,14560,43680,-131040 2 0127
-X 786240,722176 2 0130
-Y 786240,722176,0,26208,29120,-206752 2 0131
-Z 640640,722176 2 0132
-lB 291200,786240,262080 3 0133
-[ "
-rs 524160,786240,262080 3 0134
-\ "
-rB 291200,786240,262080 3 0135
-] "
-ha 640640,722176 2 0136
-^ "
-_ 815360,0,244102 1 0137
-oq 291200,722176 2 0140
-` "
-a 524160,451360 0 0141
-b 582400,722176 2 0142
-c 465920,451360 0 0143
-d 582400,722176 2 0144
-e 465920,451360 0 0145
-f 320320,722176,0,81536 2 0146
-g 524160,451360,203840,14560 1 0147
-h 582400,722176 2 0150
-i 291200,695554 2 0151
-j 320320,695554,203840 3 0152
-k 553280,722176 2 0153
-l 291200,722176 2 0154
-m 873600,451360 0 0155
-n 582400,451360 0 0156
-o 524160,451360 0 0157
-p 582400,451360,203840 1 0160
-q 553280,451360,203840 1 0161
-r 410592,451360 0 0162
-s 413504,451360 0 0163
-t 407680,644802 2 0164
-u 582400,451360 0 0165
-v 553280,451360,0,14560 0 0166
-w 757120,451360,0,14560 0 0167
-x 553280,451360 0 0170
-y 553280,451360,203840,14560 1 0171
-z 465920,451360 0 0172
-lC 524160,786240,262080 3 0173
-{ "
-u01C0 291200,786240,262080 3 0174
-ba "
-| "
-rC 524160,786240,262080 3 0175
-} "
-~ 640640,695554 2 0176
-hy 174720,451360 0 0177
-u0041_0306 786240,934752 2 0200
-u0041_0328 786240,722176,203840 3 0201
-'C 757120,897976 2 0202
-u0043_030C 757120,934752,0,0,-29120 2 0203
-u0044_030C 800800,934752,0,0,0,-29120 2 0204
-u0045_030C 713440,934752 2 0205
-u0045_0328 713440,722176,203840 3 0206
-u0047_0306 822640,934752,0,0,-29120 2 0207
-u004C_0301 655200,897976,0,0,0,58240 2 0210
-u004C_030C 655200,934752,0,0,0,58240 2 0211
-/L 655200,722176 2 0212
-u004E_0301 786240,897976 2 0213
-u004E_030C 786240,934752 2 0214
-u014A 829920,722176,0,0,0,-29120 2 0215
-u004F_030B 815360,897976,0,0,-29120,-29120 2 0216
-u0052_0301 771680,897976 2 0217
-u0052_030C 771680,934752 2 0220
-u0053_0301 582400,897976 2 0221
-vS 582400,934752 2 0222
-u0053_0327 582400,722176,178360 3 0223
-u0054_030C 757120,934752,0,0,0,-145600 2 0224
-u0054_0327 757120,722176,178360,0,0,-145600 3 0225
-u0055_030B 786240,897976,0,0,-14560 2 0226
-u0055_030A 786240,934752,0,0,-14560 2 0227
-:Y 786240,934752,0,26208,29120,-206752 2 0230
-u005A_0301 640640,897976 2 0231
-vZ 640640,934752 2 0232
-u005A_0307 640640,897976 2 0233
-IJ 902720,722176,0,0,0,-29120 2 0234
-u0049_0307 378560,897976 2 0235
-u0111 582400,722176 2 0236
-sc 465920,722176,203840 3 0237
-u0061_0306 524160,672672 2 0240
-u0061_0328 524160,451360,203840 1 0241
-'c 465920,672672 2 0242
-u0063_030C 465920,672672 2 0243
-u0064_030C 707616,722176 2 0244
-u0065_030C 465920,672672 2 0245
-u0065_0328 465920,451360,203840 1 0246
-u0067_0306 524160,672672,203840,14560 3 0247
-u006C_0301 291200,897976,0,52149 2 0250
-u006C_030C 422240,722176 2 0251
-/l 352352,722176 2 0252
-u006E_0301 582400,672672 2 0253
-u006E_030C 582400,672672 2 0254
-u016A 582400,451360,203840 1 0255
-u006F_030B 524160,672672,0,10267 2 0256
-u0072_0301 410592,672672 2 0257
-u0072_030C 410592,672672 2 0260
-u0073_0301 413504,672672 2 0261
-vs 413504,672672 2 0262
-u0073_0327 413504,451360,178360 1 0263
-u0074_030C 407680,722176 2 0264
-u0074_0327 407680,644802,178360 3 0265
-u0075_030B 582400,672672 2 0266
-u0075_030A 582400,672672 2 0267
-:y 553280,695554,203840,14560 3 0270
-u007A_0301 465920,672672 2 0271
-vz 465920,672672 2 0272
-u007A_0307 465920,695554 2 0273
-ij 611520,695554,203840 3 0274
-r! 291200,524160,203840 3 0275
-r? 495040,524160,203840 3 0276
-Po 669760,722176 2 0277
-`A 786240,897976 2 0300
-'A 786240,897976 2 0301
-^A 786240,934752 2 0302
-~A 786240,934752 2 0303
-:A 786240,934752 2 0304
-oA 786240,897976 2 0305
-AE 946400,722176 2 0306
-,C 757120,722176,178360,0,-29120 3 0307
-`E 713440,897976 2 0310
-'E 713440,897976 2 0311
-^E 713440,934752 2 0312
-:E 713440,934752 2 0313
-`I 378560,897976 2 0314
-'I 378560,897976 2 0315
-^I 378560,934752 2 0316
-:I 378560,934752 2 0317
-u0189 800800,722176,0,0,0,-29120 2 0320
-u0110 "
--D "
-~N 786240,934752 2 0321
-`O 815360,897976,0,0,-29120,-29120 2 0322
-'O 815360,897976 2 0323
-^O 815360,934752,0,0,-29120,-29120 2 0324
-~O 815360,934752,0,0,-29120,-29120 2 0325
-:O 815360,934752,0,0,-29120,-29120 2 0326
-OE 1062880,722176 2 0327
-/O 815360,767312,50960 3 0330
-`U 786240,897976,0,0,-14560 2 0331
-'U 786240,897976 2 0332
-^U 786240,934752,0,0,-14560 2 0333
-:U 786240,934752,0,0,-14560 2 0334
-'Y 786240,897976,0,26208,29120,-206752 2 0335
-TP 655200,722176 2 0336
---- 1164800,722176 2 0337
-`a 524160,672672 2 0340
-'a 524160,672672 2 0341
-^a 524160,672672 2 0342
-~a 524160,672672 2 0343
-:a 524160,695554 2 0344
-oa 524160,672672 2 0345
-ae 757120,451360 0 0346
-,c 465920,451360,178360 1 0347
-`e 465920,672672 2 0350
-'e 465920,672672 2 0351
-^e 465920,672672 2 0352
-:e 465920,695554 2 0353
-`i 291200,672672 2 0354
-'i 291200,672672,0,17094 2 0355
-^i 291200,672672 2 0356
-:i 349440,695554 2 0357
-Sd 524160,722176 2 0360
-~n 582400,672672 2 0361
-`o 524160,672672 2 0362
-'o 524160,672672 2 0363
-^o 524160,672672 2 0364
-~o 524160,672672 2 0365
-:o 524160,695554 2 0366
-oe 815360,451360 0 0367
-/o 524160,559216,101920 3 0370
-`u 582400,672672 2 0371
-'u 582400,672672 2 0372
-^u 582400,672672 2 0373
-:u 582400,695554 2 0374
-'y 553280,672672,203840,14560 3 0375
-Tp 582400,722176,203840 3 0376
-ss 524160,722176 2 0377
diff --git a/contrib/groff/font/devdvi/TRTC b/contrib/groff/font/devdvi/TRTC
deleted file mode 100644
index 6042e8e0b224..000000000000
--- a/contrib/groff/font/devdvi/TRTC
+++ /dev/null
@@ -1,137 +0,0 @@
-name TRTC
-special
-internalname tcrm1000
-spacewidth 349440
-checksum -1137054567
-designsize 10485760
-charset
---- 524160,635442 2 0000
---- 524160,635442 2 0001
---- 524160,672672 2 0002
---- 524160,672672 2 0003
---- 524160,672672 2 0004
---- 524160,635442,0,15970 2 0005
---- 786240,672672 2 0006
---- 524160,672672 2 0007
---- 524160,672672 2 0010
---- 524160,672672 2 0011
---- 291200,635442 2 0012
---- 465920,0,178360 1 0013
---- 291200,0,203840 1 0014
---- 407680,110656,203840 1 0015
---- 524160,110656,203840 1 0022
---- 698880,458640,0,29120 2 0025
---- 786240,458640,0,29120 2 0026
---- 0,722176 2 0027
-<- 1048320,384606,-139554 0 0030
--> 1048320,384606,-139554 0 0031
---- 291200,722176,0,275184 2 0032
---- 349440,992992,0,304304 2 0033
---- 524160,722176,0,275184 2 0034
---- 524160,722176,0,304304 2 0035
---- 0,722176 2 0037
-u2422 582400,722176 2 0040
-Do 524160,786240,58240 3 0044
-$ "
-aq 291200,722176 2 0047
---- 524160,487760,-36400 2 0052
-, 291200,110656,203840 1 0054
---- 349440,384606,-139554 0 0055
-. 291200,110656 0 0056
-f/ 524160,786240,262080 3 0057
-0 524160,458640 2 0060
-1 524160,458640 2 0061
-2 524160,458640 2 0062
-3 524160,458640,203840 3 0063
-4 524160,458640,203840 3 0064
-5 524160,458640,203840 3 0065
-6 524160,672672 2 0066
-7 524160,458640,203840 3 0067
-8 524160,672672 2 0070
-9 524160,458640,203840 3 0071
-la 407680,786240,262080 3 0074
-\- 815360,611520,87360 3 0075
-ra 407680,786240,262080 3 0076
-u2127 757120,722176 2 0115
-ci 1164800,786240,262080 3 0117
-u03A9 757120,722176 2 0127
-u301A 422240,786240,262080 3 0133
-u301B 422240,786240,262080 3 0135
-ua 524160,722176,203840 3 0136
-da 524160,722176,203840 3 0137
---- 524160,722176 2 0140
---- 524160,487760,-36400 2 0142
---- 524160,487760,-36400 2 0143
---- 524160,635442,27666 3 0144
---- 1048320,722176 2 0154
---- 524160,487760,-36400 2 0155
-u266A 640640,722176 2 0156
-ti 640640,128960 0 0176
-~ "
---- 174720,384606,-139554 0 0177
---- 640640,722176 2 0200
---- 640640,722176 2 0201
---- 524160,722176 2 0202
---- 524160,722176 2 0203
-dg 465920,722176,203840 3 0204
-dd 465920,722176,203840 3 0205
-u2016 524160,786240,262080 3 0206
-%0 1223040,786240,58240 3 0207
-bu 524160,458640,-58240 2 0210
-u2103 990080,722176,0,0,-29120 2 0211
---- 640640,786240,58240 3 0212
---- 524160,548426,101920 3 0213
-Fn 320320,722176,0,81536 2 0214
-u20A1 757120,786240,58240,0,-29120 3 0215
-u20A9 1077440,722176,0,14560,43680,-131040 2 0216
-u20A6 815360,722176 2 0217
---- 822640,786240,58240,0,-29120 3 0220
-u20B1 728000,722176,0,0,0,-145600 2 0221
-u20A4 669760,722176 2 0222
-u211E 771680,722176 2 0223
-u203D 495040,722176 2 0224
---- 495040,524160,203840 3 0225
-u20AB 582400,786240 2 0226
-tm 698880,786240,0,550366 2 0227
-u2031 1586070,786240,58240 3 0230
---- 495040,722176,203840 3 0231
-u0E3F 742560,786240,58240 3 0232
-u2116 960960,722176 2 0233
-u2052 524160,786240 2 0234
-u212E 709072,722176 2 0235
-u25E6 524160,458640,-58240 2 0236
-u2120 698880,786240,0,550366 2 0237
-u2045 378560,786240,262080 3 0240
-u2046 378560,786240,262080 3 0241
-ct 524160,548426,101920 3 0242
-Po 669760,722176 2 0243
-Cs 772248,580323 2 0244
-Ye 786240,722176,0,26208 2 0245
-bb 174720,786240,262080 3 0246
-sc 465920,722176,203840 3 0247
---- 524160,700130 2 0250
-co 1164800,786240,262080 3 0251
-Of 465920,786240 2 0252
---- 1164800,786240,262080 3 0253
-tno 698880,458640 2 0254
-u2117 1164800,786240,262080 3 0255
-rg 1164800,786240,262080 3 0256
---- 815360,722176 2 0257
-de 349440,722176 2 0260
-t+- 815360,611520,87360 3 0261
-S2 465920,786240 2 0262
-S3 465920,786240 2 0263
---- 524160,722176 2 0264
-mc 582400,458640,203840 3 0265
-ps 640640,722176,203840 3 0266
-pc 291200,458640 2 0267
-u203B 660051,548426 2 0270
-S1 465920,786240 2 0271
-Om 465920,786240 2 0272
---- 495040,786240,220138 3 0273
---- 465920,786240,203840 3 0274
---- 465920,786240,203840 3 0275
---- 465920,786240,203840 3 0276
-Eu 815360,722176 2 0277
-tmu 815360,611520,87360 3 0326
-tdi 815360,611520,87360 3 0366
diff --git a/contrib/groff/font/devdvi/generate/CompileFonts b/contrib/groff/font/devdvi/generate/CompileFonts
deleted file mode 100755
index 0d07529a07e1..000000000000
--- a/contrib/groff/font/devdvi/generate/CompileFonts
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /bin/sh
-# Compile fonts in the sizes needed by groff.
-sizes="5 6 7 8 9 10 10.95 12 14 14.40 16 17.28 18 20 20.74 22 24 24.88 28 36"
-fonts="cmr10 cmti10 cmbx10 cmbxti10 cmtt10 cmex10 cmmi10 cmsy10 cmss10 cmssbx10 cmssi10"
-mode=cx
-dpi=300
-
-for f in $fonts; do
- for s in $sizes; do
- virmf "&cm \\mode=$mode; mag=$s/10; batchmode; input $f" >/dev/null
- mag=`expr $s \* $dpi / 10`
- gftopk $f.${mag}gf >/dev/null
- rm $f.${mag}gf
- done
-done
diff --git a/contrib/groff/font/devdvi/generate/Makefile b/contrib/groff/font/devdvi/generate/Makefile
deleted file mode 100644
index ffbc68c77c8a..000000000000
--- a/contrib/groff/font/devdvi/generate/Makefile
+++ /dev/null
@@ -1,206 +0,0 @@
-# Copyright (C) 1989-2002 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-# This is set up so you can do:
-# make -f generate/Makefile
-# in the parent directory of the directory containing this file.
-
-# Note that the following font files have manually added kerning values for
-# `` and '': B, BI, I, R.
-
-srcdir=generate
-tfmdir=/usr/local/lib/groff-tfm
-gfdir=/usr/local/lib/groff-gf
-
-TFMTODIT=tfmtodit
-FONTS=TR TI TB TBI CW CWI HR HI HB HBI \
- TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
- TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
- MI S SC EX SA SB
-SPECIALFLAG=-s
-
-all: $(FONTS)
-
-
-#### CM fonts ####
-
-# TR is special because it contains \(pl \(eq
-
-TR: $(srcdir)/texr.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmr10.300gf \
- $(tfmdir)/cmr10.tfm $(srcdir)/texr.map $@
-
-# TI is special because it contains \(Po
-
-TI: $(srcdir)/texi.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmti10.300gf \
- $(tfmdir)/cmti10.tfm $(srcdir)/texi.map $@
-
-TB: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmbx10.300gf \
- $(tfmdir)/cmbx10.tfm $(srcdir)/texb.map $@
-
-TBI: $(srcdir)/texi.map
- $(TFMTODIT) -g $(gfdir)/cmbxti10.300gf \
- $(tfmdir)/cmbxti10.tfm $(srcdir)/texi.map $@
-
-# CW is special because it contains "
-
-CW: $(srcdir)/textt.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/cmtt10.tfm $(srcdir)/textt.map $@
-
-CWI: $(srcdir)/textt.map
- $(TFMTODIT) \
- $(tfmdir)/cmitt10.tfm $(srcdir)/textt.map $@
-
-MI: $(srcdir)/texmi.map
- $(TFMTODIT) $(SPECIALFLAG) -k 0177 \
- $(tfmdir)/cmmi10.tfm $(srcdir)/texmi.map $@
-
-S: $(srcdir)/texsy.map
- $(TFMTODIT) $(SPECIALFLAG) -k 060 \
- $(tfmdir)/cmsy10.tfm $(srcdir)/texsy.map $@
-
-SC: $(srcdir)/textex.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/cmtex10.tfm $(srcdir)/textex.map $@
-
-EX: $(srcdir)/texex.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/cmex10.tfm $(srcdir)/texex.map $@
-
-HR: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmss10.300gf \
- $(tfmdir)/cmss10.tfm $(srcdir)/texb.map $@
-
-HB: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmssbx10.300gf \
- $(tfmdir)/cmssbx10.tfm $(srcdir)/texb.map $@
-
-HI: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmssi10.300gf \
- $(tfmdir)/cmssi10.tfm $(srcdir)/texb.map $@
-
-HBI: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmssbxo10.300gf \
- $(tfmdir)/cmssbxo10.tfm $(srcdir)/texb.map $@
-
-SA: $(srcdir)/msam.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/msam10.tfm $(srcdir)/msam.map $@
-
-SB: $(srcdir)/msbm.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/msbm10.tfm $(srcdir)/msbm.map $@
-
-
-#### EC fonts ####
-
-TREC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecrm1000.300gf \
- $(tfmdir)/ecrm1000.tfm $(srcdir)/ec.map $@
-
-TIEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecti1000.300gf \
- $(tfmdir)/ecti1000.tfm $(srcdir)/ec.map $@
-
-TBEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecbx1000.300gf \
- $(tfmdir)/ecbx1000.tfm $(srcdir)/ec.map $@
-
-TBIEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecbi1000.300gf \
- $(tfmdir)/ecbi1000.tfm $(srcdir)/ec.map $@
-
-CWEC: $(srcdir)/ec.map
- $(TFMTODIT) $(tfmdir)/ectt1000.tfm $(srcdir)/ec.map $@
-
-CWIEC: $(srcdir)/ec.map
- $(TFMTODIT) $(tfmdir)/ecit1000.tfm $(srcdir)/ec.map $@
-
-HREC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecss1000.300gf \
- $(tfmdir)/ecss1000.tfm $(srcdir)/ec.map $@
-
-HBEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecsx1000.300gf \
- $(tfmdir)/ecsx1000.tfm $(srcdir)/ec.map $@
-
-HIEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecsi1000.300gf \
- $(tfmdir)/ecsi1000.tfm $(srcdir)/ec.map $@
-
-HBIEC: $(srcdir)/ec.map
- $(TFMTODIT) -g $(gfdir)/ecso1000.300gf \
- $(tfmdir)/ecso1000.tfm $(srcdir)/ec.map $@
-
-
-#### TC fonts ####
-
-TRTC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcrm1000.300gf \
- $(tfmdir)/tcrm1000.tfm $(srcdir)/tc.map $@
-
-TITC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcti1000.300gf \
- $(tfmdir)/tcti1000.tfm $(srcdir)/tc.map $@
-
-TBTC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcbx1000.300gf \
- $(tfmdir)/tcbx1000.tfm $(srcdir)/tc.map $@
-
-TBITC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcbi1000.300gf \
- $(tfmdir)/tcbi1000.tfm $(srcdir)/tc.map $@
-
-CWTC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/tctt1000.tfm $(srcdir)/tc.map $@
-
-CWITC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/tcit1000.tfm $(srcdir)/tc.map $@
-
-HRTC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcss1000.300gf \
- $(tfmdir)/tcss1000.tfm $(srcdir)/tc.map $@
-
-HBTC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcsx1000.300gf \
- $(tfmdir)/tcsx1000.tfm $(srcdir)/tc.map $@
-
-HITC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcsi1000.300gf \
- $(tfmdir)/tcsi1000.tfm $(srcdir)/tc.map $@
-
-HBITC: $(srcdir)/tc.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcso1000.300gf \
- $(tfmdir)/tcso1000.tfm $(srcdir)/tc.map $@
-
-
-clean:
-
-realclean:
- -rm -f $(FONTS)
-
-extraclean: realclean
- -rm -f core *~ "#*"
-
-.PHONY: clean realclean extraclean all
diff --git a/contrib/groff/font/devdvi/generate/ec.map b/contrib/groff/font/devdvi/generate/ec.map
deleted file mode 100644
index 57e6608bbe14..000000000000
--- a/contrib/groff/font/devdvi/generate/ec.map
+++ /dev/null
@@ -1,255 +0,0 @@
-# Map for EC fonts with T1 encoding.
-# Originally contributed by Andreas Schwab <schwab@suse.de>
-0 ga
-1 aa
-2 a^
-3 a~
-4 ad
-5 a"
-6 ao
-7 ah
-8 ab
-9 a-
-10 a.
-11 ac
-12 ho
-13 bq
-14 fo
-15 fc
-16 lq
-17 rq
-18 Bq
-19 Fo
-20 Fc
-21 en
-22 em
-25 .i
-26 .j
-27 ff
-28 fi
-29 fl
-30 Fi
-31 Fl
-32 u2423
-33 ! u01C3
-34 " dq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 -
-46 .
-47 / sl
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-58 :
-59 ;
-60 <
-61 =
-62 >
-63 ?
-64 @ at
-65 A
-66 B
-67 C
-68 D
-69 E
-70 F
-71 G
-72 H
-73 I
-74 J
-75 K
-76 L
-77 M
-78 N
-79 O
-80 P
-81 Q
-82 R
-83 S
-84 T
-85 U
-86 V
-87 W
-88 X
-89 Y
-90 Z
-91 [ lB
-92 \ rs
-93 ] rB
-94 ^ ha
-95 _
-96 ` oq
-97 a
-98 b
-99 c
-100 d
-101 e
-102 f
-103 g
-104 h
-105 i
-106 j
-107 k
-108 l
-109 m
-110 n
-111 o
-112 p
-113 q
-114 r
-115 s
-116 t
-117 u
-118 v
-119 w
-120 x
-121 y
-122 z
-123 { lC
-124 | ba u01C0
-125 } rC
-126 ~
-127 hy
-128 u0041_0306
-129 u0041_0328
-130 'C
-131 u0043_030C
-132 u0044_030C
-133 u0045_030C
-134 u0045_0328
-135 u0047_0306
-136 u004C_0301
-137 u004C_030C
-138 /L
-139 u004E_0301
-140 u004E_030C
-141 u014A
-142 u004F_030B
-143 u0052_0301
-144 u0052_030C
-145 u0053_0301
-146 vS
-147 u0053_0327
-148 u0054_030C
-149 u0054_0327
-150 u0055_030B
-151 u0055_030A
-152 :Y
-153 u005A_0301
-154 vZ
-155 u005A_0307
-156 IJ
-157 u0049_0307
-158 u0111
-159 sc
-160 u0061_0306
-161 u0061_0328
-162 'c
-163 u0063_030C
-164 u0064_030C
-165 u0065_030C
-166 u0065_0328
-167 u0067_0306
-168 u006C_0301
-169 u006C_030C
-170 /l
-171 u006E_0301
-172 u006E_030C
-173 u016A
-174 u006F_030B
-175 u0072_0301
-176 u0072_030C
-177 u0073_0301
-178 vs
-179 u0073_0327
-180 u0074_030C
-181 u0074_0327
-182 u0075_030B
-183 u0075_030A
-184 :y
-185 u007A_0301
-186 vz
-187 u007A_0307
-188 ij
-189 r!
-190 r?
-191 Po
-192 `A
-193 'A
-194 ^A
-195 ~A
-196 :A
-197 oA
-198 AE
-199 ,C
-200 `E
-201 'E
-202 ^E
-203 :E
-204 `I
-205 'I
-206 ^I
-207 :I
-208 -D u0110 u0189
-209 ~N
-210 `O
-211 'O
-212 ^O
-213 ~O
-214 :O
-215 OE
-216 /O
-217 `U
-218 'U
-219 ^U
-220 :U
-221 'Y
-222 TP
-224 `a
-225 'a
-226 ^a
-227 ~a
-228 :a
-229 oa
-230 ae
-231 ,c
-232 `e
-233 'e
-234 ^e
-235 :e
-236 `i
-237 'i
-238 ^i
-239 :i
-240 Sd
-241 ~n
-242 `o
-243 'o
-244 ^o
-245 ~o
-246 :o
-247 oe
-248 /o
-249 `u
-250 'u
-251 ^u
-252 :u
-253 'y
-254 Tp
-255 ss
diff --git a/contrib/groff/font/devdvi/generate/msam.map b/contrib/groff/font/devdvi/generate/msam.map
deleted file mode 100644
index 20a22e61ed95..000000000000
--- a/contrib/groff/font/devdvi/generate/msam.map
+++ /dev/null
@@ -1,127 +0,0 @@
-# Map for the AMSFonts 2.0 msam font using TeX names.
-# Contributed by Zdzislaw Meglicki (Zdzislaw.Meglicki@arp.anu.edu.au).
-0 boxdot
-1 boxplus
-2 boxtimes
-3 square
-4 blacksquare
-5 centerdot
-6 lozenge lz
-7 blacklozenge
-8 circlearrowright
-9 circlearrowleft
-10 rightleftharpoons
-11 leftrightharpoons
-12 boxminus
-13 Vdash
-14 Vvdash
-15 vDash
-16 twoheadrightarrow
-17 twoheadleftarrow
-18 leftleftarrows
-19 rightrightarrows
-20 upuparrows
-21 downdownarrows
-22 upharpoonright
-23 downharpoonright
-24 upharpoonleft
-25 downharpoonleft
-26 rightarrowtail
-27 leftarrowtail
-28 leftrightarrows
-29 rightleftarrows
-30 Lsh
-31 Rsh
-32 rightsquigarrow
-33 leftrightsquigarrow
-34 looparrowleft
-35 looparrowright
-36 circeq
-37 succsim
-38 gtrsim
-39 gtrapprox
-40 multimap
-41 therefore tf 3d
-42 because
-43 doteqdot
-44 triangleq
-45 precsim
-46 lesssim
-47 lessapprox
-48 eqslantless
-49 eqslantgtr
-50 curlyeqprec
-51 curlyeqsucc
-52 preccurlyeq
-53 leqq
-54 leqslant
-55 lessgtr
-56 backprime
-58 risingdotseq
-59 fallingdotseq
-60 succcurlyeq
-61 geqq
-62 geqslant
-63 gtrless
-64 sqsubset
-65 sqsupset
-66 vartriangleright
-67 vartriangleleft
-68 trianglerighteq
-69 trianglelefteq
-70 bigstar
-71 between
-72 blacktriangledown
-73 blacktriangleright
-74 blacktriangleleft
-77 vartriangle
-78 blacktriangle
-79 triangledown
-80 eqcirc
-81 lesseqgtr
-82 gtreqless
-83 lesseqqgtr
-84 gtreqqless
-85 yen Ye
-86 Rrightarrow
-87 Lleftarrow
-88 checkmark OK
-89 veebar
-90 barwedge
-91 doublebarwedge
-92 angle /_
-93 measuredangle
-94 sphericalangle
-95 varpropto
-96 smallsmile
-97 smallfrown
-98 Subset
-99 Supset
-100 Cup
-101 Cap
-102 curlywedge
-103 curlyvee
-104 leftthreetimes
-105 rightthreetimes
-106 subseteqq
-107 supseteqq
-108 bumpeq
-109 Bumpeq
-110 lll
-111 ggg
-112 ulcorner
-113 urcorner
-114 circledR rg
-115 circledS
-116 pitchfork
-117 dotplus
-118 backsim
-119 backsimeq
-120 llcorner
-121 lrcorner
-122 maltese
-123 complement
-124 intercal
-125 circledcirc
-126 circledast
-127 circleddash
diff --git a/contrib/groff/font/devdvi/generate/msbm.map b/contrib/groff/font/devdvi/generate/msbm.map
deleted file mode 100644
index 07ee095d41e4..000000000000
--- a/contrib/groff/font/devdvi/generate/msbm.map
+++ /dev/null
@@ -1,121 +0,0 @@
-# Map for the AMSFonts 2.0 msbm font using TeX names.
-# Contributed by Zdzislaw Meglicki (Zdzislaw.Meglicki@arp.anu.edu.au).
-0 lvertneqq
-1 gvertneqq
-2 nleq
-3 ngeq
-4 nless
-5 ngtr
-6 nprec
-7 nsucc
-8 lneqq
-9 gneqq
-10 nleqslant
-11 ngeqslant
-12 lneq
-13 gneq
-14 npreceq
-15 nsucceq
-16 precnsim
-17 succnsim
-18 lnsim
-19 gnsim
-20 nleqq
-21 ngeqq
-22 precneqq
-23 succneqq
-24 precnapprox
-25 succnapprox
-26 lnapprox
-27 gnapprox
-28 nsim
-29 ncong
-30 diagup
-31 diagdown
-32 varsubsetneq
-33 varsupsetneq
-34 nsubseteqq
-35 nsupseteqq
-36 subsetneqq
-37 supsetneqq
-38 varsubsetneqq
-39 varsupsetneqq
-40 subsetneq
-41 supsetneq
-42 nsubseteq
-43 nsupseteq
-44 nparallel
-45 nmid
-46 nshortmid
-47 nshortparallel
-48 nvdash
-49 nVdash
-50 nvDash
-51 nVDash
-52 ntrianglerighteq
-53 ntrianglelefteq
-54 ntriangleleft
-55 ntriangleright
-56 nleftarrow
-57 nrightarrow
-58 nLeftarrow
-59 nRightarrow
-60 nLeftrightarrow
-61 nleftrightarrow
-62 divideontimes
-63 varnothing
-64 nexists
-65 BbbA
-66 BbbB
-67 BbbC
-68 BbbD
-69 BbbE
-70 BbbF
-71 BbbG
-72 BbbH
-73 BbbI
-74 BbbJ
-75 BbbK
-76 BbbL
-77 BbbM
-78 BbbN
-79 BbbO
-80 BbbP
-81 BbbQ
-82 BbbR
-83 BbbS
-84 BbbT
-85 BbbU
-86 BbbV
-87 BbbW
-88 BbbX
-89 BbbY
-90 BbbZ
-96 Finv
-97 Game
-102 mho
-103 eth
-104 eqsim
-105 beth
-106 gimel
-107 daleth
-108 lessdot
-109 gtrdot
-110 ltimes
-111 rtimes
-112 shortmid
-113 shortparallel
-114 smallsetminus
-115 thicksim
-116 thickapprox
-117 approxeq
-118 succapprox
-119 precapprox
-120 curvearrowleft
-121 curvearrowright
-122 digamma
-123 varkappa
-124 Bbbk
-125 hslash
-126 hbar -h
-127 backepsilon
diff --git a/contrib/groff/font/devdvi/generate/tc.map b/contrib/groff/font/devdvi/generate/tc.map
deleted file mode 100644
index e7457221b3cc..000000000000
--- a/contrib/groff/font/devdvi/generate/tc.map
+++ /dev/null
@@ -1,80 +0,0 @@
-# Map for TC fonts with TS1 encoding.
-24 <-
-25 ->
-32 u2422
-36 $ Do
-39 aq
-44 ,
-46 .
-47 f/
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-60 la
-61 \-
-62 ra
-77 u2127
-79 ci
-87 u03A9
-91 u301A
-93 u301B
-94 ua
-95 da
-110 u266A
-126 ~ ti
-132 dg
-133 dd
-134 u2016
-135 %0
-136 bu
-137 u2103
-140 Fn
-141 u20A1
-142 u20A9
-143 u20A6
-145 u20B1
-146 u20A4
-147 u211E
-148 u203D
-150 u20AB
-151 tm
-152 u2031
-154 u0E3F
-155 u2116
-156 u2052
-157 u212E
-158 u25E6
-159 u2120
-160 u2045
-161 u2046
-162 ct
-163 Po
-164 Cs
-165 Ye
-166 bb
-167 sc
-169 co
-170 Of
-172 tno
-173 u2117
-174 rg
-176 de
-177 t+-
-178 S2
-179 S3
-181 mc
-182 ps
-183 pc
-184 u203B
-185 S1
-186 Om
-191 Eu
-214 tmu
-246 tdi
diff --git a/contrib/groff/font/devdvi/generate/texb.map b/contrib/groff/font/devdvi/generate/texb.map
deleted file mode 100644
index ddab640f5d75..000000000000
--- a/contrib/groff/font/devdvi/generate/texb.map
+++ /dev/null
@@ -1,128 +0,0 @@
-0 *G
-1 *D
-2 *H
-3 *L
-4 *C
-5 *P
-6 *S
-7 *U
-8 *F
-9 *Q
-10 *W
-11 ff
-12 fi
-13 fl
-14 Fi
-15 Fl
-16 .i
-17 .j
-18 ga
-19 aa
-20 ah
-21 ab
-22 a-
-23 ao
-24 ac
-25 ss
-26 ae
-27 oe
-28 /o
-29 AE
-30 OE
-31 /O
-32 slash@for@l
-33 !
-34 rq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 - hy
-46 .
-47 / sl
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-58 :
-59 ;
-60 r!
-61 =
-62 r?
-63 ?
-64 @ at
-65 A
-66 B
-67 C
-68 D
-69 E
-70 F
-71 G
-72 H
-73 I
-74 J
-75 K
-76 L
-77 M
-78 N
-79 O
-80 P
-81 Q
-82 R
-83 S
-84 T
-85 U
-86 V
-87 W
-88 X
-89 Y
-90 Z
-91 [ lB
-92 lq
-93 ] rB
-94 a^ ^ ha
-95 a.
-96 ` oq
-97 a
-98 b
-99 c
-100 d
-101 e
-102 f
-103 g
-104 h
-105 i
-106 j
-107 k
-108 l
-109 m
-110 n
-111 o
-112 p
-113 q
-114 r
-115 s
-116 t
-117 u
-118 v
-119 w
-120 x
-121 y
-122 z
-123 en
-124 em
-125 a"
-126 a~ ~
-127 ad
diff --git a/contrib/groff/font/devdvi/generate/texex.map b/contrib/groff/font/devdvi/generate/texex.map
deleted file mode 100644
index 2e497f7917cf..000000000000
--- a/contrib/groff/font/devdvi/generate/texex.map
+++ /dev/null
@@ -1,100 +0,0 @@
-0 parenleft0
-1 parenright0
-2 bracketleft0
-3 bracketright0
-4 floorleft0
-5 floorright0
-6 ceilingleft0
-7 ceilingright0
-8 braceleft0
-9 braceright0
-10 angleleft0
-11 angleright0
-12 barex
-13 bardblex
-14 slash0
-15 backslash0
-16 parenleft1
-17 parenright1
-18 parenleft2
-19 parenright2
-20 bracketleft2
-21 bracketright2
-22 floorleft2
-23 floorright2
-24 ceilingleft2
-25 ceilingright2
-26 braceleft2
-27 braceright2
-28 angleleft2
-29 angleright2
-30 slash2
-31 backslash2
-32 parenleft3
-33 parenright3
-34 bracketleft3
-35 bracketright3
-36 floorleft3
-37 floorright3
-38 ceilingleft3
-39 ceilingright3
-40 braceleft3
-41 braceright3
-42 angleleft3
-43 angleright3
-44 slash3
-45 backslash3
-46 slash1
-47 backslash1
-48 parenlefttp
-49 parenrighttp
-50 bracketlefttp
-51 bracketrighttp
-52 bracketleftbt
-53 bracketrightbt
-54 bracketleftex
-55 bracketrightex
-56 bracelefttp lt
-57 bracerighttp rt
-58 braceleftbt lb
-59 bracerightbt rb
-60 braceleftmid lk
-61 bracerightmid rk
-62 braceex bracerightex braceleftex
-63 arrowvertex
-64 parenleftbt
-65 parenrightbt
-66 parenleftex
-67 parenrightex
-68 angleleft1
-69 angleright1
-73 ois ointegral
-75 bigcircledot
-77 bigcircleplus
-79 bigcirclemultiply
-88 sum
-89 product
-90 integral
-91 bigunion
-92 bigintersection
-93 bigunionplus
-94 biglogicaland
-95 biglogicalor
-97 coproduct
-104 bracketleft1
-105 bracketright1
-106 floorleft1
-107 floorright1
-108 ceilingleft1
-109 ceilingright1
-110 braceleft1
-111 braceright1
-112 sqrt0
-113 sqrt1
-114 sqrt2
-115 sqrt3
-119 arrowvertdblex
-120 arrowverttp
-121 arrowvertbt
-126 arrowvertdbltp
-127 arrowvertdblbt
diff --git a/contrib/groff/font/devdvi/generate/texi.map b/contrib/groff/font/devdvi/generate/texi.map
deleted file mode 100644
index 4e3915d9f97f..000000000000
--- a/contrib/groff/font/devdvi/generate/texi.map
+++ /dev/null
@@ -1,128 +0,0 @@
-0 *G
-1 *D
-2 *H
-3 *L
-4 *C
-5 *P
-6 *S
-7 *U
-8 *F
-9 *Q
-10 *W
-11 ff
-12 fi
-13 fl
-14 Fi
-15 Fl
-16 .i
-17 .j
-18 ga
-19 aa
-20 ah
-21 ab
-22 a-
-23 ao
-24 ac
-25 ss
-26 ae
-27 oe
-28 /o
-29 AE
-30 OE
-31 /O
-32 slash@for@l
-33 !
-34 rq
-35 # sh
-36 Po
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 - hy
-46 .
-47 / sl
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-58 :
-59 ;
-60 r!
-61 =
-62 r?
-63 ?
-64 @ at
-65 A
-66 B
-67 C
-68 D
-69 E
-70 F
-71 G
-72 H
-73 I
-74 J
-75 K
-76 L
-77 M
-78 N
-79 O
-80 P
-81 Q
-82 R
-83 S
-84 T
-85 U
-86 V
-87 W
-88 X
-89 Y
-90 Z
-91 [ lB
-92 lq
-93 ] rB
-94 a^ ^ ha
-95 a.
-96 ` oq
-97 a
-98 b
-99 c
-100 d
-101 e
-102 f Fn
-103 g
-104 h
-105 i
-106 j
-107 k
-108 l
-109 m
-110 n
-111 o
-112 p
-113 q
-114 r
-115 s
-116 t
-117 u
-118 v
-119 w
-120 x
-121 y
-122 z
-123 en
-124 em
-125 a"
-126 a~ ~
-127 ad
diff --git a/contrib/groff/font/devdvi/generate/texmi.map b/contrib/groff/font/devdvi/generate/texmi.map
deleted file mode 100644
index 669d04693cf5..000000000000
--- a/contrib/groff/font/devdvi/generate/texmi.map
+++ /dev/null
@@ -1,46 +0,0 @@
-11 *a
-12 *b
-13 *g
-14 *d
-15 +e
-16 *z
-17 *y
-18 *h
-19 *i
-20 *k
-21 *l
-22 *m mc
-23 *n
-24 *c
-25 *p
-26 *r
-27 *s
-28 *t
-29 *u
-30 *f
-31 *x
-32 *q
-33 *w
-34 *e
-35 +h
-36 +p
-38 ts
-39 +f
-40 u21BC
-41 u21BD
-42 u21C0
-43 u21C1
-46 u25B7
-47 u25C1
-60 <
-62 >
-63 u22C6
-64 pd
-91 u266D
-92 u266E
-93 u266F
-94 u2323
-95 u2322
-96 u2113
-111 *o
-125 wp
diff --git a/contrib/groff/font/devdvi/generate/texr.map b/contrib/groff/font/devdvi/generate/texr.map
deleted file mode 100644
index 0eaf4230d611..000000000000
--- a/contrib/groff/font/devdvi/generate/texr.map
+++ /dev/null
@@ -1,128 +0,0 @@
-0 *G
-1 *D
-2 *H
-3 *L
-4 *C
-5 *P
-6 *S
-7 *U
-8 *F
-9 *Q
-10 *W
-11 ff
-12 fi
-13 fl
-14 Fi
-15 Fl
-16 .i
-17 .j
-18 ga
-19 aa
-20 ah
-21 ab
-22 a-
-23 ao
-24 ac
-25 ss
-26 ae
-27 oe
-28 /o
-29 AE
-30 OE
-31 /O
-32 slash@for@l
-33 !
-34 rq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 + pl
-44 ,
-45 - hy
-46 .
-47 / sl
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-58 :
-59 ;
-60 r!
-61 = eq
-62 r?
-63 ?
-64 @ at
-65 A *A
-66 B *B
-67 C
-68 D
-69 E *E
-70 F
-71 G
-72 H *Y
-73 I *I
-74 J
-75 K *K
-76 L
-77 M *M
-78 N *N
-79 O *O
-80 P *R
-81 Q
-82 R
-83 S
-84 T *T
-85 U
-86 V
-87 W
-88 X *X
-89 Y
-90 Z *Z
-91 [ lB
-92 lq
-93 ] rB
-94 a^ ^ ha
-95 a.
-96 ` oq
-97 a
-98 b
-99 c
-100 d
-101 e
-102 f
-103 g
-104 h
-105 i
-106 j
-107 k
-108 l
-109 m
-110 n
-111 o
-112 p
-113 q
-114 r
-115 s
-116 t
-117 u
-118 v
-119 w
-120 x
-121 y
-122 z
-123 en
-124 em
-125 a"
-126 a~ ~
-127 ad
diff --git a/contrib/groff/font/devdvi/generate/texsy.map b/contrib/groff/font/devdvi/generate/texsy.map
deleted file mode 100644
index 8848c920c89f..000000000000
--- a/contrib/groff/font/devdvi/generate/texsy.map
+++ /dev/null
@@ -1,127 +0,0 @@
-0 \- mi
-1 md pc
-2 mu tmu
-3 **
-4 di tdi
-5 u22C4
-6 +- t+-
-7 -+
-8 c+
-9 u2296
-10 c*
-11 u2298
-12 u2299
-13 ci
-14 u25E6
-15 bu
-16 u224D
-17 ==
-18 ib
-19 ip
-20 <=
-21 >=
-22 u227C
-23 u227D
-24 ap ti
-25 ~~ ~=
-26 sb
-27 sp
-28 <<
-29 >>
-30 u227A
-31 u227B
-32 <-
-33 ->
-34 ua
-35 da
-36 <>
-37 u2197
-38 u2198
-39 |=
-40 lA
-41 rA
-42 uA
-43 dA
-44 hA
-45 u2196
-46 u2199
-47 pt
-48 prime
-49 if
-50 mo
-51 st
-52 u25B3
-53 u25BD
-54 slashnot
-56 fa
-57 te
-58 no tno
-59 es
-60 Re
-61 Im
-62 u22A4
-63 pp
-64 Ah
-65 A
-66 B
-67 C
-68 D
-69 E
-70 F
-71 G
-72 H
-73 I
-74 J
-75 K
-76 L
-77 M
-78 N
-79 O
-80 P
-81 Q
-82 R
-83 S
-84 T
-85 U
-86 V
-87 W
-88 X
-89 Y
-90 Z
-91 cu
-92 ca
-93 u228E
-94 AN
-95 OR
-96 u22A2
-97 u22A3
-98 lf
-99 rf
-100 lc
-101 rc
-102 lC {
-103 rC }
-104 la
-105 ra
-106 ba | bv bar
-107 bardbl
-108 va
-109 vA
-110 \ rs
-111 u2240
-112 sqrt
-113 u2210
-114 gr
-115 is
-116 u2294
-117 u2293
-118 u2291
-119 u2292
-120 sc
-121 dg
-122 dd
-123 ps
-124 CL
-125 u2662
-126 u2661
-127 SP
diff --git a/contrib/groff/font/devdvi/generate/textex.map b/contrib/groff/font/devdvi/generate/textex.map
deleted file mode 100644
index 97566279c170..000000000000
--- a/contrib/groff/font/devdvi/generate/textex.map
+++ /dev/null
@@ -1,34 +0,0 @@
-# Map for the cmtex font
-0 md pc
-1 da
-2 *a
-3 *b
-4 AN
-5 no tno
-6 mo
-7 *p
-8 *l
-9 *g
-10 *d
-11 ua
-12 pm
-13 c+
-14 if
-15 pd
-16 sb
-17 sp
-18 ca
-19 cu
-20 fa
-21 te
-22 c*
-23 u21C6
-24 <-
-25 ->
-26 !=
-27 u22C4
-28 <=
-29 >=
-30 ==
-31 OR
-127 is
diff --git a/contrib/groff/font/devdvi/generate/textt.map b/contrib/groff/font/devdvi/generate/textt.map
deleted file mode 100644
index 157013d9d299..000000000000
--- a/contrib/groff/font/devdvi/generate/textt.map
+++ /dev/null
@@ -1,128 +0,0 @@
-0 *G
-1 *D
-2 *H
-3 *L
-4 *C
-5 *P
-6 *S
-7 *U
-8 *F
-9 *Q
-10 *W
-11 ff
-12 fi
-13 fl
-14 Fi
-15 Fl
-16 .i
-17 .j
-18 ga
-19 aa
-20 ah
-21 ab
-22 a-
-23 ao
-24 ac
-25 ss
-26 ae
-27 oe
-28 /o
-29 AE
-30 OE
-31 /O
-32 u2423
-33 !
-34 " dq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 - \-
-46 .
-47 / sl
-48 0
-49 1
-50 2
-51 3
-52 4
-53 5
-54 6
-55 7
-56 8
-57 9
-58 :
-59 ;
-60 <
-61 =
-62 >
-63 ?
-64 @ at
-65 A
-66 B
-67 C
-68 D
-69 E
-70 F
-71 G
-72 H
-73 I
-74 J
-75 K
-76 L
-77 M
-78 N
-79 O
-80 P
-81 Q
-82 R
-83 S
-84 T
-85 U
-86 V
-87 W
-88 X
-89 Y
-90 Z
-91 [ lB
-92 \ rs
-93 ] rB
-94 a^ ^ ha
-95 _
-96 ` oq
-97 a
-98 b
-99 c
-100 d
-101 e
-102 f
-103 g
-104 h
-105 i
-106 j
-107 k
-108 l
-109 m
-110 n
-111 o
-112 p
-113 q
-114 r
-115 s
-116 t
-117 u
-118 v
-119 w
-120 x
-121 y
-122 z
-123 lC {
-124 ba |
-125 rC }
-126 a~ ~
-127 ad
diff --git a/contrib/groff/font/devhtml/DESC.proto b/contrib/groff/font/devhtml/DESC.proto
deleted file mode 100644
index db407f7bb8c4..000000000000
--- a/contrib/groff/font/devhtml/DESC.proto
+++ /dev/null
@@ -1,12 +0,0 @@
-res 240
-hor 24
-vert 40
-unitwidth 10
-sizes 1-1000 0
-fonts 9 R I B BI CR CI CB CBI S
-tcommand
-unscaled_charwidths
-postpro post-grohtml
-prepro pre-grohtml
-use_charnames_in_special
-pass_filenames
diff --git a/contrib/groff/font/devhtml/Makefile.sub b/contrib/groff/font/devhtml/Makefile.sub
deleted file mode 100644
index 474c0f282bed..000000000000
--- a/contrib/groff/font/devhtml/Makefile.sub
+++ /dev/null
@@ -1,34 +0,0 @@
-DEV=html
-PROTOFONTS=R I B BI CR CI CB CBI
-FONTS=$(PROTOFONTS) S
-DEVFILES=$(FONTS) DESC
-CLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-$(FONTS): R.proto
- @echo Making $@
- @-rm -f $@
- @(charwidth=`expr $(RES) / $(CPI)` ; \
- sed -e "s/^name [A-Z]*$$/name $@/" \
- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
- -e "s/^internalname .*$$/internalname $@/" \
- -e "/^internalname/s/CR/4/" \
- -e "/^internalname/s/BI/3/" \
- -e "/^internalname/s/B/2/" \
- -e "/^internalname/s/I/1/" \
- -e "/^internalname .*[^ 0-9]/d" \
- $(srcdir)/R.proto >$@)
-
-DESC: DESC.proto
- @echo Making $@
- @-rm -f $@
- @sed -e "s/^res .*$$/res $(RES)/" \
- -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
- -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
- $(srcdir)/DESC.proto >$@
- @echo "image_generator $(GHOSTSCRIPT)" >> $@
diff --git a/contrib/groff/font/devhtml/R.proto b/contrib/groff/font/devhtml/R.proto
deleted file mode 100644
index 5126980a3833..000000000000
--- a/contrib/groff/font/devhtml/R.proto
+++ /dev/null
@@ -1,746 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
-! 24 0 0x0021
-" 24 0 0x0022 &quot;
-dq "
-# 24 0 0x0023
-sh "
-$ 24 0 0x0024
-Do "
-% 24 0 0x0025
-& 24 0 0x0026 &amp;
-aq 24 0 0x0027
-( 24 0 0x0028
-) 24 0 0x0029
-* 24 0 0x002A
-+ 24 0 0x002B
-pl "
-, 24 0 0x002C
-hy 24 0 0x002D
-- "
-. 24 0 0x002E
-/ 24 0 0x002F
-sl "
-0 24 0 0x0030
-1 24 0 0x0031
-2 24 0 0x0032
-3 24 0 0x0033
-4 24 0 0x0034
-5 24 0 0x0035
-6 24 0 0x0036
-7 24 0 0x0037
-8 24 0 0x0038
-9 24 0 0x0039
-: 24 0 0x003A
-; 24 0 0x003B
-< 24 0 0x003C &lt;
-= 24 0 0x003D
-eq "
-> 24 0 0x003E &gt;
-? 24 0 0x003F
-@ 24 0 0x0040
-at "
-A 24 0 0x0041
-B 24 0 0x0042
-C 24 0 0x0043
-D 24 0 0x0044
-E 24 0 0x0045
-F 24 0 0x0046
-G 24 0 0x0047
-H 24 0 0x0048
-I 24 0 0x0049
-J 24 0 0x004A
-K 24 0 0x004B
-L 24 0 0x004C
-M 24 0 0x004D
-N 24 0 0x004E
-O 24 0 0x004F
-P 24 0 0x0050
-Q 24 0 0x0051
-R 24 0 0x0052
-S 24 0 0x0053
-T 24 0 0x0054
-U 24 0 0x0055
-V 24 0 0x0056
-W 24 0 0x0057
-X 24 0 0x0058
-Y 24 0 0x0059
-Z 24 0 0x005A
-[ 24 0 0x005B
-lB "
-\ 24 0 0x005C
-rs "
-] 24 0 0x005D
-rB "
-^ 24 0 0x005E
-a^ "
-ha "
-_ 24 0 0x005F
-ru "
-ul "
-\` 24 0 0x0060
-ga "
-a 24 0 0x0061
-b 24 0 0x0062
-c 24 0 0x0063
-d 24 0 0x0064
-e 24 0 0x0065
-f 24 0 0x0066
-g 24 0 0x0067
-h 24 0 0x0068
-i 24 0 0x0069
-j 24 0 0x006A
-k 24 0 0x006B
-l 24 0 0x006C
-m 24 0 0x006D
-n 24 0 0x006E
-o 24 0 0x006F
-p 24 0 0x0070
-q 24 0 0x0071
-r 24 0 0x0072
-s 24 0 0x0073
-t 24 0 0x0074
-u 24 0 0x0075
-v 24 0 0x0076
-w 24 0 0x0077
-x 24 0 0x0078
-y 24 0 0x0079
-z 24 0 0x007A
-lC 24 0 0x007B
-{ "
-ba 24 0 0x007C
-or "
-| "
-rC 24 0 0x007D
-} "
-a~ 24 0 0x007E
-~ "
-ti "
---- 24 0 0x00A0 &nbsp;
-r! 24 0 0x00A1 &iexcl;
-ct 24 0 0x00A2 &cent;
-Po 24 0 0x00A3 &pound;
-Cs 24 0 0x00A4 &curren;
-Ye 24 0 0x00A5 &yen;
-bb 24 0 0x00A6 &brvbar;
-sc 24 0 0x00A7 &sect;
-ad 24 0 0x00A8 &uml;
-co 24 0 0x00A9 &copy;
-Of 24 0 0x00AA &ordf;
-Fo 24 0 0x00AB &laquo;
-no 24 0 0x00AC &not;
-tno "
-rg 24 0 0x00AE &reg;
-a- 24 0 0x00AF &macr;
-de 24 0 0x00B0 &deg;
-+- 24 0 0x00B1 &plusmn;
-t+- "
-S2 24 0 0x00B2 &sup2;
-S3 24 0 0x00B3 &sup3;
-aa 24 0 0x00B4 &acute;
-\' "
-mc 24 0 0x00B5 &micro;
-ps 24 0 0x00B6 &para;
-pc 24 0 0x00B7 &middot;
-ac 24 0 0x00B8 &cedil;
-S1 24 0 0x00B9 &sup1;
-Om 24 0 0x00BA &ordm;
-Fc 24 0 0x00BB &raquo;
-14 24 0 0x00BC &frac14;
-12 24 0 0x00BD &frac12;
-34 24 0 0x00BE &frac34;
-r? 24 0 0x00BF &iquest;
-`A 24 0 0x00C0 &Agrave;
-'A 24 0 0x00C1 &Aacute;
-^A 24 0 0x00C2 &Acirc;
-~A 24 0 0x00C3 &Atilde;
-:A 24 0 0x00C4 &Auml;
-oA 24 0 0x00C5 &Aring;
-AE 24 0 0x00C6 &AElig;
-,C 24 0 0x00C7 &Ccedil;
-`E 24 0 0x00C8 &Egrave;
-'E 24 0 0x00C9 &Eacute;
-^E 24 0 0x00CA &Ecirc;
-:E 24 0 0x00CB &Euml;
-`I 24 0 0x00CC &Igrave;
-'I 24 0 0x00CD &Iacute;
-^I 24 0 0x00CE &Icirc;
-:I 24 0 0x00CF &Iuml;
--D 24 0 0x00D0 &ETH;
-~N 24 0 0x00D1 &Ntilde;
-`O 24 0 0x00D2 &Ograve;
-'O 24 0 0x00D3 &Oacute;
-^O 24 0 0x00D4 &Ocirc;
-~O 24 0 0x00D5 &Otilde;
-:O 24 0 0x00D6 &Ouml;
-mu 24 0 0x00D7 &times;
-tmu "
-/O 24 0 0x00D8 &Oslash;
-`U 24 0 0x00D9 &Ugrave;
-'U 24 0 0x00DA &Uacute;
-^U 24 0 0x00DB &Ucirc;
-:U 24 0 0x00DC &Uuml;
-'Y 24 0 0x00DD &Yacute;
-TP 24 0 0x00DE &THORN;
-ss 24 0 0x00DF &szlig;
-`a 24 0 0x00E0 &agrave;
-'a 24 0 0x00E1 &aacute;
-^a 24 0 0x00E2 &acirc;
-~a 24 0 0x00E3 &atilde;
-:a 24 0 0x00E4 &auml;
-oa 24 0 0x00E5 &aring;
-ae 24 0 0x00E6 &aelig;
-,c 24 0 0x00E7 &ccedil;
-`e 24 0 0x00E8 &egrave;
-'e 24 0 0x00E9 &eacute;
-^e 24 0 0x00EA &ecirc;
-:e 24 0 0x00EB &euml;
-`i 24 0 0x00EC &igrave;
-'i 24 0 0x00ED &iacute;
-^i 24 0 0x00EE &icirc;
-:i 24 0 0x00EF &iuml;
-Sd 24 0 0x00F0 &eth;
-~n 24 0 0x00F1 &ntilde;
-`o 24 0 0x00F2 &ograve;
-'o 24 0 0x00F3 &oacute;
-^o 24 0 0x00F4 &ocirc;
-~o 24 0 0x00F5 &otilde;
-:o 24 0 0x00F6 &ouml;
-di 24 0 0x00F7 &divide;
-tdi "
-/o 24 0 0x00F8 &oslash;
-`u 24 0 0x00F9 &ugrave;
-'u 24 0 0x00FA &uacute;
-^u 24 0 0x00FB &ucirc;
-:u 24 0 0x00FC &uuml;
-'y 24 0 0x00FD &yacute;
-Tp 24 0 0x00FE &thorn;
-:y 24 0 0x00FF &yuml;
-u0041_0306 24 0 0x0102 &#258;
-u0061_0306 24 0 0x0103 &#259;
-u0041_0328 24 0 0x0104 &#260;
-u0061_0328 24 0 0x0105 &#261;
-'C 24 0 0x0106 &#262;
-'c 24 0 0x0107 &#263;
-u0043_030C 24 0 0x010C &#268;
-u0063_030C 24 0 0x010D &#269;
-u0044_030C 24 0 0x010E &#270;
-u0064_030C 24 0 0x010F &#271;
-u0110 24 0 0x0110 &#272;
-u0111 24 0 0x0111 &#273;
-u0045_0328 24 0 0x0118 &#280;
-u0065_0328 24 0 0x0119 &#281;
-u0045_030C 24 0 0x011A &#282;
-u0065_030C 24 0 0x011B &#283;
-u0047_0306 24 0 0x011E &#286;
-u0067_0306 24 0 0x011F &#287;
-u0049_0307 24 0 0x0130 &#304;
-.i 24 0 0x0131 &#305;
-IJ 24 0 0x0132 &#306;
-ij 24 0 0x0133 &#307;
-u004C_0301 24 0 0x0139 &#313;
-u006C_0301 24 0 0x013A &#314;
-u004C_030C 24 0 0x013D &#317;
-u006C_030C 24 0 0x013E &#318;
-/L 24 0 0x0141 &#321;
-/l 24 0 0x0142 &#322;
-u004E_0301 24 0 0x0143 &#323;
-u006E_0301 24 0 0x0144 &#324;
-u004E_030C 24 0 0x0147 &#327;
-u006E_030C 24 0 0x0148 &#328;
-u004F_030B 24 0 0x0150 &#330;
-u006F_030B 24 0 0x0151 &#331;
-OE 24 0 0x0152 &OElig;
-oe 24 0 0x0153 &oelig;
-u0052_0301 24 0 0x0154 &#340;
-u0072_0301 24 0 0x0155 &#341;
-u0052_030C 24 0 0x0158 &#344;
-u0072_030C 24 0 0x0159 &#345;
-u0053_0301 24 0 0x015A &#346;
-u0073_0301 24 0 0x015B &#347;
-u0053_0327 24 0 0x015E &#350;
-u0073_0327 24 0 0x015F &#351;
-vS 24 0 0x0160 &Scaron;
-vs 24 0 0x0161 &scaron;
-u0054_0327 24 0 0x0162 &#354;
-u0074_0327 24 0 0x0163 &#355;
-u0054_030C 24 0 0x0164 &#356;
-u0074_030C 24 0 0x0165 &#357;
-u0055_030A 24 0 0x016E &#366;
-u0075_030A 24 0 0x016F &#367;
-u0055_030B 24 0 0x0170 &#368;
-u0075_030B 24 0 0x0171 &#369;
-:Y 24 0 0x0178 &Yuml;
-u005A_0301 24 0 0x0179 &#377;
-u007A_0301 24 0 0x017A &#378;
-u005A_0307 24 0 0x017B &#379;
-u007A_0307 24 0 0x017C &#380;
-vZ 24 0 0x017D &#381;
-vz 24 0 0x017E &#382;
-Fn 24 0 0x0192 &fnof;
-ah 24 0 0x02C7 &#711;
-ab 24 0 0x02D8 &#728;
-a. 24 0 0x02D9 &#729;
-ao 24 0 0x02DA &#730;
-ho 24 0 0x02DB &#731;
-a" 24 0 0x02DD &#733;
-*A 24 0 0x0391 &Alpha;
-*B 24 0 0x0392 &Beta;
-*G 24 0 0x0393 &Gamma;
-*D 24 0 0x0394 &Delta;
-*E 24 0 0x0395 &Epsilon;
-*Z 24 0 0x0396 &Zeta;
-*Y 24 0 0x0397 &Eta;
-*H 24 0 0x0398 &Theta;
-*I 24 0 0x0399 &Iota;
-*K 24 0 0x039A &Kappa;
-*L 24 0 0x039B &Lambda;
-*M 24 0 0x039C &Mu;
-*N 24 0 0x039D &Nu;
-*C 24 0 0x039E &Xi;
-*O 24 0 0x039F &Omicron;
-*P 24 0 0x03A0 &Pi;
-*R 24 0 0x03A1 &Rho;
-*S 24 0 0x03A3 &Sigma;
-*T 24 0 0x03A4 &Tau;
-*U 24 0 0x03A5 &Upsilon;
-*F 24 0 0x03A6 &Phi;
-*X 24 0 0x03A7 &Chi;
-*Q 24 0 0x03A8 &Psi;
-*W 24 0 0x03A9 &Omega;
-*a 24 0 0x03B1 &alpha;
-*b 24 0 0x03B2 &beta;
-*g 24 0 0x03B3 &gamma;
-*d 24 0 0x03B4 &delta;
-*e 24 0 0x03B5 &epsilon;
-*z 24 0 0x03B6 &zeta;
-*y 24 0 0x03B7 &eta;
-*h 24 0 0x03B8 &theta;
-*i 24 0 0x03B9 &iota;
-*k 24 0 0x03BA &kappa;
-*l 24 0 0x03BB &lambda;
-*m 24 0 0x03BC &mu;
-*n 24 0 0x03BD &nu;
-*c 24 0 0x03BE &xi;
-*o 24 0 0x03BF &omicron;
-*p 24 0 0x03C0 &pi;
-*r 24 0 0x03C1 &rho;
-ts 24 0 0x03C2 &sigmaf;
-*s 24 0 0x03C3 &sigma;
-*t 24 0 0x03C4 &tau;
-*u 24 0 0x03C5 &upsilon;
-+f 24 0 0x03C6 &phi;
-*x 24 0 0x03C7 &chi;
-*q 24 0 0x03C8 &psi;
-*w 24 0 0x03C9 &omega;
-+h 24 0 0x03D1 &thetasym;
-*f 24 0 0x03D5 &#981;
-+p 24 0 0x03D6 &piv;
-+e 24 0 0x03F5 &#1013;
-u0415_0300 24 0 0x0400 &#1024;
-u0415_0308 24 0 0x0401 &#1025;
-u0402 24 0 0x0402 &#1026;
-u0413_0301 24 0 0x0403 &#1027;
-u0404 24 0 0x0404 &#1028;
-u0405 24 0 0x0405 &#1029;
-u0406 24 0 0x0406 &#1030;
-u0406_0308 24 0 0x0407 &#1031;
-u0408 24 0 0x0408 &#1032;
-u0409 24 0 0x0409 &#1033;
-u040A 24 0 0x040A &#1034;
-u040B 24 0 0x040B &#1035;
-u041A_0301 24 0 0x040C &#1036;
-u0418_0300 24 0 0x040D &#1037;
-u0423_0306 24 0 0x040E &#1038;
-u040F 24 0 0x040F &#1039;
-u0410 24 0 0x0410 &#1040;
-u0411 24 0 0x0411 &#1041;
-u0412 24 0 0x0412 &#1042;
-u0413 24 0 0x0413 &#1043;
-u0414 24 0 0x0414 &#1044;
-u0415 24 0 0x0415 &#1045;
-u0416 24 0 0x0416 &#1046;
-u0417 24 0 0x0417 &#1047;
-u0418 24 0 0x0418 &#1048;
-u0418_0306 24 0 0x0419 &#1049;
-u041A 24 0 0x041A &#1050;
-u041B 24 0 0x041B &#1051;
-u041C 24 0 0x041C &#1052;
-u041D 24 0 0x041D &#1053;
-u041E 24 0 0x041E &#1054;
-u041F 24 0 0x041F &#1055;
-u0420 24 0 0x0420 &#1056;
-u0421 24 0 0x0421 &#1057;
-u0422 24 0 0x0422 &#1058;
-u0423 24 0 0x0423 &#1059;
-u0424 24 0 0x0424 &#1060;
-u0425 24 0 0x0425 &#1061;
-u0426 24 0 0x0426 &#1062;
-u0427 24 0 0x0427 &#1063;
-u0428 24 0 0x0428 &#1064;
-u0429 24 0 0x0429 &#1065;
-u042A 24 0 0x042A &#1066;
-u042B 24 0 0x042B &#1067;
-u042C 24 0 0x042C &#1068;
-u042D 24 0 0x042D &#1069;
-u042E 24 0 0x042E &#1070;
-u042F 24 0 0x042F &#1071;
-u0430 24 0 0x0430 &#1072;
-u0431 24 0 0x0431 &#1073;
-u0432 24 0 0x0432 &#1074;
-u0433 24 0 0x0433 &#1075;
-u0434 24 0 0x0434 &#1076;
-u0435 24 0 0x0435 &#1077;
-u0436 24 0 0x0436 &#1078;
-u0437 24 0 0x0437 &#1079;
-u0438 24 0 0x0438 &#1080;
-u0438_0306 24 0 0x0439 &#1081;
-u043A 24 0 0x043A &#1082;
-u043B 24 0 0x043B &#1083;
-u043C 24 0 0x043C &#1084;
-u043D 24 0 0x043D &#1085;
-u043E 24 0 0x043E &#1086;
-u043F 24 0 0x043F &#1087;
-u0440 24 0 0x0440 &#1088;
-u0441 24 0 0x0441 &#1089;
-u0442 24 0 0x0442 &#1090;
-u0443 24 0 0x0443 &#1091;
-u0444 24 0 0x0444 &#1092;
-u0445 24 0 0x0445 &#1093;
-u0446 24 0 0x0446 &#1094;
-u0447 24 0 0x0447 &#1095;
-u0448 24 0 0x0448 &#1096;
-u0449 24 0 0x0449 &#1097;
-u044A 24 0 0x044A &#1098;
-u044B 24 0 0x044B &#1099;
-u044C 24 0 0x044C &#1100;
-u044D 24 0 0x044D &#1101;
-u044E 24 0 0x044E &#1102;
-u044F 24 0 0x044F &#1103;
-u0435_0300 24 0 0x0450 &#1104;
-u0435_0308 24 0 0x0451 &#1105;
-u0452 24 0 0x0452 &#1106;
-u0433_0301 24 0 0x0453 &#1107;
-u0454 24 0 0x0454 &#1108;
-u0455 24 0 0x0455 &#1109;
-u0456 24 0 0x0456 &#1110;
-u0456_0308 24 0 0x0457 &#1111;
-u0458 24 0 0x0458 &#1112;
-u0459 24 0 0x0459 &#1113;
-u045A 24 0 0x045A &#1114;
-u045B 24 0 0x045B &#1115;
-u043A_0301 24 0 0x045C &#1116;
-u0438_0300 24 0 0x045D &#1117;
-u0443_0306 24 0 0x045E &#1118;
-u045F 24 0 0x045F &#1119;
-u0460 24 0 0x0460 &#1120;
-u0461 24 0 0x0461 &#1121;
-u0462 24 0 0x0462 &#1122;
-u0463 24 0 0x0463 &#1123;
-u0464 24 0 0x0464 &#1124;
-u0465 24 0 0x0465 &#1125;
-u0466 24 0 0x0466 &#1126;
-u0467 24 0 0x0467 &#1127;
-u0468 24 0 0x0468 &#1128;
-u0469 24 0 0x0469 &#1129;
-u046A 24 0 0x046A &#1130;
-u046B 24 0 0x046B &#1131;
-u046C 24 0 0x046C &#1132;
-u046D 24 0 0x046D &#1133;
-u046E 24 0 0x046E &#1134;
-u046F 24 0 0x046F &#1135;
-u0470 24 0 0x0470 &#1136;
-u0471 24 0 0x0471 &#1137;
-u0472 24 0 0x0472 &#1138;
-u0473 24 0 0x0473 &#1139;
-u0474 24 0 0x0474 &#1140;
-u0475 24 0 0x0475 &#1141;
-u0474_030F 24 0 0x0476 &#1142;
-u0475_030F 24 0 0x0477 &#1143;
-u0478 24 0 0x0478 &#1144;
-u0479 24 0 0x0479 &#1145;
-u047A 24 0 0x047A &#1146;
-u047B 24 0 0x047B &#1147;
-u047C 24 0 0x047C &#1148;
-u047D 24 0 0x047D &#1149;
-u047E 24 0 0x047E &#1150;
-u047F 24 0 0x047F &#1151;
-u0480 24 0 0x0480 &#1152;
-u0481 24 0 0x0481 &#1153;
-u0482 24 0 0x0482 &#1154;
-u0483 0 0 0x0483 &#1155;
-u0484 0 0 0x0484 &#1156;
-u0485 0 0 0x0485 &#1157;
-u0486 0 0 0x0486 &#1158;
-u0488 0 0 0x0488 &#1160;
-u0489 0 0 0x0489 &#1161;
-u048A 24 0 0x048A &#1162;
-u048B 24 0 0x048B &#1163;
-u048C 24 0 0x048C &#1164;
-u048D 24 0 0x048D &#1165;
-u048E 24 0 0x048E &#1166;
-u048F 24 0 0x048F &#1167;
-u0490 24 0 0x0490 &#1168;
-u0491 24 0 0x0491 &#1169;
-u0492 24 0 0x0492 &#1170;
-u0493 24 0 0x0493 &#1171;
-u0494 24 0 0x0494 &#1172;
-u0495 24 0 0x0495 &#1173;
-u0496 24 0 0x0496 &#1174;
-u0497 24 0 0x0497 &#1175;
-u0498 24 0 0x0498 &#1176;
-u0499 24 0 0x0499 &#1177;
-u049A 24 0 0x049A &#1178;
-u049B 24 0 0x049B &#1179;
-u049C 24 0 0x049C &#1180;
-u049D 24 0 0x049D &#1181;
-u049E 24 0 0x049E &#1182;
-u049F 24 0 0x049F &#1183;
-u04A0 24 0 0x04A0 &#1184;
-u04A1 24 0 0x04A1 &#1185;
-u04A2 24 0 0x04A2 &#1186;
-u04A3 24 0 0x04A3 &#1187;
-u04A4 24 0 0x04A4 &#1188;
-u04A5 24 0 0x04A5 &#1189;
-u04A6 24 0 0x04A6 &#1190;
-u04A7 24 0 0x04A7 &#1191;
-u04A8 24 0 0x04A8 &#1192;
-u04A9 24 0 0x04A9 &#1193;
-u04AA 24 0 0x04AA &#1194;
-u04AB 24 0 0x04AB &#1195;
-u04AC 24 0 0x04AC &#1196;
-u04AD 24 0 0x04AD &#1197;
-u04AE 24 0 0x04AE &#1198;
-u04AF 24 0 0x04AF &#1199;
-u04B0 24 0 0x04B0 &#1200;
-u04B1 24 0 0x04B1 &#1201;
-u04B2 24 0 0x04B2 &#1202;
-u04B3 24 0 0x04B3 &#1203;
-u04B4 24 0 0x04B4 &#1204;
-u04B5 24 0 0x04B5 &#1205;
-u04B6 24 0 0x04B6 &#1206;
-u04B7 24 0 0x04B7 &#1207;
-u04B8 24 0 0x04B8 &#1208;
-u04B9 24 0 0x04B9 &#1209;
-u04BA 24 0 0x04BA &#1210;
-u04BB 24 0 0x04BB &#1211;
-u04BC 24 0 0x04BC &#1212;
-u04BD 24 0 0x04BD &#1213;
-u04BE 24 0 0x04BE &#1214;
-u04BF 24 0 0x04BF &#1215;
-u04C0 24 0 0x04C0 &#1216;
-u0416_0306 24 0 0x04C1 &#1217;
-u0436_0306 24 0 0x04C2 &#1218;
-u04C3 24 0 0x04C3 &#1219;
-u04C4 24 0 0x04C4 &#1220;
-u04C5 24 0 0x04C5 &#1221;
-u04C6 24 0 0x04C6 &#1222;
-u04C7 24 0 0x04C7 &#1223;
-u04C8 24 0 0x04C8 &#1224;
-u04C9 24 0 0x04C9 &#1225;
-u04CA 24 0 0x04CA &#1226;
-u04CB 24 0 0x04CB &#1227;
-u04CC 24 0 0x04CC &#1228;
-u04CD 24 0 0x04CD &#1229;
-u04CE 24 0 0x04CE &#1230;
-u0410_0306 24 0 0x04D0 &#1232;
-u0430_0306 24 0 0x04D1 &#1233;
-u0410_0308 24 0 0x04D2 &#1234;
-u0430_0308 24 0 0x04D3 &#1235;
-u04D4 24 0 0x04D4 &#1236;
-u04D5 24 0 0x04D5 &#1237;
-u0415_0306 24 0 0x04D6 &#1238;
-u0435_0306 24 0 0x04D7 &#1239;
-u04D8 24 0 0x04D8 &#1240;
-u04D9 24 0 0x04D9 &#1241;
-u04D8_0308 24 0 0x04DA &#1242;
-u04D9_0308 24 0 0x04DB &#1243;
-u0416_0308 24 0 0x04DC &#1244;
-u0436_0308 24 0 0x04DD &#1245;
-u0417_0308 24 0 0x04DE &#1246;
-u0437_0308 24 0 0x04DF &#1247;
-u04E0 24 0 0x04E0 &#1248;
-u04E1 24 0 0x04E1 &#1249;
-u0418_0304 24 0 0x04E2 &#1250;
-u0438_0304 24 0 0x04E3 &#1251;
-u0418_0308 24 0 0x04E4 &#1252;
-u0438_0308 24 0 0x04E5 &#1253;
-u041E_0308 24 0 0x04E6 &#1254;
-u043E_0308 24 0 0x04E7 &#1255;
-u04E8 24 0 0x04E8 &#1256;
-u04E9 24 0 0x04E9 &#1257;
-u04E8_0308 24 0 0x04EA &#1258;
-u04E9_0308 24 0 0x04EB &#1259;
-u042D_0308 24 0 0x04EC &#1260;
-u044D_0308 24 0 0x04ED &#1261;
-u0423_0304 24 0 0x04EE &#1262;
-u0443_0304 24 0 0x04EF &#1263;
-u0423_0308 24 0 0x04F0 &#1264;
-u0443_0308 24 0 0x04F1 &#1265;
-u0423_030B 24 0 0x04F2 &#1266;
-u0443_030B 24 0 0x04F3 &#1267;
-u0427_0308 24 0 0x04F4 &#1268;
-u0447_0308 24 0 0x04F5 &#1269;
-u042B_0308 24 0 0x04F8 &#1272;
-u044B_0308 24 0 0x04F9 &#1273;
-u0500 24 0 0x0500 &#1280;
-u0501 24 0 0x0501 &#1281;
-u0502 24 0 0x0502 &#1282;
-u0503 24 0 0x0503 &#1283;
-u0504 24 0 0x0504 &#1284;
-u0505 24 0 0x0505 &#1285;
-u0506 24 0 0x0506 &#1286;
-u0507 24 0 0x0507 &#1287;
-u0508 24 0 0x0508 &#1288;
-u0509 24 0 0x0509 &#1289;
-u050A 24 0 0x050A &#1290;
-u050B 24 0 0x050B &#1291;
-u050C 24 0 0x050C &#1292;
-u050D 24 0 0x050D &#1293;
-u050E 24 0 0x050E &#1294;
-u050F 24 0 0x050F &#1295;
-en 24 0 0x2013 &ndash;
-em 24 0 0x2014 &mdash;
-` 24 0 0x2018 &lsquo;
-oq "
-' 24 0 0x2019 &rsquo;
-cq "
-bq 24 0 0x201A &sbquo;
-lq 24 0 0x201C &ldquo;
-rq 24 0 0x201D &rdquo;
-Bq 24 0 0x201E &bdquo;
-dg 24 0 0x2020 &dagger;
-dd 24 0 0x2021 &Dagger;
-bu 24 0 0x2022 &bull;
-%0 24 0 0x2030 &permil;
-fm 24 0 0x2032 &prime;
-sd 24 0 0x2033 &Prime;
-fo 24 0 0x2039 &lsaquo;
-fc 24 0 0x203A &rsaquo;
-rn 24 0 0x203E &oline;
-f/ 24 0 0x2044 &frasl;
-Eu 24 0 0x20AC &euro;
-eu "
--h 24 0 0x210F &#8463;
-hbar "
-Im 24 0 0x2111 &image;
-wp 24 0 0x2118 &weierp;
-Re 24 0 0x211C &real;
-tm 24 0 0x2122 &trade;
-Ah 24 0 0x2135 &alefsym;
-18 24 0 0x215B &#8539;
-38 24 0 0x215C &#8540;
-58 24 0 0x215D &#8541;
-78 24 0 0x215E &#8542;
-<- 24 0 0x2190 &larr;
-ua 24 0 0x2191 &uarr;
--> 24 0 0x2192 &rarr;
-da 24 0 0x2193 &darr;
-<> 24 0 0x2194 &harr;
-va 24 0 0x2195 &#8597;
-CR 24 0 0x21B5 &#8629;
-lA 24 0 0x21D0 &lArr;
-uA 24 0 0x21D1 &uArr;
-rA 24 0 0x21D2 &rArr;
-dA 24 0 0x21D3 &dArr;
-hA 24 0 0x21D4 &hArr;
-vA 24 0 0x21D5 &#8661;
-fa 24 0 0x2200 &forall;
-pd 24 0 0x2202 &part;
-te 24 0 0x2203 &exist;
-es 24 0 0x2205 &empty;
-gr 24 0 0x2207 &nabla;
-mo 24 0 0x2208 &isin;
-nm 24 0 0x2209 &notin;
-st 24 0 0x220B &ni;
-product 24 0 0x220F &prod;
-coproduct 24 0 0x2210 &#8720;
-sum 24 0 0x2211 &sum;
-\- 24 0 0x2212 &minus;
-mi "
--+ 24 0 0x2213 &#8723;
-** 24 0 0x2217 &lowast;
-sr 24 0 0x221A &radic;
-sqrt "
-pt 24 0 0x221D &prop;
-if 24 0 0x221E &infin;
-/_ 24 0 0x2220 &ang;
-AN 24 0 0x2227 &and;
-OR 24 0 0x2228 &or;
-ca 24 0 0x2229 &cap;
-cu 24 0 0x222A &cup;
-is 24 0 0x222B &int;
-integral "
-tf 24 0 0x2234 &there4;
-3d "
-ap 24 0 0x223C &sim;
-|= 24 0 0x2243 &#8771;
-=~ 24 0 0x2245 &cong;
-~~ 24 0 0x2248 &asymp;
-~= "
-!= 24 0 0x2260 &ne;
-== 24 0 0x2261 &equiv;
-ne 24 0 0x2262 &#8802;
-<= 24 0 0x2264 &le;
->= 24 0 0x2265 &ge;
-<< 24 0 0x226A &#8810;
->> 24 0 0x226B &#8811;
-sb 24 0 0x2282 &sub;
-sp 24 0 0x2283 &sup;
-nb 24 0 0x2284 &nsub;
-nc 24 0 0x2285 &#8837;
-ib 24 0 0x2286 &sube;
-ip 24 0 0x2287 &supe;
-c+ 24 0 0x2295 &oplus;
-c* 24 0 0x2297 &otimes;
-pp 24 0 0x22A5 &perp;
-md 24 0 0x22C5 &sdot;
-lc 24 0 0x2308 &lceil;
-rc 24 0 0x2309 &rceil;
-lf 24 0 0x230A &lfloor;
-rf 24 0 0x230B &rfloor;
-la 24 0 0x2329 &lang;
-ra 24 0 0x232A &rang;
-parenlefttp 24 0 0x239B &#9115;
-parenleftex 24 0 0x239C &#9116;
-parenleftbt 24 0 0x239D &#9117;
-parenrighttp 24 0 0x239E &#9118;
-parenrightex 24 0 0x239F &#9119;
-parenrightbt 24 0 0x23A0 &#9120;
-bracketlefttp 24 0 0x23A1 &#9121;
-bracketleftex 24 0 0x23A2 &#9122;
-bracketleftbt 24 0 0x23A3 &#9123;
-bracketrighttp 24 0 0x23A4 &#9124;
-bracketrightex 24 0 0x23A5 &#9125;
-bracketrightbt 24 0 0x23A6 &#9126;
-lt 24 0 0x23A7 &#9127;
-bracelefttp "
-lk 24 0 0x23A8 &#9128;
-braceleftmid "
-lb 24 0 0x23A9 &#9129;
-braceleftbt "
-bv 24 0 0x23AA &#9130;
-braceex "
-braceleftex "
-bracerightex "
-rt 24 0 0x23AB &#9131;
-bracerighttp "
-rk 24 0 0x23AC &#9132;
-bracerightmid "
-rb 24 0 0x23AD &#9133;
-bracerightbt "
-u23AE 24 0 0x23AE &#9134;
-an 24 0 0x23AF &#9135;
-br 24 0 0x2502 &#9474;
-sq 24 0 0x25A1 &#9633;
-lz 24 0 0x25CA &loz;
-ci 24 0 0x25CB &#9675;
-lh 24 0 0x261C &#9756;
-rh 24 0 0x261E &#9758;
-SP 24 0 0x2660 &spades;
-CL 24 0 0x2663 &clubs;
-HE 24 0 0x2665 &hearts;
-DI 24 0 0x2666 &diams;
-OK 24 0 0x2713 &#10003;
diff --git a/contrib/groff/font/devlatin1/DESC.proto b/contrib/groff/font/devlatin1/DESC.proto
deleted file mode 100644
index 88399ab16d91..000000000000
--- a/contrib/groff/font/devlatin1/DESC.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-res 240
-hor 24
-vert 40
-unitwidth 10
-sizes 10 0
-fonts 4 R I B BI
-tcommand
-postpro grotty
diff --git a/contrib/groff/font/devlatin1/Makefile.sub b/contrib/groff/font/devlatin1/Makefile.sub
deleted file mode 100644
index 25de3f77290e..000000000000
--- a/contrib/groff/font/devlatin1/Makefile.sub
+++ /dev/null
@@ -1,32 +0,0 @@
-DEV=latin1
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-CLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-$(FONTS): R.proto
- @echo Making $@
- @-rm -f $@
- @(charwidth=`expr $(RES) / $(CPI)` ; \
- sed -e "s/^name [A-Z]*$$/name $@/" \
- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
- -e "s/^internalname .*$$/internalname $@/" \
- -e "/^internalname/s/BI/3/" \
- -e "/^internalname/s/B/2/" \
- -e "/^internalname/s/I/1/" \
- -e "/^internalname .*[^ 0-9]/d" \
- $(srcdir)/R.proto >$@)
-
-DESC: DESC.proto
- @echo Making $@
- @-rm -f $@
- @sed -e "s/^res .*$$/res $(RES)/" \
- -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
- -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
- $(srcdir)/DESC.proto >$@
-
diff --git a/contrib/groff/font/devlatin1/R.proto b/contrib/groff/font/devlatin1/R.proto
deleted file mode 100644
index 92e76056f860..000000000000
--- a/contrib/groff/font/devlatin1/R.proto
+++ /dev/null
@@ -1,322 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
---- 24 0 0000
---- 24 0 0001
---- 24 0 0002
---- 24 0 0003
---- 24 0 0004
---- 24 0 0005
---- 24 0 0006
---- 24 0 0007
---- 24 0 0010
---- 24 0 0011
---- 24 0 0012
---- 24 0 0013
---- 24 0 0014
---- 24 0 0015
---- 24 0 0016
---- 24 0 0017
---- 24 0 0020
---- 24 0 0021
---- 24 0 0022
---- 24 0 0023
---- 24 0 0024
---- 24 0 0025
---- 24 0 0026
---- 24 0 0027
---- 24 0 0030
---- 24 0 0031
---- 24 0 0032
---- 24 0 0033
---- 24 0 0034
---- 24 0 0035
---- 24 0 0036
---- 24 0 0037
-! 24 0 0041
-" 24 0 0042
-dq "
-lq "
-rq "
-# 24 0 0043
-sh "
-$ 24 0 0044
-Do "
-% 24 0 0045
-& 24 0 0046
-' 24 0 0047
-fm "
-aq "
-cq "
-( 24 0 0050
-) 24 0 0051
-* 24 0 0052
-** "
-+ 24 0 0053
-pl "
-, 24 0 0054
-\- 24 0 0055
-mi "
-- "
-hy "
-en "
-. 24 0 0056
-/ 24 0 0057
-sl "
-f/ "
-0 24 0 0060
-1 24 0 0061
-2 24 0 0062
-3 24 0 0063
-4 24 0 0064
-5 24 0 0065
-6 24 0 0066
-7 24 0 0067
-8 24 0 0070
-9 24 0 0071
-: 24 0 0072
-; 24 0 0073
-< 24 0 0074
-la "
-fo "
-= 24 0 0075
-eq "
-> 24 0 0076
-ra "
-fc "
-? 24 0 0077
-@ 24 0 0100
-at "
-A 24 0 0101
-*A "
-B 24 0 0102
-*B "
-C 24 0 0103
-D 24 0 0104
-E 24 0 0105
-*E "
-F 24 0 0106
-G 24 0 0107
-H 24 0 0110
-*Y "
-I 24 0 0111
-*I "
-J 24 0 0112
-K 24 0 0113
-*K "
-L 24 0 0114
-M 24 0 0115
-*M "
-N 24 0 0116
-*N "
-O 24 0 0117
-ci "
-*O "
-P 24 0 0120
-*R "
-Q 24 0 0121
-R 24 0 0122
-S 24 0 0123
-T 24 0 0124
-*T "
-U 24 0 0125
-V 24 0 0126
-W 24 0 0127
-X 24 0 0130
-*X "
-Y 24 0 0131
-*U "
-Z 24 0 0132
-*Z "
-[ 24 0 0133
-lB "
-\ 24 0 0134
-rs "
-] 24 0 0135
-rB "
-a^ 24 0 0136
-^ "
-ha "
-_ 24 0 0137
-ru "
-ul "
-` 24 0 0140
-oq "
-ga "
-a 24 0 0141
-b 24 0 0142
-c 24 0 0143
-d 24 0 0144
-e 24 0 0145
-f 24 0 0146
-g 24 0 0147
-h 24 0 0150
-i 24 0 0151
-j 24 0 0152
-k 24 0 0153
-l 24 0 0154
-m 24 0 0155
-n 24 0 0156
-o 24 0 0157
-*o "
-p 24 0 0160
-q 24 0 0161
-r 24 0 0162
-s 24 0 0163
-t 24 0 0164
-u 24 0 0165
-v 24 0 0166
-w 24 0 0167
-x 24 0 0170
-y 24 0 0171
-z 24 0 0172
-lC 24 0 0173
-{ "
-ba 24 0 0174
-or "
-bv "
-br "
-| "
-rC 24 0 0175
-} "
-a~ 24 0 0176
-~ "
-ap "
-ti "
---- 24 0 0177
---- 24 0 0200
---- 24 0 0201
---- 24 0 0202
---- 24 0 0203
---- 24 0 0204
---- 24 0 0205
---- 24 0 0206
---- 24 0 0207
---- 24 0 0210
---- 24 0 0211
---- 24 0 0212
---- 24 0 0213
---- 24 0 0214
---- 24 0 0215
---- 24 0 0216
---- 24 0 0217
---- 24 0 0220
---- 24 0 0221
---- 24 0 0222
---- 24 0 0223
---- 24 0 0224
---- 24 0 0225
---- 24 0 0226
---- 24 0 0227
---- 24 0 0230
---- 24 0 0231
---- 24 0 0232
---- 24 0 0233
---- 24 0 0234
---- 24 0 0235
---- 24 0 0236
---- 24 0 0237
---- 24 0 0240
-r! 24 0 0241
-ct 24 0 0242
-Po 24 0 0243
-Cs 24 0 0244
-Ye 24 0 0245
-bb 24 0 0246
-sc 24 0 0247
-ad 24 0 0250
-co 24 0 0251
-Of 24 0 0252
-Fo 24 0 0253
-no 24 0 0254
-tno "
-shc 24 0 0255
-rg 24 0 0256
-a- 24 0 0257
-de 24 0 0260
-ao "
-+- 24 0 0261
-t+- "
-S2 24 0 0262
-S3 24 0 0263
-aa 24 0 0264
-*m 24 0 0265
-mc "
-ps 24 0 0266
-pc 24 0 0267
-md "
-ac 24 0 0270
-S1 24 0 0271
-Om 24 0 0272
-Fc 24 0 0273
-14 24 0 0274
-12 24 0 0275
-34 24 0 0276
-r? 24 0 0277
-`A 24 0 0300
-'A 24 0 0301
-^A 24 0 0302
-~A 24 0 0303
-:A 24 0 0304
-oA 24 0 0305
-AE 24 0 0306
-,C 24 0 0307
-`E 24 0 0310
-'E 24 0 0311
-^E 24 0 0312
-:E 24 0 0313
-`I 24 0 0314
-'I 24 0 0315
-^I 24 0 0316
-:I 24 0 0317
--D 24 0 0320
-~N 24 0 0321
-`O 24 0 0322
-'O 24 0 0323
-^O 24 0 0324
-~O 24 0 0325
-:O 24 0 0326
-mu 24 0 0327
-tmu "
-/O 24 0 0330
-`U 24 0 0331
-'U 24 0 0332
-^U 24 0 0333
-:U 24 0 0334
-'Y 24 0 0335
-TP 24 0 0336
-ss 24 0 0337
-`a 24 0 0340
-'a 24 0 0341
-^a 24 0 0342
-~a 24 0 0343
-:a 24 0 0344
-oa 24 0 0345
-ae 24 0 0346
-,c 24 0 0347
-`e 24 0 0350
-'e 24 0 0351
-^e 24 0 0352
-:e 24 0 0353
-`i 24 0 0354
-'i 24 0 0355
-^i 24 0 0356
-:i 24 0 0357
-Sd 24 0 0360
-~n 24 0 0361
-`o 24 0 0362
-'o 24 0 0363
-^o 24 0 0364
-~o 24 0 0365
-:o 24 0 0366
-di 24 0 0367
-tdi "
-/o 24 0 0370
-`u 24 0 0371
-'u 24 0 0372
-^u 24 0 0373
-:u 24 0 0374
-'y 24 0 0375
-Tp 24 0 0376
-:y 24 0 0377
diff --git a/contrib/groff/font/devlbp/CB b/contrib/groff/font/devlbp/CB
deleted file mode 100644
index 1a828a1cd148..000000000000
--- a/contrib/groff/font/devlbp/CB
+++ /dev/null
@@ -1,216 +0,0 @@
-name CB
-lbpname NcourierB
-spacewidth 2200
-slant 0
-charset
-aq 2200 0 0x27 -- 0,39 # quotesingle
-space 2200 0 0x20 -- 0,32
-! 2200 0 0x21 -- 0,33 # exclam
-" 2200 0 0x22 -- 0,34 # quotedbl
-dq 2200 0 0x22 -- 0,34 # quotedbl
-# 2200 0 0x23 -- 0,35 # numbersign
-sh 2200 0 0x23 -- 0,35 # "
-$ 2200 0 0x24 -- 0,36 # dollar
-Do 2200 0 0x24 -- 0,36 # "
-% 2200 0 0x25 -- 0,37 # percent
-& 2200 0 0x26 -- 0,38 # ampersand
-' 2200 0 0x27 -- 0,39 # quoteright
-cq 2200 0 0x27 -- 0,39 # quoteright
-( 2200 0 0x28 -- 0,40 # parenleft
-) 2200 0 0x29 -- 0,41 # parenright
-* 2200 0 0x2a -- 0,42 # asterisk
-+ 2200 0 0x2b -- 0,43 # plus
-, 2200 0 0x2c -- 0,44 # comma
-- 2200 0 0x2d -- 0,45 # hyphen
-\- 2200 0 0x2d -- 0,45 # hyphen
-hy 2200 0 0x2d -- 0,45 # "
-. 2200 0 0x2e -- 0,46 # period
-/ 2200 0 0x2f -- 0,47 # slash
-sl 2200 0 0x2f -- 0,47 # "
-0 2200 0 0x30 -- 0,48 # zero
-1 2200 0 0x31 -- 0,49 # one
-2 2200 0 0x32 -- 0,50 # two
-3 2200 0 0x33 -- 0,51 # three
-4 2200 0 0x34 -- 0,52 # four
-5 2200 0 0x35 -- 0,53 # five
-6 2200 0 0x36 -- 0,54 # six
-7 2200 0 0x37 -- 0,55 # seven
-8 2200 0 0x38 -- 0,56 # eight
-9 2200 0 0x39 -- 0,57 # nine
-: 2200 0 0x3a -- 0,58 # colon
-; 2200 0 0x3b -- 0,59 # semicolon
-< 2200 0 0x3c -- 0,60 # less
-= 2200 0 0x3d -- 0,61 # equal
-> 2200 0 0x3e -- 0,62 # greater
-? 2200 0 0x3f -- 0,63 # question
-@ 2200 0 0x40 -- 0,64 # at
-at 2200 0 0x40 -- 0,64 # "
-A 2200 0 0x41 -- 0,65 # A
-B 2200 0 0x42 -- 0,66 # B
-C 2200 0 0x43 -- 0,67 # C
-D 2200 0 0x44 -- 0,68 # D
-E 2200 0 0x45 -- 0,69 # E
-F 2200 0 0x46 -- 0,70 # F
-G 2200 0 0x47 -- 0,71 # G
-H 2200 0 0x48 -- 0,72 # H
-I 2200 0 0x49 -- 0,73 # I
-J 2200 0 0x4a -- 0,74 # J
-K 2200 0 0x4b -- 0,75 # K
-L 2200 0 0x4c -- 0,76 # L
-M 2200 0 0x4d -- 0,77 # M
-N 2200 0 0x4e -- 0,78 # N
-O 2200 0 0x4f -- 0,79 # O
-P 2200 0 0x50 -- 0,80 # P
-Q 2200 0 0x51 -- 0,81 # Q
-R 2200 0 0x52 -- 0,82 # R
-S 2200 0 0x53 -- 0,83 # S
-T 2200 0 0x54 -- 0,84 # T
-U 2200 0 0x55 -- 0,85 # U
-V 2200 0 0x56 -- 0,86 # V
-W 2200 0 0x57 -- 0,87 # W
-X 2200 0 0x58 -- 0,88 # X
-Y 2200 0 0x59 -- 0,89 # Y
-Z 2200 0 0x5a -- 0,90 # Z
-[ 2200 0 0x5b -- 0,91 # bracketleft
-lB 2200 0 0x5b -- 0,91 # "
-\ 2200 0 0x5c -- 0,92 # backslash
-rs 2200 0 0x5c -- 0,92 # "
-] 2200 0 0x5d -- 0,93 # bracketright
-rB 2200 0 0x5d -- 0,93 # "
-a^ 2200 0 0x5e -- 0,94 # circumflex
-^ 2200 0 0x5e -- 0,94 # "
-_ 2200 0 0x5f -- 0,95 # underscore
-` 2200 0 0x60 -- 0,96 # quoteleft
-oq 2200 0 0x60 -- 0,96 # "
-a 2200 0 0x61 -- 0,97 # a
-b 2200 0 0x62 -- 0,98 # b
-c 2200 0 0x63 -- 0,99 # c
-d 2200 0 0x64 -- 0,100 # d
-e 2200 0 0x65 -- 0,101 # e
-f 2200 0 0x66 -- 0,102 # f
-g 2200 0 0x67 -- 0,103 # g
-h 2200 0 0x68 -- 0,104 # h
-i 2200 0 0x69 -- 0,105 # i
-j 2200 0 0x6a -- 0,106 # j
-k 2200 0 0x6b -- 0,107 # k
-l 2200 0 0x6c -- 0,108 # l
-m 2200 0 0x6d -- 0,109 # m
-n 2200 0 0x6e -- 0,110 # n
-o 2200 0 0x6f -- 0,111 # o
-p 2200 0 0x70 -- 0,112 # p
-q 2200 0 0x71 -- 0,113 # q
-r 2200 0 0x72 -- 0,114 # r
-s 2200 0 0x73 -- 0,115 # s
-t 2200 0 0x74 -- 0,116 # t
-u 2200 0 0x75 -- 0,117 # u
-v 2200 0 0x76 -- 0,118 # v
-w 2200 0 0x77 -- 0,119 # w
-x 2200 0 0x78 -- 0,120 # x
-y 2200 0 0x79 -- 0,121 # y
-z 2200 0 0x7a -- 0,122 # z
-lC 2200 0 0x7b -- 0,123 # braceleft
-{ 2200 0 0x7b -- 0,123 # "
-| 2200 0 0x7c -- 0,124 # "
-rC 2200 0 0x7d -- 0,125 # braceright
-} 2200 0 0x7d -- 0,125 # "
-a~ 2200 0 0x7e -- 0,126 # tilde
-~ 2200 0 0x7e -- 0,126 # "
-AE 2200 0 0x92 -- 1,36 # AE
-ae 2200 0 0x91 -- 1,37 # ae
-'E 2200 0 0x90 -- 1,40 # Eacute
-'a 2200 0 0xa0 -- 1,27 # aacute
-'e 2200 0 0x82 -- 1,41 # eacute
-'i 2200 0 0xa1 -- 1,49 # iacute
-'o 2200 0 0xa2 -- 1,59 # oacute
-'u 2200 0 0x95 -- 1,65 # uacute
-:A 2200 0 0x8e -- 1,30 # Adieresis
-:O 2200 0 0x99 -- 1,62 # Odieresis
-:U 2200 0 0x9a -- 1,70 # Udieresis
-:a 2200 0 0x84 -- 1,31 # adieresis
-:e 2200 0 0x89 -- 1,45 # edieresis
-:i 2200 0 0x8b -- 1,53 # idieresis
-:o 2200 0 0x94 -- 1,63 # odieresis
-:u 2200 0 0x81 -- 1,71 # udieresis
-:y 2200 0 0x98 -- 1,75 # ydieresis
-^a 2200 0 0x83 -- 1,29 # acircumflex
-^e 2200 0 0x88 -- 1,43 # ecircumflex
-^i 2200 0 0x8c -- 1,51 # icircumflex
-^o 2200 0 0x93 -- 1,61 # ocircumflex
-^u 2200 0 0x96 -- 1,69 # ucircumflex
-`a 2200 0 0x85 -- 1,33 # agrave
-`e 2200 0 0x8a -- 1,47 # egrave
-`i 2200 0 0x8d -- 1,55 # igrave
-`o 2200 0 0x95 -- 1,65 # ograve
-`u 2200 0 0x97 -- 1,73 # ugrave
-~A 2200 0 0x28e -- 1,26 # Atilde
-~N 2200 0 0xa5 -- 1,56 # Ntilde
-~a 2200 0 0x284 -- --- # atilde
-~n 2200 0 0xa4 -- 1,57 # ntilde
-,C 2200 0 0x80 -- 1,38 # Ccedilla
-,c 2200 0 0x87 -- 1,39 # ccedilla
-oA 2200 0 0x8f -- 1,34 # Aring
-oa 2200 0 0x86 -- 1,35 # aring
-a^ 2200 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 2200 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 2200 0 0x24 -- 0,36 # dollar
-Po 2200 0 0x9c -- 4,11 # sterling
-Ye 2200 0 0x9d -- 4,12 # yen
-Fn 2200 0 0x9f -- 4,14 # florin
-ct 2200 0 0x9b -- 4,19 # cent
-Fo 2200 0 0xae -- 4,9 # guillemotleft
-r! 2200 0 0xad -- 4,7 # exclamdown
-r? 2200 0 0xa8 -- 4,8 # questiondown
-Of 2200 0 0xa6 -- 4,15 # ordfeminine
-Om 2200 0 0xa7 -- 4,16 # ordmasculine
-S2 2200 0 0xfd -- 4,20 # twosuperior
-<- 2200 0 0x1b -- 6,22 # arrowleft
--> 2200 0 0x1a -- 6,21 # arrowright
-<> 2200 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 2200 0 0x19 -- 6,24 # arrowdown
-ua 2200 0 0x18 -- 6,23 # arrowup
-va 2200 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 2200 0 0xb3 -- 3,9 # bar
-bb 2200 0 0x7c -- 0,124 # brokenbar
-ul 2200 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 2200 0 0x9 -- 4,1 # circle
-bu 2200 0 0x7 -- 4,0 # bullet
-ps 2200 0 0x14 -- 4,5 # paragraph
-sc 2200 0 0x15 -- 4,6 # section
-de 2200 0 0xf8 -- 6,36 # degree
-12 2200 0 0xab -- 4,17 # onehalf
-14 2200 0 0xac -- 4,18 # onequarter
-hy 2200 0 0x2d -- 6,0 # hyphen
-lB 2200 0 0x5b -- 0,91 # bracketleft
-rB 2200 0 0x5d -- 0,93 # bracketright
-lC 2200 0 0x7b -- 0,123 # braceleft
-rC 2200 0 0x7d -- 0,125 # braceright
-aq 2200 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 2200 0 0x40 -- 0,64 # at
-.C1 2200 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 2200 0 0x23 -- 0,35 # numbersign
-sl 2200 0 0x2f -- 0,47 # slash
-rs 2200 0 0x5c -- 0,92 # backslash
-*a 2200 0 0xe0 -- 8,1 # alpha
-*b 2200 0 0xe1 -- 8,3 # beta
-*d 2200 0 0xeb -- 8,9 # delta
-*h 2200 0 0xe9 -- 8,17 # theta
-*m 2200 0 0xe6 -- 8,25 # mu
-*p 2200 0 0xe3 -- 8,33 # pi
-*s 2200 0 0xe5 -- 8,37 # sigma
-*t 2200 0 0xe7 -- 8,41 # tau
-~~ 2200 0 0xf7 -- 6,13 # approxequal
-~= 2200 0 0xf7 -- 6,13 # approxequal
-+- 2200 0 0xf1 -- 6,1 # plusminus
-<= 2200 0 0xf3 -- 6,2 # lessequal
-ca 2200 0 0xef -- 6,16 # intersection "intersection, cap"
--h 2200 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 2200 0 0x5 -- 5,168 # club "club suit"
-SP 2200 0 0x6 -- 5,171 # spade "spade suit"
-HE 2200 0 0x3 -- 5,170 # heart "heart suit"
-DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 2200 0 0xae -- 6,77 # "" "much less"
->> 2200 0 0xaf -- 6,78 # "" "much greater"
-pc 2200 0 0xfa -- 6,32 # periodcentered
-mc 2200 0 0xe6 -- 8,25 # mu
-t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/CI b/contrib/groff/font/devlbp/CI
deleted file mode 100644
index 454bfd144061..000000000000
--- a/contrib/groff/font/devlbp/CI
+++ /dev/null
@@ -1,216 +0,0 @@
-name CI
-lbpname NcourierI
-spacewidth 2200
-slant 0
-charset
-aq 2200 0 0x27 -- 0,39 # quotesingle
-space 2200 0 0x20 -- 0,32
-! 2200 0 0x21 -- 0,33 # exclam
-" 2200 0 0x22 -- 0,34 # quotedbl
-dq 2200 0 0x22 -- 0,34 # quotedbl
-# 2200 0 0x23 -- 0,35 # numbersign
-sh 2200 0 0x23 -- 0,35 # "
-$ 2200 0 0x24 -- 0,36 # dollar
-Do 2200 0 0x24 -- 0,36 # "
-% 2200 0 0x25 -- 0,37 # percent
-& 2200 0 0x26 -- 0,38 # ampersand
-' 2200 0 0x27 -- 0,39 # quoteright
-cq 2200 0 0x27 -- 0,39 # quoteright
-( 2200 0 0x28 -- 0,40 # parenleft
-) 2200 0 0x29 -- 0,41 # parenright
-* 2200 0 0x2a -- 0,42 # asterisk
-+ 2200 0 0x2b -- 0,43 # plus
-, 2200 0 0x2c -- 0,44 # comma
-- 2200 0 0x2d -- 0,45 # hyphen
-\- 2200 0 0x2d -- 0,45 # hyphen
-hy 2200 0 0x2d -- 0,45 # "
-. 2200 0 0x2e -- 0,46 # period
-/ 2200 0 0x2f -- 0,47 # slash
-sl 2200 0 0x2f -- 0,47 # "
-0 2200 0 0x30 -- 0,48 # zero
-1 2200 0 0x31 -- 0,49 # one
-2 2200 0 0x32 -- 0,50 # two
-3 2200 0 0x33 -- 0,51 # three
-4 2200 0 0x34 -- 0,52 # four
-5 2200 0 0x35 -- 0,53 # five
-6 2200 0 0x36 -- 0,54 # six
-7 2200 0 0x37 -- 0,55 # seven
-8 2200 0 0x38 -- 0,56 # eight
-9 2200 0 0x39 -- 0,57 # nine
-: 2200 0 0x3a -- 0,58 # colon
-; 2200 0 0x3b -- 0,59 # semicolon
-< 2200 0 0x3c -- 0,60 # less
-= 2200 0 0x3d -- 0,61 # equal
-> 2200 0 0x3e -- 0,62 # greater
-? 2200 0 0x3f -- 0,63 # question
-@ 2200 0 0x40 -- 0,64 # at
-at 2200 0 0x40 -- 0,64 # "
-A 2200 0 0x41 -- 0,65 # A
-B 2200 0 0x42 -- 0,66 # B
-C 2200 0 0x43 -- 0,67 # C
-D 2200 0 0x44 -- 0,68 # D
-E 2200 0 0x45 -- 0,69 # E
-F 2200 0 0x46 -- 0,70 # F
-G 2200 0 0x47 -- 0,71 # G
-H 2200 0 0x48 -- 0,72 # H
-I 2200 0 0x49 -- 0,73 # I
-J 2200 0 0x4a -- 0,74 # J
-K 2200 0 0x4b -- 0,75 # K
-L 2200 0 0x4c -- 0,76 # L
-M 2200 0 0x4d -- 0,77 # M
-N 2200 0 0x4e -- 0,78 # N
-O 2200 0 0x4f -- 0,79 # O
-P 2200 0 0x50 -- 0,80 # P
-Q 2200 0 0x51 -- 0,81 # Q
-R 2200 0 0x52 -- 0,82 # R
-S 2200 0 0x53 -- 0,83 # S
-T 2200 0 0x54 -- 0,84 # T
-U 2200 0 0x55 -- 0,85 # U
-V 2200 0 0x56 -- 0,86 # V
-W 2200 0 0x57 -- 0,87 # W
-X 2200 0 0x58 -- 0,88 # X
-Y 2200 0 0x59 -- 0,89 # Y
-Z 2200 0 0x5a -- 0,90 # Z
-[ 2200 0 0x5b -- 0,91 # bracketleft
-lB 2200 0 0x5b -- 0,91 # "
-\ 2200 0 0x5c -- 0,92 # backslash
-rs 2200 0 0x5c -- 0,92 # "
-] 2200 0 0x5d -- 0,93 # bracketright
-rB 2200 0 0x5d -- 0,93 # "
-a^ 2200 0 0x5e -- 0,94 # circumflex
-^ 2200 0 0x5e -- 0,94 # "
-_ 2200 0 0x5f -- 0,95 # underscore
-` 2200 0 0x60 -- 0,96 # quoteleft
-oq 2200 0 0x60 -- 0,96 # "
-a 2200 0 0x61 -- 0,97 # a
-b 2200 0 0x62 -- 0,98 # b
-c 2200 0 0x63 -- 0,99 # c
-d 2200 0 0x64 -- 0,100 # d
-e 2200 0 0x65 -- 0,101 # e
-f 2200 0 0x66 -- 0,102 # f
-g 2200 0 0x67 -- 0,103 # g
-h 2200 0 0x68 -- 0,104 # h
-i 2200 0 0x69 -- 0,105 # i
-j 2200 0 0x6a -- 0,106 # j
-k 2200 0 0x6b -- 0,107 # k
-l 2200 0 0x6c -- 0,108 # l
-m 2200 0 0x6d -- 0,109 # m
-n 2200 0 0x6e -- 0,110 # n
-o 2200 0 0x6f -- 0,111 # o
-p 2200 0 0x70 -- 0,112 # p
-q 2200 0 0x71 -- 0,113 # q
-r 2200 0 0x72 -- 0,114 # r
-s 2200 0 0x73 -- 0,115 # s
-t 2200 0 0x74 -- 0,116 # t
-u 2200 0 0x75 -- 0,117 # u
-v 2200 0 0x76 -- 0,118 # v
-w 2200 0 0x77 -- 0,119 # w
-x 2200 0 0x78 -- 0,120 # x
-y 2200 0 0x79 -- 0,121 # y
-z 2200 0 0x7a -- 0,122 # z
-lC 2200 0 0x7b -- 0,123 # braceleft
-{ 2200 0 0x7b -- 0,123 # "
-| 2200 0 0x7c -- 0,124 # "
-rC 2200 0 0x7d -- 0,125 # braceright
-} 2200 0 0x7d -- 0,125 # "
-a~ 2200 0 0x7e -- 0,126 # tilde
-~ 2200 0 0x7e -- 0,126 # "
-AE 2200 0 0x92 -- 1,36 # AE
-ae 2200 0 0x91 -- 1,37 # ae
-'E 2200 0 0x90 -- 1,40 # Eacute
-'a 2200 0 0xa0 -- 1,27 # aacute
-'e 2200 0 0x82 -- 1,41 # eacute
-'i 2200 0 0xa1 -- 1,49 # iacute
-'o 2200 0 0xa2 -- 1,59 # oacute
-'u 2200 0 0x95 -- 1,65 # uacute
-:A 2200 0 0x8e -- 1,30 # Adieresis
-:O 2200 0 0x99 -- 1,62 # Odieresis
-:U 2200 0 0x9a -- 1,70 # Udieresis
-:a 2200 0 0x84 -- 1,31 # adieresis
-:e 2200 0 0x89 -- 1,45 # edieresis
-:i 2200 0 0x8b -- 1,53 # idieresis
-:o 2200 0 0x94 -- 1,63 # odieresis
-:u 2200 0 0x81 -- 1,71 # udieresis
-:y 2200 0 0x98 -- 1,75 # ydieresis
-^a 2200 0 0x83 -- 1,29 # acircumflex
-^e 2200 0 0x88 -- 1,43 # ecircumflex
-^i 2200 0 0x8c -- 1,51 # icircumflex
-^o 2200 0 0x93 -- 1,61 # ocircumflex
-^u 2200 0 0x96 -- 1,69 # ucircumflex
-`a 2200 0 0x85 -- 1,33 # agrave
-`e 2200 0 0x8a -- 1,47 # egrave
-`i 2200 0 0x8d -- 1,55 # igrave
-`o 2200 0 0x95 -- 1,65 # ograve
-`u 2200 0 0x97 -- 1,73 # ugrave
-~A 2200 0 0x28e -- 1,26 # Atilde
-~N 2200 0 0xa5 -- 1,56 # Ntilde
-~a 2200 0 0x284 -- --- # atilde
-~n 2200 0 0xa4 -- 1,57 # ntilde
-,C 2200 0 0x80 -- 1,38 # Ccedilla
-,c 2200 0 0x87 -- 1,39 # ccedilla
-oA 2200 0 0x8f -- 1,34 # Aring
-oa 2200 0 0x86 -- 1,35 # aring
-a^ 2200 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 2200 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 2200 0 0x24 -- 0,36 # dollar
-Po 2200 0 0x9c -- 4,11 # sterling
-Ye 2200 0 0x9d -- 4,12 # yen
-Fn 2200 0 0x9f -- 4,14 # florin
-ct 2200 0 0x9b -- 4,19 # cent
-Fo 2200 0 0xae -- 4,9 # guillemotleft
-r! 2200 0 0xad -- 4,7 # exclamdown
-r? 2200 0 0xa8 -- 4,8 # questiondown
-Of 2200 0 0xa6 -- 4,15 # ordfeminine
-Om 2200 0 0xa7 -- 4,16 # ordmasculine
-S2 2200 0 0xfd -- 4,20 # twosuperior
-<- 2200 0 0x1b -- 6,22 # arrowleft
--> 2200 0 0x1a -- 6,21 # arrowright
-<> 2200 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 2200 0 0x19 -- 6,24 # arrowdown
-ua 2200 0 0x18 -- 6,23 # arrowup
-va 2200 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 2200 0 0xb3 -- 3,9 # bar
-bb 2200 0 0x7c -- 0,124 # brokenbar
-ul 2200 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 2200 0 0x9 -- 4,1 # circle
-bu 2200 0 0x7 -- 4,0 # bullet
-ps 2200 0 0x14 -- 4,5 # paragraph
-sc 2200 0 0x15 -- 4,6 # section
-de 2200 0 0xf8 -- 6,36 # degree
-12 2200 0 0xab -- 4,17 # onehalf
-14 2200 0 0xac -- 4,18 # onequarter
-hy 2200 0 0x2d -- 6,0 # hyphen
-lB 2200 0 0x5b -- 0,91 # bracketleft
-rB 2200 0 0x5d -- 0,93 # bracketright
-lC 2200 0 0x7b -- 0,123 # braceleft
-rC 2200 0 0x7d -- 0,125 # braceright
-aq 2200 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 2200 0 0x40 -- 0,64 # at
-.C1 2200 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 2200 0 0x23 -- 0,35 # numbersign
-sl 2200 0 0x2f -- 0,47 # slash
-rs 2200 0 0x5c -- 0,92 # backslash
-*a 2200 0 0xe0 -- 8,1 # alpha
-*b 2200 0 0xe1 -- 8,3 # beta
-*d 2200 0 0xeb -- 8,9 # delta
-*h 2200 0 0xe9 -- 8,17 # theta
-*m 2200 0 0xe6 -- 8,25 # mu
-*p 2200 0 0xe3 -- 8,33 # pi
-*s 2200 0 0xe5 -- 8,37 # sigma
-*t 2200 0 0xe7 -- 8,41 # tau
-~~ 2200 0 0xf7 -- 6,13 # approxequal
-~= 2200 0 0xf7 -- 6,13 # approxequal
-+- 2200 0 0xf1 -- 6,1 # plusminus
-<= 2200 0 0xf3 -- 6,2 # lessequal
-ca 2200 0 0xef -- 6,16 # intersection "intersection, cap"
--h 2200 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 2200 0 0x5 -- 5,168 # club "club suit"
-SP 2200 0 0x6 -- 5,171 # spade "spade suit"
-HE 2200 0 0x3 -- 5,170 # heart "heart suit"
-DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 2200 0 0xae -- 6,77 # "" "much less"
->> 2200 0 0xaf -- 6,78 # "" "much greater"
-pc 2200 0 0xfa -- 6,32 # periodcentered
-mc 2200 0 0xe6 -- 8,25 # mu
-t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/CR b/contrib/groff/font/devlbp/CR
deleted file mode 100644
index 4799995b9eb0..000000000000
--- a/contrib/groff/font/devlbp/CR
+++ /dev/null
@@ -1,216 +0,0 @@
-name CR
-lbpname NcourierR
-spacewidth 2200
-slant 0
-charset
-aq 2200 0 0x27 -- 0,39 # quotesingle
-space 2200 0 0x20 -- 0,32
-! 2200 0 0x21 -- 0,33 # exclam
-" 2200 0 0x22 -- 0,34 # quotedbl
-dq 2200 0 0x22 -- 0,34 # quotedbl
-# 2200 0 0x23 -- 0,35 # numbersign
-sh 2200 0 0x23 -- 0,35 # "
-$ 2200 0 0x24 -- 0,36 # dollar
-Do 2200 0 0x24 -- 0,36 # "
-% 2200 0 0x25 -- 0,37 # percent
-& 2200 0 0x26 -- 0,38 # ampersand
-' 2200 0 0x27 -- 0,39 # quoteright
-cq 2200 0 0x27 -- 0,39 # quoteright
-( 2200 0 0x28 -- 0,40 # parenleft
-) 2200 0 0x29 -- 0,41 # parenright
-* 2200 0 0x2a -- 0,42 # asterisk
-+ 2200 0 0x2b -- 0,43 # plus
-, 2200 0 0x2c -- 0,44 # comma
-- 2200 0 0x2d -- 0,45 # hyphen
-\- 2200 0 0x2d -- 0,45 # hyphen
-hy 2200 0 0x2d -- 0,45 # "
-. 2200 0 0x2e -- 0,46 # period
-/ 2200 0 0x2f -- 0,47 # slash
-sl 2200 0 0x2f -- 0,47 # "
-0 2200 0 0x30 -- 0,48 # zero
-1 2200 0 0x31 -- 0,49 # one
-2 2200 0 0x32 -- 0,50 # two
-3 2200 0 0x33 -- 0,51 # three
-4 2200 0 0x34 -- 0,52 # four
-5 2200 0 0x35 -- 0,53 # five
-6 2200 0 0x36 -- 0,54 # six
-7 2200 0 0x37 -- 0,55 # seven
-8 2200 0 0x38 -- 0,56 # eight
-9 2200 0 0x39 -- 0,57 # nine
-: 2200 0 0x3a -- 0,58 # colon
-; 2200 0 0x3b -- 0,59 # semicolon
-< 2200 0 0x3c -- 0,60 # less
-= 2200 0 0x3d -- 0,61 # equal
-> 2200 0 0x3e -- 0,62 # greater
-? 2200 0 0x3f -- 0,63 # question
-@ 2200 0 0x40 -- 0,64 # at
-at 2200 0 0x40 -- 0,64 # "
-A 2200 0 0x41 -- 0,65 # A
-B 2200 0 0x42 -- 0,66 # B
-C 2200 0 0x43 -- 0,67 # C
-D 2200 0 0x44 -- 0,68 # D
-E 2200 0 0x45 -- 0,69 # E
-F 2200 0 0x46 -- 0,70 # F
-G 2200 0 0x47 -- 0,71 # G
-H 2200 0 0x48 -- 0,72 # H
-I 2200 0 0x49 -- 0,73 # I
-J 2200 0 0x4a -- 0,74 # J
-K 2200 0 0x4b -- 0,75 # K
-L 2200 0 0x4c -- 0,76 # L
-M 2200 0 0x4d -- 0,77 # M
-N 2200 0 0x4e -- 0,78 # N
-O 2200 0 0x4f -- 0,79 # O
-P 2200 0 0x50 -- 0,80 # P
-Q 2200 0 0x51 -- 0,81 # Q
-R 2200 0 0x52 -- 0,82 # R
-S 2200 0 0x53 -- 0,83 # S
-T 2200 0 0x54 -- 0,84 # T
-U 2200 0 0x55 -- 0,85 # U
-V 2200 0 0x56 -- 0,86 # V
-W 2200 0 0x57 -- 0,87 # W
-X 2200 0 0x58 -- 0,88 # X
-Y 2200 0 0x59 -- 0,89 # Y
-Z 2200 0 0x5a -- 0,90 # Z
-[ 2200 0 0x5b -- 0,91 # bracketleft
-lB 2200 0 0x5b -- 0,91 # "
-\ 2200 0 0x5c -- 0,92 # backslash
-rs 2200 0 0x5c -- 0,92 # "
-] 2200 0 0x5d -- 0,93 # bracketright
-rB 2200 0 0x5d -- 0,93 # "
-a^ 2200 0 0x5e -- 0,94 # circumflex
-^ 2200 0 0x5e -- 0,94 # "
-_ 2200 0 0x5f -- 0,95 # underscore
-` 2200 0 0x60 -- 0,96 # quoteleft
-oq 2200 0 0x60 -- 0,96 # "
-a 2200 0 0x61 -- 0,97 # a
-b 2200 0 0x62 -- 0,98 # b
-c 2200 0 0x63 -- 0,99 # c
-d 2200 0 0x64 -- 0,100 # d
-e 2200 0 0x65 -- 0,101 # e
-f 2200 0 0x66 -- 0,102 # f
-g 2200 0 0x67 -- 0,103 # g
-h 2200 0 0x68 -- 0,104 # h
-i 2200 0 0x69 -- 0,105 # i
-j 2200 0 0x6a -- 0,106 # j
-k 2200 0 0x6b -- 0,107 # k
-l 2200 0 0x6c -- 0,108 # l
-m 2200 0 0x6d -- 0,109 # m
-n 2200 0 0x6e -- 0,110 # n
-o 2200 0 0x6f -- 0,111 # o
-p 2200 0 0x70 -- 0,112 # p
-q 2200 0 0x71 -- 0,113 # q
-r 2200 0 0x72 -- 0,114 # r
-s 2200 0 0x73 -- 0,115 # s
-t 2200 0 0x74 -- 0,116 # t
-u 2200 0 0x75 -- 0,117 # u
-v 2200 0 0x76 -- 0,118 # v
-w 2200 0 0x77 -- 0,119 # w
-x 2200 0 0x78 -- 0,120 # x
-y 2200 0 0x79 -- 0,121 # y
-z 2200 0 0x7a -- 0,122 # z
-lC 2200 0 0x7b -- 0,123 # braceleft
-{ 2200 0 0x7b -- 0,123 # "
-| 2200 0 0x7c -- 0,124 # "
-rC 2200 0 0x7d -- 0,125 # braceright
-} 2200 0 0x7d -- 0,125 # "
-a~ 2200 0 0x7e -- 0,126 # tilde
-~ 2200 0 0x7e -- 0,126 # "
-AE 2200 0 0x92 -- 1,36 # AE
-ae 2200 0 0x91 -- 1,37 # ae
-'E 2200 0 0x90 -- 1,40 # Eacute
-'a 2200 0 0xa0 -- 1,27 # aacute
-'e 2200 0 0x82 -- 1,41 # eacute
-'i 2200 0 0xa1 -- 1,49 # iacute
-'o 2200 0 0xa2 -- 1,59 # oacute
-'u 2200 0 0x95 -- 1,65 # uacute
-:A 2200 0 0x8e -- 1,30 # Adieresis
-:O 2200 0 0x99 -- 1,62 # Odieresis
-:U 2200 0 0x9a -- 1,70 # Udieresis
-:a 2200 0 0x84 -- 1,31 # adieresis
-:e 2200 0 0x89 -- 1,45 # edieresis
-:i 2200 0 0x8b -- 1,53 # idieresis
-:o 2200 0 0x94 -- 1,63 # odieresis
-:u 2200 0 0x81 -- 1,71 # udieresis
-:y 2200 0 0x98 -- 1,75 # ydieresis
-^a 2200 0 0x83 -- 1,29 # acircumflex
-^e 2200 0 0x88 -- 1,43 # ecircumflex
-^i 2200 0 0x8c -- 1,51 # icircumflex
-^o 2200 0 0x93 -- 1,61 # ocircumflex
-^u 2200 0 0x96 -- 1,69 # ucircumflex
-`a 2200 0 0x85 -- 1,33 # agrave
-`e 2200 0 0x8a -- 1,47 # egrave
-`i 2200 0 0x8d -- 1,55 # igrave
-`o 2200 0 0x95 -- 1,65 # ograve
-`u 2200 0 0x97 -- 1,73 # ugrave
-~A 2200 0 0x28e -- 1,26 # Atilde
-~N 2200 0 0xa5 -- 1,56 # Ntilde
-~a 2200 0 0x284 -- --- # atilde
-~n 2200 0 0xa4 -- 1,57 # ntilde
-,C 2200 0 0x80 -- 1,38 # Ccedilla
-,c 2200 0 0x87 -- 1,39 # ccedilla
-oA 2200 0 0x8f -- 1,34 # Aring
-oa 2200 0 0x86 -- 1,35 # aring
-a^ 2200 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 2200 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 2200 0 0x24 -- 0,36 # dollar
-Po 2200 0 0x9c -- 4,11 # sterling
-Ye 2200 0 0x9d -- 4,12 # yen
-Fn 2200 0 0x9f -- 4,14 # florin
-ct 2200 0 0x9b -- 4,19 # cent
-Fo 2200 0 0xae -- 4,9 # guillemotleft
-r! 2200 0 0xad -- 4,7 # exclamdown
-r? 2200 0 0xa8 -- 4,8 # questiondown
-Of 2200 0 0xa6 -- 4,15 # ordfeminine
-Om 2200 0 0xa7 -- 4,16 # ordmasculine
-S2 2200 0 0xfd -- 4,20 # twosuperior
-<- 2200 0 0x1b -- 6,22 # arrowleft
--> 2200 0 0x1a -- 6,21 # arrowright
-<> 2200 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 2200 0 0x19 -- 6,24 # arrowdown
-ua 2200 0 0x18 -- 6,23 # arrowup
-va 2200 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 2200 0 0xb3 -- 3,9 # bar
-bb 2200 0 0x7c -- 0,124 # brokenbar
-ul 2200 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 2200 0 0x9 -- 4,1 # circle
-bu 2200 0 0x7 -- 4,0 # bullet
-ps 2200 0 0x14 -- 4,5 # paragraph
-sc 2200 0 0x15 -- 4,6 # section
-de 2200 0 0xf8 -- 6,36 # degree
-12 2200 0 0xab -- 4,17 # onehalf
-14 2200 0 0xac -- 4,18 # onequarter
-hy 2200 0 0x2d -- 6,0 # hyphen
-lB 2200 0 0x5b -- 0,91 # bracketleft
-rB 2200 0 0x5d -- 0,93 # bracketright
-lC 2200 0 0x7b -- 0,123 # braceleft
-rC 2200 0 0x7d -- 0,125 # braceright
-aq 2200 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 2200 0 0x40 -- 0,64 # at
-.C1 2200 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 2200 0 0x23 -- 0,35 # numbersign
-sl 2200 0 0x2f -- 0,47 # slash
-rs 2200 0 0x5c -- 0,92 # backslash
-*a 2200 0 0xe0 -- 8,1 # alpha
-*b 2200 0 0xe1 -- 8,3 # beta
-*d 2200 0 0xeb -- 8,9 # delta
-*h 2200 0 0xe9 -- 8,17 # theta
-*m 2200 0 0xe6 -- 8,25 # mu
-*p 2200 0 0xe3 -- 8,33 # pi
-*s 2200 0 0xe5 -- 8,37 # sigma
-*t 2200 0 0xe7 -- 8,41 # tau
-~~ 2200 0 0xf7 -- 6,13 # approxequal
-~= 2200 0 0xf7 -- 6,13 # approxequal
-+- 2200 0 0xf1 -- 6,1 # plusminus
-<= 2200 0 0xf3 -- 6,2 # lessequal
-ca 2200 0 0xef -- 6,16 # intersection "intersection, cap"
--h 2200 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 2200 0 0x5 -- 5,168 # club "club suit"
-SP 2200 0 0x6 -- 5,171 # spade "spade suit"
-HE 2200 0 0x3 -- 5,170 # heart "heart suit"
-DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 2200 0 0xae -- 6,77 # "" "much less"
->> 2200 0 0xaf -- 6,78 # "" "much greater"
-pc 2200 0 0xfa -- 6,32 # periodcentered
-mc 2200 0 0xe6 -- 8,25 # mu
-t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/DESC.in b/contrib/groff/font/devlbp/DESC.in
deleted file mode 100644
index eb5d6f24ed0e..000000000000
--- a/contrib/groff/font/devlbp/DESC.in
+++ /dev/null
@@ -1,9 +0,0 @@
-res 300
-unitwidth 800
-family T
-styles R I B BI
-sizes 1-1000 0
-fonts 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-tcommand
-orientation portrait
-postpro grolbp
diff --git a/contrib/groff/font/devlbp/EB b/contrib/groff/font/devlbp/EB
deleted file mode 100644
index d3f232284bf1..000000000000
--- a/contrib/groff/font/devlbp/EB
+++ /dev/null
@@ -1,216 +0,0 @@
-name EB
-lbpname NeliteB
-spacewidth 1900
-slant 0
-charset
-aq 1900 0 0x27 -- 0,39 # quotesingle
-space 1900 0 0x20 -- 0,32
-! 1900 0 0x21 -- 0,33 # exclam
-" 1900 0 0x22 -- 0,34 # quotedbl
-dq 1900 0 0x22 -- 0,34 # quotedbl
-# 1900 0 0x23 -- 0,35 # numbersign
-sh 1900 0 0x23 -- 0,35 # "
-$ 1900 0 0x24 -- 0,36 # dollar
-Do 1900 0 0x24 -- 0,36 # "
-% 1900 0 0x25 -- 0,37 # percent
-& 1900 0 0x26 -- 0,38 # ampersand
-' 1900 0 0x27 -- 0,39 # quoteright
-cq 1900 0 0x27 -- 0,39 # quoteright
-( 1900 0 0x28 -- 0,40 # parenleft
-) 1900 0 0x29 -- 0,41 # parenright
-* 1900 0 0x2a -- 0,42 # asterisk
-+ 1900 0 0x2b -- 0,43 # plus
-, 1900 0 0x2c -- 0,44 # comma
-- 1900 0 0x2d -- 0,45 # hyphen
-\- 1900 0 0x2d -- 0,45 # hyphen
-hy 1900 0 0x2d -- 0,45 # "
-. 1900 0 0x2e -- 0,46 # period
-/ 1900 0 0x2f -- 0,47 # slash
-sl 1900 0 0x2f -- 0,47 # "
-0 1900 0 0x30 -- 0,48 # zero
-1 1900 0 0x31 -- 0,49 # one
-2 1900 0 0x32 -- 0,50 # two
-3 1900 0 0x33 -- 0,51 # three
-4 1900 0 0x34 -- 0,52 # four
-5 1900 0 0x35 -- 0,53 # five
-6 1900 0 0x36 -- 0,54 # six
-7 1900 0 0x37 -- 0,55 # seven
-8 1900 0 0x38 -- 0,56 # eight
-9 1900 0 0x39 -- 0,57 # nine
-: 1900 0 0x3a -- 0,58 # colon
-; 1900 0 0x3b -- 0,59 # semicolon
-< 1900 0 0x3c -- 0,60 # less
-= 1900 0 0x3d -- 0,61 # equal
-> 1900 0 0x3e -- 0,62 # greater
-? 1900 0 0x3f -- 0,63 # question
-@ 1900 0 0x40 -- 0,64 # at
-at 1900 0 0x40 -- 0,64 # "
-A 1900 0 0x41 -- 0,65 # A
-B 1900 0 0x42 -- 0,66 # B
-C 1900 0 0x43 -- 0,67 # C
-D 1900 0 0x44 -- 0,68 # D
-E 1900 0 0x45 -- 0,69 # E
-F 1900 0 0x46 -- 0,70 # F
-G 1900 0 0x47 -- 0,71 # G
-H 1900 0 0x48 -- 0,72 # H
-I 1900 0 0x49 -- 0,73 # I
-J 1900 0 0x4a -- 0,74 # J
-K 1900 0 0x4b -- 0,75 # K
-L 1900 0 0x4c -- 0,76 # L
-M 1900 0 0x4d -- 0,77 # M
-N 1900 0 0x4e -- 0,78 # N
-O 1900 0 0x4f -- 0,79 # O
-P 1900 0 0x50 -- 0,80 # P
-Q 1900 0 0x51 -- 0,81 # Q
-R 1900 0 0x52 -- 0,82 # R
-S 1900 0 0x53 -- 0,83 # S
-T 1900 0 0x54 -- 0,84 # T
-U 1900 0 0x55 -- 0,85 # U
-V 1900 0 0x56 -- 0,86 # V
-W 1900 0 0x57 -- 0,87 # W
-X 1900 0 0x58 -- 0,88 # X
-Y 1900 0 0x59 -- 0,89 # Y
-Z 1900 0 0x5a -- 0,90 # Z
-[ 1900 0 0x5b -- 0,91 # bracketleft
-lB 1900 0 0x5b -- 0,91 # "
-\ 1900 0 0x5c -- 0,92 # backslash
-rs 1900 0 0x5c -- 0,92 # "
-] 1900 0 0x5d -- 0,93 # bracketright
-rB 1900 0 0x5d -- 0,93 # "
-a^ 1900 0 0x5e -- 0,94 # circumflex
-^ 1900 0 0x5e -- 0,94 # "
-_ 1900 0 0x5f -- 0,95 # underscore
-` 1900 0 0x60 -- 0,96 # quoteleft
-oq 1900 0 0x60 -- 0,96 # "
-a 1900 0 0x61 -- 0,97 # a
-b 1900 0 0x62 -- 0,98 # b
-c 1900 0 0x63 -- 0,99 # c
-d 1900 0 0x64 -- 0,100 # d
-e 1900 0 0x65 -- 0,101 # e
-f 1900 0 0x66 -- 0,102 # f
-g 1900 0 0x67 -- 0,103 # g
-h 1900 0 0x68 -- 0,104 # h
-i 1900 0 0x69 -- 0,105 # i
-j 1900 0 0x6a -- 0,106 # j
-k 1900 0 0x6b -- 0,107 # k
-l 1900 0 0x6c -- 0,108 # l
-m 1900 0 0x6d -- 0,109 # m
-n 1900 0 0x6e -- 0,110 # n
-o 1900 0 0x6f -- 0,111 # o
-p 1900 0 0x70 -- 0,112 # p
-q 1900 0 0x71 -- 0,113 # q
-r 1900 0 0x72 -- 0,114 # r
-s 1900 0 0x73 -- 0,115 # s
-t 1900 0 0x74 -- 0,116 # t
-u 1900 0 0x75 -- 0,117 # u
-v 1900 0 0x76 -- 0,118 # v
-w 1900 0 0x77 -- 0,119 # w
-x 1900 0 0x78 -- 0,120 # x
-y 1900 0 0x79 -- 0,121 # y
-z 1900 0 0x7a -- 0,122 # z
-lC 1900 0 0x7b -- 0,123 # braceleft
-{ 1900 0 0x7b -- 0,123 # "
-| 1900 0 0x7c -- 0,124 # "
-rC 1900 0 0x7d -- 0,125 # braceright
-} 1900 0 0x7d -- 0,125 # "
-a~ 1900 0 0x7e -- 0,126 # tilde
-~ 1900 0 0x7e -- 0,126 # "
-AE 1900 0 0x92 -- 1,36 # AE
-ae 1900 0 0x91 -- 1,37 # ae
-'E 1900 0 0x90 -- 1,40 # Eacute
-'a 1900 0 0xa0 -- 1,27 # aacute
-'e 1900 0 0x82 -- 1,41 # eacute
-'i 1900 0 0xa1 -- 1,49 # iacute
-'o 1900 0 0xa2 -- 1,59 # oacute
-'u 1900 0 0x95 -- 1,65 # uacute
-:A 1900 0 0x8e -- 1,30 # Adieresis
-:O 1900 0 0x99 -- 1,62 # Odieresis
-:U 1900 0 0x9a -- 1,70 # Udieresis
-:a 1900 0 0x84 -- 1,31 # adieresis
-:e 1900 0 0x89 -- 1,45 # edieresis
-:i 1900 0 0x8b -- 1,53 # idieresis
-:o 1900 0 0x94 -- 1,63 # odieresis
-:u 1900 0 0x81 -- 1,71 # udieresis
-:y 1900 0 0x98 -- 1,75 # ydieresis
-^a 1900 0 0x83 -- 1,29 # acircumflex
-^e 1900 0 0x88 -- 1,43 # ecircumflex
-^i 1900 0 0x8c -- 1,51 # icircumflex
-^o 1900 0 0x93 -- 1,61 # ocircumflex
-^u 1900 0 0x96 -- 1,69 # ucircumflex
-`a 1900 0 0x85 -- 1,33 # agrave
-`e 1900 0 0x8a -- 1,47 # egrave
-`i 1900 0 0x8d -- 1,55 # igrave
-`o 1900 0 0x95 -- 1,65 # ograve
-`u 1900 0 0x97 -- 1,73 # ugrave
-~A 1900 0 0x28e -- 1,26 # Atilde
-~N 1900 0 0xa5 -- 1,56 # Ntilde
-~a 1900 0 0x284 -- --- # atilde
-~n 1900 0 0xa4 -- 1,57 # ntilde
-,C 1900 0 0x80 -- 1,38 # Ccedilla
-,c 1900 0 0x87 -- 1,39 # ccedilla
-oA 1900 0 0x8f -- 1,34 # Aring
-oa 1900 0 0x86 -- 1,35 # aring
-a^ 1900 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 1900 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 1900 0 0x24 -- 0,36 # dollar
-Po 1900 0 0x9c -- 4,11 # sterling
-Ye 1900 0 0x9d -- 4,12 # yen
-Fn 1900 0 0x9f -- 4,14 # florin
-ct 1900 0 0x9b -- 4,19 # cent
-Fo 1900 0 0xae -- 4,9 # guillemotleft
-r! 1900 0 0xad -- 4,7 # exclamdown
-r? 1900 0 0xa8 -- 4,8 # questiondown
-Of 1900 0 0xa6 -- 4,15 # ordfeminine
-Om 1900 0 0xa7 -- 4,16 # ordmasculine
-S2 1900 0 0xfd -- 4,20 # twosuperior
-<- 1900 0 0x1b -- 6,22 # arrowleft
--> 1900 0 0x1a -- 6,21 # arrowright
-<> 1900 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 1900 0 0x19 -- 6,24 # arrowdown
-ua 1900 0 0x18 -- 6,23 # arrowup
-va 1900 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 1900 0 0xb3 -- 3,9 # bar
-bb 1900 0 0x7c -- 0,124 # brokenbar
-ul 1900 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 1900 0 0x9 -- 4,1 # circle
-bu 1900 0 0x7 -- 4,0 # bullet
-ps 1900 0 0x14 -- 4,5 # paragraph
-sc 1900 0 0x15 -- 4,6 # section
-de 1900 0 0xf8 -- 6,36 # degree
-12 1900 0 0xab -- 4,17 # onehalf
-14 1900 0 0xac -- 4,18 # onequarter
-hy 1900 0 0x2d -- 6,0 # hyphen
-lB 1900 0 0x5b -- 0,91 # bracketleft
-rB 1900 0 0x5d -- 0,93 # bracketright
-lC 1900 0 0x7b -- 0,123 # braceleft
-rC 1900 0 0x7d -- 0,125 # braceright
-aq 1900 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 1900 0 0x40 -- 0,64 # at
-.C1 1900 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 1900 0 0x23 -- 0,35 # numbersign
-sl 1900 0 0x2f -- 0,47 # slash
-rs 1900 0 0x5c -- 0,92 # backslash
-*a 1900 0 0xe0 -- 8,1 # alpha
-*b 1900 0 0xe1 -- 8,3 # beta
-*d 1900 0 0xeb -- 8,9 # delta
-*h 1900 0 0xe9 -- 8,17 # theta
-*m 1900 0 0xe6 -- 8,25 # mu
-*p 1900 0 0xe3 -- 8,33 # pi
-*s 1900 0 0xe5 -- 8,37 # sigma
-*t 1900 0 0xe7 -- 8,41 # tau
-~~ 1900 0 0xf7 -- 6,13 # approxequal
-~= 1900 0 0xf7 -- 6,13 # approxequal
-+- 1900 0 0xf1 -- 6,1 # plusminus
-<= 1900 0 0xf3 -- 6,2 # lessequal
-ca 1900 0 0xef -- 6,16 # intersection "intersection, cap"
--h 1900 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 1900 0 0x5 -- 5,168 # club "club suit"
-SP 1900 0 0x6 -- 5,171 # spade "spade suit"
-HE 1900 0 0x3 -- 5,170 # heart "heart suit"
-DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 1900 0 0xae -- 6,77 # "" "much less"
->> 1900 0 0xaf -- 6,78 # "" "much greater"
-pc 1900 0 0xfa -- 6,32 # periodcentered
-mc 1900 0 0xe6 -- 8,25 # mu
-t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/EI b/contrib/groff/font/devlbp/EI
deleted file mode 100644
index 372e3520f28a..000000000000
--- a/contrib/groff/font/devlbp/EI
+++ /dev/null
@@ -1,216 +0,0 @@
-name EI
-lbpname NeliteI
-spacewidth 1900
-slant 0
-charset
-aq 1900 0 0x27 -- 0,39 # quotesingle
-space 1900 0 0x20 -- 0,32
-! 1900 0 0x21 -- 0,33 # exclam
-" 1900 0 0x22 -- 0,34 # quotedbl
-dq 1900 0 0x22 -- 0,34 # quotedbl
-# 1900 0 0x23 -- 0,35 # numbersign
-sh 1900 0 0x23 -- 0,35 # "
-$ 1900 0 0x24 -- 0,36 # dollar
-Do 1900 0 0x24 -- 0,36 # "
-% 1900 0 0x25 -- 0,37 # percent
-& 1900 0 0x26 -- 0,38 # ampersand
-' 1900 0 0x27 -- 0,39 # quoteright
-cq 1900 0 0x27 -- 0,39 # quoteright
-( 1900 0 0x28 -- 0,40 # parenleft
-) 1900 0 0x29 -- 0,41 # parenright
-* 1900 0 0x2a -- 0,42 # asterisk
-+ 1900 0 0x2b -- 0,43 # plus
-, 1900 0 0x2c -- 0,44 # comma
-- 1900 0 0x2d -- 0,45 # hyphen
-\- 1900 0 0x2d -- 0,45 # hyphen
-hy 1900 0 0x2d -- 0,45 # "
-. 1900 0 0x2e -- 0,46 # period
-/ 1900 0 0x2f -- 0,47 # slash
-sl 1900 0 0x2f -- 0,47 # "
-0 1900 0 0x30 -- 0,48 # zero
-1 1900 0 0x31 -- 0,49 # one
-2 1900 0 0x32 -- 0,50 # two
-3 1900 0 0x33 -- 0,51 # three
-4 1900 0 0x34 -- 0,52 # four
-5 1900 0 0x35 -- 0,53 # five
-6 1900 0 0x36 -- 0,54 # six
-7 1900 0 0x37 -- 0,55 # seven
-8 1900 0 0x38 -- 0,56 # eight
-9 1900 0 0x39 -- 0,57 # nine
-: 1900 0 0x3a -- 0,58 # colon
-; 1900 0 0x3b -- 0,59 # semicolon
-< 1900 0 0x3c -- 0,60 # less
-= 1900 0 0x3d -- 0,61 # equal
-> 1900 0 0x3e -- 0,62 # greater
-? 1900 0 0x3f -- 0,63 # question
-@ 1900 0 0x40 -- 0,64 # at
-at 1900 0 0x40 -- 0,64 # "
-A 1900 0 0x41 -- 0,65 # A
-B 1900 0 0x42 -- 0,66 # B
-C 1900 0 0x43 -- 0,67 # C
-D 1900 0 0x44 -- 0,68 # D
-E 1900 0 0x45 -- 0,69 # E
-F 1900 0 0x46 -- 0,70 # F
-G 1900 0 0x47 -- 0,71 # G
-H 1900 0 0x48 -- 0,72 # H
-I 1900 0 0x49 -- 0,73 # I
-J 1900 0 0x4a -- 0,74 # J
-K 1900 0 0x4b -- 0,75 # K
-L 1900 0 0x4c -- 0,76 # L
-M 1900 0 0x4d -- 0,77 # M
-N 1900 0 0x4e -- 0,78 # N
-O 1900 0 0x4f -- 0,79 # O
-P 1900 0 0x50 -- 0,80 # P
-Q 1900 0 0x51 -- 0,81 # Q
-R 1900 0 0x52 -- 0,82 # R
-S 1900 0 0x53 -- 0,83 # S
-T 1900 0 0x54 -- 0,84 # T
-U 1900 0 0x55 -- 0,85 # U
-V 1900 0 0x56 -- 0,86 # V
-W 1900 0 0x57 -- 0,87 # W
-X 1900 0 0x58 -- 0,88 # X
-Y 1900 0 0x59 -- 0,89 # Y
-Z 1900 0 0x5a -- 0,90 # Z
-[ 1900 0 0x5b -- 0,91 # bracketleft
-lB 1900 0 0x5b -- 0,91 # "
-\ 1900 0 0x5c -- 0,92 # backslash
-rs 1900 0 0x5c -- 0,92 # "
-] 1900 0 0x5d -- 0,93 # bracketright
-rB 1900 0 0x5d -- 0,93 # "
-a^ 1900 0 0x5e -- 0,94 # circumflex
-^ 1900 0 0x5e -- 0,94 # "
-_ 1900 0 0x5f -- 0,95 # underscore
-` 1900 0 0x60 -- 0,96 # quoteleft
-oq 1900 0 0x60 -- 0,96 # "
-a 1900 0 0x61 -- 0,97 # a
-b 1900 0 0x62 -- 0,98 # b
-c 1900 0 0x63 -- 0,99 # c
-d 1900 0 0x64 -- 0,100 # d
-e 1900 0 0x65 -- 0,101 # e
-f 1900 0 0x66 -- 0,102 # f
-g 1900 0 0x67 -- 0,103 # g
-h 1900 0 0x68 -- 0,104 # h
-i 1900 0 0x69 -- 0,105 # i
-j 1900 0 0x6a -- 0,106 # j
-k 1900 0 0x6b -- 0,107 # k
-l 1900 0 0x6c -- 0,108 # l
-m 1900 0 0x6d -- 0,109 # m
-n 1900 0 0x6e -- 0,110 # n
-o 1900 0 0x6f -- 0,111 # o
-p 1900 0 0x70 -- 0,112 # p
-q 1900 0 0x71 -- 0,113 # q
-r 1900 0 0x72 -- 0,114 # r
-s 1900 0 0x73 -- 0,115 # s
-t 1900 0 0x74 -- 0,116 # t
-u 1900 0 0x75 -- 0,117 # u
-v 1900 0 0x76 -- 0,118 # v
-w 1900 0 0x77 -- 0,119 # w
-x 1900 0 0x78 -- 0,120 # x
-y 1900 0 0x79 -- 0,121 # y
-z 1900 0 0x7a -- 0,122 # z
-lC 1900 0 0x7b -- 0,123 # braceleft
-{ 1900 0 0x7b -- 0,123 # "
-| 1900 0 0x7c -- 0,124 # "
-rC 1900 0 0x7d -- 0,125 # braceright
-} 1900 0 0x7d -- 0,125 # "
-a~ 1900 0 0x7e -- 0,126 # tilde
-~ 1900 0 0x7e -- 0,126 # "
-AE 1900 0 0x92 -- 1,36 # AE
-ae 1900 0 0x91 -- 1,37 # ae
-'E 1900 0 0x90 -- 1,40 # Eacute
-'a 1900 0 0xa0 -- 1,27 # aacute
-'e 1900 0 0x82 -- 1,41 # eacute
-'i 1900 0 0xa1 -- 1,49 # iacute
-'o 1900 0 0xa2 -- 1,59 # oacute
-'u 1900 0 0x95 -- 1,65 # uacute
-:A 1900 0 0x8e -- 1,30 # Adieresis
-:O 1900 0 0x99 -- 1,62 # Odieresis
-:U 1900 0 0x9a -- 1,70 # Udieresis
-:a 1900 0 0x84 -- 1,31 # adieresis
-:e 1900 0 0x89 -- 1,45 # edieresis
-:i 1900 0 0x8b -- 1,53 # idieresis
-:o 1900 0 0x94 -- 1,63 # odieresis
-:u 1900 0 0x81 -- 1,71 # udieresis
-:y 1900 0 0x98 -- 1,75 # ydieresis
-^a 1900 0 0x83 -- 1,29 # acircumflex
-^e 1900 0 0x88 -- 1,43 # ecircumflex
-^i 1900 0 0x8c -- 1,51 # icircumflex
-^o 1900 0 0x93 -- 1,61 # ocircumflex
-^u 1900 0 0x96 -- 1,69 # ucircumflex
-`a 1900 0 0x85 -- 1,33 # agrave
-`e 1900 0 0x8a -- 1,47 # egrave
-`i 1900 0 0x8d -- 1,55 # igrave
-`o 1900 0 0x95 -- 1,65 # ograve
-`u 1900 0 0x97 -- 1,73 # ugrave
-~A 1900 0 0x28e -- 1,26 # Atilde
-~N 1900 0 0xa5 -- 1,56 # Ntilde
-~a 1900 0 0x284 -- --- # atilde
-~n 1900 0 0xa4 -- 1,57 # ntilde
-,C 1900 0 0x80 -- 1,38 # Ccedilla
-,c 1900 0 0x87 -- 1,39 # ccedilla
-oA 1900 0 0x8f -- 1,34 # Aring
-oa 1900 0 0x86 -- 1,35 # aring
-a^ 1900 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 1900 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 1900 0 0x24 -- 0,36 # dollar
-Po 1900 0 0x9c -- 4,11 # sterling
-Ye 1900 0 0x9d -- 4,12 # yen
-Fn 1900 0 0x9f -- 4,14 # florin
-ct 1900 0 0x9b -- 4,19 # cent
-Fo 1900 0 0xae -- 4,9 # guillemotleft
-r! 1900 0 0xad -- 4,7 # exclamdown
-r? 1900 0 0xa8 -- 4,8 # questiondown
-Of 1900 0 0xa6 -- 4,15 # ordfeminine
-Om 1900 0 0xa7 -- 4,16 # ordmasculine
-S2 1900 0 0xfd -- 4,20 # twosuperior
-<- 1900 0 0x1b -- 6,22 # arrowleft
--> 1900 0 0x1a -- 6,21 # arrowright
-<> 1900 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 1900 0 0x19 -- 6,24 # arrowdown
-ua 1900 0 0x18 -- 6,23 # arrowup
-va 1900 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 1900 0 0xb3 -- 3,9 # bar
-bb 1900 0 0x7c -- 0,124 # brokenbar
-ul 1900 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 1900 0 0x9 -- 4,1 # circle
-bu 1900 0 0x7 -- 4,0 # bullet
-ps 1900 0 0x14 -- 4,5 # paragraph
-sc 1900 0 0x15 -- 4,6 # section
-de 1900 0 0xf8 -- 6,36 # degree
-12 1900 0 0xab -- 4,17 # onehalf
-14 1900 0 0xac -- 4,18 # onequarter
-hy 1900 0 0x2d -- 6,0 # hyphen
-lB 1900 0 0x5b -- 0,91 # bracketleft
-rB 1900 0 0x5d -- 0,93 # bracketright
-lC 1900 0 0x7b -- 0,123 # braceleft
-rC 1900 0 0x7d -- 0,125 # braceright
-aq 1900 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 1900 0 0x40 -- 0,64 # at
-.C1 1900 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 1900 0 0x23 -- 0,35 # numbersign
-sl 1900 0 0x2f -- 0,47 # slash
-rs 1900 0 0x5c -- 0,92 # backslash
-*a 1900 0 0xe0 -- 8,1 # alpha
-*b 1900 0 0xe1 -- 8,3 # beta
-*d 1900 0 0xeb -- 8,9 # delta
-*h 1900 0 0xe9 -- 8,17 # theta
-*m 1900 0 0xe6 -- 8,25 # mu
-*p 1900 0 0xe3 -- 8,33 # pi
-*s 1900 0 0xe5 -- 8,37 # sigma
-*t 1900 0 0xe7 -- 8,41 # tau
-~~ 1900 0 0xf7 -- 6,13 # approxequal
-~= 1900 0 0xf7 -- 6,13 # approxequal
-+- 1900 0 0xf1 -- 6,1 # plusminus
-<= 1900 0 0xf3 -- 6,2 # lessequal
-ca 1900 0 0xef -- 6,16 # intersection "intersection, cap"
--h 1900 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 1900 0 0x5 -- 5,168 # club "club suit"
-SP 1900 0 0x6 -- 5,171 # spade "spade suit"
-HE 1900 0 0x3 -- 5,170 # heart "heart suit"
-DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 1900 0 0xae -- 6,77 # "" "much less"
->> 1900 0 0xaf -- 6,78 # "" "much greater"
-pc 1900 0 0xfa -- 6,32 # periodcentered
-mc 1900 0 0xe6 -- 8,25 # mu
-t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/ER b/contrib/groff/font/devlbp/ER
deleted file mode 100644
index f384293d5acb..000000000000
--- a/contrib/groff/font/devlbp/ER
+++ /dev/null
@@ -1,216 +0,0 @@
-name ER
-lbpname NeliteR
-spacewidth 1900
-slant 0
-charset
-aq 1900 0 0x27 -- 0,39 # quotesingle
-space 1900 0 0x20 -- 0,32
-! 1900 0 0x21 -- 0,33 # exclam
-" 1900 0 0x22 -- 0,34 # quotedbl
-dq 1900 0 0x22 -- 0,34 # quotedbl
-# 1900 0 0x23 -- 0,35 # numbersign
-sh 1900 0 0x23 -- 0,35 # "
-$ 1900 0 0x24 -- 0,36 # dollar
-Do 1900 0 0x24 -- 0,36 # "
-% 1900 0 0x25 -- 0,37 # percent
-& 1900 0 0x26 -- 0,38 # ampersand
-' 1900 0 0x27 -- 0,39 # quoteright
-cq 1900 0 0x27 -- 0,39 # quoteright
-( 1900 0 0x28 -- 0,40 # parenleft
-) 1900 0 0x29 -- 0,41 # parenright
-* 1900 0 0x2a -- 0,42 # asterisk
-+ 1900 0 0x2b -- 0,43 # plus
-, 1900 0 0x2c -- 0,44 # comma
-- 1900 0 0x2d -- 0,45 # hyphen
-\- 1900 0 0x2d -- 0,45 # hyphen
-hy 1900 0 0x2d -- 0,45 # "
-. 1900 0 0x2e -- 0,46 # period
-/ 1900 0 0x2f -- 0,47 # slash
-sl 1900 0 0x2f -- 0,47 # "
-0 1900 0 0x30 -- 0,48 # zero
-1 1900 0 0x31 -- 0,49 # one
-2 1900 0 0x32 -- 0,50 # two
-3 1900 0 0x33 -- 0,51 # three
-4 1900 0 0x34 -- 0,52 # four
-5 1900 0 0x35 -- 0,53 # five
-6 1900 0 0x36 -- 0,54 # six
-7 1900 0 0x37 -- 0,55 # seven
-8 1900 0 0x38 -- 0,56 # eight
-9 1900 0 0x39 -- 0,57 # nine
-: 1900 0 0x3a -- 0,58 # colon
-; 1900 0 0x3b -- 0,59 # semicolon
-< 1900 0 0x3c -- 0,60 # less
-= 1900 0 0x3d -- 0,61 # equal
-> 1900 0 0x3e -- 0,62 # greater
-? 1900 0 0x3f -- 0,63 # question
-@ 1900 0 0x40 -- 0,64 # at
-at 1900 0 0x40 -- 0,64 # "
-A 1900 0 0x41 -- 0,65 # A
-B 1900 0 0x42 -- 0,66 # B
-C 1900 0 0x43 -- 0,67 # C
-D 1900 0 0x44 -- 0,68 # D
-E 1900 0 0x45 -- 0,69 # E
-F 1900 0 0x46 -- 0,70 # F
-G 1900 0 0x47 -- 0,71 # G
-H 1900 0 0x48 -- 0,72 # H
-I 1900 0 0x49 -- 0,73 # I
-J 1900 0 0x4a -- 0,74 # J
-K 1900 0 0x4b -- 0,75 # K
-L 1900 0 0x4c -- 0,76 # L
-M 1900 0 0x4d -- 0,77 # M
-N 1900 0 0x4e -- 0,78 # N
-O 1900 0 0x4f -- 0,79 # O
-P 1900 0 0x50 -- 0,80 # P
-Q 1900 0 0x51 -- 0,81 # Q
-R 1900 0 0x52 -- 0,82 # R
-S 1900 0 0x53 -- 0,83 # S
-T 1900 0 0x54 -- 0,84 # T
-U 1900 0 0x55 -- 0,85 # U
-V 1900 0 0x56 -- 0,86 # V
-W 1900 0 0x57 -- 0,87 # W
-X 1900 0 0x58 -- 0,88 # X
-Y 1900 0 0x59 -- 0,89 # Y
-Z 1900 0 0x5a -- 0,90 # Z
-[ 1900 0 0x5b -- 0,91 # bracketleft
-lB 1900 0 0x5b -- 0,91 # "
-\ 1900 0 0x5c -- 0,92 # backslash
-rs 1900 0 0x5c -- 0,92 # "
-] 1900 0 0x5d -- 0,93 # bracketright
-rB 1900 0 0x5d -- 0,93 # "
-a^ 1900 0 0x5e -- 0,94 # circumflex
-^ 1900 0 0x5e -- 0,94 # "
-_ 1900 0 0x5f -- 0,95 # underscore
-` 1900 0 0x60 -- 0,96 # quoteleft
-oq 1900 0 0x60 -- 0,96 # "
-a 1900 0 0x61 -- 0,97 # a
-b 1900 0 0x62 -- 0,98 # b
-c 1900 0 0x63 -- 0,99 # c
-d 1900 0 0x64 -- 0,100 # d
-e 1900 0 0x65 -- 0,101 # e
-f 1900 0 0x66 -- 0,102 # f
-g 1900 0 0x67 -- 0,103 # g
-h 1900 0 0x68 -- 0,104 # h
-i 1900 0 0x69 -- 0,105 # i
-j 1900 0 0x6a -- 0,106 # j
-k 1900 0 0x6b -- 0,107 # k
-l 1900 0 0x6c -- 0,108 # l
-m 1900 0 0x6d -- 0,109 # m
-n 1900 0 0x6e -- 0,110 # n
-o 1900 0 0x6f -- 0,111 # o
-p 1900 0 0x70 -- 0,112 # p
-q 1900 0 0x71 -- 0,113 # q
-r 1900 0 0x72 -- 0,114 # r
-s 1900 0 0x73 -- 0,115 # s
-t 1900 0 0x74 -- 0,116 # t
-u 1900 0 0x75 -- 0,117 # u
-v 1900 0 0x76 -- 0,118 # v
-w 1900 0 0x77 -- 0,119 # w
-x 1900 0 0x78 -- 0,120 # x
-y 1900 0 0x79 -- 0,121 # y
-z 1900 0 0x7a -- 0,122 # z
-lC 1900 0 0x7b -- 0,123 # braceleft
-{ 1900 0 0x7b -- 0,123 # "
-| 1900 0 0x7c -- 0,124 # "
-rC 1900 0 0x7d -- 0,125 # braceright
-} 1900 0 0x7d -- 0,125 # "
-a~ 1900 0 0x7e -- 0,126 # tilde
-~ 1900 0 0x7e -- 0,126 # "
-AE 1900 0 0x92 -- 1,36 # AE
-ae 1900 0 0x91 -- 1,37 # ae
-'E 1900 0 0x90 -- 1,40 # Eacute
-'a 1900 0 0xa0 -- 1,27 # aacute
-'e 1900 0 0x82 -- 1,41 # eacute
-'i 1900 0 0xa1 -- 1,49 # iacute
-'o 1900 0 0xa2 -- 1,59 # oacute
-'u 1900 0 0x95 -- 1,65 # uacute
-:A 1900 0 0x8e -- 1,30 # Adieresis
-:O 1900 0 0x99 -- 1,62 # Odieresis
-:U 1900 0 0x9a -- 1,70 # Udieresis
-:a 1900 0 0x84 -- 1,31 # adieresis
-:e 1900 0 0x89 -- 1,45 # edieresis
-:i 1900 0 0x8b -- 1,53 # idieresis
-:o 1900 0 0x94 -- 1,63 # odieresis
-:u 1900 0 0x81 -- 1,71 # udieresis
-:y 1900 0 0x98 -- 1,75 # ydieresis
-^a 1900 0 0x83 -- 1,29 # acircumflex
-^e 1900 0 0x88 -- 1,43 # ecircumflex
-^i 1900 0 0x8c -- 1,51 # icircumflex
-^o 1900 0 0x93 -- 1,61 # ocircumflex
-^u 1900 0 0x96 -- 1,69 # ucircumflex
-`a 1900 0 0x85 -- 1,33 # agrave
-`e 1900 0 0x8a -- 1,47 # egrave
-`i 1900 0 0x8d -- 1,55 # igrave
-`o 1900 0 0x95 -- 1,65 # ograve
-`u 1900 0 0x97 -- 1,73 # ugrave
-~A 1900 0 0x28e -- 1,26 # Atilde
-~N 1900 0 0xa5 -- 1,56 # Ntilde
-~a 1900 0 0x284 -- --- # atilde
-~n 1900 0 0xa4 -- 1,57 # ntilde
-,C 1900 0 0x80 -- 1,38 # Ccedilla
-,c 1900 0 0x87 -- 1,39 # ccedilla
-oA 1900 0 0x8f -- 1,34 # Aring
-oa 1900 0 0x86 -- 1,35 # aring
-a^ 1900 0 0x5e -- 1,3 # circumflex "circumflex accent"
-a~ 1900 0 0x7e -- 1,2 # tilde "tilde accent"
-Do 1900 0 0x24 -- 0,36 # dollar
-Po 1900 0 0x9c -- 4,11 # sterling
-Ye 1900 0 0x9d -- 4,12 # yen
-Fn 1900 0 0x9f -- 4,14 # florin
-ct 1900 0 0x9b -- 4,19 # cent
-Fo 1900 0 0xae -- 4,9 # guillemotleft
-r! 1900 0 0xad -- 4,7 # exclamdown
-r? 1900 0 0xa8 -- 4,8 # questiondown
-Of 1900 0 0xa6 -- 4,15 # ordfeminine
-Om 1900 0 0xa7 -- 4,16 # ordmasculine
-S2 1900 0 0xfd -- 4,20 # twosuperior
-<- 1900 0 0x1b -- 6,22 # arrowleft
--> 1900 0 0x1a -- 6,21 # arrowright
-<> 1900 0 0x1d -- 6,25 # arrowboth "horizontal double-headed arrow"
-da 1900 0 0x19 -- 6,24 # arrowdown
-ua 1900 0 0x18 -- 6,23 # arrowup
-va 1900 0 0x12 -- 6,26 # \& "vertical double-headed arrow"
-ba 1900 0 0xb3 -- 3,9 # bar
-bb 1900 0 0x7c -- 0,124 # brokenbar
-ul 1900 0 0x5f -- 0,95 # ul "underline with traditional troff metrics"
-ci 1900 0 0x9 -- 4,1 # circle
-bu 1900 0 0x7 -- 4,0 # bullet
-ps 1900 0 0x14 -- 4,5 # paragraph
-sc 1900 0 0x15 -- 4,6 # section
-de 1900 0 0xf8 -- 6,36 # degree
-12 1900 0 0xab -- 4,17 # onehalf
-14 1900 0 0xac -- 4,18 # onequarter
-hy 1900 0 0x2d -- 6,0 # hyphen
-lB 1900 0 0x5b -- 0,91 # bracketleft
-rB 1900 0 0x5d -- 0,93 # bracketright
-lC 1900 0 0x7b -- 0,123 # braceleft
-rC 1900 0 0x7d -- 0,125 # braceright
-aq 1900 0 0x27 -- 0,39 # quotesingle "apostrophe quote"
-at 1900 0 0x40 -- 0,64 # at
-.C1 1900 0 0x2d -- 0,45 # - minus "minus sign from current font"
-sh 1900 0 0x23 -- 0,35 # numbersign
-sl 1900 0 0x2f -- 0,47 # slash
-rs 1900 0 0x5c -- 0,92 # backslash
-*a 1900 0 0xe0 -- 8,1 # alpha
-*b 1900 0 0xe1 -- 8,3 # beta
-*d 1900 0 0xeb -- 8,9 # delta
-*h 1900 0 0xe9 -- 8,17 # theta
-*m 1900 0 0xe6 -- 8,25 # mu
-*p 1900 0 0xe3 -- 8,33 # pi
-*s 1900 0 0xe5 -- 8,37 # sigma
-*t 1900 0 0xe7 -- 8,41 # tau
-~~ 1900 0 0xf7 -- 6,13 # approxequal
-~= 1900 0 0xf7 -- 6,13 # approxequal
-+- 1900 0 0xf1 -- 6,1 # plusminus
-<= 1900 0 0xf3 -- 6,2 # lessequal
-ca 1900 0 0xef -- 6,16 # intersection "intersection, cap"
--h 1900 0 0xc4 -- 3,8 # hbar
-hbar "
-CL 1900 0 0x5 -- 5,168 # club "club suit"
-SP 1900 0 0x6 -- 5,171 # spade "spade suit"
-HE 1900 0 0x3 -- 5,170 # heart "heart suit"
-DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
-<< 1900 0 0xae -- 6,77 # "" "much less"
->> 1900 0 0xaf -- 6,78 # "" "much greater"
-pc 1900 0 0xfa -- 6,32 # periodcentered
-mc 1900 0 0xe6 -- 8,25 # mu
-t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/HB b/contrib/groff/font/devlbp/HB
deleted file mode 100644
index 30ad0eaf2b41..000000000000
--- a/contrib/groff/font/devlbp/HB
+++ /dev/null
@@ -1,400 +0,0 @@
-name HB
-lbpname Swiss-Bold
-special
-spacewidth 927
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 2223 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1853 2 0x173 1,177 # scaron
-vz 1667 2 0x174 1,207 # zcaron
-:Y 2223 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 793 2 0x27 0,39 # quotesingle
-space 927 0 0x20 0,32
-! 1110 2 0x21 0,33 # exclam
-" 1580 2 0x22 0,34 # quotedbl
-dq 1580 2 0x22 0,34 # quotedbl
-# 1853 2 0x23 0,35 # numbersign
-sh 1853 2 0x23 0,35 # "
-$ 1853 2 0x24 0,36 # dollar
-Do 1853 2 0x24 0,36 # "
-% 2963 2 0x25 0,37 # percent
-& 2407 2 0x26 0,38 # ampersand
-' 793 2 0x27 0,39 # quoteright
-cq 793 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1297 2 0x2a 0,42 # asterisk
-+ 1947 0 0x2b 0,43 # plus
-, 927 0 0x2c 0,44 # comma
-- 1947 0 0x2d 0,45 # hyphen
-hy 1947 0 0x2d 0,45 # "
-. 927 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1853 2 0x30 0,48 # zero
-1 1853 2 0x31 0,49 # one
-2 1853 2 0x32 0,50 # two
-3 1853 2 0x33 0,51 # three
-4 1853 2 0x34 0,52 # four
-5 1853 2 0x35 0,53 # five
-6 1853 2 0x36 0,54 # six
-7 1853 2 0x37 0,55 # seven
-8 1853 2 0x38 0,56 # eight
-9 1853 2 0x39 0,57 # nine
-: 1110 0 0x3a 0,58 # colon
-; 1110 0 0x3b 0,59 # semicolon
-< 1947 0 0x3c 0,60 # less
-= 1947 0 0x3d 0,61 # equal
-> 1947 0 0x3e 0,62 # greater
-? 2037 2 0x3f 0,63 # question
-@ 3250 2 0x40 0,64 # at
-at 3250 2 0x40 0,64 # "
-A 2407 2 0x41 0,65 # A
-B 2407 2 0x42 0,66 # B
-C 2407 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2593 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 927 2 0x49 0,73 # I
-J 1853 2 0x4a 0,74 # J
-K 2407 2 0x4b 0,75 # K
-L 2037 2 0x4c 0,76 # L
-M 2777 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2593 2 0x4f 0,79 # O
-P 2223 2 0x50 0,80 # P
-Q 2593 2 0x51 0,81 # Q
-R 2407 2 0x52 0,82 # R
-S 2223 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2223 2 0x56 0,86 # V
-W 3147 2 0x57 0,87 # W
-X 2223 2 0x58 0,88 # X
-Y 2223 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 1110 2 0x5b 0,91 # bracketleft
-lB 1110 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1110 2 0x5d 0,93 # bracketright
-rB 1110 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1853 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1853 0 0x61 0,97 # a
-b 2037 2 0x62 0,98 # b
-c 1853 0 0x63 0,99 # c
-d 2037 2 0x64 0,100 # d
-e 1853 0 0x65 0,101 # e
-f 1110 2 0x66 0,102 # f
-g 2037 1 0x67 0,103 # g
-h 2037 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 927 2 0x6a 0,106 # j
-k 1853 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2963 0 0x6d 0,109 # m
-n 2037 0 0x6e 0,110 # n
-o 2037 0 0x6f 0,111 # o
-p 2037 1 0x70 0,112 # p
-q 2037 1 0x71 0,113 # q
-r 1297 0 0x72 0,114 # r
-s 1853 0 0x73 0,115 # s
-t 1110 2 0x74 0,116 # t
-u 2037 0 0x75 0,117 # u
-v 1853 0 0x76 0,118 # v
-w 2593 0 0x77 0,119 # w
-x 1853 0 0x78 0,120 # x
-y 1853 1 0x79 0,121 # y
-z 1667 0 0x7a 0,122 # z
-lC 1297 2 0x7b 0,123 # braceleft
-{ 1297 2 0x7b 0,123 # "
-| 933 2 0x7c 0,124 # "
-rC 1297 2 0x7d 0,125 # braceright
-} 1297 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 2037 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2223 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 2037 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3333 2 0x92 1,36 # AE
-ae 2963 0 0x91 1,37 # ae
-OE 3333 2 0x141 1,166 # OE
-oe 3147 0 0x146 1,167 # oe
-ij 1830 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 2037 2 0x147 1,23 # germandbls
-'A 2407 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 927 2 0x161 1,48 # Iacute
-'O 2593 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1853 2 0xa0 1,27 # aacute
-'e 1853 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 2037 2 0xa2 1,59 # oacute
-'u 2037 2 0x95 1,65 # uacute
-:A 2407 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 927 2 0x163 1,52 # Idieresis
-:O 2593 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2223 2 0x16d 1,74 # Ydieresis
-:a 1853 2 0x84 1,31 # adieresis
-:e 1853 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 2037 2 0x94 1,63 # odieresis
-:u 2037 2 0x81 1,71 # udieresis
-:y 1853 3 0x98 1,75 # ydieresis
-^A 2407 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 927 2 0x162 1,50 # Icircumflex
-^O 2593 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1853 2 0x83 1,29 # acircumflex
-^e 1853 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 2037 2 0x93 1,61 # ocircumflex
-^u 2037 2 0x96 1,69 # ucircumflex
-`A 2407 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 927 2 0x164 1,54 # Igrave
-`O 2593 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1853 2 0x85 1,33 # agrave
-~a 1853 2 0x284 --- # atilde
-`e 1853 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 2037 2 0x95 1,65 # ograve
-`u 2037 2 0x97 1,73 # ugrave
-~A 2407 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2593 2 0x168 1,82 # Otilde
-~n 2037 2 0xa4 1,57 # ntilde
-~o 2037 2 0x172 1,83 # otilde
-vS 2223 2 0x169 1,176 # Scaron
-vs 1853 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1667 2 0x174 1,207 # zcaron
-,C 2407 2 0x80 1,38 # Ccedilla
-,c 1853 0 0x87 1,39 # ccedilla
-/L 2037 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2593 2 0x140 1,80 # Oslash
-/o 2037 0 0x145 1,81 # oslash
-oA 2407 2 0x8f 1,34 # Aring
-oa 1853 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1853 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1853 2 0x24 0,36 # dollar
-Po 1853 2 0x9c 4,11 # sterling
-Ye 1853 2 0x9d 4,12 # yen
-Fn 1853 2 0x9f 4,14 # florin
-ct 1853 2 0x9b 4,19 # cent
-Fo 1853 0 0xae 4,9 # guillemotleft
-Fc 1110 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 2037 1 0xa8 4,8 # questiondown
-fi 2037 2 0x130 4,54 # fi "fi ligature"
-fl 2037 2 0x131 4,55 # fl "fl ligature"
-OK 2037 0 0x3d6 --- # \& "check mark, tick"
-Of 1233 2 0xa6 4,15 # ordfeminine
-Om 1217 2 0xa7 4,16 # ordmasculine
-S1 1110 2 0x156 4,78 # onesuperior
-S2 1110 2 0xfd 4,20 # twosuperior
-S3 1110 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 933 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1853 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0x3f4 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2457 2 0x154 4,23 # copyright
-rg 2457 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1853 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1853 2 0x12a 4,39 # dagger
-ps 1853 2 0x14 4,5 # paragraph
-sc 1853 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1853 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2780 2 0xab 4,17 # onehalf
-14 2780 2 0xac 4,18 # onequarter
-34 2780 2 0x12e 4,25 # threequarters
-f/ 927 2 0x158 6,6 # fraction "bar for fractions"
-fm 927 0 0x3a2 6,45 # minute "footmark, prime"
-sd 927 0 0x3b2 6,46 # second
-ha 927 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 927 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1947 0 0x2d 6,0 # hyphen
-lB 1110 2 0x5b 0,91 # bracketleft
-rB 1110 2 0x5d 0,93 # bracketright
-lC 1297 2 0x7b 0,123 # braceleft
-rC 1297 2 0x7d 0,125 # braceright
-la 1297 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1297 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1667 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1667 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1667 2 0x125 4,32 # quotedblleft
-rq 1667 2 0x4ba 6,31 # quotedblright
-oq 927 2 0x176 4,29 # quoteleft "single open quote"
-aq 793 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3250 2 0x40 0,64 # at
-.C1 1947 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1853 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2477 0 0x346 8,44 # Phi
-*G 1953 0 0x347 8,6 # Gamma
-*H 1953 0 0x351 8,16 # Theta
-*I 1953 0 0x349 8,18 # Iota
-*K 1953 0 0x34b 8,20 # Kappa
-*L 1953 0 0x34c 8,22 # Lambda
-*M 1953 0 0x34d 8,24 # Mu
-*N 1953 0 0x34e 8,26 # Nu
-*O 1953 0 0x34f 8,30 # Omicron
-*P 1953 0 0x350 8,32 # Pi
-*Q 1953 0 0x359 8,48 # Psi
-*R 1953 0 0x352 8,34 # Rho
-*S 1953 0 0x353 8,36 # Sigma
-*T 1953 0 0x354 8,40 # Tau
-*U 1953 0 0x3a1 8,76 # Upsilon
-*W 2560 0 0x357 8,50 # Omega
-*X 1953 0 0x343 8,36 # Chi
-*Y 1953 0 0x348 8,14 # Eta
-*Z 1953 0 0x35a 8,12 # Zeta
-*a 2027 0 0xe0 8,1 # alpha
-*b 2027 0 0xe1 8,3 # beta
-*c 2027 0 0x378 8,29 # xi
-*d 1980 0 0xeb 8,9 # delta
-*e 1980 0 0x36e 8,70 # epsilon
-*f 1980 0 0x366 8,45 # phi
-+f 1980 0 0x36a 8,77 # phi1 "variant phi"
-*g 1980 0 0x367 8,7 # gamma
-*h 1977 0 0xe9 8,17 # theta
-+h 1977 0 0x375 8,71 # theta1 "variant theta"
-*i 1977 0 0x369 8,19 # iota
-*k 1977 0 0x36b 8,21 # kappa
-*l 1977 0 0x36c 8,23 # lambda
-*m 2037 0 0xe6 8,25 # mu
-*n 2037 0 0x36e 8,27 # nu
-*o 2037 0 0x36f 8,31 # omicron
-*p 2143 0 0xe3 8,33 # pi
-+p 2143 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 2143 0 0x379 8,49 # psi
-*r 2143 0 0x372 8,35 # rho
-*s 2157 0 0xe5 8,37 # sigma
-*t 1503 0 0xe7 8,41 # tau
-*u 1503 0 0x375 8,27 # upsilon
-*w 1503 0 0x377 8,51 # omega
-*x 1503 0 0x363 8,47 # chi
-*y 1503 0 0x368 8,15 # eta
-*z 1503 0 0x37a 8,13 # zeta
-ts 1503 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 927 0 0x32a 0,32 # asteriskmath
-+- 1947 0 0xf1 6,1 # plusminus
-<= 2407 0 0xf3 6,2 # lessequal
-== 2407 0 0x3ba 8,14 # equivalence
-=~ 2407 0 0x340 8,116 # congruent
->= 2027 0 0x3b3 8,3 # greaterequal
-AN 2027 0 0x3d9 8,85 # logicaland
-OR 2027 0 0x3da 8,86 # logicalor
-no 2027 0 0x3d8 8,20 # logicalnot
-te 2027 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 2027 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 2027 0 0x3c0 9,0 # aleph
-Im 2027 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 2027 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 2027 0 0x3a5 8,19 # infinity
-md 2027 0 0x3b7 8,32 # dotmath
-mo 2027 0 0x3ce 8,15 # element
-mu 2027 0 0x3b4 8,39 # multiply
-nc 2027 0 0x3cb 8,197 # uni2285
-nm 2027 0 0x3cf 8,209 # notelement
-pl 1110 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1947 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1947 0 0x3b5 6,4 # proportional
-pp 1947 0 0x35e 8,89 # perpendicular
-sb 1947 0 0x3cc 6,67 # propersubset
-sp 1947 0 0x3c9 6,68 # propersuperset
-ib 1947 0 0x3cd 6,69 # reflexsubset
-ip 1947 0 0x3ca 6,70 # reflexsuperset
-ap 1947 0 0x37e 6,12 # similar
-pd 1947 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1947 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1947 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1947 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2593 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1853 0 0xae 6,77 # "" "much less"
->> 1853 0 0xaf 6,78 # "" "much greater"
-wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1853 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 927 0 0xfa 6,32 # periodcentered
-mc 2037 0 0xe6 8,25 # mu
-t+- 1947 0 0xf1 6,1 # plusminus
-tmu 2027 0 0x3b4 8,39 # multiply
-tdi 1947 0 0x3b8 6,8 # divide "division sign"
-tno 2027 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HBI b/contrib/groff/font/devlbp/HBI
deleted file mode 100644
index e0e83db9e6c7..000000000000
--- a/contrib/groff/font/devlbp/HBI
+++ /dev/null
@@ -1,401 +0,0 @@
-slant 18.49
-name HBI
-lbpname Swiss-BoldOblique
-special
-spacewidth 927
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 2223 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1853 2 0x173 1,177 # scaron
-vz 1667 2 0x174 1,207 # zcaron
-:Y 2223 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 793 2 0x27 0,39 # quotesingle
-space 927 0 0x20 0,32
-! 1110 2 0x21 0,33 # exclam
-" 1580 2 0x22 0,34 # quotedbl
-dq 1580 2 0x22 0,34 # quotedbl
-# 1853 2 0x23 0,35 # numbersign
-sh 1853 2 0x23 0,35 # "
-$ 1853 2 0x24 0,36 # dollar
-Do 1853 2 0x24 0,36 # "
-% 2963 2 0x25 0,37 # percent
-& 2407 2 0x26 0,38 # ampersand
-' 793 2 0x27 0,39 # quoteright
-cq 793 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1297 2 0x2a 0,42 # asterisk
-+ 1947 0 0x2b 0,43 # plus
-, 927 0 0x2c 0,44 # comma
-- 1947 0 0x2d 0,45 # hyphen
-hy 1947 0 0x2d 0,45 # "
-. 927 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1853 2 0x30 0,48 # zero
-1 1853 2 0x31 0,49 # one
-2 1853 2 0x32 0,50 # two
-3 1853 2 0x33 0,51 # three
-4 1853 2 0x34 0,52 # four
-5 1853 2 0x35 0,53 # five
-6 1853 2 0x36 0,54 # six
-7 1853 2 0x37 0,55 # seven
-8 1853 2 0x38 0,56 # eight
-9 1853 2 0x39 0,57 # nine
-: 1110 0 0x3a 0,58 # colon
-; 1110 0 0x3b 0,59 # semicolon
-< 1947 0 0x3c 0,60 # less
-= 1947 0 0x3d 0,61 # equal
-> 1947 0 0x3e 0,62 # greater
-? 2037 2 0x3f 0,63 # question
-@ 3250 2 0x40 0,64 # at
-at 3250 2 0x40 0,64 # "
-A 2407 2 0x41 0,65 # A
-B 2407 2 0x42 0,66 # B
-C 2407 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2593 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 927 2 0x49 0,73 # I
-J 1853 2 0x4a 0,74 # J
-K 2407 2 0x4b 0,75 # K
-L 2037 2 0x4c 0,76 # L
-M 2777 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2593 2 0x4f 0,79 # O
-P 2223 2 0x50 0,80 # P
-Q 2593 2 0x51 0,81 # Q
-R 2407 2 0x52 0,82 # R
-S 2223 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2223 2 0x56 0,86 # V
-W 3147 2 0x57 0,87 # W
-X 2223 2 0x58 0,88 # X
-Y 2223 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 1110 2 0x5b 0,91 # bracketleft
-lB 1110 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1110 2 0x5d 0,93 # bracketright
-rB 1110 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1853 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1853 0 0x61 0,97 # a
-b 2037 2 0x62 0,98 # b
-c 1853 0 0x63 0,99 # c
-d 2037 2 0x64 0,100 # d
-e 1853 0 0x65 0,101 # e
-f 1110 2 0x66 0,102 # f
-g 2037 1 0x67 0,103 # g
-h 2037 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 927 2 0x6a 0,106 # j
-k 1853 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2963 0 0x6d 0,109 # m
-n 2037 0 0x6e 0,110 # n
-o 2037 0 0x6f 0,111 # o
-p 2037 1 0x70 0,112 # p
-q 2037 1 0x71 0,113 # q
-r 1297 0 0x72 0,114 # r
-s 1853 0 0x73 0,115 # s
-t 1110 2 0x74 0,116 # t
-u 2037 0 0x75 0,117 # u
-v 1853 0 0x76 0,118 # v
-w 2593 0 0x77 0,119 # w
-x 1853 0 0x78 0,120 # x
-y 1853 1 0x79 0,121 # y
-z 1667 0 0x7a 0,122 # z
-lC 1297 2 0x7b 0,123 # braceleft
-{ 1297 2 0x7b 0,123 # "
-| 933 2 0x7c 0,124 # "
-rC 1297 2 0x7d 0,125 # braceright
-} 1297 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 2037 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2223 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 2037 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3333 2 0x92 1,36 # AE
-ae 2963 0 0x91 1,37 # ae
-OE 3333 2 0x141 1,166 # OE
-oe 3147 0 0x146 1,167 # oe
-ij 1830 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 2037 2 0x147 1,23 # germandbls
-'A 2407 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 927 2 0x161 1,48 # Iacute
-'O 2593 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1853 2 0xa0 1,27 # aacute
-'e 1853 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 2037 2 0xa2 1,59 # oacute
-'u 2037 2 0x95 1,65 # uacute
-:A 2407 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 927 2 0x163 1,52 # Idieresis
-:O 2593 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2223 2 0x16d 1,74 # Ydieresis
-:a 1853 2 0x84 1,31 # adieresis
-:e 1853 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 2037 2 0x94 1,63 # odieresis
-:u 2037 2 0x81 1,71 # udieresis
-:y 1853 3 0x98 1,75 # ydieresis
-^A 2407 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 927 2 0x162 1,50 # Icircumflex
-^O 2593 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1853 2 0x83 1,29 # acircumflex
-^e 1853 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 2037 2 0x93 1,61 # ocircumflex
-^u 2037 2 0x96 1,69 # ucircumflex
-`A 2407 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 927 2 0x164 1,54 # Igrave
-`O 2593 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1853 2 0x85 1,33 # agrave
-~a 1853 2 0x284 --- # atilde
-`e 1853 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 2037 2 0x95 1,65 # ograve
-`u 2037 2 0x97 1,73 # ugrave
-~A 2407 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2593 2 0x168 1,82 # Otilde
-~n 2037 2 0xa4 1,57 # ntilde
-~o 2037 2 0x172 1,83 # otilde
-vS 2223 2 0x169 1,176 # Scaron
-vs 1853 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1667 2 0x174 1,207 # zcaron
-,C 2407 2 0x80 1,38 # Ccedilla
-,c 1853 0 0x87 1,39 # ccedilla
-/L 2037 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2593 2 0x140 1,80 # Oslash
-/o 2037 0 0x145 1,81 # oslash
-oA 2407 2 0x8f 1,34 # Aring
-oa 1853 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1853 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1853 2 0x24 0,36 # dollar
-Po 1853 2 0x9c 4,11 # sterling
-Ye 1853 2 0x9d 4,12 # yen
-Fn 1853 2 0x9f 4,14 # florin
-ct 1853 2 0x9b 4,19 # cent
-Fo 1853 0 0xae 4,9 # guillemotleft
-Fc 1110 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 2037 1 0xa8 4,8 # questiondown
-fi 2037 2 0x130 4,54 # fi "fi ligature"
-fl 2037 2 0x131 4,55 # fl "fl ligature"
-OK 2037 0 0x3d6 --- # \& "check mark, tick"
-Of 1233 2 0xa6 4,15 # ordfeminine
-Om 1217 2 0xa7 4,16 # ordmasculine
-S1 1110 2 0x156 4,78 # onesuperior
-S2 1110 2 0xfd 4,20 # twosuperior
-S3 1110 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 933 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1853 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0x3f4 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2457 2 0x154 4,23 # copyright
-rg 2457 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1853 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1853 2 0x12a 4,39 # dagger
-ps 1853 2 0x14 4,5 # paragraph
-sc 1853 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1853 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2780 2 0xab 4,17 # onehalf
-14 2780 2 0xac 4,18 # onequarter
-34 2780 2 0x12e 4,25 # threequarters
-f/ 557 2 0x158 6,6 # fraction "bar for fractions"
-fm 557 0 0x3a2 6,45 # minute "footmark, prime"
-sd 557 0 0x3b2 6,46 # second
-ha 557 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 557 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1947 0 0x2d 6,0 # hyphen
-lB 1110 2 0x5b 0,91 # bracketleft
-rB 1110 2 0x5d 0,93 # bracketright
-lC 1297 2 0x7b 0,123 # braceleft
-rC 1297 2 0x7d 0,125 # braceright
-la 1297 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1297 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1667 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1667 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1667 2 0x125 4,32 # quotedblleft
-rq 1667 2 0x4ba 6,31 # quotedblright
-oq 927 2 0x176 4,29 # quoteleft "single open quote"
-aq 793 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3250 2 0x40 0,64 # at
-.C1 1947 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1853 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2477 0 0x346 8,44 # Phi
-*G 1953 0 0x347 8,6 # Gamma
-*H 1953 0 0x351 8,16 # Theta
-*I 1953 0 0x349 8,18 # Iota
-*K 1953 0 0x34b 8,20 # Kappa
-*L 1953 0 0x34c 8,22 # Lambda
-*M 1953 0 0x34d 8,24 # Mu
-*N 1953 0 0x34e 8,26 # Nu
-*O 1953 0 0x34f 8,30 # Omicron
-*P 1953 0 0x350 8,32 # Pi
-*Q 1953 0 0x359 8,48 # Psi
-*R 1953 0 0x352 8,34 # Rho
-*S 1953 0 0x353 8,36 # Sigma
-*T 1953 0 0x354 8,40 # Tau
-*U 1953 0 0x3a1 8,76 # Upsilon
-*W 2560 0 0x357 8,50 # Omega
-*X 1953 0 0x343 8,36 # Chi
-*Y 1953 0 0x348 8,14 # Eta
-*Z 1953 0 0x35a 8,12 # Zeta
-*a 2027 0 0xe0 8,1 # alpha
-*b 2027 0 0xe1 8,3 # beta
-*c 2027 0 0x378 8,29 # xi
-*d 1980 0 0xeb 8,9 # delta
-*e 1980 0 0x36e 8,70 # epsilon
-*f 1980 0 0x366 8,45 # phi
-+f 1980 0 0x36a 8,77 # phi1 "variant phi"
-*g 1980 0 0x367 8,7 # gamma
-*h 1977 0 0xe9 8,17 # theta
-+h 1977 0 0x375 8,71 # theta1 "variant theta"
-*i 1977 0 0x369 8,19 # iota
-*k 1977 0 0x36b 8,21 # kappa
-*l 1977 0 0x36c 8,23 # lambda
-*m 2037 0 0xe6 8,25 # mu
-*n 2037 0 0x36e 8,27 # nu
-*o 2037 0 0x36f 8,31 # omicron
-*p 2143 0 0xe3 8,33 # pi
-+p 2143 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 2143 0 0x379 8,49 # psi
-*r 2143 0 0x372 8,35 # rho
-*s 2157 0 0xe5 8,37 # sigma
-*t 1503 0 0xe7 8,41 # tau
-*u 1503 0 0x375 8,27 # upsilon
-*w 1503 0 0x377 8,51 # omega
-*x 1503 0 0x363 8,47 # chi
-*y 1503 0 0x368 8,15 # eta
-*z 1503 0 0x37a 8,13 # zeta
-ts 1503 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 927 0 0x32a 0,32 # asteriskmath
-+- 1947 0 0xf1 6,1 # plusminus
-<= 2407 0 0xf3 6,2 # lessequal
-== 2407 0 0x3ba 8,14 # equivalence
-=~ 2407 0 0x340 8,116 # congruent
->= 2027 0 0x3b3 8,3 # greaterequal
-AN 2027 0 0x3d9 8,85 # logicaland
-OR 2027 0 0x3da 8,86 # logicalor
-no 2027 0 0x3d8 8,20 # logicalnot
-te 2027 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 2027 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 2027 0 0x3c0 9,0 # aleph
-Im 2027 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 2027 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 2027 0 0x3a5 8,19 # infinity
-md 2027 0 0x3b7 8,32 # dotmath
-mo 2027 0 0x3ce 8,15 # element
-mu 2027 0 0x3b4 8,39 # multiply
-nc 2027 0 0x3cb 8,197 # uni2285
-nm 2027 0 0x3cf 8,209 # notelement
-pl 1110 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1947 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1947 0 0x3b5 6,4 # proportional
-pp 1947 0 0x35e 8,89 # perpendicular
-sb 1947 0 0x3cc 6,67 # propersubset
-sp 1947 0 0x3c9 6,68 # propersuperset
-ib 1947 0 0x3cd 6,69 # reflexsubset
-ip 1947 0 0x3ca 6,70 # reflexsuperset
-ap 1947 0 0x37e 6,12 # similar
-pd 1947 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1947 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1947 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1947 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2593 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1853 0 0xae 6,77 # "" "much less"
->> 1853 0 0xaf 6,78 # "" "much greater"
-wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1853 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 927 0 0xfa 6,32 # periodcentered
-mc 2037 0 0xe6 8,25 # mu
-t+- 1947 0 0xf1 6,1 # plusminus
-tmu 2027 0 0x3b4 8,39 # multiply
-tdi 1947 0 0x3b8 6,8 # divide "division sign"
-tno 2027 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HI b/contrib/groff/font/devlbp/HI
deleted file mode 100644
index fc63a63682fc..000000000000
--- a/contrib/groff/font/devlbp/HI
+++ /dev/null
@@ -1,401 +0,0 @@
-slant 18.49
-name HI
-lbpname Swiss-Oblique
-special
-spacewidth 927
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 2223 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1667 2 0x173 1,177 # scaron
-vz 1667 2 0x174 1,207 # zcaron
-:Y 2223 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 637 2 0x27 0,39 # quotesingle
-space 927 0 0x20 0,32
-! 927 2 0x21 0,33 # exclam
-" 1183 2 0x22 0,34 # quotedbl
-dq 1183 2 0x22 0,34 # quotedbl
-# 1853 2 0x23 0,35 # numbersign
-sh 1853 2 0x23 0,35 # "
-$ 1853 2 0x24 0,36 # dollar
-Do 1853 2 0x24 0,36 # "
-% 2963 2 0x25 0,37 # percent
-& 2223 2 0x26 0,38 # ampersand
-' 637 2 0x27 0,39 # quoteright
-cq 637 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1297 2 0x2a 0,42 # asterisk
-+ 1947 0 0x2b 0,43 # plus
-, 927 0 0x2c 0,44 # comma
-- 1947 0 0x2d 0,45 # hyphen
-hy 1947 0 0x2d 0,45 # "
-. 927 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1853 2 0x30 0,48 # zero
-1 1853 2 0x31 0,49 # one
-2 1853 2 0x32 0,50 # two
-3 1853 2 0x33 0,51 # three
-4 1853 2 0x34 0,52 # four
-5 1853 2 0x35 0,53 # five
-6 1853 2 0x36 0,54 # six
-7 1853 2 0x37 0,55 # seven
-8 1853 2 0x38 0,56 # eight
-9 1853 2 0x39 0,57 # nine
-: 927 0 0x3a 0,58 # colon
-; 927 0 0x3b 0,59 # semicolon
-< 1947 0 0x3c 0,60 # less
-= 1947 0 0x3d 0,61 # equal
-> 1947 0 0x3e 0,62 # greater
-? 1853 2 0x3f 0,63 # question
-@ 3383 2 0x40 0,64 # at
-at 3383 2 0x40 0,64 # "
-A 2223 2 0x41 0,65 # A
-B 2223 2 0x42 0,66 # B
-C 2407 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2593 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 927 2 0x49 0,73 # I
-J 1667 2 0x4a 0,74 # J
-K 2223 2 0x4b 0,75 # K
-L 1853 2 0x4c 0,76 # L
-M 2777 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2593 2 0x4f 0,79 # O
-P 2223 2 0x50 0,80 # P
-Q 2593 2 0x51 0,81 # Q
-R 2407 2 0x52 0,82 # R
-S 2223 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2223 2 0x56 0,86 # V
-W 3147 2 0x57 0,87 # W
-X 2223 2 0x58 0,88 # X
-Y 2223 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 927 2 0x5b 0,91 # bracketleft
-lB 927 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 927 2 0x5d 0,93 # bracketright
-rB 927 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1853 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1853 0 0x61 0,97 # a
-b 1853 2 0x62 0,98 # b
-c 1667 0 0x63 0,99 # c
-d 1853 2 0x64 0,100 # d
-e 1853 0 0x65 0,101 # e
-f 927 2 0x66 0,102 # f
-g 1853 1 0x67 0,103 # g
-h 1853 2 0x68 0,104 # h
-i 740 2 0x69 0,105 # i
-j 740 2 0x6a 0,106 # j
-k 1667 2 0x6b 0,107 # k
-l 740 2 0x6c 0,108 # l
-m 2777 0 0x6d 0,109 # m
-n 1853 0 0x6e 0,110 # n
-o 1853 0 0x6f 0,111 # o
-p 1853 1 0x70 0,112 # p
-q 1853 1 0x71 0,113 # q
-r 1110 0 0x72 0,114 # r
-s 1667 0 0x73 0,115 # s
-t 927 2 0x74 0,116 # t
-u 1853 0 0x75 0,117 # u
-v 1667 0 0x76 0,118 # v
-w 2407 0 0x77 0,119 # w
-x 1667 0 0x78 0,120 # x
-y 1667 1 0x79 0,121 # y
-z 1667 0 0x7a 0,122 # z
-lC 1113 2 0x7b 0,123 # braceleft
-{ 1113 2 0x7b 0,123 # "
-| 867 2 0x7c 0,124 # "
-rC 1113 2 0x7d 0,125 # braceright
-} 1113 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1853 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2223 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1853 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3333 2 0x92 1,36 # AE
-ae 2963 0 0x91 1,37 # ae
-OE 3333 2 0x141 1,166 # OE
-oe 3147 0 0x146 1,167 # oe
-ij 1437 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 2037 2 0x147 1,23 # germandbls
-'A 2223 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 927 2 0x161 1,48 # Iacute
-'O 2593 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1853 2 0xa0 1,27 # aacute
-'e 1853 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1853 2 0xa2 1,59 # oacute
-'u 1853 2 0x95 1,65 # uacute
-:A 2223 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 927 2 0x163 1,52 # Idieresis
-:O 2593 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2223 2 0x16d 1,74 # Ydieresis
-:a 1853 2 0x84 1,31 # adieresis
-:e 1853 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1853 2 0x94 1,63 # odieresis
-:u 1853 2 0x81 1,71 # udieresis
-:y 1667 3 0x98 1,75 # ydieresis
-^A 2223 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 927 2 0x162 1,50 # Icircumflex
-^O 2593 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1853 2 0x83 1,29 # acircumflex
-^e 1853 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1853 2 0x93 1,61 # ocircumflex
-^u 1853 2 0x96 1,69 # ucircumflex
-`A 2223 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 927 2 0x164 1,54 # Igrave
-`O 2593 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1853 2 0x85 1,33 # agrave
-~a 1853 2 0x284 --- # atilde
-`e 1853 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1853 2 0x95 1,65 # ograve
-`u 1853 2 0x97 1,73 # ugrave
-~A 2223 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2593 2 0x168 1,82 # Otilde
-~n 1853 2 0xa4 1,57 # ntilde
-~o 1853 2 0x172 1,83 # otilde
-vS 2223 2 0x169 1,176 # Scaron
-vs 1667 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1667 2 0x174 1,207 # zcaron
-,C 2407 2 0x80 1,38 # Ccedilla
-,c 1667 0 0x87 1,39 # ccedilla
-/L 1853 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 740 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2593 2 0x140 1,80 # Oslash
-/o 2037 0 0x145 1,81 # oslash
-oA 2223 2 0x8f 1,34 # Aring
-oa 1853 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1853 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1853 2 0x24 0,36 # dollar
-Po 1853 2 0x9c 4,11 # sterling
-Ye 1853 2 0x9d 4,12 # yen
-Fn 1853 2 0x9f 4,14 # florin
-ct 1853 2 0x9b 4,19 # cent
-Fo 1853 0 0xae 4,9 # guillemotleft
-Fc 1110 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 2037 1 0xa8 4,8 # questiondown
-fi 1667 2 0x130 4,54 # fi "fi ligature"
-fl 1667 2 0x131 4,55 # fl "fl ligature"
-OK 1667 0 0x3d6 --- # \& "check mark, tick"
-Of 1233 2 0xa6 4,15 # ordfeminine
-Om 1217 2 0xa7 4,16 # ordmasculine
-S1 1110 2 0x156 4,78 # onesuperior
-S2 1110 2 0xfd 4,20 # twosuperior
-S3 1110 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 867 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1853 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0x3f4 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2457 2 0x154 4,23 # copyright
-rg 2457 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1853 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1853 2 0x12a 4,39 # dagger
-ps 1790 2 0x14 4,5 # paragraph
-sc 1853 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1853 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2780 2 0xab 4,17 # onehalf
-14 2780 2 0xac 4,18 # onequarter
-34 2780 2 0x12e 4,25 # threequarters
-f/ 557 2 0x158 6,6 # fraction "bar for fractions"
-fm 557 0 0x3a2 6,45 # minute "footmark, prime"
-sd 557 0 0x3b2 6,46 # second
-ha 557 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 557 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1947 0 0x2d 6,0 # hyphen
-lB 927 2 0x5b 0,91 # bracketleft
-rB 927 2 0x5d 0,93 # bracketright
-lC 1113 2 0x7b 0,123 # braceleft
-rC 1113 2 0x7d 0,125 # braceright
-la 1113 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1113 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1110 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1110 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1110 2 0x125 4,32 # quotedblleft
-rq 1110 2 0x4ba 6,31 # quotedblright
-oq 740 2 0x176 4,29 # quoteleft "single open quote"
-aq 637 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3383 2 0x40 0,64 # at
-.C1 1947 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1853 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2377 0 0x346 8,44 # Phi
-*G 1907 0 0x347 8,6 # Gamma
-*H 1907 0 0x351 8,16 # Theta
-*I 1907 0 0x349 8,18 # Iota
-*K 1907 0 0x34b 8,20 # Kappa
-*L 1907 0 0x34c 8,22 # Lambda
-*M 1907 0 0x34d 8,24 # Mu
-*N 1907 0 0x34e 8,26 # Nu
-*O 1907 0 0x34f 8,30 # Omicron
-*P 1907 0 0x350 8,32 # Pi
-*Q 1907 0 0x359 8,48 # Psi
-*R 1907 0 0x352 8,34 # Rho
-*S 1973 0 0x353 8,36 # Sigma
-*T 1973 0 0x354 8,40 # Tau
-*U 1973 0 0x3a1 8,76 # Upsilon
-*W 2547 0 0x357 8,50 # Omega
-*X 1973 0 0x343 8,36 # Chi
-*Y 1973 0 0x348 8,14 # Eta
-*Z 1973 0 0x35a 8,12 # Zeta
-*a 2023 0 0xe0 8,1 # alpha
-*b 1893 0 0xe1 8,3 # beta
-*c 1893 0 0x378 8,29 # xi
-*d 1890 0 0xeb 8,9 # delta
-*e 1890 0 0x36e 8,70 # epsilon
-*f 1890 0 0x366 8,45 # phi
-+f 1890 0 0x36a 8,77 # phi1 "variant phi"
-*g 1890 0 0x367 8,7 # gamma
-*h 1853 0 0xe9 8,17 # theta
-+h 1853 0 0x375 8,71 # theta1 "variant theta"
-*i 1853 0 0x369 8,19 # iota
-*k 1853 0 0x36b 8,21 # kappa
-*l 1853 0 0x36c 8,23 # lambda
-*m 1853 0 0xe6 8,25 # mu
-*n 1853 0 0x36e 8,27 # nu
-*o 1853 0 0x36f 8,31 # omicron
-*p 1963 0 0xe3 8,33 # pi
-+p 1963 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 1963 0 0x379 8,49 # psi
-*r 1963 0 0x372 8,35 # rho
-*s 2037 0 0xe5 8,37 # sigma
-*t 1463 0 0xe7 8,41 # tau
-*u 1463 0 0x375 8,27 # upsilon
-*w 1463 0 0x377 8,51 # omega
-*x 1463 0 0x363 8,47 # chi
-*y 1463 0 0x368 8,15 # eta
-*z 1463 0 0x37a 8,13 # zeta
-ts 1463 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 927 0 0x32a 0,32 # asteriskmath
-+- 1947 0 0xf1 6,1 # plusminus
-<= 2413 0 0xf3 6,2 # lessequal
-== 2413 0 0x3ba 8,14 # equivalence
-=~ 2413 0 0x340 8,116 # congruent
->= 1893 0 0x3b3 8,3 # greaterequal
-AN 1893 0 0x3d9 8,85 # logicaland
-OR 1893 0 0x3da 8,86 # logicalor
-no 1893 0 0x3d8 8,20 # logicalnot
-te 1893 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1893 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1893 0 0x3c0 9,0 # aleph
-Im 1893 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1893 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1893 0 0x3a5 8,19 # infinity
-md 1893 0 0x3b7 8,32 # dotmath
-mo 1893 0 0x3ce 8,15 # element
-mu 1893 0 0x3b4 8,39 # multiply
-nc 1893 0 0x3cb 8,197 # uni2285
-nm 1893 0 0x3cf 8,209 # notelement
-pl 927 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1947 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1947 0 0x3b5 6,4 # proportional
-pp 1947 0 0x35e 8,89 # perpendicular
-sb 1947 0 0x3cc 6,67 # propersubset
-sp 1947 0 0x3c9 6,68 # propersuperset
-ib 1947 0 0x3cd 6,69 # reflexsubset
-ip 1947 0 0x3ca 6,70 # reflexsuperset
-ap 1947 0 0x37e 6,12 # similar
-pd 1947 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1947 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1947 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1947 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2593 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1853 0 0xae 6,77 # "" "much less"
->> 1853 0 0xaf 6,78 # "" "much greater"
-wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1853 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 927 0 0xfa 6,32 # periodcentered
-mc 1853 0 0xe6 8,25 # mu
-t+- 1947 0 0xf1 6,1 # plusminus
-tmu 1893 0 0x3b4 8,39 # multiply
-tdi 1947 0 0x3b8 6,8 # divide "division sign"
-tno 1893 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HNB b/contrib/groff/font/devlbp/HNB
deleted file mode 100644
index 23475b59fc02..000000000000
--- a/contrib/groff/font/devlbp/HNB
+++ /dev/null
@@ -1,400 +0,0 @@
-name HNB
-lbpname Swiss-Narrow-Bold
-special
-spacewidth 228
-slant 0
-ligatures fi fl 0
-charset
-ha 280 2 0x4c3 0,94 # asciicircum
-ti 280 0 0x4c4 0,126 # asciitilde
-vS 280 2 0x169 1,176 # Scaron
-vZ 280 2 0x16e 1,206 # Zcaron
-vs 280 2 0x173 1,177 # scaron
-vz 280 2 0x174 1,207 # zcaron
-:Y 280 2 0x16d 1,74 # Ydieresis
-tm 280 2 0x170 4,41 # trademark
-aq 195 2 0x27 0,39 # quotesingle
-space 228 0 0x20 0,32
-! 273 2 0x21 0,33 # exclam
-" 389 2 0x22 0,34 # quotedbl
-dq 389 2 0x22 0,34 # quotedbl
-# 456 2 0x23 0,35 # numbersign
-sh 456 2 0x23 0,35 # "
-$ 456 2 0x24 0,36 # dollar
-Do 456 2 0x24 0,36 # "
-% 720 2 0x25 0,37 # percent
-& 592 2 0x26 0,38 # ampersand
-' 195 2 0x27 0,39 # quoteright
-cq 195 2 0x27 0,39 # quoteright
-( 273 2 0x28 0,40 # parenleft
-) 273 2 0x29 0,41 # parenright
-* 319 2 0x2a 0,42 # asterisk
-+ 479 0 0x2b 0,43 # plus
-, 228 0 0x2c 0,44 # comma
-- 479 0 0x2d 0,45 # hyphen
-hy 479 0 0x2d 0,45 # "
-. 228 0 0x2e 0,46 # period
-/ 228 2 0x2f 0,47 # slash
-sl 228 2 0x2f 0,47 # "
-0 456 2 0x30 0,48 # zero
-1 456 2 0x31 0,49 # one
-2 456 2 0x32 0,50 # two
-3 456 2 0x33 0,51 # three
-4 456 2 0x34 0,52 # four
-5 456 2 0x35 0,53 # five
-6 456 2 0x36 0,54 # six
-7 456 2 0x37 0,55 # seven
-8 456 2 0x38 0,56 # eight
-9 456 2 0x39 0,57 # nine
-: 273 0 0x3a 0,58 # colon
-; 273 0 0x3b 0,59 # semicolon
-< 479 0 0x3c 0,60 # less
-= 479 0 0x3d 0,61 # equal
-> 479 0 0x3e 0,62 # greater
-? 501 2 0x3f 0,63 # question
-@ 800 2 0x40 0,64 # at
-at 800 2 0x40 0,64 # "
-A 592 2 0x41 0,65 # A
-B 592 2 0x42 0,66 # B
-C 592 2 0x43 0,67 # C
-D 592 2 0x44 0,68 # D
-E 547 2 0x45 0,69 # E
-F 501 2 0x46 0,70 # F
-G 638 2 0x47 0,71 # G
-H 592 2 0x48 0,72 # H
-I 228 2 0x49 0,73 # I
-J 456 2 0x4a 0,74 # J
-K 592 2 0x4b 0,75 # K
-L 501 2 0x4c 0,76 # L
-M 683 2 0x4d 0,77 # M
-N 592 2 0x4e 0,78 # N
-O 638 2 0x4f 0,79 # O
-P 547 2 0x50 0,80 # P
-Q 638 2 0x51 0,81 # Q
-R 592 2 0x52 0,82 # R
-S 547 2 0x53 0,83 # S
-T 501 2 0x54 0,84 # T
-U 592 2 0x55 0,85 # U
-V 547 2 0x56 0,86 # V
-W 774 2 0x57 0,87 # W
-X 547 2 0x58 0,88 # X
-Y 547 2 0x59 0,89 # Y
-Z 501 2 0x5a 0,90 # Z
-[ 273 2 0x5b 0,91 # bracketleft
-lB 273 2 0x5b 0,91 # "
-\ 228 2 0x5c 0,92 # backslash
-rs 228 2 0x5c 0,92 # "
-] 273 2 0x5d 0,93 # bracketright
-rB 273 2 0x5d 0,93 # "
-a^ 280 2 0x5e 0,94 # circumflex
-^ 280 2 0x5e 0,94 # "
-_ 456 0 0x5f 0,95 # underscore
-` 280 2 0x60 0,96 # quoteleft
-oq 280 2 0x60 0,96 # "
-a 456 0 0x61 0,97 # a
-b 501 2 0x62 0,98 # b
-c 456 0 0x63 0,99 # c
-d 501 2 0x64 0,100 # d
-e 456 0 0x65 0,101 # e
-f 273 2 0x66 0,102 # f
-g 501 1 0x67 0,103 # g
-h 501 2 0x68 0,104 # h
-i 228 2 0x69 0,105 # i
-j 228 2 0x6a 0,106 # j
-k 456 2 0x6b 0,107 # k
-l 228 2 0x6c 0,108 # l
-m 729 0 0x6d 0,109 # m
-n 501 0 0x6e 0,110 # n
-o 501 0 0x6f 0,111 # o
-p 501 1 0x70 0,112 # p
-q 501 1 0x71 0,113 # q
-r 319 0 0x72 0,114 # r
-s 456 0 0x73 0,115 # s
-t 273 2 0x74 0,116 # t
-u 501 0 0x75 0,117 # u
-v 456 0 0x76 0,118 # v
-w 638 0 0x77 0,119 # w
-x 456 0 0x78 0,120 # x
-y 456 1 0x79 0,121 # y
-z 410 0 0x7a 0,122 # z
-lC 319 2 0x7b 0,123 # braceleft
-{ 319 2 0x7b 0,123 # "
-| 230 2 0x7c 0,124 # "
-rC 319 2 0x7d 0,125 # braceright
-} 319 2 0x7d 0,125 # "
-a~ 280 2 0x7e 0,126 # tilde
-~ 280 2 0x7e 0,126 # "
--D 592 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 501 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 547 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 501 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 820 2 0x92 1,36 # AE
-ae 729 0 0x91 1,37 # ae
-OE 820 2 0x141 1,166 # OE
-oe 774 0 0x146 1,167 # oe
-ij 450 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 501 2 0x147 1,23 # germandbls
-'A 501 2 0x15a 1,26 # Aacute
-'E 547 2 0x90 1,40 # Eacute
-'I 547 2 0x161 1,48 # Iacute
-'O 547 2 0x165 1,58 # Oacute
-'U 547 2 0x16a 1,66 # Uacute
-'a 456 2 0xa0 1,27 # aacute
-'e 456 2 0x82 1,41 # eacute
-'i 228 2 0xa1 1,49 # iacute
-'o 501 2 0xa2 1,59 # oacute
-'u 501 2 0x95 1,65 # uacute
-:A 592 2 0x8e 1,30 # Adieresis
-:E 592 2 0x15f 1,44 # Edieresis
-:I 592 2 0x163 1,52 # Idieresis
-:O 638 2 0x99 1,62 # Odieresis
-:U 592 2 0x9a 1,70 # Udieresis
-:Y 592 2 0x16d 1,74 # Ydieresis
-:a 456 2 0x84 1,31 # adieresis
-:e 456 2 0x89 1,45 # edieresis
-:i 228 2 0x8b 1,53 # idieresis
-:o 501 2 0x94 1,63 # odieresis
-:u 501 2 0x81 1,71 # udieresis
-:y 456 3 0x98 1,75 # ydieresis
-^A 456 2 0x15b 1,28 # Acircumflex
-^E 456 2 0x15e 1,42 # Ecircumflex
-^I 456 2 0x162 1,50 # Icircumflex
-^O 456 2 0x166 1,60 # Ocircumflex
-^U 456 2 0x16b 1,68 # Ucircumflex
-^a 456 2 0x83 1,29 # acircumflex
-^e 456 2 0x88 1,43 # ecircumflex
-^i 228 2 0x8c 1,51 # icircumflex
-^o 501 2 0x93 1,61 # ocircumflex
-^u 501 2 0x96 1,69 # ucircumflex
-`A 501 2 0x15c 1,32 # Agrave
-`E 501 2 0x160 1,46 # Egrave
-`I 501 2 0x164 1,54 # Igrave
-`O 501 2 0x167 1,64 # Ograve
-`U 501 2 0x16c 1,72 # Ugrave
-`a 456 2 0x85 1,33 # agrave
-~a 456 2 0x284 --- # atilde
-`e 456 2 0x8a 1,47 # egrave
-`i 228 2 0x8d 1,55 # igrave
-`o 501 2 0x95 1,65 # ograve
-`u 501 2 0x97 1,73 # ugrave
-~A 501 2 0x28e 1,26 # Atilde
-~N 592 2 0xa5 1,56 # Ntilde
-~O 592 2 0x168 1,82 # Otilde
-~n 501 2 0xa4 1,57 # ntilde
-~o 501 2 0x172 1,83 # otilde
-vS 501 2 0x169 1,176 # Scaron
-vs 501 2 0x173 1,177 # scaron
-vZ 501 2 0x16e 1,206 # Zcaron
-vz 501 2 0x174 1,207 # zcaron
-,C 592 2 0x80 1,38 # Ccedilla
-,c 456 0 0x87 1,39 # ccedilla
-/L 501 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 228 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 638 2 0x140 1,80 # Oslash
-/o 501 0 0x145 1,81 # oslash
-oA 592 2 0x8f 1,34 # Aring
-oa 456 2 0x86 1,35 # aring
-a" 273 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 273 2 0x135 1,8 # macron "macron or bar accent"
-a. 273 2 0x137 1,15 # dotaccent "dot accent"
-a^ 273 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 273 2 0x120 1,6 # acute "acute accent"
-ga 273 2 0x121 1,0 # grave "grave accent"
-ab 273 2 0x136 1,22 # breve "breve accent"
-ac 273 0 0x139 1,17 # cedilla "cedilla accent"
-ad 273 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 273 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 273 2 0x138 1,14 # ring "ring or circle accent"
-a~ 273 2 0x7e 1,2 # tilde "tilde accent"
-ho 273 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 228 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 456 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 456 2 0x24 0,36 # dollar
-Po 456 2 0x9c 4,11 # sterling
-Ye 456 2 0x9d 4,12 # yen
-Fn 456 2 0x9f 4,14 # florin
-ct 456 2 0x9b 4,19 # cent
-Fo 456 0 0xae 4,9 # guillemotleft
-Fc 273 0 0x4bb 4,20 # guillemotright
-fo 273 0 0x127 4,35 # guilsinglleft
-fc 273 0 0x128 4,36 # guilsinglright
-r! 273 1 0xad 4,7 # exclamdown
-r? 501 1 0xa8 4,8 # questiondown
-fi 501 2 0x130 4,54 # fi "fi ligature"
-fl 501 2 0x131 4,55 # fl "fl ligature"
-OK 501 0 0x3d6 --- # \& "check mark, tick"
-Of 303 2 0xa6 4,15 # ordfeminine
-Om 299 2 0xa7 4,16 # ordmasculine
-S1 273 2 0x156 4,78 # onesuperior
-S2 273 2 0xfd 4,20 # twosuperior
-S3 273 2 0x14d 4,26 # threesuperior
-<- 809 0 0x1b 6,22 # arrowleft
--> 809 0 0x1a 6,21 # arrowright
-<> 854 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 494 0 0x19 6,24 # arrowdown
-ua 494 0 0x18 6,23 # arrowup
-va 494 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 494 0 0x3dc 6,57 # arrowdblleft
-rA 494 0 0x3de 6,56 # arrowdblright
-hA 494 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 494 0 0x3df 6,59 # arrowdbldown
-uA 494 0 0x3dd 6,58 # arrowdblup
-ba 820 2 0xb3 3,9 # bar
-bb 230 2 0x7c 0,124 # brokenbar
-br 820 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 820 0 0x123 4,34 # ru "baseline rule"
-ul 456 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 820 0 0x3f4 3,9 # bv "bold vertical"
-ci 699 0 0x9 4,1 # circle
-bu 522 0 0x7 4,0 # bullet
-co 604 2 0x154 4,23 # copyright
-rg 604 2 0x155 4,22 # registered
-tm 604 2 0x170 4,41 # trademark
-dd 456 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 456 2 0x12a 4,39 # dagger
-ps 456 2 0x14 4,5 # paragraph
-sc 456 2 0x15 4,6 # section
-de 328 2 0xf8 6,36 # degree
-em 820 0 0x123 4,34 # emdash "em dash"
-en 456 0 0x132 4,33 # endash "en dash"
-%0 820 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 684 2 0xab 4,17 # onehalf
-14 684 2 0xac 4,18 # onequarter
-34 684 2 0x12e 4,25 # threequarters
-f/ 137 2 0x158 6,6 # fraction "bar for fractions"
-fm 137 0 0x3a2 6,45 # minute "footmark, prime"
-sd 137 0 0x3b2 6,46 # second
-ha 137 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 137 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 500 0 0x2d 6,0 # hyphen
-lB 273 2 0x5b 0,91 # bracketleft
-rB 273 2 0x5d 0,93 # bracketright
-lC 319 2 0x7b 0,123 # braceleft
-rC 319 2 0x7d 0,125 # braceright
-la 319 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 319 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 410 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 410 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 410 2 0x125 4,32 # quotedblleft
-rq 410 2 0x4ba 6,31 # quotedblright
-oq 228 2 0x176 4,29 # quoteleft "single open quote"
-aq 195 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 800 2 0x40 0,64 # at
-.C1 479 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 456 2 0x23 0,35 # numbersign
-sl 228 2 0x2f 0,47 # slash
-rs 228 2 0x5c 0,92 # backslash
-3d 228 0 0x35c 6,102 # therefore
-tf 228 0 0x35c 6,102 # therefore
-*A 228 0 0x341 8,0 # Alpha
-*B 228 0 0x342 8,2 # Beta
-*C 228 0 0x358 8,28 # Xi
-*D 228 0 0x344 8,8 # Delta
-*E 228 0 0x345 8,10 # Epsilon
-*F 609 0 0x346 8,44 # Phi
-*G 481 0 0x347 8,6 # Gamma
-*H 481 0 0x351 8,16 # Theta
-*I 481 0 0x349 8,18 # Iota
-*K 481 0 0x34b 8,20 # Kappa
-*L 481 0 0x34c 8,22 # Lambda
-*M 481 0 0x34d 8,24 # Mu
-*N 481 0 0x34e 8,26 # Nu
-*O 481 0 0x34f 8,30 # Omicron
-*P 481 0 0x350 8,32 # Pi
-*Q 481 0 0x359 8,48 # Psi
-*R 481 0 0x352 8,34 # Rho
-*S 481 0 0x353 8,36 # Sigma
-*T 481 0 0x354 8,40 # Tau
-*U 481 0 0x3a1 8,76 # Upsilon
-*W 630 0 0x357 8,50 # Omega
-*X 481 0 0x343 8,36 # Chi
-*Y 481 0 0x348 8,14 # Eta
-*Z 481 0 0x35a 8,12 # Zeta
-*a 499 0 0xe0 8,1 # alpha
-*b 499 0 0xe1 8,3 # beta
-*c 499 0 0x378 8,29 # xi
-*d 487 0 0xeb 8,9 # delta
-*e 487 0 0x36e 8,70 # epsilon
-*f 487 0 0x366 8,45 # phi
-+f 487 0 0x36a 8,77 # phi1 "variant phi"
-*g 487 0 0x367 8,7 # gamma
-*h 486 0 0xe9 8,17 # theta
-+h 486 0 0x375 8,71 # theta1 "variant theta"
-*i 486 0 0x369 8,19 # iota
-*k 486 0 0x36b 8,21 # kappa
-*l 486 0 0x36c 8,23 # lambda
-*m 501 0 0xe6 8,25 # mu
-*n 501 0 0x36e 8,27 # nu
-*o 501 0 0x36f 8,31 # omicron
-*p 527 0 0xe3 8,33 # pi
-+p 527 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 527 0 0x379 8,49 # psi
-*r 527 0 0x372 8,35 # rho
-*s 531 0 0xe5 8,37 # sigma
-*t 375 0 0xe7 8,41 # tau
-*u 375 0 0x375 8,27 # upsilon
-*w 375 0 0x377 8,51 # omega
-*x 375 0 0x363 8,47 # chi
-*y 375 0 0x368 8,15 # eta
-*z 375 0 0x37a 8,13 # zeta
-ts 375 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 655 0 0xf7 6,13 # approxequal
-~= 655 0 0xf7 6,13 # approxequal
-!= 655 0 0x3b9 6,99 # notequal
-** 228 0 0x32a 0,32 # asteriskmath
-+- 479 0 0xf1 6,1 # plusminus
-<= 592 0 0xf3 6,2 # lessequal
-== 592 0 0x3ba 8,14 # equivalence
-=~ 592 0 0x340 8,116 # congruent
->= 499 0 0x3b3 8,3 # greaterequal
-AN 499 0 0x3d9 8,85 # logicaland
-OR 499 0 0x3da 8,86 # logicalor
-no 499 0 0x3d8 8,20 # logicalnot
-te 499 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 499 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 499 0 0x3c0 9,0 # aleph
-Im 499 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 499 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 499 0 0x3a5 8,19 # infinity
-md 499 0 0x3b7 8,32 # dotmath
-mo 499 0 0x3ce 8,15 # element
-mu 499 0 0x3b4 8,39 # multiply
-nc 499 0 0x3cb 8,197 # uni2285
-nm 499 0 0x3cf 8,209 # notelement
-pl 273 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 479 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 479 0 0x3b5 6,4 # proportional
-pp 479 0 0x35e 8,89 # perpendicular
-sb 479 0 0x3cc 6,67 # propersubset
-sp 479 0 0x3c9 6,68 # propersuperset
-ib 479 0 0x3cd 6,69 # reflexsubset
-ip 479 0 0x3ca 6,70 # reflexsuperset
-ap 479 0 0x37e 6,12 # similar
-pd 479 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 479 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 479 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 645 0 0xef 6,16 # intersection "intersection, cap"
-cu 645 0 0x3c8 6,66 # union "union, cup"
-di 479 0 0x3b8 6,8 # divide "division sign"
--h 820 0 0xc4 3,8 # hbar
-hbar "
-gr 820 0 0x3d1 6,33 # gradient
-es 638 0 0x3c6 0,79 # emptyset
-CL 617 0 0x5 5,168 # club "club suit"
-SP 617 0 0x6 5,171 # spade "spade suit"
-HE 617 0 0x3 5,170 # heart "heart suit"
-DI 617 0 0x4 5,169 # diamond "diamond suit"
-CR 617 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 617 0 0x327 6,71 # suchthat
-/_ 617 0 0x3d0 6,79 # angle
-<< 456 0 0xae 6,77 # "" "much less"
->> 456 0 0xaf 6,78 # "" "much greater"
-wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 456 0 0x3e0 6,95 # lozenge
-an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 240 0 0xfa 6,32 # periodcentered
-mc 501 0 0xe6 8,25 # mu
-t+- 479 0 0xf1 6,1 # plusminus
-tmu 499 0 0x3b4 8,39 # multiply
-tdi 479 0 0x3b8 6,8 # divide "division sign"
-tno 499 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HNBI b/contrib/groff/font/devlbp/HNBI
deleted file mode 100644
index 119aa6e86ef8..000000000000
--- a/contrib/groff/font/devlbp/HNBI
+++ /dev/null
@@ -1,400 +0,0 @@
-name HNBI
-lbpname Swiss-Narrow-BoldOblique
-special
-spacewidth 228
-slant 0
-ligatures fi fl 0
-charset
-ha 280 2 0x4c3 0,94 # asciicircum
-ti 280 0 0x4c4 0,126 # asciitilde
-vS 280 2 0x169 1,176 # Scaron
-vZ 280 2 0x16e 1,206 # Zcaron
-vs 280 2 0x173 1,177 # scaron
-vz 280 2 0x174 1,207 # zcaron
-:Y 280 2 0x16d 1,74 # Ydieresis
-tm 280 2 0x170 4,41 # trademark
-aq 195 2 0x27 0,39 # quotesingle
-space 228 0 0x20 0,32
-! 273 2 0x21 0,33 # exclam
-" 389 2 0x22 0,34 # quotedbl
-dq 389 2 0x22 0,34 # quotedbl
-# 456 2 0x23 0,35 # numbersign
-sh 456 2 0x23 0,35 # "
-$ 456 2 0x24 0,36 # dollar
-Do 456 2 0x24 0,36 # "
-% 720 2 0x25 0,37 # percent
-& 592 2 0x26 0,38 # ampersand
-' 195 2 0x27 0,39 # quoteright
-cq 195 2 0x27 0,39 # quoteright
-( 273 2 0x28 0,40 # parenleft
-) 273 2 0x29 0,41 # parenright
-* 319 2 0x2a 0,42 # asterisk
-+ 479 0 0x2b 0,43 # plus
-, 228 0 0x2c 0,44 # comma
-- 479 0 0x2d 0,45 # hyphen
-hy 479 0 0x2d 0,45 # "
-. 228 0 0x2e 0,46 # period
-/ 228 2 0x2f 0,47 # slash
-sl 228 2 0x2f 0,47 # "
-0 456 2 0x30 0,48 # zero
-1 456 2 0x31 0,49 # one
-2 456 2 0x32 0,50 # two
-3 456 2 0x33 0,51 # three
-4 456 2 0x34 0,52 # four
-5 456 2 0x35 0,53 # five
-6 456 2 0x36 0,54 # six
-7 456 2 0x37 0,55 # seven
-8 456 2 0x38 0,56 # eight
-9 456 2 0x39 0,57 # nine
-: 273 0 0x3a 0,58 # colon
-; 273 0 0x3b 0,59 # semicolon
-< 479 0 0x3c 0,60 # less
-= 479 0 0x3d 0,61 # equal
-> 479 0 0x3e 0,62 # greater
-? 501 2 0x3f 0,63 # question
-@ 800 2 0x40 0,64 # at
-at 800 2 0x40 0,64 # "
-A 592 2 0x41 0,65 # A
-B 592 2 0x42 0,66 # B
-C 592 2 0x43 0,67 # C
-D 592 2 0x44 0,68 # D
-E 547 2 0x45 0,69 # E
-F 501 2 0x46 0,70 # F
-G 638 2 0x47 0,71 # G
-H 592 2 0x48 0,72 # H
-I 228 2 0x49 0,73 # I
-J 456 2 0x4a 0,74 # J
-K 592 2 0x4b 0,75 # K
-L 501 2 0x4c 0,76 # L
-M 683 2 0x4d 0,77 # M
-N 592 2 0x4e 0,78 # N
-O 638 2 0x4f 0,79 # O
-P 547 2 0x50 0,80 # P
-Q 638 2 0x51 0,81 # Q
-R 592 2 0x52 0,82 # R
-S 547 2 0x53 0,83 # S
-T 501 2 0x54 0,84 # T
-U 592 2 0x55 0,85 # U
-V 547 2 0x56 0,86 # V
-W 774 2 0x57 0,87 # W
-X 547 2 0x58 0,88 # X
-Y 547 2 0x59 0,89 # Y
-Z 501 2 0x5a 0,90 # Z
-[ 273 2 0x5b 0,91 # bracketleft
-lB 273 2 0x5b 0,91 # "
-\ 228 2 0x5c 0,92 # backslash
-rs 228 2 0x5c 0,92 # "
-] 273 2 0x5d 0,93 # bracketright
-rB 273 2 0x5d 0,93 # "
-a^ 280 2 0x5e 0,94 # circumflex
-^ 280 2 0x5e 0,94 # "
-_ 456 0 0x5f 0,95 # underscore
-` 280 2 0x60 0,96 # quoteleft
-oq 280 2 0x60 0,96 # "
-a 456 0 0x61 0,97 # a
-b 501 2 0x62 0,98 # b
-c 456 0 0x63 0,99 # c
-d 501 2 0x64 0,100 # d
-e 456 0 0x65 0,101 # e
-f 273 2 0x66 0,102 # f
-g 501 1 0x67 0,103 # g
-h 501 2 0x68 0,104 # h
-i 228 2 0x69 0,105 # i
-j 228 2 0x6a 0,106 # j
-k 456 2 0x6b 0,107 # k
-l 228 2 0x6c 0,108 # l
-m 729 0 0x6d 0,109 # m
-n 501 0 0x6e 0,110 # n
-o 501 0 0x6f 0,111 # o
-p 501 1 0x70 0,112 # p
-q 501 1 0x71 0,113 # q
-r 319 0 0x72 0,114 # r
-s 456 0 0x73 0,115 # s
-t 273 2 0x74 0,116 # t
-u 501 0 0x75 0,117 # u
-v 456 0 0x76 0,118 # v
-w 638 0 0x77 0,119 # w
-x 456 0 0x78 0,120 # x
-y 456 1 0x79 0,121 # y
-z 410 0 0x7a 0,122 # z
-lC 319 2 0x7b 0,123 # braceleft
-{ 319 2 0x7b 0,123 # "
-| 230 2 0x7c 0,124 # "
-rC 319 2 0x7d 0,125 # braceright
-} 319 2 0x7d 0,125 # "
-a~ 280 2 0x7e 0,126 # tilde
-~ 280 2 0x7e 0,126 # "
--D 592 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 501 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 547 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 501 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 820 2 0x92 1,36 # AE
-ae 729 0 0x91 1,37 # ae
-OE 820 2 0x141 1,166 # OE
-oe 774 0 0x146 1,167 # oe
-ij 450 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 501 2 0x147 1,23 # germandbls
-'A 501 2 0x15a 1,26 # Aacute
-'E 547 2 0x90 1,40 # Eacute
-'I 547 2 0x161 1,48 # Iacute
-'O 547 2 0x165 1,58 # Oacute
-'U 547 2 0x16a 1,66 # Uacute
-'a 456 2 0xa0 1,27 # aacute
-'e 456 2 0x82 1,41 # eacute
-'i 228 2 0xa1 1,49 # iacute
-'o 501 2 0xa2 1,59 # oacute
-'u 501 2 0x95 1,65 # uacute
-:A 592 2 0x8e 1,30 # Adieresis
-:E 592 2 0x15f 1,44 # Edieresis
-:I 592 2 0x163 1,52 # Idieresis
-:O 638 2 0x99 1,62 # Odieresis
-:U 592 2 0x9a 1,70 # Udieresis
-:Y 592 2 0x16d 1,74 # Ydieresis
-:a 456 2 0x84 1,31 # adieresis
-:e 456 2 0x89 1,45 # edieresis
-:i 228 2 0x8b 1,53 # idieresis
-:o 501 2 0x94 1,63 # odieresis
-:u 501 2 0x81 1,71 # udieresis
-:y 456 3 0x98 1,75 # ydieresis
-^A 456 2 0x15b 1,28 # Acircumflex
-^E 456 2 0x15e 1,42 # Ecircumflex
-^I 456 2 0x162 1,50 # Icircumflex
-^O 456 2 0x166 1,60 # Ocircumflex
-^U 456 2 0x16b 1,68 # Ucircumflex
-^a 456 2 0x83 1,29 # acircumflex
-^e 456 2 0x88 1,43 # ecircumflex
-^i 228 2 0x8c 1,51 # icircumflex
-^o 501 2 0x93 1,61 # ocircumflex
-^u 501 2 0x96 1,69 # ucircumflex
-`A 501 2 0x15c 1,32 # Agrave
-`E 501 2 0x160 1,46 # Egrave
-`I 501 2 0x164 1,54 # Igrave
-`O 501 2 0x167 1,64 # Ograve
-`U 501 2 0x16c 1,72 # Ugrave
-`a 456 2 0x85 1,33 # agrave
-~a 456 2 0x284 --- # atilde
-`e 456 2 0x8a 1,47 # egrave
-`i 228 2 0x8d 1,55 # igrave
-`o 501 2 0x95 1,65 # ograve
-`u 501 2 0x97 1,73 # ugrave
-~A 501 2 0x28e 1,26 # Atilde
-~N 592 2 0xa5 1,56 # Ntilde
-~O 592 2 0x168 1,82 # Otilde
-~n 501 2 0xa4 1,57 # ntilde
-~o 501 2 0x172 1,83 # otilde
-vS 501 2 0x169 1,176 # Scaron
-vs 501 2 0x173 1,177 # scaron
-vZ 501 2 0x16e 1,206 # Zcaron
-vz 501 2 0x174 1,207 # zcaron
-,C 592 2 0x80 1,38 # Ccedilla
-,c 456 0 0x87 1,39 # ccedilla
-/L 501 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 228 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 638 2 0x140 1,80 # Oslash
-/o 501 0 0x145 1,81 # oslash
-oA 592 2 0x8f 1,34 # Aring
-oa 456 2 0x86 1,35 # aring
-a" 273 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 273 2 0x135 1,8 # macron "macron or bar accent"
-a. 273 2 0x137 1,15 # dotaccent "dot accent"
-a^ 273 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 273 2 0x120 1,6 # acute "acute accent"
-ga 273 2 0x121 1,0 # grave "grave accent"
-ab 273 2 0x136 1,22 # breve "breve accent"
-ac 273 0 0x139 1,17 # cedilla "cedilla accent"
-ad 273 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 273 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 273 2 0x138 1,14 # ring "ring or circle accent"
-a~ 273 2 0x7e 1,2 # tilde "tilde accent"
-ho 273 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 228 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 456 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 456 2 0x24 0,36 # dollar
-Po 456 2 0x9c 4,11 # sterling
-Ye 456 2 0x9d 4,12 # yen
-Fn 456 2 0x9f 4,14 # florin
-ct 456 2 0x9b 4,19 # cent
-Fo 456 0 0xae 4,9 # guillemotleft
-Fc 273 0 0x4bb 4,20 # guillemotright
-fo 273 0 0x127 4,35 # guilsinglleft
-fc 273 0 0x128 4,36 # guilsinglright
-r! 273 1 0xad 4,7 # exclamdown
-r? 501 1 0xa8 4,8 # questiondown
-fi 501 2 0x130 4,54 # fi "fi ligature"
-fl 501 2 0x131 4,55 # fl "fl ligature"
-OK 501 0 0x3d6 --- # \& "check mark, tick"
-Of 303 2 0xa6 4,15 # ordfeminine
-Om 299 2 0xa7 4,16 # ordmasculine
-S1 273 2 0x156 4,78 # onesuperior
-S2 273 2 0xfd 4,20 # twosuperior
-S3 273 2 0x14d 4,26 # threesuperior
-<- 809 0 0x1b 6,22 # arrowleft
--> 809 0 0x1a 6,21 # arrowright
-<> 854 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 494 0 0x19 6,24 # arrowdown
-ua 494 0 0x18 6,23 # arrowup
-va 494 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 494 0 0x3dc 6,57 # arrowdblleft
-rA 494 0 0x3de 6,56 # arrowdblright
-hA 494 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 494 0 0x3df 6,59 # arrowdbldown
-uA 494 0 0x3dd 6,58 # arrowdblup
-ba 820 2 0xb3 3,9 # bar
-bb 230 2 0x7c 0,124 # brokenbar
-br 820 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 820 0 0x123 4,34 # ru "baseline rule"
-ul 456 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 820 0 0x3f4 3,9 # bv "bold vertical"
-ci 699 0 0x9 4,1 # circle
-bu 522 0 0x7 4,0 # bullet
-co 604 2 0x154 4,23 # copyright
-rg 604 2 0x155 4,22 # registered
-tm 604 2 0x170 4,41 # trademark
-dd 456 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 456 2 0x12a 4,39 # dagger
-ps 456 2 0x14 4,5 # paragraph
-sc 456 2 0x15 4,6 # section
-de 328 2 0xf8 6,36 # degree
-em 820 0 0x123 4,34 # emdash "em dash"
-en 456 0 0x132 4,33 # endash "en dash"
-%0 820 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 684 2 0xab 4,17 # onehalf
-14 684 2 0xac 4,18 # onequarter
-34 684 2 0x12e 4,25 # threequarters
-f/ 137 2 0x158 6,6 # fraction "bar for fractions"
-fm 137 0 0x3a2 6,45 # minute "footmark, prime"
-sd 137 0 0x3b2 6,46 # second
-ha 137 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 137 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 500 0 0x2d 6,0 # hyphen
-lB 273 2 0x5b 0,91 # bracketleft
-rB 273 2 0x5d 0,93 # bracketright
-lC 319 2 0x7b 0,123 # braceleft
-rC 319 2 0x7d 0,125 # braceright
-la 319 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 319 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 410 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 410 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 410 2 0x125 4,32 # quotedblleft
-rq 410 2 0x4ba 6,31 # quotedblright
-oq 228 2 0x176 4,29 # quoteleft "single open quote"
-aq 195 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 800 2 0x40 0,64 # at
-.C1 479 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 456 2 0x23 0,35 # numbersign
-sl 228 2 0x2f 0,47 # slash
-rs 228 2 0x5c 0,92 # backslash
-3d 228 0 0x35c 6,102 # therefore
-tf 228 0 0x35c 6,102 # therefore
-*A 228 0 0x341 8,0 # Alpha
-*B 228 0 0x342 8,2 # Beta
-*C 228 0 0x358 8,28 # Xi
-*D 228 0 0x344 8,8 # Delta
-*E 228 0 0x345 8,10 # Epsilon
-*F 609 0 0x346 8,44 # Phi
-*G 481 0 0x347 8,6 # Gamma
-*H 481 0 0x351 8,16 # Theta
-*I 481 0 0x349 8,18 # Iota
-*K 481 0 0x34b 8,20 # Kappa
-*L 481 0 0x34c 8,22 # Lambda
-*M 481 0 0x34d 8,24 # Mu
-*N 481 0 0x34e 8,26 # Nu
-*O 481 0 0x34f 8,30 # Omicron
-*P 481 0 0x350 8,32 # Pi
-*Q 481 0 0x359 8,48 # Psi
-*R 481 0 0x352 8,34 # Rho
-*S 481 0 0x353 8,36 # Sigma
-*T 481 0 0x354 8,40 # Tau
-*U 481 0 0x3a1 8,76 # Upsilon
-*W 630 0 0x357 8,50 # Omega
-*X 481 0 0x343 8,36 # Chi
-*Y 481 0 0x348 8,14 # Eta
-*Z 481 0 0x35a 8,12 # Zeta
-*a 499 0 0xe0 8,1 # alpha
-*b 499 0 0xe1 8,3 # beta
-*c 499 0 0x378 8,29 # xi
-*d 487 0 0xeb 8,9 # delta
-*e 487 0 0x36e 8,70 # epsilon
-*f 487 0 0x366 8,45 # phi
-+f 487 0 0x36a 8,77 # phi1 "variant phi"
-*g 487 0 0x367 8,7 # gamma
-*h 486 0 0xe9 8,17 # theta
-+h 486 0 0x375 8,71 # theta1 "variant theta"
-*i 486 0 0x369 8,19 # iota
-*k 486 0 0x36b 8,21 # kappa
-*l 486 0 0x36c 8,23 # lambda
-*m 501 0 0xe6 8,25 # mu
-*n 501 0 0x36e 8,27 # nu
-*o 501 0 0x36f 8,31 # omicron
-*p 527 0 0xe3 8,33 # pi
-+p 527 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 527 0 0x379 8,49 # psi
-*r 527 0 0x372 8,35 # rho
-*s 531 0 0xe5 8,37 # sigma
-*t 375 0 0xe7 8,41 # tau
-*u 375 0 0x375 8,27 # upsilon
-*w 375 0 0x377 8,51 # omega
-*x 375 0 0x363 8,47 # chi
-*y 375 0 0x368 8,15 # eta
-*z 375 0 0x37a 8,13 # zeta
-ts 375 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 655 0 0xf7 6,13 # approxequal
-~= 655 0 0xf7 6,13 # approxequal
-!= 655 0 0x3b9 6,99 # notequal
-** 228 0 0x32a 0,32 # asteriskmath
-+- 479 0 0xf1 6,1 # plusminus
-<= 592 0 0xf3 6,2 # lessequal
-== 592 0 0x3ba 8,14 # equivalence
-=~ 592 0 0x340 8,116 # congruent
->= 499 0 0x3b3 8,3 # greaterequal
-AN 499 0 0x3d9 8,85 # logicaland
-OR 499 0 0x3da 8,86 # logicalor
-no 499 0 0x3d8 8,20 # logicalnot
-te 499 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 499 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 499 0 0x3c0 9,0 # aleph
-Im 499 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 499 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 499 0 0x3a5 8,19 # infinity
-md 499 0 0x3b7 8,32 # dotmath
-mo 499 0 0x3ce 8,15 # element
-mu 499 0 0x3b4 8,39 # multiply
-nc 499 0 0x3cb 8,197 # uni2285
-nm 499 0 0x3cf 8,209 # notelement
-pl 273 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 479 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 479 0 0x3b5 6,4 # proportional
-pp 479 0 0x35e 8,89 # perpendicular
-sb 479 0 0x3cc 6,67 # propersubset
-sp 479 0 0x3c9 6,68 # propersuperset
-ib 479 0 0x3cd 6,69 # reflexsubset
-ip 479 0 0x3ca 6,70 # reflexsuperset
-ap 479 0 0x37e 6,12 # similar
-pd 479 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 479 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 479 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 645 0 0xef 6,16 # intersection "intersection, cap"
-cu 645 0 0x3c8 6,66 # union "union, cup"
-di 479 0 0x3b8 6,8 # divide "division sign"
--h 820 0 0xc4 3,8 # hbar
-hbar "
-gr 820 0 0x3d1 6,33 # gradient
-es 638 0 0x3c6 0,79 # emptyset
-CL 617 0 0x5 5,168 # club "club suit"
-SP 617 0 0x6 5,171 # spade "spade suit"
-HE 617 0 0x3 5,170 # heart "heart suit"
-DI 617 0 0x4 5,169 # diamond "diamond suit"
-CR 617 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 617 0 0x327 6,71 # suchthat
-/_ 617 0 0x3d0 6,79 # angle
-<< 456 0 0xae 6,77 # "" "much less"
->> 456 0 0xaf 6,78 # "" "much greater"
-wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 456 0 0x3e0 6,95 # lozenge
-an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 240 0 0xfa 6,32 # periodcentered
-mc 501 0 0xe6 8,25 # mu
-t+- 479 0 0xf1 6,1 # plusminus
-tmu 499 0 0x3b4 8,39 # multiply
-tdi 479 0 0x3b8 6,8 # divide "division sign"
-tno 499 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HNI b/contrib/groff/font/devlbp/HNI
deleted file mode 100644
index 78d22071e1f0..000000000000
--- a/contrib/groff/font/devlbp/HNI
+++ /dev/null
@@ -1,400 +0,0 @@
-name HNI
-lbpname Swiss-Narrow-Oblique
-special
-spacewidth 228
-slant 0
-ligatures fi fl 0
-charset
-ha 280 2 0x4c3 0,94 # asciicircum
-ti 280 0 0x4c4 0,126 # asciitilde
-vS 280 2 0x169 1,176 # Scaron
-vZ 280 2 0x16e 1,206 # Zcaron
-vs 280 2 0x173 1,177 # scaron
-vz 280 2 0x174 1,207 # zcaron
-:Y 280 2 0x16d 1,74 # Ydieresis
-tm 280 2 0x170 4,41 # trademark
-aq 157 2 0x27 0,39 # quotesingle
-space 228 0 0x20 0,32
-! 228 2 0x21 0,33 # exclam
-" 291 2 0x22 0,34 # quotedbl
-dq 291 2 0x22 0,34 # quotedbl
-# 456 2 0x23 0,35 # numbersign
-sh 456 2 0x23 0,35 # "
-$ 456 2 0x24 0,36 # dollar
-Do 456 2 0x24 0,36 # "
-% 720 2 0x25 0,37 # percent
-& 547 2 0x26 0,38 # ampersand
-' 157 2 0x27 0,39 # quoteright
-cq 157 2 0x27 0,39 # quoteright
-( 273 2 0x28 0,40 # parenleft
-) 273 2 0x29 0,41 # parenright
-* 319 2 0x2a 0,42 # asterisk
-+ 479 0 0x2b 0,43 # plus
-, 228 0 0x2c 0,44 # comma
-- 479 0 0x2d 0,45 # hyphen
-hy 479 0 0x2d 0,45 # "
-. 228 0 0x2e 0,46 # period
-/ 228 2 0x2f 0,47 # slash
-sl 228 2 0x2f 0,47 # "
-0 456 2 0x30 0,48 # zero
-1 456 2 0x31 0,49 # one
-2 456 2 0x32 0,50 # two
-3 456 2 0x33 0,51 # three
-4 456 2 0x34 0,52 # four
-5 456 2 0x35 0,53 # five
-6 456 2 0x36 0,54 # six
-7 456 2 0x37 0,55 # seven
-8 456 2 0x38 0,56 # eight
-9 456 2 0x39 0,57 # nine
-: 228 0 0x3a 0,58 # colon
-; 228 0 0x3b 0,59 # semicolon
-< 479 0 0x3c 0,60 # less
-= 479 0 0x3d 0,61 # equal
-> 479 0 0x3e 0,62 # greater
-? 456 2 0x3f 0,63 # question
-@ 832 2 0x40 0,64 # at
-at 832 2 0x40 0,64 # "
-A 547 2 0x41 0,65 # A
-B 547 2 0x42 0,66 # B
-C 592 2 0x43 0,67 # C
-D 592 2 0x44 0,68 # D
-E 547 2 0x45 0,69 # E
-F 501 2 0x46 0,70 # F
-G 638 2 0x47 0,71 # G
-H 592 2 0x48 0,72 # H
-I 228 2 0x49 0,73 # I
-J 410 2 0x4a 0,74 # J
-K 547 2 0x4b 0,75 # K
-L 456 2 0x4c 0,76 # L
-M 683 2 0x4d 0,77 # M
-N 592 2 0x4e 0,78 # N
-O 638 2 0x4f 0,79 # O
-P 547 2 0x50 0,80 # P
-Q 638 2 0x51 0,81 # Q
-R 592 2 0x52 0,82 # R
-S 547 2 0x53 0,83 # S
-T 501 2 0x54 0,84 # T
-U 592 2 0x55 0,85 # U
-V 547 2 0x56 0,86 # V
-W 774 2 0x57 0,87 # W
-X 547 2 0x58 0,88 # X
-Y 547 2 0x59 0,89 # Y
-Z 501 2 0x5a 0,90 # Z
-[ 228 2 0x5b 0,91 # bracketleft
-lB 228 2 0x5b 0,91 # "
-\ 228 2 0x5c 0,92 # backslash
-rs 228 2 0x5c 0,92 # "
-] 228 2 0x5d 0,93 # bracketright
-rB 228 2 0x5d 0,93 # "
-a^ 280 2 0x5e 0,94 # circumflex
-^ 280 2 0x5e 0,94 # "
-_ 456 0 0x5f 0,95 # underscore
-` 280 2 0x60 0,96 # quoteleft
-oq 280 2 0x60 0,96 # "
-a 456 0 0x61 0,97 # a
-b 456 2 0x62 0,98 # b
-c 410 0 0x63 0,99 # c
-d 456 2 0x64 0,100 # d
-e 456 0 0x65 0,101 # e
-f 228 2 0x66 0,102 # f
-g 456 1 0x67 0,103 # g
-h 456 2 0x68 0,104 # h
-i 182 2 0x69 0,105 # i
-j 182 2 0x6a 0,106 # j
-k 410 2 0x6b 0,107 # k
-l 182 2 0x6c 0,108 # l
-m 683 0 0x6d 0,109 # m
-n 456 0 0x6e 0,110 # n
-o 456 0 0x6f 0,111 # o
-p 456 1 0x70 0,112 # p
-q 456 1 0x71 0,113 # q
-r 273 0 0x72 0,114 # r
-s 410 0 0x73 0,115 # s
-t 228 2 0x74 0,116 # t
-u 456 0 0x75 0,117 # u
-v 410 0 0x76 0,118 # v
-w 592 0 0x77 0,119 # w
-x 410 0 0x78 0,120 # x
-y 410 1 0x79 0,121 # y
-z 410 0 0x7a 0,122 # z
-lC 274 2 0x7b 0,123 # braceleft
-{ 274 2 0x7b 0,123 # "
-| 213 2 0x7c 0,124 # "
-rC 274 2 0x7d 0,125 # braceright
-} 274 2 0x7d 0,125 # "
-a~ 280 2 0x7e 0,126 # tilde
-~ 280 2 0x7e 0,126 # "
--D 592 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 456 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 547 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 456 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 820 2 0x92 1,36 # AE
-ae 729 0 0x91 1,37 # ae
-OE 820 2 0x141 1,166 # OE
-oe 774 0 0x146 1,167 # oe
-ij 353 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 501 2 0x147 1,23 # germandbls
-'A 501 2 0x15a 1,26 # Aacute
-'E 547 2 0x90 1,40 # Eacute
-'I 547 2 0x161 1,48 # Iacute
-'O 547 2 0x165 1,58 # Oacute
-'U 547 2 0x16a 1,66 # Uacute
-'a 456 2 0xa0 1,27 # aacute
-'e 456 2 0x82 1,41 # eacute
-'i 228 2 0xa1 1,49 # iacute
-'o 456 2 0xa2 1,59 # oacute
-'u 456 2 0x95 1,65 # uacute
-:A 547 2 0x8e 1,30 # Adieresis
-:E 547 2 0x15f 1,44 # Edieresis
-:I 547 2 0x163 1,52 # Idieresis
-:O 638 2 0x99 1,62 # Odieresis
-:U 592 2 0x9a 1,70 # Udieresis
-:Y 592 2 0x16d 1,74 # Ydieresis
-:a 456 2 0x84 1,31 # adieresis
-:e 456 2 0x89 1,45 # edieresis
-:i 228 2 0x8b 1,53 # idieresis
-:o 456 2 0x94 1,63 # odieresis
-:u 456 2 0x81 1,71 # udieresis
-:y 410 3 0x98 1,75 # ydieresis
-^A 410 2 0x15b 1,28 # Acircumflex
-^E 410 2 0x15e 1,42 # Ecircumflex
-^I 410 2 0x162 1,50 # Icircumflex
-^O 410 2 0x166 1,60 # Ocircumflex
-^U 410 2 0x16b 1,68 # Ucircumflex
-^a 456 2 0x83 1,29 # acircumflex
-^e 456 2 0x88 1,43 # ecircumflex
-^i 228 2 0x8c 1,51 # icircumflex
-^o 456 2 0x93 1,61 # ocircumflex
-^u 456 2 0x96 1,69 # ucircumflex
-`A 456 2 0x15c 1,32 # Agrave
-`E 456 2 0x160 1,46 # Egrave
-`I 456 2 0x164 1,54 # Igrave
-`O 456 2 0x167 1,64 # Ograve
-`U 456 2 0x16c 1,72 # Ugrave
-`a 456 2 0x85 1,33 # agrave
-~a 456 2 0x284 --- # atilde
-`e 456 2 0x8a 1,47 # egrave
-`i 228 2 0x8d 1,55 # igrave
-`o 456 2 0x95 1,65 # ograve
-`u 456 2 0x97 1,73 # ugrave
-~A 456 2 0x28e 1,26 # Atilde
-~N 592 2 0xa5 1,56 # Ntilde
-~O 592 2 0x168 1,82 # Otilde
-~n 456 2 0xa4 1,57 # ntilde
-~o 456 2 0x172 1,83 # otilde
-vS 456 2 0x169 1,176 # Scaron
-vs 456 2 0x173 1,177 # scaron
-vZ 456 2 0x16e 1,206 # Zcaron
-vz 456 2 0x174 1,207 # zcaron
-,C 592 2 0x80 1,38 # Ccedilla
-,c 410 0 0x87 1,39 # ccedilla
-/L 456 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 182 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 638 2 0x140 1,80 # Oslash
-/o 501 0 0x145 1,81 # oslash
-oA 547 2 0x8f 1,34 # Aring
-oa 456 2 0x86 1,35 # aring
-a" 273 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 273 2 0x135 1,8 # macron "macron or bar accent"
-a. 273 2 0x137 1,15 # dotaccent "dot accent"
-a^ 273 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 273 2 0x120 1,6 # acute "acute accent"
-ga 273 2 0x121 1,0 # grave "grave accent"
-ab 273 2 0x136 1,22 # breve "breve accent"
-ac 273 0 0x139 1,17 # cedilla "cedilla accent"
-ad 273 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 273 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 273 2 0x138 1,14 # ring "ring or circle accent"
-a~ 273 2 0x7e 1,2 # tilde "tilde accent"
-ho 273 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 228 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 456 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 456 2 0x24 0,36 # dollar
-Po 456 2 0x9c 4,11 # sterling
-Ye 456 2 0x9d 4,12 # yen
-Fn 456 2 0x9f 4,14 # florin
-ct 456 2 0x9b 4,19 # cent
-Fo 456 0 0xae 4,9 # guillemotleft
-Fc 273 0 0x4bb 4,20 # guillemotright
-fo 273 0 0x127 4,35 # guilsinglleft
-fc 273 0 0x128 4,36 # guilsinglright
-r! 273 1 0xad 4,7 # exclamdown
-r? 501 1 0xa8 4,8 # questiondown
-fi 410 2 0x130 4,54 # fi "fi ligature"
-fl 410 2 0x131 4,55 # fl "fl ligature"
-OK 410 0 0x3d6 --- # \& "check mark, tick"
-Of 303 2 0xa6 4,15 # ordfeminine
-Om 299 2 0xa7 4,16 # ordmasculine
-S1 273 2 0x156 4,78 # onesuperior
-S2 273 2 0xfd 4,20 # twosuperior
-S3 273 2 0x14d 4,26 # threesuperior
-<- 809 0 0x1b 6,22 # arrowleft
--> 809 0 0x1a 6,21 # arrowright
-<> 854 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 494 0 0x19 6,24 # arrowdown
-ua 494 0 0x18 6,23 # arrowup
-va 494 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 494 0 0x3dc 6,57 # arrowdblleft
-rA 494 0 0x3de 6,56 # arrowdblright
-hA 494 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 494 0 0x3df 6,59 # arrowdbldown
-uA 494 0 0x3dd 6,58 # arrowdblup
-ba 820 2 0xb3 3,9 # bar
-bb 213 2 0x7c 0,124 # brokenbar
-br 820 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 820 0 0x123 4,34 # ru "baseline rule"
-ul 456 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 820 0 0x3f4 3,9 # bv "bold vertical"
-ci 699 0 0x9 4,1 # circle
-bu 522 0 0x7 4,0 # bullet
-co 604 2 0x154 4,23 # copyright
-rg 604 2 0x155 4,22 # registered
-tm 604 2 0x170 4,41 # trademark
-dd 456 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 456 2 0x12a 4,39 # dagger
-ps 440 2 0x14 4,5 # paragraph
-sc 456 2 0x15 4,6 # section
-de 328 2 0xf8 6,36 # degree
-em 820 0 0x123 4,34 # emdash "em dash"
-en 456 0 0x132 4,33 # endash "en dash"
-%0 820 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 684 2 0xab 4,17 # onehalf
-14 684 2 0xac 4,18 # onequarter
-34 684 2 0x12e 4,25 # threequarters
-f/ 137 2 0x158 6,6 # fraction "bar for fractions"
-fm 137 0 0x3a2 6,45 # minute "footmark, prime"
-sd 137 0 0x3b2 6,46 # second
-ha 137 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 137 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 500 0 0x2d 6,0 # hyphen
-lB 228 2 0x5b 0,91 # bracketleft
-rB 228 2 0x5d 0,93 # bracketright
-lC 274 2 0x7b 0,123 # braceleft
-rC 274 2 0x7d 0,125 # braceright
-la 274 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 274 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 273 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 273 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 273 2 0x125 4,32 # quotedblleft
-rq 273 2 0x4ba 6,31 # quotedblright
-oq 182 2 0x176 4,29 # quoteleft "single open quote"
-aq 157 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 832 2 0x40 0,64 # at
-.C1 479 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 456 2 0x23 0,35 # numbersign
-sl 228 2 0x2f 0,47 # slash
-rs 228 2 0x5c 0,92 # backslash
-3d 228 0 0x35c 6,102 # therefore
-tf 228 0 0x35c 6,102 # therefore
-*A 228 0 0x341 8,0 # Alpha
-*B 228 0 0x342 8,2 # Beta
-*C 228 0 0x358 8,28 # Xi
-*D 228 0 0x344 8,8 # Delta
-*E 228 0 0x345 8,10 # Epsilon
-*F 585 0 0x346 8,44 # Phi
-*G 469 0 0x347 8,6 # Gamma
-*H 469 0 0x351 8,16 # Theta
-*I 469 0 0x349 8,18 # Iota
-*K 469 0 0x34b 8,20 # Kappa
-*L 469 0 0x34c 8,22 # Lambda
-*M 469 0 0x34d 8,24 # Mu
-*N 469 0 0x34e 8,26 # Nu
-*O 469 0 0x34f 8,30 # Omicron
-*P 469 0 0x350 8,32 # Pi
-*Q 469 0 0x359 8,48 # Psi
-*R 469 0 0x352 8,34 # Rho
-*S 485 0 0x353 8,36 # Sigma
-*T 485 0 0x354 8,40 # Tau
-*U 485 0 0x3a1 8,76 # Upsilon
-*W 626 0 0x357 8,50 # Omega
-*X 485 0 0x343 8,36 # Chi
-*Y 485 0 0x348 8,14 # Eta
-*Z 485 0 0x35a 8,12 # Zeta
-*a 498 0 0xe0 8,1 # alpha
-*b 466 0 0xe1 8,3 # beta
-*c 466 0 0x378 8,29 # xi
-*d 465 0 0xeb 8,9 # delta
-*e 465 0 0x36e 8,70 # epsilon
-*f 465 0 0x366 8,45 # phi
-+f 465 0 0x36a 8,77 # phi1 "variant phi"
-*g 465 0 0x367 8,7 # gamma
-*h 456 0 0xe9 8,17 # theta
-+h 456 0 0x375 8,71 # theta1 "variant theta"
-*i 456 0 0x369 8,19 # iota
-*k 456 0 0x36b 8,21 # kappa
-*l 456 0 0x36c 8,23 # lambda
-*m 456 0 0xe6 8,25 # mu
-*n 456 0 0x36e 8,27 # nu
-*o 456 0 0x36f 8,31 # omicron
-*p 483 0 0xe3 8,33 # pi
-+p 483 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 483 0 0x379 8,49 # psi
-*r 483 0 0x372 8,35 # rho
-*s 501 0 0xe5 8,37 # sigma
-*t 375 0 0xe7 8,41 # tau
-*u 375 0 0x375 8,27 # upsilon
-*w 375 0 0x377 8,51 # omega
-*x 375 0 0x363 8,47 # chi
-*y 375 0 0x368 8,15 # eta
-*z 375 0 0x37a 8,13 # zeta
-ts 375 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 655 0 0xf7 6,13 # approxequal
-~= 655 0 0xf7 6,13 # approxequal
-!= 655 0 0x3b9 6,99 # notequal
-** 228 0 0x32a 0,32 # asteriskmath
-+- 479 0 0xf1 6,1 # plusminus
-<= 594 0 0xf3 6,2 # lessequal
-== 594 0 0x3ba 8,14 # equivalence
-=~ 594 0 0x340 8,116 # congruent
->= 466 0 0x3b3 8,3 # greaterequal
-AN 466 0 0x3d9 8,85 # logicaland
-OR 466 0 0x3da 8,86 # logicalor
-no 466 0 0x3d8 8,20 # logicalnot
-te 466 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 466 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 466 0 0x3c0 9,0 # aleph
-Im 466 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 466 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 466 0 0x3a5 8,19 # infinity
-md 466 0 0x3b7 8,32 # dotmath
-mo 466 0 0x3ce 8,15 # element
-mu 466 0 0x3b4 8,39 # multiply
-nc 466 0 0x3cb 8,197 # uni2285
-nm 466 0 0x3cf 8,209 # notelement
-pl 228 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 479 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 479 0 0x3b5 6,4 # proportional
-pp 479 0 0x35e 8,89 # perpendicular
-sb 479 0 0x3cc 6,67 # propersubset
-sp 479 0 0x3c9 6,68 # propersuperset
-ib 479 0 0x3cd 6,69 # reflexsubset
-ip 479 0 0x3ca 6,70 # reflexsuperset
-ap 479 0 0x37e 6,12 # similar
-pd 479 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 479 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 479 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 645 0 0xef 6,16 # intersection "intersection, cap"
-cu 645 0 0x3c8 6,66 # union "union, cup"
-di 479 0 0x3b8 6,8 # divide "division sign"
--h 820 0 0xc4 3,8 # hbar
-hbar "
-gr 820 0 0x3d1 6,33 # gradient
-es 638 0 0x3c6 0,79 # emptyset
-CL 617 0 0x5 5,168 # club "club suit"
-SP 617 0 0x6 5,171 # spade "spade suit"
-HE 617 0 0x3 5,170 # heart "heart suit"
-DI 617 0 0x4 5,169 # diamond "diamond suit"
-CR 617 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 617 0 0x327 6,71 # suchthat
-/_ 617 0 0x3d0 6,79 # angle
-<< 456 0 0xae 6,77 # "" "much less"
->> 456 0 0xaf 6,78 # "" "much greater"
-wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 456 0 0x3e0 6,95 # lozenge
-an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 240 0 0xfa 6,32 # periodcentered
-mc 456 0 0xe6 8,25 # mu
-t+- 479 0 0xf1 6,1 # plusminus
-tmu 466 0 0x3b4 8,39 # multiply
-tdi 479 0 0x3b8 6,8 # divide "division sign"
-tno 466 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HNR b/contrib/groff/font/devlbp/HNR
deleted file mode 100644
index 7ad6e078dca2..000000000000
--- a/contrib/groff/font/devlbp/HNR
+++ /dev/null
@@ -1,400 +0,0 @@
-name HNR
-lbpname Swiss-Narrow
-special
-spacewidth 228
-slant 0
-ligatures fi fl 0
-charset
-ha 290 2 0x4c3 0,94 # asciicircum
-ti 280 0 0x4c4 0,126 # asciitilde
-vS 280 2 0x169 1,176 # Scaron
-vZ 280 2 0x16e 1,206 # Zcaron
-vs 280 2 0x173 1,177 # scaron
-vz 280 2 0x174 1,207 # zcaron
-:Y 280 2 0x16d 1,74 # Ydieresis
-tm 280 2 0x170 4,41 # trademark
-aq 157 2 0x27 0,39 # quotesingle
-space 228 0 0x20 0,32
-! 228 2 0x21 0,33 # exclam
-" 291 2 0x22 0,34 # quotedbl
-dq 291 2 0x22 0,34 # quotedbl
-# 456 2 0x23 0,35 # numbersign
-sh 456 2 0x23 0,35 # "
-$ 456 2 0x24 0,36 # dollar
-Do 456 2 0x24 0,36 # "
-% 720 2 0x25 0,37 # percent
-& 547 2 0x26 0,38 # ampersand
-' 157 2 0x27 0,39 # quoteright
-cq 157 2 0x27 0,39 # quoteright
-( 273 2 0x28 0,40 # parenleft
-) 273 2 0x29 0,41 # parenright
-* 319 2 0x2a 0,42 # asterisk
-+ 479 0 0x2b 0,43 # plus
-, 228 0 0x2c 0,44 # comma
-- 479 0 0x2d 0,45 # hyphen
-hy 479 0 0x2d 0,45 # "
-. 228 0 0x2e 0,46 # period
-/ 228 2 0x2f 0,47 # slash
-sl 228 2 0x2f 0,47 # "
-0 456 2 0x30 0,48 # zero
-1 456 2 0x31 0,49 # one
-2 456 2 0x32 0,50 # two
-3 456 2 0x33 0,51 # three
-4 456 2 0x34 0,52 # four
-5 456 2 0x35 0,53 # five
-6 456 2 0x36 0,54 # six
-7 456 2 0x37 0,55 # seven
-8 456 2 0x38 0,56 # eight
-9 456 2 0x39 0,57 # nine
-: 228 0 0x3a 0,58 # colon
-; 228 0 0x3b 0,59 # semicolon
-< 479 0 0x3c 0,60 # less
-= 479 0 0x3d 0,61 # equal
-> 479 0 0x3e 0,62 # greater
-? 456 2 0x3f 0,63 # question
-@ 832 2 0x40 0,64 # at
-at 832 2 0x40 0,64 # "
-A 547 2 0x41 0,65 # A
-B 547 2 0x42 0,66 # B
-C 592 2 0x43 0,67 # C
-D 592 2 0x44 0,68 # D
-E 547 2 0x45 0,69 # E
-F 501 2 0x46 0,70 # F
-G 638 2 0x47 0,71 # G
-H 592 2 0x48 0,72 # H
-I 228 2 0x49 0,73 # I
-J 410 2 0x4a 0,74 # J
-K 547 2 0x4b 0,75 # K
-L 456 2 0x4c 0,76 # L
-M 683 2 0x4d 0,77 # M
-N 592 2 0x4e 0,78 # N
-O 638 2 0x4f 0,79 # O
-P 547 2 0x50 0,80 # P
-Q 638 2 0x51 0,81 # Q
-R 592 2 0x52 0,82 # R
-S 547 2 0x53 0,83 # S
-T 501 2 0x54 0,84 # T
-U 592 2 0x55 0,85 # U
-V 547 2 0x56 0,86 # V
-W 774 2 0x57 0,87 # W
-X 547 2 0x58 0,88 # X
-Y 547 2 0x59 0,89 # Y
-Z 501 2 0x5a 0,90 # Z
-[ 228 2 0x5b 0,91 # bracketleft
-lB 228 2 0x5b 0,91 # "
-\ 228 2 0x5c 0,92 # backslash
-rs 228 2 0x5c 0,92 # "
-] 228 2 0x5d 0,93 # bracketright
-rB 228 2 0x5d 0,93 # "
-a^ 290 2 0x5e 0,94 # circumflex
-^ 290 2 0x5e 0,94 # "
-_ 456 0 0x5f 0,95 # underscore
-` 290 2 0x60 0,96 # quoteleft
-oq 290 2 0x60 0,96 # "
-a 456 0 0x61 0,97 # a
-b 456 2 0x62 0,98 # b
-c 410 0 0x63 0,99 # c
-d 456 2 0x64 0,100 # d
-e 456 0 0x65 0,101 # e
-f 228 2 0x66 0,102 # f
-g 456 1 0x67 0,103 # g
-h 456 2 0x68 0,104 # h
-i 182 2 0x69 0,105 # i
-j 182 2 0x6a 0,106 # j
-k 410 2 0x6b 0,107 # k
-l 182 2 0x6c 0,108 # l
-m 683 0 0x6d 0,109 # m
-n 456 0 0x6e 0,110 # n
-o 456 0 0x6f 0,111 # o
-p 456 1 0x70 0,112 # p
-q 456 1 0x71 0,113 # q
-r 273 0 0x72 0,114 # r
-s 410 0 0x73 0,115 # s
-t 228 2 0x74 0,116 # t
-u 456 0 0x75 0,117 # u
-v 410 0 0x76 0,118 # v
-w 592 0 0x77 0,119 # w
-x 410 0 0x78 0,120 # x
-y 410 1 0x79 0,121 # y
-z 410 0 0x7a 0,122 # z
-lC 274 2 0x7b 0,123 # braceleft
-{ 274 2 0x7b 0,123 # "
-| 213 2 0x7c 0,124 # "
-rC 274 2 0x7d 0,125 # braceright
-} 274 2 0x7d 0,125 # "
-a~ 280 2 0x7e 0,126 # tilde
-~ 280 2 0x7e 0,126 # "
--D 592 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 456 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 547 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 456 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 820 2 0x92 1,36 # AE
-ae 729 0 0x91 1,37 # ae
-OE 820 2 0x141 1,166 # OE
-oe 774 0 0x146 1,167 # oe
-ij 353 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 501 2 0x147 1,23 # germandbls
-'A 501 2 0x15a 1,26 # Aacute
-'E 547 2 0x90 1,40 # Eacute
-'I 547 2 0x161 1,48 # Iacute
-'O 547 2 0x165 1,58 # Oacute
-'U 547 2 0x16a 1,66 # Uacute
-'a 456 2 0xa0 1,27 # aacute
-'e 456 2 0x82 1,41 # eacute
-'i 228 2 0xa1 1,49 # iacute
-'o 456 2 0xa2 1,59 # oacute
-'u 456 2 0x95 1,65 # uacute
-:A 547 2 0x8e 1,30 # Adieresis
-:E 547 2 0x15f 1,44 # Edieresis
-:I 547 2 0x163 1,52 # Idieresis
-:O 638 2 0x99 1,62 # Odieresis
-:U 592 2 0x9a 1,70 # Udieresis
-:Y 592 2 0x16d 1,74 # Ydieresis
-:a 456 2 0x84 1,31 # adieresis
-:e 456 2 0x89 1,45 # edieresis
-:i 228 2 0x8b 1,53 # idieresis
-:o 456 2 0x94 1,63 # odieresis
-:u 456 2 0x81 1,71 # udieresis
-:y 410 3 0x98 1,75 # ydieresis
-^A 410 2 0x15b 1,28 # Acircumflex
-^E 410 2 0x15e 1,42 # Ecircumflex
-^I 410 2 0x162 1,50 # Icircumflex
-^O 410 2 0x166 1,60 # Ocircumflex
-^U 410 2 0x16b 1,68 # Ucircumflex
-^a 456 2 0x83 1,29 # acircumflex
-^e 456 2 0x88 1,43 # ecircumflex
-^i 228 2 0x8c 1,51 # icircumflex
-^o 456 2 0x93 1,61 # ocircumflex
-^u 456 2 0x96 1,69 # ucircumflex
-`A 456 2 0x15c 1,32 # Agrave
-`E 456 2 0x160 1,46 # Egrave
-`I 456 2 0x164 1,54 # Igrave
-`O 456 2 0x167 1,64 # Ograve
-`U 456 2 0x16c 1,72 # Ugrave
-`a 456 2 0x85 1,33 # agrave
-~a 456 2 0x284 --- # atilde
-`e 456 2 0x8a 1,47 # egrave
-`i 228 2 0x8d 1,55 # igrave
-`o 456 2 0x95 1,65 # ograve
-`u 456 2 0x97 1,73 # ugrave
-~A 456 2 0x28e 1,26 # Atilde
-~N 592 2 0xa5 1,56 # Ntilde
-~O 592 2 0x168 1,82 # Otilde
-~n 456 2 0xa4 1,57 # ntilde
-~o 456 2 0x172 1,83 # otilde
-vS 456 2 0x169 1,176 # Scaron
-vs 456 2 0x173 1,177 # scaron
-vZ 456 2 0x16e 1,206 # Zcaron
-vz 456 2 0x174 1,207 # zcaron
-,C 592 2 0x80 1,38 # Ccedilla
-,c 410 0 0x87 1,39 # ccedilla
-/L 456 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 182 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 638 2 0x140 1,80 # Oslash
-/o 501 0 0x145 1,81 # oslash
-oA 547 2 0x8f 1,34 # Aring
-oa 456 2 0x86 1,35 # aring
-a" 273 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 273 2 0x135 1,8 # macron "macron or bar accent"
-a. 273 2 0x137 1,15 # dotaccent "dot accent"
-a^ 273 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 273 2 0x120 1,6 # acute "acute accent"
-ga 273 2 0x121 1,0 # grave "grave accent"
-ab 273 2 0x136 1,22 # breve "breve accent"
-ac 273 0 0x139 1,17 # cedilla "cedilla accent"
-ad 273 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 273 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 273 2 0x138 1,14 # ring "ring or circle accent"
-a~ 273 2 0x7e 1,2 # tilde "tilde accent"
-ho 273 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 228 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 456 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 456 2 0x24 0,36 # dollar
-Po 456 2 0x9c 4,11 # sterling
-Ye 456 2 0x9d 4,12 # yen
-Fn 456 2 0x9f 4,14 # florin
-ct 456 2 0x9b 4,19 # cent
-Fo 456 0 0xae 4,9 # guillemotleft
-Fc 273 0 0x4bb 4,20 # guillemotright
-fo 273 0 0x127 4,35 # guilsinglleft
-fc 273 0 0x128 4,36 # guilsinglright
-r! 273 1 0xad 4,7 # exclamdown
-r? 501 1 0xa8 4,8 # questiondown
-fi 410 2 0x130 4,54 # fi "fi ligature"
-fl 410 2 0x131 4,55 # fl "fl ligature"
-OK 410 0 0x3d6 --- # \& "check mark, tick"
-Of 303 2 0xa6 4,15 # ordfeminine
-Om 299 2 0xa7 4,16 # ordmasculine
-S1 273 2 0x156 4,78 # onesuperior
-S2 273 2 0xfd 4,20 # twosuperior
-S3 273 2 0x14d 4,26 # threesuperior
-<- 809 0 0x1b 6,22 # arrowleft
--> 809 0 0x1a 6,21 # arrowright
-<> 854 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 494 0 0x19 6,24 # arrowdown
-ua 494 0 0x18 6,23 # arrowup
-va 494 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 494 0 0x3dc 6,57 # arrowdblleft
-rA 494 0 0x3de 6,56 # arrowdblright
-hA 494 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 494 0 0x3df 6,59 # arrowdbldown
-uA 494 0 0x3dd 6,58 # arrowdblup
-ba 820 2 0xb3 3,9 # bar
-bb 213 2 0x7c 0,124 # brokenbar
-br 820 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 820 0 0x123 4,34 # ru "baseline rule"
-ul 456 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 820 0 0x3f4 3,9 # bv "bold vertical"
-ci 699 0 0x9 4,1 # circle
-bu 522 0 0x7 4,0 # bullet
-co 604 2 0x154 4,23 # copyright
-rg 604 2 0x155 4,22 # registered
-tm 604 2 0x170 4,41 # trademark
-dd 456 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 456 2 0x12a 4,39 # dagger
-ps 440 2 0x14 4,5 # paragraph
-sc 456 2 0x15 4,6 # section
-de 328 2 0xf8 6,36 # degree
-em 820 0 0x123 4,34 # emdash "em dash"
-en 456 0 0x132 4,33 # endash "en dash"
-%0 820 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 684 2 0xab 4,17 # onehalf
-14 684 2 0xac 4,18 # onequarter
-34 684 2 0x12e 4,25 # threequarters
-f/ 137 2 0x158 6,6 # fraction "bar for fractions"
-fm 137 0 0x3a2 6,45 # minute "footmark, prime"
-sd 137 0 0x3b2 6,46 # second
-ha 137 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 137 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 500 0 0x2d 6,0 # hyphen
-lB 228 2 0x5b 0,91 # bracketleft
-rB 228 2 0x5d 0,93 # bracketright
-lC 274 2 0x7b 0,123 # braceleft
-rC 274 2 0x7d 0,125 # braceright
-la 274 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 274 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 273 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 273 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 273 2 0x125 4,32 # quotedblleft
-rq 273 2 0x4ba 6,31 # quotedblright
-oq 182 2 0x176 4,29 # quoteleft "single open quote"
-aq 157 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 832 2 0x40 0,64 # at
-.C1 479 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 456 2 0x23 0,35 # numbersign
-sl 228 2 0x2f 0,47 # slash
-rs 228 2 0x5c 0,92 # backslash
-3d 228 0 0x35c 6,102 # therefore
-tf 228 0 0x35c 6,102 # therefore
-*A 228 0 0x341 8,0 # Alpha
-*B 228 0 0x342 8,2 # Beta
-*C 228 0 0x358 8,28 # Xi
-*D 228 0 0x344 8,8 # Delta
-*E 228 0 0x345 8,10 # Epsilon
-*F 585 0 0x346 8,44 # Phi
-*G 469 0 0x347 8,6 # Gamma
-*H 469 0 0x351 8,16 # Theta
-*I 469 0 0x349 8,18 # Iota
-*K 469 0 0x34b 8,20 # Kappa
-*L 469 0 0x34c 8,22 # Lambda
-*M 469 0 0x34d 8,24 # Mu
-*N 469 0 0x34e 8,26 # Nu
-*O 469 0 0x34f 8,30 # Omicron
-*P 469 0 0x350 8,32 # Pi
-*Q 469 0 0x359 8,48 # Psi
-*R 469 0 0x352 8,34 # Rho
-*S 485 0 0x353 8,36 # Sigma
-*T 485 0 0x354 8,40 # Tau
-*U 485 0 0x3a1 8,76 # Upsilon
-*W 626 0 0x357 8,50 # Omega
-*X 485 0 0x343 8,36 # Chi
-*Y 485 0 0x348 8,14 # Eta
-*Z 485 0 0x35a 8,12 # Zeta
-*a 498 0 0xe0 8,1 # alpha
-*b 466 0 0xe1 8,3 # beta
-*c 466 0 0x378 8,29 # xi
-*d 465 0 0xeb 8,9 # delta
-*e 465 0 0x36e 8,70 # epsilon
-*f 465 0 0x366 8,45 # phi
-+f 465 0 0x36a 8,77 # phi1 "variant phi"
-*g 465 0 0x367 8,7 # gamma
-*h 456 0 0xe9 8,17 # theta
-+h 456 0 0x375 8,71 # theta1 "variant theta"
-*i 456 0 0x369 8,19 # iota
-*k 456 0 0x36b 8,21 # kappa
-*l 456 0 0x36c 8,23 # lambda
-*m 456 0 0xe6 8,25 # mu
-*n 456 0 0x36e 8,27 # nu
-*o 456 0 0x36f 8,31 # omicron
-*p 483 0 0xe3 8,33 # pi
-+p 483 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 483 0 0x379 8,49 # psi
-*r 483 0 0x372 8,35 # rho
-*s 501 0 0xe5 8,37 # sigma
-*t 375 0 0xe7 8,41 # tau
-*u 375 0 0x375 8,27 # upsilon
-*w 375 0 0x377 8,51 # omega
-*x 375 0 0x363 8,47 # chi
-*y 375 0 0x368 8,15 # eta
-*z 375 0 0x37a 8,13 # zeta
-ts 375 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 655 0 0xf7 6,13 # approxequal
-~= 655 0 0xf7 6,13 # approxequal
-!= 655 0 0x3b9 6,99 # notequal
-** 228 0 0x32a 0,32 # asteriskmath
-+- 479 0 0xf1 6,1 # plusminus
-<= 594 0 0xf3 6,2 # lessequal
-== 594 0 0x3ba 8,14 # equivalence
-=~ 594 0 0x340 8,116 # congruent
->= 466 0 0x3b3 8,3 # greaterequal
-AN 466 0 0x3d9 8,85 # logicaland
-OR 466 0 0x3da 8,86 # logicalor
-no 466 0 0x3d8 8,20 # logicalnot
-te 466 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 466 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 466 0 0x3c0 9,0 # aleph
-Im 466 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 466 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 466 0 0x3a5 8,19 # infinity
-md 466 0 0x3b7 8,32 # dotmath
-mo 466 0 0x3ce 8,15 # element
-mu 466 0 0x3b4 8,39 # multiply
-nc 466 0 0x3cb 8,197 # uni2285
-nm 466 0 0x3cf 8,209 # notelement
-pl 228 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 479 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 479 0 0x3b5 6,4 # proportional
-pp 479 0 0x35e 8,89 # perpendicular
-sb 479 0 0x3cc 6,67 # propersubset
-sp 479 0 0x3c9 6,68 # propersuperset
-ib 479 0 0x3cd 6,69 # reflexsubset
-ip 479 0 0x3ca 6,70 # reflexsuperset
-ap 479 0 0x37e 6,12 # similar
-pd 479 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 479 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 479 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 645 0 0xef 6,16 # intersection "intersection, cap"
-cu 645 0 0x3c8 6,66 # union "union, cup"
-di 479 0 0x3b8 6,8 # divide "division sign"
--h 820 0 0xc4 3,8 # hbar
-hbar "
-gr 820 0 0x3d1 6,33 # gradient
-es 638 0 0x3c6 0,79 # emptyset
-CL 617 0 0x5 5,168 # club "club suit"
-SP 617 0 0x6 5,171 # spade "spade suit"
-HE 617 0 0x3 5,170 # heart "heart suit"
-DI 617 0 0x4 5,169 # diamond "diamond suit"
-CR 617 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 617 0 0x327 6,71 # suchthat
-/_ 617 0 0x3d0 6,79 # angle
-<< 456 0 0xae 6,77 # "" "much less"
->> 456 0 0xaf 6,78 # "" "much greater"
-wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 456 0 0x3e0 6,95 # lozenge
-an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 240 0 0xfa 6,32 # periodcentered
-mc 456 0 0xe6 8,25 # mu
-t+- 479 0 0xf1 6,1 # plusminus
-tmu 466 0 0x3b4 8,39 # multiply
-tdi 479 0 0x3b8 6,8 # divide "division sign"
-tno 466 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/HR b/contrib/groff/font/devlbp/HR
deleted file mode 100644
index 7e2de1be0ce2..000000000000
--- a/contrib/groff/font/devlbp/HR
+++ /dev/null
@@ -1,400 +0,0 @@
-name HR
-lbpname Swiss
-special
-spacewidth 927
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 2223 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1667 2 0x173 1,177 # scaron
-vz 1667 2 0x174 1,207 # zcaron
-:Y 2223 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 637 2 0x27 0,39 # quotesingle
-space 927 0 0x20 0,32
-! 927 2 0x21 0,33 # exclam
-" 1183 2 0x22 0,34 # quotedbl
-dq 1183 2 0x22 0,34 # quotedbl
-# 1853 2 0x23 0,35 # numbersign
-sh 1853 2 0x23 0,35 # "
-$ 1853 2 0x24 0,36 # dollar
-Do 1853 2 0x24 0,36 # "
-% 2963 2 0x25 0,37 # percent
-& 2223 2 0x26 0,38 # ampersand
-' 637 2 0x27 0,39 # quoteright
-cq 637 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1297 2 0x2a 0,42 # asterisk
-+ 1947 0 0x2b 0,43 # plus
-, 927 0 0x2c 0,44 # comma
-- 1947 0 0x2d 0,45 # hyphen
-hy 1947 0 0x2d 0,45 # "
-. 927 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1853 2 0x30 0,48 # zero
-1 1853 2 0x31 0,49 # one
-2 1853 2 0x32 0,50 # two
-3 1853 2 0x33 0,51 # three
-4 1853 2 0x34 0,52 # four
-5 1853 2 0x35 0,53 # five
-6 1853 2 0x36 0,54 # six
-7 1853 2 0x37 0,55 # seven
-8 1853 2 0x38 0,56 # eight
-9 1853 2 0x39 0,57 # nine
-: 927 0 0x3a 0,58 # colon
-; 927 0 0x3b 0,59 # semicolon
-< 1947 0 0x3c 0,60 # less
-= 1947 0 0x3d 0,61 # equal
-> 1947 0 0x3e 0,62 # greater
-? 1853 2 0x3f 0,63 # question
-@ 3383 2 0x40 0,64 # at
-at 3383 2 0x40 0,64 # "
-A 2223 2 0x41 0,65 # A
-B 2223 2 0x42 0,66 # B
-C 2407 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2593 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 927 2 0x49 0,73 # I
-J 1667 2 0x4a 0,74 # J
-K 2223 2 0x4b 0,75 # K
-L 1853 2 0x4c 0,76 # L
-M 2777 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2593 2 0x4f 0,79 # O
-P 2223 2 0x50 0,80 # P
-Q 2593 2 0x51 0,81 # Q
-R 2407 2 0x52 0,82 # R
-S 2223 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2223 2 0x56 0,86 # V
-W 3147 2 0x57 0,87 # W
-X 2223 2 0x58 0,88 # X
-Y 2223 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 927 2 0x5b 0,91 # bracketleft
-lB 927 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 927 2 0x5d 0,93 # bracketright
-rB 927 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1853 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1853 0 0x61 0,97 # a
-b 1853 2 0x62 0,98 # b
-c 1667 0 0x63 0,99 # c
-d 1853 2 0x64 0,100 # d
-e 1853 0 0x65 0,101 # e
-f 927 2 0x66 0,102 # f
-g 1853 1 0x67 0,103 # g
-h 1853 2 0x68 0,104 # h
-i 740 2 0x69 0,105 # i
-j 740 2 0x6a 0,106 # j
-k 1667 2 0x6b 0,107 # k
-l 740 2 0x6c 0,108 # l
-m 2777 0 0x6d 0,109 # m
-n 1853 0 0x6e 0,110 # n
-o 1853 0 0x6f 0,111 # o
-p 1853 1 0x70 0,112 # p
-q 1853 1 0x71 0,113 # q
-r 1110 0 0x72 0,114 # r
-s 1667 0 0x73 0,115 # s
-t 927 2 0x74 0,116 # t
-u 1853 0 0x75 0,117 # u
-v 1667 0 0x76 0,118 # v
-w 2407 0 0x77 0,119 # w
-x 1667 0 0x78 0,120 # x
-y 1667 1 0x79 0,121 # y
-z 1667 0 0x7a 0,122 # z
-lC 1113 2 0x7b 0,123 # braceleft
-{ 1113 2 0x7b 0,123 # "
-| 867 2 0x7c 0,124 # "
-rC 1113 2 0x7d 0,125 # braceright
-} 1113 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1853 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2223 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1853 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3333 2 0x92 1,36 # AE
-ae 2963 0 0x91 1,37 # ae
-OE 3333 2 0x141 1,166 # OE
-oe 3147 0 0x146 1,167 # oe
-ij 1437 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 2037 2 0x147 1,23 # germandbls
-'A 2223 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 927 2 0x161 1,48 # Iacute
-'O 2593 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1853 2 0xa0 1,27 # aacute
-'e 1853 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1853 2 0xa2 1,59 # oacute
-'u 1853 2 0x95 1,65 # uacute
-:A 2223 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 927 2 0x163 1,52 # Idieresis
-:O 2593 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2223 2 0x16d 1,74 # Ydieresis
-:a 1853 2 0x84 1,31 # adieresis
-:e 1853 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1853 2 0x94 1,63 # odieresis
-:u 1853 2 0x81 1,71 # udieresis
-:y 1667 3 0x98 1,75 # ydieresis
-^A 2223 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 927 2 0x162 1,50 # Icircumflex
-^O 2593 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1853 2 0x83 1,29 # acircumflex
-^e 1853 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1853 2 0x93 1,61 # ocircumflex
-^u 1853 2 0x96 1,69 # ucircumflex
-`A 2223 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 927 2 0x164 1,54 # Igrave
-`O 2593 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1853 2 0x85 1,33 # agrave
-~a 1853 2 0x284 --- # atilde
-`e 1853 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1853 2 0x95 1,65 # ograve
-`u 1853 2 0x97 1,73 # ugrave
-~A 2223 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2593 2 0x168 1,82 # Otilde
-~n 1853 2 0xa4 1,57 # ntilde
-~o 1853 2 0x172 1,83 # otilde
-vS 2223 2 0x169 1,176 # Scaron
-vs 1667 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1667 2 0x174 1,207 # zcaron
-,C 2407 2 0x80 1,38 # Ccedilla
-,c 1667 0 0x87 1,39 # ccedilla
-/L 1853 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 740 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2593 2 0x140 1,80 # Oslash
-/o 2037 0 0x145 1,81 # oslash
-oA 2223 2 0x8f 1,34 # Aring
-oa 1853 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1853 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1853 2 0x24 0,36 # dollar
-Po 1853 2 0x9c 4,11 # sterling
-Ye 1853 2 0x9d 4,12 # yen
-Fn 1853 2 0x9f 4,14 # florin
-ct 1853 2 0x9b 4,19 # cent
-Fo 1853 0 0xae 4,9 # guillemotleft
-Fc 1110 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 2037 1 0xa8 4,8 # questiondown
-fi 1667 2 0x130 4,54 # fi "fi ligature"
-fl 1667 2 0x131 4,55 # fl "fl ligature"
-OK 1667 0 0x3d6 --- # \& "check mark, tick"
-Of 1233 2 0xa6 4,15 # ordfeminine
-Om 1217 2 0xa7 4,16 # ordmasculine
-S1 1110 2 0x156 4,78 # onesuperior
-S2 1110 2 0xfd 4,20 # twosuperior
-S3 1110 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 867 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1853 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0x3f4 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2457 2 0x154 4,23 # copyright
-rg 2457 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1853 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1853 2 0x12a 4,39 # dagger
-ps 1790 2 0x14 4,5 # paragraph
-sc 1853 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1853 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2780 2 0xab 4,17 # onehalf
-14 2780 2 0xac 4,18 # onequarter
-34 2780 2 0x12e 4,25 # threequarters
-f/ 556 2 0x158 6,6 # fraction "bar for fractions"
-fm 556 0 0x3a2 6,45 # minute "footmark, prime"
-sd 556 0 0x3b2 6,46 # second
-ha 556 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 556 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1947 0 0x2d 6,0 # hyphen
-lB 927 2 0x5b 0,91 # bracketleft
-rB 927 2 0x5d 0,93 # bracketright
-lC 1113 2 0x7b 0,123 # braceleft
-rC 1113 2 0x7d 0,125 # braceright
-la 1113 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1113 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1110 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1110 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1110 2 0x125 4,32 # quotedblleft
-rq 1110 2 0x4ba 6,31 # quotedblright
-oq 740 2 0x176 4,29 # quoteleft "single open quote"
-aq 637 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3383 2 0x40 0,64 # at
-.C1 1947 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1853 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2377 0 0x346 8,44 # Phi
-*G 1907 0 0x347 8,6 # Gamma
-*H 1907 0 0x351 8,16 # Theta
-*I 1907 0 0x349 8,18 # Iota
-*K 1907 0 0x34b 8,20 # Kappa
-*L 1907 0 0x34c 8,22 # Lambda
-*M 1907 0 0x34d 8,24 # Mu
-*N 1907 0 0x34e 8,26 # Nu
-*O 1907 0 0x34f 8,30 # Omicron
-*P 1907 0 0x350 8,32 # Pi
-*Q 1907 0 0x359 8,48 # Psi
-*R 1907 0 0x352 8,34 # Rho
-*S 1973 0 0x353 8,36 # Sigma
-*T 1973 0 0x354 8,40 # Tau
-*U 1973 0 0x3a1 8,76 # Upsilon
-*W 2547 0 0x357 8,50 # Omega
-*X 1973 0 0x343 8,36 # Chi
-*Y 1973 0 0x348 8,14 # Eta
-*Z 1973 0 0x35a 8,12 # Zeta
-*a 2023 0 0xe0 8,1 # alpha
-*b 1893 0 0xe1 8,3 # beta
-*c 1893 0 0x378 8,29 # xi
-*d 1890 0 0xeb 8,9 # delta
-*e 1890 0 0x36e 8,70 # epsilon
-*f 1890 0 0x366 8,45 # phi
-+f 1890 0 0x36a 8,77 # phi1 "variant phi"
-*g 1890 0 0x367 8,7 # gamma
-*h 1853 0 0xe9 8,17 # theta
-+h 1853 0 0x375 8,71 # theta1 "variant theta"
-*i 1853 0 0x369 8,19 # iota
-*k 1853 0 0x36b 8,21 # kappa
-*l 1853 0 0x36c 8,23 # lambda
-*m 1853 0 0xe6 8,25 # mu
-*n 1853 0 0x36e 8,27 # nu
-*o 1853 0 0x36f 8,31 # omicron
-*p 1963 0 0xe3 8,33 # pi
-+p 1963 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 1963 0 0x379 8,49 # psi
-*r 1963 0 0x372 8,35 # rho
-*s 2037 0 0xe5 8,37 # sigma
-*t 1463 0 0xe7 8,41 # tau
-*u 1463 0 0x375 8,27 # upsilon
-*w 1463 0 0x377 8,51 # omega
-*x 1463 0 0x363 8,47 # chi
-*y 1463 0 0x368 8,15 # eta
-*z 1463 0 0x37a 8,13 # zeta
-ts 1463 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 927 0 0x32a 0,32 # asteriskmath
-+- 1947 0 0xf1 6,1 # plusminus
-<= 2413 0 0xf3 6,2 # lessequal
-== 2413 0 0x3ba 8,14 # equivalence
-=~ 2413 0 0x340 8,116 # congruent
->= 1893 0 0x3b3 8,3 # greaterequal
-AN 1893 0 0x3d9 8,85 # logicaland
-OR 1893 0 0x3da 8,86 # logicalor
-no 1893 0 0x3d8 8,20 # logicalnot
-te 1893 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1893 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1893 0 0x3c0 9,0 # aleph
-Im 1893 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1893 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1893 0 0x3a5 8,19 # infinity
-md 1893 0 0x3b7 8,32 # dotmath
-mo 1893 0 0x3ce 8,15 # element
-mu 1893 0 0x3b4 8,39 # multiply
-nc 1893 0 0x3cb 8,197 # uni2285
-nm 1893 0 0x3cf 8,209 # notelement
-pl 927 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1947 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1947 0 0x3b5 6,4 # proportional
-pp 1947 0 0x35e 8,89 # perpendicular
-sb 1947 0 0x3cc 6,67 # propersubset
-sp 1947 0 0x3c9 6,68 # propersuperset
-ib 1947 0 0x3cd 6,69 # reflexsubset
-ip 1947 0 0x3ca 6,70 # reflexsuperset
-ap 1947 0 0x37e 6,12 # similar
-pd 1947 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1947 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1947 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1947 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2593 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1853 0 0xae 6,77 # "" "much less"
->> 1853 0 0xaf 6,78 # "" "much greater"
-wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1853 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 927 0 0xfa 6,32 # periodcentered
-mc 1853 0 0xe6 8,25 # mu
-t+- 1947 0 0xf1 6,1 # plusminus
-tmu 1893 0 0x3b4 8,39 # multiply
-tdi 1947 0 0x3b8 6,8 # divide "division sign"
-tno 1893 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/Makefile.sub b/contrib/groff/font/devlbp/Makefile.sub
deleted file mode 100644
index 16335d330f4b..000000000000
--- a/contrib/groff/font/devlbp/Makefile.sub
+++ /dev/null
@@ -1,21 +0,0 @@
-DEV=lbp
-LBPPRINT=$(PSPRINT)
-DEVFILES=DESC \
- HB HBI HI HR \
- HNB HNBI HNI HNR \
- TB TBI TI TR \
- CR CB CI \
- ER EB EI
-
-CLEANADD=DESC
-
-DESC: DESC.in
- -rm -f DESC
- cat $(srcdir)/DESC.in >>DESC
- if test "$(PAGE)" = A4; then \
- echo "papersize a4" >>DESC; \
- else \
- echo "papersize letter" >>DESC; \
- fi
- test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>DESC
-
diff --git a/contrib/groff/font/devlbp/TB b/contrib/groff/font/devlbp/TB
deleted file mode 100644
index 57d6696ec508..000000000000
--- a/contrib/groff/font/devlbp/TB
+++ /dev/null
@@ -1,422 +0,0 @@
-name TB
-lbpname Dutch-Bold
-special
-spacewidth 833
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 1853 2 0x169 1,176 # Scaron
-vZ 2223 2 0x16e 1,206 # Zcaron
-vs 1297 2 0x173 1,177 # scaron
-vz 1480 2 0x174 1,207 # zcaron
-:Y 2407 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 927 2 0x27 0,39 # quotesingle
-space 833 0 0x20 0,32
-! 1110 2 0x21 0,33 # exclam
-" 1850 2 0x22 0,34 # quotedbl
-dq 1850 2 0x22 0,34 # quotedbl
-# 1667 2 0x23 0,35 # numbersign
-sh 1667 2 0x23 0,35 # "
-$ 1667 2 0x24 0,36 # dollar
-Do 1667 2 0x24 0,36 # "
-% 3333 2 0x25 0,37 # percent
-& 2777 2 0x26 0,38 # ampersand
-' 927 2 0x27 0,39 # quoteright
-cq 927 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1667 2 0x2a 0,42 # asterisk
-+ 1900 0 0x2b 0,43 # plus
-, 833 0 0x2c 0,44 # comma
-- 1900 0 0x2d 0,45 # hyphen
-\- 1900 0 0x2d 0,45 # hyphen
-hy 1900 0 0x2d 0,45 # "
-. 833 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1667 2 0x30 0,48 # zero
-1 1667 2 0x31 0,49 # one
-2 1667 2 0x32 0,50 # two
-3 1667 2 0x33 0,51 # three
-4 1667 2 0x34 0,52 # four
-5 1667 2 0x35 0,53 # five
-6 1667 2 0x36 0,54 # six
-7 1667 2 0x37 0,55 # seven
-8 1667 2 0x38 0,56 # eight
-9 1667 2 0x39 0,57 # nine
-: 0 0 0x3a 0,58 # colon
-; 1110 0 0x3b 0,59 # semicolon
-< 1900 0 0x3c 0,60 # less
-= 1900 0 0x3d 0,61 # equal
-> 1900 0 0x3e 0,62 # greater
-? 1667 2 0x3f 0,63 # question
-@ 3100 2 0x40 0,64 # at
-at 3100 2 0x40 0,64 # "
-A 2407 2 0x41 0,65 # A
-B 2223 2 0x42 0,66 # B
-C 2407 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2593 2 0x47 0,71 # G
-H 2593 2 0x48 0,72 # H
-I 1297 2 0x49 0,73 # I
-J 1667 2 0x4a 0,74 # J
-K 2593 2 0x4b 0,75 # K
-L 2223 2 0x4c 0,76 # L
-M 3147 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2593 2 0x4f 0,79 # O
-P 2037 2 0x50 0,80 # P
-Q 2593 2 0x51 0,81 # Q
-R 2407 2 0x52 0,82 # R
-S 1853 2 0x53 0,83 # S
-T 2223 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2407 2 0x56 0,86 # V
-W 3333 2 0x57 0,87 # W
-X 2407 2 0x58 0,88 # X
-Y 2407 2 0x59 0,89 # Y
-Z 2223 2 0x5a 0,90 # Z
-[ 1110 2 0x5b 0,91 # bracketleft
-lB 1110 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1110 2 0x5d 0,93 # bracketright
-rB 1110 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1667 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1667 0 0x61 0,97 # a
-b 1853 2 0x62 0,98 # b
-c 1480 0 0x63 0,99 # c
-d 1853 2 0x64 0,100 # d
-e 1480 0 0x65 0,101 # e
-f 1110 2 0x66 0,102 # f
-g 1667 1 0x67 0,103 # g
-h 1853 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 1110 2 0x6a 0,106 # j
-k 1853 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2777 0 0x6d 0,109 # m
-n 1853 0 0x6e 0,110 # n
-o 1667 0 0x6f 0,111 # o
-p 1853 1 0x70 0,112 # p
-q 1853 1 0x71 0,113 # q
-r 1480 0 0x72 0,114 # r
-s 1297 0 0x73 0,115 # s
-t 1110 2 0x74 0,116 # t
-u 1853 0 0x75 0,117 # u
-v 1667 0 0x76 0,118 # v
-w 2407 0 0x77 0,119 # w
-x 1667 0 0x78 0,120 # x
-y 1667 1 0x79 0,121 # y
-z 1480 0 0x7a 0,122 # z
-lC 1313 2 0x7b 0,123 # braceleft
-{ 1313 2 0x7b 0,123 # "
-ba 733 2 0x7c 0,124 # bar
-| 733 2 0x7c 0,124 # "
-rC 1313 2 0x7d 0,125 # braceright
-} 1313 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1667 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2037 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1853 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3333 2 0x92 1,36 # AE
-ae 2407 0 0x91 1,37 # ae
-OE 3333 2 0x141 1,166 # OE
-oe 2407 0 0x146 1,167 # oe
-ij 1990 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 1853 2 0x147 1,23 # germandbls
-'A 2407 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 1297 2 0x161 1,48 # Iacute
-'O 2593 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1667 2 0xa0 1,27 # aacute
-'e 1480 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1667 2 0xa2 1,59 # oacute
-'u 1667 2 0x95 1,65 # uacute
-:A 2407 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 1297 2 0x163 1,52 # Idieresis
-:O 2593 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2407 2 0x16d 1,74 # Ydieresis
-:a 1667 2 0x84 1,31 # adieresis
-:e 1480 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1667 2 0x94 1,63 # odieresis
-:u 1853 2 0x81 1,71 # udieresis
-:y 1667 3 0x98 1,75 # ydieresis
-^A 2407 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 1297 2 0x162 1,50 # Icircumflex
-^O 2593 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1667 2 0x83 1,29 # acircumflex
-^e 1480 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1667 2 0x93 1,61 # ocircumflex
-^u 1853 2 0x96 1,69 # ucircumflex
-`A 2407 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 1297 2 0x164 1,54 # Igrave
-`O 2593 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1667 2 0x85 1,33 # agrave
-`e 1480 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1667 2 0x95 1,65 # ograve
-`u 1853 2 0x97 1,73 # ugrave
-~A 2407 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2593 2 0x168 1,82 # Otilde
-~a 1667 2 0x284 --- # atilde
-~n 1853 2 0xa4 1,57 # ntilde
-~o 1667 2 0x172 1,83 # otilde
-vS 1853 2 0x169 1,176 # Scaron
-vs 1297 2 0x173 1,177 # scaron
-vZ 2223 2 0x16e 1,206 # Zcaron
-vz 1480 2 0x174 1,207 # zcaron
-,C 2407 2 0x80 1,38 # Ccedilla
-,c 1480 0 0x87 1,39 # ccedilla
-/L 2223 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2593 2 0x140 1,80 # Oslash
-/o 1667 0 0x145 1,81 # oslash
-oA 2407 2 0x8f 1,34 # Aring
-oa 1667 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1667 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1667 2 0x24 0,36 # dollar
-Po 1667 2 0x9c 4,11 # sterling
-Ye 1667 2 0x9d 4,12 # yen
-Fn 1667 2 0x9f 4,14 # florin
-ct 1667 2 0x9b 4,19 # cent
-Fo 1667 0 0xae 4,9 # guillemotleft
-Fc 1000 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 1667 1 0xa8 4,8 # questiondown
-fi 1853 2 0x130 4,54 # fi "fi ligature"
-fl 1853 2 0x131 4,55 # fl "fl ligature"
-OK 1853 0 0x3d6 --- # \& "check mark, tick"
-Of 1000 2 0xa6 4,15 # ordfeminine
-Om 1100 2 0xa7 4,16 # ordmasculine
-S1 1000 2 0x156 4,78 # onesuperior
-S2 1000 2 0xfd 4,20 # twosuperior
-S3 1000 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 733 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1667 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0xb3 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2490 2 0x154 4,23 # copyright
-rg 2490 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1667 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1667 2 0x12a 4,39 # dagger
-ps 1800 2 0x14 4,5 # paragraph
-sc 1667 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1667 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2500 2 0xab 4,17 # onehalf
-14 2500 2 0xac 4,18 # onequarter
-34 2500 2 0x12e 4,25 # threequarters
-f/ 927 2 0x158 6,6 # fraction "bar for fractions"
-fm 927 0 0x3a2 6,45 # minute "footmark, prime"
-sd 927 0 0x3b2 6,46 # second
-ha 927 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 927 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1900 0 0x2d 6,0 # hyphen
-lB 1110 2 0x5b 0,91 # bracketleft
-rB 1110 2 0x5d 0,93 # bracketright
-lC 1313 2 0x7b 0,123 # braceleft
-rC 1313 2 0x7d 0,125 # braceright
-la 1313 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1313 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1667 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1667 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1667 2 0x125 4,32 # quotedblleft
-rq 1667 2 0x4ba 6,31 # quotedblright
-oq 1110 2 0x176 4,29 # quoteleft "single open quote"
-aq 927 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3100 2 0x40 0,64 # at
-.C1 1900 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1667 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2560 0 0x346 8,44 # Phi
-*G 2003 0 0x347 8,6 # Gamma
-*H 2003 0 0x351 8,16 # Theta
-*I 2003 0 0x349 8,18 # Iota
-*K 2003 0 0x34b 8,20 # Kappa
-*L 2003 0 0x34c 8,22 # Lambda
-*M 2003 0 0x34d 8,24 # Mu
-*N 2003 0 0x34e 8,26 # Nu
-*O 2003 0 0x34f 8,30 # Omicron
-*P 2003 0 0x350 8,32 # Pi
-*Q 2003 0 0x359 8,48 # Psi
-*R 2003 0 0x352 8,34 # Rho
-*S 2203 0 0x353 8,36 # Sigma
-*T 2203 0 0x354 8,40 # Tau
-*U 2203 0 0x3a1 8,76 # Upsilon
-*W 2510 0 0x357 8,50 # Omega
-*X 2203 0 0x343 8,36 # Chi
-*Y 2203 0 0x348 8,14 # Eta
-*Z 2203 0 0x35a 8,12 # Zeta
-*a 1787 0 0xe0 8,1 # alpha
-*b 1633 0 0xe1 8,3 # beta
-*c 1633 0 0x378 8,29 # xi
-*d 1610 0 0xeb 8,9 # delta
-*e 1610 0 0x36e 8,70 # epsilon
-*f 1610 0 0x366 8,45 # phi
-+f 1610 0 0x36a 8,77 # phi1 "variant phi"
-*g 1610 0 0x367 8,7 # gamma
-*h 1587 0 0xe9 8,17 # theta
-+h 1587 0 0x375 8,71 # theta1 "variant theta"
-*i 1587 0 0x369 8,19 # iota
-*k 1587 0 0x36b 8,21 # kappa
-*l 1587 0 0x36c 8,23 # lambda
-*m 1853 0 0xe6 8,25 # mu
-*n 1853 0 0x36e 8,27 # nu
-*o 1853 0 0x36f 8,31 # omicron
-*p 1920 0 0xe3 8,33 # pi
-+p 1920 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 1920 0 0x379 8,49 # psi
-*r 1920 0 0x372 8,35 # rho
-*s 1747 0 0xe5 8,37 # sigma
-*t 1473 0 0xe7 8,41 # tau
-*u 1473 0 0x375 8,27 # upsilon
-*w 1473 0 0x377 8,51 # omega
-*x 1473 0 0x363 8,47 # chi
-*y 1473 0 0x368 8,15 # eta
-*z 1473 0 0x37a 8,13 # zeta
-ts 1473 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 833 0 0x32a 0,32 # asteriskmath
-+- 1900 0 0xf1 6,1 # plusminus
-<= 2407 0 0xf3 6,2 # lessequal
-== 2407 0 0x3ba 8,14 # equivalence
-=~ 2407 0 0x340 8,116 # congruent
->= 1633 0 0x3b3 8,3 # greaterequal
-AN 1633 0 0x3d9 8,85 # logicaland
-OR 1633 0 0x3da 8,86 # logicalor
-no 1633 0 0x3d8 8,20 # logicalnot
-te 1633 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1633 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1633 0 0x3c0 9,0 # aleph
-Im 1633 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1633 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1633 0 0x3a5 8,19 # infinity
-md 1633 0 0x3b7 8,32 # dotmath
-mo 1633 0 0x3ce 8,15 # element
-mu 1633 0 0x3b4 8,39 # multiply
-nc 1633 0 0x3cb 8,197 # uni2285
-nm 1633 0 0x3cf 8,209 # notelement
-pl 1110 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1900 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1900 0 0x3b5 6,4 # proportional
-pp 1900 0 0x35e 8,89 # perpendicular
-sb 1900 0 0x3cc 6,67 # propersubset
-sp 1900 0 0x3c9 6,68 # propersuperset
-ib 1900 0 0x3cd 6,69 # reflexsubset
-ip 1900 0 0x3ca 6,70 # reflexsuperset
-ap 1900 0 0x37e 6,12 # similar
-pd 1900 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1900 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1900 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1900 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2593 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1667 0 0xae 6,77 # "" "much less"
->> 1667 0 0xaf 6,78 # "" "much greater"
-wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1667 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 833 0 0xfa 6,32 # periodcentered
-mc 1853 0 0xe6 8,25 # mu
-t+- 1900 0 0xf1 6,1 # plusminus
-tmu 1633 0 0x3b4 8,39 # multiply
-tdi 1900 0 0x3b8 6,8 # divide "division sign"
-tno 1633 0 0x3d8 8,20 # logicalnot
-kernpairs
-V A -120
-W A -96
-Y A -72
-Y C -48
-A V -120
-A W -120
-A Y -120
-V a -24
-Y a -48
-V c -48
-Y c -48
-P e -48
-V e -48
-Y e -72
-V o -48
-W o -48
-Y o -96
-A v -48
-A w -48
diff --git a/contrib/groff/font/devlbp/TBI b/contrib/groff/font/devlbp/TBI
deleted file mode 100644
index ba247b79be96..000000000000
--- a/contrib/groff/font/devlbp/TBI
+++ /dev/null
@@ -1,402 +0,0 @@
-name TBI
-lbpname Dutch-BoldItalic
-special
-spacewidth 833
-slant 18.49
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 1853 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1297 2 0x173 1,177 # scaron
-vz 1297 2 0x174 1,207 # zcaron
-:Y 2037 2 0x16d 1,74 # Ydieresis
-tm 3333 2 0x170 4,41 # trademark
-aq 927 2 0x27 0,39 # quotesingle
-space 833 0 0x20 0,32
-! 1297 2 0x21 0,33 # exclam
-" 1850 2 0x22 0,34 # quotedbl
-dq 1850 2 0x22 0,34 # quotedbl
-# 1667 2 0x23 0,35 # numbersign
-sh 1667 2 0x23 0,35 # "
-$ 1667 2 0x24 0,36 # dollar
-Do 1667 2 0x24 0,36 # "
-% 2777 2 0x25 0,37 # percent
-& 2593 2 0x26 0,38 # ampersand
-' 927 2 0x27 0,39 # quoteright
-cq 927 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1667 2 0x2a 0,42 # asterisk
-+ 1900 0 0x2b 0,43 # plus
-, 833 0 0x2c 0,44 # comma
-- 2020 0 0x2d 0,45 # hyphen
-\- 2020 0 0x2d 0,45 # hyphen
-hy 2020 0 0x2d 0,45 # "
-. 833 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1667 2 0x30 0,48 # zero
-1 1667 2 0x31 0,49 # one
-2 1667 2 0x32 0,50 # two
-3 1667 2 0x33 0,51 # three
-4 1667 2 0x34 0,52 # four
-5 1667 2 0x35 0,53 # five
-6 1667 2 0x36 0,54 # six
-7 1667 2 0x37 0,55 # seven
-8 1667 2 0x38 0,56 # eight
-9 1667 2 0x39 0,57 # nine
-: 1110 0 0x3a 0,58 # colon
-; 1110 0 0x3b 0,59 # semicolon
-< 1900 0 0x3c 0,60 # less
-= 1900 0 0x3d 0,61 # equal
-> 1900 0 0x3e 0,62 # greater
-? 1667 2 0x3f 0,63 # question
-@ 2773 2 0x40 0,64 # at
-at 2773 2 0x40 0,64 # "
-A 2223 2 0x41 0,65 # A
-B 2223 2 0x42 0,66 # B
-C 2223 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2223 2 0x45 0,69 # E
-F 2223 2 0x46 0,70 # F
-G 2407 2 0x47 0,71 # G
-H 2593 2 0x48 0,72 # H
-I 1297 2 0x49 0,73 # I
-J 1667 2 0x4a 0,74 # J
-K 2223 2 0x4b 0,75 # K
-L 2037 2 0x4c 0,76 # L
-M 2963 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2407 2 0x4f 0,79 # O
-P 2037 2 0x50 0,80 # P
-Q 2407 2 0x51 0,81 # Q
-R 2223 2 0x52 0,82 # R
-S 1853 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2223 2 0x56 0,86 # V
-W 2963 2 0x57 0,87 # W
-X 2223 2 0x58 0,88 # X
-Y 2037 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 1110 2 0x5b 0,91 # bracketleft
-lB 1110 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1110 2 0x5d 0,93 # bracketright
-rB 1110 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1667 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1667 0 0x61 0,97 # a
-b 1667 2 0x62 0,98 # b
-c 1480 0 0x63 0,99 # c
-d 1667 2 0x64 0,100 # d
-e 1480 0 0x65 0,101 # e
-f 1110 2 0x66 0,102 # f
-g 1667 1 0x67 0,103 # g
-h 1853 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 927 2 0x6a 0,106 # j
-k 1667 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2593 0 0x6d 0,109 # m
-n 1853 0 0x6e 0,110 # n
-o 1667 0 0x6f 0,111 # o
-p 1667 1 0x70 0,112 # p
-q 1667 1 0x71 0,113 # q
-r 1297 0 0x72 0,114 # r
-s 1297 0 0x73 0,115 # s
-t 927 2 0x74 0,116 # t
-u 1853 0 0x75 0,117 # u
-v 1480 0 0x76 0,118 # v
-w 2223 0 0x77 0,119 # w
-x 1667 0 0x78 0,120 # x
-y 1480 1 0x79 0,121 # y
-z 1297 0 0x7a 0,122 # z
-lC 1160 2 0x7b 0,123 # braceleft
-{ 1160 2 0x7b 0,123 # "
-ba 733 2 0x7c 0,124 # bar
-| 733 2 0x7c 0,124 # "
-rC 1160 2 0x7d 0,125 # braceright
-} 1160 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1667 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2037 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1667 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 3147 2 0x92 1,36 # AE
-ae 2407 0 0x91 1,37 # ae
-OE 3147 2 0x141 1,166 # OE
-oe 2407 0 0x146 1,167 # oe
-ij 1807 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 1667 2 0x147 1,23 # germandbls
-'A 2223 2 0x15a 1,26 # Aacute
-'E 2223 2 0x90 1,40 # Eacute
-'I 1297 2 0x161 1,48 # Iacute
-'O 2407 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1667 2 0xa0 1,27 # aacute
-'e 1480 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1667 2 0xa2 1,59 # oacute
-'u 1667 2 0x95 1,65 # uacute
-:A 2223 2 0x8e 1,30 # Adieresis
-:E 2223 2 0x15f 1,44 # Edieresis
-:I 1297 2 0x163 1,52 # Idieresis
-:O 2407 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2037 2 0x16d 1,74 # Ydieresis
-:a 1667 2 0x84 1,31 # adieresis
-:e 1480 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1667 2 0x94 1,63 # odieresis
-:u 1853 2 0x81 1,71 # udieresis
-:y 1480 3 0x98 1,75 # ydieresis
-^A 2223 2 0x15b 1,28 # Acircumflex
-^E 2223 2 0x15e 1,42 # Ecircumflex
-^I 1297 2 0x162 1,50 # Icircumflex
-^O 2407 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1667 2 0x83 1,29 # acircumflex
-^e 1480 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1667 2 0x93 1,61 # ocircumflex
-^u 1853 2 0x96 1,69 # ucircumflex
-`A 2223 2 0x15c 1,32 # Agrave
-`E 2223 2 0x160 1,46 # Egrave
-`I 1297 2 0x164 1,54 # Igrave
-`O 2407 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1667 2 0x85 1,33 # agrave
-`e 1480 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1667 2 0x95 1,65 # ograve
-`u 1853 2 0x97 1,73 # ugrave
-~A 2223 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2407 2 0x168 1,82 # Otilde
-~a 1667 2 0x284 --- # atilde
-~n 1853 2 0xa4 1,57 # ntilde
-~o 1667 2 0x172 1,83 # otilde
-vS 1853 2 0x169 1,176 # Scaron
-vs 1297 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1297 2 0x174 1,207 # zcaron
-,C 2223 2 0x80 1,38 # Ccedilla
-,c 1480 0 0x87 1,39 # ccedilla
-/L 2037 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2407 2 0x140 1,80 # Oslash
-/o 1667 0 0x145 1,81 # oslash
-oA 2223 2 0x8f 1,34 # Aring
-oa 1667 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1667 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1667 2 0x24 0,36 # dollar
-Po 1667 2 0x9c 4,11 # sterling
-Ye 1667 2 0x9d 4,12 # yen
-Fn 1667 2 0x9f 4,14 # florin
-ct 1667 2 0x9b 4,19 # cent
-Fo 1667 0 0xae 4,9 # guillemotleft
-Fc 1000 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1297 1 0xad 4,7 # exclamdown
-r? 1667 1 0xa8 4,8 # questiondown
-fi 1853 2 0x130 4,54 # fi "fi ligature"
-fl 1853 2 0x131 4,55 # fl "fl ligature"
-OK 1853 0 0x3d6 --- # \& "check mark, tick"
-Of 887 2 0xa6 4,15 # ordfeminine
-Om 1000 2 0xa7 4,16 # ordmasculine
-S1 1000 2 0x156 4,78 # onesuperior
-S2 1000 2 0xfd 4,20 # twosuperior
-S3 1000 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 733 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1667 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0xb3 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2490 2 0x154 4,23 # copyright
-rg 2490 2 0x155 4,22 # registered
-tm 3333 2 0x170 4,41 # trademark
-dd 1667 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1667 2 0x12a 4,39 # dagger
-ps 1667 2 0x14 4,5 # paragraph
-sc 1667 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1667 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2500 2 0xab 4,17 # onehalf
-14 2500 2 0xac 4,18 # onequarter
-34 2500 2 0x12e 4,25 # threequarters
-f/ 927 2 0x158 6,6 # fraction "bar for fractions"
-fm 927 0 0x3a2 6,45 # minute "footmark, prime"
-sd 927 0 0x3b2 6,46 # second
-ha 927 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 927 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 2020 0 0x2d 6,0 # hyphen
-lB 1110 2 0x5b 0,91 # bracketleft
-rB 1110 2 0x5d 0,93 # bracketright
-lC 1160 2 0x7b 0,123 # braceleft
-rC 1160 2 0x7d 0,125 # braceright
-la 1160 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1160 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1667 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1667 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1667 2 0x125 4,32 # quotedblleft
-rq 1667 2 0x4ba 6,31 # quotedblright
-oq 1110 2 0x176 4,29 # quoteleft "single open quote"
-aq 927 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 2773 2 0x40 0,64 # at
-.C1 2020 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1667 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2560 0 0x346 8,44 # Phi
-*G 2003 0 0x347 8,6 # Gamma
-*H 2003 0 0x351 8,16 # Theta
-*I 2003 0 0x349 8,18 # Iota
-*K 2003 0 0x34b 8,20 # Kappa
-*L 2003 0 0x34c 8,22 # Lambda
-*M 2003 0 0x34d 8,24 # Mu
-*N 2003 0 0x34e 8,26 # Nu
-*O 2003 0 0x34f 8,30 # Omicron
-*P 2003 0 0x350 8,32 # Pi
-*Q 2003 0 0x359 8,48 # Psi
-*R 2003 0 0x352 8,34 # Rho
-*S 2203 0 0x353 8,36 # Sigma
-*T 2203 0 0x354 8,40 # Tau
-*U 2203 0 0x3a1 8,76 # Upsilon
-*W 2510 0 0x357 8,50 # Omega
-*X 2203 0 0x343 8,36 # Chi
-*Y 2203 0 0x348 8,14 # Eta
-*Z 2203 0 0x35a 8,12 # Zeta
-*a 1787 0 0xe0 8,1 # alpha
-*b 1633 0 0xe1 8,3 # beta
-*c 1633 0 0x378 8,29 # xi
-*d 1610 0 0xeb 8,9 # delta
-*e 1610 0 0x36e 8,70 # epsilon
-*f 1610 0 0x366 8,45 # phi
-+f 1610 0 0x36a 8,77 # phi1 "variant phi"
-*g 1610 0 0x367 8,7 # gamma
-*h 1587 0 0xe9 8,17 # theta
-+h 1587 0 0x375 8,71 # theta1 "variant theta"
-*i 1587 0 0x369 8,19 # iota
-*k 1587 0 0x36b 8,21 # kappa
-*l 1587 0 0x36c 8,23 # lambda
-*m 1920 0 0xe6 8,25 # mu
-*n 1920 0 0x36e 8,27 # nu
-*o 1920 0 0x36f 8,31 # omicron
-*p 1920 0 0xe3 8,33 # pi
-+p 1920 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 1920 0 0x379 8,49 # psi
-*r 1920 0 0x372 8,35 # rho
-*s 1747 0 0xe5 8,37 # sigma
-*t 1473 0 0xe7 8,41 # tau
-*u 1473 0 0x375 8,27 # upsilon
-*w 1473 0 0x377 8,51 # omega
-*x 1473 0 0x363 8,47 # chi
-*y 1473 0 0x368 8,15 # eta
-*z 1473 0 0x37a 8,13 # zeta
-ts 1473 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 833 0 0x32a 0,32 # asteriskmath
-+- 1900 0 0xf1 6,1 # plusminus
-<= 2407 0 0xf3 6,2 # lessequal
-== 2407 0 0x3ba 8,14 # equivalence
-=~ 2407 0 0x340 8,116 # congruent
->= 1633 0 0x3b3 8,3 # greaterequal
-AN 1633 0 0x3d9 8,85 # logicaland
-OR 1633 0 0x3da 8,86 # logicalor
-no 1633 0 0x3d8 8,20 # logicalnot
-te 1633 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1633 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1633 0 0x3c0 9,0 # aleph
-Im 1633 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1633 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1633 0 0x3a5 8,19 # infinity
-md 1633 0 0x3b7 8,32 # dotmath
-mo 1633 0 0x3ce 8,15 # element
-mu 1633 0 0x3b4 8,39 # multiply
-nc 1633 0 0x3cb 8,197 # uni2285
-nm 1633 0 0x3cf 8,209 # notelement
-pl 1110 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1900 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1900 0 0x3b5 6,4 # proportional
-pp 1900 0 0x35e 8,89 # perpendicular
-sb 1900 0 0x3cc 6,67 # propersubset
-sp 1900 0 0x3c9 6,68 # propersuperset
-ib 1900 0 0x3cd 6,69 # reflexsubset
-ip 1900 0 0x3ca 6,70 # reflexsuperset
-ap 1900 0 0x37e 6,12 # similar
-pd 1900 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1900 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1900 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1900 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2407 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1667 0 0xae 6,77 # "" "much less"
->> 1667 0 0xaf 6,78 # "" "much greater"
-wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1667 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 833 0 0xfa 6,32 # periodcentered
-mc 1920 0 0xe6 8,25 # mu
-t+- 1900 0 0xf1 6,1 # plusminus
-tmu 1633 0 0x3b4 8,39 # multiply
-tdi 1900 0 0x3b8 6,8 # divide "division sign"
-tno 1633 0 0x3d8 8,20 # logicalnot
diff --git a/contrib/groff/font/devlbp/TI b/contrib/groff/font/devlbp/TI
deleted file mode 100644
index 97fee75cbf61..000000000000
--- a/contrib/groff/font/devlbp/TI
+++ /dev/null
@@ -1,430 +0,0 @@
-name TI
-lbpname Dutch-Italic
-special
-spacewidth 833
-slant 18.49
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 1667 2 0x169 1,176 # Scaron
-vZ 1853 2 0x16e 1,206 # Zcaron
-vs 1297 2 0x173 1,177 # scaron
-vz 1297 2 0x174 1,207 # zcaron
-:Y 1853 2 0x16d 1,74 # Ydieresis
-tm 3266 2 0x170 4,41 # trademark
-aq 713 2 0x27 0,39 # quotesingle
-space 833 0 0x20 0,32
-! 1110 2 0x21 0,33 # exclam
-" 1400 2 0x22 0,34 # quotedbl
-dq 1400 2 0x22 0,34 # quotedbl
-# 1667 2 0x23 0,35 # numbersign
-sh 1667 2 0x23 0,35 # "
-$ 1667 2 0x24 0,36 # dollar
-Do 1667 2 0x24 0,36 # "
-% 2777 2 0x25 0,37 # percent
-& 2593 2 0x26 0,38 # ampersand
-' 713 2 0x27 0,39 # quoteright
-cq 713 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1667 2 0x2a 0,42 # asterisk
-+ 2250 0 0x2b 0,43 # plus
-, 833 0 0x2c 0,44 # comma
-- 2250 0 0x2d 0,45 # hyphen
-\- 2250 0 0x2d 0,45 # hyphen
-hy 2250 0 0x2d 0,45 # "
-. 833 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1667 2 0x30 0,48 # zero
-1 1667 2 0x31 0,49 # one
-2 1667 2 0x32 0,50 # two
-3 1667 2 0x33 0,51 # three
-4 1667 2 0x34 0,52 # four
-5 1667 2 0x35 0,53 # five
-6 1667 2 0x36 0,54 # six
-7 1667 2 0x37 0,55 # seven
-8 1667 2 0x38 0,56 # eight
-9 1667 2 0x39 0,57 # nine
-: 0 0 0x3a 0,58 # colon
-; 1110 0 0x3b 0,59 # semicolon
-< 2250 0 0x3c 0,60 # less
-= 2250 0 0x3d 0,61 # equal
-> 2250 0 0x3e 0,62 # greater
-? 1667 2 0x3f 0,63 # question
-@ 3067 2 0x40 0,64 # at
-at 3067 2 0x40 0,64 # "
-A 2037 2 0x41 0,65 # A
-B 2037 2 0x42 0,66 # B
-C 2223 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2037 2 0x45 0,69 # E
-F 2037 2 0x46 0,70 # F
-G 2407 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 1110 2 0x49 0,73 # I
-J 1480 2 0x4a 0,74 # J
-K 2223 2 0x4b 0,75 # K
-L 1853 2 0x4c 0,76 # L
-M 2777 2 0x4d 0,77 # M
-N 2223 2 0x4e 0,78 # N
-O 2407 2 0x4f 0,79 # O
-P 2037 2 0x50 0,80 # P
-Q 2407 2 0x51 0,81 # Q
-R 2037 2 0x52 0,82 # R
-S 1667 2 0x53 0,83 # S
-T 1853 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2037 2 0x56 0,86 # V
-W 2777 2 0x57 0,87 # W
-X 2037 2 0x58 0,88 # X
-Y 1853 2 0x59 0,89 # Y
-Z 1853 2 0x5a 0,90 # Z
-[ 1297 2 0x5b 0,91 # bracketleft
-lB 1297 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1297 2 0x5d 0,93 # bracketright
-rB 1297 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1667 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1667 0 0x61 0,97 # a
-b 1667 2 0x62 0,98 # b
-c 1480 0 0x63 0,99 # c
-d 1667 2 0x64 0,100 # d
-e 1480 0 0x65 0,101 # e
-f 927 2 0x66 0,102 # f
-g 1667 1 0x67 0,103 # g
-h 1667 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 927 2 0x6a 0,106 # j
-k 1480 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2407 0 0x6d 0,109 # m
-n 1667 0 0x6e 0,110 # n
-o 1667 0 0x6f 0,111 # o
-p 1667 1 0x70 0,112 # p
-q 1667 1 0x71 0,113 # q
-r 1297 0 0x72 0,114 # r
-s 1297 0 0x73 0,115 # s
-t 927 2 0x74 0,116 # t
-u 1667 0 0x75 0,117 # u
-v 1480 0 0x76 0,118 # v
-w 2223 0 0x77 0,119 # w
-x 1480 0 0x78 0,120 # x
-y 1480 1 0x79 0,121 # y
-z 1297 0 0x7a 0,122 # z
-lC 1333 2 0x7b 0,123 # braceleft
-{ 1333 2 0x7b 0,123 # "
-ba 917 2 0x7c 0,124 # bar
-| 917 2 0x7c 0,124 # "
-rC 1333 2 0x7d 0,125 # braceright
-} 1333 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1667 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 2037 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1667 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 2963 2 0x92 1,36 # AE
-ae 2223 0 0x91 1,37 # ae
-OE 3147 2 0x141 1,166 # OE
-oe 2223 0 0x146 1,167 # oe
-ij 1807 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 1667 2 0x147 1,23 # germandbls
-'A 2037 2 0x15a 1,26 # Aacute
-'E 2037 2 0x90 1,40 # Eacute
-'I 1110 2 0x161 1,48 # Iacute
-'O 2407 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1667 2 0xa0 1,27 # aacute
-'e 1480 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1667 2 0xa2 1,59 # oacute
-'u 1667 2 0x95 1,65 # uacute
-:A 2037 2 0x8e 1,30 # Adieresis
-:E 2037 2 0x15f 1,44 # Edieresis
-:I 1110 2 0x163 1,52 # Idieresis
-:O 2407 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 1853 2 0x16d 1,74 # Ydieresis
-:a 1667 2 0x84 1,31 # adieresis
-:e 1480 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1667 2 0x94 1,63 # odieresis
-:u 1667 2 0x81 1,71 # udieresis
-:y 1480 3 0x98 1,75 # ydieresis
-^A 2037 2 0x15b 1,28 # Acircumflex
-^E 2037 2 0x15e 1,42 # Ecircumflex
-^I 1110 2 0x162 1,50 # Icircumflex
-^O 2407 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1667 2 0x83 1,29 # acircumflex
-^e 1480 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1667 2 0x93 1,61 # ocircumflex
-^u 1667 2 0x96 1,69 # ucircumflex
-`A 2037 2 0x15c 1,32 # Agrave
-`E 2037 2 0x160 1,46 # Egrave
-`I 1110 2 0x164 1,54 # Igrave
-`O 2407 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1667 2 0x85 1,33 # agrave
-`e 1480 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1667 2 0x95 1,65 # ograve
-`u 1667 2 0x97 1,73 # ugrave
-~A 2037 2 0x28e 1,26 # Atilde
-~N 2223 2 0xa5 1,56 # Ntilde
-~O 2407 2 0x168 1,82 # Otilde
-~a 1667 2 0x284 --- # atilde
-~n 1667 2 0xa4 1,57 # ntilde
-~o 1667 2 0x172 1,83 # otilde
-vS 1667 2 0x169 1,176 # Scaron
-vs 1297 2 0x173 1,177 # scaron
-vZ 1853 2 0x16e 1,206 # Zcaron
-vz 1297 2 0x174 1,207 # zcaron
-,C 2223 2 0x80 1,38 # Ccedilla
-,c 1480 0 0x87 1,39 # ccedilla
-/L 1853 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2407 2 0x140 1,80 # Oslash
-/o 1667 0 0x145 1,81 # oslash
-oA 2037 2 0x8f 1,34 # Aring
-oa 1667 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1667 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1667 2 0x24 0,36 # dollar
-Po 1667 2 0x9c 4,11 # sterling
-Ye 1667 2 0x9d 4,12 # yen
-Fn 1667 2 0x9f 4,14 # florin
-ct 1667 2 0x9b 4,19 # cent
-Fo 1667 0 0xae 4,9 # guillemotleft
-Fc 1000 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1297 1 0xad 4,7 # exclamdown
-r? 1667 1 0xa8 4,8 # questiondown
-fi 1667 2 0x130 4,54 # fi "fi ligature"
-fl 1667 2 0x131 4,55 # fl "fl ligature"
-OK 1667 0 0x3d6 --- # \& "check mark, tick"
-Of 920 2 0xa6 4,15 # ordfeminine
-Om 1033 2 0xa7 4,16 # ordmasculine
-S1 1000 2 0x156 4,78 # onesuperior
-S2 1000 2 0xfd 4,20 # twosuperior
-S3 1000 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 917 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 2963 0 0x123 4,34 # ru "baseline rule"
-ul 1667 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0xb3 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2533 2 0x154 4,23 # copyright
-rg 2533 2 0x155 4,22 # registered
-tm 3266 2 0x170 4,41 # trademark
-dd 1667 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1667 2 0x12a 4,39 # dagger
-ps 1743 2 0x14 4,5 # paragraph
-sc 1667 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 2963 0 0x123 4,34 # emdash "em dash"
-en 1667 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2500 2 0xab 4,17 # onehalf
-14 2500 2 0xac 4,18 # onequarter
-34 2500 2 0x12e 4,25 # threequarters
-f/ 927 2 0x158 6,6 # fraction "bar for fractions"
-fm 927 0 0x3a2 6,45 # minute "footmark, prime"
-sd 927 0 0x3b2 6,46 # second
-ha 927 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 927 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 2250 0 0x2d 6,0 # hyphen
-lB 1297 2 0x5b 0,91 # bracketleft
-rB 1297 2 0x5d 0,93 # bracketright
-lC 1333 2 0x7b 0,123 # braceleft
-rC 1333 2 0x7d 0,125 # braceright
-la 1333 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1333 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1853 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1853 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1853 2 0x125 4,32 # quotedblleft
-rq 1853 2 0x4ba 6,31 # quotedblright
-oq 1110 2 0x176 4,29 # quoteleft "single open quote"
-aq 713 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3067 2 0x40 0,64 # at
-.C1 2250 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1667 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2627 0 0x346 8,44 # Phi
-*G 1977 0 0x347 8,6 # Gamma
-*H 1977 0 0x351 8,16 # Theta
-*I 1977 0 0x349 8,18 # Iota
-*K 1977 0 0x34b 8,20 # Kappa
-*L 1977 0 0x34c 8,22 # Lambda
-*M 1977 0 0x34d 8,24 # Mu
-*N 1977 0 0x34e 8,26 # Nu
-*O 1977 0 0x34f 8,30 # Omicron
-*P 1977 0 0x350 8,32 # Pi
-*Q 1977 0 0x359 8,48 # Psi
-*R 1977 0 0x352 8,34 # Rho
-*S 2140 0 0x353 8,36 # Sigma
-*T 2140 0 0x354 8,40 # Tau
-*U 2140 0 0x3a1 8,76 # Upsilon
-*W 2653 0 0x357 8,50 # Omega
-*X 2140 0 0x343 8,36 # Chi
-*Y 2140 0 0x348 8,14 # Eta
-*Z 2140 0 0x35a 8,12 # Zeta
-*a 1987 0 0xe0 8,1 # alpha
-*b 1723 0 0xe1 8,3 # beta
-*c 1723 0 0x378 8,29 # xi
-*d 1760 0 0xeb 8,9 # delta
-*e 1760 0 0x36e 8,70 # epsilon
-*f 1760 0 0x366 8,45 # phi
-+f 1760 0 0x36a 8,77 # phi1 "variant phi"
-*g 1760 0 0x367 8,7 # gamma
-*h 1643 0 0xe9 8,17 # theta
-+h 1643 0 0x375 8,71 # theta1 "variant theta"
-*i 1643 0 0x369 8,19 # iota
-*k 1643 0 0x36b 8,21 # kappa
-*l 1643 0 0x36c 8,23 # lambda
-*m 1667 0 0xe6 8,25 # mu
-*n 1667 0 0x36e 8,27 # nu
-*o 1667 0 0x36f 8,31 # omicron
-*p 2037 0 0xe3 8,33 # pi
-+p 2037 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 2037 0 0x379 8,49 # psi
-*r 2037 0 0x372 8,35 # rho
-*s 1753 0 0xe5 8,37 # sigma
-*t 1413 0 0xe7 8,41 # tau
-*u 1413 0 0x375 8,27 # upsilon
-*w 1413 0 0x377 8,51 # omega
-*x 1413 0 0x363 8,47 # chi
-*y 1413 0 0x368 8,15 # eta
-*z 1413 0 0x37a 8,13 # zeta
-ts 1413 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 833 0 0x32a 0,32 # asteriskmath
-+- 2250 0 0xf1 6,1 # plusminus
-<= 2413 0 0xf3 6,2 # lessequal
-== 2413 0 0x3ba 8,14 # equivalence
-=~ 2413 0 0x340 8,116 # congruent
->= 1723 0 0x3b3 8,3 # greaterequal
-AN 1723 0 0x3d9 8,85 # logicaland
-OR 1723 0 0x3da 8,86 # logicalor
-no 1723 0 0x3d8 8,20 # logicalnot
-te 1723 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1723 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1723 0 0x3c0 9,0 # aleph
-Im 1723 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1723 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1723 0 0x3a5 8,19 # infinity
-md 1723 0 0x3b7 8,32 # dotmath
-mo 1723 0 0x3ce 8,15 # element
-mu 1723 0 0x3b4 8,39 # multiply
-nc 1723 0 0x3cb 8,197 # uni2285
-nm 1723 0 0x3cf 8,209 # notelement
-pl 1297 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 2250 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 2250 0 0x3b5 6,4 # proportional
-pp 2250 0 0x35e 8,89 # perpendicular
-sb 2250 0 0x3cc 6,67 # propersubset
-sp 2250 0 0x3c9 6,68 # propersuperset
-ib 2250 0 0x3cd 6,69 # reflexsubset
-ip 2250 0 0x3ca 6,70 # reflexsuperset
-ap 2250 0 0x37e 6,12 # similar
-pd 2250 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 2250 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 2250 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 2250 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2407 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1667 0 0xae 6,77 # "" "much less"
->> 1667 0 0xaf 6,78 # "" "much greater"
-wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1667 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 833 0 0xfa 6,32 # periodcentered
-mc 1667 0 0xe6 8,25 # mu
-t+- 2250 0 0xf1 6,1 # plusminus
-tmu 1723 0 0x3b4 8,39 # multiply
-tdi 2250 0 0x3b8 6,8 # divide "division sign"
-tno 1723 0 0x3d8 8,20 # logicalnot
-kernpairs
-V A -168
-W A -96
-Y A -72
-A V -72
-A W -72
-A Y -48
-T a -48
-V a -48
-W a -48
-Y a -48
-v a -48
-T c -48
-V c -48
-Y c -48
-P e -48
-T e -48
-V e -48
-Y e 48
-f e -24
-F o -48
-P o -48
-T o -48
-V o -72
-W o -48
-Y o -120
-A v -48
-A w -24
diff --git a/contrib/groff/font/devlbp/TR b/contrib/groff/font/devlbp/TR
deleted file mode 100644
index a66b7fd3060e..000000000000
--- a/contrib/groff/font/devlbp/TR
+++ /dev/null
@@ -1,426 +0,0 @@
-name TR
-lbpname Dutch-Roman
-special
-spacewidth 833
-slant 0
-ligatures fi fl 0
-charset
-ha 1110 2 0x4c3 0,94 # asciicircum
-ti 1110 0 0x4c4 0,126 # asciitilde
-vS 1853 2 0x169 1,176 # Scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vs 1297 2 0x173 1,177 # scaron
-vz 1480 2 0x174 1,207 # zcaron
-:Y 2407 2 0x16d 1,74 # Ydieresis
-tm 3226 2 0x170 4,41 # trademark
-aq 600 2 0x27 0,39 # quotesingle
-space 833 0 0x20 0,32
-! 1110 2 0x21 0,33 # exclam
-" 1360 2 0x22 0,34 # quotedbl
-dq 1360 2 0x22 0,34 # quotedbl
-# 1667 2 0x23 0,35 # numbersign
-sh 1667 2 0x23 0,35 # "
-$ 1667 2 0x24 0,36 # dollar
-Do 1667 2 0x24 0,36 # "
-% 2777 2 0x25 0,37 # percent
-& 2593 2 0x26 0,38 # ampersand
-' 600 2 0x27 0,39 # quoteright
-cq 600 2 0x27 0,39 # quoteright
-( 1110 2 0x28 0,40 # parenleft
-) 1110 2 0x29 0,41 # parenright
-* 1667 2 0x2a 0,42 # asterisk
-+ 1880 0 0x2b 0,43 # plus
-, 833 0 0x2c 0,44 # comma
-- 1110 0 0x2d 0,45 # hyphen
-\- 1110 0 0x2d 0,45 # hyphen
-hy 1110 0 0x2d 0,45 # "
-. 833 0 0x2e 0,46 # period
-/ 927 2 0x2f 0,47 # slash
-sl 927 2 0x2f 0,47 # "
-0 1667 2 0x30 0,48 # zero
-1 1667 2 0x31 0,49 # one
-2 1667 2 0x32 0,50 # two
-3 1667 2 0x33 0,51 # three
-4 1667 2 0x34 0,52 # four
-5 1667 2 0x35 0,53 # five
-6 1667 2 0x36 0,54 # six
-7 1667 2 0x37 0,55 # seven
-8 1667 2 0x38 0,56 # eight
-9 1667 2 0x39 0,57 # nine
-: 927 0 0x3a 0,58 # colon
-; 927 0 0x3b 0,59 # semicolon
-< 1880 0 0x3c 0,60 # less
-= 1880 0 0x3d 0,61 # equal
-> 1880 0 0x3e 0,62 # greater
-? 1480 2 0x3f 0,63 # question
-@ 3070 2 0x40 0,64 # at
-at 3070 2 0x40 0,64 # "
-A 2407 2 0x41 0,65 # A
-B 2223 2 0x42 0,66 # B
-C 2223 2 0x43 0,67 # C
-D 2407 2 0x44 0,68 # D
-E 2037 2 0x45 0,69 # E
-F 1853 2 0x46 0,70 # F
-G 2407 2 0x47 0,71 # G
-H 2407 2 0x48 0,72 # H
-I 1110 2 0x49 0,73 # I
-J 1297 2 0x4a 0,74 # J
-K 2407 2 0x4b 0,75 # K
-L 2037 2 0x4c 0,76 # L
-M 2963 2 0x4d 0,77 # M
-N 2407 2 0x4e 0,78 # N
-O 2407 2 0x4f 0,79 # O
-P 1853 2 0x50 0,80 # P
-Q 2407 2 0x51 0,81 # Q
-R 2223 2 0x52 0,82 # R
-S 1853 2 0x53 0,83 # S
-T 2037 2 0x54 0,84 # T
-U 2407 2 0x55 0,85 # U
-V 2407 2 0x56 0,86 # V
-W 3147 2 0x57 0,87 # W
-X 2407 2 0x58 0,88 # X
-Y 2407 2 0x59 0,89 # Y
-Z 2037 2 0x5a 0,90 # Z
-[ 1110 2 0x5b 0,91 # bracketleft
-lB 1110 2 0x5b 0,91 # "
-\ 927 2 0x5c 0,92 # backslash
-rs 927 2 0x5c 0,92 # "
-] 1110 2 0x5d 0,93 # bracketright
-rB 1110 2 0x5d 0,93 # "
-a^ 1110 2 0x5e 0,94 # circumflex
-^ 1110 2 0x5e 0,94 # "
-_ 1667 0 0x5f 0,95 # underscore
-` 1110 2 0x60 0,96 # quoteleft
-oq 1110 2 0x60 0,96 # "
-a 1480 0 0x61 0,97 # a
-b 1667 2 0x62 0,98 # b
-c 1480 0 0x63 0,99 # c
-d 1667 2 0x64 0,100 # d
-e 1480 0 0x65 0,101 # e
-f 1110 2 0x66 0,102 # f
-g 1667 1 0x67 0,103 # g
-h 1667 2 0x68 0,104 # h
-i 927 2 0x69 0,105 # i
-j 927 2 0x6a 0,106 # j
-k 1667 2 0x6b 0,107 # k
-l 927 2 0x6c 0,108 # l
-m 2593 0 0x6d 0,109 # m
-n 1667 0 0x6e 0,110 # n
-o 1667 0 0x6f 0,111 # o
-p 1667 1 0x70 0,112 # p
-q 1667 1 0x71 0,113 # q
-r 1110 0 0x72 0,114 # r
-s 1297 0 0x73 0,115 # s
-t 927 2 0x74 0,116 # t
-u 1667 0 0x75 0,117 # u
-v 1667 0 0x76 0,118 # v
-w 2407 0 0x77 0,119 # w
-x 1667 0 0x78 0,120 # x
-y 1667 1 0x79 0,121 # y
-z 1480 0 0x7a 0,122 # z
-lC 1600 2 0x7b 0,123 # braceleft
-{ 1600 2 0x7b 0,123 # "
-| 667 2 0x7c 0,124 # "
-rC 1600 2 0x7d 0,125 # braceright
-} 1600 2 0x7d 0,125 # "
-a~ 1110 2 0x7e 0,126 # tilde
-~ 1110 2 0x7e 0,126 # "
--D 2407 2 0x13d 1,78 # Eth "Icelandic uppercase eth"
-Sd 1667 2 0x148 1,87 # eth "Icelandic lowercase eth"
-TP 1853 2 0x13e 1,88 # Thorn "Icelandic uppercase thorn"
-Tp 1667 3 0x143 1,89 # thorn "Icelandic lowercase thorn"
-AE 2963 2 0x92 1,36 # AE
-ae 2223 0 0x91 1,37 # ae
-OE 2963 2 0x141 1,166 # OE
-oe 2407 0 0x146 1,167 # oe
-ij 1783 0 0x150 1,139 # ij "Dutch ij ligature"
-ss 1667 2 0x147 1,23 # germandbls
-'A 2407 2 0x15a 1,26 # Aacute
-'E 2037 2 0x90 1,40 # Eacute
-'I 1110 2 0x161 1,48 # Iacute
-'O 2407 2 0x165 1,58 # Oacute
-'U 2407 2 0x16a 1,66 # Uacute
-'a 1480 2 0xa0 1,27 # aacute
-'e 1480 2 0x82 1,41 # eacute
-'i 927 2 0xa1 1,49 # iacute
-'o 1667 2 0xa2 1,59 # oacute
-'u 1667 2 0x95 1,65 # uacute
-:A 2407 2 0x8e 1,30 # Adieresis
-:E 2037 2 0x15f 1,44 # Edieresis
-:I 1110 2 0x163 1,52 # Idieresis
-:O 2407 2 0x99 1,62 # Odieresis
-:U 2407 2 0x9a 1,70 # Udieresis
-:Y 2407 2 0x16d 1,74 # Ydieresis
-:a 1480 2 0x84 1,31 # adieresis
-:e 1480 2 0x89 1,45 # edieresis
-:i 927 2 0x8b 1,53 # idieresis
-:o 1667 2 0x94 1,63 # odieresis
-:u 1667 2 0x81 1,71 # udieresis
-:y 1667 3 0x98 1,75 # ydieresis
-^A 2407 2 0x15b 1,28 # Acircumflex
-^E 2037 2 0x15e 1,42 # Ecircumflex
-^I 1110 2 0x162 1,50 # Icircumflex
-^O 2407 2 0x166 1,60 # Ocircumflex
-^U 2407 2 0x16b 1,68 # Ucircumflex
-^a 1480 2 0x83 1,29 # acircumflex
-^e 1480 2 0x88 1,43 # ecircumflex
-^i 927 2 0x8c 1,51 # icircumflex
-^o 1667 2 0x93 1,61 # ocircumflex
-^u 1667 2 0x96 1,69 # ucircumflex
-`A 2407 2 0x15c 1,32 # Agrave
-`E 2037 2 0x160 1,46 # Egrave
-`I 1110 2 0x164 1,54 # Igrave
-`O 2407 2 0x167 1,64 # Ograve
-`U 2407 2 0x16c 1,72 # Ugrave
-`a 1480 2 0x85 1,33 # agrave
-`e 1480 2 0x8a 1,47 # egrave
-`i 927 2 0x8d 1,55 # igrave
-`o 1667 2 0x95 1,65 # ograve
-`u 1667 2 0x97 1,73 # ugrave
-~A 2407 2 0x28e 1,26 # Atilde
-~N 2407 2 0xa5 1,56 # Ntilde
-~O 2407 2 0x168 1,82 # Otilde
-~a 1480 2 0x284 --- # atilde
-~n 1667 2 0xa4 1,57 # ntilde
-~o 1667 2 0x172 1,83 # otilde
-vS 1853 2 0x169 1,176 # Scaron
-vs 1297 2 0x173 1,177 # scaron
-vZ 2037 2 0x16e 1,206 # Zcaron
-vz 1480 2 0x174 1,207 # zcaron
-,C 2223 2 0x80 1,38 # Ccedilla
-,c 1480 0 0x87 1,39 # ccedilla
-/L 2037 2 0x13f 1,152 # Lslash "Polish L with a slash"
-/l 927 2 0x144 1,153 # lslash "Polish l with a slash"
-/O 2407 2 0x140 1,80 # Oslash
-/o 1667 0 0x145 1,81 # oslash
-oA 2407 2 0x8f 1,34 # Aring
-oa 1480 2 0x86 1,35 # aring
-a" 1110 2 0x13a 1,16 # hungarumlaut "Hungarian umlaut"
-a- 1110 2 0x135 1,8 # macron "macron or bar accent"
-a. 1110 2 0x137 1,15 # dotaccent "dot accent"
-a^ 1110 2 0x5e 1,3 # circumflex "circumflex accent"
-aa 1110 2 0x120 1,6 # acute "acute accent"
-ga 1110 2 0x121 1,0 # grave "grave accent"
-ab 1110 2 0x136 1,22 # breve "breve accent"
-ac 1110 0 0x139 1,17 # cedilla "cedilla accent"
-ad 1110 2 0x122 1,7 # dieresis "umlaut or dieresis"
-ah 1110 2 0x13c 1,19 # caron "h\('a\(vcek accent"
-ao 1110 2 0x138 1,14 # ring "ring or circle accent"
-a~ 1110 2 0x7e 1,2 # tilde "tilde accent"
-ho 1110 0 0x13b 1,18 # ogonek "hook or ogonek accent"
-.i 927 0 0x142 1,239 # dotlessi "i without a dot"
-Cs 1667 2 0x12f 4,24 # currency "Scandinavian currency sign"
-Do 1667 2 0x24 0,36 # dollar
-Po 1667 2 0x9c 4,11 # sterling
-Ye 1667 2 0x9d 4,12 # yen
-Fn 1667 2 0x9f 4,14 # florin
-ct 1667 2 0x9b 4,19 # cent
-Fo 1667 0 0xae 4,9 # guillemotleft
-Fc 1000 0 0x4bb 4,20 # guillemotright
-fo 1110 0 0x127 4,35 # guilsinglleft
-fc 1110 0 0x128 4,36 # guilsinglright
-r! 1110 1 0xad 4,7 # exclamdown
-r? 1480 1 0xa8 4,8 # questiondown
-fi 1853 2 0x130 4,54 # fi "fi ligature"
-fl 1853 2 0x131 4,55 # fl "fl ligature"
-OK 1853 0 0x3d6 --- # \& "check mark, tick"
-Of 920 2 0xa6 4,15 # ordfeminine
-Om 1033 2 0xa7 4,16 # ordmasculine
-S1 1000 2 0x156 4,78 # onesuperior
-S2 1000 2 0xfd 4,20 # twosuperior
-S3 1000 2 0x14d 4,26 # threesuperior
-<- 3290 0 0x1b 6,22 # arrowleft
--> 3290 0 0x1a 6,21 # arrowright
-<> 3473 0 0x1d 6,25 # arrowboth "horizontal double-headed arrow"
-da 2010 0 0x19 6,24 # arrowdown
-ua 2010 0 0x18 6,23 # arrowup
-va 2010 0 0x12 6,26 # \& "vertical double-headed arrow"
-lA 2010 0 0x3dc 6,57 # arrowdblleft
-rA 2010 0 0x3de 6,56 # arrowdblright
-hA 2010 0 0x3db 6,60 # arrowdblboth "horizontal double-headed double arrow"
-dA 2010 0 0x3df 6,59 # arrowdbldown
-uA 2010 0 0x3dd 6,58 # arrowdblup
-ba 3333 2 0xb3 3,9 # bar
-bb 667 2 0x7c 0,124 # brokenbar
-br 3333 0 0x1db 3,9 # br "box rule with traditional troff metrics"
-ru 3333 0 0x123 4,34 # ru "baseline rule"
-ul 1667 0 0x5f 0,95 # ul "underline with traditional troff metrics"
-bv 3333 0 0x3f4 3,9 # bv "bold vertical"
-ci 2843 0 0x9 4,1 # circle
-bu 2120 0 0x7 4,0 # bullet
-co 2533 2 0x154 4,23 # copyright
-rg 2533 2 0x155 4,22 # registered
-tm 3226 2 0x170 4,41 # trademark
-dd 1667 2 0x12b 4,40 # daggerdbl "double dagger sign"
-dg 1667 2 0x12a 4,39 # dagger
-ps 1510 2 0x14 4,5 # paragraph
-sc 1667 2 0x15 4,6 # section
-de 1333 2 0xf8 6,36 # degree
-em 3333 0 0x123 4,34 # emdash "em dash"
-en 1667 0 0x132 4,33 # endash "en dash"
-%0 3333 2 0x129 4,75 # perthousand "per thousand, per mille sign"
-12 2500 2 0xab 4,17 # onehalf
-14 2500 2 0xac 4,18 # onequarter
-34 2500 2 0x12e 4,25 # threequarters
-f/ 550 2 0x158 6,6 # fraction "bar for fractions"
-fm 550 0 0x3a2 6,45 # minute "footmark, prime"
-sd 550 0 0x3b2 6,46 # second
-ha 550 2 0x4c3 6,85 # asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-ti 550 0 0x4c4 6,12 # asciitilde "\s-2ASCII\s0 tilde, large tilde"
-hy 1880 0 0x2d 6,0 # hyphen
-lB 1110 2 0x5b 0,91 # bracketleft
-rB 1110 2 0x5d 0,93 # bracketright
-lC 1600 2 0x7b 0,123 # braceleft
-rC 1600 2 0x7d 0,125 # braceright
-la 1600 0 0x3e1 6,10 # angleleft "left angle bracket"
-ra 1600 0 0x3f1 6,11 # angleright "right angle bracket"
-Bq 1480 0 0x4b9 4,63 # quotedblbase "low double comma quote"
-bq 1480 0 0x4b8 6,62 # quotesinglbase "low single comma quote"
-lq 1480 2 0x125 4,32 # quotedblleft
-rq 1480 2 0x4ba 6,31 # quotedblright
-oq 1110 2 0x176 4,29 # quoteleft "single open quote"
-aq 600 2 0x27 0,39 # quotesingle "apostrophe quote"
-at 3070 2 0x40 0,64 # at
-.C1 1110 0 0x2d 0,45 # - minus "minus sign from current font"
-sh 1667 2 0x23 0,35 # numbersign
-sl 927 2 0x2f 0,47 # slash
-rs 927 2 0x5c 0,92 # backslash
-3d 927 0 0x35c 6,102 # therefore
-tf 927 0 0x35c 6,102 # therefore
-*A 927 0 0x341 8,0 # Alpha
-*B 927 0 0x342 8,2 # Beta
-*C 927 0 0x358 8,28 # Xi
-*D 927 0 0x344 8,8 # Delta
-*E 927 0 0x345 8,10 # Epsilon
-*F 2627 0 0x346 8,44 # Phi
-*G 1977 0 0x347 8,6 # Gamma
-*H 1977 0 0x351 8,16 # Theta
-*I 1977 0 0x349 8,18 # Iota
-*K 1977 0 0x34b 8,20 # Kappa
-*L 1977 0 0x34c 8,22 # Lambda
-*M 1977 0 0x34d 8,24 # Mu
-*N 1977 0 0x34e 8,26 # Nu
-*O 1977 0 0x34f 8,30 # Omicron
-*P 1977 0 0x350 8,32 # Pi
-*Q 1977 0 0x359 8,48 # Psi
-*R 1977 0 0x352 8,34 # Rho
-*S 2140 0 0x353 8,36 # Sigma
-*T 2140 0 0x354 8,40 # Tau
-*U 2140 0 0x3a1 8,76 # Upsilon
-*W 2653 0 0x357 8,50 # Omega
-*X 2140 0 0x343 8,36 # Chi
-*Y 2140 0 0x348 8,14 # Eta
-*Z 2140 0 0x35a 8,12 # Zeta
-*a 1987 0 0xe0 8,1 # alpha
-*b 1723 0 0xe1 8,3 # beta
-*c 1723 0 0x378 8,29 # xi
-*d 1760 0 0xeb 8,9 # delta
-*e 1760 0 0x36e 8,70 # epsilon
-*f 1760 0 0x366 8,45 # phi
-+f 1760 0 0x36a 8,77 # phi1 "variant phi"
-*g 1760 0 0x367 8,7 # gamma
-*h 1643 0 0xe9 8,17 # theta
-+h 1643 0 0x375 8,71 # theta1 "variant theta"
-*i 1643 0 0x369 8,19 # iota
-*k 1643 0 0x36b 8,21 # kappa
-*l 1643 0 0x36c 8,23 # lambda
-*m 1667 0 0xe6 8,25 # mu
-*n 1667 0 0x36e 8,27 # nu
-*o 1667 0 0x36f 8,31 # omicron
-*p 2037 0 0xe3 8,33 # pi
-+p 2037 0 0x376 8,78 # omega1 "variant pi, looking like omega"
-*q 2037 0 0x379 8,49 # psi
-*r 2037 0 0x372 8,35 # rho
-*s 1753 0 0xe5 8,37 # sigma
-*t 1413 0 0xe7 8,41 # tau
-*u 1413 0 0x375 8,27 # upsilon
-*w 1413 0 0x377 8,51 # omega
-*x 1413 0 0x363 8,47 # chi
-*y 1413 0 0x368 8,15 # eta
-*z 1413 0 0x37a 8,13 # zeta
-ts 1413 0 0x356 8,39 # sigma1 "terminal sigma"
-~~ 2663 0 0xf7 6,13 # approxequal
-~= 2663 0 0xf7 6,13 # approxequal
-!= 2663 0 0x3b9 6,99 # notequal
-** 833 0 0x32a 0,32 # asteriskmath
-+- 1880 0 0xf1 6,1 # plusminus
-<= 2413 0 0xf3 6,2 # lessequal
-== 2413 0 0x3ba 8,14 # equivalence
-=~ 2413 0 0x340 8,116 # congruent
->= 1723 0 0x3b3 8,3 # greaterequal
-AN 1723 0 0x3d9 8,85 # logicaland
-OR 1723 0 0x3da 8,86 # logicalor
-no 1723 0 0x3d8 8,20 # logicalnot
-te 1723 0 0x324 8,121 # existential "there exists, existential quantifier"
-fa 1723 0 0x322 8,122 # universal "for all, universal quantifier"
-Ah 1723 0 0x3c0 9,0 # aleph
-Im 1723 0 0x3c1 8,21 # Ifraktur "Fraktur I, imaginary"
-Re 1723 0 0x3c2 8,22 # Rfraktur "Fraktur R, real"
-if 1723 0 0x3a5 8,19 # infinity
-md 1723 0 0x3b7 8,32 # dotmath
-mo 1723 0 0x3ce 8,15 # element
-mu 1723 0 0x3b4 8,39 # multiply
-nc 1723 0 0x3cb 8,197 # uni2285
-nm 1723 0 0x3cf 8,209 # notelement
-pl 1110 0 0x32b 0,93 # plusmath "plus sign in special font"
-eq 1880 0 0x33d 0,61 # equalmath "equals sign in special font"
-pt 1880 0 0x3b5 6,4 # proportional
-pp 1880 0 0x35e 8,89 # perpendicular
-sb 1880 0 0x3cc 6,67 # propersubset
-sp 1880 0 0x3c9 6,68 # propersuperset
-ib 1880 0 0x3cd 6,69 # reflexsubset
-ip 1880 0 0x3ca 6,70 # reflexsuperset
-ap 1880 0 0x37e 6,12 # similar
-pd 1880 0 0x3b6 6,34 # partialdiff "partial differentiation sign"
-c* 1880 0 0x3c4 6,80 # circlemultiply "multiply sign in a circle"
-c+ 1880 0 0x3c5 6,81 # circleplus "plus sign in a circle"
-ca 2620 0 0xef 6,16 # intersection "intersection, cap"
-cu 2620 0 0x3c8 6,66 # union "union, cup"
-di 1880 0 0x3b8 6,8 # divide "division sign"
--h 3333 0 0xc4 3,8 # hbar
-hbar "
-gr 3333 0 0x3d1 6,33 # gradient
-es 2407 0 0x3c6 0,79 # emptyset
-CL 2510 0 0x5 5,168 # club "club suit"
-SP 2510 0 0x6 5,171 # spade "spade suit"
-HE 2510 0 0x3 5,170 # heart "heart suit"
-DI 2510 0 0x4 5,169 # diamond "diamond suit"
-CR 2510 0 0x3bf 5,20 # carriagereturn "carriage return symbol"
-st 2510 0 0x327 6,71 # suchthat
-/_ 2510 0 0x3d0 6,79 # angle
-<< 1667 0 0xae 6,77 # "" "much less"
->> 1667 0 0xaf 6,78 # "" "much greater"
-wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
-lz 1667 0 0x3e0 6,95 # lozenge
-an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
-pc 833 0 0xfa 6,32 # periodcentered
-mc 1667 0 0xe6 8,25 # mu
-t+- 1880 0 0xf1 6,1 # plusminus
-tmu 1723 0 0x3b4 8,39 # multiply
-tdi 1880 0 0x3b8 6,8 # divide "division sign"
-tno 1723 0 0x3d8 8,20 # logicalnot
-kernpairs
-F A -48
-P A -48
-V A -72
-W A -72
-Y A -72
-A V -96
-A W -72
-A Y -72
-P a -48
-V a -48
-W a -48
-Y a -24
-V c -48
-W c -48
-Y c -24
-P e -48
-V e -48
-W e -48
-Y e -48
-V o -48
-W o -24
-Y o -48
-A v -48
-A w -48
diff --git a/contrib/groff/font/devlj4/AB b/contrib/groff/font/devlj4/AB
deleted file mode 100644
index 304f84e0b336..000000000000
--- a/contrib/groff/font/devlj4/AB
+++ /dev/null
@@ -1,428 +0,0 @@
-# M Arial Bd
-name AB
-spacewidth 7351
-pcltypeface 16602
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl 0
-kernpairs
-1 1 -1459
-A T -1963
-A V -1963
-A W -1459
-A Y -2428
-A v -981
-A w -477
-A y -981
-A cq -1459
-A ' -1459
-F , -2932
-F . -2932
-F A -1459
-L T -1963
-L V -1963
-L W -1459
-L Y -2428
-L y -981
-L cq -1459
-L ' -1459
-P , -3410
-P . -3410
-P A -1963
-R V -477
-R W -477
-R Y -981
-T , -2932
-T hy -1459
-T - -1459
-T . -2932
-T : -2932
-T ; -2932
-T A -1963
-T O -477
-T a -1963
-T c -1963
-T e -1963
-T i -477
-T o -1963
-T r -1459
-T s -1963
-T u -1963
-T w -1963
-T y -1963
-V , -2428
-V hy -1459
-V - -1459
-V . -2428
-V : -1459
-V ; -1459
-V A -1963
-V a -1459
-V e -1459
-V i -477
-V o -1963
-V r -1459
-V u -981
-V y -981
-W , -1459
-W hy -529
-W - -529
-W . -1459
-W : -477
-W ; -477
-W A -1459
-W a -981
-W e -477
-W i -232
-W o -477
-W r -477
-W u -477
-W y -477
-Y , -2932
-Y hy -1459
-Y - -1459
-Y . -2932
-Y : -1963
-Y ; -1963
-Y A -2428
-Y a -1459
-Y e -1459
-Y i -981
-Y o -1963
-Y p -1459
-Y q -1963
-Y u -1459
-Y v -1459
-f cq 478
-f ' 478
-r , -1459
-r . -1459
-r cq 982
-r ' 982
-v , -1963
-v . -1963
-w , -981
-w . -981
-y , -1963
-y . -1963
-oq oq -981
-oq ` -981
-` oq -981
-` ` -981
-cq s -981
-' s -981
-cq cq -981
-cq ' -981
-' cq -981
-' ' -981
-charset
-! 8811,18939 2 161057 -- U+0021 (19U 33)
-dq 12544,18939 2 161058 -- U+0022 (19U 34)
-" "
-sh 14715,19262,323 2 161059 -- U+0023 (19U 35)
-# "
-Do 14715,20464,2648 2 161060 -- U+0024 (19U 36)
-$ "
-% 23526,19262,762 2 161061 -- U+0025 (19U 37)
-& 19107,19262,491 2 161062 -- U+0026 (19U 38)
-aq 6292,18939 2 161063 -- U+0027 (19U 39)
-( 8811,19262,5568 3 161064 -- U+0028 (19U 40)
-) 8811,19262,5568 3 161065 -- U+0029 (19U 41)
-* 10297,19262 2 161066 -- U+002A (19U 42)
-+ 15451,15968 0 161067 -- U+002B (19U 43)
-, 7351,3630,4225 0 161068 -- U+002C (19U 44)
-hy 8811,8682 0 161069 -- U+002D (19U 45)
-- "
-. 7351,3630 0 161070 -- U+002E (19U 46)
-sl 7351,19262,323 2 161071 -- U+002F (19U 47)
-/ "
-0 14715,19017,323 2 161072 -- U+0030 (19U 48)
-1 14715,19017 2 161073 -- U+0031 (19U 49)
-2 14715,19017 2 161074 -- U+0032 (19U 50)
-3 14715,19017,323 2 161075 -- U+0033 (19U 51)
-4 14715,19017 2 161076 -- U+0034 (19U 52)
-5 14715,18681,323 2 161077 -- U+0035 (19U 53)
-6 14715,19017,323 2 161078 -- U+0036 (19U 54)
-7 14715,18681 2 161079 -- U+0037 (19U 55)
-8 14715,19017,336 2 161080 -- U+0038 (19U 56)
-9 14715,19017,336 2 161081 -- U+0039 (19U 57)
-: 8811,13720 0 161082 -- U+003A (19U 58)
-; 8811,13720,4225 0 161083 -- U+003B (19U 59)
-< 15451,16549 0 161084 -- U+003C (19U 60)
-= 15451,13875 0 161085 -- U+003D (19U 61)
-> 15451,16524 0 161086 -- U+003E (19U 62)
-? 16162,19133 2 161087 -- U+003F (19U 63)
-at 25799,19275,5568 3 161088 -- U+0040 (19U 64)
-@ "
-A 19107,18939 2 161089 -- U+0041 (19U 65)
-B 19107,18939 2 161090 -- U+0042 (19U 66)
-C 19107,19262,323 2 161091 -- U+0043 (19U 67)
-D 19107,18939 2 161092 -- U+0044 (19U 68)
-E 17648,18939 2 161093 -- U+0045 (19U 69)
-F 16162,18939 2 161094 -- U+0046 (19U 70)
-G 20580,19262,323 2 161095 -- U+0047 (19U 71)
-H 19107,18939 2 161096 -- U+0048 (19U 72)
-I 7351,18939 2 161097 -- U+0049 (19U 73)
-J 14715,18939,323 2 161098 -- U+004A (19U 74)
-K 19107,18939 2 161099 -- U+004B (19U 75)
-L 16162,18784 2 161100 -- U+004C (19U 76)
-M 22040,18939 2 161101 -- U+004D (19U 77)
-N 19107,18939 2 161102 -- U+004E (19U 78)
-O 20580,19262,323 2 161103 -- U+004F (19U 79)
-P 17648,18939 2 161104 -- U+0050 (19U 80)
-Q 20580,19262,1899 2 161105 -- U+0051 (19U 81)
-R 19107,18939 2 161106 -- U+0052 (19U 82)
-S 17648,19262,336 2 161107 -- U+0053 (19U 83)
-T 16162,18939 2 161108 -- U+0054 (19U 84)
-U 19107,18939,323 2 161109 -- U+0055 (19U 85)
-V 17648,18939 2 161110 -- U+0056 (19U 86)
-W 24973,18939 2 161111 -- U+0057 (19U 87)
-X 17648,18939 2 161112 -- U+0058 (19U 88)
-Y 17648,18939 2 161113 -- U+0059 (19U 89)
-Z 16162,18939 2 161114 -- U+005A (19U 90)
-lB 8811,18939,5336 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,19262,323 2 161116 -- U+005C (19U 92)
-\ "
-rB 8811,18939,5336 3 161117 -- U+005D (19U 93)
-] "
-ha 15451,19262 2 161118 -- U+005E (19U 94)
-_ 14715,0,5232 1 161119 -- U+005F (19U 95)
-ga 8811,19262 2 161120 -- U+0060 (19U 96)
-a 14715,14030,310 0 161121 -- U+0061 (19U 97)
-b 16162,18939,310 2 161122 -- U+0062 (19U 98)
-c 14715,14030,310 0 161123 -- U+0063 (19U 99)
-d 16162,18939,310 2 161124 -- U+0064 (19U 100)
-e 14715,14030,310 0 161125 -- U+0065 (19U 101)
-f 8811,19262 2 161126 -- U+0066 (19U 102)
-g 16162,14030,5568 1 161127 -- U+0067 (19U 103)
-h 16162,18939 2 161128 -- U+0068 (19U 104)
-i 7351,18939 2 161129 -- U+0069 (19U 105)
-j 7351,18939,5568 3 161130 -- U+006A (19U 106)
-k 14715,18939 2 161131 -- U+006B (19U 107)
-l 7351,18939 2 161132 -- U+006C (19U 108)
-m 23526,14030 0 161133 -- U+006D (19U 109)
-n 16162,14030 0 161134 -- U+006E (19U 110)
-o 16162,14030,310 0 161135 -- U+006F (19U 111)
-p 16162,14030,5219 1 161136 -- U+0070 (19U 112)
-q 16162,14030,5219 1 161137 -- U+0071 (19U 113)
-r 10297,14030 0 161138 -- U+0072 (19U 114)
-s 14715,14030,310 0 161139 -- U+0073 (19U 115)
-t 8811,18565,310 2 161140 -- U+0074 (19U 116)
-u 16162,13720,310 0 161141 -- U+0075 (19U 117)
-v 14715,13720 0 161142 -- U+0076 (19U 118)
-w 20580,13720 0 161143 -- U+0077 (19U 119)
-x 14715,13720 0 161144 -- U+0078 (19U 120)
-y 14715,13720,5568 1 161145 -- U+0079 (19U 121)
-z 13229,13720 0 161146 -- U+007A (19U 122)
-{ 10297,19262,5568 3 161147 -- U+007B (19U 123)
-lC "
-| 7403,19262,5568 3 161148 -- U+007C (19U 124)
-ba "
-} 10297,19262,5568 3 161149 -- U+007D (19U 125)
-rC "
-ti 15451,11937 0 161150 -- U+007E (19U 126)
-r! 8811,13720,5258 1 161185 -- U+00A1 (19U 161)
-ct 14715,18810,5206 3 161186 -- U+00A2 (19U 162)
-Po 14715,19262,323 2 161187 -- U+00A3 (19U 163)
-Cs 14715,16149 0 161188 -- U+00A4 (19U 164)
-Ye 14715,18939 2 161189 -- U+00A5 (19U 165)
-bb 7403,19262,5568 3 161190 -- U+00A6 (19U 166)
-sc 14715,19262,5568 3 161191 -- U+00A7 (19U 167)
-ad 8811,19262 2 161192 -- U+00A8 (19U 168)
-co 19495,19327,465 2 161193 -- U+00A9 (19U 169)
-Of 9793,19262 2 161194 -- U+00AA (19U 170)
-Fo 14715,12699 0 161195 -- U+00AB (19U 171)
-tno 15451,13875 0 161196 -- U+00AC (19U 172)
-u00AD 8811,8682 0 161197 -- U+00AD (19U 173)
-rg 19495,19327,465 2 161198 -- U+00AE (19U 174)
-u00AF 14612,22415 2 161199 -- U+00AF (19U 175)
-de 10581,19262 2 161200 -- U+00B0 (19U 176)
-t+- 14521,17841 2 161201 -- U+00B1 (19U 177)
-S2 8811,19172 2 161202 -- U+00B2 (19U 178)
-S3 8811,19172 2 161203 -- U+00B3 (19U 179)
-aa 8811,19262 2 161204 -- U+00B4 (19U 180)
-mc 15245,13720,5258 1 161205 -- U+00B5 (19U 181)
-ps 14715,18939,5206 3 161206 -- U+00B6 (19U 182)
-pc 7351,11033 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,0,5413 1 161208 -- U+00B8 (19U 184)
-S1 8811,19172 2 161209 -- U+00B9 (19U 185)
-Om 9663,19262 2 161210 -- U+00BA (19U 186)
-Fc 14715,12699 0 161211 -- U+00BB (19U 187)
-14 22066,19172,698 2 161212 -- U+00BC (19U 188)
-12 22066,19172,698 2 161213 -- U+00BD (19U 189)
-34 22066,19172,698 2 161214 -- U+00BE (19U 190)
-r? 16162,13720,5426 1 161215 -- U+00BF (19U 191)
-`A 19107,23887 2 161216 -- U+00C0 (19U 192)
-'A 19107,23887 2 161217 -- U+00C1 (19U 193)
-^A 19107,23836 2 161218 -- U+00C2 (19U 194)
-~A 19107,23280 2 161219 -- U+00C3 (19U 195)
-:A 19107,23138 2 161220 -- U+00C4 (19U 196)
-oA 19107,22712 2 161221 -- U+00C5 (19U 197)
-AE 26458,18939 2 161222 -- U+00C6 (19U 198)
-,C 19107,19262,5413 3 161223 -- U+00C7 (19U 199)
-`E 17648,23887 2 161224 -- U+00C8 (19U 200)
-'E 17648,23887 2 161225 -- U+00C9 (19U 201)
-^E 17648,23836 2 161226 -- U+00CA (19U 202)
-:E 17648,23138 2 161227 -- U+00CB (19U 203)
-`I 7351,23887 2 161228 -- U+00CC (19U 204)
-'I 7351,23887 2 161229 -- U+00CD (19U 205)
-^I 7351,23836 2 161230 -- U+00CE (19U 206)
-:I 7351,23138 2 161231 -- U+00CF (19U 207)
--D 19107,18939 2 161232 -- U+00D0 (19U 208)
-~N 19107,23280 2 161233 -- U+00D1 (19U 209)
-`O 20580,23887,323 2 161234 -- U+00D2 (19U 210)
-'O 20580,23887,323 2 161235 -- U+00D3 (19U 211)
-^O 20580,23836,323 2 161236 -- U+00D4 (19U 212)
-~O 20580,23280,323 2 161237 -- U+00D5 (19U 213)
-:O 20580,23138,323 2 161238 -- U+00D6 (19U 214)
-tmu 15451,15645 0 161239 -- U+00D7 (19U 215)
-/O 20580,19844,1059 2 161240 -- U+00D8 (19U 216)
-`U 19107,23887,323 2 161241 -- U+00D9 (19U 217)
-'U 19107,23887,323 2 161242 -- U+00DA (19U 218)
-^U 19107,23836,323 2 161243 -- U+00DB (19U 219)
-:U 19107,23138,323 2 161244 -- U+00DC (19U 220)
-'Y 17648,23887 2 161245 -- U+00DD (19U 221)
-TP 17648,18939 2 161246 -- U+00DE (19U 222)
-ss 16162,19262,310 2 161247 -- U+00DF (19U 223)
-`a 14715,19262,310 2 161248 -- U+00E0 (19U 224)
-'a 14715,19262,310 2 161249 -- U+00E1 (19U 225)
-^a 14715,19262,310 2 161250 -- U+00E2 (19U 226)
-~a 14715,18862,310 2 161251 -- U+00E3 (19U 227)
-:a 14715,19262,310 2 161252 -- U+00E4 (19U 228)
-oa 14715,19870,310 2 161253 -- U+00E5 (19U 229)
-ae 23526,14030,310 0 161254 -- U+00E6 (19U 230)
-,c 14715,14030,5413 1 161255 -- U+00E7 (19U 231)
-`e 14715,19262,310 2 161256 -- U+00E8 (19U 232)
-'e 14715,19262,310 2 161257 -- U+00E9 (19U 233)
-^e 14715,19262,310 2 161258 -- U+00EA (19U 234)
-:e 14715,19262,310 2 161259 -- U+00EB (19U 235)
-`i 7351,19262 2 161260 -- U+00EC (19U 236)
-'i 7351,19262 2 161261 -- U+00ED (19U 237)
-^i 7351,19262 2 161262 -- U+00EE (19U 238)
-:i 7351,19262 2 161263 -- U+00EF (19U 239)
-Sd 16162,18939,323 2 161264 -- U+00F0 (19U 240)
-~n 16162,18862 2 161265 -- U+00F1 (19U 241)
-`o 16162,19262,310 2 161266 -- U+00F2 (19U 242)
-'o 16162,19262,310 2 161267 -- U+00F3 (19U 243)
-^o 16162,19262,310 2 161268 -- U+00F4 (19U 244)
-~o 16162,18862,310 2 161269 -- U+00F5 (19U 245)
-:o 16162,19262,310 2 161270 -- U+00F6 (19U 246)
-tdi 14521,16304 0 161271 -- U+00F7 (19U 247)
-/o 16162,14456,943 0 161272 -- U+00F8 (19U 248)
-`u 16162,19262,310 2 161273 -- U+00F9 (19U 249)
-'u 16162,19262,310 2 161274 -- U+00FA (19U 250)
-^u 16162,19262,310 2 161275 -- U+00FB (19U 251)
-:u 16162,19262,310 2 161276 -- U+00FC (19U 252)
-'y 14715,19262,5568 3 161277 -- U+00FD (19U 253)
-Tp 16162,18939,5219 3 161278 -- U+00FE (19U 254)
-:y 14715,19262,5568 3 161279 -- U+00FF (19U 255)
-u0041_0306 19107,23719 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 14715,19262,310 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 19107,18939,5568 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 14715,14030,5568 1 75193 -- U+0105 ( 9E 185)
-'C 19107,23887,323 2 75206 -- U+0106 ( 9E 198)
-'c 14715,19262,310 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 19107,23913,323 2 75208 -- U+010C ( 9E 200)
-u0061_030C 14715,19262,310 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23913 2 75215 -- U+010E ( 9E 207)
-u0064_030C 19017,18939,310 2 75247 -- U+010F ( 9E 239)
-u0111 16162,18939,310 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,18939,5568 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 14715,14030,5568 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23913 2 75212 -- U+011A ( 9E 204)
-u0065_030C 14715,19262,310 2 75244 -- U+011B ( 9E 236)
-u0047_0306 20580,23719,323 2 46288 -- U+011E ( 5T 208)
-u0067_0306 16162,19262,5568 3 46320 -- U+011F ( 5T 240)
-u0049_0307 7351,23461 2 46301 -- U+0130 ( 5T 221)
-.i 7351,13720 0 46333 -- U+0131 ( 5T 253)
-IJ 20761,18939,323 2 60135 -- U+0132 ( 7J 231)
-ij 14715,18939,5568 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 16162,23887 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23771 2 75237 -- U+013A ( 9E 229)
-u004C_030C 16162,18784 2 75196 -- U+013D ( 9E 188)
-u006C_030C 10193,18939 2 75198 -- U+013E ( 9E 190)
-u013F 16162,18784 2 95646 -- U+013F (11U 158)
-u0140 12674,18939 2 95647 -- U+0140 (11U 159)
-/L 16162,18939 2 75171 -- U+0141 ( 9E 163)
-/l 7351,18939 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23887 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 16162,19262 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23913 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 16162,19262 2 75250 -- U+0148 ( 9E 242)
-u0149 18746,18939 2 95660 -- U+0149 (11U 172)
-u004F_030B 20580,23875,323 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 16162,19314,310 2 75253 -- U+0151 ( 9E 245)
-OE 26458,19262,323 2 161164 -- U+0152 (19U 140)
-oe 24973,14030,310 0 161180 -- U+0153 (19U 156)
-u0052_0301 19107,23887 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 10297,19262 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 19107,23913 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 10297,19262 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 17648,23887,336 2 75148 -- U+015A ( 9E 140)
-u0073_0301 14715,19262,310 2 75164 -- U+015B ( 9E 156)
-u0053_0327 17648,19262,5413 3 75178 -- U+015E ( 9E 170)
-u0073_0327 14715,14030,5413 1 75194 -- U+015F ( 9E 186)
-vS 17648,23913,336 2 161162 -- U+0160 (19U 138)
-vs 14715,19262,310 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,18939,8436 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 8811,18565,7751 3 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23913 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 12674,18939,310 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,24327,323 2 75225 -- U+016E ( 9E 217)
-u0075_030A 16162,19870,310 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23875,323 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 16162,19314,310 2 75259 -- U+0171 ( 9E 251)
-:Y 17648,23138 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23887 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 13229,19262 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,23552 2 75183 -- U+017B ( 9E 175)
-u007A_0307 13229,19262 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23913 2 75150 -- U+017D ( 9E 142)
-vz 13229,19262 2 75166 -- U+017E ( 9E 158)
-Fn 14715,19262,5568 3 161155 -- U+0192 (19U 131)
-a^ 8811,19262 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,19262 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,18371 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,19262 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,19262 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,19870 2 60152 -- U+02DA ( 7J 248)
-ho 8811,336,5568 1 75186 -- U+02DB ( 9E 178)
-~ 8811,18862 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,19314 2 75197 -- U+02DD ( 9E 189)
-en 14715,8217 0 161174 -- U+2013 (19U 150)
-em 26458,8217 0 161175 -- U+2014 (19U 151)
-u2017 14612,0,9961 1 60095 -- U+2017 ( 7J 191)
-oq 7351,19120 2 161169 -- U+2018 (19U 145)
-` "
-cq 7351,18888 2 161170 -- U+2019 (19U 146)
-' "
-bq 7351,3630,4225 0 161154 -- U+201A (19U 130)
-lq 13229,19120 2 161171 -- U+201C (19U 147)
-rq 13229,18939 2 161172 -- U+201D (19U 148)
-Bq 13229,3630,4237 0 161156 -- U+201E (19U 132)
-dg 14715,18707,4522 2 161158 -- U+2020 (19U 134)
-dd 14715,18707,4522 2 161159 -- U+2021 (19U 135)
-bu 9263,13165 0 161173 -- U+2022 (19U 149)
-u2026 26458,3630 0 161157 -- U+2026 (19U 133)
-%0 26458,19262,762 2 161161 -- U+2030 (19U 137)
-fm 6343,18939 2 60101 -- U+2032 ( 7J 197)
-sd 12674,18939 2 60102 -- U+2033 ( 7J 198)
-fo 8811,12699 0 161163 -- U+2039 (19U 139)
-fc 8811,12699 0 161179 -- U+203A (19U 155)
-u203C 15981,18939 2 87315 -- U+203C (10U 19)
-u207F 10477,15477 0 87548 -- U+207F (10U 252)
-u20A7 28939,18939,336 2 60121 -- U+20A7 ( 7J 217)
-Eu 14715,19262,323 2 161152 -- U+20AC (19U 128)
-u2105 23422,19262,723 2 60072 -- U+2105 ( 7J 168)
-u2113 12932,19262,310 2 60122 -- U+2113 ( 7J 218)
-tm 26458,18939 2 161177 -- U+2122 (19U 153)
-\- 15451,11046 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,19172,698 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371 2 101079 -- U+25CA (12J 215)
-fi 16162,19262 2 60077 -- U+FB01 ( 7J 173)
-fl 16162,19262 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/ABI b/contrib/groff/font/devlj4/ABI
deleted file mode 100644
index af145cd96b77..000000000000
--- a/contrib/groff/font/devlj4/ABI
+++ /dev/null
@@ -1,428 +0,0 @@
-# M Arial Bd It
-name ABI
-spacewidth 7351
-slant 12.000000
-pcltypeface 16602
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl 0
-kernpairs
-1 1 -1963
-A T -1963
-A V -1963
-A W -1459
-A Y -1963
-A cq -1459
-A ' -1459
-F , -2932
-F . -2932
-F A -1459
-L T -1963
-L V -1459
-L W -1459
-L Y -1963
-L cq -1963
-L ' -1963
-P , -3410
-P . -3410
-P A -1963
-R T -477
-R W -477
-R Y -477
-T , -1963
-T hy -1459
-T - -1459
-T . -1963
-T : -1963
-T ; -1963
-T A -1963
-T O -477
-T a -981
-T c -981
-T e -981
-T i -477
-T o -981
-T r -477
-T s -981
-T u -477
-T w -981
-T y -981
-V , -2428
-V hy -981
-V - -981
-V . -2428
-V : -981
-V ; -981
-V A -1963
-V a -981
-V e -981
-V i -981
-V o -981
-V r -477
-V u -477
-V y -477
-W , -1963
-W hy -981
-W - -981
-W . -1963
-W : -981
-W ; -981
-W A -1459
-W a -477
-W e -477
-W i -232
-W o -477
-W r -477
-W u -477
-W y -477
-Y , -2428
-Y hy -1963
-Y - -1963
-Y . -2428
-Y : -1459
-Y ; -1459
-Y A -1963
-Y a -981
-Y e -981
-Y i -981
-Y o -981
-Y p -981
-Y q -981
-Y u -981
-Y v -981
-f f -477
-f cq 478
-f ' 478
-r , -1459
-r . -1459
-r cq 982
-r ' 982
-v , -1459
-v . -1459
-w , -981
-w . -981
-y , -981
-y . -981
-oq oq -981
-oq ` -981
-` oq -981
-` ` -981
-cq s -477
-' s -477
-cq t 478
-' t 478
-cq cq -981
-cq ' -981
-' cq -981
-' ' -981
-charset
-! 8811,18939,0,1847,-309,181 2 161057 -- U+0021 (19U 33)
-dq 12544,18939,0,2093,-2596,181 2 161058 -- U+0022 (19U 34)
-" "
-sh 14715,19262,323,2041,52,181 2 161059 -- U+0023 (19U 35)
-# "
-Do 14715,20373,2623,1847,155,181 2 161060 -- U+0024 (19U 36)
-$ "
-% 23526,19262,814,659,-1084,181 2 161061 -- U+0025 (19U 37)
-& 19107,19262,439,891,-877,181 2 161062 -- U+0026 (19U 38)
-aq 6292,18939,0,3734,-2686,181 2 161063 -- U+0027 (19U 39)
-( 8811,19262,5568,4031,-425,181 3 161064 -- U+0028 (19U 40)
-) 8811,19262,5568,220,3385,181 3 161065 -- U+0029 (19U 41)
-* 10297,19262,0,2984,-1278,181 2 161066 -- U+002A (19U 42)
-+ 15451,15968,0,1240,-813,181 0 161067 -- U+002B (19U 43)
-, 7351,3579,4108,0,1046 0 161068 -- U+002C (19U 44)
-hy 8811,8617,0,1473,297,181 0 161069 -- U+002D (19U 45)
-- "
-. 7351,3579,0,0,155 0 161070 -- U+002E (19U 46)
-sl 7351,19262,323,4780,2468,181 2 161071 -- U+002F (19U 47)
-/ "
-0 14715,19017,323,1718,-387,181 2 161072 -- U+0030 (19U 48)
-1 14715,19056,0,116,-1821,116 2 161073 -- U+0031 (19U 49)
-2 14715,19017,0,1705,-283,181 2 161074 -- U+0032 (19U 50)
-3 14715,19017,323,1421,-25,181 2 161075 -- U+0033 (19U 51)
-4 14715,18939,0,1421,594,181 2 161076 -- U+0034 (19U 52)
-5 14715,18681,323,1886,-361,181 2 161077 -- U+0035 (19U 53)
-6 14715,19017,336,1835,-826,181 2 161078 -- U+0036 (19U 54)
-7 14715,18681,0,2545,-1420,181 2 161079 -- U+0037 (19U 55)
-8 14715,19017,336,1602,-425,181 2 161080 -- U+0038 (19U 56)
-9 14715,19017,323,1369,-361,181 2 161081 -- U+0039 (19U 57)
-: 8811,13720,0,891,-542,181 0 161082 -- U+003A (19U 58)
-; 8811,13720,4108,969,245,181 0 161083 -- U+003B (19U 59)
-< 15451,16549,0,1111,-942,181 0 161084 -- U+003C (19U 60)
-= 15451,13875,0,1240,-813,181 0 161085 -- U+003D (19U 61)
-> 15451,16524,0,1124,-942,181 0 161086 -- U+003E (19U 62)
-? 16162,19262,0,1512,-1937,181 2 161087 -- U+003F (19U 63)
-at 25799,19275,5568,2157,-399,181 3 161088 -- U+0040 (19U 64)
-@ "
-A 19107,18939,0,26,1615,26 2 161089 -- U+0041 (19U 65)
-B 19107,18939,0,995,258,181 2 161090 -- U+0042 (19U 66)
-C 19107,19262,336,1938,-1188,181 2 161091 -- U+0043 (19U 67)
-D 19107,18939,0,1382,168,181 2 161092 -- U+0044 (19U 68)
-E 17648,18939,0,2752,233,181 2 161093 -- U+0045 (19U 69)
-F 16162,18939,0,3411,284,181 2 161094 -- U+0046 (19U 70)
-G 20580,19262,323,1524,-1020,181 2 161095 -- U+0047 (19U 71)
-H 19107,18939,0,2442,168,181 2 161096 -- U+0048 (19U 72)
-I 7351,18939,0,2739,400,181 2 161097 -- U+0049 (19U 73)
-J 14715,18939,323,2468,556,181 2 161098 -- U+004A (19U 74)
-K 19107,18939,0,3411,271,181 2 161099 -- U+004B (19U 75)
-L 16162,18939,0,543,129,181 2 161100 -- U+004C (19U 76)
-M 22040,18939,0,2519,245,181 2 161101 -- U+004D (19U 77)
-N 19107,18939,0,2390,129,181 2 161102 -- U+004E (19U 78)
-O 20580,19262,336,1486,-994,181 2 161103 -- U+004F (19U 79)
-P 17648,18939,0,2248,245,181 2 161104 -- U+0050 (19U 80)
-Q 20580,19262,2519,1473,-994,181 2 161105 -- U+0051 (19U 81)
-R 19107,18939,0,1822,155,181 2 161106 -- U+0052 (19U 82)
-S 17648,19262,323,1563,-309,181 2 161107 -- U+0053 (19U 83)
-T 16162,18939,0,3914,-1859,181 2 161108 -- U+0054 (19U 84)
-U 19107,18939,323,2455,-1097,181 2 161109 -- U+0055 (19U 85)
-V 17648,18939,0,4664,-1678,181 2 161110 -- U+0056 (19U 86)
-W 24973,18939,0,4599,-1782,181 2 161111 -- U+0057 (19U 87)
-X 17648,18939,0,4405,2119,181 2 161112 -- U+0058 (19U 88)
-Y 17648,18939,0,4431,-1717,181 2 161113 -- U+0059 (19U 89)
-Z 16162,18939,0,2829,659,181 2 161114 -- U+005A (19U 90)
-lB 8811,18939,5219,4121,1059,181 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,19262,323,1563,-748,181 2 161116 -- U+005C (19U 92)
-\ "
-rB 8811,18939,5219,2429,2791,181 3 161117 -- U+005D (19U 93)
-] "
-ha 15451,19262,0,1111,-1459,181 2 161118 -- U+005E (19U 94)
-_ 14715,0,5232,1447,1563,181 1 161119 -- U+005F (19U 95)
-ga 8811,19366,0,1266,-2221,181 2 161120 -- U+0060 (19U 96)
-a 14715,14043,323,711,129,181 0 161121 -- U+0061 (19U 97)
-b 16162,18939,323,1072,362,181 2 161122 -- U+0062 (19U 98)
-c 14715,14043,323,1537,-270,181 0 161123 -- U+0063 (19U 99)
-d 16162,18939,323,2842,-244,181 2 161124 -- U+0064 (19U 100)
-e 14715,14043,323,1279,-219,181 0 161125 -- U+0065 (19U 101)
-f 8811,19262,0,4961,-102,181 2 161126 -- U+0066 (19U 102)
-g 16162,14043,5568,1628,491,181 1 161127 -- U+0067 (19U 103)
-h 16162,18939,0,788,207,181 2 161128 -- U+0068 (19U 104)
-i 7351,18939,0,2687,258,181 2 161129 -- U+0069 (19U 105)
-j 7351,18939,5568,2726,4212,181 3 161130 -- U+006A (19U 106)
-k 14715,18939,0,2855,323,181 2 161131 -- U+006B (19U 107)
-l 7351,18939,0,2661,284,181 2 161132 -- U+006C (19U 108)
-m 23526,14043,0,775,375,181 0 161133 -- U+006D (19U 109)
-n 16162,14043,0,801,207,181 0 161134 -- U+006E (19U 110)
-o 16162,14043,323,1008,-283,181 0 161135 -- U+006F (19U 111)
-p 16162,14043,5232,1176,1460,181 1 161136 -- U+0070 (19U 112)
-q 16162,14043,5232,1692,-257,181 1 161137 -- U+0071 (19U 113)
-r 10297,14043,0,3566,465,181 0 161138 -- U+0072 (19U 114)
-s 14715,14043,323,1201,736,181 0 161139 -- U+0073 (19U 115)
-t 8811,18474,323,2842,-671,181 2 161140 -- U+0074 (19U 116)
-u 16162,13720,323,1537,-542,181 0 161141 -- U+0075 (19U 117)
-v 14715,13720,0,2958,-658,181 0 161142 -- U+0076 (19U 118)
-w 20580,13720,0,2971,-580,181 0 161143 -- U+0077 (19U 119)
-x 14715,13720,0,2803,1899,181 0 161144 -- U+0078 (19U 120)
-y 14715,13720,5568,3023,1150,181 1 161145 -- U+0079 (19U 121)
-z 13229,13720,0,1809,878,181 0 161146 -- U+007A (19U 122)
-{ 10297,19262,5568,3992,207,181 3 161147 -- U+007B (19U 123)
-lC "
-| 7403,19262,5568,0,-955 3 161148 -- U+007C (19U 124)
-ba "
-} 10297,19262,5568,633,3566,181 3 161149 -- U+007D (19U 125)
-rC "
-ti 15451,11937,0,1357,-451,181 0 161150 -- U+007E (19U 126)
-r! 8811,13720,5219,568,1008,181 1 161185 -- U+00A1 (19U 161)
-ct 14715,18888,5103,1486,-232,181 3 161186 -- U+00A2 (19U 162)
-Po 14715,19262,478,2752,775,181 2 161187 -- U+00A3 (19U 163)
-Cs 14715,16149,0,1809,-425,181 0 161188 -- U+00A4 (19U 164)
-Ye 14715,18939,0,4237,685,181 2 161189 -- U+00A5 (19U 165)
-bb 7403,19262,5568,0,-955 3 161190 -- U+00A6 (19U 166)
-sc 14715,19262,5607,1421,749,181 3 161191 -- U+00A7 (19U 167)
-ad 8811,18965,0,4018,-916,181 2 161192 -- U+00A8 (19U 168)
-co 19495,19327,465,2765,168,181 2 161193 -- U+00A9 (19U 169)
-Of 9793,19262,0,2429,-852,181 2 161194 -- U+00AA (19U 170)
-Fo 14715,12622,0,2235,-852,181 0 161195 -- U+00AB (19U 171)
-tno 15451,13875,0,1240,-813,181 0 161196 -- U+00AC (19U 172)
-u00AD 8811,8617,0,1473,297,181 0 161197 -- U+00AD (19U 173)
-rg 19495,19327,465,2765,168,181 2 161198 -- U+00AE (19U 174)
-u00AF 14612,22415,0,3604,-490,181 2 161199 -- U+00AF (19U 175)
-de 10581,19262,0,1886,-1588,181 2 161200 -- U+00B0 (19U 176)
-t+- 14521,17841,0,1718,-361,181 2 161201 -- U+00B1 (19U 177)
-S2 8811,19172,0,2984,-852,181 2 161202 -- U+00B2 (19U 178)
-S3 8811,19172,0,2816,-697,181 2 161203 -- U+00B3 (19U 179)
-aa 8811,19327,0,4018,-3539,181 2 161204 -- U+00B4 (19U 180)
-mc 15245,13720,5310,1537,2300,181 1 161205 -- U+00B5 (19U 181)
-ps 14715,18939,5206,2377,155,181 3 161206 -- U+00B6 (19U 182)
-pc 7351,11033,0,0,-580 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,0,5491,0,1137 1 161208 -- U+00B8 (19U 184)
-S1 8811,19198,0,2080,-1717,181 2 161209 -- U+00B9 (19U 185)
-Om 9663,19262,0,2623,-593,181 2 161210 -- U+00BA (19U 186)
-Fc 14715,12622,0,659,723,181 0 161211 -- U+00BB (19U 187)
-14 22066,19172,788,1473,-1317,181 2 161212 -- U+00BC (19U 188)
-12 22066,19172,788,1357,-929,181 2 161213 -- U+00BD (19U 189)
-34 22066,19172,788,1783,-684,181 2 161214 -- U+00BE (19U 190)
-r? 16162,13720,5542,0,607 1 161215 -- U+00BF (19U 191)
-`A 19107,23952,0,26,1615,26 2 161216 -- U+00C0 (19U 192)
-'A 19107,23913,0,362,1615,181 2 161217 -- U+00C1 (19U 193)
-^A 19107,23952,0,142,1499,142 2 161218 -- U+00C2 (19U 194)
-~A 19107,23125,0,26,1615,26 2 161219 -- U+00C3 (19U 195)
-:A 19107,23177,0,271,1563,181 2 161220 -- U+00C4 (19U 196)
-oA 19107,22596,245,26,1615,26 2 161221 -- U+00C5 (19U 197)
-AE 26458,18939,0,2881,2170,181 2 161222 -- U+00C6 (19U 198)
-,C 19107,19262,5413,1938,-1188,181 3 161223 -- U+00C7 (19U 199)
-`E 17648,23952,0,2752,233,181 2 161224 -- U+00C8 (19U 200)
-'E 17648,23913,0,2752,233,181 2 161225 -- U+00C9 (19U 201)
-^E 17648,23952,0,2752,233,181 2 161226 -- U+00CA (19U 202)
-:E 17648,23177,0,2752,233,181 2 161227 -- U+00CB (19U 203)
-`I 7351,23952,0,4095,400,181 2 161228 -- U+00CC (19U 204)
-'I 7351,23913,0,5904,400,181 2 161229 -- U+00CD (19U 205)
-^I 7351,23952,0,5245,400,181 2 161230 -- U+00CE (19U 206)
-:I 7351,23177,0,5943,400,181 2 161231 -- U+00CF (19U 207)
--D 19107,18939,0,1395,349,181 2 161232 -- U+00D0 (19U 208)
-~N 19107,23125,0,2390,129,181 2 161233 -- U+00D1 (19U 209)
-`O 20580,23952,336,1486,-994,181 2 161234 -- U+00D2 (19U 210)
-'O 20580,23913,336,1486,-994,181 2 161235 -- U+00D3 (19U 211)
-^O 20580,23952,336,1486,-994,181 2 161236 -- U+00D4 (19U 212)
-~O 20580,23125,336,1486,-994,181 2 161237 -- U+00D5 (19U 213)
-:O 20580,23177,336,1486,-994,181 2 161238 -- U+00D6 (19U 214)
-tmu 15451,15645,0,917,-1123,181 0 161239 -- U+00D7 (19U 215)
-/O 20580,20283,1576,1550,-735,181 2 161240 -- U+00D8 (19U 216)
-`U 19107,23952,323,2455,-1097,181 2 161241 -- U+00D9 (19U 217)
-'U 19107,23913,323,2455,-1097,181 2 161242 -- U+00DA (19U 218)
-^U 19107,23952,323,2455,-1097,181 2 161243 -- U+00DB (19U 219)
-:U 19107,23177,323,2455,-1097,181 2 161244 -- U+00DC (19U 220)
-'Y 17648,23913,0,4431,-1717,181 2 161245 -- U+00DD (19U 221)
-TP 17648,18939,0,1486,245,181 2 161246 -- U+00DE (19U 222)
-ss 16162,19262,323,543,388,181 2 161247 -- U+00DF (19U 223)
-`a 14715,19366,323,711,129,181 2 161248 -- U+00E0 (19U 224)
-'a 14715,19327,323,1615,129,181 2 161249 -- U+00E1 (19U 225)
-^a 14715,19353,323,711,129,181 2 161250 -- U+00E2 (19U 226)
-~a 14715,18797,323,840,439,181 2 161251 -- U+00E3 (19U 227)
-:a 14715,18965,323,1253,129,181 2 161252 -- U+00E4 (19U 228)
-oa 14715,19947,323,711,129,181 2 161253 -- U+00E5 (19U 229)
-ae 23526,14043,323,698,504,181 0 161254 -- U+00E6 (19U 230)
-,c 14715,14043,5387,1524,-257,181 1 161255 -- U+00E7 (19U 231)
-`e 14715,19366,323,1279,-219,181 2 161256 -- U+00E8 (19U 232)
-'e 14715,19327,323,1473,-219,181 2 161257 -- U+00E9 (19U 233)
-^e 14715,19353,323,1279,-219,181 2 161258 -- U+00EA (19U 234)
-:e 14715,18965,323,1279,-219,181 2 161259 -- U+00EB (19U 235)
-`i 7351,19366,0,3152,258,181 2 161260 -- U+00EC (19U 236)
-'i 7351,19327,0,4896,258,181 2 161261 -- U+00ED (19U 237)
-^i 7351,19353,0,4276,258,181 2 161262 -- U+00EE (19U 238)
-:i 7351,18965,0,5013,258,181 2 161263 -- U+00EF (19U 239)
-Sd 16162,18939,336,1240,-283,181 2 161264 -- U+00F0 (19U 240)
-~n 16162,18797,0,801,207,181 2 161265 -- U+00F1 (19U 241)
-`o 16162,19366,323,1008,-283,181 2 161266 -- U+00F2 (19U 242)
-'o 16162,19327,323,1008,-283,181 2 161267 -- U+00F3 (19U 243)
-^o 16162,19353,323,1008,-283,181 2 161268 -- U+00F4 (19U 244)
-~o 16162,18797,323,1008,-283,181 2 161269 -- U+00F5 (19U 245)
-:o 16162,18965,323,1008,-283,181 2 161270 -- U+00F6 (19U 246)
-tdi 14521,16304,0,1718,-361,181 0 161271 -- U+00F7 (19U 247)
-/o 16162,15115,1382,1137,-77,181 0 161272 -- U+00F8 (19U 248)
-`u 16162,19366,323,1537,-542,181 2 161273 -- U+00F9 (19U 249)
-'u 16162,19327,323,1537,-542,181 2 161274 -- U+00FA (19U 250)
-^u 16162,19353,323,1537,-542,181 2 161275 -- U+00FB (19U 251)
-:u 16162,18965,323,1537,-542,181 2 161276 -- U+00FC (19U 252)
-'y 14715,19327,5568,3023,1150,181 3 161277 -- U+00FD (19U 253)
-Tp 16162,18939,5232,1098,1563,181 3 161278 -- U+00FE (19U 254)
-:y 14715,18965,5568,3023,1150,181 3 161279 -- U+00FF (19U 255)
-u0041_0306 19107,23500,0,26,1615,26 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 14715,19224,323,956,129,181 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 19107,18939,5491,1111,1615,181 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 14715,14043,5491,814,129,181 1 75193 -- U+0105 ( 9E 185)
-'C 19107,23913,336,1938,-1188,181 2 75206 -- U+0106 ( 9E 198)
-'c 14715,19327,323,1537,-270,181 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 19107,23875,336,1938,-1188,181 2 75208 -- U+010C ( 9E 200)
-u0061_030C 14715,19353,323,1925,-270,181 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23952,0,1382,168,181 2 75215 -- U+010E ( 9E 207)
-u0064_030C 19572,18939,323,4380,-244,181 2 75247 -- U+010F ( 9E 239)
-u0111 16162,18939,323,4405,-244,181 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,18939,5491,2752,233,181 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 14715,14043,5491,1279,-219,181 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23952,0,2752,233,181 2 75212 -- U+011A ( 9E 204)
-u0065_030C 14715,19353,323,1292,-219,181 2 75244 -- U+011B ( 9E 236)
-u0047_0306 20580,23500,323,1524,-1020,181 2 46288 -- U+011E ( 5T 208)
-u0067_0306 16162,19224,5568,1628,491,181 3 46320 -- U+011F ( 5T 240)
-u0049_0307 7351,23397,0,3604,400,181 2 46301 -- U+0130 ( 5T 221)
-.i 7351,13720,0,1602,258,181 0 46333 -- U+0131 ( 5T 253)
-IJ 20696,18939,323,2571,400,181 2 60135 -- U+0132 ( 7J 231)
-ij 14715,18939,5568,2597,90,181 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 16162,23913,0,543,129,181 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23784,0,5155,284,181 2 75237 -- U+013A ( 9E 229)
-u004C_030C 16162,18939,0,1344,129,181 2 75196 -- U+013D ( 9E 188)
-u006C_030C 10477,18939,0,4418,323,181 2 75198 -- U+013E ( 9E 190)
-u013F 16162,18939,0,504,168,181 2 95646 -- U+013F (11U 158)
-u0140 12674,18939,0,788,336,181 2 95647 -- U+0140 (11U 159)
-/L 16162,18939,0,646,930,181 2 75171 -- U+0141 ( 9E 163)
-/l 7351,18939,0,2726,530,181 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23913,0,2390,129,181 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 16162,19327,0,801,207,181 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23952,0,2390,129,181 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 16162,19353,0,891,207,181 2 75250 -- U+0148 ( 9E 242)
-u0149 18746,18939,0,685,245,181 2 95660 -- U+0149 (11U 172)
-u004F_030B 20580,23849,336,1486,-994,181 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 16162,19262,323,1641,-283,181 2 75253 -- U+0151 ( 9E 245)
-OE 26458,19262,323,3398,-503,181 2 161164 -- U+0152 (19U 140)
-oe 24973,14043,323,1318,-219,181 0 161180 -- U+0153 (19U 156)
-u0052_0301 19107,23913,0,1822,155,181 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 10297,19327,0,4044,465,181 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 19107,23952,0,1822,155,181 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 10297,19353,0,4767,465,181 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 17648,23913,323,1563,-309,181 2 75148 -- U+015A ( 9E 140)
-u0073_0301 14715,19327,323,1201,736,181 2 75164 -- U+015B ( 9E 156)
-u0053_0327 17648,19262,5491,1563,-309,181 3 75178 -- U+015E ( 9E 170)
-u0073_0327 14715,14043,5387,1201,736,181 1 75194 -- U+015F ( 9E 186)
-vS 17648,23952,323,1563,-309,181 2 161162 -- U+0160 (19U 138)
-vs 14715,19353,323,1201,736,181 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,18939,7894,3914,-1859,181 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 8811,18474,7261,2855,-438,181 3 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23952,0,3914,-1859,181 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 12674,18939,323,4392,-710,181 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,24856,323,2455,-1097,181 2 75225 -- U+016E ( 9E 217)
-u0075_030A 16162,19947,323,1537,-542,181 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23849,323,2455,-1097,181 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 16162,19262,323,2403,-542,181 2 75259 -- U+0171 ( 9E 251)
-:Y 17648,23177,0,4431,-1717,181 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23913,0,2829,659,181 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 13229,19327,0,1809,878,181 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,23397,0,2829,659,181 2 75183 -- U+017B ( 9E 175)
-u007A_0307 13229,19249,0,1809,878,181 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23952,0,2829,659,181 2 75150 -- U+017D ( 9E 142)
-vz 13229,19353,0,2054,878,181 2 75166 -- U+017E ( 9E 158)
-Fn 14715,19262,5568,1357,1576,181 3 161155 -- U+0192 (19U 131)
-a^ 8811,19353,0,2868,-167,181 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,19353,0,4276,-1575,181 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,18436,0,3540,-929,181 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,19224,0,2842,-916,181 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,19249,0,1240,-2996,181 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,19947,0,1473,-2660,181 2 60152 -- U+02DA ( 7J 248)
-ho 8811,245,5491,0,-322 1 75186 -- U+02DB ( 9E 178)
-~ 8811,18797,0,3850,-1136,181 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,19262,0,4845,439,181 2 75197 -- U+02DD ( 9E 189)
-en 14715,8217,0,1266,1369,181 0 161174 -- U+2013 (19U 150)
-em 26458,8217,0,1318,1318,181 0 161175 -- U+2014 (19U 151)
-u2017 14612,0,9961,1550,1563,181 1 60095 -- U+2017 ( 7J 191)
-oq 7351,19159,0,2196,-1562,181 2 161169 -- U+2018 (19U 145)
-` "
-cq 7351,18939,0,2584,-1950,181 2 161170 -- U+2019 (19U 146)
-' "
-bq 7351,3579,4108,0,1046 0 161154 -- U+201A (19U 130)
-lq 13229,19159,0,2984,-1989,181 2 161171 -- U+201C (19U 147)
-rq 13229,18939,0,3075,-2079,181 2 161172 -- U+201D (19U 148)
-Bq 13229,3579,4108,0,1227 0 161156 -- U+201E (19U 132)
-dg 14715,18681,4522,2325,-916,181 2 161158 -- U+2020 (19U 134)
-dd 14715,18681,4522,2468,1344,181 2 161159 -- U+2021 (19U 135)
-bu 9263,13165,0,1835,-826,181 0 161173 -- U+2022 (19U 149)
-u2026 26458,3579,0,0,-1136 0 161157 -- U+2026 (19U 133)
-%0 26458,19262,749,1886,-477,181 2 161161 -- U+2030 (19U 137)
-fm 6343,18939,0,3682,-2686,181 2 60101 -- U+2032 ( 7J 197)
-sd 12674,18939,0,1964,-2596,181 2 60102 -- U+2033 ( 7J 198)
-fo 8811,12622,0,2519,-257,181 0 161163 -- U+2039 (19U 139)
-fc 8811,12622,0,943,1059,181 0 161179 -- U+203A (19U 155)
-u203C 15981,18939,0,1847,-309,181 2 87315 -- U+203C (10U 19)
-u207F 10477,15412,0,2209,-244,181 0 87548 -- U+207F (10U 252)
-u20A7 29210,18939,336,891,1059,181 2 60121 -- U+20A7 ( 7J 217)
-Eu 14715,19262,336,3514,607,181 2 161152 -- U+20AC (19U 128)
-u2105 23422,19262,814,1576,-503,181 2 60072 -- U+2105 ( 7J 168)
-u2113 13655,19262,323,2002,65,181 2 60122 -- U+2113 ( 7J 218)
-tm 26458,18939,0,0,-2505 2 161177 -- U+2122 (19U 153)
-\- 15451,11046,0,1240,-813,181 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,19172,788,9909,7894,181 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196,0,0,-567 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371,0,1899,-451,181 2 101079 -- U+25CA (12J 215)
-fi 16162,19262,0,2674,-219,181 2 60077 -- U+FB01 ( 7J 173)
-fl 16162,19262,0,2648,-180,181 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/AI b/contrib/groff/font/devlj4/AI
deleted file mode 100644
index a980b411ea8e..000000000000
--- a/contrib/groff/font/devlj4/AI
+++ /dev/null
@@ -1,426 +0,0 @@
-# M Arial It
-name AI
-spacewidth 7351
-slant 12.000000
-pcltypeface 16602
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl 0
-kernpairs
-1 1 -1963
-A T -1963
-A V -1459
-A W -477
-A Y -1963
-A v -477
-A w -477
-A y -232
-A cq -981
-A ' -981
-F , -3410
-F . -3410
-F A -1963
-L T -1963
-L V -1459
-L W -981
-L Y -2428
-L y -477
-L cq -1459
-L ' -1459
-P , -3410
-P . -3410
-P A -1963
-R T -477
-R V -477
-R W -477
-R Y -981
-T , -2428
-T hy -2428
-T - -2428
-T . -2428
-T : -1963
-T ; -1963
-T A -1963
-T O -477
-T a -2428
-T c -2428
-T e -2428
-T i -232
-T o -2428
-T r -1963
-T s -2428
-T u -1963
-T w -1963
-T y -1963
-V , -1963
-V hy -981
-V - -981
-V . -1963
-V : -477
-V ; -477
-V A -1459
-V a -981
-V e -981
-V i -477
-V o -981
-V r -477
-V u -477
-V y -477
-W , -981
-W hy -477
-W - -477
-W . -981
-W A -477
-W a -477
-W e -477
-W i -232
-Y , -2428
-Y hy -1963
-Y - -1963
-Y . -2428
-Y : -981
-Y ; -981
-Y A -1459
-Y a -1963
-Y e -1459
-Y i -477
-Y o -1459
-Y p -1459
-Y q -1459
-Y u -981
-Y v -981
-f cq 982
-f ' 982
-r , -1459
-r hy -477
-r - -477
-r . -981
-r cq 982
-r ' 982
-v , -1963
-v . -1963
-w , -1459
-w . -1459
-y , -1963
-y . -1963
-oq oq -981
-oq ` -981
-` oq -981
-` ` -981
-cq s -477
-' s -477
-cq cq -981
-cq ' -981
-' cq -981
-' ' -981
-charset
-! 7351,18939,0,2002,-167,181 2 161057 -- U+0021 (19U 33)
-dq 9392,18939,0,3139,-2131,181 2 161058 -- U+0022 (19U 34)
-" "
-sh 14715,19262,323,1938,90,181 2 161059 -- U+0023 (19U 35)
-# "
-Do 14715,20205,2532,1757,-38,181 2 161060 -- U+0024 (19U 36)
-$ "
-% 23526,19262,698,349,-1252,181 2 161061 -- U+0025 (19U 37)
-& 17648,19262,452,904,-761,181 2 161062 -- U+0026 (19U 38)
-aq 5051,18939,0,3114,-2040,181 2 161063 -- U+0027 (19U 39)
-( 8811,19262,5568,3436,-916,181 3 161064 -- U+0028 (19U 40)
-) 8811,19262,5568,0,2726 3 161065 -- U+0029 (19U 41)
-* 10297,19262,0,2610,-1730,181 2 161066 -- U+002A (19U 42)
-+ 15451,15580,0,749,-1058,181 0 161067 -- U+002B (19U 43)
-, 7351,2648,3824,0,685 0 161068 -- U+002C (19U 44)
-hy 8811,8023,0,1357,90,181 0 161069 -- U+002D (19U 45)
-- "
-. 7351,2648,0,0,-206 0 161070 -- U+002E (19U 46)
-sl 7351,19262,310,4832,2661,181 2 161071 -- U+002F (19U 47)
-/ "
-0 14715,19017,323,1563,-555,181 2 161072 -- U+0030 (19U 48)
-1 14715,19017,0,0,-2596 2 161073 -- U+0031 (19U 49)
-2 14715,19017,0,1473,-232,181 2 161074 -- U+0032 (19U 50)
-3 14715,19017,323,1344,-128,181 2 161075 -- U+0033 (19U 51)
-4 14715,18939,0,956,116,181 2 161076 -- U+0034 (19U 52)
-5 14715,18681,323,1744,-516,181 2 161077 -- U+0035 (19U 53)
-6 14715,19017,323,1628,-890,181 2 161078 -- U+0036 (19U 54)
-7 14715,18681,0,2351,-1885,181 2 161079 -- U+0037 (19U 55)
-8 14715,19017,336,1537,-658,181 2 161080 -- U+0038 (19U 56)
-9 14715,19017,323,1189,-464,181 2 161081 -- U+0039 (19U 57)
-: 7351,13720,0,982,-193,181 0 161082 -- U+003A (19U 58)
-; 7351,13720,3824,904,685,181 0 161083 -- U+003B (19U 59)
-< 15451,15748,0,788,-1058,181 0 161084 -- U+003C (19U 60)
-= 15451,13307,0,749,-1058,181 0 161085 -- U+003D (19U 61)
-> 15451,15748,0,788,-1058,181 0 161086 -- U+003E (19U 62)
-? 14715,19262,0,1434,-2040,181 2 161087 -- U+003F (19U 63)
-at 26859,19288,5568,362,-115,181 3 161088 -- U+0040 (19U 64)
-@ "
-A 17648,18939,0,0,1847 2 161089 -- U+0041 (19U 65)
-B 17648,18939,0,995,168,181 2 161090 -- U+0042 (19U 66)
-C 19107,19262,323,1537,-1084,181 2 161091 -- U+0043 (19U 67)
-D 19107,18939,0,1046,142,181 2 161092 -- U+0044 (19U 68)
-E 17648,18939,0,2493,129,181 2 161093 -- U+0045 (19U 69)
-F 16162,18939,0,2623,116,181 2 161094 -- U+0046 (19U 70)
-G 20580,19262,323,1008,-1252,181 2 161095 -- U+0047 (19U 71)
-H 19107,18939,0,2157,207,181 2 161096 -- U+0048 (19U 72)
-I 7351,18939,0,1964,-193,181 2 161097 -- U+0049 (19U 73)
-J 13229,18939,323,2261,439,181 2 161098 -- U+004A (19U 74)
-K 17648,18939,0,3281,142,181 2 161099 -- U+004B (19U 75)
-L 14715,18939,0,478,258,181 2 161100 -- U+004C (19U 76)
-M 22040,18939,0,2351,155,181 2 161101 -- U+004D (19U 77)
-N 19107,18939,0,2235,26,181 2 161102 -- U+004E (19U 78)
-O 20580,19262,323,1176,-1097,181 2 161103 -- U+004F (19U 79)
-P 17648,18939,0,2132,181,181 2 161104 -- U+0050 (19U 80)
-Q 20580,19262,2170,1201,-1123,181 2 161105 -- U+0051 (19U 81)
-R 19107,18939,0,1524,78,181 2 161106 -- U+0052 (19U 82)
-S 17648,19262,323,1434,-542,181 2 161107 -- U+0053 (19U 83)
-T 16162,18939,0,3811,-1976,181 2 161108 -- U+0054 (19U 84)
-U 19107,18939,336,2170,-1239,181 2 161109 -- U+0055 (19U 85)
-V 17648,18939,0,3695,-1963,181 2 161110 -- U+0056 (19U 86)
-W 24973,18939,0,4431,-1989,181 2 161111 -- U+0057 (19U 87)
-X 17648,18939,0,4018,2157,181 2 161112 -- U+0058 (19U 88)
-Y 17648,18939,0,4121,-1769,181 2 161113 -- U+0059 (19U 89)
-Z 16162,18939,0,2002,672,181 2 161114 -- U+005A (19U 90)
-lB 7351,18939,5181,4315,1150,181 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,19262,310,1201,-929,181 2 161116 -- U+005C (19U 92)
-\ "
-rB 7351,18939,5181,2674,2868,181 3 161117 -- U+005D (19U 93)
-] "
-ha 12415,19262,0,1783,-542,181 2 161118 -- U+005E (19U 94)
-_ 14715,0,5258,336,2997,181 1 161119 -- U+005F (19U 95)
-ga 8811,18939,0,698,-2531,181 2 161120 -- U+0060 (19U 96)
-a 14715,14030,310,530,155,181 0 161121 -- U+0061 (19U 97)
-b 14715,18939,310,762,439,181 2 161122 -- U+0062 (19U 98)
-c 13229,14030,310,1602,-167,181 0 161123 -- U+0063 (19U 99)
-d 14715,18939,310,2429,-77,181 2 161124 -- U+0064 (19U 100)
-e 14715,14030,310,672,-51,181 0 161125 -- U+0065 (19U 101)
-f 7351,19262,0,4754,116,181 2 161126 -- U+0066 (19U 102)
-g 14715,14030,5491,1537,633,181 1 161127 -- U+0067 (19U 103)
-h 14715,18939,0,594,439,181 2 161128 -- U+0068 (19U 104)
-i 5878,18939,0,2519,530,181 2 161129 -- U+0069 (19U 105)
-j 5878,18939,5491,2506,4522,181 3 161130 -- U+006A (19U 106)
-k 13229,18939,0,2739,413,181 2 161131 -- U+006B (19U 107)
-l 5878,18939,0,2429,620,181 2 161132 -- U+006C (19U 108)
-m 22040,14030,0,775,452,181 0 161133 -- U+006D (19U 109)
-n 14715,14030,0,568,439,181 0 161134 -- U+006E (19U 110)
-o 14715,14030,310,891,26,181 0 161135 -- U+006F (19U 111)
-p 14715,14030,5258,762,1589,181 1 161136 -- U+0070 (19U 112)
-q 14715,14030,5258,1214,-38,181 1 161137 -- U+0071 (19U 113)
-r 8811,14030,0,3604,439,181 0 161138 -- U+0072 (19U 114)
-s 13229,14030,310,1357,310,181 0 161139 -- U+0073 (19U 115)
-t 7351,18707,233,2468,-167,181 2 161140 -- U+0074 (19U 116)
-u 14715,13720,310,1357,-335,181 0 161141 -- U+0075 (19U 117)
-v 13229,13720,0,2881,-774,181 0 161142 -- U+0076 (19U 118)
-w 19107,13720,0,2765,-735,181 0 161143 -- U+0077 (19U 119)
-x 13229,13720,0,2313,1357,181 0 161144 -- U+0078 (19U 120)
-y 13229,13720,5568,2933,1318,181 1 161145 -- U+0079 (19U 121)
-z 13229,13720,0,1641,801,181 0 161146 -- U+007A (19U 122)
-{ 8837,19262,5568,4263,-64,181 3 161147 -- U+007B (19U 123)
-lC "
-| 6873,19262,5568,0,-1110 3 161148 -- U+007C (19U 124)
-ba "
-} 8837,19262,5568,659,3540,181 3 161149 -- U+007D (19U 125)
-rC "
-ti 15451,11433,0,1201,-800,181 0 161150 -- U+007E (19U 126)
-r! 8811,13720,5219,581,-206,181 1 161185 -- U+00A1 (19U 161)
-ct 14715,19198,5258,620,-671,181 3 161186 -- U+00A2 (19U 162)
-Po 14715,19262,323,2674,491,181 2 161187 -- U+00A3 (19U 163)
-Cs 14715,15710,0,1421,-800,181 0 161188 -- U+00A4 (19U 164)
-Ye 14715,18939,0,4250,349,181 2 161189 -- U+00A5 (19U 165)
-bb 6873,19262,5568,0,-1110 3 161190 -- U+00A6 (19U 166)
-sc 14715,19262,5568,1292,517,181 3 161191 -- U+00A7 (19U 167)
-ad 8811,18500,0,3320,-1743,181 2 161192 -- U+00A8 (19U 168)
-co 19495,19262,233,2390,245,181 2 161193 -- U+00A9 (19U 169)
-Of 9793,19262,0,2351,-839,181 2 161194 -- U+00AA (19U 170)
-Fo 14715,12661,0,814,-761,181 0 161195 -- U+00AB (19U 171)
-tno 15451,13307,0,749,-1058,181 0 161196 -- U+00AC (19U 172)
-u00AD 8811,8023,0,1357,90,181 0 161197 -- U+00AD (19U 173)
-rg 19495,19262,233,2390,245,181 2 161198 -- U+00AE (19U 174)
-u00AF 14612,21898,0,4457,-1020,181 2 161199 -- U+00AF (19U 175)
-de 10581,19262,0,1434,-2208,181 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15878,0,904,-283,181 0 161201 -- U+00B1 (19U 177)
-S2 8811,19172,0,3114,-645,181 2 161202 -- U+00B2 (19U 178)
-S3 8811,19172,0,3088,-865,181 2 161203 -- U+00B3 (19U 179)
-aa 8811,18939,0,2351,-3151,181 2 161204 -- U+00B4 (19U 180)
-mc 15245,13720,5297,1201,1163,181 1 161205 -- U+00B5 (19U 181)
-ps 14211,18939,5258,3230,-516,181 3 161206 -- U+00B6 (19U 182)
-pc 7351,10645,0,0,-1071 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,155,5491,116,323,116 1 161208 -- U+00B8 (19U 184)
-S1 8811,19172,0,1886,-2286,181 2 161209 -- U+00B9 (19U 185)
-Om 9663,19262,0,2545,-529,181 2 161210 -- U+00BA (19U 186)
-Fc 14715,12661,0,0,245 0 161211 -- U+00BB (19U 187)
-14 22066,19262,788,1757,-890,181 2 161212 -- U+00BC (19U 188)
-12 22066,19262,788,1137,-270,181 2 161213 -- U+00BD (19U 189)
-34 22066,19262,788,2145,-865,181 2 161214 -- U+00BE (19U 190)
-r? 16162,13720,5542,0,-903 1 161215 -- U+00BF (19U 191)
-`A 17648,23668,0,0,1847 2 161216 -- U+00C0 (19U 192)
-'A 17648,23655,0,0,1847 2 161217 -- U+00C1 (19U 193)
-^A 17648,23655,0,0,1847 2 161218 -- U+00C2 (19U 194)
-~A 17648,22957,0,0,1847 2 161219 -- U+00C3 (19U 195)
-:A 17648,22751,0,0,1847 2 161220 -- U+00C4 (19U 196)
-oA 17648,22841,0,0,1847 2 161221 -- U+00C5 (19U 197)
-AE 26458,18939,0,2468,2390,181 2 161222 -- U+00C6 (19U 198)
-,C 19107,19262,5568,1563,-1110,181 3 161223 -- U+00C7 (19U 199)
-`E 17648,23668,0,2493,129,181 2 161224 -- U+00C8 (19U 200)
-'E 17648,23655,0,2493,129,181 2 161225 -- U+00C9 (19U 201)
-^E 17648,23655,0,2493,129,181 2 161226 -- U+00CA (19U 202)
-:E 17648,22712,0,2493,129,181 2 161227 -- U+00CB (19U 203)
-`I 7351,23668,0,2971,-193,181 2 161228 -- U+00CC (19U 204)
-'I 7351,23655,0,4263,-193,181 2 161229 -- U+00CD (19U 205)
-^I 7351,23655,0,4741,-193,181 2 161230 -- U+00CE (19U 206)
-:I 7351,22751,0,4909,-193,181 2 161231 -- U+00CF (19U 207)
--D 19107,18939,0,1266,142,181 2 161232 -- U+00D0 (19U 208)
-~N 19107,22957,0,2235,26,181 2 161233 -- U+00D1 (19U 209)
-`O 20580,23668,323,1176,-1097,181 2 161234 -- U+00D2 (19U 210)
-'O 20580,23655,323,1176,-1097,181 2 161235 -- U+00D3 (19U 211)
-^O 20580,23655,323,1176,-1097,181 2 161236 -- U+00D4 (19U 212)
-~O 20580,22957,323,1176,-1097,181 2 161237 -- U+00D5 (19U 213)
-:O 20580,22751,323,1176,-1097,181 2 161238 -- U+00D6 (19U 214)
-tmu 15451,14986,0,504,-2053,181 0 161239 -- U+00D7 (19U 215)
-/O 20580,20231,1331,1279,-929,181 2 161240 -- U+00D8 (19U 216)
-`U 19107,23668,336,2170,-1239,181 2 161241 -- U+00D9 (19U 217)
-'U 19107,23655,336,2170,-1239,181 2 161242 -- U+00DA (19U 218)
-^U 19107,23655,336,2170,-1239,181 2 161243 -- U+00DB (19U 219)
-:U 19107,22751,336,2170,-1239,181 2 161244 -- U+00DC (19U 220)
-'Y 17648,23655,0,4121,-1769,181 2 161245 -- U+00DD (19U 221)
-TP 17648,18939,0,1318,181,181 2 161246 -- U+00DE (19U 222)
-ss 16162,19262,323,168,362,168 2 161247 -- U+00DF (19U 223)
-`a 14715,18939,310,530,155,181 2 161248 -- U+00E0 (19U 224)
-'a 14715,18939,310,530,155,181 2 161249 -- U+00E1 (19U 225)
-^a 14715,18939,310,530,155,181 2 161250 -- U+00E2 (19U 226)
-~a 14715,18694,310,904,155,181 2 161251 -- U+00E3 (19U 227)
-:a 14715,18500,310,530,155,181 2 161252 -- U+00E4 (19U 228)
-oa 14715,19405,310,530,155,181 2 161253 -- U+00E5 (19U 229)
-ae 23526,14043,323,685,194,181 0 161254 -- U+00E6 (19U 230)
-,c 13229,14030,5258,1602,-167,181 1 161255 -- U+00E7 (19U 231)
-`e 14715,18939,310,672,-51,181 2 161256 -- U+00E8 (19U 232)
-'e 14715,18939,310,672,-51,181 2 161257 -- U+00E9 (19U 233)
-^e 14715,18939,310,672,-51,181 2 161258 -- U+00EA (19U 234)
-:e 14715,18500,310,672,-51,181 2 161259 -- U+00EB (19U 235)
-`i 7351,18939,0,2170,-296,181 2 161260 -- U+00EC (19U 236)
-'i 7351,18939,0,3204,-296,181 2 161261 -- U+00ED (19U 237)
-^i 7351,18939,0,3798,-296,181 2 161262 -- U+00EE (19U 238)
-:i 7351,18500,0,3966,-296,181 2 161263 -- U+00EF (19U 239)
-Sd 14715,18939,323,1046,26,181 2 161264 -- U+00F0 (19U 240)
-~n 14715,18681,0,685,439,181 2 161265 -- U+00F1 (19U 241)
-`o 14715,18939,310,891,26,181 2 161266 -- U+00F2 (19U 242)
-'o 14715,18939,310,891,26,181 2 161267 -- U+00F3 (19U 243)
-^o 14715,18939,310,891,26,181 2 161268 -- U+00F4 (19U 244)
-~o 14715,18681,310,891,26,181 2 161269 -- U+00F5 (19U 245)
-:o 14715,18500,310,891,26,181 2 161270 -- U+00F6 (19U 246)
-tdi 14521,14560,0,956,-335,181 0 161271 -- U+00F7 (19U 247)
-/o 16162,14973,1318,607,-658,181 0 161272 -- U+00F8 (19U 248)
-`u 14715,18939,310,1357,-335,181 2 161273 -- U+00F9 (19U 249)
-'u 14715,18939,310,1357,-335,181 2 161274 -- U+00FA (19U 250)
-^u 14715,18939,310,1357,-335,181 2 161275 -- U+00FB (19U 251)
-:u 14715,18500,310,1357,-335,181 2 161276 -- U+00FC (19U 252)
-'y 13229,18939,5568,2933,1318,181 3 161277 -- U+00FD (19U 253)
-Tp 14715,18939,5258,762,1589,181 3 161278 -- U+00FE (19U 254)
-:y 13229,18500,5568,2933,1318,181 3 161279 -- U+00FF (19U 255)
-u0041_0306 17648,23448,0,0,1847 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 14715,18371,310,530,155,181 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 17648,18939,5491,2132,1847,181 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 14715,14030,5491,1679,155,181 1 75193 -- U+0105 ( 9E 185)
-'C 19107,23655,323,1537,-1084,181 2 75206 -- U+0106 ( 9E 198)
-'c 13229,18939,310,1602,-167,181 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 19107,23655,323,1537,-1084,181 2 75208 -- U+010C ( 9E 200)
-u0061_030C 13229,18939,310,1718,-167,181 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23655,0,1046,142,181 2 75215 -- U+010E ( 9E 207)
-u0064_030C 16536,18939,310,4444,-128,181 2 75247 -- U+010F ( 9E 239)
-u0111 14715,18939,310,3876,-77,181 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,18939,5491,2493,129,181 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 14715,14030,5491,672,-51,181 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23655,0,2493,129,181 2 75212 -- U+011A ( 9E 204)
-u0065_030C 14715,18939,310,672,-51,181 2 75244 -- U+011B ( 9E 236)
-u0047_0306 20580,23448,323,1008,-1252,181 2 46288 -- U+011E ( 5T 208)
-u0067_0306 14715,18371,5491,1537,633,181 3 46320 -- U+011F ( 5T 240)
-u0049_0307 7351,22854,0,2803,-193,181 2 46301 -- U+0130 ( 5T 221)
-.i 7351,13720,0,788,-296,181 0 46333 -- U+0131 ( 5T 253)
-IJ 19405,18939,323,2261,-193,181 2 60135 -- U+0132 ( 7J 231)
-ij 11743,18939,5491,2635,556,181 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 14715,23655,0,478,258,181 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 5878,23461,0,4715,620,181 2 75237 -- U+013A ( 9E 229)
-u004C_030C 14715,18939,0,1395,258,181 2 75196 -- U+013D ( 9E 188)
-u006C_030C 7441,18939,0,4444,594,181 2 75198 -- U+013E ( 9E 190)
-u013F 14715,18939,0,530,207,181 2 95646 -- U+013F (11U 158)
-u0140 10581,18939,0,530,581,181 2 95647 -- U+0140 (11U 159)
-/L 14715,18939,0,465,1008,181 2 75171 -- U+0141 ( 9E 163)
-/l 5878,18939,0,2984,827,181 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23655,0,2235,26,181 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 14715,18939,0,568,439,181 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23655,0,2235,26,181 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 14715,18939,0,620,439,181 2 75250 -- U+0148 ( 9E 242)
-u0149 16265,18862,0,659,13,181 2 95660 -- U+0149 (11U 172)
-u004F_030B 20580,23655,323,1176,-1097,181 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 14715,18939,310,1990,26,181 2 75253 -- U+0151 ( 9E 245)
-OE 26458,19262,336,2480,-800,181 2 161164 -- U+0152 (19U 140)
-oe 24973,14030,310,659,-348,181 0 161180 -- U+0153 (19U 156)
-u0052_0301 19107,23655,0,1524,78,181 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 8811,18939,0,3604,439,181 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 19107,23655,0,1524,78,181 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 8811,18939,0,4470,439,181 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 17648,23655,323,1434,-542,181 2 75148 -- U+015A ( 9E 140)
-u0073_0301 13229,18939,310,1357,310,181 2 75164 -- U+015B ( 9E 156)
-u0053_0327 17648,19262,5568,1434,-542,181 3 75178 -- U+015E ( 9E 170)
-u0073_0327 13229,14030,5258,1357,310,181 1 75194 -- U+015F ( 9E 186)
-vS 17648,23655,323,1434,-542,181 2 161162 -- U+0160 (19U 138)
-vs 13229,18939,310,1421,310,181 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,18939,7273,3811,-1976,181 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 7351,18707,6692,2455,65,181 3 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23655,0,3811,-1976,181 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 9366,18939,233,4470,-89,181 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,24714,336,2170,-1239,181 2 75225 -- U+016E ( 9E 217)
-u0075_030A 14715,19405,310,1357,-335,181 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23655,336,2170,-1239,181 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 14715,18939,310,1628,-335,181 2 75259 -- U+0171 ( 9E 251)
-:Y 17648,22712,0,4121,-1769,181 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23655,0,2002,672,181 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 13229,18939,0,1641,801,181 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,22854,0,2002,672,181 2 75183 -- U+017B ( 9E 175)
-u007A_0307 13229,18500,0,1641,801,181 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23655,0,1847,827,181 2 75150 -- U+017D ( 9E 142)
-vz 13229,18939,0,1641,801,181 2 75166 -- U+017E ( 9E 158)
-Fn 14715,19275,5568,620,723,181 3 161155 -- U+0192 (19U 131)
-a^ 8811,18939,0,2765,-1330,181 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,18939,0,3514,-2092,181 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,17673,0,3501,-1278,181 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,18371,0,3075,-1511,181 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,18500,0,1137,-3823,181 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,19405,0,1447,-2919,181 2 60152 -- U+02DA ( 7J 248)
-ho 8811,349,5491,0,-296 1 75186 -- U+02DB ( 9E 178)
-~ 8811,18681,0,3721,-1162,181 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,18939,0,4509,-955,181 2 75197 -- U+02DD ( 9E 189)
-en 14715,7790,0,1266,1369,181 0 161174 -- U+2013 (19U 150)
-em 26458,7790,0,1318,1318,181 0 161175 -- U+2014 (19U 151)
-u2017 14612,0,8591,439,2997,181 1 60095 -- U+2017 ( 7J 191)
-oq 5878,19262,0,2868,-2092,181 2 161169 -- U+2018 (19U 145)
-` "
-cq 5878,18862,0,2765,-1989,181 2 161170 -- U+2019 (19U 146)
-' "
-bq 5878,2648,3824,0,1512 0 161154 -- U+201A (19U 130)
-lq 8811,19262,0,3436,-1472,181 2 161171 -- U+201C (19U 147)
-rq 8811,18862,0,3553,-1446,181 2 161172 -- U+201D (19U 148)
-Bq 8811,2648,3824,220,1835,181 0 161156 -- U+201E (19U 132)
-dg 14715,18681,4509,2041,-1084,181 2 161158 -- U+2020 (19U 134)
-dd 14715,18681,4509,2170,1176,181 2 161159 -- U+2021 (19U 135)
-bu 9263,12544,0,13,-89,13 0 161173 -- U+2022 (19U 149)
-u2026 26458,2648,0,0,-2479 0 161157 -- U+2026 (19U 133)
-%0 26458,19262,711,1408,-438,181 2 161161 -- U+2030 (19U 137)
-fm 4961,18939,0,3204,-2040,181 2 60101 -- U+2032 ( 7J 197)
-sd 9366,18939,0,3165,-2131,181 2 60102 -- U+2033 ( 7J 198)
-fo 8811,12661,0,814,65,181 0 161163 -- U+2039 (19U 139)
-fc 8811,12661,0,129,891,129 0 161179 -- U+203A (19U 155)
-u203C 13229,18939,0,1912,-167,181 2 87315 -- U+203C (10U 19)
-u207F 9651,15477,0,2067,-219,181 0 87548 -- U+207F (10U 252)
-u20A7 28939,18939,336,827,995,181 2 60121 -- U+20A7 ( 7J 217)
-Eu 14715,19262,323,3669,271,181 2 161152 -- U+20AC (19U 128)
-u2105 23422,19262,698,917,-1058,181 2 60072 -- U+2105 ( 7J 168)
-u2113 8552,19262,310,3927,995,181 2 60122 -- U+2113 ( 7J 218)
-tm 26458,18939,0,0,-2299 2 161177 -- U+2122 (19U 153)
-\- 15451,10426,0,749,-1058,181 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,19262,788,10271,8242,181 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196,0,0,-567 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371,0,1679,-232,181 2 101079 -- U+25CA (12J 215)
-fi 13229,19262,0,2506,-115,181 2 60077 -- U+FB01 ( 7J 173)
-fl 13229,19262,0,2506,-115,181 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/ALBB b/contrib/groff/font/devlj4/ALBB
deleted file mode 100644
index d5495c5cf48e..000000000000
--- a/contrib/groff/font/devlj4/ALBB
+++ /dev/null
@@ -1,756 +0,0 @@
-# Albertus Xb
-name ALBB
-spacewidth 9759
-pcltypeface 4362
-pclproportional 1
-pclweight 4
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -4388
-P , -4388
-V A -3413
-A V -3413
-T o -3413
-T r -3413
-T c -3413
-T e -3413
-T d -3413
-T s -3413
-T y -3413
-T a -3413
-T w -3413
-T u -3413
-L T -2924
-L Y -2924
-Y o -2924
-Y e -2924
-Y a -2924
-A W -2924
-W A -2924
-T A -3413
-V o -2924
-V e -2924
-V a -2438
-Y A -2924
-F A -1949
-F . -3902
-F , -3902
-A T -3413
-A Y -2924
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -3413
-T , -3413
-L W -2924
-P A -2438
-V . -3902
-V , -3902
-Y . -2924
-Y , -2924
-W o -2438
-W e -2438
-W a -1949
-W . -2924
-W , -2924
-r . -2924
-r , -2924
-w . -2438
-w , -2438
-Y u -1949
-A v -1460
-A y -1460
-A w -1460
-o . -974
-o , -974
-p . -1949
-p , -1949
-e . -974
-e , -974
-b . -1949
-b , -1949
-O T -2438
-O V -1949
-O Y -2438
-O . -2438
-O , -2438
-L y -974
-L O -974
-L G -485
-L C -485
-L Q -485
-P J -485
-V y -1460
-V u -1460
-V O -1949
-V G -1460
-V C -1460
-V Q -1460
-D T -2438
-D V -1460
-D Y -1949
-D . -2438
-D , -2438
-Y O -2438
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -974
-F e -974
-F a -974
-O A -1460
-O W -1460
-L U -485
-R T -1460
-R V -1460
-R Y -1460
-R W -1460
-G T -485
-P o -1460
-P g -974
-P e -1460
-P a -974
-D A -974
-D W -974
-B T -1949
-B Y -1949
-B . -1949
-B , -1949
-A O -1460
-A G -974
-A C -974
-A U -974
-A Q -974
-W r -974
-W y -974
-W u -974
-W O -1460
-W G -974
-W C -974
-W Q -974
-U A -974
-U . -1949
-U , -1949
-Q A -974
-Q W -974
-f . -485
-f , -485
-T O -2438
-T G -2438
-T C -2438
-T Q -2438
-O X -1949
-L o -485
-L e -485
-L q -485
-G V -485
-G Y -485
-G W -485
-G . -485
-G , -485
-P T -485
-P V -485
-P Y -485
-D X -1460
-B V -1460
-B X -1460
-B A -974
-B W -974
-S . -1460
-S , -1460
-F O -485
-X o -1460
-X e -1460
-X y -1460
-X O -1949
-X G -1460
-X C -1460
-X Q -1460
-A o -974
-A e -974
-Q X -1460
-K o -974
-K e -974
-K y -974
-K w -974
-K O -1460
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o x -485
-o w -485
-h v -485
-h y -485
-m v -485
-m y -485
-r g -974
-g . -974
-g , -974
-p v -485
-p y -485
-p x -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-b w -485
-s . -974
-s , -974
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x c -485
-x e -485
-x d -485
-x q -485
-a v -485
-a y -485
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -1460
-R o -974
-R y -974
-R O -1460
-R G -974
-R C -974
-R U -974
-R Q -974
-G X -485
-G A -485
-P s -974
-P Z -485
-P X -485
-P W -485
-V S -1460
-S A -974
-Y S -1460
-X u -1460
-A t -974
-A c -974
-A d -974
-A u -974
-A q -974
-W S -974
-K c -974
-K u -974
-h w -485
-m w -485
-r o -974
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-g g -485
-p w -485
-v e -485
-v s -485
-e x -485
-e w -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-w e -485
-w s -485
-k o -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k w -485
-k q -485
-O Z -974
-O J -974
-L J -485
-R e -974
-R u -974
-G Z -485
-P O -485
-E O -485
-Z o -485
-Z e -485
-Z d -485
-Z y -485
-Z w -485
-Z u -485
-Z O -974
-Z G -485
-Z C -485
-Z Q -485
-D Z -485
-D J -485
-B Z -485
-B J -485
-A J -485
-J O -485
-K J -485
-t o -485
-t c -485
-t e -485
-t d -485
-t q -485
-o z -485
-r s -974
-g o -485
-g c -485
-g e -485
-g d -485
-g s -485
-g a -485
-g q -485
-p z -485
-e z -485
-z o -485
-z c -485
-z e -485
-z d -485
-z q -485
-b z -485
-k t -485
-k u -485
-O g -485
-O j -485
-R J -485
-G J -485
-C O -485
-B O -485
-U O -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -974
-L ' -974
-T hy -3413
-T - -3413
-T en -3413
-T em -3413
-A cq -1460
-A ' -1460
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -1949
-Y - -1949
-Y en -1949
-Y em -1949
-p cq -485
-p ' -485
-e cq -485
-e ' -485
-b cq -485
-b ' -485
-a cq -485
-a ' -485
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -485
-h ' -485
-m cq -485
-m ' -485
-R cq -974
-R ' -974
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -1949
-' d -1949
-L hy -485
-L - -485
-L en -485
-L em -485
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -974
-A - -974
-A en -974
-A em -974
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-R hy -974
-R - -974
-R en -974
-R em -974
-K cq -485
-K ' -485
-k cq -485
-k ' -485
-O cq -485
-O ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-k hy -485
-k - -485
-k en -485
-k em -485
-charset
-! 9759,20130,300 2 161057 -- MSL 1 (19U 33)
-dq 15126,20130 2 161058 -- MSL 2 (19U 34)
-" "
-sh 17565,20430,300 2 161059 -- MSL 3 (19U 35)
-# "
-Do 17565,21630,2370 2 161060 -- MSL 4 (19U 36)
-$ "
-% 25857,20430,300 2 161061 -- MSL 5 (19U 37)
-& 23907,17037,300 0 161062 -- MSL 6 (19U 38)
-cq 9759,20130 2 161170 -- MSL 8 (19U 146)
-' "
-( 13173,20130,4365 3 161064 -- MSL 9 (19U 40)
-) 13173,20130,4365 3 161065 -- MSL 10 (19U 41)
-* 17565,20130 2 161066 -- MSL 11 (19U 42)
-+ 25857,15465 0 161067 -- MSL 12 (19U 43)
-, 9759,5025,3885 0 161068 -- MSL 13 (19U 44)
-hy 9759,10515 0 161069 -- MSL 14 (19U 45)
-- "
-. 9759,5430,300 0 161070 -- MSL 15 (19U 46)
-sl 13173,20130 2 161071 -- MSL 16 (19U 47)
-/ "
-0 17565,20430,300 2 161072 -- MSL 17 (19U 48)
-1 17565,20430 2 161073 -- MSL 18 (19U 49)
-2 17565,20430 2 161074 -- MSL 19 (19U 50)
-3 17565,20130,300 2 161075 -- MSL 20 (19U 51)
-4 17565,20130 2 161076 -- MSL 21 (19U 52)
-5 17565,20130,300 2 161077 -- MSL 22 (19U 53)
-6 17565,20130,300 2 161078 -- MSL 23 (19U 54)
-7 17565,20130 2 161079 -- MSL 24 (19U 55)
-8 17565,20430,300 2 161080 -- MSL 25 (19U 56)
-9 17565,20430 2 161081 -- MSL 26 (19U 57)
-: 9759,14376,300 0 161082 -- MSL 27 (19U 58)
-; 9759,14376,3885 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 25857,13644 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 12684,20430,300 2 161087 -- MSL 32 (19U 63)
-at 25857,21057,2679 2 161088 -- MSL 33 (19U 64)
-@ "
-A 20490,20130 2 161089 -- MSL 34 (19U 65)
-B 18540,20130 2 161090 -- MSL 35 (19U 66)
-C 19029,20430,300 2 161091 -- MSL 36 (19U 67)
-D 20490,20130 2 161092 -- MSL 37 (19U 68)
-E 16101,20130 2 161093 -- MSL 38 (19U 69)
-F 15126,20130 2 161094 -- MSL 39 (19U 70)
-G 20490,20430,300 2 161095 -- MSL 40 (19U 71)
-H 21468,20130 2 161096 -- MSL 41 (19U 72)
-I 10245,20130 2 161097 -- MSL 42 (19U 73)
-J 11709,20130,4380 3 161098 -- MSL 43 (19U 74)
-K 19515,20130 2 161099 -- MSL 44 (19U 75)
-L 15126,20130 2 161100 -- MSL 45 (19U 76)
-M 25857,20130 2 161101 -- MSL 46 (19U 77)
-N 22443,20130 2 161102 -- MSL 47 (19U 78)
-O 23907,20430,300 2 161103 -- MSL 48 (19U 79)
-P 17076,20130 2 161104 -- MSL 49 (19U 80)
-Q 23907,20430,4095 2 161105 -- MSL 50 (19U 81)
-R 18540,20130 2 161106 -- MSL 51 (19U 82)
-S 14148,20430,300 2 161107 -- MSL 52 (19U 83)
-T 16587,20130 2 161108 -- MSL 53 (19U 84)
-U 21468,20130,300 2 161109 -- MSL 54 (19U 85)
-V 20004,20130 2 161110 -- MSL 55 (19U 86)
-W 25857,20130 2 161111 -- MSL 56 (19U 87)
-X 20004,20130 2 161112 -- MSL 57 (19U 88)
-Y 17565,20130 2 161113 -- MSL 58 (19U 89)
-Z 17565,20130 2 161114 -- MSL 59 (19U 90)
-lB 13173,20130,3960 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 13173,20130 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 13173,20130,3960 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 9759,20130 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,14310,300 0 161121 -- MSL 67 (19U 97)
-b 16101,20025 2 161122 -- MSL 68 (19U 98)
-c 12684,14310,300 0 161123 -- MSL 69 (19U 99)
-d 15612,20025,300 2 161124 -- MSL 70 (19U 100)
-e 13662,14310,300 0 161125 -- MSL 71 (19U 101)
-f 9759,20130 2 161126 -- MSL 72 (19U 102)
-g 14637,14310,4650 1 161127 -- MSL 73 (19U 103)
-h 15612,20025 2 161128 -- MSL 74 (19U 104)
-i 7806,20940 2 161129 -- MSL 75 (19U 105)
-j 7806,20940,4365 3 161130 -- MSL 76 (19U 106)
-k 16587,20025 2 161131 -- MSL 77 (19U 107)
-l 7806,20025 2 161132 -- MSL 78 (19U 108)
-m 23418,14310 0 161133 -- MSL 79 (19U 109)
-n 15612,14310 0 161134 -- MSL 80 (19U 110)
-o 16101,14310,300 0 161135 -- MSL 81 (19U 111)
-p 15612,14310,4365 1 161136 -- MSL 82 (19U 112)
-q 15612,14310,4365 1 161137 -- MSL 83 (19U 113)
-r 11220,14310 0 161138 -- MSL 84 (19U 114)
-s 11220,14310,300 0 161139 -- MSL 85 (19U 115)
-t 10734,17100,300 0 161140 -- MSL 86 (19U 116)
-u 15612,14010,300 0 161141 -- MSL 87 (19U 117)
-v 14637,14010 0 161142 -- MSL 88 (19U 118)
-w 20979,14010 0 161143 -- MSL 89 (19U 119)
-x 16587,14010 0 161144 -- MSL 90 (19U 120)
-y 14637,14010,4365 1 161145 -- MSL 91 (19U 121)
-z 12198,14010 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 20490,25170 2 161216 -- MSL 99 (19U 192)
-^A 20490,25170 2 161218 -- MSL 100 (19U 194)
-`E 16101,25170 2 161224 -- MSL 101 (19U 200)
-^E 16101,25170 2 161226 -- MSL 102 (19U 202)
-:E 16101,26130 2 161227 -- MSL 103 (19U 203)
-^I 10245,25170 2 161230 -- MSL 104 (19U 206)
-:I 10245,26130 2 161231 -- MSL 105 (19U 207)
-aa 17565,20250 2 161204 -- MSL 106 (19U 180)
-ga 17565,20250 2 161120 -- MSL 107 (19U 96)
-a^ 17565,20250 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 17565,20190 2 161192 -- MSL 109 (19U 168)
-~ 17565,19035 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 21468,25170,300 2 161241 -- MSL 111 (19U 217)
-^U 21468,25170,300 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 17565,25170 2 161245 -- MSL 114 (19U 221)
-'y 14637,20250,4365 3 161277 -- MSL 115 (19U 253)
-de 14637,20430 2 161200 -- MSL 116 (19U 176)
-,C 19029,20430,6270 3 161223 -- MSL 117 (19U 199)
-,c 12684,14310,6000 1 161255 -- MSL 118 (19U 231)
-~N 22443,25101 2 161233 -- MSL 119 (19U 209)
-~n 15612,19035 2 161265 -- MSL 120 (19U 241)
-r! 9759,14376,6054 1 161185 -- MSL 121 (19U 161)
-r? 12684,14526,6204 1 161215 -- MSL 122 (19U 191)
-Cs 17565,15834 0 161188 -- MSL 123 (19U 164)
-Po 17565,20430 2 161187 -- MSL 124 (19U 163)
-Ye 17565,20130 2 161189 -- MSL 125 (19U 165)
-sc 17565,20430,4365 3 161191 -- MSL 126 (19U 167)
-Fn 17565,20130 2 161155 -- MSL 127 (19U 131)
-ct 17565,19911 2 161186 -- MSL 128 (19U 162)
-^a 13173,20250,300 2 161250 -- MSL 129 (19U 226)
-^e 13662,20250,300 2 161258 -- MSL 130 (19U 234)
-^o 16101,20250,300 2 161268 -- MSL 131 (19U 244)
-^u 15612,20250,300 2 161275 -- MSL 132 (19U 251)
-'a 13173,20250,300 2 161249 -- MSL 133 (19U 225)
-'e 13662,20250,300 2 161257 -- MSL 134 (19U 233)
-'o 16101,20250,300 2 161267 -- MSL 135 (19U 243)
-'u 15612,20250,300 2 161274 -- MSL 136 (19U 250)
-`a 13173,20250,300 2 161248 -- MSL 137 (19U 224)
-`e 13662,20250,300 2 161256 -- MSL 138 (19U 232)
-`o 16101,20250,300 2 161266 -- MSL 139 (19U 242)
-`u 15612,20250,300 2 161273 -- MSL 140 (19U 249)
-:a 13173,20190,300 2 161252 -- MSL 141 (19U 228)
-:e 13662,20190,300 2 161259 -- MSL 142 (19U 235)
-:o 16101,20190,300 2 161270 -- MSL 143 (19U 246)
-:u 15612,20190,300 2 161276 -- MSL 144 (19U 252)
-oA 20490,26508 2 161221 -- MSL 145 (19U 197)
-^i 7806,20250 2 161262 -- MSL 146 (19U 238)
-/O 23907,20601,366 2 161240 -- MSL 147 (19U 216)
-AE 26835,20130 2 161222 -- MSL 148 (19U 198)
-oa 13173,20655,300 2 161253 -- MSL 149 (19U 229)
-'i 7806,20250 2 161261 -- MSL 150 (19U 237)
-/o 16101,14373,330 0 161272 -- MSL 151 (19U 248)
-ae 20004,14310,300 0 161254 -- MSL 152 (19U 230)
-:A 20490,26130 2 161220 -- MSL 153 (19U 196)
-`i 7806,20250 2 161260 -- MSL 154 (19U 236)
-:O 23907,26130,300 2 161238 -- MSL 155 (19U 214)
-:U 21468,26130,300 2 161244 -- MSL 156 (19U 220)
-'E 16101,25170 2 161225 -- MSL 157 (19U 201)
-:i 7806,20190 2 161263 -- MSL 158 (19U 239)
-ss 17076,20130,300 2 161247 -- MSL 159 (19U 223)
-^O 23907,25170,300 2 161236 -- MSL 160 (19U 212)
-'A 20490,25170 2 161217 -- MSL 161 (19U 193)
-~A 20490,25101 2 161219 -- MSL 162 (19U 195)
-~a 13173,19035,300 2 161251 -- MSL 163 (19U 227)
--D 21468,20130 2 161232 -- MSL 164 (19U 208)
-Sd 16101,20025,300 2 161264 -- MSL 165 (19U 240)
-'I 10245,25170 2 161229 -- MSL 166 (19U 205)
-`I 10245,25170 2 161228 -- MSL 167 (19U 204)
-'O 23907,25170,300 2 161235 -- MSL 168 (19U 211)
-`O 23907,25170,300 2 161234 -- MSL 169 (19U 210)
-~O 23907,25101,300 2 161237 -- MSL 170 (19U 213)
-~o 16101,19035,300 2 161269 -- MSL 171 (19U 245)
-vS 14148,25170,300 2 161162 -- MSL 172 (19U 138)
-vs 11220,20250,300 2 161178 -- MSL 173 (19U 154)
-'U 21468,25170,300 2 161242 -- MSL 174 (19U 218)
-:Y 17565,26130 2 161183 -- MSL 175 (19U 159)
-:y 14637,20190,4365 3 161279 -- MSL 176 (19U 255)
-TP 17076,20130 2 161246 -- MSL 177 (19U 222)
-Tp 15612,20025,4365 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680 1 161205 -- MSL 180 (19U 181)
-ps 17565,19635,4200 3 161206 -- MSL 181 (19U 182)
-34 25857,20430,300 2 161214 -- MSL 182 (19U 190)
-\- 25857,10380 0 60096 -- MSL 183 ( 7J 192)
-14 25857,20430,300 2 161212 -- MSL 184 (19U 188)
-12 25857,20430,300 2 161213 -- MSL 185 (19U 189)
-Of 12198,20430 2 161194 -- MSL 186 (19U 170)
-Om 12198,20430 2 161210 -- MSL 187 (19U 186)
-Fo 13662,12450 0 161195 -- MSL 188 (19U 171)
-Fc 13662,12450 0 161211 -- MSL 190 (19U 187)
-t+- 25857,15465,6855 1 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 25857,12210 0 161196 -- MSL 194 (19U 172)
-u00AD 9759,10515 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 12198,20340 2 161202 -- MSL 197 (19U 178)
-S3 12198,20130 2 161203 -- MSL 198 (19U 179)
-ac 17565,0,6000 1 161208 -- MSL 199 (19U 184)
-S1 12198,20340 2 161209 -- MSL 200 (19U 185)
-tmu 25857,15282 0 161239 -- MSL 201 (19U 215)
-tdi 25857,16380,885 0 161271 -- MSL 202 (19U 247)
-u203C 18540,20130,300 2 87315 -- MSL 221 (10U 19)
-u20A7 27810,20130,300 2 60121 -- MSL 232 ( 7J 217)
-pc 9759,13080 0 161207 -- MSL 302 (19U 183)
-u013F 15126,20130 2 51943 -- MSL 306 ( 6J 231)
-u0140 12684,20025 2 51959 -- MSL 307 ( 6J 247)
-u2113 17565,18045,765 0 60122 -- MSL 308 ( 7J 218)
-u0149 23418,20130 2 51951 -- MSL 309 ( 6J 239)
-fm 9759,20130 2 60101 -- MSL 310 ( 7J 197)
-sd 15612,20130 2 60102 -- MSL 311 ( 7J 198)
-dg 17565,20130,4365 3 161158 -- MSL 312 (19U 134)
-tm 16101,17850 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 17565,20250 2 75169 -- MSL 315 ( 9E 161)
-ao 17565,20655 2 60152 -- MSL 316 ( 7J 248)
-f/ 3903,20430,300 2 60109 -- MSL 324 ( 7J 205)
-em 25857,10095 0 161175 -- MSL 325 (19U 151)
-en 17565,10095 0 161174 -- MSL 326 (19U 150)
-dd 17565,20130,4365 3 161159 -- MSL 327 (19U 135)
-.i 7806,14010 0 46333 -- MSL 328 ( 5T 253)
-aq 9759,20130 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 12684,20340 2 87548 -- MSL 332 (10U 252)
-u0111 15612,20025,300 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 20490,25080 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,19260,300 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 20490,20130,5829 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,14310,5838 1 75193 -- MSL 405 ( 9E 185)
-'C 19029,25170,300 2 75206 -- MSL 406 ( 9E 198)
-'c 12684,20250,300 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 19029,25170,300 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 12684,20250,300 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,25170 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 20979,20130,300 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16101,25170 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13662,20250,300 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16101,20130,5829 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13662,14310,5838 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15126,25170 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7806,25170 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15126,20130 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 12684,20130 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 22443,25170 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15612,20250 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 22443,25170 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15612,20250 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 23907,25170,300 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 16101,20250,300 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 18540,25170 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 11220,20250 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 18540,25170 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 11220,20250 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,25170,300 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 11220,20250,300 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,25170 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 13173,20130,300 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,20130,6270 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 10734,17100,6000 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 21468,25170,300 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15612,20250,300 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 21468,26508,300 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15612,20655,300 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,25170 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12198,20250 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,26571 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12198,20190 2 75199 -- MSL 485 ( 9E 191)
-u2070 12198,20340 2 51753 -- MSL 1000 ( 6J 41)
-u2074 12198,20130 2 51748 -- MSL 1001 ( 6J 36)
-u2075 12198,20130 2 51749 -- MSL 1002 ( 6J 37)
-u2076 12198,20130 2 51806 -- MSL 1003 ( 6J 94)
-u2077 12198,20130 2 51750 -- MSL 1004 ( 6J 38)
-u2078 12198,20340 2 51754 -- MSL 1005 ( 6J 42)
-u2079 12198,20340 2 51752 -- MSL 1006 ( 6J 40)
-lq 17076,20130 2 161171 -- MSL 1017 (19U 147)
-rq 17076,20130 2 161172 -- MSL 1018 (19U 148)
-Bq 17076,5025,3885 0 161156 -- MSL 1019 (19U 132)
-u2003 25857,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 17565,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 9759,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 25857,4830,300 0 161157 -- MSL 1028 (19U 133)
-vz 12198,20250 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 0 51794 -- MSL 1036 ( 6J 82)
-fi 16587,20130 2 60077 -- MSL 1040 ( 7J 173)
-fl 16587,20130 2 60078 -- MSL 1041 ( 7J 174)
-ff 18540,20130 2 51883 -- MSL 1042 ( 6J 171)
-Fi 25371,20130 2 51884 -- MSL 1043 ( 6J 172)
-Fl 25371,20130 2 51885 -- MSL 1044 ( 6J 173)
-ij 15612,20940,4365 3 60134 -- MSL 1047 ( 7J 230)
-u2105 29274,20430,300 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,25080,300 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 14637,19260,4650 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,20430,6270 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 11220,14310,6000 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 10245,26571 2 46301 -- MSL 1065 ( 5T 221)
-bq 9759,5025,3885 0 161154 -- MSL 1067 (19U 130)
-%0 33663,20430,300 2 161161 -- MSL 1068 (19U 137)
-a- 17565,19020 2 60154 -- MSL 1084 ( 7J 250)
-ab 17565,19260 2 75170 -- MSL 1086 ( 9E 162)
-a. 17565,20190 2 75263 -- MSL 1088 ( 9E 255)
-oe 23418,14310,300 0 161180 -- MSL 1090 (19U 156)
-OE 31224,20430,300 2 161164 -- MSL 1091 (19U 140)
-fo 7806,12450 0 161163 -- MSL 1092 (19U 139)
-fc 7806,12450 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 16587,20130 2 75171 -- MSL 1095 ( 9E 163)
-/l 12684,20025 2 75187 -- MSL 1096 ( 9E 179)
-a" 17565,20250 2 75197 -- MSL 1097 ( 9E 189)
-ho 17565,348,5838 1 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,25170 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21954,20130,4380 3 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/ALBR b/contrib/groff/font/devlj4/ALBR
deleted file mode 100644
index 4a1b03318d00..000000000000
--- a/contrib/groff/font/devlj4/ALBR
+++ /dev/null
@@ -1,771 +0,0 @@
-# Albertus Md
-name ALBR
-spacewidth 8295
-pcltypeface 4362
-pclproportional 1
-pclweight 1
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -4388
-P , -4388
-V A -4388
-A V -4388
-T o -3902
-T r -3902
-T c -3902
-T e -3902
-T d -3902
-T s -3902
-T y -3902
-T a -3902
-T w -3902
-T u -3902
-L T -2924
-L Y -2924
-Y o -3902
-Y e -3902
-Y a -2924
-A W -3413
-W A -3413
-T A -3902
-V o -2924
-V e -2924
-V a -2924
-Y A -3902
-F A -2924
-F . -3902
-F , -3902
-A T -3902
-A Y -3902
-v . -3413
-v , -3413
-y . -3413
-y , -3413
-T . -3902
-T , -3902
-L W -2924
-P A -2924
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2438
-W e -2438
-W a -2438
-W . -3413
-W , -3413
-r . -2924
-r , -2924
-w . -3413
-w , -3413
-Y u -1949
-A v -2438
-A y -2438
-A w -2438
-o . -1949
-o , -1949
-p . -1949
-p , -1949
-e . -974
-e , -974
-b . -1949
-b , -1949
-O T -2438
-O V -2438
-O Y -2438
-O . -2438
-O , -2438
-L y -1460
-L O -1460
-L G -974
-L C -974
-L Q -974
-P J -485
-V y -1949
-V u -1949
-V O -2438
-V G -1949
-V C -1949
-V Q -1949
-D T -2438
-D V -1949
-D Y -1949
-D . -2438
-D , -2438
-Y O -2438
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -974
-F e -974
-F a -974
-O A -2438
-O W -1949
-L U -974
-R T -1460
-R V -1460
-R Y -1460
-R W -1460
-G T -1460
-P o -1460
-P g -974
-P e -1460
-P a -974
-D A -1949
-D W -1460
-B T -1949
-B Y -1949
-B . -1949
-B , -1949
-A O -2438
-A G -1949
-A C -1949
-A U -1949
-A Q -1949
-W r -1460
-W y -1460
-W u -1460
-W O -1949
-W G -1460
-W C -1460
-W Q -1460
-Q A -1949
-Q W -1460
-f . -485
-f , -485
-T O -2438
-T G -2438
-T C -2438
-T Q -2438
-O X -1460
-L o -974
-L e -974
-L q -974
-G V -1460
-G Y -1460
-G W -1460
-G . -485
-G , -485
-P T -485
-P V -485
-P Y -485
-D X -974
-B V -1949
-B X -974
-B A -1949
-B W -1460
-S . -1460
-S , -1460
-F O -485
-X o -974
-X e -974
-X y -974
-X O -1460
-X G -974
-X C -974
-X Q -974
-A o -1949
-A e -1949
-Q X -974
-K o -974
-K e -974
-K y -974
-K w -974
-K O -1460
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o x -485
-o w -485
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-r g -974
-g . -974
-g , -974
-p v -485
-p y -485
-p x -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-b w -485
-s . -974
-s , -974
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-a v -485
-a y -485
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -1460
-L a -974
-R o -974
-R y -974
-R O -1460
-R G -974
-R C -974
-R U -974
-R Q -974
-G X -485
-G A -485
-P Z -485
-P X -485
-P W -485
-V S -1460
-S T -974
-S V -974
-S Y -974
-S X -974
-S A -1460
-S W -974
-Y S -1460
-X a -974
-X u -974
-A t -974
-A c -1949
-A d -1949
-A a -974
-A u -1949
-A q -1949
-W S -1460
-K c -974
-K u -974
-o f -485
-h w -485
-n w -485
-m w -485
-r o -974
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-g g -485
-p f -485
-p w -485
-v e -485
-e f -485
-e x -485
-e w -485
-b f -485
-y e -485
-f o -485
-f c -485
-f e -485
-f d -485
-f a -485
-f q -485
-w e -485
-k o -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -974
-O J -974
-L J -485
-R e -974
-R a -974
-R u -974
-G Z -485
-P O -485
-E O -485
-Z o -485
-Z e -485
-Z d -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -974
-Z G -485
-Z C -485
-Z Q -485
-D Z -485
-D J -485
-B Z -485
-B J -485
-S Z -485
-S J -485
-A J -485
-J O -485
-K a -974
-K J -485
-o z -485
-h f -485
-n f -485
-m f -485
-g o -485
-g c -485
-g e -485
-g d -485
-g a -485
-g q -485
-p z -485
-e z -485
-z o -485
-z c -485
-z e -485
-z d -485
-z a -485
-z q -485
-b z -485
-a f -485
-k t -485
-k f -485
-k u -485
-O g -485
-O j -485
-R J -485
-G J -485
-C O -485
-B O -485
-A f -485
-U O -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -2924
-L ' -2924
-T hy -3902
-T - -3902
-T en -3902
-T em -3902
-A cq -2924
-A ' -2924
-hy T -3902
-- T -3902
-en T -3902
-em T -3902
-Y hy -1949
-Y - -1949
-Y en -1949
-Y em -1949
-p cq -1949
-p ' -1949
-e cq -974
-e ' -974
-b cq -1949
-b ' -1949
-a cq -1460
-a ' -1460
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -1949
-h ' -1949
-n cq -1949
-n ' -1949
-m cq -1949
-m ' -1949
-R cq -974
-R ' -974
-W hy -1460
-W - -1460
-W en -1460
-W em -1460
-cq d -1949
-' d -1949
-L hy -974
-L - -974
-L en -974
-L em -974
-X hy -974
-X - -974
-X en -974
-X em -974
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -974
-K - -974
-K en -974
-K em -974
-hy X -974
-- X -974
-hy A -1949
-- A -1949
-en X -974
-en A -1949
-em X -974
-R hy -974
-R - -974
-R en -974
-R em -974
-K cq -485
-K ' -485
-b f -485
-k cq -485
-k ' -485
-O cq -485
-O ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-k hy -485
-k - -485
-k en -485
-k em -485
-charset
-! 8295,20130,300 2 161057 -- MSL 1 (19U 33)
-dq 13173,20130 2 161058 -- MSL 2 (19U 34)
-" "
-sh 16587,20430,300 2 161059 -- MSL 3 (19U 35)
-# "
-Do 16587,21909,2490 2 161060 -- MSL 4 (19U 36)
-$ "
-% 24882,20430,300 2 161061 -- MSL 5 (19U 37)
-& 22932,16869,300 0 161062 -- MSL 6 (19U 38)
-cq 8295,20130 2 161170 -- MSL 8 (19U 146)
-' "
-( 10734,20130,4365 3 161064 -- MSL 9 (19U 40)
-) 10734,20130,4365 3 161065 -- MSL 10 (19U 41)
-* 16587,20130 2 161066 -- MSL 11 (19U 42)
-+ 24882,15420,60 0 161067 -- MSL 12 (19U 43)
-, 8295,3945,5055 1 161068 -- MSL 13 (19U 44)
-hy 8295,9795 0 161069 -- MSL 14 (19U 45)
-- "
-. 8295,4080,300 0 161070 -- MSL 15 (19U 46)
-sl 11709,20130 2 161071 -- MSL 16 (19U 47)
-/ "
-0 16587,20430,300 2 161072 -- MSL 17 (19U 48)
-1 16587,20430 2 161073 -- MSL 18 (19U 49)
-2 16587,20430 2 161074 -- MSL 19 (19U 50)
-3 16587,20130,300 2 161075 -- MSL 20 (19U 51)
-4 16587,20130 2 161076 -- MSL 21 (19U 52)
-5 16587,20130,300 2 161077 -- MSL 22 (19U 53)
-6 16587,20130,300 2 161078 -- MSL 23 (19U 54)
-7 16587,20130 2 161079 -- MSL 24 (19U 55)
-8 16587,20430,300 2 161080 -- MSL 25 (19U 56)
-9 16587,20430 2 161081 -- MSL 26 (19U 57)
-: 8295,12372,300 0 161082 -- MSL 27 (19U 58)
-; 8295,12372,5055 1 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 24882,11880 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 12198,20430,300 2 161087 -- MSL 32 (19U 63)
-at 24882,21030,2745 2 161088 -- MSL 33 (19U 64)
-@ "
-A 20979,20430 2 161089 -- MSL 34 (19U 65)
-B 15126,20130 2 161090 -- MSL 35 (19U 66)
-C 18051,20430,300 2 161091 -- MSL 36 (19U 67)
-D 18540,20130 2 161092 -- MSL 37 (19U 68)
-E 14637,20130 2 161093 -- MSL 38 (19U 69)
-F 13662,20130 2 161094 -- MSL 39 (19U 70)
-G 20490,20430,300 2 161095 -- MSL 40 (19U 71)
-H 20004,20130 2 161096 -- MSL 41 (19U 72)
-I 8295,20130 2 161097 -- MSL 42 (19U 73)
-J 10734,20130,4488 3 161098 -- MSL 43 (19U 74)
-K 18051,20130 2 161099 -- MSL 44 (19U 75)
-L 14148,20130 2 161100 -- MSL 45 (19U 76)
-M 24396,20130 2 161101 -- MSL 46 (19U 77)
-N 21468,20130 2 161102 -- MSL 47 (19U 78)
-O 22932,20430,300 2 161103 -- MSL 48 (19U 79)
-P 13662,20130 2 161104 -- MSL 49 (19U 80)
-Q 22932,20430,4152 3 161105 -- MSL 50 (19U 81)
-R 16587,20130 2 161106 -- MSL 51 (19U 82)
-S 13662,20430,300 2 161107 -- MSL 52 (19U 83)
-T 16587,20130 2 161108 -- MSL 53 (19U 84)
-U 20979,20130,300 2 161109 -- MSL 54 (19U 85)
-V 20490,20130 2 161110 -- MSL 55 (19U 86)
-W 24882,20430 2 161111 -- MSL 56 (19U 87)
-X 18051,20130 2 161112 -- MSL 57 (19U 88)
-Y 17076,20130 2 161113 -- MSL 58 (19U 89)
-Z 16101,20130 2 161114 -- MSL 59 (19U 90)
-lB 11220,20130,4365 3 161115 -- MSL 60 (19U 91)
-[ "
-rs 11709,20130 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 11220,20130,4365 3 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 8295,20130 2 161169 -- MSL 66 (19U 145)
-` "
-a 12198,14310,300 0 161121 -- MSL 67 (19U 97)
-b 14148,20025 2 161122 -- MSL 68 (19U 98)
-c 12198,14310,300 0 161123 -- MSL 69 (19U 99)
-d 14637,20025,300 2 161124 -- MSL 70 (19U 100)
-e 12684,14310,300 0 161125 -- MSL 71 (19U 101)
-f 8295,20130 2 161126 -- MSL 72 (19U 102)
-g 12684,14310,4479 1 161127 -- MSL 73 (19U 103)
-h 14148,20025 2 161128 -- MSL 74 (19U 104)
-i 6342,19815 2 161129 -- MSL 75 (19U 105)
-j 6342,19815,4365 3 161130 -- MSL 76 (19U 106)
-k 12684,20025 2 161131 -- MSL 77 (19U 107)
-l 6342,20025 2 161132 -- MSL 78 (19U 108)
-m 21954,14310 0 161133 -- MSL 79 (19U 109)
-n 14148,14310 0 161134 -- MSL 80 (19U 110)
-o 14637,14310,300 0 161135 -- MSL 81 (19U 111)
-p 14637,14310,4365 1 161136 -- MSL 82 (19U 112)
-q 14148,14310,4365 1 161137 -- MSL 83 (19U 113)
-r 9759,14310 0 161138 -- MSL 84 (19U 114)
-s 9270,14310,300 0 161139 -- MSL 85 (19U 115)
-t 8781,16950,300 0 161140 -- MSL 86 (19U 116)
-u 14148,14010,300 0 161141 -- MSL 87 (19U 117)
-v 12684,14010 0 161142 -- MSL 88 (19U 118)
-w 18540,14010 0 161143 -- MSL 89 (19U 119)
-x 12684,14010 0 161144 -- MSL 90 (19U 120)
-y 13173,14010,4365 1 161145 -- MSL 91 (19U 121)
-z 10245,14010 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 20979,24960 2 161216 -- MSL 99 (19U 192)
-^A 20979,24960 2 161218 -- MSL 100 (19U 194)
-`E 14637,24960 2 161224 -- MSL 101 (19U 200)
-^E 14637,24960 2 161226 -- MSL 102 (19U 202)
-:E 14637,25020 2 161227 -- MSL 103 (19U 203)
-^I 8295,24960 2 161230 -- MSL 104 (19U 206)
-:I 8295,25020 2 161231 -- MSL 105 (19U 207)
-aa 16587,19785 2 161204 -- MSL 106 (19U 180)
-ga 16587,19785 2 161120 -- MSL 107 (19U 96)
-a^ 16587,19785 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 16587,19140 2 161192 -- MSL 109 (19U 168)
-~ 16587,18507 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20979,24960,300 2 161241 -- MSL 111 (19U 217)
-^U 20979,24960,300 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 17076,24960 2 161245 -- MSL 114 (19U 221)
-'y 13173,19785,4365 3 161277 -- MSL 115 (19U 253)
-de 13662,20430 2 161200 -- MSL 116 (19U 176)
-,C 18051,20430,6330 3 161223 -- MSL 117 (19U 199)
-,c 12198,14310,6006 1 161255 -- MSL 118 (19U 231)
-~N 21468,24783 2 161233 -- MSL 119 (19U 209)
-~n 14148,18507 2 161265 -- MSL 120 (19U 241)
-r! 8295,14346,6084 1 161185 -- MSL 121 (19U 161)
-r? 12198,14496,6234 1 161215 -- MSL 122 (19U 191)
-Cs 16587,15684 0 161188 -- MSL 123 (19U 164)
-Po 16587,20430 2 161187 -- MSL 124 (19U 163)
-Ye 16587,20130 2 161189 -- MSL 125 (19U 165)
-sc 16587,20430,4365 3 161191 -- MSL 126 (19U 167)
-Fn 16587,20130 2 161155 -- MSL 127 (19U 131)
-ct 16587,19968 2 161186 -- MSL 128 (19U 162)
-^a 12198,19785,300 2 161250 -- MSL 129 (19U 226)
-^e 12684,19785,300 2 161258 -- MSL 130 (19U 234)
-^o 14637,19785,300 2 161268 -- MSL 131 (19U 244)
-^u 14148,19785,300 2 161275 -- MSL 132 (19U 251)
-'a 12198,19785,300 2 161249 -- MSL 133 (19U 225)
-'e 12684,19785,300 2 161257 -- MSL 134 (19U 233)
-'o 14637,19785,300 2 161267 -- MSL 135 (19U 243)
-'u 14148,19785,300 2 161274 -- MSL 136 (19U 250)
-`a 12198,19785,300 2 161248 -- MSL 137 (19U 224)
-`e 12684,19785,300 2 161256 -- MSL 138 (19U 232)
-`o 14637,19785,300 2 161266 -- MSL 139 (19U 242)
-`u 14148,19785,300 2 161273 -- MSL 140 (19U 249)
-:a 12198,19140,300 2 161252 -- MSL 141 (19U 228)
-:e 12684,19140,300 2 161259 -- MSL 142 (19U 235)
-:o 14637,19140,300 2 161270 -- MSL 143 (19U 246)
-:u 14148,19140,300 2 161276 -- MSL 144 (19U 252)
-oA 20979,26154 2 161221 -- MSL 145 (19U 197)
-^i 6342,19785 2 161262 -- MSL 146 (19U 238)
-/O 22932,20454,300 2 161240 -- MSL 147 (19U 216)
-AE 25857,20130 2 161222 -- MSL 148 (19U 198)
-oa 12198,20160,300 2 161253 -- MSL 149 (19U 229)
-'i 6342,19785 2 161261 -- MSL 150 (19U 237)
-/o 14637,14316,300 0 161272 -- MSL 151 (19U 248)
-ae 19515,14310,300 0 161254 -- MSL 152 (19U 230)
-:A 20979,25020 2 161220 -- MSL 153 (19U 196)
-`i 6342,19785 2 161260 -- MSL 154 (19U 236)
-:O 22932,25020,300 2 161238 -- MSL 155 (19U 214)
-:U 20979,25020,300 2 161244 -- MSL 156 (19U 220)
-'E 14637,24960 2 161225 -- MSL 157 (19U 201)
-:i 6342,19140 2 161263 -- MSL 158 (19U 239)
-ss 15612,20130,300 2 161247 -- MSL 159 (19U 223)
-^O 22932,24960,300 2 161236 -- MSL 160 (19U 212)
-'A 20979,24960 2 161217 -- MSL 161 (19U 193)
-~A 20979,24783 2 161219 -- MSL 162 (19U 195)
-~a 12198,18507,300 2 161251 -- MSL 163 (19U 227)
--D 20004,20130 2 161232 -- MSL 164 (19U 208)
-Sd 14637,20025,300 2 161264 -- MSL 165 (19U 240)
-'I 8295,24960 2 161229 -- MSL 166 (19U 205)
-`I 8295,24960 2 161228 -- MSL 167 (19U 204)
-'O 22932,24960,300 2 161235 -- MSL 168 (19U 211)
-`O 22932,24960,300 2 161234 -- MSL 169 (19U 210)
-~O 22932,24783,300 2 161237 -- MSL 170 (19U 213)
-~o 14637,18507,300 2 161269 -- MSL 171 (19U 245)
-vS 13662,24960,300 2 161162 -- MSL 172 (19U 138)
-vs 9270,19785,300 2 161178 -- MSL 173 (19U 154)
-'U 20979,24960,300 2 161242 -- MSL 174 (19U 218)
-:Y 17076,25020 2 161183 -- MSL 175 (19U 159)
-:y 13173,19140,4365 3 161279 -- MSL 176 (19U 255)
-TP 13662,20130 2 161246 -- MSL 177 (19U 222)
-Tp 14637,20025,4365 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350 1 161205 -- MSL 180 (19U 181)
-ps 16587,19635,4200 3 161206 -- MSL 181 (19U 182)
-34 24882,20430,300 2 161214 -- MSL 182 (19U 190)
-\- 24882,9405 0 60096 -- MSL 183 ( 7J 192)
-14 24882,20430,300 2 161212 -- MSL 184 (19U 188)
-12 24882,20430,300 2 161213 -- MSL 185 (19U 189)
-Of 10245,20430 2 161194 -- MSL 186 (19U 170)
-Om 10245,20430 2 161210 -- MSL 187 (19U 186)
-Fo 12198,12450 0 161195 -- MSL 188 (19U 171)
-Fc 12198,12450 0 161211 -- MSL 190 (19U 187)
-t+- 24882,15420,5175 1 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 24882,12135 0 161196 -- MSL 194 (19U 172)
-u00AD 8295,9795 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 10245,20340 2 161202 -- MSL 197 (19U 178)
-S3 10245,20130 2 161203 -- MSL 198 (19U 179)
-ac 16587,309,6006 1 161208 -- MSL 199 (19U 184)
-S1 10245,20340 2 161209 -- MSL 200 (19U 185)
-tmu 24882,15990,279 0 161239 -- MSL 201 (19U 215)
-tdi 24882,15090 0 161271 -- MSL 202 (19U 247)
-u203C 15126,20130,300 2 87315 -- MSL 221 (10U 19)
-u20A7 22443,20130,300 2 60121 -- MSL 232 ( 7J 217)
-pc 8295,12330 0 161207 -- MSL 302 (19U 183)
-u013F 14148,20130 2 51943 -- MSL 306 ( 6J 231)
-u0140 9759,20025 2 51959 -- MSL 307 ( 6J 247)
-u2113 16587,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 19515,20130 2 51951 -- MSL 309 ( 6J 239)
-fm 8295,20130 2 60101 -- MSL 310 ( 7J 197)
-sd 14148,20130 2 60102 -- MSL 311 ( 7J 198)
-dg 16587,20130,4365 3 161158 -- MSL 312 (19U 134)
-tm 16101,17850 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 16587,19785 2 75169 -- MSL 315 ( 9E 161)
-ao 16587,20160 2 60152 -- MSL 316 ( 7J 248)
-f/ 3414,20430,300 2 60109 -- MSL 324 ( 7J 205)
-em 24882,9525 0 161175 -- MSL 325 (19U 151)
-en 16587,9525 0 161174 -- MSL 326 (19U 150)
-dd 16587,20130,4365 3 161159 -- MSL 327 (19U 135)
-.i 6342,14010 0 46333 -- MSL 328 ( 5T 253)
-aq 8295,20130 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 12198,20340 2 87548 -- MSL 332 (10U 252)
-u0111 15126,20025,300 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 20979,24900 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 12198,19110,300 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 20979,20430,6417 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 12198,14310,6417 1 75193 -- MSL 405 ( 9E 185)
-'C 18051,24960,300 2 75206 -- MSL 406 ( 9E 198)
-'c 12198,19785,300 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18051,24960,300 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 12198,19785,300 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 18540,24960 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 18051,20130,300 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 14637,24960 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 12684,19785,300 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 14637,20130,6417 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 12684,14310,6417 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14148,24960 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,24960 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14148,20130 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9759,20130 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 21468,24960 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14148,19785 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 21468,24960 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14148,19785 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 22932,24960,300 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14637,19785,300 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16587,24960 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9759,19785 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16587,24960 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9759,19785 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13662,24960,300 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 9270,19785,300 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,24960 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10245,20130,300 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,20130,6330 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8781,16950,6006 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20979,24960,300 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14148,19785,300 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20979,26154,300 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14148,20160,300 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,24960 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 10245,19785 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,25020 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 10245,19140 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,20340 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,20130 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,20130 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,20130 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,20130 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,20340 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,20340 2 51752 -- MSL 1006 ( 6J 40)
-lq 14148,20130 2 161171 -- MSL 1017 (19U 147)
-rq 14148,20130 2 161172 -- MSL 1018 (19U 148)
-Bq 14148,3900,5100 1 161156 -- MSL 1019 (19U 132)
-u2003 24882,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 16587,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8295,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 24882,3630,300 0 161157 -- MSL 1028 (19U 133)
-vz 10245,19785 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 3 51794 -- MSL 1036 ( 6J 82)
-fi 14148,20130 2 60077 -- MSL 1040 ( 7J 173)
-fl 14148,20130 2 60078 -- MSL 1041 ( 7J 174)
-ff 15612,20130 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21468,20130 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21468,20130 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,19815,4365 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26346,20430,300 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,24900,300 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 12684,19110,4479 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13662,20430,6330 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 9270,14310,6006 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8295,25020 2 46301 -- MSL 1065 ( 5T 221)
-bq 8295,3900,5100 1 161154 -- MSL 1067 (19U 130)
-%0 33177,20430,300 2 161161 -- MSL 1068 (19U 137)
-a- 16587,18603 2 60154 -- MSL 1084 ( 7J 250)
-ab 16587,19110 2 75170 -- MSL 1086 ( 9E 162)
-a. 16587,19140 2 75263 -- MSL 1088 ( 9E 255)
-oe 22443,14310,300 0 161180 -- MSL 1090 (19U 156)
-OE 26346,20430,300 2 161164 -- MSL 1091 (19U 140)
-fo 6831,12450 0 161163 -- MSL 1092 (19U 139)
-fc 6831,12450 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 16101,20130 2 75171 -- MSL 1095 ( 9E 163)
-/l 9270,20025 2 75187 -- MSL 1096 ( 9E 179)
-a" 16587,19785 2 75197 -- MSL 1097 ( 9E 189)
-ho 16587,297,6417 1 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,24960 2 75150 -- MSL 1106 ( 9E 142)
-IJ 18051,20130,4488 3 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/AOB b/contrib/groff/font/devlj4/AOB
deleted file mode 100644
index a3b9b7ab674f..000000000000
--- a/contrib/groff/font/devlj4/AOB
+++ /dev/null
@@ -1,720 +0,0 @@
-# AntiqueOlv Bd
-name AOB
-spacewidth 8781
-pcltypeface 4168
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -1460
-P . -5363
-P , -5363
-V A -1949
-A V -1949
-T o -2438
-T c -1949
-T e -1949
-T d -1949
-T s -1460
-T a -1949
-T J -2924
-L T -2924
-L Y -3413
-Y o -3413
-Y e -2924
-Y a -2924
-Y J -2924
-A W -1460
-W A -1460
-T A -2438
-V o -1460
-V e -1460
-V a -1460
-Y A -2924
-F A -485
-F . -3902
-F , -3902
-A T -2438
-A Y -2924
-v . -2924
-v , -2924
-y . -3413
-y , -3413
-T . -3413
-T , -3413
-L W -974
-P A -974
-V J -2924
-V . -3413
-V , -3413
-Y . -3902
-Y , -3902
-W o -974
-W e -974
-W a -974
-W . -2438
-W , -2438
-r . -3413
-r , -3413
-w . -2924
-w , -2924
-Y u -974
-A v -1460
-A y -1460
-A w -1460
-o . -2438
-o , -2438
-p . -1949
-p , -1949
-e . -1460
-e , -1460
-b . -2438
-b , -2438
-O T -485
-O V -974
-O Y -1460
-O . -1949
-O , -1949
-L y -974
-P J -2924
-V y -485
-V u -485
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -485
-D V -974
-D Y -1460
-D . -1949
-D , -1949
-Y O -1460
-Y G -1460
-Y C -1460
-Y Q -1460
-c . -1460
-c , -1460
-O A -485
-O W -974
-R V -485
-R Y -974
-R W -485
-G T -485
-P o -485
-P g -485
-P e -485
-P a -485
-C . -485
-C , -485
-D A -485
-D W -974
-B Y -974
-B . -1460
-B , -1460
-F J -2924
-A O -485
-A G -485
-A C -485
-A U -485
-A Q -485
-W r -485
-W y -485
-W u -485
-W O -974
-W G -974
-W C -974
-W J -1949
-W Q -974
-J A -485
-J . -1949
-J , -1949
-U A -485
-U . -1949
-U , -1949
-Q A -485
-Q W -974
-f . -1460
-f , -1460
-T O -485
-T G -485
-T C -485
-T Q -485
-O X -485
-G V -974
-G Y -1460
-G W -974
-G . -1949
-G , -1949
-P V -485
-P Y -974
-C V -485
-C Y -974
-D X -485
-B V -485
-B X -485
-B A -485
-B W -485
-S . -1460
-S , -1460
-X o -485
-X e -485
-X y -485
-X O -485
-X G -485
-X C -485
-X Q -485
-A o -485
-A e -485
-Q X -485
-K o -485
-K e -485
-K y -485
-K w -485
-K O -485
-K G -485
-K C -485
-K Q -485
-o v -974
-o y -974
-o x -485
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-g . -485
-g , -485
-p v -974
-p y -974
-p x -485
-c v -974
-c y -974
-c w -974
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -974
-e y -974
-b v -974
-b y -974
-b w -974
-s . -974
-s , -974
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-x o -485
-x g -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-a v -974
-a y -974
-a w -974
-w o -974
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-R o -1460
-R O -485
-R G -485
-R C -485
-R Q -485
-G X -485
-G A -485
-P s -485
-P X -485
-P W -485
-C W -485
-V S -485
-S V -485
-S Y -974
-S X -485
-S A -485
-S W -485
-Y S -974
-X a -485
-X u -485
-X S -485
-A t -485
-A g -485
-A c -485
-A d -485
-A a -485
-A u -485
-A q -485
-A S -485
-W S -485
-K c -485
-K u -485
-K S -485
-t . -485
-t , -485
-h w -974
-h . -485
-h , -485
-n w -974
-n . -485
-n , -485
-m w -974
-m . -485
-m , -485
-l . -485
-l , -485
-i . -485
-i , -485
-p w -974
-c x -485
-v e -974
-v s -974
-e x -485
-e w -974
-z . -485
-z , -485
-d . -485
-d , -485
-s v -974
-s y -974
-s x -485
-s w -974
-y e -974
-y s -974
-x s -485
-x . -485
-x , -485
-a . -485
-a , -485
-w e -974
-w s -974
-j . -485
-j , -485
-u . -485
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-k . -485
-k , -485
-O Z -485
-O J -1460
-H . -485
-H , -485
-N . -485
-N , -485
-M . -485
-M , -485
-L . -485
-L , -485
-R e -1460
-R a -974
-R . -485
-R , -485
-G Z -485
-I . -485
-I , -485
-P O -485
-P G -485
-P C -485
-P Q -485
-E . -485
-E , -485
-Z o -1949
-Z e -1949
-Z d -1949
-Z s -485
-Z a -974
-Z O -485
-Z G -485
-Z C -485
-Z Q -485
-Z . -485
-Z , -485
-D Z -485
-D J -1460
-B J -974
-S J -974
-X . -485
-X , -485
-A s -485
-A . -485
-A , -485
-J J -1460
-U J -1460
-K a -485
-K . -485
-K , -485
-k s -485
-G J -1460
-A f -485
-A cq -485
-A ' -485
-Y hy -974
-Y - -974
-Y en -974
-Y em -974
-V hy -485
-V - -485
-V en -485
-V em -485
-W hy -485
-W - -485
-W en -485
-W em -485
-X hy -485
-X - -485
-X en -485
-X em -485
-A hy -485
-A - -485
-A en -485
-A em -485
-K hy -485
-K - -485
-K en -485
-K em -485
-hy X -485
-- X -485
-hy A -485
-- A -485
-en X -485
-en A -485
-em X -485
-charset
-! 9759,20205,450 2 161057 -- MSL 1 (19U 33)
-dq 12198,19755 2 161058 -- MSL 2 (19U 34)
-" "
-sh 17565,20730,3630 3 161059 -- MSL 3 (19U 35)
-# "
-Do 17565,22980,3855 3 161060 -- MSL 4 (19U 36)
-$ "
-% 30249,20505,450 2 161061 -- MSL 5 (19U 37)
-& 21468,20205,450 2 161062 -- MSL 6 (19U 38)
-cq 6831,19755 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,19755 2 161064 -- MSL 9 (19U 40)
-) 8781,19755 2 161065 -- MSL 10 (19U 41)
-* 17565,20205 2 161066 -- MSL 11 (19U 42)
-+ 30249,15450,600 0 161067 -- MSL 12 (19U 43)
-, 8781,4080,4710 1 161068 -- MSL 13 (19U 44)
-hy 8781,10965 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,4170,450 0 161070 -- MSL 15 (19U 46)
-sl 10734,20820,450 2 161071 -- MSL 16 (19U 47)
-/ "
-0 17565,20505,450 2 161072 -- MSL 17 (19U 48)
-1 17565,20055 2 161073 -- MSL 18 (19U 49)
-2 17565,20505 2 161074 -- MSL 19 (19U 50)
-3 17565,20055,450 2 161075 -- MSL 20 (19U 51)
-4 17565,20055 2 161076 -- MSL 21 (19U 52)
-5 17565,20055,450 2 161077 -- MSL 22 (19U 53)
-6 17565,20505,450 2 161078 -- MSL 23 (19U 54)
-7 17565,20055 2 161079 -- MSL 24 (19U 55)
-8 17565,20505,450 2 161080 -- MSL 25 (19U 56)
-9 17565,20505,450 2 161081 -- MSL 26 (19U 57)
-: 8781,15783,450 0 161082 -- MSL 27 (19U 58)
-; 8781,15783,4710 1 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 30249,12984 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 16101,20205,450 2 161087 -- MSL 32 (19U 63)
-at 30249,21057,2679 2 161088 -- MSL 33 (19U 64)
-@ "
-A 20004,19755 2 161089 -- MSL 34 (19U 65)
-B 18051,19755 2 161090 -- MSL 35 (19U 66)
-C 17076,20205,450 2 161091 -- MSL 36 (19U 67)
-D 19515,19755 2 161092 -- MSL 37 (19U 68)
-E 16101,19755 2 161093 -- MSL 38 (19U 69)
-F 16101,19755 2 161094 -- MSL 39 (19U 70)
-G 18540,20205,450 2 161095 -- MSL 40 (19U 71)
-H 19515,19755 2 161096 -- MSL 41 (19U 72)
-I 8295,19755 2 161097 -- MSL 42 (19U 73)
-J 13662,19755,450 2 161098 -- MSL 43 (19U 74)
-K 18540,19755 2 161099 -- MSL 44 (19U 75)
-L 14637,19755 2 161100 -- MSL 45 (19U 76)
-M 24396,19755 2 161101 -- MSL 46 (19U 77)
-N 20004,19755 2 161102 -- MSL 47 (19U 78)
-O 20004,20205,450 2 161103 -- MSL 48 (19U 79)
-P 18540,19755 2 161104 -- MSL 49 (19U 80)
-Q 20004,20205,3075 2 161105 -- MSL 50 (19U 81)
-R 18051,19755 2 161106 -- MSL 51 (19U 82)
-S 15612,20205,450 2 161107 -- MSL 52 (19U 83)
-T 17076,19755 2 161108 -- MSL 53 (19U 84)
-U 19029,19755,450 2 161109 -- MSL 54 (19U 85)
-V 19029,19755 2 161110 -- MSL 55 (19U 86)
-W 27321,19755 2 161111 -- MSL 56 (19U 87)
-X 19029,19755 2 161112 -- MSL 57 (19U 88)
-Y 19029,19755 2 161113 -- MSL 58 (19U 89)
-Z 17565,19755 2 161114 -- MSL 59 (19U 90)
-lB 8781,19755 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 10734,20820,450 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,19755 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 6831,19755 2 161169 -- MSL 66 (19U 145)
-` "
-a 17076,17205,450 0 161121 -- MSL 67 (19U 97)
-b 19029,20820,450 2 161122 -- MSL 68 (19U 98)
-c 15612,17205,450 0 161123 -- MSL 69 (19U 99)
-d 19029,20820,450 2 161124 -- MSL 70 (19U 100)
-e 17565,17205,450 0 161125 -- MSL 71 (19U 101)
-f 13662,20820 2 161126 -- MSL 72 (19U 102)
-g 19029,17205,3930 1 161127 -- MSL 73 (19U 103)
-h 19029,20820 2 161128 -- MSL 74 (19U 104)
-i 8781,21855 2 161129 -- MSL 75 (19U 105)
-j 8781,21855,3930 3 161130 -- MSL 76 (19U 106)
-k 17076,20820 2 161131 -- MSL 77 (19U 107)
-l 8295,20820 2 161132 -- MSL 78 (19U 108)
-m 27810,17205 0 161133 -- MSL 79 (19U 109)
-n 19029,17205 0 161134 -- MSL 80 (19U 110)
-o 18540,17205,450 0 161135 -- MSL 81 (19U 111)
-p 19029,17205,3930 1 161136 -- MSL 82 (19U 112)
-q 19029,17205,3930 1 161137 -- MSL 83 (19U 113)
-r 13662,17205 0 161138 -- MSL 84 (19U 114)
-s 14637,17205,450 0 161139 -- MSL 85 (19U 115)
-t 14148,20970,450 2 161140 -- MSL 86 (19U 116)
-u 18540,16755,450 0 161141 -- MSL 87 (19U 117)
-v 17565,16755 0 161142 -- MSL 88 (19U 118)
-w 26346,16755 0 161143 -- MSL 89 (19U 119)
-x 17565,16755 0 161144 -- MSL 90 (19U 120)
-y 17565,16755,3930 1 161145 -- MSL 91 (19U 121)
-z 15126,16755 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 20004,24930 2 161216 -- MSL 99 (19U 192)
-^A 20004,24930 2 161218 -- MSL 100 (19U 194)
-`E 16101,24930 2 161224 -- MSL 101 (19U 200)
-^E 16101,24930 2 161226 -- MSL 102 (19U 202)
-:E 16101,25050 2 161227 -- MSL 103 (19U 203)
-^I 8295,24930 2 161230 -- MSL 104 (19U 206)
-:I 8295,25050 2 161231 -- MSL 105 (19U 207)
-aa 17565,22125 2 161204 -- MSL 106 (19U 180)
-ga 17565,22125 2 161120 -- MSL 107 (19U 96)
-a^ 17565,22125 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 17565,22125 2 161192 -- MSL 109 (19U 168)
-~ 17565,22521 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,24930,450 2 161241 -- MSL 111 (19U 217)
-^U 19029,24930,450 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 19029,24930 2 161245 -- MSL 114 (19U 221)
-'y 17565,22125,3930 3 161277 -- MSL 115 (19U 253)
-de 17565,20505 2 161200 -- MSL 116 (19U 176)
-,C 17076,20205,5988 3 161223 -- MSL 117 (19U 199)
-,c 15612,17205,5988 1 161255 -- MSL 118 (19U 231)
-~N 20004,25161 2 161233 -- MSL 119 (19U 209)
-~n 19029,22521 2 161265 -- MSL 120 (19U 241)
-r! 9759,17115,3540 1 161185 -- MSL 121 (19U 161)
-r? 16101,17106,3549 1 161215 -- MSL 122 (19U 191)
-Cs 17565,15834 0 161188 -- MSL 123 (19U 164)
-Po 17565,20505 2 161187 -- MSL 124 (19U 163)
-Ye 17565,20055 2 161189 -- MSL 125 (19U 165)
-sc 17565,20205,3930 3 161191 -- MSL 126 (19U 167)
-Fn 17565,20820 2 161155 -- MSL 127 (19U 131)
-ct 17565,21603,1890 2 161186 -- MSL 128 (19U 162)
-^a 17076,22125,450 2 161250 -- MSL 129 (19U 226)
-^e 17565,22125,450 2 161258 -- MSL 130 (19U 234)
-^o 18540,22125,450 2 161268 -- MSL 131 (19U 244)
-^u 18540,22125,450 2 161275 -- MSL 132 (19U 251)
-'a 17076,22125,450 2 161249 -- MSL 133 (19U 225)
-'e 17565,22125,450 2 161257 -- MSL 134 (19U 233)
-'o 18540,22125,450 2 161267 -- MSL 135 (19U 243)
-'u 18540,22125,450 2 161274 -- MSL 136 (19U 250)
-`a 17076,22125,450 2 161248 -- MSL 137 (19U 224)
-`e 17565,22125,450 2 161256 -- MSL 138 (19U 232)
-`o 18540,22125,450 2 161266 -- MSL 139 (19U 242)
-`u 18540,22125,450 2 161273 -- MSL 140 (19U 249)
-:a 17076,22125,450 2 161252 -- MSL 141 (19U 228)
-:e 17565,22125,450 2 161259 -- MSL 142 (19U 235)
-:o 18540,22125,450 2 161270 -- MSL 143 (19U 246)
-:u 18540,22125,450 2 161276 -- MSL 144 (19U 252)
-oA 20004,27354 2 161221 -- MSL 145 (19U 197)
-^i 8781,22125 2 161262 -- MSL 146 (19U 238)
-/O 20004,20205,450 2 161240 -- MSL 147 (19U 216)
-AE 30249,19755 2 161222 -- MSL 148 (19U 198)
-oa 17076,24825,450 2 161253 -- MSL 149 (19U 229)
-'i 8781,22125 2 161261 -- MSL 150 (19U 237)
-/o 18540,17205,450 0 161272 -- MSL 151 (19U 248)
-ae 27321,17205,450 0 161254 -- MSL 152 (19U 230)
-:A 20004,25050 2 161220 -- MSL 153 (19U 196)
-`i 8781,22125 2 161260 -- MSL 154 (19U 236)
-:O 20004,25050,450 2 161238 -- MSL 155 (19U 214)
-:U 19029,25050,450 2 161244 -- MSL 156 (19U 220)
-'E 16101,24930 2 161225 -- MSL 157 (19U 201)
-:i 8781,22125 2 161263 -- MSL 158 (19U 239)
-ss 18540,20820,450 2 161247 -- MSL 159 (19U 223)
-^O 20004,24930,450 2 161236 -- MSL 160 (19U 212)
-'A 20004,24930 2 161217 -- MSL 161 (19U 193)
-~A 20004,25161 2 161219 -- MSL 162 (19U 195)
-~a 17076,22521,450 2 161251 -- MSL 163 (19U 227)
--D 19515,19755 2 161232 -- MSL 164 (19U 208)
-Sd 18540,21666,450 2 161264 -- MSL 165 (19U 240)
-'I 8295,24930 2 161229 -- MSL 166 (19U 205)
-`I 8295,24930 2 161228 -- MSL 167 (19U 204)
-'O 20004,24930,450 2 161235 -- MSL 168 (19U 211)
-`O 20004,24930,450 2 161234 -- MSL 169 (19U 210)
-~O 20004,25161,450 2 161237 -- MSL 170 (19U 213)
-~o 18540,22521,450 2 161269 -- MSL 171 (19U 245)
-vS 15612,24930,450 2 161162 -- MSL 172 (19U 138)
-vs 14637,22125,450 2 161178 -- MSL 173 (19U 154)
-'U 19029,24930,450 2 161242 -- MSL 174 (19U 218)
-:Y 19029,25050 2 161183 -- MSL 175 (19U 159)
-:y 17565,22125,3930 3 161279 -- MSL 176 (19U 255)
-TP 18540,19755 2 161246 -- MSL 177 (19U 222)
-Tp 19029,20820,3930 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680 1 161205 -- MSL 180 (19U 181)
-ps 17565,19635,4200 1 161206 -- MSL 181 (19U 182)
-34 30249,20610,555 2 161214 -- MSL 182 (19U 190)
-\- 30249,9375 0 60096 -- MSL 183 ( 7J 192)
-14 30249,20610,555 2 161212 -- MSL 184 (19U 188)
-12 30249,20610,555 2 161213 -- MSL 185 (19U 189)
-Of 14637,20505 2 161194 -- MSL 186 (19U 170)
-Om 14637,20505 2 161210 -- MSL 187 (19U 186)
-Fo 15612,14025 0 161195 -- MSL 188 (19U 171)
-Fc 15612,14025 0 161211 -- MSL 190 (19U 187)
-t+- 30249,15450,5895 1 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 1 161190 -- MSL 192 (19U 166)
-co 13173,19635 0 161193 -- MSL 193 (19U 169)
-tno 30249,11274 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,10965 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 0 161198 -- MSL 196 (19U 174)
-S2 11709,20385 2 161202 -- MSL 197 (19U 178)
-S3 11709,20055 2 161203 -- MSL 198 (19U 179)
-ac 17565,507,5988 1 161208 -- MSL 199 (19U 184)
-S1 11709,20055 2 161209 -- MSL 200 (19U 185)
-tmu 30249,15225,585 0 161239 -- MSL 201 (19U 215)
-tdi 30249,15885,1035 0 161271 -- MSL 202 (19U 247)
-u203C 18051,20205,450 2 87315 -- MSL 221 (10U 19)
-u20A7 32688,20970,450 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,12759 0 161207 -- MSL 302 (19U 183)
-u013F 14637,19755 2 51943 -- MSL 306 ( 6J 231)
-u0140 14148,20820 2 51959 -- MSL 307 ( 6J 247)
-u2113 17565,18045,765 0 60122 -- MSL 308 ( 7J 218)
-u0149 24882,19755 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,20055 2 60101 -- MSL 310 ( 7J 197)
-sd 17565,20055 2 60102 -- MSL 311 ( 7J 198)
-dg 17565,20205,4095 3 161158 -- MSL 312 (19U 134)
-tm 16101,17850 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 17565,22125 2 75169 -- MSL 315 ( 9E 161)
-ao 17565,24825 2 60152 -- MSL 316 ( 7J 248)
-f/ 5367,20610,555 2 60109 -- MSL 324 ( 7J 205)
-em 30249,10440 0 161175 -- MSL 325 (19U 151)
-en 17565,10440 0 161174 -- MSL 326 (19U 150)
-dd 17565,20205,4095 3 161159 -- MSL 327 (19U 135)
-.i 8781,16755 0 46333 -- MSL 328 ( 5T 253)
-aq 6831,19755 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 13662,20385 2 87548 -- MSL 332 (10U 252)
-u0111 19029,20820,450 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 20004,25005 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 17076,22200,450 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 20004,19755,4155 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 17076,17205,4155 1 75193 -- MSL 405 ( 9E 185)
-'C 17076,24930,450 2 75206 -- MSL 406 ( 9E 198)
-'c 15612,22125,450 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17076,24930,450 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15612,22125,450 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19515,24930 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 22443,22290,450 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16101,24930 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 17565,22125,450 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16101,19755,4155 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 17565,17205,4155 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14637,24930 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 8295,25530 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14637,19755 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 11709,22290 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20004,24930 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 19029,22125 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20004,24930 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 19029,22125 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20004,24930,450 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 18540,22125,450 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 18051,24930 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 13662,22125 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 18051,24930 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 13662,22125 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 15612,24930,450 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 14637,22125,450 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 17076,24930 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 14148,22290,450 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 17076,19755,5988 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 14148,20970,5988 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,24930,450 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 18540,22125,450 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,27354,450 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 18540,24825,450 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,24930 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 15126,22125 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,25515 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 15126,22590 2 75199 -- MSL 485 ( 9E 191)
-u2070 11709,20385 2 51753 -- MSL 1000 ( 6J 41)
-u2074 11709,20055 2 51748 -- MSL 1001 ( 6J 36)
-u2075 11709,20055 2 51749 -- MSL 1002 ( 6J 37)
-u2076 11709,20385 2 51806 -- MSL 1003 ( 6J 94)
-u2077 11709,20055 2 51750 -- MSL 1004 ( 6J 38)
-u2078 11709,20385 2 51754 -- MSL 1005 ( 6J 42)
-u2079 11709,20385 2 51752 -- MSL 1006 ( 6J 40)
-lq 11220,19755 2 161171 -- MSL 1017 (19U 147)
-rq 11220,19755 2 161172 -- MSL 1018 (19U 148)
-Bq 11220,4038,3672 1 161156 -- MSL 1019 (19U 132)
-u2003 30249,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 17565,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 30249,3975 0 161157 -- MSL 1028 (19U 133)
-vz 15126,22125 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 1 51794 -- MSL 1036 ( 6J 82)
-fi 21954,21855 2 60077 -- MSL 1040 ( 7J 173)
-fl 21954,20820 2 60078 -- MSL 1041 ( 7J 174)
-ff 25371,20820 2 51883 -- MSL 1042 ( 6J 171)
-Fi 33177,21855 2 51884 -- MSL 1043 ( 6J 172)
-Fl 33177,20820 2 51885 -- MSL 1044 ( 6J 173)
-ij 17565,21855,3930 3 60134 -- MSL 1047 ( 7J 230)
-u2105 30249,20385,330 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 18540,25005,450 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 19029,22200,3930 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 15612,20205,5988 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 14637,17205,5988 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8295,25515 2 46301 -- MSL 1065 ( 5T 221)
-bq 6831,4038,3672 1 161154 -- MSL 1067 (19U 130)
-%0 34152,20505,450 2 161161 -- MSL 1068 (19U 137)
-a- 17565,21675 2 60154 -- MSL 1084 ( 7J 250)
-ab 17565,22200 2 75170 -- MSL 1086 ( 9E 162)
-a. 17565,22590 2 75263 -- MSL 1088 ( 9E 255)
-oe 28785,17205,450 0 161180 -- MSL 1090 (19U 156)
-OE 28785,20205,450 2 161164 -- MSL 1091 (19U 140)
-fo 9270,14025 0 161163 -- MSL 1092 (19U 139)
-fc 9270,14025 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 14148,19755 2 75171 -- MSL 1095 ( 9E 163)
-/l 9270,20820 2 75187 -- MSL 1096 ( 9E 179)
-a" 17565,22125 2 75197 -- MSL 1097 ( 9E 189)
-ho 17565,1095,4155 1 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,24930 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21954,19755,450 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/AOI b/contrib/groff/font/devlj4/AOI
deleted file mode 100644
index 84545ac0aa1d..000000000000
--- a/contrib/groff/font/devlj4/AOI
+++ /dev/null
@@ -1,782 +0,0 @@
-# AntiqueOlv It
-name AOI
-spacewidth 7806
-slant 11.150000
-pcltypeface 4168
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -4877
-P , -4877
-V A -2438
-A V -1949
-T o -2924
-T r -1460
-T c -2924
-T e -2924
-T d -2924
-T s -2438
-T y -1460
-T a -2924
-T w -1460
-T u -1460
-T J -2924
-L T -2924
-L Y -2924
-Y o -2924
-Y e -2924
-Y a -2438
-Y J -2924
-A W -1460
-W A -1460
-T A -2924
-V o -1460
-V e -1460
-V a -1460
-Y A -2924
-F A -1460
-F . -3902
-F , -3902
-A T -2438
-A Y -2438
-v . -2438
-v , -2438
-y . -2924
-y , -2924
-T . -3413
-T , -3413
-L W -1460
-P A -974
-V J -2924
-V . -3413
-V , -3413
-Y . -3413
-Y , -3413
-W o -974
-W e -974
-W a -974
-W . -1949
-W , -1949
-r . -1949
-r , -1949
-w . -2438
-w , -2438
-Y u -974
-A v -1460
-A y -1460
-A w -974
-o . -2438
-o , -2438
-p . -2438
-p , -2438
-e . -1460
-e , -1460
-b . -2438
-b , -2438
-O T -1460
-O V -974
-O Y -1460
-O . -2438
-O , -2438
-L y -1949
-L O -2438
-L G -2438
-L C -2438
-L Q -2438
-P J -2924
-V y -974
-V u -974
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -1460
-D V -974
-D Y -1460
-D . -2438
-D , -2438
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -485
-F e -485
-F a -485
-c . -1460
-c , -1460
-O A -974
-O W -485
-L U -1949
-R T -974
-R V -974
-R Y -974
-R W -485
-G T -1460
-C A -485
-C . -974
-C , -974
-D A -974
-D W -485
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-F J -2924
-A O -974
-A G -974
-A C -974
-A U -974
-A Q -974
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -1460
-W Q -485
-J A -485
-J . -974
-J , -974
-U A -974
-U . -2438
-U , -2438
-Q W -485
-f . -2438
-f , -2438
-T O -1460
-T G -1460
-T C -1460
-T Q -1460
-O X -974
-L o -2924
-L e -2438
-L q -1949
-G V -974
-G Y -1460
-G W -485
-G . -1949
-G , -1949
-P T -1460
-P V -974
-P Y -1460
-C T -974
-C V -974
-C Y -974
-D X -974
-B V -974
-B X -974
-B A -974
-B W -485
-S . -1949
-S , -1949
-X o -974
-X e -974
-X y -974
-X O -974
-X G -974
-X C -974
-X Q -974
-A o -974
-A e -974
-K o -1460
-K e -1460
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o x -974
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-r g -485
-g . -485
-g , -485
-p v -485
-p y -485
-p x -974
-c v -485
-c y -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -974
-b y -974
-b w -485
-s . -974
-s , -974
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -485
-a y -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -1460
-L a -974
-L S -1460
-G X -974
-G A -974
-P X -974
-P W -485
-C X -485
-C W -485
-C J -485
-V S -974
-S T -1460
-S V -974
-S Y -1460
-S X -974
-S A -974
-S W -485
-Y S -974
-X a -974
-X u -974
-X S -974
-A t -974
-A c -974
-A d -974
-A a -974
-A u -974
-A q -974
-A S -974
-W S -485
-K c -1460
-K u -974
-K S -974
-t . -485
-t , -485
-h . -485
-h , -485
-n . -485
-n , -485
-m . -485
-m , -485
-l . -485
-l , -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-i . -485
-i , -485
-c x -974
-v e -485
-v s -485
-e x -974
-z . -485
-z , -485
-d . -485
-d , -485
-b f -485
-s v -485
-s y -485
-s x -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-x . -485
-x , -485
-a . -485
-a , -485
-w e -485
-w s -485
-j . -485
-j , -485
-u . -485
-k o -974
-k c -974
-k e -974
-k d -974
-k a -974
-k q -974
-k . -485
-k , -485
-O J -1949
-H . -485
-H , -485
-N . -485
-N , -485
-M . -485
-M , -485
-L . -485
-L , -485
-R . -485
-R , -485
-I . -485
-I , -485
-E . -485
-E , -485
-Z o -1460
-Z e -1460
-Z d -1460
-Z s -485
-Z a -974
-Z . -485
-Z , -485
-D J -1949
-B J -974
-S J -1460
-X . -485
-X , -485
-A s -485
-A . -485
-A , -485
-J J -485
-U J -1949
-K a -974
-K . -485
-K , -485
-o z -974
-r s -485
-p z -974
-c z -974
-v f -485
-e z -974
-z o -974
-z c -974
-z e -974
-z d -974
-z s -485
-z a -974
-z q -974
-b t -485
-b g -485
-b z -1460
-b j -485
-s z -485
-y f -485
-w f -485
-k s -485
-G J -1460
-L cq -3413
-L ' -3413
-T hy -1460
-T - -1460
-T en -1460
-T em -1460
-A cq -1949
-A ' -1949
-hy T -1460
-- T -1460
-en T -1460
-em T -1460
-Y hy -974
-Y - -974
-Y en -974
-Y em -974
-p cq -1949
-p ' -1949
-c cq -974
-c ' -974
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-a cq -1949
-a ' -1949
-V hy -974
-V - -974
-V en -974
-V em -974
-h cq -1949
-h ' -1949
-n cq -1949
-n ' -1949
-m cq -1949
-m ' -1949
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -1949
-' d -1949
-s cq -974
-s ' -974
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -974
-X - -974
-X en -974
-X em -974
-A hy -974
-A - -974
-A en -974
-A em -974
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -974
-' s -974
-hy X -974
-- X -974
-hy A -974
-- A -974
-en X -974
-en A -974
-em X -974
-b f -485
-charset
-! 7806,20160,405,1176,798,880 2 161057 -- MSL 1 (19U 33)
-dq 11709,19755,0,504,-2438,504 2 161058 -- MSL 2 (19U 34)
-" "
-sh 15612,20460,4296,0,-935 3 161059 -- MSL 3 (19U 35)
-# "
-Do 15612,22065,2295,1062,258,880 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26346,20460,405,0,-1733 2 161061 -- MSL 5 (19U 37)
-& 17565,20160,405,414,381,414 2 161062 -- MSL 6 (19U 38)
-cq 7806,19755,0,744,-1850,744 2 161170 -- MSL 8 (19U 146)
-' "
-( 7806,19755,405,3360,-269,880 2 161064 -- MSL 9 (19U 40)
-) 7806,19755,405,618,2472,618 2 161065 -- MSL 10 (19U 41)
-* 15612,20160,0,0,-2879 2 161066 -- MSL 11 (19U 42)
-+ 26346,15255,585,0,-3893 0 161067 -- MSL 12 (19U 43)
-, 7806,2910,4320,0,2160 1 161068 -- MSL 13 (19U 44)
-hy 7806,10230,0,654,468,654 0 161069 -- MSL 14 (19U 45)
-- "
-. 7806,2925,405,0,684 0 161070 -- MSL 15 (19U 46)
-sl 7806,20820,405,4203,3111,880 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15612,20460,405,1371,450,880 2 161072 -- MSL 17 (19U 48)
-1 15612,20055,0,0,-878 2 161073 -- MSL 18 (19U 49)
-2 15612,20460,0,1173,1140,880 2 161074 -- MSL 19 (19U 50)
-3 15612,20055,405,1743,621,880 2 161075 -- MSL 20 (19U 51)
-4 15612,20055,0,1101,1074,880 2 161076 -- MSL 21 (19U 52)
-5 15612,20055,405,1530,453,880 2 161077 -- MSL 22 (19U 53)
-6 15612,20460,405,1863,-5,880 2 161078 -- MSL 23 (19U 54)
-7 15612,20055,0,2184,-212,880 2 161079 -- MSL 24 (19U 55)
-8 15612,20460,405,1362,708,880 2 161080 -- MSL 25 (19U 56)
-9 15612,20460,405,1032,828,880 2 161081 -- MSL 26 (19U 57)
-: 7806,13515,405,0,684 0 161082 -- MSL 27 (19U 58)
-; 7806,13515,4320,0,2160 1 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 26346,10800,0,0,-3920 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 14148,20160,405,1497,-1322,880 2 161087 -- MSL 32 (19U 63)
-at 26346,21030,2745,0,-1082 2 161088 -- MSL 33 (19U 64)
-@ "
-A 18051,19755,0,0,2478 2 161089 -- MSL 34 (19U 65)
-B 16587,19755,0,1230,765,880 2 161090 -- MSL 35 (19U 66)
-C 16101,20160,405,1941,-35,880 2 161091 -- MSL 36 (19U 67)
-D 19029,19755,0,516,657,516 2 161092 -- MSL 37 (19U 68)
-E 15612,19755,0,1971,858,880 2 161093 -- MSL 38 (19U 69)
-F 15126,19755,0,2244,807,880 2 161094 -- MSL 39 (19U 70)
-G 18051,20160,405,1218,-143,880 2 161095 -- MSL 40 (19U 71)
-H 19515,19755,0,1179,558,880 2 161096 -- MSL 41 (19U 72)
-I 6831,19755,0,1557,909,880 2 161097 -- MSL 42 (19U 73)
-J 12198,19755,405,1518,2154,880 2 161098 -- MSL 43 (19U 74)
-K 16101,19755,0,3612,717,880 2 161099 -- MSL 44 (19U 75)
-L 12684,19755,0,0,783 2 161100 -- MSL 45 (19U 76)
-M 22932,19755,0,1287,729,880 2 161101 -- MSL 46 (19U 77)
-N 19515,19755,0,1344,735,880 2 161102 -- MSL 47 (19U 78)
-O 19029,20160,405,732,-38,732 2 161103 -- MSL 48 (19U 79)
-P 16587,19755,0,1425,699,880 2 161104 -- MSL 49 (19U 80)
-Q 19029,20160,993,849,-242,849 2 161105 -- MSL 50 (19U 81)
-R 16101,19755,0,1494,744,880 2 161106 -- MSL 51 (19U 82)
-S 14637,20160,405,1374,888,880 2 161107 -- MSL 52 (19U 83)
-T 14637,19755,0,3165,-824,880 2 161108 -- MSL 53 (19U 84)
-U 18540,19755,405,1449,-452,880 2 161109 -- MSL 54 (19U 85)
-V 17076,19755,0,2931,-1406,880 2 161110 -- MSL 55 (19U 86)
-W 25371,19755,0,3333,-1340,880 2 161111 -- MSL 56 (19U 87)
-X 16587,19755,0,3177,2418,880 2 161112 -- MSL 57 (19U 88)
-Y 16587,19755,0,3216,-1295,880 2 161113 -- MSL 58 (19U 89)
-Z 16101,19755,0,2199,1347,880 2 161114 -- MSL 59 (19U 90)
-lB 7806,19755,405,2646,699,880 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 7806,20820,405,0,-1670 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7806,19755,405,1341,2004,880 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,880 1 161119 -- MSL 64 (19U 95)
-oq 7806,19755,0,1062,-2168,880 2 161169 -- MSL 66 (19U 145)
-` "
-a 16101,17160,405,0,621 0 161121 -- MSL 67 (19U 97)
-b 18051,20820,405,0,735 2 161122 -- MSL 68 (19U 98)
-c 15126,17160,405,1257,114,880 0 161123 -- MSL 69 (19U 99)
-d 18051,20820,405,1623,207,880 2 161124 -- MSL 70 (19U 100)
-e 16587,17160,405,546,-5,546 0 161125 -- MSL 71 (19U 101)
-f 11220,20820,0,3024,114,880 2 161126 -- MSL 72 (19U 102)
-g 18051,17160,3930,654,102,654 1 161127 -- MSL 73 (19U 103)
-h 18051,20820,0,0,573 2 161128 -- MSL 74 (19U 104)
-i 6831,21105,0,2052,918,880 2 161129 -- MSL 75 (19U 105)
-j 7317,21105,3930,1986,4662,880 3 161130 -- MSL 76 (19U 106)
-k 14637,20820,0,2835,738,880 2 161131 -- MSL 77 (19U 107)
-l 6831,20820,0,1794,891,880 2 161132 -- MSL 78 (19U 108)
-m 26835,17160,0,0,735 0 161133 -- MSL 79 (19U 109)
-n 18051,17160,0,0,567 0 161134 -- MSL 80 (19U 110)
-o 17565,17160,405,90,-29,90 0 161135 -- MSL 81 (19U 111)
-p 18051,17160,3930,51,1440,51 1 161136 -- MSL 82 (19U 112)
-q 18051,17160,3930,855,216,855 1 161137 -- MSL 83 (19U 113)
-r 11220,17160,0,2286,816,880 0 161138 -- MSL 84 (19U 114)
-s 12684,17160,405,1206,1044,880 0 161139 -- MSL 85 (19U 115)
-t 12198,20985,405,2229,-524,880 2 161140 -- MSL 86 (19U 116)
-u 18051,16755,405,603,-236,603 0 161141 -- MSL 87 (19U 117)
-v 16101,16755,0,1950,-617,880 0 161142 -- MSL 88 (19U 118)
-w 24396,16755,0,1749,-734,880 0 161143 -- MSL 89 (19U 119)
-x 15126,16755,0,2667,2142,880 0 161144 -- MSL 90 (19U 120)
-y 15612,16755,3930,2085,-377,880 1 161145 -- MSL 91 (19U 121)
-z 13662,16755,0,1953,1530,880 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075,2580,-1004,880 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075,0,3153 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 18051,25005,0,0,2478 2 161216 -- MSL 99 (19U 192)
-^A 18051,25005,0,0,2478 2 161218 -- MSL 100 (19U 194)
-`E 15612,25005,0,1971,858,880 2 161224 -- MSL 101 (19U 200)
-^E 15612,25005,0,1971,858,880 2 161226 -- MSL 102 (19U 202)
-:E 15612,24645,0,1971,858,880 2 161227 -- MSL 103 (19U 203)
-^I 6831,25005,0,4425,909,880 2 161230 -- MSL 104 (19U 206)
-:I 6831,24645,0,4878,909,880 2 161231 -- MSL 105 (19U 207)
-aa 15612,22080,0,2073,-6260,880 2 161204 -- MSL 106 (19U 180)
-ga 15612,22080,0,0,-3053 2 161120 -- MSL 107 (19U 96)
-a^ 15612,22080,0,0,-4679 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15612,21795,0,0,-4673 2 161192 -- MSL 109 (19U 168)
-~ 15612,21819,0,1443,-2549,880 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 18540,25005,405,1449,-452,880 2 161241 -- MSL 111 (19U 217)
-^U 18540,25005,405,1449,-452,880 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,880 2 161199 -- MSL 113 (19U 175)
-'Y 16587,25005,0,3216,-1295,880 2 161245 -- MSL 114 (19U 221)
-'y 15612,22080,3930,2085,-377,880 3 161277 -- MSL 115 (19U 253)
-de 15612,20460,0,0,-2747 2 161200 -- MSL 116 (19U 176)
-,C 16101,20160,6285,1941,-35,880 3 161223 -- MSL 117 (19U 199)
-,c 15126,17160,6285,1257,114,880 1 161255 -- MSL 118 (19U 231)
-~N 19515,24744,0,1344,735,880 2 161233 -- MSL 119 (19U 209)
-~n 18051,21819,0,222,567,222 2 161265 -- MSL 120 (19U 241)
-r! 7806,17157,3408,714,1260,714 0 161185 -- MSL 121 (19U 161)
-r? 14148,17175,3390,0,1623 0 161215 -- MSL 122 (19U 191)
-Cs 15612,15684,0,96,-527,96 0 161188 -- MSL 123 (19U 164)
-Po 15612,20460,0,2118,1011,880 2 161187 -- MSL 124 (19U 163)
-Ye 15612,20055,0,3255,-998,880 2 161189 -- MSL 125 (19U 165)
-sc 15612,20160,4095,0,-1919 3 161191 -- MSL 126 (19U 167)
-Fn 15612,20820,0,1578,-2126,880 2 161155 -- MSL 127 (19U 131)
-ct 15612,20547,498,1389,-539,880 2 161186 -- MSL 128 (19U 162)
-^a 16101,22080,405,0,621 2 161250 -- MSL 129 (19U 226)
-^e 16587,22080,405,546,-5,546 2 161258 -- MSL 130 (19U 234)
-^o 17565,22080,405,90,-29,90 2 161268 -- MSL 131 (19U 244)
-^u 18051,22080,405,603,-236,603 2 161275 -- MSL 132 (19U 251)
-'a 16101,22080,405,1827,621,880 2 161249 -- MSL 133 (19U 225)
-'e 16587,22080,405,1584,-5,880 2 161257 -- MSL 134 (19U 233)
-'o 17565,22080,405,1095,-29,880 2 161267 -- MSL 135 (19U 243)
-'u 18051,22080,405,852,-236,852 2 161274 -- MSL 136 (19U 250)
-`a 16101,22080,405,0,621 2 161248 -- MSL 137 (19U 224)
-`e 16587,22080,405,546,-5,546 2 161256 -- MSL 138 (19U 232)
-`o 17565,22080,405,90,-29,90 2 161266 -- MSL 139 (19U 242)
-`u 18051,22080,405,603,-236,603 2 161273 -- MSL 140 (19U 249)
-:a 16101,21795,405,0,621 2 161252 -- MSL 141 (19U 228)
-:e 16587,21795,405,546,-5,546 2 161259 -- MSL 142 (19U 235)
-:o 17565,21795,405,90,-29,90 2 161270 -- MSL 143 (19U 246)
-:u 18051,21795,405,603,-236,603 2 161276 -- MSL 144 (19U 252)
-oA 18051,26850,0,0,2478 2 161221 -- MSL 145 (19U 197)
-^i 6831,22080,0,3831,921,880 2 161262 -- MSL 146 (19U 238)
-/O 19029,20205,450,2472,1920,880 2 161240 -- MSL 147 (19U 216)
-AE 28299,19755,0,2715,2868,880 2 161222 -- MSL 148 (19U 198)
-oa 16101,24390,405,0,621 2 161253 -- MSL 149 (19U 229)
-'i 6831,22080,0,6462,921,880 2 161261 -- MSL 150 (19U 237)
-/o 17565,17232,474,1710,1614,880 0 161272 -- MSL 151 (19U 248)
-ae 25857,17160,405,591,780,591 0 161254 -- MSL 152 (19U 230)
-:A 18051,24645,0,0,2478 2 161220 -- MSL 153 (19U 196)
-`i 6831,22080,0,1335,1338,880 2 161260 -- MSL 154 (19U 236)
-:O 19029,24645,405,732,-38,732 2 161238 -- MSL 155 (19U 214)
-:U 18540,24645,405,1449,-452,880 2 161244 -- MSL 156 (19U 220)
-'E 15612,25005,0,2739,858,880 2 161225 -- MSL 157 (19U 201)
-:i 6831,21795,0,4275,921,880 2 161263 -- MSL 158 (19U 239)
-ss 16101,20820,405,57,780,57 2 161247 -- MSL 159 (19U 223)
-^O 19029,25005,405,732,-38,732 2 161236 -- MSL 160 (19U 212)
-'A 18051,25005,0,1518,2478,880 2 161217 -- MSL 161 (19U 193)
-~A 18051,24744,0,1263,2478,880 2 161219 -- MSL 162 (19U 195)
-~a 16101,21819,405,1197,621,880 2 161251 -- MSL 163 (19U 227)
--D 19029,19755,0,516,690,516 2 161232 -- MSL 164 (19U 208)
-Sd 17565,21426,405,66,-35,66 2 161264 -- MSL 165 (19U 240)
-'I 6831,25005,0,7128,909,880 2 161229 -- MSL 166 (19U 205)
-`I 6831,25005,0,2073,909,880 2 161228 -- MSL 167 (19U 204)
-'O 19029,25005,405,1029,-38,880 2 161235 -- MSL 168 (19U 211)
-`O 19029,25005,405,732,-38,732 2 161234 -- MSL 169 (19U 210)
-~O 19029,24744,405,774,-38,774 2 161237 -- MSL 170 (19U 213)
-~o 17565,21819,405,465,-29,465 2 161269 -- MSL 171 (19U 245)
-vS 14637,25005,405,1374,888,880 2 161162 -- MSL 172 (19U 138)
-vs 12684,22080,405,1596,1044,880 2 161178 -- MSL 173 (19U 154)
-'U 18540,25005,405,1449,-452,880 2 161242 -- MSL 174 (19U 218)
-:Y 16587,24645,0,3216,-1295,880 2 161183 -- MSL 175 (19U 159)
-:y 15612,21795,3930,2085,-377,880 3 161279 -- MSL 176 (19U 255)
-TP 16587,19755,0,675,753,675 2 161246 -- MSL 177 (19U 222)
-Tp 18051,20820,3930,51,1440,51 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350,1122,2931,880 1 161205 -- MSL 180 (19U 181)
-ps 15612,19635,4200,0,-1343 3 161206 -- MSL 181 (19U 182)
-34 26346,20610,555,0,-1805 2 161214 -- MSL 182 (19U 190)
-\- 26346,8295,0,0,-3890 0 60096 -- MSL 183 ( 7J 192)
-14 26346,20610,555,0,-1754 2 161212 -- MSL 184 (19U 188)
-12 26346,20610,555,0,-1997 2 161213 -- MSL 185 (19U 189)
-Of 15612,20460,0,0,-2657 2 161194 -- MSL 186 (19U 170)
-Om 15612,20460,0,0,-2450 2 161210 -- MSL 187 (19U 186)
-Fo 13662,14145,0,2082,-44,880 0 161195 -- MSL 188 (19U 171)
-Fc 13662,14145,0,267,1770,267 0 161211 -- MSL 190 (19U 187)
-t+- 26346,15255,3900,0,-3905 1 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,3903,-2111,880 2 161193 -- MSL 193 (19U 169)
-tno 26346,11679,0,0,-3983 0 161196 -- MSL 194 (19U 172)
-u00AD 7806,10230,0,654,468,654 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,3903,-2111,880 2 161198 -- MSL 196 (19U 174)
-S2 10245,20385,0,2097,-224,880 2 161202 -- MSL 197 (19U 178)
-S3 10245,20055,0,2064,-185,880 2 161203 -- MSL 198 (19U 179)
-ac 15612,375,6285,0,-2348 1 161208 -- MSL 199 (19U 184)
-S1 10245,20055,0,0,-494 2 161209 -- MSL 200 (19U 185)
-tmu 26346,15189,579,0,-3956 0 161239 -- MSL 201 (19U 215)
-tdi 26346,12780,0,0,-3893 0 161271 -- MSL 202 (19U 247)
-u203C 14148,20160,405,1176,798,880 2 87315 -- MSL 221 (10U 19)
-u20A7 28785,20985,405,1929,999,880 2 60121 -- MSL 232 ( 7J 217)
-pc 7806,11760,0,0,-1130 0 161207 -- MSL 302 (19U 183)
-u013F 12684,19755,0,372,783,372 2 51943 -- MSL 306 ( 6J 231)
-u0140 8295,20820,0,2676,891,880 2 51959 -- MSL 307 ( 6J 247)
-u2113 15612,18150,297,0,-1958 0 60122 -- MSL 308 ( 7J 218)
-u0149 21468,19755,0,0,99 2 51951 -- MSL 309 ( 6J 239)
-fm 7806,20055,0,1680,-2321,880 2 60101 -- MSL 310 ( 7J 197)
-sd 15612,20055,0,0,-2321 2 60102 -- MSL 311 ( 7J 198)
-dg 15612,20160,4095,0,-1631 3 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,1443,-1979,880 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,880 1 60095 -- MSL 314 ( 7J 191)
-ah 15612,22080,0,132,-5369,132 2 75169 -- MSL 315 ( 9E 161)
-ao 15612,24390,0,0,-6086 2 60152 -- MSL 316 ( 7J 248)
-f/ 4392,20610,555,7662,7350,880 2 60109 -- MSL 324 ( 7J 205)
-em 26346,9840,0,462,330,462 0 161175 -- MSL 325 (19U 151)
-en 15612,9840,0,528,336,528 0 161174 -- MSL 326 (19U 150)
-dd 15612,20160,4095,0,-1610 3 161159 -- MSL 327 (19U 135)
-.i 6831,16755,0,975,921,880 0 46333 -- MSL 328 ( 5T 253)
-aq 7806,19755,0,672,-2603,672 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 11220,20385,0,1926,150,880 2 87548 -- MSL 332 (10U 252)
-u0111 18051,20820,405,2829,210,880 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 18051,25155,0,0,2478 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 16101,22230,405,0,621 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 18051,19755,3990,0,2478 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 16101,17160,3990,0,621 1 75193 -- MSL 405 ( 9E 185)
-'C 16101,25005,405,2718,-35,880 2 75206 -- MSL 406 ( 9E 198)
-'c 15126,22080,405,2466,114,880 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 16101,25005,405,1941,-35,880 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15126,22080,405,1257,114,880 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,25005,0,516,657,516 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 19515,22290,405,4779,207,880 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15612,25005,0,1971,858,880 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 16587,22080,405,546,-5,546 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15612,19755,3990,1971,858,880 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 16587,17160,3990,546,-5,546 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 12684,25005,0,2403,783,880 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6831,25605,0,7578,891,880 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 12684,19755,0,1110,783,880 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,22290,0,4533,891,880 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19515,25005,0,1344,735,880 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 18051,22080,0,492,567,492 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19515,25005,0,1344,735,880 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 18051,22080,0,0,567 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 19029,25005,405,3225,-38,880 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 17565,22080,405,3765,-29,880 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16101,25005,0,2493,744,880 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 11220,22080,0,4269,816,880 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16101,25005,0,1494,744,880 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 11220,22080,0,2328,816,880 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14637,25005,405,2625,888,880 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 12684,22080,405,3777,1044,880 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,25005,0,3165,-824,880 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 12198,22290,405,2766,-524,880 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,19755,6285,3165,-659,880 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 12198,20985,6285,2229,-524,880 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 18540,25005,405,3681,-452,880 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 18051,22080,405,3282,-236,880 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 18540,26850,405,1449,-452,880 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 18051,24390,405,603,-236,603 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,25005,0,2493,1347,880 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13662,22080,0,3048,1530,880 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,24645,0,2199,1347,880 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13662,21795,0,1953,1530,880 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,20385,0,2103,-449,880 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,20055,0,1593,-8,880 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,20055,0,1968,-410,880 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,20385,0,2112,-779,880 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,20055,0,2397,-977,880 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,20385,0,2109,-389,880 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,20385,0,1788,-527,880 2 51752 -- MSL 1006 ( 6J 40)
-lq 11709,19755,0,1344,-2423,880 2 161171 -- MSL 1017 (19U 147)
-rq 11709,19755,0,756,-1835,756 2 161172 -- MSL 1018 (19U 148)
-Bq 11709,2970,3315,0,1494 0 161156 -- MSL 1019 (19U 132)
-u2003 26346,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15612,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7806,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26346,2865,0,0,-347 0 161157 -- MSL 1028 (19U 133)
-vz 13662,22080,0,1953,1530,880 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,2628,-1994,880 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,87,-788,87 1 51794 -- MSL 1036 ( 6J 82)
-fi 17076,21105,0,2268,-152,880 2 60077 -- MSL 1040 ( 7J 173)
-fl 17076,20820,0,1668,57,880 2 60078 -- MSL 1041 ( 7J 174)
-ff 20490,20820,0,3111,42,880 2 51883 -- MSL 1042 ( 6J 171)
-Fi 26346,21105,0,2331,-200,880 2 51884 -- MSL 1043 ( 6J 172)
-Fl 26346,20820,0,1692,48,880 2 51885 -- MSL 1044 ( 6J 173)
-ij 13173,21105,3930,1986,918,880 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26346,20610,330,690,-20,690 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 18051,25155,405,1218,-143,880 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 18051,22230,3930,654,102,654 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14637,20160,6285,1374,888,880 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 12684,17160,6285,1206,1044,880 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 6831,24645,0,2232,909,880 2 46301 -- MSL 1065 ( 5T 221)
-bq 7806,2970,3315,0,1089 0 161154 -- MSL 1067 (19U 130)
-%0 34152,20460,405,684,-158,684 2 161161 -- MSL 1068 (19U 137)
-a- 15612,21210,0,0,-5264 2 60154 -- MSL 1084 ( 7J 250)
-ab 15612,22230,0,0,-5237 2 75170 -- MSL 1086 ( 9E 162)
-a. 15612,21795,0,0,-7031 2 75263 -- MSL 1088 ( 9E 255)
-oe 28299,17160,405,768,270,768 0 161180 -- MSL 1090 (19U 156)
-OE 25857,20160,405,2463,-26,880 2 161164 -- MSL 1091 (19U 140)
-fo 8781,14145,0,1689,279,880 0 161163 -- MSL 1092 (19U 139)
-fc 8781,14145,0,324,1644,324 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 13173,19755,0,21,1839,21 2 75171 -- MSL 1095 ( 9E 163)
-/l 7806,20820,0,3030,2109,880 2 75187 -- MSL 1096 ( 9E 179)
-a" 15612,22080,0,4503,-3530,880 2 75197 -- MSL 1097 ( 9E 189)
-ho 15612,765,3990,0,-6563 1 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,25005,0,2199,1347,880 2 75150 -- MSL 1106 ( 9E 142)
-IJ 18540,19755,405,1518,909,880 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/AOR b/contrib/groff/font/devlj4/AOR
deleted file mode 100644
index 6c702156e9a9..000000000000
--- a/contrib/groff/font/devlj4/AOR
+++ /dev/null
@@ -1,708 +0,0 @@
-# AntiqueOlv
-name AOR
-spacewidth 7806
-pcltypeface 4168
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -4877
-P , -4877
-V A -2438
-A V -1949
-T o -2438
-T r -974
-T c -2438
-T e -2438
-T d -2924
-T s -1949
-T y -974
-T a -1949
-T w -974
-T u -974
-T J -2438
-L T -2438
-L Y -3413
-Y o -2924
-Y e -2924
-Y a -1949
-Y J -2924
-A W -1949
-W A -1949
-T A -2438
-V o -974
-V e -974
-V a -974
-Y A -3413
-F A -1949
-F . -3902
-F , -3902
-A T -2438
-A Y -3413
-v . -2924
-v , -2924
-y . -2924
-y , -2924
-T . -2924
-T , -2924
-L W -1949
-P A -1460
-V J -2438
-V . -2924
-V , -2924
-Y . -3902
-Y , -3902
-W o -974
-W e -974
-W a -974
-W . -2438
-W , -2438
-r . -3902
-r , -3902
-w . -2438
-w , -2438
-Y u -974
-A v -1460
-A y -1949
-A w -1460
-o . -2438
-o , -2438
-p . -2438
-p , -2438
-e . -1949
-e , -1949
-b . -2438
-b , -2438
-O T -974
-O Y -974
-O . -2438
-O , -2438
-L y -2438
-L O -1460
-L G -1460
-L C -1460
-L Q -1460
-P J -2924
-D T -974
-D Y -974
-D . -1949
-D , -1949
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -485
-F e -485
-F a -485
-c . -1460
-c , -1460
-O A -1460
-L U -1460
-R T -485
-R Y -485
-G T -485
-C A -974
-C . -1460
-C , -1460
-D A -1460
-B T -974
-B Y -974
-B . -1460
-B , -1460
-F J -2924
-A O -974
-A G -974
-A C -974
-A U -974
-A Q -974
-W J -1949
-J A -1460
-J . -1949
-J , -1949
-U A -1460
-U . -1949
-U , -1949
-f . -2924
-f , -2924
-T O -974
-T G -974
-T C -974
-T Q -974
-L o -1460
-L e -1460
-L q -1460
-G Y -485
-G . -1460
-G , -1460
-P T -974
-P Y -974
-C T -485
-C Y -485
-B A -974
-S . -1460
-S , -1460
-X o -1949
-X e -1949
-A o -974
-A e -974
-K o -974
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -974
-o x -485
-o w -485
-h v -485
-h y -974
-n v -485
-n y -974
-m v -485
-m y -974
-r g -485
-g . -485
-g , -485
-p v -485
-p y -974
-p x -485
-c v -485
-c y -974
-c w -485
-v o -485
-v g -485
-v c -485
-v d -974
-v a -485
-v q -485
-e v -485
-e y -974
-b v -1460
-b y -1949
-b w -1460
-s . -1460
-s , -1460
-y o -485
-y g -485
-y c -485
-y d -974
-y a -485
-y q -485
-x o -485
-x g -485
-x c -485
-x e -485
-x d -974
-x a -485
-x q -485
-a v -485
-a y -974
-a w -485
-w o -485
-w g -485
-w c -485
-w d -974
-w a -485
-w q -485
-T S -974
-L a -485
-L S -974
-R o -1949
-G A -974
-C J -974
-S T -974
-S Y -974
-S A -974
-Y S -974
-X a -485
-A t -485
-A g -974
-A c -974
-A d -1460
-A a -485
-A u -974
-A q -974
-A S -974
-K c -974
-K u -974
-K S -974
-t . -485
-t , -485
-h w -485
-h . -485
-h , -485
-n w -485
-n . -485
-n , -485
-m w -485
-m . -485
-m , -485
-l . -485
-l , -485
-r o -485
-r c -485
-r e -485
-r d -974
-r a -485
-r q -485
-i . -485
-i , -485
-p w -485
-c x -485
-v e -485
-v s -485
-e x -485
-e w -485
-z . -485
-z , -485
-d . -485
-d , -485
-b f -974
-y e -485
-y s -485
-f d -485
-x . -485
-x , -485
-a . -485
-a , -485
-w e -485
-w s -485
-j . -485
-j , -485
-u . -485
-k o -974
-k g -974
-k c -974
-k e -974
-k d -1460
-k a -485
-k q -974
-k . -485
-k , -485
-O J -1949
-H . -485
-H , -485
-N . -485
-N , -485
-M . -485
-M , -485
-L . -485
-L , -485
-R e -1949
-R a -485
-R . -485
-R , -485
-I . -485
-I , -485
-E d -485
-E . -485
-E , -485
-Z o -1949
-Z e -1949
-Z d -1949
-Z a -485
-Z . -485
-Z , -485
-D J -1460
-B J -974
-S J -974
-X . -485
-X , -485
-A . -485
-A , -485
-J J -1460
-U J -1460
-K a -485
-K . -485
-K , -485
-t d -485
-r s -485
-g d -485
-z d -485
-b t -974
-b g -974
-b z -974
-b j -974
-G J -974
-A f -485
-U d -485
-L cq -3902
-L ' -3902
-T hy -974
-T - -974
-T en -974
-T em -974
-A cq -2438
-A ' -2438
-hy T -974
-- T -974
-en T -974
-em T -974
-Y hy -974
-Y - -974
-Y en -974
-Y em -974
-p cq -1949
-p ' -1949
-c cq -974
-c ' -974
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-a cq -1460
-a ' -1460
-h cq -1949
-h ' -1949
-n cq -1460
-n ' -1460
-m cq -1460
-m ' -1460
-cq d -1949
-' d -1949
-L hy -1460
-L - -1460
-L en -1460
-L em -1460
-A hy -974
-A - -974
-A en -974
-A em -974
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -974
-' s -974
-hy A -1460
-- A -1460
-en A -1460
-b f -974
-charset
-! 8295,20160,405 2 161057 -- MSL 1 (19U 33)
-dq 11220,19755 2 161058 -- MSL 2 (19U 34)
-" "
-sh 15612,20460,4296 3 161059 -- MSL 3 (19U 35)
-# "
-Do 15612,21960,2265 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26835,20460,405 2 161061 -- MSL 5 (19U 37)
-& 19029,20160,405 2 161062 -- MSL 6 (19U 38)
-cq 6831,19755 2 161170 -- MSL 8 (19U 146)
-' "
-( 7806,19755,405 2 161064 -- MSL 9 (19U 40)
-) 7806,19755,405 2 161065 -- MSL 10 (19U 41)
-* 15612,20160 2 161066 -- MSL 11 (19U 42)
-+ 26835,15255,585 0 161067 -- MSL 12 (19U 43)
-, 7806,2910,4320 1 161068 -- MSL 13 (19U 44)
-hy 7806,10200 0 161069 -- MSL 14 (19U 45)
-- "
-. 7806,2925,405 0 161070 -- MSL 15 (19U 46)
-sl 8295,20820,405 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15612,20460,405 2 161072 -- MSL 17 (19U 48)
-1 15612,20055 2 161073 -- MSL 18 (19U 49)
-2 15612,20460 2 161074 -- MSL 19 (19U 50)
-3 15612,20055,405 2 161075 -- MSL 20 (19U 51)
-4 15612,20055 2 161076 -- MSL 21 (19U 52)
-5 15612,20055,405 2 161077 -- MSL 22 (19U 53)
-6 15612,20460,405 2 161078 -- MSL 23 (19U 54)
-7 15612,20055 2 161079 -- MSL 24 (19U 55)
-8 15612,20460,405 2 161080 -- MSL 25 (19U 56)
-9 15612,20460,405 2 161081 -- MSL 26 (19U 57)
-: 7806,13647,405 0 161082 -- MSL 27 (19U 58)
-; 7806,13647,4320 1 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 26835,10800 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 15126,20160,405 2 161087 -- MSL 32 (19U 63)
-at 26835,21030,2745 2 161088 -- MSL 33 (19U 64)
-@ "
-A 18540,19755 2 161089 -- MSL 34 (19U 65)
-B 17565,19755 2 161090 -- MSL 35 (19U 66)
-C 16101,20160,405 2 161091 -- MSL 36 (19U 67)
-D 18540,19755 2 161092 -- MSL 37 (19U 68)
-E 15612,19755 2 161093 -- MSL 38 (19U 69)
-F 15126,19755 2 161094 -- MSL 39 (19U 70)
-G 18051,20160,405 2 161095 -- MSL 40 (19U 71)
-H 19515,19755 2 161096 -- MSL 41 (19U 72)
-I 7317,19755 2 161097 -- MSL 42 (19U 73)
-J 12198,19755,405 2 161098 -- MSL 43 (19U 74)
-K 16587,19755 2 161099 -- MSL 44 (19U 75)
-L 13662,19755 2 161100 -- MSL 45 (19U 76)
-M 23418,19755 2 161101 -- MSL 46 (19U 77)
-N 19515,19755 2 161102 -- MSL 47 (19U 78)
-O 19029,20160,405 2 161103 -- MSL 48 (19U 79)
-P 16587,19755 2 161104 -- MSL 49 (19U 80)
-Q 19029,20160,636 2 161105 -- MSL 50 (19U 81)
-R 16587,19755 2 161106 -- MSL 51 (19U 82)
-S 14148,20160,405 2 161107 -- MSL 52 (19U 83)
-T 15126,19755 2 161108 -- MSL 53 (19U 84)
-U 19029,19755,405 2 161109 -- MSL 54 (19U 85)
-V 16587,19755 2 161110 -- MSL 55 (19U 86)
-W 25857,19755 2 161111 -- MSL 56 (19U 87)
-X 16587,19755 2 161112 -- MSL 57 (19U 88)
-Y 16587,19755 2 161113 -- MSL 58 (19U 89)
-Z 16101,19755 2 161114 -- MSL 59 (19U 90)
-lB 7806,19755,405 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8295,20820,405 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7806,19755,405 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 6831,19755 2 161169 -- MSL 66 (19U 145)
-` "
-a 15126,17160,405 0 161121 -- MSL 67 (19U 97)
-b 18540,20820,405 2 161122 -- MSL 68 (19U 98)
-c 14637,17160,405 0 161123 -- MSL 69 (19U 99)
-d 18540,20820,405 2 161124 -- MSL 70 (19U 100)
-e 16587,17160,405 0 161125 -- MSL 71 (19U 101)
-f 11709,20820 2 161126 -- MSL 72 (19U 102)
-g 17565,17160,3930 1 161127 -- MSL 73 (19U 103)
-h 18051,20820 2 161128 -- MSL 74 (19U 104)
-i 7806,21105 2 161129 -- MSL 75 (19U 105)
-j 7806,21105,3930 3 161130 -- MSL 76 (19U 106)
-k 15126,20820 2 161131 -- MSL 77 (19U 107)
-l 7317,20820 2 161132 -- MSL 78 (19U 108)
-m 27321,17160 0 161133 -- MSL 79 (19U 109)
-n 18051,17160 0 161134 -- MSL 80 (19U 110)
-o 18051,17160,405 0 161135 -- MSL 81 (19U 111)
-p 18540,17160,3930 1 161136 -- MSL 82 (19U 112)
-q 18540,17160,3930 1 161137 -- MSL 83 (19U 113)
-r 12198,17160 0 161138 -- MSL 84 (19U 114)
-s 12198,17160,405 0 161139 -- MSL 85 (19U 115)
-t 12198,20925,405 2 161140 -- MSL 86 (19U 116)
-u 17565,16755,405 0 161141 -- MSL 87 (19U 117)
-v 15612,16755 0 161142 -- MSL 88 (19U 118)
-w 23907,16755 0 161143 -- MSL 89 (19U 119)
-x 14637,16755 0 161144 -- MSL 90 (19U 120)
-y 15612,16755,3930 1 161145 -- MSL 91 (19U 121)
-z 13662,16755 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 18540,25005 2 161216 -- MSL 99 (19U 192)
-^A 18540,25005 2 161218 -- MSL 100 (19U 194)
-`E 15612,25005 2 161224 -- MSL 101 (19U 200)
-^E 15612,25005 2 161226 -- MSL 102 (19U 202)
-:E 15612,24690 2 161227 -- MSL 103 (19U 203)
-^I 7317,25005 2 161230 -- MSL 104 (19U 206)
-:I 7317,24690 2 161231 -- MSL 105 (19U 207)
-aa 15612,22080 2 161204 -- MSL 106 (19U 180)
-ga 15612,22080 2 161120 -- MSL 107 (19U 96)
-a^ 15612,22080 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15612,21840 2 161192 -- MSL 109 (19U 168)
-~ 15612,21873 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,25005,405 2 161241 -- MSL 111 (19U 217)
-^U 19029,25005,405 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 16587,25005 2 161245 -- MSL 114 (19U 221)
-'y 15612,22080,3930 3 161277 -- MSL 115 (19U 253)
-de 15612,20460 2 161200 -- MSL 116 (19U 176)
-,C 16101,20160,4896 3 161223 -- MSL 117 (19U 199)
-,c 14637,17160,4896 1 161255 -- MSL 118 (19U 231)
-~N 19515,24915 2 161233 -- MSL 119 (19U 209)
-~n 18051,21873 2 161265 -- MSL 120 (19U 241)
-r! 8295,17124,3441 0 161185 -- MSL 121 (19U 161)
-r? 15126,17124,3441 0 161215 -- MSL 122 (19U 191)
-Cs 15612,15684 0 161188 -- MSL 123 (19U 164)
-Po 15612,20460 2 161187 -- MSL 124 (19U 163)
-Ye 15612,20055 2 161189 -- MSL 125 (19U 165)
-sc 15612,20160,4095 3 161191 -- MSL 126 (19U 167)
-Fn 15612,20820 2 161155 -- MSL 127 (19U 131)
-ct 15612,20526,537 2 161186 -- MSL 128 (19U 162)
-^a 15126,22080,405 2 161250 -- MSL 129 (19U 226)
-^e 16587,22080,405 2 161258 -- MSL 130 (19U 234)
-^o 18051,22080,405 2 161268 -- MSL 131 (19U 244)
-^u 17565,22080,405 2 161275 -- MSL 132 (19U 251)
-'a 15126,22080,405 2 161249 -- MSL 133 (19U 225)
-'e 16587,22080,405 2 161257 -- MSL 134 (19U 233)
-'o 18051,22080,405 2 161267 -- MSL 135 (19U 243)
-'u 17565,22080,405 2 161274 -- MSL 136 (19U 250)
-`a 15126,22080,405 2 161248 -- MSL 137 (19U 224)
-`e 16587,22080,405 2 161256 -- MSL 138 (19U 232)
-`o 18051,22080,405 2 161266 -- MSL 139 (19U 242)
-`u 17565,22080,405 2 161273 -- MSL 140 (19U 249)
-:a 15126,21840,405 2 161252 -- MSL 141 (19U 228)
-:e 16587,21840,405 2 161259 -- MSL 142 (19U 235)
-:o 18051,21840,405 2 161270 -- MSL 143 (19U 246)
-:u 17565,21840,405 2 161276 -- MSL 144 (19U 252)
-oA 18540,26850 2 161221 -- MSL 145 (19U 197)
-^i 7806,22080 2 161262 -- MSL 146 (19U 238)
-/O 19029,20187,501 2 161240 -- MSL 147 (19U 216)
-AE 30738,19755 2 161222 -- MSL 148 (19U 198)
-oa 15126,24390,405 2 161253 -- MSL 149 (19U 229)
-'i 7806,22080 2 161261 -- MSL 150 (19U 237)
-/o 18051,17163,432 0 161272 -- MSL 151 (19U 248)
-ae 26346,17160,405 0 161254 -- MSL 152 (19U 230)
-:A 18540,24690 2 161220 -- MSL 153 (19U 196)
-`i 7806,22080 2 161260 -- MSL 154 (19U 236)
-:O 19029,24690,405 2 161238 -- MSL 155 (19U 214)
-:U 19029,24690,405 2 161244 -- MSL 156 (19U 220)
-'E 15612,25005 2 161225 -- MSL 157 (19U 201)
-:i 7806,21840 2 161263 -- MSL 158 (19U 239)
-ss 16587,20820,405 2 161247 -- MSL 159 (19U 223)
-^O 19029,25005,405 2 161236 -- MSL 160 (19U 212)
-'A 18540,25005 2 161217 -- MSL 161 (19U 193)
-~A 18540,24915 2 161219 -- MSL 162 (19U 195)
-~a 15126,21873,405 2 161251 -- MSL 163 (19U 227)
--D 18540,19755 2 161232 -- MSL 164 (19U 208)
-Sd 18051,22695,405 2 161264 -- MSL 165 (19U 240)
-'I 7317,25005 2 161229 -- MSL 166 (19U 205)
-`I 7317,25005 2 161228 -- MSL 167 (19U 204)
-'O 19029,25005,405 2 161235 -- MSL 168 (19U 211)
-`O 19029,25005,405 2 161234 -- MSL 169 (19U 210)
-~O 19029,24915,405 2 161237 -- MSL 170 (19U 213)
-~o 18051,21873,405 2 161269 -- MSL 171 (19U 245)
-vS 14148,25005,405 2 161162 -- MSL 172 (19U 138)
-vs 12198,22080,405 2 161178 -- MSL 173 (19U 154)
-'U 19029,25005,405 2 161242 -- MSL 174 (19U 218)
-:Y 16587,24690 2 161183 -- MSL 175 (19U 159)
-:y 15612,21840,3930 3 161279 -- MSL 176 (19U 255)
-TP 16587,19755 2 161246 -- MSL 177 (19U 222)
-Tp 18540,20820,3930 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350 1 161205 -- MSL 180 (19U 181)
-ps 15612,19635,4200 3 161206 -- MSL 181 (19U 182)
-34 26835,20610,555 2 161214 -- MSL 182 (19U 190)
-\- 26835,8295 0 60096 -- MSL 183 ( 7J 192)
-14 26835,20610,555 2 161212 -- MSL 184 (19U 188)
-12 26835,20610,555 2 161213 -- MSL 185 (19U 189)
-Of 15612,20460 2 161194 -- MSL 186 (19U 170)
-Om 15612,20460 2 161210 -- MSL 187 (19U 186)
-Fo 14148,13950 0 161195 -- MSL 188 (19U 171)
-Fc 14148,13950 0 161211 -- MSL 190 (19U 187)
-t+- 26835,15255,3900 1 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 26835,11331 0 161196 -- MSL 194 (19U 172)
-u00AD 7806,10200 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 10245,20385 2 161202 -- MSL 197 (19U 178)
-S3 10245,20055 2 161203 -- MSL 198 (19U 179)
-ac 15612,324,4896 1 161208 -- MSL 199 (19U 184)
-S1 10245,20055 2 161209 -- MSL 200 (19U 185)
-tmu 26835,15189,579 0 161239 -- MSL 201 (19U 215)
-tdi 26835,12780 0 161271 -- MSL 202 (19U 247)
-u203C 15126,20160,405 2 87315 -- MSL 221 (10U 19)
-u20A7 28785,20925,405 2 60121 -- MSL 232 ( 7J 217)
-pc 7806,11781 0 161207 -- MSL 302 (19U 183)
-u013F 13662,19755 2 51943 -- MSL 306 ( 6J 231)
-u0140 8781,20820 2 51959 -- MSL 307 ( 6J 247)
-u2113 15612,18150,297 0 60122 -- MSL 308 ( 7J 218)
-u0149 20979,19755 2 51951 -- MSL 309 ( 6J 239)
-fm 7806,20055 2 60101 -- MSL 310 ( 7J 197)
-sd 15612,20055 2 60102 -- MSL 311 ( 7J 198)
-dg 15612,20160,4095 3 161158 -- MSL 312 (19U 134)
-tm 16101,17850 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 15612,22080 2 75169 -- MSL 315 ( 9E 161)
-ao 15612,24390 2 60152 -- MSL 316 ( 7J 248)
-f/ 4392,20610,555 2 60109 -- MSL 324 ( 7J 205)
-em 26835,9840 0 161175 -- MSL 325 (19U 151)
-en 15612,9840 0 161174 -- MSL 326 (19U 150)
-dd 15612,20160,4095 3 161159 -- MSL 327 (19U 135)
-.i 7806,16755 0 46333 -- MSL 328 ( 5T 253)
-aq 6831,19755 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 11220,20385 2 87548 -- MSL 332 (10U 252)
-u0111 18540,20820,405 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 18540,25080 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 15126,22155,405 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 18540,19755,4143 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 15126,17160,4143 1 75193 -- MSL 405 ( 9E 185)
-'C 16101,25005,405 2 75206 -- MSL 406 ( 9E 198)
-'c 14637,22080,405 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 16101,25005,405 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 14637,22080,405 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 18540,25005 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 20004,22290,405 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15612,25005 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 16587,22080,405 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15612,19755,4143 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 16587,17160,4143 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13662,25005 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25605 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13662,19755 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9270,22290 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19515,25005 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 18051,22080 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19515,25005 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 18051,22080 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 19029,25005,405 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 18051,22080,405 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16587,25005 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 12198,22080 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16587,25005 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 12198,22080 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,25005,405 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 12198,22080,405 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15126,25005 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 12198,22290,405 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15126,19755,4896 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 12198,20925,4896 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,25005,405 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 17565,22080,405 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,26850,405 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 17565,24390,405 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,25005 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13662,22080 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,24690 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13662,21840 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,20385 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,20055 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,20055 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,20385 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,20055 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,20385 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,20385 2 51752 -- MSL 1006 ( 6J 40)
-lq 10245,19755 2 161171 -- MSL 1017 (19U 147)
-rq 10245,19755 2 161172 -- MSL 1018 (19U 148)
-Bq 10245,2868,3417 0 161156 -- MSL 1019 (19U 132)
-u2003 26835,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15612,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7806,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26835,2865 0 161157 -- MSL 1028 (19U 133)
-vz 13662,22080 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 1 51794 -- MSL 1036 ( 6J 82)
-fi 18051,21105 2 60077 -- MSL 1040 ( 7J 173)
-fl 18051,20820 2 60078 -- MSL 1041 ( 7J 174)
-ff 20979,20820 2 51883 -- MSL 1042 ( 6J 171)
-Fi 27321,21105 2 51884 -- MSL 1043 ( 6J 172)
-Fl 27321,20820 2 51885 -- MSL 1044 ( 6J 173)
-ij 15126,21105,3930 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26835,20610,330 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 18051,25080,405 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 17565,22155,3930 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,20160,4896 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 12198,17160,4896 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,24690 2 46301 -- MSL 1065 ( 5T 221)
-bq 6831,2868,3417 0 161154 -- MSL 1067 (19U 130)
-%0 34152,20460,405 2 161161 -- MSL 1068 (19U 137)
-a- 15612,21306 2 60154 -- MSL 1084 ( 7J 250)
-ab 15612,22155 2 75170 -- MSL 1086 ( 9E 162)
-a. 15612,21840 2 75263 -- MSL 1088 ( 9E 255)
-oe 29274,17160,405 0 161180 -- MSL 1090 (19U 156)
-OE 26346,20160,405 2 161164 -- MSL 1091 (19U 140)
-fo 9270,13950 0 161163 -- MSL 1092 (19U 139)
-fc 9270,13950 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 13662,19755 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,20820 2 75187 -- MSL 1096 ( 9E 179)
-a" 15612,22080 2 75197 -- MSL 1097 ( 9E 189)
-ho 15612,747,4143 1 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,25005 2 75150 -- MSL 1106 ( 9E 142)
-IJ 19029,19755,405 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/AR b/contrib/groff/font/devlj4/AR
deleted file mode 100644
index 8e4169d16ec5..000000000000
--- a/contrib/groff/font/devlj4/AR
+++ /dev/null
@@ -1,430 +0,0 @@
-# M Arial
-name AR
-spacewidth 7351
-pcltypeface 16602
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl 0
-kernpairs
-1 1 -1963
-A T -1963
-A V -1963
-A W -981
-A Y -1963
-A v -477
-A w -477
-A y -477
-A cq -1963
-A ' -1963
-F , -2932
-F . -2932
-F A -1459
-L T -1963
-L V -1963
-L W -1963
-L Y -1963
-L y -981
-L cq -1459
-L ' -1459
-P , -3410
-P . -3410
-P A -1963
-R T -477
-R V -477
-R W -477
-R Y -477
-T , -2932
-T hy -1459
-T - -1459
-T . -2932
-T : -2932
-T ; -2932
-T A -1963
-T O -477
-T a -2932
-T c -2932
-T e -2932
-T i -981
-T o -2932
-T r -981
-T s -2932
-T u -981
-T w -1459
-T y -1459
-V , -2428
-V hy -1459
-V - -1459
-V . -2428
-V : -981
-V ; -981
-V A -1963
-V a -1963
-V e -1459
-V i -477
-V o -1459
-V r -981
-V u -981
-V y -981
-W , -1459
-W hy -477
-W - -477
-W . -1459
-W : -477
-W ; -477
-W A -981
-W a -981
-W e -477
-W i 0
-W o -477
-W r -477
-W u -477
-W y -232
-Y , -3410
-Y hy -2428
-Y - -2428
-Y . -3410
-Y : -1459
-Y ; -1717
-Y A -1963
-Y a -1963
-Y e -2428
-Y i -981
-Y o -2428
-Y p -1963
-Y q -2428
-Y u -1459
-Y v -1459
-f f -477
-f cq 478
-f ' 478
-r , -1459
-r . -1459
-r cq 982
-r ' 982
-v , -1963
-v . -1963
-w , -1459
-w . -1459
-y , -1963
-y . -1963
-oq oq -477
-oq ` -477
-` oq -477
-` ` -477
-cq s -477
-' s -477
-cq cq -477
-cq ' -477
-' cq -477
-' ' -477
-charset
-! 7351,18939 2 161057 -- U+0021 (19U 33)
-dq 9392,18939 2 161058 -- U+0022 (19U 34)
-" "
-sh 14715,19262,323 2 161059 -- U+0023 (19U 35)
-# "
-Do 14715,20683,2726 2 161060 -- U+0024 (19U 36)
-$ "
-% 23526,19262,698 2 161061 -- U+0025 (19U 37)
-& 17648,19262,439 2 161062 -- U+0026 (19U 38)
-aq 5051,18939 2 161063 -- U+0027 (19U 39)
-( 8811,19262,5568 3 161064 -- U+0028 (19U 40)
-) 8811,19262,5568 3 161065 -- U+0029 (19U 41)
-* 10297,19262 2 161066 -- U+002A (19U 42)
-+ 15451,15580 0 161067 -- U+002B (19U 43)
-, 7351,2648,3747 0 161068 -- U+002C (19U 44)
-hy 8811,8023 0 161069 -- U+002D (19U 45)
-- "
-. 7351,2648 0 161070 -- U+002E (19U 46)
-sl 7351,19262,323 2 161071 -- U+002F (19U 47)
-/ "
-0 14715,19017,323 2 161072 -- U+0030 (19U 48)
-1 14715,19017 2 161073 -- U+0031 (19U 49)
-2 14715,19017 2 161074 -- U+0032 (19U 50)
-3 14715,19017,336 2 161075 -- U+0033 (19U 51)
-4 14715,18939 2 161076 -- U+0034 (19U 52)
-5 14715,18681,323 2 161077 -- U+0035 (19U 53)
-6 14715,19017,323 2 161078 -- U+0036 (19U 54)
-7 14715,18694 2 161079 -- U+0037 (19U 55)
-8 14715,19017,323 2 161080 -- U+0038 (19U 56)
-9 14715,19017,323 2 161081 -- U+0039 (19U 57)
-: 7351,13720 0 161082 -- U+003A (19U 58)
-; 7351,13720,3747 0 161083 -- U+003B (19U 59)
-< 15451,15748 0 161084 -- U+003C (19U 60)
-= 15451,13307 0 161085 -- U+003D (19U 61)
-> 15451,15748 0 161086 -- U+003E (19U 62)
-? 14715,19262 2 161087 -- U+003F (19U 63)
-at 26859,19288,5568 3 161088 -- U+0040 (19U 64)
-@ "
-A 17648,18939 2 161089 -- U+0041 (19U 65)
-B 17648,18939 2 161090 -- U+0042 (19U 66)
-C 19107,19262,323 2 161091 -- U+0043 (19U 67)
-D 19107,18939 2 161092 -- U+0044 (19U 68)
-E 17648,18939 2 161093 -- U+0045 (19U 69)
-F 16162,18939 2 161094 -- U+0046 (19U 70)
-G 20580,19262,323 2 161095 -- U+0047 (19U 71)
-H 19107,18939 2 161096 -- U+0048 (19U 72)
-I 7351,18939 2 161097 -- U+0049 (19U 73)
-J 13229,18939,323 2 161098 -- U+004A (19U 74)
-K 17648,18939 2 161099 -- U+004B (19U 75)
-L 14715,18939 2 161100 -- U+004C (19U 76)
-M 22040,18939 2 161101 -- U+004D (19U 77)
-N 19107,18939 2 161102 -- U+004E (19U 78)
-O 20580,19275,323 2 161103 -- U+004F (19U 79)
-P 17648,18939 2 161104 -- U+0050 (19U 80)
-Q 20580,19275,1473 2 161105 -- U+0051 (19U 81)
-R 19107,18939 2 161106 -- U+0052 (19U 82)
-S 17648,19262,323 2 161107 -- U+0053 (19U 83)
-T 16162,18939 2 161108 -- U+0054 (19U 84)
-U 19107,18939,323 2 161109 -- U+0055 (19U 85)
-V 17648,18939 2 161110 -- U+0056 (19U 86)
-W 24973,18939 2 161111 -- U+0057 (19U 87)
-X 17648,18939 2 161112 -- U+0058 (19U 88)
-Y 17648,18939 2 161113 -- U+0059 (19U 89)
-Z 16162,18939 2 161114 -- U+005A (19U 90)
-lB 7351,18939,5258 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,19262,323 2 161116 -- U+005C (19U 92)
-\ "
-rB 7351,18939,5258 3 161117 -- U+005D (19U 93)
-] "
-ha 12415,19262 2 161118 -- U+005E (19U 94)
-_ 14715,0,5258 1 161119 -- U+005F (19U 95)
-ga 8811,19043 2 161120 -- U+0060 (19U 96)
-a 14715,14030,310 0 161121 -- U+0061 (19U 97)
-b 14715,18939,310 2 161122 -- U+0062 (19U 98)
-c 13229,14030,310 0 161123 -- U+0063 (19U 99)
-d 14715,18939,310 2 161124 -- U+0064 (19U 100)
-e 14715,14030,310 0 161125 -- U+0065 (19U 101)
-f 7351,19262 2 161126 -- U+0066 (19U 102)
-g 14715,14030,5568 1 161127 -- U+0067 (19U 103)
-h 14715,18939 2 161128 -- U+0068 (19U 104)
-i 5878,18939 2 161129 -- U+0069 (19U 105)
-j 5878,18939,5568 3 161130 -- U+006A (19U 106)
-k 13229,18939 2 161131 -- U+006B (19U 107)
-l 5878,18939 2 161132 -- U+006C (19U 108)
-m 22040,14030 0 161133 -- U+006D (19U 109)
-n 14715,14030 0 161134 -- U+006E (19U 110)
-o 14715,14030,310 0 161135 -- U+006F (19U 111)
-p 14715,14030,5258 1 161136 -- U+0070 (19U 112)
-q 14715,14030,5258 1 161137 -- U+0071 (19U 113)
-r 8811,14030 0 161138 -- U+0072 (19U 114)
-s 13229,14030,310 0 161139 -- U+0073 (19U 115)
-t 7351,18513,181 2 161140 -- U+0074 (19U 116)
-u 14715,13720,310 0 161141 -- U+0075 (19U 117)
-v 13229,13720 0 161142 -- U+0076 (19U 118)
-w 19107,13720 0 161143 -- U+0077 (19U 119)
-x 13229,13720 0 161144 -- U+0078 (19U 120)
-y 13229,13720,5568 1 161145 -- U+0079 (19U 121)
-z 13229,13720 0 161146 -- U+007A (19U 122)
-{ 8837,19262,5568 3 161147 -- U+007B (19U 123)
-lC "
-| 6873,19262,5568 3 161148 -- U+007C (19U 124)
-ba "
-} 8837,19262,5568 3 161149 -- U+007D (19U 125)
-rC "
-ti 15451,11433 0 161150 -- U+007E (19U 126)
-r! 8811,13720,5219 1 161185 -- U+00A1 (19U 161)
-ct 14715,18939,5284 3 161186 -- U+00A2 (19U 162)
-Po 14715,19262,362 2 161187 -- U+00A3 (19U 163)
-Cs 14715,15710 0 161188 -- U+00A4 (19U 164)
-Ye 14715,18939 2 161189 -- U+00A5 (19U 165)
-bb 6873,19262,5568 3 161190 -- U+00A6 (19U 166)
-sc 14715,19262,5568 3 161191 -- U+00A7 (19U 167)
-ad 8811,19056 2 161192 -- U+00A8 (19U 168)
-co 19495,19262,233 2 161193 -- U+00A9 (19U 169)
-Of 9793,19262 2 161194 -- U+00AA (19U 170)
-Fo 14715,12712 0 161195 -- U+00AB (19U 171)
-tno 15451,13307 0 161196 -- U+00AC (19U 172)
-u00AD 8811,8023 0 161197 -- U+00AD (19U 173)
-rg 19495,19262,233 2 161198 -- U+00AE (19U 174)
-u00AF 14612,21898 2 161199 -- U+00AF (19U 175)
-de 10581,19262 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15878 0 161201 -- U+00B1 (19U 177)
-S2 8811,19172 2 161202 -- U+00B2 (19U 178)
-S3 8811,19172 2 161203 -- U+00B3 (19U 179)
-aa 8811,19043 2 161204 -- U+00B4 (19U 180)
-mc 15245,13720,5258 1 161205 -- U+00B5 (19U 181)
-ps 14211,18939,5258 3 161206 -- U+00B6 (19U 182)
-pc 7351,10645 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,297,5439 1 161208 -- U+00B8 (19U 184)
-S1 8811,19172 2 161209 -- U+00B9 (19U 185)
-Om 9663,19262 2 161210 -- U+00BA (19U 186)
-Fc 14715,12712 0 161211 -- U+00BB (19U 187)
-14 22066,19262,736 2 161212 -- U+00BC (19U 188)
-12 22066,19262,736 2 161213 -- U+00BD (19U 189)
-34 22066,19262,736 2 161214 -- U+00BE (19U 190)
-r? 16162,13720,5542 1 161215 -- U+00BF (19U 191)
-`A 17648,23719 2 161216 -- U+00C0 (19U 192)
-'A 17648,23719 2 161217 -- U+00C1 (19U 193)
-^A 17648,23719 2 161218 -- U+00C2 (19U 194)
-~A 17648,23086 2 161219 -- U+00C3 (19U 195)
-:A 17648,22751 2 161220 -- U+00C4 (19U 196)
-oA 17648,22996 2 161221 -- U+00C5 (19U 197)
-AE 26458,18939 2 161222 -- U+00C6 (19U 198)
-,C 19107,19262,5439 3 161223 -- U+00C7 (19U 199)
-`E 17648,23719 2 161224 -- U+00C8 (19U 200)
-'E 17648,23719 2 161225 -- U+00C9 (19U 201)
-^E 17648,23719 2 161226 -- U+00CA (19U 202)
-:E 17648,22751 2 161227 -- U+00CB (19U 203)
-`I 7351,23719 2 161228 -- U+00CC (19U 204)
-'I 7351,23719 2 161229 -- U+00CD (19U 205)
-^I 7351,23719 2 161230 -- U+00CE (19U 206)
-:I 7351,22751 2 161231 -- U+00CF (19U 207)
--D 19107,18939 2 161232 -- U+00D0 (19U 208)
-~N 19107,23086 2 161233 -- U+00D1 (19U 209)
-`O 20580,23719,323 2 161234 -- U+00D2 (19U 210)
-'O 20580,23719,323 2 161235 -- U+00D3 (19U 211)
-^O 20580,23719,323 2 161236 -- U+00D4 (19U 212)
-~O 20580,23086,323 2 161237 -- U+00D5 (19U 213)
-:O 20580,22751,323 2 161238 -- U+00D6 (19U 214)
-tmu 15451,14986 0 161239 -- U+00D7 (19U 215)
-/O 20580,19637,762 2 161240 -- U+00D8 (19U 216)
-`U 19107,23719,323 2 161241 -- U+00D9 (19U 217)
-'U 19107,23719,323 2 161242 -- U+00DA (19U 218)
-^U 19107,23719,323 2 161243 -- U+00DB (19U 219)
-:U 19107,22751,323 2 161244 -- U+00DC (19U 220)
-'Y 17648,23719 2 161245 -- U+00DD (19U 221)
-TP 17648,18939 2 161246 -- U+00DE (19U 222)
-ss 16162,19262,323 2 161247 -- U+00DF (19U 223)
-`a 14715,19043,310 2 161248 -- U+00E0 (19U 224)
-'a 14715,19043,310 2 161249 -- U+00E1 (19U 225)
-^a 14715,19043,310 2 161250 -- U+00E2 (19U 226)
-~a 14715,18733,310 2 161251 -- U+00E3 (19U 227)
-:a 14715,19056,310 2 161252 -- U+00E4 (19U 228)
-oa 14715,19598,310 2 161253 -- U+00E5 (19U 229)
-ae 23526,14030,310 0 161254 -- U+00E6 (19U 230)
-,c 13229,14030,5181 1 161255 -- U+00E7 (19U 231)
-`e 14715,19043,310 2 161256 -- U+00E8 (19U 232)
-'e 14715,19043,310 2 161257 -- U+00E9 (19U 233)
-^e 14715,19043,310 2 161258 -- U+00EA (19U 234)
-:e 14715,19056,310 2 161259 -- U+00EB (19U 235)
-`i 7351,19043 2 161260 -- U+00EC (19U 236)
-'i 7351,19043 2 161261 -- U+00ED (19U 237)
-^i 7351,19043 2 161262 -- U+00EE (19U 238)
-:i 7351,19056 2 161263 -- U+00EF (19U 239)
-Sd 14715,18939,323 2 161264 -- U+00F0 (19U 240)
-~n 14715,18733 2 161265 -- U+00F1 (19U 241)
-`o 14715,19043,310 2 161266 -- U+00F2 (19U 242)
-'o 14715,19043,310 2 161267 -- U+00F3 (19U 243)
-^o 14715,19043,310 2 161268 -- U+00F4 (19U 244)
-~o 14715,18733,310 2 161269 -- U+00F5 (19U 245)
-:o 14715,19056,310 2 161270 -- U+00F6 (19U 246)
-tdi 14521,14560 0 161271 -- U+00F7 (19U 247)
-/o 16162,14560,1021 0 161272 -- U+00F8 (19U 248)
-`u 14715,19043,310 2 161273 -- U+00F9 (19U 249)
-'u 14715,19043,310 2 161274 -- U+00FA (19U 250)
-^u 14715,19043,310 2 161275 -- U+00FB (19U 251)
-:u 14715,19056,310 2 161276 -- U+00FC (19U 252)
-'y 13229,19043,5568 3 161277 -- U+00FD (19U 253)
-Tp 14715,18939,5258 3 161278 -- U+00FE (19U 254)
-:y 13229,19056,5568 3 161279 -- U+00FF (19U 255)
-u0041_0306 17648,23448 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 14715,18914,310 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 17648,18939,5374 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 14715,14030,5181 1 75193 -- U+0105 ( 9E 185)
-'C 19107,23719,323 2 75206 -- U+0106 ( 9E 198)
-'c 13229,19043,310 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 19107,23642,323 2 75208 -- U+010C ( 9E 200)
-u0061_030C 13229,19043,310 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23642 2 75215 -- U+010E ( 9E 207)
-u0064_030C 16265,18939,310 2 75247 -- U+010F ( 9E 239)
-u0111 14715,18939,310 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,18939,5504 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 14715,14030,5504 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23642 2 75212 -- U+011A ( 9E 204)
-u0065_030C 14715,19043,310 2 75244 -- U+011B ( 9E 236)
-u0047_0306 20580,23448,323 2 46288 -- U+011E ( 5T 208)
-u0067_0306 14715,18914,5568 3 46320 -- U+011F ( 5T 240)
-u0049_0307 7351,22996 2 46301 -- U+0130 ( 5T 221)
-.i 7351,13720 0 46333 -- U+0131 ( 5T 253)
-IJ 19443,18939,323 2 60135 -- U+0132 ( 7J 231)
-ij 11743,18939,5568 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 14715,23719 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 5878,23526 2 75237 -- U+013A ( 9E 229)
-u004C_030C 14715,18939 2 75196 -- U+013D ( 9E 188)
-u006C_030C 7713,18939 2 75198 -- U+013E ( 9E 190)
-u013F 14715,18939 2 95646 -- U+013F (11U 158)
-u0140 8837,18939 2 95647 -- U+0140 (11U 159)
-/L 14715,18939 2 75171 -- U+0141 ( 9E 163)
-/l 5878,18939 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23719 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 14715,19043 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23719 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 14715,19043 2 75250 -- U+0148 ( 9E 242)
-u0149 15981,19133 2 95660 -- U+0149 (11U 172)
-u004F_030B 20580,23719,323 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 14715,19043,310 2 75253 -- U+0151 ( 9E 245)
-OE 26458,19262,323 2 161164 -- U+0152 (19U 140)
-oe 24973,14030,310 0 161180 -- U+0153 (19U 156)
-u0052_0301 19107,23719 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 8811,19043 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 19107,23642 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 8811,19043 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 17648,23719,323 2 75148 -- U+015A ( 9E 140)
-u0073_0301 13229,19043,310 2 75164 -- U+015B ( 9E 156)
-u0053_0327 17648,19262,5310 3 75178 -- U+015E ( 9E 170)
-u0073_0327 13229,14030,5181 1 75194 -- U+015F ( 9E 186)
-vS 17648,23642,323 2 161162 -- U+0160 (19U 138)
-vs 13229,19043,310 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,18939,7480 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 7351,18513,6873 3 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23642 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 9922,18939,181 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,23707,323 2 75225 -- U+016E ( 9E 217)
-u0075_030A 14715,19598,310 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23719,323 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 14715,19043,310 2 75259 -- U+0171 ( 9E 251)
-:Y 17648,22751 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23719 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 13229,19043 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,22996 2 75183 -- U+017B ( 9E 175)
-u007A_0307 13229,18319 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23642 2 75150 -- U+017D ( 9E 142)
-vz 13229,19043 2 75166 -- U+017E ( 9E 158)
-Fn 14715,19275,5568 3 161155 -- U+0192 (19U 131)
-a^ 8811,19043 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,19043 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,17764 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,18914 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,18319 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,19598 2 60152 -- U+02DA ( 7J 248)
-ho 8811,310,5504 1 75186 -- U+02DB ( 9E 178)
-~ 8811,18733 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,19043 2 75197 -- U+02DD ( 9E 189)
-en 14715,7790 0 161174 -- U+2013 (19U 150)
-em 26458,7790 0 161175 -- U+2014 (19U 151)
-u2017 14612,0,8591 1 60095 -- U+2017 ( 7J 191)
-oq 5878,19262 2 161169 -- U+2018 (19U 145)
-` "
-cq 5878,19133 2 161170 -- U+2019 (19U 146)
-' "
-bq 5878,2700,3501 0 161154 -- U+201A (19U 130)
-lq 8811,19262 2 161171 -- U+201C (19U 147)
-rq 8811,19133 2 161172 -- U+201D (19U 148)
-Bq 8811,2700,3501 0 161156 -- U+201E (19U 132)
-dg 14715,18500,4470 2 161158 -- U+2020 (19U 134)
-dd 14715,18681,4470 2 161159 -- U+2021 (19U 135)
-bu 9263,12544 0 161173 -- U+2022 (19U 149)
-u2026 26458,2648 0 161157 -- U+2026 (19U 133)
-%0 26458,19262,698 2 161161 -- U+2030 (19U 137)
-fm 4961,18939 2 60101 -- U+2032 ( 7J 197)
-sd 9366,18939 2 60102 -- U+2033 ( 7J 198)
-fo 8811,12712 0 161163 -- U+2039 (19U 139)
-fc 8811,12712 0 161179 -- U+203A (19U 155)
-u203C 13229,18939 2 87315 -- U+203C (10U 19)
-u207F 9651,15477 0 87548 -- U+207F (10U 252)
-u20A7 28939,18939,336 2 60121 -- U+20A7 ( 7J 217)
-Eu 14715,19262,323 2 161152 -- U+20AC (19U 128)
-u2105 23422,19262,698 2 60072 -- U+2105 ( 7J 168)
-u2113 8552,19262,310 2 60122 -- U+2113 ( 7J 218)
-tm 26458,18939 2 161177 -- U+2122 (19U 153)
-\- 15451,10426 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,19262,736 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371 2 101079 -- U+25CA (12J 215)
-fi 13229,19262 2 60077 -- U+FB01 ( 7J 173)
-fl 13229,19262 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/CB b/contrib/groff/font/devlj4/CB
deleted file mode 100644
index 88bfd014860c..000000000000
--- a/contrib/groff/font/devlj4/CB
+++ /dev/null
@@ -1,330 +0,0 @@
-# Courier Bd
-name CB
-spacewidth 15873
-pcltypeface 4099
-pclproportional 0
-pclweight 3
-pclstyle 0
-charset
-! 15873,15060,330 0 161057 -- MSL 1 (19U 33)
-dq 15873,15060 0 161058 -- MSL 2 (19U 34)
-" "
-sh 15873,17091,1389 2 161059 -- MSL 3 (19U 35)
-# "
-Do 15873,17010,3306 2 161060 -- MSL 4 (19U 36)
-$ "
-% 15873,16275,900 2 161061 -- MSL 5 (19U 37)
-& 15873,14244,330 0 161062 -- MSL 6 (19U 38)
-cq 15873,15060 0 161170 -- MSL 8 (19U 146)
-' "
-( 15873,16935,2295 2 161064 -- MSL 9 (19U 40)
-) 15873,16935,2295 2 161065 -- MSL 10 (19U 41)
-* 15873,15060 0 161066 -- MSL 11 (19U 42)
-+ 15873,11535 0 161067 -- MSL 12 (19U 43)
-, 15873,4305,2655 0 161068 -- MSL 13 (19U 44)
-hy 15873,7440 0 161069 -- MSL 14 (19U 45)
-- "
-. 15873,4035,330 0 161070 -- MSL 15 (19U 46)
-sl 15873,18300,3525 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15873,16155,330 2 161072 -- MSL 17 (19U 48)
-1 15873,16155 2 161073 -- MSL 18 (19U 49)
-2 15873,16155 2 161074 -- MSL 19 (19U 50)
-3 15873,16155,330 2 161075 -- MSL 20 (19U 51)
-4 15873,16155 2 161076 -- MSL 21 (19U 52)
-5 15873,15825,330 2 161077 -- MSL 22 (19U 53)
-6 15873,16155,330 2 161078 -- MSL 23 (19U 54)
-7 15873,15825 2 161079 -- MSL 24 (19U 55)
-8 15873,16155,330 2 161080 -- MSL 25 (19U 56)
-9 15873,16155,330 2 161081 -- MSL 26 (19U 57)
-: 15873,10635,330 0 161082 -- MSL 27 (19U 58)
-; 15873,10635,2655 0 161083 -- MSL 28 (19U 59)
-< 15873,11667,243 0 161084 -- MSL 29 (19U 60)
-= 15873,8886 0 161085 -- MSL 30 (19U 61)
-> 15873,11667,243 0 161086 -- MSL 31 (19U 62)
-? 15873,15390,330 2 161087 -- MSL 32 (19U 63)
-at 15873,15276,489 2 161088 -- MSL 33 (19U 64)
-@ "
-A 15873,15060 0 161089 -- MSL 34 (19U 65)
-B 15873,15060 0 161090 -- MSL 35 (19U 66)
-C 15873,15390,330 2 161091 -- MSL 36 (19U 67)
-D 15873,15060 0 161092 -- MSL 37 (19U 68)
-E 15873,15060 0 161093 -- MSL 38 (19U 69)
-F 15873,15060 0 161094 -- MSL 39 (19U 70)
-G 15873,15390,330 2 161095 -- MSL 40 (19U 71)
-H 15873,15060 0 161096 -- MSL 41 (19U 72)
-I 15873,15060 0 161097 -- MSL 42 (19U 73)
-J 15873,15060,330 0 161098 -- MSL 43 (19U 74)
-K 15873,15060 0 161099 -- MSL 44 (19U 75)
-L 15873,15060 0 161100 -- MSL 45 (19U 76)
-M 15873,15060 0 161101 -- MSL 46 (19U 77)
-N 15873,15060,330 0 161102 -- MSL 47 (19U 78)
-O 15873,15390,330 2 161103 -- MSL 48 (19U 79)
-P 15873,15060 0 161104 -- MSL 49 (19U 80)
-Q 15873,15390,3801 2 161105 -- MSL 50 (19U 81)
-R 15873,15060 0 161106 -- MSL 51 (19U 82)
-S 15873,15390,330 2 161107 -- MSL 52 (19U 83)
-T 15873,15060 0 161108 -- MSL 53 (19U 84)
-U 15873,15060,330 0 161109 -- MSL 54 (19U 85)
-V 15873,15060 0 161110 -- MSL 55 (19U 86)
-W 15873,15060 0 161111 -- MSL 56 (19U 87)
-X 15873,15060 0 161112 -- MSL 57 (19U 88)
-Y 15873,15060 0 161113 -- MSL 58 (19U 89)
-Z 15873,15060 0 161114 -- MSL 59 (19U 90)
-lB 15873,16935,2295 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 15873,18300,3525 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 15873,16935,2295 2 161117 -- MSL 62 (19U 93)
-] "
-ha 15873,19758 2 161118 -- MSL 63 (19U 94)
-_ 15873,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 15873,15060 0 161169 -- MSL 66 (19U 145)
-` "
-a 15873,11775,330 0 161121 -- MSL 67 (19U 97)
-b 15873,16350,330 2 161122 -- MSL 68 (19U 98)
-c 15873,11775,330 0 161123 -- MSL 69 (19U 99)
-d 15873,16350,330 2 161124 -- MSL 70 (19U 100)
-e 15873,11775,330 0 161125 -- MSL 71 (19U 101)
-f 15873,16350 2 161126 -- MSL 72 (19U 102)
-g 15873,11775,4845 1 161127 -- MSL 73 (19U 103)
-h 15873,16350 2 161128 -- MSL 74 (19U 104)
-i 15873,16920 2 161129 -- MSL 75 (19U 105)
-j 15873,16920,4845 3 161130 -- MSL 76 (19U 106)
-k 15873,16350 2 161131 -- MSL 77 (19U 107)
-l 15873,16350 2 161132 -- MSL 78 (19U 108)
-m 15873,11775 0 161133 -- MSL 79 (19U 109)
-n 15873,11775 0 161134 -- MSL 80 (19U 110)
-o 15873,11775,330 0 161135 -- MSL 81 (19U 111)
-p 15873,11775,4845 1 161136 -- MSL 82 (19U 112)
-q 15873,11775,4845 1 161137 -- MSL 83 (19U 113)
-r 15873,11775 0 161138 -- MSL 84 (19U 114)
-s 15873,11775,330 0 161139 -- MSL 85 (19U 115)
-t 15873,14940,330 0 161140 -- MSL 86 (19U 116)
-u 15873,11445,330 0 161141 -- MSL 87 (19U 117)
-v 15873,11445 0 161142 -- MSL 88 (19U 118)
-w 15873,11445 0 161143 -- MSL 89 (19U 119)
-x 15873,11445 0 161144 -- MSL 90 (19U 120)
-y 15873,11445,4845 1 161145 -- MSL 91 (19U 121)
-z 15873,11445 0 161146 -- MSL 92 (19U 122)
-{ 15873,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 15873,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 15873,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 15873,8160 0 161150 -- MSL 96 (19U 126)
-`A 15873,21375 2 161216 -- MSL 99 (19U 192)
-^A 15873,21375 2 161218 -- MSL 100 (19U 194)
-`E 15873,21375 2 161224 -- MSL 101 (19U 200)
-^E 15873,21375 2 161226 -- MSL 102 (19U 202)
-:E 15873,20790 2 161227 -- MSL 103 (19U 203)
-^I 15873,21375 2 161230 -- MSL 104 (19U 206)
-:I 15873,20790 2 161231 -- MSL 105 (19U 207)
-aa 15873,17880 2 161204 -- MSL 106 (19U 180)
-ga 15873,17880 2 161120 -- MSL 107 (19U 96)
-a^ 15873,17880 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15873,16890 2 161192 -- MSL 109 (19U 168)
-~ 15873,16959 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 15873,21375,330 2 161241 -- MSL 111 (19U 217)
-^U 15873,21375,330 2 161243 -- MSL 112 (19U 219)
-u00AF 15873,21108 2 161199 -- MSL 113 (19U 175)
-'Y 15873,21375 2 161245 -- MSL 114 (19U 221)
-'y 15873,17880,4845 3 161277 -- MSL 115 (19U 253)
-de 15873,16155 2 161200 -- MSL 116 (19U 176)
-,C 15873,15390,5457 3 161223 -- MSL 117 (19U 199)
-,c 15873,11775,5469 1 161255 -- MSL 118 (19U 231)
-~N 15873,20490,330 2 161233 -- MSL 119 (19U 209)
-~n 15873,16959 2 161265 -- MSL 120 (19U 241)
-r! 15873,11784,3606 0 161185 -- MSL 121 (19U 161)
-r? 15873,11751,3969 0 161215 -- MSL 122 (19U 191)
-Cs 15873,15834 2 161188 -- MSL 123 (19U 164)
-Po 15873,16155,741 2 161187 -- MSL 124 (19U 163)
-Ye 15873,15825 2 161189 -- MSL 125 (19U 165)
-sc 15873,15390,1692 2 161191 -- MSL 126 (19U 167)
-Fn 15873,16350,3114 2 161155 -- MSL 127 (19U 131)
-ct 15873,15966,1419 2 161186 -- MSL 128 (19U 162)
-^a 15873,17880,330 2 161250 -- MSL 129 (19U 226)
-^e 15873,17880,330 2 161258 -- MSL 130 (19U 234)
-^o 15873,17880,330 2 161268 -- MSL 131 (19U 244)
-^u 15873,17880,330 2 161275 -- MSL 132 (19U 251)
-'a 15873,17880,330 2 161249 -- MSL 133 (19U 225)
-'e 15873,17880,330 2 161257 -- MSL 134 (19U 233)
-'o 15873,17880,330 2 161267 -- MSL 135 (19U 243)
-'u 15873,17880,330 2 161274 -- MSL 136 (19U 250)
-`a 15873,17880,330 2 161248 -- MSL 137 (19U 224)
-`e 15873,17880,330 2 161256 -- MSL 138 (19U 232)
-`o 15873,17880,330 2 161266 -- MSL 139 (19U 242)
-`u 15873,17880,330 2 161273 -- MSL 140 (19U 249)
-:a 15873,16890,330 2 161252 -- MSL 141 (19U 228)
-:e 15873,16890,330 2 161259 -- MSL 142 (19U 235)
-:o 15873,16890,330 2 161270 -- MSL 143 (19U 246)
-:u 15873,16890,330 2 161276 -- MSL 144 (19U 252)
-oA 15873,21780 2 161221 -- MSL 145 (19U 197)
-^i 15873,17880 2 161262 -- MSL 146 (19U 238)
-/O 15873,15432,492 2 161240 -- MSL 147 (19U 216)
-AE 15873,15060 0 161222 -- MSL 148 (19U 198)
-oa 15873,18900,330 2 161253 -- MSL 149 (19U 229)
-'i 15873,17880 2 161261 -- MSL 150 (19U 237)
-/o 15873,11913,600 0 161272 -- MSL 151 (19U 248)
-ae 15873,11775,330 0 161254 -- MSL 152 (19U 230)
-:A 15873,20790 2 161220 -- MSL 153 (19U 196)
-`i 15873,17880 2 161260 -- MSL 154 (19U 236)
-:O 15873,20790,330 2 161238 -- MSL 155 (19U 214)
-:U 15873,20790,330 2 161244 -- MSL 156 (19U 220)
-'E 15873,21375 2 161225 -- MSL 157 (19U 201)
-:i 15873,16890 2 161263 -- MSL 158 (19U 239)
-ss 15873,16350,330 2 161247 -- MSL 159 (19U 223)
-^O 15873,21375,330 2 161236 -- MSL 160 (19U 212)
-'A 15873,21375 2 161217 -- MSL 161 (19U 193)
-~A 15873,20490 2 161219 -- MSL 162 (19U 195)
-~a 15873,16959,330 2 161251 -- MSL 163 (19U 227)
--D 15873,15060 0 161232 -- MSL 164 (19U 208)
-Sd 15873,18249,330 2 161264 -- MSL 165 (19U 240)
-'I 15873,21375 2 161229 -- MSL 166 (19U 205)
-`I 15873,21375 2 161228 -- MSL 167 (19U 204)
-'O 15873,21375,330 2 161235 -- MSL 168 (19U 211)
-`O 15873,21375,330 2 161234 -- MSL 169 (19U 210)
-~O 15873,20490,330 2 161237 -- MSL 170 (19U 213)
-~o 15873,16959,330 2 161269 -- MSL 171 (19U 245)
-vS 15873,21375,330 2 161162 -- MSL 172 (19U 138)
-vs 15873,17880,330 2 161178 -- MSL 173 (19U 154)
-'U 15873,21375,330 2 161242 -- MSL 174 (19U 218)
-:Y 15873,20790 2 161183 -- MSL 175 (19U 159)
-:y 15873,16890,4845 3 161279 -- MSL 176 (19U 255)
-TP 15873,15060 0 161246 -- MSL 177 (19U 222)
-Tp 15873,16350,4845 3 161278 -- MSL 178 (19U 254)
-mc 15873,11445,5580 1 161205 -- MSL 180 (19U 181)
-ps 15873,19635,4080 2 161206 -- MSL 181 (19U 182)
-34 15873,16545,2415 2 161214 -- MSL 182 (19U 190)
-\- 15873,7020 0 60096 -- MSL 183 ( 7J 192)
-14 15873,16545,2415 2 161212 -- MSL 184 (19U 188)
-12 15873,16545,2415 2 161213 -- MSL 185 (19U 189)
-Of 15873,16155 2 161194 -- MSL 186 (19U 170)
-Om 15873,16155 2 161210 -- MSL 187 (19U 186)
-Fo 15873,11595 0 161195 -- MSL 188 (19U 171)
-Fc 15873,11595 0 161211 -- MSL 190 (19U 187)
-t+- 15873,11535,3360 0 161201 -- MSL 191 (19U 177)
-bb 15873,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 15873,19635 2 161193 -- MSL 193 (19U 169)
-tno 15873,9420 0 161196 -- MSL 194 (19U 172)
-u00AD 15873,7440 0 161197 -- MSL 195 (19U 173)
-rg 15873,19635 2 161198 -- MSL 196 (19U 174)
-S2 15873,16035 2 161202 -- MSL 197 (19U 178)
-S3 15873,16035 2 161203 -- MSL 198 (19U 179)
-ac 15873,0,5469 1 161208 -- MSL 199 (19U 184)
-S1 15873,16035 2 161209 -- MSL 200 (19U 185)
-tmu 15873,11340 0 161239 -- MSL 201 (19U 215)
-tdi 15873,11190 0 161271 -- MSL 202 (19U 247)
-u203C 15873,15060,330 0 87315 -- MSL 221 (10U 19)
-u20A7 15873,15060,330 0 60121 -- MSL 232 ( 7J 217)
-pc 15873,10176 0 161207 -- MSL 302 (19U 183)
-u013F 15873,15060 0 51943 -- MSL 306 ( 6J 231)
-u0140 15873,16350 2 51959 -- MSL 307 ( 6J 247)
-u2113 15873,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 15873,15060 0 51951 -- MSL 309 ( 6J 239)
-fm 15873,15825 2 60101 -- MSL 310 ( 7J 197)
-sd 15873,15825 2 60102 -- MSL 311 ( 7J 198)
-dg 15873,15060,1185 0 161158 -- MSL 312 (19U 134)
-tm 15873,17850 2 161177 -- MSL 313 (19U 153)
-u2017 15873,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 15873,17880 2 75169 -- MSL 315 ( 9E 161)
-ao 15873,18900 2 60152 -- MSL 316 ( 7J 248)
-f/ 15873,16695,2265 2 60109 -- MSL 324 ( 7J 205)
-em 15873,7440 0 161175 -- MSL 325 (19U 151)
-en 15873,7440 0 161174 -- MSL 326 (19U 150)
-dd 15873,15060,1185 0 161159 -- MSL 327 (19U 135)
-.i 15873,11445 0 46333 -- MSL 328 ( 5T 253)
-aq 15873,15060 0 161063 -- MSL 329 (19U 39)
-bu 15873,12714 0 161173 -- MSL 331 (19U 149)
-u207F 15873,16035 2 87548 -- MSL 332 (10U 252)
-u0111 15873,16350,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 15873,20805 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 15873,17310,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 15873,15060,4437 1 75173 -- MSL 404 ( 9E 165)
-u0061_0328 15873,11775,4680 1 75193 -- MSL 405 ( 9E 185)
-'C 15873,21375,330 2 75206 -- MSL 406 ( 9E 198)
-'c 15873,17880,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 15873,21375,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15873,17880,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 15873,21375 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15873,18990,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15873,21375 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 15873,17880,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15873,15060,4437 1 75210 -- MSL 422 ( 9E 202)
-u0065_0328 15873,11775,4680 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15873,21375 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 15873,22497 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15873,18990 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 15873,18990 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15873,21375,330 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15873,17880 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15873,21375,330 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15873,17880 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 15873,22215,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15873,18720,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15873,21375 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 15873,17880 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15873,21375 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 15873,17880 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 15873,21375,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 15873,17880,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15873,21375 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 15873,18990,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15873,15060,5457 1 75230 -- MSL 468 ( 9E 222)
-u0074_0327 15873,14940,5469 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 15873,22215,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15873,18720,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 15873,21780,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15873,18900,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 15873,21375 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 15873,17880 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 15873,20790 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 15873,16890 2 75199 -- MSL 485 ( 9E 191)
-u2070 15873,16035 2 51753 -- MSL 1000 ( 6J 41)
-u2074 15873,16035 2 51748 -- MSL 1001 ( 6J 36)
-u2075 15873,15825 2 51749 -- MSL 1002 ( 6J 37)
-u2076 15873,16035 2 51806 -- MSL 1003 ( 6J 94)
-u2077 15873,15825 2 51750 -- MSL 1004 ( 6J 38)
-u2078 15873,16035 2 51754 -- MSL 1005 ( 6J 42)
-u2079 15873,16035 2 51752 -- MSL 1006 ( 6J 40)
-lq 15873,15060 0 161171 -- MSL 1017 (19U 147)
-rq 15873,15060 0 161172 -- MSL 1018 (19U 148)
-Bq 15873,4602,2358 0 161156 -- MSL 1019 (19U 132)
-u2003 15873,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15873,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 15873,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 15873,2925,330 0 161157 -- MSL 1028 (19U 133)
-vz 15873,17880 2 75166 -- MSL 1031 ( 9E 158)
-u2120 15873,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 15873,15060,2466 0 51794 -- MSL 1036 ( 6J 82)
-fi 15873,16920 2 60077 -- MSL 1040 ( 7J 173)
-fl 15873,16350 2 60078 -- MSL 1041 ( 7J 174)
-ff 15873,16350 2 51883 -- MSL 1042 ( 6J 171)
-Fi 15873,16350 2 51884 -- MSL 1043 ( 6J 172)
-Fl 15873,16350 2 51885 -- MSL 1044 ( 6J 173)
-ij 15873,16920,4845 3 60134 -- MSL 1047 ( 7J 230)
-u2105 15873,16695,2985 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 15873,20805,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15873,17310,4845 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 15873,15390,5457 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 15873,11775,5469 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 15873,20790 2 46301 -- MSL 1065 ( 5T 221)
-bq 15873,4605,2355 0 161154 -- MSL 1067 (19U 130)
-%0 15873,16275,900 2 161161 -- MSL 1068 (19U 137)
-a- 15873,15567 2 60154 -- MSL 1084 ( 7J 250)
-ab 15873,17310 2 75170 -- MSL 1086 ( 9E 162)
-a. 15873,16890 2 75263 -- MSL 1088 ( 9E 255)
-oe 15873,11775,330 0 161180 -- MSL 1090 (19U 156)
-OE 15873,15060 0 161164 -- MSL 1091 (19U 140)
-fo 15873,11085 0 161163 -- MSL 1092 (19U 139)
-fc 15873,11085 0 161179 -- MSL 1093 (19U 155)
-sq 15873,14106 0 60091 -- MSL 1094 ( 7J 187)
-/L 15873,15060 0 75171 -- MSL 1095 ( 9E 163)
-/l 15873,16350 2 75187 -- MSL 1096 ( 9E 179)
-a" 15873,18720 2 75197 -- MSL 1097 ( 9E 189)
-ho 15873,573,4680 1 75186 -- MSL 1098 ( 9E 178)
-vZ 15873,21375 2 75150 -- MSL 1106 ( 9E 142)
-IJ 15873,15060,3837 0 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/CBI b/contrib/groff/font/devlj4/CBI
deleted file mode 100644
index 3bb4a75c0681..000000000000
--- a/contrib/groff/font/devlj4/CBI
+++ /dev/null
@@ -1,331 +0,0 @@
-# Courier BdIt
-name CBI
-spacewidth 15873
-slant 11.300000
-pcltypeface 4099
-pclproportional 0
-pclweight 3
-pclstyle 1
-charset
-! 15873,15060,330,0,-3017 0 161057 -- MSL 1 (19U 33)
-dq 15873,15060,0,0,-2660 0 161058 -- MSL 2 (19U 34)
-" "
-sh 15873,17091,1389,279,363,279 2 161059 -- MSL 3 (19U 35)
-# "
-Do 15873,17007,3306,0,279 2 161060 -- MSL 4 (19U 36)
-$ "
-% 15873,16275,900,0,-395 2 161061 -- MSL 5 (19U 37)
-& 15873,14238,330,0,426 0 161062 -- MSL 6 (19U 38)
-cq 15873,15060,0,0,-2744 0 161170 -- MSL 8 (19U 146)
-' "
-( 15873,16935,2295,0,-3092 2 161064 -- MSL 9 (19U 40)
-) 15873,16935,2295,0,-1823 2 161065 -- MSL 10 (19U 41)
-* 15873,15060,0,0,-1496 0 161066 -- MSL 11 (19U 42)
-+ 15873,11535,0,0,-890 0 161067 -- MSL 12 (19U 43)
-, 15873,4305,2655,0,-1505 0 161068 -- MSL 13 (19U 44)
-hy 15873,8805,0,0,-2318 0 161069 -- MSL 14 (19U 45)
-- "
-. 15873,3675,330,0,-2804 0 161070 -- MSL 15 (19U 46)
-sl 15873,18300,3525,1224,1512,614 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15873,16155,330,0,-926 2 161072 -- MSL 17 (19U 48)
-1 15873,16155,0,0,324 2 161073 -- MSL 18 (19U 49)
-2 15873,16155,0,0,1044 2 161074 -- MSL 19 (19U 50)
-3 15873,16155,330,0,891 2 161075 -- MSL 20 (19U 51)
-4 15873,16155,0,0,345 2 161076 -- MSL 21 (19U 52)
-5 15873,15825,330,0,621 2 161077 -- MSL 22 (19U 53)
-6 15873,16155,330,342,-761,342 2 161078 -- MSL 23 (19U 54)
-7 15873,15825,0,0,-1226 2 161079 -- MSL 24 (19U 55)
-8 15873,16155,330,0,-464 2 161080 -- MSL 25 (19U 56)
-9 15873,16155,330,0,297 2 161081 -- MSL 26 (19U 57)
-: 15873,10572,330,0,-2801 0 161082 -- MSL 27 (19U 58)
-; 15873,10572,2655,0,-830 0 161083 -- MSL 28 (19U 59)
-< 15873,11667,243,0,-599 0 161084 -- MSL 29 (19U 60)
-= 15873,8886,0,0,-950 0 161085 -- MSL 30 (19U 61)
-> 15873,11667,243,0,-1523 0 161086 -- MSL 31 (19U 62)
-? 15873,15390,330,0,-2030 2 161087 -- MSL 32 (19U 63)
-at 15873,15273,489,1020,1203,614 2 161088 -- MSL 33 (19U 64)
-@ "
-A 15873,15060,0,69,2868,69 0 161089 -- MSL 34 (19U 65)
-B 15873,15060,0,0,1992 0 161090 -- MSL 35 (19U 66)
-C 15873,15390,330,903,228,614 2 161091 -- MSL 36 (19U 67)
-D 15873,15060,0,369,2277,369 0 161092 -- MSL 37 (19U 68)
-E 15873,15060,0,1254,1719,614 0 161093 -- MSL 38 (19U 69)
-F 15873,15060,0,1527,1293,614 0 161094 -- MSL 39 (19U 70)
-G 15873,15390,330,1224,585,614 2 161095 -- MSL 40 (19U 71)
-H 15873,15060,0,1878,2172,614 0 161096 -- MSL 41 (19U 72)
-I 15873,15060,0,321,615,321 0 161097 -- MSL 42 (19U 73)
-J 15873,15060,330,2331,1152,614 0 161098 -- MSL 43 (19U 74)
-K 15873,15060,0,1890,1569,614 0 161099 -- MSL 44 (19U 75)
-L 15873,15060,0,27,1602,27 0 161100 -- MSL 45 (19U 76)
-M 15873,15060,0,2508,3099,614 0 161101 -- MSL 46 (19U 77)
-N 15873,15060,330,2625,2439,614 0 161102 -- MSL 47 (19U 78)
-O 15873,15390,330,447,633,447 2 161103 -- MSL 48 (19U 79)
-P 15873,15060,0,816,774,614 0 161104 -- MSL 49 (19U 80)
-Q 15873,15390,3408,453,678,453 2 161105 -- MSL 50 (19U 81)
-R 15873,15060,0,0,1977 0 161106 -- MSL 51 (19U 82)
-S 15873,15390,330,0,1386 2 161107 -- MSL 52 (19U 83)
-T 15873,15060,0,1578,210,614 0 161108 -- MSL 53 (19U 84)
-U 15873,15060,330,2124,75,614 0 161109 -- MSL 54 (19U 85)
-V 15873,15060,0,2718,504,614 0 161110 -- MSL 55 (19U 86)
-W 15873,15060,0,2757,552,614 0 161111 -- MSL 56 (19U 87)
-X 15873,15060,0,1509,2286,614 0 161112 -- MSL 57 (19U 88)
-Y 15873,15060,0,2043,-167,614 0 161113 -- MSL 58 (19U 89)
-Z 15873,15060,0,159,1026,159 0 161114 -- MSL 59 (19U 90)
-lB 15873,16935,2295,0,-1994 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 15873,18300,3525,0,-2522 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 15873,16935,2295,0,-1631 2 161117 -- MSL 62 (19U 93)
-] "
-ha 15873,19758,0,0,-1313 2 161118 -- MSL 63 (19U 94)
-_ 15873,0,6588,1317,1317,614 1 161119 -- MSL 64 (19U 95)
-oq 15873,15060,0,0,-3344 0 161169 -- MSL 66 (19U 145)
-` "
-a 15873,11775,330,0,837 0 161121 -- MSL 67 (19U 97)
-b 15873,16350,330,390,1974,390 2 161122 -- MSL 68 (19U 98)
-c 15873,11775,330,0,282 0 161123 -- MSL 69 (19U 99)
-d 15873,16350,330,183,1038,183 2 161124 -- MSL 70 (19U 100)
-e 15873,11775,330,0,228 0 161125 -- MSL 71 (19U 101)
-f 15873,16350,0,1308,39,614 2 161126 -- MSL 72 (19U 102)
-g 15873,11775,4845,1260,1542,614 1 161127 -- MSL 73 (19U 103)
-h 15873,16350,0,0,2550 2 161128 -- MSL 74 (19U 104)
-i 15873,16920,0,0,606 2 161129 -- MSL 75 (19U 105)
-j 15873,16920,4845,0,1428 3 161130 -- MSL 76 (19U 106)
-k 15873,16350,0,0,2061 2 161131 -- MSL 77 (19U 107)
-l 15873,16350,0,0,570 2 161132 -- MSL 78 (19U 108)
-m 15873,11775,0,417,3222,417 0 161133 -- MSL 79 (19U 109)
-n 15873,11775,0,0,2292 0 161134 -- MSL 80 (19U 110)
-o 15873,11775,330,0,858 0 161135 -- MSL 81 (19U 111)
-p 15873,11775,4845,330,3072,330 1 161136 -- MSL 82 (19U 112)
-q 15873,11775,4845,1644,810,614 1 161137 -- MSL 83 (19U 113)
-r 15873,11775,0,735,1257,614 0 161138 -- MSL 84 (19U 114)
-s 15873,11775,330,0,798 0 161139 -- MSL 85 (19U 115)
-t 15873,14985,330,0,-1244 0 161140 -- MSL 86 (19U 116)
-u 15873,11445,330,0,432 0 161141 -- MSL 87 (19U 117)
-v 15873,11445,0,1554,936,614 0 161142 -- MSL 88 (19U 118)
-w 15873,11445,0,1896,1278,614 0 161143 -- MSL 89 (19U 119)
-x 15873,11445,0,894,2469,614 0 161144 -- MSL 90 (19U 120)
-y 15873,11445,4845,1887,2409,614 1 161145 -- MSL 91 (19U 121)
-z 15873,11445,0,0,498 0 161146 -- MSL 92 (19U 122)
-{ 15873,20130,6075,1548,-2003,614 3 161147 -- MSL 93 (19U 123)
-lC "
-| 15873,19758,6588,0,-5945 3 161148 -- MSL 94 (19U 124)
-ba "
-} 15873,20130,6075,0,996 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 15873,8160,0,0,-791 0 161150 -- MSL 96 (19U 126)
-`A 15873,21495,0,69,2868,69 2 161216 -- MSL 99 (19U 192)
-^A 15873,21495,0,69,2868,69 2 161218 -- MSL 100 (19U 194)
-`E 15873,21495,0,1254,1719,614 2 161224 -- MSL 101 (19U 200)
-^E 15873,21495,0,1254,1719,614 2 161226 -- MSL 102 (19U 202)
-:E 15873,20520,0,1254,1719,614 2 161227 -- MSL 103 (19U 203)
-^I 15873,21495,0,609,615,609 2 161230 -- MSL 104 (19U 206)
-:I 15873,20520,0,321,615,321 2 161231 -- MSL 105 (19U 207)
-aa 15873,18000,0,0,-3248 2 161204 -- MSL 106 (19U 180)
-ga 15873,18000,0,0,-2834 2 161120 -- MSL 107 (19U 96)
-a^ 15873,18000,0,9,-2342,9 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15873,16890,0,0,-4019 2 161192 -- MSL 109 (19U 168)
-~ 15873,16959,0,594,-2030,594 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 15873,21495,330,2124,75,614 2 161241 -- MSL 111 (19U 217)
-^U 15873,21495,330,2124,75,614 2 161243 -- MSL 112 (19U 219)
-u00AF 15873,21108,0,1317,1317,614 2 161199 -- MSL 113 (19U 175)
-'Y 15873,21495,0,2043,-167,614 2 161245 -- MSL 114 (19U 221)
-'y 15873,18000,4845,1887,2409,614 3 161277 -- MSL 115 (19U 253)
-de 15873,16155,0,0,-3119 2 161200 -- MSL 116 (19U 176)
-,C 15873,15390,5721,903,228,614 3 161223 -- MSL 117 (19U 199)
-,c 15873,11775,5562,0,282 1 161255 -- MSL 118 (19U 231)
-~N 15873,20487,330,2625,2439,614 2 161233 -- MSL 119 (19U 209)
-~n 15873,16959,0,594,2292,594 2 161265 -- MSL 120 (19U 241)
-r! 15873,11904,3486,0,-3410 0 161185 -- MSL 121 (19U 161)
-r? 15873,11868,3852,0,-746 0 161215 -- MSL 122 (19U 191)
-Cs 15873,15834,0,345,348,345 2 161188 -- MSL 123 (19U 164)
-Po 15873,16155,603,192,-107,192 2 161187 -- MSL 124 (19U 163)
-Ye 15873,15825,0,2160,-341,614 2 161189 -- MSL 125 (19U 165)
-sc 15873,15390,1692,0,-1331 2 161191 -- MSL 126 (19U 167)
-Fn 15873,16350,3135,12,1572,12 2 161155 -- MSL 127 (19U 131)
-ct 15873,15978,1419,0,-1067 2 161186 -- MSL 128 (19U 162)
-^a 15873,18000,330,9,837,9 2 161250 -- MSL 129 (19U 226)
-^e 15873,18000,330,9,228,9 2 161258 -- MSL 130 (19U 234)
-^o 15873,18000,330,9,858,9 2 161268 -- MSL 131 (19U 244)
-^u 15873,18000,330,9,432,9 2 161275 -- MSL 132 (19U 251)
-'a 15873,18000,330,0,837 2 161249 -- MSL 133 (19U 225)
-'e 15873,18000,330,0,228 2 161257 -- MSL 134 (19U 233)
-'o 15873,18000,330,0,858 2 161267 -- MSL 135 (19U 243)
-'u 15873,18000,330,0,432 2 161274 -- MSL 136 (19U 250)
-`a 15873,18000,330,0,837 2 161248 -- MSL 137 (19U 224)
-`e 15873,18000,330,0,228 2 161256 -- MSL 138 (19U 232)
-`o 15873,18000,330,0,858 2 161266 -- MSL 139 (19U 242)
-`u 15873,18000,330,0,432 2 161273 -- MSL 140 (19U 249)
-:a 15873,16890,330,0,837 2 161252 -- MSL 141 (19U 228)
-:e 15873,16890,330,0,228 2 161259 -- MSL 142 (19U 235)
-:o 15873,16890,330,0,858 2 161270 -- MSL 143 (19U 246)
-:u 15873,16890,330,0,432 2 161276 -- MSL 144 (19U 252)
-oA 15873,21780,0,69,2868,69 2 161221 -- MSL 145 (19U 197)
-^i 15873,18000,0,9,606,9 2 161262 -- MSL 146 (19U 238)
-/O 15873,15501,528,1206,1434,614 2 161240 -- MSL 147 (19U 216)
-AE 15873,15060,0,2391,2655,614 0 161222 -- MSL 148 (19U 198)
-oa 15873,18381,330,0,837 2 161253 -- MSL 149 (19U 229)
-'i 15873,18000,0,0,606 2 161261 -- MSL 150 (19U 237)
-/o 15873,11901,591,486,1311,486 0 161272 -- MSL 151 (19U 248)
-ae 15873,11775,330,654,2010,614 0 161254 -- MSL 152 (19U 230)
-:A 15873,20520,0,69,2868,69 2 161220 -- MSL 153 (19U 196)
-`i 15873,18000,0,0,606 2 161260 -- MSL 154 (19U 236)
-:O 15873,20520,330,447,633,447 2 161238 -- MSL 155 (19U 214)
-:U 15873,20520,330,2124,75,614 2 161244 -- MSL 156 (19U 220)
-'E 15873,21495,0,1254,1719,614 2 161225 -- MSL 157 (19U 201)
-:i 15873,16890,0,0,606 2 161263 -- MSL 158 (19U 239)
-ss 15873,16350,330,0,2220 2 161247 -- MSL 159 (19U 223)
-^O 15873,21495,330,609,633,609 2 161236 -- MSL 160 (19U 212)
-'A 15873,21495,0,69,2868,69 2 161217 -- MSL 161 (19U 193)
-~A 15873,20487,0,174,2868,174 2 161219 -- MSL 162 (19U 195)
-~a 15873,16959,330,594,837,594 2 161251 -- MSL 163 (19U 227)
--D 15873,15060,0,366,2280,366 0 161232 -- MSL 164 (19U 208)
-Sd 15873,18222,330,0,171 2 161264 -- MSL 165 (19U 240)
-'I 15873,21495,0,321,615,321 2 161229 -- MSL 166 (19U 205)
-`I 15873,21495,0,321,615,321 2 161228 -- MSL 167 (19U 204)
-'O 15873,21495,330,591,633,591 2 161235 -- MSL 168 (19U 211)
-`O 15873,21495,330,447,633,447 2 161234 -- MSL 169 (19U 210)
-~O 15873,20487,330,1986,633,614 2 161237 -- MSL 170 (19U 213)
-~o 15873,16959,330,594,858,594 2 161269 -- MSL 171 (19U 245)
-vS 15873,21495,330,984,1386,614 2 161162 -- MSL 172 (19U 138)
-vs 15873,18000,330,9,798,9 2 161178 -- MSL 173 (19U 154)
-'U 15873,21495,330,2124,75,614 2 161242 -- MSL 174 (19U 218)
-:Y 15873,20520,0,2043,-167,614 2 161183 -- MSL 175 (19U 159)
-:y 15873,16890,4845,1887,2409,614 3 161279 -- MSL 176 (19U 255)
-TP 15873,15060,0,222,2166,222 0 161246 -- MSL 177 (19U 222)
-Tp 15873,16350,4845,330,3075,330 3 161278 -- MSL 178 (19U 254)
-mc 15873,11445,5580,114,-11,114 1 161205 -- MSL 180 (19U 181)
-ps 15873,19635,4080,0,-1307 2 161206 -- MSL 181 (19U 182)
-34 15873,16674,2286,4155,1086,614 2 161214 -- MSL 182 (19U 190)
-\- 15873,7020,0,0,-950 0 60096 -- MSL 183 ( 7J 192)
-14 15873,16674,2286,4458,1638,614 2 161212 -- MSL 184 (19U 188)
-12 15873,16674,2286,3384,1857,614 2 161213 -- MSL 185 (19U 189)
-Of 15873,16155,0,0,-3527 2 161194 -- MSL 186 (19U 170)
-Om 15873,16155,0,0,-3587 2 161210 -- MSL 187 (19U 186)
-Fo 15873,11625,0,354,1047,354 0 161195 -- MSL 188 (19U 171)
-Fc 15873,11625,0,0,1605 0 161211 -- MSL 190 (19U 187)
-t+- 15873,11535,3360,0,-890 0 161201 -- MSL 191 (19U 177)
-bb 15873,19083,5916,0,-5945 3 161190 -- MSL 192 (19U 166)
-co 15873,19635,0,225,-1133,225 2 161193 -- MSL 193 (19U 169)
-tno 15873,9420,0,0,-950 0 161196 -- MSL 194 (19U 172)
-u00AD 15873,8805,0,0,-2318 0 161197 -- MSL 195 (19U 173)
-rg 15873,19635,0,225,-1133,225 2 161198 -- MSL 196 (19U 174)
-S2 15873,16170,0,0,-3062 2 161202 -- MSL 197 (19U 178)
-S3 15873,16170,0,0,-3161 2 161203 -- MSL 198 (19U 179)
-ac 15873,0,5562,0,-2264 1 161208 -- MSL 199 (19U 184)
-S1 15873,16170,0,0,-3065 2 161209 -- MSL 200 (19U 185)
-tmu 15873,11646,0,0,-797 0 161239 -- MSL 201 (19U 215)
-tdi 15873,11190,0,0,-1109 0 161271 -- MSL 202 (19U 247)
-u203C 15873,15060,330,0,-167 0 87315 -- MSL 221 (10U 19)
-u20A7 15873,15060,330,792,2466,614 0 60121 -- MSL 232 ( 7J 217)
-pc 15873,10128,0,0,-4289 0 161207 -- MSL 302 (19U 183)
-u013F 15873,15060,0,27,1602,27 0 51943 -- MSL 306 ( 6J 231)
-u0140 15873,16350,0,2742,570,614 2 51959 -- MSL 307 ( 6J 247)
-u2113 15873,18045,765,0,-1820 2 60122 -- MSL 308 ( 7J 218)
-u0149 15873,15060,0,0,2070 0 51951 -- MSL 309 ( 6J 239)
-fm 15873,15825,0,0,-5123 2 60101 -- MSL 310 ( 7J 197)
-sd 15873,15825,0,0,-2747 2 60102 -- MSL 311 ( 7J 198)
-dg 15873,15060,1185,0,-1775 0 161158 -- MSL 312 (19U 134)
-tm 15873,17850,0,108,-416,108 2 161177 -- MSL 313 (19U 153)
-u2017 15873,0,6588,1317,1317,614 1 60095 -- MSL 314 ( 7J 191)
-ah 15873,18000,0,9,-2342,9 2 75169 -- MSL 315 ( 9E 161)
-ao 15873,18381,0,0,-5318 2 60152 -- MSL 316 ( 7J 248)
-f/ 15873,16695,2265,2712,2529,614 2 60109 -- MSL 324 ( 7J 205)
-em 15873,8805,0,1707,1929,614 0 161175 -- MSL 325 (19U 151)
-en 15873,8805,0,0,-362 0 161174 -- MSL 326 (19U 150)
-dd 15873,15060,1185,0,-1775 0 161159 -- MSL 327 (19U 135)
-.i 15873,11445,0,0,606 0 46333 -- MSL 328 ( 5T 253)
-aq 15873,15060,0,0,-4982 0 161063 -- MSL 329 (19U 39)
-bu 15873,12714,0,0,-1847 0 161173 -- MSL 331 (19U 149)
-u207F 15873,16170,0,0,-980 2 87548 -- MSL 332 (10U 252)
-u0111 15873,16350,330,1830,1017,614 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 15873,20805,0,1683,2868,614 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 15873,17340,330,993,837,614 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 15873,15060,4437,69,2868,69 1 75173 -- MSL 404 ( 9E 165)
-u0061_0328 15873,11775,4665,0,837 1 75193 -- MSL 405 ( 9E 185)
-'C 15873,21495,330,903,228,614 2 75206 -- MSL 406 ( 9E 198)
-'c 15873,18000,330,0,282 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 15873,21495,330,1734,228,614 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15873,18000,330,759,282,614 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 15873,21495,0,984,2277,614 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15873,18990,330,5229,2244,614 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15873,21495,0,1284,1719,614 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 15873,18000,330,609,228,609 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15873,15060,4437,1254,1719,614 1 75210 -- MSL 422 ( 9E 202)
-u0065_0328 15873,11775,4665,0,228 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15873,21495,0,27,1602,27 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 15873,22752,0,0,570 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15873,18990,0,3591,1602,614 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 15873,18990,0,3753,570,614 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15873,21495,330,2625,2439,614 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15873,18000,0,0,2292 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15873,21495,330,2625,2439,614 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15873,18000,0,9,2292,9 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 15873,22215,330,3525,633,614 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15873,18720,330,2916,858,614 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15873,21495,0,141,1977,141 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 15873,18000,0,735,1257,614 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15873,21495,0,984,1977,614 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 15873,18000,0,735,1257,614 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 15873,21495,330,591,1386,591 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 15873,18000,330,0,798 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15873,21495,0,1578,210,614 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 15873,18990,330,1344,-1244,614 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15873,15060,5721,1578,210,614 1 75230 -- MSL 468 ( 9E 222)
-u0074_0327 15873,14985,5562,0,-1244 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 15873,22215,330,2625,75,614 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15873,18720,330,1866,432,614 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 15873,21780,330,2124,75,614 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15873,18381,330,0,432 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 15873,21495,0,591,1026,591 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 15873,18000,0,0,498 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 15873,20520,0,159,1026,159 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 15873,16890,0,0,498 2 75199 -- MSL 485 ( 9E 191)
-u2070 15873,16170,0,0,-4139 2 51753 -- MSL 1000 ( 6J 41)
-u2074 15873,16170,0,0,-3293 2 51748 -- MSL 1001 ( 6J 36)
-u2075 15873,15960,0,0,-3371 2 51749 -- MSL 1002 ( 6J 37)
-u2076 15873,16170,0,0,-3953 2 51806 -- MSL 1003 ( 6J 94)
-u2077 15873,15960,0,0,-4652 2 51750 -- MSL 1004 ( 6J 38)
-u2078 15873,16170,0,0,-3758 2 51754 -- MSL 1005 ( 6J 42)
-u2079 15873,16170,0,0,-3677 2 51752 -- MSL 1006 ( 6J 40)
-lq 15873,15060,0,387,-740,387 0 161171 -- MSL 1017 (19U 147)
-rq 15873,15060,0,0,-143 0 161172 -- MSL 1018 (19U 148)
-Bq 15873,4596,2364,0,1314 0 161156 -- MSL 1019 (19U 132)
-u2003 15873,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15873,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 15873,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 15873,3675,330,0,2394 0 161157 -- MSL 1028 (19U 133)
-vz 15873,18000,0,9,498,9 2 75166 -- MSL 1031 ( 9E 158)
-u2120 15873,18000,0,1146,-281,614 2 128299 -- MSL 1034 (15U 43)
-u211E 15873,15060,3708,1215,369,614 0 51794 -- MSL 1036 ( 6J 82)
-fi 15873,16920,0,438,2340,438 2 60077 -- MSL 1040 ( 7J 173)
-fl 15873,16350,0,336,2337,336 2 60078 -- MSL 1041 ( 7J 174)
-ff 15873,16350,0,4086,2349,614 2 51883 -- MSL 1042 ( 6J 171)
-Fi 15873,16350,0,2229,2946,614 2 51884 -- MSL 1043 ( 6J 172)
-Fl 15873,16350,0,1425,2949,614 2 51885 -- MSL 1044 ( 6J 173)
-ij 15873,16920,4845,738,1320,614 3 60134 -- MSL 1047 ( 7J 230)
-u2105 15873,16479,2886,681,939,614 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 15873,20805,330,1983,585,614 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15873,17340,4845,1260,1542,614 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 15873,15390,5721,0,1386 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 15873,11775,5562,0,798 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 15873,20520,0,321,615,321 2 46301 -- MSL 1065 ( 5T 221)
-bq 15873,4596,2364,0,-1646 0 161154 -- MSL 1067 (19U 130)
-%0 15873,16275,900,3066,3417,614 2 161161 -- MSL 1068 (19U 137)
-a- 15873,16032,0,537,-2186,537 2 60154 -- MSL 1084 ( 7J 250)
-ab 15873,17340,0,993,-2840,614 2 75170 -- MSL 1086 ( 9E 162)
-a. 15873,16890,0,0,-6185 2 75263 -- MSL 1088 ( 9E 255)
-oe 15873,11775,330,1284,1977,614 0 161180 -- MSL 1090 (19U 156)
-OE 15873,15060,0,2781,1740,614 0 161164 -- MSL 1091 (19U 140)
-fo 15873,11070,0,0,-2003 0 161163 -- MSL 1092 (19U 139)
-fc 15873,11070,0,0,-1388 0 161179 -- MSL 1093 (19U 155)
-sq 15873,14106,0,0,-443 0 60091 -- MSL 1094 ( 7J 187)
-/L 15873,15060,0,27,1602,27 0 75171 -- MSL 1095 ( 9E 163)
-/l 15873,16350,0,0,570 2 75187 -- MSL 1096 ( 9E 179)
-a" 15873,18720,0,2916,-4082,614 2 75197 -- MSL 1097 ( 9E 189)
-ho 15873,564,4665,0,-4916 1 75186 -- MSL 1098 ( 9E 178)
-vZ 15873,21495,0,984,1026,614 2 75150 -- MSL 1106 ( 9E 142)
-IJ 15873,15060,3849,1506,1941,614 0 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/CI b/contrib/groff/font/devlj4/CI
deleted file mode 100644
index 556e98c78918..000000000000
--- a/contrib/groff/font/devlj4/CI
+++ /dev/null
@@ -1,331 +0,0 @@
-# Courier It
-name CI
-spacewidth 15873
-slant 11.300000
-pcltypeface 4099
-pclproportional 0
-pclweight 0
-pclstyle 1
-charset
-! 15873,15060,330,0,-5231 0 161057 -- MSL 1 (19U 33)
-dq 15873,15060,0,0,-4631 0 161058 -- MSL 2 (19U 34)
-" "
-sh 15873,16827,2046,1710,-1472,610 2 161059 -- MSL 3 (19U 35)
-# "
-Do 15873,17259,3642,954,-1643,610 2 161060 -- MSL 4 (19U 36)
-$ "
-% 15873,16380,330,1140,-2168,610 2 161061 -- MSL 5 (19U 37)
-& 15873,14169,330,1563,-1910,610 0 161062 -- MSL 6 (19U 38)
-cq 15873,15060,0,0,-5216 0 161170 -- MSL 8 (19U 146)
-' "
-( 15873,17070,2580,1185,-7562,610 2 161064 -- MSL 9 (19U 40)
-) 15873,17070,2580,0,-2012 2 161065 -- MSL 10 (19U 41)
-* 15873,15060,0,174,-3272,174 0 161066 -- MSL 11 (19U 42)
-+ 15873,11385,0,252,-2150,252 0 161067 -- MSL 12 (19U 43)
-, 15873,3195,3420,0,-2999 0 161068 -- MSL 13 (19U 44)
-hy 15873,6570,0,0,-3740 0 161069 -- MSL 14 (19U 45)
-- "
-. 15873,3105,330,0,-5039 0 161070 -- MSL 15 (19U 46)
-sl 15873,18465,3765,2349,-698,610 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15873,15390,330,399,-2831,399 0 161072 -- MSL 17 (19U 48)
-1 15873,15060,0,0,-1493 0 161073 -- MSL 18 (19U 49)
-2 15873,15390,0,423,-785,423 0 161074 -- MSL 19 (19U 50)
-3 15873,15390,330,0,-1112 0 161075 -- MSL 20 (19U 51)
-4 15873,15060,0,0,-1547 0 161076 -- MSL 21 (19U 52)
-5 15873,15060,330,882,-1169,610 0 161077 -- MSL 22 (19U 53)
-6 15873,15390,330,1530,-2435,610 0 161078 -- MSL 23 (19U 54)
-7 15873,15060,0,954,-2828,610 0 161079 -- MSL 24 (19U 55)
-8 15873,15390,330,624,-2225,610 0 161080 -- MSL 25 (19U 56)
-9 15873,15390,330,684,-1658,610 0 161081 -- MSL 26 (19U 57)
-: 15873,9975,330,0,-5042 0 161082 -- MSL 27 (19U 58)
-; 15873,9975,3420,0,-3176 0 161083 -- MSL 28 (19U 59)
-< 15873,10647,3,0,-1154 0 161084 -- MSL 29 (19U 60)
-= 15873,8451,0,252,-2150,252 0 161085 -- MSL 30 (19U 61)
-> 15873,10647,3,0,-1958 0 161086 -- MSL 31 (19U 62)
-? 15873,15390,330,483,-4172,483 0 161087 -- MSL 32 (19U 63)
-at 15873,14391,363,2031,-1358,610 0 161088 -- MSL 33 (19U 64)
-@ "
-A 15873,15060,0,1470,1092,610 0 161089 -- MSL 34 (19U 65)
-B 15873,15060,0,1383,171,610 0 161090 -- MSL 35 (19U 66)
-C 15873,15390,330,2835,-1688,610 0 161091 -- MSL 36 (19U 67)
-D 15873,15060,0,2061,537,610 0 161092 -- MSL 37 (19U 68)
-E 15873,15060,0,2724,-152,610 0 161093 -- MSL 38 (19U 69)
-F 15873,15060,0,3120,-470,610 0 161094 -- MSL 39 (19U 70)
-G 15873,15390,330,2259,-956,610 0 161095 -- MSL 40 (19U 71)
-H 15873,15060,0,3483,285,610 0 161096 -- MSL 41 (19U 72)
-I 15873,15060,0,1764,-1187,610 0 161097 -- MSL 42 (19U 73)
-J 15873,15060,330,3729,-368,610 0 161098 -- MSL 43 (19U 74)
-K 15873,15060,0,3453,-209,610 0 161099 -- MSL 44 (19U 75)
-L 15873,15060,0,1512,-134,610 0 161100 -- MSL 45 (19U 76)
-M 15873,15060,0,4218,1107,610 0 161101 -- MSL 46 (19U 77)
-N 15873,15060,0,4182,738,610 0 161102 -- MSL 47 (19U 78)
-O 15873,15390,330,2058,-1136,610 0 161103 -- MSL 48 (19U 79)
-P 15873,15060,0,2262,-785,610 0 161104 -- MSL 49 (19U 80)
-Q 15873,15390,3357,2037,-1073,610 0 161105 -- MSL 50 (19U 81)
-R 15873,15060,0,1248,234,610 0 161106 -- MSL 51 (19U 82)
-S 15873,15390,330,1893,-803,610 0 161107 -- MSL 52 (19U 83)
-T 15873,15060,0,3183,-1967,610 0 161108 -- MSL 53 (19U 84)
-U 15873,15060,330,4095,-2096,610 0 161109 -- MSL 54 (19U 85)
-V 15873,15060,0,4191,-1724,610 0 161110 -- MSL 55 (19U 86)
-W 15873,15060,0,4260,-1670,610 0 161111 -- MSL 56 (19U 87)
-X 15873,15060,0,3177,522,610 0 161112 -- MSL 57 (19U 88)
-Y 15873,15060,0,3672,-2261,610 0 161113 -- MSL 58 (19U 89)
-Z 15873,15060,0,1707,-806,610 0 161114 -- MSL 59 (19U 90)
-lB 15873,17070,2580,1815,-6344,610 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 15873,18465,3765,0,-4673 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 15873,17070,2580,0,-1220 2 161117 -- MSL 62 (19U 93)
-] "
-ha 15873,19758,0,0,-1313 2 161118 -- MSL 63 (19U 94)
-_ 15873,0,6588,1317,1317,610 1 161119 -- MSL 64 (19U 95)
-oq 15873,15060,0,0,-6266 0 161169 -- MSL 66 (19U 145)
-` "
-a 15873,11775,330,531,-695,531 0 161121 -- MSL 67 (19U 97)
-b 15873,16500,330,1602,723,610 2 161122 -- MSL 68 (19U 98)
-c 15873,11775,330,1542,-1616,610 0 161123 -- MSL 69 (19U 99)
-d 15873,16500,330,2148,-1142,610 2 161124 -- MSL 70 (19U 100)
-e 15873,11775,330,1269,-1610,610 0 161125 -- MSL 71 (19U 101)
-f 15873,16500,0,2262,-1172,610 2 161126 -- MSL 72 (19U 102)
-g 15873,11775,5145,2622,-95,610 1 161127 -- MSL 73 (19U 103)
-h 15873,16500,0,1179,387,610 2 161128 -- MSL 74 (19U 104)
-i 15873,17235,0,0,-1259 2 161129 -- MSL 75 (19U 105)
-j 15873,17235,5145,0,81 3 161130 -- MSL 76 (19U 106)
-k 15873,16500,0,1857,24,610 2 161131 -- MSL 77 (19U 107)
-l 15873,16500,0,0,-1130 2 161132 -- MSL 78 (19U 108)
-m 15873,11775,0,1746,1188,610 0 161133 -- MSL 79 (19U 109)
-n 15873,11775,0,960,585,610 0 161134 -- MSL 80 (19U 110)
-o 15873,11775,330,1443,-1139,610 0 161135 -- MSL 81 (19U 111)
-p 15873,11775,5145,1500,1920,610 1 161136 -- MSL 82 (19U 112)
-q 15873,11775,5145,3354,-983,610 1 161137 -- MSL 83 (19U 113)
-r 15873,11775,0,2475,-596,610 0 161138 -- MSL 84 (19U 114)
-s 15873,11775,330,915,-1355,610 0 161139 -- MSL 85 (19U 115)
-t 15873,14760,330,738,-3215,610 0 161140 -- MSL 86 (19U 116)
-u 15873,11445,330,726,-1403,610 0 161141 -- MSL 87 (19U 117)
-v 15873,11445,0,3342,-1223,610 0 161142 -- MSL 88 (19U 118)
-w 15873,11445,0,3735,-830,610 0 161143 -- MSL 89 (19U 119)
-x 15873,11445,0,2502,648,610 0 161144 -- MSL 90 (19U 120)
-y 15873,11445,5145,3123,903,610 1 161145 -- MSL 91 (19U 121)
-z 15873,11445,0,1101,-1367,610 0 161146 -- MSL 92 (19U 122)
-{ 15873,20130,6075,2940,-5528,610 3 161147 -- MSL 93 (19U 123)
-lC "
-| 15873,19758,6588,0,-5945 3 161148 -- MSL 94 (19U 124)
-ba "
-} 15873,20130,6075,0,-1058 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 15873,7233,0,0,-1088 0 161150 -- MSL 96 (19U 126)
-`A 15873,21255,0,1470,1092,610 2 161216 -- MSL 99 (19U 192)
-^A 15873,21255,0,1707,1092,610 2 161218 -- MSL 100 (19U 194)
-`E 15873,21255,0,2724,-152,610 2 161224 -- MSL 101 (19U 200)
-^E 15873,21255,0,2724,-152,610 2 161226 -- MSL 102 (19U 202)
-:E 15873,20670,0,2724,-152,610 2 161227 -- MSL 103 (19U 203)
-^I 15873,21255,0,2157,-1187,610 2 161230 -- MSL 104 (19U 206)
-:I 15873,20670,0,1764,-1187,610 2 161231 -- MSL 105 (19U 207)
-aa 15873,17640,0,1401,-6674,610 2 161204 -- MSL 106 (19U 180)
-ga 15873,17640,0,0,-4490 2 161120 -- MSL 107 (19U 96)
-a^ 15873,17640,0,1257,-4490,610 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15873,16905,0,0,-6488 2 161192 -- MSL 109 (19U 168)
-~ 15873,16818,0,1788,-4145,610 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 15873,21255,330,4095,-2096,610 2 161241 -- MSL 111 (19U 217)
-^U 15873,21255,330,4095,-2096,610 2 161243 -- MSL 112 (19U 219)
-u00AF 15873,21108,0,1317,1317,610 2 161199 -- MSL 113 (19U 175)
-'Y 15873,21255,0,3672,-2261,610 2 161245 -- MSL 114 (19U 221)
-'y 15873,17640,5145,3123,903,610 3 161277 -- MSL 115 (19U 253)
-de 15873,15390,0,0,-4463 0 161200 -- MSL 116 (19U 176)
-,C 15873,15390,4815,2835,-1688,610 1 161223 -- MSL 117 (19U 199)
-,c 15873,11775,4815,1542,-1616,610 1 161255 -- MSL 118 (19U 231)
-~N 15873,20580,0,4182,738,610 2 161233 -- MSL 119 (19U 209)
-~n 15873,16818,0,1788,585,610 2 161265 -- MSL 120 (19U 241)
-r! 15873,11946,3444,0,-5714 0 161185 -- MSL 121 (19U 161)
-r? 15873,11946,3774,0,-2576 0 161215 -- MSL 122 (19U 191)
-Cs 15873,15684,0,1560,-2252,610 2 161188 -- MSL 123 (19U 164)
-Po 15873,15390,474,1797,-2231,610 0 161187 -- MSL 124 (19U 163)
-Ye 15873,15060,0,3741,-2177,610 0 161189 -- MSL 125 (19U 165)
-sc 15873,15390,1905,0,-3359 0 161191 -- MSL 126 (19U 167)
-Fn 15873,15090,4350,1704,-773,610 0 161155 -- MSL 127 (19U 131)
-ct 15873,16083,1536,900,-3014,610 2 161186 -- MSL 128 (19U 162)
-^a 15873,17640,330,1257,-695,610 2 161250 -- MSL 129 (19U 226)
-^e 15873,17640,330,1269,-1610,610 2 161258 -- MSL 130 (19U 234)
-^o 15873,17640,330,1443,-1139,610 2 161268 -- MSL 131 (19U 244)
-^u 15873,17640,330,1257,-1403,610 2 161275 -- MSL 132 (19U 251)
-'a 15873,17640,330,1401,-695,610 2 161249 -- MSL 133 (19U 225)
-'e 15873,17640,330,1401,-1610,610 2 161257 -- MSL 134 (19U 233)
-'o 15873,17640,330,1443,-1139,610 2 161267 -- MSL 135 (19U 243)
-'u 15873,17640,330,1401,-1403,610 2 161274 -- MSL 136 (19U 250)
-`a 15873,17640,330,531,-695,531 2 161248 -- MSL 137 (19U 224)
-`e 15873,17640,330,1269,-1610,610 2 161256 -- MSL 138 (19U 232)
-`o 15873,17640,330,1443,-1139,610 2 161266 -- MSL 139 (19U 242)
-`u 15873,17640,330,726,-1403,610 2 161273 -- MSL 140 (19U 249)
-:a 15873,16905,330,531,-695,531 2 161252 -- MSL 141 (19U 228)
-:e 15873,16905,330,1269,-1610,610 2 161259 -- MSL 142 (19U 235)
-:o 15873,16905,330,1443,-1139,610 2 161270 -- MSL 143 (19U 246)
-:u 15873,16905,330,726,-1403,610 2 161276 -- MSL 144 (19U 252)
-oA 15873,21690,0,1470,1092,610 2 161221 -- MSL 145 (19U 197)
-^i 15873,17640,0,1257,-1259,610 2 161262 -- MSL 146 (19U 238)
-/O 15873,15390,453,2697,-332,610 0 161240 -- MSL 147 (19U 216)
-AE 15873,15060,0,2871,855,610 0 161222 -- MSL 148 (19U 198)
-oa 15873,17997,330,531,-695,531 2 161253 -- MSL 149 (19U 229)
-'i 15873,17640,0,1401,-1259,610 2 161261 -- MSL 150 (19U 237)
-/o 15873,11793,330,2241,-290,610 0 161272 -- MSL 151 (19U 248)
-ae 15873,11775,330,2148,-188,610 0 161254 -- MSL 152 (19U 230)
-:A 15873,20670,0,1470,1092,610 2 161220 -- MSL 153 (19U 196)
-`i 15873,17640,0,0,-1259 2 161260 -- MSL 154 (19U 236)
-:O 15873,20670,330,2058,-1136,610 2 161238 -- MSL 155 (19U 214)
-:U 15873,20670,330,4095,-2096,610 2 161244 -- MSL 156 (19U 220)
-'E 15873,21255,0,2724,-152,610 2 161225 -- MSL 157 (19U 201)
-:i 15873,16905,0,0,-1259 2 161263 -- MSL 158 (19U 239)
-ss 15873,16500,330,1746,-65,610 2 161247 -- MSL 159 (19U 223)
-^O 15873,21255,330,2157,-1136,610 2 161236 -- MSL 160 (19U 212)
-'A 15873,21255,0,2217,1092,610 2 161217 -- MSL 161 (19U 193)
-~A 15873,20580,0,2445,1092,610 2 161219 -- MSL 162 (19U 195)
-~a 15873,16818,330,1788,-695,610 2 161251 -- MSL 163 (19U 227)
--D 15873,15060,0,2061,537,610 0 161232 -- MSL 164 (19U 208)
-Sd 15873,18297,330,1614,-1142,610 2 161264 -- MSL 165 (19U 240)
-'I 15873,21255,0,2217,-1187,610 2 161229 -- MSL 166 (19U 205)
-`I 15873,21255,0,1764,-1187,610 2 161228 -- MSL 167 (19U 204)
-'O 15873,21255,330,2217,-1136,610 2 161235 -- MSL 168 (19U 211)
-`O 15873,21255,330,2058,-1136,610 2 161234 -- MSL 169 (19U 210)
-~O 15873,20580,330,2895,-1136,610 2 161237 -- MSL 170 (19U 213)
-~o 15873,16818,330,1788,-1139,610 2 161269 -- MSL 171 (19U 245)
-vS 15873,21255,330,2157,-803,610 2 161162 -- MSL 172 (19U 138)
-vs 15873,17640,330,1257,-1355,610 2 161178 -- MSL 173 (19U 154)
-'U 15873,21255,330,4095,-2096,610 2 161242 -- MSL 174 (19U 218)
-:Y 15873,20670,0,3672,-2261,610 2 161183 -- MSL 175 (19U 159)
-:y 15873,16905,5145,3123,903,610 3 161279 -- MSL 176 (19U 255)
-TP 15873,15060,0,2421,-755,610 0 161246 -- MSL 177 (19U 222)
-Tp 15873,16500,5145,1380,2037,610 3 161278 -- MSL 178 (19U 254)
-mc 15873,11445,5595,0,-320 1 161205 -- MSL 180 (19U 181)
-ps 15873,19635,4080,150,-2507,150 2 161206 -- MSL 181 (19U 182)
-34 15873,15498,2655,4026,15,610 0 161214 -- MSL 182 (19U 190)
-\- 15873,6435,0,252,-2150,252 0 60096 -- MSL 183 ( 7J 192)
-14 15873,15498,2655,4626,-29,610 0 161212 -- MSL 184 (19U 188)
-12 15873,15498,2655,3426,615,610 0 161213 -- MSL 185 (19U 189)
-Of 15873,15390,0,0,-5309 0 161194 -- MSL 186 (19U 170)
-Om 15873,15390,0,0,-5273 0 161210 -- MSL 187 (19U 186)
-Fo 15873,11010,0,1230,-2183,610 0 161195 -- MSL 188 (19U 171)
-Fc 15873,11010,0,330,-1283,330 0 161211 -- MSL 190 (19U 187)
-t+- 15873,11385,2835,252,-2150,252 0 161201 -- MSL 191 (19U 177)
-bb 15873,19083,5916,0,-5945 3 161190 -- MSL 192 (19U 166)
-co 15873,19635,0,2121,-3029,610 2 161193 -- MSL 193 (19U 169)
-tno 15873,8865,0,252,-2150,252 0 161196 -- MSL 194 (19U 172)
-u00AD 15873,6570,0,0,-3740 0 161197 -- MSL 195 (19U 173)
-rg 15873,19635,0,1839,-2747,610 2 161198 -- MSL 196 (19U 174)
-S2 15873,15240,0,0,-4466 0 161202 -- MSL 197 (19U 178)
-S3 15873,15240,0,0,-4547 0 161203 -- MSL 198 (19U 179)
-ac 15873,0,4815,0,-4625 1 161208 -- MSL 199 (19U 184)
-S1 15873,15060,0,0,-4829 0 161209 -- MSL 200 (19U 185)
-tmu 15873,11340,0,252,-2150,252 0 161239 -- MSL 201 (19U 215)
-tdi 15873,10530,0,306,-2204,306 0 161271 -- MSL 202 (19U 247)
-u203C 15873,15060,330,948,-1778,610 0 87315 -- MSL 221 (10U 19)
-u20A7 15873,15060,330,3744,963,610 0 60121 -- MSL 232 ( 7J 217)
-pc 15873,9657,0,0,-6251 0 161207 -- MSL 302 (19U 183)
-u013F 15873,15060,0,1512,-134,610 0 51943 -- MSL 306 ( 6J 231)
-u0140 15873,16500,0,4167,-1130,610 2 51959 -- MSL 307 ( 6J 247)
-u2113 15873,18150,297,0,-4070 2 60122 -- MSL 308 ( 7J 218)
-u0149 15873,15060,0,1662,663,610 0 51951 -- MSL 309 ( 6J 239)
-fm 15873,15060,0,0,-7595 0 60101 -- MSL 310 ( 7J 197)
-sd 15873,15060,0,0,-5273 0 60102 -- MSL 311 ( 7J 198)
-dg 15873,15060,1290,0,-4490 0 161158 -- MSL 312 (19U 134)
-tm 15873,17850,0,1896,-2204,610 2 161177 -- MSL 313 (19U 153)
-u2017 15873,0,6588,1317,1317,610 1 60095 -- MSL 314 ( 7J 191)
-ah 15873,17640,0,1257,-4490,610 2 75169 -- MSL 315 ( 9E 161)
-ao 15873,17997,0,0,-7364 2 60152 -- MSL 316 ( 7J 248)
-f/ 15873,15498,2655,3126,915,610 0 60109 -- MSL 324 ( 7J 205)
-em 15873,6570,0,3141,264,610 0 161175 -- MSL 325 (19U 151)
-en 15873,6570,0,606,-2141,606 0 161174 -- MSL 326 (19U 150)
-dd 15873,15060,1290,0,-4490 0 161159 -- MSL 327 (19U 135)
-.i 15873,11445,0,0,-1259 0 46333 -- MSL 328 ( 5T 253)
-aq 15873,15060,0,0,-6935 0 161063 -- MSL 329 (19U 39)
-bu 15873,12714,0,0,-1847 0 161173 -- MSL 331 (19U 149)
-u207F 15873,15240,0,507,-2408,507 0 87548 -- MSL 332 (10U 252)
-u0111 15873,16500,300,4020,-1142,610 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 15873,20880,0,2592,1092,610 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 15873,16395,330,2325,-695,610 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 15873,15060,3624,1470,1092,610 0 75173 -- MSL 404 ( 9E 165)
-u0061_0328 15873,11775,4263,531,-695,531 0 75193 -- MSL 405 ( 9E 185)
-'C 15873,21255,330,2835,-1688,610 2 75206 -- MSL 406 ( 9E 198)
-'c 15873,17640,330,1542,-1616,610 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 15873,21255,330,2907,-1688,610 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15873,17640,330,2007,-1616,610 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 15873,21255,0,2157,537,610 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15873,18870,300,5790,282,610 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15873,21255,0,2724,-152,610 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 15873,17640,330,2007,-1610,610 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15873,15060,3624,2724,-152,610 0 75210 -- MSL 422 ( 9E 202)
-u0065_0328 15873,11775,4263,1269,-1610,610 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15873,21255,0,2217,-134,610 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 15873,22365,0,651,-1130,610 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15873,18870,0,3966,-134,610 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 15873,18870,0,4062,-1130,610 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15873,21255,0,4182,738,610 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15873,17640,0,1401,585,610 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15873,21255,0,4182,738,610 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15873,17640,0,1707,585,610 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 15873,22035,330,3720,-1136,610 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15873,18420,330,2355,-1139,610 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15873,21255,0,2217,234,610 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 15873,17640,0,2475,-596,610 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15873,21255,0,2157,234,610 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 15873,17640,0,2475,-596,610 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 15873,21255,330,2217,-803,610 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 15873,17640,330,1401,-1355,610 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15873,21255,0,3183,-1967,610 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 15873,18870,330,1236,-3215,610 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15873,15060,4815,3183,-1967,610 1 75230 -- MSL 468 ( 9E 222)
-u0074_0327 15873,14760,4815,738,-3215,610 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 15873,22035,330,4095,-2096,610 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15873,18420,330,1305,-1403,610 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 15873,21690,330,4095,-2096,610 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15873,17997,330,726,-1403,610 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 15873,21255,0,2217,-806,610 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 15873,17640,0,1401,-1367,610 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 15873,20670,0,1707,-806,610 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 15873,16905,0,1101,-1367,610 2 75199 -- MSL 485 ( 9E 191)
-u2070 15873,15240,0,0,-5027 0 51753 -- MSL 1000 ( 6J 41)
-u2074 15873,15060,0,0,-4940 0 51748 -- MSL 1001 ( 6J 36)
-u2075 15873,15060,0,0,-4292 0 51749 -- MSL 1002 ( 6J 37)
-u2076 15873,15240,0,0,-5099 0 51806 -- MSL 1003 ( 6J 94)
-u2077 15873,15060,0,0,-5291 0 51750 -- MSL 1004 ( 6J 38)
-u2078 15873,15240,0,0,-4859 0 51754 -- MSL 1005 ( 6J 42)
-u2079 15873,15240,0,0,-4685 0 51752 -- MSL 1006 ( 6J 40)
-lq 15873,15060,0,861,-3494,610 0 161171 -- MSL 1017 (19U 147)
-rq 15873,15060,0,1011,-3644,610 0 161172 -- MSL 1018 (19U 148)
-Bq 15873,3495,3120,0,-1490 0 161156 -- MSL 1019 (19U 132)
-u2003 15873,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15873,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 15873,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 15873,3105,330,1257,474,610 0 161157 -- MSL 1028 (19U 133)
-vz 15873,17640,0,1257,-1367,610 2 75166 -- MSL 1031 ( 9E 158)
-u2120 15873,18000,0,2952,-2087,610 2 128299 -- MSL 1034 (15U 43)
-u211E 15873,15060,2466,2097,-1601,610 0 51794 -- MSL 1036 ( 6J 82)
-fi 15873,17235,0,1983,1185,610 2 60077 -- MSL 1040 ( 7J 173)
-fl 15873,16500,0,1806,1185,610 2 60078 -- MSL 1041 ( 7J 174)
-ff 15873,16500,0,5799,1212,610 2 51883 -- MSL 1042 ( 6J 171)
-Fi 15873,16500,0,3705,846,610 2 51884 -- MSL 1043 ( 6J 172)
-Fl 15873,16500,0,2208,852,610 2 51885 -- MSL 1044 ( 6J 173)
-ij 15873,17235,5145,2958,1278,610 3 60134 -- MSL 1047 ( 7J 230)
-u2105 15873,15498,2655,3846,195,610 0 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 15873,20880,330,3192,-956,610 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15873,16395,5145,2622,-95,610 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 15873,15390,4815,1893,-803,610 1 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 15873,11775,4815,915,-1355,610 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 15873,20670,0,1764,-1187,610 2 46301 -- MSL 1065 ( 5T 221)
-bq 15873,3495,3120,0,-3497 0 161154 -- MSL 1067 (19U 130)
-%0 15873,16380,330,2361,-470,610 2 161161 -- MSL 1068 (19U 137)
-a- 15873,15666,0,1914,-3452,610 2 60154 -- MSL 1084 ( 7J 250)
-ab 15873,16395,0,2325,-5000,610 2 75170 -- MSL 1086 ( 9E 162)
-a. 15873,16905,0,0,-8291 2 75263 -- MSL 1088 ( 9E 255)
-oe 15873,11775,330,2334,30,610 0 161180 -- MSL 1090 (19U 156)
-OE 15873,15060,0,2799,-389,610 0 161164 -- MSL 1091 (19U 140)
-fo 15873,10365,0,0,-4142 0 161163 -- MSL 1092 (19U 139)
-fc 15873,10365,0,0,-3542 0 161179 -- MSL 1093 (19U 155)
-sq 15873,14106,0,0,-443 0 60091 -- MSL 1094 ( 7J 187)
-/L 15873,15060,0,1515,-134,610 0 75171 -- MSL 1095 ( 9E 163)
-/l 15873,16500,0,0,-1184 2 75187 -- MSL 1096 ( 9E 179)
-a" 15873,18420,0,2355,-6833,610 2 75197 -- MSL 1097 ( 9E 189)
-ho 15873,0,4263,0,-7343 0 75186 -- MSL 1098 ( 9E 178)
-vZ 15873,21255,0,2157,-806,610 2 75150 -- MSL 1106 ( 9E 142)
-IJ 15873,15060,2904,3021,-206,610 0 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/CLARENDON b/contrib/groff/font/devlj4/CLARENDON
deleted file mode 100644
index 87c57516025c..000000000000
--- a/contrib/groff/font/devlj4/CLARENDON
+++ /dev/null
@@ -1,331 +0,0 @@
-# Clarendon Cd
-name CLARENDON
-spacewidth 5856
-pcltypeface 4140
-pclproportional 1
-pclweight 3
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-charset
-! 6342,18300 2 161057 -- MSL 1 (19U 33)
-dq 11709,18645 2 161058 -- MSL 2 (19U 34)
-" "
-sh 11709,18300 2 161059 -- MSL 3 (19U 35)
-# "
-Do 11709,18309,306 2 161060 -- MSL 4 (19U 36)
-$ "
-% 17565,18645,345 2 161061 -- MSL 5 (19U 37)
-& 16587,18645,345 2 161062 -- MSL 6 (19U 38)
-cq 5856,18645 2 161170 -- MSL 8 (19U 146)
-' "
-( 5856,18300,6870 3 161064 -- MSL 9 (19U 40)
-) 5856,18300,6870 3 161065 -- MSL 10 (19U 41)
-* 11709,18645 2 161066 -- MSL 11 (19U 42)
-+ 17565,16545 0 161067 -- MSL 12 (19U 43)
-, 5856,3945,3375 0 161068 -- MSL 13 (19U 44)
-hy 5856,8295 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,3945 0 161070 -- MSL 15 (19U 46)
-sl 5856,18645,345 2 161071 -- MSL 16 (19U 47)
-/ "
-0 11709,18645,345 2 161072 -- MSL 17 (19U 48)
-1 11709,18300 2 161073 -- MSL 18 (19U 49)
-2 11709,18645,345 2 161074 -- MSL 19 (19U 50)
-3 11709,18645,345 2 161075 -- MSL 20 (19U 51)
-4 11709,18300 2 161076 -- MSL 21 (19U 52)
-5 11709,18300,345 2 161077 -- MSL 22 (19U 53)
-6 11709,18645,345 2 161078 -- MSL 23 (19U 54)
-7 11709,18300 2 161079 -- MSL 24 (19U 55)
-8 11709,18645,345 2 161080 -- MSL 25 (19U 56)
-9 11709,18645,345 2 161081 -- MSL 26 (19U 57)
-: 5856,13965 0 161082 -- MSL 27 (19U 58)
-; 5856,13965,3375 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 17565,12540 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 11709,18300 2 161087 -- MSL 32 (19U 63)
-at 26346,16950,4131 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13662,18300 2 161089 -- MSL 34 (19U 65)
-B 13662,18300 2 161090 -- MSL 35 (19U 66)
-C 12684,18645,345 2 161091 -- MSL 36 (19U 67)
-D 13662,18300 2 161092 -- MSL 37 (19U 68)
-E 13662,18285 2 161093 -- MSL 38 (19U 69)
-F 13173,18300 2 161094 -- MSL 39 (19U 70)
-G 13662,18645,345 2 161095 -- MSL 40 (19U 71)
-H 15126,18300 2 161096 -- MSL 41 (19U 72)
-I 7806,18300 2 161097 -- MSL 42 (19U 73)
-J 11220,18300,345 2 161098 -- MSL 43 (19U 74)
-K 14637,18300 2 161099 -- MSL 44 (19U 75)
-L 12198,18300 2 161100 -- MSL 45 (19U 76)
-M 18051,18300 2 161101 -- MSL 46 (19U 77)
-N 14637,18300 2 161102 -- MSL 47 (19U 78)
-O 13662,18645,345 2 161103 -- MSL 48 (19U 79)
-P 13173,18300 2 161104 -- MSL 49 (19U 80)
-Q 14148,18645,2553 2 161105 -- MSL 50 (19U 81)
-R 15126,18300,345 2 161106 -- MSL 51 (19U 82)
-S 12198,18645,345 2 161107 -- MSL 52 (19U 83)
-T 13662,18300 2 161108 -- MSL 53 (19U 84)
-U 13173,18300,345 2 161109 -- MSL 54 (19U 85)
-V 14148,18300 2 161110 -- MSL 55 (19U 86)
-W 19515,18300 2 161111 -- MSL 56 (19U 87)
-X 13662,18300 2 161112 -- MSL 57 (19U 88)
-Y 13173,18300 2 161113 -- MSL 58 (19U 89)
-Z 12198,18300 2 161114 -- MSL 59 (19U 90)
-lB 5856,18300,5085 3 161115 -- MSL 60 (19U 91)
-[ "
-rs 5856,18645,345 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5856,18300,5085 3 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 5856,18645 2 161169 -- MSL 66 (19U 145)
-` "
-a 13662,14250,345 0 161121 -- MSL 67 (19U 97)
-b 12684,18300,345 2 161122 -- MSL 68 (19U 98)
-c 11220,14250,345 0 161123 -- MSL 69 (19U 99)
-d 12684,18300,345 2 161124 -- MSL 70 (19U 100)
-e 11709,14250,345 0 161125 -- MSL 71 (19U 101)
-f 8781,18645 2 161126 -- MSL 72 (19U 102)
-g 13662,15165,4605 1 161127 -- MSL 73 (19U 103)
-h 13173,18300 2 161128 -- MSL 74 (19U 104)
-i 6831,18705 2 161129 -- MSL 75 (19U 105)
-j 8295,18705,4605 3 161130 -- MSL 76 (19U 106)
-k 13173,18300 2 161131 -- MSL 77 (19U 107)
-l 6831,18300 2 161132 -- MSL 78 (19U 108)
-m 19515,14250 0 161133 -- MSL 79 (19U 109)
-n 13173,14250 0 161134 -- MSL 80 (19U 110)
-o 12198,14250,345 0 161135 -- MSL 81 (19U 111)
-p 12684,14250,4290 1 161136 -- MSL 82 (19U 112)
-q 12684,14250,4290 1 161137 -- MSL 83 (19U 113)
-r 9759,14250 0 161138 -- MSL 84 (19U 114)
-s 11220,14250,345 0 161139 -- MSL 85 (19U 115)
-t 8295,17265,345 2 161140 -- MSL 86 (19U 116)
-u 13173,13905,345 0 161141 -- MSL 87 (19U 117)
-v 11709,13905 0 161142 -- MSL 88 (19U 118)
-w 17565,13905 0 161143 -- MSL 89 (19U 119)
-x 12198,13905 0 161144 -- MSL 90 (19U 120)
-y 12198,13905,4605 1 161145 -- MSL 91 (19U 121)
-z 10245,13905 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 13662,23355 2 161216 -- MSL 99 (19U 192)
-^A 13662,22755 2 161218 -- MSL 100 (19U 194)
-`E 13662,23355 2 161224 -- MSL 101 (19U 200)
-^E 13662,22755 2 161226 -- MSL 102 (19U 202)
-:E 13662,23325 2 161227 -- MSL 103 (19U 203)
-^I 7806,22755 2 161230 -- MSL 104 (19U 206)
-:I 7806,23325 2 161231 -- MSL 105 (19U 207)
-aa 11709,19305 2 161204 -- MSL 106 (19U 180)
-ga 11709,19305 2 161120 -- MSL 107 (19U 96)
-a^ 11709,18180 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 11709,18750 2 161192 -- MSL 109 (19U 168)
-~ 11709,18654 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13173,23355,345 2 161241 -- MSL 111 (19U 217)
-^U 13173,22755,345 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 13173,23355 2 161245 -- MSL 114 (19U 221)
-'y 12198,19305,4605 3 161277 -- MSL 115 (19U 253)
-de 11709,18645 2 161200 -- MSL 116 (19U 176)
-,C 12684,18645,4725 3 161223 -- MSL 117 (19U 199)
-,c 11220,14250,4737 1 161255 -- MSL 118 (19U 231)
-~N 14637,23229 2 161233 -- MSL 119 (19U 209)
-~n 13173,18654 2 161265 -- MSL 120 (19U 241)
-r! 6342,13956,4344 1 161185 -- MSL 121 (19U 161)
-r? 11709,13956,4344 1 161215 -- MSL 122 (19U 191)
-Cs 17565,15834 0 161188 -- MSL 123 (19U 164)
-Po 11709,18645,345 2 161187 -- MSL 124 (19U 163)
-Ye 11709,18300 2 161189 -- MSL 125 (19U 165)
-sc 11709,19605,6420 3 161191 -- MSL 126 (19U 167)
-Fn 11709,18645 2 161155 -- MSL 127 (19U 131)
-ct 11709,16917 2 161186 -- MSL 128 (19U 162)
-^a 13662,18180,345 2 161250 -- MSL 129 (19U 226)
-^e 11709,18180,345 2 161258 -- MSL 130 (19U 234)
-^o 12198,18180,345 2 161268 -- MSL 131 (19U 244)
-^u 13173,18180,345 2 161275 -- MSL 132 (19U 251)
-'a 13662,19305,345 2 161249 -- MSL 133 (19U 225)
-'e 11709,19305,345 2 161257 -- MSL 134 (19U 233)
-'o 12198,19305,345 2 161267 -- MSL 135 (19U 243)
-'u 13173,19305,345 2 161274 -- MSL 136 (19U 250)
-`a 13662,19305,345 2 161248 -- MSL 137 (19U 224)
-`e 11709,19305,345 2 161256 -- MSL 138 (19U 232)
-`o 12198,19305,345 2 161266 -- MSL 139 (19U 242)
-`u 13173,19305,345 2 161273 -- MSL 140 (19U 249)
-:a 13662,18750,345 2 161252 -- MSL 141 (19U 228)
-:e 11709,18750,345 2 161259 -- MSL 142 (19U 235)
-:o 12198,18750,345 2 161270 -- MSL 143 (19U 246)
-:u 13173,18750,345 2 161276 -- MSL 144 (19U 252)
-oA 13662,25200 2 161221 -- MSL 145 (19U 197)
-^i 6831,18180 2 161262 -- MSL 146 (19U 238)
-/O 13662,18645,345 2 161240 -- MSL 147 (19U 216)
-AE 22932,18285 2 161222 -- MSL 148 (19U 198)
-oa 13662,21195,345 2 161253 -- MSL 149 (19U 229)
-'i 6831,19305 2 161261 -- MSL 150 (19U 237)
-/o 12198,14250,345 0 161272 -- MSL 151 (19U 248)
-ae 18051,14250,345 0 161254 -- MSL 152 (19U 230)
-:A 13662,23325 2 161220 -- MSL 153 (19U 196)
-`i 6831,19305 2 161260 -- MSL 154 (19U 236)
-:O 13662,23325,345 2 161238 -- MSL 155 (19U 214)
-:U 13173,23325,345 2 161244 -- MSL 156 (19U 220)
-'E 13662,23355 2 161225 -- MSL 157 (19U 201)
-:i 6831,18750 2 161263 -- MSL 158 (19U 239)
-ss 13173,18645 2 161247 -- MSL 159 (19U 223)
-^O 13662,22755,345 2 161236 -- MSL 160 (19U 212)
-'A 13662,23355 2 161217 -- MSL 161 (19U 193)
-~A 13662,23229 2 161219 -- MSL 162 (19U 195)
-~a 13662,18654,345 2 161251 -- MSL 163 (19U 227)
--D 13662,18300 2 161232 -- MSL 164 (19U 208)
-Sd 12198,19083,345 2 161264 -- MSL 165 (19U 240)
-'I 7806,23355 2 161229 -- MSL 166 (19U 205)
-`I 7806,23355 2 161228 -- MSL 167 (19U 204)
-'O 13662,23355,345 2 161235 -- MSL 168 (19U 211)
-`O 13662,23355,345 2 161234 -- MSL 169 (19U 210)
-~O 13662,23229,345 2 161237 -- MSL 170 (19U 213)
-~o 12198,18654,345 2 161269 -- MSL 171 (19U 245)
-vS 12198,22755,345 2 161162 -- MSL 172 (19U 138)
-vs 11220,18180,345 2 161178 -- MSL 173 (19U 154)
-'U 13173,23355,345 2 161242 -- MSL 174 (19U 218)
-:Y 13173,23325 2 161183 -- MSL 175 (19U 159)
-:y 12198,18750,4605 3 161279 -- MSL 176 (19U 255)
-TP 13173,18300 2 161246 -- MSL 177 (19U 222)
-Tp 12684,18300,4290 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5193 1 161205 -- MSL 180 (19U 181)
-ps 12198,19635,4200 3 161206 -- MSL 181 (19U 182)
-34 17565,18645,345 2 161214 -- MSL 182 (19U 190)
-\- 17565,10200 0 60096 -- MSL 183 ( 7J 192)
-14 17565,18645,345 2 161212 -- MSL 184 (19U 188)
-12 17565,18645,345 2 161213 -- MSL 185 (19U 189)
-Of 11709,18645 2 161194 -- MSL 186 (19U 170)
-Om 11709,18645 2 161210 -- MSL 187 (19U 186)
-Fo 12198,12195 0 161195 -- MSL 188 (19U 171)
-Fc 12198,12195 0 161211 -- MSL 190 (19U 187)
-t+- 17565,16500 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19725 2 161193 -- MSL 193 (19U 169)
-tno 17565,13479 0 161196 -- MSL 194 (19U 172)
-u00AD 5856,8295 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725 2 161198 -- MSL 196 (19U 174)
-S2 7806,18480 2 161202 -- MSL 197 (19U 178)
-S3 7806,18480 2 161203 -- MSL 198 (19U 179)
-ac 11709,108,4737 1 161208 -- MSL 199 (19U 184)
-S1 7806,18300 2 161209 -- MSL 200 (19U 185)
-tmu 17565,16782 0 161239 -- MSL 201 (19U 215)
-tdi 17565,15045 0 161271 -- MSL 202 (19U 247)
-u203C 12198,18300 2 87315 -- MSL 221 (10U 19)
-u20A7 21468,18300,345 2 60121 -- MSL 232 ( 7J 217)
-pc 5856,11745 0 161207 -- MSL 302 (19U 183)
-u013F 12198,18300 2 51943 -- MSL 306 ( 6J 231)
-u0140 11220,18300 2 51959 -- MSL 307 ( 6J 247)
-u2113 12198,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 19029,18645 2 51951 -- MSL 309 ( 6J 239)
-fm 5856,18645 2 60101 -- MSL 310 ( 7J 197)
-sd 10245,18645 2 60102 -- MSL 311 ( 7J 198)
-dg 11709,18300,4575 3 161158 -- MSL 312 (19U 134)
-tm 16101,17550 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 11709,18180 2 75169 -- MSL 315 ( 9E 161)
-ao 11709,21195 2 60152 -- MSL 316 ( 7J 248)
-f/ 3903,18645,345 2 60109 -- MSL 324 ( 7J 205)
-em 17565,8295 0 161175 -- MSL 325 (19U 151)
-en 11709,8295 0 161174 -- MSL 326 (19U 150)
-dd 11709,18300,4575 3 161159 -- MSL 327 (19U 135)
-.i 6831,13905 0 46333 -- MSL 328 ( 5T 253)
-aq 5856,18645 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 10734,18480 2 87548 -- MSL 332 (10U 252)
-u0111 12684,18300,345 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13662,23655 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13662,19080,345 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13662,18300,4638 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13662,14250,4353 1 75193 -- MSL 405 ( 9E 185)
-'C 12684,23355,345 2 75206 -- MSL 406 ( 9E 198)
-'c 11220,19305,345 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 12684,22755,345 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11220,18180,345 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13662,22755 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15612,19590,345 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13662,22755 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,18180,345 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13662,18285,4638 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,14250,4353 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 12198,23355 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6831,23790 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 12198,18645 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9759,19590 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 14637,23355 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13173,19305 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 14637,22755 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13173,18180 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13662,23640,345 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 12198,19305,345 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15126,23355,345 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9759,19305 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15126,22755,345 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9759,18180 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 12198,23355,345 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 11220,19305,345 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13662,22755 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9270,19590,345 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13662,18300,4725 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8295,17265,4737 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13173,23640,345 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13173,19305,345 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13173,25200,345 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13173,21195,345 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 12198,23355 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 10245,19305 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 12198,23205 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 10245,18750 2 75199 -- MSL 485 ( 9E 191)
-u2070 7806,18480 2 51753 -- MSL 1000 ( 6J 41)
-u2074 7806,18300 2 51748 -- MSL 1001 ( 6J 36)
-u2075 7806,18300 2 51749 -- MSL 1002 ( 6J 37)
-u2076 7806,18480 2 51806 -- MSL 1003 ( 6J 94)
-u2077 7806,18480 2 51750 -- MSL 1004 ( 6J 38)
-u2078 7806,18480 2 51754 -- MSL 1005 ( 6J 42)
-u2079 7806,18480 2 51752 -- MSL 1006 ( 6J 40)
-lq 10734,18645 2 161171 -- MSL 1017 (19U 147)
-rq 10734,18645 2 161172 -- MSL 1018 (19U 148)
-Bq 10734,3615,3705 0 161156 -- MSL 1019 (19U 132)
-u2003 17565,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 11709,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 17565,3150 0 161157 -- MSL 1028 (19U 133)
-vz 10245,18180 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 15612,18705 2 60077 -- MSL 1040 ( 7J 173)
-fl 15612,18645 2 60078 -- MSL 1041 ( 7J 174)
-ff 17076,18645 2 51883 -- MSL 1042 ( 6J 171)
-Fi 24396,18705 2 51884 -- MSL 1043 ( 6J 172)
-Fl 24396,18645 2 51885 -- MSL 1044 ( 6J 173)
-ij 14637,18705,4605 3 60134 -- MSL 1047 ( 7J 230)
-u2105 19029,18645,345 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13662,23655,345 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13662,19080,4605 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 12198,18645,4725 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 11220,14250,4737 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7806,23205 2 46301 -- MSL 1065 ( 5T 221)
-bq 5856,3615,3705 0 161154 -- MSL 1067 (19U 130)
-%0 23418,18645,345 2 161161 -- MSL 1068 (19U 137)
-a- 11709,16920 2 60154 -- MSL 1084 ( 7J 250)
-ab 11709,19080 2 75170 -- MSL 1086 ( 9E 162)
-a. 11709,18750 2 75263 -- MSL 1088 ( 9E 255)
-oe 18051,14250,345 0 161180 -- MSL 1090 (19U 156)
-OE 20979,18645,345 2 161164 -- MSL 1091 (19U 140)
-fo 7806,12195 0 161163 -- MSL 1092 (19U 139)
-fc 7806,12195 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 12198,18300 2 75171 -- MSL 1095 ( 9E 163)
-/l 6831,18300 2 75187 -- MSL 1096 ( 9E 179)
-a" 11709,19305 2 75197 -- MSL 1097 ( 9E 189)
-ho 11709,1062,4353 1 75186 -- MSL 1098 ( 9E 178)
-vZ 12198,22755 2 75150 -- MSL 1106 ( 9E 142)
-IJ 19029,18300,345 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/CORONET b/contrib/groff/font/devlj4/CORONET
deleted file mode 100644
index dcd1632b2aa4..000000000000
--- a/contrib/groff/font/devlj4/CORONET
+++ /dev/null
@@ -1,332 +0,0 @@
-# Coronet
-name CORONET
-spacewidth 5367
-slant 13.000000
-pcltypeface 4116
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-charset
-! 4878,19920,195,7221,-2492,373 2 161057 -- MSL 1 (19U 33)
-dq 7317,18990,0,6453,-5435,373 2 161058 -- MSL 2 (19U 34)
-" "
-sh 10734,12180,0,3747,-4382,373 0 161059 -- MSL 3 (19U 35)
-# "
-Do 10734,13725,2865,4302,-2003,373 0 161060 -- MSL 4 (19U 36)
-$ "
-% 13662,12180,195,2877,-4565,373 0 161061 -- MSL 5 (19U 37)
-& 20490,18330,600,5373,-3329,373 2 161062 -- MSL 6 (19U 38)
-cq 4392,19590,0,6309,-6068,373 2 161170 -- MSL 8 (19U 146)
-' "
-( 5367,19590,6555,8709,-2141,373 3 161064 -- MSL 9 (19U 40)
-) 5367,19590,6555,5466,1101,373 3 161065 -- MSL 10 (19U 41)
-* 10734,19590,0,5157,-8681,373 2 161066 -- MSL 11 (19U 42)
-+ 13662,7245,0,1473,-5255,373 0 161067 -- MSL 12 (19U 43)
-, 5367,1950,3360,2172,-1457,373 0 161068 -- MSL 13 (19U 44)
-hy 5367,3600,0,3648,-1853,373 0 161069 -- MSL 14 (19U 45)
-- "
-. 5367,1950,195,2184,-2771,373 0 161070 -- MSL 15 (19U 46)
-sl 5367,19920,195,8472,-518,373 2 161071 -- MSL 16 (19U 47)
-/ "
-0 10734,12180,195,4167,-2945,373 0 161072 -- MSL 17 (19U 48)
-1 10734,12180,195,2073,-4823,373 0 161073 -- MSL 18 (19U 49)
-2 10734,12180,165,4089,-2615,373 0 161074 -- MSL 19 (19U 50)
-3 10734,12180,195,4128,-1925,373 0 161075 -- MSL 20 (19U 51)
-4 10734,12669,633,3570,-2063,373 0 161076 -- MSL 21 (19U 52)
-5 10734,12000,195,3726,-1445,373 0 161077 -- MSL 22 (19U 53)
-6 10734,12987,195,3444,-2783,373 0 161078 -- MSL 23 (19U 54)
-7 10734,12000,195,4359,-4235,373 0 161079 -- MSL 24 (19U 55)
-8 10734,12180,195,4035,-2750,373 0 161080 -- MSL 25 (19U 56)
-9 10734,12180,1329,4101,-3341,373 0 161081 -- MSL 26 (19U 57)
-: 5367,6348,195,3393,-2771,373 0 161082 -- MSL 27 (19U 58)
-; 5367,6348,3360,3393,-1457,373 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 13662,4953,0,1467,-5264,373 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 7806,17439,195,6786,-3407,373 0 161087 -- MSL 32 (19U 63)
-at 13662,10044,3552,2940,-2849,373 0 161088 -- MSL 33 (19U 64)
-@ "
-A 23418,19995,600,5910,-1211,373 2 161089 -- MSL 34 (19U 65)
-B 14148,19590,600,6999,-1640,373 2 161090 -- MSL 35 (19U 66)
-C 14637,19590,600,7032,-2972,373 2 161091 -- MSL 36 (19U 67)
-D 23418,19701,0,3345,-2531,373 2 161092 -- MSL 37 (19U 68)
-E 15126,19590,600,7173,-2297,373 2 161093 -- MSL 38 (19U 69)
-F 17076,19590,600,6105,-2996,373 2 161094 -- MSL 39 (19U 70)
-G 15126,19590,6765,7056,-2897,373 3 161095 -- MSL 40 (19U 71)
-H 23907,19596,330,6129,-1355,373 2 161096 -- MSL 41 (19U 72)
-I 15126,19590,600,4941,-1199,373 2 161097 -- MSL 42 (19U 73)
-J 13173,19590,6519,5952,-227,373 3 161098 -- MSL 43 (19U 74)
-K 23418,19590,600,7575,-1202,373 2 161099 -- MSL 44 (19U 75)
-L 18051,19590,600,6657,-1511,373 2 161100 -- MSL 45 (19U 76)
-M 21954,19785,2223,6414,-4793,373 2 161101 -- MSL 46 (19U 77)
-N 15612,19830,2220,6954,-4553,373 2 161102 -- MSL 47 (19U 78)
-O 18051,19590,600,5169,-3554,373 2 161103 -- MSL 48 (19U 79)
-P 14148,19590,3276,6537,-746,373 2 161104 -- MSL 49 (19U 80)
-Q 18051,19590,3249,5169,-3554,373 2 161105 -- MSL 50 (19U 81)
-R 15126,19590,600,6837,-1316,373 2 161106 -- MSL 51 (19U 82)
-S 17565,19590,600,7359,-1559,373 2 161107 -- MSL 52 (19U 83)
-T 15612,19590,600,7557,-3008,373 2 161108 -- MSL 53 (19U 84)
-U 16587,19785,2220,7305,-4907,373 2 161109 -- MSL 54 (19U 85)
-V 16587,19602,600,7923,-5117,373 2 161110 -- MSL 55 (19U 86)
-W 23907,19590,600,7470,-5072,373 2 161111 -- MSL 56 (19U 87)
-X 15126,19590,600,7557,-1046,373 2 161112 -- MSL 57 (19U 88)
-Y 16101,19590,5784,7764,-4358,373 2 161113 -- MSL 58 (19U 89)
-Z 18051,19590,270,7545,-1265,373 2 161114 -- MSL 59 (19U 90)
-lB 5367,19590,6750,8592,-50,373 3 161115 -- MSL 60 (19U 91)
-[ "
-rs 5367,19920,195,3192,-4175,373 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5367,19590,6750,7695,846,373 3 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,373 1 161119 -- MSL 64 (19U 95)
-oq 4392,19590,0,6309,-6068,373 2 161169 -- MSL 66 (19U 145)
-` "
-a 8781,6240,195,3735,-2093,373 0 161121 -- MSL 67 (19U 97)
-b 8295,18015,195,3219,-2297,373 2 161122 -- MSL 68 (19U 98)
-c 6831,6240,195,3807,-2012,373 0 161123 -- MSL 69 (19U 99)
-d 8781,18015,195,6720,-1985,373 2 161124 -- MSL 70 (19U 100)
-e 6831,6240,195,3648,-1958,373 0 161125 -- MSL 71 (19U 101)
-f 5856,19920,6555,8130,-44,373 3 161126 -- MSL 72 (19U 102)
-g 8295,6240,6555,3243,-1463,373 1 161127 -- MSL 73 (19U 103)
-h 8781,18015,195,4152,-1946,373 2 161128 -- MSL 74 (19U 104)
-i 4878,10050,195,4416,-2342,373 0 161129 -- MSL 75 (19U 105)
-j 4392,10146,6555,4560,1614,373 1 161130 -- MSL 76 (19U 106)
-k 8295,18015,195,3720,-2009,373 2 161131 -- MSL 77 (19U 107)
-l 5367,19920,195,8229,-2354,373 2 161132 -- MSL 78 (19U 108)
-m 12198,6240,195,4164,-2060,373 0 161133 -- MSL 79 (19U 109)
-n 8295,6240,195,4122,-2045,373 0 161134 -- MSL 80 (19U 110)
-o 7317,6240,195,3615,-1922,373 0 161135 -- MSL 81 (19U 111)
-p 8295,6240,6555,3597,-2,373 1 161136 -- MSL 82 (19U 112)
-q 8781,6240,6555,3960,-2009,373 1 161137 -- MSL 83 (19U 113)
-r 5856,6240,0,4149,-1997,373 0 161138 -- MSL 84 (19U 114)
-s 5856,7410,195,3423,-1673,373 0 161139 -- MSL 85 (19U 115)
-t 4878,12324,195,4935,-2210,373 0 161140 -- MSL 86 (19U 116)
-u 8781,6240,195,3834,-2501,373 0 161141 -- MSL 87 (19U 117)
-v 6831,6240,195,4293,-2228,373 0 161142 -- MSL 88 (19U 118)
-w 10734,6240,195,3777,-2201,373 0 161143 -- MSL 89 (19U 119)
-x 5856,6240,0,4203,-1016,373 0 161144 -- MSL 90 (19U 120)
-y 7806,6240,6555,3639,-2132,373 1 161145 -- MSL 91 (19U 121)
-z 5856,6045,0,4245,-1331,373 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210,6660,-5129,373 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210,2163,-632,373 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 23418,24825,600,5910,-1211,373 2 161216 -- MSL 99 (19U 192)
-^A 23418,24975,600,9558,-1211,373 2 161218 -- MSL 100 (19U 194)
-`E 15126,24825,600,7173,-2297,373 2 161224 -- MSL 101 (19U 200)
-^E 15126,24975,600,7404,-2297,373 2 161226 -- MSL 102 (19U 202)
-:E 15126,23370,600,7644,-2297,373 2 161227 -- MSL 103 (19U 203)
-^I 15126,24975,600,7404,-1199,373 2 161230 -- MSL 104 (19U 206)
-:I 15126,23370,600,6744,-1199,373 2 161231 -- MSL 105 (19U 207)
-aa 10734,9885,0,3222,-7334,373 0 161204 -- MSL 106 (19U 180)
-ga 10734,9885,0,1608,-5720,373 0 161120 -- MSL 107 (19U 96)
-a^ 10734,9885,0,2160,-4874,373 0 161160 -- MSL 108 (19U 136)
-^ "
-ad 10734,9240,0,2286,-6035,373 0 161192 -- MSL 109 (19U 168)
-~ 10734,9282,0,2601,-5588,373 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 16587,24825,2220,7305,-4907,373 2 161241 -- MSL 111 (19U 217)
-^U 16587,24975,2220,7305,-4907,373 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,373 2 161199 -- MSL 113 (19U 175)
-'Y 16101,24825,5784,7764,-4358,373 2 161245 -- MSL 114 (19U 221)
-'y 7806,9885,6555,4086,-2132,373 1 161277 -- MSL 115 (19U 253)
-de 10734,12180,0,3030,-6329,373 0 161200 -- MSL 116 (19U 176)
-,C 14637,19590,4569,7032,-2972,373 2 161223 -- MSL 117 (19U 199)
-,c 6831,6240,4206,3807,-1904,373 0 161255 -- MSL 118 (19U 231)
-~N 15612,23673,2220,6954,-4553,373 2 161233 -- MSL 119 (19U 209)
-~n 8295,9282,195,4122,-2045,373 0 161265 -- MSL 120 (19U 241)
-r! 4878,9900,10215,4278,450,373 1 161185 -- MSL 121 (19U 161)
-r? 7806,8658,8976,3063,315,373 1 161215 -- MSL 122 (19U 191)
-Cs 10734,10530,0,4335,-2807,373 0 161188 -- MSL 123 (19U 164)
-Po 10734,12180,195,4797,-1130,373 0 161187 -- MSL 124 (19U 163)
-Ye 10734,12708,5787,6393,1848,373 0 161189 -- MSL 125 (19U 165)
-sc 10734,12360,360,4200,-2339,373 0 161191 -- MSL 126 (19U 167)
-Fn 10734,19920,6555,4971,-1763,373 3 161155 -- MSL 127 (19U 131)
-ct 10734,11385,0,2574,-4754,373 0 161186 -- MSL 128 (19U 162)
-^a 8781,9885,195,4035,-2093,373 0 161250 -- MSL 129 (19U 226)
-^e 6831,9885,195,5010,-1958,373 0 161258 -- MSL 130 (19U 234)
-^o 7317,9885,195,4467,-1922,373 0 161268 -- MSL 131 (19U 244)
-^u 8781,9885,195,3834,-2501,373 0 161275 -- MSL 132 (19U 251)
-'a 8781,9885,195,4197,-2093,373 0 161249 -- MSL 133 (19U 225)
-'e 6831,9885,195,5622,-1958,373 0 161257 -- MSL 134 (19U 233)
-'o 7317,9885,195,5379,-1922,373 0 161267 -- MSL 135 (19U 243)
-'u 8781,9885,195,4197,-2501,373 0 161274 -- MSL 136 (19U 250)
-`a 8781,9885,195,3735,-2093,373 0 161248 -- MSL 137 (19U 224)
-`e 6831,9885,195,3648,-1958,373 0 161256 -- MSL 138 (19U 232)
-`o 7317,9885,195,3615,-1922,373 0 161266 -- MSL 139 (19U 242)
-`u 8781,9885,195,3834,-2501,373 0 161273 -- MSL 140 (19U 249)
-:a 8781,9240,195,3735,-2093,373 0 161252 -- MSL 141 (19U 228)
-:e 6831,9240,195,4686,-1958,373 0 161259 -- MSL 142 (19U 235)
-:o 7317,9240,195,4593,-1922,373 0 161270 -- MSL 143 (19U 246)
-:u 8781,9240,195,3834,-2501,373 0 161276 -- MSL 144 (19U 252)
-oA 23418,24315,600,7644,-1211,373 2 161221 -- MSL 145 (19U 197)
-^i 4878,9885,195,5088,-1946,373 0 161262 -- MSL 146 (19U 238)
-/O 18051,19638,636,7677,-1427,373 2 161240 -- MSL 147 (19U 216)
-AE 24396,19590,600,7059,309,373 2 161222 -- MSL 148 (19U 198)
-oa 8781,10395,195,3735,-2093,373 0 161253 -- MSL 149 (19U 229)
-'i 4878,9885,195,6150,-2342,373 0 161261 -- MSL 150 (19U 237)
-/o 7317,6240,201,4239,-1160,373 0 161272 -- MSL 151 (19U 248)
-ae 11220,6240,195,3378,-2057,373 0 161254 -- MSL 152 (19U 230)
-:A 23418,23370,600,8598,-1211,373 2 161220 -- MSL 153 (19U 196)
-`i 4878,9885,195,4536,-2342,373 0 161260 -- MSL 154 (19U 236)
-:O 18051,23370,600,5169,-3554,373 2 161238 -- MSL 155 (19U 214)
-:U 16587,23370,2220,7305,-4907,373 2 161244 -- MSL 156 (19U 220)
-'E 15126,24825,600,7515,-2297,373 2 161225 -- MSL 157 (19U 201)
-:i 4878,9240,195,5214,-2342,373 0 161263 -- MSL 158 (19U 239)
-ss 9270,19920,6555,4851,-149,373 3 161247 -- MSL 159 (19U 223)
-^O 18051,24975,600,5169,-3554,373 2 161236 -- MSL 160 (19U 212)
-'A 23418,24825,600,8739,-1211,373 2 161217 -- MSL 161 (19U 193)
-~A 23418,23673,600,9720,-1211,373 2 161219 -- MSL 162 (19U 195)
-~a 8781,9282,195,3735,-2093,373 0 161251 -- MSL 163 (19U 227)
--D 23418,19698,0,3291,-2582,373 2 161232 -- MSL 164 (19U 208)
-Sd 8781,18015,195,5640,-2606,373 2 161264 -- MSL 165 (19U 240)
-'I 15126,24825,600,6585,-1199,373 2 161229 -- MSL 166 (19U 205)
-`I 15126,24825,600,4941,-1199,373 2 161228 -- MSL 167 (19U 204)
-'O 18051,24825,600,5169,-3554,373 2 161235 -- MSL 168 (19U 211)
-`O 18051,24825,600,5169,-3554,373 2 161234 -- MSL 169 (19U 210)
-~O 18051,23673,600,5202,-3554,373 2 161237 -- MSL 170 (19U 213)
-~o 7317,9282,195,4308,-1922,373 0 161269 -- MSL 171 (19U 245)
-vS 17565,25035,600,8751,-1559,373 2 161162 -- MSL 172 (19U 138)
-vs 5856,11133,195,6582,-1673,373 0 161178 -- MSL 173 (19U 154)
-'U 16587,24825,2220,7305,-4907,373 2 161242 -- MSL 174 (19U 218)
-:Y 16101,23370,5784,7764,-4358,373 2 161183 -- MSL 175 (19U 159)
-:y 7806,9240,6555,3639,-2132,373 1 161279 -- MSL 176 (19U 255)
-TP 14148,19590,3228,5598,-749,373 2 161246 -- MSL 177 (19U 222)
-Tp 8295,18015,6555,3597,-2,373 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595,612,585,373 0 161205 -- MSL 180 (19U 181)
-ps 10734,19635,4200,2865,-4976,373 2 161206 -- MSL 181 (19U 182)
-34 13662,12714,426,4089,-2624,373 0 161214 -- MSL 182 (19U 190)
-\- 13662,4020,0,837,-4634,373 0 60096 -- MSL 183 ( 7J 192)
-14 13662,12714,426,3339,-3749,373 0 161212 -- MSL 184 (19U 188)
-12 13662,12714,426,3726,-3749,373 0 161213 -- MSL 185 (19U 189)
-Of 8295,12180,0,5139,-3017,373 0 161194 -- MSL 186 (19U 170)
-Om 8295,12180,0,4494,-3869,373 0 161210 -- MSL 187 (19U 186)
-Fo 7317,6840,870,5124,-2201,373 0 161195 -- MSL 188 (19U 171)
-Fc 7317,6840,870,3621,-698,373 0 161211 -- MSL 190 (19U 187)
-t+- 13662,7263,432,819,-4601,373 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19725,0,8436,-6611,373 2 161193 -- MSL 193 (19U 169)
-tno 13662,5640,0,1545,-5342,373 0 161196 -- MSL 194 (19U 172)
-u00AD 5367,3600,0,3648,-1853,373 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725,0,8436,-6611,373 2 161198 -- MSL 196 (19U 174)
-S2 6342,12150,0,4965,-3668,373 0 161202 -- MSL 197 (19U 178)
-S3 6342,12150,0,5163,-3224,373 0 161203 -- MSL 198 (19U 179)
-ac 10734,0,4206,0,-3857 0 161208 -- MSL 199 (19U 184)
-S1 6342,12150,0,4314,-4949,373 0 161209 -- MSL 200 (19U 185)
-tmu 13662,7281,0,1434,-5198,373 0 161239 -- MSL 201 (19U 215)
-tdi 13662,6570,0,1371,-5168,373 0 161271 -- MSL 202 (19U 247)
-u203C 9270,19920,195,7221,-2492,373 2 87315 -- MSL 221 (10U 19)
-u20A7 19029,19590,3276,4932,-746,373 2 60121 -- MSL 232 ( 7J 217)
-pc 5367,6801,0,3285,-3872,373 0 161207 -- MSL 302 (19U 183)
-u013F 18051,19590,600,8766,-1511,373 2 51943 -- MSL 306 ( 6J 231)
-u0140 8295,19920,195,5301,-2354,373 2 51959 -- MSL 307 ( 6J 247)
-u2113 10734,12180,195,2700,-4265,373 0 60122 -- MSL 308 ( 7J 218)
-u0149 10734,14103,195,4125,-4487,373 0 51951 -- MSL 309 ( 6J 239)
-fm 5367,11985,0,4482,-4724,373 0 60101 -- MSL 310 ( 7J 197)
-sd 7806,11985,0,4626,-4724,373 0 60102 -- MSL 311 ( 7J 198)
-dg 10734,12360,2565,3789,-4823,373 0 161158 -- MSL 312 (19U 134)
-tm 16101,17550,0,8922,-6572,373 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,373 1 60095 -- MSL 314 ( 7J 191)
-ah 10734,9993,0,3468,-6182,373 0 75169 -- MSL 315 ( 9E 161)
-ao 10734,10395,0,1947,-6896,373 0 60152 -- MSL 316 ( 7J 248)
-f/ 2439,12714,426,7488,492,373 0 60109 -- MSL 324 ( 7J 205)
-em 13662,3600,0,1644,-3692,373 0 161175 -- MSL 325 (19U 151)
-en 10734,3600,0,1509,-4097,373 0 161174 -- MSL 326 (19U 150)
-dd 10734,12360,2565,3195,-4229,373 0 161159 -- MSL 327 (19U 135)
-.i 4878,6240,195,3915,-2342,373 0 46333 -- MSL 328 ( 5T 253)
-aq 4392,18990,0,6729,-5585,373 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 8295,12237,0,5133,-3017,373 0 87548 -- MSL 332 (10U 252)
-u0111 8781,18015,195,6720,-1985,373 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 23418,23580,600,8793,-1211,373 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 8781,9810,195,4389,-2093,373 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 23418,19995,2925,5910,-1211,373 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 8781,6240,2727,3735,-2093,373 0 75193 -- MSL 405 ( 9E 185)
-'C 14637,24825,600,7947,-2972,373 2 75206 -- MSL 406 ( 9E 198)
-'c 6831,9885,195,5622,-2012,373 0 75238 -- MSL 407 ( 9E 230)
-u0041_030C 14637,25035,600,10215,-2972,373 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 6831,9993,195,5574,-2012,373 0 75240 -- MSL 411 ( 9E 232)
-u0044_030C 23418,25035,0,4326,-2531,373 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 10245,19056,195,8436,-1985,373 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15126,25035,600,9972,-2297,373 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 6831,9993,195,5418,-1958,373 0 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15126,19590,3900,7173,-2297,373 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 6831,6240,2727,3648,-1958,373 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 18051,24825,600,8421,-1511,373 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 5367,23496,195,11004,-2354,373 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 18051,20106,600,9780,-1511,373 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 7806,20106,195,8715,-2354,373 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15612,24825,2220,6954,-4553,373 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 8295,9885,195,4122,-2045,373 0 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15612,25035,2220,8529,-4553,373 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 8295,9993,195,4686,-2045,373 0 75250 -- MSL 449 ( 9E 242)
-u004F_030B 18051,24825,600,5169,-3554,373 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 7317,9885,195,6870,-1922,373 0 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15126,24825,600,6837,-1316,373 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 5856,9885,0,5661,-1997,373 0 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15126,25035,600,7422,-1316,373 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 5856,9993,0,5907,-1997,373 0 75256 -- MSL 459 ( 9E 248)
-u0053_0301 17565,24825,600,7359,-1559,373 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 5856,11025,195,6111,-1673,373 0 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15612,25035,600,8829,-3008,373 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 5856,13506,195,6465,-2210,373 0 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15612,19590,4569,7557,-3008,373 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 4878,12324,4206,4935,-1139,373 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 16587,24825,2220,7305,-4907,373 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 8781,9885,195,5238,-2501,373 0 75259 -- MSL 475 ( 9E 251)
-u0055_030A 16587,24315,2220,7305,-4907,373 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 8781,10395,195,3834,-2501,373 0 75257 -- MSL 477 ( 9E 249)
-u005A_0301 18051,24825,270,7545,-1265,373 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 5856,9885,0,5901,-1331,373 0 75167 -- MSL 483 ( 9E 159)
-u005A_0307 18051,23370,270,7545,-1265,373 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 5856,9240,0,4245,-1331,373 0 75199 -- MSL 485 ( 9E 191)
-u2070 6342,12150,0,5367,-3551,373 0 51753 -- MSL 1000 ( 6J 41)
-u2074 6342,12504,0,5178,-3602,373 0 51748 -- MSL 1001 ( 6J 36)
-u2075 6342,12000,0,5043,-3029,373 0 51749 -- MSL 1002 ( 6J 37)
-u2076 6342,12642,0,4938,-3590,373 0 51806 -- MSL 1003 ( 6J 94)
-u2077 6342,12000,0,5301,-4556,373 0 51750 -- MSL 1004 ( 6J 38)
-u2078 6342,12150,0,5265,-3677,373 0 51754 -- MSL 1005 ( 6J 42)
-u2079 6342,12150,0,5232,-4034,373 0 51752 -- MSL 1006 ( 6J 40)
-lq 7317,19590,0,6600,-6074,373 2 161171 -- MSL 1017 (19U 147)
-rq 7317,19590,0,6600,-6074,373 2 161172 -- MSL 1018 (19U 148)
-Bq 7317,2064,2151,2220,-1694,373 0 161156 -- MSL 1019 (19U 132)
-u2003 13662,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 10734,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5367,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 13662,1950,195,2514,-2420,373 0 161157 -- MSL 1028 (19U 133)
-vz 5856,9993,0,5907,-1331,373 0 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703,0,8175,-6617,373 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,4212,-4913,373 2 51794 -- MSL 1036 ( 6J 82)
-fi 10245,19920,6555,4416,-41,373 3 60077 -- MSL 1040 ( 7J 173)
-fl 10734,19920,6555,8226,-41,373 3 60078 -- MSL 1041 ( 7J 174)
-ff 11220,19920,6555,8130,-44,373 3 51883 -- MSL 1042 ( 6J 171)
-Fi 15612,19920,6555,4413,-38,373 3 51884 -- MSL 1043 ( 6J 172)
-Fl 16587,19914,6429,8226,-41,373 3 51885 -- MSL 1044 ( 6J 173)
-ij 9270,10146,6555,4560,-2342,373 1 60134 -- MSL 1047 ( 7J 230)
-u2105 15612,12330,600,4140,-4076,373 0 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 15126,23580,6765,7752,-2897,373 3 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 8295,9810,6555,4644,-1463,373 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 17565,19590,4569,7359,-1559,373 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 5856,7410,4206,3423,-1418,373 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 15126,23370,600,5337,-1199,373 2 46301 -- MSL 1065 ( 5T 221)
-bq 4392,2064,2151,2655,-2414,373 0 161154 -- MSL 1067 (19U 130)
-%0 17565,12180,195,3261,-3656,373 0 161161 -- MSL 1068 (19U 137)
-a- 10734,8115,0,2277,-6512,373 0 60154 -- MSL 1084 ( 7J 250)
-ab 10734,9810,0,2814,-6065,373 0 75170 -- MSL 1086 ( 9E 162)
-a. 10734,9240,0,1182,-7526,373 0 75263 -- MSL 1088 ( 9E 255)
-oe 11220,6240,195,3690,-1922,373 0 161180 -- MSL 1090 (19U 156)
-OE 26346,19590,600,4215,-3722,373 2 161164 -- MSL 1091 (19U 140)
-fo 4878,6840,870,4353,-1841,373 0 161163 -- MSL 1092 (19U 139)
-fc 4878,6840,870,3207,-695,373 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 18051,19590,600,6657,-1511,373 2 75171 -- MSL 1095 ( 9E 163)
-/l 6342,19920,195,7704,-1943,373 2 75187 -- MSL 1096 ( 9E 179)
-a" 10734,9885,0,4803,-6143,373 0 75197 -- MSL 1097 ( 9E 189)
-ho 10734,318,2727,1575,-6617,373 0 75186 -- MSL 1098 ( 9E 178)
-vZ 18051,25035,270,7545,-1265,373 2 75150 -- MSL 1106 ( 9E 142)
-IJ 25371,19590,6519,5952,-1199,373 3 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/CR b/contrib/groff/font/devlj4/CR
deleted file mode 100644
index 08f485657c8f..000000000000
--- a/contrib/groff/font/devlj4/CR
+++ /dev/null
@@ -1,330 +0,0 @@
-# Courier
-name CR
-spacewidth 15873
-pcltypeface 4099
-pclproportional 0
-pclweight 0
-pclstyle 0
-charset
-! 15873,15060,330 0 161057 -- MSL 1 (19U 33)
-dq 15873,15060 0 161058 -- MSL 2 (19U 34)
-" "
-sh 15873,16827,2040 2 161059 -- MSL 3 (19U 35)
-# "
-Do 15873,17247,3642 2 161060 -- MSL 4 (19U 36)
-$ "
-% 15873,16380,330 2 161061 -- MSL 5 (19U 37)
-& 15873,14187,330 0 161062 -- MSL 6 (19U 38)
-cq 15873,15060 0 161170 -- MSL 8 (19U 146)
-' "
-( 15873,17070,2580 2 161064 -- MSL 9 (19U 40)
-) 15873,17070,2580 2 161065 -- MSL 10 (19U 41)
-* 15873,15060 0 161066 -- MSL 11 (19U 42)
-+ 15873,11385 0 161067 -- MSL 12 (19U 43)
-, 15873,3195,3420 0 161068 -- MSL 13 (19U 44)
-hy 15873,7275 0 161069 -- MSL 14 (19U 45)
-- "
-. 15873,2805,330 0 161070 -- MSL 15 (19U 46)
-sl 15873,18465,3765 2 161071 -- MSL 16 (19U 47)
-/ "
-0 15873,15390,330 0 161072 -- MSL 17 (19U 48)
-1 15873,15060 0 161073 -- MSL 18 (19U 49)
-2 15873,15390 0 161074 -- MSL 19 (19U 50)
-3 15873,15390,330 0 161075 -- MSL 20 (19U 51)
-4 15873,15060 0 161076 -- MSL 21 (19U 52)
-5 15873,15060,330 0 161077 -- MSL 22 (19U 53)
-6 15873,15390,330 0 161078 -- MSL 23 (19U 54)
-7 15873,15060 0 161079 -- MSL 24 (19U 55)
-8 15873,15390,330 0 161080 -- MSL 25 (19U 56)
-9 15873,15390,330 0 161081 -- MSL 26 (19U 57)
-: 15873,9705,393 0 161082 -- MSL 27 (19U 58)
-; 15873,9705,3420 0 161083 -- MSL 28 (19U 59)
-< 15873,10647,3 0 161084 -- MSL 29 (19U 60)
-= 15873,8451 0 161085 -- MSL 30 (19U 61)
-> 15873,10647,3 0 161086 -- MSL 31 (19U 62)
-? 15873,15390,330 0 161087 -- MSL 32 (19U 63)
-at 15873,14391,363 0 161088 -- MSL 33 (19U 64)
-@ "
-A 15873,15060 0 161089 -- MSL 34 (19U 65)
-B 15873,15060 0 161090 -- MSL 35 (19U 66)
-C 15873,15390,330 0 161091 -- MSL 36 (19U 67)
-D 15873,15060 0 161092 -- MSL 37 (19U 68)
-E 15873,15060 0 161093 -- MSL 38 (19U 69)
-F 15873,15060 0 161094 -- MSL 39 (19U 70)
-G 15873,15390,330 0 161095 -- MSL 40 (19U 71)
-H 15873,15060 0 161096 -- MSL 41 (19U 72)
-I 15873,15060 0 161097 -- MSL 42 (19U 73)
-J 15873,15060,330 0 161098 -- MSL 43 (19U 74)
-K 15873,15060 0 161099 -- MSL 44 (19U 75)
-L 15873,15060 0 161100 -- MSL 45 (19U 76)
-M 15873,15060 0 161101 -- MSL 46 (19U 77)
-N 15873,15060 0 161102 -- MSL 47 (19U 78)
-O 15873,15390,330 0 161103 -- MSL 48 (19U 79)
-P 15873,15060 0 161104 -- MSL 49 (19U 80)
-Q 15873,15390,3360 0 161105 -- MSL 50 (19U 81)
-R 15873,15060 0 161106 -- MSL 51 (19U 82)
-S 15873,15390,330 0 161107 -- MSL 52 (19U 83)
-T 15873,15060 0 161108 -- MSL 53 (19U 84)
-U 15873,15060,330 0 161109 -- MSL 54 (19U 85)
-V 15873,15060 0 161110 -- MSL 55 (19U 86)
-W 15873,15060 0 161111 -- MSL 56 (19U 87)
-X 15873,15060 0 161112 -- MSL 57 (19U 88)
-Y 15873,15060 0 161113 -- MSL 58 (19U 89)
-Z 15873,15060 0 161114 -- MSL 59 (19U 90)
-lB 15873,17070,2580 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 15873,18465,3765 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 15873,17070,2580 2 161117 -- MSL 62 (19U 93)
-] "
-ha 15873,19758 2 161118 -- MSL 63 (19U 94)
-_ 15873,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 15873,15060 0 161169 -- MSL 66 (19U 145)
-` "
-a 15873,11775,330 0 161121 -- MSL 67 (19U 97)
-b 15873,16500,330 2 161122 -- MSL 68 (19U 98)
-c 15873,11775,330 0 161123 -- MSL 69 (19U 99)
-d 15873,16500,330 2 161124 -- MSL 70 (19U 100)
-e 15873,11775,330 0 161125 -- MSL 71 (19U 101)
-f 15873,16500 2 161126 -- MSL 72 (19U 102)
-g 15873,11775,5145 1 161127 -- MSL 73 (19U 103)
-h 15873,16500 2 161128 -- MSL 74 (19U 104)
-i 15873,17235 2 161129 -- MSL 75 (19U 105)
-j 15873,17235,5145 3 161130 -- MSL 76 (19U 106)
-k 15873,16500 2 161131 -- MSL 77 (19U 107)
-l 15873,16500 2 161132 -- MSL 78 (19U 108)
-m 15873,11775 0 161133 -- MSL 79 (19U 109)
-n 15873,11775 0 161134 -- MSL 80 (19U 110)
-o 15873,11775,330 0 161135 -- MSL 81 (19U 111)
-p 15873,11775,5145 1 161136 -- MSL 82 (19U 112)
-q 15873,11775,5145 1 161137 -- MSL 83 (19U 113)
-r 15873,11775 0 161138 -- MSL 84 (19U 114)
-s 15873,11775,330 0 161139 -- MSL 85 (19U 115)
-t 15873,14826,330 0 161140 -- MSL 86 (19U 116)
-u 15873,11445,330 0 161141 -- MSL 87 (19U 117)
-v 15873,11445 0 161142 -- MSL 88 (19U 118)
-w 15873,11445 0 161143 -- MSL 89 (19U 119)
-x 15873,11445 0 161144 -- MSL 90 (19U 120)
-y 15873,11445,5145 1 161145 -- MSL 91 (19U 121)
-z 15873,11445 0 161146 -- MSL 92 (19U 122)
-{ 15873,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 15873,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 15873,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 15873,7233 0 161150 -- MSL 96 (19U 126)
-`A 15873,21180 2 161216 -- MSL 99 (19U 192)
-^A 15873,21180 2 161218 -- MSL 100 (19U 194)
-`E 15873,21180 2 161224 -- MSL 101 (19U 200)
-^E 15873,21180 2 161226 -- MSL 102 (19U 202)
-:E 15873,20670 2 161227 -- MSL 103 (19U 203)
-^I 15873,21180 2 161230 -- MSL 104 (19U 206)
-:I 15873,20670 2 161231 -- MSL 105 (19U 207)
-aa 15873,17565 2 161204 -- MSL 106 (19U 180)
-ga 15873,17565 2 161120 -- MSL 107 (19U 96)
-a^ 15873,17565 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 15873,16905 2 161192 -- MSL 109 (19U 168)
-~ 15873,16830 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 15873,21180,330 2 161241 -- MSL 111 (19U 217)
-^U 15873,21180,330 2 161243 -- MSL 112 (19U 219)
-u00AF 15873,21108 2 161199 -- MSL 113 (19U 175)
-'Y 15873,21180 2 161245 -- MSL 114 (19U 221)
-'y 15873,17565,5145 3 161277 -- MSL 115 (19U 253)
-de 15873,15390 0 161200 -- MSL 116 (19U 176)
-,C 15873,15390,5175 1 161223 -- MSL 117 (19U 199)
-,c 15873,11775,4815 1 161255 -- MSL 118 (19U 231)
-~N 15873,20571 2 161233 -- MSL 119 (19U 209)
-~n 15873,16830 2 161265 -- MSL 120 (19U 241)
-r! 15873,11880,3510 0 161185 -- MSL 121 (19U 161)
-r? 15873,11898,3822 0 161215 -- MSL 122 (19U 191)
-Cs 15873,15684 2 161188 -- MSL 123 (19U 164)
-Po 15873,15390,330 0 161187 -- MSL 124 (19U 163)
-Ye 15873,15060 0 161189 -- MSL 125 (19U 165)
-sc 15873,15390,1905 0 161191 -- MSL 126 (19U 167)
-Fn 15873,15090,4350 0 161155 -- MSL 127 (19U 131)
-ct 15873,16179,1431 2 161186 -- MSL 128 (19U 162)
-^a 15873,17565,330 2 161250 -- MSL 129 (19U 226)
-^e 15873,17565,330 2 161258 -- MSL 130 (19U 234)
-^o 15873,17565,330 2 161268 -- MSL 131 (19U 244)
-^u 15873,17565,330 2 161275 -- MSL 132 (19U 251)
-'a 15873,17565,330 2 161249 -- MSL 133 (19U 225)
-'e 15873,17565,330 2 161257 -- MSL 134 (19U 233)
-'o 15873,17565,330 2 161267 -- MSL 135 (19U 243)
-'u 15873,17565,330 2 161274 -- MSL 136 (19U 250)
-`a 15873,17565,330 2 161248 -- MSL 137 (19U 224)
-`e 15873,17565,330 2 161256 -- MSL 138 (19U 232)
-`o 15873,17565,330 2 161266 -- MSL 139 (19U 242)
-`u 15873,17565,330 2 161273 -- MSL 140 (19U 249)
-:a 15873,16905,330 2 161252 -- MSL 141 (19U 228)
-:e 15873,16905,330 2 161259 -- MSL 142 (19U 235)
-:o 15873,16905,330 2 161270 -- MSL 143 (19U 246)
-:u 15873,16905,330 2 161276 -- MSL 144 (19U 252)
-oA 15873,21690 2 161221 -- MSL 145 (19U 197)
-^i 15873,17565 2 161262 -- MSL 146 (19U 238)
-/O 15873,15591,612 2 161240 -- MSL 147 (19U 216)
-AE 15873,15060 0 161222 -- MSL 148 (19U 198)
-oa 15873,17997,330 2 161253 -- MSL 149 (19U 229)
-'i 15873,17565 2 161261 -- MSL 150 (19U 237)
-/o 15873,11856,459 0 161272 -- MSL 151 (19U 248)
-ae 15873,11775,330 0 161254 -- MSL 152 (19U 230)
-:A 15873,20670 2 161220 -- MSL 153 (19U 196)
-`i 15873,17565 2 161260 -- MSL 154 (19U 236)
-:O 15873,20670,330 2 161238 -- MSL 155 (19U 214)
-:U 15873,20670,330 2 161244 -- MSL 156 (19U 220)
-'E 15873,21180 2 161225 -- MSL 157 (19U 201)
-:i 15873,16905 2 161263 -- MSL 158 (19U 239)
-ss 15873,16500,330 2 161247 -- MSL 159 (19U 223)
-^O 15873,21180,330 2 161236 -- MSL 160 (19U 212)
-'A 15873,21180 2 161217 -- MSL 161 (19U 193)
-~A 15873,20571 2 161219 -- MSL 162 (19U 195)
-~a 15873,16830,330 2 161251 -- MSL 163 (19U 227)
--D 15873,15060 0 161232 -- MSL 164 (19U 208)
-Sd 15873,18015,330 2 161264 -- MSL 165 (19U 240)
-'I 15873,21180 2 161229 -- MSL 166 (19U 205)
-`I 15873,21180 2 161228 -- MSL 167 (19U 204)
-'O 15873,21180,330 2 161235 -- MSL 168 (19U 211)
-`O 15873,21180,330 2 161234 -- MSL 169 (19U 210)
-~O 15873,20571,330 2 161237 -- MSL 170 (19U 213)
-~o 15873,16830,330 2 161269 -- MSL 171 (19U 245)
-vS 15873,21180,330 2 161162 -- MSL 172 (19U 138)
-vs 15873,17565,330 2 161178 -- MSL 173 (19U 154)
-'U 15873,21180,330 2 161242 -- MSL 174 (19U 218)
-:Y 15873,20670 2 161183 -- MSL 175 (19U 159)
-:y 15873,16905,5145 3 161279 -- MSL 176 (19U 255)
-TP 15873,15060 0 161246 -- MSL 177 (19U 222)
-Tp 15873,16500,5145 3 161278 -- MSL 178 (19U 254)
-mc 15873,11445,5595 1 161205 -- MSL 180 (19U 181)
-ps 15873,19635,4080 2 161206 -- MSL 181 (19U 182)
-34 15873,15519,2673 2 161214 -- MSL 182 (19U 190)
-\- 15873,6435 0 60096 -- MSL 183 ( 7J 192)
-14 15873,15519,2673 2 161212 -- MSL 184 (19U 188)
-12 15873,15519,2673 2 161213 -- MSL 185 (19U 189)
-Of 15873,15390 0 161194 -- MSL 186 (19U 170)
-Om 15873,15390 0 161210 -- MSL 187 (19U 186)
-Fo 15873,11490 0 161195 -- MSL 188 (19U 171)
-Fc 15873,11490 0 161211 -- MSL 190 (19U 187)
-t+- 15873,11385,2835 0 161201 -- MSL 191 (19U 177)
-bb 15873,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 15873,19635 2 161193 -- MSL 193 (19U 169)
-tno 15873,8865 0 161196 -- MSL 194 (19U 172)
-u00AD 15873,7275 0 161197 -- MSL 195 (19U 173)
-rg 15873,19635 2 161198 -- MSL 196 (19U 174)
-S2 15873,15240 0 161202 -- MSL 197 (19U 178)
-S3 15873,15240 0 161203 -- MSL 198 (19U 179)
-ac 15873,0,4815 1 161208 -- MSL 199 (19U 184)
-S1 15873,15060 0 161209 -- MSL 200 (19U 185)
-tmu 15873,11340 0 161239 -- MSL 201 (19U 215)
-tdi 15873,10530 0 161271 -- MSL 202 (19U 247)
-u203C 15873,15060,330 0 87315 -- MSL 221 (10U 19)
-u20A7 15873,15060,330 0 60121 -- MSL 232 ( 7J 217)
-pc 15873,8931 0 161207 -- MSL 302 (19U 183)
-u013F 15873,15060 0 51943 -- MSL 306 ( 6J 231)
-u0140 15873,16500 2 51959 -- MSL 307 ( 6J 247)
-u2113 15873,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 15873,15060 0 51951 -- MSL 309 ( 6J 239)
-fm 15873,15060 0 60101 -- MSL 310 ( 7J 197)
-sd 15873,15060 0 60102 -- MSL 311 ( 7J 198)
-dg 15873,15060,1290 0 161158 -- MSL 312 (19U 134)
-tm 15873,17850 2 161177 -- MSL 313 (19U 153)
-u2017 15873,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 15873,17565 2 75169 -- MSL 315 ( 9E 161)
-ao 15873,17997 2 60152 -- MSL 316 ( 7J 248)
-f/ 15873,15519,2673 2 60109 -- MSL 324 ( 7J 205)
-em 15873,7275 0 161175 -- MSL 325 (19U 151)
-en 15873,7275 0 161174 -- MSL 326 (19U 150)
-dd 15873,15060,1290 0 161159 -- MSL 327 (19U 135)
-.i 15873,11445 0 46333 -- MSL 328 ( 5T 253)
-aq 15873,15060 0 161063 -- MSL 329 (19U 39)
-bu 15873,12714 0 161173 -- MSL 331 (19U 149)
-u207F 15873,15240 0 87548 -- MSL 332 (10U 252)
-u0111 15873,16500,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 15873,20133 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 15873,16725,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 15873,15060,3624 0 75173 -- MSL 404 ( 9E 165)
-u0061_0328 15873,11775,4263 0 75193 -- MSL 405 ( 9E 185)
-'C 15873,21180,330 2 75206 -- MSL 406 ( 9E 198)
-'c 15873,17565,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 15873,21180,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 15873,17565,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 15873,21180 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15873,18870,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15873,21180 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 15873,17565,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15873,15060,3624 0 75210 -- MSL 422 ( 9E 202)
-u0065_0328 15873,11775,4263 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15873,21180 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 15873,22326 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15873,18870 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 15873,18870 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15873,21180 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15873,17565 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15873,21180 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15873,17565 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 15873,21810,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15873,18195,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 15873,21180 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 15873,17565 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 15873,21180 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 15873,17565 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 15873,21180,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 15873,17565,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 15873,21180 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 15873,18870,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 15873,15060,5175 1 75230 -- MSL 468 ( 9E 222)
-u0074_0327 15873,14826,4815 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 15873,21810,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15873,18195,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 15873,21690,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15873,17997,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 15873,21180 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 15873,17565 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 15873,20670 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 15873,16905 2 75199 -- MSL 485 ( 9E 191)
-u2070 15873,15240 0 51753 -- MSL 1000 ( 6J 41)
-u2074 15873,15060 0 51748 -- MSL 1001 ( 6J 36)
-u2075 15873,15060 0 51749 -- MSL 1002 ( 6J 37)
-u2076 15873,15240 0 51806 -- MSL 1003 ( 6J 94)
-u2077 15873,15060 0 51750 -- MSL 1004 ( 6J 38)
-u2078 15873,15240 0 51754 -- MSL 1005 ( 6J 42)
-u2079 15873,15240 0 51752 -- MSL 1006 ( 6J 40)
-lq 15873,15060 0 161171 -- MSL 1017 (19U 147)
-rq 15873,15060 0 161172 -- MSL 1018 (19U 148)
-Bq 15873,3495,3120 0 161156 -- MSL 1019 (19U 132)
-u2003 15873,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 15873,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 15873,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 15873,2805,330 0 161157 -- MSL 1028 (19U 133)
-vz 15873,17565 2 75166 -- MSL 1031 ( 9E 158)
-u2120 15873,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 15873,15060,2466 0 51794 -- MSL 1036 ( 6J 82)
-fi 15873,17235 2 60077 -- MSL 1040 ( 7J 173)
-fl 15873,16500 2 60078 -- MSL 1041 ( 7J 174)
-ff 15873,16500 2 51883 -- MSL 1042 ( 6J 171)
-Fi 15873,16500 2 51884 -- MSL 1043 ( 6J 172)
-Fl 15873,16500 2 51885 -- MSL 1044 ( 6J 173)
-ij 15873,17235,5145 3 60134 -- MSL 1047 ( 7J 230)
-u2105 15873,15543,2634 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 15873,20133,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15873,16725,5145 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 15873,15390,5175 1 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 15873,11775,4815 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 15873,20670 2 46301 -- MSL 1065 ( 5T 221)
-bq 15873,3495,3120 0 161154 -- MSL 1067 (19U 130)
-%0 15873,16380,330 2 161161 -- MSL 1068 (19U 137)
-a- 15873,15726 2 60154 -- MSL 1084 ( 7J 250)
-ab 15873,16725 2 75170 -- MSL 1086 ( 9E 162)
-a. 15873,16905 2 75263 -- MSL 1088 ( 9E 255)
-oe 15873,11775,330 0 161180 -- MSL 1090 (19U 156)
-OE 15873,15060 0 161164 -- MSL 1091 (19U 140)
-fo 15873,10845 0 161163 -- MSL 1092 (19U 139)
-fc 15873,10845 0 161179 -- MSL 1093 (19U 155)
-sq 15873,14106 0 60091 -- MSL 1094 ( 7J 187)
-/L 15873,15060 0 75171 -- MSL 1095 ( 9E 163)
-/l 15873,16500 2 75187 -- MSL 1096 ( 9E 179)
-a" 15873,18195 2 75197 -- MSL 1097 ( 9E 189)
-ho 15873,0,4263 0 75186 -- MSL 1098 ( 9E 178)
-vZ 15873,21180 2 75150 -- MSL 1106 ( 9E 142)
-IJ 15873,15060,2850 0 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/DESC.in b/contrib/groff/font/devlj4/DESC.in
deleted file mode 100644
index b726647f61af..000000000000
--- a/contrib/groff/font/devlj4/DESC.in
+++ /dev/null
@@ -1,9 +0,0 @@
-hor 1
-vert 1
-sizescale 4
-sizes 1-3999 0
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-family T
-tcommand
-postpro grolj4
diff --git a/contrib/groff/font/devlj4/GB b/contrib/groff/font/devlj4/GB
deleted file mode 100644
index 55bf288a4fb0..000000000000
--- a/contrib/groff/font/devlj4/GB
+++ /dev/null
@@ -1,718 +0,0 @@
-# Garmond Hlb
-name GB
-spacewidth 7317
-pcltypeface 4197
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -3902
-P , -3902
-V A -3413
-A V -4388
-T o -4388
-T r -2924
-T c -3902
-T e -3902
-T d -3902
-T s -2924
-T y -3413
-T a -2924
-T w -3413
-T u -2924
-L T -2924
-L Y -2924
-Y o -3902
-Y e -3413
-Y a -3413
-A W -4388
-W A -3413
-T A -2924
-V o -3413
-V e -2924
-V a -2924
-Y A -3413
-F A -2438
-F . -3902
-F , -3902
-A T -2924
-A Y -3413
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -2924
-T , -2924
-L W -2924
-P A -2438
-V . -3902
-V , -3902
-Y . -3413
-Y , -3413
-W o -3413
-W e -2924
-W a -2924
-W . -3902
-W , -3902
-r . -1949
-r , -1949
-w . -974
-w , -974
-Y u -2438
-A v -1949
-A y -1949
-A w -1949
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -1949
-O V -1949
-O Y -1949
-O . -1949
-O , -1949
-L y -974
-V y -1949
-V u -1949
-V O -1949
-V G -1949
-V C -1949
-V Q -1949
-D T -1949
-D V -1949
-D Y -1949
-D . -1949
-D , -1949
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -1460
-F e -974
-F a -974
-O A -974
-O W -1949
-L U -485
-R T -1949
-R V -1949
-R Y -1949
-R W -1949
-G T -485
-P o -1460
-P g -974
-P e -974
-P a -974
-D A -974
-D W -1949
-B T -974
-B Y -974
-B . -974
-B , -974
-A O -974
-A G -974
-A C -974
-A U -1460
-A Q -974
-W r -1949
-W y -1949
-W u -1949
-W O -1949
-W G -1949
-W C -1949
-W Q -1949
-J A -485
-J . -485
-J , -485
-U A -1460
-U . -1949
-U , -1949
-Q A -974
-Q W -1949
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -485
-G V -485
-G Y -485
-G W -485
-G . -485
-G , -485
-P T -974
-P V -974
-P Y -974
-D X -1460
-B V -974
-B X -974
-B A -974
-B W -974
-S . -974
-S , -974
-X o -1460
-X e -974
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -974
-Q X -1460
-K o -1460
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -1460
-o y -1460
-o x -1460
-o w -1460
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -974
-p v -974
-p y -974
-p x -974
-v o -1460
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -485
-e y -485
-b v -974
-b y -974
-b w -974
-s . -485
-s , -485
-y o -1460
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-x o -1460
-x c -974
-x e -974
-x d -974
-x q -974
-a v -974
-a y -974
-a w -974
-w o -1460
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-T S -974
-R o -1460
-R y -1460
-R O -1460
-R G -1460
-R C -1460
-R U -1460
-R Q -1460
-G X -485
-G A -485
-P s -485
-P Z -974
-P X -974
-P W -974
-V S -974
-S A -974
-Y S -974
-A t -485
-A c -974
-A d -974
-A q -974
-W S -974
-K c -974
-o f -485
-h w -974
-n w -974
-m w -974
-r o -1460
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-p w -974
-v e -974
-v s -485
-e x -485
-e w -485
-y e -974
-y s -485
-f o -1460
-f c -974
-f e -974
-f d -974
-f q -974
-w e -974
-w s -485
-k o -974
-k c -485
-k e -485
-k d -485
-k q -485
-O Z -974
-R e -974
-G Z -485
-E o -485
-E v -974
-E y -974
-E w -974
-Z o -485
-Z y -974
-Z w -974
-D Z -974
-B Z -974
-J o -485
-U g -485
-t o -974
-t c -485
-t e -485
-t d -485
-t q -485
-o t -485
-o g -485
-o z -974
-o j -485
-r s -485
-g o -974
-g c -485
-g e -485
-g d -485
-g q -485
-p z -485
-e z -485
-z o -974
-z c -485
-z e -485
-z d -485
-z q -485
-b z -485
-C o -485
-C y -974
-B o -485
-B y -485
-B S -485
-B U -485
-U o -974
-U c -485
-U e -485
-U d -485
-U s -485
-U a -485
-U q -485
-L cq -2924
-L ' -2924
-T hy -3413
-T - -3413
-T en -3413
-T em -3413
-A cq -2924
-A ' -2924
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -1460
-p ' -1460
-e cq -485
-e ' -485
-b cq -974
-b ' -974
-a cq -974
-a ' -974
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -1460
-R ' -1460
-W hy -1949
-W - -1949
-W en -1949
-W em -1949
-cq d -1460
-' d -1460
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -974
-A - -974
-A en -974
-A em -974
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -485
-' s -485
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-R hy -1460
-R - -1460
-R en -1460
-R em -1460
-G cq -485
-G ' -485
-B cq -485
-B ' -485
-charset
-! 7317,18948,390 2 161057 -- MSL 1 (19U 33)
-dq 10734,18987 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,17805,390 0 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19584,1779 2 161060 -- MSL 4 (19U 36)
-$ "
-% 21954,17805,390 0 161061 -- MSL 5 (19U 37)
-& 22443,18165,390 0 161062 -- MSL 6 (19U 38)
-cq 6831,18555 2 161170 -- MSL 8 (19U 146)
-' "
-( 8295,20250,6705 3 161064 -- MSL 9 (19U 40)
-) 8295,20250,6705 3 161065 -- MSL 10 (19U 41)
-* 13173,18555 2 161066 -- MSL 11 (19U 42)
-+ 21954,13467,87 0 161067 -- MSL 12 (19U 43)
-, 7317,3972,4152 0 161068 -- MSL 13 (19U 44)
-hy 7317,7575 0 161069 -- MSL 14 (19U 45)
-- "
-. 7317,3915,390 0 161070 -- MSL 15 (19U 46)
-sl 13173,20250,300 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,17805,390 0 161072 -- MSL 17 (19U 48)
-1 13173,17805,150 0 161073 -- MSL 18 (19U 49)
-2 13173,17805,150 0 161074 -- MSL 19 (19U 50)
-3 13173,17805,390 0 161075 -- MSL 20 (19U 51)
-4 13173,17805 0 161076 -- MSL 21 (19U 52)
-5 13173,17490,390 0 161077 -- MSL 22 (19U 53)
-6 13173,17805,390 0 161078 -- MSL 23 (19U 54)
-7 13173,17415,390 0 161079 -- MSL 24 (19U 55)
-8 13173,17805,390 0 161080 -- MSL 25 (19U 56)
-9 13173,17805,390 0 161081 -- MSL 26 (19U 57)
-: 7317,11940,390 0 161082 -- MSL 27 (19U 58)
-; 7317,11940,4152 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 21954,9654 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 10245,18948,390 2 161087 -- MSL 32 (19U 63)
-at 21954,16950,4131 0 161088 -- MSL 33 (19U 64)
-@ "
-A 20004,18939,150 2 161089 -- MSL 34 (19U 65)
-B 17565,18315,150 2 161090 -- MSL 35 (19U 66)
-C 20004,18555,390 2 161091 -- MSL 36 (19U 67)
-D 21954,18555,150 2 161092 -- MSL 37 (19U 68)
-E 16587,18315,150 2 161093 -- MSL 38 (19U 69)
-F 16587,18315,150 2 161094 -- MSL 39 (19U 70)
-G 21468,18555,390 2 161095 -- MSL 40 (19U 71)
-H 23418,18315,150 2 161096 -- MSL 41 (19U 72)
-I 10245,18315,150 2 161097 -- MSL 42 (19U 73)
-J 9759,18315,6363 3 161098 -- MSL 43 (19U 74)
-K 19515,18315,150 2 161099 -- MSL 44 (19U 75)
-L 16101,18315,150 2 161100 -- MSL 45 (19U 76)
-M 24882,18315,390 2 161101 -- MSL 46 (19U 77)
-N 22443,18315,612 2 161102 -- MSL 47 (19U 78)
-O 22932,18555,390 2 161103 -- MSL 48 (19U 79)
-P 16587,18555,150 2 161104 -- MSL 49 (19U 80)
-Q 22932,18555,5253 2 161105 -- MSL 50 (19U 81)
-R 19515,18315,150 2 161106 -- MSL 51 (19U 82)
-S 14148,18555,390 2 161107 -- MSL 52 (19U 83)
-T 17565,19500,138 2 161108 -- MSL 53 (19U 84)
-U 21468,18315,390 2 161109 -- MSL 54 (19U 85)
-V 19515,18315,390 2 161110 -- MSL 55 (19U 86)
-W 26346,18315,390 2 161111 -- MSL 56 (19U 87)
-X 20004,18315,150 2 161112 -- MSL 57 (19U 88)
-Y 18540,18315,150 2 161113 -- MSL 58 (19U 89)
-Z 17565,19500,150 2 161114 -- MSL 59 (19U 90)
-lB 8295,18165,4905 0 161115 -- MSL 60 (19U 91)
-[ "
-rs 13173,20250,300 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8295,18165,4905 0 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 6831,18555 2 161169 -- MSL 66 (19U 145)
-` "
-a 12198,12420,390 0 161121 -- MSL 67 (19U 97)
-b 14637,20250,390 2 161122 -- MSL 68 (19U 98)
-c 11220,12420,390 0 161123 -- MSL 69 (19U 99)
-d 14637,20250,390 2 161124 -- MSL 70 (19U 100)
-e 11709,12420,390 0 161125 -- MSL 71 (19U 101)
-f 9270,20250,150 2 161126 -- MSL 72 (19U 102)
-g 14148,12420,6705 1 161127 -- MSL 73 (19U 103)
-h 15612,20250,150 2 161128 -- MSL 74 (19U 104)
-i 7806,19329,150 2 161129 -- MSL 75 (19U 105)
-j 7317,19329,6705 3 161130 -- MSL 76 (19U 106)
-k 14637,20250,150 2 161131 -- MSL 77 (19U 107)
-l 7806,20250,150 2 161132 -- MSL 78 (19U 108)
-m 22932,12420,150 0 161133 -- MSL 79 (19U 109)
-n 15612,12420,150 0 161134 -- MSL 80 (19U 110)
-o 14148,12420,390 0 161135 -- MSL 81 (19U 111)
-p 14637,12420,6855 1 161136 -- MSL 82 (19U 112)
-q 14637,12420,6855 1 161137 -- MSL 83 (19U 113)
-r 11220,12420,150 0 161138 -- MSL 84 (19U 114)
-s 9759,12420,390 0 161139 -- MSL 85 (19U 115)
-t 9759,15585,390 0 161140 -- MSL 86 (19U 116)
-u 15612,12420,390 0 161141 -- MSL 87 (19U 117)
-v 14148,12180,390 0 161142 -- MSL 88 (19U 118)
-w 20004,12180,390 0 161143 -- MSL 89 (19U 119)
-x 14148,12180,150 0 161144 -- MSL 90 (19U 120)
-y 13662,12180,6705 1 161145 -- MSL 91 (19U 121)
-z 12684,12870,150 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 20004,24810,150 2 161216 -- MSL 99 (19U 192)
-^A 20004,24810,150 2 161218 -- MSL 100 (19U 194)
-`E 16587,24810,150 2 161224 -- MSL 101 (19U 200)
-^E 16587,24810,150 2 161226 -- MSL 102 (19U 202)
-:E 16587,23505,150 2 161227 -- MSL 103 (19U 203)
-^I 10245,24810,150 2 161230 -- MSL 104 (19U 206)
-:I 10245,23505,150 2 161231 -- MSL 105 (19U 207)
-aa 13173,20475 2 161204 -- MSL 106 (19U 180)
-ga 13173,20475 2 161120 -- MSL 107 (19U 96)
-a^ 13173,20475 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,18090 0 161192 -- MSL 109 (19U 168)
-~ 13173,18324 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 21468,24810,390 2 161241 -- MSL 111 (19U 217)
-^U 21468,24810,390 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 18540,24810,150 2 161245 -- MSL 114 (19U 221)
-'y 13662,20475,6705 3 161277 -- MSL 115 (19U 253)
-de 13173,17415 0 161200 -- MSL 116 (19U 176)
-,C 20004,18555,6405 3 161223 -- MSL 117 (19U 199)
-,c 11220,12420,5694 0 161255 -- MSL 118 (19U 231)
-~N 22443,23973,612 2 161233 -- MSL 119 (19U 209)
-~n 15612,18324,150 2 161265 -- MSL 120 (19U 241)
-r! 7317,12330,7008 1 161185 -- MSL 121 (19U 161)
-r? 10245,12330,7008 1 161215 -- MSL 122 (19U 191)
-Cs 13173,15834 0 161188 -- MSL 123 (19U 164)
-Po 13173,17805,390 0 161187 -- MSL 124 (19U 163)
-Ye 13173,18315,150 2 161189 -- MSL 125 (19U 165)
-sc 13173,18555,6705 3 161191 -- MSL 126 (19U 167)
-Fn 13173,20250,6705 3 161155 -- MSL 127 (19U 131)
-ct 13173,18012,57 0 161186 -- MSL 128 (19U 162)
-^a 12198,20475,390 2 161250 -- MSL 129 (19U 226)
-^e 11709,20475,390 2 161258 -- MSL 130 (19U 234)
-^o 14148,20475,390 2 161268 -- MSL 131 (19U 244)
-^u 15612,20475,390 2 161275 -- MSL 132 (19U 251)
-'a 12198,20475,390 2 161249 -- MSL 133 (19U 225)
-'e 11709,20475,390 2 161257 -- MSL 134 (19U 233)
-'o 14148,20475,390 2 161267 -- MSL 135 (19U 243)
-'u 15612,20475,390 2 161274 -- MSL 136 (19U 250)
-`a 12198,20475,390 2 161248 -- MSL 137 (19U 224)
-`e 11709,20475,390 2 161256 -- MSL 138 (19U 232)
-`o 14148,20475,390 2 161266 -- MSL 139 (19U 242)
-`u 15612,20475,390 2 161273 -- MSL 140 (19U 249)
-:a 12198,18090,390 0 161252 -- MSL 141 (19U 228)
-:e 11709,18090,390 0 161259 -- MSL 142 (19U 235)
-:o 14148,18090,390 0 161270 -- MSL 143 (19U 246)
-:u 15612,18090,390 0 161276 -- MSL 144 (19U 252)
-oA 20004,25065,150 2 161221 -- MSL 145 (19U 197)
-^i 7806,20475,150 2 161262 -- MSL 146 (19U 238)
-/O 22932,18729,390 2 161240 -- MSL 147 (19U 216)
-AE 25857,18315,150 2 161222 -- MSL 148 (19U 198)
-oa 12198,19836,390 2 161253 -- MSL 149 (19U 229)
-'i 7806,20475,150 2 161261 -- MSL 150 (19U 237)
-/o 14148,12525,804 0 161272 -- MSL 151 (19U 248)
-ae 18051,12420,390 0 161254 -- MSL 152 (19U 230)
-:A 20004,23505,150 2 161220 -- MSL 153 (19U 196)
-`i 7806,20475,150 2 161260 -- MSL 154 (19U 236)
-:O 22932,23505,390 2 161238 -- MSL 155 (19U 214)
-:U 21468,23505,390 2 161244 -- MSL 156 (19U 220)
-'E 16587,24810,150 2 161225 -- MSL 157 (19U 201)
-:i 7806,18090,150 0 161263 -- MSL 158 (19U 239)
-ss 15612,20250,390 2 161247 -- MSL 159 (19U 223)
-^O 22932,24810,390 2 161236 -- MSL 160 (19U 212)
-'A 20004,24810,150 2 161217 -- MSL 161 (19U 193)
-~A 20004,23973,150 2 161219 -- MSL 162 (19U 195)
-~a 12198,18324,390 2 161251 -- MSL 163 (19U 227)
--D 21954,18555,150 2 161232 -- MSL 164 (19U 208)
-Sd 14148,20250,390 2 161264 -- MSL 165 (19U 240)
-'I 10245,24810,150 2 161229 -- MSL 166 (19U 205)
-`I 10245,24810,150 2 161228 -- MSL 167 (19U 204)
-'O 22932,24810,390 2 161235 -- MSL 168 (19U 211)
-`O 22932,24810,390 2 161234 -- MSL 169 (19U 210)
-~O 22932,23973,390 2 161237 -- MSL 170 (19U 213)
-~o 14148,18324,390 2 161269 -- MSL 171 (19U 245)
-vS 14148,24810,390 2 161162 -- MSL 172 (19U 138)
-vs 9759,20475,390 2 161178 -- MSL 173 (19U 154)
-'U 21468,24810,390 2 161242 -- MSL 174 (19U 218)
-:Y 18540,23505,150 2 161183 -- MSL 175 (19U 159)
-:y 13662,18090,6705 1 161279 -- MSL 176 (19U 255)
-TP 16587,18315,153 2 161246 -- MSL 177 (19U 222)
-Tp 14637,20250,6855 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5193 0 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 21954,17805,390 0 161214 -- MSL 182 (19U 190)
-\- 21954,7755 0 60096 -- MSL 183 ( 7J 192)
-14 21954,17805,390 0 161212 -- MSL 184 (19U 188)
-12 21954,17805,390 0 161213 -- MSL 185 (19U 189)
-Of 12198,17805 0 161194 -- MSL 186 (19U 170)
-Om 12198,17805 0 161210 -- MSL 187 (19U 186)
-Fo 12684,10605 0 161195 -- MSL 188 (19U 171)
-Fc 12684,10605 0 161211 -- MSL 190 (19U 187)
-t+- 21954,13467,3354 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 2 161190 -- MSL 192 (19U 166)
-co 13173,19725 2 161193 -- MSL 193 (19U 169)
-tno 21954,10560 0 161196 -- MSL 194 (19U 172)
-u00AD 7317,7575 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725 2 161198 -- MSL 196 (19U 174)
-S2 9270,17805 0 161202 -- MSL 197 (19U 178)
-S3 9270,17805 0 161203 -- MSL 198 (19U 179)
-ac 13173,57,5694 0 161208 -- MSL 199 (19U 184)
-S1 9270,17805 0 161209 -- MSL 200 (19U 185)
-tmu 21954,13470,144 0 161239 -- MSL 201 (19U 215)
-tdi 21954,13383,3 0 161271 -- MSL 202 (19U 247)
-u203C 13662,18948,390 2 87315 -- MSL 221 (10U 19)
-u20A7 26346,18555,390 2 60121 -- MSL 232 ( 7J 217)
-pc 7317,10722 0 161207 -- MSL 302 (19U 183)
-u013F 16101,18315,150 2 51943 -- MSL 306 ( 6J 231)
-u0140 10734,20250,150 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18045,765 0 60122 -- MSL 308 ( 7J 218)
-u0149 21468,18555,150 2 51951 -- MSL 309 ( 6J 239)
-fm 13173,17805 0 60101 -- MSL 310 ( 7J 197)
-sd 13173,17805 0 60102 -- MSL 311 ( 7J 198)
-dg 13173,18555,6579 3 161158 -- MSL 312 (19U 134)
-tm 16101,17550 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,20475 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,19836 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,17805,390 0 60109 -- MSL 324 ( 7J 205)
-em 21954,7185 0 161175 -- MSL 325 (19U 151)
-en 13173,7185 0 161174 -- MSL 326 (19U 150)
-dd 13173,18555,4905 2 161159 -- MSL 327 (19U 135)
-.i 7806,12420,150 0 46333 -- MSL 328 ( 5T 253)
-aq 6831,18987 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 14637,17805 0 87548 -- MSL 332 (10U 252)
-u0111 14637,20250,390 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 20004,23505,150 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 12198,17079,390 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 20004,18939,3861 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 12198,12420,4317 0 75193 -- MSL 405 ( 9E 185)
-'C 20004,24810,390 2 75206 -- MSL 406 ( 9E 198)
-'c 11220,20475,390 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 20004,24810,390 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11220,20475,390 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 21954,24810,150 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 19029,20250,390 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16587,24810,150 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,20475,390 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16587,18315,3861 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,12420,4317 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 16101,24810,150 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7806,25500,150 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 16101,18798,150 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 11709,20250,150 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 22443,24810,612 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15612,20475,150 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 22443,24810,612 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15612,20475,150 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 22932,24810,390 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14148,20475,390 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 19515,24810,150 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 11220,20475,150 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 19515,24810,150 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 11220,20475,150 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,24810,390 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 9759,20475,390 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 17565,24810,138 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 11220,20250,390 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 17565,19500,6405 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 9759,15585,5694 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 21468,24810,390 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15612,20475,390 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 21468,25065,390 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15612,19836,390 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,24810,150 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12684,20475,150 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,23808,150 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12684,18471,150 2 75199 -- MSL 485 ( 9E 191)
-u2070 9270,17805 0 51753 -- MSL 1000 ( 6J 41)
-u2074 9270,17805 0 51748 -- MSL 1001 ( 6J 36)
-u2075 9270,17625 0 51749 -- MSL 1002 ( 6J 37)
-u2076 9270,17805 0 51806 -- MSL 1003 ( 6J 94)
-u2077 9270,17625 0 51750 -- MSL 1004 ( 6J 38)
-u2078 9270,17805 0 51754 -- MSL 1005 ( 6J 42)
-u2079 9270,17805 0 51752 -- MSL 1006 ( 6J 40)
-lq 12198,18555 2 161171 -- MSL 1017 (19U 147)
-rq 12198,18555 2 161172 -- MSL 1018 (19U 148)
-Bq 12198,3714,3519 0 161156 -- MSL 1019 (19U 132)
-u2003 21954,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7317,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 21954,3261,390 0 161157 -- MSL 1028 (19U 133)
-vz 12684,20475,150 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 15612,20250,150 2 60077 -- MSL 1040 ( 7J 173)
-fl 15612,20250,150 2 60078 -- MSL 1041 ( 7J 174)
-ff 17076,20250,150 2 51883 -- MSL 1042 ( 6J 171)
-Fi 23418,20250,150 2 51884 -- MSL 1043 ( 6J 172)
-Fl 23418,20250,150 2 51885 -- MSL 1044 ( 6J 173)
-ij 15126,19329,6705 3 60134 -- MSL 1047 ( 7J 230)
-u2105 25368,20169,300 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 21468,23505,390 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 14148,17079,6705 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,18555,6405 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 9759,12420,5694 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 10245,23808,150 2 46301 -- MSL 1065 ( 5T 221)
-bq 6831,3714,3519 0 161154 -- MSL 1067 (19U 130)
-%0 30249,17805,180 0 161161 -- MSL 1068 (19U 137)
-a- 13173,17088 0 60154 -- MSL 1084 ( 7J 250)
-ab 13173,17079 0 75170 -- MSL 1086 ( 9E 162)
-a. 13173,18471 2 75263 -- MSL 1088 ( 9E 255)
-oe 20979,12420,390 0 161180 -- MSL 1090 (19U 156)
-OE 28299,18555,390 2 161164 -- MSL 1091 (19U 140)
-fo 8295,10605 0 161163 -- MSL 1092 (19U 139)
-fc 8295,10605 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 16101,18315,150 2 75171 -- MSL 1095 ( 9E 163)
-/l 7806,20250,150 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,20475 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,993,4317 0 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,24810,150 2 75150 -- MSL 1106 ( 9E 142)
-IJ 20004,18315,6363 3 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/GBI b/contrib/groff/font/devlj4/GBI
deleted file mode 100644
index 8036ae555cd9..000000000000
--- a/contrib/groff/font/devlj4/GBI
+++ /dev/null
@@ -1,718 +0,0 @@
-# Garmond KrsvHlb
-name GBI
-spacewidth 6831
-slant 16.300000
-pcltypeface 4197
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -4877
-P . -4388
-P , -4388
-V A -4388
-A V -4388
-T o -4388
-T r -3413
-T c -3902
-T e -3902
-T d -3902
-T s -3413
-T y -3902
-T a -3902
-T w -3902
-T u -3413
-L T -3413
-L Y -3902
-Y o -3902
-Y e -3902
-Y a -4388
-A W -4388
-W A -3413
-T A -3413
-V o -2924
-V e -2924
-V a -3413
-Y A -4388
-F A -2438
-F . -3902
-F , -3902
-A T -3413
-A Y -3902
-v . -1460
-v , -1460
-y . -974
-y , -974
-T . -3413
-T , -3413
-L W -4877
-P A -2924
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2438
-W e -2438
-W a -2924
-W . -3413
-W , -3413
-r . -1949
-r , -1949
-w . -1460
-w , -1460
-Y u -2924
-A v -1949
-A y -1949
-A w -1949
-o . -974
-o , -974
-p . -974
-p , -974
-b . -1949
-b , -1949
-O T -1949
-O V -1949
-O Y -1949
-O . -974
-O , -974
-L y -2924
-L O -1949
-L G -1949
-L C -1949
-L Q -1949
-V y -1949
-V u -1949
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -1949
-D V -1949
-D Y -1949
-D . -974
-D , -974
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -974
-F e -974
-F a -974
-O A -974
-O W -1949
-L U -1949
-R T -1949
-R V -1949
-R Y -1949
-R W -1949
-G T -974
-P o -974
-P e -974
-P a -1460
-D A -974
-D W -1949
-B T -974
-B Y -974
-B . -974
-B , -974
-A O -1460
-A G -1460
-A C -1460
-A U -1949
-A Q -1460
-W r -1460
-W y -1460
-W u -1460
-W O -974
-W G -974
-W C -974
-W Q -974
-J A -485
-J . -485
-J , -485
-U A -1460
-U . -1460
-U , -1460
-Q A -974
-Q W -1949
-T O -974
-T G -974
-T C -974
-T Q -974
-O X -974
-L o -974
-L e -974
-L q -485
-G V -974
-G Y -974
-G W -974
-P T -974
-P V -974
-P Y -974
-C T -485
-C V -485
-C Y -485
-D X -974
-B V -974
-B X -974
-B A -974
-B W -974
-X o -974
-X e -974
-X y -1460
-X O -974
-X G -974
-X C -974
-X Q -974
-A o -974
-A e -974
-Q X -974
-K o -974
-K e -974
-K y -1460
-K w -1460
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -974
-o y -974
-o x -974
-o w -974
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-p v -485
-p y -485
-p x -485
-v o -485
-b v -485
-b y -485
-b w -485
-y o -485
-x o -974
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-w o -974
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T i -974
-L a -485
-R o -974
-R y -974
-R O -974
-R G -974
-R C -974
-R U -974
-R Q -974
-P Z -974
-P X -974
-P W -974
-C W -485
-V i -974
-Y i -974
-X a -485
-A g -485
-A c -974
-A d -974
-A a -485
-A q -485
-W i -974
-K c -974
-o f -485
-h w -485
-h . -485
-h , -485
-n w -485
-n . -485
-n , -485
-m w -485
-m . -485
-m , -485
-r o -974
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-p w -485
-f o -485
-w e -485
-w s -485
-k o -485
-O Z -974
-L J -485
-R e -974
-R a -485
-E o -485
-E v -485
-E y -485
-E w -485
-Z o -974
-Z e -974
-Z d -974
-Z y -1460
-Z a -485
-Z w -1460
-Z O -974
-Z G -974
-Z C -974
-Z Q -974
-D Z -974
-B Z -974
-A J -485
-J o -485
-K a -485
-t o -485
-o t -485
-o g -485
-o z -485
-o j -485
-g o -485
-v y -485
-v x -485
-v w -485
-z o -485
-w t -485
-w h -485
-w n -485
-w m -485
-w l -485
-w r -485
-w i -485
-w p -485
-w v -485
-w z -485
-w b -485
-w y -485
-w f -485
-w x -485
-w w -485
-w j -485
-w u -485
-w k -485
-R J -485
-C o -485
-E T -485
-E V -485
-E Y -485
-E W -485
-E U -485
-B o -485
-B y -485
-B U -485
-U o -485
-L cq -4877
-L ' -4877
-T hy -3902
-T - -3902
-T en -3902
-T em -3902
-A cq -2438
-A ' -2438
-hy T -3902
-- T -3902
-en T -3902
-em T -3902
-Y hy -2924
-Y - -2924
-Y en -2924
-Y em -2924
-p cq -485
-p ' -485
-b cq -974
-b ' -974
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -485
-h ' -485
-n cq -485
-n ' -485
-m cq -485
-m ' -485
-R cq -974
-R ' -974
-W hy -1460
-W - -1460
-W en -1460
-W em -1460
-cq d -974
-' d -974
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -974
-K - -974
-K en -974
-K em -974
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-R hy -974
-R - -974
-R en -974
-R em -974
-v cq -485
-v ' -485
-w cq -485
-w ' -485
-E cq -485
-E ' -485
-Z hy -1460
-Z - -1460
-Z en -1460
-Z em -1460
-B cq -485
-B ' -485
-w hy -485
-w - -485
-w en -485
-w em -485
-charset
-! 6831,18717,390,2859,345,962 2 161057 -- MSL 1 (19U 33)
-dq 11220,18555,0,1827,-2345,962 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,17415,390,1542,33,962 0 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19182,2292,1161,255,962 2 161060 -- MSL 4 (19U 36)
-$ "
-% 21954,17805,582,0,-1385 0 161061 -- MSL 5 (19U 37)
-& 18540,18555,390,1743,-671,962 2 161062 -- MSL 6 (19U 38)
-cq 6831,18555,0,2763,-1367,962 2 161170 -- MSL 8 (19U 146)
-' "
-( 7806,20172,6930,4779,306,962 3 161064 -- MSL 9 (19U 40)
-) 7806,20172,6930,822,4263,822 3 161065 -- MSL 10 (19U 41)
-* 13173,18555,0,1908,-1730,962 2 161066 -- MSL 11 (19U 42)
-+ 21954,13467,87,0,-2870 0 161067 -- MSL 12 (19U 43)
-, 6831,3381,4077,0,687 0 161068 -- MSL 13 (19U 44)
-hy 6831,7575,0,882,558,882 0 161069 -- MSL 14 (19U 45)
-- "
-. 6831,3486,390,0,-269 0 161070 -- MSL 15 (19U 46)
-sl 13173,18594,390,4080,1101,962 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,17805,390,1212,-212,962 0 161072 -- MSL 17 (19U 48)
-1 13173,17805,150,279,-566,279 0 161073 -- MSL 18 (19U 49)
-2 13173,17805,150,1017,1179,962 0 161074 -- MSL 19 (19U 50)
-3 13173,17805,390,336,1731,336 0 161075 -- MSL 20 (19U 51)
-4 13173,17805,0,1485,699,962 0 161076 -- MSL 21 (19U 52)
-5 13173,17415,390,1881,-713,962 0 161077 -- MSL 22 (19U 53)
-6 13173,17805,390,1575,111,962 0 161078 -- MSL 23 (19U 54)
-7 13173,17415,390,2856,-1331,962 0 161079 -- MSL 24 (19U 55)
-8 13173,17805,390,1428,21,962 0 161080 -- MSL 25 (19U 56)
-9 13173,17805,390,1536,72,962 0 161081 -- MSL 26 (19U 57)
-: 6831,12177,390,1032,-269,962 0 161082 -- MSL 27 (19U 58)
-; 6831,12177,4077,1032,687,962 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 21954,9654,0,0,-2876 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 10245,18705,390,2250,-1022,962 2 161087 -- MSL 32 (19U 63)
-at 21954,16950,4131,1743,1035,962 0 161088 -- MSL 33 (19U 64)
-@ "
-A 19515,18555,195,15,1764,15 2 161089 -- MSL 34 (19U 65)
-B 16587,18555,195,1047,1806,962 2 161090 -- MSL 35 (19U 66)
-C 19515,18555,390,2028,-836,962 2 161091 -- MSL 36 (19U 67)
-D 20490,18555,195,1566,1323,962 2 161092 -- MSL 37 (19U 68)
-E 16587,18360,195,1848,1476,962 2 161093 -- MSL 38 (19U 69)
-F 15126,18360,195,3372,1542,962 2 161094 -- MSL 39 (19U 70)
-G 20979,18555,390,1476,-1073,962 2 161095 -- MSL 40 (19U 71)
-H 21468,18360,195,3429,1671,962 2 161096 -- MSL 41 (19U 72)
-I 10245,18360,195,3429,1542,962 2 161097 -- MSL 42 (19U 73)
-J 9270,18360,6219,3918,4407,962 3 161098 -- MSL 43 (19U 74)
-K 19029,18360,195,2877,1482,962 2 161099 -- MSL 44 (19U 75)
-L 16587,18360,195,900,1431,900 2 161100 -- MSL 45 (19U 76)
-M 22932,18360,195,2907,2571,962 2 161101 -- MSL 46 (19U 77)
-N 20979,18360,195,3810,1401,962 2 161102 -- MSL 47 (19U 78)
-O 21954,18555,390,1014,-806,962 2 161103 -- MSL 48 (19U 79)
-P 16587,18555,195,1896,1236,962 2 161104 -- MSL 49 (19U 80)
-Q 21954,18555,6639,1014,-806,962 3 161105 -- MSL 50 (19U 81)
-R 19515,18555,195,63,1344,63 2 161106 -- MSL 51 (19U 82)
-S 13173,18555,390,2022,732,962 2 161107 -- MSL 52 (19U 83)
-T 18051,19425,195,4188,-1451,962 2 161108 -- MSL 53 (19U 84)
-U 21468,18360,390,3498,-1760,962 2 161109 -- MSL 54 (19U 85)
-V 19515,18360,390,3597,-1550,962 2 161110 -- MSL 55 (19U 86)
-W 26346,18360,390,4203,-1436,962 2 161111 -- MSL 56 (19U 87)
-X 19029,18360,195,3300,1851,962 2 161112 -- MSL 57 (19U 88)
-Y 19515,18360,195,3228,-2168,962 2 161113 -- MSL 58 (19U 89)
-Z 17565,19425,195,1575,285,962 2 161114 -- MSL 59 (19U 90)
-lB 7806,18165,4614,4290,2805,962 0 161115 -- MSL 60 (19U 91)
-[ "
-rs 13173,18717,390,0,-2867 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7806,18165,4614,3402,3693,962 0 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,962 1 161119 -- MSL 64 (19U 95)
-oq 6831,18555,0,3195,-1799,962 2 161169 -- MSL 66 (19U 145)
-` "
-a 13662,13143,390,1143,663,962 0 161121 -- MSL 67 (19U 97)
-b 14637,20250,390,714,351,714 2 161122 -- MSL 68 (19U 98)
-c 11220,12420,390,1695,438,962 0 161123 -- MSL 69 (19U 99)
-d 14637,20250,390,2610,417,962 2 161124 -- MSL 70 (19U 100)
-e 11220,12420,390,1365,429,962 0 161125 -- MSL 71 (19U 101)
-f 7806,20250,6705,5985,4074,962 3 161126 -- MSL 72 (19U 102)
-g 12684,12420,6705,2031,2331,962 1 161127 -- MSL 73 (19U 103)
-h 14637,20250,390,555,657,555 2 161128 -- MSL 74 (19U 104)
-i 8295,18765,390,1344,498,962 2 161129 -- MSL 75 (19U 105)
-j 7806,18765,6705,2169,3789,962 3 161130 -- MSL 76 (19U 106)
-k 14148,20250,390,858,426,858 2 161131 -- MSL 77 (19U 107)
-l 7806,20250,390,2595,252,962 2 161132 -- MSL 78 (19U 108)
-m 21468,12420,390,291,255,291 0 161133 -- MSL 79 (19U 109)
-n 14637,12420,390,486,57,486 0 161134 -- MSL 80 (19U 110)
-o 12684,12420,390,459,339,459 0 161135 -- MSL 81 (19U 111)
-p 14637,13893,6735,639,3318,639 1 161136 -- MSL 82 (19U 112)
-q 14148,12420,6900,1143,501,962 1 161137 -- MSL 83 (19U 113)
-r 10245,12420,0,2187,390,962 0 161138 -- MSL 84 (19U 114)
-s 8781,12420,390,873,903,873 0 161139 -- MSL 85 (19U 115)
-t 8295,14937,390,2001,312,962 0 161140 -- MSL 86 (19U 116)
-u 14148,12420,390,813,111,813 0 161141 -- MSL 87 (19U 117)
-v 15126,12420,390,759,324,759 0 161142 -- MSL 88 (19U 118)
-w 20490,12420,390,1065,462,962 0 161143 -- MSL 89 (19U 119)
-x 12684,12420,390,1731,1635,962 0 161144 -- MSL 90 (19U 120)
-y 13173,12420,6705,1029,1767,962 1 161145 -- MSL 91 (19U 121)
-z 11220,12885,195,2064,2046,962 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210,3339,-971,962 2 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210,63,2304,63 2 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 19515,24843,195,15,1764,15 2 161216 -- MSL 99 (19U 192)
-^A 19515,25182,195,15,1764,15 2 161218 -- MSL 100 (19U 194)
-`E 16587,24843,195,1848,1476,962 2 161224 -- MSL 101 (19U 200)
-^E 16587,25182,195,1848,1476,962 2 161226 -- MSL 102 (19U 202)
-:E 16587,23439,195,1848,1476,962 2 161227 -- MSL 103 (19U 203)
-^I 10245,25182,195,4377,1542,962 2 161230 -- MSL 104 (19U 206)
-:I 10245,23439,195,3792,1542,962 2 161231 -- MSL 105 (19U 207)
-aa 13173,19668,0,1317,-6053,962 2 161204 -- MSL 106 (19U 180)
-ga 13173,19668,0,0,-2960 2 161120 -- MSL 107 (19U 96)
-a^ 13173,20514,0,285,-3392,285 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,18057,0,1161,-3668,962 0 161192 -- MSL 109 (19U 168)
-~ 13173,18468,0,1074,-3599,962 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 21468,24843,390,3498,-1760,962 2 161241 -- MSL 111 (19U 217)
-^U 21468,25182,390,3498,-1760,962 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,962 2 161199 -- MSL 113 (19U 175)
-'Y 19515,24843,195,3228,-2168,962 2 161245 -- MSL 114 (19U 221)
-'y 13173,19668,6705,1317,1767,962 3 161277 -- MSL 115 (19U 253)
-de 13173,17415,0,600,-1973,600 0 161200 -- MSL 116 (19U 176)
-,C 19515,18555,6060,2028,-836,962 2 161223 -- MSL 117 (19U 199)
-,c 11220,12420,4776,1695,438,962 0 161255 -- MSL 118 (19U 231)
-~N 20979,24255,195,3810,1401,962 2 161233 -- MSL 119 (19U 209)
-~n 14637,18468,390,486,57,486 2 161265 -- MSL 120 (19U 241)
-r! 6831,12411,6696,834,2370,834 1 161185 -- MSL 121 (19U 161)
-r? 10245,12405,6690,0,1686 1 161215 -- MSL 122 (19U 191)
-Cs 13173,15834,0,2349,1044,962 0 161188 -- MSL 123 (19U 164)
-Po 13173,17262,390,951,1173,951 0 161187 -- MSL 124 (19U 163)
-Ye 13173,18090,150,3885,-1268,962 0 161189 -- MSL 125 (19U 165)
-sc 13173,18555,6705,525,-68,525 3 161191 -- MSL 126 (19U 167)
-Fn 13173,20250,6705,3279,1419,962 3 161155 -- MSL 127 (19U 131)
-ct 13173,17613,417,1263,-1289,962 0 161186 -- MSL 128 (19U 162)
-^a 13662,20514,390,1143,663,962 2 161250 -- MSL 129 (19U 226)
-^e 11220,20514,390,1365,429,962 2 161258 -- MSL 130 (19U 234)
-^o 12684,20514,390,531,339,531 2 161268 -- MSL 131 (19U 244)
-^u 14148,20514,390,813,111,813 2 161275 -- MSL 132 (19U 251)
-'a 13662,19668,390,1143,663,962 2 161249 -- MSL 133 (19U 225)
-'e 11220,19668,390,2295,429,962 2 161257 -- MSL 134 (19U 233)
-'o 12684,19668,390,1563,339,962 2 161267 -- MSL 135 (19U 243)
-'u 14148,19668,390,831,111,831 2 161274 -- MSL 136 (19U 250)
-`a 13662,19668,390,1143,663,962 2 161248 -- MSL 137 (19U 224)
-`e 11220,19668,390,1365,429,962 2 161256 -- MSL 138 (19U 232)
-`o 12684,19668,390,459,339,459 2 161266 -- MSL 139 (19U 242)
-`u 14148,19668,390,813,111,813 2 161273 -- MSL 140 (19U 249)
-:a 13662,18057,390,1143,663,962 0 161252 -- MSL 141 (19U 228)
-:e 11220,18057,390,2139,429,962 0 161259 -- MSL 142 (19U 235)
-:o 12684,18057,390,1407,339,962 0 161270 -- MSL 143 (19U 246)
-:u 14148,18057,390,813,111,813 0 161276 -- MSL 144 (19U 252)
-oA 19515,24900,195,15,1764,15 2 161221 -- MSL 145 (19U 197)
-^i 8295,20514,390,2724,459,962 2 161262 -- MSL 146 (19U 238)
-/O 21954,18555,390,1125,-695,962 2 161240 -- MSL 147 (19U 216)
-AE 25857,18360,195,870,2910,870 2 161222 -- MSL 148 (19U 198)
-oa 13662,18861,390,1377,663,962 2 161253 -- MSL 149 (19U 229)
-'i 8295,19668,390,3756,459,962 2 161261 -- MSL 150 (19U 237)
-/o 12684,12420,390,552,444,552 0 161272 -- MSL 151 (19U 248)
-ae 18540,13047,390,1296,477,962 0 161254 -- MSL 152 (19U 230)
-:A 19515,23439,195,15,1764,15 2 161220 -- MSL 153 (19U 196)
-`i 8295,19668,390,663,459,663 2 161260 -- MSL 154 (19U 236)
-:O 21954,23439,390,1014,-806,962 2 161238 -- MSL 155 (19U 214)
-:U 21468,23439,390,3498,-1760,962 2 161244 -- MSL 156 (19U 220)
-'E 16587,24843,195,1848,1476,962 2 161225 -- MSL 157 (19U 201)
-:i 8295,18057,390,3600,459,962 0 161263 -- MSL 158 (19U 239)
-ss 14148,20250,6705,2916,4902,962 3 161247 -- MSL 159 (19U 223)
-^O 21954,25182,390,1014,-806,962 2 161236 -- MSL 160 (19U 212)
-'A 19515,24843,195,15,1764,15 2 161217 -- MSL 161 (19U 193)
-~A 19515,24255,195,648,1764,648 2 161219 -- MSL 162 (19U 195)
-~a 13662,18468,390,1143,663,962 2 161251 -- MSL 163 (19U 227)
--D 20490,18555,342,1557,1314,962 2 161232 -- MSL 164 (19U 208)
-Sd 12684,20250,390,600,339,600 2 161264 -- MSL 165 (19U 240)
-'I 10245,24843,195,3540,1542,962 2 161229 -- MSL 166 (19U 205)
-`I 10245,24843,195,3429,1542,962 2 161228 -- MSL 167 (19U 204)
-'O 21954,24843,390,1014,-806,962 2 161235 -- MSL 168 (19U 211)
-`O 21954,24843,390,1014,-806,962 2 161234 -- MSL 169 (19U 210)
-~O 21954,24255,390,1014,-806,962 2 161237 -- MSL 170 (19U 213)
-~o 12684,18468,390,1320,339,962 2 161269 -- MSL 171 (19U 245)
-vS 13173,24657,390,3903,732,962 2 161162 -- MSL 172 (19U 138)
-vs 8781,20526,390,4242,903,962 2 161178 -- MSL 173 (19U 154)
-'U 21468,24843,390,3498,-1760,962 2 161242 -- MSL 174 (19U 218)
-:Y 19515,23439,195,3228,-2168,962 2 161183 -- MSL 175 (19U 159)
-:y 13173,18057,6705,1161,1767,962 1 161279 -- MSL 176 (19U 255)
-TP 16587,18360,195,846,1221,846 2 161246 -- MSL 177 (19U 222)
-Tp 14637,20250,6900,663,3342,663 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5193,582,756,582 0 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200,1032,-689,962 2 161206 -- MSL 181 (19U 182)
-34 21954,17805,180,0,-626 0 161214 -- MSL 182 (19U 190)
-\- 21954,7755,0,0,-2891 0 60096 -- MSL 183 ( 7J 192)
-14 21954,17625,180,0,-1241 0 161212 -- MSL 184 (19U 188)
-12 21954,17625,180,0,-1316 0 161213 -- MSL 185 (19U 189)
-Of 11220,17805,0,1833,-1337,962 0 161194 -- MSL 186 (19U 170)
-Om 11220,17805,0,1218,-1775,962 0 161210 -- MSL 187 (19U 186)
-Fo 11220,9906,0,837,609,837 0 161195 -- MSL 188 (19U 171)
-Fc 11220,9906,0,435,1011,435 0 161211 -- MSL 190 (19U 187)
-t+- 21954,13467,3354,0,-2864 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 2 161190 -- MSL 192 (19U 166)
-co 13173,19725,0,5022,-3197,962 2 161193 -- MSL 193 (19U 169)
-tno 21954,10560,0,0,-2564 0 161196 -- MSL 194 (19U 172)
-u00AD 6831,7575,0,882,558,882 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725,0,5022,-3197,962 2 161198 -- MSL 196 (19U 174)
-S2 8781,17805,0,2001,-605,962 0 161202 -- MSL 197 (19U 178)
-S3 8781,17805,0,1881,-386,962 0 161203 -- MSL 198 (19U 179)
-ac 13173,657,4776,0,-1790 0 161208 -- MSL 199 (19U 184)
-S1 8781,17625,0,1389,-1589,962 0 161209 -- MSL 200 (19U 185)
-tmu 21954,13530,192,0,-2933 0 161239 -- MSL 201 (19U 215)
-tdi 21954,13383,3,0,-2885 0 161271 -- MSL 202 (19U 247)
-u203C 13662,18717,390,2859,345,962 2 87315 -- MSL 221 (10U 19)
-u20A7 24882,18555,390,2001,1236,962 2 60121 -- MSL 232 ( 7J 217)
-pc 6831,10533,0,336,-1115,336 0 161207 -- MSL 302 (19U 183)
-u013F 16587,18360,195,900,1431,900 2 51943 -- MSL 306 ( 6J 231)
-u0140 10734,20250,390,2328,252,962 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18045,765,369,-1043,369 0 60122 -- MSL 308 ( 7J 218)
-u0149 21468,18555,390,486,-737,486 2 51951 -- MSL 309 ( 6J 239)
-fm 13173,17415,0,0,-1460 0 60101 -- MSL 310 ( 7J 197)
-sd 13173,17415,0,1680,-1460,962 0 60102 -- MSL 311 ( 7J 198)
-dg 13173,18555,6657,1035,186,962 3 161158 -- MSL 312 (19U 134)
-tm 16101,17550,0,5508,-3158,962 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,962 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,20526,0,2367,-5474,962 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,18861,0,285,-5312,285 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,17625,180,8301,6948,962 0 60109 -- MSL 324 ( 7J 205)
-em 21954,7185,0,666,-44,666 0 161175 -- MSL 325 (19U 151)
-en 13173,7185,0,537,-71,537 0 161174 -- MSL 326 (19U 150)
-dd 13173,18555,4989,990,243,962 2 161159 -- MSL 327 (19U 135)
-.i 8295,12420,390,288,459,288 0 46333 -- MSL 328 ( 5T 253)
-aq 6831,18555,0,2289,-2825,962 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 11709,17805,0,2439,-767,962 0 87548 -- MSL 332 (10U 252)
-u0111 14637,20250,390,3219,426,962 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19515,23706,195,15,1764,15 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13662,17325,390,1143,663,962 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19515,18555,4395,15,1764,15 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13662,13143,4791,1143,663,962 0 75193 -- MSL 405 ( 9E 185)
-'C 19515,24843,390,2028,-836,962 2 75206 -- MSL 406 ( 9E 198)
-'c 11220,19668,390,1995,438,962 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 19515,24657,390,2028,-836,962 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11220,20526,390,3165,438,962 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,24657,195,1566,1323,962 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 19029,20250,390,3315,417,962 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16587,24657,195,1848,1476,962 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11220,20526,390,3345,429,962 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16587,18360,4395,1848,1476,962 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11220,12420,4791,1365,429,962 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 16587,24843,195,900,1431,900 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7806,25743,390,3861,252,962 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 16587,18579,195,2697,1431,962 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 12198,20250,390,3276,252,962 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20979,24843,195,3810,1401,962 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,19668,390,585,57,585 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20979,24657,195,3810,1401,962 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,20526,390,1635,57,962 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 21954,24843,390,1014,-806,962 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 12684,19830,390,3876,339,962 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 19515,24843,195,63,1344,63 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,19668,0,2781,390,962 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 19515,24657,195,63,1344,63 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,20526,0,3831,390,962 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,24843,390,2076,732,962 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 8781,19668,390,2763,903,962 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 18051,24657,195,4188,-1451,962 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 11220,20250,390,3714,312,962 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 18051,19425,6060,4188,-1451,962 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8295,14937,4776,2001,1173,962 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 21468,24843,390,3498,-1760,962 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14148,19830,390,3144,111,962 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 21468,24900,390,3498,-1760,962 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14148,18861,390,813,111,813 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,24843,195,1575,285,962 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 11220,19668,195,2295,2046,962 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,23439,195,1575,285,962 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 11220,18057,195,2064,2046,962 0 75199 -- MSL 485 ( 9E 191)
-u2070 8781,17805,0,2100,-1385,962 0 51753 -- MSL 1000 ( 6J 41)
-u2074 8781,17625,0,2277,-773,962 0 51748 -- MSL 1001 ( 6J 36)
-u2075 8781,17625,0,2376,-1643,962 0 51749 -- MSL 1002 ( 6J 37)
-u2076 8781,17805,0,2391,-1154,962 0 51806 -- MSL 1003 ( 6J 94)
-u2077 8781,17625,0,3009,-2060,962 0 51750 -- MSL 1004 ( 6J 38)
-u2078 8781,17805,0,2307,-1256,962 0 51754 -- MSL 1005 ( 6J 42)
-u2079 8781,17805,0,2313,-1238,962 0 51752 -- MSL 1006 ( 6J 40)
-lq 11220,18555,0,4245,-1418,962 2 161171 -- MSL 1017 (19U 147)
-rq 11220,18555,0,3423,-596,962 2 161172 -- MSL 1018 (19U 148)
-Bq 11220,3456,4002,0,3399 0 161156 -- MSL 1019 (19U 132)
-u2003 21954,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 6831,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 21954,3072,390,0,129 0 161157 -- MSL 1028 (19U 133)
-vz 11220,20526,195,3345,2046,962 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703,0,4761,-3203,962 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,453,-1154,453 2 51794 -- MSL 1036 ( 6J 82)
-fi 14637,20250,6705,1566,3645,962 3 60077 -- MSL 1040 ( 7J 173)
-fl 14637,20250,6705,2934,3735,962 3 60078 -- MSL 1041 ( 7J 174)
-ff 14637,20250,6705,5373,3861,962 3 51883 -- MSL 1042 ( 6J 171)
-Fi 21468,20250,6705,1701,3675,962 3 51884 -- MSL 1043 ( 6J 172)
-Fl 21468,20250,6705,2832,3765,962 3 51885 -- MSL 1044 ( 6J 173)
-ij 14637,18765,6705,2169,498,962 3 60134 -- MSL 1047 ( 7J 230)
-u2105 21954,18609,180,1233,-140,962 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20979,23706,390,1476,-1073,962 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 12684,17325,6705,2031,2331,962 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18555,6060,2022,732,962 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 8781,12420,4776,873,903,873 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 10245,23439,195,3429,1542,962 2 46301 -- MSL 1065 ( 5T 221)
-bq 6831,3456,4002,0,2925 0 161154 -- MSL 1067 (19U 130)
-%0 30249,17805,450,0,-1385 0 161161 -- MSL 1068 (19U 137)
-a- 13173,16974,0,438,-4106,438 0 60154 -- MSL 1084 ( 7J 250)
-ab 13173,17325,0,1386,-5276,962 0 75170 -- MSL 1086 ( 9E 162)
-a. 13173,18057,0,0,-6509 0 75263 -- MSL 1088 ( 9E 255)
-oe 19029,12420,390,1338,357,962 0 161180 -- MSL 1090 (19U 156)
-OE 27321,18555,390,1932,-527,962 2 161164 -- MSL 1091 (19U 140)
-fo 6831,9906,0,999,792,962 0 161163 -- MSL 1092 (19U 139)
-fc 6831,9906,0,423,1368,423 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 16587,18360,195,900,1431,900 2 75171 -- MSL 1095 ( 9E 163)
-/l 7806,20250,390,2580,444,962 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,19830,0,3630,-3815,962 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,711,4791,0,-4010 0 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,24657,195,1707,285,962 2 75150 -- MSL 1106 ( 9E 142)
-IJ 19515,18360,6219,3918,1542,962 3 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/GI b/contrib/groff/font/devlj4/GI
deleted file mode 100644
index 724c8f618b9d..000000000000
--- a/contrib/groff/font/devlj4/GI
+++ /dev/null
@@ -1,653 +0,0 @@
-# Garmond Krsv
-name GI
-spacewidth 6342
-slant 16.400000
-pcltypeface 4197
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3902
-P . -4388
-P , -4388
-V A -3413
-A V -3413
-T o -4877
-T r -3413
-T c -4388
-T e -4388
-T d -4388
-T s -3413
-T y -4388
-T a -3902
-T w -4388
-T u -3413
-L T -3902
-L Y -3413
-Y o -3902
-Y e -3902
-Y a -3902
-A W -3413
-W A -3413
-T A -3413
-V o -2924
-V e -2924
-V a -2924
-Y A -3413
-F A -2438
-F . -3902
-F , -3902
-A T -3413
-A Y -3413
-v . -1460
-v , -1460
-y . -974
-y , -974
-T . -3413
-T , -3413
-L W -3413
-P A -2924
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2924
-W e -2924
-W a -2924
-W . -3902
-W , -3902
-r . -1949
-r , -1949
-w . -1460
-w , -1460
-Y u -2438
-A v -1949
-A y -1949
-A w -1949
-o . -1460
-o , -1460
-p . -974
-p , -974
-b . -1949
-b , -1949
-O T -1949
-O V -1949
-O Y -1949
-O . -974
-O , -974
-V y -1460
-V u -1460
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -1949
-D V -1949
-D Y -1949
-D . -974
-D , -974
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -1460
-F e -974
-F a -974
-O A -974
-O W -1949
-R T -2924
-R V -2924
-R Y -2924
-R W -2924
-G T -974
-P o -1460
-P e -1460
-P a -1460
-D A -974
-D W -1949
-B T -974
-B Y -974
-B . -974
-B , -974
-A O -1949
-A G -1949
-A C -1949
-A U -1949
-A Q -1949
-W r -1460
-W y -1460
-W u -1460
-W O -974
-W G -974
-W C -974
-W Q -974
-U A -974
-U . -974
-U , -974
-Q A -974
-Q W -1949
-T O -974
-T G -974
-T C -974
-T Q -974
-O X -974
-L o -485
-G V -974
-G Y -974
-G W -974
-P T -974
-P V -974
-P Y -974
-D X -974
-B V -974
-B X -974
-B A -974
-B W -974
-F r -485
-F y -485
-F u -485
-F O -485
-F G -485
-F C -485
-F Q -485
-X o -1460
-X e -1460
-X y -1460
-X O -974
-X G -974
-X C -974
-X Q -974
-A o -1460
-A e -1460
-Q X -974
-K o -1460
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o x -485
-o w -485
-v o -485
-y o -485
-x o -974
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-w o -485
-R o -1460
-R y -1460
-R O -1460
-R G -1460
-R C -1460
-R U -1460
-R Q -1460
-P Z -974
-P X -974
-P W -974
-X a -485
-A t -974
-A g -485
-A c -1460
-A d -974
-A a -485
-A q -485
-K c -974
-o f -485
-h . -485
-h , -485
-n . -485
-n , -485
-m . -485
-m , -485
-r o -974
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-f o -485
-k o -485
-O Z -974
-R e -1460
-R a -485
-G Z -974
-E o -485
-Z o -974
-Z e -485
-Z d -485
-Z y -485
-Z a -485
-Z w -485
-Z O -485
-Z G -485
-Z C -485
-Z Q -485
-D Z -974
-B Z -974
-J o -485
-K a -485
-t o -485
-o t -485
-o g -485
-o z -485
-o j -485
-g o -485
-z o -485
-C o -485
-E T -485
-E V -485
-E Z -485
-E Y -485
-E W -485
-B o -485
-U o -485
-L cq -4877
-L ' -4877
-T hy -4388
-T - -4388
-T en -4388
-T em -4388
-A cq -2438
-A ' -2438
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -485
-p ' -485
-b cq -974
-b ' -974
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -485
-h ' -485
-n cq -485
-n ' -485
-m cq -485
-m ' -485
-R cq -1949
-R ' -1949
-W hy -1460
-W - -1460
-W en -1460
-W em -1460
-cq d -974
-' d -974
-F hy -485
-F - -485
-F en -485
-F em -485
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -974
-K - -974
-K en -974
-K em -974
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-R hy -1460
-R - -1460
-R en -1460
-R em -1460
-v cq -485
-v ' -485
-w cq -485
-w ' -485
-E cq -485
-E ' -485
-Z cq -974
-Z ' -974
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-B cq -485
-B ' -485
-charset
-! 6342,18648,390,2823,786,910 2 161057 -- MSL 1 (19U 33)
-dq 11220,18555,0,2325,-3857,910 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12684,17805,390,1377,-71,910 0 161059 -- MSL 3 (19U 35)
-# "
-Do 12684,19380,2415,1467,-53,910 2 161060 -- MSL 4 (19U 36)
-$ "
-% 20490,17805,180,252,-1310,252 0 161061 -- MSL 5 (19U 37)
-& 18051,18555,390,1461,9,910 2 161062 -- MSL 6 (19U 38)
-cq 6342,18555,0,2622,-1661,910 2 161170 -- MSL 8 (19U 146)
-' "
-( 6342,20283,6705,5652,855,910 3 161064 -- MSL 9 (19U 40)
-) 6342,20283,6705,1701,4806,910 3 161065 -- MSL 10 (19U 41)
-* 12684,18555,0,2358,-2588,910 2 161066 -- MSL 11 (19U 42)
-+ 20490,13191,261,0,-2495 0 161067 -- MSL 12 (19U 43)
-, 6342,3300,3891,0,1584 0 161068 -- MSL 13 (19U 44)
-hy 6342,6960,0,438,183,438 0 161069 -- MSL 14 (19U 45)
-- "
-. 6342,2985,390,0,861 0 161070 -- MSL 15 (19U 46)
-sl 13173,20250,225,4644,1500,910 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12684,17805,390,1482,-353,910 0 161072 -- MSL 17 (19U 48)
-1 12684,17415,150,0,-842 0 161073 -- MSL 18 (19U 49)
-2 12684,17805,0,633,216,633 0 161074 -- MSL 19 (19U 50)
-3 12684,17805,390,588,1335,588 0 161075 -- MSL 20 (19U 51)
-4 12684,17805,0,1158,18,910 0 161076 -- MSL 21 (19U 52)
-5 12684,17415,390,780,-182,780 0 161077 -- MSL 22 (19U 53)
-6 12684,17805,390,2220,-101,910 0 161078 -- MSL 23 (19U 54)
-7 12684,17415,390,2988,-887,910 0 161079 -- MSL 24 (19U 55)
-8 12684,17805,390,1620,-104,910 0 161080 -- MSL 25 (19U 56)
-9 12684,17805,390,1731,-125,910 0 161081 -- MSL 26 (19U 57)
-: 6342,11586,390,1044,861,910 0 161082 -- MSL 27 (19U 58)
-; 6342,11586,3891,1251,1584,910 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 20490,8883,0,0,-2687 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 9270,18648,390,2514,-395,910 2 161087 -- MSL 32 (19U 63)
-at 20619,16980,3654,2277,1044,910 0 161088 -- MSL 33 (19U 64)
-@ "
-A 18540,18555,150,0,2757 2 161089 -- MSL 34 (19U 65)
-B 15126,18555,150,1614,1335,910 2 161090 -- MSL 35 (19U 66)
-C 18540,18555,390,2820,-794,910 2 161091 -- MSL 36 (19U 67)
-D 20004,18555,150,1380,1872,910 2 161092 -- MSL 37 (19U 68)
-E 15612,18315,150,1824,1827,910 2 161093 -- MSL 38 (19U 69)
-F 13173,18315,150,3717,1683,910 2 161094 -- MSL 39 (19U 70)
-G 20490,18555,390,1182,-872,910 2 161095 -- MSL 40 (19U 71)
-H 20490,18315,150,3783,1785,910 2 161096 -- MSL 41 (19U 72)
-I 8781,18315,150,3582,1641,910 2 161097 -- MSL 42 (19U 73)
-J 8295,18315,5814,3522,4017,910 2 161098 -- MSL 43 (19U 74)
-K 18051,18315,150,2922,1755,910 2 161099 -- MSL 44 (19U 75)
-L 15612,18315,150,345,1536,345 2 161100 -- MSL 45 (19U 76)
-M 20490,18315,150,3192,2418,910 2 161101 -- MSL 46 (19U 77)
-N 19515,18315,150,3774,1101,910 2 161102 -- MSL 47 (19U 78)
-O 20979,18555,390,1308,-623,910 2 161103 -- MSL 48 (19U 79)
-P 14637,18555,150,2430,1737,910 2 161104 -- MSL 49 (19U 80)
-Q 20979,18555,6027,1248,-683,910 2 161105 -- MSL 50 (19U 81)
-R 18051,18555,150,0,1965 2 161106 -- MSL 51 (19U 82)
-S 12198,18555,390,1974,759,910 2 161107 -- MSL 52 (19U 83)
-T 16101,19185,150,4656,-1577,910 2 161108 -- MSL 53 (19U 84)
-U 20004,18315,390,3312,-1640,910 2 161109 -- MSL 54 (19U 85)
-V 19029,18315,390,5280,-2375,910 2 161110 -- MSL 55 (19U 86)
-W 25371,18315,390,5025,-2189,910 2 161111 -- MSL 56 (19U 87)
-X 18540,18315,150,3168,1833,910 2 161112 -- MSL 57 (19U 88)
-Y 17565,18315,150,5103,-1385,910 2 161113 -- MSL 58 (19U 89)
-Z 16587,19557,0,1626,78,910 2 161114 -- MSL 59 (19U 90)
-lB 6342,18165,5160,4749,3360,910 0 161115 -- MSL 60 (19U 91)
-[ "
-rs 13173,20250,225,0,-3233 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 6342,18165,5160,3387,4722,910 0 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,910 1 161119 -- MSL 64 (19U 95)
-oq 6342,18555,0,3606,-2645,910 2 161169 -- MSL 66 (19U 145)
-` "
-a 12198,11670,390,687,1335,687 0 161121 -- MSL 67 (19U 97)
-b 12684,20253,390,1776,216,910 2 161122 -- MSL 68 (19U 98)
-c 9759,11670,390,1668,495,910 0 161123 -- MSL 69 (19U 99)
-d 13173,20250,390,2223,915,910 2 161124 -- MSL 70 (19U 100)
-e 9759,11670,390,1515,687,910 0 161125 -- MSL 71 (19U 101)
-f 7317,20250,6705,6675,5391,910 3 161126 -- MSL 72 (19U 102)
-g 11220,11670,6705,1806,1908,910 1 161127 -- MSL 73 (19U 103)
-h 12684,20250,390,801,1086,801 2 161128 -- MSL 74 (19U 104)
-i 7806,18495,390,1020,24,910 2 161129 -- MSL 75 (19U 105)
-j 6342,18495,6705,2055,4209,910 3 161130 -- MSL 76 (19U 106)
-k 13173,20250,390,657,957,657 2 161131 -- MSL 77 (19U 107)
-l 7317,20250,390,1938,606,910 2 161132 -- MSL 78 (19U 108)
-m 21468,11670,390,345,342,345 0 161133 -- MSL 79 (19U 109)
-n 14637,11670,390,513,309,513 0 161134 -- MSL 80 (19U 110)
-o 12198,11670,390,423,288,423 0 161135 -- MSL 81 (19U 111)
-p 12198,13440,6855,963,3558,910 1 161136 -- MSL 82 (19U 112)
-q 12684,11670,6855,1458,1005,910 1 161137 -- MSL 83 (19U 113)
-r 10245,11670,0,2121,417,910 0 161138 -- MSL 84 (19U 114)
-s 7806,11670,390,1242,1449,910 0 161139 -- MSL 85 (19U 115)
-t 8295,13944,390,1638,75,910 0 161140 -- MSL 86 (19U 116)
-u 13662,11670,390,576,381,576 0 161141 -- MSL 87 (19U 117)
-v 13662,11670,390,1317,423,910 0 161142 -- MSL 88 (19U 118)
-w 19029,11670,390,1209,393,910 0 161143 -- MSL 89 (19U 119)
-x 12198,11670,390,936,1476,910 0 161144 -- MSL 90 (19U 120)
-y 11709,11670,6705,867,2037,867 1 161145 -- MSL 91 (19U 121)
-z 11220,12315,0,1359,1530,910 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210,3360,-1691,910 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210,0,2232 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 18540,24930,150,0,2757 2 161216 -- MSL 99 (19U 192)
-^A 18540,24915,150,438,2757,438 2 161218 -- MSL 100 (19U 194)
-`E 15612,24930,150,1824,1827,910 2 161224 -- MSL 101 (19U 200)
-^E 15612,24915,150,1824,1827,910 2 161226 -- MSL 102 (19U 202)
-:E 15612,22620,150,1824,1827,910 2 161227 -- MSL 103 (19U 203)
-^I 8781,24915,150,4425,1641,910 2 161230 -- MSL 104 (19U 206)
-:I 8781,22620,150,4899,1641,910 2 161231 -- MSL 105 (19U 207)
-aa 12684,19590,0,1218,-5837,910 2 161204 -- MSL 106 (19U 180)
-ga 12684,19590,0,0,-3146 2 161120 -- MSL 107 (19U 96)
-a^ 12684,19614,0,210,-3725,210 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12684,17394,0,153,-3872,153 0 161192 -- MSL 109 (19U 168)
-~ 12684,17481,0,1239,-3269,910 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20004,24930,390,3312,-1640,910 2 161241 -- MSL 111 (19U 217)
-^U 20004,24915,390,3312,-1640,910 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,910 2 161199 -- MSL 113 (19U 175)
-'Y 17565,24930,150,5103,-1385,910 2 161245 -- MSL 114 (19U 221)
-'y 11709,19590,6705,2106,2037,910 3 161277 -- MSL 115 (19U 253)
-de 12684,17805,0,828,-2297,828 0 161200 -- MSL 116 (19U 176)
-,C 18540,18555,6018,2820,-794,910 2 161223 -- MSL 117 (19U 199)
-,c 9759,11670,4770,1668,516,910 0 161255 -- MSL 118 (19U 231)
-~N 19515,23727,150,3774,1101,910 2 161233 -- MSL 119 (19U 209)
-~n 14637,17481,390,513,309,513 0 161265 -- MSL 120 (19U 241)
-r! 6831,12000,7038,1113,2007,910 1 161185 -- MSL 121 (19U 161)
-r? 9270,12000,7038,0,2256 1 161215 -- MSL 122 (19U 191)
-Cs 12684,15684,0,2205,291,910 0 161188 -- MSL 123 (19U 164)
-Po 12684,17805,390,1413,1200,910 0 161187 -- MSL 124 (19U 163)
-Ye 12684,18315,150,4137,-485,910 2 161189 -- MSL 125 (19U 165)
-sc 12684,18555,5250,0,66 2 161191 -- MSL 126 (19U 167)
-Fn 12684,20250,6705,3483,3216,910 3 161155 -- MSL 127 (19U 131)
-ct 12684,17568,186,795,-1196,795 0 161186 -- MSL 128 (19U 162)
-^a 12198,19614,390,687,1335,687 2 161250 -- MSL 129 (19U 226)
-^e 9759,19614,390,1671,687,910 2 161258 -- MSL 130 (19U 234)
-^o 12198,19614,390,453,288,453 2 161268 -- MSL 131 (19U 244)
-^u 13662,19614,390,576,381,576 2 161275 -- MSL 132 (19U 251)
-'a 12198,19590,390,1863,1335,910 2 161249 -- MSL 133 (19U 225)
-'e 9759,19590,390,3081,687,910 2 161257 -- MSL 134 (19U 233)
-'o 12198,19590,390,1863,288,910 2 161267 -- MSL 135 (19U 243)
-'u 13662,19590,390,1131,381,910 2 161274 -- MSL 136 (19U 250)
-`a 12198,19590,390,687,1335,687 2 161248 -- MSL 137 (19U 224)
-`e 9759,19590,390,1515,687,910 2 161256 -- MSL 138 (19U 232)
-`o 12198,19590,390,423,288,423 2 161266 -- MSL 139 (19U 242)
-`u 13662,19590,390,576,381,576 2 161273 -- MSL 140 (19U 249)
-:a 12198,17394,390,891,1335,891 0 161252 -- MSL 141 (19U 228)
-:e 9759,17394,390,2109,687,910 0 161259 -- MSL 142 (19U 235)
-:o 12198,17394,390,891,288,891 0 161270 -- MSL 143 (19U 246)
-:u 13662,17394,390,576,381,576 0 161276 -- MSL 144 (19U 252)
-oA 18540,24681,150,150,2757,150 2 161221 -- MSL 145 (19U 197)
-^i 7806,19614,390,2649,24,910 2 161262 -- MSL 146 (19U 238)
-/O 20979,18555,390,2475,1140,910 2 161240 -- MSL 147 (19U 216)
-AE 25371,18315,150,1821,2859,910 2 161222 -- MSL 148 (19U 198)
-oa 12198,19566,390,1257,1335,910 2 161253 -- MSL 149 (19U 229)
-'i 7806,19590,390,4059,24,910 2 161261 -- MSL 150 (19U 237)
-/o 12198,11670,390,2388,2475,910 0 161272 -- MSL 151 (19U 248)
-ae 16587,11670,390,1551,1377,910 0 161254 -- MSL 152 (19U 230)
-:A 18540,22620,150,1191,2757,910 2 161220 -- MSL 153 (19U 196)
-`i 7806,19590,390,966,24,910 2 161260 -- MSL 154 (19U 236)
-:O 20979,22620,390,1308,-623,910 2 161238 -- MSL 155 (19U 214)
-:U 20004,22620,390,3312,-1640,910 2 161244 -- MSL 156 (19U 220)
-'E 15612,24930,150,1824,1827,910 2 161225 -- MSL 157 (19U 201)
-:i 7806,17394,390,2562,24,910 0 161263 -- MSL 158 (19U 239)
-ss 13173,20250,6705,3594,6294,910 3 161247 -- MSL 159 (19U 223)
-^O 20979,24915,390,1308,-623,910 2 161236 -- MSL 160 (19U 212)
-'A 18540,24930,150,1083,2757,910 2 161217 -- MSL 161 (19U 193)
-~A 18540,23727,150,2175,2757,910 2 161219 -- MSL 162 (19U 195)
-~a 12198,17481,390,1482,1335,910 0 161251 -- MSL 163 (19U 227)
--D 20004,18555,150,1380,1872,910 2 161232 -- MSL 164 (19U 208)
-Sd 12198,20199,327,540,288,540 2 161264 -- MSL 165 (19U 240)
-'I 8781,24930,150,5073,1641,910 2 161229 -- MSL 166 (19U 205)
-`I 8781,24930,150,3582,1641,910 2 161228 -- MSL 167 (19U 204)
-'O 20979,24930,390,1308,-623,910 2 161235 -- MSL 168 (19U 211)
-`O 20979,24930,390,1308,-623,910 2 161234 -- MSL 169 (19U 210)
-~O 20979,23727,390,1308,-623,910 2 161237 -- MSL 170 (19U 213)
-~o 12198,17481,390,1482,288,910 0 161269 -- MSL 171 (19U 245)
-vS 12198,24969,390,2829,759,910 2 161162 -- MSL 172 (19U 138)
-vs 7806,19863,390,4191,1449,910 2 161178 -- MSL 173 (19U 154)
-'U 20004,24930,390,3312,-1640,910 2 161242 -- MSL 174 (19U 218)
-:Y 17565,22620,150,5103,-1385,910 2 161183 -- MSL 175 (19U 159)
-:y 11709,17394,6705,1134,2037,910 1 161279 -- MSL 176 (19U 255)
-TP 14637,18315,150,1383,1722,910 2 161246 -- MSL 177 (19U 222)
-Tp 12198,20250,6855,963,3561,910 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595,612,585,612 0 161205 -- MSL 180 (19U 181)
-ps 12684,19635,4200,1812,-980,910 2 161206 -- MSL 181 (19U 182)
-34 20490,17805,390,0,-1073 0 161214 -- MSL 182 (19U 190)
-\- 20490,7305,0,0,-2531 0 60096 -- MSL 183 ( 7J 192)
-14 20490,17625,390,0,-1142 0 161212 -- MSL 184 (19U 188)
-12 20490,17625,390,33,-203,33 0 161213 -- MSL 185 (19U 189)
-Of 11709,17805,0,1590,-1724,910 0 161194 -- MSL 186 (19U 170)
-Om 11709,17805,0,936,-1988,910 0 161210 -- MSL 187 (19U 186)
-Fo 10734,9945,0,759,-8,759 0 161195 -- MSL 188 (19U 171)
-Fc 10734,9945,0,204,546,204 0 161211 -- MSL 190 (19U 187)
-t+- 20490,13191,3105,0,-2501 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 2 161190 -- MSL 192 (19U 166)
-co 13173,19725,0,5526,-3701,910 2 161193 -- MSL 193 (19U 169)
-tno 20490,10029,0,0,-2054 0 161196 -- MSL 194 (19U 172)
-u00AD 6342,6960,0,438,183,438 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725,0,5526,-3701,910 2 161198 -- MSL 196 (19U 174)
-S2 8781,17805,0,1725,-689,910 0 161202 -- MSL 197 (19U 178)
-S3 8781,17805,0,1746,-272,910 0 161203 -- MSL 198 (19U 179)
-ac 12684,0,4770,0,-947 0 161208 -- MSL 199 (19U 184)
-S1 8781,17625,0,1257,-1229,910 0 161209 -- MSL 200 (19U 185)
-tmu 20490,12969,189,0,-2792 0 161239 -- MSL 201 (19U 215)
-tdi 20490,12966,36,0,-2423 0 161271 -- MSL 202 (19U 247)
-u203C 11709,18648,390,2664,945,910 2 87315 -- MSL 221 (10U 19)
-u20A7 22932,18555,390,1638,1737,910 2 60121 -- MSL 232 ( 7J 217)
-pc 6342,10350,0,534,-1211,534 0 161207 -- MSL 302 (19U 183)
-u013F 15612,18315,150,345,1536,345 2 51943 -- MSL 306 ( 6J 231)
-u0140 8781,20250,390,2088,606,910 2 51959 -- MSL 307 ( 6J 247)
-u2113 12684,18150,297,306,-1187,306 0 60122 -- MSL 308 ( 7J 218)
-u0149 19515,18555,390,513,-1307,513 2 51951 -- MSL 309 ( 6J 239)
-fm 12684,17805,0,0,-2969 0 60101 -- MSL 310 ( 7J 197)
-sd 12684,17805,0,0,-1373 0 60102 -- MSL 311 ( 7J 198)
-dg 12684,18555,5250,2079,-740,910 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550,0,6012,-3662,910 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,910 1 60095 -- MSL 314 ( 7J 191)
-ah 12684,19863,0,1152,-4667,910 2 75169 -- MSL 315 ( 9E 161)
-ao 12684,19566,0,570,-4964,570 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,17415,390,8091,6480,910 0 60109 -- MSL 324 ( 7J 205)
-em 20490,6960,0,651,420,651 0 161175 -- MSL 325 (19U 151)
-en 12684,6960,0,756,357,756 0 161174 -- MSL 326 (19U 150)
-dd 12684,18555,5250,1128,210,910 2 161159 -- MSL 327 (19U 135)
-.i 7806,11670,390,657,24,657 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18555,0,2418,-3857,910 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 11709,17805,0,2733,-869,910 0 87548 -- MSL 332 (10U 252)
-u0111 13173,20250,390,2733,915,910 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 18540,23550,150,1464,2757,910 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 12198,18054,390,1161,1335,910 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 18540,18555,3990,0,2757 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 12198,11670,4155,687,1335,687 0 75193 -- MSL 405 ( 9E 185)
-'C 18540,24930,390,2820,-794,910 2 75206 -- MSL 406 ( 9E 198)
-'c 9759,19590,390,3231,495,910 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18540,24969,390,2820,-794,910 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 9759,19863,390,3513,495,910 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20004,24969,150,1380,1872,910 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 16587,20250,390,3657,915,910 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15612,24969,150,1824,1827,910 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 9759,19863,390,3213,687,910 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15612,18315,3990,1824,1827,910 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 9759,11670,4155,1515,687,910 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 15612,24930,150,345,1536,345 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25590,390,3495,606,910 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 15612,18675,150,1992,1536,910 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9759,20250,390,4095,606,910 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19515,24930,150,3774,1101,910 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,19590,390,642,309,642 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19515,24969,150,3774,1101,910 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,19863,390,774,309,774 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20979,24930,390,1308,-623,910 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 12198,19590,390,4128,288,910 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 18051,24930,150,0,1965 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,19590,0,2838,417,910 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 18051,24969,150,0,1965 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,19863,0,2970,417,910 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 12198,24930,390,3366,759,910 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 7806,19590,390,4059,1449,910 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16101,24969,150,4656,-1577,910 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10245,20250,390,3819,75,910 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16101,19185,6018,4656,-1577,910 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8295,13944,4770,1638,1248,910 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20004,24930,390,3312,-1640,910 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13662,19590,390,3486,381,910 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20004,24681,390,3312,-1640,910 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13662,19566,390,576,381,576 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16587,24930,0,1626,78,910 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 11220,19590,0,2352,1530,910 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16587,22380,0,1626,78,910 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 11220,17034,0,1359,1530,910 0 75199 -- MSL 485 ( 9E 191)
-u2070 8781,17805,0,2151,-1364,910 0 51753 -- MSL 1000 ( 6J 41)
-u2074 8781,17625,0,1854,-737,910 0 51748 -- MSL 1001 ( 6J 36)
-u2075 8781,17625,0,1734,-872,910 0 51749 -- MSL 1002 ( 6J 37)
-u2076 8781,17805,0,2757,-857,910 0 51806 -- MSL 1003 ( 6J 94)
-u2077 8781,17625,0,3267,-1376,910 0 51750 -- MSL 1004 ( 6J 38)
-u2078 8781,17805,0,2412,-869,910 0 51754 -- MSL 1005 ( 6J 42)
-u2079 8781,17805,0,2271,-764,910 0 51752 -- MSL 1006 ( 6J 40)
-lq 10734,18555,0,3054,-1955,910 2 161171 -- MSL 1017 (19U 147)
-rq 10734,18555,0,2940,-1841,910 2 161172 -- MSL 1018 (19U 148)
-Bq 10734,2013,4437,0,2022 0 161156 -- MSL 1019 (19U 132)
-u2003 20490,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12684,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 6342,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 20490,2706,390,0,522 0 161157 -- MSL 1028 (19U 133)
-vz 11220,19863,0,2484,1530,910 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703,0,5265,-3707,910 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,642,-1343,642 2 51794 -- MSL 1036 ( 6J 82)
-fi 13173,20250,6705,1812,5289,910 3 60077 -- MSL 1040 ( 7J 173)
-fl 14148,20250,6705,1464,5172,910 3 60078 -- MSL 1041 ( 7J 174)
-ff 13662,20250,6705,6495,5286,910 3 51883 -- MSL 1042 ( 6J 171)
-Fi 19029,20250,6705,1914,5388,910 3 51884 -- MSL 1043 ( 6J 172)
-Fl 19515,20601,6705,2037,5289,910 3 51885 -- MSL 1044 ( 6J 173)
-ij 14148,18495,6705,2055,24,910 3 60134 -- MSL 1047 ( 7J 230)
-u2105 20490,20268,180,1470,-443,910 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,23550,390,1182,-872,910 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 11220,18054,6705,1806,1908,910 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 12198,18555,6018,1974,759,910 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 7806,11670,4770,1242,1641,910 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,22380,150,3582,1641,910 2 46301 -- MSL 1065 ( 5T 221)
-bq 6342,2013,4437,0,1680 0 161154 -- MSL 1067 (19U 130)
-%0 29760,17805,207,378,-1367,378 0 161161 -- MSL 1068 (19U 137)
-a- 12684,17328,0,609,-3932,609 0 60154 -- MSL 1084 ( 7J 250)
-ab 12684,18054,0,918,-4340,910 0 75170 -- MSL 1086 ( 9E 162)
-a. 12684,17034,0,0,-6227 0 75263 -- MSL 1088 ( 9E 255)
-oe 18051,11670,390,1527,288,910 0 161180 -- MSL 1090 (19U 156)
-OE 27321,18555,390,1800,-635,910 2 161164 -- MSL 1091 (19U 140)
-fo 7806,9945,0,780,-671,780 0 161163 -- MSL 1092 (19U 139)
-fc 7806,9945,0,0,147 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 15612,18315,150,345,1536,345 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,20250,390,2265,660,910 2 75187 -- MSL 1096 ( 9E 179)
-a" 12684,19590,0,3705,-4451,910 2 75197 -- MSL 1097 ( 9E 189)
-ho 12684,420,4155,0,-3068 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16587,24969,0,1626,78,910 2 75150 -- MSL 1106 ( 9E 142)
-IJ 17076,18315,5814,3522,1641,910 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/GR b/contrib/groff/font/devlj4/GR
deleted file mode 100644
index 1ba190280159..000000000000
--- a/contrib/groff/font/devlj4/GR
+++ /dev/null
@@ -1,836 +0,0 @@
-# Garmond Antiqua
-name GR
-spacewidth 6831
-pcltypeface 4197
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3413
-P . -4388
-P , -4388
-V A -4388
-A V -4388
-T o -3902
-T r -2438
-T c -3413
-T e -3413
-T d -3413
-T s -2438
-T y -4388
-T a -2438
-T w -4388
-T u -3413
-L T -2924
-L Y -2924
-Y o -4388
-Y e -3902
-Y a -2924
-A W -4388
-W A -4388
-T A -2438
-V o -3413
-V e -3413
-V a -2924
-Y A -2924
-F A -2924
-F . -3902
-F , -3902
-A T -2924
-A Y -2924
-v . -2438
-v , -2438
-y . -2924
-y , -2924
-T . -2438
-T , -2438
-L W -3413
-P A -2924
-V . -3902
-V , -3902
-Y . -2924
-Y , -2924
-W o -3413
-W e -3413
-W a -2924
-W . -3902
-W , -3902
-r . -1460
-r , -1460
-w . -2924
-w , -2924
-Y u -3413
-A v -2438
-A y -2438
-A w -2924
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -485
-e , -485
-b . -1460
-b , -1460
-O T -1949
-O V -1949
-O Y -1949
-O . -1949
-O , -1949
-L y -2438
-L O -1949
-L G -1949
-L C -1949
-L Q -1949
-P J -974
-V y -1949
-V u -1949
-V O -1949
-V G -1949
-V C -1949
-V Q -1949
-D T -1949
-D V -1949
-D Y -1949
-D . -1949
-D , -1949
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -1460
-F e -1460
-F a -974
-c . -485
-c , -485
-O A -1460
-O W -1949
-L U -1949
-R T -2924
-R V -2924
-R Y -2924
-R W -2924
-G T -485
-P o -1460
-P g -974
-P e -1460
-P a -974
-D A -1460
-D W -1949
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-A O -1460
-A G -1460
-A C -1460
-A U -1949
-A Q -1460
-W r -1949
-W y -1949
-W u -1949
-W O -1949
-W G -1949
-W C -1949
-W Q -1949
-J A -485
-J . -485
-J , -485
-U A -1949
-U . -1949
-U , -1949
-Q A -1460
-Q W -1949
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -1460
-L e -974
-L q -1460
-G V -485
-G Y -485
-G W -485
-P T -974
-P V -974
-P Y -974
-D X -1460
-B V -1460
-B X -1460
-B A -1460
-B W -1460
-S . -974
-S , -974
-X o -1460
-X e -974
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -974
-Q X -1460
-K o -1460
-K e -974
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -1460
-o y -1460
-o x -1460
-o w -1460
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -974
-p v -974
-p y -974
-p x -974
-v o -1460
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -485
-e y -485
-b v -974
-b y -974
-b w -1460
-s . -485
-s , -485
-y o -1460
-y g -974
-y c -1460
-y d -1460
-y a -974
-y q -1460
-x o -1460
-x c -974
-x e -974
-x d -974
-x q -974
-a v -485
-a y -485
-a w -485
-w o -1460
-w g -974
-w c -1460
-w d -1460
-w a -974
-w q -1460
-T S -974
-R o -1460
-R y -1949
-R O -1949
-R G -1949
-R C -1949
-R U -1949
-R Q -1949
-P s -485
-P Z -974
-P X -974
-P W -974
-V S -974
-S A -974
-Y S -974
-X u -974
-A t -974
-A c -974
-A d -974
-A u -974
-A q -1460
-W S -974
-J y -485
-K c -974
-K u -974
-o f -485
-h w -974
-n w -974
-m w -974
-r o -1460
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-p w -974
-v e -974
-v s -485
-e x -485
-e w -485
-y e -1460
-y s -485
-f o -1460
-f c -974
-f e -974
-f d -974
-f q -974
-w e -1460
-w s -485
-k o -1460
-k c -974
-k e -974
-k d -974
-k q -974
-O Z -974
-O J -974
-L J -974
-R e -974
-R u -974
-P H -485
-P N -485
-P M -485
-P L -485
-P R -485
-P I -485
-P P -485
-P E -485
-P D -485
-P B -485
-P F -485
-P U -485
-P K -485
-E t -485
-E o -974
-E c -485
-E v -485
-E e -485
-E d -485
-E y -485
-E w -485
-E u -485
-E q -485
-E O -485
-E G -485
-E C -485
-E J -485
-E Q -485
-Z o -1460
-Z e -974
-Z d -974
-Z y -974
-Z w -974
-Z u -974
-Z O -974
-Z G -974
-Z C -974
-Z Q -974
-D Z -974
-D J -974
-B Z -974
-B J -974
-A J -974
-J o -974
-J e -485
-J a -485
-J u -485
-J O -485
-J G -485
-J C -485
-J S -485
-J Q -485
-U g -485
-K J -485
-t o -1460
-t c -974
-t e -974
-t d -974
-t q -974
-o t -485
-o g -485
-o z -974
-o j -485
-r s -485
-g o -974
-g c -485
-g e -485
-g d -485
-g q -485
-p z -485
-e z -485
-z o -974
-z c -485
-z e -485
-z d -485
-z q -485
-b z -485
-R J -974
-G J -485
-C o -485
-C y -974
-E T -485
-E V -485
-E Y -485
-E W -485
-E U -485
-B o -485
-B y -485
-B a -485
-B H -485
-B N -485
-B M -485
-B L -485
-B R -485
-B I -485
-B P -485
-B E -485
-B D -485
-B B -485
-B F -485
-B U -485
-B K -485
-U t -485
-U o -974
-U n -485
-U m -485
-U r -485
-U p -485
-U c -485
-U v -485
-U e -485
-U z -485
-U d -485
-U s -974
-U y -485
-U f -485
-U x -485
-U a -974
-U w -485
-U q -485
-U O -485
-U G -485
-U C -485
-U S -485
-U Q -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -3413
-L ' -3413
-T hy -4388
-T - -4388
-T en -4388
-T em -4388
-A cq -2924
-A ' -2924
-hy T -4388
-- T -4388
-en T -4388
-em T -4388
-Y hy -3413
-Y - -3413
-Y en -3413
-Y em -3413
-p cq -974
-p ' -974
-e cq -485
-e ' -485
-b cq -1460
-b ' -1460
-a cq -485
-a ' -485
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -1949
-R ' -1949
-W hy -1949
-W - -1949
-W en -1949
-W em -1949
-cq d -1460
-' d -1460
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -485
-' s -485
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-R hy -1949
-R - -1949
-R en -1949
-R em -1949
-K cq -485
-K ' -485
-G cq -485
-G ' -485
-E cq -485
-E ' -485
-E hy -485
-E - -485
-E en -485
-E em -485
-Z hy -974
-Z - -974
-Z en -974
-Z em -974
-B cq -485
-B ' -485
-J hy -485
-J - -485
-J en -485
-J em -485
-U hy -485
-U - -485
-U en -485
-U em -485
-charset
-! 6831,18837,390 2 161057 -- MSL 1 (19U 33)
-dq 11220,18555 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12684,17805,390 0 161059 -- MSL 3 (19U 35)
-# "
-Do 12684,19122,1707 2 161060 -- MSL 4 (19U 36)
-$ "
-% 21468,17415,390 0 161061 -- MSL 5 (19U 37)
-& 21954,18165,390 0 161062 -- MSL 6 (19U 38)
-cq 7317,18555 2 161170 -- MSL 8 (19U 146)
-' "
-( 7806,20250,6705 3 161064 -- MSL 9 (19U 40)
-) 7806,20250,6705 3 161065 -- MSL 10 (19U 41)
-* 12684,18555 2 161066 -- MSL 11 (19U 42)
-+ 21468,13191,261 0 161067 -- MSL 12 (19U 43)
-, 6831,3096,4449 0 161068 -- MSL 13 (19U 44)
-hy 6831,6960 0 161069 -- MSL 14 (19U 45)
-- "
-. 6831,2847,390 0 161070 -- MSL 15 (19U 46)
-sl 12684,20250,480 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12684,17805,390 0 161072 -- MSL 17 (19U 48)
-1 12684,17805,150 0 161073 -- MSL 18 (19U 49)
-2 12684,17805,150 0 161074 -- MSL 19 (19U 50)
-3 12684,17805,390 0 161075 -- MSL 20 (19U 51)
-4 12684,17415,390 0 161076 -- MSL 21 (19U 52)
-5 12684,17415,390 0 161077 -- MSL 22 (19U 53)
-6 12684,17811,390 0 161078 -- MSL 23 (19U 54)
-7 12684,17415,390 0 161079 -- MSL 24 (19U 55)
-8 12684,17805,390 0 161080 -- MSL 25 (19U 56)
-9 12684,17805,390 0 161081 -- MSL 26 (19U 57)
-: 6831,10593,390 0 161082 -- MSL 27 (19U 58)
-; 6831,10593,4449 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 21468,8883 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 9759,18837,390 2 161087 -- MSL 32 (19U 63)
-at 21594,16980,3654 0 161088 -- MSL 33 (19U 64)
-@ "
-A 20004,18555,150 2 161089 -- MSL 34 (19U 65)
-B 16101,18315,150 2 161090 -- MSL 35 (19U 66)
-C 19515,18555,390 2 161091 -- MSL 36 (19U 67)
-D 20979,18555,150 2 161092 -- MSL 37 (19U 68)
-E 16587,18315,150 2 161093 -- MSL 38 (19U 69)
-F 15612,18315,150 2 161094 -- MSL 39 (19U 70)
-G 20979,18555,390 2 161095 -- MSL 40 (19U 71)
-H 22443,18315,150 2 161096 -- MSL 41 (19U 72)
-I 8781,18315,150 2 161097 -- MSL 42 (19U 73)
-J 9759,18315,6060 2 161098 -- MSL 43 (19U 74)
-K 19029,18315,150 2 161099 -- MSL 44 (19U 75)
-L 16101,18315,150 2 161100 -- MSL 45 (19U 76)
-M 23907,18315,390 2 161101 -- MSL 46 (19U 77)
-N 22443,18315,774 2 161102 -- MSL 47 (19U 78)
-O 22443,18555,390 2 161103 -- MSL 48 (19U 79)
-P 15612,18555,150 2 161104 -- MSL 49 (19U 80)
-Q 22443,18555,6339 3 161105 -- MSL 50 (19U 81)
-R 18540,18315,150 2 161106 -- MSL 51 (19U 82)
-S 12684,18555,390 2 161107 -- MSL 52 (19U 83)
-T 18051,19299,150 2 161108 -- MSL 53 (19U 84)
-U 21468,18315,390 2 161109 -- MSL 54 (19U 85)
-V 19029,18315,390 2 161110 -- MSL 55 (19U 86)
-W 25857,18315,390 2 161111 -- MSL 56 (19U 87)
-X 20004,18315,150 2 161112 -- MSL 57 (19U 88)
-Y 19029,18315,150 2 161113 -- MSL 58 (19U 89)
-Z 17565,19299 2 161114 -- MSL 59 (19U 90)
-lB 7806,18165,4905 0 161115 -- MSL 60 (19U 91)
-[ "
-rs 12684,20250,480 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7806,18165,4905 0 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 7317,18555 2 161169 -- MSL 66 (19U 145)
-` "
-a 11220,11670,390 0 161121 -- MSL 67 (19U 97)
-b 14148,20265,390 2 161122 -- MSL 68 (19U 98)
-c 11220,11670,390 0 161123 -- MSL 69 (19U 99)
-d 13662,20250,390 2 161124 -- MSL 70 (19U 100)
-e 11220,11670,390 0 161125 -- MSL 71 (19U 101)
-f 8295,20250,150 2 161126 -- MSL 72 (19U 102)
-g 12198,11670,6705 1 161127 -- MSL 73 (19U 103)
-h 14637,20250,150 2 161128 -- MSL 74 (19U 104)
-i 7317,19356,150 2 161129 -- MSL 75 (19U 105)
-j 6831,19356,6705 3 161130 -- MSL 76 (19U 106)
-k 14637,20250,150 2 161131 -- MSL 77 (19U 107)
-l 7317,20262,150 2 161132 -- MSL 78 (19U 108)
-m 21954,11670,153 0 161133 -- MSL 79 (19U 109)
-n 14637,11673,150 0 161134 -- MSL 80 (19U 110)
-o 14148,11670,390 0 161135 -- MSL 81 (19U 111)
-p 14148,11679,6855 1 161136 -- MSL 82 (19U 112)
-q 13662,11670,6855 1 161137 -- MSL 83 (19U 113)
-r 10245,11670,150 0 161138 -- MSL 84 (19U 114)
-s 9270,11670,390 0 161139 -- MSL 85 (19U 115)
-t 8781,13677,390 0 161140 -- MSL 86 (19U 116)
-u 14148,11280,390 0 161141 -- MSL 87 (19U 117)
-v 13173,11430,390 0 161142 -- MSL 88 (19U 118)
-w 20004,11430,390 0 161143 -- MSL 89 (19U 119)
-x 13173,11430,150 0 161144 -- MSL 90 (19U 120)
-y 14148,11430,6705 1 161145 -- MSL 91 (19U 121)
-z 12198,12063 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 20004,24846,150 2 161216 -- MSL 99 (19U 192)
-^A 20004,24600,150 2 161218 -- MSL 100 (19U 194)
-`E 16587,24846,150 2 161224 -- MSL 101 (19U 200)
-^E 16587,24600,150 2 161226 -- MSL 102 (19U 202)
-:E 16587,23751,150 2 161227 -- MSL 103 (19U 203)
-^I 8781,24600,150 2 161230 -- MSL 104 (19U 206)
-:I 8781,23751,150 2 161231 -- MSL 105 (19U 207)
-aa 12684,20460 2 161204 -- MSL 106 (19U 180)
-ga 12684,20460 2 161120 -- MSL 107 (19U 96)
-a^ 12684,20460 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12684,17244 0 161192 -- MSL 109 (19U 168)
-~ 12684,18180 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 21468,24846,390 2 161241 -- MSL 111 (19U 217)
-^U 21468,24600,390 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 19029,24846,150 2 161245 -- MSL 114 (19U 221)
-'y 14148,20460,6705 3 161277 -- MSL 115 (19U 253)
-de 12684,17805 0 161200 -- MSL 116 (19U 176)
-,C 19515,18555,5964 2 161223 -- MSL 117 (19U 199)
-,c 11220,11670,5553 0 161255 -- MSL 118 (19U 231)
-~N 22443,24498,774 2 161233 -- MSL 119 (19U 209)
-~n 14637,18180,150 0 161265 -- MSL 120 (19U 241)
-r! 6831,12096,7131 1 161185 -- MSL 121 (19U 161)
-r? 9759,12096,7131 1 161215 -- MSL 122 (19U 191)
-Cs 12684,15684 0 161188 -- MSL 123 (19U 164)
-Po 12684,17805,5424 0 161187 -- MSL 124 (19U 163)
-Ye 12684,18315,150 2 161189 -- MSL 125 (19U 165)
-sc 12684,18555,5250 2 161191 -- MSL 126 (19U 167)
-Fn 12684,20250,6705 3 161155 -- MSL 127 (19U 131)
-ct 12684,17556,126 0 161186 -- MSL 128 (19U 162)
-^a 11220,20460,390 2 161250 -- MSL 129 (19U 226)
-^e 11220,20460,390 2 161258 -- MSL 130 (19U 234)
-^o 14148,20460,390 2 161268 -- MSL 131 (19U 244)
-^u 14148,20460,390 2 161275 -- MSL 132 (19U 251)
-'a 11220,20460,390 2 161249 -- MSL 133 (19U 225)
-'e 11220,20460,390 2 161257 -- MSL 134 (19U 233)
-'o 14148,20460,390 2 161267 -- MSL 135 (19U 243)
-'u 14148,20460,390 2 161274 -- MSL 136 (19U 250)
-`a 11220,20460,390 2 161248 -- MSL 137 (19U 224)
-`e 11220,20460,390 2 161256 -- MSL 138 (19U 232)
-`o 14148,20460,390 2 161266 -- MSL 139 (19U 242)
-`u 14148,20460,390 2 161273 -- MSL 140 (19U 249)
-:a 11220,17244,390 0 161252 -- MSL 141 (19U 228)
-:e 11220,17244,390 0 161259 -- MSL 142 (19U 235)
-:o 14148,17244,390 0 161270 -- MSL 143 (19U 246)
-:u 14148,17244,390 0 161276 -- MSL 144 (19U 252)
-oA 20004,24768,150 2 161221 -- MSL 145 (19U 197)
-^i 7317,20460,150 2 161262 -- MSL 146 (19U 238)
-/O 22443,18948,501 2 161240 -- MSL 147 (19U 216)
-AE 28299,18315,150 2 161222 -- MSL 148 (19U 198)
-oa 11220,19248,390 2 161253 -- MSL 149 (19U 229)
-'i 7317,20460,150 2 161261 -- MSL 150 (19U 237)
-/o 14148,11832,489 0 161272 -- MSL 151 (19U 248)
-ae 17076,11670,390 0 161254 -- MSL 152 (19U 230)
-:A 20004,23751,150 2 161220 -- MSL 153 (19U 196)
-`i 7317,20460,150 2 161260 -- MSL 154 (19U 236)
-:O 22443,23751,390 2 161238 -- MSL 155 (19U 214)
-:U 21468,23751,390 2 161244 -- MSL 156 (19U 220)
-'E 16587,24846,150 2 161225 -- MSL 157 (19U 201)
-:i 7317,17244,150 0 161263 -- MSL 158 (19U 239)
-ss 14637,20250,390 2 161247 -- MSL 159 (19U 223)
-^O 22443,24600,390 2 161236 -- MSL 160 (19U 212)
-'A 20004,24846,150 2 161217 -- MSL 161 (19U 193)
-~A 20004,24498,150 2 161219 -- MSL 162 (19U 195)
-~a 11220,18180,390 0 161251 -- MSL 163 (19U 227)
--D 20979,18555,150 2 161232 -- MSL 164 (19U 208)
-Sd 14148,20250,390 2 161264 -- MSL 165 (19U 240)
-'I 8781,24846,150 2 161229 -- MSL 166 (19U 205)
-`I 8781,24846,150 2 161228 -- MSL 167 (19U 204)
-'O 22443,24846,390 2 161235 -- MSL 168 (19U 211)
-`O 22443,24846,390 2 161234 -- MSL 169 (19U 210)
-~O 22443,24498,390 2 161237 -- MSL 170 (19U 213)
-~o 14148,18180,390 0 161269 -- MSL 171 (19U 245)
-vS 12684,24612,390 2 161162 -- MSL 172 (19U 138)
-vs 9270,20499,390 2 161178 -- MSL 173 (19U 154)
-'U 21468,24846,390 2 161242 -- MSL 174 (19U 218)
-:Y 19029,23751,150 2 161183 -- MSL 175 (19U 159)
-:y 14148,17244,6705 1 161279 -- MSL 176 (19U 255)
-TP 15612,18315,150 2 161246 -- MSL 177 (19U 222)
-Tp 14148,20250,6855 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595 0 161205 -- MSL 180 (19U 181)
-ps 12684,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 21468,17805,288 0 161214 -- MSL 182 (19U 190)
-\- 21468,7305 0 60096 -- MSL 183 ( 7J 192)
-14 21468,17805,288 0 161212 -- MSL 184 (19U 188)
-12 21468,17805,288 0 161213 -- MSL 185 (19U 189)
-Of 12684,17805 0 161194 -- MSL 186 (19U 170)
-Om 12684,17805 0 161210 -- MSL 187 (19U 186)
-Fo 11220,9945 0 161195 -- MSL 188 (19U 171)
-Fc 11220,9945 0 161211 -- MSL 190 (19U 187)
-t+- 21468,13191,3105 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 2 161190 -- MSL 192 (19U 166)
-co 13173,19725 2 161193 -- MSL 193 (19U 169)
-tno 21468,10029 0 161196 -- MSL 194 (19U 172)
-u00AD 6831,6960 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725 2 161198 -- MSL 196 (19U 174)
-S2 8781,17805 0 161202 -- MSL 197 (19U 178)
-S3 8781,17805 0 161203 -- MSL 198 (19U 179)
-ac 12684,255,5553 0 161208 -- MSL 199 (19U 184)
-S1 8781,17805 0 161209 -- MSL 200 (19U 185)
-tmu 21468,12969,189 0 161239 -- MSL 201 (19U 215)
-tdi 21468,12966,36 0 161271 -- MSL 202 (19U 247)
-u203C 12684,18837,390 2 87315 -- MSL 221 (10U 19)
-u20A7 24396,18555,390 2 60121 -- MSL 232 ( 7J 217)
-pc 6831,10326 0 161207 -- MSL 302 (19U 183)
-u013F 16101,18315,150 2 51943 -- MSL 306 ( 6J 231)
-u0140 8778,20262,150 2 51959 -- MSL 307 ( 6J 247)
-u2113 12684,18150,297 0 60122 -- MSL 308 ( 7J 218)
-u0149 17079,18555,150 2 51951 -- MSL 309 ( 6J 239)
-fm 12684,17805 0 60101 -- MSL 310 ( 7J 197)
-sd 12684,17805 0 60102 -- MSL 311 ( 7J 198)
-dg 12684,18555,5250 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 12684,20499 2 75169 -- MSL 315 ( 9E 161)
-ao 12684,19248 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,17805,288 0 60109 -- MSL 324 ( 7J 205)
-em 21468,6960 0 161175 -- MSL 325 (19U 151)
-en 12684,6960 0 161174 -- MSL 326 (19U 150)
-dd 12684,18555,5250 2 161159 -- MSL 327 (19U 135)
-.i 7317,11673,150 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18555 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 14637,17808 0 87548 -- MSL 332 (10U 252)
-u0111 13662,20250,390 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 20004,24465,150 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 11220,17796,390 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 20004,18555,4461 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 11220,11670,4653 0 75193 -- MSL 405 ( 9E 185)
-'C 19515,24846,390 2 75206 -- MSL 406 ( 9E 198)
-'c 11220,20460,390 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 19515,24612,390 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11220,20499,390 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20979,24612,150 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 17076,20250,390 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16587,24612,150 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11220,20499,390 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16587,18315,4461 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11220,11670,4653 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 16101,24846,150 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25626,150 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 16101,18846,150 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10245,20262,150 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 22443,24846,774 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,20460,150 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 22443,24612,774 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,20499,150 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 22443,24846,390 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14148,20460,390 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 18540,24846,150 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,20460,150 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 18540,24612,150 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,20499,150 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 12684,24846,390 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 9270,20460,390 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 18051,24612,150 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9759,20250,390 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 18051,19299,5964 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8781,13677,5553 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 21468,24846,390 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14148,20460,390 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 21468,24768,390 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14148,19248,390 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,24846 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12198,20460 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,23751 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12198,17244 0 75199 -- MSL 485 ( 9E 191)
-u2070 8781,17805 0 51753 -- MSL 1000 ( 6J 41)
-u2074 8781,17805 0 51748 -- MSL 1001 ( 6J 36)
-u2075 8781,17625 0 51749 -- MSL 1002 ( 6J 37)
-u2076 8781,17805 0 51806 -- MSL 1003 ( 6J 94)
-u2077 8781,17625 0 51750 -- MSL 1004 ( 6J 38)
-u2078 8781,17805 0 51754 -- MSL 1005 ( 6J 42)
-u2079 8781,17805 0 51752 -- MSL 1006 ( 6J 40)
-lq 11220,18555 2 161171 -- MSL 1017 (19U 147)
-rq 11220,18555 2 161172 -- MSL 1018 (19U 148)
-Bq 11220,2811,3939 0 161156 -- MSL 1019 (19U 132)
-u2003 21468,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12684,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 6831,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 21468,2685,390 0 161157 -- MSL 1028 (19U 133)
-vz 12198,20499 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 14637,20250,150 2 60077 -- MSL 1040 ( 7J 173)
-fl 14637,20250,150 2 60078 -- MSL 1041 ( 7J 174)
-ff 15612,20250,150 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21954,20250,150 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21954,20250,150 2 51885 -- MSL 1044 ( 6J 173)
-ij 14148,19356,6705 3 60134 -- MSL 1047 ( 7J 230)
-u2105 23415,19962,474 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20979,24465,390 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 12198,17796,6705 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 12684,18555,5964 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 9270,11670,5553 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,23751,150 2 46301 -- MSL 1065 ( 5T 221)
-bq 7317,2811,3939 0 161154 -- MSL 1067 (19U 130)
-%0 30738,17805,180 0 161161 -- MSL 1068 (19U 137)
-a- 12684,17367 0 60154 -- MSL 1084 ( 7J 250)
-ab 12684,17796 0 75170 -- MSL 1086 ( 9E 162)
-a. 12684,17244 0 75263 -- MSL 1088 ( 9E 255)
-oe 20004,11670,390 0 161180 -- MSL 1090 (19U 156)
-OE 27321,18555,390 2 161164 -- MSL 1091 (19U 140)
-fo 7317,9945 0 161163 -- MSL 1092 (19U 139)
-fc 7317,9945 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 16101,18315,150 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,20262,150 2 75187 -- MSL 1096 ( 9E 179)
-a" 12684,20460 2 75197 -- MSL 1097 ( 9E 189)
-ho 12684,600,4653 0 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,24612 2 75150 -- MSL 1106 ( 9E 142)
-IJ 18540,18315,6060 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/LGB b/contrib/groff/font/devlj4/LGB
deleted file mode 100644
index 1b6d7472a661..000000000000
--- a/contrib/groff/font/devlj4/LGB
+++ /dev/null
@@ -1,330 +0,0 @@
-# LetterGothic Bd
-name LGB
-spacewidth 13227
-pcltypeface 4102
-pclproportional 0
-pclweight 3
-pclstyle 0
-charset
-! 13227,18990,330 2 161057 -- MSL 1 (19U 33)
-dq 13227,18990 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13227,21345,2391 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13227,19320,993 2 161060 -- MSL 4 (19U 36)
-$ "
-% 13227,19320,330 2 161061 -- MSL 5 (19U 37)
-& 13227,19320,330 2 161062 -- MSL 6 (19U 38)
-cq 13227,19320 2 161170 -- MSL 8 (19U 146)
-' "
-( 13227,19320,2325 2 161064 -- MSL 9 (19U 40)
-) 13227,19320,2325 2 161065 -- MSL 10 (19U 41)
-* 13227,18990 2 161066 -- MSL 11 (19U 42)
-+ 13227,15645 0 161067 -- MSL 12 (19U 43)
-, 13227,2925,2640 0 161068 -- MSL 13 (19U 44)
-hy 13227,8775 0 161069 -- MSL 14 (19U 45)
-- "
-. 13227,3180,330 0 161070 -- MSL 15 (19U 46)
-sl 13227,19545,330 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13227,19320,330 2 161072 -- MSL 17 (19U 48)
-1 13227,19320 2 161073 -- MSL 18 (19U 49)
-2 13227,19320 2 161074 -- MSL 19 (19U 50)
-3 13227,19320,330 2 161075 -- MSL 20 (19U 51)
-4 13227,19320 2 161076 -- MSL 21 (19U 52)
-5 13227,18990,330 2 161077 -- MSL 22 (19U 53)
-6 13227,19320,330 2 161078 -- MSL 23 (19U 54)
-7 13227,18990 2 161079 -- MSL 24 (19U 55)
-8 13227,19320,330 2 161080 -- MSL 25 (19U 56)
-9 13227,19320,330 2 161081 -- MSL 26 (19U 57)
-: 13227,12654,330 0 161082 -- MSL 27 (19U 58)
-; 13227,12654,2640 0 161083 -- MSL 28 (19U 59)
-< 13227,15312 0 161084 -- MSL 29 (19U 60)
-= 13227,12534 0 161085 -- MSL 30 (19U 61)
-> 13227,15312 0 161086 -- MSL 31 (19U 62)
-? 13227,19320,330 2 161087 -- MSL 32 (19U 63)
-at 13227,19320,330 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13227,18990 2 161089 -- MSL 34 (19U 65)
-B 13227,18990 2 161090 -- MSL 35 (19U 66)
-C 13227,19320,330 2 161091 -- MSL 36 (19U 67)
-D 13227,18990 2 161092 -- MSL 37 (19U 68)
-E 13227,18990 2 161093 -- MSL 38 (19U 69)
-F 13227,18990 2 161094 -- MSL 39 (19U 70)
-G 13227,19320,330 2 161095 -- MSL 40 (19U 71)
-H 13227,18990 2 161096 -- MSL 41 (19U 72)
-I 13227,18990 2 161097 -- MSL 42 (19U 73)
-J 13227,18990,330 2 161098 -- MSL 43 (19U 74)
-K 13227,18990 2 161099 -- MSL 44 (19U 75)
-L 13227,18990 2 161100 -- MSL 45 (19U 76)
-M 13227,18990 2 161101 -- MSL 46 (19U 77)
-N 13227,18990 2 161102 -- MSL 47 (19U 78)
-O 13227,19320,330 2 161103 -- MSL 48 (19U 79)
-P 13227,18990 2 161104 -- MSL 49 (19U 80)
-Q 13227,19320,2760 2 161105 -- MSL 50 (19U 81)
-R 13227,18990 2 161106 -- MSL 51 (19U 82)
-S 13227,19320,330 2 161107 -- MSL 52 (19U 83)
-T 13227,18990 2 161108 -- MSL 53 (19U 84)
-U 13227,18990,330 2 161109 -- MSL 54 (19U 85)
-V 13227,18990 2 161110 -- MSL 55 (19U 86)
-W 13227,18990 2 161111 -- MSL 56 (19U 87)
-X 13227,18990 2 161112 -- MSL 57 (19U 88)
-Y 13227,18990 2 161113 -- MSL 58 (19U 89)
-Z 13227,18990 2 161114 -- MSL 59 (19U 90)
-lB 13227,18990,3510 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 13227,19545,330 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 13227,18990,3510 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13227,19758 2 161118 -- MSL 63 (19U 94)
-_ 13227,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 13227,19320 2 161169 -- MSL 66 (19U 145)
-` "
-a 13227,14355,330 0 161121 -- MSL 67 (19U 97)
-b 13227,19545,330 2 161122 -- MSL 68 (19U 98)
-c 13227,14355,330 0 161123 -- MSL 69 (19U 99)
-d 13227,19545,330 2 161124 -- MSL 70 (19U 100)
-e 13227,14355,330 0 161125 -- MSL 71 (19U 101)
-f 13227,19335 2 161126 -- MSL 72 (19U 102)
-g 13227,14355,4350 0 161127 -- MSL 73 (19U 103)
-h 13227,19545 2 161128 -- MSL 74 (19U 104)
-i 13227,19095 2 161129 -- MSL 75 (19U 105)
-j 13227,19095,4350 2 161130 -- MSL 76 (19U 106)
-k 13227,19545 2 161131 -- MSL 77 (19U 107)
-l 13227,19545 2 161132 -- MSL 78 (19U 108)
-m 13227,14355 0 161133 -- MSL 79 (19U 109)
-n 13227,14355 0 161134 -- MSL 80 (19U 110)
-o 13227,14355,330 0 161135 -- MSL 81 (19U 111)
-p 13227,14355,5475 1 161136 -- MSL 82 (19U 112)
-q 13227,14355,5475 1 161137 -- MSL 83 (19U 113)
-r 13227,14355 0 161138 -- MSL 84 (19U 114)
-s 13227,14355,330 0 161139 -- MSL 85 (19U 115)
-t 13227,18300,330 2 161140 -- MSL 86 (19U 116)
-u 13227,14025,330 0 161141 -- MSL 87 (19U 117)
-v 13227,14025 0 161142 -- MSL 88 (19U 118)
-w 13227,14025 0 161143 -- MSL 89 (19U 119)
-x 13227,14025 0 161144 -- MSL 90 (19U 120)
-y 13227,14025,4350 0 161145 -- MSL 91 (19U 121)
-z 13227,14025 0 161146 -- MSL 92 (19U 122)
-{ 13227,20130,6141 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13227,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13227,20130,6141 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 13227,11181 0 161150 -- MSL 96 (19U 126)
-`A 13227,25155 2 161216 -- MSL 99 (19U 192)
-^A 13227,25080 2 161218 -- MSL 100 (19U 194)
-`E 13227,25155 2 161224 -- MSL 101 (19U 200)
-^E 13227,25080 2 161226 -- MSL 102 (19U 202)
-:E 13227,24000 2 161227 -- MSL 103 (19U 203)
-^I 13227,25080 2 161230 -- MSL 104 (19U 206)
-:I 13227,24000 2 161231 -- MSL 105 (19U 207)
-aa 13227,20745 2 161204 -- MSL 106 (19U 180)
-ga 13227,20745 2 161120 -- MSL 107 (19U 96)
-a^ 13227,21015 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13227,19125 2 161192 -- MSL 109 (19U 168)
-~ 13227,19683 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13227,25155,330 2 161241 -- MSL 111 (19U 217)
-^U 13227,25080,330 2 161243 -- MSL 112 (19U 219)
-u00AF 13227,21105 2 161199 -- MSL 113 (19U 175)
-'Y 13227,25155 2 161245 -- MSL 114 (19U 221)
-'y 13227,20745,4350 2 161277 -- MSL 115 (19U 253)
-de 13227,19320 2 161200 -- MSL 116 (19U 176)
-,C 13227,19320,5787 3 161223 -- MSL 117 (19U 199)
-,c 13227,14355,6060 1 161255 -- MSL 118 (19U 231)
-~N 13227,24552 2 161233 -- MSL 119 (19U 209)
-~n 13227,19683 2 161265 -- MSL 120 (19U 241)
-r! 13227,14319,5001 1 161185 -- MSL 121 (19U 161)
-r? 13227,14265,5385 1 161215 -- MSL 122 (19U 191)
-Cs 13227,15885 0 161188 -- MSL 123 (19U 164)
-Po 13227,18990,330 2 161187 -- MSL 124 (19U 163)
-Ye 13227,18990 2 161189 -- MSL 125 (19U 165)
-sc 13227,19320,1218 2 161191 -- MSL 126 (19U 167)
-Fn 13227,19335,3558 2 161155 -- MSL 127 (19U 131)
-ct 13227,19320,330 2 161186 -- MSL 128 (19U 162)
-^a 13227,21015,330 2 161250 -- MSL 129 (19U 226)
-^e 13227,21015,330 2 161258 -- MSL 130 (19U 234)
-^o 13227,21015,330 2 161268 -- MSL 131 (19U 244)
-^u 13227,21015,330 2 161275 -- MSL 132 (19U 251)
-'a 13227,20745,330 2 161249 -- MSL 133 (19U 225)
-'e 13227,20745,330 2 161257 -- MSL 134 (19U 233)
-'o 13227,20745,330 2 161267 -- MSL 135 (19U 243)
-'u 13227,20745,330 2 161274 -- MSL 136 (19U 250)
-`a 13227,20745,330 2 161248 -- MSL 137 (19U 224)
-`e 13227,20745,330 2 161256 -- MSL 138 (19U 232)
-`o 13227,20745,330 2 161266 -- MSL 139 (19U 242)
-`u 13227,20745,330 2 161273 -- MSL 140 (19U 249)
-:a 13227,19125,330 2 161252 -- MSL 141 (19U 228)
-:e 13227,19125,330 2 161259 -- MSL 142 (19U 235)
-:o 13227,19125,330 2 161270 -- MSL 143 (19U 246)
-:u 13227,19125,330 2 161276 -- MSL 144 (19U 252)
-oA 13227,24882 2 161221 -- MSL 145 (19U 197)
-^i 13227,21015 2 161262 -- MSL 146 (19U 238)
-/O 13227,19320,459 2 161240 -- MSL 147 (19U 216)
-AE 13227,18990 2 161222 -- MSL 148 (19U 198)
-oa 13227,20790,330 2 161253 -- MSL 149 (19U 229)
-'i 13227,20745 2 161261 -- MSL 150 (19U 237)
-/o 13227,14901,957 0 161272 -- MSL 151 (19U 248)
-ae 13227,14355,330 0 161254 -- MSL 152 (19U 230)
-:A 13227,24000 2 161220 -- MSL 153 (19U 196)
-`i 13227,20745 2 161260 -- MSL 154 (19U 236)
-:O 13227,24000,330 2 161238 -- MSL 155 (19U 214)
-:U 13227,24000,330 2 161244 -- MSL 156 (19U 220)
-'E 13227,25155 2 161225 -- MSL 157 (19U 201)
-:i 13227,19125 2 161263 -- MSL 158 (19U 239)
-ss 13227,19335,330 2 161247 -- MSL 159 (19U 223)
-^O 13227,25080,330 2 161236 -- MSL 160 (19U 212)
-'A 13227,25155 2 161217 -- MSL 161 (19U 193)
-~A 13227,24552 2 161219 -- MSL 162 (19U 195)
-~a 13227,19683,330 2 161251 -- MSL 163 (19U 227)
--D 13227,18990 2 161232 -- MSL 164 (19U 208)
-Sd 13227,19656,330 2 161264 -- MSL 165 (19U 240)
-'I 13227,25155 2 161229 -- MSL 166 (19U 205)
-`I 13227,25155 2 161228 -- MSL 167 (19U 204)
-'O 13227,25155,330 2 161235 -- MSL 168 (19U 211)
-`O 13227,25155,330 2 161234 -- MSL 169 (19U 210)
-~O 13227,24552,330 2 161237 -- MSL 170 (19U 213)
-~o 13227,19683,330 2 161269 -- MSL 171 (19U 245)
-vS 13227,25116,330 2 161162 -- MSL 172 (19U 138)
-vs 13227,21015,330 2 161178 -- MSL 173 (19U 154)
-'U 13227,25155,330 2 161242 -- MSL 174 (19U 218)
-:Y 13227,24000 2 161183 -- MSL 175 (19U 159)
-:y 13227,19125,4350 2 161279 -- MSL 176 (19U 255)
-TP 13227,18990 2 161246 -- MSL 177 (19U 222)
-Tp 13227,19545,5475 3 161278 -- MSL 178 (19U 254)
-mc 13227,14025,4350 0 161205 -- MSL 180 (19U 181)
-ps 13227,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 13227,19110,3825 2 161214 -- MSL 182 (19U 190)
-\- 13227,10425 0 60096 -- MSL 183 ( 7J 192)
-14 13227,19110,3825 2 161212 -- MSL 184 (19U 188)
-12 13227,19110,3825 2 161213 -- MSL 185 (19U 189)
-Of 13227,19320 2 161194 -- MSL 186 (19U 170)
-Om 13227,19320 2 161210 -- MSL 187 (19U 186)
-Fo 13227,14115 0 161195 -- MSL 188 (19U 171)
-Fc 13227,14115 0 161211 -- MSL 190 (19U 187)
-t+- 13227,15645,30 0 161201 -- MSL 191 (19U 177)
-bb 13227,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13227,19635 2 161193 -- MSL 193 (19U 169)
-tno 13227,13020 0 161196 -- MSL 194 (19U 172)
-u00AD 13227,8775 0 161197 -- MSL 195 (19U 173)
-rg 13227,19635 2 161198 -- MSL 196 (19U 174)
-S2 13227,19110 2 161202 -- MSL 197 (19U 178)
-S3 13227,19110 2 161203 -- MSL 198 (19U 179)
-ac 13227,0,6060 1 161208 -- MSL 199 (19U 184)
-S1 13227,19110 2 161209 -- MSL 200 (19U 185)
-tmu 13227,15549 0 161239 -- MSL 201 (19U 215)
-tdi 13227,15510 0 161271 -- MSL 202 (19U 247)
-u203C 13227,18990,330 2 87315 -- MSL 221 (10U 19)
-u20A7 13227,18990,330 2 60121 -- MSL 232 ( 7J 217)
-pc 13227,11376 0 161207 -- MSL 302 (19U 183)
-u013F 13227,18990 2 51943 -- MSL 306 ( 6J 231)
-u0140 13227,19545 2 51959 -- MSL 307 ( 6J 247)
-u2113 13227,18111,330 2 60122 -- MSL 308 ( 7J 218)
-u0149 13227,19320 2 51951 -- MSL 309 ( 6J 239)
-fm 13227,18990 2 60101 -- MSL 310 ( 7J 197)
-sd 13227,18990 2 60102 -- MSL 311 ( 7J 198)
-dg 13227,18990 2 161158 -- MSL 312 (19U 134)
-tm 13227,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13227,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 13227,21015 2 75169 -- MSL 315 ( 9E 161)
-ao 13227,20790 2 60152 -- MSL 316 ( 7J 248)
-f/ 13227,15675 0 60109 -- MSL 324 ( 7J 205)
-em 13227,8430 0 161175 -- MSL 325 (19U 151)
-en 13227,8430 0 161174 -- MSL 326 (19U 150)
-dd 13227,18990 2 161159 -- MSL 327 (19U 135)
-.i 13227,14025 0 46333 -- MSL 328 ( 5T 253)
-aq 13227,18990 2 161063 -- MSL 329 (19U 39)
-bu 13227,12714 0 161173 -- MSL 331 (19U 149)
-u207F 13227,19110 2 87548 -- MSL 332 (10U 252)
-u0111 13227,19545,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13227,24720 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13227,19830,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13227,18990,5109 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13227,14355,5109 1 75193 -- MSL 405 ( 9E 185)
-'C 13227,25155,330 2 75206 -- MSL 406 ( 9E 198)
-'c 13227,20745,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13227,25116,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 13227,21015,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13227,25116 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 13227,19545,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13227,25116 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13227,21015,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13227,18990,5109 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13227,14355,5109 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13227,25155 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 13227,25155 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13227,19320 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 13227,19545 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 13227,25155 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13227,20745 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 13227,25116 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13227,21015 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13227,25155,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13227,20745,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13227,25155 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 13227,20745 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13227,25116 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 13227,21015 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13227,25155,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13227,20745,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13227,25116 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 13227,19320,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13227,18990,5787 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 13227,18300,6060 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13227,25155,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13227,20745,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13227,24882,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13227,20790,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 13227,25155 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13227,20745 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 13227,24000 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13227,19125 2 75199 -- MSL 485 ( 9E 191)
-u2070 13227,19110 2 51753 -- MSL 1000 ( 6J 41)
-u2074 13227,19110 2 51748 -- MSL 1001 ( 6J 36)
-u2075 13227,18990 2 51749 -- MSL 1002 ( 6J 37)
-u2076 13227,19110 2 51806 -- MSL 1003 ( 6J 94)
-u2077 13227,18990 2 51750 -- MSL 1004 ( 6J 38)
-u2078 13227,19110 2 51754 -- MSL 1005 ( 6J 42)
-u2079 13227,19110 2 51752 -- MSL 1006 ( 6J 40)
-lq 13227,19320 2 161171 -- MSL 1017 (19U 147)
-rq 13227,19320 2 161172 -- MSL 1018 (19U 148)
-Bq 13227,3486,2079 0 161156 -- MSL 1019 (19U 132)
-u2003 13227,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13227,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 13227,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 13227,2985 0 161157 -- MSL 1028 (19U 133)
-vz 13227,21015 2 75166 -- MSL 1031 ( 9E 158)
-u2120 13227,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 13227,18990,3225 2 51794 -- MSL 1036 ( 6J 82)
-fi 13227,19335 2 60077 -- MSL 1040 ( 7J 173)
-fl 13227,19335 2 60078 -- MSL 1041 ( 7J 174)
-ff 13227,19335 2 51883 -- MSL 1042 ( 6J 171)
-Fi 13227,19335 2 51884 -- MSL 1043 ( 6J 172)
-Fl 13227,19335 2 51885 -- MSL 1044 ( 6J 173)
-ij 13227,19095,4350 2 60134 -- MSL 1047 ( 7J 230)
-u2105 13227,19545,330 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13227,24720,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13227,19830,4350 2 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13227,19320,5787 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13227,14355,6060 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 13227,24000 2 46301 -- MSL 1065 ( 5T 221)
-bq 13227,3486,2079 0 161154 -- MSL 1067 (19U 130)
-%0 13227,19320,330 2 161161 -- MSL 1068 (19U 137)
-a- 13227,19119 2 60154 -- MSL 1084 ( 7J 250)
-ab 13227,19830 2 75170 -- MSL 1086 ( 9E 162)
-a. 13227,19125 2 75263 -- MSL 1088 ( 9E 255)
-oe 13227,14355,330 0 161180 -- MSL 1090 (19U 156)
-OE 13227,19320,330 2 161164 -- MSL 1091 (19U 140)
-fo 13227,14115 0 161163 -- MSL 1092 (19U 139)
-fc 13227,14115 0 161179 -- MSL 1093 (19U 155)
-sq 13227,14106 0 60091 -- MSL 1094 ( 7J 187)
-/L 13227,18990 2 75171 -- MSL 1095 ( 9E 163)
-/l 13227,19545 2 75187 -- MSL 1096 ( 9E 179)
-a" 13227,20745 2 75197 -- MSL 1097 ( 9E 189)
-ho 13227,1026,5109 1 75186 -- MSL 1098 ( 9E 178)
-vZ 13227,25116 2 75150 -- MSL 1106 ( 9E 142)
-IJ 13227,18990,330 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/LGI b/contrib/groff/font/devlj4/LGI
deleted file mode 100644
index 09bcaeb27570..000000000000
--- a/contrib/groff/font/devlj4/LGI
+++ /dev/null
@@ -1,331 +0,0 @@
-# LetterGothic It
-name LGI
-spacewidth 13227
-slant 12.000000
-pcltypeface 4102
-pclproportional 0
-pclweight 0
-pclstyle 1
-charset
-! 13227,18990,330,0,-2747 2 161057 -- MSL 1 (19U 33)
-dq 13227,18990,0,372,-3959,372 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13227,21309,2451,1827,1062,790 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13227,19320,1074,762,288,762 2 161060 -- MSL 4 (19U 36)
-$ "
-% 13227,19320,330,2535,882,790 2 161061 -- MSL 5 (19U 37)
-& 13227,19320,330,54,699,54 2 161062 -- MSL 6 (19U 38)
-cq 13227,19320,0,0,-5468 2 161170 -- MSL 8 (19U 146)
-' "
-( 13227,19320,1935,318,-2951,318 2 161064 -- MSL 9 (19U 40)
-) 13227,19320,1935,318,-2951,318 2 161065 -- MSL 10 (19U 41)
-* 13227,18990,0,1995,-827,790 2 161066 -- MSL 11 (19U 42)
-+ 13227,15075,0,960,-92,790 0 161067 -- MSL 12 (19U 43)
-, 13227,1785,2250,0,-2768 0 161068 -- MSL 13 (19U 44)
-hy 13227,7995,0,0,-2510 0 161069 -- MSL 14 (19U 45)
-- "
-. 13227,2100,330,0,-3872 0 161070 -- MSL 15 (19U 46)
-sl 13227,19545,330,0,-1409 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13227,19320,330,564,-455,564 2 161072 -- MSL 17 (19U 48)
-1 13227,19320,0,0,60 2 161073 -- MSL 18 (19U 49)
-2 13227,19320,0,1578,1365,790 2 161074 -- MSL 19 (19U 50)
-3 13227,19320,330,420,888,420 2 161075 -- MSL 20 (19U 51)
-4 13227,19320,0,585,750,585 2 161076 -- MSL 21 (19U 52)
-5 13227,18990,330,1215,153,790 2 161077 -- MSL 22 (19U 53)
-6 13227,19320,330,1800,-92,790 2 161078 -- MSL 23 (19U 54)
-7 13227,18990,0,2184,-962,790 2 161079 -- MSL 24 (19U 55)
-8 13227,19320,330,996,423,790 2 161080 -- MSL 25 (19U 56)
-9 13227,19320,330,741,90,741 2 161081 -- MSL 26 (19U 57)
-: 13227,12492,330,0,-3038 0 161082 -- MSL 27 (19U 58)
-; 13227,12492,2250,0,-2771 0 161083 -- MSL 28 (19U 59)
-< 13227,15063,0,390,387,390 0 161084 -- MSL 29 (19U 60)
-= 13227,11721,0,1065,-287,790 0 161085 -- MSL 30 (19U 61)
-> 13227,15063,0,390,387,390 0 161086 -- MSL 31 (19U 62)
-? 13227,19320,330,981,-2729,790 2 161087 -- MSL 32 (19U 63)
-at 13227,19320,330,993,87,790 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13227,18990,0,0,2541 2 161089 -- MSL 34 (19U 65)
-B 13227,18990,0,1095,831,790 2 161090 -- MSL 35 (19U 66)
-C 13227,19320,330,1524,-11,790 2 161091 -- MSL 36 (19U 67)
-D 13227,18990,0,1089,1263,790 2 161092 -- MSL 37 (19U 68)
-E 13227,18990,0,1995,642,790 2 161093 -- MSL 38 (19U 69)
-F 13227,18990,0,2535,594,790 2 161094 -- MSL 39 (19U 70)
-G 13227,19320,330,1350,519,790 2 161095 -- MSL 40 (19U 71)
-H 13227,18990,0,2316,1050,790 2 161096 -- MSL 41 (19U 72)
-I 13227,18990,0,558,-662,558 2 161097 -- MSL 42 (19U 73)
-J 13227,18990,330,2118,-38,790 2 161098 -- MSL 43 (19U 74)
-K 13227,18990,0,1590,765,790 2 161099 -- MSL 44 (19U 75)
-L 13227,18990,0,0,153 2 161100 -- MSL 45 (19U 76)
-M 13227,18990,0,2853,1941,790 2 161101 -- MSL 46 (19U 77)
-N 13227,18990,0,2097,882,790 2 161102 -- MSL 47 (19U 78)
-O 13227,19320,330,1485,273,790 2 161103 -- MSL 48 (19U 79)
-P 13227,18990,0,1152,771,790 2 161104 -- MSL 49 (19U 80)
-Q 13227,19320,2778,1485,273,790 2 161105 -- MSL 50 (19U 81)
-R 13227,18990,0,987,981,790 2 161106 -- MSL 51 (19U 82)
-S 13227,19320,330,1608,1134,790 2 161107 -- MSL 52 (19U 83)
-T 13227,18990,0,3171,-1430,790 2 161108 -- MSL 53 (19U 84)
-U 13227,18990,330,2220,108,790 2 161109 -- MSL 54 (19U 85)
-V 13227,18990,0,2217,-2732,790 2 161110 -- MSL 55 (19U 86)
-W 13227,18990,0,3045,702,790 2 161111 -- MSL 56 (19U 87)
-X 13227,18990,0,2355,1296,790 2 161112 -- MSL 57 (19U 88)
-Y 13227,18990,0,2553,-2396,790 2 161113 -- MSL 58 (19U 89)
-Z 13227,18990,0,1956,1203,790 2 161114 -- MSL 59 (19U 90)
-lB 13227,18990,2940,1110,-32,790 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 13227,19545,330,0,-3071 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 13227,18990,2940,342,735,342 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13227,19758,0,9,9,9 2 161118 -- MSL 63 (19U 94)
-_ 13227,0,6588,1317,1317,790 1 161119 -- MSL 64 (19U 95)
-oq 13227,19326,0,0,-6221 2 161169 -- MSL 66 (19U 145)
-` "
-a 13227,14355,330,0,105 0 161121 -- MSL 67 (19U 97)
-b 13227,19545,330,312,1671,312 2 161122 -- MSL 68 (19U 98)
-c 13227,14355,330,810,261,790 0 161123 -- MSL 69 (19U 99)
-d 13227,19545,330,2121,363,790 2 161124 -- MSL 70 (19U 100)
-e 13227,14355,330,387,303,387 0 161125 -- MSL 71 (19U 101)
-f 13227,19335,0,3231,-1784,790 2 161126 -- MSL 72 (19U 102)
-g 13227,14355,4350,1545,1053,790 0 161127 -- MSL 73 (19U 103)
-h 13227,19545,0,168,723,168 2 161128 -- MSL 74 (19U 104)
-i 13227,18780,0,0,-2318 2 161129 -- MSL 75 (19U 105)
-j 13227,18780,4350,906,936,790 2 161130 -- MSL 76 (19U 106)
-k 13227,19545,0,495,504,495 2 161131 -- MSL 77 (19U 107)
-l 13227,19545,0,0,-3602 2 161132 -- MSL 78 (19U 108)
-m 13227,14355,0,1770,2205,790 0 161133 -- MSL 79 (19U 109)
-n 13227,14355,0,267,774,267 0 161134 -- MSL 80 (19U 110)
-o 13227,14355,330,372,252,372 0 161135 -- MSL 81 (19U 111)
-p 13227,14355,5475,213,2205,213 1 161136 -- MSL 82 (19U 112)
-q 13227,14355,5475,1668,318,790 1 161137 -- MSL 83 (19U 113)
-r 13227,14355,0,684,-80,684 0 161138 -- MSL 84 (19U 114)
-s 13227,14355,330,57,480,57 0 161139 -- MSL 85 (19U 115)
-t 13227,18495,330,0,-932 2 161140 -- MSL 86 (19U 116)
-u 13227,14025,330,714,249,714 0 161141 -- MSL 87 (19U 117)
-v 13227,14025,0,1437,-1766,790 0 161142 -- MSL 88 (19U 118)
-w 13227,14025,0,2574,279,790 0 161143 -- MSL 89 (19U 119)
-x 13227,14025,0,1050,2112,790 0 161144 -- MSL 90 (19U 120)
-y 13227,14025,4350,1986,3579,790 0 161145 -- MSL 91 (19U 121)
-z 13227,14025,0,984,1395,790 0 161146 -- MSL 92 (19U 122)
-{ 13227,20130,6075,1170,-2528,790 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13227,19758,6588,0,-4622 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13227,20130,6075,0,975 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 13227,10485,0,825,822,790 0 161150 -- MSL 96 (19U 126)
-`A 13227,24630,0,0,2541 2 161216 -- MSL 99 (19U 192)
-^A 13227,24810,0,2133,2541,790 2 161218 -- MSL 100 (19U 194)
-`E 13227,24630,0,1995,642,790 2 161224 -- MSL 101 (19U 200)
-^E 13227,24810,0,2133,642,790 2 161226 -- MSL 102 (19U 202)
-:E 13227,23115,0,1995,642,790 2 161227 -- MSL 103 (19U 203)
-^I 13227,24810,0,2133,-662,790 2 161230 -- MSL 104 (19U 206)
-:I 13227,23115,0,1143,-662,790 2 161231 -- MSL 105 (19U 207)
-aa 13227,19725,0,753,-5705,753 2 161204 -- MSL 106 (19U 180)
-ga 13227,19725,0,0,-4727 2 161120 -- MSL 107 (19U 96)
-a^ 13227,19905,0,1089,-3116,790 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13227,18195,0,0,-4340 2 161192 -- MSL 109 (19U 168)
-~ 13227,18873,0,1833,-2405,790 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13227,24630,330,2220,108,790 2 161241 -- MSL 111 (19U 217)
-^U 13227,24810,330,2220,108,790 2 161243 -- MSL 112 (19U 219)
-u00AF 13227,21105,0,1317,1317,790 2 161199 -- MSL 113 (19U 175)
-'Y 13227,24630,0,2553,-2396,790 2 161245 -- MSL 114 (19U 221)
-'y 13227,19725,4350,1986,3579,790 2 161277 -- MSL 115 (19U 253)
-de 13227,19320,0,0,-2636 2 161200 -- MSL 116 (19U 176)
-,C 13227,19320,5325,1524,-11,790 3 161223 -- MSL 117 (19U 199)
-,c 13227,14355,5295,810,261,790 1 161255 -- MSL 118 (19U 231)
-~N 13227,23814,0,3201,882,790 2 161233 -- MSL 119 (19U 209)
-~n 13227,18873,0,1833,774,790 2 161265 -- MSL 120 (19U 241)
-r! 13227,14271,5049,0,-1646 1 161185 -- MSL 121 (19U 161)
-r? 13227,14214,5436,0,-125 1 161215 -- MSL 122 (19U 191)
-Cs 13227,15684,0,1425,528,790 0 161188 -- MSL 123 (19U 164)
-Po 13227,19320,330,2433,234,790 2 161187 -- MSL 124 (19U 163)
-Ye 13227,18990,0,2712,-1055,790 2 161189 -- MSL 125 (19U 165)
-sc 13227,19320,1344,66,-890,66 2 161191 -- MSL 126 (19U 167)
-Fn 13227,19335,3540,231,-491,231 2 161155 -- MSL 127 (19U 131)
-ct 13227,19320,330,891,-779,790 2 161186 -- MSL 128 (19U 162)
-^a 13227,19905,330,1089,105,790 2 161250 -- MSL 129 (19U 226)
-^e 13227,19905,330,1089,303,790 2 161258 -- MSL 130 (19U 234)
-^o 13227,19905,330,1089,252,790 2 161268 -- MSL 131 (19U 244)
-^u 13227,19905,330,1089,249,790 2 161275 -- MSL 132 (19U 251)
-'a 13227,19725,330,753,105,753 2 161249 -- MSL 133 (19U 225)
-'e 13227,19725,330,753,303,753 2 161257 -- MSL 134 (19U 233)
-'o 13227,19725,330,753,252,753 2 161267 -- MSL 135 (19U 243)
-'u 13227,19725,330,753,249,753 2 161274 -- MSL 136 (19U 250)
-`a 13227,19725,330,0,105 2 161248 -- MSL 137 (19U 224)
-`e 13227,19725,330,387,303,387 2 161256 -- MSL 138 (19U 232)
-`o 13227,19725,330,372,252,372 2 161266 -- MSL 139 (19U 242)
-`u 13227,19725,330,714,249,714 2 161273 -- MSL 140 (19U 249)
-:a 13227,18195,330,0,105 2 161252 -- MSL 141 (19U 228)
-:e 13227,18195,330,387,303,387 2 161259 -- MSL 142 (19U 235)
-:o 13227,18195,330,372,252,372 2 161270 -- MSL 143 (19U 246)
-:u 13227,18195,330,714,249,714 2 161276 -- MSL 144 (19U 252)
-oA 13227,24810,0,0,2541 2 161221 -- MSL 145 (19U 197)
-^i 13227,19905,0,0,-1916 2 161262 -- MSL 146 (19U 238)
-/O 13227,19320,342,2895,1743,790 2 161240 -- MSL 147 (19U 216)
-AE 13227,18990,0,4059,2670,790 2 161222 -- MSL 148 (19U 198)
-oa 13227,19905,330,0,105 2 161253 -- MSL 149 (19U 229)
-'i 13227,19725,0,3,-2318,3 2 161261 -- MSL 150 (19U 237)
-/o 13227,14895,735,1119,1086,790 0 161272 -- MSL 151 (19U 248)
-ae 13227,14355,330,1530,1950,790 0 161254 -- MSL 152 (19U 230)
-:A 13227,23115,0,1143,2541,790 2 161220 -- MSL 153 (19U 196)
-`i 13227,19725,0,0,-2318 2 161260 -- MSL 154 (19U 236)
-:O 13227,23115,330,1485,273,790 2 161238 -- MSL 155 (19U 214)
-:U 13227,23115,330,2220,108,790 2 161244 -- MSL 156 (19U 220)
-'E 13227,24630,0,1995,642,790 2 161225 -- MSL 157 (19U 201)
-:i 13227,18195,0,0,-2318 2 161263 -- MSL 158 (19U 239)
-ss 13227,19335,330,570,270,570 2 161247 -- MSL 159 (19U 223)
-^O 13227,24810,330,2133,273,790 2 161236 -- MSL 160 (19U 212)
-'A 13227,24630,0,1389,2541,790 2 161217 -- MSL 161 (19U 193)
-~A 13227,23814,0,3201,2541,790 2 161219 -- MSL 162 (19U 195)
-~a 13227,18873,330,1833,105,790 2 161251 -- MSL 163 (19U 227)
--D 13227,18990,0,1389,963,790 2 161232 -- MSL 164 (19U 208)
-Sd 13227,19545,330,192,237,192 2 161264 -- MSL 165 (19U 240)
-'I 13227,24630,0,1389,-662,790 2 161229 -- MSL 166 (19U 205)
-`I 13227,24630,0,558,-662,558 2 161228 -- MSL 167 (19U 204)
-'O 13227,24630,330,1485,273,790 2 161235 -- MSL 168 (19U 211)
-`O 13227,24630,330,1485,273,790 2 161234 -- MSL 169 (19U 210)
-~O 13227,23814,330,3201,273,790 2 161237 -- MSL 170 (19U 213)
-~o 13227,18873,330,1833,252,790 2 161269 -- MSL 171 (19U 245)
-vS 13227,24810,330,2433,1134,790 2 161162 -- MSL 172 (19U 138)
-vs 13227,19905,330,1539,480,790 2 161178 -- MSL 173 (19U 154)
-'U 13227,24630,330,2220,108,790 2 161242 -- MSL 174 (19U 218)
-:Y 13227,23115,0,2553,-2396,790 2 161183 -- MSL 175 (19U 159)
-:y 13227,18195,4350,1986,3579,790 2 161279 -- MSL 176 (19U 255)
-TP 13227,18990,0,378,771,378 2 161246 -- MSL 177 (19U 222)
-Tp 13227,19545,5475,231,2223,231 3 161278 -- MSL 178 (19U 254)
-mc 13227,14025,4350,765,1659,765 0 161205 -- MSL 180 (19U 181)
-ps 13227,19635,4200,696,-407,696 2 161206 -- MSL 181 (19U 182)
-34 13227,19110,3825,1413,627,790 2 161214 -- MSL 182 (19U 190)
-\- 13227,9945,0,1065,-287,790 0 60096 -- MSL 183 ( 7J 192)
-14 13227,19110,3825,918,873,790 2 161212 -- MSL 184 (19U 188)
-12 13227,19110,3825,1269,1023,790 2 161213 -- MSL 185 (19U 189)
-Of 13227,19320,0,0,-3065 2 161194 -- MSL 186 (19U 170)
-Om 13227,19320,0,0,-3329 2 161210 -- MSL 187 (19U 186)
-Fo 13227,13710,0,2418,1104,790 0 161195 -- MSL 188 (19U 171)
-Fc 13227,13710,0,1107,2415,790 0 161211 -- MSL 190 (19U 187)
-t+- 13227,15075,0,1110,-242,790 0 161201 -- MSL 191 (19U 177)
-bb 13227,19083,5916,0,-4622 3 161190 -- MSL 192 (19U 166)
-co 13227,19635,0,3927,-2189,790 2 161193 -- MSL 193 (19U 169)
-tno 13227,12501,0,1065,-287,790 0 161196 -- MSL 194 (19U 172)
-u00AD 13227,7995,0,0,-2510 0 161197 -- MSL 195 (19U 173)
-rg 13227,19635,0,3927,-2189,790 2 161198 -- MSL 196 (19U 174)
-S2 13227,19110,0,0,-2378 2 161202 -- MSL 197 (19U 178)
-S3 13227,19110,0,0,-2072 2 161203 -- MSL 198 (19U 179)
-ac 13227,0,5295,0,-1199 1 161208 -- MSL 199 (19U 184)
-S1 13227,19110,0,0,-2726 2 161209 -- MSL 200 (19U 185)
-tmu 13227,14814,0,897,-482,790 0 161239 -- MSL 201 (19U 215)
-tdi 13227,14655,0,1104,-251,790 0 161271 -- MSL 202 (19U 247)
-u203C 13227,18990,330,1272,249,790 2 87315 -- MSL 221 (10U 19)
-u20A7 13227,18990,330,3120,2262,790 2 60121 -- MSL 232 ( 7J 217)
-pc 13227,11007,0,0,-4589 0 161207 -- MSL 302 (19U 183)
-u013F 13227,18990,0,255,153,255 2 51943 -- MSL 306 ( 6J 231)
-u0140 13227,19545,0,2202,-1160,790 2 51959 -- MSL 307 ( 6J 247)
-u2113 13227,17964,330,0,-764 2 60122 -- MSL 308 ( 7J 218)
-u0149 13227,19320,0,1437,903,790 2 51951 -- MSL 309 ( 6J 239)
-fm 13227,18990,0,0,-3443 2 60101 -- MSL 310 ( 7J 197)
-sd 13227,18990,0,0,-3443 2 60102 -- MSL 311 ( 7J 198)
-dg 13227,18990,0,0,-2018 2 161158 -- MSL 312 (19U 134)
-tm 13227,17850,0,4395,-2057,790 2 161177 -- MSL 313 (19U 153)
-u2017 13227,0,6588,1317,1317,790 1 60095 -- MSL 314 ( 7J 191)
-ah 13227,19905,0,1539,-3566,790 2 75169 -- MSL 315 ( 9E 161)
-ao 13227,19905,0,0,-5465 2 60152 -- MSL 316 ( 7J 248)
-f/ 13227,15675,777,0,-338 0 60109 -- MSL 324 ( 7J 205)
-em 13227,7710,0,1317,1317,790 0 161175 -- MSL 325 (19U 151)
-en 13227,7710,0,0,-1214 0 161174 -- MSL 326 (19U 150)
-dd 13227,18990,0,0,-1712 2 161159 -- MSL 327 (19U 135)
-.i 13227,14025,0,0,-2318 0 46333 -- MSL 328 ( 5T 253)
-aq 13227,18990,0,0,-6059 2 161063 -- MSL 329 (19U 39)
-bu 13227,12714,0,0,-518 0 161173 -- MSL 331 (19U 149)
-u207F 13227,19110,0,0,-2255 2 87548 -- MSL 332 (10U 252)
-u0111 13227,19545,330,4122,363,790 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13227,24270,0,1980,2541,790 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13227,19350,330,2133,105,790 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13227,18990,4086,0,2541 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13227,14355,4086,0,105 0 75193 -- MSL 405 ( 9E 185)
-'C 13227,24630,330,1524,-11,790 2 75206 -- MSL 406 ( 9E 198)
-'c 13227,19725,330,810,261,790 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13227,24810,330,3333,-11,790 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 13227,19905,330,1839,261,790 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13227,24810,0,1956,1263,790 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 13227,19545,330,4515,801,790 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13227,24810,0,2433,642,790 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13227,19905,330,1539,303,790 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13227,18990,4086,1995,642,790 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13227,14355,4086,387,303,387 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13227,24630,0,1389,153,790 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 13227,24630,0,1089,-3602,790 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13227,19545,0,477,153,477 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 13227,19545,0,3177,-3602,790 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 13227,24630,0,2097,882,790 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13227,19725,0,753,774,753 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 13227,24810,0,2433,882,790 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13227,19905,0,1539,774,790 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13227,24630,330,4149,273,790 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13227,19725,330,3210,252,790 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13227,24630,0,1389,981,790 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 13227,19725,0,753,-80,753 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13227,24810,0,1956,981,790 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 13227,19905,0,1539,-80,790 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13227,24630,330,1608,1134,790 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13227,19725,330,753,480,753 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13227,24810,0,3171,-1430,790 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 13227,19545,330,1293,-932,790 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13227,18990,5325,3171,-437,790 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 13227,18495,5295,0,-932 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13227,24630,330,4149,108,790 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13227,19725,330,3210,249,790 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13227,24810,330,2220,108,790 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13227,19905,330,714,249,714 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 13227,24630,0,1956,1203,790 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13227,19725,0,984,1395,790 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 13227,23115,0,1956,1203,790 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13227,18195,0,984,1395,790 2 75199 -- MSL 485 ( 9E 191)
-u2070 13227,19110,0,0,-3146 2 51753 -- MSL 1000 ( 6J 41)
-u2074 13227,19110,0,0,-2456 2 51748 -- MSL 1001 ( 6J 36)
-u2075 13227,18990,0,0,-2765 2 51749 -- MSL 1002 ( 6J 37)
-u2076 13227,19110,0,0,-3278 2 51806 -- MSL 1003 ( 6J 94)
-u2077 13227,18990,0,0,-3452 2 51750 -- MSL 1004 ( 6J 38)
-u2078 13227,19110,0,0,-2747 2 51754 -- MSL 1005 ( 6J 42)
-u2079 13227,19110,0,0,-2573 2 51752 -- MSL 1006 ( 6J 40)
-lq 13227,19326,0,1812,-4196,790 2 161171 -- MSL 1017 (19U 147)
-rq 13227,19320,0,1512,-3896,790 2 161172 -- MSL 1018 (19U 148)
-Bq 13227,2214,2091,0,-896 0 161156 -- MSL 1019 (19U 132)
-u2003 13227,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13227,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 13227,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 13227,2430,0,0,1536 0 161157 -- MSL 1028 (19U 133)
-vz 13227,19905,0,1539,1395,790 2 75166 -- MSL 1031 ( 9E 158)
-u2120 13227,18000,0,5586,-2075,790 2 128299 -- MSL 1034 (15U 43)
-u211E 13227,18990,3225,624,-551,624 2 51794 -- MSL 1036 ( 6J 82)
-fi 13227,19335,0,1065,-338,790 2 60077 -- MSL 1040 ( 7J 173)
-fl 13227,19335,0,1065,-338,790 2 60078 -- MSL 1041 ( 7J 174)
-ff 13227,19335,0,5175,606,790 2 51883 -- MSL 1042 ( 6J 171)
-Fi 13227,19335,0,3579,1149,790 2 51884 -- MSL 1043 ( 6J 172)
-Fl 13227,19335,0,2703,1155,790 2 51885 -- MSL 1044 ( 6J 173)
-ij 13227,18780,4350,2355,645,790 2 60134 -- MSL 1047 ( 7J 230)
-u2105 13227,18990,0,2211,855,790 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13227,24270,330,2730,519,790 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13227,19350,4350,1683,1053,790 2 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13227,19320,5325,1608,1134,790 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13227,14355,5295,57,480,57 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 13227,23115,0,558,-662,558 2 46301 -- MSL 1065 ( 5T 221)
-bq 13227,2214,2091,0,-2921 0 161154 -- MSL 1067 (19U 130)
-%0 13227,19320,330,1920,4113,790 2 161161 -- MSL 1068 (19U 137)
-a- 13227,18051,0,1086,-3929,790 2 60154 -- MSL 1084 ( 7J 250)
-ab 13227,19350,0,1683,-3296,790 2 75170 -- MSL 1086 ( 9E 162)
-a. 13227,18195,0,0,-6560 2 75263 -- MSL 1088 ( 9E 255)
-oe 13227,14355,330,1629,1671,790 0 161180 -- MSL 1090 (19U 156)
-OE 13227,19320,330,4059,783,790 2 161164 -- MSL 1091 (19U 140)
-fo 13227,13710,0,0,-1181 0 161163 -- MSL 1092 (19U 139)
-fc 13227,13710,0,0,-662 0 161179 -- MSL 1093 (19U 155)
-sq 13227,14106,0,876,876,790 0 60091 -- MSL 1094 ( 7J 187)
-/L 13227,18990,0,0,885 2 75171 -- MSL 1095 ( 9E 163)
-/l 13227,19545,0,0,-2768 2 75187 -- MSL 1096 ( 9E 179)
-a" 13227,19725,0,3210,-3905,790 2 75197 -- MSL 1097 ( 9E 189)
-ho 13227,735,4086,0,-4817 0 75186 -- MSL 1098 ( 9E 178)
-vZ 13227,24810,0,2433,1203,790 2 75150 -- MSL 1106 ( 9E 142)
-IJ 13227,18990,330,2259,3129,790 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/LGR b/contrib/groff/font/devlj4/LGR
deleted file mode 100644
index b1e7f87faf1c..000000000000
--- a/contrib/groff/font/devlj4/LGR
+++ /dev/null
@@ -1,330 +0,0 @@
-# LetterGothic
-name LGR
-spacewidth 13227
-pcltypeface 4102
-pclproportional 0
-pclweight 0
-pclstyle 0
-charset
-! 13227,18990,330 2 161057 -- MSL 1 (19U 33)
-dq 13227,18990 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13227,21309,2451 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13227,19320,372 2 161060 -- MSL 4 (19U 36)
-$ "
-% 13227,19320,330 2 161061 -- MSL 5 (19U 37)
-& 13227,19320,330 2 161062 -- MSL 6 (19U 38)
-cq 13227,19320 2 161170 -- MSL 8 (19U 146)
-' "
-( 13227,19320,1935 2 161064 -- MSL 9 (19U 40)
-) 13227,19320,1935 2 161065 -- MSL 10 (19U 41)
-* 13227,18990 2 161066 -- MSL 11 (19U 42)
-+ 13227,15075 0 161067 -- MSL 12 (19U 43)
-, 13227,2055,2235 0 161068 -- MSL 13 (19U 44)
-hy 13227,7815 0 161069 -- MSL 14 (19U 45)
-- "
-. 13227,2055,330 0 161070 -- MSL 15 (19U 46)
-sl 13227,19545,330 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13227,19320,330 2 161072 -- MSL 17 (19U 48)
-1 13227,19320 2 161073 -- MSL 18 (19U 49)
-2 13227,19320 2 161074 -- MSL 19 (19U 50)
-3 13227,19320,330 2 161075 -- MSL 20 (19U 51)
-4 13227,19320 2 161076 -- MSL 21 (19U 52)
-5 13227,18990,330 2 161077 -- MSL 22 (19U 53)
-6 13227,19320,330 2 161078 -- MSL 23 (19U 54)
-7 13227,18990 2 161079 -- MSL 24 (19U 55)
-8 13227,19320,330 2 161080 -- MSL 25 (19U 56)
-9 13227,19320,330 2 161081 -- MSL 26 (19U 57)
-: 13227,12414,330 0 161082 -- MSL 27 (19U 58)
-; 13227,12414,2235 0 161083 -- MSL 28 (19U 59)
-< 13227,15063 0 161084 -- MSL 29 (19U 60)
-= 13227,11721 0 161085 -- MSL 30 (19U 61)
-> 13227,15063 0 161086 -- MSL 31 (19U 62)
-? 13227,19320,330 2 161087 -- MSL 32 (19U 63)
-at 13227,19320,330 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13227,18990 2 161089 -- MSL 34 (19U 65)
-B 13227,18990 2 161090 -- MSL 35 (19U 66)
-C 13227,19320,330 2 161091 -- MSL 36 (19U 67)
-D 13227,18990 2 161092 -- MSL 37 (19U 68)
-E 13227,18990 2 161093 -- MSL 38 (19U 69)
-F 13227,18990 2 161094 -- MSL 39 (19U 70)
-G 13227,19320,330 2 161095 -- MSL 40 (19U 71)
-H 13227,18990 2 161096 -- MSL 41 (19U 72)
-I 13227,18990 2 161097 -- MSL 42 (19U 73)
-J 13227,18990,330 2 161098 -- MSL 43 (19U 74)
-K 13227,18990 2 161099 -- MSL 44 (19U 75)
-L 13227,18990 2 161100 -- MSL 45 (19U 76)
-M 13227,18990 2 161101 -- MSL 46 (19U 77)
-N 13227,18990 2 161102 -- MSL 47 (19U 78)
-O 13227,19320,330 2 161103 -- MSL 48 (19U 79)
-P 13227,18990 2 161104 -- MSL 49 (19U 80)
-Q 13227,19320,2712 2 161105 -- MSL 50 (19U 81)
-R 13227,18990 2 161106 -- MSL 51 (19U 82)
-S 13227,19320,330 2 161107 -- MSL 52 (19U 83)
-T 13227,18990 2 161108 -- MSL 53 (19U 84)
-U 13227,18990,330 2 161109 -- MSL 54 (19U 85)
-V 13227,18990 2 161110 -- MSL 55 (19U 86)
-W 13227,18990 2 161111 -- MSL 56 (19U 87)
-X 13227,18990 2 161112 -- MSL 57 (19U 88)
-Y 13227,18990 2 161113 -- MSL 58 (19U 89)
-Z 13227,18990 2 161114 -- MSL 59 (19U 90)
-lB 13227,18990,2940 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 13227,19545,330 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 13227,18990,2940 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13227,19758 2 161118 -- MSL 63 (19U 94)
-_ 13227,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 13227,19320 2 161169 -- MSL 66 (19U 145)
-` "
-a 13227,14355,330 0 161121 -- MSL 67 (19U 97)
-b 13227,19545,330 2 161122 -- MSL 68 (19U 98)
-c 13227,14355,330 0 161123 -- MSL 69 (19U 99)
-d 13227,19545,330 2 161124 -- MSL 70 (19U 100)
-e 13227,14355,330 0 161125 -- MSL 71 (19U 101)
-f 13227,19335 2 161126 -- MSL 72 (19U 102)
-g 13227,14355,4350 0 161127 -- MSL 73 (19U 103)
-h 13227,19545 2 161128 -- MSL 74 (19U 104)
-i 13227,18780 2 161129 -- MSL 75 (19U 105)
-j 13227,18780,4350 2 161130 -- MSL 76 (19U 106)
-k 13227,19545 2 161131 -- MSL 77 (19U 107)
-l 13227,19545 2 161132 -- MSL 78 (19U 108)
-m 13227,14355 0 161133 -- MSL 79 (19U 109)
-n 13227,14355 0 161134 -- MSL 80 (19U 110)
-o 13227,14355,330 0 161135 -- MSL 81 (19U 111)
-p 13227,14355,5475 1 161136 -- MSL 82 (19U 112)
-q 13227,14355,5475 1 161137 -- MSL 83 (19U 113)
-r 13227,14355 0 161138 -- MSL 84 (19U 114)
-s 13227,14355,330 0 161139 -- MSL 85 (19U 115)
-t 13227,18495,330 2 161140 -- MSL 86 (19U 116)
-u 13227,14025,330 0 161141 -- MSL 87 (19U 117)
-v 13227,14025 0 161142 -- MSL 88 (19U 118)
-w 13227,14025 0 161143 -- MSL 89 (19U 119)
-x 13227,14025 0 161144 -- MSL 90 (19U 120)
-y 13227,14025,4350 0 161145 -- MSL 91 (19U 121)
-z 13227,14025 0 161146 -- MSL 92 (19U 122)
-{ 13227,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13227,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13227,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 13227,10485 0 161150 -- MSL 96 (19U 126)
-`A 13227,24630 2 161216 -- MSL 99 (19U 192)
-^A 13227,24810 2 161218 -- MSL 100 (19U 194)
-`E 13227,24630 2 161224 -- MSL 101 (19U 200)
-^E 13227,24810 2 161226 -- MSL 102 (19U 202)
-:E 13227,23115 2 161227 -- MSL 103 (19U 203)
-^I 13227,24810 2 161230 -- MSL 104 (19U 206)
-:I 13227,23115 2 161231 -- MSL 105 (19U 207)
-aa 13227,19725 2 161204 -- MSL 106 (19U 180)
-ga 13227,19725 2 161120 -- MSL 107 (19U 96)
-a^ 13227,19905 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13227,18195 2 161192 -- MSL 109 (19U 168)
-~ 13227,18867 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13227,24630,330 2 161241 -- MSL 111 (19U 217)
-^U 13227,24810,330 2 161243 -- MSL 112 (19U 219)
-u00AF 13227,21105 2 161199 -- MSL 113 (19U 175)
-'Y 13227,24630 2 161245 -- MSL 114 (19U 221)
-'y 13227,19725,4350 2 161277 -- MSL 115 (19U 253)
-de 13227,19320 2 161200 -- MSL 116 (19U 176)
-,C 13227,19320,5430 3 161223 -- MSL 117 (19U 199)
-,c 13227,14355,5430 1 161255 -- MSL 118 (19U 231)
-~N 13227,23787 2 161233 -- MSL 119 (19U 209)
-~n 13227,18867 2 161265 -- MSL 120 (19U 241)
-r! 13227,14259,5061 1 161185 -- MSL 121 (19U 161)
-r? 13227,14265,5385 1 161215 -- MSL 122 (19U 191)
-Cs 13227,15684 0 161188 -- MSL 123 (19U 164)
-Po 13227,19320,330 2 161187 -- MSL 124 (19U 163)
-Ye 13227,18990 2 161189 -- MSL 125 (19U 165)
-sc 13227,19320,1344 2 161191 -- MSL 126 (19U 167)
-Fn 13227,19335,3540 2 161155 -- MSL 127 (19U 131)
-ct 13227,19320,330 2 161186 -- MSL 128 (19U 162)
-^a 13227,19905,330 2 161250 -- MSL 129 (19U 226)
-^e 13227,19905,330 2 161258 -- MSL 130 (19U 234)
-^o 13227,19905,330 2 161268 -- MSL 131 (19U 244)
-^u 13227,19905,330 2 161275 -- MSL 132 (19U 251)
-'a 13227,19725,330 2 161249 -- MSL 133 (19U 225)
-'e 13227,19725,330 2 161257 -- MSL 134 (19U 233)
-'o 13227,19725,330 2 161267 -- MSL 135 (19U 243)
-'u 13227,19725,330 2 161274 -- MSL 136 (19U 250)
-`a 13227,19725,330 2 161248 -- MSL 137 (19U 224)
-`e 13227,19725,330 2 161256 -- MSL 138 (19U 232)
-`o 13227,19725,330 2 161266 -- MSL 139 (19U 242)
-`u 13227,19725,330 2 161273 -- MSL 140 (19U 249)
-:a 13227,18195,330 2 161252 -- MSL 141 (19U 228)
-:e 13227,18195,330 2 161259 -- MSL 142 (19U 235)
-:o 13227,18195,330 2 161270 -- MSL 143 (19U 246)
-:u 13227,18195,330 2 161276 -- MSL 144 (19U 252)
-oA 13227,24735 2 161221 -- MSL 145 (19U 197)
-^i 13227,19905 2 161262 -- MSL 146 (19U 238)
-/O 13227,19320,444 2 161240 -- MSL 147 (19U 216)
-AE 13227,18990 2 161222 -- MSL 148 (19U 198)
-oa 13227,19830,330 2 161253 -- MSL 149 (19U 229)
-'i 13227,19725 2 161261 -- MSL 150 (19U 237)
-/o 13227,14805,747 0 161272 -- MSL 151 (19U 248)
-ae 13227,14355,330 0 161254 -- MSL 152 (19U 230)
-:A 13227,23115 2 161220 -- MSL 153 (19U 196)
-`i 13227,19725 2 161260 -- MSL 154 (19U 236)
-:O 13227,23115,330 2 161238 -- MSL 155 (19U 214)
-:U 13227,23115,330 2 161244 -- MSL 156 (19U 220)
-'E 13227,24630 2 161225 -- MSL 157 (19U 201)
-:i 13227,18195 2 161263 -- MSL 158 (19U 239)
-ss 13227,19335,330 2 161247 -- MSL 159 (19U 223)
-^O 13227,24810,330 2 161236 -- MSL 160 (19U 212)
-'A 13227,24630 2 161217 -- MSL 161 (19U 193)
-~A 13227,23787 2 161219 -- MSL 162 (19U 195)
-~a 13227,18867,330 2 161251 -- MSL 163 (19U 227)
--D 13227,18990 2 161232 -- MSL 164 (19U 208)
-Sd 13227,19545,330 2 161264 -- MSL 165 (19U 240)
-'I 13227,24630 2 161229 -- MSL 166 (19U 205)
-`I 13227,24630 2 161228 -- MSL 167 (19U 204)
-'O 13227,24630,330 2 161235 -- MSL 168 (19U 211)
-`O 13227,24630,330 2 161234 -- MSL 169 (19U 210)
-~O 13227,23787,330 2 161237 -- MSL 170 (19U 213)
-~o 13227,18867,330 2 161269 -- MSL 171 (19U 245)
-vS 13227,24810,330 2 161162 -- MSL 172 (19U 138)
-vs 13227,19905,330 2 161178 -- MSL 173 (19U 154)
-'U 13227,24630,330 2 161242 -- MSL 174 (19U 218)
-:Y 13227,23115 2 161183 -- MSL 175 (19U 159)
-:y 13227,18195,4350 2 161279 -- MSL 176 (19U 255)
-TP 13227,18990 2 161246 -- MSL 177 (19U 222)
-Tp 13227,19545,5475 3 161278 -- MSL 178 (19U 254)
-mc 13227,14025,4350 0 161205 -- MSL 180 (19U 181)
-ps 13227,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 13227,19119,3825 2 161214 -- MSL 182 (19U 190)
-\- 13227,9945 0 60096 -- MSL 183 ( 7J 192)
-14 13227,19110,3825 2 161212 -- MSL 184 (19U 188)
-12 13227,19110,3825 2 161213 -- MSL 185 (19U 189)
-Of 13227,19320 2 161194 -- MSL 186 (19U 170)
-Om 13227,19320 2 161210 -- MSL 187 (19U 186)
-Fo 13227,13710 0 161195 -- MSL 188 (19U 171)
-Fc 13227,13710 0 161211 -- MSL 190 (19U 187)
-t+- 13227,15075 0 161201 -- MSL 191 (19U 177)
-bb 13227,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13227,19635 2 161193 -- MSL 193 (19U 169)
-tno 13227,12501 0 161196 -- MSL 194 (19U 172)
-u00AD 13227,7815 0 161197 -- MSL 195 (19U 173)
-rg 13227,19635 2 161198 -- MSL 196 (19U 174)
-S2 13227,19110 2 161202 -- MSL 197 (19U 178)
-S3 13227,19119 2 161203 -- MSL 198 (19U 179)
-ac 13227,0,5430 1 161208 -- MSL 199 (19U 184)
-S1 13227,19110 2 161209 -- MSL 200 (19U 185)
-tmu 13227,14814 0 161239 -- MSL 201 (19U 215)
-tdi 13227,14655 0 161271 -- MSL 202 (19U 247)
-u203C 13227,18990,330 2 87315 -- MSL 221 (10U 19)
-u20A7 13227,18990,330 2 60121 -- MSL 232 ( 7J 217)
-pc 13227,11025 0 161207 -- MSL 302 (19U 183)
-u013F 13227,18990 2 51943 -- MSL 306 ( 6J 231)
-u0140 13227,19545 2 51959 -- MSL 307 ( 6J 247)
-u2113 13227,17964,330 2 60122 -- MSL 308 ( 7J 218)
-u0149 13227,19320 2 51951 -- MSL 309 ( 6J 239)
-fm 13227,18990 2 60101 -- MSL 310 ( 7J 197)
-sd 13227,18990 2 60102 -- MSL 311 ( 7J 198)
-dg 13227,18990 2 161158 -- MSL 312 (19U 134)
-tm 13227,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13227,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 13227,19905 2 75169 -- MSL 315 ( 9E 161)
-ao 13227,19830 2 60152 -- MSL 316 ( 7J 248)
-f/ 13227,15675,858 0 60109 -- MSL 324 ( 7J 205)
-em 13227,7710 0 161175 -- MSL 325 (19U 151)
-en 13227,7710 0 161174 -- MSL 326 (19U 150)
-dd 13227,18990 2 161159 -- MSL 327 (19U 135)
-.i 13227,14025 0 46333 -- MSL 328 ( 5T 253)
-aq 13227,18990 2 161063 -- MSL 329 (19U 39)
-bu 13227,12714 0 161173 -- MSL 331 (19U 149)
-u207F 13227,19110 2 87548 -- MSL 332 (10U 252)
-u0111 13227,19545,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13227,24270 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13227,19350,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13227,18990,4137 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13227,14355,4137 0 75193 -- MSL 405 ( 9E 185)
-'C 13227,24630,330 2 75206 -- MSL 406 ( 9E 198)
-'c 13227,19725,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13227,24810,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 13227,19905,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13227,24810 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 13227,19545,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13227,24810 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13227,19905,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13227,18990,4137 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13227,14355,4137 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13227,24630 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 13227,24630 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13227,19545 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 13227,19545 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 13227,24630 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13227,19725 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 13227,24810 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13227,19905 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13227,24630,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13227,19725,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13227,24630 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 13227,19725 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13227,24810 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 13227,19905 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13227,24630,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13227,19725,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13227,24810 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 13227,19545,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13227,18990,5430 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 13227,18495,5430 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13227,24630,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13227,19725,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13227,24735,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13227,19830,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 13227,24630 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13227,19725 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 13227,23115 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13227,18195 2 75199 -- MSL 485 ( 9E 191)
-u2070 13227,19110 2 51753 -- MSL 1000 ( 6J 41)
-u2074 13227,19110 2 51748 -- MSL 1001 ( 6J 36)
-u2075 13227,18990 2 51749 -- MSL 1002 ( 6J 37)
-u2076 13227,19110 2 51806 -- MSL 1003 ( 6J 94)
-u2077 13227,18990 2 51750 -- MSL 1004 ( 6J 38)
-u2078 13227,19110 2 51754 -- MSL 1005 ( 6J 42)
-u2079 13227,19110 2 51752 -- MSL 1006 ( 6J 40)
-lq 13227,19320 2 161171 -- MSL 1017 (19U 147)
-rq 13227,19320 2 161172 -- MSL 1018 (19U 148)
-Bq 13227,2136,2154 0 161156 -- MSL 1019 (19U 132)
-u2003 13227,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13227,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 13227,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 13227,2055,330 0 161157 -- MSL 1028 (19U 133)
-vz 13227,19905 2 75166 -- MSL 1031 ( 9E 158)
-u2120 13227,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 13227,18990,3225 2 51794 -- MSL 1036 ( 6J 82)
-fi 13227,19335 2 60077 -- MSL 1040 ( 7J 173)
-fl 13227,19335 2 60078 -- MSL 1041 ( 7J 174)
-ff 13227,19335 2 51883 -- MSL 1042 ( 6J 171)
-Fi 13227,19335 2 51884 -- MSL 1043 ( 6J 172)
-Fl 13227,19335 2 51885 -- MSL 1044 ( 6J 173)
-ij 13227,18780,4350 2 60134 -- MSL 1047 ( 7J 230)
-u2105 13227,18990 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13227,24270,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13227,19350,4350 2 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13227,19320,5430 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13227,14355,5430 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 13227,23115 2 46301 -- MSL 1065 ( 5T 221)
-bq 13227,2136,2154 0 161154 -- MSL 1067 (19U 130)
-%0 13227,19320,330 2 161161 -- MSL 1068 (19U 137)
-a- 13227,18078 2 60154 -- MSL 1084 ( 7J 250)
-ab 13227,19350 2 75170 -- MSL 1086 ( 9E 162)
-a. 13227,18195 2 75263 -- MSL 1088 ( 9E 255)
-oe 13227,14355,330 0 161180 -- MSL 1090 (19U 156)
-OE 13227,19320,330 2 161164 -- MSL 1091 (19U 140)
-fo 13227,13710 0 161163 -- MSL 1092 (19U 139)
-fc 13227,13710 0 161179 -- MSL 1093 (19U 155)
-sq 13227,14106 0 60091 -- MSL 1094 ( 7J 187)
-/L 13227,18990 2 75171 -- MSL 1095 ( 9E 163)
-/l 13227,19545 2 75187 -- MSL 1096 ( 9E 179)
-a" 13227,19725 2 75197 -- MSL 1097 ( 9E 189)
-ho 13227,750,4137 0 75186 -- MSL 1098 ( 9E 178)
-vZ 13227,24810 2 75150 -- MSL 1106 ( 9E 142)
-IJ 13227,18990,330 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/MARIGOLD b/contrib/groff/font/devlj4/MARIGOLD
deleted file mode 100644
index a88f188665c4..000000000000
--- a/contrib/groff/font/devlj4/MARIGOLD
+++ /dev/null
@@ -1,331 +0,0 @@
-# Marigold
-name MARIGOLD
-spacewidth 5856
-pcltypeface 4297
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-charset
-! 7806,12570,330 0 161057 -- MSL 1 (19U 33)
-dq 6342,11790 0 161058 -- MSL 2 (19U 34)
-" "
-sh 9759,11610 0 161059 -- MSL 3 (19U 35)
-# "
-Do 9759,14325,3315 0 161060 -- MSL 4 (19U 36)
-$ "
-% 17076,11940,330 0 161061 -- MSL 5 (19U 37)
-& 12684,12120,330 0 161062 -- MSL 6 (19U 38)
-cq 3903,11790 0 161170 -- MSL 8 (19U 146)
-' "
-( 6831,16770,2235 2 161064 -- MSL 9 (19U 40)
-) 6831,16770,2235 2 161065 -- MSL 10 (19U 41)
-* 9759,11940 0 161066 -- MSL 11 (19U 42)
-+ 11709,8445,360 0 161067 -- MSL 12 (19U 43)
-, 5856,1650,4590 0 161068 -- MSL 13 (19U 44)
-hy 6831,6345 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,2535,330 0 161070 -- MSL 15 (19U 46)
-sl 8781,16770,3240 2 161071 -- MSL 16 (19U 47)
-/ "
-0 9759,11940,330 0 161072 -- MSL 17 (19U 48)
-1 9759,11940,60 0 161073 -- MSL 18 (19U 49)
-2 9759,11940,450 0 161074 -- MSL 19 (19U 50)
-3 9759,11940,330 0 161075 -- MSL 20 (19U 51)
-4 9759,11940,1080 0 161076 -- MSL 21 (19U 52)
-5 9759,12060,330 0 161077 -- MSL 22 (19U 53)
-6 9759,12660,330 0 161078 -- MSL 23 (19U 54)
-7 9759,12480,30 0 161079 -- MSL 24 (19U 55)
-8 9759,11940,330 0 161080 -- MSL 25 (19U 56)
-9 9759,11940,1050 0 161081 -- MSL 26 (19U 57)
-: 5856,8475,330 0 161082 -- MSL 27 (19U 58)
-; 5856,8475,4590 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 2 161084 -- MSL 29 (19U 60)
-= 11709,6510 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 2 161086 -- MSL 31 (19U 62)
-? 8295,12120,330 0 161087 -- MSL 32 (19U 63)
-at 18051,12354,3126 0 161088 -- MSL 33 (19U 64)
-@ "
-A 12198,12120,225 0 161089 -- MSL 34 (19U 65)
-B 10734,12120,60 0 161090 -- MSL 35 (19U 66)
-C 10734,12120,330 0 161091 -- MSL 36 (19U 67)
-D 12684,12015,225 0 161092 -- MSL 37 (19U 68)
-E 10245,11910,225 0 161093 -- MSL 38 (19U 69)
-F 9759,12120,60 0 161094 -- MSL 39 (19U 70)
-G 12198,12120,330 0 161095 -- MSL 40 (19U 71)
-H 12198,12015,60 0 161096 -- MSL 41 (19U 72)
-I 6342,11850,60 0 161097 -- MSL 42 (19U 73)
-J 6342,11850,4128 0 161098 -- MSL 43 (19U 74)
-K 12198,11850,60 0 161099 -- MSL 44 (19U 75)
-L 8781,11850,225 0 161100 -- MSL 45 (19U 76)
-M 16101,12120,225 0 161101 -- MSL 46 (19U 77)
-N 13173,12120,330 0 161102 -- MSL 47 (19U 78)
-O 11709,12120,330 0 161103 -- MSL 48 (19U 79)
-P 9759,12120,60 0 161104 -- MSL 49 (19U 80)
-Q 11709,12120,3744 0 161105 -- MSL 50 (19U 81)
-R 11709,12120,330 0 161106 -- MSL 51 (19U 82)
-S 9759,12120,330 0 161107 -- MSL 52 (19U 83)
-T 10245,12120,60 0 161108 -- MSL 53 (19U 84)
-U 12684,11910,330 0 161109 -- MSL 54 (19U 85)
-V 12198,12120,330 0 161110 -- MSL 55 (19U 86)
-W 16101,12120,330 0 161111 -- MSL 56 (19U 87)
-X 12198,11910,120 0 161112 -- MSL 57 (19U 88)
-Y 10734,12120,60 0 161113 -- MSL 58 (19U 89)
-Z 10734,12345,330 0 161114 -- MSL 59 (19U 90)
-lB 6342,16860,1260 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,16770,3240 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 6342,16860,1260 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 0 161119 -- MSL 64 (19U 95)
-oq 3903,11790 0 161169 -- MSL 66 (19U 145)
-` "
-a 8295,10350,330 0 161121 -- MSL 67 (19U 97)
-b 6831,17430,330 2 161122 -- MSL 68 (19U 98)
-c 6342,10350,330 0 161123 -- MSL 69 (19U 99)
-d 7806,17430,330 2 161124 -- MSL 70 (19U 100)
-e 6342,10350,330 0 161125 -- MSL 71 (19U 101)
-f 3903,17430,7950 3 161126 -- MSL 72 (19U 102)
-g 7806,10350,7950 1 161127 -- MSL 73 (19U 103)
-h 8295,17433,330 2 161128 -- MSL 74 (19U 104)
-i 4878,13635,330 0 161129 -- MSL 75 (19U 105)
-j 3903,13635,7950 1 161130 -- MSL 76 (19U 106)
-k 6831,17430,330 2 161131 -- MSL 77 (19U 107)
-l 3903,17430,330 2 161132 -- MSL 78 (19U 108)
-m 11220,10350,330 0 161133 -- MSL 79 (19U 109)
-n 7806,10350,330 0 161134 -- MSL 80 (19U 110)
-o 6831,10350,330 0 161135 -- MSL 81 (19U 111)
-p 7806,10350,7950 1 161136 -- MSL 82 (19U 112)
-q 7317,10575,7950 1 161137 -- MSL 83 (19U 113)
-r 6342,10350 0 161138 -- MSL 84 (19U 114)
-s 5367,10350,330 0 161139 -- MSL 85 (19U 115)
-t 5367,14325,330 0 161140 -- MSL 86 (19U 116)
-u 7806,10350,330 0 161141 -- MSL 87 (19U 117)
-v 7317,10350,330 0 161142 -- MSL 88 (19U 118)
-w 9759,10350,330 0 161143 -- MSL 89 (19U 119)
-x 7317,13590,330 0 161144 -- MSL 90 (19U 120)
-y 7317,10350,7950 1 161145 -- MSL 91 (19U 121)
-z 7317,10350,330 0 161146 -- MSL 92 (19U 122)
-{ 8295,16380,2670 2 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 2 161148 -- MSL 94 (19U 124)
-ba "
-} 8295,16380,2670 2 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 12198,17040,225 2 161216 -- MSL 99 (19U 192)
-^A 12198,17520,225 2 161218 -- MSL 100 (19U 194)
-`E 10245,17040,225 2 161224 -- MSL 101 (19U 200)
-^E 10245,17520,225 2 161226 -- MSL 102 (19U 202)
-:E 10245,16320,225 2 161227 -- MSL 103 (19U 203)
-^I 6342,17520,60 2 161230 -- MSL 104 (19U 206)
-:I 6342,16320,60 2 161231 -- MSL 105 (19U 207)
-aa 11709,15030 0 161204 -- MSL 106 (19U 180)
-ga 11709,15030 0 161120 -- MSL 107 (19U 96)
-a^ 11709,15300 0 161160 -- MSL 108 (19U 136)
-^ "
-ad 11709,14580 0 161192 -- MSL 109 (19U 168)
-~ 11709,13782 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 12684,17040,330 2 161241 -- MSL 111 (19U 217)
-^U 12684,17520,330 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 10734,17040,60 2 161245 -- MSL 114 (19U 221)
-'y 7317,15030,7950 1 161277 -- MSL 115 (19U 253)
-de 7806,11940 0 161200 -- MSL 116 (19U 176)
-,C 10734,12120,4140 0 161223 -- MSL 117 (19U 199)
-,c 6342,10350,4320 0 161255 -- MSL 118 (19U 231)
-~N 13173,15828,330 2 161233 -- MSL 119 (19U 209)
-~n 7806,13782,330 0 161265 -- MSL 120 (19U 241)
-r! 7806,8313,4587 0 161185 -- MSL 121 (19U 161)
-r? 8295,8202,4248 0 161215 -- MSL 122 (19U 191)
-Cs 9759,10668 0 161188 -- MSL 123 (19U 164)
-Po 9759,11940,225 0 161187 -- MSL 124 (19U 163)
-Ye 9759,12165,60 0 161189 -- MSL 125 (19U 165)
-sc 9759,12120,4596 0 161191 -- MSL 126 (19U 167)
-Fn 9759,17430,7950 3 161155 -- MSL 127 (19U 131)
-ct 9759,12516,2580 0 161186 -- MSL 128 (19U 162)
-^a 8295,15300,330 0 161250 -- MSL 129 (19U 226)
-^e 6342,15300,330 0 161258 -- MSL 130 (19U 234)
-^o 6831,15300,330 0 161268 -- MSL 131 (19U 244)
-^u 7806,15300,330 0 161275 -- MSL 132 (19U 251)
-'a 8295,15030,330 0 161249 -- MSL 133 (19U 225)
-'e 6342,15030,330 0 161257 -- MSL 134 (19U 233)
-'o 6831,15030,330 0 161267 -- MSL 135 (19U 243)
-'u 7806,15030,330 0 161274 -- MSL 136 (19U 250)
-`a 8295,15030,330 0 161248 -- MSL 137 (19U 224)
-`e 6342,15030,330 0 161256 -- MSL 138 (19U 232)
-`o 6831,15030,330 0 161266 -- MSL 139 (19U 242)
-`u 7806,15030,330 0 161273 -- MSL 140 (19U 249)
-:a 8295,14580,330 0 161252 -- MSL 141 (19U 228)
-:e 6342,14580,330 0 161259 -- MSL 142 (19U 235)
-:o 6831,14580,330 0 161270 -- MSL 143 (19U 246)
-:u 7806,14580,330 0 161276 -- MSL 144 (19U 252)
-oA 12198,16815,225 2 161221 -- MSL 145 (19U 197)
-^i 4878,15300,330 0 161262 -- MSL 146 (19U 238)
-/O 11709,12849,984 0 161240 -- MSL 147 (19U 216)
-AE 17565,11910,225 0 161222 -- MSL 148 (19U 198)
-oa 8295,14685,330 0 161253 -- MSL 149 (19U 229)
-'i 4878,15030,330 0 161261 -- MSL 150 (19U 237)
-/o 6831,11724,1635 0 161272 -- MSL 151 (19U 248)
-ae 10734,10350,330 0 161254 -- MSL 152 (19U 230)
-:A 12198,16320,225 2 161220 -- MSL 153 (19U 196)
-`i 4878,15030,330 0 161260 -- MSL 154 (19U 236)
-:O 11709,16320,330 2 161238 -- MSL 155 (19U 214)
-:U 12684,16320,330 2 161244 -- MSL 156 (19U 220)
-'E 10245,17040,225 2 161225 -- MSL 157 (19U 201)
-:i 4878,14580,330 0 161263 -- MSL 158 (19U 239)
-ss 9270,18135,7350 3 161247 -- MSL 159 (19U 223)
-^O 11709,17520,330 2 161236 -- MSL 160 (19U 212)
-'A 12198,17040,225 2 161217 -- MSL 161 (19U 193)
-~A 12198,15828,225 2 161219 -- MSL 162 (19U 195)
-~a 8295,13782,330 0 161251 -- MSL 163 (19U 227)
--D 12684,12015,225 0 161232 -- MSL 164 (19U 208)
-Sd 7317,17430,330 2 161264 -- MSL 165 (19U 240)
-'I 6342,17040,60 2 161229 -- MSL 166 (19U 205)
-`I 6342,17040,60 2 161228 -- MSL 167 (19U 204)
-'O 11709,17040,330 2 161235 -- MSL 168 (19U 211)
-`O 11709,17040,330 2 161234 -- MSL 169 (19U 210)
-~O 11709,15828,330 2 161237 -- MSL 170 (19U 213)
-~o 6831,13782,330 0 161269 -- MSL 171 (19U 245)
-vS 9759,17520,330 2 161162 -- MSL 172 (19U 138)
-vs 5367,15330,330 0 161178 -- MSL 173 (19U 154)
-'U 12684,17040,330 2 161242 -- MSL 174 (19U 218)
-:Y 10734,16320,60 2 161183 -- MSL 175 (19U 159)
-:y 7317,14580,7950 1 161279 -- MSL 176 (19U 255)
-TP 9759,11850,60 0 161246 -- MSL 177 (19U 222)
-Tp 7806,17430,7950 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595 0 161205 -- MSL 180 (19U 181)
-ps 11709,12450,4455 0 161206 -- MSL 181 (19U 182)
-34 17076,11940,840 0 161214 -- MSL 182 (19U 190)
-\- 11709,4770 0 60096 -- MSL 183 ( 7J 192)
-14 17076,11940,840 0 161212 -- MSL 184 (19U 188)
-12 17076,11940,330 0 161213 -- MSL 185 (19U 189)
-Of 6342,11940 0 161194 -- MSL 186 (19U 170)
-Om 6342,11940 0 161210 -- MSL 187 (19U 186)
-Fo 9270,8535 0 161195 -- MSL 188 (19U 171)
-Fc 9270,8535 0 161211 -- MSL 190 (19U 187)
-t+- 11709,8445,2595 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 2 161190 -- MSL 192 (19U 166)
-co 7806,15960 2 161193 -- MSL 193 (19U 169)
-tno 11709,6780 0 161196 -- MSL 194 (19U 172)
-u00AD 6831,6345 0 161197 -- MSL 195 (19U 173)
-rg 7806,15960 2 161198 -- MSL 196 (19U 174)
-S2 7317,11850 0 161202 -- MSL 197 (19U 178)
-S3 7317,11850 0 161203 -- MSL 198 (19U 179)
-ac 11709,0,4320 0 161208 -- MSL 199 (19U 184)
-S1 7317,11850 0 161209 -- MSL 200 (19U 185)
-tmu 11709,7815 0 161239 -- MSL 201 (19U 215)
-tdi 11709,8700,360 0 161271 -- MSL 202 (19U 247)
-u203C 12198,12570,330 0 87315 -- MSL 221 (10U 19)
-u20A7 15126,14325,330 0 60121 -- MSL 232 ( 7J 217)
-pc 5856,7662 0 161207 -- MSL 302 (19U 183)
-u013F 8781,11850,225 0 51943 -- MSL 306 ( 6J 231)
-u0140 6831,17430,330 2 51959 -- MSL 307 ( 6J 247)
-u2113 11709,12120,330 0 60122 -- MSL 308 ( 7J 218)
-u0149 11709,11790,330 0 51951 -- MSL 309 ( 6J 239)
-fm 4878,11610 0 60101 -- MSL 310 ( 7J 197)
-sd 7806,11610 0 60102 -- MSL 311 ( 7J 198)
-dg 9759,12315,3795 0 161158 -- MSL 312 (19U 134)
-tm 9759,14445 0 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 0 60095 -- MSL 314 ( 7J 191)
-ah 11709,15330 0 75169 -- MSL 315 ( 9E 161)
-ao 11709,14685 0 60152 -- MSL 316 ( 7J 248)
-f/ 1953,11940,330 0 60109 -- MSL 324 ( 7J 205)
-em 18051,6345 0 161175 -- MSL 325 (19U 151)
-en 11709,6345 0 161174 -- MSL 326 (19U 150)
-dd 9759,12315,3795 0 161159 -- MSL 327 (19U 135)
-.i 4878,10350,330 0 46333 -- MSL 328 ( 5T 253)
-aq 3903,11790 0 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 7806,11850 0 87548 -- MSL 332 (10U 252)
-u0111 7806,17430,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 12198,16650,225 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 8295,14700,330 0 75235 -- MSL 401 ( 9E 227)
-u0041_0328 12198,12120,4332 0 75173 -- MSL 404 ( 9E 165)
-u0061_0328 8295,10350,4410 0 75193 -- MSL 405 ( 9E 185)
-'C 10734,17040,330 2 75206 -- MSL 406 ( 9E 198)
-'c 6342,15030,330 0 75238 -- MSL 407 ( 9E 230)
-u0041_030C 10734,17520,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 6342,15330,330 0 75240 -- MSL 411 ( 9E 232)
-u0044_030C 12684,17520,225 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 10734,17430,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 10245,17520,225 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 6342,15330,330 0 75244 -- MSL 417 ( 9E 236)
-u0045_0328 10245,11910,4332 0 75210 -- MSL 422 ( 9E 202)
-u0065_0328 6342,10350,4410 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 8781,17040,225 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 3903,22008,330 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 8781,11850,225 0 75196 -- MSL 442 ( 9E 188)
-u006C_030C 6831,17430,330 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 13173,17040,330 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 7806,15030,330 0 75249 -- MSL 447 ( 9E 241)
-u004E_030C 13173,17520,330 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 7806,15330,330 0 75250 -- MSL 449 ( 9E 242)
-u004F_030B 11709,17040,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 6831,15030,330 0 75253 -- MSL 453 ( 9E 245)
-u0052_0301 11709,17040,330 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 6342,15030 0 75232 -- MSL 457 ( 9E 224)
-u0052_030C 11709,17520,330 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 6342,15330 0 75256 -- MSL 459 ( 9E 248)
-u0053_0301 9759,17040,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 5367,15030,330 0 75164 -- MSL 463 ( 9E 156)
-u0054_030C 10245,17520,60 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 6831,15330,330 0 75165 -- MSL 467 ( 9E 157)
-u0054_0327 10245,12120,4140 0 75230 -- MSL 468 ( 9E 222)
-u0074_0327 5367,14325,4320 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 12684,17040,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 7806,15030,330 0 75259 -- MSL 475 ( 9E 251)
-u0055_030A 12684,16815,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 7806,14685,330 0 75257 -- MSL 477 ( 9E 249)
-u005A_0301 10734,17040,330 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 7317,15030,330 0 75167 -- MSL 483 ( 9E 159)
-u005A_0307 10734,16320,330 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 7317,14580,330 0 75199 -- MSL 485 ( 9E 191)
-u2070 7317,11850 0 51753 -- MSL 1000 ( 6J 41)
-u2074 7317,11850 0 51748 -- MSL 1001 ( 6J 36)
-u2075 7317,11910 0 51749 -- MSL 1002 ( 6J 37)
-u2076 7317,12270 0 51806 -- MSL 1003 ( 6J 94)
-u2077 7317,11910 0 51750 -- MSL 1004 ( 6J 38)
-u2078 7317,11850 0 51754 -- MSL 1005 ( 6J 42)
-u2079 7317,11850 0 51752 -- MSL 1006 ( 6J 40)
-lq 6342,11790 0 161171 -- MSL 1017 (19U 147)
-rq 6342,11790 0 161172 -- MSL 1018 (19U 148)
-Bq 6342,1650,2550 0 161156 -- MSL 1019 (19U 132)
-u2003 18051,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 11709,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 18051,2415,330 0 161157 -- MSL 1028 (19U 133)
-vz 7317,15330,330 0 75166 -- MSL 1031 ( 9E 158)
-u2120 9759,14595 0 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 7806,17430,7950 3 60077 -- MSL 1040 ( 7J 173)
-fl 7806,17430,7950 3 60078 -- MSL 1041 ( 7J 174)
-ff 7806,17430,7950 3 51883 -- MSL 1042 ( 6J 171)
-Fi 11709,17430,7950 3 51884 -- MSL 1043 ( 6J 172)
-Fl 11709,17430,7950 3 51885 -- MSL 1044 ( 6J 173)
-ij 8781,13635,7950 1 60134 -- MSL 1047 ( 7J 230)
-u2105 13662,12120,330 0 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 12198,16650,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 7806,14700,7950 1 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 9759,12120,4140 0 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 5367,10350,4320 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 6342,16320,60 2 46301 -- MSL 1065 ( 5T 221)
-bq 3903,1650,2550 0 161154 -- MSL 1067 (19U 130)
-%0 22932,11940,330 0 161161 -- MSL 1068 (19U 137)
-a- 11709,13674 0 60154 -- MSL 1084 ( 7J 250)
-ab 11709,14700 0 75170 -- MSL 1086 ( 9E 162)
-a. 11709,14580 0 75263 -- MSL 1088 ( 9E 255)
-oe 10734,10350,330 0 161180 -- MSL 1090 (19U 156)
-OE 16587,12120,330 0 161164 -- MSL 1091 (19U 140)
-fo 5856,8535 0 161163 -- MSL 1092 (19U 139)
-fc 5856,8535 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 8781,11850,225 0 75171 -- MSL 1095 ( 9E 163)
-/l 4878,17430,330 2 75187 -- MSL 1096 ( 9E 179)
-a" 11709,15030 0 75197 -- MSL 1097 ( 9E 189)
-ho 11709,1341,4410 0 75186 -- MSL 1098 ( 9E 178)
-vZ 10734,17520,330 2 75150 -- MSL 1106 ( 9E 142)
-IJ 12684,11850,4128 0 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/Makefile.sub b/contrib/groff/font/devlj4/Makefile.sub
deleted file mode 100644
index 0ad3f4da602d..000000000000
--- a/contrib/groff/font/devlj4/Makefile.sub
+++ /dev/null
@@ -1,41 +0,0 @@
-DEV=lj4
-LJ4RES=1200
-LJ4PRINT=$(PSPRINT)
-DEVFILES=DESC \
- AB ABI AI AR \
- ALBB ALBR \
- AOB AOI AOR \
- CB CBI CI CR \
- GB GBI GI GR \
- LGB LGI LGR \
- OB OBI OI OR \
- TB TBI TI TR \
- TNRB TNRBI TNRI TNRR \
- UB UBI UI UR \
- UCB UCBI UCI UCR \
- CLARENDON CORONET MARIGOLD S \
- SYMBOL WINGDINGS \
- generate/Makefile \
- generate/special.map \
- generate/symbol.map \
- generate/text.map \
- generate/wingdings.map \
- generate/special.awk
-
-CLEANADD=DESC
-
-DESC: DESC.in
- -rm -f DESC
- echo "res $(LJ4RES)" >DESC
- echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>DESC
- cat $(srcdir)/DESC.in >>DESC
- if test "$(PAGE)" = A4; then \
- echo "papersize a4" >>DESC; \
- else \
- echo "papersize letter" >>DESC; \
- fi
- test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>DESC
-
-fonts:
- $(MAKE) -f $(srcdir)/generate/Makefile srcdir=$(srcdir)/generate \
- HPFTODIT=$(top_builddir)/src/utils/hpftodit/hpftodit
diff --git a/contrib/groff/font/devlj4/OB b/contrib/groff/font/devlj4/OB
deleted file mode 100644
index c0f99ec9471b..000000000000
--- a/contrib/groff/font/devlj4/OB
+++ /dev/null
@@ -1,784 +0,0 @@
-# CG Omega Bd
-name OB
-spacewidth 7317
-pcltypeface 4113
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -3902
-P , -3902
-V A -3902
-A V -3902
-T o -2924
-T r -1949
-T c -2924
-T e -2924
-T d -2924
-T s -2438
-T y -2924
-T a -2924
-T w -2924
-T u -2924
-L T -1949
-L Y -2924
-Y o -3902
-Y e -3902
-Y a -3902
-A W -3413
-W A -3413
-T A -1949
-V o -2924
-V e -2924
-V a -2924
-Y A -3902
-F A -2924
-F . -3902
-F , -3902
-A T -1949
-A Y -3902
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -1949
-T , -1949
-L W -2924
-P A -2924
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2438
-W e -2438
-W a -2438
-W . -3413
-W , -3413
-r . -2438
-r , -2438
-w . -2438
-w , -2438
-Y u -2438
-A v -2438
-A y -2438
-A w -1460
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -1460
-O V -1460
-O Y -1460
-O . -1460
-O , -1460
-L y -2438
-L O -1460
-L G -1949
-L C -1949
-L Q -1949
-V y -1460
-V u -1460
-V O -1460
-V G -1460
-V C -1460
-V Q -1460
-D T -1949
-D V -1460
-D Y -1949
-D . -1949
-D , -1949
-Y O -1460
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -1460
-F e -1460
-F a -1460
-c . -485
-c , -485
-O A -1460
-O W -974
-L U -1949
-R T -974
-R V -974
-R Y -974
-R W -974
-G T -974
-P o -1460
-P g -974
-P e -1460
-P a -1460
-C A -485
-C . -485
-C , -485
-D A -1460
-D W -974
-B T -974
-B Y -974
-B . -974
-B , -974
-A O -1460
-A G -1460
-A C -1460
-A U -1460
-A Q -1460
-W r -974
-W y -974
-W u -974
-W O -974
-W G -974
-W C -974
-W Q -974
-J A -974
-J . -974
-J , -974
-U A -1460
-U . -1949
-U , -1949
-Q A -1460
-Q W -974
-f . -485
-f , -485
-T O -1460
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -1460
-L e -1460
-L q -1460
-G V -974
-G Y -974
-G W -974
-G . -485
-G , -485
-C T -485
-C V -485
-C Y -485
-D X -1460
-B V -974
-B X -974
-B A -974
-B W -974
-S . -974
-S , -974
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -1460
-Q X -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -974
-o x -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -485
-g . -485
-g , -485
-p v -974
-p y -974
-p x -974
-c v -485
-c y -485
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -974
-e y -974
-b v -974
-b y -974
-s . -974
-s , -974
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-f g -485
-x o -974
-x g -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -974
-a y -974
-T i -974
-T S -974
-L a -974
-L S -485
-G X -485
-G A -485
-P s -974
-C X -485
-C W -485
-V i -974
-V S -974
-S T -485
-S V -485
-S Y -485
-S X -485
-S A -974
-S W -485
-Y i -974
-Y S -974
-X a -974
-X u -974
-X S -485
-A t -974
-A g -974
-A c -1460
-A d -1460
-A a -974
-A u -974
-A q -1460
-A S -485
-W i -974
-W S -974
-K c -1460
-K u -974
-K S -485
-t g -485
-o f -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-p f -485
-c f -485
-c x -485
-v e -974
-v s -974
-e f -485
-e x -974
-b f -485
-s v -485
-s y -485
-s f -485
-s x -485
-y e -974
-y s -974
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-k o -485
-k g -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -485
-L J -1460
-G Z -485
-P M -485
-C Z -485
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-A s -485
-A J -1460
-J o -485
-J e -485
-J a -485
-J M -485
-K a -974
-K J -485
-t o -485
-t c -485
-t e -485
-t d -485
-t s -485
-t a -485
-t q -485
-o z -485
-h f -485
-n f -485
-m f -485
-r s -485
-p z -485
-c z -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-b z -485
-s z -485
-a f -485
-k t -485
-k s -485
-k f -485
-k u -485
-F M -485
-A f -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -2924
-L ' -2924
-T hy -2924
-T - -2924
-T en -2924
-T em -2924
-A cq -3413
-A ' -3413
-hy T -2924
-- T -2924
-en T -2924
-em T -2924
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -1460
-p ' -1460
-c cq -485
-c ' -485
-e cq -974
-e ' -974
-b cq -1460
-b ' -1460
-a cq -974
-a ' -974
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -1460
-' d -1460
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-K cq -485
-K ' -485
-t g -485
-b f -485
-k cq -485
-k ' -485
-M cq -485
-M ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-cq M -485
-' M -485
-k hy -485
-k - -485
-k en -485
-k em -485
-charset
-! 7317,18000,375 2 161057 -- MSL 1 (19U 33)
-dq 12198,18375 2 161058 -- MSL 2 (19U 34)
-" "
-sh 14637,18069,444 2 161059 -- MSL 3 (19U 35)
-# "
-Do 14637,19755,2988 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,17769,444 2 161061 -- MSL 5 (19U 37)
-& 19029,17997,375 2 161062 -- MSL 6 (19U 38)
-cq 7317,18375 2 161170 -- MSL 8 (19U 146)
-' "
-( 7317,18375,3165 2 161064 -- MSL 9 (19U 40)
-) 7317,18375,3165 2 161065 -- MSL 10 (19U 41)
-* 14637,18150 2 161066 -- MSL 11 (19U 42)
-+ 23418,13164,534 0 161067 -- MSL 12 (19U 43)
-, 7317,4068,4902 0 161068 -- MSL 13 (19U 44)
-hy 7317,8307 0 161069 -- MSL 14 (19U 45)
-- "
-. 7317,3975,375 0 161070 -- MSL 15 (19U 46)
-sl 7317,19650,525 2 161071 -- MSL 16 (19U 47)
-/ "
-0 14637,17700,375 0 161072 -- MSL 17 (19U 48)
-1 14637,17700,69 0 161073 -- MSL 18 (19U 49)
-2 14637,17700,201 0 161074 -- MSL 19 (19U 50)
-3 14637,17700,375 0 161075 -- MSL 20 (19U 51)
-4 14637,17394,69 0 161076 -- MSL 21 (19U 52)
-5 14637,17526,375 0 161077 -- MSL 22 (19U 53)
-6 14637,17700,375 0 161078 -- MSL 23 (19U 54)
-7 14637,17526,69 0 161079 -- MSL 24 (19U 55)
-8 14637,17700,375 0 161080 -- MSL 25 (19U 56)
-9 14637,17700,375 0 161081 -- MSL 26 (19U 57)
-: 7317,12057,375 0 161082 -- MSL 27 (19U 58)
-; 7317,12057,4902 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 23418,9639 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 11709,18000,375 2 161087 -- MSL 32 (19U 63)
-at 23418,16950,4131 0 161088 -- MSL 33 (19U 64)
-@ "
-A 17565,18069,69 2 161089 -- MSL 34 (19U 65)
-B 16101,18069,69 2 161090 -- MSL 35 (19U 66)
-C 17565,18375,375 2 161091 -- MSL 36 (19U 67)
-D 20490,18201,201 2 161092 -- MSL 37 (19U 68)
-E 13173,18201,201 2 161093 -- MSL 38 (19U 69)
-F 13173,18201,69 2 161094 -- MSL 39 (19U 70)
-G 20490,18375,375 2 161095 -- MSL 40 (19U 71)
-H 20490,18069,69 2 161096 -- MSL 41 (19U 72)
-I 8781,18069,69 2 161097 -- MSL 42 (19U 73)
-J 8781,18069,4218 2 161098 -- MSL 43 (19U 74)
-K 16587,18069,69 2 161099 -- MSL 44 (19U 75)
-L 13173,18069,201 2 161100 -- MSL 45 (19U 76)
-M 23418,18069,69 2 161101 -- MSL 46 (19U 77)
-N 20490,18069,69 2 161102 -- MSL 47 (19U 78)
-O 21954,18375,375 2 161103 -- MSL 48 (19U 79)
-P 15126,18069,69 2 161104 -- MSL 49 (19U 80)
-Q 21954,18375,5223 3 161105 -- MSL 50 (19U 81)
-R 16101,18069,69 2 161106 -- MSL 51 (19U 82)
-S 13173,18375,375 2 161107 -- MSL 52 (19U 83)
-T 14637,18201,69 2 161108 -- MSL 53 (19U 84)
-U 20490,18069,375 2 161109 -- MSL 54 (19U 85)
-V 17565,18069,69 2 161110 -- MSL 55 (19U 86)
-W 26346,18069,69 2 161111 -- MSL 56 (19U 87)
-X 16101,18069,69 2 161112 -- MSL 57 (19U 88)
-Y 16101,18069,69 2 161113 -- MSL 58 (19U 89)
-Z 16101,18201,201 2 161114 -- MSL 59 (19U 90)
-lB 7317,18201,4701 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 7317,19650,525 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7317,18201,4701 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 7317,18375 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12840,375 0 161121 -- MSL 67 (19U 97)
-b 14637,19569,375 2 161122 -- MSL 68 (19U 98)
-c 13173,12840,375 0 161123 -- MSL 69 (19U 99)
-d 14637,19569,375 2 161124 -- MSL 70 (19U 100)
-e 13173,12840,375 0 161125 -- MSL 71 (19U 101)
-f 8781,19710,69 2 161126 -- MSL 72 (19U 102)
-g 13173,12840,5400 1 161127 -- MSL 73 (19U 103)
-h 14637,19569,69 2 161128 -- MSL 74 (19U 104)
-i 7317,19332,69 2 161129 -- MSL 75 (19U 105)
-j 7317,19332,5400 3 161130 -- MSL 76 (19U 106)
-k 13173,19569,69 2 161131 -- MSL 77 (19U 107)
-l 7317,19569,69 2 161132 -- MSL 78 (19U 108)
-m 21954,12900,69 0 161133 -- MSL 79 (19U 109)
-n 14637,12840,69 0 161134 -- MSL 80 (19U 110)
-o 14637,12840,375 0 161135 -- MSL 81 (19U 111)
-p 14637,12840,5469 1 161136 -- MSL 82 (19U 112)
-q 14637,12840,5469 1 161137 -- MSL 83 (19U 113)
-r 10245,12780,69 0 161138 -- MSL 84 (19U 114)
-s 10245,12840,375 0 161139 -- MSL 85 (19U 115)
-t 8781,17100,375 0 161140 -- MSL 86 (19U 116)
-u 14637,12534,375 0 161141 -- MSL 87 (19U 117)
-v 13173,12534,69 0 161142 -- MSL 88 (19U 118)
-w 20490,12534,69 0 161143 -- MSL 89 (19U 119)
-x 13173,12534,69 0 161144 -- MSL 90 (19U 120)
-y 13173,12534,5439 1 161145 -- MSL 91 (19U 121)
-z 13173,12666,201 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 17565,24537,69 2 161216 -- MSL 99 (19U 192)
-^A 17565,24273,69 2 161218 -- MSL 100 (19U 194)
-`E 13173,24537,201 2 161224 -- MSL 101 (19U 200)
-^E 13173,24273,201 2 161226 -- MSL 102 (19U 202)
-:E 13173,23301,201 2 161227 -- MSL 103 (19U 203)
-^I 8781,24273,69 2 161230 -- MSL 104 (19U 206)
-:I 8781,23301,69 2 161231 -- MSL 105 (19U 207)
-aa 14637,18843 2 161204 -- MSL 106 (19U 180)
-ga 14637,18843 2 161120 -- MSL 107 (19U 96)
-a^ 14637,18738 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 14637,17694 0 161192 -- MSL 109 (19U 168)
-~ 14637,17694 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20490,24537,375 2 161241 -- MSL 111 (19U 217)
-^U 20490,24273,375 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 16101,24537,69 2 161245 -- MSL 114 (19U 221)
-'y 13173,18843,5439 3 161277 -- MSL 115 (19U 253)
-de 14637,17700 0 161200 -- MSL 116 (19U 176)
-,C 17565,18375,6663 3 161223 -- MSL 117 (19U 199)
-,c 13173,12840,5469 1 161255 -- MSL 118 (19U 231)
-~N 20490,23031,69 2 161233 -- MSL 119 (19U 209)
-~n 14637,17694,69 0 161265 -- MSL 120 (19U 241)
-r! 7317,12906,5469 1 161185 -- MSL 121 (19U 161)
-r? 11709,12906,5469 1 161215 -- MSL 122 (19U 191)
-Cs 14637,15834 0 161188 -- MSL 123 (19U 164)
-Po 14637,17700,201 0 161187 -- MSL 124 (19U 163)
-Ye 14637,17769,69 2 161189 -- MSL 125 (19U 165)
-sc 14637,18000,1383 2 161191 -- MSL 126 (19U 167)
-Fn 14637,19710,69 2 161155 -- MSL 127 (19U 131)
-ct 14637,19788,135 2 161186 -- MSL 128 (19U 162)
-^a 13173,18738,375 2 161250 -- MSL 129 (19U 226)
-^e 13173,18738,375 2 161258 -- MSL 130 (19U 234)
-^o 14637,18738,375 2 161268 -- MSL 131 (19U 244)
-^u 14637,18738,375 2 161275 -- MSL 132 (19U 251)
-'a 13173,18843,375 2 161249 -- MSL 133 (19U 225)
-'e 13173,18843,375 2 161257 -- MSL 134 (19U 233)
-'o 14637,18843,375 2 161267 -- MSL 135 (19U 243)
-'u 14637,18843,375 2 161274 -- MSL 136 (19U 250)
-`a 13173,18843,375 2 161248 -- MSL 137 (19U 224)
-`e 13173,18843,375 2 161256 -- MSL 138 (19U 232)
-`o 14637,18843,375 2 161266 -- MSL 139 (19U 242)
-`u 14637,18843,375 2 161273 -- MSL 140 (19U 249)
-:a 13173,17694,375 0 161252 -- MSL 141 (19U 228)
-:e 13173,17694,375 0 161259 -- MSL 142 (19U 235)
-:o 14637,17694,375 0 161270 -- MSL 143 (19U 246)
-:u 14637,17694,375 0 161276 -- MSL 144 (19U 252)
-oA 17565,25002,69 2 161221 -- MSL 145 (19U 197)
-^i 7317,18738,69 2 161262 -- MSL 146 (19U 238)
-/O 21954,18375,375 2 161240 -- MSL 147 (19U 216)
-AE 22932,18201,201 2 161222 -- MSL 148 (19U 198)
-oa 13173,18684,375 2 161253 -- MSL 149 (19U 229)
-'i 7317,18843,69 2 161261 -- MSL 150 (19U 237)
-/o 14637,12849,402 0 161272 -- MSL 151 (19U 248)
-ae 20004,12840,375 0 161254 -- MSL 152 (19U 230)
-:A 17565,23301,69 2 161220 -- MSL 153 (19U 196)
-`i 7317,18843,69 2 161260 -- MSL 154 (19U 236)
-:O 21954,23301,375 2 161238 -- MSL 155 (19U 214)
-:U 20490,23301,375 2 161244 -- MSL 156 (19U 220)
-'E 13173,24537,201 2 161225 -- MSL 157 (19U 201)
-:i 7317,17694,69 0 161263 -- MSL 158 (19U 239)
-ss 14637,19710,375 2 161247 -- MSL 159 (19U 223)
-^O 21954,24273,375 2 161236 -- MSL 160 (19U 212)
-'A 17565,24537,69 2 161217 -- MSL 161 (19U 193)
-~A 17565,23031,69 2 161219 -- MSL 162 (19U 195)
-~a 13173,17694,375 0 161251 -- MSL 163 (19U 227)
--D 20490,18201,201 2 161232 -- MSL 164 (19U 208)
-Sd 14637,19503,375 2 161264 -- MSL 165 (19U 240)
-'I 8781,24537,69 2 161229 -- MSL 166 (19U 205)
-`I 8781,24537,69 2 161228 -- MSL 167 (19U 204)
-'O 21954,24537,375 2 161235 -- MSL 168 (19U 211)
-`O 21954,24537,375 2 161234 -- MSL 169 (19U 210)
-~O 21954,23031,375 2 161237 -- MSL 170 (19U 213)
-~o 14637,17694,375 0 161269 -- MSL 171 (19U 245)
-vS 13173,24273,375 2 161162 -- MSL 172 (19U 138)
-vs 10245,18738,375 2 161178 -- MSL 173 (19U 154)
-'U 20490,24537,375 2 161242 -- MSL 174 (19U 218)
-:Y 16101,23301,69 2 161183 -- MSL 175 (19U 159)
-:y 13173,17694,5439 1 161279 -- MSL 176 (19U 255)
-TP 15126,18069,69 2 161246 -- MSL 177 (19U 222)
-Tp 14637,19569,5469 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680 0 161205 -- MSL 180 (19U 181)
-ps 14637,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 23418,17700,444 0 161214 -- MSL 182 (19U 190)
-\- 23418,7455 0 60096 -- MSL 183 ( 7J 192)
-14 23418,18099,444 2 161212 -- MSL 184 (19U 188)
-12 23418,18099,444 2 161213 -- MSL 185 (19U 189)
-Of 9759,17700 0 161194 -- MSL 186 (19U 170)
-Om 9759,17700 0 161210 -- MSL 187 (19U 186)
-Fo 11709,11028 0 161195 -- MSL 188 (19U 171)
-Fc 11709,11028 0 161211 -- MSL 190 (19U 187)
-t+- 23418,13164,4314 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 23418,10770 0 161196 -- MSL 194 (19U 172)
-u00AD 7317,8307 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 9759,17700 0 161202 -- MSL 197 (19U 178)
-S3 9759,17700 0 161203 -- MSL 198 (19U 179)
-ac 14637,0,5469 1 161208 -- MSL 199 (19U 184)
-S1 9759,18099 2 161209 -- MSL 200 (19U 185)
-tmu 23418,13107,567 0 161239 -- MSL 201 (19U 215)
-tdi 23418,13017,387 0 161271 -- MSL 202 (19U 247)
-u203C 14637,18000,375 2 87315 -- MSL 221 (10U 19)
-u20A7 23907,18069,375 2 60121 -- MSL 232 ( 7J 217)
-pc 7317,11274 0 161207 -- MSL 302 (19U 183)
-u013F 13173,18069,201 2 51943 -- MSL 306 ( 6J 231)
-u0140 10245,19569,69 2 51959 -- MSL 307 ( 6J 247)
-u2113 14637,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 20979,18375,69 2 51951 -- MSL 309 ( 6J 239)
-fm 7317,18096 2 60101 -- MSL 310 ( 7J 197)
-sd 14637,18096 2 60102 -- MSL 311 ( 7J 198)
-dg 14637,18201,426 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 14637,18738 2 75169 -- MSL 315 ( 9E 161)
-ao 14637,18684 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,17544,444 0 60109 -- MSL 324 ( 7J 205)
-em 23418,8085 0 161175 -- MSL 325 (19U 151)
-en 14637,8085 0 161174 -- MSL 326 (19U 150)
-dd 14637,18201,426 2 161159 -- MSL 327 (19U 135)
-.i 7317,12534,69 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18375 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 9759,17700 0 87548 -- MSL 332 (10U 252)
-u0111 14637,19569,375 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 17565,23988,69 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18525,375 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 17565,18069,4134 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12840,3774 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,24537,375 2 75206 -- MSL 406 ( 9E 198)
-'c 13173,18843,375 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,24273,375 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 13173,18738,375 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,24273,201 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 18051,19710,375 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13173,24273,201 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13173,18738,375 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13173,18201,4134 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13173,12840,3774 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13173,24537,201 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25578,69 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13173,18516,201 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10245,19710,69 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20490,24537,69 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,18843,69 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20490,24273,69 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,18738,69 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 21954,24537,375 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14637,18843,375 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16101,24537,69 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,18843,69 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16101,24273,69 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,18738,69 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,24537,375 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18843,375 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,24273,69 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10245,19710,375 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,18201,6663 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8781,17100,5469 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20490,24537,375 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,18843,375 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20490,25002,375 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,18684,375 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,24537,201 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13173,18843,201 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,24342,201 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13173,18792,201 2 75199 -- MSL 485 ( 9E 191)
-u2070 9759,17700 0 51753 -- MSL 1000 ( 6J 41)
-u2074 9759,17544 0 51748 -- MSL 1001 ( 6J 36)
-u2075 9759,17676 0 51749 -- MSL 1002 ( 6J 37)
-u2076 9759,17700 0 51806 -- MSL 1003 ( 6J 94)
-u2077 9759,17676 0 51750 -- MSL 1004 ( 6J 38)
-u2078 9759,17700 0 51754 -- MSL 1005 ( 6J 42)
-u2079 9759,17700 0 51752 -- MSL 1006 ( 6J 40)
-lq 12198,18330 2 161171 -- MSL 1017 (19U 147)
-rq 12198,18375 2 161172 -- MSL 1018 (19U 148)
-Bq 12198,4095,4371 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 14637,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7317,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,3729 0 161157 -- MSL 1028 (19U 133)
-vz 13173,18738,201 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 15126,19710,69 2 60077 -- MSL 1040 ( 7J 173)
-fl 15126,19710,69 2 60078 -- MSL 1041 ( 7J 174)
-ff 16587,19710,69 2 51883 -- MSL 1042 ( 6J 171)
-Fi 22932,19710,69 2 51884 -- MSL 1043 ( 6J 172)
-Fl 22932,19710,69 2 51885 -- MSL 1044 ( 6J 173)
-ij 14637,19332,5400 3 60134 -- MSL 1047 ( 7J 230)
-u2105 25371,19656,300 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,23988,375 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18525,5400 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18375,6663 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12840,5469 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,24342,69 2 46301 -- MSL 1065 ( 5T 221)
-bq 7317,4095,4371 0 161154 -- MSL 1067 (19U 130)
-%0 33177,17769,444 2 161161 -- MSL 1068 (19U 137)
-a- 14637,16722 0 60154 -- MSL 1084 ( 7J 250)
-ab 14637,18525 2 75170 -- MSL 1086 ( 9E 162)
-a. 14637,18792 2 75263 -- MSL 1088 ( 9E 255)
-oe 22443,12840,375 0 161180 -- MSL 1090 (19U 156)
-OE 24882,18375,375 2 161164 -- MSL 1091 (19U 140)
-fo 7317,11028 0 161163 -- MSL 1092 (19U 139)
-fc 7317,11028 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 13173,18069,201 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,19569,69 2 75187 -- MSL 1096 ( 9E 179)
-a" 14637,18843 2 75197 -- MSL 1097 ( 9E 189)
-ho 14637,654,3774 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,24273,201 2 75150 -- MSL 1106 ( 9E 142)
-IJ 17565,18069,4218 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/OBI b/contrib/groff/font/devlj4/OBI
deleted file mode 100644
index be1fa3d304bb..000000000000
--- a/contrib/groff/font/devlj4/OBI
+++ /dev/null
@@ -1,776 +0,0 @@
-# CG Omega BdIt
-name OBI
-spacewidth 7317
-slant 12.350000
-pcltypeface 4113
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -3902
-P , -3902
-V A -3902
-A V -4388
-T o -2438
-T r -2438
-T c -2438
-T e -2438
-T d -2438
-T s -2438
-T y -2438
-T a -2438
-T w -2438
-T u -2438
-L T -2438
-L Y -2438
-Y o -3902
-Y e -3413
-Y a -3902
-A W -3902
-W A -3413
-T A -2438
-V o -2924
-V e -2438
-V a -2924
-Y A -3902
-F A -1460
-F . -3902
-F , -3902
-A T -2924
-A Y -4388
-v . -2924
-v , -2924
-y . -2924
-y , -2924
-T . -2438
-T , -2438
-L W -2438
-P A -1949
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2438
-W e -1949
-W a -2438
-W . -3413
-W , -3413
-r . -2438
-r , -2438
-w . -2924
-w , -2924
-Y u -2438
-A v -2924
-A y -2924
-A w -2924
-o . -974
-o , -974
-p . -974
-p , -974
-e . -485
-e , -485
-b . -974
-b , -974
-O T -2438
-O V -1949
-O Y -2438
-O . -1949
-O , -1949
-L y -2438
-L O -2438
-L G -2438
-L C -2438
-L Q -2438
-V y -1460
-V u -1460
-V O -1460
-V G -1460
-V C -1460
-V Q -1460
-D T -2438
-D V -1949
-D Y -2438
-D . -1949
-D , -1949
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -485
-F e -485
-F a -485
-c . -485
-c , -485
-O A -974
-O W -1460
-L U -2438
-R T -485
-R V -485
-R Y -485
-R W -485
-G T -974
-P o -974
-P g -974
-P e -974
-P a -974
-C A -485
-C . -485
-C , -485
-D A -974
-D W -1460
-B T -1949
-B Y -1949
-B . -1460
-B , -1460
-A O -1949
-A G -1949
-A C -1949
-A U -1949
-A Q -1949
-W r -974
-W y -974
-W u -974
-W O -974
-W G -974
-W C -974
-W Q -974
-J A -974
-J . -974
-J , -974
-U A -974
-U . -1949
-U , -1949
-Q W -1460
-f . -485
-f , -485
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -1949
-L e -1460
-L q -1949
-G V -974
-G Y -974
-G W -974
-G . -485
-G , -485
-P T -974
-P V -974
-P Y -974
-C T -485
-C V -485
-C Y -485
-D X -1460
-B V -1949
-B X -1460
-B A -974
-B W -1460
-S . -485
-S , -485
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1949
-A e -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -974
-o x -485
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-p v -485
-p y -485
-p x -485
-c v -485
-c y -485
-c w -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -974
-e y -974
-b v -974
-b y -974
-b w -974
-s . -485
-s , -485
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x g -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-a v -974
-a y -974
-a w -974
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T i -485
-T S -485
-L a -974
-L S -974
-R o -974
-R y -485
-R O -485
-R G -485
-R C -485
-R U -485
-R Q -485
-G X -485
-G A -485
-P s -974
-P Z -974
-P X -974
-P W -974
-C X -485
-C W -485
-V i -485
-V S -485
-S T -974
-S V -974
-S Y -974
-S X -485
-S A -485
-S W -974
-Y i -485
-Y S -485
-X a -974
-X u -974
-X S -485
-A t -974
-A g -974
-A c -1460
-A d -1949
-A a -974
-A u -974
-A q -1949
-A S -974
-W i -485
-W S -485
-K c -1460
-K u -974
-K S -974
-o f -485
-h w -974
-n w -974
-p f -485
-p w -485
-c f -485
-c x -485
-v e -485
-v s -485
-e f -485
-e x -485
-e w -974
-b f -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-w e -485
-w s -485
-k o -485
-k g -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -485
-R e -974
-R a -974
-R u -485
-R S -485
-G Z -485
-C Z -485
-Z o -974
-Z e -974
-Z d -974
-Z y -485
-Z a -974
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-J o -485
-J e -485
-J a -485
-K a -974
-o z -485
-h f -485
-n f -485
-p z -485
-c z -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z a -485
-z q -485
-b z -485
-a f -485
-k t -485
-k f -485
-k u -485
-A f -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -2438
-L ' -2438
-T hy -2438
-T - -2438
-T en -2438
-T em -2438
-A cq -3413
-A ' -3413
-hy T -2924
-- T -2924
-en T -2924
-em T -2924
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -485
-p ' -485
-c cq -485
-c ' -485
-e cq -1460
-e ' -1460
-b cq -1949
-b ' -1949
-a cq -974
-a ' -974
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-R cq -485
-R ' -485
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -1460
-' d -1460
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-R hy -485
-R - -485
-R en -485
-R em -485
-K cq -485
-K ' -485
-b f -485
-k cq -485
-k ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-k hy -485
-k - -485
-k en -485
-k em -485
-charset
-! 7317,18000,375,1944,753,737 2 161057 -- MSL 1 (19U 33)
-dq 12198,18375,0,1623,-2621,737 2 161058 -- MSL 2 (19U 34)
-" "
-sh 14637,18069,444,1440,228,737 2 161059 -- MSL 3 (19U 35)
-# "
-Do 14637,19839,3099,1341,702,737 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,17769,264,0,-2066 0 161061 -- MSL 5 (19U 37)
-& 19029,18000,375,237,198,237 2 161062 -- MSL 6 (19U 38)
-cq 7317,18375,0,2511,-530,737 2 161170 -- MSL 8 (19U 146)
-' "
-( 7317,18375,3165,3450,135,737 2 161064 -- MSL 9 (19U 40)
-) 7317,18375,3165,1164,2421,737 2 161065 -- MSL 10 (19U 41)
-* 14637,18150,0,63,-2363,63 2 161066 -- MSL 11 (19U 42)
-+ 23418,13164,534,0,-3527 0 161067 -- MSL 12 (19U 43)
-, 7317,3966,5040,0,3423 1 161068 -- MSL 13 (19U 44)
-hy 7317,8715,0,1497,1071,737 0 161069 -- MSL 14 (19U 45)
-- "
-. 7317,3849,375,0,627 0 161070 -- MSL 15 (19U 46)
-sl 7317,19575,450,4377,2736,737 2 161071 -- MSL 16 (19U 47)
-/ "
-0 14637,17700,375,933,-158,737 0 161072 -- MSL 17 (19U 48)
-1 14637,17700,69,0,-2429 0 161073 -- MSL 18 (19U 49)
-2 14637,17700,201,921,858,737 0 161074 -- MSL 19 (19U 50)
-3 14637,17700,375,372,819,372 0 161075 -- MSL 20 (19U 51)
-4 14637,17394,69,1008,684,737 0 161076 -- MSL 21 (19U 52)
-5 14637,17526,375,1362,669,737 0 161077 -- MSL 22 (19U 53)
-6 14637,17700,375,399,-581,399 0 161078 -- MSL 23 (19U 54)
-7 14637,17526,69,2931,-122,737 0 161079 -- MSL 24 (19U 55)
-8 14637,17700,375,1155,174,737 0 161080 -- MSL 25 (19U 56)
-9 14637,17700,375,843,-404,737 0 161081 -- MSL 26 (19U 57)
-: 7317,11754,375,759,627,737 0 161082 -- MSL 27 (19U 58)
-; 7317,11754,5040,759,3423,737 1 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 23418,9624,0,0,-4067 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 11709,18000,375,900,-1322,737 2 161087 -- MSL 32 (19U 63)
-at 23418,16950,4131,966,348,737 0 161088 -- MSL 33 (19U 64)
-@ "
-A 17565,18069,69,0,2586 2 161089 -- MSL 34 (19U 65)
-B 16101,18069,69,864,306,737 2 161090 -- MSL 35 (19U 66)
-C 17565,18375,375,2640,-599,737 2 161091 -- MSL 36 (19U 67)
-D 20490,18069,69,720,279,720 2 161092 -- MSL 37 (19U 68)
-E 13173,18201,201,2835,738,737 2 161093 -- MSL 38 (19U 69)
-F 13173,18201,69,3051,612,737 2 161094 -- MSL 39 (19U 70)
-G 20490,18375,375,1230,-797,737 2 161095 -- MSL 40 (19U 71)
-H 20490,18069,69,1671,417,737 2 161096 -- MSL 41 (19U 72)
-I 8781,18069,69,1779,441,737 2 161097 -- MSL 42 (19U 73)
-J 8781,18069,4242,1551,2634,737 2 161098 -- MSL 43 (19U 74)
-K 16101,18069,69,3528,366,737 2 161099 -- MSL 44 (19U 75)
-L 13173,18069,201,201,168,201 2 161100 -- MSL 45 (19U 76)
-M 23418,18069,414,1542,768,737 2 161101 -- MSL 46 (19U 77)
-N 20490,18069,69,1383,192,737 2 161102 -- MSL 47 (19U 78)
-O 21954,18375,375,942,-446,737 2 161103 -- MSL 48 (19U 79)
-P 14637,18069,69,2064,519,737 2 161104 -- MSL 49 (19U 80)
-Q 21954,18375,4200,1008,-395,737 2 161105 -- MSL 50 (19U 81)
-R 16101,18069,69,900,387,737 2 161106 -- MSL 51 (19U 82)
-S 13173,18375,375,1626,879,737 2 161107 -- MSL 52 (19U 83)
-T 14637,18201,69,3006,-1070,737 2 161108 -- MSL 53 (19U 84)
-U 20490,18069,375,1671,-1070,737 2 161109 -- MSL 54 (19U 85)
-V 17565,18069,69,3372,-1445,737 2 161110 -- MSL 55 (19U 86)
-W 24882,18069,69,3120,-1604,737 2 161111 -- MSL 56 (19U 87)
-X 16101,18069,69,2451,1470,737 2 161112 -- MSL 57 (19U 88)
-Y 16101,18069,69,3747,-1418,737 2 161113 -- MSL 58 (19U 89)
-Z 16101,18201,201,2589,2115,737 2 161114 -- MSL 59 (19U 90)
-lB 7317,18249,4749,3699,2235,737 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 7317,19575,450,0,-1610 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7317,18249,4749,3696,2238,737 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,737 1 161119 -- MSL 64 (19U 95)
-oq 7317,18375,0,2508,-527,737 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12840,375,189,954,189 0 161121 -- MSL 67 (19U 97)
-b 14637,19779,375,666,1191,666 2 161122 -- MSL 68 (19U 98)
-c 12684,12840,375,2118,171,737 0 161123 -- MSL 69 (19U 99)
-d 14637,19569,375,2727,594,737 2 161124 -- MSL 70 (19U 100)
-e 13173,12840,375,750,480,737 0 161125 -- MSL 71 (19U 101)
-f 8781,19710,69,3357,996,737 2 161126 -- MSL 72 (19U 102)
-g 13173,12840,5400,1836,1659,737 1 161127 -- MSL 73 (19U 103)
-h 14637,19569,69,423,1242,423 2 161128 -- MSL 74 (19U 104)
-i 7317,19308,69,1794,1131,737 2 161129 -- MSL 75 (19U 105)
-j 7317,19308,5400,1797,3720,737 3 161130 -- MSL 76 (19U 106)
-k 13173,19569,69,2670,1353,737 2 161131 -- MSL 77 (19U 107)
-l 7317,19569,69,2586,1086,737 2 161132 -- MSL 78 (19U 108)
-m 21954,12840,69,375,1272,375 0 161133 -- MSL 79 (19U 109)
-n 14637,12840,69,438,1206,438 0 161134 -- MSL 80 (19U 110)
-o 14637,12840,375,708,618,708 0 161135 -- MSL 81 (19U 111)
-p 14637,12840,5469,663,2349,663 1 161136 -- MSL 82 (19U 112)
-q 14637,12840,5469,1281,558,737 1 161137 -- MSL 83 (19U 113)
-r 10245,12840,69,1326,1107,737 0 161138 -- MSL 84 (19U 114)
-s 10245,12840,375,1188,1230,737 0 161139 -- MSL 85 (19U 115)
-t 8781,17055,375,2148,-188,737 0 161140 -- MSL 86 (19U 116)
-u 14637,12534,375,1230,417,737 0 161141 -- MSL 87 (19U 117)
-v 13173,12534,69,2223,-767,737 0 161142 -- MSL 88 (19U 118)
-w 20490,12534,69,2229,-953,737 0 161143 -- MSL 89 (19U 119)
-x 13173,12534,69,1647,2190,737 0 161144 -- MSL 90 (19U 120)
-y 13173,12534,5469,2040,1176,737 1 161145 -- MSL 91 (19U 121)
-z 13173,12666,201,1464,1689,737 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210,3339,-971,737 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210,63,2304,63 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 17565,24342,69,0,2586 2 161216 -- MSL 99 (19U 192)
-^A 17565,24321,69,0,2586 2 161218 -- MSL 100 (19U 194)
-`E 13173,24342,201,2835,738,737 2 161224 -- MSL 101 (19U 200)
-^E 13173,24321,201,2835,738,737 2 161226 -- MSL 102 (19U 202)
-:E 13173,23610,201,3084,738,737 2 161227 -- MSL 103 (19U 203)
-^I 8781,24321,69,4296,441,737 2 161230 -- MSL 104 (19U 206)
-:I 8781,23610,69,5280,441,737 2 161231 -- MSL 105 (19U 207)
-aa 14637,18801,0,297,-5762,297 2 161204 -- MSL 106 (19U 180)
-ga 14637,18801,0,0,-4418 2 161120 -- MSL 107 (19U 96)
-a^ 14637,18780,0,0,-3455 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 14637,18090,0,429,-4022,429 2 161192 -- MSL 109 (19U 168)
-~ 14637,17847,0,1308,-3437,737 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20490,24342,375,1671,-1070,737 2 161241 -- MSL 111 (19U 217)
-^U 20490,24321,375,1671,-1070,737 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,737 2 161199 -- MSL 113 (19U 175)
-'Y 16101,24342,69,3747,-1418,737 2 161245 -- MSL 114 (19U 221)
-'y 13173,18801,5469,2040,1176,737 3 161277 -- MSL 115 (19U 253)
-de 14637,17700,0,0,-2585 0 161200 -- MSL 116 (19U 176)
-,C 17565,18375,5988,2640,-599,737 3 161223 -- MSL 117 (19U 199)
-,c 12684,12840,5733,2118,171,737 1 161255 -- MSL 118 (19U 231)
-~N 20490,23382,69,1383,192,737 2 161233 -- MSL 119 (19U 209)
-~n 14637,17847,69,1308,1206,737 2 161265 -- MSL 120 (19U 241)
-r! 7317,12906,5469,861,1836,737 1 161185 -- MSL 121 (19U 161)
-r? 11709,12906,5469,0,90 1 161215 -- MSL 122 (19U 191)
-Cs 14637,15834,0,1452,477,737 0 161188 -- MSL 123 (19U 164)
-Po 14637,17700,201,1260,1419,737 0 161187 -- MSL 124 (19U 163)
-Ye 14637,18069,69,4212,-131,737 2 161189 -- MSL 125 (19U 165)
-sc 14637,18375,1383,0,-932 2 161191 -- MSL 126 (19U 167)
-Fn 14637,19710,69,366,-1862,366 2 161155 -- MSL 127 (19U 131)
-ct 14637,19812,342,2082,-1151,737 2 161186 -- MSL 128 (19U 162)
-^a 13173,18780,375,711,954,711 2 161250 -- MSL 129 (19U 226)
-^e 13173,18780,375,750,480,737 2 161258 -- MSL 130 (19U 234)
-^o 14637,18780,375,708,618,708 2 161268 -- MSL 131 (19U 244)
-^u 14637,18780,375,1230,417,737 2 161275 -- MSL 132 (19U 251)
-'a 13173,18801,375,1029,954,737 2 161249 -- MSL 133 (19U 225)
-'e 13173,18801,375,1029,480,737 2 161257 -- MSL 134 (19U 233)
-'o 14637,18801,375,708,618,708 2 161267 -- MSL 135 (19U 243)
-'u 14637,18801,375,1230,417,737 2 161274 -- MSL 136 (19U 250)
-`a 13173,18801,375,189,954,189 2 161248 -- MSL 137 (19U 224)
-`e 13173,18801,375,750,480,737 2 161256 -- MSL 138 (19U 232)
-`o 14637,18801,375,708,618,708 2 161266 -- MSL 139 (19U 242)
-`u 14637,18801,375,1230,417,737 2 161273 -- MSL 140 (19U 249)
-:a 13173,18090,375,1161,954,737 2 161252 -- MSL 141 (19U 228)
-:e 13173,18090,375,1161,480,737 2 161259 -- MSL 142 (19U 235)
-:o 14637,18090,375,708,618,708 2 161270 -- MSL 143 (19U 246)
-:u 14637,18090,375,1230,417,737 2 161276 -- MSL 144 (19U 252)
-oA 17565,25035,69,0,2586 2 161221 -- MSL 145 (19U 197)
-^i 7317,18780,69,3639,1134,737 2 161262 -- MSL 146 (19U 238)
-/O 21954,18375,1017,1311,-311,737 2 161240 -- MSL 147 (19U 216)
-AE 22932,18201,201,2844,2589,737 2 161222 -- MSL 148 (19U 198)
-oa 13173,18678,375,189,954,189 2 161253 -- MSL 149 (19U 229)
-'i 7317,18801,69,3957,1134,737 2 161261 -- MSL 150 (19U 237)
-/o 14637,13446,843,1227,1224,737 0 161272 -- MSL 151 (19U 248)
-ae 20004,12840,375,744,945,737 0 161254 -- MSL 152 (19U 230)
-:A 17565,23610,69,888,2586,737 2 161220 -- MSL 153 (19U 196)
-`i 7317,18801,69,1116,1134,737 2 161260 -- MSL 154 (19U 236)
-:O 21954,23610,375,942,-446,737 2 161238 -- MSL 155 (19U 214)
-:U 20490,23610,375,1671,-1070,737 2 161244 -- MSL 156 (19U 220)
-'E 13173,24342,201,3348,738,737 2 161225 -- MSL 157 (19U 201)
-:i 7317,18090,69,4089,1134,737 2 161263 -- MSL 158 (19U 239)
-ss 14637,19500,375,396,1206,396 2 161247 -- MSL 159 (19U 223)
-^O 21954,24321,375,942,-446,737 2 161236 -- MSL 160 (19U 212)
-'A 17565,24342,69,1152,2586,737 2 161217 -- MSL 161 (19U 193)
-~A 17565,23382,69,1752,2586,737 2 161219 -- MSL 162 (19U 195)
-~a 13173,17847,375,2040,954,737 2 161251 -- MSL 163 (19U 227)
--D 20490,18069,69,720,318,720 2 161232 -- MSL 164 (19U 208)
-Sd 14637,19674,375,831,618,737 2 161264 -- MSL 165 (19U 240)
-'I 8781,24342,69,5544,441,737 2 161229 -- MSL 166 (19U 205)
-`I 8781,24342,69,1779,441,737 2 161228 -- MSL 167 (19U 204)
-'O 21954,24342,375,942,-446,737 2 161235 -- MSL 168 (19U 211)
-`O 21954,24342,375,942,-446,737 2 161234 -- MSL 169 (19U 210)
-~O 21954,23382,375,942,-446,737 2 161237 -- MSL 170 (19U 213)
-~o 14637,17847,375,1308,618,737 2 161269 -- MSL 171 (19U 245)
-vS 13173,24321,375,3120,879,737 2 161162 -- MSL 172 (19U 138)
-vs 10245,18780,375,3117,1230,737 2 161178 -- MSL 173 (19U 154)
-'U 20490,24342,375,1671,-1070,737 2 161242 -- MSL 174 (19U 218)
-:Y 16101,23610,69,3747,-1418,737 2 161183 -- MSL 175 (19U 159)
-:y 13173,18090,5469,2040,1176,737 3 161279 -- MSL 176 (19U 255)
-TP 14637,18069,69,1347,384,737 2 161246 -- MSL 177 (19U 222)
-Tp 14637,19779,5469,672,2361,672 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680,1422,2907,737 0 161205 -- MSL 180 (19U 181)
-ps 14637,19635,4200,18,-1139,18 2 161206 -- MSL 181 (19U 182)
-34 23418,17769,444,0,-869 0 161214 -- MSL 182 (19U 190)
-\- 23418,7455,0,0,-3527 0 60096 -- MSL 183 ( 7J 192)
-14 23418,17865,444,0,-2132 2 161212 -- MSL 184 (19U 188)
-12 23418,17865,444,0,-1793 2 161213 -- MSL 185 (19U 189)
-Of 9759,17700,0,765,-257,737 0 161194 -- MSL 186 (19U 170)
-Om 9759,17700,0,1815,-80,737 0 161210 -- MSL 187 (19U 186)
-Fo 11220,10851,0,1272,132,737 0 161195 -- MSL 188 (19U 171)
-Fc 11220,10851,0,588,816,588 0 161211 -- MSL 190 (19U 187)
-t+- 23418,13080,4230,0,-3521 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,3885,-2093,737 2 161193 -- MSL 193 (19U 169)
-tno 23418,10770,0,0,-3104 0 161196 -- MSL 194 (19U 172)
-u00AD 7317,8715,0,1497,1071,737 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,3885,-2093,737 2 161198 -- MSL 196 (19U 174)
-S2 9270,17700,0,2130,-161,737 0 161202 -- MSL 197 (19U 178)
-S3 9270,17700,0,1656,-122,737 0 161203 -- MSL 198 (19U 179)
-ac 14637,393,5733,0,-1118 1 161208 -- MSL 199 (19U 184)
-S1 9270,17865,0,708,-1469,708 2 161209 -- MSL 200 (19U 185)
-tmu 23418,13107,567,0,-4625 0 161239 -- MSL 201 (19U 215)
-tdi 23418,12999,369,0,-3530 0 161271 -- MSL 202 (19U 247)
-u203C 14637,18000,375,1941,753,737 2 87315 -- MSL 221 (10U 19)
-u20A7 23418,18069,375,2148,519,737 2 60121 -- MSL 232 ( 7J 217)
-pc 7317,10899,0,282,-740,282 0 161207 -- MSL 302 (19U 183)
-u013F 13173,18069,201,2250,168,737 2 51943 -- MSL 306 ( 6J 231)
-u0140 10245,19569,69,2736,1086,737 2 51959 -- MSL 307 ( 6J 247)
-u2113 14637,18045,765,0,-1712 2 60122 -- MSL 308 ( 7J 218)
-u0149 20979,18375,69,438,-530,438 2 51951 -- MSL 309 ( 6J 239)
-fm 7317,18096,0,1629,-2066,737 2 60101 -- MSL 310 ( 7J 197)
-sd 14637,18096,0,0,-2066 2 60102 -- MSL 311 ( 7J 198)
-dg 14637,18201,426,666,-761,666 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,1425,-1961,737 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,737 1 60095 -- MSL 314 ( 7J 191)
-ah 14637,18780,0,921,-4397,737 2 75169 -- MSL 315 ( 9E 161)
-ao 14637,18678,0,0,-5651 2 60152 -- MSL 316 ( 7J 248)
-f/ 2439,17769,444,7344,7137,737 0 60109 -- MSL 324 ( 7J 205)
-em 23418,8070,0,759,219,737 0 161175 -- MSL 325 (19U 151)
-en 14637,8070,0,681,459,681 0 161174 -- MSL 326 (19U 150)
-dd 14637,18201,426,630,-725,630 2 161159 -- MSL 327 (19U 135)
-.i 7317,12534,69,1116,1134,737 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18375,0,1659,-2621,737 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 13173,17700,0,1335,-275,737 0 87548 -- MSL 332 (10U 252)
-u0111 14637,19569,375,3939,609,737 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 17565,24138,69,225,2586,225 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18528,375,1128,954,737 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 17565,18069,4161,0,2586 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12840,4140,189,954,189 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,24342,375,2640,-599,737 2 75206 -- MSL 406 ( 9E 198)
-'c 12684,18801,375,2415,171,737 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,24321,375,2640,-599,737 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 12684,18780,375,2118,171,737 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,24321,69,720,279,720 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 18051,19710,375,4032,594,737 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13173,24321,201,3120,738,737 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13173,18780,375,993,480,737 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13173,18201,4161,2835,738,737 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13173,12840,4140,750,480,737 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13173,24342,201,1248,168,737 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25536,69,5682,1086,737 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13173,18516,201,2910,168,737 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10734,19710,69,3789,1086,737 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20490,24342,69,1383,192,737 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,18801,69,438,1206,438 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20490,24321,69,1383,192,737 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,18780,69,921,1206,737 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 21954,24342,375,1263,-446,737 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14637,18801,375,3432,618,737 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16101,24342,69,984,387,737 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,18801,69,2493,1107,737 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16101,24321,69,906,387,737 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,18780,69,2967,1107,737 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,24342,375,2148,879,737 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18801,375,2493,1230,737 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,24321,69,3006,-1070,737 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 11220,19710,375,3813,-188,737 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,18201,5988,3006,-140,737 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8781,17055,5733,2148,2109,737 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20490,24342,375,2655,-1070,737 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,18801,375,3432,417,737 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20490,25035,375,1671,-1070,737 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,18678,375,1230,417,737 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,24342,201,2589,2115,737 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13173,18801,201,1464,1689,737 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,24087,201,2589,2115,737 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13173,18786,201,1464,1689,737 2 75199 -- MSL 485 ( 9E 191)
-u2070 9270,17700,0,1779,-308,737 0 51753 -- MSL 1000 ( 6J 41)
-u2074 9270,17562,0,1926,57,737 0 51748 -- MSL 1001 ( 6J 36)
-u2075 9270,17694,0,2097,-326,737 0 51749 -- MSL 1002 ( 6J 37)
-u2076 9270,17700,0,1608,-776,737 0 51806 -- MSL 1003 ( 6J 94)
-u2077 9270,17694,0,3141,-152,737 0 51750 -- MSL 1004 ( 6J 38)
-u2078 9270,17700,0,1821,-272,737 0 51754 -- MSL 1005 ( 6J 42)
-u2079 9270,17700,0,1653,-359,737 0 51752 -- MSL 1006 ( 6J 40)
-lq 11709,18375,0,2910,-386,737 2 161171 -- MSL 1017 (19U 147)
-rq 11709,18375,0,2895,-371,737 2 161172 -- MSL 1018 (19U 148)
-Bq 12198,3972,4527,0,2505 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 14637,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7317,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,3729,0,0,-413 0 161157 -- MSL 1028 (19U 133)
-vz 13173,18780,201,1653,1689,737 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,2610,-1976,737 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,387,-1088,387 2 51794 -- MSL 1036 ( 6J 82)
-fi 15612,19710,69,1506,900,737 2 60077 -- MSL 1040 ( 7J 173)
-fl 15612,19710,69,2385,816,737 2 60078 -- MSL 1041 ( 7J 174)
-ff 16587,19710,69,3507,816,737 2 51883 -- MSL 1042 ( 6J 171)
-Fi 23418,19710,69,1683,684,737 2 51884 -- MSL 1043 ( 6J 172)
-Fl 23418,19710,69,2499,666,737 2 51885 -- MSL 1044 ( 6J 173)
-ij 14637,19308,5400,1794,1131,737 3 60134 -- MSL 1047 ( 7J 230)
-u2105 23418,19599,444,1194,399,737 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,24138,375,1230,-797,737 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18528,5400,1836,1659,737 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18375,5988,1626,879,737 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12840,5733,1188,1797,737 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,24087,69,2430,441,737 2 46301 -- MSL 1065 ( 5T 221)
-bq 7317,3972,4527,0,2502 0 161154 -- MSL 1067 (19U 130)
-%0 33663,17769,264,0,-2288 0 161161 -- MSL 1068 (19U 137)
-a- 14637,17490,0,843,-3734,737 0 60154 -- MSL 1084 ( 7J 250)
-ab 14637,18528,0,396,-3983,396 2 75170 -- MSL 1086 ( 9E 162)
-a. 14637,18786,0,0,-6407 2 75263 -- MSL 1088 ( 9E 255)
-oe 22443,12840,375,720,618,720 0 161180 -- MSL 1090 (19U 156)
-OE 24882,18375,375,2916,-512,737 2 161164 -- MSL 1091 (19U 140)
-fo 6831,10851,0,1296,132,737 0 161163 -- MSL 1092 (19U 139)
-fc 6831,10851,0,609,819,609 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 13173,18069,201,198,1188,198 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,19569,69,3264,1563,737 2 75187 -- MSL 1096 ( 9E 179)
-a" 14637,18801,0,3432,-3053,737 2 75197 -- MSL 1097 ( 9E 189)
-ho 14637,636,4140,0,-4475 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,24321,201,2589,2115,737 2 75150 -- MSL 1106 ( 9E 142)
-IJ 17565,18069,4242,1548,441,737 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/OI b/contrib/groff/font/devlj4/OI
deleted file mode 100644
index 282d6fff3d35..000000000000
--- a/contrib/groff/font/devlj4/OI
+++ /dev/null
@@ -1,887 +0,0 @@
-# CG Omega It
-name OI
-spacewidth 7317
-slant 9.860000
-pcltypeface 4113
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -3902
-P , -3902
-V A -3902
-A V -4388
-T o -3413
-T r -3413
-T c -3413
-T e -3413
-T d -3413
-T s -3413
-T y -3413
-T a -3902
-T w -3413
-T u -3413
-L T -2438
-L Y -2438
-Y o -2924
-Y e -2924
-Y a -3413
-A W -3902
-W A -2924
-T A -3413
-V o -2924
-V e -2924
-V a -3413
-Y A -2924
-F A -3902
-F . -3902
-F , -3902
-A T -4388
-A Y -4388
-v . -2924
-v , -2924
-y . -2924
-y , -2924
-T . -3413
-T , -3413
-L W -2438
-P A -3413
-V . -3902
-V , -3902
-Y . -2924
-Y , -2924
-W o -1949
-W e -1949
-W a -2438
-W . -2924
-W , -2924
-r . -2924
-r , -2924
-w . -2924
-w , -2924
-Y u -1460
-A v -2438
-A y -2924
-A w -2438
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -485
-e , -485
-b . -1949
-b , -1949
-O T -2924
-O V -1460
-O Y -1460
-O . -2438
-O , -2438
-L y -2438
-L O -2438
-L G -2438
-L C -2438
-L Q -2438
-V y -1460
-V u -1460
-V O -1460
-V G -1460
-V C -1460
-V Q -1460
-D T -2924
-D V -1460
-D Y -1460
-D . -2438
-D , -2438
-Y O -1460
-Y G -1460
-Y C -1460
-Y Q -1460
-F o -1949
-F e -1949
-F a -2438
-c . -485
-c , -485
-O A -1949
-O W -974
-L U -1949
-R T -1460
-R V -1460
-R Y -1460
-R W -1460
-G T -974
-P o -1460
-P g -974
-P e -1460
-P a -1949
-C A -974
-C . -974
-C , -974
-D A -1949
-D W -974
-B T -1949
-B Y -1460
-B . -1460
-B , -1460
-A O -1949
-A G -1949
-A C -1949
-A U -2438
-A Q -1949
-W r -974
-W y -974
-W u -974
-W O -974
-W G -974
-W C -974
-W Q -974
-J A -974
-J . -974
-J , -974
-U A -2438
-U . -2438
-U , -2438
-Q W -974
-f . -485
-f , -485
-T O -2438
-T G -2438
-T C -2438
-T Q -2438
-O X -1460
-L o -1949
-L e -1949
-L q -1949
-G V -974
-G Y -974
-G W -974
-G . -485
-G , -485
-P T -974
-P V -974
-P Y -974
-C T -974
-C V -974
-C Y -974
-D X -1460
-B V -1460
-B X -1460
-B A -1460
-B W -974
-S . -1460
-S , -1460
-F r -485
-F y -485
-F u -485
-F O -485
-F G -485
-F C -485
-F Q -485
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1949
-A e -1949
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -485
-o y -1460
-o x -974
-o w -485
-h v -485
-h y -1460
-n v -485
-n y -1460
-r g -485
-g . -485
-g , -485
-p v -485
-p y -1460
-p x -974
-c v -485
-c y -485
-c w -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -974
-v q -485
-e v -485
-e y -974
-b v -485
-b y -1460
-b w -485
-s . -974
-s , -974
-y o -485
-y g -485
-y c -485
-y d -485
-y a -974
-y q -485
-f g -485
-x o -974
-x g -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -485
-a y -1460
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -974
-w q -485
-T i -485
-T S -1460
-L a -974
-L S -485
-R o -974
-R y -974
-R O -974
-R G -974
-R C -974
-R U -1460
-R Q -974
-G X -485
-G A -485
-P s -974
-P Z -974
-P X -974
-P W -974
-C X -974
-C W -974
-V i -485
-V S -1460
-S T -485
-S V -485
-S Y -485
-S X -485
-S A -1460
-S W -485
-Y i -485
-Y S -1460
-X a -974
-X u -1460
-X S -485
-A t -1460
-A g -1460
-A c -1949
-A d -1949
-A a -1460
-A u -1949
-A q -1949
-A S -974
-W i -485
-W S -974
-K c -1460
-K u -1460
-K S -485
-t g -485
-o f -485
-h w -485
-n w -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -974
-r q -485
-p f -485
-p w -485
-c f -485
-c x -485
-v e -485
-v s -485
-e f -485
-e x -485
-e w -485
-b f -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -974
-f q -485
-w e -485
-w s -485
-k o -485
-k g -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -974
-k w -485
-k q -485
-O Z -974
-L J -1460
-R e -974
-R a -974
-R u -974
-R S -485
-G Z -485
-P U -485
-C Z -974
-E a -485
-Z o -974
-Z e -974
-Z d -974
-Z y -974
-Z a -974
-Z w -974
-Z u -974
-Z O -974
-Z G -974
-Z C -974
-Z S -485
-Z Q -974
-D Z -974
-B Z -974
-S Z -485
-F i -485
-F j -485
-F S -485
-A s -485
-A J -1949
-A . -485
-A , -485
-J o -485
-J e -485
-J a -974
-J U -485
-U g -485
-U J -485
-K a -974
-K J -485
-t o -485
-t c -485
-t e -485
-t d -485
-t a -974
-t q -485
-o z -485
-h f -485
-n f -485
-r s -485
-g a -485
-p z -485
-c z -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z a -974
-z q -485
-b z -485
-a f -485
-k t -485
-k f -485
-k u -485
-T U -485
-R J -974
-C a -485
-C U -485
-V U -485
-E U -485
-B a -485
-B U -485
-Y U -485
-F U -485
-X U -485
-A b -485
-A f -974
-W U -485
-U t -485
-U o -485
-U h -485
-U n -485
-U m -485
-U l -485
-U r -485
-U i -485
-U p -485
-U c -485
-U v -485
-U e -485
-U z -485
-U d -485
-U b -485
-U s -485
-U y -485
-U f -485
-U x -485
-U a -974
-U w -485
-U j -485
-U q -485
-U k -485
-U T -485
-U O -485
-U H -485
-U N -485
-U M -485
-U L -485
-U R -485
-U G -485
-U I -485
-U P -485
-U C -485
-U V -485
-U E -485
-U Z -485
-U D -485
-U B -485
-U S -485
-U Y -485
-U F -485
-U X -485
-U W -485
-U U -974
-U Q -485
-U K -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -974
-L cq -2438
-L ' -2438
-T hy -3413
-T - -3413
-T en -3413
-T em -3413
-A cq -3902
-A ' -3902
-hy T -3902
-- T -3902
-en T -3902
-em T -3902
-Y hy -1460
-Y - -1460
-Y en -1460
-Y em -1460
-p cq -1949
-p ' -1949
-c cq -485
-c ' -485
-e cq -974
-e ' -974
-b cq -1460
-b ' -1460
-a cq -1949
-a ' -1949
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-R cq -974
-R ' -974
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -1460
-' d -1460
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-F hy -485
-F - -485
-F en -485
-F em -485
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -1949
-- A -1949
-en X -1460
-en A -1949
-em X -1460
-R hy -974
-R - -974
-R en -974
-R em -974
-K cq -485
-K ' -485
-t g -485
-b f -485
-k cq -485
-k ' -485
-Z hy -974
-Z - -974
-Z en -974
-Z em -974
-U cq -485
-U ' -485
-k hy -485
-k - -485
-k en -485
-k em -485
-U hy -485
-U - -485
-U en -485
-U em -485
-charset
-! 7317,18000,330,723,-176,586 2 161057 -- MSL 1 (19U 33)
-dq 10734,18375,0,678,-2777,586 2 161058 -- MSL 2 (19U 34)
-" "
-sh 14637,17769,444,1371,570,586 0 161059 -- MSL 3 (19U 35)
-# "
-Do 14637,19515,3105,0,6 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,17769,444,0,-2765 0 161061 -- MSL 5 (19U 37)
-& 17565,18000,375,264,174,264 2 161062 -- MSL 6 (19U 38)
-cq 7317,18375,0,1704,-1406,586 2 161170 -- MSL 8 (19U 146)
-' "
-( 7317,18375,3165,2625,-299,586 2 161064 -- MSL 9 (19U 40)
-) 7317,18375,3165,54,2271,54 2 161065 -- MSL 10 (19U 41)
-* 14637,18150,0,0,-2147 2 161066 -- MSL 11 (19U 42)
-+ 23418,13260,393,0,-3788 0 161067 -- MSL 12 (19U 43)
-, 7317,2700,4611,0,1776 0 161068 -- MSL 13 (19U 44)
-hy 7317,7170,0,1245,1176,586 0 161069 -- MSL 14 (19U 45)
-- "
-. 7317,2622,330,0,-236 0 161070 -- MSL 15 (19U 46)
-sl 7317,19650,480,2448,1203,586 2 161071 -- MSL 16 (19U 47)
-/ "
-0 14637,17700,375,723,-179,586 0 161072 -- MSL 17 (19U 48)
-1 14637,17700,69,0,-3338 0 161073 -- MSL 18 (19U 49)
-2 14637,17700,201,0,-122 0 161074 -- MSL 19 (19U 50)
-3 14637,17700,375,0,60 0 161075 -- MSL 20 (19U 51)
-4 14637,17769,69,396,285,396 0 161076 -- MSL 21 (19U 52)
-5 14637,17526,375,297,-101,297 0 161077 -- MSL 22 (19U 53)
-6 14637,17700,375,0,-458 0 161078 -- MSL 23 (19U 54)
-7 14637,17526,69,1713,-884,586 0 161079 -- MSL 24 (19U 55)
-8 14637,17700,375,12,-146,12 0 161080 -- MSL 25 (19U 56)
-9 14637,17700,375,267,-962,267 0 161081 -- MSL 26 (19U 57)
-: 7317,11652,330,0,-236 0 161082 -- MSL 27 (19U 58)
-; 7317,11652,4611,0,1776 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 23418,8622,0,0,-3731 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 10245,18000,330,1083,-1298,586 2 161087 -- MSL 32 (19U 63)
-at 23418,16980,3654,435,87,435 0 161088 -- MSL 33 (19U 64)
-@ "
-A 17565,18000,69,0,1896 2 161089 -- MSL 34 (19U 65)
-B 16101,18069,69,0,-341 2 161090 -- MSL 35 (19U 66)
-C 17565,18375,375,1455,-410,586 2 161091 -- MSL 36 (19U 67)
-D 20490,18069,69,288,-362,288 2 161092 -- MSL 37 (19U 68)
-E 13173,18201,201,1095,-101,586 2 161093 -- MSL 38 (19U 69)
-F 13173,18201,69,1098,-125,586 2 161094 -- MSL 39 (19U 70)
-G 19515,18375,375,1158,-668,586 2 161095 -- MSL 40 (19U 71)
-H 20490,18069,69,627,-233,586 2 161096 -- MSL 41 (19U 72)
-I 7806,18069,69,609,-248,586 2 161097 -- MSL 42 (19U 73)
-J 7317,18069,3657,1026,2235,586 2 161098 -- MSL 43 (19U 74)
-K 16101,18069,69,2220,-320,586 2 161099 -- MSL 44 (19U 75)
-L 12198,18069,201,414,-221,414 2 161100 -- MSL 45 (19U 76)
-M 23418,18069,69,543,-110,543 2 161101 -- MSL 46 (19U 77)
-N 20490,18069,375,525,-245,525 2 161102 -- MSL 47 (19U 78)
-O 21954,18375,375,555,-371,555 2 161103 -- MSL 48 (19U 79)
-P 14637,18069,69,1464,-359,586 2 161104 -- MSL 49 (19U 80)
-Q 21954,18375,4200,507,-347,507 2 161105 -- MSL 50 (19U 81)
-R 16587,18069,69,498,-158,498 2 161106 -- MSL 51 (19U 82)
-S 13173,18375,375,882,855,586 2 161107 -- MSL 52 (19U 83)
-T 14637,18201,69,2493,-1079,586 2 161108 -- MSL 53 (19U 84)
-U 20490,18069,375,669,-1454,586 2 161109 -- MSL 54 (19U 85)
-V 16101,18069,69,2763,-746,586 2 161110 -- MSL 55 (19U 86)
-W 24882,18069,69,2835,-917,586 2 161111 -- MSL 56 (19U 87)
-X 14637,18069,69,2148,1377,586 2 161112 -- MSL 57 (19U 88)
-Y 14637,18069,69,3225,-542,586 2 161113 -- MSL 58 (19U 89)
-Z 16101,18201,201,1014,921,586 2 161114 -- MSL 59 (19U 90)
-lB 7317,18201,4956,3090,1014,586 3 161115 -- MSL 60 (19U 91)
-[ "
-rs 7317,19650,480,294,-1517,294 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7317,18201,4956,1338,2766,586 3 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,586 1 161119 -- MSL 64 (19U 95)
-oq 7317,18375,0,1704,-1406,586 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12795,330,168,582,168 0 161121 -- MSL 67 (19U 97)
-b 14637,19779,330,279,651,279 2 161122 -- MSL 68 (19U 98)
-c 12684,12795,330,1245,282,586 0 161123 -- MSL 69 (19U 99)
-d 14637,19779,330,2097,-26,586 2 161124 -- MSL 70 (19U 100)
-e 13173,12795,330,588,327,586 0 161125 -- MSL 71 (19U 101)
-f 7317,19710,69,3714,57,586 2 161126 -- MSL 72 (19U 102)
-g 13173,12996,5400,1656,876,586 1 161127 -- MSL 73 (19U 103)
-h 14637,19779,69,0,348 2 161128 -- MSL 74 (19U 104)
-i 7317,18336,69,885,-287,586 2 161129 -- MSL 75 (19U 105)
-j 7317,18336,5400,876,1554,586 3 161130 -- MSL 76 (19U 106)
-k 13173,19779,69,1581,249,586 2 161131 -- MSL 77 (19U 107)
-l 7317,19779,69,1068,-110,586 2 161132 -- MSL 78 (19U 108)
-m 21954,12534,69,0,414 0 161133 -- MSL 79 (19U 109)
-n 14637,12795,69,0,282 0 161134 -- MSL 80 (19U 110)
-o 14637,12795,330,453,351,453 0 161135 -- MSL 81 (19U 111)
-p 14637,12795,5469,216,1740,216 1 161136 -- MSL 82 (19U 112)
-q 14637,12795,5469,828,-50,586 1 161137 -- MSL 83 (19U 113)
-r 8781,12795,69,1512,279,586 0 161138 -- MSL 84 (19U 114)
-s 10245,12795,330,411,960,411 0 161139 -- MSL 85 (19U 115)
-t 7806,15654,330,1212,258,586 0 161140 -- MSL 86 (19U 116)
-u 14637,12534,330,372,-347,372 0 161141 -- MSL 87 (19U 117)
-v 13173,12534,69,1632,-206,586 0 161142 -- MSL 88 (19U 118)
-w 20490,12534,69,1974,-182,586 0 161143 -- MSL 89 (19U 119)
-x 11709,12534,69,1191,1662,586 0 161144 -- MSL 90 (19U 120)
-y 13173,12534,5469,1659,-56,586 1 161145 -- MSL 91 (19U 121)
-z 13173,12666,201,795,714,586 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210,2910,-1241,586 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210,0,2682 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 17565,24042,69,0,1896 2 161216 -- MSL 99 (19U 192)
-^A 17565,23745,69,0,1896 2 161218 -- MSL 100 (19U 194)
-`E 13173,24042,201,1095,-101,586 2 161224 -- MSL 101 (19U 200)
-^E 13173,23745,201,1095,-101,586 2 161226 -- MSL 102 (19U 202)
-:E 13173,22896,201,1455,-101,586 2 161227 -- MSL 103 (19U 203)
-^I 7806,23745,69,3768,-248,586 2 161230 -- MSL 104 (19U 206)
-:I 7806,22896,69,4140,-248,586 2 161231 -- MSL 105 (19U 207)
-aa 14637,18375,0,0,-6179 2 161204 -- MSL 106 (19U 180)
-ga 14637,18378,0,0,-4619 2 161120 -- MSL 107 (19U 96)
-a^ 14637,18225,0,0,-3890 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 14637,17223,0,0,-3716 0 161192 -- MSL 109 (19U 168)
-~ 14637,17166,0,0,-3716 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20490,24042,375,669,-1454,586 2 161241 -- MSL 111 (19U 217)
-^U 20490,23745,375,669,-1454,586 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,586 2 161199 -- MSL 113 (19U 175)
-'Y 14637,24048,69,3225,-542,586 2 161245 -- MSL 114 (19U 221)
-'y 13173,18375,5469,1659,-56,586 3 161277 -- MSL 115 (19U 253)
-de 14637,17700,0,0,-2663 0 161200 -- MSL 116 (19U 176)
-,C 17565,18375,5736,1455,-410,586 3 161223 -- MSL 117 (19U 199)
-,c 12684,12795,5193,1245,282,586 1 161255 -- MSL 118 (19U 231)
-~N 20490,22812,375,525,-245,525 2 161233 -- MSL 119 (19U 209)
-~n 14637,17166,69,0,282 0 161265 -- MSL 120 (19U 241)
-r! 7317,12696,5634,0,639 1 161185 -- MSL 121 (19U 161)
-r? 10245,12696,5634,0,795 1 161215 -- MSL 122 (19U 191)
-Cs 14637,15684,0,660,-116,586 0 161188 -- MSL 123 (19U 164)
-Po 14637,17700,201,1269,1179,586 0 161187 -- MSL 124 (19U 163)
-Ye 14637,18069,69,2862,-179,586 2 161189 -- MSL 125 (19U 165)
-sc 14637,17865,3633,0,-959 2 161191 -- MSL 126 (19U 167)
-Fn 14637,19710,69,0,-3317 2 161155 -- MSL 127 (19U 131)
-ct 14637,19782,0,393,-998,393 2 161186 -- MSL 128 (19U 162)
-^a 13173,18225,330,168,582,168 2 161250 -- MSL 129 (19U 226)
-^e 13173,18225,330,588,327,586 2 161258 -- MSL 130 (19U 234)
-^o 14637,18225,330,453,351,453 2 161268 -- MSL 131 (19U 244)
-^u 14637,18225,330,372,-347,372 2 161275 -- MSL 132 (19U 251)
-'a 13173,18375,330,168,582,168 2 161249 -- MSL 133 (19U 225)
-'e 13173,18375,330,588,327,586 2 161257 -- MSL 134 (19U 233)
-'o 14637,18375,330,453,351,453 2 161267 -- MSL 135 (19U 243)
-'u 14637,18375,330,372,-347,372 2 161274 -- MSL 136 (19U 250)
-`a 13173,18378,330,168,582,168 2 161248 -- MSL 137 (19U 224)
-`e 13173,18378,330,588,327,586 2 161256 -- MSL 138 (19U 232)
-`o 14637,18378,330,453,351,453 2 161266 -- MSL 139 (19U 242)
-`u 14637,18378,330,372,-347,372 2 161273 -- MSL 140 (19U 249)
-:a 13173,17223,330,285,582,285 0 161252 -- MSL 141 (19U 228)
-:e 13173,17223,330,588,327,586 0 161259 -- MSL 142 (19U 235)
-:o 14637,17223,330,453,351,453 0 161270 -- MSL 143 (19U 246)
-:u 14637,17223,330,372,-347,372 0 161276 -- MSL 144 (19U 252)
-oA 17565,23979,69,0,1896 2 161221 -- MSL 145 (19U 197)
-^i 7317,18225,69,2628,-230,586 2 161262 -- MSL 146 (19U 238)
-/O 21954,18375,375,1341,588,586 2 161240 -- MSL 147 (19U 216)
-AE 20979,18201,201,1296,3312,586 2 161222 -- MSL 148 (19U 198)
-oa 13173,17973,330,168,582,168 2 161253 -- MSL 149 (19U 229)
-'i 7317,18375,69,2973,-278,586 2 161261 -- MSL 150 (19U 237)
-/o 14637,12795,399,1320,1203,586 0 161272 -- MSL 151 (19U 248)
-ae 20490,12795,330,906,678,586 0 161254 -- MSL 152 (19U 230)
-:A 17565,22896,69,0,1896 2 161220 -- MSL 153 (19U 196)
-`i 7317,18378,69,174,-278,174 2 161260 -- MSL 154 (19U 236)
-:O 21954,22896,375,555,-371,555 2 161238 -- MSL 155 (19U 214)
-:U 20490,22896,375,669,-1454,586 2 161244 -- MSL 156 (19U 220)
-'E 13173,24048,201,1239,-101,586 2 161225 -- MSL 157 (19U 201)
-:i 7317,17223,69,3213,-56,586 0 161263 -- MSL 158 (19U 239)
-ss 14148,19710,330,147,516,147 2 161247 -- MSL 159 (19U 223)
-^O 21954,23745,375,555,-371,555 2 161236 -- MSL 160 (19U 212)
-'A 17565,24048,69,0,1896 2 161217 -- MSL 161 (19U 193)
-~A 17565,22812,69,0,1896 2 161219 -- MSL 162 (19U 195)
-~a 13173,17166,330,168,582,168 0 161251 -- MSL 163 (19U 227)
--D 20490,18069,69,288,936,288 2 161232 -- MSL 164 (19U 208)
-Sd 14637,19590,330,453,351,453 2 161264 -- MSL 165 (19U 240)
-'I 7806,24048,69,3924,-248,586 2 161229 -- MSL 166 (19U 205)
-`I 7806,24042,69,909,-248,586 2 161228 -- MSL 167 (19U 204)
-'O 21954,24048,375,555,-371,555 2 161235 -- MSL 168 (19U 211)
-`O 21954,24042,375,555,-371,555 2 161234 -- MSL 169 (19U 210)
-~O 21954,22812,375,555,-371,555 2 161237 -- MSL 170 (19U 213)
-~o 14637,17166,330,453,351,453 0 161269 -- MSL 171 (19U 245)
-vS 13173,23745,375,1725,855,586 2 161162 -- MSL 172 (19U 138)
-vs 10245,18225,330,1680,960,586 2 161178 -- MSL 173 (19U 154)
-'U 20490,24048,375,669,-1454,586 2 161242 -- MSL 174 (19U 218)
-:Y 14637,22896,69,3225,-542,586 2 161183 -- MSL 175 (19U 159)
-:y 13173,17223,5469,1659,-56,586 1 161279 -- MSL 176 (19U 255)
-TP 14637,18069,69,834,-350,586 2 161246 -- MSL 177 (19U 222)
-Tp 14637,19779,5469,225,1752,225 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350,1122,2931,586 0 161205 -- MSL 180 (19U 181)
-ps 14637,19635,4200,135,-1256,135 2 161206 -- MSL 181 (19U 182)
-34 23418,17850,525,0,-1325 2 161214 -- MSL 182 (19U 190)
-\- 23418,7122,0,0,-3800 0 60096 -- MSL 183 ( 7J 192)
-14 23418,17850,525,0,-2267 2 161212 -- MSL 184 (19U 188)
-12 23418,17850,525,0,-2138 2 161213 -- MSL 185 (19U 189)
-Of 12198,17700,0,18,-1691,18 0 161194 -- MSL 186 (19U 170)
-Om 12198,17700,0,1029,-1607,586 0 161210 -- MSL 187 (19U 186)
-Fo 9759,10920,0,849,306,586 0 161195 -- MSL 188 (19U 171)
-Fc 9759,10920,0,120,1035,120 0 161211 -- MSL 190 (19U 187)
-t+- 23418,13260,3132,0,-3332 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,3384,-1592,586 2 161193 -- MSL 193 (19U 169)
-tno 23418,10671,0,0,-3014 0 161196 -- MSL 194 (19U 172)
-u00AD 7317,7170,0,1245,1176,586 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,3384,-1592,586 2 161198 -- MSL 196 (19U 174)
-S2 10245,17700,0,705,-773,586 0 161202 -- MSL 197 (19U 178)
-S3 10245,17700,0,525,-806,525 0 161203 -- MSL 198 (19U 179)
-ac 14637,300,5193,0,-1904 1 161208 -- MSL 199 (19U 184)
-S1 10245,17700,0,0,-2471 0 161209 -- MSL 200 (19U 185)
-tmu 23418,13137,585,0,-3779 0 161239 -- MSL 201 (19U 215)
-tdi 23418,11139,0,0,-3899 0 161271 -- MSL 202 (19U 247)
-u203C 14637,18000,330,231,-665,231 2 87315 -- MSL 221 (10U 19)
-u20A7 22443,18069,330,1212,-359,586 2 60121 -- MSL 232 ( 7J 217)
-pc 7317,10905,0,0,-1391 0 161207 -- MSL 302 (19U 183)
-u013F 12198,18069,201,1377,-221,586 2 51943 -- MSL 306 ( 6J 231)
-u0140 10245,19779,69,1863,-110,586 2 51959 -- MSL 307 ( 6J 247)
-u2113 14637,18150,297,0,-1787 2 60122 -- MSL 308 ( 7J 218)
-u0149 20490,18375,69,0,-1406 2 51951 -- MSL 309 ( 6J 239)
-fm 7317,17700,0,1092,-1739,586 0 60101 -- MSL 310 ( 7J 197)
-sd 14637,17700,0,0,-1739 0 60102 -- MSL 311 ( 7J 198)
-dg 14637,18213,846,0,-1322 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,924,-1460,586 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,586 1 60095 -- MSL 314 ( 7J 191)
-ah 14637,18225,0,0,-4406 2 75169 -- MSL 315 ( 9E 161)
-ao 14637,17973,0,0,-5852 2 60152 -- MSL 316 ( 7J 248)
-f/ 3414,17850,525,7596,6609,586 2 60109 -- MSL 324 ( 7J 205)
-em 23418,6885,0,390,537,390 0 161175 -- MSL 325 (19U 151)
-en 14637,6885,0,507,537,507 0 161174 -- MSL 326 (19U 150)
-dd 14637,18213,846,0,-1334 2 161159 -- MSL 327 (19U 135)
-.i 7317,12534,69,174,-278,174 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18375,0,705,-2777,586 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 10734,17700,0,1650,474,586 0 87548 -- MSL 332 (10U 252)
-u0111 14637,19779,330,3444,-20,586 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 17565,23871,69,0,1896 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18165,330,450,582,450 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 17565,18000,4167,0,1896 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12795,3876,750,582,586 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,24048,375,1455,-410,586 2 75206 -- MSL 406 ( 9E 198)
-'c 12684,18375,330,1245,282,586 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,23745,375,1455,-410,586 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 12684,18225,330,1245,282,586 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,23745,69,288,-362,288 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 17076,19779,330,4311,-26,586 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13173,23745,201,1725,-101,586 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13173,18225,330,588,327,586 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13173,18201,4167,1095,-101,586 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13173,12795,3876,588,327,586 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 12198,24048,201,414,-221,414 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25155,69,4473,-110,586 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 12198,18516,201,1668,-221,586 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,19779,69,4260,-110,586 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20490,24048,375,525,-245,525 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,18375,69,0,282 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20490,23745,375,525,-245,525 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,18225,69,0,282 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 21954,24048,375,555,-371,555 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14637,18375,330,1413,351,586 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16587,24048,69,498,-158,498 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 8781,18375,69,2841,279,586 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16587,23745,69,498,-158,498 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 8781,18225,69,3012,279,586 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,24048,375,1239,855,586 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18375,330,1989,960,586 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,23745,69,2493,-1079,586 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 8295,19710,330,4446,258,586 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,18201,5736,2493,-1079,586 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7806,15654,5193,1212,1509,586 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20490,24048,375,669,-1454,586 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,18375,330,1413,-347,586 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20490,23979,375,669,-1454,586 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,17973,330,372,-347,372 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,24048,201,1014,921,586 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13173,18375,201,795,714,586 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,22896,201,1014,921,586 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13173,17400,201,795,714,586 0 75199 -- MSL 485 ( 9E 191)
-u2070 10245,17700,0,1338,-812,586 0 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,17619,0,1230,-617,586 0 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,17619,0,900,-857,586 0 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,17700,0,672,-1037,586 0 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,17619,0,2151,-1151,586 0 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,17700,0,717,-776,586 0 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,17700,0,987,-1367,586 0 51752 -- MSL 1006 ( 6J 40)
-lq 11220,18375,0,1620,-1310,586 2 161171 -- MSL 1017 (19U 147)
-rq 11220,18375,0,1527,-1217,586 2 161172 -- MSL 1018 (19U 148)
-Bq 11220,2535,4482,0,1782 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 14637,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7317,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,2592,0,0,-467 0 161157 -- MSL 1028 (19U 133)
-vz 13173,18225,201,795,714,586 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,2109,-1475,586 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,237,-938,237 2 51794 -- MSL 1036 ( 6J 82)
-fi 14637,19710,69,876,45,586 2 60077 -- MSL 1040 ( 7J 173)
-fl 14637,19710,69,1137,117,586 2 60078 -- MSL 1041 ( 7J 174)
-ff 14637,19710,69,3714,57,586 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21954,19710,69,876,48,586 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21954,19710,69,1137,120,586 2 51885 -- MSL 1044 ( 6J 173)
-ij 14148,18336,5400,873,-287,586 3 60134 -- MSL 1047 ( 7J 230)
-u2105 27321,17769,264,159,-632,159 0 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19515,23871,375,1158,-668,586 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18165,5400,1656,876,586 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18375,5736,882,855,586 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12795,5193,411,960,411 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7806,22896,69,1458,-248,586 2 46301 -- MSL 1065 ( 5T 221)
-bq 7317,2535,4482,0,1593 0 161154 -- MSL 1067 (19U 130)
-%0 32202,17769,444,0,-2810 0 161161 -- MSL 1068 (19U 137)
-a- 14637,16521,0,0,-3731 0 60154 -- MSL 1084 ( 7J 250)
-ab 14637,18165,0,0,-3656 2 75170 -- MSL 1086 ( 9E 162)
-a. 14637,17400,0,0,-6227 0 75263 -- MSL 1088 ( 9E 255)
-oe 23418,12795,330,696,354,586 0 161180 -- MSL 1090 (19U 156)
-OE 24396,18375,375,1089,-371,586 2 161164 -- MSL 1091 (19U 140)
-fo 6342,10920,0,624,243,586 0 161163 -- MSL 1092 (19U 139)
-fc 6342,10920,0,0,972 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 12198,18069,201,405,1215,405 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,19779,69,2694,1233,586 2 75187 -- MSL 1096 ( 9E 179)
-a" 14637,18375,0,1413,-3644,586 2 75197 -- MSL 1097 ( 9E 189)
-ho 14637,600,3876,0,-6092 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23745,201,1014,921,586 2 75150 -- MSL 1106 ( 9E 142)
-IJ 15126,18069,3657,1026,-248,586 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/OR b/contrib/groff/font/devlj4/OR
deleted file mode 100644
index 288f4f388584..000000000000
--- a/contrib/groff/font/devlj4/OR
+++ /dev/null
@@ -1,863 +0,0 @@
-# CG Omega
-name OR
-spacewidth 7317
-pcltypeface 4113
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3413
-P . -3902
-P , -3902
-V A -4388
-A V -4388
-T o -3902
-T r -3413
-T c -3902
-T e -3902
-T d -3902
-T s -3902
-T y -3902
-T a -3902
-T w -3902
-T u -3902
-L T -3413
-L Y -3413
-Y o -3902
-Y e -3902
-Y a -3902
-A W -3902
-W A -3902
-T A -3413
-V o -3413
-V e -3413
-V a -3413
-Y A -4388
-F A -3413
-F . -3413
-F , -3413
-A T -3413
-A Y -4388
-v . -2924
-v , -2924
-y . -2924
-y , -2924
-T . -3413
-T , -3413
-L W -3413
-P A -2924
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -2924
-W e -2924
-W a -2924
-W . -3902
-W , -3902
-r . -2924
-r , -2924
-w . -1949
-w , -1949
-Y u -2438
-A v -1949
-A y -1949
-A w -1460
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -2438
-O V -2438
-O Y -2438
-O . -2438
-O , -2438
-L y -2924
-L O -2438
-L G -2438
-L C -974
-L Q -2438
-V y -2438
-V u -2438
-V O -2438
-V G -2438
-V C -1460
-V Q -2438
-D T -1949
-D V -1949
-D Y -1949
-D . -1949
-D , -1949
-Y O -2438
-Y G -2438
-Y C -1460
-Y Q -2438
-F o -1460
-F e -1460
-F a -1460
-c . -485
-c , -485
-O A -1460
-O W -1460
-L U -1460
-R T -974
-R V -974
-R Y -974
-R W -974
-G T -1460
-P o -1460
-P g -974
-P e -1460
-P a -1460
-C A -485
-C . -485
-C , -485
-D A -1460
-D W -1460
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-A O -1460
-A G -1460
-A C -974
-A U -1460
-A Q -1460
-W r -1460
-W y -1460
-W u -1460
-W O -1460
-W G -1460
-W C -1460
-W Q -1460
-J A -974
-J . -974
-J , -974
-U A -1460
-U . -1460
-U , -1460
-Q A -1460
-Q W -1460
-f . -485
-f , -485
-T O -2438
-T G -2438
-T C -1460
-T Q -2438
-O X -1460
-L o -1460
-L e -1460
-L q -1460
-G V -1460
-G Y -1460
-G W -1460
-G . -485
-G , -485
-P T -485
-P V -485
-P Y -485
-D X -1460
-B V -1460
-B X -1460
-B A -1460
-B W -1460
-S . -974
-S , -974
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -974
-X Q -1460
-A o -1460
-A e -1460
-Q X -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -974
-K Q -1460
-o v -485
-o y -485
-o x -974
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-g . -485
-g , -485
-p v -485
-p y -485
-p x -974
-c v -485
-c y -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-s . -974
-s , -974
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -974
-x g -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -485
-a y -485
-T i -485
-T S -974
-L a -974
-L S -974
-R o -974
-R y -974
-R O -974
-R G -974
-R C -974
-R U -1460
-R Q -974
-G X -485
-G A -485
-P s -974
-P Z -485
-P X -485
-P W -485
-V i -485
-V S -974
-S T -974
-S V -974
-S Y -974
-S X -974
-S A -974
-S W -974
-Y i -485
-Y S -974
-X a -974
-X u -1460
-X S -974
-A t -1460
-A g -974
-A c -1460
-A d -1460
-A a -974
-A u -1460
-A q -1460
-A S -974
-W i -485
-W S -974
-K c -1460
-K u -1460
-K S -974
-c x -485
-v e -485
-v s -485
-e x -974
-s v -485
-s y -485
-s x -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-k o -485
-k g -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -974
-R e -974
-R a -974
-R u -974
-R S -974
-G Z -485
-P M -485
-P U -485
-Z o -974
-Z e -974
-Z d -974
-Z s -485
-Z y -974
-Z a -974
-Z w -974
-Z u -974
-Z O -974
-Z G -974
-Z C -974
-Z S -974
-Z Q -974
-D Z -974
-B Z -1460
-B J -485
-S Z -974
-A s -485
-J U -485
-U g -485
-U J -485
-K a -974
-o z -485
-p z -485
-c z -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-b z -485
-s z -485
-k t -485
-k s -485
-k f -485
-k u -485
-T U -485
-G J -485
-C U -485
-V U -485
-E U -485
-B o -485
-B h -485
-B l -485
-B r -485
-B i -485
-B e -485
-B y -485
-B a -485
-B u -485
-B O -485
-B H -485
-B N -485
-B M -485
-B L -485
-B R -485
-B G -485
-B I -485
-B P -485
-B C -485
-B E -485
-B D -485
-B B -485
-B S -485
-B F -485
-B U -974
-B Q -485
-B K -485
-Y U -485
-F M -485
-F U -485
-X U -485
-A f -485
-W U -485
-U t -485
-U o -485
-U h -485
-U n -485
-U m -485
-U l -485
-U r -485
-U i -485
-U p -485
-U c -485
-U v -485
-U e -485
-U z -485
-U d -485
-U b -485
-U s -485
-U y -485
-U f -485
-U x -485
-U a -485
-U w -485
-U j -485
-U q -485
-U k -485
-U T -485
-U O -485
-U H -485
-U N -485
-U M -485
-U L -485
-U R -485
-U G -485
-U I -485
-U P -485
-U C -485
-U V -485
-U E -485
-U Z -485
-U D -485
-U B -485
-U S -485
-U Y -485
-U F -485
-U X -485
-U W -485
-U U -974
-U Q -485
-U K -485
-K U -485
-L cq -3413
-L ' -3413
-T hy -3902
-T - -3902
-T en -3902
-T em -3902
-A cq -3902
-A ' -3902
-hy T -3902
-- T -3902
-en T -3902
-em T -3902
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -1460
-p ' -1460
-c cq -485
-c ' -485
-e cq -974
-e ' -974
-b cq -1460
-b ' -1460
-a cq -1460
-a ' -1460
-V hy -2438
-V - -2438
-V en -2438
-V em -2438
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-m cq -1460
-m ' -1460
-R cq -974
-R ' -974
-W hy -1460
-W - -1460
-W en -1460
-W em -1460
-cq d -1460
-' d -1460
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-R hy -974
-R - -974
-R en -974
-R em -974
-k cq -485
-k ' -485
-M cq -485
-M ' -485
-G cq -485
-G ' -485
-Z hy -974
-Z - -974
-Z en -974
-Z em -974
-B cq -485
-B ' -485
-U cq -485
-U ' -485
-cq M -485
-' M -485
-k hy -485
-k - -485
-k en -485
-k em -485
-B hy -485
-B - -485
-B en -485
-B em -485
-U hy -485
-U - -485
-U en -485
-U em -485
-charset
-! 7317,18000,330 2 161057 -- MSL 1 (19U 33)
-dq 10734,18375 2 161058 -- MSL 2 (19U 34)
-" "
-sh 14637,17994,405 2 161059 -- MSL 3 (19U 35)
-# "
-Do 14637,19554,2919 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,17961,510 2 161061 -- MSL 5 (19U 37)
-& 19029,17667,375 0 161062 -- MSL 6 (19U 38)
-cq 7317,18375 2 161170 -- MSL 8 (19U 146)
-' "
-( 7317,18375,3165 2 161064 -- MSL 9 (19U 40)
-) 7317,18375,3165 2 161065 -- MSL 10 (19U 41)
-* 14637,18066 2 161066 -- MSL 11 (19U 42)
-+ 23418,13260,393 0 161067 -- MSL 12 (19U 43)
-, 7317,2718,4923 1 161068 -- MSL 13 (19U 44)
-hy 7317,7275 0 161069 -- MSL 14 (19U 45)
-- "
-. 7317,2715,330 0 161070 -- MSL 15 (19U 46)
-sl 7317,19566,396 2 161071 -- MSL 16 (19U 47)
-/ "
-0 14637,17700,375 0 161072 -- MSL 17 (19U 48)
-1 14637,17700,69 0 161073 -- MSL 18 (19U 49)
-2 14637,17700,201 0 161074 -- MSL 19 (19U 50)
-3 14637,17700,375 0 161075 -- MSL 20 (19U 51)
-4 14637,17394,69 0 161076 -- MSL 21 (19U 52)
-5 14637,17526,375 0 161077 -- MSL 22 (19U 53)
-6 14637,17700,375 0 161078 -- MSL 23 (19U 54)
-7 14637,17526,69 0 161079 -- MSL 24 (19U 55)
-8 14637,17700,375 0 161080 -- MSL 25 (19U 56)
-9 14637,17700,375 0 161081 -- MSL 26 (19U 57)
-: 7317,11805,330 0 161082 -- MSL 27 (19U 58)
-; 7317,11805,4923 1 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 23418,8634 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 10245,18000,330 2 161087 -- MSL 32 (19U 63)
-at 23418,16980,3654 0 161088 -- MSL 33 (19U 64)
-@ "
-A 17565,18000,69 2 161089 -- MSL 34 (19U 65)
-B 16101,18069,69 2 161090 -- MSL 35 (19U 66)
-C 17565,18375,375 2 161091 -- MSL 36 (19U 67)
-D 20490,18069,69 2 161092 -- MSL 37 (19U 68)
-E 13173,18201,201 2 161093 -- MSL 38 (19U 69)
-F 13173,18201,69 2 161094 -- MSL 39 (19U 70)
-G 20490,18375,375 2 161095 -- MSL 40 (19U 71)
-H 20490,18069,69 2 161096 -- MSL 41 (19U 72)
-I 7317,18069,69 2 161097 -- MSL 42 (19U 73)
-J 7317,18069,3855 2 161098 -- MSL 43 (19U 74)
-K 16101,18069,69 2 161099 -- MSL 44 (19U 75)
-L 13173,18069,201 2 161100 -- MSL 45 (19U 76)
-M 23418,18000,69 2 161101 -- MSL 46 (19U 77)
-N 20490,18069,375 2 161102 -- MSL 47 (19U 78)
-O 21954,18375,375 2 161103 -- MSL 48 (19U 79)
-P 14637,18069,69 2 161104 -- MSL 49 (19U 80)
-Q 21954,18375,5400 3 161105 -- MSL 50 (19U 81)
-R 16101,18069,69 2 161106 -- MSL 51 (19U 82)
-S 13173,18375,375 2 161107 -- MSL 52 (19U 83)
-T 14637,18201,69 2 161108 -- MSL 53 (19U 84)
-U 20490,18069,375 2 161109 -- MSL 54 (19U 85)
-V 17565,18069,69 2 161110 -- MSL 55 (19U 86)
-W 26346,18069,69 2 161111 -- MSL 56 (19U 87)
-X 16101,18069,69 2 161112 -- MSL 57 (19U 88)
-Y 16101,18069,69 2 161113 -- MSL 58 (19U 89)
-Z 16101,18201,201 2 161114 -- MSL 59 (19U 90)
-lB 7317,18204,4179 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 7317,19566,396 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 7317,18204,4179 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 7317,18375 2 161169 -- MSL 66 (19U 145)
-` "
-a 12684,12795,330 0 161121 -- MSL 67 (19U 97)
-b 14637,19569,330 2 161122 -- MSL 68 (19U 98)
-c 12684,12795,330 0 161123 -- MSL 69 (19U 99)
-d 14637,19569,330 2 161124 -- MSL 70 (19U 100)
-e 13173,12795,330 0 161125 -- MSL 71 (19U 101)
-f 7317,19710,69 2 161126 -- MSL 72 (19U 102)
-g 13173,12882,5400 1 161127 -- MSL 73 (19U 103)
-h 14637,19569,69 2 161128 -- MSL 74 (19U 104)
-i 7317,18399,69 2 161129 -- MSL 75 (19U 105)
-j 7317,18399,5400 3 161130 -- MSL 76 (19U 106)
-k 13173,19569,69 2 161131 -- MSL 77 (19U 107)
-l 7317,19569,69 2 161132 -- MSL 78 (19U 108)
-m 21954,12795,69 0 161133 -- MSL 79 (19U 109)
-n 14637,12795,69 0 161134 -- MSL 80 (19U 110)
-o 14637,12795,330 0 161135 -- MSL 81 (19U 111)
-p 14637,12795,5469 1 161136 -- MSL 82 (19U 112)
-q 14637,12795,5469 1 161137 -- MSL 83 (19U 113)
-r 8781,12795,69 0 161138 -- MSL 84 (19U 114)
-s 10245,12795,330 0 161139 -- MSL 85 (19U 115)
-t 7317,16185,330 0 161140 -- MSL 86 (19U 116)
-u 14637,12534,330 0 161141 -- MSL 87 (19U 117)
-v 13173,12534,69 0 161142 -- MSL 88 (19U 118)
-w 20490,12534,69 0 161143 -- MSL 89 (19U 119)
-x 13173,12534,69 0 161144 -- MSL 90 (19U 120)
-y 13173,12534,5469 1 161145 -- MSL 91 (19U 121)
-z 13173,12666,201 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 17565,23730,69 2 161216 -- MSL 99 (19U 192)
-^A 17565,23760,69 2 161218 -- MSL 100 (19U 194)
-`E 13173,23730,201 2 161224 -- MSL 101 (19U 200)
-^E 13173,23760,201 2 161226 -- MSL 102 (19U 202)
-:E 13173,22902,201 2 161227 -- MSL 103 (19U 203)
-^I 7317,23760,69 2 161230 -- MSL 104 (19U 206)
-:I 7317,22902,69 2 161231 -- MSL 105 (19U 207)
-aa 14637,18189 2 161204 -- MSL 106 (19U 180)
-ga 14637,18189 2 161120 -- MSL 107 (19U 96)
-a^ 14637,18000 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 14637,17223 0 161192 -- MSL 109 (19U 168)
-~ 14637,16980 0 161176 -- MSL 110 (19U 152)
-a~ "
-`U 20490,23730,375 2 161241 -- MSL 111 (19U 217)
-^U 20490,23760,375 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 16101,23730,69 2 161245 -- MSL 114 (19U 221)
-'y 13173,18189,5469 3 161277 -- MSL 115 (19U 253)
-de 14637,17700 0 161200 -- MSL 116 (19U 176)
-,C 17565,18375,5988 3 161223 -- MSL 117 (19U 199)
-,c 12684,12795,5673 1 161255 -- MSL 118 (19U 231)
-~N 20490,22707,375 2 161233 -- MSL 119 (19U 209)
-~n 14637,16980,69 0 161265 -- MSL 120 (19U 241)
-r! 7317,12696,5634 1 161185 -- MSL 121 (19U 161)
-r? 10245,12696,5634 1 161215 -- MSL 122 (19U 191)
-Cs 14637,15684 0 161188 -- MSL 123 (19U 164)
-Po 14637,17700,201 0 161187 -- MSL 124 (19U 163)
-Ye 14637,17769,69 2 161189 -- MSL 125 (19U 165)
-sc 14637,18000,3633 2 161191 -- MSL 126 (19U 167)
-Fn 14637,19710,69 2 161155 -- MSL 127 (19U 131)
-ct 14637,19155,93 2 161186 -- MSL 128 (19U 162)
-^a 12684,18000,330 2 161250 -- MSL 129 (19U 226)
-^e 13173,18000,330 2 161258 -- MSL 130 (19U 234)
-^o 14637,18000,330 2 161268 -- MSL 131 (19U 244)
-^u 14637,18000,330 2 161275 -- MSL 132 (19U 251)
-'a 12684,18189,330 2 161249 -- MSL 133 (19U 225)
-'e 13173,18189,330 2 161257 -- MSL 134 (19U 233)
-'o 14637,18189,330 2 161267 -- MSL 135 (19U 243)
-'u 14637,18189,330 2 161274 -- MSL 136 (19U 250)
-`a 12684,18189,330 2 161248 -- MSL 137 (19U 224)
-`e 13173,18189,330 2 161256 -- MSL 138 (19U 232)
-`o 14637,18189,330 2 161266 -- MSL 139 (19U 242)
-`u 14637,18189,330 2 161273 -- MSL 140 (19U 249)
-:a 12684,17223,330 0 161252 -- MSL 141 (19U 228)
-:e 13173,17223,330 0 161259 -- MSL 142 (19U 235)
-:o 14637,17223,330 0 161270 -- MSL 143 (19U 246)
-:u 14637,17223,330 0 161276 -- MSL 144 (19U 252)
-oA 17565,23964,69 2 161221 -- MSL 145 (19U 197)
-^i 7317,18000,69 2 161262 -- MSL 146 (19U 238)
-/O 21954,18375,375 2 161240 -- MSL 147 (19U 216)
-AE 21468,18201,201 2 161222 -- MSL 148 (19U 198)
-oa 12684,18045,330 2 161253 -- MSL 149 (19U 229)
-'i 7317,18189,69 2 161261 -- MSL 150 (19U 237)
-/o 14637,12876,330 0 161272 -- MSL 151 (19U 248)
-ae 20490,12795,330 0 161254 -- MSL 152 (19U 230)
-:A 17565,22902,69 2 161220 -- MSL 153 (19U 196)
-`i 7317,18189,69 2 161260 -- MSL 154 (19U 236)
-:O 21954,22902,375 2 161238 -- MSL 155 (19U 214)
-:U 20490,22902,375 2 161244 -- MSL 156 (19U 220)
-'E 13173,23730,201 2 161225 -- MSL 157 (19U 201)
-:i 7317,17223,69 0 161263 -- MSL 158 (19U 239)
-ss 14637,19710,330 2 161247 -- MSL 159 (19U 223)
-^O 21954,23760,375 2 161236 -- MSL 160 (19U 212)
-'A 17565,23730,69 2 161217 -- MSL 161 (19U 193)
-~A 17565,22707,69 2 161219 -- MSL 162 (19U 195)
-~a 12684,16980,330 0 161251 -- MSL 163 (19U 227)
--D 20490,18069,69 2 161232 -- MSL 164 (19U 208)
-Sd 14637,19500,330 2 161264 -- MSL 165 (19U 240)
-'I 7317,23730,69 2 161229 -- MSL 166 (19U 205)
-`I 7317,23730,69 2 161228 -- MSL 167 (19U 204)
-'O 21954,23730,375 2 161235 -- MSL 168 (19U 211)
-`O 21954,23730,375 2 161234 -- MSL 169 (19U 210)
-~O 21954,22707,375 2 161237 -- MSL 170 (19U 213)
-~o 14637,16980,330 0 161269 -- MSL 171 (19U 245)
-vS 13173,23760,375 2 161162 -- MSL 172 (19U 138)
-vs 10245,18183,330 2 161178 -- MSL 173 (19U 154)
-'U 20490,23730,375 2 161242 -- MSL 174 (19U 218)
-:Y 16101,22902,69 2 161183 -- MSL 175 (19U 159)
-:y 13173,17223,5469 1 161279 -- MSL 176 (19U 255)
-TP 14637,18069,69 2 161246 -- MSL 177 (19U 222)
-Tp 14637,19569,5469 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350 0 161205 -- MSL 180 (19U 181)
-ps 14637,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 23418,17700,519 0 161214 -- MSL 182 (19U 190)
-\- 23418,7122 0 60096 -- MSL 183 ( 7J 192)
-14 23418,17700,519 0 161212 -- MSL 184 (19U 188)
-12 23418,17700,519 0 161213 -- MSL 185 (19U 189)
-Of 10734,17700 0 161194 -- MSL 186 (19U 170)
-Om 10734,17700 0 161210 -- MSL 187 (19U 186)
-Fo 9759,10809 0 161195 -- MSL 188 (19U 171)
-Fc 9759,10809 0 161211 -- MSL 190 (19U 187)
-t+- 23418,13260,3132 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 23418,10671 0 161196 -- MSL 194 (19U 172)
-u00AD 7317,7275 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 9759,17700 0 161202 -- MSL 197 (19U 178)
-S3 9759,17700 0 161203 -- MSL 198 (19U 179)
-ac 14637,0,5673 1 161208 -- MSL 199 (19U 184)
-S1 9759,17700 0 161209 -- MSL 200 (19U 185)
-tmu 23418,13137,585 0 161239 -- MSL 201 (19U 215)
-tdi 23418,11139 0 161271 -- MSL 202 (19U 247)
-u203C 13662,18000,330 2 87315 -- MSL 221 (10U 19)
-u20A7 21954,18069,330 2 60121 -- MSL 232 ( 7J 217)
-pc 7317,10407 0 161207 -- MSL 302 (19U 183)
-u013F 13173,18069,201 2 51943 -- MSL 306 ( 6J 231)
-u0140 10245,19569,69 2 51959 -- MSL 307 ( 6J 247)
-u2113 14637,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 20490,18375,69 2 51951 -- MSL 309 ( 6J 239)
-fm 7317,17700 0 60101 -- MSL 310 ( 7J 197)
-sd 14637,17700 0 60102 -- MSL 311 ( 7J 198)
-dg 14637,18213,846 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 14637,18183 2 75169 -- MSL 315 ( 9E 161)
-ao 14637,18045 2 60152 -- MSL 316 ( 7J 248)
-f/ 2439,17637,519 0 60109 -- MSL 324 ( 7J 205)
-em 23418,6867 0 161175 -- MSL 325 (19U 151)
-en 14637,6867 0 161174 -- MSL 326 (19U 150)
-dd 14637,18213,846 2 161159 -- MSL 327 (19U 135)
-.i 7317,12534,69 0 46333 -- MSL 328 ( 5T 253)
-aq 7317,18375 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 12198,17700 0 87548 -- MSL 332 (10U 252)
-u0111 14637,19569,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 17565,23991,69 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 12684,18111,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 17565,18000,4761 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 12684,12795,3885 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,23730,375 2 75206 -- MSL 406 ( 9E 198)
-'c 12684,18189,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,23760,375 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 12684,18183,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 20490,23760,69 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 16587,19710,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 13173,23760,201 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 13173,18183,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 13173,18201,4761 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 13173,12795,4560 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 13173,23730,201 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,25119,69 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 13173,18516,201 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,19710,69 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 20490,23730,375 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,18189,69 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 20490,23760,375 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,18183,69 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 21954,23730,375 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 14637,18189,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16101,23730,69 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 8781,18189,69 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16101,23760,69 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 8781,18183,69 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,23730,375 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18189,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,23760,69 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 8295,19710,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,18201,5988 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7317,16185,5673 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 20490,23730,375 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,18189,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 20490,23964,375 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,18045,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,23730,201 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 13173,18189,201 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,22902,201 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 13173,17223,201 0 75199 -- MSL 485 ( 9E 191)
-u2070 9759,17700 0 51753 -- MSL 1000 ( 6J 41)
-u2074 9759,17562 0 51748 -- MSL 1001 ( 6J 36)
-u2075 9759,17694 0 51749 -- MSL 1002 ( 6J 37)
-u2076 9759,17700 0 51806 -- MSL 1003 ( 6J 94)
-u2077 9759,17655 0 51750 -- MSL 1004 ( 6J 38)
-u2078 9759,17700 0 51754 -- MSL 1005 ( 6J 42)
-u2079 9759,17700 0 51752 -- MSL 1006 ( 6J 40)
-lq 11220,18375 2 161171 -- MSL 1017 (19U 147)
-rq 11220,18375 2 161172 -- MSL 1018 (19U 148)
-Bq 11220,2718,4509 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 14637,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 7317,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,2667 0 161157 -- MSL 1028 (19U 133)
-vz 13173,18183,201 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 14148,19710,69 2 60077 -- MSL 1040 ( 7J 173)
-fl 14148,19779,69 2 60078 -- MSL 1041 ( 7J 174)
-ff 14637,19710,69 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21468,19710,69 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21468,19779,69 2 51885 -- MSL 1044 ( 6J 173)
-ij 14148,18399,5400 3 60134 -- MSL 1047 ( 7J 230)
-u2105 23418,19668,519 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,23991,375 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18111,5400 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18375,5988 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12795,5673 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,22902,69 2 46301 -- MSL 1065 ( 5T 221)
-bq 7317,2718,4509 0 161154 -- MSL 1067 (19U 130)
-%0 32202,17769,444 2 161161 -- MSL 1068 (19U 137)
-a- 14637,16662 0 60154 -- MSL 1084 ( 7J 250)
-ab 14637,18111 2 75170 -- MSL 1086 ( 9E 162)
-a. 14637,17223 0 75263 -- MSL 1088 ( 9E 255)
-oe 23418,12795,330 0 161180 -- MSL 1090 (19U 156)
-OE 24396,18375,375 2 161164 -- MSL 1091 (19U 140)
-fo 5856,10809 0 161163 -- MSL 1092 (19U 139)
-fc 5856,10809 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 13173,18069,201 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,19569,69 2 75187 -- MSL 1096 ( 9E 179)
-a" 14637,18189 2 75197 -- MSL 1097 ( 9E 189)
-ho 14637,1059,3885 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23760,201 2 75150 -- MSL 1106 ( 9E 142)
-IJ 14637,18069,3855 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/S b/contrib/groff/font/devlj4/S
deleted file mode 100644
index 133bfb099636..000000000000
--- a/contrib/groff/font/devlj4/S
+++ /dev/null
@@ -1,319 +0,0 @@
-# CG Times
-name -
-special
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 0
-pclstyle 0
-kernpairs
-*T *A -2924
-*A *T -2924
-*R *A -3902
-*O *T -1949
-*O *A -2438
-*B *T -1949
-*A *O -2438
-*T *O -1949
-*O *X -1460
-*B *X -1460
-*B *A -1949
-*X *O -1460
-*K *O -1460
-*O *Z -485
-*Z *O -485
-*B *Z -485
-*N *A -485
-*K *T -485
-charset
-pl 23418,15750 0 68907 -- MSL 12 ( 8M 43)
-eq 23418,10875 0 68925 -- MSL 30 ( 8M 61)
-*A 19029,18225 2 68929 -- MSL 34 ( 8M 65)
-*B 16587,17895 2 68930 -- MSL 35 ( 8M 66)
-*E 16587,17895 2 68933 -- MSL 38 ( 8M 69)
-*Y 19515,17895 2 68935 -- MSL 41 ( 8M 71)
-*I 8781,17895 2 68937 -- MSL 42 ( 8M 73)
-*K 18540,17895 2 68938 -- MSL 44 ( 8M 74)
-*M 23907,17895 2 68940 -- MSL 46 ( 8M 76)
-*N 19515,17895,330 2 68941 -- MSL 47 ( 8M 77)
-*O 19029,18225,330 2 68943 -- MSL 48 ( 8M 79)
-*R 15126,17895 2 68945 -- MSL 49 ( 8M 81)
-*T 16587,17895 2 68947 -- MSL 53 ( 8M 83)
-*X 19029,17895 2 68950 -- MSL 57 ( 8M 86)
-*Z 17076,17895 2 68934 -- MSL 59 ( 8M 70)
-ap 26346,8952 0 44414 -- MSL 96 ( 5M 126)
-u2592 26346,19758,6588 3 68991 -- MSL 97 ( 8M 127)
-mi 23418,8610 0 68909 -- MSL 183 ( 8M 45)
-u25A0 19029,15624 0 60089 -- MSL 189 ( 7J 185)
-+- 23418,15750,2625 0 69118 -- MSL 191 ( 8M 254)
-no 23418,12165 0 69064 -- MSL 194 ( 8M 200)
-mu 23418,15117 0 68906 -- MSL 201 ( 8M 42)
-di 23418,14010 0 68901 -- MSL 202 ( 8M 37)
-u263A 26346,19500 2 87297 -- MSL 203 (10U 1)
-u263B 26346,19500 2 87298 -- MSL 204 (10U 2)
-HE 26346,19500 2 44457 -- MSL 205 ( 5M 169)
-DI 26346,19500,840 2 44456 -- MSL 206 ( 5M 168)
-CL 26346,18951 2 44455 -- MSL 207 ( 5M 167)
-SP 26346,19851 2 44458 -- MSL 208 ( 5M 170)
-u25CF 19029,16005 0 69068 -- MSL 209 ( 8M 204)
-u25D8 26346,22242,4104 2 87304 -- MSL 210 (10U 8)
-u25D9 26346,22242,4104 2 87306 -- MSL 212 (10U 10)
-u2642 19029,19758 2 87307 -- MSL 213 (10U 11)
-u2640 19029,19758 2 87308 -- MSL 214 (10U 12)
-u266A 13173,19476 2 87309 -- MSL 215 (10U 13)
-u266B 19029,19476,5025 2 87310 -- MSL 216 (10U 14)
-u263C 26346,18777 2 87311 -- MSL 217 (10U 15)
-u25BA 19029,12924 0 87312 -- MSL 218 (10U 16)
-u25C4 19029,12924 0 87313 -- MSL 219 (10U 17)
-va 19029,17670 2 69033 -- MSL 220 ( 8M 169)
-u25AC 26346,5229 0 87318 -- MSL 222 (10U 22)
-u21A8 19029,17670,3891 2 87319 -- MSL 223 (10U 23)
-ua 19029,17670 2 69025 -- MSL 224 ( 8M 161)
-da 19029,17670 2 69027 -- MSL 225 ( 8M 163)
--> 19029,12231 0 69026 -- MSL 226 ( 8M 162)
-<- 19029,12231 0 69028 -- MSL 227 ( 8M 164)
-u221F 23418,12165 0 87324 -- MSL 228 (10U 28)
-<> 19029,12453 0 69034 -- MSL 229 ( 8M 170)
-u25B2 19029,12510 0 87326 -- MSL 230 (10U 30)
-u25BC 19029,12510 0 87327 -- MSL 231 (10U 31)
-u2310 23418,12165 0 87465 -- MSL 233 (10U 169)
-u2591 26346,19758,2196 2 87472 -- MSL 234 (10U 176)
-u2593 26346,19758,6588 3 87474 -- MSL 235 (10U 178)
-u2502 26346,19758,6588 3 128375 -- MSL 236 (15U 119)
-u2524 26346,19758,6588 3 128373 -- MSL 237 (15U 117)
-u2561 26346,19758,6588 3 87477 -- MSL 238 (10U 181)
-u2562 26346,19758,6588 3 87478 -- MSL 239 (10U 182)
-u2556 26346,7410,6588 1 87479 -- MSL 240 (10U 183)
-u2555 26346,9879,6588 1 87480 -- MSL 241 (10U 184)
-u2563 26346,19758,6588 3 87481 -- MSL 242 (10U 185)
-u2551 26346,19758,6588 3 87482 -- MSL 243 (10U 186)
-u2557 26346,9879,6588 1 87483 -- MSL 244 (10U 187)
-u255D 26346,19758 2 87484 -- MSL 245 (10U 188)
-u255C 26346,19758 2 87485 -- MSL 246 (10U 189)
-u255B 26346,19758 2 87486 -- MSL 247 (10U 190)
-u2510 26346,7410,6588 1 128368 -- MSL 248 (15U 112)
-u2514 26346,19758 2 128353 -- MSL 249 (15U 97)
-u2534 26346,19758 2 128374 -- MSL 250 (15U 118)
-u252C 26346,7410,6588 1 128372 -- MSL 251 (15U 116)
-u251C 26346,19758,6588 3 128357 -- MSL 252 (15U 101)
-u2500 26346,7410 0 128358 -- MSL 253 (15U 102)
-u253C 26346,19758,6588 3 128356 -- MSL 254 (15U 100)
-u255E 26346,19758,6588 3 87494 -- MSL 255 (10U 198)
-u255F 26346,19758,6588 3 87495 -- MSL 256 (10U 199)
-u255A 26346,19758 2 87496 -- MSL 257 (10U 200)
-u2554 26346,9879,6588 1 87497 -- MSL 258 (10U 201)
-u2569 26346,19758 2 87498 -- MSL 259 (10U 202)
-u2566 26346,9879,6588 1 87499 -- MSL 260 (10U 203)
-u2560 26346,19758,6588 3 87500 -- MSL 261 (10U 204)
-u2550 26346,9879 0 87501 -- MSL 262 (10U 205)
-u256C 26346,19758,6588 3 87502 -- MSL 263 (10U 206)
-u2567 26346,19758 2 87503 -- MSL 264 (10U 207)
-u2568 26346,19758 2 87504 -- MSL 265 (10U 208)
-u2564 26346,9879,6588 1 87505 -- MSL 266 (10U 209)
-u2565 26346,7410,6588 1 87506 -- MSL 267 (10U 210)
-u2559 26346,19758 2 87507 -- MSL 268 (10U 211)
-u2558 26346,19758 2 87508 -- MSL 269 (10U 212)
-u2552 26346,9879,6588 1 87509 -- MSL 270 (10U 213)
-u2553 26346,7410,6588 1 87510 -- MSL 271 (10U 214)
-u256B 26346,19758,6588 3 87511 -- MSL 272 (10U 215)
-u256A 26346,19758,6588 3 87512 -- MSL 273 (10U 216)
-u2518 26346,19758 2 128369 -- MSL 274 (15U 113)
-u250C 26346,7410,6588 1 128352 -- MSL 275 (15U 96)
-u2588 26346,19758,6588 3 87515 -- MSL 276 (10U 219)
-u2584 26346,6585,6588 1 87516 -- MSL 277 (10U 220)
-u258C 26346,19758,6588 3 87517 -- MSL 278 (10U 221)
-u2590 26346,19758,6588 3 87518 -- MSL 279 (10U 222)
-u2580 26346,19758 2 87519 -- MSL 280 (10U 223)
-if 26346,12846 0 68900 -- MSL 292 ( 8M 36)
-ca 26346,16650 0 69046 -- MSL 295 ( 8M 182)
-== 26346,11634 0 68989 -- MSL 296 ( 8M 125)
->= 26346,15960 0 68958 -- MSL 297 ( 8M 94)
-<= 26346,15960 0 68956 -- MSL 298 ( 8M 92)
-u2320 19029,19758,6588 3 69093 -- MSL 299 ( 8M 229)
-u2321 19029,19758,6588 3 69095 -- MSL 300 ( 8M 231)
-~~ 26346,11172 0 68927 -- MSL 301 ( 8M 63)
-~= "
-md 8781,10407 0 69066 -- MSL 302 ( 8M 202)
-u221A 19029,19935,4647 2 101059 -- MSL 303 (12J 195)
-u25AA 13173,14232 0 60088 -- MSL 305 ( 7J 184)
-u2302 26346,18960 2 87423 -- MSL 333 (10U 127)
-sr 19029,23322 2 68897 -- MSL 500 ( 8M 33)
-sqrt "
-pt 26346,12723 0 68902 -- MSL 501 ( 8M 38)
-u212F 11709,12180,300 0 68922 -- MSL 502 ( 8M 58)
-*e 11709,12705,555 0 68923 -- MSL 503 ( 8M 59)
-tf 26346,16545 0 68928 -- MSL 504 ( 8M 64)
-3d "
-*G 16101,18045 2 68931 -- MSL 505 ( 8M 67)
-*D 17565,18045 2 68932 -- MSL 506 ( 8M 68)
-*H 19029,18450,405 2 68936 -- MSL 507 ( 8M 72)
-*L 17565,18045 2 68939 -- MSL 508 ( 8M 75)
-*C 17565,19335,1752 2 68942 -- MSL 509 ( 8M 78)
-*P 19029,18045 2 68944 -- MSL 510 ( 8M 80)
-*S 16101,18045 2 68946 -- MSL 511 ( 8M 82)
-*U 16101,18450 2 68948 -- MSL 512 ( 8M 84)
-*F 17565,18045 2 68949 -- MSL 513 ( 8M 85)
-*Q 20490,18045 2 68951 -- MSL 514 ( 8M 87)
-*W 16101,18450 2 68952 -- MSL 515 ( 8M 88)
-gr 17565,18045 2 68953 -- MSL 516 ( 8M 89)
-pd 13173,18450,405 2 68954 -- MSL 517 ( 8M 90)
-ts 13173,12600,4734 0 68955 -- MSL 518 ( 8M 91)
-!= 26346,15396,1197 0 68957 -- MSL 519 ( 8M 93)
-u2235 26346,16545 0 68960 -- MSL 521 ( 8M 96)
-*a 16101,11205,405 0 68961 -- MSL 522 ( 8M 97)
-*b 14637,18450,4260 2 68962 -- MSL 523 ( 8M 98)
-*g 14637,11205,5595 1 68963 -- MSL 524 ( 8M 99)
-*d 11709,18450,405 2 68964 -- MSL 525 ( 8M 100)
-+e 10245,11205,405 0 68965 -- MSL 526 ( 8M 101)
-*z 11709,17508,4920 2 68966 -- MSL 527 ( 8M 102)
-*y 13173,11205,5283 1 68967 -- MSL 528 ( 8M 103)
-*h 11709,18450,405 2 68968 -- MSL 529 ( 8M 104)
-*i 7317,10800,405 0 68969 -- MSL 530 ( 8M 105)
-*k 11709,11205,405 0 68970 -- MSL 531 ( 8M 106)
-*l 14637,18450,405 2 68971 -- MSL 532 ( 8M 107)
-*m 14637,10800,5595 1 68972 -- MSL 533 ( 8M 108)
-*n 11709,11205,405 0 68973 -- MSL 534 ( 8M 109)
-*c 13173,18450,4647 2 68974 -- MSL 535 ( 8M 110)
-*o 11709,11205,405 0 68975 -- MSL 536 ( 8M 111)
-*p 16101,11295,405 0 68976 -- MSL 537 ( 8M 112)
-*r 13173,11205,4527 0 68977 -- MSL 538 ( 8M 113)
-*s 13173,11544,405 0 68978 -- MSL 539 ( 8M 114)
-*t 11709,11295,405 0 68979 -- MSL 540 ( 8M 115)
-*u 11709,11205,405 0 68980 -- MSL 541 ( 8M 116)
-*f 16101,17304,4314 2 68981 -- MSL 542 ( 8M 117)
-*x 14637,11205,4734 0 68982 -- MSL 543 ( 8M 118)
-*q 16101,18450,4734 2 68983 -- MSL 544 ( 8M 119)
-*w 16101,11205,405 0 68984 -- MSL 545 ( 8M 120)
-+h 16101,18450,405 2 68985 -- MSL 546 ( 8M 121)
-+f 16101,11205,4608 0 68986 -- MSL 547 ( 8M 122)
-+p 16101,11442,405 0 68987 -- MSL 548 ( 8M 123)
-|= 26346,11436 0 68988 -- MSL 549 ( 8M 124)
-ne 26346,15300,966 0 68990 -- MSL 550 ( 8M 126)
-uA 19029,17553,1536 2 69029 -- MSL 551 ( 8M 165)
-arrowverttp "
-rh 19029,13407 0 69030 -- MSL 552 ( 8M 166)
-rA "
-dA 19029,17553,1536 2 69031 -- MSL 553 ( 8M 167)
-arrowvertbt "
-lh 19029,13407 0 69032 -- MSL 554 ( 8M 168)
-lA "
-vA 19029,17553,1812 2 69035 -- MSL 555 ( 8M 171)
-hA 19029,14346 0 69036 -- MSL 556 ( 8M 172)
-u21C4 26346,17259 2 69037 -- MSL 557 ( 8M 173)
-u21C6 26346,17259 2 69038 -- MSL 558 ( 8M 174)
-u21C0 19029,24993 2 69039 -- MSL 559 ( 8M 175)
-radicalex 19029,23322 2 69040 -- MSL 560 ( 8M 176)
-fa 15612,15153 0 69041 -- MSL 561 ( 8M 177)
-te 11220,15165 0 69042 -- MSL 562 ( 8M 178)
-u22A4 26346,16560 0 69043 -- MSL 563 ( 8M 179)
-pp 26346,16560 0 69044 -- MSL 564 ( 8M 180)
-cu 26346,16650 0 69045 -- MSL 565 ( 8M 181)
-mo 26346,17925 2 69047 -- MSL 566 ( 8M 183)
-u220B 26346,17925 2 69048 -- MSL 567 ( 8M 184)
-nm 26346,20625,2700 2 69049 -- MSL 568 ( 8M 185)
-sb 26346,16290 0 69050 -- MSL 569 ( 8M 186)
-sp 26346,16290 0 69051 -- MSL 570 ( 8M 187)
-nb 26346,18165,1875 2 69052 -- MSL 571 ( 8M 188)
-nc 26346,18165,1875 2 69053 -- MSL 572 ( 8M 189)
-ib 26346,16641 0 69054 -- MSL 573 ( 8M 190)
-ip 26346,16641 0 69055 -- MSL 574 ( 8M 191)
-c+ 26346,18900 2 69056 -- MSL 575 ( 8M 192)
-u2299 26346,18900 2 69057 -- MSL 576 ( 8M 193)
-c* 26346,18900 2 69058 -- MSL 577 ( 8M 194)
-u2296 26346,18900 2 69059 -- MSL 578 ( 8M 195)
-u2298 26346,18900 2 69060 -- MSL 579 ( 8M 196)
-AN 26346,15240 0 69061 -- MSL 580 ( 8M 197)
-OR 26346,15240 0 69062 -- MSL 581 ( 8M 198)
-u22BB 26346,15240,3783 0 69063 -- MSL 582 ( 8M 199)
-u2218 26346,13518 0 69065 -- MSL 583 ( 8M 201)
-ci 26346,18900 2 69069 -- MSL 584 ( 8M 205)
-u22A3 26346,14400 0 69073 -- MSL 585 ( 8M 209)
-u22A2 26346,14400 0 69074 -- MSL 586 ( 8M 210)
-is 26346,20268,5997 3 69077 -- MSL 587 ( 8M 213)
-integral "
-u222E 26346,20268,5997 3 69078 -- MSL 588 ( 8M 214)
-/_ 26346,19365 2 69079 -- MSL 589 ( 8M 215)
-es 26346,18465,435 2 69080 -- MSL 590 ( 8M 216)
-Ah 13173,13980 0 69081 -- MSL 591 ( 8M 217)
-u2136 11709,13980 0 69082 -- MSL 592 ( 8M 218)
-u2137 8781,13980 0 69083 -- MSL 593 ( 8M 219)
-u212D 17565,18255,1890 2 69084 -- MSL 594 ( 8M 220)
-Im 19029,18255,1890 2 69085 -- MSL 595 ( 8M 221)
-Re 20490,18255,1890 2 69086 -- MSL 596 ( 8M 222)
-u2128 16101,18255,5280 3 69087 -- MSL 597 ( 8M 223)
-lc 19029,23322,5124 3 69088 -- MSL 598 ( 8M 224)
-bracketlefttp "
-lf 19029,23322,5124 3 69089 -- MSL 599 ( 8M 225)
-bracketleftbt "
-parenlefttp 19029,22225,3995 3 69090 -- MSL 600 ( 8M 226)
-lt "
-bracelefttp "
-lk 19029,22225,3995 3 69091 -- MSL 601 ( 8M 227)
-braceleftmid "
-parenleftbt 19029,22225,3995 3 69092 -- MSL 602 ( 8M 228)
-lb "
-braceleftbt "
-integralcrvmid 19029,22225,6588 3 69094 -- MSL 603 ( 8M 230)
-arrowvertex 19029,23322,6588 3 69097 -- MSL 605 ( 8M 233)
-rc 19029,23322,5124 3 69104 -- MSL 608 ( 8M 240)
-bracketrighttp "
-rf 19029,23322,5124 3 69105 -- MSL 609 ( 8M 241)
-bracketrightbt "
-rt 19029,22225,3995 3 69106 -- MSL 610 ( 8M 242)
-parenrighttp "
-bracerighttp "
-rk 19029,22225,3995 3 69107 -- MSL 611 ( 8M 243)
-bracerightmid "
-rb 19029,22225,3995 3 69108 -- MSL 612 ( 8M 244)
-parenrightbt "
-bracerightbt "
-parenrightex 19029,22225,3995 3 69109 -- MSL 613 ( 8M 245)
-parenleftex "
-bv "
-bracerightex "
-braceleftex "
-braceex "
-bracketrightex 19029,22225,3995 3 69110 -- MSL 614 ( 8M 246)
-bracketleftex "
-barex "
-u23B7 19029,23322,5298 3 69111 -- MSL 615 ( 8M 247)
--+ 26346,18366 2 69117 -- MSL 620 ( 8M 253)
-la 8781,21000,4950 2 44513 -- MSL 621 ( 5M 225)
-ra 8781,21000,4950 2 44529 -- MSL 622 ( 5M 241)
-=~ 26346,14187 0 69103 -- MSL 624 ( 8M 239)
-u2197 19029,17445,1557 2 128308 -- MSL 625 (15U 52)
-u2198 19029,17445,1557 2 128309 -- MSL 626 (15U 53)
-u2199 19029,17445,1557 2 128310 -- MSL 627 (15U 54)
-u2196 19029,17445,1557 2 128311 -- MSL 628 (15U 55)
-u25B5 19029,13242 0 128312 -- MSL 629 (15U 56)
-u25B9 19029,13377 0 128313 -- MSL 630 (15U 57)
-u25BF 19029,13242 0 128314 -- MSL 631 (15U 58)
-u25C3 19029,13377 0 128315 -- MSL 632 (15U 59)
-<< 26346,15294,1086 0 128316 -- MSL 633 (15U 60)
->> 26346,15294,1086 0 128318 -- MSL 634 (15U 62)
-u2237 26346,16545 0 128320 -- MSL 635 (15U 64)
-u225C 19029,13242,2751 0 128321 -- MSL 636 (15U 65)
-u03DD 15126,13008,6534 1 128326 -- MSL 637 (15U 70)
-hbar 15126,18564,486 2 128328 -- MSL 638 (15U 72)
--h "
-u2112 21954,20142 2 128332 -- MSL 639 (15U 76)
-wp 17076,13026,4218 0 44483 -- MSL 641 ( 5M 195)
-sum 26346,17925,5160 3 44517 -- MSL 642 ( 5M 229)
-u27E6 19029,20838,4077 2 128347 -- MSL 643 (15U 91)
-u27E7 19029,20838,4077 2 128349 -- MSL 645 (15U 93)
-u256D 26346,7410,6588 1 128354 -- MSL 646 (15U 98)
-u2570 26346,19758 2 128355 -- MSL 647 (15U 99)
-lz 26346,17844,294 2 44512 -- MSL 654 ( 5M 224)
-u256E 26346,7410,6588 1 128370 -- MSL 655 (15U 114)
-u256F 26346,19758 2 128371 -- MSL 656 (15U 115)
-u25C6 26346,16536 0 128381 -- MSL 662 (15U 125)
-st 12198,12846,396 0 69076 -- MSL 663 ( 8M 212)
-** 26346,13275 0 69102 -- MSL 664 ( 8M 238)
-an 19029,8676 0 69100 -- MSL 665 ( 8M 236)
-u221F 26346,23184 2 69075 -- MSL 668 ( 8M 211)
-CR 26346,12165 0 44479 -- MSL 1099 ( 5M 191)
-u25AB 13173,14226 0 60090 -- MSL 1108 ( 7J 186)
-u25E6 13173,14226 0 60086 -- MSL 1109 ( 7J 182)
-u25CB 19029,16008 0 60087 -- MSL 1110 ( 7J 183)
-u21B5 17337,20865 2 109211 -- MSL 1112 (13J 155)
-u2423 13173,3141,6369 1 109213 -- MSL 1114 (13J 157)
diff --git a/contrib/groff/font/devlj4/SYMBOL b/contrib/groff/font/devlj4/SYMBOL
deleted file mode 100644
index 1b7cfe0ccd0e..000000000000
--- a/contrib/groff/font/devlj4/SYMBOL
+++ /dev/null
@@ -1,220 +0,0 @@
-# M Symbol
-name SYMBOL
-spacewidth 6615
-pcltypeface 16686
-pclproportional 1
-pclweight 0
-pclstyle 0
-charset
-! 8811,17919,362 2 159009 -- HP PUA U+F021 (19M 33)
-fa 18862,17518 2 159010 -- HP PUA U+F022 (19M 34)
-sh 13229,17919,362 2 159011 -- HP PUA U+F023 (19M 35)
-# "
-te 14521,17518 2 159012 -- HP PUA U+F024 (19M 36)
-% 22040,17919,723 2 159013 -- HP PUA U+F025 (19M 37)
-& 20580,17919,400 2 159014 -- HP PUA U+F026 (19M 38)
-st 11614,12196,413 0 159015 -- HP PUA U+F027 (19M 39)
-( 8811,18371,5710 3 159016 -- HP PUA U+F028 (19M 40)
-) 8811,18371,5710 3 159017 -- HP PUA U+F029 (19M 41)
-** 13229,14121 0 159018 -- HP PUA U+F02A (19M 42)
-pl 14521,13565 0 159019 -- HP PUA U+F02B (19M 43)
-, 6615,2584,4405 0 159020 -- HP PUA U+F02C (19M 44)
-mi 14521,7441 0 159021 -- HP PUA U+F02D (19M 45)
-. 6615,2506,375 0 159022 -- HP PUA U+F02E (19M 46)
-sl 7351,18371,362 2 159023 -- HP PUA U+F02F (19M 47)
-/ "
-0 13229,17880,362 2 159024 -- HP PUA U+F030 (19M 48)
-1 13229,17880 2 159025 -- HP PUA U+F031 (19M 49)
-2 13229,17880 2 159026 -- HP PUA U+F032 (19M 50)
-3 13229,17880,362 2 159027 -- HP PUA U+F033 (19M 51)
-4 13229,17880 2 159028 -- HP PUA U+F034 (19M 52)
-5 13229,17518,362 2 159029 -- HP PUA U+F035 (19M 53)
-6 13229,17880,362 2 159030 -- HP PUA U+F036 (19M 54)
-7 13229,17518,362 2 159031 -- HP PUA U+F037 (19M 55)
-8 13229,17880,362 2 159032 -- HP PUA U+F038 (19M 56)
-9 13229,17880,362 2 159033 -- HP PUA U+F039 (19M 57)
-: 7351,12196,362 0 159034 -- HP PUA U+F03A (19M 58)
-; 7351,12183,4405 0 159035 -- HP PUA U+F03B (19M 59)
-< 14521,13565 0 159036 -- HP PUA U+F03C (19M 60)
-= 14521,9831 0 159037 -- HP PUA U+F03D (19M 61)
-> 14521,13565 0 159038 -- HP PUA U+F03E (19M 62)
-? 11743,17919,349 2 159039 -- HP PUA U+F03F (19M 63)
-=~ 14521,13500 0 159040 -- HP PUA U+F040 (19M 64)
-*A 19107,17919 2 159041 -- HP PUA U+F041 (19M 65)
-*B 17648,17518 2 159042 -- HP PUA U+F042 (19M 66)
-*X 19107,17518 2 159043 -- HP PUA U+F043 (19M 67)
-*D 16188,17919 2 159044 -- HP PUA U+F044 (19M 68)
-*E 16162,17518 2 159045 -- HP PUA U+F045 (19M 69)
-*F 20193,17518 2 159046 -- HP PUA U+F046 (19M 70)
-*G 15955,17518 2 159047 -- HP PUA U+F047 (19M 71)
-*Y 19107,17518 2 159048 -- HP PUA U+F048 (19M 72)
-*I 8811,17518 2 159049 -- HP PUA U+F049 (19M 73)
-+h 16691,18371,400 2 159050 -- HP PUA U+F04A (19M 74)
-*K 19107,17518 2 159051 -- HP PUA U+F04B (19M 75)
-*L 18151,17919 2 159052 -- HP PUA U+F04C (19M 76)
-*M 23526,17518 2 159053 -- HP PUA U+F04D (19M 77)
-*N 19107,17518,284 2 159054 -- HP PUA U+F04E (19M 78)
-*O 19107,17919,400 2 159055 -- HP PUA U+F04F (19M 79)
-*P 20322,17518 2 159056 -- HP PUA U+F050 (19M 80)
-*H 19611,17919,400 2 159057 -- HP PUA U+F051 (19M 81)
-*R 14715,17518 2 159058 -- HP PUA U+F052 (19M 82)
-*S 15658,17518 2 159059 -- HP PUA U+F053 (19M 83)
-*T 16162,17518 2 159060 -- HP PUA U+F054 (19M 84)
-*U 18255,17518 2 159061 -- HP PUA U+F055 (19M 85)
-ts 11614,12183,5710 1 159062 -- HP PUA U+F056 (19M 86)
-*W 20322,17919 2 159063 -- HP PUA U+F057 (19M 87)
-*C 17066,17518 2 159064 -- HP PUA U+F058 (19M 88)
-*Q 21032,17725 2 159065 -- HP PUA U+F059 (19M 89)
-*Z 16162,17518 2 159066 -- HP PUA U+F05A (19M 90)
-lB 8811,17919,5245 3 159067 -- HP PUA U+F05B (19M 91)
-[ "
-tf 22828,13139 0 159068 -- HP PUA U+F05C (19M 92)
-3d "
-rB 8811,17919,5245 3 159069 -- HP PUA U+F05D (19M 93)
-] "
-pp 17415,17518 2 159070 -- HP PUA U+F05E (19M 94)
-_ 13229,0,5710 1 159071 -- HP PUA U+F05F (19M 95)
---- 13229,24146 2 159072 -- HP PUA U+F060 (19M 96)
-*a 16691,12183,413 0 159073 -- HP PUA U+F061 (19M 97)
-*b 14521,18371,5710 3 159074 -- HP PUA U+F062 (19M 98)
-*x 14521,12054,5710 1 159075 -- HP PUA U+F063 (19M 99)
-*d 13074,18371,400 2 159076 -- HP PUA U+F064 (19M 100)
-*e 11614,12196,400 0 159077 -- HP PUA U+F065 (19M 101)
-+f 13785,18371,5710 3 159078 -- HP PUA U+F066 (19M 102)
-*g 10878,12054,5710 1 159079 -- HP PUA U+F067 (19M 103)
-*y 15955,12183,5710 1 159080 -- HP PUA U+F068 (19M 104)
-*i 8707,12183,400 0 159081 -- HP PUA U+F069 (19M 105)
-*f 15955,12183,5710 1 159082 -- HP PUA U+F06A (19M 106)
-*k 14521,12183 0 159083 -- HP PUA U+F06B (19M 107)
-*l 14521,18371,258 2 159084 -- HP PUA U+F06C (19M 108)
-*m 15245,11834,5710 1 159085 -- HP PUA U+F06D (19M 109)
-*n 13785,12196,362 0 159086 -- HP PUA U+F06E (19M 110)
-*o 14521,12183,400 0 159087 -- HP PUA U+F06F (19M 111)
-*p 14521,11834,400 0 159088 -- HP PUA U+F070 (19M 112)
-*h 13785,18371,400 2 159089 -- HP PUA U+F071 (19M 113)
-*r 14521,12196,5710 1 159090 -- HP PUA U+F072 (19M 114)
-*s 15955,11834,400 0 159091 -- HP PUA U+F073 (19M 115)
-*t 11614,11834,400 0 159092 -- HP PUA U+F074 (19M 116)
-*u 15245,12183,400 0 159093 -- HP PUA U+F075 (19M 117)
-+p 18862,11834,400 0 159094 -- HP PUA U+F076 (19M 118)
-*w 18151,12183,400 0 159095 -- HP PUA U+F077 (19M 119)
-*c 13048,18371,5710 3 159096 -- HP PUA U+F078 (19M 120)
-*q 18151,12196,5710 1 159097 -- HP PUA U+F079 (19M 121)
-*z 13074,18281,5814 3 159098 -- HP PUA U+F07A (19M 122)
-lC 12699,18371,5710 3 159099 -- HP PUA U+F07B (19M 123)
-{ "
-ba 5297,18371,5710 3 159100 -- HP PUA U+F07C (19M 124)
-| "
-rC 12699,18371,5710 3 159101 -- HP PUA U+F07D (19M 125)
-} "
-ap 14521,8888 0 159102 -- HP PUA U+F07E (19M 126)
-u03D2 16407,17919 2 159137 -- HP PUA U+F0A1 (19M 161)
-fm 6537,17919 2 159138 -- HP PUA U+F0A2 (19M 162)
-<= 14521,16420 0 159139 -- HP PUA U+F0A3 (19M 163)
-f/ 4418,17880,698 2 159140 -- HP PUA U+F0A4 (19M 164)
-if 18862,12196 0 159141 -- HP PUA U+F0A5 (19M 165)
-u0192 13229,18371,5710 3 159142 -- HP PUA U+F0A6 (19M 166)
-CL 19921,14599 0 159143 -- HP PUA U+F0A7 (19M 167)
-DI 19921,14922,400 0 159144 -- HP PUA U+F0A8 (19M 168)
-HE 19921,14340,400 0 159145 -- HP PUA U+F0A9 (19M 169)
-SP 19921,15232 0 159146 -- HP PUA U+F0AA (19M 170)
-<> 27569,13190,362 0 159147 -- HP PUA U+F0AB (19M 171)
-<- 26110,13190,362 0 159148 -- HP PUA U+F0AC (19M 172)
-ua 15955,23810,362 2 159149 -- HP PUA U+F0AD (19M 173)
--> 26110,13190,362 0 159150 -- HP PUA U+F0AE (19M 174)
-da 15955,23810,362 2 159151 -- HP PUA U+F0AF (19M 175)
-de 10581,17906 2 159152 -- HP PUA U+F0B0 (19M 176)
-+- 14521,16407 0 159153 -- HP PUA U+F0B1 (19M 177)
-sd 10878,17919 2 159154 -- HP PUA U+F0B2 (19M 178)
->= 14521,16420 0 159155 -- HP PUA U+F0B3 (19M 179)
-mu 14521,12454 0 159156 -- HP PUA U+F0B4 (19M 180)
-pt 18862,12196 0 159157 -- HP PUA U+F0B5 (19M 181)
-pd 13074,18371,400 2 159158 -- HP PUA U+F0B6 (19M 182)
-u2219 12170,12170 0 159159 -- HP PUA U+F0B7 (19M 183)
-di 14521,12338 0 159160 -- HP PUA U+F0B8 (19M 184)
-!= 14521,13565 0 159161 -- HP PUA U+F0B9 (19M 185)
-== 14521,11201 0 159162 -- HP PUA U+F0BA (19M 186)
-~~ 14521,11395 0 159163 -- HP PUA U+F0BB (19M 187)
-~= "
-u2026 26458,2506,375 0 159164 -- HP PUA U+F0BC (19M 188)
-u23D0 15955,26600,3139 2 159165 -- HP PUA U+F0BD (19M 189)
-u23AF 26458,7041 0 159166 -- HP PUA U+F0BE (19M 190)
-CR 17415,16420,400 0 159167 -- HP PUA U+F0BF (19M 191)
-Ah 21782,17919,400 2 159168 -- HP PUA U+F0C0 (19M 192)
-Im 18151,17919,400 2 159169 -- HP PUA U+F0C1 (19M 193)
-Re 21032,18151,543 2 159170 -- HP PUA U+F0C2 (19M 194)
-wp 26110,13668,5710 1 159171 -- HP PUA U+F0C3 (19M 195)
-c* 20322,17919,400 2 159172 -- HP PUA U+F0C4 (19M 196)
-c+ 20322,17919,400 2 159173 -- HP PUA U+F0C5 (19M 197)
-es 21782,18875,620 2 159174 -- HP PUA U+F0C6 (19M 198)
-ca 20322,13203 0 159175 -- HP PUA U+F0C7 (19M 199)
-cu 20322,13203 0 159176 -- HP PUA U+F0C8 (19M 200)
-sp 18862,11834 0 159177 -- HP PUA U+F0C9 (19M 201)
-ip 18862,11834,3785 0 159178 -- HP PUA U+F0CA (19M 202)
-nb 18862,13888,2015 0 159179 -- HP PUA U+F0CB (19M 203)
-sb 18862,11834 0 159180 -- HP PUA U+F0CC (19M 204)
-ib 18862,11834,3785 0 159181 -- HP PUA U+F0CD (19M 205)
-mo 18862,11834 0 159182 -- HP PUA U+F0CE (19M 206)
-nm 18862,13888,1860 0 159183 -- HP PUA U+F0CF (19M 207)
-/_ 20322,17919 2 159184 -- HP PUA U+F0D0 (19M 208)
-gr 18862,17518,400 2 159185 -- HP PUA U+F0D1 (19M 209)
---- 20903,17932,413 2 159186 -- HP PUA U+F0D2 (19M 210)
---- 20903,17932,413 2 159187 -- HP PUA U+F0D3 (19M 211)
---- 23552,17518 2 159188 -- HP PUA U+F0D4 (19M 212)
-product 21782,19585,2635 2 159189 -- HP PUA U+F0D5 (19M 213)
-sqrt 14521,24146,1008 2 159190 -- HP PUA U+F0D6 (19M 214)
-sr "
-u22C5 6615,8204 0 159191 -- HP PUA U+F0D7 (19M 215)
-no 18862,7312 0 159192 -- HP PUA U+F0D8 (19M 216)
-AN 15955,11834 0 159193 -- HP PUA U+F0D9 (19M 217)
-OR 15955,11834 0 159194 -- HP PUA U+F0DA (19M 218)
-hA 27569,13177,362 0 159195 -- HP PUA U+F0DB (19M 219)
-lh 26110,13177,362 0 159196 -- HP PUA U+F0DC (19M 220)
-lA "
-uA 15955,23797,362 2 159197 -- HP PUA U+F0DD (19M 221)
-arrowverttp "
-rh 26110,13177,362 0 159198 -- HP PUA U+F0DE (19M 222)
-rA "
-dA 15955,23797,362 2 159199 -- HP PUA U+F0DF (19M 223)
-arrowvertbt "
-lz 13074,18371 2 159200 -- HP PUA U+F0E0 (19M 224)
-la 8707,18371,4858 2 159201 -- HP PUA U+F0E1 (19M 225)
---- 20903,17932,413 2 159202 -- HP PUA U+F0E2 (19M 226)
---- 20903,17932,413 2 159203 -- HP PUA U+F0E3 (19M 227)
---- 20800,17518 2 159204 -- HP PUA U+F0E4 (19M 228)
-sum 18862,19598,2635 2 159205 -- HP PUA U+F0E5 (19M 229)
-parenlefttp 10154,24508,2145 2 159206 -- HP PUA U+F0E6 (19M 230)
-parenleftex 10154,24508,2145 2 159207 -- HP PUA U+F0E7 (19M 231)
-parenleftbt 10154,24508,2145 2 159208 -- HP PUA U+F0E8 (19M 232)
-bracketlefttp 10154,24508,2145 2 159209 -- HP PUA U+F0E9 (19M 233)
-lc "
-bracketleftex 10154,24508,2145 2 159210 -- HP PUA U+F0EA (19M 234)
-bracketleftbt 10154,24508,2145 2 159211 -- HP PUA U+F0EB (19M 235)
-lf "
-bracelefttp 13074,24508,2157 2 159212 -- HP PUA U+F0EC (19M 236)
-lt "
-braceleftex 13074,24508,2145 2 159213 -- HP PUA U+F0ED (19M 237)
-lk "
-braceleftbt 13074,24508,2157 2 159214 -- HP PUA U+F0EE (19M 238)
-lb "
-u23AA 13074,24508,2145 2 159215 -- HP PUA U+F0EF (19M 239)
-ra 8707,18371,4858 2 159217 -- HP PUA U+F0F1 (19M 241)
-is 7248,24068,2842 2 159218 -- HP PUA U+F0F2 (19M 242)
-integral "
-u2320 18151,24508,2157 2 159219 -- HP PUA U+F0F3 (19M 243)
-u23AE 18151,25670,2351 2 159220 -- HP PUA U+F0F4 (19M 244)
-u2321 18151,24495,2157 2 159221 -- HP PUA U+F0F5 (19M 245)
-parenrighttp 10154,24508,2145 2 159222 -- HP PUA U+F0F6 (19M 246)
-parenrightex 10154,24508,2145 2 159223 -- HP PUA U+F0F7 (19M 247)
-parenrightbt 10154,24508,2145 2 159224 -- HP PUA U+F0F8 (19M 248)
-bracketrighttp 10154,24508,2145 2 159225 -- HP PUA U+F0F9 (19M 249)
-rc "
-bracketrightex 10154,24508,2145 2 159226 -- HP PUA U+F0FA (19M 250)
-bracketrightbt 10154,24508,2145 2 159227 -- HP PUA U+F0FB (19M 251)
-rf "
-bracerighttp 13074,24508,2157 2 159228 -- HP PUA U+F0FC (19M 252)
-rt "
-bracerightex 13074,24508,2145 2 159229 -- HP PUA U+F0FD (19M 253)
-rk "
-bracerightbt 13074,24508,2157 2 159230 -- HP PUA U+F0FE (19M 254)
-rb "
diff --git a/contrib/groff/font/devlj4/TB b/contrib/groff/font/devlj4/TB
deleted file mode 100644
index bcea6fce501d..000000000000
--- a/contrib/groff/font/devlj4/TB
+++ /dev/null
@@ -1,953 +0,0 @@
-# CG Times Bd
-name TB
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3413
-P . -4388
-P , -4388
-V A -4877
-A V -4877
-T o -2924
-T r -1460
-T c -2438
-T e -2924
-T d -2924
-T s -2438
-T y -1460
-T a -2924
-T w -1460
-T u -1460
-T J -1460
-L T -2438
-L Y -3413
-Y o -4877
-Y e -4877
-Y a -4877
-Y J -1460
-A W -4388
-W A -4388
-T A -2438
-V o -3902
-V e -3902
-V a -3902
-Y A -3902
-F A -3902
-F . -3902
-F , -3902
-A T -2438
-A Y -3902
-v . -3413
-v , -3413
-y . -3413
-y , -3413
-T . -2438
-T , -2438
-L W -3413
-P A -3413
-V J -1460
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -3413
-W e -3413
-W a -3413
-W . -3902
-W , -3902
-r . -3413
-r , -3413
-w . -3413
-w , -3413
-Y u -3413
-A v -3413
-A y -3413
-A w -3413
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -485
-b , -485
-O T -1460
-O V -2438
-O Y -2924
-O . -2924
-O , -2924
-L y -1949
-L O -974
-L G -974
-L C -974
-L Q -974
-P J -974
-V y -2438
-V u -2438
-V O -2438
-V G -2438
-V C -2438
-V Q -2438
-D T -1460
-D V -2438
-D Y -2924
-D . -2924
-D , -2924
-Y O -2924
-Y G -2924
-Y C -2924
-Y Q -2924
-F o -1949
-F e -1949
-F a -1949
-c . -974
-c , -974
-O A -2438
-O W -1949
-L U -1460
-R T -1949
-R V -1949
-R Y -1949
-R W -1949
-G T -1460
-P o -974
-P g -974
-P e -974
-P a -974
-C A -2438
-C . -2438
-C , -2438
-D A -2438
-D W -1949
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-F J -1460
-A O -2438
-A G -2438
-A C -2438
-A U -2438
-A Q -2438
-W r -1949
-W y -1949
-W u -1949
-W O -1949
-W G -1949
-W C -1949
-W J -1460
-W Q -1949
-J A -1460
-J . -1460
-J , -1460
-U A -2438
-U . -2438
-U , -2438
-Q A -2438
-Q W -1949
-T O -1460
-T G -1460
-T C -1460
-T Q -1460
-O X -1949
-L o -974
-L e -974
-L q -974
-G V -1460
-G Y -1460
-G W -1460
-G . -1460
-G , -1460
-P T -485
-P V -485
-P Y -485
-C T -974
-C V -974
-C Y -974
-D X -1949
-B V -1460
-B X -1460
-B A -1460
-B W -1460
-S . -1460
-S , -1460
-F r -485
-F y -485
-F u -485
-F O -485
-F G -485
-F C -485
-F Q -485
-X o -1460
-X e -1460
-X y -1949
-X O -1949
-X G -1949
-X C -1949
-X Q -1949
-A o -1460
-A e -1460
-Q X -1949
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -974
-o x -974
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -485
-g . -1460
-g , -1460
-c v -974
-c y -974
-c w -974
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -974
-e y -974
-b v -485
-b y -485
-b w -485
-s . -974
-s , -974
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-f g -485
-x o -974
-x g -485
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -974
-a y -974
-a w -974
-w o -974
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-T i -974
-T S -1460
-L a -974
-L S -485
-R o -974
-R y -974
-R O -974
-R G -974
-R C -974
-R U -1460
-R Q -974
-G X -1460
-G A -1460
-P s -974
-P Z -485
-P X -485
-P W -485
-C X -974
-C W -974
-C J -485
-V i -974
-V S -1460
-S T -485
-S V -485
-S Y -485
-S X -485
-S A -1460
-S W -485
-Y i -974
-Y S -1460
-X a -974
-X u -974
-X S -485
-A t -974
-A g -485
-A c -974
-A d -1460
-A a -974
-A u -974
-A q -1460
-A S -485
-W i -974
-W S -1460
-K c -974
-K u -974
-K S -485
-t g -485
-t . -485
-t , -485
-o f -485
-h w -974
-n w -974
-m w -974
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-c f -485
-c x -974
-v e -974
-v s -974
-e f -485
-e x -974
-e w -974
-b f -485
-s v -485
-s y -485
-s f -485
-s x -485
-s w -485
-y e -974
-y s -974
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-w e -974
-w s -974
-k o -485
-k g -485
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -485
-N . -485
-N , -485
-R e -974
-R a -974
-R u -974
-R S -485
-G Z -485
-P U -485
-C Z -974
-E t -485
-E o -485
-E g -485
-E c -485
-E v -485
-E e -485
-E d -485
-E y -485
-E f -485
-E a -485
-E w -485
-E u -485
-E q -485
-E O -485
-E G -485
-E C -485
-E S -485
-E J -485
-E Q -485
-E . -485
-E , -485
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -974
-Z a -485
-Z w -974
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-F i -485
-F j -974
-F S -485
-A s -485
-U g -485
-U J -485
-K a -974
-t o -485
-t c -485
-t e -485
-t d -485
-t s -485
-t a -485
-t j -485
-t q -485
-o z -485
-r s -485
-r j -485
-c z -485
-v j -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-b z -485
-s z -485
-y j -485
-w j -485
-k t -485
-k s -485
-k u -485
-N A -485
-C t -485
-C o -485
-C h -485
-C l -485
-C r -485
-C i -485
-C e -485
-C y -485
-C a -485
-C u -485
-C O -485
-C H -485
-C N -485
-C M -485
-C L -485
-C R -485
-C G -485
-C I -485
-C P -485
-C C -485
-C E -485
-C D -485
-C B -485
-C S -485
-C F -485
-C U -974
-C Q -485
-C K -485
-E n -485
-E m -485
-E l -485
-E r -485
-E i -485
-E p -485
-E z -485
-E b -485
-E s -485
-E x -485
-E j -485
-E k -485
-E T -485
-E H -485
-E N -485
-E M -485
-E L -485
-E R -485
-E I -485
-E P -485
-E V -485
-E E -485
-E Z -485
-E D -485
-E B -485
-E Y -485
-E F -485
-E X -485
-E A -485
-E W -485
-E U -485
-E K -485
-B U -485
-U t -485
-U o -485
-U n -485
-U m -485
-U r -485
-U i -485
-U p -485
-U c -485
-U v -485
-U e -485
-U z -485
-U d -485
-U s -485
-U y -485
-U f -485
-U x -485
-U a -485
-U w -485
-U j -485
-U q -485
-U O -485
-U G -485
-U C -485
-U S -485
-U Q -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -3413
-L ' -3413
-T hy -1460
-T - -1460
-T en -1460
-T em -1460
-A cq -3413
-A ' -3413
-hy T -1460
-- T -1460
-en T -1460
-em T -1460
-Y hy -3413
-Y - -3413
-Y en -3413
-Y em -3413
-c cq -974
-c ' -974
-e cq -974
-e ' -974
-b cq -485
-b ' -485
-a cq -1460
-a ' -1460
-V hy -2438
-V - -2438
-V en -2438
-V em -2438
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -974
-R ' -974
-W hy -1949
-W - -1949
-W en -1949
-W em -1949
-cq d -1460
-' d -1460
-s cq -485
-s ' -485
-L hy -974
-L - -974
-L en -974
-L em -974
-F hy -485
-F - -485
-F en -485
-F em -485
-X hy -1949
-X - -1949
-X en -1949
-X em -1949
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1949
-- X -1949
-hy A -1949
-- A -1949
-en X -1949
-en A -1949
-em X -1949
-R hy -974
-R - -974
-R en -974
-R em -974
-K cq -485
-K ' -485
-t g -485
-b f -485
-k cq -485
-k ' -485
-C cq -485
-C ' -485
-E cq -485
-E ' -485
-E hy -485
-E - -485
-E en -485
-E em -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-k hy -485
-k - -485
-k en -485
-k em -485
-C hy -485
-C - -485
-C en -485
-C em -485
-U hy -485
-U - -485
-U en -485
-U em -485
-charset
-! 8781,18045,405 2 161057 -- MSL 1 (19U 33)
-dq 12198,18450 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,18450,405 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19755,2610 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,18237,405 2 161061 -- MSL 5 (19U 37)
-& 21954,18045,405 2 161062 -- MSL 6 (19U 38)
-cq 8781,18450 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18450,4305 2 161064 -- MSL 9 (19U 40)
-) 8781,18450,4305 2 161065 -- MSL 10 (19U 41)
-* 13173,18450 2 161066 -- MSL 11 (19U 42)
-+ 23418,15975 0 161067 -- MSL 12 (19U 43)
-, 8781,4380,4560 0 161068 -- MSL 13 (19U 44)
-hy 8781,7740 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,4125,405 0 161070 -- MSL 15 (19U 46)
-sl 8781,18450,405 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,18450,405 2 161072 -- MSL 17 (19U 48)
-1 13173,18450 2 161073 -- MSL 18 (19U 49)
-2 13173,18450 2 161074 -- MSL 19 (19U 50)
-3 13173,18450,405 2 161075 -- MSL 20 (19U 51)
-4 13173,18450 2 161076 -- MSL 21 (19U 52)
-5 13173,18045,405 2 161077 -- MSL 22 (19U 53)
-6 13173,18450,405 2 161078 -- MSL 23 (19U 54)
-7 13173,18045 2 161079 -- MSL 24 (19U 55)
-8 13173,18450,405 2 161080 -- MSL 25 (19U 56)
-9 13173,18450,405 2 161081 -- MSL 26 (19U 57)
-: 8781,12549,405 0 161082 -- MSL 27 (19U 58)
-; 8781,12549,4560 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 23418,11370 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 13173,18045,405 2 161087 -- MSL 32 (19U 63)
-at 23418,16950,4131 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19029,18450 2 161089 -- MSL 34 (19U 65)
-B 17565,18045 2 161090 -- MSL 35 (19U 66)
-C 19029,18450,405 2 161091 -- MSL 36 (19U 67)
-D 19029,18045 2 161092 -- MSL 37 (19U 68)
-E 17565,18045 2 161093 -- MSL 38 (19U 69)
-F 16101,18045 2 161094 -- MSL 39 (19U 70)
-G 20490,18519,405 2 161095 -- MSL 40 (19U 71)
-H 20490,18045 2 161096 -- MSL 41 (19U 72)
-I 10245,18045 2 161097 -- MSL 42 (19U 73)
-J 12684,18045,405 2 161098 -- MSL 43 (19U 74)
-K 20490,18045 2 161099 -- MSL 44 (19U 75)
-L 17565,18045 2 161100 -- MSL 45 (19U 76)
-M 24882,18045 2 161101 -- MSL 46 (19U 77)
-N 19029,18045,405 2 161102 -- MSL 47 (19U 78)
-O 20490,18450,405 2 161103 -- MSL 48 (19U 79)
-P 16101,18045 2 161104 -- MSL 49 (19U 80)
-Q 20490,18450,4515 2 161105 -- MSL 50 (19U 81)
-R 19029,18045 2 161106 -- MSL 51 (19U 82)
-S 14637,18450,462 2 161107 -- MSL 52 (19U 83)
-T 17565,18045 2 161108 -- MSL 53 (19U 84)
-U 19029,18045,405 2 161109 -- MSL 54 (19U 85)
-V 19029,18045,405 2 161110 -- MSL 55 (19U 86)
-W 26346,18045,405 2 161111 -- MSL 56 (19U 87)
-X 19029,18045 2 161112 -- MSL 57 (19U 88)
-Y 19029,18045 2 161113 -- MSL 58 (19U 89)
-Z 17565,18045 2 161114 -- MSL 59 (19U 90)
-lB 8781,18045,4305 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18450,405 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18045,4305 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 8781,18450 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12735,405 0 161121 -- MSL 67 (19U 97)
-b 14637,18090,405 2 161122 -- MSL 68 (19U 98)
-c 11709,12735,405 0 161123 -- MSL 69 (19U 99)
-d 14637,18090,405 2 161124 -- MSL 70 (19U 100)
-e 11709,12735,405 0 161125 -- MSL 71 (19U 101)
-f 9270,18540 2 161126 -- MSL 72 (19U 102)
-g 13173,12735,5484 1 161127 -- MSL 73 (19U 103)
-h 14637,18090 2 161128 -- MSL 74 (19U 104)
-i 7317,18450 2 161129 -- MSL 75 (19U 105)
-j 8781,18450,5490 3 161130 -- MSL 76 (19U 106)
-k 14637,18090 2 161131 -- MSL 77 (19U 107)
-l 7317,18090 2 161132 -- MSL 78 (19U 108)
-m 21954,12735 0 161133 -- MSL 79 (19U 109)
-n 14637,12735 0 161134 -- MSL 80 (19U 110)
-o 13173,12735,405 0 161135 -- MSL 81 (19U 111)
-p 14637,12735,5490 1 161136 -- MSL 82 (19U 112)
-q 14637,12828,5490 1 161137 -- MSL 83 (19U 113)
-r 11709,12735 0 161138 -- MSL 84 (19U 114)
-s 10245,12735,411 0 161139 -- MSL 85 (19U 115)
-t 8781,16773,405 2 161140 -- MSL 86 (19U 116)
-u 14637,12330,405 0 161141 -- MSL 87 (19U 117)
-v 13173,12330,405 0 161142 -- MSL 88 (19U 118)
-w 19029,12330,405 0 161143 -- MSL 89 (19U 119)
-x 13173,12330 0 161144 -- MSL 90 (19U 120)
-y 13173,12330,5490 1 161145 -- MSL 91 (19U 121)
-z 11709,12330 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 19029,24795 2 161216 -- MSL 99 (19U 192)
-^A 19029,24795 2 161218 -- MSL 100 (19U 194)
-`E 17565,24795 2 161224 -- MSL 101 (19U 200)
-^E 17565,24795 2 161226 -- MSL 102 (19U 202)
-:E 17565,23955 2 161227 -- MSL 103 (19U 203)
-^I 10245,24795 2 161230 -- MSL 104 (19U 206)
-:I 10245,23955 2 161231 -- MSL 105 (19U 207)
-aa 13173,19065 2 161204 -- MSL 106 (19U 180)
-ga 13173,19065 2 161120 -- MSL 107 (19U 96)
-a^ 13173,19065 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,17820 2 161192 -- MSL 109 (19U 168)
-~ 13173,17772 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,24795,405 2 161241 -- MSL 111 (19U 217)
-^U 19029,24795,405 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 19029,24795 2 161245 -- MSL 114 (19U 221)
-'y 13173,19065,5490 3 161277 -- MSL 115 (19U 253)
-de 13173,18450 2 161200 -- MSL 116 (19U 176)
-,C 19029,18450,5532 3 161223 -- MSL 117 (19U 199)
-,c 11709,12735,5661 1 161255 -- MSL 118 (19U 231)
-~N 19029,23892,405 2 161233 -- MSL 119 (19U 209)
-~n 14637,17772 2 161265 -- MSL 120 (19U 241)
-r! 8781,12672,5778 1 161185 -- MSL 121 (19U 161)
-r? 13173,12846,5604 1 161215 -- MSL 122 (19U 191)
-Cs 13173,16089 0 161188 -- MSL 123 (19U 164)
-Po 13173,18450,429 2 161187 -- MSL 124 (19U 163)
-Ye 13173,18045 2 161189 -- MSL 125 (19U 165)
-sc 13173,18450,3225 2 161191 -- MSL 126 (19U 167)
-Fn 13173,18540,5490 3 161155 -- MSL 127 (19U 131)
-ct 13173,17682 2 161186 -- MSL 128 (19U 162)
-^a 13173,19065,405 2 161250 -- MSL 129 (19U 226)
-^e 11709,19065,405 2 161258 -- MSL 130 (19U 234)
-^o 13173,19065,405 2 161268 -- MSL 131 (19U 244)
-^u 14637,19065,405 2 161275 -- MSL 132 (19U 251)
-'a 13173,19065,405 2 161249 -- MSL 133 (19U 225)
-'e 11709,19065,405 2 161257 -- MSL 134 (19U 233)
-'o 13173,19065,405 2 161267 -- MSL 135 (19U 243)
-'u 14637,19065,405 2 161274 -- MSL 136 (19U 250)
-`a 13173,19065,405 2 161248 -- MSL 137 (19U 224)
-`e 11709,19065,405 2 161256 -- MSL 138 (19U 232)
-`o 13173,19065,405 2 161266 -- MSL 139 (19U 242)
-`u 14637,19065,405 2 161273 -- MSL 140 (19U 249)
-:a 13173,17820,405 2 161252 -- MSL 141 (19U 228)
-:e 11709,17820,405 2 161259 -- MSL 142 (19U 235)
-:o 13173,17820,405 2 161270 -- MSL 143 (19U 246)
-:u 14637,17820,405 2 161276 -- MSL 144 (19U 252)
-oA 19029,24750 2 161221 -- MSL 145 (19U 197)
-^i 7317,19065 2 161262 -- MSL 146 (19U 238)
-/O 20490,18450,405 2 161240 -- MSL 147 (19U 216)
-AE 27321,18045 2 161222 -- MSL 148 (19U 198)
-oa 13173,19020,405 2 161253 -- MSL 149 (19U 229)
-'i 7317,19065 2 161261 -- MSL 150 (19U 237)
-/o 13173,12750,405 0 161272 -- MSL 151 (19U 248)
-ae 19029,12735,405 0 161254 -- MSL 152 (19U 230)
-:A 19029,23955 2 161220 -- MSL 153 (19U 196)
-`i 7317,19065 2 161260 -- MSL 154 (19U 236)
-:O 20490,23955,405 2 161238 -- MSL 155 (19U 214)
-:U 19029,23955,405 2 161244 -- MSL 156 (19U 220)
-'E 17565,24795 2 161225 -- MSL 157 (19U 201)
-:i 7317,17820 2 161263 -- MSL 158 (19U 239)
-ss 14637,18492,405 2 161247 -- MSL 159 (19U 223)
-^O 20490,24795,405 2 161236 -- MSL 160 (19U 212)
-'A 19029,24795 2 161217 -- MSL 161 (19U 193)
-~A 19029,23892 2 161219 -- MSL 162 (19U 195)
-~a 13173,17772,405 2 161251 -- MSL 163 (19U 227)
--D 19029,18045 2 161232 -- MSL 164 (19U 208)
-Sd 13173,18090,405 2 161264 -- MSL 165 (19U 240)
-'I 10245,24795 2 161229 -- MSL 166 (19U 205)
-`I 10245,24795 2 161228 -- MSL 167 (19U 204)
-'O 20490,24795,405 2 161235 -- MSL 168 (19U 211)
-`O 20490,24795,405 2 161234 -- MSL 169 (19U 210)
-~O 20490,23892,405 2 161237 -- MSL 170 (19U 213)
-~o 13173,17772,405 2 161269 -- MSL 171 (19U 245)
-vS 14637,24795,462 2 161162 -- MSL 172 (19U 138)
-vs 10245,19065,411 2 161178 -- MSL 173 (19U 154)
-'U 19029,24795,405 2 161242 -- MSL 174 (19U 218)
-:Y 19029,23955 2 161183 -- MSL 175 (19U 159)
-:y 13173,17820,5490 3 161279 -- MSL 176 (19U 255)
-TP 16101,18045 2 161246 -- MSL 177 (19U 222)
-Tp 14637,18090,5490 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5193 1 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 23418,18450,405 2 161214 -- MSL 182 (19U 190)
-\- 23418,9000 0 60096 -- MSL 183 ( 7J 192)
-14 23418,18450,405 2 161212 -- MSL 184 (19U 188)
-12 23418,18450,405 2 161213 -- MSL 185 (19U 189)
-Of 13173,18450 2 161194 -- MSL 186 (19U 170)
-Om 13173,18450 2 161210 -- MSL 187 (19U 186)
-Fo 11220,9861 0 161195 -- MSL 188 (19U 171)
-Fc 11220,9861 0 161211 -- MSL 190 (19U 187)
-t+- 23418,15975,2880 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19725 2 161193 -- MSL 193 (19U 169)
-tno 23418,12210 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7740 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725 2 161198 -- MSL 196 (19U 174)
-S2 9270,18285 2 161202 -- MSL 197 (19U 178)
-S3 9270,18285 2 161203 -- MSL 198 (19U 179)
-ac 13173,0,5661 1 161208 -- MSL 199 (19U 184)
-S1 9270,18285 2 161209 -- MSL 200 (19U 185)
-tmu 23418,15033 0 161239 -- MSL 201 (19U 215)
-tdi 23418,14505 0 161271 -- MSL 202 (19U 247)
-u203C 15117,18045,405 2 87315 -- MSL 221 (10U 19)
-u20A7 25701,18045,405 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,11274 0 161207 -- MSL 302 (19U 183)
-u013F 17565,18045 2 51943 -- MSL 306 ( 6J 231)
-u0140 10242,18090 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 20979,18450 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18450 2 60101 -- MSL 310 ( 7J 197)
-sd 13173,18450 2 60102 -- MSL 311 ( 7J 198)
-dg 13173,18450,3075 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,19065 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,19020 2 60152 -- MSL 316 ( 7J 248)
-f/ 3417,18450,405 2 60109 -- MSL 324 ( 7J 205)
-em 23418,7200 0 161175 -- MSL 325 (19U 151)
-en 13173,7200 0 161174 -- MSL 326 (19U 150)
-dd 13173,18450,3075 2 161159 -- MSL 327 (19U 135)
-.i 7317,12330 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18450 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 13173,18285 2 87548 -- MSL 332 (10U 252)
-u0111 14637,18090,405 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19029,24285 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18285,405 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19029,18450,4113 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12735,4413 0 75193 -- MSL 405 ( 9E 185)
-'C 19029,24795,405 2 75206 -- MSL 406 ( 9E 198)
-'c 11709,19065,405 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 19029,24795,405 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11709,19065,405 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,24795 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 18051,19065,405 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 17565,24795 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,19065,405 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 17565,18045,4113 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,12735,4413 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 17565,24795 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,24885 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 17565,19065 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10734,19065 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,24795,405 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,19065 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,24795,405 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,19065 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20490,24795,405 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13173,19065,405 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 19029,24795 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 11709,19065 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 19029,24795 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 11709,19065 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14637,24795,462 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,19065,411 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 17565,24795 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10734,19065,405 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 17565,18045,5532 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8781,16773,5661 3 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,24795,405 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,19065,405 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,24750,405 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,19020,405 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17565,24795 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 11709,19065 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17565,23955 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 11709,17820 2 75199 -- MSL 485 ( 9E 191)
-u2070 9270,18285 2 51753 -- MSL 1000 ( 6J 41)
-u2074 9270,18285 2 51748 -- MSL 1001 ( 6J 36)
-u2075 9270,18045 2 51749 -- MSL 1002 ( 6J 37)
-u2076 9270,18285 2 51806 -- MSL 1003 ( 6J 94)
-u2077 9270,18045 2 51750 -- MSL 1004 ( 6J 38)
-u2078 9270,18285 2 51754 -- MSL 1005 ( 6J 42)
-u2079 9270,18285 2 51752 -- MSL 1006 ( 6J 40)
-lq 15126,18450 2 161171 -- MSL 1017 (19U 147)
-rq 15126,18450 2 161172 -- MSL 1018 (19U 148)
-Bq 15126,4134,4806 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,4050 0 161157 -- MSL 1028 (19U 133)
-vz 11709,19065 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703 2 128299 -- MSL 1034 (15U 43)
-u211E 20001,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 14637,18540 2 60077 -- MSL 1040 ( 7J 173)
-fl 14637,19116 2 60078 -- MSL 1041 ( 7J 174)
-ff 16587,18540 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21954,18540 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21954,19116 2 51885 -- MSL 1044 ( 6J 173)
-ij 15075,18450,5490 3 60134 -- MSL 1047 ( 7J 230)
-u2105 24882,18450,405 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 20490,24285,405 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18285,5484 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14637,18450,5532 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12735,5661 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 10245,23955 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,4134,4806 0 161154 -- MSL 1067 (19U 130)
-%0 30738,18237,405 2 161161 -- MSL 1068 (19U 137)
-a- 13173,17259 2 60154 -- MSL 1084 ( 7J 250)
-ab 13173,18285 2 75170 -- MSL 1086 ( 9E 162)
-a. 13173,17820 2 75263 -- MSL 1088 ( 9E 255)
-oe 19515,12735,405 0 161180 -- MSL 1090 (19U 156)
-OE 29760,18450,405 2 161164 -- MSL 1091 (19U 140)
-fo 6831,9861 0 161163 -- MSL 1092 (19U 139)
-fc 6831,9861 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 17565,18045 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,18090 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,19065 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,513,4413 0 75186 -- MSL 1098 ( 9E 178)
-vZ 17565,24795 2 75150 -- MSL 1106 ( 9E 142)
-IJ 23904,18045,405 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/TBI b/contrib/groff/font/devlj4/TBI
deleted file mode 100644
index dcdd2b3022f7..000000000000
--- a/contrib/groff/font/devlj4/TBI
+++ /dev/null
@@ -1,1006 +0,0 @@
-# CG Times BdIt
-name TBI
-spacewidth 7806
-slant 15.300000
-pcltypeface 4101
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -4388
-P , -4388
-V A -3902
-A V -4388
-T o -2438
-T r -974
-T c -2438
-T e -2438
-T d -1949
-T s -1460
-T y -974
-T a -2438
-T w -974
-T u -974
-T J -1949
-L T -2438
-L Y -2924
-Y o -3902
-Y e -3902
-Y a -3413
-Y J -1949
-A W -3902
-W A -3413
-T A -2438
-V o -3413
-V e -3413
-V a -3413
-Y A -2924
-F A -2438
-F . -3902
-F , -3902
-A T -2438
-A Y -3413
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -2438
-T , -2438
-L W -2924
-P A -2924
-V J -1949
-V . -3902
-V , -3902
-Y . -2924
-Y , -2924
-W o -2924
-W e -2924
-W a -2924
-W . -3413
-W , -3413
-r . -3413
-r , -3413
-w . -2438
-w , -2438
-Y u -2438
-A v -2438
-A y -2924
-A w -2438
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -1460
-O V -1949
-O Y -1949
-O . -2438
-O , -2438
-L y -974
-P J -2924
-V y -1949
-V u -1949
-V O -1949
-V G -1949
-V C -1949
-V Q -1949
-D T -1460
-D V -1949
-D Y -1949
-D . -2438
-D , -2438
-Y O -2438
-Y G -2438
-Y C -2438
-Y Q -2438
-F o -1460
-F e -1460
-F a -1460
-c . -974
-c , -974
-O A -974
-O W -1949
-R T -1460
-R V -1460
-R Y -1460
-R W -1460
-G T -1460
-P o -1460
-P g -1460
-P e -1460
-P a -1460
-C A -1460
-C . -2438
-C , -2438
-D A -974
-D W -1949
-B T -1460
-B Y -1949
-B . -1460
-B , -1460
-F J -1949
-A O -1949
-A G -1949
-A C -1949
-A U -1949
-A Q -1949
-W r -1949
-W y -1949
-W u -1949
-W O -1949
-W G -1949
-W C -1949
-W J -1949
-W Q -1949
-J A -974
-J . -974
-J , -974
-U A -974
-U . -1949
-U , -1949
-Q A -974
-Q W -1949
-f . -974
-f , -974
-T O -974
-T G -974
-T C -974
-T Q -974
-O X -1460
-G V -1460
-G Y -1460
-G W -1460
-G . -485
-G , -485
-P T -1460
-P V -1460
-P Y -1460
-C T -974
-C V -974
-C Y -974
-D X -1460
-B V -1949
-B X -1460
-B A -974
-B W -1949
-S . -974
-S , -974
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1949
-A e -1949
-Q X -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -974
-o x -485
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -974
-g . -974
-g , -974
-p v -974
-p y -974
-p x -485
-c v -974
-c y -974
-c w -974
-v o -485
-v g -974
-v c -485
-v d -485
-v a -485
-v q -485
-e v -974
-e y -974
-b v -974
-b y -974
-b w -974
-s . -485
-s , -485
-y o -485
-y g -974
-y c -485
-y d -485
-y a -485
-y q -485
-f g -1460
-x o -485
-x g -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-w o -485
-w g -974
-w c -485
-w d -485
-w a -485
-w q -485
-T i -974
-T S -974
-R o -485
-R y -485
-R O -485
-R G -485
-R C -485
-R U -485
-R Q -485
-G X -485
-G A -485
-P s -485
-P Z -485
-P X -1460
-P W -1460
-C X -974
-C W -974
-C J -1460
-V i -974
-V S -974
-S T -1460
-S V -1460
-S Y -1460
-S X -974
-S A -974
-S W -1460
-Y i -974
-Y S -974
-X a -485
-X u -974
-X S -485
-A t -485
-A g -485
-A c -1949
-A d -1460
-A a -485
-A u -974
-A q -974
-A S -485
-W i -974
-W S -974
-J y -1460
-K c -1460
-K u -974
-K S -485
-t g -485
-o f -974
-h w -974
-n w -974
-m w -974
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-g g -974
-p f -974
-p w -974
-c f -974
-c x -485
-v e -485
-v s -485
-e f -974
-e x -485
-e w -974
-b f -974
-y e -485
-y s -485
-f o -974
-f c -974
-f e -974
-f d -974
-f s -485
-f a -974
-f q -974
-w e -485
-w s -485
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-O Z -485
-O J -974
-R e -485
-R a -485
-R u -485
-R S -485
-G Z -485
-C Z -974
-E t -485
-E o -485
-E g -974
-E c -485
-E v -485
-E e -485
-E d -485
-E y -485
-E f -485
-E a -485
-E w -485
-E u -485
-E q -485
-E O -485
-E G -485
-E C -485
-E S -485
-E J -485
-E Q -485
-E . -485
-E , -485
-Z o -485
-Z e -485
-Z d -485
-Z y -974
-Z a -485
-Z w -974
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-D Z -485
-D J -974
-B Z -485
-B J -974
-S Z -485
-S J -974
-J o -974
-J i -974
-J e -974
-J a -974
-J u -974
-J T -974
-J O -974
-J H -974
-J N -974
-J M -974
-J L -974
-J R -974
-J G -974
-J I -974
-J P -974
-J C -974
-J V -974
-J E -974
-J Z -974
-J D -974
-J B -974
-J S -974
-J Y -974
-J F -974
-J X -974
-J W -974
-J J -974
-J U -974
-J Q -974
-J K -974
-U g -485
-U J -974
-K a -485
-o g -485
-o z -485
-h g -485
-h f -485
-n g -485
-n f -485
-m g -485
-m f -485
-l g -485
-r s -485
-g o -485
-g c -485
-g e -485
-g d -485
-g s -485
-g a -485
-g q -485
-i g -485
-p g -485
-p z -485
-c g -485
-c z -485
-v t -485
-v h -485
-v n -485
-v m -485
-v r -485
-v i -485
-v p -485
-v z -485
-v b -485
-v y -485
-v f -485
-v x -485
-v w -485
-v j -485
-v u -485
-v k -485
-e g -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z a -485
-z q -485
-d g -485
-b g -485
-b z -485
-s g -485
-y t -485
-y h -485
-y n -485
-y m -485
-y l -485
-y r -485
-y i -485
-y p -485
-y v -485
-y z -485
-y b -485
-y y -485
-y f -485
-y x -485
-y w -485
-y j -485
-y u -485
-y k -485
-a g -485
-w t -485
-w h -485
-w n -485
-w m -485
-w l -485
-w r -485
-w i -485
-w p -485
-w v -485
-w z -485
-w b -485
-w y -485
-w f -485
-w x -485
-w w -485
-w j -485
-w u -485
-w k -485
-j g -485
-u g -485
-q g -485
-O g -485
-M g -485
-G J -485
-I g -485
-C t -485
-C o -485
-C h -485
-C l -485
-C r -485
-C i -485
-C e -485
-C y -485
-C a -485
-C u -485
-C O -485
-C H -485
-C N -485
-C M -485
-C L -485
-C R -485
-C G -485
-C I -485
-C P -485
-C C -485
-C E -485
-C D -485
-C B -485
-C S -485
-C F -485
-C U -485
-C Q -485
-C K -485
-E n -485
-E m -485
-E l -485
-E r -485
-E i -485
-E p -485
-E z -485
-E b -485
-E s -485
-E x -485
-E j -485
-E k -485
-E T -485
-E H -485
-E N -485
-E M -485
-E L -485
-E R -485
-E I -485
-E P -485
-E V -485
-E E -485
-E Z -485
-E D -485
-E B -485
-E Y -485
-E F -485
-E X -485
-E A -485
-E W -485
-E U -485
-E K -485
-A f -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -2924
-L ' -2924
-T hy -974
-T - -974
-T en -974
-T em -974
-A cq -3413
-A ' -3413
-hy T -1460
-- T -1460
-en T -1460
-em T -1460
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -1949
-p ' -1949
-c cq -1460
-c ' -1460
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -485
-R ' -485
-W hy -1949
-W - -1949
-W en -1949
-W em -1949
-cq d -974
-' d -974
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -485
-' s -485
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-R hy -485
-R - -485
-R en -485
-R em -485
-K cq -485
-K ' -485
-t g -485
-v cq -485
-v ' -485
-b f -974
-y cq -485
-y ' -485
-w cq -485
-w ' -485
-C cq -485
-C ' -485
-E cq -485
-E ' -485
-E hy -485
-E - -485
-E en -485
-E em -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-J cq -974
-J ' -974
-J hy -974
-J - -974
-J en -974
-J em -974
-v hy -485
-v - -485
-v en -485
-v em -485
-y hy -485
-y - -485
-y en -485
-y em -485
-w hy -485
-w - -485
-w en -485
-w em -485
-C hy -485
-C - -485
-C en -485
-C em -485
-hy g -485
-- g -485
-en g -485
-em g -485
-charset
-! 10245,18450,405,963,-452,913 2 161057 -- MSL 1 (19U 33)
-dq 13662,18450,0,1380,-3413,913 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,18450,405,1902,270,913 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19770,2295,1998,1053,913 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,18237,405,288,-1508,288 2 161061 -- MSL 5 (19U 37)
-& 20490,18045,405,234,87,234 2 161062 -- MSL 6 (19U 38)
-cq 8781,18450,0,2001,-2789,913 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18450,4761,3096,-317,913 2 161064 -- MSL 9 (19U 40)
-) 8781,18450,4761,846,1932,846 2 161065 -- MSL 10 (19U 41)
-* 13173,18450,0,1518,-1811,913 2 161066 -- MSL 11 (19U 42)
-+ 23418,15975,0,0,-3104 0 161067 -- MSL 12 (19U 43)
-, 8781,3612,4728,0,1515 0 161068 -- MSL 13 (19U 44)
-hy 8781,7740,0,660,426,660 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,3645,405,0,129 0 161070 -- MSL 15 (19U 46)
-sl 8781,18450,405,3012,1209,913 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,18450,405,1722,72,913 2 161072 -- MSL 17 (19U 48)
-1 13173,18450,0,0,765 2 161073 -- MSL 18 (19U 49)
-2 13173,18450,0,657,1419,657 2 161074 -- MSL 19 (19U 50)
-3 13173,18450,405,702,1116,702 2 161075 -- MSL 20 (19U 51)
-4 13173,18450,0,1953,1386,913 2 161076 -- MSL 21 (19U 52)
-5 13173,18045,405,1845,855,913 2 161077 -- MSL 22 (19U 53)
-6 13173,18450,405,2286,-8,913 2 161078 -- MSL 23 (19U 54)
-7 13173,18045,0,2997,-968,913 2 161079 -- MSL 24 (19U 55)
-8 13173,18450,405,1548,240,913 2 161080 -- MSL 25 (19U 56)
-9 13173,18450,405,1572,705,913 2 161081 -- MSL 26 (19U 57)
-: 8781,12360,405,0,408 0 161082 -- MSL 27 (19U 58)
-; 8781,12360,4728,0,1515 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 23418,11370,0,0,-3299 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 13173,18450,405,1725,-1931,913 2 161087 -- MSL 32 (19U 63)
-at 23418,16950,4131,1095,219,913 2 161088 -- MSL 33 (19U 64)
-@ "
-A 17565,18450,0,546,2412,546 2 161089 -- MSL 34 (19U 65)
-B 17565,18045,0,1257,1167,913 2 161090 -- MSL 35 (19U 66)
-C 17565,18594,405,2331,-392,913 2 161091 -- MSL 36 (19U 67)
-D 19029,18045,0,1707,1611,913 2 161092 -- MSL 37 (19U 68)
-E 17565,18045,0,1974,1428,913 2 161093 -- MSL 38 (19U 69)
-F 16101,18045,0,3384,1536,913 2 161094 -- MSL 39 (19U 70)
-G 19029,18450,405,1863,-11,913 2 161095 -- MSL 40 (19U 71)
-H 20490,18045,0,3006,1266,913 2 161096 -- MSL 41 (19U 72)
-I 10245,18045,0,2997,1338,913 2 161097 -- MSL 42 (19U 73)
-J 13173,18045,405,2652,1491,913 2 161098 -- MSL 43 (19U 74)
-K 17565,18045,0,3312,1326,913 2 161099 -- MSL 44 (19U 75)
-L 16101,18045,0,1188,1815,913 2 161100 -- MSL 45 (19U 76)
-M 23418,18045,0,3132,1362,913 2 161101 -- MSL 46 (19U 77)
-N 19029,18045,405,3270,1227,913 2 161102 -- MSL 47 (19U 78)
-O 19029,18450,405,1503,-182,913 2 161103 -- MSL 48 (19U 79)
-P 16101,18045,0,2490,1233,913 2 161104 -- MSL 49 (19U 80)
-Q 18540,18450,5550,1902,-176,913 3 161105 -- MSL 50 (19U 81)
-R 17565,18045,0,1260,1188,913 2 161106 -- MSL 51 (19U 82)
-S 14637,18525,510,1452,543,913 2 161107 -- MSL 52 (19U 83)
-T 16101,18045,0,3513,-962,913 2 161108 -- MSL 53 (19U 84)
-U 19029,18045,405,3249,-1454,913 2 161109 -- MSL 54 (19U 85)
-V 17565,18045,405,3771,-1355,913 2 161110 -- MSL 55 (19U 86)
-W 23418,18045,405,3891,-1310,913 2 161111 -- MSL 56 (19U 87)
-X 17565,18045,0,2883,1578,913 2 161112 -- MSL 57 (19U 88)
-Y 16101,18045,0,3630,-1253,913 2 161113 -- MSL 58 (19U 89)
-Z 16101,18045,0,1923,876,913 2 161114 -- MSL 59 (19U 90)
-lB 8781,18045,4095,4575,2064,913 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18450,405,0,-2225 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18045,4095,2826,3813,913 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,913 1 161119 -- MSL 64 (19U 95)
-oq 8781,18450,0,2001,-2789,913 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12735,405,1059,1059,913 0 161121 -- MSL 67 (19U 97)
-b 13173,18540,405,876,948,876 2 161122 -- MSL 68 (19U 98)
-c 11709,12735,405,900,435,900 0 161123 -- MSL 69 (19U 99)
-d 13173,18540,405,2541,1068,913 2 161124 -- MSL 70 (19U 100)
-e 11709,12735,405,687,390,687 0 161125 -- MSL 71 (19U 101)
-f 9270,18540,5490,4809,4866,913 3 161126 -- MSL 72 (19U 102)
-g 13173,12735,5490,1500,1977,913 1 161127 -- MSL 73 (19U 103)
-h 14637,18540,405,345,1146,345 2 161128 -- MSL 74 (19U 104)
-i 7317,18585,405,1734,783,913 2 161129 -- MSL 75 (19U 105)
-j 7317,18585,5490,2319,5745,913 3 161130 -- MSL 76 (19U 106)
-k 13173,18540,405,1923,1194,913 2 161131 -- MSL 77 (19U 107)
-l 7317,18540,405,2166,843,913 2 161132 -- MSL 78 (19U 108)
-m 20490,12735,405,630,1101,630 0 161133 -- MSL 79 (19U 109)
-n 14637,12735,405,321,954,321 0 161134 -- MSL 80 (19U 110)
-o 13173,12735,405,675,714,675 0 161135 -- MSL 81 (19U 111)
-p 13173,12735,5490,843,3888,843 1 161136 -- MSL 82 (19U 112)
-q 13173,12735,5490,1317,672,913 1 161137 -- MSL 83 (19U 113)
-r 10245,12783,0,2421,1005,913 0 161138 -- MSL 84 (19U 114)
-s 10245,12735,405,885,891,885 0 161139 -- MSL 85 (19U 115)
-t 7317,15870,405,2289,1056,913 0 161140 -- MSL 86 (19U 116)
-u 14637,12735,405,426,279,426 0 161141 -- MSL 87 (19U 117)
-v 11709,12735,405,1068,153,913 0 161142 -- MSL 88 (19U 118)
-w 17565,12735,405,822,75,822 0 161143 -- MSL 89 (19U 119)
-x 13173,12735,405,1137,1836,913 0 161144 -- MSL 90 (19U 120)
-y 11709,12735,5490,543,3189,543 1 161145 -- MSL 91 (19U 121)
-z 10245,12330,1935,1404,1839,913 0 161146 -- MSL 92 (19U 122)
-{ 13173,19935,6210,3339,-971,913 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,19935,6210,63,2304,63 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 17565,24795,0,546,2412,546 2 161216 -- MSL 99 (19U 192)
-^A 17565,24795,0,546,2412,546 2 161218 -- MSL 100 (19U 194)
-`E 17565,24795,0,1974,1428,913 2 161224 -- MSL 101 (19U 200)
-^E 17565,24795,0,1974,1428,913 2 161226 -- MSL 102 (19U 202)
-:E 17565,23955,0,1974,1428,913 2 161227 -- MSL 103 (19U 203)
-^I 10245,24795,0,3930,1338,913 2 161230 -- MSL 104 (19U 206)
-:I 10245,23955,0,4875,1338,913 2 161231 -- MSL 105 (19U 207)
-aa 13173,19065,0,786,-5054,786 2 161204 -- MSL 106 (19U 180)
-ga 13173,19065,0,0,-3539 2 161120 -- MSL 107 (19U 96)
-a^ 13173,19065,0,417,-2930,417 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,17820,0,1179,-2963,913 2 161192 -- MSL 109 (19U 168)
-~ 13173,17703,0,1884,-3212,913 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,24795,405,3249,-1454,913 2 161241 -- MSL 111 (19U 217)
-^U 19029,24795,405,3249,-1454,913 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,913 2 161199 -- MSL 113 (19U 175)
-'Y 16101,24795,0,3630,-1253,913 2 161245 -- MSL 114 (19U 221)
-'y 11709,19065,5490,1518,3189,913 3 161277 -- MSL 115 (19U 253)
-de 13173,18450,0,111,-2969,111 2 161200 -- MSL 116 (19U 176)
-,C 17565,18594,5718,2331,-392,913 3 161223 -- MSL 117 (19U 199)
-,c 11709,12735,5655,900,1278,900 1 161255 -- MSL 118 (19U 231)
-~N 19029,23733,405,3270,1227,913 2 161233 -- MSL 119 (19U 209)
-~n 14637,17703,405,1152,954,913 2 161265 -- MSL 120 (19U 241)
-r! 10245,13050,5805,0,855 1 161185 -- MSL 121 (19U 161)
-r? 13173,13050,5805,0,1680 1 161215 -- MSL 122 (19U 191)
-Cs 13173,15834,0,2598,795,913 0 161188 -- MSL 123 (19U 164)
-Po 13173,18450,429,2508,1473,913 2 161187 -- MSL 124 (19U 163)
-Ye 13173,18045,0,5067,834,913 2 161189 -- MSL 125 (19U 165)
-sc 13173,18450,3225,0,-596 2 161191 -- MSL 126 (19U 167)
-Fn 13173,18540,5490,2607,3165,913 3 161155 -- MSL 127 (19U 131)
-ct 13173,16914,0,1431,-683,913 2 161186 -- MSL 128 (19U 162)
-^a 13173,19065,405,1059,1059,913 2 161250 -- MSL 129 (19U 226)
-^e 11709,19065,405,1149,390,913 2 161258 -- MSL 130 (19U 234)
-^o 13173,19065,405,675,714,675 2 161268 -- MSL 131 (19U 244)
-^u 14637,19065,405,426,279,426 2 161275 -- MSL 132 (19U 251)
-'a 13173,19065,405,1059,1059,913 2 161249 -- MSL 133 (19U 225)
-'e 11709,19065,405,1518,390,913 2 161257 -- MSL 134 (19U 233)
-'o 13173,19065,405,786,714,786 2 161267 -- MSL 135 (19U 243)
-'u 14637,19065,405,426,279,426 2 161274 -- MSL 136 (19U 250)
-`a 13173,19065,405,1059,1059,913 2 161248 -- MSL 137 (19U 224)
-`e 11709,19065,405,687,390,687 2 161256 -- MSL 138 (19U 232)
-`o 13173,19065,405,675,714,675 2 161266 -- MSL 139 (19U 242)
-`u 14637,19065,405,426,279,426 2 161273 -- MSL 140 (19U 249)
-:a 13173,17820,405,1179,1059,913 2 161252 -- MSL 141 (19U 228)
-:e 11709,17820,405,1911,390,913 2 161259 -- MSL 142 (19U 235)
-:o 13173,17820,405,1179,714,913 2 161270 -- MSL 143 (19U 246)
-:u 14637,17820,405,447,279,447 2 161276 -- MSL 144 (19U 252)
-oA 17565,24750,0,546,2412,546 2 161221 -- MSL 145 (19U 197)
-^i 7317,19065,405,3345,723,913 2 161262 -- MSL 146 (19U 238)
-/O 19029,18450,405,3702,2070,913 2 161240 -- MSL 147 (19U 216)
-AE 24396,18045,0,2730,2331,913 2 161222 -- MSL 148 (19U 198)
-oa 13173,19020,405,1059,1059,913 2 161253 -- MSL 149 (19U 229)
-'i 7317,19065,405,3714,723,913 2 161261 -- MSL 150 (19U 237)
-/o 13173,12735,405,2199,2256,913 0 161272 -- MSL 151 (19U 248)
-ae 18540,12735,405,876,1074,876 0 161254 -- MSL 152 (19U 230)
-:A 17565,23955,0,765,2412,765 2 161220 -- MSL 153 (19U 196)
-`i 7317,19065,405,1749,723,913 2 161260 -- MSL 154 (19U 236)
-:O 19029,23955,405,1503,-182,913 2 161238 -- MSL 155 (19U 214)
-:U 19029,23955,405,3249,-1454,913 2 161244 -- MSL 156 (19U 220)
-'E 17565,24795,0,1974,1428,913 2 161225 -- MSL 157 (19U 201)
-:i 7317,17820,405,4107,723,913 2 161263 -- MSL 158 (19U 239)
-ss 13173,18540,5490,1572,5862,913 3 161247 -- MSL 159 (19U 223)
-^O 19029,24795,405,1503,-182,913 2 161236 -- MSL 160 (19U 212)
-'A 17565,24795,0,567,2412,567 2 161217 -- MSL 161 (19U 193)
-~A 17565,23733,0,966,2412,913 2 161219 -- MSL 162 (19U 195)
-~a 13173,17703,405,1884,1059,913 2 161251 -- MSL 163 (19U 227)
--D 19029,18045,0,1707,1611,913 2 161232 -- MSL 164 (19U 208)
-Sd 13173,18540,405,2235,708,913 2 161264 -- MSL 165 (19U 240)
-'I 10245,24795,0,4227,1338,913 2 161229 -- MSL 166 (19U 205)
-`I 10245,24795,0,2997,1338,913 2 161228 -- MSL 167 (19U 204)
-'O 19029,24795,405,1503,-182,913 2 161235 -- MSL 168 (19U 211)
-`O 19029,24795,405,1503,-182,913 2 161234 -- MSL 169 (19U 210)
-~O 19029,23733,405,1503,-182,913 2 161237 -- MSL 170 (19U 213)
-~o 13173,17703,405,1884,714,913 2 161269 -- MSL 171 (19U 245)
-vS 14637,24798,510,2061,543,913 2 161162 -- MSL 172 (19U 138)
-vs 10245,19065,405,2856,891,913 2 161178 -- MSL 173 (19U 154)
-'U 19029,24795,405,3249,-1454,913 2 161242 -- MSL 174 (19U 218)
-:Y 16101,23955,0,3630,-1253,913 2 161183 -- MSL 175 (19U 159)
-:y 11709,17820,5490,1311,3189,913 3 161279 -- MSL 176 (19U 255)
-TP 16101,18045,0,1203,1227,913 2 161246 -- MSL 177 (19U 222)
-Tp 13173,18540,5490,843,3888,843 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5193,582,756,582 1 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200,1350,-1007,913 2 161206 -- MSL 181 (19U 182)
-34 23418,18450,405,0,-1898 2 161214 -- MSL 182 (19U 190)
-\- 23418,9000,0,0,-3314 0 60096 -- MSL 183 ( 7J 192)
-14 23418,18450,405,0,-1571 2 161212 -- MSL 184 (19U 188)
-12 23418,18450,405,0,-1310 2 161213 -- MSL 185 (19U 189)
-Of 13173,18450,0,1368,-2396,913 2 161194 -- MSL 186 (19U 170)
-Om 13173,18450,0,744,-2294,744 2 161210 -- MSL 187 (19U 186)
-Fo 11709,10200,0,1158,567,913 0 161195 -- MSL 188 (19U 171)
-Fc 11709,10200,0,615,1110,615 0 161211 -- MSL 190 (19U 187)
-t+- 23418,15975,2880,0,-2882 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19725,0,4398,-2573,913 2 161193 -- MSL 193 (19U 169)
-tno 23418,12225,0,0,-4022 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7740,0,660,426,660 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725,0,4398,-2573,913 2 161198 -- MSL 196 (19U 174)
-S2 8781,18285,0,1911,-212,913 2 161202 -- MSL 197 (19U 178)
-S3 8781,18285,0,1980,-551,913 2 161203 -- MSL 198 (19U 179)
-ac 13173,0,5655,0,546 1 161208 -- MSL 199 (19U 184)
-S1 8781,18285,0,1173,-470,913 2 161209 -- MSL 200 (19U 185)
-tmu 23418,15033,0,0,-3689 0 161239 -- MSL 201 (19U 215)
-tdi 23418,14505,0,0,-3326 0 161271 -- MSL 202 (19U 247)
-u203C 16593,18450,405,963,-452,913 2 87315 -- MSL 221 (10U 19)
-u20A7 23418,18045,405,2289,1233,913 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,11121,0,0,-1898 0 161207 -- MSL 302 (19U 183)
-u013F 16101,18045,0,1188,1815,913 2 51943 -- MSL 306 ( 6J 231)
-u0140 9270,18540,405,2466,843,913 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18045,765,0,-854 2 60122 -- MSL 308 ( 7J 218)
-u0149 19518,18450,405,321,117,321 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18450,0,930,-3341,913 2 60101 -- MSL 310 ( 7J 197)
-sd 13173,18450,0,873,-3341,873 2 60102 -- MSL 311 ( 7J 198)
-dg 13173,18450,3075,1344,-1187,913 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550,0,4884,-2534,913 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,913 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,19065,0,1392,-3905,913 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,19020,0,0,-4268 2 60152 -- MSL 316 ( 7J 248)
-f/ 3402,18450,405,8832,6945,913 2 60109 -- MSL 324 ( 7J 205)
-em 23418,7200,0,609,459,609 0 161175 -- MSL 325 (19U 151)
-en 13173,7200,0,624,459,624 0 161174 -- MSL 326 (19U 150)
-dd 13173,18450,3075,939,-782,913 2 161159 -- MSL 327 (19U 135)
-.i 7317,12735,405,825,723,825 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18450,0,1065,-3146,913 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 13173,18285,0,1626,-851,913 2 87548 -- MSL 332 (10U 252)
-u0111 13173,18540,405,2733,1098,913 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 17565,24285,0,774,2412,774 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18570,405,1581,1059,913 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 17565,18450,2874,546,2412,546 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12735,3249,1059,1059,913 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,24795,405,2331,-392,913 2 75206 -- MSL 406 ( 9E 198)
-'c 11709,19065,405,1518,435,913 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,24798,405,2331,-392,913 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11709,19065,405,2772,435,913 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,24798,0,1707,1611,913 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 17076,19050,405,2988,1068,913 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 17565,24798,0,1974,1428,913 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,19065,405,2934,390,913 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 17565,18045,2874,1974,1428,913 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,12735,3249,687,390,687 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 16101,24795,0,1188,1815,913 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,24915,405,5295,843,913 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 16101,19050,0,1611,1815,913 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10734,19050,405,3021,843,913 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,24795,405,3270,1227,913 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 14637,19065,405,321,954,321 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,24798,405,3270,1227,913 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 14637,19065,405,660,954,660 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 19029,24795,405,2526,-182,913 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13173,19065,405,4053,714,913 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17565,24795,0,1260,1188,913 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,19065,0,2574,1005,913 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17565,24798,0,1260,1188,913 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,19065,0,3018,1005,913 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14637,24795,510,1452,543,913 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,19065,405,2250,891,913 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16101,24798,0,3513,-962,913 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10245,19050,405,3108,1056,913 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16101,18045,5718,3513,-962,913 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7317,15870,5655,2289,3636,913 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,24795,405,3249,-1454,913 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 14637,19065,405,2997,279,913 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,24750,405,3249,-1454,913 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 14637,19020,405,426,279,426 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,24795,0,1923,876,913 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 10245,19065,1935,2250,1839,913 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,23955,0,1923,876,913 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 10245,17820,1935,1404,1839,913 2 75199 -- MSL 485 ( 9E 191)
-u2070 8781,18285,0,2436,-785,913 2 51753 -- MSL 1000 ( 6J 41)
-u2074 8781,18285,0,2547,-113,913 2 51748 -- MSL 1001 ( 6J 36)
-u2075 8781,18045,0,2496,-473,913 2 51749 -- MSL 1002 ( 6J 37)
-u2076 8781,18285,0,2868,-911,913 2 51806 -- MSL 1003 ( 6J 94)
-u2077 8781,18045,0,3444,-1556,913 2 51750 -- MSL 1004 ( 6J 38)
-u2078 8781,18285,0,2400,-629,913 2 51754 -- MSL 1005 ( 6J 42)
-u2079 8781,18285,0,2304,-347,913 2 51752 -- MSL 1006 ( 6J 40)
-lq 14148,18450,0,1974,-2789,913 2 161171 -- MSL 1017 (19U 147)
-rq 14148,18450,0,1974,-2789,913 2 161172 -- MSL 1018 (19U 148)
-Bq 14148,3651,4689,0,1425 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,3510,0,0,147 0 161157 -- MSL 1028 (19U 133)
-vz 10245,19065,1935,2856,1839,913 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703,0,4137,-2579,913 2 128299 -- MSL 1034 (15U 43)
-u211E 20001,18315,4056,465,-1163,465 2 51794 -- MSL 1036 ( 6J 82)
-fi 15126,18540,5490,726,5055,726 3 60077 -- MSL 1040 ( 7J 173)
-fl 15126,18540,5490,2328,5034,913 3 60078 -- MSL 1041 ( 7J 174)
-ff 15126,18540,5490,5574,5268,913 3 51883 -- MSL 1042 ( 6J 171)
-Fi 21954,18540,5490,738,5223,738 3 51884 -- MSL 1043 ( 6J 172)
-Fl 21954,18540,5490,1959,5583,913 3 51885 -- MSL 1044 ( 6J 173)
-ij 14148,18585,5490,2271,783,913 3 60134 -- MSL 1047 ( 7J 230)
-u2105 23418,18450,405,534,-1265,534 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19029,24285,405,1863,-11,913 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18570,5490,1500,1977,913 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14637,18525,5718,1452,543,913 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12735,5655,885,2010,885 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 10245,23955,0,2997,1338,913 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3651,4689,0,510 0 161154 -- MSL 1067 (19U 130)
-%0 32202,18237,405,612,-1121,612 2 161161 -- MSL 1068 (19U 137)
-a- 13173,16860,0,1341,-2903,913 2 60154 -- MSL 1084 ( 7J 250)
-ab 13173,18570,0,1281,-3689,913 2 75170 -- MSL 1086 ( 9E 162)
-a. 13173,17820,0,0,-5588 2 75263 -- MSL 1088 ( 9E 255)
-oe 19515,12735,405,462,462,462 0 161180 -- MSL 1090 (19U 156)
-OE 28299,18450,405,1695,-155,913 2 161164 -- MSL 1091 (19U 140)
-fo 7317,10200,0,1035,567,913 0 161163 -- MSL 1092 (19U 139)
-fc 7317,10200,0,618,984,618 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 16101,18045,0,1188,1815,913 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,18540,405,2622,1539,913 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,19065,0,4053,-3626,913 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,681,3249,420,-4388,420 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,24798,0,1923,876,913 2 75150 -- MSL 1106 ( 9E 142)
-IJ 23418,18045,405,2652,1338,913 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/TI b/contrib/groff/font/devlj4/TI
deleted file mode 100644
index c01105ac40cd..000000000000
--- a/contrib/groff/font/devlj4/TI
+++ /dev/null
@@ -1,1090 +0,0 @@
-# CG Times It
-name TI
-spacewidth 7806
-slant 15.600000
-pcltypeface 4101
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -1949
-P . -4388
-P , -4388
-V A -2924
-A V -2924
-T o -1949
-T r -485
-T c -1460
-T e -1949
-T d -1949
-T s -974
-T y -485
-T a -1949
-T w -485
-T u -485
-T J -1460
-L T -1949
-L Y -1949
-Y o -3413
-Y e -3413
-Y a -3413
-Y J -1460
-A W -2924
-W A -3413
-T A -2438
-V o -1949
-V e -1949
-V a -1949
-Y A -2438
-F A -3902
-F . -3902
-F , -3902
-A T -2438
-A Y -2438
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -2438
-T , -2438
-L W -1949
-P A -3413
-V J -1460
-V . -3902
-V , -3902
-Y . -2438
-Y , -2438
-W o -2438
-W e -2438
-W a -2438
-W . -3902
-W , -3902
-r . -2438
-r , -2438
-w . -2438
-w , -2438
-Y u -1949
-A v -2438
-A y -2438
-A w -2438
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -485
-O V -1460
-O Y -1949
-O . -2438
-O , -2438
-L y -974
-P J -1949
-V y -1949
-V u -1949
-V O -1949
-V G -1949
-V C -1949
-V Q -1949
-D T -485
-D V -1460
-D Y -1949
-D . -2438
-D , -2438
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -2924
-F e -2924
-F a -2924
-c . -974
-c , -974
-O A -974
-O W -1460
-L U -485
-R T -1460
-R V -1460
-R Y -1460
-R W -1460
-G T -485
-P o -2438
-P g -2438
-P e -2438
-P a -2438
-C A -974
-C . -974
-C , -974
-D A -974
-D W -1460
-B T -974
-B Y -2438
-B . -1949
-B , -1949
-F J -1460
-A O -1460
-A G -1460
-A C -1460
-A U -1949
-A Q -1460
-W r -2438
-W y -2438
-W u -2438
-W O -2438
-W G -2438
-W C -2438
-W J -1460
-W Q -2438
-J A -1460
-J . -1460
-J , -1460
-U A -1460
-U . -2438
-U , -2438
-Q A -974
-Q W -1460
-f . -485
-f , -485
-T O -485
-T G -485
-T C -485
-T Q -485
-O X -1460
-G V -1460
-G Y -1949
-G W -1460
-G . -974
-G , -974
-P T -485
-P V -485
-P Y -485
-C T -485
-C V -485
-C Y -485
-D X -1460
-B V -1949
-B X -1949
-B A -1460
-B W -1949
-S . -485
-S , -485
-F r -1949
-F y -1949
-F u -1949
-F O -1949
-F G -1949
-F C -1949
-F Q -1949
-X o -1949
-X e -1949
-X y -1949
-X O -1949
-X G -1949
-X C -1949
-X Q -1949
-A o -1460
-A e -1460
-Q X -1460
-K o -1949
-K e -1949
-K y -1949
-K w -1949
-K O -1949
-K G -1949
-K C -1949
-K Q -1949
-o v -974
-o y -974
-o x -485
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -1460
-g . -485
-g , -485
-p v -974
-p y -974
-p x -485
-c v -974
-c y -974
-c w -974
-v o -485
-v g -974
-v c -485
-v d -485
-v a -485
-v q -485
-e v -974
-e y -974
-b v -974
-b y -974
-b w -974
-s . -485
-s , -485
-y o -485
-y g -974
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x g -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-w o -485
-w g -974
-w c -485
-w d -485
-w a -485
-w q -485
-T i -485
-T S -485
-R o -974
-R y -1460
-R O -974
-R G -974
-R C -974
-R U -1460
-R Q -974
-G X -974
-G A -974
-P s -1460
-P Z -485
-P X -485
-P W -485
-C X -485
-C W -485
-V i -485
-V S -485
-S T -485
-S V -1460
-S Y -1460
-S X -485
-S A -485
-S W -1460
-Y i -485
-Y S -485
-X a -974
-X u -974
-X S -485
-A t -974
-A g -485
-A c -1460
-A d -1460
-A a -974
-A u -974
-A q -1460
-A S -1460
-W i -485
-W S -485
-J y -485
-K c -1460
-K u -974
-K S -974
-t g -974
-t . -485
-t , -485
-o f -485
-h w -974
-n w -974
-m w -974
-r o -974
-r c -974
-r e -974
-r d -974
-r a -974
-r q -974
-g g -974
-p f -485
-p w -974
-c f -485
-c x -485
-v e -485
-v s -485
-e f -485
-e x -485
-e w -974
-b f -485
-y e -485
-y s -485
-w e -485
-w s -485
-k g -485
-k v -974
-k y -974
-k w -974
-R e -974
-R a -974
-R u -974
-R S -974
-P t -974
-P h -485
-P n -974
-P l -485
-P r -974
-P i -974
-P y -974
-P u -974
-P O -974
-P H -485
-P N -485
-P M -485
-P L -485
-P R -485
-P G -974
-P I -485
-P P -485
-P C -974
-P E -485
-P D -485
-P B -485
-P S -974
-P F -485
-P U -974
-P Q -974
-P K -485
-E t -974
-E o -974
-E g -974
-E c -974
-E v -974
-E e -974
-E d -974
-E y -974
-E f -974
-E a -974
-E w -974
-E u -974
-E q -974
-E O -974
-E G -974
-E C -974
-E S -974
-E J -485
-E Q -974
-E . -485
-E , -485
-B Z -485
-B J -485
-F i -485
-F j -485
-F S -485
-J o -485
-J i -485
-J e -485
-J a -485
-J u -485
-J T -485
-J O -485
-J H -485
-J N -485
-J M -485
-J L -485
-J R -485
-J G -485
-J I -485
-J P -485
-J C -485
-J V -485
-J E -485
-J Z -485
-J D -485
-J B -485
-J S -485
-J Y -485
-J F -485
-J X -485
-J W -485
-J J -485
-J U -974
-J Q -485
-J K -485
-U g -974
-U J -485
-K a -974
-t o -485
-t c -485
-t e -485
-t d -485
-t s -485
-t a -485
-t q -485
-o g -485
-o z -485
-h g -485
-h f -485
-n g -485
-n f -485
-m g -485
-m f -485
-l g -485
-r s -485
-g o -485
-g c -485
-g e -485
-g d -485
-g s -485
-g a -485
-g q -485
-i g -485
-p g -485
-p z -485
-c g -485
-c z -485
-v t -485
-v h -485
-v n -485
-v m -485
-v r -485
-v i -485
-v p -485
-v z -485
-v b -485
-v y -485
-v f -485
-v x -485
-v w -485
-v j -485
-v u -485
-v k -485
-e g -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z a -485
-z q -485
-d g -485
-b g -485
-b z -485
-s g -485
-y t -485
-y h -485
-y n -485
-y m -485
-y l -485
-y r -485
-y i -485
-y p -485
-y v -485
-y z -485
-y b -485
-y y -485
-y f -485
-y x -485
-y w -485
-y j -485
-y u -485
-y k -485
-a g -485
-w t -485
-w h -485
-w n -485
-w m -485
-w l -485
-w r -485
-w i -485
-w p -485
-w v -485
-w z -485
-w b -485
-w y -485
-w f -485
-w x -485
-w w -485
-w j -485
-w u -485
-w k -485
-j g -485
-u g -485
-q g -485
-k f -485
-T U -485
-O g -485
-M g -485
-I g -485
-C U -485
-V U -485
-E n -485
-E m -485
-E l -485
-E r -485
-E i -485
-E p -485
-E z -485
-E b -485
-E s -485
-E x -485
-E j -485
-E k -485
-E T -485
-E H -485
-E N -485
-E M -485
-E L -485
-E R -485
-E I -485
-E P -485
-E V -485
-E E -485
-E Z -485
-E D -485
-E B -485
-E Y -485
-E F -485
-E X -485
-E A -485
-E W -485
-E U -974
-E K -485
-B o -485
-B h -485
-B l -485
-B r -485
-B i -485
-B e -485
-B y -485
-B a -485
-B u -485
-B O -485
-B H -485
-B N -485
-B M -485
-B L -485
-B R -485
-B G -485
-B I -485
-B P -485
-B C -485
-B E -485
-B D -485
-B B -485
-B S -485
-B F -485
-B U -974
-B Q -485
-B K -485
-Y U -485
-F U -485
-X U -485
-A b -485
-A f -485
-W U -485
-U t -485
-U o -485
-U h -485
-U n -485
-U m -485
-U l -485
-U r -485
-U i -485
-U p -485
-U c -485
-U v -485
-U e -485
-U z -485
-U d -485
-U b -485
-U s -485
-U y -485
-U f -485
-U x -485
-U a -485
-U w -485
-U j -485
-U q -485
-U k -485
-U T -485
-U O -485
-U H -485
-U N -485
-U M -485
-U L -485
-U R -485
-U G -485
-U I -485
-U P -485
-U C -485
-U V -485
-U E -485
-U Z -485
-U D -485
-U B -485
-U S -485
-U Y -485
-U F -485
-U X -485
-U W -485
-U U -974
-U Q -485
-U K -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -974
-L cq -1949
-L ' -1949
-T hy -485
-T - -485
-T en -485
-T em -485
-A cq -2438
-A ' -2438
-hy T -485
-- T -485
-en T -485
-em T -485
-Y hy -1949
-Y - -1949
-Y en -1949
-Y em -1949
-p cq -1949
-p ' -1949
-c cq -1460
-c ' -1460
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-V hy -1949
-V - -1949
-V en -1949
-V em -1949
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -1460
-R ' -1460
-W hy -2438
-W - -2438
-W en -2438
-W em -2438
-cq d -1460
-' d -1460
-F hy -1949
-F - -1949
-F en -1949
-F em -1949
-X hy -1949
-X - -1949
-X en -1949
-X em -1949
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1949
-K - -1949
-K en -1949
-K em -1949
-cq s -485
-' s -485
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-R hy -974
-R - -974
-R en -974
-R em -974
-K cq -485
-K ' -485
-t g -974
-v cq -485
-v ' -485
-b f -485
-y cq -485
-y ' -485
-w cq -485
-w ' -485
-k cq -974
-k ' -974
-P cq -485
-P ' -485
-P hy -974
-P - -974
-P en -974
-P em -974
-E cq -485
-E ' -485
-E hy -974
-E - -974
-E en -974
-E em -974
-B cq -485
-B ' -485
-J cq -485
-J ' -485
-J hy -485
-J - -485
-J en -485
-J em -485
-U cq -485
-U ' -485
-v hy -485
-v - -485
-v en -485
-v em -485
-y hy -485
-y - -485
-y en -485
-y em -485
-w hy -485
-w - -485
-w en -485
-w em -485
-B hy -485
-B - -485
-B en -485
-B em -485
-U hy -485
-U - -485
-U en -485
-U em -485
-hy g -485
-- g -485
-en g -485
-em g -485
-charset
-! 8781,18225,330,1170,-692,899 2 161057 -- MSL 1 (19U 33)
-dq 12684,18225,0,945,-4193,899 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,18225,687,2103,-74,899 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19686,2730,1710,507,899 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,18894,1026,0,-3053 2 161061 -- MSL 5 (19U 37)
-& 20490,18225,330,0,-320 2 161062 -- MSL 6 (19U 38)
-cq 8781,18225,0,1434,-3581,899 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18225,4845,3531,-2057,899 2 161064 -- MSL 9 (19U 40)
-) 8781,18225,4845,0,2067 2 161065 -- MSL 10 (19U 41)
-* 13173,18225,0,927,-1580,899 2 161066 -- MSL 11 (19U 42)
-+ 23418,15750,0,0,-2993 0 161067 -- MSL 12 (19U 43)
-, 8781,2835,3360,0,648 0 161068 -- MSL 13 (19U 44)
-hy 8781,7155,0,468,153,468 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,2685,330,0,-632 0 161070 -- MSL 15 (19U 46)
-sl 8781,18225,330,3183,801,899 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,18225,330,1938,237,899 2 161072 -- MSL 17 (19U 48)
-1 13173,18225,0,0,165 2 161073 -- MSL 18 (19U 49)
-2 13173,18225,0,876,567,876 2 161074 -- MSL 19 (19U 50)
-3 13173,18225,330,1020,645,899 2 161075 -- MSL 20 (19U 51)
-4 13173,18225,0,1773,618,899 2 161076 -- MSL 21 (19U 52)
-5 13173,17895,330,1362,1008,899 2 161077 -- MSL 22 (19U 53)
-6 13173,18480,330,2085,147,899 2 161078 -- MSL 23 (19U 54)
-7 13173,17895,330,4029,-1493,899 2 161079 -- MSL 24 (19U 55)
-8 13173,18225,330,1827,306,899 2 161080 -- MSL 25 (19U 56)
-9 13173,18225,570,1785,447,899 2 161081 -- MSL 26 (19U 57)
-: 8781,11988,330,501,-632,501 0 161082 -- MSL 27 (19U 58)
-; 8781,11988,3360,0,1074 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 23418,10875,0,0,-3182 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 13173,18225,330,1362,-2849,899 2 161087 -- MSL 32 (19U 63)
-at 23418,16980,3654,750,-227,750 2 161088 -- MSL 33 (19U 64)
-@ "
-A 16101,18225,0,33,2700,33 2 161089 -- MSL 34 (19U 65)
-B 16101,17895,0,1116,1701,899 2 161090 -- MSL 35 (19U 66)
-C 17565,18225,330,2700,-872,899 2 161091 -- MSL 36 (19U 67)
-D 19029,17895,0,594,2298,594 2 161092 -- MSL 37 (19U 68)
-E 16101,17895,0,2091,1800,899 2 161093 -- MSL 38 (19U 69)
-F 15126,17895,0,3180,1725,899 2 161094 -- MSL 39 (19U 70)
-G 19029,18225,330,2301,-605,899 2 161095 -- MSL 40 (19U 71)
-H 19029,17895,0,3057,1614,899 2 161096 -- MSL 41 (19U 72)
-I 8781,17895,0,3165,1716,899 2 161097 -- MSL 42 (19U 73)
-J 11709,17895,330,2847,1797,899 2 161098 -- MSL 43 (19U 74)
-K 17565,17895,0,3273,1425,899 2 161099 -- MSL 44 (19U 75)
-L 14637,17895,0,1023,2487,899 2 161100 -- MSL 45 (19U 76)
-M 21954,17895,0,2712,1983,899 2 161101 -- MSL 46 (19U 77)
-N 17565,17895,330,3843,1578,899 2 161102 -- MSL 47 (19U 78)
-O 19029,18225,330,1356,-491,899 2 161103 -- MSL 48 (19U 79)
-P 16101,17895,0,1950,1116,899 2 161104 -- MSL 49 (19U 80)
-Q 19029,18225,4761,1215,-350,899 2 161105 -- MSL 50 (19U 81)
-R 16101,17895,0,1041,1926,899 2 161106 -- MSL 51 (19U 82)
-S 13173,18225,330,2190,609,899 2 161107 -- MSL 52 (19U 83)
-T 14637,17895,0,3939,-89,899 2 161108 -- MSL 53 (19U 84)
-U 19029,17895,330,3246,-1634,899 2 161109 -- MSL 54 (19U 85)
-V 16101,17895,330,4185,-1169,899 2 161110 -- MSL 55 (19U 86)
-W 21954,17895,330,4353,-821,899 2 161111 -- MSL 56 (19U 87)
-X 16101,17895,0,3276,2067,899 2 161112 -- MSL 57 (19U 88)
-Y 14637,17895,0,4533,-1085,899 2 161113 -- MSL 58 (19U 89)
-Z 14637,17895,0,2856,1710,899 2 161114 -- MSL 59 (19U 90)
-lB 8781,17895,4380,4026,1575,899 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18225,330,0,-2228 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,17895,4380,1938,3663,899 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,899 1 161119 -- MSL 64 (19U 95)
-oq 8781,18225,0,1422,-3569,899 2 161169 -- MSL 66 (19U 145)
-` "
-a 13173,12669,330,759,1044,759 0 161121 -- MSL 67 (19U 97)
-b 13173,18300,330,732,1038,732 2 161122 -- MSL 68 (19U 98)
-c 11709,12669,330,1275,318,899 0 161123 -- MSL 69 (19U 99)
-d 13173,18300,330,2283,1065,899 2 161124 -- MSL 70 (19U 100)
-e 11709,12669,330,1011,444,899 0 161125 -- MSL 71 (19U 101)
-f 7317,18300,5655,5346,5535,899 3 161126 -- MSL 72 (19U 102)
-g 13173,12669,5655,813,1281,813 1 161127 -- MSL 73 (19U 103)
-h 13173,18300,330,750,1188,750 2 161128 -- MSL 74 (19U 104)
-i 7317,18369,330,1002,435,899 2 161129 -- MSL 75 (19U 105)
-j 7317,18369,5655,1212,5187,899 3 161130 -- MSL 76 (19U 106)
-k 11709,18300,330,1941,1422,899 2 161131 -- MSL 77 (19U 107)
-l 7317,18300,330,1731,276,899 2 161132 -- MSL 78 (19U 108)
-m 19029,12669,330,1080,1098,899 0 161133 -- MSL 79 (19U 109)
-n 13173,12669,330,786,1053,786 0 161134 -- MSL 80 (19U 110)
-o 13173,12669,330,771,732,771 0 161135 -- MSL 81 (19U 111)
-p 13173,12669,5655,471,3981,471 1 161136 -- MSL 82 (19U 112)
-q 13173,12669,5655,1377,651,899 1 161137 -- MSL 83 (19U 113)
-r 10245,12669,0,2094,429,899 0 161138 -- MSL 84 (19U 114)
-s 10245,12669,330,786,1116,786 0 161139 -- MSL 85 (19U 115)
-t 7317,15339,330,1908,672,899 0 161140 -- MSL 86 (19U 116)
-u 13173,12669,330,747,468,747 0 161141 -- MSL 87 (19U 117)
-v 11709,12684,330,1404,399,899 0 161142 -- MSL 88 (19U 118)
-w 17565,12669,330,1461,720,899 0 161143 -- MSL 89 (19U 119)
-x 11709,12669,330,1134,2592,899 0 161144 -- MSL 90 (19U 120)
-y 11709,12669,5655,561,2538,561 1 161145 -- MSL 91 (19U 121)
-z 10245,12339,2163,1122,1815,899 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210,3360,-1691,899 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210,0,2232 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 16101,23955,0,33,2700,33 2 161216 -- MSL 99 (19U 192)
-^A 16101,23955,0,1314,2700,899 2 161218 -- MSL 100 (19U 194)
-`E 16101,23955,0,2091,1800,899 2 161224 -- MSL 101 (19U 200)
-^E 16101,23955,0,2091,1800,899 2 161226 -- MSL 102 (19U 202)
-:E 16101,23085,0,2091,1800,899 2 161227 -- MSL 103 (19U 203)
-^I 8781,23955,0,3984,1716,899 2 161230 -- MSL 104 (19U 206)
-:I 8781,23085,0,4665,1716,899 2 161231 -- MSL 105 (19U 207)
-aa 13173,18399,0,141,-5399,141 2 161204 -- MSL 106 (19U 180)
-ga 13173,18399,0,0,-4313 2 161120 -- MSL 107 (19U 96)
-a^ 13173,18399,0,0,-3452 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,17124,0,624,-4001,624 2 161192 -- MSL 109 (19U 168)
-~ 13173,17145,0,990,-3308,899 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,23955,330,3246,-1634,899 2 161241 -- MSL 111 (19U 217)
-^U 19029,23955,330,3246,-1634,899 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,899 2 161199 -- MSL 113 (19U 175)
-'Y 14637,23955,0,4533,-1085,899 2 161245 -- MSL 114 (19U 221)
-'y 11709,18399,5655,561,2538,561 3 161277 -- MSL 115 (19U 253)
-de 13173,18225,0,543,-3521,543 2 161200 -- MSL 116 (19U 176)
-,C 17565,18225,5019,2700,-872,899 2 161223 -- MSL 117 (19U 199)
-,c 11709,12669,4785,1275,636,899 0 161255 -- MSL 118 (19U 231)
-~N 17565,23079,330,3843,1578,899 2 161233 -- MSL 119 (19U 209)
-~n 13173,17145,330,990,1053,899 2 161265 -- MSL 120 (19U 241)
-r! 8781,12231,6324,33,444,33 1 161185 -- MSL 121 (19U 161)
-r? 13173,12312,6243,0,663 1 161215 -- MSL 122 (19U 191)
-Cs 13173,15684,0,1779,228,899 0 161188 -- MSL 123 (19U 164)
-Po 13173,17895,330,3153,1971,899 2 161187 -- MSL 124 (19U 163)
-Ye 13173,17895,0,4170,-14,899 2 161189 -- MSL 125 (19U 165)
-sc 13173,18225,4200,447,-1358,447 2 161191 -- MSL 126 (19U 167)
-Fn 13173,18300,5655,2388,2691,899 3 161155 -- MSL 127 (19U 131)
-ct 13173,17034,0,996,-776,899 2 161186 -- MSL 128 (19U 162)
-^a 13173,18399,330,759,1044,759 2 161250 -- MSL 129 (19U 226)
-^e 11709,18399,330,1761,444,899 2 161258 -- MSL 130 (19U 234)
-^o 13173,18399,330,771,732,771 2 161268 -- MSL 131 (19U 244)
-^u 13173,18399,330,747,468,747 2 161275 -- MSL 132 (19U 251)
-'a 13173,18399,330,759,1044,759 2 161249 -- MSL 133 (19U 225)
-'e 11709,18399,330,1011,444,899 2 161257 -- MSL 134 (19U 233)
-'o 13173,18399,330,771,732,771 2 161267 -- MSL 135 (19U 243)
-'u 13173,18399,330,747,468,747 2 161274 -- MSL 136 (19U 250)
-`a 13173,18399,330,759,1044,759 2 161248 -- MSL 137 (19U 224)
-`e 11709,18399,330,1011,444,899 2 161256 -- MSL 138 (19U 232)
-`o 13173,18399,330,771,732,771 2 161266 -- MSL 139 (19U 242)
-`u 13173,18399,330,747,468,747 2 161273 -- MSL 140 (19U 249)
-:a 13173,17124,330,759,1044,759 2 161252 -- MSL 141 (19U 228)
-:e 11709,17124,330,1356,444,899 2 161259 -- MSL 142 (19U 235)
-:o 13173,17124,330,1074,732,899 2 161270 -- MSL 143 (19U 246)
-:u 13173,17124,330,747,468,747 2 161276 -- MSL 144 (19U 252)
-oA 16101,23865,0,525,2700,525 2 161221 -- MSL 145 (19U 197)
-^i 7317,18399,330,2907,420,899 2 161262 -- MSL 146 (19U 238)
-/O 19029,18255,330,2082,234,899 2 161240 -- MSL 147 (19U 216)
-AE 23418,17895,0,2961,1959,899 2 161222 -- MSL 148 (19U 198)
-oa 13173,18309,330,759,1044,759 2 161253 -- MSL 149 (19U 229)
-'i 7317,18399,330,3069,420,899 2 161261 -- MSL 150 (19U 237)
-/o 13173,12738,336,1491,1443,899 0 161272 -- MSL 151 (19U 248)
-ae 17565,12669,330,933,771,899 0 161254 -- MSL 152 (19U 230)
-:A 16101,23085,0,2055,2700,899 2 161220 -- MSL 153 (19U 196)
-`i 7317,18399,330,1383,420,899 2 161260 -- MSL 154 (19U 236)
-:O 19029,23085,330,1356,-491,899 2 161238 -- MSL 155 (19U 214)
-:U 19029,23085,330,3246,-1634,899 2 161244 -- MSL 156 (19U 220)
-'E 16101,23955,0,2091,1800,899 2 161225 -- MSL 157 (19U 201)
-:i 7317,17124,330,3552,420,899 2 161263 -- MSL 158 (19U 239)
-ss 13173,18300,5655,1131,5829,899 3 161247 -- MSL 159 (19U 223)
-^O 19029,23955,330,1356,-491,899 2 161236 -- MSL 160 (19U 212)
-'A 16101,23955,0,1914,2700,899 2 161217 -- MSL 161 (19U 193)
-~A 16101,23079,0,2580,2700,899 2 161219 -- MSL 162 (19U 195)
-~a 13173,17145,330,990,1044,899 2 161251 -- MSL 163 (19U 227)
--D 19029,17895,0,594,2298,594 2 161232 -- MSL 164 (19U 208)
-Sd 13173,18300,330,2040,732,899 2 161264 -- MSL 165 (19U 240)
-'I 8781,23955,0,5124,1716,899 2 161229 -- MSL 166 (19U 205)
-`I 8781,23955,0,3165,1716,899 2 161228 -- MSL 167 (19U 204)
-'O 19029,23955,330,1356,-491,899 2 161235 -- MSL 168 (19U 211)
-`O 19029,23955,330,1356,-491,899 2 161234 -- MSL 169 (19U 210)
-~O 19029,23079,330,1356,-491,899 2 161237 -- MSL 170 (19U 213)
-~o 13173,17145,330,1665,732,899 2 161269 -- MSL 171 (19U 245)
-vS 13173,23955,330,2268,609,899 2 161162 -- MSL 172 (19U 138)
-vs 10245,18399,330,2472,1116,899 2 161178 -- MSL 173 (19U 154)
-'U 19029,23955,330,3246,-1634,899 2 161242 -- MSL 174 (19U 218)
-:Y 14637,23085,0,4533,-1085,899 2 161183 -- MSL 175 (19U 159)
-:y 11709,17124,5655,561,2538,561 3 161279 -- MSL 176 (19U 255)
-TP 16101,17895,0,813,1107,813 2 161246 -- MSL 177 (19U 222)
-Tp 13173,18300,5655,471,3981,471 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595,612,585,612 1 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200,1650,-1307,899 2 161206 -- MSL 181 (19U 182)
-34 23418,18225,330,0,-2984 2 161214 -- MSL 182 (19U 190)
-\- 23418,8610,0,0,-3026 0 60096 -- MSL 183 ( 7J 192)
-14 23418,18225,330,0,-2471 2 161212 -- MSL 184 (19U 188)
-12 23418,18225,330,0,-1631 2 161213 -- MSL 185 (19U 189)
-Of 13173,18225,0,1119,-1826,899 2 161194 -- MSL 186 (19U 170)
-Om 13173,18225,0,1503,-2639,899 2 161210 -- MSL 187 (19U 186)
-Fo 12198,10095,0,501,330,501 0 161195 -- MSL 188 (19U 171)
-Fc 12198,10095,0,336,495,336 0 161211 -- MSL 190 (19U 187)
-t+- 23418,15750,2625,0,-2948 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19725,0,5355,-3530,899 2 161193 -- MSL 193 (19U 169)
-tno 23418,12165,0,0,-3044 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7155,0,468,153,468 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725,0,5355,-3530,899 2 161198 -- MSL 196 (19U 174)
-S2 9270,18060,0,1602,-554,899 2 161202 -- MSL 197 (19U 178)
-S3 9270,18060,0,1980,-770,899 2 161203 -- MSL 198 (19U 179)
-ac 13173,0,4785,0,-95 0 161208 -- MSL 199 (19U 184)
-S1 9270,18060,0,1146,-1232,899 2 161209 -- MSL 200 (19U 185)
-tmu 23418,14658,0,0,-3629 0 161239 -- MSL 201 (19U 215)
-tdi 23418,14010,0,0,-2957 0 161271 -- MSL 202 (19U 247)
-u203C 13125,18225,330,1110,-692,899 2 87315 -- MSL 221 (10U 19)
-u20A7 22935,17895,330,1908,1116,899 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,9945,0,0,-2399 0 161207 -- MSL 302 (19U 183)
-u013F 14637,17895,0,1023,2487,899 2 51943 -- MSL 306 ( 6J 231)
-u0140 7317,18300,330,3285,276,899 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18150,297,99,-1469,99 2 60122 -- MSL 308 ( 7J 218)
-u0149 16098,18225,330,786,216,786 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18225,0,852,-3668,852 2 60101 -- MSL 310 ( 7J 197)
-sd 13173,18225,0,612,-3668,612 2 60102 -- MSL 311 ( 7J 198)
-dg 13173,18225,4200,1470,-1433,899 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550,0,5841,-3491,899 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,899 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,18399,0,1908,-5381,899 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,18309,0,0,-5420 2 60152 -- MSL 316 ( 7J 248)
-f/ 3402,18225,330,8451,6846,899 2 60109 -- MSL 324 ( 7J 205)
-em 23418,6900,0,345,153,345 0 161175 -- MSL 325 (19U 151)
-en 13173,6900,0,393,153,393 0 161174 -- MSL 326 (19U 150)
-dd 13173,18225,4200,1056,-1019,899 2 161159 -- MSL 327 (19U 135)
-.i 7317,12669,330,120,420,120 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18225,0,585,-3806,585 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 13173,18060,0,1413,-1058,899 2 87548 -- MSL 332 (10U 252)
-u0111 13173,18300,330,2718,1092,899 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 16101,23700,0,2400,2700,899 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 13173,18339,330,1122,1044,899 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 16101,18225,3045,33,2700,33 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 13173,12669,3186,759,1044,759 0 75193 -- MSL 405 ( 9E 185)
-'C 17565,23955,330,2700,-872,899 2 75206 -- MSL 406 ( 9E 198)
-'c 11709,18399,330,2199,318,899 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 17565,23955,330,2892,-872,899 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11709,18399,330,2640,318,899 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,23955,0,594,2298,594 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 16101,18339,330,3303,1065,899 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16101,23955,0,2091,1800,899 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,18399,330,2640,444,899 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16101,17895,3045,2091,1800,899 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,12669,3186,1011,444,899 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14637,23955,0,1719,2487,899 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,24327,330,4212,276,899 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14637,18339,0,1359,2487,899 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9759,18339,330,3291,276,899 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 17565,23955,330,3843,1578,899 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13173,18399,330,786,1053,786 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 17565,23955,330,3843,1578,899 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13173,18399,330,1107,1053,899 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 19029,23955,330,2832,-491,899 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13173,18399,330,3321,732,899 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 16101,23955,0,1041,1926,899 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 10245,18399,0,2094,429,899 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 16101,23955,0,1041,1926,899 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 10245,18399,0,2733,429,899 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 13173,23955,330,2928,609,899 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18399,330,1605,1116,899 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 14637,23955,0,3939,-89,899 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9270,18339,330,3345,672,899 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 14637,17895,5019,3939,633,899 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7317,15339,4785,1908,3291,899 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,23955,330,3246,-1634,899 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13173,18399,330,2400,468,899 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,23865,330,3246,-1634,899 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13173,18309,330,747,468,747 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 14637,23955,0,2856,1710,899 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 10245,18399,2163,1446,1815,899 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 14637,23085,0,2856,1710,899 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 10245,17124,2163,1122,1815,899 2 75199 -- MSL 485 ( 9E 191)
-u2070 9270,18060,0,2427,-944,899 2 51753 -- MSL 1000 ( 6J 41)
-u2074 9270,18060,0,2415,-599,899 2 51748 -- MSL 1001 ( 6J 36)
-u2075 9270,17895,0,2130,-335,899 2 51749 -- MSL 1002 ( 6J 37)
-u2076 9270,18060,0,2892,-791,899 2 51806 -- MSL 1003 ( 6J 94)
-u2077 9270,17895,0,3513,-1637,899 2 51750 -- MSL 1004 ( 6J 38)
-u2078 9270,18060,0,2175,-812,899 2 51754 -- MSL 1005 ( 6J 42)
-u2079 9270,18060,0,2847,-845,899 2 51752 -- MSL 1006 ( 6J 40)
-lq 13173,18225,0,1320,-3569,899 2 161171 -- MSL 1017 (19U 147)
-rq 13173,18225,0,1332,-3581,899 2 161172 -- MSL 1018 (19U 148)
-Bq 13173,3039,3156,0,453 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,3360,0,0,483 0 161157 -- MSL 1028 (19U 133)
-vz 10245,18399,2163,1872,1815,899 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703,0,5094,-3536,899 2 128299 -- MSL 1034 (15U 43)
-u211E 20001,18315,4056,315,-1013,315 2 51794 -- MSL 1036 ( 6J 82)
-fi 13173,18300,5655,534,5772,534 3 60077 -- MSL 1040 ( 7J 173)
-fl 13173,18300,5655,1773,5736,899 3 60078 -- MSL 1041 ( 7J 174)
-ff 14148,18300,5655,5796,5352,899 3 51883 -- MSL 1042 ( 6J 171)
-Fi 20004,18300,5655,672,5466,672 3 51884 -- MSL 1043 ( 6J 172)
-Fl 20004,18300,5655,1851,5418,899 3 51885 -- MSL 1044 ( 6J 173)
-ij 13173,18369,5655,1212,435,899 3 60134 -- MSL 1047 ( 7J 230)
-u2105 23418,18225,330,1125,-842,899 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19029,23700,330,2301,-605,899 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,18339,5655,1122,1281,899 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 13173,18225,5019,2190,609,899 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12669,4785,786,1368,786 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,23085,0,3165,1716,899 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3039,3156,0,-581 0 161154 -- MSL 1067 (19U 130)
-%0 32202,18894,1026,0,-3134 2 161161 -- MSL 1068 (19U 137)
-a- 13173,15819,0,867,-4256,867 0 60154 -- MSL 1084 ( 7J 250)
-ab 13173,18339,0,1122,-4280,899 2 75170 -- MSL 1086 ( 9E 162)
-a. 13173,17124,0,0,-6221 2 75263 -- MSL 1088 ( 9E 255)
-oe 17565,12669,330,1107,711,899 0 161180 -- MSL 1090 (19U 156)
-OE 24882,18225,330,2016,978,899 2 161164 -- MSL 1091 (19U 140)
-fo 7317,10095,0,939,333,899 0 161163 -- MSL 1092 (19U 139)
-fc 7317,10095,0,774,498,774 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 14637,17895,0,1023,2487,899 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,18300,330,1749,654,899 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,18399,0,3321,-4643,899 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,564,3186,0,-3845 0 75186 -- MSL 1098 ( 9E 178)
-vZ 14637,23955,0,2856,1710,899 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21465,17895,330,1872,1716,899 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/TNRB b/contrib/groff/font/devlj4/TNRB
deleted file mode 100644
index 51029000f18e..000000000000
--- a/contrib/groff/font/devlj4/TNRB
+++ /dev/null
@@ -1,444 +0,0 @@
-# M Times Bd
-name TNRB
-spacewidth 6615
-pcltypeface 16901
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl 0
-kernpairs
-1 1 -1459
-A T -1963
-A V -3410
-A W -2932
-A Y -2428
-A v -1963
-A w -1963
-A y -1963
-A cq -1963
-A ' -1963
-F , -2428
-F . -2428
-F A -1963
-L T -2428
-L V -2428
-L W -2428
-L Y -2428
-L y -1459
-L cq -2428
-L ' -2428
-P , -2428
-P . -2428
-P A -1963
-R T -929
-R V -929
-R W -929
-R Y -929
-R y -929
-T , -1963
-T hy -2428
-T - -2428
-T . -1963
-T : -1963
-T ; -1963
-T A -1963
-T O -477
-T a -2428
-T c -2428
-T e -2428
-T i -477
-T o -2428
-T r -1963
-T s -2428
-T u -2428
-T w -1963
-T y -1963
-V , -3410
-V hy -1963
-V - -1963
-V . -3410
-V : -2428
-V ; -2428
-V A -3410
-V O -529
-V a -2428
-V e -2428
-V i -981
-V o -2428
-V r -1963
-V u -2428
-V y -2428
-W , -2428
-W hy -981
-W - -981
-W . -2428
-W : -1459
-W ; -1459
-W A -2932
-W a -1459
-W e -1459
-W i -477
-W o -1459
-W r -477
-W u -477
-W y -981
-Y , -2428
-Y hy -2428
-Y - -2428
-Y . -2428
-Y : -2428
-Y ; -2428
-Y A -2428
-Y a -2932
-Y e -2932
-Y i -981
-Y o -2932
-Y p -2428
-Y q -2932
-Y u -2428
-Y v -2932
-f f 0
-f cq 1460
-f ' 1460
-r , -2428
-r hy -981
-r - -981
-r . -2428
-r c -477
-r e -477
-r h 0
-r o -477
-r q -477
-r t 0
-r w 0
-r x 0
-r y 0
-r z 0
-r cq 478
-r ' 478
-v , -1459
-v . -1459
-w , -1459
-w . -1459
-y , -1459
-y . -1459
-oq oq -1963
-oq ` -1963
-` oq -1963
-` ` -1963
-cq s -981
-' s -981
-cq cq -1963
-cq ' -1963
-' cq -1963
-' ' -1963
-charset
-! 8811,17919,349 2 161057 -- U+0021 (19U 33)
-dq 14689,17919 2 161058 -- U+0022 (19U 34)
-" "
-sh 13229,17880,362 2 161059 -- U+0023 (19U 35)
-# "
-Do 13229,17996,1783 2 161060 -- U+0024 (19U 36)
-$ "
-% 26458,17919,736 2 161061 -- U+0025 (19U 37)
-& 22040,17919,400 2 161062 -- U+0026 (19U 38)
-aq 7351,17919 2 161063 -- U+0027 (19U 39)
-( 8811,17919,5297 3 161064 -- U+0028 (19U 40)
-) 8811,17919,5297 3 161065 -- U+0029 (19U 41)
-* 13229,17919 2 161066 -- U+002A (19U 42)
-+ 15077,15813 0 161067 -- U+002B (19U 43)
-, 6615,3966,4638 0 161068 -- U+002C (19U 44)
-hy 8811,7416 0 161069 -- U+002D (19U 45)
-- "
-. 6615,3979,323 0 161070 -- U+002E (19U 46)
-sl 7351,17919,400 2 161071 -- U+002F (19U 47)
-/ "
-0 13229,17880,362 2 161072 -- U+0030 (19U 48)
-1 13229,17880 2 161073 -- U+0031 (19U 49)
-2 13229,17880 2 161074 -- U+0032 (19U 50)
-3 13229,17880,375 2 161075 -- U+0033 (19U 51)
-4 13229,17880 2 161076 -- U+0034 (19U 52)
-5 13229,17518,362 2 161077 -- U+0035 (19U 53)
-6 13229,17880,362 2 161078 -- U+0036 (19U 54)
-7 13229,17518,362 2 161079 -- U+0037 (19U 55)
-8 13229,17815,362 2 161080 -- U+0038 (19U 56)
-9 13229,17880,362 2 161081 -- U+0039 (19U 57)
-: 8811,12428,323 0 161082 -- U+003A (19U 58)
-; 8811,12428,4638 0 161083 -- U+003B (19U 59)
-< 15077,15025 0 161084 -- U+003C (19U 60)
-= 15077,11679 0 161085 -- U+003D (19U 61)
-> 15077,15025 0 161086 -- U+003E (19U 62)
-? 13229,17919,349 2 161087 -- U+003F (19U 63)
-at 24611,17919,5710 3 161088 -- U+0040 (19U 64)
-@ "
-A 19107,17880 2 161089 -- U+0041 (19U 65)
-B 17648,17518 2 161090 -- U+0042 (19U 66)
-C 19107,17919,400 2 161091 -- U+0043 (19U 67)
-D 19107,17518 2 161092 -- U+0044 (19U 68)
-E 17648,17518 2 161093 -- U+0045 (19U 69)
-F 16162,17518 2 161094 -- U+0046 (19U 70)
-G 20580,17932,413 2 161095 -- U+0047 (19U 71)
-H 20580,17518 2 161096 -- U+0048 (19U 72)
-I 10297,17518 2 161097 -- U+0049 (19U 73)
-J 13229,17518,400 2 161098 -- U+004A (19U 74)
-K 20580,17518 2 161099 -- U+004B (19U 75)
-L 17648,17518 2 161100 -- U+004C (19U 76)
-M 24973,17518 2 161101 -- U+004D (19U 77)
-N 19107,17518,400 2 161102 -- U+004E (19U 78)
-O 20580,17919,400 2 161103 -- U+004F (19U 79)
-P 16162,17518 2 161104 -- U+0050 (19U 80)
-Q 20580,17919,4780 2 161105 -- U+0051 (19U 81)
-R 19107,17518 2 161106 -- U+0052 (19U 82)
-S 14715,17919,413 2 161107 -- U+0053 (19U 83)
-T 17648,17518 2 161108 -- U+0054 (19U 84)
-U 19107,17518,413 2 161109 -- U+0055 (19U 85)
-V 19107,17518,400 2 161110 -- U+0056 (19U 86)
-W 26458,17518,400 2 161111 -- U+0057 (19U 87)
-X 19107,17518 2 161112 -- U+0058 (19U 88)
-Y 19107,17518 2 161113 -- U+0059 (19U 89)
-Z 17648,17518 2 161114 -- U+005A (19U 90)
-lB 8811,17518,4832 2 161115 -- U+005B (19U 91)
-[ "
-rs 7351,17919,400 2 161116 -- U+005C (19U 92)
-\ "
-rB 8811,17518,4832 2 161117 -- U+005D (19U 93)
-] "
-ha 15374,17880 2 161118 -- U+005E (19U 94)
-_ 13229,0,5710 1 161119 -- U+005F (19U 95)
-ga 8811,18113 2 161120 -- U+0060 (19U 96)
-a 13229,12441,168 0 161121 -- U+0061 (19U 97)
-b 14715,17518,362 2 161122 -- U+0062 (19U 98)
-c 11743,12441,362 0 161123 -- U+0063 (19U 99)
-d 14715,17518,362 2 161124 -- U+0064 (19U 100)
-e 11743,12441,362 0 161125 -- U+0065 (19U 101)
-f 8811,17919 2 161126 -- U+0066 (19U 102)
-g 13229,12441,5710 1 161127 -- U+0067 (19U 103)
-h 14715,17518 2 161128 -- U+0068 (19U 104)
-i 7351,17932 2 161129 -- U+0069 (19U 105)
-j 8811,17919,5710 3 161130 -- U+006A (19U 106)
-k 14715,17518 2 161131 -- U+006B (19U 107)
-l 7351,17518 2 161132 -- U+006C (19U 108)
-m 22040,12441 0 161133 -- U+006D (19U 109)
-n 14715,12441 0 161134 -- U+006E (19U 110)
-o 13229,12441,362 0 161135 -- U+006F (19U 111)
-p 14715,12441,5659 1 161136 -- U+0070 (19U 112)
-q 14715,12441,5659 1 161137 -- U+0071 (19U 113)
-r 11743,12441 0 161138 -- U+0072 (19U 114)
-s 10297,12441,362 0 161139 -- U+0073 (19U 115)
-t 8811,16498,168 2 161140 -- U+0074 (19U 116)
-u 14715,12079,362 0 161141 -- U+0075 (19U 117)
-v 13229,12079,362 0 161142 -- U+0076 (19U 118)
-w 19107,12079,362 0 161143 -- U+0077 (19U 119)
-x 13229,12079 0 161144 -- U+0078 (19U 120)
-y 13229,12079,5710 1 161145 -- U+0079 (19U 121)
-z 11743,12079 0 161146 -- U+007A (19U 122)
-{ 10426,17919,5361 3 161147 -- U+007B (19U 123)
-lC "
-| 5827,17919,5710 3 161148 -- U+007C (19U 124)
-ba "
-} 10426,17945,5349 3 161149 -- U+007D (19U 125)
-rC "
-ti 13759,9173 0 161150 -- U+007E (19U 126)
-r! 8811,12570,5710 1 161185 -- U+00A1 (19U 161)
-ct 13229,17415,4871 2 161186 -- U+00A2 (19U 162)
-Po 13229,17983,362 2 161187 -- U+00A3 (19U 163)
-Cs 13229,15012 0 161188 -- U+00A4 (19U 164)
-Ye 13229,17518 2 161189 -- U+00A5 (19U 165)
-bb 5827,17919,5710 3 161190 -- U+00A6 (19U 166)
-sc 13229,17919,5710 3 161191 -- U+00A7 (19U 167)
-ad 8811,17673 2 161192 -- U+00A8 (19U 168)
-co 19766,17919,400 2 161193 -- U+00A9 (19U 169)
-Of 7932,17880 2 161194 -- U+00AA (19U 170)
-Fo 13229,11976 0 161195 -- U+00AB (19U 171)
-tno 15077,11653 0 161196 -- U+00AC (19U 172)
-u00AD 8811,7416 0 161197 -- U+00AD (19U 173)
-rg 19766,17919,400 2 161198 -- U+00AE (19U 174)
-u00AF 13229,20580 2 161199 -- U+00AF (19U 175)
-de 10581,17880 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15813 0 161201 -- U+00B1 (19U 177)
-S2 7932,17880 2 161202 -- U+00B2 (19U 178)
-S3 7932,17880 2 161203 -- U+00B3 (19U 179)
-aa 8811,18113 2 161204 -- U+00B4 (19U 180)
-mc 15245,12079,5697 1 161205 -- U+00B5 (19U 181)
-ps 14289,17518,5710 3 161206 -- U+00B6 (19U 182)
-pc 6615,10917 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,155,4987 0 161208 -- U+00B8 (19U 184)
-S1 7932,17880 2 161209 -- U+00B9 (19U 185)
-Om 8733,17880 2 161210 -- U+00BA (19U 186)
-Fc 13229,11976 0 161211 -- U+00BB (19U 187)
-14 19844,17880,762 2 161212 -- U+00BC (19U 188)
-12 19844,17880,762 2 161213 -- U+00BD (19U 189)
-34 19844,17880,762 2 161214 -- U+00BE (19U 190)
-r? 13229,12557,5710 1 161215 -- U+00BF (19U 191)
-`A 19107,23500 2 161216 -- U+00C0 (19U 192)
-'A 19107,23500 2 161217 -- U+00C1 (19U 193)
-^A 19107,23500 2 161218 -- U+00C2 (19U 194)
-~A 19107,22660 2 161219 -- U+00C3 (19U 195)
-:A 19107,22686 2 161220 -- U+00C4 (19U 196)
-oA 19107,22247 2 161221 -- U+00C5 (19U 197)
-AE 26458,17518 2 161222 -- U+00C6 (19U 198)
-,C 19107,17919,4987 2 161223 -- U+00C7 (19U 199)
-`E 17648,23500 2 161224 -- U+00C8 (19U 200)
-'E 17648,23500 2 161225 -- U+00C9 (19U 201)
-^E 17648,23500 2 161226 -- U+00CA (19U 202)
-:E 17648,22686 2 161227 -- U+00CB (19U 203)
-`I 10297,23500 2 161228 -- U+00CC (19U 204)
-'I 10297,23500 2 161229 -- U+00CD (19U 205)
-^I 10297,23500 2 161230 -- U+00CE (19U 206)
-:I 10297,22686 2 161231 -- U+00CF (19U 207)
--D 19107,17518 2 161232 -- U+00D0 (19U 208)
-~N 19107,22686,400 2 161233 -- U+00D1 (19U 209)
-`O 20580,23500,400 2 161234 -- U+00D2 (19U 210)
-'O 20580,23500,400 2 161235 -- U+00D3 (19U 211)
-^O 20580,23500,400 2 161236 -- U+00D4 (19U 212)
-~O 20580,22686,400 2 161237 -- U+00D5 (19U 213)
-:O 20580,22686,400 2 161238 -- U+00D6 (19U 214)
-tmu 15077,14366 0 161239 -- U+00D7 (19U 215)
-/O 20580,18345,995 2 161240 -- U+00D8 (19U 216)
-`U 19107,23500,413 2 161241 -- U+00D9 (19U 217)
-'U 19107,23500,413 2 161242 -- U+00DA (19U 218)
-^U 19107,23500,413 2 161243 -- U+00DB (19U 219)
-:U 19107,22686,413 2 161244 -- U+00DC (19U 220)
-'Y 19107,23500 2 161245 -- U+00DD (19U 221)
-TP 16162,17518 2 161246 -- U+00DE (19U 222)
-ss 14715,17919,129 2 161247 -- U+00DF (19U 223)
-`a 13229,18113,168 2 161248 -- U+00E0 (19U 224)
-'a 13229,18113,168 2 161249 -- U+00E1 (19U 225)
-^a 13229,18436,168 2 161250 -- U+00E2 (19U 226)
-~a 13229,17725,168 2 161251 -- U+00E3 (19U 227)
-:a 13229,17686,168 2 161252 -- U+00E4 (19U 228)
-oa 13229,18565,168 2 161253 -- U+00E5 (19U 229)
-ae 19107,12441,362 0 161254 -- U+00E6 (19U 230)
-,c 11743,12441,4987 0 161255 -- U+00E7 (19U 231)
-`e 11743,18113,362 2 161256 -- U+00E8 (19U 232)
-'e 11743,18113,362 2 161257 -- U+00E9 (19U 233)
-^e 11743,18436,362 2 161258 -- U+00EA (19U 234)
-:e 11743,17686,362 2 161259 -- U+00EB (19U 235)
-`i 7351,18113 2 161260 -- U+00EC (19U 236)
-'i 7351,18113 2 161261 -- U+00ED (19U 237)
-^i 7351,18436 2 161262 -- U+00EE (19U 238)
-:i 7351,17686 2 161263 -- U+00EF (19U 239)
-Sd 13229,17919,362 2 161264 -- U+00F0 (19U 240)
-~n 14715,17725 2 161265 -- U+00F1 (19U 241)
-`o 13229,18113,362 2 161266 -- U+00F2 (19U 242)
-'o 13229,18113,362 2 161267 -- U+00F3 (19U 243)
-^o 13229,18436,362 2 161268 -- U+00F4 (19U 244)
-~o 13229,17725,362 2 161269 -- U+00F5 (19U 245)
-:o 13229,17686,362 2 161270 -- U+00F6 (19U 246)
-tdi 14521,14418 0 161271 -- U+00F7 (19U 247)
-/o 13229,12777,362 0 161272 -- U+00F8 (19U 248)
-`u 14715,18113,362 2 161273 -- U+00F9 (19U 249)
-'u 14715,18113,362 2 161274 -- U+00FA (19U 250)
-^u 14715,18436,362 2 161275 -- U+00FB (19U 251)
-:u 14715,17686,362 2 161276 -- U+00FC (19U 252)
-'y 13229,18113,5710 3 161277 -- U+00FD (19U 253)
-Tp 14715,17919,5710 3 161278 -- U+00FE (19U 254)
-:y 13229,17686,5710 3 161279 -- U+00FF (19U 255)
-u0041_0306 19107,23151 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 13229,17919,168 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 19107,17880,5969 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 13229,12441,5969 1 75193 -- U+0105 ( 9E 185)
-'C 19107,23500,400 2 75206 -- U+0106 ( 9E 198)
-'c 11743,18113,362 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 19107,23577,400 2 75208 -- U+010C ( 9E 200)
-u0061_030C 11743,18436,362 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23577 2 75215 -- U+010E ( 9E 207)
-u0064_030C 19405,17919,362 2 75247 -- U+010F ( 9E 239)
-u0111 14715,17518,362 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,17518,5969 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 11743,12441,5969 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23577 2 75212 -- U+011A ( 9E 204)
-u0065_030C 11743,18436,362 2 75244 -- U+011B ( 9E 236)
-u0047_0306 20580,23151,413 2 46288 -- U+011E ( 5T 208)
-u0067_0306 13229,17919,5710 3 46320 -- U+011F ( 5T 240)
-u0049_0307 10297,22673 2 46301 -- U+0130 ( 5T 221)
-.i 7351,12079 0 46333 -- U+0131 ( 5T 253)
-IJ 21769,17518,400 2 60135 -- U+0132 ( 7J 231)
-ij 14612,17932,5710 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 17648,23500 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23500 2 75237 -- U+013A ( 9E 229)
-u004C_030C 17648,17919 2 75196 -- U+013D ( 9E 188)
-u006C_030C 12402,17919 2 75198 -- U+013E ( 9E 190)
-u013F 17648,17518 2 95646 -- U+013F (11U 158)
-u0140 10464,17518 2 95647 -- U+0140 (11U 159)
-/L 17648,17518 2 75171 -- U+0141 ( 9E 163)
-/l 7351,17518 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23500,400 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 14715,18113 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23577,400 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 14715,18436 2 75250 -- U+0148 ( 9E 242)
-u0149 19288,17919 2 95660 -- U+0149 (11U 172)
-u004F_030B 20580,23487,400 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 13229,18113,362 2 75253 -- U+0151 ( 9E 245)
-OE 26458,17764,233 2 161164 -- U+0152 (19U 140)
-oe 19107,12441,362 0 161180 -- U+0153 (19U 156)
-u0052_0301 19107,23500 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 11743,18113 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 19107,23577 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 11743,18436 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 14715,23500,413 2 75148 -- U+015A ( 9E 140)
-u0073_0301 10297,18113,362 2 75164 -- U+015B ( 9E 156)
-u0053_0327 14715,17919,4987 2 75178 -- U+015E ( 9E 170)
-u0073_0327 10297,12441,4974 0 75194 -- U+015F ( 9E 186)
-vS 14715,23577,413 2 161162 -- U+0160 (19U 138)
-vs 10297,18436,362 2 161178 -- U+0161 (19U 154)
-u0054_0327 17648,17518,6382 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 8811,16498,6382 3 75262 -- U+0163 ( 9E 254)
-u0054_030C 17648,23577 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 13785,17919,168 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,24004,413 2 75225 -- U+016E ( 9E 217)
-u0075_030A 14715,18565,362 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23487,413 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 14715,18113,362 2 75259 -- U+0171 ( 9E 251)
-:Y 19107,22686 2 161183 -- U+0178 (19U 159)
-u005A_0301 17648,23500 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 11743,18113 2 75167 -- U+017A ( 9E 159)
-u005A_0307 17648,22673 2 75183 -- U+017B ( 9E 175)
-u007A_0307 11743,17673 2 75199 -- U+017C ( 9E 191)
-vZ 17648,23577 2 75150 -- U+017D ( 9E 142)
-vz 11743,18436 2 75166 -- U+017E ( 9E 158)
-Fn 13229,17932,5710 3 161155 -- U+0192 (19U 131)
-a^ 8811,18436 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,18436 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,16201 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,17919 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,17673 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,18565 2 60152 -- U+02DA ( 7J 248)
-ho 8811,220,5969 1 75186 -- U+02DB ( 9E 178)
-~ 8811,17699 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,18113 2 75197 -- U+02DD ( 9E 189)
-en 13229,6899 0 161174 -- U+2013 (19U 150)
-em 26458,6899 0 161175 -- U+2014 (19U 151)
-u2017 13229,0,5710 1 60095 -- U+2017 ( 7J 191)
-oq 8811,17919 2 161169 -- U+2018 (19U 145)
-` "
-cq 8811,17919 2 161170 -- U+2019 (19U 146)
-' "
-bq 8811,3966,4638 0 161154 -- U+201A (19U 130)
-lq 13229,17919 2 161171 -- U+201C (19U 147)
-rq 13229,17919 2 161172 -- U+201D (19U 148)
-Bq 13229,3992,4638 0 161156 -- U+201E (19U 132)
-dg 13229,17518,5181 3 161158 -- U+2020 (19U 134)
-dd 13229,17518,5245 3 161159 -- U+2021 (19U 135)
-bu 9263,12428 0 161173 -- U+2022 (19U 149)
-u2026 26458,3979,349 0 161157 -- U+2026 (19U 133)
-%0 26458,17919,736 2 161161 -- U+2030 (19U 137)
-fm 7441,17919 2 60101 -- U+2032 ( 7J 197)
-sd 14612,17919 2 60102 -- U+2033 ( 7J 198)
-fo 8811,11963 0 161163 -- U+2039 (19U 139)
-fc 8811,11963 0 161179 -- U+203A (19U 155)
-u203C 15981,17919,349 2 87315 -- U+203C (10U 19)
-u207F 9198,14689 0 87548 -- U+207F (10U 252)
-u20A7 25632,17518,336 2 60121 -- U+20A7 ( 7J 217)
-Eu 13229,17880,362 2 161152 -- U+20AC (19U 128)
-u2105 22040,17919,736 2 60072 -- U+2105 ( 7J 168)
-u2113 9922,17919,362 2 60122 -- U+2113 ( 7J 218)
-tm 26458,17518 2 161177 -- U+2122 (19U 153)
-\- 15077,9612 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,17880,762 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371 2 101079 -- U+25CA (12J 215)
-fi 14715,17919 2 60077 -- U+FB01 ( 7J 173)
-fl 14715,17919 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/TNRBI b/contrib/groff/font/devlj4/TNRBI
deleted file mode 100644
index a7db54e9af97..000000000000
--- a/contrib/groff/font/devlj4/TNRBI
+++ /dev/null
@@ -1,433 +0,0 @@
-# M Times New BdIt
-name TNRBI
-spacewidth 6615
-slant 16.340000
-pcltypeface 16901
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl 0
-kernpairs
-1 1 -1459
-A T -1459
-A V -1963
-A W -2428
-A Y -1459
-A v -1963
-A w -1963
-A y -1963
-A cq -1963
-A ' -1963
-F , -3410
-F . -3410
-F A -2428
-L T -477
-L V -981
-L W -981
-L Y -981
-L y -981
-L cq -1459
-L ' -1459
-P , -3410
-P . -3410
-P A -1963
-R V -477
-R W -477
-R Y -477
-R y -477
-T , -2428
-T hy -2428
-T - -2428
-T . -2428
-T : -1963
-T ; -1963
-T A -1459
-T O -477
-T a -2428
-T c -2428
-T e -2428
-T i -981
-T o -2428
-T r -981
-T s -2428
-T u -981
-T w -981
-T y -981
-V , -3410
-V hy -1459
-V - -1459
-V . -3410
-V : -1963
-V ; -1963
-V A -1963
-V a -2932
-V e -2932
-V i -1459
-V o -2932
-V r -1459
-V u -1459
-V y -1963
-W , -1963
-W hy -981
-W - -981
-W . -1963
-W : -1459
-W ; -1459
-W A -1963
-W a -1963
-W e -1963
-W i -981
-W o -1963
-W r -1963
-W u -1459
-W y -1459
-Y , -2428
-Y hy -2428
-Y - -2428
-Y . -1963
-Y : -2428
-Y ; -2428
-Y A -1963
-Y a -2428
-Y e -2932
-Y i -1459
-Y o -2932
-Y p -1963
-Y q -2932
-Y u -2428
-Y v -2428
-f f -477
-f cq 1460
-f ' 1460
-r , -1459
-r . -1459
-r cq 982
-r ' 982
-v , -981
-v . -981
-w , -981
-w . -981
-y , -981
-y . -981
-oq oq -1963
-oq ` -1963
-` oq -1963
-` ` -1963
-cq s -1963
-' s -1963
-cq t -981
-' t -981
-cq cq -1963
-cq ' -1963
-' cq -1963
-' ' -1963
-charset
-! 10297,17919,362,323,-141,211 2 161057 -- U+0021 (19U 33)
-dq 14689,17919,0,1421,-3035,211 2 161058 -- U+0022 (19U 34)
-" "
-sh 13229,17880,362,1305,284,211 2 161059 -- U+0023 (19U 35)
-# "
-Do 13229,18629,2002,1305,297,211 2 161060 -- U+0024 (19U 36)
-$ "
-% 22040,17919,749,0,-1536 2 161061 -- U+0025 (19U 37)
-& 20580,17919,400,0,103 2 161062 -- U+0026 (19U 38)
-aq 7351,17919,0,2287,-2802,211 2 161063 -- U+0027 (19U 39)
-( 8811,17919,5038,4005,-12,211 2 161064 -- U+0028 (19U 40)
-) 8811,17919,5038,0,4302 2 161065 -- U+0029 (19U 41)
-* 13229,17919,0,1550,-1859,211 2 161066 -- U+002A (19U 42)
-+ 15077,15813,0,1395,284,211 0 161067 -- U+002B (19U 43)
-, 6615,3940,4250,0,2067 0 161068 -- U+002C (19U 44)
-hy 8811,7144,0,1034,1150,211 0 161069 -- U+002D (19U 45)
-- "
-. 6615,3876,362,0,1667 0 161070 -- U+002E (19U 46)
-sl 7351,17880,400,4935,3462,211 2 161071 -- U+002F (19U 47)
-/ "
-0 13229,17880,362,1279,-141,211 2 161072 -- U+0030 (19U 48)
-1 13229,17880,0,0,698 2 161073 -- U+0031 (19U 49)
-2 13229,17880,0,866,1214,211 2 161074 -- U+0032 (19U 50)
-3 13229,17880,362,517,995,211 2 161075 -- U+0033 (19U 51)
-4 13229,17880,362,1369,853,211 2 161076 -- U+0034 (19U 52)
-5 13229,17518,375,1421,310,211 2 161077 -- U+0035 (19U 53)
-6 13229,18022,362,1589,-270,211 2 161078 -- U+0036 (19U 54)
-7 13229,17518,362,2739,-1795,211 2 161079 -- U+0037 (19U 55)
-8 13229,17880,362,1072,336,211 2 161080 -- U+0038 (19U 56)
-9 13229,18009,375,1124,194,211 2 161081 -- U+0039 (19U 57)
-: 8811,11950,362,155,258,155 0 161082 -- U+003A (19U 58)
-; 8811,11963,4250,233,1305,211 0 161083 -- U+003B (19U 59)
-< 15077,15025,0,1382,284,211 0 161084 -- U+003C (19U 60)
-= 15077,11679,0,1408,284,211 0 161085 -- U+003D (19U 61)
-> 15077,15025,0,1382,284,211 0 161086 -- U+003E (19U 62)
-? 13229,17919,375,685,-1020,211 2 161087 -- U+003F (19U 63)
-at 22014,17919,5710,2041,1421,211 3 161088 -- U+0040 (19U 64)
-@ "
-A 17648,17919,0,0,2816 2 161089 -- U+0041 (19U 65)
-B 17648,17518,0,736,1990,211 2 161090 -- U+0042 (19U 66)
-C 17648,17919,400,2739,-412,211 2 161091 -- U+0043 (19U 67)
-D 19107,17518,0,775,2274,211 2 161092 -- U+0044 (19U 68)
-E 17648,17518,0,1654,2248,211 2 161093 -- U+0045 (19U 69)
-F 17648,17518,0,2791,1318,211 2 161094 -- U+0046 (19U 70)
-G 19107,17919,400,1977,-516,211 2 161095 -- U+0047 (19U 71)
-H 20580,17518,0,3540,2170,211 2 161096 -- U+0048 (19U 72)
-I 10297,17518,0,3372,2248,211 2 161097 -- U+0049 (19U 73)
-J 13229,17518,400,3902,1524,211 2 161098 -- U+004A (19U 74)
-K 17648,17518,0,3424,2170,211 2 161099 -- U+004B (19U 75)
-L 16162,17518,0,233,2170,211 2 161100 -- U+004C (19U 76)
-M 23526,17518,0,3566,2209,211 2 161101 -- U+004D (19U 77)
-N 19107,17518,194,3669,2170,211 2 161102 -- U+004E (19U 78)
-O 19107,17932,413,1214,-89,211 2 161103 -- U+004F (19U 79)
-P 16162,17518,0,2183,2106,211 2 161104 -- U+0050 (19U 80)
-Q 19107,17919,5504,1201,-89,211 3 161105 -- U+0051 (19U 81)
-R 17648,17518,0,581,2157,211 2 161106 -- U+0052 (19U 82)
-S 14715,17919,400,2041,1899,211 2 161107 -- U+0053 (19U 83)
-T 16162,17518,0,3488,-787,211 2 161108 -- U+0054 (19U 84)
-U 19107,17518,400,3604,-1162,211 2 161109 -- U+0055 (19U 85)
-V 17648,17518,400,4212,-1821,211 2 161110 -- U+0056 (19U 86)
-W 23526,17518,400,4302,-1937,211 2 161111 -- U+0057 (19U 87)
-X 17648,17518,0,3863,2920,211 2 161112 -- U+0058 (19U 88)
-Y 16162,17518,0,4121,-1136,211 2 161113 -- U+0059 (19U 89)
-Z 16162,17518,0,3114,2041,211 2 161114 -- U+005A (19U 90)
-lB 8811,17518,4871,3850,2080,211 2 161115 -- U+005B (19U 91)
-[ "
-rs 7351,17880,400,0,-748 2 161116 -- U+005C (19U 92)
-\ "
-rB 8811,17518,4871,1679,4250,211 2 161117 -- U+005D (19U 93)
-] "
-ha 15077,17880,0,517,-1368,211 2 161118 -- U+005E (19U 94)
-_ 13229,0,5710,0,3643 1 161119 -- U+005F (19U 95)
-ga 8811,17919,0,840,-1834,211 2 161120 -- U+0060 (19U 96)
-a 13229,11976,362,762,801,211 0 161121 -- U+0061 (19U 97)
-b 13229,17919,362,491,1072,211 2 161122 -- U+0062 (19U 98)
-c 11743,11976,362,1098,620,211 0 161123 -- U+0063 (19U 99)
-d 13229,17919,362,2519,788,211 2 161124 -- U+0064 (19U 100)
-e 11743,11976,362,1214,736,211 0 161125 -- U+0065 (19U 101)
-f 8811,17919,5710,5930,5555,211 3 161126 -- U+0066 (19U 102)
-g 13229,11976,5710,1757,2687,211 1 161127 -- U+0067 (19U 103)
-h 14715,17919,155,0,995 2 161128 -- U+0068 (19U 104)
-i 7351,17919,362,1809,788,211 2 161129 -- U+0069 (19U 105)
-j 7351,17919,5710,1835,5581,211 3 161130 -- U+006A (19U 106)
-k 13229,17919,181,1667,1163,211 2 161131 -- U+006B (19U 107)
-l 7351,17919,362,2338,930,211 2 161132 -- U+006C (19U 108)
-m 20580,11976,142,0,1059 0 161133 -- U+006D (19U 109)
-n 14715,11976,155,0,982 0 161134 -- U+006E (19U 110)
-o 13229,11976,362,517,672,211 0 161135 -- U+006F (19U 111)
-p 13229,11976,5659,633,4548,211 1 161136 -- U+0070 (19U 112)
-q 13229,11976,5659,878,814,211 1 161137 -- U+0071 (19U 113)
-r 10297,11976,0,1667,866,211 0 161138 -- U+0072 (19U 114)
-s 10297,11976,362,866,1331,211 0 161139 -- U+0073 (19U 115)
-t 7351,15128,362,2209,814,211 0 161140 -- U+0074 (19U 116)
-u 14715,11976,362,297,413,211 0 161141 -- U+0075 (19U 117)
-v 11743,11976,362,1279,581,211 0 161142 -- U+0076 (19U 118)
-w 17648,11976,362,1214,581,211 0 161143 -- U+0077 (19U 119)
-x 13229,11976,362,1537,2519,211 0 161144 -- U+0078 (19U 120)
-y 11743,11976,5710,1279,3798,211 1 161145 -- U+0079 (19U 121)
-z 10297,11614,2248,1524,1589,211 0 161146 -- U+007A (19U 122)
-{ 9211,17919,5361,4173,194,211 3 161147 -- U+007B (19U 123)
-lC "
-| 5827,17919,5710,0,-735 3 161148 -- U+007C (19U 124)
-ba "
-} 9211,17932,5349,581,3785,211 3 161149 -- U+007D (19U 125)
-rC "
-ti 15077,9173,0,814,814,211 0 161150 -- U+007E (19U 126)
-r! 10297,12583,5710,0,801 1 161185 -- U+00A1 (19U 161)
-ct 13229,17040,4922,323,-89,211 2 161186 -- U+00A2 (19U 162)
-Po 13229,17880,362,1977,375,211 2 161187 -- U+00A3 (19U 163)
-Cs 13229,15012,0,1602,530,211 0 161188 -- U+00A4 (19U 164)
-Ye 13229,17518,0,4341,1563,211 2 161189 -- U+00A5 (19U 165)
-bb 5827,17919,5710,0,-735 3 161190 -- U+00A6 (19U 166)
-sc 13229,17919,5710,2106,1679,211 3 161191 -- U+00A7 (19U 167)
-ad 8811,17402,0,3126,-1071,211 2 161192 -- U+00A8 (19U 168)
-co 19766,17919,400,1305,-102,211 2 161193 -- U+00A9 (19U 169)
-Of 7041,17880,0,3979,-490,211 2 161194 -- U+00AA (19U 170)
-Fo 13229,11769,129,1137,245,211 0 161195 -- U+00AB (19U 171)
-tno 16033,11653,0,362,375,211 0 161196 -- U+00AC (19U 172)
-u00AD 8811,7144,0,1034,1150,211 0 161197 -- U+00AD (19U 173)
-rg 19766,17919,400,1305,-102,211 2 161198 -- U+00AE (19U 174)
-u00AF 13229,20580,0,5129,-2001,211 2 161199 -- U+00AF (19U 175)
-de 10581,17880,0,2002,-1007,211 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15813,0,1318,930,211 0 161201 -- U+00B1 (19U 177)
-S2 7932,17880,0,2480,13,211 2 161202 -- U+00B2 (19U 178)
-S3 7932,17880,0,2274,-115,211 2 161203 -- U+00B3 (19U 179)
-aa 8811,17919,0,3217,-3875,211 2 161204 -- U+00B4 (19U 180)
-mc 15245,11614,5723,78,2971,78 1 161205 -- U+00B5 (19U 181)
-ps 13229,17518,5710,1886,1835,211 3 161206 -- U+00B6 (19U 182)
-pc 6615,10930,0,956,-684,211 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,0,4858,0,1176 0 161208 -- U+00B8 (19U 184)
-S1 7932,17880,0,1925,-270,211 2 161209 -- U+00B9 (19U 185)
-Om 7932,17880,0,3307,-955,211 2 161210 -- U+00BA (19U 186)
-Fc 13229,11769,129,245,1137,211 0 161211 -- U+00BB (19U 187)
-14 19844,17880,762,129,-244,129 2 161212 -- U+00BC (19U 188)
-12 19844,17880,762,0,-244 2 161213 -- U+00BD (19U 189)
-34 19844,17880,762,116,-89,116 2 161214 -- U+00BE (19U 190)
-r? 13229,12596,5710,0,1201 1 161215 -- U+00BF (19U 191)
-`A 17648,23358,0,168,2816,168 2 161216 -- U+00C0 (19U 192)
-'A 17648,23086,0,3178,2816,211 2 161217 -- U+00C1 (19U 193)
-^A 17648,23164,0,1796,2816,211 2 161218 -- U+00C2 (19U 194)
-~A 17648,22776,0,2377,2816,211 2 161219 -- U+00C3 (19U 195)
-:A 17648,22518,0,2752,2816,211 2 161220 -- U+00C4 (19U 196)
-oA 17648,22337,0,1072,2803,211 2 161221 -- U+00C5 (19U 197)
-AE 24973,17518,0,1705,2803,211 2 161222 -- U+00C6 (19U 198)
-,C 17648,17919,4858,2739,-412,211 2 161223 -- U+00C7 (19U 199)
-`E 17648,23358,0,1654,2248,211 2 161224 -- U+00C8 (19U 200)
-'E 17648,23086,0,1654,2248,211 2 161225 -- U+00C9 (19U 201)
-^E 17648,23164,0,1654,2248,211 2 161226 -- U+00CA (19U 202)
-:E 17648,22518,0,1654,2248,211 2 161227 -- U+00CB (19U 203)
-`I 10297,23358,0,3372,2248,211 2 161228 -- U+00CC (19U 204)
-'I 10297,23086,0,4935,2248,211 2 161229 -- U+00CD (19U 205)
-^I 10297,23164,0,3411,2248,211 2 161230 -- U+00CE (19U 206)
-:I 10297,22518,0,3889,2248,211 2 161231 -- U+00CF (19U 207)
--D 19107,17518,0,943,2170,211 2 161232 -- U+00D0 (19U 208)
-~N 19107,22273,194,3669,2170,211 2 161233 -- U+00D1 (19U 209)
-`O 19107,23358,413,1214,-89,211 2 161234 -- U+00D2 (19U 210)
-'O 19107,23461,413,1214,-89,211 2 161235 -- U+00D3 (19U 211)
-^O 19107,22841,413,1214,-89,211 2 161236 -- U+00D4 (19U 212)
-~O 19107,22273,413,1214,-89,211 2 161237 -- U+00D5 (19U 213)
-:O 19107,22195,413,1214,-89,211 2 161238 -- U+00D6 (19U 214)
-tmu 15077,14366,0,0,-671 0 161239 -- U+00D7 (19U 215)
-/O 19107,17919,413,1434,220,211 2 161240 -- U+00D8 (19U 216)
-`U 19107,23358,400,3604,-1162,211 2 161241 -- U+00D9 (19U 217)
-'U 19107,23461,400,3604,-1162,211 2 161242 -- U+00DA (19U 218)
-^U 19107,22841,400,3604,-1162,211 2 161243 -- U+00DB (19U 219)
-:U 19107,22195,400,3604,-1162,211 2 161244 -- U+00DC (19U 220)
-'Y 16162,23086,0,4121,-1136,211 2 161245 -- U+00DD (19U 221)
-TP 16162,17518,0,1098,2132,211 2 161246 -- U+00DE (19U 222)
-ss 13229,17919,5710,1473,5827,211 3 161247 -- U+00DF (19U 223)
-`a 13229,17919,362,762,801,211 2 161248 -- U+00E0 (19U 224)
-'a 13229,17919,362,866,801,211 2 161249 -- U+00E1 (19U 225)
-^a 13229,17919,362,762,801,211 2 161250 -- U+00E2 (19U 226)
-~a 13229,17518,362,827,801,211 2 161251 -- U+00E3 (19U 227)
-:a 13229,17402,362,956,801,211 2 161252 -- U+00E4 (19U 228)
-oa 13229,18423,362,762,801,211 2 161253 -- U+00E5 (19U 229)
-ae 19107,11976,362,1163,827,211 0 161254 -- U+00E6 (19U 230)
-,c 11743,11976,4858,1150,568,211 0 161255 -- U+00E7 (19U 231)
-`e 11743,17919,362,1266,685,211 2 161256 -- U+00E8 (19U 232)
-'e 11743,17919,362,3759,685,211 2 161257 -- U+00E9 (19U 233)
-^e 11743,17919,362,1266,685,211 2 161258 -- U+00EA (19U 234)
-:e 11743,17402,362,1757,685,211 2 161259 -- U+00EB (19U 235)
-`i 7351,17919,362,1150,736,211 2 161260 -- U+00EC (19U 236)
-'i 7351,17919,362,3527,736,211 2 161261 -- U+00ED (19U 237)
-^i 7351,17919,362,2958,736,211 2 161262 -- U+00EE (19U 238)
-:i 7351,17402,362,3475,736,211 2 161263 -- U+00EF (19U 239)
-Sd 13229,17919,362,956,646,211 2 161264 -- U+00F0 (19U 240)
-~n 14715,17518,155,0,1034 2 161265 -- U+00F1 (19U 241)
-`o 13229,17919,362,517,672,211 2 161266 -- U+00F2 (19U 242)
-'o 13229,17919,362,1344,672,211 2 161267 -- U+00F3 (19U 243)
-^o 13229,17919,362,517,672,211 2 161268 -- U+00F4 (19U 244)
-~o 13229,17518,362,827,672,211 2 161269 -- U+00F5 (19U 245)
-:o 13229,17402,362,956,672,211 2 161270 -- U+00F6 (19U 246)
-tdi 14521,14418,0,1563,672,211 0 161271 -- U+00F7 (19U 247)
-/o 13229,11976,362,917,917,211 0 161272 -- U+00F8 (19U 248)
-`u 14715,17919,362,245,465,211 2 161273 -- U+00F9 (19U 249)
-'u 14715,17919,362,245,465,211 2 161274 -- U+00FA (19U 250)
-^u 14715,17919,362,245,465,211 2 161275 -- U+00FB (19U 251)
-:u 14715,17402,362,245,465,211 2 161276 -- U+00FC (19U 252)
-'y 11743,17919,5710,1951,3747,211 3 161277 -- U+00FD (19U 253)
-Tp 13229,17919,5710,633,4548,211 3 161278 -- U+00FE (19U 254)
-:y 11743,17402,5710,1331,3747,211 3 161279 -- U+00FF (19U 255)
-u0041_0306 17648,23422,0,3088,2816,211 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 13229,17919,362,762,801,211 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 17648,17919,5271,142,2816,142 3 75173 -- U+0104 ( 9E 165)
-u0061_0328 13229,11976,5413,762,801,211 1 75193 -- U+0105 ( 9E 185)
-'C 17648,23086,400,2739,-412,211 2 75206 -- U+0106 ( 9E 198)
-'c 11743,17919,362,2106,568,211 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 17648,23203,400,2739,-412,211 2 75208 -- U+010C ( 9E 200)
-u0061_030C 11743,17919,362,3036,568,211 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23203,0,775,2274,211 2 75215 -- U+010E ( 9E 207)
-u0064_030C 19805,17919,362,1395,788,211 2 75247 -- U+010F ( 9E 239)
-u0111 13229,17919,362,3656,788,211 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 17648,17518,5271,1654,2248,211 3 75210 -- U+0118 ( 9E 202)
-u0065_0328 11743,11976,5271,1266,685,211 1 75242 -- U+0119 ( 9E 234)
-u0045_030C 17648,23203,0,1654,2248,211 2 75212 -- U+011A ( 9E 204)
-u0065_030C 11743,17919,362,2920,685,211 2 75244 -- U+011B ( 9E 236)
-u0047_0306 19107,23422,400,1977,-516,211 2 46288 -- U+011E ( 5T 208)
-u0067_0306 13229,17919,5710,1757,2687,211 3 46320 -- U+011F ( 5T 240)
-u0049_0307 10297,23035,0,3372,2248,211 2 46301 -- U+0130 ( 5T 221)
-.i 7351,11976,362,762,736,211 0 46333 -- U+0131 ( 5T 253)
-IJ 21769,17518,400,4070,2248,211 2 60135 -- U+0132 ( 7J 231)
-ij 14612,17919,5710,1421,349,211 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 16162,23086,0,362,2041,211 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23086,362,4883,891,211 2 75237 -- U+013A ( 9E 229)
-u004C_030C 16162,17919,0,2765,2041,211 2 75196 -- U+013D ( 9E 188)
-u006C_030C 13785,17919,362,1395,891,211 2 75198 -- U+013E ( 9E 190)
-u013F 16162,17518,0,362,2041,211 2 95646 -- U+013F (11U 158)
-u0140 9922,17919,362,1176,749,211 2 95647 -- U+0140 (11U 159)
-/L 16162,17518,0,362,2041,211 2 75171 -- U+0141 ( 9E 163)
-/l 7351,17919,362,2377,1318,211 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23086,194,3669,2170,211 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 14715,17919,155,0,1034 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23203,194,3669,2170,211 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 14715,17919,155,39,1034,39 2 75250 -- U+0148 ( 9E 242)
-u0149 19017,17919,155,0,155 2 95660 -- U+0149 (11U 172)
-u004F_030B 19107,23422,413,2054,-89,211 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 13229,17919,362,4082,672,211 2 75253 -- U+0151 ( 9E 245)
-OE 24973,17660,142,1705,-322,211 2 161164 -- U+0152 (19U 140)
-oe 19107,11976,362,1189,723,211 0 161180 -- U+0153 (19U 156)
-u0052_0301 17648,23086,0,581,2157,211 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 10297,17919,0,2610,866,211 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 17648,23203,0,581,2157,211 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 10297,17919,0,2145,866,211 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 14715,23086,400,2041,1899,211 2 75148 -- U+015A ( 9E 140)
-u0073_0301 10297,17919,362,2183,1382,211 2 75164 -- U+015B ( 9E 156)
-u0053_0327 14715,17919,4858,2041,1899,211 2 75178 -- U+015E ( 9E 170)
-u0073_0327 10297,11976,4858,814,1382,211 0 75194 -- U+015F ( 9E 186)
-vS 14715,23203,400,2041,1899,211 2 161162 -- U+0160 (19U 138)
-vs 10297,17919,362,1705,1369,211 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,17518,6783,3488,-787,211 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 7351,15128,6783,2248,1434,211 1 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23203,0,3488,-787,211 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 14056,17919,362,1667,788,211 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,23229,400,3604,-1162,211 2 75225 -- U+016E ( 9E 217)
-u0075_030A 14715,18423,362,245,465,211 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23422,400,3604,-1162,211 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 14715,17919,362,2455,465,211 2 75259 -- U+0171 ( 9E 251)
-:Y 16162,22518,0,4121,-1136,211 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23086,0,3114,2041,211 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 10297,17919,2248,2300,1641,211 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,22311,0,3114,2041,211 2 75183 -- U+017B ( 9E 175)
-u007A_0307 10297,17531,2248,1473,1641,211 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23203,0,3114,2041,211 2 75150 -- U+017D ( 9E 142)
-vz 10297,17919,2248,2106,1628,211 2 75166 -- U+017E ( 9E 158)
-Fn 13229,17932,5710,1331,1331,211 3 161155 -- U+0192 (19U 131)
-a^ 8811,17919,0,2661,-632,211 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,17919,0,3579,-1562,211 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,16201,0,4250,-852,211 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,17919,0,3178,-2182,211 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,17531,0,1421,-3784,211 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,18423,0,2222,-3022,211 2 60152 -- U+02DA ( 7J 248)
-ho 8811,245,5271,0,3604 1 75186 -- U+02DB ( 9E 178)
-~ 8811,17518,0,3036,-1033,211 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,17919,0,4431,-2389,211 2 75197 -- U+02DD ( 9E 189)
-en 13229,6899,0,1550,1512,211 0 161174 -- U+2013 (19U 150)
-em 26458,6899,0,1563,1576,211 0 161175 -- U+2014 (19U 151)
-u2017 13229,0,5710,0,3643 1 60095 -- U+2017 ( 7J 191)
-oq 8811,17919,0,1667,-2441,211 2 161169 -- U+2018 (19U 145)
-` "
-cq 8811,17919,0,1705,-2479,211 2 161170 -- U+2019 (19U 146)
-' "
-bq 8811,3940,4250,0,956 0 161154 -- U+201A (19U 130)
-lq 13229,17919,0,2338,-1808,211 2 161171 -- U+201C (19U 147)
-rq 13229,17919,0,2351,-1808,211 2 161172 -- U+201D (19U 148)
-Bq 13229,3979,4276,0,2093 0 161156 -- U+201E (19U 132)
-dg 13229,17932,5659,1576,-968,211 3 161158 -- U+2020 (19U 134)
-dd 13229,17919,5710,1524,1473,211 3 161159 -- U+2021 (19U 135)
-bu 9263,12415,0,723,26,211 0 161173 -- U+2022 (19U 149)
-u2026 26458,3979,349,0,-942 0 161157 -- U+2026 (19U 133)
-%0 26458,17919,723,840,646,211 2 161161 -- U+2030 (19U 137)
-fm 7441,17919,0,2196,-2802,211 2 60101 -- U+2032 ( 7J 197)
-sd 14612,17919,0,1499,-3035,211 2 60102 -- U+2033 ( 7J 198)
-fo 8811,11782,142,594,-232,211 0 161163 -- U+2039 (19U 139)
-fc 8811,11782,142,0,581 0 161179 -- U+203A (19U 155)
-u203C 17441,17919,362,439,-193,211 2 87315 -- U+203C (10U 19)
-u207F 9198,14418,0,556,1201,211 0 87548 -- U+207F (10U 252)
-u20A7 25632,17518,297,995,853,211 2 60121 -- U+20A7 ( 7J 217)
-Eu 13229,17880,362,3940,891,211 2 161152 -- U+20AC (19U 128)
-u2105 22053,17919,711,698,-658,211 2 60072 -- U+2105 ( 7J 168)
-u2113 11304,17919,362,1628,853,211 2 60122 -- U+2113 ( 7J 218)
-tm 26458,17518,0,1460,1357,211 2 161177 -- U+2122 (19U 153)
-\- 16033,9612,0,336,388,211 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,17880,762,6175,6188,211 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196,0,0,-567 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371,0,736,711,211 2 101079 -- U+25CA (12J 215)
-fi 14715,17919,5710,594,6059,211 3 60077 -- U+FB01 ( 7J 173)
-fl 14715,17919,5710,2157,6072,211 3 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/TNRI b/contrib/groff/font/devlj4/TNRI
deleted file mode 100644
index 8abc3da63cb8..000000000000
--- a/contrib/groff/font/devlj4/TNRI
+++ /dev/null
@@ -1,450 +0,0 @@
-# M Times New It
-name TNRI
-spacewidth 6615
-slant 16.340000
-pcltypeface 16901
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl 0
-kernpairs
-1 1 -1963
-A T -981
-A V -1317
-A W -981
-A Y -1459
-A v -1459
-A w -1459
-A y -1459
-A cq -981
-A ' -981
-F , -3410
-F . -3410
-F A -3410
-L T -529
-L V -981
-L W -981
-L Y -529
-L y -787
-L cq -981
-L ' -981
-P , -3410
-P . -3410
-P A -3410
-R T 0
-R V -477
-R W -477
-R Y -477
-R y -477
-T , -1963
-T hy -1963
-T - -1963
-T . -1963
-T : -1459
-T ; -1717
-T A -1963
-T O -477
-T a -2428
-T c -2428
-T e -2428
-T i -1459
-T o -2428
-T r -1459
-T s -2428
-T u -1459
-T w -1963
-T y -1963
-V , -3410
-V hy -1459
-V - -1459
-V . -3410
-V : -1717
-V ; -1963
-V A -1963
-V O -787
-V a -2932
-V e -2932
-V i -1963
-V o -2932
-V r -1963
-V u -1963
-V y -2428
-W , -2428
-W hy -981
-W - -981
-W . -2428
-W : -1717
-W ; -1717
-W A -1846
-W a -2428
-W e -2428
-W i -1459
-W o -2428
-W r -1459
-W u -1459
-W y -2428
-Y , -2428
-Y hy -1963
-Y - -1963
-Y . -2428
-Y : -1717
-Y ; -1717
-Y A -1846
-Y a -2428
-Y e -2428
-Y i -1963
-Y o -2428
-Y p -2428
-Y q -2932
-Y u -2428
-Y v -2428
-f cq 2429
-f ' 2429
-r , -2932
-r hy -529
-r - -529
-r . -2932
-r c -981
-r d -981
-r e -981
-r g -981
-r h -477
-r o -981
-r q -981
-r r 0
-r t 0
-r u 0
-r v 0
-r w 0
-r x 0
-r y 0
-r cq 982
-r ' 982
-v , -1963
-v . -1963
-w , -1963
-w . -1963
-y , -1459
-y . -1459
-oq oq -2932
-oq ` -2932
-` oq -2932
-` ` -2932
-cq s -3410
-' s -3410
-cq t -2932
-' t -2932
-cq cq -2932
-cq ' -2932
-' cq -2932
-' ' -2932
-charset
-! 8811,17919,426,904,-671,207 2 161057 -- U+0021 (19U 33)
-dq 11110,17919,0,2170,-2479,207 2 161058 -- U+0022 (19U 34)
-" "
-sh 13229,17919,362,2261,-580,207 2 161059 -- U+0023 (19U 35)
-# "
-Do 13229,18526,1744,1021,207,207 2 161060 -- U+0024 (19U 36)
-$ "
-% 22040,17919,711,891,-542,207 2 161061 -- U+0025 (19U 37)
-& 20580,17919,400,129,52,129 2 161062 -- U+0026 (19U 38)
-aq 5659,17919,0,2571,-2156,207 2 161063 -- U+0027 (19U 39)
-( 8811,18371,5659,4212,-490,207 3 161064 -- U+0028 (19U 40)
-) 8811,18371,5659,0,4199 3 161065 -- U+0029 (19U 41)
-* 13229,18371,0,1331,-2428,207 2 161066 -- U+002A (19U 42)
-+ 17854,15748,0,0,-1136 0 161067 -- U+002B (19U 43)
-, 6615,2325,3320,0,1589 0 161068 -- U+002C (19U 44)
-hy 8811,6602,0,426,620,207 0 161069 -- U+002D (19U 45)
-- "
-. 6615,2313,297,0,426 0 161070 -- U+002E (19U 46)
-sl 7351,18371,400,4057,2209,207 2 161071 -- U+002F (19U 47)
-/ "
-0 13229,17880,310,1150,-257,207 2 161072 -- U+0030 (19U 48)
-1 13229,17880,0,0,-296 2 161073 -- U+0031 (19U 49)
-2 13229,17880,0,491,904,207 2 161074 -- U+0032 (19U 50)
-3 13229,17880,310,90,439,90 2 161075 -- U+0033 (19U 51)
-4 13229,17518,310,969,491,207 2 161076 -- U+0034 (19U 52)
-5 13229,17518,310,762,375,207 2 161077 -- U+0035 (19U 53)
-6 13229,17880,310,1990,-348,207 2 161078 -- U+0036 (19U 54)
-7 13229,17518,310,1938,-1678,207 2 161079 -- U+0037 (19U 55)
-8 13229,17880,310,1021,310,207 2 161080 -- U+0038 (19U 56)
-9 13229,17880,310,1072,556,207 2 161081 -- U+0039 (19U 57)
-: 8811,11705,245,0,-257 0 161082 -- U+003A (19U 58)
-; 8811,11679,3320,0,853 0 161083 -- U+003B (19U 59)
-< 17854,15141,0,0,-619 0 161084 -- U+003C (19U 60)
-= 17854,11408,0,0,-1265 0 161085 -- U+003D (19U 61)
-> 17854,15141,0,0,-619 0 161086 -- U+003E (19U 62)
-? 13229,17919,400,220,-1239,207 2 161087 -- U+003F (19U 63)
-at 24340,18371,5710,698,65,207 3 161088 -- U+0040 (19U 64)
-@ "
-A 16162,17919,0,0,2610 2 161089 -- U+0041 (19U 65)
-B 16162,17518,0,775,1925,207 2 161090 -- U+0042 (19U 66)
-C 17648,17919,400,2287,-464,207 2 161091 -- U+0043 (19U 67)
-D 19107,17518,0,853,2106,207 2 161092 -- U+0044 (19U 68)
-E 16162,17518,0,1886,1912,207 2 161093 -- U+0045 (19U 69)
-F 16162,17518,0,2842,1964,207 2 161094 -- U+0046 (19U 70)
-G 19107,17919,413,1382,-516,207 2 161095 -- U+0047 (19U 71)
-H 19107,17518,0,3669,2015,207 2 161096 -- U+0048 (19U 72)
-I 8811,17518,0,3359,2145,207 2 161097 -- U+0049 (19U 73)
-J 11743,17518,400,4044,2222,207 2 161098 -- U+004A (19U 74)
-K 17648,17518,0,2946,2028,207 2 161099 -- U+004B (19U 75)
-L 14715,17518,0,439,2170,207 2 161100 -- U+004C (19U 76)
-M 22040,17518,0,3721,2183,207 2 161101 -- U+004D (19U 77)
-N 17648,17518,400,3824,2054,207 2 161102 -- U+004E (19U 78)
-O 19107,17919,400,1201,-257,207 2 161103 -- U+004F (19U 79)
-P 16162,17518,0,1589,1951,207 2 161104 -- U+0050 (19U 80)
-Q 19107,17919,5581,1189,65,207 3 161105 -- U+0051 (19U 81)
-R 16162,17518,0,478,1925,207 2 161106 -- U+0052 (19U 82)
-S 13229,17919,400,2429,1137,207 2 161107 -- U+0053 (19U 83)
-T 14715,17518,0,3785,-529,207 2 161108 -- U+0054 (19U 84)
-U 19107,17518,400,3747,-1498,207 2 161109 -- U+0055 (19U 85)
-V 16162,17518,400,4289,-1989,207 2 161110 -- U+0056 (19U 86)
-W 22040,17518,400,4250,-1898,207 2 161111 -- U+0057 (19U 87)
-X 16162,17518,0,4754,3088,207 2 161112 -- U+0058 (19U 88)
-Y 14715,17518,0,4250,-1058,207 2 161113 -- U+0059 (19U 89)
-Z 14715,17518,0,2765,1369,207 2 161114 -- U+005A (19U 90)
-lB 10297,17919,5271,3488,1150,207 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,18371,400,90,-1498,90 2 161116 -- U+005C (19U 92)
-\ "
-rB 10297,17919,5271,672,3966,207 3 161117 -- U+005D (19U 93)
-] "
-ha 11162,17919,0,2325,594,207 2 161118 -- U+005E (19U 94)
-_ 13229,0,5710,1550,1537,207 1 161119 -- U+005F (19U 95)
-ga 8811,18113,0,1421,-3332,207 2 161120 -- U+0060 (19U 96)
-a 13229,11692,310,504,698,207 0 161121 -- U+0061 (19U 97)
-b 13229,18371,310,504,620,207 2 161122 -- U+0062 (19U 98)
-c 11743,11692,310,840,594,207 0 161123 -- U+0063 (19U 99)
-d 13229,18371,310,2403,814,207 2 161124 -- U+0064 (19U 100)
-e 11743,11692,310,956,491,207 0 161125 -- U+0065 (19U 101)
-f 7351,18371,5710,6434,5930,207 3 161126 -- U+0066 (19U 102)
-g 13229,11692,5710,1873,2028,207 1 161127 -- U+0067 (19U 103)
-h 13229,18371,310,233,788,207 2 161128 -- U+0068 (19U 104)
-i 7351,16821,310,1176,181,207 2 161129 -- U+0069 (19U 105)
-j 7351,16808,5710,1331,5865,207 3 161130 -- U+006A (19U 106)
-k 11743,18371,310,2480,1059,207 2 161131 -- U+006B (19U 107)
-l 7351,18371,310,1835,297,207 2 161132 -- U+006C (19U 108)
-m 19107,11692,310,168,866,168 0 161133 -- U+006D (19U 109)
-n 13229,11692,310,245,814,207 0 161134 -- U+006E (19U 110)
-o 13229,11692,310,323,543,207 0 161135 -- U+006F (19U 111)
-p 13229,11692,5659,594,4237,207 1 161136 -- U+0070 (19U 112)
-q 13229,11692,5659,633,736,207 1 161137 -- U+0071 (19U 113)
-r 10297,11692,0,1731,775,207 0 161138 -- U+0072 (19U 114)
-s 10297,11692,310,620,1563,207 0 161139 -- U+0073 (19U 115)
-t 7351,14896,310,1860,233,207 0 161140 -- U+0074 (19U 116)
-u 13229,11692,310,543,543,207 0 161141 -- U+0075 (19U 117)
-v 11743,11692,310,1279,749,207 0 161142 -- U+0076 (19U 118)
-w 17648,11692,310,1176,866,207 0 161143 -- U+0077 (19U 119)
-x 11743,11692,310,1150,2248,207 0 161144 -- U+0078 (19U 120)
-y 11743,11692,5710,1176,3436,207 1 161145 -- U+0079 (19U 121)
-z 10297,11382,0,1447,2054,207 0 161146 -- U+007A (19U 122)
-{ 10581,18371,5710,3294,-503,207 3 161147 -- U+007B (19U 123)
-lC "
-| 7273,18371,5710,0,-1743 3 161148 -- U+007C (19U 124)
-ba "
-} 10581,18371,5710,0,3294 3 161149 -- U+007D (19U 125)
-rC "
-ti 14314,8759,0,1046,1059,207 0 161150 -- U+007E (19U 126)
-r! 10297,12648,5710,0,-542 1 161185 -- U+00A1 (19U 161)
-ct 13229,16834,4871,78,-154,78 2 161186 -- U+00A2 (19U 162)
-Po 13229,17880,400,1964,685,207 2 161187 -- U+00A3 (19U 163)
-Cs 13229,14999,0,1757,155,207 0 161188 -- U+00A4 (19U 164)
-Ye 13229,17518,0,4560,1499,207 2 161189 -- U+00A5 (19U 165)
-bb 7273,18371,5710,0,-1743 3 161190 -- U+00A6 (19U 166)
-sc 13229,18074,5374,1576,1369,207 3 161191 -- U+00A7 (19U 167)
-ad 8811,17312,0,3333,-2144,207 2 161192 -- U+00A8 (19U 168)
-co 20102,17919,400,1344,-477,207 2 161193 -- U+00A9 (19U 169)
-Of 7299,17919,0,3979,-981,207 2 161194 -- U+00AA (19U 170)
-Fo 13229,11886,400,853,233,207 0 161195 -- U+00AB (19U 171)
-tno 17854,11343,0,0,-619 0 161196 -- U+00AC (19U 172)
-u00AD 8811,6602,0,426,620,207 0 161197 -- U+00AD (19U 173)
-rg 20102,17919,400,1344,-477,207 2 161198 -- U+00AE (19U 174)
-u00AF 13229,19973,0,4315,-1226,207 2 161199 -- U+00AF (19U 175)
-de 10581,17906,0,1421,-1420,207 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15748,0,1421,633,207 0 161201 -- U+00B1 (19U 177)
-S2 7932,17880,0,2209,-115,207 2 161202 -- U+00B2 (19U 178)
-S3 7932,17880,0,1964,-387,207 2 161203 -- U+00B3 (19U 179)
-aa 8811,18113,0,2028,-3965,207 2 161204 -- U+00B4 (19U 180)
-mc 15245,11382,5697,0,1912 1 161205 -- U+00B5 (19U 181)
-ps 13836,17518,5710,1085,-77,207 3 161206 -- U+00B6 (19U 182)
-pc 6615,10193,0,0,-555 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,388,4780,0,1796 0 161208 -- U+00B8 (19U 184)
-S1 7932,17880,0,1434,-787,207 2 161209 -- U+00B9 (19U 185)
-Om 8204,17919,0,3514,-1627,207 2 161210 -- U+00BA (19U 186)
-Fc 13229,11886,400,245,840,207 0 161211 -- U+00BB (19U 187)
-14 19844,17880,711,0,-761 2 161212 -- U+00BC (19U 188)
-12 19844,17880,711,0,-761 2 161213 -- U+00BD (19U 189)
-34 19844,17880,711,0,-361 2 161214 -- U+00BE (19U 190)
-r? 13229,12622,5710,0,375 1 161215 -- U+00BF (19U 191)
-`A 16162,23280,0,594,2610,207 2 161216 -- U+00C0 (19U 192)
-'A 16162,23280,0,1512,2610,207 2 161217 -- U+00C1 (19U 193)
-^A 16162,22841,0,1576,2610,207 2 161218 -- U+00C2 (19U 194)
-~A 16162,22415,0,2829,2610,207 2 161219 -- U+00C3 (19U 195)
-:A 16162,22118,0,2855,2610,207 2 161220 -- U+00C4 (19U 196)
-oA 16162,22234,0,1214,2584,207 2 161221 -- U+00C5 (19U 197)
-AE 23526,17518,0,1847,2713,207 2 161222 -- U+00C6 (19U 198)
-,C 17648,17919,4780,2287,-464,207 2 161223 -- U+00C7 (19U 199)
-`E 16162,23280,0,1886,1912,207 2 161224 -- U+00C8 (19U 200)
-'E 16162,23280,0,1886,1912,207 2 161225 -- U+00C9 (19U 201)
-^E 16162,22841,0,1886,1912,207 2 161226 -- U+00CA (19U 202)
-:E 16162,22118,0,1886,1912,207 2 161227 -- U+00CB (19U 203)
-`I 8811,23280,0,3359,2145,207 2 161228 -- U+00CC (19U 204)
-'I 8811,23280,0,3359,2145,207 2 161229 -- U+00CD (19U 205)
-^I 8811,22841,0,3643,2145,207 2 161230 -- U+00CE (19U 206)
-:I 8811,22118,0,4315,2145,207 2 161231 -- U+00CF (19U 207)
--D 19107,17518,0,1034,1938,207 2 161232 -- U+00D0 (19U 208)
-~N 17648,22415,400,3824,2054,207 2 161233 -- U+00D1 (19U 209)
-`O 19107,23280,400,1201,-257,207 2 161234 -- U+00D2 (19U 210)
-'O 19107,23280,400,1201,-257,207 2 161235 -- U+00D3 (19U 211)
-^O 19107,22841,400,1201,-257,207 2 161236 -- U+00D4 (19U 212)
-~O 19107,22415,400,1201,-257,207 2 161237 -- U+00D5 (19U 213)
-:O 19107,22118,400,1201,-257,207 2 161238 -- U+00D6 (19U 214)
-tmu 17854,14095,0,0,-3565 0 161239 -- U+00D7 (19U 215)
-/O 19107,18229,930,1718,388,207 2 161240 -- U+00D8 (19U 216)
-`U 19107,23280,400,3747,-1498,207 2 161241 -- U+00D9 (19U 217)
-'U 19107,23280,400,3747,-1498,207 2 161242 -- U+00DA (19U 218)
-^U 19107,22841,400,3747,-1498,207 2 161243 -- U+00DB (19U 219)
-:U 19107,22118,400,3747,-1498,207 2 161244 -- U+00DC (19U 220)
-'Y 14715,23280,0,4237,-1045,207 2 161245 -- U+00DD (19U 221)
-TP 16162,17518,0,1176,1951,207 2 161246 -- U+00DE (19U 222)
-ss 13229,18371,5710,1266,5568,207 3 161247 -- U+00DF (19U 223)
-`a 13229,18113,310,504,698,207 2 161248 -- U+00E0 (19U 224)
-'a 13229,18113,310,504,698,207 2 161249 -- U+00E1 (19U 225)
-^a 13229,17919,310,504,698,207 2 161250 -- U+00E2 (19U 226)
-~a 13229,17648,310,1124,698,207 2 161251 -- U+00E3 (19U 227)
-:a 13229,17312,310,1163,698,207 2 161252 -- U+00E4 (19U 228)
-oa 13229,18358,310,504,698,207 2 161253 -- U+00E5 (19U 229)
-ae 17648,11692,310,930,736,207 0 161254 -- U+00E6 (19U 230)
-,c 11743,11692,4780,891,543,207 0 161255 -- U+00E7 (19U 231)
-`e 11743,18113,310,956,491,207 2 161256 -- U+00E8 (19U 232)
-'e 11743,18113,310,956,491,207 2 161257 -- U+00E9 (19U 233)
-^e 11743,17919,310,1292,491,207 2 161258 -- U+00EA (19U 234)
-:e 11743,17312,310,1951,491,207 2 161259 -- U+00EB (19U 235)
-`i 7351,18113,310,1266,181,207 2 161260 -- U+00EC (19U 236)
-'i 7351,18113,310,2803,181,207 2 161261 -- U+00ED (19U 237)
-^i 7351,17919,310,3010,181,207 2 161262 -- U+00EE (19U 238)
-:i 7351,17312,310,3682,181,207 2 161263 -- U+00EF (19U 239)
-Sd 13229,18319,310,827,607,207 2 161264 -- U+00F0 (19U 240)
-~n 13229,17648,310,1124,814,207 2 161265 -- U+00F1 (19U 241)
-`o 13229,18113,310,323,543,207 2 161266 -- U+00F2 (19U 242)
-'o 13229,18113,310,323,543,207 2 161267 -- U+00F3 (19U 243)
-^o 13229,17919,310,491,543,207 2 161268 -- U+00F4 (19U 244)
-~o 13229,17648,310,1124,543,207 2 161269 -- U+00F5 (19U 245)
-:o 13229,17312,310,1163,543,207 2 161270 -- U+00F6 (19U 246)
-tdi 14521,13888,0,1408,633,207 0 161271 -- U+00F7 (19U 247)
-/o 13229,12467,943,1021,1253,207 0 161272 -- U+00F8 (19U 248)
-`u 13229,18113,310,543,543,207 2 161273 -- U+00F9 (19U 249)
-'u 13229,18113,310,543,543,207 2 161274 -- U+00FA (19U 250)
-^u 13229,17919,310,543,543,207 2 161275 -- U+00FB (19U 251)
-:u 13229,17312,310,853,543,207 2 161276 -- U+00FC (19U 252)
-'y 11743,18113,5710,1227,3385,207 3 161277 -- U+00FD (19U 253)
-Tp 13229,18371,5710,594,4237,207 3 161278 -- U+00FE (19U 254)
-:y 11743,17312,5710,1486,3385,207 3 161279 -- U+00FF (19U 255)
-u0041_0306 16162,22854,0,3398,2610,207 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 13229,18164,310,801,698,207 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 16162,17919,4909,0,2610 2 75173 -- U+0104 ( 9E 165)
-u0061_0328 13229,11692,4883,1034,698,207 0 75193 -- U+0105 ( 9E 185)
-'C 17648,23280,400,2287,-464,207 2 75206 -- U+0106 ( 9E 198)
-'c 11743,18113,310,917,543,207 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 17648,22841,400,2287,-464,207 2 75208 -- U+010C ( 9E 200)
-u0061_030C 11743,17919,310,3152,543,207 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,22841,0,853,2106,207 2 75215 -- U+010E ( 9E 207)
-u0064_030C 16097,18371,310,3643,814,207 2 75247 -- U+010F ( 9E 239)
-u0111 13229,18371,310,3630,814,207 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 16162,17518,4883,1886,1912,207 2 75210 -- U+0118 ( 9E 202)
-u0065_0328 11743,11692,4883,956,491,207 0 75242 -- U+0119 ( 9E 234)
-u0045_030C 16162,22841,0,1886,1912,207 2 75212 -- U+011A ( 9E 204)
-u0065_030C 11743,17919,310,3010,491,207 2 75244 -- U+011B ( 9E 236)
-u0047_0306 19107,22841,413,1382,-516,207 2 46288 -- U+011E ( 5T 208)
-u0067_0306 13229,18164,5710,1873,2028,207 3 46320 -- U+011F ( 5T 240)
-u0049_0307 8811,22234,0,3359,2145,207 2 46301 -- U+0130 ( 5T 221)
-.i 7351,11692,310,52,181,52 0 46333 -- U+0131 ( 5T 253)
-IJ 19844,17518,400,3411,2106,207 2 60135 -- U+0132 ( 7J 231)
-ij 13242,16821,5710,1331,349,207 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 14715,23280,0,439,2170,207 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23280,310,3695,297,207 2 75237 -- U+013A ( 9E 229)
-u004C_030C 14715,17919,0,2506,2170,207 2 75196 -- U+013D ( 9E 188)
-u006C_030C 9625,18371,310,3656,310,207 2 75198 -- U+013E ( 9E 190)
-u013F 14715,17518,0,439,2170,207 2 95646 -- U+013F (11U 158)
-u0140 8540,18371,310,2726,375,207 2 95647 -- U+0140 (11U 159)
-/L 14715,17518,0,452,2067,207 2 75171 -- U+0141 ( 9E 163)
-/l 7351,18371,310,1912,659,207 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 17648,23280,400,3824,2054,207 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 13229,18113,310,245,814,207 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 17648,22841,400,3824,2054,207 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 13229,17919,310,245,814,207 2 75250 -- U+0148 ( 9E 242)
-u0149 15270,17919,310,0,-167 2 95660 -- U+0149 (11U 172)
-u004F_030B 19107,23280,400,1253,-257,207 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 13229,18113,310,2429,543,207 2 75253 -- U+0151 ( 9E 245)
-OE 24973,17673,181,1990,736,207 2 161164 -- U+0152 (19U 140)
-oe 17648,11692,323,827,620,207 0 161180 -- U+0153 (19U 156)
-u0052_0301 16162,23280,0,478,1925,207 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 10297,18113,0,1679,827,207 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 16162,22841,0,478,1925,207 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 10297,17919,0,2364,827,207 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 13229,23280,400,2429,1137,207 2 75148 -- U+015A ( 9E 140)
-u0073_0301 10297,18113,310,995,1563,207 2 75164 -- U+015B ( 9E 156)
-u0053_0327 13229,17919,4780,2429,1137,207 2 75178 -- U+015E ( 9E 170)
-u0073_0327 10297,11692,4780,620,1563,207 0 75194 -- U+015F ( 9E 186)
-vS 13229,22841,400,2532,1137,207 2 161162 -- U+0160 (19U 138)
-vs 10297,17919,310,1951,1524,207 2 161178 -- U+0161 (19U 154)
-u0054_0327 14715,17518,5736,3785,-529,207 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 7351,14896,5736,1899,1770,207 1 75262 -- U+0163 ( 9E 254)
-u0054_030C 14715,22841,0,3785,-529,207 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 9625,18371,310,3656,207,207 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,23371,400,3747,-1498,207 2 75225 -- U+016E ( 9E 217)
-u0075_030A 13229,18358,310,543,543,207 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23280,400,3747,-1498,207 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 13229,18113,310,1912,543,207 2 75259 -- U+0171 ( 9E 251)
-:Y 14715,22118,0,4237,-1045,207 2 161183 -- U+0178 (19U 159)
-u005A_0301 14715,23280,0,2765,1369,207 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 10297,18113,0,1395,2106,207 2 75167 -- U+017A ( 9E 159)
-u005A_0307 14715,22105,0,2765,1369,207 2 75183 -- U+017B ( 9E 175)
-u007A_0307 10297,17312,0,1395,2106,207 2 75199 -- U+017C ( 9E 191)
-vZ 14715,22841,0,2765,1369,207 2 75150 -- U+017D ( 9E 142)
-vz 10297,17919,0,1628,2390,207 2 75166 -- U+017E ( 9E 158)
-Fn 13229,17919,5568,995,1292,207 3 161155 -- U+0192 (19U 131)
-a^ 8811,17919,0,2713,-1963,207 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,17919,0,3798,-3048,207 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,17415,0,3902,-1859,207 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,18164,0,3656,-2479,207 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,17312,0,1072,-4482,207 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,18358,0,2313,-3603,207 2 60152 -- U+02DA ( 7J 248)
-ho 8811,0,4883,0,310 0 75186 -- U+02DB ( 9E 178)
-~ 8811,17648,0,3333,-1239,207 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,18113,0,4431,-2596,207 2 75197 -- U+02DD ( 9E 189)
-en 13229,6795,0,1537,1550,207 0 161174 -- U+2013 (19U 150)
-em 23526,6808,0,1563,1563,207 0 161175 -- U+2014 (19U 151)
-u2017 13229,0,5710,1550,1537,207 1 60095 -- U+2017 ( 7J 191)
-oq 8811,17919,0,1899,-4288,207 2 161169 -- U+2018 (19U 145)
-` "
-cq 8811,17919,0,1473,-3862,207 2 161170 -- U+2019 (19U 146)
-' "
-bq 8811,2325,3320,0,478 0 161154 -- U+201A (19U 130)
-lq 14715,17919,0,1395,-3771,207 2 161171 -- U+201C (19U 147)
-rq 14715,17932,0,1124,-3500,207 2 161172 -- U+201D (19U 148)
-Bq 14715,2338,3385,0,930 0 161156 -- U+201E (19U 132)
-dg 13229,17919,5361,1886,-1536,207 3 161158 -- U+2020 (19U 134)
-dd 13229,18371,5710,1421,1692,207 3 161159 -- U+2021 (19U 135)
-bu 9263,11989,0,775,-916,207 0 161173 -- U+2022 (19U 149)
-u2026 23526,2506,362,0,-2118 0 161157 -- U+2026 (19U 133)
-%0 26458,17919,698,956,-322,207 2 161161 -- U+2030 (19U 137)
-fm 5788,17919,0,2442,-2156,207 2 60101 -- U+2032 ( 7J 197)
-sd 11020,17919,0,2261,-2479,207 2 60102 -- U+2033 ( 7J 198)
-fo 8811,11886,400,749,-180,207 0 161163 -- U+2039 (19U 139)
-fc 8811,11886,400,0,723 0 161179 -- U+203A (19U 155)
-u203C 15154,17919,426,904,-671,207 2 87315 -- U+203C (10U 19)
-u207F 8333,14431,0,723,1059,207 0 87548 -- U+207F (10U 252)
-u20A7 26187,17518,310,1034,711,207 2 60121 -- U+20A7 ( 7J 217)
-Eu 13229,17880,310,3604,1098,207 2 161152 -- U+20AC (19U 128)
-u2105 22053,17919,698,543,-77,207 2 60072 -- U+2105 ( 7J 168)
-u2113 11020,17919,310,1731,930,207 2 60122 -- U+2113 ( 7J 218)
-tm 25929,17518,0,2946,-1136,207 2 161177 -- U+2122 (19U 153)
-\- 17854,9328,0,0,-619 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,17880,711,5723,5723,207 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196,0,0,-567 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371,0,736,711,207 2 101079 -- U+25CA (12J 215)
-fi 13229,18371,5710,1318,6317,207 3 60077 -- U+FB01 ( 7J 173)
-fl 13229,18371,5710,2635,6317,207 3 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/TNRR b/contrib/groff/font/devlj4/TNRR
deleted file mode 100644
index 8c45bcbf8b7f..000000000000
--- a/contrib/groff/font/devlj4/TNRR
+++ /dev/null
@@ -1,436 +0,0 @@
-# M Times
-name TNRR
-spacewidth 6615
-pcltypeface 16901
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl 0
-kernpairs
-1 1 -981
-A T -2932
-A V -3410
-A W -2118
-A Y -2428
-A v -1963
-A w -2428
-A y -2428
-A cq -2932
-A ' -2932
-F , -2118
-F . -2118
-F A -1963
-L T -2428
-L V -2428
-L W -1963
-L Y -2647
-L y -1459
-L cq -2428
-L ' -2428
-P , -2932
-P . -2932
-P A -2428
-R T -1588
-R V -2118
-R W -1459
-R Y -1459
-R y -1058
-T , -1963
-T hy -2428
-T - -2428
-T . -1963
-T : -1317
-T ; -1459
-T A -2118
-T O -477
-T a -1846
-T c -1846
-T e -1846
-T i -929
-T o -1846
-T r -929
-T s -1846
-T u -929
-T w -1846
-T y -1846
-V , -3410
-V hy -2428
-V - -2428
-V . -3410
-V : -1963
-V ; -1963
-V A -3410
-V a -2932
-V e -2932
-V i -1588
-V o -3410
-V r -1588
-V u -1588
-V y -2932
-W , -2428
-W hy -1459
-W - -1459
-W . -2428
-W : -981
-W ; -981
-W A -2932
-W a -2118
-W e -2118
-W i -1058
-W o -2118
-W r -1058
-W u -1058
-W y -1588
-Y , -3410
-Y hy -2932
-Y - -2932
-Y . -3410
-Y : -2428
-Y ; -2428
-Y A -2932
-Y a -2647
-Y e -2647
-Y i -1459
-Y o -2647
-Y p -2428
-Y q -2932
-Y u -2932
-Y v -2647
-f f -477
-f cq 1460
-f ' 1460
-r , -1058
-r hy -529
-r - -529
-r . -1459
-r g -477
-r cq 982
-r ' 982
-v , -1717
-v . -1717
-w , -1717
-w . -1717
-y , -1717
-y . -1717
-oq oq -1963
-oq ` -1963
-` oq -1963
-` ` -1963
-cq s -1459
-' s -1459
-cq t -477
-' t -477
-cq cq -1963
-cq ' -1963
-' cq -1963
-' ' -1963
-charset
-! 8811,17919,362 2 161057 -- U+0021 (19U 33)
-dq 10800,17919 2 161058 -- U+0022 (19U 34)
-" "
-sh 13229,17919,362 2 161059 -- U+0023 (19U 35)
-# "
-Do 13229,18991,2015 2 161060 -- U+0024 (19U 36)
-$ "
-% 22040,17919,723 2 161061 -- U+0025 (19U 37)
-& 20580,17919,400 2 161062 -- U+0026 (19U 38)
-aq 4767,17919 2 161063 -- U+0027 (19U 39)
-( 8811,18371,5659 3 161064 -- U+0028 (19U 40)
-) 8811,18371,5659 3 161065 -- U+0029 (19U 41)
-* 13229,18371 2 161066 -- U+002A (19U 42)
-+ 14922,15748 0 161067 -- U+002B (19U 43)
-, 6615,2584,4405 0 161068 -- U+002C (19U 44)
-hy 8811,6912 0 161069 -- U+002D (19U 45)
-- "
-. 6615,2506,362 0 161070 -- U+002E (19U 46)
-sl 7351,18371,362 2 161071 -- U+002F (19U 47)
-/ "
-0 13229,17880,310 2 161072 -- U+0030 (19U 48)
-1 13229,17880 2 161073 -- U+0031 (19U 49)
-2 13229,17880 2 161074 -- U+0032 (19U 50)
-3 13229,17880,310 2 161075 -- U+0033 (19U 51)
-4 13229,17880 2 161076 -- U+0034 (19U 52)
-5 13229,17518,310 2 161077 -- U+0035 (19U 53)
-6 13229,17880,310 2 161078 -- U+0036 (19U 54)
-7 13229,17518,362 2 161079 -- U+0037 (19U 55)
-8 13229,17880,310 2 161080 -- U+0038 (19U 56)
-9 13229,17880,362 2 161081 -- U+0039 (19U 57)
-: 7351,12196,362 0 161082 -- U+003A (19U 58)
-; 7351,12209,4405 0 161083 -- U+003B (19U 59)
-< 14922,15141 0 161084 -- U+003C (19U 60)
-= 14922,11408 0 161085 -- U+003D (19U 61)
-> 14922,15141 0 161086 -- U+003E (19U 62)
-? 11743,17919,349 2 161087 -- U+003F (19U 63)
-at 24365,18371,5710 3 161088 -- U+0040 (19U 64)
-@ "
-A 19107,17919 2 161089 -- U+0041 (19U 65)
-B 17648,17518 2 161090 -- U+0042 (19U 66)
-C 17648,17919,400 2 161091 -- U+0043 (19U 67)
-D 19107,17518 2 161092 -- U+0044 (19U 68)
-E 16162,17518 2 161093 -- U+0045 (19U 69)
-F 14715,17518 2 161094 -- U+0046 (19U 70)
-G 19107,17919,400 2 161095 -- U+0047 (19U 71)
-H 19107,17518 2 161096 -- U+0048 (19U 72)
-I 8811,17518 2 161097 -- U+0049 (19U 73)
-J 10297,17518,400 2 161098 -- U+004A (19U 74)
-K 19107,17518 2 161099 -- U+004B (19U 75)
-L 16162,17518 2 161100 -- U+004C (19U 76)
-M 23526,17518 2 161101 -- U+004D (19U 77)
-N 19107,17518,284 2 161102 -- U+004E (19U 78)
-O 19107,17919,400 2 161103 -- U+004F (19U 79)
-P 14715,17518 2 161104 -- U+0050 (19U 80)
-Q 19107,17919,5181 3 161105 -- U+0051 (19U 81)
-R 17648,17518 2 161106 -- U+0052 (19U 82)
-S 14715,17919,400 2 161107 -- U+0053 (19U 83)
-T 16162,17518 2 161108 -- U+0054 (19U 84)
-U 19107,17518,413 2 161109 -- U+0055 (19U 85)
-V 19107,17518,400 2 161110 -- U+0056 (19U 86)
-W 24973,17518,400 2 161111 -- U+0057 (19U 87)
-X 19107,17518 2 161112 -- U+0058 (19U 88)
-Y 19107,17518 2 161113 -- U+0059 (19U 89)
-Z 16162,17518 2 161114 -- U+005A (19U 90)
-lB 8811,17919,5245 3 161115 -- U+005B (19U 91)
-[ "
-rs 7351,18371,362 2 161116 -- U+005C (19U 92)
-\ "
-rB 8811,17919,5258 3 161117 -- U+005D (19U 93)
-] "
-ha 12415,17880 2 161118 -- U+005E (19U 94)
-_ 13229,0,5710 1 161119 -- U+005F (19U 95)
-ga 8811,17958 2 161120 -- U+0060 (19U 96)
-a 11743,12183,245 0 161121 -- U+0061 (19U 97)
-b 13229,18371,362 2 161122 -- U+0062 (19U 98)
-c 11743,12183,362 0 161123 -- U+0063 (19U 99)
-d 13229,18371,362 2 161124 -- U+0064 (19U 100)
-e 11743,12196,362 0 161125 -- U+0065 (19U 101)
-f 8811,18345 2 161126 -- U+0066 (19U 102)
-g 13229,12183,5710 1 161127 -- U+0067 (19U 103)
-h 13229,18371 2 161128 -- U+0068 (19U 104)
-i 7351,18371 2 161129 -- U+0069 (19U 105)
-j 7351,18384,5710 3 161130 -- U+006A (19U 106)
-k 13229,18371 2 161131 -- U+006B (19U 107)
-l 7351,18371 2 161132 -- U+006C (19U 108)
-m 20580,12183 0 161133 -- U+006D (19U 109)
-n 13229,12183 0 161134 -- U+006E (19U 110)
-o 13229,12183,362 0 161135 -- U+006F (19U 111)
-p 13229,12183,5659 1 161136 -- U+0070 (19U 112)
-q 13229,12183,5659 1 161137 -- U+0071 (19U 113)
-r 8811,12183 0 161138 -- U+0072 (19U 114)
-s 10297,12183,362 0 161139 -- U+0073 (19U 115)
-t 7351,15723,194 0 161140 -- U+0074 (19U 116)
-u 13229,11834,362 0 161141 -- U+0075 (19U 117)
-v 13229,11834,362 0 161142 -- U+0076 (19U 118)
-w 19107,11834,362 0 161143 -- U+0077 (19U 119)
-x 13229,11834 0 161144 -- U+0078 (19U 120)
-y 13229,11834,5710 1 161145 -- U+0079 (19U 121)
-z 11743,11834 0 161146 -- U+007A (19U 122)
-{ 12699,18371,5710 3 161147 -- U+007B (19U 123)
-lC "
-| 5297,18371,5710 3 161148 -- U+007C (19U 124)
-ba "
-} 12699,18371,5710 3 161149 -- U+007D (19U 125)
-rC "
-ti 14314,8759 0 161150 -- U+007E (19U 126)
-r! 8811,12583,5710 1 161185 -- U+00A1 (19U 161)
-ct 13229,17131,4896 2 161186 -- U+00A2 (19U 162)
-Po 13229,17880,310 2 161187 -- U+00A3 (19U 163)
-Cs 13229,14999 0 161188 -- U+00A4 (19U 164)
-Ye 13229,17518 2 161189 -- U+00A5 (19U 165)
-bb 5297,18371,5710 3 161190 -- U+00A6 (19U 166)
-sc 13229,17880,5168 3 161191 -- U+00A7 (19U 167)
-ad 8811,17273 2 161192 -- U+00A8 (19U 168)
-co 20102,17919,400 2 161193 -- U+00A9 (19U 169)
-Of 7299,17880 2 161194 -- U+00AA (19U 170)
-Fo 13229,12066,103 0 161195 -- U+00AB (19U 171)
-tno 14922,11343 0 161196 -- U+00AC (19U 172)
-u00AD 8811,6912 0 161197 -- U+00AD (19U 173)
-rg 20102,17919,400 2 161198 -- U+00AE (19U 174)
-u00AF 13229,19973 2 161199 -- U+00AF (19U 175)
-de 10581,17906 2 161200 -- U+00B0 (19U 176)
-t+- 14521,15748 0 161201 -- U+00B1 (19U 177)
-S2 7932,17880 2 161202 -- U+00B2 (19U 178)
-S3 7932,17880 2 161203 -- U+00B3 (19U 179)
-aa 8811,17958 2 161204 -- U+00B4 (19U 180)
-mc 15245,11834,5710 1 161205 -- U+00B5 (19U 181)
-ps 11989,17518,5710 3 161206 -- U+00B6 (19U 182)
-pc 6615,10193 0 60157 -- U+00B7 ( 7J 253)
-ac 8811,207,5038 0 161208 -- U+00B8 (19U 184)
-S1 7932,17880 2 161209 -- U+00B9 (19U 185)
-Om 8204,17880 2 161210 -- U+00BA (19U 186)
-Fc 13229,12066,103 0 161211 -- U+00BB (19U 187)
-14 19844,17880,698 2 161212 -- U+00BC (19U 188)
-12 19844,17880,698 2 161213 -- U+00BD (19U 189)
-34 19844,17880,698 2 161214 -- U+00BE (19U 190)
-r? 11743,12596,5710 1 161215 -- U+00BF (19U 191)
-`A 19107,23216 2 161216 -- U+00C0 (19U 192)
-'A 19107,23216 2 161217 -- U+00C1 (19U 193)
-^A 19107,23164 2 161218 -- U+00C2 (19U 194)
-~A 19107,22273 2 161219 -- U+00C3 (19U 195)
-:A 19107,22066 2 161220 -- U+00C4 (19U 196)
-oA 19107,21975 2 161221 -- U+00C5 (19U 197)
-AE 23526,17518 2 161222 -- U+00C6 (19U 198)
-,C 17648,17919,5038 2 161223 -- U+00C7 (19U 199)
-`E 16162,23216 2 161224 -- U+00C8 (19U 200)
-'E 16162,23216 2 161225 -- U+00C9 (19U 201)
-^E 16162,23164 2 161226 -- U+00CA (19U 202)
-:E 16162,22066 2 161227 -- U+00CB (19U 203)
-`I 8811,23216 2 161228 -- U+00CC (19U 204)
-'I 8811,23216 2 161229 -- U+00CD (19U 205)
-^I 8811,23164 2 161230 -- U+00CE (19U 206)
-:I 8811,22066 2 161231 -- U+00CF (19U 207)
--D 19107,17518 2 161232 -- U+00D0 (19U 208)
-~N 19107,22273,284 2 161233 -- U+00D1 (19U 209)
-`O 19107,23216,400 2 161234 -- U+00D2 (19U 210)
-'O 19107,23216,400 2 161235 -- U+00D3 (19U 211)
-^O 19107,23164,400 2 161236 -- U+00D4 (19U 212)
-~O 19107,22273,400 2 161237 -- U+00D5 (19U 213)
-:O 19107,22066,400 2 161238 -- U+00D6 (19U 214)
-tmu 14922,14095 0 161239 -- U+00D7 (19U 215)
-/O 19107,18087,607 2 161240 -- U+00D8 (19U 216)
-`U 19107,23216,413 2 161241 -- U+00D9 (19U 217)
-'U 19107,23216,413 2 161242 -- U+00DA (19U 218)
-^U 19107,23164,413 2 161243 -- U+00DB (19U 219)
-:U 19107,22066,413 2 161244 -- U+00DC (19U 220)
-'Y 19107,23216 2 161245 -- U+00DD (19U 221)
-TP 14715,17518 2 161246 -- U+00DE (19U 222)
-ss 13229,18371,168 2 161247 -- U+00DF (19U 223)
-`a 11743,17958,245 2 161248 -- U+00E0 (19U 224)
-'a 11743,17958,245 2 161249 -- U+00E1 (19U 225)
-^a 11743,17893,245 2 161250 -- U+00E2 (19U 226)
-~a 11743,17518,245 2 161251 -- U+00E3 (19U 227)
-:a 11743,17273,245 2 161252 -- U+00E4 (19U 228)
-oa 11743,18423,245 2 161253 -- U+00E5 (19U 229)
-ae 17648,12196,362 0 161254 -- U+00E6 (19U 230)
-,c 11743,12183,5038 0 161255 -- U+00E7 (19U 231)
-`e 11743,17958,362 2 161256 -- U+00E8 (19U 232)
-'e 11743,17958,362 2 161257 -- U+00E9 (19U 233)
-^e 11743,17893,362 2 161258 -- U+00EA (19U 234)
-:e 11743,17260,362 2 161259 -- U+00EB (19U 235)
-`i 7351,17958 2 161260 -- U+00EC (19U 236)
-'i 7351,17958 2 161261 -- U+00ED (19U 237)
-^i 7351,17893 2 161262 -- U+00EE (19U 238)
-:i 7351,17260 2 161263 -- U+00EF (19U 239)
-Sd 13229,18371,362 2 161264 -- U+00F0 (19U 240)
-~n 13229,17518 2 161265 -- U+00F1 (19U 241)
-`o 13229,17958,362 2 161266 -- U+00F2 (19U 242)
-'o 13229,17958,362 2 161267 -- U+00F3 (19U 243)
-^o 13229,17893,362 2 161268 -- U+00F4 (19U 244)
-~o 13229,17518,362 2 161269 -- U+00F5 (19U 245)
-:o 13229,17260,362 2 161270 -- U+00F6 (19U 246)
-tdi 14521,13888 0 161271 -- U+00F7 (19U 247)
-/o 13229,12648,866 0 161272 -- U+00F8 (19U 248)
-`u 13229,17958,362 2 161273 -- U+00F9 (19U 249)
-'u 13229,17958,362 2 161274 -- U+00FA (19U 250)
-^u 13229,17893,362 2 161275 -- U+00FB (19U 251)
-:u 13229,17260,362 2 161276 -- U+00FC (19U 252)
-'y 13229,17958,5710 3 161277 -- U+00FD (19U 253)
-Tp 13229,18371,5646 3 161278 -- U+00FE (19U 254)
-:y 13229,17273,5710 3 161279 -- U+00FF (19U 255)
-u0041_0306 19107,22725 2 75203 -- U+0102 ( 9E 195)
-u0061_0306 11743,17544,245 2 75235 -- U+0103 ( 9E 227)
-u0041_0328 19107,17919,4690 2 75173 -- U+0104 ( 9E 165)
-u0061_0328 11743,12183,4690 0 75193 -- U+0105 ( 9E 185)
-'C 17648,23216,400 2 75206 -- U+0106 ( 9E 198)
-'c 11743,17958,362 2 75238 -- U+0107 ( 9E 230)
-u0041_030C 17648,23164,400 2 75208 -- U+010C ( 9E 200)
-u0061_030C 11743,17893,362 2 75240 -- U+010D ( 9E 232)
-u0044_030C 19107,23164 2 75215 -- U+010E ( 9E 207)
-u0064_030C 17105,18371,362 2 75247 -- U+010F ( 9E 239)
-u0111 13229,18371,362 2 75248 -- U+0111 ( 9E 240)
-u0045_0328 16162,17518,4690 2 75210 -- U+0118 ( 9E 202)
-u0065_0328 11743,12196,4690 0 75242 -- U+0119 ( 9E 234)
-u0045_030C 16162,23164 2 75212 -- U+011A ( 9E 204)
-u0065_030C 11743,17893,362 2 75244 -- U+011B ( 9E 236)
-u0047_0306 19107,22686,400 2 46288 -- U+011E ( 5T 208)
-u0067_0306 13229,17544,5710 3 46320 -- U+011F ( 5T 240)
-u0049_0307 8811,22079 2 46301 -- U+0130 ( 5T 221)
-.i 7351,12183 0 46333 -- U+0131 ( 5T 253)
-IJ 18746,17518,400 2 60135 -- U+0132 ( 7J 231)
-ij 14612,18384,5710 3 60134 -- U+0133 ( 7J 230)
-u004C_0301 16162,23216 2 75205 -- U+0139 ( 9E 197)
-u006C_0301 7351,23216 2 75237 -- U+013A ( 9E 229)
-u004C_030C 16162,17919 2 75196 -- U+013D ( 9E 188)
-u006C_030C 10749,18371 2 75198 -- U+013E ( 9E 190)
-u013F 16162,17518 2 95646 -- U+013F (11U 158)
-u0140 9095,18371 2 95647 -- U+0140 (11U 159)
-/L 16162,17518 2 75171 -- U+0141 ( 9E 163)
-/l 7351,18371 2 75187 -- U+0142 ( 9E 179)
-u004E_0301 19107,23216,284 2 75217 -- U+0143 ( 9E 209)
-u006E_0301 13229,17958 2 75249 -- U+0144 ( 9E 241)
-u004E_030C 19107,23164,284 2 75218 -- U+0147 ( 9E 210)
-u006E_030C 13229,17893 2 75250 -- U+0148 ( 9E 242)
-u0149 15981,17919 2 95660 -- U+0149 (11U 172)
-u004F_030B 19107,23216,400 2 75221 -- U+0150 ( 9E 213)
-u006F_030B 13229,17958,362 2 75253 -- U+0151 ( 9E 245)
-OE 23526,17673,207 2 161164 -- U+0152 (19U 140)
-oe 19107,12196,362 0 161180 -- U+0153 (19U 156)
-u0052_0301 17648,23216 2 75200 -- U+0154 ( 9E 192)
-u0072_0301 8811,17958 2 75232 -- U+0155 ( 9E 224)
-u0052_030C 17648,23164 2 75224 -- U+0158 ( 9E 216)
-u0072_030C 8811,17893 2 75256 -- U+0159 ( 9E 248)
-u0053_0301 14715,23216,400 2 75148 -- U+015A ( 9E 140)
-u0073_0301 10297,17958,362 2 75164 -- U+015B ( 9E 156)
-u0053_0327 14715,17919,5038 2 75178 -- U+015E ( 9E 170)
-u0073_0327 10297,12183,5038 0 75194 -- U+015F ( 9E 186)
-vS 14715,23164,400 2 161162 -- U+0160 (19U 138)
-vs 10297,17893,362 2 161178 -- U+0161 (19U 154)
-u0054_0327 16162,17518,5969 3 75230 -- U+0162 ( 9E 222)
-u0074_0327 7351,15723,5969 1 75262 -- U+0163 ( 9E 254)
-u0054_030C 16162,23164 2 75149 -- U+0164 ( 9E 141)
-u0074_030C 11304,18371,194 2 75165 -- U+0165 ( 9E 157)
-u0055_030A 19107,23435,413 2 75225 -- U+016E ( 9E 217)
-u0075_030A 13229,18397,362 2 75257 -- U+016F ( 9E 249)
-u0055_030B 19107,23216,413 2 75227 -- U+0170 ( 9E 219)
-u0075_030B 13229,17958,362 2 75259 -- U+0171 ( 9E 251)
-:Y 19107,22066 2 161183 -- U+0178 (19U 159)
-u005A_0301 16162,23216 2 75151 -- U+0179 ( 9E 143)
-u007A_0301 11743,17958 2 75167 -- U+017A ( 9E 159)
-u005A_0307 16162,22079 2 75183 -- U+017B ( 9E 175)
-u007A_0307 11743,17273 2 75199 -- U+017C ( 9E 191)
-vZ 16162,23164 2 75150 -- U+017D ( 9E 142)
-vz 11743,17893 2 75166 -- U+017E ( 9E 158)
-Fn 13229,17919,5568 3 161155 -- U+0192 (19U 131)
-a^ 8811,17893 2 161160 -- U+02C6 (19U 136)
-^ "
-ah 8811,17893 2 75169 -- U+02C7 ( 9E 161)
-a- 8811,17480 2 60154 -- U+02C9 ( 7J 250)
-ab 8811,17544 2 75170 -- U+02D8 ( 9E 162)
-a. 8811,17273 2 75263 -- U+02D9 ( 9E 255)
-ao 8811,18397 2 60152 -- U+02DA ( 7J 248)
-ho 8811,207,4690 0 75186 -- U+02DB ( 9E 178)
-~ 8811,17518 2 161176 -- U+02DC (19U 152)
-a~ "
-a" 8811,17958 2 75197 -- U+02DD ( 9E 189)
-en 13229,6795 0 161174 -- U+2013 (19U 150)
-em 26458,6808 0 161175 -- U+2014 (19U 151)
-u2017 13229,0,5710 1 60095 -- U+2017 ( 7J 191)
-oq 8811,17919 2 161169 -- U+2018 (19U 145)
-` "
-cq 8811,17919 2 161170 -- U+2019 (19U 146)
-' "
-bq 8811,2584,4405 0 161154 -- U+201A (19U 130)
-lq 11743,17919 2 161171 -- U+201C (19U 147)
-rq 11743,17919 2 161172 -- U+201D (19U 148)
-Bq 11743,2584,4082 0 161156 -- U+201E (19U 132)
-dg 13229,18126,5439 3 161158 -- U+2020 (19U 134)
-dd 13229,18371,5710 3 161159 -- U+2021 (19U 135)
-bu 9263,11989 0 161173 -- U+2022 (19U 149)
-u2026 26458,2506,362 0 161157 -- U+2026 (19U 133)
-%0 26458,17919,711 2 161161 -- U+2030 (19U 137)
-fm 5788,17919 2 60101 -- U+2032 ( 7J 197)
-sd 11020,17919 2 60102 -- U+2033 ( 7J 198)
-fo 8811,12066,103 0 161163 -- U+2039 (19U 139)
-fc 8811,12066,103 0 161179 -- U+203A (19U 155)
-u203C 15154,17919,362 2 87315 -- U+203C (10U 19)
-u207F 8333,14728 0 87548 -- U+207F (10U 252)
-u20A7 25632,17518,349 2 60121 -- U+20A7 ( 7J 217)
-Eu 13229,17880,310 2 161152 -- U+20AC (19U 128)
-u2105 22053,17919,723 2 60072 -- U+2105 ( 7J 168)
-u2113 12674,17919,362 2 60122 -- U+2113 ( 7J 218)
-tm 25929,17518 2 161177 -- U+2122 (19U 153)
-\- 14922,9328 0 60096 -- U+2212 ( 7J 192)
-f/ 4418,17880,698 2 60109 -- U+2215 ( 7J 205)
-sq 15981,12196 0 60091 -- U+25A1 ( 7J 187)
-u25CA 13074,18371 2 101079 -- U+25CA (12J 215)
-fi 14715,18371 2 60077 -- U+FB01 ( 7J 173)
-fl 14715,18371 2 60078 -- U+FB02 ( 7J 174)
diff --git a/contrib/groff/font/devlj4/TR b/contrib/groff/font/devlj4/TR
deleted file mode 100644
index b27cef21657a..000000000000
--- a/contrib/groff/font/devlj4/TR
+++ /dev/null
@@ -1,843 +0,0 @@
-# CG Times
-name TR
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3902
-P . -3902
-P , -3902
-V A -5363
-A V -5363
-T o -3413
-T r -1949
-T c -3413
-T e -2924
-T d -2924
-T s -2924
-T y -1949
-T a -3413
-T w -1949
-T u -1949
-T J -1460
-L T -2924
-L Y -3902
-Y o -4877
-Y e -4388
-Y a -4877
-Y J -1460
-A W -4877
-W A -4877
-T A -2924
-V o -3902
-V e -3902
-V a -3902
-Y A -4388
-F A -3902
-F . -3902
-F , -3902
-A T -2924
-A Y -4388
-v . -3413
-v , -3413
-y . -3413
-y , -3413
-T . -2924
-T , -2924
-L W -3413
-P A -3902
-V J -1460
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -3413
-W e -3413
-W a -3413
-W . -3902
-W , -3902
-r . -2438
-r , -2438
-w . -3413
-w , -3413
-Y u -3413
-A v -3413
-A y -3413
-A w -3413
-o . -1460
-o , -1460
-p . -1460
-p , -1460
-e . -974
-e , -974
-b . -1460
-b , -1460
-O T -1949
-O V -2924
-O Y -2924
-O . -2924
-O , -2924
-L y -1460
-P J -1460
-V y -2924
-V u -2924
-V O -2924
-V G -2924
-V C -2924
-V Q -2924
-D T -1949
-D V -2924
-D Y -2924
-D . -2924
-D , -2924
-Y O -2924
-Y G -2924
-Y C -2924
-Y Q -2924
-F o -1460
-F e -1460
-F a -1460
-c . -1460
-c , -1460
-O A -2438
-O W -2438
-R T -2438
-R V -2438
-R Y -2438
-R W -2438
-G T -1949
-P o -1460
-P g -1460
-P e -974
-P a -1460
-C A -1949
-C . -1949
-C , -1949
-D A -2438
-D W -2438
-B T -1949
-B Y -1949
-B . -1949
-B , -1949
-F J -1460
-A O -2438
-A G -2438
-A C -2438
-A U -2438
-A Q -2438
-W r -2438
-W y -2438
-W u -2438
-W O -2438
-W G -2438
-W C -2438
-W J -1460
-W Q -2438
-J A -2438
-J . -2438
-J , -2438
-U A -2438
-U . -2438
-U , -2438
-Q A -2438
-Q W -2438
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-G V -1949
-G Y -1949
-G W -1949
-G . -1460
-G , -1460
-C T -974
-C V -974
-C Y -974
-D X -1460
-B V -1949
-B X -1460
-B A -1949
-B W -1949
-S . -1460
-S , -1460
-F r -485
-F y -485
-F u -485
-F O -485
-F G -485
-F C -485
-F Q -485
-X o -1460
-X e -974
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -974
-Q X -1460
-K o -1460
-K e -974
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -1460
-o y -1460
-o x -974
-o w -1460
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-r g -974
-g . -974
-g , -974
-p v -974
-p y -974
-p x -974
-c v -1460
-c y -1460
-c w -1460
-v o -1460
-v g -1460
-v c -1460
-v d -1460
-v a -1460
-v q -1460
-e v -974
-e y -974
-b v -1460
-b y -1460
-b w -1460
-s . -974
-s , -974
-y o -1460
-y g -1460
-y c -1460
-y d -1460
-y a -1460
-y q -1460
-f g -485
-x o -974
-x g -485
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -1460
-a y -1460
-a w -1460
-w o -1460
-w g -1460
-w c -1460
-w d -1460
-w a -1460
-w q -1460
-T i -1460
-T S -1460
-R o -1460
-R y -1460
-R O -1460
-R G -1460
-R C -1460
-R U -1460
-R Q -1460
-G X -1460
-G A -1460
-P s -974
-C X -974
-C W -974
-V i -1460
-V S -1460
-S T -485
-S V -485
-S Y -485
-S X -485
-S A -1460
-S W -485
-Y i -1460
-Y S -1460
-X a -974
-X u -974
-X S -485
-A t -974
-A g -485
-A c -1460
-A d -1460
-A a -974
-A u -974
-A q -1460
-A S -485
-W i -1460
-W S -1460
-J y -485
-K c -1460
-K u -974
-K S -485
-t g -485
-o f -974
-h w -974
-n w -974
-m w -974
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-g g -974
-p f -974
-p w -974
-c f -974
-c x -974
-v e -974
-v s -974
-e f -974
-e x -974
-e w -974
-b f -974
-s v -974
-s y -974
-s f -974
-s x -974
-s w -974
-y e -974
-y s -974
-f o -974
-f c -974
-f e -974
-f d -974
-f s -974
-f a -974
-f q -974
-x s -974
-w e -974
-w s -974
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-O Z -485
-N . -485
-N , -485
-R e -974
-R a -974
-R u -974
-R S -485
-G Z -485
-C Z -485
-E g -485
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z J -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-F i -485
-F j -485
-F S -485
-X J -485
-A s -974
-A J -485
-J o -485
-J i -485
-J e -485
-J a -485
-J u -485
-J O -485
-J G -485
-J C -485
-J S -485
-J J -485
-J Q -485
-U g -485
-K a -974
-K J -485
-o g -485
-o z -485
-h g -485
-n g -485
-m g -485
-l g -485
-r s -485
-g o -485
-g c -485
-g e -485
-g d -485
-g s -485
-g a -485
-g q -485
-i g -485
-p g -485
-p z -485
-c g -485
-c z -485
-e g -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-d g -485
-b g -485
-b z -485
-s g -485
-s z -485
-a g -485
-j g -485
-u g -485
-q g -485
-k s -485
-O g -485
-N A -485
-M g -485
-R J -485
-I g -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -3902
-L ' -3902
-T hy -1949
-T - -1949
-T en -1949
-T em -1949
-A cq -3902
-A ' -3902
-hy T -1949
-- T -1949
-en T -1949
-em T -1949
-Y hy -3413
-Y - -3413
-Y en -3413
-Y em -3413
-p cq -974
-p ' -974
-c cq -1460
-c ' -1460
-e cq -974
-e ' -974
-b cq -1460
-b ' -1460
-a cq -1460
-a ' -1460
-V hy -2924
-V - -2924
-V en -2924
-V em -2924
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-R cq -1460
-R ' -1460
-W hy -2438
-W - -2438
-W en -2438
-W em -2438
-cq d -1460
-' d -1460
-s cq -974
-s ' -974
-F hy -485
-F - -485
-F en -485
-F em -485
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -1949
-- A -1949
-en X -1460
-en A -1949
-em X -1460
-R hy -1460
-R - -1460
-R en -1460
-R em -1460
-K cq -485
-K ' -485
-t g -485
-b f -974
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-J hy -485
-J - -485
-J en -485
-J em -485
-hy g -485
-- g -485
-en g -485
-em g -485
-charset
-! 8781,18225,330 2 161057 -- MSL 1 (19U 33)
-dq 12198,18225 2 161058 -- MSL 2 (19U 34)
-" "
-sh 13173,18225,837 2 161059 -- MSL 3 (19U 35)
-# "
-Do 13173,19845,2370 2 161060 -- MSL 4 (19U 36)
-$ "
-% 23418,18894,1026 2 161061 -- MSL 5 (19U 37)
-& 20490,18225,330 2 161062 -- MSL 6 (19U 38)
-cq 8781,18225 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18225,4845 2 161064 -- MSL 9 (19U 40)
-) 8781,18225,4845 2 161065 -- MSL 10 (19U 41)
-* 13173,18225 2 161066 -- MSL 11 (19U 42)
-+ 23418,15750 0 161067 -- MSL 12 (19U 43)
-, 8781,2565,4005 0 161068 -- MSL 13 (19U 44)
-hy 8781,7155 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,2685,330 0 161070 -- MSL 15 (19U 46)
-sl 8781,18225,330 2 161071 -- MSL 16 (19U 47)
-/ "
-0 13173,18225,330 2 161072 -- MSL 17 (19U 48)
-1 13173,18225 2 161073 -- MSL 18 (19U 49)
-2 13173,18225 2 161074 -- MSL 19 (19U 50)
-3 13173,18225,330 2 161075 -- MSL 20 (19U 51)
-4 13173,18225 2 161076 -- MSL 21 (19U 52)
-5 13173,17895,330 2 161077 -- MSL 22 (19U 53)
-6 13173,18225,330 2 161078 -- MSL 23 (19U 54)
-7 13173,17895 2 161079 -- MSL 24 (19U 55)
-8 13173,18225,330 2 161080 -- MSL 25 (19U 56)
-9 13173,18225,330 2 161081 -- MSL 26 (19U 57)
-: 8781,12252,330 0 161082 -- MSL 27 (19U 58)
-; 8781,12252,4005 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 23418,10875 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 11709,18225,330 2 161087 -- MSL 32 (19U 63)
-at 23418,16980,3654 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19029,18225 2 161089 -- MSL 34 (19U 65)
-B 16587,17895 2 161090 -- MSL 35 (19U 66)
-C 18051,18225,330 2 161091 -- MSL 36 (19U 67)
-D 19515,17895 2 161092 -- MSL 37 (19U 68)
-E 16587,17895 2 161093 -- MSL 38 (19U 69)
-F 15612,17895 2 161094 -- MSL 39 (19U 70)
-G 19029,18225,330 2 161095 -- MSL 40 (19U 71)
-H 19515,17895 2 161096 -- MSL 41 (19U 72)
-I 8781,17895 2 161097 -- MSL 42 (19U 73)
-J 10245,17895,330 2 161098 -- MSL 43 (19U 74)
-K 18540,17895 2 161099 -- MSL 44 (19U 75)
-L 16587,17895 2 161100 -- MSL 45 (19U 76)
-M 23907,17895 2 161101 -- MSL 46 (19U 77)
-N 19515,17895,330 2 161102 -- MSL 47 (19U 78)
-O 19029,18225,330 2 161103 -- MSL 48 (19U 79)
-P 15126,17895 2 161104 -- MSL 49 (19U 80)
-Q 19029,18225,4605 2 161105 -- MSL 50 (19U 81)
-R 17565,17895 2 161106 -- MSL 51 (19U 82)
-S 14148,18225,330 2 161107 -- MSL 52 (19U 83)
-T 16587,17895 2 161108 -- MSL 53 (19U 84)
-U 19515,17895,330 2 161109 -- MSL 54 (19U 85)
-V 19029,17895,330 2 161110 -- MSL 55 (19U 86)
-W 24882,17895,330 2 161111 -- MSL 56 (19U 87)
-X 19029,17895 2 161112 -- MSL 57 (19U 88)
-Y 19029,17895 2 161113 -- MSL 58 (19U 89)
-Z 17076,17895 2 161114 -- MSL 59 (19U 90)
-lB 8781,17895,4380 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18225,330 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,17895,4380 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 8781,18225 2 161169 -- MSL 66 (19U 145)
-` "
-a 11709,12669,330 0 161121 -- MSL 67 (19U 97)
-b 13173,18300,330 2 161122 -- MSL 68 (19U 98)
-c 11709,12669,330 0 161123 -- MSL 69 (19U 99)
-d 13173,18300,330 2 161124 -- MSL 70 (19U 100)
-e 11709,12669,330 0 161125 -- MSL 71 (19U 101)
-f 8781,18300 2 161126 -- MSL 72 (19U 102)
-g 13173,12669,5655 1 161127 -- MSL 73 (19U 103)
-h 13173,18300 2 161128 -- MSL 74 (19U 104)
-i 7317,18534 2 161129 -- MSL 75 (19U 105)
-j 7317,18534,5655 3 161130 -- MSL 76 (19U 106)
-k 13173,18300 2 161131 -- MSL 77 (19U 107)
-l 7317,18300 2 161132 -- MSL 78 (19U 108)
-m 20490,12669 0 161133 -- MSL 79 (19U 109)
-n 13173,12669 0 161134 -- MSL 80 (19U 110)
-o 13173,12669,330 0 161135 -- MSL 81 (19U 111)
-p 13173,12669,5655 1 161136 -- MSL 82 (19U 112)
-q 13173,12669,5655 1 161137 -- MSL 83 (19U 113)
-r 9759,12669 0 161138 -- MSL 84 (19U 114)
-s 10245,12669,330 0 161139 -- MSL 85 (19U 115)
-t 7317,15465,330 0 161140 -- MSL 86 (19U 116)
-u 13173,12339,330 0 161141 -- MSL 87 (19U 117)
-v 13173,12339,330 0 161142 -- MSL 88 (19U 118)
-w 19029,12339,330 0 161143 -- MSL 89 (19U 119)
-x 13173,12339 0 161144 -- MSL 90 (19U 120)
-y 13173,12339,5655 1 161145 -- MSL 91 (19U 121)
-z 11709,12339 0 161146 -- MSL 92 (19U 122)
-{ 11709,19935,6210 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,19935,6210 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 19029,23955 2 161216 -- MSL 99 (19U 192)
-^A 19029,23955 2 161218 -- MSL 100 (19U 194)
-`E 16587,23955 2 161224 -- MSL 101 (19U 200)
-^E 16587,23955 2 161226 -- MSL 102 (19U 202)
-:E 16587,23085 2 161227 -- MSL 103 (19U 203)
-^I 8781,23955 2 161230 -- MSL 104 (19U 206)
-:I 8781,23085 2 161231 -- MSL 105 (19U 207)
-aa 13173,18399 2 161204 -- MSL 106 (19U 180)
-ga 13173,18399 2 161120 -- MSL 107 (19U 96)
-a^ 13173,18399 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 13173,17124 2 161192 -- MSL 109 (19U 168)
-~ 13173,17064 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19515,23955,330 2 161241 -- MSL 111 (19U 217)
-^U 19515,23955,330 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 19029,23955 2 161245 -- MSL 114 (19U 221)
-'y 13173,18399,5655 3 161277 -- MSL 115 (19U 253)
-de 13173,18225 2 161200 -- MSL 116 (19U 176)
-,C 18051,18225,4908 2 161223 -- MSL 117 (19U 199)
-,c 11709,12669,4572 0 161255 -- MSL 118 (19U 231)
-~N 19515,23034,330 2 161233 -- MSL 119 (19U 209)
-~n 13173,17064 2 161265 -- MSL 120 (19U 241)
-r! 8781,12783,5772 1 161185 -- MSL 121 (19U 161)
-r? 11709,12783,5772 1 161215 -- MSL 122 (19U 191)
-Cs 13173,15684 0 161188 -- MSL 123 (19U 164)
-Po 13173,18225,330 2 161187 -- MSL 124 (19U 163)
-Ye 13173,17895 2 161189 -- MSL 125 (19U 165)
-sc 13173,18225,4230 2 161191 -- MSL 126 (19U 167)
-Fn 13173,18300,5655 3 161155 -- MSL 127 (19U 131)
-ct 13173,16866 2 161186 -- MSL 128 (19U 162)
-^a 11709,18399,330 2 161250 -- MSL 129 (19U 226)
-^e 11709,18399,330 2 161258 -- MSL 130 (19U 234)
-^o 13173,18399,330 2 161268 -- MSL 131 (19U 244)
-^u 13173,18399,330 2 161275 -- MSL 132 (19U 251)
-'a 11709,18399,330 2 161249 -- MSL 133 (19U 225)
-'e 11709,18399,330 2 161257 -- MSL 134 (19U 233)
-'o 13173,18399,330 2 161267 -- MSL 135 (19U 243)
-'u 13173,18399,330 2 161274 -- MSL 136 (19U 250)
-`a 11709,18399,330 2 161248 -- MSL 137 (19U 224)
-`e 11709,18399,330 2 161256 -- MSL 138 (19U 232)
-`o 13173,18399,330 2 161266 -- MSL 139 (19U 242)
-`u 13173,18399,330 2 161273 -- MSL 140 (19U 249)
-:a 11709,17124,330 2 161252 -- MSL 141 (19U 228)
-:e 11709,17124,330 2 161259 -- MSL 142 (19U 235)
-:o 13173,17124,330 2 161270 -- MSL 143 (19U 246)
-:u 13173,17124,330 2 161276 -- MSL 144 (19U 252)
-oA 19029,23865 2 161221 -- MSL 145 (19U 197)
-^i 7317,18399 2 161262 -- MSL 146 (19U 238)
-/O 19029,18225,339 2 161240 -- MSL 147 (19U 216)
-AE 23418,17895 2 161222 -- MSL 148 (19U 198)
-oa 11709,18309,330 2 161253 -- MSL 149 (19U 229)
-'i 7317,18399 2 161261 -- MSL 150 (19U 237)
-/o 13173,12765,330 0 161272 -- MSL 151 (19U 248)
-ae 17565,12669,330 0 161254 -- MSL 152 (19U 230)
-:A 19029,23085 2 161220 -- MSL 153 (19U 196)
-`i 7317,18399 2 161260 -- MSL 154 (19U 236)
-:O 19029,23085,330 2 161238 -- MSL 155 (19U 214)
-:U 19515,23085,330 2 161244 -- MSL 156 (19U 220)
-'E 16587,23955 2 161225 -- MSL 157 (19U 201)
-:i 7317,17124 2 161263 -- MSL 158 (19U 239)
-ss 13173,18300,330 2 161247 -- MSL 159 (19U 223)
-^O 19029,23955,330 2 161236 -- MSL 160 (19U 212)
-'A 19029,23955 2 161217 -- MSL 161 (19U 193)
-~A 19029,23034 2 161219 -- MSL 162 (19U 195)
-~a 11709,17064,330 2 161251 -- MSL 163 (19U 227)
--D 19515,17895 2 161232 -- MSL 164 (19U 208)
-Sd 13173,18456,330 2 161264 -- MSL 165 (19U 240)
-'I 8781,23955 2 161229 -- MSL 166 (19U 205)
-`I 8781,23955 2 161228 -- MSL 167 (19U 204)
-'O 19029,23955,330 2 161235 -- MSL 168 (19U 211)
-`O 19029,23955,330 2 161234 -- MSL 169 (19U 210)
-~O 19029,23034,330 2 161237 -- MSL 170 (19U 213)
-~o 13173,17064,330 2 161269 -- MSL 171 (19U 245)
-vS 14148,23955,330 2 161162 -- MSL 172 (19U 138)
-vs 10245,18399,330 2 161178 -- MSL 173 (19U 154)
-'U 19515,23955,330 2 161242 -- MSL 174 (19U 218)
-:Y 19029,23085 2 161183 -- MSL 175 (19U 159)
-:y 13173,17124,5655 3 161279 -- MSL 176 (19U 255)
-TP 15126,17895 2 161246 -- MSL 177 (19U 222)
-Tp 13173,18300,5655 3 161278 -- MSL 178 (19U 254)
-mc 14637,10800,5595 1 161205 -- MSL 180 (19U 181)
-ps 13173,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 23418,18225,330 2 161214 -- MSL 182 (19U 190)
-\- 23418,8610 0 60096 -- MSL 183 ( 7J 192)
-14 23418,18225,330 2 161212 -- MSL 184 (19U 188)
-12 23418,18225,330 2 161213 -- MSL 185 (19U 189)
-Of 13173,18225 2 161194 -- MSL 186 (19U 170)
-Om 13173,18225 2 161210 -- MSL 187 (19U 186)
-Fo 10734,10095 0 161195 -- MSL 188 (19U 171)
-Fc 10734,10095 0 161211 -- MSL 190 (19U 187)
-t+- 23418,15750,2625 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19725 2 161193 -- MSL 193 (19U 169)
-tno 23418,12165 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7155 0 161197 -- MSL 195 (19U 173)
-rg 13173,19725 2 161198 -- MSL 196 (19U 174)
-S2 9270,18060 2 161202 -- MSL 197 (19U 178)
-S3 9270,18060 2 161203 -- MSL 198 (19U 179)
-ac 13173,258,4572 0 161208 -- MSL 199 (19U 184)
-S1 9270,18060 2 161209 -- MSL 200 (19U 185)
-tmu 23418,15117 0 161239 -- MSL 201 (19U 215)
-tdi 23418,14010 0 161271 -- MSL 202 (19U 247)
-u203C 13701,18225,330 2 87315 -- MSL 221 (10U 19)
-u20A7 23124,17895,330 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,10407 0 161207 -- MSL 302 (19U 183)
-u013F 16587,17895 2 51943 -- MSL 306 ( 6J 231)
-u0140 7317,18300 2 51959 -- MSL 307 ( 6J 247)
-u2113 13173,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 15609,18225 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18225 2 60101 -- MSL 310 ( 7J 197)
-sd 13173,18225 2 60102 -- MSL 311 ( 7J 198)
-dg 13173,18225,4200 2 161158 -- MSL 312 (19U 134)
-tm 16101,17550 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 13173,18399 2 75169 -- MSL 315 ( 9E 161)
-ao 13173,18309 2 60152 -- MSL 316 ( 7J 248)
-f/ 3423,18225,330 2 60109 -- MSL 324 ( 7J 205)
-em 23418,6900 0 161175 -- MSL 325 (19U 151)
-en 13173,6900 0 161174 -- MSL 326 (19U 150)
-dd 13173,18225,4200 2 161159 -- MSL 327 (19U 135)
-.i 7317,12669 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18225 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 13173,18060 2 87548 -- MSL 332 (10U 252)
-u0111 13173,18300,330 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19029,23925 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 11709,17769,330 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19029,18225,3450 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 11709,12669,3165 0 75193 -- MSL 405 ( 9E 185)
-'C 18051,23955,330 2 75206 -- MSL 406 ( 9E 198)
-'c 11709,18399,330 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18051,23955,330 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 11709,18399,330 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19515,23955 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 16101,18339,330 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 16587,23955 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11709,18399,330 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 16587,17895,3450 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11709,12669,3165 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 16587,23955 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 7317,24153 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 16587,18339 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9759,18339 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19515,23955,330 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 13173,18399 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19515,23955,330 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 13173,18399 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 19029,23955,330 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 13173,18399,330 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17565,23955 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9759,18399 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17565,23955 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9759,18399 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,23955,330 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10245,18399,330 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,23955 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9270,18339,330 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,17895,4908 2 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7317,15465,4572 0 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19515,23955,330 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 13173,18399,330 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19515,23865,330 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 13173,18309,330 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 17076,23955 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 11709,18399 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 17076,23085 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 11709,17124 2 75199 -- MSL 485 ( 9E 191)
-u2070 9270,18060 2 51753 -- MSL 1000 ( 6J 41)
-u2074 9270,18060 2 51748 -- MSL 1001 ( 6J 36)
-u2075 9270,17895 2 51749 -- MSL 1002 ( 6J 37)
-u2076 9270,18060 2 51806 -- MSL 1003 ( 6J 94)
-u2077 9270,17895 2 51750 -- MSL 1004 ( 6J 38)
-u2078 9270,18060 2 51754 -- MSL 1005 ( 6J 42)
-u2079 9270,18060 2 51752 -- MSL 1006 ( 6J 40)
-lq 13662,18231 2 161171 -- MSL 1017 (19U 147)
-rq 13662,18225 2 161172 -- MSL 1018 (19U 148)
-Bq 13662,3009,3576 0 161156 -- MSL 1019 (19U 132)
-u2003 23418,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 13173,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 23418,2880 0 161157 -- MSL 1028 (19U 133)
-vz 11709,18399 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,17703 2 128299 -- MSL 1034 (15U 43)
-u211E 20001,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 14637,18300 2 60077 -- MSL 1040 ( 7J 173)
-fl 14637,18300 2 60078 -- MSL 1041 ( 7J 174)
-ff 15612,18300 2 51883 -- MSL 1042 ( 6J 171)
-Fi 21954,18300 2 51884 -- MSL 1043 ( 6J 172)
-Fl 21954,18300 2 51885 -- MSL 1044 ( 6J 173)
-ij 14637,18534,5655 3 60134 -- MSL 1047 ( 7J 230)
-u2105 24882,18225,330 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19029,23925,330 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 13173,17769,5655 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,18225,4908 2 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10245,12669,4572 0 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 8781,23085 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3009,3561 0 161154 -- MSL 1067 (19U 130)
-%0 31713,18894,1026 2 161161 -- MSL 1068 (19U 137)
-a- 13173,16539 0 60154 -- MSL 1084 ( 7J 250)
-ab 13173,17769 2 75170 -- MSL 1086 ( 9E 162)
-a. 13173,17124 2 75263 -- MSL 1088 ( 9E 255)
-oe 19029,12669,330 0 161180 -- MSL 1090 (19U 156)
-OE 23418,18225,330 2 161164 -- MSL 1091 (19U 140)
-fo 6831,10095 0 161163 -- MSL 1092 (19U 139)
-fc 6831,10095 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 16587,17895 2 75171 -- MSL 1095 ( 9E 163)
-/l 7317,18300 2 75187 -- MSL 1096 ( 9E 179)
-a" 13173,18399 2 75197 -- MSL 1097 ( 9E 189)
-ho 13173,750,3165 0 75186 -- MSL 1098 ( 9E 178)
-vZ 17076,23955 2 75150 -- MSL 1106 ( 9E 142)
-IJ 19245,17895,330 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UB b/contrib/groff/font/devlj4/UB
deleted file mode 100644
index 9ef2e87cb0d5..000000000000
--- a/contrib/groff/font/devlj4/UB
+++ /dev/null
@@ -1,797 +0,0 @@
-# Univers Bd
-name UB
-spacewidth 8781
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3413
-P . -4877
-P , -4877
-V A -3413
-A V -3413
-T o -4388
-T r -4388
-T c -4388
-T e -4388
-T d -4388
-T s -4388
-T y -4388
-T a -4388
-T w -4388
-T u -4388
-T J -4388
-L T -4388
-L Y -3902
-Y o -3902
-Y e -3902
-Y a -3413
-Y J -3902
-A W -2438
-W A -2438
-T A -3413
-V o -2924
-V e -2924
-V a -2438
-Y A -3413
-F A -1949
-F . -3902
-F , -3902
-A T -3413
-A Y -3413
-v . -2438
-v , -2438
-y . -2438
-y , -2438
-T . -3902
-T , -3902
-L W -2438
-P A -2438
-V J -3413
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -1949
-W e -1949
-W a -1949
-W . -2924
-W , -2924
-r . -2438
-r , -2438
-w . -2438
-w , -2438
-Y u -2438
-A v -1949
-A y -1949
-A w -1949
-o . -1949
-o , -1949
-p . -1460
-p , -1460
-e . -1460
-e , -1460
-b . -1460
-b , -1460
-O T -1949
-O V -1460
-O Y -1949
-O . -2438
-O , -2438
-L y -1949
-L O -974
-L G -974
-L C -974
-L Q -974
-P J -1949
-V y -1460
-V u -1460
-V O -1460
-V G -1460
-V C -1460
-V Q -1460
-D T -2438
-D V -1460
-D Y -2438
-D . -2924
-D , -2924
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -485
-F e -485
-F a -485
-c . -1460
-c , -1460
-O A -1460
-O W -974
-L U -974
-R T -1460
-R V -1460
-R Y -1460
-R W -974
-G T -1460
-P o -1460
-P g -1460
-P e -1460
-P a -974
-C A -1460
-C . -1949
-C , -1949
-D A -1460
-D W -974
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-F J -974
-A O -1460
-A G -1460
-A C -1460
-A U -1460
-A Q -1460
-W r -974
-W y -974
-W u -974
-W O -974
-W G -974
-W C -974
-W J -2438
-W Q -974
-J A -1460
-J . -1949
-J , -1949
-U A -1460
-U . -2438
-U , -2438
-Q W -974
-f . -485
-f , -485
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -974
-L e -974
-L q -974
-G V -1460
-G Y -1460
-G W -974
-G . -1460
-G , -1460
-P T -974
-P V -974
-P Y -974
-C T -1460
-C V -1460
-C Y -1460
-D X -1460
-B V -1460
-B X -974
-B A -974
-B W -974
-S . -1949
-S , -1949
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -974
-o x -974
-o w -974
-h v -974
-h y -974
-n v -974
-n y -974
-m v -974
-m y -974
-g . -485
-g , -485
-p v -974
-p y -974
-p x -974
-c v -974
-c y -974
-c w -974
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -974
-e y -974
-b v -974
-b y -974
-b w -974
-s . -974
-s , -974
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-x o -974
-x c -974
-x e -974
-x d -974
-x a -485
-x q -974
-a v -974
-a y -974
-a w -974
-w o -974
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-T S -1460
-L a -485
-L S -974
-G X -974
-G A -974
-P s -485
-P Z -974
-P X -974
-P W -974
-C X -1460
-C W -974
-C J -485
-V S -1460
-S T -1460
-S V -1460
-S Y -1460
-S X -1460
-S A -1460
-S W -974
-Y S -1460
-X a -485
-X u -974
-X S -974
-A t -485
-A c -1460
-A d -974
-A a -485
-A u -974
-A q -974
-A S -974
-W S -974
-K c -1460
-K u -974
-K S -974
-t . -485
-t , -485
-o f -485
-h w -974
-h . -485
-h , -485
-n w -974
-n . -485
-n , -485
-m w -974
-m . -485
-m , -485
-l . -485
-l , -485
-i . -485
-i , -485
-p f -485
-p w -974
-c f -485
-c x -974
-v e -974
-v s -485
-e f -485
-e x -974
-e w -974
-z . -485
-z , -485
-d . -485
-d , -485
-b f -485
-s v -485
-s y -485
-s f -485
-s x -485
-s w -485
-y e -974
-y s -485
-x s -485
-x . -485
-x , -485
-a . -485
-a , -485
-w e -974
-w s -485
-j . -485
-j , -485
-u . -485
-k o -974
-k c -974
-k e -974
-k d -974
-k a -485
-k q -974
-k . -485
-k , -485
-O Z -974
-O J -485
-H . -485
-H , -485
-N . -485
-N , -485
-M . -485
-M , -485
-L . -485
-L , -485
-R . -485
-R , -485
-G Z -974
-I . -485
-I , -485
-C Z -974
-E . -485
-E , -485
-Z o -974
-Z e -974
-Z d -974
-Z s -485
-Z y -974
-Z a -485
-Z w -974
-Z u -974
-Z O -974
-Z G -974
-Z C -974
-Z S -974
-Z Q -974
-Z . -485
-Z , -485
-D Z -974
-D J -485
-B Z -974
-B J -485
-S Z -974
-S J -485
-X . -485
-X , -485
-A s -485
-A . -485
-A , -485
-J J -485
-U J -485
-K a -485
-K . -485
-K , -485
-h f -485
-n f -485
-m f -485
-a f -485
-k s -485
-G J -485
-A f -485
-L cq -6341
-L ' -6341
-T hy -4388
-T - -4388
-T en -4388
-T em -4388
-A cq -2438
-A ' -2438
-hy T -4388
-- T -4388
-en T -4388
-em T -4388
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -1460
-p ' -1460
-c cq -974
-c ' -974
-e cq -1460
-e ' -1460
-b cq -1460
-b ' -1460
-a cq -974
-a ' -974
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -2438
-' d -2438
-s cq -485
-s ' -485
-L hy -974
-L - -974
-L en -974
-L em -974
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -1949
-' s -1949
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-b f -485
-Z hy -974
-Z - -974
-Z en -974
-Z em -974
-cq n -1460
-' n -1460
-cq m -1460
-' m -1460
-cq r -1460
-' r -1460
-cq v -1460
-' v -1460
-charset
-! 8781,18165 2 161057 -- MSL 1 (19U 33)
-dq 13662,18135 2 161058 -- MSL 2 (19U 34)
-" "
-sh 16587,18105 2 161059 -- MSL 3 (19U 35)
-# "
-Do 16587,18750,645 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26346,18720,840 2 161061 -- MSL 5 (19U 37)
-& 20004,18495 2 161062 -- MSL 6 (19U 38)
-cq 8781,18135 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18135,2355 2 161064 -- MSL 9 (19U 40)
-) 8781,18135,2355 2 161065 -- MSL 10 (19U 41)
-* 16587,18495 2 161066 -- MSL 11 (19U 42)
-+ 26346,14940 0 161067 -- MSL 12 (19U 43)
-, 8781,3390,2355 0 161068 -- MSL 13 (19U 44)
-hy 8781,7875 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,3390 0 161070 -- MSL 15 (19U 46)
-sl 8781,18495,885 2 161071 -- MSL 16 (19U 47)
-/ "
-0 16587,18465,360 2 161072 -- MSL 17 (19U 48)
-1 16587,18105 2 161073 -- MSL 18 (19U 49)
-2 16587,18465 2 161074 -- MSL 19 (19U 50)
-3 16587,18465,360 2 161075 -- MSL 20 (19U 51)
-4 16587,18105 2 161076 -- MSL 21 (19U 52)
-5 16587,18105,360 2 161077 -- MSL 22 (19U 53)
-6 16587,18465,360 2 161078 -- MSL 23 (19U 54)
-7 16587,18105 2 161079 -- MSL 24 (19U 55)
-8 16587,18465,360 2 161080 -- MSL 25 (19U 56)
-9 16587,18465,360 2 161081 -- MSL 26 (19U 57)
-: 8781,12627 0 161082 -- MSL 27 (19U 58)
-; 8781,12627,2355 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 26346,10563 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 13662,18315 2 161087 -- MSL 32 (19U 63)
-at 26346,21057,2679 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19515,18135 2 161089 -- MSL 34 (19U 65)
-B 16587,18135 2 161090 -- MSL 35 (19U 66)
-C 18540,18495,360 2 161091 -- MSL 36 (19U 67)
-D 19029,18135 2 161092 -- MSL 37 (19U 68)
-E 15126,18135 2 161093 -- MSL 38 (19U 69)
-F 14637,18135 2 161094 -- MSL 39 (19U 70)
-G 19515,18495,360 2 161095 -- MSL 40 (19U 71)
-H 19029,18135 2 161096 -- MSL 41 (19U 72)
-I 7317,18135 2 161097 -- MSL 42 (19U 73)
-J 14637,18135,360 2 161098 -- MSL 43 (19U 74)
-K 17565,18135 2 161099 -- MSL 44 (19U 75)
-L 14148,18135 2 161100 -- MSL 45 (19U 76)
-M 23907,18135 2 161101 -- MSL 46 (19U 77)
-N 19029,18135 2 161102 -- MSL 47 (19U 78)
-O 20004,18495,360 2 161103 -- MSL 48 (19U 79)
-P 15612,18135 2 161104 -- MSL 49 (19U 80)
-Q 20490,18495,360 2 161105 -- MSL 50 (19U 81)
-R 17076,18135 2 161106 -- MSL 51 (19U 82)
-S 17076,18495,360 2 161107 -- MSL 52 (19U 83)
-T 16587,18135 2 161108 -- MSL 53 (19U 84)
-U 19029,18135,360 2 161109 -- MSL 54 (19U 85)
-V 19029,18135 2 161110 -- MSL 55 (19U 86)
-W 26346,18135 2 161111 -- MSL 56 (19U 87)
-X 19029,18135 2 161112 -- MSL 57 (19U 88)
-Y 18051,18135 2 161113 -- MSL 58 (19U 89)
-Z 16101,18135 2 161114 -- MSL 59 (19U 90)
-lB 8781,18135,2355 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18495,885 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18135,2355 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 8781,18135 2 161169 -- MSL 66 (19U 145)
-` "
-a 14148,12990,360 0 161121 -- MSL 67 (19U 97)
-b 15126,18165,360 2 161122 -- MSL 68 (19U 98)
-c 14148,12990,360 0 161123 -- MSL 69 (19U 99)
-d 15126,18165,360 2 161124 -- MSL 70 (19U 100)
-e 14148,12990,360 0 161125 -- MSL 71 (19U 101)
-f 9759,18315 2 161126 -- MSL 72 (19U 102)
-g 15126,12990,5313 1 161127 -- MSL 73 (19U 103)
-h 15126,18165 2 161128 -- MSL 74 (19U 104)
-i 6342,18165 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995 3 161130 -- MSL 76 (19U 106)
-k 14148,18165 2 161131 -- MSL 77 (19U 107)
-l 6342,18165 2 161132 -- MSL 78 (19U 108)
-m 22932,12990 0 161133 -- MSL 79 (19U 109)
-n 15126,12990 0 161134 -- MSL 80 (19U 110)
-o 15126,12990,360 0 161135 -- MSL 81 (19U 111)
-p 15126,12990,4680 0 161136 -- MSL 82 (19U 112)
-q 15126,12990,4680 0 161137 -- MSL 83 (19U 113)
-r 9270,13005 0 161138 -- MSL 84 (19U 114)
-s 13173,12990,360 0 161139 -- MSL 85 (19U 115)
-t 9759,16110,360 0 161140 -- MSL 86 (19U 116)
-u 15126,12630,360 0 161141 -- MSL 87 (19U 117)
-v 14637,12630 0 161142 -- MSL 88 (19U 118)
-w 22932,12630 0 161143 -- MSL 89 (19U 119)
-x 14637,12630 0 161144 -- MSL 90 (19U 120)
-y 14637,12630,4680 0 161145 -- MSL 91 (19U 121)
-z 12684,12630 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 19515,23130 2 161216 -- MSL 99 (19U 192)
-^A 19515,23130 2 161218 -- MSL 100 (19U 194)
-`E 15126,23130 2 161224 -- MSL 101 (19U 200)
-^E 15126,23130 2 161226 -- MSL 102 (19U 202)
-:E 15126,23040 2 161227 -- MSL 103 (19U 203)
-^I 7317,23130 2 161230 -- MSL 104 (19U 206)
-:I 7317,23040 2 161231 -- MSL 105 (19U 207)
-aa 16587,18090 2 161204 -- MSL 106 (19U 180)
-ga 16587,18090 2 161120 -- MSL 107 (19U 96)
-a^ 16587,18090 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 16587,17910 2 161192 -- MSL 109 (19U 168)
-~ 16587,17946 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,23130,360 2 161241 -- MSL 111 (19U 217)
-^U 19029,23130,360 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 18051,23130 2 161245 -- MSL 114 (19U 221)
-'y 14637,18090,4680 2 161277 -- MSL 115 (19U 253)
-de 16587,18465 2 161200 -- MSL 116 (19U 176)
-,C 18540,18495,5175 3 161223 -- MSL 117 (19U 199)
-,c 14148,12990,5160 1 161255 -- MSL 118 (19U 231)
-~N 19029,23130 2 161233 -- MSL 119 (19U 209)
-~n 15126,17946 2 161265 -- MSL 120 (19U 241)
-r! 8781,12645,5520 1 161185 -- MSL 121 (19U 161)
-r? 13662,12480,5835 1 161215 -- MSL 122 (19U 191)
-Cs 16587,15834 0 161188 -- MSL 123 (19U 164)
-Po 16587,18465 2 161187 -- MSL 124 (19U 163)
-Ye 16587,18105 2 161189 -- MSL 125 (19U 165)
-sc 16587,18495,360 2 161191 -- MSL 126 (19U 167)
-Fn 16587,18315 2 161155 -- MSL 127 (19U 131)
-ct 16587,18750,645 2 161186 -- MSL 128 (19U 162)
-^a 14148,18090,360 2 161250 -- MSL 129 (19U 226)
-^e 14148,18090,360 2 161258 -- MSL 130 (19U 234)
-^o 15126,18090,360 2 161268 -- MSL 131 (19U 244)
-^u 15126,18090,360 2 161275 -- MSL 132 (19U 251)
-'a 14148,18090,360 2 161249 -- MSL 133 (19U 225)
-'e 14148,18090,360 2 161257 -- MSL 134 (19U 233)
-'o 15126,18090,360 2 161267 -- MSL 135 (19U 243)
-'u 15126,18090,360 2 161274 -- MSL 136 (19U 250)
-`a 14148,18090,360 2 161248 -- MSL 137 (19U 224)
-`e 14148,18090,360 2 161256 -- MSL 138 (19U 232)
-`o 15126,18090,360 2 161266 -- MSL 139 (19U 242)
-`u 15126,18090,360 2 161273 -- MSL 140 (19U 249)
-:a 14148,17910,360 2 161252 -- MSL 141 (19U 228)
-:e 14148,17910,360 2 161259 -- MSL 142 (19U 235)
-:o 15126,17910,360 2 161270 -- MSL 143 (19U 246)
-:u 15126,17910,360 2 161276 -- MSL 144 (19U 252)
-oA 19515,25830 2 161221 -- MSL 145 (19U 197)
-^i 6342,18090 2 161262 -- MSL 146 (19U 238)
-/O 20004,18495,366 2 161240 -- MSL 147 (19U 216)
-AE 25857,18135 2 161222 -- MSL 148 (19U 198)
-oa 14148,20100,360 2 161253 -- MSL 149 (19U 229)
-'i 6342,18090 2 161261 -- MSL 150 (19U 237)
-/o 15126,13047,360 0 161272 -- MSL 151 (19U 248)
-ae 22443,12990,360 0 161254 -- MSL 152 (19U 230)
-:A 19515,23040 2 161220 -- MSL 153 (19U 196)
-`i 6342,18090 2 161260 -- MSL 154 (19U 236)
-:O 20004,23040,360 2 161238 -- MSL 155 (19U 214)
-:U 19029,23040,360 2 161244 -- MSL 156 (19U 220)
-'E 15126,23130 2 161225 -- MSL 157 (19U 201)
-:i 6342,17910 2 161263 -- MSL 158 (19U 239)
-ss 16101,17790,360 2 161247 -- MSL 159 (19U 223)
-^O 20004,23130,360 2 161236 -- MSL 160 (19U 212)
-'A 19515,23130 2 161217 -- MSL 161 (19U 193)
-~A 19515,23130 2 161219 -- MSL 162 (19U 195)
-~a 14148,17946,360 2 161251 -- MSL 163 (19U 227)
--D 19029,18135 2 161232 -- MSL 164 (19U 208)
-Sd 15126,18747,360 2 161264 -- MSL 165 (19U 240)
-'I 7317,23130 2 161229 -- MSL 166 (19U 205)
-`I 7317,23130 2 161228 -- MSL 167 (19U 204)
-'O 20004,23130,360 2 161235 -- MSL 168 (19U 211)
-`O 20004,23130,360 2 161234 -- MSL 169 (19U 210)
-~O 20004,23130,360 2 161237 -- MSL 170 (19U 213)
-~o 15126,17946,360 2 161269 -- MSL 171 (19U 245)
-vS 17076,23130,360 2 161162 -- MSL 172 (19U 138)
-vs 13173,18090,360 2 161178 -- MSL 173 (19U 154)
-'U 19029,23130,360 2 161242 -- MSL 174 (19U 218)
-:Y 18051,23040 2 161183 -- MSL 175 (19U 159)
-:y 14637,17910,4680 2 161279 -- MSL 176 (19U 255)
-TP 15612,18135 2 161246 -- MSL 177 (19U 222)
-Tp 15126,18165,4680 2 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680 0 161205 -- MSL 180 (19U 181)
-ps 16590,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 26346,18465,900 2 161214 -- MSL 182 (19U 190)
-\- 26346,8445 0 60096 -- MSL 183 ( 7J 192)
-14 26346,18465,900 2 161212 -- MSL 184 (19U 188)
-12 26346,18465,900 2 161213 -- MSL 185 (19U 189)
-Of 10734,18465 2 161194 -- MSL 186 (19U 170)
-Om 10734,18465 2 161210 -- MSL 187 (19U 186)
-Fo 14637,11250 0 161195 -- MSL 188 (19U 171)
-Fc 14637,11250 0 161211 -- MSL 190 (19U 187)
-t+- 26346,14670 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 26346,11787 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7875 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 10245,18465 2 161202 -- MSL 197 (19U 178)
-S3 10245,18465 2 161203 -- MSL 198 (19U 179)
-ac 16587,0,5160 1 161208 -- MSL 199 (19U 184)
-S1 10245,18345 2 161209 -- MSL 200 (19U 185)
-tmu 26346,14154 0 161239 -- MSL 201 (19U 215)
-tdi 26346,12870 0 161271 -- MSL 202 (19U 247)
-u203C 14637,18165 2 87315 -- MSL 221 (10U 19)
-u20A7 25371,18135,360 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,10740 0 161207 -- MSL 302 (19U 183)
-u013F 14148,18135 2 51943 -- MSL 306 ( 6J 231)
-u0140 10329,18165 2 51959 -- MSL 307 ( 6J 247)
-u2113 16590,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 19029,18135 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18054 2 60101 -- MSL 310 ( 7J 197)
-sd 16587,18054 2 60102 -- MSL 311 ( 7J 198)
-dg 16587,18135 2 161158 -- MSL 312 (19U 134)
-tm 16128,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 16587,18090 2 75169 -- MSL 315 ( 9E 161)
-ao 16587,20100 2 60152 -- MSL 316 ( 7J 248)
-f/ 1464,18465,900 2 60109 -- MSL 324 ( 7J 205)
-em 26346,7650 0 161175 -- MSL 325 (19U 151)
-en 16587,7650 0 161174 -- MSL 326 (19U 150)
-dd 16587,18135 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18135 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 10248,18465 2 87548 -- MSL 332 (10U 252)
-u0111 15126,18165,360 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19515,23130 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 14148,18147,360 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19515,18135,4662 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 14148,12990,4299 0 75193 -- MSL 405 ( 9E 185)
-'C 18540,23130,360 2 75206 -- MSL 406 ( 9E 198)
-'c 14148,18090,360 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18540,23130,360 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 14148,18090,360 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,23130 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 19515,19650,360 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15126,23130 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 14148,18090,360 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15126,18135,4662 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 14148,12990,4299 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14148,23130 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23145 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14148,19650 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10734,19650 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,23130 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15126,18090 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,23130 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15126,18090 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20004,23130,360 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15126,18090,360 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17076,23130 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9270,18090 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17076,23130 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9270,18090 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 17076,23130,360 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13173,18090,360 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,23130 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 12198,19650,360 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,18135,5175 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 9759,16110,5160 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,23130,360 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15126,18090,360 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,25080,360 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15126,20100,360 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,23130 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12684,18090 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,23280 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12684,18405 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,18465 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,18345 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,18345 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,18465 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,18345 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,18465 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,18465 2 51752 -- MSL 1006 ( 6J 40)
-lq 13173,18135 2 161171 -- MSL 1017 (19U 147)
-rq 13173,18135 2 161172 -- MSL 1018 (19U 148)
-Bq 13173,3348,2292 0 161156 -- MSL 1019 (19U 132)
-u2003 26346,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 16587,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26346,3090 0 161157 -- MSL 1028 (19U 133)
-vz 12684,18090 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16128,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 16101,18315 2 60077 -- MSL 1040 ( 7J 173)
-fl 16101,18315 2 60078 -- MSL 1041 ( 7J 174)
-ff 18051,18315 2 51883 -- MSL 1042 ( 6J 171)
-Fi 24396,18315 2 51884 -- MSL 1043 ( 6J 172)
-Fl 24396,18315 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26358,18495,360 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19515,23130,360 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15126,18147,5313 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 17076,18495,5175 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13173,12990,5160 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,23280 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3348,2307 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18720,840 2 161161 -- MSL 1068 (19U 137)
-a- 16587,16950 2 60154 -- MSL 1084 ( 7J 250)
-ab 16587,18147 2 75170 -- MSL 1086 ( 9E 162)
-a. 16587,18405 2 75263 -- MSL 1088 ( 9E 255)
-oe 23907,12990,360 0 161180 -- MSL 1090 (19U 156)
-OE 26346,18270,135 2 161164 -- MSL 1091 (19U 140)
-fo 9759,11277 0 161163 -- MSL 1092 (19U 139)
-fc 9759,11277 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 14148,18135 2 75171 -- MSL 1095 ( 9E 163)
-/l 7320,18165 2 75187 -- MSL 1096 ( 9E 179)
-a" 16587,18090 2 75197 -- MSL 1097 ( 9E 189)
-ho 16587,1197,4299 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23130 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21954,18135,360 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UBI b/contrib/groff/font/devlj4/UBI
deleted file mode 100644
index 53f5ee09e270..000000000000
--- a/contrib/groff/font/devlj4/UBI
+++ /dev/null
@@ -1,748 +0,0 @@
-# Univers BdIt
-name UBI
-spacewidth 8781
-slant 16.750000
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -4388
-P , -4388
-V A -2438
-A V -2924
-T o -3902
-T r -2924
-T c -3413
-T e -3413
-T d -3413
-T s -2924
-T y -3413
-T a -3413
-T w -3413
-T u -2924
-T J -2924
-L T -3413
-L Y -3902
-Y o -3413
-Y e -3413
-Y a -3413
-Y J -2924
-A W -2924
-W A -974
-T A -2924
-V o -1949
-V e -1949
-V a -1949
-Y A -2924
-F A -1949
-F . -1949
-F , -1949
-A T -3413
-A Y -3413
-v . -1949
-v , -1949
-y . -1460
-y , -1460
-T . -2924
-T , -2924
-L W -2924
-P A -1949
-V J -1949
-V . -2438
-V , -2438
-Y . -2924
-Y , -2924
-W o -1460
-W e -974
-W a -974
-W . -974
-W , -974
-r . -1460
-r , -1460
-w . -1460
-w , -1460
-Y u -2438
-A v -1460
-A y -1460
-A w -1460
-o . -974
-o , -974
-p . -974
-p , -974
-e . -974
-e , -974
-b . -974
-b , -974
-O T -2924
-O V -1949
-O Y -1949
-O . -1949
-O , -1949
-L y -1460
-L O -2924
-L G -2924
-L C -2924
-L Q -2924
-P J -1460
-V y -1460
-V u -974
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -2924
-D V -1949
-D Y -1949
-D . -2438
-D , -2438
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -974
-F e -974
-F a -974
-c . -974
-c , -974
-O A -974
-O W -1460
-L U -2438
-R T -974
-R V -974
-R Y -974
-R W -974
-G T -2438
-P o -974
-P g -485
-P e -974
-P a -974
-C A -974
-C . -1460
-C , -1460
-D A -1460
-D W -1460
-B T -2438
-B Y -1949
-B . -485
-B , -485
-F J -974
-A O -1949
-A G -1949
-A C -1949
-A U -1949
-A Q -1949
-W r -485
-W y -974
-W u -485
-W O -485
-W G -485
-W C -485
-W J -974
-W Q -485
-U A -974
-U . -1949
-U , -1949
-Q W -1460
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -1460
-L e -1460
-L q -1460
-G V -1949
-G Y -1949
-G W -1460
-P T -1949
-P V -1949
-P Y -1949
-C T -1949
-C V -1949
-C Y -1949
-D X -1460
-B V -1949
-B X -485
-B A -485
-B W -1460
-S . -974
-S , -974
-F y -485
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -1460
-o x -974
-o w -1460
-h v -485
-h y -974
-n v -485
-n y -974
-m v -485
-m y -974
-p v -485
-p y -974
-p x -974
-c v -485
-c y -974
-c w -974
-v o -974
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -974
-b v -974
-b y -1460
-b w -1460
-y o -974
-y g -485
-y c -974
-y d -974
-y a -974
-y q -974
-x o -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -485
-a y -974
-a w -974
-w o -974
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -974
-L a -974
-L S -1460
-R o -485
-R y -485
-P Z -1460
-P X -1460
-P W -1460
-C X -1460
-C W -1460
-V S -974
-S T -1460
-S V -1460
-S Y -1460
-S X -974
-S A -974
-S W -1460
-Y S -974
-X a -974
-X u -974
-X S -974
-A t -1460
-A c -1460
-A d -974
-A a -974
-A u -974
-A q -1460
-A S -1460
-W S -485
-J y -485
-K c -1460
-K u -974
-K S -974
-o f -485
-h w -974
-n w -974
-m w -974
-r o -485
-p w -974
-c x -974
-v e -485
-e x -974
-e w -974
-b f -485
-s v -485
-s y -974
-s w -974
-y e -974
-f o -485
-w e -485
-k o -974
-k c -485
-k v -485
-k e -485
-k d -485
-k y -485
-k a -485
-k w -485
-k q -485
-O Z -485
-P y -485
-C Z -485
-E o -485
-E v -485
-E y -485
-E w -485
-Z o -974
-Z e -974
-Z d -974
-Z y -485
-Z a -974
-Z w -485
-D Z -974
-D J -485
-B Z -485
-S Z -485
-A s -485
-J o -485
-K a -974
-t o -485
-o t -485
-o g -485
-o z -485
-o j -485
-g o -485
-v y -485
-v w -485
-z o -485
-b t -485
-b g -485
-b z -485
-b j -485
-y v -485
-y y -485
-y w -485
-x v -485
-x y -485
-x w -485
-w v -485
-w y -485
-w w -485
-C o -485
-C y -485
-B o -485
-B y -485
-U o -485
-U v -485
-U y -485
-U w -485
-L cq -6341
-L ' -6341
-T hy -2924
-T - -2924
-T en -2924
-T em -2924
-A cq -2438
-A ' -2438
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -974
-p ' -974
-c cq -1460
-c ' -1460
-e cq -1460
-e ' -1460
-b cq -1460
-b ' -1460
-a cq -1460
-a ' -1460
-V hy -974
-V - -974
-V en -974
-V em -974
-h cq -1460
-h ' -1460
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -2438
-' d -2438
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1949
-A - -1949
-A en -1949
-A em -1949
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -1460
-' s -1460
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-b f -485
-cq n -1460
-' n -1460
-cq m -1460
-' m -1460
-cq r -1460
-' r -1460
-cq v -1949
-' v -1949
-charset
-! 8781,18165,0,2643,33,1012 2 161057 -- MSL 1 (19U 33)
-dq 14148,18135,0,1890,-3296,1012 2 161058 -- MSL 2 (19U 34)
-" "
-sh 16587,18105,0,1677,-98,1012 2 161059 -- MSL 3 (19U 35)
-# "
-Do 16587,18738,630,495,-1427,495 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26346,18720,840,0,-2069 2 161061 -- MSL 5 (19U 37)
-& 20004,18495,360,54,-230,54 2 161062 -- MSL 6 (19U 38)
-cq 8781,18135,0,3414,-2600,1012 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18135,2445,3198,-833,1012 2 161064 -- MSL 9 (19U 40)
-) 8781,18135,2445,180,2184,180 2 161065 -- MSL 10 (19U 41)
-* 16587,18582,0,0,-3290 2 161066 -- MSL 11 (19U 42)
-+ 26346,14940,0,0,-4727 0 161067 -- MSL 12 (19U 43)
-, 8781,3255,2580,0,1794 0 161068 -- MSL 13 (19U 44)
-hy 8781,7737,0,624,270,624 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,3255,0,0,453 0 161070 -- MSL 15 (19U 46)
-sl 8781,18135,1470,4308,2982,1012 2 161071 -- MSL 16 (19U 47)
-/ "
-0 16587,18465,360,1398,-356,1012 2 161072 -- MSL 17 (19U 48)
-1 16587,18105,0,0,-3770 2 161073 -- MSL 18 (19U 49)
-2 16587,18465,0,984,414,984 2 161074 -- MSL 19 (19U 50)
-3 16587,18465,360,1794,363,1012 2 161075 -- MSL 20 (19U 51)
-4 16587,18105,0,1389,1245,1012 2 161076 -- MSL 21 (19U 52)
-5 16587,18105,360,2424,-38,1012 2 161077 -- MSL 22 (19U 53)
-6 16587,18465,360,2316,-344,1012 2 161078 -- MSL 23 (19U 54)
-7 16587,18105,0,1770,-1454,1012 2 161079 -- MSL 24 (19U 55)
-8 16587,18465,360,1776,435,1012 2 161080 -- MSL 25 (19U 56)
-9 16587,18465,360,1464,369,1012 2 161081 -- MSL 26 (19U 57)
-: 8781,12612,0,540,453,540 0 161082 -- MSL 27 (19U 58)
-; 8781,12612,2580,732,1794,732 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 26346,10563,0,0,-5078 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 13662,18315,0,1908,-950,1012 2 161087 -- MSL 32 (19U 63)
-at 26346,21057,2679,1164,-887,1012 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19515,18135,0,0,2535 2 161089 -- MSL 34 (19U 65)
-B 16587,18135,0,1848,1233,1012 2 161090 -- MSL 35 (19U 66)
-C 18540,18495,360,1737,-632,1012 2 161091 -- MSL 36 (19U 67)
-D 19029,18135,0,924,1227,924 2 161092 -- MSL 37 (19U 68)
-E 15126,18135,0,3285,1188,1012 2 161093 -- MSL 38 (19U 69)
-F 14637,18135,0,3723,1200,1012 2 161094 -- MSL 39 (19U 70)
-G 19515,18495,360,1380,-785,1012 2 161095 -- MSL 40 (19U 71)
-H 19029,18135,0,2856,1161,1012 2 161096 -- MSL 41 (19U 72)
-I 7317,18135,0,3219,1521,1012 2 161097 -- MSL 42 (19U 73)
-J 14637,18135,360,3054,1341,1012 2 161098 -- MSL 43 (19U 74)
-K 17565,18135,0,3273,534,1012 2 161099 -- MSL 44 (19U 75)
-L 14148,18135,0,0,1185 2 161100 -- MSL 45 (19U 76)
-M 23907,18135,0,2730,1281,1012 2 161101 -- MSL 46 (19U 77)
-N 19029,18135,0,2883,1248,1012 2 161102 -- MSL 47 (19U 78)
-O 20004,18495,360,969,-704,969 2 161103 -- MSL 48 (19U 79)
-P 15612,18135,0,2871,1203,1012 2 161104 -- MSL 49 (19U 80)
-Q 20490,18495,360,531,-713,531 2 161105 -- MSL 50 (19U 81)
-R 17076,18135,0,2247,1200,1012 2 161106 -- MSL 51 (19U 82)
-S 17076,18495,360,1797,117,1012 2 161107 -- MSL 52 (19U 83)
-T 16587,18135,0,3990,-2165,1012 2 161108 -- MSL 53 (19U 84)
-U 19029,18135,360,2898,-383,1012 2 161109 -- MSL 54 (19U 85)
-V 19029,18135,0,4005,-2603,1012 2 161110 -- MSL 55 (19U 86)
-W 26346,18135,0,3900,-2477,1012 2 161111 -- MSL 56 (19U 87)
-X 19029,18135,0,3222,1893,1012 2 161112 -- MSL 57 (19U 88)
-Y 18051,18135,0,3942,-2615,1012 2 161113 -- MSL 58 (19U 89)
-Z 16101,18135,0,3348,1491,1012 2 161114 -- MSL 59 (19U 90)
-lB 8781,18135,2445,4068,1977,1012 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18135,1470,540,-1631,540 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18135,2445,2919,3126,1012 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,1012 1 161119 -- MSL 64 (19U 95)
-oq 8781,18135,0,2880,-2066,1012 2 161169 -- MSL 66 (19U 145)
-` "
-a 14148,12990,360,651,978,651 0 161121 -- MSL 67 (19U 97)
-b 15126,18165,360,498,1566,498 2 161122 -- MSL 68 (19U 98)
-c 14148,12990,360,903,411,903 0 161123 -- MSL 69 (19U 99)
-d 15126,18165,360,3291,477,1012 2 161124 -- MSL 70 (19U 100)
-e 14148,12990,360,924,600,924 0 161125 -- MSL 71 (19U 101)
-f 9759,18315,0,4158,297,1012 2 161126 -- MSL 72 (19U 102)
-g 15126,12990,5187,1683,2037,1012 1 161127 -- MSL 73 (19U 103)
-h 15126,18165,0,684,1527,684 2 161128 -- MSL 74 (19U 104)
-i 6342,18165,0,3591,1872,1012 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995,3681,5787,1012 3 161130 -- MSL 76 (19U 106)
-k 14148,18165,0,2109,1359,1012 2 161131 -- MSL 77 (19U 107)
-l 6342,18165,0,3579,1839,1012 2 161132 -- MSL 78 (19U 108)
-m 22932,12990,0,609,1551,609 0 161133 -- MSL 79 (19U 109)
-n 15126,12990,0,729,1482,729 0 161134 -- MSL 80 (19U 110)
-o 15126,12990,360,492,465,492 0 161135 -- MSL 81 (19U 111)
-p 15126,12990,4680,531,2868,531 1 161136 -- MSL 82 (19U 112)
-q 15126,12990,4680,1671,471,1012 1 161137 -- MSL 83 (19U 113)
-r 9270,12990,0,2751,1533,1012 0 161138 -- MSL 84 (19U 114)
-s 13173,12990,360,984,1026,984 0 161139 -- MSL 85 (19U 115)
-t 9759,16146,360,2166,-521,1012 0 161140 -- MSL 86 (19U 116)
-u 15126,12630,360,1557,666,1012 0 161141 -- MSL 87 (19U 117)
-v 14637,12630,0,2502,-836,1012 0 161142 -- MSL 88 (19U 118)
-w 22932,12630,0,2004,-1310,1012 0 161143 -- MSL 89 (19U 119)
-x 14637,12630,0,2088,2364,1012 0 161144 -- MSL 90 (19U 120)
-y 14637,12630,4680,2472,-527,1012 1 161145 -- MSL 91 (19U 121)
-z 12684,12630,0,1701,1482,1012 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075,3600,-1355,1012 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075,0,3360 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 19515,23220,0,0,2535 2 161216 -- MSL 99 (19U 192)
-^A 19515,23220,0,0,2535 2 161218 -- MSL 100 (19U 194)
-`E 15126,23220,0,3285,1188,1012 2 161224 -- MSL 101 (19U 200)
-^E 15126,23220,0,3285,1188,1012 2 161226 -- MSL 102 (19U 202)
-:E 15126,22830,0,3285,1188,1012 2 161227 -- MSL 103 (19U 203)
-^I 7317,23220,0,5631,1521,1012 2 161230 -- MSL 104 (19U 206)
-:I 7317,22830,0,6792,1521,1012 2 161231 -- MSL 105 (19U 207)
-aa 16587,18105,0,360,-7358,360 2 161204 -- MSL 106 (19U 180)
-ga 16587,18105,0,0,-6008 2 161120 -- MSL 107 (19U 96)
-a^ 16587,18105,0,0,-4517 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 16587,18180,0,693,-5456,693 2 161192 -- MSL 109 (19U 168)
-~ 16587,17994,0,771,-5168,771 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,23220,360,2898,-383,1012 2 161241 -- MSL 111 (19U 217)
-^U 19029,23220,360,2898,-383,1012 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,1012 2 161199 -- MSL 113 (19U 175)
-'Y 18051,23220,0,3942,-2615,1012 2 161245 -- MSL 114 (19U 221)
-'y 14637,18105,4680,2472,-527,1012 3 161277 -- MSL 115 (19U 253)
-de 16587,18465,0,0,-3641 2 161200 -- MSL 116 (19U 176)
-,C 18540,18495,5409,1737,-632,1012 3 161223 -- MSL 117 (19U 199)
-,c 14148,12990,5046,903,411,903 1 161255 -- MSL 118 (19U 231)
-~N 19029,23124,0,2883,1248,1012 2 161233 -- MSL 119 (19U 209)
-~n 15126,17994,0,1503,1482,1012 2 161265 -- MSL 120 (19U 241)
-r! 8781,12651,5514,432,2244,432 1 161185 -- MSL 121 (19U 161)
-r? 13662,12486,5829,0,1398 1 161215 -- MSL 122 (19U 191)
-Cs 16587,15834,0,753,-773,753 0 161188 -- MSL 123 (19U 164)
-Po 16587,18465,0,2046,663,1012 2 161187 -- MSL 124 (19U 163)
-Ye 16587,18105,0,4872,-29,1012 2 161189 -- MSL 125 (19U 165)
-sc 16587,18495,360,0,-2660 2 161191 -- MSL 126 (19U 167)
-Fn 16587,18315,0,1008,-3098,1008 2 161155 -- MSL 127 (19U 131)
-ct 16587,18750,630,678,-1457,678 2 161186 -- MSL 128 (19U 162)
-^a 14148,18105,360,651,978,651 2 161250 -- MSL 129 (19U 226)
-^e 14148,18105,360,924,600,924 2 161258 -- MSL 130 (19U 234)
-^o 15126,18105,360,492,465,492 2 161268 -- MSL 131 (19U 244)
-^u 15126,18105,360,1557,666,1012 2 161275 -- MSL 132 (19U 251)
-'a 14148,18105,360,1581,978,1012 2 161249 -- MSL 133 (19U 225)
-'e 14148,18105,360,1581,600,1012 2 161257 -- MSL 134 (19U 233)
-'o 15126,18105,360,1092,465,1012 2 161267 -- MSL 135 (19U 243)
-'u 15126,18105,360,1557,666,1012 2 161274 -- MSL 136 (19U 250)
-`a 14148,18105,360,651,978,651 2 161248 -- MSL 137 (19U 224)
-`e 14148,18105,360,924,600,924 2 161256 -- MSL 138 (19U 232)
-`o 15126,18105,360,492,465,492 2 161266 -- MSL 139 (19U 242)
-`u 15126,18105,360,1557,666,1012 2 161273 -- MSL 140 (19U 249)
-:a 14148,18180,360,1914,978,1012 2 161252 -- MSL 141 (19U 228)
-:e 14148,18180,360,1914,600,1012 2 161259 -- MSL 142 (19U 235)
-:o 15126,18180,360,1425,465,1012 2 161270 -- MSL 143 (19U 246)
-:u 15126,18180,360,1557,666,1012 2 161276 -- MSL 144 (19U 252)
-oA 19515,25830,0,0,2535 2 161221 -- MSL 145 (19U 197)
-^i 6342,18105,0,4479,1860,1012 2 161262 -- MSL 146 (19U 238)
-/O 20004,18495,360,2802,1200,1012 2 161240 -- MSL 147 (19U 216)
-AE 25857,18135,0,3294,2781,1012 2 161222 -- MSL 148 (19U 198)
-oa 14148,20100,360,651,978,651 2 161253 -- MSL 149 (19U 229)
-'i 6342,18105,0,5484,1860,1012 2 161261 -- MSL 150 (19U 237)
-/o 15126,12990,360,1764,1686,1012 0 161272 -- MSL 151 (19U 248)
-ae 22443,12990,360,840,906,840 0 161254 -- MSL 152 (19U 230)
-:A 19515,22830,0,693,2535,693 2 161220 -- MSL 153 (19U 196)
-`i 6342,18105,0,2136,1860,1012 2 161260 -- MSL 154 (19U 236)
-:O 20004,22830,360,969,-704,969 2 161238 -- MSL 155 (19U 214)
-:U 19029,22830,360,2898,-383,1012 2 161244 -- MSL 156 (19U 220)
-'E 15126,23220,0,3285,1188,1012 2 161225 -- MSL 157 (19U 201)
-:i 6342,18180,0,5817,1860,1012 2 161263 -- MSL 158 (19U 239)
-ss 16101,18315,360,795,1515,795 2 161247 -- MSL 159 (19U 223)
-^O 20004,23220,360,969,-704,969 2 161236 -- MSL 160 (19U 212)
-'A 19515,23220,0,0,2535 2 161217 -- MSL 161 (19U 193)
-~A 19515,23124,0,1020,2535,1012 2 161219 -- MSL 162 (19U 195)
-~a 14148,17994,360,1992,978,1012 2 161251 -- MSL 163 (19U 227)
--D 19029,18135,0,924,1227,924 2 161232 -- MSL 164 (19U 208)
-Sd 15126,18693,360,492,465,492 2 161264 -- MSL 165 (19U 240)
-'I 7317,23220,0,5907,1521,1012 2 161229 -- MSL 166 (19U 205)
-`I 7317,23220,0,3219,1521,1012 2 161228 -- MSL 167 (19U 204)
-'O 20004,23220,360,969,-704,969 2 161235 -- MSL 168 (19U 211)
-`O 20004,23220,360,969,-704,969 2 161234 -- MSL 169 (19U 210)
-~O 20004,23124,360,969,-704,969 2 161237 -- MSL 170 (19U 213)
-~o 15126,17994,360,1503,465,1012 2 161269 -- MSL 171 (19U 245)
-vS 17076,23220,360,2220,117,1012 2 161162 -- MSL 172 (19U 138)
-vs 13173,18105,360,2985,1026,1012 2 161178 -- MSL 173 (19U 154)
-'U 19029,23220,360,2898,-383,1012 2 161242 -- MSL 174 (19U 218)
-:Y 18051,22830,0,3942,-2615,1012 2 161183 -- MSL 175 (19U 159)
-:y 14637,18180,4680,2472,-527,1012 3 161279 -- MSL 176 (19U 255)
-TP 15612,18135,0,1857,1209,1012 2 161246 -- MSL 177 (19U 222)
-Tp 15126,18165,4680,516,2856,516 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680,1422,2907,1012 1 161205 -- MSL 180 (19U 181)
-ps 16590,19635,4200,0,-2528 2 161206 -- MSL 181 (19U 182)
-34 26346,18465,990,0,-2624 2 161214 -- MSL 182 (19U 190)
-\- 26346,8445,0,0,-4745 0 60096 -- MSL 183 ( 7J 192)
-14 26346,18465,990,0,-2681 2 161212 -- MSL 184 (19U 188)
-12 26346,18465,990,0,-3167 2 161213 -- MSL 185 (19U 189)
-Of 10734,18465,0,2211,-1463,1012 2 161194 -- MSL 186 (19U 170)
-Om 10734,18465,0,2520,-1472,1012 2 161210 -- MSL 187 (19U 186)
-Fo 14637,11115,0,1530,180,1012 0 161195 -- MSL 188 (19U 171)
-Fc 14637,11115,0,243,1467,243 0 161211 -- MSL 190 (19U 187)
-t+- 26346,14670,0,0,-4694 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,4881,-3089,1012 2 161193 -- MSL 193 (19U 169)
-tno 26346,11787,0,0,-4328 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7737,0,624,270,624 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,4881,-3089,1012 2 161198 -- MSL 196 (19U 174)
-S2 10245,18465,0,2217,-932,1012 2 161202 -- MSL 197 (19U 178)
-S3 10245,18465,0,2439,-956,1012 2 161203 -- MSL 198 (19U 179)
-ac 16587,0,5046,0,-1808 1 161208 -- MSL 199 (19U 184)
-S1 10245,18345,0,1083,-2879,1012 2 161209 -- MSL 200 (19U 185)
-tmu 26346,14154,0,0,-5957 0 161239 -- MSL 201 (19U 215)
-tdi 26346,12870,0,0,-4766 0 161271 -- MSL 202 (19U 247)
-u203C 15912,18165,0,2643,33,1012 2 87315 -- MSL 221 (10U 19)
-u20A7 25857,18135,360,2166,1203,1012 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,10692,0,276,-2054,276 0 161207 -- MSL 302 (19U 183)
-u013F 14148,18135,0,1644,1185,1012 2 51943 -- MSL 306 ( 6J 231)
-u0140 11070,18165,0,2091,1839,1012 2 51959 -- MSL 307 ( 6J 247)
-u2113 16590,18045,765,0,-2804 2 60122 -- MSL 308 ( 7J 218)
-u0149 20493,18135,0,729,-1823,729 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18105,0,2145,-2915,1012 2 60101 -- MSL 310 ( 7J 197)
-sd 16587,18105,0,0,-2915 2 60102 -- MSL 311 ( 7J 198)
-dg 16587,18135,0,0,-2717 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,2421,-2957,1012 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,1012 1 60095 -- MSL 314 ( 7J 191)
-ah 16587,18105,0,1278,-6440,1012 2 75169 -- MSL 315 ( 9E 161)
-ao 16587,20100,0,0,-7412 2 60152 -- MSL 316 ( 7J 248)
-f/ 2439,18465,990,9276,7884,1012 2 60109 -- MSL 324 ( 7J 205)
-em 26346,7620,0,0,-2225 0 161175 -- MSL 325 (19U 151)
-en 16587,7620,0,72,-371,72 0 161174 -- MSL 326 (19U 150)
-dd 16587,18135,0,0,-2717 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630,0,1857,1860,1012 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18135,0,2100,-3296,1012 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 10248,18465,0,3501,39,1012 2 87548 -- MSL 332 (10U 252)
-u0111 15126,18165,360,4062,474,1012 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19515,23397,0,672,2535,672 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 14148,18147,360,1842,978,1012 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19515,18135,4686,0,2535 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 14148,12990,4248,651,978,651 0 75193 -- MSL 405 ( 9E 185)
-'C 18540,23220,360,1737,-632,1012 2 75206 -- MSL 406 ( 9E 198)
-'c 14148,18105,360,1581,411,1012 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18540,23220,360,1737,-632,1012 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 14148,18105,360,2823,411,1012 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,23220,0,924,1227,924 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 19515,19650,360,5760,477,1012 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15126,23220,0,3285,1188,1012 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 14148,18105,360,2499,600,1012 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15126,18135,4686,3285,1188,1012 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 14148,12990,4248,924,600,924 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14148,23220,0,243,1185,243 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23160,0,7134,1839,1012 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14148,19650,0,3507,1185,1012 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 10734,19650,0,6051,1839,1012 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,23220,0,2883,1248,1012 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15126,18105,0,1092,1482,1012 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,23220,0,2883,1248,1012 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15126,18105,0,1848,1482,1012 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20004,23220,360,2433,-704,1012 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15126,18105,360,3918,465,1012 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17076,23220,0,2247,1200,1012 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9270,18105,0,4020,1533,1012 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17076,23220,0,2247,1200,1012 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9270,18105,0,4938,1533,1012 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 17076,23220,360,1797,117,1012 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13173,18105,360,2067,1026,1012 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,23220,0,3990,-2165,1012 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 12198,19650,360,5877,-521,1012 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,18135,5409,3990,-1289,1012 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 9759,16146,5046,2166,1605,1012 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,23220,360,3240,-383,1012 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15126,18105,360,3918,666,1012 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,25080,360,2898,-383,1012 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15126,20100,360,1557,666,1012 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,23220,0,3348,1491,1012 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12684,18105,0,2313,1482,1012 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,23157,0,3348,1491,1012 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12684,18222,0,1701,1482,1012 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,18465,0,2238,-1328,1012 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,18345,0,2259,-785,1012 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,18345,0,2859,-1298,1012 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,18465,0,2739,-1358,1012 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,18345,0,2625,-2168,1012 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,18465,0,2544,-1085,1012 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,18465,0,2424,-1079,1012 2 51752 -- MSL 1006 ( 6J 40)
-lq 13173,18135,0,3480,-1523,1012 2 161171 -- MSL 1017 (19U 147)
-rq 13173,18135,0,4002,-2045,1012 2 161172 -- MSL 1018 (19U 148)
-Bq 13173,3234,2241,0,2283 0 161156 -- MSL 1019 (19U 132)
-u2003 26346,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 16587,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26346,3255,0,0,-488 0 161157 -- MSL 1028 (19U 133)
-vz 12684,18105,0,3231,1482,1012 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,3609,-2975,1012 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,462,-1163,462 2 51794 -- MSL 1036 ( 6J 82)
-fi 16101,18315,0,3693,-32,1012 2 60077 -- MSL 1040 ( 7J 173)
-fl 16101,18315,0,3678,-131,1012 2 60078 -- MSL 1041 ( 7J 174)
-ff 18051,18315,0,4557,-113,1012 2 51883 -- MSL 1042 ( 6J 171)
-Fi 24396,18315,0,3795,-125,1012 2 51884 -- MSL 1043 ( 6J 172)
-Fl 24396,18315,0,3666,-41,1012 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995,3681,1872,1012 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26346,18495,360,204,-1595,204 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19515,23397,360,1380,-785,1012 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15126,18147,5187,1683,2037,1012 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 17076,18495,5409,1797,117,1012 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13173,12990,5046,984,1026,984 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,23157,0,4410,1521,1012 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3234,2241,0,1878 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18720,840,696,51,696 2 161161 -- MSL 1068 (19U 137)
-a- 16587,17778,0,102,-5930,102 2 60154 -- MSL 1084 ( 7J 250)
-ab 16587,18147,0,771,-5873,771 2 75170 -- MSL 1086 ( 9E 162)
-a. 16587,18222,0,0,-7886 2 75263 -- MSL 1088 ( 9E 255)
-oe 23907,12990,360,525,258,525 0 161180 -- MSL 1090 (19U 156)
-OE 26346,18270,135,3186,-818,1012 2 161164 -- MSL 1091 (19U 140)
-fo 9759,11142,0,1299,-1028,1012 0 161163 -- MSL 1092 (19U 139)
-fc 9759,11142,0,27,243,27 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 14148,18135,0,0,1692 2 75171 -- MSL 1095 ( 9E 163)
-/l 7320,18165,0,3519,1320,1012 2 75187 -- MSL 1096 ( 9E 179)
-a" 16587,18105,0,3672,-5375,1012 2 75197 -- MSL 1097 ( 9E 189)
-ho 16587,279,4248,0,-6179 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23220,0,3348,1491,1012 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21954,18135,360,3054,1521,1012 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UCB b/contrib/groff/font/devlj4/UCB
deleted file mode 100644
index d2c3c4e1208b..000000000000
--- a/contrib/groff/font/devlj4/UCB
+++ /dev/null
@@ -1,758 +0,0 @@
-# Univers BdCd
-name UCB
-spacewidth 5856
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -4388
-P , -4388
-V A -1949
-A V -1949
-T o -2924
-T r -2924
-T c -2924
-T e -2924
-T d -2924
-T s -2924
-T y -2924
-T a -2924
-T w -2924
-T u -2924
-T J -3413
-L T -2924
-L Y -2924
-Y o -2924
-Y e -2924
-Y a -2438
-Y J -3413
-A W -1460
-W A -1460
-T A -2438
-V o -1460
-V e -1460
-V a -1460
-Y A -2438
-F A -1460
-F . -2924
-F , -2924
-A T -2438
-A Y -2438
-v . -1460
-v , -1460
-y . -1460
-y , -1460
-T . -2924
-T , -2924
-L W -1460
-P A -1460
-V J -1949
-V . -2924
-V , -2924
-Y . -2924
-Y , -2924
-W o -974
-W e -974
-W a -974
-W . -1460
-W , -1460
-r . -1460
-r , -1460
-w . -974
-w , -974
-Y u -1460
-A v -1460
-A y -974
-A w -974
-o . -1460
-o , -1460
-p . -974
-p , -974
-e . -974
-e , -974
-b . -974
-b , -974
-O T -1460
-O V -485
-O Y -1460
-O . -1460
-O , -1460
-L y -974
-L O -1460
-L G -1949
-L C -1460
-L Q -1460
-P J -1949
-V y -485
-V u -485
-V O -485
-V G -485
-V C -485
-V Q -485
-D T -1949
-D V -485
-D Y -1460
-D . -1949
-D , -1949
-Y O -1460
-Y G -1460
-Y C -1460
-Y Q -1460
-F o -974
-F e -974
-F a -974
-c . -974
-c , -974
-O A -974
-O W -485
-L U -1460
-R T -974
-R V -485
-R Y -974
-R W -485
-G T -1460
-P o -1460
-P g -1460
-P e -1460
-P a -974
-C A -974
-C . -1460
-C , -1460
-D A -974
-D W -485
-B T -1460
-B Y -1460
-B . -1460
-B , -1460
-F J -1460
-A O -974
-A G -974
-A C -974
-A U -974
-A Q -974
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -1460
-W Q -485
-J A -974
-J . -1460
-J , -1460
-U A -974
-U . -1460
-U , -1460
-Q W -485
-f . -485
-f , -485
-T O -1460
-T G -1949
-T C -1460
-T Q -1460
-O X -1460
-L o -1460
-L e -1460
-L q -974
-G V -485
-G Y -1460
-G W -485
-P T -974
-P V -485
-P Y -974
-C T -1460
-C V -485
-C Y -1460
-D X -1460
-B V -485
-B X -1460
-B A -974
-B W -485
-S . -974
-S , -974
-X o -1460
-X e -1460
-X y -974
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -974
-A e -974
-K o -1460
-K e -1460
-K y -974
-K w -974
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -485
-o y -485
-o x -485
-o w -485
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-r g -485
-p v -485
-p y -485
-p x -485
-c v -485
-c y -485
-c w -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-b w -485
-s . -485
-s , -485
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-a v -485
-a y -485
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -974
-L a -485
-L S -974
-P s -974
-P Z -974
-P X -974
-P W -485
-C X -1460
-C W -485
-C J -485
-V S -485
-S T -974
-S V -485
-S Y -974
-S X -974
-S A -974
-S W -485
-Y S -974
-X a -485
-X u -974
-X S -974
-A t -974
-A c -974
-A d -974
-A a -485
-A u -974
-A q -974
-A S -974
-W S -485
-K c -1460
-K u -974
-K S -974
-o f -485
-h w -485
-n w -485
-m w -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-p f -485
-p w -485
-c f -485
-c x -485
-v e -485
-v s -485
-e f -485
-e x -485
-e w -485
-b f -485
-s v -485
-s y -485
-s f -485
-s x -485
-s w -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-w e -485
-w s -485
-k o -974
-k c -974
-k e -974
-k d -974
-k a -485
-k q -974
-O Z -485
-O J -485
-L J -485
-C Z -485
-E J -485
-Z o -1460
-Z e -1460
-Z d -974
-Z s -974
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z J -485
-Z Q -485
-D Z -485
-D J -485
-B Z -485
-B J -485
-S Z -485
-S J -485
-X J -485
-A s -974
-A J -485
-J J -485
-U J -485
-K a -485
-K J -485
-h f -485
-n f -485
-m f -485
-r s -485
-a f -485
-k s -974
-R J -485
-G J -485
-A f -485
-L cq -4388
-L ' -4388
-T hy -2924
-T - -2924
-T en -2924
-T em -2924
-A cq -1460
-A ' -1460
-hy T -2924
-- T -2924
-en T -2924
-em T -2924
-Y hy -1460
-Y - -1460
-Y en -1460
-Y em -1460
-p cq -1460
-p ' -1460
-c cq -974
-c ' -974
-e cq -1460
-e ' -1460
-b cq -1460
-b ' -1460
-a cq -974
-a ' -974
-V hy -485
-V - -485
-V en -485
-V em -485
-h cq -974
-h ' -974
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -974
-' d -974
-s cq -974
-s ' -974
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -974
-A - -974
-A en -974
-A em -974
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -974
-' s -974
-hy X -1460
-- X -1460
-hy A -974
-- A -974
-en X -1460
-en A -974
-em X -1460
-b f -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-charset
-! 7806,18135 2 161057 -- MSL 1 (19U 33)
-dq 10734,18135 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12684,18360,825 2 161059 -- MSL 3 (19U 35)
-# "
-Do 12684,18705,765 2 161060 -- MSL 4 (19U 36)
-$ "
-% 17565,18765,900 2 161061 -- MSL 5 (19U 37)
-& 16587,18390,255 2 161062 -- MSL 6 (19U 38)
-cq 5856,18135 2 161170 -- MSL 8 (19U 146)
-' "
-( 5856,18135,2430 2 161064 -- MSL 9 (19U 40)
-) 5856,18135,2430 2 161065 -- MSL 10 (19U 41)
-* 12684,18495 2 161066 -- MSL 11 (19U 42)
-+ 17565,12810 0 161067 -- MSL 12 (19U 43)
-, 5856,3465,2430 0 161068 -- MSL 13 (19U 44)
-hy 5856,7710 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,3330 0 161070 -- MSL 15 (19U 46)
-sl 5856,18165,2430 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12684,18360,255 2 161072 -- MSL 17 (19U 48)
-1 12684,18105 2 161073 -- MSL 18 (19U 49)
-2 12684,18360 2 161074 -- MSL 19 (19U 50)
-3 12684,18360,255 2 161075 -- MSL 20 (19U 51)
-4 12684,18105 2 161076 -- MSL 21 (19U 52)
-5 12684,18105,255 2 161077 -- MSL 22 (19U 53)
-6 12684,18360,255 2 161078 -- MSL 23 (19U 54)
-7 12684,18105 2 161079 -- MSL 24 (19U 55)
-8 12684,18360,255 2 161080 -- MSL 25 (19U 56)
-9 12684,18360,255 2 161081 -- MSL 26 (19U 57)
-: 5856,12378 0 161082 -- MSL 27 (19U 58)
-; 5856,12378,2430 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 17565,9792 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 11709,18390 2 161087 -- MSL 32 (19U 63)
-at 17565,18357,3219 2 161088 -- MSL 33 (19U 64)
-@ "
-A 14637,18135 2 161089 -- MSL 34 (19U 65)
-B 14148,18135 2 161090 -- MSL 35 (19U 66)
-C 13662,18390,255 2 161091 -- MSL 36 (19U 67)
-D 14637,18135 2 161092 -- MSL 37 (19U 68)
-E 12198,18135 2 161093 -- MSL 38 (19U 69)
-F 11709,18135 2 161094 -- MSL 39 (19U 70)
-G 14637,18390,255 2 161095 -- MSL 40 (19U 71)
-H 14637,18135 2 161096 -- MSL 41 (19U 72)
-I 6831,18135 2 161097 -- MSL 42 (19U 73)
-J 12684,18135,255 2 161098 -- MSL 43 (19U 74)
-K 14148,18135 2 161099 -- MSL 44 (19U 75)
-L 11220,18135 2 161100 -- MSL 45 (19U 76)
-M 19515,18135 2 161101 -- MSL 46 (19U 77)
-N 15126,18135 2 161102 -- MSL 47 (19U 78)
-O 14637,18390,255 2 161103 -- MSL 48 (19U 79)
-P 13662,18135 2 161104 -- MSL 49 (19U 80)
-Q 15126,18390,255 2 161105 -- MSL 50 (19U 81)
-R 13662,18135 2 161106 -- MSL 51 (19U 82)
-S 14148,18390,255 2 161107 -- MSL 52 (19U 83)
-T 13173,18135 2 161108 -- MSL 53 (19U 84)
-U 14637,18135,255 2 161109 -- MSL 54 (19U 85)
-V 13662,18135 2 161110 -- MSL 55 (19U 86)
-W 20490,18135 2 161111 -- MSL 56 (19U 87)
-X 14637,18135 2 161112 -- MSL 57 (19U 88)
-Y 13662,18135 2 161113 -- MSL 58 (19U 89)
-Z 12198,18135 2 161114 -- MSL 59 (19U 90)
-lB 5856,18135,2430 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 5856,18165,2430 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5856,18135,2430 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 5856,18135 2 161169 -- MSL 66 (19U 145)
-` "
-a 11709,12885,255 0 161121 -- MSL 67 (19U 97)
-b 11709,18165,255 2 161122 -- MSL 68 (19U 98)
-c 10734,12885,255 0 161123 -- MSL 69 (19U 99)
-d 11709,18165,255 2 161124 -- MSL 70 (19U 100)
-e 11220,12885,255 0 161125 -- MSL 71 (19U 101)
-f 8295,18315 2 161126 -- MSL 72 (19U 102)
-g 11709,12885,4995 1 161127 -- MSL 73 (19U 103)
-h 12198,18165 2 161128 -- MSL 74 (19U 104)
-i 6342,18165 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995 3 161130 -- MSL 76 (19U 106)
-k 11709,18165 2 161131 -- MSL 77 (19U 107)
-l 6342,18165 2 161132 -- MSL 78 (19U 108)
-m 17565,12885 0 161133 -- MSL 79 (19U 109)
-n 12198,12885 0 161134 -- MSL 80 (19U 110)
-o 11709,12885,255 0 161135 -- MSL 81 (19U 111)
-p 11709,12885,4995 1 161136 -- MSL 82 (19U 112)
-q 11709,12885,4995 1 161137 -- MSL 83 (19U 113)
-r 8781,12885 0 161138 -- MSL 84 (19U 114)
-s 10734,12885,255 0 161139 -- MSL 85 (19U 115)
-t 8295,16086,255 0 161140 -- MSL 86 (19U 116)
-u 12198,12630,255 0 161141 -- MSL 87 (19U 117)
-v 11709,12630 0 161142 -- MSL 88 (19U 118)
-w 18540,12630 0 161143 -- MSL 89 (19U 119)
-x 11709,12630 0 161144 -- MSL 90 (19U 120)
-y 11709,12630,4680 1 161145 -- MSL 91 (19U 121)
-z 9759,12630 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435 0 161150 -- MSL 96 (19U 126)
-`A 14637,23130 2 161216 -- MSL 99 (19U 192)
-^A 14637,23130 2 161218 -- MSL 100 (19U 194)
-`E 12198,23130 2 161224 -- MSL 101 (19U 200)
-^E 12198,23130 2 161226 -- MSL 102 (19U 202)
-:E 12198,22815 2 161227 -- MSL 103 (19U 203)
-^I 6831,23130 2 161230 -- MSL 104 (19U 206)
-:I 6831,22815 2 161231 -- MSL 105 (19U 207)
-aa 12684,18285 2 161204 -- MSL 106 (19U 180)
-ga 12684,18285 2 161120 -- MSL 107 (19U 96)
-a^ 12684,18285 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12684,18225 2 161192 -- MSL 109 (19U 168)
-~ 12684,17874 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 14637,23130,255 2 161241 -- MSL 111 (19U 217)
-^U 14637,23130,255 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 13662,23130 2 161245 -- MSL 114 (19U 221)
-'y 11709,18285,4680 3 161277 -- MSL 115 (19U 253)
-de 12684,18360 2 161200 -- MSL 116 (19U 176)
-,C 13662,18390,5580 3 161223 -- MSL 117 (19U 199)
-,c 10734,12885,5190 1 161255 -- MSL 118 (19U 231)
-~N 15126,23031 2 161233 -- MSL 119 (19U 209)
-~n 12198,17874 2 161265 -- MSL 120 (19U 241)
-r! 7806,12630,5505 1 161185 -- MSL 121 (19U 161)
-r? 11709,12576,5814 1 161215 -- MSL 122 (19U 191)
-Cs 12684,15834 0 161188 -- MSL 123 (19U 164)
-Po 12684,18360 2 161187 -- MSL 124 (19U 163)
-Ye 12684,18105 2 161189 -- MSL 125 (19U 165)
-sc 12684,18495,600 2 161191 -- MSL 126 (19U 167)
-Fn 12684,18315 2 161155 -- MSL 127 (19U 131)
-ct 12684,18705,765 2 161186 -- MSL 128 (19U 162)
-^a 11709,18285,255 2 161250 -- MSL 129 (19U 226)
-^e 11220,18285,255 2 161258 -- MSL 130 (19U 234)
-^o 11709,18285,255 2 161268 -- MSL 131 (19U 244)
-^u 12198,18285,255 2 161275 -- MSL 132 (19U 251)
-'a 11709,18285,255 2 161249 -- MSL 133 (19U 225)
-'e 11220,18285,255 2 161257 -- MSL 134 (19U 233)
-'o 11709,18285,255 2 161267 -- MSL 135 (19U 243)
-'u 12198,18285,255 2 161274 -- MSL 136 (19U 250)
-`a 11709,18285,255 2 161248 -- MSL 137 (19U 224)
-`e 11220,18285,255 2 161256 -- MSL 138 (19U 232)
-`o 11709,18285,255 2 161266 -- MSL 139 (19U 242)
-`u 12198,18285,255 2 161273 -- MSL 140 (19U 249)
-:a 11709,18225,255 2 161252 -- MSL 141 (19U 228)
-:e 11220,18225,255 2 161259 -- MSL 142 (19U 235)
-:o 11709,18225,255 2 161270 -- MSL 143 (19U 246)
-:u 12198,18225,255 2 161276 -- MSL 144 (19U 252)
-oA 14637,25080 2 161221 -- MSL 145 (19U 197)
-^i 6342,18285 2 161262 -- MSL 146 (19U 238)
-/O 14637,19890,2019 2 161240 -- MSL 147 (19U 216)
-AE 20490,18135 2 161222 -- MSL 148 (19U 198)
-oa 11709,19455,255 2 161253 -- MSL 149 (19U 229)
-'i 6342,18285 2 161261 -- MSL 150 (19U 237)
-/o 11709,14256,2172 0 161272 -- MSL 151 (19U 248)
-ae 17565,12885,255 0 161254 -- MSL 152 (19U 230)
-:A 14637,22815 2 161220 -- MSL 153 (19U 196)
-`i 6342,18285 2 161260 -- MSL 154 (19U 236)
-:O 14637,22815,255 2 161238 -- MSL 155 (19U 214)
-:U 14637,22815,255 2 161244 -- MSL 156 (19U 220)
-'E 12198,23130 2 161225 -- MSL 157 (19U 201)
-:i 6342,18225 2 161263 -- MSL 158 (19U 239)
-ss 13173,18315,255 2 161247 -- MSL 159 (19U 223)
-^O 14637,23130,255 2 161236 -- MSL 160 (19U 212)
-'A 14637,23130 2 161217 -- MSL 161 (19U 193)
-~A 14637,23031 2 161219 -- MSL 162 (19U 195)
-~a 11709,17874,255 2 161251 -- MSL 163 (19U 227)
--D 14637,18135 2 161232 -- MSL 164 (19U 208)
-Sd 11709,18573,255 2 161264 -- MSL 165 (19U 240)
-'I 6831,23130 2 161229 -- MSL 166 (19U 205)
-`I 6831,23130 2 161228 -- MSL 167 (19U 204)
-'O 14637,23130,255 2 161235 -- MSL 168 (19U 211)
-`O 14637,23130,255 2 161234 -- MSL 169 (19U 210)
-~O 14637,23031,255 2 161237 -- MSL 170 (19U 213)
-~o 11709,17874,255 2 161269 -- MSL 171 (19U 245)
-vS 14148,23130,255 2 161162 -- MSL 172 (19U 138)
-vs 10734,18285,255 2 161178 -- MSL 173 (19U 154)
-'U 14637,23130,255 2 161242 -- MSL 174 (19U 218)
-:Y 13662,22815 2 161183 -- MSL 175 (19U 159)
-:y 11709,18225,4680 3 161279 -- MSL 176 (19U 255)
-TP 13662,18135 2 161246 -- MSL 177 (19U 222)
-Tp 11709,18165,4995 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680 1 161205 -- MSL 180 (19U 181)
-ps 12684,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 17565,18765,900 2 161214 -- MSL 182 (19U 190)
-\- 17565,7740 0 60096 -- MSL 183 ( 7J 192)
-14 17565,18765,900 2 161212 -- MSL 184 (19U 188)
-12 17565,18765,900 2 161213 -- MSL 185 (19U 189)
-Of 10734,18360 2 161194 -- MSL 186 (19U 170)
-Om 10734,18360 2 161210 -- MSL 187 (19U 186)
-Fo 11709,11070 0 161195 -- MSL 188 (19U 171)
-Fc 11709,11070 0 161211 -- MSL 190 (19U 187)
-t+- 17565,12810,2520 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 17565,10320 0 161196 -- MSL 194 (19U 172)
-u00AD 5856,7710 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 8295,18465 2 161202 -- MSL 197 (19U 178)
-S3 8295,18465 2 161203 -- MSL 198 (19U 179)
-ac 12684,0,5190 1 161208 -- MSL 199 (19U 184)
-S1 8295,18345 2 161209 -- MSL 200 (19U 185)
-tmu 17565,12345 0 161239 -- MSL 201 (19U 215)
-tdi 17565,12015 0 161271 -- MSL 202 (19U 247)
-u203C 13173,18135 2 87315 -- MSL 221 (10U 19)
-u20A7 20979,18135,255 2 60121 -- MSL 232 ( 7J 217)
-pc 5856,10251 0 161207 -- MSL 302 (19U 183)
-u013F 11220,18135 2 51943 -- MSL 306 ( 6J 231)
-u0140 9270,18165 2 51959 -- MSL 307 ( 6J 247)
-u2113 12684,18045,765 2 60122 -- MSL 308 ( 7J 218)
-u0149 15612,18135 2 51951 -- MSL 309 ( 6J 239)
-fm 5856,18105 2 60101 -- MSL 310 ( 7J 197)
-sd 12684,18105 2 60102 -- MSL 311 ( 7J 198)
-dg 12684,18135 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 12684,18285 2 75169 -- MSL 315 ( 9E 161)
-ao 12684,19455 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,18765,900 2 60109 -- MSL 324 ( 7J 205)
-em 17565,7530 0 161175 -- MSL 325 (19U 151)
-en 12684,7530 0 161174 -- MSL 326 (19U 150)
-dd 12684,18135 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630 0 46333 -- MSL 328 ( 5T 253)
-aq 5856,18135 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 8295,18465 2 87548 -- MSL 332 (10U 252)
-u0111 11709,18165,255 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 14637,23298 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 11709,18285,255 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 14637,18135,4860 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 11709,12885,4335 0 75193 -- MSL 405 ( 9E 185)
-'C 13662,23130,255 2 75206 -- MSL 406 ( 9E 198)
-'c 10734,18285,255 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13662,23130,255 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 10734,18285,255 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 14637,23130 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 14637,18165,255 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 12198,23130 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11220,18285,255 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 12198,18135,4860 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11220,12885,4335 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 11220,23130 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23745 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 11220,18165 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,18165 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15126,23130 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 12198,18285 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15126,23130 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 12198,18285 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 14637,23130,255 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 11709,18285,255 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13662,23130 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 8781,18285 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13662,23130 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 8781,18285 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,23130,255 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10734,18285,255 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13173,23130 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9759,18165,255 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13173,18135,5580 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8295,16086,5190 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 14637,23130,255 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 12198,18285,255 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 14637,25080,255 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 12198,19455,255 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 12198,23130 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 9759,18285 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 12198,22920 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 9759,18345 2 75199 -- MSL 485 ( 9E 191)
-u2070 8295,18465 2 51753 -- MSL 1000 ( 6J 41)
-u2074 8295,18345 2 51748 -- MSL 1001 ( 6J 36)
-u2075 8295,18345 2 51749 -- MSL 1002 ( 6J 37)
-u2076 8295,18465 2 51806 -- MSL 1003 ( 6J 94)
-u2077 8295,18345 2 51750 -- MSL 1004 ( 6J 38)
-u2078 8295,18465 2 51754 -- MSL 1005 ( 6J 42)
-u2079 8295,18465 2 51752 -- MSL 1006 ( 6J 40)
-lq 10245,18135 2 161171 -- MSL 1017 (19U 147)
-rq 10245,18135 2 161172 -- MSL 1018 (19U 148)
-Bq 10245,3513,2382 0 161156 -- MSL 1019 (19U 132)
-u2003 17565,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12684,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 17565,3210 0 161157 -- MSL 1028 (19U 133)
-vz 9759,18285 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 14148,18315 2 60077 -- MSL 1040 ( 7J 173)
-fl 14148,18315 2 60078 -- MSL 1041 ( 7J 174)
-ff 15126,18315 2 51883 -- MSL 1042 ( 6J 171)
-Fi 20979,18315 2 51884 -- MSL 1043 ( 6J 172)
-Fl 20979,18315 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995 3 60134 -- MSL 1047 ( 7J 230)
-u2105 20979,18390,255 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 14637,23298,255 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 11709,18285,4995 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,18390,5580 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10734,12885,5190 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 6831,22920 2 46301 -- MSL 1065 ( 5T 221)
-bq 5856,3513,2382 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18765,900 2 161161 -- MSL 1068 (19U 137)
-a- 12684,17595 2 60154 -- MSL 1084 ( 7J 250)
-ab 12684,18285 2 75170 -- MSL 1086 ( 9E 162)
-a. 12684,18345 2 75263 -- MSL 1088 ( 9E 255)
-oe 17565,12885,255 0 161180 -- MSL 1090 (19U 156)
-OE 20490,18270,135 2 161164 -- MSL 1091 (19U 140)
-fo 6342,11070 0 161163 -- MSL 1092 (19U 139)
-fc 6342,11070 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 11709,18135 2 75171 -- MSL 1095 ( 9E 163)
-/l 6831,18165 2 75187 -- MSL 1096 ( 9E 179)
-a" 12684,18285 2 75197 -- MSL 1097 ( 9E 189)
-ho 12684,300,4335 0 75186 -- MSL 1098 ( 9E 178)
-vZ 12198,23130 2 75150 -- MSL 1106 ( 9E 142)
-IJ 18540,18135,255 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UCBI b/contrib/groff/font/devlj4/UCBI
deleted file mode 100644
index 1373e84a9945..000000000000
--- a/contrib/groff/font/devlj4/UCBI
+++ /dev/null
@@ -1,666 +0,0 @@
-# Univers BdCdIt
-name UCBI
-spacewidth 5856
-slant 16.500000
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 5
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -4388
-P , -4388
-V A -1460
-A V -1949
-T o -2438
-T r -1949
-T c -2438
-T e -2438
-T d -2438
-T s -1949
-T y -1949
-T a -2438
-T w -1949
-T u -1949
-T J -1949
-L T -2438
-L Y -2924
-Y o -1949
-Y e -1460
-Y a -1460
-Y J -1949
-A W -1460
-W A -974
-T A -1949
-V o -974
-V e -974
-V a -974
-Y A -1949
-F A -974
-F . -3413
-F , -3413
-A T -2438
-A Y -2438
-v . -974
-v , -974
-y . -974
-y , -974
-T . -1949
-T , -1949
-L W -1460
-P A -1460
-V J -974
-V . -1949
-V , -1949
-Y . -1949
-Y , -1949
-W o -974
-W e -974
-W a -974
-W . -974
-W , -974
-r . -1460
-r , -1460
-w . -974
-w , -974
-Y u -974
-A v -485
-A y -974
-A w -485
-o . -974
-o , -974
-p . -974
-p , -974
-e . -485
-e , -485
-b . -974
-b , -974
-O T -1949
-O V -485
-O Y -974
-O . -1460
-O , -1460
-L y -1460
-L O -1949
-L G -1949
-L C -1949
-L Q -1949
-P J -1460
-V y -485
-V u -485
-V O -485
-V G -485
-V C -485
-V Q -485
-D T -1460
-D V -485
-D Y -974
-D . -1949
-D , -1949
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -485
-F e -485
-F a -485
-c . -485
-c , -485
-O A -485
-O W -485
-L U -1460
-R T -1460
-R V -485
-R Y -974
-R W -485
-G T -1460
-P o -974
-P g -485
-P e -485
-P a -485
-C A -485
-C . -1460
-C , -1460
-D A -485
-D W -485
-B T -1949
-B Y -974
-B . -485
-B , -485
-F J -485
-A O -485
-A G -485
-A C -485
-A U -485
-A Q -485
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -974
-W Q -485
-U A -485
-U . -974
-U , -974
-Q W -485
-T O -1460
-T G -1460
-T C -1460
-T Q -1460
-O X -974
-L o -1460
-L e -1460
-L q -1460
-G V -485
-G Y -974
-G W -485
-P T -1460
-P V -485
-P Y -974
-C T -1949
-C V -485
-C Y -974
-D X -974
-B V -485
-B X -485
-B A -485
-B W -485
-S . -485
-S , -485
-X o -974
-X e -974
-X y -974
-X O -974
-X G -974
-X C -974
-X Q -974
-A o -485
-A e -485
-K o -974
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o y -485
-o x -974
-h y -485
-n y -485
-m y -485
-r g -485
-p y -485
-p x -974
-c y -485
-e y -485
-b y -485
-x o -974
-x c -974
-x e -485
-x d -974
-x a -485
-x q -974
-a y -485
-T S -485
-L a -485
-L S -974
-P Z -485
-P X -974
-P W -485
-C X -974
-C W -485
-V S -485
-S T -974
-S V -485
-S Y -974
-S X -485
-S A -485
-S W -485
-Y S -485
-X a -485
-X u -974
-X S -485
-A t -485
-A c -485
-A d -485
-A a -485
-A u -485
-A q -485
-A S -485
-W S -485
-K c -974
-K u -974
-K S -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-c x -485
-e x -485
-s y -485
-k o -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-O Z -485
-C Z -485
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-A s -485
-K a -485
-L cq -3902
-L ' -3902
-T hy -1949
-T - -1949
-T en -1949
-T em -1949
-A cq -1460
-A ' -1460
-hy T -2438
-- T -2438
-en T -2438
-em T -2438
-Y hy -974
-Y - -974
-Y en -974
-Y em -974
-p cq -974
-p ' -974
-c cq -974
-c ' -974
-e cq -1460
-e ' -1460
-b cq -1460
-b ' -1460
-a cq -974
-a ' -974
-V hy -485
-V - -485
-V en -485
-V em -485
-h cq -1460
-h ' -1460
-n cq -974
-n ' -974
-m cq -974
-m ' -974
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -974
-' d -974
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -974
-X - -974
-X en -974
-X em -974
-A hy -485
-A - -485
-A en -485
-A em -485
-K hy -974
-K - -974
-K en -974
-K em -974
-hy X -974
-- X -974
-hy A -485
-- A -485
-en X -974
-en A -485
-em X -974
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-charset
-! 7806,18135,0,2628,993,994 2 161057 -- MSL 1 (19U 33)
-dq 10734,18135,0,3669,-2132,994 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12684,18360,825,2676,684,994 2 161059 -- MSL 3 (19U 35)
-# "
-Do 12684,18840,570,1326,-290,994 2 161060 -- MSL 4 (19U 36)
-$ "
-% 17565,18465,1050,1386,228,994 2 161061 -- MSL 5 (19U 37)
-& 16587,18390,255,609,471,609 2 161062 -- MSL 6 (19U 38)
-cq 5856,18135,0,4215,-1391,994 2 161170 -- MSL 8 (19U 146)
-' "
-( 5856,18135,2430,4416,744,994 2 161064 -- MSL 9 (19U 40)
-) 5856,18135,2430,1812,3348,994 2 161065 -- MSL 10 (19U 41)
-* 12684,18390,0,1635,-3464,994 2 161066 -- MSL 11 (19U 42)
-+ 17565,12810,0,0,-1430 0 161067 -- MSL 12 (19U 43)
-, 5856,3465,2370,0,3042 0 161068 -- MSL 13 (19U 44)
-hy 5856,7785,0,726,585,726 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,3465,0,0,1917 0 161070 -- MSL 15 (19U 46)
-sl 5856,18165,2430,4518,3396,994 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12684,18360,255,2343,627,994 2 161072 -- MSL 17 (19U 48)
-1 12684,18105,0,1020,-2306,994 2 161073 -- MSL 18 (19U 49)
-2 12684,18360,0,2235,1779,994 2 161074 -- MSL 19 (19U 50)
-3 12684,18360,255,2184,687,994 2 161075 -- MSL 20 (19U 51)
-4 12684,18105,0,2082,1284,994 2 161076 -- MSL 21 (19U 52)
-5 12684,18105,255,2490,525,994 2 161077 -- MSL 22 (19U 53)
-6 12684,18360,255,2397,546,994 2 161078 -- MSL 23 (19U 54)
-7 12684,18105,0,3309,315,994 2 161079 -- MSL 24 (19U 55)
-8 12684,18360,255,2274,600,994 2 161080 -- MSL 25 (19U 56)
-9 12684,18360,255,2289,819,994 2 161081 -- MSL 26 (19U 57)
-: 5856,12570,0,1947,1917,994 0 161082 -- MSL 27 (19U 58)
-; 5856,12570,2370,1836,3042,994 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 17565,9792,0,0,-1454 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 11709,18390,0,2205,-737,994 2 161087 -- MSL 32 (19U 63)
-at 17565,18372,3231,2163,1152,994 2 161088 -- MSL 33 (19U 64)
-@ "
-A 14637,18135,0,0,2460 2 161089 -- MSL 34 (19U 65)
-B 14148,18135,0,1668,1362,994 2 161090 -- MSL 35 (19U 66)
-C 13662,18390,255,2247,375,994 2 161091 -- MSL 36 (19U 67)
-D 14637,18135,0,1851,1398,994 2 161092 -- MSL 37 (19U 68)
-E 12198,18135,0,3423,1440,994 2 161093 -- MSL 38 (19U 69)
-F 11709,18135,0,3855,1584,994 2 161094 -- MSL 39 (19U 70)
-G 14637,18390,255,1926,117,994 2 161095 -- MSL 40 (19U 71)
-H 14637,18135,0,3243,1542,994 2 161096 -- MSL 41 (19U 72)
-I 6831,18135,0,3342,1641,994 2 161097 -- MSL 42 (19U 73)
-J 12684,18135,255,3231,1059,994 2 161098 -- MSL 43 (19U 74)
-K 14148,18135,0,3366,1374,994 2 161099 -- MSL 44 (19U 75)
-L 11220,18135,0,0,1488 2 161100 -- MSL 45 (19U 76)
-M 19515,18135,0,2958,1551,994 2 161101 -- MSL 46 (19U 77)
-N 15126,18135,0,3003,1431,994 2 161102 -- MSL 47 (19U 78)
-O 14637,18390,255,1872,204,994 2 161103 -- MSL 48 (19U 79)
-P 13662,18135,0,2412,1506,994 2 161104 -- MSL 49 (19U 80)
-Q 15126,18390,255,1449,189,994 2 161105 -- MSL 50 (19U 81)
-R 13662,18135,0,1968,1545,994 2 161106 -- MSL 51 (19U 82)
-S 14148,18390,255,2079,495,994 2 161107 -- MSL 52 (19U 83)
-T 13173,18135,0,3891,-1553,994 2 161108 -- MSL 53 (19U 84)
-U 14637,18135,255,3147,72,994 2 161109 -- MSL 54 (19U 85)
-V 13662,18135,0,4206,-1619,994 2 161110 -- MSL 55 (19U 86)
-W 20490,18135,0,3927,-698,994 2 161111 -- MSL 56 (19U 87)
-X 14637,18135,0,3828,2505,994 2 161112 -- MSL 57 (19U 88)
-Y 13662,18135,0,4230,-1766,994 2 161113 -- MSL 58 (19U 89)
-Z 12198,18135,0,3639,2217,994 2 161114 -- MSL 59 (19U 90)
-lB 5856,18135,2430,4086,2592,994 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8295,18165,2430,534,-1679,534 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5856,18135,2430,3555,3123,994 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,994 1 161119 -- MSL 64 (19U 95)
-oq 5856,18135,0,3957,-1133,994 2 161169 -- MSL 66 (19U 145)
-` "
-a 11709,12885,255,999,1161,994 0 161121 -- MSL 67 (19U 97)
-b 11709,18165,255,1164,1920,994 2 161122 -- MSL 68 (19U 98)
-c 10734,12885,255,1290,990,994 0 161123 -- MSL 69 (19U 99)
-d 11709,18165,255,3657,1038,994 2 161124 -- MSL 70 (19U 100)
-e 11220,12885,255,1140,1023,994 0 161125 -- MSL 71 (19U 101)
-f 8295,18315,0,4233,960,994 2 161126 -- MSL 72 (19U 102)
-g 11709,12885,4995,2007,2487,994 1 161127 -- MSL 73 (19U 103)
-h 12198,18165,0,987,1677,987 2 161128 -- MSL 74 (19U 104)
-i 6342,18165,0,3393,1722,994 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995,3432,4620,994 3 161130 -- MSL 76 (19U 106)
-k 11709,18165,0,2241,1605,994 2 161131 -- MSL 77 (19U 107)
-l 6342,18165,0,3426,1746,994 2 161132 -- MSL 78 (19U 108)
-m 17565,12885,0,1053,1842,994 0 161133 -- MSL 79 (19U 109)
-n 12198,12885,0,915,1734,915 0 161134 -- MSL 80 (19U 110)
-o 11709,12885,255,990,927,990 0 161135 -- MSL 81 (19U 111)
-p 11709,12885,4680,1098,3417,994 1 161136 -- MSL 82 (19U 112)
-q 11709,12885,4680,1926,1122,994 1 161137 -- MSL 83 (19U 113)
-r 8781,12885,0,2637,1686,994 0 161138 -- MSL 84 (19U 114)
-s 10734,12885,255,1116,1380,994 0 161139 -- MSL 85 (19U 115)
-t 8295,15693,255,2280,354,994 0 161140 -- MSL 86 (19U 116)
-u 12198,12630,255,1764,849,994 0 161141 -- MSL 87 (19U 117)
-v 11709,12630,0,2337,-545,994 0 161142 -- MSL 88 (19U 118)
-w 18540,12630,0,2337,-170,994 0 161143 -- MSL 89 (19U 119)
-x 11709,12630,0,2193,2526,994 0 161144 -- MSL 90 (19U 120)
-y 11709,12630,4680,2457,1983,994 1 161145 -- MSL 91 (19U 121)
-z 9759,12630,0,1977,2220,994 0 161146 -- MSL 92 (19U 122)
-{ 13173,20130,6075,3150,-905,994 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 13173,20130,6075,0,3510 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,9435,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 14637,23100,0,0,2460 2 161216 -- MSL 99 (19U 192)
-^A 14637,23100,0,1626,2460,994 2 161218 -- MSL 100 (19U 194)
-`E 12198,23100,0,3423,1440,994 2 161224 -- MSL 101 (19U 200)
-^E 12198,23100,0,3423,1440,994 2 161226 -- MSL 102 (19U 202)
-:E 12198,23265,0,3948,1440,994 2 161227 -- MSL 103 (19U 203)
-^I 6831,23100,0,5529,1641,994 2 161230 -- MSL 104 (19U 206)
-:I 6831,23265,0,6630,1641,994 2 161231 -- MSL 105 (19U 207)
-aa 12684,18225,0,1785,-5264,994 2 161204 -- MSL 106 (19U 180)
-ga 12684,18225,0,0,-5270 2 161120 -- MSL 107 (19U 96)
-a^ 12684,18225,0,702,-3896,702 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12684,18120,0,2067,-3989,994 2 161192 -- MSL 109 (19U 168)
-~ 12684,17811,0,1560,-3785,994 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 14637,23100,255,3147,72,994 2 161241 -- MSL 111 (19U 217)
-^U 14637,23100,255,3147,72,994 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,994 2 161199 -- MSL 113 (19U 175)
-'Y 13662,23100,0,4230,-1766,994 2 161245 -- MSL 114 (19U 221)
-'y 11709,18225,4680,2457,1983,994 3 161277 -- MSL 115 (19U 253)
-de 12684,18360,0,1377,-3200,994 2 161200 -- MSL 116 (19U 176)
-,C 13662,18390,5295,2247,375,994 3 161223 -- MSL 117 (19U 199)
-,c 10734,12885,5205,1290,1419,994 1 161255 -- MSL 118 (19U 231)
-~N 15126,22833,0,3003,1431,994 2 161233 -- MSL 119 (19U 209)
-~n 12198,17811,0,1803,1734,994 2 161265 -- MSL 120 (19U 241)
-r! 7806,12615,5520,936,2685,936 1 161185 -- MSL 121 (19U 161)
-r? 11709,12600,5790,0,2256 1 161215 -- MSL 122 (19U 191)
-Cs 12684,15834,0,2757,1125,994 0 161188 -- MSL 123 (19U 164)
-Po 12684,18360,0,2571,1257,994 2 161187 -- MSL 124 (19U 163)
-Ye 12684,18105,0,4791,834,994 2 161189 -- MSL 125 (19U 165)
-sc 12684,18390,255,174,-1544,174 2 161191 -- MSL 126 (19U 167)
-Fn 12684,18315,0,2196,-1391,994 2 161155 -- MSL 127 (19U 131)
-ct 12684,18840,570,1299,-635,994 2 161186 -- MSL 128 (19U 162)
-^a 11709,18225,255,1188,1161,994 2 161250 -- MSL 129 (19U 226)
-^e 11220,18225,255,1434,1023,994 2 161258 -- MSL 130 (19U 234)
-^o 11709,18225,255,1188,927,994 2 161268 -- MSL 131 (19U 244)
-^u 12198,18225,255,1764,849,994 2 161275 -- MSL 132 (19U 251)
-'a 11709,18225,255,2271,1161,994 2 161249 -- MSL 133 (19U 225)
-'e 11220,18225,255,2517,1023,994 2 161257 -- MSL 134 (19U 233)
-'o 11709,18225,255,2271,927,994 2 161267 -- MSL 135 (19U 243)
-'u 12198,18225,255,2028,849,994 2 161274 -- MSL 136 (19U 250)
-`a 11709,18225,255,999,1161,994 2 161248 -- MSL 137 (19U 224)
-`e 11220,18225,255,1140,1023,994 2 161256 -- MSL 138 (19U 232)
-`o 11709,18225,255,990,927,990 2 161266 -- MSL 139 (19U 242)
-`u 12198,18225,255,1764,849,994 2 161273 -- MSL 140 (19U 249)
-:a 11709,18120,255,2553,1161,994 2 161252 -- MSL 141 (19U 228)
-:e 11220,18120,255,2799,1023,994 2 161259 -- MSL 142 (19U 235)
-:o 11709,18120,255,2553,927,994 2 161270 -- MSL 143 (19U 246)
-:u 12198,18120,255,2310,849,994 2 161276 -- MSL 144 (19U 252)
-oA 14637,25164,0,1713,2460,994 2 161221 -- MSL 145 (19U 197)
-^i 6342,18225,0,3873,1713,994 2 161262 -- MSL 146 (19U 238)
-/O 14637,19854,1755,1872,204,994 2 161240 -- MSL 147 (19U 216)
-AE 20490,18135,0,2688,3147,994 2 161222 -- MSL 148 (19U 198)
-oa 11709,19089,255,1488,1161,994 2 161253 -- MSL 149 (19U 229)
-'i 6342,18225,0,5760,1713,994 2 161261 -- MSL 150 (19U 237)
-/o 11709,14208,1830,993,927,993 0 161272 -- MSL 151 (19U 248)
-ae 17565,12885,255,924,966,924 0 161254 -- MSL 152 (19U 230)
-:A 14637,23265,0,2727,2460,994 2 161220 -- MSL 153 (19U 196)
-`i 6342,18225,0,2367,1713,994 2 161260 -- MSL 154 (19U 236)
-:O 14637,23265,255,2727,204,994 2 161238 -- MSL 155 (19U 214)
-:U 14637,23265,255,3147,72,994 2 161244 -- MSL 156 (19U 220)
-'E 12198,23100,0,3660,1440,994 2 161225 -- MSL 157 (19U 201)
-:i 6342,18120,0,5238,1713,994 2 161263 -- MSL 158 (19U 239)
-ss 13173,18165,0,1956,1704,994 2 161247 -- MSL 159 (19U 223)
-^O 14637,23100,255,1872,204,994 2 161236 -- MSL 160 (19U 212)
-'A 14637,23100,0,2439,2460,994 2 161217 -- MSL 161 (19U 193)
-~A 14637,22833,0,2379,2460,994 2 161219 -- MSL 162 (19U 195)
-~a 11709,17811,255,2046,1161,994 2 161251 -- MSL 163 (19U 227)
--D 14637,18135,0,1851,1398,994 2 161232 -- MSL 164 (19U 208)
-Sd 11709,18756,255,1419,936,994 2 161264 -- MSL 165 (19U 240)
-'I 6831,23100,0,6342,1641,994 2 161229 -- MSL 166 (19U 205)
-`I 6831,23100,0,3732,1641,994 2 161228 -- MSL 167 (19U 204)
-'O 14637,23100,255,2439,204,994 2 161235 -- MSL 168 (19U 211)
-`O 14637,23100,255,1872,204,994 2 161234 -- MSL 169 (19U 210)
-~O 14637,22833,255,2379,204,994 2 161237 -- MSL 170 (19U 213)
-~o 11709,17811,255,2046,927,994 2 161269 -- MSL 171 (19U 245)
-vS 14148,23100,255,2754,495,994 2 161162 -- MSL 172 (19U 138)
-vs 10734,18225,255,2754,1380,994 2 161178 -- MSL 173 (19U 154)
-'U 14637,23100,255,3147,72,994 2 161242 -- MSL 174 (19U 218)
-:Y 13662,23265,0,4230,-1766,994 2 161183 -- MSL 175 (19U 159)
-:y 11709,18120,4680,2553,1983,994 3 161279 -- MSL 176 (19U 255)
-TP 13662,18135,0,1518,1470,994 2 161246 -- MSL 177 (19U 222)
-Tp 11709,18165,4680,1098,3417,994 3 161278 -- MSL 178 (19U 254)
-mc 15612,12630,4680,1422,2907,994 1 161205 -- MSL 180 (19U 181)
-ps 12684,19635,4200,2046,-1214,994 2 161206 -- MSL 181 (19U 182)
-34 17565,18465,1050,1788,-173,994 2 161214 -- MSL 182 (19U 190)
-\- 17565,7740,0,0,-1454 0 60096 -- MSL 183 ( 7J 192)
-14 17565,18345,1050,639,975,639 2 161212 -- MSL 184 (19U 188)
-12 17565,18345,1050,165,1449,165 2 161213 -- MSL 185 (19U 189)
-Of 10734,18360,0,1965,-2321,994 2 161194 -- MSL 186 (19U 170)
-Om 10734,18360,0,1956,-2495,994 2 161210 -- MSL 187 (19U 186)
-Fo 11709,10965,0,1749,306,994 0 161195 -- MSL 188 (19U 171)
-Fc 11709,10965,0,219,1836,219 0 161211 -- MSL 190 (19U 187)
-t+- 17565,12810,2520,0,-1430 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,4629,-2837,994 2 161193 -- MSL 193 (19U 169)
-tno 17565,10320,0,0,-1454 0 161196 -- MSL 194 (19U 172)
-u00AD 5856,7785,0,726,585,726 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,4629,-2837,994 2 161198 -- MSL 196 (19U 174)
-S2 8295,18465,0,2814,-431,994 2 161202 -- MSL 197 (19U 178)
-S3 8295,18465,0,2817,-1046,994 2 161203 -- MSL 198 (19U 179)
-ac 12684,0,5205,0,444 1 161208 -- MSL 199 (19U 184)
-S1 8295,18345,0,1920,-2585,994 2 161209 -- MSL 200 (19U 185)
-tmu 17565,12345,0,0,-2447 0 161239 -- MSL 201 (19U 215)
-tdi 17565,12015,0,0,-1445 0 161271 -- MSL 202 (19U 247)
-u203C 13662,18135,0,2628,990,994 2 87315 -- MSL 221 (10U 19)
-u20A7 21954,18135,255,2283,1506,994 2 60121 -- MSL 232 ( 7J 217)
-pc 5856,10671,0,1371,-188,994 0 161207 -- MSL 302 (19U 183)
-u013F 11220,18135,0,2700,1488,994 2 51943 -- MSL 306 ( 6J 231)
-u0140 9270,18165,0,3120,1746,994 2 51959 -- MSL 307 ( 6J 247)
-u2113 17562,18045,765,0,-3065 2 60122 -- MSL 308 ( 7J 218)
-u0149 15615,18135,0,915,-452,915 2 51951 -- MSL 309 ( 6J 239)
-fm 5856,18105,0,3432,-2123,994 2 60101 -- MSL 310 ( 7J 197)
-sd 12684,18105,0,1554,-2123,994 2 60102 -- MSL 311 ( 7J 198)
-dg 12684,18135,0,318,-1352,318 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,2169,-2705,994 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,994 1 60095 -- MSL 314 ( 7J 191)
-ah 12684,18225,0,1779,-4973,994 2 75169 -- MSL 315 ( 9E 161)
-ao 12684,19089,0,1002,-4802,994 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,18345,1050,8775,7476,994 2 60109 -- MSL 324 ( 7J 205)
-em 17565,7605,0,426,354,426 0 161175 -- MSL 325 (19U 151)
-en 12684,7605,0,753,546,753 0 161174 -- MSL 326 (19U 150)
-dd 12684,18135,0,399,-1433,399 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630,0,1770,1713,994 0 46333 -- MSL 328 ( 5T 253)
-aq 5856,18135,0,3546,-2132,994 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 8295,18465,0,3612,90,994 2 87548 -- MSL 332 (10U 252)
-u0111 11709,18165,255,4527,1038,994 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 14637,23205,0,1980,2460,994 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 11709,18195,255,2160,1161,994 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 14637,18135,4956,0,2460 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 11709,12885,4755,999,1161,994 1 75193 -- MSL 405 ( 9E 185)
-'C 13662,23100,255,3378,375,994 2 75206 -- MSL 406 ( 9E 198)
-'c 10734,18225,255,2910,990,994 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13662,23100,255,2997,375,994 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 10734,18225,255,2754,990,994 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 14637,23100,0,1851,1398,994 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 15126,18165,255,4908,1038,994 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 12198,23100,0,3939,1440,994 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 11220,18225,255,2511,1023,994 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 12198,18135,4956,3423,1440,994 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 11220,12885,4755,1140,1023,994 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 11220,23100,0,2889,1488,994 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23685,0,7113,1746,994 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 11220,18165,0,3954,1488,994 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 9270,18165,0,5064,1746,994 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 15126,23100,0,3003,1431,994 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 12198,18225,0,2028,1734,994 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 15126,23100,0,3003,1431,994 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 12198,18225,0,2022,1734,994 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 14637,23100,255,4542,204,994 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 11709,18225,255,4101,927,994 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13662,23100,0,2928,1545,994 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 8781,18225,0,4185,1686,994 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13662,23100,0,2997,1545,994 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 8781,18225,0,4179,1686,994 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 14148,23100,255,2910,495,994 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 10734,18225,255,2895,1380,994 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 13173,23100,0,3891,-1553,994 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 9759,18165,255,4995,354,994 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 13173,18135,5295,3891,609,994 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 8295,15693,5205,2280,2040,994 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 14637,23100,255,4722,72,994 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 12198,18225,255,4308,849,994 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 14637,25164,255,3147,72,994 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 12198,19089,255,1764,849,994 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 12198,23100,0,3660,2217,994 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 9759,18225,0,3246,2220,994 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 12198,23265,0,3639,2217,994 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 9759,18120,0,1977,2220,994 2 75199 -- MSL 485 ( 9E 191)
-u2070 8295,18465,0,2832,-1037,994 2 51753 -- MSL 1000 ( 6J 41)
-u2074 8295,18345,0,2883,-743,994 2 51748 -- MSL 1001 ( 6J 36)
-u2075 8295,18345,0,3312,-1241,994 2 51749 -- MSL 1002 ( 6J 37)
-u2076 8295,18465,0,3012,-1421,994 2 51806 -- MSL 1003 ( 6J 94)
-u2077 8295,18345,0,3186,-1427,994 2 51750 -- MSL 1004 ( 6J 38)
-u2078 8295,18465,0,2895,-1160,994 2 51754 -- MSL 1005 ( 6J 42)
-u2079 8295,18465,0,2748,-1034,994 2 51752 -- MSL 1006 ( 6J 40)
-lq 10245,18135,0,3945,-1130,994 2 161171 -- MSL 1017 (19U 147)
-rq 10245,18135,0,4314,-1499,994 2 161172 -- MSL 1018 (19U 148)
-Bq 10245,3459,2376,0,3000 0 161156 -- MSL 1019 (19U 132)
-u2003 17565,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12684,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 17565,3105,0,0,756 0 161157 -- MSL 1028 (19U 133)
-vz 9759,18225,0,3240,2220,994 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,3354,-2720,994 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,537,-1238,537 2 51794 -- MSL 1036 ( 6J 82)
-fi 14148,18315,0,3318,981,994 2 60077 -- MSL 1040 ( 7J 173)
-fl 14148,18315,0,3378,978,994 2 60078 -- MSL 1041 ( 7J 174)
-ff 15126,18315,0,4389,963,994 2 51883 -- MSL 1042 ( 6J 171)
-Fi 20979,18315,0,3477,981,994 2 51884 -- MSL 1043 ( 6J 172)
-Fl 20979,18315,0,3537,978,994 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995,3432,1722,994 3 60134 -- MSL 1047 ( 7J 230)
-u2105 21468,18390,255,324,-1499,324 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 14637,23205,255,2310,117,994 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 11709,18195,4995,2160,2487,994 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 14148,18390,5295,2079,495,994 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 10734,12885,5205,1116,1419,994 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 6831,23265,0,4509,1641,994 2 46301 -- MSL 1065 ( 5T 221)
-bq 5856,3459,2376,57,2766,57 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18465,1050,450,-200,450 2 161161 -- MSL 1068 (19U 137)
-a- 12684,16386,0,927,-4565,927 0 60154 -- MSL 1084 ( 7J 250)
-ab 12684,18195,0,1674,-4343,994 2 75170 -- MSL 1086 ( 9E 162)
-a. 12684,18120,0,0,-5504 2 75263 -- MSL 1088 ( 9E 255)
-oe 17565,12885,255,903,948,903 0 161180 -- MSL 1090 (19U 156)
-OE 20490,18270,135,2994,153,994 2 161164 -- MSL 1091 (19U 140)
-fo 6342,10965,0,1878,399,994 0 161163 -- MSL 1092 (19U 139)
-fc 6342,10965,0,453,1824,453 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 13173,18135,0,951,96,951 2 75171 -- MSL 1095 ( 9E 163)
-/l 8781,18165,0,2745,807,994 2 75187 -- MSL 1096 ( 9E 179)
-a" 12684,18225,0,4065,-4166,994 2 75197 -- MSL 1097 ( 9E 189)
-ho 12684,918,4755,0,-2396 1 75186 -- MSL 1098 ( 9E 178)
-vZ 12198,23100,0,3729,2217,994 2 75150 -- MSL 1106 ( 9E 142)
-IJ 19515,18135,255,3231,1641,994 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UCI b/contrib/groff/font/devlj4/UCI
deleted file mode 100644
index f8b40d2f319e..000000000000
--- a/contrib/groff/font/devlj4/UCI
+++ /dev/null
@@ -1,806 +0,0 @@
-# Univers MdCdIt
-name UCI
-spacewidth 5856
-slant 16.500000
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 5
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2924
-P . -5363
-P , -5363
-V A -1949
-A V -1949
-T o -3413
-T r -3413
-T c -3413
-T e -3413
-T d -3413
-T s -3902
-T y -3413
-T a -3413
-T w -3413
-T u -3413
-T J -3413
-L T -3413
-L Y -2924
-Y o -2924
-Y e -2924
-Y a -2438
-Y J -2924
-A W -1949
-W A -1949
-T A -2924
-V o -1949
-V e -1949
-V a -1460
-Y A -2924
-F A -1460
-F . -3902
-F , -3902
-A T -2924
-A Y -2924
-v . -1949
-v , -1949
-y . -2438
-y , -2438
-T . -3413
-T , -3413
-L W -1949
-P A -1460
-V J -1949
-V . -2924
-V , -2924
-Y . -2924
-Y , -2924
-W o -1460
-W e -1460
-W a -1460
-W . -1949
-W , -1949
-r . -1460
-r , -1460
-w . -1949
-w , -1949
-Y u -1460
-A v -974
-A y -974
-A w -974
-o . -485
-o , -485
-p . -485
-p , -485
-e . -485
-e , -485
-b . -485
-b , -485
-O T -1460
-O V -485
-O Y -1460
-O . -974
-O , -974
-L y -2438
-L O -1460
-L G -1460
-L C -1460
-L Q -1460
-P J -1949
-V y -485
-V u -485
-V O -485
-V G -485
-V C -485
-V Q -485
-D T -1460
-D V -485
-D Y -1460
-D . -974
-D , -974
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -974
-F e -974
-F a -974
-c . -485
-c , -485
-O A -485
-O W -485
-L U -1460
-R T -1460
-R V -485
-R Y -1460
-R W -485
-G T -1460
-P o -1460
-P g -1460
-P e -1460
-P a -974
-C A -974
-C . -974
-C , -974
-D A -485
-D W -485
-B T -1460
-B Y -1460
-B . -974
-B , -974
-F J -974
-A O -485
-A G -485
-A C -485
-A U -485
-A Q -485
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -1460
-W Q -485
-J A -485
-J . -1460
-J , -1460
-U A -485
-U . -974
-U , -974
-Q W -485
-f . -974
-f , -974
-T O -974
-T G -974
-T C -974
-T Q -974
-O X -485
-L o -1949
-L e -1949
-L q -1949
-G V -485
-G Y -1460
-G W -485
-P T -1460
-P V -485
-P Y -1460
-C T -1460
-C V -974
-C Y -1460
-D X -485
-B V -485
-B X -485
-B A -485
-B W -485
-S . -485
-S , -485
-X o -485
-X e -485
-X y -485
-X O -485
-X G -485
-X C -485
-X Q -485
-A o -485
-A e -485
-K o -974
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o x -485
-o w -485
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-r g -485
-p v -485
-p y -485
-p x -485
-c v -485
-c y -485
-c w -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-b w -485
-s . -485
-s , -485
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-f g -485
-x o -485
-x g -485
-x c -485
-x e -485
-x d -485
-x a -485
-x q -485
-a v -485
-a y -485
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T i -485
-T S -485
-L a -1460
-L S -974
-P s -485
-P Z -485
-P X -485
-P W -485
-C X -974
-C W -974
-C J -485
-V i -485
-V S -485
-S T -974
-S V -485
-S Y -974
-S X -485
-S A -485
-S W -485
-Y i -485
-Y S -485
-X a -485
-X u -485
-X S -485
-A t -485
-A g -485
-A c -485
-A d -485
-A a -485
-A u -485
-A q -485
-A S -485
-W i -485
-W S -485
-K c -974
-K u -974
-K S -485
-h w -485
-n w -485
-m w -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-p w -485
-c x -485
-v e -485
-v s -974
-e x -485
-e w -485
-s v -485
-s y -485
-s x -485
-s w -485
-y e -485
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-w e -485
-w s -485
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-O Z -485
-L J -974
-C Z -974
-Z o -485
-Z e -485
-Z d -485
-Z s -974
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z J -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-X J -485
-A s -974
-A J -485
-K a -974
-K J -974
-t s -485
-r s -485
-g s -485
-v t -485
-v h -485
-v n -485
-v m -485
-v r -485
-v i -485
-v p -485
-v z -485
-v b -485
-v y -485
-v f -485
-v x -485
-v w -485
-v j -485
-v u -485
-v k -485
-z s -485
-k s -485
-C t -485
-C o -485
-C h -485
-C l -485
-C r -485
-C i -485
-C e -485
-C y -485
-C a -485
-C u -485
-C O -485
-C H -485
-C N -485
-C M -485
-C L -485
-C R -485
-C G -485
-C I -485
-C P -485
-C C -485
-C E -485
-C D -485
-C B -485
-C S -485
-C F -485
-C U -485
-C Q -485
-C K -485
-E s -485
-U s -485
-L cq -3413
-L ' -3413
-T hy -3413
-T - -3413
-T en -3413
-T em -3413
-A cq -1460
-A ' -1460
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -1460
-Y - -1460
-Y en -1460
-Y em -1460
-p cq -1949
-p ' -1949
-c cq -1949
-c ' -1949
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-a cq -1949
-a ' -1949
-V hy -485
-V - -485
-V en -485
-V em -485
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-m cq -1460
-m ' -1460
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -485
-' d -485
-s cq -974
-s ' -974
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -485
-X - -485
-X en -485
-X em -485
-A hy -485
-A - -485
-A en -485
-A em -485
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -485
-' s -485
-hy X -485
-- X -485
-hy A -485
-- A -485
-en X -485
-en A -485
-em X -485
-v cq -485
-v ' -485
-C cq -485
-C ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-v hy -485
-v - -485
-v en -485
-v em -485
-C hy -485
-C - -485
-C en -485
-C em -485
-charset
-! 7806,18135,0,2241,591,996 2 161057 -- MSL 1 (19U 33)
-dq 9759,18135,0,3060,-2390,996 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12198,18360,975,1389,3,996 2 161059 -- MSL 3 (19U 35)
-# "
-Do 12198,18465,630,843,-734,843 2 161060 -- MSL 4 (19U 36)
-$ "
-% 17565,18675,975,576,-671,576 2 161061 -- MSL 5 (19U 37)
-& 16101,18390,255,210,177,210 2 161062 -- MSL 6 (19U 38)
-cq 5856,18135,0,3690,-1481,996 2 161170 -- MSL 8 (19U 146)
-' "
-( 5856,18135,2325,3999,699,996 2 161064 -- MSL 9 (19U 40)
-) 5856,18135,2325,1524,3174,996 2 161065 -- MSL 10 (19U 41)
-* 12198,18390,0,1251,-3044,996 2 161066 -- MSL 11 (19U 42)
-+ 17565,12495,0,0,-2096 0 161067 -- MSL 12 (19U 43)
-, 5856,2970,2730,0,2856 0 161068 -- MSL 13 (19U 44)
-hy 5856,7560,0,534,348,534 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,2970,0,0,1347 0 161070 -- MSL 15 (19U 46)
-sl 5856,18165,1980,4254,3456,996 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12198,18360,255,2505,636,996 2 161072 -- MSL 17 (19U 48)
-1 12198,18105,0,309,-2084,309 2 161073 -- MSL 18 (19U 49)
-2 12198,18360,0,1968,1710,996 2 161074 -- MSL 19 (19U 50)
-3 12198,18360,255,2127,735,996 2 161075 -- MSL 20 (19U 51)
-4 12198,18105,0,3057,699,996 2 161076 -- MSL 21 (19U 52)
-5 12198,18105,255,3717,123,996 2 161077 -- MSL 22 (19U 53)
-6 12198,18360,255,3078,21,996 2 161078 -- MSL 23 (19U 54)
-7 12198,18105,0,3684,138,996 2 161079 -- MSL 24 (19U 55)
-8 12198,18360,255,3024,132,996 2 161080 -- MSL 25 (19U 56)
-9 12198,18360,255,2850,480,996 2 161081 -- MSL 26 (19U 57)
-: 5856,12621,0,1656,1347,996 0 161082 -- MSL 27 (19U 58)
-; 5856,12621,2730,1737,2856,996 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 17565,9375,0,0,-2114 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 11220,18390,0,2100,-608,996 2 161087 -- MSL 32 (19U 63)
-at 17565,18357,3849,1746,1029,996 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13662,18135,0,0,2325 2 161089 -- MSL 34 (19U 65)
-B 13173,18135,0,1743,1536,996 2 161090 -- MSL 35 (19U 66)
-C 13173,18390,255,1860,513,996 2 161091 -- MSL 36 (19U 67)
-D 13662,18135,0,1749,1557,996 2 161092 -- MSL 37 (19U 68)
-E 11220,18135,0,3267,1563,996 2 161093 -- MSL 38 (19U 69)
-F 10734,18135,0,3414,1449,996 2 161094 -- MSL 39 (19U 70)
-G 13662,18390,255,1893,333,996 2 161095 -- MSL 40 (19U 71)
-H 13662,18135,0,2958,1509,996 2 161096 -- MSL 41 (19U 72)
-I 5856,18135,0,3066,1566,996 2 161097 -- MSL 42 (19U 73)
-J 11220,18135,255,2781,1866,996 2 161098 -- MSL 43 (19U 74)
-K 13173,18135,0,2982,1341,996 2 161099 -- MSL 44 (19U 75)
-L 10245,18135,0,0,1506 2 161100 -- MSL 45 (19U 76)
-M 18051,18135,0,2886,1590,996 2 161101 -- MSL 46 (19U 77)
-N 14148,18135,0,3030,1638,996 2 161102 -- MSL 47 (19U 78)
-O 13662,18390,255,1875,447,996 2 161103 -- MSL 48 (19U 79)
-P 12198,18135,0,2514,1401,996 2 161104 -- MSL 49 (19U 80)
-Q 13662,18390,255,1773,495,996 2 161105 -- MSL 50 (19U 81)
-R 13173,18135,0,2247,1515,996 2 161106 -- MSL 51 (19U 82)
-S 12684,18390,255,2274,978,996 2 161107 -- MSL 52 (19U 83)
-T 12684,18135,0,3735,-1889,996 2 161108 -- MSL 53 (19U 84)
-U 13662,18135,255,2892,363,996 2 161109 -- MSL 54 (19U 85)
-V 12198,18135,0,4140,-1262,996 2 161110 -- MSL 55 (19U 86)
-W 18051,18135,0,3870,-1208,996 2 161111 -- MSL 56 (19U 87)
-X 13662,18135,0,3108,2223,996 2 161112 -- MSL 57 (19U 88)
-Y 12198,18135,0,4026,-1472,996 2 161113 -- MSL 58 (19U 89)
-Z 12198,18135,0,3390,2130,996 2 161114 -- MSL 59 (19U 90)
-lB 5856,18135,2325,4227,2679,996 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 7806,18165,1980,420,-1229,420 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5856,18135,2325,3114,3792,996 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,996 1 161119 -- MSL 64 (19U 95)
-oq 5856,18135,0,3690,-1481,996 2 161169 -- MSL 66 (19U 145)
-` "
-a 10734,12885,255,918,1242,918 0 161121 -- MSL 67 (19U 97)
-b 10734,18165,255,1200,1791,996 2 161122 -- MSL 68 (19U 98)
-c 10245,12885,255,1047,816,996 0 161123 -- MSL 69 (19U 99)
-d 10734,18165,255,3501,1155,996 2 161124 -- MSL 70 (19U 100)
-e 10245,12885,255,1245,1065,996 0 161125 -- MSL 71 (19U 101)
-f 7806,18315,0,3972,753,996 2 161126 -- MSL 72 (19U 102)
-g 10734,12885,4995,1737,2589,996 1 161127 -- MSL 73 (19U 103)
-h 10734,18165,0,1167,1812,996 2 161128 -- MSL 74 (19U 104)
-i 4878,18165,0,3690,1905,996 2 161129 -- MSL 75 (19U 105)
-j 4878,18165,4995,3777,5010,996 3 161130 -- MSL 76 (19U 106)
-k 10734,18165,0,2250,1443,996 2 161131 -- MSL 77 (19U 107)
-l 4878,18165,0,3627,1932,996 2 161132 -- MSL 78 (19U 108)
-m 16101,12885,0,1227,1803,996 0 161133 -- MSL 79 (19U 109)
-n 10734,12885,0,1218,1824,996 0 161134 -- MSL 80 (19U 110)
-o 10734,12885,255,1047,825,996 0 161135 -- MSL 81 (19U 111)
-p 10734,12885,4680,972,3273,972 1 161136 -- MSL 82 (19U 112)
-q 10734,12885,4680,1965,1020,996 1 161137 -- MSL 83 (19U 113)
-r 7317,12885,0,2601,1803,996 0 161138 -- MSL 84 (19U 114)
-s 9759,12885,255,1320,1314,996 0 161139 -- MSL 85 (19U 115)
-t 7806,15879,255,1989,144,996 0 161140 -- MSL 86 (19U 116)
-u 10734,12630,255,1800,1011,996 0 161141 -- MSL 87 (19U 117)
-v 10245,12630,0,2412,-422,996 0 161142 -- MSL 88 (19U 118)
-w 17076,12630,0,2343,-368,996 0 161143 -- MSL 89 (19U 119)
-x 10245,12630,0,2328,2280,996 0 161144 -- MSL 90 (19U 120)
-y 10734,12630,4680,2364,1923,996 1 161145 -- MSL 91 (19U 121)
-z 8781,12630,0,2136,2154,996 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075,2865,-1289,996 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075,0,2577 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 13662,23640,0,0,2325 2 161216 -- MSL 99 (19U 192)
-^A 13662,23415,0,1611,2325,996 2 161218 -- MSL 100 (19U 194)
-`E 11220,23640,0,3267,1563,996 2 161224 -- MSL 101 (19U 200)
-^E 11220,23415,0,3267,1563,996 2 161226 -- MSL 102 (19U 202)
-:E 11220,22560,0,3693,1563,996 2 161227 -- MSL 103 (19U 203)
-^I 5856,23415,0,5514,1566,996 2 161230 -- MSL 104 (19U 206)
-:I 5856,22560,0,6375,1566,996 2 161231 -- MSL 105 (19U 207)
-aa 12198,18165,0,1326,-5684,996 2 161204 -- MSL 106 (19U 180)
-ga 12198,18165,0,0,-4538 2 161120 -- MSL 107 (19U 96)
-a^ 12198,17940,0,795,-3728,795 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12198,17355,0,1464,-3698,996 2 161192 -- MSL 109 (19U 168)
-~ 12198,17652,0,1776,-3728,996 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13662,23640,255,2892,363,996 2 161241 -- MSL 111 (19U 217)
-^U 13662,23415,255,2892,363,996 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,996 2 161199 -- MSL 113 (19U 175)
-'Y 12198,23640,0,4026,-1472,996 2 161245 -- MSL 114 (19U 221)
-'y 10734,18165,4680,2364,1923,996 3 161277 -- MSL 115 (19U 253)
-de 12198,18360,0,1284,-2981,996 2 161200 -- MSL 116 (19U 176)
-,C 13173,18390,4995,1860,540,996 3 161223 -- MSL 117 (19U 199)
-,c 10245,12885,4995,1047,2838,996 1 161255 -- MSL 118 (19U 231)
-~N 14148,22743,0,3030,1638,996 2 161233 -- MSL 119 (19U 209)
-~n 10734,17652,0,2508,1824,996 2 161265 -- MSL 120 (19U 241)
-r! 7806,13041,5094,861,1971,861 1 161185 -- MSL 121 (19U 161)
-r? 11220,12591,5799,0,2016 1 161215 -- MSL 122 (19U 191)
-Cs 12198,15684,0,2514,468,996 0 161188 -- MSL 123 (19U 164)
-Po 12198,18360,0,2223,522,996 2 161187 -- MSL 124 (19U 163)
-Ye 12198,18105,0,4137,1266,996 2 161189 -- MSL 125 (19U 165)
-sc 12198,18390,255,96,-1508,96 2 161191 -- MSL 126 (19U 167)
-Fn 12198,18315,0,1662,-1328,996 2 161155 -- MSL 127 (19U 131)
-ct 12198,18465,630,873,-1004,873 2 161186 -- MSL 128 (19U 162)
-^a 10734,17940,255,1527,1242,996 2 161250 -- MSL 129 (19U 226)
-^e 10245,17940,255,1770,1065,996 2 161258 -- MSL 130 (19U 234)
-^o 10734,17940,255,1527,825,996 2 161268 -- MSL 131 (19U 244)
-^u 10734,17940,255,1800,1011,996 2 161275 -- MSL 132 (19U 251)
-'a 10734,18165,255,2058,1242,996 2 161249 -- MSL 133 (19U 225)
-'e 10245,18165,255,2301,1065,996 2 161257 -- MSL 134 (19U 233)
-'o 10734,18165,255,2058,825,996 2 161267 -- MSL 135 (19U 243)
-'u 10734,18165,255,2058,1011,996 2 161274 -- MSL 136 (19U 250)
-`a 10734,18165,255,918,1242,918 2 161248 -- MSL 137 (19U 224)
-`e 10245,18165,255,1245,1065,996 2 161256 -- MSL 138 (19U 232)
-`o 10734,18165,255,1047,825,996 2 161266 -- MSL 139 (19U 242)
-`u 10734,18165,255,1800,1011,996 2 161273 -- MSL 140 (19U 249)
-:a 10734,17355,255,2478,1242,996 2 161252 -- MSL 141 (19U 228)
-:e 10245,17355,255,2721,1065,996 2 161259 -- MSL 142 (19U 235)
-:o 10734,17355,255,2478,825,996 2 161270 -- MSL 143 (19U 246)
-:u 10734,17355,255,2478,1011,996 2 161276 -- MSL 144 (19U 252)
-oA 13662,24480,0,1125,2325,996 2 161221 -- MSL 145 (19U 197)
-^i 5856,17940,0,3966,1425,996 2 161262 -- MSL 146 (19U 238)
-/O 13662,19944,1833,1989,555,996 2 161240 -- MSL 147 (19U 216)
-AE 18540,18135,0,2904,2310,996 2 161222 -- MSL 148 (19U 198)
-oa 10734,19005,255,918,1242,918 2 161253 -- MSL 149 (19U 229)
-'i 5856,18165,0,4779,1425,996 2 161261 -- MSL 150 (19U 237)
-/o 10734,14238,1866,1050,930,996 0 161272 -- MSL 151 (19U 248)
-ae 16587,12885,255,681,957,681 0 161254 -- MSL 152 (19U 230)
-:A 13662,22560,0,2472,2325,996 2 161220 -- MSL 153 (19U 196)
-`i 5856,18165,0,1461,1425,996 2 161260 -- MSL 154 (19U 236)
-:O 13662,22560,255,2472,447,996 2 161238 -- MSL 155 (19U 214)
-:U 13662,22560,255,2892,363,996 2 161244 -- MSL 156 (19U 220)
-'E 11220,23640,0,3267,1563,996 2 161225 -- MSL 157 (19U 201)
-:i 5856,17355,0,5118,1425,996 2 161263 -- MSL 158 (19U 239)
-ss 11709,18315,255,1839,1917,996 2 161247 -- MSL 159 (19U 223)
-^O 13662,23415,255,1875,447,996 2 161236 -- MSL 160 (19U 212)
-'A 13662,23640,0,1884,2325,996 2 161217 -- MSL 161 (19U 193)
-~A 13662,22743,0,2355,2325,996 2 161219 -- MSL 162 (19U 195)
-~a 10734,17652,255,2508,1242,996 2 161251 -- MSL 163 (19U 227)
--D 13662,18135,0,1749,1557,996 2 161232 -- MSL 164 (19U 208)
-Sd 10734,18579,255,2247,927,996 2 161264 -- MSL 165 (19U 240)
-'I 5856,23640,0,6393,1566,996 2 161229 -- MSL 166 (19U 205)
-`I 5856,23640,0,3258,1566,996 2 161228 -- MSL 167 (19U 204)
-'O 13662,23640,255,1884,447,996 2 161235 -- MSL 168 (19U 211)
-`O 13662,23640,255,1875,447,996 2 161234 -- MSL 169 (19U 210)
-~O 13662,22743,255,2355,447,996 2 161237 -- MSL 170 (19U 213)
-~o 10734,17652,255,2508,825,996 2 161269 -- MSL 171 (19U 245)
-vS 12684,23415,255,3015,978,996 2 161162 -- MSL 172 (19U 138)
-vs 9759,17940,255,2751,1314,996 2 161178 -- MSL 173 (19U 154)
-'U 13662,23640,255,2892,363,996 2 161242 -- MSL 174 (19U 218)
-:Y 12198,22560,0,4026,-1472,996 2 161183 -- MSL 175 (19U 159)
-:y 10734,17355,4680,2364,1923,996 3 161279 -- MSL 176 (19U 255)
-TP 12198,18135,0,1260,1407,996 2 161246 -- MSL 177 (19U 222)
-Tp 10734,18165,4680,969,3273,969 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350,1122,2931,996 0 161205 -- MSL 180 (19U 181)
-ps 12198,19635,4200,1923,-605,996 2 161206 -- MSL 181 (19U 182)
-34 17565,18675,918,891,-986,891 2 161214 -- MSL 182 (19U 190)
-\- 17565,8175,0,0,-2096 0 60096 -- MSL 183 ( 7J 192)
-14 17565,18675,918,183,-278,183 2 161212 -- MSL 184 (19U 188)
-12 17565,18675,918,0,156 2 161213 -- MSL 185 (19U 189)
-Of 7806,18360,0,3285,-1187,996 2 161194 -- MSL 186 (19U 170)
-Om 7806,18360,0,3303,-1196,996 2 161210 -- MSL 187 (19U 186)
-Fo 11709,11160,0,741,-425,741 0 161195 -- MSL 188 (19U 171)
-Fc 11709,11160,0,0,777 0 161211 -- MSL 190 (19U 187)
-t+- 17565,12210,213,0,-2132 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,4470,-2678,996 2 161193 -- MSL 193 (19U 169)
-tno 17565,10185,0,0,-2096 0 161196 -- MSL 194 (19U 172)
-u00AD 5856,7560,0,534,348,534 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,4470,-2678,996 2 161198 -- MSL 196 (19U 174)
-S2 7317,18465,0,3258,-299,996 2 161202 -- MSL 197 (19U 178)
-S3 7317,18465,0,3042,-956,996 2 161203 -- MSL 198 (19U 179)
-ac 12198,0,4995,0,1860 1 161208 -- MSL 199 (19U 184)
-S1 7317,18345,0,2562,-2492,996 2 161209 -- MSL 200 (19U 185)
-tmu 17565,12216,0,0,-2849 0 161239 -- MSL 201 (19U 215)
-tdi 17565,11610,0,0,-2666 0 161271 -- MSL 202 (19U 247)
-u203C 13173,18135,0,2241,591,996 2 87315 -- MSL 221 (10U 19)
-u20A7 20004,18135,255,1989,1401,996 2 60121 -- MSL 232 ( 7J 217)
-pc 5856,10578,0,1095,-722,996 0 161207 -- MSL 302 (19U 183)
-u013F 10245,18135,0,1734,1506,996 2 51943 -- MSL 306 ( 6J 231)
-u0140 8295,18165,0,2043,1932,996 2 51959 -- MSL 307 ( 6J 247)
-u2113 12198,18150,297,477,-1010,477 2 60122 -- MSL 308 ( 7J 218)
-u0149 15612,18135,0,1218,-1481,996 2 51951 -- MSL 309 ( 6J 239)
-fm 5856,18105,0,3918,-1724,996 2 60101 -- MSL 310 ( 7J 197)
-sd 12198,18105,0,2577,-2924,996 2 60102 -- MSL 311 ( 7J 198)
-dg 12198,18135,0,315,-1853,315 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850,0,2010,-2546,996 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,996 1 60095 -- MSL 314 ( 7J 191)
-ah 12198,17940,0,1533,-4466,996 2 75169 -- MSL 315 ( 9E 161)
-ao 12198,19005,0,114,-4877,114 2 60152 -- MSL 316 ( 7J 248)
-f/ 2928,18675,918,8010,6531,996 2 60109 -- MSL 324 ( 7J 205)
-em 17565,7350,0,423,330,423 0 161175 -- MSL 325 (19U 151)
-en 12198,7350,0,936,786,936 0 161174 -- MSL 326 (19U 150)
-dd 12198,18135,0,315,-1853,315 2 161159 -- MSL 327 (19U 135)
-.i 5856,12630,0,1461,1425,996 0 46333 -- MSL 328 ( 5T 253)
-aq 5856,18135,0,3051,-2387,996 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 7317,18465,0,3843,-35,996 2 87548 -- MSL 332 (10U 252)
-u0111 10734,18165,255,4488,1152,996 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13662,23415,0,2628,2325,996 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 10734,17940,255,2622,1242,996 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13662,18135,4839,0,2325 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 10734,12885,4716,918,1242,918 1 75193 -- MSL 405 ( 9E 185)
-'C 13173,23640,255,2427,513,996 2 75206 -- MSL 406 ( 9E 198)
-'c 10245,18165,255,2301,816,996 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13173,23415,255,2769,513,996 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 10245,17940,255,2508,816,996 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13662,23415,0,1926,1557,996 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 13662,18165,255,4695,1155,996 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 11220,23415,0,3897,1563,996 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 10245,17940,255,2508,1065,996 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 11220,18135,4839,3267,1563,996 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 10245,12885,4716,1245,1065,996 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 10245,23640,0,2691,1506,996 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 4878,23385,0,6975,1932,996 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 10245,18165,0,3507,1506,996 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 7806,18165,0,4851,1932,996 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 14148,23640,0,3030,1638,996 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 10734,18165,0,2358,1824,996 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 14148,23415,0,3030,1638,996 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 10734,17940,0,2415,1824,996 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13662,23640,255,4017,447,996 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 10734,18165,255,3987,825,996 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13173,23640,0,2247,1515,996 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 7317,18165,0,4065,1803,996 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13173,23415,0,2769,1515,996 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 7317,17940,0,4272,1803,996 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 12684,23640,255,2748,978,996 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 9759,18165,255,2544,1314,996 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 12684,23415,0,3735,-1889,996 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 8781,18165,255,4746,144,996 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 12684,18135,4995,3735,1143,996 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7806,15879,4995,1989,2856,996 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13662,23640,255,4107,363,996 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 10734,18165,255,4077,1011,996 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13662,24480,255,2892,363,996 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 10734,19005,255,1800,1011,996 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 12198,23640,0,3390,2130,996 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 8781,18165,0,3033,2154,996 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 12198,22740,0,3390,2130,996 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 8781,17355,0,2136,2154,996 2 75199 -- MSL 485 ( 9E 191)
-u2070 7317,18465,0,3273,-968,996 2 51753 -- MSL 1000 ( 6J 41)
-u2074 7317,18345,0,3249,-479,996 2 51748 -- MSL 1001 ( 6J 36)
-u2075 7317,18345,0,3420,-1022,996 2 51749 -- MSL 1002 ( 6J 37)
-u2076 7317,18465,0,3300,-1043,996 2 51806 -- MSL 1003 ( 6J 94)
-u2077 7317,18345,0,3513,-1061,996 2 51750 -- MSL 1004 ( 6J 38)
-u2078 7317,18465,0,3288,-872,996 2 51754 -- MSL 1005 ( 6J 42)
-u2079 7317,18465,0,3120,-869,996 2 51752 -- MSL 1006 ( 6J 40)
-lq 9270,18135,0,4254,-1484,996 2 161171 -- MSL 1017 (19U 147)
-rq 9270,18135,0,4254,-1484,996 2 161172 -- MSL 1018 (19U 148)
-Bq 9270,2916,2784,0,3018 0 161156 -- MSL 1019 (19U 132)
-u2003 17565,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12198,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 17565,2310,0,0,822 0 161157 -- MSL 1028 (19U 133)
-vz 8781,17940,0,3240,2154,996 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000,0,3195,-2561,996 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,537,-1238,537 2 51794 -- MSL 1036 ( 6J 82)
-fi 12684,18315,0,2934,795,996 2 60077 -- MSL 1040 ( 7J 173)
-fl 12684,18315,0,2949,744,996 2 60078 -- MSL 1041 ( 7J 174)
-ff 13662,18315,0,3921,888,996 2 51883 -- MSL 1042 ( 6J 171)
-Fi 18540,18315,0,2892,921,996 2 51884 -- MSL 1043 ( 6J 172)
-Fl 18540,18315,0,2928,849,996 2 51885 -- MSL 1044 ( 6J 173)
-ij 9759,18165,4995,3777,1905,996 3 60134 -- MSL 1047 ( 7J 230)
-u2105 17565,18390,255,510,-803,510 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13662,23415,255,2838,333,996 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 10734,17940,4995,2622,2589,996 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 12684,18390,4995,2274,978,996 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 9759,12885,4995,1320,2271,996 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 5856,22740,0,4563,1566,996 2 46301 -- MSL 1065 ( 5T 221)
-bq 5856,2916,2784,0,3330 0 161154 -- MSL 1067 (19U 130)
-%0 22443,18675,975,1293,267,996 2 161161 -- MSL 1068 (19U 137)
-a- 12198,16434,0,1257,-3452,996 0 60154 -- MSL 1084 ( 7J 250)
-ab 12198,17940,0,1890,-4328,996 2 75170 -- MSL 1086 ( 9E 162)
-a. 12198,17355,0,0,-6068 2 75263 -- MSL 1088 ( 9E 255)
-oe 16587,12885,255,912,783,912 0 161180 -- MSL 1090 (19U 156)
-OE 18051,18270,135,3174,363,996 2 161164 -- MSL 1091 (19U 140)
-fo 6342,11160,0,1608,-185,996 0 161163 -- MSL 1092 (19U 139)
-fc 6342,11160,0,537,885,537 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 10245,18135,0,0,1620 2 75171 -- MSL 1095 ( 9E 163)
-/l 4878,18165,0,3627,1932,996 2 75187 -- MSL 1096 ( 9E 179)
-a" 12198,18165,0,3174,-3893,996 2 75197 -- MSL 1097 ( 9E 189)
-ho 12198,879,4716,0,-2141 1 75186 -- MSL 1098 ( 9E 178)
-vZ 12198,23415,0,3390,2130,996 2 75150 -- MSL 1106 ( 9E 142)
-IJ 17076,18135,255,2781,1566,996 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UCR b/contrib/groff/font/devlj4/UCR
deleted file mode 100644
index c90be0d62451..000000000000
--- a/contrib/groff/font/devlj4/UCR
+++ /dev/null
@@ -1,727 +0,0 @@
-# Univers MdCd
-name UCR
-spacewidth 5856
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2438
-P . -4877
-P , -4877
-V A -1949
-A V -1949
-T o -3413
-T r -3413
-T c -3413
-T e -3413
-T d -3413
-T s -3413
-T y -3413
-T a -3413
-T w -3413
-T u -3413
-T J -3413
-L T -3413
-L Y -2924
-Y o -1949
-Y e -1949
-Y a -2438
-Y J -2924
-A W -1460
-W A -1460
-T A -2438
-V o -1460
-V e -1460
-V a -1460
-Y A -2438
-F A -974
-F . -2924
-F , -2924
-A T -2438
-A Y -2438
-v . -1949
-v , -1949
-y . -1949
-y , -1949
-T . -3413
-T , -3413
-L W -1460
-P A -1460
-V J -1460
-V . -2438
-V , -2438
-Y . -2924
-Y , -2924
-W o -974
-W e -974
-W a -974
-W . -1460
-W , -1460
-r . -1460
-r , -1460
-w . -1949
-w , -1949
-Y u -974
-A v -974
-A y -974
-A w -974
-o . -974
-o , -974
-p . -974
-p , -974
-e . -974
-e , -974
-b . -974
-b , -974
-O T -1460
-O V -485
-O Y -974
-O . -1460
-O , -1460
-L y -1949
-L O -1460
-L G -1460
-L C -1460
-L Q -1460
-P J -1460
-V y -485
-V u -485
-V O -485
-V G -485
-V C -485
-V Q -485
-D T -1460
-D V -485
-D Y -974
-D . -1460
-D , -1460
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -485
-F e -485
-F a -485
-c . -974
-c , -974
-O A -485
-O W -485
-L U -1460
-R T -1460
-R V -485
-R Y -974
-R W -485
-G T -1460
-P o -974
-P g -1460
-P e -974
-P a -1460
-C A -485
-C . -1460
-C , -1460
-D A -485
-D W -485
-B T -1460
-B Y -974
-B . -1460
-B , -1460
-F J -485
-A O -485
-A G -485
-A C -485
-A U -485
-A Q -485
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -974
-W Q -485
-J A -485
-J . -485
-J , -485
-U A -485
-U . -1460
-U , -1460
-Q W -485
-f . -974
-f , -974
-T O -1460
-T G -1460
-T C -1460
-T Q -1460
-O X -485
-L o -974
-L e -974
-L q -1949
-G V -485
-G Y -974
-G W -485
-P T -974
-P V -485
-P Y -974
-C T -1460
-C V -485
-C Y -974
-D X -485
-B V -485
-B X -485
-B A -485
-B W -485
-S . -485
-S , -485
-X o -485
-X e -485
-X y -485
-X O -485
-X G -485
-X C -485
-X Q -485
-A o -485
-A e -485
-K o -974
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -485
-o y -485
-o w -485
-h v -485
-h y -485
-n v -485
-n y -485
-m v -485
-m y -485
-r g -485
-p v -485
-p y -485
-c v -485
-c y -485
-c w -485
-v o -485
-v g -485
-v c -485
-v d -485
-v a -485
-v q -485
-e v -485
-e y -485
-b v -485
-b y -485
-b w -485
-s . -485
-s , -485
-y o -485
-y g -485
-y c -485
-y d -485
-y a -485
-y q -485
-a v -485
-a y -485
-a w -485
-w o -485
-w g -485
-w c -485
-w d -485
-w a -485
-w q -485
-T S -485
-L a -485
-L S -485
-P s -485
-P Z -485
-P X -485
-P W -485
-C X -485
-C W -485
-V S -485
-S T -485
-S V -485
-S Y -485
-S X -485
-S A -485
-S W -485
-Y S -485
-X a -485
-X u -485
-X S -485
-A t -485
-A g -485
-A c -485
-A d -485
-A a -485
-A u -485
-A q -485
-A S -485
-W S -485
-K c -974
-K u -974
-K S -974
-h w -485
-n w -485
-m w -485
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-p w -485
-v e -485
-v s -485
-e w -485
-s v -485
-s y -485
-s w -485
-y e -485
-y s -485
-w e -485
-w s -485
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-O Z -485
-L J -485
-C Z -485
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z J -485
-Z Q -485
-D Z -485
-B Z -485
-S Z -485
-X J -485
-A s -485
-A J -485
-K a -974
-K J -974
-K . -485
-K , -485
-r s -485
-k s -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -5363
-L ' -5363
-T hy -3413
-T - -3413
-T en -3413
-T em -3413
-A cq -1460
-A ' -1460
-hy T -3413
-- T -3413
-en T -3413
-em T -3413
-Y hy -974
-Y - -974
-Y en -974
-Y em -974
-p cq -974
-p ' -974
-c cq -974
-c ' -974
-e cq -974
-e ' -974
-b cq -974
-b ' -974
-a cq -1460
-a ' -1460
-V hy -485
-V - -485
-V en -485
-V em -485
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-m cq -1460
-m ' -1460
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -1949
-' d -1949
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -485
-X - -485
-X en -485
-X em -485
-A hy -485
-A - -485
-A en -485
-A em -485
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -485
-' s -485
-hy X -485
-- X -485
-hy A -485
-- A -485
-en X -485
-en A -485
-em X -485
-K cq -485
-K ' -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-charset
-! 7806,18135 2 161057 -- MSL 1 (19U 33)
-dq 9759,18135 2 161058 -- MSL 2 (19U 34)
-" "
-sh 12198,18360,975 2 161059 -- MSL 3 (19U 35)
-# "
-Do 12198,18360,630 2 161060 -- MSL 4 (19U 36)
-$ "
-% 17565,18675,975 2 161061 -- MSL 5 (19U 37)
-& 16101,18390,255 2 161062 -- MSL 6 (19U 38)
-cq 5856,18135 2 161170 -- MSL 8 (19U 146)
-' "
-( 5856,18135,2520 2 161064 -- MSL 9 (19U 40)
-) 5856,18135,2520 2 161065 -- MSL 10 (19U 41)
-* 12198,18390 2 161066 -- MSL 11 (19U 42)
-+ 17565,12495 0 161067 -- MSL 12 (19U 43)
-, 5856,2970,2730 0 161068 -- MSL 13 (19U 44)
-hy 5856,7560 0 161069 -- MSL 14 (19U 45)
-- "
-. 5856,2760 0 161070 -- MSL 15 (19U 46)
-sl 5856,18165,1980 2 161071 -- MSL 16 (19U 47)
-/ "
-0 12198,18360,255 2 161072 -- MSL 17 (19U 48)
-1 12198,18105 2 161073 -- MSL 18 (19U 49)
-2 12198,18360 2 161074 -- MSL 19 (19U 50)
-3 12198,18360,255 2 161075 -- MSL 20 (19U 51)
-4 12198,18105 2 161076 -- MSL 21 (19U 52)
-5 12198,18105,255 2 161077 -- MSL 22 (19U 53)
-6 12198,18360,255 2 161078 -- MSL 23 (19U 54)
-7 12198,18105 2 161079 -- MSL 24 (19U 55)
-8 12198,18360,255 2 161080 -- MSL 25 (19U 56)
-9 12198,18360,255 2 161081 -- MSL 26 (19U 57)
-: 5856,12333 0 161082 -- MSL 27 (19U 58)
-; 5856,12333,2730 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 17565,9570 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 11220,18390 2 161087 -- MSL 32 (19U 63)
-at 17565,18438,3246 2 161088 -- MSL 33 (19U 64)
-@ "
-A 13662,18135 2 161089 -- MSL 34 (19U 65)
-B 13173,18135 2 161090 -- MSL 35 (19U 66)
-C 13173,18390,255 2 161091 -- MSL 36 (19U 67)
-D 13662,18135 2 161092 -- MSL 37 (19U 68)
-E 11220,18135 2 161093 -- MSL 38 (19U 69)
-F 10734,18135 2 161094 -- MSL 39 (19U 70)
-G 13662,18390,255 2 161095 -- MSL 40 (19U 71)
-H 13662,18135 2 161096 -- MSL 41 (19U 72)
-I 5856,18135 2 161097 -- MSL 42 (19U 73)
-J 11220,18135,255 2 161098 -- MSL 43 (19U 74)
-K 13173,18135 2 161099 -- MSL 44 (19U 75)
-L 10245,18135 2 161100 -- MSL 45 (19U 76)
-M 18051,18135 2 161101 -- MSL 46 (19U 77)
-N 14148,18135 2 161102 -- MSL 47 (19U 78)
-O 13662,18390,255 2 161103 -- MSL 48 (19U 79)
-P 12198,18135 2 161104 -- MSL 49 (19U 80)
-Q 13662,18390,255 2 161105 -- MSL 50 (19U 81)
-R 13173,18135 2 161106 -- MSL 51 (19U 82)
-S 12684,18390,255 2 161107 -- MSL 52 (19U 83)
-T 12684,18135 2 161108 -- MSL 53 (19U 84)
-U 13662,18135,255 2 161109 -- MSL 54 (19U 85)
-V 12198,18135 2 161110 -- MSL 55 (19U 86)
-W 18051,18135 2 161111 -- MSL 56 (19U 87)
-X 13662,18135 2 161112 -- MSL 57 (19U 88)
-Y 12198,18135 2 161113 -- MSL 58 (19U 89)
-Z 12198,18135 2 161114 -- MSL 59 (19U 90)
-lB 5856,18135,2520 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 5856,18165,1980 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 5856,18135,2520 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 5856,18135 2 161169 -- MSL 66 (19U 145)
-` "
-a 10734,12885,255 0 161121 -- MSL 67 (19U 97)
-b 10734,18165,255 2 161122 -- MSL 68 (19U 98)
-c 10245,12885,255 0 161123 -- MSL 69 (19U 99)
-d 10734,18165,255 2 161124 -- MSL 70 (19U 100)
-e 10245,12885,255 0 161125 -- MSL 71 (19U 101)
-f 7806,18315 2 161126 -- MSL 72 (19U 102)
-g 10734,12885,4995 1 161127 -- MSL 73 (19U 103)
-h 10734,18165 2 161128 -- MSL 74 (19U 104)
-i 4878,18165 2 161129 -- MSL 75 (19U 105)
-j 4878,18165,4995 3 161130 -- MSL 76 (19U 106)
-k 10734,18165 2 161131 -- MSL 77 (19U 107)
-l 4878,18165 2 161132 -- MSL 78 (19U 108)
-m 16101,12885 0 161133 -- MSL 79 (19U 109)
-n 10734,12885 0 161134 -- MSL 80 (19U 110)
-o 10734,12885,255 0 161135 -- MSL 81 (19U 111)
-p 10734,12885,4680 1 161136 -- MSL 82 (19U 112)
-q 10734,12885,4680 1 161137 -- MSL 83 (19U 113)
-r 7317,12885 0 161138 -- MSL 84 (19U 114)
-s 9759,12885,255 0 161139 -- MSL 85 (19U 115)
-t 7806,15954,255 0 161140 -- MSL 86 (19U 116)
-u 10734,12630,255 0 161141 -- MSL 87 (19U 117)
-v 10245,12630 0 161142 -- MSL 88 (19U 118)
-w 17076,12630 0 161143 -- MSL 89 (19U 119)
-x 10245,12630 0 161144 -- MSL 90 (19U 120)
-y 10734,12630,4680 1 161145 -- MSL 91 (19U 121)
-z 8781,12630 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 13662,23640 2 161216 -- MSL 99 (19U 192)
-^A 13662,23415 2 161218 -- MSL 100 (19U 194)
-`E 11220,23640 2 161224 -- MSL 101 (19U 200)
-^E 11220,23415 2 161226 -- MSL 102 (19U 202)
-:E 11220,22710 2 161227 -- MSL 103 (19U 203)
-^I 5856,23415 2 161230 -- MSL 104 (19U 206)
-:I 5856,22710 2 161231 -- MSL 105 (19U 207)
-aa 12198,18165 2 161204 -- MSL 106 (19U 180)
-ga 12198,18165 2 161120 -- MSL 107 (19U 96)
-a^ 12198,17940 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 12198,17355 2 161192 -- MSL 109 (19U 168)
-~ 12198,17844 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 13662,23640,255 2 161241 -- MSL 111 (19U 217)
-^U 13662,23415,255 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 12198,23640 2 161245 -- MSL 114 (19U 221)
-'y 10734,18165,4680 3 161277 -- MSL 115 (19U 253)
-de 12198,18360 2 161200 -- MSL 116 (19U 176)
-,C 13173,18390,4755 3 161223 -- MSL 117 (19U 199)
-,c 10245,12885,4755 1 161255 -- MSL 118 (19U 231)
-~N 14148,23121 2 161233 -- MSL 119 (19U 209)
-~n 10734,17844 2 161265 -- MSL 120 (19U 241)
-r! 7806,12591,5544 1 161185 -- MSL 121 (19U 161)
-r? 11220,12480,5910 1 161215 -- MSL 122 (19U 191)
-Cs 12198,15684 0 161188 -- MSL 123 (19U 164)
-Po 12198,18360 2 161187 -- MSL 124 (19U 163)
-Ye 12198,18105 2 161189 -- MSL 125 (19U 165)
-sc 12198,18390,255 2 161191 -- MSL 126 (19U 167)
-Fn 12198,18315 2 161155 -- MSL 127 (19U 131)
-ct 12198,18360,630 2 161186 -- MSL 128 (19U 162)
-^a 10734,17940,255 2 161250 -- MSL 129 (19U 226)
-^e 10245,17940,255 2 161258 -- MSL 130 (19U 234)
-^o 10734,17940,255 2 161268 -- MSL 131 (19U 244)
-^u 10734,17940,255 2 161275 -- MSL 132 (19U 251)
-'a 10734,18165,255 2 161249 -- MSL 133 (19U 225)
-'e 10245,18165,255 2 161257 -- MSL 134 (19U 233)
-'o 10734,18165,255 2 161267 -- MSL 135 (19U 243)
-'u 10734,18165,255 2 161274 -- MSL 136 (19U 250)
-`a 10734,18165,255 2 161248 -- MSL 137 (19U 224)
-`e 10245,18165,255 2 161256 -- MSL 138 (19U 232)
-`o 10734,18165,255 2 161266 -- MSL 139 (19U 242)
-`u 10734,18165,255 2 161273 -- MSL 140 (19U 249)
-:a 10734,17355,255 2 161252 -- MSL 141 (19U 228)
-:e 10245,17355,255 2 161259 -- MSL 142 (19U 235)
-:o 10734,17355,255 2 161270 -- MSL 143 (19U 246)
-:u 10734,17355,255 2 161276 -- MSL 144 (19U 252)
-oA 13662,24480 2 161221 -- MSL 145 (19U 197)
-^i 5856,17940 2 161262 -- MSL 146 (19U 238)
-/O 13662,19767,1851 2 161240 -- MSL 147 (19U 216)
-AE 18540,18135 2 161222 -- MSL 148 (19U 198)
-oa 10734,19005,255 2 161253 -- MSL 149 (19U 229)
-'i 5856,18165 2 161261 -- MSL 150 (19U 237)
-/o 10734,14274,2115 0 161272 -- MSL 151 (19U 248)
-ae 16587,12885,255 0 161254 -- MSL 152 (19U 230)
-:A 13662,22710 2 161220 -- MSL 153 (19U 196)
-`i 5856,18165 2 161260 -- MSL 154 (19U 236)
-:O 13662,22710,255 2 161238 -- MSL 155 (19U 214)
-:U 13662,22710,255 2 161244 -- MSL 156 (19U 220)
-'E 11220,23640 2 161225 -- MSL 157 (19U 201)
-:i 5856,17355 2 161263 -- MSL 158 (19U 239)
-ss 11709,18315,255 2 161247 -- MSL 159 (19U 223)
-^O 13662,23415,255 2 161236 -- MSL 160 (19U 212)
-'A 13662,23640 2 161217 -- MSL 161 (19U 193)
-~A 13662,23121 2 161219 -- MSL 162 (19U 195)
-~a 10734,17844,255 2 161251 -- MSL 163 (19U 227)
--D 13662,18135 2 161232 -- MSL 164 (19U 208)
-Sd 10734,18531,255 2 161264 -- MSL 165 (19U 240)
-'I 5856,23640 2 161229 -- MSL 166 (19U 205)
-`I 5856,23640 2 161228 -- MSL 167 (19U 204)
-'O 13662,23640,255 2 161235 -- MSL 168 (19U 211)
-`O 13662,23640,255 2 161234 -- MSL 169 (19U 210)
-~O 13662,23121,255 2 161237 -- MSL 170 (19U 213)
-~o 10734,17844,255 2 161269 -- MSL 171 (19U 245)
-vS 12684,23415,255 2 161162 -- MSL 172 (19U 138)
-vs 9759,17940,255 2 161178 -- MSL 173 (19U 154)
-'U 13662,23640,255 2 161242 -- MSL 174 (19U 218)
-:Y 12198,22710 2 161183 -- MSL 175 (19U 159)
-:y 10734,17355,4680 3 161279 -- MSL 176 (19U 255)
-TP 12198,18135 2 161246 -- MSL 177 (19U 222)
-Tp 10734,18165,4680 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350 0 161205 -- MSL 180 (19U 181)
-ps 12198,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 17565,18675,975 2 161214 -- MSL 182 (19U 190)
-\- 17565,8175 0 60096 -- MSL 183 ( 7J 192)
-14 17565,18675,975 2 161212 -- MSL 184 (19U 188)
-12 17565,18675,975 2 161213 -- MSL 185 (19U 189)
-Of 7317,18360 2 161194 -- MSL 186 (19U 170)
-Om 7317,18360 2 161210 -- MSL 187 (19U 186)
-Fo 11709,11010 0 161195 -- MSL 188 (19U 171)
-Fc 11709,11010 0 161211 -- MSL 190 (19U 187)
-t+- 17565,12210,213 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 17565,10185 0 161196 -- MSL 194 (19U 172)
-u00AD 5856,7560 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 7317,18465 2 161202 -- MSL 197 (19U 178)
-S3 7317,18465 2 161203 -- MSL 198 (19U 179)
-ac 12198,0,4755 1 161208 -- MSL 199 (19U 184)
-S1 7317,18345 2 161209 -- MSL 200 (19U 185)
-tmu 17565,12216 0 161239 -- MSL 201 (19U 215)
-tdi 17565,11610 0 161271 -- MSL 202 (19U 247)
-u203C 11709,18135 2 87315 -- MSL 221 (10U 19)
-u20A7 20004,18135,255 2 60121 -- MSL 232 ( 7J 217)
-pc 5856,10755 0 161207 -- MSL 302 (19U 183)
-u013F 10245,18135 2 51943 -- MSL 306 ( 6J 231)
-u0140 7788,18165 2 51959 -- MSL 307 ( 6J 247)
-u2113 12684,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 15612,18135 2 51951 -- MSL 309 ( 6J 239)
-fm 5856,18105 2 60101 -- MSL 310 ( 7J 197)
-sd 12198,18105 2 60102 -- MSL 311 ( 7J 198)
-dg 12198,18135 2 161158 -- MSL 312 (19U 134)
-tm 16101,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 12198,17940 2 75169 -- MSL 315 ( 9E 161)
-ao 12198,19005 2 60152 -- MSL 316 ( 7J 248)
-f/ 2439,18675,975 2 60109 -- MSL 324 ( 7J 205)
-em 17565,7350 0 161175 -- MSL 325 (19U 151)
-en 12198,7350 0 161174 -- MSL 326 (19U 150)
-dd 12198,18135 2 161159 -- MSL 327 (19U 135)
-.i 5856,12630 0 46333 -- MSL 328 ( 5T 253)
-aq 5856,18135 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 7317,18465 2 87548 -- MSL 332 (10U 252)
-u0111 10734,18165,255 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 13662,23415 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 10734,17940,255 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 13662,18135,4668 3 75173 -- MSL 404 ( 9E 165)
-u0061_0328 10734,12885,4077 0 75193 -- MSL 405 ( 9E 185)
-'C 13173,23640,255 2 75206 -- MSL 406 ( 9E 198)
-'c 10245,18165,255 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 13173,23415,255 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 10245,17940,255 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 13662,23415 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 13662,18165,255 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 11220,23415 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 10245,17940,255 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 11220,18135,4668 3 75210 -- MSL 422 ( 9E 202)
-u0065_0328 10245,12885,4077 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 10245,23640 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 4878,23385 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 10245,18165 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 7806,18165 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 14148,23640 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 10734,18165 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 14148,23415 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 10734,17940 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 13662,23640,255 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 10734,18165,255 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 13173,23640 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 7317,18165 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 13173,23415 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 7317,17940 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 12684,23640,255 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 9759,18165,255 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 12684,23415 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 8781,18165,255 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 12684,18135,4755 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 7806,15954,4755 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 13662,23640,255 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 10734,18165,255 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 13662,24480,255 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 10734,19005,255 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 12198,23640 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 8781,18165 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 12198,22905 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 8781,17700 2 75199 -- MSL 485 ( 9E 191)
-u2070 7317,18465 2 51753 -- MSL 1000 ( 6J 41)
-u2074 7317,18345 2 51748 -- MSL 1001 ( 6J 36)
-u2075 7317,18345 2 51749 -- MSL 1002 ( 6J 37)
-u2076 7317,18465 2 51806 -- MSL 1003 ( 6J 94)
-u2077 7317,18345 2 51750 -- MSL 1004 ( 6J 38)
-u2078 7317,18465 2 51754 -- MSL 1005 ( 6J 42)
-u2079 7317,18465 2 51752 -- MSL 1006 ( 6J 40)
-lq 9270,18135 2 161171 -- MSL 1017 (19U 147)
-rq 9270,18135 2 161172 -- MSL 1018 (19U 148)
-Bq 9270,3006,2694 0 161156 -- MSL 1019 (19U 132)
-u2003 17565,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 12198,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 5856,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 17565,2310 0 161157 -- MSL 1028 (19U 133)
-vz 8781,17940 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16101,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 12198,18315 2 60077 -- MSL 1040 ( 7J 173)
-fl 12684,18315 2 60078 -- MSL 1041 ( 7J 174)
-ff 13662,18315 2 51883 -- MSL 1042 ( 6J 171)
-Fi 17826,18315 2 51884 -- MSL 1043 ( 6J 172)
-Fl 17694,18315 2 51885 -- MSL 1044 ( 6J 173)
-ij 9759,18165,4995 3 60134 -- MSL 1047 ( 7J 230)
-u2105 18540,18390,255 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 13662,23415,255 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 10734,17940,4995 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 12684,18390,4755 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 9759,12885,4755 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 5856,22905 2 46301 -- MSL 1065 ( 5T 221)
-bq 5856,3006,2694 0 161154 -- MSL 1067 (19U 130)
-%0 22443,18675,975 2 161161 -- MSL 1068 (19U 137)
-a- 12198,16440 0 60154 -- MSL 1084 ( 7J 250)
-ab 12198,17940 2 75170 -- MSL 1086 ( 9E 162)
-a. 12198,17700 2 75263 -- MSL 1088 ( 9E 255)
-oe 16587,12885,255 0 161180 -- MSL 1090 (19U 156)
-OE 18051,18270,135 2 161164 -- MSL 1091 (19U 140)
-fo 6342,11010 0 161163 -- MSL 1092 (19U 139)
-fc 6342,11010 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 10245,18135 2 75171 -- MSL 1095 ( 9E 163)
-/l 4878,18165 2 75187 -- MSL 1096 ( 9E 179)
-a" 12198,18165 2 75197 -- MSL 1097 ( 9E 189)
-ho 12198,363,4077 0 75186 -- MSL 1098 ( 9E 178)
-vZ 12198,23415 2 75150 -- MSL 1106 ( 9E 142)
-IJ 17076,18135,255 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UI b/contrib/groff/font/devlj4/UI
deleted file mode 100644
index e200e32cd52c..000000000000
--- a/contrib/groff/font/devlj4/UI
+++ /dev/null
@@ -1,950 +0,0 @@
-# Univers MdIt
-name UI
-spacewidth 8781
-slant 16.500000
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 1
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -5852
-P . -5363
-P , -5363
-V A -3413
-A V -4388
-T o -4388
-T r -4388
-T c -4388
-T e -4388
-T d -4388
-T s -4388
-T y -4388
-T a -4388
-T w -4388
-T u -4388
-T J -4388
-L T -4388
-L Y -4877
-Y o -3902
-Y e -3902
-Y a -3413
-Y J -3902
-A W -3902
-W A -1949
-T A -3413
-V o -2438
-V e -2438
-V a -2438
-Y A -3413
-F A -2924
-F . -3902
-F , -3902
-A T -4388
-A Y -4388
-v . -3902
-v , -3902
-y . -3902
-y , -3902
-T . -3902
-T , -3902
-L W -3902
-P A -2438
-V J -2438
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -974
-W e -974
-W a -974
-W . -2924
-W , -2924
-r . -2438
-r , -2438
-w . -3413
-w , -3413
-Y u -2438
-A v -2924
-A y -2438
-A w -2438
-o . -2438
-o , -2438
-p . -2438
-p , -2438
-e . -1949
-e , -1949
-b . -2438
-b , -2438
-O T -2438
-O V -1949
-O Y -2438
-O . -1949
-O , -1949
-L y -2924
-L O -2438
-L G -1949
-L C -1949
-L Q -1460
-P J -974
-V y -1460
-V u -1460
-V O -974
-V G -974
-V C -974
-V Q -974
-D T -2438
-D V -1949
-D Y -2438
-D . -1949
-D , -1949
-Y O -974
-Y G -974
-Y C -974
-Y Q -974
-F o -1460
-F e -1460
-F a -974
-c . -1949
-c , -1949
-O A -974
-O W -974
-L U -1460
-R T -1460
-R V -1460
-R Y -1460
-R W -974
-G T -1949
-P o -974
-P g -974
-P e -974
-P a -974
-C A -974
-C . -1949
-C , -1949
-D A -974
-D W -974
-B T -1460
-B Y -1460
-B . -1949
-B , -1949
-F J -1460
-A O -1460
-A G -1460
-A C -1460
-A U -1460
-A Q -1460
-W r -485
-W y -485
-W u -485
-W O -485
-W G -485
-W C -485
-W J -974
-W Q -485
-J A -1460
-J . -2438
-J , -2438
-U A -974
-U . -1949
-U , -1949
-Q W -974
-f . -1949
-f , -1949
-T O -974
-T G -974
-T C -974
-T Q -974
-O X -974
-L o -1949
-L e -1949
-L q -1949
-G V -1949
-G Y -1949
-G W -974
-G . -1460
-G , -1460
-P T -1460
-P V -1460
-P Y -1460
-C T -1460
-C V -1460
-C Y -1460
-D X -974
-B V -1460
-B X -974
-B A -974
-B W -974
-S . -1949
-S , -1949
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -1460
-K o -974
-K e -974
-K y -974
-K w -974
-K O -974
-K G -974
-K C -974
-K Q -974
-o v -1460
-o y -974
-o x -1460
-o w -974
-h v -1460
-h y -974
-n v -1460
-n y -974
-m v -1460
-m y -974
-r g -485
-g . -974
-g , -974
-p v -1460
-p y -974
-p x -1460
-c v -1460
-c y -974
-c w -974
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -1460
-e y -974
-b v -1460
-b y -974
-b w -974
-s . -1460
-s , -1460
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-f g -485
-x o -1460
-x g -1460
-x c -1460
-x e -1460
-x d -1460
-x a -1460
-x q -1460
-a v -1460
-a y -974
-a w -974
-w o -974
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-T i -974
-T S -974
-L a -1460
-L S -1460
-G X -485
-G A -485
-P s -485
-P Z -974
-P X -1460
-P W -974
-C X -974
-C W -974
-V i -974
-V S -974
-S T -1460
-S V -1460
-S Y -1460
-S X -974
-S A -974
-S W -974
-Y i -974
-Y S -974
-X a -1460
-X u -1460
-X S -1460
-A t -974
-A g -1460
-A c -1460
-A d -1460
-A a -1460
-A u -1460
-A q -1460
-A S -1460
-W i -485
-W S -485
-K c -974
-K u -974
-K S -974
-t g -485
-t . -974
-t , -974
-h w -974
-h . -974
-h , -974
-n w -974
-n . -974
-n , -974
-m w -974
-m . -974
-m , -974
-l . -974
-l , -974
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-i . -974
-i , -974
-p w -974
-c x -974
-v e -974
-v s -485
-e x -974
-e w -974
-z . -974
-z , -974
-d . -974
-d , -974
-s v -974
-s y -974
-s x -485
-s w -974
-y e -974
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -974
-x . -974
-x , -974
-a . -974
-a , -974
-w e -974
-w s -485
-j . -974
-j , -974
-u . -974
-k o -485
-k g -485
-k c -485
-k e -485
-k d -485
-k a -485
-k q -485
-k . -974
-k , -974
-O Z -974
-H . -974
-H , -974
-N . -974
-N , -974
-M . -974
-M , -974
-L J -974
-L . -974
-L , -974
-R . -974
-R , -974
-G Z -485
-I . -974
-I , -974
-C Z -974
-E . -974
-E , -974
-Z o -974
-Z e -974
-Z d -974
-Z s -974
-Z y -974
-Z a -974
-Z w -974
-Z u -974
-Z O -974
-Z G -974
-Z C -974
-Z S -974
-Z J -974
-Z Q -974
-Z . -974
-Z , -974
-D Z -974
-B Z -974
-S Z -974
-X J -974
-X . -974
-X , -974
-A s -974
-A J -974
-A . -974
-A , -974
-K a -974
-K J -974
-K . -974
-K , -974
-t o -485
-t c -485
-t e -485
-t d -485
-t s -485
-t a -485
-t q -485
-o t -485
-o z -485
-h t -485
-n t -485
-m t -485
-r s -485
-p t -485
-p z -485
-c t -485
-c z -485
-e t -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-b t -485
-b z -485
-s t -485
-s z -485
-x t -485
-x v -485
-x y -485
-x w -485
-x u -485
-a t -485
-k s -485
-X T -485
-X V -485
-X Y -485
-X W -485
-X U -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -7316
-L ' -7316
-T hy -4388
-T - -4388
-T en -4388
-T em -4388
-A cq -3902
-A ' -3902
-hy T -4388
-- T -4388
-en T -4388
-em T -4388
-Y hy -2438
-Y - -2438
-Y en -2438
-Y em -2438
-p cq -2924
-p ' -2924
-c cq -2924
-c ' -2924
-e cq -2924
-e ' -2924
-b cq -2924
-b ' -2924
-a cq -2924
-a ' -2924
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -2438
-h ' -2438
-n cq -2438
-n ' -2438
-m cq -2438
-m ' -2438
-R cq -974
-R ' -974
-W hy -485
-W - -485
-W en -485
-W em -485
-cq d -2924
-' d -2924
-s cq -1949
-s ' -1949
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -974
-K - -974
-K en -974
-K em -974
-cq s -1949
-' s -1949
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-x cq -1460
-x ' -1460
-X cq -1460
-X ' -1460
-K cq -1460
-K ' -1460
-t g -485
-t cq -974
-t ' -974
-l cq -974
-l ' -974
-r cq -974
-r ' -974
-g cq -974
-g ' -974
-i cq -974
-i ' -974
-v cq -974
-v ' -974
-z cq -974
-z ' -974
-d cq -974
-d ' -974
-y cq -974
-y ' -974
-f cq -974
-f ' -974
-w cq -974
-w ' -974
-j cq -974
-j ' -974
-u cq -974
-u ' -974
-k cq -974
-k ' -974
-T cq -974
-T ' -974
-O cq -974
-O ' -974
-H cq -974
-H ' -974
-N cq -974
-N ' -974
-M cq -974
-M ' -974
-G cq -974
-G ' -974
-I cq -974
-I ' -974
-P cq -974
-P ' -974
-C cq -974
-C ' -974
-V cq -974
-V ' -974
-E cq -974
-E ' -974
-Z cq -974
-Z ' -974
-Z hy -974
-Z - -974
-Z en -974
-Z em -974
-D cq -974
-D ' -974
-B cq -974
-B ' -974
-S cq -974
-S ' -974
-Y cq -974
-Y ' -974
-F cq -974
-F ' -974
-W cq -974
-W ' -974
-J cq -974
-J ' -974
-U cq -974
-U ' -974
-cq t -1460
-' t -1460
-cq n -1460
-' n -1460
-cq m -1460
-' m -1460
-cq l -974
-' l -974
-cq r -1460
-' r -1460
-cq v -1460
-' v -1460
-cq T -974
-' T -974
-cq N -974
-' N -974
-cq M -974
-' M -974
-cq L -974
-' L -974
-cq R -974
-' R -974
-cq D -974
-' D -974
-x hy -485
-x - -485
-x en -485
-x em -485
-charset
-! 8781,18165,0,1956,81,1000 2 161057 -- MSL 1 (19U 33)
-dq 13173,18246,0,2049,-4232,1000 2 161058 -- MSL 2 (19U 34)
-" "
-sh 16587,18105,0,1020,-1136,1000 2 161059 -- MSL 3 (19U 35)
-# "
-Do 16587,18750,765,0,-2390 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26346,18720,840,0,-3194 2 161061 -- MSL 5 (19U 37)
-& 20004,18495,360,0,-941 2 161062 -- MSL 6 (19U 38)
-cq 8781,18135,0,3114,-2750,1000 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18135,2397,2823,-1442,1000 2 161064 -- MSL 9 (19U 40)
-) 8781,18135,2397,0,1764 2 161065 -- MSL 10 (19U 41)
-* 16587,18495,0,0,-4154 2 161066 -- MSL 11 (19U 42)
-+ 26346,14745,105,0,-4859 0 161067 -- MSL 12 (19U 43)
-, 8781,3000,3135,0,1794 0 161068 -- MSL 13 (19U 44)
-hy 8781,7680,0,561,147,561 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,2970,0,0,192 0 161070 -- MSL 15 (19U 46)
-sl 8781,18135,1500,4326,3072,1000 2 161071 -- MSL 16 (19U 47)
-/ "
-0 16587,18465,360,1602,-242,1000 2 161072 -- MSL 17 (19U 48)
-1 16587,18105,0,0,-4466 2 161073 -- MSL 18 (19U 49)
-2 16587,18465,0,540,78,540 2 161074 -- MSL 19 (19U 50)
-3 16587,18465,360,1374,-353,1000 2 161075 -- MSL 20 (19U 51)
-4 16587,18105,0,843,609,843 2 161076 -- MSL 21 (19U 52)
-5 16587,18105,360,1494,-395,1000 2 161077 -- MSL 22 (19U 53)
-6 16587,18465,360,1632,-965,1000 2 161078 -- MSL 23 (19U 54)
-7 16587,18105,0,1188,-2582,1000 2 161079 -- MSL 24 (19U 55)
-8 16587,18465,360,1356,-176,1000 2 161080 -- MSL 25 (19U 56)
-9 16587,18465,360,630,171,630 2 161081 -- MSL 26 (19U 57)
-: 8781,12615,0,330,192,330 0 161082 -- MSL 27 (19U 58)
-; 8781,12615,3135,405,1794,405 0 161083 -- MSL 28 (19U 59)
-< 26346,16068,0,0,-3980 0 161084 -- MSL 29 (19U 60)
-= 26346,10500,0,0,-4949 0 161085 -- MSL 30 (19U 61)
-> 26346,16068,0,0,-3980 0 161086 -- MSL 31 (19U 62)
-? 13662,18315,0,1380,-1016,1000 2 161087 -- MSL 32 (19U 63)
-at 26349,21030,2745,243,-1712,243 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19515,18135,0,0,2400 2 161089 -- MSL 34 (19U 65)
-B 16587,18135,0,1641,684,1000 2 161090 -- MSL 35 (19U 66)
-C 18540,18495,360,1554,-989,1000 2 161091 -- MSL 36 (19U 67)
-D 19029,18135,0,477,804,477 2 161092 -- MSL 37 (19U 68)
-E 15126,18135,0,3099,699,1000 2 161093 -- MSL 38 (19U 69)
-F 14637,18135,0,3549,702,1000 2 161094 -- MSL 39 (19U 70)
-G 19515,18495,360,1095,-1046,1000 2 161095 -- MSL 40 (19U 71)
-H 19029,18135,0,2322,852,1000 2 161096 -- MSL 41 (19U 72)
-I 7317,18135,0,2439,852,1000 2 161097 -- MSL 42 (19U 73)
-J 14637,18135,360,2559,1242,1000 2 161098 -- MSL 43 (19U 74)
-K 17565,18135,0,2910,417,1000 2 161099 -- MSL 44 (19U 75)
-L 14148,18135,0,0,693 2 161100 -- MSL 45 (19U 76)
-M 23907,18135,0,2115,669,1000 2 161101 -- MSL 46 (19U 77)
-N 19029,18135,0,2688,750,1000 2 161102 -- MSL 47 (19U 78)
-O 20004,18495,360,582,-947,582 2 161103 -- MSL 48 (19U 79)
-P 15612,18135,0,2715,708,1000 2 161104 -- MSL 49 (19U 80)
-Q 20490,18495,360,168,-1079,168 2 161105 -- MSL 50 (19U 81)
-R 17076,18135,0,1728,729,1000 2 161106 -- MSL 51 (19U 82)
-S 17076,18495,360,1455,-20,1000 2 161107 -- MSL 52 (19U 83)
-T 16587,18135,0,3801,-2426,1000 2 161108 -- MSL 53 (19U 84)
-U 19029,18135,360,2250,-800,1000 2 161109 -- MSL 54 (19U 85)
-V 19029,18135,0,3789,-2918,1000 2 161110 -- MSL 55 (19U 86)
-W 26346,18135,0,4122,-2540,1000 2 161111 -- MSL 56 (19U 87)
-X 19029,18135,0,3081,1605,1000 2 161112 -- MSL 57 (19U 88)
-Y 18051,18135,0,3720,-2762,1000 2 161113 -- MSL 58 (19U 89)
-Z 16101,18135,0,2598,1719,1000 2 161114 -- MSL 59 (19U 90)
-lB 8781,18135,2397,3690,1038,1000 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18135,1500,0,-2546 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18135,2397,2013,2715,1000 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758,0,36,36,36 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588,1317,1317,1000 1 161119 -- MSL 64 (19U 95)
-oq 8781,18135,0,2658,-2294,1000 2 161169 -- MSL 66 (19U 145)
-` "
-a 14148,12990,360,87,729,87 0 161121 -- MSL 67 (19U 97)
-b 15126,18165,360,129,1092,129 2 161122 -- MSL 68 (19U 98)
-c 14148,12990,360,534,114,534 0 161123 -- MSL 69 (19U 99)
-d 15126,18165,360,2658,144,1000 2 161124 -- MSL 70 (19U 100)
-e 14148,12990,360,567,153,567 0 161125 -- MSL 71 (19U 101)
-f 9759,18315,0,3546,-32,1000 2 161126 -- MSL 72 (19U 102)
-g 15126,12990,5169,1059,1470,1000 1 161127 -- MSL 73 (19U 103)
-h 15126,18165,0,126,1185,126 2 161128 -- MSL 74 (19U 104)
-i 6342,18165,0,3060,1143,1000 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995,2970,4578,1000 3 161130 -- MSL 76 (19U 106)
-k 14148,18165,0,1248,1092,1000 2 161131 -- MSL 77 (19U 107)
-l 6342,18165,0,2937,1137,1000 2 161132 -- MSL 78 (19U 108)
-m 22932,12990,0,363,1182,363 0 161133 -- MSL 79 (19U 109)
-n 15126,12990,0,117,1182,117 0 161134 -- MSL 80 (19U 110)
-o 15126,12990,360,12,261,12 0 161135 -- MSL 81 (19U 111)
-p 15126,12990,4680,9,2592,9 1 161136 -- MSL 82 (19U 112)
-q 15126,12990,4680,1146,132,1000 1 161137 -- MSL 83 (19U 113)
-r 9270,12990,0,2499,1026,1000 0 161138 -- MSL 84 (19U 114)
-s 13173,12990,360,579,960,579 0 161139 -- MSL 85 (19U 115)
-t 9759,15843,360,2022,-863,1000 0 161140 -- MSL 86 (19U 116)
-u 15126,12630,360,1023,261,1000 0 161141 -- MSL 87 (19U 117)
-v 14637,12630,0,1902,-1085,1000 0 161142 -- MSL 88 (19U 118)
-w 22932,12630,0,1953,-1577,1000 0 161143 -- MSL 89 (19U 119)
-x 14637,12630,0,1035,1767,1000 0 161144 -- MSL 90 (19U 120)
-y 14637,12630,4680,1992,-962,1000 1 161145 -- MSL 91 (19U 121)
-z 12684,12630,0,1344,1365,1000 0 161146 -- MSL 92 (19U 122)
-{ 11709,20130,6075,3315,-1739,1000 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588,0,-4595 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11709,20130,6075,0,3183 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952,0,0,-4028 0 161150 -- MSL 96 (19U 126)
-`A 19515,23100,0,0,2400 2 161216 -- MSL 99 (19U 192)
-^A 19515,23085,0,0,2400 2 161218 -- MSL 100 (19U 194)
-`E 15126,23100,0,3099,699,1000 2 161224 -- MSL 101 (19U 200)
-^E 15126,23085,0,3099,699,1000 2 161226 -- MSL 102 (19U 202)
-:E 15126,22638,0,3099,699,1000 2 161227 -- MSL 103 (19U 203)
-^I 7317,23085,0,5385,852,1000 2 161230 -- MSL 104 (19U 206)
-:I 7317,22638,0,6231,852,1000 2 161231 -- MSL 105 (19U 207)
-aa 16587,17970,0,0,-7478 2 161204 -- MSL 106 (19U 180)
-ga 16587,17970,0,0,-6620 2 161120 -- MSL 107 (19U 96)
-a^ 16587,18105,0,0,-5333 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 16587,17943,0,174,-6260,174 2 161192 -- MSL 109 (19U 168)
-~ 16587,17724,0,312,-5603,312 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,23100,360,2250,-800,1000 2 161241 -- MSL 111 (19U 217)
-^U 19029,23085,360,2250,-800,1000 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105,0,1317,1317,1000 2 161199 -- MSL 113 (19U 175)
-'Y 18051,23100,0,3720,-2762,1000 2 161245 -- MSL 114 (19U 221)
-'y 14637,17970,4680,1992,-962,1000 3 161277 -- MSL 115 (19U 253)
-de 16587,18465,0,0,-4103 2 161200 -- MSL 116 (19U 176)
-,C 18540,18495,4875,1554,-989,1000 3 161223 -- MSL 117 (19U 199)
-,c 14148,12990,4875,534,114,534 1 161255 -- MSL 118 (19U 231)
-~N 19029,23019,0,2688,750,1000 2 161233 -- MSL 119 (19U 209)
-~n 15126,17724,0,1044,1182,1000 2 161265 -- MSL 120 (19U 241)
-r! 8781,12576,5589,54,1983,54 1 161185 -- MSL 121 (19U 161)
-r? 13662,12573,5742,0,921 1 161215 -- MSL 122 (19U 191)
-Cs 16587,15684,0,126,-1532,126 0 161188 -- MSL 123 (19U 164)
-Po 16587,18465,0,2265,291,1000 2 161187 -- MSL 124 (19U 163)
-Ye 16587,18105,0,4818,-1088,1000 2 161189 -- MSL 125 (19U 165)
-sc 16587,18495,360,0,-3749 2 161191 -- MSL 126 (19U 167)
-Fn 16587,18315,0,330,-3527,330 2 161155 -- MSL 127 (19U 131)
-ct 16587,18750,765,0,-2321 2 161186 -- MSL 128 (19U 162)
-^a 14148,18105,360,711,729,711 2 161250 -- MSL 129 (19U 226)
-^e 14148,18105,360,711,153,711 2 161258 -- MSL 130 (19U 234)
-^o 15126,18105,360,222,261,222 2 161268 -- MSL 131 (19U 244)
-^u 15126,18105,360,1023,261,1000 2 161275 -- MSL 132 (19U 251)
-'a 14148,17970,360,690,729,690 2 161249 -- MSL 133 (19U 225)
-'e 14148,17970,360,690,153,690 2 161257 -- MSL 134 (19U 233)
-'o 15126,17970,360,201,261,201 2 161267 -- MSL 135 (19U 243)
-'u 15126,17970,360,1023,261,1000 2 161274 -- MSL 136 (19U 250)
-`a 14148,17970,360,87,729,87 2 161248 -- MSL 137 (19U 224)
-`e 14148,17970,360,567,153,567 2 161256 -- MSL 138 (19U 232)
-`o 15126,17970,360,12,261,12 2 161266 -- MSL 139 (19U 242)
-`u 15126,17970,360,1023,261,1000 2 161273 -- MSL 140 (19U 249)
-:a 14148,17943,360,1395,729,1000 2 161252 -- MSL 141 (19U 228)
-:e 14148,17943,360,1395,153,1000 2 161259 -- MSL 142 (19U 235)
-:o 15126,17943,360,906,261,906 2 161270 -- MSL 143 (19U 246)
-:u 15126,17943,360,1023,261,1000 2 161276 -- MSL 144 (19U 252)
-oA 19515,25923,0,0,2400 2 161221 -- MSL 145 (19U 197)
-^i 6342,18105,0,4614,1155,1000 2 161262 -- MSL 146 (19U 238)
-/O 20004,18495,360,2847,1161,1000 2 161240 -- MSL 147 (19U 216)
-AE 25857,18135,0,3231,2919,1000 2 161222 -- MSL 148 (19U 198)
-oa 14148,20490,360,87,729,87 2 161253 -- MSL 149 (19U 229)
-'i 6342,17970,0,4593,1155,1000 2 161261 -- MSL 150 (19U 237)
-/o 15126,12990,360,1242,1386,1000 0 161272 -- MSL 151 (19U 248)
-ae 22443,12990,360,165,384,165 0 161254 -- MSL 152 (19U 230)
-:A 19515,22638,0,132,2400,132 2 161220 -- MSL 153 (19U 196)
-`i 6342,17970,0,1737,1155,1000 2 161260 -- MSL 154 (19U 236)
-:O 20004,22638,360,582,-947,582 2 161238 -- MSL 155 (19U 214)
-:U 19029,22638,360,2250,-800,1000 2 161244 -- MSL 156 (19U 220)
-'E 15126,23100,0,3099,699,1000 2 161225 -- MSL 157 (19U 201)
-:i 6342,17943,0,5298,1155,1000 2 161263 -- MSL 158 (19U 239)
-ss 16101,18315,360,1320,939,1000 2 161247 -- MSL 159 (19U 223)
-^O 20004,23085,360,582,-947,582 2 161236 -- MSL 160 (19U 212)
-'A 19515,23100,0,0,2400 2 161217 -- MSL 161 (19U 193)
-~A 19515,23019,0,936,2400,936 2 161219 -- MSL 162 (19U 195)
-~a 14148,17724,360,1533,729,1000 2 161251 -- MSL 163 (19U 227)
--D 19029,18135,0,477,804,477 2 161232 -- MSL 164 (19U 208)
-Sd 15126,18315,360,357,108,357 2 161264 -- MSL 165 (19U 240)
-'I 7317,23100,0,5619,852,1000 2 161229 -- MSL 166 (19U 205)
-`I 7317,23100,0,2787,852,1000 2 161228 -- MSL 167 (19U 204)
-'O 20004,23100,360,582,-947,582 2 161235 -- MSL 168 (19U 211)
-`O 20004,23100,360,582,-947,582 2 161234 -- MSL 169 (19U 210)
-~O 20004,23019,360,693,-947,693 2 161237 -- MSL 170 (19U 213)
-~o 15126,17724,360,1044,261,1000 2 161269 -- MSL 171 (19U 245)
-vS 17076,23085,360,1629,-20,1000 2 161162 -- MSL 172 (19U 138)
-vs 13173,18234,360,2241,960,1000 2 161178 -- MSL 173 (19U 154)
-'U 19029,23100,360,2250,-800,1000 2 161242 -- MSL 174 (19U 218)
-:Y 18051,22638,0,3720,-2762,1000 2 161183 -- MSL 175 (19U 159)
-:y 14637,17943,4680,1992,-962,1000 3 161279 -- MSL 176 (19U 255)
-TP 15612,18135,0,1692,717,1000 2 161246 -- MSL 177 (19U 222)
-Tp 15126,18165,4680,9,2592,9 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350,1122,2931,1000 0 161205 -- MSL 180 (19U 181)
-ps 16590,19635,4200,0,-2378 2 161206 -- MSL 181 (19U 182)
-34 26346,18465,945,0,-3290 2 161214 -- MSL 182 (19U 190)
-\- 26346,8070,0,0,-4868 0 60096 -- MSL 183 ( 7J 192)
-14 26346,18465,945,0,-3620 2 161212 -- MSL 184 (19U 188)
-12 26346,18465,945,0,-3086 2 161213 -- MSL 185 (19U 189)
-Of 10734,18465,0,1791,-1670,1000 2 161194 -- MSL 186 (19U 170)
-Om 10734,18465,0,2232,-1598,1000 2 161210 -- MSL 187 (19U 186)
-Fo 14637,11046,0,468,-875,468 0 161195 -- MSL 188 (19U 171)
-Fc 14637,11046,0,0,537 0 161211 -- MSL 190 (19U 187)
-t+- 26346,14910,0,0,-4769 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916,0,-4595 3 161190 -- MSL 192 (19U 166)
-co 13173,19635,0,4683,-2891,1000 2 161193 -- MSL 193 (19U 169)
-tno 26346,11697,0,0,-4424 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7680,0,561,147,561 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635,0,4683,-2891,1000 2 161198 -- MSL 196 (19U 174)
-S2 10245,18465,0,1800,-1064,1000 2 161202 -- MSL 197 (19U 178)
-S3 10245,18465,0,1941,-1133,1000 2 161203 -- MSL 198 (19U 179)
-ac 16587,0,4875,0,-1796 1 161208 -- MSL 199 (19U 184)
-S1 10245,18345,0,693,-3386,693 2 161209 -- MSL 200 (19U 185)
-tmu 26346,14010,0,0,-6080 0 161239 -- MSL 201 (19U 215)
-tdi 26346,12255,0,0,-4844 0 161271 -- MSL 202 (19U 247)
-u203C 14439,18165,0,1956,81,1000 2 87315 -- MSL 221 (10U 19)
-u20A7 25371,18135,360,2022,708,1000 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,10935,0,0,-2135 0 161207 -- MSL 302 (19U 183)
-u013F 14148,18135,0,708,693,708 2 51943 -- MSL 306 ( 6J 231)
-u0140 8295,18165,0,3105,1137,1000 2 51959 -- MSL 307 ( 6J 247)
-u2113 16587,18150,297,0,-3104 2 60122 -- MSL 308 ( 7J 218)
-u0149 19515,18135,0,117,-1310,117 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18105,0,1911,-2999,1000 2 60101 -- MSL 310 ( 7J 197)
-sd 16587,18105,0,0,-2999 2 60102 -- MSL 311 ( 7J 198)
-dg 16587,18135,0,0,-2771 2 161158 -- MSL 312 (19U 134)
-tm 16128,17850,0,2196,-2759,1000 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588,1317,1317,1000 1 60095 -- MSL 314 ( 7J 191)
-ah 16587,18234,0,534,-6377,534 2 75169 -- MSL 315 ( 9E 161)
-ao 16587,20490,0,0,-6317 2 60152 -- MSL 316 ( 7J 248)
-f/ 2439,18465,945,8739,7344,1000 2 60109 -- MSL 324 ( 7J 205)
-em 26346,7380,0,0,-2342 0 161175 -- MSL 325 (19U 151)
-en 16587,7470,0,24,-377,24 0 161174 -- MSL 326 (19U 150)
-dd 16587,18135,0,0,-2798 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630,0,1374,1155,1000 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18246,0,2136,-4232,1000 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226,0,0,-497 0 161173 -- MSL 331 (19U 149)
-u207F 10248,18465,0,2817,30,1000 2 87548 -- MSL 332 (10U 252)
-u0111 15126,18165,360,3759,159,1000 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19515,23130,0,261,2400,261 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 14148,17937,360,1122,729,1000 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19515,18135,4467,0,2400 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 14148,12990,4458,87,729,87 0 75193 -- MSL 405 ( 9E 185)
-'C 18540,23100,360,1554,-989,1000 2 75206 -- MSL 406 ( 9E 198)
-'c 14148,17970,360,690,114,690 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18540,23085,360,1554,-989,1000 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 14148,18234,360,1755,114,1000 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,23085,0,477,804,477 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 17565,19635,360,6540,144,1000 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15126,23085,0,3114,699,1000 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 14148,18234,360,1755,153,1000 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15126,18135,4467,3099,699,1000 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 14148,12990,4458,567,153,567 0 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14148,23100,0,0,693 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23025,0,6393,1137,1000 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14148,19635,0,2082,693,1000 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,19635,0,6834,1137,1000 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,23100,0,2688,750,1000 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15126,17970,0,201,1182,201 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,23085,0,2688,750,1000 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15126,18234,0,942,1182,942 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20004,23100,360,1959,-947,1000 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15126,17970,360,3192,261,1000 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17076,23100,0,1728,729,1000 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9270,17970,0,3129,1026,1000 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17076,23085,0,1728,729,1000 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9270,18234,0,4194,1026,1000 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 17076,23100,360,1455,-20,1000 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13173,17970,360,1176,960,1000 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,23085,0,3801,-2426,1000 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10734,19635,360,6291,-863,1000 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,18135,4875,3801,-1589,1000 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 9759,15843,4875,2022,1617,1000 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,23100,360,2445,-800,1000 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15126,17970,360,2592,261,1000 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,25173,360,2250,-800,1000 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15126,20490,360,1023,261,1000 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,23100,0,2598,1719,1000 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12684,17970,0,1422,1365,1000 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,22650,0,2598,1719,1000 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12684,17943,0,1344,1365,1000 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,18465,0,2388,-1205,1000 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,18345,0,1842,-857,1000 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,18345,0,2226,-1361,1000 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,18465,0,2094,-1640,1000 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,18345,0,2004,-2096,1000 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,18465,0,2007,-1160,1000 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,18465,0,1710,-1265,1000 2 51752 -- MSL 1006 ( 6J 40)
-lq 13173,18135,0,3186,-2321,1000 2 161171 -- MSL 1017 (19U 147)
-rq 13173,18135,0,3246,-2381,1000 2 161172 -- MSL 1018 (19U 148)
-Bq 13173,2925,3150,0,1596 0 161156 -- MSL 1019 (19U 132)
-u2003 26346,0,0,0,1317 0 51821 -- MSL 1020 ( 6J 109)
-u2002 16587,0,0,0,1317 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0,0,0,1317 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26346,2760,0,0,-314 0 161157 -- MSL 1028 (19U 133)
-vz 12684,18234,0,2487,1365,1000 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16128,18000,0,3384,-2777,1000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056,342,-1043,342 2 51794 -- MSL 1036 ( 6J 82)
-fi 16101,18315,0,2976,-248,1000 2 60077 -- MSL 1040 ( 7J 173)
-fl 16101,18315,0,2811,-215,1000 2 60078 -- MSL 1041 ( 7J 174)
-ff 18051,18315,0,3666,-164,1000 2 51883 -- MSL 1042 ( 6J 171)
-Fi 24396,18315,0,2886,-173,1000 2 51884 -- MSL 1043 ( 6J 172)
-Fl 24396,18315,0,2748,-167,1000 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995,2970,1143,1000 3 60134 -- MSL 1047 ( 7J 230)
-u2105 26349,18495,360,0,-1991 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19515,23130,360,1095,-1046,1000 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15126,17937,5169,1059,1470,1000 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 17076,18495,4875,1455,-20,1000 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13173,12990,4875,579,960,579 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,22650,0,3942,852,1000 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,2925,3150,0,2349 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18720,840,426,-314,426 2 161161 -- MSL 1068 (19U 137)
-a- 16587,17040,0,327,-5009,327 2 60154 -- MSL 1084 ( 7J 250)
-ab 16587,17937,0,0,-5468 2 75170 -- MSL 1086 ( 9E 162)
-a. 16587,17943,0,0,-8354 2 75263 -- MSL 1088 ( 9E 255)
-oe 23907,12990,360,141,-242,141 0 161180 -- MSL 1090 (19U 156)
-OE 26346,18270,135,3102,-986,1000 2 161164 -- MSL 1091 (19U 140)
-fo 9759,11046,0,438,-1292,438 0 161163 -- MSL 1092 (19U 139)
-fc 9759,11046,0,0,-362 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624,0,0,-2021 0 60091 -- MSL 1094 ( 7J 187)
-/L 14148,18135,0,0,693 2 75171 -- MSL 1095 ( 9E 163)
-/l 6342,18165,0,2937,1122,1000 2 75187 -- MSL 1096 ( 9E 179)
-a" 16587,17970,0,2460,-5864,1000 2 75197 -- MSL 1097 ( 9E 189)
-ho 16587,696,4458,0,-6956 0 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23085,0,2598,1719,1000 2 75150 -- MSL 1106 ( 9E 142)
-IJ 20976,18135,360,2559,852,1000 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/UR b/contrib/groff/font/devlj4/UR
deleted file mode 100644
index 4934593ce333..000000000000
--- a/contrib/groff/font/devlj4/UR
+++ /dev/null
@@ -1,848 +0,0 @@
-# Univers Md
-name UR
-spacewidth 8781
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3902
-P . -4388
-P , -4388
-V A -3902
-A V -3902
-T o -4877
-T r -4877
-T c -4877
-T e -4877
-T d -4877
-T s -4877
-T y -4877
-T a -4877
-T w -4877
-T u -4877
-T J -4877
-L T -4877
-L Y -4388
-Y o -4388
-Y e -4388
-Y a -4388
-Y J -4388
-A W -2438
-W A -2438
-T A -4388
-V o -2924
-V e -2924
-V a -2924
-Y A -4388
-F A -2924
-F . -3902
-F , -3902
-A T -4388
-A Y -4388
-v . -3902
-v , -3902
-y . -3902
-y , -3902
-T . -3902
-T , -3902
-L W -2438
-P A -2924
-V J -3902
-V . -3902
-V , -3902
-Y . -3902
-Y , -3902
-W o -1949
-W e -1949
-W a -1949
-W . -3413
-W , -3413
-r . -2438
-r , -2438
-w . -3413
-w , -3413
-Y u -2924
-A v -2438
-A y -1949
-A w -2438
-o . -2924
-o , -2924
-p . -2924
-p , -2924
-e . -2924
-e , -2924
-b . -2924
-b , -2924
-O T -1949
-O V -1460
-O Y -1949
-O . -2924
-O , -2924
-L y -2438
-L O -1949
-L G -1949
-L C -1949
-L Q -1949
-P J -2438
-V y -1460
-V u -1460
-V O -1460
-V G -1460
-V C -1460
-V Q -1460
-D T -1949
-D V -1460
-D Y -1949
-D . -2924
-D , -2924
-Y O -1949
-Y G -1949
-Y C -1949
-Y Q -1949
-F o -1460
-F e -1460
-F a -1460
-c . -2438
-c , -2438
-O A -1460
-O W -974
-L U -1460
-R T -1460
-R V -1460
-R Y -1460
-R W -974
-G T -1460
-P o -1460
-P g -1460
-P e -1460
-P a -1460
-C A -1460
-C . -2438
-C , -2438
-D A -1460
-D W -974
-B T -1460
-B Y -1460
-B . -1949
-B , -1949
-F J -2438
-A O -1460
-A G -1460
-A C -1460
-A U -1460
-A Q -1460
-W r -974
-W y -974
-W u -974
-W O -974
-W G -974
-W C -974
-W J -2438
-W Q -974
-J A -1460
-J . -2438
-J , -2438
-U A -1460
-U . -2438
-U , -2438
-Q W -974
-f . -1949
-f , -1949
-T O -1949
-T G -1949
-T C -1949
-T Q -1949
-O X -1460
-L o -1949
-L e -1949
-L q -1949
-G V -1460
-G Y -1460
-G W -974
-G . -974
-G , -974
-P T -485
-P V -485
-P Y -485
-C T -1460
-C V -1460
-C Y -1460
-D X -1460
-B V -1460
-B X -974
-B A -974
-B W -974
-S . -1949
-S , -1949
-X o -1460
-X e -1460
-X y -1460
-X O -1460
-X G -1460
-X C -1460
-X Q -1460
-A o -1460
-A e -1460
-K o -1460
-K e -1460
-K y -1460
-K w -1460
-K O -1460
-K G -1460
-K C -1460
-K Q -1460
-o v -974
-o y -485
-o x -974
-o w -974
-h v -974
-h y -485
-n v -974
-n y -485
-m v -974
-m y -485
-r g -485
-g . -974
-g , -974
-p v -974
-p y -485
-p x -974
-c v -974
-c y -485
-c w -974
-v o -974
-v g -974
-v c -974
-v d -974
-v a -974
-v q -974
-e v -974
-e y -485
-b v -974
-b y -485
-b w -974
-s . -1460
-s , -1460
-y o -974
-y g -974
-y c -974
-y d -974
-y a -974
-y q -974
-f g -485
-x o -974
-x g -974
-x c -974
-x e -974
-x d -974
-x a -974
-x q -974
-a v -974
-a y -485
-a w -974
-w o -974
-w g -974
-w c -974
-w d -974
-w a -974
-w q -974
-T i -974
-T S -974
-L a -974
-L S -974
-P s -485
-P Z -485
-P X -485
-P W -485
-C X -1460
-C W -974
-C J -974
-V i -974
-V S -974
-S T -974
-S V -974
-S Y -974
-S X -974
-S A -974
-S W -974
-Y i -974
-Y S -974
-X a -974
-X u -1460
-X S -974
-A t -974
-A g -1460
-A c -1460
-A d -1460
-A a -974
-A u -1460
-A q -1460
-A S -974
-W i -974
-W S -974
-K c -1460
-K u -1460
-K S -974
-t g -485
-t . -974
-t , -974
-o f -485
-h w -974
-h . -974
-h , -974
-n w -974
-n . -974
-n , -974
-m w -974
-m . -974
-m , -974
-l . -974
-l , -974
-r o -485
-r c -485
-r e -485
-r d -485
-r a -485
-r q -485
-i . -974
-i , -974
-p f -485
-p w -974
-c f -485
-c x -974
-v e -974
-v s -485
-e f -485
-e x -974
-e w -974
-z . -974
-z , -974
-d . -974
-d , -974
-b f -485
-s v -485
-s y -485
-s f -485
-s x -485
-s w -485
-y e -974
-y s -485
-f o -485
-f c -485
-f e -485
-f d -485
-f s -485
-f a -485
-f q -485
-x s -485
-x . -974
-x , -974
-a . -974
-a , -974
-w e -974
-w s -485
-j . -974
-j , -974
-u . -974
-k o -974
-k g -974
-k c -974
-k e -974
-k d -974
-k a -974
-k q -974
-k . -974
-k , -974
-O Z -485
-O J -974
-H . -974
-H , -974
-N . -974
-N , -974
-M . -974
-M , -974
-L . -974
-L , -974
-R . -974
-R , -974
-I . -974
-I , -974
-C Z -485
-E . -974
-E , -974
-Z o -485
-Z e -485
-Z d -485
-Z s -485
-Z y -485
-Z a -485
-Z w -485
-Z u -485
-Z O -485
-Z G -485
-Z C -485
-Z S -485
-Z Q -485
-Z . -974
-Z , -974
-D Z -485
-D J -974
-B Z -485
-B J -974
-S Z -485
-S J -974
-X . -974
-X , -974
-A s -485
-A . -974
-A , -974
-J J -974
-U J -974
-K a -974
-K . -974
-K , -974
-t o -485
-t c -485
-t e -485
-t d -485
-t s -485
-t a -485
-t q -485
-o z -485
-h f -485
-n f -485
-m f -485
-r s -485
-p z -485
-c z -485
-e z -485
-z o -485
-z g -485
-z c -485
-z e -485
-z d -485
-z s -485
-z a -485
-z q -485
-b z -485
-s z -485
-a f -485
-k s -485
-A f -485
-K T -485
-K V -485
-K Y -485
-K W -485
-K U -485
-L cq -6341
-L ' -6341
-T hy -4877
-T - -4877
-T en -4877
-T em -4877
-A cq -2924
-A ' -2924
-hy T -4877
-- T -4877
-en T -4877
-em T -4877
-Y hy -2924
-Y - -2924
-Y en -2924
-Y em -2924
-p cq -1949
-p ' -1949
-c cq -1460
-c ' -1460
-e cq -1949
-e ' -1949
-b cq -1949
-b ' -1949
-a cq -1460
-a ' -1460
-V hy -1460
-V - -1460
-V en -1460
-V em -1460
-h cq -1460
-h ' -1460
-n cq -1460
-n ' -1460
-m cq -1460
-m ' -1460
-W hy -974
-W - -974
-W en -974
-W em -974
-cq d -3413
-' d -3413
-s cq -485
-s ' -485
-L hy -1949
-L - -1949
-L en -1949
-L em -1949
-X hy -1460
-X - -1460
-X en -1460
-X em -1460
-A hy -1460
-A - -1460
-A en -1460
-A em -1460
-K hy -1460
-K - -1460
-K en -1460
-K em -1460
-cq s -1949
-' s -1949
-hy X -1460
-- X -1460
-hy A -1460
-- A -1460
-en X -1460
-en A -1460
-em X -1460
-K cq -485
-K ' -485
-t g -485
-b f -485
-Z hy -485
-Z - -485
-Z en -485
-Z em -485
-cq t -974
-' t -974
-cq n -1460
-' n -1460
-cq m -1460
-' m -1460
-cq r -1460
-' r -1460
-cq v -1460
-' v -1460
-charset
-! 8781,18165 2 161057 -- MSL 1 (19U 33)
-dq 13173,18237 2 161058 -- MSL 2 (19U 34)
-" "
-sh 16587,18105 2 161059 -- MSL 3 (19U 35)
-# "
-Do 16587,18825,720 2 161060 -- MSL 4 (19U 36)
-$ "
-% 26346,18720,840 2 161061 -- MSL 5 (19U 37)
-& 20004,18495,360 2 161062 -- MSL 6 (19U 38)
-cq 8781,18135 2 161170 -- MSL 8 (19U 146)
-' "
-( 8781,18135,2550 2 161064 -- MSL 9 (19U 40)
-) 8781,18135,2550 2 161065 -- MSL 10 (19U 41)
-* 16587,18495 2 161066 -- MSL 11 (19U 42)
-+ 26346,14775,105 0 161067 -- MSL 12 (19U 43)
-, 8781,3030,3075 0 161068 -- MSL 13 (19U 44)
-hy 8781,7755 0 161069 -- MSL 14 (19U 45)
-- "
-. 8781,3030 0 161070 -- MSL 15 (19U 46)
-sl 8781,18135,1380 2 161071 -- MSL 16 (19U 47)
-/ "
-0 16587,18465,360 2 161072 -- MSL 17 (19U 48)
-1 16587,18105 2 161073 -- MSL 18 (19U 49)
-2 16587,18465 2 161074 -- MSL 19 (19U 50)
-3 16587,18465,360 2 161075 -- MSL 20 (19U 51)
-4 16587,18105 2 161076 -- MSL 21 (19U 52)
-5 16587,18105,360 2 161077 -- MSL 22 (19U 53)
-6 16587,18465,360 2 161078 -- MSL 23 (19U 54)
-7 16587,18105 2 161079 -- MSL 24 (19U 55)
-8 16587,18465,360 2 161080 -- MSL 25 (19U 56)
-9 16587,18465,360 2 161081 -- MSL 26 (19U 57)
-: 8781,12630 0 161082 -- MSL 27 (19U 58)
-; 8781,12630,3075 0 161083 -- MSL 28 (19U 59)
-< 26346,16068 0 161084 -- MSL 29 (19U 60)
-= 26346,10566 0 161085 -- MSL 30 (19U 61)
-> 26346,16068 0 161086 -- MSL 31 (19U 62)
-? 13662,18315 2 161087 -- MSL 32 (19U 63)
-at 26352,21030,2745 2 161088 -- MSL 33 (19U 64)
-@ "
-A 19515,18135 2 161089 -- MSL 34 (19U 65)
-B 16587,18135 2 161090 -- MSL 35 (19U 66)
-C 18540,18495,360 2 161091 -- MSL 36 (19U 67)
-D 19029,18135 2 161092 -- MSL 37 (19U 68)
-E 15126,18135 2 161093 -- MSL 38 (19U 69)
-F 14637,18135 2 161094 -- MSL 39 (19U 70)
-G 19515,18495,360 2 161095 -- MSL 40 (19U 71)
-H 19029,18135 2 161096 -- MSL 41 (19U 72)
-I 7317,18135 2 161097 -- MSL 42 (19U 73)
-J 14637,18135,360 2 161098 -- MSL 43 (19U 74)
-K 17565,18135 2 161099 -- MSL 44 (19U 75)
-L 14148,18135 2 161100 -- MSL 45 (19U 76)
-M 23907,18135 2 161101 -- MSL 46 (19U 77)
-N 19029,18135 2 161102 -- MSL 47 (19U 78)
-O 20004,18495,360 2 161103 -- MSL 48 (19U 79)
-P 15612,18135 2 161104 -- MSL 49 (19U 80)
-Q 20490,18495,360 2 161105 -- MSL 50 (19U 81)
-R 17076,18135 2 161106 -- MSL 51 (19U 82)
-S 17076,18495,360 2 161107 -- MSL 52 (19U 83)
-T 16587,18135 2 161108 -- MSL 53 (19U 84)
-U 19029,18135,360 2 161109 -- MSL 54 (19U 85)
-V 19029,18135 2 161110 -- MSL 55 (19U 86)
-W 26346,18135 2 161111 -- MSL 56 (19U 87)
-X 19029,18135 2 161112 -- MSL 57 (19U 88)
-Y 18051,18135 2 161113 -- MSL 58 (19U 89)
-Z 16101,18135 2 161114 -- MSL 59 (19U 90)
-lB 8781,18135,2370 2 161115 -- MSL 60 (19U 91)
-[ "
-rs 8781,18135,1380 2 161116 -- MSL 61 (19U 92)
-\ "
-rB 8781,18135,2370 2 161117 -- MSL 62 (19U 93)
-] "
-ha 13173,19758 2 161118 -- MSL 63 (19U 94)
-_ 13173,0,6588 1 161119 -- MSL 64 (19U 95)
-oq 8781,18135 2 161169 -- MSL 66 (19U 145)
-` "
-a 14148,12990,360 0 161121 -- MSL 67 (19U 97)
-b 15126,18165,360 2 161122 -- MSL 68 (19U 98)
-c 14148,12990,360 0 161123 -- MSL 69 (19U 99)
-d 15126,18165,360 2 161124 -- MSL 70 (19U 100)
-e 14148,12990,360 0 161125 -- MSL 71 (19U 101)
-f 9759,18315 2 161126 -- MSL 72 (19U 102)
-g 15126,12990,5088 1 161127 -- MSL 73 (19U 103)
-h 15126,18165 2 161128 -- MSL 74 (19U 104)
-i 6342,18165 2 161129 -- MSL 75 (19U 105)
-j 6342,18165,4995 3 161130 -- MSL 76 (19U 106)
-k 14148,18165 2 161131 -- MSL 77 (19U 107)
-l 6342,18165 2 161132 -- MSL 78 (19U 108)
-m 22932,12990 0 161133 -- MSL 79 (19U 109)
-n 15126,12990 0 161134 -- MSL 80 (19U 110)
-o 15126,12990,360 0 161135 -- MSL 81 (19U 111)
-p 15126,12990,4680 1 161136 -- MSL 82 (19U 112)
-q 15126,12990,4680 1 161137 -- MSL 83 (19U 113)
-r 9270,12990 0 161138 -- MSL 84 (19U 114)
-s 13173,12990,360 0 161139 -- MSL 85 (19U 115)
-t 9759,15963,360 0 161140 -- MSL 86 (19U 116)
-u 15126,12630,360 0 161141 -- MSL 87 (19U 117)
-v 14637,12630 0 161142 -- MSL 88 (19U 118)
-w 22932,12630 0 161143 -- MSL 89 (19U 119)
-x 14637,12630 0 161144 -- MSL 90 (19U 120)
-y 14637,12630,4680 1 161145 -- MSL 91 (19U 121)
-z 12684,12630 0 161146 -- MSL 92 (19U 122)
-{ 11712,20130,6075 3 161147 -- MSL 93 (19U 123)
-lC "
-| 13173,19758,6588 3 161148 -- MSL 94 (19U 124)
-ba "
-} 11712,20130,6075 3 161149 -- MSL 95 (19U 125)
-rC "
-ti 26346,8952 0 161150 -- MSL 96 (19U 126)
-`A 19515,23085 2 161216 -- MSL 99 (19U 192)
-^A 19515,23085 2 161218 -- MSL 100 (19U 194)
-`E 15126,23085 2 161224 -- MSL 101 (19U 200)
-^E 15126,23085 2 161226 -- MSL 102 (19U 202)
-:E 15126,22755 2 161227 -- MSL 103 (19U 203)
-^I 7317,23085 2 161230 -- MSL 104 (19U 206)
-:I 7317,22755 2 161231 -- MSL 105 (19U 207)
-aa 16587,18075 2 161204 -- MSL 106 (19U 180)
-ga 16587,18075 2 161120 -- MSL 107 (19U 96)
-a^ 16587,17985 2 161160 -- MSL 108 (19U 136)
-^ "
-ad 16587,17775 2 161192 -- MSL 109 (19U 168)
-~ 16587,18294 2 161176 -- MSL 110 (19U 152)
-a~ "
-`U 19029,23085,360 2 161241 -- MSL 111 (19U 217)
-^U 19029,23085,360 2 161243 -- MSL 112 (19U 219)
-u00AF 13173,21105 2 161199 -- MSL 113 (19U 175)
-'Y 18051,23085 2 161245 -- MSL 114 (19U 221)
-'y 14637,18075,4680 3 161277 -- MSL 115 (19U 253)
-de 16587,18465 2 161200 -- MSL 116 (19U 176)
-,C 18540,18495,5025 3 161223 -- MSL 117 (19U 199)
-,c 14148,12990,5025 1 161255 -- MSL 118 (19U 231)
-~N 19029,22959 2 161233 -- MSL 119 (19U 209)
-~n 15126,18294 2 161265 -- MSL 120 (19U 241)
-r! 8781,12645,5520 1 161185 -- MSL 121 (19U 161)
-r? 13662,12516,5799 1 161215 -- MSL 122 (19U 191)
-Cs 16587,15684 0 161188 -- MSL 123 (19U 164)
-Po 16587,18465 2 161187 -- MSL 124 (19U 163)
-Ye 16587,18105 2 161189 -- MSL 125 (19U 165)
-sc 16587,18495,360 2 161191 -- MSL 126 (19U 167)
-Fn 16587,18315 2 161155 -- MSL 127 (19U 131)
-ct 16587,18825,720 2 161186 -- MSL 128 (19U 162)
-^a 14148,17985,360 2 161250 -- MSL 129 (19U 226)
-^e 14148,17985,360 2 161258 -- MSL 130 (19U 234)
-^o 15126,17985,360 2 161268 -- MSL 131 (19U 244)
-^u 15126,17985,360 2 161275 -- MSL 132 (19U 251)
-'a 14148,18075,360 2 161249 -- MSL 133 (19U 225)
-'e 14148,18075,360 2 161257 -- MSL 134 (19U 233)
-'o 15126,18075,360 2 161267 -- MSL 135 (19U 243)
-'u 15126,18075,360 2 161274 -- MSL 136 (19U 250)
-`a 14148,18075,360 2 161248 -- MSL 137 (19U 224)
-`e 14148,18075,360 2 161256 -- MSL 138 (19U 232)
-`o 15126,18075,360 2 161266 -- MSL 139 (19U 242)
-`u 15126,18075,360 2 161273 -- MSL 140 (19U 249)
-:a 14148,17775,360 2 161252 -- MSL 141 (19U 228)
-:e 14148,17775,360 2 161259 -- MSL 142 (19U 235)
-:o 15126,17775,360 2 161270 -- MSL 143 (19U 246)
-:u 15126,17775,360 2 161276 -- MSL 144 (19U 252)
-oA 19515,25923 2 161221 -- MSL 145 (19U 197)
-^i 6342,17985 2 161262 -- MSL 146 (19U 238)
-/O 20004,18495,375 2 161240 -- MSL 147 (19U 216)
-AE 25857,18165 2 161222 -- MSL 148 (19U 198)
-oa 14148,20412,360 2 161253 -- MSL 149 (19U 229)
-'i 6342,18075 2 161261 -- MSL 150 (19U 237)
-/o 15126,13008,408 0 161272 -- MSL 151 (19U 248)
-ae 22443,12990,360 0 161254 -- MSL 152 (19U 230)
-:A 19515,22755 2 161220 -- MSL 153 (19U 196)
-`i 6342,18075 2 161260 -- MSL 154 (19U 236)
-:O 20004,22755,360 2 161238 -- MSL 155 (19U 214)
-:U 19029,22755,360 2 161244 -- MSL 156 (19U 220)
-'E 15126,23085 2 161225 -- MSL 157 (19U 201)
-:i 6342,17775 2 161263 -- MSL 158 (19U 239)
-ss 16101,18165,360 2 161247 -- MSL 159 (19U 223)
-^O 20004,23085,360 2 161236 -- MSL 160 (19U 212)
-'A 19515,23085 2 161217 -- MSL 161 (19U 193)
-~A 19515,22959 2 161219 -- MSL 162 (19U 195)
-~a 14148,18294,360 2 161251 -- MSL 163 (19U 227)
--D 19029,18135 2 161232 -- MSL 164 (19U 208)
-Sd 15126,18315,360 2 161264 -- MSL 165 (19U 240)
-'I 7317,23085 2 161229 -- MSL 166 (19U 205)
-`I 7317,23085 2 161228 -- MSL 167 (19U 204)
-'O 20004,23085,360 2 161235 -- MSL 168 (19U 211)
-`O 20004,23085,360 2 161234 -- MSL 169 (19U 210)
-~O 20004,22959,360 2 161237 -- MSL 170 (19U 213)
-~o 15126,18294,360 2 161269 -- MSL 171 (19U 245)
-vS 17076,23085,360 2 161162 -- MSL 172 (19U 138)
-vs 13173,17985,360 2 161178 -- MSL 173 (19U 154)
-'U 19029,23085,360 2 161242 -- MSL 174 (19U 218)
-:Y 18051,22755 2 161183 -- MSL 175 (19U 159)
-:y 14637,17775,4680 3 161279 -- MSL 176 (19U 255)
-TP 15612,18135 2 161246 -- MSL 177 (19U 222)
-Tp 15126,18165,4680 3 161278 -- MSL 178 (19U 254)
-mc 14637,12630,4350 0 161205 -- MSL 180 (19U 181)
-ps 16587,19635,4200 2 161206 -- MSL 181 (19U 182)
-34 26346,18465,1020 2 161214 -- MSL 182 (19U 190)
-\- 26346,8100 0 60096 -- MSL 183 ( 7J 192)
-14 26346,18465,1020 2 161212 -- MSL 184 (19U 188)
-12 26346,18465,1020 2 161213 -- MSL 185 (19U 189)
-Of 10734,18465 2 161194 -- MSL 186 (19U 170)
-Om 10734,18465 2 161210 -- MSL 187 (19U 186)
-Fo 14637,11085 0 161195 -- MSL 188 (19U 171)
-Fc 14637,11085 0 161211 -- MSL 190 (19U 187)
-t+- 26346,14985 0 161201 -- MSL 191 (19U 177)
-bb 13173,19083,5916 3 161190 -- MSL 192 (19U 166)
-co 13173,19635 2 161193 -- MSL 193 (19U 169)
-tno 26346,11607 0 161196 -- MSL 194 (19U 172)
-u00AD 8781,7755 0 161197 -- MSL 195 (19U 173)
-rg 13173,19635 2 161198 -- MSL 196 (19U 174)
-S2 10245,18465 2 161202 -- MSL 197 (19U 178)
-S3 10245,18465 2 161203 -- MSL 198 (19U 179)
-ac 16587,0,5025 1 161208 -- MSL 199 (19U 184)
-S1 10245,18345 2 161209 -- MSL 200 (19U 185)
-tmu 26346,14010 0 161239 -- MSL 201 (19U 215)
-tdi 26346,12315 0 161271 -- MSL 202 (19U 247)
-u203C 13917,18165 2 87315 -- MSL 221 (10U 19)
-u20A7 25371,18135,360 2 60121 -- MSL 232 ( 7J 217)
-pc 8781,10509 0 161207 -- MSL 302 (19U 183)
-u013F 14148,18135 2 51943 -- MSL 306 ( 6J 231)
-u0140 9570,18165 2 51959 -- MSL 307 ( 6J 247)
-u2113 16587,18150,297 2 60122 -- MSL 308 ( 7J 218)
-u0149 18054,18135 2 51951 -- MSL 309 ( 6J 239)
-fm 8781,18105 2 60101 -- MSL 310 ( 7J 197)
-sd 16587,18105 2 60102 -- MSL 311 ( 7J 198)
-dg 16587,18135 2 161158 -- MSL 312 (19U 134)
-tm 16128,17850 2 161177 -- MSL 313 (19U 153)
-u2017 13173,0,6588 1 60095 -- MSL 314 ( 7J 191)
-ah 16587,17985 2 75169 -- MSL 315 ( 9E 161)
-ao 16587,20412 2 60152 -- MSL 316 ( 7J 248)
-f/ 1464,18465,1020 2 60109 -- MSL 324 ( 7J 205)
-em 26346,7425 0 161175 -- MSL 325 (19U 151)
-en 16587,7425 0 161174 -- MSL 326 (19U 150)
-dd 16587,18135 2 161159 -- MSL 327 (19U 135)
-.i 6342,12630 0 46333 -- MSL 328 ( 5T 253)
-aq 8781,18237 2 161063 -- MSL 329 (19U 39)
-bu 13173,14226 0 161173 -- MSL 331 (19U 149)
-u207F 10245,18465 2 87548 -- MSL 332 (10U 252)
-u0111 15126,18165,360 2 75248 -- MSL 342 ( 9E 240)
-u0041_0306 19515,23160 2 75203 -- MSL 400 ( 9E 195)
-u0061_0306 14148,17985,360 2 75235 -- MSL 401 ( 9E 227)
-u0041_0328 19515,18135,4530 2 75173 -- MSL 404 ( 9E 165)
-u0061_0328 14148,12990,4704 1 75193 -- MSL 405 ( 9E 185)
-'C 18540,23085,360 2 75206 -- MSL 406 ( 9E 198)
-'c 14148,18075,360 2 75238 -- MSL 407 ( 9E 230)
-u0041_030C 18540,23085,360 2 75208 -- MSL 410 ( 9E 200)
-u0061_030C 14148,17985,360 2 75240 -- MSL 411 ( 9E 232)
-u0044_030C 19029,23085 2 75215 -- MSL 414 ( 9E 207)
-u0064_030C 17565,19650,360 2 75247 -- MSL 415 ( 9E 239)
-u0045_030C 15126,23085 2 75212 -- MSL 416 ( 9E 204)
-u0065_030C 14148,17985,360 2 75244 -- MSL 417 ( 9E 236)
-u0045_0328 15126,18135,4530 2 75210 -- MSL 422 ( 9E 202)
-u0065_0328 14148,12990,4704 1 75242 -- MSL 423 ( 9E 234)
-u004C_0301 14148,23085 2 75205 -- MSL 440 ( 9E 197)
-u006C_0301 6342,23130 2 75237 -- MSL 441 ( 9E 229)
-u004C_030C 14148,19650 2 75196 -- MSL 442 ( 9E 188)
-u006C_030C 8781,19650 2 75198 -- MSL 443 ( 9E 190)
-u004E_0301 19029,23085 2 75217 -- MSL 446 ( 9E 209)
-u006E_0301 15126,18075 2 75249 -- MSL 447 ( 9E 241)
-u004E_030C 19029,23085 2 75218 -- MSL 448 ( 9E 210)
-u006E_030C 15126,17985 2 75250 -- MSL 449 ( 9E 242)
-u004F_030B 20004,23085,360 2 75221 -- MSL 452 ( 9E 213)
-u006F_030B 15126,18075,360 2 75253 -- MSL 453 ( 9E 245)
-u0052_0301 17076,23085 2 75200 -- MSL 456 ( 9E 192)
-u0072_0301 9270,18075 2 75232 -- MSL 457 ( 9E 224)
-u0052_030C 17076,23085 2 75224 -- MSL 458 ( 9E 216)
-u0072_030C 9270,17985 2 75256 -- MSL 459 ( 9E 248)
-u0053_0301 17076,23085,360 2 75148 -- MSL 462 ( 9E 140)
-u0073_0301 13173,18075,360 2 75164 -- MSL 463 ( 9E 156)
-u0054_030C 16587,23085 2 75149 -- MSL 466 ( 9E 141)
-u0074_030C 10734,19650,360 2 75165 -- MSL 467 ( 9E 157)
-u0054_0327 16587,18135,5025 3 75230 -- MSL 468 ( 9E 222)
-u0074_0327 9759,15963,5025 1 75262 -- MSL 469 ( 9E 254)
-u0055_030B 19029,23085,360 2 75227 -- MSL 474 ( 9E 219)
-u0075_030B 15126,18075,360 2 75259 -- MSL 475 ( 9E 251)
-u0055_030A 19029,25173,360 2 75225 -- MSL 476 ( 9E 217)
-u0075_030A 15126,20412,360 2 75257 -- MSL 477 ( 9E 249)
-u005A_0301 16101,23085 2 75151 -- MSL 482 ( 9E 143)
-u007A_0301 12684,18075 2 75167 -- MSL 483 ( 9E 159)
-u005A_0307 16101,22755 2 75183 -- MSL 484 ( 9E 175)
-u007A_0307 12684,17775 2 75199 -- MSL 485 ( 9E 191)
-u2070 10245,18465 2 51753 -- MSL 1000 ( 6J 41)
-u2074 10245,18345 2 51748 -- MSL 1001 ( 6J 36)
-u2075 10245,18345 2 51749 -- MSL 1002 ( 6J 37)
-u2076 10245,18465 2 51806 -- MSL 1003 ( 6J 94)
-u2077 10245,18345 2 51750 -- MSL 1004 ( 6J 38)
-u2078 10245,18465 2 51754 -- MSL 1005 ( 6J 42)
-u2079 10245,18465 2 51752 -- MSL 1006 ( 6J 40)
-lq 13173,18135 2 161171 -- MSL 1017 (19U 147)
-rq 13173,18135 2 161172 -- MSL 1018 (19U 148)
-Bq 13173,3015,3060 0 161156 -- MSL 1019 (19U 132)
-u2003 26346,0 0 51821 -- MSL 1020 ( 6J 109)
-u2002 16587,0 0 51822 -- MSL 1021 ( 6J 110)
-u2009 8781,0 0 51828 -- MSL 1023 ( 6J 116)
-u2026 26346,2745 0 161157 -- MSL 1028 (19U 133)
-vz 12684,17985 2 75166 -- MSL 1031 ( 9E 158)
-u2120 16128,18000 2 128299 -- MSL 1034 (15U 43)
-u211E 20004,18315,4056 2 51794 -- MSL 1036 ( 6J 82)
-fi 16101,18315 2 60077 -- MSL 1040 ( 7J 173)
-fl 16101,18315 2 60078 -- MSL 1041 ( 7J 174)
-ff 18051,18315 2 51883 -- MSL 1042 ( 6J 171)
-Fi 24396,18315 2 51884 -- MSL 1043 ( 6J 172)
-Fl 24396,18315 2 51885 -- MSL 1044 ( 6J 173)
-ij 12684,18165,4995 3 60134 -- MSL 1047 ( 7J 230)
-u2105 25374,18495,360 2 60072 -- MSL 1060 ( 7J 168)
-u0047_0306 19515,23160,360 2 46288 -- MSL 1061 ( 5T 208)
-u0067_0306 15126,17985,5088 3 46320 -- MSL 1062 ( 5T 240)
-u0053_0327 17076,18495,5025 3 75178 -- MSL 1063 ( 9E 170)
-u0073_0327 13173,12990,5025 1 75194 -- MSL 1064 ( 9E 186)
-u0049_0307 7317,22755 2 46301 -- MSL 1065 ( 5T 221)
-bq 8781,3015,3060 0 161154 -- MSL 1067 (19U 130)
-%0 26346,18720,840 2 161161 -- MSL 1068 (19U 137)
-a- 16587,16845 2 60154 -- MSL 1084 ( 7J 250)
-ab 16587,17985 2 75170 -- MSL 1086 ( 9E 162)
-a. 16587,17775 2 75263 -- MSL 1088 ( 9E 255)
-oe 23907,12990,360 0 161180 -- MSL 1090 (19U 156)
-OE 26346,18270,135 2 161164 -- MSL 1091 (19U 140)
-fo 9759,11085 0 161163 -- MSL 1092 (19U 139)
-fc 9759,11085 0 161179 -- MSL 1093 (19U 155)
-sq 19029,15624 0 60091 -- MSL 1094 ( 7J 187)
-/L 14148,18135 2 75171 -- MSL 1095 ( 9E 163)
-/l 6342,18165 2 75187 -- MSL 1096 ( 9E 179)
-a" 16587,18075 2 75197 -- MSL 1097 ( 9E 189)
-ho 16587,1425,4704 1 75186 -- MSL 1098 ( 9E 178)
-vZ 16101,23085 2 75150 -- MSL 1106 ( 9E 142)
-IJ 21354,18135,360 2 60135 -- MSL 1107 ( 7J 231)
diff --git a/contrib/groff/font/devlj4/WINGDINGS b/contrib/groff/font/devlj4/WINGDINGS
deleted file mode 100644
index ae03702365e5..000000000000
--- a/contrib/groff/font/devlj4/WINGDINGS
+++ /dev/null
@@ -1,230 +0,0 @@
-# Wingdings
-name WINGDINGS
-spacewidth 26458
-pcltypeface 31402
-pclproportional 1
-pclweight 0
-pclstyle 0
-charset
-u270F 27259,19598,478 2 4746273 -- HP PUA U+F021 (579L 33)
-u2702 30282,19120 2 4746274 -- HP PUA U+F022 (579L 34)
-u2701 34429,20451 2 4746275 -- HP PUA U+F023 (579L 35)
---- 35553,13255 0 4746276 -- HP PUA U+F024 (579L 36)
---- 23642,19598,478 2 4746277 -- HP PUA U+F025 (579L 37)
---- 32194,20399,323 2 4746278 -- HP PUA U+F026 (579L 38)
---- 12118,19521,478 2 4746279 -- HP PUA U+F027 (579L 39)
-u260E 28680,19598 2 4746280 -- HP PUA U+F028 (579L 40)
-u2706 23590,19120 2 4746281 -- HP PUA U+F029 (579L 41)
-u2709 29959,19120 2 4746282 -- HP PUA U+F02A (579L 42)
---- 29959,19120 2 4746283 -- HP PUA U+F02B (579L 43)
---- 30993,19120 2 4746284 -- HP PUA U+F02C (579L 44)
---- 30993,20942 2 4746285 -- HP PUA U+F02D (579L 45)
---- 38124,20942 2 4746286 -- HP PUA U+F02E (579L 46)
---- 38189,19069 2 4746287 -- HP PUA U+F02F (579L 47)
---- 29003,19120 2 4746288 -- HP PUA U+F030 (579L 48)
---- 35540,19120 2 4746289 -- HP PUA U+F031 (579L 49)
---- 18487,19120 2 4746290 -- HP PUA U+F032 (579L 50)
---- 18487,19120 2 4746291 -- HP PUA U+F033 (579L 51)
---- 23590,19120,5103 3 4746292 -- HP PUA U+F034 (579L 52)
---- 14663,19120 2 4746293 -- HP PUA U+F035 (579L 53)
-u231B 15929,19598,478 2 4746294 -- HP PUA U+F036 (579L 54)
-u2328 28370,19598 2 4746295 -- HP PUA U+F037 (579L 55)
---- 25076,20877,478 2 4746296 -- HP PUA U+F038 (579L 56)
---- 28525,15787 0 4746297 -- HP PUA U+F039 (579L 57)
---- 24856,19120 2 4746298 -- HP PUA U+F03A (579L 58)
---- 23577,8927 0 4746299 -- HP PUA U+F03B (579L 59)
---- 23590,19120 2 4746300 -- HP PUA U+F03C (579L 60)
---- 23590,19120 2 4746301 -- HP PUA U+F03D (579L 61)
-u2707 23577,19120 2 4746302 -- HP PUA U+F03E (579L 62)
-u270D 24068,14159 0 4746303 -- HP PUA U+F03F (579L 63)
---- 24068,14159 0 4746304 -- HP PUA U+F040 (579L 64)
-u270C 15542,20722,323 2 4746305 -- HP PUA U+F041 (579L 65)
---- 20981,20722,930 2 4746306 -- HP PUA U+F042 (579L 66)
---- 17841,19598 2 4746307 -- HP PUA U+F043 (579L 67)
---- 17841,16033,478 0 4746308 -- HP PUA U+F044 (579L 68)
-u261C 24921,15477 0 4746309 -- HP PUA U+F045 (579L 69)
-u261E 24921,15477 0 4746310 -- HP PUA U+F046 (579L 70)
-u261D 14521,19973,478 2 4746311 -- HP PUA U+F047 (579L 71)
-u261F 14521,19973,478 2 4746312 -- HP PUA U+F048 (579L 72)
---- 23590,20722,323 2 4746313 -- HP PUA U+F049 (579L 73)
-u263A 22311,19598,478 2 4746314 -- HP PUA U+F04A (579L 74)
---- 22311,19598,478 2 4746315 -- HP PUA U+F04B (579L 75)
-u2639 22311,19598,478 2 4746316 -- HP PUA U+F04C (579L 76)
---- 29391,19598,478 2 4746317 -- HP PUA U+F04D (579L 77)
-u2620 17467,19598,478 2 4746318 -- HP PUA U+F04E (579L 78)
---- 22466,20399,2713 2 4746319 -- HP PUA U+F04F (579L 79)
---- 28810,21523 2 4746320 -- HP PUA U+F050 (579L 80)
-u2708 23500,19120 2 4746321 -- HP PUA U+F051 (579L 81)
-u263C 23293,19120 2 4746322 -- HP PUA U+F052 (579L 82)
---- 17208,19120 2 4746323 -- HP PUA U+F053 (579L 83)
-u2744 21510,19120 2 4746324 -- HP PUA U+F054 (579L 84)
---- 19753,19120 2 4746325 -- HP PUA U+F055 (579L 85)
-u271E 19753,19120 2 4746326 -- HP PUA U+F056 (579L 86)
---- 19120,19120 2 4746327 -- HP PUA U+F057 (579L 87)
-u2720 18345,16498 0 4746328 -- HP PUA U+F058 (579L 88)
-u2721 21019,19120 2 4746329 -- HP PUA U+F059 (579L 89)
-u262A 23422,19120 2 4746330 -- HP PUA U+F05A (579L 90)
-u262F 23590,19120 2 4746331 -- HP PUA U+F05B (579L 91)
-u0950 23694,19598,491 2 4746332 -- HP PUA U+F05C (579L 92)
-u2638 23577,19120 2 4746333 -- HP PUA U+F05D (579L 93)
-u2648 30592,19611,5103 3 4746334 -- HP PUA U+F05E (579L 94)
-u2649 27892,19120,5413 3 4746335 -- HP PUA U+F05F (579L 95)
-u264A 25502,20309,1279 2 4746336 -- HP PUA U+F060 (579L 96)
-u264B 28848,19133 2 4746337 -- HP PUA U+F061 (579L 97)
-u264C 24895,20722,5413 3 4746338 -- HP PUA U+F062 (579L 98)
-u264D 24688,19469,5103 3 4746339 -- HP PUA U+F063 (579L 99)
-u264E 25024,19120 2 4746340 -- HP PUA U+F064 (579L 100)
-u264F 27117,19495,5361 3 4746341 -- HP PUA U+F065 (579L 101)
-u2650 24572,19598,478 2 4746342 -- HP PUA U+F066 (579L 102)
-u2651 29003,19611,3824 2 4746343 -- HP PUA U+F067 (579L 103)
-u2652 28177,17531 0 4746344 -- HP PUA U+F068 (579L 104)
-u2653 20632,19598,478 2 4746345 -- HP PUA U+F069 (579L 105)
-u0026 27776,15167,2713 0 4746346 -- HP PUA U+F06A (579L 106)
-u0026 33628,19598,4147 2 4746347 -- HP PUA U+F06B (579L 107)
-u25CF 19753,17208 0 4746348 -- HP PUA U+F06C (579L 108)
-u274D 25205,19120 2 4746349 -- HP PUA U+F06D (579L 109)
-u25A0 19753,17208 0 4746350 -- HP PUA U+F06E (579L 110)
-u25A1 23577,19120 2 4746351 -- HP PUA U+F06F (579L 111)
---- 23577,19120 2 4746352 -- HP PUA U+F070 (579L 112)
-u2751 23577,19120 2 4746353 -- HP PUA U+F071 (579L 113)
-u2752 23577,19120 2 4746354 -- HP PUA U+F072 (579L 114)
---- 12105,14973 0 4746355 -- HP PUA U+F073 (579L 115)
-u2666 19753,20386,1253 2 4746356 -- HP PUA U+F074 (579L 116)
-u25C6 26097,20386,1253 2 4746357 -- HP PUA U+F075 (579L 117)
-u2756 23577,19120 2 4746358 -- HP PUA U+F076 (579L 118)
---- 15283,14973 0 4746359 -- HP PUA U+F077 (579L 119)
-u2327 28047,19120 2 4746360 -- HP PUA U+F078 (579L 120)
-u2353 28047,19120 2 4746361 -- HP PUA U+F079 (579L 121)
-u2318 23577,19120 2 4746362 -- HP PUA U+F07A (579L 122)
-u2740 23590,18746 0 4746363 -- HP PUA U+F07B (579L 123)
-u273F 23590,19017 2 4746364 -- HP PUA U+F07C (579L 124)
-u275D 14030,20399 2 4746365 -- HP PUA U+F07D (579L 125)
-u275E 14030,20399 2 4746366 -- HP PUA U+F07E (579L 126)
-u24EA 23590,19120 2 4746368 -- HP PUA U+F080 (579L 128)
-u2460 23590,19120 2 4746369 -- HP PUA U+F081 (579L 129)
-u2461 23590,19120 2 4746370 -- HP PUA U+F082 (579L 130)
-u2462 23590,19120 2 4746371 -- HP PUA U+F083 (579L 131)
-u2463 23590,19120 2 4746372 -- HP PUA U+F084 (579L 132)
-u2464 23590,19120 2 4746373 -- HP PUA U+F085 (579L 133)
-u2465 23590,19120 2 4746374 -- HP PUA U+F086 (579L 134)
-u2466 23590,19120 2 4746375 -- HP PUA U+F087 (579L 135)
-u2467 23590,19120 2 4746376 -- HP PUA U+F088 (579L 136)
-u2468 23590,19120 2 4746377 -- HP PUA U+F089 (579L 137)
-u2469 23590,19120 2 4746378 -- HP PUA U+F08A (579L 138)
-u24FF 23590,19120 2 4746379 -- HP PUA U+F08B (579L 139)
-u2776 23590,19120 2 4746380 -- HP PUA U+F08C (579L 140)
-u2777 23590,19120 2 4746381 -- HP PUA U+F08D (579L 141)
-u2778 23590,19120 2 4746382 -- HP PUA U+F08E (579L 142)
-u2779 23590,19120 2 4746383 -- HP PUA U+F08F (579L 143)
-u277A 23590,19120 2 4746384 -- HP PUA U+F090 (579L 144)
-u277B 23590,19120 2 4746385 -- HP PUA U+F091 (579L 145)
-u277C 23590,19120 2 4746386 -- HP PUA U+F092 (579L 146)
-u277D 23590,19120 2 4746387 -- HP PUA U+F093 (579L 147)
-u277E 23590,19120 2 4746388 -- HP PUA U+F094 (579L 148)
-u277F 23590,19120 2 4746389 -- HP PUA U+F095 (579L 149)
---- 26458,14030 0 4746390 -- HP PUA U+F096 (579L 150)
---- 26458,14030 0 4746391 -- HP PUA U+F097 (579L 151)
---- 26458,14030 0 4746392 -- HP PUA U+F098 (579L 152)
---- 26458,14030 0 4746393 -- HP PUA U+F099 (579L 153)
---- 26458,14030 0 4746394 -- HP PUA U+F09A (579L 154)
---- 26458,14030 0 4746395 -- HP PUA U+F09B (579L 155)
---- 26458,14030 0 4746396 -- HP PUA U+F09C (579L 156)
---- 26458,14030 0 4746397 -- HP PUA U+F09D (579L 157)
-u00B7 8281,11472 0 4746398 -- HP PUA U+F09E (579L 158)
-u2022 12105,13384 0 4746399 -- HP PUA U+F09F (579L 159)
-u25AA 8281,11472 0 4746400 -- HP PUA U+F0A0 (579L 160)
-u25CB 23577,19120 2 4746401 -- HP PUA U+F0A1 (579L 161)
---- 23577,19120 2 4746402 -- HP PUA U+F0A2 (579L 162)
---- 23577,19120 2 4746403 -- HP PUA U+F0A3 (579L 163)
-u25C9 23577,19120 2 4746404 -- HP PUA U+F0A4 (579L 164)
-u25CE 23577,19120 2 4746405 -- HP PUA U+F0A5 (579L 165)
---- 25205,19120 2 4746406 -- HP PUA U+F0A6 (579L 166)
-u25AA 12105,13384 0 4746407 -- HP PUA U+F0A7 (579L 167)
-u25FB 23577,19120 2 4746408 -- HP PUA U+F0A8 (579L 168)
---- 23577,19120 2 4746409 -- HP PUA U+F0A9 (579L 169)
-u2726 23577,19120 2 4746410 -- HP PUA U+F0AA (579L 170)
-u2605 23577,19120 2 4746411 -- HP PUA U+F0AB (579L 171)
-u2736 23577,19120 2 4746412 -- HP PUA U+F0AC (579L 172)
-u2734 23577,19120 2 4746413 -- HP PUA U+F0AD (579L 173)
-u2739 23577,19120 2 4746414 -- HP PUA U+F0AE (579L 174)
-u2735 23577,19120 2 4746415 -- HP PUA U+F0AF (579L 175)
---- 23577,19120 2 4746416 -- HP PUA U+F0B0 (579L 176)
-u2316 23577,19120 2 4746417 -- HP PUA U+F0B1 (579L 177)
-u2727 23577,19120 2 4746418 -- HP PUA U+F0B2 (579L 178)
-u2311 23577,16769 0 4746419 -- HP PUA U+F0B3 (579L 179)
---- 23577,19120 2 4746420 -- HP PUA U+F0B4 (579L 180)
-u272A 23577,19120 2 4746421 -- HP PUA U+F0B5 (579L 181)
-u2730 23577,19120 2 4746422 -- HP PUA U+F0B6 (579L 182)
---- 23577,19120 2 4746423 -- HP PUA U+F0B7 (579L 183)
---- 23577,19120 2 4746424 -- HP PUA U+F0B8 (579L 184)
---- 23577,19120 2 4746425 -- HP PUA U+F0B9 (579L 185)
---- 23577,19120 2 4746426 -- HP PUA U+F0BA (579L 186)
---- 23577,19120 2 4746427 -- HP PUA U+F0BB (579L 187)
---- 23577,19120 2 4746428 -- HP PUA U+F0BC (579L 188)
---- 23577,19120 2 4746429 -- HP PUA U+F0BD (579L 189)
---- 23577,19120 2 4746430 -- HP PUA U+F0BE (579L 190)
---- 23577,19120 2 4746431 -- HP PUA U+F0BF (579L 191)
---- 23577,19120 2 4746432 -- HP PUA U+F0C0 (579L 192)
---- 23577,19120 2 4746433 -- HP PUA U+F0C1 (579L 193)
---- 23577,19120 2 4746434 -- HP PUA U+F0C2 (579L 194)
---- 23577,20877,2390 2 4746435 -- HP PUA U+F0C3 (579L 195)
---- 23577,20877,2390 2 4746436 -- HP PUA U+F0C4 (579L 196)
---- 23577,20877,2390 2 4746437 -- HP PUA U+F0C5 (579L 197)
---- 23577,20877,2390 2 4746438 -- HP PUA U+F0C6 (579L 198)
---- 27724,19120 2 4746439 -- HP PUA U+F0C7 (579L 199)
---- 27724,19120 2 4746440 -- HP PUA U+F0C8 (579L 200)
---- 27724,19120 2 4746441 -- HP PUA U+F0C9 (579L 201)
---- 27724,19120 2 4746442 -- HP PUA U+F0CA (579L 202)
---- 26458,20244,5103 3 4746443 -- HP PUA U+F0CB (579L 203)
---- 26458,20877,5581 3 4746444 -- HP PUA U+F0CC (579L 204)
---- 26458,20244,4935 3 4746445 -- HP PUA U+F0CD (579L 205)
---- 26458,20244,4935 3 4746446 -- HP PUA U+F0CE (579L 206)
---- 26458,20244,4935 3 4746447 -- HP PUA U+F0CF (579L 207)
---- 26458,20244,4935 3 4746448 -- HP PUA U+F0D0 (579L 208)
---- 26458,20244,4948 3 4746449 -- HP PUA U+F0D1 (579L 209)
---- 26458,20244,4935 3 4746450 -- HP PUA U+F0D2 (579L 210)
---- 26458,20244,4935 3 4746451 -- HP PUA U+F0D3 (579L 211)
---- 26458,20257,4935 3 4746452 -- HP PUA U+F0D4 (579L 212)
-u232B 33150,19120 2 4746453 -- HP PUA U+F0D5 (579L 213)
-u2326 33150,19120 2 4746454 -- HP PUA U+F0D6 (579L 214)
---- 21019,19120 2 4746455 -- HP PUA U+F0D7 (579L 215)
-u27A2 21019,19120 2 4746456 -- HP PUA U+F0D8 (579L 216)
---- 23577,19120 2 4746457 -- HP PUA U+F0D9 (579L 217)
---- 23577,16562 0 4746458 -- HP PUA U+F0DA (579L 218)
---- 23577,19120 2 4746459 -- HP PUA U+F0DB (579L 219)
-u27B2 23577,19120 2 4746460 -- HP PUA U+F0DC (579L 220)
---- 23577,19120 2 4746461 -- HP PUA U+F0DD (579L 221)
---- 23577,18578 0 4746462 -- HP PUA U+F0DE (579L 222)
---- 25916,19120 2 4746463 -- HP PUA U+F0DF (579L 223)
---- 25916,19120 2 4746464 -- HP PUA U+F0E0 (579L 224)
---- 23577,19120,2338 2 4746465 -- HP PUA U+F0E1 (579L 225)
---- 23577,21459 2 4746466 -- HP PUA U+F0E2 (579L 226)
---- 20528,17596 0 4746467 -- HP PUA U+F0E3 (579L 227)
---- 20528,17596 0 4746468 -- HP PUA U+F0E4 (579L 228)
---- 20528,17596 0 4746469 -- HP PUA U+F0E5 (579L 229)
---- 20528,17596 0 4746470 -- HP PUA U+F0E6 (579L 230)
---- 28241,19120 2 4746471 -- HP PUA U+F0E7 (579L 231)
-u2794 28241,19120 2 4746472 -- HP PUA U+F0E8 (579L 232)
---- 23577,19120,4664 3 4746473 -- HP PUA U+F0E9 (579L 233)
---- 23577,23784 2 4746474 -- HP PUA U+F0EA (579L 234)
---- 23086,18875 2 4746475 -- HP PUA U+F0EB (579L 235)
---- 23086,18875 2 4746476 -- HP PUA U+F0EC (579L 236)
---- 23086,18875 2 4746477 -- HP PUA U+F0ED (579L 237)
---- 23086,18875 2 4746478 -- HP PUA U+F0EE (579L 238)
-u21E6 23577,17738 0 4746479 -- HP PUA U+F0EF (579L 239)
-u21E8 23577,17738 0 4746480 -- HP PUA U+F0F0 (579L 240)
-u21E7 21446,19120 2 4746481 -- HP PUA U+F0F1 (579L 241)
-u21E9 21446,19120 2 4746482 -- HP PUA U+F0F2 (579L 242)
-u2B04 28047,17738 0 4746483 -- HP PUA U+F0F3 (579L 243)
-u21F3 21446,19120,4470 2 4746484 -- HP PUA U+F0F4 (579L 244)
-u2B00 20683,19120 2 4746485 -- HP PUA U+F0F5 (579L 245)
-u2B01 20683,19120 2 4746486 -- HP PUA U+F0F6 (579L 246)
-u2B03 20683,16226 0 4746487 -- HP PUA U+F0F7 (579L 247)
-u2B02 20683,16226 0 4746488 -- HP PUA U+F0F8 (579L 248)
-u25AD 12751,13384 0 4746489 -- HP PUA U+F0F9 (579L 249)
-u25AB 10193,13384 0 4746490 -- HP PUA U+F0FA (579L 250)
-u2717 16808,15852 0 4746491 -- HP PUA U+F0FB (579L 251)
-u2713 20787,20257 2 4746492 -- HP PUA U+F0FC (579L 252)
-u2612 23590,19120 2 4746493 -- HP PUA U+F0FD (579L 253)
-u2611 23590,20167 2 4746494 -- HP PUA U+F0FE (579L 254)
---- 27376,19844 2 4746495 -- HP PUA U+F0FF (579L 255)
diff --git a/contrib/groff/font/devlj4/generate/Makefile b/contrib/groff/font/devlj4/generate/Makefile
deleted file mode 100644
index 88a8cba7dd1a..000000000000
--- a/contrib/groff/font/devlj4/generate/Makefile
+++ /dev/null
@@ -1,266 +0,0 @@
-# Copyright (C) 1994, 2002, 2003, 2004 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-# Directory containing Autofont TFM files.
-# The TFM files used are available for ftp as
-#
-# ftp://ftp.hp.com/pub/faxes/software/tfmlj4p.exe
-#
-# This is a self-extracting MS-DOS archive (in ZIP format).
-#
-# Metric files for the Arial and Times New Roman families and the Symbol
-# font have been replaced with versions which have more glyphs and/or
-# kerning pairs:
-#
-# ftp://ftp.ffii.org/pub/groff/contrib/lj4/tfmlj4x.zip
-
-# This is set up so you can do
-# make -f generate/Makefile
-# in the parent directory of this directory.
-
-AUTOFONT=/usr/local/lib/groff-lj4
-HPFTODIT=hpftodit
-# .05 em
-IFLAG=-i 50
-SFLAG=-s
-srcdir=generate
-TEXTMAP=$(srcdir)/text.map
-SPECIALMAP=$(srcdir)/special.map
-SYMBOLMAP=$(srcdir)/symbol.map
-WINGDINGSMAP=$(srcdir)/wingdings.map
-
-FONTS=\
- AB ABI AI AR \
- ALBB ALBR \
- AOB AOI AOR \
- CB CBI CI CR \
- GB GBI GI GR \
- LGB LGI LGR \
- OB OBI OI OR \
- TB TBI TI TR \
- TNRB TNRBI TNRI TNRR \
- UB UBI UI UR \
- UCB UCBI UCI UCR \
- CLARENDON CORONET MARIGOLD S \
- SYMBOL WINGDINGS
-
-all: $(FONTS)
-
-#
-# Intellifont
-#
-
-# CG Times
-TR: $(AUTOFONT)/9nb00086.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00086.tfm $(TEXTMAP) $@
-
-# CG Times Italic
-TI: $(AUTOFONT)/9nb00084.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00084.tfm $(TEXTMAP) $@
-
-# CG Times Bold
-TB: $(AUTOFONT)/9nb00083.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00083.tfm $(TEXTMAP) $@
-
-# CG Times Bold Italic
-TBI: $(AUTOFONT)/9nb00085.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00085.tfm $(TEXTMAP) $@
-
-# Courier
-CR: $(AUTOFONT)/9nb00064.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00064.tfm $(TEXTMAP) $@
-
-# Courier Italic
-CI: $(AUTOFONT)/9nb00062.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00062.tfm $(TEXTMAP) $@
-
-# Courier Bold
-CB: $(AUTOFONT)/9nb00061.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00061.tfm $(TEXTMAP) $@
-
-# Courier Bold Italic
-CBI: $(AUTOFONT)/9nb00063.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00063.tfm $(TEXTMAP) $@
-
-# Garamond Antiqua
-GR: $(AUTOFONT)/9nb00068.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00068.tfm $(TEXTMAP) $@
-
-# Garamond Kursiv
-GI: $(AUTOFONT)/9nb00066.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00066.tfm $(TEXTMAP) $@
-
-# Garamond Halbfett
-GB: $(AUTOFONT)/9nb00065.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00065.tfm $(TEXTMAP) $@
-
-# Garamond Kursiv Halbfett
-GBI: $(AUTOFONT)/9nb00067.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00067.tfm $(TEXTMAP) $@
-
-# Omega
-OR: $(AUTOFONT)/9nb00076.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00076.tfm $(TEXTMAP) $@
-
-# Omega Italic
-OI: $(AUTOFONT)/9nb00074.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00074.tfm $(TEXTMAP) $@
-
-# Omega Bold
-OB: $(AUTOFONT)/9nb00073.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00073.tfm $(TEXTMAP) $@
-
-# Omega Bold Italic
-OBI: $(AUTOFONT)/9nb00075.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00075.tfm $(TEXTMAP) $@
-
-# Univers
-UR: $(AUTOFONT)/9nb00094.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00094.tfm $(TEXTMAP) $@
-
-# Univers Italic
-UI: $(AUTOFONT)/9nb00092.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00092.tfm $(TEXTMAP) $@
-
-# Univers Bold
-UB: $(AUTOFONT)/9nb00088.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00088.tfm $(TEXTMAP) $@
-
-# Univers Bold Italic
-UBI: $(AUTOFONT)/9nb00093.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00093.tfm $(TEXTMAP) $@
-
-# Univers Condensed
-UCR: $(AUTOFONT)/9nb00089.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00089.tfm $(TEXTMAP) $@
-
-# Univers Condensed Italic
-UCI: $(AUTOFONT)/9nb00087.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00087.tfm $(TEXTMAP) $@
-
-# Univers Condensed Bold
-UCB: $(AUTOFONT)/9nb00090.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00090.tfm $(TEXTMAP) $@
-
-# Univers Condensed Bold Italic
-UCBI: $(AUTOFONT)/9nb00091.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00091.tfm $(TEXTMAP) $@
-
-# Albertus
-ALBR: $(AUTOFONT)/9nb00052.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00052.tfm $(TEXTMAP) $@
-
-# Albertus Extrabold
-ALBB: $(AUTOFONT)/9nb00051.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00051.tfm $(TEXTMAP) $@
-
-# Letter Gothic
-LGR: $(AUTOFONT)/9nb00071.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00071.tfm $(TEXTMAP) $@
-
-# Letter Gothic Italic
-LGI: $(AUTOFONT)/9nb00070.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00070.tfm $(TEXTMAP) $@
-
-# Letter Gothic Bold
-LGB: $(AUTOFONT)/9nb00069.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00069.tfm $(TEXTMAP) $@
-
-# Antique Olive
-AOR: $(AUTOFONT)/9nb00055.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00055.tfm $(TEXTMAP) $@
-
-# Antique Olive Italic
-AOI: $(AUTOFONT)/9nb00054.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00054.tfm $(TEXTMAP) $@
-
-# Antique Olive Bold
-AOB: $(AUTOFONT)/9nb00053.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00053.tfm $(TEXTMAP) $@
-
-# Marigold
-MARIGOLD: $(AUTOFONT)/9nb00072.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00072.tfm $(TEXTMAP) $@
-
-# Coronet
-CORONET: $(AUTOFONT)/9nb00077.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00077.tfm $(TEXTMAP) $@
-
-# Clarendon Condensed
-CLARENDON: $(AUTOFONT)/9nb00060.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00060.tfm $(TEXTMAP) $@
-
-S: $(AUTOFONT)/9nb00086.tfm $(SPECIALMAP) $(srcdir)/special.awk
- $(HPFTODIT) $(SFLAG) $(AUTOFONT)/9nb00086.tfm $(SPECIALMAP) - \
- | awk -f $(srcdir)/special.awk > $@
-
-#
-# TrueType
-#
-
-# Times New Roman
-TNRR: $(AUTOFONT)/tmnr000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/tmnr000s.tfm $(TEXTMAP) $@
-
-# Times New Roman Italic
-TNRI: $(AUTOFONT)/tmni000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/tmni000s.tfm $(TEXTMAP) $@
-
-# Times New Roman Bold
-TNRB: $(AUTOFONT)/tmnb000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/tmnb000s.tfm $(TEXTMAP) $@
-
-# Times New Roman Bold Italic
-TNRBI: $(AUTOFONT)/tmnj000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/tmnj000s.tfm $(TEXTMAP) $@
-
-# Arial
-AR: $(AUTOFONT)/arlr000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/arlr000s.tfm $(TEXTMAP) $@
-
-# Arial Italic
-AI: $(AUTOFONT)/arli000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/arli000s.tfm $(TEXTMAP) $@
-
-# Arial Bold
-AB: $(AUTOFONT)/arlb000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/arlb000s.tfm $(TEXTMAP) $@
-
-# Arial Bold Italic
-ABI: $(AUTOFONT)/arlj000s.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/arlj000s.tfm $(TEXTMAP) $@
-
-# Symbol
-SYMBOL: $(AUTOFONT)/9nb28703.tfm $(SYMBOLMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb28703.tfm $(SYMBOLMAP) $@
-
-# Wingdings
-WINGDINGS: $(AUTOFONT)/9nb00095.tfm $(WINGDINGSMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00095.tfm $(WINGDINGSMAP) $@
-
-
-clean:
-
-realclean:
- -rm -f $(FONTS)
-
-extraclean: realclean
- -rm -f core *~ "#*"
-
-.PHONY: clean realclean extraclean all
diff --git a/contrib/groff/font/devlj4/generate/special.awk b/contrib/groff/font/devlj4/generate/special.awk
deleted file mode 100644
index 26e8b92d223b..000000000000
--- a/contrib/groff/font/devlj4/generate/special.awk
+++ /dev/null
@@ -1,82 +0,0 @@
-#! /bin/awk -f
-
-# Correct Intellifont-based height metrics for several glyphs in
-# special font for TrueType CG Times (LaserJet 4000 and later).
-
-function scale(num)
-{
- return int(num * em + 0.5)
-}
-
-BEGIN {
- FS = "\t"
- OFS = "\t"
- em = 26346 # Intellifont (8782 DU/em) and hpftodit(1) multiplier of 3
-
- ascent["integralcrvmid"] = scale(0.84358)
- descent["integralcrvmid"] = scale(0.25006)
- ascent["integralbt"] = scale(0.84358)
- descent["integralbt"] = scale(0.15164)
- ascent["lt"] = scale(0.84358)
- descent["lt"] = scale(0.15164)
- ascent["parenlefttp"] = scale(0.84358)
- descent["parenlefttp"] = scale(0.15164)
- ascent["bracelefttp"] = scale(0.84358)
- descent["bracelefttp"] = scale(0.15164)
- ascent["lk"] = scale(0.84358)
- descent["lk"] = scale(0.15164)
- ascent["braceleftmid"] = scale(0.84358)
- descent["braceleftmid"] = scale(0.15164)
- ascent["lb"] = scale(0.84358)
- descent["lb"] = scale(0.15164)
- ascent["parenleftbt"] = scale(0.84358)
- descent["parenleftbt"] = scale(0.15164)
- ascent["braceleftbt"] = scale(0.84358)
- descent["braceleftbt"] = scale(0.15164)
- ascent["rt"] = scale(0.84358)
- descent["rt"] = scale(0.15164)
- ascent["parenrighttp"] = scale(0.84358)
- descent["parenrighttp"] = scale(0.15164)
- ascent["bracerighttp"] = scale(0.84358)
- descent["bracerighttp"] = scale(0.15164)
- ascent["rk"] = scale(0.84358)
- descent["rk"] = scale(0.15164)
- ascent["bracerightmid"] = scale(0.84358)
- descent["bracerightmid"] = scale(0.15164)
- ascent["rb"] = scale(0.84358)
- descent["rb"] = scale(0.15164)
- ascent["parenrightbt"] = scale(0.84358)
- descent["parenrightbt"] = scale(0.15164)
- ascent["bracerightbt"] = scale(0.84358)
- descent["bracerightbt"] = scale(0.15164)
- ascent["parenrightex"] = scale(0.84358)
- descent["parenrightex"] = scale(0.15164)
- ascent["parenleftex"] = scale(0.84358)
- descent["parenleftex"] = scale(0.15164)
- ascent["bv"] = scale(0.84358)
- descent["bv"] = scale(0.15164)
- ascent["bracerightex"] = scale(0.84358)
- descent["bracerightex"] = scale(0.15164)
- ascent["braceleftex"] = scale(0.84358)
- descent["braceleftex"] = scale(0.15164)
- ascent["integralex"] = scale(0.84358)
- descent["integralex"] = scale(0.15164)
- ascent["bracketrightex"] = scale(0.84358)
- descent["bracketrightex"] = scale(0.15164)
- ascent["bracketleftex"] = scale(0.84358)
- descent["bracketleftex"] = scale(0.15164)
- ascent["barex"] = scale(0.84358)
- descent["barex"] = scale(0.15164)
-}
-{
- if ($2 != "\"" && ascent[$1]) {
- n = split($2, temp, ",")
- $2 = sprintf("%d,%d,%d", temp[1], ascent[$1], descent[$1])
- # just in case there are additional metrics
- for (i = 4; i <= n; i++)
- $2 = $2 "," temp[i]
- }
- print $0
-}
-
-# EOF
diff --git a/contrib/groff/font/devlj4/generate/special.map b/contrib/groff/font/devlj4/generate/special.map
deleted file mode 100644
index 131567275543..000000000000
--- a/contrib/groff/font/devlj4/generate/special.map
+++ /dev/null
@@ -1,271 +0,0 @@
-# Map HP MSL numbers and HP Unicode values to troff names for a special font.
-#
-# Created 30 December 2003 -- you need hpftodit from groff 1.19.1 or newer!
-
-12 002B pl
-30 003D eq
-34 0041 *A
-35 0042 *B
-38 0045 *E
-41 0048 *Y
-42 0049 *I
-44 004B *K
-46 004D *M
-47 004E *N
-48 004F *O
-49 0050 *R
-53 0054 *T
-57 0058 *X
-59 005A *Z
-96 007E ap
-97 2592 u2592
-183 2212 mi
-189 25A0 u25A0
-191 00B1 +-
-194 00AC no
-201 00D7 mu
-202 00F7 di
-203 263A u263A
-204 263B u263B
-205 2665 HE
-206 2666 DI
-207 2663 CL
-208 2660 SP
-209 25CF u25CF
-210 25D8 u25D8
-212 25D9 u25D9
-213 2642 u2642
-214 2640 u2640
-215 266A u266A
-216 266B u266B
-217 263C u263C
-218 25BA u25BA
-219 25C4 u25C4
-220 2195 va
-222 25AC u25AC
-223 21A8 u21A8
-224 2191 ua
-225 2193 da
-226 2192 ->
-227 2190 <-
-# U+2319 would be the right code for MSL 228, according to the description
-# and used glyph shape in the PCL 5 comparison guide, but this neither
-# reflects the actual look nor the mapping value used in recent HP printers.
-228 221F u221F
-229 2194 <>
-230 25B2 u25B2
-231 25BC u25BC
-233 2310 u2310
-234 2591 u2591
-235 2593 u2593
-236 2502 u2502
-237 2524 u2524
-238 2561 u2561
-239 2562 u2562
-240 2556 u2556
-241 2555 u2555
-242 2563 u2563
-243 2551 u2551
-244 2557 u2557
-245 255D u255D
-246 255C u255C
-247 255B u255B
-248 2510 u2510
-249 2514 u2514
-250 2534 u2534
-251 252C u252C
-252 251C u251C
-253 2500 u2500
-254 253C u253C
-255 255E u255E
-256 255F u255F
-257 255A u255A
-258 2554 u2554
-259 2569 u2569
-260 2566 u2566
-261 2560 u2560
-262 2550 u2550
-263 256C u256C
-264 2567 u2567
-265 2568 u2568
-266 2564 u2564
-267 2565 u2565
-268 2559 u2559
-269 2558 u2558
-270 2552 u2552
-271 2553 u2553
-272 256B u256B
-273 256A u256A
-274 2518 u2518
-275 250C u250C
-276 2588 u2588
-277 2584 u2584
-278 258C u258C
-279 2590 u2590
-280 2580 u2580
-292 221E if
-295 2229 ca
-296 2261 ==
-297 2265 >=
-298 2264 <=
-299 2320 u2320
-300 2321 u2321
-301 2248 ~= ~~
-302 00B7 md
-303 221A u221A
-305 25AA u25AA
-333 2302 u2302
-500 EFBF sqrt sr
-501 221D pt
-502 212F u212F
-503 EFEC *e
-504 2234 3d tf
-505 0393 *G
-506 2206 *D
-507 0398 *H
-508 039B *L
-509 039E *C
-510 03A0 *P
-511 03A3 *S
-512 03A5 *U
-513 03A6 *F
-514 03A8 *Q
-515 03A9 *W
-516 2207 gr
-517 2202 pd
-518 03C2 ts
-519 2260 !=
-521 2235 u2235
-522 03B1 *a
-523 03B2 *b
-524 03B3 *g
-525 03B4 *d
-526 03B5 +e
-527 03B6 *z
-528 03B7 *y
-529 03B8 *h
-530 03B9 *i
-531 03BA *k
-532 03BB *l
-533 03BC *m
-534 03BD *n
-535 03BE *c
-536 03BF *o
-537 03C0 *p
-538 03C1 *r
-539 03C3 *s
-540 03C4 *t
-541 03C5 *u
-542 03C6 *f
-543 03C7 *x
-544 03C8 *q
-545 03C9 *w
-546 03D1 +h
-547 03D5 +f
-548 03D6 +p
-549 2243 |=
-550 2262 ne
-551 21D1 arrowverttp uA
-552 21D2 rA rh
-553 21D3 arrowvertbt dA
-554 21D0 lA lh
-555 21D5 vA
-556 21D4 hA
-557 21C4 u21C4
-558 21C6 u21C6
-559 EFE9 u21C0
-560 EFEA radicalex
-561 2200 fa
-562 2203 te
-563 22A4 u22A4
-564 22A5 pp
-565 222A cu
-566 2208 mo
-567 220B u220B
-568 2209 nm
-569 2282 sb
-570 2283 sp
-571 2284 nb
-572 2285 nc
-573 2286 ib
-574 2287 ip
-575 2295 c+
-576 2299 u2299
-577 2297 c*
-578 2296 u2296
-579 2298 u2298
-580 2227 AN
-581 2228 OR
-582 22BB u22BB
-583 2218 u2218
-584 20DD ci
-585 22A3 u22A3
-586 22A2 u22A2
-587 222B integral is
-588 222E u222E
-589 2220 /_
-590 2205 es
-591 2135 Ah
-592 2136 u2136
-593 2137 u2137
-594 212D u212D
-595 2111 Im
-596 211C Re
-597 2128 u2128
-598 EFE7 bracketlefttp lc
-599 EFE6 bracketleftbt lf
-600 EFE3 bracelefttp lt parenlefttp
-601 EFE2 braceleftmid lk
-602 EFE1 braceleftbt lb parenleftbt
-603 EFD4 integralcrvmid
-605 2225 arrowvertex
-608 EFE5 bracketrighttp rc
-609 EFE4 bracketrightbt rf
-610 EFE0 bracerighttp parenrighttp rt
-611 EFDF bracerightmid rk
-612 EFDE bracerightbt parenrightbt rb
-613 EFDD braceex braceleftex bracerightex bv parenleftex parenrightex
-614 2223 barex bracketleftex bracketrightex
-615 EFDC u23B7
-620 2213 -+
-621 2329 la
-622 232A ra
-624 2245 =~
-625 2197 u2197
-626 2198 u2198
-627 2199 u2199
-628 2196 u2196
-629 25B5 u25B5
-630 25B9 u25B9
-631 25BF u25BF
-632 25C3 u25C3
-633 226A <<
-634 226B >>
-635 2237 u2237
-636 EFCA u225C
-637 EFD5 u03DD
-638 210F -h hbar
-639 2112 u2112
-641 2118 wp
-642 2211 sum
-643 301A u27E6
-645 301B u27E7
-646 256D u256D
-647 2570 u2570
-654 25C7 lz
-655 256E u256E
-656 256F u256F
-662 25C6 u25C6
-663 220D st
-664 2217 **
-665 EFE8 an
-668 221F u221F
-669 220F product
-1099 21B5 CR
-1108 25AB u25AB
-1109 25E6 u25E6
-1110 25CB u25CB
-1112 21B5 u21B5
-1114 2423 u2423
-
-# EOF
diff --git a/contrib/groff/font/devlj4/generate/symbol.map b/contrib/groff/font/devlj4/generate/symbol.map
deleted file mode 100644
index 068a4f8f2885..000000000000
--- a/contrib/groff/font/devlj4/generate/symbol.map
+++ /dev/null
@@ -1,199 +0,0 @@
-# Map HP Unicode values to groff names for Monotype Symbol font.
-#
-# This font is TrueType only, so the MSL values are dummies.
-#
-# Created 16 January 2004. Some mappings are taken from Alan Wood's
-# website (www.alanwood.net)
-#
-# You need hpftodit from groff 1.19.1 or newer!
-
--1 F021 ! # exclamation point
--1 F022 fa # for all (u2200)
--1 F023 # sh # number sign
--1 F024 te # there exists (u2203)
--1 F025 % # per cent
--1 F026 & # ampersand
--1 F027 st # such that, small contains as member (u220D)
--1 F028 ( # left parenthesis
--1 F029 ) # right parenthesis
--1 F02A ** # math asterisk operator (u2217)
--1 F02B pl # plus
--1 F02C , # comma
--1 F02D mi # minus (- is hyphen) (u2212)
--1 F02E . # period
--1 F02F / sl # solidus
--1 F030 0 # numeral 0
--1 F031 1 # numeral 1
--1 F032 2 # numeral 2
--1 F033 3 # numeral 3
--1 F034 4 # numeral 4
--1 F035 5 # numeral 5
--1 F036 6 # numeral 6
--1 F037 7 # numeral 7
--1 F038 8 # numeral 8
--1 F039 9 # numeral 9
--1 F03A : # colon
--1 F03B ; # semicolon
--1 F03C < # less than
--1 F03D = # equals
--1 F03E > # greater than
--1 F03F ? # question mark
--1 F040 =~ # approximately equal to, congruent (u2245)
--1 F041 *A # capital Alpha (u0391)
--1 F042 *B # capital Beta (u0392)
--1 F043 *X # capital Chi (u03A7)
--1 F044 *D # capital Delta (u0394)
--1 F045 *E # capital Epsilon (u0395)
--1 F046 *F # capital Phi (u03A6)
--1 F047 *G # capital Gamma (u0393)
--1 F048 *Y # capital Eta (u0397)
--1 F049 *I # capital Iota (u0399)
--1 F04A +h # theta symbol (u03D1)
--1 F04B *K # capital Kappa (u039A)
--1 F04C *L # capital Lambda (u039B)
--1 F04D *M # capital Mu (u039C)
--1 F04E *N # capital Nu (u039D)
--1 F04F *O # capital Omicron (u039F)
--1 F050 *P # capital Pi (u03A0)
--1 F051 *H # capital Theta (u0398)
--1 F052 *R # capital Rho (u03A1)
--1 F053 *S # capital Sigma (u03A3)
--1 F054 *T # capital Tau (u03A4)
--1 F055 *U # capital Upsilon (u03A5)
--1 F056 ts # lower case sigma (terminal) (u03C2)
--1 F057 *W # capital Omega (u03A9)
--1 F058 *C # capital Xi (u039E)
--1 F059 *Q # capital Psi (u03A8)
--1 F05A *Z # capital Zeta (u0396)
--1 F05B [ lB # left bracket
--1 F05C 3d tf # therefore (u2234)
--1 F05D ] rB # right bracket
--1 F05E pp # perpendicular (u22A5)
--1 F05F _ # underscore
--1 F060 --- # radical extender
--1 F061 *a # lower case alpha (u03B1)
--1 F062 *b # lower case beta (u03B2)
--1 F063 *x # lower case chi (u03C7)
--1 F064 *d # lower case delta (u03B4)
--1 F065 *e # lower case epsilon (u03B5)
--1 F066 +f # lower case phi (stroked) (u03D5)
--1 F067 *g # lower case gamma (u03B3)
--1 F068 *y # lower case eta (u03B7)
--1 F069 *i # lower case iota (u03B9)
--1 F06A *f # lower case phi (curly) (u03C6)
--1 F06B *k # lower case kappa (u03BA)
--1 F06C *l # lower case lambda (u03BB)
--1 F06D *m # lower case mu (u03BC)
--1 F06E *n # lower case nu (u03BD)
--1 F06F *o # lower case omicron (u03BF)
--1 F070 *p # lower case pi (u03C0)
--1 F071 *h # lower case theta (u03B8)
--1 F072 *r # lower case rho (u03C1)
--1 F073 *s # lower case sigma (u03C3)
--1 F074 *t # lower case tau (u03C4)
--1 F075 *u # lower case upsilon (u03C5)
--1 F076 +p # pi symbol (u03D6)
--1 F077 *w # lower case omega (u03C9)
--1 F078 *c # lower case xi (u03BE)
--1 F079 *q # lower case psi (u03C8)
--1 F07A *z # lower case zeta (u03B6)
--1 F07B { lC # left brace
--1 F07C | ba # vertical bar
--1 F07D } rC # right brace
--1 F07E ap # similar, tilde operator (u223C)
--1 F0A1 u03D2 # upsilon with hook symbol (u03D2)
--1 F0A2 fm # prime or minutes or feet (u2032)
--1 F0A3 <= # less than or equal to (u2264)
--1 F0A4 f/ # figure slash (fraction) (/ is normal slash) (u2044)
--1 F0A5 if # infinity (u221E)
--1 F0A6 u0192 # Florin or Guilder
--1 F0A7 CL # clubs (u2663)
--1 F0A8 DI # diamonds (u2666)
--1 F0A9 HE # hearts (u2665)
--1 F0AA SP # spades (u2660)
--1 F0AB <> # arrow left and right (u2194)
--1 F0AC <- # arrow left (u2190)
--1 F0AD ua # arrow up (u2191)
--1 F0AE -> # arrow right (u2192)
--1 F0AF da # arrow down (u2193)
--1 F0B0 de # degree
--1 F0B1 +- # plus minus (u00B1)
--1 F0B2 sd # double prime or seconds or inches (u2033)
--1 F0B3 >= # greater than or equal to (u2265)
--1 F0B4 mu # multiply (u00D7)
--1 F0B5 pt # proportional (u221D)
--1 F0B6 pd # partial derivative / partial differential (u2202)
--1 F0B7 u2219 # bullet operator (u2219)
--1 F0B8 di # divide (u00F7)
--1 F0B9 != # not equal (u2260)
--1 F0BA == # equivalent (u2261)
--1 F0BB ~= ~~ # almost equal to, asymptotic to (u2248)
--1 F0BC u2026 # ellipsis (u2026)
--1 F0BD u23D0 # vertical arrow extender (u23D0)
--1 F0BE u23AF # horizontal arrow extender (u23AF)
--1 F0BF CR # carriage return (u21B5)
--1 F0C0 Ah # alef symbol (u2135)
--1 F0C1 Im # I fraktur (u2111)
--1 F0C2 Re # R fraktur (u211C)
--1 F0C3 wp # Weierstrass (u2118)
--1 F0C4 c* # circle multiply (u2297)
--1 F0C5 c+ # circle plus (u2295)
--1 F0C6 es # empty set (u2205)
--1 F0C7 ca # intersection (u2229)
--1 F0C8 cu # union (u222A)
--1 F0C9 sp # proper superset, superset of (u2283)
--1 F0CA ip # reflex superset (contains or equals), superset of or equal to (u2287)
--1 F0CB nb # not subset (u2284)
--1 F0CC sb # proper subset, subset of (u2282)
--1 F0CD ib # reflex subset (contained in or equals), subset of or equal to (u2286)
--1 F0CE mo # member (element) (u2208)
--1 F0CF nm # not a member (not an element) (u2209)
--1 F0D0 /_ # angle (u2220)
--1 F0D1 gr # nabla or gradient (u2207)
--1 F0D2 --- # registered (serif) (u00AE)
--1 F0D3 --- # copyright (serif) (u00A9)
--1 F0D4 --- # trade mark (serif)
--1 F0D5 product # product of (u220F)
--1 F0D6 sr sqrt # square root (u221A)
--1 F0D7 u22C5 # dot operator (u22C5)
--1 F0D8 no # not (u00AC)
--1 F0D9 AN # logical and (u2227)
--1 F0DA OR # logical or (u2228)
--1 F0DB hA # double arrow left and right (u21D4)
--1 F0DC lA lh # double arrow left (implied by) (u21D0)
--1 F0DD arrowverttp uA # double arrow up (u21D1)
--1 F0DE rA rh # double arrow right (implies) (u21D2)
--1 F0DF arrowvertbt dA # double arrow down (u21D3)
--1 F0E0 lz # lozenge (u25CA)
--1 F0E1 la # left angle bracket (u2329)
--1 F0E2 --- # registered (sans serif) (u00AE)
--1 F0E3 --- # copyright (sans serif) (u00A9)
--1 F0E4 --- # trade mark (sans serif)
--1 F0E5 sum # sum of (u2211)
--1 F0E6 parenlefttp # composite left parenthesis (top) (u239B)
--1 F0E7 parenleftex # composite left parenthesis (extender) (u239C)
--1 F0E8 parenleftbt # composite left parenthesis (bottom) (u239D)
--1 F0E9 lc bracketlefttp # composite left bracket (top) (u23A1)
--1 F0EA bracketleftex # composite left bracket (extender) (u23A2)
--1 F0EB lf bracketleftbt # composite left bracket (bottom) (u23A3)
--1 F0EC lt bracelefttp # composite left brace (top) (u23A7)
--1 F0ED lk braceleftex # composite left brace (middle) (u23A8)
--1 F0EE lb braceleftbt # composite left brace (bottom) (u23A9)
--1 F0EF u23AA # composite brace extender (u23AA)
--1 F0F0 Eu # euro sign (u20AC)
--1 F0F1 ra # right angle bracket (u232A)
--1 F0F2 integral is # integral (u222B)
--1 F0F3 u2320 # composite integral (top) (u2320)
--1 F0F4 u23AE # composite integral extender (u23AE)
--1 F0F5 u2321 # composite integral (bottom) (u2321)
--1 F0F6 parenrighttp # composite right parenthesis (top) (u239E)
--1 F0F7 parenrightex # composite right parenthesis (extender) (u239F)
--1 F0F8 parenrightbt # composite right parenthesis (bottom) (u23A0)
--1 F0F9 rc bracketrighttp # composite right bracket (top) (u23A4)
--1 F0FA bracketrightex # composite right bracket (extender) (u23A5)
--1 F0FB rf bracketrightbt # composite right bracket (bottom) (u23A6)
--1 F0FC rt bracerighttp # composite right brace (top) (u23AB)
--1 F0FD rk bracerightex # composite right brace (middle) (u23AC)
--1 F0FE rb bracerightbt # composite right brace (bottom) (u23AD)
-
-# EOF
diff --git a/contrib/groff/font/devlj4/generate/text.map b/contrib/groff/font/devlj4/generate/text.map
deleted file mode 100644
index 42b8f4f5a64f..000000000000
--- a/contrib/groff/font/devlj4/generate/text.map
+++ /dev/null
@@ -1,845 +0,0 @@
-# Map HP MSL numbers and HP Unicode values to troff names for a text font.
-#
-# Created 30 December 2003 -- you need hpftodit from groff 1.19.1 or newer!
-#
-# Glyphs marked with an asterisk have (also) an entry in `special.umap'.
-# Unknown MSL numbers are marked with a question mark; glyphs with an
-# uncertain Unicode mapping are tagged also with a question mark.
-
-# 0 space -- unused
-1 0021 !
-2 0022 " dq
-3 0023 # sh
-4 0024 $ Do
-5 0025 %
-6 0026 &
-# 7 ?
-8 2019 ' cq
-9 0028 (
-
-10 0029 )
-11 002A *
-# 12 *
-12 002B +
-13 002C ,
-14 002D - hy
-15 002E .
-16 002F / sl
-17 0030 0
-18 0031 1
-19 0032 2
-
-20 0033 3
-21 0034 4
-22 0035 5
-23 0036 6
-24 0037 7
-25 0038 8
-26 0039 9
-27 003A :
-28 003B ;
-29 003C <
-
-# 30 *
-30 003D =
-31 003E >
-32 003F ?
-33 0040 @ at
-# 34 *
-34 0041 A
-# 35 *
-35 0042 B
-36 0043 C
-37 0044 D
-# 38 *
-38 0045 E
-39 0046 F
-
-40 0047 G
-# 41 *
-41 0048 H
-# 42 *
-42 0049 I
-43 004A J
-# 44 *
-44 004B K
-45 004C L
-# 46 *
-46 004D M
-# 47 *
-47 004E N
-# 48 *
-48 004F O
-# 49 *
-49 0050 P
-
-50 0051 Q
-51 0052 R
-52 0053 S
-# 53 *
-53 0054 T
-54 0055 U
-55 0056 V
-56 0057 W
-# 57 *
-57 0058 X
-58 0059 Y
-# 59 *
-59 005A Z
-
-60 005B [ lB
-61 005C \ rs
-62 005D ] rB
-63 005E ha
-64 005F _
-# 65 ?
-66 2018 ` oq
-67 0061 a
-68 0062 b
-69 0063 c
-
-70 0064 d
-71 0065 e
-72 0066 f
-73 0067 g
-74 0068 h
-75 0069 i
-76 006A j
-77 006B k
-78 006C l
-79 006D m
-
-80 006E n
-81 006F o
-82 0070 p
-83 0071 q
-84 0072 r
-85 0073 s
-86 0074 t
-87 0075 u
-88 0076 v
-89 0077 w
-
-90 0078 x
-91 0079 y
-92 007A z
-93 007B lC {
-94 007C ba |
-95 007D rC }
-# 96 *
-96 007E ti
-# 97 medium shading *
-# 98 uppercase greek delta -- unused
-99 00C0 `A
-
-100 00C2 ^A
-101 00C8 `E
-102 00CA ^E
-103 00CB :E
-104 00CE ^I
-105 00CF :I
-106 00B4 aa
-107 0060 ga
-108 02C6 ^ a^
-109 00A8 ad
-
-110 02DC a~ ~
-111 00D9 `U
-112 00DB ^U
-113 00AF u00AF
-114 00DD 'Y
-115 00FD 'y
-116 00B0 de
-117 00C7 ,C
-118 00E7 ,c
-119 00D1 ~N
-
-120 00F1 ~n
-121 00A1 r!
-122 00BF r?
-123 00A4 Cs
-124 00A3 Po
-125 00A5 Ye
-126 00A7 sc
-127 0192 Fn
-128 00A2 ct
-129 00E2 ^a
-
-130 00EA ^e
-131 00F4 ^o
-132 00FB ^u
-133 00E1 'a
-134 00E9 'e
-135 00F3 'o
-136 00FA 'u
-137 00E0 `a
-138 00E8 `e
-139 00F2 `o
-
-140 00F9 `u
-141 00E4 :a
-142 00EB :e
-143 00F6 :o
-144 00FC :u
-145 00C5 oA
-146 00EE ^i
-147 00D8 /O
-148 00C6 AE
-149 00E5 oa
-
-150 00ED 'i
-151 00F8 /o
-152 00E6 ae
-153 00C4 :A
-154 00EC `i
-155 00D6 :O
-156 00DC :U
-157 00C9 'E
-158 00EF :i
-159 00DF ss
-
-160 00D4 ^O
-161 00C1 'A
-162 00C3 ~A
-163 00E3 ~a
-164 00D0 -D
-165 00F0 Sd
-166 00CD 'I
-167 00CC `I
-168 00D3 'O
-169 00D2 `O
-
-170 00D5 ~O
-171 00F5 ~o
-172 0160 vS
-173 0161 vs
-174 00DA 'U
-175 0178 :Y
-176 00FF :y
-177 00DE TP
-178 00FE Tp
-# 179 lowercase middle dot -- unused (no Unicode mapping)
-
-180 00B5 mc
-181 00B6 ps
-182 00BE 34
-# 183 *
-183 2212 \-
-184 00BC 14
-185 00BD 12
-186 00AA Of
-187 00BA Om
-188 00AB Fo
-# 189 medium solid box *
-
-190 00BB Fc
-# 191 *
-191 00B1 t+-
-192 00A6 bb
-193 00A9 co
-# 194 *
-194 00AC tno
-195 00AD u00AD
-196 00AE rg
-197 00B2 S2
-198 00B3 S3
-199 00B8 ac
-
-200 00B9 S1
-# 201 *
-201 00D7 tmu
-# 202 *
-202 00F7 tdi
-# 203 open smiling face *
-# 204 solid smiling face *
-# 205 solid heart *
-# 206 solid diamond *
-# 207 solid club *
-# 208 solid spade *
-# 209 medium solid bullet *
-
-# 210 large solid square/open dot *
-# 211 large open bullet ?
-# 212 large solid square/open ring *
-# 213 male symbol *
-# 214 female symbol *
-# 215 musical note *
-# 216 pair of musical notes *
-# 217 compass, 8 pointed sun *
-# 218 right solid arrowhead *
-# 219 left solid arrowhead *
-
-# 220 up/down arrow *
-221 203C u203C
-# 222 thick horizontal mark *
-# 223 up/down arrow baseline *
-# 224 up arrow *
-# 225 down arrow *
-# 226 right arrow *
-# 227 left arrow *
-# 228 tick up at left (`logicalnotflopped') *
-# 229 left/right arrow *
-
-# 230 up solid arrowhead *
-# 231 down solid arrowhead *
-232 20A7 u20A7
-# 233 tick down at left *
-# 234 light shading *
-# 235 dark shading *
-# 236 vertical 1 *
-# 237 left 1 vertical 1 *
-# 238 left 2 vertical 1 *
-# 239 left 1 vertical 2 *
-
-# 240 left 1 down 2 *
-# 241 left 2 down 1 *
-# 242 left 2 vertical 2 *
-# 243 vertical 2 *
-# 244 left 2 down 2 *
-# 245 left 2 up 2 *
-# 246 left 1 up 2 *
-# 247 left 2 up 1 *
-# 248 left 1 down 1 *
-# 249 right 1 up 1 *
-
-# 250 horizontal 1 up 1 *
-# 251 horizontal 1 down 1 *
-# 252 right 1 vertical 1 *
-# 253 horizontal 1 *
-# 254 horizontal 1 vertical 1 *
-# 255 right 2 vertical 1 *
-# 256 right 1 vertical 2 *
-# 257 right 2 up 2 *
-# 258 right 2 down 2 *
-# 259 horizontal 2 up 2 *
-
-# 260 horizontal 2 down 2 *
-# 261 right 2 vertical 2 *
-# 262 horizontal 2 *
-# 263 horizontal 2 vertical 2 *
-# 264 horizontal 2 up 1 *
-# 265 horizontal 1 up 2 *
-# 266 horizontal 2 down 1 *
-# 267 horizontal 1 down 2 *
-# 268 right 1 up 2 *
-# 269 right 2 up 1 *
-
-# 270 right 2 down 1 *
-# 271 right 1 down 2 *
-# 272 horizontal 1 vertical 2 *
-# 273 horizontal 2 vertical 1 *
-# 274 left 1 up 1 *
-# 275 right 1 down 1 *
-# 276 solid full rectangle *
-# 277 bottom 1/2 solid rectangle *
-# 278 left 1/2 solid rectangle *
-# 279 right 1/2 solid rectangle *
-
-# 280 top 1/2 solid rectangle *
-# 281 lowercase greek alpha -- unused
-# 282 lowercase greek beta -- unused
-# 283 uppercase greek gamma -- unused
-# 284 lowercase greek pi -- unused
-# 285 uppercase greek sigma -- unused
-# 286 lowercase greek sigma -- unused
-# 287 lowercase greek tau -- unused
-# 288 uppercase greek phi -- unused
-# 289 uppercase greek theta -- unused
-
-# 290 uppercase omega, ohms -- unused
-# 291 lowercase greek delta -- unused
-# 292 infinity sign *
-# 293 lowercase greek phi -- unused
-# 294 lowercase greek epsilon -- unused
-# 295 set intersection *
-# 296 exactly equals *
-# 297 greater than/equal to *
-# 298 less than/equal to *
-# 299 top segment integral *
-
-# 300 bottom segment integral *
-# 301 2 wavy line approximation *
-# 302 *
-302 00B7 pc
-# 303 radical symbol *
-# 304 lowercase greek eta -- unused
-# 305 small solid box *
-306 013F u013F
-307 0140 u0140
-308 2113 u2113
-309 0149 u0149
-
-310 2032 fm
-311 2033 sd
-312 2020 dg
-313 2122 tm
-314 2017 u2017
-315 02C7 ah
-316 02DA ao
-# 317 uppercase acute accent -- unused
-# 318 uppercase grave accent -- unused
-# 319 uppercase circumflex accent -- unused
-
-# 320 uppercase dieresis accent -- unused
-# 321 uppercase tilde accent -- unused
-# 322 uppercase hacek accent -- unused
-# 323 uppercase ring accent -- unused
-324 2215 f/
-325 2014 em
-326 2013 en
-327 2021 dd
-328 0131 .i
-329 0027 aq
-
-# 330 uppercase cedilla -- unused
-331 2022 bu
-332 207F u207F
-# 333 home plate *
-# 334 ?
-335 0138 u0138
-# 336 ?
-# 337 ?
-338 0166 u0166
-339 0167 u0167
-
-340 014A u014A
-341 014B u014B
-342 0111 u0111
-# 343-369 ?
-
-# 370 `lira' ?
-# 371-374 ?
-# 375 `asciigrave' ?
-
-# 376-399 ?
-
-400 0102 u0041_0306
-401 0103 u0061_0306
-402 0100 u0041_0304
-403 0101 u0061_0304
-404 0104 u0041_0328
-405 0105 u0061_0328
-406 0106 'C
-407 0107 'c
-# 408 ?
-# 409 ?
-
-410 010C u0041_030C
-411 010D u0061_030C
-# 412 ?
-# 413 ?
-414 010E u0044_030C
-415 010F u0064_030C
-416 011A u0045_030C
-417 011B u0065_030C
-418 0116 u0045_0307
-419 0117 u0065_0307
-
-420 0112 u0045_0304
-421 0113 u0065_0304
-422 0118 u0045_0328
-423 0119 u0065_0328
-# 424-427 ?
-428 0122 u0047_0327
-429 0123 u0067_0327
-
-# 430 ?
-# 431 ?
-432 012E u0049_0328
-433 012F u0069_0328
-434 012A u0049_0304
-435 012B u0069_0304
-# 436 ?
-# 437 ?
-438 0136 u004B_0327
-439 0137 u006B_0327
-
-440 0139 u004C_0301
-441 013A u006C_0301
-442 013D u004C_030C
-443 013E u006C_030C
-444 013B u004C_0327
-445 013C u006C_0327
-446 0143 u004E_0301
-447 0144 u006E_0301
-448 0147 u004E_030C
-449 0148 u006E_030C
-
-450 0145 u004E_0327
-451 0146 u006E_0327
-452 0150 u004F_030B
-453 0151 u006F_030B
-454 014C u004F_0304
-455 014D u006F_0304
-456 0154 u0052_0301
-457 0155 u0072_0301
-458 0158 u0052_030C
-459 0159 u0072_030C
-
-460 0156 u0052_0327
-461 0157 u0072_0327
-462 015A u0053_0301
-463 015B u0073_0301
-# 464 ?
-# 465 ?
-466 0164 u0054_030C
-467 0165 u0074_030C
-468 0162 u0054_0327
-469 0163 u0074_0327
-
-470 0168 u0055_0303
-471 0169 u0075_0303
-# 472 ?
-# 473 ?
-474 0170 u0055_030B
-475 0171 u0075_030B
-476 016E u0055_030A
-477 016F u0075_030A
-478 016A u0055_0304
-479 016B u0075_0304
-
-480 0172 u0055_0328
-481 0173 u0075_0328
-482 0179 u005A_0301
-483 017A u007A_0301
-484 017B u005A_0307
-485 017C u007A_0307
-486 0128 u0049_0303
-487 0129 u0069_0303
-# 488 ?
-# 489 ?
-
-# 490-499 ?
-
-# 500 radical segment *
-# 501 proportional to symbol *
-# 502 lowercase italic e *
-# 503 alternate lowercase epsilon *
-# 504 therefore *
-# 505 uppercase greek gamma *
-# 506 uppercase greek delta *
-# 507 uppercase greek theta *
-# 508 uppercase greek lambda *
-# 509 uppercase greek xi *
-
-# 510 uppercase greek pi *
-# 511 uppercase greek sigma *
-# 512 uppercase greek upsilon *
-# 513 uppercase greek phi *
-# 514 uppercase greek psi *
-# 515 uppercase greek omega *
-# 516 nabla symbol *
-# 517 partial diff symbol *
-# 518 terminal sigma *
-# 519 not equal to symbol *
-
-# 520 underline, composite ?
-# 521 because *
-# 522 lowercase greek alpha *
-# 523 lowercase greek beta *
-# 524 lowercase greek gamma *
-# 525 lowercase greek delta *
-# 526 lowercase greek epsilon *
-# 527 lowercase greek zeta *
-# 528 lowercase greek eta *
-# 529 lowercase greek theta *
-
-# 530 lowercase greek iota *
-# 531 lowercase greek kappa *
-# 532 lowercase greek lambda *
-# 533 lowercase greek mu *
-# 534 lowercase greek nu *
-# 535 lowercase greek xi *
-# 536 lowercase greek omicron *
-# 537 lowercase greek pi *
-# 538 lowercase greek rho *
-# 539 lowercase greek sigma *
-
-# 540 lowercase greek tau *
-# 541 lowercase greek upsilon *
-# 542 lowercase greek phi *
-# 543 lowercase greek chi *
-# 544 lowercase greek psi *
-# 545 lowercase greek omega *
-# 546 open lowercase greek theta *
-# 547 open lowercase greek phi *
-# 548 alternate lowercase pi *
-# 549 wavy/straight approximation *
-
-# 550 not exactly equal to *
-# 551 up arrow double stroke *
-# 552 right arrow double stroke *
-# 553 down arrow double stroke *
-# 554 left arrow double stroke *
-# 555 up/down arrow double stroke *
-# 556 left/right arrow double stroke *
-# 557 right over left arrow *
-# 558 left over right arrow *
-# 559 vector symbol *
-
-# 560 overline, composite *
-# 561 for all symbol *
-# 562 there exists symbol *
-# 563 top symbol *
-# 564 bottom symbol *
-# 565 set union symbol *
-# 566 element of symbol *
-# 567 contains symbol *
-# 568 not element of symbol *
-# 569 proper subset symbol *
-
-# 570 proper superset symbol *
-# 571 not proper subset symbol *
-# 572 not proper superset symbol *
-# 573 subset symbol *
-# 574 superset symbol *
-# 575 plus in circle symbol *
-# 576 dot in circle *
-# 577 times in circle *
-# 578 minus in circle *
-# 579 slash in circle *
-
-# 580 logical and symbol *
-# 581 logical or symbol *
-# 582 exclusive or symbol *
-# 583 function composition symbol *
-# 584 large open circle *
-# 585 assertion symbol *
-# 586 backwards assertion symbol *
-# 587 integral symbol *
-# 588 curvilinear integral symbol *
-# 589 angle symbol *
-
-# 590 empty set *
-# 591 hebrew aleph *
-# 592 hebrew beth *
-# 593 hebrew gimmel *
-# 594 fractur uppercase c *
-# 595 fractur uppercase i *
-# 596 fractur uppercase r *
-# 597 fractur uppercase z *
-# 598 top left bracket *
-# 599 bottom left bracket *
-
-# 600 top left brace *
-# 601 middle left brace *
-# 602 bottom left brace *
-# 603 middle curvature integral -- no Unicode mapping!
-# 604 top left summation -- no Unicode mapping!
-# 605 double vertical line, composite *
-# 606 bottom left summation -- no Unicode mapping!
-# 607 bottom diagonal summation -- no Unicode mapping!
-# 608 top right bracket *
-# 609 bottom right bracket *
-
-# 610 top right brace *
-# 611 middle right brace *
-# 612 bottom right brace *
-# 613 thick vertical line, composite *
-# 614 thin vertical line, composite *
-# 615 bottom radical, vert *
-# 616 top right summation -- no Unicode mapping!
-# 617 middle summation -- no Unicode mapping!
-# 618 bottom right summation -- no Unicode mapping!
-# 619 top diagonal summation -- no Unicode mapping!
-
-# 620 minus over plus sign *
-# 621 left angle bracket *
-# 622 right angle bracket *
-# 623 mask symbol, superior -- no Unicode mapping!
-# 624 wavy/2 straight approximation *
-# 625 45 degrees arrow *
-# 626 -45 degrees arrow *
-# 627 -135 degrees arrow *
-# 628 135 degrees arrow *
-# 629 up open triangle *
-
-# 630 right open triangle *
-# 631 down open triangle *
-# 632 left open triangle *
-# 633 much less than sign *
-# 634 much greater than sign *
-# 635 proportional to symbol *
-# 636 defined as symbol *
-# 637 lowercase greek digamma *
-# 638 planck's constant/2 pi *
-# 639 laplace transform symbol *
-
-# 640 power set symbol ?
-# 641 weierstrassian symbol *
-# 642 summation symbol, sigma *
-# 643 left double bracket *
-# 644 middle double bracket -- no Unicode mapping!
-# 645 right double bracket *
-# 646 left top round corner *
-# 647 left bottom round corner *
-# 648 extension large union/product -- no Unicode mapping!
-# 649 bottom large union -- no Unicode mapping!
-
-# 650 top large intersection -- no Unicode mapping!
-# 651 top left double bracket -- no Unicode mapping!
-# 652 bottom left double bracket -- no Unicode mapping!
-# 653 large open box ?
-# 654 open diamond *
-# 655 right top round corner *
-# 656 right bottom round corner *
-# 657 bottom large bottom product -- no Unicode mapping!
-# 658 top large top product -- no Unicode mapping!
-# 659 top right double bracket -- no Unicode mapping!
-
-# 660 bottom right double bracket -- no Unicode mapping!
-# 661 large solid box ?
-# 662 solid diamond *
-# 663 such that *
-# 664 math asterisk sign *
-# 665 horizontal arrow extension *
-# 666 double horizontal arrow extension -- no Unicode mapping!
-# 667 complement of #617 -- no Unicode mapping!
-# 668 right angle symbol *
-# 669 product symbol *
-
-# 670-683 ?
-
-684 25CA u25CA
-
-# 684-999 ?
-
-1000 2070 u2070
-1001 2074 u2074
-1002 2075 u2075
-1003 2076 u2076
-1004 2077 u2077
-1005 2078 u2078
-1006 2079 u2079
-# 1007-1009 ?
-
-# 1010-1016 ?
-1017 201C lq
-1018 201D rq
-1019 201E Bq
-
-1020 2003 u2003
-1021 2002 u2002
-# 1022 ?
-1023 2009 u2009
-# 1024-1027 ?
-1028 2026 u2026
-# 1029 ?
-
-# 1030 uppercase ogonek -- unused
-1031 017E vz
-# 1032-1033 ?
-1034 2120 u2120
-# 1035 ?
-1036 211E u211E
-# 1037-1039 ?
-
-# older HP TrueType TFM files use Unicode value U+F001 instead
-1040 FB01 fi
-# older HP TrueType TFM files use Unicode value U+F002 instead
-1041 FB02 fl
-1042 FB00 ff
-1043 FB03 Fi
-1044 FB04 Fl
-# 1045 uppercase double acute accent -- unused
-# 1046 ?
-1047 0133 ij
-# 1048 ?
-# 1049 ?
-
-# 1050-1059 ?
-
-1060 2105 u2105
-1061 011E u0047_0306
-1062 011F u0067_0306
-1063 015E u0053_0327
-1064 015F u0073_0327
-1065 0130 u0049_0307
-# 1066 ?
-1067 201A bq
-1068 2030 %0
-1069 20AC Eu
-
-# 1070-1079 ?
-
-# 1080-1083 ?
-1084 02C9 a-
-# 1085 uppercase macron accent -- unused
-1086 02D8 ab
-# 1087 uppercase breve accent -- unused
-1088 02D9 a.
-# 1089 uppercase overdot accent -- unused
-
-1090 0153 oe
-1091 0152 OE
-1092 2039 fo
-1093 203A fc
-1094 25A1 sq
-1095 0141 /L
-1096 0142 /l
-1097 02DD a"
-1098 02DB ho
-# 1099 carriage return symbol *
-
-# 1100 registered, full, serif -- unused
-# 1101 copyright, full, serif -- unused
-# 1102 trademark, full, serif -- unused
-# 1103 registered, full, sans -- unused
-# 1104 copyright, full, sans -- unused
-# 1105 trademark, full, sans -- unused
-1106 017D vZ
-1107 0132 IJ
-# 1108 small open box *
-# 1109 small open bullet *
-
-# 1110 medium open bullet *
-# 1111 large solid bullet ?
-# 1112 visible carriage return *
-# 1113 visible tab (`arrowtab') ?
-# 1114 visible space *
-# 1115 visible soft hyphen -- unused
-# 1116 visible end-of-file (`embox')?
-# 1117 `enspacereverse' ?
-# 1118 `emspacereverse' ?
-# 1119 ?
-
-# 1120-1399 ?
-
-1400 0301 u0301
-1401 0300 u0300
-1402 0302 u0302
-1403 0308 u0308
-1404 0303 u0303
-1405 030C u030C
-1406 0306 u0306
-1407 030B u030B
-1408 030A u030A
-1409 0307 u0307
-
-1410 0304 u0304
-1411 0327 u0327
-1412 0328 u0328
-# 1413 combining uppercase acute accent -- unused
-# 1414 combining uppercase grave accent -- unused
-# 1415 combining uppercase circumflex accent -- unused
-# 1416 combining uppercase dieresis accent -- unused
-# 1417 combining uppercase tilde accent -- unused
-# 1418 combining uppercase caron accent -- unused
-# 1419 combining uppercase breve accent -- unused
-
-# 1420 combining uppercase double acute accent -- unused
-# 1421 combining uppercase ring accent -- unused
-# 1422 combining uppercase dot accent -- unused
-# 1423 combining uppercase macron accent -- unused
-# 1424 combining uppercase cedilla -- unused
-# 1425 combining uppercase ogonek -- unused
-# 1426 ?
-# 1427 uppercase middle dot -- unused (no Unicode mapping)
-# 1428 ?
-# 1429 ?
-
-# 1430-3811 ?
-
-# 3812 ornament, apple ?
-
-# EOF
diff --git a/contrib/groff/font/devlj4/generate/wingdings.map b/contrib/groff/font/devlj4/generate/wingdings.map
deleted file mode 100644
index d868ac2faabe..000000000000
--- a/contrib/groff/font/devlj4/generate/wingdings.map
+++ /dev/null
@@ -1,233 +0,0 @@
-# Map HP Unicode values to troff names for Wingding font.
-#
-# This font is TrueType only, so the MSL values are dummies.
-#
-# Created 16 January 2004 from data on Alan Wood's website
-# (www.alanwood.net).
-#
-# You need hpftodit from groff 1.19.1 or newer!
-
--1 F021 u270F # Pencil
--1 F022 u2702 # Black scissors
--1 F023 u2701 # Upper blade scissors
--1 F024 ---
--1 F025 ---
--1 F026 ---
--1 F027 ---
--1 F028 u260E # Black telephone
--1 F029 u2706 # Telephone location sign
--1 F02A u2709 # Envelope
--1 F02B ---
--1 F02C ---
--1 F02D ---
--1 F02E ---
--1 F02F ---
--1 F030 ---
--1 F031 ---
--1 F032 ---
--1 F033 ---
--1 F034 ---
--1 F035 ---
--1 F036 u231B # Hourglass
--1 F037 u2328 # Keyboard
--1 F038 ---
--1 F039 ---
--1 F03A ---
--1 F03B ---
--1 F03C ---
--1 F03D ---
--1 F03E u2707 # Tape drive
--1 F03F u270D # Writing hand
--1 F040 ---
--1 F041 u270C # Victory hand
--1 F042 ---
--1 F043 ---
--1 F044 ---
--1 F045 u261C # White left pointing index
--1 F046 u261E # White right pointing index
--1 F047 u261D # White up pointing index
--1 F048 u261F # White down pointing index
--1 F049 ---
--1 F04A u263A # White smiling face
--1 F04B ---
--1 F04C u2639 # White frowning face
--1 F04D ---
--1 F04E u2620 # Skull and crossbones
--1 F04F ---
--1 F050 ---
--1 F051 u2708 # Airplane
--1 F052 u263C # White sun with rays
--1 F053 ---
--1 F054 u2744 # Snowflake
--1 F055 ---
--1 F056 u271E # Shadowed white Latin cross
--1 F057 ---
--1 F058 u2720 # Maltese cross
--1 F059 u2721 # Star of David
--1 F05A u262A # Star and crescent
--1 F05B u262F # Yin Yang
--1 F05C u0950 # Devanagari Om
--1 F05D u2638 # Wheel of Dharma
--1 F05E u2648 # Aries
--1 F05F u2649 # Taurus
--1 F060 u264A # Gemini
--1 F061 u264B # Cancer
--1 F062 u264C # Leo
--1 F063 u264D # Virgo
--1 F064 u264E # Libra
--1 F065 u264F # Scorpio
--1 F066 u2650 # Sagittarius
--1 F067 u2651 # Capricorn
--1 F068 u2652 # Aquarius
--1 F069 u2653 # Pisces
--1 F06A u0026 # Ampersand
--1 F06B u0026 # Ampersand
--1 F06C u25CF # Black circle
--1 F06D u274D # Shadowed white circle
--1 F06E u25A0 # Black square
--1 F06F u25A1 # White square
--1 F070 ---
--1 F071 u2751 # Lower right shadowed white square
--1 F072 u2752 # Upper right shadowed white square
--1 F073 ---
--1 F074 u2666 # Black diamond suit
--1 F075 u25C6 # Black diamond
--1 F076 u2756 # Black diamond minus white X
--1 F077 ---
--1 F078 u2327 # X in a rectangle box
--1 F079 u2353 # APL functional symbol quad up caret
--1 F07A u2318 # Place of interest sign
--1 F07B u2740 # White florette
--1 F07C u273F # Black florette
--1 F07D u275D # Heavy double turned comma quotation mark ornament
--1 F07E u275E # Heavy double comma quotation mark ornament
--1 F080 u24EA # Circled digit zero
--1 F081 u2460 # Circled digit one
--1 F082 u2461 # Circled digit two
--1 F083 u2462 # Circled digit three
--1 F084 u2463 # Circled digit four
--1 F085 u2464 # Circled digit five
--1 F086 u2465 # Circled digit six
--1 F087 u2466 # Circled digit seven
--1 F088 u2467 # Circled digit eight
--1 F089 u2468 # Circled digit nine
--1 F08A u2469 # Circled number ten
--1 F08B u24FF # Negative circled digit zero
--1 F08C u2776 # Dingbat negative circled digit one
--1 F08D u2777 # Dingbat negative circled digit two
--1 F08E u2778 # Dingbat negative circled digit three
--1 F08F u2779 # Dingbat negative circled digit four
--1 F090 u277A # Dingbat negative circled digit five
--1 F091 u277B # Dingbat negative circled digit six
--1 F092 u277C # Dingbat negative circled digit seven
--1 F093 u277D # Dingbat negative circled digit eight
--1 F094 u277E # Dingbat negative circled digit nine
--1 F095 u277F # Dingbat negative circled number ten
--1 F096 ---
--1 F097 ---
--1 F098 ---
--1 F099 ---
--1 F09A ---
--1 F09B ---
--1 F09C ---
--1 F09D ---
--1 F09E u00B7 # Middle dot
--1 F09F u2022 # Bullet
--1 F0A0 u25AA # Black small square
--1 F0A1 u25CB # White circle
--1 F0A2 ---
--1 F0A3 ---
--1 F0A4 u25C9 # Fisheye
--1 F0A5 u25CE # Bullseye
--1 F0A6 ---
--1 F0A7 u25AA # Black small square
--1 F0A8 u25FB # White medium square
--1 F0A9 ---
--1 F0AA u2726 # Black four pointed star
--1 F0AB u2605 # Black star
--1 F0AC u2736 # Six pointed black star
--1 F0AD u2734 # Eight pointed black star
--1 F0AE u2739 # Twelve pointed black star
--1 F0AF u2735 # Eight pointed pinwheel star
--1 F0B0 ---
--1 F0B1 u2316 # Position indicator
--1 F0B2 u2727 # White four pointed star
--1 F0B3 u2311 # Square lozenge
--1 F0B4 ---
--1 F0B5 u272A # Circled white star
--1 F0B6 u2730 # Shadowed white star
--1 F0B7 ---
--1 F0B8 ---
--1 F0B9 ---
--1 F0BA ---
--1 F0BB ---
--1 F0BC ---
--1 F0BD ---
--1 F0BE ---
--1 F0BF ---
--1 F0C0 ---
--1 F0C1 ---
--1 F0C2 ---
--1 F0C3 ---
--1 F0C4 ---
--1 F0C5 ---
--1 F0C6 ---
--1 F0C7 ---
--1 F0C8 ---
--1 F0C9 ---
--1 F0CA ---
--1 F0CB ---
--1 F0CC ---
--1 F0CD ---
--1 F0CE ---
--1 F0CF ---
--1 F0D0 ---
--1 F0D1 ---
--1 F0D2 ---
--1 F0D3 ---
--1 F0D4 ---
--1 F0D5 u232B # Erase to the left
--1 F0D6 u2326 # Erase to the right
--1 F0D7 ---
--1 F0D8 u27A2 # Three-D top-lighted rightwards arrowhead
--1 F0D9 ---
--1 F0DA ---
--1 F0DB ---
--1 F0DC u27B2 # Circled heavy white rightwards arrow
--1 F0DD ---
--1 F0DE ---
--1 F0DF ---
--1 F0E0 ---
--1 F0E1 ---
--1 F0E2 ---
--1 F0E3 ---
--1 F0E4 ---
--1 F0E5 ---
--1 F0E6 ---
--1 F0E7 ---
--1 F0E8 u2794 # Heavy wide-headed rightwards arrow
--1 F0E9 ---
--1 F0EA ---
--1 F0EB ---
--1 F0EC ---
--1 F0ED ---
--1 F0EE ---
--1 F0EF u21E6 # Leftwards white arrow
--1 F0F0 u21E8 # Rightwards white arrow
--1 F0F1 u21E7 # Upwards white arrow
--1 F0F2 u21E9 # Downwards white arrow
--1 F0F3 u2B04 # Left right white arrow
--1 F0F4 u21F3 # Up down white arrow
--1 F0F5 u2B00 # North east white arrow
--1 F0F6 u2B01 # North west white arrow
--1 F0F7 u2B03 # South west white arrow
--1 F0F8 u2B02 # South east white arrow
--1 F0F9 u25AD # White rectangle
--1 F0FA u25AB # White small square
--1 F0FB u2717 # Ballot X
--1 F0FC u2713 # Check mark
--1 F0FD u2612 # Ballot box with X
--1 F0FE u2611 # Ballot box with check
--1 F0FF ---
-
-# EOF
diff --git a/contrib/groff/font/devps/AB b/contrib/groff/font/devps/AB
deleted file mode 100644
index 464dd520401c..000000000000
--- a/contrib/groff/font/devps/AB
+++ /dev/null
@@ -1,492 +0,0 @@
-name AB
-internalname AvantGarde-Demi
-spacewidth 280
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -50
-A w -65
-A v -70
-A u -20
-A ' -90
-A cq -90
-A Y -80
-A W -60
-A V -102
-A U -40
-A T -25
-A Q -50
-A O -50
-A G -40
-A C -40
-B A -10
-C A -40
-D . -20
-D , -20
-D Y -45
-D W -25
-D V -50
-D A -50
-F . -129
-F e -20
-F , -162
-F a -20
-F A -75
-G . -20
-G , -20
-G Y -15
-J . -15
-J a -20
-J A -30
-K y -20
-K u -15
-K o -45
-K e -40
-K O -30
-L y -23
-L ' -30
-L cq -30
-L rq -30
-L Y -80
-L W -55
-L V -85
-L T -46
-O . -30
-O , -30
-O Y -30
-O X -30
-O W -20
-O V -45
-O T -15
-O A -60
-P . -200
-P o -20
-P e -20
-P , -220
-P a -20
-P A -100
-Q , 20
-R W 25
-R V -10
-R U 25
-R T 40
-R O 25
-S , 20
-T y -10
-T w -55
-T u -46
-T ; -29
-T r -30
-T . -91
-T o -49
-T - -75
-T hy -75
-T e -49
-T , -82
-T : -15
-T a -70
-T O -15
-T A -25
-U . -20
-U , -20
-U A -40
-V u -55
-V ; -33
-V . -145
-V o -101
-V i -15
-V - -75
-V hy -75
-V e -101
-V , -145
-V : -18
-V a -95
-V O -45
-V G -20
-V A -102
-W y -15
-W u -30
-W ; -33
-W . -106
-W o -46
-W i -10
-W - -35
-W hy -35
-W e -47
-W , -106
-W : -15
-W a -50
-W O -20
-W A -58
-Y u -52
-Y ; -23
-Y . -145
-Y o -89
-Y - -100
-Y hy -100
-Y e -89
-Y , -145
-Y : -10
-Y a -93
-Y O -30
-Y A -80
-a t 5
-a p 20
-a b 5
-b y -20
-b v -20
-c y -20
-c l -15
-c k -15
-, u0020 -50
-, ' -70
-, cq -70
-, rq -70
-e y -20
-e x -20
-e w -20
-e v -20
-f . -40
-f o -20
-f l -15
-f i -15
-f f -20
-f .i -15
-f , -40
-f a -15
-g i 25
-g a 15
-h y -30
-k y -5
-k o -30
-k e -40
-m y -20
-m u -20
-n y -15
-n v -30
-o y -20
-o x -30
-o w -20
-o v -30
-p y -20
-. u0020 -50
-. ' -70
-. cq -70
-. rq -70
-lq A -50
-rq u0020 -50
-` ` -80
-` oq -80
-oq ` -80
-oq oq -80
-` A -50
-oq A -50
-' v -10
-cq v -10
-' t 10
-cq t 10
-' u0020 -50
-cq u0020 -50
-' s -15
-cq s -15
-' r -20
-cq r -20
-' ' -80
-' cq -80
-cq ' -80
-cq cq -80
-' d -50
-cq d -50
-r y 40
-r v 40
-r u 20
-r t 20
-r s 20
-r q -8
-r . -73
-r p 20
-r o -15
-r n 21
-r m 15
-r l 20
-r k 5
-r i 20
-r - -60
-r hy -60
-r g 1
-r e -4
-r d -6
-r , -75
-r c -7
-s . 20
-s , 20
-u0020 ` -50
-u0020 oq -50
-u0020 lq -50
-u0020 Y -60
-u0020 W -25
-u0020 V -80
-u0020 T -25
-u0020 A -20
-v . -90
-v o -20
-v e -20
-v , -90
-v a -30
-w . -90
-w o -30
-w e -20
-w , -90
-w a -30
-x e -20
-y . -100
-y o -30
-y e -20
-y , -100
-y c -35
-y a -30
-charset
-ha 600,740 2 0 asciicircum
-ti 600,347 0 1 asciitilde
-vS 520,944,15 2 2 Scaron
-vZ 500,944 2 3 Zcaron
-vs 440,774,18 2 4 scaron
-vz 460,774 2 5 zcaron
-:Y 620,939,0,2,2 2 6 Ydieresis
-tm 1000,740 2 7 trademark
-aq 220,740 2 8 quotesingle
-space 280 0 32 space
-! 280,740 2 33 exclam
-" 360,740 2 34 quotedbl
-dq "
-# 560,700 0 35 numbersign
-sh "
-$ 560,857,86 2 36 dollar
-Do "
-% 860,755,15 2 37 percent
-& 680,755,15 2 38 ampersand
-' 280,740 2 39 quoteright
-cq "
-( 380,754,157 2 40 parenleft
-) 380,754,157 2 41 parenright
-* 440,755 2 42 asterisk
-+ 600,506 0 43 plus
-, 280,133,141 0 44 comma
-- 420,348 0 45 hyphen
-hy "
-. 280,133 0 46 period
-/ 460,740,100 2 47 slash
-sl "
-0 560,755,15 2 48 zero
-1 560,740 2 49 one
-2 560,755 2 50 two
-3 560,755,15 2 51 three
-4 560,740 2 52 four
-5 560,740,15 2 53 five
-6 560,739,15 2 54 six
-7 560,740 2 55 seven
-8 560,755,15 2 56 eight
-9 560,754 2 57 nine
-: 280,555 0 58 colon
-; 280,555,141 0 59 semicolon
-< 600,514,8 0 60 less
-= 600,425 0 61 equal
-> 600,514,8 0 62 greater
-? 560,755 2 63 question
-@ 740,712,12,10 0 64 at
-at "
-A 740,740 2 65 A
-B 580,740 2 66 B
-C 780,755,15 2 67 C
-D 700,740 2 68 D
-E 520,740 2 69 E
-F 480,740 2 70 F
-G 840,755,15 2 71 G
-H 680,740 2 72 H
-I 280,740 2 73 I
-J 480,740,15 2 74 J
-K 620,740 2 75 K
-L 440,740 2 76 L
-M 900,740 2 77 M
-N 740,740 2 78 N
-O 840,755,15 2 79 O
-P 560,740 2 80 P
-Q 840,755,15 2 81 Q
-R 580,740 2 82 R
-S 520,755,15 2 83 S
-T 420,740 2 84 T
-U 640,740,15 2 85 U
-V 700,740 2 86 V
-W 900,740 2 87 W
-X 680,740 2 88 X
-Y 620,740,0,2,2 2 89 Y
-Z 500,740 2 90 Z
-[ 320,754,157 2 91 bracketleft
-lB "
-\ 640,740,100 2 92 backslash
-rs "
-] 320,754,157 2 93 bracketright
-rB "
-a^ 540,774 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 280,740 2 96 quoteleft
-oq "
-a 660,574,18 0 97 a
-b 660,740,18 2 98 b
-c 640,574,18 0 99 c
-d 660,740,18 2 100 d
-e 640,577,18 0 101 e
-f 280,755 2 102 f
-g 660,574,226 1 103 g
-h 600,740 2 104 h
-i 240,740 2 105 i
-j 260,740,185 3 106 j
-k 580,740 2 107 k
-l 240,740 2 108 l
-m 940,574 0 109 m
-n 600,574 0 110 n
-o 640,574,18 0 111 o
-p 660,574,185 1 112 p
-q 660,574,185 1 113 q
-r 320,574 0 114 r
-s 440,574,18 0 115 s
-t 300,740 2 116 t
-u 600,555,18 0 117 u
-v 560,555 0 118 v
-w 800,555 0 119 w
-x 560,555 0 120 x
-y 580,555,185 1 121 y
-z 460,555 0 122 z
-lC 340,747,191,0,3 3 123 braceleft
-{ "
-ba 600,740,100 2 124 bar
-| "
-rC 340,747,191,3 3 125 braceright
-} "
-a~ 480,767 2 126 tilde
-~ "
-bq 280,133,141 0 128 quotesinglbase
-Fo 460,469 0 129 guillemotleft
-Fc 460,469 0 130 guillemotright
-bu 600,532 0 131 bullet
-Fn 560,824,151 2 132 florin
-f/ 160,740,0,122,123 2 133 fraction
-%0 1280,755,15 2 134 perthousand
-dg 560,740,142 2 135 dagger
-dd 560,740,142 2 136 daggerdbl
-en 500,348 0 137 endash
-em 1000,348 0 138 emdash
-fi 520,755 2 140 fi
-fl 520,755 2 141 fl
-.i 240,555 0 144 dotlessi
-ga 420,851 2 146 grave
-a" 700,862 2 147 hungarumlaut
-a. 280,769 2 148 dotaccent
-ab 480,770 2 149 breve
-ah 540,774 2 150 caron
-ao 360,834 2 151 ring
-ho 340,9,195 1 152 ogonek
-lq 480,740 2 153 quotedblleft
-rq 480,740 2 154 quotedblright
-oe 1080,574,18 0 155 oe
-/l 320,740 2 156 lslash
-Bq 480,133,141 0 157 quotedblbase
-OE 1060,755,15 2 158 OE
-/L 480,740 2 159 Lslash
-r! 280,555,185 1 161 exclamdown
-ct 560,715 0 162 cent
-Po 560,755,0,2,2 2 163 sterling
-Cs 560,577 0 164 currency
-Ye 560,740,0,10,10 2 165 yen
-bb 600,740,100 2 166 brokenbar
-sc 560,755,158 2 167 section
-ad 500,769 2 168 dieresis
-co 740,752,12,12,12 2 169 copyright
-Of 360,755 2 170 ordfeminine
-fo 240,469 0 171 guilsinglleft
-tno 600,425 0 172 logicalnot
-\- 600,313 0 173 minus
-rg 740,752,12,12,12 2 174 registered
-a- 420,759 2 175 macron
-de 400,712 0 176 degree
-t+- 600,556,62 0 177 plusminus
-S2 336,749 2 178 twosuperior
-S3 336,749 2 179 threesuperior
-aa 420,849 2 180 acute
-mc 576,555,187 1 181 mu
-ps 600,740,103,7,7 2 182 paragraph
-pc 280,320 0 183 periodcentered
-ac 340,6,251 1 184 cedilla
-S1 336,740 2 185 onesuperior
-Om 360,755 2 186 ordmasculine
-fc 240,469 0 187 guilsinglright
-14 840,740 2 188 onequarter
-12 840,740 2 189 onehalf
-34 840,749 2 190 threequarters
-r? 560,555,200 1 191 questiondown
-`A 740,1021 2 192 Agrave
-'A 740,1019 2 193 Aacute
-^A 740,944 2 194 Acircumflex
-~A 740,937 2 195 Atilde
-:A 740,939 2 196 Adieresis
-oA 740,969 2 197 Aring
-AE 900,740,0,0,5 2 198 AE
-,C 780,755,251 3 199 Ccedilla
-`E 520,1021 2 200 Egrave
-'E 520,1019 2 201 Eacute
-^E 520,944 2 202 Ecircumflex
-:E 520,939 2 203 Edieresis
-`I 280,1021,0,0,45 2 204 Igrave
-'I 280,1019,0,45 2 205 Iacute
-^I 280,944,0,60,59 2 206 Icircumflex
-:I 280,939,0,32,32 2 207 Idieresis
--D 742,740 2 208 Eth
-~N 740,937 2 209 Ntilde
-`O 840,1021,15 2 210 Ograve
-'O 840,1019,15 2 211 Oacute
-^O 840,944,15 2 212 Ocircumflex
-~O 840,937,15 2 213 Otilde
-:O 840,939,15 2 214 Odieresis
-tmu 600,494 0 215 multiply
-/O 840,814,71 2 216 Oslash
-`U 640,1021,15 2 217 Ugrave
-'U 640,1019,15 2 218 Uacute
-^U 640,944,15 2 219 Ucircumflex
-:U 640,939,15 2 220 Udieresis
-'Y 620,1019,0,2,2 2 221 Yacute
-TP 560,740 2 222 Thorn
-ss 600,755,18 2 223 germandbls
-`a 660,851,18 2 224 agrave
-'a 660,849,18 2 225 aacute
-^a 660,774,18 2 226 acircumflex
-~a 660,767,18 2 227 atilde
-:a 660,769,18 2 228 adieresis
-oa 660,834,18 2 229 aring
-ae 1080,574,18 0 230 ae
-,c 640,574,251 1 231 ccedilla
-`e 640,851,18 2 232 egrave
-'e 640,849,18 2 233 eacute
-^e 640,774,18 2 234 ecircumflex
-:e 640,769,18 2 235 edieresis
-`i 240,851,0,0,65 2 236 igrave
-'i 240,849,0,65 2 237 iacute
-^i 240,774,0,80,79 2 238 icircumflex
-:i 240,769,0,52,52 2 239 idieresis
-Sd 640,754,18 2 240 eth
-~n 600,767 2 241 ntilde
-`o 640,851,18 2 242 ograve
-'o 640,849,18 2 243 oacute
-^o 640,774,18 2 244 ocircumflex
-~o 640,767,18 2 245 otilde
-:o 640,769,18 2 246 odieresis
-tdi 600,526,20 0 247 divide
-/o 660,608,50 0 248 oslash
-`u 600,851,18 2 249 ugrave
-'u 600,849,18 2 250 uacute
-^u 600,774,18 2 251 ucircumflex
-:u 600,769,18 2 252 udieresis
-'y 580,849,185 3 253 yacute
-Tp 660,740,185 3 254 thorn
-:y 580,769,185 3 255 ydieresis
-u2026 1000,133 0 256 ellipsis
diff --git a/contrib/groff/font/devps/ABI b/contrib/groff/font/devps/ABI
deleted file mode 100644
index 22b3126be4c0..000000000000
--- a/contrib/groff/font/devps/ABI
+++ /dev/null
@@ -1,493 +0,0 @@
-name ABI
-internalname AvantGarde-DemiOblique
-slant 10.5
-spacewidth 280
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -50
-A w -65
-A v -70
-A u -20
-A ' -90
-A cq -90
-A Y -80
-A W -60
-A V -102
-A U -40
-A T -25
-A Q -50
-A O -50
-A G -40
-A C -40
-B A -10
-C A -40
-D . -20
-D , -20
-D Y -45
-D W -25
-D V -50
-D A -50
-F . -129
-F e -20
-F , -162
-F a -20
-F A -75
-G . -20
-G , -20
-G Y -15
-J . -15
-J a -20
-J A -30
-K y -20
-K u -15
-K o -45
-K e -40
-K O -30
-L y -23
-L ' -30
-L cq -30
-L rq -30
-L Y -80
-L W -55
-L V -85
-L T -46
-O . -30
-O , -30
-O Y -30
-O X -30
-O W -20
-O V -45
-O T -15
-O A -60
-P . -200
-P o -20
-P e -20
-P , -220
-P a -20
-P A -100
-Q , 20
-R W 25
-R V -10
-R U 25
-R T 40
-R O 25
-S , 20
-T y -10
-T w -55
-T u -46
-T ; -29
-T r -30
-T . -91
-T o -49
-T - -75
-T hy -75
-T e -49
-T , -82
-T : -15
-T a -70
-T O -15
-T A -25
-U . -20
-U , -20
-U A -40
-V u -55
-V ; -33
-V . -145
-V o -101
-V i -15
-V - -75
-V hy -75
-V e -101
-V , -145
-V : -18
-V a -95
-V O -45
-V G -20
-V A -102
-W y -15
-W u -30
-W ; -33
-W . -106
-W o -46
-W i -10
-W - -35
-W hy -35
-W e -47
-W , -106
-W : -15
-W a -50
-W O -20
-W A -58
-Y u -52
-Y ; -23
-Y . -145
-Y o -89
-Y - -100
-Y hy -100
-Y e -89
-Y , -145
-Y : -10
-Y a -93
-Y O -30
-Y A -80
-a t 5
-a p 20
-a b 5
-b y -20
-b v -20
-c y -20
-c l -15
-c k -15
-, u0020 -50
-, ' -70
-, cq -70
-, rq -70
-e y -20
-e x -20
-e w -20
-e v -20
-f . -40
-f o -20
-f l -15
-f i -15
-f f -20
-f .i -15
-f , -40
-f a -15
-g i 25
-g a 15
-h y -30
-k y -5
-k o -30
-k e -40
-m y -20
-m u -20
-n y -15
-n v -30
-o y -20
-o x -30
-o w -20
-o v -30
-p y -20
-. u0020 -50
-. ' -70
-. cq -70
-. rq -70
-lq A -50
-rq u0020 -50
-` ` -80
-` oq -80
-oq ` -80
-oq oq -80
-` A -50
-oq A -50
-' v -10
-cq v -10
-' t 10
-cq t 10
-' u0020 -50
-cq u0020 -50
-' s -15
-cq s -15
-' r -20
-cq r -20
-' ' -80
-' cq -80
-cq ' -80
-cq cq -80
-' d -50
-cq d -50
-r y 40
-r v 40
-r u 20
-r t 20
-r s 20
-r q -8
-r . -73
-r p 20
-r o -15
-r n 21
-r m 15
-r l 20
-r k 5
-r i 20
-r - -60
-r hy -60
-r g 1
-r e -4
-r d -6
-r , -75
-r c -7
-s . 20
-s , 20
-u0020 ` -50
-u0020 oq -50
-u0020 lq -50
-u0020 Y -60
-u0020 W -25
-u0020 V -80
-u0020 T -25
-u0020 A -20
-v . -90
-v o -20
-v e -20
-v , -90
-v a -30
-w . -90
-w o -30
-w e -20
-w , -90
-w a -30
-x e -20
-y . -100
-y o -30
-y e -20
-y , -100
-y c -35
-y a -30
-charset
-ha 600,740,0,46,-92,46 2 0 asciicircum
-ti 600,347,0,29,-64,29 0 1 asciitilde
-vS 520,944,15,165,1,82 2 2 Scaron
-vZ 500,944,0,200,31,82 2 3 Zcaron
-vs 440,774,18,173,1,82 2 4 scaron
-vz 460,774,0,188,30,82 2 5 zcaron
-:Y 620,939,0,189,-85,82 2 6 Ydieresis
-tm 1000,740,0,8,-81,8 2 7 trademark
-aq 220,740,0,144,-102,82 2 8 quotesingle
-space 280 0 32 space
-! 280,740,0,113,-23,82 2 33 exclam
-" 360,740,0,168,-77,82 2 34 quotedbl
-dq "
-# 560,700,0,108,-16,82 0 35 numbersign
-sh "
-$ 560,857,86,72,-49,72 2 36 dollar
-Do "
-% 860,755,15,46,-89,46 2 37 percent
-& 680,755,15,112,-21,82 2 38 ampersand
-' 280,740,0,112,-109,82 2 39 quoteright
-cq "
-( 380,754,157,160,-70,82 2 40 parenleft
-) 380,754,157,48,42,48 2 41 parenright
-* 440,755,0,102,-124,82 2 42 asterisk
-+ 600,506,0,60,-34,60 0 43 plus
-, 280,133,141,1,2,1 0 44 comma
-- 420,348,0,43,-64,43 0 45 hyphen
-hy "
-. 280,133,0,1,-23,1 0 46 period
-/ 460,740,100,181,63,82 2 47 slash
-sl "
-0 560,755,15,118,-20,82 2 48 zero
-1 560,740,0,0,-180 2 49 one
-2 560,755,0,112,6,82 2 50 two
-3 560,755,15,75,-17,75 2 51 three
-4 560,740,0,94,14,82 2 52 four
-5 560,740,15,90,-14,82 2 53 five
-6 560,739,15,77,-14,77 2 54 six
-7 560,740,0,125,-33,82 2 55 seven
-8 560,755,15,80,-21,80 2 56 eight
-9 560,754,0,123,-60,82 2 57 nine
-: 280,555,0,79,-23,79 0 58 colon
-; 280,555,141,79,2,79 0 59 semicolon
-< 600,514,8,99,-34,82 0 60 less
-= 600,425,0,81,-13,81 0 61 equal
-> 600,514,8,60,5,60 0 62 greater
-? 560,755,0,83,-85,82 2 63 question
-@ 740,712,12,142,-59,82 0 64 at
-at "
-A 740,740,0,42,43,42 2 65 A
-B 580,740,0,80,-20,80 2 66 B
-C 780,755,15,134,-47,82 2 67 C
-D 700,740,0,82,-13,82 2 68 D
-E 520,740,0,126,-11,82 2 69 E
-F 480,740,0,145,-11,82 2 70 F
-G 840,755,15,97,-39,82 2 71 G
-H 680,740,0,117,-21,82 2 72 H
-I 280,740,0,116,-22,82 2 73 I
-J 480,740,15,116,16,82 2 74 J
-K 620,740,0,187,-39,82 2 75 K
-L 440,740,0,69,-22,69 2 76 L
-M 900,740,0,124,-13,82 2 77 M
-N 740,740,0,118,-20,82 2 78 N
-O 840,755,15,92,-45,82 2 79 O
-P 560,740,0,135,-22,82 2 80 P
-Q 840,755,15,92,-44,82 2 81 Q
-R 580,740,0,126,-14,82 2 82 R
-S 520,755,15,108,1,82 2 83 S
-T 420,740,0,185,-69,82 2 84 T
-U 640,740,15,132,-47,82 2 85 U
-V 700,740,0,182,-95,82 2 86 V
-W 900,740,0,186,-94,82 2 87 W
-X 680,740,0,183,46,82 2 88 X
-Y 620,740,0,189,-85,82 2 89 Y
-Z 500,740,0,149,31,82 2 90 Z
-[ 320,754,157,154,-39,82 2 91 bracketleft
-lB "
-\ 640,740,100,0,-183 2 92 backslash
-rs "
-] 320,754,157,72,43,72 2 93 bracketright
-rB "
-a^ 540,774,0,98,-139,82 2 94 circumflex
-^ "
-_ 500,0,125,36,73,36 0 95 underscore
-` 280,740,0,111,-108,82 2 96 quoteleft
-oq "
-a 660,574,18,106,-23,82 0 97 a
-b 660,740,18,79,3,79 2 98 b
-c 640,574,18,89,-34,82 0 99 c
-d 660,740,18,145,-30,82 2 100 d
-e 640,577,18,77,-27,77 0 101 e
-f 280,755,0,190,-12,82 2 102 f
-g 660,574,226,116,17,82 1 103 g
-h 600,740,0,64,-4,64 2 104 h
-i 240,740,0,133,-3,82 2 105 i
-j 260,740,185,132,68,82 3 106 j
-k 580,740,0,118,-30,82 2 107 k
-l 240,740,0,134,-4,82 2 108 l
-m 940,574,0,64,-4,64 0 109 m
-n 600,574,0,63,-4,63 0 110 n
-o 640,574,18,82,-21,82 0 111 o
-p 660,574,185,76,37,76 1 112 p
-q 660,574,185,106,-28,82 1 113 q
-r 320,574,0,153,-13,82 0 114 r
-s 440,574,18,93,1,82 0 115 s
-t 300,740,0,152,-36,82 2 116 t
-u 600,555,18,97,-37,82 0 117 u
-v 560,555,0,149,-56,82 0 118 v
-w 800,555,0,142,-64,82 0 119 w
-x 560,555,0,122,47,82 0 120 x
-y 580,555,185,144,-25,82 1 121 y
-z 460,555,0,118,30,82 0 122 z
-lC 340,747,191,165,10,82 3 123 braceleft
-{ "
-ba 600,740,100,0,-164 2 124 bar
-| "
-rC 340,747,191,115,62,82 3 125 braceright
-} "
-a~ 480,767,0,134,-128,82 2 126 tilde
-~ "
-bq 280,133,141,0,3 0 128 quotesinglbase
-Fo 460,469,0,77,-55,77 0 129 guillemotleft
-Fc 460,469,0,53,-31,53 0 130 guillemotright
-bu 600,532,0,0,-165 0 131 bullet
-Fn 560,824,151,154,77,82 2 132 florin
-f/ 160,740,0,309,173,82 2 133 fraction
-%0 1280,755,15,26,-89,26 2 134 perthousand
-dg 560,740,142,102,-83,82 2 135 dagger
-dd 560,740,142,108,-13,82 2 136 daggerdbl
-en 500,348,0,79,-28,79 0 137 endash
-em 1000,348,0,79,-28,79 0 138 emdash
-fi 520,755,0,128,-22,82 2 140 fi
-fl 520,755,0,128,-22,82 2 141 fl
-.i 240,555,0,99,-3,82 0 144 dotlessi
-ga 420,851,0,92,-139,82 2 146 grave
-a" 700,862,0,104,-208,82 2 147 hungarumlaut
-a. 280,769,0,120,-142,82 2 148 dotaccent
-ab 480,770,0,152,-135,82 2 149 breve
-ah 540,774,0,123,-164,82 2 150 caron
-ao 360,834,0,114,-156,82 2 151 ring
-ho 340,9,195,0,-9 1 152 ogonek
-lq 480,740,0,116,-106,82 2 153 quotedblleft
-rq 480,740,0,117,-107,82 2 154 quotedblright
-oe 1080,574,18,78,-26,78 0 155 oe
-/l 320,740,0,134,-24,82 2 156 lslash
-Bq 480,133,141,5,5,5 0 157 quotedblbase
-OE 1060,755,15,134,-48,82 2 158 OE
-/L 480,740,0,54,-18,54 2 159 Lslash
-r! 280,555,185,80,10,80 1 161 exclamdown
-ct 560,715,0,89,-60,82 0 162 cent
-Po 560,755,0,105,12,82 2 163 sterling
-Cs 560,577,0,118,-3,82 0 164 currency
-Ye 560,740,0,197,-33,82 2 165 yen
-bb 600,740,100,0,-164 2 166 brokenbar
-sc 560,755,158,92,-15,82 2 167 section
-ad 500,769,0,115,-146,82 2 168 dieresis
-co 740,752,12,137,0,82 2 169 copyright
-Of 360,755,0,162,-77,82 2 170 ordfeminine
-fo 240,469,0,87,-44,82 0 171 guilsinglleft
-tno 600,425,0,81,-55,81 0 172 logicalnot
-\- 600,313,0,60,-34,60 0 173 minus
-rg 740,752,12,137,0,82 2 174 registered
-a- 420,759,0,120,-142,82 2 175 macron
-de 400,712,0,101,-110,82 0 176 degree
-t+- 600,556,62,76,13,76 0 177 plusminus
-S2 336,749,0,150,-23,82 2 178 twosuperior
-S3 336,749,0,127,-37,82 2 179 threesuperior
-aa 420,849,0,138,-174,82 2 180 acute
-mc 576,555,187,116,47,82 1 181 mu
-ps 600,740,103,194,-40,82 2 182 paragraph
-pc 280,320,0,35,-58,35 0 183 periodcentered
-ac 340,6,251,0,-17 1 184 cedilla
-S1 336,740,0,74,-132,74 2 185 onesuperior
-Om 360,755,0,141,-81,82 2 186 ordmasculine
-fc 240,469,0,63,-20,63 0 187 guilsinglright
-14 840,740,0,0,-137 2 188 onequarter
-12 840,740,0,40,-107,40 2 189 onehalf
-34 840,749,0,46,-47,46 2 190 threequarters
-r? 560,555,200,17,-19,17 1 191 questiondown
-`A 740,1021,0,42,43,42 2 192 Agrave
-'A 740,1019,0,42,43,42 2 193 Aacute
-^A 740,944,0,42,43,42 2 194 Acircumflex
-~A 740,937,0,42,43,42 2 195 Atilde
-:A 740,939,0,42,43,42 2 196 Adieresis
-oA 740,969,0,42,43,42 2 197 Aring
-AE 900,740,0,111,55,82 2 198 AE
-,C 780,755,251,134,-47,82 3 199 Ccedilla
-`E 520,1021,0,126,-11,82 2 200 Egrave
-'E 520,1019,0,126,-11,82 2 201 Eacute
-^E 520,944,0,139,-11,82 2 202 Ecircumflex
-:E 520,939,0,136,-11,82 2 203 Edieresis
-`I 280,1021,0,168,-22,82 2 204 Igrave
-'I 280,1019,0,264,-22,82 2 205 Iacute
-^I 280,944,0,259,-22,82 2 206 Icircumflex
-:I 280,939,0,256,-22,82 2 207 Idieresis
--D 742,740,0,74,-33,74 2 208 Eth
-~N 740,937,0,118,-20,82 2 209 Ntilde
-`O 840,1021,15,92,-45,82 2 210 Ograve
-'O 840,1019,15,92,-45,82 2 211 Oacute
-^O 840,944,15,92,-45,82 2 212 Ocircumflex
-~O 840,937,15,92,-45,82 2 213 Otilde
-:O 840,939,15,92,-45,82 2 214 Odieresis
-tmu 600,494,0,67,-26,67 0 215 multiply
-/O 840,814,71,101,-44,82 2 216 Oslash
-`U 640,1021,15,132,-47,82 2 217 Ugrave
-'U 640,1019,15,132,-47,82 2 218 Uacute
-^U 640,944,15,132,-47,82 2 219 Ucircumflex
-:U 640,939,15,132,-47,82 2 220 Udieresis
-'Y 620,1019,0,189,-85,82 2 221 Yacute
-TP 560,740,0,109,-22,82 2 222 Thorn
-ss 600,755,18,79,-1,79 2 223 germandbls
-`a 660,851,18,106,-23,82 2 224 agrave
-'a 660,849,18,106,-23,82 2 225 aacute
-^a 660,774,18,106,-23,82 2 226 acircumflex
-~a 660,767,18,106,-23,82 2 227 atilde
-:a 660,769,18,106,-23,82 2 228 adieresis
-oa 660,834,18,106,-23,82 2 229 aring
-ae 1080,574,18,75,-25,75 0 230 ae
-,c 640,574,251,89,-33,82 1 231 ccedilla
-`e 640,851,18,77,-27,77 2 232 egrave
-'e 640,849,18,77,-27,77 2 233 eacute
-^e 640,774,18,77,-27,77 2 234 ecircumflex
-:e 640,769,18,77,-27,77 2 235 edieresis
-`i 240,851,0,157,-3,82 2 236 igrave
-'i 240,849,0,253,-3,82 2 237 iacute
-^i 240,774,0,248,11,82 2 238 icircumflex
-:i 240,769,0,245,-3,82 2 239 idieresis
-Sd 640,754,18,109,-23,82 2 240 eth
-~n 600,767,0,74,-4,74 2 241 ntilde
-`o 640,851,18,82,-21,82 2 242 ograve
-'o 640,849,18,82,-21,82 2 243 oacute
-^o 640,774,18,82,-21,82 2 244 ocircumflex
-~o 640,767,18,82,-21,82 2 245 otilde
-:o 640,769,18,82,-21,82 2 246 odieresis
-tdi 600,526,20,60,-34,60 0 247 divide
-/o 660,608,50,75,-31,75 0 248 oslash
-`u 600,851,18,97,-37,82 2 249 ugrave
-'u 600,849,18,97,-37,82 2 250 uacute
-^u 600,774,18,97,-37,82 2 251 ucircumflex
-:u 600,769,18,97,-37,82 2 252 udieresis
-'y 580,849,185,144,-25,82 3 253 yacute
-Tp 660,740,185,76,37,76 3 254 thorn
-:y 580,769,185,144,-25,82 3 255 ydieresis
-u2026 1000,133,0,0,-50 0 256 ellipsis
diff --git a/contrib/groff/font/devps/AI b/contrib/groff/font/devps/AI
deleted file mode 100644
index 4758916983ec..000000000000
--- a/contrib/groff/font/devps/AI
+++ /dev/null
@@ -1,493 +0,0 @@
-name AI
-internalname AvantGarde-BookOblique
-slant 10.5
-spacewidth 277
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -62
-A w -65
-A v -70
-A u -20
-A ' -100
-A cq -100
-A rq -100
-A Y -92
-A W -60
-A V -102
-A U -40
-A T -45
-A Q -40
-A O -50
-A G -40
-A C -40
-B A -10
-C A -40
-D . -20
-D , -20
-D Y -30
-D W -10
-D V -50
-D A -50
-F . -160
-F e -20
-F , -180
-F a -20
-F A -75
-G . -20
-G , -20
-G Y -20
-J . -15
-J a -20
-J A -30
-K o -15
-K e -20
-K O -20
-L y -23
-L ' -130
-L cq -130
-L rq -130
-L Y -91
-L W -67
-L V -113
-L T -46
-O . -30
-O , -30
-O Y -30
-O X -30
-O W -20
-O V -60
-O T -30
-O A -60
-P . -300
-P o -60
-P e -20
-P , -280
-P a -20
-P A -114
-Q , 20
-R Y -10
-R W 10
-R V -10
-R T 6
-S , 20
-T y -50
-T w -55
-T u -46
-T ; -29
-T r -30
-T . -91
-T o -70
-T i 10
-T - -75
-T hy -75
-T e -49
-T , -82
-T : -15
-T a -90
-T O -30
-T A -45
-U . -20
-U , -20
-U A -40
-V u -40
-V ; -33
-V . -165
-V o -101
-V i -5
-V - -75
-V hy -75
-V e -101
-V , -145
-V : -18
-V a -104
-V O -60
-V G -20
-V A -102
-W y -2
-W u -30
-W ; -33
-W . -106
-W o -46
-W i 6
-W - -35
-W hy -35
-W e -47
-W , -106
-W : -15
-W a -50
-W O -20
-W A -58
-Y u -52
-Y ; -23
-Y . -175
-Y o -89
-Y - -85
-Y hy -85
-Y e -89
-Y , -145
-Y : -10
-Y a -93
-Y O -30
-Y A -92
-a p 20
-a b 20
-b y -20
-b v -20
-c y -20
-c k -15
-, u0020 -110
-, ' -120
-, cq -120
-, rq -120
-e y -20
-e w -20
-e v -20
-f . -50
-f o -40
-f l -30
-f i -34
-f f -60
-f e -20
-f .i -34
-f , -50
-f a -40
-g a -15
-h y -30
-k y -5
-k e -15
-m y -20
-m u -20
-m a -20
-n y -15
-n v -20
-o y -20
-o x -15
-o w -20
-o v -30
-p y -20
-. u0020 -110
-. ' -120
-. cq -120
-. rq -120
-lq ` -35
-lq oq -35
-lq A -100
-rq u0020 -110
-` ` -203
-` oq -203
-oq ` -203
-oq oq -203
-` A -100
-oq A -100
-' v -30
-cq v -30
-' t 10
-cq t 10
-' u0020 -110
-cq u0020 -110
-' s -15
-cq s -15
-' r -20
-cq r -20
-' ' -203
-' cq -203
-cq ' -203
-cq cq -203
-' rq -35
-cq rq -35
-' d -110
-cq d -110
-r y 40
-r v 40
-r u 20
-r t 20
-r s 20
-r q -8
-r . -73
-r p 20
-r o -20
-r n 21
-r m 28
-r l 20
-r k 20
-r i 20
-r - -60
-r hy -60
-r g -15
-r e -4
-r d -6
-r , -75
-r c -20
-r a -20
-s . 20
-s , 20
-u0020 ` -110
-u0020 oq -110
-u0020 lq -110
-u0020 Y -60
-u0020 W -25
-u0020 V -50
-u0020 T -25
-u0020 A -20
-v . -130
-v o -30
-v e -20
-v , -100
-v a -30
-w . -100
-w o -30
-w h 15
-w e -20
-w , -90
-w a -30
-y . -125
-y o -30
-y e -20
-y , -110
-y a -30
-charset
-ha 606,740,0,54,-60,54 2 0 asciicircum
-ti 606,319,0,28,-64,28 0 1 asciitilde
-vS 498,927,13,145,-7,81 2 2 Scaron
-vZ 480,927,0,166,38,81 2 3 Zcaron
-vs 388,764,13,170,1,81 2 4 scaron
-vz 425,764,0,152,40,81 2 5 zcaron
-:Y 592,928,0,187,-88,81 2 6 Ydieresis
-tm 1000,740,0,3,-87,3 2 7 trademark
-aq 198,740,0,129,-103,81 2 8 quotesingle
-space 277 0 32 space
-! 295,740,0,77,-61,77 2 33 exclam
-" 309,740,0,151,-80,81 2 34 quotedbl
-dq "
-# 554,740,0,116,-21,81 2 35 numbersign
-sh "
-$ 554,811,70,77,-57,77 2 36 dollar
-Do "
-% 775,751,13,62,-74,62 2 37 percent
-& 757,753,12,68,-42,68 2 38 ampersand
-' 351,740,0,92,-145,81 2 39 quoteright
-cq "
-( 369,757,205,176,-39,81 3 40 parenleft
-) 369,757,205,63,74,63 3 41 parenright
-* 425,740,0,104,-120,81 2 42 asterisk
-+ 606,506,0,52,-42,52 0 43 plus
-, 277,126,67,0,48 0 44 comma
-- 332,315,0,78,-26,78 0 45 hyphen
-hy "
-. 277,126,0,0,-52 0 46 period
-/ 437,740,100,153,25,81 2 47 slash
-sl "
-0 554,753,13,118,-21,81 2 48 zero
-1 554,740,0,0,-210 2 49 one
-2 554,753,0,111,10,81 2 50 two
-3 554,753,13,61,-23,61 2 51 three
-4 554,740,0,94,11,81 2 52 four
-5 554,740,13,101,-19,81 2 53 five
-6 554,739,13,76,-15,76 2 54 six
-7 554,740,0,124,-60,81 2 55 seven
-8 554,753,13,76,-27,76 2 56 eight
-9 554,752,0,122,-61,81 2 57 nine
-: 277,548,0,51,-52,51 0 58 colon
-; 277,548,67,51,48,51 0 59 semicolon
-< 606,514,8,93,-37,81 0 60 less
-= 606,388,0,71,-23,71 0 61 equal
-> 606,514,8,57,-1,57 0 62 greater
-? 591,752,0,87,-108,81 2 63 question
-@ 867,753,13,71,-76,71 2 64 at
-at "
-A 740,740,0,39,38,39 2 65 A
-B 574,740,0,82,-24,81 2 66 B
-C 813,752,13,107,-55,81 2 67 C
-D 744,740,0,79,-24,79 2 68 D
-E 536,740,0,126,-20,81 2 69 E
-F 485,740,0,146,-20,81 2 70 F
-G 872,753,13,69,-53,69 2 71 G
-H 683,740,0,111,-26,81 2 72 H
-I 226,740,0,111,-26,81 2 73 I
-J 482,740,13,107,13,81 2 74 J
-K 591,740,0,187,-31,81 2 75 K
-L 462,740,0,62,-32,62 2 76 L
-M 919,740,0,111,-26,81 2 77 M
-N 740,740,0,111,-25,81 2 78 N
-O 869,753,13,82,-55,81 2 79 O
-P 592,740,0,122,-25,81 2 80 P
-Q 871,753,13,91,-52,81 2 81 Q
-R 607,740,0,112,-20,81 2 82 R
-S 498,753,13,113,-7,81 2 83 S
-T 426,740,0,180,-81,81 2 84 T
-U 655,740,13,111,-68,81 2 85 U
-V 702,740,0,178,-95,81 2 86 V
-W 960,740,0,177,-98,81 2 87 W
-X 609,740,0,165,42,81 2 88 X
-Y 592,740,0,187,-88,81 2 89 Y
-Z 480,740,0,166,38,81 2 90 Z
-[ 351,753,179,176,-95,81 2 91 bracketleft
-lB "
-\ 605,740,100,0,-205 2 92 backslash
-rs "
-] 351,753,179,11,69,11 2 93 bracketright
-rB "
-a^ 502,764,0,94,-142,81 2 94 circumflex
-^ "
-_ 500,0,125,36,73,36 0 95 underscore
-` 351,740,0,57,-182,57 2 96 quoteleft
-oq "
-a 683,561,13,89,-38,81 0 97 a
-b 682,740,13,71,-18,71 2 98 b
-c 647,561,13,81,-37,81 0 99 c
-d 685,740,13,120,-35,81 2 100 d
-e 650,561,13,64,-34,64 0 101 e
-f 314,753,0,190,-54,81 2 102 f
-g 673,561,215,84,-6,81 1 103 g
-h 610,740,0,46,-12,46 2 104 h
-i 200,740,0,122,-15,81 2 105 i
-j 203,740,192,121,130,81 3 106 j
-k 502,740,0,136,-20,81 2 107 k
-l 200,740,0,122,-15,81 2 108 l
-m 938,561,0,50,-16,50 0 109 m
-n 610,561,0,49,-15,49 0 110 n
-o 655,561,13,64,-38,64 0 111 o
-p 682,561,192,67,22,67 1 112 p
-q 682,561,192,85,-33,81 1 113 q
-r 301,561,0,144,-15,81 0 114 r
-s 388,561,13,86,1,81 0 115 s
-t 339,740,0,142,-54,81 2 116 t
-u 608,547,13,84,-50,81 0 117 u
-v 554,547,0,143,-58,81 0 118 v
-w 831,547,0,140,-64,81 0 119 w
-x 480,547,0,139,38,81 0 120 x
-y 536,547,192,138,-47,81 1 121 y
-z 425,547,0,123,40,81 0 122 z
-lC 351,740,189,167,-65,81 2 123 braceleft
-{ "
-ba 672,740,100,0,-230 2 124 bar
-| "
-rC 351,740,189,37,65,37 2 125 braceright
-} "
-a~ 439,754,0,131,-129,81 2 126 tilde
-~ "
-bq 354,126,68,0,-26 0 128 quotesinglbase
-Fo 425,481,0,94,-42,81 0 129 guillemotleft
-Fc 425,481,0,62,-10,62 0 130 guillemotright
-bu 606,532,0,0,-167 0 131 bullet
-Fn 554,818,153,165,89,81 2 132 florin
-f/ 166,740,0,301,163,81 2 133 fraction
-%0 1174,751,13,58,-78,58 2 134 perthousand
-dg 553,740,133,90,-96,81 2 135 dagger
-dd 553,740,133,90,-22,81 2 136 daggerdbl
-en 500,315,0,73,-31,73 0 137 endash
-em 1000,315,0,73,-31,73 0 138 emdash
-fi 487,753,0,122,-54,81 2 140 fi
-fl 485,753,0,122,-54,81 2 141 fl
-.i 200,547,0,86,-15,81 0 144 dotlessi
-ga 378,786,0,97,-154,81 2 146 grave
-a" 552,800,0,92,-189,81 2 147 hungarumlaut
-a. 222,765,0,118,-142,81 2 148 dotaccent
-ab 453,754,0,138,-142,81 2 149 breve
-ah 502,764,0,113,-160,81 2 150 caron
-ao 332,807,0,119,-141,81 2 151 ring
-ho 302,0,191,0,-3 1 152 ogonek
-lq 502,740,0,55,-184,55 2 153 quotedblleft
-rq 484,740,0,108,-147,81 2 154 quotedblright
-oe 1137,561,13,73,-30,73 0 155 oe
-/l 300,740,0,104,-45,81 2 156 lslash
-Bq 502,126,68,0,-26 0 157 quotedblbase
-OE 1194,753,13,135,-57,81 2 158 OE
-/L 517,740,0,62,-57,62 2 159 Lslash
-r! 295,548,192,41,-24,41 1 161 exclamdown
-ct 554,707,0,92,-65,81 0 162 cent
-Po 554,753,0,110,21,81 2 163 sterling
-Cs 554,580,0,141,26,81 0 164 currency
-Ye 554,740,0,183,-25,81 2 165 yen
-bb 672,740,100,0,-230 2 166 brokenbar
-sc 615,753,141,32,-68,32 2 167 section
-ad 369,765,0,118,-141,81 2 168 dieresis
-co 747,752,12,133,-3,81 2 169 copyright
-Of 369,753,0,175,-52,81 2 170 ordfeminine
-fo 251,481,0,94,-42,81 0 171 guilsinglleft
-tno 606,388,0,71,-60,71 0 172 logicalnot
-\- 606,287,0,52,-42,52 0 173 minus
-rg 747,752,12,133,-3,81 2 174 registered
-a- 485,736,0,112,-147,81 0 175 macron
-de 400,709,0,101,-108,81 0 176 degree
-t+- 606,518,24,62,3,62 0 177 plusminus
-S2 332,747,0,151,-24,81 2 178 twosuperior
-S3 332,747,0,126,-48,81 2 179 threesuperior
-aa 375,786,0,119,-153,81 2 180 acute
-mc 608,547,184,70,4,70 0 181 mu
-ps 564,740,110,174,-69,81 2 182 paragraph
-pc 277,316,0,8,-87,8 0 183 periodcentered
-ac 324,0,222,0,-2 1 184 cedilla
-S1 332,740,0,53,-140,53 2 185 onesuperior
-Om 369,753,0,147,-66,81 2 186 ordmasculine
-fc 251,481,0,62,-10,62 0 187 guilsinglright
-14 831,740,0,0,-133 2 188 onequarter
-12 831,740,0,29,-114,29 2 189 onehalf
-34 831,747,0,44,-76,44 2 190 threequarters
-r? 591,548,205,0,-14 1 191 questiondown
-`A 740,949,0,39,38,39 2 192 Agrave
-'A 740,949,0,39,38,39 2 193 Aacute
-^A 740,927,0,39,38,39 2 194 Acircumflex
-~A 740,917,0,39,38,39 2 195 Atilde
-:A 740,928,0,39,38,39 2 196 Adieresis
-oA 740,955,0,39,38,39 2 197 Aring
-AE 992,740,0,102,70,81 2 198 AE
-,C 813,752,222,107,-55,81 3 199 Ccedilla
-`E 536,949,0,126,-20,81 2 200 Egrave
-'E 536,949,0,126,-20,81 2 201 Eacute
-^E 536,927,0,126,-20,81 2 202 Ecircumflex
-:E 536,928,0,126,-20,81 2 203 Edieresis
-`I 226,949,0,164,-26,81 2 204 Igrave
-'I 226,949,0,264,-26,81 2 205 Iacute
-^I 226,927,0,263,-26,81 2 206 Icircumflex
-:I 226,928,0,220,-26,81 2 207 Idieresis
--D 790,740,0,73,-54,73 2 208 Eth
-~N 740,917,0,111,-25,81 2 209 Ntilde
-`O 869,949,13,82,-55,81 2 210 Ograve
-'O 869,949,13,82,-55,81 2 211 Oacute
-^O 869,927,13,82,-55,81 2 212 Ocircumflex
-~O 869,917,13,82,-55,81 2 213 Otilde
-:O 869,928,13,82,-55,81 2 214 Odieresis
-tmu 606,482,0,56,-37,56 0 215 multiply
-/O 868,819,83,111,-26,81 2 216 Oslash
-`U 655,949,13,111,-68,81 2 217 Ugrave
-'U 655,949,13,111,-68,81 2 218 Uacute
-^U 655,927,13,111,-68,81 2 219 Ucircumflex
-:U 655,928,13,111,-68,81 2 220 Udieresis
-'Y 592,949,0,187,-88,81 2 221 Yacute
-TP 592,740,0,79,-10,79 2 222 Thorn
-ss 554,753,13,74,-11,74 2 223 germandbls
-`a 683,786,13,89,-38,81 2 224 agrave
-'a 683,786,13,89,-38,81 2 225 aacute
-^a 683,764,13,89,-38,81 2 226 acircumflex
-~a 683,754,13,89,-38,81 2 227 atilde
-:a 683,765,13,89,-38,81 2 228 adieresis
-oa 683,807,13,89,-38,81 2 229 aring
-ae 1157,561,13,62,-30,62 0 230 ae
-,c 647,561,222,81,-37,81 1 231 ccedilla
-`e 650,786,13,64,-34,64 2 232 egrave
-'e 650,786,13,64,-34,64 2 233 eacute
-^e 650,764,13,64,-34,64 2 234 ecircumflex
-:e 650,765,13,64,-34,64 2 235 edieresis
-`i 200,786,0,146,-15,81 2 236 igrave
-'i 200,786,0,247,-15,81 2 237 iacute
-^i 200,764,0,245,9,81 2 238 icircumflex
-:i 200,765,0,203,-15,81 2 239 idieresis
-Sd 655,753,12,70,-38,70 2 240 eth
-~n 610,754,0,49,-15,49 2 241 ntilde
-`o 655,786,13,64,-38,64 2 242 ograve
-'o 655,786,13,64,-38,64 2 243 oacute
-^o 655,764,13,64,-38,64 2 244 ocircumflex
-~o 655,754,13,64,-38,64 2 245 otilde
-:o 655,765,13,64,-38,64 2 246 odieresis
-tdi 606,519,13,52,-42,52 0 247 divide
-/o 653,614,64,100,-1,81 0 248 oslash
-`u 608,786,13,84,-50,81 2 249 ugrave
-'u 608,786,13,84,-50,81 2 250 uacute
-^u 608,764,13,84,-50,81 2 251 ucircumflex
-:u 608,765,13,84,-50,81 2 252 udieresis
-'y 536,786,192,138,-47,81 3 253 yacute
-Tp 682,740,192,67,22,67 3 254 thorn
-:y 536,765,192,138,-47,81 3 255 ydieresis
-u2026 1000,126,0,0,-80 0 256 ellipsis
diff --git a/contrib/groff/font/devps/AR b/contrib/groff/font/devps/AR
deleted file mode 100644
index f5fb6c3c6745..000000000000
--- a/contrib/groff/font/devps/AR
+++ /dev/null
@@ -1,492 +0,0 @@
-name AR
-internalname AvantGarde-Book
-spacewidth 277
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -62
-A w -65
-A v -70
-A u -20
-A ' -100
-A cq -100
-A rq -100
-A Y -92
-A W -60
-A V -102
-A U -40
-A T -45
-A Q -40
-A O -50
-A G -40
-A C -40
-B A -10
-C A -40
-D . -20
-D , -20
-D Y -30
-D W -10
-D V -50
-D A -50
-F . -160
-F e -20
-F , -180
-F a -20
-F A -75
-G . -20
-G , -20
-G Y -20
-J . -15
-J a -20
-J A -30
-K o -15
-K e -20
-K O -20
-L y -23
-L ' -130
-L cq -130
-L rq -130
-L Y -91
-L W -67
-L V -113
-L T -46
-O . -30
-O , -30
-O Y -30
-O X -30
-O W -20
-O V -60
-O T -30
-O A -60
-P . -300
-P o -60
-P e -20
-P , -280
-P a -20
-P A -114
-Q , 20
-R Y -10
-R W 10
-R V -10
-R T 6
-S , 20
-T y -50
-T w -55
-T u -46
-T ; -29
-T r -30
-T . -91
-T o -70
-T i 10
-T - -75
-T hy -75
-T e -49
-T , -82
-T : -15
-T a -90
-T O -30
-T A -45
-U . -20
-U , -20
-U A -40
-V u -40
-V ; -33
-V . -165
-V o -101
-V i -5
-V - -75
-V hy -75
-V e -101
-V , -145
-V : -18
-V a -104
-V O -60
-V G -20
-V A -102
-W y -2
-W u -30
-W ; -33
-W . -106
-W o -46
-W i 6
-W - -35
-W hy -35
-W e -47
-W , -106
-W : -15
-W a -50
-W O -20
-W A -58
-Y u -52
-Y ; -23
-Y . -175
-Y o -89
-Y - -85
-Y hy -85
-Y e -89
-Y , -145
-Y : -10
-Y a -93
-Y O -30
-Y A -92
-a p 20
-a b 20
-b y -20
-b v -20
-c y -20
-c k -15
-, u0020 -110
-, ' -120
-, cq -120
-, rq -120
-e y -20
-e w -20
-e v -20
-f . -50
-f o -40
-f l -30
-f i -34
-f f -60
-f e -20
-f .i -34
-f , -50
-f a -40
-g a -15
-h y -30
-k y -5
-k e -15
-m y -20
-m u -20
-m a -20
-n y -15
-n v -20
-o y -20
-o x -15
-o w -20
-o v -30
-p y -20
-. u0020 -110
-. ' -120
-. cq -120
-. rq -120
-lq ` -35
-lq oq -35
-lq A -100
-rq u0020 -110
-` ` -203
-` oq -203
-oq ` -203
-oq oq -203
-` A -100
-oq A -100
-' v -30
-cq v -30
-' t 10
-cq t 10
-' u0020 -110
-cq u0020 -110
-' s -15
-cq s -15
-' r -20
-cq r -20
-' ' -203
-' cq -203
-cq ' -203
-cq cq -203
-' rq -35
-cq rq -35
-' d -110
-cq d -110
-r y 40
-r v 40
-r u 20
-r t 20
-r s 20
-r q -8
-r . -73
-r p 20
-r o -20
-r n 21
-r m 28
-r l 20
-r k 20
-r i 20
-r - -60
-r hy -60
-r g -15
-r e -4
-r d -6
-r , -75
-r c -20
-r a -20
-s . 20
-s , 20
-u0020 ` -110
-u0020 oq -110
-u0020 lq -110
-u0020 Y -60
-u0020 W -25
-u0020 V -50
-u0020 T -25
-u0020 A -20
-v . -130
-v o -30
-v e -20
-v , -100
-v a -30
-w . -100
-w o -30
-w h 15
-w e -20
-w , -90
-w a -30
-y . -125
-y o -30
-y e -20
-y , -110
-y a -30
-charset
-ha 606,740 2 0 asciicircum
-ti 606,319 0 1 asciitilde
-vS 498,927,13 2 2 Scaron
-vZ 480,927 2 3 Zcaron
-vs 388,764,13 2 4 scaron
-vz 425,764 2 5 zcaron
-:Y 592,928 2 6 Ydieresis
-tm 1000,740 2 7 trademark
-aq 198,740 2 8 quotesingle
-space 277 0 32 space
-! 295,740 2 33 exclam
-" 309,740 2 34 quotedbl
-dq "
-# 554,740 2 35 numbersign
-sh "
-$ 554,811,70 2 36 dollar
-Do "
-% 775,751,13 2 37 percent
-& 757,753,12 2 38 ampersand
-' 351,740 2 39 quoteright
-cq "
-( 369,757,205 3 40 parenleft
-) 369,757,205 3 41 parenright
-* 425,740 2 42 asterisk
-+ 606,506 0 43 plus
-, 277,126,67 0 44 comma
-- 332,315 0 45 hyphen
-hy "
-. 277,126 0 46 period
-/ 437,740,100 2 47 slash
-sl "
-0 554,753,13 2 48 zero
-1 554,740 2 49 one
-2 554,753 2 50 two
-3 554,753,13 2 51 three
-4 554,740 2 52 four
-5 554,740,13 2 53 five
-6 554,739,13 2 54 six
-7 554,740 2 55 seven
-8 554,753,13 2 56 eight
-9 554,752 2 57 nine
-: 277,548 0 58 colon
-; 277,548,67 0 59 semicolon
-< 606,514,8 0 60 less
-= 606,388 0 61 equal
-> 606,514,8 0 62 greater
-? 591,752 2 63 question
-@ 867,753,13 2 64 at
-at "
-A 740,740 2 65 A
-B 574,740 2 66 B
-C 813,752,13 2 67 C
-D 744,740 2 68 D
-E 536,740 2 69 E
-F 485,740 2 70 F
-G 872,753,13 2 71 G
-H 683,740 2 72 H
-I 226,740 2 73 I
-J 482,740,13 2 74 J
-K 591,740 2 75 K
-L 462,740 2 76 L
-M 919,740 2 77 M
-N 740,740 2 78 N
-O 869,753,13 2 79 O
-P 592,740 2 80 P
-Q 871,753,13 2 81 Q
-R 607,740 2 82 R
-S 498,753,13 2 83 S
-T 426,740 2 84 T
-U 655,740,13 2 85 U
-V 702,740 2 86 V
-W 960,740 2 87 W
-X 609,740 2 88 X
-Y 592,740 2 89 Y
-Z 480,740 2 90 Z
-[ 351,753,179 2 91 bracketleft
-lB "
-\ 605,740,100 2 92 backslash
-rs "
-] 351,753,179 2 93 bracketright
-rB "
-a^ 502,764 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 351,740 2 96 quoteleft
-oq "
-a 683,561,13 0 97 a
-b 682,740,13 2 98 b
-c 647,561,13 0 99 c
-d 685,740,13 2 100 d
-e 650,561,13 0 101 e
-f 314,753 2 102 f
-g 673,561,215 1 103 g
-h 610,740 2 104 h
-i 200,740 2 105 i
-j 203,740,192,0,44 3 106 j
-k 502,740 2 107 k
-l 200,740 2 108 l
-m 938,561 0 109 m
-n 610,561 0 110 n
-o 655,561,13 0 111 o
-p 682,561,192 1 112 p
-q 682,561,192 1 113 q
-r 301,561 0 114 r
-s 388,561,13 0 115 s
-t 339,740 2 116 t
-u 608,547,13 0 117 u
-v 554,547 0 118 v
-w 831,547 0 119 w
-x 480,547 0 120 x
-y 536,547,192 1 121 y
-z 425,547 0 122 z
-lC 351,740,189 2 123 braceleft
-{ "
-ba 672,740,100 2 124 bar
-| "
-rC 351,740,189 2 125 braceright
-} "
-a~ 439,754 2 126 tilde
-~ "
-bq 354,126,68 0 128 quotesinglbase
-Fo 425,481 0 129 guillemotleft
-Fc 425,481 0 130 guillemotright
-bu 606,532 0 131 bullet
-Fn 554,818,153,0,12 2 132 florin
-f/ 166,740,0,114,113 2 133 fraction
-%0 1174,751,13 2 134 perthousand
-dg 553,740,133 2 135 dagger
-dd 553,740,133 2 136 daggerdbl
-en 500,315 0 137 endash
-em 1000,315 0 138 emdash
-fi 487,753 2 140 fi
-fl 485,753 2 141 fl
-.i 200,547 0 144 dotlessi
-ga 378,786 2 146 grave
-a" 552,800 2 147 hungarumlaut
-a. 222,765 2 148 dotaccent
-ab 453,754 2 149 breve
-ah 502,764 2 150 caron
-ao 332,807 2 151 ring
-ho 302,0,191 1 152 ogonek
-lq 502,740 2 153 quotedblleft
-rq 484,740 2 154 quotedblright
-oe 1137,561,13 0 155 oe
-/l 300,740 2 156 lslash
-Bq 502,126,68 0 157 quotedblbase
-OE 1194,753,13 2 158 OE
-/L 517,740 2 159 Lslash
-r! 295,548,192 1 161 exclamdown
-ct 554,707 0 162 cent
-Po 554,753 2 163 sterling
-Cs 554,580 0 164 currency
-Ye 554,740 2 165 yen
-bb 672,740,100 2 166 brokenbar
-sc 615,753,141 2 167 section
-ad 369,765 2 168 dieresis
-co 747,752,12,8,9 2 169 copyright
-Of 369,753,0,0,3 2 170 ordfeminine
-fo 251,481 0 171 guilsinglleft
-tno 606,388 0 172 logicalnot
-\- 606,287 0 173 minus
-rg 747,752,12,8,9 2 174 registered
-a- 485,736 0 175 macron
-de 400,709 0 176 degree
-t+- 606,518,24 0 177 plusminus
-S2 332,747 2 178 twosuperior
-S3 332,747 2 179 threesuperior
-aa 375,786 2 180 acute
-mc 608,547,184 0 181 mu
-ps 564,740,110 2 182 paragraph
-pc 277,316 0 183 periodcentered
-ac 324,0,222 1 184 cedilla
-S1 332,740 2 185 onesuperior
-Om 369,753 2 186 ordmasculine
-fc 251,481 0 187 guilsinglright
-14 831,740 2 188 onequarter
-12 831,740 2 189 onehalf
-34 831,747 2 190 threequarters
-r? 591,548,205 1 191 questiondown
-`A 740,949 2 192 Agrave
-'A 740,949 2 193 Aacute
-^A 740,927 2 194 Acircumflex
-~A 740,917 2 195 Atilde
-:A 740,928 2 196 Adieresis
-oA 740,955 2 197 Aring
-AE 992,740,0,0,20 2 198 AE
-,C 813,752,222 3 199 Ccedilla
-`E 536,949 2 200 Egrave
-'E 536,949 2 201 Eacute
-^E 536,927 2 202 Ecircumflex
-:E 536,928 2 203 Edieresis
-`I 226,949,0,0,47 2 204 Igrave
-'I 226,949,0,49 2 205 Iacute
-^I 226,927,0,64,64 2 206 Icircumflex
-:I 226,928 2 207 Idieresis
--D 790,740 2 208 Eth
-~N 740,917 2 209 Ntilde
-`O 869,949,13 2 210 Ograve
-'O 869,949,13 2 211 Oacute
-^O 869,927,13 2 212 Ocircumflex
-~O 869,917,13 2 213 Otilde
-:O 869,928,13 2 214 Odieresis
-tmu 606,482 0 215 multiply
-/O 868,819,83 2 216 Oslash
-`U 655,949,13 2 217 Ugrave
-'U 655,949,13 2 218 Uacute
-^U 655,927,13 2 219 Ucircumflex
-:U 655,928,13 2 220 Udieresis
-'Y 592,949 2 221 Yacute
-TP 592,740 2 222 Thorn
-ss 554,753,13 2 223 germandbls
-`a 683,786,13 2 224 agrave
-'a 683,786,13 2 225 aacute
-^a 683,764,13 2 226 acircumflex
-~a 683,754,13 2 227 atilde
-:a 683,765,13 2 228 adieresis
-oa 683,807,13 2 229 aring
-ae 1157,561,13 0 230 ae
-,c 647,561,222 1 231 ccedilla
-`e 650,786,13 2 232 egrave
-'e 650,786,13 2 233 eacute
-^e 650,764,13 2 234 ecircumflex
-:e 650,765,13 2 235 edieresis
-`i 200,786,0,0,60 2 236 igrave
-'i 200,786,0,62 2 237 iacute
-^i 200,764,0,77,77 2 238 icircumflex
-:i 200,765,0,11,11 2 239 idieresis
-Sd 655,753,12 2 240 eth
-~n 610,754 2 241 ntilde
-`o 655,786,13 2 242 ograve
-'o 655,786,13 2 243 oacute
-^o 655,764,13 2 244 ocircumflex
-~o 655,754,13 2 245 otilde
-:o 655,765,13 2 246 odieresis
-tdi 606,519,13 0 247 divide
-/o 653,614,64 0 248 oslash
-`u 608,786,13 2 249 ugrave
-'u 608,786,13 2 250 uacute
-^u 608,764,13 2 251 ucircumflex
-:u 608,765,13 2 252 udieresis
-'y 536,786,192 3 253 yacute
-Tp 682,740,192 3 254 thorn
-:y 536,765,192 3 255 ydieresis
-u2026 1000,126 0 256 ellipsis
diff --git a/contrib/groff/font/devps/BMB b/contrib/groff/font/devps/BMB
deleted file mode 100644
index edb18a87de69..000000000000
--- a/contrib/groff/font/devps/BMB
+++ /dev/null
@@ -1,346 +0,0 @@
-name BMB
-internalname Bookman-Demi
-spacewidth 340
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -1
-A w -9
-A v -8
-A Y -52
-A W -20
-A V -68
-A T -40
-F . -132
-F , -130
-F A -59
-L y 19
-L Y -35
-L W -41
-L V -50
-L T -4
-P . -128
-P , -129
-P A -46
-R y -8
-R Y -20
-R W -24
-R V -29
-R T -4
-T ; 5
-T s -10
-T r 27
-T . -122
-T o -28
-T i 27
-T - -10
-T hy -10
-T e -29
-T , -122
-T : 7
-T c -29
-T a -24
-T A -42
-V y 12
-V u -11
-V ; -38
-V r -15
-V . -105
-V o -79
-V i 15
-V - -10
-V hy -10
-V e -80
-V , -103
-V : -37
-V a -74
-V A -88
-W y 12
-W u -11
-W ; -38
-W r -15
-W . -105
-W o -78
-W i 15
-W - -10
-W hy -10
-W e -79
-W , -103
-W : -37
-W a -73
-W A -60
-Y v 24
-Y u -13
-Y ; -34
-Y q -66
-Y . -105
-Y p -23
-Y o -66
-Y i 2
-Y - -10
-Y hy -10
-Y e -67
-Y , -103
-Y : -32
-Y a -60
-Y A -56
-f f 21
-r q -9
-r . -102
-r o -9
-r n 20
-r m 20
-r - -10
-r hy -10
-r h -23
-r g -9
-r f 20
-r e -10
-r d -10
-r , -101
-r c -9
-charset
-ha 600,681 2 0 asciicircum
-ti 600,368 0 1 asciitilde
-vS 660,896,17 2 2 Scaron
-vZ 640,896 2 3 Zcaron
-vs 520,717,8 2 4 scaron
-vz 560,717 2 5 zcaron
-:Y 700,877,0,18,20 2 6 Ydieresis
-tm 980,681,0,2 2 7 trademark
-aq 240,698 2 8 quotesingle
-space 340 0 32 space
-! 360,698,8 2 33 exclam
-" 420,698 2 34 quotedbl
-dq "
-# 660,681 2 35 numbersign
-sh "
-$ 660,805,119 2 36 dollar
-Do "
-% 940,698,8 2 37 percent
-& 800,698,17 2 38 ampersand
-' 320,698 2 39 quoteright
-cq "
-( 320,749,150 2 40 parenleft
-) 320,749,150 2 41 parenright
-* 460,697 2 42 asterisk
-+ 600,514 0 43 plus
-, 340,162,124 0 44 comma
-- 360,318 0 45 hyphen
-hy "
-. 340,172,8 0 46 period
-/ 600,725,149 2 47 slash
-sl "
-0 660,698,17 2 48 zero
-1 660,681 2 49 one
-2 660,698 2 50 two
-3 660,698,17 2 51 three
-4 660,681 2 52 four
-5 660,723,17 2 53 five
-6 660,698,17 2 54 six
-7 660,681 2 55 seven
-8 660,698,17 2 56 eight
-9 660,698,17 2 57 nine
-: 340,515,8 0 58 colon
-; 340,515,124 0 59 semicolon
-< 600,542,9 0 60 less
-= 600,421 0 61 equal
-> 600,542,9 0 62 greater
-? 660,698,8 2 63 question
-@ 820,698,17 2 64 at
-at "
-A 720,681,0,43,34 2 65 A
-B 720,681 2 66 B
-C 740,698,17 2 67 C
-D 780,681 2 68 D
-E 720,681,0,4 2 69 E
-F 680,681,0,6 2 70 F
-G 780,698,17 2 71 G
-H 820,681 2 72 H
-I 400,681 2 73 I
-J 640,681,17,0,12 2 74 J
-K 800,681 2 75 K
-L 640,681,0,28 2 76 L
-M 940,681 2 77 M
-N 740,681 2 78 N
-O 800,698,17 2 79 O
-P 660,681 2 80 P
-Q 800,698,226 3 81 Q
-R 780,681,0,3 2 82 R
-S 660,698,17 2 83 S
-T 700,681,0,3,4 2 84 T
-U 740,681,17 2 85 U
-V 720,681,0,10,20 2 86 V
-W 940,681,0,23,20 2 87 W
-X 780,681 2 88 X
-Y 700,681,0,18,20 2 89 Y
-Z 640,681 2 90 Z
-[ 300,725,138 2 91 bracketleft
-lB "
-\ 600,725 2 92 backslash
-rs "
-] 300,725,138 2 93 bracketright
-rB "
-a^ 500,731 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 320,698 2 96 quoteleft
-oq "
-a 580,515,8,8 0 97 a
-b 600,725,8,0,20 2 98 b
-c 580,515,8 0 99 c
-d 640,725,8 2 100 d
-e 580,515,8 0 101 e
-f 380,741,0,81 2 102 f
-g 580,595,243,3 1 103 g
-h 680,725 2 104 h
-i 360,729 2 105 i
-j 340,729,221,0,94 3 106 j
-k 660,725 2 107 k
-l 340,725 2 108 l
-m 1000,515 0 109 m
-n 680,515 0 110 n
-o 620,515,8 0 111 o
-p 640,515,212 1 112 p
-q 620,515,212,13 1 113 q
-r 460,502,0,2 0 114 r
-s 520,515,8 0 115 s
-t 460,660,8 2 116 t
-u 660,502,8 0 117 u
-v 600,502,0,0,6 0 118 v
-w 800,502,0,10,6 0 119 w
-x 600,502 0 120 x
-y 620,502,221 1 121 y
-z 560,502 0 122 z
-lC 320,726,139 2 123 braceleft
-{ "
-ba 600,750,250 3 124 bar
-| "
-rC 320,725,140 2 125 braceright
-} "
-a~ 480,691 2 126 tilde
-~ "
-bq 320,144,114 0 128 quotesinglbase
-Fo 400,457 0 129 guillemotleft
-Fc 400,457 0 130 guillemotright
-bu 460,511 0 131 bullet
-Fn 660,749,209,14,46 2 132 florin
-f/ 120,681,0,192,194 2 133 fraction
-%0 1360,698,8 2 134 perthousand
-dg 440,698,156 2 135 dagger
-dd 380,698,156 2 136 daggerdbl
-en 500,318,0,25,25 0 137 endash
-em 1000,318,0,25,25 0 138 emdash
-fi 740,741 2 140 fi
-fl 740,741 2 141 fl
-.i 360,502 0 144 dotlessi
-ga 400,730 2 146 grave
-a" 440,741 2 147 hungarumlaut
-a. 320,730 2 148 dotaccent
-ab 500,722 2 149 breve
-ah 500,717 2 150 caron
-ao 340,755 2 151 ring
-ho 320,0,163 0 152 ogonek
-lq 540,698 2 153 quotedblleft
-rq 540,698 2 154 quotedblright
-oe 940,515,8 0 155 oe
-/l 340,725 2 156 lslash
-Bq 540,144,114 0 157 quotedblbase
-OE 1220,698,17 2 158 OE
-/L 640,681,0,28 2 159 Lslash
-r! 360,515,191 0 161 exclamdown
-ct 660,674 2 162 cent
-Po 660,698,17 2 163 sterling
-Cs 660,593 0 164 currency
-Ye 660,681,0,36,28 2 165 yen
-bb 600,675,175 2 166 brokenbar
-sc 600,698,153 2 167 section
-ad 500,698 2 168 dieresis
-co 740,698,17 2 169 copyright
-Of 400,698 2 170 ordfeminine
-fo 220,457 0 171 guilsinglleft
-tno 600,421 0 172 logicalnot
-\- 600,323 0 173 minus
-rg 740,698,17 2 174 registered
-a- 460,663 2 175 macron
-de 400,698 2 176 degree
-t+- 600,514 0 177 plusminus
-S2 396,698 2 178 twosuperior
-S3 396,698 2 179 threesuperior
-aa 400,731 2 180 acute
-mc 660,502,221 1 181 mu
-ps 800,681 2 182 paragraph
-pc 340,355 0 183 periodcentered
-ac 360,0,213 1 184 cedilla
-S1 396,687 2 185 onesuperior
-Om 400,698 2 186 ordmasculine
-fc 220,457 0 187 guilsinglright
-14 990,681 2 188 onequarter
-12 990,681 2 189 onehalf
-34 990,692 2 190 threequarters
-r? 660,515,191 0 191 questiondown
-`A 720,909,0,43,34 2 192 Agrave
-'A 720,910,0,43,34 2 193 Aacute
-^A 720,910,0,43,34 2 194 Acircumflex
-~A 720,870,0,43,34 2 195 Atilde
-:A 720,877,0,43,34 2 196 Adieresis
-oA 720,934,0,43,34 2 197 Aring
-AE 1140,681,0,9,34 2 198 AE
-,C 740,698,213 3 199 Ccedilla
-`E 720,909,0,4 2 200 Egrave
-'E 720,910,0,4 2 201 Eacute
-^E 720,910,0,4 2 202 Ecircumflex
-:E 720,877,0,4 2 203 Edieresis
-`I 400,909 2 204 Igrave
-'I 400,910 2 205 Iacute
-^I 400,910 2 206 Icircumflex
-:I 400,877 2 207 Idieresis
--D 780,681 2 208 Eth
-~N 740,870 2 209 Ntilde
-`O 800,909,17 2 210 Ograve
-'O 800,910,17 2 211 Oacute
-^O 800,910,17 2 212 Ocircumflex
-~O 800,870,17 2 213 Otilde
-:O 800,877,17 2 214 Odieresis
-tmu 600,514 0 215 multiply
-/O 800,781,110 2 216 Oslash
-`U 740,909,17 2 217 Ugrave
-'U 740,910,17 2 218 Uacute
-^U 740,910,17 2 219 Ucircumflex
-:U 740,877,17 2 220 Udieresis
-'Y 700,910,0,18,20 2 221 Yacute
-TP 660,681 2 222 Thorn
-ss 660,699,91,0,61 2 223 germandbls
-`a 580,730,8,8 2 224 agrave
-'a 580,731,8,8 2 225 aacute
-^a 580,731,8,8 2 226 acircumflex
-~a 580,691,8,8 2 227 atilde
-:a 580,698,8,8 2 228 adieresis
-oa 580,755,8,8 2 229 aring
-ae 880,515,8 0 230 ae
-,c 580,515,213 1 231 ccedilla
-`e 580,730,8 2 232 egrave
-'e 580,731,8 2 233 eacute
-^e 580,731,8 2 234 ecircumflex
-:e 580,698,8 2 235 edieresis
-`i 360,730 2 236 igrave
-'i 360,731 2 237 iacute
-^i 360,731,0,0,2 2 238 icircumflex
-:i 360,698,0,11,2 2 239 idieresis
-Sd 620,741,8 2 240 eth
-~n 680,691 2 241 ntilde
-`o 620,730,8 2 242 ograve
-'o 620,731,8 2 243 oacute
-^o 620,731,8 2 244 ocircumflex
-~o 620,691,8 2 245 otilde
-:o 620,698,8 2 246 odieresis
-tdi 600,521 0 247 divide
-/o 620,551,40 0 248 oslash
-`u 660,730,8 2 249 ugrave
-'u 660,731,8 2 250 uacute
-^u 660,731,8 2 251 ucircumflex
-:u 660,698,8 2 252 udieresis
-'y 620,731,221 3 253 yacute
-Tp 640,725,212 3 254 thorn
-:y 620,698,221 3 255 ydieresis
-u2026 1000,172,8 0 256 ellipsis
diff --git a/contrib/groff/font/devps/BMBI b/contrib/groff/font/devps/BMBI
deleted file mode 100644
index b794a71de238..000000000000
--- a/contrib/groff/font/devps/BMBI
+++ /dev/null
@@ -1,349 +0,0 @@
-name BMBI
-internalname Bookman-DemiItalic
-slant 10
-spacewidth 340
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y 20
-A w 20
-A v 20
-A Y -25
-A W -35
-A V -40
-A T -17
-F . -105
-F , -98
-F A -35
-L y 62
-L Y -5
-L W -15
-L V -19
-L T -26
-P . -105
-P , -98
-P A -31
-R y 27
-R Y 4
-R W -4
-R V -8
-R T -3
-T y 56
-T w 69
-T u 42
-T ; 31
-T s -1
-T r 41
-T . -107
-T o -5
-T i 42
-T - -20
-T hy -20
-T e -10
-T , -100
-T : 26
-T c -8
-T a -8
-T A -42
-V y 17
-V u -1
-V ; -22
-V r 2
-V . -115
-V o -50
-V i 32
-V - -20
-V hy -20
-V e -50
-V , -137
-V : -28
-V a -50
-V A -50
-W y -51
-W u -69
-W ; -81
-W r -66
-W . -183
-W o -100
-W i -36
-W - -22
-W hy -22
-W e -100
-W , -201
-W : -86
-W a -100
-W A -77
-Y v 26
-Y u -1
-Y ; -4
-Y q -43
-Y . -113
-Y o -41
-Y i 20
-Y - -20
-Y hy -20
-Y e -46
-Y , -106
-Y : -9
-Y a -45
-Y A -30
-f f 10
-r q -3
-r . -120
-r o -1
-r n 39
-r m 39
-r - -20
-r hy -20
-r h -35
-r g -23
-r f 42
-r e -6
-r d -3
-r , -113
-r c -5
-charset
-ha 620,681,0,24,-42,24 2 0 asciicircum
-ti 620,368,0,35,-51,35 0 1 asciitilde
-vS 700,915,17,81,-9,73 2 2 Scaron
-vZ 680,915,0,110,27,73 2 3 Zcaron
-vs 540,749,8,83,18,73 2 4 scaron
-vz 560,749,8,76,14,73 2 5 zcaron
-:Y 660,900,0,207,-22,73 2 6 Ydieresis
-tm 940,681,0,92,8,73 2 7 trademark
-aq 180,696,0,165,-76,73 2 8 quotesingle
-space 340 0 32 space
-! 320,698,8,96,-36,73 2 33 exclam
-" 380,697,0,177,-90,73 2 34 quotedbl
-dq "
-# 680,681,0,19,-107,19 2 35 numbersign
-sh "
-$ 680,790,164,67,5,67 2 36 dollar
-Do "
-% 880,698,17,69,-56,69 2 37 percent
-& 980,698,17,86,2,73 2 38 ampersand
-' 320,698,0,79,-121,73 2 39 quoteright
-cq "
-( 260,741,134,178,19,73 2 40 parenleft
-) 260,741,134,112,85,73 2 41 parenright
-* 460,698,0,98,-76,73 2 42 asterisk
-+ 600,514,0,45,-41,45 0 43 plus
-, 340,185,124,8,-50,8 0 44 comma
-- 280,313,0,89,-9,73 0 45 hyphen
-hy "
-. 340,177,8,6,-56,6 0 46 period
-/ 360,742,106,192,41,73 2 47 slash
-sl "
-0 680,698,17,73,-37,73 2 48 zero
-1 680,681,0,0,-73 2 49 one
-2 680,698,0,44,-17,44 2 50 two
-3 680,698,17,53,-22,53 2 51 three
-4 680,681,0,78,-13,73 2 52 four
-5 680,681,17,39,-28,39 2 53 five
-6 680,698,17,74,-38,73 2 54 six
-7 680,681,0,109,-73,73 2 55 seven
-8 680,698,17,56,-18,56 2 56 eight
-9 680,698,17,82,-21,73 2 57 nine
-: 340,515,8,66,-56,66 0 58 colon
-; 340,515,124,62,-50,62 0 59 semicolon
-< 620,540,9,18,-29,18 0 60 less
-= 600,421,0,45,-41,45 0 61 equal
-> 620,540,9,28,-39,28 0 62 greater
-? 620,698,8,98,-95,73 2 63 question
-@ 780,698,17,60,-30,60 2 64 at
-at "
-A 720,681,0,99,77,73 2 65 A
-B 720,681,0,92,36,73 2 66 B
-C 700,698,17,104,-28,73 2 67 C
-D 760,681,0,95,36,73 2 68 D
-E 720,681,0,107,36,73 2 69 E
-F 660,681,0,153,36,73 2 70 F
-G 760,698,17,118,-27,73 2 71 G
-H 800,681,0,160,36,73 2 72 H
-I 380,681,0,155,36,73 2 73 I
-J 620,681,17,151,42,73 2 74 J
-K 780,681,0,149,36,73 2 75 K
-L 640,681,0,135,36,73 2 76 L
-M 860,681,0,160,36,73 2 77 M
-N 740,681,0,155,36,73 2 78 N
-O 760,698,17,96,-28,73 2 79 O
-P 640,681,0,134,56,73 2 80 P
-Q 760,698,213,95,13,73 3 81 Q
-R 740,681,0,75,36,73 2 82 R
-S 700,698,17,81,-9,73 2 83 S
-T 700,681,0,152,-20,73 2 84 T
-U 740,681,17,165,-62,73 2 85 U
-V 660,681,0,209,-22,73 2 86 V
-W 1000,681,0,140,-22,73 2 87 W
-X 740,681,0,145,57,73 2 88 X
-Y 660,681,0,207,-22,73 2 89 Y
-Z 680,681,0,110,27,73 2 90 Z
-[ 260,741,118,164,41,73 2 91 bracketleft
-lB "
-\ 580,741,0,45,-23,45 2 92 backslash
-rs "
-] 260,741,118,137,68,73 2 93 bracketright
-rB "
-a^ 480,749,0,93,-133,73 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 320,698,0,63,-105,63 2 96 quoteleft
-oq "
-a 680,515,8,105,-34,73 0 97 a
-b 600,732,8,83,-7,73 2 98 b
-c 560,515,8,87,-8,73 0 99 c
-d 680,732,8,84,-10,73 2 100 d
-e 560,515,8,86,-9,73 0 101 e
-f 420,741,213,271,242,73 3 102 f
-g 620,515,213,99,29,73 1 103 g
-h 700,732,8,86,-43,73 2 104 h
-i 380,755,8,90,-33,73 2 105 i
-j 320,755,213,122,210,73 3 106 j
-k 700,732,8,82,-47,73 2 107 k
-l 380,732,8,80,-59,73 2 108 l
-m 960,515,8,86,-33,73 0 109 m
-n 680,515,8,85,-33,73 0 110 n
-o 600,515,8,77,-9,73 0 111 o
-p 660,515,213,72,74,72 1 112 p
-q 620,515,213,70,-10,70 1 113 q
-r 500,515,0,132,-34,73 0 114 r
-s 540,515,8,83,18,73 0 115 s
-t 440,658,8,98,-56,73 2 116 t
-u 680,507,8,90,-33,73 0 117 u
-v 540,515,8,82,-6,73 0 118 v
-w 860,515,8,81,-6,73 0 119 w
-x 620,515,8,84,40,73 0 120 x
-y 600,507,213,92,25,73 1 121 y
-z 560,515,8,76,14,73 0 122 z
-lC 300,742,123,163,1,73 2 123 braceleft
-{ "
-ba 620,750,250,0,-253 3 124 bar
-| "
-rC 300,751,114,106,58,73 2 125 braceright
-} "
-a~ 480,709,0,103,-128,73 2 126 tilde
-~ "
-bq 300,166,112,34,-56,34 0 128 quotesinglbase
-Fo 380,503,0,76,-12,73 0 129 guillemotleft
-Fc 380,503,0,76,-12,73 0 130 guillemotright
-bu 360,511,0,94,-10,73 0 131 bullet
-Fn 680,741,199,113,78,73 2 132 florin
-f/ 120,681,0,312,194,73 2 133 fraction
-%0 1360,698,17,23,-56,23 2 134 perthousand
-dg 420,698,137,96,-39,73 2 135 dagger
-dd 420,698,137,116,-29,73 2 136 daggerdbl
-en 500,311,0,123,10,73 0 137 endash
-em 1000,311,0,123,10,73 0 138 emdash
-fi 820,741,213,80,241,73 3 140 fi
-fl 820,741,213,80,241,73 3 141 fl
-.i 380,507,8,90,-33,73 0 144 dotlessi
-ga 380,771,0,94,-143,73 2 146 grave
-a" 560,775,0,106,-131,73 2 147 hungarumlaut
-a. 380,734,0,15,-130,15 2 148 dotaccent
-ab 460,707,0,106,-127,73 2 149 breve
-ah 480,749,0,93,-133,73 2 150 caron
-ao 360,775,0,96,-135,73 2 151 ring
-ho 320,0,182,0,-18 0 152 ogonek
-lq 520,698,0,75,-106,73 2 153 quotedblleft
-rq 520,698,0,90,-121,73 2 154 quotedblright
-oe 920,515,8,91,2,73 0 155 oe
-/l 380,732,8,82,-13,73 2 156 lslash
-Bq 520,166,112,25,-56,25 0 157 quotedblbase
-OE 1180,698,17,115,-44,73 2 158 OE
-/L 640,681,0,134,36,73 2 159 Lslash
-r! 320,515,191,74,-14,73 0 161 exclamdown
-ct 680,718,0,0,-111 2 162 cent
-Po 680,698,17,157,50,73 2 163 sterling
-Cs 680,571,0,7,-98,7 0 164 currency
-Ye 680,681,0,152,-42,73 2 165 yen
-bb 620,675,175,0,-253 2 166 brokenbar
-sc 620,698,137,68,4,68 2 167 section
-ad 520,734,0,99,-130,73 2 168 dieresis
-co 780,698,17,53,-33,53 2 169 copyright
-Of 440,685,0,105,-68,73 2 170 ordfeminine
-fo 220,503,0,79,-12,73 0 171 guilsinglleft
-tno 620,421,0,15,-31,15 0 172 logicalnot
-\- 600,323,0,45,-41,45 0 173 minus
-rg 780,698,17,53,-33,53 2 174 registered
-a- 480,691,0,101,-127,73 2 175 macron
-de 400,698,0,80,-80,73 2 176 degree
-t+- 600,514,0,45,-41,45 0 177 plusminus
-S2 408,698,0,127,-41,73 2 178 twosuperior
-S3 408,698,0,125,-36,73 2 179 threesuperior
-aa 340,771,0,117,-126,73 2 180 acute
-mc 680,507,213,90,-4,73 1 181 mu
-ps 680,681,0,85,-87,73 2 182 paragraph
-pc 340,358,0,26,-76,26 0 183 periodcentered
-ac 360,0,220,0,-18 1 184 cedilla
-S1 408,688,0,48,-68,48 2 185 onesuperior
-Om 440,685,0,65,-77,65 2 186 ordmasculine
-fc 220,503,0,79,-12,73 0 187 guilsinglright
-14 1020,681,0,84,-68,73 2 188 onequarter
-12 1020,681,0,66,-68,66 2 189 onehalf
-34 1020,691,0,84,-36,73 2 190 threequarters
-r? 620,515,189,36,-33,36 0 191 questiondown
-`A 720,937,0,99,77,73 2 192 Agrave
-'A 720,937,0,99,77,73 2 193 Aacute
-^A 720,915,0,99,77,73 2 194 Acircumflex
-~A 720,875,0,99,77,73 2 195 Atilde
-:A 720,900,0,99,77,73 2 196 Adieresis
-oA 720,941,0,99,77,73 2 197 Aring
-AE 1140,681,0,117,77,73 2 198 AE
-,C 700,698,220,104,-28,73 3 199 Ccedilla
-`E 720,937,0,107,36,73 2 200 Egrave
-'E 720,937,0,107,36,73 2 201 Eacute
-^E 720,915,0,107,36,73 2 202 Ecircumflex
-:E 720,900,0,107,36,73 2 203 Edieresis
-`I 380,937,0,155,36,73 2 204 Igrave
-'I 380,937,0,155,36,73 2 205 Iacute
-^I 380,915,0,163,36,73 2 206 Icircumflex
-:I 380,900,0,169,36,73 2 207 Idieresis
--D 760,681,0,95,36,73 2 208 Eth
-~N 740,875,0,155,36,73 2 209 Ntilde
-`O 760,937,17,96,-28,73 2 210 Ograve
-'O 760,937,17,96,-28,73 2 211 Oacute
-^O 760,915,17,96,-28,73 2 212 Ocircumflex
-~O 760,875,17,96,-28,73 2 213 Otilde
-:O 760,900,17,96,-28,73 2 214 Odieresis
-tmu 600,514,0,45,-41,45 0 215 multiply
-/O 760,725,29,137,29,73 2 216 Oslash
-`U 740,937,17,165,-62,73 2 217 Ugrave
-'U 740,937,17,165,-62,73 2 218 Uacute
-^U 740,915,17,165,-62,73 2 219 Ucircumflex
-:U 740,900,17,165,-62,73 2 220 Udieresis
-'Y 660,937,0,207,-22,73 2 221 Yacute
-TP 640,681,0,111,56,73 2 222 Thorn
-ss 660,741,213,92,281,73 3 223 germandbls
-`a 680,771,8,105,-34,73 2 224 agrave
-'a 680,771,8,105,-34,73 2 225 aacute
-^a 680,749,8,105,-34,73 2 226 acircumflex
-~a 680,709,8,105,-34,73 2 227 atilde
-:a 680,734,8,105,-34,73 2 228 adieresis
-oa 680,775,8,105,-34,73 2 229 aring
-ae 880,515,8,83,11,73 0 230 ae
-,c 560,515,220,87,-8,73 1 231 ccedilla
-`e 560,771,8,86,-9,73 2 232 egrave
-'e 560,771,8,86,-9,73 2 233 eacute
-^e 560,749,8,86,-9,73 2 234 ecircumflex
-:e 560,734,8,86,-9,73 2 235 edieresis
-`i 380,771,8,94,-33,73 2 236 igrave
-'i 380,771,8,90,-33,73 2 237 iacute
-^i 380,749,8,103,-33,73 2 238 icircumflex
-:i 380,734,8,149,-33,73 2 239 idieresis
-Sd 600,741,8,112,-9,73 2 240 eth
-~n 680,709,8,85,-33,73 2 241 ntilde
-`o 600,771,8,77,-9,73 2 242 ograve
-'o 600,771,8,77,-9,73 2 243 oacute
-^o 600,749,8,77,-9,73 2 244 ocircumflex
-~o 600,709,8,77,-9,73 2 245 otilde
-:o 600,734,8,77,-9,73 2 246 odieresis
-tdi 600,521,0,45,-41,45 0 247 divide
-/o 600,571,54,111,33,73 0 248 oslash
-`u 680,771,8,90,-33,73 2 249 ugrave
-'u 680,771,8,90,-33,73 2 250 uacute
-^u 680,749,8,90,-33,73 2 251 ucircumflex
-:u 680,734,8,90,-33,73 2 252 udieresis
-'y 600,771,213,92,25,73 3 253 yacute
-Tp 660,732,213,72,74,72 3 254 thorn
-:y 600,734,213,92,25,73 3 255 ydieresis
-u2026 1000,177,8,0,-36 0 256 ellipsis
diff --git a/contrib/groff/font/devps/BMI b/contrib/groff/font/devps/BMI
deleted file mode 100644
index 7ed66f437728..000000000000
--- a/contrib/groff/font/devps/BMI
+++ /dev/null
@@ -1,342 +0,0 @@
-name BMI
-internalname Bookman-LightItalic
-slant 10
-spacewidth 300
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A Y -62
-A W -73
-A V -78
-A T -5
-F . -97
-F , -98
-F A -16
-L y 20
-L Y 7
-L W 9
-L V 4
-P . -105
-P , -106
-P A -30
-R Y 11
-R W 2
-R V 2
-R T 65
-T ; 48
-T s -7
-T r 67
-T . -78
-T o 14
-T i 71
-T - 20
-T hy 20
-T e 10
-T , -79
-T : 48
-T c 16
-T a 9
-T A -14
-V y -14
-V u -10
-V ; -44
-V r -20
-V . -100
-V o -70
-V i 3
-V - 20
-V hy 20
-V e -70
-V , -109
-V : -35
-V a -70
-V A -70
-W y -14
-W u -20
-W ; -42
-W r -30
-W . -100
-W o -60
-W i 3
-W - 20
-W hy 20
-W e -60
-W , -109
-W : -35
-W a -60
-W A -60
-Y v -19
-Y u -31
-Y ; -40
-Y q -72
-Y . -100
-Y p -37
-Y o -75
-Y i -11
-Y - 20
-Y hy 20
-Y e -78
-Y , -109
-Y : -35
-Y a -79
-Y A -82
-f f -19
-r q -14
-r . -134
-r o -10
-r n 38
-r m 37
-r - 20
-r hy 20
-r h -20
-r g -3
-r f -9
-r e -15
-r d -9
-r , -143
-r c -8
-charset
-ha 600,681,0,49,-47,49 2 0 asciicircum
-ti 600,386,0,45,-41,45 0 1 asciitilde
-vS 640,861,17,78,-11,70 2 2 Scaron
-vZ 580,861,0,165,42,70 2 3 Zcaron
-vs 540,684,8,57,-15,57 2 4 scaron
-vz 520,684,8,91,12,70 2 5 zcaron
-:Y 660,865,0,199,-37,70 2 6 Ydieresis
-tm 980,681,0,35,-19,35 2 7 trademark
-aq 200,698,0,97,-49,70 2 8 quotesingle
-space 300 0 32 space
-! 320,698,8,72,-53,70 2 33 exclam
-" 360,698,0,92,-57,70 2 34 quotedbl
-dq "
-# 620,681,0,28,-57,28 2 35 numbersign
-sh "
-$ 620,762,85,49,-28,49 2 36 dollar
-Do "
-% 800,691,8,61,-6,61 2 37 percent
-& 820,698,18,78,-15,70 2 38 ampersand
-' 280,698,0,58,-98,58 2 39 quoteright
-cq "
-( 280,727,146,153,-46,70 2 40 parenleft
-) 280,727,146,49,58,49 2 41 parenright
-* 440,698,0,115,-89,70 2 42 asterisk
-+ 600,548,0,45,-41,45 0 43 plus
-, 300,112,115,0,-38 0 44 comma
-- 320,325,0,66,-28,66 0 45 hyphen
-hy "
-. 300,127,8,0,-46 0 46 period
-/ 600,717,149,12,-54,12 2 47 slash
-sl "
-0 620,698,17,76,-36,70 2 48 zero
-1 620,681,0,0,-104 2 49 one
-2 620,698,0,66,-16,66 2 50 two
-3 620,698,17,52,-5,52 2 51 three
-4 620,681,0,64,-19,64 2 52 four
-5 620,681,17,44,-20,44 2 53 five
-6 620,698,17,87,-39,70 2 54 six
-7 620,681,0,102,-93,70 2 55 seven
-8 620,698,17,85,-11,70 2 56 eight
-9 620,698,17,79,-27,70 2 57 nine
-: 300,494,8,42,-46,42 0 58 colon
-; 300,494,114,42,-38,42 0 59 semicolon
-< 600,561,0,38,-29,38 0 60 less
-= 600,433,0,45,-41,45 0 61 equal
-> 600,561,0,52,-43,52 0 62 greater
-? 540,698,8,114,-64,70 2 63 question
-@ 780,698,17,72,-52,70 2 64 at
-at "
-A 700,681,0,70,75,70 2 65 A
-B 720,681,0,76,29,70 2 66 B
-C 720,698,17,76,-38,70 2 67 C
-D 740,681,0,92,29,70 2 68 D
-E 680,681,0,106,29,70 2 69 E
-F 620,681,0,173,29,70 2 70 F
-G 760,698,17,103,-38,70 2 71 G
-H 800,681,0,138,29,70 2 72 H
-I 320,681,0,142,29,70 2 73 I
-J 560,681,17,156,52,70 2 74 J
-K 720,681,0,134,29,70 2 75 K
-L 580,681,0,126,29,70 2 76 L
-M 860,681,0,146,32,70 2 77 M
-N 720,681,0,153,32,70 2 78 N
-O 760,698,17,89,-38,70 2 79 O
-P 600,681,0,131,29,70 2 80 P
-Q 780,698,191,82,-11,70 2 81 Q
-R 700,681,0,86,29,70 2 82 R
-S 640,698,17,78,-11,70 2 83 S
-T 600,681,0,175,0,70 2 84 T
-U 720,681,17,172,-68,70 2 85 U
-V 680,681,0,185,-37,70 2 86 V
-W 960,681,0,185,-37,70 2 87 W
-X 700,681,0,165,75,70 2 88 X
-Y 660,681,0,199,-37,70 2 89 Y
-Z 580,681,0,165,42,70 2 90 Z
-[ 260,717,136,141,-6,70 2 91 bracketleft
-lB "
-\ 600,717,0,0,-34 2 92 backslash
-rs "
-] 260,717,136,99,35,70 2 93 bracketright
-rB "
-a^ 440,685,0,89,-126,70 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 280,698,0,100,-141,70 2 96 quoteleft
-oq "
-a 620,494,8,116,-21,70 0 97 a
-b 600,717,8,71,-38,70 2 98 b
-c 480,494,8,92,-15,70 0 99 c
-d 640,717,8,105,-15,70 2 100 d
-e 540,494,8,85,-15,70 0 101 e
-f 340,725,218,267,210,70 3 102 f
-g 560,494,221,71,46,70 1 103 g
-h 620,717,8,119,-38,70 2 104 h
-i 280,663,8,121,-38,70 2 105 i
-j 280,663,221,78,250,70 3 106 j
-k 600,717,8,107,-38,70 2 107 k
-l 280,717,8,112,-50,70 2 108 l
-m 880,494,8,122,-38,70 0 109 m
-n 620,494,8,103,-38,70 0 110 n
-o 540,494,8,82,-15,70 0 111 o
-p 600,494,212,70,74,70 1 112 p
-q 560,494,212,74,-15,70 1 113 q
-r 400,494,0,131,-38,70 0 114 r
-s 540,494,8,57,-15,57 0 115 s
-t 340,664,8,121,-38,70 2 116 t
-u 620,484,8,116,-38,70 0 117 u
-v 540,494,8,72,-38,70 0 118 v
-w 880,494,8,63,-38,63 0 119 w
-x 540,494,8,136,41,70 0 120 x
-y 600,484,221,59,-10,59 1 121 y
-z 520,494,8,91,12,70 0 122 z
-lC 360,717,191,132,-72,70 2 123 braceleft
-{ "
-ba 600,750,250,0,-244 3 124 bar
-| "
-rC 380,717,191,3,37,3 2 125 braceright
-} "
-a~ 440,671,0,98,-130,70 2 126 tilde
-~ "
-bq 320,113,114,0,-37 0 128 quotesinglbase
-Fo 300,434,0,63,-20,63 0 129 guillemotleft
-Fc 300,434,0,53,-10,53 0 130 guillemotright
-bu 460,511,0,34,-50,34 0 131 bullet
-Fn 620,725,218,122,76,70 3 132 florin
-f/ 20,681,0,353,278,70 2 133 fraction
-%0 1180,691,8,69,-6,69 2 134 perthousand
-dg 620,698,130,0,-142 2 135 dagger
-dd 620,698,122,0,-94 2 136 daggerdbl
-en 500,325,0,111,17,70 0 137 endash
-em 1000,325,0,111,17,70 0 138 emdash
-fi 640,725,222,119,209,70 3 140 fi
-fl 660,725,218,103,209,70 3 141 fl
-.i 280,484,8,121,-38,70 0 144 dotlessi
-ga 340,706,0,87,-132,70 2 146 grave
-a" 340,738,0,112,-117,70 2 147 hungarumlaut
-a. 260,664,0,80,-119,70 2 148 dotaccent
-ab 440,680,0,110,-141,70 2 149 breve
-ah 440,684,0,91,-128,70 2 150 caron
-ao 300,706,0,84,-128,70 2 151 ring
-ho 260,0,173,0,-1 0 152 ogonek
-lq 440,698,0,103,-141,70 2 153 quotedblleft
-rq 440,698,0,61,-98,61 2 154 quotedblright
-oe 900,494,8,98,-15,70 0 155 oe
-/l 340,717,8,108,0,70 2 156 lslash
-Bq 480,113,114,0,-37 0 157 quotedblbase
-OE 1180,698,17,107,-38,70 2 158 OE
-/L 580,681,0,126,29,70 2 159 Lslash
-r! 320,494,213,31,-23,31 1 161 exclamdown
-ct 620,715,29,26,-98,26 2 162 cent
-Po 620,698,17,132,46,70 2 163 sterling
-Cs 620,591,0,35,-50,35 0 164 currency
-Ye 620,681,0,165,-21,70 2 165 yen
-bb 600,675,175,0,-244 2 166 brokenbar
-sc 620,698,178,68,12,68 2 167 section
-ad 420,688,0,97,-135,70 2 168 dieresis
-co 740,698,17,94,-34,70 2 169 copyright
-Of 440,698,0,123,-80,70 2 170 ordfeminine
-fo 180,434,0,78,-25,70 0 171 guilsinglleft
-tno 600,433,0,45,-41,45 0 172 logicalnot
-\- 600,335,0,45,-41,45 0 173 minus
-rg 740,698,17,94,-34,70 2 174 registered
-a- 440,658,0,94,-128,70 0 175 macron
-de 400,698,0,70,-70,70 2 176 degree
-t+- 600,548,0,45,-41,45 0 177 plusminus
-S2 372,698,0,117,-18,70 2 178 twosuperior
-S3 372,698,0,117,-20,70 2 179 threesuperior
-aa 320,706,0,103,-128,70 2 180 acute
-mc 620,484,221,116,-3,70 1 181 mu
-ps 620,681,0,148,-62,70 2 182 paragraph
-pc 300,364,0,22,-87,22 0 183 periodcentered
-ac 320,0,178,0,5 0 184 cedilla
-S1 372,688,0,17,-64,17 2 185 onesuperior
-Om 400,698,0,105,-89,70 2 186 ordmasculine
-fc 180,434,0,73,-20,70 0 187 guilsinglright
-14 930,681,0,33,-41,33 2 188 onequarter
-12 930,681,0,45,-41,45 2 189 onehalf
-34 930,691,0,33,-49,33 2 190 threequarters
-r? 540,494,212,18,32,18 1 191 questiondown
-`A 700,883,0,70,75,70 2 192 Agrave
-'A 700,883,0,70,75,70 2 193 Aacute
-^A 700,862,0,70,75,70 2 194 Acircumflex
-~A 700,848,0,70,75,70 2 195 Atilde
-:A 700,865,0,70,75,70 2 196 Adieresis
-oA 700,883,0,70,75,70 2 197 Aring
-AE 1220,681,0,99,95,70 2 198 AE
-,C 720,698,178,76,-38,70 2 199 Ccedilla
-`E 680,883,0,106,29,70 2 200 Egrave
-'E 680,883,0,106,29,70 2 201 Eacute
-^E 680,862,0,106,29,70 2 202 Ecircumflex
-:E 680,865,0,106,29,70 2 203 Edieresis
-`I 320,883,0,142,29,70 2 204 Igrave
-'I 320,883,0,142,29,70 2 205 Iacute
-^I 320,862,0,179,29,70 2 206 Icircumflex
-:I 320,865,0,177,29,70 2 207 Idieresis
--D 740,681,0,92,29,70 2 208 Eth
-~N 720,848,0,153,32,70 2 209 Ntilde
-`O 760,883,17,89,-38,70 2 210 Ograve
-'O 760,883,17,89,-38,70 2 211 Oacute
-^O 760,862,17,89,-38,70 2 212 Ocircumflex
-~O 760,848,17,89,-38,70 2 213 Otilde
-:O 760,865,17,89,-38,70 2 214 Odieresis
-tmu 600,548,0,45,-41,45 0 215 multiply
-/O 760,777,95,89,-38,70 2 216 Oslash
-`U 720,883,17,172,-68,70 2 217 Ugrave
-'U 720,883,17,172,-68,70 2 218 Uacute
-^U 720,862,17,172,-68,70 2 219 Ucircumflex
-:U 720,865,17,172,-68,70 2 220 Udieresis
-'Y 660,883,0,199,-37,70 2 221 Yacute
-TP 600,681,0,106,29,70 2 222 Thorn
-ss 620,698,111,83,171,70 2 223 germandbls
-`a 620,706,8,116,-21,70 2 224 agrave
-'a 620,706,8,116,-21,70 2 225 aacute
-^a 620,685,8,116,-21,70 2 226 acircumflex
-~a 620,671,8,116,-21,70 2 227 atilde
-:a 620,688,8,116,-21,70 2 228 adieresis
-oa 620,706,8,116,-21,70 2 229 aring
-ae 880,494,8,88,-21,70 0 230 ae
-,c 480,494,178,92,-15,70 0 231 ccedilla
-`e 540,706,8,85,-15,70 2 232 egrave
-'e 540,706,8,85,-15,70 2 233 eacute
-^e 540,685,8,85,-15,70 2 234 ecircumflex
-:e 540,688,8,85,-15,70 2 235 edieresis
-`i 280,706,8,121,-38,70 2 236 igrave
-'i 280,706,8,121,-38,70 2 237 iacute
-^i 280,685,8,149,-26,70 2 238 icircumflex
-:i 280,688,8,147,-38,70 2 239 idieresis
-Sd 540,725,8,152,-15,70 2 240 eth
-~n 620,671,8,103,-38,70 2 241 ntilde
-`o 540,706,8,82,-15,70 2 242 ograve
-'o 540,706,8,82,-15,70 2 243 oacute
-^o 540,685,8,82,-15,70 2 244 ocircumflex
-~o 540,671,8,82,-15,70 2 245 otilde
-:o 540,688,8,82,-15,70 2 246 odieresis
-tdi 600,548,0,45,-41,45 0 247 divide
-/o 540,532,49,81,-15,70 0 248 oslash
-`u 620,706,8,116,-38,70 2 249 ugrave
-'u 620,706,8,116,-38,70 2 250 uacute
-^u 620,685,8,116,-38,70 2 251 ucircumflex
-:u 620,688,8,116,-38,70 2 252 udieresis
-'y 600,706,221,59,-10,59 3 253 yacute
-Tp 600,717,212,70,74,70 3 254 thorn
-:y 600,688,221,59,-10,59 3 255 ydieresis
-u2026 1000,127,8,0,-49 0 256 ellipsis
diff --git a/contrib/groff/font/devps/BMR b/contrib/groff/font/devps/BMR
deleted file mode 100644
index bef802aeb656..000000000000
--- a/contrib/groff/font/devps/BMR
+++ /dev/null
@@ -1,338 +0,0 @@
-name BMR
-internalname Bookman-Light
-spacewidth 320
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y 32
-A w 4
-A v 7
-A Y -35
-A W -40
-A V -56
-A T 1
-F . -46
-F , -41
-F A -21
-L y 79
-L Y 13
-L W 1
-L V -4
-L T 28
-P . -60
-P , -55
-P A -8
-R y 59
-R Y 26
-R W 13
-R V 8
-R T 71
-T s 16
-T r 38
-T . -33
-T o 15
-T i 42
-T - 90
-T hy 90
-T e 13
-T , -28
-T c 14
-T a 17
-T A 1
-V y 15
-V u -38
-V r -41
-V . -40
-V o -71
-V i -20
-V - 11
-V hy 11
-V e -72
-V , -34
-V a -69
-V A -66
-W y 15
-W u -38
-W r -41
-W . -40
-W o -68
-W i -20
-W - 11
-W hy 11
-W e -69
-W , -34
-W a -66
-W A -64
-Y v 15
-Y u -38
-Y q -55
-Y . -40
-Y p -31
-Y o -57
-Y i -37
-Y - 11
-Y hy 11
-Y e -58
-Y , -34
-Y a -54
-Y A -53
-f f 29
-r q 9
-r . -64
-r o 8
-r n 31
-r m 31
-r - 70
-r hy 70
-r h -21
-r g -4
-r f 33
-r e 7
-r d 7
-r , -58
-r c 7
-charset
-ha 600,681 2 0 asciicircum
-ti 600,352 0 1 asciitilde
-vS 660,849,17 2 2 Scaron
-vZ 640,849,0,16 2 3 Zcaron
-vs 520,672,8 2 4 scaron
-vz 480,672 2 5 zcaron
-:Y 640,851,0,26,30 2 6 Ydieresis
-tm 980,681 2 7 trademark
-aq 220,698 2 8 quotesingle
-space 320 0 32 space
-! 300,698,8 2 33 exclam
-" 380,698 2 34 quotedbl
-dq "
-# 620,681 2 35 numbersign
-sh "
-$ 620,791,109 2 36 dollar
-Do "
-% 900,698,8 2 37 percent
-& 800,698,17 2 38 ampersand
-' 220,698 2 39 quoteright
-cq "
-( 300,727,145 2 40 parenleft
-) 300,727,146 2 41 parenright
-* 440,698 2 42 asterisk
-+ 600,513 0 43 plus
-, 320,114,114 0 44 comma
-- 400,292 0 45 hyphen
-hy "
-. 320,123,8 0 46 period
-/ 600,717,149 2 47 slash
-sl "
-0 620,698,17 2 48 zero
-1 620,681 2 49 one
-2 620,698 2 50 two
-3 620,698,17 2 51 three
-4 620,681 2 52 four
-5 620,717,17 2 53 five
-6 620,698,17 2 54 six
-7 620,681 2 55 seven
-8 620,698,17 2 56 eight
-9 620,698,17 2 57 nine
-: 320,494,8 0 58 colon
-; 320,494,114 0 59 semicolon
-< 600,526,2 0 60 less
-= 600,398 0 61 equal
-> 600,526,2 0 62 greater
-? 540,698,8 2 63 question
-@ 820,698,17 2 64 at
-at "
-A 680,681,0,34,37 2 65 A
-B 740,681 2 66 B
-C 740,698,17 2 67 C
-D 800,681 2 68 D
-E 720,681 2 69 E
-F 640,681,0,14 2 70 F
-G 800,698,17 2 71 G
-H 800,681 2 72 H
-I 340,681 2 73 I
-J 600,681,17,0,23 2 74 J
-K 720,681,0,30 2 75 K
-L 600,681,0,29 2 76 L
-M 920,681 2 77 M
-N 740,681 2 78 N
-O 800,698,17 2 79 O
-P 620,681 2 80 P
-Q 820,698,189 2 81 Q
-R 720,681,0,37 2 82 R
-S 660,698,17 2 83 S
-T 620,681,0,36,37 2 84 T
-U 780,681,17 2 85 U
-V 700,681,0,25,30 2 86 V
-W 960,681,0,24,30 2 87 W
-X 720,681,0,35,30 2 88 X
-Y 640,681,0,26,30 2 89 Y
-Z 640,681,0,16 2 90 Z
-[ 300,717,136 2 91 bracketleft
-lB "
-\ 600,717 2 92 backslash
-rs "
-] 300,717,136 2 93 bracketright
-rB "
-a^ 420,685 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 220,698 2 96 quoteleft
-oq "
-a 580,494,8,7 0 97 a
-b 620,717,8,0,2 2 98 b
-c 520,494,8 0 99 c
-d 620,717,8 2 100 d
-e 520,494,8 0 101 e
-f 320,734,0,94 2 102 f
-g 540,567,243,2 1 103 g
-h 660,717 2 104 h
-i 300,654 0 105 i
-j 300,654,251,0,109 1 106 j
-k 620,717,0,8 2 107 k
-l 300,717 2 108 l
-m 940,494 0 109 m
-n 660,494 0 110 n
-o 560,494,8 0 111 o
-p 620,494,228 1 112 p
-q 580,494,228,9 1 113 q
-r 440,494,0,7 0 114 r
-s 520,494,8 0 115 s
-t 380,667,8,8 2 116 t
-u 680,484,8 0 117 u
-v 520,484,0,14,23 0 118 v
-w 780,484,0,24,19 0 119 w
-x 560,484,0,16,16 0 120 x
-y 540,484,236,9,23 1 121 y
-z 480,484 0 122 z
-lC 280,717,136 2 123 braceleft
-{ "
-ba 600,750,250 3 124 bar
-| "
-rC 280,717,136 2 125 braceright
-} "
-a~ 440,661 0 126 tilde
-~ "
-bq 220,110,108 0 128 quotesinglbase
-Fo 360,437 0 129 guillemotleft
-Fc 360,437 0 130 guillemotright
-bu 460,511 0 131 bullet
-Fn 620,749,155,13,29 2 132 florin
-f/ 140,681,0,195,188 2 133 fraction
-%0 1280,698,8 2 134 perthousand
-dg 540,698,156 2 135 dagger
-dd 540,698,156 2 136 daggerdbl
-en 500,292,0,15,15 0 137 endash
-em 1000,292,0,15,15 0 138 emdash
-fi 620,734 2 140 fi
-fl 620,734 2 141 fl
-.i 300,484 0 144 dotlessi
-ga 340,689 2 146 grave
-a" 380,698 2 147 hungarumlaut
-a. 260,672 2 148 dotaccent
-ab 460,687 2 149 breve
-ah 420,672 2 150 caron
-ao 320,731 2 151 ring
-ho 320,0,145 0 152 ogonek
-lq 400,698 2 153 quotedblleft
-rq 400,698 2 154 quotedblright
-oe 900,494,8 0 155 oe
-/l 320,717 2 156 lslash
-Bq 400,110,108 0 157 quotedblbase
-OE 1240,698,17 2 158 OE
-/L 600,681,0,29 2 159 Lslash
-r! 300,494,214 0 161 exclamdown
-ct 620,651 0 162 cent
-Po 620,698,17,11 2 163 sterling
-Cs 620,591 0 164 currency
-Ye 620,681,0,27,22 2 165 yen
-bb 600,675,175 2 166 brokenbar
-sc 520,698,178 2 167 section
-ad 420,674 2 168 dieresis
-co 740,698,17 2 169 copyright
-Of 420,698 2 170 ordfeminine
-fo 240,437 0 171 guilsinglleft
-tno 600,398 0 172 logicalnot
-\- 600,300 0 173 minus
-rg 740,698,17 2 174 registered
-a- 440,635 0 175 macron
-de 400,698 2 176 degree
-t+- 600,513 0 177 plusminus
-S2 372,698 2 178 twosuperior
-S3 372,698 2 179 threesuperior
-aa 340,689 2 180 acute
-mc 680,484,251 1 181 mu
-ps 600,681 2 182 paragraph
-pc 320,327 0 183 periodcentered
-ac 320,0,200 0 184 cedilla
-S1 372,688 2 185 onesuperior
-Om 420,698 2 186 ordmasculine
-fc 240,437 0 187 guilsinglright
-14 930,681 2 188 onequarter
-12 930,681 2 189 onehalf
-34 930,691 2 190 threequarters
-r? 540,494,217 0 191 questiondown
-`A 680,866,0,34,37 2 192 Agrave
-'A 680,866,0,34,37 2 193 Aacute
-^A 680,862,0,34,37 2 194 Acircumflex
-~A 680,838,0,34,37 2 195 Atilde
-:A 680,851,0,34,37 2 196 Adieresis
-oA 680,908,0,34,37 2 197 Aring
-AE 1260,681,0,0,36 2 198 AE
-,C 740,698,200 2 199 Ccedilla
-`E 720,866 2 200 Egrave
-'E 720,866 2 201 Eacute
-^E 720,862 2 202 Ecircumflex
-:E 720,851 2 203 Edieresis
-`I 340,866 2 204 Igrave
-'I 340,866 2 205 Iacute
-^I 340,862 2 206 Icircumflex
-:I 340,851 2 207 Idieresis
--D 800,681 2 208 Eth
-~N 740,838 2 209 Ntilde
-`O 800,866,17 2 210 Ograve
-'O 800,866,17 2 211 Oacute
-^O 800,862,17 2 212 Ocircumflex
-~O 800,838,17 2 213 Otilde
-:O 800,851,17 2 214 Odieresis
-tmu 600,513 0 215 multiply
-/O 800,733,53 2 216 Oslash
-`U 780,866,17 2 217 Ugrave
-'U 780,866,17 2 218 Uacute
-^U 780,862,17 2 219 Ucircumflex
-:U 780,851,17 2 220 Udieresis
-'Y 640,866,0,26,30 2 221 Yacute
-TP 620,681 2 222 Thorn
-ss 660,698,110,0,109 2 223 germandbls
-`a 580,689,8,7 2 224 agrave
-'a 580,689,8,7 2 225 aacute
-^a 580,685,8,7 2 226 acircumflex
-~a 580,661,8,7 0 227 atilde
-:a 580,674,8,7 2 228 adieresis
-oa 580,731,8,7 2 229 aring
-ae 860,494,8 0 230 ae
-,c 520,494,200 0 231 ccedilla
-`e 520,689,8 2 232 egrave
-'e 520,689,8 2 233 eacute
-^e 520,685,8 2 234 ecircumflex
-:e 520,674,8 2 235 edieresis
-`i 300,689 2 236 igrave
-'i 300,689 2 237 iacute
-^i 300,685 2 238 icircumflex
-:i 300,674 2 239 idieresis
-Sd 560,734,8 2 240 eth
-~n 660,661 0 241 ntilde
-`o 560,689,8 2 242 ograve
-'o 560,689,8 2 243 oacute
-^o 560,685,8 2 244 ocircumflex
-~o 560,661,8 0 245 otilde
-:o 560,674,8 2 246 odieresis
-tdi 600,514 0 247 divide
-/o 560,534,40 0 248 oslash
-`u 680,689,8 2 249 ugrave
-'u 680,689,8 2 250 uacute
-^u 680,685,8 2 251 ucircumflex
-:u 680,674,8 2 252 udieresis
-'y 540,689,236,9,23 3 253 yacute
-Tp 620,717,228 3 254 thorn
-:y 540,674,236,9,23 3 255 ydieresis
-u2026 1000,123,8 0 256 ellipsis
diff --git a/contrib/groff/font/devps/CB b/contrib/groff/font/devps/CB
deleted file mode 100644
index 31f19b735678..000000000000
--- a/contrib/groff/font/devps/CB
+++ /dev/null
@@ -1,281 +0,0 @@
-name CB
-internalname Courier-Bold
-spacewidth 600
-encoding text.enc
-charset
-ha 600,616 2 0 asciicircum
-ti 600,356 0 1 asciitilde
-vS 600,790,22 2 2 Scaron
-vZ 600,790 2 3 Zcaron
-vs 600,667,17 2 4 scaron
-vz 600,667 2 5 zcaron
-:Y 600,748 2 6 Ydieresis
-tm 600,562,0,149,9 2 7 trademark
-aq 600,562 2 8 quotesingle
-space 600 0 32 space
-! 600,572,15 2 33 exclam
-" 600,562 2 34 quotedbl
-dq "
-# 600,651,45 2 35 numbersign
-sh "
-$ 600,666,126 2 36 dollar
-Do "
-% 600,616,15 2 37 percent
-& 600,543,15 0 38 ampersand
-' 600,562 2 39 quoteright
-cq "
-( 600,616,102 2 40 parenleft
-) 600,616,102 2 41 parenright
-* 600,601 2 42 asterisk
-+ 600,478 0 43 plus
-, 600,174,111 0 44 comma
-- 600,313 0 45 hyphen
-hy "
-. 600,171,15 0 46 period
-/ 600,626,77 2 47 slash
-sl "
-0 600,616,15 2 48 zero
-1 600,616 2 49 one
-2 600,616 2 50 two
-3 600,616,15 2 51 three
-4 600,616 2 52 four
-5 600,601,15 2 53 five
-6 600,616,15 2 54 six
-7 600,601 2 55 seven
-8 600,616,15 2 56 eight
-9 600,616,15 2 57 nine
-: 600,425,15 0 58 colon
-; 600,425,111 0 59 semicolon
-< 600,501 0 60 less
-= 600,398 0 61 equal
-> 600,501 0 62 greater
-? 600,580,14 2 63 question
-@ 600,616,15 2 64 at
-at "
-A 600,562,0,9,9 2 65 A
-B 600,562 2 66 B
-C 600,580,18 2 67 C
-D 600,562 2 68 D
-E 600,562 2 69 E
-F 600,562 2 70 F
-G 600,580,18 2 71 G
-H 600,562 2 72 H
-I 600,562 2 73 I
-J 600,562,18,1 2 74 J
-K 600,562 2 75 K
-L 600,562 2 76 L
-M 600,562,0,2,2 2 77 M
-N 600,562,12,10 2 78 N
-O 600,580,18 2 79 O
-P 600,562 2 80 P
-Q 600,580,138 2 81 Q
-R 600,562 2 82 R
-S 600,582,22 2 83 S
-T 600,562 2 84 T
-U 600,562,18 2 85 U
-V 600,562,0,13,13 2 86 V
-W 600,562,0,18,18 2 87 W
-X 600,562 2 88 X
-Y 600,562 2 89 Y
-Z 600,562 2 90 Z
-[ 600,616,102 2 91 bracketleft
-lB "
-\ 600,626,77 2 92 backslash
-rs "
-] 600,616,102 2 93 bracketright
-rB "
-a^ 600,657 2 94 circumflex
-^ "
-_ 600,0,125 0 95 underscore
-` 600,562 2 96 quoteleft
-oq "
-a 600,454,15 0 97 a
-b 600,626,15 2 98 b
-c 600,459,15 0 99 c
-d 600,626,15 2 100 d
-e 600,454,15 0 101 e
-f 600,626 2 102 f
-g 600,454,146 1 103 g
-h 600,626 2 104 h
-i 600,658 2 105 i
-j 600,658,146 3 106 j
-k 600,626 2 107 k
-l 600,626 2 108 l
-m 600,454,0,26,22 0 109 m
-n 600,454 0 110 n
-o 600,454,15 0 111 o
-p 600,454,142,0,1 1 112 p
-q 600,454,142 1 113 q
-r 600,454 0 114 r
-s 600,459,17 0 115 s
-t 600,562,15 2 116 t
-u 600,439,15,0,1 0 117 u
-v 600,439,0,1,1 0 118 v
-w 600,439,0,18,18 0 119 w
-x 600,439 0 120 x
-y 600,439,142,1,4 1 121 y
-z 600,439 0 122 z
-lC 600,616,102 2 123 braceleft
-{ "
-ba 600,750,250 3 124 bar
-| "
-rC 600,616,102 2 125 braceright
-} "
-a~ 600,636 2 126 tilde
-~ "
-bq 600,143,142 1 128 quotesinglbase
-Fo 600,446 0 129 guillemotleft
-Fc 600,446 0 130 guillemotright
-bu 600,430 0 131 bullet
-Fn 600,616,131,0,30 2 132 florin
-f/ 600,661,60 2 133 fraction
-%0 600,616,15,113,113 2 134 perthousand
-dg 600,580,70 2 135 dagger
-dd 600,580,70 2 136 daggerdbl
-en 600,313 0 137 endash
-em 600,313,0,10,10 0 138 emdash
-fi 600,626 2 140 fi
-fl 600,626 2 141 fl
-.i 600,439 0 144 dotlessi
-ga 600,661 2 146 grave
-a" 600,661 2 147 hungarumlaut
-a. 600,625 2 148 dotaccent
-ab 600,631 2 149 breve
-ah 600,667 2 150 caron
-ao 600,678 2 151 ring
-ho 600,0,199 1 152 ogonek
-lq 600,562 2 153 quotedblleft
-rq 600,562 2 154 quotedblright
-oe 600,454,15,11,18 0 155 oe
-/l 600,626 2 156 lslash
-Bq 600,143,142 1 157 quotedblbase
-OE 600,562,0,0,25 2 158 OE
-/L 600,562 2 159 Lslash
-r! 600,449,146 1 161 exclamdown
-ct 600,614,49 2 162 cent
-Po 600,611,28 2 163 sterling
-Cs 600,517 0 164 currency
-Ye 600,562 2 165 yen
-bb 600,675,175 3 166 brokenbar
-sc 600,580,70 2 167 section
-ad 600,625 2 168 dieresis
-co 600,580,18 2 169 copyright
-Of 600,580 2 170 ordfeminine
-fo 600,446 0 171 guilsinglleft
-tno 600,413 0 172 logicalnot
-\- 600,313 0 173 minus
-rg 600,580,18 2 174 registered
-a- 600,585 2 175 macron
-de 600,616 2 176 degree
-t+- 600,515 0 177 plusminus
-S2 600,616 2 178 twosuperior
-S3 600,616 2 179 threesuperior
-aa 600,661 2 180 acute
-mc 600,439,142,0,1 1 181 mu
-ps 600,580,70 2 182 paragraph
-pc 600,351 0 183 periodcentered
-ac 600,0,206 1 184 cedilla
-S1 600,616 2 185 onesuperior
-Om 600,580 2 186 ordmasculine
-fc 600,446 0 187 guilsinglright
-14 600,661,60,56,56 2 188 onequarter
-12 600,661,60,48,47 2 189 onehalf
-34 600,661,60,48,47 2 190 threequarters
-r? 600,449,146 1 191 questiondown
-`A 600,784,0,9,9 2 192 Agrave
-'A 600,784,0,9,9 2 193 Aacute
-^A 600,780,0,9,9 2 194 Acircumflex
-~A 600,759,0,9,9 2 195 Atilde
-:A 600,748,0,9,9 2 196 Adieresis
-oA 600,801,0,9,9 2 197 Aring
-AE 600,562,0,2,29 2 198 AE
-,C 600,580,206 3 199 Ccedilla
-`E 600,784 2 200 Egrave
-'E 600,784 2 201 Eacute
-^E 600,780 2 202 Ecircumflex
-:E 600,748 2 203 Edieresis
-`I 600,784 2 204 Igrave
-'I 600,784 2 205 Iacute
-^I 600,780 2 206 Icircumflex
-:I 600,748 2 207 Idieresis
--D 600,562 2 208 Eth
-~N 600,759,12,10 2 209 Ntilde
-`O 600,784,18 2 210 Ograve
-'O 600,784,18 2 211 Oacute
-^O 600,780,18 2 212 Ocircumflex
-~O 600,759,18 2 213 Otilde
-:O 600,748,18 2 214 Odieresis
-tmu 600,478 0 215 multiply
-/O 600,584,22 2 216 Oslash
-`U 600,784,18 2 217 Ugrave
-'U 600,784,18 2 218 Uacute
-^U 600,780,18 2 219 Ucircumflex
-:U 600,748,18 2 220 Udieresis
-'Y 600,784 2 221 Yacute
-TP 600,562 2 222 Thorn
-ss 600,626,15 2 223 germandbls
-`a 600,661,15 2 224 agrave
-'a 600,661,15 2 225 aacute
-^a 600,657,15 2 226 acircumflex
-~a 600,636,15 2 227 atilde
-:a 600,625,15 2 228 adieresis
-oa 600,678,15 2 229 aring
-ae 600,454,15,1,4 0 230 ae
-,c 600,459,206 1 231 ccedilla
-`e 600,661,15 2 232 egrave
-'e 600,661,15 2 233 eacute
-^e 600,657,15 2 234 ecircumflex
-:e 600,625,15 2 235 edieresis
-`i 600,661 2 236 igrave
-'i 600,661 2 237 iacute
-^i 600,657 2 238 icircumflex
-:i 600,625 2 239 idieresis
-Sd 600,626,27 2 240 eth
-~n 600,636 2 241 ntilde
-`o 600,661,15 2 242 ograve
-'o 600,661,15 2 243 oacute
-^o 600,657,15 2 244 ocircumflex
-~o 600,636,15 2 245 otilde
-:o 600,625,15 2 246 odieresis
-tdi 600,500 0 247 divide
-/o 600,463,24 0 248 oslash
-`u 600,661,15,0,1 2 249 ugrave
-'u 600,661,15,0,1 2 250 uacute
-^u 600,657,15,0,1 2 251 ucircumflex
-:u 600,625,15,0,1 2 252 udieresis
-'y 600,661,142,1,4 3 253 yacute
-Tp 600,626,142,0,14 3 254 thorn
-:y 600,625,142,1,4 3 255 ydieresis
-IJ 600,562,18,22,8 2 256 IJ
---- 600,447 0 257 up
---- 600,320 0 258 dectab
-u0047_030C 600,790,18 2 259 Gcaron
---- 600,562 2 260 stop
---- 600,562 2 261 tab
-u2026 600,116,15 0 262 ellipsis
---- 600,333 0 263 largebullet
-u0073_0327 600,459,206 1 264 scedilla
---- 600,562 2 265 return
-ij 600,658,146 3 266 ij
---- 600,562,0,45,45 2 267 LL
---- 600,562 2 268 square
-da 600,608,15 2 269 arrowdown
-<- 600,455,0,34,24 0 270 arrowleft
-<> 600,455,0,24,24 0 271 arrowboth
---- 600,599 2 272 graybox
--> 600,455,0,24,34 0 273 arrowright
-u00AF 600,629 2 274 overscore
---- 600,626,0,0,12 2 275 ll
-u0067_030C 600,667,146 3 276 gcaron
-u20A4 600,611,28 2 277 lira
---- 600,580 2 278 center
-u0053_0327 600,582,206 3 279 Scedilla
---- 600,601,146 3 280 format
-ua 600,626 2 281 arrowup
---- 600,572,15 2 282 notegraphic
-u211E 600,562,15 2 283 prescription
---- 600,372 0 284 indent
---- 600,439,15 0 285 down
---- 600,371 0 286 left
-u0049_0307 600,748 2 287 Idot
---- 600,487,15 0 288 merge
diff --git a/contrib/groff/font/devps/CBI b/contrib/groff/font/devps/CBI
deleted file mode 100644
index 27976db2f23d..000000000000
--- a/contrib/groff/font/devps/CBI
+++ /dev/null
@@ -1,282 +0,0 @@
-name CBI
-internalname Courier-BoldOblique
-slant 12
-spacewidth 600
-encoding text.enc
-charset
-ha 600,616,0,5,-121,5 2 0 asciicircum
-ti 600,356,0,39,-70,39 0 1 asciitilde
-vS 600,790,22,122,-4,75 2 2 Scaron
-vZ 600,790,0,109,-12,75 2 3 Zcaron
-vs 600,667,17,82,-17,75 2 4 scaron
-vz 600,667,0,82,-31,75 2 5 zcaron
-:Y 600,748,0,158,-59,75 2 6 Ydieresis
-tm 600,562,0,318,-36,75 2 7 trademark
-aq 600,562,0,0,-254 2 8 quotesingle
-space 600 0 32 space
-! 600,572,15,0,-166 2 33 exclam
-" 600,562,0,34,-162,34 2 34 quotedbl
-dq "
-# 600,651,45,90,-38,75 2 35 numbersign
-sh "
-$ 600,666,126,79,-37,75 2 36 dollar
-Do "
-% 600,616,15,74,-52,74 2 37 percent
-& 600,543,15,44,-12,44 0 38 ampersand
-' 600,562,0,0,-180 2 39 quoteright
-cq "
-( 600,616,102,42,-216,42 2 40 parenleft
-) 600,616,102,0,-67 2 41 parenright
-* 600,601,0,47,-129,47 2 42 asterisk
-+ 600,478,0,46,-64,46 0 43 plus
-, 600,174,111,0,-49 0 44 comma
-- 600,313,0,17,-93,17 0 45 hyphen
-hy "
-. 600,171,15,0,-157 0 46 period
-/ 600,626,77,76,-41,75 2 47 slash
-sl "
-0 600,616,15,42,-86,42 2 48 zero
-1 600,616,0,11,-43,11 2 49 one
-2 600,616,0,43,-11,43 2 50 two
-3 600,616,15,21,-22,21 2 51 three
-4 600,616,0,8,-32,8 2 52 four
-5 600,601,15,71,-27,71 2 53 five
-6 600,616,15,102,-86,75 2 54 six
-7 600,601,0,72,-97,72 2 55 seven
-8 600,616,15,54,-65,54 2 56 eight
-9 600,616,15,42,-26,42 2 57 nine
-: 600,425,15,0,-156 0 58 colon
-; 600,425,111,0,-49 0 59 semicolon
-< 600,501,0,62,-71,62 0 60 less
-= 600,398,0,64,-46,64 0 61 equal
-> 600,501,0,39,-47,39 0 62 greater
-? 600,580,14,41,-133,41 2 63 question
-@ 600,616,15,91,-16,75 2 64 at
-at "
-A 600,562,0,81,59,75 2 65 A
-B 600,562,0,79,20,75 2 66 B
-C 600,580,18,124,-25,75 2 67 C
-D 600,562,0,114,20,75 2 68 D
-E 600,562,0,119,25,75 2 69 E
-F 600,562,0,133,11,75 2 70 F
-G 600,580,18,124,-25,75 2 71 G
-H 600,562,0,149,30,75 2 72 H
-I 600,562,0,92,-27,75 2 73 I
-J 600,562,18,170,-9,75 2 74 J
-K 600,562,0,141,29,75 2 75 K
-L 600,562,0,85,11,75 2 76 L
-M 600,562,0,171,52,75 2 77 M
-N 600,562,12,179,42,75 2 78 N
-O 600,580,18,95,-24,75 2 79 O
-P 600,562,0,92,2,75 2 80 P
-Q 600,580,138,86,-34,75 2 81 Q
-R 600,562,0,67,26,67 2 82 R
-S 600,582,22,122,-4,75 2 83 S
-T 600,562,0,128,-36,75 2 84 T
-U 600,562,18,165,-51,75 2 85 U
-V 600,562,0,182,-34,75 2 86 V
-W 600,562,0,187,-34,75 2 87 W
-X 600,562,0,139,38,75 2 88 X
-Y 600,562,0,158,-59,75 2 89 Y
-Z 600,562,0,86,-12,75 2 90 Z
-[ 600,616,102,56,-173,56 2 91 bracketleft
-lB "
-\ 600,626,77,0,-173 2 92 backslash
-rs "
-] 600,616,102,0,-53 2 93 bracketright
-rB "
-a^ 600,657,0,56,-162,56 2 94 circumflex
-^ "
-_ 600,0,125,34,77,34 0 95 underscore
-` 600,562,0,0,-247 2 96 quoteleft
-oq "
-a 600,454,15,42,-12,42 0 97 a
-b 600,626,15,86,37,75 2 98 b
-c 600,459,15,81,-31,75 0 99 c
-d 600,626,15,94,-11,75 2 100 d
-e 600,454,15,54,-31,54 0 101 e
-f 600,626,0,127,-33,75 2 102 f
-g 600,454,146,123,9,75 1 103 g
-h 600,626,0,64,32,64 2 104 h
-i 600,658,0,0,-27 2 105 i
-j 600,658,146,30,13,30 3 106 j
-k 600,626,0,92,17,75 2 107 k
-l 600,626,0,0,-27 2 108 l
-m 600,454,0,98,72,75 0 109 m
-n 600,454,0,64,32,64 0 110 n
-o 600,454,15,72,-21,72 0 111 o
-p 600,454,142,72,81,72 1 112 p
-q 600,454,142,134,-11,75 1 113 q
-r 600,454,0,104,3,75 0 114 r
-s 600,459,17,57,-17,57 0 115 s
-t 600,562,15,16,-68,16 2 116 t
-u 600,439,15,41,-20,41 0 117 u
-v 600,439,0,144,-20,75 0 118 v
-w 600,439,0,161,-3,75 0 119 w
-x 600,439,0,120,44,75 0 120 x
-y 600,439,142,144,70,75 1 121 y
-z 600,439,0,63,-31,63 0 122 z
-lC 600,616,102,45,-154,45 2 123 braceleft
-{ "
-ba 600,750,250,0,-152 3 124 bar
-| "
-rC 600,616,102,0,-64 2 125 braceright
-} "
-a~ 600,636,0,92,-150,75 2 126 tilde
-~ "
-bq 600,143,142,0,-95 1 128 quotesinglbase
-Fo 600,446,0,88,-13,75 0 129 guillemotleft
-Fc 600,446,0,97,-22,75 0 130 guillemotright
-bu 600,430,0,0,-147 0 131 bullet
-Fn 600,616,131,151,106,75 2 132 florin
-f/ 600,661,60,157,28,75 2 133 fraction
-%0 600,616,15,192,94,75 2 134 perthousand
-dg 600,580,70,36,-126,36 2 135 dagger
-dd 600,580,70,36,-72,36 2 136 daggerdbl
-en 600,313,0,52,-58,52 0 137 endash
-em 600,313,0,127,17,75 0 138 emdash
-fi 600,626,0,93,38,75 2 140 fi
-fl 600,626,0,93,38,75 2 141 fl
-.i 600,439,0,0,-27 0 144 dotlessi
-ga 600,661,0,0,-222 2 146 grave
-a" 600,661,0,178,-122,75 2 147 hungarumlaut
-a. 600,625,0,0,-296 2 148 dotaccent
-ab 600,631,0,101,-167,75 2 149 breve
-ah 600,667,0,82,-188,75 2 150 caron
-ao 600,678,0,0,-269 2 151 ring
-ho 600,0,199,0,-94 1 152 ogonek
-lq 600,562,0,44,-140,44 2 153 quotedblleft
-rq 600,562,0,94,-70,75 2 154 quotedblright
-oe 600,454,15,111,31,75 0 155 oe
-/l 600,626,0,28,-27,28 2 156 lslash
-Bq 600,143,142,9,15,9 1 157 quotedblbase
-OE 600,562,0,150,24,75 2 158 OE
-/L 600,562,0,85,11,75 2 159 Lslash
-r! 600,449,146,0,-147 1 161 exclamdown
-ct 600,614,49,54,-71,54 2 162 cent
-Po 600,611,28,100,-57,75 2 163 sterling
-Cs 600,517,0,93,-27,75 0 164 currency
-Ye 600,562,0,159,-48,75 2 165 yen
-bb 600,675,175,0,-168 3 166 brokenbar
-sc 600,580,70,69,-24,69 2 167 section
-ad 600,625,0,42,-194,42 2 168 dieresis
-co 600,580,18,117,-3,75 2 169 copyright
-Of 600,580,0,0,-139 2 170 ordfeminine
-fo 600,446,0,0,-146 0 171 guilsinglleft
-tno 600,413,0,67,-85,67 0 172 logicalnot
-\- 600,313,0,46,-64,46 0 173 minus
-rg 600,580,18,117,-3,75 2 174 registered
-a- 600,585,0,86,-145,75 2 175 macron
-de 600,616,0,19,-123,19 2 176 degree
-t+- 600,515,0,64,-26,64 0 177 plusminus
-S2 600,616,0,0,-142 2 178 twosuperior
-S3 600,616,0,0,-143 2 179 threesuperior
-aa 600,661,0,58,-263,58 2 180 acute
-mc 600,439,142,41,0,41 1 181 mu
-ps 600,580,70,149,-11,75 2 182 paragraph
-pc 600,351,0,0,-199 0 183 periodcentered
-ac 600,0,206,0,-119 1 184 cedilla
-S1 600,616,0,0,-163 2 185 onesuperior
-Om 600,580,0,0,-139 2 186 ordmasculine
-fc 600,446,0,0,-116 0 187 guilsinglright
-14 600,661,60,156,36,75 2 188 onequarter
-12 600,661,60,165,27,75 2 189 onehalf
-34 600,661,60,148,42,75 2 190 threequarters
-r? 600,449,146,0,-51 1 191 questiondown
-`A 600,784,0,81,59,75 2 192 Agrave
-'A 600,784,0,115,59,75 2 193 Aacute
-^A 600,780,0,81,59,75 2 194 Acircumflex
-~A 600,759,0,88,59,75 2 195 Atilde
-:A 600,748,0,81,59,75 2 196 Adieresis
-oA 600,801,0,81,59,75 2 197 Aring
-AE 600,562,0,157,79,75 2 198 AE
-,C 600,580,206,124,-24,75 3 199 Ccedilla
-`E 600,784,0,119,25,75 2 200 Egrave
-'E 600,784,0,119,25,75 2 201 Eacute
-^E 600,780,0,119,25,75 2 202 Ecircumflex
-:E 600,748,0,119,25,75 2 203 Edieresis
-`I 600,784,0,92,-27,75 2 204 Igrave
-'I 600,784,0,92,-27,75 2 205 Iacute
-^I 600,780,0,92,-27,75 2 206 Icircumflex
-:I 600,748,0,92,-27,75 2 207 Idieresis
--D 600,562,0,114,20,75 2 208 Eth
-~N 600,759,12,179,42,75 2 209 Ntilde
-`O 600,784,18,95,-24,75 2 210 Ograve
-'O 600,784,18,95,-24,75 2 211 Oacute
-^O 600,780,18,95,-24,75 2 212 Ocircumflex
-~O 600,759,18,118,-24,75 2 213 Otilde
-:O 600,748,18,95,-24,75 2 214 Odieresis
-tmu 600,478,0,56,-55,56 0 215 multiply
-/O 600,584,22,122,2,75 2 216 Oslash
-`U 600,784,18,165,-51,75 2 217 Ugrave
-'U 600,784,18,165,-51,75 2 218 Uacute
-^U 600,780,18,165,-51,75 2 219 Ucircumflex
-:U 600,748,18,165,-51,75 2 220 Udieresis
-'Y 600,784,0,158,-59,75 2 221 Yacute
-TP 600,562,0,69,2,69 2 222 Thorn
-ss 600,626,15,78,28,75 2 223 germandbls
-`a 600,661,15,42,-12,42 2 224 agrave
-'a 600,661,15,58,-12,58 2 225 aacute
-^a 600,657,15,42,-12,42 2 226 acircumflex
-~a 600,636,15,92,-12,75 2 227 atilde
-:a 600,625,15,42,-12,42 2 228 adieresis
-oa 600,678,15,42,-12,42 2 229 aring
-ae 600,454,15,101,29,75 0 230 ae
-,c 600,459,206,81,-31,75 1 231 ccedilla
-`e 600,661,15,54,-31,54 2 232 egrave
-'e 600,661,15,58,-31,58 2 233 eacute
-^e 600,657,15,56,-31,56 2 234 ecircumflex
-:e 600,625,15,54,-31,54 2 235 edieresis
-`i 600,661,0,0,-27 2 236 igrave
-'i 600,661,0,58,-27,58 2 237 iacute
-^i 600,657,0,16,-27,16 2 238 icircumflex
-:i 600,625,0,2,-27,2 2 239 idieresis
-Sd 600,626,27,111,-43,75 2 240 eth
-~n 600,636,0,92,32,75 2 241 ntilde
-`o 600,661,15,72,-21,72 2 242 ograve
-'o 600,661,15,72,-21,72 2 243 oacute
-^o 600,657,15,72,-21,72 2 244 ocircumflex
-~o 600,636,15,92,-21,75 2 245 otilde
-:o 600,625,15,72,-21,72 2 246 odieresis
-tdi 600,500,0,46,-64,46 0 247 divide
-/o 600,463,24,87,-5,75 0 248 oslash
-`u 600,661,15,41,-20,41 2 249 ugrave
-'u 600,661,15,58,-20,58 2 250 uacute
-^u 600,657,15,41,-20,41 2 251 ucircumflex
-:u 600,625,15,41,-20,41 2 252 udieresis
-'y 600,661,142,144,70,75 3 253 yacute
-Tp 600,626,142,72,81,72 3 254 thorn
-:y 600,625,142,144,70,75 3 255 ydieresis
-IJ 600,562,18,191,58,75 2 256 IJ
---- 600,447,0,0,-146 0 257 up
---- 600,320,0,65,42,65 0 258 dectab
-u0047_030C 600,790,18,124,-25,75 2 259 Gcaron
---- 600,562,0,150,31,75 2 260 stop
---- 600,562,0,91,31,75 2 261 tab
-u2026 600,116,15,36,15,36 0 262 ellipsis
---- 600,333,0,0,-257 0 263 largebullet
-u0073_0327 600,459,206,57,-17,57 1 264 scedilla
---- 600,562,0,150,-29,75 2 265 return
-ij 600,658,146,164,44,75 3 266 ij
---- 600,562,0,144,95,75 2 267 LL
---- 600,562,0,150,31,75 2 268 square
-da 600,608,15,0,-124 2 269 arrowdown
-<- 600,455,0,158,10,75 0 270 arrowleft
-<> 600,455,0,138,10,75 0 271 arrowboth
---- 600,599,0,102,-26,75 2 272 graybox
--> 600,455,0,138,30,75 0 273 arrowright
-u00AF 600,629,0,184,-73,75 2 274 overscore
---- 600,626,0,103,49,75 2 275 ll
-u0067_030C 600,667,146,123,9,75 3 276 gcaron
-u20A4 600,611,28,100,-57,75 2 277 lira
---- 600,580,0,73,-53,73 2 278 center
-u0053_0327 600,582,206,122,-4,75 3 279 Scedilla
---- 600,601,146,0,76 3 280 format
-ua 600,626,0,6,-194,6 2 281 arrowup
---- 600,572,15,69,-41,69 2 282 notegraphic
-u211E 600,562,15,82,26,75 2 283 prescription
---- 600,372,0,29,-49,29 0 284 indent
---- 600,439,15,0,-118 0 285 down
---- 600,371,0,39,-59,39 0 286 left
-u0049_0307 600,748,0,92,-27,75 2 287 Idot
---- 600,487,15,0,-118 0 288 merge
diff --git a/contrib/groff/font/devps/CI b/contrib/groff/font/devps/CI
deleted file mode 100644
index 7d7582dad690..000000000000
--- a/contrib/groff/font/devps/CI
+++ /dev/null
@@ -1,282 +0,0 @@
-name CI
-internalname Courier-Oblique
-slant 12
-spacewidth 600
-encoding text.enc
-charset
-ha 600,622,0,37,-125,37 2 0 asciicircum
-ti 600,320,0,50,-66,50 0 1 asciitilde
-vS 600,805,20,123,-26,72 2 2 Scaron
-vZ 600,805,0,93,-36,72 2 3 Zcaron
-vs 600,669,15,64,-28,64 2 4 scaron
-vz 600,669,0,74,-49,72 2 5 zcaron
-:Y 600,731,0,145,-83,72 2 6 Ydieresis
-tm 600,562,0,192,-25,72 2 7 trademark
-aq 600,562,0,0,-295 2 8 quotesingle
-space 600 0 32 space
-! 600,572,15,0,-193 2 33 exclam
-" 600,562,0,0,-223 2 34 quotedbl
-dq "
-# 600,639,32,46,-83,46 2 35 numbersign
-sh "
-$ 600,662,126,46,-58,46 2 36 dollar
-Do "
-% 600,622,15,49,-84,49 2 37 percent
-& 600,543,15,30,-37,30 0 38 ampersand
-' 600,562,0,0,-233 2 39 quoteright
-cq "
-( 600,622,108,22,-263,22 2 40 parenleft
-) 600,622,108,0,-87 2 41 parenright
-* 600,607,0,30,-162,30 2 42 asterisk
-+ 600,470,0,30,-79,30 0 43 plus
-, 600,122,112,0,-107 0 44 comma
-- 600,285,0,8,-102,8 0 45 hyphen
-hy "
-. 600,109,15,0,-188 0 46 period
-/ 600,629,80,54,-62,54 2 47 slash
-sl "
-0 600,622,15,25,-104,25 2 48 zero
-1 600,622,0,0,-48 2 49 one
-2 600,622,0,18,-20,18 2 50 two
-3 600,622,15,0,-32 2 51 three
-4 600,622,0,0,-58 2 52 four
-5 600,607,15,39,-49,39 2 53 five
-6 600,622,15,79,-105,72 2 54 six
-7 600,607,0,62,-132,62 2 55 seven
-8 600,622,15,38,-82,38 2 56 eight
-9 600,622,15,24,-43,24 2 57 nine
-: 600,385,15,0,-188 0 58 colon
-; 600,385,112,0,-107 0 59 semicolon
-< 600,472,0,60,-46,60 0 60 less
-= 600,376,0,50,-59,50 0 61 equal
-> 600,472,0,49,-35,49 0 62 greater
-? 600,572,15,33,-172,33 2 63 question
-@ 600,622,15,32,-77,32 2 64 at
-at "
-A 600,562,0,57,47,57 2 65 A
-B 600,562,0,66,7,66 2 66 B
-C 600,580,18,105,-43,72 2 67 C
-D 600,562,0,95,7,72 2 68 D
-E 600,562,0,110,-3,72 2 69 E
-F 600,562,0,110,-3,72 2 70 F
-G 600,580,18,95,-33,72 2 71 G
-H 600,562,0,137,18,72 2 72 H
-I 600,562,0,73,-46,72 2 73 I
-J 600,562,18,135,-2,72 2 74 J
-K 600,562,0,121,12,72 2 75 K
-L 600,562,0,57,3,57 2 76 L
-M 600,562,0,165,46,72 2 77 M
-N 600,562,13,162,43,72 2 78 N
-O 600,580,18,75,-44,72 2 79 O
-P 600,562,0,94,-29,72 2 80 P
-Q 600,580,138,75,-45,72 2 81 Q
-R 600,562,0,48,12,48 2 82 R
-S 600,580,20,100,-26,72 2 83 S
-T 600,562,0,115,-58,72 2 84 T
-U 600,562,18,152,-75,72 2 85 U
-V 600,562,13,173,-55,72 2 86 V
-W 600,562,13,172,-56,72 2 87 W
-X 600,562,0,125,27,72 2 88 X
-Y 600,562,0,145,-83,72 2 89 Y
-Z 600,562,0,60,-36,60 2 90 Z
-[ 600,622,108,24,-196,24 2 91 bracketleft
-lB "
-\ 600,629,80,0,-199 2 92 backslash
-rs "
-] 600,622,108,0,-85 2 93 bracketright
-rB "
-a^ 600,654,0,31,-179,31 2 94 circumflex
-^ "
-_ 600,0,125,34,77,34 0 95 underscore
-` 600,562,0,0,-293 2 96 quoteleft
-oq "
-a 600,441,15,19,-26,19 0 97 a
-b 600,629,15,75,21,72 2 98 b
-c 600,441,15,58,-56,58 0 99 c
-d 600,629,15,90,-35,72 2 100 d
-e 600,441,15,48,-56,48 0 101 e
-f 600,629,0,112,-64,72 2 102 f
-g 600,441,157,107,-11,72 1 103 g
-h 600,629,0,42,17,42 2 104 h
-i 600,657,0,0,-45 2 105 i
-j 600,657,157,0,-2 3 106 j
-k 600,629,0,83,-8,72 2 107 k
-l 600,629,0,0,-45 2 108 l
-m 600,441,0,65,55,65 0 109 m
-n 600,441,0,35,24,35 0 110 n
-o 600,441,15,38,-52,38 0 111 o
-p 600,441,157,55,74,55 1 112 p
-q 600,441,157,132,-35,72 1 113 q
-r 600,441,0,86,-10,72 0 114 r
-s 600,441,15,34,-28,34 0 115 s
-t 600,561,15,11,-117,11 2 116 t
-u 600,426,15,22,-51,22 0 117 u
-v 600,426,10,131,-40,72 0 118 v
-w 600,426,10,145,-26,72 0 119 w
-x 600,426,0,105,30,72 0 120 x
-y 600,426,157,133,54,72 1 121 y
-z 600,426,0,43,-49,43 0 122 z
-lC 600,622,108,19,-183,19 2 123 braceleft
-{ "
-ba 600,750,250,0,-172 3 124 bar
-| "
-rC 600,622,108,0,-90 2 125 braceright
-} "
-a~ 600,606,0,79,-162,72 2 126 tilde
-~ "
-bq 600,100,134,0,-135 0 128 quotesinglbase
-Fo 600,446,0,102,-42,72 0 129 guillemotleft
-Fc 600,446,0,68,-8,68 0 130 guillemotright
-bu 600,383,0,0,-174 0 131 bullet
-Fn 600,622,143,121,76,72 2 132 florin
-f/ 600,665,57,96,-34,72 2 133 fraction
-%0 600,622,15,77,-9,72 2 134 perthousand
-dg 600,580,78,0,-167 2 135 dagger
-dd 600,580,78,0,-113 2 136 daggerdbl
-en 600,285,0,36,-74,36 0 137 endash
-em 600,285,0,111,1,72 0 138 emdash
-fi 600,629,0,69,47,69 2 140 fi
-fl 600,629,0,69,47,69 2 141 fl
-.i 600,426,0,0,-45 0 144 dotlessi
-ga 600,672,0,0,-244 2 146 grave
-a" 600,672,0,133,-189,72 2 147 hungarumlaut
-a. 600,580,0,0,-310 2 148 dotaccent
-ab 600,609,0,26,-229,26 2 149 breve
-ah 600,669,0,64,-212,64 2 150 caron
-ao 600,627,0,0,-282 2 151 ring
-ho 600,0,151,0,-157 0 152 ogonek
-lq 600,562,0,0,-212 2 153 quotedblleft
-rq 600,562,0,26,-163,26 2 154 quotedblright
-oe 600,441,15,65,-4,65 0 155 oe
-/l 600,629,0,33,-45,33 2 156 lslash
-Bq 600,100,134,0,-65 0 157 quotedblbase
-OE 600,562,0,122,-9,72 2 158 OE
-/L 600,562,0,57,3,57 2 159 Lslash
-r! 600,430,157,0,-175 1 161 exclamdown
-ct 600,614,49,38,-101,38 2 162 cent
-Po 600,611,21,71,-74,71 2 163 sterling
-Cs 600,506,0,78,-44,72 0 164 currency
-Ye 600,562,0,143,-70,72 2 165 yen
-bb 600,675,175,0,-188 3 166 brokenbar
-sc 600,580,78,40,-54,40 2 167 section
-ad 600,595,0,20,-212,20 2 168 dieresis
-co 600,580,18,117,-3,72 2 169 copyright
-Of 600,580,0,0,-159 2 170 ordfeminine
-fo 600,446,0,0,-154 0 171 guilsinglleft
-tno 600,369,0,41,-105,41 0 172 logicalnot
-\- 600,283,0,30,-79,30 0 173 minus
-rg 600,580,18,117,-3,72 2 174 registered
-a- 600,565,0,50,-182,50 2 175 macron
-de 600,622,0,26,-164,26 2 176 degree
-t+- 600,558,0,44,-46,44 0 177 plusminus
-S2 600,622,0,0,-180 2 178 twosuperior
-S3 600,622,0,0,-163 2 179 threesuperior
-aa 600,672,0,62,-298,62 2 180 acute
-mc 600,426,157,22,-22,22 1 181 mu
-ps 600,562,78,80,-50,72 2 182 paragraph
-pc 600,327,0,0,-225 0 183 periodcentered
-ac 600,10,151,0,-147 0 184 cedilla
-S1 600,622,0,0,-181 2 185 onesuperior
-Om 600,580,0,0,-160 2 186 ordmasculine
-fc 600,446,0,0,-120 0 187 guilsinglright
-14 600,665,57,124,-15,72 2 188 onequarter
-12 600,665,57,119,-15,72 2 189 onehalf
-34 600,666,56,109,-23,72 2 190 threequarters
-r? 600,430,157,0,-55 1 191 questiondown
-`A 600,793,0,57,47,57 2 192 Agrave
-'A 600,793,0,108,47,72 2 193 Aacute
-^A 600,775,0,57,47,57 2 194 Acircumflex
-~A 600,732,0,106,47,72 2 195 Atilde
-:A 600,731,0,57,47,57 2 196 Adieresis
-oA 600,753,0,57,47,57 2 197 Aring
-AE 600,562,0,105,47,72 2 198 AE
-,C 600,580,151,108,-43,72 2 199 Ccedilla
-`E 600,793,0,110,-3,72 2 200 Egrave
-'E 600,793,0,118,-3,72 2 201 Eacute
-^E 600,775,0,110,-3,72 2 202 Ecircumflex
-:E 600,731,0,110,-3,72 2 203 Edieresis
-`I 600,793,0,73,-46,72 2 204 Igrave
-'I 600,793,0,88,-46,72 2 205 Iacute
-^I 600,775,0,73,-46,72 2 206 Icircumflex
-:I 600,731,0,73,-46,72 2 207 Idieresis
--D 600,562,0,95,7,72 2 208 Eth
-~N 600,732,13,162,43,72 2 209 Ntilde
-`O 600,793,18,75,-44,72 2 210 Ograve
-'O 600,793,18,88,-44,72 2 211 Oacute
-^O 600,775,18,75,-44,72 2 212 Ocircumflex
-~O 600,732,18,106,-44,72 2 213 Otilde
-:O 600,731,18,75,-44,72 2 214 Odieresis
-tmu 600,470,0,57,-53,57 0 215 multiply
-/O 600,629,80,75,-44,72 2 216 Oslash
-`U 600,793,18,152,-75,72 2 217 Ugrave
-'U 600,793,18,152,-75,72 2 218 Uacute
-^U 600,775,18,152,-75,72 2 219 Ucircumflex
-:U 600,731,18,152,-75,72 2 220 Udieresis
-'Y 600,793,0,145,-83,72 2 221 Yacute
-TP 600,562,0,56,-29,56 2 222 Thorn
-ss 600,629,15,67,2,67 2 223 germandbls
-`a 600,672,15,19,-26,19 2 224 agrave
-'a 600,672,15,62,-26,62 2 225 aacute
-^a 600,654,15,31,-26,31 2 226 acircumflex
-~a 600,606,15,79,-26,72 2 227 atilde
-:a 600,595,15,20,-26,20 2 228 adieresis
-oa 600,627,15,19,-26,19 2 229 aring
-ae 600,441,15,76,9,72 0 230 ae
-,c 600,441,151,64,-56,64 0 231 ccedilla
-`e 600,672,15,48,-56,48 2 232 egrave
-'e 600,672,15,62,-56,62 2 233 eacute
-^e 600,654,15,48,-56,48 2 234 ecircumflex
-:e 600,595,15,48,-56,48 2 235 edieresis
-`i 600,672,0,0,-45 2 236 igrave
-'i 600,672,0,62,-45,62 2 237 iacute
-^i 600,654,0,1,-45,1 2 238 icircumflex
-:i 600,595,0,0,-45 2 239 idieresis
-Sd 600,629,15,89,-52,72 2 240 eth
-~n 600,606,0,79,24,72 2 241 ntilde
-`o 600,672,15,38,-52,38 2 242 ograve
-'o 600,672,15,62,-52,62 2 243 oacute
-^o 600,654,15,38,-52,38 2 244 ocircumflex
-~o 600,606,15,79,-52,72 2 245 otilde
-:o 600,595,15,38,-52,38 2 246 odieresis
-tdi 600,467,0,23,-86,23 0 247 divide
-/o 600,506,80,38,-52,38 0 248 oslash
-`u 600,672,15,22,-51,22 2 249 ugrave
-'u 600,672,15,52,-51,52 2 250 uacute
-^u 600,654,15,22,-51,22 2 251 ucircumflex
-:u 600,595,15,22,-51,22 2 252 udieresis
-'y 600,672,157,133,54,72 3 253 yacute
-Tp 600,629,157,55,74,55 3 254 thorn
-:y 600,595,157,133,54,72 3 255 ydieresis
-IJ 600,562,18,152,18,72 2 256 IJ
---- 600,437,0,0,-173 0 257 up
---- 600,227,0,43,32,43 0 258 dectab
-u0047_030C 600,805,18,95,-33,72 2 259 Gcaron
---- 600,562,0,150,31,72 2 260 stop
---- 600,562,0,91,31,72 2 261 tab
-u2026 600,111,15,25,4,25 0 262 ellipsis
---- 600,297,0,0,-265 0 263 largebullet
-u0073_0327 600,441,151,34,-28,34 0 264 scedilla
---- 600,562,0,150,-29,72 2 265 return
-ij 600,657,157,80,13,72 3 266 ij
---- 600,562,0,97,42,72 2 267 LL
---- 600,562,0,150,31,72 2 268 square
-da 600,608,15,0,-102 2 269 arrowdown
-<- 600,483,0,143,10,72 0 270 arrowleft
-<> 600,483,0,142,14,72 0 271 arrowboth
---- 600,599,0,102,-26,72 2 272 graybox
--> 600,483,0,138,16,72 0 273 arrowright
-u00AF 600,629,0,184,-73,72 2 274 overscore
---- 600,629,0,66,17,66 2 275 ll
-u0067_030C 600,669,157,107,-11,72 3 276 gcaron
-u20A4 600,611,21,71,-68,71 2 277 lira
---- 600,580,0,73,-53,72 2 278 center
-u0053_0327 600,580,151,100,-26,72 2 279 Scedilla
---- 600,607,157,0,78 3 280 format
-ua 600,623,0,27,-159,27 2 281 arrowup
---- 600,572,15,14,-93,14 2 282 notegraphic
-u211E 600,562,15,67,23,67 2 283 prescription
---- 600,348,0,24,-58,24 0 284 indent
---- 600,426,15,0,-137 0 285 down
---- 600,348,0,30,-64,30 0 286 left
-u0049_0307 600,716,0,73,-46,72 2 287 Idot
---- 600,436,15,0,-137 0 288 merge
diff --git a/contrib/groff/font/devps/CR b/contrib/groff/font/devps/CR
deleted file mode 100644
index df194213a626..000000000000
--- a/contrib/groff/font/devps/CR
+++ /dev/null
@@ -1,281 +0,0 @@
-name CR
-internalname Courier
-spacewidth 600
-encoding text.enc
-charset
-ha 600,622 2 0 asciicircum
-ti 600,320 0 1 asciitilde
-vS 600,805,20 2 2 Scaron
-vZ 600,805 2 3 Zcaron
-vs 600,669,15 2 4 scaron
-vz 600,669 2 5 zcaron
-:Y 600,731 2 6 Ydieresis
-tm 600,562,0,23,23 2 7 trademark
-aq 600,562 2 8 quotesingle
-space 600 0 32 space
-! 600,572,15 2 33 exclam
-" 600,562 2 34 quotedbl
-dq "
-# 600,639,32 2 35 numbersign
-sh "
-$ 600,662,126 2 36 dollar
-Do "
-% 600,622,15 2 37 percent
-& 600,543,15 0 38 ampersand
-' 600,562 2 39 quoteright
-cq "
-( 600,622,108 2 40 parenleft
-) 600,622,108 2 41 parenright
-* 600,607 2 42 asterisk
-+ 600,470 0 43 plus
-, 600,122,112 0 44 comma
-- 600,285 0 45 hyphen
-hy "
-. 600,109,15 0 46 period
-/ 600,629,80 2 47 slash
-sl "
-0 600,622,15 2 48 zero
-1 600,622 2 49 one
-2 600,622 2 50 two
-3 600,622,15 2 51 three
-4 600,622 2 52 four
-5 600,607,15 2 53 five
-6 600,622,15 2 54 six
-7 600,607 2 55 seven
-8 600,622,15 2 56 eight
-9 600,622,15 2 57 nine
-: 600,385,15 0 58 colon
-; 600,385,112 0 59 semicolon
-< 600,472 0 60 less
-= 600,376 0 61 equal
-> 600,472 0 62 greater
-? 600,572,15 2 63 question
-@ 600,622,15 2 64 at
-at "
-A 600,562 2 65 A
-B 600,562 2 66 B
-C 600,580,18 2 67 C
-D 600,562 2 68 D
-E 600,562 2 69 E
-F 600,562 2 70 F
-G 600,580,18 2 71 G
-H 600,562 2 72 H
-I 600,562 2 73 I
-J 600,562,18 2 74 J
-K 600,562 2 75 K
-L 600,562 2 76 L
-M 600,562 2 77 M
-N 600,562,13 2 78 N
-O 600,580,18 2 79 O
-P 600,562 2 80 P
-Q 600,580,138 2 81 Q
-R 600,562 2 82 R
-S 600,580,20 2 83 S
-T 600,562 2 84 T
-U 600,562,18 2 85 U
-V 600,562,13,4,4 2 86 V
-W 600,562,13,3,3 2 87 W
-X 600,562 2 88 X
-Y 600,562 2 89 Y
-Z 600,562 2 90 Z
-[ 600,622,108 2 91 bracketleft
-lB "
-\ 600,629,80 2 92 backslash
-rs "
-] 600,622,108 2 93 bracketright
-rB "
-a^ 600,654 2 94 circumflex
-^ "
-_ 600,0,125 0 95 underscore
-` 600,562 2 96 quoteleft
-oq "
-a 600,441,15 0 97 a
-b 600,629,15 2 98 b
-c 600,441,15 0 99 c
-d 600,629,15 2 100 d
-e 600,441,15 0 101 e
-f 600,629 2 102 f
-g 600,441,157 1 103 g
-h 600,629 2 104 h
-i 600,657 2 105 i
-j 600,657,157 3 106 j
-k 600,629 2 107 k
-l 600,629 2 108 l
-m 600,441,0,5,5 0 109 m
-n 600,441 0 110 n
-o 600,441,15 0 111 o
-p 600,441,157 1 112 p
-q 600,441,157 1 113 q
-r 600,441 0 114 r
-s 600,441,15 0 115 s
-t 600,561,15 2 116 t
-u 600,426,15 0 117 u
-v 600,426,10 0 118 v
-w 600,426,10,4,4 0 119 w
-x 600,426 0 120 x
-y 600,426,157 1 121 y
-z 600,426 0 122 z
-lC 600,622,108 2 123 braceleft
-{ "
-ba 600,750,250 3 124 bar
-| "
-rC 600,622,108 2 125 braceright
-} "
-a~ 600,606 2 126 tilde
-~ "
-bq 600,100,134 0 128 quotesinglbase
-Fo 600,446 0 129 guillemotleft
-Fc 600,446 0 130 guillemotright
-bu 600,383 0 131 bullet
-Fn 600,622,143 2 132 florin
-f/ 600,665,57 2 133 fraction
-%0 600,622,15 2 134 perthousand
-dg 600,580,78 2 135 dagger
-dd 600,580,78 2 136 daggerdbl
-en 600,285 0 137 endash
-em 600,285 0 138 emdash
-fi 600,629 2 140 fi
-fl 600,629 2 141 fl
-.i 600,426 0 144 dotlessi
-ga 600,672 2 146 grave
-a" 600,672 2 147 hungarumlaut
-a. 600,580 2 148 dotaccent
-ab 600,609 2 149 breve
-ah 600,669 2 150 caron
-ao 600,627 2 151 ring
-ho 600,0,151 0 152 ogonek
-lq 600,562 2 153 quotedblleft
-rq 600,562 2 154 quotedblright
-oe 600,441,15 0 155 oe
-/l 600,629 2 156 lslash
-Bq 600,100,134 0 157 quotedblbase
-OE 600,562 2 158 OE
-/L 600,562 2 159 Lslash
-r! 600,430,157 1 161 exclamdown
-ct 600,614,49 2 162 cent
-Po 600,611,21 2 163 sterling
-Cs 600,506 0 164 currency
-Ye 600,562 2 165 yen
-bb 600,675,175 3 166 brokenbar
-sc 600,580,78 2 167 section
-ad 600,595 2 168 dieresis
-co 600,580,18 2 169 copyright
-Of 600,580 2 170 ordfeminine
-fo 600,446 0 171 guilsinglleft
-tno 600,369 0 172 logicalnot
-\- 600,283 0 173 minus
-rg 600,580,18 2 174 registered
-a- 600,565 2 175 macron
-de 600,622 2 176 degree
-t+- 600,558 0 177 plusminus
-S2 600,622 2 178 twosuperior
-S3 600,622 2 179 threesuperior
-aa 600,672 2 180 acute
-mc 600,426,157 1 181 mu
-ps 600,562,78 2 182 paragraph
-pc 600,327 0 183 periodcentered
-ac 600,10,151 0 184 cedilla
-S1 600,622 2 185 onesuperior
-Om 600,580 2 186 ordmasculine
-fc 600,446 0 187 guilsinglright
-14 600,665,57 2 188 onequarter
-12 600,665,57,11 2 189 onehalf
-34 600,666,56 2 190 threequarters
-r? 600,430,157 1 191 questiondown
-`A 600,793 2 192 Agrave
-'A 600,793 2 193 Aacute
-^A 600,775 2 194 Acircumflex
-~A 600,732 2 195 Atilde
-:A 600,731 2 196 Adieresis
-oA 600,753 2 197 Aring
-AE 600,562 2 198 AE
-,C 600,580,151 2 199 Ccedilla
-`E 600,793 2 200 Egrave
-'E 600,793 2 201 Eacute
-^E 600,775 2 202 Ecircumflex
-:E 600,731 2 203 Edieresis
-`I 600,793 2 204 Igrave
-'I 600,793 2 205 Iacute
-^I 600,775 2 206 Icircumflex
-:I 600,731 2 207 Idieresis
--D 600,562 2 208 Eth
-~N 600,732,13 2 209 Ntilde
-`O 600,793,18 2 210 Ograve
-'O 600,793,18 2 211 Oacute
-^O 600,775,18 2 212 Ocircumflex
-~O 600,732,18 2 213 Otilde
-:O 600,731,18 2 214 Odieresis
-tmu 600,470 0 215 multiply
-/O 600,629,80 2 216 Oslash
-`U 600,793,18 2 217 Ugrave
-'U 600,793,18 2 218 Uacute
-^U 600,775,18 2 219 Ucircumflex
-:U 600,731,18 2 220 Udieresis
-'Y 600,793 2 221 Yacute
-TP 600,562 2 222 Thorn
-ss 600,629,15 2 223 germandbls
-`a 600,672,15 2 224 agrave
-'a 600,672,15 2 225 aacute
-^a 600,654,15 2 226 acircumflex
-~a 600,606,15 2 227 atilde
-:a 600,595,15 2 228 adieresis
-oa 600,627,15 2 229 aring
-ae 600,441,15 0 230 ae
-,c 600,441,151 0 231 ccedilla
-`e 600,672,15 2 232 egrave
-'e 600,672,15 2 233 eacute
-^e 600,654,15 2 234 ecircumflex
-:e 600,595,15 2 235 edieresis
-`i 600,672 2 236 igrave
-'i 600,672 2 237 iacute
-^i 600,654 2 238 icircumflex
-:i 600,595 2 239 idieresis
-Sd 600,629,15 2 240 eth
-~n 600,606 2 241 ntilde
-`o 600,672,15 2 242 ograve
-'o 600,672,15 2 243 oacute
-^o 600,654,15 2 244 ocircumflex
-~o 600,606,15 2 245 otilde
-:o 600,595,15 2 246 odieresis
-tdi 600,467 0 247 divide
-/o 600,506,80 0 248 oslash
-`u 600,672,15 2 249 ugrave
-'u 600,672,15 2 250 uacute
-^u 600,654,15 2 251 ucircumflex
-:u 600,595,15 2 252 udieresis
-'y 600,672,157 3 253 yacute
-Tp 600,629,157,0,6 3 254 thorn
-:y 600,595,157 3 255 ydieresis
-IJ 600,562,18 2 256 IJ
---- 600,437 0 257 up
---- 600,227 0 258 dectab
-u0047_030C 600,805,18 2 259 Gcaron
---- 600,562 2 260 stop
---- 600,562 2 261 tab
-u2026 600,111,15 0 262 ellipsis
---- 600,297 0 263 largebullet
-u0073_0327 600,441,151 0 264 scedilla
---- 600,562 2 265 return
-ij 600,657,157 3 266 ij
---- 600,562 2 267 LL
---- 600,562 2 268 square
-da 600,608,15 2 269 arrowdown
-<- 600,483,0,24,24 0 270 arrowleft
-<> 600,483,0,28,28 0 271 arrowboth
---- 600,599 2 272 graybox
--> 600,483,0,24,24 0 273 arrowright
-u00AF 600,629 2 274 overscore
---- 600,629 2 275 ll
-u0067_030C 600,669,157 3 276 gcaron
-u20A4 600,611,21 2 277 lira
---- 600,580 2 278 center
-u0053_0327 600,580,151 2 279 Scedilla
---- 600,607,157 3 280 format
-ua 600,623 2 281 arrowup
---- 600,572,15 2 282 notegraphic
-u211E 600,562,15 2 283 prescription
---- 600,348 0 284 indent
---- 600,426,15 0 285 down
---- 600,348 0 286 left
-u0049_0307 600,716 2 287 Idot
---- 600,436,15 0 288 merge
diff --git a/contrib/groff/font/devps/DESC.in b/contrib/groff/font/devps/DESC.in
deleted file mode 100644
index e9d26c8457a4..000000000000
--- a/contrib/groff/font/devps/DESC.in
+++ /dev/null
@@ -1,11 +0,0 @@
-res 72000
-hor 1
-vert 1
-sizescale 1000
-unitwidth 1000
-sizes 1000-10000000 0
-styles R I B BI
-family T
-fonts 9 0 0 0 0 0 SS S ZD ZDR
-tcommand
-postpro grops
diff --git a/contrib/groff/font/devps/EURO b/contrib/groff/font/devps/EURO
deleted file mode 100644
index e1459e6476a7..000000000000
--- a/contrib/groff/font/devps/EURO
+++ /dev/null
@@ -1,19 +0,0 @@
-name EURO
-internalname FreeEuro
-charset
---- 750,685,12 3 0 Euro.symbol
---- 750,685,12 3 1 Euro.symbol.bold
---- 750,685,12,92 3 2 Euro.symbol.slanted
---- 750,685,12,100 3 3 Euro.symbol.bold.slanted
---- 741,676,14 3 4 Euro.serif
---- 800,691,19 3 5 Euro.serif.bold
---- 734,666,18,11 3 6 Euro.serif.italic
---- 800,691,19,8 3 7 Euro.serif.bold.italic
---- 756,709,23 3 8 Euro.sansserif
---- 796,710,22 3 9 Euro.sansserif.bold
---- 756,709,23,106 3 10 Euro.sansserif.slanted
---- 796,710,22,107 3 11 Euro.sansserif.bold.slanted
---- 600,576,16 3 12 Euro.mono
---- 600,597,14 3 13 Euro.mono.bold
---- 600,576,16,31 3 14 Euro.mono.slanted
---- 600,597,14,43 3 15 Euro.mono.bold.slanted
diff --git a/contrib/groff/font/devps/HB b/contrib/groff/font/devps/HB
deleted file mode 100644
index ac3c1f354852..000000000000
--- a/contrib/groff/font/devps/HB
+++ /dev/null
@@ -1,481 +0,0 @@
-name HB
-internalname Helvetica-Bold
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -30
-A w -30
-A v -40
-A u -30
-A Y -110
-A W -60
-A V -80
-A U -50
-A T -90
-A Q -40
-A O -40
-A G -50
-A C -40
-B U -10
-B A -30
-D . -30
-D , -30
-D Y -70
-D W -40
-D V -40
-D A -40
-F . -100
-F , -100
-F a -20
-F A -80
-J u -20
-J . -20
-J , -20
-J A -20
-K y -40
-K u -30
-K o -35
-K e -15
-K O -30
-L y -30
-L ' -140
-L cq -140
-L rq -140
-L Y -120
-L W -80
-L V -110
-L T -90
-O . -40
-O , -40
-O Y -70
-O X -50
-O W -50
-O V -50
-O T -40
-O A -50
-P . -120
-P o -40
-P e -30
-P , -120
-P a -30
-P A -100
-Q . 20
-Q , 20
-Q U -10
-R Y -50
-R W -40
-R V -50
-R U -20
-R T -20
-R O -20
-T y -60
-T w -60
-T u -90
-T ; -40
-T r -80
-T . -80
-T o -80
-T - -120
-T hy -120
-T e -60
-T , -80
-T : -40
-T a -80
-T O -40
-T A -90
-U . -30
-U , -30
-U A -50
-V u -60
-V ; -40
-V . -120
-V o -90
-V - -80
-V hy -80
-V e -50
-V , -120
-V : -40
-V a -60
-V O -50
-V G -50
-V A -80
-W y -20
-W u -45
-W ; -10
-W . -80
-W o -60
-W - -40
-W hy -40
-W e -35
-W , -80
-W : -10
-W a -40
-W O -20
-W A -60
-Y u -100
-Y ; -50
-Y . -100
-Y o -100
-Y e -80
-Y , -100
-Y : -50
-Y a -90
-Y O -70
-Y A -110
-a y -20
-a w -15
-a v -15
-a g -10
-b y -20
-b v -20
-b u -20
-b l -10
-c y -10
-c l -20
-c k -20
-c h -10
-: u0020 -40
-, u0020 -40
-, ' -120
-, cq -120
-, rq -120
-d y -15
-d w -15
-d v -15
-d d -10
-e y -15
-e x -15
-e w -15
-e v -15
-e . 20
-e , 10
-f ' 30
-f cq 30
-f rq 30
-f . -10
-f o -20
-f e -10
-f , -10
-g g -10
-g e 10
-h y -20
-k o -15
-l y -15
-l w -15
-m y -30
-m u -20
-n y -20
-n v -40
-n u -10
-o y -20
-o x -30
-o w -15
-o v -20
-p y -15
-. u0020 -40
-. ' -120
-. cq -120
-. rq -120
-rq u0020 -80
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' u0020 -80
-cq u0020 -80
-' s -60
-cq s -60
-' r -40
-cq r -40
-' ' -46
-' cq -46
-cq ' -46
-cq cq -46
-' l -20
-cq l -20
-' d -80
-cq d -80
-r y 10
-r v 10
-r t 20
-r s -15
-r q -20
-r . -60
-r o -20
-r - -20
-r hy -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-; u0020 -40
-u0020 ` -60
-u0020 oq -60
-u0020 lq -80
-u0020 Y -120
-u0020 W -80
-u0020 V -80
-u0020 T -100
-v . -80
-v o -30
-v , -80
-v a -20
-w . -40
-w o -20
-w , -40
-x e -10
-y . -80
-y o -25
-y e -10
-y , -80
-y a -30
-z e 10
-charset
-ha 584,698 2 0 asciicircum
-ti 584,343 0 1 asciitilde
-vS 667,936,19 2 2 Scaron
-vZ 611,936 2 3 Zcaron
-vs 556,750,14 2 4 scaron
-vz 500,750 2 5 zcaron
-:Y 667,915 2 6 Ydieresis
-tm 1000,718 2 7 trademark
-aq 238,718 2 8 quotesingle
-space 278 0 32 space
-! 333,718 2 33 exclam
-" 474,718 2 34 quotedbl
-dq "
-# 556,698 2 35 numbersign
-sh "
-$ 556,775,115 2 36 dollar
-Do "
-% 889,710,19 2 37 percent
-& 722,718,19 2 38 ampersand
-' 278,718 2 39 quoteright
-cq "
-( 333,734,208 3 40 parenleft
-) 333,734,208 3 41 parenright
-* 389,718 2 42 asterisk
-+ 584,506 0 43 plus
-, 278,146,168 0 44 comma
-- 333,345 0 45 hyphen
-hy "
-. 278,146 0 46 period
-/ 278,737,19,33,33 2 47 slash
-sl "
-0 556,710,19 2 48 zero
-1 556,710 2 49 one
-2 556,710 2 50 two
-3 556,710,19 2 51 three
-4 556,710 2 52 four
-5 556,698,19 2 53 five
-6 556,710,19 2 54 six
-7 556,698 2 55 seven
-8 556,710,19 2 56 eight
-9 556,710,19 2 57 nine
-: 333,512 0 58 colon
-; 333,512,168 0 59 semicolon
-< 584,514,8 0 60 less
-= 584,419 0 61 equal
-> 584,514,8 0 62 greater
-? 611,727 2 63 question
-@ 975,737,19 2 64 at
-at "
-A 722,718 2 65 A
-B 722,718 2 66 B
-C 722,737,19 2 67 C
-D 722,718 2 68 D
-E 667,718 2 69 E
-F 611,718 2 70 F
-G 778,737,19 2 71 G
-H 722,718 2 72 H
-I 278,718 2 73 I
-J 556,718,18 2 74 J
-K 722,718 2 75 K
-L 611,718 2 76 L
-M 833,718 2 77 M
-N 722,718 2 78 N
-O 778,737,19 2 79 O
-P 667,718 2 80 P
-Q 778,737,52 2 81 Q
-R 722,718 2 82 R
-S 667,737,19 2 83 S
-T 611,718 2 84 T
-U 722,718,19 2 85 U
-V 667,718 2 86 V
-W 944,718 2 87 W
-X 667,718 2 88 X
-Y 667,718 2 89 Y
-Z 611,718 2 90 Z
-[ 333,722,196 2 91 bracketleft
-lB "
-\ 278,737,19,33,33 2 92 backslash
-rs "
-] 333,722,196 2 93 bracketright
-rB "
-a^ 333,750,0,10,10 2 94 circumflex
-^ "
-_ 556,0,125 0 95 underscore
-` 278,727 2 96 quoteleft
-oq "
-a 556,546,14 0 97 a
-b 611,718,14 2 98 b
-c 556,546,14 0 99 c
-d 611,718,14 2 100 d
-e 556,546,14 0 101 e
-f 333,727 2 102 f
-g 611,546,217 1 103 g
-h 611,718 2 104 h
-i 278,725 2 105 i
-j 278,725,214 3 106 j
-k 556,718,0,6 2 107 k
-l 278,718 2 108 l
-m 889,546 0 109 m
-n 611,546 0 110 n
-o 611,546,14 0 111 o
-p 611,546,207 1 112 p
-q 611,546,207 1 113 q
-r 389,546 0 114 r
-s 556,546,14 0 115 s
-t 333,676,6 2 116 t
-u 611,532,14 0 117 u
-v 556,532 0 118 v
-w 778,532 0 119 w
-x 556,532 0 120 x
-y 556,532,214 1 121 y
-z 500,532 0 122 z
-lC 389,722,196 2 123 braceleft
-{ "
-ba 280,737,19 2 124 bar
-| "
-rC 389,722,196 2 125 braceright
-} "
-a~ 333,737,0,17,17 2 126 tilde
-~ "
-bq 278,127,146 0 128 quotesinglbase
-Fo 556,484 0 129 guillemotleft
-Fc 556,484 0 130 guillemotright
-bu 350,524 0 131 bullet
-Fn 556,737,210,0,10 3 132 florin
-f/ 167,710,19,169,170 2 133 fraction
-%0 1000,710,19,3,3 2 134 perthousand
-dg 556,718,171 2 135 dagger
-dd 556,718,171 2 136 daggerdbl
-en 556,333 0 137 endash
-em 1000,333 0 138 emdash
-fi 611,727 2 140 fi
-fl 611,727 2 141 fl
-.i 278,532 0 144 dotlessi
-ga 333,750,0,0,23 2 146 grave
-a" 333,750,0,153 2 147 hungarumlaut
-a. 333,729 2 148 dotaccent
-ab 333,750,0,2,2 2 149 breve
-ah 333,750,0,10,10 2 150 caron
-ao 333,776 2 151 ring
-ho 333,0,228 1 152 ogonek
-lq 500,727 2 153 quotedblleft
-rq 500,718 2 154 quotedblright
-oe 944,546,14 0 155 oe
-/l 278,718,0,18,18 2 156 lslash
-Bq 500,127,146 0 157 quotedblbase
-OE 1000,737,19 2 158 OE
-/L 611,718,0,0,20 2 159 Lslash
-r! 333,532,186 0 161 exclamdown
-ct 556,628,118 0 162 cent
-Po 556,718,16 2 163 sterling
-Cs 556,636,0,3,3 0 164 currency
-Ye 556,698,0,9,9 2 165 yen
-bb 280,737,19 2 166 brokenbar
-sc 556,727,184 2 167 section
-ad 333,729 2 168 dieresis
-co 737,737,19,12,11 2 169 copyright
-Of 370,737 2 170 ordfeminine
-fo 333,484 0 171 guilsinglleft
-tno 584,419 0 172 logicalnot
-\- 584,309 0 173 minus
-rg 737,737,19,11,11 2 174 registered
-a- 333,678,0,6,6 2 175 macron
-de 400,712 2 176 degree
-t+- 584,506 0 177 plusminus
-S2 333,710 2 178 twosuperior
-S3 333,710 2 179 threesuperior
-aa 333,750,0,23 2 180 acute
-mc 611,532,207 1 181 mu
-ps 556,700,191,0,8 2 182 paragraph
-pc 278,334 0 183 periodcentered
-ac 333,0,228 1 184 cedilla
-S1 333,710 2 185 onesuperior
-Om 365,737 2 186 ordmasculine
-fc 333,484 0 187 guilsinglright
-14 834,710,19 2 188 onequarter
-12 834,710,19 2 189 onehalf
-34 834,710,19 2 190 threequarters
-r? 611,532,195 0 191 questiondown
-`A 722,936 2 192 Agrave
-'A 722,936 2 193 Aacute
-^A 722,936 2 194 Acircumflex
-~A 722,923 2 195 Atilde
-:A 722,915 2 196 Adieresis
-oA 722,962 2 197 Aring
-AE 1000,718 2 198 AE
-,C 722,737,228 3 199 Ccedilla
-`E 667,936 2 200 Egrave
-'E 667,936 2 201 Eacute
-^E 667,936 2 202 Ecircumflex
-:E 667,915 2 203 Edieresis
-`I 278,936,0,0,50 2 204 Igrave
-'I 278,936,0,51 2 205 Iacute
-^I 278,936,0,38,37 2 206 Icircumflex
-:I 278,915,0,22,21 2 207 Idieresis
--D 722,718,0,0,5 2 208 Eth
-~N 722,923 2 209 Ntilde
-`O 778,936,19 2 210 Ograve
-'O 778,936,19 2 211 Oacute
-^O 778,936,19 2 212 Ocircumflex
-~O 778,923,19 2 213 Otilde
-:O 778,915,19 2 214 Odieresis
-tmu 584,505 0 215 multiply
-/O 778,745,27 2 216 Oslash
-`U 722,936,19 2 217 Ugrave
-'U 722,936,19 2 218 Uacute
-^U 722,936,19 2 219 Ucircumflex
-:U 722,915,19 2 220 Udieresis
-'Y 667,936 2 221 Yacute
-TP 667,718 2 222 Thorn
-ss 611,731,14 2 223 germandbls
-`a 556,750,14 2 224 agrave
-'a 556,750,14 2 225 aacute
-^a 556,750,14 2 226 acircumflex
-~a 556,737,14 2 227 atilde
-:a 556,729,14 2 228 adieresis
-oa 556,776,14 2 229 aring
-ae 889,546,14 0 230 ae
-,c 556,546,228 1 231 ccedilla
-`e 556,750,14 2 232 egrave
-'e 556,750,14 2 233 eacute
-^e 556,750,14 2 234 ecircumflex
-:e 556,729,14 2 235 edieresis
-`i 278,750,0,0,50 2 236 igrave
-'i 278,750,0,51 2 237 iacute
-^i 278,750,0,38,37 2 238 icircumflex
-:i 278,729,0,22,21 2 239 idieresis
-Sd 611,737,14 2 240 eth
-~n 611,737 2 241 ntilde
-`o 611,750,14 2 242 ograve
-'o 611,750,14 2 243 oacute
-^o 611,750,14 2 244 ocircumflex
-~o 611,737,14 2 245 otilde
-:o 611,729,14 2 246 odieresis
-tdi 584,548,42 0 247 divide
-/o 611,560,29 0 248 oslash
-`u 611,750,14 2 249 ugrave
-'u 611,750,14 2 250 uacute
-^u 611,750,14 2 251 ucircumflex
-:u 611,729,14 2 252 udieresis
-'y 556,750,214 3 253 yacute
-Tp 611,718,208 3 254 thorn
-:y 556,729,214 3 255 ydieresis
-u2026 1000,146 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HBI b/contrib/groff/font/devps/HBI
deleted file mode 100644
index 72d587210309..000000000000
--- a/contrib/groff/font/devps/HBI
+++ /dev/null
@@ -1,482 +0,0 @@
-name HBI
-internalname Helvetica-BoldOblique
-slant 12
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -30
-A w -30
-A v -40
-A u -30
-A Y -110
-A W -60
-A V -80
-A U -50
-A T -90
-A Q -40
-A O -40
-A G -50
-A C -40
-B U -10
-B A -30
-D . -30
-D , -30
-D Y -70
-D W -40
-D V -40
-D A -40
-F . -100
-F , -100
-F a -20
-F A -80
-J u -20
-J . -20
-J , -20
-J A -20
-K y -40
-K u -30
-K o -35
-K e -15
-K O -30
-L y -30
-L ' -140
-L cq -140
-L rq -140
-L Y -120
-L W -80
-L V -110
-L T -90
-O . -40
-O , -40
-O Y -70
-O X -50
-O W -50
-O V -50
-O T -40
-O A -50
-P . -120
-P o -40
-P e -30
-P , -120
-P a -30
-P A -100
-Q . 20
-Q , 20
-Q U -10
-R Y -50
-R W -40
-R V -50
-R U -20
-R T -20
-R O -20
-T y -60
-T w -60
-T u -90
-T ; -40
-T r -80
-T . -80
-T o -80
-T - -120
-T hy -120
-T e -60
-T , -80
-T : -40
-T a -80
-T O -40
-T A -90
-U . -30
-U , -30
-U A -50
-V u -60
-V ; -40
-V . -120
-V o -90
-V - -80
-V hy -80
-V e -50
-V , -120
-V : -40
-V a -60
-V O -50
-V G -50
-V A -80
-W y -20
-W u -45
-W ; -10
-W . -80
-W o -60
-W - -40
-W hy -40
-W e -35
-W , -80
-W : -10
-W a -40
-W O -20
-W A -60
-Y u -100
-Y ; -50
-Y . -100
-Y o -100
-Y e -80
-Y , -100
-Y : -50
-Y a -90
-Y O -70
-Y A -110
-a y -20
-a w -15
-a v -15
-a g -10
-b y -20
-b v -20
-b u -20
-b l -10
-c y -10
-c l -20
-c k -20
-c h -10
-: u0020 -40
-, u0020 -40
-, ' -120
-, cq -120
-, rq -120
-d y -15
-d w -15
-d v -15
-d d -10
-e y -15
-e x -15
-e w -15
-e v -15
-e . 20
-e , 10
-f ' 30
-f cq 30
-f rq 30
-f . -10
-f o -20
-f e -10
-f , -10
-g g -10
-g e 10
-h y -20
-k o -15
-l y -15
-l w -15
-m y -30
-m u -20
-n y -20
-n v -40
-n u -10
-o y -20
-o x -30
-o w -15
-o v -20
-p y -15
-. u0020 -40
-. ' -120
-. cq -120
-. rq -120
-rq u0020 -80
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' u0020 -80
-cq u0020 -80
-' s -60
-cq s -60
-' r -40
-cq r -40
-' ' -46
-' cq -46
-cq ' -46
-cq cq -46
-' l -20
-cq l -20
-' d -80
-cq d -80
-r y 10
-r v 10
-r t 20
-r s -15
-r q -20
-r . -60
-r o -20
-r - -20
-r hy -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-; u0020 -40
-u0020 ` -60
-u0020 oq -60
-u0020 lq -80
-u0020 Y -120
-u0020 W -80
-u0020 V -80
-u0020 T -100
-v . -80
-v o -30
-v , -80
-v a -20
-w . -40
-w o -20
-w , -40
-x e -10
-y . -80
-y o -25
-y e -10
-y , -80
-y a -30
-z e 10
-charset
-ha 584,698,0,57,-81,57 2 0 asciicircum
-ti 584,343,0,43,-65,43 0 1 asciitilde
-vS 667,936,19,101,-31,90 2 2 Scaron
-vZ 611,936,0,176,25,90 2 3 Zcaron
-vs 556,750,14,108,-13,90 2 4 scaron
-vz 500,750,0,136,30,90 2 5 zcaron
-:Y 667,915,0,189,-118,90 2 6 Ydieresis
-tm 1000,718,0,159,-129,90 2 7 trademark
-aq 238,718,0,133,-115,90 2 8 quotesingle
-space 278 0 32 space
-! 333,718,0,114,-44,90 2 33 exclam
-" 474,718,0,105,-143,90 2 34 quotedbl
-dq "
-# 556,698,0,138,-10,90 2 35 numbersign
-sh "
-$ 556,775,115,116,-17,90 2 36 dollar
-Do "
-% 889,710,19,62,-86,62 2 37 percent
-& 722,718,19,60,-39,60 2 38 ampersand
-' 278,718,0,134,-117,90 2 39 quoteright
-cq "
-( 333,734,208,187,-26,90 3 40 parenleft
-) 333,734,208,86,75,86 3 41 parenright
-* 389,718,0,142,-96,90 2 42 asterisk
-+ 584,506,0,76,-32,76 0 43 plus
-, 278,146,168,17,22,17 0 44 comma
-- 333,345,0,96,-23,90 0 45 hyphen
-hy "
-. 278,146,0,17,-14,17 0 46 period
-/ 278,737,19,240,87,90 2 47 slash
-sl "
-0 556,710,19,111,-36,90 2 48 zero
-1 556,710,0,23,-123,23 2 49 one
-2 556,710,0,113,24,90 2 50 two
-3 556,710,19,102,-15,90 2 51 three
-4 556,710,0,92,-10,90 2 52 four
-5 556,698,19,130,-14,90 2 53 five
-6 556,710,19,113,-35,90 2 54 six
-7 556,698,0,170,-75,90 2 55 seven
-8 556,710,19,110,-19,90 2 56 eight
-9 556,710,19,109,-28,90 2 57 nine
-: 333,512,0,68,-42,68 0 58 colon
-; 333,512,168,68,-6,68 0 59 semicolon
-< 584,514,8,121,-32,90 0 60 less
-= 584,419,0,99,-8,90 0 61 equal
-> 584,514,8,75,14,75 0 62 greater
-? 611,727,0,110,-115,90 2 63 question
-@ 975,737,19,29,-136,29 2 64 at
-at "
-A 722,718,0,30,30,30 2 65 A
-B 722,718,0,92,-26,90 2 66 B
-C 722,737,19,117,-57,90 2 67 C
-D 722,718,0,105,-26,90 2 68 D
-E 667,718,0,140,-26,90 2 69 E
-F 611,718,0,179,-26,90 2 70 F
-G 778,737,19,89,-58,89 2 71 G
-H 722,718,0,132,-21,90 2 72 H
-I 278,718,0,139,-14,90 2 73 I
-J 556,718,18,131,-10,90 2 74 J
-K 722,718,0,186,-37,90 2 75 K
-L 611,718,0,50,-26,50 2 76 L
-M 833,718,0,135,-19,90 2 77 M
-N 722,718,0,135,-19,90 2 78 N
-O 778,737,19,95,-57,90 2 79 O
-P 667,718,0,121,-26,90 2 80 P
-Q 778,737,52,95,-57,90 2 81 Q
-R 722,718,0,106,-26,90 2 82 R
-S 667,737,19,101,-31,90 2 83 S
-T 611,718,0,190,-90,90 2 84 T
-U 722,718,19,132,-66,90 2 85 U
-V 667,718,0,184,-122,90 2 86 V
-W 944,718,0,188,-119,90 2 87 W
-X 667,718,0,174,36,90 2 88 X
-Y 667,718,0,189,-118,90 2 89 Y
-Z 611,718,0,176,25,90 2 90 Z
-[ 333,722,196,179,29,90 2 91 bracketleft
-lB "
-\ 278,737,19,79,-74,79 2 92 backslash
-rs "
-] 333,722,196,140,68,90 2 93 bracketright
-rB "
-a^ 333,750,0,188,-68,90 2 94 circumflex
-^ "
-_ 556,0,125,34,77,34 0 95 underscore
-` 278,727,0,133,-115,90 2 96 quoteleft
-oq "
-a 556,546,14,77,-5,77 0 97 a
-b 611,718,14,84,-11,84 2 98 b
-c 556,546,14,93,-29,90 0 99 c
-d 611,718,14,143,-32,90 2 100 d
-e 556,546,14,87,-20,87 0 101 e
-f 333,727,0,186,-37,90 2 102 f
-g 611,546,217,105,12,90 1 103 g
-h 611,718,0,68,-15,68 2 104 h
-i 278,725,0,135,-19,90 2 105 i
-j 278,725,214,135,92,90 3 106 j
-k 556,718,0,164,-19,90 2 107 k
-l 278,718,0,134,-19,90 2 108 l
-m 889,546,0,70,-14,70 0 109 m
-n 611,546,0,68,-15,68 0 110 n
-o 611,546,14,82,-32,82 0 111 o
-p 611,546,207,84,32,84 1 112 p
-q 611,546,207,104,-30,90 1 113 q
-r 389,546,0,150,-14,90 0 114 r
-s 556,546,14,78,-13,78 0 115 s
-t 333,676,6,139,-50,90 2 116 t
-u 611,532,14,97,-48,90 0 117 u
-v 556,532,0,150,-76,90 0 118 v
-w 778,532,0,154,-73,90 0 119 w
-x 556,532,0,142,35,90 0 120 x
-y 556,532,214,146,8,90 1 121 y
-z 500,532,0,133,30,90 0 122 z
-lC 389,722,196,179,-44,90 2 123 braceleft
-{ "
-ba 280,737,19,123,-30,90 2 124 bar
-| "
-rC 389,722,196,68,68,68 2 125 braceright
-} "
-a~ 333,737,0,224,-63,90 2 126 tilde
-~ "
-bq 278,127,146,8,9,8 0 128 quotesinglbase
-Fo 556,484,0,65,-85,65 0 129 guillemotleft
-Fc 556,484,0,34,-54,34 0 130 guillemotright
-bu 350,524,0,120,-33,90 0 131 bullet
-Fn 556,737,210,163,100,90 3 132 florin
-f/ 167,710,19,370,224,90 2 133 fraction
-%0 1000,710,19,88,-26,88 2 134 perthousand
-dg 556,718,171,120,-68,90 2 135 dagger
-dd 556,718,171,122,4,90 2 136 daggerdbl
-en 556,333,0,121,2,90 0 137 endash
-em 1000,333,0,121,2,90 0 138 emdash
-fi 611,727,0,135,-37,90 2 140 fi
-fl 611,727,0,134,-37,90 2 141 fl
-.i 278,532,0,94,-19,90 0 144 dotlessi
-ga 333,750,0,70,-86,70 2 146 grave
-a" 333,750,0,362,-87,90 2 147 hungarumlaut
-a. 333,729,0,102,-185,90 2 148 dotaccent
-ab 333,750,0,211,-106,90 2 149 breve
-ah 333,750,0,219,-99,90 2 150 caron
-ao 333,776,0,137,-150,90 2 151 ring
-ho 333,0,228,0,9 1 152 ogonek
-lq 500,727,0,138,-110,90 2 153 quotedblleft
-rq 500,718,0,139,-112,90 2 154 quotedblright
-oe 944,546,14,83,-32,83 0 155 oe
-/l 278,718,0,179,10,90 2 156 lslash
-Bq 500,127,146,13,14,13 0 157 quotedblbase
-OE 1000,737,19,164,-49,90 2 158 OE
-/L 611,718,0,50,16,50 2 159 Lslash
-r! 333,532,186,70,0,70 0 161 exclamdown
-ct 556,628,118,93,-29,90 0 162 cent
-Po 556,718,16,129,0,90 2 163 sterling
-Cs 556,636,0,174,23,90 0 164 currency
-Ye 556,698,0,207,-10,90 2 165 yen
-bb 280,737,19,123,-30,90 2 166 brokenbar
-sc 556,727,184,92,-11,90 2 167 section
-ad 333,729,0,199,-87,90 2 168 dieresis
-co 737,737,19,148,-6,90 2 169 copyright
-Of 370,737,0,145,-42,90 2 170 ordfeminine
-fo 333,484,0,70,-80,70 0 171 guilsinglleft
-tno 584,419,0,99,-55,90 0 172 logicalnot
-\- 584,309,0,76,-32,76 0 173 minus
-rg 737,737,19,147,-5,90 2 174 registered
-a- 333,678,0,200,-72,90 2 175 macron
-de 400,712,0,117,-125,90 2 176 degree
-t+- 584,506,0,91,10,90 0 177 plusminus
-S2 333,710,0,166,-19,90 2 178 twosuperior
-S3 333,710,0,158,-41,90 2 179 threesuperior
-aa 333,750,0,232,-186,90 2 180 acute
-mc 611,532,207,97,28,90 1 181 mu
-ps 556,700,191,182,-48,90 2 182 paragraph
-pc 278,334,0,48,-60,48 0 183 periodcentered
-ac 333,0,228,0,87 1 184 cedilla
-S1 333,710,0,105,-98,90 2 185 onesuperior
-Om 365,737,0,170,-42,90 2 186 ordmasculine
-fc 333,484,0,39,-49,39 0 187 guilsinglright
-14 834,710,19,22,-82,22 2 188 onequarter
-12 834,710,19,74,-82,74 2 189 onehalf
-34 834,710,19,55,-49,55 2 190 threequarters
-r? 611,532,195,0,-3 0 191 questiondown
-`A 722,936,0,30,30,30 2 192 Agrave
-'A 722,936,0,78,30,78 2 193 Aacute
-^A 722,936,0,34,30,34 2 194 Acircumflex
-~A 722,923,0,69,30,69 2 195 Atilde
-:A 722,915,0,44,30,44 2 196 Adieresis
-oA 722,962,0,30,30,30 2 197 Aring
-AE 1000,718,0,150,45,90 2 198 AE
-,C 722,737,228,117,-57,90 3 199 Ccedilla
-`E 667,936,0,140,-26,90 2 200 Egrave
-'E 667,936,0,140,-26,90 2 201 Eacute
-^E 667,936,0,140,-26,90 2 202 Ecircumflex
-:E 667,915,0,140,-26,90 2 203 Edieresis
-`I 278,936,0,139,-14,90 2 204 Igrave
-'I 278,936,0,300,-14,90 2 205 Iacute
-^I 278,936,0,256,-14,90 2 206 Icircumflex
-:I 278,915,0,266,-14,90 2 207 Idieresis
--D 722,718,0,105,-12,90 2 208 Eth
-~N 722,923,0,135,-19,90 2 209 Ntilde
-`O 778,936,19,95,-57,90 2 210 Ograve
-'O 778,936,19,95,-57,90 2 211 Oacute
-^O 778,936,19,95,-57,90 2 212 Ocircumflex
-~O 778,923,19,95,-57,90 2 213 Otilde
-:O 778,915,19,95,-57,90 2 214 Odieresis
-tmu 584,505,0,101,-7,90 0 215 multiply
-/O 778,745,27,166,15,90 2 216 Oslash
-`U 722,936,19,132,-66,90 2 217 Ugrave
-'U 722,936,19,132,-66,90 2 218 Uacute
-^U 722,936,19,132,-66,90 2 219 Ucircumflex
-:U 722,915,19,132,-66,90 2 220 Udieresis
-'Y 667,936,0,189,-118,90 2 221 Yacute
-TP 667,718,0,99,-26,90 2 222 Thorn
-ss 611,731,14,96,-19,90 2 223 germandbls
-`a 556,750,14,77,-5,77 2 224 agrave
-'a 556,750,14,121,-5,90 2 225 aacute
-^a 556,750,14,77,-5,77 2 226 acircumflex
-~a 556,737,14,113,-5,90 2 227 atilde
-:a 556,729,14,88,-5,88 2 228 adieresis
-oa 556,776,14,77,-5,77 2 229 aring
-ae 889,546,14,84,-6,84 0 230 ae
-,c 556,546,228,93,-29,90 1 231 ccedilla
-`e 556,750,14,87,-20,87 2 232 egrave
-'e 556,750,14,121,-20,90 2 233 eacute
-^e 556,750,14,87,-20,87 2 234 ecircumflex
-:e 556,729,14,88,-20,88 2 235 edieresis
-`i 278,750,0,98,-19,90 2 236 igrave
-'i 278,750,0,260,-19,90 2 237 iacute
-^i 278,750,0,216,-19,90 2 238 icircumflex
-:i 278,729,0,227,-19,90 2 239 idieresis
-Sd 611,737,14,109,-32,90 2 240 eth
-~n 611,737,0,85,-15,85 2 241 ntilde
-`o 611,750,14,82,-32,82 2 242 ograve
-'o 611,750,14,93,-32,90 2 243 oacute
-^o 611,750,14,82,-32,82 2 244 ocircumflex
-~o 611,737,14,85,-32,85 2 245 otilde
-:o 611,729,14,82,-32,82 2 246 odieresis
-tdi 584,548,42,76,-32,76 0 247 divide
-/o 611,560,29,140,28,90 0 248 oslash
-`u 611,750,14,97,-48,90 2 249 ugrave
-'u 611,750,14,97,-48,90 2 250 uacute
-^u 611,750,14,97,-48,90 2 251 ucircumflex
-:u 611,729,14,97,-48,90 2 252 udieresis
-'y 556,750,214,146,8,90 3 253 yacute
-Tp 611,718,208,84,32,84 3 254 thorn
-:y 556,729,214,146,8,90 3 255 ydieresis
-u2026 1000,146,0,0,-42 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HI b/contrib/groff/font/devps/HI
deleted file mode 100644
index 20055dfda838..000000000000
--- a/contrib/groff/font/devps/HI
+++ /dev/null
@@ -1,521 +0,0 @@
-name HI
-internalname Helvetica-Oblique
-slant 12
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -40
-A w -40
-A v -40
-A u -30
-A Y -100
-A W -50
-A V -70
-A U -50
-A T -120
-A Q -30
-A O -30
-A G -30
-A C -30
-B . -20
-B , -20
-B U -10
-C . -30
-C , -30
-D . -70
-D , -70
-D Y -90
-D W -40
-D V -70
-D A -40
-F r -45
-F . -150
-F o -30
-F e -30
-F , -150
-F a -50
-F A -80
-J u -20
-J . -30
-J , -30
-J a -20
-J A -20
-K y -50
-K u -30
-K o -40
-K e -40
-K O -50
-L y -30
-L ' -160
-L cq -160
-L rq -140
-L Y -140
-L W -70
-L V -110
-L T -110
-O . -40
-O , -40
-O Y -70
-O X -60
-O W -30
-O V -50
-O T -40
-O A -20
-P . -180
-P o -50
-P e -50
-P , -180
-P a -40
-P A -120
-Q U -10
-R Y -50
-R W -30
-R V -50
-R U -40
-R T -30
-R O -20
-S . -20
-S , -20
-T y -120
-T w -120
-T u -120
-T ; -20
-T r -120
-T . -120
-T o -120
-T - -140
-T hy -140
-T e -120
-T , -120
-T : -20
-T a -120
-T O -40
-T A -120
-U . -40
-U , -40
-U A -40
-V u -70
-V ; -40
-V . -125
-V o -80
-V - -80
-V hy -80
-V e -80
-V , -125
-V : -40
-V a -70
-V O -40
-V G -40
-V A -80
-W y -20
-W u -30
-W . -80
-W o -30
-W - -40
-W hy -40
-W e -30
-W , -80
-W a -40
-W O -20
-W A -50
-Y u -110
-Y ; -60
-Y . -140
-Y o -140
-Y i -20
-Y - -140
-Y hy -140
-Y e -140
-Y , -140
-Y : -60
-Y a -140
-Y O -85
-Y A -110
-a y -30
-a w -20
-a v -20
-b y -20
-b v -20
-b u -20
-b . -40
-b l -20
-b , -40
-b b -10
-c k -20
-c , -15
-: u0020 -50
-, ' -100
-, cq -100
-, rq -100
-e y -20
-e x -30
-e w -20
-e v -30
-e . -15
-e , -15
-f ' 50
-f cq 50
-f rq 60
-f . -30
-f o -30
-f e -30
-f .i -28
-f , -30
-f a -30
-g r -10
-h y -30
-k o -20
-k e -20
-m y -15
-m u -10
-n y -15
-n v -20
-n u -10
-o y -30
-o x -30
-o w -15
-o v -15
-o . -40
-o , -40
-/o z -55
-/o y -70
-/o x -85
-/o w -70
-/o v -70
-/o u -55
-/o t -55
-/o s -55
-/o r -55
-/o q -55
-/o . -95
-/o p -55
-/o o -55
-/o n -55
-/o m -55
-/o l -55
-/o k -55
-/o j -55
-/o i -55
-/o h -55
-/o g -55
-/o f -55
-/o e -55
-/o d -55
-/o , -95
-/o c -55
-/o b -55
-/o a -55
-p y -30
-p . -35
-p , -35
-. u0020 -60
-. ' -100
-. cq -100
-. rq -100
-rq u0020 -40
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' u0020 -70
-cq u0020 -70
-' s -50
-cq s -50
-' r -50
-cq r -50
-' ' -57
-' cq -57
-cq ' -57
-cq cq -57
-' d -50
-cq d -50
-r y 30
-r v 30
-r u 15
-r t 40
-r ; 30
-r . -50
-r p 30
-r n 25
-r m 25
-r l 15
-r k 15
-r i 15
-r , -50
-r : 30
-r a -10
-s w -30
-s . -15
-s , -15
-; u0020 -50
-u0020 ` -60
-u0020 oq -60
-u0020 lq -30
-u0020 Y -90
-u0020 W -40
-u0020 V -50
-u0020 T -50
-v . -80
-v o -25
-v e -25
-v , -80
-v a -25
-w . -60
-w o -10
-w e -10
-w , -60
-w a -15
-x e -30
-y . -100
-y o -20
-y e -20
-y , -100
-y a -20
-z o -15
-z e -15
-charset
-ha 469,688,0,120,8,89 2 0 asciicircum
-ti 584,326,0,46,-61,46 0 1 asciitilde
-vS 667,929,19,96,-40,89 2 2 Scaron
-vZ 611,929,0,180,27,89 2 3 Zcaron
-vs 500,734,15,102,-13,89 2 4 scaron
-vz 500,734,0,121,19,89 2 5 zcaron
-:Y 667,901,0,189,-117,89 2 6 Ydieresis
-tm 1000,718,0,106,-136,89 2 7 trademark
-aq 191,718,0,144,-107,89 2 8 quotesingle
-space 278 0 32 space
-! 278,718,0,112,-40,89 2 33 exclam
-" 355,718,0,133,-118,89 2 34 quotedbl
-dq "
-# 556,688,0,125,-23,89 2 35 numbersign
-sh "
-$ 556,775,115,111,-19,89 2 36 dollar
-Do "
-% 889,703,19,50,-97,50 2 37 percent
-& 667,718,15,30,-27,30 2 38 ampersand
-' 222,718,0,138,-101,89 2 39 quoteright
-cq "
-( 333,733,207,171,-58,89 3 40 parenleft
-) 333,733,207,54,59,54 3 41 parenright
-* 389,718,0,136,-115,89 2 42 asterisk
-+ 584,505,0,72,-35,72 0 43 plus
-, 278,106,147,0,-6 0 44 comma
-- 333,322,0,74,-43,74 0 45 hyphen
-hy "
-. 278,106,0,0,-37 0 46 period
-/ 278,737,19,224,71,89 2 47 slash
-sl "
-0 556,703,19,102,-43,89 2 48 zero
-1 556,703,0,2,-157,2 2 49 one
-2 556,703,0,111,24,89 2 50 two
-3 556,703,19,104,-25,89 2 51 three
-4 556,703,0,70,-11,70 2 52 four
-5 556,688,19,115,-18,89 2 53 five
-6 556,703,19,109,-41,89 2 54 six
-7 556,688,0,163,-87,89 2 55 seven
-8 556,703,19,101,-24,89 2 56 eight
-9 556,703,19,103,-32,89 2 57 nine
-: 278,516,0,73,-37,73 0 58 colon
-; 278,516,147,73,-6,73 0 59 semicolon
-< 584,495,0,107,-44,89 0 60 less
-= 584,390,0,94,-13,89 0 61 equal
-> 584,495,0,63,0,63 0 62 greater
-? 556,727,0,104,-111,89 2 63 question
-@ 1015,737,19,0,-165 2 64 at
-at "
-A 667,718,0,37,36,37 2 65 A
-B 667,718,0,95,-24,89 2 66 B
-C 722,737,19,110,-58,89 2 67 C
-D 722,718,0,92,-31,89 2 68 D
-E 667,718,0,145,-36,89 2 69 E
-F 611,718,0,175,-36,89 2 70 F
-G 778,737,19,71,-61,71 2 71 G
-H 722,718,0,127,-27,89 2 72 H
-I 278,718,0,113,-41,89 2 73 I
-J 500,718,19,131,3,89 2 74 J
-K 667,718,0,191,-26,89 2 75 K
-L 556,718,0,49,-26,49 2 76 L
-M 833,718,0,131,-23,89 2 77 M
-N 722,718,0,127,-26,89 2 78 N
-O 778,737,19,98,-55,89 2 79 O
-P 667,718,0,120,-36,89 2 80 P
-Q 778,737,56,98,-55,89 2 81 Q
-R 722,718,0,101,-38,89 2 82 R
-S 667,737,19,96,-40,89 2 83 S
-T 611,718,0,189,-98,89 2 84 T
-U 722,718,19,125,-73,89 2 85 U
-V 667,718,0,183,-123,89 2 86 V
-W 944,718,0,187,-119,89 2 87 W
-X 667,718,0,173,31,89 2 88 X
-Y 667,718,0,189,-117,89 2 89 Y
-Z 611,718,0,180,27,89 2 90 Z
-[ 278,722,196,175,29,89 2 91 bracketleft
-lB "
-\ 278,737,19,63,-90,63 2 92 backslash
-rs "
-] 278,722,196,140,64,89 2 93 bracketright
-rB "
-a^ 333,734,0,155,-97,89 2 94 circumflex
-^ "
-_ 556,0,125,34,77,34 0 95 underscore
-` 222,725,0,151,-115,89 2 96 quoteleft
-oq "
-a 556,538,15,53,-11,53 0 97 a
-b 556,718,15,78,-8,78 2 98 b
-c 500,538,15,103,-24,89 0 99 c
-d 556,718,15,146,-34,89 2 100 d
-e 556,538,15,72,-34,72 0 101 e
-f 278,728,0,188,-36,89 2 102 f
-g 556,538,220,104,8,89 1 103 g
-h 556,718,0,67,-15,67 2 104 h
-i 222,718,0,136,-17,89 2 105 i
-j 222,718,210,136,110,89 3 106 j
-k 500,718,0,150,-17,89 2 107 k
-l 222,718,0,136,-17,89 2 108 l
-m 833,538,0,69,-15,69 0 109 m
-n 556,538,0,67,-15,67 0 110 n
-o 556,538,14,79,-33,79 0 111 o
-p 556,538,207,78,36,78 1 112 p
-q 556,538,207,99,-34,89 1 113 q
-r 333,538,0,163,-27,89 0 114 r
-s 500,538,15,79,-13,79 0 115 s
-t 278,669,7,140,-52,89 2 116 t
-u 556,523,15,94,-44,89 0 117 u
-v 500,523,0,153,-69,89 0 118 v
-w 722,523,0,148,-75,89 0 119 w
-x 500,523,0,144,39,89 0 120 x
-y 500,523,214,150,35,89 1 121 y
-z 500,523,0,121,19,89 0 122 z
-lC 334,722,196,161,-42,89 2 123 braceleft
-{ "
-ba 260,737,19,114,-40,89 2 124 bar
-| "
-rC 334,722,196,70,50,70 2 125 braceright
-} "
-a~ 333,722,0,207,-75,89 2 126 tilde
-~ "
-bq 222,106,149,8,29,8 0 128 quotesinglbase
-Fo 556,446,0,48,-96,48 0 129 guillemotleft
-Fc 556,446,0,22,-70,22 0 130 guillemotright
-bu 350,517,0,113,-41,89 0 131 bullet
-Fn 556,737,207,148,102,89 3 132 florin
-f/ 167,703,19,365,220,89 2 133 fraction
-%0 1000,703,19,79,-38,79 2 134 perthousand
-dg 556,718,159,116,-85,89 2 135 dagger
-dd 556,718,159,117,-2,89 2 136 daggerdbl
-en 556,313,0,117,-1,89 0 137 endash
-em 1000,313,0,117,-1,89 0 138 emdash
-fi 500,728,0,137,-36,89 2 140 fi
-fl 500,728,0,135,-36,89 2 141 fl
-.i 278,523,0,66,-45,66 0 144 dotlessi
-ga 333,734,0,54,-120,54 2 146 grave
-a" 333,734,0,282,-107,89 2 147 hungarumlaut
-a. 333,706,0,79,-199,79 2 148 dotaccent
-ab 333,731,0,193,-117,89 2 149 breve
-ah 333,734,0,185,-127,89 2 150 caron
-ao 333,756,0,119,-164,89 2 151 ring
-ho 333,0,225,0,7 1 152 ogonek
-lq 333,725,0,178,-88,89 2 153 quotedblleft
-rq 333,718,0,165,-74,89 2 154 quotedblright
-oe 944,538,15,70,-33,70 0 155 oe
-/l 222,718,0,175,9,89 2 156 lslash
-Bq 333,106,149,35,56,35 0 157 quotedblbase
-OE 1000,737,19,166,-48,89 2 158 OE
-/L 556,718,0,49,9,49 2 159 Lslash
-r! 333,523,195,43,-27,43 0 161 exclamdown
-ct 556,623,115,78,-45,78 0 162 cent
-Po 556,718,16,128,1,89 2 163 sterling
-Cs 556,603,0,140,-10,89 0 164 currency
-Ye 556,688,0,193,-31,89 2 165 yen
-bb 260,737,19,114,-40,89 2 166 brokenbar
-sc 556,737,191,78,-26,78 2 167 section
-ad 333,706,0,160,-118,89 2 168 dieresis
-co 737,737,19,150,-4,89 2 169 copyright
-Of 370,737,0,129,-50,89 2 170 ordfeminine
-fo 333,446,0,57,-87,57 0 171 guilsinglleft
-tno 584,390,0,94,-56,89 0 172 logicalnot
-\- 584,289,0,72,-35,72 0 173 minus
-rg 737,737,19,150,-4,89 2 174 registered
-a- 333,684,0,185,-93,89 2 175 macron
-de 400,703,0,118,-119,89 2 176 degree
-t+- 584,506,0,84,11,84 0 177 plusminus
-S2 333,703,0,166,-14,89 2 178 twosuperior
-S3 333,703,0,153,-40,89 2 179 threesuperior
-aa 333,734,0,192,-198,89 2 180 acute
-mc 556,523,207,94,26,89 1 181 mu
-ps 537,718,173,163,-76,89 2 182 paragraph
-pc 278,315,0,29,-79,29 0 183 periodcentered
-ac 333,0,225,0,48 1 184 cedilla
-S1 333,703,0,88,-116,88 2 185 onesuperior
-Om 365,737,0,153,-50,89 2 186 ordmasculine
-fc 333,446,0,31,-61,31 0 187 guilsinglright
-14 834,703,19,18,-100,18 2 188 onequarter
-12 834,703,19,55,-64,55 2 189 onehalf
-34 834,703,19,77,-80,77 2 190 threequarters
-r? 611,525,201,0,-35 0 191 questiondown
-`A 667,929,0,37,36,37 2 192 Agrave
-'A 667,929,0,66,36,66 2 193 Aacute
-^A 667,929,0,37,36,37 2 194 Acircumflex
-~A 667,917,0,82,36,82 2 195 Atilde
-:A 667,901,0,37,36,37 2 196 Adieresis
-oA 667,931,0,37,36,37 2 197 Aring
-AE 1000,718,0,147,42,89 2 198 AE
-,C 722,737,225,110,-58,89 3 199 Ccedilla
-`E 667,929,0,145,-36,89 2 200 Egrave
-'E 667,929,0,145,-36,89 2 201 Eacute
-^E 667,929,0,145,-36,89 2 202 Ecircumflex
-:E 667,901,0,145,-36,89 2 203 Edieresis
-`I 278,929,0,123,-41,89 2 204 Igrave
-'I 278,929,0,261,-41,89 2 205 Iacute
-^I 278,929,0,224,-41,89 2 206 Icircumflex
-:I 278,901,0,230,-41,89 2 207 Idieresis
--D 722,718,0,92,-19,89 2 208 Eth
-~N 722,917,0,127,-26,89 2 209 Ntilde
-`O 778,929,19,98,-55,89 2 210 Ograve
-'O 778,929,19,98,-55,89 2 211 Oacute
-^O 778,929,19,98,-55,89 2 212 Ocircumflex
-~O 778,917,19,98,-55,89 2 213 Otilde
-:O 778,901,19,98,-55,89 2 214 Odieresis
-tmu 584,506,0,108,0,89 0 215 multiply
-/O 778,737,19,162,7,89 2 216 Oslash
-`U 722,929,19,125,-73,89 2 217 Ugrave
-'U 722,929,19,125,-73,89 2 218 Uacute
-^U 722,929,19,125,-73,89 2 219 Ucircumflex
-:U 722,901,19,125,-73,89 2 220 Udieresis
-'Y 667,929,0,189,-117,89 2 221 Yacute
-TP 667,718,0,95,-36,89 2 222 Thorn
-ss 611,728,15,97,-17,89 2 223 germandbls
-`a 556,734,15,53,-11,53 2 224 agrave
-'a 556,734,15,81,-11,81 2 225 aacute
-^a 556,734,15,53,-11,53 2 226 acircumflex
-~a 556,722,15,86,-11,86 2 227 atilde
-:a 556,706,15,53,-11,53 2 228 adieresis
-oa 556,756,15,53,-11,53 2 229 aring
-ae 889,538,15,70,-11,70 0 230 ae
-,c 500,538,225,103,-24,89 1 231 ccedilla
-`e 556,734,15,72,-34,72 2 232 egrave
-'e 556,734,15,81,-34,81 2 233 eacute
-^e 556,734,15,72,-34,72 2 234 ecircumflex
-:e 556,706,15,72,-34,72 2 235 edieresis
-`i 278,734,0,82,-45,82 2 236 igrave
-'i 278,734,0,220,-45,89 2 237 iacute
-^i 278,734,0,183,-45,89 2 238 icircumflex
-:i 278,706,0,188,-45,89 2 239 idieresis
-Sd 556,737,15,111,-31,89 2 240 eth
-~n 556,722,0,86,-15,86 2 241 ntilde
-`o 556,734,14,79,-33,79 2 242 ograve
-'o 556,734,14,81,-33,81 2 243 oacute
-^o 556,734,14,79,-33,79 2 244 ocircumflex
-~o 556,722,14,96,-33,89 2 245 otilde
-:o 556,706,14,79,-33,79 2 246 odieresis
-tdi 584,524,19,72,-35,72 0 247 divide
-/o 611,545,22,86,21,86 0 248 oslash
-`u 556,734,15,94,-44,89 2 249 ugrave
-'u 556,734,15,94,-44,89 2 250 uacute
-^u 556,734,15,94,-44,89 2 251 ucircumflex
-:u 556,706,15,94,-44,89 2 252 udieresis
-'y 500,734,214,150,35,89 3 253 yacute
-Tp 556,718,207,78,36,78 3 254 thorn
-:y 500,706,214,150,35,89 3 255 ydieresis
-u2026 1000,106,0,0,-65 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HNB b/contrib/groff/font/devps/HNB
deleted file mode 100644
index 5e86bb49010f..000000000000
--- a/contrib/groff/font/devps/HNB
+++ /dev/null
@@ -1,481 +0,0 @@
-name HNB
-internalname Helvetica-Narrow-Bold
-spacewidth 228
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -24
-A w -24
-A v -32
-A u -24
-A Y -89
-A W -48
-A V -65
-A U -40
-A T -73
-A Q -32
-A O -32
-A G -40
-A C -32
-B U -7
-B A -24
-D . -24
-D , -24
-D Y -56
-D W -32
-D V -32
-D A -32
-F . -81
-F , -81
-F a -15
-F A -65
-J u -15
-J . -15
-J , -15
-J A -15
-K y -32
-K u -24
-K o -28
-K e -11
-K O -24
-L y -24
-L ' -114
-L cq -114
-L rq -114
-L Y -97
-L W -65
-L V -89
-L T -73
-O . -32
-O , -32
-O Y -56
-O X -40
-O W -40
-O V -40
-O T -32
-O A -40
-P . -97
-P o -32
-P e -24
-P , -97
-P a -24
-P A -81
-Q . 16
-Q , 16
-Q U -7
-R Y -40
-R W -32
-R V -40
-R U -15
-R T -15
-R O -15
-T y -48
-T w -48
-T u -73
-T ; -32
-T r -65
-T . -65
-T o -65
-T - -97
-T hy -97
-T e -48
-T , -65
-T : -32
-T a -65
-T O -32
-T A -73
-U . -24
-U , -24
-U A -40
-V u -48
-V ; -32
-V . -97
-V o -73
-V - -65
-V hy -65
-V e -40
-V , -97
-V : -32
-V a -48
-V O -40
-V G -40
-V A -65
-W y -15
-W u -36
-W ; -7
-W . -65
-W o -48
-W - -32
-W hy -32
-W e -28
-W , -65
-W : -7
-W a -32
-W O -15
-W A -48
-Y u -81
-Y ; -40
-Y . -81
-Y o -81
-Y e -65
-Y , -81
-Y : -40
-Y a -73
-Y O -56
-Y A -89
-a y -15
-a w -11
-a v -11
-a g -7
-b y -15
-b v -15
-b u -15
-b l -7
-c y -7
-c l -15
-c k -15
-c h -7
-: u0020 -32
-, u0020 -32
-, ' -97
-, cq -97
-, rq -97
-d y -11
-d w -11
-d v -11
-d d -7
-e y -11
-e x -11
-e w -11
-e v -11
-e . 16
-e , 8
-f ' 25
-f cq 25
-f rq 25
-f . -7
-f o -15
-f e -7
-f , -7
-g g -7
-g e 8
-h y -15
-k o -11
-l y -11
-l w -11
-m y -24
-m u -15
-n y -15
-n v -32
-n u -7
-o y -15
-o x -24
-o w -11
-o v -15
-p y -11
-. u0020 -32
-. ' -97
-. cq -97
-. rq -97
-rq u0020 -65
-` ` -37
-` oq -37
-oq ` -37
-oq oq -37
-' v -15
-cq v -15
-' u0020 -65
-cq u0020 -65
-' s -48
-cq s -48
-' r -32
-cq r -32
-' ' -37
-' cq -37
-cq ' -37
-cq cq -37
-' l -15
-cq l -15
-' d -65
-cq d -65
-r y 8
-r v 8
-r t 16
-r s -11
-r q -15
-r . -48
-r o -15
-r - -15
-r hy -15
-r g -11
-r d -15
-r , -48
-r c -15
-s w -11
-; u0020 -32
-u0020 ` -48
-u0020 oq -48
-u0020 lq -65
-u0020 Y -97
-u0020 W -65
-u0020 V -65
-u0020 T -81
-v . -65
-v o -24
-v , -65
-v a -15
-w . -32
-w o -15
-w , -32
-x e -7
-y . -65
-y o -20
-y e -7
-y , -65
-y a -24
-z e 8
-charset
-ha 479,698 2 0 asciicircum
-ti 479,343 0 1 asciitilde
-vS 547,936,19 2 2 Scaron
-vZ 501,936 2 3 Zcaron
-vs 456,750,14 2 4 scaron
-vz 410,750 2 5 zcaron
-:Y 547,915 2 6 Ydieresis
-tm 820,718 2 7 trademark
-aq 195,718 2 8 quotesingle
-space 228 0 32 space
-! 273,718 2 33 exclam
-" 389,718 2 34 quotedbl
-dq "
-# 456,698 2 35 numbersign
-sh "
-$ 456,775,115 2 36 dollar
-Do "
-% 729,710,19 2 37 percent
-& 592,718,19 2 38 ampersand
-' 228,718 2 39 quoteright
-cq "
-( 273,734,208 3 40 parenleft
-) 273,734,208 3 41 parenright
-* 319,718 2 42 asterisk
-+ 479,506 0 43 plus
-, 228,146,168 0 44 comma
-- 273,345 0 45 hyphen
-hy "
-. 228,146 0 46 period
-/ 228,737,19,27,27 2 47 slash
-sl "
-0 456,710,19 2 48 zero
-1 456,710 2 49 one
-2 456,710 2 50 two
-3 456,710,19 2 51 three
-4 456,710 2 52 four
-5 456,698,19 2 53 five
-6 456,710,19 2 54 six
-7 456,698 2 55 seven
-8 456,710,19 2 56 eight
-9 456,710,19 2 57 nine
-: 273,512 0 58 colon
-; 273,512,168 0 59 semicolon
-< 479,514,8 0 60 less
-= 479,419 0 61 equal
-> 479,514,8 0 62 greater
-? 501,727 2 63 question
-@ 800,737,19 2 64 at
-at "
-A 592,718 2 65 A
-B 592,718 2 66 B
-C 592,737,19 2 67 C
-D 592,718 2 68 D
-E 547,718 2 69 E
-F 501,718 2 70 F
-G 638,737,19 2 71 G
-H 592,718 2 72 H
-I 228,718 2 73 I
-J 456,718,18 2 74 J
-K 592,718 2 75 K
-L 501,718 2 76 L
-M 683,718 2 77 M
-N 592,718 2 78 N
-O 638,737,19 2 79 O
-P 547,718 2 80 P
-Q 638,737,52 2 81 Q
-R 592,718 2 82 R
-S 547,737,19 2 83 S
-T 501,718 2 84 T
-U 592,718,19 2 85 U
-V 547,718 2 86 V
-W 774,718 2 87 W
-X 547,718 2 88 X
-Y 547,718 2 89 Y
-Z 501,718 2 90 Z
-[ 273,722,196 2 91 bracketleft
-lB "
-\ 228,737,19,27,27 2 92 backslash
-rs "
-] 273,722,196 2 93 bracketright
-rB "
-a^ 273,750,0,8,8 2 94 circumflex
-^ "
-_ 456,0,125 0 95 underscore
-` 228,727 2 96 quoteleft
-oq "
-a 456,546,14 0 97 a
-b 501,718,14 2 98 b
-c 456,546,14 0 99 c
-d 501,718,14 2 100 d
-e 456,546,14 0 101 e
-f 273,727 2 102 f
-g 501,546,217 1 103 g
-h 501,718 2 104 h
-i 228,725 2 105 i
-j 228,725,214 3 106 j
-k 456,718,0,5 2 107 k
-l 228,718 2 108 l
-m 729,546 0 109 m
-n 501,546 0 110 n
-o 501,546,14 0 111 o
-p 501,546,207 1 112 p
-q 501,546,207 1 113 q
-r 319,546 0 114 r
-s 456,546,14 0 115 s
-t 273,676,6 2 116 t
-u 501,532,14 0 117 u
-v 456,532 0 118 v
-w 638,532 0 119 w
-x 456,532 0 120 x
-y 456,532,214 1 121 y
-z 410,532 0 122 z
-lC 319,722,196 2 123 braceleft
-{ "
-ba 230,737,19 2 124 bar
-| "
-rC 319,722,196 2 125 braceright
-} "
-a~ 273,737,0,14,14 2 126 tilde
-~ "
-bq 228,127,146 0 128 quotesinglbase
-Fo 456,484 0 129 guillemotleft
-Fc 456,484 0 130 guillemotright
-bu 287,524 0 131 bullet
-Fn 456,737,210,0,8 3 132 florin
-f/ 137,710,19,139,139 2 133 fraction
-%0 820,710,19,2,2 2 134 perthousand
-dg 456,718,171 2 135 dagger
-dd 456,718,171 2 136 daggerdbl
-en 456,333 0 137 endash
-em 820,333 0 138 emdash
-fi 501,727 2 140 fi
-fl 501,727 2 141 fl
-.i 228,532 0 144 dotlessi
-ga 273,750,0,0,19 2 146 grave
-a" 273,750,0,126 2 147 hungarumlaut
-a. 273,729 2 148 dotaccent
-ab 273,750,0,2,2 2 149 breve
-ah 273,750,0,8,8 2 150 caron
-ao 273,776 2 151 ring
-ho 273,0,228 1 152 ogonek
-lq 410,727 2 153 quotedblleft
-rq 410,718 2 154 quotedblright
-oe 774,546,14 0 155 oe
-/l 228,718,0,15,15 2 156 lslash
-Bq 410,127,146 0 157 quotedblbase
-OE 820,737,19 2 158 OE
-/L 501,718,0,0,16 2 159 Lslash
-r! 273,532,186 0 161 exclamdown
-ct 456,628,118 0 162 cent
-Po 456,718,16 2 163 sterling
-Cs 456,636,0,2,2 0 164 currency
-Ye 456,698,0,7,7 2 165 yen
-bb 230,737,19 2 166 brokenbar
-sc 456,727,184 2 167 section
-ad 273,729 2 168 dieresis
-co 604,737,19,10,9 2 169 copyright
-Of 303,737 2 170 ordfeminine
-fo 273,484 0 171 guilsinglleft
-tno 479,419 0 172 logicalnot
-\- 479,309 0 173 minus
-rg 604,737,19,9,9 2 174 registered
-a- 273,678,0,5,5 2 175 macron
-de 328,712 2 176 degree
-t+- 479,506 0 177 plusminus
-S2 273,710 2 178 twosuperior
-S3 273,710 2 179 threesuperior
-aa 273,750,0,19 2 180 acute
-mc 501,532,207 1 181 mu
-ps 456,700,191,0,7 2 182 paragraph
-pc 228,334 0 183 periodcentered
-ac 273,0,228 1 184 cedilla
-S1 273,710 2 185 onesuperior
-Om 299,737 2 186 ordmasculine
-fc 273,484 0 187 guilsinglright
-14 684,710,19 2 188 onequarter
-12 684,710,19 2 189 onehalf
-34 684,710,19 2 190 threequarters
-r? 501,532,195 0 191 questiondown
-`A 592,936 2 192 Agrave
-'A 592,936 2 193 Aacute
-^A 592,936 2 194 Acircumflex
-~A 592,923 2 195 Atilde
-:A 592,915 2 196 Adieresis
-oA 592,962 2 197 Aring
-AE 820,718 2 198 AE
-,C 592,737,228 3 199 Ccedilla
-`E 547,936 2 200 Egrave
-'E 547,936 2 201 Eacute
-^E 547,936 2 202 Ecircumflex
-:E 547,915 2 203 Edieresis
-`I 228,936,0,0,41 2 204 Igrave
-'I 228,936,0,42 2 205 Iacute
-^I 228,936,0,31,30 2 206 Icircumflex
-:I 228,915,0,18,17 2 207 Idieresis
--D 592,718,0,0,4 2 208 Eth
-~N 592,923 2 209 Ntilde
-`O 638,936,19 2 210 Ograve
-'O 638,936,19 2 211 Oacute
-^O 638,936,19 2 212 Ocircumflex
-~O 638,923,19 2 213 Otilde
-:O 638,915,19 2 214 Odieresis
-tmu 479,505 0 215 multiply
-/O 638,745,27 2 216 Oslash
-`U 592,936,19 2 217 Ugrave
-'U 592,936,19 2 218 Uacute
-^U 592,936,19 2 219 Ucircumflex
-:U 592,915,19 2 220 Udieresis
-'Y 547,936 2 221 Yacute
-TP 547,718 2 222 Thorn
-ss 501,731,14 2 223 germandbls
-`a 456,750,14 2 224 agrave
-'a 456,750,14 2 225 aacute
-^a 456,750,14 2 226 acircumflex
-~a 456,737,14 2 227 atilde
-:a 456,729,14 2 228 adieresis
-oa 456,776,14 2 229 aring
-ae 729,546,14 0 230 ae
-,c 456,546,228 1 231 ccedilla
-`e 456,750,14 2 232 egrave
-'e 456,750,14 2 233 eacute
-^e 456,750,14 2 234 ecircumflex
-:e 456,729,14 2 235 edieresis
-`i 228,750,0,0,41 2 236 igrave
-'i 228,750,0,42 2 237 iacute
-^i 228,750,0,31,30 2 238 icircumflex
-:i 228,729,0,18,17 2 239 idieresis
-Sd 501,737,14 2 240 eth
-~n 501,737 2 241 ntilde
-`o 501,750,14 2 242 ograve
-'o 501,750,14 2 243 oacute
-^o 501,750,14 2 244 ocircumflex
-~o 501,737,14 2 245 otilde
-:o 501,729,14 2 246 odieresis
-tdi 479,548,42 0 247 divide
-/o 501,560,29 0 248 oslash
-`u 501,750,14 2 249 ugrave
-'u 501,750,14 2 250 uacute
-^u 501,750,14 2 251 ucircumflex
-:u 501,729,14 2 252 udieresis
-'y 456,750,214 3 253 yacute
-Tp 501,718,208 3 254 thorn
-:y 456,729,214 3 255 ydieresis
-u2026 820,146 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HNBI b/contrib/groff/font/devps/HNBI
deleted file mode 100644
index 74414b44cf64..000000000000
--- a/contrib/groff/font/devps/HNBI
+++ /dev/null
@@ -1,482 +0,0 @@
-name HNBI
-internalname Helvetica-Narrow-BoldOblique
-slant 12
-spacewidth 228
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -30
-A w -30
-A v -40
-A u -30
-A Y -110
-A W -60
-A V -80
-A U -50
-A T -90
-A Q -40
-A O -40
-A G -50
-A C -40
-B U -10
-B A -30
-D . -30
-D , -30
-D Y -70
-D W -40
-D V -40
-D A -40
-F . -100
-F , -100
-F a -20
-F A -80
-J u -20
-J . -20
-J , -20
-J A -20
-K y -40
-K u -30
-K o -35
-K e -15
-K O -30
-L y -30
-L ' -140
-L cq -140
-L rq -140
-L Y -120
-L W -80
-L V -110
-L T -90
-O . -40
-O , -40
-O Y -70
-O X -50
-O W -50
-O V -50
-O T -40
-O A -50
-P . -120
-P o -40
-P e -30
-P , -120
-P a -30
-P A -100
-Q . 20
-Q , 20
-Q U -10
-R Y -50
-R W -40
-R V -50
-R U -20
-R T -20
-R O -20
-T y -60
-T w -60
-T u -90
-T ; -40
-T r -80
-T . -80
-T o -80
-T - -120
-T hy -120
-T e -60
-T , -80
-T : -40
-T a -80
-T O -40
-T A -90
-U . -30
-U , -30
-U A -50
-V u -60
-V ; -40
-V . -120
-V o -90
-V - -80
-V hy -80
-V e -50
-V , -120
-V : -40
-V a -60
-V O -50
-V G -50
-V A -80
-W y -20
-W u -45
-W ; -10
-W . -80
-W o -60
-W - -40
-W hy -40
-W e -35
-W , -80
-W : -10
-W a -40
-W O -20
-W A -60
-Y u -100
-Y ; -50
-Y . -100
-Y o -100
-Y e -80
-Y , -100
-Y : -50
-Y a -90
-Y O -70
-Y A -110
-a y -20
-a w -15
-a v -15
-a g -10
-b y -20
-b v -20
-b u -20
-b l -10
-c y -10
-c l -20
-c k -20
-c h -10
-: u0020 -40
-, u0020 -40
-, ' -120
-, cq -120
-, rq -120
-d y -15
-d w -15
-d v -15
-d d -10
-e y -15
-e x -15
-e w -15
-e v -15
-e . 20
-e , 10
-f ' 30
-f cq 30
-f rq 30
-f . -10
-f o -20
-f e -10
-f , -10
-g g -10
-g e 10
-h y -20
-k o -15
-l y -15
-l w -15
-m y -30
-m u -20
-n y -20
-n v -40
-n u -10
-o y -20
-o x -30
-o w -15
-o v -20
-p y -15
-. u0020 -40
-. ' -120
-. cq -120
-. rq -120
-rq u0020 -80
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' u0020 -80
-cq u0020 -80
-' s -60
-cq s -60
-' r -40
-cq r -40
-' ' -46
-' cq -46
-cq ' -46
-cq cq -46
-' l -20
-cq l -20
-' d -80
-cq d -80
-r y 10
-r v 10
-r t 20
-r s -15
-r q -20
-r . -60
-r o -20
-r - -20
-r hy -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-; u0020 -40
-u0020 ` -60
-u0020 oq -60
-u0020 lq -80
-u0020 Y -120
-u0020 W -80
-u0020 V -80
-u0020 T -100
-v . -80
-v o -30
-v , -80
-v a -20
-w . -40
-w o -20
-w , -40
-x e -10
-y . -80
-y o -25
-y e -10
-y , -80
-y a -30
-z e 10
-charset
-ha 479,698,0,55,-57,55 2 0 asciicircum
-ti 479,343,0,44,-44,44 0 1 asciitilde
-vS 547,936,19,91,-16,90 2 2 Scaron
-vZ 501,936,0,153,30,90 2 3 Zcaron
-vs 456,750,14,98,-2,90 2 4 scaron
-vz 410,750,0,121,34,90 2 5 zcaron
-:Y 547,915,0,164,-87,90 2 6 Ydieresis
-tm 820,718,0,139,-96,90 2 7 trademark
-aq 195,718,0,118,-85,90 2 8 quotesingle
-space 228 0 32 space
-! 273,718,0,102,-27,90 2 33 exclam
-" 389,718,0,94,-108,90 2 34 quotedbl
-dq "
-# 456,698,0,122,1,90 2 35 numbersign
-sh "
-$ 456,775,115,104,-5,90 2 36 dollar
-Do "
-% 729,710,19,60,-62,60 2 37 percent
-& 592,718,19,58,-23,58 2 38 ampersand
-' 228,718,0,119,-87,90 2 39 quoteright
-cq "
-( 273,734,208,162,-12,90 3 40 parenleft
-) 273,734,208,79,71,79 3 41 parenright
-* 319,718,0,125,-70,90 2 42 asterisk
-+ 479,506,0,71,-17,71 0 43 plus
-, 228,146,168,23,27,23 0 44 comma
-- 273,345,0,88,-10,88 0 45 hyphen
-hy "
-. 228,146,0,23,-2,23 0 46 period
-/ 228,737,19,205,80,90 2 47 slash
-sl "
-0 456,710,19,100,-21,90 2 48 zero
-1 456,710,0,28,-92,28 2 49 one
-2 456,710,0,102,29,90 2 50 two
-3 456,710,19,93,-4,90 2 51 three
-4 456,710,0,84,0,84 2 52 four
-5 456,698,19,116,-3,90 2 53 five
-6 456,710,19,101,-20,90 2 54 six
-7 456,698,0,149,-52,90 2 55 seven
-8 456,710,19,99,-7,90 2 56 eight
-9 456,710,19,98,-14,90 2 57 nine
-: 273,512,0,65,-25,65 0 58 colon
-; 273,512,168,65,4,65 0 59 semicolon
-< 479,514,8,108,-17,90 0 60 less
-= 479,419,0,90,2,90 0 61 equal
-> 479,514,8,71,20,71 0 62 greater
-? 501,727,0,99,-85,90 2 63 question
-@ 800,737,19,32,-102,32 2 64 at
-at "
-A 592,718,0,34,34,34 2 65 A
-B 592,718,0,84,-12,84 2 66 B
-C 592,737,19,105,-38,90 2 67 C
-D 592,718,0,95,-12,90 2 68 D
-E 547,718,0,123,-12,90 2 69 E
-F 501,718,0,155,-12,90 2 70 F
-G 638,737,19,82,-39,82 2 71 G
-H 592,718,0,117,-8,90 2 72 H
-I 228,718,0,123,-2,90 2 73 I
-J 456,718,18,116,1,90 2 74 J
-K 592,718,0,161,-21,90 2 75 K
-L 501,718,0,50,-12,50 2 76 L
-M 683,718,0,119,-7,90 2 77 M
-N 592,718,0,119,-7,90 2 78 N
-O 638,737,19,87,-38,87 2 79 O
-P 547,718,0,108,-12,90 2 80 P
-Q 638,737,52,87,-38,87 2 81 Q
-R 592,718,0,96,-12,90 2 82 R
-S 547,737,19,91,-16,90 2 83 S
-T 501,718,0,164,-64,90 2 84 T
-U 592,718,19,117,-46,90 2 85 U
-V 547,718,0,159,-91,90 2 86 V
-W 774,718,0,163,-88,90 2 87 W
-X 547,718,0,151,39,90 2 88 X
-Y 547,718,0,164,-87,90 2 89 Y
-Z 501,718,0,153,30,90 2 90 Z
-[ 273,722,196,156,33,90 2 91 bracketleft
-lB "
-\ 228,737,19,74,-51,74 2 92 backslash
-rs "
-] 273,722,196,124,64,90 2 93 bracketright
-rB "
-a^ 273,750,0,164,-47,90 2 94 circumflex
-^ "
-_ 456,0,125,37,72,37 0 95 underscore
-` 228,727,0,118,-86,90 2 96 quoteleft
-oq "
-a 456,546,14,72,5,72 0 97 a
-b 501,718,14,78,0,78 2 98 b
-c 456,546,14,85,-15,85 0 99 c
-d 501,718,14,126,-17,90 2 100 d
-e 456,546,14,80,-8,80 0 101 e
-f 273,727,0,162,-21,90 2 102 f
-g 501,546,217,95,19,90 1 103 g
-h 501,718,0,65,-3,65 2 104 h
-i 228,725,0,120,-7,90 2 105 i
-j 228,725,214,120,85,90 3 106 j
-k 456,718,0,143,-7,90 2 107 k
-l 228,718,0,119,-7,90 2 108 l
-m 729,546,0,67,-2,67 0 109 m
-n 501,546,0,65,-3,65 0 110 n
-o 501,546,14,76,-17,76 0 111 o
-p 501,546,207,78,35,78 1 112 p
-q 501,546,207,94,-16,90 1 113 q
-r 319,546,0,132,-2,90 0 114 r
-s 456,546,14,73,-2,73 0 115 s
-t 273,676,6,123,-32,90 2 116 t
-u 501,532,14,89,-30,89 0 117 u
-v 456,532,0,132,-53,90 0 118 v
-w 638,532,0,135,-51,90 0 119 w
-x 456,532,0,125,38,90 0 120 x
-y 456,532,214,129,16,90 1 121 y
-z 410,532,0,118,34,90 0 122 z
-lC 319,722,196,156,-27,90 2 123 braceleft
-{ "
-ba 230,737,19,109,-16,90 2 124 bar
-| "
-rC 319,722,196,64,64,64 2 125 braceright
-} "
-a~ 273,737,0,192,-42,90 2 126 tilde
-~ "
-bq 228,127,146,16,16,16 0 128 quotesinglbase
-Fo 456,484,0,62,-61,62 0 129 guillemotleft
-Fc 456,484,0,37,-35,37 0 130 guillemotright
-bu 287,524,0,108,-18,90 0 131 bullet
-Fn 456,737,210,142,91,90 3 132 florin
-f/ 137,710,19,312,193,90 2 133 fraction
-%0 820,710,19,81,-12,81 2 134 perthousand
-dg 456,718,171,107,-47,90 2 135 dagger
-dd 456,718,171,109,12,90 2 136 daggerdbl
-en 456,333,0,108,10,90 0 137 endash
-em 820,333,0,108,10,90 0 138 emdash
-fi 501,727,0,120,-21,90 2 140 fi
-fl 501,727,0,119,-21,90 2 141 fl
-.i 228,532,0,86,-7,86 0 144 dotlessi
-ga 273,750,0,67,-62,67 2 146 grave
-a" 273,750,0,306,-63,90 2 147 hungarumlaut
-a. 273,729,0,93,-142,90 2 148 dotaccent
-ab 273,750,0,182,-78,90 2 149 breve
-ah 273,750,0,189,-73,90 2 150 caron
-ao 273,776,0,121,-114,90 2 151 ring
-ho 273,0,228,0,17 1 152 ogonek
-lq 410,727,0,122,-82,90 2 153 quotedblleft
-rq 410,718,0,123,-82,90 2 154 quotedblright
-oe 774,546,14,77,-17,77 0 155 oe
-/l 228,718,0,156,17,90 2 156 lslash
-Bq 410,127,146,20,21,20 0 157 quotedblbase
-OE 820,737,19,143,-31,90 2 158 OE
-/L 501,718,0,50,22,50 2 159 Lslash
-r! 273,532,186,67,9,67 0 161 exclamdown
-ct 456,628,118,85,-15,85 0 162 cent
-Po 456,718,16,114,9,90 2 163 sterling
-Cs 456,636,0,152,28,90 0 164 currency
-Ye 456,698,0,179,1,90 2 165 yen
-bb 230,737,19,109,-16,90 2 166 brokenbar
-sc 456,727,184,85,0,85 2 167 section
-ad 273,729,0,172,-62,90 2 168 dieresis
-co 604,737,19,131,4,90 2 169 copyright
-Of 303,737,0,128,-25,90 2 170 ordfeminine
-fo 273,484,0,66,-56,66 0 171 guilsinglleft
-tno 479,419,0,90,-36,90 0 172 logicalnot
-\- 479,309,0,71,-17,71 0 173 minus
-rg 604,737,19,130,5,90 2 174 registered
-a- 273,678,0,173,-50,90 2 175 macron
-de 328,712,0,105,-93,90 2 176 degree
-t+- 479,506,0,83,17,83 0 177 plusminus
-S2 273,710,0,145,-7,90 2 178 twosuperior
-S3 273,710,0,138,-25,90 2 179 threesuperior
-aa 273,750,0,200,-144,90 2 180 acute
-mc 501,532,207,89,32,89 1 181 mu
-ps 456,700,191,158,-30,90 2 182 paragraph
-pc 228,334,0,48,-40,48 0 183 periodcentered
-ac 273,0,228,0,80 1 184 cedilla
-S1 273,710,0,95,-71,90 2 185 onesuperior
-Om 299,737,0,149,-25,90 2 186 ordmasculine
-fc 273,484,0,41,-31,41 0 187 guilsinglright
-14 684,710,19,27,-58,27 2 188 onequarter
-12 684,710,19,70,-58,70 2 189 onehalf
-34 684,710,19,54,-32,54 2 190 threequarters
-r? 501,532,195,8,6,8 0 191 questiondown
-`A 592,936,0,34,34,34 2 192 Agrave
-'A 592,936,0,73,34,73 2 193 Aacute
-^A 592,936,0,37,34,37 2 194 Acircumflex
-~A 592,923,0,66,34,66 2 195 Atilde
-:A 592,915,0,46,34,46 2 196 Adieresis
-oA 592,962,0,34,34,34 2 197 Aring
-AE 820,718,0,132,46,90 2 198 AE
-,C 592,737,228,105,-38,90 3 199 Ccedilla
-`E 547,936,0,123,-12,90 2 200 Egrave
-'E 547,936,0,123,-12,90 2 201 Eacute
-^E 547,936,0,123,-12,90 2 202 Ecircumflex
-:E 547,915,0,123,-12,90 2 203 Edieresis
-`I 228,936,0,123,-2,90 2 204 Igrave
-'I 228,936,0,255,-2,90 2 205 Iacute
-^I 228,936,0,219,-2,90 2 206 Icircumflex
-:I 228,915,0,227,-2,90 2 207 Idieresis
--D 592,718,0,95,-1,90 2 208 Eth
-~N 592,923,0,119,-7,90 2 209 Ntilde
-`O 638,936,19,87,-38,87 2 210 Ograve
-'O 638,936,19,87,-38,87 2 211 Oacute
-^O 638,936,19,87,-38,87 2 212 Ocircumflex
-~O 638,923,19,87,-38,87 2 213 Otilde
-:O 638,915,19,87,-38,87 2 214 Odieresis
-tmu 479,505,0,91,3,90 0 215 multiply
-/O 638,745,27,145,21,90 2 216 Oslash
-`U 592,936,19,117,-46,90 2 217 Ugrave
-'U 592,936,19,117,-46,90 2 218 Uacute
-^U 592,936,19,117,-46,90 2 219 Ucircumflex
-:U 592,915,19,117,-46,90 2 220 Udieresis
-'Y 547,936,0,164,-87,90 2 221 Yacute
-TP 547,718,0,91,-12,90 2 222 Thorn
-ss 501,731,14,88,-7,88 2 223 germandbls
-`a 456,750,14,72,5,72 2 224 agrave
-'a 456,750,14,108,5,90 2 225 aacute
-^a 456,750,14,72,5,72 2 226 acircumflex
-~a 456,737,14,101,5,90 2 227 atilde
-:a 456,729,14,81,5,81 2 228 adieresis
-oa 456,776,14,72,5,72 2 229 aring
-ae 729,546,14,78,4,78 0 230 ae
-,c 456,546,228,85,-15,85 1 231 ccedilla
-`e 456,750,14,80,-8,80 2 232 egrave
-'e 456,750,14,108,-8,90 2 233 eacute
-^e 456,750,14,80,-8,80 2 234 ecircumflex
-:e 456,729,14,81,-8,81 2 235 edieresis
-`i 228,750,0,90,-7,90 2 236 igrave
-'i 228,750,0,222,-7,90 2 237 iacute
-^i 228,750,0,186,-7,90 2 238 icircumflex
-:i 228,729,0,195,-7,90 2 239 idieresis
-Sd 501,737,14,98,-17,90 2 240 eth
-~n 501,737,0,78,-3,78 2 241 ntilde
-`o 501,750,14,76,-17,76 2 242 ograve
-'o 501,750,14,86,-17,86 2 243 oacute
-^o 501,750,14,76,-17,76 2 244 ocircumflex
-~o 501,737,14,78,-17,78 2 245 otilde
-:o 501,729,14,76,-17,76 2 246 odieresis
-tdi 479,548,42,71,-17,71 0 247 divide
-/o 501,560,29,124,32,90 0 248 oslash
-`u 501,750,14,89,-30,89 2 249 ugrave
-'u 501,750,14,89,-30,89 2 250 uacute
-^u 501,750,14,89,-30,89 2 251 ucircumflex
-:u 501,729,14,89,-30,89 2 252 udieresis
-'y 456,750,214,129,16,90 3 253 yacute
-Tp 501,718,208,78,35,78 3 254 thorn
-:y 456,729,214,129,16,90 3 255 ydieresis
-u2026 820,146,0,0,-25 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HNI b/contrib/groff/font/devps/HNI
deleted file mode 100644
index a9c39ed62aea..000000000000
--- a/contrib/groff/font/devps/HNI
+++ /dev/null
@@ -1,521 +0,0 @@
-name HNI
-internalname Helvetica-Narrow-Oblique
-slant 12
-spacewidth 228
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -40
-A w -40
-A v -40
-A u -30
-A Y -100
-A W -50
-A V -70
-A U -50
-A T -120
-A Q -30
-A O -30
-A G -30
-A C -30
-B . -20
-B , -20
-B U -10
-C . -30
-C , -30
-D . -70
-D , -70
-D Y -90
-D W -40
-D V -70
-D A -40
-F r -45
-F . -150
-F o -30
-F e -30
-F , -150
-F a -50
-F A -80
-J u -20
-J . -30
-J , -30
-J a -20
-J A -20
-K y -50
-K u -30
-K o -40
-K e -40
-K O -50
-L y -30
-L ' -160
-L cq -160
-L rq -140
-L Y -140
-L W -70
-L V -110
-L T -110
-O . -40
-O , -40
-O Y -70
-O X -60
-O W -30
-O V -50
-O T -40
-O A -20
-P . -180
-P o -50
-P e -50
-P , -180
-P a -40
-P A -120
-Q U -10
-R Y -50
-R W -30
-R V -50
-R U -40
-R T -30
-R O -20
-S . -20
-S , -20
-T y -120
-T w -120
-T u -120
-T ; -20
-T r -120
-T . -120
-T o -120
-T - -140
-T hy -140
-T e -120
-T , -120
-T : -20
-T a -120
-T O -40
-T A -120
-U . -40
-U , -40
-U A -40
-V u -70
-V ; -40
-V . -125
-V o -80
-V - -80
-V hy -80
-V e -80
-V , -125
-V : -40
-V a -70
-V O -40
-V G -40
-V A -80
-W y -20
-W u -30
-W . -80
-W o -30
-W - -40
-W hy -40
-W e -30
-W , -80
-W a -40
-W O -20
-W A -50
-Y u -110
-Y ; -60
-Y . -140
-Y o -140
-Y i -20
-Y - -140
-Y hy -140
-Y e -140
-Y , -140
-Y : -60
-Y a -140
-Y O -85
-Y A -110
-a y -30
-a w -20
-a v -20
-b y -20
-b v -20
-b u -20
-b . -40
-b l -20
-b , -40
-b b -10
-c k -20
-c , -15
-: u0020 -50
-, ' -100
-, cq -100
-, rq -100
-e y -20
-e x -30
-e w -20
-e v -30
-e . -15
-e , -15
-f ' 50
-f cq 50
-f rq 60
-f . -30
-f o -30
-f e -30
-f .i -28
-f , -30
-f a -30
-g r -10
-h y -30
-k o -20
-k e -20
-m y -15
-m u -10
-n y -15
-n v -20
-n u -10
-o y -30
-o x -30
-o w -15
-o v -15
-o . -40
-o , -40
-/o z -55
-/o y -70
-/o x -85
-/o w -70
-/o v -70
-/o u -55
-/o t -55
-/o s -55
-/o r -55
-/o q -55
-/o . -95
-/o p -55
-/o o -55
-/o n -55
-/o m -55
-/o l -55
-/o k -55
-/o j -55
-/o i -55
-/o h -55
-/o g -55
-/o f -55
-/o e -55
-/o d -55
-/o , -95
-/o c -55
-/o b -55
-/o a -55
-p y -30
-p . -35
-p , -35
-. u0020 -60
-. ' -100
-. cq -100
-. rq -100
-rq u0020 -40
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' u0020 -70
-cq u0020 -70
-' s -50
-cq s -50
-' r -50
-cq r -50
-' ' -57
-' cq -57
-cq ' -57
-cq cq -57
-' d -50
-cq d -50
-r y 30
-r v 30
-r u 15
-r t 40
-r ; 30
-r . -50
-r p 30
-r n 25
-r m 25
-r l 15
-r k 15
-r i 15
-r , -50
-r : 30
-r a -10
-s w -30
-s . -15
-s , -15
-; u0020 -50
-u0020 ` -60
-u0020 oq -60
-u0020 lq -30
-u0020 Y -90
-u0020 W -40
-u0020 V -50
-u0020 T -50
-v . -80
-v o -25
-v e -25
-v , -80
-v a -25
-w . -60
-w o -10
-w e -10
-w , -60
-w a -15
-x e -30
-y . -100
-y o -20
-y e -20
-y , -100
-y a -20
-z o -15
-z e -15
-charset
-ha 385,688,0,107,15,89 2 0 asciicircum
-ti 479,326,0,47,-41,47 0 1 asciitilde
-vS 547,929,19,87,-24,87 2 2 Scaron
-vZ 501,929,0,156,31,89 2 3 Zcaron
-vs 410,734,15,93,-2,89 2 4 scaron
-vz 410,734,0,108,25,89 2 5 zcaron
-:Y 547,901,0,164,-87,89 2 6 Ydieresis
-tm 820,718,0,96,-102,89 2 7 trademark
-aq 157,718,0,126,-79,89 2 8 quotesingle
-space 228 0 32 space
-! 228,718,0,100,-24,89 2 33 exclam
-" 291,718,0,118,-88,89 2 34 quotedbl
-dq "
-# 456,688,0,111,-10,89 2 35 numbersign
-sh "
-$ 456,775,115,100,-7,89 2 36 dollar
-Do "
-% 729,703,19,50,-70,50 2 37 percent
-& 547,718,15,33,-13,33 2 38 ampersand
-' 182,718,0,122,-74,89 2 39 quoteright
-cq "
-( 273,733,207,149,-39,89 3 40 parenleft
-) 273,733,207,53,57,53 3 41 parenright
-* 319,718,0,120,-85,89 2 42 asterisk
-+ 479,505,0,68,-20,68 0 43 plus
-, 228,106,147,0,4 0 44 comma
-- 273,322,0,70,-27,70 0 45 hyphen
-hy "
-. 228,106,0,0,-21 0 46 period
-/ 228,737,19,192,67,89 2 47 slash
-sl "
-0 456,703,19,93,-27,89 2 48 zero
-1 456,703,0,11,-120,11 2 49 one
-2 456,703,0,100,29,89 2 50 two
-3 456,703,19,94,-11,89 2 51 three
-4 456,703,0,66,0,66 2 52 four
-5 456,688,19,103,-5,89 2 53 five
-6 456,703,19,98,-24,89 2 54 six
-7 456,688,0,143,-62,89 2 55 seven
-8 456,703,19,91,-10,89 2 56 eight
-9 456,703,19,93,-17,89 2 57 nine
-: 228,516,0,69,-21,69 0 58 colon
-; 228,516,147,69,4,69 0 59 semicolon
-< 479,495,0,97,-27,89 0 60 less
-= 479,390,0,86,-2,86 0 61 equal
-> 479,495,0,61,9,61 0 62 greater
-? 456,727,0,94,-82,89 2 63 question
-@ 832,737,19,9,-126,9 2 64 at
-at "
-A 547,718,0,39,39,39 2 65 A
-B 547,718,0,86,-11,86 2 66 B
-C 592,737,19,98,-38,89 2 67 C
-D 592,718,0,84,-16,84 2 68 D
-E 547,718,0,128,-21,89 2 69 E
-F 501,718,0,152,-21,89 2 70 F
-G 638,737,19,67,-41,67 2 71 G
-H 592,718,0,113,-13,89 2 72 H
-I 228,718,0,101,-25,89 2 73 I
-J 410,718,19,116,11,89 2 74 J
-K 547,718,0,165,-12,89 2 75 K
-L 456,718,0,49,-12,49 2 76 L
-M 683,718,0,116,-10,89 2 77 M
-N 592,718,0,113,-12,89 2 78 N
-O 638,737,19,89,-36,89 2 79 O
-P 547,718,0,107,-21,89 2 80 P
-Q 638,737,56,89,-36,89 2 81 Q
-R 592,718,0,92,-22,89 2 82 R
-S 547,737,19,87,-24,87 2 83 S
-T 501,718,0,164,-72,89 2 84 T
-U 592,718,19,111,-51,89 2 85 U
-V 547,718,0,159,-92,89 2 86 V
-W 774,718,0,162,-88,89 2 87 W
-X 547,718,0,150,34,89 2 88 X
-Y 547,718,0,164,-87,89 2 89 Y
-Z 501,718,0,156,31,89 2 90 Z
-[ 228,722,196,153,33,89 2 91 bracketleft
-lB "
-\ 228,737,19,61,-65,61 2 92 backslash
-rs "
-] 228,722,196,124,61,89 2 93 bracketright
-rB "
-a^ 273,734,0,136,-71,89 2 94 circumflex
-^ "
-_ 456,0,125,37,72,37 0 95 underscore
-` 182,725,0,133,-85,89 2 96 quoteleft
-oq "
-a 456,538,15,52,0,52 0 97 a
-b 456,718,15,73,2,73 2 98 b
-c 410,538,15,94,-11,89 0 99 c
-d 456,718,15,128,-19,89 2 100 d
-e 456,538,15,68,-19,68 0 101 e
-f 228,728,0,163,-21,89 2 102 f
-g 456,538,220,94,16,89 1 103 g
-h 456,718,0,64,-3,64 2 104 h
-i 182,718,0,120,-5,89 2 105 i
-j 182,718,210,120,99,89 3 106 j
-k 410,718,0,132,-5,89 2 107 k
-l 182,718,0,120,-5,89 2 108 l
-m 683,538,0,66,-3,66 0 109 m
-n 456,538,0,64,-3,64 0 110 n
-o 456,538,14,73,-18,73 0 111 o
-p 456,538,207,73,39,73 1 112 p
-q 456,538,207,90,-19,89 1 113 q
-r 273,538,0,142,-13,89 0 114 r
-s 410,538,15,74,-2,74 0 115 s
-t 228,669,7,124,-34,89 2 116 t
-u 456,523,15,86,-27,86 0 117 u
-v 410,523,0,135,-48,89 0 118 v
-w 592,523,0,131,-53,89 0 119 w
-x 410,523,0,127,41,89 0 120 x
-y 410,523,214,132,38,89 1 121 y
-z 410,523,0,108,25,89 0 122 z
-lC 274,722,196,141,-25,89 2 123 braceleft
-{ "
-ba 213,737,19,102,-24,89 2 124 bar
-| "
-rC 274,722,196,67,50,67 2 125 braceright
-} "
-a~ 273,722,0,179,-52,89 2 126 tilde
-~ "
-bq 182,106,149,15,33,15 0 128 quotesinglbase
-Fo 456,446,0,48,-70,48 0 129 guillemotleft
-Fc 456,446,0,27,-48,27 0 130 guillemotright
-bu 287,517,0,102,-24,89 0 131 bullet
-Fn 456,737,207,131,93,89 3 132 florin
-f/ 137,703,19,309,189,89 2 133 fraction
-%0 820,703,19,74,-22,74 2 134 perthousand
-dg 456,718,159,104,-60,89 2 135 dagger
-dd 456,718,159,105,7,89 2 136 daggerdbl
-en 456,313,0,104,8,89 0 137 endash
-em 820,313,0,105,8,89 0 138 emdash
-fi 410,728,0,121,-21,89 2 140 fi
-fl 410,728,0,119,-21,89 2 141 fl
-.i 228,523,0,63,-28,63 0 144 dotlessi
-ga 273,734,0,53,-89,53 2 146 grave
-a" 273,734,0,240,-79,89 2 147 hungarumlaut
-a. 273,706,0,74,-154,74 2 148 dotaccent
-ab 273,731,0,168,-87,89 2 149 breve
-ah 273,734,0,161,-95,89 2 150 caron
-ao 273,756,0,107,-125,89 2 151 ring
-ho 273,0,225,0,15 1 152 ogonek
-lq 273,725,0,155,-63,89 2 153 quotedblleft
-rq 273,718,0,144,-52,89 2 154 quotedblright
-oe 774,538,15,67,-18,67 0 155 oe
-/l 182,718,0,152,16,89 2 156 lslash
-Bq 273,106,149,37,55,37 0 157 quotedblbase
-OE 820,737,19,145,-30,89 2 158 OE
-/L 456,718,0,49,16,49 2 159 Lslash
-r! 273,523,195,44,-13,44 0 161 exclamdown
-ct 456,623,115,73,-28,73 0 162 cent
-Po 456,718,16,114,10,89 2 163 sterling
-Cs 456,603,0,124,1,89 0 164 currency
-Ye 456,688,0,167,-17,89 2 165 yen
-bb 213,737,19,102,-24,89 2 166 brokenbar
-sc 456,737,191,73,-13,73 2 167 section
-ad 273,706,0,140,-88,89 2 168 dieresis
-co 604,737,19,133,6,89 2 169 copyright
-Of 303,737,0,115,-32,89 2 170 ordfeminine
-fo 273,446,0,56,-62,56 0 171 guilsinglleft
-tno 479,390,0,86,-37,86 0 172 logicalnot
-\- 479,289,0,68,-20,68 0 173 minus
-rg 604,737,19,133,6,89 2 174 registered
-a- 273,684,0,161,-67,89 2 175 macron
-de 328,703,0,106,-88,89 2 176 degree
-t+- 479,506,0,78,18,78 0 177 plusminus
-S2 273,703,0,145,-2,89 2 178 twosuperior
-S3 273,703,0,135,-24,89 2 179 threesuperior
-aa 273,734,0,167,-153,89 2 180 acute
-mc 456,523,207,86,30,86 1 181 mu
-ps 440,718,173,143,-53,89 2 182 paragraph
-pc 228,315,0,33,-56,33 0 183 periodcentered
-ac 273,0,225,0,48 1 184 cedilla
-S1 273,703,0,82,-86,82 2 185 onesuperior
-Om 299,737,0,135,-32,89 2 186 ordmasculine
-fc 273,446,0,34,-41,34 0 187 guilsinglright
-14 684,703,19,24,-73,24 2 188 onequarter
-12 684,703,19,54,-43,54 2 189 onehalf
-34 684,703,19,72,-56,72 2 190 threequarters
-r? 501,525,201,0,-20 0 191 questiondown
-`A 547,929,0,39,39,39 2 192 Agrave
-'A 547,929,0,63,39,63 2 193 Aacute
-^A 547,929,0,39,39,39 2 194 Acircumflex
-~A 547,917,0,76,39,76 2 195 Atilde
-:A 547,901,0,39,39,39 2 196 Adieresis
-oA 547,931,0,39,39,39 2 197 Aring
-AE 820,718,0,129,43,89 2 198 AE
-,C 592,737,225,98,-38,89 3 199 Ccedilla
-`E 547,929,0,128,-21,89 2 200 Egrave
-'E 547,929,0,128,-21,89 2 201 Eacute
-^E 547,929,0,128,-21,89 2 202 Ecircumflex
-:E 547,901,0,128,-21,89 2 203 Edieresis
-`I 228,929,0,110,-25,89 2 204 Igrave
-'I 228,929,0,223,-25,89 2 205 Iacute
-^I 228,929,0,193,-25,89 2 206 Icircumflex
-:I 228,901,0,197,-25,89 2 207 Idieresis
--D 592,718,0,84,-7,84 2 208 Eth
-~N 592,917,0,113,-12,89 2 209 Ntilde
-`O 638,929,19,89,-36,89 2 210 Ograve
-'O 638,929,19,89,-36,89 2 211 Oacute
-^O 638,929,19,89,-36,89 2 212 Ocircumflex
-~O 638,917,19,89,-36,89 2 213 Otilde
-:O 638,901,19,89,-36,89 2 214 Odieresis
-tmu 479,506,0,97,9,89 0 215 multiply
-/O 638,737,19,142,15,89 2 216 Oslash
-`U 592,929,19,111,-51,89 2 217 Ugrave
-'U 592,929,19,111,-51,89 2 218 Uacute
-^U 592,929,19,111,-51,89 2 219 Ucircumflex
-:U 592,901,19,111,-51,89 2 220 Udieresis
-'Y 547,929,0,164,-87,89 2 221 Yacute
-TP 547,718,0,87,-21,87 2 222 Thorn
-ss 501,728,15,88,-5,88 2 223 germandbls
-`a 456,734,15,52,0,52 2 224 agrave
-'a 456,734,15,75,0,75 2 225 aacute
-^a 456,734,15,52,0,52 2 226 acircumflex
-~a 456,722,15,80,0,80 2 227 atilde
-:a 456,706,15,52,0,52 2 228 adieresis
-oa 456,756,15,52,0,52 2 229 aring
-ae 729,538,15,67,0,67 0 230 ae
-,c 410,538,225,94,-11,89 1 231 ccedilla
-`e 456,734,15,68,-19,68 2 232 egrave
-'e 456,734,15,75,-19,75 2 233 eacute
-^e 456,734,15,68,-19,68 2 234 ecircumflex
-:e 456,706,15,68,-19,68 2 235 edieresis
-`i 228,734,0,76,-28,76 2 236 igrave
-'i 228,734,0,189,-28,89 2 237 iacute
-^i 228,734,0,159,-28,89 2 238 icircumflex
-:i 228,706,0,163,-28,89 2 239 idieresis
-Sd 456,737,15,100,-17,89 2 240 eth
-~n 456,722,0,80,-3,80 2 241 ntilde
-`o 456,734,14,73,-18,73 2 242 ograve
-'o 456,734,14,75,-18,75 2 243 oacute
-^o 456,734,14,73,-18,73 2 244 ocircumflex
-~o 456,722,14,88,-18,88 2 245 otilde
-:o 456,706,14,73,-18,73 2 246 odieresis
-tdi 479,524,19,68,-20,68 0 247 divide
-/o 501,545,22,80,26,80 0 248 oslash
-`u 456,734,15,86,-27,86 2 249 ugrave
-'u 456,734,15,86,-27,86 2 250 uacute
-^u 456,734,15,86,-27,86 2 251 ucircumflex
-:u 456,706,15,86,-27,86 2 252 udieresis
-'y 410,734,214,132,38,89 3 253 yacute
-Tp 456,718,207,73,39,73 3 254 thorn
-:y 410,706,214,132,38,89 3 255 ydieresis
-u2026 820,106,0,0,-44 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HNR b/contrib/groff/font/devps/HNR
deleted file mode 100644
index 989bdf042710..000000000000
--- a/contrib/groff/font/devps/HNR
+++ /dev/null
@@ -1,520 +0,0 @@
-name HNR
-internalname Helvetica-Narrow
-spacewidth 228
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -32
-A w -32
-A v -32
-A u -24
-A Y -81
-A W -40
-A V -56
-A U -40
-A T -97
-A Q -24
-A O -24
-A G -24
-A C -24
-B . -15
-B , -15
-B U -7
-C . -24
-C , -24
-D . -56
-D , -56
-D Y -73
-D W -32
-D V -56
-D A -32
-F r -36
-F . -122
-F o -24
-F e -24
-F , -122
-F a -40
-F A -65
-J u -15
-J . -24
-J , -24
-J a -15
-J A -15
-K y -40
-K u -24
-K o -32
-K e -32
-K O -40
-L y -24
-L ' -130
-L cq -130
-L rq -114
-L Y -114
-L W -56
-L V -89
-L T -89
-O . -32
-O , -32
-O Y -56
-O X -48
-O W -24
-O V -40
-O T -32
-O A -15
-P . -147
-P o -40
-P e -40
-P , -147
-P a -32
-P A -97
-Q U -7
-R Y -40
-R W -24
-R V -40
-R U -32
-R T -24
-R O -15
-S . -15
-S , -15
-T y -97
-T w -97
-T u -97
-T ; -15
-T r -97
-T . -97
-T o -97
-T - -114
-T hy -114
-T e -97
-T , -97
-T : -15
-T a -97
-T O -32
-T A -97
-U . -32
-U , -32
-U A -32
-V u -56
-V ; -32
-V . -102
-V o -65
-V - -65
-V hy -65
-V e -65
-V , -102
-V : -32
-V a -56
-V O -32
-V G -32
-V A -65
-W y -15
-W u -24
-W . -65
-W o -24
-W - -32
-W hy -32
-W e -24
-W , -65
-W a -32
-W O -15
-W A -40
-Y u -89
-Y ; -48
-Y . -114
-Y o -114
-Y i -15
-Y - -114
-Y hy -114
-Y e -114
-Y , -114
-Y : -48
-Y a -114
-Y O -69
-Y A -89
-a y -24
-a w -15
-a v -15
-b y -15
-b v -15
-b u -15
-b . -32
-b l -15
-b , -32
-b b -7
-c k -15
-c , -11
-: u0020 -40
-, ' -81
-, cq -81
-, rq -81
-e y -15
-e x -24
-e w -15
-e v -24
-e . -11
-e , -11
-f ' 41
-f cq 41
-f rq 49
-f . -24
-f o -24
-f e -24
-f .i -22
-f , -24
-f a -24
-g r -7
-h y -24
-k o -15
-k e -15
-m y -11
-m u -7
-n y -11
-n v -15
-n u -7
-o y -24
-o x -24
-o w -11
-o v -11
-o . -32
-o , -32
-/o z -44
-/o y -56
-/o x -69
-/o w -56
-/o v -56
-/o u -44
-/o t -44
-/o s -44
-/o r -44
-/o q -44
-/o . -77
-/o p -44
-/o o -44
-/o n -44
-/o m -44
-/o l -44
-/o k -44
-/o j -44
-/o i -44
-/o h -44
-/o g -44
-/o f -44
-/o e -44
-/o d -44
-/o , -77
-/o c -44
-/o b -44
-/o a -44
-p y -24
-p . -28
-p , -28
-. u0020 -48
-. ' -81
-. cq -81
-. rq -81
-rq u0020 -32
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' u0020 -56
-cq u0020 -56
-' s -40
-cq s -40
-' r -40
-cq r -40
-' ' -46
-' cq -46
-cq ' -46
-cq cq -46
-' d -40
-cq d -40
-r y 25
-r v 25
-r u 12
-r t 33
-r ; 25
-r . -40
-r p 25
-r n 21
-r m 21
-r l 12
-r k 12
-r i 12
-r , -40
-r : 25
-r a -7
-s w -24
-s . -11
-s , -11
-; u0020 -40
-u0020 ` -48
-u0020 oq -48
-u0020 lq -24
-u0020 Y -73
-u0020 W -32
-u0020 V -40
-u0020 T -40
-v . -65
-v o -20
-v e -20
-v , -65
-v a -20
-w . -48
-w o -7
-w e -7
-w , -48
-w a -11
-x e -24
-y . -81
-y o -15
-y e -15
-y , -81
-y a -15
-z o -11
-z e -11
-charset
-ha 385,688,0,11,11 2 0 asciicircum
-ti 479,326 0 1 asciitilde
-vS 547,929,19 2 2 Scaron
-vZ 501,929 2 3 Zcaron
-vs 410,734,15 2 4 scaron
-vz 410,734 2 5 zcaron
-:Y 547,901 2 6 Ydieresis
-tm 820,718 2 7 trademark
-aq 157,718 2 8 quotesingle
-space 228 0 32 space
-! 228,718 2 33 exclam
-" 291,718 2 34 quotedbl
-dq "
-# 456,688 2 35 numbersign
-sh "
-$ 456,775,115 2 36 dollar
-Do "
-% 729,703,19 2 37 percent
-& 547,718,15 2 38 ampersand
-' 182,718 2 39 quoteright
-cq "
-( 273,733,207 3 40 parenleft
-) 273,733,207 3 41 parenright
-* 319,718 2 42 asterisk
-+ 479,505 0 43 plus
-, 228,106,147 0 44 comma
-- 273,322 0 45 hyphen
-hy "
-. 228,106 0 46 period
-/ 228,737,19,14,14 2 47 slash
-sl "
-0 456,703,19 2 48 zero
-1 456,703 2 49 one
-2 456,703 2 50 two
-3 456,703,19 2 51 three
-4 456,703 2 52 four
-5 456,688,19 2 53 five
-6 456,703,19 2 54 six
-7 456,688 2 55 seven
-8 456,703,19 2 56 eight
-9 456,703,19 2 57 nine
-: 228,516 0 58 colon
-; 228,516,147 0 59 semicolon
-< 479,495 0 60 less
-= 479,390 0 61 equal
-> 479,495 0 62 greater
-? 456,727 2 63 question
-@ 832,737,19 2 64 at
-at "
-A 547,718 2 65 A
-B 547,718 2 66 B
-C 592,737,19 2 67 C
-D 592,718 2 68 D
-E 547,718 2 69 E
-F 501,718 2 70 F
-G 638,737,19 2 71 G
-H 592,718 2 72 H
-I 228,718 2 73 I
-J 410,718,19 2 74 J
-K 547,718 2 75 K
-L 456,718 2 76 L
-M 683,718 2 77 M
-N 592,718 2 78 N
-O 638,737,19 2 79 O
-P 547,718 2 80 P
-Q 638,737,56 2 81 Q
-R 592,718 2 82 R
-S 547,737,19 2 83 S
-T 501,718 2 84 T
-U 592,718,19 2 85 U
-V 547,718 2 86 V
-W 774,718 2 87 W
-X 547,718 2 88 X
-Y 547,718 2 89 Y
-Z 501,718 2 90 Z
-[ 228,722,196 2 91 bracketleft
-lB "
-\ 228,737,19,14,14 2 92 backslash
-rs "
-] 228,722,196 2 93 bracketright
-rB "
-a^ 273,734 2 94 circumflex
-^ "
-_ 456,0,125 0 95 underscore
-` 182,725 2 96 quoteleft
-oq "
-a 456,538,15 0 97 a
-b 456,718,15 2 98 b
-c 410,538,15 0 99 c
-d 456,718,15 2 100 d
-e 456,538,15 0 101 e
-f 228,728 2 102 f
-g 456,538,220 1 103 g
-h 456,718 2 104 h
-i 182,718 2 105 i
-j 182,718,210,0,13 3 106 j
-k 410,718,0,1 2 107 k
-l 182,718 2 108 l
-m 683,538 0 109 m
-n 456,538 0 110 n
-o 456,538,14 0 111 o
-p 456,538,207 1 112 p
-q 456,538,207 1 113 q
-r 273,538 0 114 r
-s 410,538,15 0 115 s
-t 228,669,7 2 116 t
-u 456,523,15 0 117 u
-v 410,523 0 118 v
-w 592,523 0 119 w
-x 410,523 0 120 x
-y 410,523,214 1 121 y
-z 410,523 0 122 z
-lC 274,722,196 2 123 braceleft
-{ "
-ba 213,737,19 2 124 bar
-| "
-rC 274,722,196 2 125 braceright
-} "
-a~ 273,722,0,3,3 2 126 tilde
-~ "
-bq 182,106,149 0 128 quotesinglbase
-Fo 456,446 0 129 guillemotleft
-Fc 456,446 0 130 guillemotright
-bu 287,517 0 131 bullet
-Fn 456,737,207,0,9 3 132 florin
-f/ 137,703,19,136,136 2 133 fraction
-%0 820,703,19 2 134 perthousand
-dg 456,718,159 2 135 dagger
-dd 456,718,159 2 136 daggerdbl
-en 456,313 0 137 endash
-em 820,313 0 138 emdash
-fi 410,728 2 140 fi
-fl 410,728 2 141 fl
-.i 228,523 0 144 dotlessi
-ga 273,734 2 146 grave
-a" 273,734,0,62 2 147 hungarumlaut
-a. 273,706 2 148 dotaccent
-ab 273,731 2 149 breve
-ah 273,734 2 150 caron
-ao 273,756 2 151 ring
-ho 273,0,225 1 152 ogonek
-lq 273,725 2 153 quotedblleft
-rq 273,718 2 154 quotedblright
-oe 774,538,15 0 155 oe
-/l 182,718,0,16,16 2 156 lslash
-Bq 273,106,149 0 157 quotedblbase
-OE 820,737,19 2 158 OE
-/L 456,718,0,0,16 2 159 Lslash
-r! 273,523,195 0 161 exclamdown
-ct 456,623,115 0 162 cent
-Po 456,718,16 2 163 sterling
-Cs 456,603 0 164 currency
-Ye 456,688 2 165 yen
-bb 213,737,19 2 166 brokenbar
-sc 456,737,191 2 167 section
-ad 273,706 2 168 dieresis
-co 604,737,19,13,11 2 169 copyright
-Of 303,737 2 170 ordfeminine
-fo 273,446 0 171 guilsinglleft
-tno 479,390 0 172 logicalnot
-\- 479,289 0 173 minus
-rg 604,737,19,13,11 2 174 registered
-a- 273,684 2 175 macron
-de 328,703 2 176 degree
-t+- 479,506 0 177 plusminus
-S2 273,703 2 178 twosuperior
-S3 273,703 2 179 threesuperior
-aa 273,734 2 180 acute
-mc 456,523,207 1 181 mu
-ps 440,718,173 2 182 paragraph
-pc 228,315 0 183 periodcentered
-ac 273,0,225 1 184 cedilla
-S1 273,703 2 185 onesuperior
-Om 299,737 2 186 ordmasculine
-fc 273,446 0 187 guilsinglright
-14 684,703,19 2 188 onequarter
-12 684,703,19 2 189 onehalf
-34 684,703,19 2 190 threequarters
-r? 501,525,201 0 191 questiondown
-`A 547,929 2 192 Agrave
-'A 547,929 2 193 Aacute
-^A 547,929 2 194 Acircumflex
-~A 547,917 2 195 Atilde
-:A 547,901 2 196 Adieresis
-oA 547,931 2 197 Aring
-AE 820,718 2 198 AE
-,C 592,737,225 3 199 Ccedilla
-`E 547,929 2 200 Egrave
-'E 547,929 2 201 Eacute
-^E 547,929 2 202 Ecircumflex
-:E 547,901 2 203 Edieresis
-`I 228,929,0,0,11 2 204 Igrave
-'I 228,929,0,11 2 205 Iacute
-^I 228,929,0,6,5 2 206 Icircumflex
-:I 228,901 2 207 Idieresis
--D 592,718 2 208 Eth
-~N 592,917 2 209 Ntilde
-`O 638,929,19 2 210 Ograve
-'O 638,929,19 2 211 Oacute
-^O 638,929,19 2 212 Ocircumflex
-~O 638,917,19 2 213 Otilde
-:O 638,901,19 2 214 Odieresis
-tmu 479,506 0 215 multiply
-/O 638,737,19 2 216 Oslash
-`U 592,929,19 2 217 Ugrave
-'U 592,929,19 2 218 Uacute
-^U 592,929,19 2 219 Ucircumflex
-:U 592,901,19 2 220 Udieresis
-'Y 547,929 2 221 Yacute
-TP 547,718 2 222 Thorn
-ss 501,728,15 2 223 germandbls
-`a 456,734,15 2 224 agrave
-'a 456,734,15 2 225 aacute
-^a 456,734,15 2 226 acircumflex
-~a 456,722,15 2 227 atilde
-:a 456,706,15 2 228 adieresis
-oa 456,756,15 2 229 aring
-ae 729,538,15 0 230 ae
-,c 410,538,225 1 231 ccedilla
-`e 456,734,15 2 232 egrave
-'e 456,734,15 2 233 eacute
-^e 456,734,15 2 234 ecircumflex
-:e 456,706,15 2 235 edieresis
-`i 228,734,0,0,11 2 236 igrave
-'i 228,734,0,11 2 237 iacute
-^i 228,734,0,6,5 2 238 icircumflex
-:i 228,706 2 239 idieresis
-Sd 456,737,15 2 240 eth
-~n 456,722 2 241 ntilde
-`o 456,734,14 2 242 ograve
-'o 456,734,14 2 243 oacute
-^o 456,734,14 2 244 ocircumflex
-~o 456,722,14 2 245 otilde
-:o 456,706,14 2 246 odieresis
-tdi 479,524,19 0 247 divide
-/o 501,545,22 0 248 oslash
-`u 456,734,15 2 249 ugrave
-'u 456,734,15 2 250 uacute
-^u 456,734,15 2 251 ucircumflex
-:u 456,706,15 2 252 udieresis
-'y 410,734,214 3 253 yacute
-Tp 456,718,207 3 254 thorn
-:y 410,706,214 3 255 ydieresis
-u2026 820,106 0 256 ellipsis
diff --git a/contrib/groff/font/devps/HR b/contrib/groff/font/devps/HR
deleted file mode 100644
index cbf1ab80bc9c..000000000000
--- a/contrib/groff/font/devps/HR
+++ /dev/null
@@ -1,520 +0,0 @@
-name HR
-internalname Helvetica
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -40
-A w -40
-A v -40
-A u -30
-A Y -100
-A W -50
-A V -70
-A U -50
-A T -120
-A Q -30
-A O -30
-A G -30
-A C -30
-B . -20
-B , -20
-B U -10
-C . -30
-C , -30
-D . -70
-D , -70
-D Y -90
-D W -40
-D V -70
-D A -40
-F r -45
-F . -150
-F o -30
-F e -30
-F , -150
-F a -50
-F A -80
-J u -20
-J . -30
-J , -30
-J a -20
-J A -20
-K y -50
-K u -30
-K o -40
-K e -40
-K O -50
-L y -30
-L ' -160
-L cq -160
-L rq -140
-L Y -140
-L W -70
-L V -110
-L T -110
-O . -40
-O , -40
-O Y -70
-O X -60
-O W -30
-O V -50
-O T -40
-O A -20
-P . -180
-P o -50
-P e -50
-P , -180
-P a -40
-P A -120
-Q U -10
-R Y -50
-R W -30
-R V -50
-R U -40
-R T -30
-R O -20
-S . -20
-S , -20
-T y -120
-T w -120
-T u -120
-T ; -20
-T r -120
-T . -120
-T o -120
-T - -140
-T hy -140
-T e -120
-T , -120
-T : -20
-T a -120
-T O -40
-T A -120
-U . -40
-U , -40
-U A -40
-V u -70
-V ; -40
-V . -125
-V o -80
-V - -80
-V hy -80
-V e -80
-V , -125
-V : -40
-V a -70
-V O -40
-V G -40
-V A -80
-W y -20
-W u -30
-W . -80
-W o -30
-W - -40
-W hy -40
-W e -30
-W , -80
-W a -40
-W O -20
-W A -50
-Y u -110
-Y ; -60
-Y . -140
-Y o -140
-Y i -20
-Y - -140
-Y hy -140
-Y e -140
-Y , -140
-Y : -60
-Y a -140
-Y O -85
-Y A -110
-a y -30
-a w -20
-a v -20
-b y -20
-b v -20
-b u -20
-b . -40
-b l -20
-b , -40
-b b -10
-c k -20
-c , -15
-: u0020 -50
-, ' -100
-, cq -100
-, rq -100
-e y -20
-e x -30
-e w -20
-e v -30
-e . -15
-e , -15
-f ' 50
-f cq 50
-f rq 60
-f . -30
-f o -30
-f e -30
-f .i -28
-f , -30
-f a -30
-g r -10
-h y -30
-k o -20
-k e -20
-m y -15
-m u -10
-n y -15
-n v -20
-n u -10
-o y -30
-o x -30
-o w -15
-o v -15
-o . -40
-o , -40
-/o z -55
-/o y -70
-/o x -85
-/o w -70
-/o v -70
-/o u -55
-/o t -55
-/o s -55
-/o r -55
-/o q -55
-/o . -95
-/o p -55
-/o o -55
-/o n -55
-/o m -55
-/o l -55
-/o k -55
-/o j -55
-/o i -55
-/o h -55
-/o g -55
-/o f -55
-/o e -55
-/o d -55
-/o , -95
-/o c -55
-/o b -55
-/o a -55
-p y -30
-p . -35
-p , -35
-. u0020 -60
-. ' -100
-. cq -100
-. rq -100
-rq u0020 -40
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' u0020 -70
-cq u0020 -70
-' s -50
-cq s -50
-' r -50
-cq r -50
-' ' -57
-' cq -57
-cq ' -57
-cq cq -57
-' d -50
-cq d -50
-r y 30
-r v 30
-r u 15
-r t 40
-r ; 30
-r . -50
-r p 30
-r n 25
-r m 25
-r l 15
-r k 15
-r i 15
-r , -50
-r : 30
-r a -10
-s w -30
-s . -15
-s , -15
-; u0020 -50
-u0020 ` -60
-u0020 oq -60
-u0020 lq -30
-u0020 Y -90
-u0020 W -40
-u0020 V -50
-u0020 T -50
-v . -80
-v o -25
-v e -25
-v , -80
-v a -25
-w . -60
-w o -10
-w e -10
-w , -60
-w a -15
-x e -30
-y . -100
-y o -20
-y e -20
-y , -100
-y a -20
-z o -15
-z e -15
-charset
-ha 469,688,0,14,14 2 0 asciicircum
-ti 584,326 0 1 asciitilde
-vS 667,929,19 2 2 Scaron
-vZ 611,929 2 3 Zcaron
-vs 500,734,15 2 4 scaron
-vz 500,734 2 5 zcaron
-:Y 667,901 2 6 Ydieresis
-tm 1000,718 2 7 trademark
-aq 191,718 2 8 quotesingle
-space 278 0 32 space
-! 278,718 2 33 exclam
-" 355,718 2 34 quotedbl
-dq "
-# 556,688 2 35 numbersign
-sh "
-$ 556,775,115 2 36 dollar
-Do "
-% 889,703,19 2 37 percent
-& 667,718,15 2 38 ampersand
-' 222,718 2 39 quoteright
-cq "
-( 333,733,207 3 40 parenleft
-) 333,733,207 3 41 parenright
-* 389,718 2 42 asterisk
-+ 584,505 0 43 plus
-, 278,106,147 0 44 comma
-- 333,322 0 45 hyphen
-hy "
-. 278,106 0 46 period
-/ 278,737,19,17,17 2 47 slash
-sl "
-0 556,703,19 2 48 zero
-1 556,703 2 49 one
-2 556,703 2 50 two
-3 556,703,19 2 51 three
-4 556,703 2 52 four
-5 556,688,19 2 53 five
-6 556,703,19 2 54 six
-7 556,688 2 55 seven
-8 556,703,19 2 56 eight
-9 556,703,19 2 57 nine
-: 278,516 0 58 colon
-; 278,516,147 0 59 semicolon
-< 584,495 0 60 less
-= 584,390 0 61 equal
-> 584,495 0 62 greater
-? 556,727 2 63 question
-@ 1015,737,19 2 64 at
-at "
-A 667,718 2 65 A
-B 667,718 2 66 B
-C 722,737,19 2 67 C
-D 722,718 2 68 D
-E 667,718 2 69 E
-F 611,718 2 70 F
-G 778,737,19 2 71 G
-H 722,718 2 72 H
-I 278,718 2 73 I
-J 500,718,19 2 74 J
-K 667,718 2 75 K
-L 556,718 2 76 L
-M 833,718 2 77 M
-N 722,718 2 78 N
-O 778,737,19 2 79 O
-P 667,718 2 80 P
-Q 778,737,56 2 81 Q
-R 722,718 2 82 R
-S 667,737,19 2 83 S
-T 611,718 2 84 T
-U 722,718,19 2 85 U
-V 667,718 2 86 V
-W 944,718 2 87 W
-X 667,718 2 88 X
-Y 667,718 2 89 Y
-Z 611,718 2 90 Z
-[ 278,722,196 2 91 bracketleft
-lB "
-\ 278,737,19,17,17 2 92 backslash
-rs "
-] 278,722,196 2 93 bracketright
-rB "
-a^ 333,734 2 94 circumflex
-^ "
-_ 556,0,125 0 95 underscore
-` 222,725 2 96 quoteleft
-oq "
-a 556,538,15 0 97 a
-b 556,718,15 2 98 b
-c 500,538,15 0 99 c
-d 556,718,15 2 100 d
-e 556,538,15 0 101 e
-f 278,728 2 102 f
-g 556,538,220 1 103 g
-h 556,718 2 104 h
-i 222,718 2 105 i
-j 222,718,210,0,16 3 106 j
-k 500,718,0,1 2 107 k
-l 222,718 2 108 l
-m 833,538 0 109 m
-n 556,538 0 110 n
-o 556,538,14 0 111 o
-p 556,538,207 1 112 p
-q 556,538,207 1 113 q
-r 333,538 0 114 r
-s 500,538,15 0 115 s
-t 278,669,7 2 116 t
-u 556,523,15 0 117 u
-v 500,523 0 118 v
-w 722,523 0 119 w
-x 500,523 0 120 x
-y 500,523,214 1 121 y
-z 500,523 0 122 z
-lC 334,722,196 2 123 braceleft
-{ "
-ba 260,737,19 2 124 bar
-| "
-rC 334,722,196 2 125 braceright
-} "
-a~ 333,722,0,4,4 2 126 tilde
-~ "
-bq 222,106,149 0 128 quotesinglbase
-Fo 556,446 0 129 guillemotleft
-Fc 556,446 0 130 guillemotright
-bu 350,517 0 131 bullet
-Fn 556,737,207,0,11 3 132 florin
-f/ 167,703,19,166,166 2 133 fraction
-%0 1000,703,19 2 134 perthousand
-dg 556,718,159 2 135 dagger
-dd 556,718,159 2 136 daggerdbl
-en 556,313 0 137 endash
-em 1000,313 0 138 emdash
-fi 500,728 2 140 fi
-fl 500,728 2 141 fl
-.i 278,523 0 144 dotlessi
-ga 333,734 2 146 grave
-a" 333,734,0,76 2 147 hungarumlaut
-a. 333,706 2 148 dotaccent
-ab 333,731 2 149 breve
-ah 333,734 2 150 caron
-ao 333,756 2 151 ring
-ho 333,0,225 1 152 ogonek
-lq 333,725 2 153 quotedblleft
-rq 333,718 2 154 quotedblright
-oe 944,538,15 0 155 oe
-/l 222,718,0,20,20 2 156 lslash
-Bq 333,106,149 0 157 quotedblbase
-OE 1000,737,19 2 158 OE
-/L 556,718,0,0,20 2 159 Lslash
-r! 333,523,195 0 161 exclamdown
-ct 556,623,115 0 162 cent
-Po 556,718,16 2 163 sterling
-Cs 556,603 0 164 currency
-Ye 556,688 2 165 yen
-bb 260,737,19 2 166 brokenbar
-sc 556,737,191 2 167 section
-ad 333,706 2 168 dieresis
-co 737,737,19,15,14 2 169 copyright
-Of 370,737 2 170 ordfeminine
-fo 333,446 0 171 guilsinglleft
-tno 584,390 0 172 logicalnot
-\- 584,289 0 173 minus
-rg 737,737,19,15,14 2 174 registered
-a- 333,684 2 175 macron
-de 400,703 2 176 degree
-t+- 584,506 0 177 plusminus
-S2 333,703 2 178 twosuperior
-S3 333,703 2 179 threesuperior
-aa 333,734 2 180 acute
-mc 556,523,207 1 181 mu
-ps 537,718,173 2 182 paragraph
-pc 278,315 0 183 periodcentered
-ac 333,0,225 1 184 cedilla
-S1 333,703 2 185 onesuperior
-Om 365,737 2 186 ordmasculine
-fc 333,446 0 187 guilsinglright
-14 834,703,19 2 188 onequarter
-12 834,703,19 2 189 onehalf
-34 834,703,19 2 190 threequarters
-r? 611,525,201 0 191 questiondown
-`A 667,929 2 192 Agrave
-'A 667,929 2 193 Aacute
-^A 667,929 2 194 Acircumflex
-~A 667,917 2 195 Atilde
-:A 667,901 2 196 Adieresis
-oA 667,931 2 197 Aring
-AE 1000,718 2 198 AE
-,C 722,737,225 3 199 Ccedilla
-`E 667,929 2 200 Egrave
-'E 667,929 2 201 Eacute
-^E 667,929 2 202 Ecircumflex
-:E 667,901 2 203 Edieresis
-`I 278,929,0,0,13 2 204 Igrave
-'I 278,929,0,14 2 205 Iacute
-^I 278,929,0,7,6 2 206 Icircumflex
-:I 278,901 2 207 Idieresis
--D 722,718 2 208 Eth
-~N 722,917 2 209 Ntilde
-`O 778,929,19 2 210 Ograve
-'O 778,929,19 2 211 Oacute
-^O 778,929,19 2 212 Ocircumflex
-~O 778,917,19 2 213 Otilde
-:O 778,901,19 2 214 Odieresis
-tmu 584,506 0 215 multiply
-/O 778,737,19 2 216 Oslash
-`U 722,929,19 2 217 Ugrave
-'U 722,929,19 2 218 Uacute
-^U 722,929,19 2 219 Ucircumflex
-:U 722,901,19 2 220 Udieresis
-'Y 667,929 2 221 Yacute
-TP 667,718 2 222 Thorn
-ss 611,728,15 2 223 germandbls
-`a 556,734,15 2 224 agrave
-'a 556,734,15 2 225 aacute
-^a 556,734,15 2 226 acircumflex
-~a 556,722,15 2 227 atilde
-:a 556,706,15 2 228 adieresis
-oa 556,756,15 2 229 aring
-ae 889,538,15 0 230 ae
-,c 500,538,225 1 231 ccedilla
-`e 556,734,15 2 232 egrave
-'e 556,734,15 2 233 eacute
-^e 556,734,15 2 234 ecircumflex
-:e 556,706,15 2 235 edieresis
-`i 278,734,0,0,13 2 236 igrave
-'i 278,734,0,14 2 237 iacute
-^i 278,734,0,7,6 2 238 icircumflex
-:i 278,706 2 239 idieresis
-Sd 556,737,15 2 240 eth
-~n 556,722 2 241 ntilde
-`o 556,734,14 2 242 ograve
-'o 556,734,14 2 243 oacute
-^o 556,734,14 2 244 ocircumflex
-~o 556,722,14 2 245 otilde
-:o 556,706,14 2 246 odieresis
-tdi 584,524,19 0 247 divide
-/o 611,545,22 0 248 oslash
-`u 556,734,15 2 249 ugrave
-'u 556,734,15 2 250 uacute
-^u 556,734,15 2 251 ucircumflex
-:u 556,706,15 2 252 udieresis
-'y 500,734,214 3 253 yacute
-Tp 556,718,207 3 254 thorn
-:y 500,706,214 3 255 ydieresis
-u2026 1000,106 0 256 ellipsis
diff --git a/contrib/groff/font/devps/Makefile.sub b/contrib/groff/font/devps/Makefile.sub
deleted file mode 100644
index 337ae12bfe57..000000000000
--- a/contrib/groff/font/devps/Makefile.sub
+++ /dev/null
@@ -1,38 +0,0 @@
-DEV=ps
-DISTFILES=text.enc download \
- S ZD ZDR SS AB ABI AI AR BMB BMBI BMI BMR \
- CB CBI CI CR HB HBI HI HR HNB HNBI HNI HNR \
- NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI \
- EURO freeeuro.pfa
-PSFILES=prologue symbolsl.pfa zapfdr.pfa
-DEVGENFILES=generate/Makefile generate/dingbats.map \
- generate/dingbats.rmap generate/lgreekmap \
- generate/symbolchars generate/symbolsl.afm generate/textmap
-DEVGENSCRIPTS=generate/afmname generate/symbol.sed
-DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES)
-DEVSCRIPTS=$(DEVGENSCRIPTS)
-
-CLEANADD=DESC $(PSFILES)
-
-DESC: DESC.in
- -rm -f DESC
- cat $(srcdir)/DESC.in >DESC
- echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC
- if test "$(PAGE)" = A4; then \
- echo "papersize a4" >>DESC; \
- else \
- echo "papersize letter" >>DESC; \
- fi
- test -z '$(PSPRINT)' || echo print '$(PSPRINT)' >>DESC
-
-fonts: DESC
- $(MAKE) -f $(srcdir)/generate/Makefile \
- srcdir=$(srcdir)/generate DESC=$(srcdir)/DESC.in
-
-prologue: prologue.ps
-zapfdr.pfa: zapfdr.ps
-symbolsl.pfa: symbolsl.ps
-
-$(PSFILES):
- -rm -f $@
- sed -f $(srcdir)/psstrip.sed $? >$@
diff --git a/contrib/groff/font/devps/NB b/contrib/groff/font/devps/NB
deleted file mode 100644
index bc81dd013162..000000000000
--- a/contrib/groff/font/devps/NB
+++ /dev/null
@@ -1,392 +0,0 @@
-name NB
-internalname NewCenturySchlbk-Bold
-spacewidth 287
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -18
-A w -18
-A v -18
-A ' -74
-A cq -74
-A rq -74
-A Y -91
-A W -74
-A V -74
-A U -18
-A T -55
-C . -18
-C , -18
-D . -25
-D , -25
-F r -18
-F . -125
-F o -55
-F i -18
-F e -55
-F , -125
-F a -74
-J u -18
-J . -55
-J o -18
-J e -18
-J , -55
-J a -18
-J A -18
-K y -25
-K u -18
-L y -25
-L ' -100
-L cq -100
-L rq -100
-L Y -74
-L W -74
-L V -100
-L T -100
-N . -18
-N , -18
-O . -25
-O , -25
-O T 10
-P . -150
-P o -55
-P e -55
-P , -150
-P a -55
-P A -74
-S . -18
-S , -18
-T u -18
-T r -18
-T . -100
-T o -74
-T i -18
-T - -125
-T hy -125
-T e -74
-T , -100
-T a -74
-T O 10
-T A -55
-U . -25
-U , -25
-U A -18
-V u -55
-V ; -37
-V . -125
-V o -74
-V i -18
-V - -100
-V hy -100
-V e -74
-V , -125
-V : -37
-V a -74
-V A -74
-W y -25
-W u -37
-W ; -55
-W . -100
-W o -74
-W i -18
-W - -100
-W hy -100
-W e -74
-W , -100
-W : -55
-W a -74
-W A -74
-Y u -55
-Y ; -25
-Y . -100
-Y o -100
-Y i -18
-Y - -125
-Y hy -125
-Y e -100
-Y , -100
-Y : -25
-Y a -100
-Y A -91
-: u0020 -18
-, u0020 -18
-, ' -18
-, cq -18
-, rq -18
-f ' 75
-f cq 75
-f rq 75
-. u0020 -18
-. ' -18
-. cq -18
-. rq -18
-lq A -74
-rq u0020 -18
-` A -74
-oq A -74
-' s -25
-cq s -25
-' d -25
-cq d -25
-r . -74
-r , -74
-; u0020 -18
-u0020 ` -18
-u0020 oq -18
-u0020 lq -18
-u0020 Y -18
-u0020 W -18
-u0020 V -18
-u0020 T -18
-u0020 A -18
-v . -100
-v , -100
-w . -100
-w , -100
-y . -100
-y , -100
-charset
-ha 606,690 2 0 asciicircum
-ti 606,346 0 1 asciitilde
-vS 667,952,15 2 2 Scaron
-vZ 667,952 2 3 Zcaron
-vs 500,725,15 2 4 scaron
-vz 537,725 2 5 zcaron
-:Y 722,921,0,12,12 2 6 Ydieresis
-tm 1000,722 2 7 trademark
-aq 241,737 2 8 quotesingle
-space 287 0 32 space
-! 296,737,15 2 33 exclam
-" 333,737 2 34 quotedbl
-dq "
-# 574,690 2 35 numbersign
-sh "
-$ 574,810,141 2 36 dollar
-Do "
-% 833,705,15 2 37 percent
-& 852,737,15 2 38 ampersand
-' 241,737 2 39 quoteright
-cq "
-( 389,745,117 2 40 parenleft
-) 389,745,117 2 41 parenright
-* 500,737 2 42 asterisk
-+ 606,506 0 43 plus
-, 278,175,184 0 44 comma
-- 333,302 0 45 hyphen
-hy "
-. 278,175,15 0 46 period
-/ 278,737,15,42,42 2 47 slash
-sl "
-0 574,705,15 2 48 zero
-1 574,705 2 49 one
-2 574,705 2 50 two
-3 574,705,15 2 51 three
-4 574,705 2 52 four
-5 574,705,15 2 53 five
-6 574,705,15 2 54 six
-7 574,705,15 2 55 seven
-8 574,705,15 2 56 eight
-9 574,705,15 2 57 nine
-: 278,485,15 0 58 colon
-; 278,485,184 0 59 semicolon
-< 606,515,9 0 60 less
-= 606,403 0 61 equal
-> 606,515,9 0 62 greater
-? 500,737,15 2 63 question
-@ 747,737,15,3,2 2 64 at
-at "
-A 759,737,0,19,19 2 65 A
-B 778,722 2 66 B
-C 778,737,15 2 67 C
-D 833,722 2 68 D
-E 759,722 2 69 E
-F 722,722 2 70 F
-G 833,737,15 2 71 G
-H 870,722 2 72 H
-I 444,722 2 73 I
-J 648,722,15 2 74 J
-K 815,722,0,7 2 75 K
-L 722,722 2 76 L
-M 981,722 2 77 M
-N 833,722,10 2 78 N
-O 833,737,15 2 79 O
-P 759,722 2 80 P
-Q 833,737,189 2 81 Q
-R 815,722,15 2 82 R
-S 667,737,15 2 83 S
-T 722,722 2 84 T
-U 833,722,15 2 85 U
-V 759,722,10,19,19 2 86 V
-W 981,722,10 2 87 W
-X 722,722,0,12,12 2 88 X
-Y 722,722,0,12,12 2 89 Y
-Z 667,722 2 90 Z
-[ 389,737,109 2 91 bracketleft
-lB "
-\ 606,737,15 2 92 backslash
-rs "
-] 389,737,109 2 93 bracketright
-rB "
-a^ 333,725,0,11,10 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 241,737 2 96 quoteleft
-oq "
-a 611,485,15 0 97 a
-b 648,737,15 2 98 b
-c 556,485,15 0 99 c
-d 667,737,15 2 100 d
-e 574,485,15 0 101 e
-f 389,737,0,72 2 102 f
-g 611,535,205,12 1 103 g
-h 685,737 2 104 h
-i 370,737 2 105 i
-j 352,737,205,0,86 3 106 j
-k 667,737 2 107 k
-l 352,737 2 108 l
-m 963,485 0 109 m
-n 685,485 0 110 n
-o 611,485,15 0 111 o
-p 667,485,205 1 112 p
-q 648,485,205 1 113 q
-r 519,485 0 114 r
-s 500,485,15 0 115 s
-t 426,675,15 2 116 t
-u 685,475,15 0 117 u
-v 611,475,10 0 118 v
-w 889,475,10 0 119 w
-x 611,475 0 120 x
-y 611,475,205 1 121 y
-z 537,475 0 122 z
-lC 389,737,109 2 123 braceleft
-{ "
-ba 606,750,250 3 124 bar
-| "
-rC 389,737,109 2 125 braceright
-} "
-a~ 333,705,0,24,24 2 126 tilde
-~ "
-bq 241,175,184 0 128 quotesinglbase
-Fo 500,397 0 129 guillemotleft
-Fc 500,397 0 130 guillemotright
-bu 606,542 0 131 bullet
-Fn 574,737,205 3 132 florin
-f/ 167,705,15,165,165 2 133 fraction
-%0 1000,705,15 2 134 perthousand
-dg 500,737,101 2 135 dagger
-dd 500,737,89 2 136 daggerdbl
-en 500,292 0 137 endash
-em 1000,292 0 138 emdash
-fi 685,737 2 140 fi
-fl 685,737 2 141 fl
-.i 370,475 0 144 dotlessi
-ga 333,737 2 146 grave
-a" 333,737,0,98,16 2 147 hungarumlaut
-a. 333,694 2 148 dotaccent
-ab 333,714 2 149 breve
-ah 333,725,0,11,10 2 150 caron
-ao 333,761 2 151 ring
-ho 333,3,163,13 0 152 ogonek
-lq 481,737 2 153 quotedblleft
-rq 481,737 2 154 quotedblright
-oe 907,485,15 0 155 oe
-/l 352,737 2 156 lslash
-Bq 481,175,184 0 157 quotedblbase
-OE 1000,722 2 158 OE
-/L 722,722 2 159 Lslash
-r! 296,547,205 1 161 exclamdown
-ct 574,572,102 0 162 cent
-Po 574,705,15 2 163 sterling
-Cs 574,605 0 164 currency
-Ye 574,690,0,10,10 2 165 yen
-bb 606,675,175 2 166 brokenbar
-sc 500,737,86 2 167 section
-ad 333,694,0,12,12 2 168 dieresis
-co 747,737,15,3,2 2 169 copyright
-Of 367,705,0,26 2 170 ordfeminine
-fo 333,397 0 171 guilsinglleft
-tno 606,403 0 172 logicalnot
-\- 606,307 0 173 minus
-rg 747,737,15,3,2 2 174 registered
-a- 333,664,0,6,6 0 175 macron
-de 400,705 2 176 degree
-t+- 606,506 0 177 plusminus
-S2 344,705,0,6,3 2 178 twosuperior
-S3 344,705,0,11,3 2 179 threesuperior
-aa 333,737 2 180 acute
-mc 685,475,205 1 181 mu
-ps 747,722,71 2 182 paragraph
-pc 278,372 0 183 periodcentered
-ac 333,0,224 1 184 cedilla
-S1 344,705 2 185 onesuperior
-Om 367,705 2 186 ordmasculine
-fc 333,397 0 187 guilsinglright
-14 861,705,15 2 188 onequarter
-12 861,705,15 2 189 onehalf
-34 861,705,15 2 190 threequarters
-r? 500,547,205 1 191 questiondown
-`A 759,964,0,19,19 2 192 Agrave
-'A 759,964,0,19,19 2 193 Aacute
-^A 759,952,0,19,19 2 194 Acircumflex
-~A 759,932,0,19,19 2 195 Atilde
-:A 759,921,0,19,19 2 196 Adieresis
-oA 759,988,0,19,19 2 197 Aring
-AE 981,722,0,0,29 2 198 AE
-,C 778,737,224 3 199 Ccedilla
-`E 759,964 2 200 Egrave
-'E 759,964 2 201 Eacute
-^E 759,952 2 202 Ecircumflex
-:E 759,921 2 203 Edieresis
-`I 444,964 2 204 Igrave
-'I 444,964 2 205 Iacute
-^I 444,952 2 206 Icircumflex
-:I 444,921 2 207 Idieresis
--D 833,722 2 208 Eth
-~N 833,932,10 2 209 Ntilde
-`O 833,964,15 2 210 Ograve
-'O 833,964,15 2 211 Oacute
-^O 833,952,15 2 212 Ocircumflex
-~O 833,932,15 2 213 Otilde
-:O 833,921,15 2 214 Odieresis
-tmu 606,491 0 215 multiply
-/O 833,775,53 2 216 Oslash
-`U 833,964,15 2 217 Ugrave
-'U 833,964,15 2 218 Uacute
-^U 833,952,15 2 219 Ucircumflex
-:U 833,921,15 2 220 Udieresis
-'Y 722,964,0,12,12 2 221 Yacute
-TP 759,722 2 222 Thorn
-ss 611,737,15,0,2 2 223 germandbls
-`a 611,737,15 2 224 agrave
-'a 611,737,15 2 225 aacute
-^a 611,725,15 2 226 acircumflex
-~a 611,705,15 2 227 atilde
-:a 611,694,15 2 228 adieresis
-oa 611,761,15 2 229 aring
-ae 870,485,15 0 230 ae
-,c 556,485,224 1 231 ccedilla
-`e 574,737,15 2 232 egrave
-'e 574,737,15 2 233 eacute
-^e 574,725,15 2 234 ecircumflex
-:e 574,694,15 2 235 edieresis
-`i 370,737 2 236 igrave
-'i 370,737 2 237 iacute
-^i 370,725 2 238 icircumflex
-:i 370,694 2 239 idieresis
-Sd 611,737,15 2 240 eth
-~n 685,705 2 241 ntilde
-`o 611,737,15 2 242 ograve
-'o 611,737,15 2 243 oacute
-^o 611,725,15 2 244 ocircumflex
-~o 611,705,15 2 245 otilde
-:o 611,694,15 2 246 odieresis
-tdi 606,546,40 0 247 divide
-/o 611,573,103 0 248 oslash
-`u 685,737,15 2 249 ugrave
-'u 685,737,15 2 250 uacute
-^u 685,725,15 2 251 ucircumflex
-:u 685,694,15 2 252 udieresis
-'y 611,737,205 3 253 yacute
-Tp 667,737,205 3 254 thorn
-:y 611,694,205 3 255 ydieresis
-u2026 1000,175,15 0 256 ellipsis
diff --git a/contrib/groff/font/devps/NBI b/contrib/groff/font/devps/NBI
deleted file mode 100644
index aa4b09e2b3c2..000000000000
--- a/contrib/groff/font/devps/NBI
+++ /dev/null
@@ -1,510 +0,0 @@
-name NBI
-internalname NewCenturySchlbk-BoldItalic
-slant 16
-spacewidth 287
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -33
-A w -25
-A v -10
-A u -15
-A ' -95
-A cq -95
-A rq -95
-A Y -70
-A W -84
-A V -100
-A U -32
-A T 5
-A Q 5
-A O 5
-A G 5
-A C 5
-B . 15
-B , 15
-B U 15
-B A -11
-C A -5
-D . -11
-D , -11
-D Y 6
-D W -11
-D V -18
-F r -27
-F . -91
-F o -47
-F i -41
-F e -41
-F , -91
-F a -47
-F A -79
-J u -39
-J . -74
-J o -40
-J e -33
-J , -74
-J a -40
-J A -30
-K y -48
-K u -4
-K o -4
-K e 18
-L y -30
-L ' -100
-L cq -100
-L rq -100
-L Y -55
-L W -69
-L V -97
-L T -75
-N . -49
-N , -49
-O . -18
-O , -18
-O X -18
-O W -15
-O V -24
-O A -5
-P . -100
-P o -40
-P e -33
-P , -100
-P a -40
-P A -80
-R W -14
-R V -24
-S . -18
-S , -18
-T y -30
-T w -30
-T u -22
-T r -9
-T . -55
-T o -40
-T i -22
-T - -75
-T hy -75
-T h -9
-T e -33
-T , -55
-T a -40
-T O 11
-T A -60
-U . -25
-U , -25
-U A -42
-V u -70
-V ; 6
-V . -94
-V o -71
-V i -35
-V - -94
-V hy -94
-V e -66
-V , -94
-V : -49
-V a -55
-V O -19
-V G -12
-V A -100
-W y -41
-W u -25
-W ; -22
-W . -86
-W o -33
-W i -27
-W - -61
-W hy -61
-W h 5
-W e -39
-W , -86
-W : -22
-W a -33
-W O -11
-W A -66
-Y u -58
-Y ; -55
-Y . -91
-Y o -77
-Y i -22
-Y - -91
-Y hy -91
-Y e -71
-Y , -91
-Y : -55
-Y a -77
-Y A -79
-a y -8
-a w -8
-a v 6
-b y -6
-b v 8
-b . 6
-b , 6
-c y -20
-c . -8
-c l -13
-c k -8
-c h -18
-c , -8
-: u0020 -18
-, u0020 -18
-, ' -18
-, cq -18
-, rq -18
-d y -15
-d w -15
-e y -15
-e x -5
-e w -15
-e p -11
-e g -4
-e b -8
-f ' 105
-f cq 105
-f rq 105
-f . -28
-f o 7
-f l 7
-f i 7
-f e 14
-f .i 7
-f , -28
-f a 8
-g y -11
-g r 11
-g . -5
-g , -5
-h y -20
-i v 7
-k y -15
-k o -22
-k e -16
-l y -7
-l w -7
-m y -20
-m u -11
-n y -20
-n v -7
-n u -11
-o y -11
-o w -8
-o v 6
-p y -4
-p . 8
-p , 8
-. u0020 -18
-. ' -18
-. cq -18
-. rq -18
-lq ` 20
-lq oq 20
-lq A -60
-rq u0020 -18
-` A -80
-oq A -80
-' v -16
-cq v -16
-' t -22
-cq t -22
-' s -46
-cq s -46
-' r -9
-cq r -9
-' l -22
-cq l -22
-' d -41
-cq d -41
-r y -20
-r v -7
-r u -11
-r t -11
-r ; 9
-r s -20
-r ' 9
-r cq 9
-r . -90
-r p -17
-r o -11
-r l -14
-r k 9
-r i -14
-r - -16
-r hy -16
-r g -11
-r e -7
-r d -7
-r , -90
-r : 9
-r a -11
-s . 11
-s , 11
-; u0020 -18
-u0020 lq -18
-u0020 Y -18
-u0020 W -33
-u0020 V -24
-u0020 T -18
-u0020 A -22
-v . -11
-v o -6
-v , -11
-v a -6
-w . -17
-w o -14
-w e -8
-w , -17
-w a -14
-x e 5
-y . -25
-y o 8
-y e 15
-y , -25
-y a 8
-z e 4
-charset
-ha 606,690,0,0,-16 2 0 asciicircum
-ti 606,346,0,0,-22 0 1 asciitilde
-vS 685,930,15,31,49,31 2 2 Scaron
-vZ 704,930,0,57,83,57 2 3 Zcaron
-vs 481,705,15,46,50,46 2 4 scaron
-vz 519,695,15,4,69,4 2 5 zcaron
-:Y 704,915,0,121,37,109 2 6 Ydieresis
-tm 950,722,0,117,8,109 2 7 trademark
-aq 287,737,0,13,-62,13 2 8 quotesingle
-space 287 0 32 space
-! 333,737,15,50,50,50 2 33 exclam
-" 400,737,0,78,-16,78 2 34 quotedbl
-dq "
-# 574,690,0,20,20,20 2 35 numbersign
-sh "
-$ 574,810,120,41,41,41 2 36 dollar
-Do "
-% 889,727,28,0,-4 2 37 percent
-& 889,737,15,0,18 2 38 ampersand
-' 259,737,0,66,2,66 2 39 quoteright
-cq "
-( 407,745,117,97,-22,97 2 40 parenleft
-) 407,745,117,0,120 2 41 parenright
-* 500,737,0,48,-8,48 2 42 asterisk
-+ 606,506 0 43 plus
-, 287,157,192,0,107 0 44 comma
-- 333,299,0,0,48 0 45 hyphen
-hy "
-. 287,157,15,0,70 0 46 period
-/ 278,737,15,92,91,92 2 47 slash
-sl "
-0 574,705,15,29,29,29 2 48 zero
-1 574,705,0,0,25 2 49 one
-2 574,705,3,14,88,14 2 50 two
-3 574,705,15,12,57,12 2 51 three
-4 574,705,0,20,63,20 2 52 four
-5 574,705,15,50,50,50 2 53 five
-6 574,705,15,50,19,50 2 54 six
-7 574,705,15,69,-14,69 2 55 seven
-8 574,705,15,28,50,28 2 56 eight
-9 574,705,15,19,50,19 2 57 nine
-: 287,477,15,0,70 0 58 colon
-; 287,477,192,0,107 0 59 semicolon
-< 606,515,9 0 60 less
-= 606,403 0 61 equal
-> 606,514,8 0 62 greater
-? 481,737,15,20,-29,20 2 63 question
-@ 747,737,15,54,54,54 2 64 at
-at "
-A 741,737,0,25,125,25 2 65 A
-B 759,722,0,12,100,12 2 66 B
-C 759,737,15,50,13,50 2 67 C
-D 833,722,0,13,97,13 2 68 D
-E 741,722,0,39,91,39 2 69 E
-F 704,722,0,76,91,76 2 70 F
-G 815,737,15,40,13,40 2 71 G
-H 870,722,0,91,91,91 2 72 H
-I 444,722,0,91,91,91 2 73 I
-J 667,722,15,91,70,91 2 74 J
-K 778,722,0,104,91,104 2 75 K
-L 704,722,0,16,91,16 2 76 L
-M 944,722,0,94,94,94 2 77 M
-N 852,722,10,111,111,109 2 78 N
-O 833,737,15,13,13,13 2 79 O
-P 741,722,0,39,91,39 2 80 P
-Q 833,737,189,13,13,13 2 81 Q
-R 796,722,15,3,91,3 2 82 R
-S 685,737,15,31,49,31 2 83 S
-T 722,722,0,87,9,87 2 84 T
-U 833,722,15,117,-38,109 2 85 U
-V 741,722,10,111,18,109 2 86 V
-W 944,722,10,106,10,106 2 87 W
-X 741,722,0,110,132,109 2 88 X
-Y 704,722,0,121,37,109 2 89 Y
-Z 704,722,0,57,83,57 2 90 Z
-[ 407,737,109,107,49,107 2 91 bracketleft
-lB "
-\ 606,737,15,0,-111 2 92 backslash
-rs "
-] 407,737,109,5,151,5 2 93 bracketright
-rB "
-a^ 333,705,0,82,27,82 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 259,737,0,65,3,65 2 96 quoteleft
-oq "
-a 667,477,15,19,44,19 0 97 a
-b 611,737,15,0,21 2 98 b
-c 537,477,15,0,50 0 99 c
-d 667,737,15,43,50,43 2 100 d
-e 519,477,15,10,50,10 0 101 e
-f 389,737,205,211,98,109 3 102 f
-g 611,528,205,43,113,43 1 103 g
-h 685,737,15,4,50,4 2 104 h
-i 389,737,15,6,18,6 2 105 i
-j 370,737,205,27,255,27 3 106 j
-k 648,737,15,0,61 2 107 k
-l 389,737,15,36,18,36 2 108 l
-m 944,477,15,15,50,15 0 109 m
-n 685,477,15,4,50,4 0 110 n
-o 574,477,15,6,50,6 0 111 o
-p 648,477,205,0,169 1 112 p
-q 630,477,205,7,50,7 1 113 q
-r 519,486,0,58,50,58 0 114 r
-s 481,477,15,4,50,4 0 115 s
-t 407,650,15,46,26,46 2 116 t
-u 685,477,15,0,20 0 117 u
-v 556,477,15,0,20 0 118 v
-w 833,477,15,0,20 0 119 w
-x 574,477,15,50,96,50 0 120 x
-y 519,477,205,24,116,24 1 121 y
-z 519,477,15,4,69,4 0 122 z
-lC 407,737,109,51,-2,51 2 123 braceleft
-{ "
-ba 606,750,250,0,-199 3 124 bar
-| "
-rC 407,737,109,0,75 2 125 braceright
-} "
-a~ 333,690,0,115,22,109 2 126 tilde
-~ "
-bq 259,157,192,0,107 0 128 quotesinglbase
-Fo 481,407,0,18,85,18 0 129 guillemotleft
-Fc 481,407,0,22,81,22 0 130 guillemotright
-bu 606,542,0,0,-72 0 131 bullet
-Fn 574,737,205,51,93,51 3 132 florin
-f/ 167,705,15,216,216,109 2 133 fraction
-%0 1167,727,28,30,30,30 2 134 perthousand
-dg 500,737,146,58,2,58 2 135 dagger
-dd 500,737,150,58,110,58 2 136 daggerdbl
-en 500,287,0,29,97,29 0 137 endash
-em 1000,287,0,29,97,29 0 138 emdash
-fi 685,737,205,6,120,6 3 140 fi
-fl 685,737,205,36,120,36 3 141 fl
-.i 389,477,15,6,18,6 0 144 dotlessi
-ga 333,722,0,11,-24,11 2 146 grave
-a" 333,722,0,197,35,109 2 147 hungarumlaut
-a. 333,690,0,6,-95,6 2 148 dotaccent
-ab 333,698,0,107,-17,107 2 149 breve
-ah 333,705,0,120,-10,109 2 150 caron
-ao 333,746,0,52,-61,52 2 151 ring
-ho 333,0,155,0,-18 0 152 ogonek
-lq 481,737,0,90,-4,90 2 153 quotedblleft
-rq 481,737,0,79,7,79 2 154 quotedblright
-oe 852,477,15,10,56,10 0 155 oe
-/l 389,737,15,51,45,51 2 156 lslash
-Bq 481,157,192,0,107 0 157 quotedblbase
-OE 963,722,0,76,21,76 2 158 OE
-/L 704,722,0,16,91,16 2 159 Lslash
-r! 333,547,205,6,94,6 1 161 exclamdown
-ct 574,578,144,0,20 0 162 cent
-Po 574,705,15,42,68,42 2 163 sterling
-Cs 574,605,0,23,23,23 0 164 currency
-Ye 574,690,0,105,33,105 2 165 yen
-bb 606,675,175,0,-199 2 166 brokenbar
-sc 500,737,146,65,80,65 2 167 section
-ad 333,690,0,110,17,109 2 168 dieresis
-co 747,737,15,53,52,53 2 169 copyright
-Of 412,705,0,98,3,98 2 170 ordfeminine
-fo 278,407,0,16,75,16 0 171 guilsinglleft
-tno 606,403 0 172 logicalnot
-\- 606,307 0 173 minus
-rg 747,737,15,53,52,53 2 174 registered
-a- 333,649,0,121,3,109 2 175 macron
-de 400,705,0,22,-36,22 2 176 degree
-t+- 606,506 0 177 plusminus
-S2 344,705,0,68,67,68 2 178 twosuperior
-S3 344,705,0,67,47,67 2 179 threesuperior
-aa 333,722,0,89,-73,89 2 180 acute
-mc 685,477,205,0,139 1 181 mu
-ps 650,722,131,81,25,81 2 182 paragraph
-pc 287,372,0,0,-7 0 183 periodcentered
-ac 333,3,220,0,71 1 184 cedilla
-S1 344,705,0,32,31,32 2 185 onesuperior
-Om 356,705,0,88,8,88 2 186 ordmasculine
-fc 278,407,0,15,76,15 0 187 guilsinglright
-14 861,705,15,0,33 2 188 onequarter
-12 861,705,15,0,33 2 189 onehalf
-34 861,705,15,0,15 2 190 threequarters
-r? 481,547,205,0,50 1 191 questiondown
-`A 741,947,0,25,125,25 2 192 Agrave
-'A 741,947,0,25,125,25 2 193 Aacute
-^A 741,930,0,25,125,25 2 194 Acircumflex
-~A 741,915,0,25,125,25 2 195 Atilde
-:A 741,915,0,25,125,25 2 196 Adieresis
-oA 741,991,0,25,125,25 2 197 Aring
-AE 889,722,0,76,136,76 2 198 AE
-,C 759,737,220,50,13,50 3 199 Ccedilla
-`E 741,947,0,39,91,39 2 200 Egrave
-'E 741,947,0,39,91,39 2 201 Eacute
-^E 741,930,0,39,91,39 2 202 Ecircumflex
-:E 741,915,0,39,91,39 2 203 Edieresis
-`I 444,947,0,91,91,91 2 204 Igrave
-'I 444,947,0,94,91,94 2 205 Iacute
-^I 444,930,0,91,91,91 2 206 Icircumflex
-:I 444,915,0,115,91,109 2 207 Idieresis
--D 833,722,0,13,97,13 2 208 Eth
-~N 852,915,10,111,111,109 2 209 Ntilde
-`O 833,947,15,13,13,13 2 210 Ograve
-'O 833,947,15,13,13,13 2 211 Oacute
-^O 833,930,15,13,13,13 2 212 Ocircumflex
-~O 833,915,15,13,13,13 2 213 Otilde
-:O 833,915,15,13,13,13 2 214 Odieresis
-tmu 606,491,0,0,-15 0 215 multiply
-/O 833,790,68,15,15,15 2 216 Oslash
-`U 833,947,15,117,-38,109 2 217 Ugrave
-'U 833,947,15,117,-38,109 2 218 Uacute
-^U 833,930,15,117,-38,109 2 219 Ucircumflex
-:U 833,915,15,117,-38,109 2 220 Udieresis
-'Y 704,947,0,121,37,109 2 221 Yacute
-TP 741,722,0,0,91 2 222 Thorn
-ss 574,737,205,16,141,16 3 223 germandbls
-`a 667,722,15,19,44,19 2 224 agrave
-'a 667,722,15,19,44,19 2 225 aacute
-^a 667,705,15,19,44,19 2 226 acircumflex
-~a 667,690,15,19,44,19 2 227 atilde
-:a 667,690,15,19,44,19 2 228 adieresis
-oa 667,746,15,19,44,19 2 229 aring
-ae 815,477,15,10,68,10 0 230 ae
-,c 537,477,220,0,50 1 231 ccedilla
-`e 519,722,15,10,50,10 2 232 egrave
-'e 519,722,15,10,50,10 2 233 eacute
-^e 519,705,15,10,50,10 2 234 ecircumflex
-:e 519,690,15,17,50,17 2 235 edieresis
-`i 389,715,15,6,18,6 2 236 igrave
-'i 389,715,15,31,18,31 2 237 iacute
-^i 389,698,15,24,29,24 2 238 icircumflex
-:i 389,683,15,52,19,52 2 239 idieresis
-Sd 574,752,15,6,50,6 2 240 eth
-~n 685,690,15,4,50,4 2 241 ntilde
-`o 574,722,15,6,50,6 2 242 ograve
-'o 574,722,15,6,50,6 2 243 oacute
-^o 574,705,15,6,50,6 2 244 ocircumflex
-~o 574,690,15,6,50,6 2 245 otilde
-:o 574,690,15,6,50,6 2 246 odieresis
-tdi 606,546,40 0 247 divide
-/o 574,583,121,6,50,6 0 248 oslash
-`u 685,722,15,0,20 2 249 ugrave
-'u 685,722,15,0,20 2 250 uacute
-^u 685,705,15,0,20 2 251 ucircumflex
-:u 685,690,15,0,20 2 252 udieresis
-'y 519,722,205,24,116,24 3 253 yacute
-Tp 648,737,205,0,169 3 254 thorn
-:y 519,690,205,24,116,24 3 255 ydieresis
-u2026 1000,157,15,0,-31 0 256 ellipsis
diff --git a/contrib/groff/font/devps/NI b/contrib/groff/font/devps/NI
deleted file mode 100644
index aab0a0b67b94..000000000000
--- a/contrib/groff/font/devps/NI
+++ /dev/null
@@ -1,453 +0,0 @@
-name NI
-internalname NewCenturySchlbk-Italic
-slant 16
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -55
-A w -18
-A v -18
-A u -18
-A ' -125
-A cq -125
-A rq -125
-A Y -55
-A W -74
-A V -74
-A U -37
-A T -30
-A Q -18
-A O -18
-A G -18
-A C -18
-B . -50
-B , -50
-C . -50
-C , -50
-D . -50
-D , -50
-D Y -18
-D W -18
-D V -18
-F r -55
-F . -125
-F o -55
-F i -10
-F e -55
-F , -125
-F a -55
-F A -35
-G . -50
-G , -50
-J u -18
-J . -100
-J o -37
-J e -37
-J , -100
-J a -37
-J A -18
-L y -50
-L ' -125
-L cq -125
-L rq -125
-L Y -100
-L W -100
-L V -100
-L T -100
-N . -60
-N , -60
-O . -50
-O , -50
-O Y -18
-O X -18
-O V -18
-O T 18
-P . -125
-P o -55
-P e -55
-P , -125
-P a -55
-P A -50
-Q . -20
-Q , -20
-R Y -18
-R W -18
-R V -18
-R U -18
-S . -50
-S , -50
-T y -50
-T w -50
-T u -50
-T ; -50
-T r -50
-T . -100
-T o -74
-T i -18
-T - -100
-T hy -100
-T h -25
-T e -74
-T , -100
-T : -50
-T a -74
-T O 18
-U . -100
-U , -100
-U A -18
-V u -75
-V ; -75
-V . -100
-V o -75
-V i -50
-V - -100
-V hy -100
-V e -75
-V , -100
-V : -75
-V a -75
-V A -37
-W y -55
-W u -55
-W ; -75
-W . -100
-W o -55
-W i -20
-W - -75
-W hy -75
-W h -20
-W e -55
-W , -100
-W : -75
-W a -55
-W A -55
-Y u -100
-Y ; -75
-Y . -100
-Y o -100
-Y i -25
-Y - -100
-Y hy -100
-Y e -100
-Y , -100
-Y : -75
-Y a -100
-Y A -55
-b . -50
-b , -50
-b b -10
-c . -50
-c k -18
-c h -18
-c , -50
-: u0020 -37
-, u0020 -37
-, ' -37
-, cq -37
-, rq -37
-e . -37
-e , -37
-f ' 75
-f cq 75
-f rq 75
-f . -75
-f o -10
-f , -75
-g . -50
-g , -50
-l y -10
-o . -50
-o , -50
-p . -50
-p , -50
-. u0020 -37
-. ' -37
-. cq -37
-. rq -37
-lq A -75
-rq u0020 -37
-` ` -37
-` oq -37
-oq ` -37
-oq oq -37
-` A -75
-oq A -75
-' s -25
-cq s -25
-' ' -37
-' cq -37
-cq ' -37
-cq cq -37
-' d -37
-cq d -37
-r ; -25
-r s -10
-r . -125
-r k -18
-r - -75
-r hy -75
-r , -125
-r : -25
-s . -50
-s , -50
-; u0020 -37
-u0020 ` -37
-u0020 oq -37
-u0020 lq -37
-u0020 Y -37
-u0020 W -37
-u0020 V -37
-u0020 T -37
-u0020 A -37
-v . -75
-v , -75
-w . -75
-w , -75
-y . -75
-y , -75
-charset
-ha 606,690,0,0,-39 2 0 asciicircum
-ti 606,322,0,0,-22 0 1 asciitilde
-vS 667,946,15,21,56,21 2 2 Scaron
-vZ 667,946,0,50,75,50 2 3 Zcaron
-vs 444,690,15,40,48,40 2 4 scaron
-vz 463,690,15,30,83,30 2 5 zcaron
-:Y 685,902,0,125,19,107 2 6 Ydieresis
-tm 950,722,0,68,18,68 2 7 trademark
-aq 278,737,0,9,-101,9 2 8 quotesingle
-space 278 0 32 space
-! 333,737,15,20,33,20 2 33 exclam
-" 400,737,0,13,-77,13 2 34 quotedbl
-dq "
-# 556,690,0,22,22,22 2 35 numbersign
-sh "
-$ 556,808,142,30,46,30 2 36 dollar
-Do "
-% 833,705,15,7,7,7 2 37 percent
-& 852,737,15,0,26 2 38 ampersand
-' 204,737,0,75,11,75 2 39 quoteright
-cq "
-( 333,745,117,128,-3,107 2 40 parenleft
-) 333,745,117,0,143 2 41 parenright
-* 500,737,0,50,-30,50 2 42 asterisk
-+ 606,506 0 43 plus
-, 278,109,165,0,89 0 44 comma
-- 333,274,0,0,18 0 45 hyphen
-hy "
-. 278,109,15,0,33 0 46 period
-/ 606,737,15,0,-82 2 47 slash
-sl "
-0 556,705,15,20,20,20 2 48 zero
-1 556,705 2 49 one
-2 556,705,0,0,87 2 50 two
-3 556,705,15,0,52 2 51 three
-4 556,705,0,6,58,6 2 52 four
-5 556,705,15,34,46,34 2 53 five
-6 556,705,15,42,14,42 2 54 six
-7 556,705,15,55,-19,55 2 55 seven
-8 556,705,15,20,44,20 2 56 eight
-9 556,705,15,14,42,14 2 57 nine
-: 278,466,15,1,33,1 0 58 colon
-; 278,466,165,1,89,1 0 59 semicolon
-< 606,514,8,0,14 0 60 less
-= 606,389 0 61 equal
-> 606,514,8,14,-14,14 0 62 greater
-? 444,737,15,23,-52,23 2 63 question
-@ 747,737,15,53,52,53 2 64 at
-at "
-A 704,737,0,14,137,14 2 65 A
-B 722,722,0,0,83 2 66 B
-C 722,737,15,40,10,40 2 67 C
-D 778,722,0,10,83,10 2 68 D
-E 722,722,0,28,83,28 2 69 E
-F 667,722,0,83,83,83 2 70 F
-G 778,737,15,35,10,35 2 71 G
-H 833,722,0,83,83,83 2 72 H
-I 407,722,0,78,83,78 2 73 I
-J 611,722,15,90,64,90 2 74 J
-K 741,722,0,125,83,107 2 75 K
-L 667,722,0,10,83,10 2 76 L
-M 944,722,0,83,83,83 2 77 M
-N 815,722,15,101,101,101 2 78 N
-O 778,737,15,10,10,10 2 79 O
-P 667,722,0,50,83,50 2 80 P
-Q 778,737,190,10,10,10 2 81 Q
-R 741,722,15,1,95,1 2 82 R
-S 667,737,15,21,56,21 2 83 S
-T 685,722,0,90,10,90 2 84 T
-U 815,722,15,102,-43,102 2 85 U
-V 704,722,10,125,14,107 2 86 V
-W 926,722,10,102,-3,102 2 87 W
-X 704,722,0,125,125,107 2 88 X
-Y 685,722,0,125,19,107 2 89 Y
-Z 667,722,0,50,75,50 2 90 Z
-[ 333,737,109,105,105,105 2 91 bracketleft
-lB "
-\ 606,737,15,0,-82 2 92 backslash
-rs "
-] 333,737,109,83,127,83 2 93 bracketright
-rB "
-a^ 333,690,0,48,13,48 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 204,737,0,75,11,75 2 96 quoteleft
-oq "
-a 574,466,15,0,48 0 97 a
-b 556,737,15,0,18 2 98 b
-c 444,466,15,0,48 0 99 c
-d 611,737,15,24,48,24 2 100 d
-e 444,466,15,0,56 0 101 e
-f 333,737,205,187,118,107 3 102 f
-g 537,497,205,36,129,36 1 103 g
-h 611,737,15,1,36,1 2 104 h
-i 333,715,15,0,21 2 105 i
-j 315,715,205,53,216,53 3 106 j
-k 556,737,15,0,50 2 107 k
-l 333,737,15,9,36,9 2 108 l
-m 889,466,15,1,36,1 0 109 m
-n 611,466,15,1,36,1 0 110 n
-o 500,466,15,0,48 0 111 o
-p 574,466,205,0,151 1 112 p
-q 556,466,205,0,48 1 113 q
-r 444,466,0,40,40,40 0 114 r
-s 444,466,15,0,48 0 115 s
-t 352,619,15,26,26,26 2 116 t
-u 611,466,15,0,6 0 117 u
-v 519,466,15,0,19 0 118 v
-w 778,466,15,0,19 0 119 w
-x 500,466,15,21,83,21 0 120 x
-y 500,466,205,0,133 1 121 y
-z 463,466,15,3,83,3 0 122 z
-lC 333,737,109,111,12,107 2 123 braceleft
-{ "
-ba 606,750,250,0,-217 3 124 bar
-| "
-rC 333,737,109,0,137 2 125 braceright
-} "
-a~ 333,649,0,100,-2,100 2 126 tilde
-~ "
-bq 204,109,165,0,128 0 128 quotesinglbase
-Fo 426,402,0,26,65,26 0 129 guillemotleft
-Fc 426,402,0,26,65,26 0 130 guillemotright
-bu 606,542,0,0,-72 0 131 bullet
-Fn 556,737,205,63,108,63 3 132 florin
-f/ 167,705,15,184,184,107 2 133 fraction
-%0 1000,705,15,44,44,44 2 134 perthousand
-dg 500,737,147,56,-1,56 2 135 dagger
-dd 500,737,147,56,104,56 2 136 daggerdbl
-en 500,268,0,37,77,37 0 137 endash
-em 1000,268,0,37,77,37 0 138 emdash
-fi 611,737,205,0,118 3 140 fi
-fl 611,737,205,26,118,26 3 141 fl
-.i 333,466,15,0,21 0 144 dotlessi
-ga 333,690,0,0,-21 2 146 grave
-a" 333,690,0,172,18,107 2 147 hungarumlaut
-a. 333,646,0,0,-96 2 148 dotaccent
-ab 333,677,0,87,-19,87 2 149 breve
-ah 333,690,0,95,-23,95 2 150 caron
-ao 333,712,0,31,-64,31 2 151 ring
-ho 333,0,215,0,-18 1 152 ogonek
-lq 389,737,0,67,11,67 2 153 quotedblleft
-rq 389,737,0,67,11,67 2 154 quotedblright
-oe 778,466,15,0,48 0 155 oe
-/l 333,737,15,57,75,57 2 156 lslash
-Bq 389,109,165,0,128 0 157 quotedblbase
-OE 981,722,0,44,10,44 2 158 OE
-/L 667,722,0,10,83,10 2 159 Lslash
-r! 333,547,205,0,72 1 161 exclamdown
-ct 556,580,144,0,-12 0 162 cent
-Po 556,705,15,38,63,38 2 163 sterling
-Cs 556,597,0,24,24,24 0 164 currency
-Ye 556,690,0,118,10,107 2 165 yen
-bb 606,675,175,0,-217 2 166 brokenbar
-sc 500,737,147,30,60,30 2 167 section
-ad 333,646,0,76,-9,76 2 168 dieresis
-co 747,737,15,53,52,53 2 169 copyright
-Of 422,705,0,48,-22,48 2 170 ordfeminine
-fo 333,402,0,0,10 0 171 guilsinglleft
-tno 606,389 0 172 logicalnot
-\- 606,289 0 173 minus
-rg 747,737,15,53,52,53 2 174 registered
-a- 333,610,0,80,-2,80 0 175 macron
-de 400,705,0,22,-36,22 2 176 degree
-t+- 606,506 0 177 plusminus
-S2 333,705,0,76,50,76 2 178 twosuperior
-S3 333,705,0,76,28,76 2 179 threesuperior
-aa 333,690,0,72,-82,72 2 180 acute
-mc 611,466,205,0,110 1 181 mu
-ps 650,722,132,65,2,65 2 182 paragraph
-pc 278,374,0,0,-21 0 183 periodcentered
-ac 333,0,215,0,47 1 184 cedilla
-S1 333,705,0,28,16,28 2 185 onesuperior
-Om 372,705,0,48,-16,48 2 186 ordmasculine
-fc 333,402,0,0,10 0 187 guilsinglright
-14 834,705,15,0,16 2 188 onequarter
-12 834,705,15,0,16 2 189 onehalf
-34 834,705,15,0,28 2 190 threequarters
-r? 444,547,205,0,53 1 191 questiondown
-`A 704,946,0,14,137,14 2 192 Agrave
-'A 704,946,0,14,137,14 2 193 Aacute
-^A 704,946,0,14,137,14 2 194 Acircumflex
-~A 704,905,0,14,137,14 2 195 Atilde
-:A 704,902,0,14,137,14 2 196 Adieresis
-oA 704,958,0,14,137,14 2 197 Aring
-AE 870,722,0,68,137,68 2 198 AE
-,C 722,737,215,40,10,40 3 199 Ccedilla
-`E 722,946,0,28,83,28 2 200 Egrave
-'E 722,946,0,28,83,28 2 201 Eacute
-^E 722,946,0,28,83,28 2 202 Ecircumflex
-:E 722,902,0,28,83,28 2 203 Edieresis
-`I 407,946,0,78,83,78 2 204 Igrave
-'I 407,946,0,95,83,95 2 205 Iacute
-^I 407,946,0,78,83,78 2 206 Icircumflex
-:I 407,902,0,99,83,99 2 207 Idieresis
--D 778,722,0,10,83,10 2 208 Eth
-~N 815,905,15,101,101,101 2 209 Ntilde
-`O 778,946,15,10,10,10 2 210 Ograve
-'O 778,946,15,10,10,10 2 211 Oacute
-^O 778,946,15,10,10,10 2 212 Ocircumflex
-~O 778,905,15,10,10,10 2 213 Otilde
-:O 778,902,15,10,10,10 2 214 Odieresis
-tmu 606,482,0,0,-24 0 215 multiply
-/O 778,780,68,20,34,20 2 216 Oslash
-`U 815,946,15,102,-43,102 2 217 Ugrave
-'U 815,946,15,102,-43,102 2 218 Uacute
-^U 815,946,15,102,-43,102 2 219 Ucircumflex
-:U 815,902,15,102,-43,102 2 220 Udieresis
-'Y 685,946,0,125,19,107 2 221 Yacute
-TP 667,722,0,10,83,10 2 222 Thorn
-ss 556,737,205,19,126,19 3 223 germandbls
-`a 574,690,15,0,48 2 224 agrave
-'a 574,690,15,0,48 2 225 aacute
-^a 574,690,15,0,48 2 226 acircumflex
-~a 574,649,15,0,48 2 227 atilde
-:a 574,646,15,0,48 2 228 adieresis
-oa 574,712,15,0,48 2 229 aring
-ae 722,466,15,0,68 0 230 ae
-,c 444,466,215,0,48 1 231 ccedilla
-`e 444,690,15,0,56 2 232 egrave
-'e 444,690,15,17,56,17 2 233 eacute
-^e 444,690,15,0,56 2 234 ecircumflex
-:e 444,646,15,21,56,21 2 235 edieresis
-`i 333,690,15,0,21 2 236 igrave
-'i 333,690,15,72,21,72 2 237 iacute
-^i 333,690,15,48,21,48 2 238 icircumflex
-:i 333,646,15,76,21,76 2 239 idieresis
-Sd 500,737,15,0,48 2 240 eth
-~n 611,649,15,1,36,1 2 241 ntilde
-`o 500,690,15,0,48 2 242 ograve
-'o 500,690,15,0,48 2 243 oacute
-^o 500,690,15,0,48 2 244 ocircumflex
-~o 500,649,15,17,48,17 2 245 otilde
-:o 500,646,15,0,48 2 246 odieresis
-tdi 606,528,22 0 247 divide
-/o 500,549,121,0,48 0 248 oslash
-`u 611,690,15,0,6 2 249 ugrave
-'u 611,690,15,0,6 2 250 uacute
-^u 611,690,15,0,6 2 251 ucircumflex
-:u 611,646,15,0,6 2 252 udieresis
-'y 500,690,205,0,133 3 253 yacute
-Tp 574,737,205,0,151 3 254 thorn
-:y 500,646,205,0,133 3 255 ydieresis
-u2026 1000,109,15,0,-9 0 256 ellipsis
diff --git a/contrib/groff/font/devps/NR b/contrib/groff/font/devps/NR
deleted file mode 100644
index 0f4a683d5ab7..000000000000
--- a/contrib/groff/font/devps/NR
+++ /dev/null
@@ -1,440 +0,0 @@
-name NR
-internalname NewCenturySchlbk-Roman
-spacewidth 278
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -37
-A w -25
-A v -37
-A ' -74
-A cq -74
-A rq -74
-A Y -75
-A W -50
-A V -75
-A U -30
-A T -18
-B . -37
-B , -37
-B A -18
-C . -37
-C , -37
-C A -18
-D . -37
-D , -37
-D Y -18
-D V -18
-F r -10
-F . -125
-F o -55
-F i -10
-F e -55
-F , -125
-F a -65
-F A -50
-G . -37
-G , -37
-J u -25
-J . -74
-J o -25
-J e -25
-J , -74
-J a -25
-J A -18
-K y -25
-K o 10
-K e 10
-L y -25
-L ' -100
-L cq -100
-L rq -100
-L Y -74
-L W -74
-L V -91
-L T -75
-N . -55
-N , -55
-O . -37
-O , -37
-O Y -18
-O V -18
-O T 10
-P . -125
-P o -37
-P e -37
-P , -125
-P a -37
-P A -55
-Q . -25
-Q , -25
-S . -37
-S , -37
-T ; -37
-T . -125
-T o -55
-T - -100
-T hy -100
-T e -55
-T , -125
-T : -37
-T a -55
-T O 10
-T A -18
-U . -100
-U , -100
-U A -30
-V u -75
-V ; -75
-V . -125
-V o -75
-V i -18
-V - -100
-V hy -100
-V e -75
-V , -125
-V : -75
-V a -85
-V O -18
-V A -74
-W y -55
-W u -55
-W ; -100
-W . -125
-W o -60
-W i -18
-W - -100
-W hy -100
-W e -60
-W , -125
-W : -100
-W a -75
-W A -50
-Y u -91
-Y ; -75
-Y . -100
-Y o -100
-Y i -18
-Y - -125
-Y hy -125
-Y e -100
-Y , -100
-Y : -75
-Y a -100
-Y O -18
-Y A -75
-a y -10
-a w -10
-a v -10
-b . -18
-b , -18
-c . -18
-c l -7
-c k -7
-c h -7
-c , -18
-: u0020 -37
-, u0020 -37
-, ' -37
-, cq -37
-, rq -37
-e . -18
-e , -18
-f ' 100
-f cq 100
-f rq 100
-f . -37
-f , -37
-g . -25
-g , -25
-o . -18
-o , -18
-p . -18
-p , -18
-. u0020 -37
-. ' -37
-. cq -37
-. rq -37
-lq A -74
-rq u0020 -37
-` ` -25
-` oq -25
-oq ` -25
-oq oq -25
-` A -74
-oq A -74
-' s -25
-cq s -25
-' ' -25
-' cq -25
-cq ' -25
-cq cq -25
-' d -37
-cq d -37
-r . -100
-r - -37
-r hy -37
-r , -100
-s . -25
-s , -25
-; u0020 -37
-u0020 ` -37
-u0020 oq -37
-u0020 lq -37
-u0020 Y -37
-u0020 W -37
-u0020 V -37
-u0020 T -37
-u0020 A -37
-v . -125
-v , -125
-w . -125
-w , -125
-w a -18
-y . -125
-y , -125
-charset
-ha 606,690 2 0 asciicircum
-ti 606,322 0 1 asciitilde
-vS 630,933,15 2 2 Scaron
-vZ 611,933 2 3 Zcaron
-vs 463,695,15 2 4 scaron
-vz 481,695 2 5 zcaron
-:Y 704,883,0,11,11 2 6 Ydieresis
-tm 1000,722 2 7 trademark
-aq 204,737 2 8 quotesingle
-space 278 0 32 space
-! 296,737,15 2 33 exclam
-" 389,737 2 34 quotedbl
-dq "
-# 556,690 2 35 numbersign
-sh "
-$ 556,813,138 2 36 dollar
-Do "
-% 833,705,15 2 37 percent
-& 815,737,15 2 38 ampersand
-' 204,737 2 39 quoteright
-cq "
-( 333,745,117 2 40 parenleft
-) 333,745,117 2 41 parenright
-* 500,737 2 42 asterisk
-+ 606,506 0 43 plus
-, 278,109,185 0 44 comma
-- 333,277 0 45 hyphen
-hy "
-. 278,109,15 0 46 period
-/ 278,737,15,32,32 2 47 slash
-sl "
-0 556,705,15 2 48 zero
-1 556,705 2 49 one
-2 556,705 2 50 two
-3 556,705,15 2 51 three
-4 556,705 2 52 four
-5 556,705,15 2 53 five
-6 556,705,15 2 54 six
-7 556,705,15 2 55 seven
-8 556,705,15 2 56 eight
-9 556,705,15 2 57 nine
-: 278,474,15 0 58 colon
-; 278,474,185 0 59 semicolon
-< 606,514,8 0 60 less
-= 606,389 0 61 equal
-> 606,514,8 0 62 greater
-? 444,737,15 2 63 question
-@ 737,737,15,7,8 2 64 at
-at "
-A 722,737,0,8,8 2 65 A
-B 722,722 2 66 B
-C 722,737,15 2 67 C
-D 778,722 2 68 D
-E 722,722 2 69 E
-F 667,722 2 70 F
-G 778,737,15 2 71 G
-H 833,722 2 72 H
-I 407,722 2 73 I
-J 556,722,15 2 74 J
-K 778,722,0,25 2 75 K
-L 667,722 2 76 L
-M 944,722 2 77 M
-N 815,722,15 2 78 N
-O 778,737,15 2 79 O
-P 667,722 2 80 P
-Q 778,737,190 2 81 Q
-R 722,722,15 2 82 R
-S 630,737,15 2 83 S
-T 667,722 2 84 T
-U 815,722,15 2 85 U
-V 722,722,10,8,8 2 86 V
-W 981,722,10 2 87 W
-X 704,722,0,8,8 2 88 X
-Y 704,722,0,11,11 2 89 Y
-Z 611,722 2 90 Z
-[ 333,737,109 2 91 bracketleft
-lB "
-\ 606,737,15 2 92 backslash
-rs "
-] 333,737,109 2 93 bracketright
-rB "
-a^ 333,695 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 204,737 2 96 quoteleft
-oq "
-a 556,479,15 0 97 a
-b 556,737,15 2 98 b
-c 444,479,15 0 99 c
-d 574,737,15 2 100 d
-e 500,479,15 0 101 e
-f 333,737,0,104 2 102 f
-g 537,494,205,5 1 103 g
-h 611,737 2 104 h
-i 315,722 2 105 i
-j 296,722,205,0,86 3 106 j
-k 593,737 2 107 k
-l 315,737 2 108 l
-m 889,479 0 109 m
-n 611,479 0 110 n
-o 500,479,15 0 111 o
-p 574,479,205 1 112 p
-q 556,479,205 1 113 q
-r 444,479 0 114 r
-s 463,479,15 0 115 s
-t 389,666,15 2 116 t
-u 611,464,15 0 117 u
-v 537,464,10,0,6 0 118 v
-w 778,464,10 0 119 w
-x 537,464 0 120 x
-y 537,464,205 1 121 y
-z 481,464 0 122 z
-lC 333,737,109 2 123 braceleft
-{ "
-ba 606,750,250 3 124 bar
-| "
-rC 333,737,109 2 125 braceright
-} "
-a~ 333,655 0 126 tilde
-~ "
-bq 204,109,185 0 128 quotesinglbase
-Fo 426,398 0 129 guillemotleft
-Fc 426,398 0 130 guillemotright
-bu 606,542 0 131 bullet
-Fn 556,737,205 3 132 florin
-f/ 167,705,15,195,195 2 133 fraction
-%0 1000,705,15 2 134 perthousand
-dg 500,737,147 2 135 dagger
-dd 500,737,149 2 136 daggerdbl
-en 556,268 0 137 endash
-em 1000,268 0 138 emdash
-fi 611,737 2 140 fi
-fl 611,737 2 141 fl
-.i 315,464 0 144 dotlessi
-ga 333,699 2 146 grave
-a" 333,699,0,83,9 2 147 hungarumlaut
-a. 333,645 0 148 dotaccent
-ab 333,685 2 149 breve
-ah 333,695 2 150 caron
-ao 333,722 2 151 ring
-ho 333,0,215 1 152 ogonek
-lq 389,737 2 153 quotedblleft
-rq 389,737 2 154 quotedblright
-oe 833,479,15 0 155 oe
-/l 315,737 2 156 lslash
-Bq 389,109,185 0 157 quotedblbase
-OE 1000,722 2 158 OE
-/L 667,722 2 159 Lslash
-r! 296,547,205 1 161 exclamdown
-ct 556,584,141 0 162 cent
-Po 556,705,15 2 163 sterling
-Cs 556,597 0 164 currency
-Ye 556,690,0,1,1 2 165 yen
-bb 606,675,175 2 166 brokenbar
-sc 500,737,147 2 167 section
-ad 333,645 0 168 dieresis
-co 737,737,15,7,8 2 169 copyright
-Of 334,705,0,4,4 2 170 ordfeminine
-fo 259,398 0 171 guilsinglleft
-tno 606,389 0 172 logicalnot
-\- 606,289 0 173 minus
-rg 737,737,15,7,8 2 174 registered
-a- 333,623 0 175 macron
-de 400,705 2 176 degree
-t+- 606,506 0 177 plusminus
-S2 333,705 2 178 twosuperior
-S3 333,705 2 179 threesuperior
-aa 333,699 2 180 acute
-mc 611,464,205 1 181 mu
-ps 606,722,132 2 182 paragraph
-pc 278,374 0 183 periodcentered
-ac 333,0,215 1 184 cedilla
-S1 333,705 2 185 onesuperior
-Om 300,705 2 186 ordmasculine
-fc 259,398 0 187 guilsinglright
-14 834,705,15 2 188 onequarter
-12 834,705,15 2 189 onehalf
-34 834,705,15 2 190 threequarters
-r? 444,547,205 1 191 questiondown
-`A 722,937,0,8,8 2 192 Agrave
-'A 722,937,0,8,8 2 193 Aacute
-^A 722,933,0,8,8 2 194 Acircumflex
-~A 722,893,0,8,8 2 195 Atilde
-:A 722,883,0,8,8 2 196 Adieresis
-oA 722,965,0,8,8 2 197 Aring
-AE 1000,722 2 198 AE
-,C 722,737,215 3 199 Ccedilla
-`E 722,937 2 200 Egrave
-'E 722,937 2 201 Eacute
-^E 722,933 2 202 Ecircumflex
-:E 722,883 2 203 Edieresis
-`I 407,937 2 204 Igrave
-'I 407,937 2 205 Iacute
-^I 407,933 2 206 Icircumflex
-:I 407,883 2 207 Idieresis
--D 778,722 2 208 Eth
-~N 815,893,15 2 209 Ntilde
-`O 778,937,15 2 210 Ograve
-'O 778,937,15 2 211 Oacute
-^O 778,933,15 2 212 Ocircumflex
-~O 778,893,15 2 213 Otilde
-:O 778,883,15 2 214 Odieresis
-tmu 606,482 0 215 multiply
-/O 778,778,56 2 216 Oslash
-`U 815,937,15 2 217 Ugrave
-'U 815,937,15 2 218 Uacute
-^U 815,933,15 2 219 Ucircumflex
-:U 815,883,15 2 220 Udieresis
-'Y 704,937,0,11,11 2 221 Yacute
-TP 667,722 2 222 Thorn
-ss 574,737,15 2 223 germandbls
-`a 556,699,15 2 224 agrave
-'a 556,699,15 2 225 aacute
-^a 556,695,15 2 226 acircumflex
-~a 556,655,15 0 227 atilde
-:a 556,645,15 0 228 adieresis
-oa 556,732,15 2 229 aring
-ae 796,479,15 0 230 ae
-,c 444,479,215 1 231 ccedilla
-`e 500,699,15 2 232 egrave
-'e 500,699,15 2 233 eacute
-^e 500,695,15 2 234 ecircumflex
-:e 500,645,15 0 235 edieresis
-`i 315,699 2 236 igrave
-'i 315,699 2 237 iacute
-^i 315,695 2 238 icircumflex
-:i 315,645 0 239 idieresis
-Sd 500,752,15 2 240 eth
-~n 611,655 0 241 ntilde
-`o 500,699,15 2 242 ograve
-'o 500,699,15 2 243 oacute
-^o 500,695,15 2 244 ocircumflex
-~o 500,655,15 0 245 otilde
-:o 500,645,15 0 246 odieresis
-tdi 606,528,22 0 247 divide
-/o 500,561,97 0 248 oslash
-`u 611,699,15 2 249 ugrave
-'u 611,699,15 2 250 uacute
-^u 611,695,15 2 251 ucircumflex
-:u 611,645,15 0 252 udieresis
-'y 537,699,205 3 253 yacute
-Tp 574,737,205 3 254 thorn
-:y 537,645,205 1 255 ydieresis
-u2026 1000,109,15 0 256 ellipsis
diff --git a/contrib/groff/font/devps/PB b/contrib/groff/font/devps/PB
deleted file mode 100644
index bed42bf0a1de..000000000000
--- a/contrib/groff/font/devps/PB
+++ /dev/null
@@ -1,370 +0,0 @@
-name PB
-internalname Palatino-Bold
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -70
-A w -70
-A v -70
-A u0020 -18
-A ' -92
-A cq -92
-A Y -111
-A W -90
-A V -129
-A T -92
-F . -111
-F , -111
-F A -55
-L y -74
-L u0020 -18
-L ' -74
-L cq -74
-L Y -92
-L W -92
-L V -92
-L T -74
-P . -129
-P , -129
-P A -74
-R y -30
-R Y -55
-R W -37
-R V -74
-R T -55
-T y -90
-T w -90
-T u -129
-T ; -74
-T s -111
-T r -111
-T . -92
-T o -111
-T i -55
-T - -92
-T hy -92
-T e -111
-T , -92
-T : -74
-T c -129
-T a -111
-T A -92
-V y -90
-V u -92
-V ; -74
-V r -111
-V . -129
-V o -111
-V i -55
-V - -92
-V hy -92
-V e -111
-V , -129
-V : -74
-V a -111
-V A -129
-W y -74
-W u -74
-W ; -37
-W r -74
-W . -37
-W o -74
-W i -37
-W - -37
-W hy -37
-W e -74
-W , -92
-W : -37
-W a -74
-W A -90
-Y v -74
-Y u -74
-Y ; -55
-Y q -92
-Y . -74
-Y p -74
-Y o -74
-Y i -55
-Y - -74
-Y hy -74
-Y e -74
-Y , -74
-Y : -55
-Y a -74
-Y A -55
-f ' 37
-f cq 37
-f f -18
-1 1 -37
-` ` -55
-` oq -55
-oq ` -55
-oq oq -55
-' t -18
-cq t -18
-' u0020 -55
-cq u0020 -55
-' s -55
-cq s -55
-' ' -55
-' cq -55
-cq ' -55
-cq cq -55
-r ' 55
-r cq 55
-r . -55
-r - -18
-r hy -18
-r , -55
-v . -111
-v , -111
-w . -92
-w , -92
-y . -92
-y , -92
-charset
-ha 606,678 2 0 asciicircum
-ti 606,342 0 1 asciitilde
-vS 611,909,17 2 2 Scaron
-vZ 667,909,3 2 3 Zcaron
-vs 444,693,17 2 4 scaron
-vz 500,693,3 2 5 zcaron
-:Y 667,895,3 2 6 Ydieresis
-tm 998,678 2 7 trademark
-aq 227,695 2 8 quotesingle
-space 250 0 32 space
-! 278,688,12 2 33 exclam
-" 402,695 2 34 quotedbl
-dq "
-# 500,673 2 35 numbersign
-sh "
-$ 500,721,114 2 36 dollar
-Do "
-% 889,714,9 2 37 percent
-& 833,684,17 2 38 ampersand
-' 278,695 2 39 quoteright
-cq "
-( 333,723,104 2 40 parenleft
-) 333,723,104 2 41 parenright
-* 444,695 2 42 asterisk
-+ 606,505 0 43 plus
-, 250,141,166,0,6 0 44 comma
-- 333,305 0 45 hyphen
-hy "
-. 250,144,12 0 46 period
-/ 296,720,17,9,9 2 47 slash
-sl "
-0 500,660,17 2 48 zero
-1 500,670,3 2 49 one
-2 500,660,3 2 50 two
-3 500,660,17 2 51 three
-4 500,672,3 2 52 four
-5 500,656,17 2 53 five
-6 500,660,17 2 54 six
-7 500,656,3 2 55 seven
-8 500,660,17 2 56 eight
-9 500,660,17 2 57 nine
-: 250,454,12 0 58 colon
-; 250,454,166,0,6 0 59 semicolon
-< 606,519,15 0 60 less
-= 606,396 0 61 equal
-> 606,519,15 0 62 greater
-? 444,687,12 2 63 question
-@ 747,681,12 2 64 at
-at "
-A 778,686,3 2 65 A
-B 667,681,3 2 66 B
-C 722,695,17 2 67 C
-D 833,681,3 2 68 D
-E 611,681,4 2 69 E
-F 556,681,3 2 70 F
-G 833,695,17 2 71 G
-H 833,681,3 2 72 H
-I 389,681,3 2 73 I
-J 389,681,213,0,11 2 74 J
-K 778,681,3 2 75 K
-L 611,681,4 2 76 L
-M 1000,681,10 2 77 M
-N 833,681,16 2 78 N
-O 833,695,17 2 79 O
-P 611,681,3 2 80 P
-Q 833,695,184 2 81 Q
-R 722,681,3 2 82 R
-S 611,695,17 2 83 S
-T 667,681,3 2 84 T
-U 778,681,17 2 85 U
-V 778,681,3 2 86 V
-W 1000,686,3 2 87 W
-X 667,695,3 2 88 X
-Y 667,695,3 2 89 Y
-Z 667,681,3 2 90 Z
-[ 333,720,104 2 91 bracketleft
-lB "
-\ 606,720 2 92 backslash
-rs "
-] 333,720,104 2 93 bracketright
-rB "
-a^ 333,681,0,2,2 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 278,695 2 96 quoteleft
-oq "
-a 500,471,17 0 97 a
-b 611,720,17 2 98 b
-c 444,471,17 0 99 c
-d 611,720,17 2 100 d
-e 500,471,17 0 101 e
-f 389,720,3 2 102 f
-g 556,471,266 1 103 g
-h 611,720,3 2 104 h
-i 333,706,3 2 105 i
-j 333,706,266 3 106 j
-k 611,720,3 2 107 k
-l 333,720,3 2 108 l
-m 889,471,3 0 109 m
-n 611,471,3 0 110 n
-o 556,471,17 0 111 o
-p 611,471,258 1 112 p
-q 611,471,258 1 113 q
-r 389,471,3 0 114 r
-s 444,471,17 0 115 s
-t 333,632,17 2 116 t
-u 611,471,17 0 117 u
-v 556,459,3 0 118 v
-w 833,471,3 0 119 w
-x 500,471,3 0 120 x
-y 556,459,266 1 121 y
-z 500,459,3 0 122 z
-lC 310,725,117 2 123 braceleft
-{ "
-ba 606,720 2 124 bar
-| "
-rC 310,725,117 2 125 braceright
-} "
-a~ 333,661,0,16,16 2 126 tilde
-~ "
-bq 333,130,160 0 128 quotesinglbase
-Fo 500,438 0 129 guillemotleft
-Fc 500,438 0 130 guillemotright
-bu 606,516 0 131 bullet
-Fn 500,703,242 2 132 florin
-f/ 167,660,0,153,152 2 133 fraction
-%0 1000,724,9 2 134 perthousand
-dg 500,682,6 2 135 dagger
-dd 500,682,245 2 136 daggerdbl
-en 500,291 0 137 endash
-em 1000,291 0 138 emdash
-fi 611,720,3 2 140 fi
-fl 611,720,3 2 141 fl
-.i 333,471,3 0 144 dotlessi
-ga 333,691 2 146 grave
-a" 333,691,0,57,56 2 147 hungarumlaut
-a. 333,671 2 148 dotaccent
-ab 333,669 2 149 breve
-ah 333,685,0,2,2 2 150 caron
-ao 333,700 2 151 ring
-ho 333,0,246 0 152 ogonek
-lq 500,695 2 153 quotedblleft
-rq 500,695 2 154 quotedblright
-oe 833,471,17 0 155 oe
-/l 333,720,3,1,4 2 156 lslash
-Bq 500,130,160 0 157 quotedblbase
-OE 1000,695,17 2 158 OE
-/L 611,681,4 2 159 Lslash
-r! 278,471,227 0 161 exclamdown
-ct 500,554,106 0 162 cent
-Po 500,676,19,1,2 2 163 sterling
-Cs 500,533 0 164 currency
-Ye 500,695,3 2 165 yen
-bb 606,720 2 166 brokenbar
-sc 500,695,217 2 167 section
-ad 333,671,0,8,8 2 168 dieresis
-co 747,695,17 2 169 copyright
-Of 438,660 2 170 ordfeminine
-fo 389,438 0 171 guilsinglleft
-tno 606,396 0 172 logicalnot
-\- 606,298 0 173 minus
-rg 747,695,17 2 174 registered
-a- 333,609 0 175 macron
-de 400,660 2 176 degree
-t+- 606,505 0 177 plusminus
-S2 300,660 2 178 twosuperior
-S3 300,667 2 179 threesuperior
-aa 333,691 2 180 acute
-mc 611,471,225 0 181 mu
-ps 641,683,161 2 182 paragraph
-pc 250,335 0 183 periodcentered
-ac 333,0,225 0 184 cedilla
-S1 300,665 2 185 onesuperior
-Om 488,660 2 186 ordmasculine
-fc 389,438 0 187 guilsinglright
-14 750,665,2 2 188 onequarter
-12 750,665,2 2 189 onehalf
-34 750,667,2 2 190 threequarters
-r? 444,471,231 0 191 questiondown
-`A 778,915,3 2 192 Agrave
-'A 778,915,3 2 193 Aacute
-^A 778,905,3 2 194 Acircumflex
-~A 778,885,3 2 195 Atilde
-:A 778,895,3 2 196 Adieresis
-oA 778,924,3 2 197 Aring
-AE 1000,681,4 2 198 AE
-,C 722,695,225 2 199 Ccedilla
-`E 611,915,4 2 200 Egrave
-'E 611,915,4 2 201 Eacute
-^E 611,905,4 2 202 Ecircumflex
-:E 611,895,4 2 203 Edieresis
-`I 389,915,3 2 204 Igrave
-'I 389,915,3 2 205 Iacute
-^I 389,905,3 2 206 Icircumflex
-:I 389,895,3 2 207 Idieresis
--D 833,681,3 2 208 Eth
-~N 833,885,16 2 209 Ntilde
-`O 833,915,17 2 210 Ograve
-'O 833,915,17 2 211 Oacute
-^O 833,905,17 2 212 Ocircumflex
-~O 833,885,17 2 213 Otilde
-:O 833,895,17 2 214 Odieresis
-tmu 606,483 0 215 multiply
-/O 833,698,20 2 216 Oslash
-`U 778,915,17 2 217 Ugrave
-'U 778,915,17 2 218 Uacute
-^U 778,905,17 2 219 Ucircumflex
-:U 778,895,17 2 220 Udieresis
-'Y 667,915,3 2 221 Yacute
-TP 611,681,3 2 222 Thorn
-ss 611,720,17 2 223 germandbls
-`a 500,711,17 2 224 agrave
-'a 500,711,17 2 225 aacute
-^a 500,701,17 2 226 acircumflex
-~a 500,673,17 2 227 atilde
-:a 500,691,17 2 228 adieresis
-oa 500,700,17 2 229 aring
-ae 778,471,17 0 230 ae
-,c 444,471,225 0 231 ccedilla
-`e 500,711,17 2 232 egrave
-'e 500,711,17 2 233 eacute
-^e 500,701,17 2 234 ecircumflex
-:e 500,691,17 2 235 edieresis
-`i 333,711,3 2 236 igrave
-'i 333,711,3 2 237 iacute
-^i 333,701,3,2,2 2 238 icircumflex
-:i 333,691,3,8,8 2 239 idieresis
-Sd 556,720,17 2 240 eth
-~n 611,673,3 2 241 ntilde
-`o 556,711,17 2 242 ograve
-'o 556,711,17 2 243 oacute
-^o 556,701,17 2 244 ocircumflex
-~o 556,673,17 2 245 otilde
-:o 556,691,17 2 246 odieresis
-tdi 606,510 0 247 divide
-/o 556,471,18 0 248 oslash
-`u 611,711,17 2 249 ugrave
-'u 611,711,17 2 250 uacute
-^u 611,701,17 2 251 ucircumflex
-:u 611,691,17 2 252 udieresis
-'y 556,711,266 3 253 yacute
-Tp 611,720,258 3 254 thorn
-:y 556,691,266 3 255 ydieresis
-u2026 1000,144,12 0 256 ellipsis
diff --git a/contrib/groff/font/devps/PBI b/contrib/groff/font/devps/PBI
deleted file mode 100644
index 602c4e457ec5..000000000000
--- a/contrib/groff/font/devps/PBI
+++ /dev/null
@@ -1,376 +0,0 @@
-name PBI
-internalname Palatino-BoldItalic
-slant 10
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -55
-A w -37
-A v -55
-A u0020 -55
-A ' -55
-A cq -55
-A Y -74
-A W -74
-A V -74
-A T -55
-F u0020 -18
-F . -111
-F , -111
-F A -74
-L y -37
-L u0020 -18
-L ' -55
-L cq -55
-L Y -74
-L W -74
-L V -74
-L T -74
-P u0020 -55
-P . -129
-P , -129
-P A -92
-R y -20
-R Y -37
-R W -55
-R V -55
-R T -37
-T y -80
-T w -50
-T u -92
-T ; -55
-T s -92
-T r -92
-T . -55
-T o -111
-T i -74
-T - -92
-T hy -92
-T e -111
-T , -55
-T : -55
-T c -92
-T a -111
-T O -18
-T A -55
-V y -50
-V u -50
-V ; -37
-V r -74
-V . -111
-V o -74
-V i -50
-V - -37
-V hy -37
-V e -74
-V , -111
-V : -37
-V a -92
-V A -74
-W y -30
-W u -30
-W ; -18
-W r -30
-W . -55
-W o -55
-W i -30
-W e -55
-W , -55
-W : -28
-W a -74
-W A -74
-Y v -30
-Y u -50
-Y ; -55
-Y q -92
-Y . -55
-Y p -74
-Y o -111
-Y i -54
-Y - -55
-Y hy -55
-Y e -92
-Y , -55
-Y : -55
-Y a -111
-Y A -55
-f ' 37
-f cq 37
-f f -37
-1 1 -55
-` ` -55
-` oq -55
-oq ` -55
-oq oq -55
-' t -18
-cq t -18
-' u0020 -37
-cq u0020 -37
-' s -37
-cq s -37
-' ' -55
-' cq -55
-cq ' -55
-cq cq -55
-r ' 55
-r cq 55
-r q -18
-r . -55
-r o -18
-r h -18
-r g -18
-r e -18
-r , -55
-r c -18
-v . -55
-v , -55
-w . -55
-w , -55
-y . -37
-y , -37
-charset
-ha 606,678,0,0,-13 2 0 asciicircum
-ti 606,346,0,0,-1 0 1 asciitilde
-vS 556,896,17,51,0,51 2 2 Scaron
-vZ 667,896,3,59,49,59 2 3 Zcaron
-vs 444,692,17,95,25,66 2 4 scaron
-vz 500,692,17,67,19,66 2 5 zcaron
-:Y 611,880,3,114,-4,66 2 6 Ydieresis
-tm 1000,678,0,11,12,11 2 7 trademark
-aq 250,720,0,93,-77,66 2 8 quotesingle
-space 250 0 32 space
-! 333,695,17,39,-8,39 2 33 exclam
-" 500,720,0,43,-87,43 2 34 quotedbl
-dq "
-# 500,673,0,46,46,46 2 35 numbersign
-sh "
-$ 500,737,108,27,30,27 2 36 dollar
-Do "
-% 889,697,17,0,-6 2 37 percent
-& 833,695,17,28,-24,28 2 38 ampersand
-' 278,720,0,74,-26,66 2 39 quoteright
-cq "
-( 333,723,129,85,-8,66 2 40 parenleft
-) 333,723,129,15,62,15 2 41 parenright
-* 444,695,0,45,-34,45 2 42 asterisk
-+ 606,501,5 0 43 plus
-, 250,147,164,8,83,8 0 44 comma
-- 389,300,0,23,13,23 0 45 hyphen
-hy "
-. 250,135,17,0,2 0 46 period
-/ 315,720,17,50,49,50 2 47 slash
-sl "
-0 500,683,17,40,8,40 2 48 zero
-1 500,678,3,0,9 2 49 one
-2 500,683,3,4,49,4 2 50 two
-3 500,683,17,0,42 2 51 three
-4 500,683,3,37,47,37 2 52 four
-5 500,675,17,31,36,31 2 53 five
-6 500,683,17,38,11,38 2 54 six
-7 500,674,3,94,-19,66 2 55 seven
-8 500,683,17,34,24,34 2 56 eight
-9 500,683,17,41,23,41 2 57 nine
-: 250,452,17,36,12,36 0 58 colon
-; 250,452,164,47,83,47 0 59 semicolon
-< 606,517,21,2,1,2 0 60 less
-= 606,390,0,0,-1 0 61 equal
-> 606,517,21,1,2,1 0 62 greater
-? 444,695,17,56,-41,56 2 63 question
-@ 833,681,12,0,-32 2 64 at
-at "
-A 722,683,3,13,85,13 2 65 A
-B 667,681,3,12,42,12 2 66 B
-C 685,695,17,60,-19,60 2 67 C
-D 778,682,3,19,50,19 2 68 D
-E 611,681,3,45,39,45 2 69 E
-F 556,681,3,87,56,66 2 70 F
-G 778,695,17,22,-22,22 2 71 G
-H 778,681,3,98,62,66 2 72 H
-I 389,681,3,73,51,66 2 73 I
-J 389,681,207,78,79,66 2 74 J
-K 722,681,3,74,60,66 2 75 K
-L 611,681,3,17,24,17 2 76 L
-M 944,681,17,91,73,66 2 77 M
-N 778,681,3,101,52,66 2 78 N
-O 833,695,17,11,-26,11 2 79 O
-P 667,681,3,56,39,56 2 80 P
-Q 833,695,222,11,-26,11 2 81 Q
-R 722,681,3,25,46,25 2 82 R
-S 556,695,17,11,0,11 2 83 S
-T 611,681,3,113,-6,66 2 84 T
-U 778,681,17,97,-33,66 2 85 U
-V 667,681,3,128,-17,66 2 86 V
-W 1000,689,3,123,-17,66 2 87 W
-X 722,681,3,100,59,66 2 88 X
-Y 611,695,3,114,-4,66 2 89 Y
-Z 667,681,3,59,49,59 2 90 Z
-[ 333,723,102,98,5,66 2 91 bracketleft
-lB "
-\ 606,720,0,0,-22 2 92 backslash
-rs "
-] 333,723,102,32,71,32 2 93 bracketright
-rB "
-a^ 333,684,0,132,-38,66 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 278,720,0,63,-15,63 2 96 quoteleft
-oq "
-a 556,470,17,13,6,13 0 97 a
-b 537,726,17,7,6,7 2 98 b
-c 444,469,17,42,18,42 0 99 c
-d 556,726,17,44,12,44 2 100 d
-e 444,469,17,24,22,24 0 101 e
-f 333,726,271,166,180,66 3 102 f
-g 500,469,271,79,100,66 1 103 g
-h 556,726,17,16,28,16 2 104 h
-i 333,695,17,29,24,29 2 105 i
-j 333,695,271,40,114,40 3 106 j
-k 556,726,17,22,16,22 2 107 k
-l 333,726,17,35,-14,35 2 108 l
-m 833,469,17,20,31,20 0 109 m
-n 556,469,17,15,33,15 0 110 n
-o 556,469,17,0,2 0 111 o
-p 556,469,271,10,71,10 1 112 p
-q 537,469,271,26,18,26 1 113 q
-r 389,469,17,72,30,66 0 114 r
-s 444,469,17,12,25,12 0 115 s
-t 389,636,17,70,8,66 2 116 t
-u 556,469,17,15,28,15 0 117 u
-v 556,469,17,7,31,7 0 118 v
-w 833,469,17,19,23,19 0 119 w
-x 500,469,17,50,58,50 0 120 x
-y 556,469,271,35,37,35 1 121 y
-z 500,469,17,20,19,20 0 122 z
-lC 333,720,105,51,32,51 2 123 braceleft
-{ "
-ba 606,720,0,0,-209 2 124 bar
-| "
-rC 333,720,105,32,51,32 2 125 braceright
-} "
-a~ 333,654,0,158,-32,66 2 126 tilde
-~ "
-bq 250,145,144,20,53,20 0 128 quotesinglbase
-Fo 500,446,0,8,15,8 0 129 guillemotleft
-Fc 500,443,0,8,15,8 0 130 guillemotright
-bu 606,516,0,0,-81 0 131 bullet
-Fn 500,690,242,29,42,29 2 132 florin
-f/ 167,683,0,221,220,66 2 133 fraction
-%0 1000,691,17,0,-15 2 134 perthousand
-dg 556,685,3,0,-17 2 135 dagger
-dd 556,693,153,31,17,31 2 136 daggerdbl
-en 500,282,0,62,62,62 0 137 endash
-em 1000,282,0,62,62,62 0 138 emdash
-fi 611,726,271,27,180,27 3 140 fi
-fl 611,726,271,70,180,66 3 141 fl
-.i 333,469,17,10,24,10 0 144 dotlessi
-ga 333,699,0,39,-60,39 2 146 grave
-a" 333,699,0,126,78,66 2 147 hungarumlaut
-a. 333,668,0,42,-152,42 2 148 dotaccent
-ab 333,680,0,129,-46,66 2 149 breve
-ah 333,684,0,162,-63,66 2 150 caron
-ao 556,714,0,0,-227 2 151 ring
-ho 333,0,206,0,18 0 152 ogonek
-lq 500,720,0,61,-15,61 2 153 quotedblleft
-rq 500,720,0,69,-23,66 2 154 quotedblright
-oe 778,469,17,27,2,27 0 155 oe
-/l 333,726,17,82,37,66 2 156 lslash
-Bq 500,145,144,0,68 0 157 quotedblbase
-OE 944,695,17,67,11,66 2 158 OE
-/L 611,681,3,17,44,17 2 159 Lslash
-r! 333,479,225,0,48 0 161 exclamdown
-ct 500,547,105,6,-2,6 0 162 cent
-Po 500,683,5,51,29,51 2 163 sterling
-Cs 500,533,0,18,18,18 0 164 currency
-Ye 500,695,3,88,39,66 2 165 yen
-bb 606,720,0,0,-209 2 166 brokenbar
-sc 556,695,151,0,3 2 167 section
-ad 333,668,0,143,-40,66 2 168 dieresis
-co 747,695,17,23,24,23 2 169 copyright
-Of 333,684,0,72,3,66 2 170 ordfeminine
-fo 333,446,0,9,-10,9 0 171 guilsinglleft
-tno 606,390,0,0,-1 0 172 logicalnot
-\- 606,292,0,0,-1 0 173 minus
-rg 747,695,17,23,24,23 2 174 registered
-a- 333,608,0,135,-26,66 0 175 macron
-de 400,683 2 176 degree
-t+- 606,501 0 177 plusminus
-S2 300,683,0,71,24,66 2 178 twosuperior
-S3 300,683,0,60,27,60 2 179 threesuperior
-aa 333,699,0,109,-103,66 2 180 acute
-mc 556,469,232,15,65,15 0 181 mu
-ps 556,681,204,123,36,66 2 182 paragraph
-pc 250,324,0,6,-17,6 0 183 periodcentered
-ac 333,5,218,0,38 0 184 cedilla
-S1 300,680,0,48,9,48 2 185 onesuperior
-Om 333,683,0,63,-1,63 2 186 ordmasculine
-fc 333,443,0,0,15 0 187 guilsinglright
-14 750,683,2,32,32,32 2 188 onequarter
-12 750,683,2,36,36,36 2 189 onehalf
-34 750,683,2,32,32,32 2 190 threequarters
-r? 444,479,226,0,62 0 191 questiondown
-`A 722,911,3,13,85,13 2 192 Agrave
-'A 722,911,3,13,85,13 2 193 Aacute
-^A 722,896,3,13,85,13 2 194 Acircumflex
-~A 722,866,3,13,85,13 2 195 Atilde
-:A 722,880,3,13,85,13 2 196 Adieresis
-oA 722,926,3,13,85,13 2 197 Aring
-AE 944,681,3,33,79,33 2 198 AE
-,C 685,695,218,60,-19,60 2 199 Ccedilla
-`E 611,911,3,45,39,45 2 200 Egrave
-'E 611,911,3,45,39,45 2 201 Eacute
-^E 611,896,3,45,39,45 2 202 Ecircumflex
-:E 611,880,3,45,39,45 2 203 Edieresis
-`I 389,911,3,73,51,66 2 204 Igrave
-'I 389,911,3,81,51,66 2 205 Iacute
-^I 389,896,3,104,51,66 2 206 Icircumflex
-:I 389,880,3,115,51,66 2 207 Idieresis
--D 778,682,3,19,50,19 2 208 Eth
-~N 778,866,3,101,52,66 2 209 Ntilde
-`O 833,911,17,11,-26,11 2 210 Ograve
-'O 833,911,17,11,-26,11 2 211 Oacute
-^O 833,896,17,11,-26,11 2 212 Ocircumflex
-~O 833,866,17,11,-26,11 2 213 Otilde
-:O 833,880,17,11,-26,11 2 214 Odieresis
-tmu 606,479,0,0,-22 0 215 multiply
-/O 833,730,54,14,-7,14 2 216 Oslash
-`U 778,911,17,97,-33,66 2 217 Ugrave
-'U 778,911,17,97,-33,66 2 218 Uacute
-^U 778,896,17,97,-33,66 2 219 Ucircumflex
-:U 778,880,17,97,-33,66 2 220 Udieresis
-'Y 611,911,3,114,-4,66 2 221 Yacute
-TP 667,681,3,27,39,27 2 222 Thorn
-ss 556,726,271,43,181,43 3 223 germandbls
-`a 556,719,17,13,6,13 2 224 agrave
-'a 556,719,17,13,6,13 2 225 aacute
-^a 556,704,17,21,6,21 2 226 acircumflex
-~a 556,666,17,47,6,47 2 227 atilde
-:a 556,688,17,32,6,32 2 228 adieresis
-oa 556,714,17,13,6,13 2 229 aring
-ae 738,469,17,23,6,23 0 230 ae
-,c 444,469,218,42,18,42 0 231 ccedilla
-`e 444,719,17,24,22,24 2 232 egrave
-'e 444,719,17,54,22,54 2 233 eacute
-^e 444,704,17,77,22,66 2 234 ecircumflex
-:e 444,688,17,88,22,66 2 235 edieresis
-`i 333,719,17,39,24,39 2 236 igrave
-'i 333,719,17,109,24,66 2 237 iacute
-^i 333,704,17,120,24,66 2 238 icircumflex
-:i 333,688,17,143,24,66 2 239 idieresis
-Sd 556,726,17,40,2,40 2 240 eth
-~n 556,666,17,47,33,47 2 241 ntilde
-`o 556,719,17,0,2 2 242 ograve
-'o 556,719,17,0,2 2 243 oacute
-^o 556,704,17,9,2,9 2 244 ocircumflex
-~o 556,666,17,47,2,47 2 245 otilde
-:o 556,688,17,32,2,32 2 246 odieresis
-tdi 606,501,5 0 247 divide
-/o 556,506,50,16,36,16 0 248 oslash
-`u 556,719,17,15,28,15 2 249 ugrave
-'u 556,719,17,15,28,15 2 250 uacute
-^u 556,704,17,15,28,15 2 251 ucircumflex
-:u 556,688,17,32,28,32 2 252 udieresis
-'y 556,719,271,35,37,35 3 253 yacute
-Tp 556,726,271,10,71,10 3 254 thorn
-:y 556,688,271,35,37,35 3 255 ydieresis
-u2026 1000,135,17,0,-41 0 256 ellipsis
diff --git a/contrib/groff/font/devps/PI b/contrib/groff/font/devps/PI
deleted file mode 100644
index 53bc30346ff2..000000000000
--- a/contrib/groff/font/devps/PI
+++ /dev/null
@@ -1,375 +0,0 @@
-name PI
-internalname Palatino-Italic
-slant 10
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -55
-A w -37
-A v -37
-A u0020 -37
-A ' -55
-A cq -55
-A Y -55
-A W -55
-A V -74
-A T -55
-F . -111
-F , -111
-F A -111
-L y -37
-L u0020 -18
-L ' -37
-L cq -37
-L Y -74
-L W -74
-L V -74
-L T -74
-P . -129
-P , -129
-P A -129
-R y -37
-R Y -55
-R W -55
-R V -74
-R T -55
-T y -92
-T w -92
-T u -111
-T ; -74
-T s -111
-T r -111
-T . -74
-T o -111
-T i -55
-T - -55
-T hy -55
-T e -111
-T , -74
-T : -74
-T c -111
-T a -111
-T O -18
-T A -92
-V y -74
-V u -74
-V ; -37
-V r -92
-V . -129
-V o -74
-V i -74
-V - -55
-V hy -55
-V e -92
-V , -129
-V : -37
-V a -74
-V A -210
-W y -20
-W u -20
-W ; -18
-W r -20
-W . -55
-W o -20
-W i -20
-W - -18
-W hy -18
-W e -20
-W , -55
-W : -18
-W a -20
-W A -92
-Y v -74
-Y u -92
-Y ; -74
-Y q -92
-Y . -92
-Y p -74
-Y o -111
-Y i -55
-Y - -74
-Y hy -74
-Y e -111
-Y , -92
-Y : -74
-Y a -92
-Y A -92
-f ' 55
-f cq 55
-1 1 -55
-` ` -74
-` oq -74
-oq ` -74
-oq oq -74
-' t -37
-cq t -37
-' u0020 -55
-cq u0020 -55
-' s -55
-cq s -55
-' ' -74
-' cq -74
-cq ' -74
-cq cq -74
-r ' 37
-r cq 37
-r q -18
-r . -74
-r o -18
-r h -18
-r g -18
-r e -18
-r , -74
-r c -18
-v . -55
-v , -55
-w . -55
-w , -55
-y . -37
-y , -37
-charset
-ha 606,689,0,0,-1 2 0 asciicircum
-ti 606,339,0,0,-1 0 1 asciitilde
-vS 556,907,18,33,8,33 2 2 Scaron
-vZ 667,907,3,20,30,20 2 3 Zcaron
-vs 389,687,11,80,41,68 2 4 scaron
-vz 444,687,11,53,51,53 2 5 zcaron
-:Y 667,847,3,58,-2,58 2 6 Ydieresis
-tm 1000,689,0,1,-2,1 2 7 trademark
-aq 333,733,0,5,-90,5 2 8 quotesingle
-space 250 0 32 space
-! 333,733,8,9,-26,9 2 33 exclam
-" 500,733,0,5,-90,5 2 34 quotedbl
-dq "
-# 500,692,0,45,46,45 2 35 numbersign
-sh "
-$ 500,733,113,2,35,2 2 36 dollar
-Do "
-% 889,710,7,0,-24 2 37 percent
-& 778,692,18,38,3,38 2 38 ampersand
-' 278,733,0,30,-28,30 2 39 quoteright
-cq "
-( 333,733,106,48,-4,48 2 40 parenleft
-) 333,733,106,0,48 2 41 parenright
-* 389,706,0,61,-26,61 2 42 asterisk
-+ 606,504,0,0,-1 0 43 plus
-, 250,123,143,3,42,3 0 44 comma
-- 333,281,0,21,31,21 0 45 hyphen
-hy "
-. 250,112,5,0,-3 0 46 period
-/ 296,733,119,146,90,68 2 47 slash
-sl "
-0 500,699,11,30,14,30 2 48 zero
-1 500,699,3,0,-4 2 49 one
-2 500,699,3,0,38 2 50 two
-3 500,699,11,0,28 2 51 three
-4 500,699,3,28,35,28 2 52 four
-5 500,693,11,41,36,41 2 53 five
-6 500,699,11,19,1,19 2 54 six
-7 500,692,3,52,-3,52 2 55 seven
-8 500,699,11,19,14,19 2 56 eight
-9 500,699,11,18,18,18 2 57 nine
-: 250,458,5,7,6,7 0 58 colon
-; 250,456,146,19,59,19 0 59 semicolon
-< 606,516,6,0,-3 0 60 less
-= 606,378,0,0,-1 0 61 equal
-> 606,516,6,0,-3 0 62 greater
-? 500,706,8,0,-64 2 63 question
-@ 747,706,18,21,23,21 2 64 at
-at "
-A 722,705,3,5,69,5 2 65 A
-B 611,692,6,0,24 2 66 B
-C 667,706,18,34,5,34 2 67 C
-D 778,692,3,13,22,13 2 68 D
-E 611,692,3,9,20,9 2 69 E
-F 556,692,3,42,50,42 2 70 F
-G 722,706,18,22,0,22 2 71 G
-H 778,692,3,72,53,68 2 72 H
-I 333,692,3,71,43,68 2 73 I
-J 333,692,206,75,85,68 2 74 J
-K 667,692,3,66,37,66 2 75 K
-L 556,692,3,17,34,17 2 76 L
-M 944,692,18,46,69,46 2 77 M
-N 778,692,11,76,48,68 2 78 N
-O 778,706,18,20,-3,20 2 79 O
-P 611,692,3,33,41,33 2 80 P
-Q 778,706,201,20,-3,20 2 81 Q
-R 667,692,3,22,41,22 2 82 R
-S 556,706,18,0,8 2 83 S
-T 611,692,3,74,-3,68 2 84 T
-U 778,692,18,70,-38,68 2 85 U
-V 722,692,8,82,-25,68 2 86 V
-W 944,700,8,86,-21,68 2 87 W
-X 722,692,3,62,30,62 2 88 X
-Y 667,705,3,58,-2,58 2 89 Y
-Z 667,692,3,20,30,20 2 90 Z
-[ 333,733,100,43,32,43 2 91 bracketleft
-lB "
-\ 606,733,0,0,-31 2 92 backslash
-rs "
-] 333,733,100,32,43,32 2 93 bracketright
-rB "
-a^ 333,679,0,67,-6,67 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 278,733,0,30,-28,30 2 96 quoteleft
-oq "
-a 444,482,11,12,46,12 0 97 a
-b 463,733,11,20,13,20 2 98 b
-c 407,482,11,32,25,32 0 99 c
-d 500,733,11,33,33,33 2 100 d
-e 389,482,11,35,35,35 0 101 e
-f 278,733,276,185,212,68 3 102 f
-g 500,482,276,48,87,48 1 103 g
-h 500,733,9,21,40,21 2 104 h
-i 278,712,9,36,16,36 2 105 i
-j 278,712,276,37,120,37 3 106 j
-k 444,733,9,55,42,55 2 107 k
-l 278,733,9,23,14,23 2 108 l
-m 778,482,9,12,26,12 0 109 m
-n 556,482,9,8,26,8 0 110 n
-o 444,482,11,17,33,17 0 111 o
-p 500,482,276,15,57,15 1 112 p
-q 463,482,276,19,26,19 1 113 q
-r 389,482,9,45,24,45 0 114 r
-s 389,482,11,6,41,6 0 115 s
-t 333,646,9,27,9,27 2 116 t
-u 556,482,11,6,18,6 0 117 u
-v 500,482,11,27,29,27 0 118 v
-w 722,482,11,27,29,27 0 119 w
-x 500,482,11,34,41,34 0 120 x
-y 500,482,276,40,58,40 1 121 y
-z 444,482,11,22,51,22 0 122 z
-lC 333,733,100,36,35,36 2 123 braceleft
-{ "
-ba 606,733,0,0,-225 2 124 bar
-| "
-rC 333,733,100,35,36,35 2 125 braceright
-} "
-a~ 333,638,0,107,-13,68 0 126 tilde
-~ "
-bq 278,120,122,0,23 0 128 quotesinglbase
-Fo 500,440,0,0,-7 0 129 guillemotleft
-Fc 500,440,0,0,-13 0 130 guillemotright
-bu 500,526,0,0,-36 0 131 bullet
-Fn 500,708,276,20,45,20 3 132 florin
-f/ 167,699,0,220,220,68 2 133 fraction
-%0 1000,717,6,0,-22 2 134 perthousand
-dg 500,692,0,19,2,19 2 135 dagger
-dd 500,692,162,44,40,44 2 136 daggerdbl
-en 500,278,0,60,60,60 0 137 endash
-em 1000,278,0,60,60,60 0 138 emdash
-fi 528,733,276,24,212,24 3 140 fi
-fl 545,733,276,25,212,25 3 141 fl
-.i 278,482,9,13,16,13 0 144 dotlessi
-ga 333,687,0,27,-36,27 2 146 grave
-a" 333,730,0,102,4,68 2 147 hungarumlaut
-a. 333,645,0,0,-125 2 148 dotaccent
-ab 333,677,0,110,-42,68 2 149 breve
-ah 333,679,0,126,-54,68 2 150 caron
-ao 333,708,0,76,-109,68 2 151 ring
-ho 333,0,207,0,12 0 152 ogonek
-lq 500,733,0,25,-48,25 2 153 quotedblleft
-rq 500,733,0,25,-48,25 2 154 quotedblright
-oe 669,482,11,35,33,35 0 155 oe
-/l 278,733,9,74,60,68 2 156 lslash
-Bq 500,120,122,0,7 0 157 quotedblbase
-OE 1028,706,18,11,-6,11 2 158 OE
-/L 556,692,3,17,66,17 2 159 Lslash
-r! 333,467,276,0,35 1 161 exclamdown
-ct 500,551,96,0,-6 0 162 cent
-Po 500,708,18,29,48,29 2 163 sterling
-Cs 500,577,0,36,36,36 0 164 currency
-Ye 500,699,3,62,15,62 2 165 yen
-bb 606,733,0,0,-225 2 166 brokenbar
-sc 500,706,220,13,36,13 2 167 section
-ad 333,637,0,95,-28,68 0 168 dieresis
-co 747,706,18,39,39,39 2 169 copyright
-Of 333,699,0,38,-10,38 2 170 ordfeminine
-fo 333,440,0,0,-7 0 171 guilsinglleft
-tno 606,378,0,0,-1 0 172 logicalnot
-\- 606,280,0,0,-1 0 173 minus
-rg 747,706,18,39,39,39 2 174 registered
-a- 333,589,0,103,-24,68 0 175 macron
-de 400,689,0,40,-40,40 2 176 degree
-t+- 606,504,0,0,-1 0 177 plusminus
-S2 300,699,0,40,37,40 2 178 twosuperior
-S3 300,699,0,54,22,54 2 179 threesuperior
-aa 333,687,0,63,-72,63 2 180 acute
-mc 556,482,226,6,35,6 0 181 mu
-ps 500,692,224,161,17,68 2 182 paragraph
-pc 250,312,0,0,-3 0 183 periodcentered
-ac 333,0,216,0,59 0 184 cedilla
-S1 300,699,0,35,-11,35 2 185 onesuperior
-Om 333,699,0,39,-16,39 2 186 ordmasculine
-fc 333,440,0,0,-13 0 187 guilsinglright
-14 750,699,2,15,19,15 2 188 onequarter
-12 750,699,2,21,19,21 2 189 onehalf
-34 750,699,2,15,15,15 2 190 threequarters
-r? 500,467,246,0,-7 0 191 questiondown
-`A 722,897,3,5,69,5 2 192 Agrave
-'A 722,897,3,5,69,5 2 193 Aacute
-^A 722,889,3,5,69,5 2 194 Acircumflex
-~A 722,866,3,5,69,5 2 195 Atilde
-:A 722,847,3,5,69,5 2 196 Adieresis
-oA 722,918,3,5,69,5 2 197 Aring
-AE 941,692,3,11,54,11 2 198 AE
-,C 667,706,216,34,5,34 2 199 Ccedilla
-`E 611,897,3,9,20,9 2 200 Egrave
-'E 611,897,3,9,20,9 2 201 Eacute
-^E 611,889,3,9,20,9 2 202 Ecircumflex
-:E 611,847,3,9,20,9 2 203 Edieresis
-`I 333,897,3,71,43,68 2 204 Igrave
-'I 333,897,3,123,43,68 2 205 Iacute
-^I 333,889,3,107,43,68 2 206 Icircumflex
-:I 333,847,3,135,43,68 2 207 Idieresis
--D 778,692,3,13,31,13 2 208 Eth
-~N 778,866,11,76,48,68 2 209 Ntilde
-`O 778,897,18,20,-3,20 2 210 Ograve
-'O 778,897,18,20,-3,20 2 211 Oacute
-^O 778,889,18,20,-3,20 2 212 Ocircumflex
-~O 778,866,18,20,-3,20 2 213 Otilde
-:O 778,847,18,20,-3,20 2 214 Odieresis
-tmu 606,474,0,0,-33 0 215 multiply
-/O 778,721,39,34,18,34 2 216 Oslash
-`U 778,897,18,70,-38,68 2 217 Ugrave
-'U 778,897,18,70,-38,68 2 218 Uacute
-^U 778,889,18,70,-38,68 2 219 Ucircumflex
-:U 778,847,18,70,-38,68 2 220 Udieresis
-'Y 667,897,3,58,-2,58 2 221 Yacute
-TP 611,692,3,9,41,9 2 222 Thorn
-ss 500,733,276,38,210,38 3 223 germandbls
-`a 444,707,11,12,46,12 2 224 agrave
-'a 444,707,11,20,46,20 2 225 aacute
-^a 444,699,11,12,46,12 2 226 acircumflex
-~a 444,650,11,52,46,52 2 227 atilde
-:a 444,657,11,40,46,40 2 228 adieresis
-oa 444,728,11,12,46,12 2 229 aring
-ae 638,482,11,35,49,35 0 230 ae
-,c 407,482,216,32,25,32 0 231 ccedilla
-`e 389,707,11,35,35,35 2 232 egrave
-'e 389,707,11,55,35,55 2 233 eacute
-^e 389,699,11,59,35,59 2 234 ecircumflex
-:e 389,657,11,67,35,67 2 235 edieresis
-`i 278,707,9,43,16,43 2 236 igrave
-'i 278,707,9,103,16,68 2 237 iacute
-^i 278,699,9,95,21,68 2 238 icircumflex
-:i 278,657,9,123,16,68 2 239 idieresis
-Sd 444,733,11,84,33,68 2 240 eth
-~n 556,650,9,8,26,8 2 241 ntilde
-`o 444,707,11,17,33,17 2 242 ograve
-'o 444,707,11,20,33,20 2 243 oacute
-^o 444,699,11,17,33,17 2 244 ocircumflex
-~o 444,650,11,52,33,52 2 245 otilde
-:o 444,657,11,40,33,40 2 246 odieresis
-tdi 606,504,0,0,-1 0 247 divide
-/o 444,510,24,66,68,66 0 248 oslash
-`u 556,707,11,6,18,6 2 249 ugrave
-'u 556,707,11,6,18,6 2 250 uacute
-^u 556,699,11,6,18,6 2 251 ucircumflex
-:u 556,657,11,6,18,6 2 252 udieresis
-'y 500,707,276,40,58,40 3 253 yacute
-Tp 500,733,276,0,89 3 254 thorn
-:y 500,657,276,40,58,40 3 255 ydieresis
-u2026 1000,112,5,0,-52 0 256 ellipsis
diff --git a/contrib/groff/font/devps/PR b/contrib/groff/font/devps/PR
deleted file mode 100644
index 2f005e7bf37f..000000000000
--- a/contrib/groff/font/devps/PR
+++ /dev/null
@@ -1,377 +0,0 @@
-name PR
-internalname Palatino-Roman
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -74
-A w -74
-A v -92
-A u0020 -55
-A ' -74
-A cq -74
-A Y -111
-A W -74
-A V -111
-A T -74
-F . -92
-F , -92
-F A -74
-L y -55
-L u0020 -37
-L ' -74
-L cq -74
-L Y -92
-L W -74
-L V -92
-L T -74
-P u0020 -18
-P . -129
-P , -129
-P A -92
-R y -37
-R Y -37
-R W -37
-R V -55
-R T -37
-T y -90
-T w -90
-T u -90
-T ; -55
-T s -90
-T r -90
-T . -74
-T o -92
-T i -55
-T - -55
-T hy -55
-T e -92
-T , -74
-T : -55
-T c -111
-T a -92
-T O -18
-T A -74
-V y -92
-V u -92
-V ; -55
-V r -92
-V . -129
-V o -111
-V i -55
-V - -74
-V hy -74
-V e -111
-V , -129
-V : -55
-V a -92
-V A -111
-W y -50
-W u -50
-W ; -18
-W r -74
-W . -92
-W o -92
-W i -55
-W - -55
-W hy -55
-W e -92
-W , -92
-W : -18
-W a -92
-W A -92
-Y v -90
-Y u -90
-Y u0020 -18
-Y ; -74
-Y q -90
-Y . -111
-Y p -111
-Y o -92
-Y i -55
-Y - -92
-Y hy -92
-Y e -92
-Y , -111
-Y : -74
-Y a -92
-Y A -92
-f ' 55
-f cq 55
-f f -18
-1 1 -55
-` ` -37
-` oq -37
-oq ` -37
-oq oq -37
-' ' -37
-' cq -37
-cq ' -37
-cq cq -37
-r u -8
-r ' 74
-r cq 74
-r q -18
-r . -74
-r o -18
-r - -18
-r hy -18
-r h -18
-r g -18
-r e -18
-r d -18
-r , -74
-r c -18
-u0020 Y -18
-u0020 A -37
-v . -111
-v , -111
-w . -92
-w , -92
-y . -111
-y , -111
-charset
-ha 606,689 2 0 asciicircum
-ti 606,347 0 1 asciitilde
-vS 525,908,20 2 2 Scaron
-vZ 667,908,3 2 3 Zcaron
-vs 424,685,20 2 4 scaron
-vz 500,685,3 2 5 zcaron
-:Y 667,868,3 2 6 Ydieresis
-tm 979,689 2 7 trademark
-aq 208,709 2 8 quotesingle
-space 250 0 32 space
-! 278,694,5 2 33 exclam
-" 371,709 2 34 quotedbl
-dq "
-# 500,684 2 35 numbersign
-sh "
-$ 500,731,116 2 36 dollar
-Do "
-% 840,709,20 2 37 percent
-& 778,689,20 2 38 ampersand
-' 278,709 2 39 quoteright
-cq "
-( 333,726,215 2 40 parenleft
-) 333,726,215 2 41 parenright
-* 389,689 2 42 asterisk
-+ 606,512 0 43 plus
-, 250,123,155 0 44 comma
-- 333,287 0 45 hyphen
-hy "
-. 250,111,5 0 46 period
-/ 606,726,119 2 47 slash
-sl "
-0 500,689,20 2 48 zero
-1 500,694,3 2 49 one
-2 500,689,3 2 50 two
-3 500,689,20 2 51 three
-4 500,694,3 2 52 four
-5 500,689,20 2 53 five
-6 500,689,20 2 54 six
-7 500,689,3 2 55 seven
-8 500,689,20 2 56 eight
-9 500,689,20 2 57 nine
-: 250,456,5 0 58 colon
-; 250,456,153 0 59 semicolon
-< 606,522 0 60 less
-= 606,386 0 61 equal
-> 606,522 0 62 greater
-? 444,694,5 2 63 question
-@ 747,694,20 2 64 at
-at "
-A 778,700,3 2 65 A
-B 611,692,3 2 66 B
-C 709,709,20 2 67 C
-D 774,692,3 2 68 D
-E 611,692,3 2 69 E
-F 556,692,3 2 70 F
-G 763,709,20 2 71 G
-H 832,692,3 2 72 H
-I 337,692,3 2 73 I
-J 333,692,194,0,15 2 74 J
-K 726,692,3 2 75 K
-L 611,692,3 2 76 L
-M 946,692,13 2 77 M
-N 831,692,20 2 78 N
-O 786,709,20 2 79 O
-P 604,692,3 2 80 P
-Q 786,709,176 2 81 Q
-R 668,692,3,1 2 82 R
-S 525,709,20 2 83 S
-T 613,692,3 2 84 T
-U 778,692,20 2 85 U
-V 722,692,9 2 86 V
-W 1000,700,9 2 87 W
-X 667,700,3 2 88 X
-Y 667,704,3 2 89 Y
-Z 667,692,3 2 90 Z
-[ 333,726,184 2 91 bracketleft
-lB "
-\ 606,726 2 92 backslash
-rs "
-] 333,726,184 2 93 bracketright
-rB "
-a^ 333,677 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 278,709 2 96 quoteleft
-oq "
-a 500,469,12 0 97 a
-b 553,726,12,0,15 2 98 b
-c 444,469,20 0 99 c
-d 611,726,12 2 100 d
-e 479,469,20 0 101 e
-f 333,728,3,8 2 102 f
-g 556,469,283 1 103 g
-h 582,726,3 2 104 h
-i 291,687,3 2 105 i
-j 234,688,283,0,40 3 106 j
-k 556,726,12 2 107 k
-l 291,726,3 2 108 l
-m 883,469,3 0 109 m
-n 582,469,3 0 110 n
-o 546,469,20 0 111 o
-p 601,469,281 1 112 p
-q 560,469,281 1 113 q
-r 395,469,3 0 114 r
-s 424,469,20 0 115 s
-t 326,621,12 2 116 t
-u 603,469,12 0 117 u
-v 565,459,7 0 118 v
-w 834,469,7 0 119 w
-x 516,469,3 0 120 x
-y 556,459,283 1 121 y
-z 500,462,3 0 122 z
-lC 333,726,175 2 123 braceleft
-{ "
-ba 606,726 2 124 bar
-| "
-rC 333,726,175 2 125 braceright
-} "
-a~ 333,640 2 126 tilde
-~ "
-bq 278,110,153 0 128 quotesinglbase
-Fo 500,428 0 129 guillemotleft
-Fc 500,428 0 130 guillemotright
-bu 606,516 0 131 bullet
-Fn 500,706,262 2 132 florin
-f/ 167,689,0,170,166 2 133 fraction
-%0 1144,709,20 2 134 perthousand
-dg 500,694,5 2 135 dagger
-dd 500,694,249 2 136 daggerdbl
-en 500,277 0 137 endash
-em 1000,277 0 138 emdash
-fi 605,728,3 2 140 fi
-fl 608,728,3 2 141 fl
-.i 287,469,3 0 144 dotlessi
-ga 333,677 2 146 grave
-a" 380,687 2 147 hungarumlaut
-a. 250,637 2 148 dotaccent
-ab 333,664 2 149 breve
-ah 333,677 2 150 caron
-ao 333,696 2 151 ring
-ho 313,0,165 0 152 ogonek
-lq 500,709 2 153 quotedblleft
-rq 500,709 2 154 quotedblright
-oe 827,469,20 0 155 oe
-/l 291,726,3,15,14 2 156 lslash
-Bq 500,110,153 0 157 quotedblbase
-OE 998,709,20 2 158 OE
-/L 611,692,3 2 159 Lslash
-r! 278,469,225 0 161 exclamdown
-ct 500,562,101 0 162 cent
-Po 500,694,13 2 163 sterling
-Cs 500,531 0 164 currency
-Ye 500,701,3 2 165 yen
-bb 606,726 2 166 brokenbar
-sc 500,709,219 2 167 section
-ad 333,637 2 168 dieresis
-co 747,706,18 2 169 copyright
-Of 333,709 2 170 ordfeminine
-fo 331,428 0 171 guilsinglleft
-tno 606,386 0 172 logicalnot
-\- 606,289 0 173 minus
-rg 747,706,18 2 174 registered
-a- 333,591 0 175 macron
-de 400,689 2 176 degree
-t+- 606,512 0 177 plusminus
-S2 300,689,0,1 2 178 twosuperior
-S3 300,689 2 179 threesuperior
-aa 333,677 2 180 acute
-mc 603,469,236 0 181 mu
-ps 628,694,150 2 182 paragraph
-pc 250,319 0 183 periodcentered
-ac 333,0,225 0 184 cedilla
-S1 300,692 2 185 onesuperior
-Om 333,709 2 186 ordmasculine
-fc 331,428 0 187 guilsinglright
-14 750,692,3 2 188 onequarter
-12 750,692,3 2 189 onehalf
-34 750,689,3 2 190 threequarters
-r? 444,469,231 0 191 questiondown
-`A 778,908,3 2 192 Agrave
-'A 778,908,3 2 193 Aacute
-^A 778,908,3 2 194 Acircumflex
-~A 778,871,3 2 195 Atilde
-:A 778,868,3 2 196 Adieresis
-oA 778,927,3 2 197 Aring
-AE 944,692,3,0,10 2 198 AE
-,C 709,709,225 2 199 Ccedilla
-`E 611,908,3 2 200 Egrave
-'E 611,908,3 2 201 Eacute
-^E 611,908,3 2 202 Ecircumflex
-:E 611,868,3 2 203 Edieresis
-`I 337,908,3 2 204 Igrave
-'I 337,908,3 2 205 Iacute
-^I 337,908,3 2 206 Icircumflex
-:I 337,868,3 2 207 Idieresis
--D 774,692,3 2 208 Eth
-~N 831,871,20 2 209 Ntilde
-`O 786,908,20 2 210 Ograve
-'O 786,908,20 2 211 Oacute
-^O 786,908,20 2 212 Ocircumflex
-~O 786,883,20 2 213 Otilde
-:O 786,868,20 2 214 Odieresis
-tmu 606,474 0 215 multiply
-/O 833,709,20 2 216 Oslash
-`U 778,908,20 2 217 Ugrave
-'U 778,908,20 2 218 Uacute
-^U 778,908,20 2 219 Ucircumflex
-:U 778,868,20 2 220 Udieresis
-'Y 667,908,3 2 221 Yacute
-TP 604,692,3 2 222 Thorn
-ss 556,731,9 2 223 germandbls
-`a 500,697,12 2 224 agrave
-'a 500,697,12 2 225 aacute
-^a 500,697,12 2 226 acircumflex
-~a 500,652,12 2 227 atilde
-:a 500,657,12 2 228 adieresis
-oa 500,716,12 2 229 aring
-ae 758,469,20 0 230 ae
-,c 444,469,225 0 231 ccedilla
-`e 479,697,20 2 232 egrave
-'e 479,697,20 2 233 eacute
-^e 479,697,20 2 234 ecircumflex
-:e 479,657,20 2 235 edieresis
-`i 287,697,3 2 236 igrave
-'i 287,697,3 2 237 iacute
-^i 287,697,3,13,12 2 238 icircumflex
-:i 287,657,3,6,6 2 239 idieresis
-Sd 546,728,20 2 240 eth
-~n 582,652,3 2 241 ntilde
-`o 546,697,20 2 242 ograve
-'o 546,697,20 2 243 oacute
-^o 546,697,20 2 244 ocircumflex
-~o 546,652,20 2 245 otilde
-:o 546,657,20 2 246 odieresis
-tdi 606,512 0 247 divide
-/o 556,474,23 0 248 oslash
-`u 603,697,12 2 249 ugrave
-'u 603,697,12 2 250 uacute
-^u 603,697,12 2 251 ucircumflex
-:u 603,657,12 2 252 udieresis
-'y 556,697,283 3 253 yacute
-Tp 601,726,281,0,2 3 254 thorn
-:y 556,657,283 3 255 ydieresis
-u2026 1000,111,5 0 256 ellipsis
diff --git a/contrib/groff/font/devps/S b/contrib/groff/font/devps/S
deleted file mode 100644
index 7ed54bce73b1..000000000000
--- a/contrib/groff/font/devps/S
+++ /dev/null
@@ -1,229 +0,0 @@
-name S
-internalname Symbol
-special
-spacewidth 250
-charset
-space 250 0 32 space
-! 333,672,17 3 33 exclam
-fa 713,705 3 34 universal
-# 500,673,16 3 35 numbersign
-sh "
-te 549,707 3 36 existential
-% 833,655,36 3 37 percent
-& 778,661,18 3 38 ampersand
-st 439,500,17 3 39 suchthat
-( 333,673,191 3 40 parenleft
-) 333,673,191 3 41 parenright
-** 500,551 3 42 asteriskmath
-+ 549,533 3 43 plus
-pl "
-, 250,104,152 3 44 comma
-\- 549,288 3 45 minus
-mi "
-. 250,95,17 3 46 period
-/ 278,646,18 3 47 slash
-sl "
-0 500,685,17 3 48 zero
-1 500,673 3 49 one
-2 500,686 3 50 two
-3 500,685,17 3 51 three
-4 500,685 3 52 four
-5 500,685,17 3 53 five
-6 500,685,17 3 54 six
-7 500,673,16 3 55 seven
-8 500,685,18 3 56 eight
-9 500,685,18 3 57 nine
-: 278,460,17 3 58 colon
-; 278,460,152 3 59 semicolon
-< 549,522 3 60 less
-= 549,390 3 61 equal
-eq "
-> 549,522 3 62 greater
-? 444,686,17 3 63 question
-=~ 549,475 3 64 congruent
-*A 722,673 3 65 Alpha
-*B 667,673 3 66 Beta
-*X 722,673,0,0,9 3 67 Chi
-*D 612,688 3 68 Delta
-*E 611,673,0,6 3 69 Epsilon
-*F 763,673 3 70 Phi
-*G 603,673,0,6 3 71 Gamma
-*Y 722,673,0,7 3 72 Eta
-*I 333,673 3 73 Iota
-+h 631,689,18 3 74 theta1
-*K 722,673 3 75 Kappa
-*L 686,688 3 76 Lambda
-*M 889,673 3 77 Mu
-*N 722,673,8 3 78 Nu
-*O 722,685,17 3 79 Omicron
-*P 768,673 3 80 Pi
-*H 741,685,17 3 81 Theta
-*R 556,673,0,7 3 82 Rho
-*S 592,673 3 83 Sigma
-*T 611,673 3 84 Tau
-u03A5 690,673,0,4,8 3 85 Upsilon
-ts 439,500,233 3 86 sigma1
-*W 768,688 3 87 Omega
-*C 645,673 3 88 Xi
-*Q 795,684 3 89 Psi
-*Z 611,673,0,25 3 90 Zeta
-[ 333,674,155 3 91 bracketleft
-lB "
-3d 863,478 3 92 therefore
-tf "
-] 333,674,155 3 93 bracketright
-rB "
-pp 658,674 3 94 perpendicular
-_ 500,0,252,2,2 3 95 underscore
-radicalex 500,917,0,590 3 96 radicalex
-*a 631,500,18 3 97 alpha
-*b 549,741,223 3 98 beta
-*x 549,499,231 3 99 chi
-*d 494,740,19 3 100 delta
-*e 439,502,19 3 101 epsilon
-*f 521,671,224 3 102 phi
-*g 411,499,225,73 3 103 gamma
-*y 603,514,202 3 104 eta
-*i 329,503,17 3 105 iota
-+f 603,499,224 3 106 phi1
-*k 549,501,0,9 3 107 kappa
-*l 549,739,17 3 108 lambda
-mc 576,500,223 3 109 mu
-*m "
-*n 521,507,16,0,9 3 110 nu
-*o 549,499,19 3 111 omicron
-*p 549,487,19 3 112 pi
-*h 521,690,17 3 113 theta
-*r 549,499,230 3 114 rho
-*s 603,500,21 3 115 sigma
-*t 439,500,19 3 116 tau
-*u 576,507,18 3 117 upsilon
-+p 713,583,18 3 118 omega1
-*w 686,500,17 3 119 omega
-*c 493,766,224 3 120 xi
-*q 686,500,228,15 3 121 psi
-*z 494,756,225 3 122 zeta
-lC 480,673,183 3 123 braceleft
-{ "
-ba 200,673,177 3 124 bar
-| "
-rC 480,673,183 3 125 braceright
-} "
-ap 549,307 3 126 similar
-*U 620,685,0,0,2 3 161 Upsilon1
-fm 247,735 3 162 minute
-<= 549,639 3 163 lessequal
-f/ 167,677,12,173,180 3 164 fraction
-if 713,404 3 165 infinity
-Fn 500,686,193 3 166 florin
-CL 753,533,26 3 167 club
-DI 753,550,36 3 168 diamond
-HE 753,532,33 3 169 heart
-SP 753,548,36 3 170 spade
-<> 1042,511,15 3 171 arrowboth
-<- 987,511,15 3 172 arrowleft
-ua 603,910 3 173 arrowup
-arrowverttp "
--> 987,511,15 3 174 arrowright
-da 603,888,22 3 175 arrowdown
-arrowvertbt "
-de 400,685 3 176 degree
-t+- 549,645 3 177 plusminus
-+- "
-sd 411,737,0,2 3 178 second
->= 549,639 3 179 greaterequal
-tmu 549,524 3 180 multiply
-mu "
-pt 713,404 3 181 proportional
-pd 494,746,20 3 182 partialdiff
-bu 460,473 3 183 bullet
-tdi 549,456 3 184 divide
-di "
-!= 549,549,25 3 185 notequal
-== 549,443 3 186 equivalence
-~~ 549,394 3 187 approxequal
-~= "
-u2026 1000,95,17 3 188 ellipsis
-arrowvertex 603,1010,120 3 189 arrowvertex
-an 1000,276,0,50,60 3 190 arrowhorizex
-CR 658,629,16 3 191 carriagereturn
-Ah 823,658,18 3 192 aleph
-Im 686,740,53 3 193 Ifraktur
-Re 795,734,15 3 194 Rfraktur
-wp 987,573,211 3 195 weierstrass
-c* 768,673,17 3 196 circlemultiply
-c+ 768,675,15 3 197 circleplus
-es 823,719,24 3 198 emptyset
-ca 768,509 3 199 intersection
-cu 768,492,17 3 200 union
-sp 713,470 3 201 propersuperset
-ip 713,470,125 3 202 reflexsuperset
-nb 713,540,70 3 203 notsubset
-sb 713,470 3 204 propersubset
-ib 713,470,125 3 205 reflexsubset
-mo 713,468 3 206 element
-nm 713,555,58 3 207 notelement
-/_ 768,673 3 208 angle
-gr 713,718,19 3 209 gradient
---- 790,673,17 3 210 registerserif
---- 790,675,15 3 211 copyrightserif
---- 890,673 3 212 trademarkserif
-product 823,751,101 3 213 product
-sr 549,917,38 3 214 radical
-sqrt "
-md 250,310 3 215 dotmath
-tno 713,288 3 216 logicalnot
-no "
-AN 603,454 3 217 logicaland
-OR 603,477 3 218 logicalor
-hA 1042,510,20 3 219 arrowdblboth
-lA 987,513,15 3 220 arrowdblleft
-uA 603,911 3 221 arrowdblup
-rA 987,508,20 3 222 arrowdblright
-dA 603,890,19 3 223 arrowdbldown
-lz 494,745 3 224 lozenge
-la 329,746,198 3 225 angleleft
---- 790,670,20 3 226 registersans
---- 790,675,15 3 227 copyrightsans
---- 786,673 3 228 trademarksans
-sum 713,752,108 3 229 summation
-parenlefttp 384,926,293,52 3 230 parenlefttp
-parenleftex 384,920,80 3 231 parenleftex
-parenleftbt 384,920,293,52 3 232 parenleftbt
-bracketlefttp 384,925,75 3 233 bracketlefttp
-lc "
-bracketleftex 384,925,75 3 234 bracketleftex
-bracketleftbt 384,925,75 3 235 bracketleftbt
-lf "
-bracelefttp 494,925,75 3 236 bracelefttp
-lt "
-braceleftmid 494,925,75 3 237 braceleftmid
-lk "
-braceleftbt 494,925,75 3 238 braceleftbt
-lb "
-braceex 494,925,75 3 239 braceex
-bracerightex "
-braceleftex "
-barex "
-bv "
-ra 329,746,198 3 241 angleright
-is 274,916,107,67,52,-10 3 242 integral
-integral "
-u2320 686,921,83,29 3 243 integraltp
-u23AE 686,975,88 3 244 integralex
-u2321 686,921,81 3 245 integralbt
-parenrighttp 384,926,293,66 3 246 parenrighttp
-parenrightex 384,920,80,66 3 247 parenrightex
-parenrightbt 384,920,293,66 3 248 parenrightbt
-bracketrighttp 384,925,75 3 249 bracketrighttp
-rc "
-bracketrightex 384,925,75 3 250 bracketrightex
-bracketrightbt 384,925,75 3 251 bracketrightbt
-rf "
-bracerighttp 494,925,75 3 252 bracerighttp
-rt "
-bracerightmid 494,925,75 3 253 bracerightmid
-rk "
-bracerightbt 494,925,75 3 254 bracerightbt
-rb "
---- 790,808,3 3 256 apple
diff --git a/contrib/groff/font/devps/SS b/contrib/groff/font/devps/SS
deleted file mode 100644
index 92c3c54fd082..000000000000
--- a/contrib/groff/font/devps/SS
+++ /dev/null
@@ -1,194 +0,0 @@
-name SS
-internalname Symbol-Slanted
-special
-slant 15.5
-spacewidth 223
-charset
-space 223 0 32 space
---- 296,599,15,137,-72,99 3 33 exclam
---- 635,627,0,216,-173,99 3 34 universal
---- 445,599,15,162,-21,99 3 35 numbersign
---- 489,629,0,183,28,99 3 36 existential
---- 741,583,32,75,-97,75 3 37 percent
---- 692,589,16,103,-18,99 3 38 ampersand
---- 391,444,15,109,6,99 3 39 suchthat
---- 296,599,170,203,-39,99 3 40 parenleft
---- 296,600,170,93,72,93 3 41 parenright
---- 445,490,0,105,-76,99 3 42 asteriskmath
---- 489,474,0,123,-26,99 3 43 plus
---- 223,93,136,10,41,10 3 44 comma
---- 489,256,0,117,-24,99 3 45 minus
---- 223,85,15,1,-20,1 3 46 period
---- 247,575,15,208,55,99 3 47 slash
---- 445,610,15,142,-40,99 3 48 zero
---- 445,599,0,56,-57,56 3 49 one
---- 445,611,0,129,28,99 3 50 two
---- 445,611,16,115,-6,99 3 51 three
---- 445,610,0,135,-8,99 3 52 four
---- 445,610,15,188,14,99 3 53 five
---- 445,610,16,193,-37,99 3 54 six
---- 445,599,15,190,-101,99 3 55 seven
---- 445,611,16,141,-32,99 3 56 eight
---- 445,609,15,140,-2,99 3 57 nine
---- 247,409,15,89,-31,89 3 58 colon
---- 247,409,136,99,17,99 3 59 semicolon
---- 489,464,0,171,-37,99 3 60 less
---- 489,347,0,147,1,99 3 61 equal
---- 489,464,0,108,27,99 3 62 greater
---- 395,610,15,172,-113,99 3 63 question
---- 489,423,0,158,40,99 3 64 congruent
---- 643,599,0,21,47,21 3 65 Alpha
---- 594,598,0,101,24,99 3 66 Beta
---- 643,599,0,205,58,99 3 67 Chi
---- 545,612,0,46,45,46 3 68 Delta
---- 544,599,0,194,22,99 3 69 Epsilon
---- 679,598,0,132,-55,99 3 70 Phi
---- 537,599,0,227,19,99 3 71 Gamma
---- 643,599,0,243,15,99 3 72 Eta
---- 296,599,0,222,22,99 3 73 Iota
-+h 562,614,15,133,-58,99 3 74 theta1
---- 643,598,0,185,19,99 3 75 Kappa
---- 611,612,0,49,45,49 3 76 Lambda
---- 791,599,0,233,22,99 3 77 Mu
---- 643,599,7,234,24,99 3 78 Nu
---- 643,610,15,154,-62,99 3 79 Omicron
---- 684,599,0,213,28,99 3 80 Pi
---- 659,610,15,138,-62,99 3 81 Theta
---- 495,599,0,200,25,99 3 82 Rho
---- 527,599,0,186,45,99 3 83 Sigma
---- 544,599,0,229,-109,99 3 84 Tau
---- 614,599,0,240,-125,99 3 85 Upsilon
-ts 391,445,208,151,-28,99 3 86 sigma1
---- 684,612,0,126,20,99 3 87 Omega
---- 574,598,0,176,14,99 3 88 Xi
---- 708,608,0,227,-138,99 3 89 Psi
---- 544,599,0,231,11,99 3 90 Zeta
---- 296,599,138,207,16,99 3 91 bracketleft
---- 768,426,0,0,-110 3 92 therefore
---- 296,599,138,159,64,99 3 93 bracketright
---- 586,600,0,60,37,60 3 94 perpendicular
---- 445,0,224,0,122 3 95 underscore
---- 445,816,0,829,-622,99 3 96 radicalex
-*a 562,445,15,146,-34,99 3 97 alpha
-*b 489,659,198,139,57,99 3 98 beta
-*x 489,445,206,134,98,99 3 99 chi
-*d 440,658,16,181,-33,99 3 100 delta
-*e 391,447,17,127,1,99 3 101 epsilon
-*f 464,596,200,103,-28,99 3 102 phi
-*g 366,444,200,252,-42,99 3 103 gamma
-*y 537,457,180,68,-50,68 3 104 eta
-*i 293,448,16,53,-47,53 3 105 iota
-+f 537,444,199,117,-42,99 3 106 phi1
-*k 489,447,0,182,-56,99 3 107 kappa
-*l 489,658,16,91,29,91 3 108 lambda
-*m 513,445,198,70,68,70 3 109 mu
-*n 464,451,15,134,-69,99 3 110 nu
-*o 489,444,17,87,-36,87 3 111 omicron
-*p 489,433,18,160,-8,99 3 112 pi
-*h 464,614,16,140,-53,99 3 113 theta
-*r 489,444,205,82,69,82 3 114 rho
-*s 537,445,19,175,-37,99 3 115 sigma
-*t 391,445,16,170,-45,99 3 116 tau
-*u 513,451,15,95,-55,95 3 117 upsilon
-+p 635,519,15,173,-28,99 3 118 omega1
-*w 611,445,16,126,-35,99 3 119 omega
-*c 439,681,200,126,-20,99 3 120 xi
-*q 611,445,203,198,-91,99 3 121 psi
-*z 440,673,200,190,-50,99 3 122 zeta
---- 427,599,163,163,-66,99 3 123 braceleft
---- 178,599,158,179,41,99 3 124 bar
---- 427,599,163,67,31,67 3 125 braceright
---- 489,273,0,110,-28,99 3 126 similar
---- 552,609,0,208,-84,99 3 161 Upsilon1
---- 220,654,0,223,-106,99 3 162 minute
---- 489,569,0,206,24,99 3 163 lessequal
---- 149,603,11,391,214,99 3 164 fraction
---- 635,360,0,107,-41,99 3 165 infinity
---- 445,612,172,219,86,99 3 166 florin
---- 670,474,23,25,-69,25 3 167 club
---- 670,490,32,0,-148 3 168 diamond
---- 670,473,29,59,-155,59 3 169 heart
---- 670,488,32,0,-82 3 170 spade
---- 927,455,13,103,-40,99 3 171 arrowboth
---- 878,455,13,87,-47,87 3 172 arrowleft
---- 537,810,0,204,-173,99 3 173 arrowup
---- 878,455,13,94,-55,94 3 174 arrowright
---- 537,790,20,85,-54,85 3 175 arrowdown
---- 356,609,0,160,-137,99 3 176 degree
---- 489,574,0,154,41,99 3 177 plusminus
---- 366,656,0,244,-100,99 3 178 second
---- 489,569,0,143,24,99 3 179 greaterequal
---- 489,466,0,170,22,99 3 180 multiply
---- 635,360,0,82,-40,82 3 181 proportional
---- 440,664,18,152,-12,99 3 182 partialdiff
---- 409,421,0,95,-68,95 3 183 bullet
---- 489,406,0,119,-24,99 3 184 divide
---- 489,489,22,148,-1,99 3 185 notequal
---- 489,394,0,163,15,99 3 186 equivalence
---- 489,351,0,133,-7,99 3 187 approxequal
---- 890,85,15,0,-57 3 188 ellipsis
---- 537,899,107,92,-166,92 3 189 arrowvertex
---- 890,246,0,171,42,99 3 190 arrowhorizex
---- 586,560,14,174,10,99 3 191 carriagereturn
---- 732,586,16,58,-109,58 3 192 aleph
---- 611,659,47,123,24,99 3 193 Ifraktur
---- 708,653,13,175,-21,99 3 194 Rfraktur
---- 878,510,188,50,-62,50 3 195 weierstrass
---- 684,599,15,124,-64,99 3 196 circlemultiply
---- 684,601,13,125,-65,99 3 197 circleplus
---- 732,640,21,202,12,99 3 198 emptyset
---- 684,453,0,80,14,80 3 199 intersection
---- 684,438,15,154,-60,99 3 200 union
---- 635,418,0,90,32,90 3 201 propersuperset
---- 635,418,111,89,67,89 3 202 reflexsuperset
---- 635,481,62,159,-37,99 3 203 notsubset
---- 635,418,0,159,-37,99 3 204 propersubset
---- 635,418,111,159,34,99 3 205 reflexsubset
---- 635,417,0,0,-43 3 206 element
---- 635,494,52,0,-24 3 207 notelement
---- 684,599,0,199,27,99 3 208 angle
---- 635,639,17,220,-181,99 3 209 gradient
---- 703,596,18,110,-70,99 3 210 registerserif
---- 703,601,13,113,-72,99 3 211 copyrightserif
---- 792,599,0,205,-119,99 3 212 trademarkserif
---- 732,668,90,238,56,99 3 213 product
---- 489,816,34,272,-84,99 3 214 radical
---- 223,276,0,52,-81,52 3 215 dotmath
---- 635,256,0,100,-28,99 3 216 logicalnot
---- 537,404,0,32,29,32 3 217 logicaland
---- 537,424,0,152,-101,99 3 218 logicalor
---- 927,454,18,101,-42,99 3 219 arrowdblboth
---- 878,457,13,114,-46,99 3 220 arrowdblleft
---- 537,811,0,201,-102,99 3 221 arrowdblup
---- 878,452,18,89,-21,89 3 222 arrowdblright
---- 537,792,17,152,-53,99 3 223 arrowdbldown
---- 440,663,0,129,-71,99 3 224 lozenge
---- 293,664,176,229,-48,99 3 225 angleleft
---- 703,596,18,110,-70,99 3 226 registersans
---- 703,601,13,111,-70,99 3 227 copyrightsans
---- 700,599,0,182,-129,99 3 228 trademarksans
---- 635,669,96,171,65,99 3 229 summation
---- 342,824,261,350,96,99 3 230 parenlefttp
---- 342,823,76,46,38,46 3 231 parenleftex
---- 342,824,261,47,-63,47 3 232 parenleftbt
---- 342,824,71,268,72,99 3 233 bracketlefttp
---- 342,823,70,13,72,13 3 234 bracketleftex
---- 342,824,71,14,72,14 3 235 bracketleftbt
---- 440,824,67,258,-108,99 3 236 bracelefttp
---- 440,832,76,96,-76,96 3 237 braceleftmid
---- 440,824,62,94,-169,94 3 238 braceleftbt
---- 440,832,71,96,-107,96 3 239 braceex
---- 293,664,176,102,79,99 3 241 angleright
---- 244,815,95,305,63,99 3 242 integral
---- 611,820,74,312,-222,99 3 243 integraltp
---- 611,868,78,79,-221,79 3 244 integralex
---- 611,820,72,64,20,64 3 245 integralbt
---- 342,824,261,206,-223,99 3 246 parenrighttp
---- 342,823,76,365,-281,99 3 247 parenrightex
---- 342,824,261,365,80,99 3 248 parenrightbt
---- 342,824,71,285,-199,99 3 249 bracketrighttp
---- 342,823,70,285,-200,99 3 250 bracketrightex
---- 342,824,71,285,54,99 3 251 bracketrightbt
---- 440,824,67,35,-108,35 3 252 bracerighttp
---- 440,832,76,127,-105,99 3 253 bracerightmid
---- 440,824,62,94,54,94 3 254 bracerightbt
diff --git a/contrib/groff/font/devps/TB b/contrib/groff/font/devps/TB
deleted file mode 100644
index e9f11c790b8f..000000000000
--- a/contrib/groff/font/devps/TB
+++ /dev/null
@@ -1,460 +0,0 @@
-name TB
-internalname Times-Bold
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -74
-A w -90
-A v -100
-A u -50
-A ' -74
-A cq -74
-A p -25
-A Y -100
-A W -130
-A V -145
-A U -50
-A T -95
-A Q -45
-A O -45
-A G -55
-A C -55
-B U -10
-B A -30
-D . -20
-D Y -40
-D W -40
-D V -40
-D A -35
-F . -110
-F o -25
-F e -25
-F , -92
-F a -25
-F A -90
-J u -15
-J . -20
-J o -15
-J e -15
-J a -15
-J A -30
-K y -45
-K u -15
-K o -25
-K e -25
-K O -30
-L y -55
-L ' -110
-L cq -110
-L rq -20
-L Y -92
-L W -92
-L V -92
-L T -92
-N A -20
-O Y -50
-O X -40
-O W -50
-O V -50
-O T -40
-O A -40
-P . -110
-P o -20
-P e -20
-P , -92
-P a -10
-P A -74
-Q . -20
-Q U -10
-R Y -35
-R W -35
-R V -55
-R U -30
-R T -40
-R O -30
-T y -74
-T w -74
-T u -92
-T ; -74
-T r -74
-T . -90
-T o -92
-T i -18
-T - -92
-T hy -92
-T e -92
-T , -74
-T : -74
-T a -92
-T O -18
-T A -90
-U . -50
-U , -50
-U A -60
-V u -92
-V ; -92
-V . -145
-V o -100
-V i -37
-V - -74
-V hy -74
-V e -100
-V , -129
-V : -92
-V a -92
-V O -45
-V G -30
-V A -135
-W y -60
-W u -50
-W ; -55
-W . -92
-W o -75
-W i -18
-W - -37
-W hy -37
-W e -65
-W , -92
-W : -55
-W a -65
-W O -10
-W A -120
-Y u -92
-Y ; -92
-Y . -92
-Y o -111
-Y i -37
-Y - -92
-Y hy -92
-Y e -111
-Y , -92
-Y : -92
-Y a -85
-Y O -35
-Y A -110
-a v -25
-b v -15
-b u -20
-b . -40
-b b -10
-, ' -55
-, cq -55
-, rq -45
-d w -15
-e v -15
-f ' 55
-f cq 55
-f rq 50
-f . -15
-f o -25
-f i -25
-f .i -35
-f , -15
-g . -15
-h y -15
-i v -10
-k y -15
-k o -15
-k e -10
-n v -40
-o w -10
-o v -10
-. ' -55
-. cq -55
-. rq -55
-lq A -10
-` ` -63
-` oq -63
-oq ` -63
-oq oq -63
-` A -10
-oq A -10
-' v -20
-cq v -20
-' u0020 -74
-cq u0020 -74
-' s -37
-cq s -37
-' r -20
-cq r -20
-' ' -63
-' cq -63
-cq ' -63
-cq cq -63
-' d -20
-cq d -20
-r v -10
-r q -18
-r . -100
-r p -10
-r o -18
-r n -15
-r - -37
-r hy -37
-r g -10
-r e -18
-r , -92
-r c -18
-u0020 Y -55
-u0020 W -30
-u0020 V -45
-u0020 T -30
-u0020 A -55
-v . -70
-v o -10
-v e -10
-v , -55
-v a -10
-w . -70
-w o -10
-w , -55
-y . -70
-y o -25
-y e -10
-y , -55
-charset
-ha 581,676 2 0 asciicircum
-ti 520,333 0 1 asciitilde
-vS 556,914,19 2 2 Scaron
-vZ 667,914 2 3 Zcaron
-vs 389,704,14 2 4 scaron
-vz 444,704 2 5 zcaron
-:Y 722,877 2 6 Ydieresis
-tm 1000,676 2 7 trademark
-aq 278,691 2 8 quotesingle
-space 250 0 32 space
-! 333,691,13 2 33 exclam
-" 555,691 2 34 quotedbl
-dq "
-# 500,700 2 35 numbersign
-sh "
-$ 500,750,99 2 36 dollar
-Do "
-% 1000,692,14 2 37 percent
-& 833,691,16 2 38 ampersand
-' 333,691 2 39 quoteright
-cq "
-( 333,694,168 2 40 parenleft
-) 333,694,168 2 41 parenright
-* 500,691 2 42 asterisk
-+ 570,506 0 43 plus
-, 250,155,180 0 44 comma
-- 333,287 0 45 hyphen
-hy "
-. 250,156,13 0 46 period
-/ 278,691,19,24,24 2 47 slash
-sl "
-0 500,688,13 2 48 zero
-1 500,688 2 49 one
-2 500,688 2 50 two
-3 500,688,14 2 51 three
-4 500,688 2 52 four
-5 500,676,8 2 53 five
-6 500,688,13 2 54 six
-7 500,676 2 55 seven
-8 500,688,13 2 56 eight
-9 500,688,13 2 57 nine
-: 333,472,13 0 58 colon
-; 333,472,180 0 59 semicolon
-< 570,514,8 0 60 less
-= 570,399 0 61 equal
-> 570,514,8 0 62 greater
-? 500,689,13 2 63 question
-@ 930,691,19 2 64 at
-at "
-A 722,690 2 65 A
-B 667,676 2 66 B
-C 722,691,19 2 67 C
-D 722,676 2 68 D
-E 667,676 2 69 E
-F 611,676 2 70 F
-G 778,691,19 2 71 G
-H 778,676 2 72 H
-I 389,676 2 73 I
-J 500,676,96 2 74 J
-K 778,676 2 75 K
-L 667,676 2 76 L
-M 944,676 2 77 M
-N 722,676,18 2 78 N
-O 778,691,19 2 79 O
-P 611,676 2 80 P
-Q 778,691,176 2 81 Q
-R 722,676 2 82 R
-S 556,692,19 2 83 S
-T 667,676 2 84 T
-U 722,676,19 2 85 U
-V 722,676,18 2 86 V
-W 1000,676,15 2 87 W
-X 722,676 2 88 X
-Y 722,676 2 89 Y
-Z 667,676 2 90 Z
-[ 333,678,149 2 91 bracketleft
-lB "
-\ 278,691,19,25,25 2 92 backslash
-rs "
-] 333,678,149 2 93 bracketright
-rB "
-a^ 333,704,0,2,2 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 333,691 2 96 quoteleft
-oq "
-a 500,473,14 0 97 a
-b 556,676,14 2 98 b
-c 444,473,14 0 99 c
-d 556,676,14 2 100 d
-e 444,473,14 0 101 e
-f 333,691,0,56 2 102 f
-g 500,473,206 1 103 g
-h 556,676 2 104 h
-i 278,691 2 105 i
-j 333,691,203,0,57 3 106 j
-k 556,676 2 107 k
-l 278,676 2 108 l
-m 833,473 0 109 m
-n 556,473 0 110 n
-o 500,473,14 0 111 o
-p 556,473,205 1 112 p
-q 556,473,205 1 113 q
-r 444,473 0 114 r
-s 389,473,14 0 115 s
-t 333,630,12 2 116 t
-u 556,461,14 0 117 u
-v 500,461,14 0 118 v
-w 722,461,14 0 119 w
-x 500,461 0 120 x
-y 500,461,205 1 121 y
-z 444,461 0 122 z
-lC 394,698,175 2 123 braceleft
-{ "
-ba 220,691,19 2 124 bar
-| "
-rC 394,698,175 2 125 braceright
-} "
-a~ 333,674,0,16,16 2 126 tilde
-~ "
-bq 333,155,180 0 128 quotesinglbase
-Fo 500,415 0 129 guillemotleft
-Fc 500,415 0 130 guillemotright
-bu 350,478 0 131 bullet
-Fn 500,706,155 2 132 florin
-f/ 167,688,12,162,168 2 133 fraction
-%0 1000,706,29 2 134 perthousand
-dg 500,691,134 2 135 dagger
-dd 500,691,132 2 136 daggerdbl
-en 500,271 0 137 endash
-em 1000,271 0 138 emdash
-fi 556,691 2 140 fi
-fl 556,691 2 141 fl
-.i 278,461 0 144 dotlessi
-ga 333,713 2 146 grave
-a" 333,713,0,92,13 2 147 hungarumlaut
-a. 333,667 2 148 dotaccent
-ab 333,691 2 149 breve
-ah 333,704,0,2,2 2 150 caron
-ao 333,740 2 151 ring
-ho 333,44,173 0 152 ogonek
-lq 500,691 2 153 quotedblleft
-rq 500,691 2 154 quotedblright
-oe 722,473,14 0 155 oe
-/l 278,676,0,25,22 2 156 lslash
-Bq 500,155,180 0 157 quotedblbase
-OE 1000,684,5 2 158 OE
-/L 667,676 2 159 Lslash
-r! 333,501,203 1 161 exclamdown
-ct 500,588,140 0 162 cent
-Po 500,684,14 2 163 sterling
-Cs 500,613,0,26,26 0 164 currency
-Ye 500,676,0,47,64 2 165 yen
-bb 220,691,19 2 166 brokenbar
-sc 500,691,132 2 167 section
-ad 333,667,0,2,2 2 168 dieresis
-co 747,691,19 2 169 copyright
-Of 300,688,0,1,1 2 170 ordfeminine
-fo 333,415 0 171 guilsinglleft
-tno 570,399 0 172 logicalnot
-\- 570,297 0 173 minus
-rg 747,691,19 2 174 registered
-a- 333,637 2 175 macron
-de 400,688 2 176 degree
-t+- 570,506 0 177 plusminus
-S2 300,688 2 178 twosuperior
-S3 300,688 2 179 threesuperior
-aa 333,713 2 180 acute
-mc 556,461,206 1 181 mu
-ps 540,676,186 2 182 paragraph
-pc 250,417 0 183 periodcentered
-ac 333,0,218 1 184 cedilla
-S1 300,688 2 185 onesuperior
-Om 330,688 2 186 ordmasculine
-fc 333,415 0 187 guilsinglright
-14 750,688,12 2 188 onequarter
-12 750,688,12,25,7 2 189 onehalf
-34 750,688,12 2 190 threequarters
-r? 500,501,201 0 191 questiondown
-`A 722,923 2 192 Agrave
-'A 722,923 2 193 Aacute
-^A 722,914 2 194 Acircumflex
-~A 722,884 2 195 Atilde
-:A 722,877 2 196 Adieresis
-oA 722,935 2 197 Aring
-AE 1000,676 2 198 AE
-,C 722,691,218 3 199 Ccedilla
-`E 667,923 2 200 Egrave
-'E 667,923 2 201 Eacute
-^E 667,914 2 202 Ecircumflex
-:E 667,877 2 203 Edieresis
-`I 389,923 2 204 Igrave
-'I 389,923 2 205 Iacute
-^I 389,914 2 206 Icircumflex
-:I 389,877 2 207 Idieresis
--D 722,676 2 208 Eth
-~N 722,884,18 2 209 Ntilde
-`O 778,923,19 2 210 Ograve
-'O 778,923,19 2 211 Oacute
-^O 778,914,19 2 212 Ocircumflex
-~O 778,884,19 2 213 Otilde
-:O 778,877,19 2 214 Odieresis
-tmu 570,490 0 215 multiply
-/O 778,737,74 2 216 Oslash
-`U 722,923,19 2 217 Ugrave
-'U 722,923,19 2 218 Uacute
-^U 722,914,19 2 219 Ucircumflex
-:U 722,877,19 2 220 Udieresis
-'Y 722,928 2 221 Yacute
-TP 611,676 2 222 Thorn
-ss 556,691,12 2 223 germandbls
-`a 500,713,14 2 224 agrave
-'a 500,713,14 2 225 aacute
-^a 500,704,14 2 226 acircumflex
-~a 500,674,14 2 227 atilde
-:a 500,667,14 2 228 adieresis
-oa 500,740,14 2 229 aring
-ae 722,473,14 0 230 ae
-,c 444,473,218 1 231 ccedilla
-`e 444,713,14 2 232 egrave
-'e 444,713,14 2 233 eacute
-^e 444,704,14 2 234 ecircumflex
-:e 444,667,14 2 235 edieresis
-`i 278,713,0,0,26 2 236 igrave
-'i 278,713,0,12 2 237 iacute
-^i 278,704,0,23,36 2 238 icircumflex
-:i 278,667,0,23,36 2 239 idieresis
-Sd 500,691,14 2 240 eth
-~n 556,674 2 241 ntilde
-`o 500,713,14 2 242 ograve
-'o 500,713,14 2 243 oacute
-^o 500,704,14 2 244 ocircumflex
-~o 500,674,14 2 245 otilde
-:o 500,667,14 2 246 odieresis
-tdi 570,537,31 0 247 divide
-/o 500,549,92 0 248 oslash
-`u 556,713,14 2 249 ugrave
-'u 556,713,14 2 250 uacute
-^u 556,704,14 2 251 ucircumflex
-:u 556,667,14 2 252 udieresis
-'y 500,713,205 3 253 yacute
-Tp 556,676,205 3 254 thorn
-:y 500,667,205 3 255 ydieresis
-u2026 1000,156,13 0 256 ellipsis
diff --git a/contrib/groff/font/devps/TBI b/contrib/groff/font/devps/TBI
deleted file mode 100644
index abda49189244..000000000000
--- a/contrib/groff/font/devps/TBI
+++ /dev/null
@@ -1,443 +0,0 @@
-name TBI
-internalname Times-BoldItalic
-slant 15
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -74
-A w -74
-A v -74
-A u -30
-A ' -74
-A cq -74
-A Y -70
-A W -100
-A V -95
-A U -50
-A T -55
-A Q -55
-A O -50
-A G -60
-A C -65
-B U -10
-B A -25
-D Y -50
-D W -40
-D V -50
-D A -25
-F r -50
-F . -129
-F o -70
-F i -40
-F e -100
-F , -129
-F a -95
-F A -100
-J u -40
-J . -10
-J o -40
-J e -40
-J , -10
-J a -40
-J A -25
-K y -20
-K u -20
-K o -25
-K e -25
-K O -30
-L y -37
-L ' -55
-L cq -55
-L Y -37
-L W -37
-L V -37
-L T -18
-N A -30
-O Y -50
-O X -40
-O W -50
-O V -50
-O T -40
-O A -40
-P . -129
-P o -55
-P e -50
-P , -129
-P a -40
-P A -85
-Q U -10
-R Y -18
-R W -18
-R V -18
-R U -40
-R T -30
-R O -40
-T y -37
-T w -37
-T u -37
-T ; -74
-T r -37
-T . -92
-T o -95
-T i -37
-T - -92
-T hy -92
-T e -92
-T , -92
-T : -74
-T a -92
-T O -18
-T A -55
-U A -45
-V u -55
-V ; -74
-V . -129
-V o -111
-V i -55
-V - -70
-V hy -70
-V e -111
-V , -129
-V : -74
-V a -111
-V O -30
-V G -10
-V A -85
-W y -55
-W u -55
-W ; -55
-W . -74
-W o -80
-W i -37
-W - -50
-W hy -50
-W e -90
-W , -74
-W : -55
-W a -85
-W O -15
-W A -74
-Y u -92
-Y ; -92
-Y . -74
-Y o -111
-Y i -55
-Y - -92
-Y hy -92
-Y e -111
-Y , -92
-Y : -92
-Y a -92
-Y O -25
-Y A -74
-b u -20
-b . -40
-b b -10
-c k -10
-c h -10
-, ' -95
-, cq -95
-, rq -95
-e b -10
-f ' 55
-f cq 55
-f . -10
-f o -10
-f f -18
-f e -10
-f .i -30
-f , -10
-k o -10
-k e -30
-n v -40
-o y -10
-o x -10
-o w -25
-o v -15
-. ' -95
-. cq -95
-. rq -95
-` ` -74
-` oq -74
-oq ` -74
-oq oq -74
-' v -15
-cq v -15
-' t -37
-cq t -37
-' u0020 -74
-cq u0020 -74
-' s -74
-cq s -74
-' r -15
-cq r -15
-' ' -74
-' cq -74
-cq ' -74
-cq cq -74
-' d -15
-cq d -15
-r . -65
-r , -65
-u0020 Y -70
-u0020 W -70
-u0020 V -70
-u0020 A -37
-v . -37
-v o -15
-v e -15
-v , -37
-w . -37
-w o -15
-w e -10
-w , -37
-w a -10
-x e -10
-y . -37
-y , -37
-charset
-ha 570,669,0,0,-17 2 0 asciicircum
-ti 570,333,0,0,-4 0 1 asciitilde
-vS 556,897,18,20,48,20 2 2 Scaron
-vZ 611,897,0,29,61,29 2 3 Zcaron
-vs 389,690,13,100,69,99 2 4 scaron
-vz 389,690,78,85,93,85 2 5 zcaron
-:Y 611,862,0,98,-23,98 2 6 Ydieresis
-tm 1000,669,0,18,18,18 2 7 trademark
-aq 278,685,0,40,-78,40 2 8 quotesingle
-space 250 0 32 space
-! 389,684,13,31,-17,31 2 33 exclam
-" 555,685,0,31,-86,31 2 34 quotedbl
-dq "
-# 500,700,0,83,83,83 2 35 numbersign
-sh "
-$ 500,733,100,47,70,47 2 36 dollar
-Do "
-% 833,692,10,10,11,10 2 37 percent
-& 778,682,19,0,45 2 38 ampersand
-' 333,685,0,19,-48,19 2 39 quoteright
-cq "
-( 333,685,179,61,22,61 2 40 parenleft
-) 333,685,179,0,94 2 41 parenright
-* 500,685,0,6,-15,6 2 42 asterisk
-+ 570,506,0,17,17,17 0 43 plus
-, 250,134,182,0,110 0 44 comma
-- 333,282,0,0,48 0 45 hyphen
-hy "
-. 250,135,13,0,59 0 46 period
-/ 278,685,18,114,114,99 2 47 slash
-sl "
-0 500,683,14,27,33,27 2 48 zero
-1 500,683,0,0,45 2 49 one
-2 500,683,0,0,77 2 50 two
-3 500,683,13,0,65 2 51 three
-4 500,683,0,53,65,53 2 52 four
-5 500,669,13,37,61,37 2 53 five
-6 500,679,15,59,27,59 2 54 six
-7 500,669,0,75,-2,75 2 55 seven
-8 500,683,13,26,47,26 2 56 eight
-9 500,683,10,25,62,25 2 57 nine
-: 333,459,13,0,27 0 58 colon
-; 333,459,183,0,75 0 59 semicolon
-< 570,514,8,19,19,19 0 60 less
-= 570,399,0,17,17,17 0 61 equal
-> 570,514,8,19,19,19 0 62 greater
-? 500,684,13,20,-29,20 2 63 question
-@ 832,685,18,0,-13 2 64 at
-at "
-A 667,683,0,0,117 2 65 A
-B 667,669,0,7,74,7 2 66 B
-C 667,685,18,60,18,60 2 67 C
-D 722,669,0,13,96,13 2 68 D
-E 667,669,0,36,77,36 2 69 E
-F 667,669,0,43,63,43 2 70 F
-G 722,685,18,34,29,34 2 71 G
-H 778,669,0,71,74,71 2 72 H
-I 389,669,0,67,82,67 2 73 I
-J 500,669,99,74,96,74 2 74 J
-K 667,669,0,85,71,85 2 75 K
-L 611,669,0,29,72,29 2 76 L
-M 889,669,12,78,79,78 2 77 M
-N 722,669,15,76,77,76 2 78 N
-O 722,685,18,19,23,19 2 79 O
-P 611,669,0,52,77,52 2 80 P
-Q 722,685,208,19,23,19 3 81 Q
-R 667,669,0,6,79,6 2 82 R
-S 556,685,18,20,48,20 2 83 S
-T 611,669,0,89,0,89 2 84 T
-U 722,669,18,72,-17,72 2 85 U
-V 667,669,18,98,-15,98 2 86 V
-W 889,669,18,101,-15,99 2 87 W
-X 667,669,0,77,74,77 2 88 X
-Y 611,669,0,98,-23,98 2 89 Y
-Z 611,669,0,29,61,29 2 90 Z
-[ 333,674,159,79,87,79 2 91 bracketleft
-lB "
-\ 278,685,18,51,51,51 2 92 backslash
-rs "
-] 333,674,157,60,106,60 2 93 bracketright
-rB "
-a^ 333,690,0,84,10,84 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 333,685,0,49,-78,49 2 96 quoteleft
-oq "
-a 500,462,14,5,71,5 0 97 a
-b 500,699,13,0,64 2 98 b
-c 444,462,13,0,55 0 99 c
-d 500,699,13,67,71,67 2 100 d
-e 444,462,13,4,45,4 0 101 e
-f 333,698,205,163,219,99 3 102 f
-g 500,462,203,28,102,28 1 103 g
-h 556,699,9,0,63 2 104 h
-i 278,684,9,35,48,35 2 105 i
-j 278,684,207,51,239,51 3 106 j
-k 500,699,8,33,73,33 2 107 k
-l 278,699,9,62,48,62 2 108 l
-m 778,462,9,0,64 0 109 m
-n 556,462,9,0,56 0 110 n
-o 500,462,13,0,53 0 111 o
-p 500,462,205,0,170 1 112 p
-q 500,462,205,21,49,21 1 113 q
-r 389,462,0,50,71,50 0 114 r
-s 389,462,13,0,69 0 115 s
-t 278,594,9,53,61,53 2 116 t
-u 556,462,9,0,35 0 117 u
-v 444,462,13,7,34,7 0 118 v
-w 667,462,13,0,34 0 119 w
-x 500,462,13,19,96,19 0 120 x
-y 444,462,205,0,144 1 121 y
-z 389,449,78,29,93,29 0 122 z
-lC 348,686,187,138,45,99 2 123 braceleft
-{ "
-ba 220,685,18,0,-16 2 124 bar
-| "
-rC 348,686,187,4,179,4 2 125 braceright
-} "
-a~ 333,655,0,124,2,99 2 126 tilde
-~ "
-bq 333,134,182,0,55 0 128 quotesinglbase
-Fo 500,415,0,18,38,18 0 129 guillemotleft
-Fc 500,415,0,18,38,18 0 130 guillemotright
-bu 350,525,0,50,50,50 0 131 bullet
-Fn 500,707,156,87,137,87 2 132 florin
-f/ 167,683,14,207,219,99 2 133 fraction
-%0 1000,706,29,46,43,46 2 134 perthousand
-dg 500,685,145,44,-41,44 2 135 dagger
-dd 500,685,139,43,40,43 2 136 daggerdbl
-en 500,269,0,27,90,27 0 137 endash
-em 1000,269,0,27,90,27 0 138 emdash
-fi 556,703,205,8,238,8 3 140 fi
-fl 556,704,205,47,236,47 3 141 fl
-.i 278,462,9,10,48,10 0 144 dotlessi
-ga 333,697,0,14,-35,14 2 146 grave
-a" 333,697,0,215,-19,99 2 147 hungarumlaut
-a. 333,655,0,10,-113,10 2 148 dotaccent
-ab 333,678,0,104,-21,99 2 149 breve
-ah 333,690,0,128,-29,99 2 150 caron
-ao 333,729,0,57,-77,57 2 151 ring
-ho 333,44,173,0,90 0 152 ogonek
-lq 500,685,0,63,-3,63 2 153 quotedblleft
-rq 500,685,0,63,-3,63 2 154 quotedblright
-oe 722,462,13,2,44,2 0 155 oe
-/l 278,699,9,73,63,73 2 156 lslash
-Bq 500,134,182,0,107 0 157 quotedblbase
-OE 944,677,8,52,27,52 2 158 OE
-/L 611,669,0,29,72,29 2 159 Lslash
-r! 389,492,205,0,31 1 161 exclamdown
-ct 500,576,143,0,8 0 162 cent
-Po 500,683,12,60,82,60 2 163 sterling
-Cs 500,586,0,76,76,76 0 164 currency
-Ye 500,669,0,178,17,99 2 165 yen
-bb 220,685,18,0,-16 2 166 brokenbar
-sc 500,685,143,9,14,9 2 167 section
-ad 333,655,0,114,-5,99 2 168 dieresis
-co 747,685,18,21,20,21 2 169 copyright
-Of 266,685,0,114,34,99 2 170 ordfeminine
-fo 333,415,0,20,18,20 0 171 guilsinglleft
-tno 606,399,0,0,-1 0 172 logicalnot
-\- 606,297,0,0,-1 0 173 minus
-rg 747,685,18,21,20,21 2 174 registered
-a- 333,623,0,110,-1,99 2 175 macron
-de 400,683,0,19,-33,19 2 176 degree
-t+- 570,506,0,17,17,17 0 177 plusminus
-S2 300,683,0,63,48,63 2 178 twosuperior
-S3 300,683,0,71,33,71 2 179 threesuperior
-aa 333,697,0,96,-89,96 2 180 acute
-mc 576,449,207,0,110 1 181 mu
-ps 500,669,193,112,107,99 2 182 paragraph
-pc 250,405,0,0,-1 0 183 periodcentered
-ac 333,5,218,0,130 1 184 cedilla
-S1 300,683,0,51,20,51 2 185 onesuperior
-Om 300,685,0,97,-6,97 2 186 ordmasculine
-fc 333,415,0,0,40 0 187 guilsinglright
-14 750,683,14,21,43,21 2 188 onequarter
-12 750,683,14,23,59,23 2 189 onehalf
-34 750,683,14,26,43,26 2 190 threequarters
-r? 500,492,205,0,20 1 191 questiondown
-`A 667,904,0,0,117 2 192 Agrave
-'A 667,904,0,0,117 2 193 Aacute
-^A 667,897,0,0,117 2 194 Acircumflex
-~A 667,862,0,0,117 2 195 Atilde
-:A 667,862,0,0,117 2 196 Adieresis
-oA 667,921,0,0,117 2 197 Aring
-AE 944,669,0,24,114,24 2 198 AE
-,C 667,685,218,60,18,60 3 199 Ccedilla
-`E 667,904,0,36,77,36 2 200 Egrave
-'E 667,904,0,36,77,36 2 201 Eacute
-^E 667,897,0,36,77,36 2 202 Ecircumflex
-:E 667,862,0,36,77,36 2 203 Edieresis
-`I 389,904,0,67,82,67 2 204 Igrave
-'I 389,904,0,73,82,73 2 205 Iacute
-^I 389,897,0,81,82,81 2 206 Icircumflex
-:I 389,862,0,106,82,99 2 207 Idieresis
--D 722,669,0,28,81,28 2 208 Eth
-~N 722,862,15,76,77,76 2 209 Ntilde
-`O 722,904,18,19,23,19 2 210 Ograve
-'O 722,904,18,19,23,19 2 211 Oacute
-^O 722,897,18,19,23,19 2 212 Ocircumflex
-~O 722,862,18,19,23,19 2 213 Otilde
-:O 722,862,18,19,23,19 2 214 Odieresis
-tmu 570,490,0,2,2,2 0 215 multiply
-/O 722,764,125,19,23,19 2 216 Oslash
-`U 722,904,18,72,-17,72 2 217 Ugrave
-'U 722,904,18,72,-17,72 2 218 Uacute
-^U 722,897,18,72,-17,72 2 219 Ucircumflex
-:U 722,862,18,72,-17,72 2 220 Udieresis
-'Y 611,904,0,98,-23,98 2 221 Yacute
-TP 611,669,0,12,77,12 2 222 Thorn
-ss 500,705,200,23,250,23 2 223 germandbls
-`a 500,697,14,5,71,5 2 224 agrave
-'a 500,697,14,13,71,13 2 225 aacute
-^a 500,690,14,5,71,5 2 226 acircumflex
-~a 500,655,14,41,71,41 2 227 atilde
-:a 500,655,14,21,71,21 2 228 adieresis
-oa 500,729,14,5,71,5 2 229 aring
-ae 722,462,13,1,55,1 0 230 ae
-,c 444,462,218,0,74 1 231 ccedilla
-`e 444,697,13,4,45,4 2 232 egrave
-'e 444,697,13,41,45,41 2 233 eacute
-^e 444,690,13,29,45,29 2 234 ecircumflex
-:e 444,655,13,49,45,49 2 235 edieresis
-`i 278,697,9,32,48,32 2 236 igrave
-'i 278,697,9,124,48,99 2 237 iacute
-^i 278,690,9,97,52,97 2 238 icircumflex
-:i 278,655,9,132,48,99 2 239 idieresis
-Sd 500,699,13,4,53,4 2 240 eth
-~n 556,655,9,0,56 2 241 ntilde
-`o 500,697,13,0,53 2 242 ograve
-'o 500,697,13,13,53,13 2 243 oacute
-^o 500,690,13,1,53,1 2 244 ocircumflex
-~o 500,655,13,41,53,41 2 245 otilde
-:o 500,655,13,16,53,16 2 246 odieresis
-tdi 570,535,29,17,17,17 0 247 divide
-/o 500,560,119,0,53 0 248 oslash
-`u 556,697,9,0,35 2 249 ugrave
-'u 556,697,9,0,35 2 250 uacute
-^u 556,690,9,0,35 2 251 ucircumflex
-:u 556,655,9,0,35 2 252 udieresis
-'y 444,697,205,41,144,41 3 253 yacute
-Tp 500,699,205,0,170 3 254 thorn
-:y 444,655,205,44,144,44 3 255 ydieresis
-u2026 1000,135,13,0,10 0 256 ellipsis
diff --git a/contrib/groff/font/devps/TI b/contrib/groff/font/devps/TI
deleted file mode 100644
index c5dc3af0430c..000000000000
--- a/contrib/groff/font/devps/TI
+++ /dev/null
@@ -1,456 +0,0 @@
-name TI
-internalname Times-Italic
-slant 7
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -55
-A w -55
-A v -55
-A u -20
-A ' -37
-A cq -37
-A Y -55
-A W -95
-A V -105
-A U -50
-A T -37
-A Q -40
-A O -40
-A G -35
-A C -30
-B U -10
-B A -25
-D Y -40
-D W -40
-D V -40
-D A -35
-F r -55
-F . -135
-F o -105
-F i -45
-F e -75
-F , -135
-F a -75
-F A -115
-J u -35
-J . -25
-J o -25
-J e -25
-J , -25
-J a -35
-J A -40
-K y -40
-K u -40
-K o -40
-K e -35
-K O -50
-L y -30
-L ' -37
-L cq -37
-L Y -20
-L W -55
-L V -55
-L T -20
-N A -27
-O Y -50
-O X -40
-O W -50
-O V -50
-O T -40
-O A -55
-P . -135
-P o -80
-P e -80
-P , -135
-P a -80
-P A -90
-Q U -10
-R Y -18
-R W -18
-R V -18
-R U -40
-R O -40
-T y -74
-T w -74
-T u -55
-T ; -65
-T r -55
-T . -74
-T o -92
-T i -55
-T - -74
-T hy -74
-T e -92
-T , -74
-T : -55
-T a -92
-T O -18
-T A -50
-U . -25
-U , -25
-U A -40
-V u -74
-V ; -74
-V . -129
-V o -111
-V i -74
-V - -55
-V hy -55
-V e -111
-V , -129
-V : -65
-V a -111
-V O -30
-V A -60
-W y -70
-W u -55
-W ; -65
-W . -92
-W o -92
-W i -55
-W - -37
-W hy -37
-W e -92
-W , -92
-W : -65
-W a -92
-W O -25
-W A -60
-Y u -92
-Y ; -65
-Y . -92
-Y o -92
-Y i -74
-Y - -74
-Y hy -74
-Y e -92
-Y , -92
-Y : -65
-Y a -92
-Y O -15
-Y A -50
-a g -10
-b u -20
-b . -40
-c k -20
-c h -15
-, ' -140
-, cq -140
-, rq -140
-e y -30
-e x -20
-e w -15
-e v -15
-e . -15
-e g -40
-e , -10
-f ' 92
-f cq 92
-f . -15
-f i -20
-f f -18
-f .i -60
-f , -10
-g . -15
-g g -10
-g e -10
-g , -10
-k y -10
-k o -10
-k e -10
-n v -40
-o v -10
-o g -10
-. ' -140
-. cq -140
-. rq -140
-` ` -111
-` oq -111
-oq ` -111
-oq oq -111
-' v -10
-cq v -10
-' t -30
-cq t -30
-' u0020 -111
-cq u0020 -111
-' s -40
-cq s -40
-' r -25
-cq r -25
-' ' -111
-' cq -111
-cq ' -111
-cq cq -111
-' d -25
-cq d -25
-r s -10
-r q -37
-r . -111
-r o -45
-r - -20
-r hy -20
-r g -37
-r e -37
-r d -37
-r , -111
-r c -37
-r a -15
-u0020 Y -75
-u0020 W -40
-u0020 V -35
-u0020 T -18
-u0020 A -18
-v . -74
-v , -74
-w . -74
-w , -74
-y . -55
-y , -55
-charset
-ha 422,666,0,50,50,43 2 0 asciicircum
-ti 541,323,0,11,10,11 0 1 asciitilde
-vS 500,873,18,70,33,43 2 2 Scaron
-vZ 556,873,0,100,56,43 2 3 Zcaron
-vs 389,661,13,115,34,43 2 4 scaron
-vz 389,661,81,95,52,43 2 5 zcaron
-:Y 556,818,0,127,-28,43 2 6 Ydieresis
-tm 980,653,0,27,20,27 2 7 trademark
-aq 214,666,0,77,-82,43 2 8 quotesingle
-space 250 0 32 space
-! 333,667,11,19,11,19 2 33 exclam
-" 420,666,0,62,-94,43 2 34 quotedbl
-dq "
-# 500,676,0,90,48,43 2 35 numbersign
-sh "
-$ 500,731,89,47,19,43 2 36 dollar
-Do "
-% 833,676,13,7,-29,7 2 37 percent
-& 778,666,18,0,-26 2 38 ampersand
-' 333,666,0,7,-101,7 2 39 quoteright
-cq "
-( 333,669,181,32,8,32 2 40 parenleft
-) 333,669,180,6,34,6 2 41 parenright
-* 500,666,0,42,-78,42 2 42 asterisk
-+ 675,506,0,0,-36 0 43 plus
-, 250,101,129,0,54 0 44 comma
-- 333,255,0,0,1 0 45 hyphen
-hy "
-. 250,100,11,0,23 0 46 period
-/ 278,666,18,158,115,43 2 47 slash
-sl "
-0 500,676,7,47,18,43 2 48 zero
-1 500,676,0,0,1 2 49 one
-2 500,676,0,2,38,2 2 50 two
-3 500,676,7,15,35,15 2 51 three
-4 500,676,0,29,49,29 2 52 four
-5 500,666,7,41,35,41 2 53 five
-6 500,686,7,71,20,43 2 54 six
-7 500,666,8,87,-25,43 2 55 seven
-8 500,676,7,43,20,43 2 56 eight
-9 500,676,17,42,27,42 2 57 nine
-: 333,441,11 0 58 colon
-; 333,441,129,0,23 0 59 semicolon
-< 675,514,8,0,-34 0 60 less
-= 675,386,0,0,-36 0 61 equal
-> 675,514,8,0,-34 0 62 greater
-? 500,664,12,22,-82,22 2 63 question
-@ 920,666,18,0,-68 2 64 at
-at "
-A 611,668,0,3,101,3 2 65 A
-B 611,653,0,27,58,27 2 66 B
-C 667,666,18,72,-16,43 2 67 C
-D 722,653,0,28,58,28 2 68 D
-E 611,653,0,73,51,43 2 69 E
-F 611,653,0,84,42,43 2 70 F
-G 722,666,18,50,-2,43 2 71 G
-H 722,653,0,95,58,43 2 72 H
-I 333,653,0,101,58,43 2 73 I
-J 444,653,18,97,56,43 2 74 J
-K 667,653,0,105,43,43 2 75 K
-L 556,653,0,53,58,43 2 76 L
-M 833,653,0,90,68,43 2 77 M
-N 667,653,15,110,70,43 2 78 N
-O 722,666,18,27,-10,27 2 79 O
-P 611,653,0,44,50,43 2 80 P
-Q 722,666,182,27,-9,27 2 81 Q
-R 611,653,0,27,63,27 2 82 R
-S 500,667,18,58,33,43 2 83 S
-T 556,653,0,127,-9,43 2 84 T
-U 722,653,18,93,-52,43 2 85 U
-V 611,653,18,127,-26,43 2 86 V
-W 833,653,18,123,-21,43 2 87 W
-X 611,653,0,94,79,43 2 88 X
-Y 556,653,0,127,-28,43 2 89 Y
-Z 556,653,0,100,56,43 2 90 Z
-[ 389,663,153,52,29,43 2 91 bracketleft
-lB "
-\ 278,666,18,91,91,43 2 92 backslash
-rs "
-] 389,663,153,43,38,43 2 93 bracketright
-rB "
-a^ 333,661,0,102,-41,43 2 94 circumflex
-^ "
-_ 500,0,125,50,50,43 0 95 underscore
-` 333,666,0,27,-121,27 2 96 quoteleft
-oq "
-a 500,441,11,26,33,26 0 97 a
-b 500,683,11,23,27,23 2 98 b
-c 444,441,11,31,20,31 0 99 c
-d 500,683,13,77,35,43 2 100 d
-e 444,441,11,18,19,18 0 101 e
-f 278,678,207,196,197,43 3 102 f
-g 500,441,206,22,42,22 1 103 g
-h 500,683,9,28,31,28 2 104 h
-i 278,654,11,36,1,36 2 105 i
-j 278,654,207,48,174,43 3 106 j
-k 444,683,11,67,36,43 2 107 k
-l 278,683,11,51,9,43 2 108 l
-m 722,441,9,32,38,32 0 109 m
-n 500,441,9,24,36,24 0 110 n
-o 500,441,11,18,23,18 0 111 o
-p 500,441,205,19,125,19 1 112 p
-q 500,441,209,33,25,33 1 113 q
-r 389,441,0,73,5,43 0 114 r
-s 389,442,13,27,34,27 0 115 s
-t 278,546,11,68,13,43 2 116 t
-u 500,441,11,25,8,25 0 117 u
-v 444,441,18,32,29,32 0 118 v
-w 667,441,18,31,34,31 0 119 w
-x 444,441,11,53,77,43 0 120 x
-y 444,441,206,32,74,32 1 121 y
-z 389,428,81,41,52,41 0 122 z
-lC 400,687,177,57,-1,43 2 123 braceleft
-{ "
-ba 275,666,18,0,-55 2 124 bar
-| "
-rC 400,687,177,0,57 2 125 braceright
-} "
-a~ 333,624,0,144,-50,43 2 126 tilde
-~ "
-bq 333,101,129,0,6 0 128 quotesinglbase
-Fo 500,403,0,0,-3 0 129 guillemotleft
-Fc 500,403,0,0,-5 0 130 guillemotright
-bu 350,461,0,10,10,10 0 131 bullet
-Fn 500,682,182,57,25,43 2 132 florin
-f/ 167,676,10,220,219,43 2 133 fraction
-%0 1000,706,19,60,25,43 2 134 perthousand
-dg 500,666,159,38,-51,38 2 135 dagger
-dd 500,666,143,41,28,41 2 136 daggerdbl
-en 500,243,0,55,56,43 0 137 endash
-em 889,243,0,55,56,43 0 138 emdash
-fi 500,681,207,31,191,31 3 140 fi
-fl 500,682,204,68,191,43 3 141 fl
-.i 278,441,11,7,1,7 0 144 dotlessi
-ga 333,664,0,28,-71,28 2 146 grave
-a" 333,664,0,203,-43,43 2 147 hungarumlaut
-a. 333,606,0,22,-157,22 2 148 dotaccent
-ab 333,650,0,135,-67,43 2 149 breve
-ah 333,661,0,143,-71,43 2 150 caron
-ao 333,691,0,72,-105,43 2 151 ring
-ho 333,40,169,0,70 0 152 ogonek
-lq 556,666,0,8,-116,8 2 153 quotedblleft
-rq 556,666,0,0,-101 2 154 quotedblright
-oe 667,441,12,29,30,29 0 155 oe
-/l 278,683,11,79,13,43 2 156 lslash
-Bq 556,101,129,0,-7 0 157 quotedblbase
-OE 944,666,8,70,1,43 2 158 OE
-/L 556,653,0,53,58,43 2 159 Lslash
-r! 389,473,205,0,-9 1 161 exclamdown
-ct 500,560,143,22,-27,22 2 162 cent
-Po 500,670,6,67,40,43 2 163 sterling
-Cs 500,597,0,72,72,43 2 164 currency
-Ye 500,653,0,153,23,43 2 165 yen
-bb 275,666,18,0,-55 2 166 brokenbar
-sc 500,666,162,11,-3,11 2 167 section
-ad 333,606,0,122,-57,43 2 168 dieresis
-co 760,666,18,9,9,9 2 169 copyright
-Of 276,676,0,126,8,43 2 170 ordfeminine
-fo 333,403,0,0,-1 0 171 guilsinglleft
-tno 675,386,0,0,-36 0 172 logicalnot
-\- 675,286,0,0,-36 0 173 minus
-rg 760,666,18,9,9,9 2 174 registered
-a- 333,583,0,128,-49,43 2 175 macron
-de 400,676,0,37,-51,37 2 176 degree
-t+- 675,506,0,0,-36 0 177 plusminus
-S2 300,676,0,74,17,43 2 178 twosuperior
-S3 300,676,0,89,7,43 2 179 threesuperior
-aa 333,664,0,120,-130,43 2 180 acute
-mc 500,428,209,47,80,43 1 181 mu
-ps 523,653,123,143,-5,43 2 182 paragraph
-pc 250,310,0,0,-20 0 183 periodcentered
-ac 333,0,217,0,80 1 184 cedilla
-S1 300,676,0,34,7,34 2 185 onesuperior
-Om 310,676,0,102,-17,43 2 186 ordmasculine
-fc 333,403,0,0,-2 0 187 guilsinglright
-14 750,676,10,36,17,36 2 188 onequarter
-12 750,676,10,49,16,43 2 189 onehalf
-34 750,676,10,36,27,36 2 190 threequarters
-r? 500,471,205,0,22 1 191 questiondown
-`A 611,876,0,3,101,3 2 192 Agrave
-'A 611,876,0,3,101,3 2 193 Aacute
-^A 611,873,0,3,101,3 2 194 Acircumflex
-~A 611,836,0,5,101,5 2 195 Atilde
-:A 611,818,0,3,101,3 2 196 Adieresis
-oA 611,883,0,3,101,3 2 197 Aring
-AE 889,653,0,72,77,43 2 198 AE
-,C 667,666,217,72,-16,43 3 199 Ccedilla
-`E 611,876,0,73,51,43 2 200 Egrave
-'E 611,876,0,73,51,43 2 201 Eacute
-^E 611,873,0,73,51,43 2 202 Ecircumflex
-:E 611,818,0,73,51,43 2 203 Edieresis
-`I 333,876,0,101,58,43 2 204 Igrave
-'I 333,876,0,130,58,43 2 205 Iacute
-^I 333,873,0,142,58,43 2 206 Icircumflex
-:I 333,818,0,152,58,43 2 207 Idieresis
--D 722,653,0,28,58,28 2 208 Eth
-~N 667,836,15,110,70,43 2 209 Ntilde
-`O 722,876,18,27,-10,27 2 210 Ograve
-'O 722,876,18,27,-10,27 2 211 Oacute
-^O 722,873,18,27,-10,27 2 212 Ocircumflex
-~O 722,836,18,27,-10,27 2 213 Otilde
-:O 722,818,18,27,-10,27 2 214 Odieresis
-tmu 675,497,0,0,-43 0 215 multiply
-/O 722,722,105,27,-10,27 2 216 Oslash
-`U 722,876,18,93,-52,43 2 217 Ugrave
-'U 722,876,18,93,-52,43 2 218 Uacute
-^U 722,873,18,93,-52,43 2 219 Ucircumflex
-:U 722,818,18,93,-52,43 2 220 Udieresis
-'Y 556,876,0,127,-28,43 2 221 Yacute
-TP 611,653,0,8,50,8 2 222 Thorn
-ss 500,679,207,43,218,43 3 223 germandbls
-`a 500,664,11,26,33,26 2 224 agrave
-'a 500,664,11,37,33,37 2 225 aacute
-^a 500,661,11,26,33,26 2 226 acircumflex
-~a 500,624,11,61,33,43 2 227 atilde
-:a 500,606,11,39,33,39 2 228 adieresis
-oa 500,691,11,26,33,26 2 229 aring
-ae 667,441,11,23,27,23 0 230 ae
-,c 444,441,217,31,24,31 1 231 ccedilla
-`e 444,664,11,18,19,18 2 232 egrave
-'e 444,664,11,65,19,43 2 233 eacute
-^e 444,661,11,47,19,43 2 234 ecircumflex
-:e 444,606,11,57,19,43 2 235 edieresis
-`i 278,664,11,56,1,43 2 236 igrave
-'i 278,664,11,128,1,43 2 237 iacute
-^i 278,661,11,100,16,43 2 238 icircumflex
-:i 278,606,11,125,1,43 2 239 idieresis
-Sd 500,683,11,32,23,32 2 240 eth
-~n 500,624,9,26,36,26 2 241 ntilde
-`o 500,664,11,18,23,18 2 242 ograve
-'o 500,664,11,37,23,37 2 243 oacute
-^o 500,661,11,18,23,18 2 244 ocircumflex
-~o 500,624,11,46,23,43 2 245 otilde
-:o 500,606,11,39,23,39 2 246 odieresis
-tdi 675,517,11,0,-36 0 247 divide
-/o 500,554,135,19,22,19 2 248 oslash
-`u 500,664,11,25,8,25 2 249 ugrave
-'u 500,664,11,27,8,27 2 250 uacute
-^u 500,661,11,25,8,25 2 251 ucircumflex
-:u 500,606,11,29,8,29 2 252 udieresis
-'y 444,664,206,65,74,43 3 253 yacute
-Tp 500,683,205,19,125,19 3 254 thorn
-:y 444,606,206,47,74,43 3 255 ydieresis
-u2026 889,100,11,0,-7 0 256 ellipsis
diff --git a/contrib/groff/font/devps/TR b/contrib/groff/font/devps/TR
deleted file mode 100644
index 5096c945cc71..000000000000
--- a/contrib/groff/font/devps/TR
+++ /dev/null
@@ -1,448 +0,0 @@
-name TR
-internalname Times-Roman
-spacewidth 250
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A y -92
-A w -92
-A v -74
-A ' -111
-A cq -111
-A Y -105
-A W -90
-A V -135
-A U -55
-A T -111
-A Q -55
-A O -55
-A G -40
-A C -40
-B U -10
-B A -35
-D Y -55
-D W -30
-D V -40
-D A -40
-F . -80
-F o -15
-F , -80
-F a -15
-F A -74
-J A -60
-K y -25
-K u -15
-K o -35
-K e -25
-K O -30
-L y -55
-L ' -92
-L cq -92
-L Y -100
-L W -74
-L V -100
-L T -92
-N A -35
-O Y -50
-O X -40
-O W -35
-O V -50
-O T -40
-O A -35
-P . -111
-P , -111
-P a -15
-P A -92
-Q U -10
-R Y -65
-R W -55
-R V -80
-R U -40
-R T -60
-R O -40
-T y -80
-T w -80
-T u -45
-T ; -55
-T r -35
-T . -74
-T o -80
-T i -35
-T - -92
-T hy -92
-T e -70
-T , -74
-T : -50
-T a -80
-T O -18
-T A -93
-U A -40
-V u -75
-V ; -74
-V . -129
-V o -129
-V i -60
-V - -100
-V hy -100
-V e -111
-V , -129
-V : -74
-V a -111
-V O -40
-V G -15
-V A -135
-W y -73
-W u -50
-W ; -37
-W . -92
-W o -80
-W i -40
-W - -65
-W hy -65
-W e -80
-W , -92
-W : -37
-W a -80
-W O -10
-W A -120
-Y u -111
-Y ; -92
-Y . -129
-Y o -110
-Y i -55
-Y - -111
-Y hy -111
-Y e -100
-Y , -129
-Y : -92
-Y a -100
-Y O -30
-Y A -120
-a w -15
-a v -20
-b v -15
-b u -20
-b . -40
-c y -15
-, ' -70
-, cq -70
-, rq -70
-e y -15
-e x -15
-e w -25
-e v -25
-e g -15
-f ' 55
-f cq 55
-f i -20
-f f -25
-f .i -50
-f a -10
-g a -5
-h y -5
-i v -25
-k y -15
-k o -10
-k e -10
-l w -10
-n y -15
-n v -40
-o y -10
-o w -25
-o v -15
-p y -10
-. ' -70
-. cq -70
-. rq -70
-lq A -80
-` ` -74
-` oq -74
-oq ` -74
-oq oq -74
-` A -80
-oq A -80
-' v -50
-cq v -50
-' t -18
-cq t -18
-' u0020 -74
-cq u0020 -74
-' s -55
-cq s -55
-' r -50
-cq r -50
-' ' -74
-' cq -74
-cq ' -74
-cq cq -74
-' l -10
-cq l -10
-' d -50
-cq d -50
-r . -55
-r - -20
-r hy -20
-r g -18
-r , -40
-u0020 Y -90
-u0020 W -30
-u0020 V -50
-u0020 T -18
-u0020 A -55
-v . -65
-v o -20
-v e -15
-v , -65
-v a -25
-w . -65
-w o -10
-w , -65
-w a -10
-x e -15
-y . -65
-y , -65
-charset
-ha 469,662 2 0 asciicircum
-ti 541,323 0 1 asciitilde
-vS 556,886,14 2 2 Scaron
-vZ 611,886 2 3 Zcaron
-vs 389,674,10 2 4 scaron
-vz 444,674 2 5 zcaron
-:Y 722,835 2 6 Ydieresis
-tm 980,662 2 7 trademark
-aq 180,676 2 8 quotesingle
-space 250 0 32 space
-! 333,676,9 2 33 exclam
-" 408,676 2 34 quotedbl
-dq "
-# 500,662 2 35 numbersign
-sh "
-$ 500,727,87 2 36 dollar
-Do "
-% 833,676,13 2 37 percent
-& 778,676,13 2 38 ampersand
-' 333,676 2 39 quoteright
-cq "
-( 333,676,177 2 40 parenleft
-) 333,676,177 2 41 parenright
-* 500,676 2 42 asterisk
-+ 564,506 0 43 plus
-, 250,102,141 0 44 comma
-- 333,257 0 45 hyphen
-hy "
-. 250,100,11 0 46 period
-/ 278,676,14,9,9 2 47 slash
-sl "
-0 500,676,14 2 48 zero
-1 500,676 2 49 one
-2 500,676 2 50 two
-3 500,676,14 2 51 three
-4 500,676 2 52 four
-5 500,688,14 2 53 five
-6 500,684,14 2 54 six
-7 500,662,8 2 55 seven
-8 500,676,14 2 56 eight
-9 500,676,22 2 57 nine
-: 278,459,11 0 58 colon
-; 278,459,141 0 59 semicolon
-< 564,514,8 0 60 less
-= 564,386 0 61 equal
-> 564,514,8 0 62 greater
-? 444,676,8 2 63 question
-@ 921,676,14 2 64 at
-at "
-A 722,674 2 65 A
-B 667,662 2 66 B
-C 667,676,14 2 67 C
-D 722,662 2 68 D
-E 611,662 2 69 E
-F 556,662 2 70 F
-G 722,676,14 2 71 G
-H 722,662 2 72 H
-I 333,662 2 73 I
-J 389,662,14 2 74 J
-K 722,662,0,1 2 75 K
-L 611,662 2 76 L
-M 889,662 2 77 M
-N 722,662,11 2 78 N
-O 722,676,14 2 79 O
-P 556,662 2 80 P
-Q 722,676,178 2 81 Q
-R 667,662 2 82 R
-S 556,676,14 2 83 S
-T 611,662 2 84 T
-U 722,662,14 2 85 U
-V 722,662,11 2 86 V
-W 944,662,11 2 87 W
-X 722,662 2 88 X
-Y 722,662 2 89 Y
-Z 611,662 2 90 Z
-[ 333,662,156 2 91 bracketleft
-lB "
-\ 278,676,14,9,9 2 92 backslash
-rs "
-] 333,662,156 2 93 bracketright
-rB "
-a^ 333,674 2 94 circumflex
-^ "
-_ 500,0,125 0 95 underscore
-` 333,676 2 96 quoteleft
-oq "
-a 444,460,10 0 97 a
-b 500,683,10 2 98 b
-c 444,460,10 0 99 c
-d 500,683,10 2 100 d
-e 444,460,10 0 101 e
-f 333,683,0,50 2 102 f
-g 500,460,218 1 103 g
-h 500,683 2 104 h
-i 278,683 2 105 i
-j 278,683,218,0,70 3 106 j
-k 500,683,0,5 2 107 k
-l 278,683 2 108 l
-m 778,460 0 109 m
-n 500,460 0 110 n
-o 500,460,10 0 111 o
-p 500,460,217 1 112 p
-q 500,460,217 1 113 q
-r 333,460,0,2 0 114 r
-s 389,460,10 0 115 s
-t 278,579,10,1 2 116 t
-u 500,450,10 0 117 u
-v 500,450,14 0 118 v
-w 722,450,14 0 119 w
-x 500,450 0 120 x
-y 500,450,218 1 121 y
-z 444,450 0 122 z
-lC 480,680,181 2 123 braceleft
-{ "
-ba 200,676,14 2 124 bar
-| "
-rC 480,680,181 2 125 braceright
-} "
-a~ 333,638 2 126 tilde
-~ "
-bq 333,102,141 0 128 quotesinglbase
-Fo 500,416 0 129 guillemotleft
-Fc 500,416 0 130 guillemotright
-bu 350,466 0 131 bullet
-Fn 500,676,189 2 132 florin
-f/ 167,676,14,164,168 2 133 fraction
-%0 1000,706,19 2 134 perthousand
-dg 500,676,149 2 135 dagger
-dd 500,676,153 2 136 daggerdbl
-en 500,250 0 137 endash
-em 1000,250 0 138 emdash
-fi 556,683 2 140 fi
-fl 556,683 2 141 fl
-.i 278,460 0 144 dotlessi
-ga 333,678 2 146 grave
-a" 333,678,0,44,3 2 147 hungarumlaut
-a. 333,623 2 148 dotaccent
-ab 333,664 2 149 breve
-ah 333,674 2 150 caron
-ao 333,711 2 151 ring
-ho 333,0,165 0 152 ogonek
-lq 444,676 2 153 quotedblleft
-rq 444,676 2 154 quotedblright
-oe 722,460,10 0 155 oe
-/l 278,683 2 156 lslash
-Bq 444,102,141 0 157 quotedblbase
-OE 889,668,6 2 158 OE
-/L 611,662 2 159 Lslash
-r! 333,467,218 1 161 exclamdown
-ct 500,579,138 2 162 cent
-Po 500,676,8 2 163 sterling
-Cs 500,602,0,22,22 2 164 currency
-Ye 500,662,0,12,53 2 165 yen
-bb 200,676,14 2 166 brokenbar
-sc 500,676,148 2 167 section
-ad 333,623 2 168 dieresis
-co 760,676,14 2 169 copyright
-Of 276,676 2 170 ordfeminine
-fo 333,416 0 171 guilsinglleft
-tno 564,386 0 172 logicalnot
-\- 564,286 0 173 minus
-rg 760,676,14 2 174 registered
-a- 333,601 2 175 macron
-de 400,676 2 176 degree
-t+- 564,506 0 177 plusminus
-S2 300,676 2 178 twosuperior
-S3 300,676 2 179 threesuperior
-aa 333,678 2 180 acute
-mc 500,450,218,12 1 181 mu
-ps 453,662,154,0,22 2 182 paragraph
-pc 250,310 0 183 periodcentered
-ac 333,0,215 0 184 cedilla
-S1 300,676 2 185 onesuperior
-Om 310,676 2 186 ordmasculine
-fc 333,416 0 187 guilsinglright
-14 750,676,14 2 188 onequarter
-12 750,676,14 2 189 onehalf
-34 750,676,14 2 190 threequarters
-r? 444,466,218 1 191 questiondown
-`A 722,890 2 192 Agrave
-'A 722,890 2 193 Aacute
-^A 722,886 2 194 Acircumflex
-~A 722,850 2 195 Atilde
-:A 722,835 2 196 Adieresis
-oA 722,898 2 197 Aring
-AE 889,662 2 198 AE
-,C 667,676,215 2 199 Ccedilla
-`E 611,890 2 200 Egrave
-'E 611,890 2 201 Eacute
-^E 611,886 2 202 Ecircumflex
-:E 611,835 2 203 Edieresis
-`I 333,890 2 204 Igrave
-'I 333,890 2 205 Iacute
-^I 333,886 2 206 Icircumflex
-:I 333,835 2 207 Idieresis
--D 722,662 2 208 Eth
-~N 722,850,11 2 209 Ntilde
-`O 722,890,14 2 210 Ograve
-'O 722,890,14 2 211 Oacute
-^O 722,886,14 2 212 Ocircumflex
-~O 722,850,14 2 213 Otilde
-:O 722,835,14 2 214 Odieresis
-tmu 564,497 0 215 multiply
-/O 722,734,80 2 216 Oslash
-`U 722,890,14 2 217 Ugrave
-'U 722,890,14 2 218 Uacute
-^U 722,886,14 2 219 Ucircumflex
-:U 722,835,14 2 220 Udieresis
-'Y 722,890 2 221 Yacute
-TP 556,662 2 222 Thorn
-ss 500,683,9 2 223 germandbls
-`a 444,678,10 2 224 agrave
-'a 444,678,10 2 225 aacute
-^a 444,674,10 2 226 acircumflex
-~a 444,638,10 2 227 atilde
-:a 444,623,10 2 228 adieresis
-oa 444,711,10 2 229 aring
-ae 667,460,10 0 230 ae
-,c 444,460,215 0 231 ccedilla
-`e 444,678,10 2 232 egrave
-'e 444,678,10 2 233 eacute
-^e 444,674,10 2 234 ecircumflex
-:e 444,623,10 2 235 edieresis
-`i 278,678,0,0,8 2 236 igrave
-'i 278,678,0,12 2 237 iacute
-^i 278,674,0,17,16 2 238 icircumflex
-:i 278,623,0,10,9 2 239 idieresis
-Sd 500,686,10 2 240 eth
-~n 500,638 2 241 ntilde
-`o 500,678,10 2 242 ograve
-'o 500,678,10 2 243 oacute
-^o 500,674,10 2 244 ocircumflex
-~o 500,638,10 2 245 otilde
-:o 500,623,10 2 246 odieresis
-tdi 564,516,10 0 247 divide
-/o 500,551,112 0 248 oslash
-`u 500,678,10 2 249 ugrave
-'u 500,678,10 2 250 uacute
-^u 500,674,10 2 251 ucircumflex
-:u 500,623,10 2 252 udieresis
-'y 500,678,218 3 253 yacute
-Tp 500,683,217 3 254 thorn
-:y 500,623,218 3 255 ydieresis
-u2026 1000,100,11 0 256 ellipsis
diff --git a/contrib/groff/font/devps/ZCMI b/contrib/groff/font/devps/ZCMI
deleted file mode 100644
index b73175a65f66..000000000000
--- a/contrib/groff/font/devps/ZCMI
+++ /dev/null
@@ -1,403 +0,0 @@
-name ZCMI
-internalname ZapfChancery-MediumItalic
-slant 14
-spacewidth 220
-encoding text.enc
-ligatures fi fl 0
-kernpairs
-A ' -40
-A cq -40
-A rq -40
-A U -10
-A T 10
-A Q 10
-A O 10
-A G -30
-A C 20
-D . -30
-D , -20
-D Y 10
-D A -10
-F . -40
-F i 10
-F , -30
-G . -20
-G , -10
-J . -20
-J , -10
-K u -20
-K o -20
-K e -20
-L y -10
-L ' -25
-L cq -25
-L rq -25
-L W -10
-L V -20
-O . -20
-O , -10
-O Y 10
-O T 20
-O A -20
-P . -50
-P o -10
-P e -10
-P , -40
-P a -20
-P A -10
-Q U -10
-R Y 10
-R W 10
-R T 20
-T o -20
-T i 20
-T - -20
-T hy -20
-T h 20
-T e -20
-T a -20
-T O 30
-T A 10
-V . -100
-V o -20
-V e -20
-V , -90
-V a -20
-V O 10
-V G -20
-W . -50
-W o -20
-W i 10
-W h 10
-W e -20
-W , -40
-W a -20
-W O 10
-Y u -20
-Y . -50
-Y o -50
-Y i 10
-Y e -40
-Y , -40
-Y a -60
-b . -30
-b l -20
-b , -20
-b b -20
-c k -10
-, ' -70
-, cq -70
-, rq -70
-d w -20
-d v -10
-d d -40
-e y 10
-f ' 30
-f cq 30
-f rq 30
-f . -50
-f f -50
-f e -10
-f , -40
-f a -20
-g y 10
-g . -30
-g i 10
-g e 10
-g , -20
-g a 10
-k y 10
-k o -10
-k e -20
-m y 10
-m u 10
-n y 20
-o . -30
-o , -20
-p . -30
-p p -10
-p , -20
-. ' -80
-. cq -80
-. rq -80
-lq ` 20
-lq oq 20
-lq A 10
-` ` -115
-` oq -115
-oq ` -115
-oq oq -115
-` A 10
-oq A 10
-' v 30
-cq v 30
-' t 20
-cq t 20
-' s -25
-cq s -25
-' r 30
-cq r 30
-' ' -115
-' cq -115
-cq ' -115
-cq cq -115
-' rq 20
-cq rq 20
-' l 20
-cq l 20
-r . -50
-r i 10
-r , -40
-s . -20
-s , -10
-v . -30
-v , -20
-w . -30
-w o 10
-w h 20
-w , -20
-charset
-ha 520,594,0,62,-82,62 2 0 asciicircum
-ti 520,320,0,69,-73,69 0 1 asciitilde
-vS 460,831,81,184,5,87 2 2 Scaron
-vZ 620,831,19,99,8,87 2 3 Zcaron
-vs 320,659,14,194,4,87 2 4 scaron
-vz 440,659,14,124,24,87 2 5 zcaron
-:Y 560,762,168,264,9,87 2 6 Ydieresis
-tm 1000,594,0,96,-77,87 2 7 trademark
-aq 160,610,0,105,-95,87 2 8 quotesingle
-space 220 0 32 space
-! 280,610,14,123,-69,87 2 33 exclam
-" 220,610,0,163,-70,87 2 34 quotedbl
-dq "
-# 440,594,0,131,-33,87 2 35 numbersign
-sh "
-$ 440,709,144,118,-10,87 2 36 dollar
-Do "
-% 680,700,160,80,-82,80 2 37 percent
-& 780,610,16,185,-76,87 2 38 ampersand
-' 240,610,0,148,-118,87 2 39 quoteright
-cq "
-( 260,664,216,201,-46,87 2 40 parenleft
-) 220,664,216,132,63,87 2 41 parenright
-* 420,610,0,109,-89,87 2 42 asterisk
-+ 520,426,0,73,-67,73 0 43 plus
-, 220,148,140,43,25,43 0 44 comma
-- 280,248,0,104,-19,87 0 45 hyphen
-hy "
-. 220,128,14,58,-52,58 0 46 period
-/ 340,610,16,168,-24,87 2 47 slash
-sl "
-0 440,610,16,148,-29,87 2 48 zero
-1 440,610,0,38,9,38 2 49 one
-2 440,610,16,95,33,87 2 50 two
-3 440,610,16,95,49,87 2 51 three
-4 440,610,35,109,-27,87 2 52 four
-5 440,679,16,205,-10,87 2 53 five
-6 440,610,16,166,-40,87 2 54 six
-7 440,645,33,171,-107,87 2 55 seven
-8 440,610,16,139,-15,87 2 56 eight
-9 440,610,16,127,18,87 2 57 nine
-: 260,438,14,86,-48,86 0 58 colon
-; 240,438,140,109,21,87 0 59 semicolon
-< 520,468,0,57,-89,57 0 60 less
-= 520,340,0,73,-67,73 0 61 equal
-> 520,468,0,57,-89,57 0 62 greater
-? 380,610,14,125,-100,87 2 63 question
-@ 700,610,16,103,-77,87 2 64 at
-at "
-A 620,632,16,127,37,87 2 65 A
-B 600,640,6,124,-35,87 2 66 B
-C 520,610,16,161,-43,87 2 67 C
-D 700,640,6,118,-36,87 2 68 D
-E 620,618,12,139,-41,87 2 69 E
-F 580,629,118,263,-70,87 2 70 F
-G 620,610,242,139,-98,87 2 71 G
-H 680,708,16,248,32,87 2 72 H
-I 380,594,0,174,-49,87 2 73 I
-J 400,594,147,188,64,87 2 74 J
-K 660,610,153,234,-3,87 2 75 K
-L 580,610,16,127,-3,87 2 76 L
-M 840,722,16,230,-8,87 2 77 M
-N 700,708,168,265,-35,87 2 78 N
-O 600,610,16,110,-44,87 2 79 O
-P 540,628,0,168,8,87 2 80 P
-Q 600,610,177,225,-34,87 2 81 Q
-R 600,640,168,255,-8,87 2 82 R
-S 460,610,81,148,5,87 2 83 S
-T 500,667,0,294,-13,87 2 84 T
-U 740,617,16,102,-76,87 2 85 U
-V 640,714,16,220,-74,87 2 86 V
-W 880,723,16,216,-44,87 2 87 W
-X 560,610,16,189,80,87 2 88 X
-Y 560,647,168,264,9,87 2 89 Y
-Z 620,624,19,99,8,87 2 90 Z
-[ 240,655,207,215,63,87 2 91 bracketleft
-lB "
-\ 480,610,16,94,-90,87 2 92 backslash
-rs "
-] 320,655,207,121,77,87 2 93 bracketright
-rB "
-a^ 340,649,0,153,-173,87 2 94 circumflex
-^ "
-_ 500,0,125,50,50,50 0 95 underscore
-` 240,610,0,149,-119,87 2 96 quoteleft
-oq "
-a 420,438,15,115,-42,87 0 97 a
-b 420,714,23,122,-32,87 2 98 b
-c 340,438,14,116,-37,87 0 99 c
-d 440,714,14,261,-52,87 2 100 d
-e 340,438,14,113,-37,87 0 101 e
-f 320,714,314,277,169,87 3 102 f
-g 400,438,314,153,158,87 1 103 g
-h 440,714,14,134,-5,87 2 104 h
-i 240,635,14,151,-50,87 2 105 i
-j 220,635,314,162,162,87 3 106 j
-k 440,714,184,238,-37,87 2 107 k
-l 240,714,14,290,-52,87 2 108 l
-m 620,438,14,134,-36,87 0 109 m
-n 460,438,14,134,-51,87 0 110 n
-o 400,438,14,99,-37,87 0 111 o
-p 440,432,314,94,73,87 1 112 p
-q 400,510,300,140,-37,87 1 113 q
-r 300,438,14,174,-51,87 0 114 r
-s 320,438,14,133,4,87 0 115 s
-t 320,539,14,156,-56,87 2 116 t
-u 460,438,14,118,-52,87 0 117 u
-v 440,488,14,143,-37,87 0 118 v
-w 680,488,14,152,-37,87 0 119 w
-x 420,438,195,219,-20,87 0 120 x
-y 400,438,314,133,74,87 1 121 y
-z 440,445,14,118,24,87 0 122 z
-lC 240,655,207,193,-5,87 2 123 braceleft
-{ "
-ba 520,714,16,0,-270 2 124 bar
-| "
-rC 240,655,207,128,60,87 2 125 braceright
-} "
-a~ 440,619,0,132,-193,87 2 126 tilde
-~ "
-bq 180,146,121,61,29,61 0 128 quotesinglbase
-Fo 340,414,0,66,-48,66 0 129 guillemotleft
-Fc 380,414,0,45,-67,45 0 130 guillemotright
-bu 600,445,0,0,-178 0 131 bullet
-Fn 440,610,314,192,114,87 3 132 florin
-f/ 60,610,16,310,231,87 2 133 fraction
-%0 960,700,160,95,-62,87 2 134 perthousand
-dg 460,610,37,158,-88,87 2 135 dagger
-dd 480,610,59,103,-88,87 2 136 daggerdbl
-en 500,239,0,115,-1,87 0 137 endash
-em 1000,239,0,115,-1,87 0 138 emdash
-fi 520,714,314,135,174,87 3 140 fi
-fl 520,714,314,200,174,87 3 141 fl
-.i 240,438,14,116,-50,87 0 144 dotlessi
-ga 220,659,0,169,-143,87 2 146 grave
-a" 400,659,0,145,-158,87 2 147 hungarumlaut
-a. 220,610,0,158,-186,87 2 148 dotaccent
-ab 440,631,0,111,-203,87 2 149 breve
-ah 340,659,0,184,-204,87 2 150 caron
-ao 300,659,0,166,-190,87 2 151 ring
-ho 280,6,191,3,12,3 0 152 ogonek
-lq 340,610,0,174,-119,87 2 153 quotedblleft
-rq 360,610,0,143,-108,87 2 154 quotedblright
-oe 560,438,14,118,-28,87 0 155 oe
-/l 300,714,14,265,-71,87 2 156 lslash
-Bq 280,146,121,51,64,51 0 157 quotedblbase
-OE 820,610,16,139,-13,87 2 158 OE
-/L 580,610,16,127,1,87 2 159 Lslash
-r! 280,438,186,76,-22,76 0 161 exclamdown
-ct 440,543,134,86,-72,86 2 162 cent
-Po 440,610,52,116,66,87 2 163 sterling
-Cs 440,509,0,84,0,84 0 164 currency
-Ye 440,647,168,223,51,87 2 165 yen
-bb 520,714,16,0,-270 2 166 brokenbar
-sc 420,610,215,144,-3,87 2 167 section
-ad 360,610,0,159,-193,87 2 168 dieresis
-co 740,610,16,73,-87,73 2 169 copyright
-Of 260,610,0,176,-61,87 2 170 ordfeminine
-fo 240,414,0,68,-48,68 0 171 guilsinglleft
-tno 520,340,0,73,-67,73 0 172 logicalnot
-\- 520,242,0,73,-67,73 0 173 minus
-rg 740,610,16,73,-87,73 2 174 registered
-a- 440,578,0,75,-172,75 2 175 macron
-de 400,610,0,107,-121,87 2 176 degree
-t+- 520,436,0,73,-67,73 0 177 plusminus
-S2 264,610,0,140,-22,87 2 178 twosuperior
-S3 264,610,0,134,-9,87 2 179 threesuperior
-aa 300,659,0,172,-215,87 2 180 acute
-mc 460,438,314,113,43,87 1 181 mu
-ps 500,594,199,188,-55,87 2 182 paragraph
-pc 220,310,0,71,-89,71 0 183 periodcentered
-ac 300,6,191,0,38 0 184 cedilla
-S1 264,610,0,97,-33,87 2 185 onesuperior
-Om 260,610,0,163,-78,87 2 186 ordmasculine
-fc 260,414,0,56,-56,56 0 187 guilsinglright
-14 660,610,16,92,-6,87 2 188 onequarter
-12 660,610,16,92,-6,87 2 189 onehalf
-34 660,610,16,96,11,87 2 190 threequarters
-r? 400,438,186,37,-32,37 0 191 questiondown
-`A 620,821,16,127,37,87 2 192 Agrave
-'A 620,821,16,132,37,87 2 193 Aacute
-^A 620,821,16,127,37,87 2 194 Acircumflex
-~A 620,771,16,132,37,87 2 195 Atilde
-:A 620,762,16,139,37,87 2 196 Adieresis
-oA 620,831,16,127,37,87 2 197 Aring
-AE 740,594,16,109,71,87 2 198 AE
-,C 520,610,191,161,-43,87 2 199 Ccedilla
-`E 620,821,12,139,-41,87 2 200 Egrave
-'E 620,821,12,139,-41,87 2 201 Eacute
-^E 620,821,12,139,-41,87 2 202 Ecircumflex
-:E 620,762,12,139,-41,87 2 203 Edieresis
-`I 380,821,0,174,-49,87 2 204 Igrave
-'I 380,821,0,202,-49,87 2 205 Iacute
-^I 380,821,0,174,-49,87 2 206 Icircumflex
-:I 380,762,0,189,-49,87 2 207 Idieresis
--D 700,640,6,118,-36,87 2 208 Eth
-~N 700,761,168,265,-35,87 2 209 Ntilde
-`O 600,821,16,110,-44,87 2 210 Ograve
-'O 600,821,16,110,-44,87 2 211 Oacute
-^O 600,821,16,110,-44,87 2 212 Ocircumflex
-~O 600,761,16,110,-44,87 2 213 Otilde
-:O 600,762,16,110,-44,87 2 214 Odieresis
-tmu 520,410,0,57,-83,57 0 215 multiply
-/O 660,672,78,141,-33,87 2 216 Oslash
-`U 740,821,16,102,-76,87 2 217 Ugrave
-'U 740,821,16,102,-76,87 2 218 Uacute
-^U 740,821,16,102,-76,87 2 219 Ucircumflex
-:U 740,762,16,102,-76,87 2 220 Udieresis
-'Y 560,821,168,264,9,87 2 221 Yacute
-TP 540,623,0,157,-2,87 2 222 Thorn
-ss 420,714,314,172,177,87 3 223 germandbls
-`a 420,659,15,115,-42,87 2 224 agrave
-'a 420,659,15,122,-42,87 2 225 aacute
-^a 420,649,15,115,-42,87 2 226 acircumflex
-~a 420,619,15,152,-42,87 2 227 atilde
-:a 420,610,15,115,-42,87 2 228 adieresis
-oa 420,659,15,115,-42,87 2 229 aring
-ae 540,468,14,134,-17,87 0 230 ae
-,c 340,438,191,116,-12,87 0 231 ccedilla
-`e 340,659,14,113,-37,87 2 232 egrave
-'e 340,659,14,172,-37,87 2 233 eacute
-^e 340,649,14,143,-37,87 2 234 ecircumflex
-:e 340,610,14,159,-37,87 2 235 edieresis
-`i 240,659,14,116,-50,87 2 236 igrave
-'i 240,659,14,202,-50,87 2 237 iacute
-^i 240,649,14,173,-50,87 2 238 icircumflex
-:i 240,610,14,179,-50,87 2 239 idieresis
-Sd 400,714,14,172,-37,87 2 240 eth
-~n 460,619,14,134,-51,87 2 241 ntilde
-`o 400,659,14,99,-37,87 2 242 ograve
-'o 400,659,14,132,-37,87 2 243 oacute
-^o 400,649,14,103,-37,87 2 244 ocircumflex
-~o 400,619,14,152,-37,87 2 245 otilde
-:o 400,610,14,129,-37,87 2 246 odieresis
-tdi 520,440,14,73,-67,73 0 247 divide
-/o 440,488,64,150,4,87 0 248 oslash
-`u 460,659,14,118,-52,87 2 249 ugrave
-'u 460,659,14,118,-52,87 2 250 uacute
-^u 460,649,14,118,-52,87 2 251 ucircumflex
-:u 460,610,14,118,-52,87 2 252 udieresis
-'y 400,659,314,133,74,87 3 253 yacute
-Tp 440,714,314,115,88,87 3 254 thorn
-:y 400,610,314,133,74,87 3 255 ydieresis
-u2026 1000,128,14,0,-74 0 256 ellipsis
diff --git a/contrib/groff/font/devps/ZD b/contrib/groff/font/devps/ZD
deleted file mode 100644
index 83f30d715a5d..000000000000
--- a/contrib/groff/font/devps/ZD
+++ /dev/null
@@ -1,207 +0,0 @@
-name ZD
-internalname ZapfDingbats
-special
-spacewidth 278
-charset
-space 278 0 32 space
---- 974,621 3 33 a1
---- 961,611 3 34 a2
---- 974,621 3 35 a202
---- 980,692 3 36 a3
---- 719,566 3 37 a4
---- 789,705,14 3 38 a5
---- 790,705,14 3 39 a119
---- 791,705,13 3 40 a118
---- 690,553 3 41 a117
---- 960,568 3 42 a11
-rh 939,559 3 43 a12
---- 549,705,11 3 44 a13
---- 855,632 3 45 a14
---- 911,642 3 46 a15
---- 933,550 3 47 a16
---- 911,642 3 48 a105
---- 945,553 3 49 a17
---- 974,587 3 50 a18
-OK 755,705,13 3 51 a19
---- 846,705,14 3 52 a20
---- 762,692 3 53 a21
---- 761,692 3 54 a22
---- 571,661,68,0,1 3 55 a23
---- 677,705,13 3 56 a24
---- 763,692 3 57 a25
---- 760,692 3 58 a26
---- 759,692 3 59 a27
---- 754,692 3 60 a28
---- 494,692 3 61 a6
---- 552,692 3 62 a7
---- 537,692 3 63 a8
---- 577,596 3 64 a9
---- 692,705,14 3 65 a10
---- 786,705,14 3 66 a29
---- 788,705,14 3 67 a30
---- 788,705,14 3 68 a31
---- 790,705,14 3 69 a32
---- 793,705,13 3 70 a33
---- 794,705,13 3 71 a34
---- 816,705,14 3 72 a35
---- 823,705,14 3 73 a36
---- 789,705,14 3 74 a37
---- 841,705,14 3 75 a38
---- 823,705,14 3 76 a39
---- 833,705,14 3 77 a40
---- 816,705,13 3 78 a41
---- 831,705,14 3 79 a42
---- 923,705,14 3 80 a43
---- 744,692 3 81 a44
---- 723,692 3 82 a45
---- 749,692 3 83 a46
---- 790,705,14 3 84 a47
---- 792,705,14 3 85 a48
---- 695,706,14 3 86 a49
---- 776,699,6 3 87 a50
---- 768,699,7 3 88 a51
---- 792,705,14 3 89 a52
---- 759,692 3 90 a53
---- 707,704,13 3 91 a54
---- 708,705,14 3 92 a55
---- 682,705,14 3 93 a56
---- 701,705,14 3 94 a57
---- 826,705,14 3 95 a58
---- 815,705,14 3 96 a59
---- 789,705,14 3 97 a60
---- 789,705,14 3 98 a61
---- 707,705,14 3 99 a62
---- 687,692 3 100 a63
---- 696,691 3 101 a64
---- 689,692 3 102 a65
---- 786,705,14 3 103 a66
---- 787,705,14 3 104 a67
---- 713,705,14 3 105 a68
---- 791,705,14 3 106 a69
---- 785,705,14 3 107 a70
---- 791,705,14 3 108 a71
---- 873,705,14 3 109 a72
---- 761,692 3 110 a73
---- 762,692 3 111 a74
---- 762,692 3 112 a203
---- 759,692 3 113 a75
---- 759,692 3 114 a204
---- 892,705 3 115 a76
---- 892,692,14 3 116 a77
---- 788,705,14 3 117 a78
---- 784,705,14 3 118 a79
---- 438,705,14 3 119 a81
---- 138,692 3 120 a82
---- 277,692 3 121 a83
---- 415,692 3 122 a84
---- 392,705 3 123 a97
---- 392,705 3 124 a98
---- 668,705 3 125 a99
---- 668,705 3 126 a100
---- 732,806,143 3 161 a101
---- 544,706,14 3 162 a102
---- 544,705,14 3 163 a103
---- 910,651 3 164 a104
---- 667,705,14 3 165 a106
---- 760,705,14 3 166 a107
---- 760,569 3 167 a108
---- 776,705 3 168 a112
---- 595,705,14 3 169 a111
---- 694,705,14 3 170 a110
---- 626,705 3 171 a109
---- 788,705,14 3 172 a120
---- 788,705,14 3 173 a121
---- 788,705,14 3 174 a122
---- 788,705,14 3 175 a123
---- 788,705,14 3 176 a124
---- 788,705,14 3 177 a125
---- 788,705,14 3 178 a126
---- 788,705,14 3 179 a127
---- 788,705,14 3 180 a128
---- 788,705,14 3 181 a129
---- 788,705,14 3 182 a130
---- 788,705,14 3 183 a131
---- 788,705,14 3 184 a132
---- 788,705,14 3 185 a133
---- 788,705,14 3 186 a134
---- 788,705,14 3 187 a135
---- 788,705,14 3 188 a136
---- 788,705,14 3 189 a137
---- 788,705,14 3 190 a138
---- 788,705,14 3 191 a139
---- 788,705,14 3 192 a140
---- 788,705,14 3 193 a141
---- 788,705,14 3 194 a142
---- 788,705,14 3 195 a143
---- 788,705,14 3 196 a144
---- 788,705,14 3 197 a145
---- 788,705,14 3 198 a146
---- 788,705,14 3 199 a147
---- 788,705,14 3 200 a148
---- 788,705,14 3 201 a149
---- 788,705,14 3 202 a150
---- 788,705,14 3 203 a151
---- 788,705,14 3 204 a152
---- 788,705,14 3 205 a153
---- 788,705,14 3 206 a154
---- 788,705,14 3 207 a155
---- 788,705,14 3 208 a156
---- 788,705,14 3 209 a157
---- 788,705,14 3 210 a158
---- 788,705,14 3 211 a159
---- 894,634 3 212 a160
---- 838,540 3 213 a161
---- 1016,540 3 214 a163
---- 458,820,127 3 215 a164
---- 748,597 3 216 a196
---- 924,552 3 217 a165
---- 748,597 3 218 a192
---- 918,526 3 219 a166
---- 927,660 3 220 a167
---- 928,562 3 221 a168
---- 928,563 3 222 a169
---- 834,537 3 223 a170
---- 873,599 3 224 a171
---- 828,588 3 225 a172
---- 924,594 3 226 a173
---- 924,594 3 227 a162
---- 917,692 3 228 a174
---- 930,608 3 229 a175
---- 931,608 3 230 a176
---- 463,791,99 3 231 a177
---- 883,623 3 232 a178
---- 836,648 3 233 a179
---- 836,648 3 234 a193
---- 867,591 3 235 a180
---- 867,591 3 236 a199
---- 696,648 3 237 a181
---- 696,648 3 238 a200
---- 874,619 3 239 a182
---- 874,615 3 241 a201
---- 760,692 3 242 a183
---- 946,533 3 243 a184
---- 771,655 3 244 a197
---- 865,481 3 245 a185
---- 771,655 3 246 a194
---- 888,712,19 3 247 a198
---- 967,568 3 248 a186
---- 888,712,19 3 249 a195
---- 831,579 3 250 a187
---- 873,578 3 251 a188
---- 927,542 3 252 a189
---- 970,616 3 253 a190
---- 918,593 3 254 a191
---- 509,692 3 256 a85
---- 410,692 3 257 a86
---- 234,705,14 3 258 a87
---- 234,705,14 3 259 a88
---- 390,705,14 3 260 a89
---- 509,692 3 261 a205
---- 410,692 3 262 a206
---- 390,705,14 3 263 a90
---- 276,692 3 264 a91
---- 276,692 3 265 a92
---- 317,692 3 266 a93
---- 317,692 3 267 a94
---- 334,692 3 268 a95
---- 334,692 3 269 a96
diff --git a/contrib/groff/font/devps/ZDR b/contrib/groff/font/devps/ZDR
deleted file mode 100644
index ef2ae44d3676..000000000000
--- a/contrib/groff/font/devps/ZDR
+++ /dev/null
@@ -1,207 +0,0 @@
-name ZDR
-internalname ZapfDingbats-Reverse
-special
-spacewidth 278
-charset
-space 278 0 32 space
---- 974,621 3 33 a1
---- 961,611 3 34 a2
---- 974,621 3 35 a202
---- 980,692 3 36 a3
---- 719,566 3 37 a4
---- 789,705,14 3 38 a5
---- 790,705,14 3 39 a119
---- 791,705,13 3 40 a118
---- 690,553 3 41 a117
---- 960,568 3 42 a11
-lh 939,559 3 43 a12
---- 549,705,11 3 44 a13
---- 855,632 3 45 a14
---- 911,642 3 46 a15
---- 933,550 3 47 a16
---- 911,642 3 48 a105
---- 945,553 3 49 a17
---- 974,587 3 50 a18
---- 755,705,13 3 51 a19
---- 846,705,14 3 52 a20
---- 762,692 3 53 a21
---- 761,692 3 54 a22
---- 571,661,68,0,1 3 55 a23
---- 677,705,13 3 56 a24
---- 763,692 3 57 a25
---- 760,692 3 58 a26
---- 759,692 3 59 a27
---- 754,692 3 60 a28
---- 494,692 3 61 a6
---- 552,692 3 62 a7
---- 537,692 3 63 a8
---- 577,596 3 64 a9
---- 692,705,14 3 65 a10
---- 786,705,14 3 66 a29
---- 788,705,14 3 67 a30
---- 788,705,14 3 68 a31
---- 790,705,14 3 69 a32
---- 793,705,13 3 70 a33
---- 794,705,13 3 71 a34
---- 816,705,14 3 72 a35
---- 823,705,14 3 73 a36
---- 789,705,14 3 74 a37
---- 841,705,14 3 75 a38
---- 823,705,14 3 76 a39
---- 833,705,14 3 77 a40
---- 816,705,13 3 78 a41
---- 831,705,14 3 79 a42
---- 923,705,14 3 80 a43
---- 744,692 3 81 a44
---- 723,692 3 82 a45
---- 749,692 3 83 a46
---- 790,705,14 3 84 a47
---- 792,705,14 3 85 a48
---- 695,706,14 3 86 a49
---- 776,699,6 3 87 a50
---- 768,699,7 3 88 a51
---- 792,705,14 3 89 a52
---- 759,692 3 90 a53
---- 707,704,13 3 91 a54
---- 708,705,14 3 92 a55
---- 682,705,14 3 93 a56
---- 701,705,14 3 94 a57
---- 826,705,14 3 95 a58
---- 815,705,14 3 96 a59
---- 789,705,14 3 97 a60
---- 789,705,14 3 98 a61
---- 707,705,14 3 99 a62
---- 687,692 3 100 a63
---- 696,691 3 101 a64
---- 689,692 3 102 a65
---- 786,705,14 3 103 a66
---- 787,705,14 3 104 a67
---- 713,705,14 3 105 a68
---- 791,705,14 3 106 a69
---- 785,705,14 3 107 a70
---- 791,705,14 3 108 a71
---- 873,705,14 3 109 a72
---- 761,692 3 110 a73
---- 762,692 3 111 a74
---- 762,692 3 112 a203
---- 759,692 3 113 a75
---- 759,692 3 114 a204
---- 892,705 3 115 a76
---- 892,692,14 3 116 a77
---- 788,705,14 3 117 a78
---- 784,705,14 3 118 a79
---- 438,705,14 3 119 a81
---- 138,692 3 120 a82
---- 277,692 3 121 a83
---- 415,692 3 122 a84
---- 392,705 3 123 a97
---- 392,705 3 124 a98
---- 668,705 3 125 a99
---- 668,705 3 126 a100
---- 732,806,143 3 161 a101
---- 544,706,14 3 162 a102
---- 544,705,14 3 163 a103
---- 910,651 3 164 a104
---- 667,705,14 3 165 a106
---- 760,705,14 3 166 a107
---- 760,569 3 167 a108
---- 776,705 3 168 a112
---- 595,705,14 3 169 a111
---- 694,705,14 3 170 a110
---- 626,705 3 171 a109
---- 788,705,14 3 172 a120
---- 788,705,14 3 173 a121
---- 788,705,14 3 174 a122
---- 788,705,14 3 175 a123
---- 788,705,14 3 176 a124
---- 788,705,14 3 177 a125
---- 788,705,14 3 178 a126
---- 788,705,14 3 179 a127
---- 788,705,14 3 180 a128
---- 788,705,14 3 181 a129
---- 788,705,14 3 182 a130
---- 788,705,14 3 183 a131
---- 788,705,14 3 184 a132
---- 788,705,14 3 185 a133
---- 788,705,14 3 186 a134
---- 788,705,14 3 187 a135
---- 788,705,14 3 188 a136
---- 788,705,14 3 189 a137
---- 788,705,14 3 190 a138
---- 788,705,14 3 191 a139
---- 788,705,14 3 192 a140
---- 788,705,14 3 193 a141
---- 788,705,14 3 194 a142
---- 788,705,14 3 195 a143
---- 788,705,14 3 196 a144
---- 788,705,14 3 197 a145
---- 788,705,14 3 198 a146
---- 788,705,14 3 199 a147
---- 788,705,14 3 200 a148
---- 788,705,14 3 201 a149
---- 788,705,14 3 202 a150
---- 788,705,14 3 203 a151
---- 788,705,14 3 204 a152
---- 788,705,14 3 205 a153
---- 788,705,14 3 206 a154
---- 788,705,14 3 207 a155
---- 788,705,14 3 208 a156
---- 788,705,14 3 209 a157
---- 788,705,14 3 210 a158
---- 788,705,14 3 211 a159
---- 894,634 3 212 a160
---- 838,540 3 213 a161
---- 1016,540 3 214 a163
---- 458,820,127 3 215 a164
---- 748,597 3 216 a196
---- 924,552 3 217 a165
---- 748,597 3 218 a192
---- 918,526 3 219 a166
---- 927,660 3 220 a167
---- 928,562 3 221 a168
---- 928,563 3 222 a169
---- 834,537 3 223 a170
---- 873,599 3 224 a171
---- 828,588 3 225 a172
---- 924,594 3 226 a173
---- 924,594 3 227 a162
---- 917,692 3 228 a174
---- 930,608 3 229 a175
---- 931,608 3 230 a176
---- 463,791,99 3 231 a177
---- 883,623 3 232 a178
---- 836,648 3 233 a179
---- 836,648 3 234 a193
---- 867,591 3 235 a180
---- 867,591 3 236 a199
---- 696,648 3 237 a181
---- 696,648 3 238 a200
---- 874,619 3 239 a182
---- 874,615 3 241 a201
---- 760,692 3 242 a183
---- 946,533 3 243 a184
---- 771,655 3 244 a197
---- 865,481 3 245 a185
---- 771,655 3 246 a194
---- 888,712,19 3 247 a198
---- 967,568 3 248 a186
---- 888,712,19 3 249 a195
---- 831,579 3 250 a187
---- 873,578 3 251 a188
---- 927,542 3 252 a189
---- 970,616 3 253 a190
---- 918,593 3 254 a191
---- 509,692 3 256 a85
---- 410,692 3 257 a86
---- 234,705,14 3 258 a87
---- 234,705,14 3 259 a88
---- 390,705,14 3 260 a89
---- 509,692 3 261 a205
---- 410,692 3 262 a206
---- 390,705,14 3 263 a90
---- 276,692 3 264 a91
---- 276,692 3 265 a92
---- 317,692 3 266 a93
---- 317,692 3 267 a94
---- 334,692 3 268 a95
---- 334,692 3 269 a96
diff --git a/contrib/groff/font/devps/download b/contrib/groff/font/devps/download
deleted file mode 100644
index 3f77716b6128..000000000000
--- a/contrib/groff/font/devps/download
+++ /dev/null
@@ -1,6 +0,0 @@
-# List of downloadable fonts
-# PostScript-name Filename
-
-Symbol-Slanted symbolsl.pfa
-ZapfDingbats-Reverse zapfdr.pfa
-FreeEuro freeeuro.pfa
diff --git a/contrib/groff/font/devps/freeeuro.afm b/contrib/groff/font/devps/freeeuro.afm
deleted file mode 100644
index 189330880ac1..000000000000
--- a/contrib/groff/font/devps/freeeuro.afm
+++ /dev/null
@@ -1,34 +0,0 @@
-StartFontMetrics 2.0
-Comment Generated by pfaedit
-Comment Creation Date: Sat Dec 7 00:17:28 2002
-FontName FreeEuro
-FullName FreeEuro
-FamilyName FreeEuro
-Weight Medium
-Notice (Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); the serif shapes are based on the Omega fonts created by Yannis Haralambous.)
-ItalicAngle 0
-IsFixedPitch false
-UnderlinePosition -100
-UnderlineThickness 50
-Version 001.000
-EncodingScheme FontSpecific
-FontBBox 4 -23 903 710
-StartCharMetrics 16
-C 0 ; WX 750 ; N Euro.symbol ; B 32 -12 718 685 ;
-C 1 ; WX 750 ; N Euro.symbol.bold ; B 26 -12 724 685 ;
-C 2 ; WX 750 ; N Euro.symbol.slanted ; B 85 -12 842 685 ;
-C 3 ; WX 750 ; N Euro.symbol.bold.slanted ; B 73 -12 850 685 ;
-C 4 ; WX 741 ; N Euro.serif ; B 34 -14 707 676 ;
-C 5 ; WX 800 ; N Euro.serif.bold ; B 45 -19 767 691 ;
-C 6 ; WX 734 ; N Euro.serif.italic ; B 66 -18 745 666 ;
-C 7 ; WX 800 ; N Euro.serif.bold.italic ; B 17 -19 808 691 ;
-C 8 ; WX 756 ; N Euro.sansserif ; B 38 -23 731 709 ;
-C 9 ; WX 796 ; N Euro.sansserif.bold ; B 36 -22 763 710 ;
-C 10 ; WX 756 ; N Euro.sansserif.slanted ; B 86 -23 862 709 ;
-C 11 ; WX 796 ; N Euro.sansserif.bold.slanted ; B 82 -22 903 710 ;
-C 12 ; WX 600 ; N Euro.mono ; B 11 -16 534 576 ;
-C 13 ; WX 600 ; N Euro.mono.bold ; B 4 -14 539 597 ;
-C 14 ; WX 600 ; N Euro.mono.slanted ; B 61 -16 631 576 ;
-C 15 ; WX 600 ; N Euro.mono.bold.slanted ; B 54 -14 643 597 ;
-EndCharMetrics
-EndFontMetrics
diff --git a/contrib/groff/font/devps/freeeuro.pfa b/contrib/groff/font/devps/freeeuro.pfa
deleted file mode 100644
index 1891d4ffc536..000000000000
--- a/contrib/groff/font/devps/freeeuro.pfa
+++ /dev/null
@@ -1,316 +0,0 @@
-%!PS-AdobeFont-1.0: FreeEuro 001.000
-%%Title: FreeEuro
-%%CreationDate: Sat Dec 7 00:17:28 2002
-%%Creator: cjk
-%%DocumentSuppliedResources: font FreeEuro
-% Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); th
-% Generated by PfaEdit 1.0 (http://pfaedit.sf.net/)
-%%EndComments
-FontDirectory/FreeEuro known{/FreeEuro findfont dup/UniqueID known{dup
-/UniqueID get 4214375 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-11 dict begin
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
-/FontName /FreeEuro def
-/FontBBox [4 -23 903 710 ]readonly def
-/UniqueID 4214375 def
-/PaintType 0 def
-/FontInfo 10 dict dup begin
- /version (001.000) readonly def
- /Notice (Created by Werner Lemberg with PfaEdit 1.0 \050http://pfaedit.sf.net\051; the serif shapes are based on the Omega fonts created by Yannis Haralambous.) readonly def
- /FullName (FreeEuro) readonly def
- /FamilyName (FreeEuro) readonly def
- /Weight (Medium) readonly def
- /FSType 12 def
- /ItalicAngle 0 def
- /isFixedPitch false def
- /UnderlinePosition -100 def
- /UnderlineThickness 50 def
-end readonly def
-/Encoding 256 array
- 0 1 255 { 1 index exch /.notdef put} for
-dup 0/Euro.symbol put
-dup 1/Euro.symbol.bold put
-dup 2/Euro.symbol.slanted put
-dup 3/Euro.symbol.bold.slanted put
-dup 4/Euro.serif put
-dup 5/Euro.serif.bold put
-dup 6/Euro.serif.italic put
-dup 7/Euro.serif.bold.italic put
-dup 8/Euro.sansserif put
-dup 9/Euro.sansserif.bold put
-dup 10/Euro.sansserif.slanted put
-dup 11/Euro.sansserif.bold.slanted put
-dup 12/Euro.mono put
-dup 13/Euro.mono.bold put
-dup 14/Euro.mono.slanted put
-dup 15/Euro.mono.bold.slanted put
-readonly def
-currentdict end
-currentfile eexec
-743F8413F3636CA85A9FFEFB50B4BB27302A5F6C876586CCC1670A7EF5521E6ADE15AAB4
-DD2DDDB83735311FC63DB80D2C96AECFA05BB67F865EA35934B4B79A203A8DD489B09C79
-FF6EB9DBCFD889C3E73F8C94BC342AF671D6F688870A62EE1A0DF216E150FFEC64A8C2B7
-509AD05C011599C1AD84E6C4B668E07EA219BD72663D8AF4CA8EC8E23AA90DE90BE940C6
-6DB849CEDB3B64961365A7CCE47F4FC9E30FDEE4B14B90C2E0D8C344EBC974EABF417B3D
-28251A78ACEE2BFC4212B1E3E9C7EBC3262821EE98E538713C64DF0BC13C19337B63F916
-071CB6A5AC8BFC2DC3788EFE6757CBCB8F6C6B0964E5B8B64E298260DCF69D22544C4C9A
-AAB2694F2BC33A988936E3419205B0776C4F4C10DA085BB58EDB9040578A7C542326FA48
-21346944DDE5011ED6C593867701528ADFAC1A81310F107E53D7E80D380AB29406EC81A6
-B1E3AB7A256AB446730F845C2AE0A9E5BC7D1B95E98239326BEE43352A8CBAA2938ABC8F
-CA71A312A4CA623CE886F872E8BB8DEC0FE2DD61157735BE411D22655E7F6B32B7F17F06
-3F9D197C0A6DC6D751E75EC06CF908DD78ABDCDC462D74FB774644B8C65A3652BE990BEA
-3DCA0E713CF0F97262C55AF252E7A5CEB5F8F1614565FF088A38106F7AC63CE031F3D290
-DC08D216C170295D553776062AC3801F18D2F1D5F5CBD4A70659E299DE13D4D9A12F39BA
-F4A51643F0677019235AC25DC2B29169D38308F2170A1AA0FDCC59EA2DE35ECB2E59AEF4
-26712D65FC6E009D511502BAB674960650F7E863E287FC366F03EA9FBCC7E725239D121A
-A8E7049E59D220D39D790DC7AD4C38E1738DD4D7DDA27071E79360B636071004FE9DD730
-A07E015588BAF90E19ADB3601854DB4F1E60D1739C7012FBA34FFB67C2E46A0BA81897B9
-52B9B58EBF3316F6CDA6F86B9229B6D097AF9F9D4A721CE75AED8898DD2A42E1776EDDAB
-466F2587F72BCC3BE89B1D130C9E7CA61CA17BF0C2C3F83DD310DC3C56955D9ADE4956A6
-CFB4DBCEE8FA354C27EE57ACF334C0E91BF7952EB7E3D4E452880C5F2BF9ACF9BB58FA39
-9F0F0AE89DEBC053B6EEBD52A6330BC1F0BE0CFD13E1EB04803407CE40EF22585405F487
-C2BE46742F3224F33103A0B171F1677174E7A8E655F0CA9B111C69433F5DBDB36948C7FE
-0D9099AD8FBFDEB70AAF63ABE825A828B29E7166B23359730147748F9B6F38F29503D9F8
-DA5AABDEE13F5E4DE80BCCD9200FC2207C26E99BDF0A3F8200C0FAE266D7F136B673B0BB
-93C6E76EEA685EA6383F3E62BF3F55FE3DB8180EA998FC892856D82B86AE02E44D1938E8
-1D4F2E63716B311DEB6E1D3DD2049A3EE6D68965EDCC4FF457A92F2E47C432608A1161D9
-7AD9008EBC54787C6E5163D49019CCA728B50ED47B576B733936DD31311B5734B98A3F92
-8B79D6EA5F2C0228D14A087491CBA8C0DD37C92FB93B545239D8A776664B74D081E15BAD
-3F44B162DC2ABCF7D44656E67BB00AF2D7FA83D8C94F636D4ABC7F722B84D6B31D5E1AA5
-8B565C02C041873F155C1C0F4CEEE19D9B9D129FCF4A6D530AEC02EE8A003E529CB72865
-5352A44F12DB9108A413C974535D645719357AA5B40B092C237C758DB720DBC2CA88614C
-4B78209A7917C2409C7F6754D0FC14B3FF2EA76340158F8CE8AB6B6BC084BDAB16D75442
-0F879F39C072EDCA91AB38113E3E5E5587750D1EE53342924203890EA97A6081894BBC01
-BB8331687ED0FD1D0AECE0833B7C8ED7C502AFA836130061A6580673E2B2D2AD5427033E
-FF14BF2118EDE74F495358571A69778502693C47F5361EEE27958AF7DC1B8193A1CE5DD0
-6F98F56A7DBB0786DBD6DDF121B6328C97E48AA189FC5AF35D9809A1D4E859F3C2C36DF6
-CE2E3A5D1E07BDC25F95BE1E8E4351D14BE6BEC66004FFD619CAAD555330C0853DEA3E47
-5D346A924D14F4F2964CF56D1520BF4B49DD1AB6629BD1CAAA43AC18CA12E420863C4F02
-29AAF36D75DCBBBA34AAF0D802098F411CCBF9527EFD06B42DB0D7A33B7CA8AB95A11F93
-56A1A905E4740572CAB4CF683522B62224A251964B1DD39EC873B0F79138414B3B1429F4
-B89618B94C0651F6CAA8017EB3407C8D2CBF2F01C75081CC580D3C6821351B4BE90213CD
-0010D0D66050F98D5365E34E6B2ED87AFBE756B98D470D2DF72E5CA7D8FA5AC997A27472
-CF1D2F9B00124CE73F4118811A33158A53ABA3F9A50BE3BE4D99E771EEABC64299780F7D
-F716A28E356A707F6D356093E82BAF0F7B48029A264FF00FD9CA6BE5FC5567E0E165726F
-0CEF4D14BF7A3C06C41035CC24D2BB27D910595080CD1FD7E188CF3B5725CF2418C55F42
-050C24F59F845A2AE8A774AA2DE18C7D46A148FB94512E85EEF1B17FFBF7419337D4F839
-4C7DFF5AA3A9C15A0D4CC3057B01F76DA752C2D1D504EE2EFB864ABDFC20EDAB64CDE513
-40166400E4A234DF428B83BB3EC5047BA10412905C0F4460496B763C22C79131C3267B6C
-39C009CF01853FC39C8C350E86279F116F00E40E1A4016004B904B7462BE236336D197E9
-8E93C9890F942433398E541A32EAC543620BDD57D39BBF6869E0E30B02E871A6ECBC2FBE
-1668ADC19FFD974B9282E96F55EA3C2E57D8758CB55469B67C5E3D1EB2FCD97B014DD592
-A5FF102CC98BDB42AD0A8D151D816C621C32459E74C422C39FDC7F5BF261804DEDAA856C
-8768DEB3FFF8B6970B6175A5BEB048FAA910650E865E16FF6672ADE59FB29D16EB104B90
-3F912AF4107F4BD9076B90D21B1E11A940BAD3A99C66D78F3CE377940DBCBB646B4E320E
-C2F9CAFA016708BCFDCEED11F528B4641A0C38FD220A9A991D198542CD7287671DBC7764
-DEAD19E775E1B88F13B9935A022ADD244F080CC29C6C6238E60BDF7FD339D97CEEA33A3C
-DA86A2DB8D2A02C1A6330F28759BB47E41916295EC645275A9736BD4BC738839B3EB13FC
-3E8E085DA24F6DC3B5DBC270D2AF741AD70690172FAE865C252AA7A131D196DA287755EB
-5A1E0E8AAE93EB40B84AD249FF8F7C947ABE3B3A7D7DB21AAB547EAFF14DF357C95E24BF
-72922C80ECE27FB6BC2E6A355A4EE321FD3C72C57D89779D81EA394E4C2050FB173A12B5
-02140F8CDC659EC2B5A6D14E604A4D4002218BAEE8FF000CB4E9BA22B0A2871AED1D46B6
-FC72054ACE8AF56297F688AB383BBDC7A90F4466D44F35A58D21913B1560E8B7DF6CD686
-38D872330412E04014B081CF280A64DB4888538B401FDC739457482B83CFE87DF74336D8
-535B124F600EBB34BE727C3BC5E289D141716BAF510A6551E5EA6BA43E770211B80853CB
-0435C0F67E8A857788EEBAF47394F62328A493D44B4B2DC33BB8C748EE82F6866C424DFD
-93D62BA22A8F4D30E976FB9FAE45F0D7F93FDFF41232BA60CAC314097FC7DCE9627CE249
-57E783A9ED3F496A45B17D815B326A415976B122A7238247D38CAFED1018A951FF9B1941
-7E305D3698B38BAEA4C15D57E7A9BA26568ACDD0CD723C16CE3914D52566E04764FE810A
-6AF84AA2F0DB871946A400FB9BA23A579830A50528C786EF0CE14583761FA58702E45EBF
-0B72CDFB6F1DAED7A551D0E43CD23DF336560A87915F101EFB11B2F136CA998488907950
-ECEDC2F737BCB90824F0490EFB2A50BDF21B35C381EF73ACA08D20505B15469459C00261
-0AD4DF6ADD5E31B877EEA14D2884C0D31476B97CFA80A63ED8115300B03A0B8E8F02B8E6
-F56609D0CEEF1279A1D37DD713A6AC2372430C056E0D31ACA80202E2C71829CBE1A9A417
-69F8C1C19FB96F19518A69207BF35F38CBCF76FB89D9C8CEBDCA13FCD79320898C541CC5
-1376AF391ABADE82346FE51F3B365D042380F2A059A25D078FB3022CE752EC9E20EDE640
-28BE9853A159786462E59701EBB5F9AFDE1D84F5682B82B7198647E5B189CEB1A7B0FB55
-337C67CC4DB08D48E843A8FBCB6A8B967D9D225CFE66C81B8E87C3EAA6AB16C36A376FA4
-2641CAA75A77407CCF25CC112CBB9FECF1C8878E84623BCD03003AEC832A80FFCD39A246
-8195A4F8740AF2499AA2FBFB2A48BA3D95D42E10FF6D72004D878D9E8BE5AF08151EAB6F
-3E1343ED64D18B07F7AF6E575D75B1F0E3E72041B2D7A21E400F2173AABA5AC981A2D132
-327EEA3CD7B434355B43669FFC74EC7B04AC48EED15EE1A6466398CB246FD54A5E072487
-0CF731812341144511F777FDD08EB4FCE0A5FCFF6FD37A8053CF993FE5276BFD1DB17D3F
-10CE419F10C975351148F108FE9FEBB9DEC326EA7CC30066920BA941B7191E852B91ADD0
-9A1F6539E74DC949DF7F23E54DAADF018E86B158439C8BBD9E4628F4ADC9F6BF776CB6B6
-888E5E0752FE92A53E0F3D8738A3ACBD58B7748FDCBC9EFADC49C1D5853C41A582D07E2B
-8DCF8D3F8E7ECD79C1D7C44981FF8D6DB49FE7F976C6F9B448D0CFD0448A631D874C69C0
-408828257777A6D9CCB32395139AB20962323C1D38F5A81903E6389E784D560E5F72221B
-AE4AAE68C29FCCBD8E4D7739E8C1489301D80D2F8CBAA951CA9EBA8BB2B7AAA80A30B7C4
-C9D2356DD2E6B1E5A66E3652243DC521A77CFE0E8260E3814F4197C1407866ACB9A799F4
-D2B7B6BAFCAC660AD28452B1175C808815144F01F99DDB7F7A19CCFDD522E89A1CF4EF9F
-E986CEB8F80011C4763F29DE90C76ECE678D42783B4C9402B7CB270AB0B8681469FA5C2C
-DB3651C61F1AFBC441F456533B2C0F4FBAE9A7571F2A90FFDF33587C480DA43FCF29CEBA
-FCFA080B5A44F2BABDA2044212588001E47EFE55D91ABA7EAA7C261D02027301EA28AC65
-687B3681CEBF7CB08C0D2EBA3167075B61EF0C7791A5C818028AB0CB08E56FBC45B027C7
-416FF0E6EAA615963408C5EA295BE0673C493E9903D95CFB010FCFD094F03192A9538FCA
-259B48347D79F40F3023731DE72ADA10E9038A79B9F7E2A93041AAC1F268F9439DD0BA6C
-77559ECB955103085C3900C11A926B889D8E8275D96BE1E74ADC3C95E50D9CBC9E3925F2
-3FBDF75C7117DF74F2A56F173AAB79A5B38D4E17508D85FB4E1238CCCCE2AC989009C633
-B00EA1A69DB9A9A2E7B7A97BD9E9CF7E6E1F314DAED20648034C47A0F75722072EF97745
-924A16A58D4CA4B928F334200C2B2FE463C798F1CD657F2A53B9F13B9D7B9A207F9CD12A
-A1CE977533FBAD9B2C6DFEBE1141B96786DD79169C4AD3D27B49D96F1A5ACABADE98346B
-F663DDE31A38AFB1CA50BAC527DB023DE87E06FCCB71B28106D25AF54D20897BDBC78727
-C904C638B060085637BEB4B891FC150DE1B03BF1D857C4F987E8C26941673C55D37BB64C
-9F9B1D1E66A830C33179EDAD3780AAC1A2974C240FF753E8E59B99B0B2606CF03B364317
-562C705F9107FDD892DFF9EBB3844C2E3C919B641DBAC0E2F89ACC57CB38A341CD643BB2
-47863FD8504FE8216E21F78F88B110F88BE618AB8F4D4ECB62710B811214B5906A62E385
-CD5BFB483F856560E99FEC2C962A8615FD30A9BF24E719C36FA39E6B5149BAA33E9DEC5F
-BAE0A930C2D6A1AAF801C7B7117CFC33F16DA58DCD1040C0C30B6B3C54552DB2252E2759
-7C0D86E017ECCE5E37E45FA9581C886DF5417B6DF5CC143E71C7B9ED6379A717330D763F
-4D817D66956D321B0418482C10AFA32125F79D0B57E90E54CDAC58F808D38276949007CD
-A0D8717CB3B6B1C382CE1ADCC33174EF75BFD861D568E11FDFC5A738B3CB2703A1487A23
-D662B9BB3931E8232FB3A8CAEAC02D2CFB3196357FD7692BB8A9ADAC4EFC62E55567C77F
-78D085BBB1A509506F7750791EC5AE9F21F4BE17DAECFE19CC3FE46DD8F66AB8565CC43C
-4AA4EC4D2571C238777D81F910E9E6EF9FC45482489C657591DD9727887C6B03393D095B
-914374FBFB365471B160B8C9BA13190BCE16A610D8465F6D4DAFE8866CC1611B0617550C
-D3A2209CA2D66EB64DB1098ED0080DC64D6357404EEF153A9B7592C4D25ACCBEF7A2CA34
-9CEF81963C7BAA1F24B1AC2E17D70CA2A57551216E4CC533E615D36B2E15B3400B15D29B
-89DF7881DB682DD3E4CC8C2D83FB8AE43845185C18938C4643EA356A9B9C2769094382F8
-3E1672BD0247897FD8896ECB5E850789C03840DEBBAA59F6B7D5B828D81AAE78F18711D0
-1A51F7B51BEC544C3BE6E42C3EE6CAB4008BD375319F19307760DEFDA659C11E1D0937BD
-528468C0AF9221C165616AC7C2F59551593ACEBC6D7E2EB7619AC3F34A1C704E5371EAAD
-1C0ED311416677FCED438F764C8065468F2E75C14100345766170E46CC4C82D774B3DA7B
-D1AF304235966183ECF184D2A808C2E01A79EB89C11033D5ACB3012195EE1FA6F040619F
-620045DC68049F0488B30EC6CA4193E6146FC06477960701646737690EB5F9D613548AF5
-3FB99A11560AF27C50DE034DDA6517C449953608D326A35DDBA2707C2603BE5CD32E8C23
-AB80B9A25B97DADAF3F6C3A31B3F7300D37AABF812FD3F7D07FD41DB3EFB7B4EA062F68D
-D6EAE9FCE68AB4B4890F8A65F62FB3ADFA6F9A8BE6F99542CF9C1A0C79FFC320BC992590
-E912BA10918F218A8A50E1415E8946596BC2282AA9D2549F06E4E915633CE6DABA8E5726
-99F96A04AC9C350BA4554DCE7497FA0242AA1F0A5F66978D852EE175D35D38BD89C99D59
-4150198769AF67B2E2A9E7BA5CB0E685EC0E5B9532C9338249142C7D51CBBC6D0A0C2314
-869F61B162BC7B0783831B7EB1104A3DEFB7E6304D8E77A69CADC48005E1DB0A9A8E0D63
-DF98831D291A045831A6F95820C130957011A209625C270430EF9A4D54033F97B0EBB0A6
-B2D3D7B64D02764A8D4DDFDAC7598A3E5FF505D150F074C52A927851C37C1DEE34217D23
-F59DCEC4F863556EB6C62E0236AE398C5F27F2926CBC38463FE7D3DBDAD0A8113FD9B0F4
-D93ADD64162451778D570ABFC58ABDF8FEE553E014233B11E1E30CBAAA4AAE1900F02BD6
-F3431C0E843CA6285E4AD421D71D8EB69CEA07F23D727EF5FBF7BCCD6D8598FE68A873F0
-6399306A375F9A449056BCE40B4A5756D71883F2EF7FD916C7A886F244A2C0348AA95E73
-AFDDE842E885FB89B303B7F7BE4FFC96E94D449566F199B6405C85A3F0B7F9F1514CC3A4
-40CFCB2BB97EB08AF617BC6777ECD3593C8AF65F24A7F79D438EA4996E0443E542A45115
-AB0A23A6AD9B3397C2165F9F752A57A6DA58A59396087D3ED59673B1A2FAEAAA4AAED5DE
-68FC0F75CBC05789880D1318E1DEAB239873C10495E8A861299ED082D1968A51295B3ECE
-4079D775106352FE27F00130BA4B9BED34AC5056CD1111C3BFE982DDAFA872559EAAF186
-FD3F717373EE463EB56A3A2A17653723EB24DC7E74DDF22F0EBC93BEBD7A19938D51C04D
-FF8E4F8E2539CC784840FEF56DE6B041BF8DA3617E2AECFAECEEDFC0FC7F45E18D549511
-A18E93400E5F874E54E43DDB16DC53D546AED588C8004ECDDFC88E2948CB467F88025571
-2C5ABA26CE47AC4877AAE9429300A19B4C0EB2FCC918B3DE7CDB3C38A45F2486C6B0A57B
-34F5CC21CDB809217C1577E85D8D40BAD0864A12A934E818975307AC3C6AD91B80A3BE19
-A888B6DA3910024BB94FFE3BD371887B6AF40FDF3B3A77925D16CEEA259F1C99330D5201
-80CB5ED33876C0057A160B9CA16E9401046154FD92F85F6386036067D9ECA976A504CA7D
-4278765BEE4E5D08A8832A45D3DEA2CF21AB2BEEEB74DE3263ACD8915700E10C9CD72C9E
-AB0A5DA11EF61413B33652AAA3ED73B445FD3A517F4C3FC537021726A949D70F522B3987
-938DB3D02B7029E5AE1B506FB08E73E08C09AEAD5106368D0F93C4E2551F1D792AA318A0
-F01B5891334DE63C4B63DE11A30BA6976F13CF99211438E9C1F87A857E09AD944172D38A
-DBA4247D402879D27461E5740E2DD7FECD3FB1C17911034895D24367FEAB97FCD335BAE5
-78E606D3DDBE223348EC816C29ACEA1172E7AEEEC705A0172D108D49FCD5BFA64EE7E107
-808F8EB78D4ACE4CC6121344F96EA46F9AE4289399D1C0C3274C1602CCA6E9AB0C6CF045
-DD18C4F66FA3F87D4B2F34F0B24EB4DD38D3B4088AFB1C4378C886E53F1B297A7351413A
-7D6B6023D12799BDD6E80FD9C6FBE8A8A313DDA621A4F3BD5706F28BCACE60380DFCAD8D
-818DFEB230FE4FCCDE10B8278492227826287342E3C2D8F5B4ED0F29A336562B6679E79A
-7171C5B77C576A272B008D04BFB626A5F7DDDC74DD72BAF2B735B45EA9AC33C26E33FB0C
-C87EF1743927DA31893D690E9DFBFE84D245B520D15726BCB913898C5AA7DECA2A274492
-033C03543B00DA691383798A4B5537387CAD74BB91CF1BCFDE0E315F7F661437C3E7395D
-D3DA366932BE297F25C6B2BBE0F76CEB16E107D109BA27B5FABEEDF05D1A5255DF61A325
-BEEE633F564797639EDB22D84A2ABE85B7BC3AFA1B38559DAB8ABC54F6829A16B2FE24CF
-EB4568BF63B57FD44C032DA5CF2D36717A857D99B0A8A2421BB2B20312808C4F2F049E06
-050CE4C54DE5DD872A035725AE7292824975265018D65EED0EAD72495C50506D38AD29D8
-9D379215F3A4D74F5E2C9002C4CC09F6CB1DAD731C229656977FD22CF7CCE89B325D1CF9
-344BE186517AEFC7CC0FF762AF7634C96433A846BF9493D8A2C660E78763DAE28D52F42A
-041026E22EF60CE1FFE3CB29CC5E6A39B9EEAB0B165C71705CE9C4B50D7EBBCD6C0CF1BB
-0E52F1CD1A72A63983F905458F54425A74D6389C877D252E749D7D8A9C31531D28EFBE15
-BA50F4B5085D365ECEF98A867B6D282AC4E522AA657C7607E57F71B9A8C8C309B4DFE8AF
-E949CC09A56BE3998DF780F4660AA71224EF405A644B463FBF571F0E5DFAAE229C4C8005
-E8651C7348120EE658BF6BBC236AC9439BF11852E11E066D1BA8DFD7076DB128CA90A0B0
-C9DBB9CC88E469F890E93875F21822D26A953D01E2FA00E5657A242CE0A92963E4ECA460
-784CB43806238C72280433BB5CF797A99AFDAAA022FA421A344E93CEECCA58FF39A1E856
-E9BCB2583016696484B071A1B199FFDEB29BCF6855101C4EA271A39750F368E54533089F
-EFA0EFC81B0A79DA70408E5AEE18F793BE39791C541BEC63023069CC70D9CDF618ED29F4
-2037393F69668A7358EFA69D2A7AC8722BF1FF999CA768BBF08EE757E133B01E63D5D809
-519B97CDCE80701790E558737C6F8B00B0E1341633987A842C0907979D24AA41428267D2
-2C692A1D93A0686307D79563D6264E5BD5A40F6EEEA9B91E0D98F868D2A6D43A6C909D9E
-514500C10ADCD062528AC54B4CDAD6DDB466B655EE8EC4314A16880BF009C7E4A9FBEA5F
-63AAB8A17016250D80308FCF8AD5E5BAA53F17ED902872FF01A6FD6651B7B343A73777D7
-2090F1B08554422EAE4DAB73B22F714A9E236AC2329D092400FA031883BA9E118FC2397E
-8773D8CDF7EDFEDD7BB716419C7D95A7EF9BD2E44BE071014335866A7B273252F694D0A8
-644764303EE238F0369DC9A47EC3523A48986FA44ED642FA4109FE1E87984E994C3F0D5F
-3E9B0764A8D25FAF6318CE48203A0049CA2DB950DEB8B493F66247FC9B36D80D995756A6
-8014E98A00CB1EECBCFDFA4C3E9A0A2A5B831E0B4B823542D4B4CD70630CEAAEFDF5862E
-6D09F1D0EFDD1CC7CCC1F8EF7E5619B5F5C24D0F6F65458D62354E8E2C7ACB617F275D8C
-F8048980BEEE183BDCC404443726C9309FB58D1739D57D046906CB0A8A358AEF8793CE5E
-5710BA4BD661A25C345706013E51622631217D4A5E8D0E0D349C52D1D85DD3AE715D8710
-FC51D4780572E07543A0A9E5C3C538247079B16F5FC764CA72C5B3297CB032CC9E3F3999
-AB6A1C135EA731B57219B8B32C2461F116C0402786012C6DBC39C20E3E764DA41378B602
-CE5D9E0F68B4FD5936DEF0D6271E47CB14BD2C730C9F330CEF26D141144519AEF903EE52
-8739E1FD8D338AC74F43B4B7FFC0D62FB5055610C553BC056B67C4B79BF8CB5244F1D585
-2DECFDA75EA2CAA71DACCB893BB498B22AB3E1DF96D7BBD102367DFBFF02C135C42040D0
-155BD95DA0C4AA8F0D4F5F60F2A035829B6134CDD9CBEC37DAC58568BC58756177662F43
-5DD3EEA732A8A6448CBC6D4CACCA4444E9B2ABF1C54A1E30DAA5DA323B48250B70699479
-6DFA8BD2160AC41E82B3AD3A8E592DC3246B50AF4589BE7994D06F50A93C31BEF0608DB1
-4E2E138355A23BAB7796FCEF61A2495868B1D388F211514C73F639A1ECEC450E2CD0ECE4
-2687DFF5D25965E5B727306FAB8580465A74D81E5590F27C76FA05DC7C6DFAAAE841B99D
-3CA11A614EDDCA91410C90421E5BA23092E4563BE97153F2385ABD2C37672688028FAA55
-1168C9EDDF69E1B8FA511A56BA6DB831538B3E0B59148E6EF69CC65A243FCD643906ED3B
-07FB3AFCD850688D4CA8FD6CACCE1D4B55ABCD16680387251999F558327C57AE761B0CBB
-AB668E8D555ADA713699DC39F3FA0E68D7FB005FF628342C36A1BC0E9A5EFA6896DF4D58
-E547FCEE7ED610FC5D32C8C72C24B6FA766A14BDF23F5AC9321C6908EE3B9376425E7298
-00B731FF0FBB3E5EE589F0C8037CDADB72D10C2124A14FB45D45C94C8F5EF2A40B81538C
-538BC7DEC4823B3537BB9DA406345A80EF9B132455935C90D54E1C9D35B2C25DA45B00C6
-914FE04EF91C874325D8DBC10D1F30A7BD4E9CC5E70A3519CD6CC94F52433CE636E46F62
-0083A91FDD6FECF6CCE1D9FE0546741EDC4FF0C34C79C7114C1812DC389FE9DA6E4F5F43
-F166CBB4845DD1644DB6E2243277C029AEB6336392427E1793339ECDB8BD4C156C49CAD3
-9E1231153C35503CFA86E23CFD81BBABFF24D9DB287F63D110969F71D737747013D3EA59
-7792927261F837E5F4467843297B61D754E9617B1D2EAB47BAA5D4E205E777130D625841
-8902DC1259D91624CC7DA37CE6AB44B8A951346EB2EA4AE1AAFEA05CB873E68F2C38752E
-B01B2DA0823E7BBCCE05BA73E4A01D9BB4F0A93387E4B8CF71A72F4D677072EC92714848
-A658C4FC971E3EE4958E1A7C6765A9FC7AA63793A1D371F35A9CAFFD5AFE891E8CD4B38A
-9369E3C96B2EC604AA83E8DD9C0374C4F417AE3301FF8EF9DD08D5CFBFB7718339047C1A
-88227B978D0D91AB3D20C465FD2E35634B8A36F4FBCA67207EB3018D05C7A6E68B73DC9E
-C1D3C88599DD0B11988E6AD73F39C5607CA9DD96FF81B6709F76C11683E7149572F97E67
-D2D23332B11205CBEEDDF904048334FC859F8B7A204B65E39B09C55CDDC86B8D359BDA2C
-89483BF30BACE74F95B981E37EB0065A3C1A3583B25E78498E98DD181E08E6017B72C9CC
-B471867010D3564561DC5CE90286163783F1FC3C5FD75845457BCDA205E992ED1F7BCF9D
-21252FFE5C2A90ECC12E907CC686D9AF3C57F3DBEC3D1E08C417A0811181E1D33821DC6F
-1E7F68AC0613D55289C1A94D7F1308BB27E93D7CD952E3831AA55D76DB69891C0FA49DA2
-8C237CC650E1023BB18F4E96A66B6A9EAF7D074D9BD22B9713A61C659159564DB7FBADB0
-6F15A7E107989F27482C41A96F67950EFF8012C9FC287D6AE31E87BCD8E59FDA8439F691
-12A0F0637227B92FC4EA69B84A8D923B763E445308485B5C32C18F6604B6B30FED2775B6
-88B3089B0B681B6DB87EB4EE386E9D514C3BBA853EA767ED1223BB4AFFFC648918111932
-288547788BDE5CDBB17EC628321C24E0C013DDA78F24381B2A984BA655791FC791BE162F
-60D87530E3DAB5C150E048BDA24DA97126676B948D1879FEECB2A2E304475A078CFC27B9
-E14D4A0060F1254CBE65E4864BDD242A0339B1ACC4717DB134E7764433C03F916B9F4CDA
-0A1FF1EB33F1E0FFC667594FD23EB58288AC827C247C4AE6F8F3CAA30C7D0E9DB9F23BF0
-9C81580C20B4B367B7BE85E2F48557C00353756669FE34E543FED5438C52B2F132840140
-E548F948CF9AD2B734D895539F7D4CBE52A221614F5666FFB110A1BF0B8B3A9F478BF056
-FB1080C94005310175607A3E2AB73B9A810B50838F31481707C0B2CAC918086AB06ABDF0
-A7200AD28E443E23B34B61649B19D0F834ADDC3B18937807B43C2C258532AEBD615DD853
-38394F3581E6B8A98E86057F5288FCDE9DB3107126858CB9863A19C3B765E345C816E795
-053645E472FB47304CB57B536C683EA8E74DB0E8A286363DE7456BDFBC1C75FE6943DD01
-7F62A61F0C0DF19C1C5F53C483D82647023D9043ADB1B5247A532281BFE7B3C42BBAF6AE
-883EA3CE43CF5CE4CF51FEB90575CA233084C5A2BF4498A6EFDC9C8DBA1B3992C61DA729
-2E64D1214C28D0FFCF644BFFF1BB5F61852F04AEA89C1A888AF5B45F8E2F86B362EDD544
-7AAB5338207EEBE69461DE06538E63FF050DD92DAF297FB6365234306D1910D1D7D43F55
-38116B5634F5885F98343E5D6559298CE4D7F91FF569A1D0B34CCA2A8229A98A400F23B3
-8519190109BE258672BDEF4C1038FC0621D5003588C697ECACEF2A287D5BA465D95D330F
-050119D5273DE92A6C9F324E59579BA2A5A39FC845DA4F38CEF1A47DD185CBB82D559D14
-913F16D99D3086A733A48E5056667BB858F821609D27DB01A4BBD3D1B2959B679B4D1536
-B4A2E989FD94FD94DF7A401BB241EEA7E4F83FB6BEAAF4135A836D5A3D01D0A36D0C907D
-B9B8E57F11F22D1EEE3C041BFFC4DF6D004B1554FDA6CD542CF19F8F2E082AE2C0C1DCE6
-B0648C6759895783BA7C81550E94308A8E504963D76E56673FC2597077361F9545FB2537
-66737079EFFB2F30E8E62602E7E37F7048D3E391C18E3D44394351B235985E6EF2AF267C
-B92BCE81ED8EC8DB2E2D6A56BA310F01575482366A032B003EEB72B22F677AAD0EB9E2A9
-6EB9017ABAF963F8FD8EAE59EF0283DD7733052680E42AB23BD98D10682B29869E7EFC15
-C9D6570A610D0248D548AA7DA39FDE4A19B7B5D6131FF06AC674B622725BBA0A8E9B257E
-986EEB3773A57BBE0A96C2C7C899509292775680F72BF1A084123F6172D7C210F53C385D
-644A139333B4767CD6E3347572AD
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if \ No newline at end of file
diff --git a/contrib/groff/font/devps/generate/Makefile b/contrib/groff/font/devps/generate/Makefile
deleted file mode 100644
index 739fd8e59bd5..000000000000
--- a/contrib/groff/font/devps/generate/Makefile
+++ /dev/null
@@ -1,239 +0,0 @@
-# Copyright (C) 1989-2000, 2002, 2003 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-# This is set up so you can do
-# make -f generate/Makefile
-# in the parent directory of this directory.
-
-# The following line is required for DOS/Windows systems, since
-# this Makefile needs a Unixy shell to run.
-SHELL = /bin/sh
-
-# Directory containing AFM files. Must not be current directory.
-# Either long names (eg Times-Roman.afm) or short names (eg timesr.afm)
-# may be used. See the afmname script.
-afmdir=/usr/local/lib/afm
-srcdir=generate
-
-SPECIALFONTS=S
-DINGBATSFONTS=ZD ZDR
-GREEKFONTS=SS
-TEXTFONTS=AB ABI AI AR BMB BMBI BMI BMR CB CBI CI CR HB HBI HI HR HNB HNBI \
- HNI HNR NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI
-
-FONTS=$(TEXTFONTS) $(SPECIALFONTS) $(GREEKFONTS) $(DINGBATSFONTS) EURO
-
-DESC=$(srcdir)/../DESC
-AFMTODIT=afmtodit -d$(DESC)
-IFLAG=-i 50
-RFLAG=-i 0 -m
-NOLIGFLAG=-n
-TEXTENC=$(srcdir)/../text.enc
-EFLAG=-e $(TEXTENC)
-TEXTMAP=$(srcdir)/textmap
-AFMNAME=$(srcdir)/afmname
-
-all: $(FONTS)
-
-TR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@
-
-TB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Times-Bold.afm` $(TEXTMAP) $@
-
-TI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) -a 7 \
- `$(AFMNAME) $(afmdir)/Times-Italic.afm` $(TEXTMAP) $@
-
-TBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` $(TEXTMAP) $@
-
-HR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@
-
-HB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` $(TEXTMAP) $@
-
-HI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` $(TEXTMAP) $@
-
-HBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` $(TEXTMAP) $@
-
-CR:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@
-
-CB:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Courier-Bold.afm` $(TEXTMAP) $@
-
-CI:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` $(TEXTMAP) $@
-
-CBI:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` $(TEXTMAP) $@
-
-PR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@
-
-PB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` $(TEXTMAP) $@
-
-PI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` $(TEXTMAP) $@
-
-PBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` $(TEXTMAP) $@
-
-NR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@
-
-NB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` $(TEXTMAP) $@
-
-NI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` $(TEXTMAP) $@
-
-NBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` $(TEXTMAP) $@
-
-BMR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@
-
-BMB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` $(TEXTMAP) $@
-
-BMI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` $(TEXTMAP) $@
-
-BMBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` $(TEXTMAP) $@
-
-AR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@
-
-AB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` $(TEXTMAP) $@
-
-AI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` $(TEXTMAP) $@
-
-ABI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` $(TEXTMAP) $@
-
-HNR:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@
-
-HNB:
- $(AFMTODIT) $(EFLAG) $(RFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` $(TEXTMAP) $@
-
-HNI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` $(TEXTMAP) $@
-
-HNBI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` $(TEXTMAP) $@
-
-ZCMI:
- $(AFMTODIT) $(EFLAG) $(IFLAG) \
- `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` $(TEXTMAP) $@
-
-ZD:
- $(AFMTODIT) -s $(RFLAG) \
- `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbats.map $@
-
-SS: $(srcdir)/symbolsl.afm
- $(AFMTODIT) -s -x $(IFLAG) \
- $(srcdir)/symbolsl.afm $(srcdir)/lgreekmap $@
-
-S: symbol.afm
- $(AFMTODIT) -s $(RFLAG) symbol.afm symbolmap $@
-
-ZDR: zapfdr.afm
- $(AFMTODIT) -s $(RFLAG) zapfdr.afm $(srcdir)/dingbats.rmap $@
-
-# the map is just a dummy
-EURO: freeeuro.afm
- $(AFMTODIT) $(RFLAG) freeeuro.afm symbolmap $@
-
-freeeuro.afm freeeuro.pfa: generate/freeeuro.sfd
- pfaedit -script generate/sfdtopfa.pe generate/freeeuro.sfd
-
-symbol.afm: $(srcdir)/symbol.sed
- -rm -f $@
- sed -f $(srcdir)/symbol.sed `$(AFMNAME) $(afmdir)/Symbol.afm` >$@
-
-zapfdr.afm:
- -rm -f $@
- sed -e '/^FontName /s/ZapfDingbats/ZapfDingbats-Reverse/' \
- `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` >$@
-
-ZD: $(srcdir)/dingbats.map
-ZDR: $(srcdir)/dingbats.rmap
-$(TEXTFONTS): $(TEXTMAP) $(TEXTENC)
-$(SPECIALFONTS): symbolmap
-$(GREEKFONTS): $(srcdir)/lgreekmap
-$(FONTS): $(DESC)
-
-symbolmap: $(TEXTMAP) $(srcdir)/symbolchars
- echo '#' >$@
- echo '# This is a list of all predefined groff symbols.' >>$@
- echo '#' >>$@
- cat $(TEXTMAP) $(srcdir)/symbolchars >>$@
-
-clean:
- -rm -f symbolmap symbol.afm zapfdr.afm
-
-realclean: clean
- -rm -f $(FONTS)
-
-extraclean: realclean
- -rm -f core *~ "#*"
-
-.PHONY: all clean realclean extraclean
-
diff --git a/contrib/groff/font/devps/generate/afmname b/contrib/groff/font/devps/generate/afmname
deleted file mode 100755
index 7d19349303bb..000000000000
--- a/contrib/groff/font/devps/generate/afmname
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /bin/sh
-# Fix the path name of an AFM file.
-if test -f "$1"
-then
- echo "$1"
-else
- echo `dirname $1`/`basename $1 .afm | awk '
-/^AvantGarde-Book$/ { print "avangbk" }
-/^AvantGarde-BookOblique$/ { print "avangbko" }
-/^AvantGarde-Demi$/ { print "avangd" }
-/^AvantGarde-DemiOblique$/ { print "avangdo" }
-/^Bookman-Demi$/ { print "bookmd" }
-/^Bookman-DemiItalic$/ { print "bookmdi" }
-/^Bookman-Light$/ { print "bookml" }
-/^Bookman-LightItalic$/ { print "bookmli" }
-/^Courier$/ { print "couri" }
-/^Courier-Bold$/ { print "courib" }
-/^Courier-BoldOblique$/ { print "couribo" }
-/^Courier-Oblique$/ { print "courio" }
-/^Helvetica$/ { print "helve" }
-/^Helvetica-Bold$/ { print "helveb" }
-/^Helvetica-BoldOblique$/ { print "helvebo" }
-/^Helvetica-Narrow$/ { print "helven" }
-/^Helvetica-Narrow-Bold$/ { print "helvenb" }
-/^Helvetica-Narrow-BoldOblique$/ { print "helvenbo" }
-/^Helvetica-Narrow-Oblique$/ { print "helveno" }
-/^Helvetica-Oblique$/ { print "helveo" }
-/^NewCenturySchlbk-Bold$/ { print "newcsb" }
-/^NewCenturySchlbk-BoldItalic$/ { print "newcsbi" }
-/^NewCenturySchlbk-Italic$/ { print "newcsi" }
-/^NewCenturySchlbk-Roman$/ { print "newcsr" }
-/^Palatino-Bold$/ { print "palatb" }
-/^Palatino-BoldItalic$/ { print "palatbi" }
-/^Palatino-Italic$/ { print "palati" }
-/^Palatino-Roman$/ { print "palatr" }
-/^Symbol$/ { print "symbol" }
-/^Times-Bold$/ { print "timesb" }
-/^Times-BoldItalic$/ { print "timesbi" }
-/^Times-Italic$/ { print "timesi" }
-/^Times-Roman$/ { print "timesr" }
-/^ZapfChancery-MediumItalic$/ { print "zapfcmi" }
-/^ZapfDingbats$/ { print "zapfd" }
-' `.afm
-fi
diff --git a/contrib/groff/font/devps/generate/dingbats.map b/contrib/groff/font/devps/generate/dingbats.map
deleted file mode 100644
index c5459ce78351..000000000000
--- a/contrib/groff/font/devps/generate/dingbats.map
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Predefined groff symbols for the dingbats font.
-#
-a19 OK
-a12 rh
diff --git a/contrib/groff/font/devps/generate/dingbats.rmap b/contrib/groff/font/devps/generate/dingbats.rmap
deleted file mode 100644
index 2c699681a2c4..000000000000
--- a/contrib/groff/font/devps/generate/dingbats.rmap
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# Predefined groff symbols for the reversed dingbats font.
-#
-a12 lh
diff --git a/contrib/groff/font/devps/generate/freeeuro.sfd b/contrib/groff/font/devps/generate/freeeuro.sfd
deleted file mode 100644
index d40e684734ac..000000000000
--- a/contrib/groff/font/devps/generate/freeeuro.sfd
+++ /dev/null
@@ -1,610 +0,0 @@
-SplineFontDB: 1.0
-FontName: FreeEuro
-FullName: FreeEuro
-FamilyName: FreeEuro
-Weight: Medium
-Copyright: Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); the serif shapes are based on the Omega fonts created by Yannis Haralambous.
-Version: 001.000
-ItalicAngle: 0
-UnderlinePosition: -100
-UnderlineWidth: 50
-Ascent: 800
-Descent: 200
-NeedsXUIDChange: 1
-FSType: 12
-PfmFamily: 65
-TTFWeight: 500
-TTFWidth: 5
-Panose: 3 0 6 3 0 0 0 0 0 0
-LineGap: 90
-VLineGap: 0
-
-Encoding: custom
-DisplaySize: -96
-AntiAlias: 1
-BeginChars: 256 16
-StartChar: Euro.symbol
-Encoding: 0 8364
-Width: 750
-Flags: MW
-HStem: -12 58<447 497> 250 57<55 124 195 580> 366 57<55 124 195 628> 627 58<447 497>
-Fore
-134 250 m 9
- 32 250 l 17
- 56 307 l 1
- 125 307 l 1
- 124 317 124 327 124 337 c 0
- 124 346 124 356 125 366 c 1
- 32 366 l 1
- 56 423 l 1
- 134 423 l 17
- 165 555 294 685 473 685 c 0
- 614 685 701 601 718 582 c 9
- 694 523 l 17
- 644 581 567 627 472 627 c 1
- 334 627 230 534 195 423 c 1
- 652 423 l 9
- 628 366 l 25
- 183 366 l 17
- 182 356 182 346 182 337 c 0
- 182 327 182 317 183 307 c 1
- 604 307 l 9
- 580 250 l 25
- 195 250 l 17
- 234 124 350 46 471 46 c 1
- 568 46 641 90 694 150 c 9
- 694 68 l 17
- 639 23 562 -12 472 -12 c 1
- 325 -12 177 83 134 250 c 9
-EndSplineSet
-MinimumDistance: x16,-1
-EndChar
-StartChar: Euro.symbol.bold
-Encoding: 1 8364
-Width: 750
-Flags: MW
-HStem: -12 87<473 507> 220 87<59 141 254 578> 366 87<59 141 254 634> 598 87<473 507>
-Fore
-254 220 m 9
- 578 220 l 25
- 612 307 l 17
- 230 307 l 1
- 228 316 228 325 228 334 c 0
- 228 345 228 356 230 366 c 9
- 634 366 l 25
- 670 453 l 17
- 254 453 l 1
- 304 552 402 598 488 598 c 0
- 596 598 662 535 688 504 c 9
- 724 594 l 17
- 640 668 552 685 488 685 c 0
- 320 685 198 566 160 453 c 9
- 60 453 l 25
- 26 366 l 1
- 142 366 l 1
- 142 356 140 346 140 337 c 0
- 140 327 142 317 142 307 c 1
- 60 307 l 1
- 26 220 l 1
- 160 220 l 17
- 206 100 316 -12 496 -12 c 1
- 564 -12 640 17 688 52 c 9
- 688 169 l 17
- 642 116 576 75 490 75 c 0
- 414 75 312 110 254 220 c 9
-EndSplineSet
-MinimumDistance: x4,-1
-EndChar
-StartChar: Euro.symbol.slanted
-Encoding: 2 8364
-Width: 750
-Flags: HW
-HStem: -12 58<467 486> 250 57<120 187 248 633> 366 57<145 203 285 706> 627 58<596 621>
-Fore
-187 250 m 9
- 85 250 l 17
- 121 307 l 1
- 190 307 l 1
- 193 327 198 346 203 366 c 1
- 110 366 l 1
- 146 423 l 5
- 224 423 l 17
- 283 555 440 685 619 685 c 0
- 760 685 829 601 842 582 c 9
- 805 523 l 17
- 767 581 700 627 605 627 c 1
- 467 627 344 534 285 423 c 1
- 742 423 l 9
- 706 366 l 25
- 261 366 l 17
- 256 346 251 328 248 307 c 1
- 669 307 l 9
- 633 250 l 25
- 248 250 l 17
- 260 124 360 46 481 46 c 1
- 578 46 660 90 726 150 c 9
- 708 68 l 17
- 644 23 559 -12 469 -12 c 1
- 322 -12 195 83 187 250 c 9
-EndSplineSet
-EndChar
-StartChar: Euro.symbol.bold.slanted
-Encoding: 3 8364
-Width: 750
-Flags: W
-HStem: -12 87<488 507> 220 87<125 207 301 625> 366 87<156 218 351 712> 598 87<614 636>
-Fore
-301 220 m 9
- 625 220 l 25
- 678 307 l 17
- 295 307 l 1
- 296 329 301 349 307 366 c 9
- 712 366 l 25
- 766 453 l 17
- 351 453 l 1
- 422 552 529 598 616 598 c 0
- 724 598 776 535 796 504 c 9
- 850 594 l 17
- 782 668 698 685 634 685 c 0
- 466 685 319 566 257 453 c 9
- 157 453 l 25
- 104 366 l 1
- 219 366 l 1
- 214 346 210 328 207 307 c 1
- 126 307 l 1
- 73 220 l 1
- 207 220 l 17
- 227 100 314 -12 494 -12 c 1
- 561 -12 644 17 700 52 c 9
- 724 169 l 17
- 667 116 592 75 505 75 c 0
- 430 75 335 110 301 220 c 9
-EndSplineSet
-EndChar
-StartChar: Euro.serif
-Encoding: 4 8364
-Width: 741
-Flags: MW
-HStem: -14 44<435 463> 253 46<53 102 224 568> 369 46<53 104 224 618> 636 40<433 467>
-Fore
-224 253 m 1
- 245 130 319 30 463 30 c 0
- 555 30 625 68 689 131 c 1
- 707 113 l 1
- 651 30 532 -14 436 -14 c 0
- 257 -14 138 91 109 253 c 1
- 34 253 l 1
- 54 299 l 1
- 103 299 l 1
- 102 308 102 319 102 331 c 0
- 102 344 103 357 104 369 c 1
- 34 369 l 1
- 54 415 l 1
- 111 415 l 1
- 145 569 272 676 442 676 c 0
- 537 676 653 631 707 549 c 1
- 689 531 l 1
- 624 594 543 636 451 636 c 0
- 394 636 342 613 301 575 c 0
- 256 534 234 476 224 415 c 1
- 638 415 l 1
- 618 369 l 1
- 219 369 l 1
- 218 356 218 342 218 329 c 0
- 218 319 218 309 219 299 c 1
- 588 299 l 1
- 568 253 l 1
- 224 253 l 1
-EndSplineSet
-MinimumDistance: x22,-1
-EndChar
-StartChar: Euro.serif.bold
-Encoding: 5 8364
-Width: 800
-Flags: MW
-HStem: -19 48<486 510> 231 69<72 129 313 612> 368 69<72 131 312 669> 649 42<476 510>
-Fore
-142 231 m 1
- 45 231 l 1
- 73 300 l 1
- 130 300 l 1
- 129 310 129 321 129 332 c 0
- 129 344 130 356 131 368 c 1
- 45 368 l 1
- 73 437 l 1
- 143 437 l 1
- 183 586 310 691 483 691 c 0
- 611 691 689 628 762 545 c 1
- 732 520 l 1
- 649 613 572 649 494 649 c 0
- 377 649 328 560 312 437 c 1
- 697 437 l 1
- 669 368 l 1
- 307 368 l 1
- 306 359 306 348 306 336 c 0
- 306 325 306 312 307 300 c 1
- 640 300 l 1
- 612 231 l 1
- 313 231 l 1
- 319 190 330 149 349 116 c 0
- 391 44 470 29 501 29 c 0
- 579 29 654 59 737 152 c 1
- 767 127 l 1
- 694 44 616 -19 488 -19 c 0
- 300 -19 181 89 142 231 c 1
-EndSplineSet
-MinimumDistance: x16,-1
-EndChar
-StartChar: Euro.serif.italic
-Encoding: 6 8364
-Width: 734
-Flags: W
-HStem: -18 45<403 426> 253 46<85 140 257 565> 369 46<117 161 289 636> 630 36<544 567>
-Fore
-143 299 m 1
- 147 322 152 346 161 369 c 1
- 98 369 l 1
- 118 415 l 1
- 179 415 l 1
- 243 551 380 666 546 666 c 0
- 694 666 734 560 745 516 c 1
- 720 502 l 1
- 700 549 668 630 554 630 c 0
- 425 630 336 528 289 415 c 1
- 656 415 l 1
- 636 369 l 1
- 272 369 l 1
- 266 347 261 323 257 299 c 1
- 585 299 l 1
- 565 253 l 1
- 252 253 l 1
- 248 118 301 27 426 27 c 0
- 539 27 609 98 657 145 c 1
- 674 131 l 1
- 637 87 548 -18 402 -18 c 0
- 286 -18 140 52 140 253 c 1
- 66 253 l 1
- 86 299 l 1
- 143 299 l 1
-EndSplineSet
-EndChar
-StartChar: Euro.serif.bold.italic
-Encoding: 7 8364
-Width: 800
-Flags: W
-HStem: -19 48<400 427> 231 69<60 114 295 584> 368 69<92 135 332 673> 649 42<544 586>
-Fore
-114 231 m 1
- 17 231 l 1
- 61 300 l 1
- 118 300 l 1
- 121 324 128 347 135 368 c 1
- 49 368 l 1
- 93 437 l 1
- 163 437 l 1
- 239 586 390 691 563 691 c 0
- 691 691 754 628 808 545 c 1
- 772 520 l 1
- 711 613 642 649 564 649 c 0
- 447 649 377 560 332 437 c 1
- 717 437 l 1
- 673 368 l 1
- 311 368 l 1
- 305 349 299 323 295 300 c 1
- 628 300 l 1
- 584 231 l 1
- 285 231 l 1
- 281 190 282 149 293 116 c 0
- 318 44 394 29 425 29 c 0
- 503 29 585 59 690 152 c 1
- 714 127 l 1
- 621 44 529 -19 401 -19 c 0
- 213 -19 119 89 114 231 c 1
-EndSplineSet
-EndChar
-StartChar: Euro.sansserif
-Encoding: 8 8364
-Width: 756
-Flags: MW
-HStem: -23 79<485 519> 225 84<68 156 263 585> 378 84<68 156 264 643> 630 79<469 503>
-Fore
-263 225 m 9
- 585 225 l 25
- 617 309 l 17
- 246 309 l 1
- 245 320 245 332 245 344 c 0
- 245 356 245 369 246 378 c 9
- 643 378 l 25
- 675 462 l 17
- 264 462 l 1
- 299 565 386 630 488 630 c 0
- 598 630 659 578 696 520 c 9
- 731 614 l 17
- 655 692 560 709 494 709 c 0
- 296 709 199 573 172 462 c 9
- 69 462 l 25
- 38 378 l 1
- 157 378 l 1
- 156 371 156 360 156 350 c 0
- 156 335 156 321 157 309 c 1
- 69 309 l 1
- 38 225 l 1
- 171 225 l 17
- 207 90 318 -23 492 -23 c 1
- 560 -23 631 -12 697 33 c 9
- 697 136 l 17
- 620 72 579 56 494 56 c 0
- 389 56 300 118 263 225 c 9
-EndSplineSet
-MinimumDistance: x3,-1
-EndChar
-StartChar: Euro.sansserif.bold
-Encoding: 9 8364
-Width: 796
-Flags: MW
-HStem: -22 123<531 565> 218 100<67 141 310 619> 372 98<68 141 310 669> 587 123<515 565>
-Fore
-724 540 m 1
- 665 577 617 587 537 587 c 0
- 489 587 364 571 310 470 c 1
- 701 470 l 9
- 669 372 l 25
- 284 372 l 17
- 284 362 283 354 283 345 c 0
- 283 337 284 329 284 318 c 1
- 651 318 l 9
- 619 218 l 25
- 310 218 l 17
- 336 168 422 101 543 101 c 0
- 646 101 686 125 716 144 c 9
- 716 6 l 17
- 682 -7 623 -22 540 -22 c 1
- 332 -22 206 86 161 218 c 9
- 36 218 l 1
- 68 318 l 1
- 141 318 l 1
- 140 329 139 338 139 348 c 0
- 139 355 140 363 141 372 c 1
- 36 372 l 1
- 69 470 l 25
- 161 470 l 17
- 192 555 283 710 544 710 c 0
- 630 710 703 692 763 660 c 0
- 724 540 l 1
-EndSplineSet
-MinimumDistance: x5,-1
-EndChar
-StartChar: Euro.sansserif.slanted
-Encoding: 10 8364
-Width: 756
-Flags: WO
-HStem: -23 79<485 519> 225 84<134 219 312 633> 378 84<166 237 362 723> 630 79<620 647>
-Fore
-311 225 m 9
- 633 225 l 25
- 683 309 l 17
- 312 309 l 1
- 315 331 321 359 326 378 c 13
- 723 378 l 25
- 773 462 l 17
- 362 462 l 1
- 419 565 520 630 622 630 c 0
- 732 630 782 578 807 520 c 9
- 862 614 l 17
- 802 692 711 709 645 709 c 0
- 447 709 321 573 270 462 c 9
- 167 462 l 25
- 118 378 l 1
- 237 378 l 1
- 233 360 225 329 223 309 c 1
- 135 309 l 1
- 86 225 l 1
- 219 225 l 17
- 226 90 313 -23 487 -23 c 1
- 555 -23 628 -12 704 33 c 9
- 726 136 l 17
- 635 72 591 56 506 56 c 0
- 401 56 325 118 311 225 c 9
-EndSplineSet
-EndChar
-StartChar: Euro.sansserif.bold.slanted
-Encoding: 11 8364
-Width: 796
-Flags: HW
-HStem: -22 123<534 567> 218 100<135 207 356 666> 372 98<168 220 410 749> 587 123<660 697>
-Fore
-839 540 m 1
- 788 577 742 587 662 587 c 0
- 614 587 485 571 410 470 c 1
- 801 470 l 9
- 748 372 l 25
- 363 372 l 17
- 358 353 355 341 352 318 c 1
- 719 318 l 9
- 665 218 l 25
- 356 218 l 17
- 372 168 443 101 564 101 c 0
- 667 101 713 125 747 144 c 9
- 717 6 l 17
- 681 -7 618 -22 535 -22 c 1
- 327 -22 224 86 207 218 c 9
- 82 218 l 1
- 136 318 l 1
- 209 318 l 1
- 211 339 213 354 220 372 c 1
- 115 372 l 1
- 169 470 l 25
- 261 470 l 17
- 310 555 434 710 695 710 c 0
- 781 710 850 692 903 660 c 0
- 839 540 l 1
-EndSplineSet
-EndChar
-StartChar: Euro.mono
-Encoding: 12 8364
-Width: 600
-Flags: MW
-HStem: -16 41<314 332> 217 37<26 63 106 385> 314 37<26 63 106 430> 535 41<314 332>
-Fore
-322 576 m 0
- 196 576 80 480 65 351 c 1
- 33 351 l 2
- 16 351 11 346 11 333 c 0
- 11 319 17 314 33 314 c 2
- 63 314 l 1
- 63 254 l 1
- 33 254 l 2
- 17 254 11 249 11 236 c 0
- 11 222 17 217 33 217 c 2
- 65 217 l 1
- 80 89 196 -16 322 -16 c 0
- 386 -16 446 9 496 55 c 0
- 522 79 534 96 534 106 c 0
- 534 117 526 125 514 125 c 0
- 507 125 503 123 496 115 c 0
- 442 51 391 25 322 25 c 0
- 216 25 124 107 106 217 c 1
- 383 217 l 2
- 398 217 404 222 404 236 c 0
- 404 249 399 254 383 254 c 2
- 104 254 l 1
- 104 314 l 1
- 428 314 l 2
- 444 314 450 319 450 333 c 0
- 450 346 444 351 428 351 c 2
- 106 351 l 1
- 124 460 216 535 322 535 c 0
- 391 535 442 509 496 445 c 0
- 503 437 507 435 514 435 c 0
- 526 435 534 443 534 454 c 0
- 534 464 522 481 496 505 c 0
- 446 551 386 576 322 576 c 0
-EndSplineSet
-MinimumDistance: x23,-1 x22,25 x22,23 x21,18 x21,20 x6,9 x6,7 x5,2 x5,4
-EndChar
-StartChar: Euro.mono.bold
-Encoding: 13 8364
-Width: 600
-Flags: W
-HStem: -14 100<307.635 341> 205 56<22.3275 59 174 388> 303 56<22.3275 59 173 426> 497 100<323 341>
-Fore
-173 359 m 1
- 424 359 l 2
- 442 359 452 349 452 331 c 0
- 452 313 442 303 424 303 c 2
- 169 303 l 1
- 169 261 l 1
- 386 261 l 2
- 404 261 414 251 414 233 c 0
- 414 215 404 205 386 205 c 2
- 174 205 l 1
- 190 130 247 86 329 86 c 0
- 382 86 429 98 461 143 c 0
- 469 154 481 159 492 159 c 0
- 517 159 538 136 538 109 c 0
- 538 86 521 60 490 36 c 0
- 451 5 389 -14 325 -14 c 0
- 187 -14 84 72 62 205 c 1
- 31 205 l 2
- 14 205 4 215 4 233 c 0
- 4 251 13 261 31 261 c 2
- 59 261 l 1
- 59 303 l 1
- 31 303 l 2
- 14 303 4 313 4 331 c 0
- 4 349 13 359 31 359 c 2
- 62 359 l 1
- 78 498 187 597 325 597 c 0
- 389 597 451 582 490 551 c 1
- 521 527 539 505 539 478 c 0
- 539 455 517 426 492 426 c 1
- 481 426 469 431 461 442 c 0
- 431 482 394 497 329 497 c 0
- 247 497 188 444 173 359 c 1
-EndSplineSet
-EndChar
-StartChar: Euro.mono.slanted
-Encoding: 14 8364
-Width: 600
-Flags: MW
-HStem: -16 41<316 334> 217 37<78 112 158 438> 314 37<98 130 181 504> 535 41<428 457>
-Fore
-541 125 m 0
- 534 125 530 123 521 115 c 0
- 453 51 397 25 328 25 c 0
- 210 25 148 121 153 217 c 1
- 430 217 l 2
- 445 217 455 225 455 241 c 0
- 455 250 451 254 437 254 c 2
- 158 254 l 1
- 171 314 l 1
- 496 314 l 2
- 520 314 522 333 522 339 c 0
- 522 348 518 351 504 351 c 2
- 181 351 l 1
- 222 460 330 535 436 535 c 0
- 505 535 551 509 591 445 c 0
- 596 437 600 435 607 435 c 0
- 619 435 631 443 631 457 c 0
- 631 467 623 483 604 505 c 0
- 564 551 509 576 445 576 c 0
- 319 576 183 480 140 351 c 1
- 108 351 l 2
- 84 351 81 335 81 329 c 0
- 81 317 85 314 100 314 c 2
- 130 314 l 1
- 117 254 l 1
- 87 254 l 2
- 63 254 61 238 61 232 c 0
- 61 220 65 217 80 217 c 2
- 112 217 l 1
- 99 84 198 -16 319 -16 c 0
- 383 -16 448 9 508 55 c 0
- 538 78 557 96 557 108 c 0
- 557 123 547 125 541 125 c 0
-EndSplineSet
-MinimumDistance: x8,-1
-EndChar
-StartChar: Euro.mono.bold.slanted
-Encoding: 15 8364
-Width: 600
-Flags: W
-HStem: -14 100<322 348> 205 56<85 107 226 438> 303 56<101 124 250 495> 497 100<429 455>
-Fore
-250 359 m 1
- 501 359 l 2
- 516 359 524 352 524 339 c 0
- 524 317 509 303 489 303 c 2
- 234 303 l 1
- 226 261 l 1
- 443 261 l 2
- 458 261 465 254 465 242 c 0
- 465 219 450 205 431 205 c 2
- 219 205 l 1
- 219 130 266 86 348 86 c 0
- 403 86 457 103 492 143 c 0
- 501 153 516 159 527 159 c 0
- 548 159 563 142 563 120 c 0
- 563 89 536 61 499 36 c 0
- 453 5 387 -14 323 -14 c 0
- 176 -14 100 80 107 205 c 1
- 76 205 l 2
- 62 205 54 212 54 225 c 0
- 54 247 68 261 88 261 c 2
- 116 261 l 1
- 124 303 l 1
- 96 303 l 2
- 82 303 74 310 74 323 c 0
- 74 346 89 359 108 359 c 2
- 139 359 l 1
- 185 498 315 597 453 597 c 0
- 517 597 576 582 608 551 c 1
- 630 530 643 511 643 489 c 0
- 643 459 612 426 584 426 c 1
- 573 426 560 433 556 442 c 0
- 535 484 497 497 436 497 c 0
- 354 497 283 444 250 359 c 1
-EndSplineSet
-EndChar
-EndChars
-EndSplineFont
diff --git a/contrib/groff/font/devps/generate/lgreekmap b/contrib/groff/font/devps/generate/lgreekmap
deleted file mode 100644
index f8eda6aedc93..000000000000
--- a/contrib/groff/font/devps/generate/lgreekmap
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# This is the list of greek symbols for the SS special font.
-#
-alpha *a
-beta *b
-chi *x
-delta *d
-epsilon *e
-eta *y
-gamma *g
-iota *i
-kappa *k
-lambda *l
-mu *m
-nu *n
-omega *w
-omega1 +p
-omicron *o
-phi *f
-phi1 +f
-pi *p
-psi *q
-rho *r
-sigma *s
-tau *t
-theta *h
-theta1 +h
-upsilon *u
-xi *c
-zeta *z
-sigma1 ts
diff --git a/contrib/groff/font/devps/generate/sfdtopfa.pe b/contrib/groff/font/devps/generate/sfdtopfa.pe
deleted file mode 100644
index b495458f6cf1..000000000000
--- a/contrib/groff/font/devps/generate/sfdtopfa.pe
+++ /dev/null
@@ -1,9 +0,0 @@
-# sfdtopfa.pe
-#
-# This script generates a PFA file from the master SFD using pfaedit.
-#
-# The argument is the name of the SFD without extension;
-# the PFA file is created in the current directory.
-
-Open($1:r + ".sfd");
-Generate(($1:t):r + ".pfa");
diff --git a/contrib/groff/font/devps/generate/symbol.sed b/contrib/groff/font/devps/generate/symbol.sed
deleted file mode 100644
index b4b02aba6a55..000000000000
--- a/contrib/groff/font/devps/generate/symbol.sed
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /bin/sed -f
-# Tweak the AFM file for the Symbol font.
-/^C .*[ ;]N bracketlefttp[ ;]/bx
-/^C .*[ ;]N bracketleftex[ ;]/bx
-/^C .*[ ;]N bracketleftbt[ ;]/bx
-/^C .*[ ;]N bracketrighttp[ ;]/bx
-/^C .*[ ;]N bracketrightex[ ;]/bx
-/^C .*[ ;]N bracketrightbt[ ;]/bx
-/^C .*[ ;]N bracelefttp[ ;]/bx
-/^C .*[ ;]N braceleftmid[ ;]/bx
-/^C .*[ ;]N braceleftbt[ ;]/bx
-/^C .*[ ;]N bracerighttp[ ;]/bx
-/^C .*[ ;]N bracerightmid[ ;]/bx
-/^C .*[ ;]N bracerightbt[ ;]/bx
-/^C .*[ ;]N braceex[ ;]/bx
-/^C .*[ ;]N parenleftex[ ;]/by
-/^C .*[ ;]N parenrightex[ ;]/by
-/^C .*[ ;]N parenleftbt[ ;]/bz
-/^C .*[ ;]N parenrightbt[ ;]/bz
-/^EndCharMetrics/a\
-italicCorrection integral 67\
-leftItalicCorrection integral 52\
-subscriptCorrection integral -10
-b
-:x
-s/B \([-0-9][0-9]*\) [-0-9][0-9]* \([-0-9][0-9]*\) [-0-9][0-9]*/B \1 -75 \2 925/
-b
-:y
-s/B \([-0-9][0-9]*\) [-0-9][0-9]* \([-0-9][0-9]*\) [-0-9][0-9]*/B \1 -80 \2 920/
-b
-:z
-s/B \([-0-9][0-9]*\) \([-0-9][0-9]*\) \([-0-9][0-9]*\) [-0-9][0-9]*/B \1 \2 \3 920/
-b
diff --git a/contrib/groff/font/devps/generate/symbolchars b/contrib/groff/font/devps/generate/symbolchars
deleted file mode 100644
index e43bb2c369f9..000000000000
--- a/contrib/groff/font/devps/generate/symbolchars
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# Additional predefined groff symbols for special fonts.
-#
-plus pl
-minus mi
-plusminus +-
-equal eq
-divide di
-multiply mu
-logicalnot no
-arrowup arrowverttp
-arrowdown arrowvertbt
-Alpha *A
-Beta *B
-Chi *X
-Delta *D
-Epsilon *E
-Eta *Y
-Gamma *G
-Iota *I
-Kappa *K
-Lambda *L
-Mu *M
-Nu *N
-Omega *W
-Omicron *O
-Phi *F
-Pi *P
-Psi *Q
-Rho *R
-Sigma *S
-Tau *T
-Theta *H
-Upsilon1 *U
-Xi *C
-Zeta *Z
-alpha *a
-beta *b
-chi *x
-delta *d
-epsilon *e
-uni03F5 +e
-eta *y
-gamma *g
-iota *i
-kappa *k
-lambda *l
-mu *m
-nu *n
-omega *w
-omega1 +p
-omicron *o
-phi *f
-phi1 +f
-pi *p
-psi *q
-rho *r
-sigma *s
-sigma1 ts
-tau *t
-theta *h
-theta1 +h
-upsilon *u
-xi *c
-zeta *z
diff --git a/contrib/groff/font/devps/generate/symbolsl.afm b/contrib/groff/font/devps/generate/symbolsl.afm
deleted file mode 100644
index 90939ada9697..000000000000
--- a/contrib/groff/font/devps/generate/symbolsl.afm
+++ /dev/null
@@ -1,203 +0,0 @@
-StartFontMetrics 2.0
-FontName Symbol-Slanted
-Version 001.001
-FamilyName Symbol
-ItalicAngle -15.5
-IsFixedPitch false
-UnderlineThickness 54
-Weight Medium
-UnderlinePosition -98
-FullName Symbol
-FontBBox -241 -261 1250 899
-StartCharMetrics 189
-C 32 ; WX 223 ; N space ; B 223 0 223 0 ;
-C 33 ; WX 296 ; N exclam ; B 122 -15 383 599 ;
-C 34 ; WX 635 ; N universal ; B 223 0 801 627 ;
-C 35 ; WX 445 ; N numbersign ; B 71 -15 557 599 ;
-C 36 ; WX 489 ; N existential ; B 22 0 622 629 ;
-C 37 ; WX 741 ; N percent ; B 147 -32 766 583 ;
-C 38 ; WX 692 ; N ampersand ; B 68 -16 745 589 ;
-C 39 ; WX 391 ; N suchthat ; B 44 -15 450 444 ;
-C 40 ; WX 296 ; N parenleft ; B 89 -170 449 599 ;
-C 41 ; WX 296 ; N parenright ; B -22 -170 339 600 ;
-C 42 ; WX 445 ; N asteriskmath ; B 126 119 500 490 ;
-C 43 ; WX 489 ; N plus ; B 76 0 562 474 ;
-C 44 ; WX 223 ; N comma ; B 9 -136 183 93 ;
-C 45 ; WX 489 ; N minus ; B 74 207 556 256 ;
-C 46 ; WX 223 ; N period ; B 70 -15 174 85 ;
-C 47 ; WX 247 ; N slash ; B -5 -15 405 575 ;
-C 48 ; WX 445 ; N zero ; B 90 -15 537 610 ;
-C 49 ; WX 445 ; N one ; B 107 0 451 599 ;
-C 50 ; WX 445 ; N two ; B 22 0 524 611 ;
-C 51 ; WX 445 ; N three ; B 56 -16 510 611 ;
-C 52 ; WX 445 ; N four ; B 58 0 530 610 ;
-C 53 ; WX 445 ; N five ; B 36 -15 583 610 ;
-C 54 ; WX 445 ; N six ; B 87 -16 588 610 ;
-C 55 ; WX 445 ; N seven ; B 151 -15 585 599 ;
-C 56 ; WX 445 ; N eight ; B 82 -16 536 611 ;
-C 57 ; WX 445 ; N nine ; B 52 -15 535 609 ;
-C 58 ; WX 247 ; N colon ; B 81 -15 286 409 ;
-C 59 ; WX 247 ; N semicolon ; B 33 -136 296 409 ;
-C 60 ; WX 489 ; N less ; B 87 0 610 464 ;
-C 61 ; WX 489 ; N equal ; B 49 126 586 347 ;
-C 62 ; WX 489 ; N greater ; B 23 0 547 464 ;
-C 63 ; WX 395 ; N question ; B 163 -15 517 610 ;
-C 64 ; WX 489 ; N congruent ; B 10 0 597 423 ;
-C 65 ; WX 643 ; N Alpha ; B 3 0 614 599 ;
-C 66 ; WX 594 ; N Beta ; B 26 0 645 598 ;
-C 67 ; WX 643 ; N Chi ; B -8 0 798 599 ;
-C 68 ; WX 545 ; N Delta ; B 5 0 541 612 ;
-C 69 ; WX 544 ; N Epsilon ; B 28 0 688 599 ;
-C 70 ; WX 679 ; N Phi ; B 105 0 761 598 ;
-C 71 ; WX 537 ; N Gamma ; B 31 0 714 599 ;
-C 72 ; WX 643 ; N Eta ; B 35 0 836 599 ;
-C 73 ; WX 296 ; N Iota ; B 28 0 468 599 ;
-C 74 ; WX 562 ; N theta1 ; B 108 -15 645 614 ;
-C 75 ; WX 643 ; N Kappa ; B 31 0 778 598 ;
-C 76 ; WX 611 ; N Lambda ; B 5 0 610 612 ;
-C 77 ; WX 791 ; N Mu ; B 28 0 974 599 ;
-C 78 ; WX 643 ; N Nu ; B 26 -7 827 599 ;
-C 79 ; WX 643 ; N Omicron ; B 112 -15 747 610 ;
-C 80 ; WX 684 ; N Pi ; B 22 0 847 599 ;
-C 81 ; WX 659 ; N Theta ; B 112 -15 747 610 ;
-C 82 ; WX 495 ; N Rho ; B 25 0 645 599 ;
-C 83 ; WX 527 ; N Sigma ; B 5 0 663 599 ;
-C 84 ; WX 544 ; N Tau ; B 159 0 723 599 ;
-C 85 ; WX 614 ; N Upsilon ; B 175 0 804 599 ;
-C 86 ; WX 391 ; N sigma1 ; B 78 -208 492 445 ;
-C 87 ; WX 684 ; N Omega ; B 30 0 760 612 ;
-C 88 ; WX 574 ; N Xi ; B 36 0 700 598 ;
-C 89 ; WX 708 ; N Psi ; B 188 0 885 608 ;
-C 90 ; WX 544 ; N Zeta ; B 39 0 725 599 ;
-C 91 ; WX 296 ; N bracketleft ; B 34 -138 453 599 ;
-C 92 ; WX 768 ; N therefore ; B 160 0 645 426 ;
-C 93 ; WX 296 ; N bracketright ; B -14 -138 405 599 ;
-C 94 ; WX 586 ; N perpendicular ; B 13 0 596 600 ;
-C 95 ; WX 445 ; N underscore ; B -72 -224 390 -183 ;
-C 96 ; WX 445 ; N radicalex ; B 672 784 1224 816 ;
-C 97 ; WX 562 ; N alpha ; B 84 -15 658 445 ;
-C 98 ; WX 489 ; N beta ; B -7 -198 578 659 ;
-C 99 ; WX 489 ; N chi ; B -48 -206 573 445 ;
-C 100 ; WX 440 ; N delta ; B 83 -16 571 658 ;
-C 101 ; WX 391 ; N epsilon ; B 49 -17 468 447 ;
-C 102 ; WX 464 ; N phi ; B 78 -200 517 596 ;
-C 103 ; WX 366 ; N gamma ; B 92 -200 568 444 ;
-C 104 ; WX 537 ; N eta ; B 100 -180 555 457 ;
-C 105 ; WX 293 ; N iota ; B 97 -16 296 448 ;
-C 106 ; WX 537 ; N phi1 ; B 92 -199 604 444 ;
-C 107 ; WX 489 ; N kappa ; B 106 0 621 447 ;
-C 108 ; WX 489 ; N lambda ; B 21 -16 530 658 ;
-C 109 ; WX 513 ; N mu ; B -18 -198 533 445 ;
-C 110 ; WX 464 ; N nu ; B 119 -15 548 451 ;
-C 111 ; WX 489 ; N omicron ; B 86 -17 526 444 ;
-C 112 ; WX 489 ; N pi ; B 58 -18 599 433 ;
-C 113 ; WX 464 ; N theta ; B 103 -16 554 614 ;
-C 114 ; WX 489 ; N rho ; B -19 -205 521 444 ;
-C 115 ; WX 537 ; N sigma ; B 87 -19 662 445 ;
-C 116 ; WX 391 ; N tau ; B 95 -16 511 445 ;
-C 117 ; WX 513 ; N upsilon ; B 105 -15 558 451 ;
-C 118 ; WX 635 ; N omega1 ; B 78 -15 758 519 ;
-C 119 ; WX 611 ; N omega ; B 85 -16 687 445 ;
-C 120 ; WX 439 ; N xi ; B 70 -200 515 681 ;
-C 121 ; WX 611 ; N psi ; B 141 -203 759 445 ;
-C 122 ; WX 440 ; N zeta ; B 100 -200 580 673 ;
-C 123 ; WX 427 ; N braceleft ; B 116 -163 540 599 ;
-C 124 ; WX 178 ; N bar ; B 9 -158 307 599 ;
-C 125 ; WX 427 ; N braceright ; B 19 -163 444 599 ;
-C 126 ; WX 489 ; N similar ; B 78 181 549 273 ;
-C 161 ; WX 552 ; N Upsilon1 ; B 134 0 710 609 ;
-C 162 ; WX 220 ; N minute ; B 156 408 393 654 ;
-C 163 ; WX 489 ; N lessequal ; B 26 0 645 569 ;
-C 164 ; WX 149 ; N fraction ; B -164 -11 490 603 ;
-C 165 ; WX 635 ; N infinity ; B 91 111 692 360 ;
-C 166 ; WX 445 ; N florin ; B -36 -172 614 612 ;
-C 167 ; WX 670 ; N club ; B 119 -23 645 474 ;
-C 168 ; WX 670 ; N diamond ; B 198 -32 605 490 ;
-C 169 ; WX 670 ; N heart ; B 205 -29 679 473 ;
-C 170 ; WX 670 ; N spade ; B 132 -32 604 488 ;
-C 171 ; WX 927 ; N arrowboth ; B 90 -13 980 455 ;
-C 172 ; WX 878 ; N arrowleft ; B 97 -13 915 455 ;
-C 173 ; WX 537 ; N arrowup ; B 223 0 691 810 ;
-C 174 ; WX 878 ; N arrowright ; B 105 -13 922 455 ;
-C 175 ; WX 537 ; N arrowdown ; B 104 -20 572 790 ;
-C 176 ; WX 356 ; N degree ; B 187 343 466 609 ;
-C 177 ; WX 489 ; N plusminus ; B 9 0 593 574 ;
-C 178 ; WX 366 ; N second ; B 150 408 560 656 ;
-C 179 ; WX 489 ; N greaterequal ; B 26 0 582 569 ;
-C 180 ; WX 489 ; N multiply ; B 28 7 609 466 ;
-C 181 ; WX 635 ; N proportional ; B 90 110 667 360 ;
-C 182 ; WX 440 ; N partialdiff ; B 62 -18 542 664 ;
-C 183 ; WX 409 ; N bullet ; B 118 101 454 421 ;
-C 184 ; WX 489 ; N divide ; B 74 63 558 406 ;
-C 185 ; WX 489 ; N notequal ; B 51 -22 587 489 ;
-C 186 ; WX 489 ; N equivalence ; B 35 73 602 394 ;
-C 187 ; WX 489 ; N approxequal ; B 57 120 572 351 ;
-C 188 ; WX 890 ; N ellipsis ; B 107 -15 804 85 ;
-C 189 ; WX 537 ; N arrowvertex ; B 216 -107 579 899 ;
-C 190 ; WX 890 ; N arrowhorizex ; B 8 196 1011 246 ;
-C 191 ; WX 586 ; N carriagereturn ; B 40 -14 710 560 ;
-C 192 ; WX 732 ; N aleph ; B 159 -16 740 586 ;
-C 193 ; WX 611 ; N Ifraktur ; B 26 -47 684 659 ;
-C 194 ; WX 708 ; N Rfraktur ; B 71 -13 833 653 ;
-C 195 ; WX 878 ; N weierstrass ; B 112 -188 878 510 ;
-C 196 ; WX 684 ; N circlemultiply ; B 114 -15 758 599 ;
-C 197 ; WX 684 ; N circleplus ; B 115 -13 759 601 ;
-C 198 ; WX 732 ; N emptyset ; B 38 -21 884 640 ;
-C 199 ; WX 684 ; N intersection ; B 36 0 714 453 ;
-C 200 ; WX 684 ; N union ; B 110 -15 788 438 ;
-C 201 ; WX 635 ; N propersuperset ; B 18 0 675 418 ;
-C 202 ; WX 635 ; N reflexsuperset ; B -17 -111 674 418 ;
-C 203 ; WX 635 ; N notsubset ; B 87 -62 744 481 ;
-C 204 ; WX 635 ; N propersubset ; B 87 0 744 418 ;
-C 205 ; WX 635 ; N reflexsubset ; B 16 -111 744 418 ;
-C 206 ; WX 635 ; N element ; B 93 0 579 417 ;
-C 207 ; WX 635 ; N notelement ; B 74 -52 579 494 ;
-C 208 ; WX 684 ; N angle ; B 23 0 833 599 ;
-C 209 ; WX 635 ; N gradient ; B 231 -17 805 639 ;
-C 210 ; WX 703 ; N registerserif ; B 120 -18 763 596 ;
-C 211 ; WX 703 ; N copyrightserif ; B 122 -13 766 601 ;
-C 212 ; WX 792 ; N trademarkserif ; B 169 261 947 599 ;
-C 213 ; WX 732 ; N product ; B -6 -90 920 668 ;
-C 214 ; WX 489 ; N radical ; B 134 -34 711 816 ;
-C 215 ; WX 223 ; N dotmath ; B 131 187 225 276 ;
-C 216 ; WX 635 ; N logicalnot ; B 78 0 685 256 ;
-C 217 ; WX 537 ; N logicaland ; B 21 0 519 404 ;
-C 218 ; WX 537 ; N logicalor ; B 151 0 639 424 ;
-C 219 ; WX 927 ; N arrowdblboth ; B 92 -18 978 454 ;
-C 220 ; WX 878 ; N arrowdblleft ; B 96 -13 942 457 ;
-C 221 ; WX 537 ; N arrowdblup ; B 152 2 688 811 ;
-C 222 ; WX 878 ; N arrowdblright ; B 71 -18 917 452 ;
-C 223 ; WX 537 ; N arrowdbldown ; B 103 -17 639 792 ;
-C 224 ; WX 440 ; N lozenge ; B 121 0 519 663 ;
-C 225 ; WX 293 ; N angleleft ; B 98 -176 472 664 ;
-C 226 ; WX 703 ; N registersans ; B 120 -18 763 596 ;
-C 227 ; WX 703 ; N copyrightsans ; B 120 -13 764 601 ;
-C 228 ; WX 700 ; N trademarksans ; B 179 261 832 599 ;
-C 229 ; WX 635 ; N summation ; B -15 -96 756 669 ;
-C 230 ; WX 342 ; N parenlefttp ; B -46 -261 642 824 ;
-C 231 ; WX 342 ; N parenleftex ; B 12 -76 338 823 ;
-C 232 ; WX 342 ; N parenleftbt ; B 113 -261 339 824 ;
-C 233 ; WX 342 ; N bracketlefttp ; B -22 -71 560 824 ;
-C 234 ; WX 342 ; N bracketleftex ; B -22 -70 305 823 ;
-C 235 ; WX 342 ; N bracketleftbt ; B -22 -71 306 824 ;
-C 236 ; WX 440 ; N bracelefttp ; B 158 -67 648 824 ;
-C 237 ; WX 440 ; N braceleftmid ; B 126 -76 486 832 ;
-C 238 ; WX 440 ; N braceleftbt ; B 219 -62 484 824 ;
-C 239 ; WX 440 ; N braceex ; B 157 -71 486 832 ;
-C 241 ; WX 293 ; N angleright ; B -29 -176 345 664 ;
-C 242 ; WX 244 ; N integral ; B -13 -95 499 815 ;
-C 243 ; WX 611 ; N integraltp ; B 272 -74 873 820 ;
-C 244 ; WX 611 ; N integralex ; B 271 -78 640 868 ;
-C 245 ; WX 611 ; N integralbt ; B 30 -72 625 820 ;
-C 246 ; WX 342 ; N parenrighttp ; B 273 -261 498 824 ;
-C 247 ; WX 342 ; N parenrightex ; B 331 -76 657 823 ;
-C 248 ; WX 342 ; N parenrightbt ; B -30 -261 657 824 ;
-C 249 ; WX 342 ; N bracketrighttp ; B 249 -71 577 824 ;
-C 250 ; WX 342 ; N bracketrightex ; B 250 -70 577 823 ;
-C 251 ; WX 342 ; N bracketrightbt ; B -4 -71 577 824 ;
-C 252 ; WX 440 ; N bracerighttp ; B 158 -67 425 824 ;
-C 253 ; WX 440 ; N bracerightmid ; B 155 -76 517 832 ;
-C 254 ; WX 440 ; N bracerightbt ; B -4 -62 484 824 ;
-C -1 ; WX 703 ; N apple ; B 136 -2 784 719 ;
-EndCharMetrics
-EndFontMetrics
diff --git a/contrib/groff/font/devps/generate/textmap b/contrib/groff/font/devps/generate/textmap
deleted file mode 100644
index 485705c3b2c8..000000000000
--- a/contrib/groff/font/devps/generate/textmap
+++ /dev/null
@@ -1,374 +0,0 @@
-#
-# Predefined groff symbols for textual fonts.
-#
-a a
-b b
-c c
-d d
-e e
-f f
-g g
-h h
-i i
-j j
-k k
-l l
-m m
-n n
-o o
-p p
-q q
-r r
-s s
-t t
-u u
-v v
-w w
-x x
-y y
-z z
-A A
-B B
-C C
-D D
-E E
-F F
-G G
-H H
-I I
-J J
-K K
-L L
-M M
-N N
-O O
-P P
-Q Q
-R R
-S S
-T T
-U U
-V V
-W W
-X X
-Y Y
-Z Z
-AE AE
-Aacute 'A
-Acircumflex ^A
-Adieresis :A
-Agrave `A
-Aring oA
-Atilde ~A
-Cacute 'C
-Ccedilla ,C
-Eacute 'E
-Ecircumflex ^E
-Edieresis :E
-Egrave `E
-Eth -D
-Euro Eu
-IJ IJ
-Iacute 'I
-Icircumflex ^I
-Idieresis :I
-Ifraktur Im
-Igrave `I
-Lslash /L
-Ntilde ~N
-OE OE
-Oacute 'O
-Ocircumflex ^O
-Odieresis :O
-Ograve `O
-Oslash /O
-Otilde ~O
-Rfraktur Re
-Scaron vS
-Thorn TP
-Uacute 'U
-Ucircumflex ^U
-Udieresis :U
-Ugrave `U
-Yacute 'Y
-Ydieresis :Y
-Zcaron vZ
-a14 rh
-aacute 'a
-acircumflex ^a
-acute aa
-adieresis :a
-ae ae
-agrave `a
-angle /_
-angleleft la
-angleright ra
-aleph Ah
-ampersand &
-approxequal ~~
-aring oa
-arrowboth <>
-arrowdblboth hA
-arrowdbldown dA
-arrowdblleft lA
-arrowdblright rA
-arrowdblup uA
-arrowdown da
-arrowleft <-
-arrowright ->
-arrowup ua
-arrowupdn va
-asciicircum ha
-asciitilde ti
-asterisk *
-asteriskmath **
-at @
-at at
-atilde ~a
-backslash \
-backslash rs
-bar ba
-bar |
-braceleft lC
-braceleft {
-braceright rC
-braceright }
-bracketleft [
-bracketleft lB
-bracketright ]
-bracketright rB
-breve ab
-brokenbar bb
-bullet bu
-cacute 'c
-caron ah
-ccedilla ,c
-cedilla ac
-cent ct
-checkmark OK
-circle ci
-circlemultiply c*
-circleplus c+
-circumflex a^
-circumflex ^
-colon :
-comma ,
-congruent =~
-copyright co
-currency Cs
-dagger dg
-daggerdbl dd
-degree de
-dieresis ad
-dollar $
-dollar Do
-dotaccent a.
-dotlessi .i
-dotlessj .j
-dotmath md
-eacute 'e
-ecircumflex ^e
-edieresis :e
-egrave `e
-eight 8
-element mo
-emdash em
-emptyset es
-endash en
-equal =
-equivalence ==
-eth Sd
-exclam !
-exclamdown r!
-existential te
-ff ff
-ffi Fi
-ffl Fl
-fi fi
-five 5
-fiveeighths 58
-fl fl
-florin Fn
-four 4
-germandbls ss
-gradient gr
-grave ga
-greater >
-greaterequal >=
-guillemotleft Fo
-guillemotright Fc
-guilsinglleft fo
-guilsinglright fc
-hungarumlaut a"
-hyphen -
-hyphen hy
-iacute 'i
-icircumflex ^i
-idieresis :i
-igrave `i
-ij ij
-infinity if
-integral is
-integral integral
-# the next line overrides the (old) PUA value of the AGL
-integralex u23AE
-intersection ca
-less <
-lessequal <=
-logicaland AN
-logicalnot tno
-logicalor OR
-lozenge lz
-lslash /l
-macron a-
-minus \-
-minute fm
-mu mc
-nine 9
-notelement nm
-notequal !=
-notsubset nb
-ntilde ~n
-numbersign #
-numbersign sh
-oacute 'o
-ocircumflex ^o
-odieresis :o
-oe oe
-ogonek ho
-ograve `o
-one 1
-oneeighth 18
-onehalf 12
-onequarter 14
-onesuperior S1
-ordfeminine Of
-ordmasculine Om
-oslash /o
-otilde ~o
-paragraph ps
-parenleft (
-parenright )
-partialdiff pd
-percent %
-period .
-periodcentered pc
-perthousand %0
-perpendicular pp
-plus +
-propersubset sb
-propersuperset sp
-proportional pt
-question ?
-questiondown r?
-quotedbl "
-quotedbl dq
-quotedblbase Bq
-quotedblleft lq
-quotedblright rq
-quoteleft `
-quoteleft oq
-quoteright '
-quoteright cq
-quotesingle aq
-quotesinglbase bq
-reflexsubset ib
-reflexsuperset ip
-registered rg
-ring ao
-scaron vs
-second sd
-section sc
-semicolon ;
-seven 7
-seveneighths 78
-similar ap
-six 6
-slash /
-slash sl
-sterling Po
-therefore 3d
-therefore tf
-thorn Tp
-three 3
-threeeighths 38
-threequarters 34
-threesuperior S3
-tilde a~
-tilde ~
-trademark tm
-two 2
-twosuperior S2
-uacute 'u
-ucircumflex ^u
-udieresis :u
-ugrave `u
-underscore _
-uni210F -h
-uni210F hbar
-uni2210 coproduct
-uni2213 -+
-uni2243 |=
-uni2262 ne
-uni2285 nc
-uni25A1 sq
-uni261C lh
-union cu
-universal fa
-weierstrass wp
-yacute 'y
-ydieresis :y
-yen Ye
-zcaron vz
-zero 0
-fraction f/
-club CL
-diamond DI
-heart HE
-spade SP
-carriagereturn CR
-suchthat st
-bracelefttp bracelefttp
-braceleftmid braceleftmid
-braceleftbt braceleftbt
-braceex braceex
-braceex bracerightex
-braceex braceleftex
-braceex barex
-bracerighttp bracerighttp
-bracerightmid bracerightmid
-bracerightbt bracerightbt
-parenlefttp parenlefttp
-parenleftbt parenleftbt
-parenleftex parenleftex
-parenrighttp parenrighttp
-parenrightbt parenrightbt
-parenrightex parenrightex
-bracketlefttp bracketlefttp
-bracketleftbt bracketleftbt
-bracketleftex bracketleftex
-bracketrighttp bracketrighttp
-bracketrightbt bracketrightbt
-bracketrightex bracketrightex
-radical sr
-radical sqrt
-radicalex radicalex
-approxequal ~=
-bracketlefttp lc
-bracketleftbt lf
-bracketrighttp rc
-bracketrightbt rf
-bracelefttp lt
-braceleftmid lk
-braceleftbt lb
-braceex bv
-bracerighttp rt
-bracerightmid rk
-bracerightbt rb
-summation sum
-product product
-arrowvertex arrowvertex
-arrowhorizex an
-multiply tmu
-divide tdi
-plusminus t+-
diff --git a/contrib/groff/font/devps/prologue.ps b/contrib/groff/font/devps/prologue.ps
deleted file mode 100644
index 1ec2df775f7f..000000000000
--- a/contrib/groff/font/devps/prologue.ps
+++ /dev/null
@@ -1,255 +0,0 @@
-%!PS-Adobe-3.0 Resource-ProcSet
-
-/setpacking where {
- pop
- currentpacking
- true setpacking
-} if
-
-/grops 120 dict dup begin
-
-% The ASCII code of the space character.
-/SC 32 def
-
-/A /show load def
-/B { 0 SC 3 -1 roll widthshow } bind def
-/C { 0 exch ashow } bind def
-/D { 0 exch 0 SC 5 2 roll awidthshow } bind def
-/E { 0 rmoveto show } bind def
-/F { 0 rmoveto 0 SC 3 -1 roll widthshow } bind def
-/G { 0 rmoveto 0 exch ashow } bind def
-/H { 0 rmoveto 0 exch 0 SC 5 2 roll awidthshow } bind def
-/I { 0 exch rmoveto show } bind def
-/J { 0 exch rmoveto 0 SC 3 -1 roll widthshow } bind def
-/K { 0 exch rmoveto 0 exch ashow } bind def
-/L { 0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow } bind def
-/M { rmoveto show } bind def
-/N { rmoveto 0 SC 3 -1 roll widthshow } bind def
-/O { rmoveto 0 exch ashow } bind def
-/P { rmoveto 0 exch 0 SC 5 2 roll awidthshow } bind def
-/Q { moveto show } bind def
-/R { moveto 0 SC 3 -1 roll widthshow } bind def
-/S { moveto 0 exch ashow } bind def
-/T { moveto 0 exch 0 SC 5 2 roll awidthshow } bind def
-
-% name size font SF -
-
-/SF {
- findfont exch
- [ exch dup 0 exch 0 exch neg 0 0 ] makefont
- dup setfont
- [ exch /setfont cvx ] cvx bind def
-} bind def
-
-% name a c d font MF -
-
-/MF {
- findfont
- [ 5 2 roll
- 0 3 1 roll % b
- neg 0 0 ] makefont
- dup setfont
- [ exch /setfont cvx ] cvx bind def
-} bind def
-
-/level0 0 def
-/RES 0 def
-/PL 0 def
-/LS 0 def
-
-% Enable manual feed.
-% MANUAL -
-
-/MANUAL {
- statusdict begin /manualfeed true store end
-} bind def
-
-% Guess the page length.
-% This assumes that the imageable area is vertically centered on the page.
-% PLG - length
-
-/PLG {
- gsave newpath clippath pathbbox grestore
- exch pop add exch pop
-} bind def
-
-% BP -
-
-/BP {
- /level0 save def
- 1 setlinecap
- 1 setlinejoin
- 72 RES div dup scale
- LS {
- 90 rotate
- } {
- 0 PL translate
- } ifelse
- 1 -1 scale
-} bind def
-
-/EP {
- level0 restore
- showpage
-} def
-
-
-% centerx centery radius startangle endangle DA -
-
-/DA {
- newpath arcn stroke
-} bind def
-
-% x y SN - x' y'
-% round a position to nearest (pixel + (.25,.25))
-
-/SN {
- transform
- .25 sub exch .25 sub exch
- round .25 add exch round .25 add exch
- itransform
-} bind def
-
-% endx endy startx starty DL -
-% we round the endpoints of the line, so that parallel horizontal
-% and vertical lines will appear even
-
-/DL {
- SN
- moveto
- SN
- lineto stroke
-} bind def
-
-% centerx centery radius DC -
-
-/DC {
- newpath 0 360 arc closepath
-} bind def
-
-
-/TM matrix def
-
-% width height centerx centery DE -
-
-/DE {
- TM currentmatrix pop
- translate scale newpath 0 0 .5 0 360 arc closepath
- TM setmatrix
-} bind def
-
-% these are for splines
-
-/RC /rcurveto load def
-/RL /rlineto load def
-/ST /stroke load def
-/MT /moveto load def
-/CL /closepath load def
-
-% fill the last path
-
-% r g b Fr -
-
-/Fr {
- setrgbcolor fill
-} bind def
-
-% c m y k Fk -
-
-/setcmykcolor where {
- pop
- /Fk {
- setcmykcolor fill
- } bind def
-} if
-
-% g Fg -
-
-/Fg {
- setgray fill
-} bind def
-
-% fill with the ``current color''
-
-/FL /fill load def
-
-/LW /setlinewidth load def
-
-/Cr /setrgbcolor load def
-/setcmykcolor where {
- pop
- /Ck /setcmykcolor load def
-} if
-/Cg /setgray load def
-
-% new_font_name encoding_vector old_font_name RE -
-
-/RE {
- findfont
- dup maxlength 1 index /FontName known not { 1 add } if dict begin
- {
- 1 index /FID ne { def } { pop pop } ifelse
- } forall
- /Encoding exch def
- dup /FontName exch def
- currentdict end definefont pop
-} bind def
-
-/DEFS 0 def
-
-% hpos vpos EBEGIN -
-
-/EBEGIN {
- moveto
- DEFS begin
-} bind def
-
-/EEND /end load def
-
-/CNT 0 def
-/level1 0 def
-
-% llx lly newwid wid newht ht newllx newlly PBEGIN -
-
-/PBEGIN {
- /level1 save def
- translate
- div 3 1 roll div exch scale
- neg exch neg exch translate
- % set the graphics state to default values
- 0 setgray
- 0 setlinecap
- 1 setlinewidth
- 0 setlinejoin
- 10 setmiterlimit
- [] 0 setdash
- /setstrokeadjust where {
- pop
- false setstrokeadjust
- } if
- /setoverprint where {
- pop
- false setoverprint
- } if
- newpath
- /CNT countdictstack def
- userdict begin
- /showpage {} def
- %
- % Any included setpagedevice should be ignored.
- % See: http://www.w-beer.de/doc/ps/.
- %
- /setpagedevice {} def
-} bind def
-
-/PEND {
- countdictstack CNT sub { end } repeat
- level1 restore
-} bind def
-
-end def
-
-/setpacking where {
- pop
- setpacking
-} if
diff --git a/contrib/groff/font/devps/psstrip.sed b/contrib/groff/font/devps/psstrip.sed
deleted file mode 100644
index 3e61775af778..000000000000
--- a/contrib/groff/font/devps/psstrip.sed
+++ /dev/null
@@ -1,7 +0,0 @@
-/^%[%!]/b
-s/%.*//
-s/^[ ][ ]*//
-s/[ ][ ]*$//
-/^$/d
-s|[ ]*\([][}{/]\)|\1|g
-s|\([][}{/]\)[ ]*|\1|g
diff --git a/contrib/groff/font/devps/symbol.afm b/contrib/groff/font/devps/symbol.afm
deleted file mode 100644
index 33cba6a487ff..000000000000
--- a/contrib/groff/font/devps/symbol.afm
+++ /dev/null
@@ -1,212 +0,0 @@
-StartFontMetrics 2.0
-Comment Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.
-Comment Creation Date: Wed Jan 17 21:48:26 1990
-Comment UniqueID 27004
-Comment VMusage 28489 37622
-FontName Symbol
-FullName Symbol
-FamilyName Symbol
-Weight Medium
-ItalicAngle 0
-IsFixedPitch false
-FontBBox -180 -293 1090 1010
-UnderlinePosition -98
-UnderlineThickness 54
-Version 001.007
-Notice Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.
-EncodingScheme FontSpecific
-StartCharMetrics 189
-C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ;
-C 34 ; WX 713 ; N universal ; B 31 0 681 705 ;
-C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ;
-C 36 ; WX 549 ; N existential ; B 25 0 478 707 ;
-C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ;
-C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ;
-C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ;
-C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ;
-C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ;
-C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ;
-C 43 ; WX 549 ; N plus ; B 10 0 539 533 ;
-C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ;
-C 45 ; WX 549 ; N minus ; B 11 233 535 288 ;
-C 46 ; WX 250 ; N period ; B 69 -17 181 95 ;
-C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ;
-C 48 ; WX 500 ; N zero ; B 23 -17 471 685 ;
-C 49 ; WX 500 ; N one ; B 117 0 390 673 ;
-C 50 ; WX 500 ; N two ; B 25 0 475 686 ;
-C 51 ; WX 500 ; N three ; B 39 -17 435 685 ;
-C 52 ; WX 500 ; N four ; B 16 0 469 685 ;
-C 53 ; WX 500 ; N five ; B 29 -17 443 685 ;
-C 54 ; WX 500 ; N six ; B 36 -17 467 685 ;
-C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ;
-C 56 ; WX 500 ; N eight ; B 54 -18 440 685 ;
-C 57 ; WX 500 ; N nine ; B 31 -18 460 685 ;
-C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ;
-C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ;
-C 60 ; WX 549 ; N less ; B 26 0 523 522 ;
-C 61 ; WX 549 ; N equal ; B 11 141 537 390 ;
-C 62 ; WX 549 ; N greater ; B 26 0 523 522 ;
-C 63 ; WX 444 ; N question ; B 70 -17 412 686 ;
-C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;
-C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;
-C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;
-C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;
-C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;
-C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;
-C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;
-C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;
-C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;
-C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;
-C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ;
-C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;
-C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;
-C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;
-C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ;
-C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ;
-C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;
-C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ;
-C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;
-C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;
-C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;
-C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;
-C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ;
-C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ;
-C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;
-C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ;
-C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;
-C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ;
-C 92 ; WX 863 ; N therefore ; B 163 0 701 478 ;
-C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ;
-C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ;
-C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ;
-C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ;
-C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ;
-C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ;
-C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ;
-C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ;
-C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ;
-C 102 ; WX 521 ; N phi ; B 27 -224 490 671 ;
-C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ;
-C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ;
-C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ;
-C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ;
-C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ;
-C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ;
-C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ;
-C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ;
-C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ;
-C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ;
-C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ;
-C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ;
-C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ;
-C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ;
-C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ;
-C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ;
-C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ;
-C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ;
-C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ;
-C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ;
-C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ;
-C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ;
-C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ;
-C 126 ; WX 549 ; N similar ; B 17 203 529 307 ;
-C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ;
-C 162 ; WX 247 ; N minute ; B 27 459 228 735 ;
-C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
-C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ;
-C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ;
-C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ;
-C 167 ; WX 753 ; N club ; B 86 -26 660 533 ;
-C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;
-C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ;
-C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ;
-C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ;
-C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;
-C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;
-C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;
-C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;
-C 176 ; WX 400 ; N degree ; B 50 385 350 685 ;
-C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ;
-C 178 ; WX 411 ; N second ; B 20 459 413 737 ;
-C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
-C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ;
-C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ;
-C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ;
-C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ;
-C 184 ; WX 549 ; N divide ; B 10 71 536 456 ;
-C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;
-C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ;
-C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ;
-C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ;
-C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;
-C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;
-C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;
-C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ;
-C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ;
-C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ;
-C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ;
-C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ;
-C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ;
-C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ;
-C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ;
-C 200 ; WX 768 ; N union ; B 40 -17 732 492 ;
-C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;
-C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;
-C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;
-C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;
-C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;
-C 206 ; WX 713 ; N element ; B 45 0 505 468 ;
-C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;
-C 208 ; WX 768 ; N angle ; B 26 0 738 673 ;
-C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ;
-C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ;
-C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ;
-C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ;
-C 213 ; WX 823 ; N product ; B 25 -101 803 751 ;
-C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ;
-C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ;
-C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ;
-C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ;
-C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ;
-C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ;
-C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ;
-C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ;
-C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ;
-C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ;
-C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ;
-C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ;
-C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ;
-C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ;
-C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ;
-C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ;
-C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ;
-C 231 ; WX 384 ; N parenleftex ; B 40 -80 92 920 ;
-C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 920 ;
-C 233 ; WX 384 ; N bracketlefttp ; B 0 -75 341 925 ;
-C 234 ; WX 384 ; N bracketleftex ; B 0 -75 55 925 ;
-C 235 ; WX 384 ; N bracketleftbt ; B 0 -75 340 925 ;
-C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 925 ;
-C 237 ; WX 494 ; N braceleftmid ; B 14 -75 255 925 ;
-C 238 ; WX 494 ; N braceleftbt ; B 201 -75 439 925 ;
-C 239 ; WX 494 ; N braceex ; B 201 -75 255 925 ;
-C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ;
-C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;
-C 243 ; WX 686 ; N integraltp ; B 332 -83 715 921 ;
-C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ;
-C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ;
-C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ;
-C 247 ; WX 384 ; N parenrightex ; B 398 -80 450 920 ;
-C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 920 ;
-C 249 ; WX 384 ; N bracketrighttp ; B 22 -75 360 925 ;
-C 250 ; WX 384 ; N bracketrightex ; B 305 -75 360 925 ;
-C 251 ; WX 384 ; N bracketrightbt ; B 20 -75 360 925 ;
-C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 925 ;
-C 253 ; WX 494 ; N bracerightmid ; B 201 -75 442 925 ;
-C 254 ; WX 494 ; N bracerightbt ; B 17 -75 255 925 ;
-C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ;
-EndCharMetrics
-italicCorrection integral 67
-leftItalicCorrection integral 52
-subscriptCorrection integral -10
-EndFontMetrics
diff --git a/contrib/groff/font/devps/symbolmap b/contrib/groff/font/devps/symbolmap
deleted file mode 100644
index ac2b5bf2f795..000000000000
--- a/contrib/groff/font/devps/symbolmap
+++ /dev/null
@@ -1,442 +0,0 @@
-#
-# This is a list of all predefined groff symbols.
-#
-#
-# Predefined groff symbols for textual fonts.
-#
-a a
-b b
-c c
-d d
-e e
-f f
-g g
-h h
-i i
-j j
-k k
-l l
-m m
-n n
-o o
-p p
-q q
-r r
-s s
-t t
-u u
-v v
-w w
-x x
-y y
-z z
-A A
-B B
-C C
-D D
-E E
-F F
-G G
-H H
-I I
-J J
-K K
-L L
-M M
-N N
-O O
-P P
-Q Q
-R R
-S S
-T T
-U U
-V V
-W W
-X X
-Y Y
-Z Z
-AE AE
-Aacute 'A
-Acircumflex ^A
-Adieresis :A
-Agrave `A
-Aring oA
-Atilde ~A
-Cacute 'C
-Ccedilla ,C
-Eacute 'E
-Ecircumflex ^E
-Edieresis :E
-Egrave `E
-Eth -D
-Euro Eu
-IJ IJ
-Iacute 'I
-Icircumflex ^I
-Idieresis :I
-Ifraktur Im
-Igrave `I
-Lslash /L
-Ntilde ~N
-OE OE
-Oacute 'O
-Ocircumflex ^O
-Odieresis :O
-Ograve `O
-Oslash /O
-Otilde ~O
-Rfraktur Re
-Scaron vS
-Thorn TP
-Uacute 'U
-Ucircumflex ^U
-Udieresis :U
-Ugrave `U
-Yacute 'Y
-Ydieresis :Y
-Zcaron vZ
-a14 rh
-aacute 'a
-acircumflex ^a
-acute aa
-adieresis :a
-ae ae
-agrave `a
-angle /_
-angleleft la
-angleright ra
-aleph Ah
-ampersand &
-approxequal ~~
-aring oa
-arrowboth <>
-arrowdblboth hA
-arrowdbldown dA
-arrowdblleft lA
-arrowdblright rA
-arrowdblup uA
-arrowdown da
-arrowleft <-
-arrowright ->
-arrowup ua
-arrowupdn va
-asciicircum ha
-asciitilde ti
-asterisk *
-asteriskmath **
-at @
-at at
-atilde ~a
-backslash \
-backslash rs
-bar ba
-bar |
-braceleft lC
-braceleft {
-braceright rC
-braceright }
-bracketleft [
-bracketleft lB
-bracketright ]
-bracketright rB
-breve ab
-brokenbar bb
-bullet bu
-cacute 'c
-caron ah
-ccedilla ,c
-cedilla ac
-cent ct
-checkmark OK
-circle ci
-circlemultiply c*
-circleplus c+
-circumflex a^
-circumflex ^
-colon :
-comma ,
-congruent =~
-copyright co
-currency Cs
-dagger dg
-daggerdbl dd
-degree de
-dieresis ad
-dollar $
-dollar Do
-dotaccent a.
-dotlessi .i
-dotlessj .j
-dotmath md
-eacute 'e
-ecircumflex ^e
-edieresis :e
-egrave `e
-eight 8
-element mo
-emdash em
-emptyset es
-endash en
-equal =
-equivalence ==
-eth Sd
-exclam !
-exclamdown r!
-existential te
-ff ff
-ffi Fi
-ffl Fl
-fi fi
-five 5
-fiveeighths 58
-fl fl
-florin Fn
-four 4
-germandbls ss
-gradient gr
-grave ga
-greater >
-greaterequal >=
-guillemotleft Fo
-guillemotright Fc
-guilsinglleft fo
-guilsinglright fc
-hungarumlaut a"
-hyphen -
-hyphen hy
-iacute 'i
-icircumflex ^i
-idieresis :i
-igrave `i
-ij ij
-infinity if
-integral is
-integral integral
-# the next line overrides the (old) PUA value of the AGL
-integralex u23AE
-intersection ca
-less <
-lessequal <=
-logicaland AN
-logicalnot tno
-logicalor OR
-lozenge lz
-lslash /l
-macron a-
-minus \-
-minute fm
-mu mc
-nine 9
-notelement nm
-notequal !=
-notsubset nb
-ntilde ~n
-numbersign #
-numbersign sh
-oacute 'o
-ocircumflex ^o
-odieresis :o
-oe oe
-ogonek ho
-ograve `o
-one 1
-oneeighth 18
-onehalf 12
-onequarter 14
-onesuperior S1
-ordfeminine Of
-ordmasculine Om
-oslash /o
-otilde ~o
-paragraph ps
-parenleft (
-parenright )
-partialdiff pd
-percent %
-period .
-periodcentered pc
-perthousand %0
-perpendicular pp
-plus +
-propersubset sb
-propersuperset sp
-proportional pt
-question ?
-questiondown r?
-quotedbl "
-quotedbl dq
-quotedblbase Bq
-quotedblleft lq
-quotedblright rq
-quoteleft `
-quoteleft oq
-quoteright '
-quoteright cq
-quotesingle aq
-quotesinglbase bq
-reflexsubset ib
-reflexsuperset ip
-registered rg
-ring ao
-scaron vs
-second sd
-section sc
-semicolon ;
-seven 7
-seveneighths 78
-similar ap
-six 6
-slash /
-slash sl
-sterling Po
-therefore 3d
-therefore tf
-thorn Tp
-three 3
-threeeighths 38
-threequarters 34
-threesuperior S3
-tilde a~
-tilde ~
-trademark tm
-two 2
-twosuperior S2
-uacute 'u
-ucircumflex ^u
-udieresis :u
-ugrave `u
-underscore _
-uni210F -h
-uni210F hbar
-uni2210 coproduct
-uni2213 -+
-uni2243 |=
-uni2262 ne
-uni2285 nc
-uni25A1 sq
-uni261C lh
-union cu
-universal fa
-weierstrass wp
-yacute 'y
-ydieresis :y
-yen Ye
-zcaron vz
-zero 0
-fraction f/
-club CL
-diamond DI
-heart HE
-spade SP
-carriagereturn CR
-suchthat st
-bracelefttp bracelefttp
-braceleftmid braceleftmid
-braceleftbt braceleftbt
-braceex braceex
-braceex bracerightex
-braceex braceleftex
-braceex barex
-bracerighttp bracerighttp
-bracerightmid bracerightmid
-bracerightbt bracerightbt
-parenlefttp parenlefttp
-parenleftbt parenleftbt
-parenleftex parenleftex
-parenrighttp parenrighttp
-parenrightbt parenrightbt
-parenrightex parenrightex
-bracketlefttp bracketlefttp
-bracketleftbt bracketleftbt
-bracketleftex bracketleftex
-bracketrighttp bracketrighttp
-bracketrightbt bracketrightbt
-bracketrightex bracketrightex
-radical sr
-radical sqrt
-radicalex radicalex
-approxequal ~=
-bracketlefttp lc
-bracketleftbt lf
-bracketrighttp rc
-bracketrightbt rf
-bracelefttp lt
-braceleftmid lk
-braceleftbt lb
-braceex bv
-bracerighttp rt
-bracerightmid rk
-bracerightbt rb
-summation sum
-product product
-arrowvertex arrowvertex
-arrowhorizex an
-multiply tmu
-divide tdi
-plusminus t+-
-#
-# Additional predefined groff symbols for special fonts.
-#
-plus pl
-minus mi
-plusminus +-
-equal eq
-divide di
-multiply mu
-logicalnot no
-arrowup arrowverttp
-arrowdown arrowvertbt
-Alpha *A
-Beta *B
-Chi *X
-Delta *D
-Epsilon *E
-Eta *Y
-Gamma *G
-Iota *I
-Kappa *K
-Lambda *L
-Mu *M
-Nu *N
-Omega *W
-Omicron *O
-Phi *F
-Pi *P
-Psi *Q
-Rho *R
-Sigma *S
-Tau *T
-Theta *H
-Upsilon1 *U
-Xi *C
-Zeta *Z
-alpha *a
-beta *b
-chi *x
-delta *d
-epsilon *e
-uni03F5 +e
-eta *y
-gamma *g
-iota *i
-kappa *k
-lambda *l
-mu *m
-nu *n
-omega *w
-omega1 +p
-omicron *o
-phi *f
-phi1 +f
-pi *p
-psi *q
-rho *r
-sigma *s
-sigma1 ts
-tau *t
-theta *h
-theta1 +h
-upsilon *u
-xi *c
-zeta *z
diff --git a/contrib/groff/font/devps/symbolsl.ps b/contrib/groff/font/devps/symbolsl.ps
deleted file mode 100644
index d384203e2c77..000000000000
--- a/contrib/groff/font/devps/symbolsl.ps
+++ /dev/null
@@ -1,41 +0,0 @@
-%!PS-Adobe-3.0 Resource-Font
-%%DocumentNeededResources: font Symbol
-
-% newfontname matrix oldfontname MakeTransformedFont
-
-/MakeTransformedFont {
- findfont dup maxlength dict begin
- {
- exch dup dup /FID ne exch /UniqueID ne and {
- exch def
- } {
- pop pop
- } ifelse
- } forall
- % first copy FontBBox
- /FontBBox
- % FontBBox sometimes seems to have the executable
- % attribute set
- % so to get the array on the stack, we have to do this
- currentdict /FontBBox get
- 4 array copy def
- % now transform it
- FontBBox aload pop
- 4 index transform 4 2 roll
- 4 index transform 4 2 roll
- FontBBox astore pop
- % matrix
- % now transform FontMatrix
- FontMatrix exch matrix concatmatrix
- /FontMatrix exch def
- dup /FontName exch def
- currentdict end
- definefont pop
-} bind def
-
-%%IncludeResource: font Symbol
-
-/Symbol-Slanted
-[.89 0.0 15.5 dup sin exch cos div .89 0.0 0.0]
-/Symbol
-MakeTransformedFont
diff --git a/contrib/groff/font/devps/text.enc b/contrib/groff/font/devps/text.enc
deleted file mode 100644
index b915736e7ce9..000000000000
--- a/contrib/groff/font/devps/text.enc
+++ /dev/null
@@ -1,236 +0,0 @@
-#
-# This is the font encoding used by grops to encode the standard PS text
-# fonts (excluding special fonts).
-#
-asciicircum 0
-asciitilde 1
-Scaron 2
-Zcaron 3
-scaron 4
-zcaron 5
-Ydieresis 6
-trademark 7
-quotesingle 8
-Euro 9
-space 32
-exclam 33
-quotedbl 34
-numbersign 35
-dollar 36
-percent 37
-ampersand 38
-quoteright 39
-parenleft 40
-parenright 41
-asterisk 42
-plus 43
-comma 44
-hyphen 45
-period 46
-slash 47
-zero 48
-one 49
-two 50
-three 51
-four 52
-five 53
-six 54
-seven 55
-eight 56
-nine 57
-colon 58
-semicolon 59
-less 60
-equal 61
-greater 62
-question 63
-at 64
-A 65
-B 66
-C 67
-D 68
-E 69
-F 70
-G 71
-H 72
-I 73
-J 74
-K 75
-L 76
-M 77
-N 78
-O 79
-P 80
-Q 81
-R 82
-S 83
-T 84
-U 85
-V 86
-W 87
-X 88
-Y 89
-Z 90
-bracketleft 91
-backslash 92
-bracketright 93
-circumflex 94
-underscore 95
-quoteleft 96
-a 97
-b 98
-c 99
-d 100
-e 101
-f 102
-g 103
-h 104
-i 105
-j 106
-k 107
-l 108
-m 109
-n 110
-o 111
-p 112
-q 113
-r 114
-s 115
-t 116
-u 117
-v 118
-w 119
-x 120
-y 121
-z 122
-braceleft 123
-bar 124
-braceright 125
-tilde 126
-quotesinglbase 128
-guillemotleft 129
-guillemotright 130
-bullet 131
-florin 132
-fraction 133
-perthousand 134
-dagger 135
-daggerdbl 136
-endash 137
-emdash 138
-ff 139
-fi 140
-fl 141
-ffi 142
-ffl 143
-dotlessi 144
-dotlessj 145
-grave 146
-hungarumlaut 147
-dotaccent 148
-breve 149
-caron 150
-ring 151
-ogonek 152
-quotedblleft 153
-quotedblright 154
-oe 155
-lslash 156
-quotedblbase 157
-OE 158
-Lslash 159
-exclamdown 161
-cent 162
-sterling 163
-currency 164
-yen 165
-brokenbar 166
-section 167
-dieresis 168
-copyright 169
-ordfeminine 170
-guilsinglleft 171
-logicalnot 172
-minus 173
-registered 174
-macron 175
-degree 176
-plusminus 177
-twosuperior 178
-threesuperior 179
-acute 180
-mu 181
-paragraph 182
-periodcentered 183
-cedilla 184
-onesuperior 185
-ordmasculine 186
-guilsinglright 187
-onequarter 188
-onehalf 189
-threequarters 190
-questiondown 191
-Agrave 192
-Aacute 193
-Acircumflex 194
-Atilde 195
-Adieresis 196
-Aring 197
-AE 198
-Ccedilla 199
-Egrave 200
-Eacute 201
-Ecircumflex 202
-Edieresis 203
-Igrave 204
-Iacute 205
-Icircumflex 206
-Idieresis 207
-Eth 208
-Ntilde 209
-Ograve 210
-Oacute 211
-Ocircumflex 212
-Otilde 213
-Odieresis 214
-multiply 215
-Oslash 216
-Ugrave 217
-Uacute 218
-Ucircumflex 219
-Udieresis 220
-Yacute 221
-Thorn 222
-germandbls 223
-agrave 224
-aacute 225
-acircumflex 226
-atilde 227
-adieresis 228
-aring 229
-ae 230
-ccedilla 231
-egrave 232
-eacute 233
-ecircumflex 234
-edieresis 235
-igrave 236
-iacute 237
-icircumflex 238
-idieresis 239
-eth 240
-ntilde 241
-ograve 242
-oacute 243
-ocircumflex 244
-otilde 245
-odieresis 246
-divide 247
-oslash 248
-ugrave 249
-uacute 250
-ucircumflex 251
-udieresis 252
-yacute 253
-thorn 254
-ydieresis 255
diff --git a/contrib/groff/font/devps/zapfdr.afm b/contrib/groff/font/devps/zapfdr.afm
deleted file mode 100644
index ce216de44a6f..000000000000
--- a/contrib/groff/font/devps/zapfdr.afm
+++ /dev/null
@@ -1,222 +0,0 @@
-StartFontMetrics 2.0
-Comment Copyright (c) 1985, 1987, 1988, 1989 Adobe Systems Incorporated. All rights reserved.
-Comment Creation Date: Fri Dec 1 12:57:42 1989
-Comment UniqueID 26200
-Comment VMusage 39281 49041
-FontName ZapfDingbats-Reverse
-FullName ITC Zapf Dingbats
-FamilyName ITC Zapf Dingbats
-Weight Medium
-ItalicAngle 0
-IsFixedPitch false
-FontBBox -1 -143 981 820
-UnderlinePosition -98
-UnderlineThickness 54
-Version 001.004
-Notice Copyright (c) 1985, 1987, 1988, 1989 Adobe Systems Incorporated. All rights reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.
-EncodingScheme FontSpecific
-StartCharMetrics 202
-C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;
-C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
-C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;
-C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;
-C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;
-C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;
-C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;
-C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
-C 41 ; WX 690 ; N a117 ; B 35 138 655 553 ;
-C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;
-C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;
-C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;
-C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;
-C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;
-C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;
-C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;
-C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;
-C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;
-C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;
-C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;
-C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
-C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
-C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;
-C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;
-C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;
-C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;
-C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;
-C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;
-C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;
-C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;
-C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;
-C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;
-C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;
-C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;
-C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;
-C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
-C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;
-C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
-C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;
-C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;
-C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;
-C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;
-C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;
-C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;
-C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;
-C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
-C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;
-C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;
-C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;
-C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;
-C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;
-C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;
-C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
-C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;
-C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;
-C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
-C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;
-C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;
-C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;
-C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;
-C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;
-C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;
-C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;
-C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;
-C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;
-C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;
-C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;
-C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;
-C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;
-C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;
-C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;
-C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;
-C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;
-C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;
-C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;
-C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;
-C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;
-C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;
-C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;
-C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;
-C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;
-C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;
-C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;
-C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;
-C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
-C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
-C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
-C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;
-C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;
-C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;
-C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
-C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;
-C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;
-C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;
-C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;
-C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;
-C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;
-C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
-C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;
-C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;
-C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;
-C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
-C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
-C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;
-C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
-C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;
-C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;
-C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;
-C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
-C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;
-C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;
-C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;
-C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;
-C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;
-C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;
-C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;
-C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;
-C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;
-C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;
-C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;
-C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;
-C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;
-C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;
-C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;
-C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;
-C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;
-C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;
-C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;
-C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;
-C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;
-C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;
-C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;
-C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;
-C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;
-C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;
-C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;
-C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;
-C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;
-C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;
-C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;
-C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;
-C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;
-C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;
-C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;
-C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;
-C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
-C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;
-C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;
-C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;
-C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
-C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;
-C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
-C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;
-C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;
-C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
-C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;
-C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;
-C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;
-C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
-C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;
-C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;
-C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;
-C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;
-C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
-C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;
-C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;
-C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;
-C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;
-C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;
-C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
-C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;
-C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;
-C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;
-C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;
-C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;
-C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;
-C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;
-C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;
-C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;
-C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;
-C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;
-C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;
-C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;
-C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;
-C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;
-C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;
-C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;
-C -1 ; WX 410 ; N a86 ; B 35 0 375 692 ;
-C -1 ; WX 509 ; N a85 ; B 35 0 475 692 ;
-C -1 ; WX 334 ; N a95 ; B 35 0 299 692 ;
-C -1 ; WX 509 ; N a205 ; B 35 0 475 692 ;
-C -1 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
-C -1 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
-C -1 ; WX 276 ; N a91 ; B 35 0 242 692 ;
-C -1 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
-C -1 ; WX 410 ; N a206 ; B 35 0 375 692 ;
-C -1 ; WX 317 ; N a94 ; B 35 0 283 692 ;
-C -1 ; WX 317 ; N a93 ; B 35 0 283 692 ;
-C -1 ; WX 276 ; N a92 ; B 35 0 242 692 ;
-C -1 ; WX 334 ; N a96 ; B 35 0 299 692 ;
-C -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
-EndCharMetrics
-EndFontMetrics
diff --git a/contrib/groff/font/devps/zapfdr.ps b/contrib/groff/font/devps/zapfdr.ps
deleted file mode 100644
index 8283be26db5a..000000000000
--- a/contrib/groff/font/devps/zapfdr.ps
+++ /dev/null
@@ -1,225 +0,0 @@
-%!PS-Adobe-3.0 Resource-Font
-%%DocumentNeededResources: font ZapfDingbats
-
-%%IncludeResource: font ZapfDingbats
-
-/ZapfDingbats findfont [-1 0 0 1 0 0] makefont
-
-dup length 1 add dict begin
-{
- exch dup dup /FID ne exch /UniqueID ne and {
- exch def
- } {
- pop pop
- } ifelse
-} forall
-
-/FontName /ZapfDingbats-Reverse def
-
-/Metrics 202 dict dup begin
- /space [0 -278] def
- /a1 [-939 -974] def
- /a2 [-926 -961] def
- /a202 [-939 -974] def
- /a3 [-945 -980] def
- /a4 [-685 -719] def
- /a5 [-754 -789] def
- /a119 [-755 -790] def
- /a118 [-756 -791] def
- /a117 [-655 -690] def
- /a11 [-925 -960] def
- /a12 [-904 -939] def
- /a13 [-520 -549] def
- /a14 [-821 -855] def
- /a15 [-876 -911] def
- /a16 [-898 -933] def
- /a105 [-876 -911] def
- /a17 [-910 -945] def
- /a18 [-939 -974] def
- /a19 [-721 -755] def
- /a20 [-811 -846] def
- /a21 [-727 -762] def
- /a22 [-726 -761] def
- /a23 [-572 -571] def
- /a24 [-641 -677] def
- /a25 [-728 -763] def
- /a26 [-725 -760] def
- /a27 [-724 -759] def
- /a28 [-719 -754] def
- /a6 [-459 -494] def
- /a7 [-517 -552] def
- /a8 [-502 -537] def
- /a9 [-542 -577] def
- /a10 [-657 -692] def
- /a29 [-751 -786] def
- /a30 [-753 -788] def
- /a31 [-753 -788] def
- /a32 [-755 -790] def
- /a33 [-758 -793] def
- /a34 [-759 -794] def
- /a35 [-781 -816] def
- /a36 [-788 -823] def
- /a37 [-754 -789] def
- /a38 [-806 -841] def
- /a39 [-788 -823] def
- /a40 [-798 -833] def
- /a41 [-781 -816] def
- /a42 [-796 -831] def
- /a43 [-888 -923] def
- /a44 [-709 -744] def
- /a45 [-688 -723] def
- /a46 [-714 -749] def
- /a47 [-756 -790] def
- /a48 [-757 -792] def
- /a49 [-660 -695] def
- /a50 [-741 -776] def
- /a51 [-733 -768] def
- /a52 [-757 -792] def
- /a53 [-724 -759] def
- /a54 [-672 -707] def
- /a55 [-673 -708] def
- /a56 [-647 -682] def
- /a57 [-666 -701] def
- /a58 [-791 -826] def
- /a59 [-780 -815] def
- /a60 [-754 -789] def
- /a61 [-754 -789] def
- /a62 [-673 -707] def
- /a63 [-651 -687] def
- /a64 [-661 -696] def
- /a65 [-654 -689] def
- /a66 [-752 -786] def
- /a67 [-752 -787] def
- /a68 [-678 -713] def
- /a69 [-756 -791] def
- /a70 [-749 -785] def
- /a71 [-756 -791] def
- /a72 [-838 -873] def
- /a73 [-726 -761] def
- /a74 [-727 -762] def
- /a203 [-727 -762] def
- /a75 [-724 -759] def
- /a204 [-724 -759] def
- /a76 [-857 -892] def
- /a77 [-857 -892] def
- /a78 [-753 -788] def
- /a79 [-749 -784] def
- /a81 [-403 -438] def
- /a82 [-103 -138] def
- /a83 [-242 -277] def
- /a84 [-380 -415] def
- /a97 [-357 -392] def
- /a98 [-358 -392] def
- /a99 [-633 -668] def
- /a100 [-632 -668] def
- /a101 [-697 -732] def
- /a102 [-488 -544] def
- /a103 [-510 -544] def
- /a104 [-875 -910] def
- /a106 [-632 -667] def
- /a107 [-725 -760] def
- /a108 [-760 -760] def
- /a112 [-741 -776] def
- /a111 [-561 -595] def
- /a110 [-659 -694] def
- /a109 [-592 -626] def
- /a120 [-753 -788] def
- /a121 [-753 -788] def
- /a122 [-753 -788] def
- /a123 [-753 -788] def
- /a124 [-753 -788] def
- /a125 [-753 -788] def
- /a126 [-753 -788] def
- /a127 [-753 -788] def
- /a128 [-753 -788] def
- /a129 [-753 -788] def
- /a130 [-753 -788] def
- /a131 [-753 -788] def
- /a132 [-753 -788] def
- /a133 [-753 -788] def
- /a134 [-753 -788] def
- /a135 [-753 -788] def
- /a136 [-753 -788] def
- /a137 [-753 -788] def
- /a138 [-753 -788] def
- /a139 [-753 -788] def
- /a140 [-753 -788] def
- /a141 [-753 -788] def
- /a142 [-753 -788] def
- /a143 [-753 -788] def
- /a144 [-753 -788] def
- /a145 [-753 -788] def
- /a146 [-753 -788] def
- /a147 [-753 -788] def
- /a148 [-753 -788] def
- /a149 [-753 -788] def
- /a150 [-753 -788] def
- /a151 [-753 -788] def
- /a152 [-753 -788] def
- /a153 [-753 -788] def
- /a154 [-753 -788] def
- /a155 [-753 -788] def
- /a156 [-753 -788] def
- /a157 [-753 -788] def
- /a158 [-753 -788] def
- /a159 [-753 -788] def
- /a160 [-859 -894] def
- /a161 [-803 -838] def
- /a163 [-982 -1016] def
- /a164 [-423 -458] def
- /a196 [-713 -748] def
- /a165 [-889 -924] def
- /a192 [-713 -748] def
- /a166 [-883 -918] def
- /a167 [-892 -927] def
- /a168 [-893 -928] def
- /a169 [-893 -928] def
- /a170 [-799 -834] def
- /a171 [-838 -873] def
- /a172 [-793 -828] def
- /a173 [-889 -924] def
- /a162 [-889 -924] def
- /a174 [-882 -917] def
- /a175 [-895 -930] def
- /a176 [-896 -931] def
- /a177 [-428 -463] def
- /a178 [-848 -883] def
- /a179 [-801 -836] def
- /a193 [-801 -836] def
- /a180 [-832 -867] def
- /a199 [-832 -867] def
- /a181 [-661 -696] def
- /a200 [-661 -696] def
- /a182 [-839 -874] def
- /a201 [-839 -874] def
- /a183 [-725 -760] def
- /a184 [-911 -946] def
- /a197 [-737 -771] def
- /a185 [-830 -865] def
- /a194 [-737 -771] def
- /a198 [-854 -888] def
- /a186 [-932 -967] def
- /a195 [-854 -888] def
- /a187 [-796 -831] def
- /a188 [-837 -873] def
- /a189 [-892 -927] def
- /a190 [-935 -970] def
- /a191 [-884 -918] def
- /a205 [-474 -509] def
- /a206 [-375 -410] def
- /a85 [-474 -509] def
- /a86 [-375 -410] def
- /a87 [-199 -234] def
- /a88 [-199 -234] def
- /a89 [-355 -390] def
- /a90 [-355 -390] def
- /a91 [-241 -276] def
- /a92 [-241 -276] def
- /a93 [-282 -317] def
- /a94 [-282 -317] def
- /a95 [-299 -334] def
- /a96 [-299 -334] def
-
-end def
-
-/ZapfDingbats-Reverse currentdict end definefont pop
diff --git a/contrib/groff/font/devutf8/DESC.proto b/contrib/groff/font/devutf8/DESC.proto
deleted file mode 100644
index 88399ab16d91..000000000000
--- a/contrib/groff/font/devutf8/DESC.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-res 240
-hor 24
-vert 40
-unitwidth 10
-sizes 10 0
-fonts 4 R I B BI
-tcommand
-postpro grotty
diff --git a/contrib/groff/font/devutf8/Makefile.sub b/contrib/groff/font/devutf8/Makefile.sub
deleted file mode 100644
index f6ce659c0d6e..000000000000
--- a/contrib/groff/font/devutf8/Makefile.sub
+++ /dev/null
@@ -1,32 +0,0 @@
-DEV=utf8
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-CLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-$(FONTS): R.proto
- @echo Making $@
- @-rm -f $@
- @(charwidth=`expr $(RES) / $(CPI)` ; \
- sed -e "s/^name [A-Z]*$$/name $@/" \
- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
- -e "s/^internalname .*$$/internalname $@/" \
- -e "/^internalname/s/BI/3/" \
- -e "/^internalname/s/B/2/" \
- -e "/^internalname/s/I/1/" \
- -e "/^internalname .*[^ 0-9]/d" \
- $(srcdir)/R.proto >$@)
-
-DESC: DESC.proto
- @echo Making $@
- @-rm -f $@
- @sed -e "s/^res .*$$/res $(RES)/" \
- -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
- -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
- $(srcdir)/DESC.proto >$@
-
diff --git a/contrib/groff/font/devutf8/NOTES b/contrib/groff/font/devutf8/NOTES
deleted file mode 100644
index 8e724703ddc7..000000000000
--- a/contrib/groff/font/devutf8/NOTES
+++ /dev/null
@@ -1,53 +0,0 @@
-Note that all \[charXXX] entity names have been removed from the font files.
-They don't make sense for Unicode.
-
-The following entity from the original troff manual (by Ossanna and
-Kernighan) is unmapped:
-
- bs shaded solid ball (Bell System logo, AT&T logo)
-
-Character 0x002D has not been given a name because its Unicode name
-HYPHEN-MINUS is so ambiguous that it is unusable for serious typographic
-use.
-
-\[wp] has been mapped to 0x2118, because according to Unicode 4.1's
-NamesList.txt, U+2118 SCRIPT CAPITAL P is really a Weierstrass `p',
-neither SCRIPT not CAPITAL.
-
-The following line could be added; \[space] is known to devps but is not
-documented and not known to devdvi (actually, there is no space glyph within
-the TeX system).
-
- space 24 0 0x0020
-
-devps maps \[a~] and `~' to `asciitilde', which is equivalent to 0x02DC, but
-this glyph is just too small. We map them to 0x007E instead.
-
-devps maps \[a^] and `^' to `circumflex', which is equivalent to 0x02C6, but
-this glyph is just too small. We map them to 0x005E instead.
-
-devps maps \[*U] to `Upsilon1', which is equivalent to 0x03D2. We map it to
-0x03A5 instead.
-
-devps maps \[*W] to `Omega', which is equivalent to either 0x2126 or 0x03A9.
-We map it to 0x03A9.
-
-devps maps \[*D] to `Delta', which is equivalent to either 0x2206 or 0x0394.
-We map it to 0x0394.
-
-
-Adding Unicode characters
--------------------------
-
-Assume you want to use a Unicode character not provided in the list, say
-U+20AC. You need to do two things:
-
-- Add a line
-
- u20AC 24 0 0x20AC
-
- (the second column is computed as 24 * wcwidth(0x20AC)) to the file
- R.proto, or, when groff is already installed, to the four fonts files in
- $(prefix)/share/groff/<version>/font/devutf8/.
-
-- In your source file, use the notation \[u20AC] to access it.
diff --git a/contrib/groff/font/devutf8/R.proto b/contrib/groff/font/devutf8/R.proto
deleted file mode 100644
index ac0828fe4926..000000000000
--- a/contrib/groff/font/devutf8/R.proto
+++ /dev/null
@@ -1,819 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
---- 24 0 0x0000
---- 24 0 0x0001
---- 24 0 0x0002
---- 24 0 0x0003
---- 24 0 0x0004
---- 24 0 0x0005
---- 24 0 0x0006
---- 24 0 0x0007
---- 24 0 0x0008
---- 24 0 0x0009
---- 24 0 0x000A
---- 24 0 0x000B
---- 24 0 0x000C
---- 24 0 0x000D
---- 24 0 0x000E
---- 24 0 0x000F
---- 24 0 0x0010
---- 24 0 0x0011
---- 24 0 0x0012
---- 24 0 0x0013
---- 24 0 0x0014
---- 24 0 0x0015
---- 24 0 0x0016
---- 24 0 0x0017
---- 24 0 0x0018
---- 24 0 0x0019
---- 24 0 0x001A
---- 24 0 0x001B
---- 24 0 0x001C
---- 24 0 0x001D
---- 24 0 0x001E
---- 24 0 0x001F
---- 24 0 0x0020
-! 24 0 0x0021
-" 24 0 0x0022
-dq "
-# 24 0 0x0023
-sh "
-$ 24 0 0x0024
-Do "
-% 24 0 0x0025
-& 24 0 0x0026
-aq 24 0 0x0027
-( 24 0 0x0028
-) 24 0 0x0029
-* 24 0 0x002A
-+ 24 0 0x002B
-pl "
-, 24 0 0x002C
---- 24 0 0x002D
-. 24 0 0x002E
-/ 24 0 0x002F
-sl "
-0 24 0 0x0030
-1 24 0 0x0031
-2 24 0 0x0032
-3 24 0 0x0033
-4 24 0 0x0034
-5 24 0 0x0035
-6 24 0 0x0036
-7 24 0 0x0037
-8 24 0 0x0038
-9 24 0 0x0039
-: 24 0 0x003A
-; 24 0 0x003B
-< 24 0 0x003C
-= 24 0 0x003D
-eq "
-> 24 0 0x003E
-? 24 0 0x003F
-@ 24 0 0x0040
-at "
-A 24 0 0x0041
-B 24 0 0x0042
-C 24 0 0x0043
-D 24 0 0x0044
-E 24 0 0x0045
-F 24 0 0x0046
-G 24 0 0x0047
-H 24 0 0x0048
-I 24 0 0x0049
-J 24 0 0x004A
-K 24 0 0x004B
-L 24 0 0x004C
-M 24 0 0x004D
-N 24 0 0x004E
-O 24 0 0x004F
-P 24 0 0x0050
-Q 24 0 0x0051
-R 24 0 0x0052
-S 24 0 0x0053
-T 24 0 0x0054
-U 24 0 0x0055
-V 24 0 0x0056
-W 24 0 0x0057
-X 24 0 0x0058
-Y 24 0 0x0059
-Z 24 0 0x005A
-[ 24 0 0x005B
-lB "
-\ 24 0 0x005C
-rs "
-] 24 0 0x005D
-rB "
-a^ 24 0 0x005E
-^ "
-ha "
-_ 24 0 0x005F
-ru "
-ul "
-\` 24 0 0x0060
-ga "
-a 24 0 0x0061
-b 24 0 0x0062
-c 24 0 0x0063
-d 24 0 0x0064
-e 24 0 0x0065
-f 24 0 0x0066
-g 24 0 0x0067
-h 24 0 0x0068
-i 24 0 0x0069
-j 24 0 0x006A
-k 24 0 0x006B
-l 24 0 0x006C
-m 24 0 0x006D
-n 24 0 0x006E
-o 24 0 0x006F
-p 24 0 0x0070
-q 24 0 0x0071
-r 24 0 0x0072
-s 24 0 0x0073
-t 24 0 0x0074
-u 24 0 0x0075
-v 24 0 0x0076
-w 24 0 0x0077
-x 24 0 0x0078
-y 24 0 0x0079
-z 24 0 0x007A
-lC 24 0 0x007B
-{ "
-ba 24 0 0x007C
-or "
-| "
-rC 24 0 0x007D
-} "
-a~ 24 0 0x007E
-~ "
-ti "
---- 24 0 0x007F
---- 24 0 0x0080
---- 24 0 0x0081
---- 24 0 0x0082
---- 24 0 0x0083
---- 24 0 0x0084
---- 24 0 0x0085
---- 24 0 0x0086
---- 24 0 0x0087
---- 24 0 0x0088
---- 24 0 0x0089
---- 24 0 0x008A
---- 24 0 0x008B
---- 24 0 0x008C
---- 24 0 0x008D
---- 24 0 0x008E
---- 24 0 0x008F
---- 24 0 0x0090
---- 24 0 0x0091
---- 24 0 0x0092
---- 24 0 0x0093
---- 24 0 0x0094
---- 24 0 0x0095
---- 24 0 0x0096
---- 24 0 0x0097
---- 24 0 0x0098
---- 24 0 0x0099
---- 24 0 0x009A
---- 24 0 0x009B
---- 24 0 0x009C
---- 24 0 0x009D
---- 24 0 0x009E
---- 24 0 0x009F
---- 24 0 0x00A0
-r! 24 0 0x00A1
-ct 24 0 0x00A2
-Po 24 0 0x00A3
-Cs 24 0 0x00A4
-Ye 24 0 0x00A5
-bb 24 0 0x00A6
-sc 24 0 0x00A7
-ad 24 0 0x00A8
-co 24 0 0x00A9
-Of 24 0 0x00AA
-Fo 24 0 0x00AB
-no 24 0 0x00AC
-tno "
---- 24 0 0x00AD
-rg 24 0 0x00AE
-a- 24 0 0x00AF
-de 24 0 0x00B0
-+- 24 0 0x00B1
-t+- "
-S2 24 0 0x00B2
-S3 24 0 0x00B3
-aa 24 0 0x00B4
-\' "
-mc 24 0 0x00B5
-ps 24 0 0x00B6
-pc 24 0 0x00B7
-ac 24 0 0x00B8
-S1 24 0 0x00B9
-Om 24 0 0x00BA
-Fc 24 0 0x00BB
-14 24 0 0x00BC
-12 24 0 0x00BD
-34 24 0 0x00BE
-r? 24 0 0x00BF
-`A 24 0 0x00C0
-'A 24 0 0x00C1
-^A 24 0 0x00C2
-~A 24 0 0x00C3
-:A 24 0 0x00C4
-oA 24 0 0x00C5
-AE 24 0 0x00C6
-,C 24 0 0x00C7
-`E 24 0 0x00C8
-'E 24 0 0x00C9
-^E 24 0 0x00CA
-:E 24 0 0x00CB
-`I 24 0 0x00CC
-'I 24 0 0x00CD
-^I 24 0 0x00CE
-:I 24 0 0x00CF
--D 24 0 0x00D0
-~N 24 0 0x00D1
-`O 24 0 0x00D2
-'O 24 0 0x00D3
-^O 24 0 0x00D4
-~O 24 0 0x00D5
-:O 24 0 0x00D6
-mu 24 0 0x00D7
-tmu "
-/O 24 0 0x00D8
-`U 24 0 0x00D9
-'U 24 0 0x00DA
-^U 24 0 0x00DB
-:U 24 0 0x00DC
-'Y 24 0 0x00DD
-TP 24 0 0x00DE
-ss 24 0 0x00DF
-`a 24 0 0x00E0
-'a 24 0 0x00E1
-^a 24 0 0x00E2
-~a 24 0 0x00E3
-:a 24 0 0x00E4
-oa 24 0 0x00E5
-ae 24 0 0x00E6
-,c 24 0 0x00E7
-`e 24 0 0x00E8
-'e 24 0 0x00E9
-^e 24 0 0x00EA
-:e 24 0 0x00EB
-`i 24 0 0x00EC
-'i 24 0 0x00ED
-^i 24 0 0x00EE
-:i 24 0 0x00EF
-Sd 24 0 0x00F0
-~n 24 0 0x00F1
-`o 24 0 0x00F2
-'o 24 0 0x00F3
-^o 24 0 0x00F4
-~o 24 0 0x00F5
-:o 24 0 0x00F6
-di 24 0 0x00F7
-tdi "
-/o 24 0 0x00F8
-`u 24 0 0x00F9
-'u 24 0 0x00FA
-^u 24 0 0x00FB
-:u 24 0 0x00FC
-'y 24 0 0x00FD
-Tp 24 0 0x00FE
-:y 24 0 0x00FF
-u0041_0306 24 0 0x0102
-u0061_0306 24 0 0x0103
-u0041_0328 24 0 0x0104
-u0061_0328 24 0 0x0105
-'C 24 0 0x0106
-'c 24 0 0x0107
-u0043_030C 24 0 0x010C
-u0063_030C 24 0 0x010D
-u0044_030C 24 0 0x010E
-u0064_030C 24 0 0x010F
-u0110 24 0 0x0110
-u0111 24 0 0x0111
-u0045_0328 24 0 0x0118
-u0065_0328 24 0 0x0119
-u0045_030C 24 0 0x011A
-u0065_030C 24 0 0x011B
-u0047_0306 24 0 0x011E
-u0067_0306 24 0 0x011F
-u0049_0307 24 0 0x0130
-.i 24 0 0x0131
-IJ 24 0 0x0132
-ij 24 0 0x0133
-u004C_0301 24 0 0x0139
-u006C_0301 24 0 0x013A
-u004C_030C 24 0 0x013D
-u006C_030C 24 0 0x013E
-/L 24 0 0x0141
-/l 24 0 0x0142
-u004E_0301 24 0 0x0143
-u006E_0301 24 0 0x0144
-u004E_030C 24 0 0x0147
-u006E_030C 24 0 0x0148
-u004F_030B 24 0 0x0150
-u006F_030B 24 0 0x0151
-OE 24 0 0x0152
-oe 24 0 0x0153
-u0052_0301 24 0 0x0154
-u0072_0301 24 0 0x0155
-u0052_030C 24 0 0x0158
-u0072_030C 24 0 0x0159
-u0053_0301 24 0 0x015A
-u0073_0301 24 0 0x015B
-u0053_0327 24 0 0x015E
-u0073_0327 24 0 0x015F
-vS 24 0 0x0160
-vs 24 0 0x0161
-u0054_0327 24 0 0x0162
-u0074_0327 24 0 0x0163
-u0054_030C 24 0 0x0164
-u0074_030C 24 0 0x0165
-u0055_030A 24 0 0x016E
-u0075_030A 24 0 0x016F
-u0055_030B 24 0 0x0170
-u0075_030B 24 0 0x0171
-:Y 24 0 0x0178
-u005A_0301 24 0 0x0179
-u007A_0301 24 0 0x017A
-u005A_0307 24 0 0x017B
-u007A_0307 24 0 0x017C
-vZ 24 0 0x017D
-vz 24 0 0x017E
-Fn 24 0 0x0192
-ah 24 0 0x02C7
-ab 24 0 0x02D8
-a. 24 0 0x02D9
-ao 24 0 0x02DA
-ho 24 0 0x02DB
-a" 24 0 0x02DD
-*A 24 0 0x0391
-*B 24 0 0x0392
-*G 24 0 0x0393
-*D 24 0 0x0394
-*E 24 0 0x0395
-*Z 24 0 0x0396
-*Y 24 0 0x0397
-*H 24 0 0x0398
-*I 24 0 0x0399
-*K 24 0 0x039A
-*L 24 0 0x039B
-*M 24 0 0x039C
-*N 24 0 0x039D
-*C 24 0 0x039E
-*O 24 0 0x039F
-*P 24 0 0x03A0
-*R 24 0 0x03A1
-*S 24 0 0x03A3
-*T 24 0 0x03A4
-*U 24 0 0x03A5
-*F 24 0 0x03A6
-*X 24 0 0x03A7
-*Q 24 0 0x03A8
-*W 24 0 0x03A9
-*a 24 0 0x03B1
-*b 24 0 0x03B2
-*g 24 0 0x03B3
-*d 24 0 0x03B4
-*e 24 0 0x03B5
-*z 24 0 0x03B6
-*y 24 0 0x03B7
-*h 24 0 0x03B8
-*i 24 0 0x03B9
-*k 24 0 0x03BA
-*l 24 0 0x03BB
-*m 24 0 0x03BC
-*n 24 0 0x03BD
-*c 24 0 0x03BE
-*o 24 0 0x03BF
-*p 24 0 0x03C0
-*r 24 0 0x03C1
-ts 24 0 0x03C2
-*s 24 0 0x03C3
-*t 24 0 0x03C4
-*u 24 0 0x03C5
-+f 24 0 0x03C6
-*x 24 0 0x03C7
-*q 24 0 0x03C8
-*w 24 0 0x03C9
-+h 24 0 0x03D1
-*f 24 0 0x03D5
-+p 24 0 0x03D6
-+e 24 0 0x03F5
-u0415_0300 24 0 0x0400
-u0415_0308 24 0 0x0401
-u0402 24 0 0x0402
-u0413_0301 24 0 0x0403
-u0404 24 0 0x0404
-u0405 24 0 0x0405
-u0406 24 0 0x0406
-u0406_0308 24 0 0x0407
-u0408 24 0 0x0408
-u0409 24 0 0x0409
-u040A 24 0 0x040A
-u040B 24 0 0x040B
-u041A_0301 24 0 0x040C
-u0418_0300 24 0 0x040D
-u0423_0306 24 0 0x040E
-u040F 24 0 0x040F
-u0410 24 0 0x0410
-u0411 24 0 0x0411
-u0412 24 0 0x0412
-u0413 24 0 0x0413
-u0414 24 0 0x0414
-u0415 24 0 0x0415
-u0416 24 0 0x0416
-u0417 24 0 0x0417
-u0418 24 0 0x0418
-u0418_0306 24 0 0x0419
-u041A 24 0 0x041A
-u041B 24 0 0x041B
-u041C 24 0 0x041C
-u041D 24 0 0x041D
-u041E 24 0 0x041E
-u041F 24 0 0x041F
-u0420 24 0 0x0420
-u0421 24 0 0x0421
-u0422 24 0 0x0422
-u0423 24 0 0x0423
-u0424 24 0 0x0424
-u0425 24 0 0x0425
-u0426 24 0 0x0426
-u0427 24 0 0x0427
-u0428 24 0 0x0428
-u0429 24 0 0x0429
-u042A 24 0 0x042A
-u042B 24 0 0x042B
-u042C 24 0 0x042C
-u042D 24 0 0x042D
-u042E 24 0 0x042E
-u042F 24 0 0x042F
-u0430 24 0 0x0430
-u0431 24 0 0x0431
-u0432 24 0 0x0432
-u0433 24 0 0x0433
-u0434 24 0 0x0434
-u0435 24 0 0x0435
-u0436 24 0 0x0436
-u0437 24 0 0x0437
-u0438 24 0 0x0438
-u0438_0306 24 0 0x0439
-u043A 24 0 0x043A
-u043B 24 0 0x043B
-u043C 24 0 0x043C
-u043D 24 0 0x043D
-u043E 24 0 0x043E
-u043F 24 0 0x043F
-u0440 24 0 0x0440
-u0441 24 0 0x0441
-u0442 24 0 0x0442
-u0443 24 0 0x0443
-u0444 24 0 0x0444
-u0445 24 0 0x0445
-u0446 24 0 0x0446
-u0447 24 0 0x0447
-u0448 24 0 0x0448
-u0449 24 0 0x0449
-u044A 24 0 0x044A
-u044B 24 0 0x044B
-u044C 24 0 0x044C
-u044D 24 0 0x044D
-u044E 24 0 0x044E
-u044F 24 0 0x044F
-u0435_0300 24 0 0x0450
-u0435_0308 24 0 0x0451
-u0452 24 0 0x0452
-u0433_0301 24 0 0x0453
-u0454 24 0 0x0454
-u0455 24 0 0x0455
-u0456 24 0 0x0456
-u0456_0308 24 0 0x0457
-u0458 24 0 0x0458
-u0459 24 0 0x0459
-u045A 24 0 0x045A
-u045B 24 0 0x045B
-u043A_0301 24 0 0x045C
-u0438_0300 24 0 0x045D
-u0443_0306 24 0 0x045E
-u045F 24 0 0x045F
-u0460 24 0 0x0460
-u0461 24 0 0x0461
-u0462 24 0 0x0462
-u0463 24 0 0x0463
-u0464 24 0 0x0464
-u0465 24 0 0x0465
-u0466 24 0 0x0466
-u0467 24 0 0x0467
-u0468 24 0 0x0468
-u0469 24 0 0x0469
-u046A 24 0 0x046A
-u046B 24 0 0x046B
-u046C 24 0 0x046C
-u046D 24 0 0x046D
-u046E 24 0 0x046E
-u046F 24 0 0x046F
-u0470 24 0 0x0470
-u0471 24 0 0x0471
-u0472 24 0 0x0472
-u0473 24 0 0x0473
-u0474 24 0 0x0474
-u0475 24 0 0x0475
-u0474_030F 24 0 0x0476
-u0475_030F 24 0 0x0477
-u0478 24 0 0x0478
-u0479 24 0 0x0479
-u047A 24 0 0x047A
-u047B 24 0 0x047B
-u047C 24 0 0x047C
-u047D 24 0 0x047D
-u047E 24 0 0x047E
-u047F 24 0 0x047F
-u0480 24 0 0x0480
-u0481 24 0 0x0481
-u0482 24 0 0x0482
-u0483 0 0 0x0483
-u0484 0 0 0x0484
-u0485 0 0 0x0485
-u0486 0 0 0x0486
-u0488 0 0 0x0488
-u0489 0 0 0x0489
-u048A 24 0 0x048A
-u048B 24 0 0x048B
-u048C 24 0 0x048C
-u048D 24 0 0x048D
-u048E 24 0 0x048E
-u048F 24 0 0x048F
-u0490 24 0 0x0490
-u0491 24 0 0x0491
-u0492 24 0 0x0492
-u0493 24 0 0x0493
-u0494 24 0 0x0494
-u0495 24 0 0x0495
-u0496 24 0 0x0496
-u0497 24 0 0x0497
-u0498 24 0 0x0498
-u0499 24 0 0x0499
-u049A 24 0 0x049A
-u049B 24 0 0x049B
-u049C 24 0 0x049C
-u049D 24 0 0x049D
-u049E 24 0 0x049E
-u049F 24 0 0x049F
-u04A0 24 0 0x04A0
-u04A1 24 0 0x04A1
-u04A2 24 0 0x04A2
-u04A3 24 0 0x04A3
-u04A4 24 0 0x04A4
-u04A5 24 0 0x04A5
-u04A6 24 0 0x04A6
-u04A7 24 0 0x04A7
-u04A8 24 0 0x04A8
-u04A9 24 0 0x04A9
-u04AA 24 0 0x04AA
-u04AB 24 0 0x04AB
-u04AC 24 0 0x04AC
-u04AD 24 0 0x04AD
-u04AE 24 0 0x04AE
-u04AF 24 0 0x04AF
-u04B0 24 0 0x04B0
-u04B1 24 0 0x04B1
-u04B2 24 0 0x04B2
-u04B3 24 0 0x04B3
-u04B4 24 0 0x04B4
-u04B5 24 0 0x04B5
-u04B6 24 0 0x04B6
-u04B7 24 0 0x04B7
-u04B8 24 0 0x04B8
-u04B9 24 0 0x04B9
-u04BA 24 0 0x04BA
-u04BB 24 0 0x04BB
-u04BC 24 0 0x04BC
-u04BD 24 0 0x04BD
-u04BE 24 0 0x04BE
-u04BF 24 0 0x04BF
-u04C0 24 0 0x04C0
-u0416_0306 24 0 0x04C1
-u0436_0306 24 0 0x04C2
-u04C3 24 0 0x04C3
-u04C4 24 0 0x04C4
-u04C5 24 0 0x04C5
-u04C6 24 0 0x04C6
-u04C7 24 0 0x04C7
-u04C8 24 0 0x04C8
-u04C9 24 0 0x04C9
-u04CA 24 0 0x04CA
-u04CB 24 0 0x04CB
-u04CC 24 0 0x04CC
-u04CD 24 0 0x04CD
-u04CE 24 0 0x04CE
-u0410_0306 24 0 0x04D0
-u0430_0306 24 0 0x04D1
-u0410_0308 24 0 0x04D2
-u0430_0308 24 0 0x04D3
-u04D4 24 0 0x04D4
-u04D5 24 0 0x04D5
-u0415_0306 24 0 0x04D6
-u0435_0306 24 0 0x04D7
-u04D8 24 0 0x04D8
-u04D9 24 0 0x04D9
-u04D8_0308 24 0 0x04DA
-u04D9_0308 24 0 0x04DB
-u0416_0308 24 0 0x04DC
-u0436_0308 24 0 0x04DD
-u0417_0308 24 0 0x04DE
-u0437_0308 24 0 0x04DF
-u04E0 24 0 0x04E0
-u04E1 24 0 0x04E1
-u0418_0304 24 0 0x04E2
-u0438_0304 24 0 0x04E3
-u0418_0308 24 0 0x04E4
-u0438_0308 24 0 0x04E5
-u041E_0308 24 0 0x04E6
-u043E_0308 24 0 0x04E7
-u04E8 24 0 0x04E8
-u04E9 24 0 0x04E9
-u04E8_0308 24 0 0x04EA
-u04E9_0308 24 0 0x04EB
-u042D_0308 24 0 0x04EC
-u044D_0308 24 0 0x04ED
-u0423_0304 24 0 0x04EE
-u0443_0304 24 0 0x04EF
-u0423_0308 24 0 0x04F0
-u0443_0308 24 0 0x04F1
-u0423_030B 24 0 0x04F2
-u0443_030B 24 0 0x04F3
-u0427_0308 24 0 0x04F4
-u0447_0308 24 0 0x04F5
-u042B_0308 24 0 0x04F8
-u044B_0308 24 0 0x04F9
-u0500 24 0 0x0500
-u0501 24 0 0x0501
-u0502 24 0 0x0502
-u0503 24 0 0x0503
-u0504 24 0 0x0504
-u0505 24 0 0x0505
-u0506 24 0 0x0506
-u0507 24 0 0x0507
-u0508 24 0 0x0508
-u0509 24 0 0x0509
-u050A 24 0 0x050A
-u050B 24 0 0x050B
-u050C 24 0 0x050C
-u050D 24 0 0x050D
-u050E 24 0 0x050E
-u050F 24 0 0x050F
-- 24 0 0x2010
-hy "
-en 24 0 0x2013
-em 24 0 0x2014
-` 24 0 0x2018
-oq "
-' 24 0 0x2019
-cq "
-bq 24 0 0x201A
-lq 24 0 0x201C
-rq 24 0 0x201D
-Bq 24 0 0x201E
-dg 24 0 0x2020
-dd 24 0 0x2021
-bu 24 0 0x2022
-%0 24 0 0x2030
-fm 24 0 0x2032
-sd 24 0 0x2033
-fo 24 0 0x2039
-fc 24 0 0x203A
-rn 24 0 0x203E
-f/ 24 0 0x2044
-eu 24 0 0x20AC
-Eu "
--h 24 0 0x210F
-hbar "
-Im 24 0 0x2111
-wp 24 0 0x2118
-Re 24 0 0x211C
-tm 24 0 0x2122
-Ah 24 0 0x2135
-18 24 0 0x215B
-38 24 0 0x215C
-58 24 0 0x215D
-78 24 0 0x215E
-<- 24 0 0x2190
-ua 24 0 0x2191
--> 24 0 0x2192
-da 24 0 0x2193
-<> 24 0 0x2194
-va 24 0 0x2195
-CR 24 0 0x21B5
-lA 24 0 0x21D0
-uA 24 0 0x21D1
-rA 24 0 0x21D2
-dA 24 0 0x21D3
-hA 24 0 0x21D4
-vA 24 0 0x21D5
-fa 24 0 0x2200
-pd 24 0 0x2202
-te 24 0 0x2203
-es 24 0 0x2205
-gr 24 0 0x2207
-mo 24 0 0x2208
-nm 24 0 0x2209
-st 24 0 0x220B
-product 24 0 0x220F
-coproduct 24 0 0x2210
-sum 24 0 0x2211
-\- 24 0 0x2212
-mi "
--+ 24 0 0x2213
-** 24 0 0x2217
-sr 24 0 0x221A
-sqrt "
-pt 24 0 0x221D
-if 24 0 0x221E
-/_ 24 0 0x2220
-AN 24 0 0x2227
-OR 24 0 0x2228
-ca 24 0 0x2229
-cu 24 0 0x222A
-is 24 0 0x222B
-integral "
-tf 24 0 0x2234
-3d "
-ap 24 0 0x223C
-|= 24 0 0x2243
-=~ 24 0 0x2245
-~~ 24 0 0x2248
-~= "
-!= 24 0 0x2260
-== 24 0 0x2261
-ne 24 0 0x2262
-<= 24 0 0x2264
->= 24 0 0x2265
-<< 24 0 0x226A
->> 24 0 0x226B
-sb 24 0 0x2282
-sp 24 0 0x2283
-nb 24 0 0x2284
-nc 24 0 0x2285
-ib 24 0 0x2286
-ip 24 0 0x2287
-c+ 24 0 0x2295
-c* 24 0 0x2297
-pp 24 0 0x22A5
-md 24 0 0x22C5
-lc 24 0 0x2308
-rc 24 0 0x2309
-lf 24 0 0x230A
-rf 24 0 0x230B
-parenlefttp 24 0 0x239B
-parenleftex 24 0 0x239C
-parenleftbt 24 0 0x239D
-parenrighttp 24 0 0x239E
-parenrightex 24 0 0x239F
-parenrightbt 24 0 0x23A0
-bracketlefttp 24 0 0x23A1
-bracketleftex 24 0 0x23A2
-bracketleftbt 24 0 0x23A3
-bracketrighttp 24 0 0x23A4
-bracketrightex 24 0 0x23A5
-bracketrightbt 24 0 0x23A6
-lt 24 0 0x23A7
-bracelefttp "
-lk 24 0 0x23A8
-braceleftmid "
-lb 24 0 0x23A9
-braceleftbt "
-bv 24 0 0x23AA
-braceex "
-braceleftex "
-bracerightex "
-rt 24 0 0x23AB
-bracerighttp "
-rk 24 0 0x23AC
-bracerightmid "
-rb 24 0 0x23AD
-bracerightbt "
-u23AE 24 0 0x23AE
-an 24 0 0x23AF
-br 24 0 0x2502
-sq 24 0 0x25A1
-lz 24 0 0x25CA
-ci 24 0 0x25CB
-lh 24 0 0x261C
-rh 24 0 0x261E
-SP 24 0 0x2660
-CL 24 0 0x2663
-HE 24 0 0x2665
-DI 24 0 0x2666
-OK 24 0 0x2713
-la 24 0 0x27E8
-ra 24 0 0x27E9
-ff 24 0 0xFB00
-fi 24 0 0xFB01
-fl 24 0 0xFB02
-Fi 24 0 0xFB03
-Fl 24 0 0xFB04
diff --git a/contrib/groff/gendef.sh b/contrib/groff/gendef.sh
deleted file mode 100644
index 4853eef4757c..000000000000
--- a/contrib/groff/gendef.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# gendef filename var=val var=val ...
-#
-# This script is used to generate src/include/defs.h
-#
-
-file=$1
-shift
-
-defs="#define $1"
-shift
-for def
-do
- defs="$defs
-#define $def"
-done
-
-# Use $TMPDIR if defined. Default to cwd, for non-Unix systems
-# which don't have /tmp on each drive (we are going to remove
-# the file before we exit anyway). Put the PID in the basename,
-# since the extension can only hold 3 characters on MS-DOS.
-t=${TMPDIR-.}/gro$$.tmp
-
-sed -e 's/=/ /' >$t <<EOF
-$defs
-EOF
-
-test -r $file && cmp -s $t $file || cp $t $file
-
-rm -f $t
-
-exit 0
-
-# eof
diff --git a/contrib/groff/install-sh b/contrib/groff/install-sh
deleted file mode 100755
index f56e147640dc..000000000000
--- a/contrib/groff/install-sh
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-07-09.12
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c (ignored)
--d create directories instead of installing files.
--g GROUP $chgrpprog installed files to GROUP.
--m MODE $chmodprog installed files to MODE.
--o USER $chownprog installed files to USER.
--s $stripprog installed files.
--t DIRECTORY install into DIRECTORY.
--T report an error if DSTFILE is a directory.
---help display this help and exit.
---version display version info and exit.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
- case $1 in
- -c) shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd=$stripprog
- shift
- continue;;
-
- -t) dstarg=$2
- shift
- shift
- continue;;
-
- -T) no_target_directory=true
- shift
- continue;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- *) # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- test -n "$dir_arg$dstarg" && break
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dstarg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
- shift # fnord
- fi
- shift # arg
- dstarg=$arg
- done
- break;;
- esac
-done
-
-if test -z "$1"; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src ;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- src=
-
- if test -d "$dst"; then
- mkdircmd=:
- chmodcmd=
- else
- mkdircmd=$mkdirprog
- fi
- else
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dstarg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dstarg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst ;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dstarg: Is a directory" >&2
- exit 1
- fi
- dst=$dst/`basename "$src"`
- fi
- fi
-
- # This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
- # Make sure that the destination directory exists.
-
- # Skip lots of stat calls in the usual case.
- if test ! -d "$dstdir"; then
- case $dstdir in
- /*) pathcomp=/ ;;
- -*) pathcomp=./ ;;
- *) pathcomp= ;;
- esac
- oIFS=$IFS
- IFS=/
- set fnord $dstdir
- shift
- IFS=$oIFS
-
- for d
- do
- test "x$d" = x && continue
-
- pathcomp=$pathcomp$d
- if test ! -d "$pathcomp"; then
- $mkdirprog "$pathcomp"
- # mkdir can fail with a `File exist' error in case several
- # install-sh are creating the directory concurrently. This
- # is OK.
- test -d "$pathcomp" || exit 1
- fi
- pathcomp=$pathcomp/
- done
- fi
-
- if test -n "$dir_arg"; then
- $doit $mkdircmd "$dst" \
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
- else
- dstfile=`basename "$dst"`
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- trap '(exit $?); exit' 1 2 13 15
-
- # Copy the file name to the temp name.
- $doit $cpprog "$src" "$dsttmp" &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
- # Now rename the file to the real destination.
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
- || {
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
-
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- if test -f "$dstdir/$dstfile"; then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
- || {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit 1
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
- }
- }
- fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
- (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/contrib/groff/man/Makefile.sub b/contrib/groff/man/Makefile.sub
deleted file mode 100644
index 86c4aeaf87e9..000000000000
--- a/contrib/groff/man/Makefile.sub
+++ /dev/null
@@ -1,10 +0,0 @@
-MAN5=\
- groff_font.n \
- groff_out.n \
- groff_tmac.n
-MAN7=\
- ditroff.n \
- groff_char.n \
- groff_diff.n \
- groff.n \
- roff.n
diff --git a/contrib/groff/man/ditroff.man b/contrib/groff/man/ditroff.man
deleted file mode 100644
index ea3bb86c4667..000000000000
--- a/contrib/groff/man/ditroff.man
+++ /dev/null
@@ -1,201 +0,0 @@
-.ig
-ditroff.man
-
-Last update: 2 Jul 2004
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de>
-maintained by Werner Lemberg <wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \
-. ftr CB CW
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH DITROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-ditroff \- classical device independent roff
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The name
-.I ditroff
-once marked a development level of the
-.I troff
-text processing system.
-.
-In actual
-.BR roff (@MAN7EXT@)
-systems, the name
-.I troff
-is used as a synonym for
-.IR ditroff .
-.
-.P
-The first roff system was written by Joe Osanna around 1973.
-.
-It supported only two output devices, the
-.B nroff
-program produced text oriented tty output, while the
-.B troff
-program generated graphical output for exactly one output device, the Wang
-.I Graphic Systems CAT
-typesetter.
-.
-.P
-In 1979, Brian Kernighan rewrote troff to support more devices by
-creating an intermediate output format for troff that can be fed into
-postprocessor programs which actually do the printout on the device.
-.
-Kernighan's version marks what is known as
-.I classical troff
-today.
-.
-In order to distinguish it from Osanna's original mono-device version,
-it was called
-.I ditroff
-(\c
-.IR d\/ evice\~ i\/ ndependent\~ troff\/\c
-)
-on some systems, though this naming isn't mentioned in the classical
-documentation.
-.
-.P
-Today, any existing roff system is based on Kernighan's multi-device
-troff.
-.
-The distinction between
-.I troff
-and
-.I ditroff
-isn't necessary any longer, for each modern
-.I troff
-provides already the complete functionality of
-.IR ditroff .
-.
-On most systems, the name
-.I troff
-is used to denote
-.IR ditroff .
-.
-.P
-The easiest way to use ditroff is the GNU roff system,
-.IR groff .
-The
-.BR groff (@MAN1EXT@)
-program is a wrapper around
-.I (di)troff
-that automatically handles postprocessing.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.I [CSTR\~#54]
-The 1992 revision of the
-.I Nroff/Troff User's Manual
-by
-.I J. F. Osanna
-and
-.IR "Brian Kernighan" ,
-see
-.br
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \
- "Bell Labs CSTR\~#54" .
-.
-.TP
-.I [CSTR\~#97]
-.I A Typesetter-independent TROFF
-by
-.I Brian Kernighan
-is the original documentation of the first multi-device troff
-.RI ( ditroff\/ ),
-see
-.br
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz \
- "Bell Labs CSTR\~#97" .
-.
-.TP
-.BR roff (@MAN7EXT@)
-This document gives details on the history and concepts of roff.
-.
-.TP
-.BR @g@troff (@MAN1EXT@)
-The actual implementation of
-.IR ditroff .
-.
-.TP
-.BR groff (@MAN1EXT@)
-The GNU roff program and pointers to all documentation around groff.
-.
-.TP
-.BR groff_out (@MAN5EXT@)
-The groff version of the intermediate output language, the basis for
-multi-devicing.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.MTO bwarken@mayn.de "Bernd Warken"
-and is maintained by
-.MTO wl@gnu.org "Werner Lemberg" .
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.\"
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff.man b/contrib/groff/man/groff.man
deleted file mode 100644
index 2e0bfc74fefd..000000000000
--- a/contrib/groff/man/groff.man
+++ /dev/null
@@ -1,3564 +0,0 @@
-'\" t
-.ig
-groff.man
-
-Last update: 17 Feb 2005
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de>
-maintained by Werner Lemberg <wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \{\
-. ftr CB CW
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.\" start of macro definitions
-.eo
-.
-.de c
-..
-.
-.de TPx
-. TP 10n
-..
-.c ---------------------------------------------------------------------
-.c .Text anything ...
-.c
-.c All arguments are printed as text.
-.c
-.de Text
-. nop \)\$*
-..
-.c ---------------------------------------------------------------------
-.c .ExecFF macro font1 font2 text1 text2 text1 text2 ...
-.c
-.c Concat text arguments using alternating fonts and feed into macro.
-.c For a trailing punctuation, terminate the call with \c.
-.c
-.de ExecFF
-. if (\n[.$] < 4) \
-. return
-. ds @a\"
-. ds @m \$1\"
-. ds @f1 \$2\"
-. ds @f2 \$3\"
-. shift 3
-. ds @s\"
-. while 1 \{\
-. if (\n[.$] = 0) \
-. break
-. ds @a \$1\"
-. as @s \f[\*[@f1]]\*[@a]\f[]\"
-. shift
-. if (\n[.$] = 0) \
-. break
-. ds @a \$1\"
-. as @s \f[\*[@f2]]\*[@a]\f[]\"
-. shift
-. \}
-. \*[@m] "\*[@s]\f[R]"
-. ft P \" to make \c happy
-. rm @m
-. rm @s
-. rm @a
-. rm @f1
-. rm @f2
-..
-.
-.c --------- command line option ---------
-.
-.de option
-. Text \f[CB]\$*
-. ft P
-..
-.
-.c --------- characters ---------
-.
-.de character
-. ExecFF Text CB R \$*
-..
-.de squoted_char
-. ds @1 \$1\"
-. shift
-. ExecFF Text R CB \[oq] \*[@1] "\[cq]\$*"
-. rm @1
-..
-.de dquoted_char
-. ds @1 \$1\"
-. shift
-. ExecFF Text R CB \[lq] \*[@1] "\[rq]\$*"
-. rm @1
-..
-.c --------- requests ---------
-.
-.c synopsis of a request
-.de REQ
-. if (\n[.$] = 0) \
-. return
-. ds @1 \$1\"
-. shift 1
-. ie (\n[.$] = 0) \{\
-. TP 10n
-. Text \f[CB]\*[@1]\f[]
-. \}
-. el \{\
-. TP 10n
-. Text \f[CB]\*[@1]\~\f[]\f[I]\$*\f[]
-. \}
-. rm @1
-..
-.c reference of a request
-.de request
-. BR \$*
-..
-.
-.c --------- numerical elements ---------
-.
-.c number with a trailing unit
-.de scalednumber
-. Text \$1\^\f[CB]\$2\f[]\$3\f[R]
-. ft P
-..
-.
-.c representation of units within the text
-.de scaleindicator
-. Text \f[CB]\$1\f[]\$2\f[R]
-. ft P
-..
-.
-.c representation of mathematical operators within the text
-.de operator
-. squoted_char \$@
-..
-.
-.
-.c --------- escape sequences ---------
-.
-.c ---------------------------------------------------------------------
-.c .ESC name [arg]
-.c
-.c Synopsis of an escape sequence, optionally with argument
-.c Args : 1 or 2; `name' obligatory, `arg' optional
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary word
-.c Result : prints \namearg, where `name' is in CB, `arg' in I
-.c
-.de ESC
-. if (\n[.$] < 1)
-. ab .ESC needs 1 or 2 arguments.
-. ExecFF IP CB I "\[rs]\$1" "\,\$2\/"
-..
-.c ---------------------------------------------------------------------
-.c .ESC[] name arg
-.c
-.c Synopsis for escape sequence with a bracketed long argument
-.c Args : 2 obligatory
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary text
-.c Result : prints \name[arg], where `name' is in CB, `arg' in I
-.c
-.de ESC[]
-. if !(\n[.$] = 2) \
-. ab .ESC[] needs exactly 2 arguments.
-. ExecFF IP CB I "\[rs]\$1\[lB]" "\h'-0.2m'\$2\h'-0.15m'" \[rB]
-..
-.c ---------------------------------------------------------------------
-.c .ESCq name arg
-.c
-.c Synopsis for escape sequence with a bracketed long argument
-.c Args : 2 obligatory
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary text
-.c Result : prints \name'arg', where `name' is in CB, `arg' in I
-.c
-.de ESCq
-. if !(\n[.$] = 2) \
-. ab .ESCq needs exactly 2 argument.
-. ExecFF IP CB I "\[rs]\$1\[cq]" "\h'-0.3m'\$2" \[cq]
-..
-.c ---------------------------------------------------------------------
-.c .ESC? arg
-.c
-.c Synopsis for escape sequence with a bracketed long argument
-.c Args : 1 obligatory
-.c arg : arbitrary text
-.c Result : prints `\?arg?', where the `?' are in CB, `arg' in I
-.c
-.de ESC?
-. if !(\n[.$] = 1) \
-. ab .ESC? needs exactly 1 arguments.
-. ExecFF IP CB I \[rs]? "\$1" ?
-..
-.c ---------------------------------------------------------------------
-.c .esc name [punct]
-.c
-.c Reference of an escape sequence (no args), possibly punctuation
-.c Args : 1 obligatory
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c punct : arbitrary
-.c Result : prints \name, where `name' is in B, `punct' in R
-.c
-.de esc
-. if (\n[.$] < 1) \
-. ab .esc needs 1 or 2 arguments.
-. BR "\[rs]\$1" \$2
-..
-.c ---------------------------------------------------------------------
-.c .escarg name arg [punct]
-.c
-.c Reference of an escape sequence (no args)
-.c Args : 1 obligatory, 1 optional
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary word
-.c Result : prints \namearg, where
-.c `name' is in B, `arg' in I
-.c
-.de escarg
-. if (\n[.$] < 2) \
-. ab .esc needs 2 or 3 arguments.
-. Text \f[B]\[rs]\$1\f[]\f[I]\$2\f[]\$3
-..
-.c ---------------------------------------------------------------------
-.c .esc[] name arg [punct]
-.c
-.c Reference for escape sequence with a bracketed long argument
-.c Args : 2 obligatory
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary text
-.c Result : prints \name[arg], where `name' is in CB, `arg' in CI
-.c
-.de esc[]
-. if (\n[.$] < 2) \
-. ab .esc[] needs 2 or 3 arguments.
-. Text \f[B]\[rs]\$1\[lB]\f[]\f[I]\$2\f[]\f[B]\[rB]\f[]\$3
-..
-.
-.c ---------------------------------------------------------------------
-.c .escq name arg
-.c
-.c Reference for escape sequence with a bracketed long argument
-.c Args : 2 obligatory
-.c name : suitable name for an escape sequence (c, (xy, [long])
-.c arg : arbitrary text
-.c Result : prints \name'arg', where `name' is in CB, `arg' in CI
-.c
-.de escq
-. if (\n[.$] < 2) \
-. ab .escq needs 2 arguments.
-. Text \f[B]\[rs]\$1\[cq]\f[]\f[I]\$2\f[]\f[B]\[cq]\f[]\$3
-..
-.
-.c --------- strings ---------
-.
-.c synopsis for string, with \*[]
-.de STRING
-. ds @1 \$1\"
-. shift 1
-. TP 10n
-. ExecFF Text R CB \[rs]*[ \*[@1]\f[]\f[R]] \$*
-. rm @1
-..
-.c synopsis for a long string
-.de string
-. if (\n[.$] = 0) \
-. return
-. Text \f[CB]\[rs]*\[lB]\$1\[rB]\f[]\$2
-..
-.
-.
-.c --------- registers ---------
-.
-.c synopsis for registers, with \n[]
-.de REG
-. ds @1 \$1\"
-. shift 1
-. TP 10n
-. ExecFF Text R CB \[rs]n[ \*[@1]\f[]\f[R]] \$*
-. rm @1
-..
-.c reference of a register, without decoration
-.de register
-. Text register
-. BR \$*
-..
-.
-.ec
-.\" end of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH GROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff \- a short reference for the GNU roff language
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The name
-.I groff
-stands for
-.I GNU roff
-and is the free implementation of the roff type-setting system.
-.
-See
-.BR roff (@MAN7EXT@)
-for a survey and the background of the groff system.
-.
-.P
-This document gives only short descriptions of the predefined roff
-language elements as used in groff.
-.
-Both the classical features and the groff extensions are provided.
-.
-.P
-Historically, the
-.I roff language
-was called
-.IR troff .
-.I groff
-is compatible with the classical system and provides proper
-extensions.
-.
-So in GNU, the terms
-.IR roff ,
-.IR troff ,
-and
-.I groff language
-could be used as synonyms.
-.
-However
-.I troff
-slightly tends to refer more to the classical aspects, whereas
-.I groff
-emphasizes the GNU extensions, and
-.I roff
-is the general term for the language.
-.
-.P
-This file is only a short version of the complete documentation that
-is found in the
-.I groff
-.BR info (1)
-file, which contains more detailed, actual, and concise information.
-.
-.P
-The general syntax for writing groff documents is relatively easy, but
-writing extensions to the roff language can be a bit harder.
-.
-.P
-The roff language is line-oriented.
-.
-There are only two kinds of lines, control lines and text lines.
-.
-The control lines start with a control character, by default a period
-.dquoted_char .
-or a single quote
-.dquoted_char ' ;
-all other lines are text lines.
-.
-.P
-.B Control lines
-represent commands, optionally with arguments.
-.
-They have the following syntax.
-.
-The leading control character can be followed by a command name;
-arguments, if any, are separated by blanks from the command name and
-among themselves, for example,
-.RS
-.
-.P
-.Text .command_name arg1 arg2
-.RE
-.
-.P
-For indentation, any number of space or tab characters can be inserted
-between the leading control character and the command name, but the
-control character must be on the first position of the line.
-.
-.P
-.B Text lines
-represent the parts that will be printed.
-They can be modified by escape sequences, which are recognized by a
-leading backslash
-.squoted_char \[rs] .
-These are in-line or even in-word formatting elements or functions.
-.
-Some of these take arguments separated by single quotes
-.dquoted_char ' ,
-others are regulated by a length encoding introduced by an open
-parenthesis
-.squoted_char (
-or enclosed in brackets
-.squoted_char [
-and
-.squoted_char ] .
-.
-.P
-The roff language provides flexible instruments for writing language
-extension, such as macros.
-.
-When interpreting macro definitions, the roff system enters a special
-operating mode, called the
-.BR "copy mode" .
-.
-.P
-The copy mode behavior can be quite tricky, but there are some rules
-that ensure a safe usage.
-.
-.IP 1.
-Printable backslashes must be denoted as
-.esc e .
-To be more precise,
-.esc e
-represents the current escape character.
-.
-To get a backslash glyph, use
-.esc (rs
-or
-.esc [rs] .
-.IP 2.
-Double all backslashes.
-.IP 3.
-Begin all text lines with the special non-spacing character
-.esc & .
-.
-.P
-This does not produce the most efficient code, but it should work as a
-first measure.
-.
-For better strategies, see the groff info file and
-.BR groff_tmac (@MAN5EXT@).
-.
-.P
-Reading roff source files is easier, just reduce all double backslashes
-to a single one in all macro definitions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF ELEMENTS"
-.\" --------------------------------------------------------------------
-.
-The roff language elements add formatting information to a text file.
-.
-The fundamental elements are predefined commands and variables that
-make roff a full-blown programming language.
-.
-.P
-There are two kinds of roff commands, possibly with arguments.
-.B Requests
-are written on a line of their own starting with a dot
-.squoted_char .
-or a
-.dquoted_char ' ,
-whereas
-.B Escape sequences
-are in-line functions and in-word formatting elements starting with a
-backslash
-.squoted_char \[rs] .
-.
-.P
-The user can define her own formatting commands using the
-.request de
-request.
-.
-These commands are called
-.BR macros ,
-but they are used exactly like requests.
-.
-Macro packages are pre-defined sets of macros written in the groff
-language.
-.
-A user's possibilities to create escape sequences herself is very
-limited, only special characters can be mapped.
-.
-.P
-The groff language provides several kinds of variables with
-different interfaces.
-.
-There are pre-defined variables, but the user can define her own
-variables as well.
-.
-.P
-.B String
-variables store character sequences.
-.
-They are set with the
-.request ds
-request and retrieved by the
-.esc *
-escape sequences.
-.
-Strings can have variables.
-.
-.P
-.B Register
-variables can store numerical values, numbers with a scale unit, and
-occasionally string-like objects.
-.
-They are set with the
-.request nr
-request and retrieved by the
-.esc n
-escape sequences.
-.
-.P
-.B Environments
-allow the user to temporarily store global formatting parameters like
-line length, font size, etc.\& for later reuse.
-.
-This is done by the
-.request ev
-request.
-.
-.P
-.B Fonts
-are identified either by a name or by an internal number.
-.
-The current font is chosen by the
-.request ft
-request or by the
-.esc f
-escape sequences.
-.
-Each device has special fonts, but the following fonts are available
-for all devices.
-.B R
-is the standard font Roman.
-.B B
-is its
-.B bold
-counterpart.
-.
-The
-.I italic
-font is called
-.B I
-and is available everywhere, but on text devices it is displayed as an
-underlined Roman font.
-.
-For the graphical output devices, there exist constant-width pendants
-of these fonts,
-.BR CR ,
-.BR CI ,
-and
-.BR CB .
-On text devices, all characters have a constant width anyway.
-.
-.P
-Moreover, there are some advanced roff elements.
-.
-A
-.B diversion
-stores information into a macro for later usage.
-.
-A
-.B trap
-is a positional condition like a certain number of lines from page top
-or in a diversion or in the input.
-.
-Some action can be prescribed to be run automatically when the
-condition is met.
-.
-.P
-More detailed information and examples can be found in the groff info
-file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "CONTROL CHARACTERS"
-.\" --------------------------------------------------------------------
-.
-There is a small set of characters that have a special controlling
-task in certain conditions.
-.
-.TP
-.character .
-A dot is only special at the beginning of a line or after the
-condition in the requests
-.request if ,
-.request ie ,
-.request el ,
-and
-.request while .
-There it is the control character that introduces a request (or macro).
-.
-The special behavior can be delayed by using the
-.esc .
-escape.
-.
-By using the
-.request cc
-request, the control character can be set to a different character,
-making the dot
-.squoted_char .
-a non-special character.
-.IP ""
-In all other positions, it just means a dot character.
-.
-In text paragraphs, it is advantageous to start each sentence at a
-line of its own.
-.
-.TP
-.character '
-The single quote has two controlling tasks.
-.
-At the beginning of a line and in the conditional requests it is the
-non-breaking control character.
-.
-That means that it introduces a request like the dot, but with the
-additional property that this request doesn't cause a linebreak.
-.
-By using the
-.request c2
-request, the non-break control character can be set to a different
-character.
-.
-.IP ""
-As a second task, it is the most commonly used argument separator in
-some functional escape sequences (but any pair of characters not part
-of the argument will work).
-.
-In all other positions, it denotes the single quote or apostrophe
-character.
-.
-Groff provides a printable representation with the
-.esc (cq
-escape sequence.
-.
-.TP
-.character \[dq]
-The double quote is used to enclose arguments in requests, macros, and
-strings.
-.
-In the
-.request ds
-and
-.request as
-requests, a leading double quote in the argument will be stripped off,
-making everything else afterwards the string to be defined (enabling
-leading whitespace).
-.
-The escaped double quote
-.esc \[dq]
-introduces a comment.
-.
-Otherwise, it is not special.
-.
-Groff provides a printable representation with the
-.esc (dq
-escape sequence.
-.
-.TP
-.character \[rs]
-The backslash usually introduces an escape sequence (this can be
-changed with the
-.request ec
-request).
-.
-A printed version of the escape character is the
-.esc e
-escape; a backslash glyph can be obtained by
-.esc (rs .
-.TP
-.character (
-The open parenthesis is only special in escape sequences when
-introducing an escape name or argument consisting of exactly two
-characters.
-.
-In groff, this behavior can be replaced by the \f[CB][]\f[] construct.
-.TP
-.character [
-The opening bracket is only special in groff escape sequences; there
-it is used to introduce a long escape name or long escape argument.
-.
-Otherwise, it is non-special, e.g.\& in macro calls.
-.TP
-.character ]
-The closing bracket is only special in groff escape sequences; there
-it terminates a long escape name or long escape argument.
-.
-Otherwise, it is non-special.
-.TP
-\f[CI]space\f[]
-Space characters are only functional characters.
-.
-They separate the arguments in requests, macros, and strings, and the words
-in text lines.
-.
-They are subject to groff's horizontal spacing calculations.
-.
-To get a defined space width, escape sequences like
-.squoted_char "\[rs]\ "
-(this is the escape character followed by a space),
-.esc | ,
-.esc ^ ,
-or
-.esc h
-should be used.
-.
-.IP \f[CI]newline\f[]
-In text paragraphs, newlines mostly behave like space characters.
-.
-Continuation lines can be specified by an escaped newline, i.e., by
-specifying a backslash
-.squoted_char \[rs]
-as the last character of a line.
-.IP \f[CI]tab\f[]
-If a tab character occurs during text the interpreter makes a
-horizontal jump to the next pre-defined tab position.
-.
-There is a sophisticated interface for handling tab positions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NUMERICAL EXPRESSIONS"
-.\" --------------------------------------------------------------------
-.
-A
-.B numerical value
-is a signed or unsigned integer or float with or without an appended
-scaling indicator.
-.
-A
-.B scaling indicator
-is a one-character abbreviation for a unit of measurement.
-.
-A number followed by a scaling indicator signifies a size value.
-.
-By default, numerical values do not have a scaling indicator, i.e., they
-are normal numbers.
-.
-.P
-The
-.I roff
-language defines the following scaling indicators.
-.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.B c
-Centimeter
-.
-.TPx
-.B i
-Inch
-.
-.TPx
-.B P
-Pica\ \[eq]\ 1/6\ inch
-.
-.TPx
-.B p
-Point\ \[eq]\ 1/72\ inch
-.
-.TPx
-.B m
-Em\ \[eq]\ \f[R]the font size in points (width of letter `\f[CR]m\f[R]')
-.
-.TPx
-.B M
-100\^th \f[R]of an \f[CR]Em
-.
-.TPx
-.B n
-En\ \[eq]\ Em/2
-.
-.TPx
-.B u
-Basic unit for actual output device
-.
-.TPx
-.B v
-Vertical line space in basic units
-scaled point\ \[eq]\ 1/\f[CI]sizescale\f[R] of a point (defined in
-font \f[I]DESC\f[] file)
-.
-.TPx
-.B f
-Scale by 65536.
-.RE
-.PD
-.
-.P
-.B Numerical expressions
-are combinations of the numerical values defined above with the
-following arithmetical operators already defined in classical troff.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.B +
-Addition
-.
-.TPx
-.B \-
-Subtraction
-.
-.TPx
-.B *
-Multiplication
-.
-.TPx
-.B /
-Division
-.
-.TPx
-.B %
-Modulo
-.
-.TPx
-.B =
-Equals
-.
-.TPx
-.B ==
-Equals
-.
-.TPx
-.B <
-Less than
-.
-.TPx
-.B >
-Greater than
-.
-.TPx
-.B <=
-Less or equal
-.
-.TPx
-.B >=
-Greater or equal
-.
-.TPx
-.B &
-Logical and
-.
-.TPx
-.B :
-Logical or
-.
-.TPx
-.B !
-Logical not
-.
-.TPx
-.B (
-Grouping of expressions
-.
-.TPx
-.B )
-Close current grouping
-.
-.RE
-.PD
-.
-.P
-Moreover,
-.I groff
-added the following operators for numerical expressions:
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.ExecFF Text I CB e1 >? e2
-The maximum of
-.I e1
-and
-.IR e2 .
-.
-.TPx
-.ExecFF Text I CB e1 <? e2
-The minimum of
-.I e1
-and
-.IR e2 .
-.
-.TPx
-.ExecFF Text CB I ( c ; e )
-Evaluate
-.I e
-using
-.I c
-as the default scaling indicator.
-.
-.RE
-.PD
-.
-.P
-For details see the groff info file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH CONDITIONS
-.\" --------------------------------------------------------------------
-.
-.B Conditions
-occur in tests raised by the
-.request if ,
-.request ie ,
-and the
-.request while
-requests.
-.
-The following table characterizes the different types of conditions.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.I N
-A numerical expression
-.I N
-yields true if its value is greater than\~0.
-.
-.TPx
-.BI ! N
-True if the value of
-.I I
-is\~0.
-.
-.TPx
-.BI ' s1 ' s2 '
-True if string\~\c
-.I s1
-is identical to string\~\c
-.IR s2 .
-.
-.TPx
-.BI !' s1 ' s2 '
-True if string\~\c
-.I s1
-is not identical to string\~\c
-.IR s2 .
-.
-.TPx
-.BI c ch
-True if there is a character\~\c
-.I ch
-available.
-.
-.TPx
-.BI d name
-True if there is a string, macro, diversion, or request called
-.IR name .
-.
-.TPx
-.B e
-Current page number is even.
-.
-.TPx
-.B o
-Current page number is odd.
-.
-.TPx
-.BI m name
-True if there is a color called
-.IR name .
-.
-.TPx
-.B n
-Formatter is
-.BR nroff .
-.
-.TPx
-.BI r reg
-True if there is a register named
-.IR reg .
-.
-.TPx
-.B t
-Formatter is
-.BR troff .
-.
-.TPx
-.BI F font
-True if there exists a font named
-.IR font .
-.
-.TPx
-.BI S style
-True if a style named
-.I style
-has been registered.
-.
-.RE
-.PD
-.
-.
-.\" --------------------------------------------------------------------
-.SH REQUESTS
-.\" --------------------------------------------------------------------
-.
-This section provides a short reference for the predefined requests.
-.
-In groff, request and macro names can be arbitrarily long.
-.
-No bracketing or marking of long names is needed.
-.
-.P
-Most requests take one or more arguments.
-.
-The arguments are separated by space characters (no tabs!); there is
-no inherent limit for their length or number.
-.
-An argument can be enclosed by a pair of double quotes.
-.
-This is very handy if an argument contains space characters, e.g.,
-.RI \[dq] "arg with space" \[dq]
-denotes a single argument.
-.
-.P
-Some requests have optional arguments with a different behaviour.
-.
-Not all of these details are outlined here.
-.
-Refer to the groff info file and
-.BR groff_diff (@MAN7EXT@)
-for all details.
-.
-.P
-In the following request specifications, most argument names were
-chosen to be descriptive.
-.
-Only the following denotations need clarification.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.I c
-denotes a single character.
-.
-.TPx
-.I font
-a font either specified as a font name or a font number.
-.
-.TPx
-.I anything
-all characters up to the end of the line or within
-.esc {
-and
-.esc } .
-.
-.TPx
-.I n
-is a numerical expression that evaluates to an integer value.
-.
-.TPx
-.I N
-is an arbitrary numerical expression, signed or unsigned.
-.
-.TPx
-.I \[+-]N
-has three meanings depending on its sign, described below.
-.
-.RE
-.PD
-.
-.P
-If an expression defined as
-.I \[+-]N
-starts with a
-.squoted_char +
-sign the resulting value of the expression will be added to an already
-existing value inherent to the related request, e.g.\& adding to a number
-register.
-.
-If the expression starts with a
-.squoted_char -
-the value of the expression will be subtracted from the request value.
-.
-.P
-Without a sign,
-.I N
-replaces the existing value directly.
-.
-To assign a negative number either prepend\~0 or enclose the negative
-number in parentheses.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Request Short Reference"
-.\" --------------------------------------------------------------------
-.
-.PD 0
-.
-.REQ .
-Empty line, ignored.
-.
-Useful for structuring documents.
-.
-.REQ .\[rs]\[dq] anything
-Complete line is a comment.
-.
-.REQ .ab string
-Print
-.I string
-on standard error, exit program.
-.
-.REQ .ad
-Begin line adjustment for output lines in current adjust mode.
-.
-.REQ .ad c
-Start line adjustment in mode
-.I c
-(\f[CI]c\f[]\f[CR]\|\^\[eq]\|l,r,b,n\f[]).
-.
-.REQ .af register c
-Assign format
-.I c
-to
-.I register
-(\f[CI]c\f[]\f[CR]\|\^\[eq]\|l,i,I,a,A\f[]).
-.
-.REQ .aln alias register
-Create alias name for
-.IR register .
-.
-.REQ .als alias object
-Create alias name for request, string, macro, or diversion
-.IR object .
-.
-.REQ .am macro
-Append to
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.REQ .am macro end
-Append to
-.I macro
-until
-.request .end
-is called.
-.
-.REQ .am1 macro
-Same as
-.request .am
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .am1 macro end
-Same as
-.request .am
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .ami macro
-Append to a macro whose name is contained in the string register
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.REQ .ami macro end
-Append to a macro indirectly.
-.I macro
-and
-.I end
-are string registers whose contents are interpolated for the macro name
-and the end macro, respectively.
-.
-.REQ .ami1 macro
-Same as
-.request .ami
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .ami1 macro end
-Same as
-.request .ami
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .as stringvar anything
-Append
-.I anything
-to
-.IR stringvar .
-.
-.REQ .as1 stringvar anything
-Same as
-.request .as
-but with compatibility mode switched off during string expansion.
-.
-.REQ .asciify diversion
-Unformat ASCII characters, spaces, and some escape sequences in
-.IR diversion .
-.
-.REQ .backtrace
-Print a backtrace of the input on stderr.
-.
-.REQ .bd font N
-Embolden
-.I font
-by
-.IR N -1
-units.
-.
-.REQ .bd S font N
-Embolden Special Font
-.I S
-when current font is
-.IR font .
-.
-.REQ .blm
-Unset the blank line macro.
-.
-.REQ .blm macro
-Set the blank line macro to
-.IR macro .
-.
-.REQ .box
-End current diversion.
-.
-.REQ .box macro
-Divert to
-.IR macro ,
-omitting a partially filled line.
-.
-.REQ .boxa
-End current diversion.
-.
-.REQ .boxa macro
-Divert and append to
-.IR macro ,
-omitting a partially filled line.
-.
-.REQ .bp
-Eject current page and begin new page.
-.
-.REQ .bp \[+-]N
-Eject current page; next page number
-.IR \[+-]N .
-.
-.REQ .br
-Line break.
-.
-.REQ .brp
-Break and spread output line.
-Same as
-.esc p .
-.
-.REQ .break
-Break out of a while loop.
-.
-.REQ .c2
-Reset no-break control character to
-.dquoted_char ' .
-.
-.REQ .c2 c
-Set no-break control character to
-.IR c .
-.
-.REQ .cc
-Reset control character to
-.squoted_char . .
-.
-.REQ .cc c
-Set control character to
-.IR c .
-.
-.REQ .ce
-Center the next input line.
-.
-.REQ .ce N
-Center following
-.I N
-input lines.
-.
-.REQ .cf filename
-Copy contents of file
-.I filename
-unprocessed to stdout or to the diversion.
-.
-.REQ .cflags mode c1 c2 .\|.\|.\&
-Treat characters
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-according to
-.I mode
-number.
-.
-.REQ .ch trap N
-Change
-.I trap
-location
-to
-.I N .
-.
-.REQ .char c anything
-Define character
-.I c
-as string
-.IR anything .
-.
-.REQ .chop object
-Chop the last character off macro, string, or diversion
-.IR object .
-.
-.REQ .close stream
-Close the
-.IR stream .
-.
-.REQ .color
-Enable colors.
-.
-.REQ .color N
-If
-.I N
-is zero disable colors, otherwise enable them.
-.
-.REQ .composite from to
-Map glyph name
-.I from
-to glyph name
-.I to
-while constructing a composite glyph name.
-.
-.REQ .continue
-Finish the current iteration of a while loop.
-.
-.REQ .cp
-Enable compatibility mode.
-.
-.REQ .cp N
-If
-.I N
-is zero disable compatibility mode, otherwise enable it.
-.
-.REQ .cs font N M
-Set constant character width mode for
-.I font
-to
-.IR N /36
-ems with em
-.IR M .
-.
-.REQ .cu N
-Continuous underline in nroff, like
-.request .ul
-in troff.
-.
-.REQ .da
-End current diversion.
-.
-.REQ .da macro
-Divert and append to
-.IR macro .
-.
-.REQ .de macro
-Define or redefine
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.REQ .de macro end
-Define or redefine
-.I macro
-until
-.request .end
-is called.
-.
-.REQ .de1 macro
-Same as
-.request .de
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .de1 macro end
-Same as
-.request .de
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .defcolor color scheme component
-Define or redefine a color with name
-.IR color .
-.I scheme
-can be
-.BR rgb ,
-.BR cym ,
-.BR cymk ,
-.BR gray ,
-or
-.BR grey .
-.I component
-can be single components specified as fractions in the range 0 to 1
-(default scaling indicator\~\c
-.scaleindicator f ),
-as a string of two-digit hexadecimal color components with a leading
-.BR # ,
-or as a string of four-digit hexadecimal components with two leading
-.BR # .
-The color
-.B default
-can't be redefined.
-.
-.REQ .dei macro
-Define or redefine a macro whose name is contained in the string register
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.REQ .dei macro end
-Define or redefine a macro indirectly.
-.I macro
-and
-.I end
-are string registers whose contents are interpolated for the macro name
-and the end macro, respectively.
-.
-.REQ .dei1 macro
-Same as
-.request .dei
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .dei1 macro end
-Same as
-.request .dei
-but with compatibility mode switched off during macro expansion.
-.
-.REQ .di
-End current diversion.
-.
-.REQ .di macro
-Divert to
-.I macro .
-.
-.REQ .do name
-Interpret
-.request .name
-with compatibility mode disabled.
-.
-.REQ .ds stringvar anything
-Set
-.I stringvar
-to
-.IR anything .
-.
-.REQ .ds1 stringvar anything
-Same as
-.request .ds
-but with compatibility mode switched off during string expansion.
-.
-.REQ .dt N trap
-Set diversion trap to position
-.I N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.REQ .ec
-Reset escape character to
-.squoted_char \[rs] .
-.
-.REQ .ec c
-Set escape character to
-.IR c .
-.
-.REQ .ecr
-Restore escape character saved with
-.request .ecs .
-.
-.REQ .ecs
-Save current escape character.
-.
-.REQ .el anything
-Else part for if-else (\c
-.request ie )
-request.
-.
-.REQ .em macro
-The
-.I macro
-will be run after the end of input.
-.
-.REQ .eo
-Turn off escape character mechanism.
-.
-.REQ .ev
-Switch to previous environment.
-.
-.REQ .ev env
-Push down environment number or name
-.I env
-and switch to it.
-.
-.REQ .evc env
-Copy the contents of environment
-.I env
-to the current environment.
-No pushing or popping.
-.
-.REQ .ex
-Exit from roff processing.
-.
-.REQ .fam
-Return to previous font family.
-.
-.REQ .fam name
-Set the current font family to
-.IR name .
-.
-.REQ .fc
-Disable field mechanism.
-.
-.REQ .fc a
-Set field delimiter to
-.I a
-and pad character to space.
-.
-.REQ .fc a b
-Set field delimiter to
-.I a
-and pad character to
-.IR b .
-.
-.REQ .fchar c anything
-Define fallback character
-.I c
-as string
-.IR anything .
-.
-.REQ .fcolor
-Set fill color to previous fill color.
-.
-.REQ .fcolor c
-Set fill color to
-.IR c .
-.
-.REQ .fi
-Fill output lines.
-.
-.REQ .fl
-Flush output buffer.
-.
-.REQ .fp n font
-Mount
-.I font
-on position
-.IR n .
-.
-.REQ .fp n internal external
-Mount font with long
-.I external
-name to short
-.I internal
-name on position
-.IR n .
-.
-.REQ .fschar f c anything
-Define fallback character
-.I c
-for font
-.I f
-as string
-.IR anything .
-.
-.REQ .fspecial font
-Reset list of special fonts for
-.I font
-to be empty.
-.
-.REQ .fspecial font s1 s2 .\|.\|.\&
-When the current font is
-.IR font ,
-then the fonts
-.IR s1 ,
-.IR s2 ,
-.I .\|.\|.\&
-will be special.
-.
-.REQ .ft
-Return to previous font.
-Same as
-.request \[rs]f[]
-or
-.request \[rs]fP .
-.
-.REQ .ft font
-Change to font name or number
-.IR font ;
-same as
-.esc[] f font
-escape sequence.
-.
-.REQ .ftr font1 font2
-Translate
-.I font1
-to
-.IR font2 .
-.
-.REQ .gcolor
-Set glyph color to previous glyph color.
-.
-.REQ .gcolor c
-Set glyph color to
-.IR c .
-.
-.REQ .hc
-Remove additional hyphenation indicator character.
-.
-.REQ .hc c
-Set up additional hyphenation indicator character\~\c
-.IR c .
-.
-.REQ .hcode c1 code1 c2 code2 .\|.\|.\&
-Set the hyphenation code of character
-.I c1
-to
-.IR code1 ,
-that of
-.I c2
-to
-.IR code2 ,
-etc.
-.
-.REQ .hla lang
-Set the current hyphenation language to
-.IR lang .
-.
-.REQ .hlm n
-Set the maximum number of consecutive hyphenated lines to
-.IR n .
-.
-.REQ .hpf file
-Read hyphenation patterns from
-.IR file .
-.
-.REQ .hpfa file
-Append hyphenation patterns from
-.IR file .
-.
-.REQ .hpfcode file
-Set input mapping for
-.request .hpf .
-.
-.REQ .hw words
-List of
-.I words
-with exceptional hyphenation.
-.
-.REQ .hy N
-Switch to hyphenation mode
-.IR N .
-.
-.REQ .hym n
-Set the hyphenation margin to
-.I n
-(default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .hys n
-Set the hyphenation space to
-.IR n .
-.
-.REQ .ie cond anything
-If
-.I cond
-then
-.I anything
-else goto
-.request .el .
-.
-.REQ .if cond anything
-If
-.I cond
-then
-.IR anything ;
-otherwise do nothing.
-.
-.REQ .ig
-Ignore text until
-.B ..\&
-is encountered.
-.
-.REQ .ig end
-Ignore text until
-.request .end .
-.
-.REQ .in
-Change to previous indent value.
-.
-.REQ .in \[+-]N
-Change indent according to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .it N trap
-Set an input-line count trap for the next
-.I N
-lines.
-.
-.REQ .itc N trap
-Same as
-.request .it
-but count lines interrupted with
-.esc c
-as one line.
-.
-.REQ .kern
-Enable pairwise kerning.
-.
-.REQ .kern n
-If
-.I n
-is zero, disable pairwise kerning, otherwise enable it.
-.
-.REQ .lc
-Remove leader repetition character.
-.
-.REQ .lc c
-Set leader repetition character to\~\c
-.IR c .
-.
-.REQ .length register anything
-Write the length of the string
-.I anything
-in
-.IR register .
-.
-.REQ .linetabs
-Enable line-tabs mode (i.e., calculate tab positions relative to output
-line).
-.
-.REQ .linetabs n
-If
-.I n
-is zero, disable line-tabs mode, otherwise enable it.
-.
-.REQ .lf N
-Set input line number to
-.IR N .
-.
-.REQ .lf N file
-Set input line number to
-.I N
-and filename to
-.IR file .
-.
-.REQ .lg N
-Ligature mode on if
-.IR N >0.
-.
-.REQ .ll
-Change to previous line length.
-.
-.REQ .ll \[+-]N
-Set line length according to
-.I \[+-]N
-(default size
-.scalednumber 6.5 i ,
-default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .ls
-Change to the previous value of additional intra-line skip.
-.
-.REQ .ls N
-Set additional intra-line skip value to
-.IR N ,
-i.e.,
-.IR N -1
-blank lines are inserted after each text output line.
-.
-.REQ .lt \[+-]N
-Length of title (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .mc
-Margin character off.
-.
-.REQ .mc c
-Print character
-.I c
-after each text line at actual distance from right margin.
-.
-.REQ .mc c N
-Set margin character to
-.I c
-and distance to
-.I N
-from right margin (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .mk register
-Mark current vertical position in
-.IR register .
-.
-.REQ .mso file
-The same as the .so request except that
-.I file
-is searched in the tmac directories.
-.
-.REQ .na
-No output-line adjusting.
-.
-.REQ .ne
-Need a one-line vertical space.
-.
-.REQ .ne N
-Need
-.I N
-vertical space (default scaling indicator\~\c
-.scaleindicator v ).
-.
-.REQ .nf
-No filling or adjusting of output-lines.
-.
-.REQ .nh
-No hyphenation.
-.
-.REQ .nm
-Number mode off.
-.
-.REQ .nm \[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP
-In line number mode, set number, multiple, spacing, and indent.
-.
-.REQ .nn
-Do not number next line.
-.
-.REQ .nn N
-Do not number next
-.I N
-lines.
-.
-.REQ .nop anything
-Always execute
-.IR anything .
-.
-.REQ .nr register \[+-]N M
-Define or modify
-.I register
-using
-.I \[+-]N
-with auto-increment
-.IR M .
-.
-.REQ .nroff
-Make the built-in condition
-.B n
-true and
-.B t
-false.
-.
-.REQ .ns
-Turn no-space mode on.
-.
-.REQ .nx
-Immediately jump to end of current file.
-.
-.REQ .nx filename
-Next file.
-.
-.REQ .open stream filename
-Open
-.register filename
-for writing and associate the stream named
-.register stream
-with it.
-.
-.REQ .opena stream filename
-Like
-.request .open
-but append to it.
-.
-.REQ .os
-Output vertical distance that was saved by the
-.request sv
-request.
-.
-.REQ .output string
-Emit
-.I string
-directly to intermediate output, allowing leading whitespace if
-.I string
-starts with
-.character \[dq]
-(which will be stripped off).
-.
-.REQ .pc
-Reset page number character to\~\c
-.squoted_char % .
-.
-.REQ .pc c
-Page number character.
-.
-.REQ .pi program
-Pipe output to
-.I program
-(nroff only).
-.
-.REQ .pl
-Set page length to default
-.scalednumber 11 i .
-The current page length is stored in
-.register .p .
-.
-.REQ .pl \[+-]N
-Change page length to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.REQ .pm
-Print macro names and sizes (number of blocks of 128 bytes).
-.
-.REQ ".pm t"
-Print only total of sizes of macros (number of 128 bytes blocks).
-.
-.REQ .pn \[+-]N
-Next page number
-.IR N .
-.
-.REQ .pnr
-Print the names and contents of all currently defined number registers
-on stderr.
-.
-.REQ .po
-Change to previous page offset.
-.
-The current page offset is available in
-.register .o .
-.
-.REQ .po \[+-]N
-Page offset
-.IR N .
-.
-.REQ .ps
-Return to previous point-size.
-.REQ .ps \[+-]N
-Point size; same as
-.esc[] s \[+-]N .
-.
-.REQ .psbb filename
-Get the bounding box of a PostScript image
-.IR filename .
-.
-.REQ .pso command
-This behaves like the
-.request so
-request except that input comes from the standard output of
-.IR command .
-.
-.REQ .ptr
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr.
-.
-.REQ .pvs
-Change to previous post-vertical line spacing.
-.
-.REQ .pvs \[+-]N
-Change post-vertical line spacing according to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator p ).
-.
-.REQ .rchar c1 c2 .\|.\|.\&
-Remove the definitions of characters
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-.
-.REQ .rd prompt
-Read insertion.
-.
-.REQ .return
-Return from a macro.
-.
-.REQ .return anything
-Return twice, namely from the macro at the current level and from the macro
-one level higher.
-.
-.REQ .rfschar f c1 c2 .\|.\|.\&
-Remove the definitions of characters
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-for font
-.IR f .
-.
-.REQ .rj n
-Right justify the next
-.I n
-input lines.
-.
-.REQ .rm name
-Remove request, macro, or string
-.IR name .
-.
-.REQ .rn old new
-Rename request, macro, or string
-.I old
-to
-.IR new .
-.
-.REQ .rnn reg1 reg2
-Rename register
-.I reg1
-to
-.IR reg2 .
-.
-.REQ .rr register
-Remove
-.IR register .
-.
-.REQ .rs
-Restore spacing; turn no-space mode off.
-.
-.REQ .rt \[+-]N
-Return
-.I (upward only)
-to marked vertical place (default scaling indicator\~\c
-.scaleindicator v ).
-.
-.REQ .schar c anything
-Define global fallback character
-.I c
-as string
-.IR anything .
-.
-.REQ .shc
-Reset soft hyphen character to
-.esc (hy .
-.
-.REQ .shc c
-Set the soft hyphen character to
-.IR c .
-.
-.REQ .shift n
-In a macro, shift the arguments by
-.IR n \~\c
-positions.
-.
-.REQ .sizes s1 s2 .\|.\|.\& sn \fB[0]\fP
-Set available font sizes similar to the
-.B sizes
-command in a
-.B DESC
-file.
-.
-.REQ .so filename
-Include source file.
-.
-.REQ .sp
-Skip one line vertically.
-.
-.REQ .sp N
-Space vertical distance
-.I N
-up or down according to sign of
-.I N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.REQ .special
-Reset global list of special fonts to be empty.
-.
-.REQ .special s1 s2 .\|.\|.\&
-Fonts
-.IR s1 ,
-.IR s2 ,
-etc.\& are special and will be searched for characters not in the
-current font.
-.
-.REQ .spreadwarn
-Toggle the spread warning on and off without changing its value.
-.
-.REQ .spreadwarn limit
-Emit a warning if each space in an output line is widened by
-.I limit
-or more (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .ss N
-Space-character size set to
-.IR N /12
-of the spacewidth in the current font.
-.
-.REQ .ss N M
-Space-character size set to
-.IR N /12
-and sentence space size set to
-.IR M /12
-of the spacewidth in the current font (\f[CR]\[eq]1/3 em\f[]).
-.
-.REQ .sty n style
-Associate
-.I style
-with font position
-.IR n .
-.
-.REQ .substring xx n1 n2
-Replace the string named
-.I xx
-with the substring defined by the indices
-.I n1
-and
-.IR n2 .
-.
-.REQ .sv
-Save
-.scalednumber 1 v
-of vertical space.
-.
-.REQ .sv N
-Save the vertical distance
-.I N
-for later output with
-.request os
-request.
-.
-.REQ .sy command-line
-Execute program
-.IR command-line .
-.
-.REQ ".ta T" N
-Set tabs after every position that is a multiple of
-.I N
-(default scaling indicator\~\c
-.scaleindicator m ).
-.REQ .ta n1 n2 .\|.\|.\& nn \f[CB]T\f[] r1 r2 .\|.\|.\& rn
-Set tabs at positions
-.IR n1 ,
-.IR n2 ,
-.Text .\|.\|.,
-.IR nn ,
-then set tabs at
-.IR nn + r1 ,
-.IR nn + r2 ,
-.Text .\|.\|.,
-.IR nn + rn ,
-then at
-.IR nn + rn + r1 ,
-.IR nn + rn + r2 ,
-.Text .\|.\|.,
-.IR nn + rn + rn ,
-and so on.
-.
-.\".REQ .tar
-.\"Restore internally saved tab positions.
-.\".
-.\".REQ .tas
-.\"Save tab positions internally.
-.
-.REQ .tc
-Remove tab repition character.
-.REQ .tc c
-Set tab repetition character to\~\c
-.IR c .
-.
-.REQ .ti \[+-]N
-Temporary indent next line (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.REQ .tkf font s1 n1 s2 n2
-Enable track kerning for
-.IR font .
-.
-.REQ .tl \f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\f[CB]\[cq]\f[]
-Three-part title.
-.
-.REQ .tm anything
-Print
-.I anything
-on terminal (UNIX standard message output).
-.
-.REQ .tm1 anything
-Print
-.I anything
-on terminal (UNIX standard message output), allowing leading
-whitespace if
-.I anything
-starts with
-.character \[dq]
-(which will be stripped off).
-.
-.REQ .tmc anything
-Similar to
-.request .tm1
-without emitting a final newline.
-.
-.REQ .tr abcd.\|.\|.\&
-Translate
-.I a
-to
-.IR b ,
-.I c
-to
-.IR d ,
-etc.\& on output.
-.
-.REQ .trf filename
-Transparently output the contents of file
-.IR filename .
-.
-.REQ .trin abcd.\|.\|.\&
-This is the same as the
-.request tr
-request except that the
-.B asciify
-request will use the character code (if any) before the character
-translation.
-.
-.REQ .trnt abcd.\|.\|.\&
-This is the same as the
-.request tr
-request except that the translations do not apply to text that is
-transparently throughput into a diversion with
-.esc ! .
-.
-.REQ .troff
-Make the built-in condition
-.B t
-true and
-.B n
-false.
-.
-.REQ .uf font
-Underline font set to
-.I font
-(to be switched to by
-.request .ul ).
-.
-.REQ .ul N
-Underline (italicize in troff)
-.I N
-input lines.
-.
-.REQ .unformat diversion
-Unformat space characters and tabs, preserving font information in
-.IR diversion .
-.REQ .vpt n
-Enable vertical position traps if
-.I n
-is non-zero, disable them otherwise.
-.
-.REQ .vs
-Change to previous vertical base line spacing.
-.
-.REQ .vs \[+-]N
-Set vertical base line spacing according to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator p ).
-Default value is
-.scalednumber 12 p .
-.
-.REQ .warn n
-Set warnings code to
-.IR n .
-.
-.REQ .warnscale si
-Set scaling indicator used in warnings to
-.IR si .
-.
-.REQ .wh N
-Remove (first) trap at position
-.IR N .
-.
-.REQ .wh N trap
-Set location trap; negative means from page bottom.
-.
-.REQ .while cond anything
-While condition
-.I cond
-is true, accept
-.I anything
-as input.
-.
-.REQ .write stream anything
-Write
-.I anything
-to the stream named
-.IR stream .
-.
-.REQ .writec stream anything
-Similar to
-.request .write
-without emitting a final newline.
-.
-.REQ .writem stream xx
-Write contents of macro or string
-.I xx
-to the stream named
-.IR stream .
-.
-.PD
-.
-.P
-Besides these standard groff requests, there might be further macro
-calls.
-They can originate from a macro package (see
-.BR roff (@MAN7EXT@)
-for an overview) or from a preprocessor.
-.
-.P
-Preprocessor macros are easy to be recognized.
-.
-They enclose their code into a pair of characteristic macros.
-.
-.P
-.TS
-box, center, tab (@);
-c | c | c
-CfCB | CfCB | CfCB.
-preprocessor@start macro@ end macro
-=
-eqn@.PS@.PE
-grap@.G1@.G2
-grn@.GS@.GE
-pic@.PS@.PE
-refer@.R1@.R2
-soelim@\f[I]none@\f[I]none
-tbl@.TS@.TE
-.TE
-.P
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ESCAPE SEQUENCES"
-.\" --------------------------------------------------------------------
-.
-Escape sequences are in-line language elements usually introduced by a
-backslash
-.squoted_char \[rs]
-and followed by an escape name and sometimes by a required argument.
-.
-Input processing is continued directly after the escaped character or
-the argument resp.\& without an intervening separation character.
-.
-So there must be a way to determine the end of the escape name and the
-end of the argument.
-.
-.P
-This is done by enclosing names (escape name and arguments consisting
-of a variable name) by a pair of brackets
-.BI \[lB] name \[rB]
-and constant arguments (number expressions and characters) by
-apostrophes (ASCII 0x27) like
-.BI \[cq] constant \[cq] \f[R].
-.
-.P
-There are abbreviations for short names.
-.
-Two character escape names can be specified by an opening parenthesis
-like
-.esc ( xy
-without a closing counterpart.
-.
-And all one-character names different from the special characters
-.squoted_char [
-and
-.squoted_char (
-can even be specified without a marker in the form
-.esc c .
-.
-.P
-Constant arguments of length\~1 can omit the marker apostrophes, too,
-but there is no two-character analogue.
-.
-.P
-While 1-character escape sequences are mainly used for in-line
-functions and system related tasks, the 2-letter names following the
-.esc (
-construct are used for special characters predefined by the roff system.
-.
-Escapes sequences with names of more than two characters
-.esc[] "" name
-denote user defined named characters (see the
-.request char
-request).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Single Character Escapes"
-.\" --------------------------------------------------------------------
-.
-.PD 0
-.
-.\" --------- comments ---------
-.
-.ESC \[dq]
-Beginning of a comment.
-.
-Everything up to the end of the line is ignored.
-.
-.ESC #
-Everything up to and including the next newline is ignored.
-.
-This is interpreted in copy mode.
-.
-This is like
-.esc \[dq]
-except that the terminating newline is ignored as well.
-.
-.\" --------- strings ---------
-.
-.ESC *\f[I]s\f[]
-The string stored in the string variable with 1-character name
-.IR s .
-.
-.ESC *(\f[I]st\f[]
-The string stored in the string variable with 2-character name
-.IR st .
-.
-.ESC[] * "stringvar arg1 arg2 .\|.\|."
-The string stored in the string variable with arbitrary length name
-.IR stringvar ,
-taking
-.IR arg1 ,
-.IR arg2 ,
-.I .\|.\|.\&
-as arguments.
-.
-.\" --------- macro arguments ---------
-.
-.ESC $0
-The name by which the current macro was invoked.
-.
-The
-.request als
-request can make a macro have more than one name.
-.
-.ESC $ x
-Macro or string argument with 1-place number
-.IR x ,
-where
-.I x
-is a digit between 1 and 9.
-.
-.ESC $( xy
-Macro or string argument with 2-digit number
-.IR xy .
-.
-.ESC[] $ nexp
-Macro or string argument with number
-.IR nexp ,
-where
-.I nexp
-is a numerical expression evaluating to an integer \[>=]1.
-.
-.ESC $*
-In a macro or string, the concatenation of all the arguments separated
-by spaces.
-.
-.ESC $@
-In a macro or string, the concatenation of all the arguments with each
-surrounded by double quotes, and separated by spaces.
-.
-.\" --------- escaped characters ---------
-.
-.ESC \[rs]
-reduces to a single backslash; useful to delay its interpretation as
-escape character in copy mode.
-.
-For a printable backslash, use
-.esc e ,
-or even better
-.esc [rs] ,
-to be independent from the current escape character.
-.
-.ESC \[cq]
-The acute accent \[aa]; same as
-.esc (aa .
-Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27).
-.
-.ESC `
-The grave accent \[ga]; same as
-.esc (ga .
-Unescaped: left quote, backquote (ASCII 0x60).
-.
-.ESC \-
-The \- sign in the current font.
-.
-.ESC .
-An uninterpreted dot (period), even at start of line.
-.
-.ESC %
-Default optional hyphenation character.
-.
-.ESC !
-Transparent line indicator.
-.
-.ESC? anything
-In a diversion, this will transparently embed
-.I anything
-in the diversion.
-.I anything
-is read in copy mode.
-.
-See also the escape sequences
-.esc !
-and
-.esc ? .
-.
-.
-.\" --------- spacing ---------
-.
-.ESC \& space
-Unpaddable space-size space character (no line break).
-.
-.ESC 0
-Digit width.
-.
-.ESC |
-1/6\ em narrow space character; zero width in nroff.
-.
-.ESC ^
-1/12\ em half-narrow space character; zero width in nroff.
-.
-.ESC &
-Non-printable, zero width character.
-.
-.ESC )
-Like
-.esc &
-except that it behaves like a character declared with the cflags
-request to be transparent for the purposes of end of sentence
-recognition.
-.
-.ESC /
-Increases the width of the preceding character so that the spacing
-between that character and the following character will be correct if
-the following character is a roman character.
-.
-.ESC ,
-Modifies the spacing of the following character so that the spacing
-between that character and the preceding character will correct if the
-preceding character is a roman character.
-.
-.ESC ~
-Unbreakable space that stretches like a normal inter-word space when a
-line is adjusted.
-.
-.ESC :
-Inserts a zero-width break point (similar to
-.esc %
-but without a soft hyphen character).
-.
-.ESC "" newline
-Ignored newline, for continuation lines.
-.
-.\" --------- structuring ---------
-.
-.ESC {
-Begin conditional input.
-.
-.ESC }
-End conditional input.
-.
-.\" --------- longer escape names ---------
-.
-.ESC ( sc
-The special character with 2-character name
-.IR sc ,
-see section
-.BR "Special Characters" .
-.
-.ESC[] "" name
-The named character (or rather glyph) with arbitrary length name
-.IR name .
-.
-.ESC[] "" "comp1 comp2 .\|.\|."
-A composite glyph with components
-.IR comp1 ,
-.IR comp2 ,
-.I .\|.\|.
-.
-.\" --------- alphabetical escapes ---------
-.
-.ESC a
-Non-interpreted leader character.
-.
-.ESCq A anything
-If
-.I anything
-is acceptable as a name of a string, macro, diversion, register,
-environment or font it expands to\~1, and to\~0 otherwise.
-.
-.ESCq b abc.\|.\|.\&
-Bracket building function.
-.
-.ESCq B anything
-If
-.I anything
-is acceptable as a valid numeric expression it expands to\~1, and
-to\~0 otherwise.
-.
-.ESC c
-Interrupt text processing.
-.
-.ESCq C char
-The character called
-.IR char ;
-same as
-.esc[] "" char ,
-but compatible to other roff versions.
-.
-.ESC d
-Forward (down) 1/2 em vertical unit (1/2 line in nroff).
-.
-.ESCq D charseq
-Draw a graphical element defined by the characters in
-.IR charseq ;
-see groff info file for details.
-.
-.ESC e
-Printable version of the current escape character.
-.
-.ESC E
-Equivalent to an escape character, but is not interpreted in copy-mode.
-.
-.ESC f F
-Change to font with 1-character name or 1-digit number
-.IR F .
-.
-.ESC fP
-Switch back to previous font.
-.
-.ESC f( fo
-Change to font with 2-character name or 2-digit number
-.IR fo .
-.
-.ESC[] f font
-Change to font with arbitrary length name or number expression
-.IR font .
-.
-.ESC[] f ""
-Switch back to previous font.
-.
-.ESC F f
-Change to font family with 1-character name
-.IR f .
-.
-.ESC F( fm
-Change to font family with 2-character name
-.IR fm .
-.
-.ESC[] F fam
-Change to font family with arbitrary length name
-.IR fam .
-.
-.ESC[] F ""
-Switch back to previous font family.
-.
-.ESC[] g reg
-Return format of register with name
-.I reg
-suitable for
-.request .af .
-.
-Alternative forms
-.escarg g( xy
-and
-.escarg g x .
-.
-.ESCq h N
-Local horizontal motion; move right
-.I N
-(left if negative).
-.
-.ESCq H N
-Set height of current font to
-.IR N .
-.
-.ESC[] k reg
-Mark horizontal input place in register with arbitrary length name
-.IR reg .
-Alternative forms
-.escarg k( xy
-and
-.escarg k x .
-.
-.ESCq l Nc
-Horizontal line drawing function (optionally using character
-.IR c ).
-.
-.ESCq L Nc
-Vertical line drawing function (optionally using character
-.IR c ).
-.
-.ESC[] m color
-Change to color
-.IR color .
-.
-Alternative forms
-.escarg m( co
-and
-.escarg m c .
-.
-.ESC[] m ""
-Switch back to previous color.
-.
-.ESC[] M color
-Change filling color for closed drawn objects to color
-.IR color .
-.
-Alternative forms
-.escarg M( co
-and
-.escarg M c .
-.
-.ESC[] M ""
-Switch to previous fill color.
-.
-.ESC n r
-The numerical value stored in the register variable with the
-1-character name
-.IR r .
-.
-.ESC n( re
-The numerical value stored in the register variable with the
-2-character name
-.IR re .
-.
-.ESC[] n reg
-The numerical value stored in the register variable with arbitrary
-length name
-.IR reg .
-.
-.ESCq N n
-Typeset the character with code
-.I n
-in the current font, no special fonts are searched.
-.
-Useful for adding characters to a font using the
-.request char
-request.
-.
-.ESCq o abc.\|.\|.\&
-Overstrike characters
-.IR a ,
-.IR b ,
-.IR c ,
-etc.
-.
-.ESC O 0
-Disable glyph output.
-.
-Mainly for internal use.
-.
-.ESC O 1
-Enable glyph output.
-.
-Mainly for internal use.
-.
-.ESC p
-Break and spread output line.
-.
-.ESC r
-Reverse 1\ em vertical motion (reverse line in nroff).
-.
-.ESCq R "name\~\[+-]n"
-The same as
-.request .nr
-.I name
-.IR \[+-]n .
-.
-.ESC[] s \[+-]N
-Set the point size to
-.I N
-scaled points.
-.
-Note the alternative forms
-.BI \[rs]s \[+-] [ N ]\c
-,
-.BI \[rs]s' \[+-]N '\c
-.Text ,
-.BI \[rs]s \[+-] ' N '\c
-.Text ,
-.escarg s( \[+-]xy\c
-.Text ,
-.BI \[rs]s \[+-] ( xy\c
-.Text ,
-.escarg s \[+-]x .
-Same as
-.request ps
-request.
-.
-.ESCq S N
-Slant output
-.I N
-degrees.
-.
-.ESC t
-Non-interpreted horizontal tab.
-.
-.ESC u
-Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
-.
-.ESCq v N
-Local vertical motion; move down
-.I N
-(up if negative).
-.
-.ESC[] V env
-The contents of the environment variable
-.IR env .
-.
-Alternative forms
-.escarg V( xy
-and
-.escarg V x .
-.
-.ESCq w string
-The width of the character sequence
-.IR string .
-.
-.ESCq x N
-Extra line-space function (negative before, positive after).
-.
-.ESCq X string
-Output
-.I string
-as device control function.
-.
-.ESC[] Y name
-Output string variable or macro
-.I name
-uninterpreted as device control function.
-.
-Alternative forms
-.escarg Y( xy
-and
-.escarg Y x .
-.
-.ESC z c
-Print
-.I c
-with zero width (without spacing).
-.
-.ESCq Z anything
-Print
-.I anything
-and then restore the horizontal and vertical position;
-.I anything
-may not contain tabs or leaders.
-.
-.PD
-.P
-The escape sequences
-.esc e ,
-.esc . ,
-.esc \[dq] ,
-.esc $ ,
-.esc * ,
-.esc a ,
-.esc n ,
-.esc t ,
-.esc g ,
-and
-.escarg \& newline
-are interpreted in copy mode.
-.
-.P
-Escape sequences starting with
-.esc (
-or
-.esc [
-do not represent single character escape sequences, but introduce escape
-names with two or more characters.
-.
-.P
-If a backslash is followed by a character that does not constitute a
-defined escape sequence the backslash is silently ignored and the
-character maps to itself.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Characters"
-.\" --------------------------------------------------------------------
-.
-Common special characters are predefined by escape sequences of the
-form
-.BI \[rs]( xy
-with characters
-.I x
-and
-.IR y .
-.
-Some of these exist in the usual font while most of them are only
-available in the special font.
-.
-Below you'll find a selection of the most important glyphs; a complete
-list can be found in
-.BR groff_char (@MAN7EXT@).
-.RS
-.P
-.PD 0
-.
-.ESC (bu
-Bullet sign
-.ESC (co
-Copyright
-.ESC (ct
-Cent
-.ESC (dd
-Double dagger
-.ESC (de
-Degree
-.ESC (dg
-Dagger
-.ESC (rs
-Printable double quote
-.ESC (em
-Em-dash
-.ESC (hy
-Hyphen
-.ESC (rg
-Registered sign
-.ESC (rs
-Printable backslash character
-.ESC (sc
-Section sign
-.ESC (ul
-Underline character
-.ESC (==
-Identical
-.ESC (>=
-Larger or equal
-.ESC (<=
-Less or equal
-.ESC (!=
-Not equal
-.ESC (->
-Right arrow
-.ESC (<-
-Left arrow
-.ESC (+-
-Plus-minus sign
-.PD
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Strings"
-.\" --------------------------------------------------------------------
-.
-Strings are defined by the
-.request ds
-request and can be retrieved by the
-.esc *
-escape sequence.
-.
-.P
-Strings share their name space with macros.
-.
-So strings and macros without arguments are roughly equivalent; it is
-possible to call a string like a macro and vice-versa, but this often
-leads to unpredictable results.
-.
-The following strings are predefined in groff.
-.
-.STRING .T
-The name of the current output device as specified by the
-.option -T
-command line option.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REGISTERS
-.\" --------------------------------------------------------------------
-.
-Registers are variables that store a value.
-In groff, most registers store numerical values (see section
-.B NUMERICAL EXPRESSIONS
-above), but some can also hold a string value.
-.
-.P
-Each register is given a name.
-Arbitrary registers can be defined and set with the request
-.request nr
-.IR register .
-.
-.P
-The value stored in a register can be retrieved by the escape sequences
-introduced by
-.esc n .
-.
-.P
-Most useful are predefined registers.
-.
-In the following the notation
-.I name
-is used to refer to a register called
-.register name
-to make clear that we speak about registers.
-.
-Please keep in mind that the
-.esc[] n ""
-decoration is not part of the register name.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Read-only Registers"
-.\" --------------------------------------------------------------------
-.
-The following registers have predefined values that should not be
-modified by the user (usually, registers starting with a dot a
-read-only).
-.
-Mostly, they provide information on the current settings or store
-results from request calls.
-.
-.P
-.PD 0
-.
-.REG .$
-Number of arguments in the current macro or string.
-.
-.REG .a
-Post-line extra line-space most recently utilized using
-.escq x N .
-.
-.REG .A
-Set to\~1 in
-.B troff
-if option
-.B \-A
-is used; always\~1 in
-.BR nroff .
-.
-.REG .c
-Current input line number.
-.
-.REG .C
-1\~if compatibility mode is in effect, 0\~otherwise.
-.
-.REG .cdp
-The depth of the last character added to the current environment.
-It is positive if the character extends below the baseline.
-.
-.REG .ce
-The number of lines remaining to be centered, as set by the
-.request ce
-request.
-.
-.REG .cht
-The height of the last character added to the current environment.
-It is positive if the character extends above the baseline.
-.
-.REG .color
-1\~if colors are enabled, 0\~otherwise.
-.
-.REG .csk
-The skew of the last character added to the current environment.
-The skew of a character is how far to the right of the center of a character
-the center of an accent over that character should be placed.
-.
-.REG .d
-Current vertical place in current diversion; equal to
-.register nl .
-.
-.REG .ev
-The name or number of the current environment (string-valued).
-.
-.REG .f
-Current font number.
-.
-.REG .fam
-The current font family (string-valued).
-.
-.REG .fn
-The current (internal) real font name (string-valued).
-.
-.REG .fp
-The number of the next free font position.
-.
-.REG .g
-Always 1 in GNU troff.
-.
-Macros should use it to test if running under groff.
-.
-.REG .h
-Text base-line high-water mark on current page or diversion.
-.
-.REG .H
-Available horizontal resolution in basic units.
-.
-.REG .height
-The current font height as set with
-.request \[rs]H .
-.
-.REG .hla
-The current hyphenation language as set by the
-.B .hla
-request.
-.
-.REG .hlc
-The number of immediately preceding consecutive hyphenated lines.
-.
-.REG .hlm
-The maximum allowed number of consecutive hyphenated lines, as set by
-the
-.request hlm
-request.
-.
-.REG .hy
-The current hyphenation flags (as set by the
-.request hy
-request).
-.
-.REG .hym
-The current hyphenation margin (as set by the
-.request hym
-request).
-.
-.REG .hys
-The current hyphenation space (as set by the
-.request hys
-request).
-.
-.REG .i
-Current ident.
-.
-.REG .in
-The indent that applies to the current output line.
-.
-.REG .int
-Positive if last output line contains
-.esc c .
-.
-.REG .kern
-1\~if pairwise kerning is enabled, 0\~otherwise.
-.
-.REG .l
-Current line length.
-.
-.REG .lg
-The current ligature mode (as set by the
-.request lg
-request).
-.
-.REG .linetabs
-The current line-tabs mode (as set by the
-.request linetabs
-request).
-.
-.REG .ll
-The line length that applies to the current output line.
-.
-.REG .lt
-The title length (as set by the
-.request lt
-request).
-.
-.REG .m
-The current drawing color (string-valued).
-.
-.REG .M
-The current background color (string-valued).
-.
-.REG .n
-Length of text portion on previous output line.
-.
-.REG .ne
-The amount of space that was needed in the last
-.request ne
-request that caused a trap to be sprung.
-.
-Useful in conjunction with
-.register .trunc .
-.
-.REG .ns
-1\~if in no-space mode, 0\~otherwise.
-.
-.REG .o
-Current page offset.
-.
-.REG .p
-Current page length.
-.
-.REG .pe
-1\~during page ejection, 0\~otherwise.
-.
-.REG .pn
-The number of the next page: either the value set by a
-.request pn
-request, or the number of the current page plus\ 1.
-.
-.REG .ps
-The current pointsize in scaled points.
-.
-.REG .psr
-The last-requested pointsize in scaled points.
-.
-.REG .pvs
-The current post-vertical line spacing.
-.
-.REG .rj
-The number of lines to be right-justified as set by the rj request.
-.
-.REG .s
-Current point size as a decimal fraction.
-.
-.REG .slant
-The slant of the current font as set with
-.request \[rs]S .
-.
-.REG .sr
-The last requested pointsize in points as a decimal fraction
-(string-valued).
-.
-.REG .ss
-The value of the parameters set by the first argument of the
-.request ss
-request.
-.
-.REG .sss
-The value of the parameters set by the second argument of the
-.request ss
-request.
-.
-.REG .sty
-The current font style (string-valued).
-.
-.REG .t
-Distance to the next trap.
-.
-.REG .T
-Set to\~1
-if option
-.B \-T
-is used.
-.
-.REG .tabs
-A string representation of the current tab settings suitable for use
-as an argument to the
-.request ta
-request.
-.
-.REG .trunc
-The amount of vertical space truncated by the most recently sprung
-vertical position trap, or, if the trap was sprung by a
-.request ne
-request, minus the amount of vertical motion produced by
-.request .ne .
-.
-In other words, at the point a trap is sprung, it represents
-the difference of what the vertical position would have been but for
-the trap, and what the vertical position actually is.
-.
-Useful in conjunction with the
-.register .ne .
-.
-.REG .u
-Equal to 1 in fill mode and 0 in nofill mode.
-.
-.REG .U
-Equal to 1 in safer mode and 0 in unsafe mode.
-.
-.REG .v
-Current vertical line spacing.
-.
-.REG .V
-Available vertical resolution in basic units.
-.
-.REG .vpt
-1\~ if vertical position traps are enabled, 0\~otherwise.
-.
-.REG .w
-Width of previous character.
-.
-.REG .warn
-The sum of the number codes of the currently enabled warnings.
-.
-.REG .x
-The major version number.
-.
-.REG .y
-The minor version number.
-.
-.REG .Y
-The revision number of groff.
-.
-.REG .z
-Name of current diversion.
-.PD
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Writable Registers"
-.\" --------------------------------------------------------------------
-.
-The following registers can be read and written by the user.
-They have predefined default values, but these can be modified for
-customizing a document.
-.
-.P
-.PD 0
-.REG %
-Current page number.
-.
-.REG c.
-Current input line number.
-.
-.REG ct
-Character type (set by width function
-.esc w ).
-.
-.REG dl
-Maximal width of last completed diversion.
-.
-.REG dn
-Height of last completed diversion.
-.
-.REG dw
-Current day of week (1-7).
-.
-.REG dy
-Current day of month (1-31).
-.
-.REG hours
-The number of hours past midnight.
-.
-Initialized at start-up.
-.
-.REG hp
-Current horizontal position at input line.
-.
-.REG llx
-Lower left x-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.REG lly
-Lower left y-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.REG ln
-Output line number.
-.
-.REG minutes
-The number of minutes after the hour.
-.
-Initialized at start-up.
-.
-.REG mo
-Current month (1-12).
-.
-.REG nl
-Vertical position of last printed text base-line.
-.
-.REG rsb
-Like
-.register sb ,
-but takes account of the heights and depths of characters.
-.
-.REG rst
-Like
-.register st ,
-but takes account of the heights and depths of characters.
-.
-.REG sb
-Depth of string below base line (generated by width function
-.esc w ).
-.
-.REG seconds
-The number of seconds after the minute.
-.
-Initialized at start-up.
-.
-.REG skw
-Right skip width from the center of the last character in the
-.esc w
-argument.
-.
-.REG slimit
-If greater than 0, the maximum number of objects on the input stack.
-.
-If \[<=]0 there is no limit, i.e., recursion can continue until virtual
-memory is exhausted.
-.
-.REG ssc
-The amount of horizontal space (possibly negative) that should be
-added to the last character before a subscript (generated by width
-function
-.esc w ).
-.
-.REG st
-Height of string above base line (generated by width function
-.esc w ).
-.
-.REG systat
-The return value of the
-.I system()
-function executed by the last
-.request sy
-request.
-.
-.REG urx
-Upper right x-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.REG ury
-Upper right y-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.REG year
-The current year (year 2000 compliant).
-.
-.REG yr
-Current year minus 1900.
-.
-For Y2K compliance use
-.register year
-instead.
-.
-.PD
-.
-.
-.\" --------------------------------------------------------------------
-.SH COMPATIBILITY
-.\" --------------------------------------------------------------------
-.
-The differences of the groff language in comparison to classical troff
-as defined by
-.I [CSTR\~#54]
-are documented in
-.BR groff_diff (@MAN7EXT@).
-.
-.P
-The groff system provides a compatibility mode, see
-.BR groff (@MAN1EXT@)
-on how to invoke this.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MTO bug-groff@gnu.org "groff bug mailing list" .
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of groff you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.MTO bwarken@mayn.de "Bernd Warken" ;
-it is maintained by
-.MTO wl@gnu.org "Werner Lemberg" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.P
-The main source of information for the groff language is the
-.B groff
-.BR info (1)
-file.
-.
-Besides the gory details, it contains many examples.
-.
-.TP
-.BR groff (@MAN1EXT@)
-the usage of the groff program and pointers to the documentation and
-availability of the groff system.
-.
-.TP
-.BR groff_diff (@MAN7EXT@)
-the differences of the groff language as compared to classical roff.
-.
-This is the authoritative document for the predefined language
-elements that are specific to groff.
-.
-.TP
-.BR groff_char (@MAN7EXT@)
-the predefined groff characters (glyphs).
-.
-.TP
-.BR groff_font (@MAN5EXT@)
-the specification of fonts and the DESC file.
-.
-.TP
-.BR roff (@MAN7EXT@)
-the history of roff, the common parts shared by all roff systems, and
-pointers to further documentation.
-.
-.TP
-.I [CSTR\~#54]
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \
- "Nroff/\:Troff User's Manual by Osanna & Kernighan"
-\[em] the bible for classical troff.
-.
-.cp \n[groff_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs Setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff_char.man b/contrib/groff/man/groff_char.man
deleted file mode 100644
index c38690039c83..000000000000
--- a/contrib/groff/man/groff_char.man
+++ /dev/null
@@ -1,1422 +0,0 @@
-.TH GROFF_CHAR @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_char \- groff glyph names
-.SH DESCRIPTION
-.\" The lines above were designed to satisfy `apropos'.
-.
-.\" For best results, format this document with `groff' (GNU roff).
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal terms
-.\" --------------------------------------------------------------------
-.
-.ig
-groff_char(7)
-
-This file is part of groff (GNU roff).
-
-File position: <groff_src_top>/man/groff_char.man
-Last update: 05 Dec 2004
-
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-written by Werner Lemberg <wl@gnu.org>
-with additions by Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup Part 1
-.\" --------------------------------------------------------------------
-.
-.do nr groff_char_C \n[.C]
-.cp 0
-.
-.\" groff only
-.if \n(.g .mso www.tmac
-.\".if \n(.g .ne 2v
-.\".if \n(.g .sv 2v
-.
-.ds aq \(aq
-.
-.\" non-groff
-.if !\n(.g .if '\(aq'' .ds aq \'
-.
-.\" groff
-.if !\n(.g .ig
-. tr \[aq]\[aq]
-. if !c\[aq] \
-. ds aq \'
-. \" This is very special. The standard devdvi fonts don't have a
-. \" real `aq' glyph; it is defined with .char to be ' instead.
-. \" The .tr request below in the definition of the C macro maps
-. \" the apostrophe ' onto the `aq' glyph which would cause a
-. \" recursive loop. gtroff prevents this within the .char
-. \" request, trying to access glyph `aq' directly from the font.
-. \" Consequently, we get a warning, and nothing is printed.
-. \"
-. \" The following line prevents this.
-. if '\*[.T]'dvi' \
-. if !r ECFONTS \
-. ds aq \'
-. \" The same is true for X
-. ds dev \*[.T]
-. substring dev 0 0
-. if '\*[dev]'X' .ds aq \'
-. ig
-..
-.
-.\" --------------------------------------------------------------------
-.\" .Ac accented-char accent char (groff)
-.
-.if !\n(.g .ig
-.de Ac
-. if !c\\$1 \{\
-. ie c\\$2 \
-. char \\$1 \
-\k[acc]\
-\h'\w'\\$3'u'\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\
-\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\
-\h'|\\\\n[acc]u'\
-\\$3
-. el \
-. char \\$1 \\$3
-. hcode \\$1 \\$3
-. \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup Part 2
-.\" --------------------------------------------------------------------
-.
-.nr Sp 2n
-.
-.\" --------------------------------------------------------------------
-.\" .C2/.CN (groff)
-.
-.if !\n(.g .ig
-.de CN
-. C \e[\\$1] "" \[\\$1] \\$2 "\\$3" "\\$4"
-..
-.
-.\" .Ns (groff) start .CN block
-.
-.if !\n(.g .ig
-.de Ns
-. CN "\\$1" "\\$2" "\\$3" "\\$4"
-. if !\n[cR] \
-. wh (\\n[nl]u + \\n[.t]u - \\n[.V]u) Fo
-..
-.
-.\" .Ne (groff) end .CN block
-.
-.if !\n(.g .ig
-.de Ne
-. ch Fo
-. CN "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.
-.if \n(.g \{\
-. als C2 CN
-. als 2s Ns
-. als 2e Ne
-.\}
-.
-.\" --------------------------------------------------------------------
-.\" .C2 (non-groff)
-.
-.if \n(.g .ig
-.de C2
-. C \e(\\$1 "" \\(\\$1 \\$2 "\\$3" "\\$4"
-..
-.
-.\" .2s (non-groff) start .C2 block
-.
-.if \n(.g .ig
-.de 2s
-. C2 "\\$1" "\\$2" "\\$3" "\\$4"
-. if !\n(cR \
-. wh \\n(nlu+\\n(.tu-\\n(.Vu Fo
-..
-.
-.\" .2e (non-groff) end .C2 block
-.
-.if \n(.g .ig
-.de 2e
-. ch Fo
-. C2 "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.
-.\" --------------------------------------------------------------------
-.\" .CD (groff)
-.
-.if !\n(.g .ig
-.de CD
-. C \[char\\$1] \\$1 \[char\\$1] \\$2 "\\$3" "\\$4" 1
-..
-.
-.\" .Ds (groff) start .CD block
-.
-.if !\n(.g .ig
-.de Ds
-. CD "\\$1" "\\$2" "\\$3" "\\$4"
-. if !\n[cR] \
-. wh (\\n[nl]u + \\n[.t]u - \\n[.V]u) Fo
-..
-.
-.\" .De (groff) end .CD block
-.
-.if !\n(.g .ig
-.de De
-. ch Fo
-. CD "\\$1" "\\$2" "\\$3" "\\$4"
-..
-.
-.\" --------------------------------------------------------------------
-.
-.do if !r ECFONTS .do fspecial CR R
-.
-.\" .CT
-.
-.de CT
-. nr c1 \w'\\$1'
-. if \\n(c1 \
-. nr c1 +\\n(Spu
-. nr c2 \\n(c1+\w'\\$2'
-. if \\n(c1<\\n(c2 \
-. nr c2 +\\n(Spu
-. nr c3 \\n(c2+\w'\\$3'
-. if \\n(c2<\\n(c3 \
-. nr c3 +\\n(Spu
-. nr c4 \\n(c3+\w'\\$4'
-. if \\n(c3<\\n(c4 \
-. nr c4 +\\n(Spu
-. nr c5 \\n(c4+\w'\\$5'
-. if \\n(c4<\\n(c5 \
-. nr c5 +\\n(Spu
-..
-.
-.\" .CL
-.
-.de CL
-\\$1\c
-\h'\\n(c1u-\\n(.ku'\\$2\c
-\h'\\n(c2u-\\n(.ku'\\$3\c
-\h'\\n(c3u-\\n(.ku'\\$4\c
-\h'\\n(c4u-\\n(.ku'\\$5\c
-\h'\\n(c5u-\\n(.ku'\\$6
-. br
-..
-.
-.\" --------------------------------------------------------------------
-.\" input-name decimal-code output-name ps-name unicode description is-char
-.\" .C (groff)
-.
-.if !\n(.g .ig
-.de C
-. nr CH 1
-. if \\$7 \
-. if !c\\$1 \
-. nr CH 0
-. ie !\\n[CH] \
-. ds CH
-. el \{\
-. ft CR
-. tr `\`'\*[aq]
-. in 0
-. di CH
-. nop \&\\$1
-. br
-. di
-. chop CH
-. in
-. ft
-. ds CH \\*[CH]
-. tr ``''
-. \}
-. di CC
-. ie c\\$3 \{\
-. nop \\&\\$3\c
-. \" The \x values assure that oversized symbols don't
-. \" overlap vertically. The constant 1.5p is heuristic.
-. nop \x'(\w'('*0 - ((\\n[.cht]u - \\n[rst]u - 1.5p) >? 0))'\c
-. nop \x'((\\n[.cdp]u + \\n[rsb]u - 1.5p) >? 0)'\c
-. nop \h'(\\n[c1]u - \\n[.k]u)'\\*[CH]\c
-. nop \h'(\\n[c2]u - \\n[.k]u)'\\$2\c
-. \}
-. el \{\
-. nop (N/A)\c
-. nop \h'(\\n[c1]u - \\n[.k]u)'\\*[CH]\c
-. \}
-. nop \h'(\\n[c3]u - \\n[.k]u)'\\$4\c
-. nop \h'(\\n[c4]u - \\n[.k]u)'\\$5\c
-. br
-. di
-. \" we move upwards later on so force a page break now if necessary
-. if (\\n[dn] >= \\n[.t]) \
-. bp
-. mk C1
-. in 0
-. CC
-. in
-. \" allow multiple lines for last column
-. in +\\n[c5]u
-. mk C2
-. sp |\\n[C1]u
-. nr PN \\n[%]
-. ad l
-. nop \\$6
-. ad b
-. in
-. if (\\n[PN] == \\n[%]) \
-. if (\\n[nl] < \\n[C2]) \
-. sp |\\n[C2]u
-..
-.
-.\" --------------------------------------------------------------------
-.\" .C (non-groff)
-.
-.if \n(.g .ig
-.de C
-. ft B
-. tr `\`'\*(aq
-. in 0
-. di CH
-\&\\$1
-. br
-. di
-. in
-. ft
-. ds CH \\*(CH\
-. tr ``''
-. di CC
-. ie !'\\$3'' \{\
-\&\\$3\c
-\h'\\n(c1u-\\n(.ku)'\\*(CH\c
-\h'\\n(c2u-\\n(.ku)'\\$2\c
-\h'\\n(c3u-\\n(.ku)'\\$4\c
-. \}
-. el \{\
-(N/A)\c
-\h'\\n(c1u-\\n(.ku)'\\*(CH\c
-\h'\\n(c3u-\\n(.ku)'\\$4\c
-. \}
-\h'\\n(c4u-\\n(.ku)'\\$5\c
-\h'\\n(c5u-\\n(.ku)'\\$6
-. br
-. di
-. \" we move upwards later on so force a page break now if necessary
-. if \\n(dn>=\\n(.t \
-. bp
-. mk C1
-. in 0
-. CC
-. in
-. \" allow multiple lines for last column
-. in +\\n(c5u
-. mk C2
-. sp |\\n(C1u
-. nr PN \\n%
-. ad l
-\\$6
-. ad b
-. in
-. if \\n(PN==\\n% \
-. if \\n(nl<\\n(C2 \
-. sp |\\n(C2u
-..
-.
-.\" --------------------------------------------------------------------
-.
-.de Fo
-' bp
-. He
-..
-.
-.de Pa
-. P
-. ne 3
-..
-.
-.
-.
-.\" --------------------------------------------------------------------
-.\" .SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page lists the standard
-.B groff
-glyph names and the default input mapping, \%latin-1.
-.
-The glyphs in this document will look different depending
-on which output device was chosen (with option
-.B \-T
-for the
-.BR man (1)
-program or the roff formatter).
-.
-Glyphs not available for the device that
-is being used to print or view this manual page will be marked with
-.ie \n(.g `(N/A)'; the device currently used is `\*(.T'.
-.el `(N/A)'.
-.
-.
-.P
-In the actual version,
-.B groff
-provides only \%8-bit characters for direct input and named entities
-for further glyphs.
-.
-On ASCII platforms, input character codes in the range 0 to 127 (decimal)
-represent the usual \%7-bit ASCII characters, while codes between 127
-and 255 are interpreted as the corresponding characters in the
-.I \%Latin-1
-.RI ( \%ISO-8859-1 )
-code set by default.
-.
-This mapping is contained in the file \f(CWlatin1.tmac\fP
-and can be changed by loading a different input encoding.
-.
-Note that some of the input characters are reserved by
-.BR groff ,
-either for internal use or for special input purposes.
-.
-On EBCDIC platforms, only code page
-.B cp1047
-is supported (which contains the same characters as \%Latin-1; the
-input encoding file is called \f(CWcp1047.tmac\fP).
-.
-Again, some input characters are reserved for internal and special purposes.
-.
-It is rather straightforward (for the experienced user) to set up other
-\%8-bit encodings like
-.IR \%Latin-2 ;
-since
-.B groff
-will use Unicode in the next major version, no additional encodings
-are provided.
-.
-.
-.P
-All roff systems provide the concept of named glyphs.
-.
-In traditional roff systems, only names of length\ 2 were used, while
-groff also provides support for longer names.
-.
-It is strongly suggested that only named glyphs are used for all
-character representations outside of the printable \%7-bit ASCII range.
-.
-.
-.P
-Some of the predefined groff escape sequences (with names of length\ 1)
-also produce single characters; these exist for historical reasons or
-are printable versions of syntactical characters.
-.
-They include `\f(CW\e\e\fP', `\f(CW\e\'\fP', `\f(CW\e`\fP', `\f(CW\e-\fP',
-`\f(CW\e.\fP', and `\f(CW\ee\fP'; see
-.BR groff (@MAN7EXT@).
-.
-.
-.P
-In groff, all of these different types of characters and glyphs can be
-tested positively with the `\f(CW.if\ c\fP' conditional.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REFERENCE
-.\" --------------------------------------------------------------------
-.
-In this section, the glyphs in groff are specified in tabular
-form.
-.
-The meaning of the columns is as follows.
-.
-.
-.TP
-.I "Output"
-shows how the glyph is printed for the current device; although
-this can have quite a different shape on other devices, it always
-represents the same glyph.
-.
-.
-.TP
-.I "Input name"
-specifies how the glyph is input either directly by a key on the
-keyboard, or by a groff escape sequence.
-.
-.
-.TP
-.I "Input code"
-applies to glyphs which can be input with a single character, and
-gives the ISO \%Latin-1 decimal code of that input character.
-.
-Note that this code is equivalent to the lowest 256 Unicode characters,
-including \%7-bit ASCII in the range 0 to\ 127.
-.
-.
-.TP
-.I "PostScript name"
-gives the usual PostScript name of the glyph.
-.
-.
-.TP
-.I "Unicode decomposed"
-is the glyph name used in composite glyph names.
-.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "7-bit Character Codes 32-126"
-.\" --------------------------------------------------------------------
-.
-These are the basic glyphs having 7-bit ASCII code values assigned.
-.
-They are identical to the printable characters of the
-character standards \%ISO-8859-1 (\%Latin-1) and Unicode (range
-.IR "C0 Controls and Basic Latin" ).
-.
-The glyph names used in composite glyph names are `u0020' up to `u007E'.
-.
-.
-.P
-Note that input characters in the range \%0\-31 and character 127 are
-.I not
-printable characters.
-.
-Most of them are invalid input characters for
-.B groff
-anyway, and the valid ones have special meaning.
-.
-For EBCDIC, the printable characters are in the range \%66\-255.
-.
-.
-.TP
-48\-57
-Decimal digits 0 to\ 9 (print as themselves).
-.
-.
-.TP
-65\-90
-Upper case letters A\-Z (print as themselves).
-.
-.
-.TP
-97\-122
-Lower case letters a\-z (print as themselves).
-.
-.
-.P
-Most of the remaining characters not in the just described ranges print as
-themselves; the only exceptions are the following characters:
-.
-.
-.TP
-.B \`
-the ISO \%Latin-1 `Grave Accent' (code\ 96) prints as `, a left single
-quotation mark; the original character can be obtained with `\f(CW\e`\fP'.
-.
-.
-.TP
-.B \*(aq
-the ISO \%Latin-1 `Apostrophe' (code\ 39) prints as ', a right single
-quotation mark; the original character can be obtained with `\f(CW\e(aq\fP'.
-.
-.
-.TP
-.B -
-the ISO \%Latin-1 `Hyphen, Minus Sign' (code\ 45) prints as a hyphen; a
-minus sign can be obtained with `\f(CW\e-\fP'.
-.
-.
-.TP
-.B ~
-the ISO \%Latin-1 `Tilde' (code\ 126) is reduced in size to be usable as
-a diacritic; a larger glyph can be obtained with `\f(CW\e(ti\fP'.
-.
-.
-.TP
-.B ^
-the ISO \%Latin-1 `Circumflex Accent' (code\ 94) is reduced in size to be
-usable as a diacritic; a larger glyph can be obtained with `\f(CW\e(ha\fP'.
-.
-.
-.P
-.CT "\fIOutput" "\fIInput" "\fIInput" "bracketright" "decomposed"
-.de He
-. P
-. ne 4
-. ft I
-. CL "Output" "Input" "Input" "PostScript" "Unicode" "Notes"
-. CL "" "name" "code" "name" "decomposed" ""
-. ft
-. P
-..
-.He
-.Ds 33 exclam u0021
-.CD 34 quotedbl u0022
-.CD 35 numbersign u0023
-.CD 36 dollar u0024
-.CD 37 percent u0025
-.CD 38 ampersand u0026
-.CD 39 quoteright u0027
-.CD 40 parenleft u0028
-.CD 41 parenright u0029
-.CD 42 asterisk u002A
-.CD 43 plus u002B
-.CD 44 comma u002C
-.CD 45 hyphen u2010
-.CD 46 period u002E
-.CD 47 slash u002F
-.CD 58 colon u003A
-.CD 59 semicolon u003B
-.CD 60 less u003C
-.CD 61 equal u003D
-.CD 62 greater u003E
-.CD 63 question u003F
-.CD 64 at u0040
-.CD 91 bracketleft u005B
-.CD 92 backslash u005C
-.CD 93 bracketright u005D
-.CD 94 circumflex u005E "circumflex accent"
-.CD 95 underscore u005F
-.CD 96 quoteleft u0060
-.CD 123 braceleft u007B
-.CD 124 bar u007C
-.CD 125 braceright u007D
-.De 126 tilde u007E "tilde accent"
-.
-.
-.\" --------------------------------------------------------------------
-.SS "8-bit Character Codes 160 to 255"
-.\" --------------------------------------------------------------------
-.
-They are interpreted as printable characters according to the
-.I Latin-1
-.RI ( iso-8859-1 )
-code set, being identical to the Unicode range
-.IR "C1 Controls and Latin-1 Supplement" .
-.
-.
-.P
-Input characters in range 128-159 (on non-EBCDIC hosts) are not printable
-characters.
-.
-.
-.TP
-160
-.
-the ISO \%Latin-1
-.I no-break space
-is mapped to `\f(CW\e~\fP', the stretchable space character.
-.
-.
-.TP
-173
-.
-the soft hyphen control character.
-.
-.B groff
-never uses this character for output (thus it is omitted in the
-table below); the input character\ 173 is mapped onto `\f(CW\e%\fP'.
-.
-.
-.P
-The remaining ranges (\%161\-172, \%174\-255)
-are printable characters that print as themselves.
-.
-Although they can be specified directly with the keyboard on systems
-with a \%Latin-1 code page, it is better to use their glyph names;
-see next section.
-.
-.P
-.CT "\fIOutput" "\fIInput" "\fIInput" "guillemotright" "decomposed"
-.He
-.Ds 161 exclamdown u00A1 "inverted exclamation mark"
-.CD 162 cent u00A2
-.CD 163 sterling u00A3
-.CD 164 currency u00A4
-.CD 165 yen u00A5
-.CD 166 brokenbar u00A6
-.CD 167 section u00A7
-.CD 168 dieresis u00A8
-.CD 169 copyright u00A9
-.CD 170 ordfeminine u00AA
-.CD 171 guillemotleft u00AB
-.CD 172 logicalnot u00AC
-.CD 174 registered u00AE
-.CD 175 macron u00AF
-.CD 176 degree u00B0
-.CD 177 plusminus u00B1
-.CD 178 twosuperior u00B2
-.CD 179 threesuperior u00B3
-.CD 180 acute u00B4 "acute accent"
-.CD 181 mu u00B5 "micro sign"
-.CD 182 paragraph u00B6
-.CD 183 periodcentered u00B7
-.CD 184 cedilla u00B8
-.CD 185 onesuperior u00B9
-.CD 186 ordmasculine u00BA
-.CD 187 guillemotright u00BB
-.CD 188 onequarter u00BC
-.CD 189 onehalf u00BD
-.CD 190 threequarters u00BE
-.CD 191 questiondown u00BF
-.CD 192 Agrave u0041_0300
-.CD 193 Aacute u0041_0301
-.CD 194 Acircumflex u0041_0302
-.CD 195 Atilde u0041_0303
-.CD 196 Adieresis u0041_0308
-.CD 197 Aring u0041_030A
-.CD 198 AE u00C6
-.CD 199 Ccedilla u0043_0327
-.CD 200 Egrave u0045_0300
-.CD 201 Eacute u0045_0301
-.CD 202 Ecircumflex u0045_0302
-.CD 203 Edieresis u0045_0308
-.CD 204 Igrave u0049_0300
-.CD 205 Iacute u0049_0301
-.CD 206 Icircumflex u0049_0302
-.CD 207 Idieresis u0049_0308
-.CD 208 Eth u00D0
-.CD 209 Ntilde u004E_0303
-.CD 210 Ograve u004F_0300
-.CD 211 Oacute u004F_0301
-.CD 212 Ocircumflex u004F_0302
-.CD 213 Otilde u004F_0303
-.CD 214 Odieresis u004F_0308
-.CD 215 multiply u00D7
-.CD 216 Oslash u00D8
-.CD 217 Ugrave u0055_0300
-.CD 218 Uacute u0055_0301
-.CD 219 Ucircumflex u0055_0302
-.CD 220 Udieresis u0055_0308
-.CD 221 Yacute u0059_0301
-.CD 222 Thorn u00DE
-.CD 223 germandbls u00DF
-.CD 224 agrave u0061_0300
-.CD 225 aacute u0061_0301
-.CD 226 acircumflex u0061_0302
-.CD 227 atilde u0061_0303
-.CD 228 adieresis u0061_0308
-.CD 229 aring u0061_030A
-.CD 230 ae u00E6
-.CD 231 ccedilla u0063_0327
-.CD 232 egrave u0065_0300
-.CD 233 eacute u0065_0301
-.CD 234 ecircumflex u0065_0302
-.CD 235 edieresis u0065_0308
-.CD 236 igrave u0069_0300
-.CD 237 iacute u0069_0301
-.CD 238 icircumflex u0069_0302
-.CD 239 idieresis u0069_0308
-.CD 240 eth u00F0
-.CD 241 ntilde u006E_0303
-.CD 242 ograve u006F_0300
-.CD 243 oacute u006F_0301
-.CD 244 ocircumflex u006F_0302
-.CD 245 otilde u006F_0303
-.CD 246 odieresis u006F_0308
-.CD 247 divide u00F7
-.CD 248 oslash u00F8
-.CD 249 ugrave u0075_0300
-.CD 250 uacute u0075_0301
-.CD 251 ucircumflex u0075_0302
-.CD 252 udieresis u0075_0308
-.CD 253 yacute u0079_0301
-.CD 254 thorn u00FE
-.De 255 ydieresis u0079_0308
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Named Glyphs"
-.\" --------------------------------------------------------------------
-.
-Glyph names can be embedded into the document text by using escape
-sequences.
-.
-.BR groff (@MAN7EXT@)
-describes how these escape sequences look.
-.
-Glyph names can consist of quite arbitrary characters from the
-ASCII or \%Latin-1 code set, not only alphanumeric characters.
-.
-Here some examples:
-.
-.TP
-\f(CW\e\fP\fIc\fP
-A glyph having the name
-.IR c ,
-which consists of a single character (length\ 1).
-.
-.TP
-\f(CW\e(\fP\fIch\fP
-A glyph having the 2-character name
-.IR ch .
-.
-.TP
-\f(CW\e[\fP\fIchar_name\fP\f(CW]\fP
-A glyph having the name
-.I char_name
-(having length 1, 2, 3, .\|.\|.).
-.
-.TP
-\f(CW\e[\fP\fIbase_glyph composite_1 composite_2 .\|.\|.\fP\f(CW]\fP
-A composite glyph; see below for a more detailed description.
-.
-.
-.P
-In groff, each \%8-bit input character can also referred to by the construct
-`\f(CW\e[char\fP\fIn\fP\f(CW]\fP' where
-.I n
-is the decimal code of the character, a number between 0 and\ 255
-without leading zeros (those entities are
-.I not
-glyph names).
-.
-They are normally mapped onto glyphs using the \f(CW.trin\fP request.
-.
-Another special convention is the handling of glyphs with names directly
-derived from a Unicode code point; this is discussed below.
-.
-Moreover, new glyph names can be created by the \f(CW.char\fP request; see
-.BR groff (@MAN7EXT@).
-.
-.P
-In the following, a plus sign in the `Notes' column indicates that this
-particular glyph name appears in the PS version of the original troff
-documentation, CSTR\ 54.
-.
-.
-.P
-.CT "\fIOutput" "\f(CW\e[-D]" "" "Ocircumflex" "u0066_0066_006C"
-.de He
-. P
-. ne 4
-. ft I
-. CL "Output" "Input" "" "PostScript" "Unicode" "Notes"
-. CL "" "name" "" "name" "decomposed" ""
-. ft
-. P
-..
-.He
-.2s -D Eth u00D0 "uppercase eth"
-.C2 Sd eth u00F0 "lowercase eth"
-.C2 TP Thorn u00DE "uppercase thorn"
-.C2 Tp thorn u00FE "lowercase thorn"
-.2e ss germandbls u00DF "German sharp s"
-.
-.Pa
-.I Ligatures and Other Latin Glyphs
-.P
-.2s ff ff u0066_0066 "ff ligature +"
-.C2 fi fi u0066_0069 "fi ligature +"
-.C2 fl fl u0066_006C "fl ligature +"
-.C2 Fi ffi u0066_0066_0069 "ffi ligature +"
-.C2 Fl ffl u0066_0066_006C "ffl ligature +"
-.C2 /L Lslash u0141 "(Polish)"
-.C2 /l lslash u0142 "(Polish)"
-.C2 /O Oslash u00D8 "(Scandinavic)"
-.C2 /o oslash u00F8 "(Scandinavic)"
-.C2 AE AE u00C6
-.C2 ae ae u00E6
-.C2 OE OE u0152
-.C2 oe oe u0153
-.C2 IJ IJ u0132 "(Dutch)"
-.C2 ij ij u0133 "(Dutch)"
-.C2 .i dotlessi u0131 "(Turkish)"
-.2e .j dotlessj --- "j without a dot"
-.
-.Pa
-.I Accented Characters
-.P
-.2s 'A Aacute u0041_0301
-.C2 'C Cacute u0043_0301
-.C2 'E Eacute u0045_0301
-.C2 'I Iacute u0049_0301
-.C2 'O Oacute u004F_0301
-.C2 'U Uacute u0055_0301
-.C2 'Y Yacute u0059_0301
-.C2 'a aacute u0061_0301
-.C2 'c cacute u0063_0301
-.C2 'e eacute u0065_0301
-.C2 'i iacute u0069_0301
-.C2 'o oacute u006F_0301
-.C2 'u uacute u0075_0301
-.C2 'y yacute u0079_0301
-.C2 :A Adieresis u0041_0308 "A with umlaut"
-.C2 :E Edieresis u0045_0308
-.C2 :I Idieresis u0049_0308
-.C2 :O Odieresis u004F_0308
-.C2 :U Udieresis u0055_0308
-.C2 :Y Ydieresis u0059_0308
-.C2 :a adieresis u0061_0308
-.C2 :e edieresis u0065_0308
-.C2 :i idieresis u0069_0308
-.C2 :o odieresis u006F_0308
-.C2 :u udieresis u0075_0308
-.C2 :y ydieresis u0079_0308
-.C2 ^A Acircumflex u0041_0302
-.C2 ^E Ecircumflex u0045_0302
-.C2 ^I Icircumflex u0049_0302
-.C2 ^O Ocircumflex u004F_0302
-.C2 ^U Ucircumflex u0055_0302
-.C2 ^a acircumflex u0061_0302
-.C2 ^e ecircumflex u0065_0302
-.C2 ^i icircumflex u0069_0302
-.C2 ^o ocircumflex u006F_0302
-.C2 ^u ucircumflex u0075_0302
-.C2 `A Agrave u0041_0300
-.C2 `E Egrave u0045_0300
-.C2 `I Igrave u0049_0300
-.C2 `O Ograve u004F_0300
-.C2 `U Ugrave u0055_0300
-.C2 `a agrave u0061_0300
-.C2 `e egrave u0065_0300
-.C2 `i igrave u0069_0300
-.C2 `o ograve u006F_0300
-.C2 `u ugrave u0075_0300
-.C2 ~A Atilde u0041_0303
-.C2 ~N Ntilde u004E_0303
-.C2 ~O Otilde u004F_0303
-.C2 ~a atilde u0061_0303
-.C2 ~n ntilde u006E_0303
-.C2 ~o otilde u006F_0303
-.C2 vS Scaron u0053_030C
-.C2 vs scaron u0073_030C
-.C2 vZ Zcaron u005A_030C
-.C2 vz zcaron u007A_030C
-.C2 ,C Ccedilla u0043_0327
-.C2 ,c ccedilla u0063_0327
-.C2 oA Aring u0041_030A
-.2e oa aring u0061_030A
-.
-.Pa
-.I Accents
-.P
-The
-.B composite
-request is used to map most of the accents to non-spacing glyph names;
-the values given in parentheses are the original (spacing) ones.
-.
-.P
-.Ac \(vc \(ah c
-.Ac \('a \(aa a
-.
-.\" we don't use the third column
-.CT "\fIOutput" "\f(CW\e[-D]" "" "quotesinglebase" "uCCCC (uCCCC)"
-.He
-.2s a" hungarumlaut "u030B (u02DD)" "(Hungarian)"
-.C2 a- macron "u0304 (u00AF)"
-.C2 a. dotaccent "u0307 (u02D9)"
-.C2 a^ circumflex "u0302 (u005E)"
-.C2 aa acute "u0301 (u00B4)" "+"
-.C2 ga grave "u0300 (u0060)" "+"
-.C2 ab breve "u0306 (u02D8)"
-.C2 ac cedilla "u0327 (u00B8)"
-.C2 ad dieresis "u0308 (u00A8)" "umlaut"
-.C2 ah caron "u030C (u02C7)" "h\('a\(vcek"
-.C2 ao ring "u030A (u02DA)" "circle"
-.C2 a~ tilde "u0303 (u007E)"
-.C2 ho ogonek "u0328 (u02DB)" "hook"
-.C2 ha asciicircum u005E "(spacing)"
-.2e ti asciitilde u007E "(spacing)"
-.
-.Pa
-.I Quotes
-.P
-.2s Bq quotedblbase u201E "low double comma quote"
-.C2 bq quotesinglbase u201A "low single comma quote"
-.C2 lq quotedblleft u201C
-.C2 rq quotedblright u201D
-.C2 oq quoteleft u2018 "single open quote"
-.C2 cq quoteright u2019 "single closing quote"
-.C2 aq quotesingle u0027 "apostrophe quote (ASCII 39)"
-.C2 dq quotedbl u0022 "double quote (ASCII 34)"
-.C2 Fo guillemotleft u00AB
-.C2 Fc guillemotright u00BB
-.C2 fo guilsinglleft u2039
-.2e fc guilsinglright u203A
-.
-.Pa
-.I Punctuation
-.P
-.2s r! exclamdown u00A1
-.C2 r? questiondown u00BF
-.C2 em emdash u2014 "+"
-.C2 en endash u2013
-.2e hy hyphen u2010 "+"
-.
-.Pa
-.I Brackets
-.P
-The extensible bracket pieces are font-invariant glyphs.
-.
-In classical troff only one glyph was available to vertically extend
-brackets, braces, and parentheses: `bv'.
-.
-We map it rather arbitrarily to u23AA.
-.
-.P
-Note that not all devices contain extensible bracket pieces which can
-be piled up with `\f(CW\eb\fP' due to the restrictions of the escape's
-piling algorithm.
-.
-A general solution to build brackets out of pieces is the following
-macro:
-.
-.P
-.nf
-.RS
-.ft C
-\&.\e" Make a pile centered vertically 0.5em
-\&.\e" above the baseline.
-\&.\e" The first argument is placed at the top.
-\&.\e" The pile is returned in string `pile'
-\&.eo
-\&.de pile-make
-\&. nr pile-wd 0
-\&. nr pile-ht 0
-\&. ds pile-args
-\&.
-\&. nr pile-# \en[.$]
-\&. while \en[pile-#] \e{\e
-\&. nr pile-wd (\en[pile-wd] >? \ew'\e$[\en[pile-#]]')
-\&. nr pile-ht +(\en[rst] - \en[rsb])
-\&. as pile-args \ev'\en[rsb]u'\e"
-\&. as pile-args \eZ'\e$[\en[pile-#]]'\e"
-\&. as pile-args \ev'-\en[rst]u'\e"
-\&. nr pile-# -1
-\&. \e}
-\&.
-\&. ds pile \ev'(-0.5m + (\en[pile-ht]u / 2u))'\e"
-\&. as pile \e*[pile-args]\e"
-\&. as pile \ev'((\en[pile-ht]u / 2u) + 0.5m)'\e"
-\&. as pile \eh'\en[pile-wd]u'\e"
-\&..
-\&.ec
-.ft
-.RE
-.fi
-.
-.P
-Another complication is the fact that some glyphs which represent bracket
-pieces in original troff can be used for other mathematical symbols also,
-for example `lf' and `rf' which provide the `floor' operator.
-.
-Other devices (most notably for DVI output) don't unify such glyphs.
-.
-For this reason, the four glyphs `lf', `rf', `lc', and `rc' are not
-unified with similarly looking bracket pieces.
-.
-In
-.BR groff ,
-only glyphs with long names are guaranteed to pile up correctly for all
-devices (provided those glyphs exist).
-.
-.P
-.CT "\fIOutput" "\f(CW\e[bracketrightex]" "" "bracketrightex" "decomposed"
-.He
-.2s lB bracketleft u005B
-.C2 rB bracketright u005D
-.C2 lC braceleft u007B
-.C2 rC braceright u007D
-.C2 la angleleft u27E8 "left angle bracket"
-.C2 ra angleright u27E9 "right angle bracket"
-.
-.C2 bv braceex u23AA "vertical extension *** +"
-.CN braceex braceex u23AA
-.
-.CN bracketlefttp bracketlefttp u23A1
-.CN bracketleftbt bracketleftbt u23A3
-.CN bracketleftex bracketleftex u23A2
-.CN bracketrighttp bracketrighttp u23A4
-.CN bracketrightbt bracketrightbt u23A6
-.CN bracketrightex bracketrightex u23A5
-.
-.C2 lt bracelefttp u23A7 "+"
-.CN bracelefttp bracelefttp u23A7
-.C2 lk braceleftmid u23A8 "+"
-.CN braceleftmid braceleftmid u23A8
-.C2 lb braceleftbt u23A9 "+"
-.CN braceleftbt braceleftbt u23A9
-.CN braceleftex braceleftex u23AA
-.C2 rt bracerighttp u23AB "+"
-.CN bracerighttp bracerighttp u23AB
-.C2 rk bracerightmid u23AC "+"
-.CN bracerightmid bracerightmid u23AC
-.C2 rb bracerightbt u23AD "+"
-.CN bracerightbt bracerightbt u23AD
-.CN bracerightex bracerightex u23AA
-.
-.CN parenlefttp parenlefttp u239B
-.CN parenleftbt parenleftbt u239D
-.CN parenleftex parenleftex u239C
-.CN parenrighttp parenrighttp u239E
-.CN parenrightbt parenrightbt u23A0
-.Ne parenrightex parenrightex u239F
-.
-.Pa
-.I Arrows
-.P
-.2s <- arrowleft u2190 "+"
-.C2 -> arrowright u2192 "+"
-.C2 <> arrowboth u2194 "(horizontal)"
-.C2 da arrowdown u2193 "+"
-.C2 ua arrowup u2191 "+"
-.C2 va arrowupdn u2195
-.C2 lA arrowdblleft u21D0
-.C2 rA arrowdblright u21D2
-.C2 hA arrowdblboth u21D4 "(horizontal)"
-.C2 dA arrowdbldown u21D3
-.C2 uA arrowdblup u21D1
-.C2 vA uni21D5 u21D5 "vertical double-headed double arrow"
-.2e an arrowhorizex u23AF "horizontal arrow extension"
-.
-.Pa
-.I Lines
-.P
-The font-invariant glyphs `br', `ul', and `rn' form corners;
-they can be used to build boxes.
-.
-Note that both the PostScript and the Unicode-derived names of
-these three glyphs are just rough approximations.
-.
-.P
-`rn' also serves in classical troff as the horizontal extension of the
-square root sign.
-.
-.P
-`ru' is a font-invariant glyph, namely a rule of length 0.5m.
-.
-.P
-.CT "\fIOutput" "\f(CW\e[integral]" "" "propersuperset" "decomposed"
-.He
-.2s ba bar u007C
-.C2 br SF110000 u2502 "box rule +"
-.C2 ul underscore u005F "+"
-.C2 rn overline u203E "use `\f(CW\e[radicalex]\fP' for continuation of square root +"
-.C2 ru --- --- "baseline rule +"
-.C2 bb brokenbar u00A6
-.C2 sl slash u002F "+"
-.2e rs backslash u005C "reverse solidus"
-.
-.Pa
-.I Text markers
-.P
-.2s ci circle u25CB "+"
-.C2 bu bullet u2022 "+"
-.C2 dd daggerdbl u2021 "double dagger sign +"
-.C2 dg dagger u2020 "+"
-.C2 lz lozenge u25CA
-.C2 sq uni25A1 u25A1 "white square +"
-.C2 ps paragraph u00B6
-.C2 sc section u00A7 "+"
-.C2 lh uni261C u261C "hand pointing left +"
-.C2 rh a14 u261E "hand pointing right +"
-.C2 at at u0040
-.C2 sh numbersign u0023
-.C2 CR carriagereturn u21B5
-.2e OK a19 u2713 "check mark, tick"
-.
-.Pa
-.I Legal Symbols
-.P
-.2s co copyright u00A9 "+"
-.C2 rg registered u00AE "+"
-.C2 tm trademark u2122
-.2e bs --- --- "AT&T Bell Labs logo (not used in groff) +"
-.
-.Pa
-.I Currency symbols
-.P
-.2s Do dollar u0024
-.C2 ct cent u00A2 "+"
-.C2 eu --- u20AC "official Euro symbol"
-.C2 Eu Euro u20AC "font-specific Euro glyph variant"
-.C2 Ye yen u00A5
-.C2 Po sterling u00A3 "British currency sign"
-.C2 Cs currency u00A4 "Scandinavian currency sign"
-.2e Fn florin u0192 "Dutch currency sign"
-.
-.Pa
-.I Units
-.P
-.2s de degree u00B0 "+"
-.C2 %0 perthousand u2030 "per thousand, per mille sign"
-.C2 fm minute u2032 "footmark, prime +"
-.C2 sd second u2033
-.C2 mc mu u00B5 "micro sign"
-.C2 Of ordfeminine u00AA
-.2e Om ordmasculine u00BA
-.
-.Pa
-.I Logical Symbols
-.P
-.2s AN logicaland u2227
-.C2 OR logicalor u2228
-.C2 no logicalnot u00AC "+"
-.CN tno logicalnot u00AC "text variant of `no'"
-.C2 te existential u2203 "there exists, existential quantifier"
-.C2 fa universal u2200 "for all, universal quantifier"
-.C2 st suchthat u220B
-.C2 3d therefore u2234
-.C2 tf therefore u2234
-.
-.2e or bar u007C "bitwise OR operator (as used in C) +"
-.
-.Pa
-.I Mathematical Symbols
-.P
-.2s 12 onehalf u00BD "+"
-.C2 14 onequarter u00BC "+"
-.C2 34 threequarters u00BE "+"
-.C2 18 oneeighth u215B
-.C2 38 threeeighths u215C
-.C2 58 fiveeighths u215D
-.C2 78 seveneighths u215E
-.C2 S1 onesuperior u00B9
-.C2 S2 twosuperior u00B2
-.C2 S3 threesuperior u00B3
-.
-.C2 pl plus u002B "plus sign in special font +"
-.C2 mi minus u2212 "minus sign in special font +"
-.C2 -+ uni2213 u2213
-.C2 +- plusminus u00B1 "+"
-.CN t+- plusminus u00B1 "text variant of `+\-'"
-.C2 pc periodcentered u00B7
-.C2 md dotmath u22C5 "multiplication dot"
-.C2 mu multiply u00D7 "+"
-.CN tmu multiply u00D7 "text variant of `mu'"
-.C2 c* circlemultiply u2297 "multiply sign in a circle"
-.C2 c+ circleplus u2295 "plus sign in a circle"
-.C2 di divide u00F7 "division sign +"
-.CN tdi divide u00F7 "text variant of `di'"
-.C2 f/ fraction u2044 "bar for fractions"
-.C2 ** asteriskmath u2217 "+"
-.
-.C2 <= lessequal u2264 "+"
-.C2 >= greaterequal u2265 "+"
-.C2 << uni226A u226A "much less"
-.C2 >> uni226B u226B "much greater"
-.C2 eq equal u003D "equals sign in special font +"
-.C2 != notequal u003D_0338 "+"
-.C2 == equivalence u2261 "+"
-.C2 ne uni2262 u2261_0338
-.C2 =~ congruent u2245 "approx.\& equal"
-.C2 |= uni2243 u2243 "asymptot.\& equal to +"
-.C2 ap similar u223C "+"
-.C2 ~~ approxequal u2248 "almost equal to"
-.C2 ~= approxequal u2248
-.C2 pt proportional u221D "+"
-.
-.C2 es emptyset u2205 "+"
-.C2 mo element u2208 "+"
-.C2 nm notelement u2208_0338
-.C2 sb propersubset u2282 "+"
-.C2 nb notsubset u2282_0338
-.C2 sp propersuperset u2283 "+"
-.C2 nc uni2285 u2283_0338 "not superset"
-.C2 ib reflexsubset u2286 "+"
-.C2 ip reflexsuperset u2287 "+"
-.C2 ca intersection u2229 "intersection, cap +"
-.C2 cu union u222A "union, cup +"
-.
-.C2 /_ angle u2220
-.C2 pp perpendicular u22A5
-.C2 is integral u222B "+"
-.CN integral integral u222B "***"
-.CN sum summation u2211 "***"
-.CN product product u220F "***"
-.CN coproduct uni2210 u2210 "***"
-.C2 gr gradient u2207 "+"
-.C2 sr radical u221A "square root +"
-.CN sqrt radical u221A "***"
-.CN radicalex radicalex --- "continuation of square root"
-.CN sqrtex radicalex --- "***"
-.
-.C2 lc uni2308 u2308 "left ceiling +"
-.C2 rc uni2309 u2309 "right ceiling +"
-.C2 lf uni230A u230A "left floor +"
-.C2 rf uni230B u230B "right floor +"
-.
-.C2 if infinity u221E "+"
-.C2 Ah aleph u2135
-.C2 Im Ifraktur u2111 "Gothic I, imaginary"
-.C2 Re Rfraktur u211C "Gothic R, real"
-.C2 wp weierstrass u2118 "Weierstrass p"
-.C2 pd partialdiff u2202 "partial differentiation sign +"
-.C2 -h uni210F u210F "Planck constant over two pi"
-.2e hbar uni210F u210F
-.
-.Pa
-.I Greek characters
-.P
-These glyphs are intended for technical use, not for real Greek; normally,
-the uppercase letters have upright shape, and the lowercase ones are
-slanted.
-.
-There is a problem with the mapping of letter phi to Unicode.
-.
-Prior to Unicode version\ 3.0, the difference between U+03C6, GREEK
-SMALL LETTER PHI, and U+03D5, GREEK PHI SYMBOL, was not clearly described;
-only the glyph shapes in the Unicode book could be used as a reference.
-.
-Starting with Unicode\ 3.0, the reference glyphs have been exchanged and
-described verbally also: In mathematical context, U+03D5 is the stroked
-variant and U+03C5 the curly glyph.
-.
-Unfortunately, most font vendors didn't update their fonts to
-this (incompatible) change in Unicode.
-.
-At the time of this writing (February 2003), it is not clear yet whether
-the Adobe Glyph Names `phi' and `phi1' also change its meaning if used for
-mathematics, thus compatibility problems are likely to happen \(en being
-conservative, groff currently assumes that `phi' in a PostScript symbol
-font is the stroked version.
-.P
-In groff, symbol `\f(CW\e[*f]\fP' always denotes the stroked version of
-phi, and `\f(CW\e[+f]\fP' the curly variant.
-.P
-.2s *A Alpha u0391 "+"
-.C2 *B Beta u0392 "+"
-.C2 *G Gamma u0393 "+"
-.C2 *D Delta u0394 "+"
-.C2 *E Epsilon u0395 "+"
-.C2 *Z Zeta u0396 "+"
-.C2 *Y Eta u0397 "+"
-.C2 *H Theta u0398 "+"
-.C2 *I Iota u0399 "+"
-.C2 *K Kappa u039A "+"
-.C2 *L Lambda u039B "+"
-.C2 *M Mu u039C "+"
-.C2 *N Nu u039D "+"
-.C2 *C Xi u039E "+"
-.C2 *O Omicron u039F "+"
-.C2 *P Pi u03A0 "+"
-.C2 *R Rho u03A1 "+"
-.C2 *S Sigma u03A3 "+"
-.C2 *T Tau u03A4 "+"
-.C2 *U Upsilon u03A5 "+"
-.C2 *F Phi u03A6 "+"
-.C2 *X Chi u03A7 "+"
-.C2 *Q Psi u03A8 "+"
-.C2 *W Omega u03A9 "+"
-.C2 *a alpha u03B1 "+"
-.C2 *b beta u03B2 "+"
-.C2 *g gamma u03B3 "+"
-.C2 *d delta u03B4 "+"
-.C2 *e epsilon u03B5 "+"
-.C2 *z zeta u03B6 "+"
-.C2 *y eta u03B7 "+"
-.C2 *h theta u03B8 "+"
-.C2 *i iota u03B9 "+"
-.C2 *k kappa u03BA "+"
-.C2 *l lambda u03BB "+"
-.C2 *m mu u03BC "+"
-.C2 *n nu u03BD "+"
-.C2 *c xi u03BE "+"
-.C2 *o omicron u03BF "+"
-.C2 *p pi u03C0 "+"
-.C2 *r rho u03C1 "+"
-.C2 ts sigma1 u03C2 "terminal sigma +"
-.C2 *s sigma u03C3 "+"
-.C2 *t tau u03C4 "+"
-.C2 *u upsilon u03C5 "+"
-.C2 *f phi u03D5 "(stroked glyph)+"
-.C2 *x chi u03C7 "+"
-.C2 *q psi u03C8 "+"
-.C2 *w omega u03C9 "+"
-.C2 +h theta1 u03D1 "variant theta"
-.C2 +f phi1 u03C6 "variant phi (curly shape)"
-.C2 +p omega1 u03D6 "variant pi, looking like omega"
-.2e +e uni03F5 u03F5 "variant epsilon"
-.
-.Pa
-.I Card symbols
-.P
-.2s CL club u2663 "black club suit"
-.C2 SP spade u2660 "black spade suit"
-.C2 HE heart u2665 "black heart suit"
-.C2 u2662 uni2662 u2662 "white heart suit"
-.C2 DI diamond u2666 "black diamond suit"
-.2e u2661 uni2661 u2661 "white diamond suit"
-.
-.
-.\" --------------------------------------------------------------------
-.SH "AUTHOR"
-.\" --------------------------------------------------------------------
-.
-Copyright \(co 1989-2000, 2001, 2002, 2003,
-2004 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.ie \n(.g \
-. URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.el GNU copyleft site <http://www.gnu.org/copyleft/fdl.html>.
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.ie \n(.g \
-. MTO jjc@jclark.com "James Clark"
-.el James Clark <jjc@jclark.com>
-with additions by
-.ie \n(.g \
-. MTO wl@gnu.org "Werner Lemberg"
-.el Werner Lemberg <wl@gnu.org>
-and
-.ie \n(.g \
-. MTO bwarken@mayn.de "Bernd Warken" .
-.el Bernd Warken <bwarken@mayn.de>.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-the GNU roff formatter.
-.
-.TP
-.BR groff (@MAN7EXT@)
-a short reference of the groff formatting language.
-.
-.
-.P
-.IR "An extension to the troff character set for Europe" ,
-E.G. Keizer, K.J. Simonsen, J. Akkerhuis; EUUG Newsletter, Volume 9,
-No. 2, Summer 1989
-.
-.
-.P
-.ie \n(.g .URL http://\:www.unicode.org "The Unicode Standard"
-.el The Unicode Standard <http://www.unicode.org>
-.
-.cp \n[groff_char_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff_diff.man b/contrib/groff/man/groff_diff.man
deleted file mode 100644
index 94873dd639f5..000000000000
--- a/contrib/groff/man/groff_diff.man
+++ /dev/null
@@ -1,3848 +0,0 @@
-'\" e
-.\" The above line should force the use of eqn as a preprocessor
-.ig
-groff_diff.man
-
-Last update : 26 Jul 2004
-
-This file is part of groff, the GNU roff type-setting system.
-It is the source of the man-page groff_diff(7).
-
-Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-written by James Clark
-
-modified by Werner Lemberg <wl@gnu.org>
- Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_diff_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \
-. ftr CB CW
-.
-.\" define a string tx for the TeX logo
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
-.
-.
-.\" --------------------------------------------------------------------
-.\" start of macro definitions
-.
-.eo
-.
-.de c
-..
-.
-.de TQ
-. br
-. ns
-. TP \$1
-..
-.de Text
-. RI "\$*"
-..
-.de Topic
-. TP 2m
-. Text \[bu]
-..
-.de squoted
-. ds @arg1 \$1
-. shift
-.\" Text \[oq]\f[CB]\*[@arg1]\f[]\[cq]\$*
-. Text \[oq]\f[B]\*[@arg1]\f[]\[cq]\$*
-. rm @arg1
-..
-.c A shell command line
-.de ShellCommand
-. br
-. IR "shell#" "\h'1m'\f[CB]\$*\f[]\/"
-..
-.c reference of a request or macro
-.de request
-. ds @arg1 \$1
-. shift 1
-.\" Text \f[CB]\*[@arg1]\f[]\$*
-. Text \f[B]\*[@arg1]\f[]\$*
-. rm @arg1
-..
-.als option request
-.
-.c representation of an escape sequence
-.de esc
-. ds @arg1 \$1
-. shift
-.\" Text \f[CB]\[rs]\*[@arg1]\f[]\$*
-. Text \f[B]\[rs]\*[@arg1]\&\f[]\$*
-. rm @arg1
-..
-.ec
-.\" end of macro definitions
-.
-.\" from old groff_out.man
-.ie \n(.g \
-. ds ic \/
-.el \
-. ds ic \^
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH GROFF_DIFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_diff \- differences between GNU troff and classical troff
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the language differences between
-.IR groff ,
-the GNU
-.I roff
-text processing system and the classical
-.I roff
-formatter of the freely available Unix\~7 of the 1970s, documented in
-the
-.I Troff User's Manual
-by
-.I Osanna
-and
-.IR Kernighan .
-This inludes the roff language as well as the intermediate output
-format (troff output).
-.
-.P
-The section
-.I SEE ALSO
-gives pointers to both the classical
-.I roff
-and the modern
-.I groff
-documentation.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF LANGUAGE"
-.\" --------------------------------------------------------------------
-.
-In this section, all additional features of
-.I groff
-compared to the classical Unix\~7
-.I troff
-are described in detail.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Long names"
-.\" --------------------------------------------------------------------
-.
-The names of number registers, fonts, strings/\:macros/\:diversions,
-special characters (glyphs), and colors can be of any length.
-.
-In escape sequences, additionally to the classical
-.BI ( xx
-construction for a two-character name, you can use
-.BI [ xxx ]
-for a name of arbitrary length.
-.
-.TP
-.BI \[rs][ xxx ]
-Print the special character (glyph) called
-.IR xxx .
-.
-.TP
-.BI \[rs][ "comp1 comp2 .\|.\|." ]
-Print composite glyph consisting of multiple components.
-.
-Example: `\[rs][A\~ho]' is capital letter A with ogonek which finally maps
-to glyph name `u0041_0328'.
-.
-See the
-.I groff info file
-for details how a glyph name for a composite glyph is constructed, and
-.BR groff_char (@MAN7EXT@)
-for list of glyph name components used composite glyph names.
-.
-.TP
-.BI \[rs]f[ xxx ]
-Set font
-.IR xxx .
-.
-Additionally,
-.B \[rs]f[]
-is a new syntax equal to
-.BR \[rs]fP ,
-i.e., to return to the previous font.
-.
-.TP
-.BI \[rs]*[ "xxx arg1 arg2 .\|.\|." ]
-Interpolate string
-.IR xxx ,
-taking
-.IR arg1 ,
-.IR arg2 ,
-.I .\|.\|.\&
-as arguments.
-.
-.TP
-.BI \[rs]n[ xxx ]
-Interpolate number register
-.IR xxx .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Fractional pointsizes"
-.\" --------------------------------------------------------------------
-.
-A
-.I scaled point
-is equal to
-.B 1/sizescale
-points, where
-.B sizescale
-is specified in the
-.B DESC
-file (1 by default).
-.
-There is a new scale indicator
-.B z
-that has the effect of multiplying by sizescale.
-.
-Requests and escape sequences in troff interpret arguments that
-represent a pointsize as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of
-.BR z .
-Arguments treated in this way are the argument to the
-.B ps
-request, the third argument to the
-.B cs
-request, the second and fourth arguments to the
-.B tkf
-request, the argument to the
-.B \[rs]H
-escape sequence, and those variants of the
-.B \[rs]s
-escape sequence that take a numeric expression as their argument.
-.
-.P
-For example, suppose sizescale is 1000; then a scaled point will be
-equivalent to a millipoint; the call
-.B .ps\ 10.25
-is equivalent to
-.B .ps\ 10.25z
-and so sets the pointsize to 10250 scaled points, which is equal to
-10.25 points.
-.
-.P
-The number register
-.B \[rs]n[.s]
-returns the pointsize in points as decimal fraction.
-.
-There is also a new number register
-.B \[rs]n[.ps]
-that returns the pointsize in scaled points.
-.
-.P
-It would make no sense to use the
-.B z
-scale indicator in a numeric expression whose default scale indicator
-was neither
-.B u
-nor
-.BR z ,
-and so
-.B troff
-disallows this.
-.
-Similarly it would make no sense to use a scaling indicator other than
-.B z
-or
-.B u
-in a numeric expression whose default scale indicator was
-.BR z ,
-and so
-.B troff
-disallows this as well.
-.
-.P
-There is also new scale indicator\~\c
-.B s
-which multiplies by the number of units in a scaled point.
-.
-So, for example,
-.B \[rs]n[.ps]s
-is equal to
-.BR 1m .
-Be sure not to confuse the
-.B s
-and
-.B z
-scale indicators.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Numeric expressions"
-.\" --------------------------------------------------------------------
-.
-Spaces are permitted in a number expression within parentheses.
-.
-.P
-.B M
-indicates a scale of 100ths of an em.
-.B f
-indicates a scale of 65536 units, providing fractions for color
-definitions with the
-.B defcolor
-request.
-.
-For example, 0.5f = 32768u.
-.
-.TP
-.IB e1 >? e2
-The maximum of
-.I e1
-and
-.IR e2 .
-.
-.TP
-.IB e1 <? e2
-The minimum of
-.I e1
-and
-.IR e2 .
-.
-.TP
-.BI ( c ; e )
-Evaluate
-.I e
-using
-.I c
-as the default scaling indicator.
-.
-If
-.I c
-is missing, ignore scaling indicators in the evaluation of
-.IR e .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New escape sequences"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \[rs]A' anything '
-This expands to
-.B 1
-or
-.B 0
-resp., depending on whether
-.I anything
-is or is not acceptable as the name of a string, macro, diversion, number
-register, environment, font, or color.
-It will return\~\c
-.B 0
-if
-.I anything
-is empty.
-.
-This is useful if you want to lookup user input in some sort of
-associative table.
-.
-.TP
-.BI \[rs]B' anything '
-This expands to
-.B 1
-or
-.B 0
-resp., depending on whether
-.I anything
-is or is not a valid numeric expression.
-.
-It will return\~\c
-.B 0
-if
-.I anything
-is empty.
-.
-.TP
-.BI \[rs]C' xxx '
-Typeset glyph named
-.IR xxx .
-Normally it is more convenient to use
-.BI \[rs][ xxx ]\f[R].
-But
-.B \[rs]C
-has the advantage that it is compatible with recent versions of
-.SM UNIX
-and is available in compatibility mode.
-.
-.TP
-.B \[rs]E
-This is equivalent to an escape character, but it is not interpreted in
-copy-mode.
-.
-For example, strings to start and end superscripting could be defined
-like this
-.
-.RS
-.IP
-.ft CB
-.Text .ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u'
-.br
-.Text .ds } \[rs]s0\[rs]v'.3m'
-.ft
-.
-.P
-The use of
-.B \[rs]E
-ensures that these definitions will work even if
-.B \[rs]*{
-gets interpreted in copy-mode (for example, by being used in a macro
-argument).
-.RE
-.
-.TP
-.BI \[rs]F f
-.TQ
-.BI \[rs]F( fm
-.TQ
-.BI \[rs]F[ fam ]
-Change font family.
-.
-This is the same as the
-.B fam
-request.
-.
-.B \[rs]F[]
-switches back to the previous color (note that
-.B \[rs]FP
-won't work; it selects font family `P' instead).
-.
-.TP
-.BI \[rs]m x
-.TQ
-.BI \[rs]m( xx
-.TQ
-.BI \[rs]m[ xxx ]
-Set drawing color.
-.B \[rs]m[]
-switches back to the previous color.
-.
-.TP
-.BI \[rs]M x
-.TQ
-.BI \[rs]M( xx
-.TQ
-.BI \[rs]M[ xxx ]
-Set background color for filled objects drawn with the
-.BI \[rs]D' .\|.\|. '
-commands.
-.B \[rs]M[]
-switches back to the previous color.
-.
-.TP
-.BI \[rs]N' n '
-Typeset the glyph with index
-.I n
-in the current font.
-.I n
-can be any integer.
-.
-Most devices only have glyphs with indices between 0 and 255.
-.
-If the current font does not contain a glyph with that code,
-special fonts will
-.I not
-be searched.
-.
-The
-.B \[rs]N
-escape sequence can be conveniently used in conjunction with the
-.B char
-request, for example
-.
-.RS
-.ft CB
-.IP
-.Text .char \[rs][phone] \[rs]f(ZD\[rs]N'37'
-.ft
-.RE
-.
-.IP
-The index of each glyph is given in the fourth column in the font
-description file after the
-.B charset
-command.
-.
-It is possible to include unnamed glyphs in the font description
-file by using a name of
-.BR \-\-\- ;
-the
-.B \[rs]N
-escape sequence is the only way to use these.
-.
-.TP
-.BI \[rs]O n
-.TQ
-.BI \[rs]O[ n ]
-Suppressing troff output.
-.
-The escapes
-.BR \[rs]02 ,
-.BR \[rs]O3 ,
-.BR \[rs]O4 ,
-and
-.B \[rs]O5
-are intended for internal use by
-.BR \%grohtml .
-.
-.RS
-.TP
-.B \[rs]O0
-Disable any ditroff glyphs from being emitted to the device driver,
-provided that the escape occurs at the outer level (see
-.B \[rs]O3
-and
-.BR \[rs]O4 ).
-.
-.TP
-.B \[rs]O1
-Enable output of glyphs, provided that the escape occurs at the outer
-level.
-.IP
-.B \[rs]O0
-and
-.B \[rs]O1
-also reset the registers
-.BR \[rs]n[opminx] ,
-.BR \[rs]n[opminy] ,
-.BR \[rs]n[opmaxx] ,
-and
-.B \[rs]n[opmaxy]
-to\~-1.
-.
-These four registers mark the top left and bottom right hand corners
-of a box which encompasses all written glyphs.
-.
-.TP
-.B \[rs]O2
-Provided that the escape occurs at the outer level, enable output of
-glyphs and also write out to stderr the page number and four registers
-encompassing the glyphs previously written since the last call to
-.BR \[rs]O .
-.
-.TP
-.B \[rs]O3
-Begin a nesting level.
-.
-At start-up,
-.B troff
-is at outer level.
-.
-This is really an internal mechanism for
-.B \%grohtml
-while producing images.
-.
-They are generated by running the troff source through
-.B troff
-to the postscript device and
-.B ghostscript
-to produce images in PNG format.
-.
-The
-.B \[rs]O3
-escape will start a new page if the device is not html (to reduce the
-possibility of images crossing a page boundary).
-.
-.TP
-.B \[rs]O4
-End a nesting level.
-.
-.TP
-.BI \[rs]O5[ Pfilename ]
-This escape is
-.B \%grohtml
-specific.
-.
-Provided that this escape occurs at the outer nesting level, write
-.I filename
-to stderr.
-.
-The position of the image,
-.IR P ,
-must be specified and must be one of l, r, c, or i (left, right,
-centered, inline).
-.
-.I filename
-will be associated with the production of the next inline image.
-.RE
-.
-.TP
-.BI \[rs]R' name\ \[+-]n '
-This has the same effect as
-.
-.RS
-.IP
-.BI .nr\ name\ \[+-]n
-.RE
-.
-.TP
-.BI \[rs]s( nn
-.TQ
-.BI \[rs]s\[+-]( nn
-Set the point size to
-.I nn
-points;
-.I nn
-must be exactly two digits.
-.
-.TP
-.BI \[rs]s[\[+-] n ]
-.TQ
-.BI \[rs]s\[+-][ n ]
-.TQ
-.BI \[rs]s'\[+-] n '
-.TQ
-.BI \[rs]s\[+-]' n '
-Set the point size to
-.I n
-scaled points;
-.I n
-is a numeric expression with a default scale indicator of\~\c
-.BR z .
-.
-.TP
-.BI \[rs]V x
-.TQ
-.BI \[rs]V( xx
-.TQ
-.BI \[rs]V[ xxx ]
-Interpolate the contents of the environment variable
-.IR xxx ,
-as returned by
-.BR getenv (3).
-.B \[rs]V
-is interpreted in copy-mode.
-.
-.TP
-.BI \[rs]Y x
-.TQ
-.BI \[rs]Y( xx
-.TQ
-.BI \[rs]Y[ xxx ]
-This is approximately equivalent to
-.BI \[rs]X'\[rs]*[ xxx ]'\f[R].
-However the contents of the string or macro
-.I xxx
-are not interpreted; also it is permitted for
-.I xxx
-to have been defined as a macro and thus contain newlines (it is not
-permitted for the argument to
-.B \[rs]X
-to contain newlines).
-.
-The inclusion of newlines requires an extension to the UNIX troff
-output format, and will confuse drivers that do not know about this
-extension.
-.
-.TP
-.BI \[rs]Z' anything '
-Print anything and then restore the horizontal and vertical position;
-.I anything
-may not contain tabs or leaders.
-.
-.TP
-.B \[rs]$0
-The name by which the current macro was invoked.
-.
-The
-.B als
-request can make a macro have more than one name.
-.
-.TP
-.B \[rs]$*
-In a macro or string, the concatenation of all the arguments separated
-by spaces.
-.
-.TP
-.B \[rs]$@
-In a macro or string, the concatenation of all the arguments with each
-surrounded by double quotes, and separated by spaces.
-.
-.TP
-.BI \[rs]$( nn
-.TQ
-.BI \[rs]$[ nnn ]
-In a macro or string, this gives the
-.IR nn -th
-or
-.IR nnn -th
-argument.
-.
-Macros and strings can have an unlimited number of arguments.
-.
-.TP
-.BI \[rs]? anything \[rs]?
-When used in a diversion, this will transparently embed
-.I anything
-in the diversion.
-.I anything
-is read in copy mode.
-.
-When the diversion is reread,
-.I anything
-will be interpreted.
-.I anything
-may not contain newlines; use
-.B \[rs]!\&
-if you want to embed newlines in a diversion.
-.
-The escape sequence
-.B \[rs]?\&
-is also recognised in copy mode and turned into a single internal
-code; it is this code that terminates
-.IR anything .
-Thus
-.
-.RS
-.IP
-.ne 14v+\n(.Vu
-.ft CB
-.nf
-.Text .nr x 1
-.Text .nf
-.Text .di d
-.Text \[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c
-.Text \[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]?
-.Text .di
-.Text .nr x 2
-.Text .di e
-.Text .d
-.Text .di
-.Text .nr x 3
-.Text .di f
-.Text .e
-.Text .di
-.Text .nr x 4
-.Text .f
-.fi
-.ft
-.RE
-.
-.IP
-will print\~\c
-.BR 4 .
-.
-.TP
-.B \[rs]/
-This increases the width of the preceding glyph so that the
-spacing between that glyph and the following glyph will be
-correct if the following glyph is a roman glyph.
-.
-.if t \{\
-. nop For example, if an italic f is immediately followed by a roman
-. nop right parenthesis, then in many fonts the top right portion of
-. nop the f will overlap the top left of the right parenthesis
-. nop producing \f[I]f\f[R])\f[R], which is ugly.
-. nop Inserting
-. B \[rs]/
-. nop produces
-. ie \n(.g \f[I]f\/\f[R])\f[R]
-. el \f[I]f\|\f[R])\f[R]
-. nop and avoids this problem.
-.\}
-It is a good idea to use this escape sequence whenever an italic
-glyph is immediately followed by a roman glyph without any
-intervening space.
-.
-.TP
-.B \[rs],
-This modifies the spacing of the following glyph so that the
-spacing between that glyph and the preceding glyph will
-correct if the preceding glyph is a roman glyph.
-.
-.if t \{\
-. nop For example, inserting
-. B \[rs],
-. nop between the parenthesis and the f changes
-. nop \f[R](\f[I]f\f[R] to
-. ie \n(.g \f[R](\,\f[I]f\f[R].
-. el \f[R](\^\f[I]f\f[R].
-.\}
-It is a good idea to use this escape sequence whenever a roman
-glyph is immediately followed by an italic glyph without any
-intervening space.
-.
-.TP
-.B \[rs])
-Like
-.B \[rs]&
-except that it behaves like a character declared with the
-.B cflags
-request to be transparent for the purposes of end-of-sentence
-recognition.
-.
-.TP
-.B \[rs]~
-This produces an unbreakable space that stretches like a normal
-inter-word space when a line is adjusted.
-.
-.TP
-.B \[rs]:
-This causes the insertion of a zero-width break point.
-.
-It is equal to
-.B \[rs]%
-within a word but without insertion of a soft hyphen character.
-.
-.TP
-.B \[rs]#
-Everything up to and including the next newline is ignored.
-.
-This is interpreted in copy mode.
-.
-It is like
-.B \[rs]"
-except that
-.B \[rs]"
-does not ignore the terminating newline.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New requests"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI .aln\ xx\ yy
-Create an alias
-.I xx
-for number register object named
-.IR yy .
-The new name and the old name will be exactly equivalent.
-.
-If
-.I yy
-is undefined, a warning of type
-.B reg
-will be generated, and the request will be ignored.
-.
-.TP
-.BI .als\ xx\ yy
-Create an alias
-.I xx
-for request, string, macro, or diversion object named
-.IR yy .
-.
-The new name and the old name will be exactly equivalent (it is
-similar to a hard rather than a soft link).
-.
-If
-.I yy
-is undefined, a warning of type
-.B mac
-will be generated, and the request will be ignored.
-.
-The
-.BR de ,
-.BR am ,
-.BR di ,
-.BR da ,
-.BR ds ,
-and
-.B as
-requests only create a new object if the name of the macro, diversion
-or string diversion is currently undefined or if it is defined to be a
-request; normally they modify the value of an existing object.
-.
-.TP
-.BI .am1\ xx\ yy
-Similar to
-.BR .am ,
-but compatibility mode is switched off during execution.
-.
-To be more precise, a `compatibility save' token is inserted at the
-beginning of the macro addition, and a `compatibility restore' token at
-the end.
-.
-As a consequence, the requests
-.BR am ,
-.BR am1 ,
-.BR de ,
-and
-.B de1
-can be intermixed freely since the compatibility save/\:restore tokens
-only affect the macro parts defined by
-.B .am1
-and
-.BR .ds1 .
-.
-.TP
-.BI .ami\ xx\ yy
-Append to macro indirectly.
-.
-See the
-.B dei
-request below for more information.
-.
-.TP
-.BI .ami1\ xx\ yy
-Same as the
-.B ami
-request but compatibility mode is switched off during execution.
-.
-.TP
-.BI .as1\ xx\ yy
-Similar to
-.BR .as ,
-but compatibility mode is switched off during expansion.
-.
-To be more precise, a `compatibility save' token is inserted at the
-beginning of the string, and a `compatibility restore' token at the end.
-.
-As a consequence, the requests
-.BR as ,
-.BR as1 ,
-.BR ds ,
-and
-.B ds1
-can be intermixed freely since the compatibility save/\:restore tokens
-only affect the (sub)strings defined by
-.B as1
-and
-.BR ds1 .
-.
-.TP
-.BI .asciify\ xx
-This request `unformats' the diversion
-.I xx
-in such a way that
-.SM ASCII
-and space characters (and some escape sequences) that were formatted
-and diverted into
-.I xx
-will be treated like ordinary input characters when
-.I xx
-is reread.
-Useful for diversions in conjunction with the
-.B .writem
-request.
-.
-It can be also used for gross hacks; for example, this
-.
-.RS
-.IP
-.ne 7v+\n(.Vu
-.ft CB
-.nf
-.Text .tr @.
-.Text .di x
-.Text @nr n 1
-.Text .br
-.Text .di
-.Text .tr @@
-.Text .asciify x
-.Text .x
-.fi
-.ft
-.RE
-.
-.IP
-will set register\~\c
-.B n
-to\~1.
-.
-Note that glyph information (font, font size, etc.) is not preserved;
-use
-.B .unformat
-instead.
-.
-.TP
-.B .backtrace
-Print a backtrace of the input stack on stderr.
-.
-.TP
-.BI .blm\ xx
-Set the blank line macro to
-.IR xx .
-If there is a blank line macro, it will be invoked when a blank line
-is encountered instead of the usual troff behaviour.
-.
-.TP
-.BI .box\ xx
-.TQ
-.BI .boxa\ xx
-These requests are similar to the
-.B di
-and
-.B da
-requests with the exception that a partially filled line will not
-become part of the diversion (i.e., the diversion always starts with a
-new line) but restored after ending the diversion, discarding the
-partially filled line which possibly comes from the diversion.
-.
-.TP
-.B .break
-Break out of a while loop.
-.
-See also the
-.B while
-and
-.B continue
-requests.
-.
-Be sure not to confuse this with the
-.B br
-request.
-.
-.TP
-.B .brp
-This is the same as
-.BR \[rs]p .
-.
-.TP
-.BI .cflags\ n\ c1\ c2\|.\|.\|.\&
-Characters
-.IR c1 ,
-.IR c2 ,\|.\|.\|.\&
-have properties determined by
-.IR n ,
-which is ORed from the following:
-.
-.RS
-.IP 1
-The character ends sentences (initially characters
-.B .?!\&
-have this property).
-.
-.IP 2
-Lines can be broken before the character (initially no characters have
-this property); a line will not be broken at a character with this
-property unless the characters on each side both have non-zero
-hyphenation codes.
-.
-.IP 4
-Lines can be broken after the character (initially characters
-.B \-\[rs][hy]\[rs][em]
-have this property); a line will not be broken at a character with
-this property unless the characters on each side both have non-zero
-hyphenation codes.
-.
-.IP 8
-The character overlaps horizontally (initially characters
-.B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex]
-have this property).
-.
-.IP 16
-The character overlaps vertically (initially character
-.B \[rs][br]
-has this property).
-.
-.IP 32
-An end-of-sentence character followed by any number of characters with
-this property will be treated as the end of a sentence if followed by
-a newline or two spaces; in other words the character is transparent
-for the purposes of end-of-sentence recognition; this is the same as
-having a zero space factor in \*[tx] (initially characters
-.B \[dq]')]*\[rs](dg\[rs](rq
-have this property).
-.RE
-.
-.TP
-.BI .char\ c\ string
-Define glyph
-.I c
-to be
-.IR string .
-Every time glyph
-.I c
-needs to be printed,
-.I string
-will be processed in a temporary environment and the result will be
-wrapped up into a single object.
-.
-Compatibility mode will be turned off and the escape character will be
-set to
-.B \[rs]
-while
-.I string
-is being processed.
-.
-Any emboldening, constant spacing or track kerning will be applied to
-this object rather than to individual glyphs in
-.IR string .
-.
-.IP
-A glyph defined by this request can be used just like a normal
-glyph provided by the output device.
-.
-In particular other characters can be translated to it with the
-.B tr
-request; it can be made the leader character by the
-.B lc
-request; repeated patterns can be drawn with the character using the
-.B \[rs]l
-and
-.B \[rs]L
-escape sequences; words containing the character can be hyphenated
-correctly, if the
-.B hcode
-request is used to give the character a hyphenation code.
-.
-.IP
-There is a special anti-recursion feature: Use of glyph within the
-glyph's definition will be handled like normal glyphs not
-defined with
-.BR char .
-.IP
-A glyph definition can be removed with the
-.B rchar
-request.
-.
-.TP
-.BI .chop\ xx
-Chop the last element off macro, string, or diversion
-.IR xx .
-This is useful for removing the newline from the end of diversions
-that are to be interpolated as strings.
-.
-.TP
-.BI .close\ stream
-Close the stream named
-.IR stream ;
-.I stream
-will no longer be an acceptable argument to the
-.B write
-request.
-.
-See the
-.B open
-request.
-.
-.TP
-.BI .composite\ glyph1\ glyph2
-Map glyph name
-.I glyph1
-to glyph name
-.I glyph2
-if it is used in
-.BI \[rs][ ... ]
-with more than one component.
-.
-.TP
-.B .continue
-Finish the current iteration of a while loop.
-.
-See also the
-.B while
-and
-.B break
-requests.
-.
-.TP
-.BI .color\ n
-If
-.I n
-is non-zero or missing, enable colors (this is the default), otherwise
-disable them.
-.
-.TP
-.BI .cp\ n
-If
-.I n
-is non-zero or missing, enable compatibility mode, otherwise disable
-it.
-.
-In compatibility mode, long names are not recognised, and the
-incompatibilities caused by long names do not arise.
-.
-.TP
-.BI .defcolor\ xxx\ scheme\ color_components
-Define color.
-.I scheme
-can be one of the following values:
-.B rgb
-(three components),
-.B cym
-(three components),
-.B cmyk
-(four components), and
-.B gray
-or
-.B grey
-(one component).
-.
-Color components can be given either as a hexadecimal string or as
-positive decimal integers in the range 0-65535.
-.
-A hexadecimal string contains all color components concatenated; it
-must start with either
-.B #
-or
-.BR ## .
-The former specifies hex values in the range 0-255 (which are
-internally multiplied by\~257), the latter in the range 0-65535.
-.
-Examples: #FFC0CB (pink), ##ffff0000ffff (magenta).
-.
-A new scaling indicator\~\c
-.B f
-has been introduced which multiplies its value by\~65536; this makes
-it convenient to specify color components as fractions in the range 0
-to\~1.
-.
-Example:
-.
-.RS
-.IP
-.ft CB
-.Text .defcolor darkgreen rgb 0.1f 0.5f 0.2f
-.br
-.ft
-.RE
-.
-.IP
-Note that
-.B f
-is the default scaling indicator for the
-.B defcolor
-request, thus the above statement is equivalent to
-.
-.RS
-.IP
-.ft CB
-.Text .defcolor darkgreen rgb 0.1 0.5 0.2
-.br
-.ft
-.RE
-.
-.IP
-The color named
-.B default
-(which is device-specific) can't be redefined.
-.
-It is possible that the default color for
-.esc M
-and
-.esc m
-is not the same.
-.
-.TP
-.BI .de1\ xx\ yy
-Similar to
-.BR .de ,
-but compatibility mode is switched off during execution.
-.
-On entry, the current compatibility mode is saved and restored at exit.
-.
-.TP
-.BI .dei\ xx\ yy
-Define macro indirectly.
-.
-The following example
-.
-.RS
-.IP
-.ne 2v+\n(.Vu
-.ft CB
-.nf
-.Text .ds xx aa
-.Text .ds yy bb
-.Text .dei xx yy
-.fi
-.ft
-.RE
-.
-.IP
-is equivalent to
-.
-.RS
-.IP
-.ft CB
-.Text .de aa bb
-.br
-.ft
-.RE
-.
-.TP
-.BI .dei1\ xx\ yy
-Similar to the
-.B dei
-request but compatibility mode is switched off during execution.
-.
-.TP
-.BI .do\ xxx
-Interpret
-.I .xxx
-with compatibility mode disabled.
-.
-For example,
-.
-.RS
-.
-.IP
-.ft CB
-.Text .do fam T
-.br
-.ft
-.
-.P
-would have the same effect as
-.
-.IP
-.ft CB
-.Text .fam T
-.br
-.ft
-.
-.P
-except that it would work even if compatibility mode had been enabled.
-.
-Note that the previous compatibility mode is restored before any files
-sourced by
-.I xxx
-are interpreted.
-.
-.RE
-.
-.TP
-.BI .ds1\ xx\ yy
-Similar to
-.BR .ds ,
-but compatibility mode is switched off during expansion.
-.
-To be more precise, a `compatibility save' token is inserted at the
-beginning of the string, and a `compatibility restore' token at the end.
-.
-.TP
-.B .ecs
-Save current escape character.
-.
-.TP
-.B .ecr
-Restore escape character saved with
-.BR ecs .
-Without a previous call to
-.BR ecs ,
-.RB ` \[rs] '
-will be the new escape character.
-.
-.TP
-.BI .evc\ xx
-Copy the contents of environment
-.I xx
-to the current environment.
-.
-No pushing or popping of environments will be done.
-.
-.TP
-.BI .fam\ xx
-Set the current font family to
-.IR xx .
-The current font family is part of the current environment.
-If
-.I xx
-is missing, switch back to previous font family.
-.
-The value at start-up is `T'.
-.
-See the description of the
-.B sty
-request for more information on font families.
-.
-.TP
-.BI .fchar\ c\ string
-Define fallback glyph
-.I c
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request; the only difference is that a glyph defined with
-.B char
-hides the glyph with the same name in the current font, whereas a
-glyph defined with
-.B fchar
-is checked only if the particular glyph isn't found in the current font.
-.
-This test happens before checking special fonts.
-.
-.TP
-.BI .fcolor\ c
-Set the fill color to
-.IR c .
-If
-.I c
-is missing,
-switch to the previous fill color.
-.
-.TP
-.BI .fschar\ f\ c\ string
-Define fallback glyph
-.I c
-for font
-.I f
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request (with an additional argument to specify the font); a glyph
-defined with
-.B fschar
-is searched after the list of fonts declared with the
-.B fspecial
-request but before the list of fonts declared with
-.BR special .
-.
-.TP
-.BI .fspecial\ f\ s1\ s2\|.\|.\|.\&
-When the current font is
-.IR f ,
-fonts
-.IR s1 ,
-.IR s2 ,\|.\|.\|.\&
-will be special, that is, they will searched for glyphs not in
-the current font.
-.
-Any fonts specified in the
-.B special
-request will be searched after fonts specified in the
-.B fspecial
-request.
-.
-Without argument, reset the list of global special fonts to be empty.
-.
-.TP
-.BI .ftr\ f\ g
-Translate font
-.I f
-to
-.IR g .
-Whenever a font named
-.I f
-is referred to in an
-.B \[rs]f
-escape sequence, in the
-.B F
-and
-.B S
-conditional operators, or in the
-.BR ft ,
-.BR ul ,
-.BR bd ,
-.BR cs ,
-.BR tkf ,
-.BR special ,
-.BR fspecial ,
-.BR fp ,
-or
-.BR sty
-requests, font
-.I g
-will be used.
-If
-.I g
-is missing, or equal to
-.I f
-then font
-.I f
-will not be translated.
-.
-.TP
-.BI .gcolor\ c
-Set the glyph color to
-.IR c .
-If
-.I c
-is missing,
-switch to the previous glyph color.
-.
-.TP
-.BI .hcode \ c1\ code1\ c2\ code2\|.\|.\|.\&
-Set the hyphenation code of character
-.I c1
-to
-.I code1
-and that of
-.I c2
-to
-.IR code2 .
-A hyphenation code must be a single input character (not a special
-character) other than a digit or a space.
-.
-Initially each lower-case letter \%a-z has a hyphenation code, which is
-itself, and each upper-case letter \%A-Z has a hyphenation code which is
-the lower-case version of itself.
-.
-See also the
-.B hpf
-request.
-.
-.TP
-.BI .hla\ lang
-Set the current hyphenation language to
-.IR lang .
-Hyphenation exceptions specified with the
-.B hw
-request and hyphenation patterns specified with the
-.B hpf
-request are both associated with the current hyphenation language.
-.
-The
-.B hla
-request is usually invoked by the
-.B troffrc
-file.
-.
-.TP
-.BI .hlm\ n
-Set the maximum number of consecutive hyphenated lines to\~\c
-.IR n .
-If
-.I n
-is negative, there is no maximum.
-.
-The default value is\~\-1.
-.
-This value is associated with the current environment.
-.
-Only lines output from an environment count towards the maximum
-associated with that environment.
-.
-Hyphens resulting from
-.B \[rs]%
-are counted; explicit hyphens are not.
-.
-.TP
-.BI .hpf\ file
-Read hyphenation patterns from
-.IR file ;
-this will be searched for in the same way that
-.IB name .tmac
-is searched for when the
-.BI \-m name
-option is specified.
-.
-It should have the same format as (simple) \*[tx] patterns files.
-.
-More specifically, the following scanning rules are implemented.
-.
-.RS
-.IP \[bu]
-A percent sign starts a comment (up to the end of the line) even if
-preceded by a backslash.
-.
-.IP \[bu]
-No support for `digraphs' like
-.BR \[rs]$ .
-.
-.IP \[bu]
-.BI ^^ xx
-.RI ( x
-is 0-9 or a-f) and
-.BI ^^ x
-(character code of\~\c
-.I x
-in the range 0-127) are recognized; other use of
-.B ^
-causes an error.
-.
-.IP \[bu]
-No macro expansion.
-.
-.IP \[bu]
-.B hpf
-checks for the expression
-.B \[rs]patterns{.\|.\|.}
-(possibly with whitespace before and after the braces).
-.
-Everything between the braces is taken as hyphenation patterns.
-.
-Consequently,
-.B {
-and
-.B }
-are not allowed in patterns.
-.
-.IP \[bu]
-Similarly,
-.B \[rs]hyphenation{.\|.\|.}
-gives a list of hyphenation exceptions.
-.
-.IP \[bu]
-.B \[rs]endinput
-is recognized also.
-.
-.IP \[bu]
-For backwards compatibility, if
-.B \[rs]patterns
-is missing, the whole file is treated as a list of hyphenation patterns
-(only recognizing the
-.BR % \~\c
-character as the start of a comment).
-.RE
-.
-.IP
-Use the
-.B hpfcode
-request to map the encoding used in hyphenation patterns files to
-.BR groff 's
-input encoding.
-.IP
-The set of hyphenation patterns is associated with the current language
-set by the
-.B hla
-request.
-.
-The
-.B hpf
-request is usually invoked by the
-.B troffrc
-file; a second call replaces the old patterns with the new ones.
-.
-.TP
-.BI .hpfa\ file
-The same as
-.B hpf
-except that the hyphenation patterns from
-.I file
-are appended to the patterns already loaded in the current language.
-.
-.TP
-.BI .hpfcode\ a\ b\ c\ d\ .\|.\|.
-After reading a hyphenation patterns file with the
-.B hpf
-or
-.B hpfa
-request, convert all characters with character code\~\c
-.I a
-in the recently read patterns to character code\~\c
-.IR b ,
-character code\~\c
-.I c
-to\~\c
-.IR d ,
-etc.
-.
-Initially, all character codes map to themselves.
-.
-The arguments of
-.B hpfcode
-must be integers in the range 0 to\~255.
-.
-Note that it is even possible to use character codes which are invalid in
-.B groff
-otherwise.
-.
-.TP
-.BI .hym\ n
-Set the
-.I hyphenation margin
-to\~\c
-.IR n :
-when the current adjustment mode is not\~\c
-.BR b ,
-the line will not be hyphenated if the line is no more than
-.I n
-short.
-.
-The default hyphenation margin is\~0.
-.
-The default scaling indicator for this request is\~\c
-.IR m .
-The hyphenation margin is associated with the current environment.
-.
-The current hyphenation margin is available in the
-.B \[rs]n[.hym]
-register.
-.
-.TP
-.BI .hys\ n
-Set the
-.I hyphenation space
-to\~\c
-.IR n :
-when the current adjustment mode is\~\c
-.B b
-don't hyphenate the line if the line can be justified by adding no
-more than
-.I n
-extra space to each word space.
-.
-The default hyphenation space is\~0.
-.
-The default scaling indicator for this request is\~\c
-.BR m .
-The hyphenation space is associated with the current environment.
-.
-The current hyphenation space is available in the
-.B \[rs]n[.hys]
-register.
-.
-.TP
-.BI .itc\ n\ macro
-Variant of
-.B .it
-for which a line interrupted with
-.B \[rs]c
-counts as one input line.
-.
-.TP
-.BI .kern\ n
-If
-.I n
-is non-zero or missing, enable pairwise kerning, otherwise disable it.
-.
-.TP
-.BI .length\ xx\ string
-Compute the length of
-.I string
-and return it in the number register
-.I xx
-(which is not necessarily defined before).
-.
-.TP
-.BI .linetabs\ n
-If
-.I n
-is non-zero or missing, enable line-tabs mode, otherwise disable it
-(which is the default).
-.
-In line-tabs mode, tab distances are computed relative to the
-(current) output line.
-.
-Otherwise they are taken relative to the input line.
-.
-For example, the following
-.
-.RS
-.IP
-.ne 6v+\n(.Vu
-.ft CB
-.nf
-.Text .ds x a\[rs]t\[rs]c
-.Text .ds y b\[rs]t\[rs]c
-.Text .ds z c
-.Text .ta 1i 3i
-.Text \[rs]*x
-.Text \[rs]*y
-.Text \[rs]*z
-.fi
-.ft
-.RE
-.
-.IP
-yields
-.
-.RS
-.IP
-a b c
-.RE
-.
-.IP
-In line-tabs mode, the same code gives
-.
-.RS
-.IP
-a b c
-.RE
-.
-.IP
-Line-tabs mode is associated with the current environment; the
-read-only number register
-.B \\[rs]n[.linetabs]
-is set to\~1 if in line-tabs mode, and 0 otherwise.
-.
-.TP
-.BI .mso\ file
-The same as the
-.B so
-request except that
-.I file
-is searched for in the same directories as macro files for the the
-.B \-m
-command line option.
-.
-If the file name to be included has the form
-.IB name .tmac
-and it isn't found,
-.B mso
-tries to include
-.BI tmac. name
-instead and vice versa.
-.
-.TP
-.BI .nop \ anything
-Execute
-.IR anything .
-This is similar to `.if\ 1'.
-.
-.TP
-.B .nroff
-Make the
-.B n
-built-in condition true and the
-.B t
-built-in condition false.
-.
-This can be reversed using the
-.B troff
-request.
-.
-.TP
-.BI .open\ stream\ filename
-Open
-.I filename
-for writing and associate the stream named
-.I stream
-with it.
-.
-See also the
-.B close
-and
-.B write
-requests.
-.
-.TP
-.BI .opena\ stream\ filename
-Like
-.BR open ,
-but if
-.I filename
-exists, append to it instead of truncating it.
-.
-.TP
-.BI .output\ string
-Emit
-.I string
-directly to the intermediate output (subject to copy-mode interpretation);
-this is similar to
-.B \[rs]!
-used at the top level.
-.
-An initial double quote in
-.I string
-is stripped off to allow initial blanks.
-.
-.TP
-.B .pnr
-Print the names and contents of all currently defined number registers
-on stderr.
-.
-.TP
-.BI .psbb \ filename
-Get the bounding box of a PostScript image
-.IR filename .
-This file must conform to Adobe's Document Structuring Conventions;
-the command looks for a
-.B \%%%BoundingBox
-comment to extract the bounding box values.
-.
-After a successful call, the coordinates (in PostScript units) of the
-lower left and upper right corner can be found in the registers
-.BR \[rs]n[llx] ,
-.BR \[rs]n[lly] ,
-.BR \[rs]n[urx] ,
-and
-.BR \[rs]n[ury] ,
-respectively.
-.
-If some error has occurred, the four registers are set to zero.
-.
-.TP
-.BI .pso \ command
-This behaves like the
-.B so
-request except that input comes from the standard output of
-.IR command .
-.
-.TP
-.B .ptr
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr.
-.
-Empty slots in the page trap list are printed as well, because they
-can affect the priority of subsequently planted traps.
-.
-.TP
-.BI .pvs \ \[+-]n
-Set the post-vertical line space to
-.IR n ;
-default scale indicator is\~\c
-.BR p .
-.
-This value will be added to each line after it has been output.
-.
-With no argument, the post-vertical line space is set to its previous
-value.
-.
-.IP
-The total vertical line spacing consists of four components:
-.B .vs
-and
-.B \[rs]x
-with a negative value which are applied before the line is output, and
-.B .pvs
-and
-.B \[rs]x
-with a positive value which are applied after the line is output.
-.
-.TP
-.BI .rchar\ c1\ c2\|.\|.\|.\&
-Remove the definitions of glyphs
-.IR c1 ,
-.IR c2 ,\|.\|.\|.
-This undoes the effect of a
-.B char
-request.
-.
-.TP
-.B .return
-Within a macro, return immediately.
-.
-If called with an argument, return twice, namely from the current macro and
-from the macro one level higher.
-.
-No effect otherwise.
-.
-.TP
-.BI .rfschar\ c1\ c2\|.\|.\|.\&
-Remove the font-specific definitions of glyphs
-.IR c1 ,
-.IR c2 ,\|.\|.\|.
-This undoes the effect of a
-.B fschar
-request.
-.
-.TP
-.B .rj
-.TQ
-.BI .rj \~n
-Right justify the next
-.IR n \~\c
-input lines.
-.
-Without an argument right justify the next input line.
-.
-The number of lines to be right justified is available in the
-.B \[rs]n[.rj]
-register.
-.
-This implicitly does
-.BR .ce \~0 .
-The
-.B ce
-request implicitly does
-.BR .rj \~0 .
-.
-.TP
-.BI .rnn \ xx\ yy
-Rename number register
-.I xx
-to
-.IR yy .
-.
-.TP
-.BI .schar\ c\ string
-Define global fallback glyph
-.I c
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request; a glyph defined with
-.B schar
-is searched after the list of fonts declared with the
-.B special
-request but before the mounted special fonts.
-.
-.TP
-.BI .shc\ c
-Set the soft hyphen character to
-.IR c .
-If
-.I c
-is omitted, the soft hyphen character will be set to the default
-.BR \[rs](hy .
-The soft hyphen character is the glyph which will be inserted when
-a word is hyphenated at a line break.
-.
-If the soft hyphen character does not exist in the font of the
-glyph immediately preceding a potential break point, then the line
-will not be broken at that point.
-.
-Neither definitions (specified with the
-.B char
-request) nor translations (specified with the
-.B tr
-request) are considered when finding the soft hyphen character.
-.
-.TP
-.BI .shift\ n
-In a macro, shift the arguments by
-.I n
-positions: argument\~\c
-.I i
-becomes argument
-.IR i \- n ;
-arguments 1 to\~\c
-.I n
-will no longer be available.
-.
-If
-.I n
-is missing, arguments will be shifted by\~1.
-.
-Shifting by negative amounts is currently undefined.
-.
-.TP
-.BI .sizes\ s1\ s2\|.\|.\|.\|sn\ [0]
-This command is similar to the
-.B sizes
-command of a
-.B DESC
-file.
-.
-It sets the available font sizes for the current font to
-.IR s1 ,
-.IR s2 ,\|.\|.\|.\|,\~ sn
-scaled points.
-.
-The list of sizes can be terminated by an optional\~\c
-.BR 0 .
-.
-Each
-.I si
-can also be a range of sizes
-.IR m - n .
-.
-Contrary to the font file command, the list can't extend over more
-than a single line.
-.
-.TP
-.BI .special\ s1\ s2\|.\|.\|.\&
-Fonts
-.IR s1 ,
-.IR s2 ,
-are special and will be searched for glyphs not in the current
-font.
-.
-Without arguments, reset the list of special fonts to be empty.
-.
-.TP
-.BI .spreadwarn\ limit
-Make
-.B troff
-emit a warning if the additional space inserted for each space between
-words in an output line is larger or equal to
-.IR limit .
-.
-A negative value is changed to zero; no argument toggles the warning on
-and off without changing
-.IR limit .
-.
-The default scaling indicator is\~\c
-.BR m .
-.
-At startup,
-.B spreadwarn
-is deactivated, and
-.I limit
-is set to 3m.
-.
-For example,
-.B .spreadwarn\ 0.2m
-will cause a warning if
-.B troff
-must add 0.2m or more for each interword space in a line.
-.
-This request is active only if text is justified to both margins (using
-.BR .ad\ b ).
-.
-.TP
-.BI .sty\ n\ f
-Associate style\~\c
-.I f
-with font position\~\c
-.IR n .
-A font position can be associated either with a font or with a style.
-.
-The current font is the index of a font position and so is also either
-a font or a style.
-.
-When it is a style, the font that is actually used is the font the
-name of which is the concatenation of the name of the current family
-and the name of the current style.
-.
-For example, if the current font is\~1 and font position\~1 is
-associated with style\~\c
-.B R
-and the current font family is\~\c
-.BR T ,
-then font
-.BR TR
-will be used.
-.
-If the current font is not a style, then the current family is ignored.
-.
-When the requests
-.BR cs ,
-.BR bd ,
-.BR tkf ,
-.BR uf ,
-or
-.B fspecial
-are applied to a style, then they will instead be applied to the
-member of the current family corresponding to that style.
-.
-The default family can be set with the
-.B \-f
-option.
-.
-The
-.B styles
-command in the
-.SM DESC
-file controls which font positions (if any) are initially associated
-with styles rather than fonts.
-.
-.TP
-.BI .substring\ xx\ n1\ [ n2 ]
-Replace the string named
-.I xx
-with the substring defined by the indices
-.I n1
-and
-.IR n2 .
-The first character in the string has index\~0.
-.
-If
-.I n2
-is omitted, it is taken to be equal to the string's length.
-.
-If the index value
-.I n1
-or
-.I n2
-is negative, it will be counted from the end of the string,
-going backwards:
-.
-The last character has index\~-1, the character before the last
-character has index\~-2, etc.
-.
-.TP
-.BI .tkf\ f\ s1\ n1\ s2\ n2
-Enable track kerning for font
-.IR f .
-When the current font is
-.I f
-the width of every glyph will be increased by an amount between
-.I n1
-and
-.IR n2 ;
-when the current point size is less than or equal to
-.I s1
-the width will be increased by
-.IR n1 ;
-when it is greater than or equal to
-.I s2
-the width will be increased by
-.IR n2 ;
-when the point size is greater than or equal to
-.I s1
-and less than or equal to
-.I s2
-the increase in width is a linear function of the point size.
-.
-.TP
-.BI .tm1\ string
-Similar to the
-.B tm
-request,
-.I string
-is read in copy mode and written on the standard error, but an initial
-double quote in
-.I string
-is stripped off to allow initial blanks.
-.
-.TP
-.BI .tmc\ string
-Similar to
-.B tm1
-but without writing a final newline.
-.
-.TP
-.BI .trf\ filename
-Transparently output the contents of file
-.IR filename .
-Each line is output as if preceded by
-.BR \[rs]! ;
-however, the lines are not subject to copy-mode interpretation.
-.
-If the file does not end with a newline, then a newline will be added.
-.
-For example, you can define a macro\~\c
-.I x
-containing the contents of file\~\c
-.IR f ,
-using
-.
-.RS
-.IP
-.ne 2v+\n(.Vu
-.ft CB
-.nf
-.Text .di x
-.Text .trf f
-.Text .di
-.fi
-.ft
-.RE
-.
-.IP
-Unlike with the
-.B cf
-request, the file cannot contain characters such as
-.SM NUL
-that are not legal troff input characters.
-.
-.TP
-.BI .trin\ abcd
-This is the same as the
-.B tr
-request except that the
-.B asciify
-request will use the character code (if any) before the character
-translation.
-.
-Example:
-.
-.RS
-.IP
-.nf
-.ft CB
-.Text .trin ax
-.Text .di xxx
-.Text a
-.Text .br
-.Text .di
-.Text .xxx
-.Text .trin aa
-.Text .asciify xxx
-.Text .xxx
-.fi
-.ft
-.RE
-.
-.IP
-The result is
-.BR x\ a .
-.
-Using
-.BR tr ,
-the result would be
-.BR x\ x .
-.
-.TP
-.BI .trnt\ abcd
-This is the same as the
-.B tr
-request except that the translations do not apply to text that is
-transparently throughput into a diversion with
-.BR \[rs]! .
-For example,
-.
-.RS
-.IP
-.nf
-.ft CB
-.Text .tr ab
-.Text .di x
-.Text \[rs]!.tm a
-.Text .di
-.Text .x
-.fi
-.ft
-.RE
-.
-.IP
-will print\~\c
-.BR b ;
-if
-.B trnt
-is used instead of
-.B tr
-it will print\~\c
-.BR a .
-.RE
-.
-.TP
-.B .troff
-Make the
-.B n
-built-in condition false, and the
-.B t
-built-in condition true.
-.
-This undoes the effect of the
-.B nroff
-request.
-.
-.TP
-.BI .unformat\ xx
-This request `unformats' the diversion
-.IR xx .
-Contrary to the
-.B .asciify
-request, which tries to convert formatted elements of the diversion
-back to input tokens as much as possible,
-.B .unformat
-will only handle tabs and spaces between words (usually caused by
-spaces or newlines in the input) specially.
-.
-The former are treated as if they were input tokens, and the latter
-are stretchable again.
-.
-Note that the vertical size of lines is not preserved.
-.
-Glyph information (font, font size, space width, etc.) is retained.
-.
-Useful in conjunction with the
-.B .box
-and
-.B .boxa
-requests.
-.
-.TP
-.BI .vpt\ n
-Enable vertical position traps if
-.I n
-is non-zero, disable them otherwise.
-.
-Vertical position traps are traps set by the
-.B wh
-or
-.B dt
-requests.
-.
-Traps set by the
-.B it
-request are not vertical position traps.
-.
-The parameter that controls whether vertical position traps are
-enabled is global.
-.
-Initially vertical position traps are enabled.
-.
-.TP
-.BI .warn\ n
-Control warnings.
-.I n
-is the sum of the numbers associated with each warning that is to be
-enabled; all other warnings will be disabled.
-.
-The number associated with each warning is listed in
-.BR @g@troff (@MAN1EXT@).
-.
-For example,
-.B .warn\~0
-will disable all warnings, and
-.B .warn\~1
-will disable all warnings except that about missing glyphs.
-.
-If
-.I n
-is not given, all warnings will be enabled.
-.
-.TP
-.BI .warnscale\ si
-Set the scaling indicator used in warnings to
-.IR si .
-.
-Valid values for
-.I si
-are
-.BR u ,
-.BR i ,
-.BR c ,
-.BR p ,
-and
-.BR P .
-.
-At startup, it is set to\~\c
-.BR i .
-.
-.TP
-.BI .while \ c\ anything
-While condition\~\c
-.I c
-is true, accept
-.I anything
-as input;
-.IR c \~\c
-can be any condition acceptable to an
-.B if
-request;
-.I anything
-can comprise multiple lines if the first line starts with
-.B \[rs]{
-and the last line ends with
-.BR \[rs]} .
-See also the
-.B break
-and
-.B continue
-requests.
-.
-.TP
-.BI .write\ stream\ anything
-Write
-.I anything
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I anything
-is read in copy mode;
-a leading\~\c
-.B \[dq]
-will be stripped.
-.
-.TP
-.BI .writec\ stream\ anything
-Similar to
-.B write
-but without writing a final newline.
-.
-.TP
-.BI .writem\ stream\ xx
-Write the contents of the macro or string
-.I xx
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I xx
-is read in copy mode.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Extended escape sequences"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \[rs]D' .\|.\|. '
-All drawing commands of groff's intermediate output are accepted.
-.
-See subsection
-.B "Drawing Commands"
-below for more information.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Extended requests"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI .cf\ filename
-When used in a diversion, this will embed in the diversion an object
-which, when reread, will cause the contents of
-.I filename
-to be transparently copied through to the output.
-.
-In UNIX troff, the contents of
-.I filename
-is immediately copied through to the output regardless of whether
-there is a current diversion; this behaviour is so anomalous that it
-must be considered a bug.
-.
-.TP
-.BI .de\ xx\ yy
-.TQ
-.BI .am\ xx\ yy
-.TQ
-.BI .ds\ xx\ yy
-.TQ
-.BI .as\ xx\ yy
-In compatibility mode, these requests behaves similar to
-.BR .de1 ,
-.BR .am1 ,
-.BR .ds1 ,
-and
-.BR .as1 ,
-respectively: A `compatibility save' token is inserted at the
-beginning, and a `compatibility restore' token at the end, with
-compatibility mode switched on during execution.
-.
-.TP
-.BI .ev\ xx
-If
-.I xx
-is not a number, this will switch to a named environment called
-.IR xx .
-The environment should be popped with a matching
-.B ev
-request without any arguments, just as for numbered environments.
-.
-There is no limit on the number of named environments; they will be
-created the first time that they are referenced.
-.
-.TP
-.BI .ss\ m\ n
-When two arguments are given to the
-.B ss
-request, the second argument gives the
-.IR "sentence space size" .
-If the second argument is not given, the sentence space size
-will be the same as the word space size.
-.
-Like the word space size, the sentence space is in units of
-one twelfth of the spacewidth parameter for the current font.
-.
-Initially both the word space size and the sentence
-space size are\~12.
-.
-Contrary to UNIX troff, GNU troff handles this request in nroff mode
-also; a given value is then rounded down to the nearest multiple
-of\~12.
-.
-The sentence space size is used in two circumstances.
-.
-If the end of a sentence occurs at the end of a line in fill mode,
-then both an inter-word space and a sentence space will be added; if
-two spaces follow the end of a sentence in the middle of a line, then
-the second space will be a sentence space.
-.
-Note that the behaviour of UNIX troff will be exactly that exhibited
-by GNU troff if a second argument is never given to the
-.B ss
-request.
-.
-In GNU troff, as in UNIX troff, you should always follow a sentence
-with either a newline or two spaces.
-.
-.TP
-.BI .ta\ n1\ n2\|.\|.\|.nn \ T\ r1\ r2\|.\|.\|.\|rn
-Set tabs at positions
-.IR n1 ,
-.IR n2 ,\|.\|.\|.\|,
-.I nn
-and then set tabs at
-.IR nn + r1 ,
-.IR nn + r2 ,\|.\|.\|.\|,
-.IR nn + rn
-and then at
-.IR nn + rn + r1 ,
-.IR nn + rn + r2 ,\|.\|.\|.\|,
-.IR nn + rn + rn ,
-and so on.
-For example,
-.
-.RS
-.IP
-.ft CB
-.Text .ta T .5i
-.br
-.ft
-.
-.P
-will set tabs every half an inch.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New number registers"
-.\" --------------------------------------------------------------------
-.
-The following read-only registers are available:
-.
-.TP
-.B \[rs]n[.C]
-1\~if compatibility mode is in effect, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.cdp]
-The depth of the last glyph added to the current environment.
-.
-It is positive if the glyph extends below the baseline.
-.
-.TP
-.B \[rs]n[.ce]
-The number of lines remaining to be centered, as set by the
-.B ce
-request.
-.
-.TP
-.B \[rs]n[.cht]
-The height of the last glyph added to the current environment.
-.
-It is positive if the glyph extends above the baseline.
-.
-.TP
-.B \[rs]n[.color]
-1\~if colors are enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.csk]
-The skew of the last glyph added to the current environment.
-.
-The
-.I skew
-of a glyph is how far to the right of the center of a glyph
-the center of an accent over that glyph should be placed.
-.
-.TP
-.B \[rs]n[.ev]
-The name or number of the current environment.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.fam]
-The current font family.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.fn]
-The current (internal) real font name.
-.
-This is a string-valued register.
-.
-If the current font is a style, the value of
-.B \[rs]n[.fn]
-is the proper concatenation of family and style name.
-.
-.TP
-.B \[rs]n[.fp]
-The number of the next free font position.
-.
-.TP
-.B \[rs]n[.g]
-Always\~1.
-.
-Macros should use this to determine whether they are running under GNU
-troff.
-.
-.TP
-.B \[rs]n[.height]
-The current height of the font as set with
-.BR \[rs]H .
-.
-.TP
-.B \[rs]n[.hla]
-The current hyphenation language as set by the
-.B hla
-request.
-.
-.TP
-.B \[rs]n[.hlc]
-The number of immediately preceding consecutive hyphenated lines.
-.
-.TP
-.B \[rs]n[.hlm]
-The maximum allowed number of consecutive hyphenated lines, as set by
-the
-.B hlm
-request.
-.
-.TP
-.B \[rs]n[.hy]
-The current hyphenation flags (as set by the
-.B hy
-request).
-.
-.TP
-.B \[rs]n[.hym]
-The current hyphenation margin (as set by the
-.B hym
-request).
-.
-.TP
-.B \[rs]n[.hys]
-The current hyphenation space (as set by the
-.B hys
-request).
-.
-.TP
-.B \[rs]n[.in]
-The indent that applies to the current output line.
-.
-.TP
-.B \[rs]n[.int]
-Set to a positive value if last output line is interrupted (i.e., if
-it contains
-.IR \[rs]c ).
-.
-.TP
-.B \[rs]n[.kern]
-1\~if pairwise kerning is enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.lg]
-The current ligature mode (as set by the
-.B lg
-request).
-.
-.TP
-.B \[rs]n[.linetabs]
-The current line-tabs mode (as set by the
-.B linetabs
-request).
-.
-.TP
-.B \[rs]n[.ll]
-The line length that applies to the current output line.
-.
-.TP
-.B \[rs]n[.lt]
-The title length as set by the
-.B lt
-request.
-.
-.TP
-.B \[rs]n[.m]
-The name of the current drawing color.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.M]
-The name of the current background color.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.ne]
-The amount of space that was needed in the last
-.B ne
-request that caused a trap to be sprung.
-.
-Useful in conjunction with the
-.B \[rs]n[.trunc]
-register.
-.
-.TP
-.B \[rs]n[.ns]
-1\~if no-space mode is active, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.pe]
-1\~during a page ejection caused by the
-.B bp
-request, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.pn]
-The number of the next page, either the value set by a
-.B pn
-request, or the number of the current page plus\~1.
-.
-.TP
-.B \[rs]n[.ps]
-The current pointsize in scaled points.
-.
-.TP
-.B \[rs]n[.psr]
-The last-requested pointsize in scaled points.
-.
-.TP
-.B \[rs]n[.pvs]
-The current post-vertical line space as set with the
-.B pvs
-request.
-.
-.TP
-.B \[rs]n[.rj]
-The number of lines to be right-justified as set by the
-.B rj
-request.
-.
-.TP
-.B \[rs]n[.slant]
-The slant of the current font as set with
-.BR \[rs]S .
-.
-.TP
-.B \[rs]n[.sr]
-The last requested pointsize in points as a decimal fraction.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.ss]
-.TQ
-.B \[rs]n[.sss]
-These give the values of the parameters set by the first and second
-arguments of the
-.B ss
-request.
-.
-.TP
-.B \[rs]n[.sty]
-The current font style.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.tabs]
-A string representation of the current tab settings suitable for use
-as an argument to the
-.B ta
-request.
-.
-.TP
-.B \[rs]n[.trunc]
-The amount of vertical space truncated by the most recently sprung
-vertical position trap, or, if the trap was sprung by a
-.B ne
-request, minus the amount of vertical motion produced by the
-.B ne
-request.
-.
-In other words, at the point a trap is sprung, it represents the
-difference of what the vertical position would have been but for the
-trap, and what the vertical position actually is.
-.
-Useful in conjunction with the
-.B \[rs]n[.ne]
-register.
-.
-.TP
-.B \[rs]n[.U]
-Set to 1 if in safer mode and to 0 if in unsafe mode (as given with the
-.B \-U
-command line option).
-.
-.TP
-.B \[rs]n[.vpt]
-1\~if vertical position traps are enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.warn]
-The sum of the numbers associated with each of the currently enabled
-warnings.
-.
-The number associated with each warning is listed in
-.BR @g@troff (@MAN1EXT@).
-.
-.TP
-.B \[rs]n[.x]
-The major version number.
-.
-For example, if the version number is 1.03, then
-.B \[rs]n[.x]
-will contain\~1.
-.
-.TP
-.B \[rs]n[.y]
-The minor version number.
-.
-For example, if the version number is 1.03, then
-.B \[rs]n[.y]
-will contain\~03.
-.
-.TP
-.B \[rs]n[.Y]
-The revision number of groff.
-.
-.TP
-.B \[rs]n[llx]
-.TQ
-.B \[rs]n[lly]
-.TQ
-.B \[rs]n[urx]
-.TQ
-.B \[rs]n[ury]
-These four registers are set by the
-.B .psbb
-request and contain the bounding box values (in PostScript units) of a
-given PostScript image.
-.
-.P
-The following read/write registers are set by the
-.B \[rs]w
-escape sequence:
-.
-.TP
-.B \[rs]n[rst]
-.TQ
-.B \[rs]n[rsb]
-Like the
-.B st
-and
-.B sb
-registers, but take account of the heights and depths of glyphs.
-.
-.TP
-.B \[rs]n[ssc]
-The amount of horizontal space (possibly negative) that should be
-added to the last glyph before a subscript.
-.
-.TP
-.B \[rs]n[skw]
-How far to right of the center of the last glyph in the
-.B \[rs]w
-argument, the center of an accent from a roman font should be placed
-over that glyph.
-.
-.P
-Other available read/write number registers are:
-.
-.TP
-.B \[rs]n[c.]
-The current input line number.
-.B \[rs]n[.c]
-is a read-only alias to this register.
-.
-.TP
-.B \[rs]n[hours]
-The number of hours past midnight.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[hp]
-The current horizontal position at input line.
-.
-.TP
-.B \[rs]n[minutes]
-The number of minutes after the hour.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[seconds]
-The number of seconds after the minute.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[systat]
-The return value of the system() function executed by the last
-.B sy
-request.
-.
-.TP
-.B \[rs]n[slimit]
-If greater than\~0, the maximum number of objects on the input stack.
-.
-If less than or equal to\~0, there is no limit on the number of
-objects on the input stack.
-.
-With no limit, recursion can continue until virtual memory is
-exhausted.
-.
-.TP
-.B \[rs]n[year]
-The current year.
-.
-Note that the traditional
-.B troff
-number register
-.B \[rs]n[yr]
-is the current year minus 1900.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Miscellaneous
-.\" --------------------------------------------------------------------
-.
-.B @g@troff
-predefines a single (read/write) string-based register,
-.BR \[rs]*(.T ,
-which contains the argument given to the
-.B \-T
-command line option, namely the current output device (for example,
-.I latin1
-or
-.IR ascii ).
-Note that this is not the same as the (read-only) number register
-.B \[rs]n[.T]
-which is defined to be\~1 if
-.B troff
-is called with the
-.B \-T
-command line option, and zero otherwise.
-.
-This behaviour is different to UNIX troff.
-.
-.P
-Fonts not listed in the
-.SM DESC
-file are automatically mounted on the next available font position
-when they are referenced.
-.
-If a font is to be mounted explicitly with the
-.B fp
-request on an unused font position, it should be mounted on the first
-unused font position, which can be found in the
-.B \[rs]n[.fp]
-register; although
-.B troff
-does not enforce this strictly, it will not allow a font to be mounted
-at a position whose number is much greater than that of any currently
-used position.
-.
-.P
-Interpolating a string does not hide existing macro arguments.
-.
-Thus in a macro, a more efficient way of doing
-.
-.IP
-.BI . xx\ \[rs]\[rs]$@
-.P
-is
-.
-.IP
-.BI \[rs]\[rs]*[ xx ]\[rs]\[rs]
-.
-.P
-If the font description file contains pairwise kerning information,
-glyphs from that font will be kerned.
-.
-Kerning between two glyphs can be inhibited by placing a
-.B \[rs]&
-between them.
-.
-.P
-In a string comparison in a condition, characters that appear at
-different input levels to the first delimiter character will not be
-recognised as the second or third delimiters.
-.
-This applies also to the
-.B tl
-request.
-.
-In a
-.B \[rs]w
-escape sequence, a character that appears at a different input level
-to the starting delimiter character will not be recognised as the
-closing delimiter character.
-.
-The same is true for
-.BR \[rs]A ,
-.BR \[rs]b ,
-.BR \[rs]B ,
-.BR \[rs]C ,
-.BR \[rs]l ,
-.BR \[rs]L ,
-.BR \[rs]o ,
-.BR \[rs]X ,
-and
-.BR \[rs]Z .
-.
-When decoding a macro or string argument that is delimited by double
-quotes, a character that appears at a different input level to the starting
-delimiter character will not be recognised as the closing delimiter
-character.
-.
-The implementation of
-.B \[rs]$@
-ensures that the double quotes surrounding an argument will appear the
-same input level, which will be different to the input level of the
-argument itself.
-.
-In a long escape name
-.B ]
-will not be recognized as a closing delimiter except when it occurs at
-the same input level as the opening
-.BR ] .
-.
-In compatibility mode, no attention is paid to the input-level.
-.
-.P
-There are some new types of condition:
-.
-.TP
-.BI .if\ r xxx
-True if there is a number register named
-.IR xxx .
-.
-.TP
-.BI .if\ d xxx
-True if there is a string, macro, diversion, or request named
-.IR xxx .
-.
-.TP
-.BI .if\ m xxx
-True if there is a color named
-.IR xxx .
-.
-.TP
-.BI .if\ c ch
-True if there is a glyph
-.IR ch
-available;
-.I ch
-is either an
-.SM ASCII
-character or a glyph (special character)
-.BI \[rs]( xx
-or
-.BI \[rs][ xxx ]\f[R];
-the condition will also be true if
-.I ch
-has been defined by the
-.B char
-request.
-.
-.TP
-.BI .if\ F f
-True if font
-.I f
-exists.
-.
-.B f
-is handled as if it was opened with the
-.B ft
-request (this is, font translation and styles are applied), without
-actually mounting it.
-.
-.TP
-.BI .if\ S s
-True if style
-.I s
-has been registered.
-.
-Font translation is applied.
-.
-.P
-The
-.B tr
-request can now map characters onto
-.BR \[rs]~ .
-.
-.P
-It is now possible to have whitespace between the first and second dot
-(or the name of the ending macro) to end a macro definition.
-.
-Example:
-.
-.IP
-.ne 6v+\n(.Vu
-.ft CB
-.nf
-.Text .if t \[rs]{\[rs]
-.Text . de bar
-.Text . nop Hello, I'm `bar'.
-.Text . .
-.Text .\[rs]}
-.fi
-.
-.
-.\" --------------------------------------------------------------------
-.SH "INTERMEDIATE OUTPUT FORMAT"
-.\" --------------------------------------------------------------------
-.
-This section describes the format output by GNU troff.
-.
-The output format used by GNU troff is very similar to that used
-by Unix device-independent troff.
-.
-Only the differences are documented here.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Units"
-.\" --------------------------------------------------------------------
-.
-The argument to the
-.B s
-command is in scaled points (units of
-.RI points/ n ,
-where
-.I n
-is the argument to the
-.B sizescale
-command in the DESC file).
-.
-The argument to the
-.B x\ Height
-command is also in scaled points.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Text Commands"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI N n
-Print glyph with index\~\c
-.I n
-(a non-negative integer) of the current font.
-.
-.P
-If the
-.B tcommand
-line is present in the DESC file, troff will use the following two
-commands.
-.
-.TP
-.BI t xxx
-.I xxx
-is any sequence of characters terminated by a space or a newline (to
-be more precise, it is a sequence of glyphs which are accessed with
-the corresponding characters); the first character should be printed at
-the current position, the current horizontal position should be increased
-by the width of the first character, and so on for each character.
-.
-The width of the glyph is that given in the font file,
-appropriately scaled for the current point size, and rounded so that
-it is a multiple of the horizontal resolution.
-.
-Special characters cannot be printed using this command.
-.
-.TP
-.BI u n\ xxx
-This is same as the
-.B t
-command except that after printing each character, the current
-horizontal position is increased by the sum of the width of that
-character and
-.IR n .
-.
-.P
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.
-.
-.P
-The names of glyphs and fonts can be of arbitrary length; drivers
-should not assume that they will be only two characters long.
-.
-.P
-When a glyph is to be printed, that glyph will always be
-in the current font.
-.
-Unlike device-independent troff, it is not necessary for drivers to
-search special fonts to find a glyph.
-.
-.P
-For color support, some new commands have been added:
-.
-.TP
-.Text \f[B]mc \f[I]cyan magenta yellow\f[R]
-.TQ
-.Text \f[B]md\f[R]
-.TQ
-.Text \f[B]mg \f[I]gray\f[R]
-.TQ
-.Text \f[B]mk \f[I]cyan magenta yellow black\f[R]
-.TQ
-.Text \f[B]mr \f[I]red green blue\f[R]
-Set the color components of the current drawing color, using various
-color schemes.
-.
-.B md
-resets the drawing color to the default value.
-.
-The arguments are integers in the range 0 to 65536.
-.
-.P
-The
-.B x
-device control command has been extended.
-.
-.TP
-.Text \f[B]x u \f[I]n\f[R]
-If
-.I n
-is\~1, start underlining of spaces.
-.
-If
-.I n
-is\~0, stop underlining of spaces.
-.
-This is needed for the
-.B cu
-request in nroff mode and is ignored otherwise.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Drawing Commands"
-.\" --------------------------------------------------------------------
-.
-The
-.B D
-drawing command has been extended.
-.
-These extensions will not be used by GNU pic if the
-.B \-n
-option is given.
-.
-.TP
-.Text \f[B]Df \f[I]n\f[R]\*[ic]\[rs]n
-Set the shade of gray to be used for filling solid objects to
-.IR n ;
-.I n
-must be an integer between 0 and 1000, where 0 corresponds solid white
-and 1000 to solid black, and values in between correspond to
-intermediate shades of gray.
-.
-This applies only to solid circles, solid ellipses and solid
-polygons.
-.
-By default, a level of 1000 will be used.
-.
-Whatever color a solid object has, it should completely obscure
-everything beneath it.
-.
-A value greater than 1000 or less than 0 can also be used: this means
-fill with the shade of gray that is currently being used for lines and
-text.
-.
-Normally this will be black, but some drivers may provide a way of
-changing this.
-.
-.IP
-The corresponding
-.BI \[rs]D'f .\|.\|. '
-command shouldn't be used since its argument is always rounded to an
-integer multiple of the horizontal resolution which can lead to
-surprising results.
-.
-.TP
-.Text \f[B]DC \f[I]d\f[R]\*[ic]\[rs]n
-Draw a solid circle with a diameter of
-.I d
-with the leftmost point at the current position.
-.
-.TP
-.Text \f[B]DE \f[I]dx dy\f[R]\*[ic]\[rs]n
-Draw a solid ellipse with a horizontal diameter of
-.I dx
-and a vertical diameter of
-.I dy
-with the leftmost point at the current position.
-.EQ
-delim $$
-.EN
-.
-.TP
-.Text \f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
-Draw a polygon with, for $i = 1 ,..., n+1$, the
-.IR i -th
-vertex at the current position
-.
-$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
-.
-At the moment, GNU pic only uses this command to generate triangles
-and rectangles.
-.
-.TP
-.Text \f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
-.
-Like
-.B Dp
-but draw a solid rather than outlined polygon.
-.
-.TP
-.Text \f[B]Dt \f[I]n\f[R]\*[ic]\[rs]n
-Set the current line thickness to
-.I n
-machine units.
-.
-Traditionally Unix troff drivers use a line thickness proportional to
-the current point size; drivers should continue to do this if no
-.B Dt
-command has been given, or if a
-.B Dt
-command has been given with a negative value of
-.IR n .
-A zero value of
-.I n
-selects the smallest available line thickness.
-.
-.P
-A difficulty arises in how the current position should be changed after
-the execution of these commands.
-.
-This is not of great importance since the code generated by GNU pic
-does not depend on this.
-.
-Given a drawing command of the form
-.IP
-\f[B]\[rs]D\[fm]\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[fm]
-.
-.P
-where
-.I c
-is not one of
-.BR c ,
-.BR e ,
-.BR l ,
-.BR a ,
-or
-.BR ~ ,
-Unix troff will treat each of the $x sub i$ as a horizontal quantity,
-and each of the $y sub i$ as a vertical quantity and will assume that
-the width of the drawn object is $sum from i=1 to n x sub i$,
-and that the height is $sum from i=1 to n y sub i$.
-.
-(The assumption about the height can be seen by examining the
-.B st
-and
-.B sb
-registers after using such a
-.B D
-command in a \[rs]w escape sequence).
-.
-This rule also holds for all the original drawing commands with the
-exception of
-.BR De .
-For the sake of compatibility GNU troff also follows this rule, even
-though it produces an ugly result in the case of the
-.B Dt
-and
-.BR Df ,
-and, to a lesser extent,
-.B DE
-commands.
-.
-Thus after executing a
-.B D
-command of the form
-.IP
-\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \c
-$x sub n$ $y sub n$\[rs]n
-.
-.P
-the current position should be increased by
-.
-$( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$.
-.
-.P
-Another set of extensions is
-.
-.TP
-.Text \f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n
-.TQ
-.Text \f[B]DFd\f[R]\*[ic]\[rs]n
-.TQ
-.Text \f[B]DFg \f[I]gray\f[R]\*[ic]\[rs]n
-.TQ
-.Text \f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n
-.TQ
-.Text \f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n
-Set the color components of the filling color similar to the
-.B m
-commands above.
-.
-.P
-The current position isn't changed by those colour commands (contrary to
-.BR Df ).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Device Control Commands"
-.\" --------------------------------------------------------------------
-.
-There is a continuation convention which permits the argument to the
-.B x\ X
-command to contain newlines: when outputting the argument to the
-.B x\ X
-command, GNU troff will follow each newline in the argument with a
-.B +
-character (as usual, it will terminate the entire argument with a
-newline); thus if the line after the line containing the
-.B x\ X
-command starts with
-.BR + ,
-then the newline ending the line containing the
-.B x\ X
-command should be treated as part of the argument to the
-.B x\ X
-command, the
-.B +
-should be ignored, and the part of the line following the
-.B +
-should be treated like the part of the line following the
-.B x\ X
-command.
-.
-.P
-The first three output commands are guaranteed to be:
-.IP
-.BI x\ T\ device
-.br
-.BI x\ res\ n\ h\ v
-.br
-.B x init
-.
-.
-.\" --------------------------------------------------------------------
-.SH INCOMPATIBILITIES
-.\" --------------------------------------------------------------------
-.
-In spite of the many extensions, groff has retained compatibility to
-classical troff to a large degree.
-.
-For the cases where the extensions lead to collisions, a special
-compatibility mode with the restricted, old functionality was created
-for groff.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Groff Language"
-.\" --------------------------------------------------------------------
-.
-.I groff
-provides a
-.B compatibility mode
-that allows to process roff code written for classical
-.B troff
-or for other implementations of roff in a consistent way.
-.
-.P
-Compatibility mode can be turned on with the
-.option \-C
-command line option, and turned on or off with the
-.request .cp
-request.
-.
-The number register
-.esc n(.C
-is\~1 if compatibility mode is on, 0\~otherwise.
-.
-.P
-This became necessary because the GNU concept for long names causes
-some incompatibilities.
-.I Classical troff
-interprets
-.IP
-.request .dsabcd
-.
-.P
-as defining a string
-.B ab
-with contents
-.BR cd .
-In
-.IR groff
-mode, this will be considered as a call of a macro named
-.request dsabcd .
-.
-.P
-Also
-.I classical troff
-interprets
-.esc *[
-or
-.esc n[
-as references to a string or number register called
-.request [
-while
-.I groff
-takes this as the start of a long name.
-.
-.P
-In
-.IR "compatibility mode" ,
-groff interprets these things in the traditional way; so long
-names are not recognized.
-.
-.P
-On the other hand, groff in
-.I GNU native mode
-does not allow to use the single-character escapes
-.esc \[rs]
-(backslash),
-.esc |
-(vertical bar),
-.esc ^
-(caret),
-.esc &
-(ampersand),
-.esc {
-(opening brace),
-.esc }
-(closing brace),
-.squoted "\[rs]\ "
-(space),
-.esc '
-(single quote),
-.esc `
-(backquote),
-.esc \-
-(minus),
-.esc _
-(underline),
-.esc !
-(bang),
-.esc %
-(percent),
-and
-.esc c
-(character c) in names of strings, macros, diversions, number
-registers, fonts or environments, whereas
-.I classical troff
-does.
-.
-.P
-The
-.esc A
-escape sequence can be helpful in avoiding these escape sequences in
-names.
-.
-.P
-Fractional pointsizes cause one noteworthy incompatibility.
-.
-In
-.I classical
-.IR troff ,
-the
-.request ps
-request ignores scale indicators and so
-.RS
-.P
-.B .ps\~10u
-.RE
-.
-.P
-will set the pointsize to 10\~points, whereas in groff native mode the
-pointsize will be set to 10\~scaled points.
-.
-.P
-In
-.IR groff ,
-there is a fundamental difference between unformatted input
-characters, and formatted output characters (glyphs).
-.
-Everything that affects how a glyph will be output is
-stored with the glyph; once a glyph has been
-constructed it is unaffected by any subsequent requests that are
-executed, including the
-.request bd ,
-.request cs ,
-.request tkf ,
-.request tr ,
-or
-.request fp
-requests.
-.
-.P
-Normally glyphs are constructed from input characters at
-the moment immediately before the glyph is added to the current
-output line.
-.
-Macros, diversions and strings are all, in fact, the same type of
-object; they contain lists of input characters and glyphs
-in any combination.
-.
-.P
-Special characters can be both; before being added to the output, they
-act as input entities, afterwards they denote glyphs.
-.
-.P
-A glyph does not behave like an input character for the
-purposes of macro processing; it does not inherit any of the special
-properties that the input character from which it was constructed
-might have had.
-.
-The following example will make things clearer.
-.
-.P
-.RS
-.nf
-.ft CB
-.Text .di x
-.Text \[rs]\[rs]\[rs]\[rs]
-.Text .br
-.Text .di
-.Text .x
-.ft
-.fi
-.RE
-.
-.P
-With
-.I GNU troff
-this will be printed as
-.esc \[rs] .
-So each pair of input backslashes
-.squoted \[rs]\[rs]
-is turned into a single output backslash glyph
-.squoted \[rs]
-and the resulting output backslashes are not interpreted as escape
-characters when they are reread.
-.
-.P
-.I Classical troff
-would interpret them as escape characters when they were reread and
-would end up printing a single backslash
-.squoted \[rs] .
-.
-.P
-In GNU, the correct way to get a printable version of the backslash
-character
-.squoted \[rs]
-is the
-.esc (rs
-escape sequence, but classical troff does not provide a clean feature
-for getting a non-syntactical backslash.
-.
-A close method is the printable version of the current escape
-character using the
-.esc e
-escape sequence; this works if the current escape character is not
-redefined.
-.
-It works in both GNU mode and compatibility mode, while dirty tricks
-like specifying a sequence of multiple backslashes do not work
-reliably; for the different handling in diversions, macro definitions,
-or text mode quickly leads to a confusion about the necessary number of
-backslashes.
-.
-.P
-To store an escape sequence in a diversion that will be interpreted
-when the diversion is reread, either the traditional
-.esc !
-transparent output facility or the
-new
-.esc ?
-escape sequence can be used.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Intermediate Output"
-.\" --------------------------------------------------------------------
-.
-The groff intermediate output format is in a state of evolution.
-.
-So far it has some incompatibilities, but it is intended to establish
-a full compatibility to the classical troff output format.
-.
-Actually the following incompatibilities exist:
-.
-.Topic
-The positioning after the drawing of the polygons conflicts with the
-classical definition.
-.
-.Topic
-The intermediate output cannot be rescaled to other devices as
-classical "device-independent" troff did.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-This document was written by James Clark, with modifications by
-.MTO wl@gnu.org "Werner Lemberg"
-and
-.MTO bwarken@mayn.de "Bernd Warken" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-Formerly, the contents of this document was kept in the manual
-page
-.BR @g@troff (@MAN1EXT@).
-Only the parts dealing with the language aspects of the different
-.I roff
-systems were carried over into this document.
-.
-The
-.I troff
-command line options and warnings are still documented in
-.BR @g@troff (@MAN1EXT@).
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-The
-.I groff info
-.IR file ,
-cf.\&
-.BR info (1)
-presents all groff documentation within a single document.
-.
-.TP
-.BR groff (@MAN1EXT@)
-A list of all documentation around
-.IR groff .
-.
-.TP
-.BR groff (@MAN7EXT@)
-A description of the
-.I groff
-language, including a short, but complete reference of all predefined
-requests, registers, and escapes of plain
-.IR groff .
-From the command line, this is called using
-.
-.IP
-.ShellCommand man\~7\~groff
-.
-.TP
-.BR roff (@MAN7EXT@)
-A survey of
-.I roff
-systems, including pointers to further historical documentation.
-.
-.TP
-.RI [ CSTR\~#54\/ ]
-The
-.I Nroff/\:Troff User's Manual
-by
-.I J.\& F.\& Osanna
-of 1976 in the revision of
-.I Brian Kernighan
-of 1992, being the
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \
- "classical troff documentation" .
-.
-.cp \n[groff_diff_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs variables
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff_font.man b/contrib/groff/man/groff_font.man
deleted file mode 100644
index b806aac9accd..000000000000
--- a/contrib/groff/man/groff_font.man
+++ /dev/null
@@ -1,660 +0,0 @@
-.ig
-Copyright (C) 1989-1995, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr groff_font_C \n[.C]
-.cp 0
-.
-.de TQ
-. br
-. ns
-. TP \\$1
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.
-.TH GROFF_FONT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-groff_font \- format of groff device and font description files
-.
-.
-.SH DESCRIPTION
-The groff font format is roughly a superset of the ditroff
-font format.
-.
-The font files for device
-.I name
-are stored in a directory
-.BI dev name\c
-\&.
-.
-There are two types of file: a
-device description file called
-.B DESC
-and for each font
-.I F
-a font file called
-.IR F .
-.
-These are text files;
-unlike the ditroff font format,
-there is no associated binary format.
-.
-.
-.SS DESC file format
-.
-The DESC file can contain the following types of line as shown below.
-.
-Later entries in the file override previous values.
-.
-.TP
-.B charset
-This line and everything following in the file are ignored.
-.
-It is allowed for the sake of backwards compatibility.
-.
-.TP
-.BI family\ fam
-The default font family is
-.IR fam .
-.
-.TP
-.BI fonts\ n\ F1\ F2\ F3\|.\|.\|.\|Fn
-Fonts
-.I F1\|.\|.\|.\|Fn
-will be mounted in the font positions
-.IR m +1,\|.\|.\|., m + n
-where
-.I m
-is the number of styles.
-.
-This command may extend over more than one line.
-.
-A font name of
-.B 0
-will cause no font to be mounted on the corresponding font position.
-.
-.TP
-.BI hor\ n
-The horizontal resolution is
-.I n
-machine units.
-.
-.TP
-.BI image_generator\ string
-Needed for
-.B grohtml
-only.
-It specifies the program to generate PNG images from
-PostScript input.
-Under GNU/Linux this is usually
-.I gs
-but under other systems (notably cygwin) it might be set to another name.
-.
-.TP
-.BI paperlength\ n
-The physical vertical dimension of the output medium in machine units.
-.
-This isn't used by
-.B troff
-itself but by output devices.
-.
-Deprecated.
-.
-Use
-.B papersize
-instead.
-.
-.TP
-.BI papersize\ string
-Select a paper size.
-.
-Valid values for
-.I string
-are the ISO paper types A0-A7, B0-B7, C0-C7, D0-D7, DL, and the US paper
-types letter, legal, tabloid, ledger, statement, executive, com10, and
-monarch.
-.
-Case is not significant for
-.IR string
-if it holds predefined paper types.
-.
-Alternatively,
-.I string
-can be a file name (e.g.\& `/etc/papersize'); if the file can be opened,
-.B groff
-reads the first line and tests for the above paper sizes.
-.
-Finally,
-.I string
-can be a custom paper size in the format
-.IB length , width
-(no spaces before and after the comma).
-.
-Both
-.I length
-and
-.I width
-must have a unit appended; valid values are `i' for inches, `c' for
-centimeters, `p' for points, and `P' for picas.
-.
-Example:
-.BR 12c,235p .
-.
-An argument which starts with a digit is always treated as a custom paper
-format.
-.
-.B papersize
-sets both the vertical and horizontal dimension of the output medium.
-.
-.IP
-More than one argument can be specified;
-.B groff
-scans from left to right and uses the first valid paper specification.
-.
-.TP
-.BI paperwidth\ n
-The physical horizontal dimension of the output medium in machine units.
-.
-Deprecated.
-.
-Use
-.B papersize
-instead.
-.
-This isn't used by
-.BR troff
-itself but by output devices.
-.
-.TP
-.B pass_filenames
-Make troff tell the driver the source file name being processed.
-.
-This is achieved by another tcommand:
-.B F
-.IR filename .
-.
-.TP
-.BI postpro\ program
-Use
-.I program
-as the postprocessor.
-.
-.TP
-.BI prepro\ program
-Call
-.I program
-as a preprocessor.
-.
-.TP
-.BI print\ program
-Use
-.I program
-as the spooler program for printing.
-.
-If omitted, the
-.B \-l
-and
-.B \-L
-options of
-.B groff
-are ignored.
-.
-.TP
-.BI res\ n
-There are
-.I n
-machine units per inch.
-.
-.TP
-.BI sizes\ s1\ s2\|.\|.\|.\|sn\ 0
-This means that the device has fonts at
-.IR s1 ,
-.IR s2 ,\|.\|.\|.\| sn
-scaled points.
-.
-The list of sizes must be terminated by a
-.BR 0 .
-.
-Each
-.I si
-can also be a range of sizes
-.IR m \- n .
-.
-The list can extend over more than one line.
-.
-.TP
-.BI sizescale\ n
-The scale factor for pointsizes.
-.
-By default this has a value of 1.
-.
-One
-.I
-scaled point
-is equal to
-one
-.RI point/ n .
-.
-The arguments to the
-.B unitwidth
-and
-.B sizes
-commands are given in scaled points.
-.
-.TP
-.BI styles\ S1\ S2\|.\|.\|.\|Sm
-The first
-.I m
-font positions will be associated with styles
-.IR S1\|.\|.\|.\|Sm .
-.
-.TP
-.B tcommand
-This means that the postprocessor can handle the
-.B t
-and
-.B u
-output commands.
-.
-.TP
-.BI unitwidth\ n
-Quantities in the font files are given in machine units
-for fonts whose point size is
-.I n
-scaled points.
-.
-.TP
-.B unscaled_charwidths
-Make the font handling module always return unscaled character widths.
-Needed for the
-.B grohtml
-device.
-.
-.TP
-.B use_charnames_in_special
-This command indicates that troff should encode named characters inside
-special commands.
-.
-.TP
-.BI vert\ n
-The vertical resolution is
-.I n
-machine units.
-.
-.LP
-The
-.BR res ,
-.BR unitwidth ,
-.BR fonts ,
-and
-.B sizes
-lines are compulsory.
-.
-Not all commands in the DESC file are used by
-.B troff
-itself; some of the keywords (or even additional ones) are used by
-postprocessors to store arbitrary information about the device.
-.
-.LP
-Here a list of obsolete keywords which are recognized by
-.B groff
-but completely ignored:
-.BR spare1 ,
-.BR spare2 ,
-.BR biggestfont .
-.
-.
-.SS Font file format
-.
-A font file has two sections.
-The first section is a sequence
-of lines each containing a sequence of blank delimited
-words; the first word in the line is a key, and subsequent
-words give a value for that key.
-.
-.TP
-.BI ligatures\ lig1\ lig2\|.\|.\|.\|lign\ \fR[ 0 \fR]
-Characters
-.IR lig1 ,
-.IR lig2 ,\ \|.\|.\|.,\ lign
-are ligatures; possible ligatures are
-.BR ff ,
-.BR fi ,
-.BR fl ,
-.B ffi
-and
-.BR ffl .
-.
-For backwards compatibility, the list of ligatures may be terminated
-with a
-.BR 0.
-.
-The list of ligatures may not extend over more than one line.
-.
-.TP
-.BI name\ F
-The name of the font is
-.IR F .
-.
-.TP
-.BI slant\ n
-The characters of the font have a slant of
-.I n
-degrees.
-.
-(Positive means forward.)
-.
-.TP
-.BI spacewidth\ n
-The normal width of a space is
-.IR n .
-.
-.TP
-.B special
-The font is
-.IR special ;
-this means that when a character is requested that is not present in
-the current font, it will be searched for in any special fonts that
-are mounted.
-.
-.LP
-Other commands are ignored by
-.B troff
-but may be used by postprocessors to store arbitrary information
-about the font in the font file.
-.
-.LP
-The first section can contain comments which start with the
-.B #
-character and extend to the end of a line.
-.
-.LP
-The second section contains one or two subsections.
-.
-It must contain a
-.I charset
-subsection
-and it may also contain a
-.I kernpairs
-subsection.
-.
-These subsections can appear in any order.
-.
-Each subsection starts with a word on a line by itself.
-.
-.LP
-The word
-.B charset
-starts the charset subsection.
-.
-The
-.B charset
-line is followed by a sequence of lines.
-.
-Each line gives information for one character.
-.
-A line comprises a number of fields separated
-by blanks or tabs.
-.
-The format is
-.
-.IP
-.I name metrics type code
-.RI [ entity_name ]
-.RB [ --
-.IR comment ]
-.
-.LP
-.I name
-identifies the character:
-if
-.I name
-is a single character
-.I c
-then it corresponds to the groff input character
-.IR c ;
-if it is of the form
-.BI \[rs] c
-where c is a single character, then it
-corresponds to the special character
-.BI \[rs][ c ]\fR;
-otherwise it corresponds to the groff input character
-.BI \[rs][ name ]\fR.
-.
-If it is exactly two characters
-.I xx
-it can be entered as
-.BI \[rs]( xx\fR.
-.
-Note that single-letter special characters can't be accessed as
-.BI \[rs] c\fR;
-the only exception is `\[rs]-' which is identical to `\[rs][-]'.
-.
-The name
-.B \-\-\-
-is special and indicates that the character is unnamed;
-such characters can only be used by means of the
-.B \[rs]N
-escape sequence in
-.BR troff .
-.
-.LP
-Groff supports eight-bit characters; however some utilities
-have difficulties with eight-bit characters.
-.
-For this reason, there is a convention that the name
-.BI char n
-is equivalent to the single character whose code is
-.IR n .
-.
-For example,
-.B char163
-would be equivalent to the character with code 163
-which is the pounds sterling sign in ISO Latin-1.
-.
-.LP
-The
-.I type
-field gives the character type:
-.
-.TP
-1
-means the character has a descender, for example, p;
-.
-.TP
-2
-means the character has an ascender, for example, b;
-.
-.TP
-3
-means the character has both an ascender and a descender, for example,
-(.
-.
-.LP
-The
-.I code
-field gives the code which the postprocessor uses to print the character.
-.
-The character can also be input to groff using this code by means of the
-.B \[rs]N
-escape sequence.
-.
-The code can be any integer.
-.
-If it starts with a
-.B 0
-it will be interpreted as octal;
-if it starts with
-.B 0x
-or
-.B 0X
-it will be intepreted as hexadecimal.
-.
-Note, however, that the
-.B \[rs]N
-escape sequence only accepts a decimal integer.
-.
-.LP
-The
-.I entity_name
-field gives an ascii string identifying the glyph which the postprocessor
-uses to print the character.
-.
-This field is optional and has been introduced so that the html device driver
-can encode its character set.
-.
-For example, the character `\[rs][Po]' is represented as `&pound;' in
-html\~4.0.
-.
-.LP
-Anything on the line after the encoding field resp. after `-\&-' will
-be ignored.
-.
-.LP
-The
-.I metrics
-field has the form (in one line; it is broken here for the sake of
-readability):
-.
-.IP
-.I width\c
-.RI [\fB, height\c
-.RI [\fB, depth\c
-.RI [\fB, italic-correction
-.br
-.RI [\fB, left-italic-correction\c
-.RI [\fB, subscript-correction ]]]]]
-.
-.LP
-There must not be any spaces between these subfields.
-.
-Missing subfields are assumed to be 0.
-.
-The subfields are all decimal integers.
-.
-Since there is no associated binary format, these
-values are not required to fit into a variable of type
-.B char
-as they are in ditroff.
-.
-The
-.I width
-subfields gives the width of the character.
-.
-The
-.I height
-subfield gives the height of the character (upwards is positive);
-if a character does not extend above the baseline, it should be
-given a zero height, rather than a negative height.
-.
-The
-.I depth
-subfield gives the depth of the character, that is, the distance
-below the lowest point below the baseline to which the
-character extends (downwards is positive);
-if a character does not extend below above the baseline, it should be
-given a zero depth, rather than a negative depth.
-.
-The
-.I italic-correction
-subfield gives the amount of space that should be added after the
-character when it is immediately to be followed by a character
-from a roman font.
-.
-The
-.I left-italic-correction
-subfield gives the amount of space that should be added before the
-character when it is immediately to be preceded by a character
-from a roman font.
-.
-The
-.I subscript-correction
-gives the amount of space that should be added after a character
-before adding a subscript.
-.
-This should be less than the italic correction.
-.
-.LP
-A line in the charset section can also have the format
-.
-.IP
-.I
-name \fB"
-.
-.LP
-This indicates that
-.I name
-is just another name for the character mentioned in the
-preceding line.
-.
-.LP
-The word
-.B kernpairs
-starts the kernpairs section.
-.
-This contains a sequence of lines of the form:
-.
-.IP
-.I c1 c2 n
-.
-.LP
-This means that when character
-.I c1
-appears next to character
-.I c2
-the space between them should be increased by
-.IR n .
-.
-Most entries in kernpairs section will have a negative value for
-.IR n .
-.
-.
-.SH FILES
-.
-.Tp \w'@FONTDIR@/devname/DESC'u+3n
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.BI @FONTDIR@/dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.
-.
-.SH "SEE ALSO"
-.
-.BR groff_out (@MAN5EXT@),
-.BR @g@troff (@MAN1EXT@).
-.
-.cp \n[groff_font_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff_out.man b/contrib/groff/man/groff_out.man
deleted file mode 100644
index 4469985f4dff..000000000000
--- a/contrib/groff/man/groff_out.man
+++ /dev/null
@@ -1,2106 +0,0 @@
-'\" e
-.\" The above line should force the use of eqn as a preprocessor
-.ig
-groff_out.5
-
-Last update: 2 Jul 2005
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-rewritten from scrach 2001 by Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_out_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \
-. ftr CB CW
-.
-.if t \{\
-.EQ
-delim $$
-.EN
-.\}
-.
-.\" ----------------- Document configuration
-.
-.\" Number register to decide whether the commands `{' and `}' are used
-.\" 0: disable (actual default); 1: enable
-.nr @USE_ENV_STACK 0
-.
-.ig
-Unfortunately, old versions of groff used an illogical position change
-after some D\~commands (Dp, DP, Dt). If the number register
-@STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
-after these commands, otherwise the position is not changed.
-..
-.nr @STUPID_DRAWING_POSITIONING 1
-.
-.\" ----------------- Syntactical definitions
-.
-.\" comments when escapes are switched off
-.de c
-..
-.\" Begin of macro definitions
-.eo
-.
-.de Text
-. nop \)\$*
-..
-.c follow-up line for a .TP header
-.de TP+
-. br
-. ns
-. TP \$1
-..
-.c a bulleted paragraph
-.de Topic
-. TP 2m
-. nop \[bu]
-..
-.de ShellCommand
-. br
-. IR "shell>" "\h'1m'\f[CB]\$*\f[]\/"
-..
-.ec
-.\" End of macro definitions
-.
-.c ----------------- Semantical definitions
-.
-.nr @maxcolor 65536
-.ds @backslash \[rs]\"
-.ds @linebreak \f[R]\[la]line_break\[ra]\f[]\"
-.
-.\" Begin of macro definitions
-.eo
-.
-.c format: .unit <letter> <punctuation>
-.de unit
-. BR \$@
-..
-.c argument in italic with punctuation
-.de argument
-. if (\n[.$] == 0) \
-. return
-. IR \$@
-..
-.c comma separated list of indexed variables
-.de list1..n
-. ds @arg1 \$1\"
-. nop \c
-. ie t \
-. nop $\*[@arg1] sub 1$, $\*[@arg1] sub 2$, .\|.\|., $\*[@arg1] sub n$ \c
-. el \{\
-. IR \*[@arg1]1 ,
-. IR \*[@arg1]2 ,
-. nop \&...,
-. I \*[@arg1]n
-. \}
-. rm @arg1
-..
-.de offset
-. if (\n[.$] < 2) \
-. ab `.offset' needs at least 2 arguments
-. ds @arg1 \$1\"
-. ds @arg2 \$2\"
-. shift 2
-. nop (\f[I]\,\*[@arg1]\/\f[],\ \f[I]\,\*[@arg2]\/\f[])\$*
-. rm @arg1
-. rm @arg2
-..
-.de indexed_offset
-. if (\n[.$] < 4) \
-. ab `.indexed_offset' needs at least 4 arguments
-. ds @arg1 \$1\"
-. ds @index1 \$2\"
-. ds @arg2 \$3\"
-. ds @index2 \$4\"
-. shift 4
-. ie t \{\
-. ie \B'\*[@index1]' \{\
-. nop ($\*[@arg1] sub roman \*[@index1]$,\ \c
-. \}
-. el \{\
-. nop ($\*[@arg1] sub \*[@index1]$,\ \c
-. \}
-. ie \B'\*[@index2]' \{\
-. nop $\*[@arg2] sub roman \*[@index2]$)\$* \c
-. \}
-. el \{\
-. nop $\*[@arg2] sub \*[@index2]$)\$* \c
-. \}
-. \}
-. el \{\
-. nop (\f[I]\*[@arg1]\*[@index1]\f[],\ \c
-. nop \f[I]\*[@arg2]\*[@index2]\f[])\$* \c
-. \}
-. rm @arg1
-. rm @arg2
-. rm @index1
-. rm @index2
-..
-.c format: .command <name> "<arguments>" <punctuation>
-.de command
-. ds @arg1 \$1\"
-. ds @arg2 \$2\"
-. shift 2
-. IP "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
-. rm @arg1
-. rm @arg2
-..
-.c format: .command+ <name> "<arguments>" <punctuation>
-.c continue previous .command heading
-.de command+
-. ds @arg1 \$1\"
-. ds @arg2 \$2\"
-. shift 2
-. TP+
-. Text "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
-. rm @arg1
-. rm @arg2
-..
-.c format: .D-command <subcommand> "<arguments>"
-.de D-command
-. ds @sub \$1\"
-. shift 1
-. IP "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\|\*[@linebreak]"
-. rm @sub
-..
-.c format: .D-command+ <subcommand> "<arguments>"
-.c continue previous .D-command heading
-.de D-command+
-. ds @sub \$1\"
-. shift 1
-. TP+
-. Text "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\*[@linebreak]"
-. rm @sub
-..
-.de Da-command
-. shift 1
-. ie t \
-. ds @args $h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$\"
-. el \
-. ds @args \f[I]h1\~v1 h2\~v2\f[]\"
-. IP "\f[B]Da\f[]\ \*[@args]\|\*[@linebreak]"
-. rm @args
-..
-.c graphics command .D with a variable number of arguments
-.c format: .D-multiarg <subcommand>
-.de D-multiarg
-. ds @sub \$1\"
-. shift 1
-. ie t \{\
-. ds @args "$h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$ .\|.\|. \"
-. as @args "$h sub n$\~$v sub n$\"
-. \}
-. el \
-. ds @args \f[I]h1\~v1 h2\~v2\f[] ... \f[I]\,hn\~vn\f[]\"
-. IP "\f[B]D\*[@sub]\f[]\ \*[@args]\|\*[@linebreak]"
-. rm @args
-. rm @sub
-..
-.c format: .x-command <subname> "<arguments>"
-.de x-command
-. ds @sub \$1\"
-. shift 1
-. ds @args
-. if (\n[.$] > 0) \
-. ds @args \ \f[I]\,\$*\/\f[]\"
-. IP "\f[B]x\*[@sub]\f[]\*[@args]\f[]\|\*[@linebreak]"
-. rm @sub
-. rm @args
-..
-.de xsub
-. RI "(" "\$1" " control command)"
-. br
-..
-.ec
-.\" End of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH GROFF_OUT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.SH NAME
-groff_out \- groff intermediate output format
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the
-.I intermediate output
-format of the GNU
-.BR roff (@MAN7EXT@)
-text processing system
-.BR groff (@MAN1EXT@).
-.
-This output is produced by a run of the GNU
-.BR @g@troff (@MAN1EXT@)
-program.
-.
-It contains already all device-specific information, but it is not yet
-fed into a device postprocessor program.
-.
-.
-.P
-As the GNU
-.I roff
-processor
-.BR groff (@MAN1EXT@)
-is a wrapper program around
-.B @g@troff
-that automatically calls a
-postprocessor, this output does not show up normally.
-.
-This is why it is called
-.I intermediate
-within the
-.I groff
-.IR system .
-.
-The
-.B groff
-program provides the option
-.B -Z
-to inhibit postprocessing, such that the produced
-.I intermediate output
-is sent to standard output just like calling
-.B @g@troff
-manually.
-.
-.
-.P
-In this document, the term
-.I @g@troff output
-describes what is output by the GNU
-.B @g@troff
-program, while
-.I intermediate output
-refers to the language that is accepted by the parser that prepares
-this output for the postprocessors.
-.
-This parser is smarter on whitespace and implements obsolete elements
-for compatibility, otherwise both formats are the same.
-.
-Both formats can be viewed directly with
-.BR \%gxditview (@MAN1EXT@).
-.
-.
-.P
-The main purpose of the
-.I intermediate output
-concept is to facilitate the development of postprocessors by
-providing a common programming interface for all devices.
-.
-It has a language of its own that is completely different from the
-.BR groff (@MAN7EXT@)
-language.
-.
-While the
-.I groff
-language is a high-level programming language for text processing, the
-.I intermediate output
-language is a kind of low-level assembler language by specifying all
-positions on the page for writing and drawing.
-.
-.
-.P
-The
-.RI pre- groff
-.I roff
-versions are denoted as
-.I classical
-.IR troff .
-The
-.I intermediate output
-produced by
-.B groff
-is fairly readable, while
-.I classical troff
-output was hard to understand because of strange habits that are
-still supported, but not used any longer by
-.I GNU
-.IR @g@troff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "LANGUAGE CONCEPTS"
-.\" --------------------------------------------------------------------
-.
-During the run of
-.BR @g@troff ,
-the
-.I roff
-input is cracked down to the information on what has to be printed at
-what position on the intended device.
-.
-So the language of the
-.I intermediate output
-format can be quite small.
-.
-Its only elements are commands with or without arguments.
-.
-In this document, the term "command" always refers to the
-.I intermediate output
-language, never to the
-.I roff
-language used for document formatting.
-.
-There are commands for positioning and text writing, for drawing, and
-for device controlling.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Separation"
-.\" --------------------------------------------------------------------
-.
-.I Classical troff output
-had strange requirements on whitespace.
-.
-The
-.B groff
-output parser, however, is smart about whitespace by making it
-maximally optional.
-.
-The whitespace characters, i.e., the
-.IR tab ,
-.IR space ,
-and
-.I newline
-characters, always have a syntactical meaning.
-.
-They are never printable because spacing within the output is always
-done by positioning commands.
-.
-.
-.P
-Any sequence of
-.I space
-or
-.I tab
-characters is treated as a single
-.I syntactical
-.IR space .
-.
-It separates commands and arguments, but is only required when there
-would occur a clashing between the command code and the arguments
-without the space.
-.
-Most often, this happens when variable length command names,
-arguments, argument lists, or command clusters meet.
-.
-Commands and arguments with a known, fixed length need not be
-separated by
-.I syntactical
-.IR space .
-.
-.
-.P
-A line break is a syntactical element, too.
-.
-Every command argument can be followed by whitespace, a comment, or a
-newline character.
-.
-Thus a
-.I syntactical line break
-is defined to consist of optional
-.I syntactical space
-that is optionally followed by a comment, and a newline character.
-.
-.
-.P
-The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments.
-.
-For historical reasons, the parser allows to stack such commands on
-the same line, but fortunately, in
-.I groff intermediate
-.IR output ,
-every command with at least one argument is followed by a line break,
-thus providing excellent readability.
-.
-.P
-The other commands \[em] those for drawing and device controlling \[em]
-have a more complicated structure; some recognize long command names,
-and some take a variable number of arguments.
-.
-So all
-.B D
-and
-.B x
-commands were designed to request a
-.I syntactical line break
-after their last argument.
-.
-Only one command,
-.RB ` x\ X '
-has an argument that can stretch over several lines, all other
-commands must have all of their arguments on the same line as the
-command, i.e., the arguments may not be splitted by a line break.
-.
-.P
-Empty lines, i.e., lines containing only space and/or a comment, can
-occur everywhere.
-.
-They are just ignored.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Argument Units"
-.\" --------------------------------------------------------------------
-.
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding
-.I scale indicator
-is not written with the output command arguments; see
-.BR groff (@MAN7EXT@)
-and the
-.I groff info file
-for more on this topic.
-.
-Most commands assume the scale indicator\~\c
-.unit u ,
-the basic unit of the device, some use\~\c
-.unit z ,
-the
-.I scaled point unit
-of the device, while others, such as the color commands expect plain
-integers.
-.
-Note that these scale indicators are relative to the chosen device.
-.
-They are defined by the parameters specified in the device's
-.I DESC
-file; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.P
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.
-.
-The names of characters and fonts can be of arbitrary length.
-.
-A character that is to be printed will always be in the current font.
-.
-.
-.P
-A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded
-.B #
-character is regarded as part of the argument, not as the beginning of
-a comment command.
-.
-An integer argument is already terminated by the next non-digit
-character, which then is regarded as the first character of the next
-argument or command.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Document Parts"
-.\" --------------------------------------------------------------------
-A correct
-.I intermediate output
-document consists of two parts, the
-.I prologue
-and the
-.IR body .
-.
-.P
-The task of the
-.I prologue
-is to set the general device parameters using three exactly specified
-commands.
-.
-The
-.I groff prologue
-is guaranteed to consist of the following three lines (in that order):
-.RS
-.P
-.B x\ T
-.I device
-.br
-.B x\ res
-.I n\ h\ v
-.br
-.B x init
-.RE
-.P
-with the arguments set as outlined in the section
-.BR "Device Control Commands" .
-.
-But the parser for the
-.I intermediate output
-format is able to swallow additional whitespace and comments as well.
-.
-.
-.P
-The
-.I body
-is the main section for processing the document data.
-.
-Syntactically, it is a sequence of any commands different from the
-ones used in the
-.IR prologue .
-.
-Processing is terminated as soon as the first
-.B x\ stop
-command is encountered; the last line of any
-.I groff intermediate output
-always contains such a command.
-.
-.
-.P
-Semantically, the
-.I body
-is page oriented.
-.
-A new page is started by a
-.BR p \~command.
-.
-Positioning, writing, and drawing commands are always done within the
-current page, so they cannot occur before the first
-.BR p \~command.
-.
-Absolute positioning (by the
-.B H
-and
-.BR V \~commands)
-is done relative to the current page, all other positioning
-is done relative to the current location within this page.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMMAND REFERENCE"
-.\" --------------------------------------------------------------------
-.
-This section describes all
-.I intermediate output
-commands, the classical commands as well as the
-.I groff
-extensions.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Comment Command"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI # anything \[la]end_of_line\[ra]
-A comment.
-.
-Ignore any characters from the
-.BR # \~\c
-character up to the next newline character.
-.
-.P
-This command is the only possibility for commenting in the
-.I intermediate
-.IR output .
-.
-Each comment can be preceded by arbitrary
-.I syntactical
-.IR space ;
-every command can be terminated by a comment.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Simple Commands"
-.\" --------------------------------------------------------------------
-.
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.
-.
-Most of them are commands for positioning and text writing.
-.
-These commands are smart about whitespace.
-.
-Optionally,
-.I syntactical space
-can be inserted before, after, and between the command letter and its
-arguments.
-.
-All of these commands are stackable, i.e., they can be preceded by
-other simple commands or followed by arbitrary other commands on the
-same line.
-.
-A separating
-.I syntactical space
-is only necessary when two integer arguments would clash or if the
-preceding argument ends with a string argument.
-.
-.
-.if (\n[@USE_ENV_STACK] == 1) \{\
-.command {
-Open a new environment by copying the actual device configuration data
-to the environment stack.
-.
-The current environment is setup by the device specification and
-manipulated by the setting commands.
-.
-.
-.command }
-Close the actual environment (opened by a preceding
-.BR { \~command)
-and restore the previous environment from the environment
-stack as the actual device configuration data.
-.
-\} \" endif @USE_ENV_STACK
-.
-.
-.command C xxx \[la]white_space\[ra]
-Print a special groff character named
-.argument xxx .
-.
-The trailing
-.I syntactical space
-or
-.I line break
-is necessary to allow character names of arbitrary length.
-.
-The character is printed at the current print position; the
-character's size is read from the font file.
-.
-The print position is not changed.
-.
-.
-.command c c
-Print character\~\c
-.argument c
-at the current print position;
-the character's size is read from the font file.
-.
-The print position is not changed.
-.
-.
-.command f n
-Set font to font number\~\c
-.argument n
-(a non-negative integer).
-.
-.
-.command H n
-Move right to the absolute vertical position\~\c
-.argument n
-(a non-negative integer in basic units\~\c
-.unit u )
-relative to left edge of current page.
-.
-.
-.command h n
-Move
-.argument n
-(a non-negative integer) basic units\~\c
-.unit u
-horizontally to the right.
-.
-.I [CSTR\~#54]
-allows negative values for
-.I n
-also, but
-.I groff
-doesn't use this.
-.
-.
-.command m "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
-Set the color for text (glyphs), line drawing, and the outline of
-graphic objects using different color schemes; the analoguous command
-for the filling color of graphic objects is
-.BR DF .
-.
-The color components are specified as integer arguments between 0 and
-\n[@maxcolor].
-.
-The number of color components and their meaning vary for the
-different color schemes.
-.
-These commands are generated by the
-.I groff
-escape sequence
-.BR \*[@backslash]m .
-.
-No position changing.
-.
-These commands are a
-.I groff
-extension.
-.
-.
-.RS
-.
-.command mc "cyan magenta yellow"
-Set color using the CMY color scheme, having the 3\~color components
-cyan, magenta, and yellow.
-.
-.
-.command md
-Set color to the default color value
-(black in most cases).
-.
-No component arguments.
-.
-.
-.command mg "gray"
-Set color to the shade of gray given by the argument, an integer
-between 0 (black) and \n[@maxcolor] (white).
-.
-.
-.command mk "cyan magenta yellow black"
-Set color using the CMYK color scheme, having the 4\~color components
-cyan, magenta, yellow, and black.
-.
-.command mr "red green blue"
-Set color using the RGB color scheme, having the 3\~color components
-red, green, and blue.
-.
-.RE
-.
-.
-.command N n
-Print character with index\~\c
-.argument n
-(an integer, normally non-negative) of the current font.
-.
-The print position is not changed.
-.
-If
-.B \-T\~html
-is used, negative values are emitted also to indicate an unbreakable space
-with given width.
-.
-For example,
-.B N\~-193
-represents an unbreakable space which has a width of 193u.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.command n b\ a
-Inform the device about a line break, but no positioning is done by
-this command.
-.
-In
-.I classical
-.IR troff ,
-the integer arguments
-.argument b
-and\~\c
-.argument a
-informed about the space before and after the current line to
-make the
-.I intermediate output
-more human readable without performing any action.
-.
-In
-.IR groff ,
-they are just ignored, but they must be provided for compatibility
-reasons.
-.
-.
-.command p n
-Begin a new page in the outprint.
-.
-The page number is set to\~\c
-.argument n .
-.
-This page is completely independent of pages formerly processed even
-if those have the same page number.
-.
-The vertical position on the outprint is automatically set to\~0.
-.
-All positioning, writing, and drawing is always done relative to a
-page, so a
-.BR p \~command
-must be issued before any of these commands.
-.
-.
-.command s n
-Set point size to
-.argument n
-scaled points
-(this is unit\~\c
-.unit z
-in GNU
-.BR @g@troff ).
-.
-.I Classical troff
-used the unit
-.I points
-(\c
-.unit p )
-instead; see section
-.BR COMPATIBILITY .
-.
-.
-.command t xxx \[la]white_space\[ra]
-.command+ t "xxx dummy_arg" \[la]white_space\[ra]
-Print a word, i.e., a sequence of characters
-.argument xxx
-terminated by a space character or a line break; an optional second
-integer argument is ignored (this allows the formatter to generate
-an even number of arguments).
-.
-The first character should be printed at the current position, the
-current horizontal position should then be increased by the width of
-the first character, and so on for each character.
-.
-The widths of the characters are read from the font file, scaled for the
-current point size, and rounded to a multiple of the horizontal
-resolution.
-.
-Special characters cannot be printed using this command (use the
-.B C
-command for named characters).
-.
-This command is a
-.I groff
-extension; it is only used for devices whose
-.I DESC
-file contains the
-.B tcommand
-keyword; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.command u "n xxx" \[la]white_space\[ra]
-Print word with track kerning.
-.
-This is the same as the
-.B t
-command except that after printing each character, the current
-horizontal position is increased by the sum of the width of that
-character and\~\c
-.argument n
-(an integer in
-basic units\~\c
-.unit u ).
-This command is a
-.I groff
-extension; it is only used for devices whose
-.I DESC
-file contains the
-.B tcommand
-keyword; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.command V n
-Move down to the absolute vertical position\~\c
-.argument n
-(a non-negative integer in basic units\~\c
-.unit u )
-relative to upper edge of current page.
-.
-.
-.command v n
-Move
-.argument n
-basic units\~\c
-.unit u
-down
-.RI ( n
-is a non-negative integer).
-.
-.I [CSTR\~#54]
-allows negative values for
-.I n
-also, but
-.I groff
-doesn't use this.
-.
-.
-.command w
-Informs about a paddable whitespace to increase readability.
-.
-The spacing itself must be performed explicitly by a move command.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Graphics Commands"
-.\" --------------------------------------------------------------------
-.
-Each graphics or drawing command in the
-.I intermediate output
-starts with the letter\~\c
-.B D
-followed by one or two characters that specify a subcommand; this
-is followed by a fixed or variable number of integer arguments that
-are separated by a single space character.
-.
-A
-.B D\c
-\~command
-may not be followed by another command on the same line (apart from a
-comment), so each
-.B D\c
-\~command
-is terminated by a
-.I syntactical line
-.IR break .
-.
-.
-.P
-.B @g@troff
-output follows the classical spacing rules (no space between command
-and subcommand, all arguments are preceded by a single space
-character), but the parser allows optional space between the command
-letters and makes the space before the first argument optional.
-.
-As usual, each space can be any sequence of tab and space characters.
-.
-.
-.P
-Some graphics commands can take a variable number of arguments.
-.
-In this case, they are integers representing a size measured in basic
-units\~\c
-.unit u .
-.
-The arguments called
-.list1..n h
-stand for horizontal distances where positive means right, negative
-left.
-.
-The arguments called
-.list1..n v
-stand for vertical distances where positive means down, negative up.
-.
-All these distances are offsets relative to the current location.
-.
-.
-.P
-Unless indicated otherwise, each graphics command directly corresponds
-to a similar
-.I groff
-.B \*[@backslash]D
-escape sequence; see
-.BR groff (@MAN7EXT@).
-.
-.
-.P
-Unknown
-.B D\c
-\~commands are assumed to be device-specific.
-.
-Its arguments are parsed as strings; the whole information is then
-sent to the postprocessor.
-.
-.
-.P
-In the following command reference, the syntax element
-.I \[la]line_break\[ra]
-means a
-.I syntactical line break
-as defined in section
-.BR Separation .
-.
-.
-.D-multiarg ~
-Draw B-spline from current position to offset
-.indexed_offset h 1 v 1 ,
-then to offset
-.indexed_offset h 2 v 2
-if given, etc.\& up to
-.indexed_offset h n v n .
-This command takes a variable number of argument pairs; the current
-position is moved to the terminal point of the drawn curve.
-.
-.
-.Da-command
-Draw arc from current position to
-.indexed_offset h 1 v 1 \|+\|\c
-.indexed_offset h 2 v 2
-with center at
-.indexed_offset h 1 v 1 ;
-then move the current position to the final point of the arc.
-.
-.
-.D-command C d
-.D-command+ C d dummy_arg
-Draw a solid circle using the current fill color with diameter\~\c
-.argument d
-(integer in basic units\~\c
-.unit u )
-with leftmost point at the current position; then move the current
-position to the rightmost point of the circle.
-.
-An optional second integer argument is ignored (this allows to the
-formatter to generate an even number of arguments).
-.
-This command is a
-.I groff
-extension.
-.
-.
-.D-command c d
-Draw circle line with diameter\~\c
-.argument d
-(integer in basic units\~\c
-.unit u )
-with leftmost point at the current position; then move the current
-position to the rightmost point of the circle.
-.
-.
-.D-command E "h v"
-Draw a solid ellipse in the current fill color with a horizontal
-diameter of\~\c
-.argument h
-and a vertical diameter of\~\c
-.argument v
-(both integers in basic units\~\c
-.unit u )
-with the leftmost point at the current position; then move to the
-rightmost point of the ellipse.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.D-command e "h v"
-Draw an outlined ellipse with a horizontal diameter of\~\c
-.argument h
-and a vertical diameter of\~\c
-.argument v
-(both integers in basic units\~\c
-.unit u )
-with the leftmost point at current position; then move to the
-rightmost point of the ellipse.
-.
-.
-.D-command F "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
-Set fill color for solid drawing objects using different color
-schemes; the analoguous command for setting the color of text, line
-graphics, and the outline of graphic objects is
-.BR m .
-.
-The color components are specified as integer arguments between 0 and
-\n[@maxcolor].
-.
-The number of color components and their meaning vary for the
-different color schemes.
-.
-These commands are generated by the
-.I groff
-escape sequences
-.B \*[@backslash]D'F\ .\|.\|.'
-and
-.B \*[@backslash]M
-(with no other corresponding graphics commands).
-.
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.RS
-.
-.D-command Fc "cyan magenta yellow"
-Set fill color for solid drawing objects using the CMY color scheme,
-having the 3\~color components cyan, magenta, and yellow.
-.
-.
-.D-command Fd
-Set fill color for solid drawing objects to the default fill color value
-(black in most cases).
-.
-No component arguments.
-.
-.
-.D-command Fg "gray"
-Set fill color for solid drawing objects to the shade of gray given by
-the argument, an integer between 0 (black) and \n[@maxcolor] (white).
-.
-.
-.D-command Fk "cyan magenta yellow black"
-Set fill color for solid drawing objects using the CMYK color scheme,
-having the 4\~color components cyan, magenta, yellow, and black.
-.
-.D-command Fr "red green blue"
-Set fill color for solid drawing objects using the RGB color scheme,
-having the 3\~color components red, green, and blue.
-.
-.RE
-.
-.
-.D-command f n
-The argument
-.argument n
-must be an integer in the range -32767 to 32767.
-.
-.RS
-.TP
-.RI "0 \[<=] " n " \[<=] 1000"
-Set the color for filling solid drawing objects to a shade of gray,
-where 0 corresponds to solid white, 1000 (the default) to solid black,
-and values in between to intermediate shades of gray; this is
-obsoleted by command
-.BR DFg .
-.
-.TP
-.IR n " < 0 or " n " > 1000"
-Set the filling color to the color that is currently being used for
-the text and the outline, see command
-.BR m .
-For example, the command sequence
-.
-.nf
-.ft CB
-.RS
-.RS
-mg 0 0 \n[@maxcolor]
-Df -1
-.RE
-.ft
-.fi
-.
-sets all colors to blue.
-.RE
-.
-.
-.P
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.RE
-.
-.
-.D-command l "h v"
-Draw line from current position to offset
-.offset h v
-(integers in basic units\~\c
-.unit u );
-then set current position to the end of the drawn line.
-.
-.
-.D-multiarg p
-Draw a polygon line from current position to offset
-.offset h1 v1 ,
-from there to offset
-.offset h2 v2 ,
-etc.\& up to offset
-.offset hn vn ,
-and from there back to the starting position.
-.
-.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
-For historical reasons, the position is changed by adding the sum of
-all arguments with odd index to the actual horizontal position and the
-even ones to the vertical position.
-.
-Although this doesn't make sense it is kept for compatibility.
-.
-\}
-.el \{\
-As the polygon is closed, the end of drawing is the starting point, so
-the position doesn't change.
-\}
-.
-This command is a
-.I groff
-extension.
-.
-.
-.D-multiarg P
-The same macro as the corresponding
-.B Dp
-command with the same arguments, but draws a solid polygon in the
-current fill color rather than an outlined polygon.
-.
-.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
-The position is changed in the same way as with
-.BR Dp .
-\}
-.el \
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.D-command t n
-Set the current line thickness to\~\c
-.argument n
-(an integer in basic units\~\c
-.unit u )
-if
-.argument n >0;
-if
-.argument n =0
-select the smallest available line thickness; if
-.argument n <0
-set the line thickness proportional to the point size (this is the
-default before the first
-.B Dt
-command was specified).
-.
-.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
-For historical reasons, the horizontal position is changed by adding
-the argument to the actual horizontal position, while the vertical
-position is not changed.
-.
-Although this doesn't make sense it is kept for compatibility.
-.
-\}
-.el \
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Device Control Commands"
-.\" --------------------------------------------------------------------
-.
-Each device control command starts with the letter
-.B x
-followed by a space character (optional or arbitrary space/\:tab in
-.IR groff )
-and a subcommand letter or word; each argument (if any) must be
-preceded by a
-.I syntactical
-.IR space .
-.
-All
-.B x
-commands are terminated by a
-.IR "syntactical line break" ;
-no device control command can be followed by another command on the same
-line (except a comment).
-.
-.P
-The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence
-of characters terminated by the next tab, space, or newline character.
-.
-All characters of the subcommand word but the first are simply ignored.
-.
-For example,
-.B @g@troff
-outputs the initialization command
-.B x\ i
-as
-.B x\ init
-and the resolution command
-.B x\ r
-as
-.BR "x\ res" .
-.
-But writings like
-.B x\ i_like_groff
-and
-.B x\ roff_is_groff
-resp.\& are accepted as well to mean the same commands.
-.
-.P
-In the following, the syntax element
-.I \[la]line_break\[ra]
-means a
-.I syntactical line break
-as defined in section
-.BR Separation .
-.
-.x-command F name
-.xsub Filename
-Use
-.argument name
-as the intended name for the current file in error reports.
-.
-This is useful for remembering the original file name when
-.B groff
-uses an internal piping mechanism.
-.
-The input file is not changed by this command.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.x-command f "n\ s"
-.xsub font
-Mount font position\~\c
-.argument n
-(a non-negative integer) with font named\~\c
-.argument s
-(a text word),
-cf.
-.BR groff_font (@MAN5EXT@).
-.
-.
-.x-command H n
-.xsub Height
-Set character height to\~\c
-.argument n
-(a positive integer in scaled points\~\c
-.unit z ).
-.
-.I Classical troff
-used the unit points (\c
-.unit p )
-instead; see section
-.BR COMPATIBILITY .
-.
-.
-.x-command i
-.xsub init
-Initialize device.
-.
-This is the third command of the
-.IR prologue .
-.
-.
-.x-command p
-.xsub pause
-Parsed but ignored.
-.
-The classical documentation reads
-.I pause device, can be
-.IR restarted .
-.
-.
-.x-command r "n\ h\ v"
-.xsub resolution
-Resolution is\~\c
-.argument n ,
-while
-.argument h
-is the minimal horizontal motion, and
-.argument v
-the minimal vertical motion possible with this device; all arguments
-are positive integers in basic units\~\c
-.unit u
-per inch.
-.
-This is the second command of the
-.IR prologue .
-.
-.
-.x-command S n
-.xsub Slant
-Set slant to\~\c
-.argument n
-degrees (an integer in basic units\~\c
-.unit u ).
-.
-.
-.x-command s
-.xsub stop
-Terminates the processing of the current file; issued as the last
-command of any
-.I intermediate @g@troff
-.IR output .
-.
-.
-.x-command t
-.xsub trailer
-Generate trailer information, if any.
-.
-In
-.BR groff ,
-this is actually just ignored.
-.
-.
-.x-command T xxx
-.xsub Typesetter
-Set name of device to word
-.argument xxx ,
-a sequence of characters ended by the next whitespace character.
-.
-The possible device names coincide with those from the groff
-.B -T
-option.
-.
-This is the first command of the
-.IR prologue .
-.
-.
-.x-command u n
-.xsub underline
-Configure underlining of spaces.
-.
-If
-.argument n
-is\~1, start underlining of spaces;
-if
-.argument n
-is\~0, stop underlining of spaces.
-.
-This is needed for the
-.B cu
-request in
-.B @g@nroff
-mode and is ignored otherwise.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.x-command X anything
-.xsub X-escape
-Send string
-.argument anything
-uninterpreted to the device.
-.
-If the line following this command starts with a
-.B +
-character this line is interpreted as a continuation line in the
-following sense.
-.
-The
-.B +
-is ignored, but a newline character is sent instead to the device, the
-rest of the line is sent uninterpreted.
-.
-The same applies to all following lines until the first character of a
-line is not a
-.B +
-character.
-.
-This command is generated by the
-.I groff
-escape sequence
-.BR \*[@backslash]X .
-.
-The line-continuing feature is a
-.I groff
-extension.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Obsolete Command"
-.\" --------------------------------------------------------------------
-.
-In
-.I classical troff
-output, the writing of a single character was mostly done by a very
-strange command that combined a horizontal move and the printing of a
-character.
-.
-It didn't have a command code, but is represented by a 3-character
-argument consisting of exactly 2\~digits and a character.
-.
-.TP
-.argument ddc
-Move right
-.argument dd
-(exactly two decimal digits) basic units\~\c
-.unit u ,
-then print character\~\c
-.argument c .
-.
-.
-.RS
-.P
-In
-.IR groff ,
-arbitrary
-.I syntactical space
-around and within this command is allowed to be added.
-.
-Only when a preceding command on the same line ends with an argument
-of variable length a separating space is obligatory.
-.
-In
-.I classical
-.IR troff ,
-large clusters of these and other commands were used, mostly without
-spaces; this made such output almost unreadable.
-.
-.RE
-.
-.
-.P
-For modern high-resolution devices, this command does not make sense
-because the width of the characters can become much larger than two
-decimal digits.
-.
-In
-.BR groff ,
-this is only used for the devices
-.BR X75 ,
-.BR X75-12 ,
-.BR X100 ,
-and
-.BR X100-12 .
-.
-For other devices,
-the commands
-.B t
-and\~\c
-.B u
-provide a better functionality.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "POSTPROCESSING"
-.\" --------------------------------------------------------------------
-.
-The
-.I roff
-postprocessors are programs that have the task to translate the
-.I intermediate output
-into actions that are sent to a device.
-.
-A device can be some piece of hardware such as a printer, or a software
-file format suitable for graphical or text processing.
-.
-The
-.I groff
-system provides powerful means that make the programming of such
-postprocessors an easy task.
-.P
-There is a library function that parses the
-.I intermediate output
-and sends the information obtained to the device via methods of a
-class with a common interface for each device.
-.
-So a
-.I groff
-postprocessor must only redefine the methods of this class.
-.
-For details, see the reference in section
-.BR FILES .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-This section presents the
-.I intermediate output
-generated from the same input for three different devices.
-.
-The input is the sentence
-.I hell world
-fed into
-.B groff
-on the command line.
-.
-.
-.Topic
-High-resolution device
-.I ps
-.
-.
-.RS
-.P
-.ShellCommand echo "hell world" | groff -Z -T ps
-.
-.
-.P
-.nf
-.ft CB
-x T ps
-x res 72000 1 1
-x init
-p1
-x font 5 TR
-f5
-s10000
-V12000
-H72000
-thell
-wh2500
-tw
-H96620
-torld
-n12000 0
-x trailer
-V792000
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR grops (@MAN1EXT@)
-to get its representation as a PostScript file.
-.
-.
-.Topic
-Low-resolution device
-.I latin1
-.
-.
-.RS
-.P
-This is similar to the high-resolution device except that the
-positioning is done at a minor scale.
-.
-Some comments (lines starting with
-.IR # )
-were added for clarification; they were not generated by the
-formatter.
-.
-.
-.P
-.ShellCommand echo "hell world" | groff -Z -T latin1
-.
-.
-.P
-.nf
-.I "# prologue"
-.ft CB
-x T latin1
-x res 240 24 40
-x init
-.I "# begin a new page"
-.ft CB
-p1
-.I "# font setup"
-.ft CB
-x font 1 R
-f1
-s10
-.I "# initial positioning on the page"
-.ft CB
-V40
-H0
-.I "# write text `hell'"
-.ft CB
-thell
-.I "# inform about a space, and do it by a horizontal jump"
-.ft CB
-wh24
-.I "# write text `world'"
-.ft CB
-tworld
-.I "# announce line break, but do nothing because ..."
-.ft CB
-n40 0
-.I "# ... the end of the document has been reached"
-.ft CB
-x trailer
-V2640
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR grotty (@MAN1EXT@)
-to get a formatted text document.
-.
-.
-.Topic
-Classical style output
-.
-.
-.RS
-.P
-As a computer monitor has a very low resolution compared to modern
-printers the
-.I intermediate output
-for the X\~devices can use the jump-and-write command with its 2-digit
-displacements.
-.
-.
-.P
-.ShellCommand echo "hell world" | groff -Z -T X100
-.
-.
-.P
-.nf
-.ft CB
-x T X100
-x res 100 1 1
-x init
-p1
-x font 5 TR
-f5
-s10
-V16
-H100
-.I "# write text with old-style jump-and-write command"
-.ft CB
-ch07e07l03lw06w11o07r05l03dh7
-n16 0
-x trailer
-V1100
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR \%xditview (1x)
-or
-.BR \%gxditview (@MAN1EXT@)
-for displaying in\~X.
-.
-.
-.P
-Due to the obsolete jump-and-write command, the text clusters in the
-classical output are almost unreadable.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMPATIBILITY"
-.\" --------------------------------------------------------------------
-.
-The
-.I intermediate output
-language of the
-.I classical troff
-was first documented in
-.IR [CSTR\~#97] .
-.
-The
-.I groff intermediate output
-format is compatible with this specification except for the following
-features.
-.
-.
-.Topic
-The classical quasi device independence is not yet implemented.
-.
-.
-.Topic
-The old hardware was very different from what we use today.
-.
-So the
-.I groff
-devices are also fundamentally different from the ones in
-.I classical
-.IR troff .
-.
-For example, the classical PostScript device was called
-.I post
-and had a resolution of 720 units per inch,
-while
-.IR groff 's
-.I ps
-device has a resolution of 72000 units per inch.
-.
-Maybe, by implementing some rescaling mechanism similar to the
-classical quasi device independence, these could be integrated into
-modern
-.IR groff .
-.
-.
-.Topic
-The B-spline command
-.B D~
-is correctly handled by the
-.I intermediate output
-parser, but the drawing routines aren't implemented in some of the
-postprocessor programs.
-.
-.
-.Topic
-The argument of the commands
-.B s
-and
-.B x H
-has the implicit unit scaled point\~\c
-.unit z
-in
-.IR groff ,
-while
-.I classical troff
-had point (\c
-.unit p ).
-.
-This isn't an incompatibility, but a compatible extension, for both
-units coincide for all devices without a
-.I sizescale
-parameter, including all classical and the
-.I groff
-text devices.
-.
-The few
-.I groff
-devices with a sizescale parameter either did not exist, had a
-different name, or seem to have had a different resolution.
-.
-So conflicts with classical devices are very unlikely.
-.
-.
-.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
-.Topic
-The position changing after the commands
-.BR Dp ,
-.BR DP ,
-and
-.B Dt
-is illogical, but as old versions of groff used this feature it is
-kept for compatibility reasons.
-.\} \" @STUPID_DRAWING_POSITIONING
-.el \{\
-.Topic
-Temporarily, there existed some confusion on the positioning after the
-.B D
-commands that are
-.I groff
-extensions.
-.
-This has been clarified by establishing the classical rule for all
-groff drawing commands:
-.
-.
-.RS
-.P
-.ft I
-The position after a graphic object has been drawn is at its end;
-for circles and ellipses, the "end" is at the right side.
-.ft
-.RE
-.
-.
-.P
-From this, the positionings specified for the drawing commands above
-follow quite naturally.
-.\} \" @STUPID_DRAWING_POSITIONING
-.
-.P
-The differences between
-.I groff
-and
-.I classical troff
-are documented in
-.BR groff_diff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FILES"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.IB \[la]groff_source_dir\[ra] /src/libs/libdriver/input.cpp
-Defines the parser and postprocessor for the
-.I intermediate
-.IR output .
-.
-It is located relative to the top directory of the
-.I groff
-source tree, e.g.
-.IR @GROFFSRCDIR@ .
-.
-This parser is the definitive specification of the
-.I groff intermediate output
-format.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-A reference like
-.BR groff (@MAN7EXT@)
-refers to a manual page; here
-.B groff
-in section\~\c
-.I @MAN7EXT@
-of the man-page documentation system.
-.
-To read the example, look up section\~@MAN7EXT@ in your desktop help
-system or call from the shell prompt
-.
-.
-.RS
-.P
-.ShellCommand man @MAN7EXT@ groff
-.RE
-.
-.
-.P
-For more details, see
-.BR man (1).
-.
-.
-.TP
-.BR groff (@MAN1EXT@)
-option
-.B -Z
-and further readings on groff.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-for details of the
-.I groff
-language such as numerical units and escape sequences.
-.
-.
-.TP
-.BR groff_font (@MAN5EXT@)
-for details on the device scaling parameters of the
-.B DESC
-file.
-.
-.
-.TP
-.BR @g@troff (@MAN1EXT@)
-generates the device-independent intermediate output.
-.
-.
-.TP
-.BR roff (@MAN7EXT@)
-for historical aspects and the general structure of roff systems.
-.
-.
-.TP
-.BR groff_diff (@MAN7EXT@)
-The differences between the intermediate output in groff and classical
-troff.
-.
-.
-.TP
-.BR gxditview (@MAN1EXT@)
-Viewer for the
-.I intermediate
-.IR output .
-.
-.
-.P
-.BR \%grodvi (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-.BR \%grolbp (@MAN1EXT@),
-.BR \%grolj4 (@MAN1EXT@),
-.BR \%grops (@MAN1EXT@),
-.BR \%grotty (@MAN1EXT@)
-.br
-.RS
-the groff postprocessor programs.
-.RE
-.
-.
-.P
-For a treatment of all aspects of the groff system within a single
-document, see the
-.I groff info
-.IR file .
-.
-It can be read within the integrated help systems, within
-.BR emacs (1)
-or from the shell prompt by
-.
-.RS
-.ShellCommand info groff
-.RE
-.
-.
-.P
-The
-.I classical troff output language
-is described in two AT&T Bell Labs CSTR documents available on-line at
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
- "Bell Labs CSTR site" .
-.
-.
-.TP
-.I [CSTR #97]
-.I A Typesetter-independent TROFF
-by
-.I Brian Kernighan
-is the original and most concise documentation on the output language;
-see
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz CSTR\~#97 .
-.
-.
-.TP
-.I [CSTR\~#54]
-The 1992 revision of the
-.I Nroff/\:Troff User's Manual
-by
-.I J.\& F.\& Osanna
-and
-.I Brian Kernighan
-isn't as concise as
-.I [CSTR\~#97]
-regarding the output language; see
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz CSTR\~#54 .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL with this package; it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.
-.P
-This document is part of
-.IR groff ,
-the GNU
-.I roff
-distribution.
-.
-It is based on a former version \- published under the GPL \- that
-described only parts of the
-.I groff
-extensions of the output language.
-.
-It has been rewritten 2002 by \m[blue]Bernd Warken\m[] and is
-maintained by
-.MTO wl@gnu.org "Werner Lemberg" .
-.
-.cp \n[groff_out_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.\"
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/groff_tmac.man b/contrib/groff/man/groff_tmac.man
deleted file mode 100644
index 030e739f142d..000000000000
--- a/contrib/groff/man/groff_tmac.man
+++ /dev/null
@@ -1,1282 +0,0 @@
-.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_tmac \- macro files in the roff typesetting system
-.SH DESCRIPTION
-.\" The .SH was moved to this place to make `apropos' happy.
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalize
-.\" --------------------------------------------------------------------
-.
-.ig
-groff_tmac.5
-
-File position: <groff-source>/man/groff_tmac.man
-
-Last update: 27 Jul 2004
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de> and Werner Lemberg
-<wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_tmac_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.ds Ellipsis \&.\|.\|.\&\"
-.
-.\" Global static variables for inter-macro communication
-.rr @+Example_font
-.
-.\" --------------------------------------------------------------------
-.\" setup for the macro definitions below
-.\"
-.\" naming: namespace:cathegory_macro.variable_name (experimental)
-.
-.\" --------------------------------------------------------------------
-.\" configuration of prompt for `.Shell_cmd'* macros
-.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands
-.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines
-.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts
-.
-.\" automatically determine setup from the configuration above
-.als @f groffer:Shell_cmd_base.prompt_font\"
-.als @t groffer:Shell_cmd.prompt_text\"
-.als @t+ groffer:Shell_cmd+.prompt_text\"
-.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
-.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
-.nr @w \w'\*[groffer:Shell_cmd.prompt]'\"
-.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\"
-.ft \*[@f]
-.\" Full prompt width is maximum of texts plus 1m
-.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
-.ft
-.rm @f
-.rm @f+
-.rm @t
-.rm @t+
-.rr @w
-.rr @w+
-.
-.\"--------------------------------------------------------------------
-.\" Ignore all arguments like a comment, even after a .eo call.
-.de c
-..
-.c --------------------------------------------------------------------
-.de BIR
-. ie (\\n[.$] < 3) \
-. BI \\$@
-. el \{\
-. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
-. shift 2
-. Text \\*[@tmp@]\fR\\$*\f[]
-. rm @tmp@
-. \}
-..
-.c --------------------------------------------------------------------
-.c .Env_var (<env_var_name> [<punct>])
-.c
-.c Display an environment variable, with optional punctuation.
-.c
-.de Env_var
-. nh
-. SM
-. Text \f[CB]\\$1\f[]\\$2
-. hy
-..
-.c --------------------------------------------------------------------
-.c .Error (<text>...)
-.c
-.c Print error message to terminal and abort.
-.c
-.de Error
-. tm \\$*
-. ab
-..
-.c --------------------------------------------------------------------
-.de Example
-. if r@+Example_font \
-. Error previous .Example was not terminated by a ./Example
-. nr @+Example_font \\n[.f]
-. nh
-. nf
-. RS
-. ft CR
-..
-.c --------------------------------------------------------------------
-.de /Example
-. if !r@+Example_font \
-. Error no previous call to .Example
-. ft \\n[@+Example_font]
-. RE
-. fi
-. hy
-. rr @+Example_font
-..
-.
-.c --------------------------------------------------------------------
-.c .Shell_cmd (<CR> [<CI>] ...)
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c
-.c Examples:
-.c .Shell_cmd "groffer --dpi 100 file"
-.c result: `sh# groffer --dpi 100 file'
-.c with 'sh#' in font I, the rest in CR
-.c
-.c .Shell_cmd groffer\~--dpi\~100\~file
-.c result: the same as above
-.c
-.c .Shell_cmd "groffer --dpi=" value " file"
-.c result: sh# groffer --dpi=value file
-.c with `groffer --dpi=' and `file' in CR; `value' in CI
-.c
-.c .Shell_cmd groffer\~--dpi= value \~file
-.c result: the same as the previous example
-.c
-.de Shell_cmd
-. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd+ (<CR> [<CI>] ...)
-.c
-.c A continuation line for .Shell_cmd.
-.c
-.de Shell_cmd+
-. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c Internal, do not use directly.
-.c
-.c Globals: read-only register @.Shell_cmd_width
-.c
-.de groffer:Shell_cmd_base
-. if (\\n[.$] <= 0) \
-. return
-. nr @+font \\n[.f]\"
-. ds @prompt \\$1\"
-. ft CR
-. c gap between prompt and command
-. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
-. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
-. shift
-. ds @cf CR\"
-. while (\\n[.$] > 0) \{\
-. as @res \\f[\\*[@cf]]\\$1\"
-. shift
-. ie '\\*[@cf]'CR' \
-. ds @cf I\"
-. el \
-. ds @cf CR\"
-. \}
-. br
-. ad l
-. nh
-. nf
-. Text \\*[@res]\"
-. fi
-. hy
-. ad
-. br
-. ft \\n[@+font]
-. rr @+font
-. rr @+gap
-. rm @cf
-. rm @res
-..
-.c --------------------------------------------------------------------
-.c .Text (<text>...)
-.c
-.c Treat the arguments as text, no matter how they look.
-.c
-.de Text
-. if (\\n[.$] == 0) \
-. return
-. nop \)\\$*\)
-..
-.c --------------------------------------------------------------------
-.c .Topic ([<indent>])
-.c
-.c A bulleted paragraph
-.c
-.de Topic
-. ie (\\n[.$] = 0) \
-. ds @indent 2m\"
-. el \
-. ds @indent \\$1\"
-. TP \\*[@indent]
-. Text \[bu]
-. rm @indent
-..
-.c --------------------------------------------------------------------
-.c .TP+ ()
-.c
-.c Continuation line for .TP header.
-.c
-.de TP+
-. br
-. ns
-. TP \\$1
-..
-.c --------------------------------------------------------------------
-.de 'char
-. ds @tmp@ `\f(CR\\$1\f[]'
-. shift
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de option
-. ds @tmp@ \f(CB\\$1\f[]
-. shift 1
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de argument
-. ds @tmp@ \f(CI\\$1\f[]
-. shift 1
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de request
-. ds @tmp@ \f(CB\\$1\f[]
-. shift 1
-. Text .\\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de escape
-. ds @tmp@ \f[CB]\\$1\f[]
-. shift 1
-. Text \[rs]\\*[@tmp@]\\$*
-. rm @tmp@
-..
-.\" --------------------------------------------------------------------
-.\" SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.BR roff (@MAN7EXT@)
-type-setting system provides a set of macro packages suitable for
-special kinds of documents.
-.
-Each macro package stores its macros and definitions in a file called
-the package's
-.BR "tmac file" .
-The name is deduced from
-.RB ` T\c
-.IB roff MAC\c
-.IR ros '.
-.
-.P
-The tmac files are normal roff source documents, except that they
-usually contain only definitions and setup commands, but no text.
-.
-All tmac files are kept in a single or a small number of directories,
-the
-.B tmac
-directories.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF MACRO PACKAGES"
-.\" --------------------------------------------------------------------
-.
-.I groff
-provides all classical macro packages, some more full packages, and
-some secondary packages for special purposes.
-.
-Note that it is not possible to use multiple primary macro packages at the
-same time; saying e.g.\&
-.
-.IP
-.Shell_cmd "groff \-m man \-m ms foo"
-.
-.P
-or
-.
-.IP
-.Shell_cmd "groff \-m man foo \-m ms bar"
-.
-.P
-will fail.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Man\~Pages"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B man
-This is the classical macro package for UNIX manual pages
-(man\~pages); it is quite handy and easy to use; see
-.BR groff_man (@MAN7EXT@).
-.
-.
-.TP
-.B doc
-.TP+
-.B mdoc
-An alternative macro package for man\~pages mainly used in BSD
-systems; it provides many new features, but it is not the standard for
-man\~pages; see
-.BR groff_mdoc (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Full Packages"
-.\" --------------------------------------------------------------------
-.
-The packages in this section provide a complete set of macros for
-writing documents of any kind, up to whole books.
-.
-They are similar in functionality; it is a matter of taste which one
-to use.
-.
-.
-.TP
-.B me
-The classical
-.I me
-macro package; see
-.BR groff_me (@MAN7EXT@).
-.
-.
-.TP
-.B mm
-The semi-classical
-.I mm
-macro package; see
-.BR groff_mm (@MAN7EXT@).
-.
-.
-.TP
-.B mom
-The new
-.I mom
-macro package, only available in groff.
-.
-As this is not based on other packages, it can be freely designed.
-.
-So it is expected to become quite a nice, modern macro package.
-.
-See
-.BR groff_mom (@MAN7EXT@).
-.
-.
-.TP
-.B ms
-The classical
-.I ms
-macro package; see
-.BR groff_ms (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Packages"
-.\" --------------------------------------------------------------------
-.
-The macro packages in this section are not intended for stand-alone
-usage, but can be used to add special functionality to any other
-macro package or to plain groff.
-.
-.
-.TP
-.B papersize
-This macro file is already loaded at start-up by
-.B @g@troff
-so it isn't necessary to call it explicitly.
-.
-It provides an interface to set the paper size on the command line with
-the option \f[B]\%\-dpaper=\f[]\f[I]size\f[].
-.
-Possible values for
-.I size
-are the same as the predefined
-.B papersize
-values in the DESC file (only lowercase; see
-.BR groff_font (@MAN5EXT@)
-for more) except
-.BR a7 - d7 .
-.
-An appended
-.B l
-(ell) character denotes landscape orientation.
-.
-Examples:
-.BR a4 ,
-.BR c3l ,
-.BR letterl .
-.
-.IP
-Most output drivers need additional command line switches
-.B \-p
-and
-.B \-l
-to override the default paper length and orientation as set in the driver
-specific DESC file.
-.
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-.
-.IP
-.Shell_cmd "groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps"
-.
-.
-.TP
-.B pic
-This file provides proper definitions for the macros
-.B PS
-and
-.BR PE ,
-needed for the
-.BR @g@pic (@MAN1EXT@)
-preprocessor.
-.
-They will center each picture.
-.
-Use it only if your macro package doesn't provide proper definitions
-for those two macros (actually, most of them already have).
-.
-.
-.TP
-.B pspic
-A single macro is provided in this file,
-.BR PSPIC ,
-to include a PostScript graphic in a document.
-.
-It makes only sense for output devices which support inclusion of PS
-images:
-.BR \-Tps ,
-.BR \-Tdvi ,
-and
-.BR \-Thtml ;
-the file is then loaded automatically.
-.
-Syntax:
-.RS
-.IP
-\&\fB.PSPIC\fP [\fB\-L\fP|\fB-R\fP|\fB\-I\fP \fIn\fP]\ \fI\|file\fP [\fIwidth\fP [\fIheight\fP]]
-.RE
-.
-.IP
-.I file
-is the name of the file containing the illustration;
-.I width
-and
-.I height
-give the desired width and height of the graphic.
-.
-The
-.I width
-and
-.I height
-arguments may have scaling indicators attached;
-the default scaling indicator is\~\c
-.BR i .
-.
-This macro will scale the graphic uniformly
-in the x and y\~directions so that it is no more than
-.I width
-wide
-and
-.I height
-high.
-.
-By default, the graphic will be horizontally centered.
-.
-The
-.BI \-L
-and
-.BI \-R
-options cause the graphic to be left-aligned and right-aligned,
-respectively.
-.
-The
-.B \-I
-option causes the graphic to be indented by\~\c
-.I n
-(default scaling indicator is\~\c
-.BR m ).
-.
-.
-.TP
-.B trace
-Use this for tracing macro calls.
-.
-It is only useful for debugging.
-.
-See
-.BR groff_trace (@MAN7EXT@) .
-.
-.
-.TP
-.B tty-char
-Overrides the definition of standard troff characters and some groff
-characters for tty devices.
-.
-The optical appearance is intentionally inferior compared to that of
-normal tty formatting to allow processing with critical equipment.
-.
-.
-.TP
-.B www
-Additions of elements known from the html format, as being used in the
-internet (World Wide Web) pages; this includes URL links and mail
-addresses; see
-.BR groff_www (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH NAMING
-.\" --------------------------------------------------------------------
-.
-In classical roff systems, there was a funny naming scheme for macro
-packages, due to a simplistic design in option parsing.
-.
-Macro packages were always included by option
-.option -m;
-when this option was directly followed by its argument without an
-intervening space, this looked like a long option preceded by a single
-minus \[em] a sensation in the computer stone age.
-.
-To make this optically working for macro package names, all classical
-macro packages choose a name that started with the letter
-.'char m ,
-which was omitted in the naming of the macro file.
-.
-.
-.P
-For example, the macro package for the man pages was called
-.IR man ,
-while its macro file
-.IR tmac.an .
-So it could be activated by the argument
-.I an
-to option
-.option -m ,
-or
-.option -man
-for short.
-.
-.
-.P
-For similar reasons, macro packages that did not start with an
-.'char m
-had a leading
-.'char m
-added in the documentation and in talking; for example, the package
-corresponding to
-.I tmac.doc
-was called
-.I mdoc
-in the documentation, although a more suitable name would be
-.IR doc .
-For, when omitting the space between the option and its argument, the
-command line option for activating this package reads
-.option "-mdoc" .
-.
-.
-.P
-To cope with all situations, actual versions of
-.BR groff (@MAN1EXT@)
-are smart about both naming schemes by providing two macro files
-for the inflicted macro packages; one with a leading
-.'char m ,
-the other one without it.
-.
-So in
-.IR groff ,
-the
-.I man
-macro package may be specified as on of the following four methods:
-.
-.IP
-.Shell_cmd "groff\~\-m\~man"
-.Shell_cmd "groff\~\-man"
-.Shell_cmd "groff\~\-mman"
-.Shell_cmd "groff\~\-m\~an"
-.
-.
-.P
-Recent packages that do not start with
-.'char m
-do not use an additional
-.'char m
-in the documentation.
-.
-For example, the
-.I www
-macro package may be specified only as one of the two methods:
-.
-.IP
-.Shell_cmd "groff\~\-m\~www"
-.Shell_cmd "groff\~\-mwww"
-.
-.
-.P
-Obviously, variants like
-.I -mmwww
-would not make much sense.
-.
-.
-.P
-A second strange feature of classical troff was to name macro files
-according to
-.BIR tmac. name .
-In modern operating systems, the type of a file is specified as
-postfix, the file name extension.
-.
-Again, groff copes with this situation by searching both
-.IB anything .tmac
-and
-.BI tmac. anything
-if only
-.I anything
-is specified.
-.
-.
-.P
-The easiest way to find out which macro packages are available on a
-system is to check the man\~page
-.BR groff (@MAN1EXT@),
-or the contents of the
-.I tmac
-directories.
-.
-.
-.P
-In
-.IR groff ,
-most macro packages are described in\~man pages called
-.BR groff_\f[I]name\f[] (@MAN7EXT@),
-with a leading
-.'char m
-for the classical packages.
-.
-.
-.\" --------------------------------------------------------------------
-.SH INCLUSION
-.\" --------------------------------------------------------------------
-.
-There are several ways to use a macro package in a document.
-.
-The classical way is to specify the troff/groff option
-.option \-m
-.argument name
-at run-time; this makes the contents of the macro package
-.I name
-available.
-.
-In groff, the file
-.IB name .tmac
-is searched within the tmac path; if not found,
-.BI tmac. name
-will be searched for instead.
-.
-.
-.P
-Alternatively, it is also possible to include a macro file by adding
-the request
-.request so
-.I filename
-into the document; the argument must be the full file name of an
-existing file, possibly with the directory where it is kept.
-.
-In groff, this was improved by the similar request
-.request mso
-.IR package ,
-which added searching in the tmac path, just like option
-.option -m
-does.
-.
-.
-.P
-Note that in order to resolve the
-.request so
-and
-.request mso
-requests, the roff preprocessor
-.BR soelim (@MAN1EXT@)
-must be called if the files to be included need preprocessing.
-.
-This can be done either directly by a pipeline on the command line or
-by using the troff/groff option
-.option \-s .
-.
-.I man
-calls soelim automatically.
-.
-.
-.P
-For example, suppose a macro file is stored as
-.I @MACRODIR@/macros.tmac
-and is used in some document called
-.IR docu.roff .
-.
-.
-.P
-At run-time, the formatter call for this is
-.
-.IP
-.Shell_cmd "groff\~\-m\~" "macrofile\~document.roff"
-.
-.
-.P
-To include the macro file directly in the document either
-.
-.IP
-.Example
-. Text .mso macrofile.tmac
-./Example
-.
-.P
-is used or
-.
-.IP
-.Example
-. Text .so @MACRODIR@/macros.tmac
-./Example
-.
-.
-.P
-In both cases, the formatter is called with
-.IP
-.Shell_cmd "groff\~\-s\~" docu.roff
-.
-.
-.P
-If you want to write your own groff macro file, call it
-.IB whatever .tmac
-and put it in some directory of the tmac path, see section
-.BR FILES .
-Then documents can include it with the
-.request mso
-request or the option
-.option -m .
-.
-.
-.ig
-.\" --------------------------------------------------------------------
-.SH CONVENTION
-.\" --------------------------------------------------------------------
-.
-.\" This section does not fit into the framework of this document.
-.
-There is a convention that is supported by many modern roff
-type-setters and
-.BR man (1)
-programs, the
-.I preprocessor word
-described in the following.
-.
-.P
-If the first line in a document is a comment, the first word (after the
-comment characters and a blank) constitutes the
-.B preprocessor
-.BR word .
-That means that the letters of this word are interpreted as
-abbreviations for those preprocessor commands that should be run
-when formatting the document.
-.
-Mostly, only the letters corresponding to the options for the
-preprocessors are recognized,
-.'char e
-(for
-.BR eqn ),
-.\" 'char G ,
-.\" 'char g ,
-.'char p ,
-(for
-.BR pic ),
-.'char R
-(for
-.BR refer ),
-.'char s
-(for
-.BR soelim ),
-and
-.'char t
-(for
-.BR tbl ).
-(see
-.BR roff (@MAN7EXT@)).
-.
-.
-.P
-Besides being a good reminder for the user, some formatters (like the
-.BR man (1)
-program) are even able to automatically start the preprocessors
-specified in the preprocessor word, but do not bet on this.
-.
-.
-.P
-The
-.I man
-program handles some preprocessors automatically, such that in
-man\~pages only the following characters should be used:
-.'char e ,
-.'char p ,
-and
-.'char t .
-.
-.
-..
-.\" --------------------------------------------------------------------
-.SH "WRITING MACROS"
-.\" --------------------------------------------------------------------
-.
-A
-.BR roff (@MAN7EXT@)
-document is a text file that is enriched by predefined formatting
-constructs, such as requests, escape sequences, strings, numeric
-registers, and macros from a macro package.
-.
-These elements are described in
-.BR roff (@MAN7EXT@).
-.
-.
-.P
-To give a document a personal style, it is most useful to extend the
-existing elements by defining some macros for repeating tasks; the best
-place for this is near the beginning of the document or in a separate
-file.
-.
-.
-.P
-Macros without arguments are just like strings.
-.
-But the full power of macros reveals when arguments are passed with a
-macro call.
-.
-Within the macro definition, the arguments are available as the escape
-sequences
-.BR $1 ,
-\*[Ellipsis],
-.BR $9 ,
-.BR $[ \*[Ellipsis] ] ,
-.BR $* ,
-and
-.BR $@ ,
-the name under which the macro was called is in
-.BR $0 ,
-and the number of arguments is in register
-.BR \n[.$] ;
-see
-.BR groff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Copy-in Mode"
-.\" --------------------------------------------------------------------
-.
-The phase when groff reads a macro is called
-.I "copy-in mode"
-in roff-talk.
-.
-This is comparable to the C\~preprocessing phase during the development
-of a program written in the C\~language.
-.
-.
-.P
-In this phase, groff interprets all backslashes; that means that all
-escape sequences in the macro body are interpreted and replaced by
-their value.
-.
-For constant expression, this is wanted, but strings and registers
-that might change between calls of the macro must be protected from
-being evaluated.
-.
-This is most easily done by doubling the backslash that introduces the
-escape sequence.
-.
-This doubling is most important for the positional parameters.
-.
-For example, to print information on the arguments that were passed to
-the macro to the terminal, define a macro named `.print_args',
-say.
-.
-.
-.P
-.ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\"
-.ds @2 arguments:\"
-.Example
-. Text .ds midpart was called with
-. Text .de print_args
-. Text .\~\~tm\~\*[@1]\~\[rs]\[rs]*[midpart]\~\[rs]\[rs]n[.$]\~\*[@2]
-. Text .\~\~tm\~\[rs]\[rs]$*
-. Text ..
-./Example
-.rm @1
-.rm @2
-.
-.
-.P
-When calling this macro by
-.
-.P
-.Example
-. Text .print_args arg1 arg2
-./Example
-.
-.P
-the following text is printed to the terminal:
-.
-.P
-.Example
-. Text \f[CI]print_args\f[] was called with the following 2 arguments:
-arg1 arg2
-./Example
-.
-.
-.P
-Let's analyze each backslash in the macro definition.
-.
-As the positional parameters and the number of arguments will change
-with each call of the macro their leading backslash must be doubled,
-which results in
-.I \[rs]\[rs]$*
-and
-.IR \[rs]\[rs][.$] .
-The same applies to the macro name because it could be called with an
-alias name, so
-.IR \[rs]\[rs]$0 .
-.
-.
-.P
-On the other hand,
-.I midpart
-is a constant string, it will not change, so no doubling for
-.IR \[rs]*[midpart] .
-The
-.I \[rs]f
-escape sequences are predefined groff elements for setting the font
-within the text.
-.
-Of course, this behavior will not change, so no doubling with
-.I \[rs]f[I]
-and
-.IR \[rs]f[] .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Draft Mode"
-.\" --------------------------------------------------------------------
-.
-Writing groff macros is easy when the escaping mechanism is temporarily
-disabled.
-.
-In groff, this is done by enclosing the macro definition(s) into a
-pair of
-.B .eo
-and
-.B .ec
-requests.
-.
-Then the body in the macro definition is just like a normal part of
-the document \[em] text enhanced by calls of requests, macros,
-strings, registers, etc.
-.
-For example, the code above can be written in a simpler way by
-.
-.
-.P
-.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\"
-.ds @2 arguments:\"
-.Example
-. Text .eo
-. Text .ds midpart was called with
-. Text .de print_args
-. Text .\~\~tm\~\*[@1]\~\[rs]*[midpart]\~\[rs]n[.$]\~\*[@2]
-. Text .\~\~tm\~\[rs]$*
-. Text ..
-. Text .ec
-./Example
-.rm @1
-.rm @2
-.
-.
-.P
-Unfortunately, draft mode cannot be used universally.
-.
-Although it is good enough for defining normal macros, draft mode
-will fail with advanced applications, such as indirectly defined
-strings, registers, etc.
-.
-An optimal way is to define and test all macros in draft mode and then
-do the backslash doubling as a final step; do not forget to remove the
-.I .eo
-request.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Tips for Macro Definitions"
-.\" --------------------------------------------------------------------
-.
-.Topic
-Start every line with a dot, for example, by using the groff request
-.B .nop
-for text lines, or write your own macro that handles also text lines
-with a leading dot.
-.
-.IP
-.Example
-. Text .de Text
-. Text .\~\~if (\[rs]\[rs]n[.$] == 0)\~\[rs]
-. Text .\~\~\~\~return
-. Text .\~nop\~\[rs])\[rs]\[rs]$*[rs]\)
-. Text ..
-./Example
-.
-.Topic
-Write a comment macro that works both for copy-in and draft mode; for
-as escaping is off in draft mode, trouble might occur when normal
-comments are used.
-.
-For example, the following macro just ignores its arguments, so it
-acts like a comment line:
-.
-.IP
-.Example
-. Text .de\~c
-. Text ..
-. Text .c\~This\~is\~like\~a\~comment\~line.
-./Example
-.
-.Topic
-In long macro definitions, make ample use of comment lines or empty
-lines for a better structuring.
-.
-.Topic
-To increase readability, use groff's indentation facility for requests
-and macro calls (arbitrary whitespace after the leading dot).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Diversions"
-.\" --------------------------------------------------------------------
-.
-Diversions can be used to realize quite advanced programming
-constructs.
-.
-They are comparable to pointers to large data structures in the
-C\~programming language, but their usage is quite different.
-.
-.
-.P
-In their simplest form, diversions are multi-line strings, but
-they get their power when diversions are used dynamically within macros.
-.
-The information stored in a diversion can be retrieved by calling the
-diversion just like a macro.
-.
-.
-.P
-Most of the problems arising with diversions can be avoided if you are
-conscious about the fact that diversions always deal with complete
-lines.
-.
-If diversions are used when the line buffer has not been flashed,
-strange results are produced; not knowing this, many people get
-desperate about diversions.
-.
-To ensure that a diversion works, line breaks should be added at the
-right places.
-.
-To be on the secure side, enclose everything that has to do with
-diversions into a pair of line breaks; for example, by amply using
-.B .br
-requests.
-.
-This rule should be applied to diversion definition, both inside and
-outside, and to all calls of diversions.
-.
-This is a bit of overkill, but it works nicely.
-.
-.
-.P
-[If you really need diversions which should ignore the current partial
-line, use environments to save the current partial line and/\:or use the
-.B .box
-request.]
-.
-.
-.P
-The most powerful feature using diversions is to start a diversion
-within a macro definition and end it within another macro.
-.
-Then everything between each call of this macro pair is stored within
-the diversion and can be manipulated from within the macros.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-All macro names must be named
-.IB name .tmac
-to fully use the tmac mechanism.
-.
-.BI tmac. name
-as with classical packages is possible as well, but deprecated.
-.
-.
-.P
-The macro files are kept in the
-.IR "tmac directories" ;
-a colon separated list of these constitutes the
-.IR "tmac path" .
-.
-.
-.P
-The search sequence for macro files is (in that order):
-.
-.Topic
-the directories specified with troff/groff's
-.B \-M
-command line option
-.
-.Topic
-the directories given in the
-.Env_var $GROFF_TMAC_PATH
-environment variable
-.
-.Topic
-the current directory (only if in unsafe mode, which is enabled by the
-.B \-U
-command line switch)
-.
-.Topic
-the home directory
-.
-.Topic
-a platform-specific directory, being
-.B @SYSTEMMACRODIR@
-in this installation
-.
-.Topic
-a site-specific (platform-independent) directory, being
-.B @LOCALMACRODIR@
-in this installation
-.
-.Topic
-the main tmac directory, being
-.B @MACRODIR@
-in this installation
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.Env_var $GROFF_TMAC_PATH
-A colon separated list of additional tmac directories in which to search
-for macro files.
-.
-See the previous section for a detailed description.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHOR
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.MTO bwarken@mayn.de "Bernd Warken" ;
-it is maintained by
-.MTO wl@gnu.org "Werner Lemberg" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-A complete reference for all parts of the groff system is found in the
-groff
-.BR info (1)
-file.
-.
-.
-.TP
-.BR groff (@MAN1EXT@)
-an overview of the groff system.
-.
-.
-.TP
-.BR groff_man (@MAN7EXT@),
-.TP+
-.BR groff_mdoc (@MAN7EXT@),
-.TP+
-.BR groff_me (@MAN7EXT@),
-.TP+
-.BR groff_mm (@MAN7EXT@),
-.TP+
-.BR groff_mom (@MAN7EXT@),
-.TP+
-.BR groff_ms (@MAN7EXT@),
-.TP+
-.BR groff_trace (@MAN7EXT@),
-.TP+
-.BR groff_www (@MAN7EXT@).
-the groff tmac macro packages.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-the groff language.
-.
-.
-.P
-The Filesystem Hierarchy Standard is available at the
-.URL http://\:www.pathname.com/\:fhs/ "FHS web site" .
-.
-.cp \n[groff_tmac_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/man/roff.man b/contrib/groff/man/roff.man
deleted file mode 100644
index 50cde7b61ed0..000000000000
--- a/contrib/groff/man/roff.man
+++ /dev/null
@@ -1,1278 +0,0 @@
-.ig
-roff.man
-
-Last update: 1 Jun 2004
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de>
-maintained by Werner Lemberg <wl@gnu.org>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr roff_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \{\
-. ftr CB CW
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.\" String definitions
-.
-.\" Final `\""' comments are used to make Emacs happy, sic \""
-.
-.\" The `-' sign for options.
-.ie t \{\
-. ds @- \-\"
-. ds @-- \-\-\"
-.\}
-.el \{\
-. ds @- -\"
-. ds @-- --\"
-.\}
-.
-.ds Comment \.\[rs]\[dq]\"
-.ds Ellipsis \.\|.\|.\&\"
-.
-.
-.\" --------------------------------------------------------------------
-.\" Begin of macro definitions
-.
-.de c
-.\" this is like a comment request when escape mechanism is off
-..
-.
-.eo
-.
-.c ---------------------------------------------------------------------
-.
-.de Text
-. nop \)\$*
-..
-.
-.de CodeSkip
-. ie t \
-. sp 0.2v
-. el \
-. sp
-..
-.
-.de Esc
-. ds @1 \$1\"
-. shift
-. Text \f[B]\[rs]\*[@1]\f[]\$*
-. rm @1
-..
-.
-.de QuotedChar
-. ds @1 \$1
-. shift
-. nop `\f[B]\*[@1]\f[]'\$*
-. rm @1
-..
-.
-.c --------------------------------------------------------------------
-.
-.c a shell command line
-.de ShellCommand
-. br
-. ad l
-. nh
-. Text \f[I]sh#\h'1m'\f[]\f[CR]\$*\f[]\&\"
-. ft R
-. ft P
-. hy
-. ad
-..
-.
-.c --------------------------------------------------------------------
-.
-.c ShortOpt ([c [punct]])
-.c
-.c `-c' somewhere in the text.
-.c The second argument is some trailing punctuation.
-.c
-.de ShortOpt
-. ds @1 \$1\"
-. shift
-. nh
-. Text \f[CB]\*[@-]\f[]\f[B]\*[@1]\f[]\/\$*
-. hy
-. rm @1
-..
-.
-.de TP+
-. br
-. ns
-. TP \$1
-..
-.
-.c --------------------------------------------------------------------
-.
-.c Topic
-.c
-.de Topic
-. TP 2m
-. Text \[bu]
-..
-.
-.ec
-.\" End of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH ROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-roff \- concepts and history of roff typesetting
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.I roff
-is the general name for a set of type-setting programs, known under
-names like
-.IR troff ,
-.IR nroff ,
-.IR ditroff ,
-.IR groff ,
-etc.
-.
-A roff type-setting system consists of an extensible text formatting
-language and a set of programs for printing and converting to other
-text formats.
-.
-Traditionally, it is the main text processing system of Unix; every
-Unix-like operating system still distributes a roff system as a core
-package.
-.
-.P
-The most common roff system today is the free software implementation
-.IR "GNU roff",
-.BR groff (@MAN1EXT@).
-.
-The pre-groff implementations are referred to as
-.I classical
-(dating back as long as 1973).
-.
-.I groff
-implements the look-and-feel and functionality of its classical
-ancestors, but has many extensions.
-.
-As
-.I groff
-is the only roff system that is available for every (or almost every)
-computer system it is the de-facto roff standard today.
-.
-.P
-In some ancient Unix systems, there was a binary called
-.B roff
-that implemented the even more ancient
-.B runoff
-of the
-.I Multics
-operating system, cf. section
-.BR HISTORY .
-The functionality of this program was very restricted even in
-comparison to ancient troff; it is not supported any longer.
-.
-Consequently, in this document, the term
-.I roff
-always refers to the general meaning of
-.IR "roff system" ,
-not to the ancient roff binary.
-.
-.P
-In spite of its age, roff is in wide use today, for example, the manual
-pages on UNIX systems
-.RI ( man\~pages\/ ),
-many software books, system documentation, standards, and corporate
-documents are written in roff.
-.
-The roff output for text devices is still unmatched, and its graphical
-output has the same quality as other free type-setting programs and is
-better than some of the commercial systems.
-.
-.P
-The most popular application of roff is the concept of
-.I manual pages
-or shortly
-.IR "man pages" ;
-this is the standard documentation system on many operating systems.
-.
-.P
-This document describes the historical facts around the development
-of the
-.IR "roff system" ;
-some usage aspects common to all roff versions, details on the roff
-pipeline, which is usually hidden behind front-ends like
-.BR groff (@MAN1EXT@);
-an general overview of the formatting language; some tips for editing
-roff files; and many pointers to further readings.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "HISTORY"
-.\" --------------------------------------------------------------------
-.
-The
-.I roff
-text processing system has a very long history, dating back to the
-1960s.
-.
-The roff system itself is intimately connected to the Unix operating
-system, but its roots go back to the earlier operating systems CTSS
-and Multics.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The Predecessor runoff"
-.\" --------------------------------------------------------------------
-.
-.P
-The evolution of
-.I roff
-is intimately related to the history of the operating systems.
-.
-Its predecessor
-.B runoff
-was written by
-.I Jerry Saltzer
-on the
-.I CTSS
-operating system
-.RI ( "Compatible Time Sharing System" )
-as early as 1961.
-.
-When CTSS was further developed into the operating system
-.URL http://\:www.multicians.org "Multics" ,
-the famous predecessor of Unix from 1963,
-.I runoff
-became the main format for documentation and text processing.
-.
-Both operating systems could only be run on very expensive computers
-at that time, so they were mostly used in research and for official
-and military tasks.
-.
-.P
-The possibilities of the
-.I runoff
-language were quite limited as compared to modern roff.
-.
-Only text output was possible in the 1960s.
-.
-This could be implemented by a set of requests of length\~2, many of
-which are still identically used in roff.
-.
-The language was modelled according to the habits of typesetting in
-the pre-computer age, where lines starting with a dot were used in
-manuscripts to denote formatting requests to the person who would
-perform the typesetting manually later on.
-.
-.P
-The runoff program was written in the
-.I PL/1
-language first, later on in
-.IR BCPL ,
-the grandmother of the
-.IR C \~\c
-programming language.
-.
-In the Multics operating system, the help system was handled by
-runoff, similar to roff's task to manage the Unix manual pages.
-.
-There are still documents written in the runoff language; for examples
-see Saltzer's home page, cf. section
-.BR "SEE ALSO" .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The Classical nroff/troff System"
-.\" --------------------------------------------------------------------
-.
-In the 1970s, the Multics off-spring
-.I Unix
-became more and more popular because it could be run on affordable
-machines and was easily available for universities at that time.
-.
-At MIT (the Massachusetts Institute of Technology), there was a need to
-drive the Wang
-.I Graphic Systems CAT
-typesetter, a graphical output device from a PDP-11 computer running
-Unix.
-.
-As runoff was too limited for this task it was further developed into
-a more powerful text formatting system by
-.IR "Josef F. Osanna" ,
-a main developer of the Multics operating system and programmer of
-several runoff ports.
-.
-.P
-The name
-.I runoff
-was shortened to
-.IR roff .
-The greatly enlarged language of Osanna's concept included already all
-elements of a full
-.IR "roff system" .
-.
-All modern roff systems try to implement compatibility to this system.
-.
-So Joe Osanna can be called the father of all roff systems.
-.
-.P
-This first
-.I roff system
-had three formatter programs.
-.
-.TP
-.B troff
-.RI ( "typesetter roff\/" )
-generated a graphical output for the
-.I CAT
-typesetter as its only device.
-.
-.TP
-.B nroff
-produced text output suitable for terminals and line printers.
-.
-.TP
-.B roff
-was the reimplementation of the former runoff program with its limited
-features; this program was abandoned in later versions.
-.
-Today, the name
-.I roff
-is used to refer to a troff/\:nroff sytem as a whole.
-.
-.P
-Osanna first version was written in the PDP-11 assembly language and
-released in 1973.
-.
-.I Brian Kernighan
-joined the
-.I roff
-development by rewriting it in the C\~programming language.
-.
-The C\~version was released in 1975.
-.
-.P
-The syntax of the formatting language of the
-.BR nroff / troff
-programs was documented in the famous
-.IR "Troff User's Manual [CSTR\~#54]" ,
-first published in 1976, with further revisions up to 1992 by Brian
-Kernighan.
-.
-This document is the specification of the
-.IR "classical troff" .
-All later
-.I roff
-systems tried to establish compatibility with this specification.
-.
-.P
-After Osanna had died in 1977 by a heart-attack at the age of about\~50,
-Kernighan went on with developing troff.
-.
-The next milestone was to equip troff with a general interface to
-support more devices, the intermediate output format and the
-postprocessor system.
-.
-This completed the structure of a
-.I "roff system"
-as it is still in use today; see section
-.BR "USING ROFF" .
-.
-In 1979, these novelties were described in the paper
-.IR "[CSTR\~#97]" .
-This new troff version is the basis for all existing newer troff
-systems, including
-.IR groff .
-.
-On some systems, this
-.I device independent troff
-got a binary of its own, called
-.BR ditroff (@MAN7EXT@).
-.
-All modern
-.B troff
-programs already provide the full ditroff capabilities automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Commercialization"
-.\" --------------------------------------------------------------------
-.
-A major degradation occurred when the easily available Unix\~7
-operating system was commercialized.
-.
-A whole bunch of divergent operating systems emerged, fighting each
-other with incompatibilities in their extensions.
-.
-Luckily, the incompatibilities did not fight the original troff.
-.
-All of the different commercial roff systems made heavy use of
-Osanna/\:Kernighan's open source code and documentation, but sold them
-as \[lq]their\[rq] system \[em] with only minor additions.
-.
-.P
-The source code of both the ancient Unix and classical troff weren't
-available for two decades.
-.
-Fortunately, Caldera bought SCO UNIX in 2001.
-.
-In the following, Caldera made the ancient source code accessible
-on-line for non-commercial use, cf. section
-.BR "SEE ALSO" .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Free roff"
-.\" --------------------------------------------------------------------
-.
-None of the commercial roff systems could attain the status of a
-successor for the general roff development.
-.
-Everyone was only interested in their own stuff.
-.
-This led to a steep downfall of the once excellent
-Unix operating system during the 1980s.
-.
-.P
-As a counter-measure to the galopping commercialization, AT&T Bell
-Labs tried to launch a rescue project with their
-.I Plan\~9
-operating system.
-.
-It is freely available for non-commercial use, even the source code,
-but has a proprietary license that impedes the free development.
-.
-This concept is outdated, so Plan\~9 was not accepted as a platform to
-bundle the main-stream development.
-.
-.P
-The only remedy came from the emerging free operatings systems
-(386BSD, GNU/\:Linux, etc.) and software projects during the 1980s and
-1990s.
-.
-These implemented the ancient Unix features and many extensions, such
-that the old experience is not lost.
-.
-In the 21st century, Unix-like systems are again a major factor in
-computer industry \[em] thanks to free software.
-.
-.P
-The most important free roff project was the GNU port of troff,
-created by James Clark and put under the
-.URL http://\:www.gnu.org/\:copyleft "GNU Public License" .
-.
-It was called
-.I groff
-.RI ( "GNU roff" ).
-See
-.BR groff (@MAN1EXT@)
-for an overview.
-.
-.P
-The groff system is still actively developed.
-.
-It is compatible to the classical troff, but many extensions were
-added.
-.
-It is the first roff system that is available on almost all operating
-systems \[em] and it is free.
-.
-This makes groff the de-facto roff standard today.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "USING ROFF"
-.\" --------------------------------------------------------------------
-.
-Most people won't even notice that they are actually using roff.
-.
-When you read a system manual page (man page) roff is working in the
-background.
-.
-Roff documents can be viewed with a native viewer called
-.BR \%xditview (1x),
-a standard program of the X window distribution, see
-.BR X (7x).
-.
-But using roff explicitly isn't difficult either.
-.
-.P
-Some roff implementations provide wrapper programs that make it easy
-to use the roff system on the shell command line.
-.
-For example, the GNU roff implementation
-.BR groff (@MAN1EXT@)
-provides command line options to avoid the long command pipes of
-classical troff; a program
-.BR grog (@MAN1EXT@)
-tries to guess from the document which arguments should be used for a
-run of groff; people who do not like specifying command line options
-should try the
-.BR groffer (@MAN1EXT@)
-program for graphically displaying groff files and man pages.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The roff Pipe"
-.\" --------------------------------------------------------------------
-.
-Each roff system consists of preprocessors, roff formatter programs,
-and a set of device postprocessors.
-.
-This concept makes heavy use of the
-.I piping
-mechanism, that is, a series of programs is called one after the other,
-where the output of each program in the queue is taken as the input
-for the next program.
-.
-.CodeSkip
-.
-.ds @1 "cat \f[I]file\f[P] |\""
-.ds @2 "\*[Ellipsis] | \f[I]preproc\f[P] | \*[Ellipsis] |\""
-.ds @3 "troff \f[I]options\f[P] | \f[I]postproc\f[P]\""
-.
-.ShellCommand "\*[@1] \*[@2] \*[@3]"
-.
-.rm @1
-.rm @2
-.rm @3
-.P
-The preprocessors generate roff code that is fed into a roff formatter
-(e.g. troff), which in turn generates
-.I intermediate output
-that is fed into a device postprocessor program for printing or final
-output.
-.
-.P
-All of these parts use programming languages of their own; each
-language is totally unrelated to the other parts.
-.
-Moreover, roff macro packages that were tailored for special purposes
-can be included.
-.
-.P
-Most roff documents use the macros of some package, intermixed with
-code for one or more preprocessors, spiced with some elements from the
-plain roff language.
-.
-The full power of the roff formatting language is seldom needed by
-users; only programmers of macro packages need to know about the gory
-details.
-.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Preprocessors"
-.\" --------------------------------------------------------------------
-.
-A roff preprocessor is any program that generates output that
-syntactically obeys the rules of the roff formatting language.
-.
-Each preprocessor defines a language of its own that is translated
-into roff code when run through the preprocessor program.
-.
-Parts written in these languages may be included within a roff
-document; they are identified by special roff requests or macros.
-.
-Each document that is enhanced by preprocessor code must be run
-through all corresponding preprocessors before it is fed into the
-actual roff formatter program, for the formatter just ignores all
-alien code.
-.
-The preprocessor programs extract and transform only the document
-parts that are determined for them.
-.
-.P
-There are a lot of free and commercial roff preprocessors.
-.
-Some of them aren't available on each system, but there is a small
-set of preprocessors that are considered as an integral part of each
-roff system.
-.
-The classical preprocessors are
-.
-
-.de @TP
-.\" local indent for .TP
-.TP \\w'\\f[B]soelim\\f[P]'u+2n
-..
-.P
-.RS
-.PD 0
-.@TP
-.B tbl
-for tables
-.@TP
-.B eqn
-for mathematical formul\[ae]
-.@TP
-.B pic
-for drawing diagrams
-.@TP
-.B refer
-for bibliographic references
-.@TP
-.B soelim
-for including macro files from standard locations
-.PD
-.RE
-.
-.P
-Other known preprocessors that are not available on all systems
-include
-.
-.P
-.RS
-.PD 0
-.@TP
-.B chem
-for drawing chemical formul\[ae].
-.@TP
-.B grap
-for constructing graphical elements.
-.@TP
-.B grn
-for including
-.BR gremlin (1)
-pictures.
-.PD
-.RE
-.
-.rm @TP
-.
-.\" --------------------------------------------------------------------
-.SS "Formatter Programs"
-.\" --------------------------------------------------------------------
-.
-A
-.I roff formatter
-is a program that parses documents written in the roff formatting
-language or uses some of the roff macro packages.
-.
-It generates
-.IR "intermediate output" ,
-which is intended to be fed into a single device postprocessor that
-must be specified by a command-line option to the formatter program.
-.
-The documents must have been run through all necessary preprocessors
-before.
-.
-.P
-The output produced by a roff formatter is represented in yet another
-language, the
-.IR "intermediate output format"
-or
-.IR "troff output" .
-This language was first specified in
-.IR "[CSTR\~#97]" ;
-its GNU extension is documented in
-.BR groff_out (@MAN5EXT@).
-.
-The intermediate output language is a kind of assembly language
-compared to the high-level roff language.
-.
-The generated intermediate output is optimized for a special device,
-but the language is the same for every device.
-.
-.P
-The roff formatter is the heart of the roff system.
-.
-The traditional roff had two formatters,
-.B nroff
-for text devices and
-.B troff
-for graphical devices.
-.
-.P
-Often, the name
-.I troff
-is used as a general term to refer to both formatters.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Devices and Postprocessors"
-.\" --------------------------------------------------------------------
-.
-Devices are hardware interfaces like printers, text or graphical
-terminals, etc., or software interfaces such as a conversion into a
-different text or graphical format.
-.
-.P
-A roff postprocessor is a program that transforms troff output into a
-form suitable for a special device.
-.
-The roff postprocessors are like device drivers for the output target.
-.
-.P
-For each device there is a postprocessor program that fits the device
-optimally.
-.
-The postprocessor parses the generated intermediate output and
-generates device-specific code that is sent directly to the device.
-.
-.P
-The names of the devices and the postprocessor programs are not fixed
-because they greatly depend on the software and hardware abilities of
-the actual computer.
-.
-For example, the classical devices mentioned in
-.I [CSTR\~#54]
-have greatly changed since the classical times.
-.
-The old hardware doesn't exist any longer and the old graphical
-conversions were quite imprecise when compared to their modern
-counterparts.
-.
-.P
-For example, the Postscript device
-.I post
-in classical troff had a resolution
-of 720, while groff's
-.I ps
-device has 72000, a refinement of factor 100.
-.
-.P
-Today the operating systems provide device drivers for most
-printer-like hardware, so it isn't necessary to write a special
-hardware postprocessor for each printer.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ROFF PROGRAMMING"
-.\" --------------------------------------------------------------------
-.
-Documents using roff are normal text files decorated by roff
-formatting elements.
-.
-The roff formatting language is quite powerful; it is almost a full
-programming language and provides elements to enlarge the language.
-.
-With these, it became possible to develop macro packages that are
-tailored for special applications.
-.
-Such macro packages are much handier than plain roff.
-.
-So most people will choose a macro package without worrying about the
-internals of the roff language.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Macro Packages"
-.\" --------------------------------------------------------------------
-.
-Macro packages are collections of macros that are suitable to format a
-special kind of documents in a convenient way.
-.
-This greatly eases the usage of roff.
-.
-The macro definitions of a package are kept in a file called
-.IB name .tmac
-(classically
-.BI tmac. name\c
-).
-.
-All tmac files are stored in one or more directories at standardized
-positions.
-.
-Details on the naming of macro packages and their placement is found
-in
-.BR groff_tmac (@MAN5EXT@).
-.
-.P
-A macro package that is to be used in a document can be announced to
-the formatter by the command line option
-.ShortOpt m ,
-see
-.BR troff (@MAN1EXT@),
-or it can be specified within a document using the file inclusion
-requests of the roff language, see
-.BR groff (@MAN7EXT@).
-.
-.P
-Famous classical macro packages are
-.I man
-for traditional man pages,
-.I mdoc
-for BSD-style manual pages;
-the macro sets for books, articles, and letters are
-.I me
-(probably from the first name of its creator
-.I Eric
-Allman),
-.I ms
-(from
-.IR "Manuscript Macros\/" ),
-and
-.I mm
-(from
-.IR "Memorandum Macros\/" ).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The roff Formatting Language"
-.\" --------------------------------------------------------------------
-.
-The classical roff formatting language is documented in the
-.I Troff User's Manual
-.IR "[CSTR\~#54]" .
-.
-The roff language is a full programming language providing requests,
-definition of macros, escape sequences, string variables, number or
-size registers, and flow controls.
-.
-.P
-.I Requests
-are the predefined basic formatting commands similar to the commands
-at the shell prompt.
-.
-The user can define request-like elements using predefined roff
-elements.
-.
-These are then called
-.IR macros .
-.
-A document writer will not note any difference in usage for requests
-or macros; both are written on a line on their own starting with a dot.
-.
-.P
-.I Escape sequences
-are roff elements starting with a backslash
-.QuotedChar \[rs] .
-They can be inserted anywhere, also in the midst of text in a line.
-.
-They are used to implement various features, including the insertion of
-non-ASCII characters with
-.Esc ( ,
-font changes with
-.Esc f ,
-in-line comments with
-.Esc \[dq] ,
-the escaping of special control characters like
-.Esc \[rs] ,
-and many other features.
-.
-.P
-.I Strings
-are variables that can store a string.
-.
-A string is stored by the
-.B .ds
-request.
-.
-The stored string can be retrieved later by the
-.B \[rs]*
-escape sequence.
-.
-.P
-.I Registers
-store numbers and sizes.
-.
-A register can be set with the request
-.B .nr
-and its value can be retrieved by the escape sequence
-.BR "\[rs]n" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FILE NAME EXTENSIONS"
-.\" --------------------------------------------------------------------
-.
-Manual pages (man pages) take the section number as a file name
-extension, e.g., the filename for this document is
-.IR roff.7 ,
-i.e., it is kept in section\~7
-of the man pages.
-.
-.P
-The classical macro packages take the package name as an extension, e.g.
-.IB file. me
-for a document using the
-.I me
-macro package,
-.IB file. mm
-for
-.IR mm ,
-.IB file. ms
-for
-.IR ms ,
-.IB file. pic
-for
-.I pic
-files,
-etc.
-.
-.P
-But there is no general naming scheme for roff documents, though
-.IB file. tr
-for
-.I troff file
-is seen now and then.
-.
-Maybe there should be a standardization for the filename extensions of
-roff files.
-.
-.P
-File name extensions can be very handy in conjunction with the
-.BR less (1)
-pager.
-.
-It provides the possibility to feed all input into a command-line pipe
-that is specified in the shell environment variable
-.BR LESSOPEN .
-This process is not well documented, so here an example:
-.
-.CodeSkip
-.ShellCommand LESSOPEN='|lesspipe %s'
-.CodeSkip
-.
-where
-.B lesspipe
-is either a system supplied command or a shell script of your own.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EDITING ROFF"
-.\" --------------------------------------------------------------------
-.
-The best program for editing a roff document is Emacs (or Xemacs), see
-.BR emacs (1).
-It provides an
-.I nroff
-mode that is suitable for all kinds of roff dialects.
-.
-This mode can be activated by the following methods.
-.
-.P
-When editing a file within Emacs the mode can be changed by typing
-.RI ` "M-x nroff-mode" ',
-where
-.B M-x
-means to hold down the
-.B Meta
-key (or
-.BR Alt )
-and hitting the
-.BR x\~ key
-at the same time.
-.
-.P
-But it is also possible to have the mode automatically selected when
-the file is loaded into the editor.
-.
-.Topic
-The most general method is to include the following 3 comment lines at
-the end of the file.
-.
-.CodeSkip
-.nf
-.B \*[Comment] Local Variables:
-.B \*[Comment] mode: nroff
-.B \*[Comment] End:
-.fi
-.
-.Topic
-There is a set of file name extensions, e.g. the man pages that
-trigger the automatic activation of the nroff mode.
-.
-.Topic
-Theoretically, it is possible to write the sequence
-.CodeSkip
-.B \*[Comment] \%-*-\ nroff\ -*-
-.CodeSkip
-as the first line of a file to have it started in nroff mode when
-loaded.
-.
-Unfortunately, some applications such as the
-.B man
-program are confused by this; so this is deprecated.
-.
-.P
-All roff formatters provide automated line breaks and horizontal and
-vertical spacing.
-.
-In order to not disturb this, the following tips can be helpful.
-.
-.Topic
-Never include empty or blank lines in a roff document.
-.
-Instead, use the empty request (a line consisting of a dot only) or a
-line comment
-.B \*[Comment]
-if a structuring element is needed.
-.
-.Topic
-Never start a line with whitespace because this can lead to
-unexpected behavior.
-.
-Indented paragraphs can be constructed in a controlled way by roff
-requests.
-.
-.Topic
-Start each sentence on a line of its own, for the spacing after a dot
-is handled differently depending on whether it terminates an
-abbreviation or a sentence.
-.
-To distinguish both cases, do a line break after each sentence.
-.
-.Topic
-To additionally use the auto-fill mode in Emacs, it is best to insert
-an empty roff request (a line consisting of a dot only) after each
-sentence.
-.
-.P
-The following example shows how optimal roff editing could look.
-.
-.IP
-.nf
-This is an example for a roff document.
-.Text .
-This is the next sentence in the same paragraph.
-.Text .
-This is a longer sentence stretching over several
-lines; abbreviations like `cf.' are easily
-identified because the dot is not followed by a
-line break.
-.Text .
-In the output, this will still go to the same
-paragraph.
-.fi
-.
-.P
-Besides Emacs, some other editors provide nroff style files too, e.g.\&
-.BR vim (1),
-an extension of the
-.BR vi (1)
-program.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.I UNIX\[rg]
-is a registered trademark of the Open Group.
-.
-But things have improved considerably after Caldera had bought SCO
-UNIX in 2001.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-There is a lot of documentation on roff.
-.
-The original papers on classical troff are still available, and all
-aspects of groff are documented in great detail.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Internet sites"
-.\" --------------------------------------------------------------------
-.
-.TP
-troff.org
-.URL http://\:www.troff.org "The historical troff site"
-provides an overview and pointers to all historical aspects of roff.
-.
-.TP
-Multics
-.URL http://\:www.multicians.org "The Multics site"
-contains a lot of information on the MIT projects, CTSS, Multics,
-early Unix, including
-.IR runoff ;
-especially useful are a glossary and the many links to ancient
-documents.
-.
-.TP
-Unix Archive
-.URL http://\:www.tuhs.org/\:Archive/ \
- "The Ancient Unixes Archive"
-.
-provides the source code and some binaries of the ancient Unixes
-(including the source code of troff and its documentation) that were
-made public by Caldera since 2001, e.g. of the famous Unix version\~7
-for PDP-11 at the
-.URL http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7 \
- "Unix V7 site" .
-.
-.TP
-Developers at AT&T Bell Labs
-.URL http://\:cm.bell-labs.com/\:cm/\:index.html \
- "Bell Labs Computing and Mathematical Sciences Research"
-.
-provides a search facility for tracking information on the early
-developers.
-.
-.TP
-Plan 9
-.URL http://\:plan9.bell-labs.com "The Plan\~9 operating system"
-.
-by AT&T Bell Labs.
-.
-.TP
-runoff
-.URL http://web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html \
-"Jerry Saltzer's home page"
-.
-stores some documents using the ancient runoff formatting language.
-.
-.TP
-CSTR Papers
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
- "The Bell Labs CSTR site"
-.
-stores the original troff manuals (CSTR #54, #97, #114, #116, #122)
-and famous historical documents on programming.
-.
-.TP
-GNU roff
-.URL http://\:www.gnu.org/\:software/\:groff "The groff web site"
-provides the free roff implementation groff, the actual standard roff.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Historical roff Documentation"
-.\" --------------------------------------------------------------------
-.
-Many classical
-.B troff
-documents are still available on-line.
-.
-The two main manuals of the troff language are
-.
-.TP
-[CSTR\~#54]
-J. F. Osanna,
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \
- "\fINroff/\:Troff User's Manual\fP" ;
-.
-Bell Labs, 1976; revised by Brian Kernighan, 1992.
-
-.
-.TP
-[CSTR\~#97]
-Brian Kernighan,
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:97.ps \
- "\fIA Typesetter-independent TROFF\fP" ,
-.
-Bell Labs, 1981, revised March 1982.
-.
-.P
-The "little language" roff papers are
-.
-.TP
-[CSTR\~#114]
-Jon L. Bentley and Brian W. Kernighan,
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:114.ps \
- "\fIGRAP \(em A Language for Typesetting Graphs\fP" ;
-.
-Bell Labs, August 1984.
-.
-.TP
-[CSTR\~#116]
-Brian W. Kernighan,
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:116.ps \
- "\fIPIC -- A Graphics Language for Typesetting\fP" ;
-.
-Bell Labs, December 1984.
-.
-.TP
-[CSTR\~#122]
-J. L. Bentley, L. W. Jelinski, and B. W. Kernighan,
-.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:122.ps \
-"\fICHEM \(em A Program for Typesetting Chemical Structure Diagrams, \
-Computers and Chemistry\fP" ;
-.
-Bell Labs, April 1986.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Manual Pages"
-.\" --------------------------------------------------------------------
-.
-Due to its complex structure, a full roff system has many man pages,
-each describing a single aspect of roff.
-.
-Unfortunately, there is no general naming scheme for the
-documentation among the different roff implementations.
-.
-.P
-In
-.IR groff ,
-the man page
-.BR groff (@MAN1EXT@)
-contains a survey of all documentation available in groff.
-.
-.P
-On other systems, you are on your own, but
-.BR troff (1)
-might be a good starting point.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.MTO bwarken@mayn.de "Bernd Warken" ;
-it is maintained by
-.MTO wl@gnu.org "Werner Lemberg".
-.
-.cp \n[roff_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/mdate.sh b/contrib/groff/mdate.sh
deleted file mode 100755
index 4a26e6e80bad..000000000000
--- a/contrib/groff/mdate.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/sh
-
-# Print the modification date of $1 `nicely'.
-
-# Don't want foreign dates.
-
-LANGUAGE=
-LC_ALL=C; export LC_ALL
-
-
-(date;
-if ls -L /dev/null 1>/dev/null 2>&1; then ls -L -l $1; else ls -l $1; fi
-) | awk '
-BEGIN {
- full["Jan"] = "January"; number["Jan"] = 1;
- full["Feb"] = "February"; number["Feb"] = 2;
- full["Mar"] = "March"; number["Mar"] = 3;
- full["Apr"] = "April"; number["Apr"] = 4;
- full["May"] = "May"; number["May"] = 5;
- full["Jun"] = "June"; number["Jun"] = 6;
- full["Jul"] = "July"; number["Jul"] = 7;
- full["Aug"] = "August"; number["Aug"] = 8;
- full["Sep"] = "September"; number["Sep"] = 9;
- full["Oct"] = "October"; number["Oct"] = 10;
- full["Nov"] = "November"; number["Nov"] = 11;
- full["Dec"] = "December"; number["Dec"] = 12;
-}
-
-NR == 1 {
- month = $2;
- year = $NF;
-}
-
-NR == 2 {
- if ($(NF-1) ~ /:/) {
- if (number[$(NF-3)] > number[month])
- year--;
- }
- else
- year = $(NF-1);
- print $(NF-2), full[$(NF-3)], year
-}'
diff --git a/contrib/groff/mkinstalldirs b/contrib/groff/mkinstalldirs
deleted file mode 100755
index 259dbfcd3578..000000000000
--- a/contrib/groff/mkinstalldirs
+++ /dev/null
@@ -1,158 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2005-06-29.22
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case $1 in
- -h | --help | --h*) # -h for help
- echo "$usage"
- exit $?
- ;;
- -m) # -m PERM arg
- shift
- test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
- dirmode=$1
- shift
- ;;
- --version)
- echo "$0 $scriptversion"
- exit $?
- ;;
- --) # stop option processing
- shift
- break
- ;;
- -*) # unknown option
- echo "$usage" 1>&2
- exit 1
- ;;
- *) # first non-opt arg
- break
- ;;
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
- 0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error. This is a problem when calling mkinstalldirs
-# from a parallel make. We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
- '')
- if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- test -d ./-p && rmdir ./-p
- test -d ./--version && rmdir ./--version
- fi
- ;;
- *)
- if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
- test ! -d ./--version; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- else
- # Clean up after NextStep and OpenStep mkdir.
- for d in ./-m ./-p ./--version "./$dirmode";
- do
- test -d $d && rmdir $d
- done
- fi
- ;;
-esac
-
-for file
-do
- case $file in
- /*) pathcomp=/ ;;
- *) pathcomp= ;;
- esac
- oIFS=$IFS
- IFS=/
- set fnord $file
- shift
- IFS=$oIFS
-
- for d
- do
- test "x$d" = x && continue
-
- pathcomp=$pathcomp$d
- case $pathcomp in
- -*) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
- lasterr=
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp=$pathcomp/
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/contrib/groff/src/devices/grodvi/Makefile.sub b/contrib/groff/src/devices/grodvi/Makefile.sub
deleted file mode 100644
index 16dc24ce962b..000000000000
--- a/contrib/groff/src/devices/grodvi/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grodvi$(EXEEXT)
-MAN1=grodvi.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=dvi.$(OBJEXT)
-CCSRCS=$(srcdir)/dvi.cpp
diff --git a/contrib/groff/src/devices/grodvi/dvi.cpp b/contrib/groff/src/devices/grodvi/dvi.cpp
deleted file mode 100644
index 201eb1c48eef..000000000000
--- a/contrib/groff/src/devices/grodvi/dvi.cpp
+++ /dev/null
@@ -1,978 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "nonposix.h"
-#include "paper.h"
-
-extern "C" const char *Version_string;
-
-#define DEFAULT_LINEWIDTH 40
-static int linewidth = DEFAULT_LINEWIDTH;
-
-static int draw_flag = 1;
-
-static int landscape_flag = 0;
-static double user_paper_length = 0;
-static double user_paper_width = 0;
-
-/* These values were chosen because:
-
-(MULTIPLIER*SIZESCALE)/(RES*UNITWIDTH) == 1/(2^20 * 72.27)
-
-and 57816 is an exact multiple of both 72.27*SIZESCALE and 72.
-
-The width in the groff font file is the product of MULTIPLIER and the
-width in the tfm file. */
-
-#define RES 57816
-#define RES_7227 (RES/7227)
-#define UNITWIDTH 131072
-#define SIZESCALE 100
-#define MULTIPLIER 1
-
-class dvi_font : public font {
- dvi_font(const char *);
-public:
- int checksum;
- int design_size;
- ~dvi_font();
- void handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno);
- static dvi_font *load_dvi_font(const char *);
-};
-
-dvi_font *dvi_font::load_dvi_font(const char *s)
-{
- dvi_font *f = new dvi_font(s);
- if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
-}
-
-dvi_font::dvi_font(const char *nm)
-: font(nm), checksum(0), design_size(0)
-{
-}
-
-dvi_font::~dvi_font()
-{
-}
-
-void dvi_font::handle_unknown_font_command(const char *command,
- const char *arg,
- const char *filename, int lineno)
-{
- char *ptr;
- if (strcmp(command, "checksum") == 0) {
- if (arg == 0)
- fatal_with_file_and_line(filename, lineno,
- "`checksum' command requires an argument");
- checksum = int(strtol(arg, &ptr, 10));
- if (checksum == 0 && ptr == arg) {
- fatal_with_file_and_line(filename, lineno, "bad checksum");
- }
- }
- else if (strcmp(command, "designsize") == 0) {
- if (arg == 0)
- fatal_with_file_and_line(filename, lineno,
- "`designsize' command requires an argument");
- design_size = int(strtol(arg, &ptr, 10));
- if (design_size == 0 && ptr == arg) {
- fatal_with_file_and_line(filename, lineno, "bad design size");
- }
- }
-}
-
-#define FONTS_MAX 256
-
-struct output_font {
- dvi_font *f;
- int point_size;
- output_font() : f(0) { }
-};
-
-class dvi_printer : public printer {
- FILE *fp;
- int max_drift;
- int byte_count;
- int last_bop;
- int page_count;
- int cur_h;
- int cur_v;
- int end_h;
- int max_h;
- int max_v;
- output_font output_font_table[FONTS_MAX];
- font *cur_font;
- int cur_point_size;
- color cur_color;
- int pushed;
- int pushed_h;
- int pushed_v;
- int have_pushed;
- void preamble();
- void postamble();
- void define_font(int);
- void set_font(int);
- void possibly_begin_line();
- void set_color(color *);
-protected:
- enum {
- id_byte = 2,
- set1 = 128,
- put1 = 133,
- put_rule = 137,
- bop = 139,
- eop = 140,
- push = 141,
- pop = 142,
- right1 = 143,
- down1 = 157,
- fnt_num_0 = 171,
- fnt1 = 235,
- xxx1 = 239,
- fnt_def1 = 243,
- pre = 247,
- post = 248,
- post_post = 249,
- filler = 223
- };
- int line_thickness;
-
- void out1(int);
- void out2(int);
- void out3(int);
- void out4(int);
- void moveto(int, int);
- void out_string(const char *);
- void out_signed(unsigned char, int);
- void out_unsigned(unsigned char, int);
- void do_special(const char *);
-public:
- dvi_printer();
- ~dvi_printer();
- font *make_font(const char *);
- void begin_page(int);
- void end_page(int);
- void set_char(int, font *, const environment *, int w, const char *name);
- void special(char *arg, const environment *env, char type);
- void end_of_line();
- void draw(int code, int *p, int np, const environment *env);
-};
-
-
-class draw_dvi_printer : public dvi_printer {
- int output_pen_size;
- void set_line_thickness(const environment *);
- void fill_next(const environment *);
-public:
- draw_dvi_printer();
- ~draw_dvi_printer();
- void draw(int code, int *p, int np, const environment *env);
- void end_page(int);
-};
-
-dvi_printer::dvi_printer()
-: fp(stdout), byte_count(0), last_bop(-1), page_count(0), max_h(0), max_v(0),
- cur_font(0), cur_point_size(-1), pushed(0), line_thickness(-1)
-{
- if (font::res != RES)
- fatal("resolution must be %1", RES);
- if (font::unitwidth != UNITWIDTH)
- fatal("unitwidth must be %1", UNITWIDTH);
- if (font::hor != 1)
- fatal("hor must be equal to 1");
- if (font::vert != 1)
- fatal("vert must be equal to 1");
- if (font::sizescale != SIZESCALE)
- fatal("sizescale must be equal to %1", SIZESCALE);
- max_drift = font::res/1000; // this is fairly arbitrary
- preamble();
-}
-
-dvi_printer::~dvi_printer()
-{
- postamble();
-}
-
-
-draw_dvi_printer::draw_dvi_printer()
-: output_pen_size(-1)
-{
-}
-
-draw_dvi_printer::~draw_dvi_printer()
-{
-}
-
-
-void dvi_printer::out1(int n)
-{
- byte_count += 1;
- putc(n & 0xff, fp);
-}
-
-void dvi_printer::out2(int n)
-{
- byte_count += 2;
- putc((n >> 8) & 0xff, fp);
- putc(n & 0xff, fp);
-}
-
-void dvi_printer::out3(int n)
-{
- byte_count += 3;
- putc((n >> 16) & 0xff, fp);
- putc((n >> 8) & 0xff, fp);
- putc(n & 0xff, fp);
-}
-
-void dvi_printer::out4(int n)
-{
- byte_count += 4;
- putc((n >> 24) & 0xff, fp);
- putc((n >> 16) & 0xff, fp);
- putc((n >> 8) & 0xff, fp);
- putc(n & 0xff, fp);
-}
-
-void dvi_printer::out_string(const char *s)
-{
- out1(strlen(s));
- while (*s != 0)
- out1(*s++);
-}
-
-
-void dvi_printer::end_of_line()
-{
- if (pushed) {
- out1(pop);
- pushed = 0;
- cur_h = pushed_h;
- cur_v = pushed_v;
- }
-}
-
-void dvi_printer::possibly_begin_line()
-{
- if (!pushed) {
- have_pushed = pushed = 1;
- pushed_h = cur_h;
- pushed_v = cur_v;
- out1(push);
- }
-}
-
-int scale(int x, int z)
-{
- int sw;
- int a, b, c, d;
- int alpha, beta;
- alpha = 16*z; beta = 16;
- while (z >= 040000000L) {
- z /= 2; beta /= 2;
- }
- d = x & 255;
- c = (x >> 8) & 255;
- b = (x >> 16) & 255;
- a = (x >> 24) & 255;
- sw = (((((d * z) / 0400) + (c * z)) / 0400) + (b * z)) / beta;
- if (a == 255)
- sw -= alpha;
- else
- assert(a == 0);
- return sw;
-}
-
-void dvi_printer::set_color(color *col)
-{
- cur_color = *col;
- char buf[256];
- unsigned int components[4];
- color_scheme cs = col->get_components(components);
- switch (cs) {
- case DEFAULT:
- sprintf(buf, "color gray 0");
- break;
- case RGB:
- sprintf(buf, "color rgb %.3g %.3g %.3g",
- double(Red) / color::MAX_COLOR_VAL,
- double(Green) / color::MAX_COLOR_VAL,
- double(Blue) / color::MAX_COLOR_VAL);
- break;
- case CMY:
- col->get_cmyk(&Cyan, &Magenta, &Yellow, &Black);
- // fall through
- case CMYK:
- sprintf(buf, "color cmyk %.3g %.3g %.3g %.3g",
- double(Cyan) / color::MAX_COLOR_VAL,
- double(Magenta) / color::MAX_COLOR_VAL,
- double(Yellow) / color::MAX_COLOR_VAL,
- double(Black) / color::MAX_COLOR_VAL);
- break;
- case GRAY:
- sprintf(buf, "color gray %.3g",
- double(Gray) / color::MAX_COLOR_VAL);
- break;
- }
- do_special(buf);
-}
-
-void dvi_printer::set_char(int idx, font *f, const environment *env,
- int w, const char *)
-{
- if (*env->col != cur_color)
- set_color(env->col);
- int code = f->get_code(idx);
- if (env->size != cur_point_size || f != cur_font) {
- cur_font = f;
- cur_point_size = env->size;
- int i;
- for (i = 0;; i++) {
- if (i >= FONTS_MAX) {
- fatal("too many output fonts required");
- }
- if (output_font_table[i].f == 0) {
- output_font_table[i].f = (dvi_font *)cur_font;
- output_font_table[i].point_size = cur_point_size;
- define_font(i);
- }
- if (output_font_table[i].f == cur_font
- && output_font_table[i].point_size == cur_point_size)
- break;
- }
- set_font(i);
- }
- int distance = env->hpos - cur_h;
- if (env->hpos != end_h && distance != 0) {
- out_signed(right1, distance);
- cur_h = env->hpos;
- }
- else if (distance > max_drift) {
- out_signed(right1, distance - max_drift);
- cur_h = env->hpos - max_drift;
- }
- else if (distance < -max_drift) {
- out_signed(right1, distance + max_drift);
- cur_h = env->hpos + max_drift;
- }
- if (env->vpos != cur_v) {
- out_signed(down1, env->vpos - cur_v);
- cur_v = env->vpos;
- }
- possibly_begin_line();
- end_h = env->hpos + w;
- cur_h += scale(f->get_width(idx, UNITWIDTH)/MULTIPLIER,
- cur_point_size*RES_7227);
- if (cur_h > max_h)
- max_h = cur_h;
- if (cur_v > max_v)
- max_v = cur_v;
- if (code >= 0 && code <= 127)
- out1(code);
- else
- out_unsigned(set1, code);
-}
-
-void dvi_printer::define_font(int i)
-{
- out_unsigned(fnt_def1, i);
- dvi_font *f = output_font_table[i].f;
- out4(f->checksum);
- out4(output_font_table[i].point_size*RES_7227);
- out4(int((double(f->design_size)/(1<<20))*RES_7227*100 + .5));
- const char *nm = f->get_internal_name();
- out1(0);
- out_string(nm);
-}
-
-void dvi_printer::set_font(int i)
-{
- if (i >= 0 && i <= 63)
- out1(fnt_num_0 + i);
- else
- out_unsigned(fnt1, i);
-}
-
-void dvi_printer::out_signed(unsigned char base, int param)
-{
- if (-128 <= param && param < 128) {
- out1(base);
- out1(param);
- }
- else if (-32768 <= param && param < 32768) {
- out1(base+1);
- out2(param);
- }
- else if (-(1 << 23) <= param && param < (1 << 23)) {
- out1(base+2);
- out3(param);
- }
- else {
- out1(base+3);
- out4(param);
- }
-}
-
-void dvi_printer::out_unsigned(unsigned char base, int param)
-{
- if (param >= 0) {
- if (param < 256) {
- out1(base);
- out1(param);
- }
- else if (param < 65536) {
- out1(base+1);
- out2(param);
- }
- else if (param < (1 << 24)) {
- out1(base+2);
- out3(param);
- }
- else {
- out1(base+3);
- out4(param);
- }
- }
- else {
- out1(base+3);
- out4(param);
- }
-}
-
-void dvi_printer::preamble()
-{
- out1(pre);
- out1(id_byte);
- out4(254000);
- out4(font::res);
- out4(1000);
- out1(0);
-}
-
-void dvi_printer::postamble()
-{
- int tem = byte_count;
- out1(post);
- out4(last_bop);
- out4(254000);
- out4(font::res);
- out4(1000);
- out4(max_v);
- out4(max_h);
- out2(have_pushed); // stack depth
- out2(page_count);
- int i;
- for (i = 0; i < FONTS_MAX && output_font_table[i].f != 0; i++)
- define_font(i);
- out1(post_post);
- out4(tem);
- out1(id_byte);
- for (i = 0; i < 4 || byte_count % 4 != 0; i++)
- out1(filler);
-}
-
-void dvi_printer::begin_page(int i)
-{
- page_count++;
- int tem = byte_count;
- out1(bop);
- out4(i);
- for (int j = 1; j < 10; j++)
- out4(0);
- out4(last_bop);
- last_bop = tem;
- // By convention position (0,0) in a dvi file is placed at (1in, 1in).
- cur_h = font::res;
- cur_v = font::res;
- end_h = 0;
- if (page_count == 1) {
- char buf[256];
- // at least dvips uses this
- double length = user_paper_length ? user_paper_length :
- double(font::paperlength) / font::res;
- double width = user_paper_width ? user_paper_width :
- double(font::paperwidth) / font::res;
- if (width > 0 && length > 0) {
- sprintf(buf, "papersize=%.3fin,%.3fin",
- landscape_flag ? length : width,
- landscape_flag ? width : length);
- do_special(buf);
- }
- }
- if (cur_color != default_color)
- set_color(&cur_color);
-}
-
-void dvi_printer::end_page(int)
-{
- set_color(&default_color);
- if (pushed)
- end_of_line();
- out1(eop);
- cur_font = 0;
-}
-
-void draw_dvi_printer::end_page(int len)
-{
- dvi_printer::end_page(len);
- output_pen_size = -1;
-}
-
-void dvi_printer::do_special(const char *s)
-{
- int len = strlen(s);
- if (len == 0)
- return;
- possibly_begin_line();
- out_unsigned(xxx1, len);
- while (*s)
- out1(*s++);
-}
-
-void dvi_printer::special(char *arg, const environment *env, char type)
-{
- if (type != 'p')
- return;
- moveto(env->hpos, env->vpos);
- do_special(arg);
-}
-
-void dvi_printer::moveto(int h, int v)
-{
- if (h != cur_h) {
- out_signed(right1, h - cur_h);
- cur_h = h;
- if (cur_h > max_h)
- max_h = cur_h;
- }
- if (v != cur_v) {
- out_signed(down1, v - cur_v);
- cur_v = v;
- if (cur_v > max_v)
- max_v = cur_v;
- }
- end_h = 0;
-}
-
-void dvi_printer::draw(int code, int *p, int np, const environment *env)
-{
- if (code == 'l') {
- int x = 0, y = 0;
- int height = 0, width = 0;
- int thickness;
- if (line_thickness < 0)
- thickness = env->size*RES_7227*linewidth/1000;
- else if (line_thickness > 0)
- thickness = line_thickness;
- else
- thickness = 1;
- if (np != 2) {
- error("2 arguments required for line");
- }
- else if (p[0] == 0) {
- // vertical rule
- if (p[1] > 0) {
- x = env->hpos - thickness/2;
- y = env->vpos + p[1] + thickness/2;
- height = p[1] + thickness;
- width = thickness;
- }
- else if (p[1] < 0) {
- x = env->hpos - thickness/2;
- y = env->vpos + thickness/2;
- height = thickness - p[1];
- width = thickness;
- }
- }
- else if (p[1] == 0) {
- if (p[0] > 0) {
- x = env->hpos - thickness/2;
- y = env->vpos + thickness/2;
- height = thickness;
- width = p[0] + thickness;
- }
- else if (p[0] < 0) {
- x = env->hpos - p[0] - thickness/2;
- y = env->vpos + thickness/2;
- height = thickness;
- width = thickness - p[0];
- }
- }
- if (height != 0) {
- moveto(x, y);
- out1(put_rule);
- out4(height);
- out4(width);
- }
- }
- else if (code == 't') {
- if (np == 0) {
- line_thickness = -1;
- }
- else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2)
- error("0 or 1 argument required for thickness");
- else
- line_thickness = p[0];
- }
- }
- else if (code == 'R') {
- if (np != 2)
- error("2 arguments required for rule");
- else if (p[0] != 0 || p[1] != 0) {
- int dh = p[0];
- int dv = p[1];
- int oh = env->hpos;
- int ov = env->vpos;
- if (dv > 0) {
- ov += dv;
- dv = -dv;
- }
- if (dh < 0) {
- oh += dh;
- dh = -dh;
- }
- moveto(oh, ov);
- out1(put_rule);
- out4(-dv);
- out4(dh);
- }
- }
-}
-
-// XXX Will this overflow?
-
-inline int milliinches(int n)
-{
- return (n*1000 + font::res/2)/font::res;
-}
-
-void draw_dvi_printer::set_line_thickness(const environment *env)
-{
- int desired_pen_size
- = milliinches(line_thickness < 0
- // Will this overflow?
- ? env->size*RES_7227*linewidth/1000
- : line_thickness);
- if (desired_pen_size != output_pen_size) {
- char buf[256];
- sprintf(buf, "pn %d", desired_pen_size);
- do_special(buf);
- output_pen_size = desired_pen_size;
- }
-}
-
-void draw_dvi_printer::fill_next(const environment *env)
-{
- unsigned int g;
- if (env->fill->is_default())
- g = 0;
- else {
- // currently, only BW support
- env->fill->get_gray(&g);
- }
- char buf[256];
- sprintf(buf, "sh %.3g", 1 - double(g)/color::MAX_COLOR_VAL);
- do_special(buf);
-}
-
-void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
-{
- char buf[1024];
- int fill_flag = 0;
- switch (code) {
- case 'C':
- fill_flag = 1;
- // fall through
- case 'c':
- {
- // troff adds an extra argument to C
- if (np != 1 && !(code == 'C' && np == 2)) {
- error("1 argument required for circle");
- break;
- }
- moveto(env->hpos+p[0]/2, env->vpos);
- if (fill_flag)
- fill_next(env);
- else
- set_line_thickness(env);
- int rad;
- rad = milliinches(p[0]/2);
- sprintf(buf, "%s 0 0 %d %d 0 6.28319",
- (fill_flag ? "ia" : "ar"),
- rad,
- rad);
- do_special(buf);
- break;
- }
- case 'l':
- if (np != 2) {
- error("2 arguments required for line");
- break;
- }
- moveto(env->hpos, env->vpos);
- set_line_thickness(env);
- do_special("pa 0 0");
- sprintf(buf, "pa %d %d", milliinches(p[0]), milliinches(p[1]));
- do_special(buf);
- do_special("fp");
- break;
- case 'E':
- fill_flag = 1;
- // fall through
- case 'e':
- if (np != 2) {
- error("2 arguments required for ellipse");
- break;
- }
- moveto(env->hpos+p[0]/2, env->vpos);
- if (fill_flag)
- fill_next(env);
- sprintf(buf, "%s 0 0 %d %d 0 6.28319",
- (fill_flag ? "ia" : "ar"),
- milliinches(p[0]/2),
- milliinches(p[1]/2));
- do_special(buf);
- break;
- case 'P':
- fill_flag = 1;
- // fall through
- case 'p':
- {
- if (np & 1) {
- error("even number of arguments required for polygon");
- break;
- }
- if (np == 0) {
- error("no arguments for polygon");
- break;
- }
- moveto(env->hpos, env->vpos);
- if (fill_flag)
- fill_next(env);
- else
- set_line_thickness(env);
- do_special("pa 0 0");
- int h = 0, v = 0;
- for (int i = 0; i < np; i += 2) {
- h += p[i];
- v += p[i+1];
- sprintf(buf, "pa %d %d", milliinches(h), milliinches(v));
- do_special(buf);
- }
- do_special("pa 0 0");
- do_special(fill_flag ? "ip" : "fp");
- break;
- }
- case '~':
- {
- if (np & 1) {
- error("even number of arguments required for spline");
- break;
- }
- if (np == 0) {
- error("no arguments for spline");
- break;
- }
- moveto(env->hpos, env->vpos);
- set_line_thickness(env);
- do_special("pa 0 0");
- int h = 0, v = 0;
- for (int i = 0; i < np; i += 2) {
- h += p[i];
- v += p[i+1];
- sprintf(buf, "pa %d %d", milliinches(h), milliinches(v));
- do_special(buf);
- }
- do_special("sp");
- break;
- }
- case 'a':
- {
- if (np != 4) {
- error("4 arguments required for arc");
- break;
- }
- set_line_thickness(env);
- double c[2];
- if (adjust_arc_center(p, c)) {
- int rad = milliinches(int(sqrt(c[0]*c[0] + c[1]*c[1]) + .5));
- moveto(env->hpos + int(c[0]), env->vpos + int(c[1]));
- double start = atan2(p[1] + p[3] - c[1], p[0] + p[2] - c[0]);
- double end = atan2(-c[1], -c[0]);
- if (end - start < 0)
- start -= 2 * 3.14159265358;
- sprintf(buf, "ar 0 0 %d %d %f %f", rad, rad, start, end);
- do_special(buf);
- }
- else {
- moveto(env->hpos, env->vpos);
- do_special("pa 0 0");
- sprintf(buf,
- "pa %d %d",
- milliinches(p[0] + p[2]),
- milliinches(p[1] + p[3]));
- do_special(buf);
- do_special("fp");
- }
- break;
- }
- case 't':
- {
- if (np == 0) {
- line_thickness = -1;
- }
- else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- line_thickness = p[0];
- }
- break;
- }
- case 'R':
- {
- if (np != 2) {
- error("2 arguments required for rule");
- break;
- }
- int dh = p[0];
- if (dh == 0)
- break;
- int dv = p[1];
- if (dv == 0)
- break;
- int oh = env->hpos;
- int ov = env->vpos;
- if (dv > 0) {
- ov += dv;
- dv = -dv;
- }
- if (dh < 0) {
- oh += dh;
- dh = -dh;
- }
- moveto(oh, ov);
- out1(put_rule);
- out4(-dv);
- out4(dh);
- break;
- }
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
-}
-
-font *dvi_printer::make_font(const char *nm)
-{
- return dvi_font::load_dvi_font(nm);
-}
-
-printer *make_printer()
-{
- if (draw_flag)
- return new draw_dvi_printer;
- else
- return new dvi_printer;
-}
-
-static void usage(FILE *stream);
-
-int main(int argc, char **argv)
-{
- setlocale(LC_NUMERIC, "C");
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "dF:I:lp:vw:", long_options, NULL))
- != EOF)
- switch(c) {
- case 'd':
- draw_flag = 0;
- break;
- case 'l':
- landscape_flag = 1;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'I':
- // ignore include search path
- break;
- case 'p':
- if (!font::scan_papersize(optarg, 0,
- &user_paper_length, &user_paper_width))
- error("invalid custom paper size `%1' ignored", optarg);
- break;
- case 'v':
- {
- printf("GNU grodvi (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'w':
- if (sscanf(optarg, "%d", &linewidth) != 1
- || linewidth < 0 || linewidth > 1000) {
- error("bad line width");
- linewidth = DEFAULT_LINEWIDTH;
- }
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- SET_BINARY(fileno(stdout));
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-dv] [-F dir] [-w n] [files ...]\n",
- program_name);
-}
diff --git a/contrib/groff/src/devices/grodvi/grodvi.man b/contrib/groff/src/devices/grodvi/grodvi.man
deleted file mode 100644
index 7c74c324ba44..000000000000
--- a/contrib/groff/src/devices/grodvi/grodvi.man
+++ /dev/null
@@ -1,434 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grodvi_C \n[.C]
-.cp 0
-.
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.de TQ
-. br
-. ns
-. TP \$1
-..
-.
-.de FT
-. if '\\*(.T'dvi' .ft \\$1
-..
-.
-.
-.TH GRODVI @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grodvi \- convert groff output to TeX dvi format
-.
-.
-.SH SYNOPSIS
-.B grodvi
-[
-.B \-dlv
-] [
-.BI \-F dir
-] [
-.BI \-p papersize
-] [
-.BI \-w n
-] [
-.IR files \|.\|.\|.\&
-]
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-.B grodvi
-is a driver for
-.B groff
-that produces \*(tx dvi format.
-.
-Normally it should be run by
-.BR groff\ \-Tdvi .
-.
-This will run
-.BR @g@troff\ \-Tdvi ;
-it will also input the macros in
-.BR @MACRODIR@/dvi.tmac .
-.
-.LP
-The dvi file generated by
-.B grodvi
-can be printed by any correctly-written dvi driver.
-.
-The troff drawing primitives are implemented
-using the tpic version\~2 specials.
-.
-If the driver does not support these, the
-.B \[rs]D
-commands will not produce any output.
-.
-.LP
-There is an additional drawing command available:
-.
-.TP
-.BI \[rs]D'R\ dh\ dv '
-Draw a rule (solid black rectangle), with one corner
-at the current position, and the diagonally opposite corner
-at the current position
-.RI +( dh , dv ).
-.
-Afterwards the current position will be at the opposite corner.
-.
-This produces a rule in the dvi file and so can be printed even with a
-driver that does not support the tpic specials unlike the other
-.B \[rs]D
-commands.
-.
-.LP
-The groff command
-.BI \[rs]X' anything '
-is translated into the same command in the dvi file as would be
-produced by
-.BI \[rs]special{ anything }
-in \*(tx;
-.I anything
-may not contain a newline.
-.
-.LP
-For inclusion of EPS image files,
-.B \-Tdvi
-loads
-.B pspic.tmac
-automatically, providing the
-.B PSPIC
-macro.
-.
-Please check
-.BR groff_tmac (@MAN5EXT@)
-for a detailed description.
-.
-.LP
-Font files for
-.B grodvi
-can be created from tfm files using
-.BR tfmtodit (@MAN1EXT@).
-.
-The font description file should contain the following
-additional commands:
-.
-.Tp \w'\fBinternalname'u+2n
-.BI internalname\ name
-The name of the tfm file (without the
-.B .tfm
-extension) is
-.IR name .
-.
-.TP
-.BI checksum\ n
-The checksum in the tfm file is
-.IR n .
-.
-.TP
-.BI designsize\ n
-The designsize in the tfm file is
-.IR n .
-.
-.LP
-These are automatically generated by
-.B tfmtodit.
-.
-.LP
-The default color for
-.B \[rs]m
-and
-.B \[rs]M
-is black.
-.
-Currently, the drawing color for
-.B \[rs]D
-commands is always black, and fill color values are translated to gray.
-.
-.LP
-In
-.B troff
-the
-.B \[rs]N
-escape sequence can be used to access characters by their position
-in the corresponding tfm file;
-all characters in the tfm file can be accessed this way.
-.
-.LP
-By design, the DVI format doesn't care about physical dimensions of the
-output medium.
-.
-Instead,
-.B grodvi
-emits the equivalent to \*(tx's
-.BI \[rs]special{papersize= width , length }
-on the first page;
-.B dvips
-(and possibly other DVI drivers) then sets the page size accordingly.
-.
-If either the page width or length is not positive, no papersize special
-is output.
-.
-.
-.SH OPTIONS
-.TP
-.B \-d
-Do not use tpic specials to implement drawing commands.
-.
-Horizontal and vertical lines will be implemented by rules.
-.
-Other drawing commands will be ignored.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR dvi .
-.
-.TP
-.B \-l
-Specify landscape orientation.
-.
-.TP
-.BI \-p papersize
-Specify paper dimensions.
-.
-This overrides the
-.BR papersize ,
-.BR paperlength ,
-and
-.B paperwidth
-commands in the
-.B DESC
-file; it accepts the same arguments as the
-.B papersize
-command (see
-.BR groff_font (@MAN5EXT@)
-for details).
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-w n
-Set the default line thickness to
-.I n
-thousandths of an em.
-If this option isn't specified, the line thickness defaults to 0.04\~em.
-.
-.
-.SH USAGE
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\ 4.
-The fonts are grouped into families
-.B T
-and
-.B H\ \c
-having members in each of these styles:
-.
-.RS
-.TP
-.B TR
-.FT TR
-CM Roman (cmr10)
-.FT
-.
-.TQ
-.B TI
-.FT TI
-CM Text Italic (cmti10)
-.FT
-.
-.TQ
-.B TB
-.FT TB
-CM Bold Extended Roman (cmbx10)
-.FT
-.
-.TQ
-.B TBI
-.FT TBI
-CM Bold Extended Text Italic (cmbxti10)
-.FT
-.
-.TQ
-.B HR
-.FT HR
-CM Sans Serif (cmss10)
-.FT
-.
-.TQ
-.B HI
-.FT HI
-CM Slanted Sans Serif (cmssi10)
-.FT
-.
-.TQ
-.B HB
-.FT HB
-CM Sans Serif Bold Extended (cmssbx10)
-.FT
-.
-.TQ
-.B HBI
-.FT HBI
-CM Slanted Sans Serif Bold Extended (cmssbxo10)
-.FT
-.RE
-.
-.LP
-There are also the following fonts which are not members of a family:
-.
-.RS
-.TP
-.B CW
-CM Typewriter Text (cmtt10)
-.FT CW
-.FT
-.
-.TQ
-.B CWI
-CM Italic Typewriter Text (cmitt10)
-.FT CWI
-.FT
-.RE
-.
-.LP
-Special fonts are
-.B MI
-(cmmi10),
-.B S
-(cmsy10),
-.B EX
-(cmex10),
-.B SC
-(cmtex10, only for
-.BR CW ),
-and, perhaps surprisingly,
-.BR TR ,
-.BR TI ,
-and
-.BR CW ,
-due to the different font encodings of text fonts.
-.
-For italic fonts,
-.B CWI
-is used instead of
-.BR CW .
-.
-.LP
-Finally, the symbol fonts of the American Mathematical Society are available
-as special fonts
-.B SA
-(msam10) and
-.B SB
-(msbm10).
-.
-These two fonts are not mounted by default.
-.
-.LP
-Using the option
-.B \-mec
-(which loads the file
-.BR ec.tmac )
-provides the EC and TC fonts.
-.
-The design of the EC family is very similar to that of the CM fonts;
-additionally, they give a much better coverage of groff symbols.
-.
-Note that
-.B ec.tmac
-must be called before any language-specific files; it doesn't take care of
-hcode values.
-.
-.
-.SH FILES
-.TP
-.B @FONTDIR@/devdvi/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devdvi/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @MACRODIR@/dvi.tmac
-Macros for use with
-.BR grodvi .
-.
-.TP
-.B @MACRODIR@/ec.tmac
-Macros to switch to EC fonts.
-.
-.
-.SH BUGS
-Dvi files produced by
-.B grodvi
-use a different resolution (57816 units per inch) to those produced by
-\*(tx.
-.
-Incorrectly written drivers which assume the resolution used by \*(tx,
-rather than using the resolution specified in the dvi file will not
-work with
-.BR grodvi .
-.
-.LP
-When using the
-.B \-d
-option with boxed tables,
-vertical and horizontal lines can sometimes protrude by one pixel.
-.
-This is a consequence of the way \*(tx requires that the heights
-and widths of rules be rounded.
-.
-.
-.SH "SEE ALSO"
-.BR tfmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
-.BR groff_tmac (@MAN5EXT@)
-.
-.cp \n[grodvi_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grohtml/Makefile.sub b/contrib/groff/src/devices/grohtml/Makefile.sub
deleted file mode 100644
index ad673cf54f26..000000000000
--- a/contrib/groff/src/devices/grohtml/Makefile.sub
+++ /dev/null
@@ -1,18 +0,0 @@
-PROG=post-grohtml$(EXEEXT)
-MAN1=grohtml.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- post-html.$(OBJEXT) \
- html-table.$(OBJEXT) \
- html-text.$(OBJEXT) \
- output.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/post-html.cpp \
- $(srcdir)/html-table.cpp \
- $(srcdir)/html-text.cpp \
- $(srcdir)/output.cpp
-HDRS=\
- $(srcdir)/html.h \
- $(srcdir)/html-table.h \
- $(srcdir)/html-text.h
diff --git a/contrib/groff/src/devices/grohtml/grohtml.man b/contrib/groff/src/devices/grohtml/grohtml.man
deleted file mode 100644
index ec82beb70758..000000000000
--- a/contrib/groff/src/devices/grohtml/grohtml.man
+++ /dev/null
@@ -1,293 +0,0 @@
-.ig
-Copyright (C) 1999-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.
-.TH GROHTML @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-grohtml \- html driver for groff
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgrohtml 'u
-.ti \niu
-.B grohtml
-.
-.de OP
-. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-. el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-bhlnprv
-.OP \-a \%aa-text-bits
-.OP \-D dir
-.OP \-F dir
-.OP \-g \%aa-graphic-bits
-.OP \-i \%resolution
-.OP \-I \%image-stem
-.OP \-j \%filename
-.OP \-o \%image-vertical-offset
-.OP \-s size
-.OP \-S level
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.
-.
-.SH DESCRIPTION
-The
-.B grohtml
-front end (which consists of a preprocessor,
-.BR pre-grohtml ,
-and a device driver,
-.BR post-grohtml )
-translates the output of GNU
-.B troff
-to html.
-Users should always invoke
-.B grohtml
-via the groff command with a
-.B \-Thtml
-option.
-If no files are given,
-.B grohtml
-will read the standard input.
-A filename of
-.B \-
-will also cause
-.B grohtml
-to read the standard input.
-Html output is written to the standard output.
-When
-.B grohtml
-is run by
-.B groff
-options can be passed to
-.B grohtml
-using
-.BR groff 's
-.B \-P
-option.
-.
-.
-.SH OPTIONS
-.TP
-.BI \-a aa-text-bits
-Number of bits of antialiasing information to be used by
-.I text
-when generating png images.
-The default is\~4 but valid values are 0, 1, 2, and\~4.
-Note your version of
-.B gs
-needs to support the
-.B \%\-dTextAlphaBits
-and
-.B \%\-dGraphicAlphaBits
-options in order to exploit antialiasing.
-A value of\~0 stops
-.B grohtml
-from issuing antialiasing commands to
-.BR gs .
-.
-.TP
-.B \-b
-Initialize the background color to white.
-.
-.TP
-.BI \-D dir
-Inform
-.B grohtml
-to place all image files into directory
-.IR dir .
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR html .
-.
-.TP
-.BI \-g aa-graphic-bits
-Number of bits of antialiasing information to be used by
-.I graphics
-when generating png images.
-The default is\~4 but valid values are 0, 1, 2, and\~4.
-Note your version of
-.B gs
-needs to support the
-.B \%\-dTextAlphaBits
-and
-.B \%\-dGraphicAlphaBits
-options in order to exploit antialiasing.
-A value of\~0 stops
-.B grohtml
-from issuing antialiasing commands to
-.BR gs .
-.
-.TP
-.B \-h
-Generate section and number headings by using
-.BR <B> .\|.\|. </B>
-and increasing the font size, rather than using the
-.BI <H n >\c
-\&.\|.\|.\c
-.BI </H n >
-tags.
-.
-.TP
-.BI \-i resolution
-Select the resolution for all images.
-By default this is 100 pixels per inch.
-Example:
-.B \-i200
-indicates 200 pixels per inch.
-.
-.TP
-.BI \-I stem
-Determine the image stem name.
-If omitted grohtml uses
-.BI \%grohtml- XXX
-.RI ( XXX
-is the process ID).
-.
-.TP
-.BI \-j filename
-Inform
-.B grohtml
-to split the html output into multiple files.
-The
-.I filename
-is the stem and specified section headings
-(default is level one) start a new file, named
-.IR filename-n.html .
-.
-.TP
-.B \-l
-Turn off the production of automatic section links at the top of the
-document.
-.
-.TP
-.B \-n
-Generate simple heading anchors whenever a section/number heading is found.
-Without the option the anchor value is the textual heading.
-This can cause problems when a heading contains a `?' on older versions of
-some browsers (Netscape).
-This flag is automatically turned on if a heading contains an image.
-.
-.TP
-.BI \-o vertical-offset
-Specify the vertical offset of images in points.
-.
-.TP
-.B \-p
-Display page rendering progress to stderr.
-.B grohtml
-only displays a page number when an image is required.
-.
-.TP
-.B \-r
-Turn off the automatic header and footer line (html rule).
-.
-.TP
-.B \-s size
-Set the base point size of the source file.
-Thereafter when this point size is used in the source it will correspond
-to the html base size.
-Every increase of two points in the source will yield a
-.B <big>
-tag, and conversely when a decrease of two points is seen a
-.B <small>
-tag is emitted.
-.
-.TP
-.BI \-S level
-When splitting html output,
-split at the heading level (or higher) defined by
-.IR level .
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH USAGE
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\~4.
-.
-.
-.SH DEPENDENCIES
-.B grohtml
-is dependent upon the png utilities
-.RB ( \%pnmcut ,
-.BR \%pnmcrop ,
-.BR \%pnmtopng )
-and GhostScript
-.RB ( gs ).
-.B \%pnmtopng
-(version 2.37.6 or greater)
-and
-.B \%pnmcut
-from the netpbm package (version 9.16 or greater) will work also.
-It is also dependent upon
-.B \%psselect
-from the
-.B PSUtils
-package.
-Images are generated whenever a table, picture, equation or line is
-encountered.
-.
-.
-.SH BUGS
-.B Grohtml
-has been completely redesigned and rewritten.
-It is still beta code.
-.
-.
-.SH "SEE ALSO"
-.BR afmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR psbb (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grohtml/html-table.cpp b/contrib/groff/src/devices/grohtml/html-table.cpp
deleted file mode 100644
index 7e5b2dc5e46c..000000000000
--- a/contrib/groff/src/devices/grohtml/html-table.cpp
+++ /dev/null
@@ -1,783 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cpp
- *
- * html-table.h
- *
- * provides the methods necessary to handle indentation and tab
- * positions using html tables.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "html-table.h"
-#include "ctype.h"
-#include "html.h"
-#include "html-text.h"
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-tabs::tabs ()
- : tab(NULL)
-{
-}
-
-tabs::~tabs ()
-{
- delete_list();
-}
-
-/*
- * delete_list - frees the tab list and sets tab to NULL.
- */
-
-void tabs::delete_list (void)
-{
- tab_position *p = tab;
- tab_position *q;
-
- while (p != NULL) {
- q = p;
- p = p->next;
- delete q;
- }
- tab = NULL;
-}
-
-void tabs::clear (void)
-{
- delete_list();
-}
-
-/*
- * compatible - returns TRUE if the tab stops in, s, do
- * not conflict with the current tab stops.
- * The new tab stops are _not_ placed into
- * this class.
- */
-
-int tabs::compatible (const char *s)
-{
- char align;
- int total=0;
- tab_position *last = tab;
-
- if (last == NULL)
- return FALSE; // no tab stops defined
-
- // move over tag name
- while ((*s != (char)0) && !isspace(*s))
- s++;
-
- while (*s != (char)0 && last != NULL) {
- // move over white space
- while ((*s != (char)0) && isspace(*s))
- s++;
- // collect alignment
- align = *s;
- // move over alignment
- s++;
- // move over white space
- while ((*s != (char)0) && isspace(*s))
- s++;
- // collect tab position
- total = atoi(s);
- // move over tab position
- while ((*s != (char)0) && !isspace(*s))
- s++;
- if (last->alignment != align || last->position != total)
- return FALSE;
-
- last = last->next;
- }
- return TRUE;
-}
-
-/*
- * init - scans the string, s, and initializes the tab stops.
- */
-
-void tabs::init (const char *s)
-{
- char align;
- int total=0;
- tab_position *last = NULL;
-
- clear(); // remove any tab stops
-
- // move over tag name
- while ((*s != (char)0) && !isspace(*s))
- s++;
-
- while (*s != (char)0) {
- // move over white space
- while ((*s != (char)0) && isspace(*s))
- s++;
- // collect alignment
- align = *s;
- // move over alignment
- s++;
- // move over white space
- while ((*s != (char)0) && isspace(*s))
- s++;
- // collect tab position
- total = atoi(s);
- // move over tab position
- while ((*s != (char)0) && !isspace(*s))
- s++;
- if (last == NULL) {
- tab = new tab_position;
- last = tab;
- } else {
- last->next = new tab_position;
- last = last->next;
- }
- last->alignment = align;
- last->position = total;
- last->next = NULL;
- }
-}
-
-/*
- * check_init - define tab stops using, s, providing none already exist.
- */
-
-void tabs::check_init (const char *s)
-{
- if (tab == NULL)
- init(s);
-}
-
-/*
- * find_tab - returns the tab number corresponding to the position, pos.
- */
-
-int tabs::find_tab (int pos)
-{
- tab_position *p;
- int i=0;
-
- for (p = tab; p != NULL; p = p->next) {
- i++;
- if (p->position == pos)
- return i;
- }
- return 0;
-}
-
-/*
- * get_tab_pos - returns the, nth, tab position
- */
-
-int tabs::get_tab_pos (int n)
-{
- tab_position *p;
-
- n--;
- for (p = tab; (p != NULL) && (n>0); p = p->next) {
- n--;
- if (n == 0)
- return p->position;
- }
- return 0;
-}
-
-char tabs::get_tab_align (int n)
-{
- tab_position *p;
-
- n--;
- for (p = tab; (p != NULL) && (n>0); p = p->next) {
- n--;
- if (n == 0)
- return p->alignment;
- }
- return 'L';
-}
-
-/*
- * dump_tab - display tab positions
- */
-
-void tabs::dump_tabs (void)
-{
- int i=1;
- tab_position *p;
-
- for (p = tab; p != NULL; p = p->next) {
- printf("tab %d is %d\n", i, p->position);
- i++;
- }
-}
-
-/*
- * html_table - methods
- */
-
-html_table::html_table (simple_output *op, int linelen)
- : out(op), columns(NULL), linelength(linelen), last_col(NULL), start_space(FALSE)
-{
- tab_stops = new tabs();
-}
-
-html_table::~html_table ()
-{
- cols *c;
- if (tab_stops != NULL)
- delete tab_stops;
-
- c = columns;
- while (columns != NULL) {
- columns = columns->next;
- delete c;
- c = columns;
- }
-}
-
-/*
- * remove_cols - remove a list of columns as defined by, c.
- */
-
-void html_table::remove_cols (cols *c)
-{
- cols *p;
-
- while (c != NULL) {
- p = c;
- c = c->next;
- delete p;
- }
-}
-
-/*
- * set_linelength - sets the line length value in this table.
- * It also adds an extra blank column to the
- * table should linelen exceed the last column.
- */
-
-void html_table::set_linelength (int linelen)
-{
- cols *p = NULL;
- cols *c;
- linelength = linelen;
-
- for (c = columns; c != NULL; c = c->next) {
- if (c->right > linelength) {
- c->right = linelength;
- remove_cols(c->next);
- c->next = NULL;
- return;
- }
- p = c;
- }
- if (p != NULL && p->right > 0)
- add_column(p->no+1, p->right, linelength, 'L');
-}
-
-/*
- * get_effective_linelength -
- */
-
-int html_table::get_effective_linelength (void)
-{
- if (columns != NULL)
- return linelength - columns->left;
- else
- return linelength;
-}
-
-/*
- * add_indent - adds the indent to a table.
- */
-
-void html_table::add_indent (int indent)
-{
- if (columns != NULL && columns->left > indent)
- add_column(0, indent, columns->left, 'L');
-}
-
-/*
- * emit_table_header - emits the html header for this table.
- */
-
-void html_table::emit_table_header (int space)
-{
- if (columns == NULL)
- return;
-
- // dump_table();
-
- last_col = NULL;
- if (linelength > 0) {
- out->nl();
- out->nl();
-
- out->put_string("<table width=\"100%\"")
- .put_string(" border=0 rules=\"none\" frame=\"void\"\n")
- .put_string(" cellspacing=\"0\" cellpadding=\"0\"");
- out->put_string(">")
- .nl();
- out->put_string("<tr valign=\"top\" align=\"left\"");
- if (space) {
- out->put_string(" style=\"margin-top: ");
- out->put_string(STYLE_VERTICAL_SPACE);
- out->put_string("\"");
- }
- out->put_string(">").nl();
- }
-}
-
-/*
- * get_right - returns the right most position of this column.
- */
-
-int html_table::get_right (cols *c)
-{
- if (c != NULL && c->right > 0)
- return c->right;
- if (c->next != NULL)
- return c->left;
- return linelength;
-}
-
-/*
- * set_space - assigns start_space. Used to determine the
- * vertical alignment when generating the next table row.
- */
-
-void html_table::set_space (int space)
-{
- start_space = space;
-}
-
-/*
- * emit_col - moves onto column, n.
- */
-
-void html_table::emit_col (int n)
-{
- cols *c = columns;
- cols *b = columns;
- int width = 0;
-
- // must be a different row
- if (last_col != NULL && n <= last_col->no)
- emit_new_row();
-
- while (c != NULL && c->no < n)
- c = c->next;
-
- // can we find column, n?
- if (c != NULL && c->no == n) {
- // shutdown previous column
- if (last_col != NULL)
- out->put_string("</td>").nl();
-
- // find previous column
- if (last_col == NULL)
- b = columns;
- else
- b = last_col;
-
- // have we a gap?
- if (last_col != NULL) {
- if (is_gap(b))
- out->put_string("<td width=\"")
- .put_number(is_gap(b))
- .put_string("%\"></td>")
- .nl();
- b = b->next;
- }
-
- // move across to column n
- while (b != c) {
- // we compute the difference after converting positions
- // to avoid rounding errors
- width = (get_right(b)*100 + get_effective_linelength()/2)
- / get_effective_linelength()
- - (b->left*100 + get_effective_linelength()/2)
- /get_effective_linelength();
- if (width)
- out->put_string("<td width=\"")
- .put_number(width)
- .put_string("%\"></td>")
- .nl();
- // have we a gap?
- if (is_gap(b))
- out->put_string("<td width=\"")
- .put_number(is_gap(b))
- .put_string("%\"></td>")
- .nl();
- b = b->next;
- }
- width = (get_right(b)*100 + get_effective_linelength()/2)
- / get_effective_linelength()
- - (b->left*100 + get_effective_linelength()/2)
- /get_effective_linelength();
- switch (b->alignment) {
- case 'C':
- out->put_string("<td width=\"")
- .put_number(width)
- .put_string("%\" align=center>")
- .nl();
- break;
- case 'R':
- out->put_string("<td width=\"")
- .put_number(width)
- .put_string("%\" align=right>")
- .nl();
- break;
- default:
- out->put_string("<td width=\"")
- .put_number(width)
- .put_string("%\">")
- .nl();
- }
- // remember column, b
- last_col = b;
- }
-}
-
-/*
- * finish_row -
- */
-
-void html_table::finish_row (void)
-{
- int n = 0;
- cols *c;
-
- if (last_col != NULL) {
- for (c = last_col->next; c != NULL; c = c->next)
- n = c->no;
-
- if (n > 0)
- emit_col(n);
- out->put_string("</td>").nl();
- }
-}
-
-/*
- * emit_new_row - move to the next row.
- */
-
-void html_table::emit_new_row (void)
-{
- finish_row();
-
- out->put_string("<tr valign=\"top\" align=\"left\"");
- if (start_space) {
- out->put_string(" style=\"margin-top: ");
- out->put_string(STYLE_VERTICAL_SPACE);
- out->put_string("\"");
- }
- out->put_string(">").nl();
- start_space = FALSE;
- last_col = NULL;
-}
-
-void html_table::emit_finish_table (void)
-{
- finish_row();
- out->put_string("</table>");
-}
-
-/*
- * add_column - adds a column. It returns FALSE if hstart..hend
- * crosses into a different columns.
- */
-
-int html_table::add_column (int coln, int hstart, int hend, char align)
-{
- cols *c = get_column(coln);
-
- if (c == NULL)
- return insert_column(coln, hstart, hend, align);
- else
- return modify_column(c, hstart, hend, align);
-}
-
-/*
- * get_column - returns the column, coln.
- */
-
-cols *html_table::get_column (int coln)
-{
- cols *c = columns;
-
- while (c != NULL && coln != c->no)
- c = c->next;
-
- if (c != NULL && coln == c->no)
- return c;
- else
- return NULL;
-}
-
-/*
- * insert_column - inserts a column, coln.
- * It returns TRUE if it does not bump into
- * another column.
- */
-
-int html_table::insert_column (int coln, int hstart, int hend, char align)
-{
- cols *c = columns;
- cols *l = columns;
- cols *n = NULL;
-
- while (c != NULL && c->no < coln) {
- l = c;
- c = c->next;
- }
- if (l != NULL && l->no>coln && hend > l->left)
- return FALSE; // new column bumps into previous one
-
- l = NULL;
- c = columns;
- while (c != NULL && c->no < coln) {
- l = c;
- c = c->next;
- }
-
- if ((l != NULL) && (hstart < l->right))
- return FALSE; // new column bumps into previous one
-
- if ((l != NULL) && (l->next != NULL) &&
- (l->next->left < hend))
- return FALSE; // new column bumps into next one
-
- n = new cols;
- if (l == NULL) {
- n->next = columns;
- columns = n;
- } else {
- n->next = l->next;
- l->next = n;
- }
- n->left = hstart;
- n->right = hend;
- n->no = coln;
- n->alignment = align;
- return TRUE;
-}
-
-/*
- * modify_column - given a column, c, modify the width to
- * contain hstart..hend.
- * It returns TRUE if it does not clash with
- * the next or previous column.
- */
-
-int html_table::modify_column (cols *c, int hstart, int hend, char align)
-{
- cols *l = columns;
-
- while (l != NULL && l->next != c)
- l = l->next;
-
- if ((l != NULL) && (hstart < l->right))
- return FALSE; // new column bumps into previous one
-
- if ((c->next != NULL) && (c->next->left < hend))
- return FALSE; // new column bumps into next one
-
- if (c->left > hstart)
- c->left = hstart;
-
- if (c->right < hend)
- c->right = hend;
-
- c->alignment = align;
-
- return TRUE;
-}
-
-/*
- * find_tab_column - finds the column number for position, pos.
- * It searches through the list tab stops.
- */
-
-int html_table::find_tab_column (int pos)
-{
- // remember the first column is reserved for untabbed glyphs
- return tab_stops->find_tab(pos)+1;
-}
-
-/*
- * find_column - find the column number for position, pos.
- * It searches through the list of columns.
- */
-
-int html_table::find_column (int pos)
-{
- int p=0;
- cols *c;
-
- for (c = columns; c != NULL; c = c->next) {
- if (c->left > pos)
- return p;
- p = c->no;
- }
- return p;
-}
-
-/*
- * no_columns - returns the number of table columns (rather than tabs)
- */
-
-int html_table::no_columns (void)
-{
- int n=0;
- cols *c;
-
- for (c = columns; c != NULL; c = c->next)
- n++;
- return n;
-}
-
-/*
- * is_gap - returns the gap between column, c, and the next column.
- */
-
-int html_table::is_gap (cols *c)
-{
- if (c == NULL || c->right <= 0 || c->next == NULL)
- return 0;
- else
- // we compute the difference after converting positions
- // to avoid rounding errors
- return (c->next->left*100 + get_effective_linelength()/2)
- / get_effective_linelength()
- - (c->right*100 + get_effective_linelength()/2)
- / get_effective_linelength();
-}
-
-/*
- * no_gaps - returns the number of table gaps between the columns
- */
-
-int html_table::no_gaps (void)
-{
- int n=0;
- cols *c;
-
- for (c = columns; c != NULL; c = c->next)
- if (is_gap(c))
- n++;
- return n;
-}
-
-/*
- * get_tab_pos - returns the, nth, tab position
- */
-
-int html_table::get_tab_pos (int n)
-{
- return tab_stops->get_tab_pos(n);
-}
-
-char html_table::get_tab_align (int n)
-{
- return tab_stops->get_tab_align(n);
-}
-
-
-void html_table::dump_table (void)
-{
- if (columns != NULL) {
- cols *c;
- for (c = columns; c != NULL; c = c->next) {
- printf("column %d %d..%d %c\n", c->no, c->left, c->right, c->alignment);
- }
- } else
- tab_stops->dump_tabs();
-}
-
-/*
- * html_indent - creates an indent with indentation, ind, given
- * a line length of linelength.
- */
-
-html_indent::html_indent (simple_output *op, int ind, int pageoffset, int linelength)
-{
- table = new html_table(op, linelength);
-
- table->add_column(1, ind+pageoffset, linelength, 'L');
- table->add_indent(pageoffset);
- in = ind;
- pg = pageoffset;
- ll = linelength;
-}
-
-html_indent::~html_indent (void)
-{
- end();
- delete table;
-}
-
-void html_indent::begin (int space)
-{
- if (in + pg == 0) {
- if (space) {
- table->out->put_string(" style=\"margin-top: ");
- table->out->put_string(STYLE_VERTICAL_SPACE);
- table->out->put_string("\"");
- }
- }
- else {
- //
- // we use exactly the same mechanism for calculating
- // indentation as html_table::emit_col
- //
- table->out->put_string(" style=\"margin-left:")
- .put_number(((in + pg) * 100 + ll/2) / ll -
- (ll/2)/ll)
- .put_string("%;");
-
- if (space) {
- table->out->put_string(" margin-top: ");
- table->out->put_string(STYLE_VERTICAL_SPACE);
- }
- table->out->put_string("\"");
- }
-}
-
-void html_indent::end (void)
-{
-}
-
-/*
- * get_reg - collects the registers as supplied during initialization.
- */
-
-void html_indent::get_reg (int *ind, int *pageoffset, int *linelength)
-{
- *ind = in;
- *pageoffset = pg;
- *linelength = ll;
-}
diff --git a/contrib/groff/src/devices/grohtml/html-table.h b/contrib/groff/src/devices/grohtml/html-table.h
deleted file mode 100644
index dc6cebe2cd76..000000000000
--- a/contrib/groff/src/devices/grohtml/html-table.h
+++ /dev/null
@@ -1,132 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.h
- *
- * html-table.h
- *
- * provides the methods necessary to handle indentation and tab
- * positions using html tables.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "html.h"
-
-#if !defined(HTML_TABLE_H)
-#define HTML_TABLE_H
-
-typedef struct tab_position {
- char alignment;
- int position;
- struct tab_position *next;
-} tab_position;
-
-
-class tabs {
-public:
- tabs ();
- ~tabs ();
- void clear (void);
- int compatible (const char *s);
- void init (const char *s);
- void check_init (const char *s);
- int find_tab (int pos);
- int get_tab_pos (int n);
- char get_tab_align (int n);
- void dump_tabs (void);
-
-private:
- void delete_list (void);
- tab_position *tab;
-};
-
-/*
- * define a column
- */
-
-typedef struct cols {
- int left, right;
- int no;
- char alignment;
- struct cols *next;
-} cols;
-
-class html_table {
-public:
- html_table (simple_output *op, int linelen);
- ~html_table (void);
- int add_column (int coln, int hstart, int hend, char align);
- cols *get_column (int coln);
- int insert_column (int coln, int hstart, int hend, char align);
- int modify_column (cols *c, int hstart, int hend, char align);
- int find_tab_column (int pos);
- int find_column (int pos);
- int get_tab_pos (int n);
- char get_tab_align (int n);
- void set_linelength (int linelen);
- int no_columns (void);
- int no_gaps (void);
- int is_gap (cols *c);
- void dump_table (void);
- void emit_table_header (int space);
- void emit_col (int n);
- void emit_new_row (void);
- void emit_finish_table (void);
- int get_right (cols *c);
- void add_indent (int indent);
- void finish_row (void);
- int get_effective_linelength (void);
- void set_space (int space);
-
- tabs *tab_stops; /* tab stop positions */
- simple_output *out;
-private:
- cols *columns; /* column entries */
- int linelength;
- cols *last_col; /* last column started */
- int start_space; /* have we seen a `.sp' tag? */
-
- void remove_cols (cols *c);
-};
-
-/*
- * the indentation wrapper.
- * Builds an indentation from a html-table.
- * This table is only emitted if the paragraph is emitted.
- */
-
-class html_indent {
-public:
- html_indent (simple_output *op, int ind, int pageoffset, int linelength);
- ~html_indent (void);
- void begin (int space); // called if we need to use the indent
- void get_reg (int *ind, int *pageoffset, int *linelength);
-
- // the indent is shutdown when it is deleted
-
-private:
- void end (void);
- int is_used;
- int pg; // values of the registers as passed via initialization
- int ll;
- int in;
- html_table *table;
-};
-
-#endif
diff --git a/contrib/groff/src/devices/grohtml/html-text.cpp b/contrib/groff/src/devices/grohtml/html-text.cpp
deleted file mode 100644
index b58d5e4a9940..000000000000
--- a/contrib/groff/src/devices/grohtml/html-text.cpp
+++ /dev/null
@@ -1,1047 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
- * Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote html-text.cpp
- *
- * html-text.cpp
- *
- * provide a troff like state machine interface which
- * generates html text.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-
-#include "html-text.h"
-
-#undef DEBUGGING
-// #define DEBUGGING
-
-html_text::html_text (simple_output *op) :
- stackptr(NULL), lastptr(NULL), out(op), space_emitted(TRUE),
- current_indentation(-1), pageoffset(-1), linelength(-1),
- blank_para(TRUE), start_space(FALSE)
-{
-}
-
-html_text::~html_text ()
-{
- flush_text();
-}
-
-
-#if defined(DEBUGGING)
-static int debugStack = FALSE;
-
-
-/*
- * turnDebug - flip the debugStack boolean and return the new value.
- */
-
-static int turnDebug (void)
-{
- debugStack = 1-debugStack;
- return debugStack;
-}
-
-/*
- * dump_stack_element - display an element of the html stack, p.
- */
-
-void html_text::dump_stack_element (tag_definition *p)
-{
- fprintf(stderr, " | ");
- switch (p->type) {
-
- case P_TAG: if (p->indent == NULL) {
- fprintf(stderr, "<P %s>", (char *)p->arg1); break;
- } else {
- fprintf(stderr, "<P %s [TABLE]>", (char *)p->arg1); break;
- }
- case I_TAG: fprintf(stderr, "<I>"); break;
- case B_TAG: fprintf(stderr, "<B>"); break;
- case SUB_TAG: fprintf(stderr, "<SUB>"); break;
- case SUP_TAG: fprintf(stderr, "<SUP>"); break;
- case TT_TAG: fprintf(stderr, "<TT>"); break;
- case PRE_TAG: if (p->indent == NULL) {
- fprintf(stderr, "<PRE>"); break;
- } else {
- fprintf(stderr, "<PRE [TABLE]>"); break;
- }
- case SMALL_TAG: fprintf(stderr, "<SMALL>"); break;
- case BIG_TAG: fprintf(stderr, "<BIG>"); break;
- case BREAK_TAG: fprintf(stderr, "<BREAK>"); break;
- case COLOR_TAG: {
- if (p->col.is_default())
- fprintf(stderr, "<COLOR (default)>");
- else {
- unsigned int r, g, b;
-
- p->col.get_rgb(&r, &g, &b);
- fprintf(stderr, "<COLOR %x %x %x>", r/0x101, g/0x101, b/0x101);
- }
- break;
- }
- default: fprintf(stderr, "unknown tag");
- }
- if (p->text_emitted)
- fprintf(stderr, "[t] ");
-}
-
-/*
- * dump_stack - debugging function only.
- */
-
-void html_text::dump_stack (void)
-{
- if (debugStack) {
- tag_definition *p = stackptr;
-
- while (p != NULL) {
- dump_stack_element(p);
- p = p->next;
- }
- }
- fprintf(stderr, "\n");
- fflush(stderr);
-}
-#else
-void html_text::dump_stack (void) {}
-#endif
-
-
-/*
- * end_tag - shuts down the tag.
- */
-
-void html_text::end_tag (tag_definition *t)
-{
- switch (t->type) {
-
- case I_TAG: out->put_string("</i>"); break;
- case B_TAG: out->put_string("</b>"); break;
- case P_TAG: if (t->indent == NULL) {
- out->put_string("</p>");
- } else {
- delete t->indent;
- t->indent = NULL;
- out->put_string("</p>");
- }
- out->enable_newlines(FALSE);
- blank_para = TRUE; break;
- case SUB_TAG: out->put_string("</sub>"); break;
- case SUP_TAG: out->put_string("</sup>"); break;
- case TT_TAG: out->put_string("</tt>"); break;
- case PRE_TAG: out->put_string("</pre>"); out->enable_newlines(TRUE);
- blank_para = TRUE;
- if (t->indent != NULL)
- delete t->indent;
- t->indent = NULL;
- break;
- case SMALL_TAG: out->put_string("</small>"); break;
- case BIG_TAG: out->put_string("</big>"); break;
- case COLOR_TAG: out->put_string("</font>"); break;
-
- default:
- error("unrecognised tag");
- }
-}
-
-/*
- * issue_tag - writes out an html tag with argument.
- * space == 0 if no space is requested
- * space == 1 if a space is requested
- * space == 2 if tag should not have a space style
- */
-
-void html_text::issue_tag (const char *tagname, const char *arg,
- int space)
-{
- if ((arg == 0) || (strlen(arg) == 0))
- out->put_string(tagname);
- else {
- out->put_string(tagname);
- out->put_string(" ");
- out->put_string(arg);
- }
- if (space == TRUE) {
- out->put_string(" style=\"margin-top: ");
- out->put_string(STYLE_VERTICAL_SPACE);
- out->put_string("\"");
- }
- if (space == TRUE || space == FALSE)
- out->put_string(" valign=\"top\"");
- out->put_string(">");
-}
-
-/*
- * issue_color_begin - writes out an html color tag.
- */
-
-void html_text::issue_color_begin (color *c)
-{
- unsigned int r, g, b;
- char buf[6+1];
-
- out->put_string("<font color=\"#");
- if (c->is_default())
- sprintf(buf, "000000");
- else {
- c->get_rgb(&r, &g, &b);
- // we have to scale 0..0xFFFF to 0..0xFF
- sprintf(buf, "%.2X%.2X%.2X", r/0x101, g/0x101, b/0x101);
- }
- out->put_string(buf);
- out->put_string("\">");
-}
-
-/*
- * start_tag - starts a tag.
- */
-
-void html_text::start_tag (tag_definition *t)
-{
- switch (t->type) {
-
- case I_TAG: issue_tag("<i", (char *)t->arg1); break;
- case B_TAG: issue_tag("<b", (char *)t->arg1); break;
- case P_TAG: if (t->indent != NULL) {
- out->nl();
-#if defined(DEBUGGING)
- out->simple_comment("INDENTATION");
-#endif
- out->put_string("\n<p");
- t->indent->begin(start_space);
- issue_tag("", (char *)t->arg1);
- } else {
- out->nl();
- issue_tag("\n<p", (char *)t->arg1, start_space);
- }
-
- out->enable_newlines(TRUE); break;
- case SUB_TAG: issue_tag("<sub", (char *)t->arg1); break;
- case SUP_TAG: issue_tag("<sup", (char *)t->arg1); break;
- case TT_TAG: issue_tag("<tt", (char *)t->arg1); break;
- case PRE_TAG: out->enable_newlines(TRUE);
- out->nl(); out->put_string("<pre");
- if (t->indent == NULL)
- issue_tag("", (char *)t->arg1, start_space);
- else {
- t->indent->begin(start_space);
- issue_tag("", (char *)t->arg1);
- }
- out->enable_newlines(FALSE); break;
- case SMALL_TAG: issue_tag("<small", (char *)t->arg1); break;
- case BIG_TAG: issue_tag("<big", (char *)t->arg1); break;
- case BREAK_TAG: break;
- case COLOR_TAG: issue_color_begin(&t->col); break;
-
- default:
- error("unrecognised tag");
- }
-}
-
-/*
- * flush_text - flushes html tags which are outstanding on the html stack.
- */
-
-void html_text::flush_text (void)
-{
- int notext=TRUE;
- tag_definition *p=stackptr;
-
- while (stackptr != 0) {
- notext = (notext && (! stackptr->text_emitted));
- if (! notext) {
- end_tag(stackptr);
- }
- p = stackptr;
- stackptr = stackptr->next;
- delete p;
- }
- lastptr = NULL;
-}
-
-/*
- * is_present - returns TRUE if tag is already present on the stack.
- */
-
-int html_text::is_present (HTML_TAG t)
-{
- tag_definition *p=stackptr;
-
- while (p != NULL) {
- if (t == p->type)
- return TRUE;
- p = p->next;
- }
- return FALSE;
-}
-
-/*
- * uses_indent - returns TRUE if the current paragraph is using a
- * html table to effect an indent.
- */
-
-int html_text::uses_indent (void)
-{
- tag_definition *p = stackptr;
-
- while (p != NULL) {
- if (p->indent != NULL)
- return TRUE;
- p = p->next;
- }
- return FALSE;
-}
-
-extern void stop();
-
-/*
- * do_push - places, tag_definition, p, onto the stack
- */
-
-void html_text::do_push (tag_definition *p)
-{
- HTML_TAG t = p->type;
-
-#if defined(DEBUGGING)
- if (t == PRE_TAG)
- stop();
- debugStack = TRUE;
- fprintf(stderr, "\nentering do_push (");
- dump_stack_element(p);
- fprintf(stderr, ")\n");
- dump_stack();
- fprintf(stderr, ")\n");
- fflush(stderr);
-#endif
-
- /*
- * if t is a P_TAG or PRE_TAG make sure it goes on the end of the stack.
- */
-
- if (((t == P_TAG) || (t == PRE_TAG)) && (lastptr != NULL)) {
- /*
- * store, p, at the end
- */
- lastptr->next = p;
- lastptr = p;
- p->next = NULL;
- } else {
- p->next = stackptr;
- if (stackptr == NULL)
- lastptr = p;
- stackptr = p;
- }
-
-#if defined(DEBUGGING)
- dump_stack();
- fprintf(stderr, "exiting do_push\n");
-#endif
-}
-
-/*
- * push_para - adds a new entry onto the html paragraph stack.
- */
-
-void html_text::push_para (HTML_TAG t, void *arg, html_indent *in)
-{
- tag_definition *p= new tag_definition;
-
- p->type = t;
- p->arg1 = arg;
- p->text_emitted = FALSE;
- p->indent = in;
-
- if (t == PRE_TAG && is_present(PRE_TAG))
- fatal("cannot have multiple PRE_TAGs");
-
- do_push(p);
-}
-
-void html_text::push_para (HTML_TAG t)
-{
- push_para(t, (void *)"", NULL);
-}
-
-void html_text::push_para (color *c)
-{
- tag_definition *p = new tag_definition;
-
- p->type = COLOR_TAG;
- p->arg1 = NULL;
- p->col = *c;
- p->text_emitted = FALSE;
- p->indent = NULL;
-
- do_push(p);
-}
-
-/*
- * do_italic - changes to italic
- */
-
-void html_text::do_italic (void)
-{
- if (! is_present(I_TAG))
- push_para(I_TAG);
-}
-
-/*
- * do_bold - changes to bold.
- */
-
-void html_text::do_bold (void)
-{
- if (! is_present(B_TAG))
- push_para(B_TAG);
-}
-
-/*
- * do_tt - changes to teletype.
- */
-
-void html_text::do_tt (void)
-{
- if ((! is_present(TT_TAG)) && (! is_present(PRE_TAG)))
- push_para(TT_TAG);
-}
-
-/*
- * do_pre - changes to preformated text.
- */
-
-void html_text::do_pre (void)
-{
- done_tt();
- if (is_present(P_TAG)) {
- html_indent *i = remove_indent(P_TAG);
- int space = retrieve_para_space();
- (void)done_para();
- if (! is_present(PRE_TAG))
- push_para(PRE_TAG, NULL, i);
- start_space = space;
- } else if (! is_present(PRE_TAG))
- push_para(PRE_TAG, NULL, NULL);
- dump_stack();
-}
-
-/*
- * is_in_pre - returns TRUE if we are currently within a preformatted
- * <pre> block.
- */
-
-int html_text::is_in_pre (void)
-{
- return is_present(PRE_TAG);
-}
-
-/*
- * do_color - initiates a new color tag.
- */
-
-void html_text::do_color (color *c)
-{
- shutdown(COLOR_TAG); // shutdown a previous color tag, if present
- push_para(c);
-}
-
-/*
- * done_color - shutdown an outstanding color tag, if it exists.
- */
-
-void html_text::done_color (void)
-{
- shutdown(COLOR_TAG);
-}
-
-/*
- * shutdown - shuts down an html tag.
- */
-
-char *html_text::shutdown (HTML_TAG t)
-{
- char *arg=NULL;
-
- if (is_present(t)) {
- tag_definition *p =stackptr;
- tag_definition *temp =NULL;
- int notext =TRUE;
-
- dump_stack();
- while ((stackptr != NULL) && (stackptr->type != t)) {
- notext = (notext && (! stackptr->text_emitted));
- if (! notext) {
- end_tag(stackptr);
- }
-
- /*
- * pop tag
- */
- p = stackptr;
- stackptr = stackptr->next;
- if (stackptr == NULL)
- lastptr = NULL;
-
- /*
- * push tag onto temp stack
- */
- p->next = temp;
- temp = p;
- }
-
- /*
- * and examine stackptr
- */
- if ((stackptr != NULL) && (stackptr->type == t)) {
- if (stackptr->text_emitted) {
- end_tag(stackptr);
- }
- if (t == P_TAG) {
- arg = (char *)stackptr->arg1;
- }
- p = stackptr;
- stackptr = stackptr->next;
- if (stackptr == NULL)
- lastptr = NULL;
- if (p->indent != NULL)
- delete p->indent;
- delete p;
- }
-
- /*
- * and restore unaffected tags
- */
- while (temp != NULL) {
- if (temp->type == COLOR_TAG)
- push_para(&temp->col);
- else
- push_para(temp->type, temp->arg1, temp->indent);
- p = temp;
- temp = temp->next;
- delete p;
- }
- }
- return arg;
-}
-
-/*
- * done_bold - shuts downs a bold tag.
- */
-
-void html_text::done_bold (void)
-{
- shutdown(B_TAG);
-}
-
-/*
- * done_italic - shuts downs an italic tag.
- */
-
-void html_text::done_italic (void)
-{
- shutdown(I_TAG);
-}
-
-/*
- * done_sup - shuts downs a sup tag.
- */
-
-void html_text::done_sup (void)
-{
- shutdown(SUP_TAG);
-}
-
-/*
- * done_sub - shuts downs a sub tag.
- */
-
-void html_text::done_sub (void)
-{
- shutdown(SUB_TAG);
-}
-
-/*
- * done_tt - shuts downs a tt tag.
- */
-
-void html_text::done_tt (void)
-{
- shutdown(TT_TAG);
-}
-
-/*
- * done_pre - shuts downs a pre tag.
- */
-
-void html_text::done_pre (void)
-{
- shutdown(PRE_TAG);
-}
-
-/*
- * done_small - shuts downs a small tag.
- */
-
-void html_text::done_small (void)
-{
- shutdown(SMALL_TAG);
-}
-
-/*
- * done_big - shuts downs a big tag.
- */
-
-void html_text::done_big (void)
-{
- shutdown(BIG_TAG);
-}
-
-/*
- * check_emit_text - ensures that all previous tags have been emitted (in order)
- * before the text is written.
- */
-
-void html_text::check_emit_text (tag_definition *t)
-{
- if ((t != NULL) && (! t->text_emitted)) {
- check_emit_text(t->next);
- t->text_emitted = TRUE;
- start_tag(t);
- }
-}
-
-/*
- * do_emittext - tells the class that text was written during the current tag.
- */
-
-void html_text::do_emittext (const char *s, int length)
-{
- if ((! is_present(P_TAG)) && (! is_present(PRE_TAG)))
- do_para("", FALSE);
-
- if (is_present(BREAK_TAG)) {
- int text = remove_break();
- check_emit_text(stackptr);
- if (text) {
- if (is_present(PRE_TAG)) {
- out->nl();
- } else
- out->put_string("<br>").nl();
- }
- } else
- check_emit_text(stackptr);
-
- out->put_string(s, length);
- space_emitted = FALSE;
- blank_para = FALSE;
-}
-
-/*
- * do_para - starts a new paragraph
- */
-
-void html_text::do_para (const char *arg, html_indent *in, int space)
-{
- if (! is_present(P_TAG)) {
- if (is_present(PRE_TAG)) {
- html_indent *i = remove_indent(PRE_TAG);
- done_pre();
- if ((arg == NULL || (strcmp(arg, "") == 0)) &&
- (i == in || in == NULL))
- in = i;
- else
- delete i;
- }
- remove_sub_sup();
- push_para(P_TAG, (void *)arg, in);
- start_space = space;
- }
-}
-
-void html_text::do_para (const char *arg, int space)
-{
- do_para(arg, NULL, space);
-}
-
-void html_text::do_para (simple_output *op, const char *arg1,
- int indentation_value, int page_offset,
- int line_length, int space)
-{
- html_indent *ind;
-
- if (indentation_value == 0)
- ind = NULL;
- else
- ind = new html_indent(op, indentation_value, page_offset, line_length);
- do_para(arg1, ind, space);
-}
-
-/*
- * done_para - shuts down a paragraph tag.
- */
-
-char *html_text::done_para (void)
-{
- char *result;
- space_emitted = TRUE;
- result = shutdown(P_TAG);
- start_space = FALSE;
- return result;
-}
-
-/*
- * remove_indent - returns the indent associated with, tag.
- * The indent associated with tag is set to NULL.
- */
-
-html_indent *html_text::remove_indent (HTML_TAG tag)
-{
- tag_definition *p=stackptr;
-
- while (p != NULL) {
- if (tag == p->type) {
- html_indent *i = p->indent;
- p->indent = NULL;
- return i;
- }
- p = p->next;
- }
- return NULL;
-}
-
-/*
- * remove_para_space - removes the leading space to a paragraph
- * (effectively this trims off a leading `.sp' tag).
- */
-
-void html_text::remove_para_space (void)
-{
- start_space = FALSE;
-}
-
-/*
- * do_space - issues an end of paragraph
- */
-
-void html_text::do_space (void)
-{
- if (is_in_pre()) {
- do_emittext("", 0);
- out->force_nl();
- space_emitted = TRUE;
- } else {
- html_indent *i = remove_indent(P_TAG);
-
- do_para(done_para(), i, TRUE);
- space_emitted = TRUE;
- }
-}
-
-/*
- * do_break - issue a break tag.
- */
-
-void html_text::do_break (void)
-{
- if (! is_present(PRE_TAG))
- if (emitted_text())
- if (! is_present(BREAK_TAG))
- push_para(BREAK_TAG);
-
- space_emitted = TRUE;
-}
-
-/*
- * do_newline - issue a newline providing that we are inside a <pre> tag.
- */
-
-void html_text::do_newline (void)
-{
- if (is_present(PRE_TAG)) {
- do_emittext("\n", 1);
- space_emitted = TRUE;
- }
-}
-
-/*
- * emitted_text - returns FALSE if white space has just been written.
- */
-
-int html_text::emitted_text (void)
-{
- return !space_emitted;
-}
-
-/*
- * ever_emitted_text - returns TRUE if we have ever emitted text in this
- * paragraph.
- */
-
-int html_text::ever_emitted_text (void)
-{
- return !blank_para;
-}
-
-/*
- * starts_with_space - returns TRUE if we started this paragraph with a .sp
- */
-
-int html_text::starts_with_space (void)
-{
- return start_space;
-}
-
-/*
- * retrieve_para_space - returns TRUE, if the paragraph starts with
- * a space and text has not yet been emitted.
- * If TRUE is returned, then the, start_space,
- * variable is set to FALSE.
- */
-
-int html_text::retrieve_para_space (void)
-{
- if (start_space && blank_para) {
- start_space = FALSE;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-/*
- * emit_space - writes a space providing that text was written beforehand.
- */
-
-void html_text::emit_space (void)
-{
- if (is_present(PRE_TAG))
- do_emittext(" ", 1);
- else
- out->space_or_newline();
-
- space_emitted = TRUE;
-}
-
-/*
- * remove_def - removes a definition, t, from the stack.
- */
-
-void html_text::remove_def (tag_definition *t)
-{
- tag_definition *p = stackptr;
- tag_definition *l = 0;
- tag_definition *q = 0;
-
- while ((p != 0) && (p != t)) {
- l = p;
- p = p->next;
- }
- if ((p != 0) && (p == t)) {
- if (p == stackptr) {
- stackptr = stackptr->next;
- if (stackptr == NULL)
- lastptr = NULL;
- q = stackptr;
- } else if (l == 0) {
- error("stack list pointers are wrong");
- } else {
- l->next = p->next;
- q = p->next;
- if (l->next == NULL)
- lastptr = l;
- }
- delete p;
- }
-}
-
-/*
- * remove_tag - removes a tag from the stack.
- */
-
-void html_text::remove_tag (HTML_TAG tag)
-{
- tag_definition *p = stackptr;
-
- while ((p != 0) && (p->type != tag)) {
- p = p->next;
- }
- if ((p != 0) && (p->type == tag))
- remove_def(p);
-}
-
-/*
- * remove_sub_sup - removes a sub or sup tag, should either exist
- * on the stack.
- */
-
-void html_text::remove_sub_sup (void)
-{
- if (is_present(SUB_TAG)) {
- remove_tag(SUB_TAG);
- }
- if (is_present(SUP_TAG)) {
- remove_tag(SUP_TAG);
- }
- if (is_present(PRE_TAG)) {
- remove_tag(PRE_TAG);
- }
-}
-
-/*
- * remove_break - break tags are not balanced thus remove it once it has been emitted.
- * It returns TRUE if text was emitted before the <br> was issued.
- */
-
-int html_text::remove_break (void)
-{
- tag_definition *p = stackptr;
- tag_definition *l = 0;
- tag_definition *q = 0;
-
- while ((p != 0) && (p->type != BREAK_TAG)) {
- l = p;
- p = p->next;
- }
- if ((p != 0) && (p->type == BREAK_TAG)) {
- if (p == stackptr) {
- stackptr = stackptr->next;
- if (stackptr == NULL)
- lastptr = NULL;
- q = stackptr;
- } else if (l == 0)
- error("stack list pointers are wrong");
- else {
- l->next = p->next;
- q = p->next;
- if (l->next == NULL)
- lastptr = l;
- }
- delete p;
- }
- /*
- * now determine whether text was issued before <br>
- */
- while (q != 0) {
- if (q->text_emitted)
- return TRUE;
- else
- q = q->next;
- }
- return FALSE;
-}
-
-/*
- * remove_para_align - removes a paragraph which has a text
- * argument. If the paragraph has no text
- * argument then it is left alone.
- */
-
-void html_text::remove_para_align (void)
-{
- if (is_present(P_TAG)) {
- tag_definition *p=stackptr;
-
- while (p != NULL) {
- if (p->type == P_TAG && p->arg1 != NULL) {
- html_indent *i = remove_indent(P_TAG);
- int space = retrieve_para_space();
- done_para();
- do_para("", i, space);
- return;
- }
- p = p->next;
- }
- }
-}
-
-/*
- * get_alignment - returns the alignment for the paragraph.
- * If no alignment was given then we return "".
- */
-
-char *html_text::get_alignment (void)
-{
- if (is_present(P_TAG)) {
- tag_definition *p=stackptr;
-
- while (p != NULL) {
- if (p->type == P_TAG && p->arg1 != NULL)
- return (char *)p->arg1;
- p = p->next;
- }
- }
- return (char *)"";
-}
-
-/*
- * do_small - potentially inserts a <small> tag into the html stream.
- * However we check for a <big> tag, if present then we terminate it.
- * Otherwise a <small> tag is inserted.
- */
-
-void html_text::do_small (void)
-{
- if (is_present(BIG_TAG))
- done_big();
- else
- push_para(SMALL_TAG);
-}
-
-/*
- * do_big - is the mirror image of do_small.
- */
-
-void html_text::do_big (void)
-{
- if (is_present(SMALL_TAG))
- done_small();
- else
- push_para(BIG_TAG);
-}
-
-/*
- * do_sup - save a superscript tag on the stack of tags.
- */
-
-void html_text::do_sup (void)
-{
- push_para(SUP_TAG);
-}
-
-/*
- * do_sub - save a subscript tag on the stack of tags.
- */
-
-void html_text::do_sub (void)
-{
- push_para(SUB_TAG);
-}
diff --git a/contrib/groff/src/devices/grohtml/html-text.h b/contrib/groff/src/devices/grohtml/html-text.h
deleted file mode 100644
index e0e3cc755ca0..000000000000
--- a/contrib/groff/src/devices/grohtml/html-text.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
- * Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote html-text.h
- *
- * html-text.h
- *
- * provides a state machine interface which generates html text.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "html.h"
-#include "html-table.h"
-
-#define STYLE_VERTICAL_SPACE "1em"
-
-/*
- * html tags
- */
-
-typedef enum {I_TAG, B_TAG, P_TAG, SUB_TAG, SUP_TAG, TT_TAG,
- PRE_TAG, SMALL_TAG, BIG_TAG, BREAK_TAG,
- COLOR_TAG} HTML_TAG;
-
-typedef struct tag_definition {
- HTML_TAG type;
- void *arg1;
- int text_emitted;
- color col;
- html_indent *indent;
- tag_definition *next;
-} tag_definition ;
-
-/*
- * the state of the current paragraph.
- * It allows post-html.cpp to request font changes, paragraph start/end
- * and emits balanced tags with a small amount of peephole optimization.
- */
-
-class html_text {
-public:
- html_text (simple_output *op);
- ~html_text (void);
- void flush_text (void);
- void do_emittext (const char *s, int length);
- void do_italic (void);
- void do_bold (void);
- void do_roman (void);
- void do_tt (void);
- void do_pre (void);
- void do_small (void);
- void do_big (void);
- void do_para (const char *arg, int space); // used for no indentation
- void do_para (simple_output *op, const char *arg1,
- int indentation, int pageoffset, int linelength,
- int space);
- void do_sup (void);
- void do_sub (void);
- void do_space (void);
- void do_break (void);
- void do_newline (void);
- void do_table (const char *arg);
- void done_bold (void);
- void done_italic (void);
- char *done_para (void);
- void done_sup (void);
- void done_sub (void);
- void done_tt (void);
- void done_pre (void);
- void done_small (void);
- void done_big (void);
- void do_color (color *c);
- void done_color (void);
- int emitted_text (void);
- int ever_emitted_text (void);
- int starts_with_space (void);
- int retrieve_para_space (void);
- void emit_space (void);
- int is_in_pre (void);
- int uses_indent (void);
- void remove_tag (HTML_TAG tag);
- void remove_sub_sup (void);
- void remove_para_align (void);
- void remove_para_space (void);
- char *get_alignment (void);
-
-private:
- tag_definition *stackptr; /* the current paragraph state */
- tag_definition *lastptr; /* the end of the stack */
- simple_output *out;
- int space_emitted; /* just emitted a space? */
- int current_indentation; /* current .in value */
- int pageoffset; /* .po value */
- int linelength; /* current line length */
- int blank_para; /* have we ever written text? */
- int start_space; /* does para start with a .sp */
- html_indent *indent; /* our indent class */
-
- int is_present (HTML_TAG t);
- void end_tag (tag_definition *t);
- void start_tag (tag_definition *t);
- void do_para (const char *arg, html_indent *in, int space);
- void push_para (HTML_TAG t);
- void push_para (HTML_TAG t, void *arg, html_indent *in);
- void push_para (color *c);
- void do_push (tag_definition *p);
- char *shutdown (HTML_TAG t);
- void check_emit_text (tag_definition *t);
- int remove_break (void);
- void issue_tag (const char *tagname, const char *arg, int space=2);
- void issue_color_begin (color *c);
- void remove_def (tag_definition *t);
- html_indent *remove_indent (HTML_TAG tag);
- void dump_stack_element (tag_definition *p);
- void dump_stack (void);
-};
diff --git a/contrib/groff/src/devices/grohtml/html.h b/contrib/groff/src/devices/grohtml/html.h
deleted file mode 100644
index b14fb2c98e59..000000000000
--- a/contrib/groff/src/devices/grohtml/html.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#if !defined(HTML_H)
-# define HTML_H
-
-/*
- * class and structure needed to buffer words
- */
-
-struct word {
- char *s;
- word *next;
-
- word (const char *w, int n);
- ~word ();
-};
-
-class word_list {
-public:
- word_list ();
- int flush (FILE *f);
- void add_word (const char *s, int n);
- int get_length (void);
-
-private:
- int length;
- word *head;
- word *tail;
-};
-
-class simple_output {
-public:
- simple_output(FILE *, int max_line_length);
- simple_output &put_string(const char *, int);
- simple_output &put_string(const char *s);
- simple_output &put_string(const string &s);
- simple_output &put_troffps_char (const char *s);
- simple_output &put_translated_string(const char *s);
- simple_output &put_number(int);
- simple_output &put_float(double);
- simple_output &put_symbol(const char *);
- simple_output &put_literal_symbol(const char *);
- simple_output &set_fixed_point(int);
- simple_output &simple_comment(const char *);
- simple_output &begin_comment(const char *);
- simple_output &comment_arg(const char *);
- simple_output &end_comment();
- simple_output &set_file(FILE *);
- simple_output &include_file(FILE *);
- simple_output &copy_file(FILE *);
- simple_output &end_line();
- simple_output &put_raw_char(char);
- simple_output &special(const char *);
- simple_output &enable_newlines(int);
- simple_output &check_newline(int n);
- simple_output &nl(void);
- simple_output &force_nl(void);
- simple_output &space_or_newline (void);
- simple_output &begin_tag (void);
- FILE *get_file();
-private:
- FILE *fp;
- int max_line_length; // not including newline
- int col;
- int fixed_point;
- int newlines; // can we issue newlines automatically?
- word_list last_word;
-
- void flush_last_word (void);
- int check_space (const char *s, int n);
-};
-
-inline FILE *simple_output::get_file()
-{
- return fp;
-}
-
-#endif
diff --git a/contrib/groff/src/devices/grohtml/output.cpp b/contrib/groff/src/devices/grohtml/output.cpp
deleted file mode 100644
index f25312774aae..000000000000
--- a/contrib/groff/src/devices/grohtml/output.cpp
+++ /dev/null
@@ -1,367 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote output.cpp
- * but it owes a huge amount of ideas and raw code from
- * James Clark (jjc@jclark.com) grops/ps.cpp.
- *
- * output.cpp
- *
- * provide the simple low level output routines needed by html.cpp
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#include <time.h>
-#include "html.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#undef DEBUGGING
-// #define DEBUGGING
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-
-#if defined(DEBUGGING)
-# define FPUTC(X,Y) do { fputc((X),(Y)); fputc((X), stderr); fflush(stderr); } while (0)
-# define FPUTS(X,Y) do { fputs((X),(Y)); fputs((X), stderr); fflush(stderr); } while (0)
-# define PUTC(X,Y) do { putc((X),(Y)); putc((X), stderr); fflush(stderr); } while (0)
-#else
-# define FPUTC(X,Y) do { fputc((X),(Y)); } while (0)
-# define FPUTS(X,Y) do { fputs((X),(Y)); } while (0)
-# define PUTC(X,Y) do { putc((X),(Y)); } while (0)
-#endif
-
-
-/*
- * word - initialise a word and set next to NULL
- */
-
-word::word (const char *w, int n)
- : next(0)
-{
- s = new char[n+1];
- strncpy(s, w, n);
- s[n] = (char)0;
-}
-
-/*
- * destroy word and the string copy.
- */
-
-word::~word ()
-{
- a_delete s;
-}
-
-/*
- * word_list - create an empty word list.
- */
-
-word_list::word_list ()
- : length(0), head(0), tail(0)
-{
-}
-
-/*
- * flush - flush a word list to a FILE, f, and return the
- * length of the buffered string.
- */
-
-int word_list::flush (FILE *f)
-{
- word *t;
- int len=length;
-
- while (head != 0) {
- t = head;
- head = head->next;
- FPUTS(t->s, f);
- delete t;
- }
- head = 0;
- tail = 0;
- length = 0;
-#if defined(DEBUGGING)
- fflush(f); // just for testing
-#endif
- return( len );
-}
-
-/*
- * add_word - adds a word to the outstanding word list.
- */
-
-void word_list::add_word (const char *s, int n)
-{
- if (head == 0) {
- head = new word(s, n);
- tail = head;
- } else {
- tail->next = new word(s, n);
- tail = tail->next;
- }
- length += n;
-}
-
-/*
- * get_length - returns the number of characters buffered
- */
-
-int word_list::get_length (void)
-{
- return( length );
-}
-
-/*
- * the classes and methods for simple_output manipulation
- */
-
-simple_output::simple_output(FILE *f, int n)
-: fp(f), max_line_length(n), col(0), fixed_point(0), newlines(0)
-{
-}
-
-simple_output &simple_output::set_file(FILE *f)
-{
- if (fp)
- fflush(fp);
- fp = f;
- return *this;
-}
-
-simple_output &simple_output::copy_file(FILE *infp)
-{
- int c;
- while ((c = getc(infp)) != EOF)
- PUTC(c, fp);
- return *this;
-}
-
-simple_output &simple_output::end_line()
-{
- flush_last_word();
- if (col != 0) {
- PUTC('\n', fp);
- col = 0;
- }
- return *this;
-}
-
-simple_output &simple_output::special(const char *)
-{
- return *this;
-}
-
-simple_output &simple_output::simple_comment(const char *s)
-{
- flush_last_word();
- if (col != 0)
- PUTC('\n', fp);
- FPUTS("<!-- ", fp);
- FPUTS(s, fp);
- FPUTS(" -->\n", fp);
- col = 0;
- return *this;
-}
-
-simple_output &simple_output::begin_comment(const char *s)
-{
- flush_last_word();
- if (col != 0)
- PUTC('\n', fp);
- col = 0;
- put_string("<!--");
- space_or_newline();
- last_word.add_word(s, strlen(s));
- return *this;
-}
-
-simple_output &simple_output::end_comment()
-{
- flush_last_word();
- space_or_newline();
- put_string("-->").nl();
- return *this;
-}
-
-/*
- * check_newline - checks to see whether we are able to issue
- * a newline and that one is needed.
- */
-
-simple_output &simple_output::check_newline(int n)
-{
- if ((col + n + last_word.get_length() + 1 > max_line_length) && (newlines)) {
- FPUTC('\n', fp);
- col = last_word.flush(fp);
- }
- return *this;
-}
-
-/*
- * space_or_newline - will emit a newline or a space later on
- * depending upon the current column.
- */
-
-simple_output &simple_output::space_or_newline (void)
-{
- if ((col + last_word.get_length() + 1 > max_line_length) && (newlines)) {
- FPUTC('\n', fp);
- if (last_word.get_length() > 0) {
- col = last_word.flush(fp);
- } else {
- col = 0;
- }
- } else {
- if (last_word.get_length() != 0) {
- if (col > 0) {
- FPUTC(' ', fp);
- col++;
- }
- col += last_word.flush(fp);
- }
- }
- return *this;
-}
-
-/*
- * force_nl - forces a newline.
- */
-
-simple_output &simple_output::force_nl (void)
-{
- space_or_newline();
- col += last_word.flush(fp);
- FPUTC('\n', fp);
- col = 0;
- return *this ;
-}
-
-/*
- * nl - writes a newline providing that we
- * are not in the first column.
- */
-
-simple_output &simple_output::nl (void)
-{
- space_or_newline();
- col += last_word.flush(fp);
- FPUTC('\n', fp);
- col = 0;
- return *this ;
-}
-
-simple_output &simple_output::set_fixed_point(int n)
-{
- assert(n >= 0 && n <= 10);
- fixed_point = n;
- return *this;
-}
-
-simple_output &simple_output::put_raw_char(char c)
-{
- col += last_word.flush(fp);
- PUTC(c, fp);
- col++;
- return *this;
-}
-
-simple_output &simple_output::put_string(const char *s, int n)
-{
- last_word.add_word(s, n);
- return *this;
-}
-
-simple_output &simple_output::put_string(const char *s)
-{
- last_word.add_word(s, strlen(s));
- return *this;
-}
-
-simple_output &simple_output::put_string(const string &s)
-{
- last_word.add_word(s.contents(), s.length());
- return *this;
-}
-
-simple_output &simple_output::put_number(int n)
-{
- char buf[1 + INT_DIGITS + 1];
- sprintf(buf, "%d", n);
- put_string(buf);
- return *this;
-}
-
-simple_output &simple_output::put_float(double d)
-{
- char buf[128];
-
- sprintf(buf, "%.4f", d);
- put_string(buf);
- return *this;
-}
-
-simple_output &simple_output::enable_newlines (int auto_newlines)
-{
- check_newline(0);
- newlines = auto_newlines;
- check_newline(0);
- return *this;
-}
-
-/*
- * flush_last_word - flushes the last word and adjusts the
- * col position. It will insert a newline
- * before the last word if allowed and if
- * necessary.
- */
-
-void simple_output::flush_last_word (void)
-{
- int len=last_word.get_length();
-
- if (len > 0) {
- if (newlines) {
- if (col + len + 1 > max_line_length) {
- FPUTS("\n", fp);
- col = 0;
- } else {
- FPUTS(" ", fp);
- col++;
- }
- len += last_word.flush(fp);
- } else {
- FPUTS(" ", fp);
- col++;
- col += last_word.flush(fp);
- }
- }
-}
diff --git a/contrib/groff/src/devices/grohtml/post-html.cpp b/contrib/groff/src/devices/grohtml/post-html.cpp
deleted file mode 100644
index 6834e844f801..000000000000
--- a/contrib/groff/src/devices/grohtml/post-html.cpp
+++ /dev/null
@@ -1,5053 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
- * Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote post-html.cpp
- * but it owes a huge amount of ideas and raw code from
- * James Clark (jjc@jclark.com) grops/ps.cpp.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "html.h"
-#include "html-text.h"
-#include "html-table.h"
-
-#include <time.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-
-extern "C" const char *Version_string;
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-#define MAX_LINE_LENGTH 60 /* maximum characters we want in a line */
-#define SIZE_INCREMENT 2 /* font size increment <big> = +2 */
-#define CENTER_TOLERANCE 2 /* how many pixels off center do we allow */
-#define ANCHOR_TEMPLATE "heading" /* if simple anchor is set we use this */
-#define UNICODE_DESC_START 0x80 /* all character entities above this are */
- /* either encoded by their glyph names or if */
- /* there is no name then we use &#nnn; */
-typedef enum {CENTERED, LEFT, RIGHT, INLINE} TAG_ALIGNMENT;
-typedef enum {col_tag, tab_tag, tab0_tag, none} colType;
-
-#undef DEBUG_TABLES
-// #define DEBUG_TABLES
-
-/*
- * prototypes
- */
-
-char *get_html_translation (font *f, const string &name);
-int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, int b, int and_single);
-
-
-static int auto_links = TRUE; /* by default we enable automatic links at */
- /* top of the document. */
-static int auto_rule = TRUE; /* by default we enable an automatic rule */
- /* at the top and bottom of the document */
-static int simple_anchors = FALSE; /* default to anchors with heading text */
-static int manufacture_headings = FALSE; /* default is to use the Hn html headings, */
- /* rather than manufacture our own. */
-static color *default_background = NULL; /* has user requested initial bg color? */
-static string job_name; /* if set then the output is split into */
- /* multiple files with `job_name'-%d.html */
-static int multiple_files = FALSE; /* must we the output be divided into */
- /* multiple html files, one for each */
- /* heading? */
-static int base_point_size = 0; /* which troff font size maps onto html */
- /* size 3? */
-static int split_level = 2; /* what heading level to split at? */
-static string head_info; /* user supplied information to be placed */
- /* into <head> </head> */
-
-
-/*
- * start with a few favorites
- */
-
-void stop () {}
-
-static int min (int a, int b)
-{
- if (a < b)
- return a;
- else
- return b;
-}
-
-static int max (int a, int b)
-{
- if (a > b)
- return a;
- else
- return b;
-}
-
-/*
- * is_intersection - returns TRUE if range a1..a2 intersects with b1..b2
- */
-
-static int is_intersection (int a1, int a2, int b1, int b2)
-{
- // easier to prove NOT outside limits
- return ! ((a1 > b2) || (a2 < b1));
-}
-
-/*
- * is_digit - returns TRUE if character, ch, is a digit.
- */
-
-static int is_digit (char ch)
-{
- return (ch >= '0') && (ch <= '9');
-}
-
-/*
- * the classes and methods for maintaining a list of files.
- */
-
-struct file {
- FILE *fp;
- file *next;
- int new_output_file;
- int require_links;
- string output_file_name;
-
- file (FILE *f);
-};
-
-/*
- * file - initialize all fields to NULL
- */
-
-file::file (FILE *f)
- : fp(f), next(NULL), new_output_file(FALSE),
- require_links(FALSE), output_file_name("")
-{
-}
-
-class files {
-public:
- files ();
- FILE *get_file (void);
- void start_of_list (void);
- void move_next (void);
- void add_new_file (FILE *f);
- void set_file_name (string name);
- void set_links_required (void);
- int are_links_required (void);
- int is_new_output_file (void);
- string file_name (void);
- string next_file_name (void);
-private:
- file *head;
- file *tail;
- file *ptr;
-};
-
-/*
- * files - create an empty list of files.
- */
-
-files::files ()
- : head(NULL), tail(NULL), ptr(NULL)
-{
-}
-
-/*
- * get_file - returns the FILE associated with ptr.
- */
-
-FILE *files::get_file (void)
-{
- if (ptr)
- return ptr->fp;
- else
- return NULL;
-}
-
-/*
- * start_of_list - reset the ptr to the start of the list.
- */
-
-void files::start_of_list (void)
-{
- ptr = head;
-}
-
-/*
- * move_next - moves the ptr to the next element on the list.
- */
-
-void files::move_next (void)
-{
- if (ptr != NULL)
- ptr = ptr->next;
-}
-
-/*
- * add_new_file - adds a new file, f, to the list.
- */
-
-void files::add_new_file (FILE *f)
-{
- if (head == NULL) {
- head = new file(f);
- tail = head;
- } else {
- tail->next = new file(f);
- tail = tail->next;
- }
- ptr = tail;
-}
-
-/*
- * set_file_name - sets the final file name to contain the html
- * data to name.
- */
-
-void files::set_file_name (string name)
-{
- if (ptr != NULL) {
- ptr->output_file_name = name;
- ptr->new_output_file = TRUE;
- }
-}
-
-/*
- * set_links_required - issue links when processing this component
- * of the file.
- */
-
-void files::set_links_required (void)
-{
- if (ptr != NULL)
- ptr->require_links = TRUE;
-}
-
-/*
- * are_links_required - returns TRUE if this section of the file
- * requires that links should be issued.
- */
-
-int files::are_links_required (void)
-{
- if (ptr != NULL)
- return ptr->require_links;
- return FALSE;
-}
-
-/*
- * is_new_output_file - returns TRUE if this component of the file
- * is the start of a new output file.
- */
-
-int files::is_new_output_file (void)
-{
- if (ptr != NULL)
- return ptr->new_output_file;
- return FALSE;
-}
-
-/*
- * file_name - returns the name of the file.
- */
-
-string files::file_name (void)
-{
- if (ptr != NULL)
- return ptr->output_file_name;
- return string("");
-}
-
-/*
- * next_file_name - returns the name of the next file.
- */
-
-string files::next_file_name (void)
-{
- if (ptr != NULL && ptr->next != NULL)
- return ptr->next->output_file_name;
- return string("");
-}
-
-/*
- * the class and methods for styles
- */
-
-struct style {
- font *f;
- int point_size;
- int font_no;
- int height;
- int slant;
- color col;
- style ();
- style (font *, int, int, int, int, color);
- int operator == (const style &) const;
- int operator != (const style &) const;
-};
-
-style::style()
- : f(NULL)
-{
-}
-
-style::style(font *p, int sz, int h, int sl, int no, color c)
- : f(p), point_size(sz), font_no(no), height(h), slant(sl), col(c)
-{
-}
-
-int style::operator==(const style &s) const
-{
- return (f == s.f && point_size == s.point_size
- && height == s.height && slant == s.slant && col == s.col);
-}
-
-int style::operator!=(const style &s) const
-{
- return !(*this == s);
-}
-
-/*
- * the class and methods for retaining ascii text
- */
-
-struct char_block {
- enum { SIZE = 256 };
- char *buffer;
- int used;
- char_block *next;
-
- char_block();
- char_block(int length);
- ~char_block();
-};
-
-char_block::char_block()
-: buffer(NULL), used(0), next(NULL)
-{
-}
-
-char_block::char_block(int length)
-: used(0), next(NULL)
-{
- buffer = new char[max(length, char_block::SIZE)];
- if (buffer == NULL)
- fatal("out of memory error");
-}
-
-char_block::~char_block()
-{
- if (buffer != NULL)
- a_delete buffer;
-}
-
-class char_buffer {
-public:
- char_buffer();
- ~char_buffer();
- char *add_string(const char *, unsigned int);
- char *add_string(const string &);
-private:
- char_block *head;
- char_block *tail;
-};
-
-char_buffer::char_buffer()
-: head(NULL), tail(NULL)
-{
-}
-
-char_buffer::~char_buffer()
-{
- while (head != NULL) {
- char_block *temp = head;
- head = head->next;
- delete temp;
- }
-}
-
-char *char_buffer::add_string (const char *s, unsigned int length)
-{
- int i=0;
- unsigned int old_used;
-
- if (s == NULL || length == 0)
- return NULL;
-
- if (tail == NULL) {
- tail = new char_block(length+1);
- head = tail;
- } else {
- if (tail->used + length+1 > char_block::SIZE) {
- tail->next = new char_block(length+1);
- tail = tail->next;
- }
- }
-
- old_used = tail->used;
- do {
- tail->buffer[tail->used] = s[i];
- tail->used++;
- i++;
- length--;
- } while (length>0);
-
- // add terminating nul character
-
- tail->buffer[tail->used] = '\0';
- tail->used++;
-
- // and return start of new string
-
- return &tail->buffer[old_used];
-}
-
-char *char_buffer::add_string (const string &s)
-{
- return add_string(s.contents(), s.length());
-}
-
-/*
- * the classes and methods for maintaining glyph positions.
- */
-
-class text_glob {
-public:
- void text_glob_html (style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void text_glob_special (style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void text_glob_line (style *s,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal,
- int thickness);
- void text_glob_auto_image(style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void text_glob_tag (style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
-
- text_glob (void);
- ~text_glob (void);
- int is_a_line (void);
- int is_a_tag (void);
- int is_eol (void);
- int is_auto_img (void);
- int is_br (void);
- int is_in (void);
- int is_po (void);
- int is_ti (void);
- int is_ll (void);
- int is_ce (void);
- int is_tl (void);
- int is_eo_tl (void);
- int is_eol_ce (void);
- int is_col (void);
- int is_tab (void);
- int is_tab0 (void);
- int is_ta (void);
- int is_tab_ts (void);
- int is_tab_te (void);
- int is_nf (void);
- int is_fi (void);
- int is_eo_h (void);
- int get_arg (void);
- int get_tab_args (char *align);
-
- void remember_table (html_table *t);
- html_table *get_table (void);
-
- style text_style;
- const char *text_string;
- unsigned int text_length;
- int minv, minh, maxv, maxh;
- int is_tag; // is this a .br, .sp, .tl etc
- int is_img_auto; // image created by eqn delim
- int is_special; // text has come via 'x X html:'
- int is_line; // is the command a <line>?
- int thickness; // the thickness of a line
- html_table *tab; // table description
-
-private:
- text_glob (style *s, const char *str, int length,
- int min_vertical , int min_horizontal,
- int max_vertical , int max_horizontal,
- bool is_troff_command,
- bool is_auto_image, bool is_special_command,
- bool is_a_line , int thickness);
-};
-
-text_glob::text_glob (style *s, const char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal,
- bool is_troff_command,
- bool is_auto_image, bool is_special_command,
- bool is_a_line_flag, int line_thickness)
- : text_style(*s), text_string(str), text_length(length),
- minv(min_vertical), minh(min_horizontal), maxv(max_vertical), maxh(max_horizontal),
- is_tag(is_troff_command), is_img_auto(is_auto_image), is_special(is_special_command),
- is_line(is_a_line_flag), thickness(line_thickness), tab(NULL)
-{
-}
-
-text_glob::text_glob ()
- : text_string(NULL), text_length(0), minv(-1), minh(-1), maxv(-1), maxh(-1),
- is_tag(FALSE), is_special(FALSE), is_line(FALSE), thickness(0), tab(NULL)
-{
-}
-
-text_glob::~text_glob ()
-{
- if (tab != NULL)
- delete tab;
-}
-
-/*
- * text_glob_html - used to place html text into the glob buffer.
- */
-
-void text_glob::text_glob_html (style *s, char *str, int length,
- int min_vertical , int min_horizontal,
- int max_vertical , int max_horizontal)
-{
- text_glob *g = new text_glob(s, str, length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- FALSE, FALSE, FALSE, FALSE, 0);
- *this = *g;
- delete g;
-}
-
-/*
- * text_glob_html - used to place html specials into the glob buffer.
- * This text is essentially html commands coming through
- * from the macro sets, with special designated sequences of
- * characters translated into html. See add_and_encode.
- */
-
-void text_glob::text_glob_special (style *s, char *str, int length,
- int min_vertical , int min_horizontal,
- int max_vertical , int max_horizontal)
-{
- text_glob *g = new text_glob(s, str, length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- FALSE, FALSE, TRUE, FALSE, 0);
- *this = *g;
- delete g;
-}
-
-/*
- * text_glob_line - record horizontal draw line commands.
- */
-
-void text_glob::text_glob_line (style *s,
- int min_vertical , int min_horizontal,
- int max_vertical , int max_horizontal,
- int thickness_value)
-{
- text_glob *g = new text_glob(s, "", 0,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- FALSE, FALSE, FALSE, TRUE, thickness_value);
- *this = *g;
- delete g;
-}
-
-/*
- * text_glob_auto_image - record the presence of a .auto-image tag command.
- * Used to mark that an image has been created automatically
- * by a preprocessor and (pre-grohtml/troff) combination.
- * Under some circumstances images may not be created.
- * (consider .EQ
- * delim $$
- * .EN
- * .TS
- * tab(!), center;
- * l!l.
- * $1 over x$!recripical of x
- * .TE
- *
- * the first auto-image marker is created via .EQ/.EN pair
- * and no image is created.
- * The second auto-image marker occurs at $1 over x$
- * Currently this image will not be created
- * as the whole of the table is created as an image.
- * (Once html tables are handled by grohtml this will change.
- * Shortly this will be the case).
- */
-
-void text_glob::text_glob_auto_image(style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- text_glob *g = new text_glob(s, str, length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- TRUE, TRUE, FALSE, FALSE, 0);
- *this = *g;
- delete g;
-}
-
-/*
- * text_glob_tag - records a troff tag.
- */
-
-void text_glob::text_glob_tag (style *s, char *str, int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- text_glob *g = new text_glob(s, str, length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- TRUE, FALSE, FALSE, FALSE, 0);
- *this = *g;
- delete g;
-}
-
-/*
- * is_a_line - returns TRUE if glob should be converted into an <hr>
- */
-
-int text_glob::is_a_line (void)
-{
- return is_line;
-}
-
-/*
- * is_a_tag - returns TRUE if glob contains a troff directive.
- */
-
-int text_glob::is_a_tag (void)
-{
- return is_tag;
-}
-
-/*
- * is_eol - returns TRUE if glob contains the tag eol
- */
-
-int text_glob::is_eol (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.eol") == 0);
-}
-
-/*
- * is_eol_ce - returns TRUE if glob contains the tag eol.ce
- */
-
-int text_glob::is_eol_ce (void)
-{
- return is_tag && (strcmp(text_string, "devtag:eol.ce") == 0);
-}
-
-/*
- * is_tl - returns TRUE if glob contains the tag .tl
- */
-
-int text_glob::is_tl (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.tl") == 0);
-}
-
-/*
- * is_eo_tl - returns TRUE if glob contains the tag eo.tl
- */
-
-int text_glob::is_eo_tl (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.eo.tl") == 0);
-}
-
-/*
- * is_nf - returns TRUE if glob contains the tag .fi 0
- */
-
-int text_glob::is_nf (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.fi",
- strlen("devtag:.fi")) == 0) &&
- (get_arg() == 0);
-}
-
-/*
- * is_fi - returns TRUE if glob contains the tag .fi 1
- */
-
-int text_glob::is_fi (void)
-{
- return( is_tag && (strncmp(text_string, "devtag:.fi",
- strlen("devtag:.fi")) == 0) &&
- (get_arg() == 1) );
-}
-
-/*
- * is_eo_h - returns TRUE if glob contains the tag .eo.h
- */
-
-int text_glob::is_eo_h (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.eo.h") == 0);
-}
-
-/*
- * is_ce - returns TRUE if glob contains the tag .ce
- */
-
-int text_glob::is_ce (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.ce",
- strlen("devtag:.ce")) == 0);
-}
-
-/*
- * is_in - returns TRUE if glob contains the tag .in
- */
-
-int text_glob::is_in (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.in ",
- strlen("devtag:.in ")) == 0);
-}
-
-/*
- * is_po - returns TRUE if glob contains the tag .po
- */
-
-int text_glob::is_po (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.po ",
- strlen("devtag:.po ")) == 0);
-}
-
-/*
- * is_ti - returns TRUE if glob contains the tag .ti
- */
-
-int text_glob::is_ti (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.ti ",
- strlen("devtag:.ti ")) == 0);
-}
-
-/*
- * is_ll - returns TRUE if glob contains the tag .ll
- */
-
-int text_glob::is_ll (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.ll ",
- strlen("devtag:.ll ")) == 0);
-}
-
-/*
- * is_col - returns TRUE if glob contains the tag .col
- */
-
-int text_glob::is_col (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.col",
- strlen("devtag:.col")) == 0);
-}
-
-/*
- * is_tab_ts - returns TRUE if glob contains the tag .tab_ts
- */
-
-int text_glob::is_tab_ts (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.tab-ts") == 0);
-}
-
-/*
- * is_tab_te - returns TRUE if glob contains the tag .tab_te
- */
-
-int text_glob::is_tab_te (void)
-{
- return is_tag && (strcmp(text_string, "devtag:.tab-te") == 0);
-}
-
-/*
- * is_ta - returns TRUE if glob contains the tag .ta
- */
-
-int text_glob::is_ta (void)
-{
- return is_tag && (strncmp(text_string, "devtag:.ta ",
- strlen("devtag:.ta ")) == 0);
-}
-
-/*
- * is_tab - returns TRUE if glob contains the tag tab
- */
-
-int text_glob::is_tab (void)
-{
- return is_tag && (strncmp(text_string, "devtag:tab ",
- strlen("devtag:tab ")) == 0);
-}
-
-/*
- * is_tab0 - returns TRUE if glob contains the tag tab0
- */
-
-int text_glob::is_tab0 (void)
-{
- return is_tag && (strncmp(text_string, "devtag:tab0",
- strlen("devtag:tab0")) == 0);
-}
-
-/*
- * is_auto_img - returns TRUE if the glob contains an automatically
- * generated image.
- */
-
-int text_glob::is_auto_img (void)
-{
- return is_img_auto;
-}
-
-/*
- * is_br - returns TRUE if the glob is a tag containing a .br
- * or an implied .br. Note that we do not include .nf or .fi
- * as grohtml will place a .br after these commands if they
- * should break the line.
- */
-
-int text_glob::is_br (void)
-{
- return is_a_tag() && ((strcmp ("devtag:.br", text_string) == 0) ||
- (strncmp("devtag:.sp", text_string,
- strlen("devtag:.sp")) == 0));
-}
-
-int text_glob::get_arg (void)
-{
- if (strncmp("devtag:", text_string, strlen("devtag:")) == 0) {
- const char *p = text_string;
-
- while ((*p != (char)0) && (!isspace(*p)))
- p++;
- while ((*p != (char)0) && (isspace(*p)))
- p++;
- if (*p == (char)0)
- return -1;
- return atoi(p);
- }
- return -1;
-}
-
-/*
- * get_tab_args - returns the tab position and alignment of the tab tag
- */
-
-int text_glob::get_tab_args (char *align)
-{
- if (strncmp("devtag:", text_string, strlen("devtag:")) == 0) {
- const char *p = text_string;
-
- // firstly the alignment C|R|L
- while ((*p != (char)0) && (!isspace(*p)))
- p++;
- while ((*p != (char)0) && (isspace(*p)))
- p++;
- *align = *p;
- // now the int value
- while ((*p != (char)0) && (!isspace(*p)))
- p++;
- while ((*p != (char)0) && (isspace(*p)))
- p++;
- if (*p == (char)0)
- return -1;
- return atoi(p);
- }
- return -1;
-}
-
-/*
- * remember_table - saves table, t, in the text_glob.
- */
-
-void text_glob::remember_table (html_table *t)
-{
- if (tab != NULL)
- delete tab;
- tab = t;
-}
-
-/*
- * get_table - returns the stored table description.
- */
-
-html_table *text_glob::get_table (void)
-{
- return tab;
-}
-
-/*
- * the class and methods used to construct ordered double linked
- * lists. In a previous implementation we used templates via
- * #include "ordered-list.h", but this does assume that all C++
- * compilers can handle this feature. Pragmatically it is safer to
- * assume this is not the case.
- */
-
-struct element_list {
- element_list *right;
- element_list *left;
- text_glob *datum;
- int lineno;
- int minv, minh, maxv, maxh;
-
- element_list (text_glob *d,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- element_list ();
- ~element_list ();
-};
-
-element_list::element_list ()
- : right(0), left(0), datum(0), lineno(0), minv(-1), minh(-1), maxv(-1), maxh(-1)
-{
-}
-
-/*
- * element_list - create a list element assigning the datum and region parameters.
- */
-
-element_list::element_list (text_glob *in,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
- : right(0), left(0), datum(in), lineno(line_number),
- minv(min_vertical), minh(min_horizontal), maxv(max_vertical), maxh(max_horizontal)
-{
-}
-
-element_list::~element_list ()
-{
- if (datum != NULL)
- delete datum;
-}
-
-class list {
-public:
- list ();
- ~list ();
- int is_less (element_list *a, element_list *b);
- void add (text_glob *in,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void sub_move_right (void);
- void move_right (void);
- void move_left (void);
- int is_empty (void);
- int is_equal_to_tail (void);
- int is_equal_to_head (void);
- void start_from_head (void);
- void start_from_tail (void);
- void insert (text_glob *in);
- void move_to (text_glob *in);
- text_glob *move_right_get_data (void);
- text_glob *move_left_get_data (void);
- text_glob *get_data (void);
-private:
- element_list *head;
- element_list *tail;
- element_list *ptr;
-};
-
-/*
- * list - construct an empty list.
- */
-
-list::list ()
- : head(NULL), tail(NULL), ptr(NULL)
-{
-}
-
-/*
- * ~list - destroy a complete list.
- */
-
-list::~list()
-{
- element_list *temp=head;
-
- do {
- temp = head;
- if (temp != NULL) {
- head = head->right;
- delete temp;
- }
- } while ((head != NULL) && (head != tail));
-}
-
-/*
- * is_less - returns TRUE if a is left of b if on the same line or
- * if a is higher up the page than b.
- */
-
-int list::is_less (element_list *a, element_list *b)
-{
- // was if (is_intersection(a->minv+1, a->maxv-1, b->minv+1, b->maxv-1)) {
- if (a->lineno < b->lineno) {
- return( TRUE );
- } else if (a->lineno > b->lineno) {
- return( FALSE );
- } else if (is_intersection(a->minv, a->maxv, b->minv, b->maxv)) {
- return( a->minh < b->minh );
- } else {
- return( a->maxv < b->maxv );
- }
-}
-
-/*
- * add - adds a datum to the list in the order specified by the
- * region position.
- */
-
-void list::add (text_glob *in, int line_number, int min_vertical, int min_horizontal, int max_vertical, int max_horizontal)
-{
- // create a new list element with datum and position fields initialized
- element_list *t = new element_list(in, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
- element_list *last;
-
-#if 0
- fprintf(stderr, "[%s %d,%d,%d,%d] ",
- in->text_string, min_vertical, min_horizontal, max_vertical, max_horizontal);
- fflush(stderr);
-#endif
-
- if (head == NULL) {
- head = t;
- tail = t;
- ptr = t;
- t->left = t;
- t->right = t;
- } else {
- last = tail;
-
- while ((last != head) && (is_less(t, last)))
- last = last->left;
-
- if (is_less(t, last)) {
- t->right = last;
- last->left->right = t;
- t->left = last->left;
- last->left = t;
- // now check for a new head
- if (last == head)
- head = t;
- } else {
- // add t beyond last
- t->right = last->right;
- t->left = last;
- last->right->left = t;
- last->right = t;
- // now check for a new tail
- if (last == tail)
- tail = t;
- }
- }
-}
-
-/*
- * sub_move_right - removes the element which is currently pointed to by ptr
- * from the list and moves ptr to the right.
- */
-
-void list::sub_move_right (void)
-{
- element_list *t=ptr->right;
-
- if (head == tail) {
- head = NULL;
- if (tail != NULL)
- delete tail;
-
- tail = NULL;
- ptr = NULL;
- } else {
- if (head == ptr)
- head = head->right;
- if (tail == ptr)
- tail = tail->left;
- ptr->left->right = ptr->right;
- ptr->right->left = ptr->left;
- ptr = t;
- }
-}
-
-/*
- * start_from_head - assigns ptr to the head.
- */
-
-void list::start_from_head (void)
-{
- ptr = head;
-}
-
-/*
- * start_from_tail - assigns ptr to the tail.
- */
-
-void list::start_from_tail (void)
-{
- ptr = tail;
-}
-
-/*
- * is_empty - returns TRUE if the list has no elements.
- */
-
-int list::is_empty (void)
-{
- return head == NULL;
-}
-
-/*
- * is_equal_to_tail - returns TRUE if the ptr equals the tail.
- */
-
-int list::is_equal_to_tail (void)
-{
- return ptr == tail;
-}
-
-/*
- * is_equal_to_head - returns TRUE if the ptr equals the head.
- */
-
-int list::is_equal_to_head (void)
-{
- return ptr == head;
-}
-
-/*
- * move_left - moves the ptr left.
- */
-
-void list::move_left (void)
-{
- ptr = ptr->left;
-}
-
-/*
- * move_right - moves the ptr right.
- */
-
-void list::move_right (void)
-{
- ptr = ptr->right;
-}
-
-/*
- * get_datum - returns the datum referenced via ptr.
- */
-
-text_glob* list::get_data (void)
-{
- return ptr->datum;
-}
-
-/*
- * move_right_get_data - returns the datum referenced via ptr and moves
- * ptr right.
- */
-
-text_glob* list::move_right_get_data (void)
-{
- ptr = ptr->right;
- if (ptr == head)
- return NULL;
- else
- return ptr->datum;
-}
-
-/*
- * move_left_get_data - returns the datum referenced via ptr and moves
- * ptr right.
- */
-
-text_glob* list::move_left_get_data (void)
-{
- ptr = ptr->left;
- if (ptr == tail)
- return NULL;
- else
- return ptr->datum;
-}
-
-/*
- * insert - inserts data after the current position.
- */
-
-void list::insert (text_glob *in)
-{
- if (is_empty())
- fatal("list must not be empty if we are inserting data");
- else {
- if (ptr == NULL)
- ptr = head;
-
- element_list *t = new element_list(in, ptr->lineno, ptr->minv, ptr->minh, ptr->maxv, ptr->maxh);
- if (ptr == tail)
- tail = t;
- ptr->right->left = t;
- t->right = ptr->right;
- ptr->right = t;
- t->left = ptr;
- }
-}
-
-/*
- * move_to - moves the current position to the point where data, in, exists.
- * This is an expensive method and should be used sparingly.
- */
-
-void list::move_to (text_glob *in)
-{
- ptr = head;
- while (ptr != tail && ptr->datum != in)
- ptr = ptr->right;
-}
-
-/*
- * page class and methods
- */
-
-class page {
-public:
- page (void);
- void add (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void add_tag (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void add_and_encode (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal,
- int is_tag);
- void add_line (style *s,
- int line_number,
- int x1, int y1, int x2, int y2,
- int thickness);
- void insert_tag (const string &str);
- void dump_page (void); // debugging method
-
- // and the data
-
- list glyphs; // position of glyphs and specials on page
- char_buffer buffer; // all characters for this page
-};
-
-page::page()
-{
-}
-
-/*
- * insert_tag - inserts a tag after the current position.
- */
-
-void page::insert_tag (const string &str)
-{
- if (str.length() > 0) {
- text_glob *g=new text_glob();
- text_glob *f=glyphs.get_data();
- g->text_glob_tag(&f->text_style, buffer.add_string(str), str.length(),
- f->minv, f->minh, f->maxv, f->maxh);
- glyphs.insert(g);
- }
-}
-
-/*
- * add - add html text to the list of glyphs.
- */
-
-void page::add (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- if (str.length() > 0) {
- text_glob *g=new text_glob();
- g->text_glob_html(s, buffer.add_string(str), str.length(),
- min_vertical, min_horizontal, max_vertical, max_horizontal);
- glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
- }
-}
-
-/*
- * add_tag - adds a troff tag, for example: .tl .sp .br
- */
-
-void page::add_tag (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- if (str.length() > 0) {
- text_glob *g;
-
- if (strncmp((str+'\0').contents(), "devtag:.auto-image",
- strlen("devtag:.auto-image")) == 0) {
- g = new text_glob();
- g->text_glob_auto_image(s, buffer.add_string(str), str.length(),
- min_vertical, min_horizontal, max_vertical, max_horizontal);
- } else {
- g = new text_glob();
- g->text_glob_tag(s, buffer.add_string(str), str.length(),
- min_vertical, min_horizontal, max_vertical, max_horizontal);
- }
- glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
- }
-}
-
-/*
- * add_line - adds the <line> primitive providing that y1==y2
- */
-
-void page::add_line (style *s,
- int line_number,
- int x_1, int y_1, int x_2, int y_2,
- int thickness)
-{
- if (y_1 == y_2) {
- text_glob *g = new text_glob();
- g->text_glob_line(s,
- min(y_1, y_2), min(x_1, x_2),
- max(y_1, y_2), max(x_1, x_2),
- thickness);
- glyphs.add(g, line_number,
- min(y_1, y_2), min(x_1, x_2),
- max(y_1, y_2), max(x_1, x_2));
- }
-}
-
-/*
- * to_unicode - returns a unicode translation of int, ch.
- */
-
-static char *to_unicode (unsigned int ch)
-{
- static char buf[30];
-
- sprintf(buf, "&#%u;", ch);
- return buf;
-}
-
-/*
- * add_and_encode - adds a special string to the page, it translates the string
- * into html glyphs. The special string will have come from x X html:
- * and can contain troff character encodings which appear as
- * \(char\). A sequence of \\ represents \.
- * So for example we can write:
- * "cost = \(Po\)3.00 file = \\foo\\bar"
- * which is translated into:
- * "cost = &pound;3.00 file = \foo\bar"
- */
-
-void page::add_and_encode (style *s, const string &str,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal,
- int is_tag)
-{
- string html_string;
- char *html_glyph;
- int i=0;
-
- if (s->f == NULL)
- return;
- while (i < str.length()) {
- if ((i+1<str.length()) && (str.substring(i, 2) == string("\\("))) {
- // start of escape
- i += 2; // move over \(
- int a = i;
- while ((i+1<str.length()) && (str.substring(i, 2) != string("\\)"))) {
- i++;
- }
- int n = i;
- if ((i+1<str.length()) && (str.substring(i, 2) == string("\\)")))
- i++;
- else
- n = -1;
- if (n > 0) {
- string troff_charname = str.substring(a, n-a);
- html_glyph = get_html_translation(s->f, troff_charname);
- if (html_glyph)
- html_string += html_glyph;
- else {
- int idx=s->f->name_to_index((troff_charname + '\0').contents());
-
- if (s->f->contains(idx) && (idx != 0))
- html_string += s->f->get_code(idx);
- }
- }
- } else
- html_string += str[i];
- i++;
- }
- if (html_string.length() > 0) {
- text_glob *g=new text_glob();
- if (is_tag)
- g->text_glob_tag(s, buffer.add_string(html_string),
- html_string.length(),
- min_vertical, min_horizontal,
- max_vertical, max_horizontal);
- else
- g->text_glob_special(s, buffer.add_string(html_string),
- html_string.length(),
- min_vertical, min_horizontal,
- max_vertical, max_horizontal);
- glyphs.add(g, line_number, min_vertical,
- min_horizontal, max_vertical, max_horizontal);
- }
-}
-
-/*
- * dump_page - dump the page contents for debugging purposes.
- */
-
-void page::dump_page(void)
-{
-#if defined(DEBUG_TABLES)
- text_glob *old_pos = glyphs.get_data();
- text_glob *g;
-
- printf("\n<!--\n");
- printf("\n\ndebugging start\n");
- glyphs.start_from_head();
- do {
- g = glyphs.get_data();
- if (g->is_tab_ts()) {
- printf("\n\n");
- if (g->get_table() != NULL)
- g->get_table()->dump_table();
- }
- printf("%s ", g->text_string);
- if (g->is_tab_te())
- printf("\n\n");
- glyphs.move_right();
- } while (! glyphs.is_equal_to_head());
- glyphs.move_to(old_pos);
- printf("\ndebugging end\n\n");
- printf("\n-->\n");
- fflush(stdout);
-#endif
-}
-
-/*
- * font classes and methods
- */
-
-class html_font : public font {
- html_font(const char *);
-public:
- int encoding_index;
- char *encoding;
- char *reencoded_name;
- ~html_font();
- static html_font *load_html_font(const char *);
-};
-
-html_font *html_font::load_html_font(const char *s)
-{
- html_font *f = new html_font(s);
- if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
-}
-
-html_font::html_font(const char *nm)
-: font(nm)
-{
-}
-
-html_font::~html_font()
-{
-}
-
-/*
- * a simple class to contain the header to this document
- */
-
-class title_desc {
-public:
- title_desc ();
- ~title_desc ();
-
- int has_been_written;
- int has_been_found;
- int with_h1;
- string text;
-};
-
-
-title_desc::title_desc ()
- : has_been_written(FALSE), has_been_found(FALSE), with_h1(FALSE)
-{
-}
-
-title_desc::~title_desc ()
-{
-}
-
-class header_desc {
-public:
- header_desc ();
- ~header_desc ();
-
- int no_of_level_one_headings; // how many .SH or .NH 1 have we found?
- int no_of_headings; // how many headings have we found?
- char_buffer headings; // all the headings used in the document
- list headers; // list of headers built from .NH and .SH
- list header_filename; // in which file is this header?
- int header_level; // current header level
- int written_header; // have we written the header yet?
- string header_buffer; // current header text
-
- void write_headings (FILE *f, int force);
-};
-
-header_desc::header_desc ()
- : no_of_level_one_headings(0), no_of_headings(0),
- header_level(2), written_header(0)
-{
-}
-
-header_desc::~header_desc ()
-{
-}
-
-/*
- * write_headings - emits a list of links for the headings in this document
- */
-
-void header_desc::write_headings (FILE *f, int force)
-{
- text_glob *g;
-
- if (auto_links || force) {
- if (! headers.is_empty()) {
- int h=1;
-
- headers.start_from_head();
- header_filename.start_from_head();
- do {
- g = headers.get_data();
- fputs("<a href=\"", f);
- if (multiple_files && (! header_filename.is_empty())) {
- text_glob *fn = header_filename.get_data();
- fputs(fn->text_string, f);
- }
- fputs("#", f);
- if (simple_anchors) {
- string buffer(ANCHOR_TEMPLATE);
-
- buffer += as_string(h);
- buffer += '\0';
- fputs(buffer.contents(), f);
- } else
- fputs(g->text_string, f);
- h++;
- fputs("\">", f);
- fputs(g->text_string, f);
- fputs("</a><br>\n", f);
- headers.move_right();
- if (multiple_files && (! header_filename.is_empty()))
- header_filename.move_right();
- } while (! headers.is_equal_to_head());
- fputs("\n", f);
- }
- }
-}
-
-struct assert_pos {
- assert_pos *next;
- const char *val;
- const char *id;
-};
-
-class assert_state {
-public:
- assert_state ();
- ~assert_state ();
-
- void addx (const char *c, const char *i, const char *v,
- const char *f, const char *l);
- void addy (const char *c, const char *i, const char *v,
- const char *f, const char *l);
- void build(const char *c, const char *v,
- const char *f, const char *l);
- void check_br (int br);
- void check_ce (int ce);
- void check_fi (int fi);
- void check_sp (int sp);
- void reset (void);
-
-private:
- int check_br_flag;
- int check_ce_flag;
- int check_fi_flag;
- int check_sp_flag;
- const char *val_br;
- const char *val_ce;
- const char *val_fi;
- const char *val_sp;
- const char *file_br;
- const char *file_ce;
- const char *file_fi;
- const char *file_sp;
- const char *line_br;
- const char *line_ce;
- const char *line_fi;
- const char *line_sp;
-
- assert_pos *xhead;
- assert_pos *yhead;
-
- void add (assert_pos **h,
- const char *c, const char *i, const char *v,
- const char *f, const char *l);
- void compare(assert_pos *t,
- const char *v, const char *f, const char *l);
- void close (const char *c);
- void set (const char *c, const char *v,
- const char *f, const char *l);
- void check_value (const char *s, int v, const char *name,
- const char *f, const char *l, int *flag);
- int check_value_error (int c, int v, const char *s,
- const char *name,
- const char *f, const char *l, int flag);
-};
-
-assert_state::assert_state ()
-{
- reset();
- val_br = NULL;
- val_ce = NULL;
- val_fi = NULL;
- val_sp = NULL;
- file_br = NULL;
- file_ce = NULL;
- file_fi = NULL;
- file_sp = NULL;
- line_br = NULL;
- line_ce = NULL;
- line_fi = NULL;
- line_sp = NULL;
- xhead = NULL;
- yhead = NULL;
-}
-
-assert_state::~assert_state ()
-{
- assert_pos *t;
-
- while (xhead != NULL) {
- t = xhead;
- xhead = xhead->next;
- a_delete (char *)t->val;
- a_delete (char *)t->id;
- delete t;
- }
- while (yhead != NULL) {
- t = yhead;
- yhead = yhead->next;
- a_delete (char *)t->val;
- a_delete (char *)t->id;
- delete t;
- }
-}
-
-void assert_state::reset (void)
-{
- check_br_flag = 0;
- check_ce_flag = 0;
- check_fi_flag = 0;
- check_sp_flag = 0;
-}
-
-void assert_state::add (assert_pos **h,
- const char *c, const char *i, const char *v,
- const char *f, const char *l)
-{
- assert_pos *t = *h;
-
- while (t != NULL) {
- if (strcmp(t->id, i) == 0)
- break;
- t = t->next;
- }
- if (t != NULL && v != NULL && (v[0] != '='))
- compare(t, v, f, l);
- else {
- if (t == NULL) {
- t = new assert_pos;
- t->next = *h;
- (*h) = t;
- }
- if (v == NULL || v[0] != '=') {
- if (f == NULL)
- f = "stdin";
- if (l == NULL)
- l = "<none>";
- if (v == NULL)
- v = "no value at all";
- fprintf(stderr, "%s:%s:error in assert format of id=%s expecting value to be prefixed with an `=' got %s\n",
- f, l, i, v);
- }
- t->id = i;
- t->val = v;
- a_delete (char *)c;
- a_delete (char *)f;
- a_delete (char *)l;
- }
-}
-
-void assert_state::addx (const char *c, const char *i, const char *v,
- const char *f, const char *l)
-{
- add(&xhead, c, i, v, f, l);
-}
-
-void assert_state::addy (const char *c, const char *i, const char *v,
- const char *f, const char *l)
-{
- add(&yhead, c, i, v, f, l);
-}
-
-void assert_state::compare(assert_pos *t,
- const char *v, const char *f, const char *l)
-{
- const char *s=t->val;
-
- while ((*v) == '=')
- v++;
- while ((*s) == '=')
- s++;
-
- if (strcmp(v, s) != 0) {
- if (f == NULL)
- f = "stdin";
- if (l == NULL)
- l = "<none>";
- fprintf(stderr, "%s:%s: grohtml assertion failed at id%s expecting %s and was given %s\n",
- f, l, t->id, s, v);
- }
-}
-
-void assert_state::close (const char *c)
-{
- if (strcmp(c, "sp") == 0)
- check_sp_flag = 0;
- else if (strcmp(c, "br") == 0)
- check_br_flag = 0;
- else if (strcmp(c, "fi") == 0)
- check_fi_flag = 0;
- else if (strcmp(c, "nf") == 0)
- check_fi_flag = 0;
- else if (strcmp(c, "ce") == 0)
- check_ce_flag = 0;
- else
- fprintf(stderr, "internal error: unrecognised tag in grohtml (%s)\n", c);
-}
-
-const char *replace_negate_str (const char *before, char *after)
-{
- if (before != NULL)
- a_delete (char *)before;
-
- if (strlen(after) > 0) {
- int d = atoi(after);
-
- if (d < 0 || d > 1) {
- fprintf(stderr, "expecting nf/fi value to be 0 or 1 not %d\n", d);
- d = 0;
- }
- if (d == 0)
- after[0] = '1';
- else
- after[0] = '0';
- after[1] = (char)0;
- }
- return after;
-}
-
-const char *replace_str (const char *before, const char *after)
-{
- if (before != NULL)
- a_delete (char *)before;
- return after;
-}
-
-void assert_state::set (const char *c, const char *v,
- const char *f, const char *l)
-{
- if (l == NULL)
- l = "<none>";
- if (f == NULL)
- f = "stdin";
-
- // fprintf(stderr, "%s:%s:setting %s to %s\n", f, l, c, v);
- if (strcmp(c, "sp") == 0) {
- check_sp_flag = 1;
- val_sp = replace_str(val_sp, strsave(v));
- file_sp = replace_str(file_sp, strsave(f));
- line_sp = replace_str(line_sp, strsave(l));
- } else if (strcmp(c, "br") == 0) {
- check_br_flag = 1;
- val_br = replace_str(val_br, strsave(v));
- file_br = replace_str(file_br, strsave(f));
- line_br = replace_str(line_br, strsave(l));
- } else if (strcmp(c, "fi") == 0) {
- check_fi_flag = 1;
- val_fi = replace_str(val_fi, strsave(v));
- file_fi = replace_str(file_fi, strsave(f));
- line_fi = replace_str(line_fi, strsave(l));
- } else if (strcmp(c, "nf") == 0) {
- check_fi_flag = 1;
- val_fi = replace_negate_str(val_fi, strsave(v));
- file_fi = replace_str(file_fi, strsave(f));
- line_fi = replace_str(line_fi, strsave(l));
- } else if (strcmp(c, "ce") == 0) {
- check_ce_flag = 1;
- val_ce = replace_str(val_ce, strsave(v));
- file_ce = replace_str(file_ce, strsave(f));
- line_ce = replace_str(line_ce, strsave(l));
- }
-}
-
-/*
- * build - builds the troff state assertion.
- * see tmac/www.tmac for cmd examples.
- */
-
-void assert_state::build (const char *c, const char *v,
- const char *f, const char *l)
-{
- if (c[0] == '{')
- set(&c[1], v, f, l);
- if (c[0] == '}')
- close(&c[1]);
-}
-
-int assert_state::check_value_error (int c, int v, const char *s,
- const char *name,
- const char *f, const char *l, int flag)
-{
- if (! c) {
- if (f == NULL)
- f = "stdin";
- if (l == NULL)
- l = "<none>";
- fprintf(stderr, "%s:%s:grohtml (troff state) assertion failed, expected %s to be %s but found it to contain %d\n",
- f, l, name, s, v);
- return 0;
- }
- return flag;
-}
-
-void assert_state::check_value (const char *s, int v, const char *name,
- const char *f, const char *l, int *flag)
-{
- if (strncmp(s, "<=", 2) == 0)
- *flag = check_value_error(v <= atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, ">=", 2) == 0)
- *flag = check_value_error(v >= atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, "==", 2) == 0)
- *flag = check_value_error(v == atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, "!=", 2) == 0)
- *flag = check_value_error(v != atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, "<", 1) == 0)
- *flag = check_value_error(v < atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, ">", 1) == 0)
- *flag = check_value_error(v > atoi(&s[2]), v, s, name, f, l, *flag);
- else if (strncmp(s, "=", 1) == 0)
- *flag = check_value_error(v == atoi(&s[1]), v, s, name, f, l, *flag);
- else
- *flag = check_value_error(v == atoi(s), v, s, name, f, l, *flag);
-}
-
-void assert_state::check_sp (int sp)
-{
- if (check_sp_flag)
- check_value(val_sp, sp, "sp", file_sp, line_sp, &check_sp_flag);
-}
-
-void assert_state::check_fi (int fi)
-{
- if (check_fi_flag)
- check_value(val_fi, fi, "fi", file_fi, line_fi, &check_fi_flag);
-}
-
-void assert_state::check_br (int br)
-{
- if (check_br_flag)
- check_value(val_br, br, "br", file_br, line_br, &check_br_flag);
-}
-
-void assert_state::check_ce (int ce)
-{
- if (check_ce_flag)
- check_value(val_ce, ce, "ce", file_ce, line_ce, &check_ce_flag);
-}
-
-class html_printer : public printer {
- files file_list;
- simple_output html;
- int res;
- int space_char_index;
- int space_width;
- int no_of_printed_pages;
- int paper_length;
- string sbuf;
- int sbuf_start_hpos;
- int sbuf_vpos;
- int sbuf_end_hpos;
- int sbuf_prev_hpos;
- int sbuf_kern;
- style sbuf_style;
- int last_sbuf_length;
- int overstrike_detected;
- style output_style;
- int output_hpos;
- int output_vpos;
- int output_vpos_max;
- int output_draw_point_size;
- int line_thickness;
- int output_line_thickness;
- unsigned char output_space_code;
- char *inside_font_style;
- int page_number;
- title_desc title;
- header_desc header;
- int header_indent;
- int supress_sub_sup;
- int cutoff_heading;
- page *page_contents;
- html_text *current_paragraph;
- html_indent *indent;
- html_table *table;
- int end_center;
- int end_tempindent;
- TAG_ALIGNMENT next_tag;
- int fill_on;
- int max_linelength;
- int linelength;
- int pageoffset;
- int troff_indent;
- int device_indent;
- int temp_indent;
- int pointsize;
- int vertical_spacing;
- int line_number;
- color *background;
- int seen_indent;
- int next_indent;
- int seen_pageoffset;
- int next_pageoffset;
- int seen_linelength;
- int next_linelength;
- int seen_center;
- int next_center;
- int seen_space;
- int seen_break;
- int current_column;
- int row_space;
- assert_state as;
-
- void flush_sbuf ();
- void set_style (const style &);
- void set_space_code (unsigned char c);
- void do_exec (char *, const environment *);
- void do_import (char *, const environment *);
- void do_def (char *, const environment *);
- void do_mdef (char *, const environment *);
- void do_file (char *, const environment *);
- void set_line_thickness (const environment *);
- void terminate_current_font (void);
- void flush_font (void);
- void add_to_sbuf (int index, const string &s);
- void write_title (int in_head);
- int sbuf_continuation (int index, const char *name, const environment *env, int w);
- void flush_page (void);
- void troff_tag (text_glob *g);
- void flush_globs (void);
- void emit_line (text_glob *g);
- void emit_raw (text_glob *g);
- void emit_html (text_glob *g);
- void determine_space (text_glob *g);
- void start_font (const char *name);
- void end_font (const char *name);
- int is_font_courier (font *f);
- int is_line_start (int nf);
- int is_courier_until_eol (void);
- void start_size (int from, int to);
- void do_font (text_glob *g);
- void do_center (char *arg);
- void do_check_center (void);
- void do_break (void);
- void do_space (char *arg);
- void do_eol (void);
- void do_eol_ce (void);
- void do_title (void);
- void do_fill (char *arg);
- void do_heading (char *arg);
- void write_header (void);
- void determine_header_level (int level);
- void do_linelength (char *arg);
- void do_pageoffset (char *arg);
- void do_indentation (char *arg);
- void do_tempindent (char *arg);
- void do_indentedparagraph (void);
- void do_verticalspacing (char *arg);
- void do_pointsize (char *arg);
- void do_centered_image (void);
- void do_left_image (void);
- void do_right_image (void);
- void do_auto_image (text_glob *g, const char *filename);
- void do_links (void);
- void do_flush (void);
- void do_job_name (char *name);
- void do_head (char *name);
- void insert_split_file (void);
- int is_in_middle (int left, int right);
- void do_sup_or_sub (text_glob *g);
- int start_subscript (text_glob *g);
- int end_subscript (text_glob *g);
- int start_superscript (text_glob *g);
- int end_superscript (text_glob *g);
- void outstanding_eol (int n);
- int is_bold (font *f);
- font *make_bold (font *f);
- int overstrike (int index, const char *name, const environment *env, int w);
- void do_body (void);
- int next_horiz_pos (text_glob *g, int nf);
- void lookahead_for_tables (void);
- void insert_tab_te (void);
- text_glob *insert_tab_ts (text_glob *where);
- void insert_tab0_foreach_tab (void);
- void insert_tab_0 (text_glob *where);
- void do_indent (int in, int pageoff, int linelen);
- void shutdown_table (void);
- void do_tab_ts (text_glob *g);
- void do_tab_te (void);
- void do_col (char *s);
- void do_tab (char *s);
- void do_tab0 (void);
- int calc_nf (text_glob *g, int nf);
- void calc_po_in (text_glob *g, int nf);
- void remove_tabs (void);
- void remove_courier_tabs (void);
- void update_min_max (colType type_of_col, int *minimum, int *maximum, text_glob *g);
- void add_table_end (const char *);
- void do_file_components (void);
- void write_navigation (const string &top, const string &prev,
- const string &next, const string &current);
- void emit_link (const string &to, const char *name);
- int get_troff_indent (void);
- void restore_troff_indent (void);
- void handle_assertion (int minv, int minh, int maxv, int maxh, const char *s);
- void handle_state_assertion (text_glob *g);
- void do_end_para (text_glob *g);
- int round_width (int x);
- void handle_tag_within_title (text_glob *g);
- void writeHeadMetaStyle (void);
- // ADD HERE
-
-public:
- html_printer ();
- ~html_printer ();
- void set_char (int i, font *f, const environment *env, int w, const char *name);
- void set_numbered_char(int num, const environment *env, int *widthp);
- int set_char_and_width(const char *nm, const environment *env,
- int *widthp, font **f);
- void draw (int code, int *p, int np, const environment *env);
- void begin_page (int);
- void end_page (int);
- void special (char *arg, const environment *env, char type);
- void devtag (char *arg, const environment *env, char type);
- font *make_font (const char *);
- void end_of_line ();
-};
-
-printer *make_printer()
-{
- return new html_printer;
-}
-
-static void usage(FILE *stream);
-
-void html_printer::set_style(const style &sty)
-{
- const char *fontname = sty.f->get_name();
- if (fontname == NULL)
- fatal("no internalname specified for font");
-
-#if 0
- change_font(fontname, (font::res/(72*font::sizescale))*sty.point_size);
-#endif
-}
-
-/*
- * is_bold - returns TRUE if font, f, is bold.
- */
-
-int html_printer::is_bold (font *f)
-{
- const char *fontname = f->get_name();
- return (strcmp(fontname, "B") == 0) || (strcmp(fontname, "BI") == 0);
-}
-
-/*
- * make_bold - if a bold font of, f, exists then return it.
- */
-
-font *html_printer::make_bold (font *f)
-{
- const char *fontname = f->get_name();
-
- if (strcmp(fontname, "B") == 0)
- return f;
- if (strcmp(fontname, "I") == 0)
- return font::load_font("BI");
- if (strcmp(fontname, "BI") == 0)
- return f;
- return NULL;
-}
-
-void html_printer::end_of_line()
-{
- flush_sbuf();
- line_number++;
-}
-
-/*
- * emit_line - writes out a horizontal rule.
- */
-
-void html_printer::emit_line (text_glob *)
-{
- // --fixme-- needs to know the length in percentage
- html.put_string("<hr>");
-}
-
-/*
- * restore_troff_indent - is called when we have temporarily shutdown
- * indentation (typically done when we have
- * centered an image).
- */
-
-void html_printer::restore_troff_indent (void)
-{
- troff_indent = next_indent;
- if (troff_indent > 0) {
- /*
- * force device indentation
- */
- device_indent = 0;
- do_indent(get_troff_indent(), pageoffset, linelength);
- }
-}
-
-/*
- * emit_raw - writes the raw html information directly to the device.
- */
-
-void html_printer::emit_raw (text_glob *g)
-{
- do_font(g);
- if (next_tag == INLINE) {
- determine_space(g);
- current_paragraph->do_emittext(g->text_string, g->text_length);
- } else {
- int space = current_paragraph->retrieve_para_space() || seen_space;
-
- current_paragraph->done_para();
- shutdown_table();
- switch (next_tag) {
-
- case CENTERED:
- current_paragraph->do_para("align=center", space);
- break;
- case LEFT:
- current_paragraph->do_para(&html, "align=left", get_troff_indent(), pageoffset, linelength, space);
- break;
- case RIGHT:
- current_paragraph->do_para(&html, "align=right", get_troff_indent(), pageoffset, linelength, space);
- break;
- default:
- fatal("unknown enumeration");
- }
- current_paragraph->do_emittext(g->text_string, g->text_length);
- current_paragraph->done_para();
- next_tag = INLINE;
- supress_sub_sup = TRUE;
- seen_space = FALSE;
- restore_troff_indent();
- }
-}
-
-/*
- * handle_tag_within_title - handle a limited number of tags within
- * the context of a table. Those tags which
- * set values rather than generate spaces
- * and paragraphs.
- */
-
-void html_printer::handle_tag_within_title (text_glob *g)
-{
- if (g->is_in() || g->is_ti() || g->is_po() || g->is_ce() || g->is_ll()
- || g->is_fi() || g->is_nf())
- troff_tag(g);
-}
-
-/*
- * do_center - handle the .ce commands from troff.
- */
-
-void html_printer::do_center (char *arg)
-{
- next_center = atoi(arg);
- seen_center = TRUE;
-}
-
-/*
- * do_centered_image - set a flag such that the next devtag is
- * placed inside a centered paragraph.
- */
-
-void html_printer::do_centered_image (void)
-{
- next_tag = CENTERED;
-}
-
-/*
- * do_right_image - set a flag such that the next devtag is
- * placed inside a right aligned paragraph.
- */
-
-void html_printer::do_right_image (void)
-{
- next_tag = RIGHT;
-}
-
-/*
- * do_left_image - set a flag such that the next devtag is
- * placed inside a left aligned paragraph.
- */
-
-void html_printer::do_left_image (void)
-{
- next_tag = LEFT;
-}
-
-/*
- * exists - returns TRUE if filename exists.
- */
-
-static int exists (const char *filename)
-{
- FILE *fp = fopen(filename, "r");
-
- if (fp == 0) {
- return( FALSE );
- } else {
- fclose(fp);
- return( TRUE );
- }
-}
-
-/*
- * generate_img_src - returns a html image tag for the filename
- * providing that the image exists.
- */
-
-static string &generate_img_src (const char *filename)
-{
- string *s = new string("");
-
- while (filename && (filename[0] == ' ')) {
- filename++;
- }
- if (exists(filename))
- *s += string("<img src=\"") + filename + "\" "
- + "alt=\"Image " + filename + "\">";
- return *s;
-}
-
-/*
- * do_auto_image - tests whether the image, indicated by filename,
- * is present, if so then it emits an html image tag.
- * An image tag may be passed through from pic, eqn
- * but the corresponding image might not be created.
- * Consider .EQ delim $$ .EN or an empty .PS .PE.
- */
-
-void html_printer::do_auto_image (text_glob *g, const char *filename)
-{
- string buffer = generate_img_src(filename);
-
- if (! buffer.empty()) {
- /*
- * utilize emit_raw by creating a new text_glob.
- */
- text_glob h = *g;
-
- h.text_string = buffer.contents();
- h.text_length = buffer.length();
- emit_raw(&h);
- } else
- next_tag = INLINE;
-}
-
-/*
- * outstanding_eol - call do_eol, n, times.
- */
-
-void html_printer::outstanding_eol (int n)
-{
- while (n > 0) {
- do_eol();
- n--;
- }
-}
-
-/*
- * do_title - handle the .tl commands from troff.
- */
-
-void html_printer::do_title (void)
-{
- text_glob *t;
- int removed_from_head;
-
- if (page_number == 1) {
- int found_title_start = FALSE;
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- do {
- t = page_contents->glyphs.get_data();
- removed_from_head = FALSE;
- if (t->is_auto_img()) {
- string img = generate_img_src((char *)(t->text_string + 20));
-
- if (! img.empty()) {
- if (found_title_start)
- title.text += " ";
- found_title_start = TRUE;
- title.has_been_found = TRUE;
- title.text += img;
- }
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- } else if (t->is_eo_tl()) {
- /* end of title found
- */
- title.has_been_found = TRUE;
- return;
- } else if (t->is_a_tag()) {
- handle_tag_within_title(t);
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- } else if (found_title_start) {
- title.text += " " + string(t->text_string, t->text_length);
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- } else {
- title.text += string(t->text_string, t->text_length);
- found_title_start = TRUE;
- title.has_been_found = TRUE;
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- }
- } while ((! page_contents->glyphs.is_equal_to_head()) ||
- (removed_from_head));
- }
- }
-}
-
-void html_printer::write_header (void)
-{
- if (! header.header_buffer.empty()) {
- int space = current_paragraph->retrieve_para_space() || seen_space;
-
- if (header.header_level > 7) {
- header.header_level = 7;
- }
-
- // firstly we must terminate any font and type faces
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
-
- if (cutoff_heading+2 > header.header_level) {
- // now we save the header so we can issue a list of links
- header.no_of_headings++;
- style st;
-
- text_glob *h=new text_glob();
- h->text_glob_html(&st,
- header.headings.add_string(header.header_buffer),
- header.header_buffer.length(),
- header.no_of_headings, header.header_level,
- header.no_of_headings, header.header_level);
-
- header.headers.add(h,
- header.no_of_headings,
- header.no_of_headings, header.no_of_headings,
- header.no_of_headings, header.no_of_headings); // and add this header to the header list
-
- // lastly we generate a tag
-
- html.nl().nl().put_string("<a name=\"");
- if (simple_anchors) {
- string buffer(ANCHOR_TEMPLATE);
-
- buffer += as_string(header.no_of_headings);
- buffer += '\0';
- html.put_string(buffer.contents());
- } else {
- html.put_string(header.header_buffer);
- }
- html.put_string("\"></a>").nl();
- }
-
- if (manufacture_headings) {
- // line break before a header
- if (!current_paragraph->emitted_text())
- current_paragraph->do_space();
- // user wants manufactured headings which look better than <Hn></Hn>
- if (header.header_level<4) {
- html.put_string("<b><font size=\"+1\">");
- html.put_string(header.header_buffer);
- html.put_string("</font></b>").nl();
- }
- else {
- html.put_string("<b>");
- html.put_string(header.header_buffer);
- html.put_string("</b>").nl();
- }
- }
- else {
- // and now we issue the real header
- html.put_string("<h");
- html.put_number(header.header_level);
- html.put_string(">");
- html.put_string(header.header_buffer);
- html.put_string("</h");
- html.put_number(header.header_level);
- html.put_string(">").nl();
- }
-
- /* and now we save the file name in which this header will occur */
-
- style st; // fake style to enable us to use the list data structure
-
- text_glob *h=new text_glob();
- h->text_glob_html(&st,
- header.headings.add_string(file_list.file_name()),
- file_list.file_name().length(),
- header.no_of_headings, header.header_level,
- header.no_of_headings, header.header_level);
-
- header.header_filename.add(h,
- header.no_of_headings,
- header.no_of_headings, header.no_of_headings,
- header.no_of_headings, header.no_of_headings);
-
- current_paragraph->do_para(&html, "", get_troff_indent(), pageoffset, linelength, space);
- }
-}
-
-void html_printer::determine_header_level (int level)
-{
- if (level == 0) {
- int i;
-
- for (i=0; ((i<header.header_buffer.length())
- && ((header.header_buffer[i] == '.')
- || is_digit(header.header_buffer[i]))) ; i++) {
- if (header.header_buffer[i] == '.') {
- level++;
- }
- }
- }
- header.header_level = level+1;
- if (header.header_level >= 2 && header.header_level <= split_level) {
- header.no_of_level_one_headings++;
- insert_split_file();
- }
-}
-
-/*
- * do_heading - handle the .SH and .NH and equivalent commands from troff.
- */
-
-void html_printer::do_heading (char *arg)
-{
- text_glob *g;
- int level=atoi(arg);
- int horiz;
-
- header.header_buffer.clear();
- page_contents->glyphs.move_right();
- if (! page_contents->glyphs.is_equal_to_head()) {
- g = page_contents->glyphs.get_data();
- horiz = g->minh;
- do {
- if (g->is_auto_img()) {
- string img=generate_img_src((char *)(g->text_string + 20));
-
- if (! img.empty()) {
- simple_anchors = TRUE; // we cannot use full heading anchors with images
- if (horiz < g->minh)
- header.header_buffer += " ";
-
- header.header_buffer += img;
- }
- }
- else if (g->is_in() || g->is_ti() || g->is_po() || g->is_ce() || g->is_ll())
- troff_tag(g);
- else if (g->is_fi())
- fill_on = 1;
- else if (g->is_nf())
- fill_on = 0;
- else if (! (g->is_a_line() || g->is_a_tag())) {
- /*
- * we ignore the other tag commands when constructing a heading
- */
- if (horiz < g->minh)
- header.header_buffer += " ";
-
- horiz = g->maxh;
- header.header_buffer += string(g->text_string, g->text_length);
- }
- page_contents->glyphs.move_right();
- g = page_contents->glyphs.get_data();
- } while ((! page_contents->glyphs.is_equal_to_head()) &&
- (! g->is_eo_h()));
- }
-
- determine_header_level(level);
- write_header();
-
- // finally set the output to neutral for after the header
- g = page_contents->glyphs.get_data();
- page_contents->glyphs.move_left(); // so that next time we use old g
-}
-
-/*
- * is_courier_until_eol - returns TRUE if we can see a whole line which is courier
- */
-
-int html_printer::is_courier_until_eol (void)
-{
- text_glob *orig = page_contents->glyphs.get_data();
- int result = TRUE;
- text_glob *g;
-
- if (! page_contents->glyphs.is_equal_to_tail()) {
- page_contents->glyphs.move_right();
- do {
- g = page_contents->glyphs.get_data();
- if (! g->is_a_tag() && (! is_font_courier(g->text_style.f)))
- result = FALSE;
- page_contents->glyphs.move_right();
- } while (result &&
- (! page_contents->glyphs.is_equal_to_head()) &&
- (! g->is_fi()) && (! g->is_eol()));
-
- /*
- * now restore our previous position.
- */
- while (page_contents->glyphs.get_data() != orig)
- page_contents->glyphs.move_left();
- }
- return result;
-}
-
-/*
- * do_linelength - handle the .ll command from troff.
- */
-
-void html_printer::do_linelength (char *arg)
-{
- if (max_linelength == -1)
- max_linelength = atoi(arg);
-
- next_linelength = atoi(arg);
- seen_linelength = TRUE;
-}
-
-/*
- * do_pageoffset - handle the .po command from troff.
- */
-
-void html_printer::do_pageoffset (char *arg)
-{
- next_pageoffset = atoi(arg);
- seen_pageoffset = TRUE;
-}
-
-/*
- * get_troff_indent - returns the indent value.
- */
-
-int html_printer::get_troff_indent (void)
-{
- if (end_tempindent > 0)
- return temp_indent;
- else
- return troff_indent;
-}
-
-/*
- * do_indentation - handle the .in command from troff.
- */
-
-void html_printer::do_indentation (char *arg)
-{
- next_indent = atoi(arg);
- seen_indent = TRUE;
-}
-
-/*
- * do_tempindent - handle the .ti command from troff.
- */
-
-void html_printer::do_tempindent (char *arg)
-{
- if (fill_on) {
- /*
- * we set the end_tempindent to 2 as the first .br
- * activates the .ti and the second terminates it.
- */
- end_tempindent = 2;
- temp_indent = atoi(arg);
- }
-}
-
-/*
- * shutdown_table - shuts down the current table.
- */
-
-void html_printer::shutdown_table (void)
-{
- if (table != NULL) {
- current_paragraph->done_para();
- table->emit_finish_table();
- // dont delete this table as it will be deleted when we destroy the text_glob
- table = NULL;
- }
-}
-
-/*
- * do_indent - remember the indent parameters and if
- * indent is > pageoff and indent has changed
- * then we start a html table to implement the indentation.
- */
-
-void html_printer::do_indent (int in, int pageoff, int linelen)
-{
- if ((device_indent != -1) &&
- (pageoffset+device_indent != in+pageoff)) {
-
- int space = current_paragraph->retrieve_para_space() || seen_space;
- current_paragraph->done_para();
-
- device_indent = in;
- pageoffset = pageoff;
- if (linelen <= max_linelength)
- linelength = linelen;
-
- current_paragraph->do_para(&html, "", device_indent,
- pageoffset, max_linelength, space);
- }
-}
-
-/*
- * do_verticalspacing - handle the .vs command from troff.
- */
-
-void html_printer::do_verticalspacing (char *arg)
-{
- vertical_spacing = atoi(arg);
-}
-
-/*
- * do_pointsize - handle the .ps command from troff.
- */
-
-void html_printer::do_pointsize (char *arg)
-{
- /*
- * firstly check to see whether this point size is really associated with a .tl tag
- */
-
- if (! page_contents->glyphs.is_empty()) {
- text_glob *g = page_contents->glyphs.get_data();
- text_glob *t = page_contents->glyphs.get_data();
-
- while (t->is_a_tag() && (! page_contents->glyphs.is_equal_to_head())) {
- if (t->is_tl()) {
- /*
- * found title therefore ignore this .ps tag
- */
- while (t != g) {
- page_contents->glyphs.move_left();
- t = page_contents->glyphs.get_data();
- }
- return;
- }
- page_contents->glyphs.move_right();
- t = page_contents->glyphs.get_data();
- }
- /*
- * move back to original position
- */
- while (t != g) {
- page_contents->glyphs.move_left();
- t = page_contents->glyphs.get_data();
- }
- /*
- * collect legal pointsize
- */
- pointsize = atoi(arg);
- }
-}
-
-/*
- * do_fill - records whether troff has requested that text be filled.
- */
-
-void html_printer::do_fill (char *arg)
-{
- int on = atoi(arg);
-
- output_hpos = get_troff_indent()+pageoffset;
- supress_sub_sup = TRUE;
-
- if (fill_on != on) {
- if (on)
- current_paragraph->do_para("", seen_space);
- fill_on = on;
- }
-}
-
-/*
- * do_eol - handle the end of line
- */
-
-void html_printer::do_eol (void)
-{
- if (! fill_on) {
- if (current_paragraph->ever_emitted_text()) {
- current_paragraph->do_newline();
- current_paragraph->do_break();
- }
- }
- output_hpos = get_troff_indent()+pageoffset;
-}
-
-/*
- * do_check_center - checks to see whether we have seen a `.ce' tag
- * during the previous line.
- */
-
-void html_printer::do_check_center(void)
-{
- if (seen_center) {
- seen_center = FALSE;
- if (next_center > 0) {
- if (end_center == 0) {
- int space = current_paragraph->retrieve_para_space() || seen_space;
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
- current_paragraph->do_para("align=center", space);
- } else
- if (strcmp("align=center",
- current_paragraph->get_alignment()) != 0) {
- /*
- * different alignment, so shutdown paragraph and open
- * a new one.
- */
- int space = current_paragraph->retrieve_para_space() || seen_space;
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
- current_paragraph->do_para("align=center", space);
- } else
- /*
- * same alignment, if we have emitted text then issue a break.
- */
- if (current_paragraph->emitted_text())
- current_paragraph->do_break();
- } else
- /*
- * next_center == 0
- */
- if (end_center > 0) {
- seen_space = seen_space || current_paragraph->retrieve_para_space();
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
- current_paragraph->do_para("", seen_space);
- }
- end_center = next_center;
- }
-}
-
-/*
- * do_eol_ce - handle end of line specifically for a .ce
- */
-
-void html_printer::do_eol_ce (void)
-{
- if (end_center > 0) {
- if (end_center > 1)
- if (current_paragraph->emitted_text())
- current_paragraph->do_break();
-
- end_center--;
- if (end_center == 0) {
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
- }
- }
-}
-
-/*
- * do_flush - flushes all output and tags.
- */
-
-void html_printer::do_flush (void)
-{
- current_paragraph->done_para();
-}
-
-/*
- * do_links - moves onto a new temporary file and sets auto_links to FALSE.
- */
-
-void html_printer::do_links (void)
-{
- html.end_line(); // flush line
- auto_links = FALSE; /* from now on only emit under user request */
- file_list.add_new_file(xtmpfile());
- file_list.set_links_required();
- html.set_file(file_list.get_file());
-}
-
-/*
- * insert_split_file -
- */
-
-void html_printer::insert_split_file (void)
-{
- if (multiple_files) {
- current_paragraph->done_para(); // flush paragraph
- html.end_line(); // flush line
- html.set_file(file_list.get_file()); // flush current file
- file_list.add_new_file(xtmpfile());
- string split_file = job_name;
-
- split_file += string("-");
- split_file += as_string(header.no_of_level_one_headings);
- split_file += string(".html");
- split_file += '\0';
-
- file_list.set_file_name(split_file);
- html.set_file(file_list.get_file());
- }
-}
-
-/*
- * do_job_name - assigns the job_name to name.
- */
-
-void html_printer::do_job_name (char *name)
-{
- if (! multiple_files) {
- multiple_files = TRUE;
- while (name != NULL && (*name != (char)0) && (*name == ' '))
- name++;
- job_name = name;
- }
-}
-
-/*
- * do_head - adds a string to head_info which is to be included into
- * the <head> </head> section of the html document.
- */
-
-void html_printer::do_head (char *name)
-{
- head_info += string(name);
- head_info += '\n';
-}
-
-/*
- * do_break - handles the ".br" request and also
- * undoes an outstanding ".ti" command
- * and calls indent if the indentation
- * related registers have changed.
- */
-
-void html_printer::do_break (void)
-{
- int seen_temp_indent = FALSE;
-
- current_paragraph->do_break();
- if (end_tempindent > 0) {
- end_tempindent--;
- if (end_tempindent > 0)
- seen_temp_indent = TRUE;
- }
- if (seen_indent || seen_pageoffset || seen_linelength || seen_temp_indent) {
- if (seen_indent && (! seen_temp_indent))
- troff_indent = next_indent;
- if (! seen_pageoffset)
- next_pageoffset = pageoffset;
- if (! seen_linelength)
- next_linelength = linelength;
- do_indent(get_troff_indent(), next_pageoffset, next_linelength);
- }
- seen_indent = seen_temp_indent;
- seen_linelength = FALSE;
- seen_pageoffset = FALSE;
- do_check_center();
- output_hpos = get_troff_indent()+pageoffset;
- supress_sub_sup = TRUE;
-}
-
-void html_printer::do_space (char *arg)
-{
- int n = atoi(arg);
-
- seen_space = atoi(arg);
- as.check_sp(seen_space);
-#if 0
- if (n>0 && table)
- table->set_space(TRUE);
-#endif
-
- while (n>0) {
- current_paragraph->do_space();
- n--;
- }
- supress_sub_sup = TRUE;
-}
-
-/*
- * do_tab_ts - start a table, which will have already been defined.
- */
-
-void html_printer::do_tab_ts (text_glob *g)
-{
- html_table *t = g->get_table();
-
- if (t != NULL) {
- current_column = 0;
- current_paragraph->done_pre();
- current_paragraph->done_para();
- current_paragraph->remove_para_space();
-
-#if defined(DEBUG_TABLES)
- html.simple_comment("TABS");
-#endif
-
- t->set_linelength(max_linelength);
- t->add_indent(pageoffset);
-#if 0
- t->emit_table_header(seen_space);
-#else
- t->emit_table_header(FALSE);
- row_space = current_paragraph->retrieve_para_space() || seen_space;
- seen_space = FALSE;
-#endif
- }
-
- table = t;
-}
-
-/*
- * do_tab_te - finish a table.
- */
-
-void html_printer::do_tab_te (void)
-{
- if (table) {
- current_paragraph->done_para();
- current_paragraph->remove_para_space();
- table->emit_finish_table();
- }
-
- table = NULL;
- restore_troff_indent();
-}
-
-/*
- * do_tab - handle the "devtag:tab" tag
- */
-
-void html_printer::do_tab (char *s)
-{
- if (table) {
- while (isspace(*s))
- s++;
- s++;
- int col = table->find_column(atoi(s) + pageoffset + get_troff_indent());
- if (col > 0) {
- current_paragraph->done_para();
- table->emit_col(col);
- }
- }
-}
-
-/*
- * do_tab0 - handle the "devtag:tab0" tag
- */
-
-void html_printer::do_tab0 (void)
-{
- if (table) {
- int col = table->find_column(pageoffset+get_troff_indent());
- if (col > 0) {
- current_paragraph->done_para();
- table->emit_col(col);
- }
- }
-}
-
-/*
- * do_col - start column, s.
- */
-
-void html_printer::do_col (char *s)
-{
- if (table) {
- if (atoi(s) < current_column)
- row_space = seen_space;
-
- current_column = atoi(s);
- current_paragraph->done_para();
- table->emit_col(current_column);
- current_paragraph->do_para("", row_space);
- }
-}
-
-/*
- * troff_tag - processes the troff tag and manipulates the troff
- * state machine.
- */
-
-void html_printer::troff_tag (text_glob *g)
-{
- /*
- * firstly skip over devtag:
- */
- char *t=(char *)g->text_string+strlen("devtag:");
-
- if (strncmp(g->text_string, "html</p>:", strlen("html</p>:")) == 0) {
- do_end_para(g);
- } else if (g->is_eol()) {
- do_eol();
- } else if (g->is_eol_ce()) {
- do_eol_ce();
- } else if (strncmp(t, ".sp", 3) == 0) {
- char *a = (char *)t+3;
- do_space(a);
- } else if (strncmp(t, ".br", 3) == 0) {
- seen_break = 1;
- as.check_br(1);
- do_break();
- } else if (strcmp(t, ".centered-image") == 0) {
- do_centered_image();
- } else if (strcmp(t, ".right-image") == 0) {
- do_right_image();
- } else if (strcmp(t, ".left-image") == 0) {
- do_left_image();
- } else if (strncmp(t, ".auto-image", 11) == 0) {
- char *a = (char *)t+11;
- do_auto_image(g, a);
- } else if (strncmp(t, ".ce", 3) == 0) {
- char *a = (char *)t+3;
- supress_sub_sup = TRUE;
- do_center(a);
- } else if (g->is_tl()) {
- supress_sub_sup = TRUE;
- title.with_h1 = TRUE;
- do_title();
- } else if (strncmp(t, ".html-tl", 8) == 0) {
- supress_sub_sup = TRUE;
- title.with_h1 = FALSE;
- do_title();
- } else if (strncmp(t, ".fi", 3) == 0) {
- char *a = (char *)t+3;
- do_fill(a);
- } else if ((strncmp(t, ".SH", 3) == 0) || (strncmp(t, ".NH", 3) == 0)) {
- char *a = (char *)t+3;
- do_heading(a);
- } else if (strncmp(t, ".ll", 3) == 0) {
- char *a = (char *)t+3;
- do_linelength(a);
- } else if (strncmp(t, ".po", 3) == 0) {
- char *a = (char *)t+3;
- do_pageoffset(a);
- } else if (strncmp(t, ".in", 3) == 0) {
- char *a = (char *)t+3;
- do_indentation(a);
- } else if (strncmp(t, ".ti", 3) == 0) {
- char *a = (char *)t+3;
- do_tempindent(a);
- } else if (strncmp(t, ".vs", 3) == 0) {
- char *a = (char *)t+3;
- do_verticalspacing(a);
- } else if (strncmp(t, ".ps", 3) == 0) {
- char *a = (char *)t+3;
- do_pointsize(a);
- } else if (strcmp(t, ".links") == 0) {
- do_links();
- } else if (strncmp(t, ".job-name", 9) == 0) {
- char *a = (char *)t+9;
- do_job_name(a);
- } else if (strncmp(t, ".head", 5) == 0) {
- char *a = (char *)t+5;
- do_head(a);
- } else if (strcmp(t, ".no-auto-rule") == 0) {
- auto_rule = FALSE;
- } else if (strcmp(t, ".tab-ts") == 0) {
- do_tab_ts(g);
- } else if (strcmp(t, ".tab-te") == 0) {
- do_tab_te();
- } else if (strncmp(t, ".col ", 5) == 0) {
- char *a = (char *)t+4;
- do_col(a);
- } else if (strncmp(t, "tab ", 4) == 0) {
- char *a = (char *)t+3;
- do_tab(a);
- } else if (strncmp(t, "tab0", 4) == 0) {
- do_tab0();
- }
-}
-
-/*
- * is_in_middle - returns TRUE if the positions left..right are in the center of the page.
- */
-
-int html_printer::is_in_middle (int left, int right)
-{
- return( abs(abs(left-pageoffset) - abs(pageoffset+linelength-right))
- <= CENTER_TOLERANCE );
-}
-
-/*
- * flush_globs - runs through the text glob list and emits html.
- */
-
-void html_printer::flush_globs (void)
-{
- text_glob *g;
-
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.start_from_head();
- do {
- g = page_contents->glyphs.get_data();
-#if 0
- fprintf(stderr, "[%s:%d:%d:%d:%d]",
- g->text_string, g->minv, g->minh, g->maxv, g->maxh) ;
- fflush(stderr);
-#endif
-
- handle_state_assertion(g);
-
- if (strcmp(g->text_string, "XXXXXXX") == 0)
- stop();
-
- if (g->is_a_tag())
- troff_tag(g);
- else if (g->is_a_line())
- emit_line(g);
- else {
- as.check_sp(seen_space);
- as.check_br(seen_break);
- seen_break = 0;
- seen_space = 0;
- emit_html(g);
- }
-
- as.check_fi(fill_on);
- as.check_ce(end_center);
- /*
- * after processing the title (and removing it) the glyph list might be empty
- */
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.move_right();
- }
- } while (! page_contents->glyphs.is_equal_to_head());
- }
-}
-
-/*
- * calc_nf - calculates the _no_ format flag, given the
- * text glob, g.
- */
-
-int html_printer::calc_nf (text_glob *g, int nf)
-{
- if (g != NULL) {
- if (g->is_fi()) {
- as.check_fi(TRUE);
- return FALSE;
- }
- if (g->is_nf()) {
- as.check_fi(FALSE);
- return TRUE;
- }
- }
- as.check_fi(! nf);
- return nf;
-}
-
-/*
- * calc_po_in - calculates the, in, po, registers
- */
-
-void html_printer::calc_po_in (text_glob *g, int nf)
-{
- if (g->is_in())
- troff_indent = g->get_arg();
- else if (g->is_po())
- pageoffset = g->get_arg();
- else if (g->is_ti()) {
- temp_indent = g->get_arg();
- end_tempindent = 2;
- } else if (g->is_br() || (nf && g->is_eol())) {
- if (end_tempindent > 0)
- end_tempindent--;
- }
-}
-
-/*
- * next_horiz_pos - returns the next horiz position.
- * -1 is returned if it doesn't exist.
- */
-
-int html_printer::next_horiz_pos (text_glob *g, int nf)
-{
- int next = -1;
-
- if ((g != NULL) && (g->is_br() || (nf && g->is_eol())))
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.move_right_get_data();
- if (g == NULL) {
- page_contents->glyphs.start_from_head();
- as.reset();
- }
- else {
- next = g->minh;
- page_contents->glyphs.move_left();
- }
- }
- return next;
-}
-
-/*
- * insert_tab_ts - inserts a tab-ts before, where.
- */
-
-text_glob *html_printer::insert_tab_ts (text_glob *where)
-{
- text_glob *start_of_table;
- text_glob *old_pos = page_contents->glyphs.get_data();
-
- page_contents->glyphs.move_to(where);
- page_contents->glyphs.move_left();
- page_contents->insert_tag(string("devtag:.tab-ts")); // tab table start
- page_contents->glyphs.move_right();
- start_of_table = page_contents->glyphs.get_data();
- page_contents->glyphs.move_to(old_pos);
- return start_of_table;
-}
-
-/*
- * insert_tab_te - inserts a tab-te before the current position
- * (it skips backwards over .sp/.br)
- */
-
-void html_printer::insert_tab_te (void)
-{
- text_glob *g = page_contents->glyphs.get_data();
- page_contents->dump_page();
-
- while (page_contents->glyphs.get_data()->is_a_tag())
- page_contents->glyphs.move_left();
-
- page_contents->insert_tag(string("devtag:.tab-te")); // tab table end
- while (g != page_contents->glyphs.get_data())
- page_contents->glyphs.move_right();
- page_contents->dump_page();
-}
-
-/*
- * insert_tab_0 - inserts a tab0 before, where.
- */
-
-void html_printer::insert_tab_0 (text_glob *where)
-{
- text_glob *old_pos = page_contents->glyphs.get_data();
-
- page_contents->glyphs.move_to(where);
- page_contents->glyphs.move_left();
- page_contents->insert_tag(string("devtag:tab0")); // tab0 start of line
- page_contents->glyphs.move_right();
- page_contents->glyphs.move_to(old_pos);
-}
-
-/*
- * remove_tabs - removes the tabs tags on this line.
- */
-
-void html_printer::remove_tabs (void)
-{
- text_glob *orig = page_contents->glyphs.get_data();
- text_glob *g;
-
- if (! page_contents->glyphs.is_equal_to_tail()) {
- do {
- g = page_contents->glyphs.get_data();
- if (g->is_tab()) {
- page_contents->glyphs.sub_move_right();
- if (g == orig)
- orig = page_contents->glyphs.get_data();
- } else
- page_contents->glyphs.move_right();
- } while ((! page_contents->glyphs.is_equal_to_head()) &&
- (! g->is_eol()));
-
- /*
- * now restore our previous position.
- */
- while (page_contents->glyphs.get_data() != orig)
- page_contents->glyphs.move_left();
- }
-}
-
-void html_printer::remove_courier_tabs (void)
-{
- text_glob *g;
- int line_start = TRUE;
- int nf = FALSE;
-
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.start_from_head();
- as.reset();
- line_start = TRUE;
- do {
- g = page_contents->glyphs.get_data();
- handle_state_assertion(g);
- nf = calc_nf(g, nf);
-
- if (line_start) {
- if (line_start && nf && is_courier_until_eol()) {
- remove_tabs();
- g = page_contents->glyphs.get_data();
- }
- }
-
- // line_start = g->is_br() || g->is_nf() || g->is_fi() || (nf && g->is_eol());
- line_start = g->is_br() || (nf && g->is_eol());
- page_contents->glyphs.move_right();
- } while (! page_contents->glyphs.is_equal_to_head());
- }
-}
-
-void html_printer::insert_tab0_foreach_tab (void)
-{
- text_glob *start_of_line = NULL;
- text_glob *g = NULL;
- int seen_tab = FALSE;
- int seen_col = FALSE;
- int nf = FALSE;
-
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.start_from_head();
- as.reset();
- start_of_line = page_contents->glyphs.get_data();
- do {
- g = page_contents->glyphs.get_data();
- handle_state_assertion(g);
- nf = calc_nf(g, nf);
-
- if (g->is_tab())
- seen_tab = TRUE;
-
- if (g->is_col())
- seen_col = TRUE;
-
- if (g->is_br() || (nf && g->is_eol())) {
- do {
- page_contents->glyphs.move_right();
- g = page_contents->glyphs.get_data();
- handle_state_assertion(g);
- nf = calc_nf(g, nf);
- if (page_contents->glyphs.is_equal_to_head()) {
- if (seen_tab && !seen_col)
- insert_tab_0(start_of_line);
- return;
- }
- } while (g->is_br() || (nf && g->is_eol()) || g->is_ta());
- // printf("\nstart_of_line is: %s\n", g->text_string);
- if (seen_tab && !seen_col) {
- insert_tab_0(start_of_line);
- page_contents->glyphs.move_to(g);
- }
-
- seen_tab = FALSE;
- seen_col = FALSE;
- start_of_line = g;
- }
- page_contents->glyphs.move_right();
- } while (! page_contents->glyphs.is_equal_to_head());
- if (seen_tab && !seen_col)
- insert_tab_0(start_of_line);
-
- }
-}
-
-/*
- * update_min_max - updates the extent of a column, given the left and right
- * extents of a glyph, g.
- */
-
-void html_printer::update_min_max (colType type_of_col, int *minimum, int *maximum, text_glob *g)
-{
- switch (type_of_col) {
-
- case tab_tag:
- break;
- case tab0_tag:
- *minimum = g->minh;
- break;
- case col_tag:
- *minimum = g->minh;
- *maximum = g->maxh;
- break;
- default:
- break;
- }
-}
-
-/*
- * add_table_end - moves left one glyph, adds a table end tag and adds a
- * debugging string.
- */
-
-void html_printer::add_table_end (const char *
-#if defined(DEBUG_TABLES)
- debug_string
-#endif
-)
-{
- page_contents->glyphs.move_left();
- insert_tab_te();
-#if defined(DEBUG_TABLES)
- page_contents->insert_tag(string(debug_string));
-#endif
-}
-
-/*
- * lookahead_for_tables - checks for .col tags and inserts table
- * start/end tags
- */
-
-void html_printer::lookahead_for_tables (void)
-{
- text_glob *g;
- text_glob *start_of_line = NULL;
- text_glob *start_of_table = NULL;
- text_glob *last = NULL;
- colType type_of_col = none;
- int left = 0;
- int found_col = FALSE;
- int seen_text = FALSE;
- int ncol = 0;
- int colmin = 0; // pacify compiler
- int colmax = 0; // pacify compiler
- html_table *tbl = new html_table(&html, -1);
- const char *tab_defs = NULL;
- char align = 'L';
- int nf = FALSE;
- int old_pageoffset = pageoffset;
-
- remove_courier_tabs();
- page_contents->dump_page();
- insert_tab0_foreach_tab();
- page_contents->dump_page();
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.start_from_head();
- as.reset();
- g = page_contents->glyphs.get_data();
- if (g->is_br()) {
- g = page_contents->glyphs.move_right_get_data();
- handle_state_assertion(g);
- if (page_contents->glyphs.is_equal_to_head()) {
- if (tbl != NULL) {
- delete tbl;
- tbl = NULL;
- }
- return;
- }
-
- start_of_line = g;
- seen_text = FALSE;
- ncol = 0;
- left = next_horiz_pos(g, nf);
- if (found_col)
- last = g;
- found_col = FALSE;
- }
-
- do {
-#if defined(DEBUG_TABLES)
- fprintf(stderr, " [") ;
- fprintf(stderr, g->text_string) ;
- fprintf(stderr, "] ") ;
- fflush(stderr);
- if (strcmp(g->text_string, "XXXXXXX") == 0)
- stop();
-#endif
-
- nf = calc_nf(g, nf);
- calc_po_in(g, nf);
- if (g->is_col()) {
- if (type_of_col == tab_tag && start_of_table != NULL) {
- page_contents->glyphs.move_left();
- insert_tab_te();
- start_of_table->remember_table(tbl);
- tbl = new html_table(&html, -1);
- page_contents->insert_tag(string("*** TAB -> COL ***"));
- if (tab_defs != NULL)
- tbl->tab_stops->init(tab_defs);
- start_of_table = NULL;
- last = NULL;
- }
- type_of_col = col_tag;
- found_col = TRUE;
- ncol = g->get_arg();
- align = 'L';
- colmin = 0;
- colmax = 0;
- } else if (g->is_tab()) {
- type_of_col = tab_tag;
- colmin = g->get_tab_args(&align);
- align = 'L'; // for now as 'C' and 'R' are broken
- ncol = tbl->find_tab_column(colmin);
- colmin += pageoffset + get_troff_indent();
- colmax = tbl->get_tab_pos(ncol+1);
- if (colmax > 0)
- colmax += pageoffset + get_troff_indent();
- } else if (g->is_tab0()) {
- if (type_of_col == col_tag && start_of_table != NULL) {
- page_contents->glyphs.move_left();
- insert_tab_te();
- start_of_table->remember_table(tbl);
- tbl = new html_table(&html, -1);
- page_contents->insert_tag(string("*** COL -> TAB ***"));
- start_of_table = NULL;
- last = NULL;
- }
- if (tab_defs != NULL)
- tbl->tab_stops->init(tab_defs);
-
- type_of_col = tab0_tag;
- ncol = 1;
- colmin = 0;
- colmax = tbl->get_tab_pos(2) + pageoffset + get_troff_indent();
- } else if (! g->is_a_tag())
- update_min_max(type_of_col, &colmin, &colmax, g);
-
- if ((! g->is_a_tag()) || g->is_tab())
- seen_text = TRUE;
-
- if ((g->is_col() || g->is_tab() || g->is_tab0())
- && (start_of_line != NULL) && (start_of_table == NULL)) {
- start_of_table = insert_tab_ts(start_of_line);
- start_of_line = NULL;
- seen_text = FALSE;
- } else if (g->is_ce() && (start_of_table != NULL)) {
- add_table_end("*** CE ***");
- start_of_table->remember_table(tbl);
- tbl = new html_table(&html, -1);
- start_of_table = NULL;
- last = NULL;
- } else if (g->is_ta()) {
- tab_defs = g->text_string;
-
- if (type_of_col == col_tag)
- tbl->tab_stops->check_init(tab_defs);
-
- if (!tbl->tab_stops->compatible(tab_defs)) {
- if (start_of_table != NULL) {
- add_table_end("*** TABS ***");
- start_of_table->remember_table(tbl);
- tbl = new html_table(&html, -1);
- start_of_table = NULL;
- type_of_col = none;
- last = NULL;
- }
- tbl->tab_stops->init(tab_defs);
- }
- }
-
- if (((! g->is_a_tag()) || g->is_tab()) && (start_of_table != NULL)) {
- // we are in a table and have a glyph
- if ((ncol == 0) || (! tbl->add_column(ncol, colmin, colmax, align))) {
- if (ncol == 0)
- add_table_end("*** NCOL == 0 ***");
- else
- add_table_end("*** CROSSED COLS ***");
-
- start_of_table->remember_table(tbl);
- tbl = new html_table(&html, -1);
- start_of_table = NULL;
- type_of_col = none;
- last = NULL;
- }
- }
-
- /*
- * move onto next glob, check whether we are starting a new line
- */
- g = page_contents->glyphs.move_right_get_data();
- handle_state_assertion(g);
-
- if (g == NULL) {
- if (found_col) {
- page_contents->glyphs.start_from_head();
- as.reset();
- last = g;
- found_col = FALSE;
- }
- } else if (g->is_br() || (nf && g->is_eol())) {
- do {
- g = page_contents->glyphs.move_right_get_data();
- handle_state_assertion(g);
- nf = calc_nf(g, nf);
- } while ((g != NULL) && (g->is_br() || (nf && g->is_eol())));
- start_of_line = g;
- seen_text = FALSE;
- ncol = 0;
- left = next_horiz_pos(g, nf);
- if (found_col)
- last = g;
- found_col = FALSE;
- }
- } while ((g != NULL) && (! page_contents->glyphs.is_equal_to_head()));
-
-#if defined(DEBUG_TABLES)
- fprintf(stderr, "finished scanning for tables\n");
-#endif
-
- page_contents->glyphs.start_from_head();
- if (start_of_table != NULL) {
- if (last != NULL)
- while (last != page_contents->glyphs.get_data())
- page_contents->glyphs.move_left();
-
- insert_tab_te();
- start_of_table->remember_table(tbl);
- tbl = NULL;
- page_contents->insert_tag(string("*** LAST ***"));
- }
- }
- if (tbl != NULL) {
- delete tbl;
- tbl = NULL;
- }
-
- // and reset the registers
- pageoffset = old_pageoffset;
- troff_indent = 0;
- temp_indent = 0;
- end_tempindent = 0;
-}
-
-void html_printer::flush_page (void)
-{
- supress_sub_sup = TRUE;
- flush_sbuf();
- page_contents->dump_page();
- lookahead_for_tables();
- page_contents->dump_page();
-
- flush_globs();
- current_paragraph->done_para();
-
- // move onto a new page
- delete page_contents;
-#if defined(DEBUG_TABLES)
- fprintf(stderr, "\n\n*** flushed page ***\n\n");
-
- html.simple_comment("new page called");
-#endif
- page_contents = new page;
-}
-
-/*
- * determine_space - works out whether we need to write a space.
- * If last glyph is ajoining then no space emitted.
- */
-
-void html_printer::determine_space (text_glob *g)
-{
- if (current_paragraph->is_in_pre()) {
- /*
- * .nf has been specified
- */
- while (output_hpos < g->minh) {
- output_hpos += space_width;
- current_paragraph->emit_space();
- }
- } else {
- if ((output_vpos != g->minv) || (output_hpos < g->minh)) {
- current_paragraph->emit_space();
- }
- }
-}
-
-/*
- * is_line_start - returns TRUE if we are at the start of a line.
- */
-
-int html_printer::is_line_start (int nf)
-{
- int line_start = FALSE;
- int result = TRUE;
- text_glob *orig = page_contents->glyphs.get_data();
- text_glob *g;
-
- if (! page_contents->glyphs.is_equal_to_head()) {
- do {
- page_contents->glyphs.move_left();
- g = page_contents->glyphs.get_data();
- result = g->is_a_tag();
- if (g->is_fi())
- nf = FALSE;
- else if (g->is_nf())
- nf = TRUE;
- line_start = g->is_col() || g->is_br() || (nf && g->is_eol());
- } while ((!line_start) && (result));
- /*
- * now restore our previous position.
- */
- while (page_contents->glyphs.get_data() != orig)
- page_contents->glyphs.move_right();
- }
- return result;
-}
-
-/*
- * is_font_courier - returns TRUE if the font, f, is courier.
- */
-
-int html_printer::is_font_courier (font *f)
-{
- if (f != 0) {
- const char *fontname = f->get_name();
-
- return( (fontname != 0) && (fontname[0] == 'C') );
- }
- return FALSE;
-}
-
-/*
- * end_font - shuts down the font corresponding to fontname.
- */
-
-void html_printer::end_font (const char *fontname)
-{
- if (strcmp(fontname, "B") == 0) {
- current_paragraph->done_bold();
- } else if (strcmp(fontname, "I") == 0) {
- current_paragraph->done_italic();
- } else if (strcmp(fontname, "BI") == 0) {
- current_paragraph->done_bold();
- current_paragraph->done_italic();
- } else if (strcmp(fontname, "CR") == 0) {
- current_paragraph->done_tt();
- } else if (strcmp(fontname, "CI") == 0) {
- current_paragraph->done_italic();
- current_paragraph->done_tt();
- } else if (strcmp(fontname, "CB") == 0) {
- current_paragraph->done_bold();
- current_paragraph->done_tt();
- } else if (strcmp(fontname, "CBI") == 0) {
- current_paragraph->done_bold();
- current_paragraph->done_italic();
- current_paragraph->done_tt();
- }
-}
-
-/*
- * start_font - starts the font corresponding to name.
- */
-
-void html_printer::start_font (const char *fontname)
-{
- if (strcmp(fontname, "R") == 0) {
- current_paragraph->done_bold();
- current_paragraph->done_italic();
- current_paragraph->done_tt();
- } else if (strcmp(fontname, "B") == 0) {
- current_paragraph->do_bold();
- } else if (strcmp(fontname, "I") == 0) {
- current_paragraph->do_italic();
- } else if (strcmp(fontname, "BI") == 0) {
- current_paragraph->do_bold();
- current_paragraph->do_italic();
- } else if (strcmp(fontname, "CR") == 0) {
- if ((! fill_on) && (is_courier_until_eol()) &&
- is_line_start(! fill_on)) {
- current_paragraph->do_pre();
- }
- current_paragraph->do_tt();
- } else if (strcmp(fontname, "CI") == 0) {
- if ((! fill_on) && (is_courier_until_eol()) &&
- is_line_start(! fill_on)) {
- current_paragraph->do_pre();
- }
- current_paragraph->do_tt();
- current_paragraph->do_italic();
- } else if (strcmp(fontname, "CB") == 0) {
- if ((! fill_on) && (is_courier_until_eol()) &&
- is_line_start(! fill_on)) {
- current_paragraph->do_pre();
- }
- current_paragraph->do_tt();
- current_paragraph->do_bold();
- } else if (strcmp(fontname, "CBI") == 0) {
- if ((! fill_on) && (is_courier_until_eol()) &&
- is_line_start(! fill_on)) {
- current_paragraph->do_pre();
- }
- current_paragraph->do_tt();
- current_paragraph->do_italic();
- current_paragraph->do_bold();
- }
-}
-
-/*
- * start_size - from is old font size, to is the new font size.
- * The html increase <big> and <small> decrease alters the
- * font size by 20%. We try and map these onto glyph sizes.
- */
-
-void html_printer::start_size (int from, int to)
-{
- if (from < to) {
- while (from < to) {
- current_paragraph->do_big();
- from += SIZE_INCREMENT;
- }
- } else if (from > to) {
- while (from > to) {
- current_paragraph->do_small();
- from -= SIZE_INCREMENT;
- }
- }
-}
-
-/*
- * do_font - checks to see whether we need to alter the html font.
- */
-
-void html_printer::do_font (text_glob *g)
-{
- /*
- * check if the output_style.point_size has not been set yet
- * this allow users to place .ps at the top of their troff files
- * and grohtml can then treat the .ps value as the base font size (3)
- */
- if (output_style.point_size == -1) {
- output_style.point_size = pointsize;
- }
-
- if (g->text_style.f != output_style.f) {
- if (output_style.f != 0) {
- end_font(output_style.f->get_name());
- }
- output_style.f = g->text_style.f;
- if (output_style.f != 0) {
- start_font(output_style.f->get_name());
- }
- }
- if (output_style.point_size != g->text_style.point_size) {
- do_sup_or_sub(g);
- if ((output_style.point_size > 0) &&
- (g->text_style.point_size > 0)) {
- start_size(output_style.point_size, g->text_style.point_size);
- }
- if (g->text_style.point_size > 0) {
- output_style.point_size = g->text_style.point_size;
- }
- }
- if (output_style.col != g->text_style.col) {
- current_paragraph->done_color();
- output_style.col = g->text_style.col;
- current_paragraph->do_color(&output_style.col);
- }
-}
-
-/*
- * start_subscript - returns TRUE if, g, looks like a subscript start.
- */
-
-int html_printer::start_subscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_style.point_size != 0) &&
- (output_vpos < g->minv) &&
- (output_vpos-height > g->maxv) &&
- (output_style.point_size > g->text_style.point_size) );
-}
-
-/*
- * start_superscript - returns TRUE if, g, looks like a superscript start.
- */
-
-int html_printer::start_superscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_style.point_size != 0) &&
- (output_vpos > g->minv) &&
- (output_vpos-height < g->maxv) &&
- (output_style.point_size > g->text_style.point_size) );
-}
-
-/*
- * end_subscript - returns TRUE if, g, looks like the end of a subscript.
- */
-
-int html_printer::end_subscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_style.point_size != 0) &&
- (g->minv < output_vpos) &&
- (output_vpos-height > g->maxv) &&
- (output_style.point_size < g->text_style.point_size) );
-}
-
-/*
- * end_superscript - returns TRUE if, g, looks like the end of a superscript.
- */
-
-int html_printer::end_superscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_style.point_size != 0) &&
- (g->minv > output_vpos) &&
- (output_vpos-height < g->maxv) &&
- (output_style.point_size < g->text_style.point_size) );
-}
-
-/*
- * do_sup_or_sub - checks to see whether the next glyph is a subscript/superscript
- * start/end and it calls the services of html-text to issue the
- * appropriate tags.
- */
-
-void html_printer::do_sup_or_sub (text_glob *g)
-{
- if (! supress_sub_sup) {
- if (start_subscript(g)) {
- current_paragraph->do_sub();
- } else if (start_superscript(g)) {
- current_paragraph->do_sup();
- } else if (end_subscript(g)) {
- current_paragraph->done_sub();
- } else if (end_superscript(g)) {
- current_paragraph->done_sup();
- }
- }
-}
-
-/*
- * do_end_para - writes out the html text after shutting down the
- * current paragraph.
- */
-
-void html_printer::do_end_para (text_glob *g)
-{
- do_font(g);
- current_paragraph->done_para();
- current_paragraph->remove_para_space();
- html.put_string(g->text_string+9);
- output_vpos = g->minv;
- output_hpos = g->maxh;
- output_vpos_max = g->maxv;
- supress_sub_sup = FALSE;
-}
-
-/*
- * emit_html - write out the html text
- */
-
-void html_printer::emit_html (text_glob *g)
-{
- do_font(g);
- determine_space(g);
- current_paragraph->do_emittext(g->text_string, g->text_length);
- output_vpos = g->minv;
- output_hpos = g->maxh;
- output_vpos_max = g->maxv;
- supress_sub_sup = FALSE;
-}
-
-/*
- * flush_sbuf - flushes the current sbuf into the list of glyphs.
- */
-
-void html_printer::flush_sbuf()
-{
- if (sbuf.length() > 0) {
- int r=font::res; // resolution of the device
- set_style(sbuf_style);
-
- if (overstrike_detected && (! is_bold(sbuf_style.f))) {
- font *bold_font = make_bold(sbuf_style.f);
- if (bold_font != NULL)
- sbuf_style.f = bold_font;
- }
-
- page_contents->add(&sbuf_style, sbuf,
- line_number,
- sbuf_vpos-sbuf_style.point_size*r/72, sbuf_start_hpos,
- sbuf_vpos , sbuf_end_hpos);
-
- output_hpos = sbuf_end_hpos;
- output_vpos = sbuf_vpos;
- last_sbuf_length = 0;
- sbuf_prev_hpos = sbuf_end_hpos;
- overstrike_detected = FALSE;
- sbuf.clear();
- }
-}
-
-void html_printer::set_line_thickness(const environment *env)
-{
- line_thickness = env->size;
-}
-
-void html_printer::draw(int code, int *p, int np, const environment *env)
-{
- switch (code) {
-
- case 'l':
-# if 0
- if (np == 2) {
- page_contents->add_line(&sbuf_style,
- line_number,
- env->hpos, env->vpos, env->hpos+p[0], env->vpos+p[1], line_thickness);
- } else {
- error("2 arguments required for line");
- }
-# endif
- break;
- case 't':
- {
- if (np == 0) {
- line_thickness = -1;
- } else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- line_thickness = p[0];
- }
- break;
- }
-
- case 'P':
- break;
- case 'p':
- break;
- case 'E':
- break;
- case 'e':
- break;
- case 'C':
- break;
- case 'c':
- break;
- case 'a':
- break;
- case '~':
- break;
- case 'f':
- break;
- case 'F':
- // fill with color env->fill
- if (background != NULL)
- delete background;
- background = new color;
- *background = *env->fill;
- break;
-
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
-}
-
-html_printer::html_printer()
-: html(0, MAX_LINE_LENGTH),
- no_of_printed_pages(0),
- last_sbuf_length(0),
- overstrike_detected(FALSE),
- output_hpos(-1),
- output_vpos(-1),
- output_vpos_max(-1),
- line_thickness(-1),
- inside_font_style(0),
- page_number(0),
- header_indent(-1),
- supress_sub_sup(TRUE),
- cutoff_heading(100),
- indent(NULL),
- table(NULL),
- end_center(0),
- end_tempindent(0),
- next_tag(INLINE),
- fill_on(TRUE),
- max_linelength(-1),
- linelength(0),
- pageoffset(0),
- troff_indent(0),
- device_indent(0),
- temp_indent(0),
- pointsize(base_point_size),
- line_number(0),
- background(default_background),
- seen_indent(FALSE),
- next_indent(0),
- seen_pageoffset(FALSE),
- next_pageoffset(0),
- seen_linelength(FALSE),
- next_linelength(0),
- seen_center(FALSE),
- next_center(0),
- seen_space(0),
- seen_break(0),
- current_column(0),
- row_space(FALSE)
-{
- file_list.add_new_file(xtmpfile());
- html.set_file(file_list.get_file());
- if (font::hor != 24)
- fatal("horizontal resolution must be 24");
- if (font::vert != 40)
- fatal("vertical resolution must be 40");
-#if 0
- // should be sorted html..
- if (font::res % (font::sizescale*72) != 0)
- fatal("res must be a multiple of 72*sizescale");
-#endif
- int r = font::res;
- int point = 0;
- while (r % 10 == 0) {
- r /= 10;
- point++;
- }
- res = r;
- html.set_fixed_point(point);
- space_char_index = font::name_to_index("space");
- space_width = font::hor;
- paper_length = font::paperlength;
- linelength = font::res*13/2;
- if (paper_length == 0)
- paper_length = 11*font::res;
-
- page_contents = new page();
-}
-
-/*
- * add_to_sbuf - adds character code or name to the sbuf.
- */
-
-void html_printer::add_to_sbuf (int idx, const string &s)
-{
- if (sbuf_style.f == NULL)
- return;
-
- char *html_glyph = NULL;
- unsigned int code = sbuf_style.f->get_code(idx);
-
- if (s.empty()) {
- if (sbuf_style.f->contains(idx))
- html_glyph = (char *)sbuf_style.f->get_special_device_encoding(idx);
- else
- html_glyph = NULL;
-
- if ((html_glyph == NULL) && (code >= UNICODE_DESC_START))
- html_glyph = to_unicode(code);
- } else
- html_glyph = get_html_translation(sbuf_style.f, s);
-
- last_sbuf_length = sbuf.length();
- if (html_glyph == NULL)
- sbuf += ((char)code);
- else
- sbuf += html_glyph;
-}
-
-int html_printer::sbuf_continuation (int idx, const char *name,
- const environment *env, int w)
-{
- /*
- * lets see whether the glyph is closer to the end of sbuf
- */
- if ((sbuf_end_hpos == env->hpos)
- || ((sbuf_prev_hpos < sbuf_end_hpos)
- && (env->hpos < sbuf_end_hpos)
- && ((sbuf_end_hpos-env->hpos < env->hpos-sbuf_prev_hpos)))) {
- add_to_sbuf(idx, name);
- sbuf_prev_hpos = sbuf_end_hpos;
- sbuf_end_hpos += w + sbuf_kern;
- return TRUE;
- } else {
- if ((env->hpos >= sbuf_end_hpos) &&
- ((sbuf_kern == 0) || (sbuf_end_hpos - sbuf_kern != env->hpos))) {
- /*
- * lets see whether a space is needed or not
- */
-
- if (env->hpos-sbuf_end_hpos < space_width) {
- add_to_sbuf(idx, name);
- sbuf_prev_hpos = sbuf_end_hpos;
- sbuf_end_hpos = env->hpos + w;
- return TRUE;
- }
- }
- }
- return FALSE ;
-}
-
-/*
- * get_html_translation - given the position of the character and its name
- * return the device encoding for such character.
- */
-
-char *get_html_translation (font *f, const string &name)
-{
- int idx;
-
- if ((f == 0) || name.empty())
- return NULL;
- else {
- idx = f->name_to_index((char *)(name + '\0').contents());
- if (idx == 0) {
- error("character `%s' not found", (name + '\0').contents());
- return NULL;
- } else
- if (f->contains(idx))
- return (char *)f->get_special_device_encoding(idx);
- else
- return NULL;
- }
-}
-
-/*
- * overstrike - returns TRUE if the glyph (i, name) is going to overstrike
- * a previous glyph in sbuf.
- * If TRUE the font is changed to bold and the previous sbuf
- * is flushed.
- */
-
-int html_printer::overstrike(int idx, const char *name, const environment *env, int w)
-{
- if ((env->hpos < sbuf_end_hpos)
- || ((sbuf_kern != 0) && (sbuf_end_hpos - sbuf_kern < env->hpos))) {
- /*
- * at this point we have detected an overlap
- */
- if (overstrike_detected) {
- /* already detected, remove previous glyph and use this glyph */
- sbuf.set_length(last_sbuf_length);
- add_to_sbuf(idx, name);
- sbuf_end_hpos = env->hpos + w;
- return TRUE;
- } else {
- /* first time we have detected an overstrike in the sbuf */
- sbuf.set_length(last_sbuf_length); /* remove previous glyph */
- if (! is_bold(sbuf_style.f))
- flush_sbuf();
- overstrike_detected = TRUE;
- add_to_sbuf(idx, name);
- sbuf_end_hpos = env->hpos + w;
- return TRUE;
- }
- }
- return FALSE ;
-}
-
-/*
- * set_char - adds a character into the sbuf if it is a continuation
- * with the previous word otherwise flush the current sbuf
- * and add character anew.
- */
-
-void html_printer::set_char(int i, font *f, const environment *env,
- int w, const char *name)
-{
- style sty(f, env->size, env->height, env->slant, env->fontno, *env->col);
- if (sty.slant != 0) {
- if (sty.slant > 80 || sty.slant < -80) {
- error("silly slant `%1' degrees", sty.slant);
- sty.slant = 0;
- }
- }
- if (((! sbuf.empty()) && (sty == sbuf_style) && (sbuf_vpos == env->vpos))
- && (sbuf_continuation(i, name, env, w) || overstrike(i, name, env, w)))
- return;
-
- flush_sbuf();
- if (sbuf_style.f == NULL)
- sbuf_style = sty;
- add_to_sbuf(i, name);
- sbuf_end_hpos = env->hpos + w;
- sbuf_start_hpos = env->hpos;
- sbuf_prev_hpos = env->hpos;
- sbuf_vpos = env->vpos;
- sbuf_style = sty;
- sbuf_kern = 0;
-}
-
-/*
- * set_numbered_char - handle numbered characters.
- * Negative values are interpreted as unbreakable spaces;
- * the value (taken positive) gives the width.
- */
-
-void html_printer::set_numbered_char(int num, const environment *env,
- int *widthp)
-{
- int nbsp_width = 0;
- if (num < 0) {
- nbsp_width = -num;
- num = 160; // &nbsp;
- }
- int i = font::number_to_index(num);
- int fn = env->fontno;
- if (fn < 0 || fn >= nfonts) {
- error("bad font position `%1'", fn);
- return;
- }
- font *f = font_table[fn];
- if (f == 0) {
- error("no font mounted at `%1'", fn);
- return;
- }
- if (!f->contains(i)) {
- error("font `%1' does not contain numbered character %2",
- f->get_name(),
- num);
- return;
- }
- int w;
- if (nbsp_width)
- w = nbsp_width;
- else
- w = f->get_width(i, env->size);
- w = round_width(w);
- if (widthp)
- *widthp = w;
- set_char(i, f, env, w, 0);
-}
-
-int html_printer::set_char_and_width(const char *nm, const environment *env,
- int *widthp, font **f)
-{
- int i = font::name_to_index(nm);
- int fn = env->fontno;
- if (fn < 0 || fn >= nfonts) {
- error("bad font position `%1'", fn);
- return -1;
- }
- *f = font_table[fn];
- if (*f == 0) {
- error("no font mounted at `%1'", fn);
- return -1;
- }
- if (!(*f)->contains(i)) {
- if (nm[0] != '\0' && nm[1] == '\0')
- error("font `%1' does not contain ascii character `%2'",
- (*f)->get_name(),
- nm[0]);
- else
- error("font `%1' does not contain special character `%2'",
- (*f)->get_name(),
- nm);
- return -1;
- }
- int w = (*f)->get_width(i, env->size);
- w = round_width(w);
- if (widthp)
- *widthp = w;
- return i;
-}
-
-/*
- * write_title - writes the title to this document
- */
-
-void html_printer::write_title (int in_head)
-{
- if (title.has_been_found) {
- if (in_head) {
- html.put_string("<title>");
- html.put_string(title.text);
- html.put_string("</title>").nl().nl();
- } else {
- title.has_been_written = TRUE;
- if (title.with_h1) {
- html.put_string("<h1 align=center>");
- html.put_string(title.text);
- html.put_string("</h1>").nl().nl();
- }
- }
- } else if (in_head) {
- // place empty title tags to help conform to `tidy'
- html.put_string("<title></title>").nl();
- }
-}
-
-/*
- * write_rule - emits a html rule tag, if the auto_rule boolean is true.
- */
-
-static void write_rule (void)
-{
- if (auto_rule)
- fputs("<hr>\n", stdout);
-}
-
-void html_printer::begin_page(int n)
-{
- page_number = n;
-#if defined(DEBUGGING)
- html.begin_comment("Page: ").put_string(i_to_a(page_number)).end_comment();;
-#endif
- no_of_printed_pages++;
-
- output_style.f = 0;
- output_style.point_size= -1;
- output_space_code = 32;
- output_draw_point_size = -1;
- output_line_thickness = -1;
- output_hpos = -1;
- output_vpos = -1;
- output_vpos_max = -1;
- current_paragraph = new html_text(&html);
- do_indent(get_troff_indent(), pageoffset, linelength);
- current_paragraph->do_para("", FALSE);
-}
-
-void html_printer::end_page(int)
-{
- flush_sbuf();
- flush_page();
-}
-
-font *html_printer::make_font(const char *nm)
-{
- return html_font::load_html_font(nm);
-}
-
-void html_printer::do_body (void)
-{
- if (background == NULL)
- fputs("<body>\n\n", stdout);
- else {
- unsigned int r, g, b;
- char buf[6+1];
-
- background->get_rgb(&r, &g, &b);
- // we have to scale 0..0xFFFF to 0..0xFF
- sprintf(buf, "%.2X%.2X%.2X", r/0x101, g/0x101, b/0x101);
-
- fputs("<body bgcolor=\"#", stdout);
- fputs(buf, stdout);
- fputs("\">\n\n", stdout);
- }
-}
-
-/*
- * emit_link - generates: <a href="to">name</a>
- */
-
-void html_printer::emit_link (const string &to, const char *name)
-{
- fputs("<a href=\"", stdout);
- fputs(to.contents(), stdout);
- fputs("\">", stdout);
- fputs(name, stdout);
- fputs("</a>", stdout);
-}
-
-/*
- * write_navigation - writes out the links which navigate between
- * file fragments.
- */
-
-void html_printer::write_navigation (const string &top, const string &prev,
- const string &next, const string &current)
-{
- int need_bar = FALSE;
-
- if (multiple_files) {
- write_rule();
- fputs("[ ", stdout);
- if ((strcmp(prev.contents(), "") != 0) && prev != top && prev != current) {
- emit_link(prev, "prev");
- need_bar = TRUE;
- }
- if ((strcmp(next.contents(), "") != 0) && next != top && next != current) {
- if (need_bar)
- fputs(" | ", stdout);
- emit_link(next, "next");
- need_bar = TRUE;
- }
- if (top != "<standard input>" && (strcmp(top.contents(), "") != 0) && top != current) {
- if (need_bar)
- fputs(" | ", stdout);
- emit_link(top, "top");
- }
- fputs(" ]\n", stdout);
- write_rule();
- }
-}
-
-/*
- * do_file_components - scan the file list copying each temporary
- * file in turn. This is used twofold:
- *
- * firstly to emit section heading links,
- * between file fragments if required and
- * secondly to generate jobname file fragments
- * if required.
- */
-
-void html_printer::do_file_components (void)
-{
- int fragment_no = 1;
- string top;
- string prev;
- string next;
- string current;
-
- file_list.start_of_list();
- top = string(job_name);
- top += string(".html");
- top += '\0';
- next = file_list.next_file_name();
- next += '\0';
- current = next;
- while (file_list.get_file() != 0) {
- if (fseek(file_list.get_file(), 0L, 0) < 0)
- fatal("fseek on temporary file failed");
- html.copy_file(file_list.get_file());
- fclose(file_list.get_file());
-
- file_list.move_next();
- if (file_list.is_new_output_file()) {
- if (fragment_no > 1)
- write_navigation(top, prev, next, current);
- prev = current;
- current = next;
- next = file_list.next_file_name();
- next += '\0';
- string split_file = file_list.file_name();
- split_file += '\0';
- fflush(stdout);
- freopen(split_file.contents(), "w", stdout);
- fragment_no++;
- writeHeadMetaStyle();
- write_navigation(top, prev, next, current);
- }
- if (file_list.are_links_required())
- header.write_headings(stdout, TRUE);
- }
- if (fragment_no > 1)
- write_navigation(top, prev, next, current);
- else
- write_rule();
-}
-
-/*
- * writeHeadMetaStyle - emits the <head> <meta> and <style> tags and
- * related information.
- */
-
-void html_printer::writeHeadMetaStyle (void)
-{
- fputs("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n", stdout);
- fputs("\"http://www.w3.org/TR/html4/loose.dtd\">\n", stdout);
-
- fputs("<html>\n", stdout);
- fputs("<head>\n", stdout);
- fputs("<meta name=\"generator\" "
- "content=\"groff -Thtml, see www.gnu.org\">\n", stdout);
- fputs("<meta http-equiv=\"Content-Type\" "
- "content=\"text/html; charset=US-ASCII\">\n", stdout);
- fputs("<meta name=\"Content-Style\" content=\"text/css\">\n", stdout);
-
- fputs("<style type=\"text/css\">\n", stdout);
- fputs(" p { margin-top: 0; margin-bottom: 0; }\n", stdout);
- fputs(" pre { margin-top: 0; margin-bottom: 0; }\n", stdout);
- fputs(" table { margin-top: 0; margin-bottom: 0; }\n", stdout);
- fputs("</style>\n", stdout);
-}
-
-html_printer::~html_printer()
-{
-#ifdef LONG_FOR_TIME_T
- long t;
-#else
- time_t t;
-#endif
-
- current_paragraph->flush_text();
- html.end_line();
- html.set_file(stdout);
- html.begin_comment("Creator : ")
- .put_string("groff ")
- .put_string("version ")
- .put_string(Version_string)
- .end_comment();
-
- t = time(0);
- html.begin_comment("CreationDate: ")
- .put_string(ctime(&t), strlen(ctime(&t))-1)
- .end_comment();
-
- writeHeadMetaStyle();
-
- write_title(TRUE);
- head_info += '\0';
- fputs(head_info.contents(), stdout);
- fputs("</head>\n", stdout);
- do_body();
-
- write_title(FALSE);
- header.write_headings(stdout, FALSE);
- write_rule();
-#if defined(DEBUGGING)
- html.begin_comment("Total number of pages: ").put_string(i_to_a(no_of_printed_pages)).end_comment();
-#endif
- html.end_line();
- html.end_line();
-
- if (multiple_files) {
- fputs("</body>\n", stdout);
- fputs("</html>\n", stdout);
- do_file_components();
- } else {
- do_file_components();
- fputs("</body>\n", stdout);
- fputs("</html>\n", stdout);
- }
-}
-
-/*
- * get_str - returns a dupicate of string, s. The duplicate
- * string is terminated at the next ',' or ']'.
- */
-
-static char *get_str (const char *s, char **n)
-{
- int i=0;
- char *v;
-
- while ((s[i] != (char)0) && (s[i] != ',') && (s[i] != ']'))
- i++;
- if (i>0) {
- v = new char[i+1];
- memcpy(v, s, i+1);
- v[i] = (char)0;
- if (s[i] == ',')
- (*n) = (char *)&s[i+1];
- else
- (*n) = (char *)&s[i];
- return v;
- }
- if (s[i] == ',')
- (*n) = (char *)&s[1];
- else
- (*n) = (char *)s;
- return NULL;
-}
-
-/*
- * make_val - creates a string from if s is NULL.
- */
-
-char *make_val (char *s, int v, char *id, char *f, char *l)
-{
- if (s == NULL) {
- char buf[30];
-
- sprintf(buf, "%d", v);
- return strsave(buf);
- }
- else {
- /*
- * check that value, s, is the same as, v.
- */
- char *t = s;
-
- while (*t == '=')
- t++;
- if (atoi(t) != v) {
- if (f == NULL)
- f = (char *)"stdin";
- if (l == NULL)
- l = (char *)"<none>";
- fprintf(stderr, "%s:%s: grohtml assertion failed at id%s expecting %d and was given %s\n",
- f, l, id, v, s);
- }
- return s;
- }
-}
-
-/*
- * handle_assertion - handles the assertions created via .www:ASSERT
- * in www.tmac. See www.tmac for examples.
- * This method should be called as we are
- * parsing the ditroff input. It checks the x, y
- * position assertions. It does _not_ check the
- * troff state assertions as these are unknown at this
- * point.
- */
-
-void html_printer::handle_assertion (int minv, int minh, int maxv, int maxh, const char *s)
-{
- char *n;
- char *cmd = get_str(s, &n);
- char *id = get_str(n, &n);
- char *val = get_str(n, &n);
- char *file= get_str(n, &n);
- char *line= get_str(n, &n);
-
- if (strcmp(cmd, "assertion:[x") == 0)
- as.addx(cmd, id, make_val(val, minh, id, file, line), file, line);
- else if (strcmp(cmd, "assertion:[y") == 0)
- as.addy(cmd, id, make_val(val, minv, id, file, line), file, line);
- else
- if (strncmp(cmd, "assertion:[", strlen("assertion:[")) == 0)
- page_contents->add_tag(&sbuf_style, string(s),
- line_number, minv, minh, maxv, maxh);
-}
-
-/*
- * build_state_assertion - builds the troff state assertions.
- */
-
-void html_printer::handle_state_assertion (text_glob *g)
-{
- if (g != NULL && g->is_a_tag() &&
- (strncmp(g->text_string, "assertion:[", 11) == 0)) {
- char *n = (char *)&g->text_string[11];
- char *cmd = get_str(n, &n);
- char *val = get_str(n, &n);
- (void)get_str(n, &n); // unused
- char *file= get_str(n, &n);
- char *line= get_str(n, &n);
-
- as.build(cmd, val, file, line);
- }
-}
-
-/*
- * special - handle all x X requests from troff. For post-html they
- * allow users to pass raw html commands, turn auto linked
- * headings off/on etc.
- */
-
-void html_printer::special(char *s, const environment *env, char type)
-{
- if (type != 'p')
- return;
- if (s != 0) {
- flush_sbuf();
- if (env->fontno >= 0) {
- style sty(get_font_from_index(env->fontno), env->size, env->height,
- env->slant, env->fontno, *env->col);
- sbuf_style = sty;
- }
-
- if (strncmp(s, "html:", 5) == 0) {
- int r=font::res; /* resolution of the device */
- font *f=sbuf_style.f;
-
- if (f == NULL) {
- int found=FALSE;
-
- f = font::load_font("TR", &found);
- }
-
- /*
- * need to pass rest of string through to html output during flush
- */
- page_contents->add_and_encode(&sbuf_style, string(&s[5]),
- line_number,
- env->vpos-env->size*r/72, env->hpos,
- env->vpos , env->hpos,
- FALSE);
-
- /*
- * assume that the html command has no width, if it does then
- * hopefully troff will have fudged this in a macro by
- * requesting that the formatting move right by the appropriate
- * amount.
- */
- } else if (strncmp(s, "html</p>:", 9) == 0) {
- int r=font::res; /* resolution of the device */
- font *f=sbuf_style.f;
-
- if (f == NULL) {
- int found=FALSE;
-
- f = font::load_font("TR", &found);
- }
-
- /*
- * need to pass all of string through to html output during flush
- */
- page_contents->add_and_encode(&sbuf_style, string(s),
- line_number,
- env->vpos-env->size*r/72, env->hpos,
- env->vpos , env->hpos,
- TRUE);
-
- /*
- * assume that the html command has no width, if it does then
- * hopefully troff will have fudged this in a macro by
- * requesting that the formatting move right by the appropriate
- * amount.
- */
- } else if (strncmp(s, "index:", 6) == 0) {
- cutoff_heading = atoi(&s[6]);
- } else if (strncmp(s, "assertion:[", 11) == 0) {
- int r=font::res; /* resolution of the device */
-
- handle_assertion(env->vpos-env->size*r/72, env->hpos,
- env->vpos, env->hpos, s);
- }
- }
-}
-
-/*
- * devtag - handles device troff tags sent from the `troff'.
- * These include the troff state machine tags:
- * .br, .sp, .in, .tl, .ll etc
- *
- * (see man 5 grohtml_tags).
- */
-
-void html_printer::devtag (char *s, const environment *env, char type)
-{
- if (type != 'p')
- return;
-
- if (s != 0) {
- flush_sbuf();
- if (env->fontno >= 0) {
- style sty(get_font_from_index(env->fontno), env->size, env->height,
- env->slant, env->fontno, *env->col);
- sbuf_style = sty;
- }
-
- if (strncmp(s, "devtag:", strlen("devtag:")) == 0) {
- int r=font::res; /* resolution of the device */
-
- page_contents->add_tag(&sbuf_style, string(s),
- line_number,
- env->vpos-env->size*r/72, env->hpos,
- env->vpos , env->hpos);
- }
- }
-}
-
-
-/*
- * taken from number.cpp in src/roff/troff, [hunits::hunits(units x)]
- */
-
-int html_printer::round_width(int x)
-{
- int r = font::hor;
- int n;
-
- // don't depend on the rounding direction for division of negative integers
- if (r == 1)
- n = x;
- else
- n = (x < 0
- ? -((-x + r/2 - 1)/r)
- : (x + r/2 - 1)/r);
- return n * r;
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "a:bdD:F:g:hi:I:j:lno:prs:S:v",
- long_options, NULL))
- != EOF)
- switch(c) {
- case 'a':
- /* text antialiasing bits - handled by pre-html */
- break;
- case 'b':
- // set background color to white
- default_background = new color;
- default_background->set_gray(color::MAX_COLOR_VAL);
- break;
- case 'd':
- /* handled by pre-html */
- break;
- case 'D':
- /* handled by pre-html */
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'g':
- /* graphic antialiasing bits - handled by pre-html */
- break;
- case 'h':
- /* do not use the Hn headings of html, but manufacture our own */
- manufacture_headings = TRUE;
- break;
- case 'i':
- /* handled by pre-html */
- break;
- case 'I':
- /* handled by pre-html */
- break;
- case 'j':
- multiple_files = TRUE;
- job_name = optarg;
- break;
- case 'l':
- auto_links = FALSE;
- break;
- case 'n':
- simple_anchors = TRUE;
- break;
- case 'o':
- /* handled by pre-html */
- break;
- case 'p':
- /* handled by pre-html */
- break;
- case 'r':
- auto_rule = FALSE;
- break;
- case 's':
- base_point_size = atoi(optarg);
- break;
- case 'S':
- split_level = atoi(optarg) + 1;
- break;
- case 'v':
- printf("GNU post-grohtml (groff) version %s\n", Version_string);
- exit(0);
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- if (optind >= argc) {
- do_file("-");
- } else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-vblnh] [-D dir] [-I image_stem] [-F dir] [files ...]\n",
- program_name);
-}
diff --git a/contrib/groff/src/devices/grolbp/Makefile.sub b/contrib/groff/src/devices/grolbp/Makefile.sub
deleted file mode 100644
index a237293391bb..000000000000
--- a/contrib/groff/src/devices/grolbp/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grolbp$(EXEEXT)
-MAN1=grolbp.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lbp.$(OBJEXT)
-CCSRCS=$(srcdir)/lbp.cpp
diff --git a/contrib/groff/src/devices/grolbp/charset.h b/contrib/groff/src/devices/grolbp/charset.h
deleted file mode 100644
index a0cd057b46f0..000000000000
--- a/contrib/groff/src/devices/grolbp/charset.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Definition of the WP54 character set
-
-unsigned char symset[] = {
-0x57,0x50,0x35,0x34,0x00,0x41,0x76,0x61,0x6e,0x74,0x47,0x61,
-0x72,0x64,0x65,0x2d,0x42,0x6f,0x6f,0x6b,0x00,0x41,0x76,
-0x61,0x6e,0x74,0x47,0x61,0x72,0x64,0x65,0x2d,0x44,0x65,
-0x6d,0x69,0x00,0x41,0x76,0x61,0x6e,0x74,0x47,0x61,0x72,
-0x64,0x65,0x2d,0x42,0x6f,0x6f,0x6b,0x4f,0x62,0x6c,0x69,
-0x71,0x75,0x65,0x00,0x41,0x76,0x61,0x6e,0x74,0x47,0x61,
-0x72,0x64,0x65,0x2d,0x44,0x65,0x6d,0x69,0x4f,0x62,0x6c,
-0x69,0x71,0x75,0x65,0x00,0x42,0x6f,0x6f,0x6b,0x6d,0x61,
-0x6e,0x2d,0x4c,0x69,0x67,0x68,0x74,0x00,0x42,0x6f,0x6f,
-0x6b,0x6d,0x61,0x6e,0x2d,0x44,0x65,0x6d,0x69,0x00,0x42,
-0x6f,0x6f,0x6b,0x6d,0x61,0x6e,0x2d,0x4c,0x69,0x67,0x68,
-0x74,0x49,0x74,0x61,0x6c,0x69,0x63,0x00,0x42,0x6f,0x6f,
-0x6b,0x6d,0x61,0x6e,0x2d,0x44,0x65,0x6d,0x69,0x49,0x74,
-0x61,0x6c,0x69,0x63,0x00,0x43,0x65,0x6e,0x74,0x75,0x72,
-0x79,0x53,0x63,0x68,0x6c,0x62,0x6b,0x2d,0x52,0x6f,0x6d,
-0x61,0x6e,0x00,0x43,0x65,0x6e,0x74,0x75,0x72,0x79,0x53,
-0x63,0x68,0x6c,0x62,0x6b,0x2d,0x42,0x6f,0x6c,0x64,0x00,
-0x43,0x65,0x6e,0x74,0x75,0x72,0x79,0x53,0x63,0x68,0x6c,
-0x62,0x6b,0x2d,0x49,0x74,0x61,0x6c,0x69,0x63,0x00,0x43,
-0x65,0x6e,0x74,0x75,0x72,0x79,0x53,0x63,0x68,0x6c,0x62,
-0x6b,0x2d,0x42,0x6f,0x6c,0x64,0x49,0x74,0x61,0x6c,0x69,
-0x63,0x00,0x44,0x75,0x74,0x63,0x68,0x2d,0x52,0x6f,0x6d,
-0x61,0x6e,0x00,0x44,0x75,0x74,0x63,0x68,0x2d,0x42,0x6f,
-0x6c,0x64,0x00,0x44,0x75,0x74,0x63,0x68,0x2d,0x49,0x74,
-0x61,0x6c,0x69,0x63,0x00,0x44,0x75,0x74,0x63,0x68,0x2d,
-0x42,0x6f,0x6c,0x64,0x49,0x74,0x61,0x6c,0x69,0x63,0x00,
-0x53,0x77,0x69,0x73,0x73,0x00,0x53,0x77,0x69,0x73,0x73,
-0x2d,0x42,0x6f,0x6c,0x64,0x00,0x53,0x77,0x69,0x73,0x73,
-0x2d,0x4f,0x62,0x6c,0x69,0x71,0x75,0x65,0x00,0x53,0x77,
-0x69,0x73,0x73,0x2d,0x42,0x6f,0x6c,0x64,0x4f,0x62,0x6c,
-0x69,0x71,0x75,0x65,0x00,0x53,0x77,0x69,0x73,0x73,0x2d,
-0x4e,0x61,0x72,0x72,0x6f,0x77,0x00,0x53,0x77,0x69,0x73,
-0x73,0x2d,0x4e,0x61,0x72,0x72,0x6f,0x77,0x2d,0x42,0x6f,
-0x6c,0x64,0x00,0x53,0x77,0x69,0x73,0x73,0x2d,0x4e,0x61,
-0x72,0x72,0x6f,0x77,0x2d,0x4f,0x62,0x6c,0x69,0x71,0x75,
-0x65,0x00,0x53,0x77,0x69,0x73,0x73,0x2d,0x4e,0x61,0x72,
-0x72,0x6f,0x77,0x2d,0x42,0x6f,0x6c,0x64,0x4f,0x62,0x6c,
-0x69,0x71,0x75,0x65,0x00,0x5a,0x61,0x70,0x66,0x43,0x61,
-0x6c,0x6c,0x69,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x2d,
-0x52,0x6f,0x6d,0x61,0x6e,0x00,0x5a,0x61,0x70,0x66,0x43,
-0x61,0x6c,0x6c,0x69,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0x2d,0x42,0x6f,0x6c,0x64,0x00,0x5a,0x61,0x70,0x66,0x43,
-0x61,0x6c,0x6c,0x69,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0x2d,0x49,0x74,0x61,0x6c,0x69,0x63,0x00,0x5a,0x61,0x70,
-0x66,0x43,0x61,0x6c,0x6c,0x69,0x67,0x72,0x61,0x70,0x68,
-0x69,0x63,0x2d,0x42,0x6f,0x6c,0x64,0x49,0x74,0x61,0x6c,
-0x69,0x63,0x00,0x5a,0x61,0x70,0x66,0x43,0x68,0x61,0x6e,
-0x63,0x65,0x72,0x79,0x2d,0x4d,0x65,0x64,0x69,0x75,0x6d,
-0x49,0x74,0x61,0x6c,0x69,0x63,0x00,0x00,0x09,0x00,0x0A,
-0x00,0x0B,0x00,0x0E,0x00,0x14,0x00,0x17,0x00,0x18,0x00,
-0x1F,0x00,0x20,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x45,0x00,
-0x47,0x00,0x48,0x00,0x80,0x00,0x82,0x00,0x83,0x00,0x84,
-0x00,0x85,0x00,0x87,0x00,0x8B,0x00,0x8C,0x00,0x8D,0x00,0x8E,
-0x00,0x8F,0x00,0x90,0x00,0x91,0x00,0x92,0x00,0x95,0x00,0x96,
-0x00,0x97,0x00,0x98,0x00,0x99,0x00,0x9C,0x00,0x9E,0x00,
-0x9F,0x00,0xA0,0x00,0xA1,0x00,0xA2,0x00,0xA3,0x00,0xCB,0x00,
-0xCC,0x00,0xCD,0x00,0xCE,0x00,0xD1,0x00,0xD3,0x00,0xD4,
-0x00,0xD5,0x00,0xD6,0x00,0xFA,0x00,0xFB,0x00,0xFC,0x00,0xFD,
-0x00,0xCF,0x00,0x26,0x00,0x7E,0x03,0x05,0x00,0xA5,0x00,
-0xA6,0x00,0xA8,0x00,0xAA,0x00,0xAD,0x00,0xAE,0x00,0xAF,0x00,
-0xB0,0x00,0xB1,0x00,0xB2,0x00,0xB3,0x00,0xB5,0x00,0xB6,0x00,
-0xB8,0x00,0xB9,0x00,0xBA,0x00,0xBB,0x00,0xBC,0x00,0xBE,
-0x00,0xBF,0x00,0xC0,0x00,0xC1,0x00,0xC6,0x00,0xDC,0x00,0xEB,
-0x00,0xEC,0x00,0xF2,0x00,0xF3,0x00,0x15,0x00,0x16,0x00,
-0x86
-};
diff --git a/contrib/groff/src/devices/grolbp/grolbp.man b/contrib/groff/src/devices/grolbp/grolbp.man
deleted file mode 100644
index 6685c4f909b7..000000000000
--- a/contrib/groff/src/devices/grolbp/grolbp.man
+++ /dev/null
@@ -1,336 +0,0 @@
-'\" t
-.\" The above line should force the use of tbl as a preprocessor
-.\" vim: set syntax=nroff :
-.\" The above line should set vim into nroff mode
-.ig
-Copyright (C) 1994-2000, 2002 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-
-Modified by Francisco Andrés Verdú <pandres@dragonet.es> for the grolbp
-program.
-..
-.de TQ
-.br
-.ns
-.TP \\$1
-..
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.TH GROLBP @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.SH NAME
-grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nh
-.nr i \n(.i
-.in +\w'\fBgrolbp 'u
-.ti \niu
-.B grolpb
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-l
-.OP \-\-landscape
-.OP \-v
-.OP \-\-version
-.OP \-c n
-.OP \-\-copies= numcopies
-.OP \-p paper_size
-.OP \-\-papersize= paper_size
-.OP \-o orientation
-.OP \-\-orientation= orientation
-.OP \-w width
-.OP \-\-linewidth= width
-.OP \-F dir
-.OP \-\-fontdir= dir
-.OP \-h
-.OP \-\-help
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.hy
-.
-.SH DESCRIPTION
-.B grolbp
-is a driver for
-.B groff
-that produces output in CAPSL and VDM format suitable for Canon LBP\-4 and
-LBP\-8 printers.
-.LP
-For compatibility with grolj4 there is an additional drawing command
-available:
-.TP
-.BI \eD'R\ dh\ dv '
-Draw a rule (i.e.\ a solid black rectangle), with one corner at the current
-position, and the diagonally opposite corner at the current position
-.RI +( dh , dv ).
-.SH OPTIONS
-Note that there can be whitespace between a one-letter option and its
-argument; on the other hand, there must be whitespace and/or an equal sign
-(`=') between a long-name option and its argument.
-.TP
-.BI \-c numcopies
-.TQ
-.BI \-\-copies= numcopies
-Print
-.I numcopies
-copies of each page.
-.TP
-.B \-l
-.TQ
-.B \-\-landscape
-Print the document with a landscape orientation.
-.TP
-.BI \-p paper_size
-.TQ
-.BI \-\-papersize= paper_size
-Set the paper size to
-.IR paper_size ,
-which must be a valid paper size description as indicated in the section
-.BR "PAPER SIZES" .
-.TP
-.BI \-o orientation
-.TQ
-.BI \-\-orientation= orientation
-Print the document with
-.I orientation
-orientation, which must be `portrait' or `landscape'.
-.TP
-.BI \-w width
-.TQ
-.BI \-\-linewidth= width
-Set the default line thickness to
-.I width
-thousandths of an em.
-If this option isn't specified, the line thickness defaults to 0.04\~em.
-.TP
-.B \-v
-.TQ
-.B \-\-version
-Print the version number.
-.TP
-.BI \-F dir
-.TQ
-.BI \-\-fontdir= dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR lbp .
-.TP
-.B \-h
-.TQ
-.B \-\-help
-Print a short help text.
-.SH TYPEFACES
-The driver supports the Dutch, Swiss and Swiss-Narrow scalable typefaces,
-each one in the Regular, Bold, Italic and Bold-Italic styles.
-Additionally, the Courier and Elite monospaced typefaces at the sizes 8 and
-12 points (for Courier) resp. 8 and 10 points (for Elite) are supported,
-each one in the Regular, Bold and Italic styles.
-.PP
-The following chart summarizes the font names you can use to access these
-fonts:
-.PP
-.TS
-tab(|) allbox center;
-c c c c c
-ab c c c c
-.
-Typeface | Regular | Bold | Italic | Bold-Italic
-Dutch | TR | TB | TI | TBI
-Swiss | HR | HB | HI | HBI
-Swiss Narrow | HNR | HNB | HNI | HNBI
-Courier | CR | CB | CI |
-Elite | ER | EB | EI |
-.TE
-.PP
-.SH PAPER SIZES
-The paper size can be set in the
-.B DESC
-file or with command line options to
-.BR grolbp .
-If the paper size is specified both ways, the command line options take
-precedence over the contents of the
-.B DESC
-file (this applies to the page orientation too).
-.PP
-See
-.BR groff_font (@MAN1EXT@)
-how to set the paper dimensions in the
-.B DESC
-file.
-.PP
-To set the paper size in the command line, add
-.sp 1
-.in +2m
-.BI \-p \ paper-size
-.in -2m
-.sp 1
-or
-.sp 1
-.in +2m
-.BI \-\-papersize= paper-size
-.in -2m
-.sp 1
-to the other
-.B grolbp
-options, where
-.I paper-size
-is in the same format as in the
-.B DESC
-file.
-.PP
-If no paper size is specified in the
-.B DESC
-file or the command line, a default size of A4 is used.
-.SH PAGE ORIENTATION
-As with the page size, the orientation of the printed page
-.RB ( portrait
-or
-.BR landscape )
-can be set in the
-.B DESC
-file or with command line options.
-It is also case insensitive.
-.PP
-To set the orientation in the
-.B DESC
-file, insert a line with the following content:
-.sp 1
-.in +2m
-.B orientation
-.RB [ portrait | landscape ]
-.in -2m
-.sp 1
-Only the first valid orientation command in the
-.B DESC
-file is used.
-.PP
-To set the page orientation with command line options you can use the
-.B \-o
-or
-.B \-\-orientation
-option with the same parameters
-.RB ( portrait
-or
-.BR landscape )
-as in the
-.B DESC
-file.
-Or you can use the
-.B \-l
-option to force the pages to be printed in landscape.
-.SH FONT FILE FORMAT
-In addition to the usual commands described in
-.BR groff_font (@MAN5EXT@),
-.B grolbp
-provides the command
-.I lbpname
-which sets the font name sent to the printer when requesting this font.
-The syntax of this command is:
-.sp 1
-.in +2m
-.B lbpname
-.I printer_font_name
-.in -2m
-.IP \(bu
-For bitmapped fonts,
-.I printer_font_name
-has the form
-.sp 1
-.in +2m
-.RI N\(la base_fontname \(ra\(la font_style \(ra
-.in -2m
-.sp 1
-.I base_fontname
-is the font name as it appears in the printers font listings without the
-first letter, up to (but not including) the font size.
-.I font_style
-can be one of the letters
-.BR R ,
-.BR I ,
-or
-.BR B ,
-indicating the font styles Roman, Italic and Bold respectively.
-.IP
-For instance, if the printer's
-.I font listing A
-shows font `Nelite12I.ISO_USA', the corresponding entry in the font
-description file is
-.sp 1
-.in +2m
-.B lbpname NeliteI
-.in -2m
-.IP
-Note that you may need to modify
-.B grolbp
-to add support for new bitmapped fonts, since the available font names and
-font sizes of bitmapped fonts (as documented above) are hard-coded into the
-program.
-.IP \(bu
-For scalable fonts,
-.I printer_font_name
-is identical to the font name as it appears in the printer's
-.IR "font listing A" .
-.IP
-For instance, to select the `Swiss' font in bold style, which appears in
-the printer's
-.I font listing A
-as `Swiss-Bold', the required
-.B lbpname
-command line is
-.sp 1
-.in +2m
-.B lbpname Swiss-Bold
-.in -2m
-.sp 1
-.PP
-The argument of
-.B lbpname
-is case sensitive.
-.SH FILES
-.TP
-.B @FONTDIR@/devlbp/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlbp/ F
-Font description file for font
-.IR F .
-.TP
-.B @MACRODIR@/lbp.tmac
-Macros for use with
-.BR grolbp .
-.SH SEE ALSO
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.\"
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grolbp/lbp.cpp b/contrib/groff/src/devices/grolbp/lbp.cpp
deleted file mode 100644
index 081ab998ff26..000000000000
--- a/contrib/groff/src/devices/grolbp/lbp.cpp
+++ /dev/null
@@ -1,725 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by Francisco Andrés Verdú <pandres@dragonet.es> with many ideas
- taken from the other groff drivers.
-
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
-TODO
-
- - Add X command to include bitmaps
-*/
-
-#include "driver.h"
-#include "lbp.h"
-#include "charset.h"
-#include "paper.h"
-
-#include "nonposix.h"
-
-extern "C" const char *Version_string;
-
-static int user_papersize = -1; // papersize
-static int orientation = -1; // orientation
-static double user_paperlength = 0; // Custom Paper size
-static double user_paperwidth = 0;
-static int ncopies = 1; // Number of copies
-
-#define DEFAULT_LINEWIDTH_FACTOR 40 // 0.04em
-static int linewidth_factor = DEFAULT_LINEWIDTH_FACTOR;
-
-static int set_papersize(const char *paperformat);
-
-class lbp_font : public font {
-public:
- ~lbp_font();
- void handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno);
- static lbp_font *load_lbp_font(const char *);
- char *lbpname;
- char is_scalable;
-private:
- lbp_font(const char *);
-};
-
-class lbp_printer : public printer {
-public:
- lbp_printer(int, double, double);
- ~lbp_printer();
- void set_char(int, font *, const environment *, int, const char *name);
- void draw(int code, int *p, int np, const environment *env);
- void begin_page(int);
- void end_page(int page_length);
- font *make_font(const char *);
- void end_of_line();
-private:
- void set_line_thickness(int size,const environment *env);
- void vdmstart();
- void vdmflush(); // the name vdmend was already used in lbp.h
- void setfillmode(int mode);
- void polygon( int hpos,int vpos,int np,int *p);
- char *font_name(const lbp_font *f, const int siz);
-
- int fill_pattern;
- int fill_mode;
- int cur_hpos;
- int cur_vpos;
- lbp_font *cur_font;
- int cur_size;
- unsigned short cur_symbol_set;
- int line_thickness;
- int req_linethickness; // requested line thickness
- int papersize;
- int paperlength; // custom paper size
- int paperwidth;
-};
-
-lbp_font::lbp_font(const char *nm)
-: font(nm)
-{
-}
-
-lbp_font::~lbp_font()
-{
-}
-
-lbp_font *lbp_font::load_lbp_font(const char *s)
-{
- lbp_font *f = new lbp_font(s);
- f->lbpname = NULL;
- f->is_scalable = 1; // Default is that fonts are scalable
- if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
-}
-
-
-void lbp_font::handle_unknown_font_command(const char *command,
- const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "lbpname") == 0) {
- if (arg == 0)
- fatal_with_file_and_line(filename, lineno,
- "`%1' command requires an argument",
- command);
- this->lbpname = new char[strlen(arg) + 1];
- strcpy(this->lbpname, arg);
- // we recognize bitmapped fonts by the first character of its name
- if (arg[0] == 'N')
- this->is_scalable = 0;
- // fprintf(stderr, "Loading font \"%s\" \n", arg);
- }
- // fprintf(stderr, "Loading font %s \"%s\" in %s at %d\n",
- // command, arg, filename, lineno);
-}
-
-static void wp54charset()
-{
- unsigned int i;
- lbpputs("\033[714;100;29;0;32;120.}");
- for (i = 0; i < sizeof(symset); i++)
- lbpputc(symset[i]);
- lbpputs("\033[100;0 D");
- return;
-}
-
-lbp_printer::lbp_printer(int ps, double pw, double pl)
-: fill_pattern(1),
- fill_mode(0),
- cur_hpos(-1),
- cur_font(0),
- cur_size(0),
- cur_symbol_set(0),
- req_linethickness(-1)
-{
- SET_BINARY(fileno(stdout));
- lbpinit(stdout);
- lbpputs("\033c\033;\033[2&z\033[7 I\033[?32h\033[?33h\033[11h");
- wp54charset(); // Define the new symbol set
- lbpputs("\033[7 I\033[?32h\033[?33h\033[11h");
- // Paper size handling
- if (orientation < 0)
- orientation = 0; // Default orientation is portrait
- papersize = 14; // Default paper size is A4
- if (font::papersize) {
- papersize = set_papersize(font::papersize);
- paperlength = font::paperlength;
- paperwidth = font::paperwidth;
- }
- if (ps >= 0) {
- papersize = ps;
- paperlength = int(pl * font::res + 0.5);
- paperwidth = int(pw * font::res + 0.5);
- }
- if (papersize < 80) // standard paper
- lbpprintf("\033[%dp", (papersize | orientation));
- else // Custom paper
- lbpprintf("\033[%d;%d;%dp", (papersize | orientation),
- paperlength, paperwidth);
- // Number of copies
- lbpprintf("\033[%dv\n", ncopies);
- lbpputs("\033[0u\033[1u\033P1y Grolbp\033\\");
- lbpmoveabs(0, 0);
- lbpputs("\033[0t\033[2t");
- lbpputs("\033('$2\033)' 1"); // Primary symbol set IBML
- // Secondary symbol set IBMR1
- cur_symbol_set = 0;
-}
-
-lbp_printer::~lbp_printer()
-{
- lbpputs("\033P1y\033\\");
- lbpputs("\033c\033<");
-}
-
-inline void lbp_printer::set_line_thickness(int size,const environment *env)
-{
- if (size == 0)
- line_thickness = 1;
- else {
- if (size < 0)
- // line_thickness =
- // (env->size * (font::res/72)) * (linewidth_factor/1000)
- // we ought to check for overflow
- line_thickness =
- env->size * linewidth_factor * font::res / 72000;
- else // size > 0
- line_thickness = size;
- } // else from if (size == 0)
- if (line_thickness < 1)
- line_thickness = 1;
- if (vdminited())
- vdmlinewidth(line_thickness);
- req_linethickness = size; // an size requested
- /* fprintf(stderr, "thickness: %d == %d, size %d, %d \n",
- size, line_thickness, env->size,req_linethickness); */
- return;
-} // lbp_printer::set_line_thickness
-
-void lbp_printer::begin_page(int)
-{
-}
-
-void lbp_printer::end_page(int)
-{
- if (vdminited())
- vdmflush();
- lbpputc('\f');
- cur_hpos = -1;
-}
-
-void lbp_printer::end_of_line()
-{
- cur_hpos = -1; // force absolute motion
-}
-
-char *lbp_printer::font_name(const lbp_font *f, const int siz)
-{
- static char bfont_name[255]; // The resulting font name
- char type, // Italic, Roman, Bold
- ori, // Normal or Rotated
- *nam; // The font name without other data.
- int cpi; // The font size in characters per inch
- // (bitmapped fonts are monospaced).
- /* Bitmap font selection is ugly in this printer, so don't expect
- this function to be elegant. */
- bfont_name[0] = 0x00;
- if (orientation) // Landscape
- ori = 'R';
- else // Portrait
- ori = 'N';
- type = f->lbpname[strlen(f->lbpname) - 1];
- nam = new char[strlen(f->lbpname) - 2];
- strncpy(nam, &(f->lbpname[1]), strlen(f->lbpname) - 2);
- nam[strlen(f->lbpname) - 2] = 0x00;
- // fprintf(stderr, "Bitmap font '%s' %d %c %c \n", nam, siz, type, ori);
- /* Since these fonts are available only at certain sizes,
- 10 and 17 cpi for courier, 12 and 17 cpi for elite,
- we adjust the resulting size. */
- cpi = 17;
- // Fortunately there are only two bitmapped fonts shipped with the printer.
- if (!strcasecmp(nam, "courier")) {
- // Courier font
- if (siz >= 12)
- cpi = 10;
- else cpi = 17;
- }
- if (!strcasecmp(nam, "elite")) {
- if (siz >= 10)
- cpi = 12;
- else cpi = 17;
- }
- // Now that we have all the data, let's generate the font name.
- if ((type != 'B') && (type != 'I')) // Roman font
- sprintf(bfont_name, "%c%s%d", ori, nam, cpi);
- else
- sprintf(bfont_name, "%c%s%d%c", ori, nam, cpi, type);
- return bfont_name;
-}
-
-void lbp_printer::set_char(int idx, font *f, const environment *env,
- int w, const char *)
-{
- int code = f->get_code(idx);
- unsigned char ch = code & 0xff;
- unsigned short symbol_set = code >> 8;
- if (f != cur_font) {
- lbp_font *psf = (lbp_font *)f;
- // fprintf(stderr, "Loading font %s \"%d\" \n", psf->lbpname, env->size);
- if (psf->is_scalable) {
- // Scalable font selection is different from bitmaped
- lbpprintf("\033Pz%s.IBML\033\\\033[%d C", psf->lbpname,
- (int)((env->size * font::res) / 72));
- }
- else
- // bitmapped font
- lbpprintf("\033Pz%s.IBML\033\\\n", font_name(psf, env->size));
- lbpputs("\033)' 1"); // Select IBML and IBMR1 symbol set
- cur_font = psf;
- cur_symbol_set = 0;
- // Update the line thickness if needed
- if ((req_linethickness < 0 ) && (env->size != cur_size))
- set_line_thickness(req_linethickness,env);
- cur_size = env->size;
- }
- if (symbol_set != cur_symbol_set) {
- if (cur_symbol_set == 3)
- // if current symbol set is Symbol we must restore the font
- lbpprintf("\033Pz%s.IBML\033\\\033[%d C", cur_font->lbpname,
- (int)((env->size * font::res) / 72));
- switch (symbol_set) {
- case 0:
- lbpputs("\033('$2\033)' 1"); // Select IBML and IBMR1 symbol sets
- break;
- case 1:
- lbpputs("\033(d\033)' 1"); // Select wp54 symbol set
- break;
- case 2:
- lbpputs("\033('$2\033)'!0"); // Select IBMP symbol set
- break;
- case 3:
- lbpprintf("\033PzSymbol.SYML\033\\\033[%d C",
- (int)((env->size * font::res) / 72));
- lbpputs("\033(\"!!0\033)\"!!1"); // Select symbol font
- break;
- case 4:
- lbpputs("\033)\"! 1\033(\"!$2"); // Select PS symbol set
- break;
- }
- cur_symbol_set = symbol_set;
- }
- if (env->size != cur_size) {
- if (!cur_font->is_scalable)
- lbpprintf("\033Pz%s.IBML\033\\\n", font_name(cur_font, env->size));
- else
- lbpprintf("\033[%d C", (int)((env->size * font::res) / 72));
- cur_size = env->size;
- // Update the line thickness if needed
- if (req_linethickness < 0 )
- set_line_thickness(req_linethickness,env);
- }
- if ((env->hpos != cur_hpos) || (env->vpos != cur_vpos)) {
- // lbpmoveabs(env->hpos - ((5 * 300) / 16), env->vpos);
- lbpmoveabs(env->hpos - 64, env->vpos - 64);
- cur_vpos = env->vpos;
- cur_hpos = env->hpos;
- }
- if ((ch & 0x7F) < 32)
- lbpputs("\033[1.v");
- lbpputc(ch);
- cur_hpos += w;
-}
-
-void lbp_printer::vdmstart()
-{
- FILE *f;
- static int changed_origin = 0;
- errno = 0;
- f = tmpfile();
- // f = fopen("/tmp/gtmp","w+");
- if (f == NULL)
- perror("Opening temporary file");
- vdminit(f);
- if (!changed_origin) { // we should change the origin only one time
- changed_origin = 1;
- vdmorigin(-63, 0);
- }
- vdmlinewidth(line_thickness);
-}
-
-void
-lbp_printer::vdmflush()
-{
- char buffer[1024];
- int bytes_read = 1;
- vdmend();
- fflush(lbpoutput);
- /* let's copy the vdm code to the output */
- rewind(vdmoutput);
- do {
- bytes_read = fread(buffer, 1, sizeof(buffer), vdmoutput);
- bytes_read = fwrite(buffer, 1, bytes_read, lbpoutput);
- } while (bytes_read == sizeof(buffer));
- fclose(vdmoutput); // This will also delete the file,
- // since it is created by tmpfile()
- vdmoutput = NULL;
-}
-
-inline void lbp_printer::setfillmode(int mode)
-{
- if (mode != fill_mode) {
- if (mode != 1)
- vdmsetfillmode(mode, 1, 0);
- else
- vdmsetfillmode(mode, 1, 1); // To get black we must use white
- // inverted
- fill_mode = mode;
- }
-}
-
-inline void lbp_printer::polygon(int hpos, int vpos, int np, int *p)
-{
- int *points, i;
- points = new int[np + 2];
- points[0] = hpos;
- points[1] = vpos;
- // fprintf(stderr, "Poligon (%d,%d) ", points[0], points[1]);
- for (i = 0; i < np; i++)
- points[i + 2] = p[i];
- // for (i = 0; i < np; i++) fprintf(stderr, " %d ", p[i]);
- // fprintf(stderr, "\n");
- vdmpolygon((np /2) + 1, points);
-}
-
-void lbp_printer::draw(int code, int *p, int np, const environment *env)
-{
- if ((req_linethickness < 0 ) && (env->size != cur_size))
- set_line_thickness(req_linethickness,env);
-
- switch (code) {
- case 't':
- if (np == 0)
- line_thickness = 1;
- else { // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- set_line_thickness(p[0],env);
- }
- break;
- case 'l': // Line
- if (np != 2) {
- error("2 arguments required for line");
- break;
- }
- if (!vdminited())
- vdmstart();
- vdmline(env->hpos, env->vpos, p[0], p[1]);
-/* fprintf(stderr, "\nline: %d,%d - %d,%d thickness %d == %d\n",
- env->hpos - 64,env->vpos -64, env->hpos - 64 + p[0],
- env->vpos -64 + p[1], env->size, line_thickness);*/
- break;
- case 'R': // Rule
- if (np != 2) {
- error("2 arguments required for Rule");
- break;
- }
- if (vdminited()) {
- setfillmode(fill_pattern); // Solid Rule
- vdmrectangle(env->hpos, env->vpos, p[0], p[1]);
- }
- else {
- lbpruleabs(env->hpos - 64, env->vpos -64, p[0], p[1]);
- cur_vpos = p[1];
- cur_hpos = p[0];
- }
- // fprintf(stderr, "\nrule: thickness %d == %d\n",
- // env->size, line_thickness);
- break;
- case 'P': // Filled Polygon
- if (!vdminited())
- vdmstart();
- setfillmode(fill_pattern);
- polygon(env->hpos, env->vpos, np, p);
- break;
- case 'p': // Empty Polygon
- if (!vdminited())
- vdmstart();
- setfillmode(0);
- polygon(env->hpos, env->vpos, np, p);
- break;
- case 'C': // Filled Circle
- if (!vdminited())
- vdmstart();
- // fprintf(stderr, "Circle (%d,%d) Fill %d\n",
- // env->hpos, env->vpos, fill_pattern);
- setfillmode(fill_pattern);
- vdmcircle(env->hpos + (p[0]/2), env->vpos, p[0]/2);
- break;
- case 'c': // Empty Circle
- if (!vdminited())
- vdmstart();
- setfillmode(0);
- vdmcircle(env->hpos + (p[0]/2), env->vpos, p[0]/2);
- break;
- case 'E': // Filled Ellipse
- if (!vdminited())
- vdmstart();
- setfillmode(fill_pattern);
- vdmellipse(env->hpos + (p[0]/2), env->vpos, p[0]/2, p[1]/2, 0);
- break;
- case 'e': // Empty Ellipse
- if (!vdminited())
- vdmstart();
- setfillmode(0);
- vdmellipse(env->hpos + (p[0]/2), env->vpos, p[0]/2, p[1]/2, 0);
- break;
- case 'a': // Arc
- if (!vdminited())
- vdmstart();
- setfillmode(0);
- // VDM draws arcs clockwise and pic counterclockwise
- // We must compensate for that, exchanging the starting and
- // ending points
- vdmvarc(env->hpos + p[0], env->vpos+p[1],
- int(sqrt(double((p[0]*p[0]) + (p[1]*p[1])))),
- p[2], p[3],
- (-p[0]), (-p[1]), 1, 2);
- break;
- case '~': // Spline
- if (!vdminited())
- vdmstart();
- setfillmode(0);
- vdmspline(np/2, env->hpos, env->vpos, p);
- break;
- case 'f':
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- // fprintf(stderr, "Fill %d\n", p[0]);
- if ((p[0] == 1) || (p[0] >= 1000)) { // Black
- fill_pattern = 1;
- break;
- }
- if (p[0] == 0) { // White
- fill_pattern = 0;
- break;
- }
- if ((p[0] > 1) && (p[0] < 1000))
- {
- if (p[0] >= 990) fill_pattern = -23;
- else if (p[0] >= 700) fill_pattern = -28;
- else if (p[0] >= 500) fill_pattern = -27;
- else if (p[0] >= 400) fill_pattern = -26;
- else if (p[0] >= 300) fill_pattern = -25;
- else if (p[0] >= 200) fill_pattern = -22;
- else if (p[0] >= 100) fill_pattern = -24;
- else fill_pattern = -21;
- }
- break;
- case 'F':
- // not implemented yet
- break;
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
- return;
-}
-
-font *lbp_printer::make_font(const char *nm)
-{
- return lbp_font::load_lbp_font(nm);
-}
-
-printer *make_printer()
-{
- return new lbp_printer(user_papersize, user_paperwidth, user_paperlength);
-}
-
-static struct {
- const char *name;
- int code;
-} lbp_papersizes[] =
- {{ "A4", 14 },
- { "letter", 30 },
- { "legal", 32 },
- { "executive", 40 },
- };
-
-static int set_papersize(const char *paperformat)
-{
- unsigned int i;
- // First test for a standard (i.e. supported directly by the printer)
- // paper size
- for (i = 0 ; i < sizeof(lbp_papersizes) / sizeof(lbp_papersizes[0]); i++)
- {
- if (strcasecmp(lbp_papersizes[i].name,paperformat) == 0)
- return lbp_papersizes[i].code;
- }
- // Otherwise, we assume a custom paper size
- return 82;
-}
-
-static void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- // orientation command
- if (strcasecmp(command, "orientation") == 0) {
- // We give priority to command line options
- if (orientation > 0)
- return;
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`orientation' command requires an argument");
- else {
- if (strcasecmp(arg, "portrait") == 0)
- orientation = 0;
- else {
- if (strcasecmp(arg, "landscape") == 0)
- orientation = 1;
- else
- error_with_file_and_line(filename, lineno,
- "invalid argument to `orientation' command");
- }
- }
- }
-}
-
-static struct option long_options[] = {
- { "orientation", required_argument, NULL, 'o' },
- { "version", no_argument, NULL, 'v' },
- { "copies", required_argument, NULL, 'c' },
- { "landscape", no_argument, NULL, 'l' },
- { "papersize", required_argument, NULL, 'p' },
- { "linewidth", required_argument, NULL, 'w' },
- { "fontdir", required_argument, NULL, 'F' },
- { "help", no_argument, NULL, 'h' },
- { NULL, 0, 0, 0 }
-};
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [-lvh] [-c n] [-p paper_size] [-F dir] [-o or]\n"
- " [-w width] [files ...]\n"
- "\n"
- " -o --orientation=[portrait|landscape]\n"
- " -v --version\n"
- " -c --copies=numcopies\n"
- " -l --landscape\n"
- " -p --papersize=paper_size\n"
- " -w --linewidth=width\n"
- " -F --fontdir=dir\n"
- " -h --help\n",
- program_name);
-}
-
-int main(int argc, char **argv)
-{
- if (program_name == NULL)
- program_name = strsave(argv[0]);
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
- // command line parsing
- int c = 0;
- int option_index = 0;
- while (c >= 0) {
- c = getopt_long (argc, argv, "c:F:hI:lo:p:vw:",
- long_options, &option_index);
- switch (c) {
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'I':
- // ignore include path arguments
- break;
- case 'p':
- {
- const char *s;
- if (!font::scan_papersize(optarg, &s,
- &user_paperlength, &user_paperwidth))
- error("invalid paper size `%1' ignored", optarg);
- else
- user_papersize = set_papersize(s);
- break;
- }
- case 'l':
- orientation = 1;
- break;
- case 'v':
- printf("GNU grolbp (groff) version %s\n", Version_string);
- exit(0);
- break;
- case 'o':
- if (strcasecmp(optarg, "portrait") == 0)
- orientation = 0;
- else {
- if (strcasecmp(optarg, "landscape") == 0)
- orientation = 1;
- else
- error("unknown orientation '%1'", optarg);
- }
- break;
- case 'c':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if ((n <= 0) && (ptr == optarg))
- error("argument for -c must be a positive integer");
- else if (n <= 0 || n > 32767)
- error("out of range argument for -c");
- else
- ncopies = unsigned(n);
- break;
- }
- case 'w':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
- error("argument for -w must be a non-negative integer");
- else if (n < 0 || n > INT_MAX)
- error("out of range argument for -w");
- else
- linewidth_factor = int(n);
- break;
- }
- case 'h':
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- }
- }
- if (optind >= argc)
- do_file("-");
- while (optind < argc)
- do_file(argv[optind++]);
- lbpputs("\033c\033<");
- return 0;
-}
diff --git a/contrib/groff/src/devices/grolbp/lbp.h b/contrib/groff/src/devices/grolbp/lbp.h
deleted file mode 100644
index b3171cf03fdd..000000000000
--- a/contrib/groff/src/devices/grolbp/lbp.h
+++ /dev/null
@@ -1,546 +0,0 @@
-// -*- C -*-
-/* Copyright (C) 1994, 2000, 2001, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by Francisco Andrés Verdú <pandres@dragonet.es>
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* This file contains a set of utility functions to use canon CAPSL printers
- * (lbp-4 and lbp-8 series printers) */
-
-#ifndef LBP_H
-#define LBP_H
-
-#include <stdio.h>
-#include <stdarg.h>
-
-static FILE *lbpoutput = NULL;
-static FILE *vdmoutput = NULL;
-
-
-static inline void
-lbpinit(FILE *outfile)
-{
- lbpoutput = outfile;
-}
-
-
-static void
-lbpprintf(const char *format, ... )
-{ /* Taken from cjet */
- va_list stuff;
-
- va_start(stuff, format);
- vfprintf(lbpoutput, format, stuff);
- va_end(stuff);
-}
-
-
-static inline void
-lbpputs(const char *data)
-{
- fputs(data,lbpoutput);
-}
-
-
-static inline void
-lbpputc(unsigned char c)
-{
- fputc(c,lbpoutput);
-}
-
-
-static inline void
-lbpsavestatus(int idx )
-{
- fprintf(lbpoutput,"\033[%d%%y",idx);
-}
-
-
-static inline void
-lbprestorestatus(int idx )
-{
- fprintf(lbpoutput,"\033[%d%cz",idx ,'%');
-}
-
-
-static inline void
-lbpsavepos(int idx)
-{
- fprintf(lbpoutput,"\033[1;%d;0x",idx);
-}
-
-
-static inline void
-lbprestorepos(int idx)
-{
- fprintf(lbpoutput,"\033[0;%d;0x",idx);
-}
-
-
-static inline void
-lbprestoreposx(int idx)
-{
- fprintf(lbpoutput,"\033[0;%d;1x",idx);
-}
-
-
-static inline void
-lbpmoverel(int despl, char direction)
-{
- fprintf(lbpoutput,"\033[%d%c",despl,direction);
-}
-
-
-static inline void
-lbplinerel(int width,int despl,char direction )
-{
- fprintf(lbpoutput,"\033[%d;0;9{\033[%d%c\033[9}",width,despl,direction);
-}
-
-
-static inline void
-lbpmoveabs(int x, int y)
-{
- fprintf(lbpoutput,"\033[%d;%df",y,x);
-}
-
-
-static inline void
-lbplineto(int x,int y, int width )
-{
- fprintf(lbpoutput,"\033[%d;0;9{",width);
- lbpmoveabs(x,y);
- fprintf(lbpoutput,"\033[9}\n");
-}
-
-
-static inline void
-lbpruleabs(int x, int y, int hsize, int vsize)
-{
- lbpmoveabs(x,y);
- fprintf(lbpoutput,"\033[0;9;000s");
- lbpmoveabs(x+hsize,y+vsize);
- fprintf(lbpoutput,"\033[9r");
-}
-
-
-static void vdmprintf(const char *format, ... );
-
-
-static inline char *
-vdmnum(int num,char *result)
-{
- char b1,b2,b3;
- char *p = result;
- int nm;
-
- nm = abs(num);
- /* First byte 1024 - 32768 */
- b1 = ((nm >> 10) & 0x3F);
- if (b1) *p++ = b1 | 0x40;
-
- /* Second Byte 16 - 1024 */
- b2 = ((nm >> 4) & 0x3F);
- if ( b1 || b2) *p++= b2 | 0x40;
-
- /* Third byte 0 - 15 */
- b3 = ((nm & 0x0F) | 32);
- if (num >= 0) b3 |= 16;
- *p++ = b3;
- *p = 0x00; /* End of the resulting string */
- return result;
-}
-
-
-static inline void
-vdmorigin(int newx, int newy)
-{
- char nx[4],ny[4];
-
- vdmprintf("}\"%s%s\x1e",vdmnum(newx,nx),vdmnum(newy,ny));
-}
-
-
-static inline FILE *
-vdminit(FILE *vdmfile)
-{
- char scale[4],size[4],lineend[4];
-
-/* vdmoutput = tmpfile();*/
- vdmoutput = vdmfile;
- /* Initialize the VDM mode */
- vdmprintf("\033[0&}#GROLBP\x1e!0%s%s\x1e$\x1e}F%s\x1e",\
- vdmnum(-3,scale),vdmnum(1,size),vdmnum(1,lineend));
- return vdmoutput;
-
-}
-
-
-static inline void
-vdmend()
-{
- vdmprintf("}p\x1e");
-}
-
-
-static void
-vdmprintf(const char *format, ... )
-{ /* Taken from cjet */
- va_list stuff;
-
- if (vdmoutput == NULL) vdminit(tmpfile());
- va_start(stuff, format);
- vfprintf(vdmoutput, format, stuff);
- va_end(stuff);
-}
-
-
-static inline void
-vdmsetfillmode(int pattern,int perimeter, int inverted)
-{
- char patt[4],perim[4],
- rot[4], /* rotation */
- espejo[4], /* espejo */
- inv[4]; /* Inverted */
-
- vdmprintf("I%s%s%s%s%s\x1e",vdmnum(pattern,patt),\
- vdmnum(perimeter,perim),vdmnum(0,rot),
- vdmnum(0,espejo),vdmnum(inverted,inv));
-}
-
-
-static inline void
-vdmcircle(int centerx, int centery, int radius)
-{
- char x[4],y[4],rad[4];
-
- vdmprintf("5%s%s%s\x1e",vdmnum(centerx,x),vdmnum(centery,y),\
- vdmnum(radius,rad));
-}
-
-
-static inline void
-vdmaarc(int centerx, int centery, int radius,int startangle,int angle,int style,int arcopen)
-{
- char x[4],y[4],rad[4],stx[4],sty[4],styl[4],op[4];
-
- vdmprintf("}6%s%s%s%s%s%s%s\x1e",vdmnum(arcopen,op),\
- vdmnum(centerx,x),vdmnum(centery,y),\
- vdmnum(radius,rad),vdmnum(startangle,stx),vdmnum(angle,sty),\
- vdmnum(style,styl));
-}
-
-
-static inline void
-vdmvarc(int centerx, int centery,int radius, int startx, int starty, int endx, int endy,\
- int style,int arcopen)
-{
- char x[4],y[4],rad[4],stx[4],sty[4],enx[4],eny[4],styl[4],op[4];
-
- vdmprintf("}6%s%s%s%s%s%s%s%s%s\x1e",vdmnum(arcopen,op),\
- vdmnum(centerx,x),vdmnum(centery,y),\
- vdmnum(radius,rad),vdmnum(startx,stx),vdmnum(starty,sty),\
- vdmnum(endx,enx),vdmnum(endy,eny),vdmnum(style,styl));
-}
-
-
-static inline void
-vdmellipse(int centerx, int centery, int radiusx, int radiusy,int rotation)
-{
- char x[4],y[4],radx[4],rady[4],rotat[4];
-
- vdmprintf("}7%s%s%s%s%s\x1e\n",vdmnum(centerx,x),vdmnum(centery,y),\
- vdmnum(radiusx,radx),vdmnum(radiusy,rady),\
- vdmnum(rotation,rotat));
-}
-
-
-static inline void
-vdmsetlinetype(int lintype)
-{
- char ltyp[4], expfact[4];
-
- vdmprintf("E1%s%s\x1e",vdmnum(lintype,ltyp),vdmnum(1,expfact));
-
-}
-
-
-static inline void
-vdmsetlinestyle(int lintype, int pattern,int unionstyle)
-{
- char patt[4],ltip[4],
- rot[4], /* rotation */
- espejo[4], /* espejo */
- in[4]; /* Inverted */
-
- vdmprintf("}G%s%s%s%s%s\x1e",vdmnum(lintype,ltip),\
- vdmnum(pattern,patt),vdmnum(0,rot),
- vdmnum(0,espejo),vdmnum(0,in));
- vdmprintf("}F%s",vdmnum(unionstyle,rot));
-}
-
-
-static inline void
-vdmlinewidth(int width)
-{
- char wh[4];
-
- vdmprintf("F1%s\x1e",vdmnum(width,wh));
-}
-
-
-static inline void
-vdmrectangle(int origx, int origy,int dstx, int dsty)
-{
- char xcoord[4],ycoord[4],sdstx[4],sdsty[4];
-
- vdmprintf("}:%s%s%s%s\x1e\n",vdmnum(origx,xcoord),vdmnum(dstx,sdstx),\
- vdmnum(origy,ycoord),vdmnum(dsty,sdsty));
-}
-
-
-static inline void
-vdmpolyline(int numpoints, int *points)
-{
- int i,*p = points;
- char xcoord[4],ycoord[4];
-
- if (numpoints < 2) return;
- vdmprintf("1%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord));
- p += 2;
- for (i = 1; i < numpoints ; i++) {
- vdmprintf("%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord));
- p += 2;
- } /* for */
- vdmprintf("\x1e\n");
-}
-
-
-static inline void
-vdmpolygon(int numpoints, int *points)
-{
- int i,*p = points;
- char xcoord[4],ycoord[4];
-
- if (numpoints < 2) return;
- vdmprintf("2%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord));
- p += 2;
- for (i = 1; i < numpoints ; i++) {
- vdmprintf("%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord));
- p += 2;
- } /* for */
- vdmprintf("\x1e\n");
-
-}
-
-
-/************************************************************************
- * Highter level auxiliary functions *
- ************************************************************************/
-static inline int
-vdminited()
-{
- return (vdmoutput != NULL);
-}
-
-
-static inline void
-vdmline(int startx, int starty, int sizex, int sizey)
-{
- int points[4];
-
- points[0] = startx;
- points[1] = starty;
- points[2] = sizex;
- points[3] = sizey;
-
- vdmpolyline(2,points);
-
-}
-
-
-/*#define THRESHOLD .05 */ /* inch */
-#define THRESHOLD 1 /* points (1/300 inch) */
-static inline void
-splinerel(double px,double py,int flush)
-{
- static int lx = 0 ,ly = 0;
- static double pend = 0.0;
- static int dy = 0, despx = 0, despy = 0, sigpend = 0;
- int dxnew = 0, dynew = 0, sg;
- char xcoord[4],ycoord[4];
- double npend ;
-
- if (flush == -1) {lx = (int)px; ly = (int)py; return;}
-
- if (flush == 0) {
- dxnew = (int)px -lx;
- dynew = (int)py -ly;
- if ((dxnew == 0) && (dynew == 0)) return;
- sg = (dxnew < 0)? -1 : 0;
-/* fprintf(stderr,"s (%d,%d) (%d,%d)\n",dxnew,dynew,despx,despy);*/
- if (dynew == 0) {
- despx = dxnew;
- if ((sg == sigpend) && (dy == 0)){
- return;
- }
- dy = 0;
- }
- else {
- dy = 1;
- npend = (1.0*dxnew)/dynew;
- if (( npend == pend) && (sigpend == sg))
- { despy = dynew; despx = dxnew; return; }
- else
- { sigpend = sg;
- pend = npend;
- } /* else (( npend == pend) && ... */
- } /* else (if (dynew == 0)) */
- } /* if (!flush ) */
-
- /* if we've changed direction we must draw the line */
-/* fprintf(stderr," (%d) %.2f,%.2f\n",flush,(float)px,(float)py);*/
- if ((despx != 0) || (despy != 0)) vdmprintf("%s%s",vdmnum(despx,xcoord),\
- vdmnum(despy,ycoord));
- /*if ((despx != 0) || (despy != 0)) fprintf(stderr,"2
- *%d,%d\n",despx,despy);*/
- if (flush) {
- dxnew = dy = despx = despy = 0;
- return;
- } /* if (flush) */
- dxnew -= despx;
- dynew -= despy;
- if ((dxnew != 0) || (dynew != 0)) vdmprintf("%s%s",vdmnum(dxnew,xcoord),\
- vdmnum(dynew,ycoord));
-
-/* if ((dxnew != 0) || (dynew != 0)) fprintf(stderr,"3
- * %d,%d\n",dxnew,dynew);*/
- lx = (int)px; ly = (int)py;
- dxnew = dy = despx = despy = 0;
-
-}
-
-
-/**********************************************************************
- * The following code to draw splines is adapted from the transfig package
- */
-static void
-quadratic_spline(double a_1, double b_1, double a_2, double b_2, \
- double a_3, double b_3, double a_4, double b_4)
-{
- double x_1, y_1, x_4, y_4;
- double x_mid, y_mid;
-
- x_1 = a_1; y_1 = b_1;
- x_4 = a_4; y_4 = b_4;
- x_mid = (a_2 + a_3)/2.0;
- y_mid = (b_2 + b_3)/2.0;
- if ((fabs(x_1 - x_mid) < THRESHOLD)
- && (fabs(y_1 - y_mid) < THRESHOLD)) {
- splinerel(x_mid, y_mid, 0);
-/* fprintf(tfp, "PA%.4f,%.4f;\n", x_mid, y_mid);*/
- }
- else {
- quadratic_spline(x_1, y_1, ((x_1+a_2)/2.0), ((y_1+b_2)/2.0),
- ((3.0*a_2+a_3)/4.0), ((3.0*b_2+b_3)/4.0), x_mid, y_mid);
- }
-
- if ((fabs(x_mid - x_4) < THRESHOLD)
- && (fabs(y_mid - y_4) < THRESHOLD)) {
- splinerel(x_4, y_4, 0);
-/* fprintf(tfp, "PA%.4f,%.4f;\n", x_4, y_4);*/
- }
- else {
- quadratic_spline(x_mid, y_mid,
- ((a_2+3.0*a_3)/4.0), ((b_2+3.0*b_3)/4.0),
- ((a_3+x_4)/2.0), ((b_3+y_4)/2.0), x_4, y_4);
- }
-}
-
-
-#define XCOORD(i) numbers[(2*i)]
-#define YCOORD(i) numbers[(2*i)+1]
-static void
-vdmspline(int numpoints, int o_x, int o_y, int *numbers)
-{
- double cx_1, cy_1, cx_2, cy_2, cx_3, cy_3, cx_4, cy_4;
- double x_1, y_1, x_2, y_2;
- char xcoord[4],ycoord[4];
- int i;
-
- /*p = s->points;
- x_1 = p->x/ppi;*/
- x_1 = o_x;
- y_1 = o_y;
-/* p = p->next;
- x_2 = p->x/ppi;
- y_2 = p->y/ppi;*/
- x_2 = o_x + XCOORD(0);
- y_2 = o_y + YCOORD(0);
- cx_1 = (x_1 + x_2)/2.0;
- cy_1 = (y_1 + y_2)/2.0;
- cx_2 = (x_1 + 3.0*x_2)/4.0;
- cy_2 = (y_1 + 3.0*y_2)/4.0;
-
-/* fprintf(stderr,"Spline %d (%d,%d)\n",numpoints,(int)x_1,(int)y_1);*/
- vdmprintf("1%s%s",vdmnum((int)x_1,xcoord),vdmnum((int)y_1,ycoord));
- splinerel(x_1,y_1,-1);
- splinerel(cx_1,cy_1,0);
-/* fprintf(tfp, "PA%.4f,%.4f;PD%.4f,%.4f;\n",
- x_1, y_1, cx_1, cy_1);*/
-
- /*for (p = p->next; p != NULL; p = p->next) {*/
- for (i = 1; i < (numpoints); i++) {
- x_1 = x_2;
- y_1 = y_2;
-/* x_2 = p->x/ppi;
- y_2 = p->y/ppi;*/
- x_2 = x_1 + XCOORD(i);
- y_2 = y_1 + YCOORD(i);
- cx_3 = (3.0*x_1 + x_2)/4.0;
- cy_3 = (3.0*y_1 + y_2)/4.0;
- cx_4 = (x_1 + x_2)/2.0;
- cy_4 = (y_1 + y_2)/2.0;
- /* fprintf(stderr,"Point (%d,%d) - (%d,%d)\n",(int)x_1,(int)(y_1),(int)x_2,(int)y_2);*/
- quadratic_spline(cx_1, cy_1, cx_2, cy_2, cx_3, cy_3, cx_4, cy_4);
- cx_1 = cx_4;
- cy_1 = cy_4;
- cx_2 = (x_1 + 3.0*x_2)/4.0;
- cy_2 = (y_1 + 3.0*y_2)/4.0;
- }
- x_1 = x_2;
- y_1 = y_2;
-/* p = s->points->next;
- x_2 = p->x/ppi;
- y_2 = p->y/ppi;*/
- x_2 = o_x + XCOORD(0);
- y_2 = o_y + YCOORD(0);
- cx_3 = (3.0*x_1 + x_2)/4.0;
- cy_3 = (3.0*y_1 + y_2)/4.0;
- cx_4 = (x_1 + x_2)/2.0;
- cy_4 = (y_1 + y_2)/2.0;
- splinerel(x_1, y_1, 0);
- splinerel(x_1, y_1, 1);
- /*vdmprintf("%s%s",vdmnum((int)(x_1-lx),xcoord),\
- vdmnum((int)(y_1-ly),ycoord));*/
- vdmprintf("\x1e\n");
-/* fprintf(tfp, "PA%.4f,%.4f;PU;\n", x_1, y_1);*/
-
-
-}
-
-
-#endif
diff --git a/contrib/groff/src/devices/grolj4/Makefile.sub b/contrib/groff/src/devices/grolj4/Makefile.sub
deleted file mode 100644
index 1216a49aa8ad..000000000000
--- a/contrib/groff/src/devices/grolj4/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=grolj4$(EXEEXT)
-MAN1=grolj4.n
-MAN5=lj4_font.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lj4.$(OBJEXT)
-CCSRCS=$(srcdir)/lj4.cpp
diff --git a/contrib/groff/src/devices/grolj4/grolj4.man b/contrib/groff/src/devices/grolj4/grolj4.man
deleted file mode 100644
index 260a6198b31b..000000000000
--- a/contrib/groff/src/devices/grolj4/grolj4.man
+++ /dev/null
@@ -1,152 +0,0 @@
-.ig
-Copyright (C) 1994-2000, 2001, 2002, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.TH GROLJ4 @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grolj4 \- groff driver for HP Laserjet 4 family
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgrolj4 'u
-.ti \niu
-.B grolj4
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-lv
-.OP \-d \fR[\fPn\fR]\fP
-.OP \-c n
-.OP \-p paper_size
-.OP \-w n
-.OP \-F dir
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.SH DESCRIPTION
-.B grolj4
-is a driver for
-.B groff
-that produces output in PCL5 format suitable for an HP Laserjet 4 printer.
-.LP
-There is an additional drawing command available:
-.TP
-.BI \eD'R\ dh\ dv '
-Draw a rule (solid black rectangle), with one corner
-at the current position, and the diagonally opposite corner
-at the current position
-.RI +( dh , dv ).
-Afterwards the current position will be at the opposite corner. This
-generates a PCL fill rectangle command, and so will work on
-printers that do not support HPGL/2 unlike the other
-.B \eD
-commands.
-.SH OPTIONS
-.TP
-.BI \-c n
-Print
-.I n
-copies of each page.
-.TP
-.B \-l
-Print the document with a landscape orientation.
-.TP
-.BI "\-d [" n ]
-Use duplex mode
-.IR n :
-1\ is long-side binding; 2\ is short-side binding;
-default is\ 1.
-.TP
-.BI \-p size
-Set the paper size to
-.IR size ,
-which must be one of
-letter, legal, executive, a4, com10, monarch, c5, b5, dl.
-.TP
-.B \-v
-Print the version number.
-.TP
-.BI \-w n
-Set the default line thickness to
-.I n
-thousandths of an em.
-If this option isn't specified, the line thickness defaults to 0.04\~em.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR lj4 .
-.LP
-The following four commands are available additionally in the
-font description files:
-.TP
-.BI pclweight \ N
-The integer value
-.I N
-must be in the range -7 to +7; default is 0.
-.TP
-.BI pclstyle \ N
-The integer value
-.I N
-must be in the range 0 to 32767; default is 0.
-.TP
-.BI pclproportional \ N
-A boolean flag which can be either 0 or 1; default is 0.
-.TP
-.BI pcltypeface \ N
-The integer value
-.I N
-must be in the range 0 to 65535; default is 0.
-.SH FILES
-.TP
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.TP
-.B @MACRODIR@/lj4.tmac
-Macros for use with
-.BR grolj4 .
-.SH BUGS
-Small dots.
-.SH "SEE ALSO"
-.BR lj4_font (@MAN5EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grolj4/lj4.cpp b/contrib/groff/src/devices/grolj4/lj4.cpp
deleted file mode 100644
index 12849542b275..000000000000
--- a/contrib/groff/src/devices/grolj4/lj4.cpp
+++ /dev/null
@@ -1,708 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
-TODO
-
-option to use beziers for circle/ellipse/arc
-option to use lines for spline (for LJ3)
-left/top offset registration
-output bin selection option
-paper source option
-output non-integer parameters using fixed point numbers
-X command to insert contents of file
-X command to specify inline escape sequence (how to specify unprintable chars?)
-X command to include bitmap graphics
-*/
-
-#include "driver.h"
-#include "nonposix.h"
-
-extern "C" const char *Version_string;
-
-static struct {
- const char *name;
- int code;
- // at 300dpi
- int x_offset_portrait;
- int x_offset_landscape;
-} paper_table[] = {
- { "letter", 2, 75, 60 },
- { "legal", 3, 75, 60 },
- { "executive", 1, 75, 60 },
- { "a4", 26, 71, 59 },
- { "com10", 81, 75, 60 },
- { "monarch", 80, 75, 60 },
- { "c5", 91, 71, 59 },
- { "b5", 100, 71, 59 },
- { "dl", 90, 71, 59 },
-};
-
-static int user_paper_size = -1;
-static int landscape_flag = 0;
-static int duplex_flag = 0;
-
-// An upper limit on the paper size in centipoints,
-// used for setting HPGL picture frame.
-#define MAX_PAPER_WIDTH (12*720)
-#define MAX_PAPER_HEIGHT (17*720)
-
-// Dotted lines that are thinner than this don't work right.
-#define MIN_DOT_PEN_WIDTH .351
-
-#ifndef DEFAULT_LINE_WIDTH_FACTOR
-// in ems/1000
-#define DEFAULT_LINE_WIDTH_FACTOR 40
-#endif
-
-const int DEFAULT_HPGL_UNITS = 1016;
-int line_width_factor = DEFAULT_LINE_WIDTH_FACTOR;
-unsigned ncopies = 0; // 0 means don't send ncopies command
-
-static int lookup_paper_size(const char *);
-
-class lj4_font : public font {
-public:
- ~lj4_font();
- void handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno);
- static lj4_font *load_lj4_font(const char *);
- int weight;
- int style;
- int proportional;
- int typeface;
-private:
- lj4_font(const char *);
-};
-
-lj4_font::lj4_font(const char *nm)
-: font(nm), weight(0), style(0), proportional(0), typeface(0)
-{
-}
-
-lj4_font::~lj4_font()
-{
-}
-
-lj4_font *lj4_font::load_lj4_font(const char *s)
-{
- lj4_font *f = new lj4_font(s);
- if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
-}
-
-static struct {
- const char *s;
- int lj4_font::*ptr;
- int min;
- int max;
-} command_table[] = {
- { "pclweight", &lj4_font::weight, -7, 7 },
- { "pclstyle", &lj4_font::style, 0, 32767 },
- { "pclproportional", &lj4_font::proportional, 0, 1 },
- { "pcltypeface", &lj4_font::typeface, 0, 65535 },
-};
-
-void lj4_font::handle_unknown_font_command(const char *command,
- const char *arg,
- const char *filename, int lineno)
-{
- for (unsigned int i = 0;
- i < sizeof(command_table)/sizeof(command_table[0]); i++) {
- if (strcmp(command, command_table[i].s) == 0) {
- if (arg == 0)
- fatal_with_file_and_line(filename, lineno,
- "`%1' command requires an argument",
- command);
- char *ptr;
- long n = strtol(arg, &ptr, 10);
- if (n == 0 && ptr == arg)
- fatal_with_file_and_line(filename, lineno,
- "`%1' command requires numeric argument",
- command);
- if (n < command_table[i].min) {
- error_with_file_and_line(filename, lineno,
- "argument for `%1' command must not be less than %2",
- command, command_table[i].min);
- n = command_table[i].min;
- }
- else if (n > command_table[i].max) {
- error_with_file_and_line(filename, lineno,
- "argument for `%1' command must not be greater than %2",
- command, command_table[i].max);
- n = command_table[i].max;
- }
- this->*command_table[i].ptr = int(n);
- break;
- }
- }
-}
-
-class lj4_printer : public printer {
-public:
- lj4_printer(int);
- ~lj4_printer();
- void set_char(int, font *, const environment *, int, const char *name);
- void draw(int code, int *p, int np, const environment *env);
- void begin_page(int);
- void end_page(int page_length);
- font *make_font(const char *);
- void end_of_line();
-private:
- void set_line_thickness(int size, int dot = 0);
- void hpgl_init();
- void hpgl_start();
- void hpgl_end();
- int moveto(int hpos, int vpos);
- int moveto1(int hpos, int vpos);
-
- int cur_hpos;
- int cur_vpos;
- lj4_font *cur_font;
- int cur_size;
- unsigned short cur_symbol_set;
- int x_offset;
- int line_thickness;
- double pen_width;
- double hpgl_scale;
- int hpgl_inited;
- int paper_size;
-};
-
-inline
-int lj4_printer::moveto(int hpos, int vpos)
-{
- if (cur_hpos != hpos || cur_vpos != vpos || cur_hpos < 0)
- return moveto1(hpos, vpos);
- else
- return 1;
-}
-
-inline
-void lj4_printer::hpgl_start()
-{
- fputs("\033%1B", stdout);
-}
-
-inline
-void lj4_printer::hpgl_end()
-{
- fputs(";\033%0A", stdout);
-}
-
-lj4_printer::lj4_printer(int ps)
-: cur_hpos(-1),
- cur_font(0),
- cur_size(0),
- cur_symbol_set(0),
- line_thickness(-1),
- pen_width(-1.0),
- hpgl_inited(0)
-{
- if (7200 % font::res != 0)
- fatal("invalid resolution %1: resolution must be a factor of 7200",
- font::res);
- fputs("\033E", stdout); // reset
- if (font::res != 300)
- printf("\033&u%dD", font::res); // unit of measure
- if (ncopies > 0)
- printf("\033&l%uX", ncopies);
- paper_size = 0; // default to letter
- if (font::papersize) {
- int n = lookup_paper_size(font::papersize);
- if (n < 0)
- error("unknown paper size `%1'", font::papersize);
- else
- paper_size = n;
- }
- if (ps >= 0)
- paper_size = ps;
- printf("\033&l%dA" // paper size
- "\033&l%dO" // orientation
- "\033&l0E", // no top margin
- paper_table[paper_size].code,
- landscape_flag != 0);
- if (landscape_flag)
- x_offset = paper_table[paper_size].x_offset_landscape;
- else
- x_offset = paper_table[paper_size].x_offset_portrait;
- x_offset = (x_offset * font::res) / 300;
- if (duplex_flag)
- printf("\033&l%dS", duplex_flag);
-}
-
-lj4_printer::~lj4_printer()
-{
- fputs("\033E", stdout);
-}
-
-void lj4_printer::begin_page(int)
-{
-}
-
-void lj4_printer::end_page(int)
-{
- putchar('\f');
- cur_hpos = -1;
-}
-
-void lj4_printer::end_of_line()
-{
- cur_hpos = -1; // force absolute motion
-}
-
-inline
-int is_unprintable(unsigned char c)
-{
- return c < 32 && (c == 0 || (7 <= c && c <= 15) || c == 27);
-}
-
-void lj4_printer::set_char(int idx, font *f, const environment *env,
- int w, const char *)
-{
- int code = f->get_code(idx);
-
- unsigned char ch = code & 0xff;
- unsigned short symbol_set = code >> 8;
- if (symbol_set != cur_symbol_set) {
- printf("\033(%d%c", symbol_set/32, (symbol_set & 31) + 64);
- cur_symbol_set = symbol_set;
- }
- if (f != cur_font) {
- lj4_font *psf = (lj4_font *)f;
- // FIXME only output those that are needed
- printf("\033(s%dp%ds%db%dT",
- psf->proportional,
- psf->style,
- psf->weight,
- psf->typeface);
- if (!psf->proportional || !cur_font || !cur_font->proportional)
- cur_size = 0;
- cur_font = psf;
- }
- if (env->size != cur_size) {
- if (cur_font->proportional) {
- static const char *quarters[] = { "", ".25", ".5", ".75" };
- printf("\033(s%d%sV", env->size/4, quarters[env->size & 3]);
- }
- else {
- double pitch = double(font::res)/w;
- // PCL uses the next largest pitch, so round it down.
- pitch = floor(pitch*100.0)/100.0;
- printf("\033(s%.2fH", pitch);
- }
- cur_size = env->size;
- }
- if (!moveto(env->hpos, env->vpos))
- return;
- if (is_unprintable(ch))
- fputs("\033&p1X", stdout);
- putchar(ch);
- cur_hpos += w;
-}
-
-int lj4_printer::moveto1(int hpos, int vpos)
-{
- if (hpos < x_offset || vpos < 0)
- return 0;
- fputs("\033*p", stdout);
- if (cur_hpos < 0)
- printf("%dx%dY", hpos - x_offset, vpos);
- else {
- if (cur_hpos != hpos)
- printf("%s%d%c", hpos > cur_hpos ? "+" : "",
- hpos - cur_hpos, vpos == cur_vpos ? 'X' : 'x');
- if (cur_vpos != vpos)
- printf("%s%dY", vpos > cur_vpos ? "+" : "", vpos - cur_vpos);
- }
- cur_hpos = hpos;
- cur_vpos = vpos;
- return 1;
-}
-
-void lj4_printer::draw(int code, int *p, int np, const environment *env)
-{
- switch (code) {
- case 'R':
- {
- if (np != 2) {
- error("2 arguments required for rule");
- break;
- }
- int hpos = env->hpos;
- int vpos = env->vpos;
- int hsize = p[0];
- int vsize = p[1];
- if (hsize < 0) {
- hpos += hsize;
- hsize = -hsize;
- }
- if (vsize < 0) {
- vpos += vsize;
- vsize = -vsize;
- }
- if (!moveto(hpos, vpos))
- return;
- printf("\033*c%da%db0P", hsize, vsize);
- break;
- }
- case 'l':
- if (np != 2) {
- error("2 arguments required for line");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos, env->vpos))
- return;
- hpgl_start();
- set_line_thickness(env->size, p[0] == 0 && p[1] == 0);
- printf("PD%d,%d", p[0], p[1]);
- hpgl_end();
- break;
- case 'p':
- case 'P':
- {
- if (np & 1) {
- error("even number of arguments required for polygon");
- break;
- }
- if (np == 0) {
- error("no arguments for polygon");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos, env->vpos))
- return;
- hpgl_start();
- if (code == 'p')
- set_line_thickness(env->size);
- printf("PMPD%d", p[0]);
- for (int i = 1; i < np; i++)
- printf(",%d", p[i]);
- printf("PM2%cP", code == 'p' ? 'E' : 'F');
- hpgl_end();
- break;
- }
- case '~':
- {
- if (np & 1) {
- error("even number of arguments required for spline");
- break;
- }
- if (np == 0) {
- error("no arguments for spline");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos, env->vpos))
- return;
- hpgl_start();
- set_line_thickness(env->size);
- printf("PD%d,%d", p[0]/2, p[1]/2);
- const int tnum = 2;
- const int tden = 3;
- if (np > 2) {
- fputs("BR", stdout);
- for (int i = 0; i < np - 2; i += 2) {
- if (i != 0)
- putchar(',');
- printf("%d,%d,%d,%d,%d,%d",
- (p[i]*tnum)/(2*tden),
- (p[i + 1]*tnum)/(2*tden),
- p[i]/2 + (p[i + 2]*(tden - tnum))/(2*tden),
- p[i + 1]/2 + (p[i + 3]*(tden - tnum))/(2*tden),
- (p[i] - p[i]/2) + p[i + 2]/2,
- (p[i + 1] - p[i + 1]/2) + p[i + 3]/2);
- }
- }
- printf("PR%d,%d", p[np - 2] - p[np - 2]/2, p[np - 1] - p[np - 1]/2);
- hpgl_end();
- break;
- }
- case 'c':
- case 'C':
- // troff adds an extra argument to C
- if (np != 1 && !(code == 'C' && np == 2)) {
- error("1 argument required for circle");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos + p[0]/2, env->vpos))
- return;
- hpgl_start();
- if (code == 'c') {
- set_line_thickness(env->size);
- printf("CI%d", p[0]/2);
- }
- else
- printf("WG%d,0,360", p[0]/2);
- hpgl_end();
- break;
- case 'e':
- case 'E':
- if (np != 2) {
- error("2 arguments required for ellipse");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos + p[0]/2, env->vpos))
- return;
- hpgl_start();
- printf("SC0,%.4f,0,-%.4f,2", hpgl_scale * double(p[0])/p[1], hpgl_scale);
- if (code == 'e') {
- set_line_thickness(env->size);
- printf("CI%d", p[1]/2);
- }
- else
- printf("WG%d,0,360", p[1]/2);
- printf("SC0,%.4f,0,-%.4f,2", hpgl_scale, hpgl_scale);
- hpgl_end();
- break;
- case 'a':
- {
- if (np != 4) {
- error("4 arguments required for arc");
- break;
- }
- hpgl_init();
- if (!moveto(env->hpos, env->vpos))
- return;
- hpgl_start();
- set_line_thickness(env->size);
- double c[2];
- if (adjust_arc_center(p, c)) {
- double sweep = ((atan2(p[1] + p[3] - c[1], p[0] + p[2] - c[0])
- - atan2(-c[1], -c[0]))
- * 180.0/PI);
- if (sweep > 0.0)
- sweep -= 360.0;
- printf("PDAR%d,%d,%f", int(c[0]), int(c[1]), sweep);
- }
- else
- printf("PD%d,%d", p[0] + p[2], p[1] + p[3]);
- hpgl_end();
- }
- break;
- case 'f':
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- hpgl_init();
- hpgl_start();
- if (p[0] >= 0 && p[0] <= 1000)
- printf("FT10,%d", p[0]/10);
- hpgl_end();
- break;
- case 'F':
- // not implemented yet
- break;
- case 't':
- {
- if (np == 0) {
- line_thickness = -1;
- }
- else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- line_thickness = p[0];
- }
- break;
- }
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
-}
-
-void lj4_printer::hpgl_init()
-{
- if (hpgl_inited)
- return;
- hpgl_inited = 1;
- hpgl_scale = double(DEFAULT_HPGL_UNITS)/font::res;
- printf("\033&f0S" // push position
- "\033*p0x0Y" // move to 0,0
- "\033*c%dx%dy0T" // establish picture frame
- "\033%%1B" // switch to HPGL
- "SP1SC0,%.4f,0,-%.4f,2IR0,100,0,100" // set up scaling
- "LA1,4,2,4" // round line ends and joins
- "PR" // relative plotting
- "TR0" // opaque
- ";\033%%1A" // back to PCL
- "\033&f1S", // pop position
- MAX_PAPER_WIDTH, MAX_PAPER_HEIGHT,
- hpgl_scale, hpgl_scale);
-}
-
-void lj4_printer::set_line_thickness(int size, int dot)
-{
- double pw;
- if (line_thickness < 0)
- pw = (size * (line_width_factor * 25.4))/(font::sizescale * 72000.0);
- else
- pw = line_thickness*25.4/font::res;
- if (dot && pw < MIN_DOT_PEN_WIDTH)
- pw = MIN_DOT_PEN_WIDTH;
- if (pw != pen_width) {
- printf("PW%f", pw);
- pen_width = pw;
- }
-}
-
-font *lj4_printer::make_font(const char *nm)
-{
- return lj4_font::load_lj4_font(nm);
-}
-
-printer *make_printer()
-{
- return new lj4_printer(user_paper_size);
-}
-
-static
-int lookup_paper_size(const char *s)
-{
- for (unsigned int i = 0;
- i < sizeof(paper_table)/sizeof(paper_table[0]); i++) {
- // FIXME Perhaps allow unique prefix.
- if (strcasecmp(s, paper_table[i].name) == 0)
- return i;
- }
- return -1;
-}
-
-static void usage(FILE *stream);
-
-extern "C" int optopt, optind;
-
-int main(int argc, char **argv)
-{
- setlocale(LC_NUMERIC, "C");
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "c:d:F:I:lp:vw:", long_options, NULL))
- != EOF)
- switch(c) {
- case 'l':
- landscape_flag = 1;
- break;
- case 'I':
- // ignore include search path
- break;
- case ':':
- if (optopt == 'd') {
- fprintf(stderr, "duplex assumed to be long-side\n");
- duplex_flag = 1;
- } else
- fprintf(stderr, "option -%c requires an argument\n", optopt);
- fflush(stderr);
- break;
- case 'd':
- if (!isdigit(*optarg)) // this ugly hack prevents -d without
- optind--; // args from messing up the arg list
- duplex_flag = atoi(optarg);
- if (duplex_flag != 1 && duplex_flag != 2) {
- fprintf(stderr, "odd value for duplex; assumed to be long-side\n");
- duplex_flag = 1;
- }
- break;
- case 'p':
- {
- int n = lookup_paper_size(optarg);
- if (n < 0)
- error("unknown paper size `%1'", optarg);
- else
- user_paper_size = n;
- break;
- }
- case 'v':
- printf("GNU grolj4 (groff) version %s\n", Version_string);
- exit(0);
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'c':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
- error("argument for -c must be a positive integer");
- else if (n <= 0 || n > 32767)
- error("out of range argument for -c");
- else
- ncopies = unsigned(n);
- break;
- }
- case 'w':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
- error("argument for -w must be a non-negative integer");
- else if (n < 0 || n > INT_MAX)
- error("out of range argument for -w");
- else
- line_width_factor = int(n);
- break;
- }
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- SET_BINARY(fileno(stdout));
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [-lv] [-d [n]] [-c n] [-p paper_size]\n"
- " [-w n] [-F dir] [files ...]\n",
- program_name);
-}
diff --git a/contrib/groff/src/devices/grolj4/lj4_font.man b/contrib/groff/src/devices/grolj4/lj4_font.man
deleted file mode 100644
index e82edff7c78f..000000000000
--- a/contrib/groff/src/devices/grolj4/lj4_font.man
+++ /dev/null
@@ -1,167 +0,0 @@
-.tr ~
-.ig
-Copyright (C) 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.tr ~
-.TH LJ4_FONT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.\" --------------------------------------------------------------------------
-.SH NAME
-.\" --------------------------------------------------------------------------
-lj4_font \- groff fonts for use with devlj4
-.\" --------------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------------
-Nominally, all Hewlett-Packard LaserJet~4\(enseries and newer printers
-have the same internal fonts: 45 scalable fonts and one bitmapped
-Lineprinter font.
-The scalable fonts are available in sizes between 0.25 point and 999.75
-points, in 0.25-point increments; the Lineprinter font is available only
-in 8.5-point size.
-.LP
-The LaserJet font files included with
-.B groff
-assume that all printers since the LaserJet~4 are identical.
-There are some differences between fonts in the earlier and more recent
-printers, however.
-The LaserJet~4 printer used Agfa Intellifont technology for 35 of the
-internal scalable fonts; the remaining 10 scalable fonts were TrueType.
-Beginning with the LaserJet~4000\(enseries printers introduced in 1997,
-all scalable internal fonts have been TrueType.
-The number of printable glyphs differs slightly between Intellifont and
-TrueType fonts (generally, the TrueType fonts include more glyphs), and
-there are some minor differences in glyph metrics.
-Differences among printer models are described in the
-.I "PCL~5 Comparison Guide"
-and the
-.I "PCL~5 Comparison Guide Addendum"
-(for printers introduced since approximately 2001).
-.LP
-LaserJet printers reference a glyph by a combination of a 256-glyph
-symbol set and an index within that symbol set.
-Many glyphs appear in more than one symbol set; all combinations of
-symbol set and index that reference the same glyph are equivalent.
-For each glyph,
-.BR hpftodit (@MAN1EXT@)
-searches a list of symbol sets, and selects the first set that contains
-the glyph.
-The printing code generated by
-.BR hpftodit (@MAN1EXT@)
-is an integer that encodes a numerical value for the symbol set in the
-high byte(s), and the index in the low byte.
-See
-.BR groff_font (@MAN5EXT@)
-for a complete description of the font file format; symbol sets are
-described in greater detail in the
-.IR "PCL~5 Printer Language Technical Reference Manual" .
-.LP
-Two of the scalable fonts, Symbol and Wingdings, are bound to
-256-glyph symbol sets; the remaining scalable fonts, as well as the
-Lineprinter font, support numerous symbol sets, sufficient to enable
-printing of more than 600 glyphs.
-.LP
-The metrics generated by
-.BR hpftodit (@MAN1EXT@)
-assume that the DESC file contains values of 1200 for res and 6350 for
-unitwidth (or any combination (e.g., 2400 and 3175) for which
-res~\(mu~unitwidth~=~7\|620\|000).
-Although HP PCL~5 LaserJet printers support an internal resolution of
-7200 units per inch, they use a 16-bit signed integer for cursor
-positioning; if
-.B devlj4
-is to support U.S. ledger paper (11\(sd~\(mu~17\(sd), the maximum usable
-resolution is 32\|767~/~17, or 1927, units per inch, which rounds down to
-1200 units per inch.
-If the largest required paper size is less (e.g., 8.5\(sd~\(mu~11\(sd or
-A5), a greater resolution (and lesser unitwidth) can be specified.
-.\" --------------------------------------------------------------------------
-.SH LIMITATIONS
-.\" --------------------------------------------------------------------------
-Font metrics for Intellifont fonts were provided by Tagged Font Metric
-(TFM) files originally developed by Agfa/Compugraphic.
-The TFM files provided for these fonts supported 600+ glyphs and
-contained extensive lists of kern pairs.
-.LP
-To accommodate developers who had become accustomed to TFM files, HP also
-provided TFM files for the 10 TrueType fonts included in the LaserJet~4.
-The TFM files for TrueType fonts generally included less information
-than the Intellifont TFMs, supporting fewer glyphs, and in most cases,
-providing no kerning information.
-By the time the LaserJet~4000 printer was introduced, most
-developers had migrated to other means of obtaining font metrics,
-and support for new TFM files was very limited.
-The TFM files provided for the TrueType fonts in the LaserJet~4000
-support only the Latin 2 (ISO 8859-2) symbol set, and include no kerning
-information; consequently, they are of little value for any but the most
-rudimentary documents.
-.LP
-Because the Intellifont TFM files contain considerably more information,
-they generally are preferable to the TrueType TFM files even for use
-with the TrueType fonts in the newer printers.
-The metrics for the TrueType fonts are very close, though not identical,
-to those for the earlier Intellifont fonts of the same names.
-Although most output using the Intellifont metrics with the newer
-printers is quite acceptable, a few glyphs may fail to print as
-expected.
-The differences in glyph metrics may be particularly noticeable with
-composite parentheses, brackets, and braces used by
-.BR eqn (@MAN1EXT@) .
-A script, located in
-.BR @FONTDIR@/devlj4/generate ,
-can be used to adjust the metrics for these glyphs in the special font S
-for use with printers that have all TrueType fonts.
-.LP
-At the time HP last supported TFM files, only Version 1 of the Unicode
-standard was available.
-Consequently, many glyphs lacking assigned code points were assigned by
-HP to the Private Use Area (PUA).
-Later versions of the Unicode standard included code points outside the
-PUA for many of these glyphs.
-The HP-supplied TrueType TFM files use the PUA assignments;
-TFM files generated from more recent TrueType font files require the
-later Unicode values to access the same glyphs.
-Consequently, two different mapping files may be required: one for the
-HP-supplied TFM files, and one for more recent TFM files.
-.\" --------------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------------
-.Tp \w'\fB@FONTDIR@/devlj4/DESC'u+2n
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.\" --------------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------------
-.ad 0
-.BR groff (@MAN1EXT@),
-.BR groff_diff (@MAN1EXT@),
-.BR hpftodit (@MAN1EXT@),
-.BR grolj4 (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grops/Makefile.sub b/contrib/groff/src/devices/grops/Makefile.sub
deleted file mode 100644
index e1595cb50fe8..000000000000
--- a/contrib/groff/src/devices/grops/Makefile.sub
+++ /dev/null
@@ -1,12 +0,0 @@
-PROG=grops$(EXEEXT)
-MAN1=grops.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- ps.$(OBJEXT) \
- psrm.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/ps.cpp \
- $(srcdir)/psrm.cpp
-HDRS=\
- $(srcdir)/ps.h
diff --git a/contrib/groff/src/devices/grops/TODO b/contrib/groff/src/devices/grops/TODO
deleted file mode 100644
index eab8f83305c0..000000000000
--- a/contrib/groff/src/devices/grops/TODO
+++ /dev/null
@@ -1,24 +0,0 @@
-Read PFB files directly.
-
-Generate %%For comment.
-
-Generate %%Title comment.
-
-Angles in arc command: don't generate more digits after the decimal
-point than are necessary.
-
-Possibly generate BoundingBox comment.
-
-Per font composite character mechanism (sufficient for fractions).
-
-Consider whether we ought to do rounding of graphical objects other
-than lines. What's the point?
-
-Error messages should refer to output page number.
-
-Search for downloadable fonts using their PostScript names if not
-found in download file.
-
-Separate path for searching for downloadable font files.
-
-Clip to the BoundingBox when importing documents.
diff --git a/contrib/groff/src/devices/grops/grops.man b/contrib/groff/src/devices/grops/grops.man
deleted file mode 100644
index 0ff2579d73b2..000000000000
--- a/contrib/groff/src/devices/grops/grops.man
+++ /dev/null
@@ -1,1170 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grops_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.de TQ
-. br
-. ns
-. TP \$1
-..
-.
-.de FT
-. if '\\*(.T'ps' .ft \\$1
-..
-.
-.
-.TH GROPS @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-grops \- PostScript driver for groff
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgrops 'u
-.ti \niu
-.B grops
-.
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\%\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-glmv
-.OP \-b n
-.OP \-c n
-.OP \-F dir
-.OP \-I dir
-.OP \-p papersize
-.OP \-P prologue
-.OP \-w n
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-.B grops
-translates the output of GNU
-.B troff
-to PostScript.
-.
-Normally
-.B grops
-should be invoked by using the groff command
-with a
-.B \-Tps
-option.
-.
-.if '@DEVICE@'ps' (Actually, this is the default for groff.)
-.
-If no files are given,
-.B grops
-will read the standard input.
-.
-A filename of
-.B \-
-will also cause
-.B grops
-to read the standard input.
-.
-PostScript output is written to the standard output.
-.
-When
-.B grops
-is run by
-.B groff
-options can be passed to
-.B grops
-using the
-.B groff
-.B \-P
-option.
-.
-.PP
-Note that
-.B grops
-doesn't produce a valid document structure (conforming to the Document
-Structuring Convention) if called with multiple file arguments.
-.
-To print such concatenated output it is necessary to deactivate DSC
-handling in the printing program or previewer.
-.
-.
-.SH OPTIONS
-.TP
-.BI \-b n
-Provide workarounds for older printers, broken spoolers, and previewers.
-.
-Normally
-.B grops
-produces output at PostScript LanguageLevel\~2 that conforms to the
-Document Structuring Conventions version 3.0.
-.
-Some older printers, spoolers, and previewers can't handle such output.
-.
-The value of\~\c
-.I n
-controls what
-.B grops
-does to make its output acceptable to such programs.
-.
-A value of\~0 will cause grops not to employ any workarounds.
-.
-.IP
-Add\~1 if no
-.B %%Begin\%Document\%Setup
-and
-.B %%End\%Document\%Setup
-comments should be generated;
-this is needed for early versions of TranScript that get confused by
-anything between the
-.B %%End\%Prolog
-comment and the first
-.B %%Page
-comment.
-.
-.IP
-Add\~2 if lines in included files beginning with
-.B %!
-should be stripped out; this is needed for Sun's pageview previewer.
-.
-.IP
-Add\~4 if
-.BR %%Page ,
-.BR %%Trailer
-and
-.B %%End\%Prolog
-comments should be
-stripped out of included files; this is needed for spoolers that
-don't understand the
-.B %%Begin\%Document
-and
-.B %%End\%Document
-comments.
-.
-.IP
-Add\~8 if the first line of the PostScript output should be
-.B %!PS-Adobe-2.0
-rather than
-.BR %!PS-Adobe-3.0 ;
-this is needed when using Sun's Newsprint with a printer that requires
-page reversal.
-.
-.IP
-Add\~16 if no media size information should be included in the document
-(this is, neither use
-.B %%Document\%Media
-nor the
-.B setpagedevice
-PostScript command).
-.
-This was the behaviour of groff version 1.18.1 and earlier; it is needed
-for older printers which don't understand PostScript LanguageLevel\~2.
-.
-It is also necessary if the output is further processed to get an
-encapsulated PS (EPS) file -- see below.
-.
-.IP
-The default value can be specified by a
-.
-.RS
-.IP
-.BI broken\ n
-.
-.LP
-command in the DESC file.
-.
-Otherwise the default value is\~0.
-.RE
-.
-.TP
-.BI \-c n
-Print
-.I n
-copies of each page.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for prologue, font, and device description files;
-.I name
-is the name of the device, usually
-.BR ps .
-.
-.TP
-.BI \-g
-Guess the page length.
-.
-This generates PostScript code that guesses the page length.
-.
-The guess will be correct only if the imageable area is vertically
-centered on the page.
-.
-This option allows you to generate documents that can be printed
-both on letter (8.5\(mu11) paper and on A4 paper without change.
-.
-.TP
-.BI \-I dir
-This option may be used to specify a directory to search for
-files on the command line and files named in
-.B \eX'ps: import'
-and
-.B \eX'ps: file'
-escapes.
-The current directory is always searched first.
-This option may be specified more than once;
-the directories will be searched in the order specified.
-No directory search is performed for files specified using an absolute path.
-.
-.TP
-.B \-l
-Print the document in landscape format.
-.
-.TP
-.B \-m
-Turn manual feed on for the document.
-.
-.TP
-.BI \-p paper-size
-Set physical dimension of output medium.
-.
-This overrides the
-.BR papersize ,
-.BR paperlength ,
-and
-.B paperwidth
-commands in the
-.B DESC
-file; it accepts the same arguments as the
-.B papersize
-command.
-.
-See
-.B groff_font (@MAN5EXT@)
-for details.
-.
-.TP
-.BI \-P prologue-file
-Use the file
-.I prologue-file
-(in the font path) as the prologue instead of the default prologue file
-.BR prologue .
-.
-This option overrides the environment variable
-.SM GROPS_PROLOGUE.
-.
-.TP
-.BI \-w n
-Lines should be drawn using a thickness of
-.IR n \~\c
-thousandths of an em.
-If this option is not given, the line thickness defaults to 0.04\~em.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH USAGE
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\~4.
-.
-The fonts are grouped into families
-.BR A ,
-.BR BM ,
-.BR C ,
-.BR H ,
-.BR HN ,
-.BR N ,
-.BR P ,
-and\~\c
-.B T
-having members in each of these styles:
-.
-.RS
-.TP
-.B AR
-.FT AR
-AvantGarde-Book
-.FT
-.
-.TQ
-.B AI
-.FT AI
-AvantGarde-BookOblique
-.FT
-.
-.TQ
-.B AB
-.FT AB
-AvantGarde-Demi
-.FT
-.
-.TQ
-.B ABI
-.FT ABI
-AvantGarde-DemiOblique
-.FT
-.
-.TQ
-.B BMR
-.FT BMR
-Bookman-Light
-.FT
-.
-.TQ
-.B BMI
-.FT BMI
-Bookman-LightItalic
-.FT
-.
-.TQ
-.B BMB
-.FT BMB
-Bookman-Demi
-.FT
-.
-.TQ
-.B BMBI
-.FT BMBI
-Bookman-DemiItalic
-.FT
-.
-.TQ
-.B CR
-.FT CR
-Courier
-.FT
-.
-.TQ
-.B CI
-.FT CI
-Courier-Oblique
-.FT
-.
-.TQ
-.B CB
-.FT CB
-Courier-Bold
-.FT
-.
-.TQ
-.B CBI
-.FT CBI
-Courier-BoldOblique
-.FT
-.
-.TQ
-.B HR
-.FT HR
-Helvetica
-.FT
-.
-.TQ
-.B HI
-.FT HI
-Helvetica-Oblique
-.FT
-.
-.TQ
-.B HB
-.FT HB
-Helvetica-Bold
-.FT
-.
-.TQ
-.B HBI
-.FT HBI
-Helvetica-BoldOblique
-.FT
-.
-.TQ
-.B HNR
-.FT HNR
-Helvetica-Narrow
-.FT
-.
-.TQ
-.B HNI
-.FT HNI
-Helvetica-Narrow-Oblique
-.FT
-.
-.TQ
-.B HNB
-.FT HNB
-Helvetica-Narrow-Bold
-.FT
-.
-.TQ
-.B HNBI
-.FT HNBI
-Helvetica-Narrow-BoldOblique
-.FT
-.
-.TQ
-.B NR
-.FT NR
-NewCenturySchlbk-Roman
-.FT
-.
-.TQ
-.B NI
-.FT NI
-NewCenturySchlbk-Italic
-.FT
-.
-.TQ
-.B NB
-.FT NB
-NewCenturySchlbk-Bold
-.FT
-.
-.TQ
-.B NBI
-.FT NBI
-NewCenturySchlbk-BoldItalic
-.FT
-.
-.TQ
-.B PR
-.FT PR
-Palatino-Roman
-.FT
-.
-.TQ
-.B PI
-.FT PI
-Palatino-Italic
-.FT
-.
-.TQ
-.B PB
-.FT PB
-Palatino-Bold
-.FT
-.
-.TQ
-.B PBI
-.FT PBI
-Palatino-BoldItalic
-.FT
-.
-.TQ
-.B TR
-.FT TR
-Times-Roman
-.FT
-.
-.TQ
-.B TI
-.FT TI
-Times-Italic
-.FT
-.
-.TQ
-.B TB
-.FT TB
-Times-Bold
-.FT
-.
-.TQ
-.B TBI
-.FT TBI
-Times-BoldItalic
-.FT
-.RE
-.
-.LP
-There is also the following font which is not a member of a family:
-.
-.RS
-.TP
-.B ZCMI
-.FT ZCMI
-ZapfChancery-MediumItalic
-.FT
-.RE
-.
-.LP
-There are also some special fonts called
-.B S
-for the PS Symbol font, and
-.BR SS ,
-containing slanted lowercase Greek letters taken from PS Symbol.
-.
-Zapf Dingbats is available as
-.BR ZD
-and a reversed version of ZapfDingbats (with symbols pointing in the opposite
-direction) is available as
-.BR ZDR ;
-most characters in these fonts are unnamed and must be accessed using
-.BR \[rs]N .
-.
-.LP
-The default color for
-.B \[rs]m
-and
-.B \[rs]M
-is black; for colors defined in the `rgb' color space,
-.B setrgbcolor
-is used, for `cmy' and `cmyk'
-.BR setcmykcolor ,
-and for `gray'
-.BR setgray .
-Note that
-.B setcmykcolor
-is a PostScript LanguageLevel\~2 command and thus not available on some
-older printers.
-.
-.LP
-.B grops
-understands various X\~commands produced using the
-.B \[rs]X
-escape sequence;
-.B grops
-will only interpret commands that begin with a
-.B ps:
-tag.
-.
-.TP
-.BI \[rs]X'ps:\ exec\ code '
-This executes the arbitrary PostScript commands in
-.IR code .
-.
-The PostScript currentpoint will be set to the position of the
-.B \[rs]X
-command before executing
-.IR code .
-.
-The origin will be at the top left corner of the page,
-and y\~coordinates will increase down the page.
-.
-A procedure\~\c
-.B u
-will be defined that converts groff units
-to the coordinate system in effect.
-.
-For example,
-.
-.RS
-.IP
-.B
-\&.nr x 1i
-.br
-.B
-\[rs]X'ps: exec \[rs]nx u 0 rlineto stroke'
-.br
-.RE
-.
-.IP
-will draw a horizontal line one inch long.
-.
-.I code
-may make changes to the graphics state,
-but any changes will persist only to the
-end of the page.
-.
-A dictionary containing the definitions specified by the
-.B def
-and
-.B mdef
-will be on top of the dictionary stack.
-.
-If your code adds definitions to this dictionary,
-you should allocate space for them using
-.BI \[rs]X'ps\ mdef \ n '\fR.
-.
-Any definitions will persist only until the end of the page.
-.
-If you use the
-.B \[rs]Y
-escape sequence with an argument that names a macro,
-.I code
-can extend over multiple lines.
-.
-For example,
-.
-.RS
-.IP
-.nf
-.ft B
-\&.nr x 1i
-\&.de y
-\&ps: exec
-\&\[rs]nx u 0 rlineto
-\&stroke
-\&..
-\&\[rs]Yy
-.fi
-.ft R
-.
-.LP
-is another way to draw a horizontal line one inch long.
-.RE
-.
-.TP
-.BI \[rs]X'ps:\ file\ name '
-This is the same as the
-.B exec
-command except that the PostScript code is read from file
-.IR name .
-.
-.TP
-.BI \[rs]X'ps:\ def\ code '
-Place a PostScript definition contained in
-.I code
-in the prologue.
-.
-There should be at most one definition per
-.B \[rs]X
-command.
-.
-Long definitions can be split over several
-.B \[rs]X
-commands;
-all the
-.I code
-arguments are simply joined together separated by newlines.
-.
-The definitions are placed in a dictionary which is automatically
-pushed on the dictionary stack when an
-.B exec
-command is executed.
-.
-If you use the
-.B \[rs]Y
-escape sequence with an argument that names a macro,
-.I code
-can extend over multiple lines.
-.
-.TP
-.BI \[rs]X'ps:\ mdef\ n\ code '
-Like
-.BR def ,
-except that
-.I code
-may contain up to
-.IR n \~\c
-definitions.
-.
-.B grops
-needs to know how many definitions
-.I code
-contains
-so that it can create an appropriately sized PostScript dictionary
-to contain them.
-.
-.TP
-.BI \[rs]X'ps:\ import\ file\ llx\ lly\ urx\ ury\ width\ \fR[\fP\ height\ \fR]\fP '
-Import a PostScript graphic from
-.IR file .
-.
-The arguments
-.IR llx ,
-.IR lly ,
-.IR urx ,
-and
-.I ury
-give the bounding box of the graphic in the default PostScript
-coordinate system; they should all be integers;
-.I llx
-and
-.I lly
-are the x and y\~coordinates of the lower left
-corner of the graphic;
-.I urx
-and
-.I ury
-are the x and y\~coordinates of the upper right corner of the graphic;
-.I width
-and
-.I height
-are integers that give the desired width and height in groff
-units of the graphic.
-.
-The graphic will be scaled so that it has this width and height
-and translated so that the lower left corner of the graphic is
-located at the position associated with
-.B \[rs]X
-command.
-.
-If the height argument is omitted it will be scaled uniformly in the
-x and y\~directions so that it has the specified width.
-.
-Note that the contents of the
-.B \[rs]X
-command are not interpreted by
-.BR troff ;
-so vertical space for the graphic is not automatically added,
-and the
-.I width
-and
-.I height
-arguments are not allowed to have attached scaling indicators.
-.
-If the PostScript file complies with the Adobe Document Structuring
-Conventions and contains a
-.B %%Bounding\%Box
-comment, then the bounding box can be automatically
-extracted from within groff by using the
-.B psbb
-request.
-.
-.IP
-See
-.BR groff_tmac (@MAN5EXT@)
-for a description of the
-.B PSPIC
-macro which provides a convenient high-level interface for inclusion of
-PostScript graphics.
-.
-.TP
-.B \[rs]X'ps:\ invis'
-.TQ
-.B \[rs]X'ps:\ endinvis'
-No output will be generated for text and drawing commands
-that are bracketed with these
-.B \[rs]X
-commands.
-.
-These commands are intended for use when output from
-.B troff
-will be previewed before being processed with
-.BR grops ;
-if the previewer is unable to display certain characters
-or other constructs, then other substitute characters or constructs
-can be used for previewing by bracketing them with these
-.B \[rs]X
-commands.
-.
-.RS
-.LP
-For example,
-.B \%gxditview
-is not able to display a proper
-.B \[rs](em
-character because the standard X11 fonts do not provide it;
-this problem can be overcome by executing the following
-request
-.
-.IP
-.ft B
-.nf
-\&.char \[rs](em \[rs]X'ps: invis'\[rs]
-\[rs]Z'\[rs]v'-.25m'\[rs]h'.05m'\[rs]D'l .9m 0'\[rs]h'.05m''\[rs]
-\[rs]X'ps: endinvis'\[rs](em
-.ft
-.fi
-.
-.LP
-In this case,
-.B \%gxditview
-will be unable to display the
-.B \[rs](em
-character and will draw the line,
-whereas
-.B grops
-will print the
-.B \[rs](em
-character
-and ignore the line (this code is already in file
-.B Xps.tmac
-which will be loaded if a document intended for
-.B grops
-is previewed with
-.BR \%gxditview ).
-.RE
-.
-.LP
-The input to
-.B grops
-must be in the format output by
-.BR @g@troff (@MAN1EXT@).
-.
-This is described in
-.BR groff_out (@MAN5EXT@).
-.
-.LP
-In addition, the device and font description files for the device used
-must meet certain requirements.
-.
-The device and font description files supplied for
-.B ps
-device meet all these requirements.
-.
-.BR afmtodit (@MAN1EXT@)
-can be used to create font files from AFM files.
-.
-The resolution must be an integer multiple of\~72 times the
-.BR sizescale .
-.
-The
-.B ps
-device uses a resolution of 72000 and a sizescale of 1000.
-.
-.LP
-The device description file must contain a valid paper size; see
-.BR groff_font (@MAN5EXT@)
-for more information.
-.
-.LP
-Each font description file must contain a command
-.IP
-.BI internalname\ psname
-.LP
-which says that the PostScript name of the font is
-.IR psname .
-.
-It may also contain a command
-.IP
-.BI encoding\ enc_file
-.LP
-which says that
-the PostScript font should be reencoded using the encoding described in
-.IR enc_file ;
-this file should consist of a sequence of lines of the form:
-.IP
-.I
-pschar code
-.LP
-where
-.I pschar
-is the PostScript name of the character,
-and
-.I code
-is its position in the encoding expressed as a decimal integer; valid
-values are in the range 0 to\~255.
-.
-Lines starting with
-.B #
-and blank lines are ignored.
-.
-The code for each character given in the font file must correspond
-to the code for the character in encoding file, or to the code in the default
-encoding for the font if the PostScript font is not to be reencoded.
-.
-This code can be used with the
-.B \[rs]N
-escape sequence in
-.B troff
-to select the character,
-even if the character does not have a groff name.
-.
-Every character in the font file must exist in the PostScript font, and
-the widths given in the font file must match the widths used
-in the PostScript font.
-.
-.B grops
-will assume that a character with a groff name of
-.B space
-is blank (makes no marks on the page);
-it can make use of such a character to generate more efficient and
-compact PostScript output.
-.
-.LP
-Note that
-.B grops
-is able to display all glyphs in a PostScript font, not only 256.
-.I enc_file
-(or the default encoding if no encoding file specified) just defines the
-order of glyphs for the first 256 characters; all other glyphs are
-accessed with additional encoding vectors which
-.B grops
-produces on the fly.
-.
-.LP
-.B grops
-can automatically include the downloadable fonts necessary
-to print the document.
-Such fonts must be in PFA format.
-Use
-.BR pfbtops (@MAN1EXT@)
-to convert a Type\~1 font in PFB format.
-Any downloadable fonts which should, when required, be included by
-.B grops
-must be listed in the file
-.BR @FONTDIR@/devps/download ;
-this should consist of lines of the form
-.
-.IP
-.I
-font filename
-.
-.LP
-where
-.I font
-is the PostScript name of the font,
-and
-.I filename
-is the name of the file containing the font;
-lines beginning with
-.B #
-and blank lines are ignored;
-fields may be separated by tabs or spaces;
-.I filename
-will be searched for using the same mechanism that is used
-for groff font metric files.
-.
-The
-.B download
-file itself will also be searched for using this mechanism;
-currently, only the first found file in the font path is used.
-.
-.LP
-If the file containing a downloadable font or imported document
-conforms to the Adobe Document Structuring Conventions,
-then
-.B grops
-will interpret any comments in the files sufficiently to ensure that its
-own output is conforming.
-.
-It will also supply any needed font resources that are listed in the
-.B download
-file
-as well as any needed file resources.
-.
-It is also able to handle inter-resource dependencies.
-.
-For example, suppose that you have a downloadable font called Garamond,
-and also a downloadable font called Garamond-Outline
-which depends on Garamond
-(typically it would be defined to copy Garamond's font dictionary,
-and change the PaintType),
-then it is necessary for Garamond to appear before Garamond-Outline
-in the PostScript document.
-.
-.B grops
-will handle this automatically
-provided that the downloadable font file for Garamond-Outline
-indicates its dependence on Garamond by means of
-the Document Structuring Conventions,
-for example by beginning with the following lines
-.
-.IP
-.B
-%!PS-Adobe-3.0 Resource-Font
-.br
-.B
-%%DocumentNeededResources: font Garamond
-.br
-.B
-%%EndComments
-.br
-.B
-%%IncludeResource: font Garamond
-.
-.LP
-In this case both Garamond and Garamond-Outline would need to be listed
-in the
-.B download
-file.
-.
-A downloadable font should not include its own name in a
-.B %%Document\%Supplied\%Resources
-comment.
-.
-.LP
-.B grops
-will not interpret
-.B %%Document\%Fonts
-comments.
-.
-The
-.BR %%Document\%Needed\%Resources ,
-.BR %%Document\%Supplied\%Resources ,
-.BR %%Include\%Resource ,
-.BR %%Begin\%Resource ,
-and
-.BR %%End\%Resource
-comments
-(or possibly the old
-.BR %%Document\%Needed\%Fonts ,
-.BR %%Document\%Supplied\%Fonts ,
-.BR %%Include\%Font ,
-.BR %%Begin\%Font ,
-and
-.BR %%End\%Font
-comments)
-should be used.
-.
-.
-.SS Encapsulated PostScript
-.B grops
-itself doesn't emit bounding box information.
-.
-With the help of GhostScript the following commands will produce an
-encapsulated PS file
-.B foo.eps
-from input file
-.BR foo :
-.
-.IP
-.B
-groff -P-b16 foo > foo.ps
-.br
-.B
-gs -dNOPAUSE -sDEVICE=bbox -- foo.ps 2> foo.bbox
-.br
-.B
-cat foo.ps | sed \-e '/%%Orientation/rfoo.bbx' > foo.eps
-.br
-.B
-rm foo.bbx
-.br
-.
-.
-.
-.SS TrueType fonts
-TrueType fonts can be used with
-.B grops
-if converted first to
-.B "Type 42"
-format, an especial PostScript wrapper equivalent to the
-PFA format mentioned in
-.BR pfbtops (@MAN1EXT@).
-There are several different methods to generate a type42
-wrapper and most of them involve the use of a PostScript
-interpreter such as Ghostscript \(em see
-.BR gs (1).
-Yet, the easiest method involves the use of the application
-.BR ttftot42 .
-This program uses
-.BR freetype (3)
-(version 1.3.1) to generate type42
-font wrappers and well-formed AFM files that can be fed to
-the
-.BR afmtodit (@MAN1EXT@)
-script to create appropriate metric files.
-The resulting font wrappers should be added to the
-.B download
-file.
-.B ttftot42
-source code can be downloaded from
-.URL ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ \
- ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ .
-.
-.
-.SH ENVIRONMENT
-.TP
-.SM
-.B GROPS_PROLOGUE
-If this is set to
-.IR foo ,
-then
-.B grops
-will use the file
-.I foo
-(in the font path) instead of the default prologue file
-.BR prologue .
-.
-The option
-.B \-P
-overrides this environment variable.
-.
-.
-.SH FILES
-.Tp \w'\fB@FONTDIR@/devps/download'u+2n
-.B @FONTDIR@/devps/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devps/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @FONTDIR@/devps/download
-List of downloadable fonts.
-.
-.TP
-.B @FONTDIR@/devps/text.enc
-Encoding used for text fonts.
-.
-.TP
-.B @MACRODIR@/ps.tmac
-Macros for use with
-.BR grops ;
-automatically loaded by
-.BR troffrc
-.
-.TP
-.B @MACRODIR@/pspic.tmac
-Definition of
-.B PSPIC
-macro,
-automatically loaded by
-.BR ps.tmac .
-.
-.TP
-.B @MACRODIR@/psold.tmac
-Macros to disable use of characters not present in older
-PostScript printers (e.g. `eth' or `thorn').
-.
-.TP
-.BI /tmp/grops XXXXXX
-Temporary file.
-.
-.
-.SH "SEE ALSO"
-.BR afmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR pfbtops (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
-.BR groff_tmac (@MAN5EXT@)
-.
-.PP
-.URL "http://\:partners.adobe.com/\:public/\:developer/\:en/\:ps/\:5001.DSC_Spec.pdf" \
- "PostScript Language Document Structuring Conventions Specification"
-.
-.cp \n[grops_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grops/ps.cpp b/contrib/groff/src/devices/grops/ps.cpp
deleted file mode 100644
index b6a54032c9d9..000000000000
--- a/contrib/groff/src/devices/grops/ps.cpp
+++ /dev/null
@@ -1,1881 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
- * PostScript documentation:
- * http://www.adobe.com/products/postscript/pdfs/PLRM.pdf
- * http://partners.adobe.com/asn/developer/pdfs/tn/5001.DSC_Spec.pdf
- */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "nonposix.h"
-#include "paper.h"
-
-#include "ps.h"
-#include <time.h>
-
-#ifdef NEED_DECLARATION_PUTENV
-extern "C" {
- int putenv(const char *);
-}
-#endif /* NEED_DECLARATION_PUTENV */
-
-extern "C" const char *Version_string;
-
-// search path defaults to the current directory
-search_path include_search_path(0, 0, 0, 1);
-
-static int landscape_flag = 0;
-static int manual_feed_flag = 0;
-static int ncopies = 1;
-static int linewidth = -1;
-// Non-zero means generate PostScript code that guesses the paper
-// length using the imageable area.
-static int guess_flag = 0;
-static double user_paper_length = 0;
-static double user_paper_width = 0;
-
-// Non-zero if -b was specified on the command line.
-static int bflag = 0;
-unsigned broken_flags = 0;
-
-// Non-zero means we need the CMYK extension for PostScript Level 1
-static int cmyk_flag = 0;
-
-#define DEFAULT_LINEWIDTH 40 /* in ems/1000 */
-#define MAX_LINE_LENGTH 72
-#define FILL_MAX 1000
-
-const char *const dict_name = "grops";
-const char *const defs_dict_name = "DEFS";
-const int DEFS_DICT_SPARE = 50;
-
-double degrees(double r)
-{
- return r*180.0/PI;
-}
-
-double radians(double d)
-{
- return d*PI/180.0;
-}
-
-// This is used for testing whether a character should be output in the
-// PostScript file using \nnn, so we really want the character to be
-// less than 0200.
-
-inline int is_ascii(char c)
-{
- return (unsigned char)c < 0200;
-}
-
-ps_output::ps_output(FILE *f, int n)
-: fp(f), col(0), max_line_length(n), need_space(0), fixed_point(0)
-{
-}
-
-ps_output &ps_output::set_file(FILE *f)
-{
- fp = f;
- col = 0;
- return *this;
-}
-
-ps_output &ps_output::copy_file(FILE *infp)
-{
- int c;
- while ((c = getc(infp)) != EOF)
- putc(c, fp);
- return *this;
-}
-
-ps_output &ps_output::end_line()
-{
- if (col != 0) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- return *this;
-}
-
-ps_output &ps_output::special(const char *s)
-{
- if (s == 0 || *s == '\0')
- return *this;
- if (col != 0) {
- putc('\n', fp);
- col = 0;
- }
- fputs(s, fp);
- if (strchr(s, '\0')[-1] != '\n')
- putc('\n', fp);
- need_space = 0;
- return *this;
-}
-
-ps_output &ps_output::simple_comment(const char *s)
-{
- if (col != 0)
- putc('\n', fp);
- putc('%', fp);
- putc('%', fp);
- fputs(s, fp);
- putc('\n', fp);
- col = 0;
- need_space = 0;
- return *this;
-}
-
-ps_output &ps_output::begin_comment(const char *s)
-{
- if (col != 0)
- putc('\n', fp);
- putc('%', fp);
- putc('%', fp);
- fputs(s, fp);
- col = 2 + strlen(s);
- return *this;
-}
-
-ps_output &ps_output::end_comment()
-{
- if (col != 0) {
- putc('\n', fp);
- col = 0;
- }
- need_space = 0;
- return *this;
-}
-
-ps_output &ps_output::comment_arg(const char *s)
-{
- int len = strlen(s);
- if (col + len + 1 > max_line_length) {
- putc('\n', fp);
- fputs("%%+", fp);
- col = 3;
- }
- putc(' ', fp);
- fputs(s, fp);
- col += len + 1;
- return *this;
-}
-
-ps_output &ps_output::set_fixed_point(int n)
-{
- assert(n >= 0 && n <= 10);
- fixed_point = n;
- return *this;
-}
-
-ps_output &ps_output::put_delimiter(char c)
-{
- if (col + 1 > max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- putc(c, fp);
- col++;
- need_space = 0;
- return *this;
-}
-
-ps_output &ps_output::put_string(const char *s, int n)
-{
- int len = 0;
- int i;
- for (i = 0; i < n; i++) {
- char c = s[i];
- if (is_ascii(c) && csprint(c)) {
- if (c == '(' || c == ')' || c == '\\')
- len += 2;
- else
- len += 1;
- }
- else
- len += 4;
- }
- if (len > n*2) {
- if (col + n*2 + 2 > max_line_length && n*2 + 2 <= max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- if (col + 1 > max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- putc('<', fp);
- col++;
- for (i = 0; i < n; i++) {
- if (col + 2 > max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- fprintf(fp, "%02x", s[i] & 0377);
- col += 2;
- }
- putc('>', fp);
- col++;
- }
- else {
- if (col + len + 2 > max_line_length && len + 2 <= max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- if (col + 2 > max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- putc('(', fp);
- col++;
- for (i = 0; i < n; i++) {
- char c = s[i];
- if (is_ascii(c) && csprint(c)) {
- if (c == '(' || c == ')' || c == '\\')
- len = 2;
- else
- len = 1;
- }
- else
- len = 4;
- if (col + len + 1 > max_line_length) {
- putc('\\', fp);
- putc('\n', fp);
- col = 0;
- }
- switch (len) {
- case 1:
- putc(c, fp);
- break;
- case 2:
- putc('\\', fp);
- putc(c, fp);
- break;
- case 4:
- fprintf(fp, "\\%03o", c & 0377);
- break;
- default:
- assert(0);
- }
- col += len;
- }
- putc(')', fp);
- col++;
- }
- need_space = 0;
- return *this;
-}
-
-ps_output &ps_output::put_number(int n)
-{
- char buf[1 + INT_DIGITS + 1];
- sprintf(buf, "%d", n);
- int len = strlen(buf);
- if (col > 0 && col + len + need_space > max_line_length) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(buf, fp);
- col += len;
- need_space = 1;
- return *this;
-}
-
-ps_output &ps_output::put_fix_number(int i)
-{
- const char *p = if_to_a(i, fixed_point);
- int len = strlen(p);
- if (col > 0 && col + len + need_space > max_line_length) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(p, fp);
- col += len;
- need_space = 1;
- return *this;
-}
-
-ps_output &ps_output::put_float(double d)
-{
- char buf[128];
- sprintf(buf, "%.4f", d);
- int last = strlen(buf) - 1;
- while (buf[last] == '0')
- last--;
- if (buf[last] == '.')
- last--;
- buf[++last] = '\0';
- if (col > 0 && col + last + need_space > max_line_length) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(buf, fp);
- col += last;
- need_space = 1;
- return *this;
-}
-
-ps_output &ps_output::put_symbol(const char *s)
-{
- int len = strlen(s);
- if (col > 0 && col + len + need_space > max_line_length) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(s, fp);
- col += len;
- need_space = 1;
- return *this;
-}
-
-ps_output &ps_output::put_color(unsigned int c)
-{
- char buf[128];
- sprintf(buf, "%.3g", double(c) / color::MAX_COLOR_VAL);
- int len = strlen(buf);
- if (col > 0 && col + len + need_space > max_line_length) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(buf, fp);
- col += len;
- need_space = 1;
- return *this;
-}
-
-ps_output &ps_output::put_literal_symbol(const char *s)
-{
- int len = strlen(s);
- if (col > 0 && col + len + 1 > max_line_length) {
- putc('\n', fp);
- col = 0;
- }
- putc('/', fp);
- fputs(s, fp);
- col += len + 1;
- need_space = 1;
- return *this;
-}
-
-class ps_font : public font {
- ps_font(const char *);
-public:
- int encoding_index;
- char *encoding;
- char *reencoded_name;
- ~ps_font();
- void handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno);
- static ps_font *load_ps_font(const char *);
-};
-
-ps_font *ps_font::load_ps_font(const char *s)
-{
- ps_font *f = new ps_font(s);
- if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
-}
-
-ps_font::ps_font(const char *nm)
-: font(nm), encoding_index(-1), encoding(0), reencoded_name(0)
-{
-}
-
-ps_font::~ps_font()
-{
- a_delete encoding;
- a_delete reencoded_name;
-}
-
-void ps_font::handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "encoding") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`encoding' command requires an argument");
- else
- encoding = strsave(arg);
- }
-}
-
-static void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "broken") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`broken' command requires an argument");
- else if (!bflag)
- broken_flags = atoi(arg);
- }
-}
-
-struct subencoding {
- font *p;
- unsigned int num;
- int idx;
- char *subfont;
- const char *glyphs[256];
- subencoding *next;
-
- subencoding(font *, unsigned int, int, subencoding *);
- ~subencoding();
-};
-
-subencoding::subencoding(font *f, unsigned int n, int ix, subencoding *s)
-: p(f), num(n), idx(ix), subfont(0), next(s)
-{
- for (int i = 0; i < 256; i++)
- glyphs[i] = 0;
-}
-
-subencoding::~subencoding()
-{
- a_delete subfont;
-}
-
-struct style {
- font *f;
- subencoding *sub;
- int point_size;
- int height;
- int slant;
- style();
- style(font *, subencoding *, int, int, int);
- int operator==(const style &) const;
- int operator!=(const style &) const;
-};
-
-style::style() : f(0)
-{
-}
-
-style::style(font *p, subencoding *s, int sz, int h, int sl)
-: f(p), sub(s), point_size(sz), height(h), slant(sl)
-{
-}
-
-int style::operator==(const style &s) const
-{
- return (f == s.f
- && sub == s.sub
- && point_size == s.point_size
- && height == s.height
- && slant == s.slant);
-}
-
-int style::operator!=(const style &s) const
-{
- return !(*this == s);
-}
-
-class ps_printer : public printer {
- FILE *tempfp;
- ps_output out;
- int res;
- int space_char_index;
- int pages_output;
- int paper_length;
- int equalise_spaces;
- enum { SBUF_SIZE = 256 };
- char sbuf[SBUF_SIZE];
- int sbuf_len;
- int sbuf_start_hpos;
- int sbuf_vpos;
- int sbuf_end_hpos;
- int sbuf_space_width;
- int sbuf_space_count;
- int sbuf_space_diff_count;
- int sbuf_space_code;
- int sbuf_kern;
- style sbuf_style;
- color sbuf_color; // the current PS color
- style output_style;
- subencoding *subencodings;
- int output_hpos;
- int output_vpos;
- int output_draw_point_size;
- int line_thickness;
- int output_line_thickness;
- unsigned char output_space_code;
- enum { MAX_DEFINED_STYLES = 50 };
- style defined_styles[MAX_DEFINED_STYLES];
- int ndefined_styles;
- int next_encoding_index;
- int next_subencoding_index;
- string defs;
- int ndefs;
- resource_manager rm;
- int invis_count;
-
- void flush_sbuf();
- void set_style(const style &);
- void set_space_code(unsigned char c);
- int set_encoding_index(ps_font *);
- subencoding *set_subencoding(font *, int, unsigned char *);
- char *get_subfont(subencoding *, const char *);
- void do_exec(char *, const environment *);
- void do_import(char *, const environment *);
- void do_def(char *, const environment *);
- void do_mdef(char *, const environment *);
- void do_file(char *, const environment *);
- void do_invis(char *, const environment *);
- void do_endinvis(char *, const environment *);
- void set_line_thickness_and_color(const environment *);
- void fill_path(const environment *);
- void encode_fonts();
- void encode_subfont(subencoding *);
- void define_encoding(const char *, int);
- void reencode_font(ps_font *);
- void set_color(color *c, int fill = 0);
-
- const char *media_name();
- int media_width();
- int media_height();
- void media_set();
-
-public:
- ps_printer(double);
- ~ps_printer();
- void set_char(int i, font *f, const environment *env, int w,
- const char *name);
- void draw(int code, int *p, int np, const environment *env);
- void begin_page(int);
- void end_page(int);
- void special(char *arg, const environment *env, char type);
- font *make_font(const char *);
- void end_of_line();
-};
-
-// `pl' is in inches
-ps_printer::ps_printer(double pl)
-: out(0, MAX_LINE_LENGTH),
- pages_output(0),
- sbuf_len(0),
- subencodings(0),
- output_hpos(-1),
- output_vpos(-1),
- line_thickness(-1),
- ndefined_styles(0),
- next_encoding_index(0),
- next_subencoding_index(0),
- ndefs(0),
- invis_count(0)
-{
- tempfp = xtmpfile();
- out.set_file(tempfp);
- if (linewidth < 0)
- linewidth = DEFAULT_LINEWIDTH;
- if (font::hor != 1)
- fatal("horizontal resolution must be 1");
- if (font::vert != 1)
- fatal("vertical resolution must be 1");
- if (font::res % (font::sizescale*72) != 0)
- fatal("res must be a multiple of 72*sizescale");
- int r = font::res;
- int point = 0;
- while (r % 10 == 0) {
- r /= 10;
- point++;
- }
- res = r;
- out.set_fixed_point(point);
- space_char_index = font::name_to_index("space");
- if (pl == 0)
- paper_length = font::paperlength;
- else
- paper_length = int(pl * font::res + 0.5);
- if (paper_length == 0)
- paper_length = 11 * font::res;
- equalise_spaces = font::res >= 72000;
-}
-
-int ps_printer::set_encoding_index(ps_font *f)
-{
- if (f->encoding_index >= 0)
- return f->encoding_index;
- for (font_pointer_list *p = font_list; p; p = p->next)
- if (p->p != f) {
- char *encoding = ((ps_font *)p->p)->encoding;
- int encoding_index = ((ps_font *)p->p)->encoding_index;
- if (encoding != 0 && encoding_index >= 0
- && strcmp(f->encoding, encoding) == 0) {
- return f->encoding_index = encoding_index;
- }
- }
- return f->encoding_index = next_encoding_index++;
-}
-
-subencoding *ps_printer::set_subencoding(font *f, int i, unsigned char *codep)
-{
- unsigned int idx = f->get_code(i);
- *codep = idx % 256;
- unsigned int num = idx >> 8;
- if (num == 0)
- return 0;
- subencoding *p = 0;
- for (p = subencodings; p; p = p->next)
- if (p->p == f && p->num == num)
- break;
- if (p == 0)
- p = subencodings = new subencoding(f, num, next_subencoding_index++,
- subencodings);
- p->glyphs[*codep] = f->get_special_device_encoding(i);
- return p;
-}
-
-char *ps_printer::get_subfont(subencoding *sub, const char *stem)
-{
- assert(sub != 0);
- if (!sub->subfont) {
- char *tem = new char[strlen(stem) + 2 + INT_DIGITS + 1];
- sprintf(tem, "%s@@%d", stem, next_subencoding_index);
- sub->subfont = tem;
- }
- return sub->subfont;
-}
-
-void ps_printer::set_char(int i, font *f, const environment *env, int w,
- const char *)
-{
- if (i == space_char_index || invis_count > 0)
- return;
- unsigned char code;
- subencoding *sub = set_subencoding(f, i, &code);
- style sty(f, sub, env->size, env->height, env->slant);
- if (sty.slant != 0) {
- if (sty.slant > 80 || sty.slant < -80) {
- error("silly slant `%1' degrees", sty.slant);
- sty.slant = 0;
- }
- }
- if (sbuf_len > 0) {
- if (sbuf_len < SBUF_SIZE
- && sty == sbuf_style
- && sbuf_vpos == env->vpos
- && sbuf_color == *env->col) {
- if (sbuf_end_hpos == env->hpos) {
- sbuf[sbuf_len++] = code;
- sbuf_end_hpos += w + sbuf_kern;
- return;
- }
- if (sbuf_len == 1 && sbuf_kern == 0) {
- sbuf_kern = env->hpos - sbuf_end_hpos;
- sbuf_end_hpos = env->hpos + sbuf_kern + w;
- sbuf[sbuf_len++] = code;
- return;
- }
- /* If sbuf_end_hpos - sbuf_kern == env->hpos, we are better off
- starting a new string. */
- if (sbuf_len < SBUF_SIZE - 1 && env->hpos >= sbuf_end_hpos
- && (sbuf_kern == 0 || sbuf_end_hpos - sbuf_kern != env->hpos)) {
- if (sbuf_space_code < 0) {
- if (f->contains(space_char_index)) {
- sbuf_space_code = f->get_code(space_char_index);
- sbuf_space_width = env->hpos - sbuf_end_hpos;
- sbuf_end_hpos = env->hpos + w + sbuf_kern;
- sbuf[sbuf_len++] = sbuf_space_code;
- sbuf[sbuf_len++] = code;
- sbuf_space_count++;
- return;
- }
- }
- else {
- int diff = env->hpos - sbuf_end_hpos - sbuf_space_width;
- if (diff == 0 || (equalise_spaces && (diff == 1 || diff == -1))) {
- sbuf_end_hpos = env->hpos + w + sbuf_kern;
- sbuf[sbuf_len++] = sbuf_space_code;
- sbuf[sbuf_len++] = code;
- sbuf_space_count++;
- if (diff == 1)
- sbuf_space_diff_count++;
- else if (diff == -1)
- sbuf_space_diff_count--;
- return;
- }
- }
- }
- }
- flush_sbuf();
- }
- sbuf_len = 1;
- sbuf[0] = code;
- sbuf_end_hpos = env->hpos + w;
- sbuf_start_hpos = env->hpos;
- sbuf_vpos = env->vpos;
- sbuf_style = sty;
- sbuf_space_code = -1;
- sbuf_space_width = 0;
- sbuf_space_count = sbuf_space_diff_count = 0;
- sbuf_kern = 0;
- if (sbuf_color != *env->col)
- set_color(env->col);
-}
-
-static char *make_encoding_name(int encoding_index)
-{
- static char buf[3 + INT_DIGITS + 1];
- sprintf(buf, "ENC%d", encoding_index);
- return buf;
-}
-
-static char *make_subencoding_name(int subencoding_index)
-{
- static char buf[6 + INT_DIGITS + 1];
- sprintf(buf, "SUBENC%d", subencoding_index);
- return buf;
-}
-
-const char *const WS = " \t\n\r";
-
-void ps_printer::define_encoding(const char *encoding, int encoding_index)
-{
- char *vec[256];
- int i;
- for (i = 0; i < 256; i++)
- vec[i] = 0;
- char *path;
- FILE *fp = font::open_file(encoding, &path);
- if (fp == 0)
- fatal("can't open encoding file `%1'", encoding);
- int lineno = 1;
- const int BUFFER_SIZE = 512;
- char buf[BUFFER_SIZE];
- while (fgets(buf, BUFFER_SIZE, fp) != 0) {
- char *p = buf;
- while (csspace(*p))
- p++;
- if (*p != '#' && *p != '\0' && (p = strtok(buf, WS)) != 0) {
- char *q = strtok(0, WS);
- int n = 0; // pacify compiler
- if (q == 0 || sscanf(q, "%d", &n) != 1 || n < 0 || n >= 256)
- fatal_with_file_and_line(path, lineno, "bad second field");
- vec[n] = new char[strlen(p) + 1];
- strcpy(vec[n], p);
- }
- lineno++;
- }
- a_delete path;
- out.put_literal_symbol(make_encoding_name(encoding_index))
- .put_delimiter('[');
- for (i = 0; i < 256; i++) {
- if (vec[i] == 0)
- out.put_literal_symbol(".notdef");
- else {
- out.put_literal_symbol(vec[i]);
- a_delete vec[i];
- }
- }
- out.put_delimiter(']')
- .put_symbol("def");
- fclose(fp);
-}
-
-void ps_printer::reencode_font(ps_font *f)
-{
- out.put_literal_symbol(f->reencoded_name)
- .put_symbol(make_encoding_name(f->encoding_index))
- .put_literal_symbol(f->get_internal_name())
- .put_symbol("RE");
-}
-
-void ps_printer::encode_fonts()
-{
- if (next_encoding_index == 0)
- return;
- char *done_encoding = new char[next_encoding_index];
- for (int i = 0; i < next_encoding_index; i++)
- done_encoding[i] = 0;
- for (font_pointer_list *f = font_list; f; f = f->next) {
- int encoding_index = ((ps_font *)f->p)->encoding_index;
- if (encoding_index >= 0) {
- assert(encoding_index < next_encoding_index);
- if (!done_encoding[encoding_index]) {
- done_encoding[encoding_index] = 1;
- define_encoding(((ps_font *)f->p)->encoding, encoding_index);
- }
- reencode_font((ps_font *)f->p);
- }
- }
- a_delete done_encoding;
-}
-
-void ps_printer::encode_subfont(subencoding *sub)
-{
- assert(sub->glyphs != 0);
- out.put_literal_symbol(make_subencoding_name(sub->idx))
- .put_delimiter('[');
- for (int i = 0; i < 256; i++)
- {
- if (sub->glyphs[i])
- out.put_literal_symbol(sub->glyphs[i]);
- else
- out.put_literal_symbol(".notdef");
- }
- out.put_delimiter(']')
- .put_symbol("def");
-}
-
-void ps_printer::set_style(const style &sty)
-{
- char buf[1 + INT_DIGITS + 1];
- for (int i = 0; i < ndefined_styles; i++)
- if (sty == defined_styles[i]) {
- sprintf(buf, "F%d", i);
- out.put_symbol(buf);
- return;
- }
- if (ndefined_styles >= MAX_DEFINED_STYLES)
- ndefined_styles = 0;
- sprintf(buf, "F%d", ndefined_styles);
- out.put_literal_symbol(buf);
- const char *psname = sty.f->get_internal_name();
- if (psname == 0)
- fatal("no internalname specified for font `%1'", sty.f->get_name());
- char *encoding = ((ps_font *)sty.f)->encoding;
- if (sty.sub == 0) {
- if (encoding != 0) {
- char *s = ((ps_font *)sty.f)->reencoded_name;
- if (s == 0) {
- int ei = set_encoding_index((ps_font *)sty.f);
- char *tem = new char[strlen(psname) + 1 + INT_DIGITS + 1];
- sprintf(tem, "%s@%d", psname, ei);
- psname = tem;
- ((ps_font *)sty.f)->reencoded_name = tem;
- }
- else
- psname = s;
- }
- }
- else
- psname = get_subfont(sty.sub, psname);
- out.put_fix_number((font::res/(72*font::sizescale))*sty.point_size);
- if (sty.height != 0 || sty.slant != 0) {
- int h = sty.height == 0 ? sty.point_size : sty.height;
- h *= font::res/(72*font::sizescale);
- int c = int(h*tan(radians(sty.slant)) + .5);
- out.put_fix_number(c)
- .put_fix_number(h)
- .put_literal_symbol(psname)
- .put_symbol("MF");
- }
- else {
- out.put_literal_symbol(psname)
- .put_symbol("SF");
- }
- defined_styles[ndefined_styles++] = sty;
-}
-
-void ps_printer::set_color(color *col, int fill)
-{
- sbuf_color = *col;
- unsigned int components[4];
- char s[3];
- color_scheme cs = col->get_components(components);
- s[0] = fill ? 'F' : 'C';
- s[2] = 0;
- switch (cs) {
- case DEFAULT: // black
- out.put_symbol("0");
- s[1] = 'g';
- break;
- case RGB:
- out.put_color(Red)
- .put_color(Green)
- .put_color(Blue);
- s[1] = 'r';
- break;
- case CMY:
- col->get_cmyk(&Cyan, &Magenta, &Yellow, &Black);
- // fall through
- case CMYK:
- out.put_color(Cyan)
- .put_color(Magenta)
- .put_color(Yellow)
- .put_color(Black);
- s[1] = 'k';
- cmyk_flag = 1;
- break;
- case GRAY:
- out.put_color(Gray);
- s[1] = 'g';
- break;
- }
- out.put_symbol(s);
-}
-
-void ps_printer::set_space_code(unsigned char c)
-{
- out.put_literal_symbol("SC")
- .put_number(c)
- .put_symbol("def");
-}
-
-void ps_printer::end_of_line()
-{
- flush_sbuf();
- // this ensures that we do an absolute motion to the beginning of a line
- output_vpos = output_hpos = -1;
-}
-
-void ps_printer::flush_sbuf()
-{
- enum {
- NONE,
- RELATIVE_H,
- RELATIVE_V,
- RELATIVE_HV,
- ABSOLUTE
- } motion = NONE;
- int space_flag = 0;
- if (sbuf_len == 0)
- return;
- if (output_style != sbuf_style) {
- set_style(sbuf_style);
- output_style = sbuf_style;
- }
- int extra_space = 0;
- if (output_hpos < 0 || output_vpos < 0)
- motion = ABSOLUTE;
- else {
- if (output_hpos != sbuf_start_hpos)
- motion = RELATIVE_H;
- if (output_vpos != sbuf_vpos) {
- if (motion != NONE)
- motion = RELATIVE_HV;
- else
- motion = RELATIVE_V;
- }
- }
- if (sbuf_space_code >= 0) {
- int w = sbuf_style.f->get_width(space_char_index, sbuf_style.point_size);
- if (w + sbuf_kern != sbuf_space_width) {
- if (sbuf_space_code != output_space_code) {
- set_space_code(sbuf_space_code);
- output_space_code = sbuf_space_code;
- }
- space_flag = 1;
- extra_space = sbuf_space_width - w - sbuf_kern;
- if (sbuf_space_diff_count > sbuf_space_count/2)
- extra_space++;
- else if (sbuf_space_diff_count < -(sbuf_space_count/2))
- extra_space--;
- }
- }
- if (space_flag)
- out.put_fix_number(extra_space);
- if (sbuf_kern != 0)
- out.put_fix_number(sbuf_kern);
- out.put_string(sbuf, sbuf_len);
- char command_array[] = {'A', 'B', 'C', 'D',
- 'E', 'F', 'G', 'H',
- 'I', 'J', 'K', 'L',
- 'M', 'N', 'O', 'P',
- 'Q', 'R', 'S', 'T'};
- char sym[2];
- sym[0] = command_array[motion*4 + space_flag + 2*(sbuf_kern != 0)];
- sym[1] = '\0';
- switch (motion) {
- case NONE:
- break;
- case ABSOLUTE:
- out.put_fix_number(sbuf_start_hpos)
- .put_fix_number(sbuf_vpos);
- break;
- case RELATIVE_H:
- out.put_fix_number(sbuf_start_hpos - output_hpos);
- break;
- case RELATIVE_V:
- out.put_fix_number(sbuf_vpos - output_vpos);
- break;
- case RELATIVE_HV:
- out.put_fix_number(sbuf_start_hpos - output_hpos)
- .put_fix_number(sbuf_vpos - output_vpos);
- break;
- default:
- assert(0);
- }
- out.put_symbol(sym);
- output_hpos = sbuf_end_hpos;
- output_vpos = sbuf_vpos;
- sbuf_len = 0;
-}
-
-void ps_printer::set_line_thickness_and_color(const environment *env)
-{
- if (line_thickness < 0) {
- if (output_draw_point_size != env->size) {
- // we ought to check for overflow here
- int lw = ((font::res/(72*font::sizescale))*linewidth*env->size)/1000;
- out.put_fix_number(lw)
- .put_symbol("LW");
- output_draw_point_size = env->size;
- output_line_thickness = -1;
- }
- }
- else {
- if (output_line_thickness != line_thickness) {
- out.put_fix_number(line_thickness)
- .put_symbol("LW");
- output_line_thickness = line_thickness;
- output_draw_point_size = -1;
- }
- }
- if (sbuf_color != *env->col)
- set_color(env->col);
-}
-
-void ps_printer::fill_path(const environment *env)
-{
- if (sbuf_color == *env->fill)
- out.put_symbol("FL");
- else
- set_color(env->fill, 1);
-}
-
-void ps_printer::draw(int code, int *p, int np, const environment *env)
-{
- if (invis_count > 0)
- return;
- flush_sbuf();
- int fill_flag = 0;
- switch (code) {
- case 'C':
- fill_flag = 1;
- // fall through
- case 'c':
- // troff adds an extra argument to C
- if (np != 1 && !(code == 'C' && np == 2)) {
- error("1 argument required for circle");
- break;
- }
- out.put_fix_number(env->hpos + p[0]/2)
- .put_fix_number(env->vpos)
- .put_fix_number(p[0]/2)
- .put_symbol("DC");
- if (fill_flag)
- fill_path(env);
- else {
- set_line_thickness_and_color(env);
- out.put_symbol("ST");
- }
- break;
- case 'l':
- if (np != 2) {
- error("2 arguments required for line");
- break;
- }
- set_line_thickness_and_color(env);
- out.put_fix_number(p[0] + env->hpos)
- .put_fix_number(p[1] + env->vpos)
- .put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("DL");
- break;
- case 'E':
- fill_flag = 1;
- // fall through
- case 'e':
- if (np != 2) {
- error("2 arguments required for ellipse");
- break;
- }
- out.put_fix_number(p[0])
- .put_fix_number(p[1])
- .put_fix_number(env->hpos + p[0]/2)
- .put_fix_number(env->vpos)
- .put_symbol("DE");
- if (fill_flag)
- fill_path(env);
- else {
- set_line_thickness_and_color(env);
- out.put_symbol("ST");
- }
- break;
- case 'P':
- fill_flag = 1;
- // fall through
- case 'p':
- {
- if (np & 1) {
- error("even number of arguments required for polygon");
- break;
- }
- if (np == 0) {
- error("no arguments for polygon");
- break;
- }
- out.put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("MT");
- for (int i = 0; i < np; i += 2)
- out.put_fix_number(p[i])
- .put_fix_number(p[i+1])
- .put_symbol("RL");
- out.put_symbol("CL");
- if (fill_flag)
- fill_path(env);
- else {
- set_line_thickness_and_color(env);
- out.put_symbol("ST");
- }
- break;
- }
- case '~':
- {
- if (np & 1) {
- error("even number of arguments required for spline");
- break;
- }
- if (np == 0) {
- error("no arguments for spline");
- break;
- }
- out.put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("MT");
- out.put_fix_number(p[0]/2)
- .put_fix_number(p[1]/2)
- .put_symbol("RL");
- /* tnum/tden should be between 0 and 1; the closer it is to 1
- the tighter the curve will be to the guiding lines; 2/3
- is the standard value */
- const int tnum = 2;
- const int tden = 3;
- for (int i = 0; i < np - 2; i += 2) {
- out.put_fix_number((p[i]*tnum)/(2*tden))
- .put_fix_number((p[i + 1]*tnum)/(2*tden))
- .put_fix_number(p[i]/2 + (p[i + 2]*(tden - tnum))/(2*tden))
- .put_fix_number(p[i + 1]/2 + (p[i + 3]*(tden - tnum))/(2*tden))
- .put_fix_number((p[i] - p[i]/2) + p[i + 2]/2)
- .put_fix_number((p[i + 1] - p[i + 1]/2) + p[i + 3]/2)
- .put_symbol("RC");
- }
- out.put_fix_number(p[np - 2] - p[np - 2]/2)
- .put_fix_number(p[np - 1] - p[np - 1]/2)
- .put_symbol("RL");
- set_line_thickness_and_color(env);
- out.put_symbol("ST");
- }
- break;
- case 'a':
- {
- if (np != 4) {
- error("4 arguments required for arc");
- break;
- }
- set_line_thickness_and_color(env);
- double c[2];
- if (adjust_arc_center(p, c))
- out.put_fix_number(env->hpos + int(c[0]))
- .put_fix_number(env->vpos + int(c[1]))
- .put_fix_number(int(sqrt(c[0]*c[0] + c[1]*c[1])))
- .put_float(degrees(atan2(-c[1], -c[0])))
- .put_float(degrees(atan2(p[1] + p[3] - c[1], p[0] + p[2] - c[0])))
- .put_symbol("DA");
- else
- out.put_fix_number(p[0] + p[2] + env->hpos)
- .put_fix_number(p[1] + p[3] + env->vpos)
- .put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("DL");
- }
- break;
- case 't':
- if (np == 0)
- line_thickness = -1;
- else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- line_thickness = p[0];
- }
- break;
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
- output_hpos = output_vpos = -1;
-}
-
-const char *ps_printer::media_name()
-{
- return "Default";
-}
-
-int ps_printer::media_width()
-{
- /*
- * NOTE:
- * Although paper size is defined as real numbers, it seems to be
- * a common convention to round to the nearest postscript unit.
- * For example, a4 is really 595.276 by 841.89 but we use 595 by 842.
- *
- * This is probably a good compromise, especially since the
- * Postscript definition specifies that media
- * matching should be done within a tolerance of 5 units.
- */
- return int(user_paper_width ? user_paper_width*72.0 + 0.5
- : font::paperwidth*72.0/font::res + 0.5);
-}
-
-int ps_printer::media_height()
-{
- return int(user_paper_length ? user_paper_length*72.0 + 0.5
- : paper_length*72.0/font::res + 0.5);
-}
-
-void ps_printer::media_set()
-{
- /*
- * The setpagedevice implies an erasepage and initgraphics, and
- * must thus precede any descriptions for a particular page.
- *
- * NOTE:
- * This does not work with ps2pdf when there are included eps
- * segments that contain PageSize/setpagedevice.
- * This might be a bug in ghostscript -- must be investigated.
- * Using setpagedevice in an .eps is really the wrong concept, anyway.
- *
- * NOTE:
- * For the future, this is really the place to insert other
- * media selection features, like:
- * MediaColor
- * MediaPosition
- * MediaType
- * MediaWeight
- * MediaClass
- * TraySwitch
- * ManualFeed
- * InsertSheet
- * Duplex
- * Collate
- * ProcessColorModel
- * etc.
- */
- if (!(broken_flags & (USE_PS_ADOBE_2_0|NO_PAPERSIZE))) {
- out.begin_comment("BeginFeature:")
- .comment_arg("*PageSize")
- .comment_arg(media_name())
- .end_comment();
- int w = media_width();
- int h = media_height();
- if (w > 0 && h > 0)
- // warning to user is done elsewhere
- fprintf(out.get_file(),
- "<< /PageSize [ %d %d ] /ImagingBBox null >> setpagedevice\n",
- w, h);
- out.simple_comment("EndFeature");
- }
-}
-
-void ps_printer::begin_page(int n)
-{
- out.begin_comment("Page:")
- .comment_arg(i_to_a(n));
- out.comment_arg(i_to_a(++pages_output))
- .end_comment();
- output_style.f = 0;
- output_space_code = 32;
- output_draw_point_size = -1;
- output_line_thickness = -1;
- output_hpos = output_vpos = -1;
- ndefined_styles = 0;
- out.simple_comment("BeginPageSetup");
-
-#if 0
- /*
- * NOTE:
- * may decide to do this once per page
- */
- media_set();
-#endif
-
- out.put_symbol("BP")
- .simple_comment("EndPageSetup");
- if (sbuf_color != default_color)
- set_color(&sbuf_color);
-}
-
-void ps_printer::end_page(int)
-{
- flush_sbuf();
- set_color(&default_color);
- out.put_symbol("EP");
- if (invis_count != 0) {
- error("missing `endinvis' command");
- invis_count = 0;
- }
-}
-
-font *ps_printer::make_font(const char *nm)
-{
- return ps_font::load_ps_font(nm);
-}
-
-ps_printer::~ps_printer()
-{
- out.simple_comment("Trailer")
- .put_symbol("end")
- .simple_comment("EOF");
- if (fseek(tempfp, 0L, 0) < 0)
- fatal("fseek on temporary file failed");
- fputs("%!PS-Adobe-", stdout);
- fputs((broken_flags & USE_PS_ADOBE_2_0) ? "2.0" : "3.0", stdout);
- putchar('\n');
- out.set_file(stdout);
- if (cmyk_flag)
- out.begin_comment("Extensions:")
- .comment_arg("CMYK")
- .end_comment();
- out.begin_comment("Creator:")
- .comment_arg("groff")
- .comment_arg("version")
- .comment_arg(Version_string)
- .end_comment();
- {
- fputs("%%CreationDate: ", out.get_file());
-#ifdef LONG_FOR_TIME_T
- long
-#else
- time_t
-#endif
- t = time(0);
- fputs(ctime(&t), out.get_file());
- }
- for (font_pointer_list *f = font_list; f; f = f->next) {
- ps_font *psf = (ps_font *)(f->p);
- rm.need_font(psf->get_internal_name());
- }
- rm.print_header_comments(out);
- out.begin_comment("Pages:")
- .comment_arg(i_to_a(pages_output))
- .end_comment();
- out.begin_comment("PageOrder:")
- .comment_arg("Ascend")
- .end_comment();
- if (!(broken_flags & NO_PAPERSIZE)) {
- int w = media_width();
- int h = media_height();
- if (w > 0 && h > 0)
- fprintf(out.get_file(),
- "%%%%DocumentMedia: %s %d %d %d %s %s\n",
- media_name(), // tag name of media
- w, // media width
- h, // media height
- 0, // weight in g/m2
- "()", // paper color, e.g. white
- "()" // preprinted form type
- );
- else {
- if (h <= 0)
- // see ps_printer::ps_printer
- warning("bad paper height, defaulting to 11i");
- if (w <= 0)
- warning("bad paper width");
- }
- }
- out.begin_comment("Orientation:")
- .comment_arg(landscape_flag ? "Landscape" : "Portrait")
- .end_comment();
- if (ncopies != 1) {
- out.end_line();
- fprintf(out.get_file(), "%%%%Requirements: numcopies(%d)\n", ncopies);
- }
- out.simple_comment("EndComments");
- if (!(broken_flags & NO_PAPERSIZE)) {
- /* gv works fine without this one, but it really should be there. */
- out.simple_comment("BeginDefaults");
- fprintf(out.get_file(), "%%%%PageMedia: %s\n", media_name());
- out.simple_comment("EndDefaults");
- }
- out.simple_comment("BeginProlog");
- rm.output_prolog(out);
- if (!(broken_flags & NO_SETUP_SECTION)) {
- out.simple_comment("EndProlog");
- out.simple_comment("BeginSetup");
- }
-#if 1
- /*
- * Define paper (i.e., media) size for entire document here.
- * This allows ps2pdf to correctly determine page size, for instance.
- */
- media_set();
-#endif
- rm.document_setup(out);
- out.put_symbol(dict_name)
- .put_symbol("begin");
- if (ndefs > 0)
- ndefs += DEFS_DICT_SPARE;
- out.put_literal_symbol(defs_dict_name)
- .put_number(ndefs + 1)
- .put_symbol("dict")
- .put_symbol("def");
- out.put_symbol(defs_dict_name)
- .put_symbol("begin");
- out.put_literal_symbol("u")
- .put_delimiter('{')
- .put_fix_number(1)
- .put_symbol("mul")
- .put_delimiter('}')
- .put_symbol("bind")
- .put_symbol("def");
- defs += '\0';
- out.special(defs.contents());
- out.put_symbol("end");
- if (ncopies != 1)
- out.put_literal_symbol("#copies")
- .put_number(ncopies)
- .put_symbol("def");
- out.put_literal_symbol("RES")
- .put_number(res)
- .put_symbol("def");
- out.put_literal_symbol("PL");
- if (guess_flag)
- out.put_symbol("PLG");
- else
- out.put_fix_number(paper_length);
- out.put_symbol("def");
- out.put_literal_symbol("LS")
- .put_symbol(landscape_flag ? "true" : "false")
- .put_symbol("def");
- if (manual_feed_flag) {
- out.begin_comment("BeginFeature:")
- .comment_arg("*ManualFeed")
- .comment_arg("True")
- .end_comment()
- .put_symbol("MANUAL")
- .simple_comment("EndFeature");
- }
- encode_fonts();
- while (subencodings) {
- subencoding *tem = subencodings;
- subencodings = subencodings->next;
- encode_subfont(tem);
- out.put_literal_symbol(tem->subfont)
- .put_symbol(make_subencoding_name(tem->idx))
- .put_literal_symbol(tem->p->get_internal_name())
- .put_symbol("RE");
- delete tem;
- }
- out.simple_comment((broken_flags & NO_SETUP_SECTION)
- ? "EndProlog"
- : "EndSetup");
- out.end_line();
- out.copy_file(tempfp);
- fclose(tempfp);
-}
-
-void ps_printer::special(char *arg, const environment *env, char type)
-{
- if (type != 'p')
- return;
- typedef void (ps_printer::*SPECIAL_PROCP)(char *, const environment *);
- static struct {
- const char *name;
- SPECIAL_PROCP proc;
- } proc_table[] = {
- { "exec", &ps_printer::do_exec },
- { "def", &ps_printer::do_def },
- { "mdef", &ps_printer::do_mdef },
- { "import", &ps_printer::do_import },
- { "file", &ps_printer::do_file },
- { "invis", &ps_printer::do_invis },
- { "endinvis", &ps_printer::do_endinvis },
- };
- char *p;
- for (p = arg; *p == ' ' || *p == '\n'; p++)
- ;
- char *tag = p;
- for (; *p != '\0' && *p != ':' && *p != ' ' && *p != '\n'; p++)
- ;
- if (*p == '\0' || strncmp(tag, "ps", p - tag) != 0) {
- error("X command without `ps:' tag ignored");
- return;
- }
- p++;
- for (; *p == ' ' || *p == '\n'; p++)
- ;
- char *command = p;
- for (; *p != '\0' && *p != ' ' && *p != '\n'; p++)
- ;
- if (*command == '\0') {
- error("empty X command ignored");
- return;
- }
- for (unsigned int i = 0; i < sizeof(proc_table)/sizeof(proc_table[0]); i++)
- if (strncmp(command, proc_table[i].name, p - command) == 0) {
- (this->*(proc_table[i].proc))(p, env);
- return;
- }
- error("X command `%1' not recognised", command);
-}
-
-// A conforming PostScript document must not have lines longer
-// than 255 characters (excluding line termination characters).
-
-static int check_line_lengths(const char *p)
-{
- for (;;) {
- const char *end = strchr(p, '\n');
- if (end == 0)
- end = strchr(p, '\0');
- if (end - p > 255)
- return 0;
- if (*end == '\0')
- break;
- p = end + 1;
- }
- return 1;
-}
-
-void ps_printer::do_exec(char *arg, const environment *env)
-{
- flush_sbuf();
- while (csspace(*arg))
- arg++;
- if (*arg == '\0') {
- error("missing argument to X exec command");
- return;
- }
- if (!check_line_lengths(arg)) {
- error("lines in X exec command must not be more than 255 characters long");
- return;
- }
- out.put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("EBEGIN")
- .special(arg)
- .put_symbol("EEND");
- output_hpos = output_vpos = -1;
- output_style.f = 0;
- output_draw_point_size = -1;
- output_line_thickness = -1;
- ndefined_styles = 0;
- if (!ndefs)
- ndefs = 1;
-}
-
-void ps_printer::do_file(char *arg, const environment *env)
-{
- flush_sbuf();
- while (csspace(*arg))
- arg++;
- if (*arg == '\0') {
- error("missing argument to X file command");
- return;
- }
- const char *filename = arg;
- do {
- ++arg;
- } while (*arg != '\0' && *arg != ' ' && *arg != '\n');
- out.put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("EBEGIN");
- rm.import_file(filename, out);
- out.put_symbol("EEND");
- output_hpos = output_vpos = -1;
- output_style.f = 0;
- output_draw_point_size = -1;
- output_line_thickness = -1;
- ndefined_styles = 0;
- if (!ndefs)
- ndefs = 1;
-}
-
-void ps_printer::do_def(char *arg, const environment *)
-{
- flush_sbuf();
- while (csspace(*arg))
- arg++;
- if (!check_line_lengths(arg)) {
- error("lines in X def command must not be more than 255 characters long");
- return;
- }
- defs += arg;
- if (*arg != '\0' && strchr(arg, '\0')[-1] != '\n')
- defs += '\n';
- ndefs++;
-}
-
-// Like def, but the first argument says how many definitions it contains.
-
-void ps_printer::do_mdef(char *arg, const environment *)
-{
- flush_sbuf();
- char *p;
- int n = (int)strtol(arg, &p, 10);
- if (n == 0 && p == arg) {
- error("first argument to X mdef must be an integer");
- return;
- }
- if (n < 0) {
- error("out of range argument `%1' to X mdef command", int(n));
- return;
- }
- arg = p;
- while (csspace(*arg))
- arg++;
- if (!check_line_lengths(arg)) {
- error("lines in X mdef command must not be more than 255 characters long");
- return;
- }
- defs += arg;
- if (*arg != '\0' && strchr(arg, '\0')[-1] != '\n')
- defs += '\n';
- ndefs += n;
-}
-
-void ps_printer::do_import(char *arg, const environment *env)
-{
- flush_sbuf();
- while (*arg == ' ' || *arg == '\n')
- arg++;
- char *p;
- for (p = arg; *p != '\0' && *p != ' ' && *p != '\n'; p++)
- ;
- if (*p != '\0')
- *p++ = '\0';
- int parms[6];
- int nparms = 0;
- while (nparms < 6) {
- char *end;
- long n = strtol(p, &end, 10);
- if (n == 0 && end == p)
- break;
- parms[nparms++] = int(n);
- p = end;
- }
- if (csalpha(*p) && (p[1] == '\0' || p[1] == ' ' || p[1] == '\n')) {
- error("scaling indicators not allowed in arguments for X import command");
- return;
- }
- while (*p == ' ' || *p == '\n')
- p++;
- if (nparms < 5) {
- if (*p == '\0')
- error("too few arguments for X import command");
- else
- error("invalid argument `%1' for X import command", p);
- return;
- }
- if (*p != '\0') {
- error("superfluous argument `%1' for X import command", p);
- return;
- }
- int llx = parms[0];
- int lly = parms[1];
- int urx = parms[2];
- int ury = parms[3];
- int desired_width = parms[4];
- int desired_height = parms[5];
- if (desired_width <= 0) {
- error("bad width argument `%1' for X import command: must be > 0",
- desired_width);
- return;
- }
- if (nparms == 6 && desired_height <= 0) {
- error("bad height argument `%1' for X import command: must be > 0",
- desired_height);
- return;
- }
- if (llx == urx) {
- error("llx and urx arguments for X import command must not be equal");
- return;
- }
- if (lly == ury) {
- error("lly and ury arguments for X import command must not be equal");
- return;
- }
- if (nparms == 5) {
- int old_wid = urx - llx;
- int old_ht = ury - lly;
- if (old_wid < 0)
- old_wid = -old_wid;
- if (old_ht < 0)
- old_ht = -old_ht;
- desired_height = int(desired_width*(double(old_ht)/double(old_wid)) + .5);
- }
- if (env->vpos - desired_height < 0)
- warning("top of imported graphic is above the top of the page");
- out.put_number(llx)
- .put_number(lly)
- .put_fix_number(desired_width)
- .put_number(urx - llx)
- .put_fix_number(-desired_height)
- .put_number(ury - lly)
- .put_fix_number(env->hpos)
- .put_fix_number(env->vpos)
- .put_symbol("PBEGIN");
- rm.import_file(arg, out);
- // do this here just in case application defines PEND
- out.put_symbol("end")
- .put_symbol("PEND");
-}
-
-void ps_printer::do_invis(char *, const environment *)
-{
- invis_count++;
-}
-
-void ps_printer::do_endinvis(char *, const environment *)
-{
- if (invis_count == 0)
- error("unbalanced `endinvis' command");
- else
- --invis_count;
-}
-
-printer *make_printer()
-{
- return new ps_printer(user_paper_length);
-}
-
-static void usage(FILE *stream);
-
-int main(int argc, char **argv)
-{
- setlocale(LC_NUMERIC, "C");
- program_name = argv[0];
- string env;
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "b:c:F:gI:lmp:P:vw:", long_options, NULL))
- != EOF)
- switch(c) {
- case 'b':
- // XXX check this
- broken_flags = atoi(optarg);
- bflag = 1;
- break;
- case 'c':
- if (sscanf(optarg, "%d", &ncopies) != 1 || ncopies <= 0) {
- error("bad number of copies `%s'", optarg);
- ncopies = 1;
- }
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'g':
- guess_flag = 1;
- break;
- case 'I':
- include_search_path.command_line_dir(optarg);
- break;
- case 'l':
- landscape_flag = 1;
- break;
- case 'm':
- manual_feed_flag = 1;
- break;
- case 'p':
- if (!font::scan_papersize(optarg, 0,
- &user_paper_length, &user_paper_width))
- error("invalid custom paper size `%1' ignored", optarg);
- break;
- case 'P':
- env = "GROPS_PROLOGUE";
- env += '=';
- env += optarg;
- env += '\0';
- if (putenv(strsave(env.contents())))
- fatal("putenv failed");
- break;
- case 'v':
- printf("GNU grops (groff) version %s\n", Version_string);
- exit(0);
- break;
- case 'w':
- if (sscanf(optarg, "%d", &linewidth) != 1 || linewidth < 0) {
- error("bad linewidth `%1'", optarg);
- linewidth = -1;
- }
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
- SET_BINARY(fileno(stdout));
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
-"usage: %s [-glmv] [-b n] [-c n] [-w n] [-I dir] [-P prologue]\n"
-" [-F dir] [files ...]\n",
- program_name);
-}
diff --git a/contrib/groff/src/devices/grops/ps.h b/contrib/groff/src/devices/grops/ps.h
deleted file mode 100644
index fabf47dbfcab..000000000000
--- a/contrib/groff/src/devices/grops/ps.h
+++ /dev/null
@@ -1,129 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class ps_output {
-public:
- ps_output(FILE *, int max_line_length);
- ps_output &put_string(const char *, int);
- ps_output &put_number(int);
- ps_output &put_fix_number(int);
- ps_output &put_float(double);
- ps_output &put_symbol(const char *);
- ps_output &put_color(unsigned int);
- ps_output &put_literal_symbol(const char *);
- ps_output &set_fixed_point(int);
- ps_output &simple_comment(const char *);
- ps_output &begin_comment(const char *);
- ps_output &comment_arg(const char *);
- ps_output &end_comment();
- ps_output &set_file(FILE *);
- ps_output &include_file(FILE *);
- ps_output &copy_file(FILE *);
- ps_output &end_line();
- ps_output &put_delimiter(char);
- ps_output &special(const char *);
- FILE *get_file();
-private:
- FILE *fp;
- int col;
- int max_line_length; // not including newline
- int need_space;
- int fixed_point;
-};
-
-inline FILE *ps_output::get_file()
-{
- return fp;
-}
-
-enum resource_type {
- RESOURCE_FONT,
- RESOURCE_PROCSET,
- RESOURCE_FILE,
- RESOURCE_ENCODING,
- RESOURCE_FORM,
- RESOURCE_PATTERN
- };
-
-struct resource;
-
-extern string an_empty_string;
-
-class resource_manager {
-public:
- resource_manager();
- ~resource_manager();
- void import_file(const char *filename, ps_output &);
- void need_font(const char *name);
- void print_header_comments(ps_output &);
- void document_setup(ps_output &);
- void output_prolog(ps_output &);
-private:
- unsigned extensions;
- unsigned language_level;
- resource *procset_resource;
- resource *resource_list;
- resource *lookup_resource(resource_type type, string &name,
- string &version = an_empty_string,
- unsigned revision = 0);
- resource *lookup_font(const char *name);
- void read_download_file();
- void supply_resource(resource *r, int rank, FILE *outfp,
- int is_document = 0);
- void process_file(int rank, FILE *fp, const char *filename, FILE *outfp);
- resource *read_file_arg(const char **);
- resource *read_procset_arg(const char **);
- resource *read_font_arg(const char **);
- resource *read_resource_arg(const char **);
- void print_resources_comment(unsigned flag, FILE *outfp);
- void print_extensions_comment(FILE *outfp);
- void print_language_level_comment(FILE *outfp);
- int do_begin_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_include_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_include_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_include_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_include_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_include_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int change_to_end_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_preview(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_data(const char *ptr, int rank, FILE *fp, FILE *outfp);
- int do_begin_binary(const char *ptr, int rank, FILE *fp, FILE *outfp);
-};
-
-extern unsigned broken_flags;
-
-// broken_flags is ored from these
-
-enum {
- NO_SETUP_SECTION = 01,
- STRIP_PERCENT_BANG = 02,
- STRIP_STRUCTURE_COMMENTS = 04,
- USE_PS_ADOBE_2_0 = 010,
- NO_PAPERSIZE = 020
-};
-
-#include "searchpath.h"
-
-extern search_path include_search_path;
diff --git a/contrib/groff/src/devices/grops/psfig.diff b/contrib/groff/src/devices/grops/psfig.diff
deleted file mode 100644
index 5be080ddd933..000000000000
--- a/contrib/groff/src/devices/grops/psfig.diff
+++ /dev/null
@@ -1,106 +0,0 @@
-These are patches to makes psfig work with groff. They apply to the
-version of psfig in comp.sources.unix/Volume11. After applying them,
-psfig should be recompiled with -DGROFF. The resulting psfig will
-work only with groff, so you might want to install it under a
-different name. The output of this psfig must be processed using the
-macros in the file ../tmac/tmac.psfig. These will automatically add
-the necessary PostScript code to the prologue output by grops. Use of
-the `global' feature in psfig will result in non-conformant PostScript
-which will fail if processed by a page reversal program. Note that
-psfig is unsupported by me (I'm not interested in hearing about psfig
-problems.) For new documents, I recommend using the PostScript
-inclusion features provided by grops.
-
-James Clark
-jjc@jclark.com
-
-*** cmds.c.~1~ Thu Feb 14 16:09:45 1991
---- cmds.c Mon Mar 4 12:49:26 1991
-***************
-*** 245,253 ****
---- 245,261 ----
- (void) sprintf(x, "%.2fp", fx);
- (void) sprintf(y, "%.2fp", fy);
- } else if (!*x) {
-+ #ifndef GROFF
- (void) sprintf(x,"(%.2fp*%s/%.2fp)", fx, y, fy);
-+ #else /* GROFF */
-+ (void) sprintf(x,"(%.0fu*%s/%.0fu)", fx, y, fy);
-+ #endif /* GROFF */
- } else if (!*y) {
-+ #ifndef GROFF
- (void) sprintf(y,"(%.2fp*%s/%.2fp)", fy, x, fx);
-+ #else /* GROFF */
-+ (void) sprintf(y,"(%.0fu*%s/%.0fu)", fy, x, fx);
-+ #endif /* GROFF */
- }
-
- /*
-*** troff.c.~1~ Thu Feb 14 16:09:48 1991
---- troff.c Mon Mar 4 12:48:46 1991
-***************
-*** 26,32 ****
---- 26,36 ----
- }
-
-
-+ #ifndef GROFF
- char incl_file_s[] = "\\X'f%s'";
-+ #else /* GROFF */
-+ char incl_file_s[] = "\\X'ps: file %s'";
-+ #endif /* GROFF */
- includeFile(filenm)
- char *filenm; {
- printf(incl_file_s, filenm);
-***************
-*** 40,52 ****
---- 44,64 ----
- error("buffer overflow");
- }
-
-+ #ifndef GROFF
- char endfig_s[] = "\\X'pendFig'";
-+ #else /* GROFF */
-+ char endfig_s[] = "\\X'ps: exec psfigend'";
-+ #endif /* GROFF */
- endfig() {
- printf(endfig_s);
- }
-
- char startfig_s[] =
-+ #ifndef GROFF
- "\\X'p\\w@\\h@%s@@'\\X'p\\w@\\h@%s@@'\\X'p%.2f'\\X'p%.2f'\\X'p%.2f'\\X'p%.2f'\\X'pstartFig'";
-+ #else /* GROFF */
-+ "\\X'ps: exec \\w@\\h@%s@@ \\w@\\h@%s@@ %.2f %.2f %.2f %.2f psfigstart'";
-+ #endif /* GROFF */
-
- startfig(x, y, llx, lly, urx, ury)
- char *x, *y;
-***************
-*** 57,63 ****
---- 69,79 ----
- }
-
- emitDoClip() {
-+ #ifndef GROFF
- printf("\\X'pdoclip'");
-+ #else /* GROFF */
-+ printf("\\X'ps: exec psfigclip'");
-+ #endif /* GROFF */
- }
-
- flushX()
-***************
-*** 116,122 ****
---- 132,142 ----
-
- #define isWhite(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\n')
-
-+ #ifndef GROFF
- char literal_s[] = "\\X'p%s'";
-+ #else /* GROFF */
-+ char literal_s[] = "\\X'ps: exec %s'";
-+ #endif /* GROFF */
- emitLiteral(text)
- char *text; {
- static char litbuf[BUFSZ];
diff --git a/contrib/groff/src/devices/grops/psrm.cpp b/contrib/groff/src/devices/grops/psrm.cpp
deleted file mode 100644
index f1894f593c44..000000000000
--- a/contrib/groff/src/devices/grops/psrm.cpp
+++ /dev/null
@@ -1,1178 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#include "ps.h"
-
-#ifdef NEED_DECLARATION_PUTENV
-extern "C" {
- int putenv(const char *);
-}
-#endif /* NEED_DECLARATION_PUTENV */
-
-#define GROPS_PROLOGUE "prologue"
-
-static void print_ps_string(const string &s, FILE *outfp);
-
-cset white_space("\n\r \t\f");
-string an_empty_string;
-
-char valid_input_table[256]= {
-#ifndef IS_EBCDIC_HOST
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-#else
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
-#endif
-};
-
-const char *extension_table[] = {
- "DPS",
- "CMYK",
- "Composite",
- "FileSystem",
-};
-
-const int NEXTENSIONS = sizeof(extension_table)/sizeof(extension_table[0]);
-
-const char *resource_table[] = {
- "font",
- "procset",
- "file",
- "encoding",
- "form",
- "pattern",
-};
-
-const int NRESOURCES = sizeof(resource_table)/sizeof(resource_table[0]);
-
-static int read_uint_arg(const char **pp, unsigned *res)
-{
- while (white_space(**pp))
- *pp += 1;
- if (**pp == '\0') {
- error("missing argument");
- return 0;
- }
- const char *start = *pp;
- // XXX use strtoul
- long n = strtol(start, (char **)pp, 10);
- if (n == 0 && *pp == start) {
- error("not an integer");
- return 0;
- }
- if (n < 0) {
- error("argument must not be negative");
- return 0;
- }
- *res = unsigned(n);
- return 1;
-}
-
-struct resource {
- resource *next;
- resource_type type;
- string name;
- enum { NEEDED = 01, SUPPLIED = 02, FONT_NEEDED = 04, BUSY = 010 };
- unsigned flags;
- string version;
- unsigned revision;
- char *filename;
- int rank;
- resource(resource_type, string &, string & = an_empty_string, unsigned = 0);
- ~resource();
- void print_type_and_name(FILE *outfp);
-};
-
-resource::resource(resource_type t, string &n, string &v, unsigned r)
-: next(0), type(t), flags(0), revision(r), filename(0), rank(-1)
-{
- name.move(n);
- version.move(v);
- if (type == RESOURCE_FILE) {
- if (name.search('\0') >= 0)
- error("filename contains a character with code 0");
- filename = name.extract();
- }
-}
-
-resource::~resource()
-{
- a_delete filename;
-}
-
-void resource::print_type_and_name(FILE *outfp)
-{
- fputs(resource_table[type], outfp);
- putc(' ', outfp);
- print_ps_string(name, outfp);
- if (type == RESOURCE_PROCSET) {
- putc(' ', outfp);
- print_ps_string(version, outfp);
- fprintf(outfp, " %u", revision);
- }
-}
-
-resource_manager::resource_manager()
-: extensions(0), language_level(0), resource_list(0)
-{
- read_download_file();
- string procset_name("grops");
- extern const char *version_string;
- extern const char *revision_string;
- unsigned revision_uint;
- if (!read_uint_arg(&revision_string, &revision_uint))
- revision_uint = 0;
- string procset_version(version_string);
- procset_resource = lookup_resource(RESOURCE_PROCSET, procset_name,
- procset_version, revision_uint);
- procset_resource->flags |= resource::SUPPLIED;
-}
-
-resource_manager::~resource_manager()
-{
- while (resource_list) {
- resource *tem = resource_list;
- resource_list = resource_list->next;
- delete tem;
- }
-}
-
-resource *resource_manager::lookup_resource(resource_type type,
- string &name,
- string &version,
- unsigned revision)
-{
- resource *r;
- for (r = resource_list; r; r = r->next)
- if (r->type == type
- && r->name == name
- && r->version == version
- && r->revision == revision)
- return r;
- r = new resource(type, name, version, revision);
- r->next = resource_list;
- resource_list = r;
- return r;
-}
-
-// Just a specialized version of lookup_resource().
-
-resource *resource_manager::lookup_font(const char *name)
-{
- resource *r;
- for (r = resource_list; r; r = r->next)
- if (r->type == RESOURCE_FONT
- && strlen(name) == (size_t)r->name.length()
- && memcmp(name, r->name.contents(), r->name.length()) == 0)
- return r;
- string s(name);
- r = new resource(RESOURCE_FONT, s);
- r->next = resource_list;
- resource_list = r;
- return r;
-}
-
-void resource_manager::need_font(const char *name)
-{
- lookup_font(name)->flags |= resource::FONT_NEEDED;
-}
-
-typedef resource *Presource; // Work around g++ bug.
-
-void resource_manager::document_setup(ps_output &out)
-{
- int nranks = 0;
- resource *r;
- for (r = resource_list; r; r = r->next)
- if (r->rank >= nranks)
- nranks = r->rank + 1;
- if (nranks > 0) {
- // Sort resource_list in reverse order of rank.
- Presource *head = new Presource[nranks + 1];
- Presource **tail = new Presource *[nranks + 1];
- int i;
- for (i = 0; i < nranks + 1; i++) {
- head[i] = 0;
- tail[i] = &head[i];
- }
- for (r = resource_list; r; r = r->next) {
- i = r->rank < 0 ? 0 : r->rank + 1;
- *tail[i] = r;
- tail[i] = &(*tail[i])->next;
- }
- resource_list = 0;
- for (i = 0; i < nranks + 1; i++)
- if (head[i]) {
- *tail[i] = resource_list;
- resource_list = head[i];
- }
- a_delete head;
- a_delete tail;
- // check it
- for (r = resource_list; r; r = r->next)
- if (r->next)
- assert(r->rank >= r->next->rank);
- for (r = resource_list; r; r = r->next)
- if (r->type == RESOURCE_FONT && r->rank >= 0)
- supply_resource(r, -1, out.get_file());
- }
-}
-
-void resource_manager::print_resources_comment(unsigned flag, FILE *outfp)
-{
- int continued = 0;
- for (resource *r = resource_list; r; r = r->next)
- if (r->flags & flag) {
- if (continued)
- fputs("%%+ ", outfp);
- else {
- fputs(flag == resource::NEEDED
- ? "%%DocumentNeededResources: "
- : "%%DocumentSuppliedResources: ",
- outfp);
- continued = 1;
- }
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
-}
-
-void resource_manager::print_header_comments(ps_output &out)
-{
- for (resource *r = resource_list; r; r = r->next)
- if (r->type == RESOURCE_FONT && (r->flags & resource::FONT_NEEDED))
- supply_resource(r, 0, 0);
- print_resources_comment(resource::NEEDED, out.get_file());
- print_resources_comment(resource::SUPPLIED, out.get_file());
- print_language_level_comment(out.get_file());
- print_extensions_comment(out.get_file());
-}
-
-void resource_manager::output_prolog(ps_output &out)
-{
- FILE *outfp = out.get_file();
- out.end_line();
- char *path;
- if (!getenv("GROPS_PROLOGUE")) {
- string e = "GROPS_PROLOGUE";
- e += '=';
- e += GROPS_PROLOGUE;
- e += '\0';
- if (putenv(strsave(e.contents())))
- fatal("putenv failed");
- }
- char *prologue = getenv("GROPS_PROLOGUE");
- FILE *fp = font::open_file(prologue, &path);
- if (!fp)
- fatal("can't find `%1'", prologue);
- fputs("%%BeginResource: ", outfp);
- procset_resource->print_type_and_name(outfp);
- putc('\n', outfp);
- process_file(-1, fp, path, outfp);
- fclose(fp);
- a_delete path;
- fputs("%%EndResource\n", outfp);
-}
-
-void resource_manager::import_file(const char *filename, ps_output &out)
-{
- out.end_line();
- string name(filename);
- resource *r = lookup_resource(RESOURCE_FILE, name);
- supply_resource(r, -1, out.get_file(), 1);
-}
-
-void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
- int is_document)
-{
- if (r->flags & resource::BUSY) {
- r->name += '\0';
- fatal("loop detected in dependency graph for %1 `%2'",
- resource_table[r->type],
- r->name.contents());
- }
- r->flags |= resource::BUSY;
- if (rank > r->rank)
- r->rank = rank;
- char *path = 0; // pacify compiler
- FILE *fp = 0;
- if (r->filename != 0) {
- if (r->type == RESOURCE_FONT) {
- fp = font::open_file(r->filename, &path);
- if (!fp) {
- error("can't find `%1'", r->filename);
- a_delete r->filename;
- r->filename = 0;
- }
- }
- else {
- errno = 0;
- fp = include_search_path.open_file_cautious(r->filename);
- if (!fp) {
- error("can't open `%1': %2", r->filename, strerror(errno));
- a_delete r->filename;
- r->filename = 0;
- }
- else
- path = r->filename;
- }
- }
- if (fp) {
- if (outfp) {
- if (r->type == RESOURCE_FILE && is_document) {
- fputs("%%BeginDocument: ", outfp);
- print_ps_string(r->name, outfp);
- putc('\n', outfp);
- }
- else {
- fputs("%%BeginResource: ", outfp);
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
- }
- process_file(rank, fp, path, outfp);
- fclose(fp);
- if (r->type == RESOURCE_FONT)
- a_delete path;
- if (outfp) {
- if (r->type == RESOURCE_FILE && is_document)
- fputs("%%EndDocument\n", outfp);
- else
- fputs("%%EndResource\n", outfp);
- }
- r->flags |= resource::SUPPLIED;
- }
- else {
- if (outfp) {
- if (r->type == RESOURCE_FILE && is_document) {
- fputs("%%IncludeDocument: ", outfp);
- print_ps_string(r->name, outfp);
- putc('\n', outfp);
- }
- else {
- fputs("%%IncludeResource: ", outfp);
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
- }
- r->flags |= resource::NEEDED;
- }
- r->flags &= ~resource::BUSY;
-}
-
-#define PS_MAGIC "%!PS-Adobe-"
-
-static int ps_get_line(string &buf, FILE *fp)
-{
- buf.clear();
- int c = getc(fp);
- if (c == EOF)
- return 0;
- current_lineno++;
- while (c != '\r' && c != '\n' && c != EOF) {
- if (!valid_input_table[c])
- error("invalid input character code %1", int(c));
- buf += c;
- c = getc(fp);
- }
- buf += '\n';
- buf += '\0';
- if (c == '\r') {
- c = getc(fp);
- if (c != EOF && c != '\n')
- ungetc(c, fp);
- }
- return 1;
-}
-
-static int read_text_arg(const char **pp, string &res)
-{
- res.clear();
- while (white_space(**pp))
- *pp += 1;
- if (**pp == '\0') {
- error("missing argument");
- return 0;
- }
- if (**pp != '(') {
- for (; **pp != '\0' && !white_space(**pp); *pp += 1)
- res += **pp;
- return 1;
- }
- *pp += 1;
- res.clear();
- int level = 0;
- for (;;) {
- if (**pp == '\0' || **pp == '\r' || **pp == '\n') {
- error("missing ')'");
- return 0;
- }
- if (**pp == ')') {
- if (level == 0) {
- *pp += 1;
- break;
- }
- res += **pp;
- level--;
- }
- else if (**pp == '(') {
- level++;
- res += **pp;
- }
- else if (**pp == '\\') {
- *pp += 1;
- switch (**pp) {
- case 'n':
- res += '\n';
- break;
- case 'r':
- res += '\n';
- break;
- case 't':
- res += '\t';
- break;
- case 'b':
- res += '\b';
- break;
- case 'f':
- res += '\f';
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- {
- int val = **pp - '0';
- if ((*pp)[1] >= '0' && (*pp)[1] <= '7') {
- *pp += 1;
- val = val*8 + (**pp - '0');
- if ((*pp)[1] >= '0' && (*pp)[1] <= '7') {
- *pp += 1;
- val = val*8 + (**pp - '0');
- }
- }
- }
- break;
- default:
- res += **pp;
- break;
- }
- }
- else
- res += **pp;
- *pp += 1;
- }
- return 1;
-}
-
-resource *resource_manager::read_file_arg(const char **ptr)
-{
- string arg;
- if (!read_text_arg(ptr, arg))
- return 0;
- return lookup_resource(RESOURCE_FILE, arg);
-}
-
-resource *resource_manager::read_font_arg(const char **ptr)
-{
- string arg;
- if (!read_text_arg(ptr, arg))
- return 0;
- return lookup_resource(RESOURCE_FONT, arg);
-}
-
-resource *resource_manager::read_procset_arg(const char **ptr)
-{
- string arg;
- if (!read_text_arg(ptr, arg))
- return 0;
- string version;
- if (!read_text_arg(ptr, version))
- return 0;
- unsigned revision;
- if (!read_uint_arg(ptr, &revision))
- return 0;
- return lookup_resource(RESOURCE_PROCSET, arg, version, revision);
-}
-
-resource *resource_manager::read_resource_arg(const char **ptr)
-{
- while (white_space(**ptr))
- *ptr += 1;
- const char *name = *ptr;
- while (**ptr != '\0' && !white_space(**ptr))
- *ptr += 1;
- if (name == *ptr) {
- error("missing resource type");
- return 0;
- }
- int ri;
- for (ri = 0; ri < NRESOURCES; ri++)
- if (strlen(resource_table[ri]) == size_t(*ptr - name)
- && memcmp(resource_table[ri], name, *ptr - name) == 0)
- break;
- if (ri >= NRESOURCES) {
- error("unknown resource type");
- return 0;
- }
- if (ri == RESOURCE_PROCSET)
- return read_procset_arg(ptr);
- string arg;
- if (!read_text_arg(ptr, arg))
- return 0;
- return lookup_resource(resource_type(ri), arg);
-}
-
-static const char *matches_comment(string &buf, const char *comment)
-{
- if ((size_t)buf.length() < strlen(comment) + 3)
- return 0;
- if (buf[0] != '%' || buf[1] != '%')
- return 0;
- const char *bufp = buf.contents() + 2;
- for (; *comment; comment++, bufp++)
- if (*bufp != *comment)
- return 0;
- if (comment[-1] == ':')
- return bufp;
- if (*bufp == '\0' || white_space(*bufp))
- return bufp;
- return 0;
-}
-
-// Return 1 if the line should be copied out.
-
-int resource_manager::do_begin_resource(const char *ptr, int, FILE *,
- FILE *)
-{
- resource *r = read_resource_arg(&ptr);
- if (r)
- r->flags |= resource::SUPPLIED;
- return 1;
-}
-
-int resource_manager::do_include_resource(const char *ptr, int rank, FILE *,
- FILE *outfp)
-{
- resource *r = read_resource_arg(&ptr);
- if (r) {
- if (r->type == RESOURCE_FONT) {
- if (rank >= 0)
- supply_resource(r, rank + 1, outfp);
- else
- r->flags |= resource::FONT_NEEDED;
- }
- else
- supply_resource(r, rank, outfp);
- }
- return 0;
-}
-
-int resource_manager::do_begin_document(const char *ptr, int, FILE *,
- FILE *)
-{
- resource *r = read_file_arg(&ptr);
- if (r)
- r->flags |= resource::SUPPLIED;
- return 1;
-}
-
-int resource_manager::do_include_document(const char *ptr, int rank, FILE *,
- FILE *outfp)
-{
- resource *r = read_file_arg(&ptr);
- if (r)
- supply_resource(r, rank, outfp, 1);
- return 0;
-}
-
-int resource_manager::do_begin_procset(const char *ptr, int, FILE *,
- FILE *outfp)
-{
- resource *r = read_procset_arg(&ptr);
- if (r) {
- r->flags |= resource::SUPPLIED;
- if (outfp) {
- fputs("%%BeginResource: ", outfp);
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
- }
- return 0;
-}
-
-int resource_manager::do_include_procset(const char *ptr, int rank, FILE *,
- FILE *outfp)
-{
- resource *r = read_procset_arg(&ptr);
- if (r)
- supply_resource(r, rank, outfp);
- return 0;
-}
-
-int resource_manager::do_begin_file(const char *ptr, int, FILE *,
- FILE *outfp)
-{
- resource *r = read_file_arg(&ptr);
- if (r) {
- r->flags |= resource::SUPPLIED;
- if (outfp) {
- fputs("%%BeginResource: ", outfp);
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
- }
- return 0;
-}
-
-int resource_manager::do_include_file(const char *ptr, int rank, FILE *,
- FILE *outfp)
-{
- resource *r = read_file_arg(&ptr);
- if (r)
- supply_resource(r, rank, outfp);
- return 0;
-}
-
-int resource_manager::do_begin_font(const char *ptr, int, FILE *,
- FILE *outfp)
-{
- resource *r = read_font_arg(&ptr);
- if (r) {
- r->flags |= resource::SUPPLIED;
- if (outfp) {
- fputs("%%BeginResource: ", outfp);
- r->print_type_and_name(outfp);
- putc('\n', outfp);
- }
- }
- return 0;
-}
-
-int resource_manager::do_include_font(const char *ptr, int rank, FILE *,
- FILE *outfp)
-{
- resource *r = read_font_arg(&ptr);
- if (r) {
- if (rank >= 0)
- supply_resource(r, rank + 1, outfp);
- else
- r->flags |= resource::FONT_NEEDED;
- }
- return 0;
-}
-
-int resource_manager::change_to_end_resource(const char *, int, FILE *,
- FILE *outfp)
-{
- if (outfp)
- fputs("%%EndResource\n", outfp);
- return 0;
-}
-
-int resource_manager::do_begin_preview(const char *, int, FILE *fp, FILE *)
-{
- string buf;
- do {
- if (!ps_get_line(buf, fp)) {
- error("end of file in preview section");
- break;
- }
- } while (!matches_comment(buf, "EndPreview"));
- return 0;
-}
-
-int read_one_of(const char **ptr, const char **s, int n)
-{
- while (white_space(**ptr))
- *ptr += 1;
- if (**ptr == '\0')
- return -1;
- const char *start = *ptr;
- do {
- ++(*ptr);
- } while (**ptr != '\0' && !white_space(**ptr));
- for (int i = 0; i < n; i++)
- if (strlen(s[i]) == size_t(*ptr - start)
- && memcmp(s[i], start, *ptr - start) == 0)
- return i;
- return -1;
-}
-
-void skip_possible_newline(FILE *fp, FILE *outfp)
-{
- int c = getc(fp);
- if (c == '\r') {
- current_lineno++;
- if (outfp)
- putc(c, outfp);
- int cc = getc(fp);
- if (cc != '\n') {
- if (cc != EOF)
- ungetc(cc, fp);
- }
- else {
- if (outfp)
- putc(cc, outfp);
- }
- }
- else if (c == '\n') {
- current_lineno++;
- if (outfp)
- putc(c, outfp);
- }
- else if (c != EOF)
- ungetc(c, fp);
-}
-
-int resource_manager::do_begin_data(const char *ptr, int, FILE *fp,
- FILE *outfp)
-{
- while (white_space(*ptr))
- ptr++;
- const char *start = ptr;
- unsigned numberof;
- if (!read_uint_arg(&ptr, &numberof))
- return 0;
- static const char *types[] = { "Binary", "Hex", "ASCII" };
- const int Binary = 0;
- int type = 0;
- static const char *units[] = { "Bytes", "Lines" };
- const int Bytes = 0;
- int unit = Bytes;
- while (white_space(*ptr))
- ptr++;
- if (*ptr != '\0') {
- type = read_one_of(&ptr, types, 3);
- if (type < 0) {
- error("bad data type");
- return 0;
- }
- while (white_space(*ptr))
- ptr++;
- if (*ptr != '\0') {
- unit = read_one_of(&ptr, units, 2);
- if (unit < 0) {
- error("expected `Bytes' or `Lines'");
- return 0;
- }
- }
- }
- if (type != Binary)
- return 1;
- if (outfp) {
- fputs("%%BeginData: ", outfp);
- fputs(start, outfp);
- }
- if (numberof > 0) {
- unsigned bytecount = 0;
- unsigned linecount = 0;
- do {
- int c = getc(fp);
- if (c == EOF) {
- error("end of file within data section");
- return 0;
- }
- if (outfp)
- putc(c, outfp);
- bytecount++;
- if (c == '\r') {
- int cc = getc(fp);
- if (cc != '\n') {
- linecount++;
- current_lineno++;
- }
- if (cc != EOF)
- ungetc(c, fp);
- }
- else if (c == '\n') {
- linecount++;
- current_lineno++;
- }
- } while ((unit == Bytes ? bytecount : linecount) < numberof);
- }
- skip_possible_newline(fp, outfp);
- string buf;
- if (!ps_get_line(buf, fp)) {
- error("missing %%%%EndData line");
- return 0;
- }
- if (!matches_comment(buf, "EndData"))
- error("bad %%%%EndData line");
- if (outfp)
- fputs(buf.contents(), outfp);
- return 0;
-}
-
-int resource_manager::do_begin_binary(const char *ptr, int, FILE *fp,
- FILE *outfp)
-{
- if (!outfp)
- return 0;
- unsigned count;
- if (!read_uint_arg(&ptr, &count))
- return 0;
- if (outfp)
- fprintf(outfp, "%%%%BeginData: %u Binary Bytes\n", count);
- while (count != 0) {
- int c = getc(fp);
- if (c == EOF) {
- error("end of file within binary section");
- return 0;
- }
- if (outfp)
- putc(c, outfp);
- --count;
- if (c == '\r') {
- int cc = getc(fp);
- if (cc != '\n')
- current_lineno++;
- if (cc != EOF)
- ungetc(cc, fp);
- }
- else if (c == '\n')
- current_lineno++;
- }
- skip_possible_newline(fp, outfp);
- string buf;
- if (!ps_get_line(buf, fp)) {
- error("missing %%%%EndBinary line");
- return 0;
- }
- if (!matches_comment(buf, "EndBinary")) {
- error("bad %%%%EndBinary line");
- if (outfp)
- fputs(buf.contents(), outfp);
- }
- else if (outfp)
- fputs("%%EndData\n", outfp);
- return 0;
-}
-
-static unsigned parse_extensions(const char *ptr)
-{
- unsigned flags = 0;
- for (;;) {
- while (white_space(*ptr))
- ptr++;
- if (*ptr == '\0')
- break;
- const char *name = ptr;
- do {
- ++ptr;
- } while (*ptr != '\0' && !white_space(*ptr));
- int i;
- for (i = 0; i < NEXTENSIONS; i++)
- if (strlen(extension_table[i]) == size_t(ptr - name)
- && memcmp(extension_table[i], name, ptr - name) == 0) {
- flags |= (1 << i);
- break;
- }
- if (i >= NEXTENSIONS) {
- string s(name, ptr - name);
- s += '\0';
- error("unknown extension `%1'", s.contents());
- }
- }
- return flags;
-}
-
-// XXX if it has not been surrounded with {Begin,End}Document need to strip
-// out Page: Trailer {Begin,End}Prolog {Begin,End}Setup sections.
-
-// XXX Perhaps the decision whether to use BeginDocument or
-// BeginResource: file should be postponed till we have seen
-// the first line of the file.
-
-void resource_manager::process_file(int rank, FILE *fp, const char *filename,
- FILE *outfp)
-{
- // If none of these comments appear in the header section, and we are
- // just analyzing the file (ie outfp is 0), then we can return immediately.
- static const char *header_comment_table[] = {
- "DocumentNeededResources:",
- "DocumentSuppliedResources:",
- "DocumentNeededFonts:",
- "DocumentSuppliedFonts:",
- "DocumentNeededProcSets:",
- "DocumentSuppliedProcSets:",
- "DocumentNeededFiles:",
- "DocumentSuppliedFiles:",
- };
-
- const int NHEADER_COMMENTS = sizeof(header_comment_table)
- / sizeof(header_comment_table[0]);
- struct comment_info {
- const char *name;
- int (resource_manager::*proc)(const char *, int, FILE *, FILE *);
- };
-
- static comment_info comment_table[] = {
- { "BeginResource:", &resource_manager::do_begin_resource },
- { "IncludeResource:", &resource_manager::do_include_resource },
- { "BeginDocument:", &resource_manager::do_begin_document },
- { "IncludeDocument:", &resource_manager::do_include_document },
- { "BeginProcSet:", &resource_manager::do_begin_procset },
- { "IncludeProcSet:", &resource_manager::do_include_procset },
- { "BeginFont:", &resource_manager::do_begin_font },
- { "IncludeFont:", &resource_manager::do_include_font },
- { "BeginFile:", &resource_manager::do_begin_file },
- { "IncludeFile:", &resource_manager::do_include_file },
- { "EndProcSet", &resource_manager::change_to_end_resource },
- { "EndFont", &resource_manager::change_to_end_resource },
- { "EndFile", &resource_manager::change_to_end_resource },
- { "BeginPreview:", &resource_manager::do_begin_preview },
- { "BeginData:", &resource_manager::do_begin_data },
- { "BeginBinary:", &resource_manager::do_begin_binary },
- };
-
- const int NCOMMENTS = sizeof(comment_table)/sizeof(comment_table[0]);
- string buf;
- int saved_lineno = current_lineno;
- const char *saved_filename = current_filename;
- current_filename = filename;
- current_lineno = 0;
- if (!ps_get_line(buf, fp)) {
- current_filename = saved_filename;
- current_lineno = saved_lineno;
- return;
- }
- if ((size_t)buf.length() < sizeof(PS_MAGIC)
- || memcmp(buf.contents(), PS_MAGIC, sizeof(PS_MAGIC) - 1) != 0) {
- if (outfp) {
- do {
- if (!(broken_flags & STRIP_PERCENT_BANG)
- || buf[0] != '%' || buf[1] != '!')
- fputs(buf.contents(), outfp);
- } while (ps_get_line(buf, fp));
- }
- }
- else {
- if (!(broken_flags & STRIP_PERCENT_BANG) && outfp)
- fputs(buf.contents(), outfp);
- int in_header = 1;
- int interesting = 0;
- int had_extensions_comment = 0;
- int had_language_level_comment = 0;
- for (;;) {
- if (!ps_get_line(buf, fp))
- break;
- int copy_this_line = 1;
- if (buf[0] == '%') {
- if (buf[1] == '%') {
- const char *ptr;
- int i;
- for (i = 0; i < NCOMMENTS; i++)
- if ((ptr = matches_comment(buf, comment_table[i].name))) {
- copy_this_line
- = (this->*(comment_table[i].proc))(ptr, rank, fp, outfp);
- break;
- }
- if (i >= NCOMMENTS && in_header) {
- if ((ptr = matches_comment(buf, "EndComments")))
- in_header = 0;
- else if (!had_extensions_comment
- && (ptr = matches_comment(buf, "Extensions:"))) {
- extensions |= parse_extensions(ptr);
- // XXX handle possibility that next line is %%+
- had_extensions_comment = 1;
- }
- else if (!had_language_level_comment
- && (ptr = matches_comment(buf, "LanguageLevel:"))) {
- unsigned ll;
- if (read_uint_arg(&ptr, &ll) && ll > language_level)
- language_level = ll;
- had_language_level_comment = 1;
- }
- else {
- for (i = 0; i < NHEADER_COMMENTS; i++)
- if (matches_comment(buf, header_comment_table[i])) {
- interesting = 1;
- break;
- }
- }
- }
- if ((broken_flags & STRIP_STRUCTURE_COMMENTS)
- && (matches_comment(buf, "EndProlog")
- || matches_comment(buf, "Page:")
- || matches_comment(buf, "Trailer")))
- copy_this_line = 0;
- }
- else if (buf[1] == '!') {
- if (broken_flags & STRIP_PERCENT_BANG)
- copy_this_line = 0;
- }
- }
- else
- in_header = 0;
- if (!outfp && !in_header && !interesting)
- break;
- if (copy_this_line && outfp)
- fputs(buf.contents(), outfp);
- }
- }
- current_filename = saved_filename;
- current_lineno = saved_lineno;
-}
-
-void resource_manager::read_download_file()
-{
- char *path = 0;
- FILE *fp = font::open_file("download", &path);
- if (!fp)
- fatal("can't find `download'");
- char buf[512];
- int lineno = 0;
- while (fgets(buf, sizeof(buf), fp)) {
- lineno++;
- char *p = strtok(buf, " \t\r\n");
- if (p == 0 || *p == '#')
- continue;
- char *q = strtok(0, " \t\r\n");
- if (!q)
- fatal_with_file_and_line(path, lineno, "missing filename");
- lookup_font(p)->filename = strsave(q);
- }
- a_delete path;
- fclose(fp);
-}
-
-// XXX Can we share some code with ps_output::put_string()?
-
-static void print_ps_string(const string &s, FILE *outfp)
-{
- int len = s.length();
- const char *str = s.contents();
- int funny = 0;
- if (str[0] == '(')
- funny = 1;
- else {
- for (int i = 0; i < len; i++)
- if (str[i] <= 040 || str[i] > 0176) {
- funny = 1;
- break;
- }
- }
- if (!funny) {
- put_string(s, outfp);
- return;
- }
- int level = 0;
- int i;
- for (i = 0; i < len; i++)
- if (str[i] == '(')
- level++;
- else if (str[i] == ')' && --level < 0)
- break;
- putc('(', outfp);
- for (i = 0; i < len; i++)
- switch (str[i]) {
- case '(':
- case ')':
- if (level != 0)
- putc('\\', outfp);
- putc(str[i], outfp);
- break;
- case '\\':
- fputs("\\\\", outfp);
- break;
- case '\n':
- fputs("\\n", outfp);
- break;
- case '\r':
- fputs("\\r", outfp);
- break;
- case '\t':
- fputs("\\t", outfp);
- break;
- case '\b':
- fputs("\\b", outfp);
- break;
- case '\f':
- fputs("\\f", outfp);
- break;
- default:
- if (str[i] < 040 || str[i] > 0176)
- fprintf(outfp, "\\%03o", str[i] & 0377);
- else
- putc(str[i], outfp);
- break;
- }
- putc(')', outfp);
-}
-
-void resource_manager::print_extensions_comment(FILE *outfp)
-{
- if (extensions) {
- fputs("%%Extensions:", outfp);
- for (int i = 0; i < NEXTENSIONS; i++)
- if (extensions & (1 << i)) {
- putc(' ', outfp);
- fputs(extension_table[i], outfp);
- }
- putc('\n', outfp);
- }
-}
-
-void resource_manager::print_language_level_comment(FILE *outfp)
-{
- if (language_level)
- fprintf(outfp, "%%%%LanguageLevel: %u\n", language_level);
-}
diff --git a/contrib/groff/src/devices/grotty/Makefile.sub b/contrib/groff/src/devices/grotty/Makefile.sub
deleted file mode 100644
index 2ec77a54362a..000000000000
--- a/contrib/groff/src/devices/grotty/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grotty$(EXEEXT)
-MAN1=grotty.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tty.$(OBJEXT)
-CCSRCS=$(srcdir)/tty.cpp
diff --git a/contrib/groff/src/devices/grotty/TODO b/contrib/groff/src/devices/grotty/TODO
deleted file mode 100644
index 3f23dc35d56b..000000000000
--- a/contrib/groff/src/devices/grotty/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-Document font and device description file usage of grotty.
-
-With -h avoid using a tab when a single space will do.
diff --git a/contrib/groff/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man
deleted file mode 100644
index d626376a2859..000000000000
--- a/contrib/groff/src/devices/grotty/grotty.man
+++ /dev/null
@@ -1,438 +0,0 @@
-.ig
-$FreeBSD$
-Copyright (C) 1989-2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grotty_C \n[.C]
-.cp 0
-.
-.TH GROTTY @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grotty \- groff driver for typewriter-like devices
-.
-.
-.SH SYNOPSIS
-.B grotty
-[
-.B \-bBcdfhioruUv
-] [
-.BI \-F dir
-] [
-.IR files \|.\|.\|.\&
-]
-.PP
-It is possible to have whitespace between the
-.B \-F
-option and its parameter.
-.
-.
-.SH DESCRIPTION
-.B grotty
-translates the output of GNU
-.B troff
-into a form suitable for typewriter-like devices.
-Normally
-.B grotty
-should be invoked by using the
-.B groff
-command
-with a
-.BR \-Tascii ,
-.BR \-Tlatin1 ,
-.B \-Tkoi8-r
-or
-.B \-Tutf8
-option on ASCII based systems, and with
-.B \-Tcp1047
-and
-.B \-Tutf8
-on EBCDIC based hosts.
-If no files are given,
-.B grotty
-will read the standard input.
-A filename of
-.B \-
-will also cause
-.B grotty
-to read the standard input.
-Output is written to the standard output.
-.LP
-By default,
-.B grotty
-emits SGR escape sequences (from ISO 6429, also called ANSI color escapes)
-to change text attributes (bold, italic, colors).
-This makes it possible to have eight different \M[green]background\M[]
-and \m[red]foreground\m[] colors; additionally, bold and italic
-attributes can be used \f[BI]at the same time\f[] (by using the BI font).
-.LP
-The following colors are defined in
-.BR tty.tmac :
-black, white, red, green, blue, yellow, magenta, cyan.
-Unknown colors are mapped to the default color (which is dependent on the
-settings of the terminal; in most cases, this is black for the foreground
-and white for the background).
-.LP
-Use the
-.B \-c
-switch to revert to the old behaviour, printing a bold character
-.I c
-with the sequence
-.RI ` c
-.SM BACKSPACE
-.IR c '
-and an italic character
-.I c
-by the sequence
-.RB ` _
-.SM BACKSPACE
-.IR c '.
-At the same time, color output is disabled.
-The same effect can be achieved by setting either the
-.B GROFF_NO_SGR
-environment variable or using the `sgr' X command (see below).
-.LP
-For SGR support, it is necessary to use the
-.B \-R
-option of
-.BR less (1)
-to disable the interpretation of
-.BR grotty 's
-old output format.
-Consequently, all programs which use
-.B less
-as the pager program have to pass this option to it.
-For
-.BR man (1)
-in particular, either add
-.B \-R
-to the
-.B $PAGER
-environment variable, e.g.\&
-.RS
-.LP
-.B PAGER="/usr/bin/less -R"
-.br
-.B export PAGER
-.RE
-.LP
-or use the
-.B \-P
-option of
-.B man
-to set the pager executable and its options, or modify the configuration
-file of
-.B man
-in a similar fashion.
-.LP
-.BR grotty 's
-old output format can be displayed on a terminal
-by piping through
-.BR ul (1).
-Pagers such as
-.BR more (1)
-or
-.BR less (1)
-are also able to display these sequences.
-Use either
-.B \-B
-or
-.B \-U
-when piping into
-.BR less (1);
-use
-.B \-b
-when piping into
-.BR more (1).
-There is no need to filter the output through
-.BR col (1)
-since
-.B grotty
-never outputs reverse line feeds.
-.LP
-The font description file may contain a command
-.IP
-.BI internalname\ n
-.LP
-where
-.I n
-is a decimal integer.
-If the 01 bit in
-.I n
-is set,
-then the font will be treated as an italic font;
-if the 02 bit is set,
-then it will be treated as a bold font.
-The code field in the font description field gives the
-code which will be used to output the character.
-This code can also be used in the
-.B \[rs]N
-escape sequence in
-.BR troff .
-.
-.
-.SH OPTIONS
-.TP
-.B \-b
-Suppress the use of overstriking for bold characters.
-Ignored if
-.B \-c
-isn't used.
-.
-.TP
-.B \-B
-Use only overstriking for bold-italic characters.
-Ignored if
-.B \-c
-isn't used.
-.
-.TP
-.B \-c
-Use
-.BR grotty 's
-old output format (see above).
-This also disables color output.
-.
-.TP
-.B \-d
-Ignore all
-.B \[rs]D
-commands.
-Without this
-.B grotty
-will render
-.B \[rs]D'l\|.\|.\|.\&'
-commands that have at least one zero argument
-(and so are either horizontal or vertical)
-using
-.BR \- ,
-.BR | ,
-and
-.B +
-characters.
-.
-.TP
-.B \-f
-Use form feeds in the output.
-A form feed will be output at the end of each page that has no output
-on its last line.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR ascii ,
-.BR latin1 ,
-.BR koi8-r ,
-.BR utf8 ,
-or
-.BR cp1047 .
-.TP
-.B \-h
-Use horizontal tabs in the output.
-Tabs are assumed to be set every 8 columns.
-.
-.TP
-.B \-i
-Use escape sequences to set the italic text attribute instead of the
-underline attribute for italic fonts (`I' and `BI').
-Note that most terminals (including xterm) don't support this.
-Ignored if
-.B \-c
-is active.
-.
-.TP
-.B \-o
-Suppress overstriking (other than for bold or underlined characters in
-case the old output format has been activated with
-.BR \-c ).
-.
-.TP
-.B \-r
-Use escape sequences to set the reverse text attribute instead of the
-underline attribute for italic fonts (`I' and `BI').
-Ignored if
-.B \-c
-is active.
-.
-.TP
-.B \-u
-Suppress the use of underlining for italic characters.
-Ignored if
-.B \-c
-isn't used.
-.
-.TP
-.B \-U
-Use only underlining for bold-italic characters.
-Ignored if
-.B \-c
-isn't used.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH USAGE
-.B grotty
-understands a single X command produced using the
-.B \[rs]X
-escape sequence.
-.TP
-.BI \[rs]X'tty:\ sgr\ n '
-If
-.I n
-is non-zero or missing, enable SGR output (this is the default), otherwise
-use the old drawing scheme for bold and underline.
-.
-.
-.SH ENVIRONMENT
-.TP
-.B GROFF_NO_SGR
-If set, the old drawing scheme for bold and underline (using the
-backspace character) is active.
-Colors are disabled.
-.
-.
-.SH FILES
-.TP
-.B @FONTDIR@/devascii/DESC
-Device description file for
-.B ascii
-device.
-.
-.TP
-.BI @FONTDIR@/devascii/ F
-Font description file for font
-.I F
-of
-.B ascii
-device.
-.TP
-.B @FONTDIR@/devkoi8-r/DESC
-Device description file for
-.B koi8-r
-device.
-.TP
-.BI @FONTDIR@/devkoi8-r/ F
-Font description file for font
-.I F
-of
-.B koi8-r
-device.
-.
-.TP
-.B @FONTDIR@/devlatin1/DESC
-Device description file for
-.B latin1
-device.
-.
-.TP
-.BI @FONTDIR@/devlatin1/ F
-Font description file for font
-.I F
-of
-.B latin1
-device.
-.
-.TP
-.B @FONTDIR@/devutf8/DESC
-Device description file for
-.B utf8
-device.
-.
-.TP
-.BI @FONTDIR@/devutf8/ F
-Font description file for font
-.I F
-of
-.B utf8
-device.
-.
-.TP
-.B @FONTDIR@/devcp1047/DESC
-Device description file for
-.B cp1047
-device.
-.
-.TP
-.BI @FONTDIR@/devcp1047/ F
-Font description file for font
-.I F
-of
-.B cp1047
-device.
-.
-.TP
-.B @MACRODIR@/tty.tmac
-Macros for use with
-.BR grotty .
-.
-.TP
-.B @MACRODIR@/tty-char.tmac
-Additional klugdey character definitions for use with
-.BR grotty .
-.LP
-Note that on EBCDIC hosts, only files for the
-.B cp1047
-device will be installed.
-.
-.
-.SH BUGS
-.LP
-.B grotty
-is intended only for simple documents.
-.LP
-There is no support for fractional horizontal or vertical motions.
-.LP
-There is no support for
-.B \[rs]D
-commands
-other than horizontal and vertical lines.
-.LP
-Characters above the first line (ie with a vertical position of\~0)
-cannot be printed.
-.LP
-Color handling is different compared to
-.BR grops (@MAN1EXT@).
-.B \[rs]M
-doesn't set the fill color for closed graphic objects (which
-.B grotty
-doesn't support anyway) but changes the background color of the character
-cell, affecting all subsequent operations.
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
-.BR ul (1),
-.BR more (1),
-.BR man (1),
-.BR less (1)
-.
-.cp \n[grotty_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/grotty/tty.cpp b/contrib/groff/src/devices/grotty/tty.cpp
deleted file mode 100644
index a959461f922a..000000000000
--- a/contrib/groff/src/devices/grotty/tty.cpp
+++ /dev/null
@@ -1,907 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "driver.h"
-#include "device.h"
-#include "ptable.h"
-
-typedef signed char schar;
-
-declare_ptable(schar)
-implement_ptable(schar)
-
-extern "C" const char *Version_string;
-
-#define putstring(s) fputs(s, stdout)
-
-#ifndef SHRT_MIN
-#define SHRT_MIN (-32768)
-#endif
-
-#ifndef SHRT_MAX
-#define SHRT_MAX 32767
-#endif
-
-#define TAB_WIDTH 8
-
-static int horizontal_tab_flag = 0;
-static int form_feed_flag = 0;
-static int bold_flag_option = 1;
-static int bold_flag;
-static int underline_flag_option = 1;
-static int underline_flag;
-static int overstrike_flag = 1;
-static int draw_flag = 1;
-static int italic_flag_option = 0;
-static int italic_flag;
-static int reverse_flag_option = 0;
-static int reverse_flag;
-static int old_drawing_scheme = 0;
-
-static void update_options();
-static void usage(FILE *stream);
-
-static int hline_char = '-';
-static int vline_char = '|';
-
-enum {
- UNDERLINE_MODE = 0x01,
- BOLD_MODE = 0x02,
- VDRAW_MODE = 0x04,
- HDRAW_MODE = 0x08,
- CU_MODE = 0x10,
- COLOR_CHANGE = 0x20,
- START_LINE = 0x40,
- END_LINE = 0x80
-};
-
-// Mode to use for bold-underlining.
-static unsigned char bold_underline_mode_option = BOLD_MODE|UNDERLINE_MODE;
-static unsigned char bold_underline_mode;
-
-#ifndef IS_EBCDIC_HOST
-#define CSI "\033["
-#else
-#define CSI "\047["
-#endif
-
-// SGR handling (ISO 6429)
-#define SGR_BOLD CSI "1m"
-#define SGR_NO_BOLD CSI "22m"
-#define SGR_ITALIC CSI "3m"
-#define SGR_NO_ITALIC CSI "23m"
-#define SGR_UNDERLINE CSI "4m"
-#define SGR_NO_UNDERLINE CSI "24m"
-#define SGR_REVERSE CSI "7m"
-#define SGR_NO_REVERSE CSI "27m"
-// many terminals can't handle `CSI 39 m' and `CSI 49 m' to reset
-// the foreground and background color, respectively; we thus use
-// `CSI 0 m' exclusively
-#define SGR_DEFAULT CSI "0m"
-
-#define DEFAULT_COLOR_IDX -1
-
-class tty_font : public font {
- tty_font(const char *);
- unsigned char mode;
-public:
- ~tty_font();
- unsigned char get_mode() { return mode; }
-#if 0
- void handle_x_command(int argc, const char **argv);
-#endif
- static tty_font *load_tty_font(const char *);
-};
-
-tty_font *tty_font::load_tty_font(const char *s)
-{
- tty_font *f = new tty_font(s);
- if (!f->load()) {
- delete f;
- return 0;
- }
- const char *num = f->get_internal_name();
- long n;
- if (num != 0 && (n = strtol(num, 0, 0)) != 0)
- f->mode = (unsigned char)(n & (BOLD_MODE|UNDERLINE_MODE));
- if (!underline_flag)
- f->mode &= ~UNDERLINE_MODE;
- if (!bold_flag)
- f->mode &= ~BOLD_MODE;
- if ((f->mode & (BOLD_MODE|UNDERLINE_MODE)) == (BOLD_MODE|UNDERLINE_MODE))
- f->mode = (unsigned char)((f->mode & ~(BOLD_MODE|UNDERLINE_MODE))
- | bold_underline_mode);
- return f;
-}
-
-tty_font::tty_font(const char *nm)
-: font(nm), mode(0)
-{
-}
-
-tty_font::~tty_font()
-{
-}
-
-#if 0
-void tty_font::handle_x_command(int argc, const char **argv)
-{
- if (argc >= 1 && strcmp(argv[0], "bold") == 0)
- mode |= BOLD_MODE;
- else if (argc >= 1 && strcmp(argv[0], "underline") == 0)
- mode |= UNDERLINE_MODE;
-}
-#endif
-
-class glyph {
- static glyph *free_list;
-public:
- glyph *next;
- int w;
- int hpos;
- unsigned int code;
- unsigned char mode;
- schar back_color_idx;
- schar fore_color_idx;
- void *operator new(size_t);
- void operator delete(void *);
- inline int draw_mode() { return mode & (VDRAW_MODE|HDRAW_MODE); }
- inline int order() {
- return mode & (VDRAW_MODE|HDRAW_MODE|CU_MODE|COLOR_CHANGE); }
-};
-
-glyph *glyph::free_list = 0;
-
-void *glyph::operator new(size_t)
-{
- if (!free_list) {
- const int BLOCK = 1024;
- free_list = (glyph *)new char[sizeof(glyph) * BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK - 1].next = 0;
- }
- glyph *p = free_list;
- free_list = free_list->next;
- p->next = 0;
- return p;
-}
-
-void glyph::operator delete(void *p)
-{
- if (p) {
- ((glyph *)p)->next = free_list;
- free_list = (glyph *)p;
- }
-}
-
-class tty_printer : public printer {
- int is_utf8;
- glyph **lines;
- int nlines;
- int cached_v;
- int cached_vpos;
- schar curr_fore_idx;
- schar curr_back_idx;
- int is_underline;
- int is_bold;
- int cu_flag;
- PTABLE(schar) tty_colors;
- void make_underline(int);
- void make_bold(unsigned int, int);
- schar color_to_idx(color *col);
- void add_char(unsigned int, int, int, int, color *, color *, unsigned char);
- char *make_rgb_string(unsigned int, unsigned int, unsigned int);
- int tty_color(unsigned int, unsigned int, unsigned int, schar *,
- schar = DEFAULT_COLOR_IDX);
-public:
- tty_printer(const char *device);
- ~tty_printer();
- void set_char(int, font *, const environment *, int, const char *name);
- void draw(int code, int *p, int np, const environment *env);
- void special(char *arg, const environment *env, char type);
- void change_color(const environment * const env);
- void change_fill_color(const environment * const env);
- void put_char(unsigned int);
- void put_color(schar, int);
- void begin_page(int) { }
- void end_page(int page_length);
- font *make_font(const char *);
-};
-
-char *tty_printer::make_rgb_string(unsigned int r,
- unsigned int g,
- unsigned int b)
-{
- char *s = new char[8];
- s[0] = char(r >> 8);
- s[1] = char(r & 0xff);
- s[2] = char(g >> 8);
- s[3] = char(g & 0xff);
- s[4] = char(b >> 8);
- s[5] = char(b & 0xff);
- s[6] = char(0x80);
- s[7] = 0;
- // avoid null-bytes in string
- for (int i = 0; i < 6; i++)
- if (!s[i]) {
- s[i] = 1;
- s[6] |= 1 << i;
- }
- return s;
-}
-
-int tty_printer::tty_color(unsigned int r,
- unsigned int g,
- unsigned int b, schar *idx, schar value)
-{
- int unknown_color = 0;
- char *s = make_rgb_string(r, g, b);
- schar *i = tty_colors.lookup(s);
- if (!i) {
- unknown_color = 1;
- i = new schar[1];
- *i = value;
- tty_colors.define(s, i);
- }
- *idx = *i;
- a_delete s;
- return unknown_color;
-}
-
-tty_printer::tty_printer(const char *dev) : cached_v(0)
-{
- is_utf8 = !strcmp(dev, "utf8");
- if (is_utf8) {
- hline_char = 0x2500;
- vline_char = 0x2502;
- }
- schar dummy;
- // black, white
- (void)tty_color(0, 0, 0, &dummy, 0);
- (void)tty_color(color::MAX_COLOR_VAL,
- color::MAX_COLOR_VAL,
- color::MAX_COLOR_VAL, &dummy, 7);
- // red, green, blue
- (void)tty_color(color::MAX_COLOR_VAL, 0, 0, &dummy, 1);
- (void)tty_color(0, color::MAX_COLOR_VAL, 0, &dummy, 2);
- (void)tty_color(0, 0, color::MAX_COLOR_VAL, &dummy, 4);
- // yellow, magenta, cyan
- (void)tty_color(color::MAX_COLOR_VAL, color::MAX_COLOR_VAL, 0, &dummy, 3);
- (void)tty_color(color::MAX_COLOR_VAL, 0, color::MAX_COLOR_VAL, &dummy, 5);
- (void)tty_color(0, color::MAX_COLOR_VAL, color::MAX_COLOR_VAL, &dummy, 6);
- nlines = 66;
- lines = new glyph *[nlines];
- for (int i = 0; i < nlines; i++)
- lines[i] = 0;
- cu_flag = 0;
-}
-
-tty_printer::~tty_printer()
-{
- a_delete lines;
-}
-
-void tty_printer::make_underline(int w)
-{
- if (old_drawing_scheme) {
- if (!w)
- warning("can't underline zero-width character");
- else {
- int n = w / font::hor;
- for (int i = 0; i < n; i++)
- putchar('_');
- for (int j = 0; j < n; j++)
- putchar('\b');
- }
- }
- else {
- if (!is_underline) {
- if (italic_flag)
- putstring(SGR_ITALIC);
- else if (reverse_flag)
- putstring(SGR_REVERSE);
- else
- putstring(SGR_UNDERLINE);
- }
- is_underline = 1;
- }
-}
-
-void tty_printer::make_bold(unsigned int c, int w)
-{
- if (old_drawing_scheme) {
- if (!w)
- warning("can't print zero-width character in bold");
- else {
- int n = w / font::hor;
- put_char(c);
- for (int i = 0; i < n; i++)
- putchar('\b');
- }
- }
- else {
- if (!is_bold)
- putstring(SGR_BOLD);
- is_bold = 1;
- }
-}
-
-schar tty_printer::color_to_idx(color *col)
-{
- if (col->is_default())
- return DEFAULT_COLOR_IDX;
- unsigned int r, g, b;
- col->get_rgb(&r, &g, &b);
- schar idx;
- if (tty_color(r, g, b, &idx)) {
- char *s = col->print_color();
- error("Unknown color (%1) mapped to default", s);
- a_delete s;
- }
- return idx;
-}
-
-void tty_printer::set_char(int i, font *f, const environment *env,
- int w, const char *)
-{
- if (w % font::hor != 0)
- fatal("width of character not a multiple of horizontal resolution");
- add_char(f->get_code(i), w,
- env->hpos, env->vpos,
- env->col, env->fill,
- ((tty_font *)f)->get_mode());
-}
-
-void tty_printer::add_char(unsigned int c, int w,
- int h, int v,
- color *fore, color *back,
- unsigned char mode)
-{
-#if 0
- // This is too expensive.
- if (h % font::hor != 0)
- fatal("horizontal position not a multiple of horizontal resolution");
-#endif
- int hpos = h / font::hor;
- if (hpos < SHRT_MIN || hpos > SHRT_MAX) {
- error("character with ridiculous horizontal position discarded");
- return;
- }
- int vpos;
- if (v == cached_v && cached_v != 0)
- vpos = cached_vpos;
- else {
- if (v % font::vert != 0)
- fatal("vertical position not a multiple of vertical resolution");
- vpos = v / font::vert;
- if (vpos > nlines) {
- glyph **old_lines = lines;
- lines = new glyph *[vpos + 1];
- memcpy(lines, old_lines, nlines * sizeof(glyph *));
- for (int i = nlines; i <= vpos; i++)
- lines[i] = 0;
- a_delete old_lines;
- nlines = vpos + 1;
- }
- // Note that the first output line corresponds to groff
- // position font::vert.
- if (vpos <= 0) {
- error("character above first line discarded");
- return;
- }
- cached_v = v;
- cached_vpos = vpos;
- }
- glyph *g = new glyph;
- g->w = w;
- g->hpos = hpos;
- g->code = c;
- g->fore_color_idx = color_to_idx(fore);
- g->back_color_idx = color_to_idx(back);
- g->mode = mode;
-
- // The list will be reversed later. After reversal, it must be in
- // increasing order of hpos, with COLOR_CHANGE and CU specials before
- // HDRAW characters before VDRAW characters before normal characters
- // at each hpos, and otherwise in order of occurrence.
-
- glyph **pp;
- for (pp = lines + (vpos - 1); *pp; pp = &(*pp)->next)
- if ((*pp)->hpos < hpos
- || ((*pp)->hpos == hpos && (*pp)->order() >= g->order()))
- break;
- g->next = *pp;
- *pp = g;
-}
-
-void tty_printer::special(char *arg, const environment *env, char type)
-{
- if (type == 'u') {
- add_char(*arg - '0', 0, env->hpos, env->vpos, env->col, env->fill,
- CU_MODE);
- return;
- }
- if (type != 'p')
- return;
- char *p;
- for (p = arg; *p == ' ' || *p == '\n'; p++)
- ;
- char *tag = p;
- for (; *p != '\0' && *p != ':' && *p != ' ' && *p != '\n'; p++)
- ;
- if (*p == '\0' || strncmp(tag, "tty", p - tag) != 0) {
- error("X command without `tty:' tag ignored");
- return;
- }
- p++;
- for (; *p == ' ' || *p == '\n'; p++)
- ;
- char *command = p;
- for (; *p != '\0' && *p != ' ' && *p != '\n'; p++)
- ;
- if (*command == '\0') {
- error("empty X command ignored");
- return;
- }
- if (strncmp(command, "sgr", p - command) == 0) {
- for (; *p == ' ' || *p == '\n'; p++)
- ;
- int n;
- if (*p != '\0' && sscanf(p, "%d", &n) == 1 && n == 0)
- old_drawing_scheme = 1;
- else
- old_drawing_scheme = 0;
- update_options();
- }
-}
-
-void tty_printer::change_color(const environment * const env)
-{
- add_char(0, 0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
-}
-
-void tty_printer::change_fill_color(const environment * const env)
-{
- add_char(0, 0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
-}
-
-void tty_printer::draw(int code, int *p, int np, const environment *env)
-{
- if (code != 'l' || !draw_flag)
- return;
- if (np != 2) {
- error("2 arguments required for line");
- return;
- }
- if (p[0] == 0) {
- // vertical line
- int v = env->vpos;
- int len = p[1];
- if (len < 0) {
- v += len;
- len = -len;
- }
- if (len >= 0 && len <= font::vert)
- add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill,
- VDRAW_MODE|START_LINE|END_LINE);
- else {
- add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill,
- VDRAW_MODE|START_LINE);
- len -= font::vert;
- v += font::vert;
- while (len > 0) {
- add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill,
- VDRAW_MODE|START_LINE|END_LINE);
- len -= font::vert;
- v += font::vert;
- }
- add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill,
- VDRAW_MODE|END_LINE);
- }
- }
- if (p[1] == 0) {
- // horizontal line
- int h = env->hpos;
- int len = p[0];
- if (len < 0) {
- h += len;
- len = -len;
- }
- if (len >= 0 && len <= font::hor)
- add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill,
- HDRAW_MODE|START_LINE|END_LINE);
- else {
- add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill,
- HDRAW_MODE|START_LINE);
- len -= font::hor;
- h += font::hor;
- while (len > 0) {
- add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill,
- HDRAW_MODE|START_LINE|END_LINE);
- len -= font::hor;
- h += font::hor;
- }
- add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill,
- HDRAW_MODE|END_LINE);
- }
- }
-}
-
-void tty_printer::put_char(unsigned int wc)
-{
- if (is_utf8 && wc >= 0x80) {
- char buf[6 + 1];
- int count;
- char *p = buf;
- if (wc < 0x800)
- count = 1, *p = (unsigned char)((wc >> 6) | 0xc0);
- else if (wc < 0x10000)
- count = 2, *p = (unsigned char)((wc >> 12) | 0xe0);
- else if (wc < 0x200000)
- count = 3, *p = (unsigned char)((wc >> 18) | 0xf0);
- else if (wc < 0x4000000)
- count = 4, *p = (unsigned char)((wc >> 24) | 0xf8);
- else if (wc <= 0x7fffffff)
- count = 5, *p = (unsigned char)((wc >> 30) | 0xfC);
- else
- return;
- do *++p = (unsigned char)(((wc >> (6 * --count)) & 0x3f) | 0x80);
- while (count > 0);
- *++p = '\0';
- putstring(buf);
- }
- else
- putchar(wc);
-}
-
-void tty_printer::put_color(schar color_index, int back)
-{
- if (color_index == DEFAULT_COLOR_IDX) {
- putstring(SGR_DEFAULT);
- // set bold and underline again
- if (is_bold)
- putstring(SGR_BOLD);
- if (is_underline) {
- if (italic_flag)
- putstring(SGR_ITALIC);
- else if (reverse_flag)
- putstring(SGR_REVERSE);
- else
- putstring(SGR_UNDERLINE);
- }
- // set other color again
- back = !back;
- color_index = back ? curr_back_idx : curr_fore_idx;
- }
- if (color_index != DEFAULT_COLOR_IDX) {
- putstring(CSI);
- if (back)
- putchar('4');
- else
- putchar('3');
- putchar(color_index + '0');
- putchar('m');
- }
-}
-
-// The possible Unicode combinations for crossing characters.
-//
-// ` ' = 0, ` -' = 4, `- ' = 8, `--' = 12,
-//
-// ` ' = 0, ` ' = 1, `|' = 2, `|' = 3
-// | |
-
-static int crossings[4*4] = {
- 0x0000, 0x2577, 0x2575, 0x2502,
- 0x2576, 0x250C, 0x2514, 0x251C,
- 0x2574, 0x2510, 0x2518, 0x2524,
- 0x2500, 0x252C, 0x2534, 0x253C
-};
-
-void tty_printer::end_page(int page_length)
-{
- if (page_length % font::vert != 0)
- error("vertical position at end of page not multiple of vertical resolution");
- int lines_per_page = page_length / font::vert;
- int last_line;
- for (last_line = nlines; last_line > 0; last_line--)
- if (lines[last_line - 1])
- break;
-#if 0
- if (last_line > lines_per_page) {
- error("characters past last line discarded");
- do {
- --last_line;
- while (lines[last_line]) {
- glyph *tem = lines[last_line];
- lines[last_line] = tem->next;
- delete tem;
- }
- } while (last_line > lines_per_page);
- }
-#endif
- for (int i = 0; i < last_line; i++) {
- glyph *p = lines[i];
- lines[i] = 0;
- glyph *g = 0;
- while (p) {
- glyph *tem = p->next;
- p->next = g;
- g = p;
- p = tem;
- }
- int hpos = 0;
- glyph *nextp;
- curr_fore_idx = DEFAULT_COLOR_IDX;
- curr_back_idx = DEFAULT_COLOR_IDX;
- is_underline = 0;
- is_bold = 0;
- for (p = g; p; delete p, p = nextp) {
- nextp = p->next;
- if (p->mode & CU_MODE) {
- cu_flag = p->code;
- continue;
- }
- if (nextp && p->hpos == nextp->hpos) {
- if (p->draw_mode() == HDRAW_MODE &&
- nextp->draw_mode() == VDRAW_MODE) {
- if (is_utf8)
- nextp->code =
- crossings[((p->mode & (START_LINE|END_LINE)) >> 4)
- + ((nextp->mode & (START_LINE|END_LINE)) >> 6)];
- else
- nextp->code = '+';
- continue;
- }
- if (p->draw_mode() != 0 && p->draw_mode() == nextp->draw_mode()) {
- nextp->code = p->code;
- continue;
- }
- if (!overstrike_flag)
- continue;
- }
- if (hpos > p->hpos) {
- do {
- putchar('\b');
- hpos--;
- } while (hpos > p->hpos);
- }
- else {
- if (horizontal_tab_flag) {
- for (;;) {
- int next_tab_pos = ((hpos + TAB_WIDTH) / TAB_WIDTH) * TAB_WIDTH;
- if (next_tab_pos > p->hpos)
- break;
- if (cu_flag)
- make_underline(p->w);
- else if (!old_drawing_scheme && is_underline) {
- if (italic_flag)
- putstring(SGR_NO_ITALIC);
- else if (reverse_flag)
- putstring(SGR_NO_REVERSE);
- else
- putstring(SGR_NO_UNDERLINE);
- is_underline = 0;
- }
- putchar('\t');
- hpos = next_tab_pos;
- }
- }
- for (; hpos < p->hpos; hpos++) {
- if (cu_flag)
- make_underline(p->w);
- else if (!old_drawing_scheme && is_underline) {
- if (italic_flag)
- putstring(SGR_NO_ITALIC);
- else if (reverse_flag)
- putstring(SGR_NO_REVERSE);
- else
- putstring(SGR_NO_UNDERLINE);
- is_underline = 0;
- }
- putchar(' ');
- }
- }
- assert(hpos == p->hpos);
- if (p->mode & COLOR_CHANGE) {
- if (!old_drawing_scheme) {
- if (p->fore_color_idx != curr_fore_idx) {
- put_color(p->fore_color_idx, 0);
- curr_fore_idx = p->fore_color_idx;
- }
- if (p->back_color_idx != curr_back_idx) {
- put_color(p->back_color_idx, 1);
- curr_back_idx = p->back_color_idx;
- }
- }
- continue;
- }
- if (p->mode & UNDERLINE_MODE)
- make_underline(p->w);
- else if (!old_drawing_scheme && is_underline) {
- if (italic_flag)
- putstring(SGR_NO_ITALIC);
- else if (reverse_flag)
- putstring(SGR_NO_REVERSE);
- else
- putstring(SGR_NO_UNDERLINE);
- is_underline = 0;
- }
- if (p->mode & BOLD_MODE)
- make_bold(p->code, p->w);
- else if (!old_drawing_scheme && is_bold) {
- putstring(SGR_NO_BOLD);
- is_bold = 0;
- }
- if (!old_drawing_scheme) {
- if (p->fore_color_idx != curr_fore_idx) {
- put_color(p->fore_color_idx, 0);
- curr_fore_idx = p->fore_color_idx;
- }
- if (p->back_color_idx != curr_back_idx) {
- put_color(p->back_color_idx, 1);
- curr_back_idx = p->back_color_idx;
- }
- }
- put_char(p->code);
- hpos += p->w / font::hor;
- }
- if (!old_drawing_scheme
- && (is_bold || is_underline
- || curr_fore_idx != DEFAULT_COLOR_IDX
- || curr_back_idx != DEFAULT_COLOR_IDX))
- putstring(SGR_DEFAULT);
- putchar('\n');
- }
- if (form_feed_flag) {
- if (last_line < lines_per_page)
- putchar('\f');
- }
- else {
- for (; last_line < lines_per_page; last_line++)
- putchar('\n');
- }
-}
-
-font *tty_printer::make_font(const char *nm)
-{
- return tty_font::load_tty_font(nm);
-}
-
-printer *make_printer()
-{
- return new tty_printer(device);
-}
-
-static void update_options()
-{
- if (old_drawing_scheme) {
- italic_flag = 0;
- reverse_flag = 0;
- bold_underline_mode = bold_underline_mode_option;
- bold_flag = bold_flag_option;
- underline_flag = underline_flag_option;
- }
- else {
- italic_flag = italic_flag_option;
- reverse_flag = reverse_flag_option;
- bold_underline_mode = BOLD_MODE|UNDERLINE_MODE;
- bold_flag = 1;
- underline_flag = 1;
- }
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- if (getenv("GROFF_NO_SGR"))
- old_drawing_scheme = 1;
- setbuf(stderr, stderr_buf);
- int c;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "bBcdfF:hiI:oruUv", long_options, NULL))
- != EOF)
- switch(c) {
- case 'v':
- printf("GNU grotty (groff) version %s\n", Version_string);
- exit(0);
- break;
- case 'i':
- // Use italic font instead of underlining.
- italic_flag_option = 1;
- break;
- case 'I':
- // ignore include search path
- break;
- case 'b':
- // Do not embolden by overstriking.
- bold_flag_option = 0;
- break;
- case 'c':
- // Use old scheme for emboldening and underline.
- old_drawing_scheme = 1;
- break;
- case 'u':
- // Do not underline.
- underline_flag_option = 0;
- break;
- case 'o':
- // Do not overstrike (other than emboldening and underlining).
- overstrike_flag = 0;
- break;
- case 'r':
- // Use reverse mode instead of underlining.
- reverse_flag_option = 1;
- break;
- case 'B':
- // Do bold-underlining as bold.
- bold_underline_mode_option = BOLD_MODE;
- break;
- case 'U':
- // Do bold-underlining as underlining.
- bold_underline_mode_option = UNDERLINE_MODE;
- break;
- case 'h':
- // Use horizontal tabs.
- horizontal_tab_flag = 1;
- break;
- case 'f':
- form_feed_flag = 1;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'd':
- // Ignore \D commands.
- draw_flag = 0;
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- update_options();
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-bBcdfhioruUv] [-F dir] [files ...]\n",
- program_name);
-}
diff --git a/contrib/groff/src/devices/xditview/ChangeLog b/contrib/groff/src/devices/xditview/ChangeLog
deleted file mode 100644
index 41ea31c5967d..000000000000
--- a/contrib/groff/src/devices/xditview/ChangeLog
+++ /dev/null
@@ -1,542 +0,0 @@
-2004-05-29 Werner LEMBERG <wl@gnu.org>
-
- gxditview and xtotroff have been integrated into the normal groff
- directory structure; future changes are logged in the main
- ChangeLog file.
-
-2004-05-13 Werner LEMBERG <wl@gnu.org>
-
-Version 1.19.1 released
-=======================
-
-2004-04-17 Werner LEMBERG <wl@gnu.org>
-
- * device.c (scale_round): Round correctly for negative values
- (this is the same function as in src/libs/libgroff/font.c).
- Found by Paul Eggert.
-
-2003-11-10 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in: s/@top_srcdir@/@abs_top_srcdir@/,
- s/@groff_top_builddir@/@abs_top_builddir@/.
-
-Version 1.19 released
-=====================
-
-2003-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (extraclean): Added gxditview._man.
-
-2003-01-28 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (SEP): New variable; set to @PATH_SEPARATOR@.
- (GROFF_FONTPATH): Use it.
-
-2003-01-07 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add `sqrt'.
-
-2003-01-06 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add `integral'.
-
-2002-12-29 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Remove `ap' and `eq'.
-
-2002-12-20 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Don't include `or'.
- * draw.c (AdjustCharDeltas): Apply correction only if nadj > 1.
- (DoCharacter): Call FlushCharCache if font size and font number
- differ.
- Reset `dw->dvi.cache.adjustable' properly.
-
-2002-12-09 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Use `tno' symbol instead of `no'.
-
-2002-12-01 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in: Use `InstallAppDefaultsLong' instead of
- `InstallAppDefaults' to make it work if build directory isn't
- $srcdir.
-
-2002-11-24 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add glyph `braceex'.
-
-2002-11-14 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Don't include `or'.
-
-Version 1.18.1 released
-=======================
-
-2002-09-16 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (GROFF_LOCALFONTDIR): New variable.
- (GROFF_FONTPATH): Use it.
- Remove /usr/local/lib/font.
-
-Version 1.18.0 released
-=======================
-
-2002-06-22 Werner LEMBERG <wl@gnu.org>
-
- * gxditview.c (main): Handle `-help' and `--help' correctly.
-
-2002-06-17 Colin Watson <cjwatson@debian.org>
-
- * Imakefile.in: s/@top_builddir@/@groff_top_builddir@/.
-
-2002-04-06 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map, Adobe_Symbol_map): Remove all
- characters > 0x80.
- * parse.c (ParseInput): Ignore `m' command.
- (ParseDrawFunction): Don't move for unknown drawing functions.
- Don't move for `f' drawing function.
-
-2002-03-25 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Use `t+-', `tmu', and `tdi' symbols
- instead of `+-', `mu', and `di', respectively.
-
-2002-02-23 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Add `mc' symbol.
-
-2001-09-22 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in: Redefine `ProgramTargetHelper' as
- `ProgramTargetHelperNoMan' and add a call to `InstallManPageLong'
- to make the `install.man' target work if the build directory isn't
- $srcdir.
-
-Version 1.17.2 released
-=======================
-
-Version 1.17.1 released
-=======================
-
-2001-04-21 Albert Chin-A-Young <china@thewrittenword.com>
-
- * Imakefile.in: Add support for recent HP architectures.
-
-Version 1.17 released
-=====================
-
-2001-01-04 Rob Daasch <daasch@ece.pdx.edu>
-
- * parse.c (ParseInput): Added 'F' to command switch to swallow
- filename strings as ignored comments.
-
-2000-12-02 Werner LEMBERG <wl@gnu.org>
-
- * device.c (find_file): Remove home directory in search path.
-
-2000-11-14 Werner LEMBERG <wl@gnu.org>
-
- * device.c (open_device_file): Remove `path' parameter.
- (find_file): Construct font path similar to groff: First the contents
- of GROFF_FONT_PATH, then the home directory, and finally the default
- font path.
- * Imakefile.in: Fix GROFF_DATAPROGRAMDIR and GROFF_FONTPATH.
-
-2000-10-23 Werner LEMBERG <wl@gnu.org>
-
- Change installation structure for data files from .../groff/... to
- .../groff/<version><revision>/... to be conform with other GNU
- programs.
-
- * Imakefile.in: Implement it.
-
-Version 1.16.1 released
-=======================
-
-Version 1.16 released
-=====================
-
-2000-05-18 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Adding `cq' as an alias for "'" in latin-1 map.
-
-2000-05-03 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Adding `dq' as an alias for `"' in latin-1 map.
-
-2000-04-28 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Replacing `md' glyph name with `pc' in latin-1 map to
- make it distinct from the `md' glyph in the symbol font.
-
-2000-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile replaced with Imakefile.in which will be configured by
- the main configure script of groff. This will set the correct font
- path, and it will make it possible to build xditview in a directory
- different from $srcdir.
-
-2000-03-01 Colin Phipps <crp22@cam.ac.uk>
-
- * Dvi.c (OpenFile): Use tmpdir() for security reasons.
- * xtotroff.c (MapFont): Avoid race while opening file.
-
-2000-02-06 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile: Adapted to new directory structure.
-
- * README: Updated.
-
-Version 1.15 released
-=====================
-
-1999-12-21 Werner LEMBERG <wl@gnu.org>
-
- * README: Fixed ftp GNU address.
-
-1999-12-13 Werner LEMBERG <wl@gnu.org>
-
- * device.c: Use extern declarations of strtok(), strchr(), and
- getenv() only if not defined as macros.
-
-1999-11-18 Larry Jones <larry.jones@sdrc.com>
-
- * xditview.c: Add fallback_resources to allow running without
- access to the app-defaults file.
-
- * Imakefile: Added rule to create app-defaults to a C header file.
-
- * GXditview-ad.h: New file containing fallback default resources.
-
- * ad2c: New file to do the app-defaults -> C header file
- conversion.
-
-1999-10-27 Larry Jones <larry.jones@sdrc.com>
-
- * font.c (DisposeFontSizes): If there's a problem loading a font,
- xditview will fall-back and use the default font, but it hasn't
- checked before unloading fonts which could result in unloading the
- default font (possibly multiple times) and then X errors.
-
-1999-09-13 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile (extraclean): Added Makefile.
-
- * xditview.c (main, MakePrompt): Fixing compilation warnings.
-
- * TODO: Imakefile should be replaced with a configure script.
-
-1999-09-13 Werner LEMBERG <wl@gnu.org>
-
- * Makefile: Removed.
-
-1999-09-12 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile (GROFF_FONTPATH): Another addition.
-
- * device.c (FONTPATH): Update to match current groff version.
-
-1999-09-11 Larry Jones <larry.jones@sdrc.com>
-
- * Imakefile (GROFF_LIBDIR, GROFF_FONTPATH): Update to match
- current groff version.
-
- * Dvi.c (Realize, Destroy), DviP.h, draw.c (setFillGC), gray*.bm:
- Allow 8 levels of gray rather than just 1.
-
- * draw.c (DrawFilledCircle, DrawFilledEllipse, DrawFilledPolygon):
- Draw outlines to prevent gaps between abutting figures.
-
-1999-05-27 Werner LEMBERG <wl@gnu.org>
-
- * xtotroff.c (usage): Fixed typo.
-
-Mon Sep 11 10:40:33 1995 James Clark <jjc@jclark.com>
-
- * device.c (INT_MIN, INT_MAX): Don't define if already defined.
-
-Mon Aug 8 11:14:11 1994 James Clark (jjc@jclark.com)
-
- * DviChar.c (Adobe_Symbol_map): Use \(nb for notsubset.
-
-Tue Apr 19 04:41:16 1994 James Clark (jjc@jclark.com)
-
- * Dvi.c (resources): Change default for background and foreground
- to "XtDefaultBackground" and "XtDefaultForeground".
-
-Sat Feb 12 10:38:47 1994 James Clark (jjc@jclark.com)
-
- * DviChar.c (Adobe_Symbol_map): Rename radicalex to rn.
-
-Thu May 27 20:30:12 1993 James Clark (jjc@jclark.com)
-
- * device.c (isascii): Define if necessary.
- (canonicalize_name): Cast argument to isdigit() to unsigned char.
-
-Thu Apr 29 18:36:57 1993 James Clark (jjc at jclark.com)
-
- * xditview.c: Include <X11/Xos.h>.
- (NewFile): Don't declare rindex(). Use strrchr() rather than
- rindex().
-
-Tue Mar 30 15:12:09 1993 James Clark (jjc at jclark)
-
- * draw.c (charExists): Check that fi->per_char is not NULL.
-
-Sat Dec 12 17:42:40 1992 James Clark (jjc at jclark)
-
- * Dvi.c (SetGeometry): Cast XtMakeGeometryRequest arguments.
-
- * draw.c (DrawPolygon, DrawFilledPolygon): Cast Xtfree argument.
-
- * font.c (DisposeFontSizes): Add declaration.
-
- * draw.c (FakeCharacter): Add declaration.
-
-Wed Oct 28 13:24:00 1992 James Clark (jjc at jclark)
-
- * Imakefile (install.dev): Deleted.
- (fonts): New target.
-
-Mon Oct 12 10:50:44 1992 James Clark (jjc at jclark)
-
- * Imakefile (install.dev): Say when we're installing devX*-12.
-
- * Imakefile (install.dev): Depends on DESC and FontMap.
-
-Thu Oct 1 20:03:45 1992 James Clark (jjc at jclark)
-
- * xditview.c (Syntax): Mention -filename option.
-
-Sat Aug 15 12:56:39 1992 James Clark (jjc at jclark)
-
- * GXditview.ad: Bind space and return to NextPage. Bind backspace
- and delete to previous page.
-
- * DviChar.c (Adobe_Symbol_map): Add `an'.
-
- * DviChar.c (Adobe_Symbol_map): Add arrowvertex, arrowverttp, and
- arrowvertbt.
-
-Mon Aug 10 11:54:27 1992 James Clark (jjc at jclark)
-
- * FontMap: Add m/p fields to the fonts names.
-
-Sat Aug 8 12:00:28 1992 James Clark (jjc at jclark)
-
- * DESC: Leave font positions 5-9 blank.
-
-Tue Jul 28 11:37:05 1992 James Clark (jjc at jclark)
-
- * Imakefile: Don't use gendef. Pass definition of FONTPATH using
- DEFINES.
- (path.h): Deleted.
- (device.c): Don't include path.h. Provide default definition of
- FONTPATH.
-
-Mon Jul 6 14:06:53 1992 James Clark (jjc at jclark)
-
- * Imakefile: Don't install tmac.X and tmac.Xps.
- * tmac.X, tmac.Xps: Moved to ../macros.
-
- * Imakefile: Don't install eqnchar.
- * eqnchar: Deleted.
-
-Sun Jun 14 12:55:02 1992 James Clark (jjc@jclark)
-
- * tmac.Xps: Handle OE, oe, lq, rq.
- * draw.c (FakeCharacter): Don't handle these.
-
- * draw.c (FakeCharacter): Don't handle f/.
-
-Mon Jun 8 11:46:37 1992 James Clark (jjc@jclark)
-
- * tmac.X: Translate char160 to space.
-
-Sun Jun 7 14:39:53 1992 James Clark (jjc@jclark)
-
- * tmac.X: Do `mso tmac.psic' before restoring compatibility mode.
-
- * tmac.X: Add \(OE, \(oe, \(ah, \(ao, \(ho.
-
- * tmac.Xps: Make it work in compatibility mode.
- Redo existing character definitions with .Xps-char.
- Add more character definitions.
- (Xps-char): New macro.
-
-Sat Jun 6 21:46:03 1992 James Clark (jjc@jclark)
-
- * DviChar.c (Adobe_Symbol_map): Add +h, +f, +p, Fn, lz.
- * tmac.X: Add \(bq, \(Bq, \(aq.
- * tmac.Xps: Handle \(aq, \(bq, \(Bq, \(Fn.
-
-Wed Jun 3 11:11:15 1992 James Clark (jjc@jclark)
-
- * DviChar.c (Adobe_Symbol_map): Add wp.
-
-Tue Apr 21 09:21:59 1992 James Clark (jjc at jclark)
-
- * GXditview.ad: Bind n, p, q keys to NextPage, PreviousPage and
- Quit actions.
-
- * xditview.c (RerasterizeAction): New function.
- (xditview_actions): Add RerasterizeAction.
- * GXditview.ad: Bind r key to Rerasterize action.
-
-Fri Apr 17 08:25:36 1992 James Clark (jjc at jclark)
-
- * xditview.c: Add -filename option.
- (main): Copy any -filename argument into current_file_name.
-
-Mon Mar 16 10:21:58 1992 James Clark (jjc at jclark)
-
- * tmac.X: Load tmac.pspic.
-
-Sun Mar 8 11:27:19 1992 James Clark (jjc at jclark)
-
- * Lex.c (GetLine, GetWord, GetNumber): Rewrite.
-
-Sat Oct 12 22:58:52 1991 James Clark (jjc at jclark)
-
- * Dvi.c (SetDevice): If the size change request is refused but a
- larger geometry is offered, request that.
-
-Wed Oct 9 12:27:48 1991 James Clark (jjc at jclark)
-
- * font.c (InstallFontSizes): Ignore FontNameAverageWidth component.
-
- * Dvi.c (default_font_map): Add `adobe' to font names to avoid
- ambiguity.
-
- * FontMap: New file.
- * FontMap.X100, FontMap.X75: Deleted.
- * xtotroff.c (main, usage): Add -s and -r options.
- (MapFont): Change the font pattern to have the selected resolution and
- size.
- * Imakefile (install.dev): Use FontMap and supply appropriate -s
- and -r options.
-
- * xtotroff.c (MapFont): Check for ambiguity by comparing canonicalized
- font names.
-
- * DviP.h (DviFontList): Add initialized and scalable members.
- (font.c): Add support for scalable fonts based on R5 xditview.
-
- * DviChar.c: Use xmalloc rather than malloc.
- * xditview.c (xmalloc): New function.
- * xtotroff.c (xmalloc): New function.
- * other files: Use XtMalloc and XtFree instead of malloc and free.
-
-Thu Aug 29 20:15:31 1991 James Clark (jjc at jclark)
-
- * draw.c (setGC): Do multiplication in floating point to avoid
- overflow.
-
-Tue Aug 13 12:04:41 1991 James Clark (jjc at jclark)
-
- * draw.c (FakeCharacter): Remove casts in defintion of pack2.
-
-Tue Jul 30 11:42:39 1991 James Clark (jjc at jclark)
-
- * tmac.Xps: New file.
- * Imakefile (install): Install tmac.Xps.
-
-Tue Jul 2 09:31:37 1991 James Clark (jjc at jclark)
-
- * xtotroff.c (main): Pass argv[0] to usage().
-
-Sun Jun 30 12:34:06 1991 James Clark (jjc at jclark)
-
- * xtotroff.c (MapFont): Handle the case where XLoadQueryFont
- returns NULL.
-
-Sat Jun 29 12:32:52 1991 James Clark (jjc at jclark)
-
- * Imakefile: Use ../gendef to generate path.h.
-
-Sun Jun 16 13:26:34 1991 James Clark (jjc at jclark)
-
- * Imakefile (depend.o): Change to device.o.
-
-Sun Jun 2 12:17:56 1991 James Clark (jjc at jclark)
-
- * Imakefile: Remove spaces from the beginning of variable
- assignment lines.
-
-Sun May 26 14:14:01 1991 James Clark (jjc at jclark)
-
- * xditview.c (Syntax): Update.
-
- * Dvi.c (DviSaveToFile, SaveToFile): New functions.
- (FindPage): Check that we're not readingTmp before checking for
- end of file of normal input file.
- (ClassPartInitialize): New function.
- * Dvi.h: Add declaration of DviSaveToFile.
- * DviP.h: Add save method to DviClassPart. Declare
- InheritSaveToFile.
- * xditview.c (DoPrint, Print, PrintAction): New functions.
- * xditview.c: Add print menu entry.
- * xditview.c: Provide printCommand application resource.
- * lex.c: Don't output EOF to temporary file.
-
- * Dvi.c (QueryGeometry): Check request->request_mode.
-
- * Dvi.c (SetDevice): New function.
- (SetDeviceResolution): Deleted.
-
- * Dvi.c: Add resolution resource.
- * DviP.h: Add definitions of XtNResolution and XtCResolution.
- * xditview.c: Add -resolution argument.
- * GXditview.ad: Add default for GXditview.height.
- * Dvi.c (Initialize, SetDevice): Use default_resolution.
-
- * Dvi.c: Make MY_HEIGHT and MY_WIDTH use the paperlength and
- paperwidth commands in the DESC file.
-
- * Dvi.c: Add SS font to default font map.
-
- * draw.c: Rewritten so as not to assume device and display
- resolution is the same.
- * DviP.h: Include device.h. Add device_font member to DviFontList.
- Add adjustable array to DviCharCache. Add text_x_width,
- text_device_width, word_flag, device_font, device_font_number,
- device, native, device_resolution, display_resolution,
- paperlength, paperwidth, scale_factor, sizescale members.
- * Dvi.c (Initialize): Initialize new variable used by draw.c.
- (Destroy): Call device_destroy.
- * font.c (MaxFontPosition): New function.
- (LookupFontSizeBySize): Handle sizescale.
- (InstallFont): Load the device font.
- (ForgetFonts): New function.
- (QueryDeviceFont): New function.
- * parse.c (ParseInput): Handle t and u commands. Split off
- character output into draw.c.
- (ParseDeviceControl): Ignore res command. Use the device argument
- to the T command.
-
- * font.c (MapXNameToDviName): Ifdefed out.
-
- * path.h: New file.
- * device.c, device.h: New files.
-
- * DviChar.c: Add entries for lB, rB, oq, lC, rC, md.
-
- * INSTALL: New file.
-
- * libxdvi: Merged into main directory.
- * xtotroff.c, xditview.c: Change includes accordingly.
-
- * devX75, devX100: Merged into main directory.
- * xditview.man: Renamed to gxditview.man.
-
- * Xditview.ad: Renamed to GXditview.ad.
- * xditview.c (main): Use class of GXditview rather than xditview.
-
- * Imakefile: New file.
- * Makefile: Deleted.
-
- * xtotroff.c (MapFont): Unlink output file before opening it.
-
- * Started separate ChangeLog.
diff --git a/contrib/groff/src/devices/xditview/DESC.in b/contrib/groff/src/devices/xditview/DESC.in
deleted file mode 100644
index 172170c9c0b5..000000000000
--- a/contrib/groff/src/devices/xditview/DESC.in
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 75
-X11
-hor 1
-vert 1
-unitwidth 10
-postpro gxditview
diff --git a/contrib/groff/src/devices/xditview/Dvi.c b/contrib/groff/src/devices/xditview/Dvi.c
deleted file mode 100644
index f849fb14a9b7..000000000000
--- a/contrib/groff/src/devices/xditview/Dvi.c
+++ /dev/null
@@ -1,611 +0,0 @@
-#ifndef SABER
-#ifndef lint
-static char Xrcsid[] = "$XConsortium: Dvi.c,v 1.9 89/12/10 16:12:25 rws Exp $";
-#endif /* lint */
-#endif /* SABER */
-
-/*
- * Dvi.c - Dvi display widget
- *
- */
-
-#define XtStrlen(s) ((s) ? strlen(s) : 0)
-
- /* The following are defined for the reader's convenience. Any
- Xt..Field macro in this code just refers to some field in
- one of the substructures of the WidgetRec. */
-
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Converters.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-/****************************************************************
- *
- * Full class record constant
- *
- ****************************************************************/
-
-/* Private Data */
-
-static char default_font_map_1[] = "\
-TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
-TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
-CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
-CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
-";
-static char default_font_map_2[] = "\
-HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
-HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
-";
-static char default_font_map_3[] = "\
-NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
-NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
-S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
-SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
-";
-
-#define offset(field) XtOffset(DviWidget, field)
-
-#define MY_WIDTH(dw) ((int)(dw->dvi.paperwidth * dw->dvi.scale_factor + .5))
-#define MY_HEIGHT(dw) ((int)(dw->dvi.paperlength * dw->dvi.scale_factor + .5))
-
-static XtResource resources[] = {
- {(String)XtNfontMap, (String)XtCFontMap, (String)XtRString,
- sizeof (char *), offset(dvi.font_map_string),
- (String)XtRString, NULL /* set in code */},
- {(String)XtNforeground, (String)XtCForeground, (String)XtRPixel,
- sizeof (unsigned long), offset(dvi.foreground),
- (String)XtRString, (XtPointer)"XtDefaultForeground"},
- {(String)XtNbackground, (String)XtCBackground, (String)XtRPixel,
- sizeof (unsigned long), offset(dvi.background),
- (String)XtRString, (XtPointer)"XtDefaultBackground"},
- {(String)XtNpageNumber, (String)XtCPageNumber, (String)XtRInt,
- sizeof (int), offset(dvi.requested_page),
- (String)XtRString, (XtPointer)"1"},
- {(String)XtNlastPageNumber, (String)XtCLastPageNumber, (String)XtRInt,
- sizeof (int), offset (dvi.last_page),
- (String)XtRString, (XtPointer)"0"},
- {(String)XtNfile, (String)XtCFile, (String)XtRFile,
- sizeof (FILE *), offset (dvi.file),
- (String)XtRFile, (XtPointer)0},
- {(String)XtNseek, (String)XtCSeek, (String)XtRBoolean,
- sizeof (Boolean), offset(dvi.seek),
- (String)XtRString, (XtPointer)"false"},
- {(String)XtNfont, (String)XtCFont, (String)XtRFontStruct,
- sizeof (XFontStruct *), offset(dvi.default_font),
- (String)XtRString, (XtPointer)"xtdefaultfont"},
- {(String)XtNbackingStore, (String)XtCBackingStore, (String)XtRBackingStore,
- sizeof (int), offset(dvi.backing_store),
- (String)XtRString, (XtPointer)"default"},
- {(String)XtNnoPolyText, (String)XtCNoPolyText, (String)XtRBoolean,
- sizeof (Boolean), offset(dvi.noPolyText),
- (String)XtRString, (XtPointer)"false"},
- {(String)XtNresolution, (String)XtCResolution, (String)XtRInt,
- sizeof(int), offset(dvi.default_resolution),
- (String)XtRString, (XtPointer)"75"},
-};
-
-#undef offset
-
-static void ClassInitialize (void);
-static void ClassPartInitialize(WidgetClass);
-static void Initialize(Widget, Widget, ArgList, Cardinal *);
-static void Realize (Widget, XtValueMask *, XSetWindowAttributes *);
-static void Destroy (Widget);
-static void Redisplay (Widget, XEvent *, Region);
-static Boolean SetValues (Widget, Widget, Widget,
- ArgList, Cardinal *);
-static Boolean SetValuesHook (Widget, ArgList, Cardinal *);
-static XtGeometryResult QueryGeometry (Widget, XtWidgetGeometry *,
- XtWidgetGeometry *);
-static void ShowDvi (DviWidget);
-static void CloseFile (DviWidget);
-static void OpenFile (DviWidget);
-static void FindPage (DviWidget);
-
-static void SaveToFile (Widget, FILE *);
-
-/* font.c */
-extern void ParseFontMap(DviWidget);
-extern void DestroyFontMap(DviFontMap *);
-extern void ForgetFonts(DviWidget);
-
-/* page.c */
-extern void DestroyFileMap(DviFileMap *);
-extern long SearchPagePosition(DviWidget, int);
-extern void FileSeek(DviWidget, long);
-extern void ForgetPagePositions(DviWidget);
-
-/* parse.c */
-extern int ParseInput(register DviWidget);
-
-DviClassRec dviClassRec = {
-{
- &widgetClassRec, /* superclass */
- (String)"Dvi", /* class_name */
- sizeof(DviRec), /* size */
- ClassInitialize, /* class_initialize */
- ClassPartInitialize, /* class_part_initialize */
- FALSE, /* class_inited */
- Initialize, /* initialize */
- NULL, /* initialize_hook */
- Realize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* resource_count */
- NULLQUARK, /* xrm_class */
- FALSE, /* compress_motion */
- TRUE, /* compress_exposure */
- TRUE, /* compress_enterleave */
- FALSE, /* visible_interest */
- Destroy, /* destroy */
- NULL, /* resize */
- Redisplay, /* expose */
- SetValues, /* set_values */
- SetValuesHook, /* set_values_hook */
- NULL, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- 0, /* tm_table */
- QueryGeometry, /* query_geometry */
- NULL, /* display_accelerator */
- NULL /* extension */
-},{
- SaveToFile, /* save */
-},
-};
-
-WidgetClass dviWidgetClass = (WidgetClass) &dviClassRec;
-
-static void ClassInitialize (void)
-{
- int len1 = strlen(default_font_map_1);
- int len2 = strlen(default_font_map_2);
- int len3 = strlen(default_font_map_3);
- char *dfm = XtMalloc(len1 + len2 + len3 + 1);
- char *ptr = dfm;
- strcpy(ptr, default_font_map_1); ptr += len1;
- strcpy(ptr, default_font_map_2); ptr += len2;
- strcpy(ptr, default_font_map_3);
- resources[0].default_addr = dfm;
-
- XtAddConverter( XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
- NULL, 0 );
-}
-
-/****************************************************************
- *
- * Private Procedures
- *
- ****************************************************************/
-
-/* ARGSUSED */
-static void Initialize(Widget request, Widget new_wd,
- ArgList args, Cardinal *num_args)
-{
- DviWidget dw = (DviWidget) new_wd;
-
- dw->dvi.current_page = 0;
- dw->dvi.font_map = 0;
- dw->dvi.cache.index = 0;
- dw->dvi.text_x_width = 0;
- dw->dvi.text_device_width = 0;
- dw->dvi.word_flag = 0;
- dw->dvi.file = 0;
- dw->dvi.tmpFile = 0;
- dw->dvi.state = 0;
- dw->dvi.readingTmp = 0;
- dw->dvi.cache.char_index = 0;
- dw->dvi.cache.font_size = -1;
- dw->dvi.cache.font_number = -1;
- dw->dvi.cache.adjustable[0] = 0;
- dw->dvi.file_map = 0;
- dw->dvi.fonts = 0;
- dw->dvi.seek = False;
- dw->dvi.device_resolution = dw->dvi.default_resolution;
- dw->dvi.display_resolution = dw->dvi.default_resolution;
- dw->dvi.paperlength = dw->dvi.default_resolution*11;
- dw->dvi.paperwidth = (dw->dvi.default_resolution*8
- + dw->dvi.default_resolution/2);
- dw->dvi.scale_factor = 1.0;
- dw->dvi.sizescale = 1;
- dw->dvi.line_thickness = -1;
- dw->dvi.line_width = 1;
- dw->dvi.fill = DVI_FILL_MAX;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- dw->dvi.device = 0;
- dw->dvi.native = 0;
-
- request = request; /* unused; suppress compiler warning */
- args = args;
- num_args = num_args;
-}
-
-#include "gray1.bm"
-#include "gray2.bm"
-#include "gray3.bm"
-#include "gray4.bm"
-#include "gray5.bm"
-#include "gray6.bm"
-#include "gray7.bm"
-#include "gray8.bm"
-
-static void
-Realize (Widget w, XtValueMask *valueMask, XSetWindowAttributes *attrs)
-{
- DviWidget dw = (DviWidget) w;
- XGCValues values;
-
- if (dw->dvi.backing_store != Always + WhenMapped + NotUseful) {
- attrs->backing_store = dw->dvi.backing_store;
- *valueMask |= CWBackingStore;
- }
- XtCreateWindow (w, (unsigned)InputOutput, (Visual *) CopyFromParent,
- *valueMask, attrs);
- values.foreground = dw->dvi.foreground;
- values.cap_style = CapRound;
- values.join_style = JoinRound;
- values.line_width = dw->dvi.line_width;
- dw->dvi.normal_GC = XCreateGC (XtDisplay (w), XtWindow (w),
- GCForeground|GCCapStyle|GCJoinStyle
- |GCLineWidth,
- &values);
- dw->dvi.gray[0] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray1_bits,
- gray1_width, gray1_height);
- dw->dvi.gray[1] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray2_bits,
- gray2_width, gray2_height);
- dw->dvi.gray[2] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray3_bits,
- gray3_width, gray3_height);
- dw->dvi.gray[3] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray4_bits,
- gray4_width, gray4_height);
- dw->dvi.gray[4] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray5_bits,
- gray5_width, gray5_height);
- dw->dvi.gray[5] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray6_bits,
- gray6_width, gray6_height);
- dw->dvi.gray[6] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray7_bits,
- gray7_width, gray7_height);
- dw->dvi.gray[7] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray8_bits,
- gray8_width, gray8_height);
- values.background = dw->dvi.background;
- values.stipple = dw->dvi.gray[5];
- dw->dvi.fill_GC = XCreateGC (XtDisplay (w), XtWindow (w),
- GCForeground|GCBackground|GCStipple,
- &values);
-
- dw->dvi.fill_type = 9;
-
- if (dw->dvi.file)
- OpenFile (dw);
- ParseFontMap (dw);
-}
-
-static void
-Destroy(Widget w)
-{
- DviWidget dw = (DviWidget) w;
-
- XFreeGC (XtDisplay (w), dw->dvi.normal_GC);
- XFreeGC (XtDisplay (w), dw->dvi.fill_GC);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[0]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[1]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[2]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[3]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[4]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[5]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[6]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[7]);
- DestroyFontMap (dw->dvi.font_map);
- DestroyFileMap (dw->dvi.file_map);
- device_destroy (dw->dvi.device);
-}
-
-/*
- * Repaint the widget window
- */
-
-/* ARGSUSED */
-static void
-Redisplay(Widget w, XEvent *event, Region region)
-{
- DviWidget dw = (DviWidget) w;
- XRectangle extents;
-
- XClipBox (region, &extents);
- dw->dvi.extents.x1 = extents.x;
- dw->dvi.extents.y1 = extents.y;
- dw->dvi.extents.x2 = extents.x + extents.width;
- dw->dvi.extents.y2 = extents.y + extents.height;
- ShowDvi (dw);
-
- event = event; /* unused; suppress compiler warning */
-}
-
-/*
- * Set specified arguments into widget
- */
-/* ARGSUSED */
-static Boolean
-SetValues (Widget wcurrent, Widget wrequest, Widget wnew,
- ArgList args, Cardinal *num_args)
-{
- Boolean redisplay = FALSE;
- char *new_map;
- int cur, req;
- DviWidget current = (DviWidget)wcurrent;
- DviWidget request = (DviWidget)wrequest;
- DviWidget new_wd = (DviWidget)wnew;
-
- if (current->dvi.font_map_string != request->dvi.font_map_string) {
- new_map = XtMalloc (strlen (request->dvi.font_map_string) + 1);
- if (new_map) {
- redisplay = TRUE;
- strcpy (new_map, request->dvi.font_map_string);
- new_wd->dvi.font_map_string = new_map;
- if (current->dvi.font_map_string)
- XtFree (current->dvi.font_map_string);
- current->dvi.font_map_string = 0;
- ParseFontMap (new_wd);
- }
- }
-
- req = request->dvi.requested_page;
- cur = current->dvi.requested_page;
- if (cur != req) {
- if (!request->dvi.file)
- req = 0;
- else {
- if (req < 1)
- req = 1;
- if (current->dvi.last_page != 0 &&
- req > current->dvi.last_page)
- req = current->dvi.last_page;
- }
- if (cur != req)
- redisplay = TRUE;
- new_wd->dvi.requested_page = req;
- if (current->dvi.last_page == 0 && req > cur)
- FindPage (new_wd);
- }
-
- args = args; /* unused; suppress compiler warning */
- num_args = num_args;
-
- return redisplay;
-}
-
-/*
- * use the set_values_hook entry to check when
- * the file is set
- */
-
-static Boolean
-SetValuesHook (Widget wdw, ArgList args, Cardinal *num_argsp)
-{
- Cardinal i;
- DviWidget dw = (DviWidget)wdw;
-
- for (i = 0; i < *num_argsp; i++) {
- if (!strcmp (args[i].name, XtNfile)) {
- CloseFile (dw);
- OpenFile (dw);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void CloseFile (DviWidget dw)
-{
- if (dw->dvi.tmpFile)
- fclose (dw->dvi.tmpFile);
- ForgetPagePositions (dw);
-}
-
-static void OpenFile (DviWidget dw)
-{
- dw->dvi.tmpFile = 0;
- if (!dw->dvi.seek)
- dw->dvi.tmpFile = tmpfile();
- dw->dvi.requested_page = 1;
- dw->dvi.last_page = 0;
-}
-
-static XtGeometryResult
-QueryGeometry (Widget w, XtWidgetGeometry *request,
- XtWidgetGeometry *geometry_return)
-{
- XtGeometryResult ret;
- DviWidget dw = (DviWidget) w;
-
- ret = XtGeometryYes;
- if (((request->request_mode & CWWidth)
- && request->width < MY_WIDTH(dw))
- || ((request->request_mode & CWHeight)
- && request->height < MY_HEIGHT(dw)))
- ret = XtGeometryAlmost;
- geometry_return->width = MY_WIDTH(dw);
- geometry_return->height = MY_HEIGHT(dw);
- geometry_return->request_mode = CWWidth|CWHeight;
- return ret;
-}
-
-void
-SetDevice (DviWidget dw, const char *name)
-{
- XtWidgetGeometry request, reply;
- XtGeometryResult ret;
-
- ForgetFonts (dw);
- dw->dvi.device = device_load (name);
- if (!dw->dvi.device)
- return;
- dw->dvi.sizescale = dw->dvi.device->sizescale;
- dw->dvi.device_resolution = dw->dvi.device->res;
- dw->dvi.native = dw->dvi.device->X11;
- dw->dvi.paperlength = dw->dvi.device->paperlength;
- dw->dvi.paperwidth = dw->dvi.device->paperwidth;
- if (dw->dvi.native) {
- dw->dvi.display_resolution = dw->dvi.device_resolution;
- dw->dvi.scale_factor = 1.0;
- }
- else {
- dw->dvi.display_resolution = dw->dvi.default_resolution;
- dw->dvi.scale_factor = ((double)dw->dvi.display_resolution
- / dw->dvi.device_resolution);
- }
- request.request_mode = CWWidth|CWHeight;
- request.width = MY_WIDTH(dw);
- request.height = MY_HEIGHT(dw);
- ret = XtMakeGeometryRequest ((Widget)dw, &request, &reply);
- if (ret == XtGeometryAlmost
- && reply.height >= request.height
- && reply.width >= request.width) {
- request.width = reply.width;
- request.height = reply.height;
- XtMakeGeometryRequest ((Widget)dw, &request, &reply);
- }
-}
-
-static void
-ShowDvi (DviWidget dw)
-{
- if (!dw->dvi.file) {
- static char Error[] = "No file selected";
-
- XSetFont (XtDisplay(dw), dw->dvi.normal_GC,
- dw->dvi.default_font->fid);
- XDrawString (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- 20, 20, Error, strlen (Error));
- return;
- }
-
- FindPage (dw);
-
- dw->dvi.display_enable = 1;
- ParseInput (dw);
- if (dw->dvi.last_page && dw->dvi.requested_page > dw->dvi.last_page)
- dw->dvi.requested_page = dw->dvi.last_page;
-}
-
-static void
-FindPage (DviWidget dw)
-{
- int i;
- long file_position;
-
- if (dw->dvi.requested_page < 1)
- dw->dvi.requested_page = 1;
-
- if (dw->dvi.last_page != 0 && dw->dvi.requested_page > dw->dvi.last_page)
- dw->dvi.requested_page = dw->dvi.last_page;
-
- file_position = SearchPagePosition (dw, dw->dvi.requested_page);
- if (file_position != -1) {
- FileSeek(dw, file_position);
- dw->dvi.current_page = dw->dvi.requested_page;
- } else {
- for (i=dw->dvi.requested_page; i > 0; i--) {
- file_position = SearchPagePosition (dw, i);
- if (file_position != -1)
- break;
- }
- if (file_position == -1)
- file_position = 0;
- FileSeek (dw, file_position);
-
- dw->dvi.current_page = i;
-
- dw->dvi.display_enable = 0;
- while (dw->dvi.current_page != dw->dvi.requested_page) {
- dw->dvi.current_page = ParseInput (dw);
- /*
- * at EOF, seek back to the beginning of this page.
- */
- if (!dw->dvi.readingTmp && feof (dw->dvi.file)) {
- file_position = SearchPagePosition (dw,
- dw->dvi.current_page);
- if (file_position != -1)
- FileSeek (dw, file_position);
- dw->dvi.requested_page = dw->dvi.current_page;
- break;
- }
- }
- }
-}
-
-void DviSaveToFile(Widget w, FILE *fp)
-{
- XtCheckSubclass(w, dviWidgetClass, NULL);
- (*((DviWidgetClass) XtClass(w))->command_class.save)(w, fp);
-}
-
-static
-void SaveToFile(Widget w, FILE *fp)
-{
- DviWidget dw = (DviWidget)w;
- long pos;
- int c;
-
- if (dw->dvi.tmpFile) {
- pos = ftell(dw->dvi.tmpFile);
- if (dw->dvi.ungot) {
- pos--;
- dw->dvi.ungot = 0;
- /* The ungot character is in the tmpFile, so we don't
- want to read it from file. */
- (void)getc(dw->dvi.file);
- }
- }
- else
- pos = ftell(dw->dvi.file);
- FileSeek(dw, 0L);
- while (DviGetC(dw, &c) != EOF)
- if (putc(c, fp) == EOF) {
- /* XXX print error message */
- break;
- }
- FileSeek(dw, pos);
-}
-
-static
-void ClassPartInitialize(WidgetClass widget_class)
-{
- DviWidgetClass wc = (DviWidgetClass)widget_class;
- DviWidgetClass super = (DviWidgetClass) wc->core_class.superclass;
- if (wc->command_class.save == InheritSaveToFile)
- wc->command_class.save = super->command_class.save;
-}
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/Dvi.h b/contrib/groff/src/devices/xditview/Dvi.h
deleted file mode 100644
index bf97374d0275..000000000000
--- a/contrib/groff/src/devices/xditview/Dvi.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* $XConsortium: Dvi.h,v 1.4 89/07/21 14:22:06 jim Exp $
-*/
-
-#ifndef _XtDvi_h
-#define _XtDvi_h
-
-/***********************************************************************
- *
- * Dvi Widget
- *
- ***********************************************************************/
-
-/* Parameters:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background pixel White
- foreground Foreground Pixel Black
- fontMap FontMap char * ...
- pageNumber PageNumber int 1
-*/
-
-#define XtNfontMap (String)"fontMap"
-#define XtNpageNumber (String)"pageNumber"
-#define XtNlastPageNumber (String)"lastPageNumber"
-#define XtNnoPolyText (String)"noPolyText"
-#define XtNseek (String)"seek"
-#define XtNresolution (String)"resolution"
-
-#define XtCFontMap (String)"FontMap"
-#define XtCPageNumber (String)"PageNumber"
-#define XtCLastPageNumber (String)"LastPageNumber"
-#define XtCNoPolyText (String)"NoPolyText"
-#define XtCSeek (String)"Seek"
-#define XtCResolution (String)"Resolution"
-
-typedef struct _DviRec *DviWidget; /* completely defined in DviP.h */
-typedef struct _DviClassRec *DviWidgetClass; /* completely defined in DviP.h */
-
-extern WidgetClass dviWidgetClass;
-
-void DviSaveToFile(Widget, FILE *);
-
-#endif /* _XtDvi_h */
-/* DON'T ADD STUFF AFTER THIS #endif */
diff --git a/contrib/groff/src/devices/xditview/DviP.h b/contrib/groff/src/devices/xditview/DviP.h
deleted file mode 100644
index 00f32c81bc5f..000000000000
--- a/contrib/groff/src/devices/xditview/DviP.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * $XConsortium: DviP.h,v 1.5 89/07/22 19:44:08 keith Exp $
- */
-
-/*
- * DviP.h - Private definitions for Dvi widget
- */
-
-#ifndef _XtDviP_h
-#define _XtDviP_h
-
-#include "Dvi.h"
-#include "DviChar.h"
-#include "device.h"
-
-/***********************************************************************
- *
- * Dvi Widget Private Data
- *
- ***********************************************************************/
-
-/************************************
- *
- * Class structure
- *
- ***********************************/
-
-/* Type for save method. */
-
-typedef void (*DviSaveProc)(Widget, FILE *);
-
-/*
- * New fields for the Dvi widget class record
- */
-
-
-typedef struct _DviClass {
- DviSaveProc save;
-} DviClassPart;
-
-/*
- * Full class record declaration
- */
-
-typedef struct _DviClassRec {
- CoreClassPart core_class;
- DviClassPart command_class;
-} DviClassRec;
-
-extern DviClassRec dviClassRec;
-
-/***************************************
- *
- * Instance (widget) structure
- *
- **************************************/
-
-/*
- * a list of fonts we've used for this widget
- */
-
-typedef struct _dviFontSizeList {
- struct _dviFontSizeList *next;
- int size;
- char *x_name;
- XFontStruct *font;
- int doesnt_exist;
-} DviFontSizeList;
-
-typedef struct _dviFontList {
- struct _dviFontList *next;
- char *dvi_name;
- char *x_name;
- int dvi_number;
- Boolean initialized;
- Boolean scalable;
- DviFontSizeList *sizes;
- DviCharNameMap *char_map;
- DeviceFont *device_font;
-} DviFontList;
-
-typedef struct _dviFontMap {
- struct _dviFontMap *next;
- char *dvi_name;
- char *x_name;
-} DviFontMap;
-
-#define DVI_TEXT_CACHE_SIZE 256
-#define DVI_CHAR_CACHE_SIZE 1024
-
-typedef struct _dviCharCache {
- XTextItem cache[DVI_TEXT_CACHE_SIZE];
- char adjustable[DVI_TEXT_CACHE_SIZE];
- char char_cache[DVI_CHAR_CACHE_SIZE];
- int index;
- int max;
- int char_index;
- int font_size;
- int font_number;
- XFontStruct *font;
- int start_x, start_y;
- int x, y;
-} DviCharCache;
-
-typedef struct _dviState {
- struct _dviState *next;
- int font_size;
- int font_number;
- int x;
- int y;
-} DviState;
-
-typedef struct _dviFileMap {
- struct _dviFileMap *next;
- long position;
- int page_number;
-} DviFileMap;
-
-/*
- * New fields for the Dvi widget record
- */
-
-typedef struct {
- /*
- * resource specifiable items
- */
- char *font_map_string;
- unsigned long foreground;
- unsigned long background;
- int requested_page;
- int last_page;
- XFontStruct *default_font;
- FILE *file;
- Boolean noPolyText;
- Boolean seek; /* file is "seekable" */
- int default_resolution;
- /*
- * private state
- */
- FILE *tmpFile; /* used when reading stdin */
- char readingTmp; /* reading now from tmp */
- char ungot; /* have ungetc'd a char */
- GC normal_GC;
- GC fill_GC;
- DviFileMap *file_map;
- DviFontList *fonts;
- DviFontMap *font_map;
- int current_page;
- int font_size;
- int font_number;
- DeviceFont *device_font;
- int device_font_number;
- Device *device;
- int native;
- int device_resolution;
- int display_resolution;
- int paperlength;
- int paperwidth;
- double scale_factor; /* display res / device res */
- int sizescale;
- int line_thickness;
- int line_width;
-
-#define DVI_FILL_MAX 1000
-
- int fill;
-#define DVI_FILL_WHITE 0
-#define DVI_FILL_GRAY 1
-#define DVI_FILL_BLACK 2
- int fill_type;
- Pixmap gray[8];
- int backing_store;
- XFontStruct *font;
- int display_enable;
- struct ExposedExtents {
- int x1, y1, x2, y2;
- } extents;
- DviState *state;
- DviCharCache cache;
- int text_x_width;
- int text_device_width;
- int word_flag;
-} DviPart;
-
-int DviGetAndPut(DviWidget, int *);
-#define DviGetIn(dw,cp)\
- (dw->dvi.tmpFile ? (\
- DviGetAndPut (dw, cp) \
- ) :\
- (*cp = getc (dw->dvi.file))\
-)
-
-#define DviGetC(dw, cp)\
- (dw->dvi.readingTmp ? (\
- ((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\
- fseek (dw->dvi.tmpFile, 0l, 2),\
- (dw->dvi.readingTmp = 0),\
- DviGetIn (dw,cp)\
- ) : (\
- *cp\
- )\
- ) : (\
- DviGetIn(dw,cp)\
- )\
-)
-
-#define DviUngetC(dw, c)\
- (dw->dvi.readingTmp ? (\
- ungetc (c, dw->dvi.tmpFile)\
- ) : ( \
- (dw->dvi.ungot = 1),\
- ungetc (c, dw->dvi.file)))
-
-/*
- * Full widget declaration
- */
-
-typedef struct _DviRec {
- CorePart core;
- DviPart dvi;
-} DviRec;
-
-#define InheritSaveToFile ((DviSaveProc)_XtInherit)
-
-XFontStruct *QueryFont (DviWidget, int, int);
-
-DviCharNameMap *QueryFontMap (DviWidget, int);
-
-DeviceFont *QueryDeviceFont (DviWidget, int);
-
-char *GetWord(DviWidget, char *, int);
-char *GetLine(DviWidget, char *, int);
-#endif /* _XtDviP_h */
diff --git a/contrib/groff/src/devices/xditview/FontMap b/contrib/groff/src/devices/xditview/FontMap
deleted file mode 100644
index 90911f048ded..000000000000
--- a/contrib/groff/src/devices/xditview/FontMap
+++ /dev/null
@@ -1,17 +0,0 @@
-TR -adobe-times-medium-r-normal--*-*-*-*-p-*-iso8859-1
-TI -adobe-times-medium-i-normal--*-*-*-*-p-*-iso8859-1
-TB -adobe-times-bold-r-normal--*-*-*-*-p-*-iso8859-1
-TBI -adobe-times-bold-i-normal--*-*-*-*-p-*-iso8859-1
-CR -adobe-courier-medium-r-normal--*-*-*-*-m-*-iso8859-1
-CI -adobe-courier-medium-o-normal--*-*-*-*-m-*-iso8859-1
-CB -adobe-courier-bold-r-normal--*-*-*-*-m-*-iso8859-1
-CBI -adobe-courier-bold-o-normal--*-*-*-*-m-*-iso8859-1
-HR -adobe-helvetica-medium-r-normal--*-*-*-*-p-*-iso8859-1
-HI -adobe-helvetica-medium-o-normal--*-*-*-*-p-*-iso8859-1
-HB -adobe-helvetica-bold-r-normal--*-*-*-*-p-*-iso8859-1
-HBI -adobe-helvetica-bold-o-normal--*-*-*-*-p-*-iso8859-1
-NR -adobe-new century schoolbook-medium-r-normal--*-*-*-*-p-*-iso8859-1
-NI -adobe-new century schoolbook-medium-i-normal--*-*-*-*-p-*-iso8859-1
-NB -adobe-new century schoolbook-bold-r-normal--*-*-*-*-p-*-iso8859-1
-NBI -adobe-new century schoolbook-bold-i-normal--*-*-*-*-p-*-iso8859-1
-S -adobe-symbol-medium-r-normal--*-*-*-*-p-*-adobe-fontspecific
diff --git a/contrib/groff/src/devices/xditview/GXditview.ad b/contrib/groff/src/devices/xditview/GXditview.ad
deleted file mode 100644
index e99ff5e16f38..000000000000
--- a/contrib/groff/src/devices/xditview/GXditview.ad
+++ /dev/null
@@ -1,57 +0,0 @@
-GXditview.height: 840
-
-GXditview.paned.allowResize: true
-GXditview.paned.viewport.allowVert: true
-GXditview.paned.viewport.allowHoriz: true
-GXditview.paned.viewport.skipAdjust: false
-GXditview.paned.viewport.width: 600
-GXditview.paned.viewport.height: 800
-GXditview.paned.viewport.showGrip: false
-GXditview.paned.label.skipAdjust: true
-
-GXditview.paned.viewport.dvi.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\n\
- <Key>Next: NextPage()\n\
- <Key>n: NextPage()\n\
- <Key>space: NextPage()\n\
- <Key>Return: NextPage()\n\
- <Key>Prior: PreviousPage()\n\
- <Key>p: PreviousPage()\n\
- <Key>BackSpace: PreviousPage()\n\
- <Key>Delete: PreviousPage()\n\
- <Key>Select: SelectPage()\n\
- <Key>Find: OpenFile()\n\
- <Key>r: Rerasterize()\n\
- <Key>q: Quit()
-GXditview.paned.label.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\n\
- <Key>Next: NextPage()\n\
- <Key>n: NextPage()\n\
- <Key>space: NextPage()\n\
- <Key>Return: NextPage()\n\
- <Key>Prior: PreviousPage()\n\
- <Key>p: PreviousPage()\n\
- <Key>BackSpace: PreviousPage()\n\
- <Key>Delete: PreviousPage()\n\
- <Key>Select: SelectPage()\n\
- <Key>Find: OpenFile()\n\
- <Key>r: Rerasterize()\n\
- <Key>q: Quit()
-GXditview.menu.nextPage.label: Next Page
-GXditview.menu.previousPage.label: Previous Page
-GXditview.menu.selectPage.label: Select Page
-GXditview.menu.print.label: Print
-GXditview.menu.openFile.label: Open
-GXditview.menu.quit.label: Quit
-
-GXditview.promptShell.allowShellResize: true
-GXditview.promptShell.promptDialog.value.translations: #override \
- <Key>Return: Accept()
-
-GXditview.promptShell.promptDialog.accept.label: Accept
-GXditview.promptShell.promptDialog.accept.translations: #override \
- <BtnUp>: Accept() unset()
-
-GXditview.promptShell.promptDialog.cancel.label: Cancel
-GXditview.promptShell.promptDialog.cancel.translations: #override \
- <BtnUp>: Cancel() unset()
diff --git a/contrib/groff/src/devices/xditview/Makefile.sub b/contrib/groff/src/devices/xditview/Makefile.sub
deleted file mode 100644
index f40302091d22..000000000000
--- a/contrib/groff/src/devices/xditview/Makefile.sub
+++ /dev/null
@@ -1,47 +0,0 @@
-PROG=gxditview$(EXEEXT)
-MAN1=gxditview.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL)
-EXTRA_CFLAGS=$(X_CFLAGS)
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=\
- device.$(OBJEXT) \
- draw.$(OBJEXT) \
- Dvi.$(OBJEXT) \
- font.$(OBJEXT) \
- lex.$(OBJEXT) \
- page.$(OBJEXT) \
- parse.$(OBJEXT) \
- xditview.$(OBJEXT)
-CSRCS=\
- $(srcdir)/device.c \
- $(srcdir)/draw.c \
- $(srcdir)/Dvi.c \
- $(srcdir)/font.c \
- $(srcdir)/lex.c \
- $(srcdir)/page.c \
- $(srcdir)/parse.c \
- $(srcdir)/xditview.c
-HDRS=\
- $(srcdir)/device.h \
- $(srcdir)/Dvi.h \
- $(srcdir)/DviP.h \
- $(srcdir)/Menu.h
-GENHDRS=GXditview-ad.h
-
-all depend: $(GENHDRS)
-
-GXditview-ad.h: $(srcdir)/GXditview.ad
- @echo Making $@
- @-rm -f $@
- $(SHELL) $(srcdir)/ad2c $(srcdir)/GXditview.ad >GXditview-ad.h
-
-install_data: $(srcdir)/GXditview.ad
- -test -d $(appresdir) || $(mkinstalldirs) $(appresdir)
- if test -f $(appresdir)/GXditview; then \
- mv $(appresdir)/GXditview $(appresdir)/GXditview.old; \
- fi
- $(INSTALL_DATA) $(srcdir)/GXditview.ad $(appresdir)/GXditview
-
-uninstall_sub:
- -rm -f $(appresdir)/GXditview
diff --git a/contrib/groff/src/devices/xditview/Menu.h b/contrib/groff/src/devices/xditview/Menu.h
deleted file mode 100644
index c306b2740a61..000000000000
--- a/contrib/groff/src/devices/xditview/Menu.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $XConsortium: Menu.h,v 1.2 89/07/21 14:22:10 jim Exp $
- */
-
-#ifndef _XtMenu_h
-#define _XtMenu_h
-
-/***********************************************************************
- *
- * Menu Widget
- *
- ***********************************************************************/
-
-/* Parameters:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background pixel White
- border BorderColor pixel Black
- borderWidth BorderWidth int 1
- height Height int 120
- mappedWhenManaged MappedWhenManaged Boolean True
- reverseVideo ReverseVideo Boolean False
- width Width int 120
- x Position int 0
- y Position int 0
-
-*/
-
-#define XtNmenuEntries "menuEntries"
-#define XtNhorizontalPadding "horizontalPadding"
-#define XtNverticalPadding "verticalPadding"
-#define XtNselection "Selection"
-
-#define XtCMenuEntries "MenuEntries"
-#define XtCPadding "Padding"
-#define XtCSelection "Selection"
-
-typedef struct _MenuRec *MenuWidget; /* completely defined in MenuPrivate.h */
-typedef struct _MenuClassRec *MenuWidgetClass; /* completely defined in MenuPrivate.h */
-
-extern WidgetClass menuWidgetClass;
-
-extern Widget XawMenuCreate ();
-#endif /* _XtMenu_h */
-/* DON'T ADD STUFF AFTER THIS #endif */
diff --git a/contrib/groff/src/devices/xditview/README b/contrib/groff/src/devices/xditview/README
deleted file mode 100644
index 1461b5ab6039..000000000000
--- a/contrib/groff/src/devices/xditview/README
+++ /dev/null
@@ -1,13 +0,0 @@
-This is gxditview, an X11 previewer for groff based on MIT's xditview.
-This version can be used with the output of gtroff -Tps as well as
-with -TX75 and -TX100. You will need X11R5 or newer to install it (it
-might work on X11R4, but I haven't tested it.)
-
-Previously, gxditview was installed in the usual place for X binaries
-(e.g., /usr/bin/X11); you have to remove it manually.
-
-xditview is copyrighted by MIT under the usual X terms (see
-gxditview.man); the changes to that which come along with the groff package
-are in the public domain.
-
-Please report bugs to bug-groff@gnu.org.
diff --git a/contrib/groff/src/devices/xditview/TODO b/contrib/groff/src/devices/xditview/TODO
deleted file mode 100644
index 161a7cf115ce..000000000000
--- a/contrib/groff/src/devices/xditview/TODO
+++ /dev/null
@@ -1,17 +0,0 @@
-Replace Imakefile with a configure script.
-
-Better error handling.
-
-Resource and command-line option to specify font path.
-
-Resource to specify name of environment variable from which to get the
-font path.
-
-Have character substitutions (currently done in draw.c:FakeCharacter)
-specified in a resource (similar format to FontMap).
-
-The initial width of the dialog box should expand to accommodate the
-default value.
-
-Option in Print dialog to specify that only the current page should be
-printed.
diff --git a/contrib/groff/src/devices/xditview/ad2c b/contrib/groff/src/devices/xditview/ad2c
deleted file mode 100644
index ad5d12157e5d..000000000000
--- a/contrib/groff/src/devices/xditview/ad2c
+++ /dev/null
@@ -1,64 +0,0 @@
-#! /bin/sh
-#
-# ad2c : Convert app-defaults file to C strings decls.
-#
-# George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990.
-# 19 Mar 1991: gf
-# Made it self-contained.
-# 6 Jan 1992: mycroft@gnu.ai.mit.edu (Charles Hannum)
-# Removed use of "-n" and ":read" label since Gnu and
-# IBM sed print pattern space on "n" command. Still works
-# with Sun sed, of course.
-# 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier)
-# Escape quotes after escaping backslashes.
-# 8 Jul 1992: Version 1.6
-# Manpage fixes.
-# 19 Apr 1993: Version 1.7
-# Remove comments that were inside the sed command since
-# some versions of sed don't like them. The comments are
-# now given here in the header.
-# 31 May 2004: Werner Lemberg <wl@gnu.org>
-# Force casts to `String'.
-#
-# Comments on the script by line:
-# /^!/d Remove comments
-# /^$/d Remove blanks
-# s/\\/\\\\/g Escape backslashes...
-# s/\\$//g ...except the line continuation ones
-# s/"/\\"/g Escape quotes
-# s/^/"/ Add leading quote and cast
-# : test Establish label for later branch
-# /\\$/b slash Branch to label "slash" if line ends in backslash
-# s/$/",/ Otherwise add closing quote and comma...
-# p ...output the line...
-# d ...and clear the pattern space so it's not printed again
-# : slash Branch comes here if line ends in backslash
-# n Read next line, append to pattern space
-# [...] The "d" and "s" commands that follow just delete
-# comments and blank lines and escape control sequences
-# b test Branch up to see if the line ends in backslash or not
-#
-
-sed '
-/^!/d
-/^$/d
-s/\\/\\\\/g
-s/\\$//g
-s/"/\\"/g
-s/^/(String)"/
-: test
-/\\$/b slash
-s/$/",/
-p
-d
-: slash
-n
-/^!/d
-/^$/d
-s/"/\\"/g
-s/\\\\/\\/g
-s/\\n/\\\\n/g
-s/\\t/\\\\t/g
-s/\\f/\\\\f/g
-s/\\b/\\\\b/g
-b test' "$@"
diff --git a/contrib/groff/src/devices/xditview/device.c b/contrib/groff/src/devices/xditview/device.c
deleted file mode 100644
index 2cb221944ac4..000000000000
--- a/contrib/groff/src/devices/xditview/device.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/* device.c */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <X11/Xos.h>
-#include <X11/Intrinsic.h>
-
-#include "device.h"
-#include "defs.h"
-
-#ifndef isascii
-#define isascii(c) (1)
-#endif
-
-/* Name of environment variable containing path to be used for
-searching for device and font description files. */
-#define FONTPATH_ENV_VAR "GROFF_FONT_PATH"
-
-#define WS " \t\r\n"
-
-#ifndef INT_MIN
-/* Minimum and maximum values a `signed int' can hold. */
-#define INT_MIN (-INT_MAX-1)
-#define INT_MAX 2147483647
-#endif
-
-#define CHAR_TABLE_SIZE 307
-
-struct _DeviceFont {
- char *name;
- int special;
- DeviceFont *next;
- Device *dev;
- struct charinfo *char_table[CHAR_TABLE_SIZE];
- struct charinfo *code_table[256];
-};
-
-struct charinfo {
- int width;
- int code;
- struct charinfo *next;
- struct charinfo *code_next;
- char name[1];
-};
-
-static char *current_filename = 0;
-static int current_lineno = -1;
-
-static void error(const char *s);
-static FILE *open_device_file(const char *, const char *, char **);
-static DeviceFont *load_font(Device *, const char *);
-static Device *new_device(const char *);
-static DeviceFont *new_font(const char *, Device *);
-static void delete_font(DeviceFont *);
-static unsigned hash_name(const char *);
-static struct charinfo *add_char(DeviceFont *, const char *, int, int);
-static int read_charset_section(DeviceFont *, FILE *);
-static char *canonicalize_name(const char *);
-static int scale_round(int, int, int);
-
-static
-Device *new_device(const char *name)
-{
- Device *dev;
-
- dev = XtNew(Device);
- dev->sizescale = 1;
- dev->res = 0;
- dev->unitwidth = 0;
- dev->fonts = 0;
- dev->X11 = 0;
- dev->paperlength = 0;
- dev->paperwidth = 0;
- dev->name = XtNewString(name);
- return dev;
-}
-
-void device_destroy(Device *dev)
-{
- DeviceFont *f;
-
- if (!dev)
- return;
- f = dev->fonts;
- while (f) {
- DeviceFont *tem = f;
- f = f->next;
- delete_font(tem);
- }
-
- XtFree(dev->name);
- XtFree((char *)dev);
-}
-
-Device *device_load(const char *name)
-{
- Device *dev;
- FILE *fp;
- int err = 0;
- char buf[256];
-
- fp = open_device_file(name, "DESC", &current_filename);
- if (!fp)
- return 0;
- dev = new_device(name);
- current_lineno = 0;
- while (fgets(buf, sizeof(buf), fp)) {
- char *p;
- current_lineno++;
- p = strtok(buf, WS);
- if (p) {
- int *np = 0;
- char *q;
-
- if (strcmp(p, "charset") == 0)
- break;
- if (strcmp(p, "X11") == 0)
- dev->X11 = 1;
- else if (strcmp(p, "sizescale") == 0)
- np = &dev->sizescale;
- else if (strcmp(p, "res") == 0)
- np = &dev->res;
- else if (strcmp(p, "unitwidth") == 0)
- np = &dev->unitwidth;
- else if (strcmp(p, "paperwidth") == 0)
- np = &dev->paperwidth;
- else if (strcmp(p, "paperlength") == 0)
- np = &dev->paperlength;
-
- if (np) {
- q = strtok((char *)0, WS);
- if (!q || sscanf(q, "%d", np) != 1 || *np <= 0) {
- error("bad argument");
- err = 1;
- break;
- }
- }
- }
- }
- fclose(fp);
- current_lineno = -1;
- if (!err) {
- if (dev->res == 0) {
- error("missing res line");
- err = 1;
- }
- else if (dev->unitwidth == 0) {
- error("missing unitwidth line");
- err = 1;
- }
- }
- if (dev->paperlength == 0)
- dev->paperlength = dev->res*11;
- if (dev->paperwidth == 0)
- dev->paperwidth = dev->res*8 + dev->res/2;
- if (err) {
- device_destroy(dev);
- dev = 0;
- }
- XtFree(current_filename);
- current_filename = 0;
- return dev;
-}
-
-
-DeviceFont *device_find_font(Device *dev, const char *name)
-{
- DeviceFont *f;
-
- if (!dev)
- return 0;
- for (f = dev->fonts; f; f = f->next)
- if (strcmp(f->name, name) == 0)
- return f;
- return load_font(dev, name);
-}
-
-static
-DeviceFont *load_font(Device *dev, const char *name)
-{
- FILE *fp;
- char buf[256];
- DeviceFont *f;
- int special = 0;
-
- fp = open_device_file(dev->name, name, &current_filename);
- if (!fp)
- return 0;
- current_lineno = 0;
- for (;;) {
- char *p;
-
- if (!fgets(buf, sizeof(buf), fp)) {
- error("no charset line");
- return 0;
- }
- current_lineno++;
- p = strtok(buf, WS);
- /* charset must be on a line by itself */
- if (p && strcmp(p, "charset") == 0 && strtok((char *)0, WS) == 0)
- break;
- if (p && strcmp(p, "special") == 0)
- special = 1;
- }
- f = new_font(name, dev);
- f->special = special;
- if (!read_charset_section(f, fp)) {
- delete_font(f);
- f = 0;
- }
- else {
- f->next = dev->fonts;
- dev->fonts = f;
- }
- fclose(fp);
- XtFree(current_filename);
- current_filename = 0;
- return f;
-}
-
-static
-DeviceFont *new_font(const char *name, Device *dev)
-{
- int i;
- DeviceFont *f;
-
- f = XtNew(DeviceFont);
- f->name = XtNewString(name);
- f->dev = dev;
- f->special = 0;
- f->next = 0;
- for (i = 0; i < CHAR_TABLE_SIZE; i++)
- f->char_table[i] = 0;
- for (i = 0; i < 256; i++)
- f->code_table[i] = 0;
- return f;
-}
-
-static
-void delete_font(DeviceFont *f)
-{
- int i;
-
- if (!f)
- return;
- XtFree(f->name);
- for (i = 0; i < CHAR_TABLE_SIZE; i++) {
- struct charinfo *ptr = f->char_table[i];
- while (ptr) {
- struct charinfo *tem = ptr;
- ptr = ptr->next;
- XtFree((char *)tem);
- }
- }
- XtFree((char *)f);
-}
-
-
-static
-unsigned hash_name(const char *name)
-{
- unsigned n = 0;
- /* XXX do better than this */
- while (*name)
- n = (n << 1) ^ *name++;
-
- return n;
-}
-
-static
-int scale_round(int n, int x, int y)
-{
- int y2;
-
- if (x == 0)
- return 0;
- y2 = y/2;
- if (n >= 0) {
- if (n <= (INT_MAX - y2)/x)
- return (n*x + y2)/y;
- return (int)(n*(double)x/(double)y + .5);
- }
- else {
- if (-(unsigned)n <= (-(unsigned)INT_MIN - y2)/x)
- return (n*x - y2)/y;
- return (int)(n*(double)x/(double)y + .5);
- }
-}
-
-static
-char *canonicalize_name(const char *s)
-{
- static char ch[2];
- if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') {
- const char *p;
- int n;
-
- for (p = s + 4; *p; p++)
- if (!isascii(*p) || !isdigit((unsigned char)*p))
- return (char *)s;
- n = atoi(s + 4);
- if (n >= 0 && n <= 0xff) {
- ch[0] = (char)n;
- return ch;
- }
- }
- return (char *)s;
-}
-
-/* Return 1 if the character is present in the font; widthp gets the
-width if non-null. */
-
-int device_char_width(DeviceFont *f, int ps, const char *name, int *widthp)
-{
- struct charinfo *p;
-
- name = canonicalize_name(name);
- for (p = f->char_table[hash_name(name) % CHAR_TABLE_SIZE];; p = p->next) {
- if (!p)
- return 0;
- if (strcmp(p->name, name) == 0)
- break;
- }
- *widthp = scale_round(p->width, ps, f->dev->unitwidth);
- return 1;
-}
-
-int device_code_width(DeviceFont *f, int ps, int code, int *widthp)
-{
- struct charinfo *p;
-
- for (p = f->code_table[code & 0xff];; p = p->code_next) {
- if (!p)
- return 0;
- if (p->code == code)
- break;
- }
- *widthp = scale_round(p->width, ps, f->dev->unitwidth);
- return 1;
-}
-
-char *device_name_for_code(DeviceFont *f, int code)
-{
- static struct charinfo *state = 0;
- if (f)
- state = f->code_table[code & 0xff];
- for (; state; state = state->code_next)
- if (state->code == code && state->name[0] != '\0') {
- char *name = state->name;
- state = state->code_next;
- return name;
- }
- return 0;
-}
-
-int device_font_special(DeviceFont *f)
-{
- return f->special;
-}
-
-static
-struct charinfo *add_char(DeviceFont *f, const char *name, int width, int code)
-{
- struct charinfo **pp;
- struct charinfo *ci;
-
- name = canonicalize_name(name);
- if (strcmp(name, "---") == 0)
- name = "";
-
- ci = (struct charinfo *)XtMalloc(XtOffsetOf(struct charinfo, name[0])
- + strlen(name) + 1);
-
- strcpy(ci->name, name);
- ci->width = width;
- ci->code = code;
-
- if (*name != '\0') {
- pp = &f->char_table[hash_name(name) % CHAR_TABLE_SIZE];
- ci->next = *pp;
- *pp = ci;
- }
- pp = &f->code_table[code & 0xff];
- ci->code_next = *pp;
- *pp = ci;
- return ci;
-}
-
-/* Return non-zero for success. */
-
-static
-int read_charset_section(DeviceFont *f, FILE *fp)
-{
- struct charinfo *last_charinfo = 0;
- char buf[256];
-
- while (fgets(buf, sizeof(buf), fp)) {
- char *name;
- int width;
- int code;
- char *p;
-
- current_lineno++;
- name = strtok(buf, WS);
- if (!name)
- continue; /* ignore blank lines */
- p = strtok((char *)0, WS);
- if (!p) /* end of charset section */
- break;
- if (strcmp(p, "\"") == 0) {
- if (!last_charinfo) {
- error("first line of charset section cannot use `\"'");
- return 0;
- }
- else
- (void)add_char(f, name,
- last_charinfo->width, last_charinfo->code);
- }
- else {
- char *q;
- if (sscanf(p, "%d", &width) != 1) {
- error("bad width field");
- return 0;
- }
- p = strtok((char *)0, WS);
- if (!p) {
- error("missing type field");
- return 0;
- }
- p = strtok((char *)0, WS);
- if (!p) {
- error("missing code field");
- return 0;
- }
- code = (int)strtol(p, &q, 0);
- if (q == p) {
- error("bad code field");
- return 0;
- }
- last_charinfo = add_char(f, name, width, code);
- }
- }
- return 1;
-}
-
-static
-FILE *find_file(const char *file, char **result)
-{
- char *buf = NULL;
- int bufsiz = 0;
- int flen;
- FILE *fp;
- char *path;
- char *env;
-
- env = getenv(FONTPATH_ENV_VAR);
- path = XtMalloc(((env && *env) ? strlen(env) + 1 : 0)
- + strlen(FONTPATH) + 1);
- *path = '\0';
- if (env && *env) {
- strcat(path, env);
- strcat(path, ":");
- }
- strcat(path, FONTPATH);
-
- *result = NULL;
-
- if (file == NULL)
- return NULL;
- if (*file == '\0')
- return NULL;
-
- if (*file == '/') {
- fp = fopen(file, "r");
- if (fp)
- *result = XtNewString(file);
- return fp;
- }
-
- flen = strlen(file);
-
- while (*path) {
- int len;
- char *start, *end;
-
- start = path;
- end = strchr(path, ':');
- if (end)
- path = end + 1;
- else
- path = end = strchr(path, '\0');
- if (start >= end)
- continue;
- if (end[-1] == '/')
- --end;
- len = (end - start) + 1 + flen + 1;
- if (len > bufsiz) {
- if (buf)
- buf = XtRealloc(buf, len);
- else
- buf = XtMalloc(len);
- bufsiz = len;
- }
- memcpy(buf, start, end - start);
- buf[end - start] = '/';
- strcpy(buf + (end - start) + 1, file);
- fp = fopen(buf, "r");
- if (fp) {
- *result = buf;
- return fp;
- }
- }
- XtFree(buf);
- return NULL;
-}
-
-static
-FILE *open_device_file(const char *device_name, const char *file_name,
- char **result)
-{
- char *buf;
- FILE *fp;
-
- buf = XtMalloc(3 + strlen(device_name) + 1 + strlen(file_name) + 1);
- sprintf(buf, "dev%s/%s", device_name, file_name);
- fp = find_file(buf, result);
- if (!fp) {
- fprintf(stderr, "can't find device file `%s'\n", file_name);
- fflush(stderr);
- }
- XtFree(buf);
- return fp;
-}
-
-static
-void error(const char *s)
-{
- if (current_filename) {
- fprintf(stderr, "%s:", current_filename);
- if (current_lineno > 0)
- fprintf(stderr, "%d:", current_lineno);
- putc(' ', stderr);
- }
- fputs(s, stderr);
- putc('\n', stderr);
- fflush(stderr);
-}
-
-/*
-Local Variables:
-c-indent-level: 4
-c-continued-statement-offset: 4
-c-brace-offset: -4
-c-argdecl-indent: 4
-c-label-offset: -4
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/device.h b/contrib/groff/src/devices/xditview/device.h
deleted file mode 100644
index 6f2944b5ecf4..000000000000
--- a/contrib/groff/src/devices/xditview/device.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-typedef struct _DeviceFont DeviceFont;
-
-typedef struct _Device {
- char *name;
- int sizescale;
- int res;
- int unitwidth;
- int paperlength;
- int paperwidth;
- int X11;
- DeviceFont *fonts;
-} Device;
-
-void device_destroy(Device *);
-Device *device_load(const char *);
-DeviceFont *device_find_font(Device *, const char *);
-int device_char_width(DeviceFont *, int, const char *, int *);
-char *device_name_for_code(DeviceFont *, int);
-int device_code_width(DeviceFont *, int, int, int *);
-int device_font_special(DeviceFont *);
diff --git a/contrib/groff/src/devices/xditview/draw.c b/contrib/groff/src/devices/xditview/draw.c
deleted file mode 100644
index a808abafbb02..000000000000
--- a/contrib/groff/src/devices/xditview/draw.c
+++ /dev/null
@@ -1,699 +0,0 @@
-/*
- * draw.c
- *
- * accept dvi function calls and translate to X
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <math.h>
-
-/* math.h on a Sequent doesn't define M_PI, apparently */
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#include "DviP.h"
-
-#define DeviceToX(dw, n) ((int)((n) * (dw)->dvi.scale_factor + .5))
-#define XPos(dw) (DeviceToX((dw), (dw)->dvi.state->x - \
- (dw)->dvi.text_device_width) + (dw)->dvi.text_x_width)
-#define YPos(dw) (DeviceToX((dw), (dw)->dvi.state->y))
-
-static int FakeCharacter(DviWidget, char *, int);
-
-/* font.c */
-extern int MaxFontPosition(DviWidget);
-
-void
-HorizontalMove(DviWidget dw, int delta)
-{
- dw->dvi.state->x += delta;
-}
-
-void
-HorizontalGoto(DviWidget dw, int NewPosition)
-{
- dw->dvi.state->x = NewPosition;
-}
-
-void
-VerticalMove(DviWidget dw, int delta)
-{
- dw->dvi.state->y += delta;
-}
-
-void
-VerticalGoto(DviWidget dw, int NewPosition)
-{
- dw->dvi.state->y = NewPosition;
-}
-
-void
-AdjustCacheDeltas (DviWidget dw)
-{
- int extra;
- int nadj;
- int i;
-
- nadj = 0;
- extra = DeviceToX(dw, dw->dvi.text_device_width)
- - dw->dvi.text_x_width;
- if (extra == 0)
- return;
- for (i = 0; i <= dw->dvi.cache.index; i++)
- if (dw->dvi.cache.adjustable[i])
- ++nadj;
- dw->dvi.text_x_width += extra;
- if (nadj <= 1)
- return;
- for (i = 0; i <= dw->dvi.cache.index; i++)
- if (dw->dvi.cache.adjustable[i]) {
- int x;
- int *deltap;
-
- x = extra/nadj;
- deltap = &dw->dvi.cache.cache[i].delta;
-#define MIN_DELTA 2
- if (*deltap > 0 && x + *deltap < MIN_DELTA) {
- x = MIN_DELTA - *deltap;
- if (x <= 0)
- *deltap = MIN_DELTA;
- else
- x = 0;
- }
- else
- *deltap += x;
- extra -= x;
- --nadj;
- dw->dvi.cache.adjustable[i] = 0;
- }
-}
-
-void
-FlushCharCache (DviWidget dw)
-{
- if (dw->dvi.cache.char_index != 0) {
- AdjustCacheDeltas (dw);
- XDrawText (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- dw->dvi.cache.start_x, dw->dvi.cache.start_y,
- dw->dvi.cache.cache, dw->dvi.cache.index + 1);
- }
- dw->dvi.cache.index = 0;
- dw->dvi.cache.max = DVI_TEXT_CACHE_SIZE;
-#if 0
- if (dw->dvi.noPolyText)
- dw->dvi.cache.max = 1;
-#endif
- dw->dvi.cache.char_index = 0;
- dw->dvi.cache.cache[0].nchars = 0;
- dw->dvi.cache.start_x = dw->dvi.cache.x = XPos (dw);
- dw->dvi.cache.start_y = dw->dvi.cache.y = YPos (dw);
-}
-
-void
-Newline (DviWidget dw)
-{
- FlushCharCache (dw);
- dw->dvi.text_x_width = dw->dvi.text_device_width = 0;
- dw->dvi.word_flag = 0;
-}
-
-void
-Word (DviWidget dw)
-{
- dw->dvi.word_flag = 1;
-}
-
-#define charWidth(fi,c) (\
- (fi)->per_char ?\
- (fi)->per_char[(c) - (fi)->min_char_or_byte2].width\
- :\
- (fi)->max_bounds.width\
-)
-
-
-static
-int charExists (XFontStruct *fi, int c)
-{
- XCharStruct *p;
-
- /* `c' is always >= 0 */
- if (fi->per_char == NULL
- || (unsigned int)c < fi->min_char_or_byte2
- || (unsigned int)c > fi->max_char_or_byte2)
- return 0;
- p = fi->per_char + (c - fi->min_char_or_byte2);
- return (p->lbearing != 0 || p->rbearing != 0 || p->width != 0
- || p->ascent != 0 || p->descent != 0 || p->attributes != 0);
-}
-
-/* `wid' is in device units */
-static void
-DoCharacter (DviWidget dw, int c, int wid)
-{
- register XFontStruct *font;
- register XTextItem *text;
- int x, y;
-
- x = XPos(dw);
- y = YPos(dw);
-
- /*
- * quick and dirty extents calculation:
- */
- if (!(y + 24 >= dw->dvi.extents.y1
- && y - 24 <= dw->dvi.extents.y2
-#if 0
- && x + 24 >= dw->dvi.extents.x1
- && x - 24 <= dw->dvi.extents.x2
-#endif
- ))
- return;
-
- if (y != dw->dvi.cache.y
- || dw->dvi.cache.char_index >= DVI_CHAR_CACHE_SIZE) {
- FlushCharCache (dw);
- x = dw->dvi.cache.x;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- /*
- * load a new font, if the current block is not empty,
- * step to the next.
- */
- if (dw->dvi.cache.font_size != dw->dvi.state->font_size ||
- dw->dvi.cache.font_number != dw->dvi.state->font_number)
- {
- FlushCharCache (dw);
- x = dw->dvi.cache.x;
- dw->dvi.cache.font_size = dw->dvi.state->font_size;
- dw->dvi.cache.font_number = dw->dvi.state->font_number;
- dw->dvi.cache.font = QueryFont (dw,
- dw->dvi.cache.font_number,
- dw->dvi.cache.font_size);
- if (dw->dvi.cache.cache[dw->dvi.cache.index].nchars != 0) {
- ++dw->dvi.cache.index;
- if (dw->dvi.cache.index >= dw->dvi.cache.max)
- FlushCharCache (dw);
- dw->dvi.cache.cache[dw->dvi.cache.index].nchars = 0;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- }
- if (x != dw->dvi.cache.x || dw->dvi.word_flag) {
- if (dw->dvi.cache.cache[dw->dvi.cache.index].nchars != 0) {
- ++dw->dvi.cache.index;
- if (dw->dvi.cache.index >= dw->dvi.cache.max)
- FlushCharCache (dw);
- dw->dvi.cache.cache[dw->dvi.cache.index].nchars = 0;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- dw->dvi.cache.adjustable[dw->dvi.cache.index]
- = dw->dvi.word_flag;
- dw->dvi.word_flag = 0;
- }
- font = dw->dvi.cache.font;
- text = &dw->dvi.cache.cache[dw->dvi.cache.index];
- if (text->nchars == 0) {
- text->chars = &dw->dvi.cache.char_cache[dw->dvi.cache.char_index];
- text->delta = x - dw->dvi.cache.x;
- if (font != dw->dvi.font) {
- text->font = font->fid;
- dw->dvi.font = font;
- } else
- text->font = None;
- dw->dvi.cache.x += text->delta;
- }
- if (charExists(font, c)) {
- int w;
- dw->dvi.cache.char_cache[dw->dvi.cache.char_index++] = (char) c;
- ++text->nchars;
- w = charWidth(font, c);
- dw->dvi.cache.x += w;
- if (wid != 0) {
- dw->dvi.text_x_width += w;
- dw->dvi.text_device_width += wid;
- }
- }
-}
-
-static
-int FindCharWidth (DviWidget dw, char *buf, int *widp)
-{
- int maxpos;
- int i;
-
- if (dw->dvi.device_font == 0
- || dw->dvi.state->font_number != dw->dvi.device_font_number) {
- dw->dvi.device_font_number = dw->dvi.state->font_number;
- dw->dvi.device_font
- = QueryDeviceFont (dw, dw->dvi.device_font_number);
- }
- if (dw->dvi.device_font
- && device_char_width (dw->dvi.device_font,
- dw->dvi.state->font_size, buf, widp))
- return 1;
-
- maxpos = MaxFontPosition (dw);
- for (i = 1; i <= maxpos; i++) {
- DeviceFont *f = QueryDeviceFont (dw, i);
- if (f && device_font_special (f)
- && device_char_width (f, dw->dvi.state->font_size,
- buf, widp)) {
- dw->dvi.state->font_number = i;
- return 1;
- }
- }
- return 0;
-}
-
-/* Return the width of the character in device units. */
-
-int PutCharacter (DviWidget dw, char *buf)
-{
- int prevFont;
- int c = -1;
- int wid = 0;
- DviCharNameMap *map;
-
- if (!dw->dvi.display_enable)
- return 0; /* The width doesn't matter in this case. */
- prevFont = dw->dvi.state->font_number;
- if (!FindCharWidth (dw, buf, &wid))
- return 0;
- map = QueryFontMap (dw, dw->dvi.state->font_number);
- if (map)
- c = DviCharIndex (map, buf);
- if (c >= 0)
- DoCharacter (dw, c, wid);
- else
- (void) FakeCharacter (dw, buf, wid);
- dw->dvi.state->font_number = prevFont;
- return wid;
-}
-
-/* Return 1 if we can fake it; 0 otherwise. */
-
-static
-int FakeCharacter (DviWidget dw, char *buf, int wid)
-{
- int oldx, oldw;
- char ch[2];
- const char *chars = 0;
-
- if (buf[0] == '\0' || buf[1] == '\0' || buf[2] != '\0')
- return 0;
-#define pack2(c1, c2) (((c1) << 8) | (c2))
-
- switch (pack2(buf[0], buf[1])) {
- case pack2('f', 'i'):
- chars = "fi";
- break;
- case pack2('f', 'l'):
- chars = "fl";
- break;
- case pack2('f', 'f'):
- chars = "ff";
- break;
- case pack2('F', 'i'):
- chars = "ffi";
- break;
- case pack2('F', 'l'):
- chars = "ffl";
- break;
- }
- if (!chars)
- return 0;
- oldx = dw->dvi.state->x;
- oldw = dw->dvi.text_device_width;
- ch[1] = '\0';
- for (; *chars; chars++) {
- ch[0] = *chars;
- dw->dvi.state->x += PutCharacter (dw, ch);
- }
- dw->dvi.state->x = oldx;
- dw->dvi.text_device_width = oldw + wid;
- return 1;
-}
-
-void
-PutNumberedCharacter (DviWidget dw, int c)
-{
- char *name;
- int wid;
- DviCharNameMap *map;
-
- if (!dw->dvi.display_enable)
- return;
-
- if (dw->dvi.device_font == 0
- || dw->dvi.state->font_number != dw->dvi.device_font_number) {
- dw->dvi.device_font_number = dw->dvi.state->font_number;
- dw->dvi.device_font
- = QueryDeviceFont (dw, dw->dvi.device_font_number);
- }
-
- if (dw->dvi.device_font == 0
- || !device_code_width (dw->dvi.device_font,
- dw->dvi.state->font_size, c, &wid))
- return;
- if (dw->dvi.native) {
- DoCharacter (dw, c, wid);
- return;
- }
- map = QueryFontMap (dw, dw->dvi.state->font_number);
- if (!map)
- return;
- for (name = device_name_for_code (dw->dvi.device_font, c);
- name;
- name = device_name_for_code ((DeviceFont *)0, c)) {
- int code = DviCharIndex (map, name);
- if (code >= 0) {
- DoCharacter (dw, code, wid);
- break;
- }
- if (FakeCharacter (dw, name, wid))
- break;
- }
-}
-
-void
-ClearPage (DviWidget dw)
-{
- XClearWindow (XtDisplay (dw), XtWindow (dw));
-}
-
-static void
-setGC (DviWidget dw)
-{
- int desired_line_width;
-
- if (dw->dvi.line_thickness < 0)
- desired_line_width = (int)(((double)dw->dvi.device_resolution
- * dw->dvi.state->font_size)
- / (10.0*72.0*dw->dvi.sizescale));
- else
- desired_line_width = dw->dvi.line_thickness;
-
- if (desired_line_width != dw->dvi.line_width) {
- XGCValues values;
- values.line_width = DeviceToX(dw, desired_line_width);
- if (values.line_width == 0)
- values.line_width = 1;
- XChangeGC(XtDisplay (dw), dw->dvi.normal_GC,
- GCLineWidth, &values);
- dw->dvi.line_width = desired_line_width;
- }
-}
-
-static void
-setFillGC (DviWidget dw)
-{
- int fill_type;
- unsigned long mask = GCFillStyle | GCForeground;
-
- fill_type = (dw->dvi.fill * 10) / (DVI_FILL_MAX + 1);
- if (dw->dvi.fill_type != fill_type) {
- XGCValues values;
- if (fill_type <= 0) {
- values.foreground = dw->dvi.background;
- values.fill_style = FillSolid;
- } else if (fill_type >= 9) {
- values.foreground = dw->dvi.foreground;
- values.fill_style = FillSolid;
- } else {
- values.foreground = dw->dvi.foreground;
- values.fill_style = FillOpaqueStippled;
- values.stipple = dw->dvi.gray[fill_type - 1];
- mask |= GCStipple;
- }
- XChangeGC(XtDisplay (dw), dw->dvi.fill_GC, mask, &values);
- dw->dvi.fill_type = fill_type;
- }
-}
-
-void
-DrawLine (DviWidget dw, int x, int y)
-{
- int xp, yp;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- xp = XPos (dw);
- yp = YPos (dw);
- XDrawLine (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- xp, yp,
- xp + DeviceToX (dw, x), yp + DeviceToX (dw, y));
-}
-
-void
-DrawCircle (DviWidget dw, int diam)
-{
- int d;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- d = DeviceToX (dw, diam);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
-}
-
-void
-DrawFilledCircle (DviWidget dw, int diam)
-{
- int d;
-
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- d = DeviceToX (dw, diam);
- XFillArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
-}
-
-void
-DrawEllipse (DviWidget dw, int a, int b)
-{
- AdjustCacheDeltas (dw);
- setGC (dw);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
-}
-
-void
-DrawFilledEllipse (DviWidget dw, int a, int b)
-{
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- XFillArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
-}
-
-void
-DrawArc (DviWidget dw, int x_0, int y_0, int x_1, int y_1)
-{
- int angle1, angle2;
- int rad = (int)((sqrt ((double)x_0*x_0 + (double)y_0*y_0)
- + sqrt ((double)x_1*x_1 + (double)y_1*y_1)
- + 1.0)/2.0);
- if ((x_0 == 0 && y_0 == 0) || (x_1 == 0 && y_1 == 0))
- return;
- angle1 = (int)(atan2 ((double)y_0, (double)-x_0)*180.0*64.0/M_PI);
- angle2 = (int)(atan2 ((double)-y_1, (double)x_1)*180.0*64.0/M_PI);
-
- angle2 -= angle1;
- if (angle2 < 0)
- angle2 += 64*360;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
-
- rad = DeviceToX (dw, rad);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw) + DeviceToX (dw, x_0) - rad,
- YPos (dw) + DeviceToX (dw, y_0) - rad,
- rad*2, rad*2, angle1, angle2);
-}
-
-void
-DrawPolygon (DviWidget dw, int *v, int n)
-{
- XPoint *p;
- int i;
- int dx, dy;
-
- n /= 2;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- p = (XPoint *)XtMalloc((n + 2)*sizeof(XPoint));
- p[0].x = XPos (dw);
- p[0].y = YPos (dw);
- dx = 0;
- dy = 0;
- for (i = 0; i < n; i++) {
- dx += v[2*i];
- p[i + 1].x = DeviceToX (dw, dx) + p[0].x;
- dy += v[2*i + 1];
- p[i + 1].y = DeviceToX (dw, dy) + p[0].y;
- }
- p[n+1].x = p[0].x;
- p[n+1].y = p[0].y;
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- p, n + 2, CoordModeOrigin);
- XtFree((char *)p);
-}
-
-void
-DrawFilledPolygon (DviWidget dw, int *v, int n)
-{
- XPoint *p;
- int i;
- int dx, dy;
-
- n /= 2;
- if (n < 2)
- return;
-
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- p = (XPoint *)XtMalloc((n + 2)*sizeof(XPoint));
- p[0].x = p[n+1].x = XPos (dw);
- p[0].y = p[n+1].y = YPos (dw);
- dx = 0;
- dy = 0;
- for (i = 0; i < n; i++) {
- dx += v[2*i];
- p[i + 1].x = DeviceToX (dw, dx) + p[0].x;
- dy += v[2*i + 1];
- p[i + 1].y = DeviceToX (dw, dy) + p[0].y;
- }
- XFillPolygon (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- p, n + 1, Complex, CoordModeOrigin);
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- p, n + 2, CoordModeOrigin);
- XtFree((char *)p);
-}
-
-#define POINTS_MAX 10000
-
-static void
-appendPoint(XPoint *points, int *pointi, int x, int y)
-{
- if (*pointi < POINTS_MAX) {
- points[*pointi].x = x;
- points[*pointi].y = y;
- *pointi += 1;
- }
-}
-
-#define FLATNESS 1
-
-static void
-flattenCurve(XPoint *points, int *pointi,
- int x_2, int y_2, int x_3, int y_3, int x_4, int y_4)
-{
- int x_1, y_1, dx, dy, n1, n2, n;
-
- x_1 = points[*pointi - 1].x;
- y_1 = points[*pointi - 1].y;
-
- dx = x_4 - x_1;
- dy = y_4 - y_1;
-
- n1 = dy*(x_2 - x_1) - dx*(y_2 - y_1);
- n2 = dy*(x_3 - x_1) - dx*(y_3 - y_1);
- if (n1 < 0)
- n1 = -n1;
- if (n2 < 0)
- n2 = -n2;
- n = n1 > n2 ? n1 : n2;
-
- if (n*n / (dy*dy + dx*dx) <= FLATNESS*FLATNESS)
- appendPoint (points, pointi, x_4, y_4);
- else {
- flattenCurve (points, pointi,
- (x_1 + x_2)/2,
- (y_1 + y_2)/2,
- (x_1 + x_2*2 + x_3)/4,
- (y_1 + y_2*2 + y_3)/4,
- (x_1 + 3*x_2 + 3*x_3 + x_4)/8,
- (y_1 + 3*y_2 + 3*y_3 + y_4)/8);
- flattenCurve (points, pointi,
- (x_2 + x_3*2 + x_4)/4,
- (y_2 + y_3*2 + y_4)/4,
- (x_3 + x_4)/2,
- (y_3 + y_4)/2,
- x_4,
- y_4);
- }
-}
-
-void
-DrawSpline (DviWidget dw, int *v, int n)
-{
- int sx, sy, tx, ty;
- int ox, oy, dx, dy;
- int i;
- int pointi;
- XPoint points[POINTS_MAX];
-
- if (n == 0 || (n & 1) != 0)
- return;
- AdjustCacheDeltas (dw);
- setGC (dw);
- ox = XPos (dw);
- oy = YPos (dw);
- dx = v[0];
- dy = v[1];
- sx = ox;
- sy = oy;
- tx = sx + DeviceToX (dw, dx);
- ty = sy + DeviceToX (dw, dy);
-
- pointi = 0;
-
- appendPoint (points, &pointi, sx, sy);
- appendPoint (points, &pointi, (sx + tx)/2, (sy + ty)/2);
-
- for (i = 2; i < n; i += 2) {
- int ux = ox + DeviceToX (dw, dx += v[i]);
- int uy = oy + DeviceToX (dw, dy += v[i+1]);
- flattenCurve (points, &pointi,
- (sx + tx*5)/6, (sy + ty*5)/6,
- (tx*5 + ux)/6, (ty*5 + uy)/6,
- (tx + ux)/2, (ty + uy)/2);
- sx = tx;
- sy = ty;
- tx = ux;
- ty = uy;
- }
-
- appendPoint (points, &pointi, tx, ty);
-
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- points, pointi, CoordModeOrigin);
-}
-
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/font.c b/contrib/groff/src/devices/xditview/font.c
deleted file mode 100644
index c111a7b9f8ed..000000000000
--- a/contrib/groff/src/devices/xditview/font.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * font.c
- *
- * map dvi fonts to X fonts
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include "DviP.h"
-#include "XFontName.h"
-
-static void DisposeFontSizes(DviWidget, DviFontSizeList *);
-void DestroyFontMap(DviFontMap *);
-
-static char *
-savestr (const char *s)
-{
- char *n;
-
- if (!s)
- return 0;
- n = XtMalloc (strlen (s) + 1);
- if (n)
- strcpy (n, s);
- return n;
-}
-
-static DviFontList *
-LookupFontByPosition (DviWidget dw, int position)
-{
- DviFontList *f;
-
- for (f = dw->dvi.fonts; f; f = f->next)
- if (f->dvi_number == position)
- break;
- return f;
-}
-
-int
-MaxFontPosition (DviWidget dw)
-{
- DviFontList *f;
- int n = -1;
-
- for (f = dw->dvi.fonts; f; f = f->next)
- if (f->dvi_number > n)
- n = f->dvi_number;
- return n;
-}
-
-static DviFontSizeList *
-LookupFontSizeBySize (DviWidget dw, DviFontList *f, int size)
-{
- DviFontSizeList *fs, *best = 0, *smallest = 0;
- int bestsize = 0;
- XFontName fontName;
- unsigned int fontNameAttributes;
- char fontNameString[2048];
- int decipointsize;
-
- if (f->scalable) {
- decipointsize = (10*size)/dw->dvi.sizescale;
- for (best = f->sizes; best; best = best->next)
- if (best->size == decipointsize)
- return best;
- best = (DviFontSizeList *) XtMalloc(sizeof *best);
- best->next = f->sizes;
- best->size = decipointsize;
- f->sizes = best;
- XParseFontName (f->x_name, &fontName, &fontNameAttributes);
- fontNameAttributes &= ~(FontNamePixelSize|FontNameAverageWidth);
- fontNameAttributes |= FontNameResolutionX;
- fontNameAttributes |= FontNameResolutionY;
- fontNameAttributes |= FontNamePointSize;
- fontName.ResolutionX = dw->dvi.display_resolution;
- fontName.ResolutionY = dw->dvi.display_resolution;
- fontName.PointSize = decipointsize;
- XFormatFontName (&fontName, fontNameAttributes, fontNameString);
- best->x_name = savestr (fontNameString);
- best->doesnt_exist = 0;
- best->font = 0;
- return best;
- }
- for (fs = f->sizes; fs; fs=fs->next) {
- if (dw->dvi.sizescale*fs->size <= 10*size
- && fs->size >= bestsize) {
- best = fs;
- bestsize = fs->size;
- }
- if (smallest == 0 || fs->size < smallest->size)
- smallest = fs;
- }
- return best ? best : smallest;
-}
-
-static char *
-SkipFontNameElement (char *n)
-{
- while (*n != '-')
- if (!*++n)
- return 0;
- return n+1;
-}
-
-# define SizePosition 8
-# define EncodingPosition 13
-
-static int
-ConvertFontNameToSize (char *n)
-{
- int i, size;
-
- for (i = 0; i < SizePosition; i++) {
- n = SkipFontNameElement (n);
- if (!n)
- return -1;
- }
- size = atoi (n);
- return size;
-}
-
-static char *
-ConvertFontNameToEncoding (char *n)
-{
- int i;
- for (i = 0; i < EncodingPosition; i++) {
- n = SkipFontNameElement (n);
- if (!n)
- return 0;
- }
- return n;
-}
-
-DviFontSizeList *
-InstallFontSizes (DviWidget dw, const char *x_name, Boolean *scalablep)
-{
- char fontNameString[2048];
- char **fonts;
- int i, count;
- int size;
- DviFontSizeList *sizes, *new_size;
- XFontName fontName;
- unsigned int fontNameAttributes;
-
- *scalablep = FALSE;
- if (!XParseFontName ((XFontNameString)x_name, &fontName,
- &fontNameAttributes))
- return 0;
- fontNameAttributes &= ~(FontNamePixelSize|FontNamePointSize
- |FontNameAverageWidth);
- fontNameAttributes |= FontNameResolutionX;
- fontNameAttributes |= FontNameResolutionY;
- fontName.ResolutionX = dw->dvi.display_resolution;
- fontName.ResolutionY = dw->dvi.display_resolution;
- XFormatFontName (&fontName, fontNameAttributes, fontNameString);
- fonts = XListFonts (XtDisplay (dw), fontNameString, 10000000, &count);
- sizes = 0;
- for (i = 0; i < count; i++) {
- size = ConvertFontNameToSize (fonts[i]);
- if (size == 0) {
- DisposeFontSizes (dw, sizes);
- sizes = 0;
- *scalablep = TRUE;
- break;
- }
- if (size != -1) {
- new_size = (DviFontSizeList *) XtMalloc (sizeof *new_size);
- new_size->next = sizes;
- new_size->size = size;
- new_size->x_name = savestr (fonts[i]);
- new_size->doesnt_exist = 0;
- new_size->font = 0;
- sizes = new_size;
- }
- }
- XFreeFontNames (fonts);
- return sizes;
-}
-
-static void
-DisposeFontSizes (DviWidget dw, DviFontSizeList *fs)
-{
- DviFontSizeList *next;
-
- for (; fs; fs=next) {
- next = fs->next;
- if (fs->x_name)
- XtFree (fs->x_name);
- if (fs->font && fs->font != dw->dvi.default_font) {
- XUnloadFont (XtDisplay (dw), fs->font->fid);
- XFree ((char *)fs->font);
- }
- XtFree ((char *) fs);
- }
-}
-
-static DviFontList *
-InstallFont (DviWidget dw, int position,
- const char *dvi_name, const char *x_name)
-{
- DviFontList *f;
- char *encoding;
-
- if ((f = LookupFontByPosition (dw, position)) != NULL) {
- /*
- * ignore gratuitous font loading
- */
- if (!strcmp (f->dvi_name, dvi_name) &&
- !strcmp (f->x_name, x_name))
- return f;
-
- DisposeFontSizes (dw, f->sizes);
- if (f->dvi_name)
- XtFree (f->dvi_name);
- if (f->x_name)
- XtFree (f->x_name);
- f->device_font = 0;
- } else {
- f = (DviFontList *) XtMalloc (sizeof (*f));
- f->next = dw->dvi.fonts;
- dw->dvi.fonts = f;
- }
- f->initialized = FALSE;
- f->dvi_name = savestr (dvi_name);
- f->device_font = device_find_font (dw->dvi.device, dvi_name);
- f->x_name = savestr (x_name);
- f->dvi_number = position;
- f->sizes = 0;
- f->scalable = FALSE;
- if (f->x_name) {
- encoding = ConvertFontNameToEncoding (f->x_name);
- f->char_map = DviFindMap (encoding);
- } else
- f->char_map = 0;
- /*
- * force requery of fonts
- */
- dw->dvi.font = 0;
- dw->dvi.font_number = -1;
- dw->dvi.cache.font = 0;
- dw->dvi.cache.font_number = -1;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- return f;
-}
-
-void
-ForgetFonts (DviWidget dw)
-{
- DviFontList *f = dw->dvi.fonts;
-
- while (f) {
- DviFontList *tem = f;
-
- if (f->sizes)
- DisposeFontSizes (dw, f->sizes);
- if (f->dvi_name)
- XtFree (f->dvi_name);
- if (f->x_name)
- XtFree (f->x_name);
- f = f->next;
- XtFree ((char *) tem);
- }
-
- /*
- * force requery of fonts
- */
- dw->dvi.font = 0;
- dw->dvi.font_number = -1;
- dw->dvi.cache.font = 0;
- dw->dvi.cache.font_number = -1;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- dw->dvi.fonts = 0;
-}
-
-
-static char *
-MapDviNameToXName (DviWidget dw, const char *dvi_name)
-{
- DviFontMap *fm;
-
- for (fm = dw->dvi.font_map; fm; fm=fm->next)
- if (!strcmp (fm->dvi_name, dvi_name))
- return fm->x_name;
- return 0;
-}
-
-#if 0
-static char *
-MapXNameToDviName (DviWidget dw, const char *x_name)
-{
- DviFontMap *fm;
-
- for (fm = dw->dvi.font_map; fm; fm=fm->next)
- if (!strcmp (fm->x_name, x_name))
- return fm->dvi_name;
- return 0;
-}
-#endif
-
-void
-ParseFontMap (DviWidget dw)
-{
- char dvi_name[1024];
- char x_name[2048];
- char *m, *s;
- DviFontMap *fm, *new_map;
-
- if (dw->dvi.font_map)
- DestroyFontMap (dw->dvi.font_map);
- fm = 0;
- m = dw->dvi.font_map_string;
- while (*m) {
- s = m;
- while (*m && !isspace (*m))
- ++m;
- strncpy (dvi_name, s, m-s);
- dvi_name[m-s] = '\0';
- while (isspace (*m))
- ++m;
- s = m;
- while (*m && *m != '\n')
- ++m;
- strncpy (x_name, s, m-s);
- x_name[m-s] = '\0';
- new_map = (DviFontMap *) XtMalloc (sizeof *new_map);
- new_map->x_name = savestr (x_name);
- new_map->dvi_name = savestr (dvi_name);
- new_map->next = fm;
- fm = new_map;
- ++m;
- }
- dw->dvi.font_map = fm;
-}
-
-void
-DestroyFontMap (DviFontMap *font_map)
-{
- DviFontMap *next;
-
- for (; font_map; font_map = next) {
- next = font_map->next;
- if (font_map->x_name)
- XtFree (font_map->x_name);
- if (font_map->dvi_name)
- XtFree (font_map->dvi_name);
- XtFree ((char *) font_map);
- }
-}
-
-/* ARGSUSED */
-
-void
-SetFontPosition (DviWidget dw, int position,
- const char *dvi_name, const char *extra)
-{
- char *x_name;
-
- x_name = MapDviNameToXName (dw, dvi_name);
- if (x_name)
- (void) InstallFont (dw, position, dvi_name, x_name);
-
- extra = extra; /* unused; suppress compiler warning */
-}
-
-XFontStruct *
-QueryFont (DviWidget dw, int position, int size)
-{
- DviFontList *f;
- DviFontSizeList *fs;
-
- f = LookupFontByPosition (dw, position);
- if (!f)
- return dw->dvi.default_font;
- if (!f->initialized) {
- f->sizes = InstallFontSizes (dw, f->x_name, &f->scalable);
- f->initialized = TRUE;
- }
- fs = LookupFontSizeBySize (dw, f, size);
- if (!fs)
- return dw->dvi.default_font;
- if (!fs->font) {
- if (fs->x_name)
- fs->font = XLoadQueryFont (XtDisplay (dw), fs->x_name);
- if (!fs->font)
- fs->font = dw->dvi.default_font;
- }
- return fs->font;
-}
-
-DeviceFont *
-QueryDeviceFont (DviWidget dw, int position)
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (!f)
- return 0;
- return f->device_font;
-}
-
-DviCharNameMap *
-QueryFontMap (DviWidget dw, int position)
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (f)
- return f->char_map;
- else
- return 0;
-}
-
-#if 0
-LoadFont (DviWidget dw, int position, int size)
-{
- XFontStruct *font;
-
- font = QueryFont (dw, position, size);
- dw->dvi.font_number = position;
- dw->dvi.font_size = size;
- dw->dvi.font = font;
- XSetFont (XtDisplay (dw), dw->dvi.normal_GC, font->fid);
- return;
-}
-#endif
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/gray1.bm b/contrib/groff/src/devices/xditview/gray1.bm
deleted file mode 100644
index c40a95e6eab6..000000000000
--- a/contrib/groff/src/devices/xditview/gray1.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray1_width 3
-#define gray1_height 3
-static char gray1_bits[] = {
- 0x00, 0x02, 0x00};
diff --git a/contrib/groff/src/devices/xditview/gray2.bm b/contrib/groff/src/devices/xditview/gray2.bm
deleted file mode 100644
index e87a1bcc073c..000000000000
--- a/contrib/groff/src/devices/xditview/gray2.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray2_width 3
-#define gray2_height 3
-static char gray2_bits[] = {
- 0x00, 0x03, 0x00};
diff --git a/contrib/groff/src/devices/xditview/gray3.bm b/contrib/groff/src/devices/xditview/gray3.bm
deleted file mode 100644
index d9313ebd5e8f..000000000000
--- a/contrib/groff/src/devices/xditview/gray3.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray3_width 3
-#define gray3_height 3
-static char gray3_bits[] = {
- 0x00, 0x03, 0x02};
diff --git a/contrib/groff/src/devices/xditview/gray4.bm b/contrib/groff/src/devices/xditview/gray4.bm
deleted file mode 100644
index dad142a9b0f0..000000000000
--- a/contrib/groff/src/devices/xditview/gray4.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray4_width 3
-#define gray4_height 3
-static char gray4_bits[] = {
- 0x00, 0x07, 0x02};
diff --git a/contrib/groff/src/devices/xditview/gray5.bm b/contrib/groff/src/devices/xditview/gray5.bm
deleted file mode 100644
index 5f576184172d..000000000000
--- a/contrib/groff/src/devices/xditview/gray5.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray5_width 3
-#define gray5_height 3
-static char gray5_bits[] = {
- 0x04, 0x07, 0x02};
diff --git a/contrib/groff/src/devices/xditview/gray6.bm b/contrib/groff/src/devices/xditview/gray6.bm
deleted file mode 100644
index b76701db16d3..000000000000
--- a/contrib/groff/src/devices/xditview/gray6.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray6_width 3
-#define gray6_height 3
-static char gray6_bits[] = {
- 0x04, 0x07, 0x03};
diff --git a/contrib/groff/src/devices/xditview/gray7.bm b/contrib/groff/src/devices/xditview/gray7.bm
deleted file mode 100644
index ef47bc692e99..000000000000
--- a/contrib/groff/src/devices/xditview/gray7.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray7_width 3
-#define gray7_height 3
-static char gray7_bits[] = {
- 0x05, 0x07, 0x03};
diff --git a/contrib/groff/src/devices/xditview/gray8.bm b/contrib/groff/src/devices/xditview/gray8.bm
deleted file mode 100644
index 12de7cb6f577..000000000000
--- a/contrib/groff/src/devices/xditview/gray8.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray8_width 3
-#define gray8_height 3
-static char gray8_bits[] = {
- 0x05, 0x07, 0x07};
diff --git a/contrib/groff/src/devices/xditview/gxditview.man b/contrib/groff/src/devices/xditview/gxditview.man
deleted file mode 100644
index 2c1302bbc6fd..000000000000
--- a/contrib/groff/src/devices/xditview/gxditview.man
+++ /dev/null
@@ -1,410 +0,0 @@
-.TH GXDITVIEW @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-gxditview \- display groff intermediate output files
-.
-.
-.SH SYNOPSIS
-.B \%gxditview
-.RI [\fB\- toolkitoption\ .\|.\|.\|]
-.RI [\fB\- option\ .\|.\|.\|]
-.RI [ filename ]
-.
-.
-.SH DESCRIPTION
-The
-.B \%gxditview
-program displays the
-.I groff intermediate
-.IR output ,
-see
-.BR groff_out (@MAN5EXT@),
-on an X\~display.
-.
-It uses the standard X11 fonts, so it does not require access to the
-server machine for font loading.
-.
-There are several ways to use
-.BR \%gxditview .
-.
-.
-.PP
-The
-.I groff intermediate output
-can be generated by
-.BR groff\~\-Z .
-This can be viewed by explicity calling
-.B \%gxditview
-.IR \%filename .
-If
-.I filename
-is
-.BR \- ,
-.B \%gxditview
-will read the standard input;
-.I \%filename
-cannot be omitted.
-.
-The
-.I groff intermediate output
-is different for all devices.
-.
-.B \%gxditview
-can view it for all devices, but the quality is not always good.
-.
-.
-.PP
-The best result is achieved with the
-.BR X *
-devices for
-.BR groff 's
-option
-.BR \-T .
-.
-There are four
-.BR X *
-devices:
-.BR \%\-TX75 ,
-.BR \%\-TX75\-12 ,
-.BR \%\-TX100 ,
-.BR \%\-TX100\-12 .
-They differ by the X\~resolution (75dpi or 100dpi) and the used base font
-size (10pt or 12pt).
-.
-They are especially built for
-.BR \%gxditview .
-When using one of them
-.B groff
-generates the
-.I intermediate output
-for this device and calls
-.B \%gxditview
-automatically for viewing.
-.
-.
-.PP
-.BR groff 's
-option
-.B \-X
-should be considered obsolete today; it produces
-.I intermediate output
-for
-.I Postscript
-and uses
-.B \%gxditview
-as a viewer for it, but with a bad quality.
-.
-Simply don't use it.
-.
-.
-.PP
-During the run of
-.BR \%gxditview ,
-the left mouse button brings up a menu with the following entries:
-.
-.TP 8
-.B "Next Page"
-Display the next page.
-.
-.TP
-.B "Previous Page"
-Display the previous page.
-.
-.TP
-.B "Select Page"
-Select a particular numbered page specified by a dialog box.
-.
-.TP
-.B Print
-Print the
-.I groff intermediate output
-using a command specified by a dialog box.
-.
-The default command initially displayed is controlled by the
-.B printCommand
-application resource, and by the
-.B \-printCommand
-option.
-.
-.TP
-.B Open
-Open for display a new file specified by a dialog box.
-.
-The file should contain some
-.I groff intermediate
-.IR output .
-If the filename starts with
-.B |
-it will be taken to be a command to read from.
-.
-.TP
-.B Quit
-Exit from
-.BR \%gxditview .
-.
-.
-.PP
-The
-.IR n ,
-.I Space
-and
-.I Return
-keys are bound to the
-.B Next\ Page
-action.
-.
-The
-.IR p ,
-.I BackSpace
-and
-.I Delete
-keys are bound to the
-.B Previous\ Page
-action.
-.
-The
-.I q
-key is bound to the
-.B Quit
-action.
-.
-The
-.I r
-key is bound to the
-.B Rerasterize
-action which rereads the current file, and redisplays the current
-page; if the current file is a command, the command will be
-reexecuted.
-.
-.
-.PP
-The
-.B paperlength
-and
-.B paperwidth
-commands in the DESC file specify the length and width in machine units
-of the virtual page displayed by
-.BR \%gxditview .
-.
-.
-.SH OPTIONS
-The
-.B \%gxditview
-program accepts all of the standard X\~Toolkit command line options
-along with the additional options listed below:
-.
-.TP 8
-.B \-help
-This option indicates that a brief summary of the allowed options should be
-printed.
-.
-.TP
-.B \-page
-This option specifies the page number of the document to be displayed.
-.
-.TP
-.BI \-backingStore\ backing-store-type
-Redisplay of the
-.I groff intermediate output
-window can take up to a second or so, this option causes the server to
-save the window contents so that when it is scrolled around the
-viewport, the window is painted from contents saved in backing store.
-.I backing-store-type
-can be one of
-.BR Always ,
-.B WhenMapped
-or
-.BR NotUseful .
-.
-.TP
-.BI \-printCommand\ command
-The default command displayed in the dialog box for the
-.B Print
-menu entry will be
-.IR command .
-.
-.TP
-.BI \-resolution\ res
-The
-.I groff intermediate output
-file will be displayed at a resolution of
-.I res
-dpi, unless the DESC file contains the
-.B X11
-command, in which case the device resolution will be used.
-.
-This corresponds to the
-.I Dvi
-widget's
-.B resolution
-resource.
-.
-The default is 75.
-.
-.TP
-.BI \-filename\ string
-The default filename displayed in the dialog box for the
-.B Open
-menu entry will be
-.IR string .
-This can be either a filename, or a command starting with
-.BR | .
-.
-.
-.PP
-The following standard X\~Toolkit command line arguments are commonly used
-with
-.BR \%gxditview :
-.
-.TP 8
-.BI \-bg\ color
-This option specifies the color to use for the background of the window.
-.
-The default is \fIwhite\fP.
-.
-.TP
-.BI \-bd\ color
-This option specifies the color to use for the border of the window.
-.
-The default is \fIblack\fP.
-.
-.TP
-.BI \-bw\ number
-This option specifies the width in pixels of the border surrounding the
-window.
-.
-.TP
-.BI \-fg\ color
-This option specifies the color to use for displaying text.
-.
-The default is
-\fIblack\fP.
-.
-.TP
-.BI \-fn\ font
-This option specifies the font to be used for displaying widget text.
-.
-The default is \fIfixed\fP.
-.
-.TP
-.B \-rv
-This option indicates that reverse video should be simulated by swapping
-the foreground and background colors.
-.
-.TP
-.BI \-geometry\ geometry
-This option specifies the preferred size and position of the window.
-.
-.TP
-.BI \-display\ host : display
-This option specifies the X\~server to contact.
-.
-.TP
-.BI \-xrm\ resourcestring
-This option specifies a resource string to be used.
-.
-.
-.SH X DEFAULTS
-This program uses the
-.I Dvi
-widget in the X\~Toolkit.
-.
-It understands all of the core resource names and classes as well as:
-.
-.TP 8
-.BR width\ (class\ Width )
-Specifies the width of the window.
-.
-.TP
-.BR height\ (class\ Height )
-Specifies the height of the window.
-.
-.TP
-.BR foreground\ (class\ Foreground )
-Specifies the default foreground color.
-.
-.TP
-.BR font\ (class\ Font )
-Specifies the font to be used for error messages.
-.
-.TP
-.BR fontMap\ (class\ FontMap )
-Specifies the mapping from
-.I groff
-font names to X\~font names.
-.
-This must be a string containing a sequence of lines.
-.
-Each line contains two whitespace separated fields: first the
-.I groff
-font name, and secondly the X\~font name.
-.
-The default is
-.nf
-"\e
-TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-"
-.fi
-.
-.
-.SH "SEE ALSO"
-.BR X (1),
-.BR xrdb (1),
-.BR xditview (1),
-.BR groff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@)
-.
-.
-.SH ORIGIN
-This program is derived from
-.BR \%xditview ;
-portions of
-.B \%xditview
-originated in
-.B \%xtroff
-which was derived from
-.BR \%suntroff .
-.
-.
-.SH COPYRIGHT
-Copyright 1989, Massachusetts Institute of Technology.
-.br
-See
-.BR X (1)
-for a full statement of rights and permissions.
-.
-.
-.SH AUTHORS
-Keith Packard (MIT X Consortium)
-.br
-Richard L. Hyde (Purdue)
-.br
-David Slattengren (Berkeley)
-.br
-Malcolm Slaney (Schlumberger Palo Alto Research)
-.br
-Mark Moraes (University of Toronto)
-.br
-James Clark
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/devices/xditview/lex.c b/contrib/groff/src/devices/xditview/lex.c
deleted file mode 100644
index dfe1e0d4bd22..000000000000
--- a/contrib/groff/src/devices/xditview/lex.c
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include "DviP.h"
-
-int
-DviGetAndPut(DviWidget dw, int *cp)
-{
- if (dw->dvi.ungot) {
- dw->dvi.ungot = 0;
- *cp = getc (dw->dvi.file);
- }
- else {
- *cp = getc (dw->dvi.file);
- if (*cp != EOF)
- putc (*cp, dw->dvi.tmpFile);
- }
- return *cp;
-}
-
-char *
-GetLine(DviWidget dw, char *Buffer, int Length)
-{
- int i = 0, c;
-
- Length--; /* Save room for final '\0' */
-
- while (DviGetC (dw, &c) != EOF) {
- if (Buffer && i < Length)
- Buffer[i++] = c;
- if (c == '\n') {
- DviUngetC(dw, c);
- break;
- }
- }
- if (Buffer)
- Buffer[i] = '\0';
- return Buffer;
-}
-
-char *
-GetWord(DviWidget dw, char *Buffer, int Length)
-{
- int i = 0, c;
-
- Length--; /* Save room for final '\0' */
- while (DviGetC(dw, &c) == ' ' || c == '\n')
- ;
- while (c != EOF) {
- if (Buffer && i < Length)
- Buffer[i++] = c;
- if (DviGetC(dw, &c) == ' ' || c == '\n') {
- DviUngetC(dw, c);
- break;
- }
- }
- if (Buffer)
- Buffer[i] = '\0';
- return Buffer;
-}
-
-int
-GetNumber(DviWidget dw)
-{
- int i = 0, c;
- int negative = 0;
-
- while (DviGetC(dw, &c) == ' ' || c == '\n')
- ;
- if (c == '-') {
- negative = 1;
- DviGetC(dw, &c);
- }
-
- for (; c >= '0' && c <= '9'; DviGetC(dw, &c)) {
- if (negative)
- i = i*10 - (c - '0');
- else
- i = i*10 + c - '0';
- }
- if (c != EOF)
- DviUngetC(dw, c);
- return i;
-}
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/page.c b/contrib/groff/src/devices/xditview/page.c
deleted file mode 100644
index d1c5c9f657cb..000000000000
--- a/contrib/groff/src/devices/xditview/page.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * page.c
- *
- * map page numbers to file position
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-#ifdef X_NOT_STDC_ENV
-extern long ftell();
-#endif
-
-static DviFileMap *
-MapPageNumberToFileMap (DviWidget dw, int number)
-{
- DviFileMap *m;
-
- for (m = dw->dvi.file_map; m; m=m->next)
- if (m->page_number == number)
- break;
- return m;
-}
-
-void
-DestroyFileMap (DviFileMap *m)
-{
- DviFileMap *next;
-
- for (; m; m = next) {
- next = m->next;
- XtFree ((char *) m);
- }
-}
-
-void
-ForgetPagePositions (DviWidget dw)
-{
- DestroyFileMap (dw->dvi.file_map);
- dw->dvi.file_map = 0;
-}
-
-void
-RememberPagePosition(DviWidget dw, int number)
-{
- DviFileMap *m;
-
- if (!(m = MapPageNumberToFileMap (dw, number))) {
- m = (DviFileMap *) XtMalloc (sizeof *m);
- m->page_number = number;
- m->next = dw->dvi.file_map;
- dw->dvi.file_map = m;
- }
- if (dw->dvi.tmpFile)
- m->position = ftell (dw->dvi.tmpFile);
- else
- m->position = ftell (dw->dvi.file);
-}
-
-long
-SearchPagePosition (DviWidget dw, int number)
-{
- DviFileMap *m;
-
- if (!(m = MapPageNumberToFileMap (dw, number)))
- return -1;
- return m->position;
-}
-
-void
-FileSeek(DviWidget dw, long position)
-{
- if (dw->dvi.tmpFile) {
- dw->dvi.readingTmp = 1;
- fseek (dw->dvi.tmpFile, position, 0);
- } else
- fseek (dw->dvi.file, position, 0);
-}
diff --git a/contrib/groff/src/devices/xditview/parse.c b/contrib/groff/src/devices/xditview/parse.c
deleted file mode 100644
index de7d6baa08a3..000000000000
--- a/contrib/groff/src/devices/xditview/parse.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * parse.c
- *
- * parse dvi input
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-static int StopSeen = 0;
-static void ParseDrawFunction(DviWidget, char *);
-static void ParseDeviceControl(DviWidget);
-static void push_env(DviWidget);
-static void pop_env(DviWidget);
-
-/* draw.c */
-extern int PutCharacter(DviWidget, char *);
-extern int PutNumberedCharacter(DviWidget, int);
-extern void HorizontalGoto(DviWidget, int);
-extern void Word(DviWidget);
-extern void VerticalGoto(DviWidget, int);
-extern void VerticalMove(DviWidget, int);
-extern void FlushCharCache(DviWidget);
-extern void Newline(DviWidget);
-extern void DrawLine(DviWidget, int, int);
-extern void DrawCircle(DviWidget, int);
-extern void DrawFilledCircle(DviWidget, int);
-extern void DrawEllipse(DviWidget, int, int);
-extern void DrawFilledEllipse(DviWidget, int, int);
-extern void DrawArc(DviWidget, int, int, int, int);
-extern void DrawPolygon(DviWidget, int *, int);
-extern void DrawFilledPolygon(DviWidget, int *, int);
-extern void DrawSpline(DviWidget, int *, int);
-
-/* Dvi.c */
-extern void SetDevice(DviWidget, const char *);
-
-/* page.c */
-extern void RememberPagePosition(DviWidget, int);
-
-/* font.c */
-extern void SetFontPosition(DviWidget, int, const char *, const char *);
-
-/* lex.c */
-extern int GetNumber(DviWidget);
-
-#define HorizontalMove(dw, delta) ((dw)->dvi.state->x += (delta))
-
-
-int
-ParseInput(register DviWidget dw)
-{
- int n, k;
- int c;
- char Buffer[BUFSIZ];
- int NextPage;
- int otherc;
-
- StopSeen = 0;
-
- /*
- * make sure some state exists
- */
-
- if (!dw->dvi.state)
- push_env (dw);
- for (;;) {
- switch (DviGetC(dw, &c)) {
- case '\n':
- break;
- case ' ': /* when input is text */
- case 0: /* occasional noise creeps in */
- break;
- case '{': /* push down current environment */
- push_env(dw);
- break;
- case '}':
- pop_env(dw);
- break;
- /*
- * two motion digits plus a character
- */
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- HorizontalMove(dw, (c-'0')*10 +
- DviGetC(dw,&otherc)-'0');
- /* fall through */
- case 'c': /* single ascii character */
- DviGetC(dw,&c);
- if (c == ' ')
- break;
- Buffer[0] = c;
- Buffer[1] = '\0';
- (void) PutCharacter (dw, Buffer);
- break;
- case 'C':
- GetWord (dw, Buffer, BUFSIZ);
- (void) PutCharacter (dw, Buffer);
- break;
- case 't':
- Buffer[1] = '\0';
- while (DviGetC (dw, &c) != EOF
- && c != ' ' && c != '\n') {
- Buffer[0] = c;
- HorizontalMove (dw, PutCharacter (dw, Buffer));
- }
- break;
- case 'u':
- n = GetNumber(dw);
- Buffer[1] = '\0';
- while (DviGetC (dw, &c) == ' ')
- ;
- while (c != EOF && c != ' ' && c != '\n') {
- Buffer[0] = c;
- HorizontalMove (dw,
- PutCharacter (dw, Buffer) + n);
- DviGetC (dw, &c);
- }
- break;
-
- case 'D': /* draw function */
- (void) GetLine(dw, Buffer, BUFSIZ);
- if (dw->dvi.display_enable)
- ParseDrawFunction(dw, Buffer);
- break;
- case 's': /* ignore fractional sizes */
- n = GetNumber(dw);
- dw->dvi.state->font_size = n;
- break;
- case 'f':
- n = GetNumber(dw);
- dw->dvi.state->font_number = n;
- break;
- case 'H': /* absolute horizontal motion */
- k = GetNumber(dw);
- HorizontalGoto(dw, k);
- break;
- case 'h': /* relative horizontal motion */
- k = GetNumber(dw);
- HorizontalMove(dw, k);
- break;
- case 'w': /* word space */
- Word (dw);
- break;
- case 'V':
- n = GetNumber(dw);
- VerticalGoto(dw, n);
- break;
- case 'v':
- n = GetNumber(dw);
- VerticalMove(dw, n);
- break;
- case 'P': /* new spread */
- break;
- case 'p': /* new page */
- (void) GetNumber(dw);
- NextPage = dw->dvi.current_page + 1;
- RememberPagePosition(dw, NextPage);
- FlushCharCache (dw);
- return(NextPage);
- case 'N':
- n = GetNumber(dw);
- PutNumberedCharacter (dw, n);
- break;
- case 'n': /* end of line */
- GetNumber(dw);
- GetNumber(dw);
- Newline (dw);
- HorizontalGoto(dw, 0);
- break;
- case 'F': /* input files */
- case '+': /* continuation of X device control */
- case 'm': /* color */
- case '#': /* comment */
- GetLine(dw, NULL, 0);
- break;
- case 'x': /* device control */
- ParseDeviceControl(dw);
- break;
- case EOF:
- dw->dvi.last_page = dw->dvi.current_page;
- FlushCharCache (dw);
- return dw->dvi.current_page;
- default:
- break;
- }
- }
-}
-
-static void
-push_env(DviWidget dw)
-{
- DviState *new_state;
-
- new_state = (DviState *) XtMalloc (sizeof (*new_state));
- if (dw->dvi.state)
- *new_state = *(dw->dvi.state);
- else {
- new_state->font_size = 10;
- new_state->font_number = 1;
- new_state->x = 0;
- new_state->y = 0;
- }
- new_state->next = dw->dvi.state;
- dw->dvi.state = new_state;
-}
-
-static void
-pop_env(DviWidget dw)
-{
- DviState *old;
-
- old = dw->dvi.state;
- dw->dvi.state = old->next;
- XtFree ((char *) old);
-}
-
-static void
-InitTypesetter (DviWidget dw)
-{
- while (dw->dvi.state)
- pop_env (dw);
- push_env (dw);
- FlushCharCache (dw);
-}
-
-#define DRAW_ARGS_MAX 128
-
-static void
-ParseDrawFunction(DviWidget dw, char *buf)
-{
- int v[DRAW_ARGS_MAX];
- int i, no_move = 0;
- char *ptr;
-
- v[0] = v[1] = v[2] = v[3] = 0;
-
- if (buf[0] == '\0')
- return;
- ptr = buf+1;
-
- for (i = 0; i < DRAW_ARGS_MAX; i++) {
- if (sscanf(ptr, "%d", v + i) != 1)
- break;
- while (*ptr == ' ')
- ptr++;
- while (*ptr != '\0' && *ptr != ' ')
- ptr++;
- }
-
- switch (buf[0]) {
- case 'l': /* draw a line */
- DrawLine(dw, v[0], v[1]);
- break;
- case 'c': /* circle */
- DrawCircle(dw, v[0]);
- break;
- case 'C':
- DrawFilledCircle(dw, v[0]);
- break;
- case 'e': /* ellipse */
- DrawEllipse(dw, v[0], v[1]);
- break;
- case 'E':
- DrawFilledEllipse(dw, v[0], v[1]);
- break;
- case 'a': /* arc */
- DrawArc(dw, v[0], v[1], v[2], v[3]);
- break;
- case 'p':
- DrawPolygon(dw, v, i);
- break;
- case 'P':
- DrawFilledPolygon(dw, v, i);
- break;
- case '~': /* wiggly line */
- DrawSpline(dw, v, i);
- break;
- case 't':
- dw->dvi.line_thickness = v[0];
- break;
- case 'f':
- if (i > 0 && v[0] >= 0 && v[0] <= DVI_FILL_MAX)
- dw->dvi.fill = v[0];
- no_move = 1;
- break;
- default:
-#if 0
- warning("unknown drawing function %s", buf);
-#endif
- no_move = 1;
- break;
- }
-
- if (!no_move) {
- if (buf[0] == 'e') {
- if (i > 0)
- dw->dvi.state->x += v[0];
- }
- else {
- while (--i >= 0) {
- if (i & 1)
- dw->dvi.state->y += v[i];
- else
- dw->dvi.state->x += v[i];
- }
- }
- }
-}
-
-static void
-ParseDeviceControl(DviWidget dw) /* Parse the x commands */
-{
- char str[20], str1[50];
- int c, n;
-
- GetWord (dw, str, 20);
- switch (str[0]) { /* crude for now */
- case 'T': /* output device */
- GetWord (dw, str, 20);
- SetDevice (dw, str);
- break;
- case 'i': /* initialize */
- InitTypesetter (dw);
- break;
- case 't': /* trailer */
- break;
- case 'p': /* pause -- can restart */
- break;
- case 's': /* stop */
- StopSeen = 1;
- return;
- case 'r': /* resolution when prepared */
- break;
- case 'f': /* font used */
- n = GetNumber (dw);
- GetWord (dw, str, 20);
- GetLine (dw, str1, 50);
- SetFontPosition (dw, n, str, str1);
- break;
- case 'H': /* char height */
- break;
- case 'S': /* slant */
- break;
- }
- while (DviGetC (dw, &c) != '\n') /* skip rest of input line */
- if (c == EOF)
- return;
- return;
-}
-
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/devices/xditview/xdit.bm b/contrib/groff/src/devices/xditview/xdit.bm
deleted file mode 100644
index 0c7aa8cc98f6..000000000000
--- a/contrib/groff/src/devices/xditview/xdit.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_width 32
-#define xdit_height 32
-static unsigned char xdit_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x02, 0x00, 0x00, 0x02,
- 0x8a, 0xa2, 0xfc, 0x03, 0x52, 0x14, 0x03, 0x04, 0x02, 0x80, 0x00, 0x08,
- 0x52, 0x54, 0x00, 0x10, 0x8a, 0x22, 0x8f, 0x23, 0x02, 0x20, 0x06, 0x21,
- 0x8a, 0x12, 0x8c, 0x40, 0x52, 0x14, 0x8c, 0x40, 0x02, 0x10, 0x58, 0x40,
- 0x52, 0x14, 0x30, 0x40, 0x8a, 0x12, 0x30, 0x40, 0x02, 0x10, 0x70, 0x40,
- 0x8a, 0x12, 0xc8, 0x40, 0x52, 0x24, 0xc4, 0xe0, 0x02, 0x20, 0x84, 0xe1,
- 0x52, 0x54, 0xce, 0xf3, 0x8a, 0xa2, 0x00, 0xf8, 0x02, 0x00, 0x03, 0xfc,
- 0x8a, 0x22, 0xfc, 0xf3, 0x52, 0x14, 0x00, 0xc2, 0x02, 0x00, 0x00, 0x02,
- 0x52, 0x14, 0x45, 0x02, 0x8a, 0xa2, 0x28, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/contrib/groff/src/devices/xditview/xdit_mask.bm b/contrib/groff/src/devices/xditview/xdit_mask.bm
deleted file mode 100644
index a584629f6178..000000000000
--- a/contrib/groff/src/devices/xditview/xdit_mask.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_mask_width 32
-#define xdit_mask_height 32
-static unsigned char xdit_mask_bits[] = {
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x1f,
- 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xc7,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/contrib/groff/src/devices/xditview/xditview.c b/contrib/groff/src/devices/xditview/xditview.c
deleted file mode 100644
index 7afdb47f13ce..000000000000
--- a/contrib/groff/src/devices/xditview/xditview.c
+++ /dev/null
@@ -1,657 +0,0 @@
-/*
- * Copyright 1991 Massachusetts Institute of Technology
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of M.I.T. not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. M.I.T. makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/*
- * xditview --
- *
- * Display ditroff output in an X window
- */
-
-#ifndef SABER
-#ifndef lint
-static char rcsid[] = "$XConsortium: xditview.c,v 1.17 89/12/10 17:05:08 rws Exp $";
-#endif /* lint */
-#endif /* SABER */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/Xatom.h>
-#include <X11/Xlib.h>
-#include <X11/Xos.h>
-#include <X11/Intrinsic.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xaw/Paned.h>
-#include <X11/Xaw/Viewport.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeBSB.h>
-
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-
-#include "Dvi.h"
-
-#include "xdit.bm"
-#include "xdit_mask.bm"
-
-#ifdef NEED_DECLARATION_POPEN
-FILE *popen(const char *, const char *);
-#endif /* NEED_DECLARATION_POPEN */
-
-#ifdef NEED_DECLARATION_PCLOSE
-int pclose (FILE *);
-#endif /* NEED_DECLARATION_PCLOSE */
-
-typedef void (*MakePromptFunc)(const char *);
-
-static String fallback_resources[] = {
-#include "GXditview-ad.h"
- NULL
-};
-
-static struct app_resources {
- char *print_command;
- char *filename;
-} app_resources;
-
-#define offset(field) XtOffset(struct app_resources *, field)
-
-/* Application resources. */
-
-static XtResource resources[] = {
- {(String)"printCommand", (String)"PrintCommand", (String)XtRString,
- sizeof(char*), offset(print_command), (String)XtRString, NULL},
- {(String)"filename", (String)"Filename", (String)XtRString,
- sizeof(char*), offset(filename), (String)XtRString, NULL},
-};
-
-#undef offset
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XtParseCommand is let loose. */
-
-static XrmOptionDescRec options[] = {
-{(char *)"-page", (char *)"*dvi.pageNumber",
- XrmoptionSepArg, NULL},
-{(char *)"-backingStore", (char *)"*dvi.backingStore",
- XrmoptionSepArg, NULL},
-{(char *)"-resolution", (char *)"*dvi.resolution",
- XrmoptionSepArg, NULL},
-{(char *)"-printCommand", (char *)".printCommand",
- XrmoptionSepArg, NULL},
-{(char *)"-filename", (char *)".filename",
- XrmoptionSepArg, NULL},
-{(char *)"-noPolyText", (char *)"*dvi.noPolyText",
- XrmoptionNoArg, (XPointer)"TRUE"},
-};
-
-static char current_print_command[1024];
-
-static char current_file_name[1024];
-static FILE *current_file;
-
-/*
- * Report the syntax for calling xditview.
- */
-
-static void
-Syntax(const char *call)
-{
- (void) printf ("Usage: %s [-fg <color>] [-bg <color>]\n", call);
- (void) printf (" [-bd <color>] [-bw <pixels>] [-help]\n");
- (void) printf (" [-display displayname] [-geometry geom]\n");
- (void) printf (" [-page <page-number>] [-backing <backing-store>]\n");
- (void) printf (" [-resolution <res>] [-print <command>]\n");
- (void) printf (" [-filename <file>] [filename]\n\n");
- exit(1);
-}
-
-static void NewFile (const char *);
-static void SetPageNumber (int);
-static Widget toplevel, paned, viewport, dvi;
-static Widget page;
-static Widget simpleMenu;
-
-static void NextPage(Widget, XtPointer, XtPointer);
-static void PreviousPage(Widget, XtPointer, XtPointer);
-static void SelectPage(Widget, XtPointer, XtPointer);
-static void OpenFile(Widget, XtPointer, XtPointer);
-static void Quit(Widget, XtPointer, XtPointer);
-static void Print(Widget, XtPointer, XtPointer);
-
-static struct menuEntry {
- const char *name;
- XtCallbackProc function;
-} menuEntries[] = {
- {"nextPage", NextPage},
- {"previousPage", PreviousPage},
- {"selectPage", SelectPage},
- {"print", Print},
- {"openFile", OpenFile},
- {"quit", Quit},
-};
-
-static void NextPageAction(Widget, XEvent *, String *, Cardinal *);
-static void PreviousPageAction(Widget, XEvent *, String *, Cardinal *);
-static void SelectPageAction(Widget, XEvent *, String *, Cardinal *);
-static void OpenFileAction(Widget, XEvent *, String *, Cardinal *);
-static void QuitAction(Widget, XEvent *, String *, Cardinal *);
-static void AcceptAction(Widget, XEvent *, String *, Cardinal *);
-static void CancelAction(Widget, XEvent *, String *, Cardinal *);
-static void PrintAction(Widget, XEvent *, String *, Cardinal *);
-static void RerasterizeAction(Widget, XEvent *, String *, Cardinal *);
-
-static void MakePrompt(Widget, const char *, MakePromptFunc, const char *);
-
-XtActionsRec xditview_actions[] = {
- {(String)"NextPage", NextPageAction},
- {(String)"PreviousPage", PreviousPageAction},
- {(String)"SelectPage", SelectPageAction},
- {(String)"Print", PrintAction},
- {(String)"OpenFile", OpenFileAction},
- {(String)"Rerasterize", RerasterizeAction},
- {(String)"Quit", QuitAction},
- {(String)"Accept", AcceptAction},
- {(String)"Cancel", CancelAction},
-};
-
-#define MenuNextPage 0
-#define MenuPreviousPage 1
-#define MenuSelectPage 2
-#define MenuPrint 3
-#define MenuOpenFile 4
-#define MenuQuit 5
-
-static char pageLabel[256] = "Page <none>";
-
-int main(int argc, char **argv)
-{
- char *file_name = 0;
- Cardinal i;
- static Arg labelArgs[] = {
- {XtNlabel, (XtArgVal) pageLabel},
- };
- XtAppContext xtcontext;
- Arg topLevelArgs[2];
- Widget entry;
- Arg pageNumberArgs[1];
- int page_number;
-
- toplevel = XtAppInitialize(&xtcontext, "GXditview",
- options, XtNumber (options),
- &argc, argv, fallback_resources, NULL, 0);
- if (argc > 2
- || (argc == 2 && (!strcmp(argv[1], "-help")
- || !strcmp(argv[1], "--help"))))
- Syntax(argv[0]);
-
- XtGetApplicationResources(toplevel, (XtPointer)&app_resources,
- resources, XtNumber(resources),
- NULL, (Cardinal) 0);
- if (app_resources.print_command)
- strcpy(current_print_command, app_resources.print_command);
-
- XtAppAddActions(xtcontext, xditview_actions, XtNumber (xditview_actions));
-
- XtSetArg (topLevelArgs[0], XtNiconPixmap,
- XCreateBitmapFromData (XtDisplay (toplevel),
- XtScreen(toplevel)->root,
- (char *)xdit_bits,
- xdit_width, xdit_height));
-
- XtSetArg (topLevelArgs[1], XtNiconMask,
- XCreateBitmapFromData (XtDisplay (toplevel),
- XtScreen(toplevel)->root,
- (char *)xdit_mask_bits,
- xdit_mask_width, xdit_mask_height));
- XtSetValues (toplevel, topLevelArgs, 2);
- if (argc > 1)
- file_name = argv[1];
-
- /*
- * create the menu and insert the entries
- */
- simpleMenu = XtCreatePopupShell ("menu", simpleMenuWidgetClass, toplevel,
- NULL, 0);
- for (i = 0; i < XtNumber (menuEntries); i++) {
- entry = XtCreateManagedWidget(menuEntries[i].name,
- smeBSBObjectClass, simpleMenu,
- NULL, (Cardinal) 0);
- XtAddCallback(entry, XtNcallback, menuEntries[i].function, NULL);
- }
-
- paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel,
- NULL, (Cardinal) 0);
- viewport = XtCreateManagedWidget("viewport", viewportWidgetClass, paned,
- NULL, (Cardinal) 0);
- dvi = XtCreateManagedWidget ("dvi", dviWidgetClass, viewport, NULL, 0);
- page = XtCreateManagedWidget ("label", labelWidgetClass, paned,
- labelArgs, XtNumber (labelArgs));
- XtSetArg (pageNumberArgs[0], XtNpageNumber, &page_number);
- XtGetValues (dvi, pageNumberArgs, 1);
- if (file_name)
- NewFile (file_name);
- /* NewFile modifies current_file_name, so do this here. */
- if (app_resources.filename)
- strcpy(current_file_name, app_resources.filename);
- XtRealizeWidget (toplevel);
- if (file_name)
- SetPageNumber (page_number);
- XtAppMainLoop(xtcontext);
- return 0;
-}
-
-static void
-SetPageNumber (int number)
-{
- Arg arg[2];
- int actual_number, last_page;
-
- XtSetArg (arg[0], XtNpageNumber, number);
- XtSetValues (dvi, arg, 1);
- XtSetArg (arg[0], XtNpageNumber, &actual_number);
- XtSetArg (arg[1], XtNlastPageNumber, &last_page);
- XtGetValues (dvi, arg, 2);
- if (actual_number == 0)
- sprintf (pageLabel, "Page <none>");
- else if (last_page > 0)
- sprintf (pageLabel, "Page %d of %d", actual_number, last_page);
- else
- sprintf (pageLabel, "Page %d", actual_number);
- XtSetArg (arg[0], XtNlabel, pageLabel);
- XtSetValues (page, arg, 1);
-}
-
-static void
-SelectPageNumber (const char *number_string)
-{
- SetPageNumber (atoi(number_string));
-}
-
-static int hadFile = 0;
-
-static void
-NewFile (const char *name)
-{
- Arg arg[2];
- char *n;
- FILE *new_file;
- Boolean seek = 0;
-
- if (current_file) {
- if (!strcmp (current_file_name, "-"))
- ;
- else if (current_file_name[0] == '|')
- pclose (current_file);
- else
- fclose (current_file);
- }
- if (!strcmp (name, "-"))
- new_file = stdin;
- else if (name[0] == '|')
- new_file = popen (name+1, "r");
- else {
- new_file = fopen (name, "r");
- seek = 1;
- }
- if (!new_file) {
- /* XXX display error message */
- return;
- }
- XtSetArg (arg[0], XtNfile, new_file);
- XtSetArg (arg[1], XtNseek, seek);
- XtSetValues (dvi, arg, 2);
- if (hadFile || name[0] != '-' || name[1] != '\0') {
- XtSetArg (arg[0], XtNtitle, name);
- if (name[0] != '/' && (n = strrchr (name, '/')))
- n = n + 1;
- else
- n = (char *)name;
- XtSetArg (arg[1], XtNiconName, n);
- XtSetValues (toplevel, arg, 2);
- }
- hadFile = 1;
- SelectPageNumber ("1");
- strcpy (current_file_name, name);
- current_file = new_file;
-}
-
-static char fileBuf[1024];
-
-static void
-ResetMenuEntry (Widget entry)
-{
- Arg arg[1];
-
- XtSetArg (arg[0], (String)XtNpopupOnEntry, entry);
- XtSetValues (XtParent(entry) , arg, (Cardinal) 1);
-}
-
-/*ARGSUSED*/
-
-static void
-NextPage (Widget entry, XtPointer name, XtPointer data)
-{
- name = name; /* unused; suppress compiler warning */
- data = data;
-
- NextPageAction((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
- ResetMenuEntry (entry);
-}
-
-static void
-NextPageAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number+1);
-
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-}
-
-/*ARGSUSED*/
-
-static void
-PreviousPage (Widget entry, XtPointer name, XtPointer data)
-{
- name = name; /* unused; suppress compiler warning */
- data = data;
-
- PreviousPageAction ((Widget)NULL, (XEvent *) 0, (String *) 0,
- (Cardinal *) 0);
- ResetMenuEntry (entry);
-}
-
-static void
-PreviousPageAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number-1);
-
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-}
-
-/* ARGSUSED */
-
-static void
-SelectPage (Widget entry, XtPointer name, XtPointer data)
-{
- name = name; /* unused; suppress compiler warning */
- data = data;
-
- SelectPageAction ((Widget)NULL, (XEvent *) 0, (String *) 0,
- (Cardinal *) 0);
- ResetMenuEntry (entry);
-}
-
-static void
-SelectPageAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-
- MakePrompt (toplevel, "Page number", SelectPageNumber, "");
-}
-
-
-static void
-DoPrint (const char *name)
-{
- FILE *print_file;
- RETSIGTYPE (*handler)(int);
-
- /* Avoid dieing because of an invalid command. */
- handler = signal(SIGPIPE, SIG_IGN);
-
- print_file = popen(name, "w");
- if (!print_file)
- /* XXX print error message */
- return;
- DviSaveToFile(dvi, print_file);
- pclose(print_file);
- signal(SIGPIPE, handler);
- strcpy(current_print_command, name);
-}
-
-static void
-RerasterizeAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- Arg args[1];
- int number;
-
- if (current_file_name[0] == 0) {
- /* XXX display an error message */
- return;
- }
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- NewFile(current_file_name);
- SetPageNumber (number);
-
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-}
-
-/* ARGSUSED */
-
-static void
-Print (Widget entry, XtPointer name, XtPointer data)
-{
- name = name; /* unused; suppress compiler warning */
- data = data;
-
- PrintAction ((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
- ResetMenuEntry (entry);
-}
-
-static void
-PrintAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-
- if (current_print_command[0])
- strcpy (fileBuf, current_print_command);
- else
- fileBuf[0] = '\0';
- MakePrompt (toplevel, "Print command:", DoPrint, fileBuf);
-}
-
-
-/* ARGSUSED */
-
-static void
-OpenFile (Widget entry, XtPointer name, XtPointer data)
-{
- name = name; /* unused; suppress compiler warning */
- data = data;
-
- OpenFileAction ((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
- ResetMenuEntry (entry);
-}
-
-static void
-OpenFileAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-
- if (current_file_name[0])
- strcpy (fileBuf, current_file_name);
- else
- fileBuf[0] = '\0';
- MakePrompt (toplevel, "File to open:", NewFile, fileBuf);
-}
-
-/* ARGSUSED */
-
-static void
-Quit (Widget entry, XtPointer closure, XtPointer data)
-{
- entry = entry; /* unused; suppress compiler warning */
- closure = closure;
- data = data;
-
- QuitAction ((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
-}
-
-static void
-QuitAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-
- exit (0);
-}
-
-Widget promptShell, promptDialog;
-MakePromptFunc promptfunction;
-
-/* ARGSUSED */
-static
-void CancelAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- widget = widget; /* unused; suppress compiler warning */
- event = event;
- params = params;
- num_params = num_params;
-
- if (promptShell) {
- XtSetKeyboardFocus(toplevel, (Widget) None);
- XtDestroyWidget(promptShell);
- promptShell = (Widget) 0;
- }
-}
-
-static
-void AcceptAction (Widget widget, XEvent *event,
- String *params, Cardinal *num_params)
-{
- (*promptfunction)(XawDialogGetValueString(promptDialog));
- CancelAction (widget, event, params, num_params);
-}
-
-static void
-MakePrompt(Widget centerw, const char *prompt,
- MakePromptFunc func, const char *def)
-{
- static Arg dialogArgs[] = {
- {XtNlabel, 0},
- {XtNvalue, 0},
- };
- Arg valueArgs[1];
- Arg centerArgs[2];
- Position source_x, source_y;
- Position dest_x, dest_y;
- Dimension center_width, center_height;
- Dimension prompt_width, prompt_height;
- Widget valueWidget;
-
- CancelAction ((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
- promptShell = XtCreatePopupShell ("promptShell", transientShellWidgetClass,
- toplevel, NULL, (Cardinal) 0);
- dialogArgs[0].value = (XtArgVal)prompt;
- dialogArgs[1].value = (XtArgVal)def;
- promptDialog = XtCreateManagedWidget( "promptDialog", dialogWidgetClass,
- promptShell, dialogArgs, XtNumber (dialogArgs));
- XawDialogAddButton(promptDialog, "accept", NULL, (XtPointer) 0);
- XawDialogAddButton(promptDialog, "cancel", NULL, (XtPointer) 0);
- valueWidget = XtNameToWidget (promptDialog, "value");
- if (valueWidget) {
- XtSetArg (valueArgs[0], (String)XtNresizable, TRUE);
- XtSetValues (valueWidget, valueArgs, 1);
- /*
- * as resizable isn't set until just above, the
- * default value will be displayed incorrectly.
- * rectify the situation by resetting the values
- */
- XtSetValues (promptDialog, dialogArgs, XtNumber (dialogArgs));
- }
- XtSetKeyboardFocus (promptDialog, valueWidget);
- XtSetKeyboardFocus (toplevel, valueWidget);
- XtRealizeWidget (promptShell);
- /*
- * place the widget in the center of the "parent"
- */
- XtSetArg (centerArgs[0], XtNwidth, &center_width);
- XtSetArg (centerArgs[1], XtNheight, &center_height);
- XtGetValues (centerw, centerArgs, 2);
- XtSetArg (centerArgs[0], XtNwidth, &prompt_width);
- XtSetArg (centerArgs[1], XtNheight, &prompt_height);
- XtGetValues (promptShell, centerArgs, 2);
- source_x = (center_width - prompt_width) / 2;
- source_y = (center_height - prompt_height) / 3;
- XtTranslateCoords (centerw, source_x, source_y, &dest_x, &dest_y);
- XtSetArg (centerArgs[0], XtNx, dest_x);
- XtSetArg (centerArgs[1], XtNy, dest_y);
- XtSetValues (promptShell, centerArgs, 2);
- XtMapWidget(promptShell);
- promptfunction = func;
-}
-
-/*
-Local Variables:
-c-indent-level: 4
-c-continued-statement-offset: 4
-c-brace-offset: -4
-c-argdecl-indent: 4
-c-label-offset: -4
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/include/DviChar.h b/contrib/groff/src/include/DviChar.h
deleted file mode 100644
index a77f03615a91..000000000000
--- a/contrib/groff/src/include/DviChar.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * DviChar.h
- *
- * descriptions for mapping dvi names to
- * font indexes and back. Dvi fonts are all
- * 256 elements (actually only 256-32 are usable).
- *
- * The encoding names are taken from X -
- * case insensitive, a dash separating the
- * CharSetRegistry from the CharSetEncoding
- */
-
-# define DVI_MAX_SYNONYMS 10
-# define DVI_MAP_SIZE 256
-# define DVI_HASH_SIZE 256
-
-typedef struct _dviCharNameHash {
- struct _dviCharNameHash *next;
- const char *name;
- int position;
-} DviCharNameHash;
-
-typedef struct _dviCharNameMap {
- const char *encoding;
- int special;
- const char *dvi_names[DVI_MAP_SIZE][DVI_MAX_SYNONYMS];
- DviCharNameHash *buckets[DVI_HASH_SIZE];
-} DviCharNameMap;
-
-DviCharNameMap *DviFindMap (char *);
-void DviRegisterMap (DviCharNameMap *);
-#ifdef NOTDEF
-char *DviCharName (DviCharNameMap *, int, int);
-#else
-#define DviCharName(map,index,synonym) ((map)->dvi_names[index][synonym])
-#endif
-int DviCharIndex (DviCharNameMap *, const char *);
diff --git a/contrib/groff/src/include/Makefile.sub b/contrib/groff/src/include/Makefile.sub
deleted file mode 100644
index 58e1ac981bad..000000000000
--- a/contrib/groff/src/include/Makefile.sub
+++ /dev/null
@@ -1,50 +0,0 @@
-HDRS=\
- assert.h \
- cmap.h \
- cset.h \
- color.h \
- device.h \
- driver.h \
- DviChar.h \
- errarg.h \
- error.h \
- font.h \
- geometry.h \
- getopt.h \
- getopt_int.h \
- gettext.h \
- htmlhint.h \
- index.h \
- lib.h \
- macropath.h \
- nonposix.h \
- posix.h \
- printer.h \
- ptable.h \
- refid.h \
- relocate.h \
- search.h \
- searchpath.h \
- stringclass.h \
- symbol.h \
- unicode.h \
- XFontName.h
-GENHDRS=defs.h
-
-all depend: $(GENHDRS)
-
-defs.h: FORCE
- @$(SHELL) $(top_srcdir)/gendef.sh defs.h \
- "PROG_PREFIX=\"$(g)\"" \
- "DEVICE=\"$(DEVICE)\"" \
- "INSTALLPATH=\"$(prefix)\"" \
- "BINPATH=\"$(bindir)\"" \
- "FONTPATH=\"$(fontpath)\"" \
- "MACROPATH=\"$(tmacpath)\"" \
- "INDEX_SUFFIX=\"$(indexext)\"" \
- "COMMON_WORDS_FILE=\"$(common_words_file)\"" \
- "DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
- "DEFAULT_INDEX_NAME=\"$(indexname)\"" \
- "DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
-
-FORCE:
diff --git a/contrib/groff/src/include/XFontName.h b/contrib/groff/src/include/XFontName.h
deleted file mode 100644
index 4e9c6944efe7..000000000000
--- a/contrib/groff/src/include/XFontName.h
+++ /dev/null
@@ -1,50 +0,0 @@
-typedef struct _xFontName {
- char Registry[256];
- char Foundry[256];
- char FamilyName[256];
- char WeightName[256];
- char Slant[3];
- char SetwidthName[256];
- char AddStyleName[256];
- unsigned int PixelSize;
- unsigned int PointSize;
- unsigned int ResolutionX;
- unsigned int ResolutionY;
- char Spacing[2];
- unsigned int AverageWidth;
- char CharSetRegistry[256];
- char CharSetEncoding[256];
-} XFontName;
-
-#define FontNameRegistry (1<<0)
-#define FontNameFoundry (1<<1)
-#define FontNameFamilyName (1<<2)
-#define FontNameWeightName (1<<3)
-#define FontNameSlant (1<<4)
-#define FontNameSetwidthName (1<<5)
-#define FontNameAddStyleName (1<<6)
-#define FontNamePixelSize (1<<7)
-#define FontNamePointSize (1<<8)
-#define FontNameResolutionX (1<<9)
-#define FontNameResolutionY (1<<10)
-#define FontNameSpacing (1<<11)
-#define FontNameAverageWidth (1<<12)
-#define FontNameCharSetRegistry (1<<13)
-#define FontNameCharSetEncoding (1<<14)
-
-#define SlantRoman "R"
-#define SlantItalic "I"
-#define SlantOblique "O"
-#define SlantReverseItalic "RI"
-#define SlantReverseOblique "RO"
-
-#define SpacingMonoSpaced "M"
-#define SpacingProportional "P"
-#define SpacingCharacterCell "C"
-
-typedef char *XFontNameString;
-
-Bool XParseFontName (XFontNameString, XFontName *, unsigned int *);
-Bool XFormatFontName (XFontName *, unsigned int, XFontNameString);
-Bool XCompareFontName (XFontName *, XFontName *, unsigned int);
-Bool XCopyFontName (XFontName *, XFontName *, unsigned int);
diff --git a/contrib/groff/src/include/assert.h b/contrib/groff/src/include/assert.h
deleted file mode 100644
index 76b3b203a920..000000000000
--- a/contrib/groff/src/include/assert.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef ASSERT_H
-#define ASSERT_H
-
-void assertion_failed(int, const char *);
-
-inline void do_assert(int expr, int line, const char *file)
-{
- if (!expr)
- assertion_failed(line, file);
-}
-#endif /* ASSERT_H */
-
-#undef assert
-
-#ifdef NDEBUG
-#define assert(ignore) /* as nothing */
-#else
-#define assert(expr) do_assert(expr, __LINE__, __FILE__)
-#endif
diff --git a/contrib/groff/src/include/cmap.h b/contrib/groff/src/include/cmap.h
deleted file mode 100644
index d786829d2ffa..000000000000
--- a/contrib/groff/src/include/cmap.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef UCHAR_MAX
-#define UCHAR_MAX 255
-#endif
-
-enum cmap_builtin { CMAP_BUILTIN };
-
-class cmap {
-public:
- cmap();
- cmap(cmap_builtin);
- int operator()(unsigned char) const;
- unsigned char &operator[](unsigned char);
-
- friend class cmap_init;
-private:
- unsigned char v[UCHAR_MAX+1];
-};
-
-inline int cmap::operator()(unsigned char c) const
-{
- return v[c];
-}
-
-inline unsigned char &cmap::operator[](unsigned char c)
-{
- return v[c];
-}
-
-extern cmap cmlower;
-extern cmap cmupper;
-
-static class cmap_init {
- static int initialised;
-public:
- cmap_init();
-} _cmap_init;
diff --git a/contrib/groff/src/include/color.h b/contrib/groff/src/include/color.h
deleted file mode 100644
index 52f97c64586a..000000000000
--- a/contrib/groff/src/include/color.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// -*- C++ -*-
-
-/* <groff_src_dir>/src/include/color.h
-
-Last update: 14 Feb 2003
-
-Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
- Written by Gaius Mulley <gaius@glam.ac.uk>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stddef.h>
-#include "symbol.h"
-
-enum color_scheme {DEFAULT, CMY, CMYK, RGB, GRAY};
-
-class color {
-private:
- color_scheme scheme;
- unsigned int components[4];
- color *next;
- static color *free_list;
-
- int read_encoding(const color_scheme, const char * const,
- const size_t);
-
-public:
- symbol nm;
- enum {MAX_COLOR_VAL = 0xffff};
- color(symbol s = default_symbol) : scheme(DEFAULT), nm(s) {}
- color(const color * const);
- ~color();
- void *operator new(size_t);
- void operator delete(void *);
-
- int operator==(const color & c) const;
- int operator!=(const color & c) const;
-
- int is_default() { return scheme == DEFAULT; }
-
- // set color from given color component values
- void set_default();
- void set_rgb(const unsigned int r, const unsigned int g,
- const unsigned int b);
- void set_cmy(const unsigned int c, const unsigned int m,
- const unsigned int y);
- void set_cmyk(const unsigned int c, const unsigned int m,
- const unsigned int y, const unsigned int k);
- void set_gray(const unsigned int g);
-
- // set color from a color string
- int read_rgb(const char * const s);
- int read_cmy(const char * const s);
- int read_cmyk(const char * const s);
- int read_gray(const char * const s);
-
- // Return the actual color scheme and retrieve the color components
- // into a predefined vector (of length at least 4).
- color_scheme get_components(unsigned int *c) const;
-
- // retrieve the components of a color
- void get_rgb(unsigned int *r, unsigned int *g, unsigned int *b) const;
- void get_cmy(unsigned int *c, unsigned int *m, unsigned int *y) const;
- void get_cmyk(unsigned int *c, unsigned int *m,
- unsigned int *y, unsigned int *k) const;
- void get_gray(unsigned int *g) const;
-
- char *print_color();
-};
-
-#define Cyan components[0]
-#define Magenta components[1]
-#define Yellow components[2]
-#define Black components[3]
-
-#define Red components[0]
-#define Green components[1]
-#define Blue components[2]
-
-#define Gray components[0]
-
-extern color default_color;
diff --git a/contrib/groff/src/include/config.hin b/contrib/groff/src/include/config.hin
deleted file mode 100644
index 5f871aaa9562..000000000000
--- a/contrib/groff/src/include/config.hin
+++ /dev/null
@@ -1,217 +0,0 @@
-/* src/include/config.hin. Generated from configure.ac by autoheader. */
-
-/* Define if your C++ doesn't understand `delete []'. */
-#undef ARRAY_DELETE_NEEDS_SIZE
-
-/* Define if you have a C++ <inttypes.h>. */
-#undef HAVE_CC_INTTYPES_H
-
-/* Define if you have a C++ <limits.h>. */
-#undef HAVE_CC_LIMITS_H
-
-/* Define if you have a C++ <osfcn.h>. */
-#undef HAVE_CC_OSFCN_H
-
-/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
- don't. */
-#undef HAVE_DECL_SYS_SIGLIST
-
-/* Define to 1 if you have the <direct.h> header file. */
-#undef HAVE_DIRECT_H
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you have the `fmod' function. */
-#undef HAVE_FMOD
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `isatty' function. */
-#undef HAVE_ISATTY
-
-/* Define to 1 if you have the `kill' function. */
-#undef HAVE_KILL
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <math.h> header file. */
-#undef HAVE_MATH_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have mkstemp(). */
-#undef HAVE_MKSTEMP
-
-/* Define to 1 if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define to 1 if you have the <process.h> header file. */
-#undef HAVE_PROCESS_H
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `rename' function. */
-#undef HAVE_RENAME
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
-/* Define to 1 if you have the `strsep' function. */
-#undef HAVE_STRSEP
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define if <math.h> defines struct exception. */
-#undef HAVE_STRUCT_EXCEPTION
-
-/* Define to 1 if you have the <sys/dir.h> header file. */
-#undef HAVE_SYS_DIR_H
-
-/* Define if you have sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>. */
-#undef HAVE_SYS_ERRLIST
-
-/* Define if you have sys_nerr in <errno.h>, <stdio.h>, or <stdio.h>. */
-#undef HAVE_SYS_NERR
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#undef HAVE_VSNPRINTF
-
-/* Define if the host's encoding is EBCDIC. */
-#undef IS_EBCDIC_HOST
-
-/* Define if localtime() takes a long * not a time_t *. */
-#undef LONG_FOR_TIME_T
-
-/* Define if your C++ doesn't declare gettimeofday(). */
-#undef NEED_DECLARATION_GETTIMEOFDAY
-
-/* Define if your C++ doesn't declare hypot(). */
-#undef NEED_DECLARATION_HYPOT
-
-/* Define if your C++ doesn't declare pclose(). */
-#undef NEED_DECLARATION_PCLOSE
-
-/* Define if your C++ doesn't declare popen(). */
-#undef NEED_DECLARATION_POPEN
-
-/* Define if your C++ doesn't declare putenv(). */
-#undef NEED_DECLARATION_PUTENV
-
-/* Define if your C++ doesn't declare rand(). */
-#undef NEED_DECLARATION_RAND
-
-/* Define if your C++ doesn't declare snprintf(). */
-#undef NEED_DECLARATION_SNPRINTF
-
-/* Define if your C++ doesn't declare srand(). */
-#undef NEED_DECLARATION_SRAND
-
-/* Define if your C++ doesn't declare strcasecmp(). */
-#undef NEED_DECLARATION_STRCASECMP
-
-/* Define if your C++ doesn't declare strncasecmp(). */
-#undef NEED_DECLARATION_STRNCASECMP
-
-/* Define if your C++ doesn't declare vfprintf(). */
-#undef NEED_DECLARATION_VFPRINTF
-
-/* Define if your C++ doesn't declare vsnprintf(). */
-#undef NEED_DECLARATION_VSNPRINTF
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define if the printer's page size is A4. */
-#undef PAGEA4
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define if srand() returns void not int. */
-#undef RET_TYPE_SRAND_IS_VOID
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */
-#undef TRADITIONAL_CPP
-
-/* Define if the 0200 bit of the status returned by wait() indicates whether a
- core image was produced for a process that was terminated by a signal. */
-#undef WCOREFLAG
-
-/* Define to 1 if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
-/* Define if -D_POSIX_SOURCE is necessary. */
-#undef _POSIX_SOURCE
-
-/* Define if you have ISC 3.x or 4.x. */
-#undef _SYSV3
-
-/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h>
- does not exist. */
-#undef uintmax_t
diff --git a/contrib/groff/src/include/cset.h b/contrib/groff/src/include/cset.h
deleted file mode 100644
index a241c00280ae..000000000000
--- a/contrib/groff/src/include/cset.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CC_LIMITS_H
-#include <limits.h>
-#else /* not HAVE_CC_LIMITS_H */
-#ifndef UCHAR_MAX
-#define UCHAR_MAX 255
-#endif
-#endif /* not HAVE_CC_LIMITS_H */
-
-enum cset_builtin { CSET_BUILTIN };
-
-class cset {
-public:
- cset();
- cset(cset_builtin);
- cset(const char *);
- cset(const unsigned char *);
- int operator()(unsigned char) const;
-
- cset &operator|=(const cset &);
- cset &operator|=(unsigned char);
-
- friend class cset_init;
-private:
- char v[UCHAR_MAX+1];
- void clear();
-};
-
-inline int cset::operator()(unsigned char c) const
-{
- return v[c];
-}
-
-inline cset &cset::operator|=(unsigned char c)
-{
- v[c] = 1;
- return *this;
-}
-
-extern cset csalpha;
-extern cset csupper;
-extern cset cslower;
-extern cset csdigit;
-extern cset csxdigit;
-extern cset csspace;
-extern cset cspunct;
-extern cset csalnum;
-extern cset csprint;
-extern cset csgraph;
-extern cset cscntrl;
-
-static class cset_init {
- static int initialised;
-public:
- cset_init();
-} _cset_init;
diff --git a/contrib/groff/src/include/device.h b/contrib/groff/src/include/device.h
deleted file mode 100644
index ecafc26c3ca3..000000000000
--- a/contrib/groff/src/include/device.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-extern const char *device;
diff --git a/contrib/groff/src/include/driver.h b/contrib/groff/src/include/driver.h
deleted file mode 100644
index f6804efffb12..000000000000
--- a/contrib/groff/src/include/driver.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <errno.h>
-#include <assert.h>
-#include <math.h>
-#include "errarg.h"
-#include "error.h"
-#include "font.h"
-#include "printer.h"
-#include "geometry.h"
-
-void do_file(const char *);
diff --git a/contrib/groff/src/include/errarg.h b/contrib/groff/src/include/errarg.h
deleted file mode 100644
index 1aa191a4e487..000000000000
--- a/contrib/groff/src/include/errarg.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class errarg {
- enum { EMPTY, STRING, CHAR, INTEGER, UNSIGNED_INTEGER, DOUBLE } type;
- union {
- const char *s;
- int n;
- unsigned int u;
- char c;
- double d;
- };
- public:
- errarg();
- errarg(const char *);
- errarg(char);
- errarg(unsigned char);
- errarg(int);
- errarg(unsigned int);
- errarg(double);
- int empty() const;
- void print() const;
-};
-
-extern errarg empty_errarg;
-
-extern void errprint(const char *,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
diff --git a/contrib/groff/src/include/error.h b/contrib/groff/src/include/error.h
deleted file mode 100644
index b9d48d0a72e8..000000000000
--- a/contrib/groff/src/include/error.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-extern void fatal_with_file_and_line(const char *filename, int lineno,
- const char *format,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-extern void error_with_file_and_line(const char *filename, int lineno,
- const char *format,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-extern void warning_with_file_and_line(const char *filename, int lineno,
- const char *format,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-extern void fatal(const char *,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-extern void error(const char *,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-extern void warning(const char *,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-
-extern "C" const char *program_name;
-extern int current_lineno;
-extern const char *current_filename;
-extern const char *current_source_filename;
diff --git a/contrib/groff/src/include/font.h b/contrib/groff/src/include/font.h
deleted file mode 100644
index 3ef4fed458ab..000000000000
--- a/contrib/groff/src/include/font.h
+++ /dev/null
@@ -1,124 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-typedef void (*FONT_COMMAND_HANDLER)(const char *, const char *,
- const char *, int);
-
-struct font_kern_list;
-struct font_char_metric;
-struct font_widths_cache;
-
-class font {
-public:
- enum {
- LIG_ff = 1,
- LIG_fi = 2,
- LIG_fl = 4,
- LIG_ffi = 8,
- LIG_ffl = 16
- };
-
- virtual ~font();
- int contains(int index);
- int is_special();
- int get_width(int index, int point_size);
- int get_height(int index, int point_size);
- int get_depth(int index, int point_size);
- int get_space_width(int point_size);
- int get_character_type(int index);
- int get_kern(int index1, int index2, int point_size);
- int get_skew(int index, int point_size, int slant);
- int has_ligature(int);
- int get_italic_correction(int index, int point_size);
- int get_left_italic_correction(int index, int point_size);
- int get_subscript_correction(int index, int point_size);
- int get_code(int i);
- const char *get_special_device_encoding(int index);
- const char *get_name();
- const char *get_internal_name();
- const char *get_image_generator();
-
- static int scan_papersize(const char *, const char **, double *, double *);
-
- static font *load_font(const char *, int * = 0, int = 0);
- static void command_line_font_dir(const char *path);
- static FILE *open_file(const char *name, char **pathp);
- static int load_desc();
- static int name_to_index(const char *);
- static int number_to_index(int);
- static FONT_COMMAND_HANDLER
- set_unknown_desc_command_handler(FONT_COMMAND_HANDLER);
-
- static int res;
- static int hor;
- static int vert;
- static int unitwidth;
- static int paperwidth;
- static int paperlength;
- static const char *papersize;
- static int biggestfont;
- static int spare2;
- static int sizescale;
- static int tcommand;
- static int unscaled_charwidths;
- static int pass_filenames;
- static int use_charnames_in_special;
- static const char *image_generator;
-
- static const char **font_name_table;
- static const char **style_table;
- static const char *family;
- static int *sizes;
-private:
- unsigned ligatures;
- font_kern_list **kern_hash_table;
- int space_width;
- int *ch_index;
- int nindices;
- font_char_metric *ch;
- int ch_used;
- int ch_size;
- int special;
- char *name;
- char *internalname;
- double slant;
- font_widths_cache *widths_cache;
- static FONT_COMMAND_HANDLER unknown_desc_command_handler;
-
- enum { KERN_HASH_TABLE_SIZE = 503 };
-
- void add_entry(int index, const font_char_metric &);
- void copy_entry(int new_index, int old_index);
- void add_kern(int index1, int index2, int amount);
- static int hash_kern(int i1, int i2);
- void alloc_ch_index(int);
- void extend_ch();
- void compact();
-
- static int scale(int w, int pointsize);
- static int unit_scale(double *value, char unit);
- virtual void handle_unknown_font_command(const char *command,
- const char *arg,
- const char *file, int lineno);
-protected:
- font(const char *);
- int load(int * = 0, int = 0);
-};
diff --git a/contrib/groff/src/include/geometry.h b/contrib/groff/src/include/geometry.h
deleted file mode 100644
index 1ce0df031fc5..000000000000
--- a/contrib/groff/src/include/geometry.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2001 Free Software Foundation, Inc.
- Written by Gaius Mulley <gaius@glam.ac.uk>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-int adjust_arc_center(const int *, double *);
-void check_output_arc_limits(int x, int y,
- int xv1, int yv1,
- int xv2, int yv2,
- double c0, double c1,
- int *minx, int *maxx,
- int *miny, int *maxy);
diff --git a/contrib/groff/src/include/getopt_int.h b/contrib/groff/src/include/getopt_int.h
deleted file mode 100644
index 401579fd2898..000000000000
--- a/contrib/groff/src/include/getopt_int.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Internal declarations for getopt.
- Copyright (C) 1989-1994,1996-1999,2001,2003,2004
- Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _GETOPT_INT_H
-#define _GETOPT_INT_H 1
-
-extern int _getopt_internal (int ___argc, char **___argv,
- const char *__shortopts,
- const struct option *__longopts, int *__longind,
- int __long_only, int __posixly_correct);
-
-
-/* Reentrant versions which can handle parsing multiple argument
- vectors at the same time. */
-
-/* Data type for reentrant functions. */
-struct _getopt_data
-{
- /* These have exactly the same meaning as the corresponding global
- variables, except that they are used for the reentrant
- versions of getopt. */
- int optind;
- int opterr;
- int optopt;
- char *optarg;
-
- /* Internal members. */
-
- /* True if the internal members have been initialized. */
- int __initialized;
-
- /* The next char to be scanned in the option-element
- in which the last option character we returned was found.
- This allows us to pick up the scan where we left off.
-
- If this is zero, or a null string, it means resume the scan
- by advancing to the next ARGV-element. */
- char *__nextchar;
-
- /* Describe how to deal with options that follow non-option ARGV-elements.
-
- If the caller did not specify anything,
- the default is REQUIRE_ORDER if the environment variable
- POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
- REQUIRE_ORDER means don't recognize them as options;
- stop option processing when the first non-option is seen.
- This is what Unix does.
- This mode of operation is selected by either setting the environment
- variable POSIXLY_CORRECT, or using `+' as the first character
- of the list of option characters, or by calling getopt.
-
- PERMUTE is the default. We permute the contents of ARGV as we
- scan, so that eventually all the non-options are at the end.
- This allows options to be given in any order, even with programs
- that were not written to expect this.
-
- RETURN_IN_ORDER is an option available to programs that were
- written to expect options and other ARGV-elements in any order
- and that care about the ordering of the two. We describe each
- non-option ARGV-element as if it were the argument of an option
- with character code 1. Using `-' as the first character of the
- list of option characters selects this mode of operation.
-
- The special argument `--' forces an end of option-scanning regardless
- of the value of `ordering'. In the case of RETURN_IN_ORDER, only
- `--' can cause `getopt' to return -1 with `optind' != ARGC. */
-
- enum
- {
- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
- } __ordering;
-
- /* If the POSIXLY_CORRECT environment variable is set
- or getopt was called. */
- int __posixly_correct;
-
-
- /* Handle permutation of arguments. */
-
- /* Describe the part of ARGV that contains non-options that have
- been skipped. `first_nonopt' is the index in ARGV of the first
- of them; `last_nonopt' is the index after the last of them. */
-
- int __first_nonopt;
- int __last_nonopt;
-
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
- int __nonoption_flags_max_len;
- int __nonoption_flags_len;
-# endif
-};
-
-/* The initializer is necessary to set OPTIND and OPTERR to their
- default values and to clear the initialization flag. */
-#define _GETOPT_DATA_INITIALIZER { 1, 1 }
-
-extern int _getopt_internal_r (int ___argc, char **___argv,
- const char *__shortopts,
- const struct option *__longopts, int *__longind,
- int __long_only, int __posixly_correct,
- struct _getopt_data *__data);
-
-extern int _getopt_long_r (int ___argc, char **___argv,
- const char *__shortopts,
- const struct option *__longopts, int *__longind,
- struct _getopt_data *__data);
-
-extern int _getopt_long_only_r (int ___argc, char **___argv,
- const char *__shortopts,
- const struct option *__longopts,
- int *__longind,
- struct _getopt_data *__data);
-
-#endif /* getopt_int.h */
diff --git a/contrib/groff/src/include/gettext.h b/contrib/groff/src/include/gettext.h
deleted file mode 100644
index 26fd2c5703a5..000000000000
--- a/contrib/groff/src/include/gettext.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* This is a dummy header file to make getopt compile without gettext
- support. */
-
-#define gettext(s) s
diff --git a/contrib/groff/src/include/html-strings.h b/contrib/groff/src/include/html-strings.h
deleted file mode 100644
index 26daeb6cfde8..000000000000
--- a/contrib/groff/src/include/html-strings.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk).
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
- * defines the image tags issued by the pre-processors (tbl, pic, eqn)
- * and later detected by pre-html.cpp
- */
-
-#define HTML_IMAGE_INLINE_BEGIN "\\O[HTML-IMAGE-INLINE-BEGIN]"
-#define HTML_IMAGE_INLINE_END "\\O[HTML-IMAGE-INLINE-END]"
diff --git a/contrib/groff/src/include/htmlhint.h b/contrib/groff/src/include/htmlhint.h
deleted file mode 100644
index e0b41dd7157a..000000000000
--- a/contrib/groff/src/include/htmlhint.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- Written by Gaius Mulley <gaius@glam.ac.uk>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef HTMLINDICATE_H
-#define HTMLINDICATE_H
-
-/*
- * html_begin_suppress - suppresses output for the html device
- * and resets the min/max registers for -Tps.
- * Only called for inline images (such as eqn).
- *
- */
-extern void html_begin_suppress();
-
-/*
- * html_end_suppress - end the suppression of output.
- */
-extern void html_end_suppress();
-
-#endif
diff --git a/contrib/groff/src/include/index.h b/contrib/groff/src/include/index.h
deleted file mode 100644
index c90610e67dd1..000000000000
--- a/contrib/groff/src/include/index.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define INDEX_MAGIC 0x23021964
-#define INDEX_VERSION 1
-
-struct index_header {
- int magic;
- int version;
- int tags_size;
- int table_size;
- int lists_size;
- int strings_size;
- int truncate;
- int shortest;
- int common;
-};
-
-struct tag {
- int filename_index;
- int start;
- int length;
-};
-
-unsigned hash(const char *s, int len);
diff --git a/contrib/groff/src/include/lib.h b/contrib/groff/src/include/lib.h
deleted file mode 100644
index bb59337fc989..000000000000
--- a/contrib/groff/src/include/lib.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-extern "C" {
-#ifndef HAVE_STRERROR
- char *strerror(int);
-#endif
- const char *i_to_a(int);
- const char *ui_to_a(unsigned int);
- const char *if_to_a(int, int);
-}
-
-#define __GETOPT_PREFIX groff_
-#include <getopt.h>
-
-#ifdef HAVE_SETLOCALE
-#include <locale.h>
-#else
-#define setlocale(category, locale) do {} while(0)
-#endif
-
-char *strsave(const char *s);
-int is_prime(unsigned);
-double groff_hypot(double, double);
-
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include <stdarg.h>
-
-/* HP-UX 10.20 and LynxOS 4.0.0 don't declare snprintf() */
-#if !defined(HAVE_SNPRINTF) || defined(NEED_DECLARATION_SNPRINTF)
-extern "C" { int snprintf(char *, size_t, const char *, /*args*/ ...); }
-#endif
-
-/* LynxOS 4.0.0 has snprintf() but no vsnprintf() */
-#if !defined(HAVE_VSNPRINTF) || defined(NEED_DECLARATION_VSNPRINTF)
-extern "C" { int vsnprintf(char *, size_t, const char *, va_list); }
-#endif
-
-/* LynxOS 4.0.0 doesn't declare vfprintf() */
-#ifdef NEED_DECLARATION_VFPRINTF
-extern "C" { int vfprintf(FILE *, const char *, va_list); }
-#endif
-
-#ifndef HAVE_MKSTEMP
-/* since mkstemp() is defined as a real C++ function if taken from
- groff's mkstemp.cpp we need a declaration */
-int mkstemp(char *tmpl);
-#endif /* HAVE_MKSTEMP */
-
-int mksdir(char *tmpl);
-
-FILE *xtmpfile(char **namep = 0,
- const char *postfix_long = 0, const char *postfix_short = 0,
- int do_unlink = 1);
-char *xtmptemplate(const char *postfix_long, const char *postfix_short);
-
-#ifdef NEED_DECLARATION_POPEN
-extern "C" { FILE *popen(const char *, const char *); }
-#endif /* NEED_DECLARATION_POPEN */
-
-#ifdef NEED_DECLARATION_PCLOSE
-extern "C" { int pclose (FILE *); }
-#endif /* NEED_DECLARATION_PCLOSE */
-
-size_t file_name_max(const char *fname);
-size_t path_name_max();
-
-int interpret_lf_args(const char *p);
-
-extern char invalid_char_table[];
-
-inline int invalid_input_char(int c)
-{
- return c >= 0 && invalid_char_table[c];
-}
-
-#ifdef HAVE_STRCASECMP
-#ifdef NEED_DECLARATION_STRCASECMP
-// Ultrix4.3's string.h fails to declare this.
-extern "C" { int strcasecmp(const char *, const char *); }
-#endif /* NEED_DECLARATION_STRCASECMP */
-#else /* not HAVE_STRCASECMP */
-extern "C" { int strcasecmp(const char *, const char *); }
-#endif /* HAVE_STRCASECMP */
-
-#if !defined(_AIX) && !defined(sinix) && !defined(__sinix__)
-#ifdef HAVE_STRNCASECMP
-#ifdef NEED_DECLARATION_STRNCASECMP
-// SunOS's string.h fails to declare this.
-extern "C" { int strncasecmp(const char *, const char *, int); }
-#endif /* NEED_DECLARATION_STRNCASECMP */
-#else /* not HAVE_STRNCASECMP */
-extern "C" { int strncasecmp(const char *, const char *, size_t); }
-#endif /* HAVE_STRNCASECMP */
-#endif /* !_AIX && !sinix && !__sinix__ */
-
-#ifdef HAVE_CC_LIMITS_H
-#include <limits.h>
-#else /* not HAVE_CC_LIMITS_H */
-#define INT_MAX 2147483647
-#endif /* not HAVE_CC_LIMITS_H */
-
-/* It's not safe to rely on people getting INT_MIN right (ie signed). */
-
-#ifdef INT_MIN
-#undef INT_MIN
-#endif
-
-#ifdef CFRONT_ANSI_BUG
-
-/* This works around a bug in cfront 2.0 used with ANSI C compilers. */
-
-#define INT_MIN ((long)(-INT_MAX-1))
-
-#else /* not CFRONT_ANSI_BUG */
-
-#define INT_MIN (-INT_MAX-1)
-
-#endif /* not CFRONT_ANSI_BUG */
-
-/* Maximum number of digits in the decimal representation of an int
-(not including the -). */
-
-#define INT_DIGITS 10
-
-#ifdef PI
-#undef PI
-#endif
-
-const double PI = 3.14159265358979323846;
-
-/* ad_delete deletes an array of objects with destructors;
-a_delete deletes an array of objects without destructors */
-
-#ifdef ARRAY_DELETE_NEEDS_SIZE
-/* for 2.0 systems */
-#define ad_delete(size) delete [size]
-#define a_delete delete
-#else /* not ARRAY_DELETE_NEEDS_SIZE */
-/* for ARM systems */
-#define ad_delete(size) delete []
-#define a_delete delete []
-#endif /* not ARRAY_DELETE_NEEDS_SIZE */
diff --git a/contrib/groff/src/include/macropath.h b/contrib/groff/src/include/macropath.h
deleted file mode 100644
index 3b38baa02629..000000000000
--- a/contrib/groff/src/include/macropath.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-extern search_path macro_path;
-extern search_path safer_macro_path;
-extern search_path config_macro_path;
diff --git a/contrib/groff/src/include/nonposix.h b/contrib/groff/src/include/nonposix.h
deleted file mode 100644
index 9564a8b764b3..000000000000
--- a/contrib/groff/src/include/nonposix.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by Eli Zaretskii (eliz@is.elta.co.il)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* This header file compartmentalize all idiosyncrasies of non-Posix
- systems, such as MS-DOS, MS-Windows, etc. It should be loaded after
- the system headers like stdio.h to protect against warnings and error
- messages w.r.t. redefining macros. */
-
-#if defined _MSC_VER
-# ifndef _WIN32
-# define _WIN32
-# endif
-#endif
-
-#if defined(__MSDOS__) || defined(__EMX__) \
- || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__))
-
-/* Binary I/O nuisances. */
-# include <fcntl.h>
-# include <io.h>
-# ifdef HAVE_UNISTD_H
-# include <unistd.h>
-# endif
-# ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-# define STDOUT_FILENO 1
-# define STDERR_FILENO 2
-# endif
-# ifdef HAVE_DIRECT_H
-# include <direct.h>
-# endif
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
-# if defined(_MSC_VER) || defined(__MINGW32__)
-# define POPEN_RT "rt"
-# define POPEN_WT "wt"
-# define popen(c,m) _popen(c,m)
-# define pclose(p) _pclose(p)
-# define pipe(pfd) _pipe((pfd),0,_O_BINARY|_O_NOINHERIT)
-# define mkdir(p,m) _mkdir(p)
-# define setmode(f,m) _setmode(f,m)
-# define WAIT(s,p,m) _cwait(s,p,m)
-# define creat(p,m) _creat(p,m)
-# define read(f,b,s) _read(f,b,s)
-# define write(f,b,s) _write(f,b,s)
-# define dup(f) _dup(f)
-# define dup2(f1,f2) _dup2(f1,f2)
-# define close(f) _close(f)
-# define isatty(f) _isatty(f)
-# define access(p,m) _access(p,m)
-# endif
-# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0)
-# define FOPEN_RB "rb"
-# define FOPEN_WB "wb"
-# define FOPEN_RWB "wb+"
-# ifndef O_BINARY
-# ifdef _O_BINARY
-# define O_BINARY (_O_BINARY)
-# endif
-# endif
-
-/* The system shell. Groff assumes a Unixy shell, but non-Posix
- systems don't have standard places where it lives, and might not
- have it installed to begin with. We want to give them some leeway. */
-# ifdef __EMX__
-# define getcwd(b,s) _getcwd2(b,s)
-# else
-# define BSHELL (system_shell_name())
-# define BSHELL_DASH_C (system_shell_dash_c())
-# define IS_BSHELL(s) (is_system_shell(s))
-# endif
-
-/* The separator for directories in PATH and other environment
- variables. */
-# define PATH_SEP ";"
-# define PATH_SEP_CHAR ';'
-
-/* Characters that separate directories in a path name. */
-# define DIR_SEPS "/\\:"
-
-/* How to tell if the argument is an absolute file name. */
-# define IS_ABSOLUTE(f) \
- ((f)[0] == '/' || (f)[0] == '\\' || (f)[0] && (f)[1] == ':')
-
-/* The executable extension. */
-# define EXE_EXT ".exe"
-
-/* Possible executable extensions. */
-# define PATH_EXT ".com;.exe;.bat;.cmd"
-
-/* The system null device. */
-# define NULL_DEV "NUL"
-
-/* The default place to create temporary files. */
-# ifndef P_tmpdir
-# ifdef _P_tmpdir
-# define P_tmpdir _P_tmpdir
-# else
-# define P_tmpdir "c:/temp"
-# endif
-# endif
-
-/* Prototypes. */
-# ifdef __cplusplus
- extern "C" {
-# endif
- char * system_shell_name(void);
- const char * system_shell_dash_c(void);
- int is_system_shell(const char *);
-# ifdef __cplusplus
- }
-# endif
-
-#endif
-
-#if defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__)
-/* Win32 implementations which use the Microsoft runtime library
- * are prone to hanging when a pipe reader quits with unread data in the pipe.
- * `gtroff' avoids this, by invoking `FLUSH_INPUT_PIPE()', defined as ... */
-# define FLUSH_INPUT_PIPE(fd) \
- do if (!isatty(fd)) \
- { \
- char drain[BUFSIZ]; \
- while (read(fd, drain, sizeof(drain)) > 0) \
- ; \
- } while (0)
-
-/* The Microsoft runtime library also has a broken argument passing mechanism,
- * which may result in improper grouping of arguments passed to a child process
- * by the `spawn()' family of functions. In `groff', only the `spawnvp()'
- * function is affected; we work around this defect, by substituting a
- * wrapper function in place of `spawnvp()' calls. */
-
-# ifdef __cplusplus
- extern "C" {
-# endif
- int spawnvp_wrapper(int, char *, char **);
-# ifdef __cplusplus
- }
-# endif
-# ifndef SPAWN_FUNCTION_WRAPPERS
-# undef spawnvp
-# define spawnvp spawnvp_wrapper
-# undef _spawnvp
-# define _spawnvp spawnvp
-# endif /* SPAWN_FUNCTION_WRAPPERS */
-
-#else
-/* Other implementations do not suffer from Microsoft runtime bugs,
- * but `gtroff' requires a dummy definition for FLUSH_INPUT_PIPE() */
-# define FLUSH_INPUT_PIPE(fd) do {} while(0)
-#endif
-
-/* Defaults, for Posix systems. */
-
-#ifndef SET_BINARY
-# define SET_BINARY(f) do {} while(0)
-#endif
-#ifndef FOPEN_RB
-# define FOPEN_RB "r"
-#endif
-#ifndef FOPEN_WB
-# define FOPEN_WB "w"
-#endif
-#ifndef FOPEN_RWB
-# define FOPEN_RWB "w+"
-#endif
-#ifndef POPEN_RT
-# define POPEN_RT "r"
-#endif
-#ifndef POPEN_WT
-# define POPEN_WT "w"
-#endif
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-#ifndef BSHELL
-# define BSHELL "/bin/sh"
-#endif
-#ifndef BSHELL_DASH_C
-# define BSHELL_DASH_C "-c"
-#endif
-#ifndef IS_BSHELL
-# define IS_BSHELL(s) ((s) && strcmp(s,BSHELL) == 0)
-#endif
-#ifndef PATH_SEP
-# define PATH_SEP ":"
-# define PATH_SEP_CHAR ':'
-#endif
-#ifndef DIR_SEPS
-# define DIR_SEPS "/"
-#endif
-#ifndef IS_ABSOLUTE
-# define IS_ABSOLUTE(f) ((f)[0] == '/')
-#endif
-#ifndef EXE_EXT
-# define EXE_EXT ""
-#endif
-#ifndef PATH_EXT
-# define PATH_EXT ""
-#endif
-#ifndef NULL_DEV
-# define NULL_DEV "/dev/null"
-#endif
-#ifndef GS_NAME
-# define GS_NAME "gs"
-#endif
-#ifndef WAIT
-# define WAIT(s,p,m) wait(s)
-#endif
-#ifndef _WAIT_CHILD
-# define _WAIT_CHILD 0
-#endif
diff --git a/contrib/groff/src/include/paper.h b/contrib/groff/src/include/paper.h
deleted file mode 100644
index e88965d1dec0..000000000000
--- a/contrib/groff/src/include/paper.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct paper {
- char *name;
- double length; // in PS points
- double width; // in PS points
-};
-
-// global constructor
-static class papersize_init {
- static int initialised;
-public:
- papersize_init();
-} _papersize_init;
-
-// A0-A7, B0-B7, C0-C7, D0-D7, 8 American paper sizes, 1 special size */
-#define NUM_PAPERSIZES 4*8 + 8 + 1
-
-extern paper papersizes[];
diff --git a/contrib/groff/src/include/posix.h b/contrib/groff/src/include/posix.h
deleted file mode 100644
index 28b807c7c2f0..000000000000
--- a/contrib/groff/src/include/posix.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1992, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_CC_OSFCN_H
-#include <osfcn.h>
-#else
-#include <fcntl.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#endif
-
-#ifndef S_IRUSR
-#define S_IRUSR 0400
-#endif
-
-#ifndef S_IRGRP
-#define S_IRGRP 0040
-#endif
-
-#ifndef S_IROTH
-#define S_IROTH 0004
-#endif
-
-#ifndef S_IWUSR
-#define S_IWUSR 0200
-#endif
-
-#ifndef S_IXUSR
-#define S_IXUSR 0100
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#ifndef F_OK
-#define F_OK 0
-#endif
-
-#ifndef HAVE_ISATTY
-#define isatty(n) (1)
-#endif
diff --git a/contrib/groff/src/include/printer.h b/contrib/groff/src/include/printer.h
deleted file mode 100644
index fb39f48965ff..000000000000
--- a/contrib/groff/src/include/printer.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// -*- C++ -*-
-
-// <groff_src_dir>/src/include/printer.h
-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
-
- Written by James Clark (jjc@jclark.com)
-
- Last update: 15 Dec 2004
-
- This file is part of groff.
-
- groff is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- groff is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with groff; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA
- 02110-1301, USA.
-*/
-
-/* Description
-
- The class `printer' performs the postprocessing. Each
- postprocessor only needs to implement a derived class of `printer' and
- a suitable function `make_printer' for the device-dependent tasks.
- Then the methods of class `printer' are called automatically by
- `do_file()' in `input.cpp'.
-*/
-
-#include "color.h"
-
-struct environment {
- int fontno;
- int size;
- int hpos;
- int vpos;
- int height;
- int slant;
- color *col;
- color *fill;
-};
-
-class font;
-
-struct font_pointer_list {
- font *p;
- font_pointer_list *next;
-
- font_pointer_list(font *, font_pointer_list *);
-};
-
-class printer {
-public:
- printer();
- virtual ~printer();
- void load_font(int i, const char *name);
- void set_ascii_char(unsigned char c, const environment *env,
- int *widthp = 0);
- void set_special_char(const char *nm, const environment *env,
- int *widthp = 0);
- virtual void set_numbered_char(int n, const environment *env,
- int *widthp = 0);
- int set_char_and_width(const char *nm, const environment *env,
- int *widthp, font **f);
- font *get_font_from_index(int fontno);
- virtual void draw(int code, int *p, int np, const environment *env);
- // perform change of line color (text, outline) in the print-out
- virtual void change_color(const environment * const env);
- // perform change of fill color in the print-out
- virtual void change_fill_color(const environment * const env);
- virtual void begin_page(int) = 0;
- virtual void end_page(int page_length) = 0;
- virtual font *make_font(const char *nm);
- virtual void end_of_line();
- virtual void special(char *arg, const environment *env,
- char type = 'p');
- virtual void devtag(char *arg, const environment *env,
- char type = 'p');
-
-protected:
- font_pointer_list *font_list;
- font **font_table;
- int nfonts;
-
- // information about named characters
- int is_char_named;
- int is_named_set;
- char named_command;
- const char *named_char_s;
- int named_char_n;
-
-private:
- font *find_font(const char *);
- virtual void set_char(int index, font *f, const environment *env,
- int w, const char *name) = 0;
-};
-
-printer *make_printer();
diff --git a/contrib/groff/src/include/ptable.h b/contrib/groff/src/include/ptable.h
deleted file mode 100644
index b2881872a36b..000000000000
--- a/contrib/groff/src/include/ptable.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <assert.h>
-#include <string.h>
-
-#ifdef TRADITIONAL_CPP
-#define name2(a,b) a/**/b
-#else /* not TRADITIONAL_CPP */
-#define name2(a,b) name2x(a,b)
-#define name2x(a,b) a ## b
-#endif /* not TRADITIONAL_CPP */
-
-#define PTABLE(T) name2(T,_ptable)
-#define PASSOC(T) name2(T,_passoc)
-#define PTABLE_ITERATOR(T) name2(T,_ptable_iterator)
-
-extern unsigned next_ptable_size(unsigned);
-extern unsigned long hash_string(const char *);
-
-#define declare_ptable(T) \
- \
-struct PASSOC(T) { \
- char *key; \
- T *val; \
- PASSOC(T)(); \
-}; \
- \
-class PTABLE(T); \
- \
-class PTABLE_ITERATOR(T) { \
- PTABLE(T) *p; \
- unsigned i; \
-public: \
- PTABLE_ITERATOR(T)(PTABLE(T) *); \
- int next(const char **, T **); \
-}; \
- \
-class PTABLE(T) { \
- PASSOC(T) *v; \
- unsigned size; \
- unsigned used; \
- enum { FULL_NUM = 2, FULL_DEN = 3, INITIAL_SIZE = 17 }; \
-public: \
- PTABLE(T)(); \
- ~PTABLE(T)(); \
- void define(const char *, T *); \
- T *lookup(const char *); \
- friend class PTABLE_ITERATOR(T); \
-};
-
-
-// Keys (which are strings) are allocated and freed by PTABLE.
-// Values must be allocated by the caller (always using new[], not new)
-// and are freed by PTABLE.
-
-#define implement_ptable(T) \
- \
-PASSOC(T)::PASSOC(T)() \
-: key(0), val(0) \
-{ \
-} \
- \
-PTABLE(T)::PTABLE(T)() \
-{ \
- v = new PASSOC(T)[size = INITIAL_SIZE]; \
- used = 0; \
-} \
- \
-PTABLE(T)::~PTABLE(T)() \
-{ \
- for (unsigned i = 0; i < size; i++) { \
- a_delete v[i].key; \
- a_delete v[i].val; \
- } \
- a_delete v; \
-} \
- \
-void PTABLE(T)::define(const char *key, T *val) \
-{ \
- assert(key != 0); \
- unsigned long h = hash_string(key); \
- unsigned n; \
- for (n = unsigned(h % size); \
- v[n].key != 0; \
- n = (n == 0 ? size - 1 : n - 1)) \
- if (strcmp(v[n].key, key) == 0) { \
- a_delete v[n].val; \
- v[n].val = val; \
- return; \
- } \
- if (val == 0) \
- return; \
- if (used*FULL_DEN >= size*FULL_NUM) { \
- PASSOC(T) *oldv = v; \
- unsigned old_size = size; \
- size = next_ptable_size(size); \
- v = new PASSOC(T)[size]; \
- for (unsigned i = 0; i < old_size; i++) \
- if (oldv[i].key != 0) { \
- if (oldv[i].val == 0) \
- a_delete oldv[i].key; \
- else { \
- unsigned j; \
- for (j = unsigned(hash_string(oldv[i].key) % size); \
- v[j].key != 0; \
- j = (j == 0 ? size - 1 : j - 1)) \
- ; \
- v[j].key = oldv[i].key; \
- v[j].val = oldv[i].val; \
- } \
- } \
- for (n = unsigned(h % size); \
- v[n].key != 0; \
- n = (n == 0 ? size - 1 : n - 1)) \
- ; \
- a_delete oldv; \
- } \
- char *temp = new char[strlen(key)+1]; \
- strcpy(temp, key); \
- v[n].key = temp; \
- v[n].val = val; \
- used++; \
-} \
- \
-T *PTABLE(T)::lookup(const char *key) \
-{ \
- assert(key != 0); \
- for (unsigned n = unsigned(hash_string(key) % size); \
- v[n].key != 0; \
- n = (n == 0 ? size - 1 : n - 1)) \
- if (strcmp(v[n].key, key) == 0) \
- return v[n].val; \
- return 0; \
-} \
- \
-PTABLE_ITERATOR(T)::PTABLE_ITERATOR(T)(PTABLE(T) *t) \
-: p(t), i(0) \
-{ \
-} \
- \
-int PTABLE_ITERATOR(T)::next(const char **keyp, T **valp) \
-{ \
- unsigned size = p->size; \
- PASSOC(T) *v = p->v; \
- for (; i < size; i++) \
- if (v[i].key != 0) { \
- *keyp = v[i].key; \
- *valp = v[i].val; \
- i++; \
- return 1; \
- } \
- return 0; \
-}
diff --git a/contrib/groff/src/include/refid.h b/contrib/groff/src/include/refid.h
deleted file mode 100644
index 84e5119f3063..000000000000
--- a/contrib/groff/src/include/refid.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class reference_id {
- int filename_id;
- int pos;
-public:
- reference_id() : filename_id(-1) { }
- reference_id(int fid, int off) : filename_id(fid), pos(off) { }
- unsigned hash() const { return (filename_id << 4) + pos; }
- int is_null() const { return filename_id < 0; }
- friend inline int operator==(const reference_id &, const reference_id &);
-};
-
-inline int operator==(const reference_id &r1, const reference_id &r2)
-{
- return r1.filename_id == r2.filename_id && r1.pos == r2.pos;
-}
diff --git a/contrib/groff/src/include/relocate.h b/contrib/groff/src/include/relocate.h
deleted file mode 100644
index 0d9edc4c17b5..000000000000
--- a/contrib/groff/src/include/relocate.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// -*- C++ -*-
-/* Provide relocation for macro and font files.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-extern char *curr_prefix;
-extern size_t curr_prefix_len;
-
-void set_current_prefix ();
-char *xdirname (char *s);
-char *searchpath (const char *name, const char *pathp);
-char *relocatep (const char *path);
-char *relocate (const char *path);
diff --git a/contrib/groff/src/include/search.h b/contrib/groff/src/include/search.h
deleted file mode 100644
index 3dde8944f099..000000000000
--- a/contrib/groff/src/include/search.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class search_item;
-class search_item_iterator;
-
-class search_list {
-public:
- search_list();
- ~search_list();
- void add_file(const char *fn, int silent = 0);
- int nfiles() const;
-private:
- search_item *list;
- int niterators;
- int next_fid;
- friend class search_list_iterator;
-};
-
-class bmpattern;
-
-class linear_searcher {
- const char *ignore_fields;
- int truncate_len;
- bmpattern **keys;
- int nkeys;
- const char *search_and_check(const bmpattern *key, const char *buf,
- const char *bufend, const char **start = 0)
- const;
- int check_match(const char *buf, const char *bufend, const char *match,
- int matchlen, const char **cont, const char **start)
- const;
-public:
- linear_searcher(const char *query, int query_len,
- const char *ign, int trunc);
- ~linear_searcher();
- int search(const char *buf, const char *bufend,
- const char **startp, int *lengthp) const;
-};
-
-class search_list_iterator {
- search_list *list;
- search_item *ptr;
- search_item_iterator *iter;
- char *query;
- linear_searcher searcher;
-public:
- search_list_iterator(search_list *, const char *query);
- ~search_list_iterator();
- int next(const char **, int *, reference_id * = 0);
-};
-
-class search_item {
-protected:
- char *name;
- int filename_id;
-public:
- search_item *next;
- search_item(const char *nm, int fid);
- virtual search_item_iterator *make_search_item_iterator(const char *) = 0;
- virtual ~search_item();
- int is_named(const char *) const;
- virtual int next_filename_id() const;
-};
-
-class search_item_iterator {
- char shut_g_plus_plus_up;
-public:
- virtual ~search_item_iterator();
- virtual int next(const linear_searcher &, const char **ptr, int *lenp,
- reference_id *) = 0;
-};
-
-search_item *make_index_search_item(const char *filename, int fid);
-search_item *make_linear_search_item(int fd, const char *filename, int fid);
-
-extern int linear_truncate_len;
-extern const char *linear_ignore_fields;
-extern int verify_flag;
diff --git a/contrib/groff/src/include/searchpath.h b/contrib/groff/src/include/searchpath.h
deleted file mode 100644
index dab161e61ef9..000000000000
--- a/contrib/groff/src/include/searchpath.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class search_path {
- char *dirs;
- unsigned init_len;
-public:
- search_path(const char *envvar, const char *standard,
- int add_home, int add_current);
- ~search_path();
- void command_line_dir(const char *);
- FILE *open_file(const char *, char **);
- FILE *open_file_cautious(const char *, char ** = 0, const char * = 0);
-};
diff --git a/contrib/groff/src/include/stringclass.h b/contrib/groff/src/include/stringclass.h
deleted file mode 100644
index fb3299ce90ad..000000000000
--- a/contrib/groff/src/include/stringclass.h
+++ /dev/null
@@ -1,196 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-
-// Ensure that the first declaration of functions that are later
-// declared as inline declares them as inline.
-
-class string;
-
-inline string operator+(const string &, const string &);
-inline string operator+(const string &, const char *);
-inline string operator+(const char *, const string &);
-inline string operator+(const string &, char);
-inline string operator+(char, const string &);
-inline int operator==(const string &, const string &);
-inline int operator!=(const string &, const string &);
-
-class string {
-public:
- string();
- string(const string &);
- string(const char *);
- string(const char *, int);
- string(char);
-
- ~string();
-
- string &operator=(const string &);
- string &operator=(const char *);
- string &operator=(char);
-
- string &operator+=(const string &);
- string &operator+=(const char *);
- string &operator+=(char);
- void append(const char *, int);
-
- int length() const;
- int empty() const;
- int operator*() const;
-
- string substring(int i, int n) const;
-
- char &operator[](int);
- char operator[](int) const;
-
- void set_length(int i);
- const char *contents() const;
- int search(char) const;
- char *extract() const;
- void remove_spaces();
- void clear();
- void move(string &);
-
- friend string operator+(const string &, const string &);
- friend string operator+(const string &, const char *);
- friend string operator+(const char *, const string &);
- friend string operator+(const string &, char);
- friend string operator+(char, const string &);
-
- friend int operator==(const string &, const string &);
- friend int operator!=(const string &, const string &);
- friend int operator<=(const string &, const string &);
- friend int operator<(const string &, const string &);
- friend int operator>=(const string &, const string &);
- friend int operator>(const string &, const string &);
-
-private:
- char *ptr;
- int len;
- int sz;
-
- string(const char *, int, const char *, int); // for use by operator+
- void grow1();
-};
-
-
-inline char &string::operator[](int i)
-{
- assert(i >= 0 && i < len);
- return ptr[i];
-}
-
-inline char string::operator[](int i) const
-{
- assert(i >= 0 && i < len);
- return ptr[i];
-}
-
-inline int string::length() const
-{
- return len;
-}
-
-inline int string::empty() const
-{
- return len == 0;
-}
-
-inline int string::operator*() const
-{
- return len;
-}
-
-inline const char *string::contents() const
-{
- return ptr;
-}
-
-inline string operator+(const string &s1, const string &s2)
-{
- return string(s1.ptr, s1.len, s2.ptr, s2.len);
-}
-
-inline string operator+(const string &s1, const char *s2)
-{
-#ifdef __GNUG__
- if (s2 == 0)
- return s1;
- else
- return string(s1.ptr, s1.len, s2, strlen(s2));
-#else
- return s2 == 0 ? s1 : string(s1.ptr, s1.len, s2, strlen(s2));
-#endif
-}
-
-inline string operator+(const char *s1, const string &s2)
-{
-#ifdef __GNUG__
- if (s1 == 0)
- return s2;
- else
- return string(s1, strlen(s1), s2.ptr, s2.len);
-#else
- return s1 == 0 ? s2 : string(s1, strlen(s1), s2.ptr, s2.len);
-#endif
-}
-
-inline string operator+(const string &s, char c)
-{
- return string(s.ptr, s.len, &c, 1);
-}
-
-inline string operator+(char c, const string &s)
-{
- return string(&c, 1, s.ptr, s.len);
-}
-
-inline int operator==(const string &s1, const string &s2)
-{
- return (s1.len == s2.len
- && (s1.len == 0 || memcmp(s1.ptr, s2.ptr, s1.len) == 0));
-}
-
-inline int operator!=(const string &s1, const string &s2)
-{
- return (s1.len != s2.len
- || (s1.len != 0 && memcmp(s1.ptr, s2.ptr, s1.len) != 0));
-}
-
-inline string string::substring(int i, int n) const
-{
- assert(i >= 0 && i + n <= len);
- return string(ptr + i, n);
-}
-
-inline string &string::operator+=(char c)
-{
- if (len >= sz)
- grow1();
- ptr[len++] = c;
- return *this;
-}
-
-void put_string(const string &, FILE *);
-
-string as_string(int);
diff --git a/contrib/groff/src/include/symbol.h b/contrib/groff/src/include/symbol.h
deleted file mode 100644
index c3cc8eea63a8..000000000000
--- a/contrib/groff/src/include/symbol.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define DONT_STORE 1
-#define MUST_ALREADY_EXIST 2
-
-class symbol {
- static const char **table;
- static int table_used;
- static int table_size;
- static char *block;
- static int block_size;
- const char *s;
-public:
- symbol(const char *p, int how = 0);
- symbol();
- unsigned long hash() const;
- int operator ==(symbol) const;
- int operator !=(symbol) const;
- const char *contents() const;
- int is_null() const;
- int is_empty() const;
-};
-
-
-extern const symbol NULL_SYMBOL;
-extern const symbol EMPTY_SYMBOL;
-
-inline symbol::symbol() : s(0)
-{
-}
-
-inline int symbol::operator==(symbol p) const
-{
- return s == p.s;
-}
-
-inline int symbol::operator!=(symbol p) const
-{
- return s != p.s;
-}
-
-inline unsigned long symbol::hash() const
-{
- return (unsigned long)s;
-}
-
-inline const char *symbol::contents() const
-{
- return s;
-}
-
-inline int symbol::is_null() const
-{
- return s == 0;
-}
-
-inline int symbol::is_empty() const
-{
- return s != 0 && *s == 0;
-}
-
-symbol concat(symbol, symbol);
-
-extern symbol default_symbol;
diff --git a/contrib/groff/src/include/unicode.h b/contrib/groff/src/include/unicode.h
deleted file mode 100644
index 90dab113dfea..000000000000
--- a/contrib/groff/src/include/unicode.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-const char *glyph_name_to_unicode(const char *);
-const char *unicode_to_glyph_name(const char *);
-const char *decompose_unicode(const char *);
-
-const char *check_unicode_name(const char *);
diff --git a/contrib/groff/src/libs/libbib/Makefile.sub b/contrib/groff/src/libs/libbib/Makefile.sub
deleted file mode 100644
index 19dd4391de79..000000000000
--- a/contrib/groff/src/libs/libbib/Makefile.sub
+++ /dev/null
@@ -1,14 +0,0 @@
-LIB=bib
-OBJS=\
- common.$(OBJEXT) \
- index.$(OBJEXT) \
- linear.$(OBJEXT) \
- search.$(OBJEXT) \
- map.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/common.cpp \
- $(srcdir)/index.cpp \
- $(srcdir)/linear.cpp \
- $(srcdir)/search.cpp
-CSRCS=\
- $(srcdir)/map.c
diff --git a/contrib/groff/src/libs/libbib/common.cpp b/contrib/groff/src/libs/libbib/common.cpp
deleted file mode 100644
index 9d16e7a0681f..000000000000
--- a/contrib/groff/src/libs/libbib/common.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-unsigned hash(const char *s, int len)
-{
-#if 0
- unsigned h = 0, g;
- while (*s != '\0') {
- h <<= 4;
- h += *s++;
- if ((g = h & 0xf0000000) != 0) {
- h ^= g >> 24;
- h ^= g;
- }
- }
-#endif
- unsigned h = 0;
- while (--len >= 0)
- h = *s++ + 65587*h;
- return h;
-}
-
diff --git a/contrib/groff/src/libs/libbib/index.cpp b/contrib/groff/src/libs/libbib/index.cpp
deleted file mode 100644
index 6b9b9e350efe..000000000000
--- a/contrib/groff/src/libs/libbib/index.cpp
+++ /dev/null
@@ -1,640 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "cset.h"
-#include "cmap.h"
-#include "errarg.h"
-#include "error.h"
-
-#include "refid.h"
-#include "search.h"
-#include "index.h"
-#include "defs.h"
-
-#include "nonposix.h"
-
-// Interface to mmap.
-extern "C" {
- void *mapread(int fd, int len);
- int unmap(void *, int len);
-}
-
-#if 0
-const
-#endif
-int minus_one = -1;
-
-int verify_flag = 0;
-
-struct word_list;
-
-class index_search_item : public search_item {
- search_item *out_of_date_files;
- index_header header;
- char *buffer;
- void *map_addr;
- int map_len;
- tag *tags;
- int *table;
- int *lists;
- char *pool;
- char *key_buffer;
- char *filename_buffer;
- int filename_buflen;
- char **common_words_table;
- int common_words_table_size;
- const char *ignore_fields;
- time_t mtime;
-
- const char *do_verify();
- const int *search1(const char **pp, const char *end);
- const int *search(const char *ptr, int length, int **temp_listp);
- const char *munge_filename(const char *);
- void read_common_words_file();
- void add_out_of_date_file(int fd, const char *filename, int fid);
-public:
- index_search_item(const char *, int);
- ~index_search_item();
- int load(int fd);
- search_item_iterator *make_search_item_iterator(const char *);
- int verify();
- void check_files();
- int next_filename_id() const;
- friend class index_search_item_iterator;
-};
-
-class index_search_item_iterator : public search_item_iterator {
- index_search_item *indx;
- search_item_iterator *out_of_date_files_iter;
- search_item *next_out_of_date_file;
- const int *found_list;
- int *temp_list;
- char *buf;
- int buflen;
- linear_searcher searcher;
- char *query;
- int get_tag(int tagno, const linear_searcher &, const char **, int *,
- reference_id *);
-public:
- index_search_item_iterator(index_search_item *, const char *);
- ~index_search_item_iterator();
- int next(const linear_searcher &, const char **, int *, reference_id *);
-};
-
-
-index_search_item::index_search_item(const char *filename, int fid)
-: search_item(filename, fid), out_of_date_files(0), buffer(0), map_addr(0),
- map_len(0), key_buffer(0), filename_buffer(0), filename_buflen(0),
- common_words_table(0)
-{
-}
-
-index_search_item::~index_search_item()
-{
- if (buffer)
- free(buffer);
- if (map_addr) {
- if (unmap(map_addr, map_len) < 0)
- error("unmap: %1", strerror(errno));
- }
- while (out_of_date_files) {
- search_item *tem = out_of_date_files;
- out_of_date_files = out_of_date_files->next;
- delete tem;
- }
- a_delete filename_buffer;
- a_delete key_buffer;
- if (common_words_table) {
- for (int i = 0; i < common_words_table_size; i++)
- a_delete common_words_table[i];
- a_delete common_words_table;
- }
-}
-
-class file_closer {
- int *fdp;
-public:
- file_closer(int &fd) : fdp(&fd) { }
- ~file_closer() { close(*fdp); }
-};
-
-// Tell the compiler that a variable is intentionally unused.
-inline void unused(void *) { }
-
-int index_search_item::load(int fd)
-{
- file_closer fd_closer(fd); // close fd on return
- unused(&fd_closer);
- struct stat sb;
- if (fstat(fd, &sb) < 0) {
- error("can't fstat `%1': %2", name, strerror(errno));
- return 0;
- }
- if (!S_ISREG(sb.st_mode)) {
- error("`%1' is not a regular file", name);
- return 0;
- }
- mtime = sb.st_mtime;
- int size = int(sb.st_size);
- char *addr;
- map_addr = mapread(fd, size);
- if (map_addr) {
- addr = (char *)map_addr;
- map_len = size;
- }
- else {
- addr = buffer = (char *)malloc(size);
- if (buffer == 0) {
- error("can't allocate buffer for `%1'", name);
- return 0;
- }
- char *ptr = buffer;
- int bytes_to_read = size;
- while (bytes_to_read > 0) {
- int nread = read(fd, ptr, bytes_to_read);
- if (nread == 0) {
- error("unexpected EOF on `%1'", name);
- return 0;
- }
- if (nread < 0) {
- error("read error on `%1': %2", name, strerror(errno));
- return 0;
- }
- bytes_to_read -= nread;
- ptr += nread;
- }
- }
- header = *(index_header *)addr;
- if (header.magic != INDEX_MAGIC) {
- error("`%1' is not an index file: wrong magic number", name);
- return 0;
- }
- if (header.version != INDEX_VERSION) {
- error("version number in `%1' is wrong: was %2, should be %3",
- name, header.version, INDEX_VERSION);
- return 0;
- }
- int sz = (header.tags_size * sizeof(tag)
- + header.lists_size * sizeof(int)
- + header.table_size * sizeof(int)
- + header.strings_size
- + sizeof(header));
- if (sz != size) {
- error("size of `%1' is wrong: was %2, should be %3",
- name, size, sz);
- return 0;
- }
- tags = (tag *)(addr + sizeof(header));
- lists = (int *)(tags + header.tags_size);
- table = (int *)(lists + header.lists_size);
- pool = (char *)(table + header.table_size);
- ignore_fields = strchr(strchr(pool, '\0') + 1, '\0') + 1;
- key_buffer = new char[header.truncate];
- read_common_words_file();
- return 1;
-}
-
-const char *index_search_item::do_verify()
-{
- if (tags == 0)
- return "not loaded";
- if (lists[header.lists_size - 1] >= 0)
- return "last list element not negative";
- int i;
- for (i = 0; i < header.table_size; i++) {
- int li = table[i];
- if (li >= header.lists_size)
- return "bad list index";
- if (li >= 0) {
- for (int *ptr = lists + li; *ptr >= 0; ptr++) {
- if (*ptr >= header.tags_size)
- return "bad tag index";
- if (*ptr >= ptr[1] && ptr[1] >= 0)
- return "list not ordered";
- }
- }
- }
- for (i = 0; i < header.tags_size; i++) {
- if (tags[i].filename_index >= header.strings_size)
- return "bad index in tags";
- if (tags[i].length < 0)
- return "bad length in tags";
- if (tags[i].start < 0)
- return "bad start in tags";
- }
- if (pool[header.strings_size - 1] != '\0')
- return "last character in pool not nul";
- return 0;
-}
-
-int index_search_item::verify()
-{
- const char *reason = do_verify();
- if (!reason)
- return 1;
- error("`%1' is bad: %2", name, reason);
- return 0;
-}
-
-int index_search_item::next_filename_id() const
-{
- return filename_id + header.strings_size + 1;
-}
-
-search_item_iterator *index_search_item::make_search_item_iterator(
- const char *query)
-{
- return new index_search_item_iterator(this, query);
-}
-
-search_item *make_index_search_item(const char *filename, int fid)
-{
- char *index_filename = new char[strlen(filename) + sizeof(INDEX_SUFFIX)];
- strcpy(index_filename, filename);
- strcat(index_filename, INDEX_SUFFIX);
- int fd = open(index_filename, O_RDONLY | O_BINARY);
- if (fd < 0)
- return 0;
- index_search_item *item = new index_search_item(index_filename, fid);
- a_delete index_filename;
- if (!item->load(fd)) {
- close(fd);
- delete item;
- return 0;
- }
- else if (verify_flag && !item->verify()) {
- delete item;
- return 0;
- }
- else {
- item->check_files();
- return item;
- }
-}
-
-
-index_search_item_iterator::index_search_item_iterator(index_search_item *ind,
- const char *q)
-: indx(ind), out_of_date_files_iter(0), next_out_of_date_file(0), temp_list(0),
- buf(0), buflen(0),
- searcher(q, strlen(q), ind->ignore_fields, ind->header.truncate),
- query(strsave(q))
-{
- found_list = indx->search(q, strlen(q), &temp_list);
- if (!found_list) {
- found_list = &minus_one;
- warning("all keys would have been discarded in constructing index `%1'",
- indx->name);
- }
-}
-
-index_search_item_iterator::~index_search_item_iterator()
-{
- a_delete temp_list;
- a_delete buf;
- a_delete query;
- delete out_of_date_files_iter;
-}
-
-int index_search_item_iterator::next(const linear_searcher &,
- const char **pp, int *lenp,
- reference_id *ridp)
-{
- if (found_list) {
- for (;;) {
- int tagno = *found_list;
- if (tagno == -1)
- break;
- found_list++;
- if (get_tag(tagno, searcher, pp, lenp, ridp))
- return 1;
- }
- found_list = 0;
- next_out_of_date_file = indx->out_of_date_files;
- }
- while (next_out_of_date_file) {
- if (out_of_date_files_iter == 0)
- out_of_date_files_iter
- = next_out_of_date_file->make_search_item_iterator(query);
- if (out_of_date_files_iter->next(searcher, pp, lenp, ridp))
- return 1;
- delete out_of_date_files_iter;
- out_of_date_files_iter = 0;
- next_out_of_date_file = next_out_of_date_file->next;
- }
- return 0;
-}
-
-int index_search_item_iterator::get_tag(int tagno,
- const linear_searcher &searchr,
- const char **pp, int *lenp,
- reference_id *ridp)
-{
- if (tagno < 0 || tagno >= indx->header.tags_size) {
- error("bad tag number");
- return 0;
- }
- tag *tp = indx->tags + tagno;
- const char *filename = indx->munge_filename(indx->pool + tp->filename_index);
- int fd = open(filename, O_RDONLY | O_BINARY);
- if (fd < 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return 0;
- }
- struct stat sb;
- if (fstat(fd, &sb) < 0) {
- error("can't fstat: %1", strerror(errno));
- close(fd);
- return 0;
- }
- time_t mtime = sb.st_mtime;
- if (mtime > indx->mtime) {
- indx->add_out_of_date_file(fd, filename,
- indx->filename_id + tp->filename_index);
- return 0;
- }
- int res = 0;
- FILE *fp = fdopen(fd, FOPEN_RB);
- if (!fp) {
- error("fdopen failed");
- close(fd);
- return 0;
- }
- if (tp->start != 0 && fseek(fp, long(tp->start), 0) < 0)
- error("can't seek on `%1': %2", filename, strerror(errno));
- else {
- int length = tp->length;
- int err = 0;
- if (length == 0) {
- if (fstat(fileno(fp), &sb) < 0) {
- error("can't stat `%1': %2", filename, strerror(errno));
- err = 1;
- }
- else if (!S_ISREG(sb.st_mode)) {
- error("`%1' is not a regular file", filename);
- err = 1;
- }
- else
- length = int(sb.st_size);
- }
- if (!err) {
- if (length + 2 > buflen) {
- a_delete buf;
- buflen = length + 2;
- buf = new char[buflen];
- }
- if (fread(buf + 1, 1, length, fp) != (size_t)length)
- error("fread on `%1' failed: %2", filename, strerror(errno));
- else {
- buf[0] = '\n';
- // Remove the CR characters from CRLF pairs.
- int sidx = 1, didx = 1;
- for ( ; sidx < length + 1; sidx++, didx++)
- {
- if (buf[sidx] == '\r')
- {
- if (buf[++sidx] != '\n')
- buf[didx++] = '\r';
- else
- length--;
- }
- if (sidx != didx)
- buf[didx] = buf[sidx];
- }
- buf[length + 1] = '\n';
- res = searchr.search(buf + 1, buf + 2 + length, pp, lenp);
- if (res && ridp)
- *ridp = reference_id(indx->filename_id + tp->filename_index,
- tp->start);
- }
- }
- }
- fclose(fp);
- return res;
-}
-
-const char *index_search_item::munge_filename(const char *filename)
-{
- if (IS_ABSOLUTE(filename))
- return filename;
- const char *cwd = pool;
- int need_slash = (cwd[0] != 0
- && strchr(DIR_SEPS, strchr(cwd, '\0')[-1]) == 0);
- int len = strlen(cwd) + strlen(filename) + need_slash + 1;
- if (len > filename_buflen) {
- a_delete filename_buffer;
- filename_buflen = len;
- filename_buffer = new char[len];
- }
- strcpy(filename_buffer, cwd);
- if (need_slash)
- strcat(filename_buffer, "/");
- strcat(filename_buffer, filename);
- return filename_buffer;
-}
-
-const int *index_search_item::search1(const char **pp, const char *end)
-{
- while (*pp < end && !csalnum(**pp))
- *pp += 1;
- if (*pp >= end)
- return 0;
- const char *start = *pp;
- while (*pp < end && csalnum(**pp))
- *pp += 1;
- int len = *pp - start;
- if (len < header.shortest)
- return 0;
- if (len > header.truncate)
- len = header.truncate;
- int is_number = 1;
- for (int i = 0; i < len; i++)
- if (csdigit(start[i]))
- key_buffer[i] = start[i];
- else {
- key_buffer[i] = cmlower(start[i]);
- is_number = 0;
- }
- if (is_number && !(len == 4 && start[0] == '1' && start[1] == '9'))
- return 0;
- unsigned hc = hash(key_buffer, len);
- if (common_words_table) {
- for (int h = hc % common_words_table_size;
- common_words_table[h];
- --h) {
- if (strlen(common_words_table[h]) == (size_t)len
- && memcmp(common_words_table[h], key_buffer, len) == 0)
- return 0;
- if (h == 0)
- h = common_words_table_size;
- }
- }
- int li = table[int(hc % header.table_size)];
- return li < 0 ? &minus_one : lists + li;
-}
-
-static void merge(int *result, const int *s1, const int *s2)
-{
- for (; *s1 >= 0; s1++) {
- while (*s2 >= 0 && *s2 < *s1)
- s2++;
- if (*s2 == *s1)
- *result++ = *s2;
- }
- *result++ = -1;
-}
-
-const int *index_search_item::search(const char *ptr, int length,
- int **temp_listp)
-{
- const char *end = ptr + length;
- if (*temp_listp) {
- a_delete *temp_listp;
- *temp_listp = 0;
- }
- const int *first_list = 0;
- while (ptr < end && (first_list = search1(&ptr, end)) == 0)
- ;
- if (!first_list)
- return 0;
- if (*first_list < 0)
- return first_list;
- const int *second_list = 0;
- while (ptr < end && (second_list = search1(&ptr, end)) == 0)
- ;
- if (!second_list)
- return first_list;
- if (*second_list < 0)
- return second_list;
- const int *p;
- for (p = first_list; *p >= 0; p++)
- ;
- int len = p - first_list;
- for (p = second_list; *p >= 0; p++)
- ;
- if (p - second_list < len)
- len = p - second_list;
- int *matches = new int[len + 1];
- merge(matches, first_list, second_list);
- while (ptr < end) {
- const int *list = search1(&ptr, end);
- if (list != 0) {
- if (*list < 0) {
- a_delete matches;
- return list;
- }
- merge(matches, matches, list);
- if (*matches < 0) {
- a_delete matches;
- return &minus_one;
- }
- }
- }
- *temp_listp = matches;
- return matches;
-}
-
-void index_search_item::read_common_words_file()
-{
- if (header.common <= 0)
- return;
- const char *common_words_file = munge_filename(strchr(pool, '\0') + 1);
- errno = 0;
- FILE *fp = fopen(common_words_file, "r");
- if (!fp) {
- error("can't open `%1': %2", common_words_file, strerror(errno));
- return;
- }
- common_words_table_size = 2*header.common + 1;
- while (!is_prime(common_words_table_size))
- common_words_table_size++;
- common_words_table = new char *[common_words_table_size];
- for (int i = 0; i < common_words_table_size; i++)
- common_words_table[i] = 0;
- int count = 0;
- int key_len = 0;
- for (;;) {
- int c = getc(fp);
- while (c != EOF && !csalnum(c))
- c = getc(fp);
- if (c == EOF)
- break;
- do {
- if (key_len < header.truncate)
- key_buffer[key_len++] = cmlower(c);
- c = getc(fp);
- } while (c != EOF && csalnum(c));
- if (key_len >= header.shortest) {
- int h = hash(key_buffer, key_len) % common_words_table_size;
- while (common_words_table[h]) {
- if (h == 0)
- h = common_words_table_size;
- --h;
- }
- common_words_table[h] = new char[key_len + 1];
- memcpy(common_words_table[h], key_buffer, key_len);
- common_words_table[h][key_len] = '\0';
- }
- if (++count >= header.common)
- break;
- key_len = 0;
- if (c == EOF)
- break;
- }
- fclose(fp);
-}
-
-void index_search_item::add_out_of_date_file(int fd, const char *filename,
- int fid)
-{
- search_item **pp;
- for (pp = &out_of_date_files; *pp; pp = &(*pp)->next)
- if ((*pp)->is_named(filename))
- return;
- *pp = make_linear_search_item(fd, filename, fid);
- warning("`%1' modified since `%2' created", filename, name);
-}
-
-void index_search_item::check_files()
-{
- const char *pool_end = pool + header.strings_size;
- for (const char *ptr = strchr(ignore_fields, '\0') + 1;
- ptr < pool_end;
- ptr = strchr(ptr, '\0') + 1) {
- const char *path = munge_filename(ptr);
- struct stat sb;
- if (stat(path, &sb) < 0)
- error("can't stat `%1': %2", path, strerror(errno));
- else if (sb.st_mtime > mtime) {
- int fd = open(path, O_RDONLY | O_BINARY);
- if (fd < 0)
- error("can't open `%1': %2", path, strerror(errno));
- else
- add_out_of_date_file(fd, path, filename_id + (ptr - pool));
- }
- }
-}
diff --git a/contrib/groff/src/libs/libbib/linear.cpp b/contrib/groff/src/libs/libbib/linear.cpp
deleted file mode 100644
index c1919ab7d63a..000000000000
--- a/contrib/groff/src/libs/libbib/linear.cpp
+++ /dev/null
@@ -1,503 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "cset.h"
-#include "cmap.h"
-#include "nonposix.h"
-
-#include "refid.h"
-#include "search.h"
-
-class file_buffer {
- char *buffer;
- char *bufend;
-public:
- file_buffer();
- ~file_buffer();
- int load(int fd, const char *filename);
- const char *get_start() const;
- const char *get_end() const;
-};
-
-typedef unsigned char uchar;
-
-static uchar map[256];
-static uchar inv_map[256][3];
-
-struct map_init {
- map_init();
-};
-
-static map_init the_map_init;
-
-map_init::map_init()
-{
- int i;
- for (i = 0; i < 256; i++)
- map[i] = csalnum(i) ? cmlower(i) : '\0';
- for (i = 0; i < 256; i++) {
- if (cslower(i)) {
- inv_map[i][0] = i;
- inv_map[i][1] = cmupper(i);
- inv_map[i][2] = '\0';
- }
- else if (csdigit(i)) {
- inv_map[i][0] = i;
- inv_map[i][1] = 0;
- }
- else
- inv_map[i][0] = '\0';
- }
-}
-
-
-class bmpattern {
- char *pat;
- int len;
- int delta[256];
-public:
- bmpattern(const char *pattern, int pattern_length);
- ~bmpattern();
- const char *search(const char *p, const char *end) const;
- int length() const;
-};
-
-bmpattern::bmpattern(const char *pattern, int pattern_length)
-: len(pattern_length)
-{
- pat = new char[len];
- int i;
- for (i = 0; i < len; i++)
- pat[i] = map[uchar(pattern[i])];
- for (i = 0; i < 256; i++)
- delta[i] = len;
- for (i = 0; i < len; i++)
- for (const unsigned char *inv = inv_map[uchar(pat[i])]; *inv; inv++)
- delta[*inv] = len - i - 1;
-}
-
-const char *bmpattern::search(const char *buf, const char *end) const
-{
- int buflen = end - buf;
- if (len > buflen)
- return 0;
- const char *strend;
- if (buflen > len*4)
- strend = end - len*4;
- else
- strend = buf;
- const char *k = buf + len - 1;
- const int *del = delta;
- const char *pattern = pat;
- for (;;) {
- while (k < strend) {
- int t = del[uchar(*k)];
- if (!t)
- break;
- k += t;
- k += del[uchar(*k)];
- k += del[uchar(*k)];
- }
- while (k < end && del[uchar(*k)] != 0)
- k++;
- if (k == end)
- break;
- int j = len - 1;
- const char *s = k;
- for (;;) {
- if (j == 0)
- return s;
- if (map[uchar(*--s)] != uchar(pattern[--j]))
- break;
- }
- k++;
- }
- return 0;
-}
-
-bmpattern::~bmpattern()
-{
- a_delete pat;
-}
-
-inline int bmpattern::length() const
-{
- return len;
-}
-
-
-static const char *find_end(const char *bufend, const char *p);
-
-const char *linear_searcher::search_and_check(const bmpattern *key,
- const char *buf, const char *bufend, const char **start) const
-{
- assert(buf[-1] == '\n');
- assert(bufend[-1] == '\n');
- const char *ptr = buf;
- for (;;) {
- const char *found = key->search(ptr, bufend);
- if (!found)
- break;
- if (check_match(buf, bufend, found, key->length(), &ptr, start))
- return found;
- }
- return 0;
-}
-
-static const char *skip_field(const char *end, const char *p)
-{
- for (;;)
- if (*p++ == '\n') {
- if (p == end || *p == '%')
- break;
- const char *q;
- for (q = p; *q == ' ' || *q == '\t'; q++)
- ;
- if (*q == '\n')
- break;
- p = q + 1;
- }
- return p;
-}
-
-static const char *find_end(const char *bufend, const char *p)
-{
- for (;;)
- if (*p++ == '\n') {
- if (p == bufend)
- break;
- const char *q;
- for (q = p; *q == ' ' || *q == '\t'; q++)
- ;
- if (*q == '\n')
- break;
- p = q + 1;
- }
- return p;
-}
-
-
-int linear_searcher::check_match(const char *buf, const char *bufend,
- const char *match, int matchlen,
- const char **cont, const char **start) const
-{
- *cont = match + 1;
- // The user is required to supply only the first truncate_len characters
- // of the key. If truncate_len <= 0, he must supply all the key.
- if ((truncate_len <= 0 || matchlen < truncate_len)
- && map[uchar(match[matchlen])] != '\0')
- return 0;
-
- // The character before the match must not be an alphanumeric
- // character (unless the alphanumeric character follows one or two
- // percent characters at the beginning of the line), nor must it be
- // a percent character at the beginning of a line, nor a percent
- // character following a percent character at the beginning of a
- // line.
-
- switch (match - buf) {
- case 0:
- break;
- case 1:
- if (match[-1] == '%' || map[uchar(match[-1])] != '\0')
- return 0;
- break;
- case 2:
- if (map[uchar(match[-1])] != '\0' && match[-2] != '%')
- return 0;
- if (match[-1] == '%'
- && (match[-2] == '\n' || match[-2] == '%'))
- return 0;
- break;
- default:
- if (map[uchar(match[-1])] != '\0'
- && !(match[-2] == '%'
- && (match[-3] == '\n'
- || (match[-3] == '%' && match[-4] == '\n'))))
- return 0;
- if (match[-1] == '%'
- && (match[-2] == '\n'
- || (match[-2] == '%' && match[-3] == '\n')))
- return 0;
- }
-
- const char *p = match;
- int had_percent = 0;
- for (;;) {
- if (*p == '\n') {
- if (!had_percent && p[1] == '%') {
- if (p[2] != '\0' && strchr(ignore_fields, p[2]) != 0) {
- *cont = skip_field(bufend, match + matchlen);
- return 0;
- }
- if (!start)
- break;
- had_percent = 1;
- }
- if (p <= buf) {
- if (start)
- *start = p + 1;
- return 1;
- }
- const char *q;
- for (q = p - 1; *q == ' ' || *q == '\t'; q--)
- ;
- if (*q == '\n') {
- if (start)
- *start = p + 1;
- break;
- }
- p = q;
- }
- p--;
- }
- return 1;
-}
-
-file_buffer::file_buffer()
-: buffer(0), bufend(0)
-{
-}
-
-file_buffer::~file_buffer()
-{
- a_delete buffer;
-}
-
-const char *file_buffer::get_start() const
-{
- return buffer ? buffer + 4 : 0;
-}
-
-const char *file_buffer::get_end() const
-{
- return bufend;
-}
-
-int file_buffer::load(int fd, const char *filename)
-{
- struct stat sb;
- if (fstat(fd, &sb) < 0)
- error("can't fstat `%1': %2", filename, strerror(errno));
- else if (!S_ISREG(sb.st_mode))
- error("`%1' is not a regular file", filename);
- else {
- // We need one character extra at the beginning for an additional newline
- // used as a sentinel. We get 4 instead so that the read buffer will be
- // word-aligned. This seems to make the read slightly faster. We also
- // need one character at the end also for an additional newline used as a
- // sentinel.
- int size = int(sb.st_size);
- buffer = new char[size + 4 + 1];
- int nread = read(fd, buffer + 4, size);
- if (nread < 0)
- error("error reading `%1': %2", filename, strerror(errno));
- else if (nread != size)
- error("size of `%1' decreased", filename);
- else {
- char c;
- nread = read(fd, &c, 1);
- if (nread != 0)
- error("size of `%1' increased", filename);
- else if (memchr(buffer + 4, '\0', size < 1024 ? size : 1024) != 0)
- error("database `%1' is a binary file", filename);
- else {
- close(fd);
- buffer[3] = '\n';
- int sidx = 4, didx = 4;
- for ( ; sidx < size + 4; sidx++, didx++)
- {
- if (buffer[sidx] == '\r')
- {
- if (buffer[++sidx] != '\n')
- buffer[didx++] = '\r';
- else
- size--;
- }
- if (sidx != didx)
- buffer[didx] = buffer[sidx];
- }
- bufend = buffer + 4 + size;
- if (bufend[-1] != '\n')
- *bufend++ = '\n';
- return 1;
- }
- }
- a_delete buffer;
- buffer = 0;
- }
- close(fd);
- return 0;
-}
-
-linear_searcher::linear_searcher(const char *query, int query_len,
- const char *ign, int trunc)
-: ignore_fields(ign), truncate_len(trunc), keys(0), nkeys(0)
-{
- const char *query_end = query + query_len;
- int nk = 0;
- const char *p;
- for (p = query; p < query_end; p++)
- if (map[uchar(*p)] != '\0'
- && (p[1] == '\0' || map[uchar(p[1])] == '\0'))
- nk++;
- if (nk == 0)
- return;
- keys = new bmpattern*[nk];
- p = query;
- for (;;) {
- while (p < query_end && map[uchar(*p)] == '\0')
- p++;
- if (p == query_end)
- break;
- const char *start = p;
- while (p < query_end && map[uchar(*p)] != '\0')
- p++;
- keys[nkeys++] = new bmpattern(start, p - start);
- }
- assert(nkeys <= nk);
- if (nkeys == 0) {
- a_delete keys;
- keys = 0;
- }
-}
-
-linear_searcher::~linear_searcher()
-{
- for (int i = 0; i < nkeys; i++)
- delete keys[i];
- a_delete keys;
-}
-
-int linear_searcher::search(const char *buffer, const char *bufend,
- const char **startp, int *lengthp) const
-{
- assert(bufend - buffer > 0);
- assert(buffer[-1] == '\n');
- assert(bufend[-1] == '\n');
- if (nkeys == 0)
- return 0;
- for (;;) {
- const char *refstart;
- const char *found = search_and_check(keys[0], buffer, bufend, &refstart);
- if (!found)
- break;
- const char *refend = find_end(bufend, found + keys[0]->length());
- int i;
- for (i = 1; i < nkeys; i++)
- if (!search_and_check(keys[i], refstart, refend))
- break;
- if (i >= nkeys) {
- *startp = refstart;
- *lengthp = refend - refstart;
- return 1;
- }
- buffer = refend;
- }
- return 0;
-}
-
-class linear_search_item : public search_item {
- file_buffer fbuf;
-public:
- linear_search_item(const char *filename, int fid);
- ~linear_search_item();
- int load(int fd);
- search_item_iterator *make_search_item_iterator(const char *);
- friend class linear_search_item_iterator;
-};
-
-class linear_search_item_iterator : public search_item_iterator {
- linear_search_item *lsi;
- int pos;
-public:
- linear_search_item_iterator(linear_search_item *, const char *query);
- ~linear_search_item_iterator();
- int next(const linear_searcher &, const char **ptr, int *lenp,
- reference_id *ridp);
-};
-
-search_item *make_linear_search_item(int fd, const char *filename, int fid)
-{
- linear_search_item *item = new linear_search_item(filename, fid);
- if (!item->load(fd)) {
- delete item;
- return 0;
- }
- else
- return item;
-}
-
-linear_search_item::linear_search_item(const char *filename, int fid)
-: search_item(filename, fid)
-{
-}
-
-linear_search_item::~linear_search_item()
-{
-}
-
-int linear_search_item::load(int fd)
-{
- return fbuf.load(fd, name);
-}
-
-search_item_iterator *linear_search_item::make_search_item_iterator(
- const char *query)
-{
- return new linear_search_item_iterator(this, query);
-}
-
-linear_search_item_iterator::linear_search_item_iterator(
- linear_search_item *p, const char *)
-: lsi(p), pos(0)
-{
-}
-
-linear_search_item_iterator::~linear_search_item_iterator()
-{
-}
-
-int linear_search_item_iterator::next(const linear_searcher &searcher,
- const char **startp, int *lengthp,
- reference_id *ridp)
-{
- const char *bufstart = lsi->fbuf.get_start();
- const char *bufend = lsi->fbuf.get_end();
- const char *ptr = bufstart + pos;
- if (ptr < bufend && searcher.search(ptr, bufend, startp, lengthp)) {
- pos = *startp + *lengthp - bufstart;
- if (ridp)
- *ridp = reference_id(lsi->filename_id, *startp - bufstart);
- return 1;
- }
- else
- return 0;
-}
diff --git a/contrib/groff/src/libs/libbib/map.c b/contrib/groff/src/libs/libbib/map.c
deleted file mode 100644
index f45625d94b5a..000000000000
--- a/contrib/groff/src/libs/libbib/map.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdlib.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef HAVE_MMAP
-
-#include <sys/types.h>
-#include <sys/mman.h>
-
-/* The Net-2 man pages says that a MAP_FILE flag is required. */
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *mapread(int fd, int nbytes)
-{
- char *p = (char *)mmap((void *)0, (size_t)nbytes, PROT_READ,
- MAP_FILE|MAP_PRIVATE, fd, (off_t)0);
- if (p == (char *)-1)
- return 0;
- /* mmap() shouldn't return 0 since MAP_FIXED wasn't specified. */
- if (p == 0)
- abort();
- return p;
-}
-
-int unmap(char *p, int len)
-{
- return munmap((void *)p, len);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#else /* not HAVE_MMAP */
-
-#include <errno.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *mapread(int fd, int nbytes)
-{
- errno = ENODEV;
- return 0;
-}
-
-int unmap(char *p, int len)
-{
- errno = EINVAL;
- return -1;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not HAVE_MMAP */
diff --git a/contrib/groff/src/libs/libbib/search.cpp b/contrib/groff/src/libs/libbib/search.cpp
deleted file mode 100644
index 4ed0baa5bff1..000000000000
--- a/contrib/groff/src/libs/libbib/search.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "nonposix.h"
-
-#include "refid.h"
-#include "search.h"
-
-int linear_truncate_len = 6;
-const char *linear_ignore_fields = "XYZ";
-
-search_list::search_list()
-: list(0), niterators(0), next_fid(1)
-{
-}
-
-search_list::~search_list()
-{
- assert(niterators == 0);
- while (list) {
- search_item *tem = list->next;
- delete list;
- list = tem;
- }
-}
-
-void search_list::add_file(const char *filename, int silent)
-{
- search_item *p = make_index_search_item(filename, next_fid);
- if (!p) {
- int fd = open(filename, O_RDONLY | O_BINARY);
- if (fd < 0) {
- if (!silent)
- error("can't open `%1': %2", filename, strerror(errno));
- }
- else
- p = make_linear_search_item(fd, filename, next_fid);
- }
- if (p) {
- search_item **pp;
- for (pp = &list; *pp; pp = &(*pp)->next)
- ;
- *pp = p;
- next_fid = p->next_filename_id();
- }
-}
-
-int search_list::nfiles() const
-{
- int n = 0;
- for (search_item *ptr = list; ptr; ptr = ptr->next)
- n++;
- return n;
-}
-
-search_list_iterator::search_list_iterator(search_list *p, const char *q)
-: list(p), ptr(p->list), iter(0), query(strsave(q)),
- searcher(q, strlen(q), linear_ignore_fields, linear_truncate_len)
-{
- list->niterators += 1;
-}
-
-search_list_iterator::~search_list_iterator()
-{
- list->niterators -= 1;
- a_delete query;
- delete iter;
-}
-
-int search_list_iterator::next(const char **pp, int *lenp, reference_id *ridp)
-{
- while (ptr) {
- if (iter == 0)
- iter = ptr->make_search_item_iterator(query);
- if (iter->next(searcher, pp, lenp, ridp))
- return 1;
- delete iter;
- iter = 0;
- ptr = ptr->next;
- }
- return 0;
-}
-
-search_item::search_item(const char *nm, int fid)
-: name(strsave(nm)), filename_id(fid), next(0)
-{
-}
-
-search_item::~search_item()
-{
- a_delete name;
-}
-
-int search_item::is_named(const char *nm) const
-{
- return strcmp(name, nm) == 0;
-}
-
-int search_item::next_filename_id() const
-{
- return filename_id + 1;
-}
-
-search_item_iterator::~search_item_iterator()
-{
-}
diff --git a/contrib/groff/src/libs/libdriver/Makefile.sub b/contrib/groff/src/libs/libdriver/Makefile.sub
deleted file mode 100644
index 5d37e2a46d3c..000000000000
--- a/contrib/groff/src/libs/libdriver/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-LIB=driver
-OBJS=\
- input.$(OBJEXT) \
- printer.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/input.cpp \
- $(srcdir)/printer.cpp
diff --git a/contrib/groff/src/libs/libdriver/input.cpp b/contrib/groff/src/libs/libdriver/input.cpp
deleted file mode 100644
index c2b262af8f03..000000000000
--- a/contrib/groff/src/libs/libdriver/input.cpp
+++ /dev/null
@@ -1,1835 +0,0 @@
-// -*- C++ -*-
-
-// <groff_src_dir>/src/libs/libdriver/input.cpp
-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
- Written by James Clark (jjc@jclark.com)
- Major rewrite 2001 by Bernd Warken (bwarken@mayn.de)
-
- Last update: 15 Jun 2005
-
- This file is part of groff, the GNU roff text processing system.
-
- groff is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- groff is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with groff; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA
- 02110-1301, USA.
-*/
-
-/* Description
-
- This file implements the parser for the intermediate groff output,
- see groff_out(5), and does the printout for the given device.
-
- All parsed information is processed within the function do_file().
- A device postprocessor just needs to fill in the methods for the class
- `printer' (or rather a derived class) without having to worry about
- the syntax of the intermediate output format. Consequently, the
- programming of groff postprocessors is similar to the development of
- device drivers.
-
- The prototyping for this file is done in driver.h (and error.h).
-*/
-
-/* Changes of the 2001 rewrite of this file.
-
- The interface to the outside and the handling of the global
- variables was not changed, but internally many necessary changes
- were performed.
-
- The main aim for this rewrite is to provide a first step towards
- making groff fully compatible with classical troff without pain.
-
- Bugs fixed
- - Unknown subcommands of `D' and `x' are now ignored like in the
- classical case, but a warning is issued. This was also
- implemented for the other commands.
- - A warning is emitted if `x stop' is missing.
- - `DC' and `DE' commands didn't position to the right end after
- drawing (now they do), see discussion below.
- - So far, `x stop' was ignored. Now it terminates the processing
- of the current intermediate output file like the classical troff.
- - The command `c' didn't check correctly on white-space.
- - The environment stack wasn't suitable for the color extensions
- (replaced by a class).
- - The old groff parser could only handle a prologue with the first
- 3 lines having a fixed structure, while classical troff specified
- the sequence of the first 3 commands without further
- restrictions. Now the parser is smart about additional
- white space, comments, and empty lines in the prologue.
- - The old parser allowed space characters only as syntactical
- separators, while classical troff had tab characters as well.
- Now any sequence of tabs and/or spaces is a syntactical
- separator between commands and/or arguments.
- - Range checks for numbers implemented.
-
- New and improved features
- - The color commands `m' and `DF' are added.
- - The old color command `Df' is now converted and delegated to `DFg'.
- - The command `F' is implemented as `use intended file name'. It
- checks whether its argument agrees with the file name used so far,
- otherwise a warning is issued. Then the new name is remembered
- and used for the following error messages.
- - For the positioning after drawing commands, an alternative, easier
- scheme is provided, but not yet activated; it can be chosen by
- undefining the preprocessor macro STUPID_DRAWING_POSITIONING.
- It extends the rule of the classical troff output language in a
- logical way instead of the rather strange actual positioning.
- For details, see the discussion below.
- - For the `D' commands that only set the environment, the calling of
- pr->send_draw() was removed because this doesn't make sense for
- the `DF' commands; the (changed) environment is sent with the
- next command anyway.
- - Error handling was clearly separated into warnings and fatal.
- - The error behavior on additional arguments for `D' and `x'
- commands with a fixed number of arguments was changed from being
- ignored (former groff) to issue a warning and ignore (now), see
- skip_line_x(). No fatal was chosen because both string and
- integer arguments can occur.
- - The gtroff program issues a trailing dummy integer argument for
- some drawing commands with an odd number of arguments to make the
- number of arguments even, e.g. the DC and Dt commands; this is
- honored now.
- - All D commands with a variable number of args expect an even
- number of trailing integer arguments, so fatal on error was
- implemented.
- - Disable environment stack and the commands `{' and `}' by making
- them conditional on macro USE_ENV_STACK; actually, this is
- undefined by default. There isn't any known application for these
- features.
-
- Cosmetics
- - Nested `switch' commands are avoided by using more functions.
- Dangerous 'fall-through's avoided.
- - Commands and functions are sorted alphabetically (where possible).
- - Dynamic arrays/buffers are now implemented as container classes.
- - Some functions had an ugly return structure; this has been
- streamlined by using classes.
- - Use standard C math functions for number handling, so getting rid
- of differences to '0'.
- - The macro `IntArg' has been created for an easier transition
- to guaranteed 32 bits integers (`int' is enough for GNU, while
- ANSI only guarantees `long int' to have a length of 32 bits).
- - The many usages of type `int' are differentiated by using `Char',
- `bool', and `IntArg' where appropriate.
- - To ease the calls of the local utility functions, the parser
- variables `current_file', `npages', and `current_env'
- (formerly env) were made global to the file (formerly they were
- local to the do_file() function)
- - Various comments were added.
-
- TODO
- - Get rid of the stupid drawing positioning.
- - Can the `Dt' command be completely handled by setting environment
- within do_file() instead of sending to pr?
- - Integer arguments must be >= 32 bits, use conditional #define.
- - Add scaling facility for classical device independence and
- non-groff devices. Classical troff output had a quasi device
- independence by scaling the intermediate output to the resolution
- of the postprocessor device if different from the one specified
- with `x T', groff have not. So implement full quasi device
- indepedence, including the mapping of the strange classical
- devices to the postprocessor device (seems to be reasonably
- easy).
- - The external, global pointer variables are not optimally handled.
- - The global variables `current_filename',
- `current_source_filename', and `current_lineno' are only used for
- error reporting. So implement a static class `Error'
- (`::' calls).
- - The global `device' is the name used during the formatting
- process; there should be a new variable for the device name used
- during the postprocessing.
- - Implement the B-spline drawing `D~' for all graphical devices.
- - Make `environment' a class with an overflow check for its members
- and a delete method to get rid of delete_current_env().
- - Implement the `EnvStack' to use `new' instead of `malloc'.
- - The class definitions of this document could go into a new file.
- - The comments in this section should go to a `Changelog' or some
- `README' file in this directory.
-*/
-
-/*
- Discussion of the positioning by drawing commands
-
- There was some confusion about the positioning of the graphical
- pointer at the printout after having executed a `D' command.
- The classical troff manual of Osanna & Kernighan specified,
-
- `The position after a graphical object has been drawn is
- at its end; for circles and ellipses, the "end" is at the
- right side.'
-
- From this, it follows that
- - all open figures (args, splines, and lines) should position at their
- final point.
- - all circles and ellipses should position at their right-most point
- (as if 2 halves had been drawn).
- - all closed figures apart from circles and ellipses shouldn't change
- the position because they return to their origin.
- - all setting commands should not change position because they do not
- draw any graphical object.
-
- In the case of the open figures, this means that the horizontal
- displacement is the sum of all odd arguments and the vertical offset
- the sum of all even arguments, called the alternate arguments sum
- displacement in the following.
-
- Unfortunately, groff did not implement this simple rule. The former
- documentation in groff_out(5) differed from the source code, and
- neither of them is compatible with the classical rule.
-
- The former groff_out(5) specified to use the alternative arguments
- sum displacement for calculating the drawing positioning of
- non-classical commands, including the `Dt' command (setting-only)
- and closed polygons. Applying this to the new groff color commands
- will lead to disaster. For their arguments can take large values (>
- 65000). On low resolution devices, the displacement of such large
- values will corrupt the display or kill the printer. So the
- nonsense specification has come to a natural end anyway.
-
- The groff source code, however, had no positioning for the
- setting-only commands (esp. `Dt'), the right-end positioning for
- outlined circles and ellipses, and the alternative argument sum
- displacement for all other commands (including filled circles and
- ellipses).
-
- The reason why no one seems to have suffered from this mayhem so
- far is that the graphical objects are usually generated by
- preprocessors like pic that do not depend on the automatic
- positioning. When using the low level `\D' escape sequences or `D'
- output commands, the strange positionings can be circumvented by
- absolute positionings or by tricks like `\Z'.
-
- So doing an exorcism on the strange, incompatible displacements might
- not harm any existing documents, but will make the usage of the
- graphical escape sequences and commands natural.
-
- That's why the rewrite of this file returned to the reasonable,
- classical specification with its clear end-of-drawing rule that is
- suitable for all cases. But a macro STUPID_DRAWING_POSITIONING is
- provided for testing the funny former behavior.
-
- The new rule implies the following behavior.
- - Setting commands (`Dt', `Df', `DF') and polygons (`Dp' and `DP')
- do not change position now.
- - Filled circles and ellipses (`DC' and `DE') position at their
- most right point (outlined ones `Dc' and `De' did this anyway).
- - As before, all open graphical objects position to their final
- drawing point (alternate sum of the command arguments).
-
-*/
-
-#ifndef STUPID_DRAWING_POSITIONING
-// uncomment next line if all non-classical D commands shall position
-// to the strange alternate sum of args displacement
-#define STUPID_DRAWING_POSITIONING
-#endif
-
-// Decide whether the commands `{' and `}' for different environments
-// should be used.
-#undef USE_ENV_STACK
-
-#include "driver.h"
-#include "device.h"
-
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-
-
-/**********************************************************************
- local types
- **********************************************************************/
-
-// integer type used in the fields of struct environment (see printer.h)
-typedef int EnvInt;
-
-// integer arguments of groff_out commands, must be >= 32 bits
-typedef int IntArg;
-
-// color components of groff_out color commands, must be >= 32 bits
-typedef unsigned int ColorArg;
-
-// Array for IntArg values.
-class IntArray {
- size_t num_allocated;
- size_t num_stored;
- IntArg *data;
-public:
- IntArray(void);
- IntArray(const size_t);
- ~IntArray(void);
- IntArg operator[](const size_t i) const
- {
- if (i >= num_stored)
- fatal("index out of range");
- return (IntArg) data[i];
- }
- void append(IntArg);
- IntArg *get_data(void) const { return (IntArg *)data; }
- size_t len(void) const { return num_stored; }
-};
-
-// Characters read from the input queue.
-class Char {
- int data;
-public:
- Char(void) : data('\0') {}
- Char(const int c) : data(c) {}
- bool operator==(char c) const { return (data == c) ? true : false; }
- bool operator==(int c) const { return (data == c) ? true : false; }
- bool operator==(const Char c) const
- { return (data == c.data) ? true : false; }
- bool operator!=(char c) const { return !(*this == c); }
- bool operator!=(int c) const { return !(*this == c); }
- bool operator!=(const Char c) const { return !(*this == c); }
- operator int() const { return (int) data; }
- operator unsigned char() const { return (unsigned char) data; }
- operator char() const { return (char) data; }
-};
-
-// Buffer for string arguments (Char, not char).
-class StringBuf {
- size_t num_allocated;
- size_t num_stored;
- Char *data; // not terminated by '\0'
-public:
- StringBuf(void); // allocate without storing
- ~StringBuf(void);
- void append(const Char); // append character to `data'
- char *make_string(void); // return new copy of `data' with '\0'
- bool is_empty(void) { // true if none stored
- return (num_stored > 0) ? false : true;
- }
- void reset(void); // set `num_stored' to 0
-};
-
-#ifdef USE_ENV_STACK
-class EnvStack {
- environment **data;
- size_t num_allocated;
- size_t num_stored;
-public:
- EnvStack(void);
- ~EnvStack(void);
- environment *pop(void);
- void push(environment *e);
-};
-#endif // USE_ENV_STACK
-
-
-/**********************************************************************
- external variables
- **********************************************************************/
-
-// exported as extern by error.h (called from driver.h)
-// needed for error messages (see ../libgroff/error.cpp)
-const char *current_filename = 0; // printable name of the current file
- // printable name of current source file
-const char *current_source_filename = 0;
-int current_lineno = 0; // current line number of printout
-
-// exported as extern by device.h;
-const char *device = 0; // cancel former init with literal
-
-printer *pr;
-
-// Note:
-//
-// We rely on an implementation of the `new' operator which aborts
-// gracefully if it can't allocate memory (e.g. from libgroff/new.cpp).
-
-
-/**********************************************************************
- static local variables
- **********************************************************************/
-
-FILE *current_file = 0; // current input stream for parser
-
-// npages: number of pages processed so far (including current page),
-// _not_ the page number in the printout (can be set with `p').
-int npages = 0;
-
-const ColorArg
-COLORARG_MAX = (ColorArg) 65536U; // == 0xFFFF + 1 == 0x10000
-
-const IntArg
-INTARG_MAX = (IntArg) 0x7FFFFFFF; // maximal signed 32 bits number
-
-// parser environment, created and deleted by each run of do_file()
-environment *current_env = 0;
-
-#ifdef USE_ENV_STACK
-const size_t
-envp_size = sizeof(environment *);
-#endif // USE_ENV_STACK
-
-
-/**********************************************************************
- function declarations
- **********************************************************************/
-
-// utility functions
-ColorArg color_from_Df_command(IntArg);
- // transform old color into new
-void delete_current_env(void); // delete global var current_env
-void fatal_command(char); // abort for invalid command
-inline Char get_char(void); // read next character from input stream
-ColorArg get_color_arg(void); // read in argument for new color cmds
-IntArray *get_D_fixed_args(const size_t);
- // read in fixed number of integer
- // arguments
-IntArray *get_D_fixed_args_odd_dummy(const size_t);
- // read in a fixed number of integer
- // arguments plus optional dummy
-IntArray *get_D_variable_args(void);
- // variable, even number of int args
-char *get_extended_arg(void); // argument for `x X' (several lines)
-IntArg get_integer_arg(void); // read in next integer argument
-IntArray *get_possibly_integer_args();
- // 0 or more integer arguments
-char *get_string_arg(void); // read in next string arg, ended by WS
-inline bool is_space_or_tab(const Char);
- // test on space/tab char
-Char next_arg_begin(void); // skip white space on current line
-Char next_command(void); // go to next command, evt. diff. line
-inline bool odd(const int); // test if integer is odd
-void position_to_end_of_args(const IntArray * const);
- // positioning after drawing
-void remember_filename(const char *);
- // set global current_filename
-void remember_source_filename(const char *);
- // set global current_source_filename
-void send_draw(const Char, const IntArray * const);
- // call pr->draw
-void skip_line(void); // unconditionally skip to next line
-bool skip_line_checked(void); // skip line, false if args are left
-void skip_line_fatal(void); // skip line, fatal if args are left
-void skip_line_warn(void); // skip line, warn if args are left
-void skip_line_D(void); // skip line in D commands
-void skip_line_x(void); // skip line in x commands
-void skip_to_end_of_line(void); // skip to the end of the current line
-inline void unget_char(const Char);
- // restore character onto input
-
-// parser subcommands
-void parse_color_command(color *);
- // color sub(sub)commands m and DF
-void parse_D_command(void); // graphical subcommands
-bool parse_x_command(void); // device controller subcommands
-
-
-/**********************************************************************
- class methods
- **********************************************************************/
-
-#ifdef USE_ENV_STACK
-EnvStack::EnvStack(void)
-{
- num_allocated = 4;
- // allocate pointer to array of num_allocated pointers to environment
- data = (environment **)malloc(envp_size * num_allocated);
- if (data == 0)
- fatal("could not allocate environment data");
- num_stored = 0;
-}
-
-EnvStack::~EnvStack(void)
-{
- for (size_t i = 0; i < num_stored; i++)
- delete data[i];
- free(data);
-}
-
-// return top element from stack and decrease stack pointer
-//
-// the calling function must take care of properly deleting the result
-environment *
-EnvStack::pop(void)
-{
- num_stored--;
- environment *result = data[num_stored];
- data[num_stored] = 0;
- return result;
-}
-
-// copy argument and push this onto the stack
-void
-EnvStack::push(environment *e)
-{
- environment *e_copy = new environment;
- if (num_stored >= num_allocated) {
- environment **old_data = data;
- num_allocated *= 2;
- data = (environment **)malloc(envp_size * num_allocated);
- if (data == 0)
- fatal("could not allocate data");
- for (size_t i = 0; i < num_stored; i++)
- data[i] = old_data[i];
- free(old_data);
- }
- e_copy->col = new color;
- e_copy->fill = new color;
- *e_copy->col = *e->col;
- *e_copy->fill = *e->fill;
- e_copy->fontno = e->fontno;
- e_copy->height = e->height;
- e_copy->hpos = e->hpos;
- e_copy->size = e->size;
- e_copy->slant = e->slant;
- e_copy->vpos = e->vpos;
- data[num_stored] = e_copy;
- num_stored++;
-}
-#endif // USE_ENV_STACK
-
-IntArray::IntArray(void)
-{
- num_allocated = 4;
- data = new IntArg[num_allocated];
- num_stored = 0;
-}
-
-IntArray::IntArray(const size_t n)
-{
- if (n <= 0)
- fatal("number of integers to be allocated must be > 0");
- num_allocated = n;
- data = new IntArg[num_allocated];
- num_stored = 0;
-}
-
-IntArray::~IntArray(void)
-{
- a_delete data;
-}
-
-void
-IntArray::append(IntArg x)
-{
- if (num_stored >= num_allocated) {
- IntArg *old_data = data;
- num_allocated *= 2;
- data = new IntArg[num_allocated];
- for (size_t i = 0; i < num_stored; i++)
- data[i] = old_data[i];
- a_delete old_data;
- }
- data[num_stored] = x;
- num_stored++;
-}
-
-StringBuf::StringBuf(void)
-{
- num_stored = 0;
- num_allocated = 128;
- data = new Char[num_allocated];
-}
-
-StringBuf::~StringBuf(void)
-{
- a_delete data;
-}
-
-void
-StringBuf::append(const Char c)
-{
- if (num_stored >= num_allocated) {
- Char *old_data = data;
- num_allocated *= 2;
- data = new Char[num_allocated];
- for (size_t i = 0; i < num_stored; i++)
- data[i] = old_data[i];
- a_delete old_data;
- }
- data[num_stored] = c;
- num_stored++;
-}
-
-char *
-StringBuf::make_string(void)
-{
- char *result = new char[num_stored + 1];
- for (size_t i = 0; i < num_stored; i++)
- result[i] = (char) data[i];
- result[num_stored] = '\0';
- return result;
-}
-
-void
-StringBuf::reset(void)
-{
- num_stored = 0;
-}
-
-/**********************************************************************
- utility functions
- **********************************************************************/
-
-//////////////////////////////////////////////////////////////////////
-/* color_from_Df_command:
- Process the gray shade setting command Df.
-
- Transform Df style color into DF style color.
- Df color: 0-1000, 0 is white
- DF color: 0-65536, 0 is black
-
- The Df command is obsoleted by command DFg, but kept for
- compatibility.
-*/
-ColorArg
-color_from_Df_command(IntArg Df_gray)
-{
- return ColorArg((1000-Df_gray) * COLORARG_MAX / 1000); // scaling
-}
-
-//////////////////////////////////////////////////////////////////////
-/* delete_current_env():
- Delete global variable current_env and its pointer members.
-
- This should be a class method of environment.
-*/
-void delete_current_env(void)
-{
- delete current_env->col;
- delete current_env->fill;
- delete current_env;
- current_env = 0;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* fatal_command():
- Emit error message about invalid command and abort.
-*/
-void
-fatal_command(char command)
-{
- fatal("`%1' command invalid before first `p' command", command);
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_char():
- Retrieve the next character from the input queue.
-
- Return: The retrieved character (incl. EOF), converted to Char.
-*/
-inline Char
-get_char(void)
-{
- return (Char) getc(current_file);
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_color_arg():
- Retrieve an argument suitable for the color commands m and DF.
-
- Return: The retrieved color argument.
-*/
-ColorArg
-get_color_arg(void)
-{
- IntArg x = get_integer_arg();
- if (x < 0 || x > (IntArg)COLORARG_MAX) {
- error("color component argument out of range");
- x = 0;
- }
- return (ColorArg) x;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_D_fixed_args():
- Get a fixed number of integer arguments for D commands.
-
- Fatal if wrong number of arguments.
- Too many arguments on the line raise a warning.
- A line skip is done.
-
- number: In-parameter, the number of arguments to be retrieved.
- ignore: In-parameter, ignore next argument -- GNU troff always emits
- pairs of parameters for `D' extensions added by groff.
- Default is `false'.
-
- Return: New IntArray containing the arguments.
-*/
-IntArray *
-get_D_fixed_args(const size_t number)
-{
- if (number <= 0)
- fatal("requested number of arguments must be > 0");
- IntArray *args = new IntArray(number);
- for (size_t i = 0; i < number; i++)
- args->append(get_integer_arg());
- skip_line_D();
- return args;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_D_fixed_args_odd_dummy():
- Get a fixed number of integer arguments for D commands and optionally
- ignore a dummy integer argument if the requested number is odd.
-
- The gtroff program adds a dummy argument to some commands to get
- an even number of arguments.
- Error if the number of arguments differs from the scheme above.
- A line skip is done.
-
- number: In-parameter, the number of arguments to be retrieved.
-
- Return: New IntArray containing the arguments.
-*/
-IntArray *
-get_D_fixed_args_odd_dummy(const size_t number)
-{
- if (number <= 0)
- fatal("requested number of arguments must be > 0");
- IntArray *args = new IntArray(number);
- for (size_t i = 0; i < number; i++)
- args->append(get_integer_arg());
- if (odd(number)) {
- IntArray *a = get_possibly_integer_args();
- if (a->len() > 1)
- error("too many arguments");
- delete a;
- }
- skip_line_D();
- return args;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_D_variable_args():
- Get a variable even number of integer arguments for D commands.
-
- Get as many integer arguments as possible from the rest of the
- current line.
- - The arguments are separated by an arbitrary sequence of space or
- tab characters.
- - A comment, a newline, or EOF indicates the end of processing.
- - Error on non-digit characters different from these.
- - A final line skip is performed (except for EOF).
-
- Return: New IntArray of the retrieved arguments.
-*/
-IntArray *
-get_D_variable_args()
-{
- IntArray *args = get_possibly_integer_args();
- size_t n = args->len();
- if (n <= 0)
- error("no arguments found");
- if (odd(n))
- error("even number of arguments expected");
- skip_line_D();
- return args;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_extended_arg():
- Retrieve extended arg for `x X' command.
-
- - Skip leading spaces and tabs, error on EOL or newline.
- - Return everything before the next NL or EOF ('#' is not a comment);
- as long as the following line starts with '+' this is returned
- as well, with the '+' replaced by a newline.
- - Final line skip is always performed.
-
- Return: Allocated (new) string of retrieved text argument.
-*/
-char *
-get_extended_arg(void)
-{
- StringBuf buf = StringBuf();
- Char c = next_arg_begin();
- while ((int) c != EOF) {
- if ((int) c == '\n') {
- current_lineno++;
- c = get_char();
- if ((int) c == '+')
- buf.append((Char) '\n');
- else {
- unget_char(c); // first character of next line
- break;
- }
- }
- else
- buf.append(c);
- c = get_char();
- }
- return buf.make_string();
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_integer_arg(): Retrieve integer argument.
-
- Skip leading spaces and tabs, collect an optional '-' and all
- following decimal digits (at least one) up to the next non-digit,
- which is restored onto the input queue.
-
- Fatal error on all other situations.
-
- Return: Retrieved integer.
-*/
-IntArg
-get_integer_arg(void)
-{
- StringBuf buf = StringBuf();
- Char c = next_arg_begin();
- if ((int) c == '-') {
- buf.append(c);
- c = get_char();
- }
- if (!isdigit((int) c))
- error("integer argument expected");
- while (isdigit((int) c)) {
- buf.append(c);
- c = get_char();
- }
- // c is not a digit
- unget_char(c);
- char *s = buf.make_string();
- errno = 0;
- long int number = strtol(s, 0, 10);
- if (errno != 0
- || number > INTARG_MAX || number < -INTARG_MAX) {
- error("integer argument too large");
- number = 0;
- }
- a_delete s;
- return (IntArg) number;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_possibly_integer_args():
- Parse the rest of the input line as a list of integer arguments.
-
- Get as many integer arguments as possible from the rest of the
- current line, even none.
- - The arguments are separated by an arbitrary sequence of space or
- tab characters.
- - A comment, a newline, or EOF indicates the end of processing.
- - Error on non-digit characters different from these.
- - No line skip is performed.
-
- Return: New IntArray of the retrieved arguments.
-*/
-IntArray *
-get_possibly_integer_args()
-{
- bool done = false;
- StringBuf buf = StringBuf();
- Char c = get_char();
- IntArray *args = new IntArray();
- while (!done) {
- buf.reset();
- while (is_space_or_tab(c))
- c = get_char();
- if (c == '-') {
- Char c1 = get_char();
- if (isdigit((int) c1)) {
- buf.append(c);
- c = c1;
- }
- else
- unget_char(c1);
- }
- while (isdigit((int) c)) {
- buf.append(c);
- c = get_char();
- }
- if (!buf.is_empty()) {
- char *s = buf.make_string();
- errno = 0;
- long int x = strtol(s, 0, 10);
- if (errno
- || x > INTARG_MAX || x < -INTARG_MAX) {
- error("invalid integer argument, set to 0");
- x = 0;
- }
- args->append((IntArg) x);
- a_delete s;
- }
- // Here, c is not a digit.
- // Terminate on comment, end of line, or end of file, while
- // space or tab indicate continuation; otherwise error.
- switch((int) c) {
- case '#':
- skip_to_end_of_line();
- done = true;
- break;
- case '\n':
- done = true;
- unget_char(c);
- break;
- case EOF:
- done = true;
- break;
- case ' ':
- case '\t':
- break;
- default:
- error("integer argument expected");
- break;
- }
- }
- return args;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* get_string_arg():
- Retrieve string arg.
-
- - Skip leading spaces and tabs; error on EOL or newline.
- - Return all following characters before the next space, tab,
- newline, or EOF character (in-word '#' is not a comment character).
- - The terminating space, tab, newline, or EOF character is restored
- onto the input queue, so no line skip.
-
- Return: Retrieved string as char *, allocated by 'new'.
-*/
-char *
-get_string_arg(void)
-{
- StringBuf buf = StringBuf();
- Char c = next_arg_begin();
- while (!is_space_or_tab(c)
- && c != Char('\n') && c != Char(EOF)) {
- buf.append(c);
- c = get_char();
- }
- unget_char(c); // restore white space
- return buf.make_string();
-}
-
-//////////////////////////////////////////////////////////////////////
-/* is_space_or_tab():
- Test a character if it is a space or tab.
-
- c: In-parameter, character to be tested.
-
- Return: True, if c is a space or tab character, false otherwise.
-*/
-inline bool
-is_space_or_tab(const Char c)
-{
- return (c == Char(' ') || c == Char('\t')) ? true : false;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* next_arg_begin():
- Return first character of next argument.
-
- Skip space and tab characters; error on newline or EOF.
-
- Return: The first character different from these (including '#').
-*/
-Char
-next_arg_begin(void)
-{
- Char c;
- while (1) {
- c = get_char();
- switch ((int) c) {
- case ' ':
- case '\t':
- break;
- case '\n':
- case EOF:
- error("missing argument");
- break;
- default: // first essential character
- return c;
- }
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* next_command():
- Find the first character of the next command.
-
- Skip spaces, tabs, comments (introduced by #), and newlines.
-
- Return: The first character different from these (including EOF).
-*/
-Char
-next_command(void)
-{
- Char c;
- while (1) {
- c = get_char();
- switch ((int) c) {
- case ' ':
- case '\t':
- break;
- case '\n':
- current_lineno++;
- break;
- case '#': // comment
- skip_line();
- break;
- default: // EOF or first essential character
- return c;
- }
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* odd():
- Test whether argument is an odd number.
-
- n: In-parameter, the integer to be tested.
-
- Return: True if odd, false otherwise.
-*/
-inline bool
-odd(const int n)
-{
- return ((n & 1) == 1) ? true : false;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* position_to_end_of_args():
- Move graphical pointer to end of drawn figure.
-
- This is used by the D commands that draw open geometrical figures.
- The algorithm simply sums up all horizontal displacements (arguments
- with even number) for the horizontal component. Similarly, the
- vertical component is the sum of the odd arguments.
-
- args: In-parameter, the arguments of a former drawing command.
-*/
-void
-position_to_end_of_args(const IntArray * const args)
-{
- size_t i;
- const size_t n = args->len();
- for (i = 0; i < n; i += 2)
- current_env->hpos += (*args)[i];
- for (i = 1; i < n; i += 2)
- current_env->vpos += (*args)[i];
-}
-
-//////////////////////////////////////////////////////////////////////
-/* remember_filename():
- Set global variable current_filename.
-
- The actual filename is stored in current_filename. This is used by
- the postprocessors, expecting the name "<standard input>" for stdin.
-
- filename: In-out-parameter; is changed to the new value also.
-*/
-void
-remember_filename(const char *filename)
-{
- char *fname;
- if (strcmp(filename, "-") == 0)
- fname = (char *)"<standard input>";
- else
- fname = (char *)filename;
- size_t len = strlen(fname) + 1;
- if (current_filename != 0)
- free((char *)current_filename);
- current_filename = (const char *)malloc(len);
- if (current_filename == 0)
- fatal("can't malloc space for filename");
- strncpy((char *)current_filename, (char *)fname, len);
-}
-
-//////////////////////////////////////////////////////////////////////
-/* remember_source_filename():
- Set global variable current_source_filename.
-
- The actual filename is stored in current_filename. This is used by
- the postprocessors, expecting the name "<standard input>" for stdin.
-
- filename: In-out-parameter; is changed to the new value also.
-*/
-void
-remember_source_filename(const char *filename)
-{
- char *fname;
- if (strcmp(filename, "-") == 0)
- fname = (char *)"<standard input>";
- else
- fname = (char *)filename;
- size_t len = strlen(fname) + 1;
- if (current_source_filename != 0)
- free((char *)current_source_filename);
- current_source_filename = (const char *)malloc(len);
- if (current_source_filename == 0)
- fatal("can't malloc space for filename");
- strncpy((char *)current_source_filename, (char *)fname, len);
-}
-
-//////////////////////////////////////////////////////////////////////
-/* send_draw():
- Call draw method of printer class.
-
- subcmd: Letter of actual D subcommand.
- args: Array of integer arguments of actual D subcommand.
-*/
-void
-send_draw(const Char subcmd, const IntArray * const args)
-{
- EnvInt n = (EnvInt) args->len();
- pr->draw((int) subcmd, (IntArg *)args->get_data(), n, current_env);
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line():
- Go to next line within the input queue.
-
- Skip the rest of the current line, including the newline character.
- The global variable current_lineno is adjusted.
- No errors are raised.
-*/
-void
-skip_line(void)
-{
- Char c = get_char();
- while (1) {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- if (c == EOF)
- break;
- c = get_char();
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line_checked ():
- Check that there aren't any arguments left on the rest of the line,
- then skip line.
-
- Spaces, tabs, and a comment are allowed before newline or EOF.
- All other characters raise an error.
-*/
-bool
-skip_line_checked(void)
-{
- bool ok = true;
- Char c = get_char();
- while (is_space_or_tab(c))
- c = get_char();
- switch((int) c) {
- case '#': // comment
- skip_line();
- break;
- case '\n':
- current_lineno++;
- break;
- case EOF:
- break;
- default:
- ok = false;
- skip_line();
- break;
- }
- return ok;
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line_fatal ():
- Fatal error if arguments left, otherwise skip line.
-
- Spaces, tabs, and a comment are allowed before newline or EOF.
- All other characters trigger the error.
-*/
-void
-skip_line_fatal(void)
-{
- bool ok = skip_line_checked();
- if (!ok) {
- current_lineno--;
- error("too many arguments");
- current_lineno++;
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line_warn ():
- Skip line, but warn if arguments are left on actual line.
-
- Spaces, tabs, and a comment are allowed before newline or EOF.
- All other characters raise a warning
-*/
-void
-skip_line_warn(void)
-{
- bool ok = skip_line_checked();
- if (!ok) {
- current_lineno--;
- warning("too many arguments on current line");
- current_lineno++;
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line_D ():
- Skip line in `D' commands.
-
- Decide whether in case of an additional argument a fatal error is
- raised (the documented classical behavior), only a warning is
- issued, or the line is just skipped (former groff behavior).
- Actually decided for the warning.
-*/
-void
-skip_line_D(void)
-{
- skip_line_warn();
- // or: skip_line_fatal();
- // or: skip_line();
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_line_x ():
- Skip line in `x' commands.
-
- Decide whether in case of an additional argument a fatal error is
- raised (the documented classical behavior), only a warning is
- issued, or the line is just skipped (former groff behavior).
- Actually decided for the warning.
-*/
-void
-skip_line_x(void)
-{
- skip_line_warn();
- // or: skip_line_fatal();
- // or: skip_line();
-}
-
-//////////////////////////////////////////////////////////////////////
-/* skip_to_end_of_line():
- Go to the end of the current line.
-
- Skip the rest of the current line, excluding the newline character.
- The global variable current_lineno is not changed.
- No errors are raised.
-*/
-void
-skip_to_end_of_line(void)
-{
- Char c = get_char();
- while (1) {
- if (c == '\n') {
- unget_char(c);
- return;
- }
- if (c == EOF)
- return;
- c = get_char();
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-/* unget_char(c):
- Restore character c onto input queue.
-
- Write a character back onto the input stream.
- EOF is gracefully handled.
-
- c: In-parameter; character to be pushed onto the input queue.
-*/
-inline void
-unget_char(const Char c)
-{
- if (c != EOF) {
- int ch = (int) c;
- if (ungetc(ch, current_file) == EOF)
- fatal("could not unget character");
- }
-}
-
-
-/**********************************************************************
- parser subcommands
- **********************************************************************/
-
-//////////////////////////////////////////////////////////////////////
-/* parse_color_command:
- Process the commands m and DF, but not Df.
-
- col: In-out-parameter; the color object to be set, must have
- been initialized before.
-*/
-void
-parse_color_command(color *col)
-{
- ColorArg gray = 0;
- ColorArg red = 0, green = 0, blue = 0;
- ColorArg cyan = 0, magenta = 0, yellow = 0, black = 0;
- Char subcmd = next_arg_begin();
- switch((int) subcmd) {
- case 'c': // DFc or mc: CMY
- cyan = get_color_arg();
- magenta = get_color_arg();
- yellow = get_color_arg();
- col->set_cmy(cyan, magenta, yellow);
- break;
- case 'd': // DFd or md: set default color
- col->set_default();
- break;
- case 'g': // DFg or mg: gray
- gray = get_color_arg();
- col->set_gray(gray);
- break;
- case 'k': // DFk or mk: CMYK
- cyan = get_color_arg();
- magenta = get_color_arg();
- yellow = get_color_arg();
- black = get_color_arg();
- col->set_cmyk(cyan, magenta, yellow, black);
- break;
- case 'r': // DFr or mr: RGB
- red = get_color_arg();
- green = get_color_arg();
- blue = get_color_arg();
- col->set_rgb(red, green, blue);
- break;
- default:
- error("invalid color scheme `%1'", (int) subcmd);
- break;
- } // end of color subcommands
-}
-
-//////////////////////////////////////////////////////////////////////
-/* parse_D_command():
- Parse the subcommands of graphical command D.
-
- This is the part of the do_file() parser that scans the graphical
- subcommands.
- - Error on lacking or wrong arguments.
- - Warning on too many arguments.
- - Line is always skipped.
-*/
-void
-parse_D_command()
-{
- Char subcmd = next_arg_begin();
- switch((int) subcmd) {
- case '~': // D~: draw B-spline
- // actually, this isn't available for some postprocessors
- // fall through
- default: // unknown options are passed to device
- {
- IntArray *args = get_D_variable_args();
- send_draw(subcmd, args);
- position_to_end_of_args(args);
- delete args;
- break;
- }
- case 'a': // Da: draw arc
- {
- IntArray *args = get_D_fixed_args(4);
- send_draw(subcmd, args);
- position_to_end_of_args(args);
- delete args;
- break;
- }
- case 'c': // Dc: draw circle line
- {
- IntArray *args = get_D_fixed_args(1);
- send_draw(subcmd, args);
- // move to right end
- current_env->hpos += (*args)[0];
- delete args;
- break;
- }
- case 'C': // DC: draw solid circle
- {
- IntArray *args = get_D_fixed_args_odd_dummy(1);
- send_draw(subcmd, args);
- // move to right end
- current_env->hpos += (*args)[0];
- delete args;
- break;
- }
- case 'e': // De: draw ellipse line
- case 'E': // DE: draw solid ellipse
- {
- IntArray *args = get_D_fixed_args(2);
- send_draw(subcmd, args);
- // move to right end
- current_env->hpos += (*args)[0];
- delete args;
- break;
- }
- case 'f': // Df: set fill gray; obsoleted by DFg
- {
- IntArg arg = get_integer_arg();
- if ((arg >= 0) && (arg <= 1000)) {
- // convert arg and treat it like DFg
- ColorArg gray = color_from_Df_command(arg);
- current_env->fill->set_gray(gray);
- }
- else {
- // set fill color to the same value as the current outline color
- delete current_env->fill;
- current_env->fill = new color(current_env->col);
- }
- pr->change_fill_color(current_env);
- // skip unused `vertical' component (\D'...' always emits pairs)
- (void) get_integer_arg();
-# ifdef STUPID_DRAWING_POSITIONING
- current_env->hpos += arg;
-# endif
- skip_line_x();
- break;
- }
- case 'F': // DF: set fill color, several formats
- parse_color_command(current_env->fill);
- pr->change_fill_color(current_env);
- // no positioning (setting-only command)
- skip_line_x();
- break;
- case 'l': // Dl: draw line
- {
- IntArray *args = get_D_fixed_args(2);
- send_draw(subcmd, args);
- position_to_end_of_args(args);
- delete args;
- break;
- }
- case 'p': // Dp: draw closed polygon line
- case 'P': // DP: draw solid closed polygon
- {
- IntArray *args = get_D_variable_args();
- send_draw(subcmd, args);
-# ifdef STUPID_DRAWING_POSITIONING
- // final args positioning
- position_to_end_of_args(args);
-# endif
- delete args;
- break;
- }
- case 't': // Dt: set line thickness
- {
- IntArray *args = get_D_fixed_args_odd_dummy(1);
- send_draw(subcmd, args);
-# ifdef STUPID_DRAWING_POSITIONING
- // final args positioning
- position_to_end_of_args(args);
-# endif
- delete args;
- break;
- }
- } // end of D subcommands
-}
-
-//////////////////////////////////////////////////////////////////////
-/* parse_x_command():
- Parse subcommands of the device control command x.
-
- This is the part of the do_file() parser that scans the device
- controlling commands.
- - Error on duplicate prologue commands.
- - Error on wrong or lacking arguments.
- - Warning on too many arguments.
- - Line is always skipped.
-
- Globals:
- - current_env: is set by many subcommands.
- - npages: page counting variable
-
- Return: boolean in the meaning of `stopped'
- - true if parsing should be stopped (`x stop').
- - false if parsing should continue.
-*/
-bool
-parse_x_command(void)
-{
- bool stopped = false;
- char *subcmd_str = get_string_arg();
- char subcmd = subcmd_str[0];
- switch (subcmd) {
- case 'f': // x font: mount font
- {
- IntArg n = get_integer_arg();
- char *name = get_string_arg();
- pr->load_font(n, name);
- a_delete name;
- skip_line_x();
- break;
- }
- case 'F': // x Filename: set filename for errors
- {
- char *str_arg = get_string_arg();
- if (str_arg == 0)
- warning("empty argument for `x F' command");
- else {
- remember_source_filename(str_arg);
- a_delete str_arg;
- }
- break;
- }
- case 'H': // x Height: set character height
- current_env->height = get_integer_arg();
- if (current_env->height == current_env->size)
- current_env->height = 0;
- skip_line_x();
- break;
- case 'i': // x init: initialize device
- error("duplicate `x init' command");
- skip_line_x();
- break;
- case 'p': // x pause: pause device
- skip_line_x();
- break;
- case 'r': // x res: set resolution
- error("duplicate `x res' command");
- skip_line_x();
- break;
- case 's': // x stop: stop device
- stopped = true;
- skip_line_x();
- break;
- case 'S': // x Slant: set slant
- current_env->slant = get_integer_arg();
- skip_line_x();
- break;
- case 't': // x trailer: generate trailer info
- skip_line_x();
- break;
- case 'T': // x Typesetter: set typesetter
- error("duplicate `x T' command");
- skip_line();
- break;
- case 'u': // x underline: from .cu
- {
- char *str_arg = get_string_arg();
- pr->special(str_arg, current_env, 'u');
- a_delete str_arg;
- skip_line_x();
- break;
- }
- case 'X': // x X: send uninterpretedly to device
- {
- char *str_arg = get_extended_arg(); // includes line skip
- if (npages <= 0)
- error("`x X' command invalid before first `p' command");
- else if (str_arg && (strncmp(str_arg, "devtag:",
- strlen("devtag:")) == 0))
- pr->devtag(str_arg, current_env);
- else
- pr->special(str_arg, current_env);
- a_delete str_arg;
- break;
- }
- default: // ignore unknown x commands, but warn
- warning("unknown command `x %1'", subcmd);
- skip_line();
- }
- a_delete subcmd_str;
- return stopped;
-}
-
-
-/**********************************************************************
- exported part (by driver.h)
- **********************************************************************/
-
-////////////////////////////////////////////////////////////////////////
-/* do_file():
- Parse and postprocess groff intermediate output.
-
- filename: "-" for standard input, normal file name otherwise
-*/
-void
-do_file(const char *filename)
-{
- Char command;
- bool stopped = false; // terminating condition
-
-#ifdef USE_ENV_STACK
- EnvStack env_stack = EnvStack();
-#endif // USE_ENV_STACK
-
- // setup of global variables
- npages = 0;
- current_lineno = 1;
- // `pr' is initialized after the prologue.
- // `device' is set by the 1st prologue command.
-
- if (filename[0] == '-' && filename[1] == '\0')
- current_file = stdin;
- else {
- errno = 0;
- current_file = fopen(filename, "r");
- if (errno != 0 || current_file == 0) {
- error("can't open file `%1'", filename);
- return;
- }
- }
- remember_filename(filename);
-
- if (current_env != 0)
- delete_current_env();
- current_env = new environment;
- current_env->col = new color;
- current_env->fill = new color;
- current_env->fontno = -1;
- current_env->height = 0;
- current_env->hpos = -1;
- current_env->slant = 0;
- current_env->size = 0;
- current_env->vpos = -1;
-
- // parsing of prologue (first 3 commands)
- {
- char *str_arg;
- IntArg int_arg;
-
- // 1st command `x T'
- command = next_command();
- if ((int) command == EOF)
- return;
- if ((int) command != 'x')
- fatal("the first command must be `x T'");
- str_arg = get_string_arg();
- if (str_arg[0] != 'T')
- fatal("the first command must be `x T'");
- a_delete str_arg;
- char *tmp_dev = get_string_arg();
- if (pr == 0) { // note: `pr' initialized after prologue
- device = tmp_dev;
- if (!font::load_desc())
- fatal("couldn't load DESC file, can't continue");
- }
- else {
- if (device == 0 || strcmp(device, tmp_dev) != 0)
- fatal("all files must use the same device");
- a_delete tmp_dev;
- }
- skip_line_x(); // ignore further arguments
- current_env->size = 10 * font::sizescale;
-
- // 2nd command `x res'
- command = next_command();
- if ((int) command != 'x')
- fatal("the second command must be `x res'");
- str_arg = get_string_arg();
- if (str_arg[0] != 'r')
- fatal("the second command must be `x res'");
- a_delete str_arg;
- int_arg = get_integer_arg();
- EnvInt font_res = font::res;
- if (int_arg != font_res)
- fatal("resolution does not match");
- int_arg = get_integer_arg();
- if (int_arg != font::hor)
- fatal("minimum horizontal motion does not match");
- int_arg = get_integer_arg();
- if (int_arg != font::vert)
- fatal("minimum vertical motion does not match");
- skip_line_x(); // ignore further arguments
-
- // 3rd command `x init'
- command = next_command();
- if (command != 'x')
- fatal("the third command must be `x init'");
- str_arg = get_string_arg();
- if (str_arg[0] != 'i')
- fatal("the third command must be `x init'");
- a_delete str_arg;
- skip_line_x();
- }
-
- // parsing of body
- if (pr == 0)
- pr = make_printer();
- while (!stopped) {
- command = next_command();
- if (command == EOF)
- break;
- // spaces, tabs, comments, and newlines are skipped here
- switch ((int) command) {
- case '#': // #: comment, ignore up to end of line
- skip_line();
- break;
-#ifdef USE_ENV_STACK
- case '{': // {: start a new environment (a copy)
- env_stack.push(current_env);
- break;
- case '}': // }: pop previous env from stack
- delete_current_env();
- current_env = env_stack.pop();
- break;
-#endif // USE_ENV_STACK
- case '0': // ddc: obsolete jump and print command
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- { // expect 2 digits and a character
- char s[3];
- Char c = next_arg_begin();
- if (npages <= 0)
- fatal_command(command);
- if (!isdigit((int) c)) {
- error("digit expected");
- c = 0;
- }
- s[0] = (char) command;
- s[1] = (char) c;
- s[2] = '\0';
- errno = 0;
- long int x = strtol(s, 0, 10);
- if (errno != 0)
- error("couldn't convert 2 digits");
- EnvInt hor_pos = (EnvInt) x;
- current_env->hpos += hor_pos;
- c = next_arg_begin();
- if ((int) c == '\n' || (int) c == EOF)
- error("character argument expected");
- else
- pr->set_ascii_char((unsigned char) c, current_env);
- break;
- }
- case 'c': // c: print ascii char without moving
- {
- if (npages <= 0)
- fatal_command(command);
- Char c = next_arg_begin();
- if (c == '\n' || c == EOF)
- error("missing argument to `c' command");
- else
- pr->set_ascii_char((unsigned char) c, current_env);
- break;
- }
- case 'C': // C: print named special character
- {
- if (npages <= 0)
- fatal_command(command);
- char *str_arg = get_string_arg();
- pr->set_special_char(str_arg, current_env);
- a_delete str_arg;
- break;
- }
- case 'D': // drawing commands
- if (npages <= 0)
- fatal_command(command);
- parse_D_command();
- break;
- case 'f': // f: set font to number
- current_env->fontno = get_integer_arg();
- break;
- case 'F': // F: obsolete, replaced by `x F'
- {
- char *str_arg = get_string_arg();
- remember_source_filename(str_arg);
- a_delete str_arg;
- break;
- }
- case 'h': // h: relative horizontal move
- current_env->hpos += (EnvInt) get_integer_arg();
- break;
- case 'H': // H: absolute horizontal positioning
- current_env->hpos = (EnvInt) get_integer_arg();
- break;
- case 'm': // m: glyph color
- parse_color_command(current_env->col);
- pr->change_color(current_env);
- break;
- case 'n': // n: print end of line
- // ignore two arguments (historically)
- if (npages <= 0)
- fatal_command(command);
- pr->end_of_line();
- (void) get_integer_arg();
- (void) get_integer_arg();
- break;
- case 'N': // N: print char with given int code
- if (npages <= 0)
- fatal_command(command);
- pr->set_numbered_char(get_integer_arg(), current_env);
- break;
- case 'p': // p: start new page with given number
- if (npages > 0)
- pr->end_page(current_env->vpos);
- npages++; // increment # of processed pages
- pr->begin_page(get_integer_arg());
- current_env->vpos = 0;
- break;
- case 's': // s: set point size
- current_env->size = get_integer_arg();
- if (current_env->height == current_env->size)
- current_env->height = 0;
- break;
- case 't': // t: print a text word
- {
- char c;
- if (npages <= 0)
- fatal_command(command);
- char *str_arg = get_string_arg();
- size_t i = 0;
- while ((c = str_arg[i++]) != '\0') {
- EnvInt w;
- pr->set_ascii_char((unsigned char) c, current_env, &w);
- current_env->hpos += w;
- }
- a_delete str_arg;
- break;
- }
- case 'u': // u: print spaced word
- {
- char c;
- if (npages <= 0)
- fatal_command(command);
- EnvInt kern = (EnvInt) get_integer_arg();
- char *str_arg = get_string_arg();
- size_t i = 0;
- while ((c = str_arg[i++]) != '\0') {
- EnvInt w;
- pr->set_ascii_char((unsigned char) c, current_env, &w);
- current_env->hpos += w + kern;
- }
- a_delete str_arg;
- break;
- }
- case 'v': // v: relative vertical move
- current_env->vpos += (EnvInt) get_integer_arg();
- break;
- case 'V': // V: absolute vertical positioning
- current_env->vpos = (EnvInt) get_integer_arg();
- break;
- case 'w': // w: inform about paddable space
- break;
- case 'x': // device controlling commands
- stopped = parse_x_command();
- break;
- default:
- warning("unrecognized command `%1'", (unsigned char) command);
- skip_line();
- break;
- } // end of switch
- } // end of while
-
- // end of file reached
- if (npages > 0)
- pr->end_page(current_env->vpos);
- delete pr;
- pr = 0;
- fclose(current_file);
- // If `stopped' is not `true' here then there wasn't any `x stop'.
- if (!stopped)
- warning("no final `x stop' command");
- delete_current_env();
-}
diff --git a/contrib/groff/src/libs/libdriver/printer.cpp b/contrib/groff/src/libs/libdriver/printer.cpp
deleted file mode 100644
index fd77d6b59eb7..000000000000
--- a/contrib/groff/src/libs/libdriver/printer.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-// -*- C++ -*-
-
-// <groff_src_dir>/src/libs/libdriver/printer.cpp
-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
- Last update: 02 Mar 2005
-
- This file is part of groff.
-
- groff is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- groff is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with groff; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA
- 02110-1301, USA.
-*/
-
-#include "driver.h"
-
-/* If we are sending output to an onscreen pager (as is the normal case
- when reading man pages), then we may get an error state on the output
- stream, if the user does not read all the way to the end.
-
- We normally expect to catch this, and clean up the error context, when
- the pager exits, because we should get, and handle, a SIGPIPE.
-
- However ...
-*/
-
-#if (defined(_MSC_VER) || defined(_WIN32)) \
- && !defined(__CYGWIN__) && !defined(_UWIN)
-
- /* Native MS-Windows doesn't know about SIGPIPE, so we cannot detect the
- early exit from the pager, and therefore, cannot clean up the error
- context; thus we use the following static function to identify this
- particular error context, and so suppress unwanted diagnostics.
- */
-
- static int
- check_for_output_error (FILE* stream)
- {
- /* First, clean up any prior error context on the output stream */
- if (ferror (stream))
- clearerr (stream);
- /* Clear errno, in case clearerr() and fflush() don't */
- errno = 0;
- /* Flush the output stream, so we can capture any error context, other
- than the specific case we wish to suppress.
-
- Microsoft doesn't document it, but the error code for the specific
- context we are trying to suppress seems to be EINVAL -- a strange
- choice, since it is not normally associated with fflush(); of course,
- it *should* be EPIPE, but this *definitely* is not used, and *is* so
- documented.
- */
- return ((fflush(stream) < 0) && (errno != EINVAL));
- }
-
-#else
-
- /* For other systems, we simply assume that *any* output error context
- is to be reported.
- */
-# define check_for_output_error(stream) ferror(stream) || fflush(stream) < 0
-
-#endif
-
-
-font_pointer_list::font_pointer_list(font *f, font_pointer_list *fp)
-: p(f), next(fp)
-{
-}
-
-printer::printer()
-: font_list(0), font_table(0), nfonts(0)
-{
-}
-
-printer::~printer()
-{
- a_delete font_table;
- while (font_list) {
- font_pointer_list *tem = font_list;
- font_list = font_list->next;
- delete tem->p;
- delete tem;
- }
- if (check_for_output_error(stdout))
- fatal("output error");
-}
-
-void printer::load_font(int n, const char *nm)
-{
- assert(n >= 0);
- if (n >= nfonts) {
- if (nfonts == 0) {
- nfonts = 10;
- if (nfonts <= n)
- nfonts = n + 1;
- font_table = new font *[nfonts];
- for (int i = 0; i < nfonts; i++)
- font_table[i] = 0;
- }
- else {
- font **old_font_table = font_table;
- int old_nfonts = nfonts;
- nfonts *= 2;
- if (n >= nfonts)
- nfonts = n + 1;
- font_table = new font *[nfonts];
- int i;
- for (i = 0; i < old_nfonts; i++)
- font_table[i] = old_font_table[i];
- for (i = old_nfonts; i < nfonts; i++)
- font_table[i] = 0;
- a_delete old_font_table;
- }
- }
- font *f = find_font(nm);
- font_table[n] = f;
-}
-
-font *printer::find_font(const char *nm)
-{
- for (font_pointer_list *p = font_list; p; p = p->next)
- if (strcmp(p->p->get_name(), nm) == 0)
- return p->p;
- font *f = make_font(nm);
- if (!f)
- fatal("sorry, I can't continue");
- font_list = new font_pointer_list(f, font_list);
- return f;
-}
-
-font *printer::make_font(const char *nm)
-{
- return font::load_font(nm);
-}
-
-void printer::end_of_line()
-{
-}
-
-void printer::special(char *, const environment *, char)
-{
-}
-
-void printer::devtag(char *, const environment *, char)
-{
-}
-
-void printer::draw(int, int *, int, const environment *)
-{
-}
-
-void printer::change_color(const environment * const)
-{
-}
-
-void printer::change_fill_color(const environment * const)
-{
-}
-
-void printer::set_ascii_char(unsigned char c, const environment *env,
- int *widthp)
-{
- char buf[2];
- int w;
- font *f;
-
- buf[0] = c;
- buf[1] = '\0';
-
- int i = set_char_and_width(buf, env, &w, &f);
- set_char(i, f, env, w, 0);
- if (widthp) {
- *widthp = w;
- }
-}
-
-void printer::set_special_char(const char *nm, const environment *env,
- int *widthp)
-{
- font *f;
- int w;
- int i = set_char_and_width(nm, env, &w, &f);
- if (i != -1) {
- set_char(i, f, env, w, nm);
- if (widthp)
- *widthp = w;
- }
-}
-
-int printer::set_char_and_width(const char *nm, const environment *env,
- int *widthp, font **f)
-{
- int i = font::name_to_index(nm);
- int fn = env->fontno;
- if (fn < 0 || fn >= nfonts) {
- error("bad font position `%1'", fn);
- return(-1);
- }
- *f = font_table[fn];
- if (*f == 0) {
- error("no font mounted at `%1'", fn);
- return(-1);
- }
- if (!(*f)->contains(i)) {
- if (nm[0] != '\0' && nm[1] == '\0')
- error("font `%1' does not contain ascii character `%2'",
- (*f)->get_name(),
- nm[0]);
- else
- error("font `%1' does not contain special character `%2'",
- (*f)->get_name(),
- nm);
- return(-1);
- }
- int w = (*f)->get_width(i, env->size);
- if (widthp)
- *widthp = w;
- return( i );
-}
-
-void printer::set_numbered_char(int num, const environment *env, int *widthp)
-{
- int i = font::number_to_index(num);
- int fn = env->fontno;
- if (fn < 0 || fn >= nfonts) {
- error("bad font position `%1'", fn);
- return;
- }
- font *f = font_table[fn];
- if (f == 0) {
- error("no font mounted at `%1'", fn);
- return;
- }
- if (!f->contains(i)) {
- error("font `%1' does not contain numbered character %2",
- f->get_name(),
- num);
- return;
- }
- int w = f->get_width(i, env->size);
- if (widthp)
- *widthp = w;
- set_char(i, f, env, w, 0);
-}
-
-font *printer::get_font_from_index(int fontno)
-{
- if ((fontno >= 0) && (fontno < nfonts))
- return(font_table[fontno]);
- else
- return(0);
-}
diff --git a/contrib/groff/src/libs/libgroff/Makefile.sub b/contrib/groff/src/libs/libgroff/Makefile.sub
deleted file mode 100644
index e7606a822251..000000000000
--- a/contrib/groff/src/libs/libgroff/Makefile.sub
+++ /dev/null
@@ -1,126 +0,0 @@
-LIB=groff
-EXTRA_CFLAGS=-D__GETOPT_PREFIX=groff_
-OBJS=\
- assert.$(OBJEXT) \
- change_lf.$(OBJEXT) \
- cmap.$(OBJEXT) \
- color.$(OBJEXT) \
- cset.$(OBJEXT) \
- device.$(OBJEXT) \
- errarg.$(OBJEXT) \
- error.$(OBJEXT) \
- fatal.$(OBJEXT) \
- filename.$(OBJEXT) \
- font.$(OBJEXT) \
- fontfile.$(OBJEXT) \
- geometry.$(OBJEXT) \
- getopt.$(OBJEXT) \
- getopt1.$(OBJEXT) \
- glyphuni.$(OBJEXT) \
- htmlhint.$(OBJEXT) \
- hypot.$(OBJEXT) \
- iftoa.$(OBJEXT) \
- invalid.$(OBJEXT) \
- itoa.$(OBJEXT) \
- lf.$(OBJEXT) \
- lineno.$(OBJEXT) \
- macropath.$(OBJEXT) \
- matherr.$(OBJEXT) \
- maxfilename.$(OBJEXT) \
- maxpathname.$(OBJEXT) \
- mksdir.$(OBJEXT) \
- nametoindex.$(OBJEXT) \
- new.$(OBJEXT) \
- paper.$(OBJEXT) \
- prime.$(OBJEXT) \
- progname.$(OBJEXT) \
- ptable.$(OBJEXT) \
- quotearg.$(OBJEXT) \
- relocate.$(OBJEXT) \
- searchpath.$(OBJEXT) \
- spawnvp.$(OBJEXT) \
- string.$(OBJEXT) \
- strsave.$(OBJEXT) \
- symbol.$(OBJEXT) \
- tmpfile.$(OBJEXT) \
- tmpname.$(OBJEXT) \
- unicode.$(OBJEXT) \
- uniglyph.$(OBJEXT) \
- uniuni.$(OBJEXT) \
- version.$(OBJEXT) \
- $(LIBOBJS)
-CCSRCS=\
- $(srcdir)/assert.cpp \
- $(srcdir)/change_lf.cpp \
- $(srcdir)/cmap.cpp \
- $(srcdir)/color.cpp \
- $(srcdir)/cset.cpp \
- $(srcdir)/device.cpp \
- $(srcdir)/errarg.cpp \
- $(srcdir)/error.cpp \
- $(srcdir)/fatal.cpp \
- $(srcdir)/filename.cpp \
- $(srcdir)/font.cpp \
- $(srcdir)/fontfile.cpp \
- $(srcdir)/geometry.cpp \
- $(srcdir)/glyphuni.cpp \
- $(srcdir)/htmlhint.cpp \
- $(srcdir)/hypot.cpp \
- $(srcdir)/invalid.cpp \
- $(srcdir)/lf.cpp \
- $(srcdir)/lineno.cpp \
- $(srcdir)/macropath.cpp \
- $(srcdir)/maxfilename.cpp \
- $(srcdir)/maxpathname.cpp \
- $(srcdir)/mksdir.cpp \
- $(srcdir)/mkstemp.cpp \
- $(srcdir)/nametoindex.cpp \
- $(srcdir)/new.cpp \
- $(srcdir)/paper.cpp \
- $(srcdir)/prime.cpp \
- $(srcdir)/ptable.cpp \
- $(srcdir)/relocate.cpp \
- $(srcdir)/searchpath.cpp \
- $(srcdir)/string.cpp \
- $(srcdir)/strsave.cpp \
- $(srcdir)/symbol.cpp \
- $(srcdir)/tmpfile.cpp \
- $(srcdir)/tmpname.cpp \
- $(srcdir)/unicode.cpp \
- $(srcdir)/uniglyph.cpp \
- $(srcdir)/uniuni.cpp \
- version.cpp
-CSRCS=\
- $(srcdir)/fmod.c \
- $(srcdir)/getcwd.c \
- $(srcdir)/getopt.c \
- $(srcdir)/getopt1.c \
- $(srcdir)/iftoa.c \
- $(srcdir)/itoa.c \
- $(srcdir)/matherr.c \
- $(srcdir)/progname.c \
- $(srcdir)/putenv.c \
- $(srcdir)/quotearg.c \
- $(srcdir)/spawnvp.c \
- $(srcdir)/strcasecmp.c \
- $(srcdir)/strerror.c \
- $(srcdir)/strncasecmp.c \
- $(srcdir)/strtol.c \
- $(srcdir)/../snprintf/snprintf.c
-GENSRCS=\
- version.cpp
-
-src_version=`cat $(top_srcdir)/VERSION`
-src_revision=`cat $(top_srcdir)/REVISION`
-
-version.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
- @echo Making version.cpp
- @echo const char \*version_string = \"$(src_version)\"\; >$@
- @echo const char \*revision_string = \"$(src_revision)\"\; >>$@
- @echo extern \"C\" const char \*Version_string = \"$(src_version).$(src_revision)\"\; | \
- sed -e 's/\.0\"/\"/' >>$@
-
-# We have to avoid $(COMPILE.c) since we must not use groff's `assert.h'
-snprintf.$(OBJEXT): $(srcdir)/../snprintf/snprintf.c
- $(CC) -c $(CDEFINES) $(CFLAGS) $(CPPFLAGS) \
- $(srcdir)/../snprintf/snprintf.c
diff --git a/contrib/groff/src/libs/libgroff/assert.cpp b/contrib/groff/src/libs/libgroff/assert.cpp
deleted file mode 100644
index bc08eab2e4e8..000000000000
--- a/contrib/groff/src/libs/libgroff/assert.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "assert.h"
-
-extern "C" const char *program_name;
-
-void assertion_failed(int lineno, const char *filename)
-{
- if (program_name != 0)
- fprintf(stderr, "%s: ", program_name);
- fprintf(stderr, "Failed assertion at line %d, file `%s'.\n",
- lineno, filename);
- fflush(stderr);
- abort();
-}
diff --git a/contrib/groff/src/libs/libgroff/change_lf.cpp b/contrib/groff/src/libs/libgroff/change_lf.cpp
deleted file mode 100644
index 031377927189..000000000000
--- a/contrib/groff/src/libs/libgroff/change_lf.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <string.h>
-
-extern char *strsave(const char *);
-
-extern const char *current_filename;
-extern int current_lineno;
-
-void change_filename(const char *f)
-{
- if (current_filename != 0 && strcmp(current_filename, f) == 0)
- return;
- current_filename = strsave(f);
-}
-
-void change_lineno(int ln)
-{
- current_lineno = ln;
-}
diff --git a/contrib/groff/src/libs/libgroff/cmap.cpp b/contrib/groff/src/libs/libgroff/cmap.cpp
deleted file mode 100644
index 91a42f30243d..000000000000
--- a/contrib/groff/src/libs/libgroff/cmap.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* $FreeBSD$ */
-
-#include <ctype.h>
-#ifdef __FreeBSD__
-#include <locale.h>
-#endif
-#include "cmap.h"
-
-cmap cmlower(CMAP_BUILTIN);
-cmap cmupper(CMAP_BUILTIN);
-
-#if defined(isascii) && !defined(__FreeBSD__)
-#define ISASCII(c) isascii(c)
-#else
-#define ISASCII(c) (1)
-#endif
-
-cmap::cmap()
-{
- unsigned char *p = v;
- for (int i = 0; i <= UCHAR_MAX; i++)
- p[i] = i;
-}
-
-cmap::cmap(cmap_builtin)
-{
- // these are initialised by cmap_init::cmap_init()
-}
-
-int cmap_init::initialised = 0;
-
-cmap_init::cmap_init()
-{
- if (initialised)
- return;
- initialised = 1;
-#ifdef __FreeBSD__
- (void) setlocale(LC_CTYPE, "");
-#endif
- for (int i = 0; i <= UCHAR_MAX; i++) {
- cmupper.v[i] = ISASCII(i) && islower(i) ? toupper(i) : i;
- cmlower.v[i] = ISASCII(i) && isupper(i) ? tolower(i) : i;
- }
-}
diff --git a/contrib/groff/src/libs/libgroff/color.cpp b/contrib/groff/src/libs/libgroff/color.cpp
deleted file mode 100644
index b82bdcdadf1c..000000000000
--- a/contrib/groff/src/libs/libgroff/color.cpp
+++ /dev/null
@@ -1,429 +0,0 @@
-// -*- C++ -*-
-
-/* <groff_src_dir>/src/libs/libgroff/color.cpp
-
-Last update: 26 May 2004
-
-Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
- Written by Gaius Mulley <gaius@glam.ac.uk>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "color.h"
-#include "cset.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <assert.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include "errarg.h"
-#include "error.h"
-
-static inline unsigned int
-min(const unsigned int a, const unsigned int b)
-{
- if (a < b)
- return a;
- else
- return b;
-}
-
-color *color::free_list = 0;
-
-void *color::operator new(size_t n)
-{
- assert(n == sizeof(color));
- if (!free_list) {
- const int BLOCK = 128;
- free_list = (color *)new char[sizeof(color)*BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK-1].next = 0;
- }
- color *p = free_list;
- free_list = (color *)(free_list->next);
- p->next = 0;
- return p;
-}
-
-void color::operator delete(void *p)
-{
- if (p) {
- ((color *)p)->next = free_list;
- free_list = (color *)p;
- }
-}
-
-color::color(const color * const c)
-{
- nm = c->nm;
- scheme = c->scheme;
- components[0] = c->components[0];
- components[1] = c->components[1];
- components[2] = c->components[2];
- components[3] = c->components[3];
-}
-
-color::~color()
-{
-}
-
-int color::operator==(const color & c) const
-{
- if (scheme != c.scheme)
- return 0;
- switch (scheme) {
- case DEFAULT:
- break;
- case RGB:
- if (Red != c.Red || Green != c.Green || Blue != c.Blue)
- return 0;
- break;
- case CMYK:
- if (Cyan != c.Cyan || Magenta != c.Magenta
- || Yellow != c.Yellow || Black != c.Black)
- return 0;
- break;
- case GRAY:
- if (Gray != c.Gray)
- return 0;
- break;
- case CMY:
- if (Cyan != c.Cyan || Magenta != c.Magenta || Yellow != c.Yellow)
- return 0;
- break;
- }
- return 1;
-}
-
-int color::operator!=(const color & c) const
-{
- return !(*this == c);
-}
-
-color_scheme color::get_components(unsigned int *c) const
-{
-#if 0
- if (sizeof (c) < sizeof (unsigned int) * 4)
- fatal("argument is not big enough to store 4 color components");
-#endif
- c[0] = components[0];
- c[1] = components[1];
- c[2] = components[2];
- c[3] = components[3];
- return scheme;
-}
-
-void color::set_default()
-{
- scheme = DEFAULT;
-}
-
-// (0, 0, 0) is black
-
-void color::set_rgb(const unsigned int r, const unsigned int g,
- const unsigned int b)
-{
- scheme = RGB;
- Red = min(MAX_COLOR_VAL, r);
- Green = min(MAX_COLOR_VAL, g);
- Blue = min(MAX_COLOR_VAL, b);
-}
-
-// (0, 0, 0) is white
-
-void color::set_cmy(const unsigned int c, const unsigned int m,
- const unsigned int y)
-{
- scheme = CMY;
- Cyan = min(MAX_COLOR_VAL, c);
- Magenta = min(MAX_COLOR_VAL, m);
- Yellow = min(MAX_COLOR_VAL, y);
-}
-
-// (0, 0, 0, 0) is white
-
-void color::set_cmyk(const unsigned int c, const unsigned int m,
- const unsigned int y, const unsigned int k)
-{
- scheme = CMYK;
- Cyan = min(MAX_COLOR_VAL, c);
- Magenta = min(MAX_COLOR_VAL, m);
- Yellow = min(MAX_COLOR_VAL, y);
- Black = min(MAX_COLOR_VAL, k);
-}
-
-// (0) is black
-
-void color::set_gray(const unsigned int g)
-{
- scheme = GRAY;
- Gray = min(MAX_COLOR_VAL, g);
-}
-
-/*
- * atoh - computes the decimal value of a hexadecimal number string.
- * `length' characters of `s' are read. Returns 1 if successful.
- */
-
-static int atoh(unsigned int *result,
- const char * const s, const size_t length)
-{
- size_t i = 0;
- unsigned int val = 0;
- while ((i < length) && csxdigit(s[i])) {
- if (csdigit(s[i]))
- val = val*0x10 + (s[i]-'0');
- else if (csupper(s[i]))
- val = val*0x10 + (s[i]-'A') + 10;
- else
- val = val*0x10 + (s[i]-'a') + 10;
- i++;
- }
- if (i != length)
- return 0;
- *result = val;
- return 1;
-}
-
-/*
- * read_encoding - set color from a hexadecimal color string.
- *
- * Use color scheme `cs' to parse `n' color components from string `s'.
- * Returns 1 if successful.
- */
-
-int color::read_encoding(const color_scheme cs, const char * const s,
- const size_t n)
-{
- size_t hex_length = 2;
- scheme = cs;
- char *p = (char *) s;
- p++;
- if (*p == '#') {
- hex_length = 4;
- p++;
- }
- for (size_t i = 0; i < n; i++) {
- if (!atoh(&(components[i]), p, hex_length))
- return 0;
- if (hex_length == 2)
- components[i] *= 0x101; // scale up -- 0xff should become 0xffff
- p += hex_length;
- }
- return 1;
-}
-
-int color::read_rgb(const char * const s)
-{
- return read_encoding(RGB, s, 3);
-}
-
-int color::read_cmy(const char * const s)
-{
- return read_encoding(CMY, s, 3);
-}
-
-int color::read_cmyk(const char * const s)
-{
- return read_encoding(CMYK, s, 4);
-}
-
-int color::read_gray(const char * const s)
-{
- return read_encoding(GRAY, s, 1);
-}
-
-void
-color::get_rgb(unsigned int *r, unsigned int *g, unsigned int *b) const
-{
- switch (scheme) {
- case RGB:
- *r = Red;
- *g = Green;
- *b = Blue;
- break;
- case CMY:
- *r = MAX_COLOR_VAL - Cyan;
- *g = MAX_COLOR_VAL - Magenta;
- *b = MAX_COLOR_VAL - Yellow;
- break;
- case CMYK:
- *r = MAX_COLOR_VAL
- - min(MAX_COLOR_VAL,
- Cyan * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- *g = MAX_COLOR_VAL
- - min(MAX_COLOR_VAL,
- Magenta * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- *b = MAX_COLOR_VAL
- - min(MAX_COLOR_VAL,
- Yellow * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- break;
- case GRAY:
- *r = *g = *b = Gray;
- break;
- default:
- assert(0);
- break;
- }
-}
-
-void
-color::get_cmy(unsigned int *c, unsigned int *m, unsigned int *y) const
-{
- switch (scheme) {
- case RGB:
- *c = MAX_COLOR_VAL - Red;
- *m = MAX_COLOR_VAL - Green;
- *y = MAX_COLOR_VAL - Blue;
- break;
- case CMY:
- *c = Cyan;
- *m = Magenta;
- *y = Yellow;
- break;
- case CMYK:
- *c = min(MAX_COLOR_VAL,
- Cyan * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- *m = min(MAX_COLOR_VAL,
- Magenta * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- *y = min(MAX_COLOR_VAL,
- Yellow * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
- break;
- case GRAY:
- *c = *m = *y = MAX_COLOR_VAL - Gray;
- break;
- default:
- assert(0);
- break;
- }
-}
-
-void color::get_cmyk(unsigned int *c, unsigned int *m,
- unsigned int *y, unsigned int *k) const
-{
- switch (scheme) {
- case RGB:
- *k = min(MAX_COLOR_VAL - Red,
- min(MAX_COLOR_VAL - Green, MAX_COLOR_VAL - Blue));
- if (MAX_COLOR_VAL == *k) {
- *c = MAX_COLOR_VAL;
- *m = MAX_COLOR_VAL;
- *y = MAX_COLOR_VAL;
- }
- else {
- *c = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Red - *k))
- / (MAX_COLOR_VAL - *k);
- *m = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Green - *k))
- / (MAX_COLOR_VAL - *k);
- *y = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Blue - *k))
- / (MAX_COLOR_VAL - *k);
- }
- break;
- case CMY:
- *k = min(Cyan, min(Magenta, Yellow));
- if (MAX_COLOR_VAL == *k) {
- *c = MAX_COLOR_VAL;
- *m = MAX_COLOR_VAL;
- *y = MAX_COLOR_VAL;
- }
- else {
- *c = (MAX_COLOR_VAL * (Cyan - *k)) / (MAX_COLOR_VAL - *k);
- *m = (MAX_COLOR_VAL * (Magenta - *k)) / (MAX_COLOR_VAL - *k);
- *y = (MAX_COLOR_VAL * (Yellow - *k)) / (MAX_COLOR_VAL - *k);
- }
- break;
- case CMYK:
- *c = Cyan;
- *m = Magenta;
- *y = Yellow;
- *k = Black;
- break;
- case GRAY:
- *c = *m = *y = 0;
- *k = MAX_COLOR_VAL - Gray;
- break;
- default:
- assert(0);
- break;
- }
-}
-
-// we use `0.222r + 0.707g + 0.071b' (this is the ITU standard)
-// as an approximation for gray
-
-void color::get_gray(unsigned int *g) const
-{
- switch (scheme) {
- case RGB:
- *g = (222*Red + 707*Green + 71*Blue) / 1000;
- break;
- case CMY:
- *g = MAX_COLOR_VAL - (222*Cyan + 707*Magenta + 71*Yellow) / 1000;
- break;
- case CMYK:
- *g = (MAX_COLOR_VAL - (222*Cyan + 707*Magenta + 71*Yellow) / 1000)
- * (MAX_COLOR_VAL - Black);
- break;
- case GRAY:
- *g = Gray;
- break;
- default:
- assert(0);
- break;
- }
-}
-
-char *color::print_color()
-{
- char *s = new char[30];
- switch (scheme) {
- case DEFAULT:
- sprintf(s, "default");
- break;
- case RGB:
- sprintf(s, "rgb %.2ff %.2ff %.2ff",
- double(Red) / MAX_COLOR_VAL,
- double(Green) / MAX_COLOR_VAL,
- double(Blue) / MAX_COLOR_VAL);
- break;
- case CMY:
- sprintf(s, "cmy %.2ff %.2ff %.2ff",
- double(Cyan) / MAX_COLOR_VAL,
- double(Magenta) / MAX_COLOR_VAL,
- double(Yellow) / MAX_COLOR_VAL);
- break;
- case CMYK:
- sprintf(s, "cmyk %.2ff %.2ff %.2ff %.2ff",
- double(Cyan) / MAX_COLOR_VAL,
- double(Magenta) / MAX_COLOR_VAL,
- double(Yellow) / MAX_COLOR_VAL,
- double(Black) / MAX_COLOR_VAL);
- break;
- case GRAY:
- sprintf(s, "gray %.2ff",
- double(Gray) / MAX_COLOR_VAL);
- break;
- }
- return s;
-}
-
-color default_color;
diff --git a/contrib/groff/src/libs/libgroff/cset.cpp b/contrib/groff/src/libs/libgroff/cset.cpp
deleted file mode 100644
index 6d79d7ee5839..000000000000
--- a/contrib/groff/src/libs/libgroff/cset.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* $FreeBSD$ */
-
-#include <ctype.h>
-#ifdef __FreeBSD__
-#include <locale.h>
-#endif
-
-#include "lib.h"
-#include "cset.h"
-
-cset csalpha(CSET_BUILTIN);
-cset csupper(CSET_BUILTIN);
-cset cslower(CSET_BUILTIN);
-cset csdigit(CSET_BUILTIN);
-cset csxdigit(CSET_BUILTIN);
-cset csspace(CSET_BUILTIN);
-cset cspunct(CSET_BUILTIN);
-cset csalnum(CSET_BUILTIN);
-cset csprint(CSET_BUILTIN);
-cset csgraph(CSET_BUILTIN);
-cset cscntrl(CSET_BUILTIN);
-
-#if defined(isascii) && !defined(__FreeBSD__)
-#define ISASCII(c) isascii(c)
-#else
-#define ISASCII(c) (1)
-#endif
-
-void cset::clear()
-{
- char *p = v;
- for (int i = 0; i <= UCHAR_MAX; i++)
- p[i] = 0;
-}
-
-cset::cset()
-{
- clear();
-}
-
-cset::cset(const char *s)
-{
- clear();
- while (*s)
- v[(unsigned char)*s++] = 1;
-}
-
-cset::cset(const unsigned char *s)
-{
- clear();
- while (*s)
- v[*s++] = 1;
-}
-
-cset::cset(cset_builtin)
-{
- // these are initialised by cset_init::cset_init()
-}
-
-cset &cset::operator|=(const cset &cs)
-{
- for (int i = 0; i <= UCHAR_MAX; i++)
- if (cs.v[i])
- v[i] = 1;
- return *this;
-}
-
-
-int cset_init::initialised = 0;
-
-cset_init::cset_init()
-{
- if (initialised)
- return;
- initialised = 1;
-#ifdef __FreeBSD__
- (void) setlocale(LC_CTYPE, "");
-#endif
- for (int i = 0; i <= UCHAR_MAX; i++) {
- csalpha.v[i] = ISASCII(i) && isalpha(i);
- csupper.v[i] = ISASCII(i) && isupper(i);
- cslower.v[i] = ISASCII(i) && islower(i);
- csdigit.v[i] = ISASCII(i) && isdigit(i);
- csxdigit.v[i] = ISASCII(i) && isxdigit(i);
- csspace.v[i] = ISASCII(i) && isspace(i);
- cspunct.v[i] = ISASCII(i) && ispunct(i);
- csalnum.v[i] = ISASCII(i) && isalnum(i);
- csprint.v[i] = ISASCII(i) && isprint(i);
- csgraph.v[i] = ISASCII(i) && isgraph(i);
- cscntrl.v[i] = ISASCII(i) && iscntrl(i);
- }
-}
diff --git a/contrib/groff/src/libs/libgroff/device.cpp b/contrib/groff/src/libs/libgroff/device.cpp
deleted file mode 100644
index 53baf9757d2f..000000000000
--- a/contrib/groff/src/libs/libgroff/device.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdlib.h>
-#include "device.h"
-#include "defs.h"
-
-const char *device = DEVICE;
-
-struct device_init {
- device_init();
-} _device_init;
-
-device_init::device_init()
-{
- char *tem = getenv("GROFF_TYPESETTER");
- if (tem)
- device = tem;
-}
diff --git a/contrib/groff/src/libs/libgroff/errarg.cpp b/contrib/groff/src/libs/libgroff/errarg.cpp
deleted file mode 100644
index 1d6ef3006e47..000000000000
--- a/contrib/groff/src/libs/libgroff/errarg.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdio.h>
-#include "assert.h"
-#include "errarg.h"
-
-errarg::errarg(const char *p) : type(STRING)
-{
- s = p ? p : "(null)";
-}
-
-errarg::errarg() : type(EMPTY)
-{
-}
-
-errarg::errarg(int nn) : type(INTEGER)
-{
- n = nn;
-}
-
-errarg::errarg(unsigned int uu) : type(UNSIGNED_INTEGER)
-{
- u = uu;
-}
-
-errarg::errarg(char cc) : type(CHAR)
-{
- c = cc;
-}
-
-errarg::errarg(unsigned char cc) : type(CHAR)
-{
- c = cc;
-}
-
-errarg::errarg(double dd) : type(DOUBLE)
-{
- d = dd;
-}
-
-int errarg::empty() const
-{
- return type == EMPTY;
-}
-
-extern "C" {
- const char *i_to_a(int);
- const char *ui_to_a(unsigned int);
-}
-
-void errarg::print() const
-{
- switch (type) {
- case INTEGER:
- fputs(i_to_a(n), stderr);
- break;
- case UNSIGNED_INTEGER:
- fputs(ui_to_a(u), stderr);
- break;
- case CHAR:
- putc(c, stderr);
- break;
- case STRING:
- fputs(s, stderr);
- break;
- case DOUBLE:
- fprintf(stderr, "%g", d);
- break;
- case EMPTY:
- break;
- }
-}
-
-errarg empty_errarg;
-
-void errprint(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- assert(format != 0);
- char c;
- while ((c = *format++) != '\0') {
- if (c == '%') {
- c = *format++;
- switch(c) {
- case '%':
- fputc('%', stderr);
- break;
- case '1':
- assert(!arg1.empty());
- arg1.print();
- break;
- case '2':
- assert(!arg2.empty());
- arg2.print();
- break;
- case '3':
- assert(!arg3.empty());
- arg3.print();
- break;
- default:
- assert(0);
- }
- }
- else
- putc(c, stderr);
- }
-}
diff --git a/contrib/groff/src/libs/libgroff/error.cpp b/contrib/groff/src/libs/libgroff/error.cpp
deleted file mode 100644
index 8aea0c0d8f8d..000000000000
--- a/contrib/groff/src/libs/libgroff/error.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "errarg.h"
-#include "error.h"
-
-extern void fatal_error_exit();
-
-enum error_type { WARNING, ERROR, FATAL };
-
-static void do_error_with_file_and_line(const char *filename,
- const char *source_filename,
- int lineno,
- error_type type,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- int need_space = 0;
- if (program_name) {
- fprintf(stderr, "%s:", program_name);
- need_space = 1;
- }
- if (lineno >= 0 && filename != 0) {
- if (strcmp(filename, "-") == 0)
- filename = "<standard input>";
- if (source_filename != 0)
- fprintf(stderr, "%s (%s):%d:", filename, source_filename, lineno);
- else
- fprintf(stderr, "%s:%d:", filename, lineno);
- need_space = 1;
- }
- switch (type) {
- case FATAL:
- fputs("fatal error:", stderr);
- need_space = 1;
- break;
- case ERROR:
- break;
- case WARNING:
- fputs("warning:", stderr);
- need_space = 1;
- break;
- }
- if (need_space)
- fputc(' ', stderr);
- errprint(format, arg1, arg2, arg3);
- fputc('\n', stderr);
- fflush(stderr);
- if (type == FATAL)
- fatal_error_exit();
-}
-
-
-static void do_error(error_type type,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error_with_file_and_line(current_filename, current_source_filename,
- current_lineno, type, format, arg1, arg2, arg3);
-}
-
-
-void error(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error(ERROR, format, arg1, arg2, arg3);
-}
-
-void warning(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error(WARNING, format, arg1, arg2, arg3);
-}
-
-void fatal(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error(FATAL, format, arg1, arg2, arg3);
-}
-
-void error_with_file_and_line(const char *filename,
- int lineno,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error_with_file_and_line(filename, 0, lineno,
- ERROR, format, arg1, arg2, arg3);
-}
-
-void warning_with_file_and_line(const char *filename,
- int lineno,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error_with_file_and_line(filename, 0, lineno,
- WARNING, format, arg1, arg2, arg3);
-}
-
-void fatal_with_file_and_line(const char *filename,
- int lineno,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error_with_file_and_line(filename, 0, lineno,
- FATAL, format, arg1, arg2, arg3);
-}
diff --git a/contrib/groff/src/libs/libgroff/fatal.cpp b/contrib/groff/src/libs/libgroff/fatal.cpp
deleted file mode 100644
index bed8298b563f..000000000000
--- a/contrib/groff/src/libs/libgroff/fatal.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdlib.h>
-
-#define FATAL_ERROR_EXIT_CODE 3
-
-void fatal_error_exit()
-{
- exit(FATAL_ERROR_EXIT_CODE);
-}
diff --git a/contrib/groff/src/libs/libgroff/filename.cpp b/contrib/groff/src/libs/libgroff/filename.cpp
deleted file mode 100644
index 6212705dfe5f..000000000000
--- a/contrib/groff/src/libs/libgroff/filename.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-const char *current_filename = 0;
-const char *current_source_filename = 0;
diff --git a/contrib/groff/src/libs/libgroff/fmod.c b/contrib/groff/src/libs/libgroff/fmod.c
deleted file mode 100644
index 92e730699377..000000000000
--- a/contrib/groff/src/libs/libgroff/fmod.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <math.h>
-
-double fmod(x, y)
- double x, y;
-{
- double quot = x/y;
- return x - (quot < 0.0 ? ceil(quot) : floor(quot)) * y;
-}
-
diff --git a/contrib/groff/src/libs/libgroff/font.cpp b/contrib/groff/src/libs/libgroff/font.cpp
deleted file mode 100644
index 466c71d69b4d..000000000000
--- a/contrib/groff/src/libs/libgroff/font.cpp
+++ /dev/null
@@ -1,1054 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include "errarg.h"
-#include "error.h"
-#include "cset.h"
-#include "font.h"
-#include "paper.h"
-
-const char *const WS = " \t\n\r";
-
-struct font_char_metric {
- char type;
- int code;
- int width;
- int height;
- int depth;
- int pre_math_space;
- int italic_correction;
- int subscript_correction;
- char *special_device_coding;
-};
-
-struct font_kern_list {
- int i1;
- int i2;
- int amount;
- font_kern_list *next;
-
- font_kern_list(int, int, int, font_kern_list * = 0);
-};
-
-struct font_widths_cache {
- font_widths_cache *next;
- int point_size;
- int *width;
-
- font_widths_cache(int, int, font_widths_cache * = 0);
- ~font_widths_cache();
-};
-
-/* text_file */
-
-struct text_file {
- FILE *fp;
- char *path;
- int lineno;
- int size;
- int skip_comments;
- int silent;
- char *buf;
- text_file(FILE *fp, char *p);
- ~text_file();
- int next();
- void error(const char *format,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-};
-
-text_file::text_file(FILE *p, char *s)
-: fp(p), path(s), lineno(0), size(0), skip_comments(1), silent(0), buf(0)
-{
-}
-
-text_file::~text_file()
-{
- a_delete buf;
- a_delete path;
- if (fp)
- fclose(fp);
-}
-
-int text_file::next()
-{
- if (fp == 0)
- return 0;
- if (buf == 0) {
- buf = new char[128];
- size = 128;
- }
- for (;;) {
- int i = 0;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- if (invalid_input_char(c))
- error("invalid input character code `%1'", int(c));
- else {
- if (i + 1 >= size) {
- char *old_buf = buf;
- buf = new char[size*2];
- memcpy(buf, old_buf, size);
- a_delete old_buf;
- size *= 2;
- }
- buf[i++] = c;
- if (c == '\n')
- break;
- }
- }
- if (i == 0)
- break;
- buf[i] = '\0';
- lineno++;
- char *ptr = buf;
- while (csspace(*ptr))
- ptr++;
- if (*ptr != 0 && (!skip_comments || *ptr != '#'))
- return 1;
- }
- return 0;
-}
-
-void text_file::error(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- if (!silent)
- error_with_file_and_line(path, lineno, format, arg1, arg2, arg3);
-}
-
-
-/* font functions */
-
-font::font(const char *s)
-: ligatures(0), kern_hash_table(0), space_width(0), ch_index(0), nindices(0),
- ch(0), ch_used(0), ch_size(0), special(0), widths_cache(0)
-{
- name = new char[strlen(s) + 1];
- strcpy(name, s);
- internalname = 0;
- slant = 0.0;
- // load(); // for testing
-}
-
-font::~font()
-{
- for (int i = 0; i < ch_used; i++)
- if (ch[i].special_device_coding)
- a_delete ch[i].special_device_coding;
- a_delete ch;
- a_delete ch_index;
- if (kern_hash_table) {
- for (int i = 0; i < KERN_HASH_TABLE_SIZE; i++) {
- font_kern_list *kerns = kern_hash_table[i];
- while (kerns) {
- font_kern_list *tem = kerns;
- kerns = kerns->next;
- delete tem;
- }
- }
- a_delete kern_hash_table;
- }
- a_delete name;
- a_delete internalname;
- while (widths_cache) {
- font_widths_cache *tem = widths_cache;
- widths_cache = widths_cache->next;
- delete tem;
- }
-}
-
-static int scale_round(int n, int x, int y)
-{
- assert(x >= 0 && y > 0);
- int y2 = y/2;
- if (x == 0)
- return 0;
- if (n >= 0) {
- if (n <= (INT_MAX - y2)/x)
- return (n*x + y2)/y;
- return int(n*double(x)/double(y) + .5);
- }
- else {
- if (-(unsigned)n <= (-(unsigned)INT_MIN - y2)/x)
- return (n*x - y2)/y;
- return int(n*double(x)/double(y) - .5);
- }
-}
-
-inline int font::scale(int w, int sz)
-{
- return sz == unitwidth ? w : scale_round(w, sz, unitwidth);
-}
-
-int font::unit_scale(double *value, char unit)
-{
- // we scale everything to inch
- double divisor = 0;
- switch (unit) {
- case 'i':
- divisor = 1;
- break;
- case 'p':
- divisor = 72;
- break;
- case 'P':
- divisor = 6;
- break;
- case 'c':
- divisor = 2.54;
- break;
- default:
- assert(0);
- break;
- }
- if (divisor) {
- *value /= divisor;
- return 1;
- }
- return 0;
-}
-
-int font::get_skew(int c, int point_size, int sl)
-{
- int h = get_height(c, point_size);
- return int(h*tan((slant+sl)*PI/180.0) + .5);
-}
-
-int font::contains(int c)
-{
- return c >= 0 && c < nindices && ch_index[c] >= 0;
-}
-
-int font::is_special()
-{
- return special;
-}
-
-font_widths_cache::font_widths_cache(int ps, int ch_size,
- font_widths_cache *p)
-: next(p), point_size(ps)
-{
- width = new int[ch_size];
- for (int i = 0; i < ch_size; i++)
- width[i] = -1;
-}
-
-font_widths_cache::~font_widths_cache()
-{
- a_delete width;
-}
-
-int font::get_width(int c, int point_size)
-{
- assert(c >= 0 && c < nindices);
- int i = ch_index[c];
- assert(i >= 0);
-
- if (point_size == unitwidth || font::unscaled_charwidths)
- return ch[i].width;
-
- if (!widths_cache)
- widths_cache = new font_widths_cache(point_size, ch_size);
- else if (widths_cache->point_size != point_size) {
- font_widths_cache **p;
- for (p = &widths_cache; *p; p = &(*p)->next)
- if ((*p)->point_size == point_size)
- break;
- if (*p) {
- font_widths_cache *tem = *p;
- *p = (*p)->next;
- tem->next = widths_cache;
- widths_cache = tem;
- }
- else
- widths_cache = new font_widths_cache(point_size, ch_size, widths_cache);
- }
- int &w = widths_cache->width[i];
- if (w < 0)
- w = scale(ch[i].width, point_size);
- return w;
-}
-
-int font::get_height(int c, int point_size)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return scale(ch[ch_index[c]].height, point_size);
-}
-
-int font::get_depth(int c, int point_size)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return scale(ch[ch_index[c]].depth, point_size);
-}
-
-int font::get_italic_correction(int c, int point_size)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return scale(ch[ch_index[c]].italic_correction, point_size);
-}
-
-int font::get_left_italic_correction(int c, int point_size)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return scale(ch[ch_index[c]].pre_math_space, point_size);
-}
-
-int font::get_subscript_correction(int c, int point_size)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return scale(ch[ch_index[c]].subscript_correction, point_size);
-}
-
-int font::get_space_width(int point_size)
-{
- return scale(space_width, point_size);
-}
-
-font_kern_list::font_kern_list(int c1, int c2, int n, font_kern_list *p)
-: i1(c1), i2(c2), amount(n), next(p)
-{
-}
-
-inline int font::hash_kern(int i1, int i2)
-{
- int n = ((i1 << 10) + i2) % KERN_HASH_TABLE_SIZE;
- return n < 0 ? -n : n;
-}
-
-void font::add_kern(int i1, int i2, int amount)
-{
- if (!kern_hash_table) {
- kern_hash_table = new font_kern_list *[int(KERN_HASH_TABLE_SIZE)];
- for (int i = 0; i < KERN_HASH_TABLE_SIZE; i++)
- kern_hash_table[i] = 0;
- }
- font_kern_list **p = kern_hash_table + hash_kern(i1, i2);
- *p = new font_kern_list(i1, i2, amount, *p);
-}
-
-int font::get_kern(int i1, int i2, int point_size)
-{
- if (kern_hash_table) {
- for (font_kern_list *p = kern_hash_table[hash_kern(i1, i2)]; p; p = p->next)
- if (i1 == p->i1 && i2 == p->i2)
- return scale(p->amount, point_size);
- }
- return 0;
-}
-
-int font::has_ligature(int mask)
-{
- return mask & ligatures;
-}
-
-int font::get_character_type(int c)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return ch[ch_index[c]].type;
-}
-
-int font::get_code(int c)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return ch[ch_index[c]].code;
-}
-
-const char *font::get_name()
-{
- return name;
-}
-
-const char *font::get_internal_name()
-{
- return internalname;
-}
-
-const char *font::get_special_device_encoding(int c)
-{
- assert(c >= 0 && c < nindices && ch_index[c] >= 0);
- return ch[ch_index[c]].special_device_coding;
-}
-
-const char *font::get_image_generator()
-{
- return image_generator;
-}
-
-void font::alloc_ch_index(int idx)
-{
- if (nindices == 0) {
- nindices = 128;
- if (idx >= nindices)
- nindices = idx + 10;
- ch_index = new int[nindices];
- for (int i = 0; i < nindices; i++)
- ch_index[i] = -1;
- }
- else {
- int old_nindices = nindices;
- nindices *= 2;
- if (idx >= nindices)
- nindices = idx + 10;
- int *old_ch_index = ch_index;
- ch_index = new int[nindices];
- memcpy(ch_index, old_ch_index, sizeof(int)*old_nindices);
- for (int i = old_nindices; i < nindices; i++)
- ch_index[i] = -1;
- a_delete old_ch_index;
- }
-}
-
-void font::extend_ch()
-{
- if (ch == 0)
- ch = new font_char_metric[ch_size = 16];
- else {
- int old_ch_size = ch_size;
- ch_size *= 2;
- font_char_metric *old_ch = ch;
- ch = new font_char_metric[ch_size];
- memcpy(ch, old_ch, old_ch_size*sizeof(font_char_metric));
- a_delete old_ch;
- }
-}
-
-void font::compact()
-{
- int i;
- for (i = nindices - 1; i >= 0; i--)
- if (ch_index[i] >= 0)
- break;
- i++;
- if (i < nindices) {
- int *old_ch_index = ch_index;
- ch_index = new int[i];
- memcpy(ch_index, old_ch_index, i*sizeof(int));
- a_delete old_ch_index;
- nindices = i;
- }
- if (ch_used < ch_size) {
- font_char_metric *old_ch = ch;
- ch = new font_char_metric[ch_used];
- memcpy(ch, old_ch, ch_used*sizeof(font_char_metric));
- a_delete old_ch;
- ch_size = ch_used;
- }
-}
-
-void font::add_entry(int idx, const font_char_metric &metric)
-{
- assert(idx >= 0);
- if (idx >= nindices)
- alloc_ch_index(idx);
- assert(idx < nindices);
- if (ch_used + 1 >= ch_size)
- extend_ch();
- assert(ch_used + 1 < ch_size);
- ch_index[idx] = ch_used;
- ch[ch_used++] = metric;
-}
-
-void font::copy_entry(int new_index, int old_index)
-{
- assert(new_index >= 0 && old_index >= 0 && old_index < nindices);
- if (new_index >= nindices)
- alloc_ch_index(new_index);
- ch_index[new_index] = ch_index[old_index];
-}
-
-font *font::load_font(const char *s, int *not_found, int head_only)
-{
- font *f = new font(s);
- if (!f->load(not_found, head_only)) {
- delete f;
- return 0;
- }
- return f;
-}
-
-static char *trim_arg(char *p)
-{
- if (!p)
- return 0;
- while (csspace(*p))
- p++;
- char *q = strchr(p, '\0');
- while (q > p && csspace(q[-1]))
- q--;
- *q = '\0';
- return p;
-}
-
-int font::scan_papersize(const char *p,
- const char **size, double *length, double *width)
-{
- double l, w;
- char lu[2], wu[2];
- const char *pp = p;
- int test_file = 1;
- char line[255];
-again:
- if (csdigit(*pp)) {
- if (sscanf(pp, "%lf%1[ipPc],%lf%1[ipPc]", &l, lu, &w, wu) == 4
- && l > 0 && w > 0
- && unit_scale(&l, lu[0]) && unit_scale(&w, wu[0])) {
- if (length)
- *length = l;
- if (width)
- *width = w;
- if (size)
- *size = "custom";
- return 1;
- }
- }
- else {
- int i;
- for (i = 0; i < NUM_PAPERSIZES; i++)
- if (strcasecmp(papersizes[i].name, pp) == 0) {
- if (length)
- *length = papersizes[i].length;
- if (width)
- *width = papersizes[i].width;
- if (size)
- *size = papersizes[i].name;
- return 1;
- }
- if (test_file) {
- FILE *f = fopen(p, "r");
- if (f) {
- fgets(line, 254, f);
- fclose(f);
- test_file = 0;
- char *linep = strchr(line, '\0');
- // skip final newline, if any
- if (*(--linep) == '\n')
- *linep = '\0';
- pp = line;
- goto again;
- }
- }
- }
- return 0;
-}
-
-// If the font can't be found, then if not_found is non-NULL, it will be set
-// to 1 otherwise a message will be printed.
-
-int font::load(int *not_found, int head_only)
-{
- char *path;
- FILE *fp;
- if ((fp = open_file(name, &path)) == NULL) {
- if (not_found)
- *not_found = 1;
- else
- error("can't find font file `%1'", name);
- return 0;
- }
- text_file t(fp, path);
- t.skip_comments = 1;
- t.silent = head_only;
- char *p;
- for (;;) {
- if (!t.next()) {
- t.error("missing charset command");
- return 0;
- }
- p = strtok(t.buf, WS);
- if (strcmp(p, "name") == 0) {
- }
- else if (strcmp(p, "spacewidth") == 0) {
- p = strtok(0, WS);
- int n;
- if (p == 0 || sscanf(p, "%d", &n) != 1 || n <= 0) {
- t.error("bad argument for spacewidth command");
- return 0;
- }
- space_width = n;
- }
- else if (strcmp(p, "slant") == 0) {
- p = strtok(0, WS);
- double n;
- if (p == 0 || sscanf(p, "%lf", &n) != 1 || n >= 90.0 || n <= -90.0) {
- t.error("bad argument for slant command", p);
- return 0;
- }
- slant = n;
- }
- else if (strcmp(p, "ligatures") == 0) {
- for (;;) {
- p = strtok(0, WS);
- if (p == 0 || strcmp(p, "0") == 0)
- break;
- if (strcmp(p, "ff") == 0)
- ligatures |= LIG_ff;
- else if (strcmp(p, "fi") == 0)
- ligatures |= LIG_fi;
- else if (strcmp(p, "fl") == 0)
- ligatures |= LIG_fl;
- else if (strcmp(p, "ffi") == 0)
- ligatures |= LIG_ffi;
- else if (strcmp(p, "ffl") == 0)
- ligatures |= LIG_ffl;
- else {
- t.error("unrecognised ligature `%1'", p);
- return 0;
- }
- }
- }
- else if (strcmp(p, "internalname") == 0) {
- p = strtok(0, WS);
- if (!p) {
- t.error("`internalname command requires argument");
- return 0;
- }
- internalname = new char[strlen(p) + 1];
- strcpy(internalname, p);
- }
- else if (strcmp(p, "special") == 0) {
- special = 1;
- }
- else if (strcmp(p, "kernpairs") != 0 && strcmp(p, "charset") != 0) {
- char *command = p;
- p = strtok(0, "\n");
- handle_unknown_font_command(command, trim_arg(p), t.path, t.lineno);
- }
- else
- break;
- }
- if (head_only)
- return 1;
- char *command = p;
- int had_charset = 0;
- t.skip_comments = 0;
- while (command) {
- if (strcmp(command, "kernpairs") == 0) {
- for (;;) {
- if (!t.next()) {
- command = 0;
- break;
- }
- char *c1 = strtok(t.buf, WS);
- if (c1 == 0)
- continue;
- char *c2 = strtok(0, WS);
- if (c2 == 0) {
- command = c1;
- break;
- }
- p = strtok(0, WS);
- if (p == 0) {
- t.error("missing kern amount");
- return 0;
- }
- int n;
- if (sscanf(p, "%d", &n) != 1) {
- t.error("bad kern amount `%1'", p);
- return 0;
- }
- int i1 = name_to_index(c1);
- if (i1 < 0) {
- t.error("invalid character `%1'", c1);
- return 0;
- }
- int i2 = name_to_index(c2);
- if (i2 < 0) {
- t.error("invalid character `%1'", c2);
- return 0;
- }
- add_kern(i1, i2, n);
- }
- }
- else if (strcmp(command, "charset") == 0) {
- had_charset = 1;
- int last_index = -1;
- for (;;) {
- if (!t.next()) {
- command = 0;
- break;
- }
- char *nm = strtok(t.buf, WS);
- if (nm == 0)
- continue; // I dont think this should happen
- p = strtok(0, WS);
- if (p == 0) {
- command = nm;
- break;
- }
- if (p[0] == '"') {
- if (last_index == -1) {
- t.error("first charset entry is duplicate");
- return 0;
- }
- if (strcmp(nm, "---") == 0) {
- t.error("unnamed character cannot be duplicate");
- return 0;
- }
- int idx = name_to_index(nm);
- if (idx < 0) {
- t.error("invalid character `%1'", nm);
- return 0;
- }
- copy_entry(idx, last_index);
- }
- else {
- font_char_metric metric;
- metric.height = 0;
- metric.depth = 0;
- metric.pre_math_space = 0;
- metric.italic_correction = 0;
- metric.subscript_correction = 0;
- int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d",
- &metric.width, &metric.height, &metric.depth,
- &metric.italic_correction,
- &metric.pre_math_space,
- &metric.subscript_correction);
- if (nparms < 1) {
- t.error("bad width for `%1'", nm);
- return 0;
- }
- p = strtok(0, WS);
- if (p == 0) {
- t.error("missing character type for `%1'", nm);
- return 0;
- }
- int type;
- if (sscanf(p, "%d", &type) != 1) {
- t.error("bad character type for `%1'", nm);
- return 0;
- }
- if (type < 0 || type > 255) {
- t.error("character type `%1' out of range", type);
- return 0;
- }
- metric.type = type;
- p = strtok(0, WS);
- if (p == 0) {
- t.error("missing code for `%1'", nm);
- return 0;
- }
- char *ptr;
- metric.code = (int)strtol(p, &ptr, 0);
- if (metric.code == 0 && ptr == p) {
- t.error("bad code `%1' for character `%2'", p, nm);
- return 0;
- }
- p = strtok(0, WS);
- if ((p == NULL) || (strcmp(p, "--") == 0)) {
- metric.special_device_coding = NULL;
- }
- else {
- char *nam = new char[strlen(p) + 1];
- strcpy(nam, p);
- metric.special_device_coding = nam;
- }
- if (strcmp(nm, "---") == 0) {
- last_index = number_to_index(metric.code);
- add_entry(last_index, metric);
- }
- else {
- last_index = name_to_index(nm);
- if (last_index < 0) {
- t.error("invalid character `%1'", nm);
- return 0;
- }
- add_entry(last_index, metric);
- copy_entry(number_to_index(metric.code), last_index);
- }
- }
- }
- if (last_index == -1) {
- t.error("I didn't seem to find any characters");
- return 0;
- }
- }
- else {
- t.error("unrecognised command `%1' after `kernpairs' or `charset' command", command);
- return 0;
- }
- }
- if (!had_charset) {
- t.error("missing charset command");
- return 0;
- }
- if (space_width == 0)
- space_width = scale_round(unitwidth, res, 72*3*sizescale);
- compact();
- return 1;
-}
-
-static struct {
- const char *command;
- int *ptr;
-} table[] = {
- { "res", &font::res },
- { "hor", &font::hor },
- { "vert", &font::vert },
- { "unitwidth", &font::unitwidth },
- { "paperwidth", &font::paperwidth },
- { "paperlength", &font::paperlength },
- { "spare1", &font::biggestfont },
- { "biggestfont", &font::biggestfont },
- { "spare2", &font::spare2 },
- { "sizescale", &font::sizescale },
- };
-
-int font::load_desc()
-{
- int nfonts = 0;
- FILE *fp;
- char *path;
- if ((fp = open_file("DESC", &path)) == 0) {
- error("can't find `DESC' file");
- return 0;
- }
- text_file t(fp, path);
- t.skip_comments = 1;
- res = 0;
- while (t.next()) {
- char *p = strtok(t.buf, WS);
- int found = 0;
- unsigned int idx;
- for (idx = 0; !found && idx < sizeof(table)/sizeof(table[0]); idx++)
- if (strcmp(table[idx].command, p) == 0)
- found = 1;
- if (found) {
- char *q = strtok(0, WS);
- if (!q) {
- t.error("missing value for command `%1'", p);
- return 0;
- }
- //int *ptr = &(this->*(table[idx-1].ptr));
- int *ptr = table[idx-1].ptr;
- if (sscanf(q, "%d", ptr) != 1) {
- t.error("bad number `%1'", q);
- return 0;
- }
- }
- else if (strcmp("family", p) == 0) {
- p = strtok(0, WS);
- if (!p) {
- t.error("family command requires an argument");
- return 0;
- }
- char *tem = new char[strlen(p)+1];
- strcpy(tem, p);
- family = tem;
- }
- else if (strcmp("fonts", p) == 0) {
- p = strtok(0, WS);
- if (!p || sscanf(p, "%d", &nfonts) != 1 || nfonts <= 0) {
- t.error("bad number of fonts `%1'", p);
- return 0;
- }
- font_name_table = (const char **)new char *[nfonts+1];
- for (int i = 0; i < nfonts; i++) {
- p = strtok(0, WS);
- while (p == 0) {
- if (!t.next()) {
- t.error("end of file while reading list of fonts");
- return 0;
- }
- p = strtok(t.buf, WS);
- }
- char *temp = new char[strlen(p)+1];
- strcpy(temp, p);
- font_name_table[i] = temp;
- }
- p = strtok(0, WS);
- if (p != 0) {
- t.error("font count does not match number of fonts");
- return 0;
- }
- font_name_table[nfonts] = 0;
- }
- else if (strcmp("papersize", p) == 0) {
- p = strtok(0, WS);
- if (!p) {
- t.error("papersize command requires an argument");
- return 0;
- }
- int found_paper = 0;
- while (p) {
- double unscaled_paperwidth, unscaled_paperlength;
- if (scan_papersize(p, &papersize, &unscaled_paperlength,
- &unscaled_paperwidth)) {
- paperwidth = int(unscaled_paperwidth * res + 0.5);
- paperlength = int(unscaled_paperlength * res + 0.5);
- found_paper = 1;
- break;
- }
- p = strtok(0, WS);
- }
- if (!found_paper) {
- t.error("bad paper size");
- return 0;
- }
- }
- else if (strcmp("unscaled_charwidths", p) == 0)
- unscaled_charwidths = 1;
- else if (strcmp("pass_filenames", p) == 0)
- pass_filenames = 1;
- else if (strcmp("sizes", p) == 0) {
- int n = 16;
- sizes = new int[n];
- int i = 0;
- for (;;) {
- p = strtok(0, WS);
- while (p == 0) {
- if (!t.next()) {
- t.error("list of sizes must be terminated by `0'");
- return 0;
- }
- p = strtok(t.buf, WS);
- }
- int lower, upper;
- switch (sscanf(p, "%d-%d", &lower, &upper)) {
- case 1:
- upper = lower;
- // fall through
- case 2:
- if (lower <= upper && lower >= 0)
- break;
- // fall through
- default:
- t.error("bad size range `%1'", p);
- return 0;
- }
- if (i + 2 > n) {
- int *old_sizes = sizes;
- sizes = new int[n*2];
- memcpy(sizes, old_sizes, n*sizeof(int));
- n *= 2;
- a_delete old_sizes;
- }
- sizes[i++] = lower;
- if (lower == 0)
- break;
- sizes[i++] = upper;
- }
- if (i == 1) {
- t.error("must have some sizes");
- return 0;
- }
- }
- else if (strcmp("styles", p) == 0) {
- int style_table_size = 5;
- style_table = (const char **)new char *[style_table_size];
- int j;
- for (j = 0; j < style_table_size; j++)
- style_table[j] = 0;
- int i = 0;
- for (;;) {
- p = strtok(0, WS);
- if (p == 0)
- break;
- // leave room for terminating 0
- if (i + 1 >= style_table_size) {
- const char **old_style_table = style_table;
- style_table_size *= 2;
- style_table = (const char **)new char*[style_table_size];
- for (j = 0; j < i; j++)
- style_table[j] = old_style_table[j];
- for (; j < style_table_size; j++)
- style_table[j] = 0;
- a_delete old_style_table;
- }
- char *tem = new char[strlen(p) + 1];
- strcpy(tem, p);
- style_table[i++] = tem;
- }
- }
- else if (strcmp("tcommand", p) == 0)
- tcommand = 1;
- else if (strcmp("use_charnames_in_special", p) == 0)
- use_charnames_in_special = 1;
- else if (strcmp("image_generator", p) == 0) {
- p = strtok(0, WS);
- if (!p) {
- t.error("image_generator command requires an argument");
- return 0;
- }
- image_generator = strsave(p);
- }
- else if (strcmp("charset", p) == 0)
- break;
- else if (unknown_desc_command_handler) {
- char *command = p;
- p = strtok(0, "\n");
- (*unknown_desc_command_handler)(command, trim_arg(p), t.path, t.lineno);
- }
- }
- if (res == 0) {
- t.error("missing `res' command");
- return 0;
- }
- if (unitwidth == 0) {
- t.error("missing `unitwidth' command");
- return 0;
- }
- if (font_name_table == 0) {
- t.error("missing `fonts' command");
- return 0;
- }
- if (sizes == 0) {
- t.error("missing `sizes' command");
- return 0;
- }
- if (sizescale < 1) {
- t.error("bad `sizescale' value");
- return 0;
- }
- if (hor < 1) {
- t.error("bad `hor' value");
- return 0;
- }
- if (vert < 1) {
- t.error("bad `vert' value");
- return 0;
- }
- return 1;
-}
-
-void font::handle_unknown_font_command(const char *, const char *,
- const char *, int)
-{
-}
-
-FONT_COMMAND_HANDLER
-font::set_unknown_desc_command_handler(FONT_COMMAND_HANDLER func)
-{
- FONT_COMMAND_HANDLER prev = unknown_desc_command_handler;
- unknown_desc_command_handler = func;
- return prev;
-}
diff --git a/contrib/groff/src/libs/libgroff/fontfile.cpp b/contrib/groff/src/libs/libgroff/fontfile.cpp
deleted file mode 100644
index 18d0b86066e1..000000000000
--- a/contrib/groff/src/libs/libgroff/fontfile.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "font.h"
-#include "searchpath.h"
-#include "device.h"
-#include "defs.h"
-
-const char *const FONT_ENV_VAR = "GROFF_FONT_PATH";
-
-static search_path font_path(FONT_ENV_VAR, FONTPATH, 0, 0);
-
-int font::res = 0;
-int font::hor = 1;
-int font::vert = 1;
-int font::unitwidth = 0;
-int font::paperwidth = 0;
-int font::paperlength = 0;
-const char *font::papersize = 0;
-int font::biggestfont = 0;
-int font::spare2 = 0;
-int font::sizescale = 1;
-int font::tcommand = 0;
-int font::pass_filenames = 0;
-int font::unscaled_charwidths = 0;
-int font::use_charnames_in_special = 0;
-const char *font::image_generator = NULL;
-const char **font::font_name_table = 0;
-int *font::sizes = 0;
-const char *font::family = 0;
-const char **font::style_table = 0;
-FONT_COMMAND_HANDLER font::unknown_desc_command_handler = 0;
-
-void font::command_line_font_dir(const char *dir)
-{
- font_path.command_line_dir(dir);
-}
-
-FILE *font::open_file(const char *nm, char **pathp)
-{
- char *filename = new char[strlen(nm) + strlen(device) + 5];
- sprintf(filename, "dev%s/%s", device, nm);
- FILE *fp = font_path.open_file(filename, pathp);
- a_delete filename;
- return fp;
-}
diff --git a/contrib/groff/src/libs/libgroff/geometry.cpp b/contrib/groff/src/libs/libgroff/geometry.cpp
deleted file mode 100644
index 7d96e5c210cf..000000000000
--- a/contrib/groff/src/libs/libgroff/geometry.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by Gaius Mulley <gaius@glam.ac.uk>
- using adjust_arc_center() from printer.cpp, written by James Clark.
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-#include <stdio.h>
-#include <math.h>
-
-#undef MAX
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-
-#undef MIN
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-
-// This utility function adjusts the specified center of the
-// arc so that it is equidistant between the specified start
-// and end points. (p[0], p[1]) is a vector from the current
-// point to the center; (p[2], p[3]) is a vector from the
-// center to the end point. If the center can be adjusted,
-// a vector from the current point to the adjusted center is
-// stored in c[0], c[1] and 1 is returned. Otherwise 0 is
-// returned.
-
-#if 1
-int adjust_arc_center(const int *p, double *c)
-{
- // We move the center along a line parallel to the line between
- // the specified start point and end point so that the center
- // is equidistant between the start and end point.
- // It can be proved (using Lagrange multipliers) that this will
- // give the point nearest to the specified center that is equidistant
- // between the start and end point.
-
- double x = p[0] + p[2]; // (x, y) is the end point
- double y = p[1] + p[3];
- double n = x*x + y*y;
- if (n != 0) {
- c[0]= double(p[0]);
- c[1] = double(p[1]);
- double k = .5 - (c[0]*x + c[1]*y)/n;
- c[0] += k*x;
- c[1] += k*y;
- return 1;
- }
- else
- return 0;
-}
-#else
-int printer::adjust_arc_center(const int *p, double *c)
-{
- int x = p[0] + p[2]; // (x, y) is the end point
- int y = p[1] + p[3];
- // Start at the current point; go in the direction of the specified
- // center point until we reach a point that is equidistant between
- // the specified starting point and the specified end point. Place
- // the center of the arc there.
- double n = p[0]*double(x) + p[1]*double(y);
- if (n > 0) {
- double k = (double(x)*x + double(y)*y)/(2.0*n);
- // (cx, cy) is our chosen center
- c[0] = k*p[0];
- c[1] = k*p[1];
- return 1;
- }
- else {
- // We would never reach such a point. So instead start at the
- // specified end point of the arc. Go towards the specified
- // center point until we reach a point that is equidistant between
- // the specified start point and specified end point. Place
- // the center of the arc there.
- n = p[2]*double(x) + p[3]*double(y);
- if (n > 0) {
- double k = 1 - (double(x)*x + double(y)*y)/(2.0*n);
- // (c[0], c[1]) is our chosen center
- c[0] = p[0] + k*p[2];
- c[1] = p[1] + k*p[3];
- return 1;
- }
- else
- return 0;
- }
-}
-#endif
-
-
-/*
- * check_output_arc_limits - works out the smallest box that will encompass
- * an arc defined by an origin (x, y) and two
- * vectors (p0, p1) and (p2, p3).
- * (x1, y1) -> start of arc
- * (x1, y1) + (xv1, yv1) -> center of circle
- * (x1, y1) + (xv1, yv1) + (xv2, yv2) -> end of arc
- *
- * Works out in which quadrant the arc starts and
- * stops, and from this it determines the x, y
- * max/min limits. The arc is drawn clockwise.
- */
-
-void check_output_arc_limits(int x_1, int y_1,
- int xv_1, int yv_1,
- int xv_2, int yv_2,
- double c_0, double c_1,
- int *minx, int *maxx,
- int *miny, int *maxy)
-{
- int radius = (int)sqrt(c_0 * c_0 + c_1 * c_1);
- // clockwise direction
- int xcenter = x_1 + xv_1;
- int ycenter = y_1 + yv_1;
- int xend = xcenter + xv_2;
- int yend = ycenter + yv_2;
- // for convenience, transform to counterclockwise direction,
- // centered at the origin
- int xs = xend - xcenter;
- int ys = yend - ycenter;
- int xe = x_1 - xcenter;
- int ye = y_1 - ycenter;
- *minx = *maxx = xs;
- *miny = *maxy = ys;
- if (xe > *maxx)
- *maxx = xe;
- else if (xe < *minx)
- *minx = xe;
- if (ye > *maxy)
- *maxy = ye;
- else if (ye < *miny)
- *miny = ye;
- int qs, qe; // quadrants 0..3
- if (xs >= 0)
- qs = (ys >= 0) ? 0 : 3;
- else
- qs = (ys >= 0) ? 1 : 2;
- if (xe >= 0)
- qe = (ye >= 0) ? 0 : 3;
- else
- qe = (ye >= 0) ? 1 : 2;
- // make qs always smaller than qe
- if ((qs > qe)
- || ((qs == qe) && (double(xs) * ye < double(xe) * ys)))
- qe += 4;
- for (int i = qs; i < qe; i++)
- switch (i % 4) {
- case 0:
- *maxy = radius;
- break;
- case 1:
- *minx = -radius;
- break;
- case 2:
- *miny = -radius;
- break;
- case 3:
- *maxx = radius;
- break;
- }
- *minx += xcenter;
- *maxx += xcenter;
- *miny += ycenter;
- *maxy += ycenter;
-}
diff --git a/contrib/groff/src/libs/libgroff/getcwd.c b/contrib/groff/src/libs/libgroff/getcwd.c
deleted file mode 100644
index d7443ec904e6..000000000000
--- a/contrib/groff/src/libs/libgroff/getcwd.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Partial emulation of getcwd in terms of getwd. */
-
-#include <sys/param.h>
-#include <string.h>
-#include <errno.h>
-
-char *getwd();
-
-char *getcwd(buf, size)
- char *buf;
- int size; /* POSIX says this should be size_t */
-{
- if (size <= 0) {
- errno = EINVAL;
- return 0;
- }
- else {
- char mybuf[MAXPATHLEN];
- int saved_errno = errno;
-
- errno = 0;
- if (!getwd(mybuf)) {
- if (errno == 0)
- ; /* what to do? */
- return 0;
- }
- errno = saved_errno;
- if (strlen(mybuf) + 1 > size) {
- errno = ERANGE;
- return 0;
- }
- strcpy(buf, mybuf);
- return buf;
- }
-}
diff --git a/contrib/groff/src/libs/libgroff/glyphuni.cpp b/contrib/groff/src/libs/libgroff/glyphuni.cpp
deleted file mode 100644
index 4cd4917e609d..000000000000
--- a/contrib/groff/src/libs/libgroff/glyphuni.cpp
+++ /dev/null
@@ -1,504 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct glyph_to_unicode {
- char *value;
-};
-
-declare_ptable(glyph_to_unicode)
-implement_ptable(glyph_to_unicode)
-
-PTABLE(glyph_to_unicode) glyph_to_unicode_table;
-
-struct S {
- const char *key;
- const char *value;
-} glyph_to_unicode_list[] = {
- { "!", "0021" },
- { "\"", "0022" },
- { "dq", "0022" },
- { "#", "0023" },
- { "sh", "0023" },
- { "$", "0024" },
- { "Do", "0024" },
- { "%", "0025" },
- { "&", "0026" },
- { "aq", "0027" },
- { "(", "0028" },
- { ")", "0029" },
- { "*", "002A" },
- { "+", "002B" },
- { "pl", "002B" },
- { ",", "002C" },
- { ".", "002E" },
- { "/", "002F" },
- { "sl", "002F" },
- { "0", "0030" },
- { "1", "0031" },
- { "2", "0032" },
- { "3", "0033" },
- { "4", "0034" },
- { "5", "0035" },
- { "6", "0036" },
- { "7", "0037" },
- { "8", "0038" },
- { "9", "0039" },
- { ":", "003A" },
- { ";", "003B" },
- { "<", "003C" },
- { "=", "003D" },
- { "eq", "003D" },
- { ">", "003E" },
- { "?", "003F" },
- { "@", "0040" },
- { "at", "0040" },
- { "A", "0041" },
- { "B", "0042" },
- { "C", "0043" },
- { "D", "0044" },
- { "E", "0045" },
- { "F", "0046" },
- { "G", "0047" },
- { "H", "0048" },
- { "I", "0049" },
- { "J", "004A" },
- { "K", "004B" },
- { "L", "004C" },
- { "M", "004D" },
- { "N", "004E" },
- { "O", "004F" },
- { "P", "0050" },
- { "Q", "0051" },
- { "R", "0052" },
- { "S", "0053" },
- { "T", "0054" },
- { "U", "0055" },
- { "V", "0056" },
- { "W", "0057" },
- { "X", "0058" },
- { "Y", "0059" },
- { "Z", "005A" },
-//{ "[", "005B" },
- { "lB", "005B" },
-//{ "\\", "005C" },
- { "rs", "005C" },
-//{ "]", "005D" },
- { "rB", "005D" },
- { "a^", "005E" },
- { "^", "005E" },
- { "ha", "005E" },
- { "_", "005F" },
- { "ru", "005F" },
- { "ul", "005F" },
-//{ "\\`", "0060" },
- { "ga", "0060" },
- { "a", "0061" },
- { "b", "0062" },
- { "c", "0063" },
- { "d", "0064" },
- { "e", "0065" },
- { "f", "0066" },
- { "ff", "0066_0066" },
- { "Fi", "0066_0066_0069" },
- { "Fl", "0066_0066_006C" },
- { "fi", "0066_0069" },
- { "fl", "0066_006C" },
- { "g", "0067" },
- { "h", "0068" },
- { "i", "0069" },
- { "j", "006A" },
- { "k", "006B" },
- { "l", "006C" },
- { "m", "006D" },
- { "n", "006E" },
- { "o", "006F" },
- { "p", "0070" },
- { "q", "0071" },
- { "r", "0072" },
- { "s", "0073" },
- { "t", "0074" },
- { "u", "0075" },
- { "v", "0076" },
- { "w", "0077" },
- { "x", "0078" },
- { "y", "0079" },
- { "z", "007A" },
- { "lC", "007B" },
- { "{", "007B" },
- { "ba", "007C" },
- { "or", "007C" },
- { "|", "007C" },
- { "rC", "007D" },
- { "}", "007D" },
- { "a~", "007E" },
- { "~", "007E" },
- { "ti", "007E" },
- { "r!", "00A1" },
- { "ct", "00A2" },
- { "Po", "00A3" },
- { "Cs", "00A4" },
- { "Ye", "00A5" },
- { "bb", "00A6" },
- { "sc", "00A7" },
- { "ad", "00A8" },
- { "co", "00A9" },
- { "Of", "00AA" },
- { "Fo", "00AB" },
- { "no", "00AC" },
- { "tno", "00AC" },
- { "shc", "00AD" },
- { "rg", "00AE" },
- { "a-", "00AF" },
- { "de", "00B0" },
- { "+-", "00B1" },
- { "t+-", "00B1" },
- { "S2", "00B2" },
- { "S3", "00B3" },
- { "aa", "00B4" },
-//{ "\\'", "00B4" },
- { "mc", "00B5" },
- { "ps", "00B6" },
- { "pc", "00B7" },
- { "ac", "00B8" },
- { "S1", "00B9" },
- { "Om", "00BA" },
- { "Fc", "00BB" },
- { "14", "00BC" },
- { "12", "00BD" },
- { "34", "00BE" },
- { "r?", "00BF" },
- { "`A", "00C0" },
- { "'A", "00C1" },
- { "^A", "00C2" },
- { "~A", "00C3" },
- { ":A", "00C4" },
- { "oA", "00C5" },
- { "AE", "00C6" },
- { ",C", "00C7" },
- { "`E", "00C8" },
- { "'E", "00C9" },
- { "^E", "00CA" },
- { ":E", "00CB" },
- { "`I", "00CC" },
- { "'I", "00CD" },
- { "^I", "00CE" },
- { ":I", "00CF" },
- { "-D", "00D0" },
- { "~N", "00D1" },
- { "`O", "00D2" },
- { "'O", "00D3" },
- { "^O", "00D4" },
- { "~O", "00D5" },
- { ":O", "00D6" },
- { "mu", "00D7" },
- { "tmu", "00D7" },
- { "/O", "00D8" },
- { "`U", "00D9" },
- { "'U", "00DA" },
- { "^U", "00DB" },
- { ":U", "00DC" },
- { "'Y", "00DD" },
- { "TP", "00DE" },
- { "ss", "00DF" },
- { "`a", "00E0" },
- { "'a", "00E1" },
- { "^a", "00E2" },
- { "~a", "00E3" },
- { ":a", "00E4" },
- { "oa", "00E5" },
- { "ae", "00E6" },
- { ",c", "00E7" },
- { "`e", "00E8" },
- { "'e", "00E9" },
- { "^e", "00EA" },
- { ":e", "00EB" },
- { "`i", "00EC" },
- { "'i", "00ED" },
- { "^i", "00EE" },
- { ":i", "00EF" },
- { "Sd", "00F0" },
- { "~n", "00F1" },
- { "`o", "00F2" },
- { "'o", "00F3" },
- { "^o", "00F4" },
- { "~o", "00F5" },
- { ":o", "00F6" },
- { "di", "00F7" },
- { "tdi", "00F7" },
- { "/o", "00F8" },
- { "`u", "00F9" },
- { "'u", "00FA" },
- { "^u", "00FB" },
- { ":u", "00FC" },
- { "'y", "00FD" },
- { "Tp", "00FE" },
- { ":y", "00FF" },
- { "'C", "0106" },
- { "'c", "0107" },
- { ".i", "0131" },
- { "IJ", "0132" },
- { "ij", "0133" },
- { "/L", "0141" },
- { "/l", "0142" },
- { "OE", "0152" },
- { "oe", "0153" },
- { "vS", "0160" },
- { "vs", "0161" },
- { ":Y", "0178" },
- { "vZ", "017D" },
- { "vz", "017E" },
- { "Fn", "0192" },
- { "ah", "02C7" },
- { "ab", "02D8" },
- { "a.", "02D9" },
- { "ao", "02DA" },
- { "ho", "02DB" },
- { "a\"", "02DD" },
- { "*A", "0391" },
- { "*B", "0392" },
- { "*G", "0393" },
- { "*D", "0394" },
- { "*E", "0395" },
- { "*Z", "0396" },
- { "*Y", "0397" },
- { "*H", "0398" },
- { "*I", "0399" },
- { "*K", "039A" },
- { "*L", "039B" },
- { "*M", "039C" },
- { "*N", "039D" },
- { "*C", "039E" },
- { "*O", "039F" },
- { "*P", "03A0" },
- { "*R", "03A1" },
- { "*S", "03A3" },
- { "*T", "03A4" },
- { "*U", "03A5" },
- { "*F", "03A6" },
- { "*X", "03A7" },
- { "*Q", "03A8" },
- { "*W", "03A9" },
- { "*a", "03B1" },
- { "*b", "03B2" },
- { "*g", "03B3" },
- { "*d", "03B4" },
- { "*e", "03B5" },
- { "*z", "03B6" },
- { "*y", "03B7" },
- { "*h", "03B8" },
- { "*i", "03B9" },
- { "*k", "03BA" },
- { "*l", "03BB" },
- { "*m", "03BC" },
- { "*n", "03BD" },
- { "*c", "03BE" },
- { "*o", "03BF" },
- { "*p", "03C0" },
- { "*r", "03C1" },
- { "ts", "03C2" },
- { "*s", "03C3" },
- { "*t", "03C4" },
- { "*u", "03C5" },
- { "*f", "03C6" },
- { "*x", "03C7" },
- { "*q", "03C8" },
- { "*w", "03C9" },
- { "+h", "03D1" },
- { "+f", "03D5" },
- { "+p", "03D6" },
- { "+e", "03F5" },
- { "-", "2010" },
- { "hy", "2010" },
- { "en", "2013" },
- { "em", "2014" },
- { "`", "2018" },
- { "oq", "2018" },
- { "'", "2019" },
- { "cq", "2019" },
- { "bq", "201A" },
- { "lq", "201C" },
- { "rq", "201D" },
- { "Bq", "201E" },
- { "dg", "2020" },
- { "dd", "2021" },
- { "bu", "2022" },
- { "%0", "2030" },
- { "fm", "2032" },
- { "sd", "2033" },
- { "fo", "2039" },
- { "fc", "203A" },
- { "rn", "203E" },
- { "f/", "2044" },
- { "eu", "20AC" },
- { "Eu", "20AC" },
- { "-h", "210F" },
- { "hbar", "210F" },
- { "Im", "2111" },
- { "wp", "2118" },
- { "Re", "211C" },
- { "tm", "2122" },
- { "Ah", "2135" },
- { "18", "215B" },
- { "38", "215C" },
- { "58", "215D" },
- { "78", "215E" },
- { "<-", "2190" },
- { "ua", "2191" },
- { "->", "2192" },
- { "da", "2193" },
- { "<>", "2194" },
- { "va", "2195" },
- { "CR", "21B5" },
- { "lA", "21D0" },
- { "uA", "21D1" },
- { "rA", "21D2" },
- { "dA", "21D3" },
- { "hA", "21D4" },
- { "vA", "21D5" },
- { "fa", "2200" },
- { "pd", "2202" },
- { "te", "2203" },
- { "es", "2205" },
- { "gr", "2207" },
- { "mo", "2208" },
- { "nm", "2209" },
- { "st", "220B" },
- { "product", "220F" },
- { "coproduct", "2210" },
- { "sum", "2211" },
-//{ "\\-", "2212" },
- { "mi", "2212" },
- { "-+", "2213" },
- { "**", "2217" },
- { "sr", "221A" },
- { "pt", "221D" },
- { "if", "221E" },
- { "/_", "2220" },
- { "AN", "2227" },
- { "OR", "2228" },
- { "ca", "2229" },
- { "cu", "222A" },
- { "is", "222B" },
- { "integral", "222B" },
- { "tf", "2234" },
- { "3d", "2234" },
- { "ap", "223C" },
- { "|=", "2243" },
- { "=~", "2245" },
- { "~~", "2248" },
- { "~=", "2248" },
- { "!=", "2260" },
- { "==", "2261" },
- { "ne", "2262" },
- { "<=", "2264" },
- { ">=", "2265" },
- { ">>", "226A" },
- { "<<", "226B" },
- { "sb", "2282" },
- { "sp", "2283" },
- { "nb", "2284" },
- { "nc", "2285" },
- { "ib", "2286" },
- { "ip", "2287" },
- { "c+", "2295" },
- { "c*", "2297" },
- { "pp", "22A5" },
- { "md", "22C5" },
- { "lc", "2308" },
- { "rc", "2309" },
- { "lf", "230A" },
- { "rf", "230B" },
- { "parenlefttp", "239B" },
- { "parenleftex", "239C" },
- { "parenleftbt", "239D" },
- { "parenrighttp", "239E" },
- { "parenrightex", "239F" },
- { "parenrightbt", "23A0" },
- { "bracketlefttp", "23A1" },
- { "bracketleftex", "23A2" },
- { "bracketleftbt", "23A3" },
- { "bracketrighttp", "23A4" },
- { "bracketrightex", "23A5" },
- { "bracketrightbt", "23A6" },
- { "lt", "23A7" },
- { "bracelefttp", "23A7" },
- { "lk", "23A8" },
- { "braceleftmid", "23A8" },
- { "lb", "23A9" },
- { "braceleftbt", "23A9" },
- { "bv", "23AA" },
- { "braceex", "23AA" },
- { "braceleftex", "23AA" },
- { "bracerightex", "23AA" },
- { "rt", "23AB" },
- { "bracerighttp", "23AB" },
- { "rk", "23AC" },
- { "bracerightmid", "23AC" },
- { "rb", "23AD" },
- { "bracerightbt", "23AD" },
- { "an", "23AF" },
- { "br", "2502" },
- { "rk", "251D" },
- { "lk", "2525" },
- { "lt", "256D" },
- { "rt", "256E" },
- { "rb", "256F" },
- { "lb", "2570" },
- { "sq", "25A1" },
- { "lz", "25CA" },
- { "ci", "25CB" },
- { "lh", "261C" },
- { "rh", "261E" },
- { "SP", "2660" },
- { "CL", "2663" },
- { "HE", "2665" },
- { "DI", "2666" },
- { "OK", "2713" },
- { "la", "27E8" },
- { "ra", "27E9" },
-};
-
-// global constructor
-static struct glyph_to_unicode_init {
- glyph_to_unicode_init();
-} _glyph_to_unicode_init;
-
-glyph_to_unicode_init::glyph_to_unicode_init() {
- for (unsigned int i = 0;
- i < sizeof(glyph_to_unicode_list)/sizeof(glyph_to_unicode_list[0]);
- i++) {
- glyph_to_unicode *gtu = new glyph_to_unicode[1];
- gtu->value = (char *)glyph_to_unicode_list[i].value;
- glyph_to_unicode_table.define(glyph_to_unicode_list[i].key, gtu);
- }
-}
-
-const char *glyph_name_to_unicode(const char *s)
-{
- glyph_to_unicode *result = glyph_to_unicode_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/libs/libgroff/htmlhint.cpp b/contrib/groff/src/libs/libgroff/htmlhint.cpp
deleted file mode 100644
index 6ade0777d237..000000000000
--- a/contrib/groff/src/libs/libgroff/htmlhint.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "nonposix.h"
-#include "stringclass.h"
-#include "html-strings.h"
-
-/*
- * This file contains a very simple set of routines which might
- * be shared by preprocessors. It allows a preprocessor to indicate
- * when an inline image should be created.
- * This string is intercepted by pre-grohtml and substituted for
- * the image name and suppression escapes.
- *
- * pre-html runs troff twice, once with -Thtml and once with -Tps.
- * troff -Thtml device driver emits a <src='image'.png> tag
- * and the postscript device driver works out the min/max limits
- * of the graphic region. These region limits are read by pre-html
- * and an image is generated via troff -Tps -> gs -> png
- */
-
-/*
- * html_begin_suppress - emit a start of image tag which will be seen
- * by pre-html.
- */
-void html_begin_suppress()
-{
- put_string(HTML_IMAGE_INLINE_BEGIN, stdout);
-}
-
-/*
- * html_end_suppress - emit an end of image tag which will be seen
- * by pre-html.
- */
-void html_end_suppress()
-{
- put_string(HTML_IMAGE_INLINE_END, stdout);
-}
diff --git a/contrib/groff/src/libs/libgroff/hypot.cpp b/contrib/groff/src/libs/libgroff/hypot.cpp
deleted file mode 100644
index 6d2606d8f783..000000000000
--- a/contrib/groff/src/libs/libgroff/hypot.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <math.h>
-
-#ifdef NEED_DECLARATION_HYPOT
- double hypot(double, double);
-#endif /* NEED_DECLARATION_HYPOT */
-
-double groff_hypot(double x, double y)
-{
- double result = hypot(x, y);
-
-#ifdef __INTERIX
- /* hypot() on Interix is broken */
- if (isnan(result) && !isnan(x) && !isnan(y))
- return 0.0;
-#endif
-
- return result;
-}
diff --git a/contrib/groff/src/libs/libgroff/iftoa.c b/contrib/groff/src/libs/libgroff/iftoa.c
deleted file mode 100644
index d1751c57ce24..000000000000
--- a/contrib/groff/src/libs/libgroff/iftoa.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define INT_DIGITS 19 /* enough for 64-bit integer */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *if_to_a(int i, int decimal_point)
-{
- /* room for a -, INT_DIGITS digits, a decimal point, and a terminating '\0' */
- static char buf[INT_DIGITS + 3];
- char *p = buf + INT_DIGITS + 2;
- int point = 0;
- buf[INT_DIGITS + 2] = '\0';
- /* assert(decimal_point <= INT_DIGITS); */
- if (i >= 0) {
- do {
- *--p = '0' + (i % 10);
- i /= 10;
- if (++point == decimal_point)
- *--p = '.';
- } while (i != 0 || point < decimal_point);
- }
- else { /* i < 0 */
- do {
- *--p = '0' - (i % 10);
- i /= 10;
- if (++point == decimal_point)
- *--p = '.';
- } while (i != 0 || point < decimal_point);
- *--p = '-';
- }
- if (decimal_point > 0) {
- char *q;
- /* there must be a dot, so this will terminate */
- for (q = buf + INT_DIGITS + 2; q[-1] == '0'; --q)
- ;
- if (q[-1] == '.') {
- if (q - 1 == p) {
- q[-1] = '0';
- q[0] = '\0';
- }
- else
- q[-1] = '\0';
- }
- else
- *q = '\0';
- }
- return p;
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/contrib/groff/src/libs/libgroff/invalid.cpp b/contrib/groff/src/libs/libgroff/invalid.cpp
deleted file mode 100644
index ac0c71dfe31d..000000000000
--- a/contrib/groff/src/libs/libgroff/invalid.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* $FreeBSD$ */
-
-#include "lib.h"
-
-// Table of invalid input characters.
-
-char invalid_char_table[256]= {
-#ifndef IS_EBCDIC_HOST
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-#else
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-#endif
-};
diff --git a/contrib/groff/src/libs/libgroff/itoa.c b/contrib/groff/src/libs/libgroff/itoa.c
deleted file mode 100644
index 85fb68bba72d..000000000000
--- a/contrib/groff/src/libs/libgroff/itoa.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define INT_DIGITS 19 /* enough for 64 bit integer */
-#define UINT_DIGITS 20
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *i_to_a(int i)
-{
- /* Room for INT_DIGITS digits, - and '\0' */
- static char buf[INT_DIGITS + 2];
- char *p = buf + INT_DIGITS + 1; /* points to terminating '\0' */
- if (i >= 0) {
- do {
- *--p = '0' + (i % 10);
- i /= 10;
- } while (i != 0);
- return p;
- }
- else { /* i < 0 */
- do {
- *--p = '0' - (i % 10);
- i /= 10;
- } while (i != 0);
- *--p = '-';
- }
- return p;
-}
-
-char *ui_to_a(unsigned int i)
-{
- /* Room for UINT_DIGITS digits and '\0' */
- static char buf[UINT_DIGITS + 1];
- char *p = buf + UINT_DIGITS; /* points to terminating '\0' */
- do {
- *--p = '0' + (i % 10);
- i /= 10;
- } while (i != 0);
- return p;
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/contrib/groff/src/libs/libgroff/lf.cpp b/contrib/groff/src/libs/libgroff/lf.cpp
deleted file mode 100644
index 3254fcf157cb..000000000000
--- a/contrib/groff/src/libs/libgroff/lf.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <ctype.h>
-
-#include "lib.h"
-#include "cset.h"
-#include "stringclass.h"
-
-extern void change_filename(const char *);
-extern void change_lineno(int);
-
-int interpret_lf_args(const char *p)
-{
- while (*p == ' ')
- p++;
- if (!csdigit(*p))
- return 0;
- int ln = 0;
- do {
- ln *= 10;
- ln += *p++ - '0';
- } while (csdigit(*p));
- if (*p != ' ' && *p != '\n' && *p != '\0')
- return 0;
- while (*p == ' ')
- p++;
- if (*p == '\0' || *p == '\n') {
- change_lineno(ln);
- return 1;
- }
- const char *q;
- for (q = p;
- *q != '\0' && *q != ' ' && *q != '\n' && *q != '\\';
- q++)
- ;
- string tem(p, q - p);
- while (*q == ' ')
- q++;
- if (*q != '\n' && *q != '\0')
- return 0;
- tem += '\0';
- change_filename(tem.contents());
- change_lineno(ln);
- return 1;
-}
diff --git a/contrib/groff/src/libs/libgroff/lineno.cpp b/contrib/groff/src/libs/libgroff/lineno.cpp
deleted file mode 100644
index f7138dba0210..000000000000
--- a/contrib/groff/src/libs/libgroff/lineno.cpp
+++ /dev/null
@@ -1 +0,0 @@
-int current_lineno = 0;
diff --git a/contrib/groff/src/libs/libgroff/macropath.cpp b/contrib/groff/src/libs/libgroff/macropath.cpp
deleted file mode 100644
index 2c09fd7662ff..000000000000
--- a/contrib/groff/src/libs/libgroff/macropath.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "searchpath.h"
-#include "macropath.h"
-#include "defs.h"
-
-#define MACROPATH_ENVVAR "GROFF_TMAC_PATH"
-
-search_path macro_path(MACROPATH_ENVVAR, MACROPATH, 1, 1);
-search_path safer_macro_path(MACROPATH_ENVVAR, MACROPATH, 1, 0);
-search_path config_macro_path(MACROPATH_ENVVAR, MACROPATH, 0, 0);
diff --git a/contrib/groff/src/libs/libgroff/matherr.c b/contrib/groff/src/libs/libgroff/matherr.c
deleted file mode 100644
index 2a65e185295b..000000000000
--- a/contrib/groff/src/libs/libgroff/matherr.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <math.h>
-#include <errno.h>
-
-#ifdef HAVE_STRUCT_EXCEPTION
-#ifdef TLOSS
-
-int matherr(exc)
-struct exception *exc;
-{
- switch (exc->type) {
- case SING:
- case DOMAIN:
- errno = EDOM;
- break;
- case OVERFLOW:
- case UNDERFLOW:
- case TLOSS:
- case PLOSS:
- errno = ERANGE;
- break;
- }
- return 1;
-}
-
-#endif /* TLOSS */
-#endif /* HAVE_STRUCT_EXCEPTION */
diff --git a/contrib/groff/src/libs/libgroff/maxfilename.cpp b/contrib/groff/src/libs/libgroff/maxfilename.cpp
deleted file mode 100644
index 9215cd921b51..000000000000
--- a/contrib/groff/src/libs/libgroff/maxfilename.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1992, 2001, 2003, 2005 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* file_name_max(dir) does the same as pathconf(dir, _PC_NAME_MAX) */
-
-#include "lib.h"
-
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#ifdef _POSIX_VERSION
-
-size_t file_name_max(const char *fname)
-{
- return pathconf(fname, _PC_NAME_MAX);
-}
-
-#else /* not _POSIX_VERSION */
-
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#else /* not HAVE_DIRENT_H */
-#ifdef HAVE_SYS_DIR_H
-#include <sys/dir.h>
-#endif /* HAVE_SYS_DIR_H */
-#endif /* not HAVE_DIRENT_H */
-
-#ifndef NAME_MAX
-#ifdef MAXNAMLEN
-#define NAME_MAX MAXNAMLEN
-#else /* !MAXNAMLEN */
-#ifdef MAXNAMELEN
-#define NAME_MAX MAXNAMELEN
-#else /* !MAXNAMELEN */
-#define NAME_MAX 14
-#endif /* !MAXNAMELEN */
-#endif /* !MAXNAMLEN */
-#endif /* !NAME_MAX */
-
-size_t file_name_max(const char *)
-{
- return NAME_MAX;
-}
-
-#endif /* not _POSIX_VERSION */
diff --git a/contrib/groff/src/libs/libgroff/maxpathname.cpp b/contrib/groff/src/libs/libgroff/maxpathname.cpp
deleted file mode 100644
index 7bca55c785a6..000000000000
--- a/contrib/groff/src/libs/libgroff/maxpathname.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2005 Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* path_name_max(dir) does the same as pathconf(dir, _PC_PATH_MAX) */
-
-#include "lib.h"
-
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#ifdef _POSIX_VERSION
-
-size_t path_name_max()
-{
- return pathconf("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf("/",_PC_PATH_MAX);
-}
-
-#else /* not _POSIX_VERSION */
-
-#include <stdlib.h>
-
-#ifdef HAVE_DIRENT_H
-# include <dirent.h>
-#else /* not HAVE_DIRENT_H */
-# ifdef HAVE_SYS_DIR_H
-# include <sys/dir.h>
-# endif /* HAVE_SYS_DIR_H */
-#endif /* not HAVE_DIRENT_H */
-
-#ifndef PATH_MAX
-# ifdef MAXPATHLEN
-# define PATH_MAX MAXPATHLEN
-# else /* !MAXPATHLEN */
-# ifdef MAX_PATH
-# define PATH_MAX MAX_PATH
-# else /* !MAX_PATH */
-# ifdef _MAX_PATH
-# define PATH_MAX _MAX_PATH
-# else /* !_MAX_PATH */
-# define PATH_MAX 255
-# endif /* !_MAX_PATH */
-# endif /* !MAX_PATH */
-# endif /* !MAXPATHLEN */
-#endif /* !PATH_MAX */
-
-size_t path_name_max()
-{
- return PATH_MAX;
-}
-
-#endif /* not _POSIX_VERSION */
diff --git a/contrib/groff/src/libs/libgroff/mksdir.cpp b/contrib/groff/src/libs/libgroff/mksdir.cpp
deleted file mode 100644
index 472bd9e291e0..000000000000
--- a/contrib/groff/src/libs/libgroff/mksdir.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-/* This file is heavily based on the file mkstemp.c which is part of the
- fileutils package. */
-
-
-extern int gen_tempname(char *, int = 0);
-
-/* Generate a unique temporary directory name from TEMPLATE.
- The last six characters of TEMPLATE must be "XXXXXX";
- they are replaced with a string that makes the filename unique.
- Then open the directory and return a fd. */
-int mksdir(char *tmpl)
-{
- return gen_tempname(tmpl, 1);
-}
diff --git a/contrib/groff/src/libs/libgroff/mkstemp.cpp b/contrib/groff/src/libs/libgroff/mkstemp.cpp
deleted file mode 100644
index 3279d771fa8f..000000000000
--- a/contrib/groff/src/libs/libgroff/mkstemp.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-/* This file is heavily based on the file mkstemp.c which is part of the
- fileutils package. */
-
-
-extern int gen_tempname(char *, int);
-
-/* Generate a unique temporary file name from TEMPLATE.
- The last six characters of TEMPLATE must be "XXXXXX";
- they are replaced with a string that makes the filename unique.
- Then open the file and return a fd. */
-int mkstemp(char *tmpl)
-{
- return gen_tempname(tmpl, 0);
-}
diff --git a/contrib/groff/src/libs/libgroff/nametoindex.cpp b/contrib/groff/src/libs/libgroff/nametoindex.cpp
deleted file mode 100644
index e4dacff2ba91..000000000000
--- a/contrib/groff/src/libs/libgroff/nametoindex.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "errarg.h"
-#include "error.h"
-#include "font.h"
-#include "ptable.h"
-
-declare_ptable(int)
-implement_ptable(int)
-
-class character_indexer {
-public:
- character_indexer();
- ~character_indexer();
- int ascii_char_index(unsigned char);
- int named_char_index(const char *);
- int numbered_char_index(int);
-private:
- enum { NSMALL = 256 };
- int next_index;
- int ascii_index[256];
- int small_number_index[NSMALL];
- PTABLE(int) table;
-};
-
-character_indexer::character_indexer()
-: next_index(0)
-{
- int i;
- for (i = 0; i < 256; i++)
- ascii_index[i] = -1;
- for (i = 0; i < NSMALL; i++)
- small_number_index[i] = -1;
-}
-
-character_indexer::~character_indexer()
-{
-}
-
-int character_indexer::ascii_char_index(unsigned char c)
-{
- if (ascii_index[c] < 0)
- ascii_index[c] = next_index++;
- return ascii_index[c];
-}
-
-int character_indexer::numbered_char_index(int n)
-{
- if (n >= 0 && n < NSMALL) {
- if (small_number_index[n] < 0)
- small_number_index[n] = next_index++;
- return small_number_index[n];
- }
- // Not the most efficient possible implementation.
- char buf[INT_DIGITS + 3];
- buf[0] = ' ';
- strcpy(buf + 1, i_to_a(n));
- return named_char_index(buf);
-}
-
-int character_indexer::named_char_index(const char *s)
-{
- int *np = table.lookup(s);
- if (!np) {
- np = new int[1];
- *np = next_index++;
- table.define(s, np);
- }
- return *np;
-}
-
-static character_indexer indexer;
-
-int font::number_to_index(int n)
-{
- return indexer.numbered_char_index(n);
-}
-
-int font::name_to_index(const char *s)
-{
- assert(s != 0 && s[0] != '\0' && s[0] != ' ');
- if (s[1] == '\0')
- return indexer.ascii_char_index(s[0]);
- /* char128 and \200 are synonyms */
- if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') {
- char *val;
- long n = strtol(s + 4, &val, 10);
- if (val != s + 4 && *val == '\0' && n >= 0 && n < 256)
- return indexer.ascii_char_index((unsigned char)n);
- }
- return indexer.named_char_index(s);
-}
-
diff --git a/contrib/groff/src/libs/libgroff/new.cpp b/contrib/groff/src/libs/libgroff/new.cpp
deleted file mode 100644
index 84393fd8fb21..000000000000
--- a/contrib/groff/src/libs/libgroff/new.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "posix.h"
-#include "nonposix.h"
-
-extern "C" const char *program_name;
-
-static void ewrite(const char *s)
-{
- write(2, s, strlen(s));
-}
-
-void *operator new(size_t size)
-{
- // Avoid relying on the behaviour of malloc(0).
- if (size == 0)
- size++;
-#ifdef COOKIE_BUG
- char *p = (char *)malloc(unsigned(size + 8));
-#else /* not COOKIE_BUG */
- char *p = (char *)malloc(unsigned(size));
-#endif /* not COOKIE_BUG */
- if (p == 0) {
- if (program_name) {
- ewrite(program_name);
- ewrite(": ");
- }
- ewrite("out of memory\n");
- _exit(-1);
- }
-#ifdef COOKIE_BUG
- ((unsigned *)p)[1] = 0;
- return p + 8;
-#else /* not COOKIE_BUG */
- return p;
-#endif /* not COOKIE_BUG */
-}
-
-void operator delete(void *p)
-{
-#ifdef COOKIE_BUG
- if (p)
- free((void *)((char *)p - 8));
-#else
- if (p)
- free(p);
-#endif /* COOKIE_BUG */
-}
diff --git a/contrib/groff/src/libs/libgroff/paper.cpp b/contrib/groff/src/libs/libgroff/paper.cpp
deleted file mode 100644
index 4f114f4c3cdd..000000000000
--- a/contrib/groff/src/libs/libgroff/paper.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "paper.h"
-
-paper papersizes[NUM_PAPERSIZES];
-
-// length and width in mm
-static void add_iso_paper(char series, int offset,
- int start_length, int start_width)
-{
- int length = start_length;
- int width = start_width;
- for (int i = 0; i < 8; i++)
- {
- char *p = new char[3];
- p[0] = series;
- p[1] = '0' + i;
- p[2] = '\0';
- papersizes[offset + i].name = p;
- // convert mm to inch
- papersizes[offset + i].length = (double)length / 25.4;
- papersizes[offset + i].width = (double)width / 25.4;
- // after division by two, values must be rounded down to the next
- // integer (as specified by ISO)
- int tmp = length;
- length = width;
- width = tmp / 2;
- }
-}
-
-// length and width in inch
-static void add_american_paper(const char *name, int idx,
- double length, double width )
-{
- char *p = new char[strlen(name) + 1];
- strcpy(p, name);
- papersizes[idx].name = p;
- papersizes[idx].length = length;
- papersizes[idx].width = width;
-}
-
-int papersize_init::initialised = 0;
-
-papersize_init::papersize_init()
-{
- if (initialised)
- return;
- initialised = 1;
- add_iso_paper('a', 0, 1189, 841);
- add_iso_paper('b', 8, 1414, 1000);
- add_iso_paper('c', 16, 1297, 917);
- add_iso_paper('d', 24, 1090, 771);
- add_american_paper("letter", 32, 11, 8.5);
- add_american_paper("legal", 33, 14, 8.5);
- add_american_paper("tabloid", 34, 17, 11);
- add_american_paper("ledger", 35, 11, 17);
- add_american_paper("statement", 36, 8.5, 5.5);
- add_american_paper("executive", 37, 10, 7.5);
- // the next three entries are for grolj4
- add_american_paper("com10", 38, 9.5, 4.125);
- add_american_paper("monarch", 39, 7.5, 3.875);
- // this is an ISO format, but it easier to use add_american_paper
- add_american_paper("dl", 40, 220/25.4, 110/25.4);
-}
diff --git a/contrib/groff/src/libs/libgroff/prime.cpp b/contrib/groff/src/libs/libgroff/prime.cpp
deleted file mode 100644
index f0b1eadcc68b..000000000000
--- a/contrib/groff/src/libs/libgroff/prime.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <math.h>
-
-int is_prime(unsigned n)
-{
- if (n <= 3)
- return 1;
- if (!(n & 1))
- return 0;
- if (n % 3 == 0)
- return 0;
- unsigned lim = unsigned(sqrt((double)n));
- unsigned d = 5;
- for (;;) {
- if (d > lim)
- break;
- if (n % d == 0)
- return 0;
- d += 2;
- if (d > lim)
- break;
- if (n % d == 0)
- return 0;
- d += 4;
- }
- return 1;
-}
diff --git a/contrib/groff/src/libs/libgroff/progname.c b/contrib/groff/src/libs/libgroff/progname.c
deleted file mode 100644
index a70e3419c2be..000000000000
--- a/contrib/groff/src/libs/libgroff/progname.c
+++ /dev/null
@@ -1 +0,0 @@
-const char *program_name = 0;
diff --git a/contrib/groff/src/libs/libgroff/ptable.cpp b/contrib/groff/src/libs/libgroff/ptable.cpp
deleted file mode 100644
index bde2c3cada6f..000000000000
--- a/contrib/groff/src/libs/libgroff/ptable.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "ptable.h"
-#include "errarg.h"
-#include "error.h"
-
-unsigned long hash_string(const char *s)
-{
- assert(s != 0);
- unsigned long h = 0, g;
- while (*s != 0) {
- h <<= 4;
- h += *s++;
- if ((g = h & 0xf0000000) != 0) {
- h ^= g >> 24;
- h ^= g;
- }
- }
- return h;
-}
-
-static const unsigned table_sizes[] = {
-101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009,
-80021, 160001, 500009, 1000003, 2000003, 4000037, 8000009,
-16000057, 32000011, 64000031, 128000003, 0
-};
-
-unsigned next_ptable_size(unsigned n)
-{
- const unsigned *p;
- for (p = table_sizes; *p <= n; p++)
- if (*p == 0)
- fatal("cannot expand table");
- return *p;
-}
diff --git a/contrib/groff/src/libs/libgroff/putenv.c b/contrib/groff/src/libs/libgroff/putenv.c
deleted file mode 100644
index 2091f3b90808..000000000000
--- a/contrib/groff/src/libs/libgroff/putenv.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 1991, 2001 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-/* Hacked slightly by jjc@jclark.com for groff. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#ifdef __STDC__
-#include <stddef.h>
-typedef void *PTR;
-typedef size_t SIZE_T;
-#else /* not __STDC__ */
-typedef char *PTR;
-typedef int SIZE_T;
-#endif /* not __STDC__ */
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else /* not HAVE_STDLIB_H */
-PTR malloc();
-#endif /* not HAVE_STDLIB_H */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-extern char **environ;
-
-/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
-
-int putenv(const char *string)
-{
- char *name_end = strchr(string, '=');
- SIZE_T size;
- char **ep;
-
- if (name_end == NULL)
- {
- /* Remove the variable from the environment. */
- size = strlen(string);
- for (ep = environ; *ep != NULL; ++ep)
- if (!strncmp(*ep, string, size) && (*ep)[size] == '=')
- {
- while (ep[1] != NULL)
- {
- ep[0] = ep[1];
- ++ep;
- }
- *ep = NULL;
- return 0;
- }
- }
-
- size = 0;
- for (ep = environ; *ep != NULL; ++ep)
- if (!strncmp(*ep, string, name_end - string)
- && (*ep)[name_end - string] == '=')
- break;
- else
- ++size;
-
- if (*ep == NULL)
- {
- static char **last_environ = NULL;
- char **new_environ = (char **) malloc((size + 2) * sizeof(char *));
- if (new_environ == NULL)
- return -1;
- (void) memcpy((PTR) new_environ, (PTR) environ, size * sizeof(char *));
- new_environ[size] = (char *) string;
- new_environ[size + 1] = NULL;
- if (last_environ != NULL)
- free((PTR) last_environ);
- last_environ = new_environ;
- environ = new_environ;
- }
- else
- *ep = (char *) string;
-
- return 0;
-}
diff --git a/contrib/groff/src/libs/libgroff/quotearg.c b/contrib/groff/src/libs/libgroff/quotearg.c
deleted file mode 100644
index 0ab3dc6aa77a..000000000000
--- a/contrib/groff/src/libs/libgroff/quotearg.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright (C) 2004
- Free Software Foundation, Inc.
- Written by: Jeff Conrad (jeff_conrad@msn.com)
- and Keith Marshall (keith.d.marshall@ntlworld.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-
-/* Define the default mechanism, and messages, for error reporting
- * (user may substitute a preferred alternative, by defining his own
- * implementation of the macros REPORT_ERROR, QUOTE_ARG_MALLOC_FAILED
- * and QUOTE_ARG_REALLOC_FAILED, in the header file `nonposix.h').
- */
-
-#include "nonposix.h"
-
-#ifndef REPORT_ERROR
-# define REPORT_ERROR(WHY) fprintf(stderr, "%s:%s\n", program_name, WHY)
-#endif
-#ifndef QUOTE_ARG_MALLOC_ERROR
-# define QUOTE_ARG_MALLOC_ERROR "malloc: Buffer allocation failed"
-#endif
-#ifndef QUOTE_ARG_REALLOC_ERROR
-# define QUOTE_ARG_REALLOC_ERROR "realloc: Buffer resize failed"
-#endif
-
-extern char *program_name; /* main program must define this */
-
-#undef FALSE
-#undef TRUE
-#define FALSE 0
-#define TRUE 1
-
-static int
-needs_quoting(const char *string)
-{
- /* Scan `string' to see whether it needs quoting for MSVC `spawn'/`exec'
- * (i.e., whether it contains whitespace or embedded quotes).
- */
-
- if (string == NULL) /* ignore NULL strings */
- return FALSE;
-
- if (*string == '\0') /* explicit arguments of zero length */
- return TRUE; /* need quoting, so they aren't discarded */
-
- while (*string) {
- /* Scan non-NULL strings, up to '\0' terminator,
- * returning 'TRUE' if quote or white space found.
- */
-
- if (*string == '"' || isspace(*string))
- return TRUE;
-
- /* otherwise, continue scanning to end of string */
-
- ++string;
- }
-
- /* Fall through, if no quotes or white space found,
- * in which case, return `FALSE'.
- */
-
- return FALSE;
-}
-
-char *
-quote_arg(char *string)
-{
- /* Enclose arguments in double quotes so that the parsing done in the
- * MSVC runtime startup code doesn't split them at whitespace. Escape
- * embedded double quotes so that they emerge intact from the parsing.
- */
-
- int backslashes;
- char *quoted, *p, *q;
-
- if (needs_quoting(string)) {
- /* Need to create a quoted copy of `string';
- * maximum buffer space needed is twice the original length,
- * plus two enclosing quotes and one `\0' terminator.
- */
-
- if ((quoted = (char *)malloc(2 * strlen(string) + 3)) == NULL) {
- /* Couldn't get a buffer for the quoted string,
- * so complain, and bail out gracefully.
- */
-
- REPORT_ERROR(QUOTE_ARG_MALLOC_ERROR);
- exit(1);
- }
-
- /* Ok to proceed:
- * insert the opening quote, then copy the source string,
- * adding escapes as required.
- */
-
- *quoted = '"';
- for (backslashes = 0, p = string, q = quoted; *p; p++) {
- if (*p == '\\') {
- /* Just count backslashes when we find them.
- * We will copy them out later, when we know if the count
- * needs to be adjusted, to escape an embedded quote.
- */
-
- ++backslashes;
- }
- else if (*p == '"') {
- /* This embedded quote character must be escaped,
- * but first double up any immediately preceding backslashes,
- * with one extra, as the escape character.
- */
-
- for (backslashes += backslashes + 1; backslashes; backslashes--)
- *++q = '\\';
-
- /* and now, add the quote character itself */
-
- *++q = '"';
- }
- else {
- /* Any other character is simply copied,
- * but first, if we have any pending backslashes,
- * we must now insert them, without any count adjustment.
- */
-
- while (backslashes) {
- *++q = '\\';
- --backslashes;
- }
-
- /* and then, copy the current character */
-
- *++q = *p;
- }
- }
-
- /* At end of argument:
- * If any backslashes remain to be copied out, append them now,
- * doubling the actual count to protect against reduction by MSVC,
- * as a consequence of the immediately following closing quote.
- */
-
- for (backslashes += backslashes; backslashes; backslashes--)
- *++q = '\\';
-
- /* Finally,
- * add the closing quote, terminate the quoted string,
- * and adjust its size to what was actually required,
- * ready for return.
- */
-
- *++q = '"';
- *++q = '\0';
- if ((string = (char *)realloc(quoted, strlen(quoted) + 1)) == NULL) {
- /* but bail out gracefully, on error */
-
- REPORT_ERROR(QUOTE_ARG_REALLOC_ERROR);
- exit(1);
- }
- }
-
- /* `string' now refers to the argument,
- * quoted and escaped, as required.
- */
-
- return string;
-}
-
-void
-purge_quoted_args(char **argv)
-{
- /* To avoid memory leaks,
- * free all memory previously allocated by `quoted_arg()',
- * within the scope of the referring argument vector, `argv'.
- */
-
- if (argv)
- while (*argv) {
- /* Any argument beginning with a double quote
- * SHOULD have been allocated by `quoted_arg()'.
- */
-
- if (**argv == '"')
- free( *argv ); /* so free its allocation */
- ++argv; /* and continue to the next argument */
- }
-}
-
-/* quotearg.c: end of file */
diff --git a/contrib/groff/src/libs/libgroff/relocate.cpp b/contrib/groff/src/libs/libgroff/relocate.cpp
deleted file mode 100644
index 5aace8b5bb78..000000000000
--- a/contrib/groff/src/libs/libgroff/relocate.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-// -*- C++ -*-
-/* Provide relocation for macro and font files.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-// Made after relocation code in kpathsea and gettext.
-
-#include "lib.h"
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include "defs.h"
-#include "posix.h"
-#include "nonposix.h"
-#include "relocate.h"
-
-#if defined _WIN32
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#define INSTALLPATHLEN (sizeof(INSTALLPATH) - 1)
-#ifndef DEBUG
-# define DEBUG 0
-#endif
-
-extern "C" const char *program_name;
-
-// The prefix (parent directory) corresponding to the binary.
-char *curr_prefix = 0;
-size_t curr_prefix_len = 0;
-
-// Return the directory part of a filename, or `.' if no path separators.
-char *xdirname(char *s)
-{
- static const char dot[] = ".";
- if (!s)
- return 0;
- // DIR_SEPS[] are possible directory separator characters, see nonposix.h.
- // We want the rightmost separator of all possible ones.
- // Example: d:/foo\\bar.
- char *p = strrchr(s, DIR_SEPS[0]);
- const char *sep = &DIR_SEPS[1];
- while (*sep) {
- char *p1 = strrchr(s, *sep);
- if (p1 && (!p || p1 > p))
- p = p1;
- sep++;
- }
- if (p)
- *p = '\0';
- else
- s = (char *)dot;
- return s;
-}
-
-// Return the full path of NAME along the path PATHP.
-// Adapted from search_path::open_file in searchpath.cpp.
-char *searchpath(const char *name, const char *pathp)
-{
- char *path;
- if (!name || !*name)
- return 0;
-#if DEBUG
- fprintf(stderr, "searchpath: pathp: `%s'\n", pathp);
- fprintf(stderr, "searchpath: trying `%s'\n", name);
-#endif
- // Try first NAME as such; success if NAME is an absolute filename,
- // or if NAME is found in the current directory.
- if (!access (name, F_OK)) {
- path = new char[path_name_max()];
-#ifdef _WIN32
- path = _fullpath(path, name, path_name_max());
-#else
- path = realpath(name, path);
-#endif
-#if DEBUG
- fprintf(stderr, "searchpath: found `%s'\n", path);
-#endif
- return path;
- }
- // Secondly, try the current directory.
- // Now search along PATHP.
- size_t namelen = strlen(name);
- char *p = (char *)pathp;
- for (;;) {
- char *end = strchr(p, PATH_SEP_CHAR);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- path = new char[end - p + need_slash + namelen + 1];
- memcpy(path, p, end - p);
- if (need_slash)
- path[end - p] = '/';
- strcpy(path + (end - p) + need_slash, name);
-#if DEBUG
- fprintf(stderr, "searchpath: trying `%s'\n", path);
-#endif
- if (!access(path, F_OK)) {
-#if DEBUG
- fprintf(stderr, "searchpath: found `%s'\n", name);
-#endif
- return path;
- }
- a_delete path;
- if (*end == '\0')
- break;
- p = end + 1;
- }
- return 0;
-}
-
-// Search NAME along PATHP with the elements of PATHEXT in turn added.
-char *searchpathext(const char *name, const char *pathext, const char *pathp)
-{
- char *found = 0;
- char *tmpathext = strsave(pathext); // strtok modifies this string,
- // so make a copy
- char *ext = strtok(tmpathext, PATH_SEP);
- while (ext) {
- char *namex = new char[strlen(name) + strlen(ext) + 1];
- strcpy(namex, name);
- strcat(namex, ext);
- found = searchpath(namex, pathp);
- a_delete namex;
- if (found)
- break;
- ext = strtok(0, PATH_SEP);
- }
- a_delete tmpathext;
- return found;
-}
-
-// Convert an MS path to a POSIX path.
-char *msw2posixpath(char *path)
-{
- char *s = path;
- while (*s) {
- if (*s == '\\')
- *s = '/';
- *s++;
- }
- return path;
-}
-
-// Compute the current prefix.
-void set_current_prefix()
-{
- char *pathextstr;
- curr_prefix = new char[path_name_max()];
- // Obtain the full path of the current binary;
- // using GetModuleFileName on MS-Windows,
- // and searching along PATH on other systems.
-#ifdef _WIN32
- int len = GetModuleFileName(0, curr_prefix, path_name_max());
- if (len)
- len = GetShortPathName(curr_prefix, curr_prefix, path_name_max());
-# if DEBUG
- fprintf(stderr, "curr_prefix: %s\n", curr_prefix);
-# endif /* DEBUG */
-#else /* !_WIN32 */
- curr_prefix = searchpath(program_name, getenv("PATH"));
- if (!curr_prefix && !strchr(program_name, '.')) { // try with extensions
- pathextstr = strsave(getenv("PATHEXT"));
- if (!pathextstr)
- pathextstr = strsave(PATH_EXT);
- curr_prefix = searchpathext(program_name, pathextstr, getenv("PATH"));
- a_delete pathextstr;
- }
- if (!curr_prefix)
- return;
-#endif /* !_WIN32 */
- msw2posixpath(curr_prefix);
-#if DEBUG
- fprintf(stderr, "curr_prefix: %s\n", curr_prefix);
-#endif
- curr_prefix = xdirname(curr_prefix); // directory of executable
- curr_prefix = xdirname(curr_prefix); // parent directory of executable
- curr_prefix_len = strlen(curr_prefix);
-#if DEBUG
- fprintf(stderr, "curr_prefix: %s\n", curr_prefix);
- fprintf(stderr, "curr_prefix_len: %d\n", curr_prefix_len);
-#endif
-}
-
-// Strip the installation prefix and replace it
-// with the current installation prefix; return the relocated path.
-char *relocatep(const char *path)
-{
-#if DEBUG
- fprintf(stderr, "relocatep: path = %s\n", path);
- fprintf(stderr, "relocatep: INSTALLPATH = %s\n", INSTALLPATH);
- fprintf(stderr, "relocatep: INSTALLPATHLEN = %d\n", INSTALLPATHLEN);
-#endif
- if (!curr_prefix)
- set_current_prefix();
- if (strncmp(INSTALLPATH, path, INSTALLPATHLEN))
- return strsave(path);
- char *relative_path = (char *)path + INSTALLPATHLEN;
- size_t relative_path_len = strlen(relative_path);
- char *relocated_path = new char[curr_prefix_len + relative_path_len + 1];
- strcpy(relocated_path, curr_prefix);
- strcat(relocated_path, relative_path);
-#if DEBUG
- fprintf(stderr, "relocated_path: %s\n", relocated_path);
-#endif /* DEBUG */
- return relocated_path;
-}
-
-// Return the original pathname if it exists;
-// otherwise return the relocated path.
-char *relocate(const char *path)
-{
- char *p;
- if (access(path, F_OK))
- p = relocatep(path);
- else
- p = strsave(path);
-#if DEBUG
- fprintf (stderr, "relocate: %s\n", p);
-#endif
- return p;
-}
diff --git a/contrib/groff/src/libs/libgroff/searchpath.cpp b/contrib/groff/src/libs/libgroff/searchpath.cpp
deleted file mode 100644
index 6b9b81cc2543..000000000000
--- a/contrib/groff/src/libs/libgroff/searchpath.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "searchpath.h"
-#include "nonposix.h"
-
-#ifdef _WIN32
-# include "relocate.h"
-#else
-# define relocate(path) strsave(path)
-#endif
-
-search_path::search_path(const char *envvar, const char *standard,
- int add_home, int add_current)
-{
- char *home = 0;
- if (add_home)
- home = getenv("HOME");
- char *e = 0;
- if (envvar)
- e = getenv(envvar);
- dirs = new char[((e && *e) ? strlen(e) + 1 : 0)
- + (add_current ? 1 + 1 : 0)
- + ((home && *home) ? strlen(home) + 1 : 0)
- + ((standard && *standard) ? strlen(standard) : 0)
- + 1];
- *dirs = '\0';
- if (e && *e) {
- strcat(dirs, e);
- strcat(dirs, PATH_SEP);
- }
- if (add_current) {
- strcat(dirs, ".");
- strcat(dirs, PATH_SEP);
- }
- if (home && *home) {
- strcat(dirs, home);
- strcat(dirs, PATH_SEP);
- }
- if (standard && *standard)
- strcat(dirs, standard);
- init_len = strlen(dirs);
-}
-
-search_path::~search_path()
-{
- // dirs is always allocated
- a_delete dirs;
-}
-
-void search_path::command_line_dir(const char *s)
-{
- char *old = dirs;
- unsigned old_len = strlen(old);
- unsigned slen = strlen(s);
- dirs = new char[old_len + 1 + slen + 1];
- memcpy(dirs, old, old_len - init_len);
- char *p = dirs;
- p += old_len - init_len;
- if (init_len == 0)
- *p++ = PATH_SEP_CHAR;
- memcpy(p, s, slen);
- p += slen;
- if (init_len > 0) {
- *p++ = PATH_SEP_CHAR;
- memcpy(p, old + old_len - init_len, init_len);
- p += init_len;
- }
- *p++ = '\0';
- a_delete old;
-}
-
-FILE *search_path::open_file(const char *name, char **pathp)
-{
- assert(name != 0);
- if (IS_ABSOLUTE(name) || *dirs == '\0') {
- FILE *fp = fopen(name, "r");
- if (fp) {
- if (pathp)
- *pathp = strsave(name);
- return fp;
- }
- else
- return 0;
- }
- unsigned namelen = strlen(name);
- char *p = dirs;
- for (;;) {
- char *end = strchr(p, PATH_SEP_CHAR);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- char *origpath = new char[(end - p) + need_slash + namelen + 1];
- memcpy(origpath, p, end - p);
- if (need_slash)
- origpath[end - p] = '/';
- strcpy(origpath + (end - p) + need_slash, name);
-#if 0
- fprintf(stderr, "origpath `%s'\n", origpath);
-#endif
- char *path = relocate(origpath);
- a_delete origpath;
-#if 0
- fprintf(stderr, "trying `%s'\n", path);
-#endif
- FILE *fp = fopen(path, "r");
- if (fp) {
- if (pathp)
- *pathp = path;
- else
- a_delete path;
- return fp;
- }
- a_delete path;
- if (*end == '\0')
- break;
- p = end + 1;
- }
- return 0;
-}
-
-FILE *search_path::open_file_cautious(const char *name, char **pathp,
- const char *mode)
-{
- if (!mode)
- mode = "r";
- bool reading = (strchr(mode, 'r') != 0);
- if (name == 0 || strcmp(name, "-") == 0) {
- if (pathp)
- *pathp = strsave(reading ? "stdin" : "stdout");
- return (reading ? stdin : stdout);
- }
- if (!reading || IS_ABSOLUTE(name) || *dirs == '\0') {
- FILE *fp = fopen(name, mode);
- if (fp) {
- if (pathp)
- *pathp = strsave(name);
- return fp;
- }
- else
- return 0;
- }
- unsigned namelen = strlen(name);
- char *p = dirs;
- for (;;) {
- char *end = strchr(p, PATH_SEP_CHAR);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- char *origpath = new char[(end - p) + need_slash + namelen + 1];
- memcpy(origpath, p, end - p);
- if (need_slash)
- origpath[end - p] = '/';
- strcpy(origpath + (end - p) + need_slash, name);
-#if 0
- fprintf(stderr, "origpath `%s'\n", origpath);
-#endif
- char *path = relocate(origpath);
- a_delete origpath;
-#if 0
- fprintf(stderr, "trying `%s'\n", path);
-#endif
- FILE *fp = fopen(path, mode);
- if (fp) {
- if (pathp)
- *pathp = path;
- else
- a_delete path;
- return fp;
- }
- int err = errno;
- a_delete path;
- if (err != ENOENT)
- {
- errno = err;
- return 0;
- }
- if (*end == '\0')
- break;
- p = end + 1;
- }
- errno = ENOENT;
- return 0;
-}
diff --git a/contrib/groff/src/libs/libgroff/spawnvp.c b/contrib/groff/src/libs/libgroff/spawnvp.c
deleted file mode 100644
index 1848124f3bd5..000000000000
--- a/contrib/groff/src/libs/libgroff/spawnvp.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright (C) 2004
- Free Software Foundation, Inc.
- Written by: Keith Marshall (keith.d.marshall@ntlworld.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef HAVE_PROCESS_H
-# include <process.h>
-#endif
-
-#if defined(__MSDOS__) \
- || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__)) \
- || defined(__EMX__)
-
-#define SPAWN_FUNCTION_WRAPPERS 1
-
-/* Define the default mechanism, and messages, for error reporting
- * (user may substitute a preferred alternative, by defining his own
- * implementation of the macros REPORT_ERROR and ARGV_MALLOC_ERROR,
- * in the header file `nonposix.h').
- */
-
-#include "nonposix.h"
-
-#ifndef REPORT_ERROR
-# define REPORT_ERROR(WHY) fprintf(stderr, "%s:%s\n", program_name, WHY)
-#endif
-#ifndef ARGV_MALLOC_ERROR
-# define ARGV_MALLOC_ERROR "malloc: Allocation for 'argv' failed"
-#endif
-
-extern char *program_name;
-
-extern char *quote_arg(char *string);
-extern void purge_quoted_args(char **argv);
-
-int
-spawnvp_wrapper(int mode, char *path, char **argv)
-{
- /* Invoke the system `spawnvp' service
- * enclosing the passed arguments in double quotes, as required,
- * so that the (broken) default parsing in the MSVC runtime doesn't
- * split them at whitespace. */
-
- char **quoted_argv; /* used to build a quoted local copy of `argv' */
-
- int i; /* used as an index into `argv' or `quoted_argv' */
- int status = -1; /* initialise return code, in case we fail */
- int argc = 0; /* initialise argument count; may be none */
-
- /* First count the number of arguments
- * which are actually present in the passed `argv'. */
-
- if (argv)
- for (quoted_argv = argv; *quoted_argv; ++argc, ++quoted_argv)
- ;
-
- /* If we do not now have an argument count,
- * then we must fall through and fail. */
-
- if (argc) {
- /* We do have at least one argument:
- * We will use a copy of the `argv', in which to do the quoting,
- * so we must allocate space for it. */
-
- if ((quoted_argv = (char **)malloc(++argc * sizeof(char **))) == NULL) {
- /* If we didn't get enough space,
- * then complain, and bail out gracefully. */
-
- REPORT_ERROR(ARGV_MALLOC_ERROR);
- exit(1);
- }
-
- /* Now copy the passed `argv' into our new vector,
- * quoting its contents as required. */
-
- for (i = 0; i < argc; i++)
- quoted_argv[i] = quote_arg(argv[i]);
-
- /* Invoke the MSVC `spawnvp' service
- * passing our now appropriately quoted copy of `argv'. */
-
- status = spawnvp(mode, path, quoted_argv);
-
- /* Clean up our memory allocations
- * for the quoted copy of `argv', which is no longer required. */
-
- purge_quoted_args(quoted_argv);
- free(quoted_argv);
- }
-
- /* Finally,
- * return the status code returned by `spawnvp',
- * or a failure code if we fell through. */
-
- return status;
-}
-
-#endif /* __MSDOS__ || _WIN32 */
-
-/* spawnvp.c: end of file */
diff --git a/contrib/groff/src/libs/libgroff/strcasecmp.c b/contrib/groff/src/libs/libgroff/strcasecmp.c
deleted file mode 100644
index 6ed6cc282079..000000000000
--- a/contrib/groff/src/libs/libgroff/strcasecmp.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* strcasecmp.c -- case insensitive string comparator
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef LENGTH_LIMIT
-# define STRXCASECMP_FUNCTION strncasecmp
-# define STRXCASECMP_DECLARE_N , size_t n
-# define LENGTH_LIMIT_EXPR(Expr) Expr
-#else
-# define STRXCASECMP_FUNCTION strcasecmp
-# define STRXCASECMP_DECLARE_N /* empty */
-# define LENGTH_LIMIT_EXPR(Expr) 0
-#endif
-
-#include <stddef.h>
-#include <ctype.h>
-
-#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
-
-/* Compare {{no more than N characters of }}strings S1 and S2,
- ignoring case, returning less than, equal to or
- greater than zero if S1 is lexicographically less
- than, equal to or greater than S2. */
-
-int
-STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
-{
- register const unsigned char *p1 = (const unsigned char *) s1;
- register const unsigned char *p2 = (const unsigned char *) s2;
- unsigned char c1, c2;
-
- if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0))
- return 0;
-
- do
- {
- c1 = TOLOWER (*p1);
- c2 = TOLOWER (*p2);
-
- if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
- break;
-
- ++p1;
- ++p2;
- }
- while (c1 == c2);
-
- return c1 - c2;
-}
diff --git a/contrib/groff/src/libs/libgroff/strerror.c b/contrib/groff/src/libs/libgroff/strerror.c
deleted file mode 100644
index d5757f309dd8..000000000000
--- a/contrib/groff/src/libs/libgroff/strerror.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h> /* for MinGW */
-
-#define INT_DIGITS 19 /* enough for 64 bit integer */
-
-#ifndef HAVE_SYS_NERR
-extern int sys_nerr;
-#endif
-#ifndef HAVE_SYS_ERRLIST
-extern char *sys_errlist[];
-#endif
-
-char *strerror(n)
- int n;
-{
- static char buf[sizeof("Error ") + 1 + INT_DIGITS];
- if (n >= 0 && n < sys_nerr && sys_errlist[n] != 0)
- return sys_errlist[n];
- else {
- sprintf(buf, "Error %d", n);
- return buf;
- }
-}
diff --git a/contrib/groff/src/libs/libgroff/string.cpp b/contrib/groff/src/libs/libgroff/string.cpp
deleted file mode 100644
index 9be873c8ef8f..000000000000
--- a/contrib/groff/src/libs/libgroff/string.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include "stringclass.h"
-
-static char *salloc(int len, int *sizep);
-static void sfree(char *ptr, int size);
-static char *sfree_alloc(char *ptr, int size, int len, int *sizep);
-static char *srealloc(char *ptr, int size, int oldlen, int newlen, int *sizep);
-
-static char *salloc(int len, int *sizep)
-{
- if (len == 0) {
- *sizep = 0;
- return 0;
- }
- else
- return new char[*sizep = len*2];
-}
-
-static void sfree(char *ptr, int)
-{
- a_delete ptr;
-}
-
-static char *sfree_alloc(char *ptr, int oldsz, int len, int *sizep)
-{
- if (oldsz >= len) {
- *sizep = oldsz;
- return ptr;
- }
- a_delete ptr;
- if (len == 0) {
- *sizep = 0;
- return 0;
- }
- else
- return new char[*sizep = len*2];
-}
-
-static char *srealloc(char *ptr, int oldsz, int oldlen, int newlen, int *sizep)
-{
- if (oldsz >= newlen) {
- *sizep = oldsz;
- return ptr;
- }
- if (newlen == 0) {
- a_delete ptr;
- *sizep = 0;
- return 0;
- }
- else {
- char *p = new char[*sizep = newlen*2];
- if (oldlen < newlen && oldlen != 0)
- memcpy(p, ptr, oldlen);
- a_delete ptr;
- return p;
- }
-}
-
-string::string() : ptr(0), len(0), sz(0)
-{
-}
-
-string::string(const char *p, int n) : len(n)
-{
- assert(n >= 0);
- ptr = salloc(n, &sz);
- if (n != 0)
- memcpy(ptr, p, n);
-}
-
-string::string(const char *p)
-{
- if (p == 0) {
- len = 0;
- ptr = 0;
- sz = 0;
- }
- else {
- len = strlen(p);
- ptr = salloc(len, &sz);
- memcpy(ptr, p, len);
- }
-}
-
-string::string(char c) : len(1)
-{
- ptr = salloc(1, &sz);
- *ptr = c;
-}
-
-string::string(const string &s) : len(s.len)
-{
- ptr = salloc(len, &sz);
- if (len != 0)
- memcpy(ptr, s.ptr, len);
-}
-
-string::~string()
-{
- sfree(ptr, sz);
-}
-
-string &string::operator=(const string &s)
-{
- ptr = sfree_alloc(ptr, sz, s.len, &sz);
- len = s.len;
- if (len != 0)
- memcpy(ptr, s.ptr, len);
- return *this;
-}
-
-string &string::operator=(const char *p)
-{
- if (p == 0) {
- sfree(ptr, len);
- len = 0;
- ptr = 0;
- sz = 0;
- }
- else {
- int slen = strlen(p);
- ptr = sfree_alloc(ptr, sz, slen, &sz);
- len = slen;
- memcpy(ptr, p, len);
- }
- return *this;
-}
-
-string &string::operator=(char c)
-{
- ptr = sfree_alloc(ptr, sz, 1, &sz);
- len = 1;
- *ptr = c;
- return *this;
-}
-
-void string::move(string &s)
-{
- sfree(ptr, sz);
- ptr = s.ptr;
- len = s.len;
- sz = s.sz;
- s.ptr = 0;
- s.len = 0;
- s.sz = 0;
-}
-
-void string::grow1()
-{
- ptr = srealloc(ptr, sz, len, len + 1, &sz);
-}
-
-string &string::operator+=(const char *p)
-{
- if (p != 0) {
- int n = strlen(p);
- int newlen = len + n;
- if (newlen > sz)
- ptr = srealloc(ptr, sz, len, newlen, &sz);
- memcpy(ptr + len, p, n);
- len = newlen;
- }
- return *this;
-}
-
-string &string::operator+=(const string &s)
-{
- if (s.len != 0) {
- int newlen = len + s.len;
- if (newlen > sz)
- ptr = srealloc(ptr, sz, len, newlen, &sz);
- memcpy(ptr + len, s.ptr, s.len);
- len = newlen;
- }
- return *this;
-}
-
-void string::append(const char *p, int n)
-{
- if (n > 0) {
- int newlen = len + n;
- if (newlen > sz)
- ptr = srealloc(ptr, sz, len, newlen, &sz);
- memcpy(ptr + len, p, n);
- len = newlen;
- }
-}
-
-string::string(const char *s1, int n1, const char *s2, int n2)
-{
- assert(n1 >= 0 && n2 >= 0);
- len = n1 + n2;
- if (len == 0) {
- sz = 0;
- ptr = 0;
- }
- else {
- ptr = salloc(len, &sz);
- if (n1 == 0)
- memcpy(ptr, s2, n2);
- else {
- memcpy(ptr, s1, n1);
- if (n2 != 0)
- memcpy(ptr + n1, s2, n2);
- }
- }
-}
-
-int operator<=(const string &s1, const string &s2)
-{
- return (s1.len <= s2.len
- ? s1.len == 0 || memcmp(s1.ptr, s2.ptr, s1.len) <= 0
- : s2.len != 0 && memcmp(s1.ptr, s2.ptr, s2.len) < 0);
-}
-
-int operator<(const string &s1, const string &s2)
-{
- return (s1.len < s2.len
- ? s1.len == 0 || memcmp(s1.ptr, s2.ptr, s1.len) <= 0
- : s2.len != 0 && memcmp(s1.ptr, s2.ptr, s2.len) < 0);
-}
-
-int operator>=(const string &s1, const string &s2)
-{
- return (s1.len >= s2.len
- ? s2.len == 0 || memcmp(s1.ptr, s2.ptr, s2.len) >= 0
- : s1.len != 0 && memcmp(s1.ptr, s2.ptr, s1.len) > 0);
-}
-
-int operator>(const string &s1, const string &s2)
-{
- return (s1.len > s2.len
- ? s2.len == 0 || memcmp(s1.ptr, s2.ptr, s2.len) >= 0
- : s1.len != 0 && memcmp(s1.ptr, s2.ptr, s1.len) > 0);
-}
-
-void string::set_length(int i)
-{
- assert(i >= 0);
- if (i > sz)
- ptr = srealloc(ptr, sz, len, i, &sz);
- len = i;
-}
-
-void string::clear()
-{
- len = 0;
-}
-
-int string::search(char c) const
-{
- char *p = ptr ? (char *)memchr(ptr, c, len) : NULL;
- return p ? p - ptr : -1;
-}
-
-// we silently strip nuls
-
-char *string::extract() const
-{
- char *p = ptr;
- int n = len;
- int nnuls = 0;
- int i;
- for (i = 0; i < n; i++)
- if (p[i] == '\0')
- nnuls++;
- char *q = new char[n + 1 - nnuls];
- char *r = q;
- for (i = 0; i < n; i++)
- if (p[i] != '\0')
- *r++ = p[i];
- *r = '\0';
- return q;
-}
-
-void string::remove_spaces()
-{
- int l = len - 1;
- while (l >= 0 && ptr[l] == ' ')
- l--;
- char *p = ptr;
- if (l > 0)
- while (*p == ' ') {
- p++;
- l--;
- }
- if (len - 1 != l) {
- if (l >= 0) {
- len = l + 1;
- char *tmp = new char[len];
- memcpy(tmp, p, len);
- a_delete ptr;
- ptr = tmp;
- }
- else {
- len = 0;
- if (ptr) {
- a_delete ptr;
- ptr = 0;
- }
- }
- }
-}
-
-void put_string(const string &s, FILE *fp)
-{
- int len = s.length();
- const char *ptr = s.contents();
- for (int i = 0; i < len; i++)
- putc(ptr[i], fp);
-}
-
-string as_string(int i)
-{
- static char buf[INT_DIGITS + 2];
- sprintf(buf, "%d", i);
- return string(buf);
-}
-
diff --git a/contrib/groff/src/libs/libgroff/strncasecmp.c b/contrib/groff/src/libs/libgroff/strncasecmp.c
deleted file mode 100644
index 68d95aacc0fe..000000000000
--- a/contrib/groff/src/libs/libgroff/strncasecmp.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define LENGTH_LIMIT
-#include "strcasecmp.c"
diff --git a/contrib/groff/src/libs/libgroff/strsave.cpp b/contrib/groff/src/libs/libgroff/strsave.cpp
deleted file mode 100644
index 2db70737a18c..000000000000
--- a/contrib/groff/src/libs/libgroff/strsave.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <string.h>
-
-char *strsave(const char *s)
-{
- if (s == 0)
- return 0;
- char *p = new char[strlen(s) + 1];
- strcpy(p, s);
- return p;
-}
-
diff --git a/contrib/groff/src/libs/libgroff/strtol.c b/contrib/groff/src/libs/libgroff/strtol.c
deleted file mode 100644
index 0c758a076b94..000000000000
--- a/contrib/groff/src/libs/libgroff/strtol.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
-#endif
-
-#ifdef isascii
-#define ISASCII(c) isascii(c)
-#else
-#define ISASCII(c) (1)
-#endif
-
-long strtol(str, ptr, base)
- char *str, **ptr;
- int base;
-{
- char *start = str;
- int neg = 0;
- long val;
- char *p;
- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
- while (ISASCII((unsigned char)*str) && isspace((unsigned char)*str))
- str++;
-
- if (*str == '-') {
- neg = 1;
- str++;
- }
- if (base == 0) {
- if (*str == '0') {
- if (str[1] == 'x' || str[1] == 'X') {
- str += 2;
- base = 16;
- }
- else
- base = 8;
- }
- else
- base = 10;
- }
- if (base < 2 || base > 36)
- base = 10;
- else if (base == 16 && *str == '0' && (str[1] == 'x' || str[1] == 'X'))
- str += 2;
-
- p = strchr(digits, (ISASCII((unsigned char)*str)
- && isupper((unsigned char)*str)
- ? tolower((unsigned char)*str)
- : *str));
- if (p == 0 || (val = (p - digits)) >= base) {
- if (base == 16 && str > start && (str[-1] == 'x' || str[-1] == 'X')) {
- if (ptr)
- *ptr = str - 1;
- }
- else {
- if (ptr)
- *ptr = start;
- errno = ERANGE;
- }
- return 0;
- }
- if (neg)
- val = -val;
-
- while (*++str != '\0') {
- int n;
-
- p = strchr(digits, (ISASCII((unsigned char)*str)
- && isupper((unsigned char)*str)
- ? tolower((unsigned char)*str) : *str));
- if (p == 0)
- break;
- n = p - digits;
- if (n >= base)
- break;
- if (neg) {
- if (-(unsigned long)val > (-(unsigned long)LONG_MIN - n)/base) {
- val = LONG_MIN;
- errno = ERANGE;
- }
- else
- val = val*base - n;
- }
- else {
- if (val > (LONG_MAX - n)/base) {
- val = LONG_MAX;
- errno = ERANGE;
- }
- else
- val = val*base + n;
- }
- }
-
- if (ptr)
- *ptr = str;
-
- return val;
-}
diff --git a/contrib/groff/src/libs/libgroff/symbol.cpp b/contrib/groff/src/libs/libgroff/symbol.cpp
deleted file mode 100644
index 38e30712e6c1..000000000000
--- a/contrib/groff/src/libs/libgroff/symbol.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include "errarg.h"
-#include "error.h"
-#include "symbol.h"
-
-const char **symbol::table = 0;
-int symbol::table_used = 0;
-int symbol::table_size = 0;
-char *symbol::block = 0;
-int symbol::block_size = 0;
-
-const symbol NULL_SYMBOL;
-const symbol EMPTY_SYMBOL("");
-
-#ifdef BLOCK_SIZE
-#undef BLOCK_SIZE
-#endif
-
-const int BLOCK_SIZE = 1024;
-// the table will increase in size as necessary
-// the size will be chosen from the following array
-// add some more if you want
-static const unsigned int table_sizes[] = {
- 101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, 80021,
- 160001, 500009, 1000003, 1500007, 2000003, 0
-};
-const double FULL_MAX = 0.3; // don't let the table get more than this full
-
-static unsigned int hash_string(const char *p)
-{
- // compute a hash code; this assumes 32-bit unsigned ints
- // see p436 of Compilers by Aho, Sethi & Ullman
- // give special treatment to two-character names
- unsigned int hc = 0, g;
- if (*p != 0) {
- hc = *p++;
- if (*p != 0) {
- hc <<= 7;
- hc += *p++;
- for (; *p != 0; p++) {
- hc <<= 4;
- hc += *p;
- if ((g = (hc & 0xf0000000)) == 0) {
- hc ^= g >> 24;
- hc ^= g;
- }
- }
- }
- }
- return hc;
-}
-
-// Tell compiler that a variable is intentionally unused.
-inline void unused(void *) { }
-
-symbol::symbol(const char *p, int how)
-{
- if (p == 0) {
- s = 0;
- return;
- }
- if (*p == 0) {
- s = "";
- return;
- }
- if (table == 0) {
- table_size = table_sizes[0];
- table = (const char **)new char*[table_size];
- for (int i = 0; i < table_size; i++)
- table[i] = 0;
- table_used = 0;
- }
- unsigned int hc = hash_string(p);
- const char **pp;
- for (pp = table + hc % table_size;
- *pp != 0;
- (pp == table ? pp = table + table_size - 1 : --pp))
- if (strcmp(p, *pp) == 0) {
- s = *pp;
- return;
- }
- if (how == MUST_ALREADY_EXIST) {
- s = 0;
- return;
- }
- if (table_used >= table_size - 1 || table_used >= table_size*FULL_MAX) {
- const char **old_table = table;
- unsigned int old_table_size = table_size;
- int i;
- for (i = 1; table_sizes[i] <= old_table_size; i++)
- if (table_sizes[i] == 0)
- fatal("too many symbols");
- table_size = table_sizes[i];
- table_used = 0;
- table = (const char **)new char*[table_size];
- for (i = 0; i < table_size; i++)
- table[i] = 0;
- for (pp = old_table + old_table_size - 1;
- pp >= old_table;
- --pp) {
- symbol temp(*pp, 1); /* insert it into the new table */
- unused(&temp);
- }
- a_delete old_table;
- for (pp = table + hc % table_size;
- *pp != 0;
- (pp == table ? pp = table + table_size - 1 : --pp))
- ;
- }
- ++table_used;
- if (how == DONT_STORE) {
- s = *pp = p;
- }
- else {
- int len = strlen(p)+1;
- if (block == 0 || block_size < len) {
- block_size = len > BLOCK_SIZE ? len : BLOCK_SIZE;
- block = new char [block_size];
- }
- (void)strcpy(block, p);
- s = *pp = block;
- block += len;
- block_size -= len;
- }
-}
-
-symbol concat(symbol s1, symbol s2)
-{
- char *buf = new char [strlen(s1.contents()) + strlen(s2.contents()) + 1];
- strcpy(buf, s1.contents());
- strcat(buf, s2.contents());
- symbol res(buf);
- a_delete buf;
- return res;
-}
-
-symbol default_symbol("default");
diff --git a/contrib/groff/src/libs/libgroff/tmpfile.cpp b/contrib/groff/src/libs/libgroff/tmpfile.cpp
deleted file mode 100644
index fbc48c81d118..000000000000
--- a/contrib/groff/src/libs/libgroff/tmpfile.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "nonposix.h"
-
-// If this is set, create temporary files there
-#define GROFF_TMPDIR_ENVVAR "GROFF_TMPDIR"
-// otherwise if this is set, create temporary files there
-#define TMPDIR_ENVVAR "TMPDIR"
-// otherwise, on MS-DOS or MS-Windows ...
-#if defined(__MSDOS__) || defined(_WIN32)
-// if either of these is set, create temporary files there
-// (giving priority to WIN32_TMPDIR_ENVVAR)
-#define WIN32_TMPDIR_ENVVAR "TMP"
-#define MSDOS_TMPDIR_ENVVAR "TEMP"
-#endif
-// otherwise if P_tmpdir is defined, create temporary files there
-#ifdef P_tmpdir
-# define DEFAULT_TMPDIR P_tmpdir
-#else
-// otherwise create temporary files here.
-# define DEFAULT_TMPDIR "/tmp"
-#endif
-// Use this as the prefix for temporary filenames.
-#define TMPFILE_PREFIX_SHORT ""
-#define TMPFILE_PREFIX_LONG "groff"
-
-char *tmpfile_prefix;
-size_t tmpfile_prefix_len;
-int use_short_postfix = 0;
-
-struct temp_init {
- temp_init();
- ~temp_init();
-} _temp_init;
-
-temp_init::temp_init()
-{
- // First, choose a location for creating temporary files...
- const char *tem;
- // using the first match for any of the environment specs in listed order.
- if (
- (tem = getenv(GROFF_TMPDIR_ENVVAR)) == NULL
- && (tem = getenv(TMPDIR_ENVVAR)) == NULL
-#if defined(__MSDOS__) || defined(_WIN32)
- // If we didn't find a match for either of the above
- // (which are preferred, regardless of the host operating system),
- // and we are hosted on either MS-Windows or MS-DOS,
- // then try the Microsoft conventions.
- && (tem = getenv(WIN32_TMPDIR_ENVVAR)) == NULL
- && (tem = getenv(MSDOS_TMPDIR_ENVVAR)) == NULL
-#endif
- )
- // If we didn't find an environment spec fall back to this default.
- tem = DEFAULT_TMPDIR;
- size_t tem_len = strlen(tem);
- const char *tem_end = tem + tem_len - 1;
- int need_slash = strchr(DIR_SEPS, *tem_end) == NULL ? 1 : 0;
- char *tem2 = new char[tem_len + need_slash + 1];
- strcpy(tem2, tem);
- if (need_slash)
- strcat(tem2, "/");
- const char *tem3 = TMPFILE_PREFIX_LONG;
- if (file_name_max(tem2) <= 14) {
- tem3 = TMPFILE_PREFIX_SHORT;
- use_short_postfix = 1;
- }
- tmpfile_prefix_len = tem_len + need_slash + strlen(tem3);
- tmpfile_prefix = new char[tmpfile_prefix_len + 1];
- strcpy(tmpfile_prefix, tem2);
- strcat(tmpfile_prefix, tem3);
- a_delete tem2;
-}
-
-temp_init::~temp_init()
-{
- a_delete tmpfile_prefix;
-}
-
-/*
- * Generate a temporary name template with a postfix
- * immediately after the TMPFILE_PREFIX.
- * It uses the groff preferences for a temporary directory.
- * Note that no file name is either created or opened,
- * only the *template* is returned.
- */
-
-char *xtmptemplate(const char *postfix_long, const char *postfix_short)
-{
- const char *postfix = use_short_postfix ? postfix_short : postfix_long;
- int postlen = 0;
- if (postfix)
- postlen = strlen(postfix);
- char *templ = new char[tmpfile_prefix_len + postlen + 6 + 1];
- strcpy(templ, tmpfile_prefix);
- if (postlen > 0)
- strcat(templ, postfix);
- strcat(templ, "XXXXXX");
- return templ;
-}
-
-// The trick with unlinking the temporary file while it is still in
-// use is not portable, it will fail on MS-DOS and most MS-Windows
-// filesystems. So it cannot be used on non-Posix systems.
-// Instead, we maintain a list of files to be deleted on exit.
-// This should be portable to all platforms.
-
-struct xtmpfile_list {
- char *fname;
- xtmpfile_list *next;
- xtmpfile_list(char *fn) : fname(fn), next(0) {}
-};
-
-xtmpfile_list *xtmpfiles_to_delete = 0;
-
-struct xtmpfile_list_init {
- ~xtmpfile_list_init();
-} _xtmpfile_list_init;
-
-xtmpfile_list_init::~xtmpfile_list_init()
-{
- xtmpfile_list *x = xtmpfiles_to_delete;
- while (x != 0) {
- if (unlink(x->fname) < 0)
- error("cannot unlink `%1': %2", x->fname, strerror(errno));
- xtmpfile_list *tmp = x;
- x = x->next;
- a_delete tmp->fname;
- delete tmp;
- }
-}
-
-static void add_tmp_file(const char *name)
-{
- char *s = new char[strlen(name)+1];
- strcpy(s, name);
- xtmpfile_list *x = new xtmpfile_list(s);
- x->next = xtmpfiles_to_delete;
- xtmpfiles_to_delete = x;
-}
-
-// Open a temporary file and with fatal error on failure.
-
-FILE *xtmpfile(char **namep,
- const char *postfix_long, const char *postfix_short,
- int do_unlink)
-{
- char *templ = xtmptemplate(postfix_long, postfix_short);
- errno = 0;
- int fd = mkstemp(templ);
- if (fd < 0)
- fatal("cannot create temporary file: %1", strerror(errno));
- errno = 0;
- FILE *fp = fdopen(fd, FOPEN_RWB); // many callers of xtmpfile use binary I/O
- if (!fp)
- fatal("fdopen: %1", strerror(errno));
- if (do_unlink)
- add_tmp_file(templ);
- if (namep)
- *namep = templ;
- else
- a_delete templ;
- return fp;
-}
diff --git a/contrib/groff/src/libs/libgroff/tmpname.cpp b/contrib/groff/src/libs/libgroff/tmpname.cpp
deleted file mode 100644
index 8d80f4ba33da..000000000000
--- a/contrib/groff/src/libs/libgroff/tmpname.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
- Written by Werner Lemberg (wl@gnu.org)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-/* This file is heavily based on the function __gen_tempname() in the
- file tempname.c which is part of the fileutils package. */
-
-
-#include "lib.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <time.h>
-
-#include "posix.h"
-#include "nonposix.h"
-
-#ifndef TMP_MAX
-# define TMP_MAX 238328
-#endif
-
-#if HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-
-#ifdef HAVE_GETTIMEOFDAY
-#ifdef NEED_DECLARATION_GETTIMEOFDAY
-extern "C" {
- int gettimeofday(struct timeval *, void *);
-}
-#endif
-#endif
-
-#if HAVE_CC_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-/* Use the widest available unsigned type if uint64_t is not
- available. The algorithm below extracts a number less than 62**6
- (approximately 2**35.725) from uint64_t, so ancient hosts where
- uintmax_t is only 32 bits lose about 3.725 bits of randomness,
- which is better than not having mkstemp at all. */
-#if !defined UINT64_MAX && !defined uint64_t
-# define uint64_t uintmax_t
-#endif
-
-/* These are the characters used in temporary filenames. */
-static const char letters[] =
-"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-int gen_tempname(char *tmpl, int dir)
-{
- static uint64_t value;
-
- size_t len = strlen(tmpl);
- if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX"))
- return -1; /* EINVAL */
-
- /* This is where the Xs start. */
- char *XXXXXX = &tmpl[len - 6];
-
- /* Get some more or less random data. */
-#if HAVE_GETTIMEOFDAY
- timeval tv;
- gettimeofday(&tv, NULL);
- uint64_t random_time_bits = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec;
-#else
- uint64_t random_time_bits = time(NULL);
-#endif
- value += random_time_bits ^ getpid();
-
- for (int count = 0; count < TMP_MAX; value += 7777, ++count) {
- uint64_t v = value;
-
- /* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
- XXXXXX[5] = letters[v % 62];
-
- int fd = dir ? mkdir(tmpl, S_IRUSR | S_IWUSR | S_IXUSR)
- : open(tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-
- if (fd >= 0)
- return fd;
- else if (errno != EEXIST)
- return -1;
- }
-
- /* We got out of the loop because we ran out of combinations to try. */
- return -1; /* EEXIST */
-}
diff --git a/contrib/groff/src/libs/libgroff/unicode.cpp b/contrib/groff/src/libs/libgroff/unicode.cpp
deleted file mode 100644
index 32810dfa80b5..000000000000
--- a/contrib/groff/src/libs/libgroff/unicode.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "cset.h"
-#include "stringclass.h"
-
-#include "unicode.h"
-
-const char *check_unicode_name(const char *u)
-{
- if (*u != 'u')
- return 0;
- const char *p = ++u;
- for (;;) {
- int val = 0;
- const char *start = p;
- for (;;) {
- // only uppercase hex digits allowed
- if (!csxdigit(*p))
- return 0;
- if (csdigit(*p))
- val = val*0x10 + (*p-'0');
- else if (csupper(*p))
- val = val*0x10 + (*p-'A'+10);
- else
- return 0;
- // biggest Unicode value is U+10FFFF
- if (val > 0x10FFFF)
- return 0;
- p++;
- if (*p == '\0' || *p == '_')
- break;
- }
- // surrogates not allowed
- if ((val >= 0xD800 && val <= 0xDBFF) || (val >= 0xDC00 && val <= 0xDFFF))
- return 0;
- if (val > 0xFFFF) {
- if (*start == '0') // no leading zeros allowed if > 0xFFFF
- return 0;
- }
- else if (p - start != 4) // otherwise, check for exactly 4 hex digits
- return 0;
- if (*p == '\0')
- break;
- p++;
- }
- return u;
-}
diff --git a/contrib/groff/src/libs/libgroff/uniglyph.cpp b/contrib/groff/src/libs/libgroff/uniglyph.cpp
deleted file mode 100644
index ab6f531e44a9..000000000000
--- a/contrib/groff/src/libs/libgroff/uniglyph.cpp
+++ /dev/null
@@ -1,504 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct unicode_to_glyph {
- char *value;
-};
-
-declare_ptable(unicode_to_glyph)
-implement_ptable(unicode_to_glyph)
-
-PTABLE(unicode_to_glyph) unicode_to_glyph_table;
-
-struct S {
- const char *key;
- const char *value;
-} unicode_to_glyph_list[] = {
- { "0021", "!" },
-//{ "0022", "\"" },
- { "0022", "dq" },
-//{ "0023", "#" },
- { "0023", "sh" },
-//{ "0024", "$" },
- { "0024", "Do" },
- { "0025", "%" },
- { "0026", "&" },
- { "0027", "aq" },
- { "0028", "(" },
- { "0029", ")" },
- { "002A", "*" },
-//{ "002B", "+" },
- { "002B", "pl" },
- { "002C", "," },
- { "002E", "." },
-//{ "002F", "/" },
- { "002F", "sl" },
- { "0030", "0" },
- { "0031", "1" },
- { "0032", "2" },
- { "0033", "3" },
- { "0034", "4" },
- { "0035", "5" },
- { "0036", "6" },
- { "0037", "7" },
- { "0038", "8" },
- { "0039", "9" },
- { "003A", ":" },
- { "003B", ";" },
- { "003C", "<" },
-//{ "003D", "=" },
- { "003D", "eq" },
- { "003D_0338", "!=" },
- { "003E", ">" },
- { "003F", "?" },
-//{ "0040", "@" },
- { "0040", "at" },
- { "0041", "A" },
- { "0041_0300", "`A" },
- { "0041_0301", "'A" },
- { "0041_0302", "^A" },
- { "0041_0303", "~A" },
- { "0041_0308", ":A" },
- { "0041_030A", "oA" },
- { "0042", "B" },
- { "0043", "C" },
- { "0043_0301", "'C" },
- { "0043_0327", ",C" },
- { "0044", "D" },
- { "0045", "E" },
- { "0045_0300", "`E" },
- { "0045_0301", "'E" },
- { "0045_0302", "^E" },
- { "0045_0308", ":E" },
- { "0046", "F" },
- { "0047", "G" },
- { "0048", "H" },
- { "0049", "I" },
- { "0049_0300", "`I" },
- { "0049_0301", "'I" },
- { "0049_0302", "^I" },
- { "0049_0308", ":I" },
- { "004A", "J" },
- { "004B", "K" },
- { "004C", "L" },
- { "004D", "M" },
- { "004E", "N" },
- { "004E_0303", "~N" },
- { "004F", "O" },
- { "004F_0300", "`O" },
- { "004F_0301", "'O" },
- { "004F_0302", "^O" },
- { "004F_0303", "~O" },
- { "004F_0308", ":O" },
- { "0050", "P" },
- { "0051", "Q" },
- { "0052", "R" },
- { "0053", "S" },
- { "0053_030C", "vS" },
- { "0054", "T" },
- { "0055", "U" },
- { "0055_0300", "`U" },
- { "0055_0301", "'U" },
- { "0055_0302", "^U" },
- { "0055_0308", ":U" },
- { "0056", "V" },
- { "0057", "W" },
- { "0058", "X" },
- { "0059", "Y" },
- { "0059_0301", "'Y" },
- { "0059_0308", ":Y" },
- { "005A", "Z" },
- { "005A_030C", "vZ" },
- { "005B", "lB" },
-//{ "005B", "[" },
- { "005C", "rs" },
-//{ "005C", "\\" },
- { "005D", "rB" },
-//{ "005D", "]" },
-//{ "005E", "^" },
-//{ "005E", "a^" },
- { "005E", "ha" },
-//{ "005F", "_" },
-//{ "005F", "ru" },
- { "005F", "ul" },
- { "0060", "ga" },
-//{ "0060", "\\`" },
- { "0061", "a" },
- { "0061_0300", "`a" },
- { "0061_0301", "'a" },
- { "0061_0302", "^a" },
- { "0061_0303", "~a" },
- { "0061_0308", ":a" },
- { "0061_030A", "oa" },
- { "0062", "b" },
- { "0063", "c" },
- { "0063_0301", "'c" },
- { "0063_0327", ",c" },
- { "0064", "d" },
- { "0065", "e" },
- { "0065_0300", "`e" },
- { "0065_0301", "'e" },
- { "0065_0302", "^e" },
- { "0065_0308", ":e" },
- { "0066", "f" },
- { "0066_0066", "ff" },
- { "0066_0066_0069", "Fi" },
- { "0066_0066_006C", "Fl" },
- { "0066_0069", "fi" },
- { "0066_006C", "fl" },
- { "0067", "g" },
- { "0068", "h" },
- { "0069", "i" },
- { "0069_0300", "`i" },
- { "0069_0301", "'i" },
- { "0069_0302", "^i" },
- { "0069_0308", ":i" },
- { "006A", "j" },
- { "006B", "k" },
- { "006C", "l" },
- { "006D", "m" },
- { "006E", "n" },
- { "006E_0303", "~n" },
- { "006F", "o" },
- { "006F_0300", "`o" },
- { "006F_0301", "'o" },
- { "006F_0302", "^o" },
- { "006F_0303", "~o" },
- { "006F_0308", ":o" },
- { "0070", "p" },
- { "0071", "q" },
- { "0072", "r" },
- { "0073", "s" },
- { "0073_030C", "vs" },
- { "0074", "t" },
- { "0075", "u" },
- { "0075_0300", "`u" },
- { "0075_0301", "'u" },
- { "0075_0302", "^u" },
- { "0075_0308", ":u" },
- { "0076", "v" },
- { "0077", "w" },
- { "0078", "x" },
- { "0079", "y" },
- { "0079_0301", "'y" },
- { "0079_0308", ":y" },
- { "007A", "z" },
- { "007A_030C", "vz" },
- { "007B", "lC" },
-//{ "007B", "{" },
- { "007C", "ba" },
-//{ "007C", "or" },
-//{ "007C", "|" },
- { "007D", "rC" },
-//{ "007D", "}" },
-//{ "007E", "a~" },
- { "007E", "ti" },
-//{ "007E", "~" },
- { "00A1", "r!" },
- { "00A2", "ct" },
- { "00A3", "Po" },
- { "00A4", "Cs" },
- { "00A5", "Ye" },
- { "00A6", "bb" },
- { "00A7", "sc" },
- { "00A8", "ad" },
- { "00A9", "co" },
- { "00AA", "Of" },
- { "00AB", "Fo" },
- { "00AC", "no" },
-//{ "00AC", "tno" },
- { "00AD", "shc" },
- { "00AE", "rg" },
- { "00AF", "a-" },
- { "00B0", "de" },
- { "00B1", "+-" },
-//{ "00B1", "t+-" },
- { "00B2", "S2" },
- { "00B3", "S3" },
- { "00B4", "aa" },
-//{ "00B4", "\\'" },
- { "00B5", "mc" },
- { "00B6", "ps" },
- { "00B7", "pc" },
- { "00B8", "ac" },
- { "00B9", "S1" },
- { "00BA", "Om" },
- { "00BB", "Fc" },
- { "00BC", "14" },
- { "00BD", "12" },
- { "00BE", "34" },
- { "00BF", "r?" },
- { "00C6", "AE" },
- { "00D0", "-D" },
- { "00D7", "mu" },
-//{ "00D7", "tmu" },
- { "00D8", "/O" },
- { "00DE", "TP" },
- { "00DF", "ss" },
- { "00E6", "ae" },
- { "00F0", "Sd" },
- { "00F7", "di" },
-//{ "00F7", "tdi" },
- { "00F8", "/o" },
- { "00FE", "Tp" },
- { "0131", ".i" },
- { "0132", "IJ" },
- { "0133", "ij" },
- { "0141", "/L" },
- { "0142", "/l" },
- { "0152", "OE" },
- { "0153", "oe" },
- { "0192", "Fn" },
- { "02C7", "ah" },
- { "02D8", "ab" },
- { "02D9", "a." },
- { "02DA", "ao" },
- { "02DB", "ho" },
- { "02DD", "a\"" },
- { "0391", "*A" },
- { "0392", "*B" },
- { "0393", "*G" },
- { "0394", "*D" },
- { "0395", "*E" },
- { "0396", "*Z" },
- { "0397", "*Y" },
- { "0398", "*H" },
- { "0399", "*I" },
- { "039A", "*K" },
- { "039B", "*L" },
- { "039C", "*M" },
- { "039D", "*N" },
- { "039E", "*C" },
- { "039F", "*O" },
- { "03A0", "*P" },
- { "03A1", "*R" },
- { "03A3", "*S" },
- { "03A4", "*T" },
- { "03A5", "*U" },
- { "03A6", "*F" },
- { "03A7", "*X" },
- { "03A8", "*Q" },
- { "03A9", "*W" },
- { "03B1", "*a" },
- { "03B2", "*b" },
- { "03B3", "*g" },
- { "03B4", "*d" },
- { "03B5", "*e" },
- { "03B6", "*z" },
- { "03B7", "*y" },
- { "03B8", "*h" },
- { "03B9", "*i" },
- { "03BA", "*k" },
- { "03BB", "*l" },
- { "03BC", "*m" },
- { "03BD", "*n" },
- { "03BE", "*c" },
- { "03BF", "*o" },
- { "03C0", "*p" },
- { "03C1", "*r" },
- { "03C2", "ts" },
- { "03C3", "*s" },
- { "03C4", "*t" },
- { "03C5", "*u" },
- { "03C6", "*f" },
- { "03C7", "*x" },
- { "03C8", "*q" },
- { "03C9", "*w" },
- { "03D1", "+h" },
- { "03D5", "+f" },
- { "03D6", "+p" },
- { "03F5", "+e" },
-//{ "2010", "-" },
- { "2010", "hy" },
- { "2013", "en" },
- { "2014", "em" },
-//{ "2018", "`" },
- { "2018", "oq" },
-//{ "2019", "'" },
- { "2019", "cq" },
- { "201A", "bq" },
- { "201C", "lq" },
- { "201D", "rq" },
- { "201E", "Bq" },
- { "2020", "dg" },
- { "2021", "dd" },
- { "2022", "bu" },
- { "2030", "%0" },
- { "2032", "fm" },
- { "2033", "sd" },
- { "2039", "fo" },
- { "203A", "fc" },
- { "203E", "rn" },
- { "2044", "f/" },
- { "20AC", "Eu" },
-//{ "20AC", "eu" },
- { "210F", "-h" },
-//{ "210F", "hbar" },
- { "2111", "Im" },
- { "2118", "wp" },
- { "211C", "Re" },
- { "2122", "tm" },
- { "2135", "Ah" },
- { "215B", "18" },
- { "215C", "38" },
- { "215D", "58" },
- { "215E", "78" },
- { "2190", "<-" },
- { "2191", "ua" },
- { "2192", "->" },
- { "2193", "da" },
- { "2194", "<>" },
- { "2195", "va" },
- { "21B5", "CR" },
- { "21D0", "lA" },
- { "21D1", "uA" },
- { "21D2", "rA" },
- { "21D3", "dA" },
- { "21D4", "hA" },
- { "21D5", "vA" },
- { "2200", "fa" },
- { "2202", "pd" },
- { "2203", "te" },
- { "2205", "es" },
- { "2207", "gr" },
- { "2208", "mo" },
- { "2208_0338", "nm" },
- { "220B", "st" },
- { "220F", "product" },
- { "2210", "coproduct" },
- { "2211", "sum" },
- { "2212", "mi" },
-//{ "2212", "\\-" },
- { "2213", "-+" },
- { "2217", "**" },
- { "221A", "sr" },
- { "221D", "pt" },
- { "221E", "if" },
- { "2220", "/_" },
- { "2227", "AN" },
- { "2228", "OR" },
- { "2229", "ca" },
- { "222A", "cu" },
- { "222B", "is" },
-//{ "222B", "integral" },
-//{ "2234", "3d" },
- { "2234", "tf" },
- { "223C", "ap" },
- { "2243", "|=" },
- { "2245", "=~" },
-//{ "2248", "~=" },
- { "2248", "~~" },
- { "2261", "==" },
- { "2261_0338", "ne" },
- { "2264", "<=" },
- { "2265", ">=" },
- { "226A", ">>" },
- { "226B", "<<" },
- { "2282", "sb" },
- { "2282_0338", "nb" },
- { "2283", "sp" },
- { "2283_0338", "nc" },
- { "2286", "ib" },
- { "2287", "ip" },
- { "2295", "c+" },
- { "2297", "c*" },
- { "22A5", "pp" },
- { "22C5", "md" },
- { "2308", "lc" },
- { "2309", "rc" },
- { "230A", "lf" },
- { "230B", "rf" },
- { "239B", "parenlefttp" },
- { "239C", "parenleftex" },
- { "239D", "parenleftbt" },
- { "239E", "parenrighttp" },
- { "239F", "parenrightex" },
- { "23A0", "parenrightbt" },
-//{ "23A1", "bracketlefttp" },
- { "23A2", "bracketleftex" },
-//{ "23A3", "bracketleftbt" },
-//{ "23A4", "bracketrighttp" },
- { "23A5", "bracketrightex" },
-//{ "23A6", "bracketrightbt" },
- { "23A7", "lt" },
-//{ "23A7", "bracelefttp" },
- { "23A8", "lk" },
-//{ "23A8", "braceleftmid" },
- { "23A9", "lb" },
-//{ "23A9", "braceleftbt" },
- { "23AA", "bv" },
-//{ "23AA", "braceex" },
-//{ "23AA", "braceleftex" },
-//{ "23AA", "bracerightex" },
- { "23AB", "rt" },
-//{ "23AB", "bracerighttp" },
- { "23AC", "rk" },
-//{ "23AC", "bracerightmid" },
- { "23AD", "rb" },
-//{ "23AD", "bracerightbt" },
- { "23AF", "an" },
- { "2502", "br" },
- { "251D", "rk" },
- { "2525", "lk" },
- { "256D", "lt" },
- { "256E", "rt" },
- { "256F", "rb" },
- { "2570", "lb" },
- { "25A1", "sq" },
- { "25CA", "lz" },
- { "25CB", "ci" },
- { "261C", "lh" },
- { "261E", "rh" },
- { "2660", "SP" },
- { "2663", "CL" },
- { "2665", "HE" },
- { "2666", "DI" },
- { "2713", "OK" },
- { "27E8", "la" },
- { "27E9", "ra" },
-};
-
-// global constructor
-static struct unicode_to_glyph_init {
- unicode_to_glyph_init();
-} _unicode_to_glyph_init;
-
-unicode_to_glyph_init::unicode_to_glyph_init() {
- for (unsigned int i = 0;
- i < sizeof(unicode_to_glyph_list)/sizeof(unicode_to_glyph_list[0]);
- i++) {
- unicode_to_glyph *utg = new unicode_to_glyph[1];
- utg->value = (char *)unicode_to_glyph_list[i].value;
- unicode_to_glyph_table.define(unicode_to_glyph_list[i].key, utg);
- }
-}
-
-const char *unicode_to_glyph_name(const char *s)
-{
- unicode_to_glyph *result = unicode_to_glyph_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/libs/libgroff/uniuni.cpp b/contrib/groff/src/libs/libgroff/uniuni.cpp
deleted file mode 100644
index 61bc8334ccf1..000000000000
--- a/contrib/groff/src/libs/libgroff/uniuni.cpp
+++ /dev/null
@@ -1,1994 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-// This code has been algorithmically derived from the file
-// UnicodeData-3.2.0.txt, available from unicode.org.
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct unicode_decompose {
- char *value;
-};
-
-declare_ptable(unicode_decompose)
-implement_ptable(unicode_decompose)
-
-PTABLE(unicode_decompose) unicode_decompose_table;
-
-// the first digit in the composite string gives the number of composites
-
-struct S {
- const char *key;
- const char *value;
-} unicode_decompose_list[] = {
- { "00C0", "20041_0300" },
- { "00C1", "20041_0301" },
- { "00C2", "20041_0302" },
- { "00C3", "20041_0303" },
- { "00C4", "20041_0308" },
- { "00C5", "20041_030A" },
- { "00C7", "20043_0327" },
- { "00C8", "20045_0300" },
- { "00C9", "20045_0301" },
- { "00CA", "20045_0302" },
- { "00CB", "20045_0308" },
- { "00CC", "20049_0300" },
- { "00CD", "20049_0301" },
- { "00CE", "20049_0302" },
- { "00CF", "20049_0308" },
- { "00D1", "2004E_0303" },
- { "00D2", "2004F_0300" },
- { "00D3", "2004F_0301" },
- { "00D4", "2004F_0302" },
- { "00D5", "2004F_0303" },
- { "00D6", "2004F_0308" },
- { "00D9", "20055_0300" },
- { "00DA", "20055_0301" },
- { "00DB", "20055_0302" },
- { "00DC", "20055_0308" },
- { "00DD", "20059_0301" },
- { "00E0", "20061_0300" },
- { "00E1", "20061_0301" },
- { "00E2", "20061_0302" },
- { "00E3", "20061_0303" },
- { "00E4", "20061_0308" },
- { "00E5", "20061_030A" },
- { "00E7", "20063_0327" },
- { "00E8", "20065_0300" },
- { "00E9", "20065_0301" },
- { "00EA", "20065_0302" },
- { "00EB", "20065_0308" },
- { "00EC", "20069_0300" },
- { "00ED", "20069_0301" },
- { "00EE", "20069_0302" },
- { "00EF", "20069_0308" },
- { "00F1", "2006E_0303" },
- { "00F2", "2006F_0300" },
- { "00F3", "2006F_0301" },
- { "00F4", "2006F_0302" },
- { "00F5", "2006F_0303" },
- { "00F6", "2006F_0308" },
- { "00F9", "20075_0300" },
- { "00FA", "20075_0301" },
- { "00FB", "20075_0302" },
- { "00FC", "20075_0308" },
- { "00FD", "20079_0301" },
- { "00FF", "20079_0308" },
- { "0100", "20041_0304" },
- { "0101", "20061_0304" },
- { "0102", "20041_0306" },
- { "0103", "20061_0306" },
- { "0104", "20041_0328" },
- { "0105", "20061_0328" },
- { "0106", "20043_0301" },
- { "0107", "20063_0301" },
- { "0108", "20043_0302" },
- { "0109", "20063_0302" },
- { "010A", "20043_0307" },
- { "010B", "20063_0307" },
- { "010C", "20043_030C" },
- { "010D", "20063_030C" },
- { "010E", "20044_030C" },
- { "010F", "20064_030C" },
- { "0112", "20045_0304" },
- { "0113", "20065_0304" },
- { "0114", "20045_0306" },
- { "0115", "20065_0306" },
- { "0116", "20045_0307" },
- { "0117", "20065_0307" },
- { "0118", "20045_0328" },
- { "0119", "20065_0328" },
- { "011A", "20045_030C" },
- { "011B", "20065_030C" },
- { "011C", "20047_0302" },
- { "011D", "20067_0302" },
- { "011E", "20047_0306" },
- { "011F", "20067_0306" },
- { "0120", "20047_0307" },
- { "0121", "20067_0307" },
- { "0122", "20047_0327" },
- { "0123", "20067_0327" },
- { "0124", "20048_0302" },
- { "0125", "20068_0302" },
- { "0128", "20049_0303" },
- { "0129", "20069_0303" },
- { "012A", "20049_0304" },
- { "012B", "20069_0304" },
- { "012C", "20049_0306" },
- { "012D", "20069_0306" },
- { "012E", "20049_0328" },
- { "012F", "20069_0328" },
- { "0130", "20049_0307" },
- { "0134", "2004A_0302" },
- { "0135", "2006A_0302" },
- { "0136", "2004B_0327" },
- { "0137", "2006B_0327" },
- { "0139", "2004C_0301" },
- { "013A", "2006C_0301" },
- { "013B", "2004C_0327" },
- { "013C", "2006C_0327" },
- { "013D", "2004C_030C" },
- { "013E", "2006C_030C" },
- { "0143", "2004E_0301" },
- { "0144", "2006E_0301" },
- { "0145", "2004E_0327" },
- { "0146", "2006E_0327" },
- { "0147", "2004E_030C" },
- { "0148", "2006E_030C" },
- { "014C", "2004F_0304" },
- { "014D", "2006F_0304" },
- { "014E", "2004F_0306" },
- { "014F", "2006F_0306" },
- { "0150", "2004F_030B" },
- { "0151", "2006F_030B" },
- { "0154", "20052_0301" },
- { "0155", "20072_0301" },
- { "0156", "20052_0327" },
- { "0157", "20072_0327" },
- { "0158", "20052_030C" },
- { "0159", "20072_030C" },
- { "015A", "20053_0301" },
- { "015B", "20073_0301" },
- { "015C", "20053_0302" },
- { "015D", "20073_0302" },
- { "015E", "20053_0327" },
- { "015F", "20073_0327" },
- { "0160", "20053_030C" },
- { "0161", "20073_030C" },
- { "0162", "20054_0327" },
- { "0163", "20074_0327" },
- { "0164", "20054_030C" },
- { "0165", "20074_030C" },
- { "0168", "20055_0303" },
- { "0169", "20075_0303" },
- { "016A", "20055_0304" },
- { "016B", "20075_0304" },
- { "016C", "20055_0306" },
- { "016D", "20075_0306" },
- { "016E", "20055_030A" },
- { "016F", "20075_030A" },
- { "0170", "20055_030B" },
- { "0171", "20075_030B" },
- { "0172", "20055_0328" },
- { "0173", "20075_0328" },
- { "0174", "20057_0302" },
- { "0175", "20077_0302" },
- { "0176", "20059_0302" },
- { "0177", "20079_0302" },
- { "0178", "20059_0308" },
- { "0179", "2005A_0301" },
- { "017A", "2007A_0301" },
- { "017B", "2005A_0307" },
- { "017C", "2007A_0307" },
- { "017D", "2005A_030C" },
- { "017E", "2007A_030C" },
- { "01A0", "2004F_031B" },
- { "01A1", "2006F_031B" },
- { "01AF", "20055_031B" },
- { "01B0", "20075_031B" },
- { "01CD", "20041_030C" },
- { "01CE", "20061_030C" },
- { "01CF", "20049_030C" },
- { "01D0", "20069_030C" },
- { "01D1", "2004F_030C" },
- { "01D2", "2006F_030C" },
- { "01D3", "20055_030C" },
- { "01D4", "20075_030C" },
- { "01D5", "30055_0308_0304" },
- { "01D6", "30075_0308_0304" },
- { "01D7", "30055_0308_0301" },
- { "01D8", "30075_0308_0301" },
- { "01D9", "30055_0308_030C" },
- { "01DA", "30075_0308_030C" },
- { "01DB", "30055_0308_0300" },
- { "01DC", "30075_0308_0300" },
- { "01DE", "30041_0308_0304" },
- { "01DF", "30061_0308_0304" },
- { "01E0", "30041_0307_0304" },
- { "01E1", "30061_0307_0304" },
- { "01E2", "200C6_0304" },
- { "01E3", "200E6_0304" },
- { "01E6", "20047_030C" },
- { "01E7", "20067_030C" },
- { "01E8", "2004B_030C" },
- { "01E9", "2006B_030C" },
- { "01EA", "2004F_0328" },
- { "01EB", "2006F_0328" },
- { "01EC", "3004F_0328_0304" },
- { "01ED", "3006F_0328_0304" },
- { "01EE", "201B7_030C" },
- { "01EF", "20292_030C" },
- { "01F0", "2006A_030C" },
- { "01F4", "20047_0301" },
- { "01F5", "20067_0301" },
- { "01F8", "2004E_0300" },
- { "01F9", "2006E_0300" },
- { "01FA", "30041_030A_0301" },
- { "01FB", "30061_030A_0301" },
- { "01FC", "200C6_0301" },
- { "01FD", "200E6_0301" },
- { "01FE", "200D8_0301" },
- { "01FF", "200F8_0301" },
- { "0200", "20041_030F" },
- { "0201", "20061_030F" },
- { "0202", "20041_0311" },
- { "0203", "20061_0311" },
- { "0204", "20045_030F" },
- { "0205", "20065_030F" },
- { "0206", "20045_0311" },
- { "0207", "20065_0311" },
- { "0208", "20049_030F" },
- { "0209", "20069_030F" },
- { "020A", "20049_0311" },
- { "020B", "20069_0311" },
- { "020C", "2004F_030F" },
- { "020D", "2006F_030F" },
- { "020E", "2004F_0311" },
- { "020F", "2006F_0311" },
- { "0210", "20052_030F" },
- { "0211", "20072_030F" },
- { "0212", "20052_0311" },
- { "0213", "20072_0311" },
- { "0214", "20055_030F" },
- { "0215", "20075_030F" },
- { "0216", "20055_0311" },
- { "0217", "20075_0311" },
- { "0218", "20053_0326" },
- { "0219", "20073_0326" },
- { "021A", "20054_0326" },
- { "021B", "20074_0326" },
- { "021E", "20048_030C" },
- { "021F", "20068_030C" },
- { "0226", "20041_0307" },
- { "0227", "20061_0307" },
- { "0228", "20045_0327" },
- { "0229", "20065_0327" },
- { "022A", "3004F_0308_0304" },
- { "022B", "3006F_0308_0304" },
- { "022C", "3004F_0303_0304" },
- { "022D", "3006F_0303_0304" },
- { "022E", "2004F_0307" },
- { "022F", "2006F_0307" },
- { "0230", "3004F_0307_0304" },
- { "0231", "3006F_0307_0304" },
- { "0232", "20059_0304" },
- { "0233", "20079_0304" },
- { "0340", "10300" },
- { "0341", "10301" },
- { "0343", "10313" },
- { "0344", "20308_0301" },
- { "0374", "102B9" },
- { "037E", "1003B" },
- { "0385", "200A8_0301" },
- { "0386", "20391_0301" },
- { "0387", "100B7" },
- { "0388", "20395_0301" },
- { "0389", "20397_0301" },
- { "038A", "20399_0301" },
- { "038C", "2039F_0301" },
- { "038E", "203A5_0301" },
- { "038F", "203A9_0301" },
- { "0390", "303B9_0308_0301" },
- { "03AA", "20399_0308" },
- { "03AB", "203A5_0308" },
- { "03AC", "203B1_0301" },
- { "03AD", "203B5_0301" },
- { "03AE", "203B7_0301" },
- { "03AF", "203B9_0301" },
- { "03B0", "303C5_0308_0301" },
- { "03CA", "203B9_0308" },
- { "03CB", "203C5_0308" },
- { "03CC", "203BF_0301" },
- { "03CD", "203C5_0301" },
- { "03CE", "203C9_0301" },
- { "03D3", "203D2_0301" },
- { "03D4", "203D2_0308" },
- { "0400", "20415_0300" },
- { "0401", "20415_0308" },
- { "0403", "20413_0301" },
- { "0407", "20406_0308" },
- { "040C", "2041A_0301" },
- { "040D", "20418_0300" },
- { "040E", "20423_0306" },
- { "0419", "20418_0306" },
- { "0439", "20438_0306" },
- { "0450", "20435_0300" },
- { "0451", "20435_0308" },
- { "0453", "20433_0301" },
- { "0457", "20456_0308" },
- { "045C", "2043A_0301" },
- { "045D", "20438_0300" },
- { "045E", "20443_0306" },
- { "0476", "20474_030F" },
- { "0477", "20475_030F" },
- { "04C1", "20416_0306" },
- { "04C2", "20436_0306" },
- { "04D0", "20410_0306" },
- { "04D1", "20430_0306" },
- { "04D2", "20410_0308" },
- { "04D3", "20430_0308" },
- { "04D6", "20415_0306" },
- { "04D7", "20435_0306" },
- { "04DA", "204D8_0308" },
- { "04DB", "204D9_0308" },
- { "04DC", "20416_0308" },
- { "04DD", "20436_0308" },
- { "04DE", "20417_0308" },
- { "04DF", "20437_0308" },
- { "04E2", "20418_0304" },
- { "04E3", "20438_0304" },
- { "04E4", "20418_0308" },
- { "04E5", "20438_0308" },
- { "04E6", "2041E_0308" },
- { "04E7", "2043E_0308" },
- { "04EA", "204E8_0308" },
- { "04EB", "204E9_0308" },
- { "04EC", "2042D_0308" },
- { "04ED", "2044D_0308" },
- { "04EE", "20423_0304" },
- { "04EF", "20443_0304" },
- { "04F0", "20423_0308" },
- { "04F1", "20443_0308" },
- { "04F2", "20423_030B" },
- { "04F3", "20443_030B" },
- { "04F4", "20427_0308" },
- { "04F5", "20447_0308" },
- { "04F8", "2042B_0308" },
- { "04F9", "2044B_0308" },
- { "0622", "20627_0653" },
- { "0623", "20627_0654" },
- { "0624", "20648_0654" },
- { "0625", "20627_0655" },
- { "0626", "2064A_0654" },
- { "06C0", "206D5_0654" },
- { "06C2", "206C1_0654" },
- { "06D3", "206D2_0654" },
- { "0929", "20928_093C" },
- { "0931", "20930_093C" },
- { "0934", "20933_093C" },
- { "0958", "20915_093C" },
- { "0959", "20916_093C" },
- { "095A", "20917_093C" },
- { "095B", "2091C_093C" },
- { "095C", "20921_093C" },
- { "095D", "20922_093C" },
- { "095E", "2092B_093C" },
- { "095F", "2092F_093C" },
- { "09CB", "209C7_09BE" },
- { "09CC", "209C7_09D7" },
- { "09DC", "209A1_09BC" },
- { "09DD", "209A2_09BC" },
- { "09DF", "209AF_09BC" },
- { "0A33", "20A32_0A3C" },
- { "0A36", "20A38_0A3C" },
- { "0A59", "20A16_0A3C" },
- { "0A5A", "20A17_0A3C" },
- { "0A5B", "20A1C_0A3C" },
- { "0A5E", "20A2B_0A3C" },
- { "0B48", "20B47_0B56" },
- { "0B4B", "20B47_0B3E" },
- { "0B4C", "20B47_0B57" },
- { "0B5C", "20B21_0B3C" },
- { "0B5D", "20B22_0B3C" },
- { "0B94", "20B92_0BD7" },
- { "0BCA", "20BC6_0BBE" },
- { "0BCB", "20BC7_0BBE" },
- { "0BCC", "20BC6_0BD7" },
- { "0C48", "20C46_0C56" },
- { "0CC0", "20CBF_0CD5" },
- { "0CC7", "20CC6_0CD5" },
- { "0CC8", "20CC6_0CD6" },
- { "0CCA", "20CC6_0CC2" },
- { "0CCB", "30CC6_0CC2_0CD5" },
- { "0D4A", "20D46_0D3E" },
- { "0D4B", "20D47_0D3E" },
- { "0D4C", "20D46_0D57" },
- { "0DDA", "20DD9_0DCA" },
- { "0DDC", "20DD9_0DCF" },
- { "0DDD", "30DD9_0DCF_0DCA" },
- { "0DDE", "20DD9_0DDF" },
- { "0F43", "20F42_0FB7" },
- { "0F4D", "20F4C_0FB7" },
- { "0F52", "20F51_0FB7" },
- { "0F57", "20F56_0FB7" },
- { "0F5C", "20F5B_0FB7" },
- { "0F69", "20F40_0FB5" },
- { "0F73", "20F71_0F72" },
- { "0F75", "20F71_0F74" },
- { "0F76", "20FB2_0F80" },
- { "0F78", "20FB3_0F80" },
- { "0F81", "20F71_0F80" },
- { "0F93", "20F92_0FB7" },
- { "0F9D", "20F9C_0FB7" },
- { "0FA2", "20FA1_0FB7" },
- { "0FA7", "20FA6_0FB7" },
- { "0FAC", "20FAB_0FB7" },
- { "0FB9", "20F90_0FB5" },
- { "1026", "21025_102E" },
- { "1E00", "20041_0325" },
- { "1E01", "20061_0325" },
- { "1E02", "20042_0307" },
- { "1E03", "20062_0307" },
- { "1E04", "20042_0323" },
- { "1E05", "20062_0323" },
- { "1E06", "20042_0331" },
- { "1E07", "20062_0331" },
- { "1E08", "30043_0327_0301" },
- { "1E09", "30063_0327_0301" },
- { "1E0A", "20044_0307" },
- { "1E0B", "20064_0307" },
- { "1E0C", "20044_0323" },
- { "1E0D", "20064_0323" },
- { "1E0E", "20044_0331" },
- { "1E0F", "20064_0331" },
- { "1E10", "20044_0327" },
- { "1E11", "20064_0327" },
- { "1E12", "20044_032D" },
- { "1E13", "20064_032D" },
- { "1E14", "30045_0304_0300" },
- { "1E15", "30065_0304_0300" },
- { "1E16", "30045_0304_0301" },
- { "1E17", "30065_0304_0301" },
- { "1E18", "20045_032D" },
- { "1E19", "20065_032D" },
- { "1E1A", "20045_0330" },
- { "1E1B", "20065_0330" },
- { "1E1C", "30045_0327_0306" },
- { "1E1D", "30065_0327_0306" },
- { "1E1E", "20046_0307" },
- { "1E1F", "20066_0307" },
- { "1E20", "20047_0304" },
- { "1E21", "20067_0304" },
- { "1E22", "20048_0307" },
- { "1E23", "20068_0307" },
- { "1E24", "20048_0323" },
- { "1E25", "20068_0323" },
- { "1E26", "20048_0308" },
- { "1E27", "20068_0308" },
- { "1E28", "20048_0327" },
- { "1E29", "20068_0327" },
- { "1E2A", "20048_032E" },
- { "1E2B", "20068_032E" },
- { "1E2C", "20049_0330" },
- { "1E2D", "20069_0330" },
- { "1E2E", "30049_0308_0301" },
- { "1E2F", "30069_0308_0301" },
- { "1E30", "2004B_0301" },
- { "1E31", "2006B_0301" },
- { "1E32", "2004B_0323" },
- { "1E33", "2006B_0323" },
- { "1E34", "2004B_0331" },
- { "1E35", "2006B_0331" },
- { "1E36", "2004C_0323" },
- { "1E37", "2006C_0323" },
- { "1E38", "3004C_0323_0304" },
- { "1E39", "3006C_0323_0304" },
- { "1E3A", "2004C_0331" },
- { "1E3B", "2006C_0331" },
- { "1E3C", "2004C_032D" },
- { "1E3D", "2006C_032D" },
- { "1E3E", "2004D_0301" },
- { "1E3F", "2006D_0301" },
- { "1E40", "2004D_0307" },
- { "1E41", "2006D_0307" },
- { "1E42", "2004D_0323" },
- { "1E43", "2006D_0323" },
- { "1E44", "2004E_0307" },
- { "1E45", "2006E_0307" },
- { "1E46", "2004E_0323" },
- { "1E47", "2006E_0323" },
- { "1E48", "2004E_0331" },
- { "1E49", "2006E_0331" },
- { "1E4A", "2004E_032D" },
- { "1E4B", "2006E_032D" },
- { "1E4C", "3004F_0303_0301" },
- { "1E4D", "3006F_0303_0301" },
- { "1E4E", "3004F_0303_0308" },
- { "1E4F", "3006F_0303_0308" },
- { "1E50", "3004F_0304_0300" },
- { "1E51", "3006F_0304_0300" },
- { "1E52", "3004F_0304_0301" },
- { "1E53", "3006F_0304_0301" },
- { "1E54", "20050_0301" },
- { "1E55", "20070_0301" },
- { "1E56", "20050_0307" },
- { "1E57", "20070_0307" },
- { "1E58", "20052_0307" },
- { "1E59", "20072_0307" },
- { "1E5A", "20052_0323" },
- { "1E5B", "20072_0323" },
- { "1E5C", "30052_0323_0304" },
- { "1E5D", "30072_0323_0304" },
- { "1E5E", "20052_0331" },
- { "1E5F", "20072_0331" },
- { "1E60", "20053_0307" },
- { "1E61", "20073_0307" },
- { "1E62", "20053_0323" },
- { "1E63", "20073_0323" },
- { "1E64", "30053_0301_0307" },
- { "1E65", "30073_0301_0307" },
- { "1E66", "30053_030C_0307" },
- { "1E67", "30073_030C_0307" },
- { "1E68", "30053_0323_0307" },
- { "1E69", "30073_0323_0307" },
- { "1E6A", "20054_0307" },
- { "1E6B", "20074_0307" },
- { "1E6C", "20054_0323" },
- { "1E6D", "20074_0323" },
- { "1E6E", "20054_0331" },
- { "1E6F", "20074_0331" },
- { "1E70", "20054_032D" },
- { "1E71", "20074_032D" },
- { "1E72", "20055_0324" },
- { "1E73", "20075_0324" },
- { "1E74", "20055_0330" },
- { "1E75", "20075_0330" },
- { "1E76", "20055_032D" },
- { "1E77", "20075_032D" },
- { "1E78", "30055_0303_0301" },
- { "1E79", "30075_0303_0301" },
- { "1E7A", "30055_0304_0308" },
- { "1E7B", "30075_0304_0308" },
- { "1E7C", "20056_0303" },
- { "1E7D", "20076_0303" },
- { "1E7E", "20056_0323" },
- { "1E7F", "20076_0323" },
- { "1E80", "20057_0300" },
- { "1E81", "20077_0300" },
- { "1E82", "20057_0301" },
- { "1E83", "20077_0301" },
- { "1E84", "20057_0308" },
- { "1E85", "20077_0308" },
- { "1E86", "20057_0307" },
- { "1E87", "20077_0307" },
- { "1E88", "20057_0323" },
- { "1E89", "20077_0323" },
- { "1E8A", "20058_0307" },
- { "1E8B", "20078_0307" },
- { "1E8C", "20058_0308" },
- { "1E8D", "20078_0308" },
- { "1E8E", "20059_0307" },
- { "1E8F", "20079_0307" },
- { "1E90", "2005A_0302" },
- { "1E91", "2007A_0302" },
- { "1E92", "2005A_0323" },
- { "1E93", "2007A_0323" },
- { "1E94", "2005A_0331" },
- { "1E95", "2007A_0331" },
- { "1E96", "20068_0331" },
- { "1E97", "20074_0308" },
- { "1E98", "20077_030A" },
- { "1E99", "20079_030A" },
- { "1E9B", "2017F_0307" },
- { "1EA0", "20041_0323" },
- { "1EA1", "20061_0323" },
- { "1EA2", "20041_0309" },
- { "1EA3", "20061_0309" },
- { "1EA4", "30041_0302_0301" },
- { "1EA5", "30061_0302_0301" },
- { "1EA6", "30041_0302_0300" },
- { "1EA7", "30061_0302_0300" },
- { "1EA8", "30041_0302_0309" },
- { "1EA9", "30061_0302_0309" },
- { "1EAA", "30041_0302_0303" },
- { "1EAB", "30061_0302_0303" },
- { "1EAC", "30041_0323_0302" },
- { "1EAD", "30061_0323_0302" },
- { "1EAE", "30041_0306_0301" },
- { "1EAF", "30061_0306_0301" },
- { "1EB0", "30041_0306_0300" },
- { "1EB1", "30061_0306_0300" },
- { "1EB2", "30041_0306_0309" },
- { "1EB3", "30061_0306_0309" },
- { "1EB4", "30041_0306_0303" },
- { "1EB5", "30061_0306_0303" },
- { "1EB6", "30041_0323_0306" },
- { "1EB7", "30061_0323_0306" },
- { "1EB8", "20045_0323" },
- { "1EB9", "20065_0323" },
- { "1EBA", "20045_0309" },
- { "1EBB", "20065_0309" },
- { "1EBC", "20045_0303" },
- { "1EBD", "20065_0303" },
- { "1EBE", "30045_0302_0301" },
- { "1EBF", "30065_0302_0301" },
- { "1EC0", "30045_0302_0300" },
- { "1EC1", "30065_0302_0300" },
- { "1EC2", "30045_0302_0309" },
- { "1EC3", "30065_0302_0309" },
- { "1EC4", "30045_0302_0303" },
- { "1EC5", "30065_0302_0303" },
- { "1EC6", "30045_0323_0302" },
- { "1EC7", "30065_0323_0302" },
- { "1EC8", "20049_0309" },
- { "1EC9", "20069_0309" },
- { "1ECA", "20049_0323" },
- { "1ECB", "20069_0323" },
- { "1ECC", "2004F_0323" },
- { "1ECD", "2006F_0323" },
- { "1ECE", "2004F_0309" },
- { "1ECF", "2006F_0309" },
- { "1ED0", "3004F_0302_0301" },
- { "1ED1", "3006F_0302_0301" },
- { "1ED2", "3004F_0302_0300" },
- { "1ED3", "3006F_0302_0300" },
- { "1ED4", "3004F_0302_0309" },
- { "1ED5", "3006F_0302_0309" },
- { "1ED6", "3004F_0302_0303" },
- { "1ED7", "3006F_0302_0303" },
- { "1ED8", "3004F_0323_0302" },
- { "1ED9", "3006F_0323_0302" },
- { "1EDA", "3004F_031B_0301" },
- { "1EDB", "3006F_031B_0301" },
- { "1EDC", "3004F_031B_0300" },
- { "1EDD", "3006F_031B_0300" },
- { "1EDE", "3004F_031B_0309" },
- { "1EDF", "3006F_031B_0309" },
- { "1EE0", "3004F_031B_0303" },
- { "1EE1", "3006F_031B_0303" },
- { "1EE2", "3004F_031B_0323" },
- { "1EE3", "3006F_031B_0323" },
- { "1EE4", "20055_0323" },
- { "1EE5", "20075_0323" },
- { "1EE6", "20055_0309" },
- { "1EE7", "20075_0309" },
- { "1EE8", "30055_031B_0301" },
- { "1EE9", "30075_031B_0301" },
- { "1EEA", "30055_031B_0300" },
- { "1EEB", "30075_031B_0300" },
- { "1EEC", "30055_031B_0309" },
- { "1EED", "30075_031B_0309" },
- { "1EEE", "30055_031B_0303" },
- { "1EEF", "30075_031B_0303" },
- { "1EF0", "30055_031B_0323" },
- { "1EF1", "30075_031B_0323" },
- { "1EF2", "20059_0300" },
- { "1EF3", "20079_0300" },
- { "1EF4", "20059_0323" },
- { "1EF5", "20079_0323" },
- { "1EF6", "20059_0309" },
- { "1EF7", "20079_0309" },
- { "1EF8", "20059_0303" },
- { "1EF9", "20079_0303" },
- { "1F00", "203B1_0313" },
- { "1F01", "203B1_0314" },
- { "1F02", "303B1_0313_0300" },
- { "1F03", "303B1_0314_0300" },
- { "1F04", "303B1_0313_0301" },
- { "1F05", "303B1_0314_0301" },
- { "1F06", "303B1_0313_0342" },
- { "1F07", "303B1_0314_0342" },
- { "1F08", "20391_0313" },
- { "1F09", "20391_0314" },
- { "1F0A", "30391_0313_0300" },
- { "1F0B", "30391_0314_0300" },
- { "1F0C", "30391_0313_0301" },
- { "1F0D", "30391_0314_0301" },
- { "1F0E", "30391_0313_0342" },
- { "1F0F", "30391_0314_0342" },
- { "1F10", "203B5_0313" },
- { "1F11", "203B5_0314" },
- { "1F12", "303B5_0313_0300" },
- { "1F13", "303B5_0314_0300" },
- { "1F14", "303B5_0313_0301" },
- { "1F15", "303B5_0314_0301" },
- { "1F18", "20395_0313" },
- { "1F19", "20395_0314" },
- { "1F1A", "30395_0313_0300" },
- { "1F1B", "30395_0314_0300" },
- { "1F1C", "30395_0313_0301" },
- { "1F1D", "30395_0314_0301" },
- { "1F20", "203B7_0313" },
- { "1F21", "203B7_0314" },
- { "1F22", "303B7_0313_0300" },
- { "1F23", "303B7_0314_0300" },
- { "1F24", "303B7_0313_0301" },
- { "1F25", "303B7_0314_0301" },
- { "1F26", "303B7_0313_0342" },
- { "1F27", "303B7_0314_0342" },
- { "1F28", "20397_0313" },
- { "1F29", "20397_0314" },
- { "1F2A", "30397_0313_0300" },
- { "1F2B", "30397_0314_0300" },
- { "1F2C", "30397_0313_0301" },
- { "1F2D", "30397_0314_0301" },
- { "1F2E", "30397_0313_0342" },
- { "1F2F", "30397_0314_0342" },
- { "1F30", "203B9_0313" },
- { "1F31", "203B9_0314" },
- { "1F32", "303B9_0313_0300" },
- { "1F33", "303B9_0314_0300" },
- { "1F34", "303B9_0313_0301" },
- { "1F35", "303B9_0314_0301" },
- { "1F36", "303B9_0313_0342" },
- { "1F37", "303B9_0314_0342" },
- { "1F38", "20399_0313" },
- { "1F39", "20399_0314" },
- { "1F3A", "30399_0313_0300" },
- { "1F3B", "30399_0314_0300" },
- { "1F3C", "30399_0313_0301" },
- { "1F3D", "30399_0314_0301" },
- { "1F3E", "30399_0313_0342" },
- { "1F3F", "30399_0314_0342" },
- { "1F40", "203BF_0313" },
- { "1F41", "203BF_0314" },
- { "1F42", "303BF_0313_0300" },
- { "1F43", "303BF_0314_0300" },
- { "1F44", "303BF_0313_0301" },
- { "1F45", "303BF_0314_0301" },
- { "1F48", "2039F_0313" },
- { "1F49", "2039F_0314" },
- { "1F4A", "3039F_0313_0300" },
- { "1F4B", "3039F_0314_0300" },
- { "1F4C", "3039F_0313_0301" },
- { "1F4D", "3039F_0314_0301" },
- { "1F50", "203C5_0313" },
- { "1F51", "203C5_0314" },
- { "1F52", "303C5_0313_0300" },
- { "1F53", "303C5_0314_0300" },
- { "1F54", "303C5_0313_0301" },
- { "1F55", "303C5_0314_0301" },
- { "1F56", "303C5_0313_0342" },
- { "1F57", "303C5_0314_0342" },
- { "1F59", "203A5_0314" },
- { "1F5B", "303A5_0314_0300" },
- { "1F5D", "303A5_0314_0301" },
- { "1F5F", "303A5_0314_0342" },
- { "1F60", "203C9_0313" },
- { "1F61", "203C9_0314" },
- { "1F62", "303C9_0313_0300" },
- { "1F63", "303C9_0314_0300" },
- { "1F64", "303C9_0313_0301" },
- { "1F65", "303C9_0314_0301" },
- { "1F66", "303C9_0313_0342" },
- { "1F67", "303C9_0314_0342" },
- { "1F68", "203A9_0313" },
- { "1F69", "203A9_0314" },
- { "1F6A", "303A9_0313_0300" },
- { "1F6B", "303A9_0314_0300" },
- { "1F6C", "303A9_0313_0301" },
- { "1F6D", "303A9_0314_0301" },
- { "1F6E", "303A9_0313_0342" },
- { "1F6F", "303A9_0314_0342" },
- { "1F70", "203B1_0300" },
- { "1F71", "203B1_0301" },
- { "1F72", "203B5_0300" },
- { "1F73", "203B5_0301" },
- { "1F74", "203B7_0300" },
- { "1F75", "203B7_0301" },
- { "1F76", "203B9_0300" },
- { "1F77", "203B9_0301" },
- { "1F78", "203BF_0300" },
- { "1F79", "203BF_0301" },
- { "1F7A", "203C5_0300" },
- { "1F7B", "203C5_0301" },
- { "1F7C", "203C9_0300" },
- { "1F7D", "203C9_0301" },
- { "1F80", "303B1_0313_0345" },
- { "1F81", "303B1_0314_0345" },
- { "1F82", "403B1_0313_0300_0345" },
- { "1F83", "403B1_0314_0300_0345" },
- { "1F84", "403B1_0313_0301_0345" },
- { "1F85", "403B1_0314_0301_0345" },
- { "1F86", "403B1_0313_0342_0345" },
- { "1F87", "403B1_0314_0342_0345" },
- { "1F88", "30391_0313_0345" },
- { "1F89", "30391_0314_0345" },
- { "1F8A", "40391_0313_0300_0345" },
- { "1F8B", "40391_0314_0300_0345" },
- { "1F8C", "40391_0313_0301_0345" },
- { "1F8D", "40391_0314_0301_0345" },
- { "1F8E", "40391_0313_0342_0345" },
- { "1F8F", "40391_0314_0342_0345" },
- { "1F90", "303B7_0313_0345" },
- { "1F91", "303B7_0314_0345" },
- { "1F92", "403B7_0313_0300_0345" },
- { "1F93", "403B7_0314_0300_0345" },
- { "1F94", "403B7_0313_0301_0345" },
- { "1F95", "403B7_0314_0301_0345" },
- { "1F96", "403B7_0313_0342_0345" },
- { "1F97", "403B7_0314_0342_0345" },
- { "1F98", "30397_0313_0345" },
- { "1F99", "30397_0314_0345" },
- { "1F9A", "40397_0313_0300_0345" },
- { "1F9B", "40397_0314_0300_0345" },
- { "1F9C", "40397_0313_0301_0345" },
- { "1F9D", "40397_0314_0301_0345" },
- { "1F9E", "40397_0313_0342_0345" },
- { "1F9F", "40397_0314_0342_0345" },
- { "1FA0", "303C9_0313_0345" },
- { "1FA1", "303C9_0314_0345" },
- { "1FA2", "403C9_0313_0300_0345" },
- { "1FA3", "403C9_0314_0300_0345" },
- { "1FA4", "403C9_0313_0301_0345" },
- { "1FA5", "403C9_0314_0301_0345" },
- { "1FA6", "403C9_0313_0342_0345" },
- { "1FA7", "403C9_0314_0342_0345" },
- { "1FA8", "303A9_0313_0345" },
- { "1FA9", "303A9_0314_0345" },
- { "1FAA", "403A9_0313_0300_0345" },
- { "1FAB", "403A9_0314_0300_0345" },
- { "1FAC", "403A9_0313_0301_0345" },
- { "1FAD", "403A9_0314_0301_0345" },
- { "1FAE", "403A9_0313_0342_0345" },
- { "1FAF", "403A9_0314_0342_0345" },
- { "1FB0", "203B1_0306" },
- { "1FB1", "203B1_0304" },
- { "1FB2", "303B1_0300_0345" },
- { "1FB3", "203B1_0345" },
- { "1FB4", "303B1_0301_0345" },
- { "1FB6", "203B1_0342" },
- { "1FB7", "303B1_0342_0345" },
- { "1FB8", "20391_0306" },
- { "1FB9", "20391_0304" },
- { "1FBA", "20391_0300" },
- { "1FBB", "20391_0301" },
- { "1FBC", "20391_0345" },
- { "1FBE", "103B9" },
- { "1FC1", "200A8_0342" },
- { "1FC2", "303B7_0300_0345" },
- { "1FC3", "203B7_0345" },
- { "1FC4", "303B7_0301_0345" },
- { "1FC6", "203B7_0342" },
- { "1FC7", "303B7_0342_0345" },
- { "1FC8", "20395_0300" },
- { "1FC9", "20395_0301" },
- { "1FCA", "20397_0300" },
- { "1FCB", "20397_0301" },
- { "1FCC", "20397_0345" },
- { "1FCD", "21FBF_0300" },
- { "1FCE", "21FBF_0301" },
- { "1FCF", "21FBF_0342" },
- { "1FD0", "203B9_0306" },
- { "1FD1", "203B9_0304" },
- { "1FD2", "303B9_0308_0300" },
- { "1FD3", "303B9_0308_0301" },
- { "1FD6", "203B9_0342" },
- { "1FD7", "303B9_0308_0342" },
- { "1FD8", "20399_0306" },
- { "1FD9", "20399_0304" },
- { "1FDA", "20399_0300" },
- { "1FDB", "20399_0301" },
- { "1FDD", "21FFE_0300" },
- { "1FDE", "21FFE_0301" },
- { "1FDF", "21FFE_0342" },
- { "1FE0", "203C5_0306" },
- { "1FE1", "203C5_0304" },
- { "1FE2", "303C5_0308_0300" },
- { "1FE3", "303C5_0308_0301" },
- { "1FE4", "203C1_0313" },
- { "1FE5", "203C1_0314" },
- { "1FE6", "203C5_0342" },
- { "1FE7", "303C5_0308_0342" },
- { "1FE8", "203A5_0306" },
- { "1FE9", "203A5_0304" },
- { "1FEA", "203A5_0300" },
- { "1FEB", "203A5_0301" },
- { "1FEC", "203A1_0314" },
- { "1FED", "200A8_0300" },
- { "1FEE", "200A8_0301" },
- { "1FEF", "10060" },
- { "1FF2", "303C9_0300_0345" },
- { "1FF3", "203C9_0345" },
- { "1FF4", "303C9_0301_0345" },
- { "1FF6", "203C9_0342" },
- { "1FF7", "303C9_0342_0345" },
- { "1FF8", "2039F_0300" },
- { "1FF9", "2039F_0301" },
- { "1FFA", "203A9_0300" },
- { "1FFB", "203A9_0301" },
- { "1FFC", "203A9_0345" },
- { "1FFD", "100B4" },
- { "2000", "12002" },
- { "2001", "12003" },
- { "2126", "103A9" },
- { "212A", "1004B" },
- { "212B", "20041_030A" },
- { "219A", "22190_0338" },
- { "219B", "22192_0338" },
- { "21AE", "22194_0338" },
- { "21CD", "221D0_0338" },
- { "21CE", "221D4_0338" },
- { "21CF", "221D2_0338" },
- { "2204", "22203_0338" },
- { "2209", "22208_0338" },
- { "220C", "2220B_0338" },
- { "2224", "22223_0338" },
- { "2226", "22225_0338" },
- { "2241", "2223C_0338" },
- { "2244", "22243_0338" },
- { "2247", "22245_0338" },
- { "2249", "22248_0338" },
- { "2260", "2003D_0338" },
- { "2262", "22261_0338" },
- { "226D", "2224D_0338" },
- { "226E", "2003C_0338" },
- { "226F", "2003E_0338" },
- { "2270", "22264_0338" },
- { "2271", "22265_0338" },
- { "2274", "22272_0338" },
- { "2275", "22273_0338" },
- { "2278", "22276_0338" },
- { "2279", "22277_0338" },
- { "2280", "2227A_0338" },
- { "2281", "2227B_0338" },
- { "2284", "22282_0338" },
- { "2285", "22283_0338" },
- { "2288", "22286_0338" },
- { "2289", "22287_0338" },
- { "22AC", "222A2_0338" },
- { "22AD", "222A8_0338" },
- { "22AE", "222A9_0338" },
- { "22AF", "222AB_0338" },
- { "22E0", "2227C_0338" },
- { "22E1", "2227D_0338" },
- { "22E2", "22291_0338" },
- { "22E3", "22292_0338" },
- { "22EA", "222B2_0338" },
- { "22EB", "222B3_0338" },
- { "22EC", "222B4_0338" },
- { "22ED", "222B5_0338" },
- { "2329", "13008" },
- { "232A", "13009" },
- { "2ADC", "22ADD_0338" },
- { "304C", "2304B_3099" },
- { "304E", "2304D_3099" },
- { "3050", "2304F_3099" },
- { "3052", "23051_3099" },
- { "3054", "23053_3099" },
- { "3056", "23055_3099" },
- { "3058", "23057_3099" },
- { "305A", "23059_3099" },
- { "305C", "2305B_3099" },
- { "305E", "2305D_3099" },
- { "3060", "2305F_3099" },
- { "3062", "23061_3099" },
- { "3065", "23064_3099" },
- { "3067", "23066_3099" },
- { "3069", "23068_3099" },
- { "3070", "2306F_3099" },
- { "3071", "2306F_309A" },
- { "3073", "23072_3099" },
- { "3074", "23072_309A" },
- { "3076", "23075_3099" },
- { "3077", "23075_309A" },
- { "3079", "23078_3099" },
- { "307A", "23078_309A" },
- { "307C", "2307B_3099" },
- { "307D", "2307B_309A" },
- { "3094", "23046_3099" },
- { "309E", "2309D_3099" },
- { "30AC", "230AB_3099" },
- { "30AE", "230AD_3099" },
- { "30B0", "230AF_3099" },
- { "30B2", "230B1_3099" },
- { "30B4", "230B3_3099" },
- { "30B6", "230B5_3099" },
- { "30B8", "230B7_3099" },
- { "30BA", "230B9_3099" },
- { "30BC", "230BB_3099" },
- { "30BE", "230BD_3099" },
- { "30C0", "230BF_3099" },
- { "30C2", "230C1_3099" },
- { "30C5", "230C4_3099" },
- { "30C7", "230C6_3099" },
- { "30C9", "230C8_3099" },
- { "30D0", "230CF_3099" },
- { "30D1", "230CF_309A" },
- { "30D3", "230D2_3099" },
- { "30D4", "230D2_309A" },
- { "30D6", "230D5_3099" },
- { "30D7", "230D5_309A" },
- { "30D9", "230D8_3099" },
- { "30DA", "230D8_309A" },
- { "30DC", "230DB_3099" },
- { "30DD", "230DB_309A" },
- { "30F4", "230A6_3099" },
- { "30F7", "230EF_3099" },
- { "30F8", "230F0_3099" },
- { "30F9", "230F1_3099" },
- { "30FA", "230F2_3099" },
- { "30FE", "230FD_3099" },
- { "F900", "18C48" },
- { "F901", "166F4" },
- { "F902", "18ECA" },
- { "F903", "18CC8" },
- { "F904", "16ED1" },
- { "F905", "14E32" },
- { "F906", "153E5" },
- { "F907", "19F9C" },
- { "F908", "19F9C" },
- { "F909", "15951" },
- { "F90A", "191D1" },
- { "F90B", "15587" },
- { "F90C", "15948" },
- { "F90D", "161F6" },
- { "F90E", "17669" },
- { "F90F", "17F85" },
- { "F910", "1863F" },
- { "F911", "187BA" },
- { "F912", "188F8" },
- { "F913", "1908F" },
- { "F914", "16A02" },
- { "F915", "16D1B" },
- { "F916", "170D9" },
- { "F917", "173DE" },
- { "F918", "1843D" },
- { "F919", "1916A" },
- { "F91A", "199F1" },
- { "F91B", "14E82" },
- { "F91C", "15375" },
- { "F91D", "16B04" },
- { "F91E", "1721B" },
- { "F91F", "1862D" },
- { "F920", "19E1E" },
- { "F921", "15D50" },
- { "F922", "16FEB" },
- { "F923", "185CD" },
- { "F924", "18964" },
- { "F925", "162C9" },
- { "F926", "181D8" },
- { "F927", "1881F" },
- { "F928", "15ECA" },
- { "F929", "16717" },
- { "F92A", "16D6A" },
- { "F92B", "172FC" },
- { "F92C", "190CE" },
- { "F92D", "14F86" },
- { "F92E", "151B7" },
- { "F92F", "152DE" },
- { "F930", "164C4" },
- { "F931", "16AD3" },
- { "F932", "17210" },
- { "F933", "176E7" },
- { "F934", "18001" },
- { "F935", "18606" },
- { "F936", "1865C" },
- { "F937", "18DEF" },
- { "F938", "19732" },
- { "F939", "19B6F" },
- { "F93A", "19DFA" },
- { "F93B", "1788C" },
- { "F93C", "1797F" },
- { "F93D", "17DA0" },
- { "F93E", "183C9" },
- { "F93F", "19304" },
- { "F940", "19E7F" },
- { "F941", "18AD6" },
- { "F942", "158DF" },
- { "F943", "15F04" },
- { "F944", "17C60" },
- { "F945", "1807E" },
- { "F946", "17262" },
- { "F947", "178CA" },
- { "F948", "18CC2" },
- { "F949", "196F7" },
- { "F94A", "158D8" },
- { "F94B", "15C62" },
- { "F94C", "16A13" },
- { "F94D", "16DDA" },
- { "F94E", "16F0F" },
- { "F94F", "17D2F" },
- { "F950", "17E37" },
- { "F951", "1964B" },
- { "F952", "152D2" },
- { "F953", "1808B" },
- { "F954", "151DC" },
- { "F955", "151CC" },
- { "F956", "17A1C" },
- { "F957", "17DBE" },
- { "F958", "183F1" },
- { "F959", "19675" },
- { "F95A", "18B80" },
- { "F95B", "162CF" },
- { "F95C", "16A02" },
- { "F95D", "18AFE" },
- { "F95E", "14E39" },
- { "F95F", "15BE7" },
- { "F960", "16012" },
- { "F961", "17387" },
- { "F962", "17570" },
- { "F963", "15317" },
- { "F964", "178FB" },
- { "F965", "14FBF" },
- { "F966", "15FA9" },
- { "F967", "14E0D" },
- { "F968", "16CCC" },
- { "F969", "16578" },
- { "F96A", "17D22" },
- { "F96B", "153C3" },
- { "F96C", "1585E" },
- { "F96D", "17701" },
- { "F96E", "18449" },
- { "F96F", "18AAA" },
- { "F970", "16BBA" },
- { "F971", "18FB0" },
- { "F972", "16C88" },
- { "F973", "162FE" },
- { "F974", "182E5" },
- { "F975", "163A0" },
- { "F976", "17565" },
- { "F977", "14EAE" },
- { "F978", "15169" },
- { "F979", "151C9" },
- { "F97A", "16881" },
- { "F97B", "17CE7" },
- { "F97C", "1826F" },
- { "F97D", "18AD2" },
- { "F97E", "191CF" },
- { "F97F", "152F5" },
- { "F980", "15442" },
- { "F981", "15973" },
- { "F982", "15EEC" },
- { "F983", "165C5" },
- { "F984", "16FFE" },
- { "F985", "1792A" },
- { "F986", "195AD" },
- { "F987", "19A6A" },
- { "F988", "19E97" },
- { "F989", "19ECE" },
- { "F98A", "1529B" },
- { "F98B", "166C6" },
- { "F98C", "16B77" },
- { "F98D", "18F62" },
- { "F98E", "15E74" },
- { "F98F", "16190" },
- { "F990", "16200" },
- { "F991", "1649A" },
- { "F992", "16F23" },
- { "F993", "17149" },
- { "F994", "17489" },
- { "F995", "179CA" },
- { "F996", "17DF4" },
- { "F997", "1806F" },
- { "F998", "18F26" },
- { "F999", "184EE" },
- { "F99A", "19023" },
- { "F99B", "1934A" },
- { "F99C", "15217" },
- { "F99D", "152A3" },
- { "F99E", "154BD" },
- { "F99F", "170C8" },
- { "F9A0", "188C2" },
- { "F9A1", "18AAA" },
- { "F9A2", "15EC9" },
- { "F9A3", "15FF5" },
- { "F9A4", "1637B" },
- { "F9A5", "16BAE" },
- { "F9A6", "17C3E" },
- { "F9A7", "17375" },
- { "F9A8", "14EE4" },
- { "F9A9", "156F9" },
- { "F9AA", "15BE7" },
- { "F9AB", "15DBA" },
- { "F9AC", "1601C" },
- { "F9AD", "173B2" },
- { "F9AE", "17469" },
- { "F9AF", "17F9A" },
- { "F9B0", "18046" },
- { "F9B1", "19234" },
- { "F9B2", "196F6" },
- { "F9B3", "19748" },
- { "F9B4", "19818" },
- { "F9B5", "14F8B" },
- { "F9B6", "179AE" },
- { "F9B7", "191B4" },
- { "F9B8", "196B8" },
- { "F9B9", "160E1" },
- { "F9BA", "14E86" },
- { "F9BB", "150DA" },
- { "F9BC", "15BEE" },
- { "F9BD", "15C3F" },
- { "F9BE", "16599" },
- { "F9BF", "16A02" },
- { "F9C0", "171CE" },
- { "F9C1", "17642" },
- { "F9C2", "184FC" },
- { "F9C3", "1907C" },
- { "F9C4", "19F8D" },
- { "F9C5", "16688" },
- { "F9C6", "1962E" },
- { "F9C7", "15289" },
- { "F9C8", "1677B" },
- { "F9C9", "167F3" },
- { "F9CA", "16D41" },
- { "F9CB", "16E9C" },
- { "F9CC", "17409" },
- { "F9CD", "17559" },
- { "F9CE", "1786B" },
- { "F9CF", "17D10" },
- { "F9D0", "1985E" },
- { "F9D1", "1516D" },
- { "F9D2", "1622E" },
- { "F9D3", "19678" },
- { "F9D4", "1502B" },
- { "F9D5", "15D19" },
- { "F9D6", "16DEA" },
- { "F9D7", "18F2A" },
- { "F9D8", "15F8B" },
- { "F9D9", "16144" },
- { "F9DA", "16817" },
- { "F9DB", "17387" },
- { "F9DC", "19686" },
- { "F9DD", "15229" },
- { "F9DE", "1540F" },
- { "F9DF", "15C65" },
- { "F9E0", "16613" },
- { "F9E1", "1674E" },
- { "F9E2", "168A8" },
- { "F9E3", "16CE5" },
- { "F9E4", "17406" },
- { "F9E5", "175E2" },
- { "F9E6", "17F79" },
- { "F9E7", "188CF" },
- { "F9E8", "188E1" },
- { "F9E9", "191CC" },
- { "F9EA", "196E2" },
- { "F9EB", "1533F" },
- { "F9EC", "16EBA" },
- { "F9ED", "1541D" },
- { "F9EE", "171D0" },
- { "F9EF", "17498" },
- { "F9F0", "185FA" },
- { "F9F1", "196A3" },
- { "F9F2", "19C57" },
- { "F9F3", "19E9F" },
- { "F9F4", "16797" },
- { "F9F5", "16DCB" },
- { "F9F6", "181E8" },
- { "F9F7", "17ACB" },
- { "F9F8", "17B20" },
- { "F9F9", "17C92" },
- { "F9FA", "172C0" },
- { "F9FB", "17099" },
- { "F9FC", "18B58" },
- { "F9FD", "14EC0" },
- { "F9FE", "18336" },
- { "F9FF", "1523A" },
- { "FA00", "15207" },
- { "FA01", "15EA6" },
- { "FA02", "162D3" },
- { "FA03", "17CD6" },
- { "FA04", "15B85" },
- { "FA05", "16D1E" },
- { "FA06", "166B4" },
- { "FA07", "18F3B" },
- { "FA08", "1884C" },
- { "FA09", "1964D" },
- { "FA0A", "1898B" },
- { "FA0B", "15ED3" },
- { "FA0C", "15140" },
- { "FA0D", "155C0" },
- { "FA10", "1585A" },
- { "FA12", "16674" },
- { "FA15", "151DE" },
- { "FA16", "1732A" },
- { "FA17", "176CA" },
- { "FA18", "1793C" },
- { "FA19", "1795E" },
- { "FA1A", "17965" },
- { "FA1B", "1798F" },
- { "FA1C", "19756" },
- { "FA1D", "17CBE" },
- { "FA1E", "17FBD" },
- { "FA20", "18612" },
- { "FA22", "18AF8" },
- { "FA25", "19038" },
- { "FA26", "190FD" },
- { "FA2A", "198EF" },
- { "FA2B", "198FC" },
- { "FA2C", "19928" },
- { "FA2D", "19DB4" },
- { "FA30", "14FAE" },
- { "FA31", "150E7" },
- { "FA32", "1514D" },
- { "FA33", "152C9" },
- { "FA34", "152E4" },
- { "FA35", "15351" },
- { "FA36", "1559D" },
- { "FA37", "15606" },
- { "FA38", "15668" },
- { "FA39", "15840" },
- { "FA3A", "158A8" },
- { "FA3B", "15C64" },
- { "FA3C", "15C6E" },
- { "FA3D", "16094" },
- { "FA3E", "16168" },
- { "FA3F", "1618E" },
- { "FA40", "161F2" },
- { "FA41", "1654F" },
- { "FA42", "165E2" },
- { "FA43", "16691" },
- { "FA44", "16885" },
- { "FA45", "16D77" },
- { "FA46", "16E1A" },
- { "FA47", "16F22" },
- { "FA48", "1716E" },
- { "FA49", "1722B" },
- { "FA4A", "17422" },
- { "FA4B", "17891" },
- { "FA4C", "1793E" },
- { "FA4D", "17949" },
- { "FA4E", "17948" },
- { "FA4F", "17950" },
- { "FA50", "17956" },
- { "FA51", "1795D" },
- { "FA52", "1798D" },
- { "FA53", "1798E" },
- { "FA54", "17A40" },
- { "FA55", "17A81" },
- { "FA56", "17BC0" },
- { "FA57", "17DF4" },
- { "FA58", "17E09" },
- { "FA59", "17E41" },
- { "FA5A", "17F72" },
- { "FA5B", "18005" },
- { "FA5C", "181ED" },
- { "FA5D", "18279" },
- { "FA5E", "18279" },
- { "FA5F", "18457" },
- { "FA60", "18910" },
- { "FA61", "18996" },
- { "FA62", "18B01" },
- { "FA63", "18B39" },
- { "FA64", "18CD3" },
- { "FA65", "18D08" },
- { "FA66", "18FB6" },
- { "FA67", "19038" },
- { "FA68", "196E3" },
- { "FA69", "197FF" },
- { "FA6A", "1983B" },
- { "FB1D", "205D9_05B4" },
- { "FB1F", "205F2_05B7" },
- { "FB2A", "205E9_05C1" },
- { "FB2B", "205E9_05C2" },
- { "FB2C", "305E9_05BC_05C1" },
- { "FB2D", "305E9_05BC_05C2" },
- { "FB2E", "205D0_05B7" },
- { "FB2F", "205D0_05B8" },
- { "FB30", "205D0_05BC" },
- { "FB31", "205D1_05BC" },
- { "FB32", "205D2_05BC" },
- { "FB33", "205D3_05BC" },
- { "FB34", "205D4_05BC" },
- { "FB35", "205D5_05BC" },
- { "FB36", "205D6_05BC" },
- { "FB38", "205D8_05BC" },
- { "FB39", "205D9_05BC" },
- { "FB3A", "205DA_05BC" },
- { "FB3B", "205DB_05BC" },
- { "FB3C", "205DC_05BC" },
- { "FB3E", "205DE_05BC" },
- { "FB40", "205E0_05BC" },
- { "FB41", "205E1_05BC" },
- { "FB43", "205E3_05BC" },
- { "FB44", "205E4_05BC" },
- { "FB46", "205E6_05BC" },
- { "FB47", "205E7_05BC" },
- { "FB48", "205E8_05BC" },
- { "FB49", "205E9_05BC" },
- { "FB4A", "205EA_05BC" },
- { "FB4B", "205D5_05B9" },
- { "FB4C", "205D1_05BF" },
- { "FB4D", "205DB_05BF" },
- { "FB4E", "205E4_05BF" },
- { "1D15E", "21D157_1D165" },
- { "1D15F", "21D158_1D165" },
- { "1D160", "31D158_1D165_1D16E" },
- { "1D161", "31D158_1D165_1D16F" },
- { "1D162", "31D158_1D165_1D170" },
- { "1D163", "31D158_1D165_1D171" },
- { "1D164", "31D158_1D165_1D172" },
- { "1D1BB", "21D1B9_1D165" },
- { "1D1BC", "21D1BA_1D165" },
- { "1D1BD", "31D1B9_1D165_1D16E" },
- { "1D1BE", "31D1BA_1D165_1D16E" },
- { "1D1BF", "31D1B9_1D165_1D16F" },
- { "1D1C0", "31D1BA_1D165_1D16F" },
- { "2F800", "14E3D" },
- { "2F801", "14E38" },
- { "2F802", "14E41" },
- { "2F803", "120122" },
- { "2F804", "14F60" },
- { "2F805", "14FAE" },
- { "2F806", "14FBB" },
- { "2F807", "15002" },
- { "2F808", "1507A" },
- { "2F809", "15099" },
- { "2F80A", "150E7" },
- { "2F80B", "150CF" },
- { "2F80C", "1349E" },
- { "2F80D", "12063A" },
- { "2F80E", "1514D" },
- { "2F80F", "15154" },
- { "2F810", "15164" },
- { "2F811", "15177" },
- { "2F812", "12051C" },
- { "2F813", "134B9" },
- { "2F814", "15167" },
- { "2F815", "1518D" },
- { "2F816", "12054B" },
- { "2F817", "15197" },
- { "2F818", "151A4" },
- { "2F819", "14ECC" },
- { "2F81A", "151AC" },
- { "2F81B", "151B5" },
- { "2F81C", "1291DF" },
- { "2F81D", "151F5" },
- { "2F81E", "15203" },
- { "2F81F", "134DF" },
- { "2F820", "1523B" },
- { "2F821", "15246" },
- { "2F822", "15272" },
- { "2F823", "15277" },
- { "2F824", "13515" },
- { "2F825", "152C7" },
- { "2F826", "152C9" },
- { "2F827", "152E4" },
- { "2F828", "152FA" },
- { "2F829", "15305" },
- { "2F82A", "15306" },
- { "2F82B", "15317" },
- { "2F82C", "15349" },
- { "2F82D", "15351" },
- { "2F82E", "1535A" },
- { "2F82F", "15373" },
- { "2F830", "1537D" },
- { "2F831", "1537F" },
- { "2F832", "1537F" },
- { "2F833", "1537F" },
- { "2F834", "120A2C" },
- { "2F835", "17070" },
- { "2F836", "153CA" },
- { "2F837", "153DF" },
- { "2F838", "120B63" },
- { "2F839", "153EB" },
- { "2F83A", "153F1" },
- { "2F83B", "15406" },
- { "2F83C", "1549E" },
- { "2F83D", "15438" },
- { "2F83E", "15448" },
- { "2F83F", "15468" },
- { "2F840", "154A2" },
- { "2F841", "154F6" },
- { "2F842", "15510" },
- { "2F843", "15553" },
- { "2F844", "15563" },
- { "2F845", "15584" },
- { "2F846", "15584" },
- { "2F847", "15599" },
- { "2F848", "155AB" },
- { "2F849", "155B3" },
- { "2F84A", "155C2" },
- { "2F84B", "15716" },
- { "2F84C", "15606" },
- { "2F84D", "15717" },
- { "2F84E", "15651" },
- { "2F84F", "15674" },
- { "2F850", "15207" },
- { "2F851", "158EE" },
- { "2F852", "157CE" },
- { "2F853", "157F4" },
- { "2F854", "1580D" },
- { "2F855", "1578B" },
- { "2F856", "15832" },
- { "2F857", "15831" },
- { "2F858", "158AC" },
- { "2F859", "1214E4" },
- { "2F85A", "158F2" },
- { "2F85B", "158F7" },
- { "2F85C", "15906" },
- { "2F85D", "1591A" },
- { "2F85E", "15922" },
- { "2F85F", "15962" },
- { "2F860", "1216A8" },
- { "2F861", "1216EA" },
- { "2F862", "159EC" },
- { "2F863", "15A1B" },
- { "2F864", "15A27" },
- { "2F865", "159D8" },
- { "2F866", "15A66" },
- { "2F867", "136EE" },
- { "2F868", "12136A" },
- { "2F869", "15B08" },
- { "2F86A", "15B3E" },
- { "2F86B", "15B3E" },
- { "2F86C", "1219C8" },
- { "2F86D", "15BC3" },
- { "2F86E", "15BD8" },
- { "2F86F", "15BE7" },
- { "2F870", "15BF3" },
- { "2F871", "121B18" },
- { "2F872", "15BFF" },
- { "2F873", "15C06" },
- { "2F874", "15F33" },
- { "2F875", "15C22" },
- { "2F876", "13781" },
- { "2F877", "15C60" },
- { "2F878", "15C6E" },
- { "2F879", "15CC0" },
- { "2F87A", "15C8D" },
- { "2F87B", "121DE4" },
- { "2F87C", "15D43" },
- { "2F87D", "121DE6" },
- { "2F87E", "15D6E" },
- { "2F87F", "15D6B" },
- { "2F880", "15D7C" },
- { "2F881", "15DE1" },
- { "2F882", "15DE2" },
- { "2F883", "1382F" },
- { "2F884", "15DFD" },
- { "2F885", "15E28" },
- { "2F886", "15E3D" },
- { "2F887", "15E69" },
- { "2F888", "13862" },
- { "2F889", "122183" },
- { "2F88A", "1387C" },
- { "2F88B", "15EB0" },
- { "2F88C", "15EB3" },
- { "2F88D", "15EB6" },
- { "2F88E", "15ECA" },
- { "2F88F", "12A392" },
- { "2F890", "15EFE" },
- { "2F891", "122331" },
- { "2F892", "122331" },
- { "2F893", "18201" },
- { "2F894", "15F22" },
- { "2F895", "15F22" },
- { "2F896", "138C7" },
- { "2F897", "1232B8" },
- { "2F898", "1261DA" },
- { "2F899", "15F62" },
- { "2F89A", "15F6B" },
- { "2F89B", "138E3" },
- { "2F89C", "15F9A" },
- { "2F89D", "15FCD" },
- { "2F89E", "15FD7" },
- { "2F89F", "15FF9" },
- { "2F8A0", "16081" },
- { "2F8A1", "1393A" },
- { "2F8A2", "1391C" },
- { "2F8A3", "16094" },
- { "2F8A4", "1226D4" },
- { "2F8A5", "160C7" },
- { "2F8A6", "16148" },
- { "2F8A7", "1614C" },
- { "2F8A8", "1614E" },
- { "2F8A9", "1614C" },
- { "2F8AA", "1617A" },
- { "2F8AB", "1618E" },
- { "2F8AC", "161B2" },
- { "2F8AD", "161A4" },
- { "2F8AE", "161AF" },
- { "2F8AF", "161DE" },
- { "2F8B0", "161F2" },
- { "2F8B1", "161F6" },
- { "2F8B2", "16210" },
- { "2F8B3", "1621B" },
- { "2F8B4", "1625D" },
- { "2F8B5", "162B1" },
- { "2F8B6", "162D4" },
- { "2F8B7", "16350" },
- { "2F8B8", "122B0C" },
- { "2F8B9", "1633D" },
- { "2F8BA", "162FC" },
- { "2F8BB", "16368" },
- { "2F8BC", "16383" },
- { "2F8BD", "163E4" },
- { "2F8BE", "122BF1" },
- { "2F8BF", "16422" },
- { "2F8C0", "163C5" },
- { "2F8C1", "163A9" },
- { "2F8C2", "13A2E" },
- { "2F8C3", "16469" },
- { "2F8C4", "1647E" },
- { "2F8C5", "1649D" },
- { "2F8C6", "16477" },
- { "2F8C7", "13A6C" },
- { "2F8C8", "1654F" },
- { "2F8C9", "1656C" },
- { "2F8CA", "12300A" },
- { "2F8CB", "165E3" },
- { "2F8CC", "166F8" },
- { "2F8CD", "16649" },
- { "2F8CE", "13B19" },
- { "2F8CF", "16691" },
- { "2F8D0", "13B08" },
- { "2F8D1", "13AE4" },
- { "2F8D2", "15192" },
- { "2F8D3", "15195" },
- { "2F8D4", "16700" },
- { "2F8D5", "1669C" },
- { "2F8D6", "180AD" },
- { "2F8D7", "143D9" },
- { "2F8D8", "16717" },
- { "2F8D9", "1671B" },
- { "2F8DA", "16721" },
- { "2F8DB", "1675E" },
- { "2F8DC", "16753" },
- { "2F8DD", "1233C3" },
- { "2F8DE", "13B49" },
- { "2F8DF", "167FA" },
- { "2F8E0", "16785" },
- { "2F8E1", "16852" },
- { "2F8E2", "16885" },
- { "2F8E3", "12346D" },
- { "2F8E4", "1688E" },
- { "2F8E5", "1681F" },
- { "2F8E6", "16914" },
- { "2F8E7", "13B9D" },
- { "2F8E8", "16942" },
- { "2F8E9", "169A3" },
- { "2F8EA", "169EA" },
- { "2F8EB", "16AA8" },
- { "2F8EC", "1236A3" },
- { "2F8ED", "16ADB" },
- { "2F8EE", "13C18" },
- { "2F8EF", "16B21" },
- { "2F8F0", "1238A7" },
- { "2F8F1", "16B54" },
- { "2F8F2", "13C4E" },
- { "2F8F3", "16B72" },
- { "2F8F4", "16B9F" },
- { "2F8F5", "16BBA" },
- { "2F8F6", "16BBB" },
- { "2F8F7", "123A8D" },
- { "2F8F8", "121D0B" },
- { "2F8F9", "123AFA" },
- { "2F8FA", "16C4E" },
- { "2F8FB", "123CBC" },
- { "2F8FC", "16CBF" },
- { "2F8FD", "16CCD" },
- { "2F8FE", "16C67" },
- { "2F8FF", "16D16" },
- { "2F900", "16D3E" },
- { "2F901", "16D77" },
- { "2F902", "16D41" },
- { "2F903", "16D69" },
- { "2F904", "16D78" },
- { "2F905", "16D85" },
- { "2F906", "123D1E" },
- { "2F907", "16D34" },
- { "2F908", "16E2F" },
- { "2F909", "16E6E" },
- { "2F90A", "13D33" },
- { "2F90B", "16ECB" },
- { "2F90C", "16EC7" },
- { "2F90D", "123ED1" },
- { "2F90E", "16DF9" },
- { "2F90F", "16F6E" },
- { "2F910", "123F5E" },
- { "2F911", "123F8E" },
- { "2F912", "16FC6" },
- { "2F913", "17039" },
- { "2F914", "1701E" },
- { "2F915", "1701B" },
- { "2F916", "13D96" },
- { "2F917", "1704A" },
- { "2F918", "1707D" },
- { "2F919", "17077" },
- { "2F91A", "170AD" },
- { "2F91B", "120525" },
- { "2F91C", "17145" },
- { "2F91D", "124263" },
- { "2F91E", "1719C" },
- { "2F91F", "143AB" },
- { "2F920", "17228" },
- { "2F921", "17235" },
- { "2F922", "17250" },
- { "2F923", "124608" },
- { "2F924", "17280" },
- { "2F925", "17295" },
- { "2F926", "124735" },
- { "2F927", "124814" },
- { "2F928", "1737A" },
- { "2F929", "1738B" },
- { "2F92A", "13EAC" },
- { "2F92B", "173A5" },
- { "2F92C", "13EB8" },
- { "2F92D", "13EB8" },
- { "2F92E", "17447" },
- { "2F92F", "1745C" },
- { "2F930", "17471" },
- { "2F931", "17485" },
- { "2F932", "174CA" },
- { "2F933", "13F1B" },
- { "2F934", "17524" },
- { "2F935", "124C36" },
- { "2F936", "1753E" },
- { "2F937", "124C92" },
- { "2F938", "17570" },
- { "2F939", "12219F" },
- { "2F93A", "17610" },
- { "2F93B", "124FA1" },
- { "2F93C", "124FB8" },
- { "2F93D", "125044" },
- { "2F93E", "13FFC" },
- { "2F93F", "14008" },
- { "2F940", "176F4" },
- { "2F941", "1250F3" },
- { "2F942", "1250F2" },
- { "2F943", "125119" },
- { "2F944", "125133" },
- { "2F945", "1771E" },
- { "2F946", "1771F" },
- { "2F947", "1771F" },
- { "2F948", "1774A" },
- { "2F949", "14039" },
- { "2F94A", "1778B" },
- { "2F94B", "14046" },
- { "2F94C", "14096" },
- { "2F94D", "12541D" },
- { "2F94E", "1784E" },
- { "2F94F", "1788C" },
- { "2F950", "178CC" },
- { "2F951", "140E3" },
- { "2F952", "125626" },
- { "2F953", "17956" },
- { "2F954", "12569A" },
- { "2F955", "1256C5" },
- { "2F956", "1798F" },
- { "2F957", "179EB" },
- { "2F958", "1412F" },
- { "2F959", "17A40" },
- { "2F95A", "17A4A" },
- { "2F95B", "17A4F" },
- { "2F95C", "12597C" },
- { "2F95D", "125AA7" },
- { "2F95E", "125AA7" },
- { "2F95F", "17AAE" },
- { "2F960", "14202" },
- { "2F961", "125BAB" },
- { "2F962", "17BC6" },
- { "2F963", "17BC9" },
- { "2F964", "14227" },
- { "2F965", "125C80" },
- { "2F966", "17CD2" },
- { "2F967", "142A0" },
- { "2F968", "17CE8" },
- { "2F969", "17CE3" },
- { "2F96A", "17D00" },
- { "2F96B", "125F86" },
- { "2F96C", "17D63" },
- { "2F96D", "14301" },
- { "2F96E", "17DC7" },
- { "2F96F", "17E02" },
- { "2F970", "17E45" },
- { "2F971", "14334" },
- { "2F972", "126228" },
- { "2F973", "126247" },
- { "2F974", "14359" },
- { "2F975", "1262D9" },
- { "2F976", "17F7A" },
- { "2F977", "12633E" },
- { "2F978", "17F95" },
- { "2F979", "17FFA" },
- { "2F97A", "18005" },
- { "2F97B", "1264DA" },
- { "2F97C", "126523" },
- { "2F97D", "18060" },
- { "2F97E", "1265A8" },
- { "2F97F", "18070" },
- { "2F980", "12335F" },
- { "2F981", "143D5" },
- { "2F982", "180B2" },
- { "2F983", "18103" },
- { "2F984", "1440B" },
- { "2F985", "1813E" },
- { "2F986", "15AB5" },
- { "2F987", "1267A7" },
- { "2F988", "1267B5" },
- { "2F989", "123393" },
- { "2F98A", "12339C" },
- { "2F98B", "18201" },
- { "2F98C", "18204" },
- { "2F98D", "18F9E" },
- { "2F98E", "1446B" },
- { "2F98F", "18291" },
- { "2F990", "1828B" },
- { "2F991", "1829D" },
- { "2F992", "152B3" },
- { "2F993", "182B1" },
- { "2F994", "182B3" },
- { "2F995", "182BD" },
- { "2F996", "182E6" },
- { "2F997", "126B3C" },
- { "2F998", "182E5" },
- { "2F999", "1831D" },
- { "2F99A", "18363" },
- { "2F99B", "183AD" },
- { "2F99C", "18323" },
- { "2F99D", "183BD" },
- { "2F99E", "183E7" },
- { "2F99F", "18457" },
- { "2F9A0", "18353" },
- { "2F9A1", "183CA" },
- { "2F9A2", "183CC" },
- { "2F9A3", "183DC" },
- { "2F9A4", "126C36" },
- { "2F9A5", "126D6B" },
- { "2F9A6", "126CD5" },
- { "2F9A7", "1452B" },
- { "2F9A8", "184F1" },
- { "2F9A9", "184F3" },
- { "2F9AA", "18516" },
- { "2F9AB", "1273CA" },
- { "2F9AC", "18564" },
- { "2F9AD", "126F2C" },
- { "2F9AE", "1455D" },
- { "2F9AF", "14561" },
- { "2F9B0", "126FB1" },
- { "2F9B1", "1270D2" },
- { "2F9B2", "1456B" },
- { "2F9B3", "18650" },
- { "2F9B4", "1865C" },
- { "2F9B5", "18667" },
- { "2F9B6", "18669" },
- { "2F9B7", "186A9" },
- { "2F9B8", "18688" },
- { "2F9B9", "1870E" },
- { "2F9BA", "186E2" },
- { "2F9BB", "18779" },
- { "2F9BC", "18728" },
- { "2F9BD", "1876B" },
- { "2F9BE", "18786" },
- { "2F9BF", "14D57" },
- { "2F9C0", "187E1" },
- { "2F9C1", "18801" },
- { "2F9C2", "145F9" },
- { "2F9C3", "18860" },
- { "2F9C4", "18863" },
- { "2F9C5", "127667" },
- { "2F9C6", "188D7" },
- { "2F9C7", "188DE" },
- { "2F9C8", "14635" },
- { "2F9C9", "188FA" },
- { "2F9CA", "134BB" },
- { "2F9CB", "1278AE" },
- { "2F9CC", "127966" },
- { "2F9CD", "146BE" },
- { "2F9CE", "146C7" },
- { "2F9CF", "18AA0" },
- { "2F9D0", "18AED" },
- { "2F9D1", "18B8A" },
- { "2F9D2", "18C55" },
- { "2F9D3", "127CA8" },
- { "2F9D4", "18CAB" },
- { "2F9D5", "18CC1" },
- { "2F9D6", "18D1B" },
- { "2F9D7", "18D77" },
- { "2F9D8", "127F2F" },
- { "2F9D9", "120804" },
- { "2F9DA", "18DCB" },
- { "2F9DB", "18DBC" },
- { "2F9DC", "18DF0" },
- { "2F9DD", "1208DE" },
- { "2F9DE", "18ED4" },
- { "2F9DF", "18F38" },
- { "2F9E0", "1285D2" },
- { "2F9E1", "1285ED" },
- { "2F9E2", "19094" },
- { "2F9E3", "190F1" },
- { "2F9E4", "19111" },
- { "2F9E5", "12872E" },
- { "2F9E6", "1911B" },
- { "2F9E7", "19238" },
- { "2F9E8", "192D7" },
- { "2F9E9", "192D8" },
- { "2F9EA", "1927C" },
- { "2F9EB", "193F9" },
- { "2F9EC", "19415" },
- { "2F9ED", "128BFA" },
- { "2F9EE", "1958B" },
- { "2F9EF", "14995" },
- { "2F9F0", "195B7" },
- { "2F9F1", "128D77" },
- { "2F9F2", "149E6" },
- { "2F9F3", "196C3" },
- { "2F9F4", "15DB2" },
- { "2F9F5", "19723" },
- { "2F9F6", "129145" },
- { "2F9F7", "12921A" },
- { "2F9F8", "14A6E" },
- { "2F9F9", "14A76" },
- { "2F9FA", "197E0" },
- { "2F9FB", "12940A" },
- { "2F9FC", "14AB2" },
- { "2F9FD", "129496" },
- { "2F9FE", "1980B" },
- { "2F9FF", "1980B" },
- { "2FA00", "19829" },
- { "2FA01", "1295B6" },
- { "2FA02", "198E2" },
- { "2FA03", "14B33" },
- { "2FA04", "19929" },
- { "2FA05", "199A7" },
- { "2FA06", "199C2" },
- { "2FA07", "199FE" },
- { "2FA08", "14BCE" },
- { "2FA09", "129B30" },
- { "2FA0A", "19B12" },
- { "2FA0B", "19C40" },
- { "2FA0C", "19CFD" },
- { "2FA0D", "14CCE" },
- { "2FA0E", "14CED" },
- { "2FA0F", "19D67" },
- { "2FA10", "12A0CE" },
- { "2FA11", "14CF8" },
- { "2FA12", "12A105" },
- { "2FA13", "12A20E" },
- { "2FA14", "12A291" },
- { "2FA15", "19EBB" },
- { "2FA16", "14D56" },
- { "2FA17", "19EF9" },
- { "2FA18", "19EFE" },
- { "2FA19", "19F05" },
- { "2FA1A", "19F0F" },
- { "2FA1B", "19F16" },
- { "2FA1C", "19F3B" },
- { "2FA1D", "12A600" },
-};
-
-// global constructor
-
-static struct unicode_decompose_init {
- unicode_decompose_init();
-} _unicode_decompose_init;
-
-unicode_decompose_init::unicode_decompose_init() {
- for (unsigned int i = 0;
- i < sizeof(unicode_decompose_list)/sizeof(unicode_decompose_list[0]);
- i++) {
- unicode_decompose *dec = new unicode_decompose[1];
- dec->value = (char *)unicode_decompose_list[i].value;
- unicode_decompose_table.define(unicode_decompose_list[i].key, dec);
- }
-}
-
-const char *decompose_unicode(const char *s)
-{
- unicode_decompose *result = unicode_decompose_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/libs/libxutil/DviChar.c b/contrib/groff/src/libs/libxutil/DviChar.c
deleted file mode 100644
index 26aff6cf4ce7..000000000000
--- a/contrib/groff/src/libs/libxutil/DviChar.c
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * DviChar.c
- *
- * Map DVI (ditroff output) character names to
- * font indexes and back
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include "DviChar.h"
-
-extern char *xmalloc(int);
-
-#define allocHash() ((DviCharNameHash *) xmalloc (sizeof (DviCharNameHash)))
-
-struct map_list {
- struct map_list *next;
- DviCharNameMap *map;
-};
-
-static struct map_list *world;
-
-static int standard_maps_loaded = 0;
-static void load_standard_maps (void);
-static int hash_name (const char *);
-static void dispose_hash(DviCharNameMap *);
-static void compute_hash(DviCharNameMap *);
-
-DviCharNameMap *
-DviFindMap (char *encoding)
-{
- struct map_list *m;
-
- if (!standard_maps_loaded)
- load_standard_maps ();
- for (m = world; m; m=m->next)
- if (!strcmp (m->map->encoding, encoding))
- return m->map;
- return 0;
-}
-
-void
-DviRegisterMap (DviCharNameMap *map)
-{
- struct map_list *m;
-
- if (!standard_maps_loaded)
- load_standard_maps ();
- for (m = world; m; m = m->next)
- if (!strcmp (m->map->encoding, map->encoding))
- break;
- if (!m) {
- m = (struct map_list *) xmalloc (sizeof *m);
- m->next = world;
- world = m;
- }
- dispose_hash (map);
- m->map = map;
- compute_hash (map);
-}
-
-static void
-dispose_hash (DviCharNameMap *map)
-{
- DviCharNameHash **buckets;
- DviCharNameHash *h, *next;
- int i;
-
- buckets = map->buckets;
- for (i = 0; i < DVI_HASH_SIZE; i++) {
- for (h = buckets[i]; h; h=next) {
- next = h->next;
- free (h);
- }
- }
-}
-
-static int
-hash_name (const char *name)
-{
- int i = 0;
-
- while (*name)
- i = (i << 1) ^ *name++;
- if (i < 0)
- i = -i;
- return i;
-}
-
-static void
-compute_hash (DviCharNameMap *map)
-{
- DviCharNameHash **buckets;
- int c, s, i;
- DviCharNameHash *h;
-
- buckets = map->buckets;
- for (i = 0; i < DVI_HASH_SIZE; i++)
- buckets[i] = 0;
- for (c = 0; c < DVI_MAP_SIZE; c++)
- for (s = 0; s < DVI_MAX_SYNONYMS; s++) {
- if (!map->dvi_names[c][s])
- break;
- i = hash_name (map->dvi_names[c][s]) % DVI_HASH_SIZE;
- h = allocHash ();
- h->next = buckets[i];
- buckets[i] = h;
- h->name = map->dvi_names[c][s];
- h->position = c;
- }
-
-}
-
-int
-DviCharIndex (DviCharNameMap *map, const char *name)
-{
- int i;
- DviCharNameHash *h;
-
- i = hash_name (name) % DVI_HASH_SIZE;
- for (h = map->buckets[i]; h; h=h->next)
- if (!strcmp (h->name, name))
- return h->position;
- return -1;
-}
-
-static DviCharNameMap ISO8859_1_map = {
- "iso8859-1",
- 0,
-{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "\"", "dq", /* 34 */},
-{ "#", "sh", /* 35 */},
-{ "$", "Do", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "'", "cq", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "*", /* 42 */},
-{ "+", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", /* 45 */},
-{ ".", /* 46 */},
-{ "/", "sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "@", "at", /* 64 */},
-{ "A", /* 65 */},
-{ "B", /* 66 */},
-{ "C", /* 67 */},
-{ "D", /* 68 */},
-{ "E", /* 69 */},
-{ "F", /* 70 */},
-{ "G", /* 71 */},
-{ "H", /* 72 */},
-{ "I", /* 73 */},
-{ "J", /* 74 */},
-{ "K", /* 75 */},
-{ "L", /* 76 */},
-{ "M", /* 77 */},
-{ "N", /* 78 */},
-{ "O", /* 79 */},
-{ "P", /* 80 */},
-{ "Q", /* 81 */},
-{ "R", /* 82 */},
-{ "S", /* 83 */},
-{ "T", /* 84 */},
-{ "U", /* 85 */},
-{ "V", /* 86 */},
-{ "W", /* 87 */},
-{ "X", /* 88 */},
-{ "Y", /* 89 */},
-{ "Z", /* 90 */},
-{ "[", "lB", /* 91 */},
-{ "\\", "rs", /* 92 */},
-{ "]", "rB", /* 93 */},
-{ "^", "a^", "ha", /* 94 */},
-{ "_", /* 95 */},
-{ "`", "oq", /* 96 */},
-{ "a", /* 97 */},
-{ "b", /* 98 */},
-{ "c", /* 99 */},
-{ "d", /* 100 */},
-{ "e", /* 101 */},
-{ "f", /* 102 */},
-{ "g", /* 103 */},
-{ "h", /* 104 */},
-{ "i", /* 105 */},
-{ "j", /* 106 */},
-{ "k", /* 107 */},
-{ "l", /* 108 */},
-{ "m", /* 109 */},
-{ "n", /* 110 */},
-{ "o", /* 111 */},
-{ "p", /* 112 */},
-{ "q", /* 113 */},
-{ "r", /* 114 */},
-{ "s", /* 115 */},
-{ "t", /* 116 */},
-{ "u", /* 117 */},
-{ "v", /* 118 */},
-{ "w", /* 119 */},
-{ "x", /* 120 */},
-{ "y", /* 121 */},
-{ "z", /* 122 */},
-{ "{", "lC", /* 123 */},
-{ "|", "ba", /* 124 */},
-{ "}", "rC", /* 125 */},
-{ "~", "a~", "ti", /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "r!", /* 161 */},
-{ "ct", /* 162 */},
-{ "Po", /* 163 */},
-{ "Cs", /* 164 */},
-{ "Ye", /* 165 */},
-{ "bb", /* 166 */},
-{ "sc", /* 167 */},
-{ "ad", /* 168 */},
-{ "co", /* 169 */},
-{ "Of", /* 170 */},
-{ "Fo", /* 171 */},
-{ "tno", /* 172 */},
-{ "-", "hy", /* 173 */},
-{ "rg", /* 174 */},
-{ "a-", /* 175 */},
-{ "de", /* 176 */},
-{ "t+-", /* 177 */},
-{ "S2", /* 178 */},
-{ "S3", /* 179 */},
-{ "aa", /* 180 */},
-{ "mc", /* 181 */},
-{ "ps", /* 182 */},
-{ "pc", /* 183 */},
-{ "ac", /* 184 */},
-{ "S1", /* 185 */},
-{ "Om", /* 186 */},
-{ "Fc", /* 187 */},
-{ "14", /* 188 */},
-{ "12", /* 189 */},
-{ "34", /* 190 */},
-{ "r?", /* 191 */},
-{ "`A", /* 192 */},
-{ "'A", /* 193 */},
-{ "^A", /* 194 */},
-{ "~A", /* 195 */},
-{ ":A", /* 196 */},
-{ "oA", /* 197 */},
-{ "AE", /* 198 */},
-{ ",C", /* 199 */},
-{ "`E", /* 200 */},
-{ "'E", /* 201 */},
-{ "^E", /* 202 */},
-{ ":E", /* 203 */},
-{ "`I", /* 204 */},
-{ "'I", /* 205 */},
-{ "^I", /* 206 */},
-{ ":I", /* 207 */},
-{ "-D", /* 208 */},
-{ "~N", /* 209 */},
-{ "`O", /* 210 */},
-{ "'O", /* 211 */},
-{ "^O", /* 212 */},
-{ "~O", /* 213 */},
-{ ":O", /* 214 */},
-{ "tmu", /* 215 */},
-{ "/O", /* 216 */},
-{ "`U", /* 217 */},
-{ "'U", /* 218 */},
-{ "^U", /* 219 */},
-{ ":U", /* 220 */},
-{ "'Y", /* 221 */},
-{ "TP", /* 222 */},
-{ "ss", /* 223 */},
-{ "`a", /* 224 */},
-{ "'a", /* 225 */},
-{ "^a", /* 226 */},
-{ "~a", /* 227 */},
-{ ":a", /* 228 */},
-{ "oa", /* 229 */},
-{ "ae", /* 230 */},
-{ ",c", /* 231 */},
-{ "`e", /* 232 */},
-{ "'e", /* 233 */},
-{ "^e", /* 234 */},
-{ ":e", /* 235 */},
-{ "`i", /* 236 */},
-{ "'i", /* 237 */},
-{ "^i", /* 238 */},
-{ ":i", /* 239 */},
-{ "Sd", /* 240 */},
-{ "~n", /* 241 */},
-{ "`o", /* 242 */},
-{ "'o", /* 243 */},
-{ "^o", /* 244 */},
-{ "~o", /* 245 */},
-{ ":o", /* 246 */},
-{ "tdi", /* 247 */},
-{ "/o", /* 248 */},
-{ "`u", /* 249 */},
-{ "'u", /* 250 */},
-{ "^u", /* 251 */},
-{ ":u", /* 252 */},
-{ "'y", /* 253 */},
-{ "Tp", /* 254 */},
-{ ":y", /* 255 */},
-}};
-
-static DviCharNameMap Adobe_Symbol_map = {
- "adobe-fontspecific",
- 1,
-{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "fa", /* 34 */},
-{ "#", "sh", /* 35 */},
-{ "te", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "st", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "**", /* 42 */},
-{ "+", "pl", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", "mi", /* 45 */},
-{ ".", /* 46 */},
-{ "/", "sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=", "eq", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "=~", /* 64 */},
-{ "*A", /* 65 */},
-{ "*B", /* 66 */},
-{ "*X", /* 67 */},
-{ "*D", /* 68 */},
-{ "*E", /* 69 */},
-{ "*F", /* 70 */},
-{ "*G", /* 71 */},
-{ "*Y", /* 72 */},
-{ "*I", /* 73 */},
-{ "+h", /* 74 */},
-{ "*K", /* 75 */},
-{ "*L", /* 76 */},
-{ "*M", /* 77 */},
-{ "*N", /* 78 */},
-{ "*O", /* 79 */},
-{ "*P", /* 80 */},
-{ "*H", /* 81 */},
-{ "*R", /* 82 */},
-{ "*S", /* 83 */},
-{ "*T", /* 84 */},
-{ 0, /* 85 */},
-{ "ts", /* 86 */},
-{ "*W", /* 87 */},
-{ "*C", /* 88 */},
-{ "*Q", /* 89 */},
-{ "*Z", /* 90 */},
-{ "[", "lB", /* 91 */},
-{ "tf", "3d", /* 92 */},
-{ "]", "rB", /* 93 */},
-{ "pp", /* 94 */},
-{ "_", /* 95 */},
-{ "radicalex", /* 96 */},
-{ "*a", /* 97 */},
-{ "*b", /* 98 */},
-{ "*x", /* 99 */},
-{ "*d", /* 100 */},
-{ "*e", /* 101 */},
-{ "*f", /* 102 */},
-{ "*g", /* 103 */},
-{ "*y", /* 104 */},
-{ "*i", /* 105 */},
-{ "+f", /* 106 */},
-{ "*k", /* 107 */},
-{ "*l", /* 108 */},
-{ "*m", /* 109 */},
-{ "*n", /* 110 */},
-{ "*o", /* 111 */},
-{ "*p", /* 112 */},
-{ "*h", /* 113 */},
-{ "*r", /* 114 */},
-{ "*s", /* 115 */},
-{ "*t", /* 116 */},
-{ "*u", /* 117 */},
-{ "+p", /* 118 */},
-{ "*w", /* 119 */},
-{ "*c", /* 120 */},
-{ "*q", /* 121 */},
-{ "*z", /* 122 */},
-{ "lC", "{", /* 123 */},
-{ "ba", "|", /* 124 */},
-{ "rC", "}", /* 125 */},
-{ "ap", /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "*U", /* 161 */},
-{ "fm", /* 162 */},
-{ "<=", /* 163 */},
-{ "f/", /* 164 */},
-{ "if", /* 165 */},
-{ "Fn", /* 166 */},
-{ "CL", /* 167 */},
-{ "DI", /* 168 */},
-{ "HE", /* 169 */},
-{ "SP", /* 170 */},
-{ "<>", /* 171 */},
-{ "<-", /* 172 */},
-{ "ua", "arrowverttp", /* 173 */},
-{ "->", /* 174 */},
-{ "da", "arrowvertbt", /* 175 */},
-{ "de", /* 176 */},
-{ "+-", /* 177 */},
-{ "sd", /* 178 */},
-{ ">=", /* 179 */},
-{ "mu", /* 180 */},
-{ "pt", /* 181 */},
-{ "pd", /* 182 */},
-{ "bu", /* 183 */},
-{ "di", /* 184 */},
-{ "!=", /* 185 */},
-{ "==", /* 186 */},
-{ "~=", "~~", /* 187 */},
-{ 0, /* 188 */},
-{ "arrowvertex", /* 189 */},
-{ "an", /* 190 */},
-{ "CR", /* 191 */},
-{ "Ah", /* 192 */},
-{ "Im", /* 193 */},
-{ "Re", /* 194 */},
-{ "wp", /* 195 */},
-{ "c*", /* 196 */},
-{ "c+", /* 197 */},
-{ "es", /* 198 */},
-{ "ca", /* 199 */},
-{ "cu", /* 200 */},
-{ "sp", /* 201 */},
-{ "ip", /* 202 */},
-{ "nb", /* 203 */},
-{ "sb", /* 204 */},
-{ "ib", /* 205 */},
-{ "mo", /* 206 */},
-{ "nm", /* 207 */},
-{ "/_", /* 208 */},
-{ "gr", /* 209 */},
-{ "rg", /* 210 */},
-{ "co", /* 211 */},
-{ "tm", /* 212 */},
-{ 0, /* 213 */},
-{ "sr", "sqrt", /* 214 */},
-{ "md", /* 215 */},
-{ "no", /* 216 */},
-{ "AN", /* 217 */},
-{ "OR", /* 218 */},
-{ "hA", /* 219 */},
-{ "lA", /* 220 */},
-{ "uA", /* 221 */},
-{ "rA", /* 222 */},
-{ "dA", /* 223 */},
-{ "lz", /* 224 */},
-{ "la", /* 225 */},
-{ 0, /* 226 */},
-{ 0, /* 227 */},
-{ 0, /* 228 */},
-{ 0, /* 229 */},
-{ "parenlefttp", /* 230 */},
-{ "parenleftex", /* 231 */},
-{ "parenleftbt", /* 232 */},
-{ "bracketlefttp", "lc", /* 233 */},
-{ "bracketleftex", /* 234 */},
-{ "bracketleftbt", "lf", /* 235 */},
-{ "bracelefttp", "lt", /* 236 */},
-{ "braceleftmid", "lk", /* 237 */},
-{ "braceleftbt", "lb", /* 238 */},
-{ "bracerightex", "braceleftex", "braceex", "bv", /* 239 */},
-{ 0, /* 240 */},
-{ "ra", /* 241 */},
-{ "is", "integral", /* 242 */},
-{ 0, /* 243 */},
-{ 0, /* 244 */},
-{ 0, /* 245 */},
-{ "parenrighttp", /* 246 */},
-{ "parenrightex", /* 247 */},
-{ "parenrightbt", /* 248 */},
-{ "bracketrighttp", "rc", /* 249 */},
-{ "bracketrightex", /* 250 */},
-{ "bracketrightbt", "rf", /* 251 */},
-{ "bracerighttp", "rt", /* 252 */},
-{ "bracerightmid", "rk", /* 253 */},
-{ "bracerightbt", "rb", /* 254 */},
-{ 0, /* 255 */},
-}};
-
-
-static void
-load_standard_maps (void)
-{
- standard_maps_loaded = 1;
- DviRegisterMap (&ISO8859_1_map);
- DviRegisterMap (&Adobe_Symbol_map);
-}
diff --git a/contrib/groff/src/libs/libxutil/Makefile.sub b/contrib/groff/src/libs/libxutil/Makefile.sub
deleted file mode 100644
index 24444a68048f..000000000000
--- a/contrib/groff/src/libs/libxutil/Makefile.sub
+++ /dev/null
@@ -1,10 +0,0 @@
-LIB=xutil
-EXTRA_CFLAGS=$(X_CFLAGS)
-OBJS=\
- DviChar.$(OBJEXT) \
- XFontName.$(OBJEXT) \
- xmalloc.$(OBJEXT)
-CSRCS=\
- $(srcdir)/DviChar.c \
- $(srcdir)/XFontName.c \
- $(srcdir)/xmalloc.c
diff --git a/contrib/groff/src/libs/libxutil/XFontName.c b/contrib/groff/src/libs/libxutil/XFontName.c
deleted file mode 100644
index 7ed78ae42252..000000000000
--- a/contrib/groff/src/libs/libxutil/XFontName.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * XFontName.c
- *
- * build/parse X Font name strings
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xos.h>
-#include "XFontName.h"
-#include <ctype.h>
-
-static char *
-extractStringField (char *name, char *buffer, int size,
- unsigned int *attrp, unsigned int bit)
-{
- char *buf = buffer;
-
- if (!*name)
- return 0;
- while (*name && *name != '-' && size > 0) {
- *buf++ = *name++;
- --size;
- }
- if (size <= 0)
- return 0;
- *buf = '\0';
- if (buffer[0] != '*' || buffer[1] != '\0')
- *attrp |= bit;
- if (*name == '-')
- return name+1;
- return name;
-}
-
-static char *
-extractUnsignedField (char *name, unsigned int *result,
- unsigned int *attrp, unsigned int bit)
-{
- char buf[256];
- char *c;
- unsigned int i;
-
- name = extractStringField (name, buf, sizeof (buf), attrp, bit);
- if (!name)
- return 0;
- if (!(*attrp & bit))
- return name;
- i = 0;
- for (c = buf; *c; c++) {
- if (!isdigit (*c))
- return 0;
- i = i * 10 + (*c - '0');
- }
- *result = i;
- return name;
-}
-
-Bool
-XParseFontName (XFontNameString fontNameString, XFontName *fontName,
- unsigned int *fontNameAttributes)
-{
- char *name = fontNameString;
- XFontName temp;
- unsigned int attributes = 0;
-
-#define GetString(field,bit)\
- if (!(name = extractStringField \
- (name, temp.field, sizeof (temp.field),\
- &attributes, bit))) \
- return False;
-
-#define GetUnsigned(field,bit)\
- if (!(name = extractUnsignedField \
- (name, &temp.field, \
- &attributes, bit))) \
- return False;
-
- GetString (Registry, FontNameRegistry)
- GetString (Foundry, FontNameFoundry)
- GetString (FamilyName, FontNameFamilyName)
- GetString (WeightName, FontNameWeightName)
- GetString (Slant, FontNameSlant)
- GetString (SetwidthName, FontNameSetwidthName)
- GetString (AddStyleName, FontNameAddStyleName)
- GetUnsigned (PixelSize, FontNamePixelSize)
- GetUnsigned (PointSize, FontNamePointSize)
- GetUnsigned (ResolutionX, FontNameResolutionX)
- GetUnsigned (ResolutionY, FontNameResolutionY)
- GetString (Spacing, FontNameSpacing)
- GetUnsigned (AverageWidth, FontNameAverageWidth)
- GetString (CharSetRegistry, FontNameCharSetRegistry)
- if (!*name) {
- temp.CharSetEncoding[0] = '\0';
- attributes |= FontNameCharSetEncoding;
- } else {
- GetString (CharSetEncoding, FontNameCharSetEncoding)
- }
- *fontName = temp;
- *fontNameAttributes = attributes;
- return True;
-}
-
-static char *
-utoa (unsigned int u, char *s, int size)
-{
- char *t;
-
- t = s + size;
- *--t = '\0';
- do
- *--t = (u % 10) + '0';
- while (u /= 10);
- return t;
-}
-
-Bool
-XFormatFontName (XFontName *fontName, unsigned int fontNameAttributes,
- XFontNameString fontNameString)
-{
- char tmp[256];
- char *name = tmp, *f;
- int left = sizeof (tmp) - 1;
- char number[32];
-
-#define PutString(field, bit)\
- f = (fontNameAttributes & bit) ? \
- fontName->field \
- : (char *)"*"; \
- if ((left -= strlen (f)) < 0) \
- return False; \
- while (*f) \
- if ((*name++ = *f++) == '-') \
- return False;
-#define PutHyphen()\
- if (--left < 0) \
- return False; \
- *name++ = '-';
-
-#define PutUnsigned(field, bit) \
- f = (fontNameAttributes & bit) ? \
- utoa (fontName->field, number, sizeof (number)) \
- : (char *)"*"; \
- if ((left -= strlen (f)) < 0) \
- return False; \
- while (*f) \
- *name++ = *f++;
-
- PutString (Registry, FontNameRegistry)
- PutHyphen ();
- PutString (Foundry, FontNameFoundry)
- PutHyphen ();
- PutString (FamilyName, FontNameFamilyName)
- PutHyphen ();
- PutString (WeightName, FontNameWeightName)
- PutHyphen ();
- PutString (Slant, FontNameSlant)
- PutHyphen ();
- PutString (SetwidthName, FontNameSetwidthName)
- PutHyphen ();
- PutString (AddStyleName, FontNameAddStyleName)
- PutHyphen ();
- PutUnsigned (PixelSize, FontNamePixelSize)
- PutHyphen ();
- PutUnsigned (PointSize, FontNamePointSize)
- PutHyphen ();
- PutUnsigned (ResolutionX, FontNameResolutionX)
- PutHyphen ();
- PutUnsigned (ResolutionY, FontNameResolutionY)
- PutHyphen ();
- PutString (Spacing, FontNameSpacing)
- PutHyphen ();
- PutUnsigned (AverageWidth, FontNameAverageWidth)
- PutHyphen ();
- PutString (CharSetRegistry, FontNameCharSetRegistry)
- PutHyphen ();
- PutString (CharSetEncoding, FontNameCharSetEncoding)
- *name = '\0';
- strcpy (fontNameString, tmp);
- return True;
-}
-
-Bool
-XCompareFontName (XFontName *name1, XFontName *name2,
- unsigned int fontNameAttributes)
-{
-#define CompareString(field,bit) \
- if (fontNameAttributes & bit) \
- if (strcmp (name1->field, name2->field)) \
- return False;
-
-#define CompareUnsigned(field,bit) \
- if (fontNameAttributes & bit) \
- if (name1->field != name2->field) \
- return False;
-
- CompareString (Registry, FontNameRegistry)
- CompareString (Foundry, FontNameFoundry)
- CompareString (FamilyName, FontNameFamilyName)
- CompareString (WeightName, FontNameWeightName)
- CompareString (Slant, FontNameSlant)
- CompareString (SetwidthName, FontNameSetwidthName)
- CompareString (AddStyleName, FontNameAddStyleName)
- CompareUnsigned (PixelSize, FontNamePixelSize)
- CompareUnsigned (PointSize, FontNamePointSize)
- CompareUnsigned (ResolutionX, FontNameResolutionX)
- CompareUnsigned (ResolutionY, FontNameResolutionY)
- CompareString (Spacing, FontNameSpacing)
- CompareUnsigned (AverageWidth, FontNameAverageWidth)
- CompareString (CharSetRegistry, FontNameCharSetRegistry)
- CompareString (CharSetEncoding, FontNameCharSetEncoding)
- return True;
-}
-
-Bool
-XCopyFontName (XFontName *name1, XFontName *name2,
- unsigned int fontNameAttributes)
-{
-#define CopyString(field,bit) \
- if (fontNameAttributes & bit) \
- strcpy (name2->field, name1->field);
-
-#define CopyUnsigned(field,bit) \
- if (fontNameAttributes & bit) \
- name2->field = name1->field;
-
- CopyString (Registry, FontNameRegistry)
- CopyString (Foundry, FontNameFoundry)
- CopyString (FamilyName, FontNameFamilyName)
- CopyString (WeightName, FontNameWeightName)
- CopyString (Slant, FontNameSlant)
- CopyString (SetwidthName, FontNameSetwidthName)
- CopyString (AddStyleName, FontNameAddStyleName)
- CopyUnsigned (PixelSize, FontNamePixelSize)
- CopyUnsigned (PointSize, FontNamePointSize)
- CopyUnsigned (ResolutionX, FontNameResolutionX)
- CopyUnsigned (ResolutionY, FontNameResolutionY)
- CopyString (Spacing, FontNameSpacing)
- CopyUnsigned (AverageWidth, FontNameAverageWidth)
- CopyString (CharSetRegistry, FontNameCharSetRegistry)
- CopyString (CharSetEncoding, FontNameCharSetEncoding)
- return True;
-}
diff --git a/contrib/groff/src/libs/libxutil/xmalloc.c b/contrib/groff/src/libs/libxutil/xmalloc.c
deleted file mode 100644
index f31056bfd735..000000000000
--- a/contrib/groff/src/libs/libxutil/xmalloc.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <X11/Xlib.h>
-#include <X11/Intrinsic.h>
-
-char *xmalloc(int n)
-{
- return XtMalloc(n);
-}
diff --git a/contrib/groff/src/preproc/eqn/Makefile.sub b/contrib/groff/src/preproc/eqn/Makefile.sub
deleted file mode 100644
index 9028f94c8895..000000000000
--- a/contrib/groff/src/preproc/eqn/Makefile.sub
+++ /dev/null
@@ -1,60 +0,0 @@
-PROG=eqn$(EXEEXT)
-MAN1=eqn.n neqn.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- eqn.$(OBJEXT) \
- main.$(OBJEXT) \
- lex.$(OBJEXT) \
- box.$(OBJEXT) \
- limit.$(OBJEXT) \
- list.$(OBJEXT) \
- over.$(OBJEXT) \
- text.$(OBJEXT) \
- script.$(OBJEXT) \
- mark.$(OBJEXT) \
- other.$(OBJEXT) \
- delim.$(OBJEXT) \
- sqrt.$(OBJEXT) \
- pile.$(OBJEXT) \
- special.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/main.cpp \
- $(srcdir)/lex.cpp \
- $(srcdir)/box.cpp \
- $(srcdir)/limit.cpp \
- $(srcdir)/list.cpp \
- $(srcdir)/over.cpp \
- $(srcdir)/text.cpp \
- $(srcdir)/script.cpp \
- $(srcdir)/mark.cpp \
- $(srcdir)/other.cpp \
- $(srcdir)/delim.cpp \
- $(srcdir)/sqrt.cpp \
- $(srcdir)/pile.cpp \
- $(srcdir)/special.cpp
-HDRS=\
- $(srcdir)/box.h \
- $(srcdir)/eqn.h \
- $(srcdir)/pbox.h
-GRAM=$(srcdir)/eqn.y
-YTABC=eqn.cpp
-YTABH=eqn_tab.h
-NAMEPREFIX=$(g)
-CLEANADD=neqn
-
-all: neqn
-
-neqn: neqn.sh $(SH_DEPS_SED_SCRIPT)
- -rm -f $@
- sed -e 's/@g@/$(g)/g' \
- -f $(SH_DEPS_SED_SCRIPT) \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/neqn.sh >$@
- chmod +x $@
-
-install_data: neqn
- -rm -f $(bindir)/$(NAMEPREFIX)neqn
- $(INSTALL_SCRIPT) neqn $(bindir)/$(NAMEPREFIX)neqn
-
-uninstall_sub:
- -rm -f $(bindir)/$(NAMEPREFIX)neqn
diff --git a/contrib/groff/src/preproc/eqn/TODO b/contrib/groff/src/preproc/eqn/TODO
deleted file mode 100644
index 210d0ab06e4d..000000000000
--- a/contrib/groff/src/preproc/eqn/TODO
+++ /dev/null
@@ -1,49 +0,0 @@
-Use the same size increases for sum prod int as eqn does.
-
-Perhaps chartype should be renamed.
-
-TeX makes {sub,super}script on a single character with an accent
-into an accent onto the (character with the script). Should we do this?
-
-Implement mark and lineups within scripts, matrices and piles, and accents.
-(Why would this be useful?)
-
-Perhaps push hmotions down through lists to avoid upsetting spacing
-adjustments.
-
-Possibly generate .lf commands during compute_metrics phase.
-
-Consider whether there should be extra space at the side of piles.
-
-Provide scriptstyle displaystyle etc.
-
-Provide a nicer matrix syntax, eg
-matrix ccc {
-a then b then c above
-e then f then g above
-h then i then k
-}
-
-Perhaps generate syntax error messages using the style of gpic.
-
-Wide accents.
-
-More use of \Z.
-
-Extensible square roots.
-
-Vphantom
-
-Smash.
-
-Provide a variant of vec that extends over the length of the accentee.
-
-Support vertical arrow delimiters.
-
-Make the following work:
-.EQ
-delim @@
-.EN
-.EQ @<-@
-some equation
-.EN
diff --git a/contrib/groff/src/preproc/eqn/box.cpp b/contrib/groff/src/preproc/eqn/box.cpp
deleted file mode 100644
index 953218a68da0..000000000000
--- a/contrib/groff/src/preproc/eqn/box.cpp
+++ /dev/null
@@ -1,612 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-const char *current_roman_font;
-
-char *gfont = 0;
-char *grfont = 0;
-char *gbfont = 0;
-int gsize = 0;
-
-int script_size_reduction = -1; // negative means reduce by a percentage
-
-int positive_space = -1;
-int negative_space = -1;
-
-int minimum_size = 5;
-
-int fat_offset = 4;
-int body_height = 85;
-int body_depth = 35;
-
-int over_hang = 0;
-int accent_width = 31;
-int delimiter_factor = 900;
-int delimiter_shortfall = 50;
-
-int null_delimiter_space = 12;
-int script_space = 5;
-int thin_space = 17;
-int medium_space = 22;
-int thick_space = 28;
-
-int num1 = 70;
-int num2 = 40;
-// we don't use num3, because we don't have \atop
-int denom1 = 70;
-int denom2 = 36;
-int axis_height = 26; // in 100ths of an em
-int sup1 = 42;
-int sup2 = 37;
-int sup3 = 28;
-int default_rule_thickness = 4;
-int sub1 = 20;
-int sub2 = 23;
-int sup_drop = 38;
-int sub_drop = 5;
-int x_height = 45;
-int big_op_spacing1 = 11;
-int big_op_spacing2 = 17;
-int big_op_spacing3 = 20;
-int big_op_spacing4 = 60;
-int big_op_spacing5 = 10;
-
-// These are for piles and matrices.
-
-int baseline_sep = 140; // = num1 + denom1
-int shift_down = 26; // = axis_height
-int column_sep = 100; // = em space
-int matrix_side_sep = 17; // = thin space
-
-int nroff = 0; // should we grok ndefine or tdefine?
-
-struct S {
- const char *name;
- int *ptr;
-} param_table[] = {
- { "fat_offset", &fat_offset },
- { "over_hang", &over_hang },
- { "accent_width", &accent_width },
- { "delimiter_factor", &delimiter_factor },
- { "delimiter_shortfall", &delimiter_shortfall },
- { "null_delimiter_space", &null_delimiter_space },
- { "script_space", &script_space },
- { "thin_space", &thin_space },
- { "medium_space", &medium_space },
- { "thick_space", &thick_space },
- { "num1", &num1 },
- { "num2", &num2 },
- { "denom1", &denom1 },
- { "denom2", &denom2 },
- { "axis_height", &axis_height },
- { "sup1", &sup1 },
- { "sup2", &sup2 },
- { "sup3", &sup3 },
- { "default_rule_thickness", &default_rule_thickness },
- { "sub1", &sub1 },
- { "sub2", &sub2 },
- { "sup_drop", &sup_drop },
- { "sub_drop", &sub_drop },
- { "x_height", &x_height },
- { "big_op_spacing1", &big_op_spacing1 },
- { "big_op_spacing2", &big_op_spacing2 },
- { "big_op_spacing3", &big_op_spacing3 },
- { "big_op_spacing4", &big_op_spacing4 },
- { "big_op_spacing5", &big_op_spacing5 },
- { "minimum_size", &minimum_size },
- { "baseline_sep", &baseline_sep },
- { "shift_down", &shift_down },
- { "column_sep", &column_sep },
- { "matrix_side_sep", &matrix_side_sep },
- { "draw_lines", &draw_flag },
- { "body_height", &body_height },
- { "body_depth", &body_depth },
- { "nroff", &nroff },
- { 0, 0 }
-};
-
-void set_param(const char *name, int value)
-{
- for (int i = 0; param_table[i].name != 0; i++)
- if (strcmp(param_table[i].name, name) == 0) {
- *param_table[i].ptr = value;
- return;
- }
- error("unrecognised parameter `%1'", name);
-}
-
-int script_style(int style)
-{
- return style > SCRIPT_STYLE ? style - 2 : style;
-}
-
-int cramped_style(int style)
-{
- return (style & 1) ? style - 1 : style;
-}
-
-void set_space(int n)
-{
- if (n < 0)
- negative_space = -n;
- else
- positive_space = n;
-}
-
-// Return 0 if the specified size is bad.
-// The caller is responsible for giving the error message.
-
-int set_gsize(const char *s)
-{
- const char *p = (*s == '+' || *s == '-') ? s + 1 : s;
- char *end;
- long n = strtol(p, &end, 10);
- if (n <= 0 || *end != '\0' || n > INT_MAX)
- return 0;
- if (p > s) {
- if (!gsize)
- gsize = 10;
- if (*s == '+') {
- if (gsize > INT_MAX - n)
- return 0;
- gsize += int(n);
- }
- else {
- if (gsize - n <= 0)
- return 0;
- gsize -= int(n);
- }
- }
- else
- gsize = int(n);
- return 1;
-}
-
-void set_script_reduction(int n)
-{
- script_size_reduction = n;
-}
-
-const char *get_gfont()
-{
- return gfont ? gfont : "I";
-}
-
-const char *get_grfont()
-{
- return grfont ? grfont : "R";
-}
-
-const char *get_gbfont()
-{
- return gbfont ? gbfont : "B";
-}
-
-void set_gfont(const char *s)
-{
- a_delete gfont;
- gfont = strsave(s);
-}
-
-void set_grfont(const char *s)
-{
- a_delete grfont;
- grfont = strsave(s);
-}
-
-void set_gbfont(const char *s)
-{
- a_delete gbfont;
- gbfont = strsave(s);
-}
-
-// this must be precisely 2 characters in length
-#define COMPATIBLE_REG "0C"
-
-void start_string()
-{
- printf(".nr " COMPATIBLE_REG " \\n(.C\n");
- printf(".cp 0\n");
- printf(".ds " LINE_STRING "\n");
-}
-
-void output_string()
-{
- printf("\\*(" LINE_STRING "\n");
-}
-
-void restore_compatibility()
-{
- printf(".cp \\n(" COMPATIBLE_REG "\n");
-}
-
-void do_text(const char *s)
-{
- printf(".eo\n");
- printf(".as " LINE_STRING " \"%s\n", s);
- printf(".ec\n");
-}
-
-void set_minimum_size(int n)
-{
- minimum_size = n;
-}
-
-void set_script_size()
-{
- if (minimum_size < 0)
- minimum_size = 0;
- if (script_size_reduction >= 0)
- printf(".ps \\n[.s]-%d>?%d\n", script_size_reduction, minimum_size);
- else
- printf(".ps (u;\\n[.ps]*7+5/10>?%d)\n", minimum_size);
-}
-
-int box::next_uid = 0;
-
-box::box() : spacing_type(ORDINARY_TYPE), uid(next_uid++)
-{
-}
-
-box::~box()
-{
-}
-
-void box::top_level()
-{
- // debug_print();
- // putc('\n', stderr);
- box *b = this;
- printf(".nr " SAVED_FONT_REG " \\n[.f]\n");
- printf(".ft\n");
- printf(".nr " SAVED_PREV_FONT_REG " \\n[.f]\n");
- printf(".ft %s\n", get_gfont());
- printf(".nr " SAVED_SIZE_REG " \\n[.ps]\n");
- if (gsize > 0) {
- char buf[INT_DIGITS + 1];
- sprintf(buf, "%d", gsize);
- b = new size_box(strsave(buf), b);
- }
- current_roman_font = get_grfont();
- // This catches tabs used within \Z (which aren't allowed).
- b->check_tabs(0);
- int r = b->compute_metrics(DISPLAY_STYLE);
- printf(".ft \\n[" SAVED_PREV_FONT_REG "]\n");
- printf(".ft \\n[" SAVED_FONT_REG "]\n");
- printf(".nr " MARK_OR_LINEUP_FLAG_REG " %d\n", r);
- if (r == FOUND_MARK) {
- printf(".nr " SAVED_MARK_REG " \\n[" MARK_REG "]\n");
- printf(".nr " MARK_WIDTH_REG " 0\\n[" WIDTH_FORMAT "]\n", b->uid);
- }
- else if (r == FOUND_LINEUP)
- printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n["
- SAVED_MARK_REG "]u-\\n[" MARK_REG "]u'\n");
- else
- assert(r == FOUND_NOTHING);
- // The problem here is that the argument to \f is read in copy mode,
- // so we cannot use \E there; so we hide it in a string instead.
- // Another problem is that if we use \R directly, then the space will
- // prevent it working in a macro argument.
- printf(".ds " SAVE_FONT_STRING " "
- "\\R'" SAVED_INLINE_FONT_REG " \\\\n[.f]'"
- "\\fP"
- "\\R'" SAVED_INLINE_PREV_FONT_REG " \\\\n[.f]'"
- "\\R'" SAVED_INLINE_SIZE_REG " \\\\n[.ps]'"
- "\\s0"
- "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\\\n[.ps]'"
- "\n"
- ".ds " RESTORE_FONT_STRING " "
- "\\f[\\\\n[" SAVED_INLINE_PREV_FONT_REG "]]"
- "\\f[\\\\n[" SAVED_INLINE_FONT_REG "]]"
- "\\s'\\\\n[" SAVED_INLINE_PREV_SIZE_REG "]u'"
- "\\s'\\\\n[" SAVED_INLINE_SIZE_REG "]u'"
- "\n");
- printf(".as1 " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]");
- printf("\\f[%s]", get_gfont());
- printf("\\s'\\En[" SAVED_SIZE_REG "]u'");
- current_roman_font = get_grfont();
- b->output();
- printf("\\E*[" RESTORE_FONT_STRING "]\n");
- if (r == FOUND_LINEUP)
- printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n["
- MARK_WIDTH_REG "]u-\\n[" SAVED_MARK_REG "]u-(\\n["
- WIDTH_FORMAT "]u-\\n[" MARK_REG "]u)'\n",
- b->uid);
- b->extra_space();
- if (!inline_flag)
- printf(".ne \\n[" HEIGHT_FORMAT "]u-%dM>?0+(\\n["
- DEPTH_FORMAT "]u-%dM>?0)\n",
- b->uid, body_height, b->uid, body_depth);
- delete b;
- next_uid = 0;
-}
-
-// gpic defines this register so as to make geqn not produce `\x's
-#define EQN_NO_EXTRA_SPACE_REG "0x"
-
-void box::extra_space()
-{
- printf(".if !r" EQN_NO_EXTRA_SPACE_REG " "
- ".nr " EQN_NO_EXTRA_SPACE_REG " 0\n");
- if (positive_space >= 0 || negative_space >= 0) {
- if (positive_space > 0)
- printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".as1 " LINE_STRING " \\x'-%dM'\n", positive_space);
- if (negative_space > 0)
- printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".as1 " LINE_STRING " \\x'%dM'\n", negative_space);
- positive_space = negative_space = -1;
- }
- else {
- printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".if \\n[" HEIGHT_FORMAT "]>%dM .as1 " LINE_STRING
- " \\x'-(\\n[" HEIGHT_FORMAT
- "]u-%dM)'\n",
- uid, body_height, uid, body_height);
- printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".if \\n[" DEPTH_FORMAT "]>%dM .as1 " LINE_STRING
- " \\x'\\n[" DEPTH_FORMAT
- "]u-%dM'\n",
- uid, body_depth, uid, body_depth);
- }
-}
-
-int box::compute_metrics(int)
-{
- printf(".nr " WIDTH_FORMAT " 0\n", uid);
- printf(".nr " HEIGHT_FORMAT " 0\n", uid);
- printf(".nr " DEPTH_FORMAT " 0\n", uid);
- return FOUND_NOTHING;
-}
-
-void box::compute_subscript_kern()
-{
- printf(".nr " SUB_KERN_FORMAT " 0\n", uid);
-}
-
-void box::compute_skew()
-{
- printf(".nr " SKEW_FORMAT " 0\n", uid);
-}
-
-void box::output()
-{
-}
-
-void box::check_tabs(int)
-{
-}
-
-int box::is_char()
-{
- return 0;
-}
-
-int box::left_is_italic()
-{
- return 0;
-}
-
-int box::right_is_italic()
-{
- return 0;
-}
-
-void box::hint(unsigned)
-{
-}
-
-void box::handle_char_type(int, int)
-{
-}
-
-
-box_list::box_list(box *pp)
-{
- p = new box*[10];
- for (int i = 0; i < 10; i++)
- p[i] = 0;
- maxlen = 10;
- len = 1;
- p[0] = pp;
-}
-
-void box_list::append(box *pp)
-{
- if (len + 1 > maxlen) {
- box **oldp = p;
- maxlen *= 2;
- p = new box*[maxlen];
- memcpy(p, oldp, sizeof(box*)*len);
- a_delete oldp;
- }
- p[len++] = pp;
-}
-
-box_list::~box_list()
-{
- for (int i = 0; i < len; i++)
- delete p[i];
- a_delete p;
-}
-
-void box_list::list_check_tabs(int level)
-{
- for (int i = 0; i < len; i++)
- p[i]->check_tabs(level);
-}
-
-
-pointer_box::pointer_box(box *pp) : p(pp)
-{
- spacing_type = p->spacing_type;
-}
-
-pointer_box::~pointer_box()
-{
- delete p;
-}
-
-int pointer_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void pointer_box::compute_subscript_kern()
-{
- p->compute_subscript_kern();
- printf(".nr " SUB_KERN_FORMAT " \\n[" SUB_KERN_FORMAT "]\n", uid, p->uid);
-}
-
-void pointer_box::compute_skew()
-{
- p->compute_skew();
- printf(".nr " SKEW_FORMAT " 0\\n[" SKEW_FORMAT "]\n",
- uid, p->uid);
-}
-
-void pointer_box::check_tabs(int level)
-{
- p->check_tabs(level);
-}
-
-int simple_box::compute_metrics(int)
-{
- printf(".nr " WIDTH_FORMAT " 0\\w" DELIMITER_CHAR, uid);
- output();
- printf(DELIMITER_CHAR "\n");
- printf(".nr " HEIGHT_FORMAT " 0>?\\n[rst]\n", uid);
- printf(".nr " DEPTH_FORMAT " 0-\\n[rsb]>?0\n", uid);
- printf(".nr " SUB_KERN_FORMAT " 0-\\n[ssc]>?0\n", uid);
- printf(".nr " SKEW_FORMAT " 0\\n[skw]\n", uid);
- return FOUND_NOTHING;
-}
-
-void simple_box::compute_subscript_kern()
-{
- // do nothing, we already computed it in do_metrics
-}
-
-void simple_box::compute_skew()
-{
- // do nothing, we already computed it in do_metrics
-}
-
-int box::is_simple()
-{
- return 0;
-}
-
-int simple_box::is_simple()
-{
- return 1;
-}
-
-quoted_text_box::quoted_text_box(char *s) : text(s)
-{
-}
-
-quoted_text_box::~quoted_text_box()
-{
- a_delete text;
-}
-
-void quoted_text_box::output()
-{
- if (text)
- fputs(text, stdout);
-}
-
-tab_box::tab_box() : disabled(0)
-{
-}
-
-// We treat a tab_box as having width 0 for width computations.
-
-void tab_box::output()
-{
- if (!disabled)
- printf("\\t");
-}
-
-void tab_box::check_tabs(int level)
-{
- if (level > 0) {
- error("tabs allowed only at outermost level");
- disabled = 1;
- }
-}
-
-space_box::space_box()
-{
- spacing_type = SUPPRESS_TYPE;
-}
-
-void space_box::output()
-{
- printf("\\h'%dM'", thick_space);
-}
-
-half_space_box::half_space_box()
-{
- spacing_type = SUPPRESS_TYPE;
-}
-
-void half_space_box::output()
-{
- printf("\\h'%dM'", thin_space);
-}
-
-void box_list::list_debug_print(const char *sep)
-{
- p[0]->debug_print();
- for (int i = 1; i < len; i++) {
- fprintf(stderr, "%s", sep);
- p[i]->debug_print();
- }
-}
-
-void quoted_text_box::debug_print()
-{
- fprintf(stderr, "\"%s\"", (text ? text : ""));
-}
-
-void half_space_box::debug_print()
-{
- fprintf(stderr, "^");
-}
-
-void space_box::debug_print()
-{
- fprintf(stderr, "~");
-}
-
-void tab_box::debug_print()
-{
- fprintf(stderr, "<tab>");
-}
diff --git a/contrib/groff/src/preproc/eqn/box.h b/contrib/groff/src/preproc/eqn/box.h
deleted file mode 100644
index 94842077039a..000000000000
--- a/contrib/groff/src/preproc/eqn/box.h
+++ /dev/null
@@ -1,280 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class list_box;
-
-class box {
-private:
- static int next_uid;
-public:
- int spacing_type;
- const int uid;
- box();
- virtual void debug_print() = 0;
- virtual ~box();
- void top_level();
- virtual int compute_metrics(int);
- virtual void compute_subscript_kern();
- virtual void compute_skew();
- virtual void output();
- void extra_space();
- virtual list_box *to_list_box();
- virtual int is_simple();
- virtual int is_char();
- virtual int left_is_italic();
- virtual int right_is_italic();
- virtual void handle_char_type(int, int);
- enum { FOUND_NOTHING = 0, FOUND_MARK = 1, FOUND_LINEUP = 2 };
- void set_spacing_type(char *type);
- virtual void hint(unsigned);
- virtual void check_tabs(int);
-};
-
-class box_list {
-private:
- int maxlen;
-public:
- box **p;
- int len;
-
- box_list(box *);
- ~box_list();
- void append(box *);
- void list_check_tabs(int);
- void list_debug_print(const char *sep);
- friend class list_box;
-};
-
-// declarations to avoid friend name injection problems
-box *make_script_box(box *, box *, box *);
-box *make_mark_box(box *);
-box *make_lineup_box(box *);
-
-class list_box : public box {
- int is_script;
- box_list list;
- int sty;
-public:
- list_box(box *);
- void debug_print();
- int compute_metrics(int);
- void compute_subscript_kern();
- void output();
- void check_tabs(int);
- void append(box *);
- list_box *to_list_box();
- void handle_char_type(int, int);
- void compute_sublist_width(int n);
- friend box *make_script_box(box *, box *, box *);
- friend box *make_mark_box(box *);
- friend box *make_lineup_box(box *);
-};
-
-enum alignment { LEFT_ALIGN, RIGHT_ALIGN, CENTER_ALIGN };
-
-class column : public box_list {
- alignment align;
- int space;
-public:
- column(box *);
- void set_alignment(alignment);
- void set_space(int);
- void debug_print(const char *);
-
- friend class matrix_box;
- friend class pile_box;
-};
-
-class pile_box : public box {
- column col;
-public:
- pile_box(box *);
- int compute_metrics(int);
- void output();
- void debug_print();
- void check_tabs(int);
- void set_alignment(alignment a) { col.set_alignment(a); }
- void set_space(int n) { col.set_space(n); }
- void append(box *p) { col.append(p); }
-};
-
-class matrix_box : public box {
-private:
- int len;
- int maxlen;
- column **p;
-public:
- matrix_box(column *);
- ~matrix_box();
- void append(column *);
- int compute_metrics(int);
- void output();
- void check_tabs(int);
- void debug_print();
-};
-
-class pointer_box : public box {
-protected:
- box *p;
-public:
- pointer_box(box *);
- ~pointer_box();
- int compute_metrics(int);
- void compute_subscript_kern();
- void compute_skew();
- void debug_print() = 0;
- void check_tabs(int);
-};
-
-class vcenter_box : public pointer_box {
-public:
- vcenter_box(box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-class simple_box : public box {
-public:
- int compute_metrics(int);
- void compute_subscript_kern();
- void compute_skew();
- void output() = 0;
- void debug_print() = 0;
- int is_simple();
-};
-
-class quoted_text_box : public simple_box {
- char *text;
-public:
- quoted_text_box(char *);
- ~quoted_text_box();
- void debug_print();
- void output();
-};
-
-class half_space_box : public simple_box {
-public:
- half_space_box();
- void output();
- void debug_print();
-};
-
-class space_box : public simple_box {
-public:
- space_box();
- void output();
- void debug_print();
-};
-
-class tab_box : public box {
- int disabled;
-public:
- tab_box();
- void output();
- void debug_print();
- void check_tabs(int);
-};
-
-class size_box : public pointer_box {
-private:
- char *size;
-public:
- size_box(char *, box *);
- ~size_box();
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-class font_box : public pointer_box {
-private:
- char *f;
-public:
- font_box(char *, box *);
- ~font_box();
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-class fat_box : public pointer_box {
-public:
- fat_box(box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-class vmotion_box : public pointer_box {
-private:
- int n; // up is >= 0
-public:
- vmotion_box(int, box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-class hmotion_box : public pointer_box {
- int n;
-public:
- hmotion_box(int, box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-box *split_text(char *);
-box *make_delim_box(char *, box *, char *);
-box *make_sqrt_box(box *);
-box *make_prime_box(box *);
-box *make_over_box(box *, box *);
-box *make_small_over_box(box *, box *);
-box *make_limit_box(box *, box *, box *);
-box *make_accent_box(box *, box *);
-box *make_uaccent_box(box *, box *);
-box *make_overline_box(box *);
-box *make_underline_box(box *);
-box *make_special_box(char *, box *);
-
-void set_space(int);
-int set_gsize(const char *);
-void set_gfont(const char *);
-void set_grfont(const char *);
-void set_gbfont(const char *);
-const char *get_gfont();
-const char *get_grfont();
-const char *get_gbfont();
-void start_string();
-void output_string();
-void do_text(const char *);
-void restore_compatibility();
-void set_script_reduction(int n);
-void set_minimum_size(int n);
-void set_param(const char *name, int value);
-
-void set_char_type(const char *type, char *ch);
-
-void init_char_table();
-void init_extensible();
-void define_extensible(const char *name, const char *ext, const char *top = 0,
- const char *mid = 0, const char *bot = 0);
diff --git a/contrib/groff/src/preproc/eqn/delim.cpp b/contrib/groff/src/preproc/eqn/delim.cpp
deleted file mode 100644
index 9bb7c9b982c4..000000000000
--- a/contrib/groff/src/preproc/eqn/delim.cpp
+++ /dev/null
@@ -1,401 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-enum left_or_right_t { LEFT_DELIM = 01, RIGHT_DELIM = 02 };
-
-// Small must be none-zero and must exist in each device.
-// Small will be put in the roman font, others are assumed to be
-// on the special font (so no font change will be necessary.)
-
-struct delimiter {
- const char *name;
- int flags;
- const char *small;
- const char *chain_format;
- const char *ext;
- const char *top;
- const char *mid;
- const char *bot;
-} delim_table[] = {
- {
- "(", LEFT_DELIM|RIGHT_DELIM, "(", "\\[parenleft%s]",
- "\\[parenleftex]",
- "\\[parenlefttp]",
- 0,
- "\\[parenleftbt]",
- },
- {
- ")", LEFT_DELIM|RIGHT_DELIM, ")", "\\[parenright%s]",
- "\\[parenrightex]",
- "\\[parenrighttp]",
- 0,
- "\\[parenrightbt]",
- },
- {
- "[", LEFT_DELIM|RIGHT_DELIM, "[", "\\[bracketleft%s]",
- "\\[bracketleftex]",
- "\\[bracketlefttp]",
- 0,
- "\\[bracketleftbt]",
- },
- {
- "]", LEFT_DELIM|RIGHT_DELIM, "]", "\\[bracketright%s]",
- "\\[bracketrightex]",
- "\\[bracketrighttp]",
- 0,
- "\\[bracketrightbt]",
- },
- {
- "{", LEFT_DELIM|RIGHT_DELIM, "{", "\\[braceleft%s]",
- "\\[braceleftex]",
- "\\[bracelefttp]",
- "\\[braceleftmid]",
- "\\[braceleftbt]",
- },
- {
- "}", LEFT_DELIM|RIGHT_DELIM, "}", "\\[braceright%s]",
- "\\[bracerightex]",
- "\\[bracerighttp]",
- "\\[bracerightmid]",
- "\\[bracerightbt]",
- },
- {
- "|", LEFT_DELIM|RIGHT_DELIM, "|", "\\[bar%s]",
- "\\[barex]",
- 0,
- 0,
- 0,
- },
- {
- "floor", LEFT_DELIM, "\\(lf", "\\[floorleft%s]",
- "\\[bracketleftex]",
- 0,
- 0,
- "\\[bracketleftbt]",
- },
- {
- "floor", RIGHT_DELIM, "\\(rf", "\\[floorright%s]",
- "\\[bracketrightex]",
- 0,
- 0,
- "\\[bracketrightbt]",
- },
- {
- "ceiling", LEFT_DELIM, "\\(lc", "\\[ceilingleft%s]",
- "\\[bracketleftex]",
- "\\[bracketlefttp]",
- 0,
- 0,
- },
- {
- "ceiling", RIGHT_DELIM, "\\(rc", "\\[ceilingright%s]",
- "\\[bracketrightex]",
- "\\[bracketrighttp]",
- 0,
- 0,
- },
- {
- "||", LEFT_DELIM|RIGHT_DELIM, "|", "\\[bar%s]",
- "\\[bardblex]",
- 0,
- 0,
- 0,
- },
- {
- "<", LEFT_DELIM|RIGHT_DELIM, "\\(la", "\\[angleleft%s]",
- 0,
- 0,
- 0,
- 0,
- },
- {
- ">", LEFT_DELIM|RIGHT_DELIM, "\\(ra", "\\[angleright%s]",
- 0,
- 0,
- 0,
- 0,
- },
- {
- "uparrow", LEFT_DELIM|RIGHT_DELIM, "\\(ua", "\\[arrowup%s]",
- "\\[arrowvertex]",
- "\\[arrowverttp]",
- 0,
- 0,
- },
- {
- "downarrow", LEFT_DELIM|RIGHT_DELIM, "\\(da", "\\[arrowdown%s]",
- "\\[arrowvertex]",
- 0,
- 0,
- "\\[arrowvertbt]",
- },
- {
- "updownarrow", LEFT_DELIM|RIGHT_DELIM, "\\(va", "\\[arrowupdown%s]",
- "\\[arrowvertex]",
- "\\[arrowverttp]",
- 0,
- "\\[arrowvertbt]",
- },
-};
-
-const int DELIM_TABLE_SIZE = int(sizeof(delim_table)/sizeof(delim_table[0]));
-
-class delim_box : public box {
-private:
- char *left;
- char *right;
- box *p;
-public:
- delim_box(char *, box *, char *);
- ~delim_box();
- int compute_metrics(int);
- void output();
- void check_tabs(int);
- void debug_print();
-};
-
-box *make_delim_box(char *l, box *pp, char *r)
-{
- if (l != 0 && *l == '\0') {
- a_delete l;
- l = 0;
- }
- if (r != 0 && *r == '\0') {
- a_delete r;
- r = 0;
- }
- return new delim_box(l, pp, r);
-}
-
-delim_box::delim_box(char *l, box *pp, char *r)
-: left(l), right(r), p(pp)
-{
-}
-
-delim_box::~delim_box()
-{
- a_delete left;
- a_delete right;
- delete p;
-}
-
-static void build_extensible(const char *ext, const char *top, const char *mid,
- const char *bot)
-{
- assert(ext != 0);
- printf(".nr " DELIM_WIDTH_REG " 0\\w" DELIMITER_CHAR "%s" DELIMITER_CHAR "\n",
- ext);
- printf(".nr " EXT_HEIGHT_REG " 0\\n[rst]\n");
- printf(".nr " EXT_DEPTH_REG " 0-\\n[rsb]\n");
- if (top) {
- printf(".nr " DELIM_WIDTH_REG " 0\\n[" DELIM_WIDTH_REG "]"
- ">?\\w" DELIMITER_CHAR "%s" DELIMITER_CHAR "\n",
- top);
- printf(".nr " TOP_HEIGHT_REG " 0\\n[rst]\n");
- printf(".nr " TOP_DEPTH_REG " 0-\\n[rsb]\n");
- }
- if (mid) {
- printf(".nr " DELIM_WIDTH_REG " 0\\n[" DELIM_WIDTH_REG "]"
- ">?\\w" DELIMITER_CHAR "%s" DELIMITER_CHAR "\n",
- mid);
- printf(".nr " MID_HEIGHT_REG " 0\\n[rst]\n");
- printf(".nr " MID_DEPTH_REG " 0-\\n[rsb]\n");
- }
- if (bot) {
- printf(".nr " DELIM_WIDTH_REG " 0\\n[" DELIM_WIDTH_REG "]"
- ">?\\w" DELIMITER_CHAR "%s" DELIMITER_CHAR "\n",
- bot);
- printf(".nr " BOT_HEIGHT_REG " 0\\n[rst]\n");
- printf(".nr " BOT_DEPTH_REG " 0-\\n[rsb]\n");
- }
- printf(".nr " TOTAL_HEIGHT_REG " 0");
- if (top)
- printf("+\\n[" TOP_HEIGHT_REG "]+\\n[" TOP_DEPTH_REG "]");
- if (bot)
- printf("+\\n[" BOT_HEIGHT_REG "]+\\n[" BOT_DEPTH_REG "]");
- if (mid)
- printf("+\\n[" MID_HEIGHT_REG "]+\\n[" MID_DEPTH_REG "]");
- printf("\n");
- // determine how many extensible characters we need
- printf(".nr " TEMP_REG " \\n[" DELTA_REG "]-\\n[" TOTAL_HEIGHT_REG "]");
- if (mid)
- printf("/2");
- printf(">?0+\\n[" EXT_HEIGHT_REG "]+\\n[" EXT_DEPTH_REG "]-1/(\\n["
- EXT_HEIGHT_REG "]+\\n[" EXT_DEPTH_REG "])\n");
-
- printf(".nr " TOTAL_HEIGHT_REG " +(\\n[" EXT_HEIGHT_REG "]+\\n["
- EXT_DEPTH_REG "]*\\n[" TEMP_REG "]");
- if (mid)
- printf("*2");
- printf(")\n");
- printf(".ds " DELIM_STRING " \\Z" DELIMITER_CHAR
- "\\v'-%dM-(\\n[" TOTAL_HEIGHT_REG "]u/2u)'\n",
- axis_height);
- if (top)
- printf(".as " DELIM_STRING " \\v'\\n[" TOP_HEIGHT_REG "]u'"
- "\\Z" DELIMITER_CHAR "%s" DELIMITER_CHAR
- "\\v'\\n[" TOP_DEPTH_REG "]u'\n",
- top);
-
- // this macro appends $2 copies of $3 to string $1
- printf(".de " REPEAT_APPEND_STRING_MACRO "\n"
- ".if \\\\$2 \\{.as \\\\$1 \"\\\\$3\n"
- "." REPEAT_APPEND_STRING_MACRO " \\\\$1 \\\\$2-1 \"\\\\$3\"\n"
- ".\\}\n"
- "..\n");
-
- printf("." REPEAT_APPEND_STRING_MACRO " " DELIM_STRING " \\n[" TEMP_REG "] "
- "\\v'\\n[" EXT_HEIGHT_REG "]u'"
- "\\Z" DELIMITER_CHAR "%s" DELIMITER_CHAR
- "\\v'\\n[" EXT_DEPTH_REG "]u'\n",
- ext);
-
- if (mid) {
- printf(".as " DELIM_STRING " \\v'\\n[" MID_HEIGHT_REG "]u'"
- "\\Z" DELIMITER_CHAR "%s" DELIMITER_CHAR
- "\\v'\\n[" MID_DEPTH_REG "]u'\n",
- mid);
- printf("." REPEAT_APPEND_STRING_MACRO " " DELIM_STRING
- " \\n[" TEMP_REG "] "
- "\\v'\\n[" EXT_HEIGHT_REG "]u'"
- "\\Z" DELIMITER_CHAR "%s" DELIMITER_CHAR
- "\\v'\\n[" EXT_DEPTH_REG "]u'\n",
- ext);
- }
- if (bot)
- printf(".as " DELIM_STRING " \\v'\\n[" BOT_HEIGHT_REG "]u'"
- "\\Z" DELIMITER_CHAR "%s" DELIMITER_CHAR
- "\\v'\\n[" BOT_DEPTH_REG "]u'\n",
- bot);
- printf(".as " DELIM_STRING " " DELIMITER_CHAR "\n");
-}
-
-static void define_extensible_string(char *delim, int uid,
- left_or_right_t left_or_right)
-{
- printf(".ds " DELIM_STRING "\n");
- delimiter *d = delim_table;
- int delim_len = strlen(delim);
- int i;
- for (i = 0; i < DELIM_TABLE_SIZE; i++, d++)
- if (strncmp(delim, d->name, delim_len) == 0
- && (left_or_right & d->flags) != 0)
- break;
- if (i >= DELIM_TABLE_SIZE) {
- error("there is no `%1' delimiter", delim);
- printf(".nr " DELIM_WIDTH_REG " 0\n");
- return;
- }
-
- printf(".nr " DELIM_WIDTH_REG " 0\\w" DELIMITER_CHAR "\\f[%s]%s\\fP" DELIMITER_CHAR "\n"
- ".ds " DELIM_STRING " \\Z" DELIMITER_CHAR
- "\\v'\\n[rsb]u+\\n[rst]u/2u-%dM'\\f[%s]%s\\fP" DELIMITER_CHAR "\n"
- ".nr " TOTAL_HEIGHT_REG " \\n[rst]-\\n[rsb]\n"
- ".if \\n[" TOTAL_HEIGHT_REG "]<\\n[" DELTA_REG "] "
- "\\{",
- current_roman_font, d->small, axis_height,
- current_roman_font, d->small);
-
- char buf[256];
- sprintf(buf, d->chain_format, "\\\\n[" INDEX_REG "]");
- printf(".nr " INDEX_REG " 0\n"
- ".de " TEMP_MACRO "\n"
- ".ie c%s \\{\\\n"
- ".nr " DELIM_WIDTH_REG " 0\\w" DELIMITER_CHAR "%s" DELIMITER_CHAR "\n"
- ".ds " DELIM_STRING " \\Z" DELIMITER_CHAR
- "\\v'\\\\n[rsb]u+\\\\n[rst]u/2u-%dM'%s" DELIMITER_CHAR "\n"
- ".nr " TOTAL_HEIGHT_REG " \\\\n[rst]-\\\\n[rsb]\n"
- ".if \\\\n[" TOTAL_HEIGHT_REG "]<\\n[" DELTA_REG "] "
- "\\{.nr " INDEX_REG " +1\n"
- "." TEMP_MACRO "\n"
- ".\\}\\}\n"
- ".el .nr " INDEX_REG " 0-1\n"
- "..\n"
- "." TEMP_MACRO "\n",
- buf, buf, axis_height, buf);
- if (d->ext) {
- printf(".if \\n[" INDEX_REG "]<0 \\{.if c%s \\{\\\n", d->ext);
- build_extensible(d->ext, d->top, d->mid, d->bot);
- printf(".\\}\\}\n");
- }
- printf(".\\}\n");
- printf(".as " DELIM_STRING " \\h'\\n[" DELIM_WIDTH_REG "]u'\n");
- printf(".nr " WIDTH_FORMAT " +\\n[" DELIM_WIDTH_REG "]\n", uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]"
- ">?(\\n[" TOTAL_HEIGHT_REG "]/2+%dM)\n",
- uid, uid, axis_height);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]"
- ">?(\\n[" TOTAL_HEIGHT_REG "]/2-%dM)\n",
- uid, uid, axis_height);
-}
-
-int delim_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " DELTA_REG " \\n[" HEIGHT_FORMAT "]-%dM"
- ">?(\\n[" DEPTH_FORMAT "]+%dM)\n",
- p->uid, axis_height, p->uid, axis_height);
- printf(".nr " DELTA_REG " 0\\n[" DELTA_REG "]*%d/500"
- ">?(\\n[" DELTA_REG "]*2-%dM)\n",
- delimiter_factor, delimiter_shortfall);
- if (left) {
- define_extensible_string(left, uid, LEFT_DELIM);
- printf(".rn " DELIM_STRING " " LEFT_DELIM_STRING_FORMAT "\n",
- uid);
- if (r)
- printf(".nr " MARK_REG " +\\n[" DELIM_WIDTH_REG "]\n");
- }
- if (right) {
- define_extensible_string(right, uid, RIGHT_DELIM);
- printf(".rn " DELIM_STRING " " RIGHT_DELIM_STRING_FORMAT "\n",
- uid);
- }
- return r;
-}
-
-void delim_box::output()
-{
- if (left)
- printf("\\*[" LEFT_DELIM_STRING_FORMAT "]", uid);
- p->output();
- if (right)
- printf("\\*[" RIGHT_DELIM_STRING_FORMAT "]", uid);
-}
-
-void delim_box::check_tabs(int level)
-{
- p->check_tabs(level);
-}
-
-void delim_box::debug_print()
-{
- fprintf(stderr, "left \"%s\" { ", left ? left : "");
- p->debug_print();
- fprintf(stderr, " }");
- if (right)
- fprintf(stderr, " right \"%s\"", right);
-}
-
diff --git a/contrib/groff/src/preproc/eqn/eqn.h b/contrib/groff/src/preproc/eqn/eqn.h
deleted file mode 100644
index fca3e9793a38..000000000000
--- a/contrib/groff/src/preproc/eqn/eqn.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "cset.h"
-#include "errarg.h"
-#include "error.h"
-
-#include "box.h"
-
-extern char start_delim;
-extern char end_delim;
-extern int non_empty_flag;
-extern int inline_flag;
-extern int draw_flag;
-extern int one_size_reduction_flag;
-extern int compatible_flag;
-extern int nroff;
-
-void init_lex(const char *str, const char *filename, int lineno);
-void lex_error(const char *message,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-void init_table(const char *device);
-
-// prefix for all registers, strings, macros
-#define PREFIX "0"
diff --git a/contrib/groff/src/preproc/eqn/eqn.man b/contrib/groff/src/preproc/eqn/eqn.man
deleted file mode 100644
index 0f47771c2392..000000000000
--- a/contrib/groff/src/preproc/eqn/eqn.man
+++ /dev/null
@@ -1,1160 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2004, 2005 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.ie \n(.V<\n(.v \
-. ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el \
-. ds tx TeX
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.
-.de TQ
-. br
-. ns
-. TP \\$1
-..
-.
-.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"
-.
-.
-.TH @G@EQN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-@g@eqn \- format equations for troff
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@eqn 'u
-.ti \niu
-.B @g@eqn
-.de OP
-. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-. el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-rvCNR
-.OP \-d xy
-.OP \-T name
-.OP \-M dir
-.OP \-f F
-.OP \-s n
-.OP \-p n
-.OP \-m n
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.
-.LP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-This manual page describes the GNU version of
-.BR eqn ,
-which is part of the groff document formatting system.
-.B eqn
-compiles descriptions of equations embedded within
-.B troff
-input files into commands that are understood by
-.BR troff .
-Normally, it should be invoked using the
-.B \-e
-option of
-.BR groff .
-The syntax is quite compatible with Unix eqn.
-The output of GNU
-.B eqn
-cannot be processed with Unix troff;
-it must be processed with GNU troff.
-If no files are given on the command line, the standard input
-will be read.
-A filename of
-.B \-
-will cause the standard input to be read.
-.
-.LP
-.B eqn
-searches for the file
-.B eqnrc
-in the directories given with the
-.B \-M
-option first, then in
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-and finally in the standard macro directory
-.BR @MACRODIR@ .
-If it exists,
-.B eqn
-will process it before the other input files.
-The
-.B \-R
-option prevents this.
-.
-.LP
-GNU
-.B eqn
-does not provide the functionality of neqn:
-it does not support low-resolution, typewriter-like devices
-(although it may work adequately for very simple input).
-.
-.
-.SH OPTIONS
-.TP
-.BI \-d xy
-Specify delimiters
-.I x
-and\~\c
-.I y
-for the left and right end, respectively, of in-line equations.
-Any
-.B delim
-statements in the source file overrides this.
-.
-.TP
-.B \-C
-Recognize
-.B .EQ
-and
-.B .EN
-even when followed by a character other than space or newline.
-.TP
-.B \-N
-Don't allow newlines within delimiters.
-This option allows
-.B eqn
-to recover better from missing closing delimiters.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-r
-Only one size reduction.
-.
-.TP
-.BI \-m n
-The minimum point-size is\~\c
-.IR n .
-.B eqn
-will not reduce the size of subscripts or superscripts to
-a smaller size than\~\c
-.IR n .
-.
-.TP
-.BI \-T name
-The output is for device
-.IR name .
-The only effect of this is to define a macro
-.I name
-with a value of\~\c
-.BR 1 .
-Typically
-.B eqnrc
-will use this to provide definitions appropriate for the output device.
-The default output device is
-.BR @DEVICE@ .
-.
-.TP
-.BI \-M dir
-Search
-.I dir
-for
-.B eqnrc
-before the default directories.
-.
-.TP
-.B \-R
-Don't load
-.BR eqnrc .
-.
-.TP
-.BI \-f F
-This is equivalent to a
-.BI gfont\ F
-command.
-.
-.TP
-.BI \-s n
-This is equivalent to a
-.BI gsize\ n
-command.
-This option is deprecated.
-.B eqn
-will normally set equations at whatever the current point size
-is when the equation is encountered.
-.
-.TP
-.BI \-p n
-This says that subscripts and superscripts should be
-.I n\~\c
-points smaller than the surrounding text.
-This option is deprecated.
-Normally
-.B eqn
-makes sets subscripts and superscripts at 70%
-of the size of the surrounding text.
-.
-.
-.SH USAGE
-Only the differences between GNU
-.B eqn
-and Unix eqn are described here.
-.
-.LP
-Most of the new features of GNU
-.B eqn
-are based on \*(tx.
-There are some references to the differences between \*(tx and GNU
-.B eqn
-below;
-these may safely be ignored if you do not know \*(tx.
-.
-.SS Automatic spacing
-.B eqn
-gives each component of an equation a type, and adjusts the spacing
-between components using that type.
-Possible types are:
-.
-.RS
-.TP \w'punctuation'u+2n
-ordinary
-an ordinary character such as `1' or `\c
-.IR x ';
-.
-.TP
-operator
-a large operator such as
-.ds Su `\s+5\(*S\s0'
-.if \n(.g .if !c\(*S .ds Su the summation operator
-\*(Su;
-.
-.TP
-binary
-a binary operator such as `\(pl';
-.
-.TP
-relation
-a relation such as `=';
-.
-.TP
-opening
-a opening bracket such as `(';
-.
-.TP
-closing
-a closing bracket such as `)';
-.
-.TP
-punctuation
-a punctuation character such as `,';
-.
-.TP
-inner
-a subformula contained within brackets;
-.TP
-suppress
-spacing that suppresses automatic spacing adjustment.
-.RE
-.
-.LP
-Components of an equation get a type in one of two ways.
-.
-.TP
-.BI type\ t\ e
-This yields an equation component that contains\~\c
-.I e
-but that has type\~\c
-.IR t ,
-where
-.I t
-is one of the types mentioned above.
-For example,
-.B times
-is defined as
-.
-.RS
-.IP
-.B
-type "binary" \e(mu
-.RE
-.
-.IP
-The name of the type doesn't have to be quoted, but quoting protects
-from macro expansion.
-.
-.TP
-.BI chartype\ t\ text
-Unquoted groups of characters are split up into individual characters,
-and the type of each character is looked up;
-this changes the type that is stored for each character;
-it says that the characters in
-.I text
-from now on have type\~\c
-.IR t .
-For example,
-.
-.RS
-.IP
-.B
-chartype "punctuation" .,;:
-.RE
-.
-.IP
-would make the characters `.,;:' have type punctuation
-whenever they subsequently appeared in an equation.
-The type\~\c
-.I t
-can also be
-.B letter
-or
-.BR digit ;
-in these cases
-.B chartype
-changes the font type of the characters.
-See the
-.B Fonts
-subsection.
-.
-.SS New primitives
-.TP
-.IB e1\ smallover\ e2
-This is similar to
-.BR over ;
-.B smallover
-reduces the size of
-.I e1
-and
-.IR e2 ;
-it also puts less vertical space between
-.I e1
-or
-.I e2
-and the fraction bar.
-The
-.B over
-primitive corresponds to the \*(tx
-.B \eover
-primitive in display styles;
-.B smallover
-corresponds to
-.B \eover
-in non-display styles.
-.
-.TP
-.BI vcenter\ e
-This vertically centers
-.I e
-about the math axis.
-The math axis is the vertical position about which characters
-such as `\(pl' and `\(mi' are centered; also it is the vertical position
-used for the bar of fractions.
-For example,
-.B sum
-is defined as
-.
-.RS
-.IP
-.B
-{ type "operator" vcenter size +5 \e(*S }
-.RE
-.
-.TP
-.IB e1\ accent\ e2
-This sets
-.I e2
-as an accent over
-.IR e1 .
-.I e2
-is assumed to be at the correct height for a lowercase letter;
-.I e2
-will be moved down according if
-.I e1
-is taller or shorter than a lowercase letter.
-For example,
-.B hat
-is defined as
-.
-.RS
-.IP
-.B
-accent { "^" }
-.RE
-.
-.IP
-.BR dotdot ,
-.BR dot ,
-.BR tilde ,
-.BR vec ,
-and
-.B dyad
-are also defined using the
-.B accent
-primitive.
-.
-.TP
-.IB e1\ uaccent\ e2
-This sets
-.I e2
-as an accent under
-.IR e1 .
-.I e2
-is assumed to be at the correct height for a character without a descender;
-.I e2
-will be moved down if
-.I e1
-has a descender.
-.B utilde
-is pre-defined using
-.B uaccent
-as a tilde accent below the baseline.
-.
-.TP
-.BI split\ \(ts text \(ts
-This has the same effect as simply
-.
-.RS
-.IP
-.I text
-.RE
-.
-.IP
-but
-.I text
-is not subject to macro expansion because it is quoted;
-.I text
-will be split up and the spacing between individual characters
-will be adjusted.
-.
-.TP
-.BI nosplit\ text
-This has the same effect as
-.
-.RS
-.IP
-.BI \(ts text \(ts
-.RE
-.
-.IP
-but because
-.I text
-is not quoted it will be subject to macro expansion;
-.I text
-will not be split up
-and the spacing between individual characters will not be adjusted.
-.
-.TP
-.IB e\ opprime
-This is a variant of
-.B prime
-that acts as an operator on\~\c
-.IR e .
-It produces a different result from
-.B prime
-in a case such as
-.BR A\ opprime\ sub\ 1 :
-with
-.B opprime
-the\~\c
-.B 1
-will be tucked under the prime as a subscript to the\~\c
-.B A
-(as is conventional in mathematical typesetting),
-whereas with
-.B prime
-the\~\c
-.B 1
-will be a subscript to the prime character.
-The precedence of
-.B opprime
-is the same as that of
-.B bar
-and
-.BR under ,
-which is higher than that of everything except
-.B accent
-and
-.BR uaccent .
-In unquoted text a\~\c
-.B '
-that is not the first character will be treated like
-.BR opprime .
-.
-.TP
-.BI special\ text\ e
-This constructs a new object from\~\c
-.I e
-using a
-.BR @g@troff (@MAN1EXT@)
-macro named
-.IR text .
-When the macro is called,
-the string
-.B 0s
-will contain the output for\~\c
-.IR e ,
-and the number registers
-.BR 0w ,
-.BR 0h ,
-.BR 0d ,
-.BR 0skern ,
-and
-.BR 0skew
-will contain the width, height, depth, subscript kern, and skew of\~\c
-.IR e .
-(The
-.I "subscript kern"
-of an object says how much a subscript on that object should be tucked in;
-the
-.I skew
-of an object says how far to the right of the center of the object an
-accent over the object should be placed.)
-The macro must modify
-.B 0s
-so that it will output the desired result with its origin at the current
-point, and increase the current horizontal position by the width
-of the object.
-The number registers must also be modified so that they correspond to the
-result.
-.
-.IP
-For example, suppose you wanted a construct that `cancels' an expression
-by drawing a diagonal line through it.
-.
-.RS
-.IP
-.ft B
-.if t .ne 6+\n(.Vu
-.br
-\&.EQ
-.br
-define cancel 'special Ca'
-.br
-\&.EN
-.br
-\&.de Ca
-.br
-\&.\ \ ds 0s \e
-.br
-\eZ'\e\e*(0s'\e
-.br
-\ev'\e\en(0du'\e
-.br
-\eD'l \e\en(0wu -\e\en(0hu-\e\en(0du'\e
-.br
-\ev'\e\en(0hu'
-.br
-\&..
-.ft
-.RE
-.
-.IP
-Then you could cancel an expression\~\c
-.I e
-with
-.BI \%cancel\ {\ e\ }
-.
-.IP
-Here's a more complicated construct that draws a box round an expression:
-.
-.RS
-.IP
-.ft B
-.if t .ne 11+\n(.Vu
-\&.EQ
-.br
-define box 'special Bx'
-.br
-\&.EN
-.br
-\&.de Bx
-.br
-\&.\ \ ds 0s \e
-.br
-\eZ'\eh'1n'\e\e*(0s'\e
-.br
-\eZ'\e
-.br
-\ev'\e\en(0du+1n'\e
-.br
-\eD'l \e\en(0wu+2n 0'\e
-.br
-\eD'l 0 -\e\en(0hu-\e\en(0du-2n'\e
-.br
-\eD'l -\e\en(0wu-2n 0'\e
-.br
-\eD'l 0 \e\en(0hu+\e\en(0du+2n'\e
-.br
-\&'\e
-.br
-\eh'\e\en(0wu+2n'
-.br
-\&.\ \ nr 0w +2n
-.br
-\&.\ \ nr 0d +1n
-.br
-\&.\ \ nr 0h +1n
-.br
-\&..
-.ft
-.RE
-.
-.TP
-.BI space\ n
-A positive value of the integer\~\c
-.I n
-(in hundredths of an em) sets the vertical spacing before the equation,
-a negative value sets the spacing after the equation, replacing the
-default values.
-This primitive provides an interface to
-.BR groff 's
-.B \ex
-escape (but with opposite sign).
-.
-.IP
-This keyword has no effect if the equation is part of a
-.B pic
-picture.
-.
-.SS Extended primitives
-.TP
-.BI col\ n\ {\ .\|.\|.\ }
-.TQ
-.BI ccol\ n\ {\ .\|.\|.\ }
-.TQ
-.BI lcol\ n\ {\ .\|.\|.\ }
-.TQ
-.BI rcol\ n\ {\ .\|.\|.\ }
-.TQ
-.BI pile\ n\ {\ .\|.\|.\ }
-.TQ
-.BI cpile\ n\ {\ .\|.\|.\ }
-.TQ
-.BI lpile\ n\ {\ .\|.\|.\ }
-.TQ
-.BI rpile\ n\ {\ .\|.\|.\ }
-The integer value\~\c
-.I n
-(in hundredths of an em) increases the vertical spacing between rows,
-using
-.BR groff 's
-.B \ex
-escape.
-Negative values are possible but have no effect.
-If there is more than a single value given in a matrix, the biggest one
-is used.
-.
-.SS Customization
-The appearance of equations is controlled by a large number of parameters.
-These can be set using
-the
-.B set
-command.
-.
-.TP
-.BI set\ p\ n
-This sets parameter\~\c
-.I p
-to value\~\c
-.IR n ;
-.I n\~\c
-is an integer.
-For example,
-.
-.RS
-.IP
-.B
-set x_height 45
-.RE
-.
-.IP
-says that
-.B eqn
-should assume an x\~height of 0.45\~ems.
-.
-.RS
-.LP
-Possible parameters are as follows.
-Values are in units of hundredths of an em unless otherwise stated.
-These descriptions are intended to be expository rather than
-definitive.
-.
-.ie t \
-. TP \w'\fBdefault_rule_thickness'u+2n
-.el \
-. TP
-.B minimum_size
-.B eqn
-will not set anything at a smaller point-size than this.
-The value is in points.
-.
-.TP
-.B fat_offset
-The
-.B fat
-primitive emboldens an equation
-by overprinting two copies of the equation
-horizontally offset by this amount.
-.
-.TP
-.B over_hang
-A fraction bar will be longer by twice this amount than
-the maximum of the widths of the numerator and denominator;
-in other words, it will overhang the numerator and
-denominator by at least this amount.
-.
-.TP
-.B accent_width
-When
-.B bar
-or
-.B under
-is applied to a single character,
-the line will be this long.
-Normally,
-.B bar
-or
-.B under
-produces a line whose length is the width of the object to which it applies;
-in the case of a single character,
-this tends to produce a line that looks too long.
-.
-.TP
-.B delimiter_factor
-Extensible delimiters produced with the
-.B left
-and
-.B right
-primitives will have a combined height and depth of at least this many
-thousandths of twice the maximum amount by which the sub-equation that
-the delimiters enclose extends away from the axis.
-.
-.TP
-.B delimiter_shortfall
-Extensible delimiters produced with the
-.B left
-and
-.B right
-primitives will have a combined height and depth
-not less than the difference of
-twice the maximum amount by which the sub-equation that
-the delimiters enclose extends away from the axis
-and this amount.
-.
-.TP
-.B null_delimiter_space
-This much horizontal space is inserted
-on each side of a fraction.
-.
-.TP
-.B script_space
-The width of subscripts and superscripts is increased by this amount.
-.
-.TP
-.B thin_space
-This amount of space is automatically inserted after punctuation
-characters.
-.
-.TP
-.B medium_space
-This amount of space is automatically inserted on either side
-of binary operators.
-.
-.TP
-.B thick_space
-This amount of space is automatically inserted on either side of
-relations.
-.
-.TP
-.B x_height
-The height of lowercase letters without ascenders such as `x'.
-.
-.TP
-.B axis_height
-The height above the baseline of the center of characters
-such as `\(pl' and `\(mi'.
-It is important that this value is correct for the font
-you are using.
-.
-.TP
-.B default_rule_thickness
-This should set to the thickness of the
-.B \e(ru
-character, or the thickness of horizontal lines produced with the
-.B \eD
-escape sequence.
-.
-.TP
-.B num1
-The
-.B over
-command will shift up the numerator by at least this amount.
-.
-.TP
-.B num2
-The
-.B smallover
-command will shift up the numerator by at least this amount.
-.
-.TP
-.B denom1
-The
-.B over
-command will shift down the denominator by at least this amount.
-.
-.TP
-.B denom2
-The
-.B smallover
-command will shift down the denominator by at least this amount.
-.
-.TP
-.B sup1
-Normally superscripts will be shifted up by at least this amount.
-.
-.TP
-.B sup2
-Superscripts within superscripts or upper limits
-or numerators of
-.B smallover
-fractions
-will be shifted up by at least this amount.
-This is usually less than sup1.
-.
-.TP
-.B sup3
-Superscripts within denominators or square roots
-or subscripts or lower limits will be shifted up by at least
-this amount.
-This is usually less than sup2.
-.
-.TP
-.B sub1
-Subscripts will normally be shifted down by at least this amount.
-.
-.TP
-.B sub2
-When there is both a subscript and a superscript, the subscript
-will be shifted down by at least this amount.
-.
-.TP
-.B sup_drop
-The baseline of a superscript will be no more
-than this much amount below the top of the object on
-which the superscript is set.
-.
-.TP
-.B sub_drop
-The baseline of a subscript will be at least this much below
-the bottom of the object on which the subscript is set.
-.
-.TP
-.B big_op_spacing1
-The baseline of an upper limit will be at least this
-much above the top of the object on which the limit is set.
-.
-.TP
-.B big_op_spacing2
-The baseline of a lower limit will be at least this
-much below the bottom of the object on which the limit is set.
-.
-.TP
-.B big_op_spacing3
-The bottom of an upper limit will be at least this much above the
-top of the object on which the limit is set.
-.
-.TP
-.B big_op_spacing4
-The top of a lower limit will be at least this much below
-the bottom of the object on which the limit is set.
-.
-.TP
-.B big_op_spacing5
-This much vertical space will be added above and below limits.
-.
-.TP
-.B baseline_sep
-The baselines of the rows in a pile or matrix will normally be
-this far apart.
-In most cases this should be equal to the sum of
-.B num1
-and
-.BR denom1 .
-.
-.TP
-.B shift_down
-The midpoint between the top baseline and the bottom baseline
-in a matrix or pile will be shifted down by this much from the axis.
-In most cases this should be equal to
-.BR axis_height .
-.
-.TP
-.B column_sep
-This much space will be added between columns in a matrix.
-.
-.TP
-.B matrix_side_sep
-This much space will be added at each side of a matrix.
-.
-.TP
-.B draw_lines
-If this is non-zero, lines will be drawn using the
-.B \eD
-escape sequence, rather than with the
-.B \el
-escape sequence and the
-.B \e(ru
-character.
-.
-.TP
-.B body_height
-The amount by which the height of the equation exceeds this
-will be added as extra space before the line containing the equation
-(using
-.BR \ex ).
-The default value is 85.
-.
-.TP
-.B body_depth
-The amount by which the depth of the equation exceeds this
-will be added as extra space after the line containing the equation
-(using
-.BR \ex ).
-The default value is 35.
-.
-.TP
-.B nroff
-If this is non-zero,
-then
-.B ndefine
-will behave like
-.B define
-and
-.B tdefine
-will be ignored,
-otherwise
-.B tdefine
-will behave like
-.B define
-and
-.B ndefine
-will be ignored.
-The default value is\~0
-(This is typically changed to\~1 by the
-.B eqnrc
-file for the
-.BR ascii ,
-.BR latin1 ,
-.BR utf8 ,
-and
-.B cp1047
-devices.)
-.
-.LP
-A more precise description of the role of many of these
-parameters can be found in Appendix\~H of
-.IR "The \*(txbook" .
-.RE
-.
-.SS Macros
-Macros can take arguments.
-In a macro body,
-.BI $ n
-where
-.I n
-is between 1 and\~9,
-will be replaced by the
-.IR n-th
-argument if the macro is called with arguments;
-if there are fewer than
-.I n\~\c
-arguments, it will be replaced by nothing.
-A word containing a left parenthesis where the part of the word
-before the left parenthesis has been defined using the
-.B define
-command
-will be recognized as a macro call with arguments;
-characters following the left parenthesis
-up to a matching right parenthesis will be treated as comma-separated
-arguments;
-commas inside nested parentheses do not terminate an argument.
-.
-.TP
-.BI sdefine\ name\ X\ anything\ X
-This is like the
-.B define
-command, but
-.I name
-will not be recognized if called with arguments.
-.
-.TP
-.BI include\ \(ts file \(ts
-.TQ
-.BI copy\ \(ts file \(ts
-Include the contents of
-.I file
-.RB ( include
-and
-.B copy
-are synonyms).
-Lines of
-.I file
-beginning with
-.B .EQ
-or
-.B .EN
-will be ignored.
-.
-.TP
-.BI ifdef\ name\ X\ anything\ X
-If
-.I name
-has been defined by
-.B define
-(or has been automatically defined because
-.I name
-is the output device)
-process
-.IR anything ;
-otherwise ignore
-.IR anything .
-.I X
-can be any character not appearing in
-.IR anything .
-.
-.TP
-.BI undef\ name
-Remove definition of
-.IR name ,
-making it undefined.
-.
-.LP
-Besides the macros mentioned above, the following definitions are available:
-.BR Alpha ,
-.BR Beta ,
-\&.\|.\|.,
-.B Omega
-(this is the same as
-.BR ALPHA ,
-.BR BETA ,
-\&.\|.\|.,
-.BR OMEGA ),
-.B ldots
-(three dots on the base line),
-and
-.BR dollar .
-.
-.SS Fonts
-.B eqn
-normally uses at least two fonts to set an equation:
-an italic font for letters,
-and a roman font for everything else.
-The existing
-.B gfont
-command
-changes the font that is used as the italic font.
-By default this is\~\c
-.BR I .
-The font that is used as the roman font can be changed
-using the new
-.B grfont
-command.
-.
-.TP
-.BI grfont\ f
-Set the roman font to\~\c
-.IR f .
-.
-.LP
-The
-.B italic
-primitive uses the current italic font set by
-.BR gfont ;
-the
-.B roman
-primitive uses the current roman font set by
-.BR grfont .
-There is also a new
-.B gbfont
-command, which changes the font used by the
-.B bold
-primitive.
-If you only use the
-.BR roman ,
-.B italic
-and
-.B bold
-primitives to changes fonts within an equation,
-you can change all the fonts used by your equations
-just by using
-.BR gfont ,
-.B grfont
-and
-.B gbfont
-commands.
-.
-.LP
-You can control which characters are treated as letters
-(and therefore set in italics) by using the
-.B chartype
-command described above.
-A type of
-.B letter
-will cause a character to be set in italic type.
-A type of
-.B digit
-will cause a character to be set in roman type.
-.
-.
-.SH FILES
-.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-Initialization file.
-.
-.
-.SH BUGS
-Inline equations will be set at the point size that is current at the
-beginning of the input line.
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.I The\ \*(txbook
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/eqn/eqn.y b/contrib/groff/src/preproc/eqn/eqn.y
deleted file mode 100644
index 85157d6fce4b..000000000000
--- a/contrib/groff/src/preproc/eqn/eqn.y
+++ /dev/null
@@ -1,330 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-int yylex();
-void yyerror(const char *);
-%}
-
-%union {
- char *str;
- box *b;
- pile_box *pb;
- matrix_box *mb;
- int n;
- column *col;
-}
-
-%token OVER
-%token SMALLOVER
-%token SQRT
-%token SUB
-%token SUP
-%token LPILE
-%token RPILE
-%token CPILE
-%token PILE
-%token LEFT
-%token RIGHT
-%token TO
-%token FROM
-%token SIZE
-%token FONT
-%token ROMAN
-%token BOLD
-%token ITALIC
-%token FAT
-%token ACCENT
-%token BAR
-%token UNDER
-%token ABOVE
-%token <str> TEXT
-%token <str> QUOTED_TEXT
-%token FWD
-%token BACK
-%token DOWN
-%token UP
-%token MATRIX
-%token COL
-%token LCOL
-%token RCOL
-%token CCOL
-%token MARK
-%token LINEUP
-%token TYPE
-%token VCENTER
-%token PRIME
-%token SPLIT
-%token NOSPLIT
-%token UACCENT
-%token SPECIAL
-
-/* these are handled in the lexer */
-%token SPACE
-%token GFONT
-%token GSIZE
-%token DEFINE
-%token NDEFINE
-%token TDEFINE
-%token SDEFINE
-%token UNDEF
-%token IFDEF
-%token INCLUDE
-%token DELIM
-%token CHARTYPE
-%token SET
-%token GRFONT
-%token GBFONT
-
-/* The original eqn manual says that `left' is right associative. It's lying.
-Consider `left ( ~ left ( ~ right ) right )'. */
-
-%right LEFT
-%left RIGHT
-%right LPILE RPILE CPILE PILE TEXT QUOTED_TEXT MATRIX MARK LINEUP '^' '~' '\t' '{' SPLIT NOSPLIT
-%right FROM TO
-%left SQRT OVER SMALLOVER
-%right SUB SUP
-%right ROMAN BOLD ITALIC FAT FONT SIZE FWD BACK DOWN UP TYPE VCENTER SPECIAL
-%right BAR UNDER PRIME
-%left ACCENT UACCENT
-
-%type <b> mark from_to sqrt_over script simple equation nonsup
-%type <n> number
-%type <str> text delim
-%type <pb> pile_element_list pile_arg
-%type <mb> column_list
-%type <col> column column_arg column_element_list
-
-%%
-top:
- /* empty */
- | equation
- { $1->top_level(); non_empty_flag = 1; }
- ;
-
-equation:
- mark
- { $$ = $1; }
- | equation mark
- {
- list_box *lb = $1->to_list_box();
- if (!lb)
- lb = new list_box($1);
- lb->append($2);
- $$ = lb;
- }
- ;
-
-mark:
- from_to
- { $$ = $1; }
- | MARK mark
- { $$ = make_mark_box($2); }
- | LINEUP mark
- { $$ = make_lineup_box($2); }
- ;
-
-from_to:
- sqrt_over %prec FROM
- { $$ = $1; }
- | sqrt_over TO from_to
- { $$ = make_limit_box($1, 0, $3); }
- | sqrt_over FROM sqrt_over
- { $$ = make_limit_box($1, $3, 0); }
- | sqrt_over FROM sqrt_over TO from_to
- { $$ = make_limit_box($1, $3, $5); }
- | sqrt_over FROM sqrt_over FROM from_to
- { $$ = make_limit_box($1, make_limit_box($3, $5, 0), 0); }
- ;
-
-sqrt_over:
- script
- { $$ = $1; }
- | SQRT sqrt_over
- { $$ = make_sqrt_box($2); }
- | sqrt_over OVER sqrt_over
- { $$ = make_over_box($1, $3); }
- | sqrt_over SMALLOVER sqrt_over
- { $$ = make_small_over_box($1, $3); }
- ;
-
-script:
- nonsup
- { $$ = $1; }
- | simple SUP script
- { $$ = make_script_box($1, 0, $3); }
- ;
-
-nonsup:
- simple %prec SUP
- { $$ = $1; }
- | simple SUB nonsup
- { $$ = make_script_box($1, $3, 0); }
- | simple SUB simple SUP script
- { $$ = make_script_box($1, $3, $5); }
- ;
-
-simple:
- TEXT
- { $$ = split_text($1); }
- | QUOTED_TEXT
- { $$ = new quoted_text_box($1); }
- | SPLIT QUOTED_TEXT
- { $$ = split_text($2); }
- | NOSPLIT TEXT
- { $$ = new quoted_text_box($2); }
- | '^'
- { $$ = new half_space_box; }
- | '~'
- { $$ = new space_box; }
- | '\t'
- { $$ = new tab_box; }
- | '{' equation '}'
- { $$ = $2; }
- | PILE pile_arg
- { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
- | LPILE pile_arg
- { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
- | RPILE pile_arg
- { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
- | CPILE pile_arg
- { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
- | MATRIX '{' column_list '}'
- { $$ = $3; }
- | LEFT delim equation RIGHT delim
- { $$ = make_delim_box($2, $3, $5); }
- | LEFT delim equation
- { $$ = make_delim_box($2, $3, 0); }
- | simple BAR
- { $$ = make_overline_box($1); }
- | simple UNDER
- { $$ = make_underline_box($1); }
- | simple PRIME
- { $$ = make_prime_box($1); }
- | simple ACCENT simple
- { $$ = make_accent_box($1, $3); }
- | simple UACCENT simple
- { $$ = make_uaccent_box($1, $3); }
- | ROMAN simple
- { $$ = new font_box(strsave(get_grfont()), $2); }
- | BOLD simple
- { $$ = new font_box(strsave(get_gbfont()), $2); }
- | ITALIC simple
- { $$ = new font_box(strsave(get_gfont()), $2); }
- | FAT simple
- { $$ = new fat_box($2); }
- | FONT text simple
- { $$ = new font_box($2, $3); }
- | SIZE text simple
- { $$ = new size_box($2, $3); }
- | FWD number simple
- { $$ = new hmotion_box($2, $3); }
- | BACK number simple
- { $$ = new hmotion_box(-$2, $3); }
- | UP number simple
- { $$ = new vmotion_box($2, $3); }
- | DOWN number simple
- { $$ = new vmotion_box(-$2, $3); }
- | TYPE text simple
- { $3->set_spacing_type($2); $$ = $3; }
- | VCENTER simple
- { $$ = new vcenter_box($2); }
- | SPECIAL text simple
- { $$ = make_special_box($2, $3); }
- ;
-
-number:
- text
- {
- int n;
- if (sscanf($1, "%d", &n) == 1)
- $$ = n;
- a_delete $1;
- }
- ;
-
-pile_element_list:
- equation
- { $$ = new pile_box($1); }
- | pile_element_list ABOVE equation
- { $1->append($3); $$ = $1; }
- ;
-
-pile_arg:
- '{' pile_element_list '}'
- { $$ = $2; }
- | number '{' pile_element_list '}'
- { $3->set_space($1); $$ = $3; }
- ;
-
-column_list:
- column
- { $$ = new matrix_box($1); }
- | column_list column
- { $1->append($2); $$ = $1; }
- ;
-
-column_element_list:
- equation
- { $$ = new column($1); }
- | column_element_list ABOVE equation
- { $1->append($3); $$ = $1; }
- ;
-
-column_arg:
- '{' column_element_list '}'
- { $$ = $2; }
- | number '{' column_element_list '}'
- { $3->set_space($1); $$ = $3; }
- ;
-
-column:
- COL column_arg
- { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
- | LCOL column_arg
- { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
- | RCOL column_arg
- { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
- | CCOL column_arg
- { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
- ;
-
-text: TEXT
- { $$ = $1; }
- | QUOTED_TEXT
- { $$ = $1; }
- ;
-
-delim:
- text
- { $$ = $1; }
- | '{'
- { $$ = strsave("{"); }
- | '}'
- { $$ = strsave("}"); }
- ;
-
-%%
diff --git a/contrib/groff/src/preproc/eqn/lex.cpp b/contrib/groff/src/preproc/eqn/lex.cpp
deleted file mode 100644
index 6aa494dbf0d8..000000000000
--- a/contrib/groff/src/preproc/eqn/lex.cpp
+++ /dev/null
@@ -1,1172 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "eqn_tab.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-
-// declarations to avoid friend name injection problems
-int get_char();
-int peek_char();
-int get_location(char **, int *);
-
-struct definition {
- char is_macro;
- char is_simple;
- union {
- int tok;
- char *contents;
- };
- definition();
- ~definition();
-};
-
-definition::definition() : is_macro(1), is_simple(0)
-{
- contents = 0;
-}
-
-definition::~definition()
-{
- if (is_macro)
- a_delete contents;
-}
-
-declare_ptable(definition)
-implement_ptable(definition)
-
-PTABLE(definition) macro_table;
-
-static struct {
- const char *name;
- int token;
-} token_table[] = {
- { "over", OVER },
- { "smallover", SMALLOVER },
- { "sqrt", SQRT },
- { "sub", SUB },
- { "sup", SUP },
- { "lpile", LPILE },
- { "rpile", RPILE },
- { "cpile", CPILE },
- { "pile", PILE },
- { "left", LEFT },
- { "right", RIGHT },
- { "to", TO },
- { "from", FROM },
- { "size", SIZE },
- { "font", FONT },
- { "roman", ROMAN },
- { "bold", BOLD },
- { "italic", ITALIC },
- { "fat", FAT },
- { "bar", BAR },
- { "under", UNDER },
- { "accent", ACCENT },
- { "uaccent", UACCENT },
- { "above", ABOVE },
- { "fwd", FWD },
- { "back", BACK },
- { "down", DOWN },
- { "up", UP },
- { "matrix", MATRIX },
- { "col", COL },
- { "lcol", LCOL },
- { "rcol", RCOL },
- { "ccol", CCOL },
- { "mark", MARK },
- { "lineup", LINEUP },
- { "space", SPACE },
- { "gfont", GFONT },
- { "gsize", GSIZE },
- { "define", DEFINE },
- { "sdefine", SDEFINE },
- { "ndefine", NDEFINE },
- { "tdefine", TDEFINE },
- { "undef", UNDEF },
- { "ifdef", IFDEF },
- { "include", INCLUDE },
- { "copy", INCLUDE },
- { "delim", DELIM },
- { "chartype", CHARTYPE },
- { "type", TYPE },
- { "vcenter", VCENTER },
- { "set", SET },
- { "opprime", PRIME },
- { "grfont", GRFONT },
- { "gbfont", GBFONT },
- { "split", SPLIT },
- { "nosplit", NOSPLIT },
- { "special", SPECIAL },
-};
-
-static struct {
- const char *name;
- const char *def;
-} def_table[] = {
- { "ALPHA", "\\(*A" },
- { "BETA", "\\(*B" },
- { "CHI", "\\(*X" },
- { "DELTA", "\\(*D" },
- { "EPSILON", "\\(*E" },
- { "ETA", "\\(*Y" },
- { "GAMMA", "\\(*G" },
- { "IOTA", "\\(*I" },
- { "KAPPA", "\\(*K" },
- { "LAMBDA", "\\(*L" },
- { "MU", "\\(*M" },
- { "NU", "\\(*N" },
- { "OMEGA", "\\(*W" },
- { "OMICRON", "\\(*O" },
- { "PHI", "\\(*F" },
- { "PI", "\\(*P" },
- { "PSI", "\\(*Q" },
- { "RHO", "\\(*R" },
- { "SIGMA", "\\(*S" },
- { "TAU", "\\(*T" },
- { "THETA", "\\(*H" },
- { "UPSILON", "\\(*U" },
- { "XI", "\\(*C" },
- { "ZETA", "\\(*Z" },
- { "Alpha", "\\(*A" },
- { "Beta", "\\(*B" },
- { "Chi", "\\(*X" },
- { "Delta", "\\(*D" },
- { "Epsilon", "\\(*E" },
- { "Eta", "\\(*Y" },
- { "Gamma", "\\(*G" },
- { "Iota", "\\(*I" },
- { "Kappa", "\\(*K" },
- { "Lambda", "\\(*L" },
- { "Mu", "\\(*M" },
- { "Nu", "\\(*N" },
- { "Omega", "\\(*W" },
- { "Omicron", "\\(*O" },
- { "Phi", "\\(*F" },
- { "Pi", "\\(*P" },
- { "Psi", "\\(*Q" },
- { "Rho", "\\(*R" },
- { "Sigma", "\\(*S" },
- { "Tau", "\\(*T" },
- { "Theta", "\\(*H" },
- { "Upsilon", "\\(*U" },
- { "Xi", "\\(*C" },
- { "Zeta", "\\(*Z" },
- { "alpha", "\\(*a" },
- { "beta", "\\(*b" },
- { "chi", "\\(*x" },
- { "delta", "\\(*d" },
- { "epsilon", "\\(*e" },
- { "eta", "\\(*y" },
- { "gamma", "\\(*g" },
- { "iota", "\\(*i" },
- { "kappa", "\\(*k" },
- { "lambda", "\\(*l" },
- { "mu", "\\(*m" },
- { "nu", "\\(*n" },
- { "omega", "\\(*w" },
- { "omicron", "\\(*o" },
- { "phi", "\\(*f" },
- { "pi", "\\(*p" },
- { "psi", "\\(*q" },
- { "rho", "\\(*r" },
- { "sigma", "\\(*s" },
- { "tau", "\\(*t" },
- { "theta", "\\(*h" },
- { "upsilon", "\\(*u" },
- { "xi", "\\(*c" },
- { "zeta", "\\(*z" },
- { "max", "{type \"operator\" roman \"max\"}" },
- { "min", "{type \"operator\" roman \"min\"}" },
- { "lim", "{type \"operator\" roman \"lim\"}" },
- { "sin", "{type \"operator\" roman \"sin\"}" },
- { "cos", "{type \"operator\" roman \"cos\"}" },
- { "tan", "{type \"operator\" roman \"tan\"}" },
- { "sinh", "{type \"operator\" roman \"sinh\"}" },
- { "cosh", "{type \"operator\" roman \"cosh\"}" },
- { "tanh", "{type \"operator\" roman \"tanh\"}" },
- { "arc", "{type \"operator\" roman \"arc\"}" },
- { "log", "{type \"operator\" roman \"log\"}" },
- { "ln", "{type \"operator\" roman \"ln\"}" },
- { "exp", "{type \"operator\" roman \"exp\"}" },
- { "Re", "{type \"operator\" roman \"Re\"}" },
- { "Im", "{type \"operator\" roman \"Im\"}" },
- { "det", "{type \"operator\" roman \"det\"}" },
- { "and", "{roman \"and\"}" },
- { "if", "{roman \"if\"}" },
- { "for", "{roman \"for\"}" },
- { "sum", "{type \"operator\" vcenter size +5 \\(*S}" },
- { "prod", "{type \"operator\" vcenter size +5 \\(*P}" },
- { "int", "{type \"operator\" vcenter size +8 \\(is}" },
- { "union", "{type \"operator\" vcenter size +5 \\(cu}" },
- { "inter", "{type \"operator\" vcenter size +5 \\(ca}" },
- { "times", "type \"binary\" \\(mu" },
- { "ldots", "type \"inner\" { . . . }" },
- { "inf", "\\(if" },
- { "partial", "\\(pd" },
- { "nothing", "\"\"" },
- { "half", "{1 smallover 2}" },
- { "hat_def", "roman \"^\"" },
- { "hat", "accent { hat_def }" },
- { "dot_def", "back 15 \"\\v'-52M'.\\v'52M'\"" },
- { "dot", "accent { dot_def }" },
- { "dotdot_def", "back 25 \"\\v'-52M'..\\v'52M'\"" },
- { "dotdot", "accent { dotdot_def }" },
- { "tilde_def", "\"~\"" },
- { "tilde", "accent { tilde_def }" },
- { "utilde_def", "\"\\v'75M'~\\v'-75M'\"" },
- { "utilde", "uaccent { utilde_def }" },
- { "vec_def", "up 52 size -5 \\(->" },
- { "vec", "accent { vec_def }" },
- { "dyad_def", "up 52 size -5 {\\(<- back 60 \\(->}" },
- { "dyad", "accent { dyad_def }" },
- { "==", "type \"relation\" \\(==" },
- { "!=", "type \"relation\" \\(!=" },
- { "+-", "type \"binary\" \\(+-" },
- { "->", "type \"relation\" \\(->" },
- { "<-", "type \"relation\" \\(<-" },
- { "<<", "{ < back 20 < }" },
- { ">>", "{ > back 20 > }" },
- { "...", "type \"inner\" vcenter { . . . }" },
- { "prime", "'" },
- { "approx", "type \"relation\" \"\\(~=\"" },
- { "grad", "\\(gr" },
- { "del", "\\(gr" },
- { "cdot", "type \"binary\" vcenter ." },
- { "dollar", "$" },
-};
-
-void init_table(const char *device)
-{
- unsigned int i;
- for (i = 0; i < sizeof(token_table)/sizeof(token_table[0]); i++) {
- definition *def = new definition[1];
- def->is_macro = 0;
- def->tok = token_table[i].token;
- macro_table.define(token_table[i].name, def);
- }
- for (i = 0; i < sizeof(def_table)/sizeof(def_table[0]); i++) {
- definition *def = new definition[1];
- def->is_macro = 1;
- def->contents = strsave(def_table[i].def);
- def->is_simple = 1;
- macro_table.define(def_table[i].name, def);
- }
- definition *def = new definition[1];
- def->is_macro = 1;
- def->contents = strsave("1");
- macro_table.define(device, def);
-}
-
-class input {
- input *next;
-public:
- input(input *p);
- virtual ~input();
- virtual int get() = 0;
- virtual int peek() = 0;
- virtual int get_location(char **, int *);
-
- friend int get_char();
- friend int peek_char();
- friend int get_location(char **, int *);
- friend void init_lex(const char *str, const char *filename, int lineno);
-};
-
-class file_input : public input {
- FILE *fp;
- char *filename;
- int lineno;
- string line;
- const char *ptr;
- int read_line();
-public:
- file_input(FILE *, const char *, input *);
- ~file_input();
- int get();
- int peek();
- int get_location(char **, int *);
-};
-
-
-class macro_input : public input {
- char *s;
- char *p;
-public:
- macro_input(const char *, input *);
- ~macro_input();
- int get();
- int peek();
-};
-
-class top_input : public macro_input {
- char *filename;
- int lineno;
- public:
- top_input(const char *, const char *, int, input *);
- ~top_input();
- int get();
- int get_location(char **, int *);
-};
-
-class argument_macro_input: public input {
- char *s;
- char *p;
- char *ap;
- int argc;
- char *argv[9];
-public:
- argument_macro_input(const char *, int, char **, input *);
- ~argument_macro_input();
- int get();
- int peek();
-};
-
-input::input(input *x) : next(x)
-{
-}
-
-input::~input()
-{
-}
-
-int input::get_location(char **, int *)
-{
- return 0;
-}
-
-file_input::file_input(FILE *f, const char *fn, input *p)
-: input(p), lineno(0), ptr("")
-{
- fp = f;
- filename = strsave(fn);
-}
-
-file_input::~file_input()
-{
- a_delete filename;
- fclose(fp);
-}
-
-int file_input::read_line()
-{
- for (;;) {
- line.clear();
- lineno++;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- else if (invalid_input_char(c))
- lex_error("invalid input character code %1", c);
- else {
- line += char(c);
- if (c == '\n')
- break;
- }
- }
- if (line.length() == 0)
- return 0;
- if (!(line.length() >= 3 && line[0] == '.' && line[1] == 'E'
- && (line[2] == 'Q' || line[2] == 'N')
- && (line.length() == 3 || line[3] == ' ' || line[3] == '\n'
- || compatible_flag))) {
- line += '\0';
- ptr = line.contents();
- return 1;
- }
- }
-}
-
-int file_input::get()
-{
- if (*ptr != '\0' || read_line())
- return *ptr++ & 0377;
- else
- return EOF;
-}
-
-int file_input::peek()
-{
- if (*ptr != '\0' || read_line())
- return *ptr;
- else
- return EOF;
-}
-
-int file_input::get_location(char **fnp, int *lnp)
-{
- *fnp = filename;
- *lnp = lineno;
- return 1;
-}
-
-macro_input::macro_input(const char *str, input *x) : input(x)
-{
- p = s = strsave(str);
-}
-
-macro_input::~macro_input()
-{
- a_delete s;
-}
-
-int macro_input::get()
-{
- if (p == 0 || *p == '\0')
- return EOF;
- else
- return *p++ & 0377;
-}
-
-int macro_input::peek()
-{
- if (p == 0 || *p == '\0')
- return EOF;
- else
- return *p & 0377;
-}
-
-top_input::top_input(const char *str, const char *fn, int ln, input *x)
-: macro_input(str, x), lineno(ln)
-{
- filename = strsave(fn);
-}
-
-top_input::~top_input()
-{
- a_delete filename;
-}
-
-int top_input::get()
-{
- int c = macro_input::get();
- if (c == '\n')
- lineno++;
- return c;
-}
-
-int top_input::get_location(char **fnp, int *lnp)
-{
- *fnp = filename;
- *lnp = lineno;
- return 1;
-}
-
-// Character representing $1. Must be invalid input character.
-#define ARG1 14
-
-argument_macro_input::argument_macro_input(const char *body, int ac,
- char **av, input *x)
-: input(x), ap(0), argc(ac)
-{
- int i;
- for (i = 0; i < argc; i++)
- argv[i] = av[i];
- p = s = strsave(body);
- int j = 0;
- for (i = 0; s[i] != '\0'; i++)
- if (s[i] == '$' && s[i+1] >= '0' && s[i+1] <= '9') {
- if (s[i+1] != '0')
- s[j++] = ARG1 + s[++i] - '1';
- }
- else
- s[j++] = s[i];
- s[j] = '\0';
-}
-
-
-argument_macro_input::~argument_macro_input()
-{
- for (int i = 0; i < argc; i++)
- a_delete argv[i];
- a_delete s;
-}
-
-int argument_macro_input::get()
-{
- if (ap) {
- if (*ap != '\0')
- return *ap++ & 0377;
- ap = 0;
- }
- if (p == 0)
- return EOF;
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && argv[i] != 0 && argv[i][0] != '\0') {
- ap = argv[i];
- return *ap++ & 0377;
- }
- }
- if (*p == '\0')
- return EOF;
- return *p++ & 0377;
-}
-
-int argument_macro_input::peek()
-{
- if (ap) {
- if (*ap != '\0')
- return *ap & 0377;
- ap = 0;
- }
- if (p == 0)
- return EOF;
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && argv[i] != 0 && argv[i][0] != '\0') {
- ap = argv[i];
- return *ap & 0377;
- }
- }
- if (*p == '\0')
- return EOF;
- return *p & 0377;
-}
-
-static input *current_input = 0;
-
-/* we insert a newline between input from different levels */
-
-int get_char()
-{
- if (current_input == 0)
- return EOF;
- else {
- int c = current_input->get();
- if (c != EOF)
- return c;
- else {
- input *tem = current_input;
- current_input = current_input->next;
- delete tem;
- return '\n';
- }
- }
-}
-
-int peek_char()
-{
- if (current_input == 0)
- return EOF;
- else {
- int c = current_input->peek();
- if (c != EOF)
- return c;
- else
- return '\n';
- }
-}
-
-int get_location(char **fnp, int *lnp)
-{
- for (input *p = current_input; p; p = p->next)
- if (p->get_location(fnp, lnp))
- return 1;
- return 0;
-}
-
-string token_buffer;
-const int NCONTEXT = 4;
-string context_ring[NCONTEXT];
-int context_index = 0;
-
-void flush_context()
-{
- for (int i = 0; i < NCONTEXT; i++)
- context_ring[i] = "";
- context_index = 0;
-}
-
-void show_context()
-{
- int i = context_index;
- fputs(" context is\n\t", stderr);
- for (;;) {
- int j = (i + 1) % NCONTEXT;
- if (j == context_index) {
- fputs(">>> ", stderr);
- put_string(context_ring[i], stderr);
- fputs(" <<<", stderr);
- break;
- }
- else if (context_ring[i].length() > 0) {
- put_string(context_ring[i], stderr);
- putc(' ', stderr);
- }
- i = j;
- }
- putc('\n', stderr);
-}
-
-void add_context(const string &s)
-{
- context_ring[context_index] = s;
- context_index = (context_index + 1) % NCONTEXT;
-}
-
-void add_context(char c)
-{
- context_ring[context_index] = c;
- context_index = (context_index + 1) % NCONTEXT;
-}
-
-void add_quoted_context(const string &s)
-{
- string &r = context_ring[context_index];
- r = '"';
- for (int i = 0; i < s.length(); i++)
- if (s[i] == '"')
- r += "\\\"";
- else
- r += s[i];
- r += '"';
- context_index = (context_index + 1) % NCONTEXT;
-}
-
-void init_lex(const char *str, const char *filename, int lineno)
-{
- while (current_input != 0) {
- input *tem = current_input;
- current_input = current_input->next;
- delete tem;
- }
- current_input = new top_input(str, filename, lineno, 0);
- flush_context();
-}
-
-
-void get_delimited_text()
-{
- char *filename;
- int lineno;
- int got_location = get_location(&filename, &lineno);
- int start = get_char();
- while (start == ' ' || start == '\t' || start == '\n')
- start = get_char();
- token_buffer.clear();
- if (start == EOF) {
- if (got_location)
- error_with_file_and_line(filename, lineno,
- "end of input while defining macro");
- else
- error("end of input while defining macro");
- return;
- }
- for (;;) {
- int c = get_char();
- if (c == EOF) {
- if (got_location)
- error_with_file_and_line(filename, lineno,
- "end of input while defining macro");
- else
- error("end of input while defining macro");
- add_context(start + token_buffer);
- return;
- }
- if (c == start)
- break;
- token_buffer += char(c);
- }
- add_context(start + token_buffer + start);
-}
-
-void interpolate_macro_with_args(const char *body)
-{
- char *argv[9];
- int argc = 0;
- int i;
- for (i = 0; i < 9; i++)
- argv[i] = 0;
- int level = 0;
- int c;
- do {
- token_buffer.clear();
- for (;;) {
- c = get_char();
- if (c == EOF) {
- lex_error("end of input while scanning macro arguments");
- break;
- }
- if (level == 0 && (c == ',' || c == ')')) {
- if (token_buffer.length() > 0) {
- token_buffer += '\0';
- argv[argc] = strsave(token_buffer.contents());
- }
- // for `foo()', argc = 0
- if (argc > 0 || c != ')' || i > 0)
- argc++;
- break;
- }
- token_buffer += char(c);
- if (c == '(')
- level++;
- else if (c == ')')
- level--;
- }
- } while (c != ')' && c != EOF);
- current_input = new argument_macro_input(body, argc, argv, current_input);
-}
-
-/* If lookup flag is non-zero the token will be looked up to see
-if it is macro. If it's 1, it will looked up to see if it's a token.
-*/
-
-int get_token(int lookup_flag = 0)
-{
- for (;;) {
- int c = get_char();
- while (c == ' ' || c == '\n')
- c = get_char();
- switch (c) {
- case EOF:
- {
- add_context("end of input");
- }
- return 0;
- case '"':
- {
- int quoted = 0;
- token_buffer.clear();
- for (;;) {
- c = get_char();
- if (c == EOF) {
- lex_error("missing \"");
- break;
- }
- else if (c == '\n') {
- lex_error("newline before end of quoted text");
- break;
- }
- else if (c == '"') {
- if (!quoted)
- break;
- token_buffer[token_buffer.length() - 1] = '"';
- quoted = 0;
- }
- else {
- token_buffer += c;
- quoted = quoted ? 0 : c == '\\';
- }
- }
- }
- add_quoted_context(token_buffer);
- return QUOTED_TEXT;
- case '{':
- case '}':
- case '^':
- case '~':
- case '\t':
- add_context(c);
- return c;
- default:
- {
- int break_flag = 0;
- int quoted = 0;
- token_buffer.clear();
- if (c == '\\')
- quoted = 1;
- else
- token_buffer += c;
- int done = 0;
- while (!done) {
- c = peek_char();
- if (!quoted && lookup_flag != 0 && c == '(') {
- token_buffer += '\0';
- definition *def = macro_table.lookup(token_buffer.contents());
- if (def && def->is_macro && !def->is_simple) {
- (void)get_char(); // skip initial '('
- interpolate_macro_with_args(def->contents);
- break_flag = 1;
- break;
- }
- token_buffer.set_length(token_buffer.length() - 1);
- }
- if (quoted) {
- quoted = 0;
- switch (c) {
- case EOF:
- lex_error("`\\' ignored at end of equation");
- done = 1;
- break;
- case '\n':
- lex_error("`\\' ignored because followed by newline");
- done = 1;
- break;
- case '\t':
- lex_error("`\\' ignored because followed by tab");
- done = 1;
- break;
- case '"':
- (void)get_char();
- token_buffer += '"';
- break;
- default:
- (void)get_char();
- token_buffer += '\\';
- token_buffer += c;
- break;
- }
- }
- else {
- switch (c) {
- case EOF:
- case '{':
- case '}':
- case '^':
- case '~':
- case '"':
- case ' ':
- case '\t':
- case '\n':
- done = 1;
- break;
- case '\\':
- (void)get_char();
- quoted = 1;
- break;
- default:
- (void)get_char();
- token_buffer += char(c);
- break;
- }
- }
- }
- if (break_flag || token_buffer.length() == 0)
- break;
- if (lookup_flag != 0) {
- token_buffer += '\0';
- definition *def = macro_table.lookup(token_buffer.contents());
- token_buffer.set_length(token_buffer.length() - 1);
- if (def) {
- if (def->is_macro) {
- current_input = new macro_input(def->contents, current_input);
- break;
- }
- else if (lookup_flag == 1) {
- add_context(token_buffer);
- return def->tok;
- }
- }
- }
- add_context(token_buffer);
- return TEXT;
- }
- }
- }
-}
-
-void do_include()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad filename for include");
- return;
- }
- token_buffer += '\0';
- const char *filename = token_buffer.contents();
- errno = 0;
- FILE *fp = fopen(filename, "r");
- if (fp == 0) {
- lex_error("can't open included file `%1'", filename);
- return;
- }
- current_input = new file_input(fp, filename, current_input);
-}
-
-void ignore_definition()
-{
- int t = get_token();
- if (t != TEXT) {
- lex_error("bad definition");
- return;
- }
- get_delimited_text();
-}
-
-void do_definition(int is_simple)
-{
- int t = get_token();
- if (t != TEXT) {
- lex_error("bad definition");
- return;
- }
- token_buffer += '\0';
- const char *name = token_buffer.contents();
- definition *def = macro_table.lookup(name);
- if (def == 0) {
- def = new definition[1];
- macro_table.define(name, def);
- }
- else if (def->is_macro) {
- a_delete def->contents;
- }
- get_delimited_text();
- token_buffer += '\0';
- def->is_macro = 1;
- def->contents = strsave(token_buffer.contents());
- def->is_simple = is_simple;
-}
-
-void do_undef()
-{
- int t = get_token();
- if (t != TEXT) {
- lex_error("bad undef command");
- return;
- }
- token_buffer += '\0';
- macro_table.define(token_buffer.contents(), 0);
-}
-
-void do_gsize()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad argument to gsize command");
- return;
- }
- token_buffer += '\0';
- if (!set_gsize(token_buffer.contents()))
- lex_error("invalid size `%1'", token_buffer.contents());
-}
-
-void do_gfont()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad argument to gfont command");
- return;
- }
- token_buffer += '\0';
- set_gfont(token_buffer.contents());
-}
-
-void do_grfont()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad argument to grfont command");
- return;
- }
- token_buffer += '\0';
- set_grfont(token_buffer.contents());
-}
-
-void do_gbfont()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad argument to gbfont command");
- return;
- }
- token_buffer += '\0';
- set_gbfont(token_buffer.contents());
-}
-
-void do_space()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad argument to space command");
- return;
- }
- token_buffer += '\0';
- char *ptr;
- long n = strtol(token_buffer.contents(), &ptr, 10);
- if (n == 0 && ptr == token_buffer.contents())
- lex_error("bad argument `%1' to space command", token_buffer.contents());
- else
- set_space(int(n));
-}
-
-void do_ifdef()
-{
- int t = get_token();
- if (t != TEXT) {
- lex_error("bad ifdef");
- return;
- }
- token_buffer += '\0';
- definition *def = macro_table.lookup(token_buffer.contents());
- int result = def && def->is_macro && !def->is_simple;
- get_delimited_text();
- if (result) {
- token_buffer += '\0';
- current_input = new macro_input(token_buffer.contents(), current_input);
- }
-}
-
-void do_delim()
-{
- int c = get_char();
- while (c == ' ' || c == '\n')
- c = get_char();
- int d;
- if (c == EOF || (d = get_char()) == EOF)
- lex_error("end of file while reading argument to `delim'");
- else {
- if (c == 'o' && d == 'f' && peek_char() == 'f') {
- (void)get_char();
- start_delim = end_delim = '\0';
- }
- else {
- start_delim = c;
- end_delim = d;
- }
- }
-}
-
-void do_chartype()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad chartype");
- return;
- }
- token_buffer += '\0';
- string type = token_buffer;
- t = get_token();
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad chartype");
- return;
- }
- token_buffer += '\0';
- set_char_type(type.contents(), strsave(token_buffer.contents()));
-}
-
-void do_set()
-{
- int t = get_token(2);
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad set");
- return;
- }
- token_buffer += '\0';
- string param = token_buffer;
- t = get_token();
- if (t != TEXT && t != QUOTED_TEXT) {
- lex_error("bad set");
- return;
- }
- token_buffer += '\0';
- int n;
- if (sscanf(&token_buffer[0], "%d", &n) != 1) {
- lex_error("bad number `%1'", token_buffer.contents());
- return;
- }
- set_param(param.contents(), n);
-}
-
-int yylex()
-{
- for (;;) {
- int tk = get_token(1);
- switch(tk) {
- case UNDEF:
- do_undef();
- break;
- case SDEFINE:
- do_definition(1);
- break;
- case DEFINE:
- do_definition(0);
- break;
- case TDEFINE:
- if (!nroff)
- do_definition(0);
- else
- ignore_definition();
- break;
- case NDEFINE:
- if (nroff)
- do_definition(0);
- else
- ignore_definition();
- break;
- case GSIZE:
- do_gsize();
- break;
- case GFONT:
- do_gfont();
- break;
- case GRFONT:
- do_grfont();
- break;
- case GBFONT:
- do_gbfont();
- break;
- case SPACE:
- do_space();
- break;
- case INCLUDE:
- do_include();
- break;
- case IFDEF:
- do_ifdef();
- break;
- case DELIM:
- do_delim();
- break;
- case CHARTYPE:
- do_chartype();
- break;
- case SET:
- do_set();
- break;
- case QUOTED_TEXT:
- case TEXT:
- token_buffer += '\0';
- yylval.str = strsave(token_buffer.contents());
- // fall through
- default:
- return tk;
- }
- }
-}
-
-void lex_error(const char *message,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- char *filename;
- int lineno;
- if (!get_location(&filename, &lineno))
- error(message, arg1, arg2, arg3);
- else
- error_with_file_and_line(filename, lineno, message, arg1, arg2, arg3);
-}
-
-void yyerror(const char *s)
-{
- char *filename;
- int lineno;
- if (!get_location(&filename, &lineno))
- error(s);
- else
- error_with_file_and_line(filename, lineno, s);
- show_context();
-}
-
diff --git a/contrib/groff/src/preproc/eqn/limit.cpp b/contrib/groff/src/preproc/eqn/limit.cpp
deleted file mode 100644
index b9f35f97efc5..000000000000
--- a/contrib/groff/src/preproc/eqn/limit.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-class limit_box : public box {
-private:
- box *p;
- box *from;
- box *to;
-public:
- limit_box(box *, box *, box *);
- ~limit_box();
- int compute_metrics(int);
- void output();
- void debug_print();
- void check_tabs(int);
-};
-
-box *make_limit_box(box *pp, box *qq, box *rr)
-{
- return new limit_box(pp, qq, rr);
-}
-
-limit_box::limit_box(box *pp, box *qq, box *rr)
-: p(pp), from(qq), to(rr)
-{
- spacing_type = p->spacing_type;
-}
-
-limit_box::~limit_box()
-{
- delete p;
- delete from;
- delete to;
-}
-
-int limit_box::compute_metrics(int style)
-{
- printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
- if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
- int res = 0;
- int mark_uid = -1;
- if (from != 0) {
- res = from->compute_metrics(cramped_style(script_style(style)));
- if (res)
- mark_uid = from->uid;
- }
- if (to != 0) {
- int r = to->compute_metrics(script_style(style));
- if (res && r)
- error("multiple marks and lineups");
- else {
- mark_uid = to->uid;
- res = r;
- }
- }
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- int r = p->compute_metrics(style);
- p->compute_subscript_kern();
- if (res && r)
- error("multiple marks and lineups");
- else {
- mark_uid = p->uid;
- res = r;
- }
- printf(".nr " LEFT_WIDTH_FORMAT " "
- "0\\n[" WIDTH_FORMAT "]",
- uid, p->uid);
- if (from != 0)
- printf(">?(\\n[" SUB_KERN_FORMAT "]+\\n[" WIDTH_FORMAT "])",
- p->uid, from->uid);
- if (to != 0)
- printf(">?(-\\n[" SUB_KERN_FORMAT "]+\\n[" WIDTH_FORMAT "])",
- p->uid, to->uid);
- printf("/2\n");
- printf(".nr " WIDTH_FORMAT " "
- "0\\n[" WIDTH_FORMAT "]",
- uid, p->uid);
- if (from != 0)
- printf(">?(-\\n[" SUB_KERN_FORMAT "]+\\n[" WIDTH_FORMAT "])",
- p->uid, from->uid);
- if (to != 0)
- printf(">?(\\n[" SUB_KERN_FORMAT "]+\\n[" WIDTH_FORMAT "])",
- p->uid, to->uid);
- printf("/2+\\n[" LEFT_WIDTH_FORMAT "]\n", uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]", uid, p->uid);
- if (to != 0)
- printf(">?\\n[" WIDTH_FORMAT "]", to->uid);
- if (from != 0)
- printf(">?\\n[" WIDTH_FORMAT "]", from->uid);
- printf("\n");
- if (res)
- printf(".nr " MARK_REG " +(\\n[" LEFT_WIDTH_FORMAT "]"
- "-(\\n[" WIDTH_FORMAT "]/2))\n",
- uid, mark_uid);
- if (to != 0) {
- printf(".nr " SUP_RAISE_FORMAT " %dM+\\n[" DEPTH_FORMAT
- "]>?%dM+\\n[" HEIGHT_FORMAT "]\n",
- uid, big_op_spacing1, to->uid, big_op_spacing3, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" SUP_RAISE_FORMAT "]+\\n["
- HEIGHT_FORMAT "]+%dM\n",
- uid, uid, to->uid, big_op_spacing5);
- }
- else
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- if (from != 0) {
- printf(".nr " SUB_LOWER_FORMAT " %dM+\\n[" HEIGHT_FORMAT
- "]>?%dM+\\n[" DEPTH_FORMAT "]\n",
- uid, big_op_spacing2, from->uid, big_op_spacing4, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" SUB_LOWER_FORMAT "]+\\n["
- DEPTH_FORMAT "]+%dM\n",
- uid, uid, from->uid, big_op_spacing5);
- }
- else
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return res;
-}
-
-void limit_box::output()
-{
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
- if (to != 0) {
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u"
- "+(-\\n[" WIDTH_FORMAT "]u+\\n[" SUB_KERN_FORMAT "]u/2u)'",
- uid, to->uid, p->uid);
- to->output();
- printf(DELIMITER_CHAR);
- }
- if (from != 0) {
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u"
- "+(-\\n[" SUB_KERN_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, p->uid, from->uid);
- from->output();
- printf(DELIMITER_CHAR);
- }
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u"
- "-(\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, p->uid);
- p->output();
- printf(DELIMITER_CHAR);
- printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid);
-}
-
-void limit_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " }");
- if (from) {
- fprintf(stderr, " from { ");
- from->debug_print();
- fprintf(stderr, " }");
- }
- if (to) {
- fprintf(stderr, " to { ");
- to->debug_print();
- fprintf(stderr, " }");
- }
-}
-
-void limit_box::check_tabs(int level)
-{
- if (to)
- to->check_tabs(level + 1);
- if (from)
- from->check_tabs(level + 1);
- p->check_tabs(level + 1);
-}
diff --git a/contrib/groff/src/preproc/eqn/list.cpp b/contrib/groff/src/preproc/eqn/list.cpp
deleted file mode 100644
index 003562afa501..000000000000
--- a/contrib/groff/src/preproc/eqn/list.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-list_box *box::to_list_box()
-{
- return 0;
-}
-
-list_box *list_box::to_list_box()
-{
- return this;
-}
-
-void list_box::append(box *pp)
-{
- list_box *q = pp->to_list_box();
- if (q == 0)
- list.append(pp);
- else {
- for (int i = 0; i < q->list.len; i++) {
- list.append(q->list.p[i]);
- q->list.p[i] = 0;
- }
- q->list.len = 0;
- delete q;
- }
-}
-
-list_box::list_box(box *pp) : list(pp), sty(-1)
-{
- list_box *q = pp->to_list_box();
- if (q != 0) {
- // flatten it
- list.p[0] = q->list.p[0];
- for (int i = 1; i < q->list.len; i++) {
- list.append(q->list.p[i]);
- q->list.p[i] = 0;
- }
- q->list.len = 0;
- delete q;
- }
-}
-
-static int compute_spacing(int is_script, int left, int right)
-{
- if (left == SUPPRESS_TYPE || right == SUPPRESS_TYPE)
- return 0;
- if (left == PUNCTUATION_TYPE)
- return is_script ? 0 : thin_space;
- if (left == OPENING_TYPE || right == CLOSING_TYPE)
- return 0;
- if (right == BINARY_TYPE || left == BINARY_TYPE)
- return is_script ? 0 : medium_space;
- if (right == RELATION_TYPE) {
- if (left == RELATION_TYPE)
- return 0;
- else
- return is_script ? 0 : thick_space;
- }
- if (left == RELATION_TYPE)
- return is_script ? 0 : thick_space;
- if (right == OPERATOR_TYPE)
- return thin_space;
- if (left == INNER_TYPE || right == INNER_TYPE)
- return is_script ? 0 : thin_space;
- if (left == OPERATOR_TYPE && right == ORDINARY_TYPE)
- return thin_space;
- return 0;
-}
-
-int list_box::compute_metrics(int style)
-{
- sty = style;
- int i;
- for (i = 0; i < list.len; i++) {
- int t = list.p[i]->spacing_type;
- // 5
- if (t == BINARY_TYPE) {
- int prevt;
- if (i == 0
- || (prevt = list.p[i-1]->spacing_type) == BINARY_TYPE
- || prevt == OPERATOR_TYPE
- || prevt == RELATION_TYPE
- || prevt == OPENING_TYPE
- || prevt == PUNCTUATION_TYPE)
- list.p[i]->spacing_type = ORDINARY_TYPE;
- }
- // 7
- else if ((t == RELATION_TYPE || t == CLOSING_TYPE
- || t == PUNCTUATION_TYPE)
- && i > 0 && list.p[i-1]->spacing_type == BINARY_TYPE)
- list.p[i-1]->spacing_type = ORDINARY_TYPE;
- }
- for (i = 0; i < list.len; i++) {
- unsigned flags = 0;
- if (i - 1 >= 0 && list.p[i - 1]->right_is_italic())
- flags |= HINT_PREV_IS_ITALIC;
- if (i + 1 < list.len && list.p[i + 1]->left_is_italic())
- flags |= HINT_NEXT_IS_ITALIC;
- if (flags)
- list.p[i]->hint(flags);
- }
- is_script = (style <= SCRIPT_STYLE);
- int total_spacing = 0;
- for (i = 1; i < list.len; i++)
- total_spacing += compute_spacing(is_script, list.p[i-1]->spacing_type,
- list.p[i]->spacing_type);
- int res = 0;
- for (i = 0; i < list.len; i++)
- if (!list.p[i]->is_simple()) {
- int r = list.p[i]->compute_metrics(style);
- if (r) {
- if (res)
- error("multiple marks and lineups");
- else {
- compute_sublist_width(i);
- printf(".nr " MARK_REG " +\\n[" TEMP_REG"]\n");
- res = r;
- }
- }
- }
- printf(".nr " WIDTH_FORMAT " %dM", uid, total_spacing);
- for (i = 0; i < list.len; i++)
- if (!list.p[i]->is_simple())
- printf("+\\n[" WIDTH_FORMAT "]", list.p[i]->uid);
- printf("\n");
- printf(".nr " HEIGHT_FORMAT " 0", uid);
- for (i = 0; i < list.len; i++)
- if (!list.p[i]->is_simple())
- printf(">?\\n[" HEIGHT_FORMAT "]", list.p[i]->uid);
- printf("\n");
- printf(".nr " DEPTH_FORMAT " 0", uid);
- for (i = 0; i < list.len; i++)
- if (!list.p[i]->is_simple())
- printf(">?\\n[" DEPTH_FORMAT "]", list.p[i]->uid);
- printf("\n");
- int have_simple = 0;
- for (i = 0; i < list.len && !have_simple; i++)
- have_simple = list.p[i]->is_simple();
- if (have_simple) {
- printf(".nr " WIDTH_FORMAT " +\\w" DELIMITER_CHAR, uid);
- for (i = 0; i < list.len; i++)
- if (list.p[i]->is_simple())
- list.p[i]->output();
- printf(DELIMITER_CHAR "\n");
- printf(".nr " HEIGHT_FORMAT " \\n[rst]>?\\n[" HEIGHT_FORMAT "]\n",
- uid, uid);
- printf(".nr " DEPTH_FORMAT " 0-\\n[rsb]>?\\n[" DEPTH_FORMAT "]\n",
- uid, uid);
- }
- return res;
-}
-
-void list_box::compute_sublist_width(int n)
-{
- int total_spacing = 0;
- int i;
- for (i = 1; i < n + 1 && i < list.len; i++)
- total_spacing += compute_spacing(is_script, list.p[i-1]->spacing_type,
- list.p[i]->spacing_type);
- printf(".nr " TEMP_REG " %dM", total_spacing);
- for (i = 0; i < n; i++)
- if (!list.p[i]->is_simple())
- printf("+\\n[" WIDTH_FORMAT "]", list.p[i]->uid);
- int have_simple = 0;
- for (i = 0; i < n && !have_simple; i++)
- have_simple = list.p[i]->is_simple();
- if (have_simple) {
- printf("+\\w" DELIMITER_CHAR);
- for (i = 0; i < n; i++)
- if (list.p[i]->is_simple())
- list.p[i]->output();
- printf(DELIMITER_CHAR);
- }
- printf("\n");
-}
-
-void list_box::compute_subscript_kern()
-{
- // We can only call compute_subscript_kern if we have called
- // compute_metrics first.
- if (list.p[list.len-1]->is_simple())
- list.p[list.len-1]->compute_metrics(sty);
- list.p[list.len-1]->compute_subscript_kern();
- printf(".nr " SUB_KERN_FORMAT " \\n[" SUB_KERN_FORMAT "]\n",
- uid, list.p[list.len-1]->uid);
-}
-
-void list_box::output()
-{
- for (int i = 0; i < list.len; i++) {
- if (i > 0) {
- int n = compute_spacing(is_script,
- list.p[i-1]->spacing_type,
- list.p[i]->spacing_type);
- if (n > 0)
- printf("\\h'%dM'", n);
- }
- list.p[i]->output();
- }
-}
-
-void list_box::handle_char_type(int st, int ft)
-{
- for (int i = 0; i < list.len; i++)
- list.p[i]->handle_char_type(st, ft);
-}
-
-void list_box::debug_print()
-{
- list.list_debug_print(" ");
-}
-
-void list_box::check_tabs(int level)
-{
- list.list_check_tabs(level);
-}
diff --git a/contrib/groff/src/preproc/eqn/main.cpp b/contrib/groff/src/preproc/eqn/main.cpp
deleted file mode 100644
index 7971e2c2dc3c..000000000000
--- a/contrib/groff/src/preproc/eqn/main.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "stringclass.h"
-#include "device.h"
-#include "searchpath.h"
-#include "macropath.h"
-#include "htmlhint.h"
-#include "pbox.h"
-#include "ctype.h"
-
-#define STARTUP_FILE "eqnrc"
-
-extern int yyparse();
-extern "C" const char *Version_string;
-
-static char *delim_search (char *, int);
-static int inline_equation (FILE *, string &, string &);
-
-char start_delim = '\0';
-char end_delim = '\0';
-int non_empty_flag;
-int inline_flag;
-int draw_flag = 0;
-int one_size_reduction_flag = 0;
-int compatible_flag = 0;
-int no_newline_in_delim_flag = 0;
-int html = 0;
-
-
-int read_line(FILE *fp, string *p)
-{
- p->clear();
- int c = -1;
- while ((c = getc(fp)) != EOF) {
- if (!invalid_input_char(c))
- *p += char(c);
- else
- error("invalid input character code `%1'", c);
- if (c == '\n')
- break;
- }
- current_lineno++;
- return p->length() > 0;
-}
-
-void do_file(FILE *fp, const char *filename)
-{
- string linebuf;
- string str;
- printf(".lf 1 %s\n", filename);
- current_filename = filename;
- current_lineno = 0;
- while (read_line(fp, &linebuf)) {
- if (linebuf.length() >= 4
- && linebuf[0] == '.' && linebuf[1] == 'l' && linebuf[2] == 'f'
- && (linebuf[3] == ' ' || linebuf[3] == '\n' || compatible_flag)) {
- put_string(linebuf, stdout);
- linebuf += '\0';
- if (interpret_lf_args(linebuf.contents() + 3))
- current_lineno--;
- }
- else if (linebuf.length() >= 4
- && linebuf[0] == '.'
- && linebuf[1] == 'E'
- && linebuf[2] == 'Q'
- && (linebuf[3] == ' ' || linebuf[3] == '\n'
- || compatible_flag)) {
- put_string(linebuf, stdout);
- int start_lineno = current_lineno + 1;
- str.clear();
- for (;;) {
- if (!read_line(fp, &linebuf))
- fatal("end of file before .EN");
- if (linebuf.length() >= 3 && linebuf[0] == '.' && linebuf[1] == 'E') {
- if (linebuf[2] == 'N'
- && (linebuf.length() == 3 || linebuf[3] == ' '
- || linebuf[3] == '\n' || compatible_flag))
- break;
- else if (linebuf[2] == 'Q' && linebuf.length() > 3
- && (linebuf[3] == ' ' || linebuf[3] == '\n'
- || compatible_flag))
- fatal("nested .EQ");
- }
- str += linebuf;
- }
- str += '\0';
- start_string();
- init_lex(str.contents(), current_filename, start_lineno);
- non_empty_flag = 0;
- inline_flag = 0;
- yyparse();
- restore_compatibility();
- if (non_empty_flag) {
- printf(".lf %d\n", current_lineno - 1);
- output_string();
- }
- printf(".lf %d\n", current_lineno);
- put_string(linebuf, stdout);
- }
- else if (start_delim != '\0' && linebuf.search(start_delim) >= 0
- && inline_equation(fp, linebuf, str))
- ;
- else
- put_string(linebuf, stdout);
- }
- current_filename = 0;
- current_lineno = 0;
-}
-
-// Handle an inline equation. Return 1 if it was an inline equation,
-// otherwise.
-static int inline_equation(FILE *fp, string &linebuf, string &str)
-{
- linebuf += '\0';
- char *ptr = &linebuf[0];
- char *start = delim_search(ptr, start_delim);
- if (!start) {
- // It wasn't a delimiter after all.
- linebuf.set_length(linebuf.length() - 1); // strip the '\0'
- return 0;
- }
- start_string();
- inline_flag = 1;
- for (;;) {
- if (no_newline_in_delim_flag && strchr(start + 1, end_delim) == 0) {
- error("missing `%1'", end_delim);
- char *nl = strchr(start + 1, '\n');
- if (nl != 0)
- *nl = '\0';
- do_text(ptr);
- break;
- }
- int start_lineno = current_lineno;
- *start = '\0';
- do_text(ptr);
- ptr = start + 1;
- str.clear();
- for (;;) {
- char *end = strchr(ptr, end_delim);
- if (end != 0) {
- *end = '\0';
- str += ptr;
- ptr = end + 1;
- break;
- }
- str += ptr;
- if (!read_line(fp, &linebuf))
- fatal("unterminated `%1' at line %2, looking for `%3'",
- start_delim, start_lineno, end_delim);
- linebuf += '\0';
- ptr = &linebuf[0];
- }
- str += '\0';
- if (html) {
- printf(".as1 %s ", LINE_STRING);
- html_begin_suppress();
- printf("\n");
- }
- init_lex(str.contents(), current_filename, start_lineno);
- yyparse();
- if (html) {
- printf(".as1 %s ", LINE_STRING);
- html_end_suppress();
- printf("\n");
- }
- start = delim_search(ptr, start_delim);
- if (start == 0) {
- char *nl = strchr(ptr, '\n');
- if (nl != 0)
- *nl = '\0';
- do_text(ptr);
- break;
- }
- }
- restore_compatibility();
- printf(".lf %d\n", current_lineno);
- output_string();
- printf(".lf %d\n", current_lineno + 1);
- return 1;
-}
-
-/* Search for delim. Skip over number register and string names etc. */
-
-static char *delim_search(char *ptr, int delim)
-{
- while (*ptr) {
- if (*ptr == delim)
- return ptr;
- if (*ptr++ == '\\') {
- switch (*ptr) {
- case 'n':
- case '*':
- case 'f':
- case 'g':
- case 'k':
- switch (*++ptr) {
- case '\0':
- case '\\':
- break;
- case '(':
- if (*++ptr != '\\' && *ptr != '\0'
- && *++ptr != '\\' && *ptr != '\0')
- ptr++;
- break;
- case '[':
- while (*++ptr != '\0')
- if (*ptr == ']') {
- ptr++;
- break;
- }
- break;
- default:
- ptr++;
- break;
- }
- break;
- case '\\':
- case '\0':
- break;
- default:
- ptr++;
- break;
- }
- }
- }
- return 0;
-}
-
-void usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [ -rvDCNR ] -dxx -fn -sn -pn -mn -Mdir -Ts [ files ... ]\n",
- program_name);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
- int load_startup_file = 1;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "DCRvd:f:p:s:m:T:M:rN", long_options,
- NULL))
- != EOF)
- switch (opt) {
- case 'C':
- compatible_flag = 1;
- break;
- case 'R': // don't load eqnrc
- load_startup_file = 0;
- break;
- case 'M':
- config_macro_path.command_line_dir(optarg);
- break;
- case 'v':
- {
- printf("GNU eqn (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'd':
- if (optarg[0] == '\0' || optarg[1] == '\0')
- error("-d requires two character argument");
- else if (invalid_input_char(optarg[0]))
- error("bad delimiter `%1'", optarg[0]);
- else if (invalid_input_char(optarg[1]))
- error("bad delimiter `%1'", optarg[1]);
- else {
- start_delim = optarg[0];
- end_delim = optarg[1];
- }
- break;
- case 'f':
- set_gfont(optarg);
- break;
- case 'T':
- device = optarg;
- if (strcmp(device, "ps:html") == 0) {
- device = "ps";
- html = 1;
- }
- break;
- case 's':
- if (!set_gsize(optarg))
- error("invalid size `%1'", optarg);
- break;
- case 'p':
- {
- int n;
- if (sscanf(optarg, "%d", &n) == 1)
- set_script_reduction(n);
- else
- error("bad size `%1'", optarg);
- }
- break;
- case 'm':
- {
- int n;
- if (sscanf(optarg, "%d", &n) == 1)
- set_minimum_size(n);
- else
- error("bad size `%1'", optarg);
- }
- break;
- case 'r':
- one_size_reduction_flag = 1;
- break;
- case 'D':
- warning("-D option is obsolete: use `set draw_lines 1' instead");
- draw_flag = 1;
- break;
- case 'N':
- no_newline_in_delim_flag = 1;
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- init_table(device);
- init_char_table();
- printf(".if !'\\*(.T'%s' "
- ".if !'\\*(.T'html' " // the html device uses `-Tps' to render
- // equations as images
- ".tm warning: %s should have been given a `-T\\*(.T' option\n",
- device, program_name);
- printf(".if '\\*(.T'html' "
- ".if !'%s'ps' "
- ".tm warning: %s should have been given a `-Tps' option\n",
- device, program_name);
- printf(".if '\\*(.T'html' "
- ".if !'%s'ps' "
- ".tm warning: (it is advisable to invoke groff via: groff -Thtml -e)\n",
- device);
- if (load_startup_file) {
- char *path;
- FILE *fp = config_macro_path.open_file(STARTUP_FILE, &path);
- if (fp) {
- do_file(fp, path);
- fclose(fp);
- a_delete path;
- }
- }
- if (optind >= argc)
- do_file(stdin, "-");
- else
- for (int i = optind; i < argc; i++)
- if (strcmp(argv[i], "-") == 0)
- do_file(stdin, "-");
- else {
- errno = 0;
- FILE *fp = fopen(argv[i], "r");
- if (!fp)
- fatal("can't open `%1': %2", argv[i], strerror(errno));
- else {
- do_file(fp, argv[i]);
- fclose(fp);
- }
- }
- if (ferror(stdout) || fflush(stdout) < 0)
- fatal("output error");
- return 0;
-}
diff --git a/contrib/groff/src/preproc/eqn/mark.cpp b/contrib/groff/src/preproc/eqn/mark.cpp
deleted file mode 100644
index 9fa65790c6f1..000000000000
--- a/contrib/groff/src/preproc/eqn/mark.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-class mark_box : public pointer_box {
-public:
- mark_box(box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-// we push down marks so that they don't interfere with spacing
-
-box *make_mark_box(box *p)
-{
- list_box *b = p->to_list_box();
- if (b != 0) {
- b->list.p[0] = make_mark_box(b->list.p[0]);
- return b;
- }
- else
- return new mark_box(p);
-}
-
-mark_box::mark_box(box *pp) : pointer_box(pp)
-{
-}
-
-void mark_box::output()
-{
- p->output();
-}
-
-int mark_box::compute_metrics(int style)
-{
- int res = p->compute_metrics(style);
- if (res)
- error("multiple marks and lineups");
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " MARK_REG " 0\n");
- return FOUND_MARK;
-}
-
-void mark_box::debug_print()
-{
- fprintf(stderr, "mark { ");
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-
-class lineup_box : public pointer_box {
-public:
- lineup_box(box *);
- void output();
- int compute_metrics(int style);
- void debug_print();
-};
-
-// we push down lineups so that they don't interfere with spacing
-
-box *make_lineup_box(box *p)
-{
- list_box *b = p->to_list_box();
- if (b != 0) {
- b->list.p[0] = make_lineup_box(b->list.p[0]);
- return b;
- }
- else
- return new lineup_box(p);
-}
-
-lineup_box::lineup_box(box *pp) : pointer_box(pp)
-{
-}
-
-void lineup_box::output()
-{
- p->output();
-}
-
-int lineup_box::compute_metrics(int style)
-{
- int res = p->compute_metrics(style);
- if (res)
- error("multiple marks and lineups");
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " MARK_REG " 0\n");
- return FOUND_LINEUP;
-}
-
-void lineup_box::debug_print()
-{
- fprintf(stderr, "lineup { ");
- p->debug_print();
- fprintf(stderr, " }");
-}
diff --git a/contrib/groff/src/preproc/eqn/neqn.man b/contrib/groff/src/preproc/eqn/neqn.man
deleted file mode 100644
index 27261c419ccd..000000000000
--- a/contrib/groff/src/preproc/eqn/neqn.man
+++ /dev/null
@@ -1,43 +0,0 @@
-.ig
-Copyright (C) 2001 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.TH @G@NEQN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@neqn \- format equations for ascii output
-.SH SYNOPSIS
-.B @g@neqn
-[@g@eqn options]
-.SH DESCRIPTION
-The
-.B @g@neqn
-program is actually just a shell script which invokes the
-.BR @g@eqn (@MAN1EXT@)
-command with the
-.B ascii
-output device.
-.LP
-Note that
-.B @g@eqn
-does not support low-resolution, typewriter-like devices (although it may
-work adequately for very simple input).
-.SH "SEE ALSO"
-.BR @g@eqn (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/eqn/neqn.sh b/contrib/groff/src/preproc/eqn/neqn.sh
deleted file mode 100644
index 5390bba6c9ad..000000000000
--- a/contrib/groff/src/preproc/eqn/neqn.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /bin/sh
-# Provision of this shell script should not be taken to imply that use of
-# GNU eqn with groff -Tascii|-Tlatin1|-Tkoi8-r|-Tutf8|-Tcp1047 is supported.
-# $FreeBSD$
-
-# Default device.
-case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
- *.UTF-8)
- T=utf8 ;;
- iso_8859_1 | *.ISO*8859-1 | *.ISO*8859-15)
- T=latin1 ;;
- *.IBM-1047)
- T=cp1047 ;;
- *.KOI8-R)
- T=koi8-r ;;
- *)
- T=ascii ;;
-esac
-
-@GROFF_BIN_PATH_SETUP@
-PATH="$GROFF_RUNTIME$PATH"
-export PATH
-exec @g@eqn -T${T} ${1+"$@"}
-
-# eof
diff --git a/contrib/groff/src/preproc/eqn/other.cpp b/contrib/groff/src/preproc/eqn/other.cpp
deleted file mode 100644
index 9f360df67912..000000000000
--- a/contrib/groff/src/preproc/eqn/other.cpp
+++ /dev/null
@@ -1,601 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-class accent_box : public pointer_box {
-private:
- box *ab;
-public:
- accent_box(box *, box *);
- ~accent_box();
- int compute_metrics(int);
- void output();
- void debug_print();
- void check_tabs(int);
-};
-
-box *make_accent_box(box *p, box *q)
-{
- return new accent_box(p, q);
-}
-
-accent_box::accent_box(box *pp, box *qq) : pointer_box(pp), ab(qq)
-{
-}
-
-accent_box::~accent_box()
-{
- delete ab;
-}
-
-#if 0
-int accent_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- p->compute_skew();
- ab->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " SUP_RAISE_FORMAT " \\n[" HEIGHT_FORMAT "]-%dM>?0\n",
- uid, p->uid, x_height);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]+\\n["
- SUP_RAISE_FORMAT "]\n",
- uid, ab->uid, uid);
- return r;
-}
-
-void accent_box::output()
-{
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n["
- SKEW_FORMAT "]u'",
- p->uid, ab->uid, p->uid);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- ab->output();
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", ab->uid);
- printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n["
- SKEW_FORMAT "]u)'",
- p->uid, ab->uid, p->uid);
- p->output();
-}
-#endif
-
-/* This version copes with the possibility of an accent's being wider
-than its accentee. LEFT_WIDTH_FORMAT gives the distance from the
-left edge of the resulting box to the middle of the accentee's box.*/
-
-int accent_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- p->compute_skew();
- ab->compute_metrics(style);
- printf(".nr " LEFT_WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]/2"
- ">?(\\n[" WIDTH_FORMAT "]/2-\\n[" SKEW_FORMAT "])\n",
- uid, p->uid, ab->uid, p->uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]/2"
- ">?(\\n[" WIDTH_FORMAT "]/2+\\n[" SKEW_FORMAT "])"
- "+\\n[" LEFT_WIDTH_FORMAT "]\n",
- uid, p->uid, ab->uid, p->uid, uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " SUP_RAISE_FORMAT " \\n[" HEIGHT_FORMAT "]-%dM>?0\n",
- uid, p->uid, x_height);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]+\\n["
- SUP_RAISE_FORMAT "]\n",
- uid, ab->uid, uid);
- if (r)
- printf(".nr " MARK_REG " +\\n[" LEFT_WIDTH_FORMAT "]"
- "-(\\n[" WIDTH_FORMAT "]/2)'\n",
- uid, p->uid);
- return r;
-}
-
-void accent_box::output()
-{
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u+\\n[" SKEW_FORMAT "]u"
- "-(\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, p->uid, ab->uid);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- ab->output();
- printf(DELIMITER_CHAR);
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, p->uid);
- p->output();
- printf(DELIMITER_CHAR);
- printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid);
-}
-
-void accent_box::check_tabs(int level)
-{
- ab->check_tabs(level + 1);
- p->check_tabs(level + 1);
-}
-
-void accent_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " } accent { ");
- ab->debug_print();
- fprintf(stderr, " }");
-}
-
-class overline_char_box : public simple_box {
-public:
- overline_char_box();
- void output();
- void debug_print();
-};
-
-overline_char_box::overline_char_box()
-{
-}
-
-void overline_char_box::output()
-{
- printf("\\v'-%dM/2u-%dM'", 7*default_rule_thickness, x_height);
- printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"),
- accent_width);
- printf("\\v'%dM/2u+%dM'", 7*default_rule_thickness, x_height);
-}
-
-void overline_char_box::debug_print()
-{
- fprintf(stderr, "<overline char>");
-}
-
-class overline_box : public pointer_box {
-public:
- overline_box(box *);
- int compute_metrics(int);
- void output();
- void debug_print();
-};
-
-box *make_overline_box(box *p)
-{
- if (p->is_char())
- return new accent_box(p, new overline_char_box);
- else
- return new overline_box(p);
-}
-
-overline_box::overline_box(box *pp) : pointer_box(pp)
-{
-}
-
-int overline_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(cramped_style(style));
- // 9
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]+%dM\n",
- uid, p->uid, default_rule_thickness*5);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void overline_box::output()
-{
- // 9
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'-\\n[" HEIGHT_FORMAT "]u-(%dM/2u)'",
- p->uid, 7*default_rule_thickness);
- if (draw_flag)
- printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid);
- else
- printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid);
- printf(DELIMITER_CHAR);
- p->output();
-}
-
-void overline_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " } bar");
-}
-
-class uaccent_box : public pointer_box {
- box *ab;
-public:
- uaccent_box(box *, box *);
- ~uaccent_box();
- int compute_metrics(int);
- void output();
- void compute_subscript_kern();
- void check_tabs(int);
- void debug_print();
-};
-
-box *make_uaccent_box(box *p, box *q)
-{
- return new uaccent_box(p, q);
-}
-
-uaccent_box::uaccent_box(box *pp, box *qq)
-: pointer_box(pp), ab(qq)
-{
-}
-
-uaccent_box::~uaccent_box()
-{
- delete ab;
-}
-
-int uaccent_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- ab->compute_metrics(style);
- printf(".nr " LEFT_WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]/2"
- ">?(\\n[" WIDTH_FORMAT "]/2)\n",
- uid, p->uid, ab->uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]/2"
- ">?(\\n[" WIDTH_FORMAT "]/2)"
- "+\\n[" LEFT_WIDTH_FORMAT "]\n",
- uid, p->uid, ab->uid, uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]"
- "+\\n[" DEPTH_FORMAT "]\n",
- uid, p->uid, ab->uid);
- if (r)
- printf(".nr " MARK_REG " +\\n[" LEFT_WIDTH_FORMAT "]"
- "-(\\n[" WIDTH_FORMAT "]/2)'\n",
- uid, p->uid);
- return r;
-}
-
-void uaccent_box::output()
-{
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, ab->uid);
- printf("\\v'\\n[" DEPTH_FORMAT "]u'", p->uid);
- ab->output();
- printf(DELIMITER_CHAR);
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, p->uid);
- p->output();
- printf(DELIMITER_CHAR);
- printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid);
-}
-
-void uaccent_box::check_tabs(int level)
-{
- ab->check_tabs(level + 1);
- p->check_tabs(level + 1);
-}
-
-void uaccent_box::compute_subscript_kern()
-{
- box::compute_subscript_kern(); // want 0 subscript kern
-}
-
-void uaccent_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " } uaccent { ");
- ab->debug_print();
- fprintf(stderr, " }");
-}
-
-class underline_char_box : public simple_box {
-public:
- underline_char_box();
- void output();
- void debug_print();
-};
-
-underline_char_box::underline_char_box()
-{
-}
-
-void underline_char_box::output()
-{
- printf("\\v'%dM/2u'", 7*default_rule_thickness);
- printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"),
- accent_width);
- printf("\\v'-%dM/2u'", 7*default_rule_thickness);
-}
-
-void underline_char_box::debug_print()
-{
- fprintf(stderr, "<underline char>");
-}
-
-
-class underline_box : public pointer_box {
-public:
- underline_box(box *);
- int compute_metrics(int);
- void output();
- void compute_subscript_kern();
- void debug_print();
-};
-
-box *make_underline_box(box *p)
-{
- if (p->is_char())
- return new uaccent_box(p, new underline_char_box);
- else
- return new underline_box(p);
-}
-
-underline_box::underline_box(box *pp) : pointer_box(pp)
-{
-}
-
-int underline_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- // 10
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]+%dM\n",
- uid, p->uid, default_rule_thickness*5);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void underline_box::output()
-{
- // 10
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'\\n[" DEPTH_FORMAT "]u+(%dM/2u)'",
- p->uid, 7*default_rule_thickness);
- if (draw_flag)
- printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid);
- else
- printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid);
- printf(DELIMITER_CHAR);
- p->output();
-}
-
-// we want an underline box to have 0 subscript kern
-
-void underline_box::compute_subscript_kern()
-{
- box::compute_subscript_kern();
-}
-
-void underline_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " } under");
-}
-
-size_box::size_box(char *s, box *pp) : pointer_box(pp), size(s)
-{
-}
-
-int size_box::compute_metrics(int style)
-{
- printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
- printf(".ps %s\n", size);
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
- int r = p->compute_metrics(style);
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void size_box::output()
-{
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
- p->output();
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
-}
-
-size_box::~size_box()
-{
- a_delete size;
-}
-
-void size_box::debug_print()
-{
- fprintf(stderr, "size %s { ", size);
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-
-font_box::font_box(char *s, box *pp) : pointer_box(pp), f(s)
-{
-}
-
-font_box::~font_box()
-{
- a_delete f;
-}
-
-int font_box::compute_metrics(int style)
-{
- const char *old_roman_font = current_roman_font;
- current_roman_font = f;
- printf(".nr " FONT_FORMAT " \\n[.f]\n", uid);
- printf(".ft %s\n", f);
- int r = p->compute_metrics(style);
- current_roman_font = old_roman_font;
- printf(".ft \\n[" FONT_FORMAT "]\n", uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void font_box::output()
-{
- printf("\\f[%s]", f);
- const char *old_roman_font = current_roman_font;
- current_roman_font = f;
- p->output();
- current_roman_font = old_roman_font;
- printf("\\f[\\n[" FONT_FORMAT "]]", uid);
-}
-
-void font_box::debug_print()
-{
- fprintf(stderr, "font %s { ", f);
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-fat_box::fat_box(box *pp) : pointer_box(pp)
-{
-}
-
-int fat_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]+%dM\n",
- uid, p->uid, fat_offset);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- return r;
-}
-
-void fat_box::output()
-{
- p->output();
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p->uid);
- printf("\\h'%dM'", fat_offset);
- p->output();
-}
-
-
-void fat_box::debug_print()
-{
- fprintf(stderr, "fat { ");
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-
-vmotion_box::vmotion_box(int i, box *pp) : pointer_box(pp), n(i)
-{
-}
-
-int vmotion_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- if (n > 0) {
- printf(".nr " HEIGHT_FORMAT " %dM+\\n[" HEIGHT_FORMAT "]\n",
- uid, n, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- }
- else {
- printf(".nr " DEPTH_FORMAT " %dM+\\n[" DEPTH_FORMAT "]>?0\n",
- uid, -n, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n",
- uid, p->uid);
- }
- return r;
-}
-
-void vmotion_box::output()
-{
- printf("\\v'%dM'", -n);
- p->output();
- printf("\\v'%dM'", n);
-}
-
-void vmotion_box::debug_print()
-{
- if (n >= 0)
- fprintf(stderr, "up %d { ", n);
- else
- fprintf(stderr, "down %d { ", -n);
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-hmotion_box::hmotion_box(int i, box *pp) : pointer_box(pp), n(i)
-{
-}
-
-int hmotion_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]+%dM\n",
- uid, p->uid, n);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- if (r)
- printf(".nr " MARK_REG " +%dM\n", n);
- return r;
-}
-
-void hmotion_box::output()
-{
- printf("\\h'%dM'", n);
- p->output();
-}
-
-void hmotion_box::debug_print()
-{
- if (n >= 0)
- fprintf(stderr, "fwd %d { ", n);
- else
- fprintf(stderr, "back %d { ", -n);
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-vcenter_box::vcenter_box(box *pp) : pointer_box(pp)
-{
-}
-
-int vcenter_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " SUP_RAISE_FORMAT " \\n[" DEPTH_FORMAT "]-\\n["
- HEIGHT_FORMAT "]/2+%dM\n",
- uid, p->uid, p->uid, axis_height);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]+\\n["
- SUP_RAISE_FORMAT "]>?0\n", uid, p->uid, uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]-\\n["
- SUP_RAISE_FORMAT "]>?0\n", uid, p->uid, uid);
-
- return r;
-}
-
-void vcenter_box::output()
-{
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- p->output();
- printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid);
-}
-
-void vcenter_box::debug_print()
-{
- fprintf(stderr, "vcenter { ");
- p->debug_print();
- fprintf(stderr, " }");
-}
-
diff --git a/contrib/groff/src/preproc/eqn/over.cpp b/contrib/groff/src/preproc/eqn/over.cpp
deleted file mode 100644
index 302c5b5d50c0..000000000000
--- a/contrib/groff/src/preproc/eqn/over.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-class over_box : public box {
-private:
- int reduce_size;
- box *num;
- box *den;
-public:
- over_box(int small, box *, box *);
- ~over_box();
- void debug_print();
- int compute_metrics(int);
- void output();
- void check_tabs(int);
-};
-
-box *make_over_box(box *pp, box *qq)
-{
- return new over_box(0, pp, qq);
-}
-
-box *make_small_over_box(box *pp, box *qq)
-{
- return new over_box(1, pp, qq);
-}
-
-over_box::over_box(int is_small, box *pp, box *qq)
-: reduce_size(is_small), num(pp), den(qq)
-{
- spacing_type = INNER_TYPE;
-}
-
-over_box::~over_box()
-{
- delete num;
- delete den;
-}
-
-int over_box::compute_metrics(int style)
-{
- if (reduce_size) {
- style = script_style(style);
- printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
- }
- int mark_uid = 0;
- int res = num->compute_metrics(style);
- if (res)
- mark_uid = num->uid;
- int r = den->compute_metrics(cramped_style(style));
- if (r && res)
- error("multiple marks and lineups");
- else {
- mark_uid = den->uid;
- res = r;
- }
- if (reduce_size)
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- printf(".nr " WIDTH_FORMAT " (\\n[" WIDTH_FORMAT "]>?\\n[" WIDTH_FORMAT "]",
- uid, num->uid, den->uid);
- // allow for \(ru being wider than both the numerator and denominator
- if (!draw_flag)
- fputs(">?\\w" DELIMITER_CHAR "\\(ru" DELIMITER_CHAR, stdout);
- printf(")+%dM\n", null_delimiter_space*2 + over_hang*2);
- // 15b
- printf(".nr " SUP_RAISE_FORMAT " %dM\n",
- uid, (reduce_size ? num2 : num1));
- printf(".nr " SUB_LOWER_FORMAT " %dM\n",
- uid, (reduce_size ? denom2 : denom1));
-
- // 15d
- printf(".nr " SUP_RAISE_FORMAT " +(\\n[" DEPTH_FORMAT
- "]-\\n[" SUP_RAISE_FORMAT "]+%dM+(%dM/2)+%dM)>?0\n",
- uid, num->uid, uid, axis_height, default_rule_thickness,
- default_rule_thickness*(reduce_size ? 1 : 3));
- printf(".nr " SUB_LOWER_FORMAT " +(\\n[" HEIGHT_FORMAT
- "]-\\n[" SUB_LOWER_FORMAT "]-%dM+(%dM/2)+%dM)>?0\n",
- uid, den->uid, uid, axis_height, default_rule_thickness,
- default_rule_thickness*(reduce_size ? 1 : 3));
-
-
- printf(".nr " HEIGHT_FORMAT " \\n[" SUP_RAISE_FORMAT "]+\\n["
- HEIGHT_FORMAT "]\n",
- uid, uid, num->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" SUB_LOWER_FORMAT "]+\\n["
- DEPTH_FORMAT "]\n",
- uid, uid, den->uid);
- if (res)
- printf(".nr " MARK_REG " +(\\n[" WIDTH_FORMAT "]-\\n["
- WIDTH_FORMAT "]/2)\n", uid, mark_uid);
- return res;
-}
-
-#define USE_Z
-
-void over_box::output()
-{
- if (reduce_size)
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
-#ifdef USE_Z
- printf("\\Z" DELIMITER_CHAR);
-#endif
- // move up to the numerator baseline
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- // move across so that it's centered
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
- uid, num->uid);
-
- // print the numerator
- num->output();
-
-#ifdef USE_Z
- printf(DELIMITER_CHAR);
-#else
- // back again
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", num->uid);
- printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, num->uid);
- // down again
- printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid);
-#endif
-#ifdef USE_Z
- printf("\\Z" DELIMITER_CHAR);
-#endif
- // move down to the denominator baseline
- printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid);
-
- // move across so that it's centered
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
- uid, den->uid);
-
- // print the the denominator
- den->output();
-
-#ifdef USE_Z
- printf(DELIMITER_CHAR);
-#else
- // back again
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", den->uid);
- printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'",
- uid, den->uid);
- // up again
- printf("\\v'-\\n[" SUB_LOWER_FORMAT "]u'", uid);
-#endif
- if (reduce_size)
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
- // draw the line
- printf("\\h'%dM'", null_delimiter_space);
- printf("\\v'-%dM'", axis_height);
- fputs(draw_flag ? "\\D'l" : "\\l'", stdout);
- printf("\\n[" WIDTH_FORMAT "]u-%dM",
- uid, 2*null_delimiter_space);
- fputs(draw_flag ? " 0'" : "\\&\\(ru'", stdout);
- printf("\\v'%dM'", axis_height);
- printf("\\h'%dM'", null_delimiter_space);
-}
-
-void over_box::debug_print()
-{
- fprintf(stderr, "{ ");
- num->debug_print();
- if (reduce_size)
- fprintf(stderr, " } smallover { ");
- else
- fprintf(stderr, " } over { ");
- den->debug_print();
- fprintf(stderr, " }");
-}
-
-void over_box::check_tabs(int level)
-{
- num->check_tabs(level + 1);
- den->check_tabs(level + 1);
-}
diff --git a/contrib/groff/src/preproc/eqn/pbox.h b/contrib/groff/src/preproc/eqn/pbox.h
deleted file mode 100644
index f100f2165662..000000000000
--- a/contrib/groff/src/preproc/eqn/pbox.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-extern int fat_offset;
-
-extern int over_hang;
-extern int accent_width;
-
-extern int delimiter_factor;
-extern int delimiter_shortfall;
-
-extern int null_delimiter_space;
-extern int script_space;
-extern int thin_space;
-extern int medium_space;
-extern int thick_space;
-
-extern int num1;
-extern int num2;
-// we don't use num3, because we don't have \atop
-extern int denom1;
-extern int denom2;
-extern int axis_height;
-extern int sup1;
-extern int sup2;
-extern int sup3;
-extern int default_rule_thickness;
-extern int sub1;
-extern int sub2;
-extern int sup_drop;
-extern int sub_drop;
-extern int x_height;
-extern int big_op_spacing1;
-extern int big_op_spacing2;
-extern int big_op_spacing3;
-extern int big_op_spacing4;
-extern int big_op_spacing5;
-
-extern int baseline_sep;
-extern int shift_down;
-extern int column_sep;
-extern int matrix_side_sep;
-
-// ms.eqn relies on this!
-
-#define LINE_STRING "10"
-#define MARK_OR_LINEUP_FLAG_REG "MK"
-
-#define WIDTH_FORMAT PREFIX "w%d"
-#define HEIGHT_FORMAT PREFIX "h%d"
-#define DEPTH_FORMAT PREFIX "d%d"
-#define TOTAL_FORMAT PREFIX "t%d"
-#define SIZE_FORMAT PREFIX "z%d"
-#define SMALL_SIZE_FORMAT PREFIX "Z%d"
-#define SUP_RAISE_FORMAT PREFIX "p%d"
-#define SUB_LOWER_FORMAT PREFIX "b%d"
-#define SUB_KERN_FORMAT PREFIX "k%d"
-#define FONT_FORMAT PREFIX "f%d"
-#define SKEW_FORMAT PREFIX "s%d"
-#define LEFT_WIDTH_FORMAT PREFIX "lw%d"
-#define LEFT_DELIM_STRING_FORMAT PREFIX "l%d"
-#define RIGHT_DELIM_STRING_FORMAT PREFIX "r%d"
-#define SQRT_STRING_FORMAT PREFIX "sqr%d"
-#define SQRT_WIDTH_FORMAT PREFIX "sq%d"
-#define BASELINE_SEP_FORMAT PREFIX "bs%d"
-// this needs two parameters, the uid and the column index
-#define COLUMN_WIDTH_FORMAT PREFIX "cw%d,%d"
-
-#define BAR_STRING PREFIX "sqb"
-#define TEMP_REG PREFIX "temp"
-#define MARK_REG PREFIX "mark"
-#define MARK_WIDTH_REG PREFIX "mwidth"
-#define SAVED_MARK_REG PREFIX "smark"
-#define MAX_SIZE_REG PREFIX "mxsz"
-#define REPEAT_APPEND_STRING_MACRO PREFIX "ras"
-#define TOP_HEIGHT_REG PREFIX "th"
-#define TOP_DEPTH_REG PREFIX "td"
-#define MID_HEIGHT_REG PREFIX "mh"
-#define MID_DEPTH_REG PREFIX "md"
-#define BOT_HEIGHT_REG PREFIX "bh"
-#define BOT_DEPTH_REG PREFIX "bd"
-#define EXT_HEIGHT_REG PREFIX "eh"
-#define EXT_DEPTH_REG PREFIX "ed"
-#define TOTAL_HEIGHT_REG PREFIX "tot"
-#define DELTA_REG PREFIX "delta"
-#define DELIM_STRING PREFIX "delim"
-#define DELIM_WIDTH_REG PREFIX "dwidth"
-#define SAVED_FONT_REG PREFIX "sfont"
-#define SAVED_PREV_FONT_REG PREFIX "spfont"
-#define SAVED_INLINE_FONT_REG PREFIX "sifont"
-#define SAVED_INLINE_PREV_FONT_REG PREFIX "sipfont"
-#define SAVED_SIZE_REG PREFIX "ssize"
-#define SAVED_INLINE_SIZE_REG PREFIX "sisize"
-#define SAVED_INLINE_PREV_SIZE_REG PREFIX "sipsize"
-#define SAVE_FONT_STRING PREFIX "sfont"
-#define RESTORE_FONT_STRING PREFIX "rfont"
-#define INDEX_REG PREFIX "i"
-#define TEMP_MACRO PREFIX "tempmac"
-
-#define DELIMITER_CHAR "\\(EQ"
-
-const int CRAMPED_SCRIPT_STYLE = 0;
-const int SCRIPT_STYLE = 1;
-const int CRAMPED_DISPLAY_STYLE = 2;
-const int DISPLAY_STYLE = 3;
-
-extern int script_style(int);
-extern int cramped_style(int);
-
-const int ORDINARY_TYPE = 0;
-const int OPERATOR_TYPE = 1;
-const int BINARY_TYPE = 2;
-const int RELATION_TYPE = 3;
-const int OPENING_TYPE = 4;
-const int CLOSING_TYPE = 5;
-const int PUNCTUATION_TYPE = 6;
-const int INNER_TYPE = 7;
-const int SUPPRESS_TYPE = 8;
-
-void set_script_size();
-
-enum { HINT_PREV_IS_ITALIC = 01, HINT_NEXT_IS_ITALIC = 02 };
-
-extern const char *current_roman_font;
diff --git a/contrib/groff/src/preproc/eqn/pile.cpp b/contrib/groff/src/preproc/eqn/pile.cpp
deleted file mode 100644
index 10d1708809af..000000000000
--- a/contrib/groff/src/preproc/eqn/pile.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-// piles and matrices
-
-#include "eqn.h"
-#include "pbox.h"
-
-// SUP_RAISE_FORMAT gives the first baseline
-// BASELINE_SEP_FORMAT gives the separation between baselines
-
-int pile_box::compute_metrics(int style)
-{
- int i;
- for (i = 0; i < col.len; i++)
- col.p[i]->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0", uid);
- for (i = 0; i < col.len; i++)
- printf(">?\\n[" WIDTH_FORMAT "]", col.p[i]->uid);
- printf("\n");
- printf(".nr " BASELINE_SEP_FORMAT " %dM",
- uid, baseline_sep+col.space);
- for (i = 1; i < col.len; i++)
- printf(">?(\\n[" DEPTH_FORMAT "]+\\n[" HEIGHT_FORMAT "]+%dM)",
- col.p[i-1]->uid, col.p[i]->uid, default_rule_thickness*5);
- // round it so that it's a multiple of the vertical resolution
- printf("/\\n(.V+(\\n(.V/2)*\\n(.V\n");
-
- printf(".nr " SUP_RAISE_FORMAT " \\n[" BASELINE_SEP_FORMAT "]*%d/2"
- "+%dM\n",
- uid, uid, col.len-1, axis_height - shift_down);
- printf(".nr " HEIGHT_FORMAT " \\n[" SUP_RAISE_FORMAT "]+\\n["
- HEIGHT_FORMAT "]\n",
- uid, uid, col.p[0]->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" BASELINE_SEP_FORMAT "]*%d+\\n["
- DEPTH_FORMAT "]-\\n[" SUP_RAISE_FORMAT "]\n",
- uid, uid, col.len-1, col.p[col.len-1]->uid, uid);
- return FOUND_NOTHING;
-}
-
-void pile_box::output()
-{
- int i;
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- for (i = 0; i < col.len; i++) {
- switch (col.align) {
- case LEFT_ALIGN:
- break;
- case CENTER_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
- uid, col.p[i]->uid);
- break;
- case RIGHT_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'",
- uid, col.p[i]->uid);
- break;
- default:
- assert(0);
- }
- col.p[i]->output();
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", col.p[i]->uid);
- switch (col.align) {
- case LEFT_ALIGN:
- break;
- case CENTER_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
- col.p[i]->uid, uid);
- break;
- case RIGHT_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'",
- col.p[i]->uid, uid);
- break;
- default:
- assert(0);
- }
- if (i != col.len - 1)
- printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid);
- }
- printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", col.len - 1, uid);
- printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid);
-}
-
-pile_box::pile_box(box *pp) : col(pp)
-{
-}
-
-void pile_box::check_tabs(int level)
-{
- col.list_check_tabs(level);
-}
-
-void pile_box::debug_print()
-{
- col.debug_print("pile");
-}
-
-int matrix_box::compute_metrics(int style)
-{
- int i, j;
- int max_len = 0;
- int space = 0;
- for (i = 0; i < len; i++) {
- for (j = 0; j < p[i]->len; j++)
- p[i]->p[j]->compute_metrics(style);
- if (p[i]->len > max_len)
- max_len = p[i]->len;
- if (p[i]->space > space)
- space = p[i]->space;
- }
- for (i = 0; i < len; i++) {
- printf(".nr " COLUMN_WIDTH_FORMAT " 0", uid, i);
- for (j = 0; j < p[i]->len; j++)
- printf(">?\\n[" WIDTH_FORMAT "]", p[i]->p[j]->uid);
- printf("\n");
- }
- printf(".nr " WIDTH_FORMAT " %dM",
- uid, column_sep*(len-1)+2*matrix_side_sep);
- for (i = 0; i < len; i++)
- printf("+\\n[" COLUMN_WIDTH_FORMAT "]", uid, i);
- printf("\n");
- printf(".nr " BASELINE_SEP_FORMAT " %dM",
- uid, baseline_sep+space);
- for (i = 0; i < len; i++)
- for (j = 1; j < p[i]->len; j++)
- printf(">?(\\n[" DEPTH_FORMAT "]+\\n[" HEIGHT_FORMAT "]+%dM)",
- p[i]->p[j-1]->uid, p[i]->p[j]->uid, default_rule_thickness*5);
- // round it so that it's a multiple of the vertical resolution
- printf("/\\n(.V+(\\n(.V/2)*\\n(.V\n");
- printf(".nr " SUP_RAISE_FORMAT " \\n[" BASELINE_SEP_FORMAT "]*%d/2"
- "+%dM\n",
- uid, uid, max_len-1, axis_height - shift_down);
- printf(".nr " HEIGHT_FORMAT " 0\\n[" SUP_RAISE_FORMAT "]+(0",
- uid, uid);
- for (i = 0; i < len; i++)
- printf(">?\\n[" HEIGHT_FORMAT "]", p[i]->p[0]->uid);
- printf(")>?0\n");
- printf(".nr " DEPTH_FORMAT " \\n[" BASELINE_SEP_FORMAT "]*%d-\\n["
- SUP_RAISE_FORMAT "]+(0",
- uid, uid, max_len-1, uid);
- for (i = 0; i < len; i++)
- if (p[i]->len == max_len)
- printf(">?\\n[" DEPTH_FORMAT "]", p[i]->p[max_len-1]->uid);
- printf(")>?0\n");
- return FOUND_NOTHING;
-}
-
-void matrix_box::output()
-{
- printf("\\h'%dM'", matrix_side_sep);
- for (int i = 0; i < len; i++) {
- int j;
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- for (j = 0; j < p[i]->len; j++) {
- switch (p[i]->align) {
- case LEFT_ALIGN:
- break;
- case CENTER_ALIGN:
- printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
- uid, i, p[i]->p[j]->uid);
- break;
- case RIGHT_ALIGN:
- printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'",
- uid, i, p[i]->p[j]->uid);
- break;
- default:
- assert(0);
- }
- p[i]->p[j]->output();
- printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p[i]->p[j]->uid);
- switch (p[i]->align) {
- case LEFT_ALIGN:
- break;
- case CENTER_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u/2u'",
- p[i]->p[j]->uid, uid, i);
- break;
- case RIGHT_ALIGN:
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u'",
- p[i]->p[j]->uid, uid, i);
- break;
- default:
- assert(0);
- }
- if (j != p[i]->len - 1)
- printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid);
- }
- printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", p[i]->len - 1, uid);
- printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u'", uid, i);
- if (i != len - 1)
- printf("\\h'%dM'", column_sep);
- }
- printf("\\h'%dM'", matrix_side_sep);
-}
-
-matrix_box::matrix_box(column *pp)
-{
- p = new column*[10];
- for (int i = 0; i < 10; i++)
- p[i] = 0;
- maxlen = 10;
- len = 1;
- p[0] = pp;
-}
-
-matrix_box::~matrix_box()
-{
- for (int i = 0; i < len; i++)
- delete p[i];
- a_delete p;
-}
-
-void matrix_box::append(column *pp)
-{
- if (len + 1 > maxlen) {
- column **oldp = p;
- maxlen *= 2;
- p = new column*[maxlen];
- memcpy(p, oldp, sizeof(column*)*len);
- a_delete oldp;
- }
- p[len++] = pp;
-}
-
-void matrix_box::check_tabs(int level)
-{
- for (int i = 0; i < len; i++)
- p[i]->list_check_tabs(level);
-}
-
-void matrix_box::debug_print()
-{
- fprintf(stderr, "matrix { ");
- p[0]->debug_print("col");
- for (int i = 1; i < len; i++) {
- fprintf(stderr, " ");
- p[i]->debug_print("col");
- }
- fprintf(stderr, " }");
-}
-
-column::column(box *pp) : box_list(pp), align(CENTER_ALIGN), space(0)
-{
-}
-
-void column::set_alignment(alignment a)
-{
- align = a;
-}
-
-void column::set_space(int n)
-{
- space = n;
-}
-
-void column::debug_print(const char *s)
-{
- char c = '\0'; // shut up -Wall
- switch (align) {
- case LEFT_ALIGN:
- c = 'l';
- break;
- case RIGHT_ALIGN:
- c = 'r';
- break;
- case CENTER_ALIGN:
- c = 'c';
- break;
- default:
- assert(0);
- }
- fprintf(stderr, "%c%s %d { ", c, s, space);
- list_debug_print(" above ");
- fprintf(stderr, " }");
-}
-
diff --git a/contrib/groff/src/preproc/eqn/script.cpp b/contrib/groff/src/preproc/eqn/script.cpp
deleted file mode 100644
index a9de7428718b..000000000000
--- a/contrib/groff/src/preproc/eqn/script.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-class script_box : public pointer_box {
-private:
- box *sub;
- box *sup;
-public:
- script_box(box *, box *, box *);
- ~script_box();
- int compute_metrics(int);
- void output();
- void debug_print();
- int left_is_italic();
- void hint(unsigned);
- void check_tabs(int);
-};
-
-/* The idea is that the script should attach to the rightmost box
-of a list. For example, given `2x sup 3', the superscript should
-attach to `x' rather than `2x'. */
-
-box *make_script_box(box *nuc, box *sub, box *sup)
-{
- list_box *b = nuc->to_list_box();
- if (b != 0) {
- b->list.p[b->list.len-1] = make_script_box(b->list.p[b->list.len - 1],
- sub,
- sup);
- return b;
- }
- else
- return new script_box(nuc, sub, sup);
-}
-
-script_box::script_box(box *pp, box *qq, box *rr)
-: pointer_box(pp), sub(qq), sup(rr)
-{
-}
-
-script_box::~script_box()
-{
- delete sub;
- delete sup;
-}
-
-int script_box::left_is_italic()
-{
- return p->left_is_italic();
-}
-
-int script_box::compute_metrics(int style)
-{
- int res = p->compute_metrics(style);
- p->compute_subscript_kern();
- printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
- if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
- if (sub != 0)
- sub->compute_metrics(cramped_style(script_style(style)));
- if (sup != 0)
- sup->compute_metrics(script_style(style));
- // 18a
- if (p->is_char()) {
- printf(".nr " SUP_RAISE_FORMAT " 0\n", uid);
- printf(".nr " SUB_LOWER_FORMAT " 0\n", uid);
- }
- else {
- printf(".nr " SUP_RAISE_FORMAT " \\n[" HEIGHT_FORMAT "]-%dM>?0\n",
- uid, p->uid, sup_drop);
- printf(".nr " SUB_LOWER_FORMAT " \\n[" DEPTH_FORMAT "]+%dM\n",
- uid, p->uid, sub_drop);
- }
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- if (sup == 0) {
- assert(sub != 0);
- // 18b
- printf(".nr " SUB_LOWER_FORMAT " \\n[" SUB_LOWER_FORMAT "]>?%dM>?(\\n["
- HEIGHT_FORMAT "]-(%dM*4/5))\n",
- uid, uid, sub1, sub->uid, x_height);
- }
- else {
- // sup != 0
- // 18c
- int pos;
- if (style == DISPLAY_STYLE)
- pos = sup1;
- else if (style & 1) // not cramped
- pos = sup2;
- else
- pos = sup3;
- printf(".nr " SUP_RAISE_FORMAT " \\n[" SUP_RAISE_FORMAT
- "]>?%dM>?(\\n[" DEPTH_FORMAT "]+(%dM/4))\n",
- uid, uid, pos, sup->uid, x_height);
- // 18d
- if (sub != 0) {
- printf(".nr " SUB_LOWER_FORMAT " \\n[" SUB_LOWER_FORMAT "]>?%dM\n",
- uid, uid, sub2);
- // 18e
- printf(".nr " TEMP_REG " \\n[" DEPTH_FORMAT "]-\\n["
- SUP_RAISE_FORMAT "]+\\n[" HEIGHT_FORMAT "]-\\n["
- SUB_LOWER_FORMAT "]+(4*%dM)\n",
- sup->uid, uid, sub->uid, uid, default_rule_thickness);
- printf(".if \\n[" TEMP_REG "] \\{");
- printf(".nr " SUB_LOWER_FORMAT " +\\n[" TEMP_REG "]\n", uid);
- printf(".nr " TEMP_REG " (%dM*4/5)-\\n[" SUP_RAISE_FORMAT
- "]+\\n[" DEPTH_FORMAT "]>?0\n",
- x_height, uid, sup->uid);
- printf(".nr " SUP_RAISE_FORMAT " +\\n[" TEMP_REG "]\n", uid);
- printf(".nr " SUB_LOWER_FORMAT " -\\n[" TEMP_REG "]\n", uid);
- printf(".\\}\n");
- }
- }
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]", uid, p->uid);
- if (sub != 0 && sup != 0)
- printf("+((\\n[" WIDTH_FORMAT "]-\\n[" SUB_KERN_FORMAT "]>?\\n["
- WIDTH_FORMAT "])+%dM)>?0\n",
- sub->uid, p->uid, sup->uid, script_space);
- else if (sub != 0)
- printf("+(\\n[" WIDTH_FORMAT "]-\\n[" SUB_KERN_FORMAT "]+%dM)>?0\n",
- sub->uid, p->uid, script_space);
- else if (sup != 0)
- printf("+(\\n[" WIDTH_FORMAT "]+%dM)>?0\n", sup->uid, script_space);
- else
- printf("\n");
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]",
- uid, p->uid);
- if (sup != 0)
- printf(">?(\\n[" SUP_RAISE_FORMAT "]+\\n[" HEIGHT_FORMAT "])",
- uid, sup->uid);
- if (sub != 0)
- printf(">?(-\\n[" SUB_LOWER_FORMAT "]+\\n[" HEIGHT_FORMAT "])",
- uid, sub->uid);
- printf("\n");
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]",
- uid, p->uid);
- if (sub != 0)
- printf(">?(\\n[" SUB_LOWER_FORMAT "]+\\n[" DEPTH_FORMAT "])",
- uid, sub->uid);
- if (sup != 0)
- printf(">?(-\\n[" SUP_RAISE_FORMAT "]+\\n[" DEPTH_FORMAT "])",
- uid, sup->uid);
- printf("\n");
- return res;
-}
-
-void script_box::output()
-{
- p->output();
- if (sup != 0) {
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
- sup->output();
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
- printf(DELIMITER_CHAR);
- }
- if (sub != 0) {
- printf("\\Z" DELIMITER_CHAR);
- printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
- printf("\\h'-\\n[" SUB_KERN_FORMAT "]u'", p->uid);
- sub->output();
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
- printf(DELIMITER_CHAR);
- }
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'",
- uid, p->uid);
-}
-
-void script_box::hint(unsigned flags)
-{
- p->hint(flags & ~HINT_NEXT_IS_ITALIC);
-}
-
-void script_box::debug_print()
-{
- fprintf(stderr, "{ ");
- p->debug_print();
- fprintf(stderr, " }");
- if (sub) {
- fprintf(stderr, " sub { ");
- sub->debug_print();
- fprintf(stderr, " }");
- }
- if (sup) {
- fprintf(stderr, " sup { ");
- sup->debug_print();
- fprintf(stderr, " }");
- }
-}
-
-void script_box::check_tabs(int level)
-{
- if (sup)
- sup->check_tabs(level + 1);
- if (sub)
- sub->check_tabs(level + 1);
- p->check_tabs(level);
-}
diff --git a/contrib/groff/src/preproc/eqn/special.cpp b/contrib/groff/src/preproc/eqn/special.cpp
deleted file mode 100644
index 172686a505b5..000000000000
--- a/contrib/groff/src/preproc/eqn/special.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-#define STRING_FORMAT PREFIX "str%d"
-
-#define SPECIAL_STRING "0s"
-#define SPECIAL_WIDTH_REG "0w"
-#define SPECIAL_HEIGHT_REG "0h"
-#define SPECIAL_DEPTH_REG "0d"
-#define SPECIAL_SUB_KERN_REG "0skern"
-#define SPECIAL_SKEW_REG "0skew"
-
-/*
-For example:
-
-.de Cl
-.ds 0s \Z'\\*[0s]'\v'\\n(0du'\D'l \\n(0wu -\\n(0hu-\\n(0du'\v'\\n(0hu'
-..
-.EQ
-define cancel 'special Cl'
-.EN
-*/
-
-
-class special_box : public pointer_box {
- char *macro_name;
-public:
- special_box(char *, box *);
- ~special_box();
- int compute_metrics(int);
- void compute_subscript_kern();
- void compute_skew();
- void output();
- void debug_print();
-};
-
-box *make_special_box(char *s, box *p)
-{
- return new special_box(s, p);
-}
-
-special_box::special_box(char *s, box *pp) : pointer_box(pp), macro_name(s)
-{
-}
-
-special_box::~special_box()
-{
- a_delete macro_name;
-}
-
-int special_box::compute_metrics(int style)
-{
- int r = p->compute_metrics(style);
- p->compute_subscript_kern();
- p->compute_skew();
- printf(".ds " SPECIAL_STRING " \"");
- p->output();
- printf("\n");
- printf(".nr " SPECIAL_WIDTH_REG " 0\\n[" WIDTH_FORMAT "]\n", p->uid);
- printf(".nr " SPECIAL_HEIGHT_REG " \\n[" HEIGHT_FORMAT "]\n", p->uid);
- printf(".nr " SPECIAL_DEPTH_REG " \\n[" DEPTH_FORMAT "]\n", p->uid);
- printf(".nr " SPECIAL_SUB_KERN_REG " \\n[" SUB_KERN_FORMAT "]\n", p->uid);
- printf(".nr " SPECIAL_SKEW_REG " 0\\n[" SKEW_FORMAT "]\n", p->uid);
- printf(".%s\n", macro_name);
- printf(".rn " SPECIAL_STRING " " STRING_FORMAT "\n", uid);
- printf(".nr " WIDTH_FORMAT " 0\\n[" SPECIAL_WIDTH_REG "]\n", uid);
- printf(".nr " HEIGHT_FORMAT " 0>?\\n[" SPECIAL_HEIGHT_REG "]\n", uid);
- printf(".nr " DEPTH_FORMAT " 0>?\\n[" SPECIAL_DEPTH_REG "]\n", uid);
- printf(".nr " SUB_KERN_FORMAT " 0>?\\n[" SPECIAL_SUB_KERN_REG "]\n", uid);
- printf(".nr " SKEW_FORMAT " 0\\n[" SPECIAL_SKEW_REG "]\n", uid);
- // User will have to change MARK_REG if appropriate.
- return r;
-}
-
-void special_box::compute_subscript_kern()
-{
- // Already computed in compute_metrics(), so do nothing.
-}
-
-void special_box::compute_skew()
-{
- // Already computed in compute_metrics(), so do nothing.
-}
-
-void special_box::output()
-{
- printf("\\*[" STRING_FORMAT "]", uid);
-}
-
-void special_box::debug_print()
-{
- fprintf(stderr, "special %s { ", macro_name);
- p->debug_print();
- fprintf(stderr, " }");
-}
diff --git a/contrib/groff/src/preproc/eqn/sqrt.cpp b/contrib/groff/src/preproc/eqn/sqrt.cpp
deleted file mode 100644
index 8f3373ff9cad..000000000000
--- a/contrib/groff/src/preproc/eqn/sqrt.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-
-
-class sqrt_box : public pointer_box {
-public:
- sqrt_box(box *);
- int compute_metrics(int style);
- void output();
- void debug_print();
- void check_tabs(int);
-};
-
-box *make_sqrt_box(box *pp)
-{
- return new sqrt_box(pp);
-}
-
-sqrt_box::sqrt_box(box *pp) : pointer_box(pp)
-{
-}
-
-#define SQRT_CHAR "\\[sqrt]"
-#define RADICAL_EXTENSION_CHAR "\\[sqrtex]"
-
-#define SQRT_CHAIN "\\[sqrt\\\\n[" INDEX_REG "]]"
-#define BAR_CHAIN "\\[sqrtex\\\\n[" INDEX_REG "]]"
-
-int sqrt_box::compute_metrics(int style)
-{
- // 11
- int r = p->compute_metrics(cramped_style(style));
- printf(".nr " TEMP_REG " \\n[" HEIGHT_FORMAT "]+\\n[" DEPTH_FORMAT
- "]+%dM+(%dM/4)\n",
- p->uid, p->uid, default_rule_thickness,
- (style > SCRIPT_STYLE ? x_height : default_rule_thickness));
- printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
- printf(".ds " SQRT_STRING_FORMAT " " SQRT_CHAR "\n", uid);
- printf(".ds " BAR_STRING " " RADICAL_EXTENSION_CHAR "\n");
- printf(".nr " SQRT_WIDTH_FORMAT
- " 0\\w" DELIMITER_CHAR SQRT_CHAR DELIMITER_CHAR "\n",
- uid);
- printf(".if \\n[rst]-\\n[rsb]-%dM<\\n[" TEMP_REG "] \\{",
- default_rule_thickness);
-
- printf(".nr " INDEX_REG " 0\n"
- ".de " TEMP_MACRO "\n"
- ".ie c" SQRT_CHAIN " \\{"
- ".ds " SQRT_STRING_FORMAT " " SQRT_CHAIN "\n"
- ".ie c" BAR_CHAIN " .ds " BAR_STRING " " BAR_CHAIN "\n"
- ".el .ds " BAR_STRING " " RADICAL_EXTENSION_CHAR "\n"
- ".nr " SQRT_WIDTH_FORMAT
- " 0\\w" DELIMITER_CHAR SQRT_CHAIN DELIMITER_CHAR "\n"
- ".if \\\\n[rst]-\\\\n[rsb]-%dM<\\n[" TEMP_REG "] \\{"
- ".nr " INDEX_REG " +1\n"
- "." TEMP_MACRO "\n"
- ".\\}\\}\n"
- ".el .nr " INDEX_REG " 0-1\n"
- "..\n"
- "." TEMP_MACRO "\n",
- uid, uid, default_rule_thickness);
-
- printf(".if \\n[" INDEX_REG "]<0 \\{");
-
- // Determine the maximum point size
- printf(".ps 1000\n");
- printf(".nr " MAX_SIZE_REG " \\n[.ps]\n");
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- // We define a macro that will increase the current point size
- // until we get a radical sign that's tall enough or we reach
- // the maximum point size.
- printf(".de " TEMP_MACRO "\n"
- ".nr " SQRT_WIDTH_FORMAT
- " 0\\w" DELIMITER_CHAR "\\*[" SQRT_STRING_FORMAT "]" DELIMITER_CHAR "\n"
- ".if \\\\n[rst]-\\\\n[rsb]-%dM<\\n[" TEMP_REG "]"
- "&(\\\\n[.ps]<\\n[" MAX_SIZE_REG "]) \\{"
- ".ps +1\n"
- "." TEMP_MACRO "\n"
- ".\\}\n"
- "..\n"
- "." TEMP_MACRO "\n",
- uid, uid, default_rule_thickness);
-
- printf(".\\}\\}\n");
-
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
- // set TEMP_REG to the amount by which the radical sign is too big
- printf(".nr " TEMP_REG " \\n[rst]-\\n[rsb]-%dM-\\n[" TEMP_REG "]\n",
- default_rule_thickness);
- // If TEMP_REG is negative, the bottom of the radical sign should
- // be -TEMP_REG above the bottom of p. If it's positive, the bottom
- // of the radical sign should be TEMP_REG/2 below the bottom of p.
- // This calculates the amount by which the baseline of the radical
- // should be raised.
- printf(".nr " SUP_RAISE_FORMAT " (-\\n[" TEMP_REG "]>?(-\\n[" TEMP_REG "]/2))"
- "-\\n[rsb]-\\n[" DEPTH_FORMAT "]\n", uid, p->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]"
- ">?(\\n[" SUP_RAISE_FORMAT "]+\\n[rst])\n",
- uid, p->uid, uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]"
- ">?(-\\n[" SUP_RAISE_FORMAT "]-\\n[rsb])\n",
- uid, p->uid, uid);
- // Do this last, so we don't lose height and depth information on
- // the radical sign.
- // Remember that the width of the bar might be greater than the width of p.
-
- printf(".nr " TEMP_REG " "
- "\\n[" WIDTH_FORMAT "]"
- ">?\\w" DELIMITER_CHAR "\\*[" BAR_STRING "]" DELIMITER_CHAR "\n",
- p->uid);
- printf(".as " SQRT_STRING_FORMAT " "
- "\\l'\\n[" TEMP_REG "]u\\&\\*[" BAR_STRING "]'\n",
- uid);
- printf(".nr " WIDTH_FORMAT " \\n[" TEMP_REG "]"
- "+\\n[" SQRT_WIDTH_FORMAT "]\n",
- uid, uid);
-
- if (r)
- printf(".nr " MARK_REG " +\\n[" SQRT_WIDTH_FORMAT "]\n", uid);
- // the top of the bar might be higher than the top of the radical sign
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]"
- ">?(\\n[" SUP_RAISE_FORMAT "]+\\n[rst])\n",
- uid, p->uid, uid);
- // put a bit of extra space above the bar
- printf(".nr " HEIGHT_FORMAT " +%dM\n", uid, default_rule_thickness);
- printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
- return r;
-}
-
-void sqrt_box::output()
-{
- printf("\\Z" DELIMITER_CHAR);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\*[" SQRT_STRING_FORMAT "]", uid);
- printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
- printf(DELIMITER_CHAR);
-
- printf("\\Z" DELIMITER_CHAR);
- printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u"
- "+\\n[" SQRT_WIDTH_FORMAT "]u/2u'",
- uid, p->uid, uid);
- p->output();
- printf(DELIMITER_CHAR);
-
- printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid);
-}
-
-void sqrt_box::debug_print()
-{
- fprintf(stderr, "sqrt { ");
- p->debug_print();
- fprintf(stderr, " }");
-}
-
-void sqrt_box::check_tabs(int level)
-{
- p->check_tabs(level + 1);
-}
diff --git a/contrib/groff/src/preproc/eqn/text.cpp b/contrib/groff/src/preproc/eqn/text.cpp
deleted file mode 100644
index e39221276b58..000000000000
--- a/contrib/groff/src/preproc/eqn/text.cpp
+++ /dev/null
@@ -1,528 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "eqn.h"
-#include "pbox.h"
-#include "ptable.h"
-
-class char_box : public simple_box {
- unsigned char c;
- char next_is_italic;
- char prev_is_italic;
-public:
- char_box(unsigned char);
- void debug_print();
- void output();
- int is_char();
- int left_is_italic();
- int right_is_italic();
- void hint(unsigned);
- void handle_char_type(int, int);
-};
-
-class special_char_box : public simple_box {
- char *s;
-public:
- special_char_box(const char *);
- ~special_char_box();
- void output();
- void debug_print();
- int is_char();
- void handle_char_type(int, int);
-};
-
-const char *spacing_type_table[] = {
- "ordinary",
- "operator",
- "binary",
- "relation",
- "opening",
- "closing",
- "punctuation",
- "inner",
- "suppress",
- 0,
-};
-
-const int DIGIT_TYPE = 0;
-const int LETTER_TYPE = 1;
-
-const char *font_type_table[] = {
- "digit",
- "letter",
- 0,
-};
-
-struct char_info {
- int spacing_type;
- int font_type;
- char_info();
-};
-
-char_info::char_info()
-: spacing_type(ORDINARY_TYPE), font_type(DIGIT_TYPE)
-{
-}
-
-static char_info char_table[256];
-
-declare_ptable(char_info)
-implement_ptable(char_info)
-
-PTABLE(char_info) special_char_table;
-
-static int get_special_char_spacing_type(const char *ch)
-{
- char_info *p = special_char_table.lookup(ch);
- return p ? p->spacing_type : ORDINARY_TYPE;
-}
-
-static int get_special_char_font_type(const char *ch)
-{
- char_info *p = special_char_table.lookup(ch);
- return p ? p->font_type : DIGIT_TYPE;
-}
-
-static void set_special_char_type(const char *ch, int st, int ft)
-{
- char_info *p = special_char_table.lookup(ch);
- if (!p) {
- p = new char_info[1];
- special_char_table.define(ch, p);
- }
- if (st >= 0)
- p->spacing_type = st;
- if (ft >= 0)
- p->font_type = ft;
-}
-
-void init_char_table()
-{
- set_special_char_type("pl", 2, -1); // binary
- set_special_char_type("mi", 2, -1);
- set_special_char_type("eq", 3, -1); // relation
- set_special_char_type("<=", 3, -1);
- set_special_char_type(">=", 3, -1);
- char_table['}'].spacing_type = 5; // closing
- char_table[')'].spacing_type = 5;
- char_table[']'].spacing_type = 5;
- char_table['{'].spacing_type = 4; // opening
- char_table['('].spacing_type = 4;
- char_table['['].spacing_type = 4;
- char_table[','].spacing_type = 6; // punctuation
- char_table[';'].spacing_type = 6;
- char_table[':'].spacing_type = 6;
- char_table['.'].spacing_type = 6;
- char_table['>'].spacing_type = 3;
- char_table['<'].spacing_type = 3;
- char_table['*'].spacing_type = 2; // binary
- for (int i = 0; i < 256; i++)
- if (csalpha(i))
- char_table[i].font_type = LETTER_TYPE;
-}
-
-static int lookup_spacing_type(const char *type)
-{
- for (int i = 0; spacing_type_table[i] != 0; i++)
- if (strcmp(spacing_type_table[i], type) == 0)
- return i;
- return -1;
-}
-
-static int lookup_font_type(const char *type)
-{
- for (int i = 0; font_type_table[i] != 0; i++)
- if (strcmp(font_type_table[i], type) == 0)
- return i;
- return -1;
-}
-
-void box::set_spacing_type(char *type)
-{
- int t = lookup_spacing_type(type);
- if (t < 0)
- error("unrecognised type `%1'", type);
- else
- spacing_type = t;
- a_delete type;
-}
-
-char_box::char_box(unsigned char cc)
-: c(cc), next_is_italic(0), prev_is_italic(0)
-{
- spacing_type = char_table[c].spacing_type;
-}
-
-void char_box::hint(unsigned flags)
-{
- if (flags & HINT_PREV_IS_ITALIC)
- prev_is_italic = 1;
- if (flags & HINT_NEXT_IS_ITALIC)
- next_is_italic = 1;
-}
-
-void char_box::output()
-{
- int font_type = char_table[c].font_type;
- if (font_type != LETTER_TYPE)
- printf("\\f[%s]", current_roman_font);
- if (!prev_is_italic)
- fputs("\\,", stdout);
- if (c == '\\')
- fputs("\\e", stdout);
- else
- putchar(c);
- if (!next_is_italic)
- fputs("\\/", stdout);
- else
- fputs("\\&", stdout); // suppress ligaturing and kerning
- if (font_type != LETTER_TYPE)
- fputs("\\fP", stdout);
-}
-
-int char_box::left_is_italic()
-{
- int font_type = char_table[c].font_type;
- return font_type == LETTER_TYPE;
-}
-
-int char_box::right_is_italic()
-{
- int font_type = char_table[c].font_type;
- return font_type == LETTER_TYPE;
-}
-
-int char_box::is_char()
-{
- return 1;
-}
-
-void char_box::debug_print()
-{
- if (c == '\\') {
- putc('\\', stderr);
- putc('\\', stderr);
- }
- else
- putc(c, stderr);
-}
-
-special_char_box::special_char_box(const char *t)
-{
- s = strsave(t);
- spacing_type = get_special_char_spacing_type(s);
-}
-
-special_char_box::~special_char_box()
-{
- a_delete s;
-}
-
-void special_char_box::output()
-{
- int font_type = get_special_char_font_type(s);
- if (font_type != LETTER_TYPE)
- printf("\\f[%s]", current_roman_font);
- printf("\\,\\[%s]\\/", s);
- if (font_type != LETTER_TYPE)
- printf("\\fP");
-}
-
-int special_char_box::is_char()
-{
- return 1;
-}
-
-void special_char_box::debug_print()
-{
- fprintf(stderr, "\\[%s]", s);
-}
-
-
-void char_box::handle_char_type(int st, int ft)
-{
- if (st >= 0)
- char_table[c].spacing_type = st;
- if (ft >= 0)
- char_table[c].font_type = ft;
-}
-
-void special_char_box::handle_char_type(int st, int ft)
-{
- set_special_char_type(s, st, ft);
-}
-
-void set_char_type(const char *type, char *ch)
-{
- assert(ch != 0);
- int st = lookup_spacing_type(type);
- int ft = lookup_font_type(type);
- if (st < 0 && ft < 0) {
- error("bad character type `%1'", type);
- a_delete ch;
- return;
- }
- box *b = split_text(ch);
- b->handle_char_type(st, ft);
- delete b;
-}
-
-/* We give primes special treatment so that in ``x' sub 2'', the ``2''
-will be tucked under the prime */
-
-class prime_box : public pointer_box {
- box *pb;
-public:
- prime_box(box *);
- ~prime_box();
- int compute_metrics(int style);
- void output();
- void compute_subscript_kern();
- void debug_print();
- void handle_char_type(int, int);
-};
-
-box *make_prime_box(box *pp)
-{
- return new prime_box(pp);
-}
-
-prime_box::prime_box(box *pp) : pointer_box(pp)
-{
- pb = new special_char_box("fm");
-}
-
-prime_box::~prime_box()
-{
- delete pb;
-}
-
-int prime_box::compute_metrics(int style)
-{
- int res = p->compute_metrics(style);
- pb->compute_metrics(style);
- printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]"
- "+\\n[" WIDTH_FORMAT "]\n",
- uid, p->uid, pb->uid);
- printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]"
- ">?\\n[" HEIGHT_FORMAT "]\n",
- uid, p->uid, pb->uid);
- printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]"
- ">?\\n[" DEPTH_FORMAT "]\n",
- uid, p->uid, pb->uid);
- return res;
-}
-
-void prime_box::compute_subscript_kern()
-{
- p->compute_subscript_kern();
- printf(".nr " SUB_KERN_FORMAT " 0\\n[" WIDTH_FORMAT "]"
- "+\\n[" SUB_KERN_FORMAT "]>?0\n",
- uid, pb->uid, p->uid);
-}
-
-void prime_box::output()
-{
- p->output();
- pb->output();
-}
-
-void prime_box::handle_char_type(int st, int ft)
-{
- p->handle_char_type(st, ft);
- pb->handle_char_type(st, ft);
-}
-
-void prime_box::debug_print()
-{
- p->debug_print();
- putc('\'', stderr);
-}
-
-box *split_text(char *text)
-{
- list_box *lb = 0;
- box *fb = 0;
- char *s = text;
- while (*s != '\0') {
- char c = *s++;
- box *b = 0;
- switch (c) {
- case '+':
- b = new special_char_box("pl");
- break;
- case '-':
- b = new special_char_box("mi");
- break;
- case '=':
- b = new special_char_box("eq");
- break;
- case '\'':
- b = new special_char_box("fm");
- break;
- case '<':
- if (*s == '=') {
- b = new special_char_box("<=");
- s++;
- break;
- }
- goto normal_char;
- case '>':
- if (*s == '=') {
- b = new special_char_box(">=");
- s++;
- break;
- }
- goto normal_char;
- case '\\':
- if (*s == '\0') {
- lex_error("bad escape");
- break;
- }
- c = *s++;
- switch (c) {
- case '(':
- {
- char buf[3];
- if (*s != '\0') {
- buf[0] = *s++;
- if (*s != '\0') {
- buf[1] = *s++;
- buf[2] = '\0';
- b = new special_char_box(buf);
- }
- else {
- lex_error("bad escape");
- }
- }
- else {
- lex_error("bad escape");
- }
- }
- break;
- case '[':
- {
- char *ch = s;
- while (*s != ']' && *s != '\0')
- s++;
- if (*s == '\0')
- lex_error("bad escape");
- else {
- *s++ = '\0';
- b = new special_char_box(ch);
- }
- }
- break;
- case 'f':
- case 'g':
- case 'k':
- case 'n':
- case '*':
- {
- char *escape_start = s - 2;
- switch (*s) {
- case '(':
- if (*++s != '\0')
- ++s;
- break;
- case '[':
- for (++s; *s != '\0' && *s != ']'; s++)
- ;
- break;
- }
- if (*s == '\0')
- lex_error("bad escape");
- else {
- ++s;
- char *buf = new char[s - escape_start + 1];
- memcpy(buf, escape_start, s - escape_start);
- buf[s - escape_start] = '\0';
- b = new quoted_text_box(buf);
- }
- }
- break;
- case '-':
- case '_':
- {
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- b = new special_char_box(buf);
- }
- break;
- case '`':
- b = new special_char_box("ga");
- break;
- case '\'':
- b = new special_char_box("aa");
- break;
- case 'e':
- case '\\':
- b = new char_box('\\');
- break;
- case '^':
- case '|':
- case '0':
- {
- char buf[3];
- buf[0] = '\\';
- buf[1] = c;
- buf[2] = '\0';
- b = new quoted_text_box(strsave(buf));
- break;
- }
- default:
- lex_error("unquoted escape");
- b = new quoted_text_box(strsave(s - 2));
- s = strchr(s, '\0');
- break;
- }
- break;
- default:
- normal_char:
- b = new char_box(c);
- break;
- }
- while (*s == '\'') {
- if (b == 0)
- b = new quoted_text_box(0);
- b = new prime_box(b);
- s++;
- }
- if (b != 0) {
- if (lb != 0)
- lb->append(b);
- else if (fb != 0) {
- lb = new list_box(fb);
- lb->append(b);
- }
- else
- fb = b;
- }
- }
- a_delete text;
- if (lb != 0)
- return lb;
- else if (fb != 0)
- return fb;
- else
- return new quoted_text_box(0);
-}
-
diff --git a/contrib/groff/src/preproc/grn/Makefile.sub b/contrib/groff/src/preproc/grn/Makefile.sub
deleted file mode 100644
index c28db477ffa6..000000000000
--- a/contrib/groff/src/preproc/grn/Makefile.sub
+++ /dev/null
@@ -1,17 +0,0 @@
-PROG=grn$(EXEEXT)
-MAN1=grn.n
-MLIB=$(LIBM)
-XLIBS=$(LIBGROFF)
-OBJS=\
- hdb.$(OBJEXT) \
- hpoint.$(OBJEXT) \
- hgraph.$(OBJEXT) \
- main.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/hdb.cpp \
- $(srcdir)/hpoint.cpp \
- $(srcdir)/hgraph.cpp \
- $(srcdir)/main.cpp
-HDRS=\
- $(srcdir)/gprint.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/grn/README b/contrib/groff/src/preproc/grn/README
deleted file mode 100644
index 124103bacab8..000000000000
--- a/contrib/groff/src/preproc/grn/README
+++ /dev/null
@@ -1,68 +0,0 @@
-This is grn from the Berkeley ditroff distribution. It has no
-AT&T code and is therefore freely distributable.
-
-Tim Theisen <tim@cs.wisc.edu>
-
-=====================================================================
-
-This is the modified code for the groff. It uses the different
-devxxx format that is ascii rather than binary as in the
-Berkeley distribution. Since groff does not have the \Ds option
-for line drawing (dotted, dashed, etc.), this version includes
-the routines for drawing curves and arcs, so it does not use the
-\D~, \Da nor \Dc. Although also included in here is a routine
-for drawing the optional gremlin style curves, it is not used
-because the gremlin editor uses the conventional spline
-algorithm. The Berkeley grn has the choice of different
-stipples. Here, only different shades of gray will be painted
-depending on the gremlin file. It is possible to upgrade this at
-a later time. (Daniel Senderowicz <daniel@synchrods.com> 12/28/99)
-
-=====================================================================
-
-Gremlin produces three types of curves: B-Splines, interpolated
-curves and Bezier. As the original Berkeley grn, now groff grn
-will honor B-Splines and interpolated curves. Bezier curves will
-be printed as B-Splines. (Daniel Senderowicz <daniel@synchrods.com>
-10/04/02)
-
-=====================================================================
-
-It has been further modified by Werner Lemberg <wl@gnu.org> to fit
-better into the groff package.
-
- . Replaced Makefile with Makefile.sub.
-
- . Removed dev.h since it is unused.
-
- . Renamed grn.1 to grn.man; this man page has been extensively
- revised.
-
- . Used error() and fatal() from libgroff for all source files.
-
- . Renamed *.c to *.cpp; updates as needed for C++ (prototypes, proper
- casts, standard header files etc). Heavy formatting.
-
- . main.cpp:
-
- Using groff's default values instead of DEVDIR, DEFAULTDEV, PRINTER,
- TYPESETTER, and GREMLIB.
-
- `res' is now an integer.
-
- Added `-C' command flag (for compatibility mode) as with other
- preprocessors.
-
- Added `-F' and `-v' option (similar to troff).
-
- Renamed `-L' option to `-M' for consistence.
-
- Removed `-P' option.
-
- Using font::load_desc() for scanning DESC files.
-
- Removed SYSV-specific code.
-
- Using macro_path.open_file() for getting gremlin graphic files.
-
- Added usage().
diff --git a/contrib/groff/src/preproc/grn/gprint.h b/contrib/groff/src/preproc/grn/gprint.h
deleted file mode 100644
index ad3be443015d..000000000000
--- a/contrib/groff/src/preproc/grn/gprint.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Last non-groff version: gprint.h 1.1 84/10/08
- *
- * This file contains standard definitions used by the gprint program.
- */
-
-#include <stdio.h>
-#include <math.h>
-
-
-#define xorn(x,y) (x)
- /* was 512 */
-#define yorn(x,y) (511 - (y)) /* switch direction for */
- /* y-coordinates */
-
-#define STYLES 6
-#define SIZES 4
-#define FONTS 4
-#define SOLID -1
-#define DOTTED 004 /* 014 */
-#define DASHED 020 /* 034 */
-#define DOTDASHED 024 /* 054 */
-#define LONGDASHED 074
-
-#define DEFTHICK -1 /* default thicknes */
-#define DEFSTYLE SOLID /* default line style */
-
-#define TRUE 1
-#define FALSE 0
-
-#define nullelt -1
-#define nullpt -1
-#define nullun NULL
-
-#define BOTLEFT 0
-#define BOTRIGHT 1
-#define CENTCENT 2
-#define VECTOR 3
-#define ARC 4
-#define CURVE 5
-#define POLYGON 6
-#define BSPLINE 7
-#define BEZIER 8
-#define TOPLEFT 10
-#define TOPCENT 11
-#define TOPRIGHT 12
-#define CENTLEFT 13
-#define CENTRIGHT 14
-#define BOTCENT 15
-#define TEXT(t) ( (t <= CENTCENT) || (t >= TOPLEFT) )
-
-/* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
- * The above (TEXT) test is dependent on the relative values of the
- * constants and will have to change if these values change or if new
- * commands are added with value greater than BOTCENT
- */
-
-#define NUSER 4
-#define NFONTS 4
-#define NBRUSHES 6
-#define NSIZES 4
-#define NJUSTS 9
-#define NSTIPPLES 16
-
-#define ADD 1
-#define DELETE 2
-#define MOD 3
-
-typedef struct point {
- double x, y;
- struct point *nextpt;
-} POINT;
-
-typedef struct elmt {
- int type, brushf, size, textlength;
- char *textpt;
- POINT *ptlist;
- struct elmt *nextelt, *setnext;
-} ELT;
-
-#define DBNextElt(elt) (elt->nextelt)
-#define DBNextofSet(elt) (elt->setnext)
-#define DBNullelt(elt) (elt == NULL)
-#define Nullpoint(pt) ((pt) == (POINT *) NULL)
-#define PTNextPoint(pt) (pt->nextpt)
-
-/* EOF */
diff --git a/contrib/groff/src/preproc/grn/grn.man b/contrib/groff/src/preproc/grn/grn.man
deleted file mode 100644
index 575b4ee70c77..000000000000
--- a/contrib/groff/src/preproc/grn/grn.man
+++ /dev/null
@@ -1,652 +0,0 @@
-'\" t
-.ig
-Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grn_C \n[.C]
-.cp 0
-.
-.de TQ
-. br
-. ns
-. TP \\$1
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.
-.TH @G@GRN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@grn \- groff preprocessor for gremlin files
-.SH SYNOPSIS
-.BR @g@grn
-[
-.B \-Cv
-]
-[
-.BI \-T dev
-]
-[
-.BI \-M dir
-]
-[
-.BI \-F dir
-]
-[
-.IR file\.\.\.\&
-]
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.SH DESCRIPTION
-.I @g@grn
-is a preprocessor for including
-.I gremlin
-pictures in
-.I groff
-input.
-.I @g@grn
-writes to standard output, processing only input lines between two that
-start with
-.B .GS
-and
-.BR .GE.
-Those lines must contain
-.I @g@grn
-commands (see below).
-These commands request a
-.I gremlin
-file, and the picture in that file is
-converted and placed in the
-.I @g@troff
-input stream.
-The
-.B .GS
-request may be followed by a C, L, or R to center, left, or right
-justify the whole
-.I gremlin
-picture (default justification is center).
-If no
-.I file
-is mentioned, the standard input is read.
-At the end of the picture, the position on the page is the bottom of the
-.I gremlin
-picture.
-If the
-.I @g@grn
-entry is ended with
-.B .GF
-instead of
-.BR .GE ,
-the position is left at the top of the picture.
-.PP
-Please note that currently only the \-me macro package has support for
-.BR .GS ,
-.BR .GE ,
-and
-.BR .GF .
-.PP
-The following command-line options are understood:
-.TP
-.BI \-T dev
-Prepare output for printer
-.IR dev .
-The default device is
-.BR @DEVICE@ .
-See
-.BR groff (@MAN1EXT@)
-for acceptable devices.
-.TP
-.BI \-M dir
-Prepend
-.I dir
-to the default search path for
-.I gremlin
-files.
-The default path is (in that order) the current directory, the home
-directory,
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-and
-.BR @MACRODIR@ .
-.TP
-.BI \-F dir
-Search
-.I dir
-for subdirectories
-.BI dev name
-.RI ( name
-is the name of the device) for the
-.B DESC
-file before the default font directories
-.BR @LOCALFONTDIR@ ,
-.BR @FONTDIR@ ,
-and
-.BR @LEGACYFONTDIR@ .
-.TP
-.B \-C
-Recognize
-.B .GS
-and
-.B .GE
-(and
-.BR .GF )
-even when followed by a character other than space or newline.
-.\".TP
-.\".B \-s
-.\"This switch causes the picture to be traversed twice:
-.\"The first time, only the interiors of filled polygons (as borderless
-.\"polygons) are printed.
-.\"The second time, the outline is printed as a series of line segments.
-.\"This way, postprocessors that overwrite rather than merge picture elements
-.\"(such as Postscript) can still have text and graphics on a shaded
-.\"background.
-.TP
-.B \-v
-Print the version number.
-.SH GRN COMMANDS
-Each input line between
-.B .GS
-and
-.B .GE
-may have one
-.I @g@grn
-command.
-Commands consist of one or two strings separated by white space, the first
-string being the command and the second its operand.
-Commands may be upper or lower case and abbreviated down to one character.
-.PP
-Commands that affect a picture's environment (those listed before
-.BR default ,
-see below) are only in effect for the current picture:
-The environment is reinitialized to the defaults at the start of the next
-picture.
-The commands are as follows:
-.TP
-.BI 1\ N
-.TQ
-.BI 2\ N
-.TQ
-.BI 3\ N
-.TQ
-.BI 4\ N
-Set
-.IR gremlin 's
-text size number 1 (2, 3, or 4) to
-.I N
-points.
-The default is 12 (16, 24, and 36, respectively).
-.TP
-.BI roman\ f
-.TQ
-.BI italics\ f
-.TQ
-.BI bold\ f
-.TQ
-.BI special\ f
-Set the roman (italics, bold, or special) font to
-.IR @g@troff 's
-font
-.I f
-(either a name or number).
-The default is R (I, B, and S, respectively).
-.TP
-.BI l\ f
-.TQ
-.BI stipple\ f
-Set the stipple font to
-.IR @g@troff 's
-stipple font
-.I f
-(name or number).
-The command
-.B stipple
-may be abbreviated down as far as `st' (to avoid
-confusion with
-.BR special ).
-There is
-.I no
-default for stipples (unless one is set by the default command), and it is
-invalid to include a
-.I gremlin
-picture with polygons without specifying a
-stipple font.
-.TP
-.BI x\ N
-.TQ
-.BI scale\ N
-Magnify the picture (in addition to any default magnification) by
-.IR N ,
-a floating point number larger than zero.
-The command
-.B scale
-may be abbreviated down to `sc'.
-.TP
-.BI narrow\ N
-.TQ
-.BI medium\ N
-.TQ
-.BI thick\ N
-Set the thickness of
-.IR gremlin 's
-narrow (medium and thick, respectively) lines to
-.I N
-times 0.15pt (this value can be changed at compile time).
-The default is 1.0 (3.0 and 5.0, respectively), which corresponds to 0.15pt
-(0.45pt and 0.75pt, respectively).
-A thickness value of zero selects the smallest available line thickness.
-Negative values cause the line thickness to be proportional to the current
-point size.
-.TP
-.BI pointscale\ <off/on>
-Scale text to match the picture.
-Gremlin text is usually printed in the point size specified with the
-commands
-.BR 1 ,
-.BR 2 ,
-.BR 3 ,
-.RB or\~ 4 ,
-regardless of any scaling factors in the picture.
-Setting
-.B pointscale
-will cause the point sizes to scale with the picture (within
-.IR @g@troff 's
-limitations, of course).
-An operand of anything but
-.I off
-will turn text scaling on.
-.TP
-.B default
-Reset the picture environment defaults to the settings in the current
-picture.
-This is meant to be used as a global parameter setting mechanism at the
-beginning of the
-.I @g@troff
-input file, but can be used at any time to reset the
-default settings.
-.TP
-.BI width\ N
-Forces the picture to be
-.I N
-inches wide.
-This overrides any scaling factors present in the same picture.
-.RB ` width
-.IR 0 '
-is ignored.
-.TP
-.BI height\ N
-Forces picture to be
-.I N
-inches high, overriding other scaling factors.
-If both `width' and `height' are specified the tighter constraint will
-determine the scale of the picture.
-.B Height
-and
-.B width
-commands are not saved with a
-.B default
-command.
-They will, however, affect point size scaling if that option is set.
-.TP
-.BI file\ name
-Get picture from
-.I gremlin
-file
-.I name
-located the current directory (or in the library directory; see the
-.B \-M
-option above).
-If two
-.B file
-commands are given, the second one overrides the first.
-If
-.I name
-doesn't exist, an error message is reported and processing continues from
-the
-.B .GE
-line.
-.SH NOTES ABOUT GROFF
-Since
-.I @g@grn
-is a preprocessor, it doesn't know about current indents, point sizes,
-margins, number registers, etc.
-Consequently, no
-.I @g@troff
-input can be placed between the
-.B .GS
-and
-.B .GE
-requests.
-However,
-.I gremlin
-text is now processed by
-.IR @g@troff ,
-so anything legal in a single line of
-.I @g@troff
-input is legal in a line of
-.I gremlin
-text (barring `.' directives at the beginning of a line).
-Thus, it is possible to have equations within a
-.I gremlin
-figure by including in the
-.I gremlin
-file
-.I eqn
-expressions enclosed by previously defined delimiters (e.g.
-.IR $$ ).
-.PP
-When using
-.I @g@grn
-along with other preprocessors, it is best to run
-.I tbl
-before
-.IR @g@grn ,
-.IR pic ,
-and/or
-.I ideal
-to avoid overworking
-.IR tbl .
-.I Eqn
-should always be run last.
-.PP
-A picture is considered an entity, but that doesn't stop
-.I @g@troff
-from trying to break it up if it falls off the end of a page.
-Placing the picture between `keeps' in \-me macros will ensure proper
-placement.
-.PP
-.I @g@grn
-uses
-.IR @g@troff 's
-number registers
-.B g1
-through
-.B g9
-and sets registers
-.B g1
-and
-.B g2
-to the width and height of the
-.I gremlin
-figure (in device units) before entering the
-.B .GS
-request (this is for those who want to rewrite these macros).
-.SH GREMLIN FILE FORMAT
-There exist two distinct
-.I gremlin
-file formats, the original format from the
-.I AED
-graphic terminal version, and the
-.I SUN
-or
-.I X11
-version.
-An extension to the
-.IR SUN / X11
-version allowing reference points with negative coordinates is
-.B not
-compatible with the
-.I AED
-version.
-As long as a
-.I gremlin
-file does not contain negative coordinates, either format will be read
-correctly by either version of
-.I gremlin
-or
-.IR @g@grn .
-The other difference to the
-.IR SUN / X11
-format is the use of names for picture objects (e.g., POLYGON, CURVE)
-instead of numbers.
-Files representing the same picture are shown in Table 1 in each format.
-.sp
-.TS
-center, tab(@);
-l lw(0.1i) l.
-sungremlinfile@@gremlinfile
-0 240.00 128.00@@0 240.00 128.00
-CENTCENT@@2
-240.00 128.00@@240.00 128.00
-185.00 120.00@@185.00 120.00
-240.00 120.00@@240.00 120.00
-296.00 120.00@@296.00 120.00
-*@@-1.00 -1.00
-2 3@@2 3
-10 A Triangle@@10 A Triangle
-POLYGON@@6
-224.00 416.00@@224.00 416.00
-96.00 160.00@@96.00 160.00
-384.00 160.00@@384.00 160.00
-*@@-1.00 -1.00
-5 1@@5 1
-0@@0
--1@@-1
-.T&
-css.
-.sp
-Table 1. File examples
-.TE
-.sp
-.IP \(bu
-The first line of each
-.I gremlin
-file contains either the string
-.B gremlinfile
-.RI ( AED
-version) or
-.B sungremlinfile
-.RI ( SUN / X11 )
-.IP \(bu
-The second line of the file contains an orientation, and
-.B x
-and
-.B y
-values for a positioning point, separated by spaces.
-The orientation, either
-.B 0
-or
-.BR 1 ,
-is ignored by the
-.IR SUN / X11
-version.
-.B 0
-means that
-.I gremlin
-will display things in horizontal format (drawing area wider than it is
-tall, with menu across top).
-.B 1
-means that
-.I gremlin
-will display things in vertical format (drawing area taller than it is wide,
-with menu on left side).
-.B x
-and
-.B y
-are floating point values giving a positioning point to be used when this
-file is read into another file.
-The stuff on this line really isn't all that important; a value of ``1 0.00
-0.00'' is suggested.
-.IP \(bu
-The rest of the file consists of zero or more element specifications.
-After the last element specification is a line containing the string ``-1''.
-.IP \(bu
-Lines longer than 127 characters are chopped to this limit.
-.SH ELEMENT SPECIFICATIONS
-.IP \(bu
-The first line of each element contains a single decimal number giving the
-type of the element
-.RI ( AED
-version) or its ASCII name
-.RI ( SUN / X11
-version).
-See Table 2.
-.sp
-.TS
-center, tab(@);
-css
-ccc
-nll.
-\fIgremlin\fP File Format \(mi Object Type Specification
-.sp
-\fIAED\fP Number@\fISUN\fP/\fIX11\fP Name@Description
-0@BOTLEFT@bottom-left-justified text
-1@BOTRIGHT@bottom-right-justified text
-2@CENTCENT@center-justified text
-3@VECTOR@vector
-4@ARC@arc
-5@CURVE@curve
-6@POLYGON@polygon
-7@BSPLINE@b-spline
-8@BEZIER@B\['e]zier
-10@TOPLEFT@top-left-justified text
-11@TOPCENT@top-center-justified text
-12@TOPRIGHT@top-right-justified text
-13@CENTLEFT@left-center-justified text
-14@CENTRIGHT@right-center-justified text
-15@BOTCENT@bottom-center-justified text
-.T&
-css.
-.sp
-Table 2.
-Type Specifications in \fIgremlin\fP Files
-.TE
-.sp
-.IP \(bu
-After the object type comes a variable number of lines, each specifying a
-point used to display the element.
-Each line contains an x-coordinate and a y-coordinate in floating point
-format, separated by spaces.
-The list of points is terminated by a line containing the string ``-1.0
--1.0''
-.RI ( AED
-version) or a single asterisk, ``*''
-.RI ( SUN / X11
-version).
-.IP \(bu
-After the points comes a line containing two decimal values, giving the
-brush and size for the element.
-The brush determines the style in which things are drawn.
-For vectors, arcs, and curves there are six legal brush values:
-.sp
-.TS
-center, tab(@);
-ncw(0.1i)l.
-1 \(mi@@thin dotted lines
-2 \(mi@@thin dot-dashed lines
-3 \(mi@@thick solid lines
-4 \(mi@@thin dashed lines
-5 \(mi@@thin solid lines
-6 \(mi@@medium solid lines
-.TE
-.sp
-For polygons, one more value, 0, is legal.
-It specifies a polygon with an invisible border.
-For text, the brush selects a font as follows:
-.sp
-.TS
-center, tab(@);
-ncw(0.1i)l.
-1 \(mi@@roman (R font in groff)
-2 \(mi@@italics (I font in groff)
-3 \(mi@@bold (B font in groff)
-4 \(mi@@special (S font in groff)
-.TE
-.sp
-If you're using
-.I @g@grn
-to run your pictures through
-.IR groff ,
-the font is really just a starting font:
-The text string can contain formatting sequences like
-``\efI''
-or
-``\ed''
-which may change the font (as well as do many other things).
-For text, the size field is a decimal value between 1 and 4.
-It selects the size of the font in which the text will be drawn.
-For polygons, this size field is interpreted as a stipple number to fill the
-polygon with.
-The number is used to index into a stipple font at print time.
-.IP \(bu
-The last line of each element contains a decimal number and a string of
-characters, separated by a single space.
-The number is a count of the number of characters in the string.
-This information is only used for text elements, and contains the text
-string.
-There can be spaces inside the text.
-For arcs, curves, and vectors, this line of the element contains the string
-``0''.
-.SH NOTES ON COORDINATES
-.I gremlin
-was designed for
-.IR AED s,
-and its coordinates reflect the
-.I AED
-coordinate space.
-For vertical pictures, x-values range 116 to 511, and y-values from 0 to
-483.
-For horizontal pictures, x-values range from 0 to 511 and y-values range
-from 0 to 367.
-Although you needn't absolutely stick to this range, you'll get best results
-if you at least stay in this vicinity.
-Also, point lists are terminated by a point of (-1, -1), so you shouldn't
-ever use negative coordinates.
-.I gremlin
-writes out coordinates using format ``%f1.2''; it's probably a good idea to
-use the same format if you want to modify the
-.I @g@grn
-code.
-.SH NOTES ON SUN/X11 COORDINATES
-There is no longer a restriction on the range of coordinates used to create
-objects in the
-.IR SUN / X11
-version of
-.IR gremlin .
-However, files with negative coordinates
-.B will
-cause problems if displayed on the
-.IR AED .
-.SH FILES
-.Tp \w'@FONTDIR@/devname/DESC'u+3n
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.SH SEE ALSO
-.BR gremlin (1),
-.BR groff (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR ideal (1)
-.SH HISTORY
-.PP
-David Slattengren and Barry Roitblat wrote the original Berkeley
-.IR @g@grn .
-.PP
-Daniel Senderowicz and Werner Lemberg modified it for
-.IR groff .
-.
-.cp \n[grn_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/grn/hdb.cpp b/contrib/groff/src/preproc/grn/hdb.cpp
deleted file mode 100644
index 5f54040dd5c5..000000000000
--- a/contrib/groff/src/preproc/grn/hdb.cpp
+++ /dev/null
@@ -1,346 +0,0 @@
- /* Last non-groff version: hdb.c 1.8 (Berkeley) 84/10/20
- *
- * Copyright -C- 1982 Barry S. Roitblat
- *
- * This file contains database routines for the hard copy programs of the
- * gremlin picture editor.
- */
-
-#include "gprint.h"
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "errarg.h"
-#include "error.h"
-
-#define MAXSTRING 128
-#define MAXSTRING_S "127"
-
-/* imports from main.cpp */
-
-extern int linenum; /* current line number in input file */
-extern char gremlinfile[]; /* name of file currently reading */
-extern int SUNFILE; /* TRUE if SUN gremlin file */
-extern int compatibility_flag; /* TRUE if in compatibility mode */
-extern void savebounds(double x, double y);
-
-/* imports from hpoint.cpp */
-
-extern POINT *PTInit();
-extern POINT *PTMakePoint(double x, double y, POINT ** pplist);
-
-
-int DBGetType(register char *s);
-
-
-/*
- * This routine returns a pointer to an initialized database element which
- * would be the only element in an empty list.
- */
-ELT *
-DBInit()
-{
- return ((ELT *) NULL);
-} /* end DBInit */
-
-
-/*
- * This routine creates a new element with the specified attributes and
- * links it into database.
- */
-ELT *
-DBCreateElt(int type,
- POINT * pointlist,
- int brush,
- int size,
- char *text,
- ELT **db)
-{
- register ELT *temp;
-
- temp = (ELT *) malloc(sizeof(ELT));
- temp->nextelt = *db;
- temp->type = type;
- temp->ptlist = pointlist;
- temp->brushf = brush;
- temp->size = size;
- temp->textpt = text;
- *db = temp;
- return (temp);
-} /* end CreateElt */
-
-
-/*
- * This routine reads the specified file into a database and returns a
- * pointer to that database.
- */
-ELT *
-DBRead(register FILE *file)
-{
- register int i;
- register int done; /* flag for input exhausted */
- register double nx; /* x holder so x is not set before orienting */
- int type; /* element type */
- ELT *elist; /* pointer to the file's elements */
- POINT *plist; /* pointer for reading in points */
- char string[MAXSTRING], *txt;
- double x, y; /* x and y are read in point coords */
- int len, brush, size;
- int lastpoint;
-
- SUNFILE = FALSE;
- elist = DBInit();
- (void) fscanf(file, "%" MAXSTRING_S "s%*[^\n]\n", string);
- if (strcmp(string, "gremlinfile")) {
- if (strcmp(string, "sungremlinfile")) {
- error("`%1' is not a gremlin file", gremlinfile);
- return (elist);
- }
- SUNFILE = TRUE;
- }
-
- (void) fscanf(file, "%d%lf%lf\n", &size, &x, &y);
- /* ignore orientation and file positioning point */
-
- done = FALSE;
- while (!done) {
- /* if (fscanf(file,"%" MAXSTRING_S "s\n", string) == EOF) */
- /* I changed the scanf format because the element */
- /* can have two words (e.g. CURVE SPLINE) */
- if (fscanf(file, "\n%" MAXSTRING_S "[^\n]%*[^\n]\n", string) == EOF) {
- error("`%1', error in file format", gremlinfile);
- return (elist);
- }
-
- type = DBGetType(string); /* interpret element type */
- if (type < 0) { /* no more data */
- done = TRUE;
- } else {
-#ifdef UW_FASTSCAN
- (void) xscanf(file, &x, &y); /* always one point */
-#else
- (void) fscanf(file, "%lf%lf\n", &x, &y); /* always one point */
-#endif /* UW_FASTSCAN */
- plist = PTInit(); /* NULL point list */
-
- /*
- * Files created on the SUN have point lists terminated by a line
- * containing only an asterik ('*'). Files created on the AED have
- * point lists terminated by the coordinate pair (-1.00 -1.00).
- */
- if (TEXT(type)) { /* read only first point for TEXT elements */
- nx = xorn(x, y);
- y = yorn(x, y);
- (void) PTMakePoint(nx, y, &plist);
- savebounds(nx, y);
-
-#ifdef UW_FASTSCAN
- while (xscanf(file, &x, &y));
-#else
- lastpoint = FALSE;
- do {
- fgets(string, MAXSTRING, file);
- if (string[0] == '*') { /* SUN gremlin file */
- lastpoint = TRUE;
- } else {
- (void) sscanf(string, "%lf%lf", &x, &y);
- if ((x == -1.00 && y == -1.00) && (!SUNFILE))
- lastpoint = TRUE;
- else {
- if (compatibility_flag)
- savebounds(xorn(x, y), yorn(x, y));
- }
- }
- } while (!lastpoint);
-#endif /* UW_FASTSCAN */
- } else { /* not TEXT element */
-#ifdef UW_FASTSCAN
- do {
- nx = xorn(x, y);
- y = yorn(x, y);
- (void) PTMakePoint(nx, y, &plist);
- savebounds(nx, y);
- } while (xscanf(file, &x, &y));
-#else
- lastpoint = FALSE;
- while (!lastpoint) {
- nx = xorn(x, y);
- y = yorn(x, y);
- (void) PTMakePoint(nx, y, &plist);
- savebounds(nx, y);
-
- fgets(string, MAXSTRING, file);
- if (string[0] == '*') { /* SUN gremlin file */
- lastpoint = TRUE;
- } else {
- (void) sscanf(string, "%lf%lf", &x, &y);
- if ((x == -1.00 && y == -1.00) && (!SUNFILE))
- lastpoint = TRUE;
- }
- }
-#endif /* UW_FASTSCAN */
- }
- (void) fscanf(file, "%d%d\n", &brush, &size);
- (void) fscanf(file, "%d", &len); /* text length */
- (void) getc(file); /* eat blank */
- txt = (char *) malloc((unsigned) len + 1);
- for (i = 0; i < len; ++i) { /* read text */
- int c = getc(file);
- if (c == EOF)
- break;
- txt[i] = c;
- }
- txt[len] = '\0';
- (void) DBCreateElt(type, plist, brush, size, txt, &elist);
- } /* end else */
- } /* end while not done */ ;
- return (elist);
-} /* end DBRead */
-
-
-/*
- * Interpret element type in string s.
- * Old file format consisted of integer element types.
- * New file format has literal names for element types.
- */
-int
-DBGetType(register char *s)
-{
- if (isdigit(s[0]) || (s[0] == '-')) /* old element format or EOF */
- return (atoi(s));
-
- switch (s[0]) {
- case 'P':
- return (POLYGON);
- case 'V':
- return (VECTOR);
- case 'A':
- return (ARC);
- case 'C':
- if (s[1] == 'U') {
- if (s[5] == '\n')
- return (CURVE);
- switch (s[7]) {
- case 'S':
- return(BSPLINE);
- case 'E':
- fprintf(stderr,
- "Warning: Bezier Curves will be printed as B-Splines\n");
- return(BSPLINE);
- default:
- return(CURVE);
- }
- }
- switch (s[4]) {
- case 'L':
- return (CENTLEFT);
- case 'C':
- return (CENTCENT);
- case 'R':
- return (CENTRIGHT);
- default:
- fatal("unknown element type");
- }
- case 'B':
- switch (s[3]) {
- case 'L':
- return (BOTLEFT);
- case 'C':
- return (BOTCENT);
- case 'R':
- return (BOTRIGHT);
- default:
- fatal("unknown element type");
- }
- case 'T':
- switch (s[3]) {
- case 'L':
- return (TOPLEFT);
- case 'C':
- return (TOPCENT);
- case 'R':
- return (TOPRIGHT);
- default:
- fatal("unknown element type");
- }
- default:
- fatal("unknown element type");
- }
-
- return 0; /* never reached */
-}
-
-#ifdef UW_FASTSCAN
-/*
- * Optimization hack added by solomon@crys.wisc.edu, 12/2/86.
- * A huge fraction of the time was spent reading floating point numbers from
- * the input file, but the numbers always have the format 'ddd.dd'. Thus
- * the following special-purpose version of fscanf.
- *
- * xscanf(f,xp,yp) does roughly what fscanf(f,"%f%f",xp,yp) does except:
- * -the next piece of input must be of the form
- * <space>* <digit>*'.'<digit>* <space>* <digit>*'.'<digit>*
- * -xscanf eats the character following the second number
- * -xscanf returns 0 for "end-of-data" indication, 1 otherwise, where
- * end-of-data is signalled by a '*' [in which case the rest of the
- * line is gobbled], or by '-1.00 -1.00' [but only if !SUNFILE].
- */
-int
-xscanf(FILE *f,
- double *xp,
- double *yp)
-{
- register int c, i, j, m, frac;
- int iscale = 1, jscale = 1; /* x = i/scale, y=j/jscale */
-
- while ((c = getc(f)) == ' ');
- if (c == '*') {
- while ((c = getc(f)) != '\n');
- return 0;
- }
- i = m = frac = 0;
- while (isdigit(c) || c == '.' || c == '-') {
- if (c == '-') {
- m++;
- c = getc(f);
- continue;
- }
- if (c == '.')
- frac = 1;
- else {
- if (frac)
- iscale *= 10;
- i = 10 * i + c - '0';
- }
- c = getc(f);
- }
- if (m)
- i = -i;
- *xp = (double) i / (double) iscale;
-
- while ((c = getc(f)) == ' ');
- j = m = frac = 0;
- while (isdigit(c) || c == '.' || c == '-') {
- if (c == '-') {
- m++;
- c = getc(f);
- continue;
- }
- if (c == '.')
- frac = 1;
- else {
- if (frac)
- jscale *= 10;
- j = 10 * j + c - '0';
- }
- c = getc(f);
- }
- if (m)
- j = -j;
- *yp = (double) j / (double) jscale;
- return (SUNFILE || i != -iscale || j != -jscale);
-}
-#endif /* UW_FASTSCAN */
-
-/* EOF */
diff --git a/contrib/groff/src/preproc/grn/hgraph.cpp b/contrib/groff/src/preproc/grn/hgraph.cpp
deleted file mode 100644
index 01208951f28f..000000000000
--- a/contrib/groff/src/preproc/grn/hgraph.cpp
+++ /dev/null
@@ -1,1048 +0,0 @@
-/* Last non-groff version: hgraph.c 1.14 (Berkeley) 84/11/27
- *
- * This file contains the graphics routines for converting gremlin pictures
- * to troff input.
- */
-
-#include "lib.h"
-
-#include "gprint.h"
-
-#define MAXVECT 40
-#define MAXPOINTS 200
-#define LINELENGTH 1
-#define PointsPerInterval 64
-#define pi 3.14159265358979324
-#define twopi (2.0 * pi)
-#define len(a, b) groff_hypot((double)(b.x-a.x), (double)(b.y-a.y))
-
-
-extern int dotshifter; /* for the length of dotted curves */
-
-extern int style[]; /* line and character styles */
-extern double thick[];
-extern char *tfont[];
-extern int tsize[];
-extern int stipple_index[]; /* stipple font index for stipples 0 - 16 */
-extern char *stipple; /* stipple type (cf or ug) */
-
-
-extern double troffscale; /* imports from main.c */
-extern double linethickness;
-extern int linmod;
-extern int lastx;
-extern int lasty;
-extern int lastyline;
-extern int ytop;
-extern int ybottom;
-extern int xleft;
-extern int xright;
-extern enum E {
- OUTLINE, FILL, BOTH
-} polyfill;
-
-extern double adj1;
-extern double adj2;
-extern double adj3;
-extern double adj4;
-extern int res;
-
-void HGSetFont(int font, int size);
-void HGPutText(int justify, POINT pnt, register char *string);
-void HGSetBrush(int mode);
-void tmove2(int px, int py);
-void doarc(POINT cp, POINT sp, int angle);
-void tmove(POINT * ptr);
-void cr();
-void drawwig(POINT * ptr, int type);
-void HGtline(int x1, int y1);
-void deltax(double x);
-void deltay(double y);
-void HGArc(register int cx, register int cy, int px, int py, int angle);
-void picurve(register int *x, register int *y, int npts);
-void HGCurve(int *x, int *y, int numpoints);
-void Paramaterize(int x[], int y[], double h[], int n);
-void PeriodicSpline(double h[], int z[],
- double dz[], double d2z[], double d3z[],
- int npoints);
-void NaturalEndSpline(double h[], int z[],
- double dz[], double d2z[], double d3z[],
- int npoints);
-
-
-
-/*----------------------------------------------------------------------------*
- | Routine: HGPrintElt (element_pointer, baseline)
- |
- | Results: Examines a picture element and calls the appropriate
- | routine(s) to print them according to their type. After the
- | picture is drawn, current position is (lastx, lasty).
- *----------------------------------------------------------------------------*/
-
-void
-HGPrintElt(ELT *element,
- int /* baseline */)
-{
- register POINT *p1;
- register POINT *p2;
- register int length;
- register int graylevel;
-
- if (!DBNullelt(element) && !Nullpoint((p1 = element->ptlist))) {
- /* p1 always has first point */
- if (TEXT(element->type)) {
- HGSetFont(element->brushf, element->size);
- switch (element->size) {
- case 1:
- p1->y += adj1;
- break;
- case 2:
- p1->y += adj2;
- break;
- case 3:
- p1->y += adj3;
- break;
- case 4:
- p1->y += adj4;
- break;
- default:
- break;
- }
- HGPutText(element->type, *p1, element->textpt);
- } else {
- if (element->brushf) /* if there is a brush, the */
- HGSetBrush(element->brushf); /* graphics need it set */
-
- switch (element->type) {
-
- case ARC:
- p2 = PTNextPoint(p1);
- tmove(p2);
- doarc(*p1, *p2, element->size);
- cr();
- break;
-
- case CURVE:
- length = 0; /* keep track of line length */
- drawwig(p1, CURVE);
- cr();
- break;
-
- case BSPLINE:
- length = 0; /* keep track of line length */
- drawwig(p1, BSPLINE);
- cr();
- break;
-
- case VECTOR:
- length = 0; /* keep track of line length so */
- tmove(p1); /* single lines don't get long */
- while (!Nullpoint((p1 = PTNextPoint(p1)))) {
- HGtline((int) (p1->x * troffscale),
- (int) (p1->y * troffscale));
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- } /* end while */
- cr();
- break;
-
- case POLYGON:
- {
- /* brushf = style of outline; size = color of fill:
- * on first pass (polyfill=FILL), do the interior using 'P'
- * unless size=0
- * on second pass (polyfill=OUTLINE), do the outline using a series
- * of vectors. It might make more sense to use \D'p ...',
- * but there is no uniform way to specify a 'fill character'
- * that prints as 'no fill' on all output devices (and
- * stipple fonts).
- * If polyfill=BOTH, just use the \D'p ...' command.
- */
- double firstx = p1->x;
- double firsty = p1->y;
-
- length = 0; /* keep track of line length so */
- /* single lines don't get long */
-
- if (polyfill == FILL || polyfill == BOTH) {
- /* do the interior */
- char command = (polyfill == BOTH && element->brushf) ? 'p' : 'P';
-
- /* include outline, if there is one and */
- /* the -p flag was set */
-
- /* switch based on what gremlin gives */
- switch (element->size) {
- case 1:
- graylevel = 1;
- break;
- case 3:
- graylevel = 2;
- break;
- case 12:
- graylevel = 3;
- break;
- case 14:
- graylevel = 4;
- break;
- case 16:
- graylevel = 5;
- break;
- case 19:
- graylevel = 6;
- break;
- case 21:
- graylevel = 7;
- break;
- case 23:
- graylevel = 8;
- break;
- default: /* who's giving something else? */
- graylevel = NSTIPPLES;
- break;
- }
- /* int graylevel = element->size; */
-
- if (graylevel < 0)
- break;
- if (graylevel > NSTIPPLES)
- graylevel = NSTIPPLES;
- printf("\\D'Fg %.3f'",
- double(1000 - stipple_index[graylevel]) / 1000.0);
- cr();
- tmove(p1);
- printf("\\D'%c", command);
-
- while (!Nullpoint((PTNextPoint(p1)))) {
- p1 = PTNextPoint(p1);
- deltax((double) p1->x);
- deltay((double) p1->y);
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- } /* end while */
-
- /* close polygon if not done so by user */
- if ((firstx != p1->x) || (firsty != p1->y)) {
- deltax((double) firstx);
- deltay((double) firsty);
- }
- putchar('\'');
- cr();
- break;
- }
- /* else polyfill == OUTLINE; only draw the outline */
- if (!(element->brushf))
- break;
- length = 0; /* keep track of line length */
- tmove(p1);
-
- while (!Nullpoint((PTNextPoint(p1)))) {
- p1 = PTNextPoint(p1);
- HGtline((int) (p1->x * troffscale),
- (int) (p1->y * troffscale));
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- } /* end while */
-
- /* close polygon if not done so by user */
- if ((firstx != p1->x) || (firsty != p1->y)) {
- HGtline((int) (firstx * troffscale),
- (int) (firsty * troffscale));
- }
- cr();
- break;
- } /* end case POLYGON */
- } /* end switch */
- } /* end else Text */
- } /* end if */
-} /* end PrintElt */
-
-
-/*----------------------------------------------------------------------------*
- | Routine: HGPutText (justification, position_point, string)
- |
- | Results: Given the justification, a point to position with, and a
- | string to put, HGPutText first sends the string into a
- | diversion, moves to the positioning point, then outputs
- | local vertical and horizontal motions as needed to justify
- | the text. After all motions are done, the diversion is
- | printed out.
- *----------------------------------------------------------------------------*/
-
-void
-HGPutText(int justify,
- POINT pnt,
- register char *string)
-{
- int savelasty = lasty; /* vertical motion for text is to be */
- /* ignored. Save current y here */
-
- printf(".nr g8 \\n(.d\n"); /* save current vertical position. */
- printf(".ds g9 \""); /* define string containing the text. */
- while (*string) { /* put out the string */
- if (*string == '\\' &&
- *(string + 1) == '\\') { /* one character at a */
- printf("\\\\\\"); /* time replacing // */
- string++; /* by //// to prevent */
- } /* interpretation at */
- printf("%c", *(string++)); /* printout time */
- }
- printf("\n");
-
- tmove(&pnt); /* move to positioning point */
-
- switch (justify) {
- /* local vertical motions */
- /* (the numbers here are used to be somewhat compatible with gprint) */
- case CENTLEFT:
- case CENTCENT:
- case CENTRIGHT:
- printf("\\v'0.85n'"); /* down half */
- break;
-
- case TOPLEFT:
- case TOPCENT:
- case TOPRIGHT:
- printf("\\v'1.7n'"); /* down whole */
- }
-
- switch (justify) {
- /* local horizontal motions */
- case BOTCENT:
- case CENTCENT:
- case TOPCENT:
- printf("\\h'-\\w'\\*(g9'u/2u'"); /* back half */
- break;
-
- case BOTRIGHT:
- case CENTRIGHT:
- case TOPRIGHT:
- printf("\\h'-\\w'\\*(g9'u'"); /* back whole */
- }
-
- printf("\\&\\*(g9\n"); /* now print the text. */
- printf(".sp |\\n(g8u\n"); /* restore vertical position */
- lasty = savelasty; /* vertical position restored to where it */
- lastx = xleft; /* was before text, also horizontal is at */
- /* left */
-} /* end HGPutText */
-
-
-/*----------------------------------------------------------------------------*
- | Routine: doarc (center_point, start_point, angle)
- |
- | Results: Produces either drawarc command or a drawcircle command
- | depending on the angle needed to draw through.
- *----------------------------------------------------------------------------*/
-
-void
-doarc(POINT cp,
- POINT sp,
- int angle)
-{
- if (angle) /* arc with angle */
- HGArc((int) (cp.x * troffscale), (int) (cp.y * troffscale),
- (int) (sp.x * troffscale), (int) (sp.y * troffscale), angle);
- else /* a full circle (angle == 0) */
- HGArc((int) (cp.x * troffscale), (int) (cp.y * troffscale),
- (int) (sp.x * troffscale), (int) (sp.y * troffscale), 0);
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: HGSetFont (font_number, Point_size)
- |
- | Results: ALWAYS outputs a .ft and .ps directive to troff. This is
- | done because someone may change stuff inside a text string.
- | Changes thickness back to default thickness. Default
- | thickness depends on font and pointsize.
- *----------------------------------------------------------------------------*/
-
-void
-HGSetFont(int font,
- int size)
-{
- printf(".ft %s\n"
- ".ps %d\n", tfont[font - 1], tsize[size - 1]);
- linethickness = DEFTHICK;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: HGSetBrush (line_mode)
- |
- | Results: Generates the troff commands to set up the line width and
- | style of subsequent lines. Does nothing if no change is
- | needed.
- |
- | Side Efct: Sets `linmode' and `linethicknes'.
- *----------------------------------------------------------------------------*/
-
-void
-HGSetBrush(int mode)
-{
- register int printed = 0;
-
- if (linmod != style[--mode]) {
- /* Groff doesn't understand \Ds, so we take it out */
- /* printf ("\\D's %du'", linmod = style[mode]); */
- linmod = style[mode];
- printed = 1;
- }
- if (linethickness != thick[mode]) {
- linethickness = thick[mode];
- printf("\\h'-%.2fp'\\D't %.2fp'", linethickness, linethickness);
- printed = 1;
- }
- if (printed)
- cr();
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: deltax (x_destination)
- |
- | Results: Scales and outputs a number for delta x (with a leading
- | space) given `lastx' and x_destination.
- |
- | Side Efct: Resets `lastx' to x_destination.
- *----------------------------------------------------------------------------*/
-
-void
-deltax(double x)
-{
- register int ix = (int) (x * troffscale);
-
- printf(" %du", ix - lastx);
- lastx = ix;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: deltay (y_destination)
- |
- | Results: Scales and outputs a number for delta y (with a leading
- | space) given `lastyline' and y_destination.
- |
- | Side Efct: Resets `lastyline' to y_destination. Since `line' vertical
- | motions don't affect `page' ones, `lasty' isn't updated.
- *----------------------------------------------------------------------------*/
-
-void
-deltay(double y)
-{
- register int iy = (int) (y * troffscale);
-
- printf(" %du", iy - lastyline);
- lastyline = iy;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: tmove2 (px, py)
- |
- | Results: Produces horizontal and vertical moves for troff given the
- | pair of points to move to and knowing the current position.
- | Also puts out a horizontal move to start the line. This is
- | a variation without the .sp command.
- *----------------------------------------------------------------------------*/
-
-void
-tmove2(int px,
- int py)
-{
- register int dx;
- register int dy;
-
- if ((dy = py - lasty)) {
- printf("\\v'%du'", dy);
- }
- lastyline = lasty = py; /* lasty is always set to current */
- if ((dx = px - lastx)) {
- printf("\\h'%du'", dx);
- lastx = px;
- }
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: tmove (point_pointer)
- |
- | Results: Produces horizontal and vertical moves for troff given the
- | pointer of a point to move to and knowing the current
- | position. Also puts out a horizontal move to start the
- | line.
- *----------------------------------------------------------------------------*/
-
-void
-tmove(POINT * ptr)
-{
- register int ix = (int) (ptr->x * troffscale);
- register int iy = (int) (ptr->y * troffscale);
- register int dx;
- register int dy;
-
- if ((dy = iy - lasty)) {
- printf(".sp %du\n", dy);
- }
- lastyline = lasty = iy; /* lasty is always set to current */
- if ((dx = ix - lastx)) {
- printf("\\h'%du'", dx);
- lastx = ix;
- }
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: cr ( )
- |
- | Results: Ends off an input line. `.sp -1' is also added to counteract
- | the vertical move done at the end of text lines.
- |
- | Side Efct: Sets `lastx' to `xleft' for troff's return to left margin.
- *----------------------------------------------------------------------------*/
-
-void
-cr()
-{
- printf("\n.sp -1\n");
- lastx = xleft;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: line ( )
- |
- | Results: Draws a single solid line to (x,y).
- *----------------------------------------------------------------------------*/
-
-void
-line(int px,
- int py)
-{
- printf("\\D'l");
- printf(" %du", px - lastx);
- printf(" %du'", py - lastyline);
- lastx = px;
- lastyline = lasty = py;
-}
-
-
-/*----------------------------------------------------------------------------
- | Routine: drawwig (ptr, type)
- |
- | Results: The point sequence found in the structure pointed by ptr is
- | placed in integer arrays for further manipulation by the
- | existing routing. With the corresponding type parameter,
- | either picurve or HGCurve are called.
- *----------------------------------------------------------------------------*/
-
-void
-drawwig(POINT * ptr,
- int type)
-{
- register int npts; /* point list index */
- int x[MAXPOINTS], y[MAXPOINTS]; /* point list */
-
- for (npts = 1; !Nullpoint(ptr); ptr = PTNextPoint(ptr), npts++) {
- x[npts] = (int) (ptr->x * troffscale);
- y[npts] = (int) (ptr->y * troffscale);
- }
- if (--npts) {
- if (type == CURVE) /* Use the 2 different types of curves */
- HGCurve(&x[0], &y[0], npts);
- else
- picurve(&x[0], &y[0], npts);
- }
-}
-
-
-/*----------------------------------------------------------------------------
- | Routine: HGArc (xcenter, ycenter, xstart, ystart, angle)
- |
- | Results: This routine plots an arc centered about (cx, cy) counter
- | clockwise starting from the point (px, py) through `angle'
- | degrees. If angle is 0, a full circle is drawn. It does so
- | by creating a draw-path around the arc whose density of
- | points depends on the size of the arc.
- *----------------------------------------------------------------------------*/
-
-void
-HGArc(register int cx,
- register int cy,
- int px,
- int py,
- int angle)
-{
- double xs, ys, resolution, fullcircle;
- int m;
- register int mask;
- register int extent;
- register int nx;
- register int ny;
- register int length;
- register double epsilon;
-
- xs = px - cx;
- ys = py - cy;
-
- length = 0;
-
- resolution = (1.0 + groff_hypot(xs, ys) / res) * PointsPerInterval;
- /* mask = (1 << (int) log10(resolution + 1.0)) - 1; */
- (void) frexp(resolution, &m); /* A bit more elegant than log10 */
- for (mask = 1; mask < m; mask = mask << 1);
- mask -= 1;
-
- epsilon = 1.0 / resolution;
- fullcircle = (2.0 * pi) * resolution;
- if (angle == 0)
- extent = (int) fullcircle;
- else
- extent = (int) (angle * fullcircle / 360.0);
-
- HGtline(px, py);
- while (--extent >= 0) {
- xs += epsilon * ys;
- nx = cx + (int) (xs + 0.5);
- ys -= epsilon * xs;
- ny = cy + (int) (ys + 0.5);
- if (!(extent & mask)) {
- HGtline(nx, ny); /* put out a point on circle */
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- }
- } /* end for */
-} /* end HGArc */
-
-
-/*----------------------------------------------------------------------------
- | Routine: picurve (xpoints, ypoints, num_of_points)
- |
- | Results: Draws a curve delimited by (not through) the line segments
- | traced by (xpoints, ypoints) point list. This is the `Pic'
- | style curve.
- *----------------------------------------------------------------------------*/
-
-void
-picurve(register int *x,
- register int *y,
- int npts)
-{
- register int nseg; /* effective resolution for each curve */
- register int xp; /* current point (and temporary) */
- register int yp;
- int pxp, pyp; /* previous point (to make lines from) */
- int i; /* inner curve segment traverser */
- int length = 0;
- double w; /* position factor */
- double t1, t2, t3; /* calculation temps */
-
- if (x[1] == x[npts] && y[1] == y[npts]) {
- x[0] = x[npts - 1]; /* if the lines' ends meet, make */
- y[0] = y[npts - 1]; /* sure the curve meets */
- x[npts + 1] = x[2];
- y[npts + 1] = y[2];
- } else { /* otherwise, make the ends of the */
- x[0] = x[1]; /* curve touch the ending points of */
- y[0] = y[1]; /* the line segments */
- x[npts + 1] = x[npts];
- y[npts + 1] = y[npts];
- }
-
- pxp = (x[0] + x[1]) / 2; /* make the last point pointers */
- pyp = (y[0] + y[1]) / 2; /* point to the start of the 1st line */
- tmove2(pxp, pyp);
-
- for (; npts--; x++, y++) { /* traverse the line segments */
- xp = x[0] - x[1];
- yp = y[0] - y[1];
- nseg = (int) groff_hypot((double) xp, (double) yp);
- xp = x[1] - x[2];
- yp = y[1] - y[2];
- /* `nseg' is the number of line */
- /* segments that will be drawn for */
- /* each curve segment. */
- nseg = (int) ((double) (nseg + (int) groff_hypot((double) xp, (double) yp)) /
- res * PointsPerInterval);
-
- for (i = 1; i < nseg; i++) {
- w = (double) i / (double) nseg;
- t1 = w * w;
- t3 = t1 + 1.0 - (w + w);
- t2 = 2.0 - (t3 + t1);
- xp = (((int) (t1 * x[2] + t2 * x[1] + t3 * x[0])) + 1) / 2;
- yp = (((int) (t1 * y[2] + t2 * y[1] + t3 * y[0])) + 1) / 2;
-
- HGtline(xp, yp);
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- }
- }
-}
-
-
-/*----------------------------------------------------------------------------
- | Routine: HGCurve(xpoints, ypoints, num_points)
- |
- | Results: This routine generates a smooth curve through a set of
- | points. The method used is the parametric spline curve on
- | unit knot mesh described in `Spline Curve Techniques' by
- | Patrick Baudelaire, Robert Flegal, and Robert Sproull --
- | Xerox Parc.
- *----------------------------------------------------------------------------*/
-
-void
-HGCurve(int *x,
- int *y,
- int numpoints)
-{
- double h[MAXPOINTS], dx[MAXPOINTS], dy[MAXPOINTS];
- double d2x[MAXPOINTS], d2y[MAXPOINTS], d3x[MAXPOINTS], d3y[MAXPOINTS];
- double t, t2, t3;
- register int j;
- register int k;
- register int nx;
- register int ny;
- int lx, ly;
- int length = 0;
-
- lx = x[1];
- ly = y[1];
- tmove2(lx, ly);
-
- /*
- * Solve for derivatives of the curve at each point separately for x and y
- * (parametric).
- */
- Paramaterize(x, y, h, numpoints);
-
- /* closed curve */
- if ((x[1] == x[numpoints]) && (y[1] == y[numpoints])) {
- PeriodicSpline(h, x, dx, d2x, d3x, numpoints);
- PeriodicSpline(h, y, dy, d2y, d3y, numpoints);
- } else {
- NaturalEndSpline(h, x, dx, d2x, d3x, numpoints);
- NaturalEndSpline(h, y, dy, d2y, d3y, numpoints);
- }
-
- /*
- * generate the curve using the above information and PointsPerInterval
- * vectors between each specified knot.
- */
-
- for (j = 1; j < numpoints; ++j) {
- if ((x[j] == x[j + 1]) && (y[j] == y[j + 1]))
- continue;
- for (k = 0; k <= PointsPerInterval; ++k) {
- t = (double) k *h[j] / (double) PointsPerInterval;
- t2 = t * t;
- t3 = t * t * t;
- nx = x[j] + (int) (t * dx[j] + t2 * d2x[j] / 2 + t3 * d3x[j] / 6);
- ny = y[j] + (int) (t * dy[j] + t2 * d2y[j] / 2 + t3 * d3y[j] / 6);
- HGtline(nx, ny);
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- } /* end for k */
- } /* end for j */
-} /* end HGCurve */
-
-
-/*----------------------------------------------------------------------------
- | Routine: Paramaterize (xpoints, ypoints, hparams, num_points)
- |
- | Results: This routine calculates parameteric values for use in
- | calculating curves. The parametric values are returned
- | in the array h. The values are an approximation of
- | cumulative arc lengths of the curve (uses cord length).
- | For additional information, see paper cited below.
- *----------------------------------------------------------------------------*/
-
-void
-Paramaterize(int x[],
- int y[],
- double h[],
- int n)
-{
- register int dx;
- register int dy;
- register int i;
- register int j;
- double u[MAXPOINTS];
-
- for (i = 1; i <= n; ++i) {
- u[i] = 0;
- for (j = 1; j < i; j++) {
- dx = x[j + 1] - x[j];
- dy = y[j + 1] - y[j];
- /* Here was overflowing, so I changed it. */
- /* u[i] += sqrt ((double) (dx * dx + dy * dy)); */
- u[i] += groff_hypot((double) dx, (double) dy);
- }
- }
- for (i = 1; i < n; ++i)
- h[i] = u[i + 1] - u[i];
-} /* end Paramaterize */
-
-
-/*----------------------------------------------------------------------------
- | Routine: PeriodicSpline (h, z, dz, d2z, d3z, npoints)
- |
- | Results: This routine solves for the cubic polynomial to fit a spline
- | curve to the the points specified by the list of values.
- | The Curve generated is periodic. The algorithms for this
- | curve are from the `Spline Curve Techniques' paper cited
- | above.
- *----------------------------------------------------------------------------*/
-
-void
-PeriodicSpline(double h[], /* paramaterization */
- int z[], /* point list */
- double dz[], /* to return the 1st derivative */
- double d2z[], /* 2nd derivative */
- double d3z[], /* 3rd derivative */
- int npoints) /* number of valid points */
-{
- double d[MAXPOINTS];
- double deltaz[MAXPOINTS], a[MAXPOINTS], b[MAXPOINTS];
- double c[MAXPOINTS], r[MAXPOINTS], s[MAXPOINTS];
- int i;
-
- /* step 1 */
- for (i = 1; i < npoints; ++i) {
- deltaz[i] = h[i] ? ((double) (z[i + 1] - z[i])) / h[i] : 0;
- }
- h[0] = h[npoints - 1];
- deltaz[0] = deltaz[npoints - 1];
-
- /* step 2 */
- for (i = 1; i < npoints - 1; ++i) {
- d[i] = deltaz[i + 1] - deltaz[i];
- }
- d[0] = deltaz[1] - deltaz[0];
-
- /* step 3a */
- a[1] = 2 * (h[0] + h[1]);
- b[1] = d[0];
- c[1] = h[0];
- for (i = 2; i < npoints - 1; ++i) {
- a[i] = 2 * (h[i - 1] + h[i]) -
- pow((double) h[i - 1], (double) 2.0) / a[i - 1];
- b[i] = d[i - 1] - h[i - 1] * b[i - 1] / a[i - 1];
- c[i] = -h[i - 1] * c[i - 1] / a[i - 1];
- }
-
- /* step 3b */
- r[npoints - 1] = 1;
- s[npoints - 1] = 0;
- for (i = npoints - 2; i > 0; --i) {
- r[i] = -(h[i] * r[i + 1] + c[i]) / a[i];
- s[i] = (6 * b[i] - h[i] * s[i + 1]) / a[i];
- }
-
- /* step 4 */
- d2z[npoints - 1] = (6 * d[npoints - 2] - h[0] * s[1]
- - h[npoints - 1] * s[npoints - 2])
- / (h[0] * r[1] + h[npoints - 1] * r[npoints - 2]
- + 2 * (h[npoints - 2] + h[0]));
- for (i = 1; i < npoints - 1; ++i) {
- d2z[i] = r[i] * d2z[npoints - 1] + s[i];
- }
- d2z[npoints] = d2z[1];
-
- /* step 5 */
- for (i = 1; i < npoints; ++i) {
- dz[i] = deltaz[i] - h[i] * (2 * d2z[i] + d2z[i + 1]) / 6;
- d3z[i] = h[i] ? (d2z[i + 1] - d2z[i]) / h[i] : 0;
- }
-} /* end PeriodicSpline */
-
-
-/*----------------------------------------------------------------------------
- | Routine: NaturalEndSpline (h, z, dz, d2z, d3z, npoints)
- |
- | Results: This routine solves for the cubic polynomial to fit a spline
- | curve the the points specified by the list of values. The
- | alogrithms for this curve are from the `Spline Curve
- | Techniques' paper cited above.
- *----------------------------------------------------------------------------*/
-
-void
-NaturalEndSpline(double h[], /* parameterization */
- int z[], /* Point list */
- double dz[], /* to return the 1st derivative */
- double d2z[], /* 2nd derivative */
- double d3z[], /* 3rd derivative */
- int npoints) /* number of valid points */
-{
- double d[MAXPOINTS];
- double deltaz[MAXPOINTS], a[MAXPOINTS], b[MAXPOINTS];
- int i;
-
- /* step 1 */
- for (i = 1; i < npoints; ++i) {
- deltaz[i] = h[i] ? ((double) (z[i + 1] - z[i])) / h[i] : 0;
- }
- deltaz[0] = deltaz[npoints - 1];
-
- /* step 2 */
- for (i = 1; i < npoints - 1; ++i) {
- d[i] = deltaz[i + 1] - deltaz[i];
- }
- d[0] = deltaz[1] - deltaz[0];
-
- /* step 3 */
- a[0] = 2 * (h[2] + h[1]);
- b[0] = d[1];
- for (i = 1; i < npoints - 2; ++i) {
- a[i] = 2 * (h[i + 1] + h[i + 2]) -
- pow((double) h[i + 1], (double) 2.0) / a[i - 1];
- b[i] = d[i + 1] - h[i + 1] * b[i - 1] / a[i - 1];
- }
-
- /* step 4 */
- d2z[npoints] = d2z[1] = 0;
- for (i = npoints - 1; i > 1; --i) {
- d2z[i] = (6 * b[i - 2] - h[i] * d2z[i + 1]) / a[i - 2];
- }
-
- /* step 5 */
- for (i = 1; i < npoints; ++i) {
- dz[i] = deltaz[i] - h[i] * (2 * d2z[i] + d2z[i + 1]) / 6;
- d3z[i] = h[i] ? (d2z[i + 1] - d2z[i]) / h[i] : 0;
- }
-} /* end NaturalEndSpline */
-
-
-/*----------------------------------------------------------------------------*
- | Routine: change (x_position, y_position, visible_flag)
- |
- | Results: As HGtline passes from the invisible to visible (or vice
- | versa) portion of a line, change is called to either draw
- | the line, or initialize the beginning of the next one.
- | Change calls line to draw segments if visible_flag is set
- | (which means we're leaving a visible area).
- *----------------------------------------------------------------------------*/
-
-void
-change(register int x,
- register int y,
- register int vis)
-{
- static int length = 0;
-
- if (vis) { /* leaving a visible area, draw it. */
- line(x, y);
- if (length++ > LINELENGTH) {
- length = 0;
- printf("\\\n");
- }
- } else { /* otherwise, we're entering one, remember */
- /* beginning */
- tmove2(x, y);
- }
-}
-
-
-/*----------------------------------------------------------------------------
- | Routine: HGtline (xstart, ystart, xend, yend)
- |
- | Results: Draws a line from current position to (x1,y1) using line(x1,
- | y1) to place individual segments of dotted or dashed lines.
- *----------------------------------------------------------------------------*/
-
-void
-HGtline(int x_1,
- int y_1)
-{
- register int x_0 = lastx;
- register int y_0 = lasty;
- register int dx;
- register int dy;
- register int oldcoord;
- register int res1;
- register int visible;
- register int res2;
- register int xinc;
- register int yinc;
- register int dotcounter;
-
- if (linmod == SOLID) {
- line(x_1, y_1);
- return;
- }
-
- /* for handling different resolutions */
- dotcounter = linmod << dotshifter;
-
- xinc = 1;
- yinc = 1;
- if ((dx = x_1 - x_0) < 0) {
- xinc = -xinc;
- dx = -dx;
- }
- if ((dy = y_1 - y_0) < 0) {
- yinc = -yinc;
- dy = -dy;
- }
- res1 = 0;
- res2 = 0;
- visible = 0;
- if (dx >= dy) {
- oldcoord = y_0;
- while (x_0 != x_1) {
- if ((x_0 & dotcounter) && !visible) {
- change(x_0, y_0, 0);
- visible = 1;
- } else if (visible && !(x_0 & dotcounter)) {
- change(x_0 - xinc, oldcoord, 1);
- visible = 0;
- }
- if (res1 > res2) {
- oldcoord = y_0;
- res2 += dx - res1;
- res1 = 0;
- y_0 += yinc;
- }
- res1 += dy;
- x_0 += xinc;
- }
- } else {
- oldcoord = x_0;
- while (y_0 != y_1) {
- if ((y_0 & dotcounter) && !visible) {
- change(x_0, y_0, 0);
- visible = 1;
- } else if (visible && !(y_0 & dotcounter)) {
- change(oldcoord, y_0 - yinc, 1);
- visible = 0;
- }
- if (res1 > res2) {
- oldcoord = x_0;
- res2 += dy - res1;
- res1 = 0;
- x_0 += xinc;
- }
- res1 += dx;
- y_0 += yinc;
- }
- }
- if (visible)
- change(x_1, y_1, 1);
- else
- change(x_1, y_1, 0);
-}
-
-/* EOF */
diff --git a/contrib/groff/src/preproc/grn/hpoint.cpp b/contrib/groff/src/preproc/grn/hpoint.cpp
deleted file mode 100644
index fa24dca7fd47..000000000000
--- a/contrib/groff/src/preproc/grn/hpoint.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Last non-groff version: hpoint.c 1.1 84/10/08 */
-
-/*
- * This file contains routines for manipulating the point data structures
- * for the gremlin picture editor.
- */
-
-#include <stdlib.h>
-#include "gprint.h"
-
-
-/*
- * Return pointer to empty point list.
- */
-POINT *
-PTInit()
-{
- return ((POINT *) NULL);
-}
-
-
-/*
- * This routine creates a new point with coordinates x and y and links it
- * into the pointlist.
- */
-POINT *
-PTMakePoint(double x,
- double y,
- POINT **pplist)
-{
- register POINT *pt;
-
- if (Nullpoint(pt = *pplist)) { /* empty list */
- *pplist = (POINT *) malloc(sizeof(POINT));
- pt = *pplist;
- } else {
- while (!Nullpoint(pt->nextpt))
- pt = pt->nextpt;
- pt->nextpt = (POINT *) malloc(sizeof(POINT));
- pt = pt->nextpt;
- }
-
- pt->x = x;
- pt->y = y;
- pt->nextpt = PTInit();
- return (pt);
-} /* end PTMakePoint */
-
-/* EOF */
diff --git a/contrib/groff/src/preproc/grn/main.cpp b/contrib/groff/src/preproc/grn/main.cpp
deleted file mode 100644
index c939647f2c9b..000000000000
--- a/contrib/groff/src/preproc/grn/main.cpp
+++ /dev/null
@@ -1,907 +0,0 @@
-/* Last non-groff version: main.c 1.23 (Berkeley) 85/08/05
- *
- * Adapted to GNU troff by Daniel Senderowicz 99/12/29.
- *
- * Further refinements by Werner Lemberg 00/02/20.
- *
- *
- * This file contains the main and file system dependent routines for
- * processing gremlin files into troff input. The program watches input go
- * by to standard output, only interpreting things between .GS and .GE
- * lines. Default values (font, size, scale, thickness) may be overridden
- * with a `default' command and are further overridden by commands in the
- * input.
- *
- * Inside the GS and GE, commands are accepted to reconfigure the picture.
- * At most one command may reside on each line, and each command is followed
- * by a parameter separated by white space. The commands are as follows,
- * and may be abbreviated down to one character (with exception of `scale'
- * and `stipple' down to "sc" and "st") and may be upper or lower case.
- *
- * default - Make all settings in the current
- * .GS/.GE the global defaults. Height,
- * width and file are NOT saved.
- * 1, 2, 3, 4 - Set size 1, 2, 3, or 4 (followed by an
- * integer point size).
- * roman, italics, bold, special - Set gremlin's fonts to any other troff
- * font (one or two characters).
- * stipple, l - Use a stipple font for polygons. Arg
- * is troff font name. No Default. Can
- * use only one stipple font per picture.
- * (See below for stipple font index.)
- * scale, x - Scale is IN ADDITION to the global
- * scale factor from the default.
- * pointscale - Turn on scaling point sizes to match
- * `scale' commands. (Optional operand
- * `off' to turn it off.)
- * narrow, medium, thick - Set widths of lines.
- * file - Set the file name to read the gremlin
- * picture from. If the file isn't in
- * the current directory, the gremlin
- * library is tried.
- * width, height - These two commands override any
- * scaling factor that is in effect, and
- * forces the picture to fit into either
- * the height or width specified,
- * whichever makes the picture smaller.
- * The operand for these two commands is
- * a floating-point number in units of
- * inches.
- * l<nn> (integer <nn>) - Set association between stipple <nn>
- * and a stipple `character'. <nn> must
- * be in the range 0 to NSTIPPLES (16)
- * inclusive. The integer operand is an
- * index in the stipple font selected.
- * Valid cf (cifplot) indices are 1-32
- * (although 24 is not defined), valid ug
- * (unigrafix) indices are 1-14, and
- * valid gs (gray scale) indices are
- * 0-16. Nonetheless, any number between
- * 0 and 255 is accepted since new
- * stipple fonts may be added. An
- * integer operand is required.
- *
- * Troff number registers used: g1 through g9. g1 is the width of the
- * picture, and g2 is the height. g3, and g4, save information, g8 and g9
- * are used for text processing and g5-g7 are reserved.
- */
-
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <stdlib.h>
-#include "gprint.h"
-
-#include "device.h"
-#include "font.h"
-#include "searchpath.h"
-#include "macropath.h"
-
-#include "errarg.h"
-#include "error.h"
-#include "defs.h"
-
-extern "C" const char *Version_string;
-
-/* database imports */
-
-extern void HGPrintElt(ELT *element, int baseline);
-extern ELT *DBInit();
-extern ELT *DBRead(register FILE *file);
-extern POINT *PTInit();
-extern POINT *PTMakePoint(double x, double y, POINT **pplist);
-
-
-#define SUN_SCALEFACTOR 0.70
-
-/* #define DEFSTIPPLE "gs" */
-#define DEFSTIPPLE "cf"
-
-#define MAXINLINE 100 /* input line length */
-
-#define SCREENtoINCH 0.02 /* scaling factor, screen to inches */
-
-#define BIG 999999999999.0 /* unweildly large floating number */
-
-
-static char sccsid[] = "@(#) (Berkeley) 8/5/85, 12/28/99";
-
-int res; /* the printer's resolution goes here */
-
-int dotshifter; /* for the length of dotted curves */
-
-double linethickness; /* brush styles */
-int linmod;
-int lastx; /* point registers for printing elements */
-int lasty;
-int lastyline; /* A line's vertical position is NOT the */
- /* same after that line is over, so for a */
- /* line of drawing commands, vertical */
- /* spacing is kept in lastyline */
-
-/* These are the default fonts, sizes, line styles, */
-/* and thicknesses. They can be modified from a */
-/* `default' command and are reset each time the */
-/* start of a picture (.GS) is found. */
-
-const char *deffont[] =
-{"R", "I", "B", "S"};
-int defsize[] =
-{10, 16, 24, 36};
-/* #define BASE_THICKNESS 1.0 */
-#define BASE_THICKNESS 0.15
-double defthick[STYLES] =
-{1 * BASE_THICKNESS,
- 1 * BASE_THICKNESS,
- 5 * BASE_THICKNESS,
- 1 * BASE_THICKNESS,
- 1 * BASE_THICKNESS,
- 3 * BASE_THICKNESS};
-
-/* int cf_stipple_index[NSTIPPLES + 1] = */
-/* {0, 1, 3, 12, 14, 16, 19, 21, 23}; */
-/* a logarithmic scale looks better than a linear one for the gray shades */
-/* */
-/* int other_stipple_index[NSTIPPLES + 1] = */
-/* {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; */
-
-int cf_stipple_index[NSTIPPLES + 1] =
-{0, 18, 32, 56, 100, 178, 316, 562, 1000}; /* only 1-8 used */
-int other_stipple_index[NSTIPPLES + 1] =
-{0, 62, 125, 187, 250, 312, 375, 437, 500,
- 562, 625, 687, 750, 812, 875, 937, 1000};
-
-/* int *defstipple_index = other_stipple_index; */
-int *defstipple_index = cf_stipple_index;
-
-int style[STYLES] =
-{DOTTED, DOTDASHED, SOLID, DASHED, SOLID, SOLID};
-double scale = 1.0; /* no scaling, default */
-int defpoint = 0; /* flag for pointsize scaling */
-char *defstipple = (char *) 0;
-enum E {
- OUTLINE, FILL, BOTH
-} polyfill;
-
-/* flag to controll filling of polygons */
-
-double adj1 = 0.0;
-double adj2 = 0.0;
-double adj3 = 0.0;
-double adj4 = 0.0;
-
-double thick[STYLES]; /* thicknesses set by defaults, then by */
- /* commands */
-char *tfont[FONTS]; /* fonts originally set to deffont values, */
- /* then */
-int tsize[SIZES]; /* optionally changed by commands inside */
- /* grn */
-int stipple_index[NSTIPPLES + 1]; /* stipple font file indices */
-char *stipple;
-
-double xscale; /* scaling factor from individual pictures */
-double troffscale; /* scaling factor at output time */
-
-double width; /* user-request maximum width for picture */
- /* (in inches) */
-double height; /* user-request height */
-int pointscale; /* flag for pointsize scaling */
-int setdefault; /* flag for a .GS/.GE to remember all */
- /* settings */
-int sflag; /* -s flag: sort order (do polyfill first) */
-
-double toppoint; /* remember the picture */
-double bottompoint; /* bounds in these variables */
-double leftpoint;
-double rightpoint;
-
-int ytop; /* these are integer versions of the above */
-int ybottom; /* so not to convert each time they're used */
-int xleft;
-int xright;
-
-int linenum = 0; /* line number of input file */
-char inputline[MAXINLINE]; /* spot to filter through the file */
-char *c1 = inputline; /* c1, c2, and c3 will be used to */
-char *c2 = inputline + 1; /* hunt for lines that begin with */
-char *c3 = inputline + 2; /* ".GS" by looking individually */
-char *c4 = inputline + 3; /* needed for compatibility mode */
-char GScommand[MAXINLINE]; /* put user's ".GS" command line here */
-char gremlinfile[MAXINLINE]; /* filename to use for a picture */
-int SUNFILE = FALSE; /* TRUE if SUN gremlin file */
-int compatibility_flag = FALSE; /* TRUE if in compatibility mode */
-
-
-void getres();
-int doinput(FILE *fp);
-void conv(register FILE *fp, int baseline);
-void savestate();
-int has_polygon(register ELT *elist);
-void interpret(char *line);
-
-
-void
-usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [ -vCs ] [ -M dir ] [ -F dir ] [ -T dev ] [ file ]\n",
- program_name);
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: main (argument_count, argument_pointer)
- |
- | Results: Parses the command line, accumulating input file names, then
- | reads the inputs, passing it directly to output until a `.GS'
- | line is read. Main then passes control to `conv' to do the
- | gremlin file conversions.
- *----------------------------------------------------------------------------*/
-
-int
-main(int argc,
- char **argv)
-{
- setlocale(LC_NUMERIC, "C");
- program_name = argv[0];
- register FILE *fp;
- register int k;
- register char c;
- register int gfil = 0;
- char *file[50];
- char *operand(int *argcp, char ***argvp);
-
- while (--argc) {
- if (**++argv != '-')
- file[gfil++] = *argv;
- else
- switch (c = (*argv)[1]) {
-
- case 0:
- file[gfil++] = NULL;
- break;
-
- case 'C': /* compatibility mode */
- compatibility_flag = TRUE;
- break;
-
- case 'F': /* font path to find DESC */
- font::command_line_font_dir(operand(&argc, &argv));
- break;
-
- case 'T': /* final output typesetter name */
- device = operand(&argc, &argv);
- break;
-
- case 'M': /* set library directory */
- macro_path.command_line_dir(operand(&argc, &argv));
- break;
-
- case 's': /* preserve order of elements */
- sflag = 1;
- break;
-
- case '-':
- if (strcmp(*argv,"--version")==0) {
- case 'v':
- printf("GNU grn (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- if (strcmp(*argv,"--help")==0) {
- case '?':
- usage(stdout);
- exit(0);
- break;
- }
- // fallthrough
- default:
- error("unknown switch: %1", c);
- usage(stderr);
- exit(1);
- }
- }
-
- getres(); /* set the resolution for an output device */
-
- if (gfil == 0) { /* no filename, use standard input */
- file[0] = NULL;
- gfil++;
- }
-
- for (k = 0; k < gfil; k++) {
- if (file[k] != NULL) {
- if ((fp = fopen(file[k], "r")) == NULL)
- fatal("can't open %1", file[k]);
- } else
- fp = stdin;
-
- while (doinput(fp)) {
- if (*c1 == '.' && *c2 == 'G' && *c3 == 'S') {
- if (compatibility_flag ||
- *c4 == '\n' || *c4 == ' ' || *c4 == '\0')
- conv(fp, linenum);
- else
- fputs(inputline, stdout);
- } else
- fputs(inputline, stdout);
- }
- }
-
- return 0;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: char * operand (& argc, & argv)
- |
- | Results: Returns address of the operand given with a command-line
- | option. It uses either `-Xoperand' or `-X operand', whichever
- | is present. The program is terminated if no option is
- | present.
- |
- | Side Efct: argc and argv are updated as necessary.
- *----------------------------------------------------------------------------*/
-
-char *
-operand(int *argcp,
- char ***argvp)
-{
- if ((**argvp)[2])
- return (**argvp + 2); /* operand immediately follows */
- if ((--*argcp) <= 0) { /* no operand */
- error("command-line option operand missing.");
- exit(8);
- }
- return (*(++(*argvp))); /* operand is next word */
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: getres ()
- |
- | Results: Sets `res' to the resolution of the output device.
- *----------------------------------------------------------------------------*/
-
-void
-getres()
-{
- int linepiece;
-
- if (!font::load_desc())
- fatal("sorry, I can't continue");
-
- res = font::res;
-
- /* Correct the brush thicknesses based on res */
- /* if (res >= 256) {
- defthick[0] = res >> 8;
- defthick[1] = res >> 8;
- defthick[2] = res >> 4;
- defthick[3] = res >> 8;
- defthick[4] = res >> 8;
- defthick[5] = res >> 6;
- } */
-
- linepiece = res >> 9;
- for (dotshifter = 0; linepiece; dotshifter++)
- linepiece = linepiece >> 1;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: int doinput (file_pointer)
- |
- | Results: A line of input is read into `inputline'.
- |
- | Side Efct: "linenum" is incremented.
- |
- | Bugs: Lines longer than MAXINLINE are NOT checked, except for
- | updating `linenum'.
- *----------------------------------------------------------------------------*/
-
-int
-doinput(FILE *fp)
-{
- if (fgets(inputline, MAXINLINE, fp) == NULL)
- return 0;
- if (strchr(inputline, '\n')) /* ++ only if it's a complete line */
- linenum++;
- return 1;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: initpic ( )
- |
- | Results: Sets all parameters to the normal defaults, possibly
- | overridden by a setdefault command. Initialize the picture
- | variables, and output the startup commands to troff to begin
- | the picture.
- *----------------------------------------------------------------------------*/
-
-void
-initpic()
-{
- register int i;
-
- for (i = 0; i < STYLES; i++) { /* line thickness defaults */
- thick[i] = defthick[i];
- }
- for (i = 0; i < FONTS; i++) { /* font name defaults */
- tfont[i] = (char *)deffont[i];
- }
- for (i = 0; i < SIZES; i++) { /* font size defaults */
- tsize[i] = defsize[i];
- }
- for (i = 0; i <= NSTIPPLES; i++) { /* stipple font file default indices */
- stipple_index[i] = defstipple_index[i];
- }
- stipple = defstipple;
-
- gremlinfile[0] = 0; /* filename is `null' */
- setdefault = 0; /* this is not the default settings (yet) */
-
- toppoint = BIG; /* set the picture bounds out */
- bottompoint = -BIG; /* of range so they'll be set */
- leftpoint = BIG; /* by `savebounds' on input */
- rightpoint = -BIG;
-
- pointscale = defpoint; /* flag for scaling point sizes default */
- xscale = scale; /* default scale of individual pictures */
- width = 0.0; /* size specifications input by user */
- height = 0.0;
-
- linethickness = DEFTHICK; /* brush styles */
- linmod = DEFSTYLE;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: conv (file_pointer, starting_line)
- |
- | Results: At this point, we just passed a `.GS' line in the input
- | file. conv reads the input and calls `interpret' to process
- | commands, gathering up information until a `.GE' line is
- | found. It then calls `HGPrint' to do the translation of the
- | gremlin file to troff commands.
- *----------------------------------------------------------------------------*/
-
-void
-conv(register FILE *fp,
- int baseline)
-{
- register FILE *gfp = NULL; /* input file pointer */
- register int done = 0; /* flag to remember if finished */
- register ELT *e; /* current element pointer */
- ELT *PICTURE; /* whole picture data base pointer */
- double temp; /* temporary calculating area */
- /* POINT ptr; */ /* coordinates of a point to pass to `mov' */
- /* routine */
- int flyback; /* flag `want to end up at the top of the */
- /* picture?' */
- int compat; /* test character after .GE or .GF */
-
-
- initpic(); /* set defaults, ranges, etc. */
- strcpy(GScommand, inputline); /* save `.GS' line for later */
-
- do {
- done = !doinput(fp); /* test for EOF */
- flyback = (*c3 == 'F'); /* and .GE or .GF */
- compat = (compatibility_flag ||
- *c4 == '\n' || *c4 == ' ' || *c4 == '\0');
- done |= (*c1 == '.' && *c2 == 'G' && (*c3 == 'E' || flyback) &&
- compat);
-
- if (done) {
- if (setdefault)
- savestate();
-
- if (!gremlinfile[0]) {
- if (!setdefault)
- error("at line %1: no picture filename.\n", baseline);
- return;
- }
- char *path;
- gfp = macro_path.open_file(gremlinfile, &path);
- if (!gfp)
- return;
- PICTURE = DBRead(gfp); /* read picture file */
- fclose(gfp);
- a_delete path;
- if (DBNullelt(PICTURE))
- return; /* If a request is made to make the */
- /* picture fit into a specific area, */
- /* set the scale to do that. */
-
- if (stipple == (char *) NULL) /* if user forgot stipple */
- if (has_polygon(PICTURE)) /* and picture has a polygon */
- stipple = (char *)DEFSTIPPLE; /* then set the default */
-
- if ((temp = bottompoint - toppoint) < 0.1)
- temp = 0.1;
- temp = (height != 0.0) ? height / (temp * SCREENtoINCH) : BIG;
- if ((troffscale = rightpoint - leftpoint) < 0.1)
- troffscale = 0.1;
- troffscale = (width != 0.0) ?
- width / (troffscale * SCREENtoINCH) : BIG;
- if (temp == BIG && troffscale == BIG)
- troffscale = xscale;
- else {
- if (temp < troffscale)
- troffscale = temp;
- } /* here, troffscale is the */
- /* picture's scaling factor */
- if (pointscale) {
- register int i; /* do pointscaling here, when */
- /* scale is known, before output */
- for (i = 0; i < SIZES; i++)
- tsize[i] = (int) (troffscale * (double) tsize[i] + 0.5);
- }
-
- /* change to device units */
- troffscale *= SCREENtoINCH * res; /* from screen units */
-
- ytop = (int) (toppoint * troffscale); /* calculate integer */
- ybottom = (int) (bottompoint * troffscale); /* versions of the */
- xleft = (int) (leftpoint * troffscale); /* picture limits */
- xright = (int) (rightpoint * troffscale);
-
- /* save stuff in number registers, */
- /* register g1 = picture width and */
- /* register g2 = picture height, */
- /* set vertical spacing, no fill, */
- /* and break (to make sure picture */
- /* starts on left), and put out the */
- /* user's `.GS' line. */
- printf(".br\n"
- ".nr g1 %du\n"
- ".nr g2 %du\n"
- "%s"
- ".nr g3 \\n(.f\n"
- ".nr g4 \\n(.s\n"
- "\\0\n"
- ".sp -1\n",
- xright - xleft, ybottom - ytop, GScommand);
-
- if (stipple) /* stipple requested for this picture */
- printf(".st %s\n", stipple);
- lastx = xleft; /* note where we are (upper left */
- lastyline = lasty = ytop; /* corner of the picture) */
-
- /* Just dump everything in the order it appears.
- *
- * If -s command-line option, traverse picture twice: First time,
- * print only the interiors of filled polygons (as borderless
- * polygons). Second time, print the outline as series of line
- * segments. This way, postprocessors that overwrite rather than
- * merge picture elements (such as Postscript) can still have text and
- * graphics on a shaded background.
- */
- /* if (sflag) */
- if (!sflag) { /* changing the default for filled polygons */
- e = PICTURE;
- polyfill = FILL;
- while (!DBNullelt(e)) {
- printf(".mk\n");
- if (e->type == POLYGON)
- HGPrintElt(e, baseline);
- printf(".rt\n");
- lastx = xleft;
- lastyline = lasty = ytop;
- e = DBNextElt(e);
- }
- }
- e = PICTURE;
-
- /* polyfill = !sflag ? BOTH : OUTLINE; */
- polyfill = sflag ? BOTH : OUTLINE; /* changing the default */
- while (!DBNullelt(e)) {
- printf(".mk\n");
- HGPrintElt(e, baseline);
- printf(".rt\n");
- lastx = xleft;
- lastyline = lasty = ytop;
- e = DBNextElt(e);
- }
-
- /* decide where to end picture */
-
- /* I changed everything here. I always use the combination .mk and */
- /* .rt so once finished I just space down the heigth of the picture */
- /* that is \n(g2u */
- if (flyback) { /* end picture at upper left */
- /* ptr.x = leftpoint;
- ptr.y = toppoint; */
- } else { /* end picture at lower left */
- /* ptr.x = leftpoint;
- ptr.y = bottompoint; */
- printf(".sp \\n(g2u\n");
- }
-
- /* tmove(&ptr); */ /* restore default line parameters */
-
- /* restore everything to the way it was before the .GS, then put */
- /* out the `.GE' line from user */
-
- /* printf("\\D't %du'\\D's %du'\n", DEFTHICK, DEFSTYLE); */
- /* groff doesn't understand the \Ds command */
-
- printf("\\D't %du'\n", DEFTHICK);
- if (flyback) /* make sure we end up at top of */
- printf(".sp -1\n"); /* picture if `flying back' */
- if (stipple) /* restore stipple to previous */
- printf(".st\n");
- printf(".br\n"
- ".ft \\n(g3\n"
- ".ps \\n(g4\n"
- "%s", inputline);
- } else
- interpret(inputline); /* take commands from the input file */
- } while (!done);
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: savestate ( )
- |
- | Results: all the current scaling / font size / font name / thickness
- | / pointscale settings are saved to be the defaults. Scaled
- | point sizes are NOT saved. The scaling is done each time a
- | new picture is started.
- |
- | Side Efct: scale, and def* are modified.
- *----------------------------------------------------------------------------*/
-
-void
-savestate()
-{
- register int i;
-
- for (i = 0; i < STYLES; i++) /* line thickness defaults */
- defthick[i] = thick[i];
- for (i = 0; i < FONTS; i++) /* font name defaults */
- deffont[i] = tfont[i];
- for (i = 0; i < SIZES; i++) /* font size defaults */
- defsize[i] = tsize[i];
- for (i = 0; i <= NSTIPPLES; i++) /* stipple font file default indices */
- defstipple_index[i] = stipple_index[i];
-
- defstipple = stipple; /* if stipple has been set, it's remembered */
- scale *= xscale; /* default scale of individual pictures */
- defpoint = pointscale; /* flag for scaling pointsizes from x factors */
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: savebounds (x_coordinate, y_coordinate)
- |
- | Results: Keeps track of the maximum and minimum extent of a picture
- | in the global variables: left-, right-, top- and
- | bottompoint. `savebounds' assumes that the points have been
- | oriented to the correct direction. No scaling has taken
- | place, though.
- *----------------------------------------------------------------------------*/
-
-void
-savebounds(double x,
- double y)
-{
- if (x < leftpoint)
- leftpoint = x;
- if (x > rightpoint)
- rightpoint = x;
- if (y < toppoint)
- toppoint = y;
- if (y > bottompoint)
- bottompoint = y;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: interpret (character_string)
- |
- | Results: Commands are taken from the input string and performed.
- | Commands are separated by the endofline, and are of the
- | format:
- | string1 string2
- |
- | where string1 is the command and string2 is the argument.
- |
- | Side Efct: Font and size strings, plus the gremlin file name and the
- | width and height variables are set by this routine.
- *----------------------------------------------------------------------------*/
-
-void
-interpret(char *line)
-{
- char str1[MAXINLINE];
- char str2[MAXINLINE];
- register char *chr;
- register int i;
- double par;
-
- str2[0] = '\0';
- sscanf(line, "%80s%80s", &str1[0], &str2[0]);
- for (chr = &str1[0]; *chr; chr++) /* convert command to */
- if (isupper(*chr))
- *chr = tolower(*chr); /* lower case */
-
- switch (str1[0]) {
-
- case '1':
- case '2': /* font sizes */
- case '3':
- case '4':
- i = atoi(str2);
- if (i > 0 && i < 1000)
- tsize[str1[0] - '1'] = i;
- else
- error("bad font size value at line %1", linenum);
- break;
-
- case 'r': /* roman */
- if (str2[0] < '0')
- goto nofont;
- tfont[0] = (char *) malloc(strlen(str2) + 1);
- strcpy(tfont[0], str2);
- break;
-
- case 'i': /* italics */
- if (str2[0] < '0')
- goto nofont;
- tfont[1] = (char *) malloc(strlen(str2) + 1);
- strcpy(tfont[1], str2);
- break;
-
- case 'b': /* bold */
- if (str2[0] < '0')
- goto nofont;
- tfont[2] = (char *) malloc(strlen(str2) + 1);
- strcpy(tfont[2], str2);
- break;
-
- case 's': /* special */
- if (str1[1] == 'c')
- goto scalecommand; /* or scale */
-
- if (str2[0] < '0') {
- nofont:
- error("no fontname specified in line %1", linenum);
- break;
- }
- if (str1[1] == 't')
- goto stipplecommand; /* or stipple */
-
- tfont[3] = (char *) malloc(strlen(str2) + 1);
- strcpy(tfont[3], str2);
- break;
-
- case 'l': /* l */
- if (isdigit(str1[1])) { /* set stipple index */
- int idx = atoi(str1 + 1), val;
-
- if (idx < 0 || idx > NSTIPPLES) {
- error("bad stipple number %1 at line %2", idx, linenum);
- break;
- }
- if (!defstipple_index)
- defstipple_index = other_stipple_index;
- val = atoi(str2);
- if (val >= 0 && val < 256)
- stipple_index[idx] = val;
- else
- error("bad stipple index value at line %1", linenum);
- break;
- }
-
- stipplecommand: /* set stipple name */
- stipple = (char *) malloc(strlen(str2) + 1);
- strcpy(stipple, str2);
- /* if its a `known' font (currently only `cf'), set indicies */
- if (strcmp(stipple, "cf") == 0)
- defstipple_index = cf_stipple_index;
- else
- defstipple_index = other_stipple_index;
- for (i = 0; i <= NSTIPPLES; i++)
- stipple_index[i] = defstipple_index[i];
- break;
-
- case 'a': /* text adjust */
- par = atof(str2);
- switch (str1[1]) {
- case '1':
- adj1 = par;
- break;
- case '2':
- adj2 = par;
- break;
- case '3':
- adj3 = par;
- break;
- case '4':
- adj4 = par;
- break;
- default:
- error("bad adjust command at line %1", linenum);
- break;
- }
- break;
-
- case 't': /* thick */
- thick[2] = defthick[0] * atof(str2);
- break;
-
- case 'm': /* medium */
- thick[5] = defthick[0] * atof(str2);
- break;
-
- case 'n': /* narrow */
- thick[0] = thick[1] = thick[3] = thick[4] =
- defthick[0] * atof(str2);
- break;
-
- case 'x': /* x */
- scalecommand: /* scale */
- par = atof(str2);
- if (par > 0.0)
- xscale *= par;
- else
- error("invalid scale value on line %1", linenum);
- break;
-
- case 'f': /* file */
- strcpy(gremlinfile, str2);
- break;
-
- case 'w': /* width */
- width = atof(str2);
- if (width < 0.0)
- width = -width;
- break;
-
- case 'h': /* height */
- height = atof(str2);
- if (height < 0.0)
- height = -height;
- break;
-
- case 'd': /* defaults */
- setdefault = 1;
- break;
-
- case 'p': /* pointscale */
- if (strcmp("off", str2))
- pointscale = 1;
- else
- pointscale = 0;
- break;
-
- default:
- error("unknown command `%1' on line %2", str1, linenum);
- exit(8);
- break;
- };
-}
-
-
-/*
- * return TRUE if picture contains a polygon
- * otherwise FALSE
- */
-
-int
-has_polygon(register ELT *elist)
-{
- while (!DBNullelt(elist)) {
- if (elist->type == POLYGON)
- return (1);
- elist = DBNextElt(elist);
- }
-
- return (0);
-}
-
-/* EOF */
diff --git a/contrib/groff/src/preproc/html/Makefile.sub b/contrib/groff/src/preproc/html/Makefile.sub
deleted file mode 100644
index 0763537a94e6..000000000000
--- a/contrib/groff/src/preproc/html/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=pre-grohtml$(EXEEXT)
-# MAN1=pre-grohtml.n
-MAN1=
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=pre-html.$(OBJEXT) pushback.$(OBJEXT)
-CCSRCS=$(srcdir)/pre-html.cpp $(srcdir)/pushback.cpp
diff --git a/contrib/groff/src/preproc/html/pre-html.cpp b/contrib/groff/src/preproc/html/pre-html.cpp
deleted file mode 100644
index 6f8a46aee0fc..000000000000
--- a/contrib/groff/src/preproc/html/pre-html.cpp
+++ /dev/null
@@ -1,1779 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk).
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define PREHTMLC
-
-#include "lib.h"
-
-#include <signal.h>
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "posix.h"
-#include "defs.h"
-#include "searchpath.h"
-#include "paper.h"
-#include "device.h"
-#include "font.h"
-
-#include <errno.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifdef _POSIX_VERSION
-# include <sys/wait.h>
-# define PID_T pid_t
-#else /* not _POSIX_VERSION */
-# define PID_T int
-#endif /* not _POSIX_VERSION */
-
-#include <stdarg.h>
-
-#include "nonposix.h"
-
-/* Establish some definitions to facilitate discrimination between
- differing runtime environments. */
-
-#undef MAY_FORK_CHILD_PROCESS
-#undef MAY_SPAWN_ASYNCHRONOUS_CHILD
-
-#if defined(__MSDOS__) || defined(_WIN32)
-
-// Most MS-DOS and Win32 environments will be missing the `fork' capability
-// (some like Cygwin have it, but it is best avoided).
-
-# define MAY_FORK_CHILD_PROCESS 0
-
-// On these systems, we use `spawn...', instead of `fork' ... `exec...'.
-# include <process.h> // for `spawn...'
-# include <fcntl.h> // for attributes of pipes
-
-# if defined(__CYGWIN__) || defined(_UWIN) || defined(_WIN32)
-
-// These Win32 implementations allow parent and `spawn...'ed child to
-// multitask asynchronously.
-
-# define MAY_SPAWN_ASYNCHRONOUS_CHILD 1
-
-# else
-
-// Others may adopt MS-DOS behaviour where parent must sleep,
-// from `spawn...' until child terminates.
-
-# define MAY_SPAWN_ASYNCHRONOUS_CHILD 0
-
-# endif /* not defined __CYGWIN__, _UWIN, or _WIN32 */
-
-# if defined(DEBUGGING) && !defined(DEBUG_FILE_DIR)
-/* When we are building a DEBUGGING version we need to tell pre-grohtml
- where to put intermediate files (the DEBUGGING version will preserve
- these on exit).
-
- On a UNIX host, we might simply use `/tmp', but MS-DOS and Win32 will
- probably not have this on all disk drives, so default to using
- `c:/temp' instead. (Note that user may choose to override this by
- supplying a definition such as
-
- -DDEBUG_FILE_DIR=d:/path/to/debug/files
-
- in the CPPFLAGS to `make'.) */
-
-# define DEBUG_FILE_DIR c:/temp
-# endif
-
-#else /* not __MSDOS__ or _WIN32 */
-
-// For non-Microsoft environments assume UNIX conventions,
-// so `fork' is required and child processes are asynchronous.
-# define MAY_FORK_CHILD_PROCESS 1
-# define MAY_SPAWN_ASYNCHRONOUS_CHILD 1
-
-# if defined(DEBUGGING) && !defined(DEBUG_FILE_DIR)
-/* For a DEBUGGING version, on the UNIX host, we can also usually rely
- on being able to use `/tmp' for temporary file storage. (Note that,
- as in the __MSDOS__ or _WIN32 case above, the user may override this
- by defining
-
- -DDEBUG_FILE_DIR=/path/to/debug/files
-
- in the CPPFLAGS.) */
-
-# define DEBUG_FILE_DIR /tmp
-# endif
-
-#endif /* not __MSDOS__ or _WIN32 */
-
-#ifdef DEBUGGING
-// For a DEBUGGING version, we need some additional macros,
-// to direct the captured debug mode output to appropriately named files
-// in the specified DEBUG_FILE_DIR.
-
-# define DEBUG_TEXT(text) #text
-# define DEBUG_NAME(text) DEBUG_TEXT(text)
-# define DEBUG_FILE(name) DEBUG_NAME(DEBUG_FILE_DIR) "/" name
-#endif
-
-extern "C" const char *Version_string;
-
-#include "pre-html.h"
-#include "pushback.h"
-#include "html-strings.h"
-
-#define DEFAULT_LINE_LENGTH 7 // inches wide
-#define DEFAULT_IMAGE_RES 100 // number of pixels per inch resolution
-#define IMAGE_BOARDER_PIXELS 0
-#define INLINE_LEADER_CHAR '\\'
-
-// Don't use colour names here! Otherwise there is a dependency on
-// a file called `rgb.txt' which maps names to colours.
-#define TRANSPARENT "-background rgb:f/f/f -transparent rgb:f/f/f"
-#define MIN_ALPHA_BITS 0
-#define MAX_ALPHA_BITS 4
-
-#define PAGE_TEMPLATE_SHORT "pg"
-#define PAGE_TEMPLATE_LONG "-page-"
-#define PS_TEMPLATE_SHORT "ps"
-#define PS_TEMPLATE_LONG "-ps-"
-#define REGION_TEMPLATE_SHORT "rg"
-#define REGION_TEMPLATE_LONG "-regions-"
-
-#if 0
-# define DEBUGGING
-#endif
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-typedef enum {
- CENTERED, LEFT, RIGHT, INLINE
-} IMAGE_ALIGNMENT;
-
-static int postscriptRes = -1; // postscript resolution,
- // dots per inch
-static int stdoutfd = 1; // output file descriptor -
- // normally 1 but might move
- // -1 means closed
-static char *psFileName = NULL; // name of postscript file
-static char *psPageName = NULL; // name of file containing
- // postscript current page
-static char *regionFileName = NULL; // name of file containing all
- // image regions
-static char *imagePageName = NULL; // name of bitmap image containing
- // current page
-static const char *image_device = "pnmraw";
-static int image_res = DEFAULT_IMAGE_RES;
-static int vertical_offset = 0;
-static char *image_template = NULL; // image template filename
-static char *macroset_template= NULL; // image template passed to troff
- // by -D
-static int troff_arg = 0; // troff arg index
-static char *image_dir = NULL; // user specified image directory
-static int textAlphaBits = MAX_ALPHA_BITS;
-static int graphicAlphaBits = MAX_ALPHA_BITS;
-static char *antiAlias = NULL; // antialias arguments we pass to gs
-static int show_progress = FALSE; // should we display page numbers as
- // they are processed?
-static int currentPageNo = -1; // current image page number
-#if defined(DEBUGGING)
-static int debug = FALSE;
-static char *troffFileName = NULL; // output of pre-html output which
- // is sent to troff -Tps
-static char *htmlFileName = NULL; // output of pre-html output which
- // is sent to troff -Thtml
-#endif
-
-static char *linebuf = NULL; // for scanning devps/DESC
-static int linebufsize = 0;
-static const char *image_gen = NULL; // the `gs' program
-
-const char *const FONT_ENV_VAR = "GROFF_FONT_PATH";
-static search_path font_path(FONT_ENV_VAR, FONTPATH, 0, 0);
-
-
-/*
- * Images are generated via postscript, gs, and the pnm utilities.
- */
-#define IMAGE_DEVICE "-Tps"
-
-
-static int do_file(const char *filename);
-
-
-/*
- * sys_fatal - Write a fatal error message.
- * Taken from src/roff/groff/pipeline.c.
- */
-
-void sys_fatal(const char *s)
-{
- fatal("%1: %2", s, strerror(errno));
-}
-
-/*
- * get_line - Copy a line (w/o newline) from a file to the
- * global line buffer.
- */
-
-int get_line(FILE *f)
-{
- if (f == 0)
- return 0;
- if (linebuf == 0) {
- linebuf = new char[128];
- linebufsize = 128;
- }
- int i = 0;
- // skip leading whitespace
- for (;;) {
- int c = getc(f);
- if (c == EOF)
- return 0;
- if (c != ' ' && c != '\t') {
- ungetc(c, f);
- break;
- }
- }
- for (;;) {
- int c = getc(f);
- if (c == EOF)
- break;
- if (i + 1 >= linebufsize) {
- char *old_linebuf = linebuf;
- linebuf = new char[linebufsize * 2];
- memcpy(linebuf, old_linebuf, linebufsize);
- a_delete old_linebuf;
- linebufsize *= 2;
- }
- linebuf[i++] = c;
- if (c == '\n') {
- i--;
- break;
- }
- }
- linebuf[i] = '\0';
- return 1;
-}
-
-/*
- * get_resolution - Return the postscript resolution from devps/DESC.
- */
-
-static unsigned int get_resolution(void)
-{
- char *pathp;
- FILE *f;
- unsigned int res;
- f = font_path.open_file("devps/DESC", &pathp);
- a_delete pathp;
- if (f == 0)
- fatal("can't open devps/DESC");
- while (get_line(f)) {
- int n = sscanf(linebuf, "res %u", &res);
- if (n >= 1) {
- fclose(f);
- return res;
- }
- }
- fatal("can't find `res' keyword in devps/DESC");
- return 0;
-}
-
-/*
- * html_system - A wrapper for system().
- */
-
-void html_system(const char *s, int redirect_stdout)
-{
- // Redirect standard error to the null device. This is more
- // portable than using "2> /dev/null", since it doesn't require a
- // Unixy shell.
- int save_stderr = dup(2);
- int save_stdout = dup(1);
- int fdnull = open(NULL_DEV, O_WRONLY|O_BINARY, 0666);
- if (save_stderr > 2 && fdnull > 2)
- dup2(fdnull, 2);
- if (redirect_stdout && save_stdout > 1 && fdnull > 1)
- dup2(fdnull, 1);
- if (fdnull >= 0)
- close(fdnull);
- int status = system(s);
- dup2(save_stderr, 2);
- if (redirect_stdout)
- dup2(save_stdout, 1);
- if (status == -1)
- fprintf(stderr, "Calling `%s' failed\n", s);
- else if (status)
- fprintf(stderr, "Calling `%s' returned status %d\n", s, status);
- close(save_stderr);
- close(save_stdout);
-}
-
-/*
- * make_message - Create a string via malloc and place the result of the
- * va args into string. Finally the new string is returned.
- * Taken from man page of printf(3).
- */
-
-char *make_message(const char *fmt, ...)
-{
- /* Guess we need no more than 100 bytes. */
- int n, size = 100;
- char *p;
- char *np;
- va_list ap;
- if ((p = (char *)malloc(size)) == NULL)
- return NULL;
- while (1) {
- /* Try to print in the allocated space. */
- va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
- va_end(ap);
- /* If that worked, return the string. */
- if (n > -1 && n < size - 1) { /* glibc 2.1 and pre-ANSI C 99 */
- if (size > n + 1) {
- np = strsave(p);
- free(p);
- return np;
- }
- return p;
- }
- /* Else try again with more space. */
- else /* glibc 2.0 */
- size *= 2; /* twice the old size */
- if ((np = (char *)realloc(p, size)) == NULL) {
- free(p); /* realloc failed, free old, p. */
- return NULL;
- }
- p = np; /* use realloc'ed, p */
- }
-}
-
-/*
- * the class and methods for retaining ascii text
- */
-
-struct char_block {
- enum { SIZE = 256 };
- char buffer[SIZE];
- int used;
- char_block *next;
-
- char_block();
-};
-
-/*
- * char_block - Constructor. Set the, used, and, next, fields to zero.
- */
-
-char_block::char_block()
-: used(0), next(0)
-{
- for (int i = 0; i < SIZE; i++)
- buffer[i] = 0;
-}
-
-class char_buffer {
-public:
- char_buffer();
- ~char_buffer();
- int read_file(FILE *fp);
- int do_html(int argc, char *argv[]);
- int do_image(int argc, char *argv[]);
- void emit_troff_output(int device_format_selector);
- void write_upto_newline(char_block **t, int *i, int is_html);
- int can_see(char_block **t, int *i, const char *string);
- int skip_spaces(char_block **t, int *i);
- void skip_until_newline(char_block **t, int *i);
-private:
- char_block *head;
- char_block *tail;
- int run_output_filter(int device_format_selector, int argc, char *argv[]);
-};
-
-/*
- * char_buffer - Constructor.
- */
-
-char_buffer::char_buffer()
-: head(0), tail(0)
-{
-}
-
-/*
- * char_buffer - Destructor. Throw away the whole buffer list.
- */
-
-char_buffer::~char_buffer()
-{
- while (head != NULL) {
- char_block *temp = head;
- head = head->next;
- delete temp;
- }
-}
-
-/*
- * read_file - Read in a complete file, fp, placing the contents inside
- * char_blocks.
- */
-
-int char_buffer::read_file(FILE *fp)
-{
- int n;
- while (!feof(fp)) {
- if (tail == NULL) {
- tail = new char_block;
- head = tail;
- }
- else {
- if (tail->used == char_block::SIZE) {
- tail->next = new char_block;
- tail = tail->next;
- }
- }
- // at this point we have a tail which is ready for the next SIZE
- // bytes of the file
- n = fread(tail->buffer, sizeof(char), char_block::SIZE-tail->used, fp);
- if (n <= 0)
- // error
- return 0;
- else
- tail->used += n * sizeof(char);
- }
- return 1;
-}
-
-/*
- * writeNbytes - Write n bytes to stdout.
- */
-
-static void writeNbytes(const char *s, int l)
-{
- int n = 0;
- int r;
-
- while (n < l) {
- r = write(stdoutfd, s, l - n);
- if (r < 0)
- sys_fatal("write");
- n += r;
- s += r;
- }
-}
-
-/*
- * writeString - Write a string to stdout.
- */
-
-static void writeString(const char *s)
-{
- writeNbytes(s, strlen(s));
-}
-
-/*
- * makeFileName - Create the image filename template
- * and the macroset image template.
- */
-
-static void makeFileName(void)
-{
- if ((image_dir != NULL) && (strchr(image_dir, '%') != NULL)) {
- error("cannot use a `%%' within the image directory name");
- exit(1);
- }
-
- if ((image_template != NULL) && (strchr(image_template, '%') != NULL)) {
- error("cannot use a `%%' within the image template");
- exit(1);
- }
-
- if (image_dir == NULL)
- image_dir = (char *)"";
- else if (strlen(image_dir) > 0
- && image_dir[strlen(image_dir) - 1] != '/') {
- image_dir = make_message("%s/", image_dir);
- if (image_dir == NULL)
- sys_fatal("make_message");
- }
-
- if (image_template == NULL)
- macroset_template = make_message("%sgrohtml-%d", image_dir,
- (int)getpid());
- else
- macroset_template = make_message("%s%s", image_dir, image_template);
-
- if (macroset_template == NULL)
- sys_fatal("make_message");
-
- image_template =
- (char *)malloc(strlen("-%d") + strlen(macroset_template) + 1);
- if (image_template == NULL)
- sys_fatal("malloc");
- strcpy(image_template, macroset_template);
- strcat(image_template, "-%d");
-}
-
-/*
- * setupAntiAlias - Set up the antialias string, used when we call gs.
- */
-
-static void setupAntiAlias(void)
-{
- if (textAlphaBits == 0 && graphicAlphaBits == 0)
- antiAlias = make_message(" ");
- else if (textAlphaBits == 0)
- antiAlias = make_message("-dGraphicsAlphaBits=%d ", graphicAlphaBits);
- else if (graphicAlphaBits == 0)
- antiAlias = make_message("-dTextAlphaBits=%d ", textAlphaBits);
- else
- antiAlias = make_message("-dTextAlphaBits=%d -dGraphicsAlphaBits=%d ",
- textAlphaBits, graphicAlphaBits);
-}
-
-/*
- * checkImageDir - Check whether the image directory is available.
- */
-
-static void checkImageDir(void)
-{
- if (image_dir != NULL && strcmp(image_dir, "") != 0)
- if (!(mkdir(image_dir, 0777) == 0 || errno == EEXIST)) {
- error("cannot create directory `%1'", image_dir);
- exit(1);
- }
-}
-
-/*
- * write_end_image - End the image. Write out the image extents if we
- * are using -Tps.
- */
-
-static void write_end_image(int is_html)
-{
- /*
- * if we are producing html then these
- * emit image name and enable output
- * else
- * we are producing images
- * in which case these generate image
- * boundaries
- */
- writeString("\\O[4]\\O[2]");
- if (is_html)
- writeString("\\O[1]");
- else
- writeString("\\O[0]");
-}
-
-/*
- * write_start_image - Write troff code which will:
- *
- * (i) disable html output for the following image
- * (ii) reset the max/min x/y registers during postscript
- * rendering.
- */
-
-static void write_start_image(IMAGE_ALIGNMENT pos, int is_html)
-{
- writeString("\\O[5");
- switch (pos) {
- case INLINE:
- writeString("i");
- break;
- case LEFT:
- writeString("l");
- break;
- case RIGHT:
- writeString("r");
- break;
- case CENTERED:
- default:
- writeString("c");
- break;
- }
- writeString(image_template);
- writeString(".png]");
- if (is_html)
- writeString("\\O[0]\\O[3]");
- else
- // reset min/max registers
- writeString("\\O[1]\\O[3]");
-}
-
-/*
- * write_upto_newline - Write the contents of the buffer until a newline
- * is seen. Check for HTML_IMAGE_INLINE_BEGIN and
- * HTML_IMAGE_INLINE_END; process them if they are
- * present.
- */
-
-void char_buffer::write_upto_newline(char_block **t, int *i, int is_html)
-{
- int j = *i;
-
- if (*t) {
- while (j < (*t)->used
- && (*t)->buffer[j] != '\n'
- && (*t)->buffer[j] != INLINE_LEADER_CHAR)
- j++;
- if (j < (*t)->used
- && (*t)->buffer[j] == '\n')
- j++;
- writeNbytes((*t)->buffer + (*i), j - (*i));
- if ((*t)->buffer[j] == INLINE_LEADER_CHAR) {
- if (can_see(t, &j, HTML_IMAGE_INLINE_BEGIN))
- write_start_image(INLINE, is_html);
- else if (can_see(t, &j, HTML_IMAGE_INLINE_END))
- write_end_image(is_html);
- else {
- if (j < (*t)->used) {
- *i = j;
- j++;
- writeNbytes((*t)->buffer + (*i), j - (*i));
- }
- }
- }
- if (j == (*t)->used) {
- *i = 0;
- *t = (*t)->next;
- if (*t && (*t)->buffer[j - 1] != '\n')
- write_upto_newline(t, i, is_html);
- }
- else
- // newline was seen
- *i = j;
- }
-}
-
-/*
- * can_see - Return TRUE if we can see string in t->buffer[i] onwards.
- */
-
-int char_buffer::can_see(char_block **t, int *i, const char *str)
-{
- int j = 0;
- int l = strlen(str);
- int k = *i;
- char_block *s = *t;
-
- while (s) {
- while (k < s->used && j < l && s->buffer[k] == str[j]) {
- j++;
- k++;
- }
- if (j == l) {
- *i = k;
- *t = s;
- return TRUE;
- }
- else if (k < s->used && s->buffer[k] != str[j])
- return( FALSE );
- s = s->next;
- k = 0;
- }
- return FALSE;
-}
-
-/*
- * skip_spaces - Return TRUE if we have not run out of data.
- * Consume spaces also.
- */
-
-int char_buffer::skip_spaces(char_block **t, int *i)
-{
- char_block *s = *t;
- int k = *i;
-
- while (s) {
- while (k < s->used && isspace(s->buffer[k]))
- k++;
- if (k == s->used) {
- k = 0;
- s = s->next;
- }
- else {
- *i = k;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/*
- * skip_until_newline - Skip all characters until a newline is seen.
- * The newline is not consumed.
- */
-
-void char_buffer::skip_until_newline(char_block **t, int *i)
-{
- int j = *i;
-
- if (*t) {
- while (j < (*t)->used && (*t)->buffer[j] != '\n')
- j++;
- if (j == (*t)->used) {
- *i = 0;
- *t = (*t)->next;
- skip_until_newline(t, i);
- }
- else
- // newline was seen
- *i = j;
- }
-}
-
-#define DEVICE_FORMAT(filter) (filter == HTML_OUTPUT_FILTER)
-#define HTML_OUTPUT_FILTER 0
-#define IMAGE_OUTPUT_FILTER 1
-#define OUTPUT_STREAM(name) creat((name), S_IWUSR | S_IRUSR)
-#define PS_OUTPUT_STREAM OUTPUT_STREAM(psFileName)
-#define REGION_OUTPUT_STREAM OUTPUT_STREAM(regionFileName)
-
-/*
- * emit_troff_output - Write formatted buffer content to the troff
- * post-processor data pipeline.
- */
-
-void char_buffer::emit_troff_output(int device_format_selector)
-{
- // Handle output for BOTH html and image device formats
- // if `device_format_selector' is passed as
- //
- // HTML_FORMAT(HTML_OUTPUT_FILTER)
- // Buffer data is written to the output stream
- // with template image names translated to actual image names.
- //
- // HTML_FORMAT(IMAGE_OUTPUT_FILTER)
- // Buffer data is written to the output stream
- // with no translation, for image file creation in the post-processor.
-
- int idx = 0;
- char_block *element = head;
-
- while (element != NULL)
- write_upto_newline(&element, &idx, device_format_selector);
-
-#if 0
- if (close(stdoutfd) < 0)
- sys_fatal ("close");
-
- // now we grab fd=1 so that the next pipe cannot use fd=1
- if (stdoutfd == 1) {
- if (dup(2) != stdoutfd)
- sys_fatal ("dup failed to use fd=1");
- }
-#endif /* 0 */
-}
-
-/*
- * The image class remembers the position of all images in the
- * postscript file and assigns names for each image.
- */
-
-struct imageItem {
- imageItem *next;
- int X1;
- int Y1;
- int X2;
- int Y2;
- char *imageName;
- int resolution;
- int maxx;
- int pageNo;
-
- imageItem(int x1, int y1, int x2, int y2,
- int page, int res, int max_width, char *name);
- ~imageItem();
-};
-
-/*
- * imageItem - Constructor.
- */
-
-imageItem::imageItem(int x1, int y1, int x2, int y2,
- int page, int res, int max_width, char *name)
-{
- X1 = x1;
- Y1 = y1;
- X2 = x2;
- Y2 = y2;
- pageNo = page;
- resolution = res;
- maxx = max_width;
- imageName = name;
- next = NULL;
-}
-
-/*
- * imageItem - Destructor.
- */
-
-imageItem::~imageItem()
-{
- if (imageName)
- free(imageName);
-}
-
-/*
- * imageList - A class containing a list of imageItems.
- */
-
-class imageList {
-private:
- imageItem *head;
- imageItem *tail;
- int count;
-public:
- imageList();
- ~imageList();
- void add(int x1, int y1, int x2, int y2,
- int page, int res, int maxx, char *name);
- void createImages(void);
- int createPage(int pageno);
- void createImage(imageItem *i);
- int getMaxX(int pageno);
-};
-
-/*
- * imageList - Constructor.
- */
-
-imageList::imageList()
-: head(0), tail(0), count(0)
-{
-}
-
-/*
- * imageList - Destructor.
- */
-
-imageList::~imageList()
-{
- while (head != NULL) {
- imageItem *i = head;
- head = head->next;
- delete i;
- }
-}
-
-/*
- * createPage - Create one image of, page pageno, from the postscript file.
- */
-
-int imageList::createPage(int pageno)
-{
- char *s;
-
- if (currentPageNo == pageno)
- return 0;
-
- if (currentPageNo >= 1) {
- /*
- * We need to unlink the files which change each time a new page is
- * processed. The final unlink is done by xtmpfile when pre-grohtml
- * exits.
- */
- unlink(imagePageName);
- unlink(psPageName);
- }
-
- if (show_progress) {
- fprintf(stderr, "[%d] ", pageno);
- fflush(stderr);
- }
-
-#if defined(DEBUGGING)
- if (debug)
- fprintf(stderr, "creating page %d\n", pageno);
-#endif
-
- s = make_message("psselect -q -p%d %s %s\n",
- pageno, psFileName, psPageName);
-
- if (s == NULL)
- sys_fatal("make_message");
-#if defined(DEBUGGING)
- if (debug) {
- fwrite(s, sizeof(char), strlen(s), stderr);
- fflush(stderr);
- }
-#endif
- html_system(s, 1);
-
- s = make_message("echo showpage | "
- "%s%s -q -dBATCH -dSAFER "
- "-dDEVICEHEIGHTPOINTS=792 "
- "-dDEVICEWIDTHPOINTS=%d -dFIXEDMEDIA=true "
- "-sDEVICE=%s -r%d %s "
- "-sOutputFile=%s %s -\n",
- image_gen,
- EXE_EXT,
- (getMaxX(pageno) * image_res) / postscriptRes,
- image_device,
- image_res,
- antiAlias,
- imagePageName,
- psPageName);
- if (s == NULL)
- sys_fatal("make_message");
-#if defined(DEBUGGING)
- if (debug) {
- fwrite(s, sizeof(char), strlen(s), stderr);
- fflush(stderr);
- }
-#endif
- html_system(s, 1);
- free(s);
- currentPageNo = pageno;
- return 0;
-}
-
-/*
- * min - Return the minimum of two numbers.
- */
-
-int min(int x, int y)
-{
- if (x < y)
- return x;
- else
- return y;
-}
-
-/*
- * max - Return the maximum of two numbers.
- */
-
-int max(int x, int y)
-{
- if (x > y)
- return x;
- else
- return y;
-}
-
-/*
- * getMaxX - Return the largest right-hand position for any image
- * on, pageno.
- */
-
-int imageList::getMaxX(int pageno)
-{
- imageItem *h = head;
- int x = postscriptRes * DEFAULT_LINE_LENGTH;
-
- while (h != NULL) {
- if (h->pageNo == pageno)
- x = max(h->X2, x);
- h = h->next;
- }
- return x;
-}
-
-/*
- * createImage - Generate a minimal png file from the set of page images.
- */
-
-void imageList::createImage(imageItem *i)
-{
- if (i->X1 != -1) {
- char *s;
- int x1 = max(min(i->X1, i->X2) * image_res / postscriptRes
- - IMAGE_BOARDER_PIXELS,
- 0);
- int y1 = max(image_res * vertical_offset / 72
- + min(i->Y1, i->Y2) * image_res / postscriptRes
- - IMAGE_BOARDER_PIXELS,
- 0);
- int x2 = max(i->X1, i->X2) * image_res / postscriptRes
- + IMAGE_BOARDER_PIXELS;
- int y2 = image_res * vertical_offset / 72
- + max(i->Y1, i->Y2) * image_res / postscriptRes
- + 1 + IMAGE_BOARDER_PIXELS;
- if (createPage(i->pageNo) == 0) {
- s = make_message("pnmcut%s %d %d %d %d < %s "
- "| pnmcrop -quiet | pnmtopng%s %s > %s\n",
- EXE_EXT,
- x1, y1, x2 - x1 + 1, y2 - y1 + 1,
- imagePageName,
- EXE_EXT,
- TRANSPARENT,
- i->imageName);
- if (s == NULL)
- sys_fatal("make_message");
-
-#if defined(DEBUGGING)
- if (debug) {
- fprintf(stderr, s);
- fflush(stderr);
- }
-#endif
- html_system(s, 0);
- free(s);
- }
- else {
- fprintf(stderr, "failed to generate image of page %d\n", i->pageNo);
- fflush(stderr);
- }
-#if defined(DEBUGGING)
- }
- else {
- if (debug) {
- fprintf(stderr, "ignoring image as x1 coord is -1\n");
- fflush(stderr);
- }
-#endif
- }
-}
-
-/*
- * add - Add an image description to the imageList.
- */
-
-void imageList::add(int x1, int y1, int x2, int y2,
- int page, int res, int maxx, char *name)
-{
- imageItem *i = new imageItem(x1, y1, x2, y2, page, res, maxx, name);
-
- if (head == NULL) {
- head = i;
- tail = i;
- }
- else {
- tail->next = i;
- tail = i;
- }
-}
-
-/*
- * createImages - For each image descriptor on the imageList,
- * create the actual image.
- */
-
-void imageList::createImages(void)
-{
- imageItem *h = head;
-
- while (h != NULL) {
- createImage(h);
- h = h->next;
- }
-}
-
-static imageList listOfImages; // List of images defined by the region file.
-
-/*
- * generateImages - Parse the region file and generate images
- * from the postscript file. The region file
- * contains the x1,y1--x2,y2 extents of each
- * image.
- */
-
-static void generateImages(char *region_file_name)
-{
- pushBackBuffer *f=new pushBackBuffer(region_file_name);
-
- while (f->putPB(f->getPB()) != eof) {
- if (f->isString("grohtml-info:page")) {
- int page = f->readInt();
- int x1 = f->readInt();
- int y1 = f->readInt();
- int x2 = f->readInt();
- int y2 = f->readInt();
- int maxx = f->readInt();
- char *name = f->readString();
- int res = postscriptRes;
- listOfImages.add(x1, y1, x2, y2, page, res, maxx, name);
- while (f->putPB(f->getPB()) != '\n'
- && f->putPB(f->getPB()) != eof)
- (void)f->getPB();
- if (f->putPB(f->getPB()) == '\n')
- (void)f->getPB();
- }
- else {
- /* Write any error messages out to the user. */
- fputc(f->getPB(), stderr);
- }
- }
-
- listOfImages.createImages();
- if (show_progress) {
- fprintf(stderr, "done\n");
- fflush(stderr);
- }
- delete f;
-}
-
-/*
- * set_redirection - Set up I/O Redirection for handle, was, to refer to
- * stream on handle, willbe.
- */
-
-static void set_redirection(int was, int willbe)
-{
- // Nothing to do if `was' and `willbe' already have same handle.
- if (was != willbe) {
- // Otherwise attempt the specified redirection.
- if (dup2 (willbe, was) < 0) {
- // Redirection failed, so issue diagnostic and bail out.
- fprintf(stderr, "failed to replace fd=%d with %d\n", was, willbe);
- if (willbe == STDOUT_FILENO)
- fprintf(stderr,
- "likely that stdout should be opened before %d\n", was);
- sys_fatal("dup2");
- }
-
- // When redirection has been successfully completed assume redundant
- // handle `willbe' is no longer required, so close it.
- if (close(willbe) < 0)
- // Issue diagnostic if `close' fails.
- sys_fatal("close");
- }
-}
-
-/*
- * save_and_redirect - Get duplicate handle for stream, was, then
- * redirect, was, to refer to, willbe.
- */
-
-static int save_and_redirect(int was, int willbe)
-{
- if (was == willbe)
- // No redirection specified so don't do anything but silently bailing out.
- return (was);
-
- // Proceeding with redirection so first save and verify our duplicate
- // handle for `was'.
- int saved = dup(was);
- if (saved < 0) {
- fprintf(stderr, "unable to get duplicate handle for %d\n", was);
- sys_fatal("dup");
- }
-
- // Duplicate handle safely established so complete redirection.
- set_redirection(was, willbe);
-
- // Finally return the saved duplicate descriptor for the
- // original `was' stream.
- return saved;
-}
-
-/*
- * alterDeviceTo - If, toImage, is set
- * the argument list is altered to include
- * IMAGE_DEVICE and we invoke groff rather than troff.
- * Else
- * set -Thtml and groff.
- */
-
-static void alterDeviceTo(int argc, char *argv[], int toImage)
-{
- int i = 0;
-
- if (toImage) {
- while (i < argc) {
- if (strcmp(argv[i], "-Thtml") == 0)
- argv[i] = (char *)IMAGE_DEVICE;
- i++;
- }
- argv[troff_arg] = (char *)"groff"; /* rather than troff */
- }
- else {
- while (i < argc) {
- if (strcmp(argv[i], IMAGE_DEVICE) == 0)
- argv[i] = (char *)"-Thtml";
- i++;
- }
- argv[troff_arg] = (char *)"groff"; /* use groff -Z */
- }
-}
-
-/*
- * addZ - Append -Z onto the command list for groff.
- */
-
-char **addZ(int argc, char *argv[])
-{
- char **new_argv = (char **)malloc((argc + 2) * sizeof(char *));
- int i = 0;
-
- if (new_argv == NULL)
- sys_fatal("malloc");
-
- if (argc > 0) {
- new_argv[i] = argv[i];
- i++;
- }
- new_argv[i] = (char *)"-Z";
- while (i < argc) {
- new_argv[i + 1] = argv[i];
- i++;
- }
- argc++;
- new_argv[argc] = NULL;
- return new_argv;
-}
-
-/*
- * addRegDef - Append a defined register or string onto the command
- * list for troff.
- */
-
-char **addRegDef(int argc, char *argv[], const char *numReg)
-{
- char **new_argv = (char **)malloc((argc + 2) * sizeof(char *));
- int i = 0;
-
- if (new_argv == NULL)
- sys_fatal("malloc");
-
- while (i < argc) {
- new_argv[i] = argv[i];
- i++;
- }
- new_argv[argc] = strsave(numReg);
- argc++;
- new_argv[argc] = NULL;
- return new_argv;
-}
-
-/*
- * dump_args - Display the argument list.
- */
-
-void dump_args(int argc, char *argv[])
-{
- fprintf(stderr, " %d arguments:", argc);
- for (int i = 0; i < argc; i++)
- fprintf(stderr, " %s", argv[i]);
- fprintf(stderr, "\n");
-}
-
-int char_buffer::run_output_filter(int filter, int /* argc */, char **argv)
-{
- int pipedes[2];
- PID_T child_pid;
- int status;
-
- if (pipe(pipedes) < 0)
- sys_fatal("pipe");
-
-#if MAY_FORK_CHILD_PROCESS
- // This is the UNIX process model. To invoke our post-processor,
- // we must `fork' the current process.
-
- if ((child_pid = fork()) < 0)
- sys_fatal("fork");
-
- else if (child_pid == 0) {
- // This is the child process fork. We redirect its `stdin' stream
- // to read data emerging from our pipe. There is no point in saving,
- // since we won't be able to restore later!
-
- set_redirection(STDIN_FILENO, pipedes[0]);
-
- // The parent process will be writing this data, so we should release
- // the child's writeable handle on the pipe, since we have no use for it.
-
- if (close(pipedes[1]) < 0)
- sys_fatal("close");
-
- // The IMAGE_OUTPUT_FILTER needs special output redirection...
-
- if (filter == IMAGE_OUTPUT_FILTER) {
- // with BOTH `stdout' AND `stderr' diverted to files.
-
- set_redirection(STDOUT_FILENO, PS_OUTPUT_STREAM);
- set_redirection(STDERR_FILENO, REGION_OUTPUT_STREAM);
- }
-
- // Now we are ready to launch the output filter.
-
- execvp(argv[0], argv);
-
- // If we get to here then the `exec...' request for the output filter
- // failed. Diagnose it and bail out.
-
- error("couldn't exec %1: %2", argv[0], strerror(errno), ((char *)0));
- fflush(stderr); // just in case error() didn't
- exit(1);
- }
-
- else {
- // This is the parent process fork. We will be writing data to the
- // filter pipeline, and the child will be reading it. We have no further
- // use for our read handle on the pipe, and should close it.
-
- if (close(pipedes[0]) < 0)
- sys_fatal("close");
-
- // Now we redirect the `stdout' stream to the inlet end of the pipe,
- // and push out the appropiately formatted data to the filter.
-
- pipedes[1] = save_and_redirect(STDOUT_FILENO, pipedes[1]);
- emit_troff_output(DEVICE_FORMAT(filter));
-
- // After emitting all the data we close our connection to the inlet
- // end of the pipe so the child process will detect end of data.
-
- set_redirection(STDOUT_FILENO, pipedes[1]);
-
- // Finally, we must wait for the child process to complete.
-
- if (WAIT(&status, child_pid, _WAIT_CHILD) != child_pid)
- sys_fatal("wait");
- }
-
-#elif MAY_SPAWN_ASYNCHRONOUS_CHILD
-
- // We do not have `fork', (or we prefer not to use it),
- // but asynchronous processes are allowed, passing data through pipes.
- // This should be ok for most Win32 systems and is preferred to `fork'
- // for starting child processes under Cygwin.
-
- // Before we start the post-processor we bind its inherited `stdin'
- // stream to the readable end of our pipe, saving our own `stdin' stream
- // in `pipedes[0]'.
-
- pipedes[0] = save_and_redirect(STDIN_FILENO, pipedes[0]);
-
- // for the Win32 model,
- // we need special provision for saving BOTH `stdout' and `stderr'.
-
- int saved_stdout = dup(STDOUT_FILENO);
- int saved_stderr = STDERR_FILENO;
-
- // The IMAGE_OUTPUT_FILTER needs special output redirection...
-
- if (filter == IMAGE_OUTPUT_FILTER) {
- // with BOTH `stdout' AND `stderr' diverted to files while saving a
- // duplicate handle for `stderr'.
-
- set_redirection(STDOUT_FILENO, PS_OUTPUT_STREAM);
- saved_stderr = save_and_redirect(STDERR_FILENO, REGION_OUTPUT_STREAM);
- }
-
- // We then use an asynchronous spawn request to start the post-processor.
-
- if ((child_pid = spawnvp(_P_NOWAIT, argv[0], argv)) < 0) {
- // Should the spawn request fail we issue a diagnostic and bail out.
-
- error("cannot spawn %1: %2", argv[0], strerror(errno), ((char *)0));
- exit(1);
- }
-
- // Once the post-processor has been started we revert our `stdin'
- // to its original saved source, which also closes the readable handle
- // for the pipe.
-
- set_redirection(STDIN_FILENO, pipedes[0]);
-
- // if we redirected `stderr', for use by the image post-processor,
- // then we also need to reinstate its original assignment.
-
- if (filter == IMAGE_OUTPUT_FILTER)
- set_redirection(STDERR_FILENO, saved_stderr);
-
- // Now we redirect the `stdout' stream to the inlet end of the pipe,
- // and push out the appropiately formatted data to the filter.
-
- set_redirection(STDOUT_FILENO, pipedes[1]);
- emit_troff_output(DEVICE_FORMAT(filter));
-
- // After emitting all the data we close our connection to the inlet
- // end of the pipe so the child process will detect end of data.
-
- set_redirection(STDOUT_FILENO, saved_stdout);
-
- // And finally, we must wait for the child process to complete.
-
- if (WAIT(&status, child_pid, _WAIT_CHILD) != child_pid)
- sys_fatal("wait");
-
-#else /* can't do asynchronous pipes! */
-
- // TODO: code to support an MS-DOS style process model
- // should go here
-
-#endif /* MAY_FORK_CHILD_PROCESS or MAY_SPAWN_ASYNCHRONOUS_CHILD */
-
- return 0;
-}
-
-/*
- * do_html - Set the troff number htmlflip and
- * write out the buffer to troff -Thtml.
- */
-
-int char_buffer::do_html(int argc, char *argv[])
-{
- string s;
-
- alterDeviceTo(argc, argv, 0);
- argv += troff_arg; // skip all arguments up to groff
- argc -= troff_arg;
- argv = addZ(argc, argv);
- argc++;
-
- s = "-dwww-image-template=";
- s += macroset_template; // do not combine these statements,
- // otherwise they will not work
- s += '\0'; // the trailing `\0' is ignored
- argv = addRegDef(argc, argv, s.contents());
- argc++;
-
-#if defined(DEBUGGING)
-# define HTML_DEBUG_STREAM OUTPUT_STREAM(htmlFileName)
- // slight security risk so only enabled if compiled with defined(DEBUGGING)
- if (debug) {
- int saved_stdout = save_and_redirect(STDOUT_FILENO, HTML_DEBUG_STREAM);
- emit_troff_output(DEVICE_FORMAT(HTML_OUTPUT_FILTER));
- set_redirection(STDOUT_FILENO, saved_stdout);
- }
-#endif
-
- return run_output_filter(HTML_OUTPUT_FILTER, argc, argv);
-}
-
-/*
- * do_image - Write out the buffer to troff -Tps.
- */
-
-int char_buffer::do_image(int argc, char *argv[])
-{
- string s;
-
- alterDeviceTo(argc, argv, 1);
- argv += troff_arg; // skip all arguments up to troff/groff
- argc -= troff_arg;
- argv = addRegDef(argc, argv, "-rps4html=1");
- argc++;
-
- s = "-dwww-image-template=";
- s += macroset_template;
- s += '\0';
- argv = addRegDef(argc, argv, s.contents());
- argc++;
-
- // override local settings and produce a page size letter postscript file
- argv = addRegDef(argc, argv, "-P-pletter");
- argc++;
-
-#if defined(DEBUGGING)
-# define IMAGE_DEBUG_STREAM OUTPUT_STREAM(troffFileName)
- // slight security risk so only enabled if compiled with defined(DEBUGGING)
- if (debug) {
- int saved_stdout = save_and_redirect(STDOUT_FILENO, IMAGE_DEBUG_STREAM);
- emit_troff_output(DEVICE_FORMAT(IMAGE_OUTPUT_FILTER));
- set_redirection(STDOUT_FILENO, saved_stdout);
- }
-#endif
-
- return run_output_filter(IMAGE_OUTPUT_FILTER, argc, argv);
-}
-
-static char_buffer inputFile;
-
-/*
- * usage - Emit usage arguments.
- */
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s troffname [-Iimage_name] [-Dimage_directory]\n"
- " [-P-o vertical_image_offset] [-P-i image_resolution]\n"
- " [troff flags]\n",
- program_name);
- fprintf(stream,
- " vertical_image_offset (default %d/72 of an inch)\n",
- vertical_offset);
- fprintf(stream,
- " image_resolution (default %d) pixels per inch\n",
- image_res);
- fprintf(stream,
- " image_name is the name of the stem for all images\n"
- " (default is grohtml-<pid>)\n");
- fprintf(stream,
- " place all png files into image_directory\n");
-}
-
-/*
- * scanArguments - Scan for all arguments including -P-i, -P-o, -P-D,
- * and -P-I. Return the argument index of the first
- * non-option.
- */
-
-static int scanArguments(int argc, char **argv)
-{
- const char *command_prefix = getenv("GROFF_COMMAND_PREFIX");
- if (!command_prefix)
- command_prefix = PROG_PREFIX;
- char *troff_name = new char[strlen(command_prefix) + strlen("troff") + 1];
- strcpy(troff_name, command_prefix);
- strcat(troff_name, "troff");
- int c, i;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((c = getopt_long(argc, argv, "+a:bdD:F:g:hi:I:j:lno:prs:S:v",
- long_options, NULL))
- != EOF)
- switch(c) {
- case 'a':
- textAlphaBits = min(max(MIN_ALPHA_BITS, atoi(optarg)),
- MAX_ALPHA_BITS);
- if (textAlphaBits == 3) {
- error("cannot use 3 bits of antialiasing information");
- exit(1);
- }
- break;
- case 'b':
- // handled by post-grohtml (set background color to white)
- break;
- case 'd':
-#if defined(DEBUGGING)
- debug = TRUE;
-#endif
- break;
- case 'D':
- image_dir = optarg;
- break;
- case 'F':
- font_path.command_line_dir(optarg);
- break;
- case 'g':
- graphicAlphaBits = min(max(MIN_ALPHA_BITS, atoi(optarg)),
- MAX_ALPHA_BITS);
- if (graphicAlphaBits == 3) {
- error("cannot use 3 bits of antialiasing information");
- exit(1);
- }
- break;
- case 'h':
- // handled by post-grohtml
- break;
- case 'i':
- image_res = atoi(optarg);
- break;
- case 'I':
- image_template = optarg;
- break;
- case 'j':
- // handled by post-grohtml (set job name for multiple file output)
- break;
- case 'l':
- // handled by post-grohtml (no automatic section links)
- break;
- case 'n':
- // handled by post-grohtml (generate simple heading anchors)
- break;
- case 'o':
- vertical_offset = atoi(optarg);
- break;
- case 'p':
- show_progress = TRUE;
- break;
- case 'r':
- // handled by post-grohtml (no header and footer lines)
- break;
- case 's':
- // handled by post-grohtml (use font size n as the html base font size)
- break;
- case 'S':
- // handled by post-grohtml (set file split level)
- break;
- case 'v':
- printf("GNU pre-grohtml (groff) version %s\n", Version_string);
- exit(0);
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- break;
- }
-
- i = optind;
- while (i < argc) {
- if (strcmp(argv[i], troff_name) == 0)
- troff_arg = i;
- else if (argv[i][0] != '-')
- return i;
- i++;
- }
- a_delete troff_name;
-
- return argc;
-}
-
-/*
- * makeTempFiles - Name the temporary files.
- */
-
-static int makeTempFiles(void)
-{
-#if defined(DEBUGGING)
- psFileName = DEBUG_FILE("prehtml-ps");
- regionFileName = DEBUG_FILE("prehtml-region");
- imagePageName = DEBUG_FILE("prehtml-page");
- psPageName = DEBUG_FILE("prehtml-psn");
- troffFileName = DEBUG_FILE("prehtml-troff");
- htmlFileName = DEBUG_FILE("prehtml-html");
-#else /* not DEBUGGING */
- FILE *f;
-
- /* psPageName contains a single page of postscript */
- f = xtmpfile(&psPageName,
- PS_TEMPLATE_LONG, PS_TEMPLATE_SHORT,
- TRUE);
- if (f == NULL) {
- sys_fatal("xtmpfile");
- return -1;
- }
- fclose(f);
-
- /* imagePageName contains a bitmap image of the single postscript page */
- f = xtmpfile(&imagePageName,
- PAGE_TEMPLATE_LONG, PAGE_TEMPLATE_SHORT,
- TRUE);
- if (f == NULL) {
- sys_fatal("xtmpfile");
- return -1;
- }
- fclose(f);
-
- /* psFileName contains a postscript file of the complete document */
- f = xtmpfile(&psFileName,
- PS_TEMPLATE_LONG, PS_TEMPLATE_SHORT,
- TRUE);
- if (f == NULL) {
- sys_fatal("xtmpfile");
- return -1;
- }
- fclose(f);
-
- /* regionFileName contains a list of the images and their boxed coordinates */
- f = xtmpfile(&regionFileName,
- REGION_TEMPLATE_LONG, REGION_TEMPLATE_SHORT,
- TRUE);
- if (f == NULL) {
- sys_fatal("xtmpfile");
- return -1;
- }
- fclose(f);
-
-#endif /* not DEBUGGING */
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- int i;
- int found = 0;
- int ok = 1;
-
-#ifdef CAPTURE_MODE
- FILE *dump;
- fprintf(stderr, "%s: invoked with %d arguments ...\n", argv[0], argc);
- for (i = 0; i < argc; i++)
- fprintf(stderr, "%2d: %s\n", i, argv[i]);
- if ((dump = fopen(DEBUG_FILE("pre-html-data"), "wb")) != NULL) {
- while((i = fgetc(stdin)) >= 0)
- fputc(i, dump);
- fclose(dump);
- }
- exit(1);
-#endif /* CAPTURE_MODE */
- device = "html";
- if (!font::load_desc())
- fatal("cannot find devhtml/DESC exiting");
- image_gen = font::image_generator;
- if (image_gen == NULL || (strcmp(image_gen, "") == 0))
- fatal("devhtml/DESC must set the image_generator field, exiting");
- postscriptRes = get_resolution();
- i = scanArguments(argc, argv);
- setupAntiAlias();
- checkImageDir();
- makeFileName();
- while (i < argc) {
- if (argv[i][0] != '-') {
- /* found source file */
- ok = do_file(argv[i]);
- if (!ok)
- return 0;
- found = 1;
- }
- i++;
- }
-
- if (!found)
- do_file("-");
- if (makeTempFiles())
- return 1;
- ok = inputFile.do_image(argc, argv);
- if (ok == 0) {
- generateImages(regionFileName);
- ok = inputFile.do_html(argc, argv);
- }
- return ok;
-}
-
-static int do_file(const char *filename)
-{
- FILE *fp;
-
- current_filename = filename;
- if (strcmp(filename, "-") == 0)
- fp = stdin;
- else {
- fp = fopen(filename, "r");
- if (fp == 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return 0;
- }
- }
-
- if (inputFile.read_file(fp)) {
- // XXX
- }
-
- if (fp != stdin)
- fclose(fp);
- current_filename = NULL;
- return 1;
-}
diff --git a/contrib/groff/src/preproc/html/pre-html.h b/contrib/groff/src/preproc/html/pre-html.h
deleted file mode 100644
index 3eedb21c72bb..000000000000
--- a/contrib/groff/src/preproc/html/pre-html.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk).
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
- * defines functions implemented within pre-html.c
- */
-
-#if !defined(PREHTMLH)
-# define PREHTMLH
-# if defined(PREHTMLC)
-# define EXTERN
-# else
-# define EXTERN extern
-# endif
-
-
-extern void sys_fatal (const char *s);
-
-#undef EXTERN
-#endif
diff --git a/contrib/groff/src/preproc/html/pushback.cpp b/contrib/groff/src/preproc/html/pushback.cpp
deleted file mode 100644
index b71558783508..000000000000
--- a/contrib/groff/src/preproc/html/pushback.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk).
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <signal.h>
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "posix.h"
-#include "nonposix.h"
-
-#include <errno.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "pushback.h"
-#include "pre-html.h"
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-# define ERROR(X) (void)(fprintf(stderr, "%s:%d error %s\n", __FILE__, __LINE__, X) && \
- (fflush(stderr)) && localexit(1))
-
-
-#define MAXPUSHBACKSTACK 4096 /* maximum number of character that can be pushed back */
-
-
-/*
- * constructor for pushBackBuffer
- */
-
-pushBackBuffer::pushBackBuffer (char *filename)
-{
- charStack = (char *)malloc(MAXPUSHBACKSTACK);
- if (charStack == 0) {
- sys_fatal("malloc");
- }
- stackPtr = 0; /* index to push back stack */
- debug = 0;
- verbose = 0;
- eofFound = FALSE;
- lineNo = 1;
- if (strcmp(filename, "") != 0) {
- stdIn = dup(0);
- close(0);
- if (open(filename, O_RDONLY) != 0) {
- sys_fatal("when trying to open file");
- } else {
- fileName = filename;
- }
- }
-}
-
-pushBackBuffer::~pushBackBuffer ()
-{
- if (charStack != 0) {
- free(charStack);
- }
- close(0);
- /* restore stdin in file descriptor 0 */
- dup(stdIn);
- close(stdIn);
-}
-
-/*
- * localexit - wraps exit with a return code to aid the ERROR macro.
- */
-
-int localexit (int i)
-{
- exit(i);
- return( 1 );
-}
-
-/*
- * getPB - returns a character, possibly a pushed back character.
- */
-
-char pushBackBuffer::getPB (void)
-{
- if (stackPtr>0) {
- stackPtr--;
- return( charStack[stackPtr] );
- } else {
- char ch;
-
- if (read(0, &ch, 1) == 1) {
- if (verbose) {
- printf("%c", ch);
- }
- if (ch == '\n') {
- lineNo++;
- }
- return( ch );
- } else {
- eofFound = TRUE;
- return( eof );
- }
- }
-}
-
-/*
- * putPB - pushes a character onto the push back stack.
- * The same character is returned.
- */
-
-char pushBackBuffer::putPB (char ch)
-{
- if (stackPtr<MAXPUSHBACKSTACK) {
- charStack[stackPtr] = ch ;
- stackPtr++;
- } else {
- ERROR("max push back stack exceeded, increase MAXPUSHBACKSTACK constant");
- }
- return( ch );
-}
-
-/*
- * isWhite - returns TRUE if a white character is found. This character is NOT consumed.
- */
-
-static int isWhite (char ch)
-{
- return( (ch==' ') || (ch == '\t') || (ch == '\n') );
-}
-
-/*
- * skipToNewline - skips characters until a newline is seen.
- */
-
-void pushBackBuffer::skipToNewline (void)
-{
- while ((putPB(getPB()) != '\n') && (! eofFound)) {
- getPB();
- }
-}
-
-/*
- * skipUntilToken - skips until a token is seen
- */
-
-void pushBackBuffer::skipUntilToken (void)
-{
- char ch;
-
- while ((isWhite(putPB(getPB())) || (putPB(getPB()) == '#')) && (! eofFound)) {
- ch = getPB();
- if (ch == '#') {
- skipToNewline();
- }
- }
-}
-
-/*
- * isString - returns TRUE if the string, s, matches the pushed back string.
- * if TRUE is returned then this string is consumed, otherwise it is
- * left alone.
- */
-
-int pushBackBuffer::isString (const char *s)
-{
- int length=strlen(s);
- int i=0;
-
- while ((i<length) && (putPB(getPB())==s[i])) {
- if (getPB() != s[i]) {
- ERROR("assert failed");
- }
- i++;
- }
- if (i==length) {
- return( TRUE );
- } else {
- i--;
- while (i>=0) {
- if (putPB(s[i]) != s[i]) {
- ERROR("assert failed");
- }
- i--;
- }
- }
- return( FALSE );
-}
-
-/*
- * isDigit - returns TRUE if the character, ch, is a digit.
- */
-
-static int isDigit (char ch)
-{
- return( ((ch>='0') && (ch<='9')) );
-}
-
-/*
- * isHexDigit - returns TRUE if the character, ch, is a hex digit.
- */
-
-#if 0
-static int isHexDigit (char ch)
-{
- return( (isDigit(ch)) || ((ch>='a') && (ch<='f')) );
-}
-#endif
-
-/*
- * readInt - returns an integer from the input stream.
- */
-
-int pushBackBuffer::readInt (void)
-{
- int c =0;
- int i =0;
- int s =1;
- char ch=getPB();
-
- while (isWhite(ch)) {
- ch=getPB();
- }
- // now read integer
-
- if (ch == '-') {
- s = -1;
- ch = getPB();
- }
- while (isDigit(ch)) {
- i *= 10;
- if ((ch>='0') && (ch<='9')) {
- i += (int)(ch-'0');
- }
- ch = getPB();
- c++;
- }
- if (ch != putPB(ch)) {
- ERROR("assert failed");
- }
- return( i*s );
-}
-
-/*
- * convertToFloat - converts integers, a and b into a.b
- */
-
-static double convertToFloat (int a, int b)
-{
- int c=10;
- double f;
-
- while (b>c) {
- c *= 10;
- }
- f = ((double)a) + (((double)b)/((double)c));
- return( f );
-}
-
-/*
- * readNumber - returns a float representing the word just read.
- */
-
-double pushBackBuffer::readNumber (void)
-{
- int i;
- char ch;
-
- i = readInt();
- if ((ch = getPB()) == '.') {
- return convertToFloat(i, readInt());
- }
- putPB(ch);
- return (double)i;
-}
-
-/*
- * readString - reads a string terminated by white space
- * and returns a malloced area of memory containing
- * a copy of the characters.
- */
-
-char *pushBackBuffer::readString (void)
-{
- char buffer[MAXPUSHBACKSTACK];
- char *str = 0;
- int i=0;
- char ch=getPB();
-
- while (isWhite(ch)) {
- ch=getPB();
- }
- while ((i < MAXPUSHBACKSTACK) && (! isWhite(ch)) && (! eofFound)) {
- buffer[i] = ch;
- i++;
- ch = getPB();
- }
- if (i < MAXPUSHBACKSTACK) {
- buffer[i] = (char)0;
- str = (char *)malloc(strlen(buffer)+1);
- strcpy(str, buffer);
- }
- return( str );
-}
diff --git a/contrib/groff/src/preproc/html/pushback.h b/contrib/groff/src/preproc/html/pushback.h
deleted file mode 100644
index 3fddad66f11d..000000000000
--- a/contrib/groff/src/preproc/html/pushback.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// -*- C -*-
-/* Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk).
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-#define eof (char)-1
-
-
-/*
- * defines the class and methods implemented within pushback.cpp
- */
-
-class pushBackBuffer
-{
- private:
- char *charStack;
- int stackPtr; /* index to push back stack */
- int debug;
- int verbose;
- int eofFound;
- char *fileName;
- int lineNo;
- int stdIn;
-
- public:
- pushBackBuffer (char *);
- ~ pushBackBuffer ();
- char getPB (void);
- char putPB (char ch);
- void skipUntilToken (void);
- void skipToNewline (void);
- double readNumber (void);
- int readInt (void);
- char *readString (void);
- int isString (const char *string);
-};
-
-
diff --git a/contrib/groff/src/preproc/pic/Makefile.sub b/contrib/groff/src/preproc/pic/Makefile.sub
deleted file mode 100644
index 94b41fee92b7..000000000000
--- a/contrib/groff/src/preproc/pic/Makefile.sub
+++ /dev/null
@@ -1,31 +0,0 @@
-PROG=pic$(EXEEXT)
-MAN1=pic.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- pic.$(OBJEXT) \
- lex.$(OBJEXT) \
- main.$(OBJEXT) \
- object.$(OBJEXT) \
- common.$(OBJEXT) \
- troff.$(OBJEXT) \
- tex.$(OBJEXT)
- # fig.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/lex.cpp \
- $(srcdir)/main.cpp \
- $(srcdir)/object.cpp \
- $(srcdir)/common.cpp \
- $(srcdir)/troff.cpp \
- $(srcdir)/tex.cpp
-HDRS=\
- $(srcdir)/common.h \
- $(srcdir)/object.h \
- $(srcdir)/output.h \
- $(srcdir)/pic.h \
- $(srcdir)/position.h \
- $(srcdir)/text.h
-GRAM=$(srcdir)/pic.y
-YTABC=pic.cpp
-YTABH=pic_tab.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/pic/TODO b/contrib/groff/src/preproc/pic/TODO
deleted file mode 100644
index a1d7554d4529..000000000000
--- a/contrib/groff/src/preproc/pic/TODO
+++ /dev/null
@@ -1,35 +0,0 @@
-In troff mode, dotted and dashed splines.
-
-Make DELIMITED have type lstr; this would allow us to give better
-error messages for problems within the body of for and if constructs.
-
-In troff mode without -x, fake \D't' with .ps commands.
-
-Perhaps an option to set command char.
-
-Add an output class for dumb line printers. It wouldn't be pretty but
-it would be better than nothing. Integrate it with texinfo. Useful
-for groff -Tascii as well.
-
-Option to allow better positioning of arrowheads on arcs.
-
-Perhaps add PostScript output mode.
-
-Change the interface to the output class so that output devices have
-the opportunity to handle arrowheads themselves.
-
-Consider whether the line thickness should scale.
-
-Consider whether the test in a for loop should be fuzzy (as it
-apparently is in grap).
-
-Possibly change fillval so that zero is black.
-
-Provide a way of getting text blocks (positioned with `.in' rather
-than \h), into pic. Should be possible to use block of diverted text
-in pic. Possibly something similar to T{ and T} in tbl.
-
-Option to provide macro backtraces.
-
-Have a path that is searched by `copy' statement. Set by environment
-variable or command line option.
diff --git a/contrib/groff/src/preproc/pic/common.cpp b/contrib/groff/src/preproc/pic/common.cpp
deleted file mode 100644
index 47a23cd920ef..000000000000
--- a/contrib/groff/src/preproc/pic/common.cpp
+++ /dev/null
@@ -1,647 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-#include "common.h"
-
-// output a dashed circle as a series of arcs
-
-void common_output::dashed_circle(const position &cent, double rad,
- const line_type &lt)
-{
- assert(lt.type == line_type::dashed);
- line_type slt = lt;
- slt.type = line_type::solid;
- double dash_angle = lt.dash_width/rad;
- int ndashes;
- double gap_angle;
- if (dash_angle >= M_PI/4.0) {
- if (dash_angle < M_PI/2.0) {
- gap_angle = M_PI/2.0 - dash_angle;
- ndashes = 4;
- }
- else if (dash_angle < M_PI) {
- gap_angle = M_PI - dash_angle;
- ndashes = 2;
- }
- else {
- circle(cent, rad, slt, -1.0);
- return;
- }
- }
- else {
- ndashes = 4*int(ceil(M_PI/(4.0*dash_angle)));
- gap_angle = (M_PI*2.0)/ndashes - dash_angle;
- }
- for (int i = 0; i < ndashes; i++) {
- double start_angle = i*(dash_angle+gap_angle) - dash_angle/2.0;
- solid_arc(cent, rad, start_angle, start_angle + dash_angle, lt);
- }
-}
-
-// output a dotted circle as a series of dots
-
-void common_output::dotted_circle(const position &cent, double rad,
- const line_type &lt)
-{
- assert(lt.type == line_type::dotted);
- double gap_angle = lt.dash_width/rad;
- int ndots;
- if (gap_angle >= M_PI/2.0) {
- // always have at least 2 dots
- gap_angle = M_PI;
- ndots = 2;
- }
- else {
- ndots = 4*int(M_PI/(2.0*gap_angle));
- gap_angle = (M_PI*2.0)/ndots;
- }
- double ang = 0.0;
- for (int i = 0; i < ndots; i++, ang += gap_angle)
- dot(cent + position(cos(ang), sin(ang))*rad, lt);
-}
-
-// recursive function for dash drawing, used by dashed_ellipse
-
-void common_output::ellipse_arc(const position &cent,
- const position &z0, const position &z1,
- const distance &dim, const line_type &lt)
-{
- assert(lt.type == line_type::solid);
- assert(dim.x != 0 && dim.y != 0);
- double eps = 0.0001;
- position zml = (z0 + z1) / 2;
- // apply affine transformation (from ellipse to circle) to compute angle
- // of new position, then invert transformation to get exact position
- double psi = atan2(zml.y / dim.y, zml.x / dim.x);
- position zm = position(dim.x * cos(psi), dim.y * sin(psi));
- // to approximate the ellipse arc with one or more circle arcs, we
- // first compute the radius of curvature in zm
- double a_2 = dim.x * dim.x;
- double a_4 = a_2 * a_2;
- double b_2 = dim.y * dim.y;
- double b_4 = b_2 * b_2;
- double e_2 = a_2 - b_2;
- double temp = a_4 * zm.y * zm.y + b_4 * zm.x * zm.x;
- double rho = sqrt(temp / a_4 / b_4 * temp / a_4 / b_4 * temp);
- // compute center of curvature circle
- position M = position(e_2 * zm.x / a_2 * zm.x / a_2 * zm.x,
- -e_2 * zm.y / b_2 * zm.y / b_2 * zm.y);
- // compute distance between circle and ellipse arc at start and end
- double phi0 = atan2(z0.y - M.y, z0.x - M.x);
- double phi1 = atan2(z1.y - M.y, z1.x - M.x);
- position M0 = position(rho * cos(phi0), rho * sin(phi0)) + M;
- position M1 = position(rho * cos(phi1), rho * sin(phi1)) + M;
- double dist0 = hypot(z0 - M0) / sqrt(z0 * z0);
- double dist1 = hypot(z1 - M1) / sqrt(z1 * z1);
- if (dist0 < eps && dist1 < eps)
- solid_arc(M + cent, rho, phi0, phi1, lt);
- else {
- ellipse_arc(cent, z0, zm, dim, lt);
- ellipse_arc(cent, zm, z1, dim, lt);
- }
-}
-
-// output a dashed ellipse as a series of arcs
-
-void common_output::dashed_ellipse(const position &cent, const distance &dim,
- const line_type &lt)
-{
- assert(lt.type == line_type::dashed);
- double dim_x = dim.x / 2;
- double dim_y = dim.y / 2;
- line_type slt = lt;
- slt.type = line_type::solid;
- double dw = lt.dash_width;
- // we use an approximation to compute the ellipse length (found in:
- // Bronstein, Semendjajew, Taschenbuch der Mathematik)
- double lambda = (dim.x - dim.y) / (dim.x + dim.y);
- double le = M_PI / 2 * (dim.x + dim.y)
- * ((64 - 3 * lambda * lambda * lambda * lambda )
- / (64 - 16 * lambda * lambda));
- // for symmetry we make nmax a multiple of 8
- int nmax = 8 * int(le / dw / 8 + 0.5);
- if (nmax < 8) {
- nmax = 8;
- dw = le / 8;
- }
- int ndash = nmax / 2;
- double gapwidth = (le - dw * ndash) / ndash;
- double l = 0;
- position z = position(dim_x, 0);
- position zdot = z;
- int j = 0;
- int jmax = int(10 / lt.dash_width);
- for (int i = 0; i <= nmax; i++) {
- position zold = z;
- position zpre = zdot;
- double ld = (int(i / 2) + 0.5) * dw + int((i + 1) / 2) * gapwidth;
- double lold = 0;
- double dl = 1;
- // find next position for fixed arc length
- while (l < ld) {
- j++;
- lold = l;
- zold = z;
- double phi = j * 2 * M_PI / jmax;
- z = position(dim_x * cos(phi), dim_y * sin(phi));
- dl = hypot(z - zold);
- l += dl;
- }
- // interpolate linearly between the last two points,
- // using the length difference as the scaling factor
- double delta = (ld - lold) / dl;
- zdot = zold + (z - zold) * delta;
- // compute angle of new position on the affine circle
- // and use it to get the exact value on the ellipse
- double psi = atan2(zdot.y / dim_y, zdot.x / dim_x);
- zdot = position(dim_x * cos(psi), dim_y * sin(psi));
- if ((i % 2 == 0) && (i > 1))
- ellipse_arc(cent, zpre, zdot, dim / 2, slt);
- }
-}
-
-// output a dotted ellipse as a series of dots
-
-void common_output::dotted_ellipse(const position &cent, const distance &dim,
- const line_type &lt)
-{
- assert(lt.type == line_type::dotted);
- double dim_x = dim.x / 2;
- double dim_y = dim.y / 2;
- line_type slt = lt;
- slt.type = line_type::solid;
- // we use an approximation to compute the ellipse length (found in:
- // Bronstein, Semendjajew, Taschenbuch der Mathematik)
- double lambda = (dim.x - dim.y) / (dim.x + dim.y);
- double le = M_PI / 2 * (dim.x + dim.y)
- * ((64 - 3 * lambda * lambda * lambda * lambda )
- / (64 - 16 * lambda * lambda));
- // for symmetry we make nmax a multiple of 4
- int ndots = 4 * int(le / lt.dash_width / 4 + 0.5);
- if (ndots < 4)
- ndots = 4;
- double l = 0;
- position z = position(dim_x, 0);
- int j = 0;
- int jmax = int(10 / lt.dash_width);
- for (int i = 1; i <= ndots; i++) {
- position zold = z;
- double lold = l;
- double ld = i * le / ndots;
- double dl = 1;
- // find next position for fixed arc length
- while (l < ld) {
- j++;
- lold = l;
- zold = z;
- double phi = j * 2 * M_PI / jmax;
- z = position(dim_x * cos(phi), dim_y * sin(phi));
- dl = hypot(z - zold);
- l += dl;
- }
- // interpolate linearly between the last two points,
- // using the length difference as the scaling factor
- double delta = (ld - lold) / dl;
- position zdot = zold + (z - zold) * delta;
- // compute angle of new position on the affine circle
- // and use it to get the exact value on the ellipse
- double psi = atan2(zdot.y / dim_y, zdot.x / dim_x);
- zdot = position(dim_x * cos(psi), dim_y * sin(psi));
- dot(cent + zdot, slt);
- }
-}
-
-// return non-zero iff we can compute a center
-
-int compute_arc_center(const position &start, const position &cent,
- const position &end, position *result)
-{
- // This finds the point along the vector from start to cent that
- // is equidistant between start and end.
- distance c = cent - start;
- distance e = end - start;
- double n = c*e;
- if (n == 0.0)
- return 0;
- *result = start + c*((e*e)/(2.0*n));
- return 1;
-}
-
-// output a dashed arc as a series of arcs
-
-void common_output::dashed_arc(const position &start, const position &cent,
- const position &end, const line_type &lt)
-{
- assert(lt.type == line_type::dashed);
- position c;
- if (!compute_arc_center(start, cent, end, &c)) {
- line(start, &end, 1, lt);
- return;
- }
- distance start_offset = start - c;
- distance end_offset = end - c;
- double start_angle = atan2(start_offset.y, start_offset.x);
- double end_angle = atan2(end_offset.y, end_offset.x);
- double rad = hypot(c - start);
- double dash_angle = lt.dash_width/rad;
- double total_angle = end_angle - start_angle;
- while (total_angle < 0)
- total_angle += M_PI + M_PI;
- if (total_angle <= dash_angle*2.0) {
- solid_arc(cent, rad, start_angle, end_angle, lt);
- return;
- }
- int ndashes = int((total_angle - dash_angle)/(dash_angle*2.0) + .5);
- double dash_and_gap_angle = (total_angle - dash_angle)/ndashes;
- for (int i = 0; i <= ndashes; i++)
- solid_arc(cent, rad, start_angle + i*dash_and_gap_angle,
- start_angle + i*dash_and_gap_angle + dash_angle, lt);
-}
-
-// output a dotted arc as a series of dots
-
-void common_output::dotted_arc(const position &start, const position &cent,
- const position &end, const line_type &lt)
-{
- assert(lt.type == line_type::dotted);
- position c;
- if (!compute_arc_center(start, cent, end, &c)) {
- line(start, &end, 1, lt);
- return;
- }
- distance start_offset = start - c;
- distance end_offset = end - c;
- double start_angle = atan2(start_offset.y, start_offset.x);
- double total_angle = atan2(end_offset.y, end_offset.x) - start_angle;
- while (total_angle < 0)
- total_angle += M_PI + M_PI;
- double rad = hypot(c - start);
- int ndots = int(total_angle/(lt.dash_width/rad) + .5);
- if (ndots == 0)
- dot(start, lt);
- else {
- for (int i = 0; i <= ndots; i++) {
- double a = start_angle + (total_angle*i)/ndots;
- dot(cent + position(cos(a), sin(a))*rad, lt);
- }
- }
-}
-
-void common_output::solid_arc(const position &cent, double rad,
- double start_angle, double end_angle,
- const line_type &lt)
-{
- line_type slt = lt;
- slt.type = line_type::solid;
- arc(cent + position(cos(start_angle), sin(start_angle))*rad,
- cent,
- cent + position(cos(end_angle), sin(end_angle))*rad,
- slt);
-}
-
-
-void common_output::rounded_box(const position &cent, const distance &dim,
- double rad, const line_type &lt, double fill)
-{
- if (fill >= 0.0)
- filled_rounded_box(cent, dim, rad, fill);
- switch (lt.type) {
- case line_type::invisible:
- break;
- case line_type::dashed:
- dashed_rounded_box(cent, dim, rad, lt);
- break;
- case line_type::dotted:
- dotted_rounded_box(cent, dim, rad, lt);
- break;
- case line_type::solid:
- solid_rounded_box(cent, dim, rad, lt);
- break;
- default:
- assert(0);
- }
-}
-
-
-void common_output::dashed_rounded_box(const position &cent,
- const distance &dim, double rad,
- const line_type &lt)
-{
- line_type slt = lt;
- slt.type = line_type::solid;
-
- double hor_length = dim.x + (M_PI/2.0 - 2.0)*rad;
- int n_hor_dashes = int(hor_length/(lt.dash_width*2.0) + .5);
- double hor_gap_width = (n_hor_dashes != 0
- ? hor_length/n_hor_dashes - lt.dash_width
- : 0.0);
-
- double vert_length = dim.y + (M_PI/2.0 - 2.0)*rad;
- int n_vert_dashes = int(vert_length/(lt.dash_width*2.0) + .5);
- double vert_gap_width = (n_vert_dashes != 0
- ? vert_length/n_vert_dashes - lt.dash_width
- : 0.0);
- // Note that each corner arc has to be split into two for dashing,
- // because one part is dashed using vert_gap_width, and the other
- // using hor_gap_width.
- double offset = lt.dash_width/2.0;
- dash_arc(cent + position(dim.x/2.0 - rad, -dim.y/2.0 + rad), rad,
- -M_PI/4.0, 0, slt, lt.dash_width, vert_gap_width, &offset);
- dash_line(cent + position(dim.x/2.0, -dim.y/2.0 + rad),
- cent + position(dim.x/2.0, dim.y/2.0 - rad),
- slt, lt.dash_width, vert_gap_width, &offset);
- dash_arc(cent + position(dim.x/2.0 - rad, dim.y/2.0 - rad), rad,
- 0, M_PI/4.0, slt, lt.dash_width, vert_gap_width, &offset);
-
- offset = lt.dash_width/2.0;
- dash_arc(cent + position(dim.x/2.0 - rad, dim.y/2.0 - rad), rad,
- M_PI/4.0, M_PI/2, slt, lt.dash_width, hor_gap_width, &offset);
- dash_line(cent + position(dim.x/2.0 - rad, dim.y/2.0),
- cent + position(-dim.x/2.0 + rad, dim.y/2.0),
- slt, lt.dash_width, hor_gap_width, &offset);
- dash_arc(cent + position(-dim.x/2.0 + rad, dim.y/2.0 - rad), rad,
- M_PI/2, 3*M_PI/4.0, slt, lt.dash_width, hor_gap_width, &offset);
-
- offset = lt.dash_width/2.0;
- dash_arc(cent + position(-dim.x/2.0 + rad, dim.y/2.0 - rad), rad,
- 3.0*M_PI/4.0, M_PI, slt, lt.dash_width, vert_gap_width, &offset);
- dash_line(cent + position(-dim.x/2.0, dim.y/2.0 - rad),
- cent + position(-dim.x/2.0, -dim.y/2.0 + rad),
- slt, lt.dash_width, vert_gap_width, &offset);
- dash_arc(cent + position(-dim.x/2.0 + rad, -dim.y/2.0 + rad), rad,
- M_PI, 5.0*M_PI/4.0, slt, lt.dash_width, vert_gap_width, &offset);
-
- offset = lt.dash_width/2.0;
- dash_arc(cent + position(-dim.x/2.0 + rad, -dim.y/2.0 + rad), rad,
- 5*M_PI/4.0, 3*M_PI/2.0, slt, lt.dash_width, hor_gap_width, &offset);
- dash_line(cent + position(-dim.x/2.0 + rad, -dim.y/2.0),
- cent + position(dim.x/2.0 - rad, -dim.y/2.0),
- slt, lt.dash_width, hor_gap_width, &offset);
- dash_arc(cent + position(dim.x/2.0 - rad, -dim.y/2.0 + rad), rad,
- 3*M_PI/2, 7*M_PI/4, slt, lt.dash_width, hor_gap_width, &offset);
-}
-
-// Used by dashed_rounded_box.
-
-void common_output::dash_arc(const position &cent, double rad,
- double start_angle, double end_angle,
- const line_type &lt,
- double dash_width, double gap_width,
- double *offsetp)
-{
- double length = (end_angle - start_angle)*rad;
- double pos = 0.0;
- for (;;) {
- if (*offsetp >= dash_width) {
- double rem = dash_width + gap_width - *offsetp;
- if (pos + rem > length) {
- *offsetp += length - pos;
- break;
- }
- else {
- pos += rem;
- *offsetp = 0.0;
- }
- }
- else {
- double rem = dash_width - *offsetp;
- if (pos + rem > length) {
- solid_arc(cent, rad, start_angle + pos/rad, end_angle, lt);
- *offsetp += length - pos;
- break;
- }
- else {
- solid_arc(cent, rad, start_angle + pos/rad,
- start_angle + (pos + rem)/rad, lt);
- pos += rem;
- *offsetp = dash_width;
- }
- }
- }
-}
-
-// Used by dashed_rounded_box.
-
-void common_output::dash_line(const position &start, const position &end,
- const line_type &lt,
- double dash_width, double gap_width,
- double *offsetp)
-{
- distance dist = end - start;
- double length = hypot(dist);
- if (length == 0.0)
- return;
- double pos = 0.0;
- for (;;) {
- if (*offsetp >= dash_width) {
- double rem = dash_width + gap_width - *offsetp;
- if (pos + rem > length) {
- *offsetp += length - pos;
- break;
- }
- else {
- pos += rem;
- *offsetp = 0.0;
- }
- }
- else {
- double rem = dash_width - *offsetp;
- if (pos + rem > length) {
- line(start + dist*(pos/length), &end, 1, lt);
- *offsetp += length - pos;
- break;
- }
- else {
- position p(start + dist*((pos + rem)/length));
- line(start + dist*(pos/length), &p, 1, lt);
- pos += rem;
- *offsetp = dash_width;
- }
- }
- }
-}
-
-void common_output::dotted_rounded_box(const position &cent,
- const distance &dim, double rad,
- const line_type &lt)
-{
- line_type slt = lt;
- slt.type = line_type::solid;
-
- double hor_length = dim.x + (M_PI/2.0 - 2.0)*rad;
- int n_hor_dots = int(hor_length/lt.dash_width + .5);
- double hor_gap_width = (n_hor_dots != 0
- ? hor_length/n_hor_dots
- : lt.dash_width);
-
- double vert_length = dim.y + (M_PI/2.0 - 2.0)*rad;
- int n_vert_dots = int(vert_length/lt.dash_width + .5);
- double vert_gap_width = (n_vert_dots != 0
- ? vert_length/n_vert_dots
- : lt.dash_width);
- double epsilon = lt.dash_width/(rad*100.0);
-
- double offset = 0.0;
- dot_arc(cent + position(dim.x/2.0 - rad, -dim.y/2.0 + rad), rad,
- -M_PI/4.0, 0, slt, vert_gap_width, &offset);
- dot_line(cent + position(dim.x/2.0, -dim.y/2.0 + rad),
- cent + position(dim.x/2.0, dim.y/2.0 - rad),
- slt, vert_gap_width, &offset);
- dot_arc(cent + position(dim.x/2.0 - rad, dim.y/2.0 - rad), rad,
- 0, M_PI/4.0 - epsilon, slt, vert_gap_width, &offset);
-
- offset = 0.0;
- dot_arc(cent + position(dim.x/2.0 - rad, dim.y/2.0 - rad), rad,
- M_PI/4.0, M_PI/2, slt, hor_gap_width, &offset);
- dot_line(cent + position(dim.x/2.0 - rad, dim.y/2.0),
- cent + position(-dim.x/2.0 + rad, dim.y/2.0),
- slt, hor_gap_width, &offset);
- dot_arc(cent + position(-dim.x/2.0 + rad, dim.y/2.0 - rad), rad,
- M_PI/2, 3*M_PI/4.0 - epsilon, slt, hor_gap_width, &offset);
-
- offset = 0.0;
- dot_arc(cent + position(-dim.x/2.0 + rad, dim.y/2.0 - rad), rad,
- 3.0*M_PI/4.0, M_PI, slt, vert_gap_width, &offset);
- dot_line(cent + position(-dim.x/2.0, dim.y/2.0 - rad),
- cent + position(-dim.x/2.0, -dim.y/2.0 + rad),
- slt, vert_gap_width, &offset);
- dot_arc(cent + position(-dim.x/2.0 + rad, -dim.y/2.0 + rad), rad,
- M_PI, 5.0*M_PI/4.0 - epsilon, slt, vert_gap_width, &offset);
-
- offset = 0.0;
- dot_arc(cent + position(-dim.x/2.0 + rad, -dim.y/2.0 + rad), rad,
- 5*M_PI/4.0, 3*M_PI/2.0, slt, hor_gap_width, &offset);
- dot_line(cent + position(-dim.x/2.0 + rad, -dim.y/2.0),
- cent + position(dim.x/2.0 - rad, -dim.y/2.0),
- slt, hor_gap_width, &offset);
- dot_arc(cent + position(dim.x/2.0 - rad, -dim.y/2.0 + rad), rad,
- 3*M_PI/2, 7*M_PI/4 - epsilon, slt, hor_gap_width, &offset);
-}
-
-// Used by dotted_rounded_box.
-
-void common_output::dot_arc(const position &cent, double rad,
- double start_angle, double end_angle,
- const line_type &lt, double gap_width,
- double *offsetp)
-{
- double length = (end_angle - start_angle)*rad;
- double pos = 0.0;
- for (;;) {
- if (*offsetp == 0.0) {
- double ang = start_angle + pos/rad;
- dot(cent + position(cos(ang), sin(ang))*rad, lt);
- }
- double rem = gap_width - *offsetp;
- if (pos + rem > length) {
- *offsetp += length - pos;
- break;
- }
- else {
- pos += rem;
- *offsetp = 0.0;
- }
- }
-}
-
-// Used by dotted_rounded_box.
-
-void common_output::dot_line(const position &start, const position &end,
- const line_type &lt, double gap_width,
- double *offsetp)
-{
- distance dist = end - start;
- double length = hypot(dist);
- if (length == 0.0)
- return;
- double pos = 0.0;
- for (;;) {
- if (*offsetp == 0.0)
- dot(start + dist*(pos/length), lt);
- double rem = gap_width - *offsetp;
- if (pos + rem > length) {
- *offsetp += length - pos;
- break;
- }
- else {
- pos += rem;
- *offsetp = 0.0;
- }
- }
-}
-
-void common_output::solid_rounded_box(const position &cent,
- const distance &dim, double rad,
- const line_type &lt)
-{
- position tem = cent - dim/2.0;
- arc(tem + position(0.0, rad),
- tem + position(rad, rad),
- tem + position(rad, 0.0),
- lt);
- tem = cent + position(-dim.x/2.0, dim.y/2.0);
- arc(tem + position(rad, 0.0),
- tem + position(rad, -rad),
- tem + position(0.0, -rad),
- lt);
- tem = cent + dim/2.0;
- arc(tem + position(0.0, -rad),
- tem + position(-rad, -rad),
- tem + position(-rad, 0.0),
- lt);
- tem = cent + position(dim.x/2.0, -dim.y/2.0);
- arc(tem + position(-rad, 0.0),
- tem + position(-rad, rad),
- tem + position(0.0, rad),
- lt);
- position end;
- end = cent + position(-dim.x/2.0, dim.y/2.0 - rad);
- line(cent - dim/2.0 + position(0.0, rad), &end, 1, lt);
- end = cent + position(dim.x/2.0 - rad, dim.y/2.0);
- line(cent + position(-dim.x/2.0 + rad, dim.y/2.0), &end, 1, lt);
- end = cent + position(dim.x/2.0, -dim.y/2.0 + rad);
- line(cent + position(dim.x/2.0, dim.y/2.0 - rad), &end, 1, lt);
- end = cent + position(-dim.x/2.0 + rad, -dim.y/2.0);
- line(cent + position(dim.x/2.0 - rad, -dim.y/2.0), &end, 1, lt);
-}
-
-void common_output::filled_rounded_box(const position &cent,
- const distance &dim, double rad,
- double fill)
-{
- line_type ilt;
- ilt.type = line_type::invisible;
- circle(cent + position(dim.x/2.0 - rad, dim.y/2.0 - rad), rad, ilt, fill);
- circle(cent + position(-dim.x/2.0 + rad, dim.y/2.0 - rad), rad, ilt, fill);
- circle(cent + position(-dim.x/2.0 + rad, -dim.y/2.0 + rad), rad, ilt, fill);
- circle(cent + position(dim.x/2.0 - rad, -dim.y/2.0 + rad), rad, ilt, fill);
- position vec[4];
- vec[0] = cent + position(dim.x/2.0, dim.y/2.0 - rad);
- vec[1] = cent + position(-dim.x/2.0, dim.y/2.0 - rad);
- vec[2] = cent + position(-dim.x/2.0, -dim.y/2.0 + rad);
- vec[3] = cent + position(dim.x/2.0, -dim.y/2.0 + rad);
- polygon(vec, 4, ilt, fill);
- vec[0] = cent + position(dim.x/2.0 - rad, dim.y/2.0);
- vec[1] = cent + position(-dim.x/2.0 + rad, dim.y/2.0);
- vec[2] = cent + position(-dim.x/2.0 + rad, -dim.y/2.0);
- vec[3] = cent + position(dim.x/2.0 - rad, -dim.y/2.0);
- polygon(vec, 4, ilt, fill);
-}
diff --git a/contrib/groff/src/preproc/pic/common.h b/contrib/groff/src/preproc/pic/common.h
deleted file mode 100644
index 50238344d8a4..000000000000
--- a/contrib/groff/src/preproc/pic/common.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 1993, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class common_output : public output {
-private:
- void dash_line(const position &start, const position &end,
- const line_type &lt, double dash_width, double gap_width,
- double *offsetp);
- void dash_arc(const position &cent, double rad,
- double start_angle, double end_angle, const line_type &lt,
- double dash_width, double gap_width, double *offsetp);
- void dot_line(const position &start, const position &end,
- const line_type &lt, double gap_width, double *offsetp);
- void dot_arc(const position &cent, double rad,
- double start_angle, double end_angle, const line_type &lt,
- double gap_width, double *offsetp);
-protected:
- virtual void dot(const position &, const line_type &) = 0;
- void ellipse_arc(const position &, const position &,
- const position &, const distance &,
- const line_type &);
- void dashed_circle(const position &, double rad, const line_type &);
- void dotted_circle(const position &, double rad, const line_type &);
- void dashed_ellipse(const position &, const distance &, const line_type &);
- void dotted_ellipse(const position &, const distance &, const line_type &);
- void dashed_arc(const position &, const position &, const position &,
- const line_type &);
- void dotted_arc(const position &, const position &, const position &,
- const line_type &);
- virtual void solid_arc(const position &cent, double rad, double start_angle,
- double end_angle, const line_type &lt);
- void dashed_rounded_box(const position &, const distance &, double,
- const line_type &);
- void dotted_rounded_box(const position &, const distance &, double,
- const line_type &);
- void solid_rounded_box(const position &, const distance &, double,
- const line_type &);
- void filled_rounded_box(const position &, const distance &, double, double);
-public:
- void start_picture(double sc, const position &ll, const position &ur) = 0;
- void finish_picture() = 0;
- void circle(const position &, double rad, const line_type &, double) = 0;
- void text(const position &, text_piece *, int, double) = 0;
- void line(const position &, const position *, int n, const line_type &) = 0;
- void polygon(const position *, int n, const line_type &, double) = 0;
- void spline(const position &, const position *, int n,
- const line_type &) = 0;
- void arc(const position &, const position &, const position &,
- const line_type &) = 0;
- void ellipse(const position &, const distance &,
- const line_type &, double) = 0;
- void rounded_box(const position &, const distance &, double,
- const line_type &, double);
- void set_color(char *, char *) = 0;
- void reset_color() = 0;
- char *get_last_filled() = 0;
- char *get_outline_color() = 0;
-};
-
-int compute_arc_center(const position &start, const position &cent,
- const position &end, position *result);
-
diff --git a/contrib/groff/src/preproc/pic/lex.cpp b/contrib/groff/src/preproc/pic/lex.cpp
deleted file mode 100644
index ceca36854648..000000000000
--- a/contrib/groff/src/preproc/pic/lex.cpp
+++ /dev/null
@@ -1,2001 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-#include "pic_tab.h"
-
-declare_ptable(char)
-implement_ptable(char)
-
-PTABLE(char) macro_table;
-
-class macro_input : public input {
- char *s;
- char *p;
-public:
- macro_input(const char *);
- ~macro_input();
- int get();
- int peek();
-};
-
-class argument_macro_input : public input {
- char *s;
- char *p;
- char *ap;
- int argc;
- char *argv[9];
-public:
- argument_macro_input(const char *, int, char **);
- ~argument_macro_input();
- int get();
- int peek();
-};
-
-input::input() : next(0)
-{
-}
-
-input::~input()
-{
-}
-
-int input::get_location(const char **, int *)
-{
- return 0;
-}
-
-file_input::file_input(FILE *f, const char *fn)
-: fp(f), filename(fn), lineno(0), ptr("")
-{
-}
-
-file_input::~file_input()
-{
- fclose(fp);
-}
-
-int file_input::read_line()
-{
- for (;;) {
- line.clear();
- lineno++;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- else if (invalid_input_char(c))
- lex_error("invalid input character code %1", c);
- else {
- line += char(c);
- if (c == '\n')
- break;
- }
- }
- if (line.length() == 0)
- return 0;
- if (!(line.length() >= 3 && line[0] == '.' && line[1] == 'P'
- && (line[2] == 'S' || line[2] == 'E' || line[2] == 'F')
- && (line.length() == 3 || line[3] == ' ' || line[3] == '\n'
- || compatible_flag))) {
- line += '\0';
- ptr = line.contents();
- return 1;
- }
- }
-}
-
-int file_input::get()
-{
- if (*ptr != '\0' || read_line())
- return (unsigned char)*ptr++;
- else
- return EOF;
-}
-
-int file_input::peek()
-{
- if (*ptr != '\0' || read_line())
- return (unsigned char)*ptr;
- else
- return EOF;
-}
-
-int file_input::get_location(const char **fnp, int *lnp)
-{
- *fnp = filename;
- *lnp = lineno;
- return 1;
-}
-
-macro_input::macro_input(const char *str)
-{
- p = s = strsave(str);
-}
-
-macro_input::~macro_input()
-{
- a_delete s;
-}
-
-int macro_input::get()
-{
- if (p == 0 || *p == '\0')
- return EOF;
- else
- return (unsigned char)*p++;
-}
-
-int macro_input::peek()
-{
- if (p == 0 || *p == '\0')
- return EOF;
- else
- return (unsigned char)*p;
-}
-
-// Character representing $1. Must be invalid input character.
-#define ARG1 14
-
-char *process_body(const char *body)
-{
- char *s = strsave(body);
- int j = 0;
- for (int i = 0; s[i] != '\0'; i++)
- if (s[i] == '$' && s[i+1] >= '0' && s[i+1] <= '9') {
- if (s[i+1] != '0')
- s[j++] = ARG1 + s[++i] - '1';
- }
- else
- s[j++] = s[i];
- s[j] = '\0';
- return s;
-}
-
-
-argument_macro_input::argument_macro_input(const char *body, int ac, char **av)
-: ap(0), argc(ac)
-{
- for (int i = 0; i < argc; i++)
- argv[i] = av[i];
- p = s = process_body(body);
-}
-
-
-argument_macro_input::~argument_macro_input()
-{
- for (int i = 0; i < argc; i++)
- a_delete argv[i];
- a_delete s;
-}
-
-int argument_macro_input::get()
-{
- if (ap) {
- if (*ap != '\0')
- return (unsigned char)*ap++;
- ap = 0;
- }
- if (p == 0)
- return EOF;
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && argv[i] != 0 && argv[i][0] != '\0') {
- ap = argv[i];
- return (unsigned char)*ap++;
- }
- }
- if (*p == '\0')
- return EOF;
- return (unsigned char)*p++;
-}
-
-int argument_macro_input::peek()
-{
- if (ap) {
- if (*ap != '\0')
- return (unsigned char)*ap;
- ap = 0;
- }
- if (p == 0)
- return EOF;
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && argv[i] != 0 && argv[i][0] != '\0') {
- ap = argv[i];
- return (unsigned char)*ap;
- }
- }
- if (*p == '\0')
- return EOF;
- return (unsigned char)*p;
-}
-
-class input_stack {
- static input *current_input;
- static int bol_flag;
-public:
- static void push(input *);
- static void clear();
- static int get_char();
- static int peek_char();
- static int get_location(const char **fnp, int *lnp);
- static void push_back(unsigned char c, int was_bol = 0);
- static int bol();
-};
-
-input *input_stack::current_input = 0;
-int input_stack::bol_flag = 0;
-
-inline int input_stack::bol()
-{
- return bol_flag;
-}
-
-void input_stack::clear()
-{
- while (current_input != 0) {
- input *tem = current_input;
- current_input = current_input->next;
- delete tem;
- }
- bol_flag = 1;
-}
-
-void input_stack::push(input *in)
-{
- in->next = current_input;
- current_input = in;
-}
-
-void lex_init(input *top)
-{
- input_stack::clear();
- input_stack::push(top);
-}
-
-void lex_cleanup()
-{
- while (input_stack::get_char() != EOF)
- ;
-}
-
-int input_stack::get_char()
-{
- while (current_input != 0) {
- int c = current_input->get();
- if (c != EOF) {
- bol_flag = c == '\n';
- return c;
- }
- // don't pop the top-level input off the stack
- if (current_input->next == 0)
- return EOF;
- input *tem = current_input;
- current_input = current_input->next;
- delete tem;
- }
- return EOF;
-}
-
-int input_stack::peek_char()
-{
- while (current_input != 0) {
- int c = current_input->peek();
- if (c != EOF)
- return c;
- if (current_input->next == 0)
- return EOF;
- input *tem = current_input;
- current_input = current_input->next;
- delete tem;
- }
- return EOF;
-}
-
-class char_input : public input {
- int c;
-public:
- char_input(int);
- int get();
- int peek();
-};
-
-char_input::char_input(int n) : c((unsigned char)n)
-{
-}
-
-int char_input::get()
-{
- int n = c;
- c = EOF;
- return n;
-}
-
-int char_input::peek()
-{
- return c;
-}
-
-void input_stack::push_back(unsigned char c, int was_bol)
-{
- push(new char_input(c));
- bol_flag = was_bol;
-}
-
-int input_stack::get_location(const char **fnp, int *lnp)
-{
- for (input *p = current_input; p; p = p->next)
- if (p->get_location(fnp, lnp))
- return 1;
- return 0;
-}
-
-string context_buffer;
-
-string token_buffer;
-double token_double;
-int token_int;
-
-void interpolate_macro_with_args(const char *body)
-{
- char *argv[9];
- int argc = 0;
- int i;
- for (i = 0; i < 9; i++)
- argv[i] = 0;
- int level = 0;
- int c;
- enum { NORMAL, IN_STRING, IN_STRING_QUOTED } state = NORMAL;
- do {
- token_buffer.clear();
- for (;;) {
- c = input_stack::get_char();
- if (c == EOF) {
- lex_error("end of input while scanning macro arguments");
- break;
- }
- if (state == NORMAL && level == 0 && (c == ',' || c == ')')) {
- if (token_buffer.length() > 0) {
- token_buffer += '\0';
- argv[argc] = strsave(token_buffer.contents());
- }
- // for `foo()', argc = 0
- if (argc > 0 || c != ')' || i > 0)
- argc++;
- break;
- }
- token_buffer += char(c);
- switch (state) {
- case NORMAL:
- if (c == '"')
- state = IN_STRING;
- else if (c == '(')
- level++;
- else if (c == ')')
- level--;
- break;
- case IN_STRING:
- if (c == '"')
- state = NORMAL;
- else if (c == '\\')
- state = IN_STRING_QUOTED;
- break;
- case IN_STRING_QUOTED:
- state = IN_STRING;
- break;
- }
- }
- } while (c != ')' && c != EOF);
- input_stack::push(new argument_macro_input(body, argc, argv));
-}
-
-static int docmp(const char *s1, int n1, const char *s2, int n2)
-{
- if (n1 < n2) {
- int r = memcmp(s1, s2, n1);
- return r ? r : -1;
- }
- else if (n1 > n2) {
- int r = memcmp(s1, s2, n2);
- return r ? r : 1;
- }
- else
- return memcmp(s1, s2, n1);
-}
-
-int lookup_keyword(const char *str, int len)
-{
- static struct keyword {
- const char *name;
- int token;
- } table[] = {
- { "Here", HERE },
- { "above", ABOVE },
- { "aligned", ALIGNED },
- { "and", AND },
- { "arc", ARC },
- { "arrow", ARROW },
- { "at", AT },
- { "atan2", ATAN2 },
- { "below", BELOW },
- { "between", BETWEEN },
- { "bottom", BOTTOM },
- { "box", BOX },
- { "by", BY },
- { "ccw", CCW },
- { "center", CENTER },
- { "chop", CHOP },
- { "circle", CIRCLE },
- { "color", COLORED },
- { "colored", COLORED },
- { "colour", COLORED },
- { "coloured", COLORED },
- { "command", COMMAND },
- { "copy", COPY },
- { "cos", COS },
- { "cw", CW },
- { "dashed", DASHED },
- { "define", DEFINE },
- { "diam", DIAMETER },
- { "diameter", DIAMETER },
- { "do", DO },
- { "dotted", DOTTED },
- { "down", DOWN },
- { "east", EAST },
- { "ellipse", ELLIPSE },
- { "else", ELSE },
- { "end", END },
- { "exp", EXP },
- { "figname", FIGNAME },
- { "fill", FILL },
- { "filled", FILL },
- { "for", FOR },
- { "from", FROM },
- { "height", HEIGHT },
- { "ht", HEIGHT },
- { "if", IF },
- { "int", INT },
- { "invis", INVISIBLE },
- { "invisible", INVISIBLE },
- { "last", LAST },
- { "left", LEFT },
- { "line", LINE },
- { "ljust", LJUST },
- { "log", LOG },
- { "lower", LOWER },
- { "max", K_MAX },
- { "min", K_MIN },
- { "move", MOVE },
- { "north", NORTH },
- { "of", OF },
- { "outline", OUTLINED },
- { "outlined", OUTLINED },
- { "plot", PLOT },
- { "print", PRINT },
- { "rad", RADIUS },
- { "radius", RADIUS },
- { "rand", RAND },
- { "reset", RESET },
- { "right", RIGHT },
- { "rjust", RJUST },
- { "same", SAME },
- { "sh", SH },
- { "shaded", SHADED },
- { "sin", SIN },
- { "solid", SOLID },
- { "south", SOUTH },
- { "spline", SPLINE },
- { "sprintf", SPRINTF },
- { "sqrt", SQRT },
- { "srand", SRAND },
- { "start", START },
- { "the", THE },
- { "then", THEN },
- { "thick", THICKNESS },
- { "thickness", THICKNESS },
- { "thru", THRU },
- { "to", TO },
- { "top", TOP },
- { "undef", UNDEF },
- { "until", UNTIL },
- { "up", UP },
- { "upper", UPPER },
- { "way", WAY },
- { "west", WEST },
- { "wid", WIDTH },
- { "width", WIDTH },
- { "with", WITH },
- };
-
- const keyword *start = table;
- const keyword *end = table + sizeof(table)/sizeof(table[0]);
- while (start < end) {
- // start <= target < end
- const keyword *mid = start + (end - start)/2;
-
- int cmp = docmp(str, len, mid->name, strlen(mid->name));
- if (cmp == 0)
- return mid->token;
- if (cmp < 0)
- end = mid;
- else
- start = mid + 1;
- }
- return 0;
-}
-
-int get_token_after_dot(int c)
-{
- // get_token deals with the case where c is a digit
- switch (c) {
- case 'h':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- context_buffer = ".ht";
- return DOT_HT;
- }
- else if (c == 'e') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'i') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'g') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'h') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- context_buffer = ".height";
- return DOT_HT;
- }
- input_stack::push_back('h');
- }
- input_stack::push_back('g');
- }
- input_stack::push_back('i');
- }
- input_stack::push_back('e');
- }
- input_stack::push_back('h');
- return '.';
- case 'x':
- input_stack::get_char();
- context_buffer = ".x";
- return DOT_X;
- case 'y':
- input_stack::get_char();
- context_buffer = ".y";
- return DOT_Y;
- case 'c':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'e') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'n') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'e') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'r') {
- input_stack::get_char();
- context_buffer = ".center";
- return DOT_C;
- }
- input_stack::push_back('e');
- }
- input_stack::push_back('t');
- }
- input_stack::push_back('n');
- }
- input_stack::push_back('e');
- }
- context_buffer = ".c";
- return DOT_C;
- case 'n':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'e') {
- input_stack::get_char();
- context_buffer = ".ne";
- return DOT_NE;
- }
- else if (c == 'w') {
- input_stack::get_char();
- context_buffer = ".nw";
- return DOT_NW;
- }
- else {
- context_buffer = ".n";
- return DOT_N;
- }
- break;
- case 'e':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'n') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'd') {
- input_stack::get_char();
- context_buffer = ".end";
- return DOT_END;
- }
- input_stack::push_back('n');
- context_buffer = ".e";
- return DOT_E;
- }
- context_buffer = ".e";
- return DOT_E;
- case 'w':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'i') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'd') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'h') {
- input_stack::get_char();
- context_buffer = ".width";
- return DOT_WID;
- }
- input_stack::push_back('t');
- }
- context_buffer = ".wid";
- return DOT_WID;
- }
- input_stack::push_back('i');
- }
- context_buffer = ".w";
- return DOT_W;
- case 's':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'e') {
- input_stack::get_char();
- context_buffer = ".se";
- return DOT_SE;
- }
- else if (c == 'w') {
- input_stack::get_char();
- context_buffer = ".sw";
- return DOT_SW;
- }
- else {
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'a') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'r') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- context_buffer = ".start";
- return DOT_START;
- }
- input_stack::push_back('r');
- }
- input_stack::push_back('a');
- }
- input_stack::push_back('t');
- }
- context_buffer = ".s";
- return DOT_S;
- }
- break;
- case 't':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'o') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'p') {
- input_stack::get_char();
- context_buffer = ".top";
- return DOT_N;
- }
- input_stack::push_back('o');
- }
- context_buffer = ".t";
- return DOT_N;
- case 'l':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'e') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'f') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- context_buffer = ".left";
- return DOT_W;
- }
- input_stack::push_back('f');
- }
- input_stack::push_back('e');
- }
- context_buffer = ".l";
- return DOT_W;
- case 'r':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'a') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'd') {
- input_stack::get_char();
- context_buffer = ".rad";
- return DOT_RAD;
- }
- input_stack::push_back('a');
- }
- else if (c == 'i') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'g') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'h') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- context_buffer = ".right";
- return DOT_E;
- }
- input_stack::push_back('h');
- }
- input_stack::push_back('g');
- }
- input_stack::push_back('i');
- }
- context_buffer = ".r";
- return DOT_E;
- case 'b':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'o') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'o') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'm') {
- input_stack::get_char();
- context_buffer = ".bottom";
- return DOT_S;
- }
- input_stack::push_back('o');
- }
- input_stack::push_back('t');
- }
- context_buffer = ".bot";
- return DOT_S;
- }
- input_stack::push_back('o');
- }
- context_buffer = ".b";
- return DOT_S;
- default:
- context_buffer = '.';
- return '.';
- }
-}
-
-int get_token(int lookup_flag)
-{
- context_buffer.clear();
- for (;;) {
- int n = 0;
- int bol = input_stack::bol();
- int c = input_stack::get_char();
- if (bol && c == command_char) {
- token_buffer.clear();
- token_buffer += c;
- // the newline is not part of the token
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || c == '\n')
- break;
- input_stack::get_char();
- token_buffer += char(c);
- }
- context_buffer = token_buffer;
- return COMMAND_LINE;
- }
- switch (c) {
- case EOF:
- return EOF;
- case ' ':
- case '\t':
- break;
- case '\\':
- {
- int d = input_stack::peek_char();
- if (d != '\n') {
- context_buffer = '\\';
- return '\\';
- }
- input_stack::get_char();
- break;
- }
- case '#':
- do {
- c = input_stack::get_char();
- } while (c != '\n' && c != EOF);
- if (c == '\n')
- context_buffer = '\n';
- return c;
- case '"':
- context_buffer = '"';
- token_buffer.clear();
- for (;;) {
- c = input_stack::get_char();
- if (c == '\\') {
- context_buffer += '\\';
- c = input_stack::peek_char();
- if (c == '"') {
- input_stack::get_char();
- token_buffer += '"';
- context_buffer += '"';
- }
- else
- token_buffer += '\\';
- }
- else if (c == '\n') {
- error("newline in string");
- break;
- }
- else if (c == EOF) {
- error("missing `\"'");
- break;
- }
- else if (c == '"') {
- context_buffer += '"';
- break;
- }
- else {
- context_buffer += char(c);
- token_buffer += char(c);
- }
- }
- return TEXT;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int overflow = 0;
- n = 0;
- for (;;) {
- if (n > (INT_MAX - 9)/10) {
- overflow = 1;
- break;
- }
- n *= 10;
- n += c - '0';
- context_buffer += char(c);
- c = input_stack::peek_char();
- if (c == EOF || !csdigit(c))
- break;
- c = input_stack::get_char();
- }
- token_double = n;
- if (overflow) {
- for (;;) {
- token_double *= 10.0;
- token_double += c - '0';
- context_buffer += char(c);
- c = input_stack::peek_char();
- if (c == EOF || !csdigit(c))
- break;
- c = input_stack::get_char();
- }
- // if somebody asks for 1000000000000th, we will silently
- // give them INT_MAXth
- double temp = token_double; // work around gas 1.34/sparc bug
- if (token_double > INT_MAX)
- n = INT_MAX;
- else
- n = int(temp);
- }
- }
- switch (c) {
- case 'i':
- case 'I':
- context_buffer += char(c);
- input_stack::get_char();
- return NUMBER;
- case '.':
- {
- context_buffer += '.';
- input_stack::get_char();
- got_dot:
- double factor = 1.0;
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || !csdigit(c))
- break;
- input_stack::get_char();
- context_buffer += char(c);
- factor /= 10.0;
- if (c != '0')
- token_double += factor*(c - '0');
- }
- if (c != 'e' && c != 'E') {
- if (c == 'i' || c == 'I') {
- context_buffer += char(c);
- input_stack::get_char();
- }
- return NUMBER;
- }
- }
- // fall through
- case 'e':
- case 'E':
- {
- int echar = c;
- input_stack::get_char();
- c = input_stack::peek_char();
- int sign = '+';
- if (c == '+' || c == '-') {
- sign = c;
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == EOF || !csdigit(c)) {
- input_stack::push_back(sign);
- input_stack::push_back(echar);
- return NUMBER;
- }
- context_buffer += char(echar);
- context_buffer += char(sign);
- }
- else {
- if (c == EOF || !csdigit(c)) {
- input_stack::push_back(echar);
- return NUMBER;
- }
- context_buffer += char(echar);
- }
- input_stack::get_char();
- context_buffer += char(c);
- n = c - '0';
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || !csdigit(c))
- break;
- input_stack::get_char();
- context_buffer += char(c);
- n = n*10 + (c - '0');
- }
- if (sign == '-')
- n = -n;
- if (c == 'i' || c == 'I') {
- context_buffer += char(c);
- input_stack::get_char();
- }
- token_double *= pow(10.0, n);
- return NUMBER;
- }
- case 'n':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'd') {
- input_stack::get_char();
- token_int = n;
- context_buffer += "nd";
- return ORDINAL;
- }
- input_stack::push_back('n');
- return NUMBER;
- case 'r':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'd') {
- input_stack::get_char();
- token_int = n;
- context_buffer += "rd";
- return ORDINAL;
- }
- input_stack::push_back('r');
- return NUMBER;
- case 't':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'h') {
- input_stack::get_char();
- token_int = n;
- context_buffer += "th";
- return ORDINAL;
- }
- input_stack::push_back('t');
- return NUMBER;
- case 's':
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- token_int = n;
- context_buffer += "st";
- return ORDINAL;
- }
- input_stack::push_back('s');
- return NUMBER;
- default:
- return NUMBER;
- }
- break;
- case '\'':
- {
- c = input_stack::peek_char();
- if (c == 't') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == 'h') {
- input_stack::get_char();
- context_buffer = "'th";
- return TH;
- }
- else
- input_stack::push_back('t');
- }
- context_buffer = "'";
- return '\'';
- }
- case '.':
- {
- c = input_stack::peek_char();
- if (c != EOF && csdigit(c)) {
- n = 0;
- token_double = 0.0;
- context_buffer = '.';
- goto got_dot;
- }
- return get_token_after_dot(c);
- }
- case '<':
- c = input_stack::peek_char();
- if (c == '-') {
- input_stack::get_char();
- c = input_stack::peek_char();
- if (c == '>') {
- input_stack::get_char();
- context_buffer = "<->";
- return DOUBLE_ARROW_HEAD;
- }
- context_buffer = "<-";
- return LEFT_ARROW_HEAD;
- }
- else if (c == '=') {
- input_stack::get_char();
- context_buffer = "<=";
- return LESSEQUAL;
- }
- context_buffer = "<";
- return '<';
- case '-':
- c = input_stack::peek_char();
- if (c == '>') {
- input_stack::get_char();
- context_buffer = "->";
- return RIGHT_ARROW_HEAD;
- }
- context_buffer = "-";
- return '-';
- case '!':
- c = input_stack::peek_char();
- if (c == '=') {
- input_stack::get_char();
- context_buffer = "!=";
- return NOTEQUAL;
- }
- context_buffer = "!";
- return '!';
- case '>':
- c = input_stack::peek_char();
- if (c == '=') {
- input_stack::get_char();
- context_buffer = ">=";
- return GREATEREQUAL;
- }
- context_buffer = ">";
- return '>';
- case '=':
- c = input_stack::peek_char();
- if (c == '=') {
- input_stack::get_char();
- context_buffer = "==";
- return EQUALEQUAL;
- }
- context_buffer = "=";
- return '=';
- case '&':
- c = input_stack::peek_char();
- if (c == '&') {
- input_stack::get_char();
- context_buffer = "&&";
- return ANDAND;
- }
- context_buffer = "&";
- return '&';
- case '|':
- c = input_stack::peek_char();
- if (c == '|') {
- input_stack::get_char();
- context_buffer = "||";
- return OROR;
- }
- context_buffer = "|";
- return '|';
- default:
- if (c != EOF && csalpha(c)) {
- token_buffer.clear();
- token_buffer = c;
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || (!csalnum(c) && c != '_'))
- break;
- input_stack::get_char();
- token_buffer += char(c);
- }
- int tok = lookup_keyword(token_buffer.contents(),
- token_buffer.length());
- if (tok != 0) {
- context_buffer = token_buffer;
- return tok;
- }
- char *def = 0;
- if (lookup_flag) {
- token_buffer += '\0';
- def = macro_table.lookup(token_buffer.contents());
- token_buffer.set_length(token_buffer.length() - 1);
- if (def) {
- if (c == '(') {
- input_stack::get_char();
- interpolate_macro_with_args(def);
- }
- else
- input_stack::push(new macro_input(def));
- }
- }
- if (!def) {
- context_buffer = token_buffer;
- if (csupper(token_buffer[0]))
- return LABEL;
- else
- return VARIABLE;
- }
- }
- else {
- context_buffer = char(c);
- return (unsigned char)c;
- }
- break;
- }
- }
-}
-
-int get_delimited()
-{
- token_buffer.clear();
- int c = input_stack::get_char();
- while (c == ' ' || c == '\t' || c == '\n')
- c = input_stack::get_char();
- if (c == EOF) {
- lex_error("missing delimiter");
- return 0;
- }
- context_buffer = char(c);
- int had_newline = 0;
- int start = c;
- int level = 0;
- enum { NORMAL, IN_STRING, IN_STRING_QUOTED, DELIM_END } state = NORMAL;
- for (;;) {
- c = input_stack::get_char();
- if (c == EOF) {
- lex_error("missing closing delimiter");
- return 0;
- }
- if (c == '\n')
- had_newline = 1;
- else if (!had_newline)
- context_buffer += char(c);
- switch (state) {
- case NORMAL:
- if (start == '{') {
- if (c == '{') {
- level++;
- break;
- }
- if (c == '}') {
- if (--level < 0)
- state = DELIM_END;
- break;
- }
- }
- else {
- if (c == start) {
- state = DELIM_END;
- break;
- }
- }
- if (c == '"')
- state = IN_STRING;
- break;
- case IN_STRING_QUOTED:
- if (c == '\n')
- state = NORMAL;
- else
- state = IN_STRING;
- break;
- case IN_STRING:
- if (c == '"' || c == '\n')
- state = NORMAL;
- else if (c == '\\')
- state = IN_STRING_QUOTED;
- break;
- case DELIM_END:
- // This case it just to shut cfront 2.0 up.
- default:
- assert(0);
- }
- if (state == DELIM_END)
- break;
- token_buffer += c;
- }
- return 1;
-}
-
-void do_define()
-{
- int t = get_token(0); // do not expand what we are defining
- if (t != VARIABLE && t != LABEL) {
- lex_error("can only define variable or placename");
- return;
- }
- token_buffer += '\0';
- string nm = token_buffer;
- const char *name = nm.contents();
- if (!get_delimited())
- return;
- token_buffer += '\0';
- macro_table.define(name, strsave(token_buffer.contents()));
-}
-
-void do_undef()
-{
- int t = get_token(0); // do not expand what we are undefining
- if (t != VARIABLE && t != LABEL) {
- lex_error("can only define variable or placename");
- return;
- }
- token_buffer += '\0';
- macro_table.define(token_buffer.contents(), 0);
-}
-
-
-class for_input : public input {
- char *var;
- char *body;
- double from;
- double to;
- int by_is_multiplicative;
- double by;
- const char *p;
- int done_newline;
-public:
- for_input(char *, double, double, int, double, char *);
- ~for_input();
- int get();
- int peek();
-};
-
-for_input::for_input(char *vr, double f, double t,
- int bim, double b, char *bd)
-: var(vr), body(bd), from(f), to(t), by_is_multiplicative(bim), by(b),
- p(body), done_newline(0)
-{
-}
-
-for_input::~for_input()
-{
- a_delete var;
- a_delete body;
-}
-
-int for_input::get()
-{
- if (p == 0)
- return EOF;
- for (;;) {
- if (*p != '\0')
- return (unsigned char)*p++;
- if (!done_newline) {
- done_newline = 1;
- return '\n';
- }
- double val;
- if (!lookup_variable(var, &val)) {
- lex_error("body of `for' terminated enclosing block");
- return EOF;
- }
- if (by_is_multiplicative)
- val *= by;
- else
- val += by;
- define_variable(var, val);
- if ((from <= to && val > to)
- || (from >= to && val < to)) {
- p = 0;
- return EOF;
- }
- p = body;
- done_newline = 0;
- }
-}
-
-int for_input::peek()
-{
- if (p == 0)
- return EOF;
- if (*p != '\0')
- return (unsigned char)*p;
- if (!done_newline)
- return '\n';
- double val;
- if (!lookup_variable(var, &val))
- return EOF;
- if (by_is_multiplicative) {
- if (val * by > to)
- return EOF;
- }
- else {
- if ((from <= to && val + by > to)
- || (from >= to && val + by < to))
- return EOF;
- }
- if (*body == '\0')
- return EOF;
- return (unsigned char)*body;
-}
-
-void do_for(char *var, double from, double to, int by_is_multiplicative,
- double by, char *body)
-{
- define_variable(var, from);
- if ((by_is_multiplicative && by <= 0)
- || (by > 0 && from > to)
- || (by < 0 && from < to))
- return;
- input_stack::push(new for_input(var, from, to,
- by_is_multiplicative, by, body));
-}
-
-
-void do_copy(const char *filename)
-{
- errno = 0;
- FILE *fp = fopen(filename, "r");
- if (fp == 0) {
- lex_error("can't open `%1': %2", filename, strerror(errno));
- return;
- }
- input_stack::push(new file_input(fp, filename));
-}
-
-class copy_thru_input : public input {
- int done;
- char *body;
- char *until;
- const char *p;
- const char *ap;
- int argv[9];
- int argc;
- string line;
- int get_line();
- virtual int inget() = 0;
-public:
- copy_thru_input(const char *b, const char *u);
- ~copy_thru_input();
- int get();
- int peek();
-};
-
-class copy_file_thru_input : public copy_thru_input {
- input *in;
-public:
- copy_file_thru_input(input *, const char *b, const char *u);
- ~copy_file_thru_input();
- int inget();
-};
-
-copy_file_thru_input::copy_file_thru_input(input *i, const char *b,
- const char *u)
-: copy_thru_input(b, u), in(i)
-{
-}
-
-copy_file_thru_input::~copy_file_thru_input()
-{
- delete in;
-}
-
-int copy_file_thru_input::inget()
-{
- if (!in)
- return EOF;
- else
- return in->get();
-}
-
-class copy_rest_thru_input : public copy_thru_input {
-public:
- copy_rest_thru_input(const char *, const char *u);
- int inget();
-};
-
-copy_rest_thru_input::copy_rest_thru_input(const char *b, const char *u)
-: copy_thru_input(b, u)
-{
-}
-
-int copy_rest_thru_input::inget()
-{
- while (next != 0) {
- int c = next->get();
- if (c != EOF)
- return c;
- if (next->next == 0)
- return EOF;
- input *tem = next;
- next = next->next;
- delete tem;
- }
- return EOF;
-
-}
-
-copy_thru_input::copy_thru_input(const char *b, const char *u)
-: done(0)
-{
- ap = 0;
- body = process_body(b);
- p = 0;
- until = strsave(u);
-}
-
-
-copy_thru_input::~copy_thru_input()
-{
- a_delete body;
- a_delete until;
-}
-
-int copy_thru_input::get()
-{
- if (ap) {
- if (*ap != '\0')
- return (unsigned char)*ap++;
- ap = 0;
- }
- for (;;) {
- if (p == 0) {
- if (!get_line())
- break;
- p = body;
- }
- if (*p == '\0') {
- p = 0;
- return '\n';
- }
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && line[argv[i]] != '\0') {
- ap = line.contents() + argv[i];
- return (unsigned char)*ap++;
- }
- }
- if (*p != '\0')
- return (unsigned char)*p++;
- }
- return EOF;
-}
-
-int copy_thru_input::peek()
-{
- if (ap) {
- if (*ap != '\0')
- return (unsigned char)*ap;
- ap = 0;
- }
- for (;;) {
- if (p == 0) {
- if (!get_line())
- break;
- p = body;
- }
- if (*p == '\0')
- return '\n';
- while (*p >= ARG1 && *p <= ARG1 + 8) {
- int i = *p++ - ARG1;
- if (i < argc && line[argv[i]] != '\0') {
- ap = line.contents() + argv[i];
- return (unsigned char)*ap;
- }
- }
- if (*p != '\0')
- return (unsigned char)*p;
- }
- return EOF;
-}
-
-int copy_thru_input::get_line()
-{
- if (done)
- return 0;
- line.clear();
- argc = 0;
- int c = inget();
- for (;;) {
- while (c == ' ')
- c = inget();
- if (c == EOF || c == '\n')
- break;
- if (argc == 9) {
- do {
- c = inget();
- } while (c != '\n' && c != EOF);
- break;
- }
- argv[argc++] = line.length();
- do {
- line += char(c);
- c = inget();
- } while (c != ' ' && c != '\n');
- line += '\0';
- }
- if (until != 0 && argc > 0 && strcmp(&line[argv[0]], until) == 0) {
- done = 1;
- return 0;
- }
- return argc > 0 || c == '\n';
-}
-
-class simple_file_input : public input {
- const char *filename;
- int lineno;
- FILE *fp;
-public:
- simple_file_input(FILE *, const char *);
- ~simple_file_input();
- int get();
- int peek();
- int get_location(const char **, int *);
-};
-
-simple_file_input::simple_file_input(FILE *p, const char *s)
-: filename(s), lineno(1), fp(p)
-{
-}
-
-simple_file_input::~simple_file_input()
-{
- // don't delete the filename
- fclose(fp);
-}
-
-int simple_file_input::get()
-{
- int c = getc(fp);
- while (invalid_input_char(c)) {
- error("invalid input character code %1", c);
- c = getc(fp);
- }
- if (c == '\n')
- lineno++;
- return c;
-}
-
-int simple_file_input::peek()
-{
- int c = getc(fp);
- while (invalid_input_char(c)) {
- error("invalid input character code %1", c);
- c = getc(fp);
- }
- if (c != EOF)
- ungetc(c, fp);
- return c;
-}
-
-int simple_file_input::get_location(const char **fnp, int *lnp)
-{
- *fnp = filename;
- *lnp = lineno;
- return 1;
-}
-
-
-void copy_file_thru(const char *filename, const char *body, const char *until)
-{
- errno = 0;
- FILE *fp = fopen(filename, "r");
- if (fp == 0) {
- lex_error("can't open `%1': %2", filename, strerror(errno));
- return;
- }
- input *in = new copy_file_thru_input(new simple_file_input(fp, filename),
- body, until);
- input_stack::push(in);
-}
-
-void copy_rest_thru(const char *body, const char *until)
-{
- input_stack::push(new copy_rest_thru_input(body, until));
-}
-
-void push_body(const char *s)
-{
- input_stack::push(new char_input('\n'));
- input_stack::push(new macro_input(s));
-}
-
-int delim_flag = 0;
-
-char *get_thru_arg()
-{
- int c = input_stack::peek_char();
- while (c == ' ') {
- input_stack::get_char();
- c = input_stack::peek_char();
- }
- if (c != EOF && csalpha(c)) {
- // looks like a macro
- input_stack::get_char();
- token_buffer = c;
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || (!csalnum(c) && c != '_'))
- break;
- input_stack::get_char();
- token_buffer += char(c);
- }
- context_buffer = token_buffer;
- token_buffer += '\0';
- char *def = macro_table.lookup(token_buffer.contents());
- if (def)
- return strsave(def);
- // I guess it wasn't a macro after all; so push the macro name back.
- // -2 because we added a '\0'
- for (int i = token_buffer.length() - 2; i >= 0; i--)
- input_stack::push_back(token_buffer[i]);
- }
- if (get_delimited()) {
- token_buffer += '\0';
- return strsave(token_buffer.contents());
- }
- else
- return 0;
-}
-
-int lookahead_token = -1;
-string old_context_buffer;
-
-void do_lookahead()
-{
- if (lookahead_token == -1) {
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- }
-}
-
-int yylex()
-{
- if (delim_flag) {
- assert(lookahead_token == -1);
- if (delim_flag == 2) {
- if ((yylval.str = get_thru_arg()) != 0)
- return DELIMITED;
- else
- return 0;
- }
- else {
- if (get_delimited()) {
- token_buffer += '\0';
- yylval.str = strsave(token_buffer.contents());
- return DELIMITED;
- }
- else
- return 0;
- }
- }
- for (;;) {
- int t;
- if (lookahead_token >= 0) {
- t = lookahead_token;
- lookahead_token = -1;
- }
- else
- t = get_token(1);
- switch (t) {
- case '\n':
- return ';';
- case EOF:
- return 0;
- case DEFINE:
- do_define();
- break;
- case UNDEF:
- do_undef();
- break;
- case ORDINAL:
- yylval.n = token_int;
- return t;
- case NUMBER:
- yylval.x = token_double;
- return t;
- case COMMAND_LINE:
- case TEXT:
- token_buffer += '\0';
- if (!input_stack::get_location(&yylval.lstr.filename,
- &yylval.lstr.lineno)) {
- yylval.lstr.filename = 0;
- yylval.lstr.lineno = -1;
- }
- yylval.lstr.str = strsave(token_buffer.contents());
- return t;
- case LABEL:
- case VARIABLE:
- token_buffer += '\0';
- yylval.str = strsave(token_buffer.contents());
- return t;
- case LEFT:
- // change LEFT to LEFT_CORNER when followed by OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token == OF)
- return LEFT_CORNER;
- else
- return t;
- case RIGHT:
- // change RIGHT to RIGHT_CORNER when followed by OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token == OF)
- return RIGHT_CORNER;
- else
- return t;
- case UPPER:
- // recognise UPPER only before LEFT or RIGHT
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != LEFT && lookahead_token != RIGHT) {
- yylval.str = strsave("upper");
- return VARIABLE;
- }
- else
- return t;
- case LOWER:
- // recognise LOWER only before LEFT or RIGHT
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != LEFT && lookahead_token != RIGHT) {
- yylval.str = strsave("lower");
- return VARIABLE;
- }
- else
- return t;
- case NORTH:
- // recognise NORTH only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("north");
- return VARIABLE;
- }
- else
- return t;
- case SOUTH:
- // recognise SOUTH only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("south");
- return VARIABLE;
- }
- else
- return t;
- case EAST:
- // recognise EAST only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("east");
- return VARIABLE;
- }
- else
- return t;
- case WEST:
- // recognise WEST only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("west");
- return VARIABLE;
- }
- else
- return t;
- case TOP:
- // recognise TOP only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("top");
- return VARIABLE;
- }
- else
- return t;
- case BOTTOM:
- // recognise BOTTOM only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("bottom");
- return VARIABLE;
- }
- else
- return t;
- case CENTER:
- // recognise CENTER only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("center");
- return VARIABLE;
- }
- else
- return t;
- case START:
- // recognise START only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("start");
- return VARIABLE;
- }
- else
- return t;
- case END:
- // recognise END only before OF
- old_context_buffer = context_buffer;
- lookahead_token = get_token(1);
- if (lookahead_token != OF) {
- yylval.str = strsave("end");
- return VARIABLE;
- }
- else
- return t;
- default:
- return t;
- }
- }
-}
-
-void lex_error(const char *message,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- const char *filename;
- int lineno;
- if (!input_stack::get_location(&filename, &lineno))
- error(message, arg1, arg2, arg3);
- else
- error_with_file_and_line(filename, lineno, message, arg1, arg2, arg3);
-}
-
-void lex_warning(const char *message,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- const char *filename;
- int lineno;
- if (!input_stack::get_location(&filename, &lineno))
- warning(message, arg1, arg2, arg3);
- else
- warning_with_file_and_line(filename, lineno, message, arg1, arg2, arg3);
-}
-
-void yyerror(const char *s)
-{
- const char *filename;
- int lineno;
- const char *context = 0;
- if (lookahead_token == -1) {
- if (context_buffer.length() > 0) {
- context_buffer += '\0';
- context = context_buffer.contents();
- }
- }
- else {
- if (old_context_buffer.length() > 0) {
- old_context_buffer += '\0';
- context = old_context_buffer.contents();
- }
- }
- if (!input_stack::get_location(&filename, &lineno)) {
- if (context) {
- if (context[0] == '\n' && context[1] == '\0')
- error("%1 before newline", s);
- else
- error("%1 before `%2'", s, context);
- }
- else
- error("%1 at end of picture", s);
- }
- else {
- if (context) {
- if (context[0] == '\n' && context[1] == '\0')
- error_with_file_and_line(filename, lineno, "%1 before newline", s);
- else
- error_with_file_and_line(filename, lineno, "%1 before `%2'",
- s, context);
- }
- else
- error_with_file_and_line(filename, lineno, "%1 at end of picture", s);
- }
-}
-
diff --git a/contrib/groff/src/preproc/pic/main.cpp b/contrib/groff/src/preproc/pic/main.cpp
deleted file mode 100644
index 0e05f77cd280..000000000000
--- a/contrib/groff/src/preproc/pic/main.cpp
+++ /dev/null
@@ -1,642 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-
-extern int yyparse();
-extern "C" const char *Version_string;
-
-output *out;
-char *graphname; // the picture box name in TeX mode
-
-int flyback_flag;
-int zero_length_line_flag = 0;
-// Non-zero means we're using a groff driver.
-int driver_extension_flag = 1;
-int compatible_flag = 0;
-int safer_flag = 1;
-int command_char = '.'; // the character that introduces lines
- // that should be passed through tranparently
-static int lf_flag = 1; // non-zero if we should attempt to understand
- // lines beginning with `.lf'
-
-// Non-zero means a parse error was encountered.
-static int had_parse_error = 0;
-
-void do_file(const char *filename);
-
-class top_input : public input {
- FILE *fp;
- int bol;
- int eof;
- int push_back[3];
- int start_lineno;
-public:
- top_input(FILE *);
- int get();
- int peek();
- int get_location(const char **, int *);
-};
-
-top_input::top_input(FILE *p) : fp(p), bol(1), eof(0)
-{
- push_back[0] = push_back[1] = push_back[2] = EOF;
- start_lineno = current_lineno;
-}
-
-int top_input::get()
-{
- if (eof)
- return EOF;
- if (push_back[2] != EOF) {
- int c = push_back[2];
- push_back[2] = EOF;
- return c;
- }
- else if (push_back[1] != EOF) {
- int c = push_back[1];
- push_back[1] = EOF;
- return c;
- }
- else if (push_back[0] != EOF) {
- int c = push_back[0];
- push_back[0] = EOF;
- return c;
- }
- int c = getc(fp);
- while (invalid_input_char(c)) {
- error("invalid input character code %1", int(c));
- c = getc(fp);
- bol = 0;
- }
- if (bol && c == '.') {
- c = getc(fp);
- if (c == 'P') {
- c = getc(fp);
- if (c == 'F' || c == 'E') {
- int d = getc(fp);
- if (d != EOF)
- ungetc(d, fp);
- if (d == EOF || d == ' ' || d == '\n' || compatible_flag) {
- eof = 1;
- flyback_flag = c == 'F';
- return EOF;
- }
- push_back[0] = c;
- push_back[1] = 'P';
- return '.';
- }
- if (c == 'S') {
- c = getc(fp);
- if (c != EOF)
- ungetc(c, fp);
- if (c == EOF || c == ' ' || c == '\n' || compatible_flag) {
- error("nested .PS");
- eof = 1;
- return EOF;
- }
- push_back[0] = 'S';
- push_back[1] = 'P';
- return '.';
- }
- if (c != EOF)
- ungetc(c, fp);
- push_back[0] = 'P';
- return '.';
- }
- else {
- if (c != EOF)
- ungetc(c, fp);
- return '.';
- }
- }
- if (c == '\n') {
- bol = 1;
- current_lineno++;
- return '\n';
- }
- bol = 0;
- if (c == EOF) {
- eof = 1;
- error("end of file before .PE or .PF");
- error_with_file_and_line(current_filename, start_lineno - 1,
- ".PS was here");
- }
- return c;
-}
-
-int top_input::peek()
-{
- if (eof)
- return EOF;
- if (push_back[2] != EOF)
- return push_back[2];
- if (push_back[1] != EOF)
- return push_back[1];
- if (push_back[0] != EOF)
- return push_back[0];
- int c = getc(fp);
- while (invalid_input_char(c)) {
- error("invalid input character code %1", int(c));
- c = getc(fp);
- bol = 0;
- }
- if (bol && c == '.') {
- c = getc(fp);
- if (c == 'P') {
- c = getc(fp);
- if (c == 'F' || c == 'E') {
- int d = getc(fp);
- if (d != EOF)
- ungetc(d, fp);
- if (d == EOF || d == ' ' || d == '\n' || compatible_flag) {
- eof = 1;
- flyback_flag = c == 'F';
- return EOF;
- }
- push_back[0] = c;
- push_back[1] = 'P';
- push_back[2] = '.';
- return '.';
- }
- if (c == 'S') {
- c = getc(fp);
- if (c != EOF)
- ungetc(c, fp);
- if (c == EOF || c == ' ' || c == '\n' || compatible_flag) {
- error("nested .PS");
- eof = 1;
- return EOF;
- }
- push_back[0] = 'S';
- push_back[1] = 'P';
- push_back[2] = '.';
- return '.';
- }
- if (c != EOF)
- ungetc(c, fp);
- push_back[0] = 'P';
- push_back[1] = '.';
- return '.';
- }
- else {
- if (c != EOF)
- ungetc(c, fp);
- push_back[0] = '.';
- return '.';
- }
- }
- if (c != EOF)
- ungetc(c, fp);
- if (c == '\n')
- return '\n';
- return c;
-}
-
-int top_input::get_location(const char **filenamep, int *linenop)
-{
- *filenamep = current_filename;
- *linenop = current_lineno;
- return 1;
-}
-
-void do_picture(FILE *fp)
-{
- flyback_flag = 0;
- int c;
- a_delete graphname;
- graphname = strsave("graph"); // default picture name in TeX mode
- while ((c = getc(fp)) == ' ')
- ;
- if (c == '<') {
- string filename;
- while ((c = getc(fp)) == ' ')
- ;
- while (c != EOF && c != ' ' && c != '\n') {
- filename += char(c);
- c = getc(fp);
- }
- if (c == ' ') {
- do {
- c = getc(fp);
- } while (c != EOF && c != '\n');
- }
- if (c == '\n')
- current_lineno++;
- if (filename.length() == 0)
- error("missing filename after `<'");
- else {
- filename += '\0';
- const char *old_filename = current_filename;
- int old_lineno = current_lineno;
- // filenames must be permanent
- do_file(strsave(filename.contents()));
- current_filename = old_filename;
- current_lineno = old_lineno;
- }
- out->set_location(current_filename, current_lineno);
- }
- else {
- out->set_location(current_filename, current_lineno);
- string start_line;
- while (c != EOF) {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- start_line += c;
- c = getc(fp);
- }
- if (c == EOF)
- return;
- start_line += '\0';
- double wid, ht;
- switch (sscanf(&start_line[0], "%lf %lf", &wid, &ht)) {
- case 1:
- ht = 0.0;
- break;
- case 2:
- break;
- default:
- ht = wid = 0.0;
- break;
- }
- out->set_desired_width_height(wid, ht);
- out->set_args(start_line.contents());
- lex_init(new top_input(fp));
- if (yyparse()) {
- had_parse_error = 1;
- lex_error("giving up on this picture");
- }
- parse_cleanup();
- lex_cleanup();
-
- // skip the rest of the .PF/.PE line
- while ((c = getc(fp)) != EOF && c != '\n')
- ;
- if (c == '\n')
- current_lineno++;
- out->set_location(current_filename, current_lineno);
- }
-}
-
-void do_file(const char *filename)
-{
- FILE *fp;
- if (strcmp(filename, "-") == 0)
- fp = stdin;
- else {
- errno = 0;
- fp = fopen(filename, "r");
- if (fp == 0) {
- delete out;
- fatal("can't open `%1': %2", filename, strerror(errno));
- }
- }
- out->set_location(filename, 1);
- current_filename = filename;
- current_lineno = 1;
- enum { START, MIDDLE, HAD_DOT, HAD_P, HAD_PS, HAD_l, HAD_lf } state = START;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- switch (state) {
- case START:
- if (c == '.')
- state = HAD_DOT;
- else {
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case MIDDLE:
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- break;
- case HAD_DOT:
- if (c == 'P')
- state = HAD_P;
- else if (lf_flag && c == 'l')
- state = HAD_l;
- else {
- putchar('.');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_P:
- if (c == 'S')
- state = HAD_PS;
- else {
- putchar('.');
- putchar('P');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_PS:
- if (c == ' ' || c == '\n' || compatible_flag) {
- ungetc(c, fp);
- do_picture(fp);
- state = START;
- }
- else {
- fputs(".PS", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- case HAD_l:
- if (c == 'f')
- state = HAD_lf;
- else {
- putchar('.');
- putchar('l');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_lf:
- if (c == ' ' || c == '\n' || compatible_flag) {
- string line;
- while (c != EOF) {
- line += c;
- if (c == '\n') {
- current_lineno++;
- break;
- }
- c = getc(fp);
- }
- line += '\0';
- interpret_lf_args(line.contents());
- printf(".lf%s", line.contents());
- state = START;
- }
- else {
- fputs(".lf", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- default:
- assert(0);
- }
- }
- switch (state) {
- case START:
- break;
- case MIDDLE:
- putchar('\n');
- break;
- case HAD_DOT:
- fputs(".\n", stdout);
- break;
- case HAD_P:
- fputs(".P\n", stdout);
- break;
- case HAD_PS:
- fputs(".PS\n", stdout);
- break;
- case HAD_l:
- fputs(".l\n", stdout);
- break;
- case HAD_lf:
- fputs(".lf\n", stdout);
- break;
- }
- if (fp != stdin)
- fclose(fp);
-}
-
-#ifdef FIG_SUPPORT
-void do_whole_file(const char *filename)
-{
- // Do not set current_filename.
- FILE *fp;
- if (strcmp(filename, "-") == 0)
- fp = stdin;
- else {
- errno = 0;
- fp = fopen(filename, "r");
- if (fp == 0)
- fatal("can't open `%1': %2", filename, strerror(errno));
- }
- lex_init(new file_input(fp, filename));
- if (yyparse())
- had_parse_error = 1;
- parse_cleanup();
- lex_cleanup();
-}
-#endif
-
-void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [ -nvC ] [ filename ... ]\n", program_name);
-#ifdef TEX_SUPPORT
- fprintf(stream, " %s -t [ -cvzC ] [ filename ... ]\n", program_name);
-#endif
-#ifdef FIG_SUPPORT
- fprintf(stream, " %s -f [ -v ] [ filename ]\n", program_name);
-#endif
-}
-
-#if defined(__MSDOS__) || defined(__EMX__)
-static char *fix_program_name(char *arg, char *dflt)
-{
- if (!arg)
- return dflt;
- char *prog = strchr(arg, '\0');
- for (;;) {
- if (prog == arg)
- break;
- --prog;
- if (strchr("\\/:", *prog)) {
- prog++;
- break;
- }
- }
- char *ext = strchr(prog, '.');
- if (ext)
- *ext = '\0';
- for (char *p = prog; *p; p++)
- if ('A' <= *p && *p <= 'Z')
- *p = 'a' + (*p - 'A');
- return prog;
-}
-#endif /* __MSDOS__ || __EMX__ */
-
-int main(int argc, char **argv)
-{
- setlocale(LC_NUMERIC, "C");
-#if defined(__MSDOS__) || defined(__EMX__)
- argv[0] = fix_program_name(argv[0], "pic");
-#endif /* __MSDOS__ || __EMX__ */
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
-#ifdef TEX_SUPPORT
- int tex_flag = 0;
- int tpic_flag = 0;
-#endif
-#ifdef FIG_SUPPORT
- int whole_file_flag = 0;
- int fig_flag = 0;
-#endif
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "T:CDSUtcvnxzpf", long_options, NULL))
- != EOF)
- switch (opt) {
- case 'C':
- compatible_flag = 1;
- break;
- case 'D':
- case 'T':
- break;
- case 'S':
- safer_flag = 1;
- break;
- case 'U':
- safer_flag = 0;
- break;
- case 'f':
-#ifdef FIG_SUPPORT
- whole_file_flag++;
- fig_flag++;
-#else
- fatal("fig support not included");
-#endif
- break;
- case 'n':
- driver_extension_flag = 0;
- break;
- case 'p':
- case 'x':
- warning("-%1 option is obsolete", char(opt));
- break;
- case 't':
-#ifdef TEX_SUPPORT
- tex_flag++;
-#else
- fatal("TeX support not included");
-#endif
- break;
- case 'c':
-#ifdef TEX_SUPPORT
- tpic_flag++;
-#else
- fatal("TeX support not included");
-#endif
- break;
- case 'v':
- {
- printf("GNU pic (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'z':
- // zero length lines will be printed as dots
- zero_length_line_flag++;
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- parse_init();
-#ifdef TEX_SUPPORT
- if (tpic_flag) {
- out = make_tpic_output();
- lf_flag = 0;
- }
- else if (tex_flag) {
- out = make_tex_output();
- command_char = '\\';
- lf_flag = 0;
- }
- else
-#endif
-#ifdef FIG_SUPPORT
- if (fig_flag)
- out = make_fig_output();
- else
-#endif
- out = make_troff_output();
-#ifdef FIG_SUPPORT
- if (whole_file_flag) {
- if (optind >= argc)
- do_whole_file("-");
- else if (argc - optind > 1) {
- usage(stderr);
- exit(1);
- } else
- do_whole_file(argv[optind]);
- }
- else {
-#endif
- if (optind >= argc)
- do_file("-");
- else
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
-#ifdef FIG_SUPPORT
- }
-#endif
- delete out;
- if (ferror(stdout) || fflush(stdout) < 0)
- fatal("output error");
- return had_parse_error;
-}
-
diff --git a/contrib/groff/src/preproc/pic/object.cpp b/contrib/groff/src/preproc/pic/object.cpp
deleted file mode 100644
index aefbd45e3940..000000000000
--- a/contrib/groff/src/preproc/pic/object.cpp
+++ /dev/null
@@ -1,2017 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-void print_object_list(object *);
-
-line_type::line_type()
-: type(solid), thickness(1.0)
-{
-}
-
-output::output() : args(0), desired_height(0.0), desired_width(0.0)
-{
-}
-
-output::~output()
-{
- a_delete args;
-}
-
-void output::set_desired_width_height(double wid, double ht)
-{
- desired_width = wid;
- desired_height = ht;
-}
-
-void output::set_args(const char *s)
-{
- a_delete args;
- if (s == 0 || *s == '\0')
- args = 0;
- else
- args = strsave(s);
-}
-
-int output::supports_filled_polygons()
-{
- return 0;
-}
-
-void output::begin_block(const position &, const position &)
-{
-}
-
-void output::end_block()
-{
-}
-
-double output::compute_scale(double sc, const position &ll, const position &ur)
-{
- distance dim = ur - ll;
- if (desired_width != 0.0 || desired_height != 0.0) {
- sc = 0.0;
- if (desired_width != 0.0) {
- if (dim.x == 0.0)
- error("width specified for picture with zero width");
- else
- sc = dim.x/desired_width;
- }
- if (desired_height != 0.0) {
- if (dim.y == 0.0)
- error("height specified for picture with zero height");
- else {
- double tem = dim.y/desired_height;
- if (tem > sc)
- sc = tem;
- }
- }
- return sc == 0.0 ? 1.0 : sc;
- }
- else {
- if (sc <= 0.0)
- sc = 1.0;
- distance sdim = dim/sc;
- double max_width = 0.0;
- lookup_variable("maxpswid", &max_width);
- double max_height = 0.0;
- lookup_variable("maxpsht", &max_height);
- if ((max_width > 0.0 && sdim.x > max_width)
- || (max_height > 0.0 && sdim.y > max_height)) {
- double xscale = dim.x/max_width;
- double yscale = dim.y/max_height;
- return xscale > yscale ? xscale : yscale;
- }
- else
- return sc;
- }
-}
-
-position::position(const place &pl)
-{
- if (pl.obj != 0) {
- // Use two statements to work around bug in SGI C++.
- object *tem = pl.obj;
- *this = tem->origin();
- }
- else {
- x = pl.x;
- y = pl.y;
- }
-}
-
-position::position() : x(0.0), y(0.0)
-{
-}
-
-position::position(double a, double b) : x(a), y(b)
-{
-}
-
-
-int operator==(const position &a, const position &b)
-{
- return a.x == b.x && a.y == b.y;
-}
-
-int operator!=(const position &a, const position &b)
-{
- return a.x != b.x || a.y != b.y;
-}
-
-position &position::operator+=(const position &a)
-{
- x += a.x;
- y += a.y;
- return *this;
-}
-
-position &position::operator-=(const position &a)
-{
- x -= a.x;
- y -= a.y;
- return *this;
-}
-
-position &position::operator*=(double a)
-{
- x *= a;
- y *= a;
- return *this;
-}
-
-position &position::operator/=(double a)
-{
- x /= a;
- y /= a;
- return *this;
-}
-
-position operator-(const position &a)
-{
- return position(-a.x, -a.y);
-}
-
-position operator+(const position &a, const position &b)
-{
- return position(a.x + b.x, a.y + b.y);
-}
-
-position operator-(const position &a, const position &b)
-{
- return position(a.x - b.x, a.y - b.y);
-}
-
-position operator/(const position &a, double n)
-{
- return position(a.x/n, a.y/n);
-}
-
-position operator*(const position &a, double n)
-{
- return position(a.x*n, a.y*n);
-}
-
-// dot product
-
-double operator*(const position &a, const position &b)
-{
- return a.x*b.x + a.y*b.y;
-}
-
-double hypot(const position &a)
-{
- return groff_hypot(a.x, a.y);
-}
-
-struct arrow_head_type {
- double height;
- double width;
- int solid;
-};
-
-void draw_arrow(const position &pos, const distance &dir,
- const arrow_head_type &aht, const line_type &lt,
- char *outline_color_for_fill)
-{
- double hyp = hypot(dir);
- if (hyp == 0.0) {
- error("cannot draw arrow on object with zero length");
- return;
- }
- position base = -dir;
- base *= aht.height/hyp;
- position n(dir.y, -dir.x);
- n *= aht.width/(hyp*2.0);
- line_type slt = lt;
- slt.type = line_type::solid;
- if (aht.solid && out->supports_filled_polygons()) {
- position v[3];
- v[0] = pos;
- v[1] = pos + base + n;
- v[2] = pos + base - n;
- // fill with outline color
- out->set_color(outline_color_for_fill, outline_color_for_fill);
- // make stroke thin to avoid arrow sticking
- slt.thickness = 0.1;
- out->polygon(v, 3, slt, 1);
- }
- else {
- // use two line segments to avoid arrow sticking
- out->line(pos + base - n, &pos, 1, slt);
- out->line(pos + base + n, &pos, 1, slt);
- }
-}
-
-object::object() : prev(0), next(0)
-{
-}
-
-object::~object()
-{
-}
-
-void object::move_by(const position &)
-{
-}
-
-void object::print()
-{
-}
-
-void object::print_text()
-{
-}
-
-int object::blank()
-{
- return 0;
-}
-
-struct bounding_box {
- int blank;
- position ll;
- position ur;
-
- bounding_box();
- void encompass(const position &);
-};
-
-bounding_box::bounding_box()
-: blank(1)
-{
-}
-
-void bounding_box::encompass(const position &pos)
-{
- if (blank) {
- ll = pos;
- ur = pos;
- blank = 0;
- }
- else {
- if (pos.x < ll.x)
- ll.x = pos.x;
- if (pos.y < ll.y)
- ll.y = pos.y;
- if (pos.x > ur.x)
- ur.x = pos.x;
- if (pos.y > ur.y)
- ur.y = pos.y;
- }
-}
-
-void object::update_bounding_box(bounding_box *)
-{
-}
-
-position object::origin()
-{
- return position(0.0,0.0);
-}
-
-position object::north()
-{
- return origin();
-}
-
-position object::south()
-{
- return origin();
-}
-
-position object::east()
-{
- return origin();
-}
-
-position object::west()
-{
- return origin();
-}
-
-position object::north_east()
-{
- return origin();
-}
-
-position object::north_west()
-{
- return origin();
-}
-
-position object::south_east()
-{
- return origin();
-}
-
-position object::south_west()
-{
- return origin();
-}
-
-position object::start()
-{
- return origin();
-}
-
-position object::end()
-{
- return origin();
-}
-
-position object::center()
-{
- return origin();
-}
-
-double object::width()
-{
- return 0.0;
-}
-
-double object::radius()
-{
- return 0.0;
-}
-
-double object::height()
-{
- return 0.0;
-}
-
-place *object::find_label(const char *)
-{
- return 0;
-}
-
-segment::segment(const position &a, int n, segment *p)
-: is_absolute(n), pos(a), next(p)
-{
-}
-
-text_item::text_item(char *t, const char *fn, int ln)
-: next(0), text(t), filename(fn), lineno(ln)
-{
- adj.h = CENTER_ADJUST;
- adj.v = NONE_ADJUST;
-}
-
-text_item::~text_item()
-{
- a_delete text;
-}
-
-object_spec::object_spec(object_type t) : type(t)
-{
- flags = 0;
- tbl = 0;
- segment_list = 0;
- segment_width = segment_height = 0.0;
- segment_is_absolute = 0;
- text = 0;
- shaded = 0;
- outlined = 0;
- with = 0;
- dir = RIGHT_DIRECTION;
-}
-
-object_spec::~object_spec()
-{
- delete tbl;
- while (segment_list != 0) {
- segment *tem = segment_list;
- segment_list = segment_list->next;
- delete tem;
- }
- object *p = oblist.head;
- while (p != 0) {
- object *tem = p;
- p = p->next;
- delete tem;
- }
- while (text != 0) {
- text_item *tem = text;
- text = text->next;
- delete tem;
- }
- delete with;
- a_delete shaded;
- a_delete outlined;
-}
-
-class command_object : public object {
- char *s;
- const char *filename;
- int lineno;
-public:
- command_object(char *, const char *, int);
- ~command_object();
- object_type type() { return OTHER_OBJECT; }
- void print();
-};
-
-command_object::command_object(char *p, const char *fn, int ln)
-: s(p), filename(fn), lineno(ln)
-{
-}
-
-command_object::~command_object()
-{
- a_delete s;
-}
-
-void command_object::print()
-{
- out->command(s, filename, lineno);
-}
-
-object *make_command_object(char *s, const char *fn, int ln)
-{
- return new command_object(s, fn, ln);
-}
-
-class mark_object : public object {
-public:
- mark_object();
- object_type type();
-};
-
-object *make_mark_object()
-{
- return new mark_object();
-}
-
-mark_object::mark_object()
-{
-}
-
-object_type mark_object::type()
-{
- return MARK_OBJECT;
-}
-
-object_list::object_list() : head(0), tail(0)
-{
-}
-
-void object_list::append(object *obj)
-{
- if (tail == 0) {
- obj->next = obj->prev = 0;
- head = tail = obj;
- }
- else {
- obj->prev = tail;
- obj->next = 0;
- tail->next = obj;
- tail = obj;
- }
-}
-
-void object_list::wrap_up_block(object_list *ol)
-{
- object *p;
- for (p = tail; p && p->type() != MARK_OBJECT; p = p->prev)
- ;
- assert(p != 0);
- ol->head = p->next;
- if (ol->head) {
- ol->tail = tail;
- ol->head->prev = 0;
- }
- else
- ol->tail = 0;
- tail = p->prev;
- if (tail)
- tail->next = 0;
- else
- head = 0;
- delete p;
-}
-
-text_piece::text_piece()
-: text(0), filename(0), lineno(-1)
-{
- adj.h = CENTER_ADJUST;
- adj.v = NONE_ADJUST;
-}
-
-text_piece::~text_piece()
-{
- a_delete text;
-}
-
-class graphic_object : public object {
- int ntext;
- text_piece *text;
- int aligned;
-protected:
- line_type lt;
- char *outline_color;
- char *color_fill;
-public:
- graphic_object();
- ~graphic_object();
- object_type type() = 0;
- void print_text();
- void add_text(text_item *, int);
- void set_dotted(double);
- void set_dashed(double);
- void set_thickness(double);
- void set_invisible();
- void set_outline_color(char *);
- char *get_outline_color();
- virtual void set_fill(double);
- virtual void set_fill_color(char *);
-};
-
-graphic_object::graphic_object()
-: ntext(0), text(0), aligned(0), outline_color(0), color_fill(0)
-{
-}
-
-void graphic_object::set_dotted(double wid)
-{
- lt.type = line_type::dotted;
- lt.dash_width = wid;
-}
-
-void graphic_object::set_dashed(double wid)
-{
- lt.type = line_type::dashed;
- lt.dash_width = wid;
-}
-
-void graphic_object::set_thickness(double th)
-{
- lt.thickness = th;
-}
-
-void graphic_object::set_fill(double)
-{
-}
-
-void graphic_object::set_fill_color(char *c)
-{
- color_fill = strsave(c);
-}
-
-void graphic_object::set_outline_color(char *c)
-{
- outline_color = strsave(c);
-}
-
-char *graphic_object::get_outline_color()
-{
- return outline_color;
-}
-
-void graphic_object::set_invisible()
-{
- lt.type = line_type::invisible;
-}
-
-void graphic_object::add_text(text_item *t, int a)
-{
- aligned = a;
- int len = 0;
- text_item *p;
- for (p = t; p; p = p->next)
- len++;
- if (len == 0)
- text = 0;
- else {
- text = new text_piece[len];
- for (p = t, len = 0; p; p = p->next, len++) {
- text[len].text = p->text;
- p->text = 0;
- text[len].adj = p->adj;
- text[len].filename = p->filename;
- text[len].lineno = p->lineno;
- }
- }
- ntext = len;
-}
-
-void graphic_object::print_text()
-{
- double angle = 0.0;
- if (aligned) {
- position d(end() - start());
- if (d.x != 0.0 || d.y != 0.0)
- angle = atan2(d.y, d.x);
- }
- if (text != 0) {
- out->set_color(color_fill, get_outline_color());
- out->text(center(), text, ntext, angle);
- out->reset_color();
- }
-}
-
-graphic_object::~graphic_object()
-{
- if (text)
- ad_delete(ntext) text;
-}
-
-class rectangle_object : public graphic_object {
-protected:
- position cent;
- position dim;
-public:
- rectangle_object(const position &);
- double width() { return dim.x; }
- double height() { return dim.y; }
- position origin() { return cent; }
- position center() { return cent; }
- position north() { return position(cent.x, cent.y + dim.y/2.0); }
- position south() { return position(cent.x, cent.y - dim.y/2.0); }
- position east() { return position(cent.x + dim.x/2.0, cent.y); }
- position west() { return position(cent.x - dim.x/2.0, cent.y); }
- position north_east() { return position(cent.x + dim.x/2.0, cent.y + dim.y/2.0); }
- position north_west() { return position(cent.x - dim.x/2.0, cent.y + dim.y/2.0); }
- position south_east() { return position(cent.x + dim.x/2.0, cent.y - dim.y/2.0); }
- position south_west() { return position(cent.x - dim.x/2.0, cent.y - dim.y/2.0); }
- object_type type() = 0;
- void update_bounding_box(bounding_box *);
- void move_by(const position &);
-};
-
-rectangle_object::rectangle_object(const position &d)
-: dim(d)
-{
-}
-
-void rectangle_object::update_bounding_box(bounding_box *p)
-{
- p->encompass(cent - dim/2.0);
- p->encompass(cent + dim/2.0);
-}
-
-void rectangle_object::move_by(const position &a)
-{
- cent += a;
-}
-
-class closed_object : public rectangle_object {
-public:
- closed_object(const position &);
- object_type type() = 0;
- void set_fill(double);
- void set_fill_color(char *fill);
-protected:
- double fill; // < 0 if not filled
- char *color_fill; // = 0 if not colored
-};
-
-closed_object::closed_object(const position &pos)
-: rectangle_object(pos), fill(-1.0), color_fill(0)
-{
-}
-
-void closed_object::set_fill(double f)
-{
- assert(f >= 0.0);
- fill = f;
-}
-
-void closed_object::set_fill_color(char *f)
-{
- color_fill = strsave(f);
-}
-
-class box_object : public closed_object {
- double xrad;
- double yrad;
-public:
- box_object(const position &, double);
- object_type type() { return BOX_OBJECT; }
- void print();
- position north_east();
- position north_west();
- position south_east();
- position south_west();
-};
-
-box_object::box_object(const position &pos, double r)
-: closed_object(pos), xrad(dim.x > 0 ? r : -r), yrad(dim.y > 0 ? r : -r)
-{
-}
-
-const double CHOP_FACTOR = 1.0 - 1.0/M_SQRT2;
-
-position box_object::north_east()
-{
- return position(cent.x + dim.x/2.0 - CHOP_FACTOR*xrad,
- cent.y + dim.y/2.0 - CHOP_FACTOR*yrad);
-}
-
-position box_object::north_west()
-{
- return position(cent.x - dim.x/2.0 + CHOP_FACTOR*xrad,
- cent.y + dim.y/2.0 - CHOP_FACTOR*yrad);
-}
-
-position box_object::south_east()
-{
- return position(cent.x + dim.x/2.0 - CHOP_FACTOR*xrad,
- cent.y - dim.y/2.0 + CHOP_FACTOR*yrad);
-}
-
-position box_object::south_west()
-{
- return position(cent.x - dim.x/2.0 + CHOP_FACTOR*xrad,
- cent.y - dim.y/2.0 + CHOP_FACTOR*yrad);
-}
-
-void box_object::print()
-{
- if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
- return;
- out->set_color(color_fill, graphic_object::get_outline_color());
- if (xrad == 0.0) {
- distance dim2 = dim/2.0;
- position vec[4];
- vec[0] = cent + position(dim2.x, -dim2.y);
- vec[1] = cent + position(dim2.x, dim2.y);
- vec[2] = cent + position(-dim2.x, dim2.y);
- vec[3] = cent + position(-dim2.x, -dim2.y);
- out->polygon(vec, 4, lt, fill);
- }
- else {
- distance abs_dim(fabs(dim.x), fabs(dim.y));
- out->rounded_box(cent, abs_dim, fabs(xrad), lt, fill);
- }
- out->reset_color();
-}
-
-graphic_object *object_spec::make_box(position *curpos, direction *dirp)
-{
- static double last_box_height;
- static double last_box_width;
- static double last_box_radius;
- static int have_last_box = 0;
- if (!(flags & HAS_HEIGHT)) {
- if ((flags & IS_SAME) && have_last_box)
- height = last_box_height;
- else
- lookup_variable("boxht", &height);
- }
- if (!(flags & HAS_WIDTH)) {
- if ((flags & IS_SAME) && have_last_box)
- width = last_box_width;
- else
- lookup_variable("boxwid", &width);
- }
- if (!(flags & HAS_RADIUS)) {
- if ((flags & IS_SAME) && have_last_box)
- radius = last_box_radius;
- else
- lookup_variable("boxrad", &radius);
- }
- last_box_width = width;
- last_box_height = height;
- last_box_radius = radius;
- have_last_box = 1;
- radius = fabs(radius);
- if (radius*2.0 > fabs(width))
- radius = fabs(width/2.0);
- if (radius*2.0 > fabs(height))
- radius = fabs(height/2.0);
- box_object *p = new box_object(position(width, height), radius);
- if (!position_rectangle(p, curpos, dirp)) {
- delete p;
- p = 0;
- }
- return p;
-}
-
-// return non-zero for success
-
-int object_spec::position_rectangle(rectangle_object *p,
- position *curpos, direction *dirp)
-{
- position pos;
- dir = *dirp; // ignore any direction in attribute list
- position motion;
- switch (dir) {
- case UP_DIRECTION:
- motion.y = p->height()/2.0;
- break;
- case DOWN_DIRECTION:
- motion.y = -p->height()/2.0;
- break;
- case LEFT_DIRECTION:
- motion.x = -p->width()/2.0;
- break;
- case RIGHT_DIRECTION:
- motion.x = p->width()/2.0;
- break;
- default:
- assert(0);
- }
- if (flags & HAS_AT) {
- pos = at;
- if (flags & HAS_WITH) {
- place offset;
- place here;
- here.obj = p;
- if (!with->follow(here, &offset))
- return 0;
- pos -= offset;
- }
- }
- else {
- pos = *curpos;
- pos += motion;
- }
- p->move_by(pos);
- pos += motion;
- *curpos = pos;
- return 1;
-}
-
-class block_object : public rectangle_object {
- object_list oblist;
- PTABLE(place) *tbl;
-public:
- block_object(const position &, const object_list &ol, PTABLE(place) *t);
- ~block_object();
- place *find_label(const char *);
- object_type type();
- void move_by(const position &);
- void print();
-};
-
-block_object::block_object(const position &d, const object_list &ol,
- PTABLE(place) *t)
-: rectangle_object(d), oblist(ol), tbl(t)
-{
-}
-
-block_object::~block_object()
-{
- delete tbl;
- object *p = oblist.head;
- while (p != 0) {
- object *tem = p;
- p = p->next;
- delete tem;
- }
-}
-
-void block_object::print()
-{
- out->begin_block(south_west(), north_east());
- print_object_list(oblist.head);
- out->end_block();
-}
-
-static void adjust_objectless_places(PTABLE(place) *tbl, const position &a)
-{
- // Adjust all the labels that aren't attached to objects.
- PTABLE_ITERATOR(place) iter(tbl);
- const char *key;
- place *pl;
- while (iter.next(&key, &pl))
- if (key && csupper(key[0]) && pl->obj == 0) {
- pl->x += a.x;
- pl->y += a.y;
- }
-}
-
-void block_object::move_by(const position &a)
-{
- cent += a;
- for (object *p = oblist.head; p; p = p->next)
- p->move_by(a);
- adjust_objectless_places(tbl, a);
-}
-
-
-place *block_object::find_label(const char *name)
-{
- return tbl->lookup(name);
-}
-
-object_type block_object::type()
-{
- return BLOCK_OBJECT;
-}
-
-graphic_object *object_spec::make_block(position *curpos, direction *dirp)
-{
- bounding_box bb;
- for (object *p = oblist.head; p; p = p->next)
- p->update_bounding_box(&bb);
- position dim;
- if (!bb.blank) {
- position m = -(bb.ll + bb.ur)/2.0;
- for (object *p = oblist.head; p; p = p->next)
- p->move_by(m);
- adjust_objectless_places(tbl, m);
- dim = bb.ur - bb.ll;
- }
- if (flags & HAS_WIDTH)
- dim.x = width;
- if (flags & HAS_HEIGHT)
- dim.y = height;
- block_object *block = new block_object(dim, oblist, tbl);
- if (!position_rectangle(block, curpos, dirp)) {
- delete block;
- block = 0;
- }
- tbl = 0;
- oblist.head = oblist.tail = 0;
- return block;
-}
-
-class text_object : public rectangle_object {
-public:
- text_object(const position &);
- object_type type() { return TEXT_OBJECT; }
-};
-
-text_object::text_object(const position &d)
-: rectangle_object(d)
-{
-}
-
-graphic_object *object_spec::make_text(position *curpos, direction *dirp)
-{
- if (!(flags & HAS_HEIGHT)) {
- lookup_variable("textht", &height);
- int nitems = 0;
- for (text_item *t = text; t; t = t->next)
- nitems++;
- height *= nitems;
- }
- if (!(flags & HAS_WIDTH))
- lookup_variable("textwid", &width);
- text_object *p = new text_object(position(width, height));
- if (!position_rectangle(p, curpos, dirp)) {
- delete p;
- p = 0;
- }
- return p;
-}
-
-
-class ellipse_object : public closed_object {
-public:
- ellipse_object(const position &);
- position north_east() { return position(cent.x + dim.x/(M_SQRT2*2.0),
- cent.y + dim.y/(M_SQRT2*2.0)); }
- position north_west() { return position(cent.x - dim.x/(M_SQRT2*2.0),
- cent.y + dim.y/(M_SQRT2*2.0)); }
- position south_east() { return position(cent.x + dim.x/(M_SQRT2*2.0),
- cent.y - dim.y/(M_SQRT2*2.0)); }
- position south_west() { return position(cent.x - dim.x/(M_SQRT2*2.0),
- cent.y - dim.y/(M_SQRT2*2.0)); }
- double radius() { return dim.x/2.0; }
- object_type type() { return ELLIPSE_OBJECT; }
- void print();
-};
-
-ellipse_object::ellipse_object(const position &d)
-: closed_object(d)
-{
-}
-
-void ellipse_object::print()
-{
- if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
- return;
- out->set_color(color_fill, graphic_object::get_outline_color());
- out->ellipse(cent, dim, lt, fill);
- out->reset_color();
-}
-
-graphic_object *object_spec::make_ellipse(position *curpos, direction *dirp)
-{
- static double last_ellipse_height;
- static double last_ellipse_width;
- static int have_last_ellipse = 0;
- if (!(flags & HAS_HEIGHT)) {
- if ((flags & IS_SAME) && have_last_ellipse)
- height = last_ellipse_height;
- else
- lookup_variable("ellipseht", &height);
- }
- if (!(flags & HAS_WIDTH)) {
- if ((flags & IS_SAME) && have_last_ellipse)
- width = last_ellipse_width;
- else
- lookup_variable("ellipsewid", &width);
- }
- last_ellipse_width = width;
- last_ellipse_height = height;
- have_last_ellipse = 1;
- ellipse_object *p = new ellipse_object(position(width, height));
- if (!position_rectangle(p, curpos, dirp)) {
- delete p;
- return 0;
- }
- return p;
-}
-
-class circle_object : public ellipse_object {
-public:
- circle_object(double);
- object_type type() { return CIRCLE_OBJECT; }
- void print();
-};
-
-circle_object::circle_object(double diam)
-: ellipse_object(position(diam, diam))
-{
-}
-
-void circle_object::print()
-{
- if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
- return;
- out->set_color(color_fill, graphic_object::get_outline_color());
- out->circle(cent, dim.x/2.0, lt, fill);
- out->reset_color();
-}
-
-graphic_object *object_spec::make_circle(position *curpos, direction *dirp)
-{
- static double last_circle_radius;
- static int have_last_circle = 0;
- if (!(flags & HAS_RADIUS)) {
- if ((flags & IS_SAME) && have_last_circle)
- radius = last_circle_radius;
- else
- lookup_variable("circlerad", &radius);
- }
- last_circle_radius = radius;
- have_last_circle = 1;
- circle_object *p = new circle_object(radius*2.0);
- if (!position_rectangle(p, curpos, dirp)) {
- delete p;
- return 0;
- }
- return p;
-}
-
-class move_object : public graphic_object {
- position strt;
- position en;
-public:
- move_object(const position &s, const position &e);
- position origin() { return en; }
- object_type type() { return MOVE_OBJECT; }
- void update_bounding_box(bounding_box *);
- void move_by(const position &);
-};
-
-move_object::move_object(const position &s, const position &e)
-: strt(s), en(e)
-{
-}
-
-void move_object::update_bounding_box(bounding_box *p)
-{
- p->encompass(strt);
- p->encompass(en);
-}
-
-void move_object::move_by(const position &a)
-{
- strt += a;
- en += a;
-}
-
-graphic_object *object_spec::make_move(position *curpos, direction *dirp)
-{
- static position last_move;
- static int have_last_move = 0;
- *dirp = dir;
- // No need to look at at since `at' attribute sets `from' attribute.
- position startpos = (flags & HAS_FROM) ? from : *curpos;
- if (!(flags & HAS_SEGMENT)) {
- if ((flags & IS_SAME) && have_last_move)
- segment_pos = last_move;
- else {
- switch (dir) {
- case UP_DIRECTION:
- segment_pos.y = segment_height;
- break;
- case DOWN_DIRECTION:
- segment_pos.y = -segment_height;
- break;
- case LEFT_DIRECTION:
- segment_pos.x = -segment_width;
- break;
- case RIGHT_DIRECTION:
- segment_pos.x = segment_width;
- break;
- default:
- assert(0);
- }
- }
- }
- segment_list = new segment(segment_pos, segment_is_absolute, segment_list);
- // Reverse the segment_list so that it's in forward order.
- segment *old = segment_list;
- segment_list = 0;
- while (old != 0) {
- segment *tem = old->next;
- old->next = segment_list;
- segment_list = old;
- old = tem;
- }
- // Compute the end position.
- position endpos = startpos;
- for (segment *s = segment_list; s; s = s->next)
- if (s->is_absolute)
- endpos = s->pos;
- else
- endpos += s->pos;
- have_last_move = 1;
- last_move = endpos - startpos;
- move_object *p = new move_object(startpos, endpos);
- *curpos = endpos;
- return p;
-}
-
-class linear_object : public graphic_object {
-protected:
- char arrow_at_start;
- char arrow_at_end;
- arrow_head_type aht;
- position strt;
- position en;
-public:
- linear_object(const position &s, const position &e);
- position start() { return strt; }
- position end() { return en; }
- void move_by(const position &);
- void update_bounding_box(bounding_box *) = 0;
- object_type type() = 0;
- void add_arrows(int at_start, int at_end, const arrow_head_type &);
-};
-
-class line_object : public linear_object {
-protected:
- position *v;
- int n;
-public:
- line_object(const position &s, const position &e, position *, int);
- ~line_object();
- position origin() { return strt; }
- position center() { return (strt + en)/2.0; }
- position north() { return (en.y - strt.y) > 0 ? en : strt; }
- position south() { return (en.y - strt.y) < 0 ? en : strt; }
- position east() { return (en.x - strt.x) > 0 ? en : strt; }
- position west() { return (en.x - strt.x) < 0 ? en : strt; }
- object_type type() { return LINE_OBJECT; }
- void update_bounding_box(bounding_box *);
- void print();
- void move_by(const position &);
-};
-
-class arrow_object : public line_object {
-public:
- arrow_object(const position &, const position &, position *, int);
- object_type type() { return ARROW_OBJECT; }
-};
-
-class spline_object : public line_object {
-public:
- spline_object(const position &, const position &, position *, int);
- object_type type() { return SPLINE_OBJECT; }
- void print();
- void update_bounding_box(bounding_box *);
-};
-
-linear_object::linear_object(const position &s, const position &e)
-: arrow_at_start(0), arrow_at_end(0), strt(s), en(e)
-{
-}
-
-void linear_object::move_by(const position &a)
-{
- strt += a;
- en += a;
-}
-
-void linear_object::add_arrows(int at_start, int at_end,
- const arrow_head_type &a)
-{
- arrow_at_start = at_start;
- arrow_at_end = at_end;
- aht = a;
-}
-
-line_object::line_object(const position &s, const position &e,
- position *p, int i)
-: linear_object(s, e), v(p), n(i)
-{
-}
-
-void line_object::print()
-{
- if (lt.type == line_type::invisible)
- return;
- out->set_color(0, graphic_object::get_outline_color());
- // shorten line length to avoid arrow sticking.
- position sp = strt;
- if (arrow_at_start) {
- position base = v[0] - strt;
- double hyp = hypot(base);
- if (hyp == 0.0) {
- error("cannot draw arrow on object with zero length");
- return;
- }
- if (aht.solid && out->supports_filled_polygons()) {
- base *= aht.height / hyp;
- draw_arrow(strt, strt - v[0], aht, lt,
- graphic_object::get_outline_color());
- sp = strt + base;
- } else {
- base *= fabs(lt.thickness) / hyp / 72 / 4;
- sp = strt + base;
- draw_arrow(sp, sp - v[0], aht, lt,
- graphic_object::get_outline_color());
- }
- }
- if (arrow_at_end) {
- position base = v[n-1] - (n > 1 ? v[n-2] : strt);
- double hyp = hypot(base);
- if (hyp == 0.0) {
- error("cannot draw arrow on object with zero length");
- return;
- }
- if (aht.solid && out->supports_filled_polygons()) {
- base *= aht.height / hyp;
- draw_arrow(en, v[n-1] - (n > 1 ? v[n-2] : strt), aht, lt,
- graphic_object::get_outline_color());
- v[n-1] = en - base;
- } else {
- base *= fabs(lt.thickness) / hyp / 72 / 4;
- v[n-1] = en - base;
- draw_arrow(v[n-1], v[n-1] - (n > 1 ? v[n-2] : strt), aht, lt,
- graphic_object::get_outline_color());
- }
- }
- out->line(sp, v, n, lt);
- out->reset_color();
-}
-
-void line_object::update_bounding_box(bounding_box *p)
-{
- p->encompass(strt);
- for (int i = 0; i < n; i++)
- p->encompass(v[i]);
-}
-
-void line_object::move_by(const position &pos)
-{
- linear_object::move_by(pos);
- for (int i = 0; i < n; i++)
- v[i] += pos;
-}
-
-void spline_object::update_bounding_box(bounding_box *p)
-{
- p->encompass(strt);
- p->encompass(en);
- /*
-
- If
-
- p1 = q1/2 + q2/2
- p2 = q1/6 + q2*5/6
- p3 = q2*5/6 + q3/6
- p4 = q2/2 + q3/2
- [ the points for the Bezier cubic ]
-
- and
-
- t = .5
-
- then
-
- (1-t)^3*p1 + 3*t*(t - 1)^2*p2 + 3*t^2*(1-t)*p3 + t^3*p4
- [ the equation for the Bezier cubic ]
-
- = .125*q1 + .75*q2 + .125*q3
-
- */
- for (int i = 1; i < n; i++)
- p->encompass((i == 1 ? strt : v[i-2])*.125 + v[i-1]*.75 + v[i]*.125);
-}
-
-arrow_object::arrow_object(const position &s, const position &e,
- position *p, int i)
-: line_object(s, e, p, i)
-{
-}
-
-spline_object::spline_object(const position &s, const position &e,
- position *p, int i)
-: line_object(s, e, p, i)
-{
-}
-
-void spline_object::print()
-{
- if (lt.type == line_type::invisible)
- return;
- out->set_color(0, graphic_object::get_outline_color());
- // shorten line length for spline to avoid arrow sticking
- position sp = strt;
- if (arrow_at_start) {
- position base = v[0] - strt;
- double hyp = hypot(base);
- if (hyp == 0.0) {
- error("cannot draw arrow on object with zero length");
- return;
- }
- if (aht.solid && out->supports_filled_polygons()) {
- base *= aht.height / hyp;
- draw_arrow(strt, strt - v[0], aht, lt,
- graphic_object::get_outline_color());
- sp = strt + base*0.1; // to reserve spline shape
- } else {
- base *= fabs(lt.thickness) / hyp / 72 / 4;
- sp = strt + base;
- draw_arrow(sp, sp - v[0], aht, lt,
- graphic_object::get_outline_color());
- }
- }
- if (arrow_at_end) {
- position base = v[n-1] - (n > 1 ? v[n-2] : strt);
- double hyp = hypot(base);
- if (hyp == 0.0) {
- error("cannot draw arrow on object with zero length");
- return;
- }
- if (aht.solid && out->supports_filled_polygons()) {
- base *= aht.height / hyp;
- draw_arrow(en, v[n-1] - (n > 1 ? v[n-2] : strt), aht, lt,
- graphic_object::get_outline_color());
- v[n-1] = en - base*0.1; // to reserve spline shape
- } else {
- base *= fabs(lt.thickness) / hyp / 72 / 4;
- v[n-1] = en - base;
- draw_arrow(v[n-1], v[n-1] - (n > 1 ? v[n-2] : strt), aht, lt,
- graphic_object::get_outline_color());
- }
- }
- out->spline(sp, v, n, lt);
- out->reset_color();
-}
-
-line_object::~line_object()
-{
- a_delete v;
-}
-
-linear_object *object_spec::make_line(position *curpos, direction *dirp)
-{
- static position last_line;
- static int have_last_line = 0;
- *dirp = dir;
- // No need to look at at since `at' attribute sets `from' attribute.
- position startpos = (flags & HAS_FROM) ? from : *curpos;
- if (!(flags & HAS_SEGMENT)) {
- if ((flags & IS_SAME) && (type == LINE_OBJECT || type == ARROW_OBJECT)
- && have_last_line)
- segment_pos = last_line;
- else
- switch (dir) {
- case UP_DIRECTION:
- segment_pos.y = segment_height;
- break;
- case DOWN_DIRECTION:
- segment_pos.y = -segment_height;
- break;
- case LEFT_DIRECTION:
- segment_pos.x = -segment_width;
- break;
- case RIGHT_DIRECTION:
- segment_pos.x = segment_width;
- break;
- default:
- assert(0);
- }
- }
- segment_list = new segment(segment_pos, segment_is_absolute, segment_list);
- // reverse the segment_list so that it's in forward order
- segment *old = segment_list;
- segment_list = 0;
- while (old != 0) {
- segment *tem = old->next;
- old->next = segment_list;
- segment_list = old;
- old = tem;
- }
- // Absolutise all movements
- position endpos = startpos;
- int nsegments = 0;
- segment *s;
- for (s = segment_list; s; s = s->next, nsegments++)
- if (s->is_absolute)
- endpos = s->pos;
- else {
- endpos += s->pos;
- s->pos = endpos;
- s->is_absolute = 1; // to avoid confusion
- }
- // handle chop
- line_object *p = 0;
- position *v = new position[nsegments];
- int i = 0;
- for (s = segment_list; s; s = s->next, i++)
- v[i] = s->pos;
- if (flags & IS_DEFAULT_CHOPPED) {
- lookup_variable("circlerad", &start_chop);
- end_chop = start_chop;
- flags |= IS_CHOPPED;
- }
- if (flags & IS_CHOPPED) {
- position start_chop_vec, end_chop_vec;
- if (start_chop != 0.0) {
- start_chop_vec = v[0] - startpos;
- start_chop_vec *= start_chop / hypot(start_chop_vec);
- }
- if (end_chop != 0.0) {
- end_chop_vec = (v[nsegments - 1]
- - (nsegments > 1 ? v[nsegments - 2] : startpos));
- end_chop_vec *= end_chop / hypot(end_chop_vec);
- }
- startpos += start_chop_vec;
- v[nsegments - 1] -= end_chop_vec;
- endpos -= end_chop_vec;
- }
- switch (type) {
- case SPLINE_OBJECT:
- p = new spline_object(startpos, endpos, v, nsegments);
- break;
- case ARROW_OBJECT:
- p = new arrow_object(startpos, endpos, v, nsegments);
- break;
- case LINE_OBJECT:
- p = new line_object(startpos, endpos, v, nsegments);
- break;
- default:
- assert(0);
- }
- have_last_line = 1;
- last_line = endpos - startpos;
- *curpos = endpos;
- return p;
-}
-
-class arc_object : public linear_object {
- int clockwise;
- position cent;
- double rad;
-public:
- arc_object(int, const position &, const position &, const position &);
- position origin() { return cent; }
- position center() { return cent; }
- double radius() { return rad; }
- position north();
- position south();
- position east();
- position west();
- position north_east();
- position north_west();
- position south_east();
- position south_west();
- void update_bounding_box(bounding_box *);
- object_type type() { return ARC_OBJECT; }
- void print();
- void move_by(const position &pos);
-};
-
-arc_object::arc_object(int cw, const position &s, const position &e,
- const position &c)
-: linear_object(s, e), clockwise(cw), cent(c)
-{
- rad = hypot(c - s);
-}
-
-void arc_object::move_by(const position &pos)
-{
- linear_object::move_by(pos);
- cent += pos;
-}
-
-// we get arc corners from the corresponding circle
-
-position arc_object::north()
-{
- position result(cent);
- result.y += rad;
- return result;
-}
-
-position arc_object::south()
-{
- position result(cent);
- result.y -= rad;
- return result;
-}
-
-position arc_object::east()
-{
- position result(cent);
- result.x += rad;
- return result;
-}
-
-position arc_object::west()
-{
- position result(cent);
- result.x -= rad;
- return result;
-}
-
-position arc_object::north_east()
-{
- position result(cent);
- result.x += rad/M_SQRT2;
- result.y += rad/M_SQRT2;
- return result;
-}
-
-position arc_object::north_west()
-{
- position result(cent);
- result.x -= rad/M_SQRT2;
- result.y += rad/M_SQRT2;
- return result;
-}
-
-position arc_object::south_east()
-{
- position result(cent);
- result.x += rad/M_SQRT2;
- result.y -= rad/M_SQRT2;
- return result;
-}
-
-position arc_object::south_west()
-{
- position result(cent);
- result.x -= rad/M_SQRT2;
- result.y -= rad/M_SQRT2;
- return result;
-}
-
-
-void arc_object::print()
-{
- if (lt.type == line_type::invisible)
- return;
- out->set_color(0, graphic_object::get_outline_color());
- // handle arrow direction; make shorter line for arc
- position sp, ep, b;
- if (clockwise) {
- sp = en;
- ep = strt;
- } else {
- sp = strt;
- ep = en;
- }
- if (arrow_at_start) {
- double theta = aht.height / rad;
- if (clockwise)
- theta = - theta;
- b = strt - cent;
- b = position(b.x*cos(theta) - b.y*sin(theta),
- b.x*sin(theta) + b.y*cos(theta)) + cent;
- if (clockwise)
- ep = b;
- else
- sp = b;
- if (aht.solid && out->supports_filled_polygons()) {
- draw_arrow(strt, strt - b, aht, lt,
- graphic_object::get_outline_color());
- } else {
- position v = b;
- theta = fabs(lt.thickness) / 72 / 4 / rad;
- if (clockwise)
- theta = - theta;
- b = strt - cent;
- b = position(b.x*cos(theta) - b.y*sin(theta),
- b.x*sin(theta) + b.y*cos(theta)) + cent;
- draw_arrow(b, b - v, aht, lt,
- graphic_object::get_outline_color());
- out->line(b, &v, 1, lt);
- }
- }
- if (arrow_at_end) {
- double theta = aht.height / rad;
- if (!clockwise)
- theta = - theta;
- b = en - cent;
- b = position(b.x*cos(theta) - b.y*sin(theta),
- b.x*sin(theta) + b.y*cos(theta)) + cent;
- if (clockwise)
- sp = b;
- else
- ep = b;
- if (aht.solid && out->supports_filled_polygons()) {
- draw_arrow(en, en - b, aht, lt,
- graphic_object::get_outline_color());
- } else {
- position v = b;
- theta = fabs(lt.thickness) / 72 / 4 / rad;
- if (!clockwise)
- theta = - theta;
- b = en - cent;
- b = position(b.x*cos(theta) - b.y*sin(theta),
- b.x*sin(theta) + b.y*cos(theta)) + cent;
- draw_arrow(b, b - v, aht, lt,
- graphic_object::get_outline_color());
- out->line(b, &v, 1, lt);
- }
- }
- out->arc(sp, cent, ep, lt);
- out->reset_color();
-}
-
-inline double max(double a, double b)
-{
- return a > b ? a : b;
-}
-
-void arc_object::update_bounding_box(bounding_box *p)
-{
- p->encompass(strt);
- p->encompass(en);
- position start_offset = strt - cent;
- if (start_offset.x == 0.0 && start_offset.y == 0.0)
- return;
- position end_offset = en - cent;
- if (end_offset.x == 0.0 && end_offset.y == 0.0)
- return;
- double start_quad = atan2(start_offset.y, start_offset.x)/(M_PI/2.0);
- double end_quad = atan2(end_offset.y, end_offset.x)/(M_PI/2.0);
- if (clockwise) {
- double temp = start_quad;
- start_quad = end_quad;
- end_quad = temp;
- }
- if (start_quad < 0.0)
- start_quad += 4.0;
- while (end_quad <= start_quad)
- end_quad += 4.0;
- double r = max(hypot(start_offset), hypot(end_offset));
- for (int q = int(start_quad) + 1; q < end_quad; q++) {
- position offset;
- switch (q % 4) {
- case 0:
- offset.x = r;
- break;
- case 1:
- offset.y = r;
- break;
- case 2:
- offset.x = -r;
- break;
- case 3:
- offset.y = -r;
- break;
- }
- p->encompass(cent + offset);
- }
-}
-
-// We ignore the with attribute. The at attribute always refers to the center.
-
-linear_object *object_spec::make_arc(position *curpos, direction *dirp)
-{
- *dirp = dir;
- int cw = (flags & IS_CLOCKWISE) != 0;
- // compute the start
- position startpos;
- if (flags & HAS_FROM)
- startpos = from;
- else
- startpos = *curpos;
- if (!(flags & HAS_RADIUS))
- lookup_variable("arcrad", &radius);
- // compute the end
- position endpos;
- if (flags & HAS_TO)
- endpos = to;
- else {
- position m(radius, radius);
- // Adjust the signs.
- if (cw) {
- if (dir == DOWN_DIRECTION || dir == LEFT_DIRECTION)
- m.x = -m.x;
- if (dir == DOWN_DIRECTION || dir == RIGHT_DIRECTION)
- m.y = -m.y;
- *dirp = direction((dir + 3) % 4);
- }
- else {
- if (dir == UP_DIRECTION || dir == LEFT_DIRECTION)
- m.x = -m.x;
- if (dir == DOWN_DIRECTION || dir == LEFT_DIRECTION)
- m.y = -m.y;
- *dirp = direction((dir + 1) % 4);
- }
- endpos = startpos + m;
- }
- // compute the center
- position centerpos;
- if (flags & HAS_AT)
- centerpos = at;
- else if (startpos == endpos)
- centerpos = startpos;
- else {
- position h = (endpos - startpos)/2.0;
- double d = hypot(h);
- if (radius <= 0)
- radius = .25;
- // make the radius big enough
- while (radius < d)
- radius *= 2.0;
- double alpha = acos(d/radius);
- double theta = atan2(h.y, h.x);
- if (cw)
- theta -= alpha;
- else
- theta += alpha;
- centerpos = position(cos(theta), sin(theta))*radius + startpos;
- }
- arc_object *p = new arc_object(cw, startpos, endpos, centerpos);
- *curpos = endpos;
- return p;
-}
-
-graphic_object *object_spec::make_linear(position *curpos, direction *dirp)
-{
- linear_object *obj;
- if (type == ARC_OBJECT)
- obj = make_arc(curpos, dirp);
- else
- obj = make_line(curpos, dirp);
- if (type == ARROW_OBJECT
- && (flags & (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD)) == 0)
- flags |= HAS_RIGHT_ARROW_HEAD;
- if (obj && (flags & (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD))) {
- arrow_head_type a;
- int at_start = (flags & HAS_LEFT_ARROW_HEAD) != 0;
- int at_end = (flags & HAS_RIGHT_ARROW_HEAD) != 0;
- if (flags & HAS_HEIGHT)
- a.height = height;
- else
- lookup_variable("arrowht", &a.height);
- if (flags & HAS_WIDTH)
- a.width = width;
- else
- lookup_variable("arrowwid", &a.width);
- double solid;
- lookup_variable("arrowhead", &solid);
- a.solid = solid != 0.0;
- obj->add_arrows(at_start, at_end, a);
- }
- return obj;
-}
-
-object *object_spec::make_object(position *curpos, direction *dirp)
-{
- graphic_object *obj = 0;
- switch (type) {
- case BLOCK_OBJECT:
- obj = make_block(curpos, dirp);
- break;
- case BOX_OBJECT:
- obj = make_box(curpos, dirp);
- break;
- case TEXT_OBJECT:
- obj = make_text(curpos, dirp);
- break;
- case ELLIPSE_OBJECT:
- obj = make_ellipse(curpos, dirp);
- break;
- case CIRCLE_OBJECT:
- obj = make_circle(curpos, dirp);
- break;
- case MOVE_OBJECT:
- obj = make_move(curpos, dirp);
- break;
- case ARC_OBJECT:
- case LINE_OBJECT:
- case SPLINE_OBJECT:
- case ARROW_OBJECT:
- obj = make_linear(curpos, dirp);
- break;
- case MARK_OBJECT:
- case OTHER_OBJECT:
- default:
- assert(0);
- break;
- }
- if (obj) {
- if (flags & IS_INVISIBLE)
- obj->set_invisible();
- if (text != 0)
- obj->add_text(text, (flags & IS_ALIGNED) != 0);
- if (flags & IS_DOTTED)
- obj->set_dotted(dash_width);
- else if (flags & IS_DASHED)
- obj->set_dashed(dash_width);
- double th;
- if (flags & HAS_THICKNESS)
- th = thickness;
- else
- lookup_variable("linethick", &th);
- obj->set_thickness(th);
- if (flags & IS_OUTLINED)
- obj->set_outline_color(outlined);
- if (flags & (IS_DEFAULT_FILLED | IS_FILLED)) {
- if (flags & IS_SHADED)
- obj->set_fill_color(shaded);
- else {
- if (flags & IS_DEFAULT_FILLED)
- lookup_variable("fillval", &fill);
- if (fill < 0.0)
- error("bad fill value %1", fill);
- else
- obj->set_fill(fill);
- }
- }
- }
- return obj;
-}
-
-struct string_list {
- string_list *next;
- char *str;
- string_list(char *);
- ~string_list();
-};
-
-string_list::string_list(char *s)
-: next(0), str(s)
-{
-}
-
-string_list::~string_list()
-{
- a_delete str;
-}
-
-/* A path is used to hold the argument to the `with' attribute. For
- example, `.nw' or `.A.s' or `.A'. The major operation on a path is to
- take a place and follow the path through the place to place within the
- place. Note that `.A.B.C.sw' will work.
-
- For compatibility with DWB pic, `with' accepts positions also (this
- is incorrectly documented in CSTR 116). */
-
-path::path(corner c)
-: crn(c), label_list(0), ypath(0), is_position(0)
-{
-}
-
-path::path(position p)
-: crn(0), label_list(0), ypath(0), is_position(1)
-{
- pos.x = p.x;
- pos.y = p.y;
-}
-
-path::path(char *l, corner c)
-: crn(c), ypath(0), is_position(0)
-{
- label_list = new string_list(l);
-}
-
-path::~path()
-{
- while (label_list) {
- string_list *tem = label_list;
- label_list = label_list->next;
- delete tem;
- }
- delete ypath;
-}
-
-void path::append(corner c)
-{
- assert(crn == 0);
- crn = c;
-}
-
-void path::append(char *s)
-{
- string_list **p;
- for (p = &label_list; *p; p = &(*p)->next)
- ;
- *p = new string_list(s);
-}
-
-void path::set_ypath(path *p)
-{
- ypath = p;
-}
-
-// return non-zero for success
-
-int path::follow(const place &pl, place *result) const
-{
- if (is_position) {
- result->x = pos.x;
- result->y = pos.y;
- result->obj = 0;
- return 1;
- }
- const place *p = &pl;
- for (string_list *lb = label_list; lb; lb = lb->next)
- if (p->obj == 0 || (p = p->obj->find_label(lb->str)) == 0) {
- lex_error("object does not contain a place `%1'", lb->str);
- return 0;
- }
- if (crn == 0 || p->obj == 0)
- *result = *p;
- else {
- position ps = ((p->obj)->*(crn))();
- result->x = ps.x;
- result->y = ps.y;
- result->obj = 0;
- }
- if (ypath) {
- place tem;
- if (!ypath->follow(pl, &tem))
- return 0;
- result->y = tem.y;
- if (result->obj != tem.obj)
- result->obj = 0;
- }
- return 1;
-}
-
-void print_object_list(object *p)
-{
- for (; p; p = p->next) {
- p->print();
- p->print_text();
- }
-}
-
-void print_picture(object *obj)
-{
- bounding_box bb;
- for (object *p = obj; p; p = p->next)
- p->update_bounding_box(&bb);
- double scale;
- lookup_variable("scale", &scale);
- out->start_picture(scale, bb.ll, bb.ur);
- print_object_list(obj);
- out->finish_picture();
-}
-
diff --git a/contrib/groff/src/preproc/pic/object.h b/contrib/groff/src/preproc/pic/object.h
deleted file mode 100644
index 9f7f4bc33708..000000000000
--- a/contrib/groff/src/preproc/pic/object.h
+++ /dev/null
@@ -1,225 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct place;
-
-enum object_type {
- OTHER_OBJECT,
- BOX_OBJECT,
- CIRCLE_OBJECT,
- ELLIPSE_OBJECT,
- ARC_OBJECT,
- SPLINE_OBJECT,
- LINE_OBJECT,
- ARROW_OBJECT,
- MOVE_OBJECT,
- TEXT_OBJECT,
- BLOCK_OBJECT,
- MARK_OBJECT
- };
-
-struct bounding_box;
-
-struct object {
- object *prev;
- object *next;
- object();
- virtual ~object();
- virtual position origin();
- virtual double width();
- virtual double radius();
- virtual double height();
- virtual position north();
- virtual position south();
- virtual position east();
- virtual position west();
- virtual position north_east();
- virtual position north_west();
- virtual position south_east();
- virtual position south_west();
- virtual position start();
- virtual position end();
- virtual position center();
- virtual place *find_label(const char *);
- virtual void move_by(const position &);
- virtual int blank();
- virtual void update_bounding_box(bounding_box *);
- virtual object_type type() = 0;
- virtual void print();
- virtual void print_text();
-};
-
-typedef position (object::*corner)();
-
-struct place {
- object *obj;
- double x, y;
-};
-
-struct string_list;
-
-class path {
- position pos;
- corner crn;
- string_list *label_list;
- path *ypath;
- int is_position;
-public:
- path(corner = 0);
- path(position);
- path(char *, corner = 0);
- ~path();
- void append(corner);
- void append(char *);
- void set_ypath(path *);
- int follow(const place &, place *) const;
-};
-
-struct object_list {
- object *head;
- object *tail;
- object_list();
- void append(object *);
- void wrap_up_block(object_list *);
-};
-
-declare_ptable(place)
-
-// these go counterclockwise
-enum direction {
- RIGHT_DIRECTION,
- UP_DIRECTION,
- LEFT_DIRECTION,
- DOWN_DIRECTION
- };
-
-struct graphics_state {
- double x, y;
- direction dir;
-};
-
-struct saved_state : public graphics_state {
- saved_state *prev;
- PTABLE(place) *tbl;
-};
-
-
-struct text_item {
- text_item *next;
- char *text;
- adjustment adj;
- const char *filename;
- int lineno;
-
- text_item(char *, const char *, int);
- ~text_item();
-};
-
-const unsigned long IS_DOTTED = 01;
-const unsigned long IS_DASHED = 02;
-const unsigned long IS_CLOCKWISE = 04;
-const unsigned long IS_INVISIBLE = 020;
-const unsigned long HAS_LEFT_ARROW_HEAD = 040;
-const unsigned long HAS_RIGHT_ARROW_HEAD = 0100;
-const unsigned long HAS_SEGMENT = 0200;
-const unsigned long IS_SAME = 0400;
-const unsigned long HAS_FROM = 01000;
-const unsigned long HAS_AT = 02000;
-const unsigned long HAS_WITH = 04000;
-const unsigned long HAS_HEIGHT = 010000;
-const unsigned long HAS_WIDTH = 020000;
-const unsigned long HAS_RADIUS = 040000;
-const unsigned long HAS_TO = 0100000;
-const unsigned long IS_CHOPPED = 0200000;
-const unsigned long IS_DEFAULT_CHOPPED = 0400000;
-const unsigned long HAS_THICKNESS = 01000000;
-const unsigned long IS_FILLED = 02000000;
-const unsigned long IS_DEFAULT_FILLED = 04000000;
-const unsigned long IS_ALIGNED = 010000000;
-const unsigned long IS_SHADED = 020000000;
-const unsigned long IS_OUTLINED = 040000000;
-
-struct segment {
- int is_absolute;
- position pos;
- segment *next;
- segment(const position &, int, segment *);
-};
-
-class rectangle_object;
-class graphic_object;
-class linear_object;
-
-struct object_spec {
- unsigned long flags;
- object_type type;
- object_list oblist;
- PTABLE(place) *tbl;
- double dash_width;
- position from;
- position to;
- position at;
- position by;
- path *with;
- text_item *text;
- double height;
- double radius;
- double width;
- double segment_width;
- double segment_height;
- double start_chop;
- double end_chop;
- double thickness;
- double fill;
- char *shaded;
- char *outlined;
- direction dir;
- segment *segment_list;
- position segment_pos;
- int segment_is_absolute;
-
- object_spec(object_type);
- ~object_spec();
- object *make_object(position *, direction *);
- graphic_object *make_box(position *, direction *);
- graphic_object *make_block(position *, direction *);
- graphic_object *make_text(position *, direction *);
- graphic_object *make_ellipse(position *, direction *);
- graphic_object *make_circle(position *, direction *);
- linear_object *make_line(position *, direction *);
- linear_object *make_arc(position *, direction *);
- graphic_object *make_linear(position *, direction *);
- graphic_object *make_move(position *, direction *);
- int position_rectangle(rectangle_object *p, position *curpos,
- direction *dirp);
-};
-
-
-object *make_object(object_spec *, position *, direction *);
-
-object *make_mark_object();
-object *make_command_object(char *, const char *, int);
-
-int lookup_variable(const char *name, double *val);
-void define_variable(const char *name, double val);
-
-void print_picture(object *);
-
diff --git a/contrib/groff/src/preproc/pic/output.h b/contrib/groff/src/preproc/pic/output.h
deleted file mode 100644
index aa03e776bb00..000000000000
--- a/contrib/groff/src/preproc/pic/output.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct line_type {
- enum { invisible, solid, dotted, dashed } type;
- double dash_width;
- double thickness; // the thickness is in points
-
- line_type();
-};
-
-
-class output {
-protected:
- char *args;
- double desired_height; // zero if no height specified
- double desired_width; // zero if no depth specified
- double compute_scale(double, const position &, const position &);
-public:
- output();
- virtual ~output();
- void set_desired_width_height(double wid, double ht);
- void set_args(const char *);
- virtual void start_picture(double sc, const position &ll, const position &ur) = 0;
- virtual void finish_picture() = 0;
- virtual void circle(const position &, double rad,
- const line_type &, double) = 0;
- virtual void text(const position &, text_piece *, int, double) = 0;
- virtual void line(const position &, const position *, int n,
- const line_type &) = 0;
- virtual void polygon(const position *, int n,
- const line_type &, double) = 0;
- virtual void spline(const position &, const position *, int n,
- const line_type &) = 0;
- virtual void arc(const position &, const position &, const position &,
- const line_type &) = 0;
- virtual void ellipse(const position &, const distance &,
- const line_type &, double) = 0;
- virtual void rounded_box(const position &, const distance &, double,
- const line_type &, double) = 0;
- virtual void command(const char *, const char *, int) = 0;
- virtual void set_location(const char *, int) {}
- virtual void set_color(char *, char *) = 0;
- virtual void reset_color() = 0;
- virtual char *get_last_filled() = 0;
- virtual char *get_outline_color() = 0;
- virtual int supports_filled_polygons();
- virtual void begin_block(const position &ll, const position &ur);
- virtual void end_block();
-};
-
-extern output *out;
-
-/* #define FIG_SUPPORT 1 */
-#define TEX_SUPPORT 1
-
-output *make_troff_output();
-
-#ifdef TEX_SUPPORT
-output *make_tex_output();
-output *make_tpic_output();
-#endif /* TEX_SUPPORT */
-
-#ifdef FIG_SUPPORT
-output *make_fig_output();
-#endif /* FIG_SUPPORT */
diff --git a/contrib/groff/src/preproc/pic/pic.h b/contrib/groff/src/preproc/pic/pic.h
deleted file mode 100644
index e3b850a96ef0..000000000000
--- a/contrib/groff/src/preproc/pic/pic.h
+++ /dev/null
@@ -1,123 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <math.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#ifdef NEED_DECLARATION_RAND
-#undef rand
-extern "C" {
- int rand();
-}
-#endif /* NEED_DECLARATION_RAND */
-
-#ifdef NEED_DECLARATION_SRAND
-#undef srand
-extern "C" {
-#ifdef RET_TYPE_SRAND_IS_VOID
- void srand(unsigned int);
-#else
- int srand(unsigned int);
-#endif
-}
-#endif /* NEED_DECLARATION_SRAND */
-
-#ifndef HAVE_FMOD
-extern "C" {
- double fmod(double, double);
-}
-#endif
-
-#include "assert.h"
-#include "cset.h"
-#include "stringclass.h"
-#include "errarg.h"
-#include "error.h"
-#include "position.h"
-#include "text.h"
-#include "output.h"
-
-#ifndef M_SQRT2
-#define M_SQRT2 1.41421356237309504880
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-class input {
- input *next;
-public:
- input();
- virtual ~input();
- virtual int get() = 0;
- virtual int peek() = 0;
- virtual int get_location(const char **, int *);
- friend class input_stack;
- friend class copy_rest_thru_input;
-};
-
-class file_input : public input {
- FILE *fp;
- const char *filename;
- int lineno;
- string line;
- const char *ptr;
- int read_line();
-public:
- file_input(FILE *, const char *);
- ~file_input();
- int get();
- int peek();
- int get_location(const char **, int *);
-};
-
-void lex_init(input *);
-int get_location(char **, int *);
-
-void do_copy(const char *file);
-void parse_init();
-void parse_cleanup();
-
-void lex_error(const char *message,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-void lex_warning(const char *message,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-void lex_cleanup();
-
-extern int flyback_flag;
-extern int command_char;
-// zero_length_line_flag is non-zero if zero-length lines are drawn
-// as dots by the output device
-extern int zero_length_line_flag;
-extern int driver_extension_flag;
-extern int compatible_flag;
-extern int safer_flag;
-extern char *graphname;
diff --git a/contrib/groff/src/preproc/pic/pic.man b/contrib/groff/src/preproc/pic/pic.man
deleted file mode 100644
index c54cfbef5911..000000000000
--- a/contrib/groff/src/preproc/pic/pic.man
+++ /dev/null
@@ -1,1109 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.ie t \{\
-. ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-. ds lx L\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\*(tx
-.\}
-.el \{\
-. ds tx TeX
-. ds lx LaTeX
-.\}
-.
-.ie \n(.g .ds ic \/
-.el .ds ic \^
-.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"
-.
-.
-.TH @G@PIC @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-.
-@g@pic \- compile pictures for troff or TeX
-.
-.
-.SH SYNOPSIS
-.
-.B @g@pic
-[
-.B \-nvCSU
-]
-[
-.I filename
-\&.\|.\|.\&
-]
-.br
-.B @g@pic
-.B \-t
-[
-.B \-cvzCSU
-]
-[
-.I filename
-\&.\|.\|.\&
-]
-.
-.
-.SH DESCRIPTION
-.
-This manual page describes the GNU version of
-.BR pic ,
-which is part of the groff document formatting system.
-.B pic
-compiles descriptions of pictures embedded within
-.B troff
-or \*(tx input files into commands that are understood by \*(tx or
-.BR troff .
-Each picture starts with a line beginning with
-.B .PS
-and ends with a line beginning with
-.BR .PE .
-Anything outside of
-.B .PS
-and
-.B .PE
-is passed through without change.
-.LP
-It is the user's responsibility to provide appropriate definitions of the
-.B PS
-and
-.B PE
-macros.
-When the macro package being used does not supply such definitions
-(for example, old versions of \-ms),
-appropriate definitions can be obtained with
-.BR \-mpic :
-These will center each picture.
-.
-.
-.SH OPTIONS
-.
-Options that do not take arguments may be grouped behind a single
-.BR \- .
-The special option
-.B \-\^\-
-can be used to mark the end of the options.
-A filename of
-.B \-
-refers to the standard input.
-.
-.TP
-.B \-C
-Recognize
-.B .PS
-and
-.B .PE
-even when followed by a character other than space or newline.
-.
-.TP
-.B \-S
-Safer mode; do not execute
-.B sh
-commands.
-This can be useful when operating on untrustworthy input.
-(enabled by default)
-.
-.TP
-.B \-U
-Unsafe mode; revert the default option
-.BR \-S .
-.
-.TP
-.B \-n
-Don't use the groff extensions to the troff drawing commands.
-You should use this if you are using a postprocessor that doesn't support
-these extensions.
-The extensions are described in
-.BR groff_out (@MAN5EXT@).
-The
-.B \-n
-option also causes
-.B pic
-not to use zero-length lines to draw dots in troff mode.
-.
-.TP
-.B \-t
-\*(tx mode.
-.
-.TP
-.B \-c
-Be more compatible with
-.BR tpic .
-Implies
-.BR \-t .
-Lines beginning with
-.B \e
-are not passed through transparently.
-Lines beginning with
-.B .
-are passed through with the initial
-.B .
-changed to
-.BR \e .
-A line beginning with
-.B .ps
-is given special treatment:
-it takes an optional integer argument specifying
-the line thickness (pen size) in milliinches;
-a missing argument restores the previous line thickness;
-the default line thickness is 8 milliinches.
-The line thickness thus specified takes effect only
-when a non-negative line thickness has not been
-specified by use of the
-.B thickness
-attribute or by setting the
-.B linethick
-variable.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-z
-In \*(tx mode draw dots using zero-length lines.
-.
-.LP
-The following options supported by other versions of
-.B pic
-are ignored:
-.
-.TP
-.B \-D
-Draw all lines using the \eD escape sequence.
-.B pic
-always does this.
-.
-.TP
-.BI \-T \ dev
-Generate output for the
-.B troff
-device
-.IR dev .
-This is unnecessary because the
-.B troff
-output generated by
-.B pic
-is device-independent.
-.
-.
-.SH USAGE
-.
-This section describes only the differences between GNU
-.B pic
-and the original version of
-.BR pic .
-Many of these differences also apply to newer versions of Unix
-.BR pic .
-A complete documentation is available in the file
-.LP
-.RS
-.B @DOCDIR@/pic.ms
-.RE
-.
-.SS \*(tx mode
-.
-\*(tx mode is enabled by the
-.B \-t
-option.
-In \*(tx mode,
-.B pic
-will define a vbox called
-.B \egraph
-for each picture.
-Use the
-.B figname
-command to change the name of the vbox.
-You must yourself print that vbox using, for example, the command
-.RS
-.LP
-.B
-\ecenterline{\ebox\egraph}
-.RE
-.LP
-Actually, since the vbox has a height of zero (it is defined with
-\evtop) this will produce slightly more vertical space above the
-picture than below it;
-.RS
-.LP
-.B
-\ecenterline{\eraise 1em\ebox\egraph}
-.RE
-.LP
-would avoid this.
-.LP
-To make the vbox having a positive height and a depth of zero
-(as used e.g.\& by \*(lx's
-.BR \%graphics.sty ),
-define the following macro in your document:
-.RS
-.LP
-.B \edef\egpicbox#1{%
-.br
-.B " \evbox{\eunvbox\ecsname #1\eendcsname\ekern 0pt}}"
-.RE
-.LP
-Now you can simply say
-.B \egpicbox{graph}
-instead of \ebox\egraph.
-.LP
-You must use a \*(tx driver that supports the
-.B tpic
-specials, version 2.
-.LP
-Lines beginning with
-.B \e
-are passed through transparently; a
-.B %
-is added to the end of the line to avoid unwanted spaces.
-You can safely use this feature to change fonts or to
-change the value of
-.BR \ebaselineskip .
-Anything else may well produce undesirable results; use at your own risk.
-Lines beginning with a period are not given any special treatment.
-.
-.SS Commands
-.
-.TP
-\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\fR \fBto\fR \fIexpr2\fR \
-[\fBby\fR [\fB*\fR]\fIexpr3\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
-Set
-.I variable
-to
-.IR expr1 .
-While the value of
-.I variable
-is less than or equal to
-.IR expr2 ,
-do
-.I body
-and increment
-.I variable
-by
-.IR expr3 ;
-if
-.B by
-is not given, increment
-.I variable
-by 1.
-If
-.I expr3
-is prefixed by
-.B *
-then
-.I variable
-will instead be multiplied by
-.IR expr3 .
-The value of
-.I expr3
-can be negative for the additive case;
-.I variable
-is then tested whether it is greater than or equal to
-.IR expr2 .
-For the multiplicative case,
-.I expr3
-must be greater than zero.
-If the constraints aren't met, the loop isn't executed.
-.I X
-can be any character not occurring in
-.IR body .
-.
-.TP
-\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
-[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\fR]
-Evaluate
-.IR expr ;
-if it is non-zero then do
-.IR if-true ,
-otherwise do
-.IR if-false .
-.I X
-can be any character not occurring in
-.IR if-true .
-.I Y
-can be any character not occurring in
-.IR if-false .
-.
-.TP
-\fBprint\fR \fIarg\fR\|.\|.\|.
-Concatenate the arguments and print as a line on stderr.
-Each
-.I arg
-must be an expression, a position, or text.
-This is useful for debugging.
-.
-.TP
-\fBcommand\fR \fIarg\fR\|.\|.\|.
-Concatenate the arguments
-and pass them through as a line to troff or \*(tx.
-Each
-.I arg
-must be an expression, a position, or text.
-This has a similar effect to a line beginning with
-.B .\&
-or
-.BR \e ,
-but allows the values of variables to be passed through.
-For example,
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-x = 14
-command ".ds string x is " x "."
-\&.PE
-\e*[string]
-.ft
-.fi
-.RE
-.IP
-prints
-.RS
-.IP
-.B x is 14.
-.RE
-.
-.TP
-\fBsh\fR \fIX\fR \fIcommand\fR \fIX\fR
-Pass
-.I command
-to a shell.
-.I X
-can be any character not occurring in
-.IR command .
-.
-.TP
-\fBcopy\fR \fB"\fIfilename\fB"\fR
-Include
-.I filename
-at this point in the file.
-.
-.TP
-\fBcopy\fR [\fB"\fIfilename\fB"\fR] \fBthru\fR \fIX\fR \fIbody\fR \fIX\fR \
-[\fBuntil\fR \fB"\fIword\*(ic\fB"\fR]
-.ns
-.TP
-\fBcopy\fR [\fB"\fIfilename\fB"\fR] \fBthru\fR \fImacro\fR \
-[\fBuntil\fR \fB"\fIword\*(ic\fB"\fR]
-This construct does
-.I body
-once for each line of
-.IR filename ;
-the line is split into blank-delimited words,
-and occurrences of
-.BI $ i
-in
-.IR body ,
-for
-.I i
-between 1 and 9,
-are replaced by the
-.IR i -th
-word of the line.
-If
-.I filename
-is not given, lines are taken from the current input up to
-.BR .PE .
-If an
-.B until
-clause is specified,
-lines will be read only until a line the first word of which is
-.IR word ;
-that line will then be discarded.
-.I X
-can be any character not occurring in
-.IR body .
-For example,
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-copy thru % circle at ($1,$2) % until "END"
-1 2
-3 4
-5 6
-END
-box
-\&.PE
-.ft
-.fi
-.RE
-.IP
-is equivalent to
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-circle at (1,2)
-circle at (3,4)
-circle at (5,6)
-box
-\&.PE
-.ft
-.fi
-.RE
-.IP
-The commands to be performed for each line can also be taken
-from a macro defined earlier by giving the name of the macro
-as the argument to
-.BR thru .
-.
-.LP
-.B reset
-.br
-.ns
-.TP
-\fBreset\fI variable1\fR[\fB,\fR]\fI variable2 .\^.\^.
-Reset pre-defined variables
-.IR variable1 ,
-.I variable2
-\&.\^.\^. to their default values.
-If no arguments are given, reset all pre-defined variables
-to their default values.
-Note that assigning a value to
-.B scale
-also causes all pre-defined variables that control dimensions
-to be reset to their default values times the new value of scale.
-.
-.TP
-\fBplot\fR \fIexpr\fR [\fB"\fItext\*(ic\fB"\fR]
-This is a text object which is constructed by using
-.I text
-as a format string for sprintf
-with an argument of
-.IR expr .
-If
-.I text
-is omitted a format string of
-.B "\(ts%g\(ts"
-is used.
-Attributes can be specified in the same way as for a normal text
-object.
-Be very careful that you specify an appropriate format string;
-.B pic
-does only very limited checking of the string.
-This is deprecated in favour of
-.BR sprintf .
-.
-.TP
-.IB variable\ := \ expr
-This is similar to
-.B =
-except
-.I variable
-must already be defined,
-and
-.I expr
-will be assigned to
-.I variable
-without creating a variable local to the current block.
-(By contrast,
-.B =
-defines the variable in the current block if it is not already defined there,
-and then changes the value in the current block only.)
-For example, the following:
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-x = 3
-y = 3
-[
- x := 5
- y = 5
-]
-print x " " y
-\&.PE
-.ft
-.fi
-.RE
-.IP
-prints
-.RS
-.IP
-.B 5 3
-.RE
-.
-.LP
-Arguments of the form
-.IP
-.I X anything X
-.LP
-are also allowed to be of the form
-.IP
-.BI {\ anything\ }
-.LP
-In this case
-.I anything
-can contain balanced occurrences of
-.B {
-and
-.BR } .
-Strings may contain
-.I X
-or imbalanced occurrences of
-.B {
-and
-.BR } .
-.
-.SS Expressions
-.
-The syntax for expressions has been significantly extended:
-.
-.LP
-.IB x\ ^\ y
-(exponentiation)
-.br
-.BI sin( x )
-.br
-.BI cos( x )
-.br
-.BI atan2( y , \ x )
-.br
-.BI log( x )
-(base 10)
-.br
-.BI exp( x )
-(base 10, ie
-.ie t 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
-.el 10^\fIx\fR)
-.br
-.BI sqrt( x )
-.br
-.BI int( x )
-.br
-.B rand()
-(return a random number between 0 and 1)
-.br
-.BI rand( x )
-(return a random number between 1 and
-.IR x ;
-deprecated)
-.br
-.BI srand( x )
-(set the random number seed)
-.br
-.BI max( e1 , \ e2 )
-.br
-.BI min( e1 , \ e2 )
-.br
-.BI ! e
-.br
-\fIe1\fB && \fIe2\fR
-.br
-\fIe1\fB || \fIe2\fR
-.br
-\fIe1\fB == \fIe2\fR
-.br
-\fIe1\fB != \fIe2\fR
-.br
-\fIe1\fB >= \fIe2\fR
-.br
-\fIe1\fB > \fIe2\fR
-.br
-\fIe1\fB <= \fIe2\fR
-.br
-\fIe1\fB < \fIe2\fR
-.br
-\fB"\fIstr1\*(ic\fB" == "\fIstr2\*(ic\fB"\fR
-.br
-\fB"\fIstr1\*(ic\fB" != "\fIstr2\*(ic\fB"\fR
-.br
-.
-.LP
-String comparison expressions must be parenthesised in some contexts
-to avoid ambiguity.
-.
-.SS Other Changes
-.
-A bare expression,
-.IR expr ,
-is acceptable as an attribute;
-it is equivalent to
-.IR dir\ expr ,
-where
-.I dir
-is the current direction.
-For example
-.LP
-.RS
-.B line 2i
-.RE
-.LP
-means draw a line 2\ inches long in the current direction.
-The `i' (or `I') character is ignored; to use another measurement unit,
-set the
-.I scale
-variable to an appropriate value.
-.
-.LP
-The maximum width and height of the picture are taken from the variables
-.B maxpswid
-and
-.BR maxpsht .
-Initially these have values 8.5 and 11.
-.
-.LP
-Scientific notation is allowed for numbers.
-For example
-.RS
-.LP
-.B
-x = 5e\-2
-.RE
-.
-.LP
-Text attributes can be compounded.
-For example,
-.RS
-.LP
-.B
-"foo" above ljust
-.RE
-.LP
-is valid.
-.
-.LP
-There is no limit to the depth to which blocks can be examined.
-For example,
-.RS
-.LP
-.B
-[A: [B: [C: box ]]] with .A.B.C.sw at 1,2
-.br
-.B
-circle at last [\^].A.B.C
-.RE
-.LP
-is acceptable.
-.
-.LP
-Arcs now have compass points
-determined by the circle of which the arc is a part.
-.
-.LP
-Circles, ellipses, and arcs can be dotted or dashed.
-In \*(tx mode splines can be dotted or dashed also.
-.
-.LP
-Boxes can have rounded corners.
-The
-.B rad
-attribute specifies the radius of the quarter-circles at each corner.
-If no
-.B rad
-or
-.B diam
-attribute is given, a radius of
-.B boxrad
-is used.
-Initially,
-.B boxrad
-has a value of\ 0.
-A box with rounded corners can be dotted or dashed.
-.
-.LP
-The
-.B .PS
-line can have a second argument specifying a maximum height for
-the picture.
-If the width of zero is specified the width will be ignored in computing
-the scaling factor for the picture.
-Note that GNU
-.B pic
-will always scale a picture by the same amount vertically as well as
-horizontally.
-This is different from the
-.SM DWB
-2.0
-.B pic
-which may scale a picture by a different amount vertically than
-horizontally if a height is specified.
-.
-.LP
-Each text object has an invisible box associated with it.
-The compass points of a text object are determined by this box.
-The implicit motion associated with the object is also determined
-by this box.
-The dimensions of this box are taken from the width and height attributes;
-if the width attribute is not supplied then the width will be taken to be
-.BR textwid ;
-if the height attribute is not supplied then the height will be taken to be
-the number of text strings associated with the object
-times
-.BR textht .
-Initially
-.B textwid
-and
-.B textht
-have a value of 0.
-.
-.LP
-In (almost all) places where a quoted text string can be used,
-an expression of the form
-.IP
-.BI sprintf(\(ts format \(ts,\ arg ,\fR.\|.\|.\fB)
-.LP
-can also be used;
-this will produce the arguments formatted according to
-.IR format ,
-which should be a string as described in
-.BR printf (3)
-appropriate for the number of arguments supplied.
-.
-.LP
-The thickness of the lines used to draw objects is controlled by the
-.B linethick
-variable.
-This gives the thickness of lines in points.
-A negative value means use the default thickness:
-in \*(tx output mode, this means use a thickness of 8 milliinches;
-in \*(tx output mode with the
-.B -c
-option, this means use the line thickness specified by
-.B .ps
-lines;
-in troff output mode, this means use a thickness proportional
-to the pointsize.
-A zero value means draw the thinnest possible line supported by
-the output device.
-Initially it has a value of -1.
-There is also a
-.BR thick [ ness ]
-attribute.
-For example,
-.RS
-.LP
-.B circle thickness 1.5
-.RE
-.LP
-would draw a circle using a line with a thickness of 1.5 points.
-The thickness of lines is not affected by the
-value of the
-.B scale
-variable, nor by the width or height given in the
-.B .PS
-line.
-.
-.LP
-Boxes (including boxes with rounded corners),
-circles and ellipses can be filled by giving them an attribute of
-.BR fill [ ed ].
-This takes an optional argument of an expression with a value between
-0 and 1; 0 will fill it with white, 1 with black, values in between
-with a proportionally gray shade.
-A value greater than 1 can also be used:
-this means fill with the
-shade of gray that is currently being used for text and lines.
-Normally this will be black, but output devices may provide
-a mechanism for changing this.
-Without an argument, then the value of the variable
-.B fillval
-will be used.
-Initially this has a value of 0.5.
-The invisible attribute does not affect the filling of objects.
-Any text associated with a filled object will be added after the
-object has been filled, so that the text will not be obscured
-by the filling.
-.
-.LP
-Three additional modifiers are available to specify colored objects:
-.BR outline [ d ]
-sets the color of the outline,
-.B shaded
-the fill color, and
-.B colo\fR[\fPu\fR]\fPr\fR[\fPed\fR]
-sets both.
-All three keywords expect a suffix specifying the color, for example
-.RS
-.LP
-.B circle shaded """green""" outline """black"""
-.RE
-.LP
-Currently, color support isn't available in \*(tx mode.
-Predefined color names for
-.B groff
-are in the device macro files, for example
-.BR ps.tmac ;
-additional colors can be defined with the
-.B .defcolor
-request (see the manual page of
-.BR @g@troff (@MAN1EXT@)
-for more details).
-.LP
-To change the name of the vbox in \*(tx mode, set the pseudo-variable
-.B figname
-(which is actually a specially parsed command) within a picture.
-Example:
-.RS
-.LP
-.B .PS
-.br
-.B figname = foobar;
-.br
-.B ...
-.br
-.B .PE
-.RE
-.LP
-The picture is then available in the box
-.BR \efoobar .
-.LP
-.B pic
-assumes that at the beginning of a picture both glyph and fill color are
-set to the default value.
-.
-.LP
-Arrow heads will be drawn as solid triangles if the variable
-.B arrowhead
-is non-zero and either \*(tx mode is enabled or the
-.B \-n
-option has not been given.
-Initially
-.B arrowhead
-has a value of\ 1.
-Note that solid arrow heads are always filled with the current outline
-color.
-.
-.LP
-The troff output of
-.B pic
-is device-independent.
-The
-.B \-T
-option is therefore redundant.
-All numbers are taken to be in inches; numbers are never interpreted
-to be in troff machine units.
-.
-.LP
-Objects can have an
-.B aligned
-attribute.
-This will only work if the postprocessor is
-.BR grops .
-Any text associated with an object having the
-.B aligned
-attribute will be rotated about the center of the object
-so that it is aligned in the direction from the start point
-to the end point of the object.
-Note that this attribute will have no effect for objects whose start and
-end points are coincident.
-.
-.LP
-In places where
-.IB n th
-is allowed
-.BI ` expr 'th
-is also allowed.
-Note that
-.B 'th
-is a single token: no space is allowed between the
-.B '
-and the
-.BR th .
-For example,
-.IP
-.ft B
-.nf
-for i = 1 to 4 do {
- line from `i'th box.nw to `i+1'th box.se
-}
-.ft
-.fi
-.
-.
-.SH CONVERSION
-.
-To obtain a stand-alone picture from a
-.B pic
-file, enclose your
-.B pic
-code with
-.B .PS
-and
-.B .PE
-requests;
-.B roff
-configuration commands may be added at the beginning of the file, but no
-.B roff
-text.
-.
-.LP
-It is necessary to feed this file into
-.B groff
-without adding any page information, so you must check which
-.B .PS
-and
-.B .PE
-requests are actually called.
-For example, the mm macro package adds a page number, which is very
-annoying.
-At the moment, calling standard
-.B groff
-without any macro package works.
-Alternatively, you can define your own requests, e.g. to do nothing:
-.LP
-.RS
-.nf
-.ft B
-\&.de PS
-\&..
-\&.de PE
-\&..
-.ft
-.fi
-.RE
-.
-.LP
-.B groff
-itself does not provide direct conversion into other graphics file
-formats.
-But there are lots of possibilities if you first transform your picture
-into PostScript\*R format using the
-.B groff
-option
-.BR -Tps .
-Since this
-.IR ps -file
-lacks BoundingBox information it is not very useful by itself, but it
-may be fed into other conversion programs, usually named
-.BI ps2 other
-or
-.BI psto other
-or the like.
-Moreover, the PostScript interpreter
-.B ghostscript
-.RB ( gs )
-has built-in graphics conversion devices that are called with the option
-.LP
-.RS
-.BI "gs -sDEVICE=" <devname>
-.RE
-.LP
-Call
-.LP
-.RS
-.B gs --help
-.RE
-.LP
-for a list of the available devices.
-.
-.LP
-As the Encapsulated PostScript File Format
-.B EPS
-is getting more and more important, and the conversion wasn't regarded
-trivial in the past you might be interested to know that there is a
-conversion tool named
-.B ps2eps
-which does the right job.
-It is much better than the tool
-.B ps2epsi
-packaged with
-.BR gs .
-.LP
-For bitmapped graphic formats, you should use
-.BR pstopnm ;
-the resulting (intermediate)
-.B PNM
-file can be then converted to virtually any graphics format using the tools
-of the
-.B netpbm
-package .
-.
-.
-.SH FILES
-.
-.Tp \w'\fB@MACRODIR@/pic.tmac'u+3n
-.B
-@MACRODIR@/pic.tmac
-Example definitions of the
-.B PS
-and
-.B PE
-macros.
-.
-.
-.SH "SEE ALSO"
-.
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR tex (1),
-.BR gs (1),
-.BR ps2eps (1),
-.BR pstopnm (1),
-.BR ps2epsi (1),
-.BR pnm (5)
-.LP
-Tpic: Pic for \*(tx
-.LP
-Brian W. Kernighan,
-PIC \(em A Graphics Language for Typesetting (User Manual).
-AT&T Bell Laboratories, Computing Science Technical Report No.\ 116
-<http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz>
-(revised May, 1991).
-.LP
-.B ps2eps
-is available from CTAN mirrors, e.g.
-.br
-<ftp://ftp.dante.de/tex-archive/support/ps2eps/>
-.LP
-W. Richard Stevens - Turning PIC Into HTML
-.br
-<http://www.kohala.com/start/troff/pic2html.html>
-.LP
-W. Richard Stevens - Examples of picMacros
-.br
-<http://www.kohala.com/start/troff/pic.examples.ps>
-.
-.
-.SH BUGS
-.
-Input characters that are invalid for
-.B groff
-(i.e., those with
-.SM ASCII
-code 0, or 013 octal, or between 015 and 037 octal, or between 0200 and 0237
-octal) are rejected even in \*(tx mode.
-.LP
-The interpretation of
-.B fillval
-is incompatible with the pic in 10th edition Unix,
-which interprets 0 as black and 1 as white.
-.LP
-PostScript\*R is a registered trademark of Adobe Systems Incorporation.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/pic/pic.y b/contrib/groff/src/preproc/pic/pic.y
deleted file mode 100644
index 83d0fe0222ad..000000000000
--- a/contrib/groff/src/preproc/pic/pic.y
+++ /dev/null
@@ -1,1898 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-%{
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void copy_rest_thru(const char *, const char *);
-extern void copy_file_thru(const char *, const char *, const char *);
-extern void push_body(const char *);
-extern void do_for(char *var, double from, double to,
- int by_is_multiplicative, double by, char *body);
-extern void do_lookahead();
-
-/* Maximum number of characters produced by printf("%g") */
-#define GDIGITS 14
-
-int yylex();
-void yyerror(const char *);
-
-void reset(const char *nm);
-void reset_all();
-
-place *lookup_label(const char *);
-void define_label(const char *label, const place *pl);
-
-direction current_direction;
-position current_position;
-
-implement_ptable(place)
-
-PTABLE(place) top_table;
-
-PTABLE(place) *current_table = &top_table;
-saved_state *current_saved_state = 0;
-
-object_list olist;
-
-const char *ordinal_postfix(int n);
-const char *object_type_name(object_type type);
-char *format_number(const char *form, double n);
-char *do_sprintf(const char *form, const double *v, int nv);
-
-%}
-
-
-%union {
- char *str;
- int n;
- double x;
- struct { double x, y; } pair;
- struct { double x; char *body; } if_data;
- struct { char *str; const char *filename; int lineno; } lstr;
- struct { double *v; int nv; int maxv; } dv;
- struct { double val; int is_multiplicative; } by;
- place pl;
- object *obj;
- corner crn;
- path *pth;
- object_spec *spec;
- saved_state *pstate;
- graphics_state state;
- object_type obtype;
-}
-
-%token <str> LABEL
-%token <str> VARIABLE
-%token <x> NUMBER
-%token <lstr> TEXT
-%token <lstr> COMMAND_LINE
-%token <str> DELIMITED
-%token <n> ORDINAL
-%token TH
-%token LEFT_ARROW_HEAD
-%token RIGHT_ARROW_HEAD
-%token DOUBLE_ARROW_HEAD
-%token LAST
-%token UP
-%token DOWN
-%token LEFT
-%token RIGHT
-%token BOX
-%token CIRCLE
-%token ELLIPSE
-%token ARC
-%token LINE
-%token ARROW
-%token MOVE
-%token SPLINE
-%token HEIGHT
-%token RADIUS
-%token FIGNAME
-%token WIDTH
-%token DIAMETER
-%token UP
-%token DOWN
-%token RIGHT
-%token LEFT
-%token FROM
-%token TO
-%token AT
-%token WITH
-%token BY
-%token THEN
-%token SOLID
-%token DOTTED
-%token DASHED
-%token CHOP
-%token SAME
-%token INVISIBLE
-%token LJUST
-%token RJUST
-%token ABOVE
-%token BELOW
-%token OF
-%token THE
-%token WAY
-%token BETWEEN
-%token AND
-%token HERE
-%token DOT_N
-%token DOT_E
-%token DOT_W
-%token DOT_S
-%token DOT_NE
-%token DOT_SE
-%token DOT_NW
-%token DOT_SW
-%token DOT_C
-%token DOT_START
-%token DOT_END
-%token DOT_X
-%token DOT_Y
-%token DOT_HT
-%token DOT_WID
-%token DOT_RAD
-%token SIN
-%token COS
-%token ATAN2
-%token LOG
-%token EXP
-%token SQRT
-%token K_MAX
-%token K_MIN
-%token INT
-%token RAND
-%token SRAND
-%token COPY
-%token THRU
-%token TOP
-%token BOTTOM
-%token UPPER
-%token LOWER
-%token SH
-%token PRINT
-%token CW
-%token CCW
-%token FOR
-%token DO
-%token IF
-%token ELSE
-%token ANDAND
-%token OROR
-%token NOTEQUAL
-%token EQUALEQUAL
-%token LESSEQUAL
-%token GREATEREQUAL
-%token LEFT_CORNER
-%token RIGHT_CORNER
-%token NORTH
-%token SOUTH
-%token EAST
-%token WEST
-%token CENTER
-%token END
-%token START
-%token RESET
-%token UNTIL
-%token PLOT
-%token THICKNESS
-%token FILL
-%token COLORED
-%token OUTLINED
-%token SHADED
-%token ALIGNED
-%token SPRINTF
-%token COMMAND
-
-%token DEFINE
-%token UNDEF
-
-%left '.'
-
-/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
-%left PLOT
-%left TEXT SPRINTF
-
-/* give text adjustments higher precedence than TEXT, so that
-box "foo" above ljust == box ("foo" above ljust)
-*/
-
-%left LJUST RJUST ABOVE BELOW
-
-%left LEFT RIGHT
-/* Give attributes that take an optional expression a higher
-precedence than left and right, so that eg `line chop left'
-parses properly. */
-%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
-%left LABEL
-
-%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
-%left ORDINAL HERE '`'
-
-%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
-
-/* these need to be lower than '-' */
-%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
-
-/* these must have higher precedence than CHOP so that `label %prec CHOP'
-works */
-%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
-%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
-%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
-
-%left ','
-%left OROR
-%left ANDAND
-%left EQUALEQUAL NOTEQUAL
-%left '<' '>' LESSEQUAL GREATEREQUAL
-
-%left BETWEEN OF
-%left AND
-
-%left '+' '-'
-%left '*' '/' '%'
-%right '!'
-%right '^'
-
-%type <x> expr any_expr text_expr
-%type <by> optional_by
-%type <pair> expr_pair position_not_place
-%type <if_data> simple_if
-%type <obj> nth_primitive
-%type <crn> corner
-%type <pth> path label_path relative_path
-%type <pl> place label element element_list middle_element_list
-%type <spec> object_spec
-%type <pair> position
-%type <obtype> object_type
-%type <n> optional_ordinal_last ordinal
-%type <str> macro_name until
-%type <dv> sprintf_args
-%type <lstr> text print_args print_arg
-
-%%
-
-top:
- optional_separator
- | element_list
- {
- if (olist.head)
- print_picture(olist.head);
- }
- ;
-
-
-element_list:
- optional_separator middle_element_list optional_separator
- { $$ = $2; }
- ;
-
-middle_element_list:
- element
- { $$ = $1; }
- | middle_element_list separator element
- { $$ = $1; }
- ;
-
-optional_separator:
- /* empty */
- | separator
- ;
-
-separator:
- ';'
- | separator ';'
- ;
-
-placeless_element:
- FIGNAME '=' macro_name
- {
- a_delete graphname;
- graphname = new char[strlen($3) + 1];
- strcpy(graphname, $3);
- a_delete $3;
- }
- |
- VARIABLE '=' any_expr
- {
- define_variable($1, $3);
- a_delete $1;
- }
- | VARIABLE ':' '=' any_expr
- {
- place *p = lookup_label($1);
- if (!p) {
- lex_error("variable `%1' not defined", $1);
- YYABORT;
- }
- p->obj = 0;
- p->x = $4;
- p->y = 0.0;
- a_delete $1;
- }
- | UP
- { current_direction = UP_DIRECTION; }
- | DOWN
- { current_direction = DOWN_DIRECTION; }
- | LEFT
- { current_direction = LEFT_DIRECTION; }
- | RIGHT
- { current_direction = RIGHT_DIRECTION; }
- | COMMAND_LINE
- {
- olist.append(make_command_object($1.str, $1.filename,
- $1.lineno));
- }
- | COMMAND print_args
- {
- olist.append(make_command_object($2.str, $2.filename,
- $2.lineno));
- }
- | PRINT print_args
- {
- fprintf(stderr, "%s\n", $2.str);
- a_delete $2.str;
- fflush(stderr);
- }
- | SH
- { delim_flag = 1; }
- DELIMITED
- {
- delim_flag = 0;
- if (safer_flag)
- lex_error("unsafe to run command `%1'", $3);
- else
- system($3);
- a_delete $3;
- }
- | COPY TEXT
- {
- if (yychar < 0)
- do_lookahead();
- do_copy($2.str);
- // do not delete the filename
- }
- | COPY TEXT THRU
- { delim_flag = 2; }
- DELIMITED
- { delim_flag = 0; }
- until
- {
- if (yychar < 0)
- do_lookahead();
- copy_file_thru($2.str, $5, $7);
- // do not delete the filename
- a_delete $5;
- a_delete $7;
- }
- | COPY THRU
- { delim_flag = 2; }
- DELIMITED
- { delim_flag = 0; }
- until
- {
- if (yychar < 0)
- do_lookahead();
- copy_rest_thru($4, $6);
- a_delete $4;
- a_delete $6;
- }
- | FOR VARIABLE '=' expr TO expr optional_by DO
- { delim_flag = 1; }
- DELIMITED
- {
- delim_flag = 0;
- if (yychar < 0)
- do_lookahead();
- do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10);
- }
- | simple_if
- {
- if (yychar < 0)
- do_lookahead();
- if ($1.x != 0.0)
- push_body($1.body);
- a_delete $1.body;
- }
- | simple_if ELSE
- { delim_flag = 1; }
- DELIMITED
- {
- delim_flag = 0;
- if (yychar < 0)
- do_lookahead();
- if ($1.x != 0.0)
- push_body($1.body);
- else
- push_body($4);
- a_delete $1.body;
- a_delete $4;
- }
- | reset_variables
- | RESET
- { define_variable("scale", 1.0); }
- ;
-
-macro_name:
- VARIABLE
- | LABEL
- ;
-
-reset_variables:
- RESET VARIABLE
- {
- reset($2);
- a_delete $2;
- }
- | reset_variables VARIABLE
- {
- reset($2);
- a_delete $2;
- }
- | reset_variables ',' VARIABLE
- {
- reset($3);
- a_delete $3;
- }
- ;
-
-print_args:
- print_arg
- { $$ = $1; }
- | print_args print_arg
- {
- $$.str = new char[strlen($1.str) + strlen($2.str) + 1];
- strcpy($$.str, $1.str);
- strcat($$.str, $2.str);
- a_delete $1.str;
- a_delete $2.str;
- if ($1.filename) {
- $$.filename = $1.filename;
- $$.lineno = $1.lineno;
- }
- else if ($2.filename) {
- $$.filename = $2.filename;
- $$.lineno = $2.lineno;
- }
- }
- ;
-
-print_arg:
- expr %prec ','
- {
- $$.str = new char[GDIGITS + 1];
- sprintf($$.str, "%g", $1);
- $$.filename = 0;
- $$.lineno = 0;
- }
- | text
- { $$ = $1; }
- | position %prec ','
- {
- $$.str = new char[GDIGITS + 2 + GDIGITS + 1];
- sprintf($$.str, "%g, %g", $1.x, $1.y);
- $$.filename = 0;
- $$.lineno = 0;
- }
- ;
-
-simple_if:
- IF any_expr THEN
- { delim_flag = 1; }
- DELIMITED
- {
- delim_flag = 0;
- $$.x = $2;
- $$.body = $5;
- }
- ;
-
-until:
- /* empty */
- { $$ = 0; }
- | UNTIL TEXT
- { $$ = $2.str; }
- ;
-
-any_expr:
- expr
- { $$ = $1; }
- | text_expr
- { $$ = $1; }
- ;
-
-text_expr:
- text EQUALEQUAL text
- {
- $$ = strcmp($1.str, $3.str) == 0;
- a_delete $1.str;
- a_delete $3.str;
- }
- | text NOTEQUAL text
- {
- $$ = strcmp($1.str, $3.str) != 0;
- a_delete $1.str;
- a_delete $3.str;
- }
- | text_expr ANDAND text_expr
- { $$ = ($1 != 0.0 && $3 != 0.0); }
- | text_expr ANDAND expr
- { $$ = ($1 != 0.0 && $3 != 0.0); }
- | expr ANDAND text_expr
- { $$ = ($1 != 0.0 && $3 != 0.0); }
- | text_expr OROR text_expr
- { $$ = ($1 != 0.0 || $3 != 0.0); }
- | text_expr OROR expr
- { $$ = ($1 != 0.0 || $3 != 0.0); }
- | expr OROR text_expr
- { $$ = ($1 != 0.0 || $3 != 0.0); }
- | '!' text_expr
- { $$ = ($2 == 0.0); }
- ;
-
-
-optional_by:
- /* empty */
- {
- $$.val = 1.0;
- $$.is_multiplicative = 0;
- }
- | BY expr
- {
- $$.val = $2;
- $$.is_multiplicative = 0;
- }
- | BY '*' expr
- {
- $$.val = $3;
- $$.is_multiplicative = 1;
- }
- ;
-
-element:
- object_spec
- {
- $$.obj = $1->make_object(&current_position,
- &current_direction);
- if ($$.obj == 0)
- YYABORT;
- delete $1;
- if ($$.obj)
- olist.append($$.obj);
- else {
- $$.x = current_position.x;
- $$.y = current_position.y;
- }
- }
- | LABEL ':' optional_separator element
- {
- $$ = $4;
- define_label($1, & $$);
- a_delete $1;
- }
- | LABEL ':' optional_separator position_not_place
- {
- $$.obj = 0;
- $$.x = $4.x;
- $$.y = $4.y;
- define_label($1, & $$);
- a_delete $1;
- }
- | LABEL ':' optional_separator place
- {
- $$ = $4;
- define_label($1, & $$);
- a_delete $1;
- }
- | '{'
- {
- $<state>$.x = current_position.x;
- $<state>$.y = current_position.y;
- $<state>$.dir = current_direction;
- }
- element_list '}'
- {
- current_position.x = $<state>2.x;
- current_position.y = $<state>2.y;
- current_direction = $<state>2.dir;
- }
- optional_element
- {
- $$ = $3;
- }
- | placeless_element
- {
- $$.obj = 0;
- $$.x = current_position.x;
- $$.y = current_position.y;
- }
- ;
-
-optional_element:
- /* empty */
- {}
- | element
- {}
- ;
-
-object_spec:
- BOX
- { $$ = new object_spec(BOX_OBJECT); }
- | CIRCLE
- { $$ = new object_spec(CIRCLE_OBJECT); }
- | ELLIPSE
- { $$ = new object_spec(ELLIPSE_OBJECT); }
- | ARC
- {
- $$ = new object_spec(ARC_OBJECT);
- $$->dir = current_direction;
- }
- | LINE
- {
- $$ = new object_spec(LINE_OBJECT);
- lookup_variable("lineht", & $$->segment_height);
- lookup_variable("linewid", & $$->segment_width);
- $$->dir = current_direction;
- }
- | ARROW
- {
- $$ = new object_spec(ARROW_OBJECT);
- lookup_variable("lineht", & $$->segment_height);
- lookup_variable("linewid", & $$->segment_width);
- $$->dir = current_direction;
- }
- | MOVE
- {
- $$ = new object_spec(MOVE_OBJECT);
- lookup_variable("moveht", & $$->segment_height);
- lookup_variable("movewid", & $$->segment_width);
- $$->dir = current_direction;
- }
- | SPLINE
- {
- $$ = new object_spec(SPLINE_OBJECT);
- lookup_variable("lineht", & $$->segment_height);
- lookup_variable("linewid", & $$->segment_width);
- $$->dir = current_direction;
- }
- | text %prec TEXT
- {
- $$ = new object_spec(TEXT_OBJECT);
- $$->text = new text_item($1.str, $1.filename, $1.lineno);
- }
- | PLOT expr
- {
- $$ = new object_spec(TEXT_OBJECT);
- $$->text = new text_item(format_number(0, $2), 0, -1);
- }
- | PLOT expr text
- {
- $$ = new object_spec(TEXT_OBJECT);
- $$->text = new text_item(format_number($3.str, $2),
- $3.filename, $3.lineno);
- a_delete $3.str;
- }
- | '['
- {
- saved_state *p = new saved_state;
- $<pstate>$ = p;
- p->x = current_position.x;
- p->y = current_position.y;
- p->dir = current_direction;
- p->tbl = current_table;
- p->prev = current_saved_state;
- current_position.x = 0.0;
- current_position.y = 0.0;
- current_table = new PTABLE(place);
- current_saved_state = p;
- olist.append(make_mark_object());
- }
- element_list ']'
- {
- current_position.x = $<pstate>2->x;
- current_position.y = $<pstate>2->y;
- current_direction = $<pstate>2->dir;
- $$ = new object_spec(BLOCK_OBJECT);
- olist.wrap_up_block(& $$->oblist);
- $$->tbl = current_table;
- current_table = $<pstate>2->tbl;
- current_saved_state = $<pstate>2->prev;
- delete $<pstate>2;
- }
- | object_spec HEIGHT expr
- {
- $$ = $1;
- $$->height = $3;
- $$->flags |= HAS_HEIGHT;
- }
- | object_spec RADIUS expr
- {
- $$ = $1;
- $$->radius = $3;
- $$->flags |= HAS_RADIUS;
- }
- | object_spec WIDTH expr
- {
- $$ = $1;
- $$->width = $3;
- $$->flags |= HAS_WIDTH;
- }
- | object_spec DIAMETER expr
- {
- $$ = $1;
- $$->radius = $3/2.0;
- $$->flags |= HAS_RADIUS;
- }
- | object_spec expr %prec HEIGHT
- {
- $$ = $1;
- $$->flags |= HAS_SEGMENT;
- switch ($$->dir) {
- case UP_DIRECTION:
- $$->segment_pos.y += $2;
- break;
- case DOWN_DIRECTION:
- $$->segment_pos.y -= $2;
- break;
- case RIGHT_DIRECTION:
- $$->segment_pos.x += $2;
- break;
- case LEFT_DIRECTION:
- $$->segment_pos.x -= $2;
- break;
- }
- }
- | object_spec UP
- {
- $$ = $1;
- $$->dir = UP_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.y += $$->segment_height;
- }
- | object_spec UP expr
- {
- $$ = $1;
- $$->dir = UP_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.y += $3;
- }
- | object_spec DOWN
- {
- $$ = $1;
- $$->dir = DOWN_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.y -= $$->segment_height;
- }
- | object_spec DOWN expr
- {
- $$ = $1;
- $$->dir = DOWN_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.y -= $3;
- }
- | object_spec RIGHT
- {
- $$ = $1;
- $$->dir = RIGHT_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x += $$->segment_width;
- }
- | object_spec RIGHT expr
- {
- $$ = $1;
- $$->dir = RIGHT_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x += $3;
- }
- | object_spec LEFT
- {
- $$ = $1;
- $$->dir = LEFT_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x -= $$->segment_width;
- }
- | object_spec LEFT expr
- {
- $$ = $1;
- $$->dir = LEFT_DIRECTION;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x -= $3;
- }
- | object_spec FROM position
- {
- $$ = $1;
- $$->flags |= HAS_FROM;
- $$->from.x = $3.x;
- $$->from.y = $3.y;
- }
- | object_spec TO position
- {
- $$ = $1;
- if ($$->flags & HAS_SEGMENT)
- $$->segment_list = new segment($$->segment_pos,
- $$->segment_is_absolute,
- $$->segment_list);
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x = $3.x;
- $$->segment_pos.y = $3.y;
- $$->segment_is_absolute = 1;
- $$->flags |= HAS_TO;
- $$->to.x = $3.x;
- $$->to.y = $3.y;
- }
- | object_spec AT position
- {
- $$ = $1;
- $$->flags |= HAS_AT;
- $$->at.x = $3.x;
- $$->at.y = $3.y;
- if ($$->type != ARC_OBJECT) {
- $$->flags |= HAS_FROM;
- $$->from.x = $3.x;
- $$->from.y = $3.y;
- }
- }
- | object_spec WITH path
- {
- $$ = $1;
- $$->flags |= HAS_WITH;
- $$->with = $3;
- }
- | object_spec WITH position %prec ','
- {
- $$ = $1;
- $$->flags |= HAS_WITH;
- position pos;
- pos.x = $3.x;
- pos.y = $3.y;
- $$->with = new path(pos);
- }
- | object_spec BY expr_pair
- {
- $$ = $1;
- $$->flags |= HAS_SEGMENT;
- $$->segment_pos.x += $3.x;
- $$->segment_pos.y += $3.y;
- }
- | object_spec THEN
- {
- $$ = $1;
- if ($$->flags & HAS_SEGMENT) {
- $$->segment_list = new segment($$->segment_pos,
- $$->segment_is_absolute,
- $$->segment_list);
- $$->flags &= ~HAS_SEGMENT;
- $$->segment_pos.x = $$->segment_pos.y = 0.0;
- $$->segment_is_absolute = 0;
- }
- }
- | object_spec SOLID
- {
- $$ = $1; // nothing
- }
- | object_spec DOTTED
- {
- $$ = $1;
- $$->flags |= IS_DOTTED;
- lookup_variable("dashwid", & $$->dash_width);
- }
- | object_spec DOTTED expr
- {
- $$ = $1;
- $$->flags |= IS_DOTTED;
- $$->dash_width = $3;
- }
- | object_spec DASHED
- {
- $$ = $1;
- $$->flags |= IS_DASHED;
- lookup_variable("dashwid", & $$->dash_width);
- }
- | object_spec DASHED expr
- {
- $$ = $1;
- $$->flags |= IS_DASHED;
- $$->dash_width = $3;
- }
- | object_spec FILL
- {
- $$ = $1;
- $$->flags |= IS_DEFAULT_FILLED;
- }
- | object_spec FILL expr
- {
- $$ = $1;
- $$->flags |= IS_FILLED;
- $$->fill = $3;
- }
- | object_spec SHADED text
- {
- $$ = $1;
- $$->flags |= (IS_SHADED | IS_FILLED);
- $$->shaded = new char[strlen($3.str)+1];
- strcpy($$->shaded, $3.str);
- }
- | object_spec COLORED text
- {
- $$ = $1;
- $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
- $$->shaded = new char[strlen($3.str)+1];
- strcpy($$->shaded, $3.str);
- $$->outlined = new char[strlen($3.str)+1];
- strcpy($$->outlined, $3.str);
- }
- | object_spec OUTLINED text
- {
- $$ = $1;
- $$->flags |= IS_OUTLINED;
- $$->outlined = new char[strlen($3.str)+1];
- strcpy($$->outlined, $3.str);
- }
- | object_spec CHOP
- {
- $$ = $1;
- // line chop chop means line chop 0 chop 0
- if ($$->flags & IS_DEFAULT_CHOPPED) {
- $$->flags |= IS_CHOPPED;
- $$->flags &= ~IS_DEFAULT_CHOPPED;
- $$->start_chop = $$->end_chop = 0.0;
- }
- else if ($$->flags & IS_CHOPPED) {
- $$->end_chop = 0.0;
- }
- else {
- $$->flags |= IS_DEFAULT_CHOPPED;
- }
- }
- | object_spec CHOP expr
- {
- $$ = $1;
- if ($$->flags & IS_DEFAULT_CHOPPED) {
- $$->flags |= IS_CHOPPED;
- $$->flags &= ~IS_DEFAULT_CHOPPED;
- $$->start_chop = 0.0;
- $$->end_chop = $3;
- }
- else if ($$->flags & IS_CHOPPED) {
- $$->end_chop = $3;
- }
- else {
- $$->start_chop = $$->end_chop = $3;
- $$->flags |= IS_CHOPPED;
- }
- }
- | object_spec SAME
- {
- $$ = $1;
- $$->flags |= IS_SAME;
- }
- | object_spec INVISIBLE
- {
- $$ = $1;
- $$->flags |= IS_INVISIBLE;
- }
- | object_spec LEFT_ARROW_HEAD
- {
- $$ = $1;
- $$->flags |= HAS_LEFT_ARROW_HEAD;
- }
- | object_spec RIGHT_ARROW_HEAD
- {
- $$ = $1;
- $$->flags |= HAS_RIGHT_ARROW_HEAD;
- }
- | object_spec DOUBLE_ARROW_HEAD
- {
- $$ = $1;
- $$->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
- }
- | object_spec CW
- {
- $$ = $1;
- $$->flags |= IS_CLOCKWISE;
- }
- | object_spec CCW
- {
- $$ = $1;
- $$->flags &= ~IS_CLOCKWISE;
- }
- | object_spec text %prec TEXT
- {
- $$ = $1;
- text_item **p;
- for (p = & $$->text; *p; p = &(*p)->next)
- ;
- *p = new text_item($2.str, $2.filename, $2.lineno);
- }
- | object_spec LJUST
- {
- $$ = $1;
- if ($$->text) {
- text_item *p;
- for (p = $$->text; p->next; p = p->next)
- ;
- p->adj.h = LEFT_ADJUST;
- }
- }
- | object_spec RJUST
- {
- $$ = $1;
- if ($$->text) {
- text_item *p;
- for (p = $$->text; p->next; p = p->next)
- ;
- p->adj.h = RIGHT_ADJUST;
- }
- }
- | object_spec ABOVE
- {
- $$ = $1;
- if ($$->text) {
- text_item *p;
- for (p = $$->text; p->next; p = p->next)
- ;
- p->adj.v = ABOVE_ADJUST;
- }
- }
- | object_spec BELOW
- {
- $$ = $1;
- if ($$->text) {
- text_item *p;
- for (p = $$->text; p->next; p = p->next)
- ;
- p->adj.v = BELOW_ADJUST;
- }
- }
- | object_spec THICKNESS expr
- {
- $$ = $1;
- $$->flags |= HAS_THICKNESS;
- $$->thickness = $3;
- }
- | object_spec ALIGNED
- {
- $$ = $1;
- $$->flags |= IS_ALIGNED;
- }
- ;
-
-text:
- TEXT
- { $$ = $1; }
- | SPRINTF '(' TEXT sprintf_args ')'
- {
- $$.filename = $3.filename;
- $$.lineno = $3.lineno;
- $$.str = do_sprintf($3.str, $4.v, $4.nv);
- a_delete $4.v;
- a_delete $3.str;
- }
- ;
-
-sprintf_args:
- /* empty */
- {
- $$.v = 0;
- $$.nv = 0;
- $$.maxv = 0;
- }
- | sprintf_args ',' expr
- {
- $$ = $1;
- if ($$.nv >= $$.maxv) {
- if ($$.nv == 0) {
- $$.v = new double[4];
- $$.maxv = 4;
- }
- else {
- double *oldv = $$.v;
- $$.maxv *= 2;
-#if 0
- $$.v = new double[$$.maxv];
- memcpy($$.v, oldv, $$.nv*sizeof(double));
-#else
- // workaround for bug in Compaq C++ V6.5-033
- // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
- double *foo = new double[$$.maxv];
- memcpy(foo, oldv, $$.nv*sizeof(double));
- $$.v = foo;
-#endif
- a_delete oldv;
- }
- }
- $$.v[$$.nv] = $3;
- $$.nv += 1;
- }
- ;
-
-position:
- position_not_place
- { $$ = $1; }
- | place
- {
- position pos = $1;
- $$.x = pos.x;
- $$.y = pos.y;
- }
- | '(' place ')'
- {
- position pos = $2;
- $$.x = pos.x;
- $$.y = pos.y;
- }
- ;
-
-position_not_place:
- expr_pair
- { $$ = $1; }
- | position '+' expr_pair
- {
- $$.x = $1.x + $3.x;
- $$.y = $1.y + $3.y;
- }
- | '(' position '+' expr_pair ')'
- {
- $$.x = $2.x + $4.x;
- $$.y = $2.y + $4.y;
- }
- | position '-' expr_pair
- {
- $$.x = $1.x - $3.x;
- $$.y = $1.y - $3.y;
- }
- | '(' position '-' expr_pair ')'
- {
- $$.x = $2.x - $4.x;
- $$.y = $2.y - $4.y;
- }
- | '(' position ',' position ')'
- {
- $$.x = $2.x;
- $$.y = $4.y;
- }
- | expr between position AND position
- {
- $$.x = (1.0 - $1)*$3.x + $1*$5.x;
- $$.y = (1.0 - $1)*$3.y + $1*$5.y;
- }
- | '(' expr between position AND position ')'
- {
- $$.x = (1.0 - $2)*$4.x + $2*$6.x;
- $$.y = (1.0 - $2)*$4.y + $2*$6.y;
- }
- | expr '<' position ',' position '>'
- {
- $$.x = (1.0 - $1)*$3.x + $1*$5.x;
- $$.y = (1.0 - $1)*$3.y + $1*$5.y;
- }
- | '(' expr '<' position ',' position '>' ')'
- {
- $$.x = (1.0 - $2)*$4.x + $2*$6.x;
- $$.y = (1.0 - $2)*$4.y + $2*$6.y;
- }
- ;
-
-between:
- BETWEEN
- | OF THE WAY BETWEEN
- ;
-
-expr_pair:
- expr ',' expr
- {
- $$.x = $1;
- $$.y = $3;
- }
- | '(' expr_pair ')'
- { $$ = $2; }
- ;
-
-place:
- /* line at A left == line (at A) left */
- label %prec CHOP
- { $$ = $1; }
- | label corner
- {
- path pth($2);
- if (!pth.follow($1, & $$))
- YYABORT;
- }
- | corner label
- {
- path pth($1);
- if (!pth.follow($2, & $$))
- YYABORT;
- }
- | corner OF label
- {
- path pth($1);
- if (!pth.follow($3, & $$))
- YYABORT;
- }
- | HERE
- {
- $$.x = current_position.x;
- $$.y = current_position.y;
- $$.obj = 0;
- }
- ;
-
-label:
- LABEL
- {
- place *p = lookup_label($1);
- if (!p) {
- lex_error("there is no place `%1'", $1);
- YYABORT;
- }
- $$ = *p;
- a_delete $1;
- }
- | nth_primitive
- { $$.obj = $1; }
- | label '.' LABEL
- {
- path pth($3);
- if (!pth.follow($1, & $$))
- YYABORT;
- }
- ;
-
-ordinal:
- ORDINAL
- { $$ = $1; }
- | '`' any_expr TH
- {
- // XXX Check for overflow (and non-integers?).
- $$ = (int)$2;
- }
- ;
-
-optional_ordinal_last:
- LAST
- { $$ = 1; }
- | ordinal LAST
- { $$ = $1; }
- ;
-
-nth_primitive:
- ordinal object_type
- {
- int count = 0;
- object *p;
- for (p = olist.head; p != 0; p = p->next)
- if (p->type() == $2 && ++count == $1) {
- $$ = p;
- break;
- }
- if (p == 0) {
- lex_error("there is no %1%2 %3", $1, ordinal_postfix($1),
- object_type_name($2));
- YYABORT;
- }
- }
- | optional_ordinal_last object_type
- {
- int count = 0;
- object *p;
- for (p = olist.tail; p != 0; p = p->prev)
- if (p->type() == $2 && ++count == $1) {
- $$ = p;
- break;
- }
- if (p == 0) {
- lex_error("there is no %1%2 last %3", $1,
- ordinal_postfix($1), object_type_name($2));
- YYABORT;
- }
- }
- ;
-
-object_type:
- BOX
- { $$ = BOX_OBJECT; }
- | CIRCLE
- { $$ = CIRCLE_OBJECT; }
- | ELLIPSE
- { $$ = ELLIPSE_OBJECT; }
- | ARC
- { $$ = ARC_OBJECT; }
- | LINE
- { $$ = LINE_OBJECT; }
- | ARROW
- { $$ = ARROW_OBJECT; }
- | SPLINE
- { $$ = SPLINE_OBJECT; }
- | '[' ']'
- { $$ = BLOCK_OBJECT; }
- | TEXT
- { $$ = TEXT_OBJECT; }
- ;
-
-label_path:
- '.' LABEL
- { $$ = new path($2); }
- | label_path '.' LABEL
- {
- $$ = $1;
- $$->append($3);
- }
- ;
-
-relative_path:
- corner %prec CHOP
- { $$ = new path($1); }
- /* give this a lower precedence than LEFT and RIGHT so that
- [A: box] with .A left == [A: box] with (.A left) */
- | label_path %prec TEXT
- { $$ = $1; }
- | label_path corner
- {
- $$ = $1;
- $$->append($2);
- }
- ;
-
-path:
- relative_path
- { $$ = $1; }
- | '(' relative_path ',' relative_path ')'
- {
- $$ = $2;
- $$->set_ypath($4);
- }
- /* The rest of these rules are a compatibility sop. */
- | ORDINAL LAST object_type relative_path
- {
- lex_warning("`%1%2 last %3' in `with' argument ignored",
- $1, ordinal_postfix($1), object_type_name($3));
- $$ = $4;
- }
- | LAST object_type relative_path
- {
- lex_warning("`last %1' in `with' argument ignored",
- object_type_name($2));
- $$ = $3;
- }
- | ORDINAL object_type relative_path
- {
- lex_warning("`%1%2 %3' in `with' argument ignored",
- $1, ordinal_postfix($1), object_type_name($2));
- $$ = $3;
- }
- | LABEL relative_path
- {
- lex_warning("initial `%1' in `with' argument ignored", $1);
- a_delete $1;
- $$ = $2;
- }
- ;
-
-corner:
- DOT_N
- { $$ = &object::north; }
- | DOT_E
- { $$ = &object::east; }
- | DOT_W
- { $$ = &object::west; }
- | DOT_S
- { $$ = &object::south; }
- | DOT_NE
- { $$ = &object::north_east; }
- | DOT_SE
- { $$ = &object:: south_east; }
- | DOT_NW
- { $$ = &object::north_west; }
- | DOT_SW
- { $$ = &object::south_west; }
- | DOT_C
- { $$ = &object::center; }
- | DOT_START
- { $$ = &object::start; }
- | DOT_END
- { $$ = &object::end; }
- | TOP
- { $$ = &object::north; }
- | BOTTOM
- { $$ = &object::south; }
- | LEFT
- { $$ = &object::west; }
- | RIGHT
- { $$ = &object::east; }
- | UPPER LEFT
- { $$ = &object::north_west; }
- | LOWER LEFT
- { $$ = &object::south_west; }
- | UPPER RIGHT
- { $$ = &object::north_east; }
- | LOWER RIGHT
- { $$ = &object::south_east; }
- | LEFT_CORNER
- { $$ = &object::west; }
- | RIGHT_CORNER
- { $$ = &object::east; }
- | UPPER LEFT_CORNER
- { $$ = &object::north_west; }
- | LOWER LEFT_CORNER
- { $$ = &object::south_west; }
- | UPPER RIGHT_CORNER
- { $$ = &object::north_east; }
- | LOWER RIGHT_CORNER
- { $$ = &object::south_east; }
- | NORTH
- { $$ = &object::north; }
- | SOUTH
- { $$ = &object::south; }
- | EAST
- { $$ = &object::east; }
- | WEST
- { $$ = &object::west; }
- | CENTER
- { $$ = &object::center; }
- | START
- { $$ = &object::start; }
- | END
- { $$ = &object::end; }
- ;
-
-expr:
- VARIABLE
- {
- if (!lookup_variable($1, & $$)) {
- lex_error("there is no variable `%1'", $1);
- YYABORT;
- }
- a_delete $1;
- }
- | NUMBER
- { $$ = $1; }
- | place DOT_X
- {
- if ($1.obj != 0)
- $$ = $1.obj->origin().x;
- else
- $$ = $1.x;
- }
- | place DOT_Y
- {
- if ($1.obj != 0)
- $$ = $1.obj->origin().y;
- else
- $$ = $1.y;
- }
- | place DOT_HT
- {
- if ($1.obj != 0)
- $$ = $1.obj->height();
- else
- $$ = 0.0;
- }
- | place DOT_WID
- {
- if ($1.obj != 0)
- $$ = $1.obj->width();
- else
- $$ = 0.0;
- }
- | place DOT_RAD
- {
- if ($1.obj != 0)
- $$ = $1.obj->radius();
- else
- $$ = 0.0;
- }
- | expr '+' expr
- { $$ = $1 + $3; }
- | expr '-' expr
- { $$ = $1 - $3; }
- | expr '*' expr
- { $$ = $1 * $3; }
- | expr '/' expr
- {
- if ($3 == 0.0) {
- lex_error("division by zero");
- YYABORT;
- }
- $$ = $1/$3;
- }
- | expr '%' expr
- {
- if ($3 == 0.0) {
- lex_error("modulus by zero");
- YYABORT;
- }
- $$ = fmod($1, $3);
- }
- | expr '^' expr
- {
- errno = 0;
- $$ = pow($1, $3);
- if (errno == EDOM) {
- lex_error("arguments to `^' operator out of domain");
- YYABORT;
- }
- if (errno == ERANGE) {
- lex_error("result of `^' operator out of range");
- YYABORT;
- }
- }
- | '-' expr %prec '!'
- { $$ = -$2; }
- | '(' any_expr ')'
- { $$ = $2; }
- | SIN '(' any_expr ')'
- {
- errno = 0;
- $$ = sin($3);
- if (errno == ERANGE) {
- lex_error("sin result out of range");
- YYABORT;
- }
- }
- | COS '(' any_expr ')'
- {
- errno = 0;
- $$ = cos($3);
- if (errno == ERANGE) {
- lex_error("cos result out of range");
- YYABORT;
- }
- }
- | ATAN2 '(' any_expr ',' any_expr ')'
- {
- errno = 0;
- $$ = atan2($3, $5);
- if (errno == EDOM) {
- lex_error("atan2 argument out of domain");
- YYABORT;
- }
- if (errno == ERANGE) {
- lex_error("atan2 result out of range");
- YYABORT;
- }
- }
- | LOG '(' any_expr ')'
- {
- errno = 0;
- $$ = log10($3);
- if (errno == ERANGE) {
- lex_error("log result out of range");
- YYABORT;
- }
- }
- | EXP '(' any_expr ')'
- {
- errno = 0;
- $$ = pow(10.0, $3);
- if (errno == ERANGE) {
- lex_error("exp result out of range");
- YYABORT;
- }
- }
- | SQRT '(' any_expr ')'
- {
- errno = 0;
- $$ = sqrt($3);
- if (errno == EDOM) {
- lex_error("sqrt argument out of domain");
- YYABORT;
- }
- }
- | K_MAX '(' any_expr ',' any_expr ')'
- { $$ = $3 > $5 ? $3 : $5; }
- | K_MIN '(' any_expr ',' any_expr ')'
- { $$ = $3 < $5 ? $3 : $5; }
- | INT '(' any_expr ')'
- { $$ = floor($3); }
- | RAND '(' any_expr ')'
- { $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); }
- | RAND '(' ')'
- {
- /* return a random number in the range [0,1) */
- /* portable, but not very random */
- $$ = (rand() & 0x7fff) / double(0x8000);
- }
- | SRAND '(' any_expr ')'
- {
- $$ = 0;
- srand((unsigned int)$3);
- }
- | expr '<' expr
- { $$ = ($1 < $3); }
- | expr LESSEQUAL expr
- { $$ = ($1 <= $3); }
- | expr '>' expr
- { $$ = ($1 > $3); }
- | expr GREATEREQUAL expr
- { $$ = ($1 >= $3); }
- | expr EQUALEQUAL expr
- { $$ = ($1 == $3); }
- | expr NOTEQUAL expr
- { $$ = ($1 != $3); }
- | expr ANDAND expr
- { $$ = ($1 != 0.0 && $3 != 0.0); }
- | expr OROR expr
- { $$ = ($1 != 0.0 || $3 != 0.0); }
- | '!' expr
- { $$ = ($2 == 0.0); }
-
- ;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-static struct {
- const char *name;
- double val;
- int scaled; // non-zero if val should be multiplied by scale
-} defaults_table[] = {
- { "arcrad", .25, 1 },
- { "arrowht", .1, 1 },
- { "arrowwid", .05, 1 },
- { "circlerad", .25, 1 },
- { "boxht", .5, 1 },
- { "boxwid", .75, 1 },
- { "boxrad", 0.0, 1 },
- { "dashwid", .05, 1 },
- { "ellipseht", .5, 1 },
- { "ellipsewid", .75, 1 },
- { "moveht", .5, 1 },
- { "movewid", .5, 1 },
- { "lineht", .5, 1 },
- { "linewid", .5, 1 },
- { "textht", 0.0, 1 },
- { "textwid", 0.0, 1 },
- { "scale", 1.0, 0 },
- { "linethick", -1.0, 0 }, // in points
- { "fillval", .5, 0 },
- { "arrowhead", 1.0, 0 },
- { "maxpswid", 8.5, 0 },
- { "maxpsht", 11.0, 0 },
-};
-
-place *lookup_label(const char *label)
-{
- saved_state *state = current_saved_state;
- PTABLE(place) *tbl = current_table;
- for (;;) {
- place *pl = tbl->lookup(label);
- if (pl)
- return pl;
- if (!state)
- return 0;
- tbl = state->tbl;
- state = state->prev;
- }
-}
-
-void define_label(const char *label, const place *pl)
-{
- place *p = new place[1];
- *p = *pl;
- current_table->define(label, p);
-}
-
-int lookup_variable(const char *name, double *val)
-{
- place *pl = lookup_label(name);
- if (pl) {
- *val = pl->x;
- return 1;
- }
- return 0;
-}
-
-void define_variable(const char *name, double val)
-{
- place *p = new place[1];
- p->obj = 0;
- p->x = val;
- p->y = 0.0;
- current_table->define(name, p);
- if (strcmp(name, "scale") == 0) {
- // When the scale changes, reset all scaled pre-defined variables to
- // their default values.
- for (unsigned int i = 0;
- i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (defaults_table[i].scaled)
- define_variable(defaults_table[i].name, val*defaults_table[i].val);
- }
-}
-
-// called once only (not once per parse)
-
-void parse_init()
-{
- current_direction = RIGHT_DIRECTION;
- current_position.x = 0.0;
- current_position.y = 0.0;
- // This resets everything to its default value.
- reset_all();
-}
-
-void reset(const char *nm)
-{
- for (unsigned int i = 0;
- i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (strcmp(nm, defaults_table[i].name) == 0) {
- double val = defaults_table[i].val;
- if (defaults_table[i].scaled) {
- double scale;
- lookup_variable("scale", &scale);
- val *= scale;
- }
- define_variable(defaults_table[i].name, val);
- return;
- }
- lex_error("`%1' is not a predefined variable", nm);
-}
-
-void reset_all()
-{
- // We only have to explicitly reset the pre-defined variables that
- // aren't scaled because `scale' is not scaled, and changing the
- // value of `scale' will reset all the pre-defined variables that
- // are scaled.
- for (unsigned int i = 0;
- i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (!defaults_table[i].scaled)
- define_variable(defaults_table[i].name, defaults_table[i].val);
-}
-
-// called after each parse
-
-void parse_cleanup()
-{
- while (current_saved_state != 0) {
- delete current_table;
- current_table = current_saved_state->tbl;
- saved_state *tem = current_saved_state;
- current_saved_state = current_saved_state->prev;
- delete tem;
- }
- assert(current_table == &top_table);
- PTABLE_ITERATOR(place) iter(current_table);
- const char *key;
- place *pl;
- while (iter.next(&key, &pl))
- if (pl->obj != 0) {
- position pos = pl->obj->origin();
- pl->obj = 0;
- pl->x = pos.x;
- pl->y = pos.y;
- }
- while (olist.head != 0) {
- object *tem = olist.head;
- olist.head = olist.head->next;
- delete tem;
- }
- olist.tail = 0;
- current_direction = RIGHT_DIRECTION;
- current_position.x = 0.0;
- current_position.y = 0.0;
-}
-
-const char *ordinal_postfix(int n)
-{
- if (n < 10 || n > 20)
- switch (n % 10) {
- case 1:
- return "st";
- case 2:
- return "nd";
- case 3:
- return "rd";
- }
- return "th";
-}
-
-const char *object_type_name(object_type type)
-{
- switch (type) {
- case BOX_OBJECT:
- return "box";
- case CIRCLE_OBJECT:
- return "circle";
- case ELLIPSE_OBJECT:
- return "ellipse";
- case ARC_OBJECT:
- return "arc";
- case SPLINE_OBJECT:
- return "spline";
- case LINE_OBJECT:
- return "line";
- case ARROW_OBJECT:
- return "arrow";
- case MOVE_OBJECT:
- return "move";
- case TEXT_OBJECT:
- return "\"\"";
- case BLOCK_OBJECT:
- return "[]";
- case OTHER_OBJECT:
- case MARK_OBJECT:
- default:
- break;
- }
- return "object";
-}
-
-static char sprintf_buf[1024];
-
-char *format_number(const char *form, double n)
-{
- if (form == 0)
- form = "%g";
- return do_sprintf(form, &n, 1);
-}
-
-char *do_sprintf(const char *form, const double *v, int nv)
-{
- string result;
- int i = 0;
- string one_format;
- while (*form) {
- if (*form == '%') {
- one_format += *form++;
- for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
- one_format += *form;
- if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
- lex_error("bad sprintf format");
- result += one_format;
- result += form;
- break;
- }
- if (*form == '%') {
- one_format += *form++;
- one_format += '\0';
- snprintf(sprintf_buf, sizeof(sprintf_buf),
- "%s", one_format.contents());
- }
- else {
- if (i >= nv) {
- lex_error("too few arguments to snprintf");
- result += one_format;
- result += form;
- break;
- }
- one_format += *form++;
- one_format += '\0';
- snprintf(sprintf_buf, sizeof(sprintf_buf),
- one_format.contents(), v[i++]);
- }
- one_format.clear();
- result += sprintf_buf;
- }
- else
- result += *form++;
- }
- result += '\0';
- return strsave(result.contents());
-}
diff --git a/contrib/groff/src/preproc/pic/position.h b/contrib/groff/src/preproc/pic/position.h
deleted file mode 100644
index c62e3e7bd0da..000000000000
--- a/contrib/groff/src/preproc/pic/position.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct place;
-struct position {
- double x;
- double y;
- position(double, double );
- position();
- position(const place &);
- position &operator+=(const position &);
- position &operator-=(const position &);
- position &operator*=(double);
- position &operator/=(double);
-};
-
-position operator-(const position &);
-position operator+(const position &, const position &);
-position operator-(const position &, const position &);
-position operator/(const position &, double);
-position operator*(const position &, double);
-// dot product
-double operator*(const position &, const position &);
-int operator==(const position &, const position &);
-int operator!=(const position &, const position &);
-
-double hypot(const position &a);
-
-typedef position distance;
-
diff --git a/contrib/groff/src/preproc/pic/tex.cpp b/contrib/groff/src/preproc/pic/tex.cpp
deleted file mode 100644
index f997b868d687..000000000000
--- a/contrib/groff/src/preproc/pic/tex.cpp
+++ /dev/null
@@ -1,459 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-
-#ifdef TEX_SUPPORT
-
-#include "common.h"
-
-class tex_output : public common_output {
-public:
- tex_output();
- ~tex_output();
- void start_picture(double, const position &ll, const position &ur);
- void finish_picture();
- void text(const position &, text_piece *, int, double);
- void line(const position &, const position *, int n,
- const line_type &);
- void polygon(const position *, int n,
- const line_type &, double);
- void spline(const position &, const position *, int n,
- const line_type &);
- void arc(const position &, const position &, const position &,
- const line_type &);
- void circle(const position &, double rad, const line_type &, double);
- void ellipse(const position &, const distance &, const line_type &, double);
- void command(const char *, const char *, int);
- void set_color(char *, char *);
- void reset_color();
- char *get_last_filled();
- char *get_outline_color();
- int supports_filled_polygons();
-private:
- position upper_left;
- double height;
- double width;
- double scale;
- double pen_size;
-
- void point(const position &);
- void dot(const position &, const line_type &);
- void solid_arc(const position &cent, double rad, double start_angle,
- double end_angle, const line_type &lt);
- position transform(const position &);
-protected:
- virtual void set_pen_size(double ps);
-};
-
-// convert inches to milliinches
-
-inline int milliinches(double x)
-{
- return int(x*1000.0 + .5);
-}
-
-inline position tex_output::transform(const position &pos)
-{
- return position((pos.x - upper_left.x)/scale,
- (upper_left.y - pos.y)/scale);
-}
-
-output *make_tex_output()
-{
- return new tex_output;
-}
-
-tex_output::tex_output()
-{
-}
-
-tex_output::~tex_output()
-{
-}
-
-const int DEFAULT_PEN_SIZE = 8;
-
-void tex_output::set_pen_size(double ps)
-{
- if (ps < 0.0)
- ps = -1.0;
- if (ps != pen_size) {
- pen_size = ps;
- printf(" \\special{pn %d}%%\n",
- ps < 0.0 ? DEFAULT_PEN_SIZE : int(ps*(1000.0/72.0) + .5));
- }
-}
-
-void tex_output::start_picture(double sc, const position &ll,
- const position &ur)
-{
- upper_left.x = ll.x;
- upper_left.y = ur.y;
- scale = compute_scale(sc, ll, ur);
- height = (ur.y - ll.y)/scale;
- width = (ur.x - ll.x)/scale;
- /* The point of \vskip 0pt is to ensure that the vtop gets
- a height of 0 rather than the height of the hbox; this
- might be non-zero if text from text attributes lies outside pic's
- idea of the bounding box of the picture. */
- /* \newbox and \newdimen are defined with \outer in plain.tex and can't
- be used directly in an \if clause. */
- printf("\\expandafter\\ifx\\csname %s\\endcsname\\relax\n"
- " \\csname newbox\\expandafter\\endcsname\\csname %s\\endcsname\n"
- "\\fi\n"
- "\\ifx\\graphtemp\\undefined\n"
- " \\csname newdimen\\endcsname\\graphtemp\n"
- "\\fi\n"
- "\\expandafter\\setbox\\csname %s\\endcsname\n"
- " =\\vtop{\\vskip 0pt\\hbox{%%\n",
- graphname, graphname, graphname);
- pen_size = -2.0;
-}
-
-void tex_output::finish_picture()
-{
- printf(" \\hbox{\\vrule depth%.3fin width0pt height 0pt}%%\n"
- " \\kern %.3fin\n"
- " }%%\n"
- "}%%\n",
- height, width);
-}
-
-void tex_output::text(const position &center, text_piece *v, int n, double)
-{
- position c = transform(center);
- for (int i = 0; i < n; i++)
- if (v[i].text != 0 && *v[i].text != '\0') {
- int j = 2*i - n + 1;
- if (v[i].adj.v == ABOVE_ADJUST)
- j--;
- else if (v[i].adj.v == BELOW_ADJUST)
- j++;
- if (j == 0) {
- printf(" \\graphtemp=.5ex\n"
- " \\advance\\graphtemp by %.3fin\n", c.y);
- }
- else {
- printf(" \\graphtemp=\\baselineskip\n"
- " \\multiply\\graphtemp by %d\n"
- " \\divide\\graphtemp by 2\n"
- " \\advance\\graphtemp by .5ex\n"
- " \\advance\\graphtemp by %.3fin\n",
- j, c.y);
- }
- printf(" \\rlap{\\kern %.3fin\\lower\\graphtemp", c.x);
- fputs("\\hbox to 0pt{", stdout);
- if (v[i].adj.h != LEFT_ADJUST)
- fputs("\\hss ", stdout);
- fputs(v[i].text, stdout);
- if (v[i].adj.h != RIGHT_ADJUST)
- fputs("\\hss", stdout);
- fputs("}}%\n", stdout);
- }
-}
-
-void tex_output::point(const position &pos)
-{
- position p = transform(pos);
- printf(" \\special{pa %d %d}%%\n", milliinches(p.x), milliinches(p.y));
-}
-
-void tex_output::line(const position &start, const position *v, int n,
- const line_type &lt)
-{
- set_pen_size(lt.thickness);
- point(start);
- for (int i = 0; i < n; i++)
- point(v[i]);
- fputs(" \\special{", stdout);
- switch(lt.type) {
- case line_type::invisible:
- fputs("ip", stdout);
- break;
- case line_type::solid:
- fputs("fp", stdout);
- break;
- case line_type::dotted:
- printf("dt %.3f", lt.dash_width/scale);
- break;
- case line_type::dashed:
- printf("da %.3f", lt.dash_width/scale);
- break;
- }
- fputs("}%\n", stdout);
-}
-
-void tex_output::polygon(const position *v, int n,
- const line_type &lt, double fill)
-{
- if (fill >= 0.0) {
- if (fill > 1.0)
- fill = 1.0;
- printf(" \\special{sh %.3f}%%\n", fill);
- }
- line(v[n-1], v, n, lt);
-}
-
-void tex_output::spline(const position &start, const position *v, int n,
- const line_type &lt)
-{
- if (lt.type == line_type::invisible)
- return;
- set_pen_size(lt.thickness);
- point(start);
- for (int i = 0; i < n; i++)
- point(v[i]);
- fputs(" \\special{sp", stdout);
- switch(lt.type) {
- case line_type::solid:
- break;
- case line_type::dotted:
- printf(" %.3f", -lt.dash_width/scale);
- break;
- case line_type::dashed:
- printf(" %.3f", lt.dash_width/scale);
- break;
- case line_type::invisible:
- assert(0);
- }
- fputs("}%\n", stdout);
-}
-
-void tex_output::solid_arc(const position &cent, double rad,
- double start_angle, double end_angle,
- const line_type &lt)
-{
- set_pen_size(lt.thickness);
- position c = transform(cent);
- printf(" \\special{ar %d %d %d %d %f %f}%%\n",
- milliinches(c.x),
- milliinches(c.y),
- milliinches(rad/scale),
- milliinches(rad/scale),
- -end_angle,
- (-end_angle > -start_angle) ? (double)M_PI * 2 - start_angle
- : -start_angle);
-}
-
-void tex_output::arc(const position &start, const position &cent,
- const position &end, const line_type &lt)
-{
- switch (lt.type) {
- case line_type::invisible:
- break;
- case line_type::dashed:
- dashed_arc(start, cent, end, lt);
- break;
- case line_type::dotted:
- dotted_arc(start, cent, end, lt);
- break;
- case line_type::solid:
- {
- position c;
- if (!compute_arc_center(start, cent, end, &c)) {
- line(start, &end, 1, lt);
- break;
- }
- solid_arc(c,
- hypot(cent - start),
- atan2(start.y - c.y, start.x - c.x),
- atan2(end.y - c.y, end.x - c.x),
- lt);
- break;
- }
- }
-}
-
-void tex_output::circle(const position &cent, double rad,
- const line_type &lt, double fill)
-{
- if (fill >= 0.0 && lt.type != line_type::solid) {
- if (fill > 1.0)
- fill = 1.0;
- line_type ilt;
- ilt.type = line_type::invisible;
- ellipse(cent, position(rad*2.0, rad*2.0), ilt, fill);
- }
- switch (lt.type) {
- case line_type::dashed:
- dashed_circle(cent, rad, lt);
- break;
- case line_type::invisible:
- break;
- case line_type::solid:
- ellipse(cent, position(rad*2.0,rad*2.0), lt, fill);
- break;
- case line_type::dotted:
- dotted_circle(cent, rad, lt);
- break;
- default:
- assert(0);
- }
-}
-
-void tex_output::ellipse(const position &cent, const distance &dim,
- const line_type &lt, double fill)
-{
- if (lt.type == line_type::invisible) {
- if (fill < 0.0)
- return;
- }
- else
- set_pen_size(lt.thickness);
- if (fill >= 0.0) {
- if (fill > 1.0)
- fill = 1.0;
- printf(" \\special{sh %.3f}%%\n", fill);
- }
- position c = transform(cent);
- switch (lt.type) {
- case line_type::solid:
- case line_type::invisible:
- printf(" \\special{%s %d %d %d %d 0 6.28319}%%\n",
- (lt.type == line_type::invisible ? "ia" : "ar"),
- milliinches(c.x),
- milliinches(c.y),
- milliinches(dim.x/(2.0*scale)),
- milliinches(dim.y/(2.0*scale)));
- break;
- case line_type::dashed:
- dashed_ellipse(cent, dim / scale, lt);
- break;
- case line_type::dotted:
- dotted_ellipse(cent, dim / scale, lt);
- break;
- default:
- assert(0);
- }
-}
-
-void tex_output::command(const char *s, const char *, int)
-{
- fputs(s, stdout);
- putchar('%'); // avoid unwanted spaces
- putchar('\n');
-}
-
-int tex_output::supports_filled_polygons()
-{
- return 1;
-}
-
-void tex_output::dot(const position &pos, const line_type &lt)
-{
- if (zero_length_line_flag) {
- line_type slt = lt;
- slt.type = line_type::solid;
- line(pos, &pos, 1, slt);
- }
- else {
- int dot_rad = int(lt.thickness*(1000.0/(72.0*2)) + .5);
- if (dot_rad == 0)
- dot_rad = 1;
- position p = transform(pos);
- printf(" \\special{sh 1}%%\n"
- " \\special{ia %d %d %d %d 0 6.28319}%%\n",
- milliinches(p.x), milliinches(p.y), dot_rad, dot_rad);
- }
-}
-
-void tex_output::set_color(char *, char *)
-{
- /* not implemented yet */
-}
-
-void tex_output::reset_color()
-{
- /* not implemented yet */
-}
-
-char *tex_output::get_last_filled()
-{
- /* not implemented yet */
- return NULL;
-}
-
-char *tex_output::get_outline_color()
-{
- /* not implemented yet */
- return NULL;
-}
-
-class tpic_output : public tex_output {
-public:
- tpic_output();
- void command(const char *, const char *, int);
-private:
- void set_pen_size(double ps);
- int default_pen_size;
- int prev_default_pen_size;
-};
-
-tpic_output::tpic_output()
-: default_pen_size(DEFAULT_PEN_SIZE), prev_default_pen_size(DEFAULT_PEN_SIZE)
-{
-}
-
-void tpic_output::command(const char *s, const char *filename, int lineno)
-{
- assert(s[0] == '.');
- if (s[1] == 'p' && s[2] == 's' && (s[3] == '\0' || !csalpha(s[3]))) {
- const char *p = s + 3;
- while (csspace(*p))
- p++;
- if (*p == '\0') {
- int temp = default_pen_size;
- default_pen_size = prev_default_pen_size;
- prev_default_pen_size = temp;
- }
- else {
- char *ptr;
- int temp = (int)strtol(p, &ptr, 10);
- if (temp == 0 && ptr == p)
- error_with_file_and_line(filename, lineno,
- "argument to `.ps' not an integer");
- else if (temp < 0)
- error_with_file_and_line(filename, lineno,
- "negative pen size");
- else {
- prev_default_pen_size = default_pen_size;
- default_pen_size = temp;
- }
- }
- }
- else
- printf("\\%s%%\n", s + 1);
-}
-
-void tpic_output::set_pen_size(double ps)
-{
- if (ps < 0.0)
- printf(" \\special{pn %d}%%\n", default_pen_size);
- else
- tex_output::set_pen_size(ps);
-}
-
-output *make_tpic_output()
-{
- return new tpic_output;
-}
-
-#endif
diff --git a/contrib/groff/src/preproc/pic/text.h b/contrib/groff/src/preproc/pic/text.h
deleted file mode 100644
index f9d34875075f..000000000000
--- a/contrib/groff/src/preproc/pic/text.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// -*- C++ -*-
-
-enum hadjustment {
- CENTER_ADJUST,
- LEFT_ADJUST,
- RIGHT_ADJUST
- };
-
-enum vadjustment {
- NONE_ADJUST,
- ABOVE_ADJUST,
- BELOW_ADJUST
- };
-
-struct adjustment {
- hadjustment h;
- vadjustment v;
-};
-
-struct text_piece {
- char *text;
- adjustment adj;
- const char *filename;
- int lineno;
-
- text_piece();
- ~text_piece();
-};
diff --git a/contrib/groff/src/preproc/pic/troff.cpp b/contrib/groff/src/preproc/pic/troff.cpp
deleted file mode 100644
index 688ca47b9c47..000000000000
--- a/contrib/groff/src/preproc/pic/troff.cpp
+++ /dev/null
@@ -1,567 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "pic.h"
-#include "common.h"
-
-
-const double RELATIVE_THICKNESS = -1.0;
-const double BAD_THICKNESS = -2.0;
-
-class simple_output : public common_output {
- virtual void simple_line(const position &, const position &) = 0;
- virtual void simple_spline(const position &, const position *, int n) = 0;
- virtual void simple_arc(const position &, const position &,
- const position &) = 0;
- virtual void simple_circle(int, const position &, double rad) = 0;
- virtual void simple_ellipse(int, const position &, const distance &) = 0;
- virtual void simple_polygon(int, const position *, int) = 0;
- virtual void line_thickness(double) = 0;
- virtual void set_fill(double) = 0;
- virtual void set_color(char *, char *) = 0;
- virtual void reset_color() = 0;
- virtual char *get_last_filled() = 0;
- void dot(const position &, const line_type &) = 0;
-public:
- void start_picture(double sc, const position &ll, const position &ur) = 0;
- void finish_picture() = 0;
- void text(const position &, text_piece *, int, double) = 0;
- void line(const position &, const position *, int n,
- const line_type &);
- void polygon(const position *, int n,
- const line_type &, double);
- void spline(const position &, const position *, int n,
- const line_type &);
- void arc(const position &, const position &, const position &,
- const line_type &);
- void circle(const position &, double rad, const line_type &, double);
- void ellipse(const position &, const distance &, const line_type &, double);
- int supports_filled_polygons();
-};
-
-int simple_output::supports_filled_polygons()
-{
- return driver_extension_flag != 0;
-}
-
-void simple_output::arc(const position &start, const position &cent,
- const position &end, const line_type &lt)
-{
- switch (lt.type) {
- case line_type::solid:
- line_thickness(lt.thickness);
- simple_arc(start, cent, end);
- break;
- case line_type::invisible:
- break;
- case line_type::dashed:
- dashed_arc(start, cent, end, lt);
- break;
- case line_type::dotted:
- dotted_arc(start, cent, end, lt);
- break;
- }
-}
-
-void simple_output::line(const position &start, const position *v, int n,
- const line_type &lt)
-{
- position pos = start;
- line_thickness(lt.thickness);
- for (int i = 0; i < n; i++) {
- switch (lt.type) {
- case line_type::solid:
- simple_line(pos, v[i]);
- break;
- case line_type::dotted:
- {
- distance vec(v[i] - pos);
- double dist = hypot(vec);
- int ndots = int(dist/lt.dash_width + .5);
- if (ndots == 0)
- dot(pos, lt);
- else {
- vec /= double(ndots);
- for (int j = 0; j <= ndots; j++)
- dot(pos + vec*j, lt);
- }
- }
- break;
- case line_type::dashed:
- {
- distance vec(v[i] - pos);
- double dist = hypot(vec);
- if (dist <= lt.dash_width*2.0)
- simple_line(pos, v[i]);
- else {
- int ndashes = int((dist - lt.dash_width)/(lt.dash_width*2.0) + .5);
- distance dash_vec = vec*(lt.dash_width/dist);
- double dash_gap = (dist - lt.dash_width)/ndashes;
- distance dash_gap_vec = vec*(dash_gap/dist);
- for (int j = 0; j <= ndashes; j++) {
- position s(pos + dash_gap_vec*j);
- simple_line(s, s + dash_vec);
- }
- }
- }
- break;
- case line_type::invisible:
- break;
- default:
- assert(0);
- }
- pos = v[i];
- }
-}
-
-void simple_output::spline(const position &start, const position *v, int n,
- const line_type &lt)
-{
- line_thickness(lt.thickness);
- simple_spline(start, v, n);
-}
-
-void simple_output::polygon(const position *v, int n,
- const line_type &lt, double fill)
-{
- if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
- if (get_last_filled() == 0)
- set_fill(fill);
- simple_polygon(1, v, n);
- }
- if (lt.type == line_type::solid && driver_extension_flag) {
- line_thickness(lt.thickness);
- simple_polygon(0, v, n);
- }
- else if (lt.type != line_type::invisible) {
- line_thickness(lt.thickness);
- line(v[n - 1], v, n, lt);
- }
-}
-
-void simple_output::circle(const position &cent, double rad,
- const line_type &lt, double fill)
-{
- if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
- if (get_last_filled() == 0)
- set_fill(fill);
- simple_circle(1, cent, rad);
- }
- line_thickness(lt.thickness);
- switch (lt.type) {
- case line_type::invisible:
- break;
- case line_type::dashed:
- dashed_circle(cent, rad, lt);
- break;
- case line_type::dotted:
- dotted_circle(cent, rad, lt);
- break;
- case line_type::solid:
- simple_circle(0, cent, rad);
- break;
- default:
- assert(0);
- }
-}
-
-void simple_output::ellipse(const position &cent, const distance &dim,
- const line_type &lt, double fill)
-{
- if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
- if (get_last_filled() == 0)
- set_fill(fill);
- simple_ellipse(1, cent, dim);
- }
- if (lt.type != line_type::invisible)
- line_thickness(lt.thickness);
- switch (lt.type) {
- case line_type::invisible:
- break;
- case line_type::dotted:
- dotted_ellipse(cent, dim, lt);
- break;
- case line_type::dashed:
- dashed_ellipse(cent, dim, lt);
- break;
- case line_type::solid:
- simple_ellipse(0, cent, dim);
- break;
- default:
- assert(0);
- }
-}
-
-class troff_output : public simple_output {
- const char *last_filename;
- position upper_left;
- double height;
- double scale;
- double last_line_thickness;
- double last_fill;
- char *last_filled; // color
- char *last_outlined; // color
-public:
- troff_output();
- ~troff_output();
- void start_picture(double, const position &ll, const position &ur);
- void finish_picture();
- void text(const position &, text_piece *, int, double);
- void dot(const position &, const line_type &);
- void command(const char *, const char *, int);
- void set_location(const char *, int);
- void simple_line(const position &, const position &);
- void simple_spline(const position &, const position *, int n);
- void simple_arc(const position &, const position &, const position &);
- void simple_circle(int, const position &, double rad);
- void simple_ellipse(int, const position &, const distance &);
- void simple_polygon(int, const position *, int);
- void line_thickness(double p);
- void set_fill(double);
- void set_color(char *, char *);
- void reset_color();
- char *get_last_filled();
- char *get_outline_color();
- position transform(const position &);
-};
-
-output *make_troff_output()
-{
- return new troff_output;
-}
-
-troff_output::troff_output()
-: last_filename(0), last_line_thickness(BAD_THICKNESS),
- last_fill(-1.0), last_filled(0), last_outlined(0)
-{
-}
-
-troff_output::~troff_output()
-{
-}
-
-inline position troff_output::transform(const position &pos)
-{
- return position((pos.x - upper_left.x)/scale,
- (upper_left.y - pos.y)/scale);
-}
-
-#define FILL_REG "00"
-
-// If this register > 0, then pic will generate \X'ps: ...' commands
-// if the aligned attribute is used.
-#define GROPS_REG "0p"
-
-// If this register is defined, geqn won't produce `\x's.
-#define EQN_NO_EXTRA_SPACE_REG "0x"
-
-void troff_output::start_picture(double sc,
- const position &ll, const position &ur)
-{
- upper_left.x = ll.x;
- upper_left.y = ur.y;
- scale = compute_scale(sc, ll, ur);
- height = (ur.y - ll.y)/scale;
- double width = (ur.x - ll.x)/scale;
- printf(".PS %.3fi %.3fi", height, width);
- if (args)
- printf(" %s\n", args);
- else
- putchar('\n');
- printf(".\\\" %g %g %g %g\n", ll.x, ll.y, ur.x, ur.y);
- printf(".\\\" %.3fi %.3fi %.3fi %.3fi\n", 0.0, height, width, 0.0);
- printf(".nr " FILL_REG " \\n(.u\n.nf\n");
- printf(".nr " EQN_NO_EXTRA_SPACE_REG " 1\n");
- // This guarantees that if the picture is used in a diversion it will
- // have the right width.
- printf("\\h'%.3fi'\n.sp -1\n", width);
-}
-
-void troff_output::finish_picture()
-{
- line_thickness(BAD_THICKNESS);
- last_fill = -1.0; // force it to be reset for each picture
- reset_color();
- if (!flyback_flag)
- printf(".sp %.3fi+1\n", height);
- printf(".if \\n(" FILL_REG " .fi\n");
- printf(".br\n");
- printf(".nr " EQN_NO_EXTRA_SPACE_REG " 0\n");
- // this is a little gross
- set_location(current_filename, current_lineno);
- fputs(flyback_flag ? ".PF\n" : ".PE\n", stdout);
-}
-
-void troff_output::command(const char *s,
- const char *filename, int lineno)
-{
- if (filename != 0)
- set_location(filename, lineno);
- fputs(s, stdout);
- putchar('\n');
-}
-
-void troff_output::simple_circle(int filled, const position &cent, double rad)
-{
- position c = transform(cent);
- printf("\\h'%.3fi'"
- "\\v'%.3fi'"
- "\\D'%c %.3fi'"
- "\n.sp -1\n",
- c.x - rad/scale,
- c.y,
- (filled ? 'C' : 'c'),
- rad*2.0/scale);
-}
-
-void troff_output::simple_ellipse(int filled, const position &cent,
- const distance &dim)
-{
- position c = transform(cent);
- printf("\\h'%.3fi'"
- "\\v'%.3fi'"
- "\\D'%c %.3fi %.3fi'"
- "\n.sp -1\n",
- c.x - dim.x/(2.0*scale),
- c.y,
- (filled ? 'E' : 'e'),
- dim.x/scale, dim.y/scale);
-}
-
-void troff_output::simple_arc(const position &start, const distance &cent,
- const distance &end)
-{
- position s = transform(start);
- position c = transform(cent);
- distance cv = c - s;
- distance ev = transform(end) - c;
- printf("\\h'%.3fi'"
- "\\v'%.3fi'"
- "\\D'a %.3fi %.3fi %.3fi %.3fi'"
- "\n.sp -1\n",
- s.x, s.y, cv.x, cv.y, ev.x, ev.y);
-}
-
-void troff_output::simple_line(const position &start, const position &end)
-{
- position s = transform(start);
- distance ev = transform(end) - s;
- printf("\\h'%.3fi'"
- "\\v'%.3fi'"
- "\\D'l %.3fi %.3fi'"
- "\n.sp -1\n",
- s.x, s.y, ev.x, ev.y);
-}
-
-void troff_output::simple_spline(const position &start,
- const position *v, int n)
-{
- position pos = transform(start);
- printf("\\h'%.3fi'"
- "\\v'%.3fi'",
- pos.x, pos.y);
- fputs("\\D'~ ", stdout);
- for (int i = 0; i < n; i++) {
- position temp = transform(v[i]);
- distance d = temp - pos;
- pos = temp;
- if (i != 0)
- putchar(' ');
- printf("%.3fi %.3fi", d.x, d.y);
- }
- printf("'\n.sp -1\n");
-}
-
-// a solid polygon
-
-void troff_output::simple_polygon(int filled, const position *v, int n)
-{
- position pos = transform(v[0]);
- printf("\\h'%.3fi'"
- "\\v'%.3fi'",
- pos.x, pos.y);
- printf("\\D'%c ", (filled ? 'P' : 'p'));
- for (int i = 1; i < n; i++) {
- position temp = transform(v[i]);
- distance d = temp - pos;
- pos = temp;
- if (i != 1)
- putchar(' ');
- printf("%.3fi %.3fi", d.x, d.y);
- }
- printf("'\n.sp -1\n");
-}
-
-const double TEXT_AXIS = 0.22; // in ems
-
-static const char *choose_delimiter(const char *text)
-{
- if (strchr(text, '\'') == 0)
- return "'";
- else
- return "\\(ts";
-}
-
-void troff_output::text(const position &center, text_piece *v, int n,
- double ang)
-{
- line_thickness(BAD_THICKNESS); // the text might use lines (eg in equations)
- int rotate_flag = 0;
- if (driver_extension_flag && ang != 0.0) {
- rotate_flag = 1;
- position c = transform(center);
- printf(".if \\n(" GROPS_REG " \\{\\\n"
- "\\h'%.3fi'"
- "\\v'%.3fi'"
- "\\X'ps: exec gsave currentpoint 2 copy translate %.4f rotate neg exch neg exch translate'"
- "\n.sp -1\n"
- ".\\}\n",
- c.x, c.y, -ang*180.0/M_PI);
- }
- for (int i = 0; i < n; i++)
- if (v[i].text != 0 && *v[i].text != '\0') {
- position c = transform(center);
- if (v[i].filename != 0)
- set_location(v[i].filename, v[i].lineno);
- printf("\\h'%.3fi", c.x);
- const char *delim = choose_delimiter(v[i].text);
- if (v[i].adj.h == RIGHT_ADJUST)
- printf("-\\w%s%s%su", delim, v[i].text, delim);
- else if (v[i].adj.h != LEFT_ADJUST)
- printf("-(\\w%s%s%su/2u)", delim, v[i].text, delim);
- putchar('\'');
- printf("\\v'%.3fi-(%dv/2u)+%dv+%.2fm",
- c.y,
- n - 1,
- i,
- TEXT_AXIS);
- if (v[i].adj.v == ABOVE_ADJUST)
- printf("-.5v");
- else if (v[i].adj.v == BELOW_ADJUST)
- printf("+.5v");
- putchar('\'');
- fputs(v[i].text, stdout);
- fputs("\n.sp -1\n", stdout);
- }
- if (rotate_flag)
- printf(".if '\\*(.T'ps' \\{\\\n"
- "\\X'ps: exec grestore'\n.sp -1\n"
- ".\\}\n");
-}
-
-void troff_output::line_thickness(double p)
-{
- if (p < 0.0)
- p = RELATIVE_THICKNESS;
- if (driver_extension_flag && p != last_line_thickness) {
- printf("\\D't %.3fp'\\h'%.3fp'\n.sp -1\n", p, -p);
- last_line_thickness = p;
- }
-}
-
-void troff_output::set_fill(double f)
-{
- if (driver_extension_flag && f != last_fill) {
- // \D'Fg ...' emits a node only in compatibility mode,
- // thus we add a dummy node
- printf("\\&\\D'Fg %.3f'\n.sp -1\n", 1.0 - f);
- last_fill = f;
- }
- if (last_filled) {
- free(last_filled);
- last_filled = 0;
- printf(".fcolor\n");
- }
-}
-
-void troff_output::set_color(char *color_fill, char *color_outlined)
-{
- if (driver_extension_flag) {
- if (last_filled || last_outlined) {
- reset_color();
- }
- // .gcolor and .fcolor emit a node in compatibility mode only,
- // but that won't work anyway
- if (color_fill) {
- printf(".fcolor %s\n", color_fill);
- last_filled = strsave(color_fill);
- }
- if (color_outlined) {
- printf(".gcolor %s\n", color_outlined);
- last_outlined = strsave(color_outlined);
- }
- }
-}
-
-void troff_output::reset_color()
-{
- if (driver_extension_flag) {
- if (last_filled) {
- printf(".fcolor\n");
- a_delete last_filled;
- last_filled = 0;
- }
- if (last_outlined) {
- printf(".gcolor\n");
- a_delete last_outlined;
- last_outlined = 0;
- }
- }
-}
-
-char *troff_output::get_last_filled()
-{
- return last_filled;
-}
-
-char *troff_output::get_outline_color()
-{
- return last_outlined;
-}
-
-const double DOT_AXIS = .044;
-
-void troff_output::dot(const position &cent, const line_type &lt)
-{
- if (driver_extension_flag) {
- line_thickness(lt.thickness);
- simple_line(cent, cent);
- }
- else {
- position c = transform(cent);
- printf("\\h'%.3fi-(\\w'.'u/2u)'"
- "\\v'%.3fi+%.2fm'"
- ".\n.sp -1\n",
- c.x,
- c.y,
- DOT_AXIS);
- }
-}
-
-void troff_output::set_location(const char *s, int n)
-{
- if (last_filename != 0 && strcmp(s, last_filename) == 0)
- printf(".lf %d\n", n);
- else {
- printf(".lf %d %s\n", n, s);
- last_filename = s;
- }
-}
diff --git a/contrib/groff/src/preproc/refer/Makefile.sub b/contrib/groff/src/preproc/refer/Makefile.sub
deleted file mode 100644
index 2e22a3a77909..000000000000
--- a/contrib/groff/src/preproc/refer/Makefile.sub
+++ /dev/null
@@ -1,23 +0,0 @@
-PROG=refer$(EXEEXT)
-MAN1=refer.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- command.$(OBJEXT) \
- label.$(OBJEXT) \
- ref.$(OBJEXT) \
- refer.$(OBJEXT) \
- token.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/command.cpp \
- $(srcdir)/ref.cpp \
- $(srcdir)/refer.cpp \
- $(srcdir)/token.cpp
-HDRS=\
- $(srcdir)/refer.h \
- $(srcdir)/token.h \
- $(srcdir)/command.h \
- $(srcdir)/ref.h
-GRAM=$(srcdir)/label.y
-YTABC=label.cpp
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/refer/TODO b/contrib/groff/src/preproc/refer/TODO
deleted file mode 100644
index 5bbd9bff1e8c..000000000000
--- a/contrib/groff/src/preproc/refer/TODO
+++ /dev/null
@@ -1,124 +0,0 @@
-inline references
-
-Some sort of macro/subroutine that can cover several references.
-
-move-punctuation should ignore multiple punctuation characters.
-
-Make the index files machine independent.
-
-Allow search keys to be negated (with !) to indicate that the
-reference should not contain the key. Ignore negated keys during
-indexed searching.
-
-Provide an option with lkbib and lookbib that prints the location
-(filename, position) of each reference. Need to map filename_id's
-back to filenames.
-
-Rename join-authors to join-fields. Have a separate label-join-fields
-command used by @ and #.
-
-Have some sort of quantifier: eg $.n#A means execute `$.n' for each
-instance of an A field, setting $ to that field, and then join the
-results using the join-authors command.
-
-no-text-in-bracket command which says not to allow post_text and
-pre_text when the [] flags has been given. Useful for superscripted
-footnotes.
-
-Make it possible to translate - to \(en in page ranges.
-
-Trim eign a bit.
-
-In indexed searching discard all numeric keys except dates.
-
-Allow `\ ' to separate article from first word.
-
-%also
-
-Option automatically to supply [] flags in every reference.
-
-See if we can avoid requiring a comma before jr. and so on
-in find_last_name().
-
-Cache sortified authors in authors string during tentative evaluation of
-label specification.
-
-Possibly don't allow * and % expressions in the first part of ?:, | or
-& expressions.
-
-Handle better the case where <> occurs inside functions and in the
-first operand of ~. Or perhaps implement <> using some magic character
-in the string.
-
-Should special treatment be given to lines beginning with . in
-references? (Unix refer seems to treat them like `%').
-
-Add global flag to control whether all files should be stat-ed after
-loading, and whether they should be stat-ed before each search.
-Perhaps make this dependent on the number of files there are.
-
-Option to truncate keys to truncate_len in linear searching.
-
-Allow multiple -f options in indxbib.
-
-In indxbib, possibly store common words rather than common words
-filename. In this case store only words that are actually present in
-the file.
-
-Perhaps we should put out an obnoxious copyright message when lookbib
-starts up.
-
-Provide an option that writes a file containing just the references
-actually used. Useful if you want to distribute a document.
-
-Have a magic token such that
-%A <sort stuff><magic token><print stuff>
-will print as though it were
-%A <print stuff>
-but sort as though it were
-%A <sort stuff>
-Do we need this if we can specify author alternatives for sorting?
-No, provided we have separate alternatives for @.
-
-In consider_authors when last names are ambiguous we might be able to
-use just the first name and not Jr. bit. Or we might be able to
-abbreviate the author.
-
-It ought to be possible to specify an alternative field to sort on
-instead of date. (ie if there's a field giving the type of document --
-these references should sort after any years)
-
-Provide a way to execute a command using a command-line option.
-
-Option to set the label-spec as a command-line option (-L).
-
-Command to to specify which fields can occur multiple times:
-multiple AE
-
-Command to specify how various fields sort:
-aort-as-name A
-sort-as-date D
-sort-as-title T
-sort-as-other O
-
-Command to specify which fields are author fields:
-# if we don't have A use field Q
-author-fields AQ
-
-Commands to set properties of tokens.
-sortify-token \(ae ae
-uppercase-token \[ae] \[AE]
-
-Command to set the names of months:
-months january february march april may ...
-
-Perhaps provide some sort of macro capability:
-# perhaps a macro capability
-defmacro foo
-annotation-field $1
-endef
-
-Command to control strings used in capitalization
-capitalize-start \s+2
-capitalize-end \s-2
-(perhaps make these arguments to the capitalize command.)
diff --git a/contrib/groff/src/preproc/refer/command.cpp b/contrib/groff/src/preproc/refer/command.cpp
deleted file mode 100644
index 441f9534e154..000000000000
--- a/contrib/groff/src/preproc/refer/command.cpp
+++ /dev/null
@@ -1,809 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "refer.h"
-#include "refid.h"
-#include "search.h"
-#include "command.h"
-
-cset cs_field_name = csalpha;
-
-class input_item {
- input_item *next;
- char *filename;
- int first_lineno;
- string buffer;
- const char *ptr;
- const char *end;
-public:
- input_item(string &, const char *, int = 1);
- ~input_item();
- int get_char();
- int peek_char();
- void skip_char();
- int get_location(const char **, int *);
-
- friend class input_stack;
-};
-
-input_item::input_item(string &s, const char *fn, int ln)
-: filename(strsave(fn)), first_lineno(ln)
-{
- buffer.move(s);
- ptr = buffer.contents();
- end = ptr + buffer.length();
-}
-
-input_item::~input_item()
-{
- a_delete filename;
-}
-
-inline int input_item::peek_char()
-{
- if (ptr >= end)
- return EOF;
- else
- return (unsigned char)*ptr;
-}
-
-inline int input_item::get_char()
-{
- if (ptr >= end)
- return EOF;
- else
- return (unsigned char)*ptr++;
-}
-
-inline void input_item::skip_char()
-{
- ptr++;
-}
-
-int input_item::get_location(const char **filenamep, int *linenop)
-{
- *filenamep = filename;
- if (ptr == buffer.contents())
- *linenop = first_lineno;
- else {
- int ln = first_lineno;
- const char *e = ptr - 1;
- for (const char *p = buffer.contents(); p < e; p++)
- if (*p == '\n')
- ln++;
- *linenop = ln;
- }
- return 1;
-}
-
-class input_stack {
- static input_item *top;
-public:
- static void init();
- static int get_char();
- static int peek_char();
- static void skip_char() { top->skip_char(); }
- static void push_file(const char *);
- static void push_string(string &, const char *, int);
- static void error(const char *format,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-};
-
-input_item *input_stack::top = 0;
-
-void input_stack::init()
-{
- while (top) {
- input_item *tem = top;
- top = top->next;
- delete tem;
- }
-}
-
-int input_stack::get_char()
-{
- while (top) {
- int c = top->get_char();
- if (c >= 0)
- return c;
- input_item *tem = top;
- top = top->next;
- delete tem;
- }
- return -1;
-}
-
-int input_stack::peek_char()
-{
- while (top) {
- int c = top->peek_char();
- if (c >= 0)
- return c;
- input_item *tem = top;
- top = top->next;
- delete tem;
- }
- return -1;
-}
-
-void input_stack::push_file(const char *fn)
-{
- FILE *fp;
- if (strcmp(fn, "-") == 0) {
- fp = stdin;
- fn = "<standard input>";
- }
- else {
- errno = 0;
- fp = fopen(fn, "r");
- if (fp == 0) {
- error("can't open `%1': %2", fn, strerror(errno));
- return;
- }
- }
- string buf;
- int bol = 1;
- int lineno = 1;
- for (;;) {
- int c = getc(fp);
- if (bol && c == '.') {
- // replace lines beginning with .R1 or .R2 with a blank line
- c = getc(fp);
- if (c == 'R') {
- c = getc(fp);
- if (c == '1' || c == '2') {
- int cc = c;
- c = getc(fp);
- if (compatible_flag || c == ' ' || c == '\n' || c == EOF) {
- while (c != '\n' && c != EOF)
- c = getc(fp);
- }
- else {
- buf += '.';
- buf += 'R';
- buf += cc;
- }
- }
- else {
- buf += '.';
- buf += 'R';
- }
- }
- else
- buf += '.';
- }
- if (c == EOF)
- break;
- if (invalid_input_char(c))
- error_with_file_and_line(fn, lineno,
- "invalid input character code %1", int(c));
- else {
- buf += c;
- if (c == '\n') {
- bol = 1;
- lineno++;
- }
- else
- bol = 0;
- }
- }
- if (fp != stdin)
- fclose(fp);
- if (buf.length() > 0 && buf[buf.length() - 1] != '\n')
- buf += '\n';
- input_item *it = new input_item(buf, fn);
- it->next = top;
- top = it;
-}
-
-void input_stack::push_string(string &s, const char *filename, int lineno)
-{
- input_item *it = new input_item(s, filename, lineno);
- it->next = top;
- top = it;
-}
-
-void input_stack::error(const char *format, const errarg &arg1,
- const errarg &arg2, const errarg &arg3)
-{
- const char *filename;
- int lineno;
- for (input_item *it = top; it; it = it->next)
- if (it->get_location(&filename, &lineno)) {
- error_with_file_and_line(filename, lineno, format, arg1, arg2, arg3);
- return;
- }
- ::error(format, arg1, arg2, arg3);
-}
-
-void command_error(const char *format, const errarg &arg1,
- const errarg &arg2, const errarg &arg3)
-{
- input_stack::error(format, arg1, arg2, arg3);
-}
-
-// # not recognized in ""
-// \<newline> is recognized in ""
-// # does not conceal newline
-// if missing closing quote, word extends to end of line
-// no special treatment of \ other than before newline
-// \<newline> not recognized after #
-// ; allowed as alternative to newline
-// ; not recognized in ""
-// don't clear word_buffer; just append on
-// return -1 for EOF, 0 for newline, 1 for word
-
-int get_word(string &word_buffer)
-{
- int c = input_stack::get_char();
- for (;;) {
- if (c == '#') {
- do {
- c = input_stack::get_char();
- } while (c != '\n' && c != EOF);
- break;
- }
- if (c == '\\' && input_stack::peek_char() == '\n')
- input_stack::skip_char();
- else if (c != ' ' && c != '\t')
- break;
- c = input_stack::get_char();
- }
- if (c == EOF)
- return -1;
- if (c == '\n' || c == ';')
- return 0;
- if (c == '"') {
- for (;;) {
- c = input_stack::peek_char();
- if (c == EOF || c == '\n')
- break;
- input_stack::skip_char();
- if (c == '"') {
- int d = input_stack::peek_char();
- if (d == '"')
- input_stack::skip_char();
- else
- break;
- }
- else if (c == '\\') {
- int d = input_stack::peek_char();
- if (d == '\n')
- input_stack::skip_char();
- else
- word_buffer += '\\';
- }
- else
- word_buffer += c;
- }
- return 1;
- }
- word_buffer += c;
- for (;;) {
- c = input_stack::peek_char();
- if (c == ' ' || c == '\t' || c == '\n' || c == '#' || c == ';')
- break;
- input_stack::skip_char();
- if (c == '\\') {
- int d = input_stack::peek_char();
- if (d == '\n')
- input_stack::skip_char();
- else
- word_buffer += '\\';
- }
- else
- word_buffer += c;
- }
- return 1;
-}
-
-union argument {
- const char *s;
- int n;
-};
-
-// This is for debugging.
-
-static void echo_command(int argc, argument *argv)
-{
- for (int i = 0; i < argc; i++)
- fprintf(stderr, "%s\n", argv[i].s);
-}
-
-static void include_command(int argc, argument *argv)
-{
- assert(argc == 1);
- input_stack::push_file(argv[0].s);
-}
-
-static void capitalize_command(int argc, argument *argv)
-{
- if (argc > 0)
- capitalize_fields = argv[0].s;
- else
- capitalize_fields.clear();
-}
-
-static void accumulate_command(int, argument *)
-{
- accumulate = 1;
-}
-
-static void no_accumulate_command(int, argument *)
-{
- accumulate = 0;
-}
-
-static void move_punctuation_command(int, argument *)
-{
- move_punctuation = 1;
-}
-
-static void no_move_punctuation_command(int, argument *)
-{
- move_punctuation = 0;
-}
-
-static void sort_command(int argc, argument *argv)
-{
- if (argc == 0)
- sort_fields = "AD";
- else
- sort_fields = argv[0].s;
- accumulate = 1;
-}
-
-static void no_sort_command(int, argument *)
-{
- sort_fields.clear();
-}
-
-static void articles_command(int argc, argument *argv)
-{
- articles.clear();
- int i;
- for (i = 0; i < argc; i++) {
- articles += argv[i].s;
- articles += '\0';
- }
- int len = articles.length();
- for (i = 0; i < len; i++)
- articles[i] = cmlower(articles[i]);
-}
-
-static void database_command(int argc, argument *argv)
-{
- for (int i = 0; i < argc; i++)
- database_list.add_file(argv[i].s);
-}
-
-static void default_database_command(int, argument *)
-{
- search_default = 1;
-}
-
-static void no_default_database_command(int, argument *)
-{
- search_default = 0;
-}
-
-static void bibliography_command(int argc, argument *argv)
-{
- const char *saved_filename = current_filename;
- int saved_lineno = current_lineno;
- int saved_label_in_text = label_in_text;
- label_in_text = 0;
- if (!accumulate)
- fputs(".]<\n", stdout);
- for (int i = 0; i < argc; i++)
- do_bib(argv[i].s);
- if (accumulate)
- output_references();
- else
- fputs(".]>\n", stdout);
- current_filename = saved_filename;
- current_lineno = saved_lineno;
- label_in_text = saved_label_in_text;
-}
-
-static void annotate_command(int argc, argument *argv)
-{
- if (argc > 0)
- annotation_field = argv[0].s[0];
- else
- annotation_field = 'X';
- if (argc == 2)
- annotation_macro = argv[1].s;
- else
- annotation_macro = "AP";
-}
-
-static void no_annotate_command(int, argument *)
-{
- annotation_macro.clear();
- annotation_field = -1;
-}
-
-static void reverse_command(int, argument *argv)
-{
- reverse_fields = argv[0].s;
-}
-
-static void no_reverse_command(int, argument *)
-{
- reverse_fields.clear();
-}
-
-static void abbreviate_command(int argc, argument *argv)
-{
- abbreviate_fields = argv[0].s;
- period_before_initial = argc > 1 ? argv[1].s : ". ";
- period_before_last_name = argc > 2 ? argv[2].s : ". ";
- period_before_other = argc > 3 ? argv[3].s : ". ";
- period_before_hyphen = argc > 4 ? argv[4].s : ".";
-}
-
-static void no_abbreviate_command(int, argument *)
-{
- abbreviate_fields.clear();
-}
-
-string search_ignore_fields;
-
-static void search_ignore_command(int argc, argument *argv)
-{
- if (argc > 0)
- search_ignore_fields = argv[0].s;
- else
- search_ignore_fields = "XYZ";
- search_ignore_fields += '\0';
- linear_ignore_fields = search_ignore_fields.contents();
-}
-
-static void no_search_ignore_command(int, argument *)
-{
- linear_ignore_fields = "";
-}
-
-static void search_truncate_command(int argc, argument *argv)
-{
- if (argc > 0)
- linear_truncate_len = argv[0].n;
- else
- linear_truncate_len = 6;
-}
-
-static void no_search_truncate_command(int, argument *)
-{
- linear_truncate_len = -1;
-}
-
-static void discard_command(int argc, argument *argv)
-{
- if (argc == 0)
- discard_fields = "XYZ";
- else
- discard_fields = argv[0].s;
- accumulate = 1;
-}
-
-static void no_discard_command(int, argument *)
-{
- discard_fields.clear();
-}
-
-static void label_command(int, argument *argv)
-{
- set_label_spec(argv[0].s);
-}
-
-static void abbreviate_label_ranges_command(int argc, argument *argv)
-{
- abbreviate_label_ranges = 1;
- label_range_indicator = argc > 0 ? argv[0].s : "-";
-}
-
-static void no_abbreviate_label_ranges_command(int, argument *)
-{
- abbreviate_label_ranges = 0;
-}
-
-static void label_in_reference_command(int, argument *)
-{
- label_in_reference = 1;
-}
-
-static void no_label_in_reference_command(int, argument *)
-{
- label_in_reference = 0;
-}
-
-static void label_in_text_command(int, argument *)
-{
- label_in_text = 1;
-}
-
-static void no_label_in_text_command(int, argument *)
-{
- label_in_text = 0;
-}
-
-static void sort_adjacent_labels_command(int, argument *)
-{
- sort_adjacent_labels = 1;
-}
-
-static void no_sort_adjacent_labels_command(int, argument *)
-{
- sort_adjacent_labels = 0;
-}
-
-static void date_as_label_command(int argc, argument *argv)
-{
- if (set_date_label_spec(argc > 0 ? argv[0].s : "D%a*"))
- date_as_label = 1;
-}
-
-static void no_date_as_label_command(int, argument *)
-{
- date_as_label = 0;
-}
-
-static void short_label_command(int, argument *argv)
-{
- if (set_short_label_spec(argv[0].s))
- short_label_flag = 1;
-}
-
-static void no_short_label_command(int, argument *)
-{
- short_label_flag = 0;
-}
-
-static void compatible_command(int, argument *)
-{
- compatible_flag = 1;
-}
-
-static void no_compatible_command(int, argument *)
-{
- compatible_flag = 0;
-}
-
-static void join_authors_command(int argc, argument *argv)
-{
- join_authors_exactly_two = argv[0].s;
- join_authors_default = argc > 1 ? argv[1].s : argv[0].s;
- join_authors_last_two = argc == 3 ? argv[2].s : argv[0].s;
-}
-
-static void bracket_label_command(int, argument *argv)
-{
- pre_label = argv[0].s;
- post_label = argv[1].s;
- sep_label = argv[2].s;
-}
-
-static void separate_label_second_parts_command(int, argument *argv)
-{
- separate_label_second_parts = argv[0].s;
-}
-
-static void et_al_command(int argc, argument *argv)
-{
- et_al = argv[0].s;
- et_al_min_elide = argv[1].n;
- if (et_al_min_elide < 1)
- et_al_min_elide = 1;
- et_al_min_total = argc >= 3 ? argv[2].n : 0;
-}
-
-static void no_et_al_command(int, argument *)
-{
- et_al.clear();
- et_al_min_elide = 0;
-}
-
-typedef void (*command_t)(int, argument *);
-
-/* arg_types is a string describing the numbers and types of arguments.
-s means a string, i means an integer, f is a list of fields, F is
-a single field,
-? means that the previous argument is optional, * means that the
-previous argument can occur any number of times. */
-
-struct S {
- const char *name;
- command_t func;
- const char *arg_types;
-} command_table[] = {
- { "include", include_command, "s" },
- { "echo", echo_command, "s*" },
- { "capitalize", capitalize_command, "f?" },
- { "accumulate", accumulate_command, "" },
- { "no-accumulate", no_accumulate_command, "" },
- { "move-punctuation", move_punctuation_command, "" },
- { "no-move-punctuation", no_move_punctuation_command, "" },
- { "sort", sort_command, "s?" },
- { "no-sort", no_sort_command, "" },
- { "articles", articles_command, "s*" },
- { "database", database_command, "ss*" },
- { "default-database", default_database_command, "" },
- { "no-default-database", no_default_database_command, "" },
- { "bibliography", bibliography_command, "ss*" },
- { "annotate", annotate_command, "F?s?" },
- { "no-annotate", no_annotate_command, "" },
- { "reverse", reverse_command, "s" },
- { "no-reverse", no_reverse_command, "" },
- { "abbreviate", abbreviate_command, "ss?s?s?s?" },
- { "no-abbreviate", no_abbreviate_command, "" },
- { "search-ignore", search_ignore_command, "f?" },
- { "no-search-ignore", no_search_ignore_command, "" },
- { "search-truncate", search_truncate_command, "i?" },
- { "no-search-truncate", no_search_truncate_command, "" },
- { "discard", discard_command, "f?" },
- { "no-discard", no_discard_command, "" },
- { "label", label_command, "s" },
- { "abbreviate-label-ranges", abbreviate_label_ranges_command, "s?" },
- { "no-abbreviate-label-ranges", no_abbreviate_label_ranges_command, "" },
- { "label-in-reference", label_in_reference_command, "" },
- { "no-label-in-reference", no_label_in_reference_command, "" },
- { "label-in-text", label_in_text_command, "" },
- { "no-label-in-text", no_label_in_text_command, "" },
- { "sort-adjacent-labels", sort_adjacent_labels_command, "" },
- { "no-sort-adjacent-labels", no_sort_adjacent_labels_command, "" },
- { "date-as-label", date_as_label_command, "s?" },
- { "no-date-as-label", no_date_as_label_command, "" },
- { "short-label", short_label_command, "s" },
- { "no-short-label", no_short_label_command, "" },
- { "compatible", compatible_command, "" },
- { "no-compatible", no_compatible_command, "" },
- { "join-authors", join_authors_command, "sss?" },
- { "bracket-label", bracket_label_command, "sss" },
- { "separate-label-second-parts", separate_label_second_parts_command, "s" },
- { "et-al", et_al_command, "sii?" },
- { "no-et-al", no_et_al_command, "" },
-};
-
-static int check_args(const char *types, const char *name,
- int argc, argument *argv)
-{
- int argno = 0;
- while (*types) {
- if (argc == 0) {
- if (types[1] == '?')
- break;
- else if (types[1] == '*') {
- assert(types[2] == '\0');
- break;
- }
- else {
- input_stack::error("missing argument for command `%1'", name);
- return 0;
- }
- }
- switch (*types) {
- case 's':
- break;
- case 'i':
- {
- char *ptr;
- long n = strtol(argv->s, &ptr, 10);
- if ((n == 0 && ptr == argv->s)
- || *ptr != '\0') {
- input_stack::error("argument %1 for command `%2' must be an integer",
- argno + 1, name);
- return 0;
- }
- argv->n = (int)n;
- break;
- }
- case 'f':
- {
- for (const char *ptr = argv->s; *ptr != '\0'; ptr++)
- if (!cs_field_name(*ptr)) {
- input_stack::error("argument %1 for command `%2' must be a list of fields",
- argno + 1, name);
- return 0;
- }
- break;
- }
- case 'F':
- if (argv->s[0] == '\0' || argv->s[1] != '\0'
- || !cs_field_name(argv->s[0])) {
- input_stack::error("argument %1 for command `%2' must be a field name",
- argno + 1, name);
- return 0;
- }
- break;
- default:
- assert(0);
- }
- if (types[1] == '?')
- types += 2;
- else if (types[1] != '*')
- types += 1;
- --argc;
- ++argv;
- ++argno;
- }
- if (argc > 0) {
- input_stack::error("too many arguments for command `%1'", name);
- return 0;
- }
- return 1;
-}
-
-static void execute_command(const char *name, int argc, argument *argv)
-{
- for (unsigned int i = 0;
- i < sizeof(command_table)/sizeof(command_table[0]); i++)
- if (strcmp(name, command_table[i].name) == 0) {
- if (check_args(command_table[i].arg_types, name, argc, argv))
- (*command_table[i].func)(argc, argv);
- return;
- }
- input_stack::error("unknown command `%1'", name);
-}
-
-static void command_loop()
-{
- string command;
- for (;;) {
- command.clear();
- int res = get_word(command);
- if (res != 1) {
- if (res == 0)
- continue;
- break;
- }
- int argc = 0;
- command += '\0';
- while ((res = get_word(command)) == 1) {
- argc++;
- command += '\0';
- }
- argument *argv = new argument[argc];
- const char *ptr = command.contents();
- for (int i = 0; i < argc; i++)
- argv[i].s = ptr = strchr(ptr, '\0') + 1;
- execute_command(command.contents(), argc, argv);
- a_delete argv;
- if (res == -1)
- break;
- }
-}
-
-void process_commands(const char *file)
-{
- input_stack::init();
- input_stack::push_file(file);
- command_loop();
-}
-
-void process_commands(string &s, const char *file, int lineno)
-{
- input_stack::init();
- input_stack::push_string(s, file, lineno);
- command_loop();
-}
diff --git a/contrib/groff/src/preproc/refer/command.h b/contrib/groff/src/preproc/refer/command.h
deleted file mode 100644
index f0472ac8b6a7..000000000000
--- a/contrib/groff/src/preproc/refer/command.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-void process_commands(const char *file);
-void process_commands(string &s, const char *file, int lineno);
-
-extern int accumulate;
-extern int move_punctuation;
-extern int search_default;
-extern search_list database_list;
-extern int label_in_text;
-extern int label_in_reference;
-extern int sort_adjacent_labels;
-extern string pre_label;
-extern string post_label;
-extern string sep_label;
-
-extern void do_bib(const char *);
-extern void output_references();
diff --git a/contrib/groff/src/preproc/refer/label.y b/contrib/groff/src/preproc/refer/label.y
deleted file mode 100644
index d76f95ef3c33..000000000000
--- a/contrib/groff/src/preproc/refer/label.y
+++ /dev/null
@@ -1,1193 +0,0 @@
-/* -*- C++ -*-
- Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-%{
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-int yylex();
-void yyerror(const char *);
-int yyparse();
-
-static const char *format_serial(char c, int n);
-
-struct label_info {
- int start;
- int length;
- int count;
- int total;
- label_info(const string &);
-};
-
-label_info *lookup_label(const string &label);
-
-struct expression {
- enum {
- // Does the tentative label depend on the reference?
- CONTAINS_VARIABLE = 01,
- CONTAINS_STAR = 02,
- CONTAINS_FORMAT = 04,
- CONTAINS_AT = 010
- };
- virtual ~expression() { }
- virtual void evaluate(int, const reference &, string &,
- substring_position &) = 0;
- virtual unsigned analyze() { return 0; }
-};
-
-class at_expr : public expression {
-public:
- at_expr() { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
-};
-
-class format_expr : public expression {
- char type;
- int width;
- int first_number;
-public:
- format_expr(char c, int w = 0, int f = 1)
- : type(c), width(w), first_number(f) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_FORMAT; }
-};
-
-class field_expr : public expression {
- int number;
- char name;
-public:
- field_expr(char nm, int num) : number(num), name(nm) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_VARIABLE; }
-};
-
-class literal_expr : public expression {
- string s;
-public:
- literal_expr(const char *ptr, int len) : s(ptr, len) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class unary_expr : public expression {
-protected:
- expression *expr;
-public:
- unary_expr(expression *e) : expr(e) { }
- ~unary_expr() { delete expr; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() { return expr ? expr->analyze() : 0; }
-};
-
-// This caches the analysis of an expression.
-
-class analyzed_expr : public unary_expr {
- unsigned flags;
-public:
- analyzed_expr(expression *);
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return flags; }
-};
-
-class star_expr : public unary_expr {
-public:
- star_expr(expression *e) : unary_expr(e) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() {
- return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
- | CONTAINS_STAR);
- }
-};
-
-typedef void map_func(const char *, const char *, string &);
-
-class map_expr : public unary_expr {
- map_func *func;
-public:
- map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-typedef const char *extractor_func(const char *, const char *, const char **);
-
-class extractor_expr : public unary_expr {
- int part;
- extractor_func *func;
-public:
- enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
- extractor_expr(expression *e, extractor_func *f, int pt)
- : unary_expr(e), part(pt), func(f) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class truncate_expr : public unary_expr {
- int n;
-public:
- truncate_expr(expression *e, int i) : unary_expr(e), n(i) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class separator_expr : public unary_expr {
-public:
- separator_expr(expression *e) : unary_expr(e) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class binary_expr : public expression {
-protected:
- expression *expr1;
- expression *expr2;
-public:
- binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
- ~binary_expr() { delete expr1; delete expr2; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() {
- return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
- }
-};
-
-class alternative_expr : public binary_expr {
-public:
- alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class list_expr : public binary_expr {
-public:
- list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class substitute_expr : public binary_expr {
-public:
- substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class ternary_expr : public expression {
-protected:
- expression *expr1;
- expression *expr2;
- expression *expr3;
-public:
- ternary_expr(expression *e1, expression *e2, expression *e3)
- : expr1(e1), expr2(e2), expr3(e3) { }
- ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() {
- return ((expr1 ? expr1->analyze() : 0)
- | (expr2 ? expr2->analyze() : 0)
- | (expr3 ? expr3->analyze() : 0));
- }
-};
-
-class conditional_expr : public ternary_expr {
-public:
- conditional_expr(expression *e1, expression *e2, expression *e3)
- : ternary_expr(e1, e2, e3) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-static expression *parsed_label = 0;
-static expression *parsed_date_label = 0;
-static expression *parsed_short_label = 0;
-
-static expression *parse_result;
-
-string literals;
-
-%}
-
-%union {
- int num;
- expression *expr;
- struct { int ndigits; int val; } dig;
- struct { int start; int len; } str;
-}
-
-/* uppercase or lowercase letter */
-%token <num> TOKEN_LETTER
-/* literal characters */
-%token <str> TOKEN_LITERAL
-/* digit */
-%token <num> TOKEN_DIGIT
-
-%type <expr> conditional
-%type <expr> alternative
-%type <expr> list
-%type <expr> string
-%type <expr> substitute
-%type <expr> optional_conditional
-%type <num> number
-%type <dig> digits
-%type <num> optional_number
-%type <num> flag
-
-%%
-
-expr:
- optional_conditional
- { parse_result = ($1 ? new analyzed_expr($1) : 0); }
- ;
-
-conditional:
- alternative
- { $$ = $1; }
- | alternative '?' optional_conditional ':' conditional
- { $$ = new conditional_expr($1, $3, $5); }
- ;
-
-optional_conditional:
- /* empty */
- { $$ = 0; }
- | conditional
- { $$ = $1; }
- ;
-
-alternative:
- list
- { $$ = $1; }
- | alternative '|' list
- { $$ = new alternative_expr($1, $3); }
- | alternative '&' list
- { $$ = new conditional_expr($1, $3, 0); }
- ;
-
-list:
- substitute
- { $$ = $1; }
- | list substitute
- { $$ = new list_expr($1, $2); }
- ;
-
-substitute:
- string
- { $$ = $1; }
- | substitute '~' string
- { $$ = new substitute_expr($1, $3); }
- ;
-
-string:
- '@'
- { $$ = new at_expr; }
- | TOKEN_LITERAL
- {
- $$ = new literal_expr(literals.contents() + $1.start,
- $1.len);
- }
- | TOKEN_LETTER
- { $$ = new field_expr($1, 0); }
- | TOKEN_LETTER number
- { $$ = new field_expr($1, $2 - 1); }
- | '%' TOKEN_LETTER
- {
- switch ($2) {
- case 'I':
- case 'i':
- case 'A':
- case 'a':
- $$ = new format_expr($2);
- break;
- default:
- command_error("unrecognized format `%1'", char($2));
- $$ = new format_expr('a');
- break;
- }
- }
-
- | '%' digits
- {
- $$ = new format_expr('0', $2.ndigits, $2.val);
- }
- | string '.' flag TOKEN_LETTER optional_number
- {
- switch ($4) {
- case 'l':
- $$ = new map_expr($1, lowercase);
- break;
- case 'u':
- $$ = new map_expr($1, uppercase);
- break;
- case 'c':
- $$ = new map_expr($1, capitalize);
- break;
- case 'r':
- $$ = new map_expr($1, reverse_name);
- break;
- case 'a':
- $$ = new map_expr($1, abbreviate_name);
- break;
- case 'y':
- $$ = new extractor_expr($1, find_year, $3);
- break;
- case 'n':
- $$ = new extractor_expr($1, find_last_name, $3);
- break;
- default:
- $$ = $1;
- command_error("unknown function `%1'", char($4));
- break;
- }
- }
-
- | string '+' number
- { $$ = new truncate_expr($1, $3); }
- | string '-' number
- { $$ = new truncate_expr($1, -$3); }
- | string '*'
- { $$ = new star_expr($1); }
- | '(' optional_conditional ')'
- { $$ = $2; }
- | '<' optional_conditional '>'
- { $$ = new separator_expr($2); }
- ;
-
-optional_number:
- /* empty */
- { $$ = -1; }
- | number
- { $$ = $1; }
- ;
-
-number:
- TOKEN_DIGIT
- { $$ = $1; }
- | number TOKEN_DIGIT
- { $$ = $1*10 + $2; }
- ;
-
-digits:
- TOKEN_DIGIT
- { $$.ndigits = 1; $$.val = $1; }
- | digits TOKEN_DIGIT
- { $$.ndigits = $1.ndigits + 1; $$.val = $1.val*10 + $2; }
- ;
-
-
-flag:
- /* empty */
- { $$ = 0; }
- | '+'
- { $$ = 1; }
- | '-'
- { $$ = -1; }
- ;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-const char *spec_ptr;
-const char *spec_end;
-const char *spec_cur;
-
-static char uppercase_array[] = {
- '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',
-};
-
-static char lowercase_array[] = {
- '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',
-};
-
-int yylex()
-{
- while (spec_ptr < spec_end && csspace(*spec_ptr))
- spec_ptr++;
- spec_cur = spec_ptr;
- if (spec_ptr >= spec_end)
- return 0;
- unsigned char c = *spec_ptr++;
- if (csalpha(c)) {
- yylval.num = c;
- return TOKEN_LETTER;
- }
- if (csdigit(c)) {
- yylval.num = c - '0';
- return TOKEN_DIGIT;
- }
- if (c == '\'') {
- yylval.str.start = literals.length();
- for (; spec_ptr < spec_end; spec_ptr++) {
- if (*spec_ptr == '\'') {
- if (++spec_ptr < spec_end && *spec_ptr == '\'')
- literals += '\'';
- else {
- yylval.str.len = literals.length() - yylval.str.start;
- return TOKEN_LITERAL;
- }
- }
- else
- literals += *spec_ptr;
- }
- yylval.str.len = literals.length() - yylval.str.start;
- return TOKEN_LITERAL;
- }
- return c;
-}
-
-int set_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_label;
- parsed_label = parse_result;
- return 1;
-}
-
-int set_date_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_date_label;
- parsed_date_label = parse_result;
- return 1;
-}
-
-int set_short_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_short_label;
- parsed_short_label = parse_result;
- return 1;
-}
-
-void yyerror(const char *message)
-{
- if (spec_cur < spec_end)
- command_error("label specification %1 before `%2'", message, spec_cur);
- else
- command_error("label specification %1 at end of string",
- message, spec_cur);
-}
-
-void at_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (tentative)
- ref.canonicalize_authors(result);
- else {
- const char *end, *start = ref.get_authors(&end);
- if (start)
- result.append(start, end - start);
- }
-}
-
-void format_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (tentative)
- return;
- const label_info *lp = ref.get_label_ptr();
- int num = lp == 0 ? ref.get_number() : lp->count;
- if (type != '0')
- result += format_serial(type, num + 1);
- else {
- const char *ptr = i_to_a(num + first_number);
- int pad = width - strlen(ptr);
- while (--pad >= 0)
- result += '0';
- result += ptr;
- }
-}
-
-static const char *format_serial(char c, int n)
-{
- assert(n > 0);
- static char buf[128]; // more than enough.
- switch (c) {
- case 'i':
- case 'I':
- {
- char *p = buf;
- // troff uses z and w to represent 10000 and 5000 in Roman
- // numerals; I can find no historical basis for this usage
- const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
- if (n >= 40000)
- return i_to_a(n);
- while (n >= 10000) {
- *p++ = s[0];
- n -= 10000;
- }
- for (int i = 1000; i > 0; i /= 10, s += 2) {
- int m = n/i;
- n -= m*i;
- switch (m) {
- case 3:
- *p++ = s[2];
- /* falls through */
- case 2:
- *p++ = s[2];
- /* falls through */
- case 1:
- *p++ = s[2];
- break;
- case 4:
- *p++ = s[2];
- *p++ = s[1];
- break;
- case 8:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 7:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 6:
- *p++ = s[1];
- *p++ = s[2];
- break;
- case 5:
- *p++ = s[1];
- break;
- case 9:
- *p++ = s[2];
- *p++ = s[0];
- }
- }
- *p = 0;
- break;
- }
- case 'a':
- case 'A':
- {
- char *p = buf;
- // this is derived from troff/reg.c
- while (n > 0) {
- int d = n % 26;
- if (d == 0)
- d = 26;
- n -= d;
- n /= 26;
- *p++ = c == 'a' ? lowercase_array[d - 1] :
- uppercase_array[d - 1];
- }
- *p-- = 0;
- // Reverse it.
- char *q = buf;
- while (q < p) {
- char temp = *q;
- *q = *p;
- *p = temp;
- --p;
- ++q;
- }
- break;
- }
- default:
- assert(0);
- }
- return buf;
-}
-
-void field_expr::evaluate(int, const reference &ref,
- string &result, substring_position &)
-{
- const char *end;
- const char *start = ref.get_field(name, &end);
- if (start) {
- start = nth_field(number, start, &end);
- if (start)
- result.append(start, end - start);
- }
-}
-
-void literal_expr::evaluate(int, const reference &,
- string &result, substring_position &)
-{
- result += s;
-}
-
-analyzed_expr::analyzed_expr(expression *e)
-: unary_expr(e), flags(e ? e->analyze() : 0)
-{
-}
-
-void analyzed_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- if (expr)
- expr->evaluate(tentative, ref, result, pos);
-}
-
-void star_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- const label_info *lp = ref.get_label_ptr();
- if (!tentative
- && (lp == 0 || lp->total > 1)
- && expr)
- expr->evaluate(tentative, ref, result, pos);
-}
-
-void separator_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- int is_first = pos.start < 0;
- if (expr)
- expr->evaluate(tentative, ref, result, pos);
- if (is_first) {
- pos.start = start_length;
- pos.length = result.length() - start_length;
- }
-}
-
-void map_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- (*func)(temp.contents(), temp.contents() + temp.length(), result);
- }
-}
-
-void extractor_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- const char *end, *start = (*func)(temp.contents(),
- temp.contents() + temp.length(),
- &end);
- switch (part) {
- case BEFORE:
- if (start)
- result.append(temp.contents(), start - temp.contents());
- else
- result += temp;
- break;
- case MATCH:
- if (start)
- result.append(start, end - start);
- break;
- case AFTER:
- if (start)
- result.append(end, temp.contents() + temp.length() - end);
- break;
- default:
- assert(0);
- }
- }
-}
-
-static void first_part(int len, const char *ptr, const char *end,
- string &result)
-{
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- const token_info *ti = lookup_token(token_start, ptr);
- int counts = ti->sortify_non_empty(token_start, ptr);
- if (counts && --len < 0)
- break;
- if (counts || ti->is_accent())
- result.append(token_start, ptr - token_start);
- }
-}
-
-static void last_part(int len, const char *ptr, const char *end,
- string &result)
-{
- const char *start = ptr;
- int count = 0;
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- const token_info *ti = lookup_token(token_start, ptr);
- if (ti->sortify_non_empty(token_start, ptr))
- count++;
- }
- ptr = start;
- int skip = count - len;
- if (skip > 0) {
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- assert(0);
- const token_info *ti = lookup_token(token_start, ptr);
- if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
- ptr = token_start;
- break;
- }
- }
- }
- first_part(len, ptr, end, result);
-}
-
-void truncate_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- const char *start = temp.contents();
- const char *end = start + temp.length();
- if (n > 0)
- first_part(n, start, end, result);
- else if (n < 0)
- last_part(-n, start, end, result);
- }
-}
-
-void alternative_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (result.length() == start_length && expr2)
- expr2->evaluate(tentative, ref, result, pos);
-}
-
-void list_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
-}
-
-void substitute_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (result.length() > start_length && result[result.length() - 1] == '-') {
- // ought to see if pos covers the -
- result.set_length(result.length() - 1);
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
- }
-}
-
-void conditional_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- string temp;
- substring_position temp_pos;
- if (expr1)
- expr1->evaluate(tentative, ref, temp, temp_pos);
- if (temp.length() > 0) {
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
- }
- else {
- if (expr3)
- expr3->evaluate(tentative, ref, result, pos);
- }
-}
-
-void reference::pre_compute_label()
-{
- if (parsed_label != 0
- && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
- label.clear();
- substring_position temp_pos;
- parsed_label->evaluate(1, *this, label, temp_pos);
- label_ptr = lookup_label(label);
- }
-}
-
-void reference::compute_label()
-{
- label.clear();
- if (parsed_label)
- parsed_label->evaluate(0, *this, label, separator_pos);
- if (short_label_flag && parsed_short_label)
- parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
- if (date_as_label) {
- string new_date;
- if (parsed_date_label) {
- substring_position temp_pos;
- parsed_date_label->evaluate(0, *this, new_date, temp_pos);
- }
- set_date(new_date);
- }
- if (label_ptr)
- label_ptr->count += 1;
-}
-
-void reference::immediate_compute_label()
-{
- if (label_ptr)
- label_ptr->total = 2; // force use of disambiguator
- compute_label();
-}
-
-int reference::merge_labels(reference **v, int n, label_type type,
- string &result)
-{
- if (abbreviate_label_ranges)
- return merge_labels_by_number(v, n, type, result);
- else
- return merge_labels_by_parts(v, n, type, result);
-}
-
-int reference::merge_labels_by_number(reference **v, int n, label_type type,
- string &result)
-{
- if (n <= 1)
- return 0;
- int num = get_number();
- // Only merge three or more labels.
- if (v[0]->get_number() != num + 1
- || v[1]->get_number() != num + 2)
- return 0;
- int i;
- for (i = 2; i < n; i++)
- if (v[i]->get_number() != num + i + 1)
- break;
- result = get_label(type);
- result += label_range_indicator;
- result += v[i - 1]->get_label(type);
- return i;
-}
-
-const substring_position &reference::get_separator_pos(label_type type) const
-{
- if (type == SHORT_LABEL && short_label_flag)
- return short_separator_pos;
- else
- return separator_pos;
-}
-
-const string &reference::get_label(label_type type) const
-{
- if (type == SHORT_LABEL && short_label_flag)
- return short_label;
- else
- return label;
-}
-
-int reference::merge_labels_by_parts(reference **v, int n, label_type type,
- string &result)
-{
- if (n <= 0)
- return 0;
- const string &lb = get_label(type);
- const substring_position &sp = get_separator_pos(type);
- if (sp.start < 0
- || sp.start != v[0]->get_separator_pos(type).start
- || memcmp(lb.contents(), v[0]->get_label(type).contents(),
- sp.start) != 0)
- return 0;
- result = lb;
- int i = 0;
- do {
- result += separate_label_second_parts;
- const substring_position &s = v[i]->get_separator_pos(type);
- int sep_end_pos = s.start + s.length;
- result.append(v[i]->get_label(type).contents() + sep_end_pos,
- v[i]->get_label(type).length() - sep_end_pos);
- } while (++i < n
- && sp.start == v[i]->get_separator_pos(type).start
- && memcmp(lb.contents(), v[i]->get_label(type).contents(),
- sp.start) == 0);
- return i;
-}
-
-string label_pool;
-
-label_info::label_info(const string &s)
-: start(label_pool.length()), length(s.length()), count(0), total(1)
-{
- label_pool += s;
-}
-
-static label_info **label_table = 0;
-static int label_table_size = 0;
-static int label_table_used = 0;
-
-label_info *lookup_label(const string &label)
-{
- if (label_table == 0) {
- label_table = new label_info *[17];
- label_table_size = 17;
- for (int i = 0; i < 17; i++)
- label_table[i] = 0;
- }
- unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
- label_info **ptr;
- for (ptr = label_table + h;
- *ptr != 0;
- (ptr == label_table)
- ? (ptr = label_table + label_table_size - 1)
- : ptr--)
- if ((*ptr)->length == label.length()
- && memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
- label.length()) == 0) {
- (*ptr)->total += 1;
- return *ptr;
- }
- label_info *result = *ptr = new label_info(label);
- if (++label_table_used * 2 > label_table_size) {
- // Rehash the table.
- label_info **old_table = label_table;
- int old_size = label_table_size;
- label_table_size = next_size(label_table_size);
- label_table = new label_info *[label_table_size];
- int i;
- for (i = 0; i < label_table_size; i++)
- label_table[i] = 0;
- for (i = 0; i < old_size; i++)
- if (old_table[i]) {
- h = hash_string(label_pool.contents() + old_table[i]->start,
- old_table[i]->length);
- label_info **p;
- for (p = label_table + (h % label_table_size);
- *p != 0;
- (p == label_table)
- ? (p = label_table + label_table_size - 1)
- : --p)
- ;
- *p = old_table[i];
- }
- a_delete old_table;
- }
- return result;
-}
-
-void clear_labels()
-{
- for (int i = 0; i < label_table_size; i++) {
- delete label_table[i];
- label_table[i] = 0;
- }
- label_table_used = 0;
- label_pool.clear();
-}
-
-static void consider_authors(reference **start, reference **end, int i);
-
-void compute_labels(reference **v, int n)
-{
- if (parsed_label
- && (parsed_label->analyze() & expression::CONTAINS_AT)
- && sort_fields.length() >= 2
- && sort_fields[0] == 'A'
- && sort_fields[1] == '+')
- consider_authors(v, v + n, 0);
- for (int i = 0; i < n; i++)
- v[i]->compute_label();
-}
-
-
-/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
-where 0 <= i <= N if there exists a reference with a list of authors
-<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
-<B0,B1,...,BM>. If a reference needs author i we only have to call
-need_author(j) for some j >= i such that the reference also needs
-author j. */
-
-/* This function handles 2 tasks:
-determine which authors are needed (cannot be elided with et al.);
-determine which authors can have only last names in the labels.
-
-References >= start and < end have the same first i author names.
-Also they're sorted by A+. */
-
-static void consider_authors(reference **start, reference **end, int i)
-{
- if (start >= end)
- return;
- reference **p = start;
- if (i >= (*p)->get_nauthors()) {
- for (++p; p < end && i >= (*p)->get_nauthors(); p++)
- ;
- if (p < end && i > 0) {
- // If we have an author list <A B C> and an author list <A B C D>,
- // then both lists need C.
- for (reference **q = start; q < end; q++)
- (*q)->need_author(i - 1);
- }
- start = p;
- }
- while (p < end) {
- reference **last_name_start = p;
- reference **name_start = p;
- for (++p;
- p < end && i < (*p)->get_nauthors()
- && same_author_last_name(**last_name_start, **p, i);
- p++) {
- if (!same_author_name(**name_start, **p, i)) {
- consider_authors(name_start, p, i + 1);
- name_start = p;
- }
- }
- consider_authors(name_start, p, i + 1);
- if (last_name_start == name_start) {
- for (reference **q = last_name_start; q < p; q++)
- (*q)->set_last_name_unambiguous(i);
- }
- // If we have an author list <A B C D> and <A B C E>, then the lists
- // need author D and E respectively.
- if (name_start > start || p < end) {
- for (reference **q = last_name_start; q < p; q++)
- (*q)->need_author(i);
- }
- }
-}
-
-int same_author_last_name(const reference &r1, const reference &r2, int n)
-{
- const char *ae1;
- const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
- if (!as1 && !as2) return 1; // they are the same
- if (!as1 || !as2) return 0;
- return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-int same_author_name(const reference &r1, const reference &r2, int n)
-{
- const char *ae1;
- const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
- if (!as1 && !as2) return 1; // they are the same
- if (!as1 || !as2) return 0;
- return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-
-void int_set::set(int i)
-{
- assert(i >= 0);
- int bytei = i >> 3;
- if (bytei >= v.length()) {
- int old_length = v.length();
- v.set_length(bytei + 1);
- for (int j = old_length; j <= bytei; j++)
- v[j] = 0;
- }
- v[bytei] |= 1 << (i & 7);
-}
-
-int int_set::get(int i) const
-{
- assert(i >= 0);
- int bytei = i >> 3;
- return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
-}
-
-void reference::set_last_name_unambiguous(int i)
-{
- last_name_unambiguous.set(i);
-}
-
-void reference::need_author(int n)
-{
- if (n > last_needed_author)
- last_needed_author = n;
-}
-
-const char *reference::get_authors(const char **end) const
-{
- if (!computed_authors) {
- ((reference *)this)->computed_authors = 1;
- string &result = ((reference *)this)->authors;
- int na = get_nauthors();
- result.clear();
- for (int i = 0; i < na; i++) {
- if (last_name_unambiguous.get(i)) {
- const char *e, *start = get_author_last_name(i, &e);
- assert(start != 0);
- result.append(start, e - start);
- }
- else {
- const char *e, *start = get_author(i, &e);
- assert(start != 0);
- result.append(start, e - start);
- }
- if (i == last_needed_author
- && et_al.length() > 0
- && et_al_min_elide > 0
- && last_needed_author + et_al_min_elide < na
- && na >= et_al_min_total) {
- result += et_al;
- break;
- }
- if (i < na - 1) {
- if (na == 2)
- result += join_authors_exactly_two;
- else if (i < na - 2)
- result += join_authors_default;
- else
- result += join_authors_last_two;
- }
- }
- }
- const char *start = authors.contents();
- *end = start + authors.length();
- return start;
-}
-
-int reference::get_nauthors() const
-{
- if (nauthors < 0) {
- const char *dummy;
- int na;
- for (na = 0; get_author(na, &dummy) != 0; na++)
- ;
- ((reference *)this)->nauthors = na;
- }
- return nauthors;
-}
diff --git a/contrib/groff/src/preproc/refer/ref.cpp b/contrib/groff/src/preproc/refer/ref.cpp
deleted file mode 100644
index 59c69d52b616..000000000000
--- a/contrib/groff/src/preproc/refer/ref.cpp
+++ /dev/null
@@ -1,1160 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003
- Free Software Foundation, Inc.
-Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-static const char *find_day(const char *, const char *, const char **);
-static int find_month(const char *start, const char *end);
-static void abbreviate_names(string &);
-
-#define DEFAULT_ARTICLES "the\000a\000an"
-
-string articles(DEFAULT_ARTICLES, sizeof(DEFAULT_ARTICLES));
-
-// Multiple occurrences of fields are separated by FIELD_SEPARATOR.
-const char FIELD_SEPARATOR = '\0';
-
-const char MULTI_FIELD_NAMES[] = "AE";
-const char *AUTHOR_FIELDS = "AQ";
-
-enum { OTHER, JOURNAL_ARTICLE, BOOK, ARTICLE_IN_BOOK, TECH_REPORT, BELL_TM };
-
-const char *reference_types[] = {
- "other",
- "journal-article",
- "book",
- "article-in-book",
- "tech-report",
- "bell-tm",
-};
-
-static string temp_fields[256];
-
-reference::reference(const char *start, int len, reference_id *ridp)
-: h(0), merged(0), no(-1), field(0), nfields(0), label_ptr(0),
- computed_authors(0), last_needed_author(-1), nauthors(-1)
-{
- int i;
- for (i = 0; i < 256; i++)
- field_index[i] = NULL_FIELD_INDEX;
- if (ridp)
- rid = *ridp;
- if (start == 0)
- return;
- if (len <= 0)
- return;
- const char *end = start + len;
- const char *ptr = start;
- assert(*ptr == '%');
- while (ptr < end) {
- if (ptr + 1 < end && ptr[1] != '\0'
- && ((ptr[1] != '%' && ptr[1] == annotation_field)
- || (ptr + 2 < end && ptr[1] == '%' && ptr[2] != '\0'
- && discard_fields.search(ptr[2]) < 0))) {
- if (ptr[1] == '%')
- ptr++;
- string &f = temp_fields[(unsigned char)ptr[1]];
- ptr += 2;
- while (ptr < end && csspace(*ptr))
- ptr++;
- for (;;) {
- for (;;) {
- if (ptr >= end) {
- f += '\n';
- break;
- }
- f += *ptr;
- if (*ptr++ == '\n')
- break;
- }
- if (ptr >= end || *ptr == '%')
- break;
- }
- }
- else if (ptr + 1 < end && ptr[1] != '\0' && ptr[1] != '%'
- && discard_fields.search(ptr[1]) < 0) {
- string &f = temp_fields[(unsigned char)ptr[1]];
- if (f.length() > 0) {
- if (strchr(MULTI_FIELD_NAMES, ptr[1]) != 0)
- f += FIELD_SEPARATOR;
- else
- f.clear();
- }
- ptr += 2;
- if (ptr < end) {
- if (*ptr == ' ')
- ptr++;
- for (;;) {
- const char *p = ptr;
- while (ptr < end && *ptr != '\n')
- ptr++;
- // strip trailing white space
- const char *q = ptr;
- while (q > p && q[-1] != '\n' && csspace(q[-1]))
- q--;
- while (p < q)
- f += *p++;
- if (ptr >= end)
- break;
- ptr++;
- if (ptr >= end)
- break;
- if (*ptr == '%')
- break;
- f += ' ';
- }
- }
- }
- else {
- // skip this field
- for (;;) {
- while (ptr < end && *ptr++ != '\n')
- ;
- if (ptr >= end || *ptr == '%')
- break;
- }
- }
- }
- for (i = 0; i < 256; i++)
- if (temp_fields[i].length() > 0)
- nfields++;
- field = new string[nfields];
- int j = 0;
- for (i = 0; i < 256; i++)
- if (temp_fields[i].length() > 0) {
- field[j].move(temp_fields[i]);
- if (abbreviate_fields.search(i) >= 0)
- abbreviate_names(field[j]);
- field_index[i] = j;
- j++;
- }
-}
-
-reference::~reference()
-{
- if (nfields > 0)
- ad_delete(nfields) field;
-}
-
-// ref is the inline, this is the database ref
-
-void reference::merge(reference &ref)
-{
- int i;
- for (i = 0; i < 256; i++)
- if (field_index[i] != NULL_FIELD_INDEX)
- temp_fields[i].move(field[field_index[i]]);
- for (i = 0; i < 256; i++)
- if (ref.field_index[i] != NULL_FIELD_INDEX)
- temp_fields[i].move(ref.field[ref.field_index[i]]);
- for (i = 0; i < 256; i++)
- field_index[i] = NULL_FIELD_INDEX;
- int old_nfields = nfields;
- nfields = 0;
- for (i = 0; i < 256; i++)
- if (temp_fields[i].length() > 0)
- nfields++;
- if (nfields != old_nfields) {
- if (old_nfields > 0)
- ad_delete(old_nfields) field;
- field = new string[nfields];
- }
- int j = 0;
- for (i = 0; i < 256; i++)
- if (temp_fields[i].length() > 0) {
- field[j].move(temp_fields[i]);
- field_index[i] = j;
- j++;
- }
- merged = 1;
-}
-
-void reference::insert_field(unsigned char c, string &s)
-{
- assert(s.length() > 0);
- if (field_index[c] != NULL_FIELD_INDEX) {
- field[field_index[c]].move(s);
- return;
- }
- assert(field_index[c] == NULL_FIELD_INDEX);
- string *old_field = field;
- field = new string[nfields + 1];
- int pos = 0;
- int i;
- for (i = 0; i < int(c); i++)
- if (field_index[i] != NULL_FIELD_INDEX)
- pos++;
- for (i = 0; i < pos; i++)
- field[i].move(old_field[i]);
- field[pos].move(s);
- for (i = pos; i < nfields; i++)
- field[i + 1].move(old_field[i]);
- if (nfields > 0)
- ad_delete(nfields) old_field;
- nfields++;
- field_index[c] = pos;
- for (i = c + 1; i < 256; i++)
- if (field_index[i] != NULL_FIELD_INDEX)
- field_index[i] += 1;
-}
-
-void reference::delete_field(unsigned char c)
-{
- if (field_index[c] == NULL_FIELD_INDEX)
- return;
- string *old_field = field;
- field = new string[nfields - 1];
- int i;
- for (i = 0; i < int(field_index[c]); i++)
- field[i].move(old_field[i]);
- for (i = field_index[c]; i < nfields - 1; i++)
- field[i].move(old_field[i + 1]);
- if (nfields > 0)
- ad_delete(nfields) old_field;
- nfields--;
- field_index[c] = NULL_FIELD_INDEX;
- for (i = c + 1; i < 256; i++)
- if (field_index[i] != NULL_FIELD_INDEX)
- field_index[i] -= 1;
-}
-
-void reference::compute_hash_code()
-{
- if (!rid.is_null())
- h = rid.hash();
- else {
- h = 0;
- for (int i = 0; i < nfields; i++)
- if (field[i].length() > 0) {
- h <<= 4;
- h ^= hash_string(field[i].contents(), field[i].length());
- }
- }
-}
-
-void reference::set_number(int n)
-{
- no = n;
-}
-
-const char SORT_SEP = '\001';
-const char SORT_SUB_SEP = '\002';
-const char SORT_SUB_SUB_SEP = '\003';
-
-// sep specifies additional word separators
-
-void sortify_words(const char *s, const char *end, const char *sep,
- string &result)
-{
- int non_empty = 0;
- int need_separator = 0;
- for (;;) {
- const char *token_start = s;
- if (!get_token(&s, end))
- break;
- if ((s - token_start == 1
- && (*token_start == ' '
- || *token_start == '\n'
- || (sep && *token_start != '\0'
- && strchr(sep, *token_start) != 0)))
- || (s - token_start == 2
- && token_start[0] == '\\' && token_start[1] == ' ')) {
- if (non_empty)
- need_separator = 1;
- }
- else {
- const token_info *ti = lookup_token(token_start, s);
- if (ti->sortify_non_empty(token_start, s)) {
- if (need_separator) {
- result += ' ';
- need_separator = 0;
- }
- ti->sortify(token_start, s, result);
- non_empty = 1;
- }
- }
- }
-}
-
-void sortify_word(const char *s, const char *end, string &result)
-{
- for (;;) {
- const char *token_start = s;
- if (!get_token(&s, end))
- break;
- const token_info *ti = lookup_token(token_start, s);
- ti->sortify(token_start, s, result);
- }
-}
-
-void sortify_other(const char *s, int len, string &key)
-{
- sortify_words(s, s + len, 0, key);
-}
-
-void sortify_title(const char *s, int len, string &key)
-{
- const char *end = s + len;
- for (; s < end && (*s == ' ' || *s == '\n'); s++)
- ;
- const char *ptr = s;
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- if (ptr - token_start == 1
- && (*token_start == ' ' || *token_start == '\n'))
- break;
- }
- if (ptr < end) {
- unsigned int first_word_len = ptr - s - 1;
- const char *ae = articles.contents() + articles.length();
- for (const char *a = articles.contents();
- a < ae;
- a = strchr(a, '\0') + 1)
- if (first_word_len == strlen(a)) {
- unsigned int j;
- for (j = 0; j < first_word_len; j++)
- if (a[j] != cmlower(s[j]))
- break;
- if (j >= first_word_len) {
- s = ptr;
- for (; s < end && (*s == ' ' || *s == '\n'); s++)
- ;
- break;
- }
- }
- }
- sortify_words(s, end, 0, key);
-}
-
-void sortify_name(const char *s, int len, string &key)
-{
- const char *last_name_end;
- const char *last_name = find_last_name(s, s + len, &last_name_end);
- sortify_word(last_name, last_name_end, key);
- key += SORT_SUB_SUB_SEP;
- if (last_name > s)
- sortify_words(s, last_name, ".", key);
- key += SORT_SUB_SUB_SEP;
- if (last_name_end < s + len)
- sortify_words(last_name_end, s + len, ".,", key);
-}
-
-void sortify_date(const char *s, int len, string &key)
-{
- const char *year_end;
- const char *year_start = find_year(s, s + len, &year_end);
- if (!year_start) {
- // Things without years are often `forthcoming', so it makes sense
- // that they sort after things with explicit years.
- key += 'A';
- sortify_words(s, s + len, 0, key);
- return;
- }
- int n = year_end - year_start;
- while (n < 4) {
- key += '0';
- n++;
- }
- while (year_start < year_end)
- key += *year_start++;
- int m = find_month(s, s + len);
- if (m < 0)
- return;
- key += 'A' + m;
- const char *day_end;
- const char *day_start = find_day(s, s + len, &day_end);
- if (!day_start)
- return;
- if (day_end - day_start == 1)
- key += '0';
- while (day_start < day_end)
- key += *day_start++;
-}
-
-// SORT_{SUB,SUB_SUB}_SEP can creep in from use of @ in label specification.
-
-void sortify_label(const char *s, int len, string &key)
-{
- const char *end = s + len;
- for (;;) {
- const char *ptr;
- for (ptr = s;
- ptr < end && *ptr != SORT_SUB_SEP && *ptr != SORT_SUB_SUB_SEP;
- ptr++)
- ;
- if (ptr > s)
- sortify_words(s, ptr, 0, key);
- s = ptr;
- if (s >= end)
- break;
- key += *s++;
- }
-}
-
-void reference::compute_sort_key()
-{
- if (sort_fields.length() == 0)
- return;
- sort_fields += '\0';
- const char *sf = sort_fields.contents();
- while (*sf != '\0') {
- sort_key += SORT_SEP;
- char f = *sf++;
- int n = 1;
- if (*sf == '+') {
- n = INT_MAX;
- sf++;
- }
- else if (csdigit(*sf)) {
- char *ptr;
- long l = strtol(sf, &ptr, 10);
- if (l == 0 && ptr == sf)
- ;
- else {
- sf = ptr;
- if (l < 0) {
- n = 1;
- }
- else {
- n = int(l);
- }
- }
- }
- if (f == '.')
- sortify_label(label.contents(), label.length(), sort_key);
- else if (f == AUTHOR_FIELDS[0])
- sortify_authors(n, sort_key);
- else
- sortify_field(f, n, sort_key);
- }
- sort_fields.set_length(sort_fields.length() - 1);
-}
-
-void reference::sortify_authors(int n, string &result) const
-{
- for (const char *p = AUTHOR_FIELDS; *p != '\0'; p++)
- if (contains_field(*p)) {
- sortify_field(*p, n, result);
- return;
- }
- sortify_field(AUTHOR_FIELDS[0], n, result);
-}
-
-void reference::canonicalize_authors(string &result) const
-{
- int len = result.length();
- sortify_authors(INT_MAX, result);
- if (result.length() > len)
- result += SORT_SUB_SEP;
-}
-
-void reference::sortify_field(unsigned char f, int n, string &result) const
-{
- typedef void (*sortify_t)(const char *, int, string &);
- sortify_t sortifier = sortify_other;
- switch (f) {
- case 'A':
- case 'E':
- sortifier = sortify_name;
- break;
- case 'D':
- sortifier = sortify_date;
- break;
- case 'B':
- case 'J':
- case 'T':
- sortifier = sortify_title;
- break;
- }
- int fi = field_index[(unsigned char)f];
- if (fi != NULL_FIELD_INDEX) {
- string &str = field[fi];
- const char *start = str.contents();
- const char *end = start + str.length();
- for (int i = 0; i < n && start < end; i++) {
- const char *p = start;
- while (start < end && *start != FIELD_SEPARATOR)
- start++;
- if (i > 0)
- result += SORT_SUB_SEP;
- (*sortifier)(p, start - p, result);
- if (start < end)
- start++;
- }
- }
-}
-
-int compare_reference(const reference &r1, const reference &r2)
-{
- assert(r1.no >= 0);
- assert(r2.no >= 0);
- const char *s1 = r1.sort_key.contents();
- int n1 = r1.sort_key.length();
- const char *s2 = r2.sort_key.contents();
- int n2 = r2.sort_key.length();
- for (; n1 > 0 && n2 > 0; --n1, --n2, ++s1, ++s2)
- if (*s1 != *s2)
- return (int)(unsigned char)*s1 - (int)(unsigned char)*s2;
- if (n2 > 0)
- return -1;
- if (n1 > 0)
- return 1;
- return r1.no - r2.no;
-}
-
-int same_reference(const reference &r1, const reference &r2)
-{
- if (!r1.rid.is_null() && r1.rid == r2.rid)
- return 1;
- if (r1.h != r2.h)
- return 0;
- if (r1.nfields != r2.nfields)
- return 0;
- int i = 0;
- for (i = 0; i < 256; i++)
- if (r1.field_index != r2.field_index)
- return 0;
- for (i = 0; i < r1.nfields; i++)
- if (r1.field[i] != r2.field[i])
- return 0;
- return 1;
-}
-
-const char *find_last_name(const char *start, const char *end,
- const char **endp)
-{
- const char *ptr = start;
- const char *last_word = start;
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- if (ptr - token_start == 1) {
- if (*token_start == ',') {
- *endp = token_start;
- return last_word;
- }
- else if (*token_start == ' ' || *token_start == '\n') {
- if (ptr < end && *ptr != ' ' && *ptr != '\n')
- last_word = ptr;
- }
- }
- }
- *endp = end;
- return last_word;
-}
-
-void abbreviate_name(const char *ptr, const char *end, string &result)
-{
- const char *last_name_end;
- const char *last_name_start = find_last_name(ptr, end, &last_name_end);
- int need_period = 0;
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, last_name_start))
- break;
- const token_info *ti = lookup_token(token_start, ptr);
- if (need_period) {
- if ((ptr - token_start == 1 && *token_start == ' ')
- || (ptr - token_start == 2 && token_start[0] == '\\'
- && token_start[1] == ' '))
- continue;
- if (ti->is_upper())
- result += period_before_initial;
- else
- result += period_before_other;
- need_period = 0;
- }
- result.append(token_start, ptr - token_start);
- if (ti->is_upper()) {
- const char *lower_ptr = ptr;
- int first_token = 1;
- for (;;) {
- token_start = ptr;
- if (!get_token(&ptr, last_name_start))
- break;
- if ((ptr - token_start == 1 && *token_start == ' ')
- || (ptr - token_start == 2 && token_start[0] == '\\'
- && token_start[1] == ' '))
- break;
- ti = lookup_token(token_start, ptr);
- if (ti->is_hyphen()) {
- const char *ptr1 = ptr;
- if (get_token(&ptr1, last_name_start)) {
- ti = lookup_token(ptr, ptr1);
- if (ti->is_upper()) {
- result += period_before_hyphen;
- result.append(token_start, ptr1 - token_start);
- ptr = ptr1;
- }
- }
- }
- else if (ti->is_upper()) {
- // MacDougal -> MacD.
- result.append(lower_ptr, ptr - lower_ptr);
- lower_ptr = ptr;
- first_token = 1;
- }
- else if (first_token && ti->is_accent()) {
- result.append(token_start, ptr - token_start);
- lower_ptr = ptr;
- }
- first_token = 0;
- }
- need_period = 1;
- }
- }
- if (need_period)
- result += period_before_last_name;
- result.append(last_name_start, end - last_name_start);
-}
-
-static void abbreviate_names(string &result)
-{
- string str;
- str.move(result);
- const char *ptr = str.contents();
- const char *end = ptr + str.length();
- while (ptr < end) {
- const char *name_end = (char *)memchr(ptr, FIELD_SEPARATOR, end - ptr);
- if (name_end == 0)
- name_end = end;
- abbreviate_name(ptr, name_end, result);
- if (name_end >= end)
- break;
- ptr = name_end + 1;
- result += FIELD_SEPARATOR;
- }
-}
-
-void reverse_name(const char *ptr, const char *name_end, string &result)
-{
- const char *last_name_end;
- const char *last_name_start = find_last_name(ptr, name_end, &last_name_end);
- result.append(last_name_start, last_name_end - last_name_start);
- while (last_name_start > ptr
- && (last_name_start[-1] == ' ' || last_name_start[-1] == '\n'))
- last_name_start--;
- if (last_name_start > ptr) {
- result += ", ";
- result.append(ptr, last_name_start - ptr);
- }
- if (last_name_end < name_end)
- result.append(last_name_end, name_end - last_name_end);
-}
-
-void reverse_names(string &result, int n)
-{
- if (n <= 0)
- return;
- string str;
- str.move(result);
- const char *ptr = str.contents();
- const char *end = ptr + str.length();
- while (ptr < end) {
- if (--n < 0) {
- result.append(ptr, end - ptr);
- break;
- }
- const char *name_end = (char *)memchr(ptr, FIELD_SEPARATOR, end - ptr);
- if (name_end == 0)
- name_end = end;
- reverse_name(ptr, name_end, result);
- if (name_end >= end)
- break;
- ptr = name_end + 1;
- result += FIELD_SEPARATOR;
- }
-}
-
-// Return number of field separators.
-
-int join_fields(string &f)
-{
- const char *ptr = f.contents();
- int len = f.length();
- int nfield_seps = 0;
- int j;
- for (j = 0; j < len; j++)
- if (ptr[j] == FIELD_SEPARATOR)
- nfield_seps++;
- if (nfield_seps == 0)
- return 0;
- string temp;
- int field_seps_left = nfield_seps;
- for (j = 0; j < len; j++) {
- if (ptr[j] == FIELD_SEPARATOR) {
- if (nfield_seps == 1)
- temp += join_authors_exactly_two;
- else if (--field_seps_left == 0)
- temp += join_authors_last_two;
- else
- temp += join_authors_default;
- }
- else
- temp += ptr[j];
- }
- f = temp;
- return nfield_seps;
-}
-
-void uppercase(const char *start, const char *end, string &result)
-{
- for (;;) {
- const char *token_start = start;
- if (!get_token(&start, end))
- break;
- const token_info *ti = lookup_token(token_start, start);
- ti->upper_case(token_start, start, result);
- }
-}
-
-void lowercase(const char *start, const char *end, string &result)
-{
- for (;;) {
- const char *token_start = start;
- if (!get_token(&start, end))
- break;
- const token_info *ti = lookup_token(token_start, start);
- ti->lower_case(token_start, start, result);
- }
-}
-
-void capitalize(const char *ptr, const char *end, string &result)
-{
- int in_small_point_size = 0;
- for (;;) {
- const char *start = ptr;
- if (!get_token(&ptr, end))
- break;
- const token_info *ti = lookup_token(start, ptr);
- const char *char_end = ptr;
- int is_lower = ti->is_lower();
- if ((is_lower || ti->is_upper()) && get_token(&ptr, end)) {
- const token_info *ti2 = lookup_token(char_end, ptr);
- if (!ti2->is_accent())
- ptr = char_end;
- }
- if (is_lower) {
- if (!in_small_point_size) {
- result += "\\s-2";
- in_small_point_size = 1;
- }
- ti->upper_case(start, char_end, result);
- result.append(char_end, ptr - char_end);
- }
- else {
- if (in_small_point_size) {
- result += "\\s+2";
- in_small_point_size = 0;
- }
- result.append(start, ptr - start);
- }
- }
- if (in_small_point_size)
- result += "\\s+2";
-}
-
-void capitalize_field(string &str)
-{
- string temp;
- capitalize(str.contents(), str.contents() + str.length(), temp);
- str.move(temp);
-}
-
-int is_terminated(const char *ptr, const char *end)
-{
- const char *last_token = end;
- for (;;) {
- const char *p = ptr;
- if (!get_token(&ptr, end))
- break;
- last_token = p;
- }
- return end - last_token == 1
- && (*last_token == '.' || *last_token == '!' || *last_token == '?');
-}
-
-void reference::output(FILE *fp)
-{
- fputs(".]-\n", fp);
- for (int i = 0; i < 256; i++)
- if (field_index[i] != NULL_FIELD_INDEX && i != annotation_field) {
- string &f = field[field_index[i]];
- if (!csdigit(i)) {
- int j = reverse_fields.search(i);
- if (j >= 0) {
- int n;
- int len = reverse_fields.length();
- if (++j < len && csdigit(reverse_fields[j])) {
- n = reverse_fields[j] - '0';
- for (++j; j < len && csdigit(reverse_fields[j]); j++)
- // should check for overflow
- n = n*10 + reverse_fields[j] - '0';
- }
- else
- n = INT_MAX;
- reverse_names(f, n);
- }
- }
- int is_multiple = join_fields(f) > 0;
- if (capitalize_fields.search(i) >= 0)
- capitalize_field(f);
- if (memchr(f.contents(), '\n', f.length()) == 0) {
- fprintf(fp, ".ds [%c ", i);
- if (f[0] == ' ' || f[0] == '\\' || f[0] == '"')
- putc('"', fp);
- put_string(f, fp);
- putc('\n', fp);
- }
- else {
- fprintf(fp, ".de [%c\n", i);
- put_string(f, fp);
- fputs("..\n", fp);
- }
- if (i == 'P') {
- int multiple_pages = 0;
- const char *s = f.contents();
- const char *end = f.contents() + f.length();
- for (;;) {
- const char *token_start = s;
- if (!get_token(&s, end))
- break;
- const token_info *ti = lookup_token(token_start, s);
- if (ti->is_hyphen() || ti->is_range_sep()) {
- multiple_pages = 1;
- break;
- }
- }
- fprintf(fp, ".nr [P %d\n", multiple_pages);
- }
- else if (i == 'E')
- fprintf(fp, ".nr [E %d\n", is_multiple);
- }
- for (const char *p = "TAO"; *p; p++) {
- int fi = field_index[(unsigned char)*p];
- if (fi != NULL_FIELD_INDEX) {
- string &f = field[fi];
- fprintf(fp, ".nr [%c %d\n", *p,
- is_terminated(f.contents(), f.contents() + f.length()));
- }
- }
- int t = classify();
- fprintf(fp, ".][ %d %s\n", t, reference_types[t]);
- if (annotation_macro.length() > 0 && annotation_field >= 0
- && field_index[annotation_field] != NULL_FIELD_INDEX) {
- putc('.', fp);
- put_string(annotation_macro, fp);
- putc('\n', fp);
- put_string(field[field_index[annotation_field]], fp);
- }
-}
-
-void reference::print_sort_key_comment(FILE *fp)
-{
- fputs(".\\\"", fp);
- put_string(sort_key, fp);
- putc('\n', fp);
-}
-
-const char *find_year(const char *start, const char *end, const char **endp)
-{
- for (;;) {
- while (start < end && !csdigit(*start))
- start++;
- const char *ptr = start;
- if (start == end)
- break;
- while (ptr < end && csdigit(*ptr))
- ptr++;
- if (ptr - start == 4 || ptr - start == 3
- || (ptr - start == 2
- && (start[0] >= '4' || (start[0] == '3' && start[1] >= '2')))) {
- *endp = ptr;
- return start;
- }
- start = ptr;
- }
- return 0;
-}
-
-static const char *find_day(const char *start, const char *end,
- const char **endp)
-{
- for (;;) {
- while (start < end && !csdigit(*start))
- start++;
- const char *ptr = start;
- if (start == end)
- break;
- while (ptr < end && csdigit(*ptr))
- ptr++;
- if ((ptr - start == 1 && start[0] != '0')
- || (ptr - start == 2 &&
- (start[0] == '1'
- || start[0] == '2'
- || (start[0] == '3' && start[1] <= '1')
- || (start[0] == '0' && start[1] != '0')))) {
- *endp = ptr;
- return start;
- }
- start = ptr;
- }
- return 0;
-}
-
-static int find_month(const char *start, const char *end)
-{
- static const char *months[] = {
- "january",
- "february",
- "march",
- "april",
- "may",
- "june",
- "july",
- "august",
- "september",
- "october",
- "november",
- "december",
- };
- for (;;) {
- while (start < end && !csalpha(*start))
- start++;
- const char *ptr = start;
- if (start == end)
- break;
- while (ptr < end && csalpha(*ptr))
- ptr++;
- if (ptr - start >= 3) {
- for (unsigned int i = 0; i < sizeof(months)/sizeof(months[0]); i++) {
- const char *q = months[i];
- const char *p = start;
- for (; p < ptr; p++, q++)
- if (cmlower(*p) != *q)
- break;
- if (p >= ptr)
- return i;
- }
- }
- start = ptr;
- }
- return -1;
-}
-
-int reference::contains_field(char c) const
-{
- return field_index[(unsigned char)c] != NULL_FIELD_INDEX;
-}
-
-int reference::classify()
-{
- if (contains_field('J'))
- return JOURNAL_ARTICLE;
- if (contains_field('B'))
- return ARTICLE_IN_BOOK;
- if (contains_field('G'))
- return TECH_REPORT;
- if (contains_field('R'))
- return TECH_REPORT;
- if (contains_field('I'))
- return BOOK;
- if (contains_field('M'))
- return BELL_TM;
- return OTHER;
-}
-
-const char *reference::get_year(const char **endp) const
-{
- if (field_index['D'] != NULL_FIELD_INDEX) {
- string &date = field[field_index['D']];
- const char *start = date.contents();
- const char *end = start + date.length();
- return find_year(start, end, endp);
- }
- else
- return 0;
-}
-
-const char *reference::get_field(unsigned char c, const char **endp) const
-{
- if (field_index[c] != NULL_FIELD_INDEX) {
- string &f = field[field_index[c]];
- const char *start = f.contents();
- *endp = start + f.length();
- return start;
- }
- else
- return 0;
-}
-
-const char *reference::get_date(const char **endp) const
-{
- return get_field('D', endp);
-}
-
-const char *nth_field(int i, const char *start, const char **endp)
-{
- while (--i >= 0) {
- start = (char *)memchr(start, FIELD_SEPARATOR, *endp - start);
- if (!start)
- return 0;
- start++;
- }
- const char *e = (char *)memchr(start, FIELD_SEPARATOR, *endp - start);
- if (e)
- *endp = e;
- return start;
-}
-
-const char *reference::get_author(int i, const char **endp) const
-{
- for (const char *f = AUTHOR_FIELDS; *f != '\0'; f++) {
- const char *start = get_field(*f, endp);
- if (start) {
- if (strchr(MULTI_FIELD_NAMES, *f) != 0)
- return nth_field(i, start, endp);
- else if (i == 0)
- return start;
- else
- return 0;
- }
- }
- return 0;
-}
-
-const char *reference::get_author_last_name(int i, const char **endp) const
-{
- for (const char *f = AUTHOR_FIELDS; *f != '\0'; f++) {
- const char *start = get_field(*f, endp);
- if (start) {
- if (strchr(MULTI_FIELD_NAMES, *f) != 0) {
- start = nth_field(i, start, endp);
- if (!start)
- return 0;
- }
- if (*f == 'A')
- return find_last_name(start, *endp, endp);
- else
- return start;
- }
- }
- return 0;
-}
-
-void reference::set_date(string &d)
-{
- if (d.length() == 0)
- delete_field('D');
- else
- insert_field('D', d);
-}
-
-int same_year(const reference &r1, const reference &r2)
-{
- const char *ye1;
- const char *ys1 = r1.get_year(&ye1);
- const char *ye2;
- const char *ys2 = r2.get_year(&ye2);
- if (ys1 == 0) {
- if (ys2 == 0)
- return same_date(r1, r2);
- else
- return 0;
- }
- else if (ys2 == 0)
- return 0;
- else if (ye1 - ys1 != ye2 - ys2)
- return 0;
- else
- return memcmp(ys1, ys2, ye1 - ys1) == 0;
-}
-
-int same_date(const reference &r1, const reference &r2)
-{
- const char *e1;
- const char *s1 = r1.get_date(&e1);
- const char *e2;
- const char *s2 = r2.get_date(&e2);
- if (s1 == 0)
- return s2 == 0;
- else if (s2 == 0)
- return 0;
- else if (e1 - s1 != e2 - s2)
- return 0;
- else
- return memcmp(s1, s2, e1 - s1) == 0;
-}
-
-const char *reference::get_sort_field(int i, int si, int ssi,
- const char **endp) const
-{
- const char *start = sort_key.contents();
- const char *end = start + sort_key.length();
- if (i < 0) {
- *endp = end;
- return start;
- }
- while (--i >= 0) {
- start = (char *)memchr(start, SORT_SEP, end - start);
- if (!start)
- return 0;
- start++;
- }
- const char *e = (char *)memchr(start, SORT_SEP, end - start);
- if (e)
- end = e;
- if (si < 0) {
- *endp = end;
- return start;
- }
- while (--si >= 0) {
- start = (char *)memchr(start, SORT_SUB_SEP, end - start);
- if (!start)
- return 0;
- start++;
- }
- e = (char *)memchr(start, SORT_SUB_SEP, end - start);
- if (e)
- end = e;
- if (ssi < 0) {
- *endp = end;
- return start;
- }
- while (--ssi >= 0) {
- start = (char *)memchr(start, SORT_SUB_SUB_SEP, end - start);
- if (!start)
- return 0;
- start++;
- }
- e = (char *)memchr(start, SORT_SUB_SUB_SEP, end - start);
- if (e)
- end = e;
- *endp = end;
- return start;
-}
-
diff --git a/contrib/groff/src/preproc/refer/ref.h b/contrib/groff/src/preproc/refer/ref.h
deleted file mode 100644
index ffb81ac86986..000000000000
--- a/contrib/groff/src/preproc/refer/ref.h
+++ /dev/null
@@ -1,128 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2005 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-// declarations to avoid friend name injection problems
-int compare_reference(const reference &, const reference &);
-int same_reference(const reference &, const reference &);
-int same_year(const reference &, const reference &);
-int same_date(const reference &, const reference &);
-int same_author_last_name(const reference &, const reference &, int);
-int same_author_name(const reference &, const reference &, int);
-
-struct label_info;
-
-enum label_type { NORMAL_LABEL, SHORT_LABEL };
-const int N_LABEL_TYPES = 2;
-
-struct substring_position {
- int start;
- int length;
- substring_position() : start(-1) { }
-};
-
-class int_set {
- string v;
-public:
- int_set() { }
- void set(int i);
- int get(int i) const;
-};
-
-class reference {
-private:
- unsigned h;
- reference_id rid;
- int merged;
- string sort_key;
- int no;
- string *field;
- int nfields;
- unsigned char field_index[256];
- enum { NULL_FIELD_INDEX = 255 };
- string label;
- substring_position separator_pos;
- string short_label;
- substring_position short_separator_pos;
- label_info *label_ptr;
- string authors;
- int computed_authors;
- int last_needed_author;
- int nauthors;
- int_set last_name_unambiguous;
-
- int contains_field(char) const;
- void insert_field(unsigned char, string &s);
- void delete_field(unsigned char);
- void set_date(string &);
- const char *get_sort_field(int i, int si, int ssi, const char **endp) const;
- int merge_labels_by_parts(reference **, int, label_type, string &);
- int merge_labels_by_number(reference **, int, label_type, string &);
-public:
- reference(const char * = 0, int = -1, reference_id * = 0);
- ~reference();
- void output(FILE *);
- void print_sort_key_comment(FILE *);
- void set_number(int);
- int get_number() const { return no; }
- unsigned hash() const { return h; }
- const string &get_label(label_type type) const;
- const substring_position &get_separator_pos(label_type) const;
- int is_merged() const { return merged; }
- void compute_sort_key();
- void compute_hash_code();
- void pre_compute_label();
- void compute_label();
- void immediate_compute_label();
- int classify();
- void merge(reference &);
- int merge_labels(reference **, int, label_type, string &);
- int get_nauthors() const;
- void need_author(int);
- void set_last_name_unambiguous(int);
- void sortify_authors(int, string &) const;
- void canonicalize_authors(string &) const;
- void sortify_field(unsigned char, int, string &) const;
- const char *get_author(int, const char **) const;
- const char *get_author_last_name(int, const char **) const;
- const char *get_date(const char **) const;
- const char *get_year(const char **) const;
- const char *get_field(unsigned char, const char **) const;
- const label_info *get_label_ptr() const { return label_ptr; }
- const char *get_authors(const char **) const;
- // for sorting
- friend int compare_reference(const reference &r1, const reference &r2);
- // for merging
- friend int same_reference(const reference &, const reference &);
- friend int same_year(const reference &, const reference &);
- friend int same_date(const reference &, const reference &);
- friend int same_author_last_name(const reference &, const reference &, int);
- friend int same_author_name(const reference &, const reference &, int);
-};
-
-const char *find_year(const char *, const char *, const char **);
-const char *find_last_name(const char *, const char *, const char **);
-
-const char *nth_field(int i, const char *start, const char **endp);
-
-void capitalize(const char *ptr, const char *end, string &result);
-void reverse_name(const char *ptr, const char *end, string &result);
-void uppercase(const char *ptr, const char *end, string &result);
-void lowercase(const char *ptr, const char *end, string &result);
-void abbreviate_name(const char *ptr, const char *end, string &result);
diff --git a/contrib/groff/src/preproc/refer/refer.cpp b/contrib/groff/src/preproc/refer/refer.cpp
deleted file mode 100644
index 66afa4b385c3..000000000000
--- a/contrib/groff/src/preproc/refer/refer.cpp
+++ /dev/null
@@ -1,1242 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-#include "search.h"
-#include "command.h"
-
-extern "C" const char *Version_string;
-
-const char PRE_LABEL_MARKER = '\013';
-const char POST_LABEL_MARKER = '\014';
-const char LABEL_MARKER = '\015'; // label_type is added on
-
-#define FORCE_LEFT_BRACKET 04
-#define FORCE_RIGHT_BRACKET 010
-
-static FILE *outfp = stdout;
-
-string capitalize_fields;
-string reverse_fields;
-string abbreviate_fields;
-string period_before_last_name = ". ";
-string period_before_initial = ".";
-string period_before_hyphen = "";
-string period_before_other = ". ";
-string sort_fields;
-int annotation_field = -1;
-string annotation_macro;
-string discard_fields = "XYZ";
-string pre_label = "\\*([.";
-string post_label = "\\*(.]";
-string sep_label = ", ";
-int accumulate = 0;
-int move_punctuation = 0;
-int abbreviate_label_ranges = 0;
-string label_range_indicator;
-int label_in_text = 1;
-int label_in_reference = 1;
-int date_as_label = 0;
-int sort_adjacent_labels = 0;
-// Join exactly two authors with this.
-string join_authors_exactly_two = " and ";
-// When there are more than two authors join the last two with this.
-string join_authors_last_two = ", and ";
-// Otherwise join authors with this.
-string join_authors_default = ", ";
-string separate_label_second_parts = ", ";
-// Use this string to represent that there are other authors.
-string et_al = " et al";
-// Use et al only if it can replace at least this many authors.
-int et_al_min_elide = 2;
-// Use et al only if the total number of authors is at least this.
-int et_al_min_total = 3;
-
-
-int compatible_flag = 0;
-
-int short_label_flag = 0;
-
-static int recognize_R1_R2 = 1;
-
-search_list database_list;
-int search_default = 1;
-static int default_database_loaded = 0;
-
-static reference **citation = 0;
-static int ncitations = 0;
-static int citation_max = 0;
-
-static reference **reference_hash_table = 0;
-static int hash_table_size;
-static int nreferences = 0;
-
-static int need_syncing = 0;
-string pending_line;
-string pending_lf_lines;
-
-static void output_pending_line();
-static unsigned immediately_handle_reference(const string &);
-static void immediately_output_references();
-static unsigned store_reference(const string &);
-static void divert_to_temporary_file();
-static reference *make_reference(const string &, unsigned *);
-static void usage(FILE *stream);
-static void do_file(const char *);
-static void split_punct(string &line, string &punct);
-static void output_citation_group(reference **v, int n, label_type, FILE *fp);
-static void possibly_load_default_database();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- outfp = stdout;
- int finished_options = 0;
- int bib_flag = 0;
- int done_spec = 0;
-
- for (--argc, ++argv;
- !finished_options && argc > 0 && argv[0][0] == '-'
- && argv[0][1] != '\0';
- argv++, argc--) {
- const char *opt = argv[0] + 1;
- while (opt != 0 && *opt != '\0') {
- switch (*opt) {
- case 'C':
- compatible_flag = 1;
- opt++;
- break;
- case 'B':
- bib_flag = 1;
- label_in_reference = 0;
- label_in_text = 0;
- ++opt;
- if (*opt == '\0') {
- annotation_field = 'X';
- annotation_macro = "AP";
- }
- else if (csalnum(opt[0]) && opt[1] == '.' && opt[2] != '\0') {
- annotation_field = opt[0];
- annotation_macro = opt + 2;
- }
- opt = 0;
- break;
- case 'P':
- move_punctuation = 1;
- opt++;
- break;
- case 'R':
- recognize_R1_R2 = 0;
- opt++;
- break;
- case 'S':
- // Not a very useful spec.
- set_label_spec("(A.n|Q)', '(D.y|D)");
- done_spec = 1;
- pre_label = " (";
- post_label = ")";
- sep_label = "; ";
- opt++;
- break;
- case 'V':
- verify_flag = 1;
- opt++;
- break;
- case 'f':
- {
- const char *num = 0;
- if (*++opt == '\0') {
- if (argc > 1) {
- num = *++argv;
- --argc;
- }
- else {
- error("option `f' requires an argument");
- usage(stderr);
- exit(1);
- }
- }
- else {
- num = opt;
- opt = 0;
- }
- const char *ptr;
- for (ptr = num; *ptr; ptr++)
- if (!csdigit(*ptr)) {
- error("bad character `%1' in argument to -f option", *ptr);
- break;
- }
- if (*ptr == '\0') {
- string spec;
- spec = '%';
- spec += num;
- spec += '\0';
- set_label_spec(spec.contents());
- done_spec = 1;
- }
- break;
- }
- case 'b':
- label_in_text = 0;
- label_in_reference = 0;
- opt++;
- break;
- case 'e':
- accumulate = 1;
- opt++;
- break;
- case 'c':
- capitalize_fields = ++opt;
- opt = 0;
- break;
- case 'k':
- {
- char buf[5];
- if (csalpha(*++opt))
- buf[0] = *opt++;
- else {
- if (*opt != '\0')
- error("bad field name `%1'", *opt++);
- buf[0] = 'L';
- }
- buf[1] = '~';
- buf[2] = '%';
- buf[3] = 'a';
- buf[4] = '\0';
- set_label_spec(buf);
- done_spec = 1;
- }
- break;
- case 'a':
- {
- const char *ptr;
- for (ptr = ++opt; *ptr; ptr++)
- if (!csdigit(*ptr)) {
- error("argument to `a' option not a number");
- break;
- }
- if (*ptr == '\0') {
- reverse_fields = 'A';
- reverse_fields += opt;
- }
- opt = 0;
- }
- break;
- case 'i':
- linear_ignore_fields = ++opt;
- opt = 0;
- break;
- case 'l':
- {
- char buf[INT_DIGITS*2 + 11]; // A.n+2D.y-3%a
- strcpy(buf, "A.n");
- if (*++opt != '\0' && *opt != ',') {
- char *ptr;
- long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
- error("bad integer `%1' in `l' option", opt);
- opt = 0;
- break;
- }
- if (n < 0)
- n = 0;
- opt = ptr;
- sprintf(strchr(buf, '\0'), "+%ld", n);
- }
- strcat(buf, "D.y");
- if (*opt == ',')
- opt++;
- if (*opt != '\0') {
- char *ptr;
- long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
- error("bad integer `%1' in `l' option", opt);
- opt = 0;
- break;
- }
- if (n < 0)
- n = 0;
- sprintf(strchr(buf, '\0'), "-%ld", n);
- opt = ptr;
- if (*opt != '\0')
- error("argument to `l' option not of form `m,n'");
- }
- strcat(buf, "%a");
- if (!set_label_spec(buf))
- assert(0);
- done_spec = 1;
- }
- break;
- case 'n':
- search_default = 0;
- opt++;
- break;
- case 'p':
- {
- const char *filename = 0;
- if (*++opt == '\0') {
- if (argc > 1) {
- filename = *++argv;
- argc--;
- }
- else {
- error("option `p' requires an argument");
- usage(stderr);
- exit(1);
- }
- }
- else {
- filename = opt;
- opt = 0;
- }
- database_list.add_file(filename);
- }
- break;
- case 's':
- if (*++opt == '\0')
- sort_fields = "AD";
- else {
- sort_fields = opt;
- opt = 0;
- }
- accumulate = 1;
- break;
- case 't':
- {
- char *ptr;
- long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
- error("bad integer `%1' in `t' option", opt);
- opt = 0;
- break;
- }
- if (n < 1)
- n = 1;
- linear_truncate_len = int(n);
- opt = ptr;
- break;
- }
- case '-':
- if (opt[1] == '\0') {
- finished_options = 1;
- opt++;
- break;
- }
- if (strcmp(opt,"-version")==0) {
- case 'v':
- printf("GNU refer (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- if (strcmp(opt,"-help")==0) {
- usage(stdout);
- exit(0);
- break;
- }
- // fall through
- default:
- error("unrecognized option `%1'", *opt);
- usage(stderr);
- exit(1);
- break;
- }
- }
- }
- if (!done_spec)
- set_label_spec("%1");
- if (argc <= 0) {
- if (bib_flag)
- do_bib("-");
- else
- do_file("-");
- }
- else {
- for (int i = 0; i < argc; i++) {
- if (bib_flag)
- do_bib(argv[i]);
- else
- do_file(argv[i]);
- }
- }
- if (accumulate)
- output_references();
- if (fflush(stdout) < 0)
- fatal("output error");
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
-"usage: %s [-benvCPRS] [-aN] [-cXYZ] [-fN] [-iXYZ] [-kX] [-lM,N] [-p file]\n"
-" [-sXYZ] [-tN] [-BL.M] [files ...]\n",
- program_name);
-}
-
-static void possibly_load_default_database()
-{
- if (search_default && !default_database_loaded) {
- char *filename = getenv("REFER");
- if (filename)
- database_list.add_file(filename);
- else
- database_list.add_file(DEFAULT_INDEX, 1);
- default_database_loaded = 1;
- }
-}
-
-static int is_list(const string &str)
-{
- const char *start = str.contents();
- const char *end = start + str.length();
- while (end > start && csspace(end[-1]))
- end--;
- while (start < end && csspace(*start))
- start++;
- return end - start == 6 && memcmp(start, "$LIST$", 6) == 0;
-}
-
-static void do_file(const char *filename)
-{
- FILE *fp;
- if (strcmp(filename, "-") == 0) {
- fp = stdin;
- }
- else {
- errno = 0;
- fp = fopen(filename, "r");
- if (fp == 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return;
- }
- }
- current_filename = filename;
- fprintf(outfp, ".lf 1 %s\n", filename);
- string line;
- current_lineno = 0;
- for (;;) {
- line.clear();
- for (;;) {
- int c = getc(fp);
- if (c == EOF) {
- if (line.length() > 0)
- line += '\n';
- break;
- }
- if (invalid_input_char(c))
- error("invalid input character code %1", c);
- else {
- line += c;
- if (c == '\n')
- break;
- }
- }
- int len = line.length();
- if (len == 0)
- break;
- current_lineno++;
- if (len >= 2 && line[0] == '.' && line[1] == '[') {
- int start_lineno = current_lineno;
- int start_of_line = 1;
- string str;
- string post;
- string pre(line.contents() + 2, line.length() - 3);
- for (;;) {
- int c = getc(fp);
- if (c == EOF) {
- error_with_file_and_line(current_filename, start_lineno,
- "missing `.]' line");
- break;
- }
- if (start_of_line)
- current_lineno++;
- if (start_of_line && c == '.') {
- int d = getc(fp);
- if (d == ']') {
- while ((d = getc(fp)) != '\n' && d != EOF) {
- if (invalid_input_char(d))
- error("invalid input character code %1", d);
- else
- post += d;
- }
- break;
- }
- if (d != EOF)
- ungetc(d, fp);
- }
- if (invalid_input_char(c))
- error("invalid input character code %1", c);
- else
- str += c;
- start_of_line = (c == '\n');
- }
- if (is_list(str)) {
- output_pending_line();
- if (accumulate)
- output_references();
- else
- error("found `$LIST$' but not accumulating references");
- }
- else {
- unsigned flags = (accumulate
- ? store_reference(str)
- : immediately_handle_reference(str));
- if (label_in_text) {
- if (accumulate && outfp == stdout)
- divert_to_temporary_file();
- if (pending_line.length() == 0) {
- warning("can't attach citation to previous line");
- }
- else
- pending_line.set_length(pending_line.length() - 1);
- string punct;
- if (move_punctuation)
- split_punct(pending_line, punct);
- int have_text = pre.length() > 0 || post.length() > 0;
- label_type lt = label_type(flags & ~(FORCE_LEFT_BRACKET
- |FORCE_RIGHT_BRACKET));
- if ((flags & FORCE_LEFT_BRACKET) || !have_text)
- pending_line += PRE_LABEL_MARKER;
- pending_line += pre;
- char lm = LABEL_MARKER + (int)lt;
- pending_line += lm;
- pending_line += post;
- if ((flags & FORCE_RIGHT_BRACKET) || !have_text)
- pending_line += POST_LABEL_MARKER;
- pending_line += punct;
- pending_line += '\n';
- }
- }
- need_syncing = 1;
- }
- else if (len >= 4
- && line[0] == '.' && line[1] == 'l' && line[2] == 'f'
- && (compatible_flag || line[3] == '\n' || line[3] == ' ')) {
- pending_lf_lines += line;
- line += '\0';
- if (interpret_lf_args(line.contents() + 3))
- current_lineno--;
- }
- else if (recognize_R1_R2
- && len >= 4
- && line[0] == '.' && line[1] == 'R' && line[2] == '1'
- && (compatible_flag || line[3] == '\n' || line[3] == ' ')) {
- line.clear();
- int start_of_line = 1;
- int start_lineno = current_lineno;
- for (;;) {
- int c = getc(fp);
- if (c != EOF && start_of_line)
- current_lineno++;
- if (start_of_line && c == '.') {
- c = getc(fp);
- if (c == 'R') {
- c = getc(fp);
- if (c == '2') {
- c = getc(fp);
- if (compatible_flag || c == ' ' || c == '\n' || c == EOF) {
- while (c != EOF && c != '\n')
- c = getc(fp);
- break;
- }
- else {
- line += '.';
- line += 'R';
- line += '2';
- }
- }
- else {
- line += '.';
- line += 'R';
- }
- }
- else
- line += '.';
- }
- if (c == EOF) {
- error_with_file_and_line(current_filename, start_lineno,
- "missing `.R2' line");
- break;
- }
- if (invalid_input_char(c))
- error("invalid input character code %1", int(c));
- else {
- line += c;
- start_of_line = c == '\n';
- }
- }
- output_pending_line();
- if (accumulate)
- output_references();
- else
- nreferences = 0;
- process_commands(line, current_filename, start_lineno + 1);
- need_syncing = 1;
- }
- else {
- output_pending_line();
- pending_line = line;
- }
- }
- need_syncing = 0;
- output_pending_line();
- if (fp != stdin)
- fclose(fp);
-}
-
-class label_processing_state {
- enum {
- NORMAL,
- PENDING_LABEL,
- PENDING_LABEL_POST,
- PENDING_LABEL_POST_PRE,
- PENDING_POST
- } state;
- label_type type; // type of pending labels
- int count; // number of pending labels
- reference **rptr; // pointer to next reference
- int rcount; // number of references left
- FILE *fp;
- int handle_pending(int c);
-public:
- label_processing_state(reference **, int, FILE *);
- ~label_processing_state();
- void process(int c);
-};
-
-static void output_pending_line()
-{
- if (label_in_text && !accumulate && ncitations > 0) {
- label_processing_state state(citation, ncitations, outfp);
- int len = pending_line.length();
- for (int i = 0; i < len; i++)
- state.process((unsigned char)(pending_line[i]));
- }
- else
- put_string(pending_line, outfp);
- pending_line.clear();
- if (pending_lf_lines.length() > 0) {
- put_string(pending_lf_lines, outfp);
- pending_lf_lines.clear();
- }
- if (!accumulate)
- immediately_output_references();
- if (need_syncing) {
- fprintf(outfp, ".lf %d %s\n", current_lineno, current_filename);
- need_syncing = 0;
- }
-}
-
-static void split_punct(string &line, string &punct)
-{
- const char *start = line.contents();
- const char *end = start + line.length();
- const char *ptr = start;
- const char *last_token_start = 0;
- for (;;) {
- if (ptr >= end)
- break;
- last_token_start = ptr;
- if (*ptr == PRE_LABEL_MARKER || *ptr == POST_LABEL_MARKER
- || (*ptr >= LABEL_MARKER && *ptr < LABEL_MARKER + N_LABEL_TYPES))
- ptr++;
- else if (!get_token(&ptr, end))
- break;
- }
- if (last_token_start) {
- const token_info *ti = lookup_token(last_token_start, end);
- if (ti->is_punct()) {
- punct.append(last_token_start, end - last_token_start);
- line.set_length(last_token_start - start);
- }
- }
-}
-
-static void divert_to_temporary_file()
-{
- outfp = xtmpfile();
-}
-
-static void store_citation(reference *ref)
-{
- if (ncitations >= citation_max) {
- if (citation == 0)
- citation = new reference*[citation_max = 100];
- else {
- reference **old_citation = citation;
- citation_max *= 2;
- citation = new reference *[citation_max];
- memcpy(citation, old_citation, ncitations*sizeof(reference *));
- a_delete old_citation;
- }
- }
- citation[ncitations++] = ref;
-}
-
-static unsigned store_reference(const string &str)
-{
- if (reference_hash_table == 0) {
- reference_hash_table = new reference *[17];
- hash_table_size = 17;
- for (int i = 0; i < hash_table_size; i++)
- reference_hash_table[i] = 0;
- }
- unsigned flags;
- reference *ref = make_reference(str, &flags);
- ref->compute_hash_code();
- unsigned h = ref->hash();
- reference **ptr;
- for (ptr = reference_hash_table + (h % hash_table_size);
- *ptr != 0;
- ((ptr == reference_hash_table)
- ? (ptr = reference_hash_table + hash_table_size - 1)
- : --ptr))
- if (same_reference(**ptr, *ref))
- break;
- if (*ptr != 0) {
- if (ref->is_merged())
- warning("fields ignored because reference already used");
- delete ref;
- ref = *ptr;
- }
- else {
- *ptr = ref;
- ref->set_number(nreferences);
- nreferences++;
- ref->pre_compute_label();
- ref->compute_sort_key();
- if (nreferences*2 >= hash_table_size) {
- // Rehash it.
- reference **old_table = reference_hash_table;
- int old_size = hash_table_size;
- hash_table_size = next_size(hash_table_size);
- reference_hash_table = new reference*[hash_table_size];
- int i;
- for (i = 0; i < hash_table_size; i++)
- reference_hash_table[i] = 0;
- for (i = 0; i < old_size; i++)
- if (old_table[i]) {
- reference **p;
- for (p = (reference_hash_table
- + (old_table[i]->hash() % hash_table_size));
- *p;
- ((p == reference_hash_table)
- ? (p = reference_hash_table + hash_table_size - 1)
- : --p))
- ;
- *p = old_table[i];
- }
- a_delete old_table;
- }
- }
- if (label_in_text)
- store_citation(ref);
- return flags;
-}
-
-unsigned immediately_handle_reference(const string &str)
-{
- unsigned flags;
- reference *ref = make_reference(str, &flags);
- ref->set_number(nreferences);
- if (label_in_text || label_in_reference) {
- ref->pre_compute_label();
- ref->immediate_compute_label();
- }
- nreferences++;
- store_citation(ref);
- return flags;
-}
-
-static void immediately_output_references()
-{
- for (int i = 0; i < ncitations; i++) {
- reference *ref = citation[i];
- if (label_in_reference) {
- fputs(".ds [F ", outfp);
- const string &label = ref->get_label(NORMAL_LABEL);
- if (label.length() > 0
- && (label[0] == ' ' || label[0] == '\\' || label[0] == '"'))
- putc('"', outfp);
- put_string(label, outfp);
- putc('\n', outfp);
- }
- ref->output(outfp);
- delete ref;
- }
- ncitations = 0;
-}
-
-static void output_citation_group(reference **v, int n, label_type type,
- FILE *fp)
-{
- if (sort_adjacent_labels) {
- // Do an insertion sort. Usually n will be very small.
- for (int i = 1; i < n; i++) {
- int num = v[i]->get_number();
- reference *temp = v[i];
- int j;
- for (j = i - 1; j >= 0 && v[j]->get_number() > num; j--)
- v[j + 1] = v[j];
- v[j + 1] = temp;
- }
- }
- // This messes up if !accumulate.
- if (accumulate && n > 1) {
- // remove duplicates
- int j = 1;
- for (int i = 1; i < n; i++)
- if (v[i]->get_label(type) != v[i - 1]->get_label(type))
- v[j++] = v[i];
- n = j;
- }
- string merged_label;
- for (int i = 0; i < n; i++) {
- int nmerged = v[i]->merge_labels(v + i + 1, n - i - 1, type, merged_label);
- if (nmerged > 0) {
- put_string(merged_label, fp);
- i += nmerged;
- }
- else
- put_string(v[i]->get_label(type), fp);
- if (i < n - 1)
- put_string(sep_label, fp);
- }
-}
-
-
-label_processing_state::label_processing_state(reference **p, int n, FILE *f)
-: state(NORMAL), count(0), rptr(p), rcount(n), fp(f)
-{
-}
-
-label_processing_state::~label_processing_state()
-{
- int handled = handle_pending(EOF);
- assert(!handled);
- assert(rcount == 0);
-}
-
-int label_processing_state::handle_pending(int c)
-{
- switch (state) {
- case NORMAL:
- break;
- case PENDING_LABEL:
- if (c == POST_LABEL_MARKER) {
- state = PENDING_LABEL_POST;
- return 1;
- }
- else {
- output_citation_group(rptr, count, type, fp);
- rptr += count ;
- rcount -= count;
- state = NORMAL;
- }
- break;
- case PENDING_LABEL_POST:
- if (c == PRE_LABEL_MARKER) {
- state = PENDING_LABEL_POST_PRE;
- return 1;
- }
- else {
- output_citation_group(rptr, count, type, fp);
- rptr += count;
- rcount -= count;
- put_string(post_label, fp);
- state = NORMAL;
- }
- break;
- case PENDING_LABEL_POST_PRE:
- if (c >= LABEL_MARKER
- && c < LABEL_MARKER + N_LABEL_TYPES
- && c - LABEL_MARKER == type) {
- count += 1;
- state = PENDING_LABEL;
- return 1;
- }
- else {
- output_citation_group(rptr, count, type, fp);
- rptr += count;
- rcount -= count;
- put_string(sep_label, fp);
- state = NORMAL;
- }
- break;
- case PENDING_POST:
- if (c == PRE_LABEL_MARKER) {
- put_string(sep_label, fp);
- state = NORMAL;
- return 1;
- }
- else {
- put_string(post_label, fp);
- state = NORMAL;
- }
- break;
- }
- return 0;
-}
-
-void label_processing_state::process(int c)
-{
- if (handle_pending(c))
- return;
- assert(state == NORMAL);
- switch (c) {
- case PRE_LABEL_MARKER:
- put_string(pre_label, fp);
- state = NORMAL;
- break;
- case POST_LABEL_MARKER:
- state = PENDING_POST;
- break;
- case LABEL_MARKER:
- case LABEL_MARKER + 1:
- count = 1;
- state = PENDING_LABEL;
- type = label_type(c - LABEL_MARKER);
- break;
- default:
- state = NORMAL;
- putc(c, fp);
- break;
- }
-}
-
-extern "C" {
-
-int rcompare(const void *p1, const void *p2)
-{
- return compare_reference(**(reference **)p1, **(reference **)p2);
-}
-
-}
-
-void output_references()
-{
- assert(accumulate);
- if (!hash_table_size) {
- error("nothing to reference (probably `bibliography' before `sort')");
- accumulate = 0;
- nreferences = 0;
- return;
- }
- if (nreferences > 0) {
- int j = 0;
- int i;
- for (i = 0; i < hash_table_size; i++)
- if (reference_hash_table[i] != 0)
- reference_hash_table[j++] = reference_hash_table[i];
- assert(j == nreferences);
- for (; j < hash_table_size; j++)
- reference_hash_table[j] = 0;
- qsort(reference_hash_table, nreferences, sizeof(reference*), rcompare);
- for (i = 0; i < nreferences; i++)
- reference_hash_table[i]->set_number(i);
- compute_labels(reference_hash_table, nreferences);
- }
- if (outfp != stdout) {
- rewind(outfp);
- {
- label_processing_state state(citation, ncitations, stdout);
- int c;
- while ((c = getc(outfp)) != EOF)
- state.process(c);
- }
- ncitations = 0;
- fclose(outfp);
- outfp = stdout;
- }
- if (nreferences > 0) {
- fputs(".]<\n", outfp);
- for (int i = 0; i < nreferences; i++) {
- if (sort_fields.length() > 0)
- reference_hash_table[i]->print_sort_key_comment(outfp);
- if (label_in_reference) {
- fputs(".ds [F ", outfp);
- const string &label = reference_hash_table[i]->get_label(NORMAL_LABEL);
- if (label.length() > 0
- && (label[0] == ' ' || label[0] == '\\' || label[0] == '"'))
- putc('"', outfp);
- put_string(label, outfp);
- putc('\n', outfp);
- }
- reference_hash_table[i]->output(outfp);
- delete reference_hash_table[i];
- reference_hash_table[i] = 0;
- }
- fputs(".]>\n", outfp);
- nreferences = 0;
- }
- clear_labels();
-}
-
-static reference *find_reference(const char *query, int query_len)
-{
- // This is so that error messages look better.
- while (query_len > 0 && csspace(query[query_len - 1]))
- query_len--;
- string str;
- for (int i = 0; i < query_len; i++)
- str += query[i] == '\n' ? ' ' : query[i];
- str += '\0';
- possibly_load_default_database();
- search_list_iterator iter(&database_list, str.contents());
- reference_id rid;
- const char *start;
- int len;
- if (!iter.next(&start, &len, &rid)) {
- error("no matches for `%1'", str.contents());
- return 0;
- }
- const char *end = start + len;
- while (start < end) {
- if (*start == '%')
- break;
- while (start < end && *start++ != '\n')
- ;
- }
- if (start >= end) {
- error("found a reference for `%1' but it didn't contain any fields",
- str.contents());
- return 0;
- }
- reference *result = new reference(start, end - start, &rid);
- if (iter.next(&start, &len, &rid))
- warning("multiple matches for `%1'", str.contents());
- return result;
-}
-
-static reference *make_reference(const string &str, unsigned *flagsp)
-{
- const char *start = str.contents();
- const char *end = start + str.length();
- const char *ptr = start;
- while (ptr < end) {
- if (*ptr == '%')
- break;
- while (ptr < end && *ptr++ != '\n')
- ;
- }
- *flagsp = 0;
- for (; start < ptr; start++) {
- if (*start == '#')
- *flagsp = (SHORT_LABEL | (*flagsp & (FORCE_RIGHT_BRACKET
- | FORCE_LEFT_BRACKET)));
- else if (*start == '[')
- *flagsp |= FORCE_LEFT_BRACKET;
- else if (*start == ']')
- *flagsp |= FORCE_RIGHT_BRACKET;
- else if (!csspace(*start))
- break;
- }
- if (start >= end) {
- error("empty reference");
- return new reference;
- }
- reference *database_ref = 0;
- if (start < ptr)
- database_ref = find_reference(start, ptr - start);
- reference *inline_ref = 0;
- if (ptr < end)
- inline_ref = new reference(ptr, end - ptr);
- if (inline_ref) {
- if (database_ref) {
- database_ref->merge(*inline_ref);
- delete inline_ref;
- return database_ref;
- }
- else
- return inline_ref;
- }
- else if (database_ref)
- return database_ref;
- else
- return new reference;
-}
-
-static void do_ref(const string &str)
-{
- if (accumulate)
- (void)store_reference(str);
- else {
- (void)immediately_handle_reference(str);
- immediately_output_references();
- }
-}
-
-static void trim_blanks(string &str)
-{
- const char *start = str.contents();
- const char *end = start + str.length();
- while (end > start && end[-1] != '\n' && csspace(end[-1]))
- --end;
- str.set_length(end - start);
-}
-
-void do_bib(const char *filename)
-{
- FILE *fp;
- if (strcmp(filename, "-") == 0)
- fp = stdin;
- else {
- errno = 0;
- fp = fopen(filename, "r");
- if (fp == 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return;
- }
- current_filename = filename;
- }
- enum {
- START, MIDDLE, BODY, BODY_START, BODY_BLANK, BODY_DOT
- } state = START;
- string body;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- if (invalid_input_char(c)) {
- error("invalid input character code %1", c);
- continue;
- }
- switch (state) {
- case START:
- if (c == '%') {
- body = c;
- state = BODY;
- }
- else if (c != '\n')
- state = MIDDLE;
- break;
- case MIDDLE:
- if (c == '\n')
- state = START;
- break;
- case BODY:
- body += c;
- if (c == '\n')
- state = BODY_START;
- break;
- case BODY_START:
- if (c == '\n') {
- do_ref(body);
- state = START;
- }
- else if (c == '.')
- state = BODY_DOT;
- else if (csspace(c)) {
- state = BODY_BLANK;
- body += c;
- }
- else {
- body += c;
- state = BODY;
- }
- break;
- case BODY_BLANK:
- if (c == '\n') {
- trim_blanks(body);
- do_ref(body);
- state = START;
- }
- else if (csspace(c))
- body += c;
- else {
- body += c;
- state = BODY;
- }
- break;
- case BODY_DOT:
- if (c == ']') {
- do_ref(body);
- state = MIDDLE;
- }
- else {
- body += '.';
- body += c;
- state = c == '\n' ? BODY_START : BODY;
- }
- break;
- default:
- assert(0);
- }
- if (c == '\n')
- current_lineno++;
- }
- switch (state) {
- case START:
- case MIDDLE:
- break;
- case BODY:
- body += '\n';
- do_ref(body);
- break;
- case BODY_DOT:
- case BODY_START:
- do_ref(body);
- break;
- case BODY_BLANK:
- trim_blanks(body);
- do_ref(body);
- break;
- }
- fclose(fp);
-}
-
-// from the Dragon Book
-
-unsigned hash_string(const char *s, int len)
-{
- const char *end = s + len;
- unsigned h = 0, g;
- while (s < end) {
- h <<= 4;
- h += *s++;
- if ((g = h & 0xf0000000) != 0) {
- h ^= g >> 24;
- h ^= g;
- }
- }
- return h;
-}
-
-int next_size(int n)
-{
- static const int table_sizes[] = {
- 101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009,
- 80021, 160001, 500009, 1000003, 2000003, 4000037, 8000009,
- 16000057, 32000011, 64000031, 128000003, 0
- };
-
- const int *p;
- for (p = table_sizes; *p <= n && *p != 0; p++)
- ;
- assert(*p != 0);
- return *p;
-}
-
diff --git a/contrib/groff/src/preproc/refer/refer.h b/contrib/groff/src/preproc/refer/refer.h
deleted file mode 100644
index ac871cfae76d..000000000000
--- a/contrib/groff/src/preproc/refer/refer.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "cmap.h"
-
-#include "defs.h"
-
-unsigned hash_string(const char *, int);
-int next_size(int);
-
-extern string capitalize_fields;
-extern string reverse_fields;
-extern string abbreviate_fields;
-extern string period_before_last_name;
-extern string period_before_initial;
-extern string period_before_hyphen;
-extern string period_before_other;
-extern string sort_fields;
-extern int annotation_field;
-extern string annotation_macro;
-extern string discard_fields;
-extern string articles;
-extern int abbreviate_label_ranges;
-extern string label_range_indicator;
-extern int date_as_label;
-extern string join_authors_exactly_two;
-extern string join_authors_last_two;
-extern string join_authors_default;
-extern string separate_label_second_parts;
-extern string et_al;
-extern int et_al_min_elide;
-extern int et_al_min_total;
-
-extern int compatible_flag;
-
-extern int set_label_spec(const char *);
-extern int set_date_label_spec(const char *);
-extern int set_short_label_spec(const char *);
-
-extern int short_label_flag;
-
-void clear_labels();
-void command_error(const char *,
- const errarg &arg1 = empty_errarg,
- const errarg &arg2 = empty_errarg,
- const errarg &arg3 = empty_errarg);
-
-class reference;
-
-void compute_labels(reference **, int);
diff --git a/contrib/groff/src/preproc/refer/refer.man b/contrib/groff/src/preproc/refer/refer.man
deleted file mode 100644
index 0881657d4044..000000000000
--- a/contrib/groff/src/preproc/refer/refer.man
+++ /dev/null
@@ -1,1492 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.de TQ
-. br
-. ns
-. TP \\$1
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-.
-.
-..
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"
-.
-.
-.TH @G@REFER @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.
-.SH NAME
-@g@refer \- preprocess bibliographic references for groff
-.
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@refer 'u
-.ti \niu
-.B @g@refer
-.
-.de OP
-. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-. el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-benvCPRS
-.OP \-a n
-.OP \-c fields
-.OP \-f n
-.OP \-i fields
-.OP \-k field
-.OP \-l m,n
-.OP \-p \%filename
-.OP \-s fields
-.OP \-t n
-.OP \-B field.macro
-.RI [\ \%filename \|.\|.\|.\ ]
-.br
-.ad \na
-.
-.LP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.
-.SH DESCRIPTION
-This file documents the GNU version of
-.BR refer ,
-which is part of the groff document formatting system.
-.B refer
-copies the contents of
-.IR filename \|.\|.\|.\&
-to the standard output,
-except that lines between
-.B .[
-and
-.B .]\&
-are interpreted as citations,
-and lines between
-.B .R1
-and
-.B .R2
-are interpreted as commands about how citations are to be processed.
-.
-.LP
-Each citation specifies a reference.
-The citation can specify a reference that is contained in
-a bibliographic database by giving a set of keywords
-that only that reference contains.
-Alternatively it can specify a reference by supplying a database
-record in the citation.
-A combination of these alternatives is also possible.
-.
-.LP
-For each citation,
-.B refer
-can produce a mark in the text.
-This mark consists of some label which can be separated from
-the text and from other labels in various ways.
-For each reference it also outputs
-.B groff
-commands that can be used by a macro package to produce a formatted
-reference for each citation.
-The output of
-.B refer
-must therefore be processed using a suitable macro package.
-The
-.B \-ms
-and
-.B \-me
-macros are both suitable.
-The commands to format a citation's reference can be output immediately after
-the citation,
-or the references may be accumulated,
-and the commands output at some later point.
-If the references are accumulated, then multiple citations of the same
-reference will produce a single formatted reference.
-.
-.LP
-The interpretation of lines between
-.B .R1
-and
-.B .R2
-as commands is a new feature of GNU
-.BR refer .
-Documents making use of this feature can still be processed by
-Unix refer just by adding the lines
-.
-.RS
-.LP
-.nf
-.ft B
-\&.de R1
-\&.ig R2
-\&..
-.ft
-.fi
-.RE
-.
-to the beginning of the document.
-This will cause
-.B troff
-to ignore everything between
-.B .R1
-and
-.BR .R2 .
-The effect of some commands can also be achieved by options.
-These options are supported mainly for compatibility with Unix refer.
-It is usually more convenient to use commands.
-.
-.LP
-.B refer
-generates
-.B .lf
-lines so that filenames and line numbers in messages produced
-by commands that read
-.B refer
-output will be correct;
-it also interprets lines beginning with
-.B .lf
-so that filenames and line numbers in the messages and
-.B .lf
-lines that it produces will be accurate even if the input has been
-preprocessed by a command such as
-.BR @g@soelim (@MAN1EXT@).
-.
-.
-.
-.SH OPTIONS
-.
-.LP
-Most options are equivalent to commands
-(for a description of these commands see the
-.B Commands
-subsection):
-.
-.nr a \n(.j
-.ad l
-.TP
-.B \-b
-.B "no-label-in-text; no-label-in-reference"
-.
-.TP
-.B \-e
-.B accumulate
-.
-.TP
-.B \-n
-.B no-default-database
-.
-.TP
-.B \-C
-.B compatible
-.
-.TP
-.B \-P
-.B move-punctuation
-.
-.TP
-.B \-S
-.B
-label\ "(A.n|Q)\ ',\ '\ (D.y|D)"; \%bracket-label\ "\ ("\ )\ ";\ "
-.
-.TP
-.BI \-a n
-.B reverse
-.BI A n
-.
-.TP
-.BI \-c fields
-.B capitalize
-.I fields
-.
-.TP
-.BI \-f n
-.B label
-.BI % n
-.
-.TP
-.BI \-i fields
-.B search-ignore
-.I fields
-.
-.TP
-.B \-k
-.B label
-.B L\(ti%a
-.
-.TP
-.BI \-k field
-.B label
-.IB field \(ti%a
-.
-.TP
-.B \-l
-.B label
-.BI A.nD.y%a
-.
-.TP
-.BI \-l m
-.B label
-.BI A.n+ m D.y%a
-.
-.TP
-.BI \-l, n
-.B label
-.BI A.nD.y\- n %a
-.
-.TP
-.BI \-l m , n
-.B label
-.BI A.n+ m D.y\- n %a
-.
-.TP
-.BI \-p filename
-.B database
-.I filename
-.
-.TP
-.BI \-s spec
-.B sort
-.I spec
-.
-.TP
-.BI \-t n
-.B search-truncate
-.I n
-.ad \na
-.
-.LP
-These options are equivalent to the following commands with the
-addition that the filenames specified on the command line are
-processed as if they were arguments to the
-.B bibliography
-command instead of in the normal way:
-.
-.TP
-.B \-B
-.B "annotate X AP; no-label-in-reference"
-.
-.TP
-.BI \-B field . macro
-.B annotate
-.I field
-.IB macro ;
-.B no-label-in-reference
-.
-.LP
-The following options have no equivalent commands:
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-R
-Don't recognize lines beginning with
-.BR .R1 / .R2 .
-.
-.
-.
-.SH USAGE
-.
-.
-.SS Bibliographic databases
-The bibliographic database is a text file consisting of records
-separated by one or more blank lines.
-Within each record fields start with a
-.B %
-at the beginning of a line.
-Each field has a one character name that immediately follows the
-.BR % .
-It is best to use only upper and lower case letters for the names
-of fields.
-The name of the field should be followed by exactly one space,
-and then by the contents of the field.
-Empty fields are ignored.
-The conventional meaning of each field is as follows:
-.
-.TP
-.B A
-The name of an author.
-If the name contains a title such as
-.B Jr.\&
-at the end,
-it should be separated from the last name by a comma.
-There can be multiple occurrences of the
-.B A
-field.
-The order is significant.
-It is a good idea always to supply an
-.B A
-field or a
-.B Q
-field.
-.
-.TP
-.B B
-For an article that is part of a book, the title of the book.
-.
-.TP
-.B C
-The place (city) of publication.
-.
-.TP
-.B D
-The date of publication.
-The year should be specified in full.
-If the month is specified, the name rather than the number of the month
-should be used, but only the first three letters are required.
-It is a good idea always to supply a
-.B D
-field;
-if the date is unknown, a value such as
-.B in press
-or
-.B unknown
-can be used.
-.
-.TP
-.B E
-For an article that is part of a book, the name of an editor of the book.
-Where the work has editors and no authors,
-the names of the editors should be given as
-.B A
-fields and
-.B ,\ (ed)
-or
-.B ,\ (eds)
-should be appended to the last author.
-.
-.TP
-.B G
-US Government ordering number.
-.
-.TP
-.B I
-The publisher (issuer).
-.
-.TP
-.B J
-For an article in a journal, the name of the journal.
-.
-.TP
-.B K
-Keywords to be used for searching.
-.
-.TP
-.B L
-Label.
-.
-.TP
-.B N
-Journal issue number.
-.
-.TP
-.B O
-Other information.
-This is usually printed at the end of the reference.
-.
-.TP
-.B P
-Page number.
-A range of pages can be specified as
-.IB m \- n\fR.
-.
-.TP
-.B Q
-The name of the author, if the author is not a person.
-This will only be used if there are no
-.B A
-fields.
-There can only be one
-.B Q
-field.
-.
-.TP
-.B R
-Technical report number.
-.
-.TP
-.B S
-Series name.
-.
-.TP
-.B T
-Title.
-For an article in a book or journal,
-this should be the title of the article.
-.
-.TP
-.B V
-Volume number of the journal or book.
-.
-.TP
-.B X
-Annotation.
-.
-.LP
-For all fields except
-.B A
-and
-.BR E ,
-if there is more than one occurrence of a particular field in a record,
-only the last such field will be used.
-.
-.LP
-If accent strings are used, they should follow the character to be accented.
-This means that the
-.B AM
-macro must be used with the
-.B \-ms
-macros.
-Accent strings should not be quoted:
-use one
-.B \e
-rather than two.
-.
-.
-.SS Citations
-The format of a citation is
-.
-.RS
-.BI .[ opening-text
-.br
-.I "flags keywords"
-.br
-.I fields
-.br
-.BI .] closing-text
-.RE
-.
-.LP
-The
-.IR opening-text ,
-.IR closing-text
-and
-.I flags
-components are optional.
-Only one of the
-.I keywords
-and
-.I fields
-components need be specified.
-.
-.LP
-The
-.I keywords
-component says to search the bibliographic databases for a reference
-that contains all the words in
-.IR keywords .
-It is an error if more than one reference if found.
-.
-.LP
-The
-.I fields
-components specifies additional fields to replace or supplement
-those specified in the reference.
-When references are being accumulated and the
-.I keywords
-component is non-empty,
-then additional fields should be specified only on the first
-occasion that a particular reference is cited,
-and will apply to all citations of that reference.
-.
-.LP
-The
-.I opening-text
-and
-.I closing-text
-component specifies strings to be used to bracket the label instead
-of the strings specified in the
-.B bracket-label
-command.
-If either of these components is non-empty,
-the strings specified in the
-.B bracket-label
-command will not be used;
-this behaviour can be altered using the
-.B [
-and
-.B ]
-flags.
-Note that leading and trailing spaces are significant for these components.
-.
-.LP
-The
-.I flags
-component is a list of
-non-alphanumeric characters each of which modifies the treatment
-of this particular citation.
-Unix refer will treat these flags as part of the keywords and
-so will ignore them since they are non-alphanumeric.
-The following flags are currently recognized:
-.
-.TP
-.B #
-This says to use the label specified by the
-.B short-label
-command,
-instead of that specified by the
-.B label
-command.
-If no short label has been specified, the normal label will be used.
-Typically the short label is used with author-date labels
-and consists of only the date and possibly a disambiguating letter;
-the
-.B #
-is supposed to be suggestive of a numeric type of label.
-.
-.TP
-.B [
-Precede
-.I opening-text
-with the first string specified in the
-.B bracket-label
-command.
-.
-.TP
-.B ]
-Follow
-.I closing-text
-with the second string specified in the
-.B bracket-label
-command.
-.
-.LP
-One advantages of using the
-.B [
-and
-.B ]
-flags rather than including the brackets in
-.I opening-text
-and
-.I closing-text
-is that
-you can change the style of bracket used in the document just by changing the
-.B bracket-label
-command.
-Another advantage is that sorting and merging of citations
-will not necessarily be inhibited if the flags are used.
-.
-.LP
-If a label is to be inserted into the text,
-it will be attached to the line preceding the
-.B .[
-line.
-If there is no such line, then an extra line will be inserted before the
-.B .[
-line and a warning will be given.
-.
-.LP
-There is no special notation for making a citation to multiple references.
-Just use a sequence of citations, one for each reference.
-Don't put anything between the citations.
-The labels for all the citations will be attached to the line preceding
-the first citation.
-The labels may also be sorted or merged.
-See the description of the
-.B <>
-label expression, and of the
-.B sort-adjacent-labels
-and
-.B abbreviate-label-ranges
-command.
-A label will not be merged if its citation has a non-empty
-.I opening-text
-or
-.IR closing-text .
-However, the labels for a citation using the
-.B ]
-flag and without any
-.I closing-text
-immediately followed by a citation using the
-.B [
-flag and without any
-.I opening-text
-may be sorted and merged
-even though the first citation's
-.I opening-text
-or the second citation's
-.I closing-text
-is non-empty.
-(If you wish to prevent this just make the first citation's
-.I closing-text
-.BR \e& .)
-.
-.
-.SS Commands
-Commands are contained between lines starting with
-.B .R1
-and
-.BR .R2 .
-Recognition of these lines can be prevented by the
-.B \-R
-option.
-When a
-.B .R1
-line is recognized any accumulated references are flushed out.
-Neither
-.B .R1
-nor
-.B .R2
-lines,
-nor anything between them
-is output.
-.
-.LP
-Commands are separated by newlines or
-.BR ; s.
-.B #
-introduces a comment that extends to the end of the line
-(but does not conceal the newline).
-Each command is broken up into words.
-Words are separated by spaces or tabs.
-A word that begins with
-.B \(ts
-extends to the next
-.B \(ts
-that is not followed by another
-.BR \(ts .
-If there is no such
-.B \(ts
-the word extends to the end of the line.
-Pairs of
-.B \(ts
-in a word beginning with
-.B \(ts
-collapse to a single
-.BR \(ts .
-Neither
-.B #
-nor
-.B ;
-are recognized inside
-.BR \(ts s.
-A line can be continued by ending it with
-.BR \e ;
-this works everywhere except after a
-.BR # .
-.
-.LP
-.ds n \fR*
-Each command
-.I name
-that is marked with \*n has an associated negative command
-.BI no- name
-that undoes the effect of
-.IR name .
-For example, the
-.B no-sort
-command specifies that references should not be sorted.
-The negative commands take no arguments.
-.
-.LP
-In the following description each argument must be a single word;
-.I field
-is used for a single upper or lower case letter naming a field;
-.I fields
-is used for a sequence of such letters;
-.I m
-and
-.I n
-are used for a non-negative numbers;
-.I string
-is used for an arbitrary string;
-.I filename
-is used for the name of a file.
-.
-.Tp \w'\fBabbreviate-label-ranges'u+2n
-.BI abbreviate\*n\ fields\ string1\ string2\ string3\ string4
-Abbreviate the first names of
-.IR fields .
-An initial letter will be separated from another initial letter by
-.IR string1 ,
-from the last name by
-.IR string2 ,
-and from anything else
-(such as a
-.B von
-or
-.BR de )
-by
-.IR string3 .
-These default to a period followed by a space.
-In a hyphenated first name,
-the initial of the first part of the name will be separated from the hyphen by
-.IR string4 ;
-this defaults to a period.
-No attempt is made to handle any ambiguities that might
-result from abbreviation.
-Names are abbreviated before sorting and before
-label construction.
-.
-.TP
-.BI abbreviate-label-ranges\*n\ string
-Three or more adjacent labels that refer to consecutive references
-will be abbreviated to a label consisting
-of the first label, followed by
-.I string
-followed by the last label.
-This is mainly useful with numeric labels.
-If
-.I string
-is omitted it defaults to
-.BR \- .
-.
-.TP
-.B accumulate\*n
-Accumulate references instead of writing out each reference
-as it is encountered.
-Accumulated references will be written out whenever a reference
-of the form
-.
-.RS
-.IP
-.B .[
-.br
-.B $LIST$
-.br
-.B .]
-.
-.LP
-is encountered,
-after all input files hve been processed,
-and whenever
-.B .R1
-line is recognized.
-.RE
-.
-.TP
-.BI annotate\*n\ field\ string
-.I field
-is an annotation;
-print it at the end of the reference as a paragraph preceded by the line
-.
-.RS
-.IP
-.BI . string
-.
-.LP
-If
-.I macro
-is omitted it will default to
-.BR AP ;
-if
-.I field
-is also omitted it will default to
-.BR X .
-Only one field can be an annotation.
-.RE
-.
-.TP
-.BI articles\ string \fR\|.\|.\|.
-.IR string \|.\|.\|.\&
-are definite or indefinite articles, and should be ignored at the beginning of
-.B T
-fields when sorting.
-Initially,
-.BR the ,
-.B a
-and
-.B an
-are recognized as articles.
-.
-.TP
-.BI bibliography\ filename \fR\|.\|.\|.
-Write out all the references contained in the bibliographic databases
-.IR filename \|.\|.\|.
-This command should come last in a
-.BR .R1 / .R2
-block.
-.
-.TP
-.BI bracket-label\ string1\ string2\ string3
-In the text, bracket each label
-with
-.I string1
-and
-.IR string2 .
-An occurrence of
-.I string2
-immediately followed by
-.I string1
-will be turned into
-.IR string3 .
-The default behaviour is
-.
-.RS
-.IP
-.B
-bracket-label \e*([. \e*(.] ", "
-.RE
-.
-.TP
-.BI capitalize\ fields
-Convert
-.I fields
-to caps and small caps.
-.
-.TP
-.B compatible\*n
-Recognize
-.B .R1
-and
-.B .R2
-even when followed by a character other than space or newline.
-.
-.TP
-.BI database\ filename \fR\|.\|.\|.
-Search the bibliographic databases
-.IR filename \|.\|.\|.
-For each
-.I filename
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.TP
-.BI date-as-label\*n\ string
-.I string
-is a label expression that specifies a string with which to replace the
-.B D
-field after constructing the label.
-See the
-.B "Label expressions"
-subsection for a description of label expressions.
-This command is useful if you do not want explicit labels in the
-reference list, but instead want to handle any necessary
-disambiguation by qualifying the date in some way.
-The label used in the text would typically be some combination of the
-author and date.
-In most cases you should also use the
-.B no-label-in-reference
-command.
-For example,
-.
-.RS
-.IP
-.B "date-as-label D.+yD.y%a*D.-y"
-.
-.LP
-would attach a disambiguating letter to the year part of the
-.B D
-field in the reference.
-.RE
-.
-.TP
-.B default-database\*n
-The default database should be searched.
-This is the default behaviour, so the negative version of
-this command is more useful.
-.B refer
-determines whether the default database should be searched
-on the first occasion that it needs to do a search.
-Thus a
-.B no-default-database
-command must be given before then,
-in order to be effective.
-.
-.TP
-.BI discard\*n\ fields
-When the reference is read,
-.I fields
-should be discarded;
-no string definitions for
-.I fields
-will be output.
-Initially,
-.I fields
-are
-.BR XYZ .
-.
-.TP
-.BI et-al\*n\ string\ m\ n
-Control use of
-.B "et al"
-in the evaluation of
-.B @
-expressions in label expressions.
-If the number of authors needed to make the author sequence
-unambiguous is
-.I u
-and the total number of authors is
-.I t
-then the last
-.IR t \|\-\| u
-authors will be replaced by
-.I string
-provided that
-.IR t \|\-\| u
-is not less than
-.I m
-and
-.I t
-is not less than
-.IR n .
-The default behaviour is
-.
-.RS
-.IP
-.B
-et-al " et al" 2 3
-.RE
-.
-.TP
-.BI include\ filename
-Include
-.I filename
-and interpret the contents as commands.
-.
-.TP
-.BI join-authors\ string1\ string2\ string3
-This says how authors should be joined together.
-When there are exactly two authors, they will be joined with
-.IR string1 .
-When there are more than two authors, all but the last two will
-be joined with
-.IR string2 ,
-and the last two authors will be joined with
-.IR string3 .
-If
-.I string3
-is omitted,
-it will default to
-.IR string1 ;
-if
-.I string2
-is also omitted it will also default to
-.IR string1 .
-For example,
-.
-.RS
-.IP
-.B
-join-authors " and " ", " ", and "
-.
-.LP
-will restore the default method for joining authors.
-.RE
-.
-.TP
-.B label-in-reference\*n
-When outputting the reference,
-define the string
-.B [F
-to be the reference's label.
-This is the default behaviour; so the negative version
-of this command is more useful.
-.
-.TP
-.B label-in-text\*n
-For each reference output a label in the text.
-The label will be separated from the surrounding text as described in the
-.B bracket-label
-command.
-This is the default behaviour; so the negative version
-of this command is more useful.
-.
-.TP
-.BI label\ string
-.I string
-is a label expression describing how to label each reference.
-.
-.TP
-.BI separate-label-second-parts\ string
-When merging two-part labels, separate the second part of the second
-label from the first label with
-.IR string .
-See the description of the
-.B <>
-label expression.
-.
-.TP
-.B move-punctuation\*n
-In the text, move any punctuation at the end of line past the label.
-It is usually a good idea to give this command unless you are using
-superscripted numbers as labels.
-.
-.TP
-.BI reverse\*n\ string
-Reverse the fields whose names
-are in
-.IR string .
-Each field name can be followed by a number which says
-how many such fields should be reversed.
-If no number is given for a field, all such fields will be reversed.
-.
-.TP
-.BI search-ignore\*n\ fields
-While searching for keys in databases for which no index exists,
-ignore the contents of
-.IR fields .
-Initially, fields
-.B XYZ
-are ignored.
-.
-.TP
-.BI search-truncate\*n\ n
-Only require the first
-.I n
-characters of keys to be given.
-In effect when searching for a given key
-words in the database are truncated to the maximum of
-.I n
-and the length of the key.
-Initially
-.I n
-is\ 6.
-.
-.TP
-.BI short-label\*n\ string
-.I string
-is a label expression that specifies an alternative (usually shorter)
-style of label.
-This is used when the
-.B #
-flag is given in the citation.
-When using author-date style labels, the identity of the author
-or authors is sometimes clear from the context, and so it
-may be desirable to omit the author or authors from the label.
-The
-.B short-label
-command will typically be used to specify a label containing just
-a date and possibly a disambiguating letter.
-.
-.TP
-.BI sort\*n\ string
-Sort references according to
-.BR string .
-References will automatically be accumulated.
-.I string
-should be a list of field names, each followed by a number,
-indicating how many fields with the name should be used for sorting.
-.B +
-can be used to indicate that all the fields with the name should be used.
-Also
-.B .\&
-can be used to indicate the references should be sorted using the
-(tentative) label.
-(The
-.B "Label expressions"
-subsection describes the concept of a tentative label.)
-.
-.TP
-.B sort-adjacent-labels\*n
-Sort labels that are adjacent in the text according to their
-position in the reference list.
-This command should usually be given if the
-.B abbreviate-label-ranges
-command has been given,
-or if the label expression contains a
-.B <>
-expression.
-This will have no effect unless references are being accumulated.
-.
-.
-.SS Label expressions
-.
-.LP
-Label expressions can be evaluated both normally and tentatively.
-The result of normal evaluation is used for output.
-The result of tentative evaluation, called the
-.IR "tentative label" ,
-is used to gather the information
-that normal evaluation needs to disambiguate the label.
-Label expressions specified by the
-.B date-as-label
-and
-.B short-label
-commands are not evaluated tentatively.
-Normal and tentative evaluation are the same for all types
-of expression other than
-.BR @ ,
-.BR * ,
-and
-.B %
-expressions.
-The description below applies to normal evaluation,
-except where otherwise specified.
-.
-.TP
-.I field
-.TQ
-.I field\ n
-The
-.IR n -th
-part of
-.IR field .
-If
-.I n
-is omitted, it defaults to\ 1.
-.
-.TP
-.BI ' string '
-The characters in
-.I string
-literally.
-.
-.TP
-.B @
-All the authors joined as specified by the
-.B join-authors
-command.
-The whole of each author's name will be used.
-However, if the references are sorted by author
-(that is the sort specification starts with
-.BR A+ ),
-then authors' last names will be used instead, provided that this does
-not introduce ambiguity,
-and also an initial subsequence of the authors may be used
-instead of all the authors, again provided that this does not
-introduce ambiguity.
-The use of only the last name for the
-.IR i -th
-author of some reference
-is considered to be ambiguous if
-there is some other reference,
-such that the first
-.IR i \|-\|1
-authors of the references are the same,
-the
-.IR i -th
-authors are not the same,
-but the
-.IR i -th
-authors' last names are the same.
-A proper initial subsequence of the sequence
-of authors for some reference is considered to be ambiguous if there is
-a reference with some other sequence of authors which also has
-that subsequence as a proper initial subsequence.
-When an initial subsequence of authors is used, the remaining
-authors are replaced by the string specified by the
-.B et-al
-command;
-this command may also specify additional requirements that must be
-met before an initial subsequence can be used.
-.B @
-tentatively evaluates to a canonical representation of the authors,
-such that authors that compare equally for sorting purpose
-will have the same representation.
-.
-.TP
-.BI % n
-.TQ
-.B %a
-.TQ
-.B %A
-.TQ
-.B %i
-.TQ
-.B %I
-The serial number of the reference formatted according to the character
-following the
-.BR % .
-The serial number of a reference is\ 1 plus the number of earlier references
-with same tentative label as this reference.
-These expressions tentatively evaluate to an empty string.
-.
-.TP
-.IB expr *
-If there is another reference with the same tentative label as
-this reference, then
-.IR expr ,
-otherwise an empty string.
-It tentatively evaluates to an empty string.
-.
-.TP
-.IB expr + n
-.TQ
-.IB expr \- n
-The first
-.RB ( + )
-or last
-.RB ( \- )
-.I n
-upper or lower case letters or digits of
-.IR expr .
-Troff special characters (such as
-.BR \e('a )
-count as a single letter.
-Accent strings are retained but do not count towards the total.
-.
-.TP
-.IB expr .l
-.I expr
-converted to lowercase.
-.
-.TP
-.IB expr .u
-.I expr
-converted to uppercase.
-.
-.TP
-.IB expr .c
-.I expr
-converted to caps and small caps.
-.
-.TP
-.IB expr .r
-.I expr
-reversed so that the last name is first.
-.
-.TP
-.IB expr .a
-.I expr
-with first names abbreviated.
-Note that fields specified in the
-.B abbreviate
-command are abbreviated before any labels are evaluated.
-Thus
-.B .a
-is useful only when you want a field to be abbreviated in a label
-but not in a reference.
-.
-.TP
-.IB expr .y
-The year part of
-.IR expr .
-.
-.TP
-.IB expr .+y
-The part of
-.I expr
-before the year, or the whole of
-.I expr
-if it does not contain a year.
-.
-.TP
-.IB expr .\-y
-The part of
-.I expr
-after the year, or an empty string if
-.I expr
-does not contain a year.
-.
-.TP
-.IB expr .n
-The last name part of
-.IR expr .
-.
-.TP
-.IB expr1 \(ti expr2
-.I expr1
-except that if the last character of
-.I expr1
-is
-.B \-
-then it will be replaced by
-.IR expr2 .
-.
-.TP
-.I expr1\ expr2
-The concatenation of
-.I expr1
-and
-.IR expr2 .
-.
-.TP
-.IB expr1 | expr2
-If
-.I expr1
-is non-empty then
-.I expr1
-otherwise
-.IR expr2 .
-.
-.TP
-.IB expr1 & expr2
-If
-.I expr1
-is non-empty
-then
-.I expr2
-otherwise an empty string.
-.
-.TP
-.IB expr1 ? expr2 : expr3
-If
-.I expr1
-is non-empty
-then
-.I expr2
-otherwise
-.IR expr3 .
-.
-.TP
-.BI < expr >
-The label is in two parts, which are separated by
-.IR expr .
-Two adjacent two-part labels which have the same first part will be
-merged by appending the second part of the second label onto the first
-label separated by the string specified in the
-.B separate-label-second-parts
-command (initially, a comma followed by a space); the resulting label
-will also be a two-part label with the same first part as before
-merging, and so additional labels can be merged into it.
-Note that it is permissible for the first part to be empty;
-this maybe desirable for expressions used in the
-.B short-label
-command.
-.
-.TP
-.BI ( expr )
-The same as
-.IR expr .
-Used for grouping.
-.
-.LP
-The above expressions are listed in order of precedence
-(highest first);
-.B &
-and
-.B |
-have the same precedence.
-.
-.
-.SS Macro interface
-Each reference starts with a call to the macro
-.BR ]- .
-The string
-.B [F
-will be defined to be the label for this reference,
-unless the
-.B no-label-in-reference
-command has been given.
-There then follows a series of string definitions,
-one for each field:
-string
-.BI [ X
-corresponds to field
-.IR X .
-The number register
-.B [P
-is set to\ 1 if the
-.B P
-field contains a range of pages.
-The
-.BR [T ,
-.B [A
-and
-.B [O
-number registers are set to\ 1 according as the
-.BR T ,
-.B A
-and
-.B O
-fields end with one of the characters
-.BR .?! .
-The
-.B [E
-number register will be set to\ 1 if the
-.B [E
-string contains more than one name.
-The reference is followed by a call to the
-.B ][
-macro.
-The first argument to this macro gives a number representing
-the type of the reference.
-If a reference contains a
-.B J
-field, it will be classified as type\ 1,
-otherwise if it contains a
-.B B
-field, it will type\ 3,
-otherwise if it contains a
-.B G
-or
-.B R
-field it will be type\ 4,
-otherwise if contains a
-.B I
-field it will be type\ 2,
-otherwise it will be type\ 0.
-The second argument is a symbolic name for the type:
-.BR other ,
-.BR journal-article ,
-.BR book ,
-.B article-in-book
-or
-.BR tech-report .
-Groups of references that have been accumulated
-or are produced by the
-.B bibliography
-command are preceded by a call to the
-.B ]<
-macro and followed by a call to the
-.B ]>
-macro.
-.
-.
-.
-.SH FILES
-.
-.Tp \w'\fB@DEFAULT_INDEX@'u+2n
-.B @DEFAULT_INDEX@
-Default database.
-.
-.TP
-.IB file @INDEX_SUFFIX@
-Index files.
-.
-.
-.
-.SH ENVIRONMENT
-.
-.Tp \w'\fBREFER'u+2n
-.B REFER
-If set, overrides the default database.
-.
-.
-.
-.SH "SEE ALSO"
-.BR @g@indxbib (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@)
-.br
-.
-.
-.
-.SH BUGS
-In label expressions,
-.B <>
-expressions are ignored inside
-.BI . char
-expressions.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/refer/token.cpp b/contrib/groff/src/preproc/refer/token.cpp
deleted file mode 100644
index 1eb30062f8a3..000000000000
--- a/contrib/groff/src/preproc/refer/token.cpp
+++ /dev/null
@@ -1,378 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "refer.h"
-#include "token.h"
-
-#define TOKEN_TABLE_SIZE 1009
-// I believe in Icelandic thorn sorts after z.
-#define THORN_SORT_KEY "{"
-
-struct token_table_entry {
- const char *tok;
- token_info ti;
- token_table_entry();
-};
-
-token_table_entry token_table[TOKEN_TABLE_SIZE];
-int ntokens = 0;
-
-static void skip_name(const char **ptr, const char *end)
-{
- if (*ptr < end) {
- switch (*(*ptr)++) {
- case '(':
- if (*ptr < end) {
- *ptr += 1;
- if (*ptr < end)
- *ptr += 1;
- }
- break;
- case '[':
- while (*ptr < end)
- if (*(*ptr)++ == ']')
- break;
- break;
- }
- }
-}
-
-int get_token(const char **ptr, const char *end)
-{
- if (*ptr >= end)
- return 0;
- char c = *(*ptr)++;
- if (c == '\\' && *ptr < end) {
- switch (**ptr) {
- default:
- *ptr += 1;
- break;
- case '(':
- case '[':
- skip_name(ptr, end);
- break;
- case '*':
- case 'f':
- *ptr += 1;
- skip_name(ptr, end);
- break;
- }
- }
- return 1;
-}
-
-token_info::token_info()
-: type(TOKEN_OTHER), sort_key(0), other_case(0)
-{
-}
-
-void token_info::set(token_type t, const char *sk, const char *oc)
-{
- assert(oc == 0 || t == TOKEN_UPPER || t == TOKEN_LOWER);
- type = t;
- sort_key = sk;
- other_case = oc;
-}
-
-void token_info::sortify(const char *start, const char *end, string &result)
- const
-{
- if (sort_key)
- result += sort_key;
- else if (type == TOKEN_UPPER || type == TOKEN_LOWER) {
- for (; start < end; start++)
- if (csalpha(*start))
- result += cmlower(*start);
- }
-}
-
-int token_info::sortify_non_empty(const char *start, const char *end) const
-{
- if (sort_key)
- return *sort_key != '\0';
- if (type != TOKEN_UPPER && type != TOKEN_LOWER)
- return 0;
- for (; start < end; start++)
- if (csalpha(*start))
- return 1;
- return 0;
-}
-
-
-void token_info::lower_case(const char *start, const char *end,
- string &result) const
-{
- if (type != TOKEN_UPPER) {
- while (start < end)
- result += *start++;
- }
- else if (other_case)
- result += other_case;
- else {
- while (start < end)
- result += cmlower(*start++);
- }
-}
-
-void token_info::upper_case(const char *start, const char *end,
- string &result) const
-{
- if (type != TOKEN_LOWER) {
- while (start < end)
- result += *start++;
- }
- else if (other_case)
- result += other_case;
- else {
- while (start < end)
- result += cmupper(*start++);
- }
-}
-
-token_table_entry::token_table_entry()
-: tok(0)
-{
-}
-
-static void store_token(const char *tok, token_type typ,
- const char *sk = 0, const char *oc = 0)
-{
- unsigned n = hash_string(tok, strlen(tok)) % TOKEN_TABLE_SIZE;
- for (;;) {
- if (token_table[n].tok == 0) {
- if (++ntokens == TOKEN_TABLE_SIZE)
- assert(0);
- token_table[n].tok = tok;
- break;
- }
- if (strcmp(tok, token_table[n].tok) == 0)
- break;
- if (n == 0)
- n = TOKEN_TABLE_SIZE - 1;
- else
- --n;
- }
- token_table[n].ti.set(typ, sk, oc);
-}
-
-
-token_info default_token_info;
-
-const token_info *lookup_token(const char *start, const char *end)
-{
- unsigned n = hash_string(start, end - start) % TOKEN_TABLE_SIZE;
- for (;;) {
- if (token_table[n].tok == 0)
- break;
- if (strlen(token_table[n].tok) == size_t(end - start)
- && memcmp(token_table[n].tok, start, end - start) == 0)
- return &(token_table[n].ti);
- if (n == 0)
- n = TOKEN_TABLE_SIZE - 1;
- else
- --n;
- }
- return &default_token_info;
-}
-
-static void init_ascii()
-{
- const char *p;
- for (p = "abcdefghijklmnopqrstuvwxyz"; *p; p++) {
- char buf[2];
- buf[0] = *p;
- buf[1] = '\0';
- store_token(strsave(buf), TOKEN_LOWER);
- buf[0] = cmupper(buf[0]);
- store_token(strsave(buf), TOKEN_UPPER);
- }
- for (p = "0123456789"; *p; p++) {
- char buf[2];
- buf[0] = *p;
- buf[1] = '\0';
- const char *s = strsave(buf);
- store_token(s, TOKEN_OTHER, s);
- }
- for (p = ".,:;?!"; *p; p++) {
- char buf[2];
- buf[0] = *p;
- buf[1] = '\0';
- store_token(strsave(buf), TOKEN_PUNCT);
- }
- store_token("-", TOKEN_HYPHEN);
-}
-
-static void store_letter(const char *lower, const char *upper,
- const char *sort_key = 0)
-{
- store_token(lower, TOKEN_LOWER, sort_key, upper);
- store_token(upper, TOKEN_UPPER, sort_key, lower);
-}
-
-static void init_letter(unsigned char uc_code, unsigned char lc_code,
- const char *sort_key)
-{
- char lbuf[2];
- lbuf[0] = lc_code;
- lbuf[1] = 0;
- char ubuf[2];
- ubuf[0] = uc_code;
- ubuf[1] = 0;
- store_letter(strsave(lbuf), strsave(ubuf), sort_key);
-}
-
-static void init_latin1()
-{
- init_letter(0xc0, 0xe0, "a");
- init_letter(0xc1, 0xe1, "a");
- init_letter(0xc2, 0xe2, "a");
- init_letter(0xc3, 0xe3, "a");
- init_letter(0xc4, 0xe4, "a");
- init_letter(0xc5, 0xe5, "a");
- init_letter(0xc6, 0xe6, "ae");
- init_letter(0xc7, 0xe7, "c");
- init_letter(0xc8, 0xe8, "e");
- init_letter(0xc9, 0xe9, "e");
- init_letter(0xca, 0xea, "e");
- init_letter(0xcb, 0xeb, "e");
- init_letter(0xcc, 0xec, "i");
- init_letter(0xcd, 0xed, "i");
- init_letter(0xce, 0xee, "i");
- init_letter(0xcf, 0xef, "i");
-
- init_letter(0xd0, 0xf0, "d");
- init_letter(0xd1, 0xf1, "n");
- init_letter(0xd2, 0xf2, "o");
- init_letter(0xd3, 0xf3, "o");
- init_letter(0xd4, 0xf4, "o");
- init_letter(0xd5, 0xf5, "o");
- init_letter(0xd6, 0xf6, "o");
- init_letter(0xd8, 0xf8, "o");
- init_letter(0xd9, 0xf9, "u");
- init_letter(0xda, 0xfa, "u");
- init_letter(0xdb, 0xfb, "u");
- init_letter(0xdc, 0xfc, "u");
- init_letter(0xdd, 0xfd, "y");
- init_letter(0xde, 0xfe, THORN_SORT_KEY);
-
- store_token("\337", TOKEN_LOWER, "ss", "SS");
- store_token("\377", TOKEN_LOWER, "y", "Y");
-}
-
-static void init_two_char_letter(char l1, char l2, char u1, char u2,
- const char *sk = 0)
-{
- char buf[6];
- buf[0] = '\\';
- buf[1] = '(';
- buf[2] = l1;
- buf[3] = l2;
- buf[4] = '\0';
- const char *p = strsave(buf);
- buf[2] = u1;
- buf[3] = u2;
- store_letter(p, strsave(buf), sk);
- buf[1] = '[';
- buf[4] = ']';
- buf[5] = '\0';
- p = strsave(buf);
- buf[2] = l1;
- buf[3] = l2;
- store_letter(strsave(buf), p, sk);
-
-}
-
-static void init_special_chars()
-{
- const char *p;
- for (p = "':^`~"; *p; p++)
- for (const char *q = "aeiouy"; *q; q++) {
- // Use a variable to work around bug in gcc 2.0
- char c = cmupper(*q);
- init_two_char_letter(*p, *q, *p, c);
- }
- for (p = "/l/o~n,coeaeij"; *p; p += 2) {
- // Use variables to work around bug in gcc 2.0
- char c0 = cmupper(p[0]);
- char c1 = cmupper(p[1]);
- init_two_char_letter(p[0], p[1], c0, c1);
- }
- init_two_char_letter('v', 's', 'v', 'S', "s");
- init_two_char_letter('v', 'z', 'v', 'Z', "z");
- init_two_char_letter('o', 'a', 'o', 'A', "a");
- init_two_char_letter('T', 'p', 'T', 'P', THORN_SORT_KEY);
- init_two_char_letter('-', 'd', '-', 'D');
-
- store_token("\\(ss", TOKEN_LOWER, 0, "SS");
- store_token("\\[ss]", TOKEN_LOWER, 0, "SS");
-
- store_token("\\(Sd", TOKEN_LOWER, "d", "\\(-D");
- store_token("\\[Sd]", TOKEN_LOWER, "d", "\\[-D]");
- store_token("\\(hy", TOKEN_HYPHEN);
- store_token("\\[hy]", TOKEN_HYPHEN);
- store_token("\\(en", TOKEN_RANGE_SEP);
- store_token("\\[en]", TOKEN_RANGE_SEP);
-}
-
-static void init_strings()
-{
- char buf[6];
- buf[0] = '\\';
- buf[1] = '*';
- for (const char *p = "'`^^,:~v_o./;"; *p; p++) {
- buf[2] = *p;
- buf[3] = '\0';
- store_token(strsave(buf), TOKEN_ACCENT);
- buf[2] = '[';
- buf[3] = *p;
- buf[4] = ']';
- buf[5] = '\0';
- store_token(strsave(buf), TOKEN_ACCENT);
- }
-
- // -ms special letters
- store_letter("\\*(th", "\\*(Th", THORN_SORT_KEY);
- store_letter("\\*[th]", "\\*[Th]", THORN_SORT_KEY);
- store_letter("\\*(d-", "\\*(D-");
- store_letter("\\*[d-]", "\\*[D-]");
- store_letter("\\*(ae", "\\*(Ae", "ae");
- store_letter("\\*[ae]", "\\*[Ae]", "ae");
- store_letter("\\*(oe", "\\*(Oe", "oe");
- store_letter("\\*[oe]", "\\*[Oe]", "oe");
-
- store_token("\\*3", TOKEN_LOWER, "y", "Y");
- store_token("\\*8", TOKEN_LOWER, "ss", "SS");
- store_token("\\*q", TOKEN_LOWER, "o", "O");
-}
-
-struct token_initer {
- token_initer();
-};
-
-static token_initer the_token_initer;
-
-token_initer::token_initer()
-{
- init_ascii();
- init_latin1();
- init_special_chars();
- init_strings();
- default_token_info.set(TOKEN_OTHER);
-}
diff --git a/contrib/groff/src/preproc/refer/token.h b/contrib/groff/src/preproc/refer/token.h
deleted file mode 100644
index 7d3404942fa7..000000000000
--- a/contrib/groff/src/preproc/refer/token.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-enum token_type {
- TOKEN_OTHER,
- TOKEN_UPPER,
- TOKEN_LOWER,
- TOKEN_ACCENT,
- TOKEN_PUNCT,
- TOKEN_HYPHEN,
- TOKEN_RANGE_SEP
-};
-
-class token_info {
-private:
- token_type type;
- const char *sort_key;
- const char *other_case;
-public:
- token_info();
- void set(token_type, const char *sk = 0, const char *oc = 0);
- void lower_case(const char *start, const char *end, string &result) const;
- void upper_case(const char *start, const char *end, string &result) const;
- void sortify(const char *start, const char *end, string &result) const;
- int sortify_non_empty(const char *start, const char *end) const;
- int is_upper() const;
- int is_lower() const;
- int is_accent() const;
- int is_other() const;
- int is_punct() const;
- int is_hyphen() const;
- int is_range_sep() const;
-};
-
-inline int token_info::is_upper() const
-{
- return type == TOKEN_UPPER;
-}
-
-inline int token_info::is_lower() const
-{
- return type == TOKEN_LOWER;
-}
-
-inline int token_info::is_accent() const
-{
- return type == TOKEN_ACCENT;
-}
-
-inline int token_info::is_other() const
-{
- return type == TOKEN_OTHER;
-}
-
-inline int token_info::is_punct() const
-{
- return type == TOKEN_PUNCT;
-}
-
-inline int token_info::is_hyphen() const
-{
- return type == TOKEN_HYPHEN;
-}
-
-inline int token_info::is_range_sep() const
-{
- return type == TOKEN_RANGE_SEP;
-}
-
-int get_token(const char **ptr, const char *end);
-const token_info *lookup_token(const char *start, const char *end);
diff --git a/contrib/groff/src/preproc/soelim/Makefile.sub b/contrib/groff/src/preproc/soelim/Makefile.sub
deleted file mode 100644
index 2e15c0086e82..000000000000
--- a/contrib/groff/src/preproc/soelim/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=soelim$(EXEEXT)
-MAN1=soelim.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=soelim.$(OBJEXT)
-CCSRCS=$(srcdir)/soelim.cpp
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/soelim/TODO b/contrib/groff/src/preproc/soelim/TODO
deleted file mode 100644
index f2a3924ef89f..000000000000
--- a/contrib/groff/src/preproc/soelim/TODO
+++ /dev/null
@@ -1 +0,0 @@
-Understand .pso.
diff --git a/contrib/groff/src/preproc/soelim/soelim.cpp b/contrib/groff/src/preproc/soelim/soelim.cpp
deleted file mode 100644
index 235dfe664430..000000000000
--- a/contrib/groff/src/preproc/soelim/soelim.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "nonposix.h"
-#include "searchpath.h"
-
-// The include search path initially contains only the current directory.
-static search_path include_search_path(0, 0, 0, 1);
-
-int compatible_flag = 0;
-int raw_flag = 0;
-int tex_flag = 0;
-
-extern "C" const char *Version_string;
-
-int do_file(const char *filename);
-
-
-void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [ -Crtv ] [ -I file ] [ files ]\n", program_name);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "CI:rtv", long_options, NULL)) != EOF)
- switch (opt) {
- case 'v':
- {
- printf("GNU soelim (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'C':
- compatible_flag = 1;
- break;
- case 'I':
- include_search_path.command_line_dir(optarg);
- break;
- case 'r':
- raw_flag = 1;
- break;
- case 't':
- tex_flag = 1;
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- int nbad = 0;
- if (optind >= argc)
- nbad += !do_file("-");
- else
- for (int i = optind; i < argc; i++)
- nbad += !do_file(argv[i]);
- if (ferror(stdout) || fflush(stdout) < 0)
- fatal("output error");
- return nbad != 0;
-}
-
-void set_location()
-{
- if(!raw_flag) {
- if(!tex_flag)
- printf(".lf %d %s\n", current_lineno, current_filename);
- else
- printf("%% file %s, line %d\n", current_filename, current_lineno);
- }
-}
-
-void do_so(const char *line)
-{
- const char *p = line;
- while (*p == ' ')
- p++;
- string filename;
- int success = 1;
- for (const char *q = p;
- success && *q != '\0' && *q != '\n' && *q != ' ';
- q++)
- if (*q == '\\') {
- switch (*++q) {
- case 'e':
- case '\\':
- filename += '\\';
- break;
- case ' ':
- filename += ' ';
- break;
- default:
- success = 0;
- break;
- }
- }
- else
- filename += char(*q);
- if (success && filename.length() > 0) {
- filename += '\0';
- const char *fn = current_filename;
- int ln = current_lineno;
- current_lineno--;
- if (do_file(filename.contents())) {
- current_filename = fn;
- current_lineno = ln;
- set_location();
- return;
- }
- current_lineno++;
- }
- fputs(".so", stdout);
- fputs(line, stdout);
-}
-
-int do_file(const char *filename)
-{
- char *file_name_in_path = 0;
- FILE *fp = include_search_path.open_file_cautious(filename,
- &file_name_in_path);
- int err = errno;
- string whole_filename(file_name_in_path ? file_name_in_path : filename);
- whole_filename += '\0';
- a_delete file_name_in_path;
- if (fp == 0) {
- error("can't open `%1': %2", whole_filename.contents(), strerror(err));
- return 0;
- }
- current_filename = whole_filename.contents();
- current_lineno = 1;
- set_location();
- enum { START, MIDDLE, HAD_DOT, HAD_s, HAD_so, HAD_l, HAD_lf } state = START;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- switch (state) {
- case START:
- if (c == '.')
- state = HAD_DOT;
- else {
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case MIDDLE:
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- break;
- case HAD_DOT:
- if (c == 's')
- state = HAD_s;
- else if (c == 'l')
- state = HAD_l;
- else {
- putchar('.');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_s:
- if (c == 'o')
- state = HAD_so;
- else {
- putchar('.');
- putchar('s');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_so:
- if (c == ' ' || c == '\n' || compatible_flag) {
- string line;
- for (; c != EOF && c != '\n'; c = getc(fp))
- line += c;
- current_lineno++;
- line += '\n';
- line += '\0';
- do_so(line.contents());
- state = START;
- }
- else {
- fputs(".so", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- case HAD_l:
- if (c == 'f')
- state = HAD_lf;
- else {
- putchar('.');
- putchar('l');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_lf:
- if (c == ' ' || c == '\n' || compatible_flag) {
- string line;
- for (; c != EOF && c != '\n'; c = getc(fp))
- line += c;
- current_lineno++;
- line += '\n';
- line += '\0';
- interpret_lf_args(line.contents());
- printf(".lf%s", line.contents());
- state = START;
- }
- else {
- fputs(".lf", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- default:
- assert(0);
- }
- }
- switch (state) {
- case HAD_DOT:
- fputs(".\n", stdout);
- break;
- case HAD_l:
- fputs(".l\n", stdout);
- break;
- case HAD_s:
- fputs(".s\n", stdout);
- break;
- case HAD_lf:
- fputs(".lf\n", stdout);
- break;
- case HAD_so:
- fputs(".so\n", stdout);
- break;
- case MIDDLE:
- putc('\n', stdout);
- break;
- case START:
- break;
- }
- if (fp != stdin)
- fclose(fp);
- current_filename = 0;
- return 1;
-}
diff --git a/contrib/groff/src/preproc/soelim/soelim.man b/contrib/groff/src/preproc/soelim/soelim.man
deleted file mode 100644
index fb17e3644fca..000000000000
--- a/contrib/groff/src/preproc/soelim/soelim.man
+++ /dev/null
@@ -1,216 +0,0 @@
-'\" p
-.ig
-Copyright (C) 1989-2000, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.mso pic.tmac
-.
-.TH @G@SOELIM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.SH NAME
-@g@soelim \- interpret .so requests in groff input
-.
-.SH SYNOPSIS
-.B @g@soelim
-[
-.B \-Crtv
-]
-[
-.BI \-I dir
-]
-[
-.IR files \|.\|.\|.\|
-]
-.
-.PP
-It is possible to have whitespace between the
-.B \-I
-command line option and its parameter.
-.
-.SH DESCRIPTION
-.B @g@soelim
-reads
-.I files
-and replaces lines of the form
-.IP
-.BI .so\ file
-.LP
-by the contents of
-.IR file .
-It is useful if files included with
-.B so
-need to be preprocessed.
-Normally,
-.B @g@soelim
-should be invoked with the
-.B \-s
-option of
-.BR groff .
-.
-.PP
-Note that there must be no whitespace between the leading dot and
-the two characters `s' and `o'. Otherwise, only
-.B groff
-interprets the
-.B .so
-request (and
-.B soelim
-ignores it).
-.
-.SH OPTIONS
-.TP
-.B \-C
-Recognize
-.B .so
-even when followed by a character other than space or newline.
-.
-.TP
-.BI \-I dir
-This option may be used to specify a directory to search for
-files (both those on the command line and those named in
-.B \&.so
-requests).
-The current directory is always searched first.
-This option may be specified more than once,
-the directories will be searched in the order specified.
-No directory search is performed for files specified using an absolute path.
-.
-.TP
-.B \-r
-Do not add .lf requests (for general use, with non-groff files).
-.
-.TP
-.B \-t
-Don't emit .lf requests but TeX comment lines (starting with `%') giving
-the current file and line number.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.SH USAGE
-The normal processing sequence of groff is this:
-.
-.PP
-.ie t \{\
-.PS
-box invisible width 0.5 height 0.4 "input" "file";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.8 height 0.2 "preprocessor";
-move to last box .right
-right;
-arrow 0.3;
-A: box invisible width 0.35 height 0.2 "troff";
-move to last box .top;
-up;
-move 0.3;
-box invisible width 0.6 height 0.4 "sourced" "file";
-line <- up 0.3 from A.top;
-move to A.right;
-right;
-arrow 0.3;
-box invisible width 0.85 height 0.2 "postprocessor";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.5 height 0.4 "output" "file"
-.PE
-.\}
-.el \{\
-.nf
- input sourced
- file file
- | |
- v v
- preprocessor -> troff -> postprocessor
- |
- v
- output
- file
-.fi
-.\}
-.PP
-.
-That is, files sourced with
-.B .so
-are normally read
-.I only
-by
-.B troff
-(the actual formatter).
-.B soelim
-is
-.I not
-required for
-.B troff
-to source files.
-.
-.PP
-If a file to be sourced should also be preprocessed, it must
-already be read
-.I before
-the input file passes through the preprocessor.
-This is handled by
-.BR soelim :
-.
-.PP
-.ie t \{\
-.PS
-box invisible width 0.5 height 0.4 "input" "file";
-move to last box .bottom;
-down;
-arrow 0.3;
-A: box invisible width 0.5 height 0.2 "soelim";
-line <- 0.3;
-box invisible width 0.5 height 0.4 "sourced" "file";
-move to A.right;
-right;
-arrow 0.3;
-box invisible width 0.8 height 0.2 "preprocessor";
-arrow 0.3;
-box invisible width 0.35 height 0.2 "troff";
-arrow 0.3
-box invisible width 0.85 height 0.2 "postprocessor";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.5 height 0.4 "output" "file"
-.PE
-.\}
-.el \{\
-.nf
- input
- file
- |
- v
- soelim -> preprocessor -> troff -> postprocessor
- ^ |
- | v
- sourced output
- file file
-.fi
-.\}
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/preproc/tbl/Makefile.sub b/contrib/groff/src/preproc/tbl/Makefile.sub
deleted file mode 100644
index bea28b35164d..000000000000
--- a/contrib/groff/src/preproc/tbl/Makefile.sub
+++ /dev/null
@@ -1,13 +0,0 @@
-PROG=tbl$(EXEEXT)
-MAN1=tbl.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- main.$(OBJEXT) \
- table.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/main.cpp \
- $(srcdir)/table.cpp
-HDRS=\
- $(srcdir)/table.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/tbl/main.cpp b/contrib/groff/src/preproc/tbl/main.cpp
deleted file mode 100644
index d79adb0bf831..000000000000
--- a/contrib/groff/src/preproc/tbl/main.cpp
+++ /dev/null
@@ -1,1590 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "table.h"
-
-#define MAX_POINT_SIZE 99
-#define MAX_VERTICAL_SPACING 72
-
-extern "C" const char *Version_string;
-
-int compatible_flag = 0;
-
-class table_input {
- FILE *fp;
- enum { START, MIDDLE,
- REREAD_T, REREAD_TE, REREAD_E,
- LEADER_1, LEADER_2, LEADER_3, LEADER_4,
- END, ERROR } state;
- string unget_stack;
-public:
- table_input(FILE *);
- int get();
- int ended() { return unget_stack.empty() && state == END; }
- void unget(char);
-};
-
-table_input::table_input(FILE *p)
-: fp(p), state(START)
-{
-}
-
-void table_input::unget(char c)
-{
- assert(c != '\0');
- unget_stack += c;
- if (c == '\n')
- current_lineno--;
-}
-
-int table_input::get()
-{
- int len = unget_stack.length();
- if (len != 0) {
- unsigned char c = unget_stack[len - 1];
- unget_stack.set_length(len - 1);
- if (c == '\n')
- current_lineno++;
- return c;
- }
- int c;
- for (;;) {
- switch (state) {
- case START:
- if ((c = getc(fp)) == '.') {
- if ((c = getc(fp)) == 'T') {
- if ((c = getc(fp)) == 'E') {
- if (compatible_flag) {
- state = END;
- return EOF;
- }
- else {
- c = getc(fp);
- if (c != EOF)
- ungetc(c, fp);
- if (c == EOF || c == ' ' || c == '\n') {
- state = END;
- return EOF;
- }
- state = REREAD_TE;
- return '.';
- }
- }
- else {
- if (c != EOF)
- ungetc(c, fp);
- state = REREAD_T;
- return '.';
- }
- }
- else {
- if (c != EOF)
- ungetc(c, fp);
- state = MIDDLE;
- return '.';
- }
- }
- else if (c == EOF) {
- state = ERROR;
- return EOF;
- }
- else {
- if (c == '\n')
- current_lineno++;
- else {
- state = MIDDLE;
- if (c == '\0') {
- error("invalid input character code 0");
- break;
- }
- }
- return c;
- }
- break;
- case MIDDLE:
- // handle line continuation and uninterpreted leader character
- if ((c = getc(fp)) == '\\') {
- c = getc(fp);
- if (c == '\n')
- c = getc(fp); // perhaps state ought to be START now
- else if (c == 'a' && compatible_flag) {
- state = LEADER_1;
- return '\\';
- }
- else {
- if (c != EOF)
- ungetc(c, fp);
- c = '\\';
- }
- }
- if (c == EOF) {
- state = ERROR;
- return EOF;
- }
- else {
- if (c == '\n') {
- state = START;
- current_lineno++;
- }
- else if (c == '\0') {
- error("invalid input character code 0");
- break;
- }
- return c;
- }
- case REREAD_T:
- state = MIDDLE;
- return 'T';
- case REREAD_TE:
- state = REREAD_E;
- return 'T';
- case REREAD_E:
- state = MIDDLE;
- return 'E';
- case LEADER_1:
- state = LEADER_2;
- return '*';
- case LEADER_2:
- state = LEADER_3;
- return '(';
- case LEADER_3:
- state = LEADER_4;
- return PREFIX_CHAR;
- case LEADER_4:
- state = MIDDLE;
- return LEADER_CHAR;
- case END:
- case ERROR:
- return EOF;
- }
- }
-}
-
-void process_input_file(FILE *);
-void process_table(table_input &in);
-
-void process_input_file(FILE *fp)
-{
- enum { START, MIDDLE, HAD_DOT, HAD_T, HAD_TS, HAD_l, HAD_lf } state;
- state = START;
- int c;
- while ((c = getc(fp)) != EOF)
- switch (state) {
- case START:
- if (c == '.')
- state = HAD_DOT;
- else {
- if (c == '\n')
- current_lineno++;
- else
- state = MIDDLE;
- putchar(c);
- }
- break;
- case MIDDLE:
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- putchar(c);
- break;
- case HAD_DOT:
- if (c == 'T')
- state = HAD_T;
- else if (c == 'l')
- state = HAD_l;
- else {
- putchar('.');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_T:
- if (c == 'S')
- state = HAD_TS;
- else {
- putchar('.');
- putchar('T');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_TS:
- if (c == ' ' || c == '\n' || compatible_flag) {
- putchar('.');
- putchar('T');
- putchar('S');
- while (c != '\n') {
- if (c == EOF) {
- error("end of file at beginning of table");
- return;
- }
- putchar(c);
- c = getc(fp);
- }
- putchar('\n');
- current_lineno++;
- {
- table_input input(fp);
- process_table(input);
- set_troff_location(current_filename, current_lineno);
- if (input.ended()) {
- fputs(".TE", stdout);
- while ((c = getc(fp)) != '\n') {
- if (c == EOF) {
- putchar('\n');
- return;
- }
- putchar(c);
- }
- putchar('\n');
- current_lineno++;
- }
- }
- state = START;
- }
- else {
- fputs(".TS", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- case HAD_l:
- if (c == 'f')
- state = HAD_lf;
- else {
- putchar('.');
- putchar('l');
- putchar(c);
- if (c == '\n') {
- current_lineno++;
- state = START;
- }
- else
- state = MIDDLE;
- }
- break;
- case HAD_lf:
- if (c == ' ' || c == '\n' || compatible_flag) {
- string line;
- while (c != EOF) {
- line += c;
- if (c == '\n') {
- current_lineno++;
- break;
- }
- c = getc(fp);
- }
- line += '\0';
- interpret_lf_args(line.contents());
- printf(".lf%s", line.contents());
- state = START;
- }
- else {
- fputs(".lf", stdout);
- putchar(c);
- state = MIDDLE;
- }
- break;
- default:
- assert(0);
- }
- switch(state) {
- case START:
- break;
- case MIDDLE:
- putchar('\n');
- break;
- case HAD_DOT:
- fputs(".\n", stdout);
- break;
- case HAD_l:
- fputs(".l\n", stdout);
- break;
- case HAD_T:
- fputs(".T\n", stdout);
- break;
- case HAD_lf:
- fputs(".lf\n", stdout);
- break;
- case HAD_TS:
- fputs(".TS\n", stdout);
- break;
- }
- if (fp != stdin)
- fclose(fp);
-}
-
-struct options {
- unsigned flags;
- int linesize;
- char delim[2];
- char tab_char;
- char decimal_point_char;
-
- options();
-};
-
-options::options()
-: flags(0), linesize(0), tab_char('\t'), decimal_point_char('.')
-{
- delim[0] = delim[1] = '\0';
-}
-
-// Return non-zero if p and q are the same ignoring case.
-
-int strieq(const char *p, const char *q)
-{
- for (; cmlower(*p) == cmlower(*q); p++, q++)
- if (*p == '\0')
- return 1;
- return 0;
-}
-
-// return 0 if we should give up in this table
-
-options *process_options(table_input &in)
-{
- options *opt = new options;
- string line;
- int level = 0;
- for (;;) {
- int c = in.get();
- if (c == EOF) {
- int i = line.length();
- while (--i >= 0)
- in.unget(line[i]);
- return opt;
- }
- if (c == '\n') {
- in.unget(c);
- int i = line.length();
- while (--i >= 0)
- in.unget(line[i]);
- return opt;
- }
- else if (c == '(')
- level++;
- else if (c == ')')
- level--;
- else if (c == ';' && level == 0) {
- line += '\0';
- break;
- }
- line += c;
- }
- if (line.empty())
- return opt;
- char *p = &line[0];
- for (;;) {
- while (!csalpha(*p) && *p != '\0')
- p++;
- if (*p == '\0')
- break;
- char *q = p;
- while (csalpha(*q))
- q++;
- char *arg = 0;
- if (*q != '(' && *q != '\0')
- *q++ = '\0';
- while (csspace(*q))
- q++;
- if (*q == '(') {
- *q++ = '\0';
- arg = q;
- while (*q != ')' && *q != '\0')
- q++;
- if (*q == '\0')
- error("missing `)'");
- else
- *q++ = '\0';
- }
- if (*p == '\0') {
- if (arg)
- error("argument without option");
- }
- else if (strieq(p, "tab")) {
- if (!arg)
- error("`tab' option requires argument in parentheses");
- else {
- if (arg[0] == '\0' || arg[1] != '\0')
- error("argument to `tab' option must be a single character");
- else
- opt->tab_char = arg[0];
- }
- }
- else if (strieq(p, "linesize")) {
- if (!arg)
- error("`linesize' option requires argument in parentheses");
- else {
- if (sscanf(arg, "%d", &opt->linesize) != 1)
- error("bad linesize `%s'", arg);
- else if (opt->linesize <= 0) {
- error("linesize must be positive");
- opt->linesize = 0;
- }
- }
- }
- else if (strieq(p, "delim")) {
- if (!arg)
- error("`delim' option requires argument in parentheses");
- else if (arg[0] == '\0' || arg[1] == '\0' || arg[2] != '\0')
- error("argument to `delim' option must be two characters");
- else {
- opt->delim[0] = arg[0];
- opt->delim[1] = arg[1];
- }
- }
- else if (strieq(p, "center") || strieq(p, "centre")) {
- if (arg)
- error("`center' option does not take an argument");
- opt->flags |= table::CENTER;
- }
- else if (strieq(p, "expand")) {
- if (arg)
- error("`expand' option does not take an argument");
- opt->flags |= table::EXPAND;
- }
- else if (strieq(p, "box") || strieq(p, "frame")) {
- if (arg)
- error("`box' option does not take an argument");
- opt->flags |= table::BOX;
- }
- else if (strieq(p, "doublebox") || strieq(p, "doubleframe")) {
- if (arg)
- error("`doublebox' option does not take an argument");
- opt->flags |= table::DOUBLEBOX;
- }
- else if (strieq(p, "allbox")) {
- if (arg)
- error("`allbox' option does not take an argument");
- opt->flags |= table::ALLBOX;
- }
- else if (strieq(p, "nokeep")) {
- if (arg)
- error("`nokeep' option does not take an argument");
- opt->flags |= table::NOKEEP;
- }
- else if (strieq(p, "nospaces")) {
- if (arg)
- error("`nospaces' option does not take an argument");
- opt->flags |= table::NOSPACES;
- }
- else if (strieq(p, "decimalpoint")) {
- if (!arg)
- error("`decimalpoint' option requires argument in parentheses");
- else {
- if (arg[0] == '\0' || arg[1] != '\0')
- error("argument to `decimalpoint' option must be a single character");
- else
- opt->decimal_point_char = arg[0];
- }
- }
- else {
- error("unrecognised global option `%1'", p);
- // delete opt;
- // return 0;
- }
- p = q;
- }
- return opt;
-}
-
-entry_modifier::entry_modifier()
-: vertical_alignment(CENTER), zero_width(0), stagger(0)
-{
- vertical_spacing.inc = vertical_spacing.val = 0;
- point_size.inc = point_size.val = 0;
-}
-
-entry_modifier::~entry_modifier()
-{
-}
-
-entry_format::entry_format() : type(FORMAT_LEFT)
-{
-}
-
-entry_format::entry_format(format_type t) : type(t)
-{
-}
-
-void entry_format::debug_print() const
-{
- switch (type) {
- case FORMAT_LEFT:
- putc('l', stderr);
- break;
- case FORMAT_CENTER:
- putc('c', stderr);
- break;
- case FORMAT_RIGHT:
- putc('r', stderr);
- break;
- case FORMAT_NUMERIC:
- putc('n', stderr);
- break;
- case FORMAT_ALPHABETIC:
- putc('a', stderr);
- break;
- case FORMAT_SPAN:
- putc('s', stderr);
- break;
- case FORMAT_VSPAN:
- putc('^', stderr);
- break;
- case FORMAT_HLINE:
- putc('_', stderr);
- break;
- case FORMAT_DOUBLE_HLINE:
- putc('=', stderr);
- break;
- default:
- assert(0);
- break;
- }
- if (point_size.val != 0) {
- putc('p', stderr);
- if (point_size.inc > 0)
- putc('+', stderr);
- else if (point_size.inc < 0)
- putc('-', stderr);
- fprintf(stderr, "%d ", point_size.val);
- }
- if (vertical_spacing.val != 0) {
- putc('v', stderr);
- if (vertical_spacing.inc > 0)
- putc('+', stderr);
- else if (vertical_spacing.inc < 0)
- putc('-', stderr);
- fprintf(stderr, "%d ", vertical_spacing.val);
- }
- if (!font.empty()) {
- putc('f', stderr);
- put_string(font, stderr);
- putc(' ', stderr);
- }
- if (!macro.empty()) {
- putc('m', stderr);
- put_string(macro, stderr);
- putc(' ', stderr);
- }
- switch (vertical_alignment) {
- case entry_modifier::CENTER:
- break;
- case entry_modifier::TOP:
- putc('t', stderr);
- break;
- case entry_modifier::BOTTOM:
- putc('d', stderr);
- break;
- }
- if (zero_width)
- putc('z', stderr);
- if (stagger)
- putc('u', stderr);
-}
-
-struct format {
- int nrows;
- int ncolumns;
- int *separation;
- string *width;
- char *equal;
- entry_format **entry;
- char **vline;
-
- format(int nr, int nc);
- ~format();
- void add_rows(int n);
-};
-
-format::format(int nr, int nc) : nrows(nr), ncolumns(nc)
-{
- int i;
- separation = ncolumns > 1 ? new int[ncolumns - 1] : 0;
- for (i = 0; i < ncolumns-1; i++)
- separation[i] = -1;
- width = new string[ncolumns];
- equal = new char[ncolumns];
- for (i = 0; i < ncolumns; i++)
- equal[i] = 0;
- entry = new entry_format *[nrows];
- for (i = 0; i < nrows; i++)
- entry[i] = new entry_format[ncolumns];
- vline = new char*[nrows];
- for (i = 0; i < nrows; i++) {
- vline[i] = new char[ncolumns+1];
- for (int j = 0; j < ncolumns+1; j++)
- vline[i][j] = 0;
- }
-}
-
-void format::add_rows(int n)
-{
- int i;
- char **old_vline = vline;
- vline = new char*[nrows + n];
- for (i = 0; i < nrows; i++)
- vline[i] = old_vline[i];
- a_delete old_vline;
- for (i = 0; i < n; i++) {
- vline[nrows + i] = new char[ncolumns + 1];
- for (int j = 0; j < ncolumns + 1; j++)
- vline[nrows + i][j] = 0;
- }
- entry_format **old_entry = entry;
- entry = new entry_format *[nrows + n];
- for (i = 0; i < nrows; i++)
- entry[i] = old_entry[i];
- a_delete old_entry;
- for (i = 0; i < n; i++)
- entry[nrows + i] = new entry_format[ncolumns];
- nrows += n;
-}
-
-format::~format()
-{
- a_delete separation;
- ad_delete(ncolumns) width;
- a_delete equal;
- for (int i = 0; i < nrows; i++) {
- a_delete vline[i];
- ad_delete(ncolumns) entry[i];
- }
- a_delete vline;
- a_delete entry;
-}
-
-struct input_entry_format : public entry_format {
- input_entry_format *next;
- string width;
- int separation;
- int vline;
- int pre_vline;
- int last_column;
- int equal;
- input_entry_format(format_type, input_entry_format * = 0);
- ~input_entry_format();
- void debug_print();
-};
-
-input_entry_format::input_entry_format(format_type t, input_entry_format *p)
-: entry_format(t), next(p)
-{
- separation = -1;
- last_column = 0;
- vline = 0;
- pre_vline = 0;
- equal = 0;
-}
-
-input_entry_format::~input_entry_format()
-{
-}
-
-void free_input_entry_format_list(input_entry_format *list)
-{
- while (list) {
- input_entry_format *tem = list;
- list = list->next;
- delete tem;
- }
-}
-
-void input_entry_format::debug_print()
-{
- int i;
- for (i = 0; i < pre_vline; i++)
- putc('|', stderr);
- entry_format::debug_print();
- if (!width.empty()) {
- putc('w', stderr);
- putc('(', stderr);
- put_string(width, stderr);
- putc(')', stderr);
- }
- if (equal)
- putc('e', stderr);
- if (separation >= 0)
- fprintf(stderr, "%d", separation);
- for (i = 0; i < vline; i++)
- putc('|', stderr);
- if (last_column)
- putc(',', stderr);
-}
-
-// Return zero if we should give up on this table.
-// If this is a continuation format line, current_format will be the current
-// format line.
-
-format *process_format(table_input &in, options *opt,
- format *current_format = 0)
-{
- input_entry_format *list = 0;
- int c = in.get();
- for (;;) {
- int pre_vline = 0;
- int got_format = 0;
- int got_period = 0;
- format_type t = FORMAT_LEFT;
- for (;;) {
- if (c == EOF) {
- error("end of input while processing format");
- free_input_entry_format_list(list);
- return 0;
- }
- switch (c) {
- case 'n':
- case 'N':
- t = FORMAT_NUMERIC;
- got_format = 1;
- break;
- case 'a':
- case 'A':
- got_format = 1;
- t = FORMAT_ALPHABETIC;
- break;
- case 'c':
- case 'C':
- got_format = 1;
- t = FORMAT_CENTER;
- break;
- case 'l':
- case 'L':
- got_format = 1;
- t = FORMAT_LEFT;
- break;
- case 'r':
- case 'R':
- got_format = 1;
- t = FORMAT_RIGHT;
- break;
- case 's':
- case 'S':
- got_format = 1;
- t = FORMAT_SPAN;
- break;
- case '^':
- got_format = 1;
- t = FORMAT_VSPAN;
- break;
- case '_':
- case '-': // tbl also accepts this
- got_format = 1;
- t = FORMAT_HLINE;
- break;
- case '=':
- got_format = 1;
- t = FORMAT_DOUBLE_HLINE;
- break;
- case '.':
- got_period = 1;
- break;
- case '|':
- pre_vline++;
- break;
- case ' ':
- case '\t':
- case '\n':
- break;
- default:
- if (c == opt->tab_char)
- break;
- error("unrecognised format `%1'", char(c));
- free_input_entry_format_list(list);
- return 0;
- }
- if (got_period)
- break;
- c = in.get();
- if (got_format)
- break;
- }
- if (got_period)
- break;
- list = new input_entry_format(t, list);
- if (pre_vline)
- list->pre_vline = pre_vline;
- int success = 1;
- do {
- switch (c) {
- case 't':
- case 'T':
- c = in.get();
- list->vertical_alignment = entry_modifier::TOP;
- break;
- case 'd':
- case 'D':
- c = in.get();
- list->vertical_alignment = entry_modifier::BOTTOM;
- break;
- case 'u':
- case 'U':
- c = in.get();
- list->stagger = 1;
- break;
- case 'z':
- case 'Z':
- c = in.get();
- list->zero_width = 1;
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int w = 0;
- do {
- w = w*10 + (c - '0');
- c = in.get();
- } while (c != EOF && csdigit(c));
- list->separation = w;
- }
- break;
- case 'f':
- case 'F':
- do {
- c = in.get();
- } while (c == ' ' || c == '\t');
- if (c == EOF) {
- error("missing font name");
- break;
- }
- if (c == '(') {
- for (;;) {
- c = in.get();
- if (c == EOF || c == ' ' || c == '\t') {
- error("missing `)'");
- break;
- }
- if (c == ')') {
- c = in.get();
- break;
- }
- list->font += char(c);
- }
- }
- else {
- list->font = c;
- char cc = c;
- c = in.get();
- if (!csdigit(cc)
- && c != EOF && c != ' ' && c != '\t' && c != '.' && c != '\n') {
- list->font += char(c);
- c = in.get();
- }
- }
- break;
- case 'x':
- case 'X':
- do {
- c = in.get();
- } while (c == ' ' || c == '\t');
- if (c == EOF) {
- error("missing macro name");
- break;
- }
- if (c == '(') {
- for (;;) {
- c = in.get();
- if (c == EOF || c == ' ' || c == '\t') {
- error("missing `)'");
- break;
- }
- if (c == ')') {
- c = in.get();
- break;
- }
- list->macro += char(c);
- }
- }
- else {
- list->macro = c;
- char cc = c;
- c = in.get();
- if (!csdigit(cc)
- && c != EOF && c != ' ' && c != '\t' && c != '.' && c != '\n') {
- list->macro += char(c);
- c = in.get();
- }
- }
- break;
- case 'v':
- case 'V':
- c = in.get();
- list->vertical_spacing.val = 0;
- list->vertical_spacing.inc = 0;
- if (c == '+' || c == '-') {
- list->vertical_spacing.inc = (c == '+' ? 1 : -1);
- c = in.get();
- }
- if (c == EOF || !csdigit(c)) {
- error("`v' modifier must be followed by number");
- list->vertical_spacing.inc = 0;
- }
- else {
- do {
- list->vertical_spacing.val *= 10;
- list->vertical_spacing.val += c - '0';
- c = in.get();
- } while (c != EOF && csdigit(c));
- }
- if (list->vertical_spacing.val > MAX_VERTICAL_SPACING
- || list->vertical_spacing.val < -MAX_VERTICAL_SPACING) {
- error("unreasonable vertical spacing");
- list->vertical_spacing.val = 0;
- list->vertical_spacing.inc = 0;
- }
- break;
- case 'p':
- case 'P':
- c = in.get();
- list->point_size.val = 0;
- list->point_size.inc = 0;
- if (c == '+' || c == '-') {
- list->point_size.inc = (c == '+' ? 1 : -1);
- c = in.get();
- }
- if (c == EOF || !csdigit(c)) {
- error("`p' modifier must be followed by number");
- list->point_size.inc = 0;
- }
- else {
- do {
- list->point_size.val *= 10;
- list->point_size.val += c - '0';
- c = in.get();
- } while (c != EOF && csdigit(c));
- }
- if (list->point_size.val > MAX_POINT_SIZE
- || list->point_size.val < -MAX_POINT_SIZE) {
- error("unreasonable point size");
- list->point_size.val = 0;
- list->point_size.inc = 0;
- }
- break;
- case 'w':
- case 'W':
- c = in.get();
- while (c == ' ' || c == '\t')
- c = in.get();
- if (c == '(') {
- list->width = "";
- c = in.get();
- while (c != ')') {
- if (c == EOF || c == '\n') {
- error("missing `)'");
- free_input_entry_format_list(list);
- return 0;
- }
- list->width += c;
- c = in.get();
- }
- c = in.get();
- }
- else {
- if (c == '+' || c == '-') {
- list->width = char(c);
- c = in.get();
- }
- else
- list->width = "";
- if (c == EOF || !csdigit(c))
- error("bad argument for `w' modifier");
- else {
- do {
- list->width += char(c);
- c = in.get();
- } while (c != EOF && csdigit(c));
- }
- }
- break;
- case 'e':
- case 'E':
- c = in.get();
- list->equal++;
- break;
- case '|':
- c = in.get();
- list->vline++;
- break;
- case 'B':
- case 'b':
- c = in.get();
- list->font = "B";
- break;
- case 'I':
- case 'i':
- c = in.get();
- list->font = "I";
- break;
- case ' ':
- case '\t':
- c = in.get();
- break;
- default:
- if (c == opt->tab_char)
- c = in.get();
- else
- success = 0;
- break;
- }
- } while (success);
- if (list->vline > 2) {
- list->vline = 2;
- error("more than 2 vertical bars between key letters");
- }
- if (c == '\n' || c == ',') {
- c = in.get();
- list->last_column = 1;
- }
- }
- if (c == '.') {
- do {
- c = in.get();
- } while (c == ' ' || c == '\t');
- if (c != '\n') {
- error("`.' not last character on line");
- free_input_entry_format_list(list);
- return 0;
- }
- }
- if (!list) {
- error("no format");
- free_input_entry_format_list(list);
- return 0;
- }
- list->last_column = 1;
- // now reverse the list so that the first row is at the beginning
- input_entry_format *rev = 0;
- while (list != 0) {
- input_entry_format *tem = list->next;
- list->next = rev;
- rev = list;
- list = tem;
- }
- list = rev;
- input_entry_format *tem;
-
-#if 0
- for (tem = list; tem; tem = tem->next)
- tem->debug_print();
- putc('\n', stderr);
-#endif
- // compute number of columns and rows
- int ncolumns = 0;
- int nrows = 0;
- int col = 0;
- for (tem = list; tem; tem = tem->next) {
- if (tem->last_column) {
- if (col >= ncolumns)
- ncolumns = col + 1;
- col = 0;
- nrows++;
- }
- else
- col++;
- }
- int row;
- format *f;
- if (current_format) {
- if (ncolumns > current_format->ncolumns) {
- error("cannot increase the number of columns in a continued format");
- free_input_entry_format_list(list);
- return 0;
- }
- f = current_format;
- row = f->nrows;
- f->add_rows(nrows);
- }
- else {
- f = new format(nrows, ncolumns);
- row = 0;
- }
- col = 0;
- for (tem = list; tem; tem = tem->next) {
- f->entry[row][col] = *tem;
- if (col < ncolumns-1) {
- // use the greatest separation
- if (tem->separation > f->separation[col]) {
- if (current_format)
- error("cannot change column separation in continued format");
- else
- f->separation[col] = tem->separation;
- }
- }
- else if (tem->separation >= 0)
- error("column separation specified for last column");
- if (tem->equal && !f->equal[col]) {
- if (current_format)
- error("cannot change which columns are equal in continued format");
- else
- f->equal[col] = 1;
- }
- if (!tem->width.empty()) {
- // use the last width
- if (!f->width[col].empty() && f->width[col] != tem->width)
- error("multiple widths for column %1", col+1);
- f->width[col] = tem->width;
- }
- if (tem->pre_vline) {
- assert(col == 0);
- f->vline[row][col] = tem->pre_vline;
- }
- f->vline[row][col+1] = tem->vline;
- if (tem->last_column) {
- row++;
- col = 0;
- }
- else
- col++;
- }
- free_input_entry_format_list(list);
- for (col = 0; col < ncolumns; col++) {
- entry_format *e = f->entry[f->nrows-1] + col;
- if (e->type != FORMAT_HLINE
- && e->type != FORMAT_DOUBLE_HLINE
- && e->type != FORMAT_SPAN)
- break;
- }
- if (col >= ncolumns) {
- error("last row of format is all lines");
- delete f;
- return 0;
- }
- return f;
-}
-
-table *process_data(table_input &in, format *f, options *opt)
-{
- char tab_char = opt->tab_char;
- int ncolumns = f->ncolumns;
- int current_row = 0;
- int format_index = 0;
- int give_up = 0;
- enum { DATA_INPUT_LINE, TROFF_INPUT_LINE, SINGLE_HLINE, DOUBLE_HLINE } type;
- table *tbl = new table(ncolumns, opt->flags, opt->linesize,
- opt->decimal_point_char);
- if (opt->delim[0] != '\0')
- tbl->set_delim(opt->delim[0], opt->delim[1]);
- for (;;) {
- // first determine what type of line this is
- int c = in.get();
- if (c == EOF)
- break;
- if (c == '.') {
- int d = in.get();
- if (d != EOF && csdigit(d)) {
- in.unget(d);
- type = DATA_INPUT_LINE;
- }
- else {
- in.unget(d);
- type = TROFF_INPUT_LINE;
- }
- }
- else if (c == '_' || c == '=') {
- int d = in.get();
- if (d == '\n') {
- if (c == '_')
- type = SINGLE_HLINE;
- else
- type = DOUBLE_HLINE;
- }
- else {
- in.unget(d);
- type = DATA_INPUT_LINE;
- }
- }
- else {
- type = DATA_INPUT_LINE;
- }
- switch (type) {
- case DATA_INPUT_LINE:
- {
- string input_entry;
- if (format_index >= f->nrows)
- format_index = f->nrows - 1;
- // A format row that is all lines doesn't use up a data line.
- while (format_index < f->nrows - 1) {
- int cnt;
- for (cnt = 0; cnt < ncolumns; cnt++) {
- entry_format *e = f->entry[format_index] + cnt;
- if (e->type != FORMAT_HLINE
- && e->type != FORMAT_DOUBLE_HLINE
- // Unfortunately tbl treats a span as needing data.
- // && e->type != FORMAT_SPAN
- )
- break;
- }
- if (cnt < ncolumns)
- break;
- for (cnt = 0; cnt < ncolumns; cnt++)
- tbl->add_entry(current_row, cnt, input_entry,
- f->entry[format_index] + cnt, current_filename,
- current_lineno);
- tbl->add_vlines(current_row, f->vline[format_index]);
- format_index++;
- current_row++;
- }
- entry_format *line_format = f->entry[format_index];
- int col = 0;
- int row_comment = 0;
- for (;;) {
- if (c == tab_char || c == '\n') {
- int ln = current_lineno;
- if (c == '\n')
- --ln;
- if ((opt->flags & table::NOSPACES))
- input_entry.remove_spaces();
- while (col < ncolumns
- && line_format[col].type == FORMAT_SPAN) {
- tbl->add_entry(current_row, col, "", &line_format[col],
- current_filename, ln);
- col++;
- }
- if (c == '\n' && input_entry.length() == 2
- && input_entry[0] == 'T' && input_entry[1] == '{') {
- input_entry = "";
- ln++;
- enum {
- START, MIDDLE, GOT_T, GOT_RIGHT_BRACE, GOT_DOT,
- GOT_l, GOT_lf, END
- } state = START;
- while (state != END) {
- c = in.get();
- if (c == EOF)
- break;
- switch (state) {
- case START:
- if (c == 'T')
- state = GOT_T;
- else if (c == '.')
- state = GOT_DOT;
- else {
- input_entry += c;
- if (c != '\n')
- state = MIDDLE;
- }
- break;
- case GOT_T:
- if (c == '}')
- state = GOT_RIGHT_BRACE;
- else {
- input_entry += 'T';
- input_entry += c;
- state = c == '\n' ? START : MIDDLE;
- }
- break;
- case GOT_DOT:
- if (c == 'l')
- state = GOT_l;
- else {
- input_entry += '.';
- input_entry += c;
- state = c == '\n' ? START : MIDDLE;
- }
- break;
- case GOT_l:
- if (c == 'f')
- state = GOT_lf;
- else {
- input_entry += ".l";
- input_entry += c;
- state = c == '\n' ? START : MIDDLE;
- }
- break;
- case GOT_lf:
- if (c == ' ' || c == '\n' || compatible_flag) {
- string args;
- input_entry += ".lf";
- while (c != EOF) {
- args += c;
- if (c == '\n')
- break;
- c = in.get();
- }
- args += '\0';
- interpret_lf_args(args.contents());
- // remove the '\0'
- args.set_length(args.length() - 1);
- input_entry += args;
- state = START;
- }
- else {
- input_entry += ".lf";
- input_entry += c;
- state = MIDDLE;
- }
- break;
- case GOT_RIGHT_BRACE:
- if ((opt->flags & table::NOSPACES)) {
- while (c == ' ')
- c = in.get();
- if (c == EOF)
- break;
- }
- if (c == '\n' || c == tab_char)
- state = END;
- else {
- input_entry += 'T';
- input_entry += '}';
- input_entry += c;
- state = MIDDLE;
- }
- break;
- case MIDDLE:
- if (c == '\n')
- state = START;
- input_entry += c;
- break;
- case END:
- default:
- assert(0);
- }
- }
- if (c == EOF) {
- error("end of data in middle of text block");
- give_up = 1;
- break;
- }
- }
- if (col >= ncolumns) {
- if (!input_entry.empty()) {
- if (input_entry.length() >= 2
- && input_entry[0] == '\\'
- && input_entry[1] == '"')
- row_comment = 1;
- else if (!row_comment) {
- if (c == '\n')
- in.unget(c);
- input_entry += '\0';
- error("excess data entry `%1' discarded",
- input_entry.contents());
- if (c == '\n')
- (void)in.get();
- }
- }
- }
- else
- tbl->add_entry(current_row, col, input_entry,
- &line_format[col], current_filename, ln);
- col++;
- if (c == '\n')
- break;
- input_entry = "";
- }
- else
- input_entry += c;
- c = in.get();
- if (c == EOF)
- break;
- }
- if (give_up)
- break;
- input_entry = "";
- for (; col < ncolumns; col++)
- tbl->add_entry(current_row, col, input_entry, &line_format[col],
- current_filename, current_lineno - 1);
- tbl->add_vlines(current_row, f->vline[format_index]);
- current_row++;
- format_index++;
- }
- break;
- case TROFF_INPUT_LINE:
- {
- string line;
- int ln = current_lineno;
- for (;;) {
- line += c;
- if (c == '\n')
- break;
- c = in.get();
- if (c == EOF) {
- break;
- }
- }
- tbl->add_text_line(current_row, line, current_filename, ln);
- if (line.length() >= 4
- && line[0] == '.' && line[1] == 'T' && line[2] == '&') {
- format *newf = process_format(in, opt, f);
- if (newf == 0)
- give_up = 1;
- else
- f = newf;
- }
- if (line.length() >= 3
- && line[0] == '.' && line[1] == 'l' && line[2] == 'f') {
- line += '\0';
- interpret_lf_args(line.contents() + 3);
- }
- }
- break;
- case SINGLE_HLINE:
- tbl->add_single_hline(current_row);
- break;
- case DOUBLE_HLINE:
- tbl->add_double_hline(current_row);
- break;
- default:
- assert(0);
- }
- if (give_up)
- break;
- }
- if (!give_up && current_row == 0) {
- error("no real data");
- give_up = 1;
- }
- if (give_up) {
- delete tbl;
- return 0;
- }
- // Do this here rather than at the beginning in case continued formats
- // change it.
- int i;
- for (i = 0; i < ncolumns - 1; i++)
- if (f->separation[i] >= 0)
- tbl->set_column_separation(i, f->separation[i]);
- for (i = 0; i < ncolumns; i++)
- if (!f->width[i].empty())
- tbl->set_minimum_width(i, f->width[i]);
- for (i = 0; i < ncolumns; i++)
- if (f->equal[i])
- tbl->set_equal_column(i);
- return tbl;
-}
-
-void process_table(table_input &in)
-{
- options *opt = 0;
- format *form = 0;
- table *tbl = 0;
- if ((opt = process_options(in)) != 0
- && (form = process_format(in, opt)) != 0
- && (tbl = process_data(in, form, opt)) != 0) {
- tbl->print();
- delete tbl;
- }
- else {
- error("giving up on this table");
- while (in.get() != EOF)
- ;
- }
- delete opt;
- delete form;
- if (!in.ended())
- error("premature end of file");
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [ -vC ] [ files... ]\n", program_name);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "vCT:", long_options, NULL)) != EOF)
- switch (opt) {
- case 'C':
- compatible_flag = 1;
- break;
- case 'v':
- {
- printf("GNU tbl (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'T':
- // I'm sick of getting bug reports from IRIX users
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- printf(".if !\\n(.g .ab GNU tbl requires GNU troff.\n"
- ".if !dTS .ds TS\n"
- ".if !dTE .ds TE\n");
- if (argc > optind) {
- for (int i = optind; i < argc; i++)
- if (argv[i][0] == '-' && argv[i][1] == '\0') {
- current_filename = "-";
- current_lineno = 1;
- printf(".lf 1 -\n");
- process_input_file(stdin);
- }
- else {
- errno = 0;
- FILE *fp = fopen(argv[i], "r");
- if (fp == 0)
- fatal("can't open `%1': %2", argv[i], strerror(errno));
- else {
- current_lineno = 1;
- current_filename = argv[i];
- printf(".lf 1 %s\n", current_filename);
- process_input_file(fp);
- }
- }
- }
- else {
- current_filename = "-";
- current_lineno = 1;
- printf(".lf 1 -\n");
- process_input_file(stdin);
- }
- if (ferror(stdout) || fflush(stdout) < 0)
- fatal("output error");
- return 0;
-}
-
diff --git a/contrib/groff/src/preproc/tbl/table.cpp b/contrib/groff/src/preproc/tbl/table.cpp
deleted file mode 100644
index 8312386aafee..000000000000
--- a/contrib/groff/src/preproc/tbl/table.cpp
+++ /dev/null
@@ -1,2778 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "table.h"
-
-#define BAR_HEIGHT ".25m"
-#define DOUBLE_LINE_SEP "2p"
-#define HALF_DOUBLE_LINE_SEP "1p"
-#define LINE_SEP "2p"
-#define BODY_DEPTH ".25m"
-
-const int DEFAULT_COLUMN_SEPARATION = 3;
-
-#define DELIMITER_CHAR "\\[tbl]"
-#define SEPARATION_FACTOR_REG PREFIX "sep"
-#define BOTTOM_REG PREFIX "bot"
-#define RESET_MACRO_NAME PREFIX "init"
-#define LINESIZE_REG PREFIX "lps"
-#define TOP_REG PREFIX "top"
-#define CURRENT_ROW_REG PREFIX "crow"
-#define LAST_PASSED_ROW_REG PREFIX "passed"
-#define TRANSPARENT_STRING_NAME PREFIX "trans"
-#define QUOTE_STRING_NAME PREFIX "quote"
-#define SECTION_DIVERSION_NAME PREFIX "section"
-#define SECTION_DIVERSION_FLAG_REG PREFIX "sflag"
-#define SAVED_VERTICAL_POS_REG PREFIX "vert"
-#define NEED_BOTTOM_RULE_REG PREFIX "brule"
-#define KEEP_MACRO_NAME PREFIX "keep"
-#define RELEASE_MACRO_NAME PREFIX "release"
-#define SAVED_FONT_REG PREFIX "fnt"
-#define SAVED_SIZE_REG PREFIX "sz"
-#define SAVED_FILL_REG PREFIX "fll"
-#define SAVED_INDENT_REG PREFIX "ind"
-#define SAVED_CENTER_REG PREFIX "cent"
-#define TABLE_DIVERSION_NAME PREFIX "table"
-#define TABLE_DIVERSION_FLAG_REG PREFIX "tflag"
-#define TABLE_KEEP_MACRO_NAME PREFIX "tkeep"
-#define TABLE_RELEASE_MACRO_NAME PREFIX "trelease"
-#define NEEDED_REG PREFIX "needed"
-#define REPEATED_MARK_MACRO PREFIX "rmk"
-#define REPEATED_VPT_MACRO PREFIX "rvpt"
-#define SUPPRESS_BOTTOM_REG PREFIX "supbot"
-#define SAVED_DN_REG PREFIX "dn"
-
-// this must be one character
-#define COMPATIBLE_REG PREFIX "c"
-
-#define LEADER_REG PREFIX LEADER
-
-#define BLOCK_WIDTH_PREFIX PREFIX "tbw"
-#define BLOCK_DIVERSION_PREFIX PREFIX "tbd"
-#define BLOCK_HEIGHT_PREFIX PREFIX "tbh"
-#define SPAN_WIDTH_PREFIX PREFIX "w"
-#define SPAN_LEFT_NUMERIC_WIDTH_PREFIX PREFIX "lnw"
-#define SPAN_RIGHT_NUMERIC_WIDTH_PREFIX PREFIX "rnw"
-#define SPAN_ALPHABETIC_WIDTH_PREFIX PREFIX "aw"
-#define COLUMN_SEPARATION_PREFIX PREFIX "cs"
-#define ROW_START_PREFIX PREFIX "rs"
-#define COLUMN_START_PREFIX PREFIX "cl"
-#define COLUMN_END_PREFIX PREFIX "ce"
-#define COLUMN_DIVIDE_PREFIX PREFIX "cd"
-#define ROW_TOP_PREFIX PREFIX "rt"
-
-string block_width_reg(int r, int c);
-string block_diversion_name(int r, int c);
-string block_height_reg(int r, int c);
-string span_width_reg(int start_col, int end_col);
-string span_left_numeric_width_reg(int start_col, int end_col);
-string span_right_numeric_width_reg(int start_col, int end_col);
-string span_alphabetic_width_reg(int start_col, int end_col);
-string column_separation_reg(int col);
-string row_start_reg(int r);
-string column_start_reg(int c);
-string column_end_reg(int c);
-string column_divide_reg(int c);
-string row_top_reg(int r);
-
-void set_inline_modifier(const entry_modifier *);
-void restore_inline_modifier(const entry_modifier *m);
-void set_modifier(const entry_modifier *);
-int find_decimal_point(const char *s, char decimal_point_char,
- const char *delim);
-
-string an_empty_string;
-int location_force_filename = 0;
-
-void printfs(const char *,
- const string &arg1 = an_empty_string,
- const string &arg2 = an_empty_string,
- const string &arg3 = an_empty_string,
- const string &arg4 = an_empty_string,
- const string &arg5 = an_empty_string);
-
-void prints(const string &);
-
-inline void prints(char c)
-{
- putchar(c);
-}
-
-inline void prints(const char *s)
-{
- fputs(s, stdout);
-}
-
-void prints(const string &s)
-{
- if (!s.empty())
- fwrite(s.contents(), 1, s.length(), stdout);
-}
-
-struct horizontal_span {
- horizontal_span *next;
- int start_col;
- int end_col;
- horizontal_span(int, int, horizontal_span *);
-};
-
-class single_line_entry;
-class double_line_entry;
-class simple_entry;
-
-class table_entry {
-friend class table;
- table_entry *next;
- int input_lineno;
- const char *input_filename;
-protected:
- int start_row;
- int end_row;
- int start_col;
- int end_col;
- const entry_modifier *mod;
-public:
- void set_location();
- table_entry(const entry_modifier *);
- virtual ~table_entry();
- virtual int divert(int ncols, const string *mw, int *sep);
- virtual void do_width();
- virtual void do_depth();
- virtual void print() = 0;
- virtual void position_vertically() = 0;
- virtual single_line_entry *to_single_line_entry();
- virtual double_line_entry *to_double_line_entry();
- virtual simple_entry *to_simple_entry();
- virtual int line_type();
- virtual void note_double_vrule_on_right(int);
- virtual void note_double_vrule_on_left(int);
-};
-
-class simple_entry : public table_entry {
-public:
- simple_entry(const entry_modifier *);
- void print();
- void position_vertically();
- simple_entry *to_simple_entry();
- virtual void add_tab();
- virtual void simple_print(int);
-};
-
-class empty_entry : public simple_entry {
-public:
- empty_entry(const entry_modifier *);
- int line_type();
-};
-
-class text_entry : public simple_entry {
-protected:
- char *contents;
- void print_contents();
-public:
- text_entry(char *, const entry_modifier *);
- ~text_entry();
-};
-
-void text_entry::print_contents()
-{
- set_inline_modifier(mod);
- prints(contents);
- restore_inline_modifier(mod);
-}
-
-class repeated_char_entry : public text_entry {
-public:
- repeated_char_entry(char *s, const entry_modifier *m);
- void simple_print(int);
-};
-
-class simple_text_entry : public text_entry {
-public:
- simple_text_entry(char *s, const entry_modifier *m);
- void do_width();
-};
-
-class left_text_entry : public simple_text_entry {
-public:
- left_text_entry(char *s, const entry_modifier *m);
- void simple_print(int);
- void add_tab();
-};
-
-class right_text_entry : public simple_text_entry {
-public:
- right_text_entry(char *s, const entry_modifier *m);
- void simple_print(int);
- void add_tab();
-};
-
-class center_text_entry : public simple_text_entry {
-public:
- center_text_entry(char *s, const entry_modifier *m);
- void simple_print(int);
- void add_tab();
-};
-
-class numeric_text_entry : public text_entry {
- int dot_pos;
-public:
- numeric_text_entry(char *s, const entry_modifier *m, int pos);
- void do_width();
- void simple_print(int);
-};
-
-class alphabetic_text_entry : public text_entry {
-public:
- alphabetic_text_entry(char *s, const entry_modifier *m);
- void do_width();
- void simple_print(int);
- void add_tab();
-};
-
-class line_entry : public simple_entry {
-protected:
- char double_vrule_on_right;
- char double_vrule_on_left;
-public:
- line_entry(const entry_modifier *);
- void note_double_vrule_on_right(int);
- void note_double_vrule_on_left(int);
- void simple_print(int) = 0;
-};
-
-class single_line_entry : public line_entry {
-public:
- single_line_entry(const entry_modifier *m);
- void simple_print(int);
- single_line_entry *to_single_line_entry();
- int line_type();
-};
-
-class double_line_entry : public line_entry {
-public:
- double_line_entry(const entry_modifier *m);
- void simple_print(int);
- double_line_entry *to_double_line_entry();
- int line_type();
-};
-
-class short_line_entry : public simple_entry {
-public:
- short_line_entry(const entry_modifier *m);
- void simple_print(int);
- int line_type();
-};
-
-class short_double_line_entry : public simple_entry {
-public:
- short_double_line_entry(const entry_modifier *m);
- void simple_print(int);
- int line_type();
-};
-
-class block_entry : public table_entry {
- char *contents;
-protected:
- void do_divert(int alphabetic, int ncols, const string *mw, int *sep);
-public:
- block_entry(char *s, const entry_modifier *m);
- ~block_entry();
- int divert(int ncols, const string *mw, int *sep);
- void do_width();
- void do_depth();
- void position_vertically();
- void print() = 0;
-};
-
-class left_block_entry : public block_entry {
-public:
- left_block_entry(char *s, const entry_modifier *m);
- void print();
-};
-
-class right_block_entry : public block_entry {
-public:
- right_block_entry(char *s, const entry_modifier *m);
- void print();
-};
-
-class center_block_entry : public block_entry {
-public:
- center_block_entry(char *s, const entry_modifier *m);
- void print();
-};
-
-class alphabetic_block_entry : public block_entry {
-public:
- alphabetic_block_entry(char *s, const entry_modifier *m);
- void print();
- int divert(int ncols, const string *mw, int *sep);
-};
-
-table_entry::table_entry(const entry_modifier *m)
-: next(0), input_lineno(-1), input_filename(0),
- start_row(-1), end_row(-1), start_col(-1), end_col(-1), mod(m)
-{
-}
-
-table_entry::~table_entry()
-{
-}
-
-int table_entry::divert(int, const string *, int *)
-{
- return 0;
-}
-
-void table_entry::do_width()
-{
-}
-
-single_line_entry *table_entry::to_single_line_entry()
-{
- return 0;
-}
-
-double_line_entry *table_entry::to_double_line_entry()
-{
- return 0;
-}
-
-simple_entry *table_entry::to_simple_entry()
-{
- return 0;
-}
-
-void table_entry::do_depth()
-{
-}
-
-void table_entry::set_location()
-{
- set_troff_location(input_filename, input_lineno);
-}
-
-int table_entry::line_type()
-{
- return -1;
-}
-
-void table_entry::note_double_vrule_on_right(int)
-{
-}
-
-void table_entry::note_double_vrule_on_left(int)
-{
-}
-
-simple_entry::simple_entry(const entry_modifier *m) : table_entry(m)
-{
-}
-
-void simple_entry::add_tab()
-{
- // do nothing
-}
-
-void simple_entry::simple_print(int)
-{
- // do nothing
-}
-
-void simple_entry::position_vertically()
-{
- if (start_row != end_row)
- switch (mod->vertical_alignment) {
- case entry_modifier::TOP:
- printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));
- break;
- case entry_modifier::CENTER:
- // Peform the motion in two stages so that the center is rounded
- // vertically upwards even if net vertical motion is upwards.
- printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));
- printfs(".sp \\n[" BOTTOM_REG "]u-\\n[%1]u-1v/2u\n",
- row_start_reg(start_row));
- break;
- case entry_modifier::BOTTOM:
- printfs(".sp |\\n[%1]u+\\n[" BOTTOM_REG "]u-\\n[%1]u-1v\n",
- row_start_reg(start_row));
- break;
- default:
- assert(0);
- }
-}
-
-void simple_entry::print()
-{
- prints(".ta");
- add_tab();
- prints('\n');
- set_location();
- prints("\\&");
- simple_print(0);
- prints('\n');
-}
-
-simple_entry *simple_entry::to_simple_entry()
-{
- return this;
-}
-
-empty_entry::empty_entry(const entry_modifier *m)
-: simple_entry(m)
-{
-}
-
-int empty_entry::line_type()
-{
- return 0;
-}
-
-text_entry::text_entry(char *s, const entry_modifier *m)
-: simple_entry(m), contents(s)
-{
-}
-
-text_entry::~text_entry()
-{
- a_delete contents;
-}
-
-repeated_char_entry::repeated_char_entry(char *s, const entry_modifier *m)
-: text_entry(s, m)
-{
-}
-
-void repeated_char_entry::simple_print(int)
-{
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- set_inline_modifier(mod);
- printfs("\\l" DELIMITER_CHAR "\\n[%1]u\\&",
- span_width_reg(start_col, end_col));
- prints(contents);
- prints(DELIMITER_CHAR);
- restore_inline_modifier(mod);
-}
-
-simple_text_entry::simple_text_entry(char *s, const entry_modifier *m)
-: text_entry(s, m)
-{
-}
-
-void simple_text_entry::do_width()
-{
- set_location();
- printfs(".nr %1 \\n[%1]>?\\w" DELIMITER_CHAR,
- span_width_reg(start_col, end_col));
- print_contents();
- prints(DELIMITER_CHAR "\n");
-}
-
-left_text_entry::left_text_entry(char *s, const entry_modifier *m)
-: simple_text_entry(s, m)
-{
-}
-
-void left_text_entry::simple_print(int)
-{
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- print_contents();
-}
-
-// The only point of this is to make `\a' ``work'' as in Unix tbl. Grrr.
-
-void left_text_entry::add_tab()
-{
- printfs(" \\n[%1]u", column_end_reg(end_col));
-}
-
-right_text_entry::right_text_entry(char *s, const entry_modifier *m)
-: simple_text_entry(s, m)
-{
-}
-
-void right_text_entry::simple_print(int)
-{
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- prints("\002\003");
- print_contents();
- prints("\002");
-}
-
-void right_text_entry::add_tab()
-{
- printfs(" \\n[%1]u", column_end_reg(end_col));
-}
-
-center_text_entry::center_text_entry(char *s, const entry_modifier *m)
-: simple_text_entry(s, m)
-{
-}
-
-void center_text_entry::simple_print(int)
-{
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- prints("\002\003");
- print_contents();
- prints("\003\002");
-}
-
-void center_text_entry::add_tab()
-{
- printfs(" \\n[%1]u", column_end_reg(end_col));
-}
-
-numeric_text_entry::numeric_text_entry(char *s, const entry_modifier *m, int pos)
-: text_entry(s, m), dot_pos(pos)
-{
-}
-
-void numeric_text_entry::do_width()
-{
- if (dot_pos != 0) {
- set_location();
- printfs(".nr %1 0\\w" DELIMITER_CHAR,
- block_width_reg(start_row, start_col));
- set_inline_modifier(mod);
- for (int i = 0; i < dot_pos; i++)
- prints(contents[i]);
- restore_inline_modifier(mod);
- prints(DELIMITER_CHAR "\n");
- printfs(".nr %1 \\n[%1]>?\\n[%2]\n",
- span_left_numeric_width_reg(start_col, end_col),
- block_width_reg(start_row, start_col));
- }
- else
- printfs(".nr %1 0\n", block_width_reg(start_row, start_col));
- if (contents[dot_pos] != '\0') {
- set_location();
- printfs(".nr %1 \\n[%1]>?\\w" DELIMITER_CHAR,
- span_right_numeric_width_reg(start_col, end_col));
- set_inline_modifier(mod);
- prints(contents + dot_pos);
- restore_inline_modifier(mod);
- prints(DELIMITER_CHAR "\n");
- }
-}
-
-void numeric_text_entry::simple_print(int)
-{
- printfs("\\h'|(\\n[%1]u-\\n[%2]u-\\n[%3]u/2u+\\n[%2]u+\\n[%4]u-\\n[%5]u)'",
- span_width_reg(start_col, end_col),
- span_left_numeric_width_reg(start_col, end_col),
- span_right_numeric_width_reg(start_col, end_col),
- column_start_reg(start_col),
- block_width_reg(start_row, start_col));
- print_contents();
-}
-
-alphabetic_text_entry::alphabetic_text_entry(char *s, const entry_modifier *m)
-: text_entry(s, m)
-{
-}
-
-void alphabetic_text_entry::do_width()
-{
- set_location();
- printfs(".nr %1 \\n[%1]>?\\w" DELIMITER_CHAR,
- span_alphabetic_width_reg(start_col, end_col));
- print_contents();
- prints(DELIMITER_CHAR "\n");
-}
-
-void alphabetic_text_entry::simple_print(int)
-{
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- printfs("\\h'\\n[%1]u-\\n[%2]u/2u'",
- span_width_reg(start_col, end_col),
- span_alphabetic_width_reg(start_col, end_col));
- print_contents();
-}
-
-// The only point of this is to make `\a' ``work'' as in Unix tbl. Grrr.
-
-void alphabetic_text_entry::add_tab()
-{
- printfs(" \\n[%1]u", column_end_reg(end_col));
-}
-
-block_entry::block_entry(char *s, const entry_modifier *m)
-: table_entry(m), contents(s)
-{
-}
-
-block_entry::~block_entry()
-{
- a_delete contents;
-}
-
-void block_entry::position_vertically()
-{
- if (start_row != end_row)
- switch(mod->vertical_alignment) {
- case entry_modifier::TOP:
- printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));
- break;
- case entry_modifier::CENTER:
- // Peform the motion in two stages so that the center is rounded
- // vertically upwards even if net vertical motion is upwards.
- printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));
- printfs(".sp \\n[" BOTTOM_REG "]u-\\n[%1]u-\\n[%2]u/2u\n",
- row_start_reg(start_row),
- block_height_reg(start_row, start_col));
- break;
- case entry_modifier::BOTTOM:
- printfs(".sp |\\n[%1]u+\\n[" BOTTOM_REG "]u-\\n[%1]u-\\n[%2]u\n",
- row_start_reg(start_row),
- block_height_reg(start_row, start_col));
- break;
- default:
- assert(0);
- }
- if (mod->stagger)
- prints(".sp -.5v\n");
-}
-
-int block_entry::divert(int ncols, const string *mw, int *sep)
-{
- do_divert(0, ncols, mw, sep);
- return 1;
-}
-
-void block_entry::do_divert(int alphabetic, int ncols, const string *mw,
- int *sep)
-{
- printfs(".di %1\n", block_diversion_name(start_row, start_col));
- prints(".if \\n[" SAVED_FILL_REG "] .fi\n"
- ".in 0\n");
- prints(".ll ");
- int i;
- for (i = start_col; i <= end_col; i++)
- if (mw[i].empty())
- break;
- if (i > end_col) {
- // Every column spanned by this entry has a minimum width.
- for (int j = start_col; j <= end_col; j++) {
- if (j > start_col) {
- if (sep)
- printfs("+%1n", as_string(sep[j - 1]));
- prints('+');
- }
- printfs("(n;%1)", mw[j]);
- }
- printfs(">?\\n[%1]u", span_width_reg(start_col, end_col));
- }
- else
- printfs("(u;\\n[%1]>?(\\n[.l]*%2/%3))",
- span_width_reg(start_col, end_col),
- as_string(end_col - start_col + 1),
- as_string(ncols + 1));
- if (alphabetic)
- prints("-2n");
- prints("\n");
- prints(".cp \\n(" COMPATIBLE_REG "\n");
- set_modifier(mod);
- set_location();
- prints(contents);
- prints(".br\n.di\n.cp 0\n");
- if (!mod->zero_width) {
- if (alphabetic) {
- printfs(".nr %1 \\n[%1]>?(\\n[dl]+2n)\n",
- span_width_reg(start_col, end_col));
- printfs(".nr %1 \\n[%1]>?\\n[dl]\n",
- span_alphabetic_width_reg(start_col, end_col));
- }
- else
- printfs(".nr %1 \\n[%1]>?\\n[dl]\n", span_width_reg(start_col, end_col));
- }
- printfs(".nr %1 \\n[dn]\n", block_height_reg(start_row, start_col));
- printfs(".nr %1 \\n[dl]\n", block_width_reg(start_row, start_col));
- prints("." RESET_MACRO_NAME "\n"
- ".in \\n[" SAVED_INDENT_REG "]u\n"
- ".nf\n");
- // the block might have contained .lf commands
- location_force_filename = 1;
-}
-
-void block_entry::do_width()
-{
- // do nothing; the action happens in divert
-}
-
-void block_entry::do_depth()
-{
- printfs(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?(\\n[%1]+\\n[%2])\n",
- row_start_reg(start_row),
- block_height_reg(start_row, start_col));
-}
-
-left_block_entry::left_block_entry(char *s, const entry_modifier *m)
-: block_entry(s, m)
-{
-}
-
-void left_block_entry::print()
-{
- printfs(".in +\\n[%1]u\n", column_start_reg(start_col));
- printfs(".%1\n", block_diversion_name(start_row, start_col));
- prints(".in\n");
-}
-
-right_block_entry::right_block_entry(char *s, const entry_modifier *m)
-: block_entry(s, m)
-{
-}
-
-void right_block_entry::print()
-{
- printfs(".in +\\n[%1]u+\\n[%2]u-\\n[%3]u\n",
- column_start_reg(start_col),
- span_width_reg(start_col, end_col),
- block_width_reg(start_row, start_col));
- printfs(".%1\n", block_diversion_name(start_row, start_col));
- prints(".in\n");
-}
-
-center_block_entry::center_block_entry(char *s, const entry_modifier *m)
-: block_entry(s, m)
-{
-}
-
-void center_block_entry::print()
-{
- printfs(".in +\\n[%1]u+(\\n[%2]u-\\n[%3]u/2u)\n",
- column_start_reg(start_col),
- span_width_reg(start_col, end_col),
- block_width_reg(start_row, start_col));
- printfs(".%1\n", block_diversion_name(start_row, start_col));
- prints(".in\n");
-}
-
-alphabetic_block_entry::alphabetic_block_entry(char *s,
- const entry_modifier *m)
-: block_entry(s, m)
-{
-}
-
-int alphabetic_block_entry::divert(int ncols, const string *mw, int *sep)
-{
- do_divert(1, ncols, mw, sep);
- return 1;
-}
-
-void alphabetic_block_entry::print()
-{
- printfs(".in +\\n[%1]u+(\\n[%2]u-\\n[%3]u/2u)\n",
- column_start_reg(start_col),
- span_width_reg(start_col, end_col),
- span_alphabetic_width_reg(start_col, end_col));
- printfs(".%1\n", block_diversion_name(start_row, start_col));
- prints(".in\n");
-}
-
-line_entry::line_entry(const entry_modifier *m)
-: simple_entry(m), double_vrule_on_right(0), double_vrule_on_left(0)
-{
-}
-
-void line_entry::note_double_vrule_on_right(int is_corner)
-{
- double_vrule_on_right = is_corner ? 1 : 2;
-}
-
-void line_entry::note_double_vrule_on_left(int is_corner)
-{
- double_vrule_on_left = is_corner ? 1 : 2;
-}
-
-single_line_entry::single_line_entry(const entry_modifier *m)
-: line_entry(m)
-{
-}
-
-int single_line_entry::line_type()
-{
- return 1;
-}
-
-void single_line_entry::simple_print(int dont_move)
-{
- printfs("\\h'|\\n[%1]u",
- column_divide_reg(start_col));
- if (double_vrule_on_left) {
- prints(double_vrule_on_left == 1 ? "-" : "+");
- prints(HALF_DOUBLE_LINE_SEP);
- }
- prints("'");
- if (!dont_move)
- prints("\\v'-" BAR_HEIGHT "'");
- printfs("\\s[\\n[" LINESIZE_REG "]]" "\\D'l |\\n[%1]u",
- column_divide_reg(end_col+1));
- if (double_vrule_on_right) {
- prints(double_vrule_on_left == 1 ? "+" : "-");
- prints(HALF_DOUBLE_LINE_SEP);
- }
- prints("0'\\s0");
- if (!dont_move)
- prints("\\v'" BAR_HEIGHT "'");
-}
-
-single_line_entry *single_line_entry::to_single_line_entry()
-{
- return this;
-}
-
-double_line_entry::double_line_entry(const entry_modifier *m)
-: line_entry(m)
-{
-}
-
-int double_line_entry::line_type()
-{
- return 2;
-}
-
-void double_line_entry::simple_print(int dont_move)
-{
- if (!dont_move)
- prints("\\v'-" BAR_HEIGHT "'");
- printfs("\\h'|\\n[%1]u",
- column_divide_reg(start_col));
- if (double_vrule_on_left) {
- prints(double_vrule_on_left == 1 ? "-" : "+");
- prints(HALF_DOUBLE_LINE_SEP);
- }
- prints("'");
- printfs("\\v'-" HALF_DOUBLE_LINE_SEP "'"
- "\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l |\\n[%1]u",
- column_divide_reg(end_col+1));
- if (double_vrule_on_right)
- prints("-" HALF_DOUBLE_LINE_SEP);
- prints(" 0'");
- printfs("\\v'" DOUBLE_LINE_SEP "'"
- "\\D'l |\\n[%1]u",
- column_divide_reg(start_col));
- if (double_vrule_on_right) {
- prints(double_vrule_on_left == 1 ? "+" : "-");
- prints(HALF_DOUBLE_LINE_SEP);
- }
- prints(" 0'");
- prints("\\s0"
- "\\v'-" HALF_DOUBLE_LINE_SEP "'");
- if (!dont_move)
- prints("\\v'" BAR_HEIGHT "'");
-}
-
-double_line_entry *double_line_entry::to_double_line_entry()
-{
- return this;
-}
-
-short_line_entry::short_line_entry(const entry_modifier *m)
-: simple_entry(m)
-{
-}
-
-int short_line_entry::line_type()
-{
- return 1;
-}
-
-void short_line_entry::simple_print(int dont_move)
-{
- if (mod->stagger)
- prints("\\v'-.5v'");
- if (!dont_move)
- prints("\\v'-" BAR_HEIGHT "'");
- printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));
- printfs("\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l \\n[%1]u 0'"
- "\\s0",
- span_width_reg(start_col, end_col));
- if (!dont_move)
- prints("\\v'" BAR_HEIGHT "'");
- if (mod->stagger)
- prints("\\v'.5v'");
-}
-
-short_double_line_entry::short_double_line_entry(const entry_modifier *m)
-: simple_entry(m)
-{
-}
-
-int short_double_line_entry::line_type()
-{
- return 2;
-}
-
-void short_double_line_entry::simple_print(int dont_move)
-{
- if (mod->stagger)
- prints("\\v'-.5v'");
- if (!dont_move)
- prints("\\v'-" BAR_HEIGHT "'");
- printfs("\\h'|\\n[%2]u'"
- "\\v'-" HALF_DOUBLE_LINE_SEP "'"
- "\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l \\n[%1]u 0'"
- "\\v'" DOUBLE_LINE_SEP "'"
- "\\D'l |\\n[%2]u 0'"
- "\\s0"
- "\\v'-" HALF_DOUBLE_LINE_SEP "'",
- span_width_reg(start_col, end_col),
- column_start_reg(start_col));
- if (!dont_move)
- prints("\\v'" BAR_HEIGHT "'");
- if (mod->stagger)
- prints("\\v'.5v'");
-}
-
-void set_modifier(const entry_modifier *m)
-{
- if (!m->font.empty())
- printfs(".ft %1\n", m->font);
- if (m->point_size.val != 0) {
- prints(".ps ");
- if (m->point_size.inc > 0)
- prints('+');
- else if (m->point_size.inc < 0)
- prints('-');
- printfs("%1\n", as_string(m->point_size.val));
- }
- if (m->vertical_spacing.val != 0) {
- prints(".vs ");
- if (m->vertical_spacing.inc > 0)
- prints('+');
- else if (m->vertical_spacing.inc < 0)
- prints('-');
- printfs("%1\n", as_string(m->vertical_spacing.val));
- }
- if (!m->macro.empty())
- printfs(".%1\n", m->macro);
-}
-
-void set_inline_modifier(const entry_modifier *m)
-{
- if (!m->font.empty())
- printfs("\\f[%1]", m->font);
- if (m->point_size.val != 0) {
- prints("\\s[");
- if (m->point_size.inc > 0)
- prints('+');
- else if (m->point_size.inc < 0)
- prints('-');
- printfs("%1]", as_string(m->point_size.val));
- }
- if (m->stagger)
- prints("\\v'-.5v'");
-}
-
-void restore_inline_modifier(const entry_modifier *m)
-{
- if (!m->font.empty())
- prints("\\f[\\n[" SAVED_FONT_REG "]]");
- if (m->point_size.val != 0)
- prints("\\s[\\n[" SAVED_SIZE_REG "]]");
- if (m->stagger)
- prints("\\v'.5v'");
-}
-
-struct stuff {
- stuff *next;
- int row; // occurs before row `row'
- char printed; // has it been printed?
-
- stuff(int);
- virtual void print(table *) = 0;
- virtual ~stuff();
- virtual int is_single_line() { return 0; };
- virtual int is_double_line() { return 0; };
-};
-
-stuff::stuff(int r) : next(0), row(r), printed(0)
-{
-}
-
-stuff::~stuff()
-{
-}
-
-struct text_stuff : public stuff {
- string contents;
- const char *filename;
- int lineno;
-
- text_stuff(const string &, int r, const char *fn, int ln);
- ~text_stuff();
- void print(table *);
-};
-
-text_stuff::text_stuff(const string &s, int r, const char *fn, int ln)
-: stuff(r), contents(s), filename(fn), lineno(ln)
-{
-}
-
-text_stuff::~text_stuff()
-{
-}
-
-void text_stuff::print(table *)
-{
- printed = 1;
- prints(".cp \\n(" COMPATIBLE_REG "\n");
- set_troff_location(filename, lineno);
- prints(contents);
- prints(".cp 0\n");
- location_force_filename = 1; // it might have been a .lf command
-}
-
-struct single_hline_stuff : public stuff {
- single_hline_stuff(int r);
- void print(table *);
- int is_single_line();
-};
-
-single_hline_stuff::single_hline_stuff(int r) : stuff(r)
-{
-}
-
-void single_hline_stuff::print(table *tbl)
-{
- printed = 1;
- tbl->print_single_hline(row);
-}
-
-int single_hline_stuff::is_single_line()
-{
- return 1;
-}
-
-struct double_hline_stuff : stuff {
- double_hline_stuff(int r);
- void print(table *);
- int is_double_line();
-};
-
-double_hline_stuff::double_hline_stuff(int r) : stuff(r)
-{
-}
-
-void double_hline_stuff::print(table *tbl)
-{
- printed = 1;
- tbl->print_double_hline(row);
-}
-
-int double_hline_stuff::is_double_line()
-{
- return 1;
-}
-
-struct vertical_rule {
- vertical_rule *next;
- int start_row;
- int end_row;
- int col;
- char is_double;
- string top_adjust;
- string bot_adjust;
-
- vertical_rule(int sr, int er, int c, int dbl, vertical_rule *);
- ~vertical_rule();
- void contribute_to_bottom_macro(table *);
- void print();
-};
-
-vertical_rule::vertical_rule(int sr, int er, int c, int dbl, vertical_rule *p)
-: next(p), start_row(sr), end_row(er), col(c), is_double(dbl)
-{
-}
-
-vertical_rule::~vertical_rule()
-{
-}
-
-void vertical_rule::contribute_to_bottom_macro(table *tbl)
-{
- printfs(".if \\n[" CURRENT_ROW_REG "]>=%1",
- as_string(start_row));
- if (end_row != tbl->get_nrows() - 1)
- printfs("&(\\n[" CURRENT_ROW_REG "]<%1)",
- as_string(end_row));
- prints(" \\{");
- printfs(".if %1<=\\n[" LAST_PASSED_ROW_REG "] .nr %2 \\n[#T]\n",
- as_string(start_row),
- row_top_reg(start_row));
- const char *offset_table[3];
- if (is_double) {
- offset_table[0] = "-" HALF_DOUBLE_LINE_SEP;
- offset_table[1] = "+" HALF_DOUBLE_LINE_SEP;
- offset_table[2] = 0;
- }
- else {
- offset_table[0] = "";
- offset_table[1] = 0;
- }
- for (const char **offsetp = offset_table; *offsetp; offsetp++) {
- prints(".sp -1\n"
- "\\v'" BODY_DEPTH);
- if (!bot_adjust.empty())
- printfs("+%1", bot_adjust);
- prints("'");
- printfs("\\h'\\n[%1]u%3'\\s[\\n[" LINESIZE_REG "]]\\D'l 0 |\\n[%2]u-1v",
- column_divide_reg(col),
- row_top_reg(start_row),
- *offsetp);
- if (!bot_adjust.empty())
- printfs("-(%1)", bot_adjust);
- // don't perform the top adjustment if the top is actually #T
- if (!top_adjust.empty())
- printfs("+((%1)*(%2>\\n[" LAST_PASSED_ROW_REG "]))",
- top_adjust,
- as_string(start_row));
- prints("'\\s0\n");
- }
- prints(".\\}\n");
-}
-
-void vertical_rule::print()
-{
- printfs("\\*[" TRANSPARENT_STRING_NAME "]"
- ".if %1<=\\*[" QUOTE_STRING_NAME "]\\n[" LAST_PASSED_ROW_REG "] "
- ".nr %2 \\*[" QUOTE_STRING_NAME "]\\n[#T]\n",
- as_string(start_row),
- row_top_reg(start_row));
- const char *offset_table[3];
- if (is_double) {
- offset_table[0] = "-" HALF_DOUBLE_LINE_SEP;
- offset_table[1] = "+" HALF_DOUBLE_LINE_SEP;
- offset_table[2] = 0;
- }
- else {
- offset_table[0] = "";
- offset_table[1] = 0;
- }
- for (const char **offsetp = offset_table; *offsetp; offsetp++) {
- prints("\\*[" TRANSPARENT_STRING_NAME "].sp -1\n"
- "\\*[" TRANSPARENT_STRING_NAME "]\\v'" BODY_DEPTH);
- if (!bot_adjust.empty())
- printfs("+%1", bot_adjust);
- prints("'");
- printfs("\\h'\\n[%1]u%3'"
- "\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l 0 |\\*[" QUOTE_STRING_NAME "]\\n[%2]u-1v",
- column_divide_reg(col),
- row_top_reg(start_row),
- *offsetp);
- if (!bot_adjust.empty())
- printfs("-(%1)", bot_adjust);
- // don't perform the top adjustment if the top is actually #T
- if (!top_adjust.empty())
- printfs("+((%1)*(%2>\\*[" QUOTE_STRING_NAME "]\\n["
- LAST_PASSED_ROW_REG "]))",
- top_adjust,
- as_string(start_row));
- prints("'"
- "\\s0\n");
- }
-}
-
-table::table(int nc, unsigned f, int ls, char dpc)
-: flags(f), nrows(0), ncolumns(nc), linesize(ls), decimal_point_char(dpc),
- vrule_list(0), stuff_list(0), span_list(0),
- entry_list(0), entry_list_tailp(&entry_list), entry(0),
- vline(0), row_is_all_lines(0), left_separation(0), right_separation(0),
- allocated_rows(0)
-{
- minimum_width = new string[ncolumns];
- column_separation = ncolumns > 1 ? new int[ncolumns - 1] : 0;
- equal = new char[ncolumns];
- int i;
- for (i = 0; i < ncolumns; i++)
- equal[i] = 0;
- for (i = 0; i < ncolumns-1; i++)
- column_separation[i] = DEFAULT_COLUMN_SEPARATION;
- delim[0] = delim[1] = '\0';
-}
-
-table::~table()
-{
- for (int i = 0; i < nrows; i++) {
- a_delete entry[i];
- a_delete vline[i];
- }
- a_delete entry;
- a_delete vline;
- while (entry_list) {
- table_entry *tem = entry_list;
- entry_list = entry_list->next;
- delete tem;
- }
- ad_delete(ncolumns) minimum_width;
- a_delete column_separation;
- a_delete equal;
- while (stuff_list) {
- stuff *tem = stuff_list;
- stuff_list = stuff_list->next;
- delete tem;
- }
- while (vrule_list) {
- vertical_rule *tem = vrule_list;
- vrule_list = vrule_list->next;
- delete tem;
- }
- a_delete row_is_all_lines;
- while (span_list) {
- horizontal_span *tem = span_list;
- span_list = span_list->next;
- delete tem;
- }
-}
-
-void table::set_delim(char c1, char c2)
-{
- delim[0] = c1;
- delim[1] = c2;
-}
-
-void table::set_minimum_width(int c, const string &w)
-{
- assert(c >= 0 && c < ncolumns);
- minimum_width[c] = w;
-}
-
-void table::set_column_separation(int c, int n)
-{
- assert(c >= 0 && c < ncolumns - 1);
- column_separation[c] = n;
-}
-
-void table::set_equal_column(int c)
-{
- assert(c >= 0 && c < ncolumns);
- equal[c] = 1;
-}
-
-void table::add_stuff(stuff *p)
-{
- stuff **pp;
- for (pp = &stuff_list; *pp; pp = &(*pp)->next)
- ;
- *pp = p;
-}
-
-void table::add_text_line(int r, const string &s, const char *filename, int lineno)
-{
- add_stuff(new text_stuff(s, r, filename, lineno));
-}
-
-void table::add_single_hline(int r)
-{
- add_stuff(new single_hline_stuff(r));
-}
-
-void table::add_double_hline(int r)
-{
- add_stuff(new double_hline_stuff(r));
-}
-
-void table::allocate(int r)
-{
- if (r >= nrows) {
- typedef table_entry **PPtable_entry; // work around g++ 1.36.1 bug
- if (r >= allocated_rows) {
- if (allocated_rows == 0) {
- allocated_rows = 16;
- if (allocated_rows <= r)
- allocated_rows = r + 1;
- entry = new PPtable_entry[allocated_rows];
- vline = new char*[allocated_rows];
- }
- else {
- table_entry ***old_entry = entry;
- int old_allocated_rows = allocated_rows;
- allocated_rows *= 2;
- if (allocated_rows <= r)
- allocated_rows = r + 1;
- entry = new PPtable_entry[allocated_rows];
- memcpy(entry, old_entry, sizeof(table_entry**)*old_allocated_rows);
- a_delete old_entry;
- char **old_vline = vline;
- vline = new char*[allocated_rows];
- memcpy(vline, old_vline, sizeof(char*)*old_allocated_rows);
- a_delete old_vline;
- }
- }
- assert(allocated_rows > r);
- while (nrows <= r) {
- entry[nrows] = new table_entry*[ncolumns];
- int i;
- for (i = 0; i < ncolumns; i++)
- entry[nrows][i] = 0;
- vline[nrows] = new char[ncolumns+1];
- for (i = 0; i < ncolumns+1; i++)
- vline[nrows][i] = 0;
- nrows++;
- }
- }
-}
-
-void table::do_hspan(int r, int c)
-{
- assert(r >= 0 && c >= 0 && r < nrows && c < ncolumns);
- if (c == 0) {
- error("first column cannot be horizontally spanned");
- return;
- }
- table_entry *e = entry[r][c];
- if (e) {
- assert(e->start_row <= r && r <= e->end_row
- && e->start_col <= c && c <= e->end_col
- && e->end_row - e->start_row > 0
- && e->end_col - e->start_col > 0);
- return;
- }
- e = entry[r][c-1];
- // e can be 0 if we had an empty entry or an error
- if (e == 0)
- return;
- if (e->start_row != r) {
- /*
- l l
- ^ s */
- error("impossible horizontal span at row %1, column %2", r + 1, c + 1);
- }
- else {
- e->end_col = c;
- entry[r][c] = e;
- }
-}
-
-void table::do_vspan(int r, int c)
-{
- assert(r >= 0 && c >= 0 && r < nrows && c < ncolumns);
- if (r == 0) {
- error("first row cannot be vertically spanned");
- return;
- }
- table_entry *e = entry[r][c];
- if (e) {
- assert(e->start_row <= r && r <= e->end_row
- && e->start_col <= c && c <= e->end_col
- && e->end_row - e->start_row > 0
- && e->end_col - e->start_col > 0);
- return;
- }
- e = entry[r-1][c];
- // e can be 0 if we had an empty entry or an error
- if (e == 0)
- return;
- if (e->start_col != c) {
- /* l s
- l ^ */
- error("impossible vertical span at row %1, column %2", r + 1, c + 1);
- }
- else {
- for (int i = c; i <= e->end_col; i++) {
- assert(entry[r][i] == 0);
- entry[r][i] = e;
- }
- e->end_row = r;
- }
-}
-
-int find_decimal_point(const char *s, char decimal_point_char,
- const char *delim)
-{
- if (s == 0 || *s == '\0')
- return -1;
- const char *p;
- int in_delim = 0; // is p within eqn delimiters?
- // tbl recognises \& even within eqn delimiters; I don't
- for (p = s; *p; p++)
- if (in_delim) {
- if (*p == delim[1])
- in_delim = 0;
- }
- else if (*p == delim[0])
- in_delim = 1;
- else if (p[0] == '\\' && p[1] == '&')
- return p - s;
- int possible_pos = -1;
- in_delim = 0;
- for (p = s; *p; p++)
- if (in_delim) {
- if (*p == delim[1])
- in_delim = 0;
- }
- else if (*p == delim[0])
- in_delim = 1;
- else if (p[0] == decimal_point_char && csdigit(p[1]))
- possible_pos = p - s;
- if (possible_pos >= 0)
- return possible_pos;
- in_delim = 0;
- for (p = s; *p; p++)
- if (in_delim) {
- if (*p == delim[1])
- in_delim = 0;
- }
- else if (*p == delim[0])
- in_delim = 1;
- else if (csdigit(*p))
- possible_pos = p + 1 - s;
- return possible_pos;
-}
-
-void table::add_entry(int r, int c, const string &str, const entry_format *f,
- const char *fn, int ln)
-{
- allocate(r);
- table_entry *e = 0;
- if (str == "\\_") {
- e = new short_line_entry(f);
- }
- else if (str == "\\=") {
- e = new short_double_line_entry(f);
- }
- else if (str == "_") {
- single_line_entry *lefte;
- if (c > 0 && entry[r][c-1] != 0 &&
- (lefte = entry[r][c-1]->to_single_line_entry()) != 0
- && lefte->start_row == r
- && lefte->mod->stagger == f->stagger) {
- lefte->end_col = c;
- entry[r][c] = lefte;
- }
- else
- e = new single_line_entry(f);
- }
- else if (str == "=") {
- double_line_entry *lefte;
- if (c > 0 && entry[r][c-1] != 0 &&
- (lefte = entry[r][c-1]->to_double_line_entry()) != 0
- && lefte->start_row == r
- && lefte->mod->stagger == f->stagger) {
- lefte->end_col = c;
- entry[r][c] = lefte;
- }
- else
- e = new double_line_entry(f);
- }
- else if (str == "\\^") {
- do_vspan(r, c);
- }
- else if (str.length() > 2 && str[0] == '\\' && str[1] == 'R') {
- if (str.search('\n') >= 0)
- error_with_file_and_line(fn, ln, "bad repeated character");
- else {
- char *s = str.substring(2, str.length() - 2).extract();
- e = new repeated_char_entry(s, f);
- }
- }
- else {
- int is_block = str.search('\n') >= 0;
- char *s;
- switch (f->type) {
- case FORMAT_SPAN:
- assert(str.empty());
- do_hspan(r, c);
- break;
- case FORMAT_LEFT:
- if (!str.empty()) {
- s = str.extract();
- if (is_block)
- e = new left_block_entry(s, f);
- else
- e = new left_text_entry(s, f);
- }
- else
- e = new empty_entry(f);
- break;
- case FORMAT_CENTER:
- if (!str.empty()) {
- s = str.extract();
- if (is_block)
- e = new center_block_entry(s, f);
- else
- e = new center_text_entry(s, f);
- }
- else
- e = new empty_entry(f);
- break;
- case FORMAT_RIGHT:
- if (!str.empty()) {
- s = str.extract();
- if (is_block)
- e = new right_block_entry(s, f);
- else
- e = new right_text_entry(s, f);
- }
- else
- e = new empty_entry(f);
- break;
- case FORMAT_NUMERIC:
- if (!str.empty()) {
- s = str.extract();
- if (is_block) {
- error_with_file_and_line(fn, ln, "can't have numeric text block");
- e = new left_block_entry(s, f);
- }
- else {
- int pos = find_decimal_point(s, decimal_point_char, delim);
- if (pos < 0)
- e = new center_text_entry(s, f);
- else
- e = new numeric_text_entry(s, f, pos);
- }
- }
- else
- e = new empty_entry(f);
- break;
- case FORMAT_ALPHABETIC:
- if (!str.empty()) {
- s = str.extract();
- if (is_block)
- e = new alphabetic_block_entry(s, f);
- else
- e = new alphabetic_text_entry(s, f);
- }
- else
- e = new empty_entry(f);
- break;
- case FORMAT_VSPAN:
- do_vspan(r, c);
- break;
- case FORMAT_HLINE:
- if (str.length() != 0)
- error_with_file_and_line(fn, ln,
- "non-empty data entry for `_' format ignored");
- e = new single_line_entry(f);
- break;
- case FORMAT_DOUBLE_HLINE:
- if (str.length() != 0)
- error_with_file_and_line(fn, ln,
- "non-empty data entry for `=' format ignored");
- e = new double_line_entry(f);
- break;
- default:
- assert(0);
- }
- }
- if (e) {
- table_entry *preve = entry[r][c];
- if (preve) {
- /* c s
- ^ l */
- error_with_file_and_line(fn, ln, "row %1, column %2 already spanned",
- r + 1, c + 1);
- delete e;
- }
- else {
- e->input_lineno = ln;
- e->input_filename = fn;
- e->start_row = e->end_row = r;
- e->start_col = e->end_col = c;
- *entry_list_tailp = e;
- entry_list_tailp = &e->next;
- entry[r][c] = e;
- }
- }
-}
-
-// add vertical lines for row r
-
-void table::add_vlines(int r, const char *v)
-{
- allocate(r);
- for (int i = 0; i < ncolumns+1; i++)
- vline[r][i] = v[i];
-}
-
-void table::check()
-{
- table_entry *p = entry_list;
- int i, j;
- while (p) {
- for (i = p->start_row; i <= p->end_row; i++)
- for (j = p->start_col; j <= p->end_col; j++)
- assert(entry[i][j] == p);
- p = p->next;
- }
-}
-
-void table::print()
-{
- location_force_filename = 1;
- check();
- init_output();
- determine_row_type();
- compute_widths();
- if (!(flags & CENTER))
- prints(".if \\n[" SAVED_CENTER_REG "] \\{");
- prints(".in +(u;\\n[.l]-\\n[.i]-\\n[TW]/2>?-\\n[.i])\n"
- ".nr " SAVED_INDENT_REG " \\n[.i]\n");
- if (!(flags & CENTER))
- prints(".\\}\n");
- build_vrule_list();
- define_bottom_macro();
- do_top();
- for (int i = 0; i < nrows; i++)
- do_row(i);
- do_bottom();
-}
-
-void table::determine_row_type()
-{
- row_is_all_lines = new char[nrows];
- for (int i = 0; i < nrows; i++) {
- int had_single = 0;
- int had_double = 0;
- int had_non_line = 0;
- for (int c = 0; c < ncolumns; c++) {
- table_entry *e = entry[i][c];
- if (e != 0) {
- if (e->start_row == e->end_row) {
- int t = e->line_type();
- switch (t) {
- case -1:
- had_non_line = 1;
- break;
- case 0:
- // empty
- break;
- case 1:
- had_single = 1;
- break;
- case 2:
- had_double = 1;
- break;
- default:
- assert(0);
- }
- if (had_non_line)
- break;
- }
- c = e->end_col;
- }
- }
- if (had_non_line)
- row_is_all_lines[i] = 0;
- else if (had_double)
- row_is_all_lines[i] = 2;
- else if (had_single)
- row_is_all_lines[i] = 1;
- else
- row_is_all_lines[i] = 0;
- }
-}
-
-void table::init_output()
-{
- prints(".nr " COMPATIBLE_REG " \\n(.C\n"
- ".cp 0\n");
- if (linesize > 0)
- printfs(".nr " LINESIZE_REG " %1\n", as_string(linesize));
- else
- prints(".nr " LINESIZE_REG " \\n[.s]\n");
- if (!(flags & CENTER))
- prints(".nr " SAVED_CENTER_REG " \\n[.ce]\n");
- if (compatible_flag)
- prints(".ds " LEADER_REG " \\a\n");
- prints(".de " RESET_MACRO_NAME "\n"
- ".ft \\n[.f]\n"
- ".ps \\n[.s]\n"
- ".vs \\n[.v]u\n"
- ".in \\n[.i]u\n"
- ".ll \\n[.l]u\n"
- ".ls \\n[.L]\n"
- ".ad \\n[.j]\n"
- ".ie \\n[.u] .fi\n"
- ".el .nf\n"
- ".ce \\n[.ce]\n"
- "..\n"
- ".nr " SAVED_INDENT_REG " \\n[.i]\n"
- ".nr " SAVED_FONT_REG " \\n[.f]\n"
- ".nr " SAVED_SIZE_REG " \\n[.s]\n"
- ".nr " SAVED_FILL_REG " \\n[.u]\n"
- ".nr T. 0\n"
- ".nr " CURRENT_ROW_REG " 0-1\n"
- ".nr " LAST_PASSED_ROW_REG " 0-1\n"
- ".nr " SECTION_DIVERSION_FLAG_REG " 0\n"
- ".ds " TRANSPARENT_STRING_NAME "\n"
- ".ds " QUOTE_STRING_NAME "\n"
- ".nr " NEED_BOTTOM_RULE_REG " 1\n"
- ".nr " SUPPRESS_BOTTOM_REG " 0\n"
- ".eo\n"
- ".de " REPEATED_MARK_MACRO "\n"
- ".mk \\$1\n"
- ".if !'\\n(.z'' \\!." REPEATED_MARK_MACRO " \"\\$1\"\n"
- "..\n"
- ".de " REPEATED_VPT_MACRO "\n"
- ".vpt \\$1\n"
- ".if !'\\n(.z'' \\!." REPEATED_VPT_MACRO " \"\\$1\"\n"
- "..\n");
- if (!(flags & NOKEEP))
- prints(".de " KEEP_MACRO_NAME "\n"
- ".if '\\n[.z]'' \\{.ds " QUOTE_STRING_NAME " \\\\\n"
- ".ds " TRANSPARENT_STRING_NAME " \\!\n"
- ".di " SECTION_DIVERSION_NAME "\n"
- ".nr " SECTION_DIVERSION_FLAG_REG " 1\n"
- ".in 0\n"
- ".\\}\n"
- "..\n"
- ".de " RELEASE_MACRO_NAME "\n"
- ".if \\n[" SECTION_DIVERSION_FLAG_REG "] \\{"
- ".di\n"
- ".in \\n[" SAVED_INDENT_REG "]u\n"
- ".nr " SAVED_DN_REG " \\n[dn]\n"
- ".ds " QUOTE_STRING_NAME "\n"
- ".ds " TRANSPARENT_STRING_NAME "\n"
- ".nr " SECTION_DIVERSION_FLAG_REG " 0\n"
- ".if \\n[.t]<=\\n[dn] \\{"
- ".nr T. 1\n"
- ".T#\n"
- ".nr " SUPPRESS_BOTTOM_REG " 1\n"
- ".sp \\n[.t]u\n"
- ".nr " SUPPRESS_BOTTOM_REG " 0\n"
- ".mk #T\n"
- ".\\}\n"
- ".if \\n[.t]<=\\n[" SAVED_DN_REG "] "
- /* Since we turn off traps, it won't get into an infinite loop
- when we try and print it; it will just go off the bottom of the
- page. */
- ".tm warning: page \\n%: table text block will not fit on one page\n"
- ".nf\n"
- ".ls 1\n"
- "." SECTION_DIVERSION_NAME "\n"
- ".ls\n"
- ".rm " SECTION_DIVERSION_NAME "\n"
- ".\\}\n"
- "..\n"
- ".nr " TABLE_DIVERSION_FLAG_REG " 0\n"
- ".de " TABLE_KEEP_MACRO_NAME "\n"
- ".if '\\n[.z]'' \\{"
- ".di " TABLE_DIVERSION_NAME "\n"
- ".nr " TABLE_DIVERSION_FLAG_REG " 1\n"
- ".\\}\n"
- "..\n"
- ".de " TABLE_RELEASE_MACRO_NAME "\n"
- ".if \\n[" TABLE_DIVERSION_FLAG_REG "] \\{.br\n"
- ".di\n"
- ".nr " SAVED_DN_REG " \\n[dn]\n"
- ".ne \\n[dn]u+\\n[.V]u\n"
- ".ie \\n[.t]<=\\n[" SAVED_DN_REG "] "
- ".tm error: page \\n%: table will not fit on one page; use .TS H/.TH with a supporting macro package\n"
- ".el \\{"
- ".in 0\n"
- ".ls 1\n"
- ".nf\n"
- "." TABLE_DIVERSION_NAME "\n"
- ".\\}\n"
- ".rm " TABLE_DIVERSION_NAME "\n"
- ".\\}\n"
- "..\n");
- prints(".ec\n"
- ".ce 0\n"
- ".nf\n");
-}
-
-string block_width_reg(int r, int c)
-{
- static char name[sizeof(BLOCK_WIDTH_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, BLOCK_WIDTH_PREFIX "%d,%d", r, c);
- return string(name);
-}
-
-string block_diversion_name(int r, int c)
-{
- static char name[sizeof(BLOCK_DIVERSION_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, BLOCK_DIVERSION_PREFIX "%d,%d", r, c);
- return string(name);
-}
-
-string block_height_reg(int r, int c)
-{
- static char name[sizeof(BLOCK_HEIGHT_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, BLOCK_HEIGHT_PREFIX "%d,%d", r, c);
- return string(name);
-}
-
-string span_width_reg(int start_col, int end_col)
-{
- static char name[sizeof(SPAN_WIDTH_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, SPAN_WIDTH_PREFIX "%d", start_col);
- if (end_col != start_col)
- sprintf(strchr(name, '\0'), ",%d", end_col);
- return string(name);
-}
-
-string span_left_numeric_width_reg(int start_col, int end_col)
-{
- static char name[sizeof(SPAN_LEFT_NUMERIC_WIDTH_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, SPAN_LEFT_NUMERIC_WIDTH_PREFIX "%d", start_col);
- if (end_col != start_col)
- sprintf(strchr(name, '\0'), ",%d", end_col);
- return string(name);
-}
-
-string span_right_numeric_width_reg(int start_col, int end_col)
-{
- static char name[sizeof(SPAN_RIGHT_NUMERIC_WIDTH_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, SPAN_RIGHT_NUMERIC_WIDTH_PREFIX "%d", start_col);
- if (end_col != start_col)
- sprintf(strchr(name, '\0'), ",%d", end_col);
- return string(name);
-}
-
-string span_alphabetic_width_reg(int start_col, int end_col)
-{
- static char name[sizeof(SPAN_ALPHABETIC_WIDTH_PREFIX)+INT_DIGITS+1+INT_DIGITS];
- sprintf(name, SPAN_ALPHABETIC_WIDTH_PREFIX "%d", start_col);
- if (end_col != start_col)
- sprintf(strchr(name, '\0'), ",%d", end_col);
- return string(name);
-}
-
-string column_separation_reg(int col)
-{
- static char name[sizeof(COLUMN_SEPARATION_PREFIX)+INT_DIGITS];
- sprintf(name, COLUMN_SEPARATION_PREFIX "%d", col);
- return string(name);
-}
-
-string row_start_reg(int row)
-{
- static char name[sizeof(ROW_START_PREFIX)+INT_DIGITS];
- sprintf(name, ROW_START_PREFIX "%d", row);
- return string(name);
-}
-
-string column_start_reg(int col)
-{
- static char name[sizeof(COLUMN_START_PREFIX)+INT_DIGITS];
- sprintf(name, COLUMN_START_PREFIX "%d", col);
- return string(name);
-}
-
-string column_end_reg(int col)
-{
- static char name[sizeof(COLUMN_END_PREFIX)+INT_DIGITS];
- sprintf(name, COLUMN_END_PREFIX "%d", col);
- return string(name);
-}
-
-string column_divide_reg(int col)
-{
- static char name[sizeof(COLUMN_DIVIDE_PREFIX)+INT_DIGITS];
- sprintf(name, COLUMN_DIVIDE_PREFIX "%d", col);
- return string(name);
-}
-
-string row_top_reg(int row)
-{
- static char name[sizeof(ROW_TOP_PREFIX)+INT_DIGITS];
- sprintf(name, ROW_TOP_PREFIX "%d", row);
- return string(name);
-}
-
-void init_span_reg(int start_col, int end_col)
-{
- printfs(".nr %1 \\n(.H\n.nr %2 0\n.nr %3 0\n.nr %4 0\n",
- span_width_reg(start_col, end_col),
- span_alphabetic_width_reg(start_col, end_col),
- span_left_numeric_width_reg(start_col, end_col),
- span_right_numeric_width_reg(start_col, end_col));
-}
-
-void compute_span_width(int start_col, int end_col)
-{
- printfs(".nr %1 \\n[%1]>?(\\n[%2]+\\n[%3])\n"
- ".if \\n[%4] .nr %1 \\n[%1]>?(\\n[%4]+2n)\n",
- span_width_reg(start_col, end_col),
- span_left_numeric_width_reg(start_col, end_col),
- span_right_numeric_width_reg(start_col, end_col),
- span_alphabetic_width_reg(start_col, end_col));
-}
-
-// Increase the widths of columns so that the width of any spanning entry
-// is not greater than the sum of the widths of the columns that it spans.
-// Ensure that the widths of columns remain equal.
-
-void table::divide_span(int start_col, int end_col)
-{
- assert(end_col > start_col);
- printfs(".nr " NEEDED_REG " \\n[%1]-(\\n[%2]",
- span_width_reg(start_col, end_col),
- span_width_reg(start_col, start_col));
- int i;
- for (i = start_col + 1; i <= end_col; i++) {
- // The column separation may shrink with the expand option.
- if (!(flags & EXPAND))
- printfs("+%1n", as_string(column_separation[i - 1]));
- printfs("+\\n[%1]", span_width_reg(i, i));
- }
- prints(")\n");
- printfs(".nr " NEEDED_REG " \\n[" NEEDED_REG "]/%1\n",
- as_string(end_col - start_col + 1));
- prints(".if \\n[" NEEDED_REG "] \\{");
- for (i = start_col; i <= end_col; i++)
- printfs(".nr %1 +\\n[" NEEDED_REG "]\n",
- span_width_reg(i, i));
- int equal_flag = 0;
- for (i = start_col; i <= end_col && !equal_flag; i++)
- if (equal[i])
- equal_flag = 1;
- if (equal_flag) {
- for (i = 0; i < ncolumns; i++)
- if (i < start_col || i > end_col)
- printfs(".nr %1 +\\n[" NEEDED_REG "]\n",
- span_width_reg(i, i));
- }
- prints(".\\}\n");
-}
-
-void table::sum_columns(int start_col, int end_col)
-{
- assert(end_col > start_col);
- printfs(".nr %1 \\n[%2]",
- span_width_reg(start_col, end_col),
- span_width_reg(start_col, start_col));
- for (int i = start_col + 1; i <= end_col; i++)
- printfs("+(%1*\\n[" SEPARATION_FACTOR_REG "])+\\n[%2]",
- as_string(column_separation[i - 1]),
- span_width_reg(i, i));
- prints('\n');
-}
-
-horizontal_span::horizontal_span(int sc, int ec, horizontal_span *p)
-: next(p), start_col(sc), end_col(ec)
-{
-}
-
-void table::build_span_list()
-{
- span_list = 0;
- table_entry *p = entry_list;
- while (p) {
- if (p->end_col != p->start_col) {
- horizontal_span *q;
- for (q = span_list; q; q = q->next)
- if (q->start_col == p->start_col
- && q->end_col == p->end_col)
- break;
- if (!q)
- span_list = new horizontal_span(p->start_col, p->end_col, span_list);
- }
- p = p->next;
- }
- // Now sort span_list primarily by order of end_row, and secondarily
- // by reverse order of start_row. This ensures that if we divide
- // spans using the order in span_list, we will get reasonable results.
- horizontal_span *unsorted = span_list;
- span_list = 0;
- while (unsorted) {
- horizontal_span **pp;
- for (pp = &span_list; *pp; pp = &(*pp)->next)
- if (unsorted->end_col < (*pp)->end_col
- || (unsorted->end_col == (*pp)->end_col
- && (unsorted->start_col > (*pp)->start_col)))
- break;
- horizontal_span *tem = unsorted->next;
- unsorted->next = *pp;
- *pp = unsorted;
- unsorted = tem;
- }
-}
-
-void table::compute_separation_factor()
-{
- if (flags & (ALLBOX|BOX|DOUBLEBOX))
- left_separation = right_separation = 1;
- else {
- for (int i = 0; i < nrows; i++) {
- if (vline[i][0] > 0)
- left_separation = 1;
- if (vline[i][ncolumns] > 0)
- right_separation = 1;
- }
- }
- if (flags & EXPAND) {
- int total_sep = left_separation + right_separation;
- int i;
- for (i = 0; i < ncolumns - 1; i++)
- total_sep += column_separation[i];
- if (total_sep != 0) {
- // Don't let the separation factor be negative.
- prints(".nr " SEPARATION_FACTOR_REG " \\n[.l]-\\n[.i]");
- for (i = 0; i < ncolumns; i++)
- printfs("-\\n[%1]", span_width_reg(i, i));
- printfs("/%1>?0\n", as_string(total_sep));
- }
- }
-}
-
-void table::compute_column_positions()
-{
- printfs(".nr %1 0\n", column_divide_reg(0));
- printfs(".nr %1 %2*\\n[" SEPARATION_FACTOR_REG "]\n",
- column_start_reg(0),
- as_string(left_separation));
- int i;
- for (i = 1;; i++) {
- printfs(".nr %1 \\n[%2]+\\n[%3]\n",
- column_end_reg(i-1),
- column_start_reg(i-1),
- span_width_reg(i-1, i-1));
- if (i >= ncolumns)
- break;
- printfs(".nr %1 \\n[%2]+(%3*\\n[" SEPARATION_FACTOR_REG "])\n",
- column_start_reg(i),
- column_end_reg(i-1),
- as_string(column_separation[i-1]));
- printfs(".nr %1 \\n[%2]+\\n[%3]/2\n",
- column_divide_reg(i),
- column_end_reg(i-1),
- column_start_reg(i));
- }
- printfs(".nr %1 \\n[%2]+(%3*\\n[" SEPARATION_FACTOR_REG "])\n",
- column_divide_reg(ncolumns),
- column_end_reg(i-1),
- as_string(right_separation));
- printfs(".nr TW \\n[%1]\n",
- column_divide_reg(ncolumns));
- if (flags & DOUBLEBOX) {
- printfs(".nr %1 +" DOUBLE_LINE_SEP "\n", column_divide_reg(0));
- printfs(".nr %1 -" DOUBLE_LINE_SEP "\n", column_divide_reg(ncolumns));
- }
-}
-
-void table::make_columns_equal()
-{
- int first = -1; // index of first equal column
- int i;
- for (i = 0; i < ncolumns; i++)
- if (equal[i]) {
- if (first < 0) {
- printfs(".nr %1 \\n[%1]", span_width_reg(i, i));
- first = i;
- }
- else
- printfs(">?\\n[%1]", span_width_reg(i, i));
- }
- if (first >= 0) {
- prints('\n');
- for (i = first + 1; i < ncolumns; i++)
- if (equal[i])
- printfs(".nr %1 \\n[%2]\n",
- span_width_reg(i, i),
- span_width_reg(first, first));
- }
-}
-
-void table::compute_widths()
-{
- build_span_list();
- int i;
- horizontal_span *p;
- prints(".nr " SEPARATION_FACTOR_REG " 1n\n");
- for (i = 0; i < ncolumns; i++) {
- init_span_reg(i, i);
- if (!minimum_width[i].empty())
- printfs(".nr %1 %2\n", span_width_reg(i, i), minimum_width[i]);
- }
- for (p = span_list; p; p = p->next)
- init_span_reg(p->start_col, p->end_col);
- table_entry *q;
- for (q = entry_list; q; q = q->next)
- if (!q->mod->zero_width)
- q->do_width();
- for (i = 0; i < ncolumns; i++)
- compute_span_width(i, i);
- for (p = span_list; p; p = p->next)
- compute_span_width(p->start_col, p->end_col);
- make_columns_equal();
- // Note that divide_span keeps equal width columns equal.
- for (p = span_list; p; p = p->next)
- divide_span(p->start_col, p->end_col);
- for (p = span_list; p; p = p->next)
- sum_columns(p->start_col, p->end_col);
- int had_spanning_block = 0;
- int had_equal_block = 0;
- for (q = entry_list; q; q = q->next)
- if (q->divert(ncolumns, minimum_width,
- (flags & EXPAND) ? column_separation : 0)) {
- if (q->end_col > q->start_col)
- had_spanning_block = 1;
- for (i = q->start_col; i <= q->end_col && !had_equal_block; i++)
- if (equal[i])
- had_equal_block = 1;
- }
- if (had_equal_block)
- make_columns_equal();
- if (had_spanning_block)
- for (p = span_list; p; p = p->next)
- divide_span(p->start_col, p->end_col);
- compute_separation_factor();
- for (p = span_list; p; p = p->next)
- sum_columns(p->start_col, p->end_col);
- compute_column_positions();
-}
-
-void table::print_single_hline(int r)
-{
- prints(".vs " LINE_SEP ">?\\n[.V]u\n"
- ".ls 1\n"
- "\\v'" BODY_DEPTH "'"
- "\\s[\\n[" LINESIZE_REG "]]");
- if (r > nrows - 1)
- prints("\\D'l |\\n[TW]u 0'");
- else {
- int start_col = 0;
- for (;;) {
- while (start_col < ncolumns
- && entry[r][start_col] != 0
- && entry[r][start_col]->start_row != r)
- start_col++;
- int end_col;
- for (end_col = start_col;
- end_col < ncolumns
- && (entry[r][end_col] == 0
- || entry[r][end_col]->start_row == r);
- end_col++)
- ;
- if (end_col <= start_col)
- break;
- printfs("\\h'|\\n[%1]u",
- column_divide_reg(start_col));
- if ((r > 0 && vline[r-1][start_col] == 2)
- || (r < nrows && vline[r][start_col] == 2))
- prints("-" HALF_DOUBLE_LINE_SEP);
- prints("'");
- printfs("\\D'l |\\n[%1]u",
- column_divide_reg(end_col));
- if ((r > 0 && vline[r-1][end_col] == 2)
- || (r < nrows && vline[r][end_col] == 2))
- prints("+" HALF_DOUBLE_LINE_SEP);
- prints(" 0'");
- start_col = end_col;
- }
- }
- prints("\\s0\n");
- prints(".ls\n"
- ".vs\n");
-}
-
-void table::print_double_hline(int r)
-{
- prints(".vs " LINE_SEP "+" DOUBLE_LINE_SEP
- ">?\\n[.V]u\n"
- ".ls 1\n"
- "\\v'" BODY_DEPTH "'"
- "\\s[\\n[" LINESIZE_REG "]]");
- if (r > nrows - 1)
- prints("\\v'-" DOUBLE_LINE_SEP "'"
- "\\D'l |\\n[TW]u 0'"
- "\\v'" DOUBLE_LINE_SEP "'"
- "\\h'|0'"
- "\\D'l |\\n[TW]u 0'");
- else {
- int start_col = 0;
- for (;;) {
- while (start_col < ncolumns
- && entry[r][start_col] != 0
- && entry[r][start_col]->start_row != r)
- start_col++;
- int end_col;
- for (end_col = start_col;
- end_col < ncolumns
- && (entry[r][end_col] == 0
- || entry[r][end_col]->start_row == r);
- end_col++)
- ;
- if (end_col <= start_col)
- break;
- const char *left_adjust = 0;
- if ((r > 0 && vline[r-1][start_col] == 2)
- || (r < nrows && vline[r][start_col] == 2))
- left_adjust = "-" HALF_DOUBLE_LINE_SEP;
- const char *right_adjust = 0;
- if ((r > 0 && vline[r-1][end_col] == 2)
- || (r < nrows && vline[r][end_col] == 2))
- right_adjust = "+" HALF_DOUBLE_LINE_SEP;
- printfs("\\v'-" DOUBLE_LINE_SEP "'"
- "\\h'|\\n[%1]u",
- column_divide_reg(start_col));
- if (left_adjust)
- prints(left_adjust);
- prints("'");
- printfs("\\D'l |\\n[%1]u",
- column_divide_reg(end_col));
- if (right_adjust)
- prints(right_adjust);
- prints(" 0'");
- printfs("\\v'" DOUBLE_LINE_SEP "'"
- "\\h'|\\n[%1]u",
- column_divide_reg(start_col));
- if (left_adjust)
- prints(left_adjust);
- prints("'");
- printfs("\\D'l |\\n[%1]u",
- column_divide_reg(end_col));
- if (right_adjust)
- prints(right_adjust);
- prints(" 0'");
- start_col = end_col;
- }
- }
- prints("\\s0\n"
- ".ls\n"
- ".vs\n");
-}
-
-void table::compute_vrule_top_adjust(int start_row, int col, string &result)
-{
- if (row_is_all_lines[start_row] && start_row < nrows - 1) {
- if (row_is_all_lines[start_row] == 2)
- result = LINE_SEP ">?\\n[.V]u" "+" DOUBLE_LINE_SEP;
- else
- result = LINE_SEP ">?\\n[.V]u";
- start_row++;
- }
- else {
- result = "";
- if (start_row == 0)
- return;
- for (stuff *p = stuff_list; p && p->row <= start_row; p = p->next)
- if (p->row == start_row
- && (p->is_single_line() || p->is_double_line()))
- return;
- }
- int left = 0;
- if (col > 0) {
- table_entry *e = entry[start_row-1][col-1];
- if (e && e->start_row == e->end_row) {
- if (e->to_double_line_entry() != 0)
- left = 2;
- else if (e->to_single_line_entry() != 0)
- left = 1;
- }
- }
- int right = 0;
- if (col < ncolumns) {
- table_entry *e = entry[start_row-1][col];
- if (e && e->start_row == e->end_row) {
- if (e->to_double_line_entry() != 0)
- right = 2;
- else if (e->to_single_line_entry() != 0)
- right = 1;
- }
- }
- if (row_is_all_lines[start_row-1] == 0) {
- if (left > 0 || right > 0) {
- result += "-" BODY_DEPTH "-" BAR_HEIGHT;
- if ((left == 2 && right != 2) || (right == 2 && left != 2))
- result += "-" HALF_DOUBLE_LINE_SEP;
- else if (left == 2 && right == 2)
- result += "+" HALF_DOUBLE_LINE_SEP;
- }
- }
- else if (row_is_all_lines[start_row-1] == 2) {
- if ((left == 2 && right != 2) || (right == 2 && left != 2))
- result += "-" DOUBLE_LINE_SEP;
- else if (left == 1 || right == 1)
- result += "-" HALF_DOUBLE_LINE_SEP;
- }
-}
-
-void table::compute_vrule_bot_adjust(int end_row, int col, string &result)
-{
- if (row_is_all_lines[end_row] && end_row > 0) {
- end_row--;
- result = "";
- }
- else {
- stuff *p;
- for (p = stuff_list; p && p->row < end_row + 1; p = p->next)
- ;
- if (p && p->row == end_row + 1 && p->is_double_line()) {
- result = "-" DOUBLE_LINE_SEP;
- return;
- }
- if ((p != 0 && p->row == end_row + 1)
- || end_row == nrows - 1) {
- result = "";
- return;
- }
- if (row_is_all_lines[end_row+1] == 1)
- result = LINE_SEP;
- else if (row_is_all_lines[end_row+1] == 2)
- result = LINE_SEP "+" DOUBLE_LINE_SEP;
- else
- result = "";
- }
- int left = 0;
- if (col > 0) {
- table_entry *e = entry[end_row+1][col-1];
- if (e && e->start_row == e->end_row) {
- if (e->to_double_line_entry() != 0)
- left = 2;
- else if (e->to_single_line_entry() != 0)
- left = 1;
- }
- }
- int right = 0;
- if (col < ncolumns) {
- table_entry *e = entry[end_row+1][col];
- if (e && e->start_row == e->end_row) {
- if (e->to_double_line_entry() != 0)
- right = 2;
- else if (e->to_single_line_entry() != 0)
- right = 1;
- }
- }
- if (row_is_all_lines[end_row+1] == 0) {
- if (left > 0 || right > 0) {
- result = "1v-" BODY_DEPTH "-" BAR_HEIGHT;
- if ((left == 2 && right != 2) || (right == 2 && left != 2))
- result += "+" HALF_DOUBLE_LINE_SEP;
- else if (left == 2 && right == 2)
- result += "-" HALF_DOUBLE_LINE_SEP;
- }
- }
- else if (row_is_all_lines[end_row+1] == 2) {
- if (left == 2 && right == 2)
- result += "-" DOUBLE_LINE_SEP;
- else if (left != 2 && right != 2 && (left == 1 || right == 1))
- result += "-" HALF_DOUBLE_LINE_SEP;
- }
-}
-
-void table::add_vertical_rule(int start_row, int end_row, int col, int is_double)
-{
- vrule_list = new vertical_rule(start_row, end_row, col, is_double,
- vrule_list);
- compute_vrule_top_adjust(start_row, col, vrule_list->top_adjust);
- compute_vrule_bot_adjust(end_row, col, vrule_list->bot_adjust);
-}
-
-void table::build_vrule_list()
-{
- int col;
- if (flags & ALLBOX) {
- for (col = 1; col < ncolumns; col++) {
- int start_row = 0;
- for (;;) {
- while (start_row < nrows && vline_spanned(start_row, col))
- start_row++;
- if (start_row >= nrows)
- break;
- int end_row = start_row;
- while (end_row < nrows && !vline_spanned(end_row, col))
- end_row++;
- end_row--;
- add_vertical_rule(start_row, end_row, col, 0);
- start_row = end_row + 1;
- }
- }
- }
- if (flags & (BOX|ALLBOX|DOUBLEBOX)) {
- add_vertical_rule(0, nrows - 1, 0, 0);
- add_vertical_rule(0, nrows - 1, ncolumns, 0);
- }
- for (int end_row = 0; end_row < nrows; end_row++)
- for (col = 0; col < ncolumns+1; col++)
- if (vline[end_row][col] > 0
- && !vline_spanned(end_row, col)
- && (end_row == nrows - 1
- || vline[end_row+1][col] != vline[end_row][col]
- || vline_spanned(end_row+1, col))) {
- int start_row;
- for (start_row = end_row - 1;
- start_row >= 0
- && vline[start_row][col] == vline[end_row][col]
- && !vline_spanned(start_row, col);
- start_row--)
- ;
- start_row++;
- add_vertical_rule(start_row, end_row, col, vline[end_row][col] > 1);
- }
- for (vertical_rule *p = vrule_list; p; p = p->next)
- if (p->is_double)
- for (int r = p->start_row; r <= p->end_row; r++) {
- if (p->col > 0 && entry[r][p->col-1] != 0
- && entry[r][p->col-1]->end_col == p->col-1) {
- int is_corner = r == p->start_row || r == p->end_row;
- entry[r][p->col-1]->note_double_vrule_on_right(is_corner);
- }
- if (p->col < ncolumns && entry[r][p->col] != 0
- && entry[r][p->col]->start_col == p->col) {
- int is_corner = r == p->start_row || r == p->end_row;
- entry[r][p->col]->note_double_vrule_on_left(is_corner);
- }
- }
-}
-
-void table::define_bottom_macro()
-{
- prints(".eo\n"
- ".de T#\n"
- ".if !\\n[" SUPPRESS_BOTTOM_REG "] \\{"
- "." REPEATED_VPT_MACRO " 0\n"
- ".mk " SAVED_VERTICAL_POS_REG "\n");
- if (flags & (BOX|ALLBOX|DOUBLEBOX)) {
- prints(".if \\n[T.]&\\n[" NEED_BOTTOM_RULE_REG "] \\{");
- print_single_hline(0);
- prints(".\\}\n");
- }
- prints(".ls 1\n");
- for (vertical_rule *p = vrule_list; p; p = p->next)
- p->contribute_to_bottom_macro(this);
- if (flags & DOUBLEBOX)
- prints(".if \\n[T.] \\{.vs " DOUBLE_LINE_SEP ">?\\n[.V]u\n"
- "\\v'" BODY_DEPTH "'\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l \\n[TW]u 0'\\s0\n"
- ".vs\n"
- ".\\}\n"
- ".if \\n[" LAST_PASSED_ROW_REG "]>=0 "
- ".nr " TOP_REG " \\n[#T]-" DOUBLE_LINE_SEP "\n"
- ".sp -1\n"
- "\\v'" BODY_DEPTH "'\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l 0 |\\n[" TOP_REG "]u-1v'\\s0\n"
- ".sp -1\n"
- "\\v'" BODY_DEPTH "'\\h'|\\n[TW]u'\\s[\\n[" LINESIZE_REG "]]"
- "\\D'l 0 |\\n[" TOP_REG "]u-1v'\\s0\n");
- prints(".ls\n");
- prints(".nr " LAST_PASSED_ROW_REG " \\n[" CURRENT_ROW_REG "]\n"
- ".sp |\\n[" SAVED_VERTICAL_POS_REG "]u\n"
- "." REPEATED_VPT_MACRO " 1\n"
- ".\\}\n"
- "..\n"
- ".ec\n");
-}
-
-// is the vertical line before column c in row r horizontally spanned?
-
-int table::vline_spanned(int r, int c)
-{
- assert(r >= 0 && r < nrows && c >= 0 && c < ncolumns + 1);
- return (c != 0 && c != ncolumns && entry[r][c] != 0
- && entry[r][c]->start_col != c
- // horizontally spanning lines don't count
- && entry[r][c]->to_double_line_entry() == 0
- && entry[r][c]->to_single_line_entry() == 0);
-}
-
-int table::row_begins_section(int r)
-{
- assert(r >= 0 && r < nrows);
- for (int i = 0; i < ncolumns; i++)
- if (entry[r][i] && entry[r][i]->start_row != r)
- return 0;
- return 1;
-}
-
-int table::row_ends_section(int r)
-{
- assert(r >= 0 && r < nrows);
- for (int i = 0; i < ncolumns; i++)
- if (entry[r][i] && entry[r][i]->end_row != r)
- return 0;
- return 1;
-}
-
-void table::do_row(int r)
-{
- if (!(flags & NOKEEP) && row_begins_section(r))
- prints("." KEEP_MACRO_NAME "\n");
- int had_line = 0;
- stuff *p;
- for (p = stuff_list; p && p->row < r; p = p->next)
- ;
- for (stuff *p1 = p; p1 && p1->row == r; p1 = p1->next)
- if (!p1->printed && (p1->is_single_line() || p1->is_double_line())) {
- had_line = 1;
- break;
- }
- if (!had_line && !row_is_all_lines[r])
- printfs("." REPEATED_MARK_MACRO " %1\n", row_top_reg(r));
- had_line = 0;
- for (; p && p->row == r; p = p->next)
- if (!p->printed) {
- p->print(this);
- if (!had_line && (p->is_single_line() || p->is_double_line())) {
- printfs("." REPEATED_MARK_MACRO " %1\n", row_top_reg(r));
- had_line = 1;
- }
- }
- // Change the row *after* printing the stuff list (which might contain .TH).
- printfs("\\*[" TRANSPARENT_STRING_NAME "].nr " CURRENT_ROW_REG " %1\n",
- as_string(r));
- if (!had_line && row_is_all_lines[r])
- printfs("." REPEATED_MARK_MACRO " %1\n", row_top_reg(r));
- // we might have had a .TH, for example, since we last tried
- if (!(flags & NOKEEP) && row_begins_section(r))
- prints("." KEEP_MACRO_NAME "\n");
- printfs(".mk %1\n", row_start_reg(r));
- prints(".mk " BOTTOM_REG "\n"
- "." REPEATED_VPT_MACRO " 0\n");
- int c;
- int row_is_blank = 1;
- int first_start_row = r;
- for (c = 0; c < ncolumns; c++) {
- table_entry *e = entry[r][c];
- if (e) {
- if (e->end_row == r) {
- e->do_depth();
- if (e->start_row < first_start_row)
- first_start_row = e->start_row;
- row_is_blank = 0;
- }
- c = e->end_col;
- }
- }
- if (row_is_blank)
- prints(".nr " BOTTOM_REG " +1v\n");
- if (row_is_all_lines[r]) {
- prints(".vs " LINE_SEP);
- if (row_is_all_lines[r] == 2)
- prints("+" DOUBLE_LINE_SEP);
- prints(">?\\n[.V]u\n.ls 1\n");
- prints("\\&");
- prints("\\v'" BODY_DEPTH);
- if (row_is_all_lines[r] == 2)
- prints("-" HALF_DOUBLE_LINE_SEP);
- prints("'");
- for (c = 0; c < ncolumns; c++) {
- table_entry *e = entry[r][c];
- if (e) {
- if (e->end_row == e->start_row)
- e->to_simple_entry()->simple_print(1);
- c = e->end_col;
- }
- }
- prints("\n");
- prints(".ls\n"
- ".vs\n");
- prints(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?\\n[.d]\n");
- printfs(".sp |\\n[%1]u\n", row_start_reg(r));
- }
- for (int i = row_is_all_lines[r] ? r - 1 : r;
- i >= first_start_row;
- i--) {
- simple_entry *first = 0;
- for (c = 0; c < ncolumns; c++) {
- table_entry *e = entry[r][c];
- if (e) {
- if (e->end_row == r && e->start_row == i) {
- simple_entry *simple = e->to_simple_entry();
- if (simple) {
- if (!first) {
- prints(".ta");
- first = simple;
- }
- simple->add_tab();
- }
- }
- c = e->end_col;
- }
- }
- if (first) {
- prints('\n');
- first->position_vertically();
- first->set_location();
- prints("\\&");
- first->simple_print(0);
- for (c = first->end_col + 1; c < ncolumns; c++) {
- table_entry *e = entry[r][c];
- if (e) {
- if (e->end_row == r && e->start_row == i) {
- simple_entry *simple = e->to_simple_entry();
- if (simple) {
- if (e->end_row != e->start_row) {
- prints('\n');
- simple->position_vertically();
- prints("\\&");
- }
- simple->simple_print(0);
- }
- }
- c = e->end_col;
- }
- }
- prints('\n');
- prints(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?\\n[.d]\n");
- printfs(".sp |\\n[%1]u\n", row_start_reg(r));
- }
- }
- for (c = 0; c < ncolumns; c++) {
- table_entry *e = entry[r][c];
- if (e) {
- if (e->end_row == r && e->to_simple_entry() == 0) {
- e->position_vertically();
- e->print();
- prints(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?\\n[.d]\n");
- printfs(".sp |\\n[%1]u\n", row_start_reg(r));
- }
- c = e->end_col;
- }
- }
- prints("." REPEATED_VPT_MACRO " 1\n"
- ".sp |\\n[" BOTTOM_REG "]u\n"
- "\\*[" TRANSPARENT_STRING_NAME "].nr " NEED_BOTTOM_RULE_REG " 1\n");
- if (r != nrows - 1 && (flags & ALLBOX)) {
- print_single_hline(r + 1);
- prints("\\*[" TRANSPARENT_STRING_NAME "].nr " NEED_BOTTOM_RULE_REG " 0\n");
- }
- if (r != nrows - 1) {
- if (p && p->row == r + 1
- && (p->is_single_line() || p->is_double_line())) {
- p->print(this);
- prints("\\*[" TRANSPARENT_STRING_NAME "].nr " NEED_BOTTOM_RULE_REG
- " 0\n");
- }
- int printed_one = 0;
- for (vertical_rule *vr = vrule_list; vr; vr = vr->next)
- if (vr->end_row == r) {
- if (!printed_one) {
- prints("." REPEATED_VPT_MACRO " 0\n");
- printed_one = 1;
- }
- vr->print();
- }
- if (printed_one)
- prints("." REPEATED_VPT_MACRO " 1\n");
- if (!(flags & NOKEEP) && row_ends_section(r))
- prints("." RELEASE_MACRO_NAME "\n");
- }
-}
-
-void table::do_top()
-{
- prints(".fc \002\003\n");
- if (!(flags & NOKEEP) && (flags & (BOX|DOUBLEBOX|ALLBOX)))
- prints("." TABLE_KEEP_MACRO_NAME "\n");
- if (flags & DOUBLEBOX) {
- prints(".ls 1\n"
- ".vs " LINE_SEP ">?\\n[.V]u\n"
- "\\v'" BODY_DEPTH "'\\s[\\n[" LINESIZE_REG "]]\\D'l \\n[TW]u 0'\\s0\n"
- ".vs\n"
- "." REPEATED_MARK_MACRO " " TOP_REG "\n"
- ".vs " DOUBLE_LINE_SEP ">?\\n[.V]u\n");
- printfs("\\v'" BODY_DEPTH "'"
- "\\s[\\n[" LINESIZE_REG "]]"
- "\\h'\\n[%1]u'"
- "\\D'l |\\n[%2]u 0'"
- "\\s0"
- "\n",
- column_divide_reg(0),
- column_divide_reg(ncolumns));
- prints(".ls\n"
- ".vs\n");
- }
- else if (flags & (ALLBOX|BOX)) {
- print_single_hline(0);
- }
- //printfs(".mk %1\n", row_top_reg(0));
-}
-
-void table::do_bottom()
-{
- // print stuff after last row
- for (stuff *p = stuff_list; p; p = p->next)
- if (p->row > nrows - 1)
- p->print(this);
- if (!(flags & NOKEEP))
- prints("." RELEASE_MACRO_NAME "\n");
- printfs(".mk %1\n", row_top_reg(nrows));
- prints(".nr " NEED_BOTTOM_RULE_REG " 1\n"
- ".nr T. 1\n"
- ".T#\n");
- if (!(flags & NOKEEP) && (flags & (BOX|DOUBLEBOX|ALLBOX)))
- prints("." TABLE_RELEASE_MACRO_NAME "\n");
- if (flags & DOUBLEBOX)
- prints(".sp " DOUBLE_LINE_SEP "\n");
- prints("." RESET_MACRO_NAME "\n"
- ".fc\n"
- ".cp \\n(" COMPATIBLE_REG "\n");
-}
-
-int table::get_nrows()
-{
- return nrows;
-}
-
-const char *last_filename = 0;
-
-void set_troff_location(const char *fn, int ln)
-{
- if (!location_force_filename && last_filename != 0
- && strcmp(fn, last_filename) == 0)
- printfs(".lf %1\n", as_string(ln));
- else {
- printfs(".lf %1 %2\n", as_string(ln), fn);
- last_filename = fn;
- location_force_filename = 0;
- }
-}
-
-void printfs(const char *s, const string &arg1, const string &arg2,
- const string &arg3, const string &arg4, const string &arg5)
-{
- if (s) {
- char c;
- while ((c = *s++) != '\0') {
- if (c == '%') {
- switch (*s++) {
- case '1':
- prints(arg1);
- break;
- case '2':
- prints(arg2);
- break;
- case '3':
- prints(arg3);
- break;
- case '4':
- prints(arg4);
- break;
- case '5':
- prints(arg5);
- break;
- case '6':
- case '7':
- case '8':
- case '9':
- break;
- case '%':
- prints('%');
- break;
- default:
- assert(0);
- }
- }
- else
- prints(c);
- }
- }
-}
-
diff --git a/contrib/groff/src/preproc/tbl/table.h b/contrib/groff/src/preproc/tbl/table.h
deleted file mode 100644
index 4b2497e2158e..000000000000
--- a/contrib/groff/src/preproc/tbl/table.h
+++ /dev/null
@@ -1,165 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "cset.h"
-#include "cmap.h"
-#include "stringclass.h"
-#include "errarg.h"
-#include "error.h"
-
-// PREFIX and PREFIX_CHAR must be the same.
-#define PREFIX "3"
-#define PREFIX_CHAR '3'
-
-// LEADER and LEADER_CHAR must be the same.
-#define LEADER "a"
-#define LEADER_CHAR 'a'
-
-struct inc_number {
- short inc;
- short val;
-};
-
-struct entry_modifier {
- inc_number point_size;
- inc_number vertical_spacing;
- string font;
- string macro;
- enum { CENTER, TOP, BOTTOM } vertical_alignment;
- char zero_width;
- char stagger;
-
- entry_modifier();
- ~entry_modifier();
-};
-
-enum format_type {
- FORMAT_LEFT,
- FORMAT_CENTER,
- FORMAT_RIGHT,
- FORMAT_NUMERIC,
- FORMAT_ALPHABETIC,
- FORMAT_SPAN,
- FORMAT_VSPAN,
- FORMAT_HLINE,
- FORMAT_DOUBLE_HLINE
-};
-
-struct entry_format : public entry_modifier {
- format_type type;
-
- entry_format(format_type);
- entry_format();
- void debug_print() const;
-};
-
-class table_entry;
-struct horizontal_span;
-struct stuff;
-struct vertical_rule;
-
-class table {
- unsigned flags;
- int nrows;
- int ncolumns;
- int linesize;
- char delim[2];
- char decimal_point_char;
- vertical_rule *vrule_list;
- stuff *stuff_list;
- horizontal_span *span_list;
- table_entry *entry_list;
- table_entry **entry_list_tailp;
- table_entry ***entry;
- char **vline;
- char *row_is_all_lines;
- string *minimum_width;
- int *column_separation;
- char *equal;
- int left_separation;
- int right_separation;
- int allocated_rows;
- void build_span_list();
- void do_hspan(int r, int c);
- void do_vspan(int r, int c);
- void allocate(int r);
- void compute_widths();
- void divide_span(int, int);
- void sum_columns(int, int);
- void compute_separation_factor();
- void compute_column_positions();
- void do_row(int);
- void init_output();
- void add_stuff(stuff *);
- void do_top();
- void do_bottom();
- void do_vertical_rules();
- void build_vrule_list();
- void add_vertical_rule(int, int, int, int);
- void define_bottom_macro();
- int vline_spanned(int r, int c);
- int row_begins_section(int);
- int row_ends_section(int);
- void make_columns_equal();
- void compute_vrule_top_adjust(int, int, string &);
- void compute_vrule_bot_adjust(int, int, string &);
- void determine_row_type();
-public:
- /* used by flags */
- enum {
- CENTER = 01,
- EXPAND = 02,
- BOX = 04,
- ALLBOX = 010,
- DOUBLEBOX = 020,
- NOKEEP = 040,
- NOSPACES = 0100
- };
- table(int nc, unsigned flags, int linesize, char decimal_point_char);
- ~table();
-
- void add_text_line(int r, const string &, const char *, int);
- void add_single_hline(int r);
- void add_double_hline(int r);
- void add_entry(int r, int c, const string &, const entry_format *,
- const char *, int lineno);
- void add_vlines(int r, const char *);
- void check();
- void print();
- void set_minimum_width(int c, const string &w);
- void set_column_separation(int c, int n);
- void set_equal_column(int c);
- void set_delim(char c1, char c2);
- void print_single_hline(int r);
- void print_double_hline(int r);
- int get_nrows();
-};
-
-void set_troff_location(const char *, int);
-
-extern int compatible_flag;
diff --git a/contrib/groff/src/preproc/tbl/tbl.man b/contrib/groff/src/preproc/tbl/tbl.man
deleted file mode 100644
index 00dfe4f83009..000000000000
--- a/contrib/groff/src/preproc/tbl/tbl.man
+++ /dev/null
@@ -1,493 +0,0 @@
-.ig
-Copyright (C) 1989-1995, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.TH @G@TBL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@tbl \- format tables for troff
-.
-.
-.SH SYNOPSIS
-.B @g@tbl
-[
-.B \-Cv
-]
-[
-.IR files \|.\|.\|.\&
-]
-.
-.
-.SH DESCRIPTION
-This manual page describes the GNU version of
-.BR tbl ,
-which is part of the groff document formatting system.
-.B tbl
-compiles descriptions of tables embedded within
-.B troff
-input files into commands that are understood by
-.BR troff .
-Normally, it should be invoked using the
-.B \-t
-option of
-.B groff.
-It is highly compatible with Unix
-.BR tbl .
-The output generated by GNU
-.B tbl
-cannot be processed with Unix
-.BR troff ;
-it must be processed with GNU
-.BR troff .
-If no files are given on the command line, the standard input
-will be read.
-A filename of
-.B \-
-will cause the standard input to be read.
-.
-.
-.SH OPTIONS
-.TP
-.B \-C
-Enable compatibility mode to
-recognize
-.B .TS
-and
-.B .TE
-even when followed by a character other than space or newline.
-Leader characters (\[rs]a) are handled as interpreted.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH USAGE
-.B tbl
-expects to find table descriptions wrapped in the
-.B .TS
-(table start) and
-.B .TE
-(table end) macros.
-The line immediately following the
-.B .TS
-macro may contain any of the following global options (ignoring the case
-of characters -- Unix tbl only accepts options with all characters lowercase
-or all characters uppercase):
-.
-.TP
-.B center
-Centers the table (default is left-justified).
-The alternative keyword name
-.B centre
-is also recognized (this is a GNU tbl extension).
-.
-.TP
-.BI delim( xy )
-Use
-.I x
-and
-.I y
-as start and end delimiters for
-.BR @g@eqn (@MAN1EXT@).
-.
-.TP
-.B expand
-Makes the table as wide as the current line length.
-.
-.TP
-.B box
-Encloses the table in a box.
-.
-.TP
-.B doublebox
-Encloses the table in a double box.
-.
-.TP
-.B allbox
-Encloses each item of the table in a box.
-.
-.TP
-.B frame
-Same as box (GNU tbl only).
-.
-.TP
-.B doubleframe
-Same as doublebox (GNU tbl only).
-.
-.TP
-.BI tab( x )
-Uses the character
-.I x
-instead of a tab to separate items in a line of input data.
-.
-.TP
-.BI linesize( n )
-Sets lines or rules (e.g. from
-.BR box )
-in
-.IR n -point
-type.
-.
-.TP
-.B nokeep
-Don't use diversions to prevent page breaks (GNU tbl only).
-Normally
-.B tbl
-attempts to prevent undesirable breaks in the table by using diversions.
-This can sometimes interact badly with macro packages' own use of
-diversions, when footnotes, for example, are used.
-.
-.TP
-.BI decimalpoint( c )
-Set the character to be recognized as the decimal point in numeric
-columns (GNU tbl only).
-.
-.TP
-.B nospaces
-Ignore leading and trailing spaces in data items (GNU tbl only).
-.
-.LP
-The global options must end with a semicolon.
-There might be whitespace after an option and its argument in parentheses.
-.LP
-After global options come lines describing the format of each line of
-the table.
-Each such format line describes one line of the table itself, except that
-the last format line (which you must end with a period) describes all
-remaining lines of the table.
-A single key character describes each column of each line of the table.
-You may run format specs for multiple lines together on the same line by
-separating them with commas.
-.LP
-You may follow each key character with specifiers that determine the font
-and point size of the corresponding item, that determine column width,
-inter-column spacing, etc.
-.LP
-The longest format line defines the number of columns in the table; missing
-format descriptors at the end of format lines are assumed to be `L'.
-Extra columns in the data (which have no corresponding format entry) are
-ignored.
-.LP
-The available key characters are:
-.
-.TP
-c,C
-Centers item within the column.
-.
-.TP
-r,R
-Right-justifies item within the column.
-.
-.TP
-l,L
-Left-justifies item within the column.
-.
-.TP
-n,N
-Numerically justifies item in the column: Units positions of numbers are
-aligned vertically.
-.
-.TP
-s,S
-Spans previous item on the left into this column.
-.
-.TP
-a,A
-Centers longest line in this column and then left-justifies all other lines
-in this column with respect to that centered line.
-.
-.TP
-^
-Spans down entry from previous row in this column.
-.
-.TP
-_,-
-Replaces this entry with a horizontal line.
-.
-.TP
-=
-.
-Replaces this entry with a double horizontal line.
-.
-.TP
-|
-The corresponding column becomes a vertical rule (if two of these are
-adjacent, a double vertical rule).
-.
-.LP
-A vertical bar to the left of the first key-letter or to the right of the
-last one produces a line at the edge of the table.
-.LP
-Here are the specifiers that can appear in suffixes to column key letters:
-.
-.TP
-b,B
-Short form of fB (make affected entries bold).
-.
-.TP
-i,I
-Short form of fI (make affected entries italic).
-.
-.TP
-t,T
-Start an item vertically spanning rows at the top of its range rather than
-vertically centering it.
-.
-.TP
-d,D
-Start an item vertically spanning rows at the bottom of its range rather
-than vertically centering it (GNU tbl only).
-.
-.TP
-v,V
-Followed by a number, this indicates the vertical line spacing to be used in
-a multi-line table entry.
-If signed, the current vertical line spacing is incremented or decremented
-(using a signed number instead of a signed digit is a GNU tbl extension).
-A vertical line spacing specifier followed by a column separation number
-must be separated by one or more blanks.
-No effect if the corresponding table entry isn't a text block.
-.
-.TP
-f,F
-Either of these specifiers may be followed by a font name (either one or two
-characters long), font number (a single digit), or long name in parentheses
-(the last form is a GNU tbl extension).
-A one-letter font name must be separated by one or more blanks from whatever
-follows.
-.
-.TP
-p,P
-Followed by a number, this does a point size change for the affected fields.
-If signed, the current point size is incremented or decremented (using a
-signed number instead of a signed digit is a GNU tbl extension).
-A point size specifier followed by a column separation number must be
-separated by one or more blanks.
-.
-.TP
-w,W
-Minimal column width value.
-Must be followed either by a
-.BR @g@troff (@MAN1EXT@)
-width expression in parentheses or a unitless integer.
-If no unit is given, en units are used.
-Also used as the default line length for included text blocks.
-If used multiple times to specify the width for a particular column,
-the last entry takes effect.
-.
-.TP
-x,X
-This is a GNU tbl extension.
-Either of these specifiers may be followed by a macro name
-(either one or two characters long),
-or long name in parentheses.
-A one-letter macro name must be separated by one or more blanks
-from whatever follows.
-The macro which name can be specified here
-must be defined before creating the table.
-It is called just before the table's cell text is output.
-As implemented currently, this macro is only called if block input is used,
-that is, text between `T{' and `T}'.
-The macro should contain only simple
-.B troff
-requests to change the text block formatting, like text adjustment,
-hyphenation, size, or font.
-The macro is called
-.I after
-other cell modifications like
-.BR b ,
-.B f
-or
-.B v
-are output.
-Thus the macro can overwrite other modification specifiers.
-.
-.TP
-e,E
-Make equally-spaced columns.
-.
-.TP
-u,U
-Move the corresponding column up one half-line.
-.
-.TP
-z,Z
-Ignore the corresponding column for width-calculation purposes.
-.
-.LP
-A number suffix on a key character is interpreted as a column
-separation in ens (multiplied in proportion if the
-.B expand
-option is on).
-Default separation is 3n.
-.LP
-The format lines are followed by lines containing the actual data for the
-table, followed finally by
-.BR .TE .
-Within such data lines, items are normally separated by tab characters (or
-the character specified with the
-.B tab
-option).
-Long input lines can be broken across multiple lines if the last character
-on the line is `\e' (which vanishes after concatenation).
-.LP
-A dot starting a line, followed by anything but a digit is handled as a
-troff command, passed through without changes.
-The table position is unchanged in this case.
-.LP
-If a data line consists of only `_' or `=', a single or double line,
-respectively, is drawn across the table at that point; if a single item in a
-data line consists of only `_' or `=', then that item is replaced by a
-single or double line, joining its neighbours.
-If a data item consists only of `\e_' or `\e=', a single or double line,
-respectively, is drawn across the field at that point which does not join
-its neighbours.
-.LP
-A data item consisting only of `\eRx' (`x' any character) is replaced by
-repetitions of character `x' as wide as the column (not joining its
-neighbours).
-.LP
-A data item consisting only of `\e^' indicates that the field immediately
-above spans downward over this row.
-.LP
-A text block can be used to enter data as a single entry which would be
-too long as a simple string between tabs.
-It is started with `T{' and closed with `T}'.
-The former must end a line, and the latter must start a line, probably
-followed by other data columns (separated with tabs).
-By default, the text block is formatted with the settings which were
-active before entering the table, possibly overridden by the
-.B v
-and
-.B w
-tbl specifiers.
-For example, to make all text blocks ragged-right, insert
-.B .na
-right before the starting
-.B .TS
-(and
-.B .ad
-after the table).
-.LP
-To change the data format within a table, use the
-.B .T&
-command (at the start of a line).
-It is followed by format and data lines (but no global options) similar to
-the
-.B .TS
-request.
-.
-.
-.SH "INTERACTION WITH @G@EQN"
-.BR @g@tbl (@MAN1EXT@)
-should always be called before
-.BR @g@eqn (@MAN1EXT@)
-.RB ( groff (@MAN1EXT@)
-automatically takes care of the correct order of preprocessors).
-.
-.
-.SH "GNU TBL ENHANCEMENTS"
-There is no limit on the number of columns in a table, nor any limit on the
-number of text blocks.
-All the lines of a table are considered in deciding column widths, not just
-the first 200.
-Table continuation
-.RB ( .T& )
-lines are not restricted to the first 200 lines.
-.LP
-Numeric and alphabetic items may appear in the same column.
-.LP
-Numeric and alphabetic items may span horizontally.
-.LP
-.B @g@tbl
-uses register, string, macro and diversion names beginning with the digit\~\c
-.BR 3 .
-When using
-.B @g@tbl
-you should avoid using any names beginning with a\~\c
-.BR 3 .
-.
-.
-.SH BUGS
-You should use
-.BR .TS\ H / .TH
-in conjunction with a supporting macro package for
-.I all
-multi-page boxed tables.
-If there is no header that you wish to appear at the top of each page
-of the table, place the
-.B .TH
-line immediately after the format section.
-Do not enclose a multi-page table within keep/release macros,
-or divert it in any other way.
-.LP
-A text block within a table must be able to fit on one page.
-.LP
-The
-.B bp
-request cannot be used to force a page-break in a multi-page table.
-Instead, define
-.B BP
-as follows
-.IP
-.B .de BP
-.br
-.B .ie '\e\en(.z'' .bp \e\e$1
-.br
-.B .el \e!.BP \e\e$1
-.br
-.B ..
-.br
-.LP
-and use
-.B BP
-instead of
-.BR bp .
-.LP
-Using \ea directly in a table to get leaders will not work (except in
-compatibility mode).
-This is correct behaviour: \ea is an
-.B uninterpreted
-leader.
-To get leaders use a real leader, either by using a control A or like
-this:
-.IP
-.nf
-.ft B
-\&.ds a \ea
-\&.TS
-tab(;);
-lw(1i) l.
-A\e*a;B
-\&.TE
-.ft
-.fi
-.
-.
-.SH REFERENCE
-Lesk, M.E.: "TBL -- A Program to Format Tables".
-For copyright reasons it cannot be included in the groff distribution,
-but copies can be found with a title search on the World Wide Web.
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/roff/groff/Makefile.sub b/contrib/groff/src/roff/groff/Makefile.sub
deleted file mode 100644
index 798f2d8a730c..000000000000
--- a/contrib/groff/src/roff/groff/Makefile.sub
+++ /dev/null
@@ -1,8 +0,0 @@
-PROG=groff$(EXEEXT)
-MAN1=groff.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=groff.$(OBJEXT) pipeline.$(OBJEXT)
-CCSRCS=$(srcdir)/groff.cpp
-CSRCS=$(srcdir)/pipeline.c
-HDRS=$(srcdir)/pipeline.h
diff --git a/contrib/groff/src/roff/groff/groff.cpp b/contrib/groff/src/roff/groff/groff.cpp
deleted file mode 100644
index 5e18757352c3..000000000000
--- a/contrib/groff/src/roff/groff/groff.cpp
+++ /dev/null
@@ -1,765 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-// A front end for groff.
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <signal.h>
-#include <errno.h>
-
-#include "assert.h"
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "font.h"
-#include "device.h"
-#include "pipeline.h"
-#include "nonposix.h"
-#include "defs.h"
-
-#define GXDITVIEW "gxditview"
-
-// troff will be passed an argument of -rXREG=1 if the -X option is
-// specified
-#define XREG ".X"
-
-#ifdef NEED_DECLARATION_PUTENV
-extern "C" {
- int putenv(const char *);
-}
-#endif /* NEED_DECLARATION_PUTENV */
-
-// The number of commands must be in sync with MAX_COMMANDS in pipeline.h
-const int SOELIM_INDEX = 0;
-const int REFER_INDEX = SOELIM_INDEX + 1;
-const int GRAP_INDEX = REFER_INDEX + 1;
-const int PIC_INDEX = GRAP_INDEX + 1;
-const int TBL_INDEX = PIC_INDEX + 1;
-const int GRN_INDEX = TBL_INDEX + 1;
-const int EQN_INDEX = GRN_INDEX + 1;
-const int TROFF_INDEX = EQN_INDEX + 1;
-const int POST_INDEX = TROFF_INDEX + 1;
-const int SPOOL_INDEX = POST_INDEX + 1;
-
-const int NCOMMANDS = SPOOL_INDEX + 1;
-
-class possible_command {
- char *name;
- string args;
- char **argv;
-
- void build_argv();
-public:
- possible_command();
- ~possible_command();
- void set_name(const char *);
- void set_name(const char *, const char *);
- const char *get_name();
- void append_arg(const char *, const char * = 0);
- void insert_arg(const char *);
- void insert_args(string s);
- void clear_args();
- char **get_argv();
- void print(int is_last, FILE *fp);
-};
-
-extern "C" const char *Version_string;
-
-int lflag = 0;
-char *spooler = 0;
-char *postdriver = 0;
-char *predriver = 0;
-
-possible_command commands[NCOMMANDS];
-
-int run_commands(int no_pipe);
-void print_commands(FILE *);
-void append_arg_to_string(const char *arg, string &str);
-void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno);
-const char *xbasename(const char *);
-
-void usage(FILE *stream);
-void help();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- assert(NCOMMANDS <= MAX_COMMANDS);
- string Pargs, Largs, Fargs;
- int vflag = 0;
- int Vflag = 0;
- int zflag = 0;
- int iflag = 0;
- int Xflag = 0;
- int oflag = 0;
- int safer_flag = 1;
- int opt;
- const char *command_prefix = getenv("GROFF_COMMAND_PREFIX");
- if (!command_prefix)
- command_prefix = PROG_PREFIX;
- commands[TROFF_INDEX].set_name(command_prefix, "troff");
- static const struct option long_options[] = {
- { "help", no_argument, 0, 'h' },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv,
- "abcCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ",
- long_options, NULL))
- != EOF) {
- char buf[3];
- buf[0] = '-';
- buf[1] = opt;
- buf[2] = '\0';
- switch (opt) {
- case 'i':
- iflag = 1;
- break;
- case 'I':
- commands[SOELIM_INDEX].set_name(command_prefix, "soelim");
- commands[SOELIM_INDEX].append_arg(buf, optarg);
- // .psbb may need to search for files
- commands[TROFF_INDEX].append_arg(buf, optarg);
- // \X'ps:import' may need to search for files
- Pargs += buf;
- Pargs += optarg;
- Pargs += '\0';
- break;
- case 't':
- commands[TBL_INDEX].set_name(command_prefix, "tbl");
- break;
- case 'p':
- commands[PIC_INDEX].set_name(command_prefix, "pic");
- break;
- case 'g':
- commands[GRN_INDEX].set_name(command_prefix, "grn");
- break;
- case 'G':
- commands[GRAP_INDEX].set_name(command_prefix, "grap");
- break;
- case 'e':
- commands[EQN_INDEX].set_name(command_prefix, "eqn");
- break;
- case 's':
- commands[SOELIM_INDEX].set_name(command_prefix, "soelim");
- break;
- case 'R':
- commands[REFER_INDEX].set_name(command_prefix, "refer");
- break;
- case 'z':
- case 'a':
- commands[TROFF_INDEX].append_arg(buf);
- // fall through
- case 'Z':
- zflag++;
- break;
- case 'l':
- lflag++;
- break;
- case 'V':
- Vflag++;
- break;
- case 'v':
- vflag = 1;
- {
- printf("GNU groff version %s\n", Version_string);
- printf("Copyright (C) 2004 Free Software Foundation, Inc.\n"
- "GNU groff comes with ABSOLUTELY NO WARRANTY.\n"
- "You may redistribute copies of groff and its subprograms\n"
- "under the terms of the GNU General Public License.\n"
- "For more information about these matters, see the file named COPYING.\n");
- printf("\ncalled subprograms:\n\n");
- fflush(stdout);
- }
- commands[POST_INDEX].append_arg(buf);
- // fall through
- case 'C':
- commands[SOELIM_INDEX].append_arg(buf);
- commands[REFER_INDEX].append_arg(buf);
- commands[PIC_INDEX].append_arg(buf);
- commands[GRAP_INDEX].append_arg(buf);
- commands[TBL_INDEX].append_arg(buf);
- commands[GRN_INDEX].append_arg(buf);
- commands[EQN_INDEX].append_arg(buf);
- commands[TROFF_INDEX].append_arg(buf);
- break;
- case 'N':
- commands[EQN_INDEX].append_arg(buf);
- break;
- case 'h':
- help();
- break;
- case 'E':
- case 'b':
- commands[TROFF_INDEX].append_arg(buf);
- break;
- case 'c':
- commands[TROFF_INDEX].append_arg(buf);
- break;
- case 'S':
- safer_flag = 1;
- break;
- case 'U':
- safer_flag = 0;
- break;
- case 'T':
- if (strcmp(optarg, "html") == 0) {
- // force soelim to aid the html preprocessor
- commands[SOELIM_INDEX].set_name(command_prefix, "soelim");
- }
- if (strcmp(optarg, "Xps") == 0) {
- warning("-TXps option is obsolete: use -X -Tps instead");
- device = "ps";
- Xflag++;
- }
- else
- device = optarg;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- if (Fargs.length() > 0) {
- Fargs += PATH_SEP_CHAR;
- Fargs += optarg;
- }
- else
- Fargs = optarg;
- break;
- case 'o':
- oflag = 1;
- case 'f':
- case 'm':
- case 'r':
- case 'd':
- case 'n':
- case 'w':
- case 'W':
- commands[TROFF_INDEX].append_arg(buf, optarg);
- break;
- case 'M':
- commands[EQN_INDEX].append_arg(buf, optarg);
- commands[GRAP_INDEX].append_arg(buf, optarg);
- commands[GRN_INDEX].append_arg(buf, optarg);
- commands[TROFF_INDEX].append_arg(buf, optarg);
- break;
- case 'P':
- Pargs += optarg;
- Pargs += '\0';
- break;
- case 'L':
- append_arg_to_string(optarg, Largs);
- break;
- case 'X':
- Xflag++;
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- break;
- }
- }
- if (safer_flag)
- commands[PIC_INDEX].append_arg("-S");
- else
- commands[TROFF_INDEX].insert_arg("-U");
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
- if (!font::load_desc())
- fatal("invalid device `%1'", device);
- if (!postdriver)
- fatal("no `postpro' command in DESC file for device `%1'", device);
- if (predriver && !zflag) {
- commands[TROFF_INDEX].insert_arg(commands[TROFF_INDEX].get_name());
- commands[TROFF_INDEX].set_name(predriver);
- // pass the device arguments to the predrivers as well
- commands[TROFF_INDEX].insert_args(Pargs);
- if (vflag)
- commands[TROFF_INDEX].insert_arg("-v");
- }
- const char *real_driver = 0;
- if (Xflag) {
- real_driver = postdriver;
- postdriver = (char *)GXDITVIEW;
- commands[TROFF_INDEX].append_arg("-r" XREG "=", "1");
- }
- if (postdriver)
- commands[POST_INDEX].set_name(postdriver);
- int gxditview_flag = postdriver && strcmp(xbasename(postdriver), GXDITVIEW) == 0;
- if (gxditview_flag && argc - optind == 1) {
- commands[POST_INDEX].append_arg("-title");
- commands[POST_INDEX].append_arg(argv[optind]);
- commands[POST_INDEX].append_arg("-xrm");
- commands[POST_INDEX].append_arg("*iconName:", argv[optind]);
- string filename_string("|");
- append_arg_to_string(argv[0], filename_string);
- append_arg_to_string("-Z", filename_string);
- for (int i = 1; i < argc; i++)
- append_arg_to_string(argv[i], filename_string);
- filename_string += '\0';
- commands[POST_INDEX].append_arg("-filename");
- commands[POST_INDEX].append_arg(filename_string.contents());
- }
- if (gxditview_flag && Xflag) {
- string print_string(real_driver);
- if (spooler) {
- print_string += " | ";
- print_string += spooler;
- print_string += Largs;
- }
- print_string += '\0';
- commands[POST_INDEX].append_arg("-printCommand");
- commands[POST_INDEX].append_arg(print_string.contents());
- }
- const char *p = Pargs.contents();
- const char *end = p + Pargs.length();
- while (p < end) {
- commands[POST_INDEX].append_arg(p);
- p = strchr(p, '\0') + 1;
- }
- if (gxditview_flag)
- commands[POST_INDEX].append_arg("-");
- if (lflag && !vflag && !Xflag && spooler) {
- commands[SPOOL_INDEX].set_name(BSHELL);
- commands[SPOOL_INDEX].append_arg(BSHELL_DASH_C);
- Largs += '\0';
- Largs = spooler + Largs;
- commands[SPOOL_INDEX].append_arg(Largs.contents());
- }
- if (zflag) {
- commands[POST_INDEX].set_name(0);
- commands[SPOOL_INDEX].set_name(0);
- }
- commands[TROFF_INDEX].append_arg("-T", device);
- // html renders equations as images via ps
- if (strcmp(device, "html") == 0) {
- if (oflag)
- fatal("`-o' option is invalid with device `html'");
- commands[EQN_INDEX].append_arg("-Tps:html");
- }
- else
- commands[EQN_INDEX].append_arg("-T", device);
-
- commands[GRN_INDEX].append_arg("-T", device);
-
- int first_index;
- for (first_index = 0; first_index < TROFF_INDEX; first_index++)
- if (commands[first_index].get_name() != 0)
- break;
- if (optind < argc) {
- if (argv[optind][0] == '-' && argv[optind][1] != '\0')
- commands[first_index].append_arg("--");
- for (int i = optind; i < argc; i++)
- commands[first_index].append_arg(argv[i]);
- if (iflag)
- commands[first_index].append_arg("-");
- }
- if (Fargs.length() > 0) {
- string e = "GROFF_FONT_PATH";
- e += '=';
- e += Fargs;
- char *fontpath = getenv("GROFF_FONT_PATH");
- if (fontpath && *fontpath) {
- e += PATH_SEP_CHAR;
- e += fontpath;
- }
- e += '\0';
- if (putenv(strsave(e.contents())))
- fatal("putenv failed");
- }
- {
- // we save the original path in GROFF_PATH__ and put it into the
- // environment -- troff will pick it up later.
- char *path = getenv("PATH");
- string e = "GROFF_PATH__";
- e += '=';
- if (path && *path)
- e += path;
- e += '\0';
- if (putenv(strsave(e.contents())))
- fatal("putenv failed");
- char *binpath = getenv("GROFF_BIN_PATH");
- string f = "PATH";
- f += '=';
- if (binpath && *binpath)
- f += binpath;
- else
- f += BINPATH;
- if (path && *path) {
- f += PATH_SEP_CHAR;
- f += path;
- }
- f += '\0';
- if (putenv(strsave(f.contents())))
- fatal("putenv failed");
- }
- if (Vflag)
- print_commands(Vflag == 1 ? stdout : stderr);
- if (Vflag == 1)
- exit(0);
- return run_commands(vflag);
-}
-
-const char *xbasename(const char *s)
-{
- if (!s)
- return 0;
- // DIR_SEPS[] are possible directory separator characters, see nonposix.h
- // We want the rightmost separator of all possible ones.
- // Example: d:/foo\\bar.
- const char *p = strrchr(s, DIR_SEPS[0]), *p1;
- const char *sep = &DIR_SEPS[1];
-
- while (*sep)
- {
- p1 = strrchr(s, *sep);
- if (p1 && (!p || p1 > p))
- p = p1;
- sep++;
- }
- return p ? p + 1 : s;
-}
-
-void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "print") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`print' command requires an argument");
- else
- spooler = strsave(arg);
- }
- if (strcmp(command, "prepro") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`prepro' command requires an argument");
- else {
- for (const char *p = arg; *p; p++)
- if (csspace(*p)) {
- error_with_file_and_line(filename, lineno,
- "invalid `prepro' argument `%1'"
- ": program name required", arg);
- return;
- }
- predriver = strsave(arg);
- }
- }
- if (strcmp(command, "postpro") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`postpro' command requires an argument");
- else {
- for (const char *p = arg; *p; p++)
- if (csspace(*p)) {
- error_with_file_and_line(filename, lineno,
- "invalid `postpro' argument `%1'"
- ": program name required", arg);
- return;
- }
- postdriver = strsave(arg);
- }
- }
-}
-
-void print_commands(FILE *fp)
-{
- int last;
- for (last = SPOOL_INDEX; last >= 0; last--)
- if (commands[last].get_name() != 0)
- break;
- for (int i = 0; i <= last; i++)
- if (commands[i].get_name() != 0)
- commands[i].print(i == last, fp);
-}
-
-// Run the commands. Return the code with which to exit.
-
-int run_commands(int no_pipe)
-{
- char **v[NCOMMANDS];
- int j = 0;
- for (int i = 0; i < NCOMMANDS; i++)
- if (commands[i].get_name() != 0)
- v[j++] = commands[i].get_argv();
- return run_pipeline(j, v, no_pipe);
-}
-
-possible_command::possible_command()
-: name(0), argv(0)
-{
-}
-
-possible_command::~possible_command()
-{
- a_delete name;
- a_delete argv;
-}
-
-void possible_command::set_name(const char *s)
-{
- a_delete name;
- name = strsave(s);
-}
-
-void possible_command::set_name(const char *s1, const char *s2)
-{
- a_delete name;
- name = new char[strlen(s1) + strlen(s2) + 1];
- strcpy(name, s1);
- strcat(name, s2);
-}
-
-const char *possible_command::get_name()
-{
- return name;
-}
-
-void possible_command::clear_args()
-{
- args.clear();
-}
-
-void possible_command::append_arg(const char *s, const char *t)
-{
- args += s;
- if (t)
- args += t;
- args += '\0';
-}
-
-void possible_command::insert_arg(const char *s)
-{
- string str(s);
- str += '\0';
- str += args;
- args = str;
-}
-
-void possible_command::insert_args(string s)
-{
- const char *p = s.contents();
- const char *end = p + s.length();
- int l = 0;
- if (p >= end)
- return;
- // find the total number of arguments in our string
- do {
- l++;
- p = strchr(p, '\0') + 1;
- } while (p < end);
- // now insert each argument preserving the order
- for (int i = l - 1; i >= 0; i--) {
- p = s.contents();
- for (int j = 0; j < i; j++)
- p = strchr(p, '\0') + 1;
- insert_arg(p);
- }
-}
-
-void possible_command::build_argv()
-{
- if (argv)
- return;
- // Count the number of arguments.
- int len = args.length();
- int argc = 1;
- char *p = 0;
- if (len > 0) {
- p = &args[0];
- for (int i = 0; i < len; i++)
- if (p[i] == '\0')
- argc++;
- }
- // Build an argument vector.
- argv = new char *[argc + 1];
- argv[0] = name;
- for (int i = 1; i < argc; i++) {
- argv[i] = p;
- p = strchr(p, '\0') + 1;
- }
- argv[argc] = 0;
-}
-
-void possible_command::print(int is_last, FILE *fp)
-{
- build_argv();
- if (IS_BSHELL(argv[0])
- && argv[1] != 0 && strcmp(argv[1], BSHELL_DASH_C) == 0
- && argv[2] != 0 && argv[3] == 0)
- fputs(argv[2], fp);
- else {
- fputs(argv[0], fp);
- string str;
- for (int i = 1; argv[i] != 0; i++) {
- str.clear();
- append_arg_to_string(argv[i], str);
- put_string(str, fp);
- }
- }
- if (is_last)
- putc('\n', fp);
- else
- fputs(" | ", fp);
-}
-
-void append_arg_to_string(const char *arg, string &str)
-{
- str += ' ';
- int needs_quoting = 0;
- int contains_single_quote = 0;
- const char*p;
- for (p = arg; *p != '\0'; p++)
- switch (*p) {
- case ';':
- case '&':
- case '(':
- case ')':
- case '|':
- case '^':
- case '<':
- case '>':
- case '\n':
- case ' ':
- case '\t':
- case '\\':
- case '"':
- case '$':
- case '?':
- case '*':
- needs_quoting = 1;
- break;
- case '\'':
- contains_single_quote = 1;
- break;
- }
- if (contains_single_quote || arg[0] == '\0') {
- str += '"';
- for (p = arg; *p != '\0'; p++)
- switch (*p) {
- case '"':
- case '\\':
- case '$':
- str += '\\';
- // fall through
- default:
- str += *p;
- break;
- }
- str += '"';
- }
- else if (needs_quoting) {
- str += '\'';
- str += arg;
- str += '\'';
- }
- else
- str += arg;
-}
-
-char **possible_command::get_argv()
-{
- build_argv();
- return argv;
-}
-
-void synopsis(FILE *stream)
-{
- fprintf(stream,
-"usage: %s [-abceghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n"
-" [-wname] [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg]\n"
-" [-Larg] [-Idir] [files...]\n",
- program_name);
-}
-
-void help()
-{
- synopsis(stdout);
- fputs("\n"
-"-h\tprint this message\n"
-"-t\tpreprocess with tbl\n"
-"-p\tpreprocess with pic\n"
-"-e\tpreprocess with eqn\n"
-"-g\tpreprocess with grn\n"
-"-G\tpreprocess with grap\n"
-"-s\tpreprocess with soelim\n"
-"-R\tpreprocess with refer\n"
-"-Tdev\tuse device dev\n"
-"-X\tuse X11 previewer rather than usual postprocessor\n"
-"-mname\tread macros tmac.name\n"
-"-dcs\tdefine a string c as s\n"
-"-rcn\tdefine a number register c as n\n"
-"-nnum\tnumber first page n\n"
-"-olist\toutput only pages in list\n"
-"-ffam\tuse fam as the default font family\n"
-"-Fdir\tsearch dir for device directories\n"
-"-Mdir\tsearch dir for macro files\n"
-"-v\tprint version number\n"
-"-z\tsuppress formatted output\n"
-"-Z\tdon't postprocess\n"
-"-a\tproduce ASCII description of output\n"
-"-i\tread standard input after named input files\n"
-"-wname\tenable warning name\n"
-"-Wname\tinhibit warning name\n"
-"-E\tinhibit all errors\n"
-"-b\tprint backtraces with errors or warnings\n"
-"-l\tspool the output\n"
-"-c\tdisable color output\n"
-"-C\tenable compatibility mode\n"
-"-V\tprint commands on stdout instead of running them\n"
-"-Parg\tpass arg to the postprocessor\n"
-"-Larg\tpass arg to the spooler\n"
-"-N\tdon't allow newlines within eqn delimiters\n"
-"-S\tenable safer mode (the default)\n"
-"-U\tenable unsafe mode\n"
-"-Idir\tsearch dir for soelim, troff, and grops. Implies -s\n"
-"\n",
- stdout);
- exit(0);
-}
-
-void usage(FILE *stream)
-{
- synopsis(stream);
- fprintf(stream, "%s -h gives more help\n", program_name);
-}
-
-extern "C" {
-
-void c_error(const char *format, const char *arg1, const char *arg2,
- const char *arg3)
-{
- error(format, arg1, arg2, arg3);
-}
-
-void c_fatal(const char *format, const char *arg1, const char *arg2,
- const char *arg3)
-{
- fatal(format, arg1, arg2, arg3);
-}
-
-}
diff --git a/contrib/groff/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man
deleted file mode 100644
index 23f3fab67136..000000000000
--- a/contrib/groff/src/roff/groff/groff.man
+++ /dev/null
@@ -1,1739 +0,0 @@
-.ig
-groff.man
-
-Last update: 01 Jul 2005
-
-Copyright (C) 1989, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-Rewritten in 2002 by Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-
-$FreeBSD$
-
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.\" set adjust to both
-.ad b
-.
-.\" fonts of fixed length
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \
-. ftr CB CW
-.
-.\" --------------------------------------------------------------------
-.\" String definitions
-.
-.ds @- "\-\"
-.ds @-- "\-\^\-\"
-.
-.ds Ellipsis .\|.\|.\"
-.
-.
-.\" --------------------------------------------------------------------
-.\" Begin of macro definitions
-.de c
-.\" this is like a comment request when escape mechanism is off
-..
-.eo
-.
-.c --------------------------------------------------------------------
-.de TP+
-.br
-.ns
-.TP \$1
-..
-.c --------------------------------------------------------------------
-.c Like TP, but if specified indent is more than half
-.c the current line-length - indent, use the default indent.
-.de Tp
-. ie \n[.$]=0:((0\$1)*2u>(\n.lu-\n(.iu)) .TP
-. el .TP "\$1"
-..
-.c --------------------------------------------------------------------
-.de Text
-. nop \)\$*
-..
-.c --------------------------------------------------------------------
-.de Synopsis
-. ds @arg1 \$1\"
-. nr @old_indent \n[.i]
-. ad l
-. in +\w'\f[B]\*[@arg1]\0'u
-. ti \n[@old_indent]u
-. B \*[@arg1]\0\c
-. rr @old_indent
-. rm @arg1
-..
-.c --------------------------------------------------------------------
-.de EndSynopsis
-. ad
-. in
-..
-.c --------------------------------------------------------------------
-.c ShortOpt[] (name [arg])
-.c
-.c short option in synopsis
-.c
-.de ShortOpt[]
-. if \n[.$]=0 \
-. return
-. ds @opt \$1\"
-. shift
-. ie \n[.$]=0 \
-. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[]
-. el \
-. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[]
-. rm @opt
-..
-.c --------------------------------------------------------------------
-.c Option in synopsis (short option)
-.de SynOpt
-. if \n[.$]=0 \
-. return
-. ds @opt \$1\"
-. shift
-. ie \n[.$]=0 \
-. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[]
-. el \
-. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[]
-. rm @opt
-..
-.c --------------------------------------------------------------------
-.c ShortOpt ([char [punct]])
-.c
-.c `-c' somewhere in the text
-.c second arg is punctuation
-.c
-.de ShortOpt
-. ds @opt \$1\"
-. shift
-. Text \f[CB]\*[@-]\*[@opt]\f[]\/\$*
-. rm @opt
-..
-.c --------------------------------------------------------------------
-.c LongOpt ([name [punct]])
-.c
-.c `--name' somewhere in the text
-.c second arg is punctuation
-.c
-.de LongOpt
-. ds @opt \$1\"
-. shift
-. Text \f[CB]\*[@--]\f[]\f[B]\*[@opt]\f[]\/\$*
-. rm @opt
-..
-.c --------------------------------------------------------------------
-.c OptDef (shortopt [longopt [argument]])
-.c
-.c option documentation
-.c args : `shortopt', `longopt' can be ""
-.c
-.de OptDef
-. ds @short
-. ds @long
-. ds @arg
-. if \n[.$]>=1 \{\
-. ds @arg1 "\$1\"
-. if !'\*[@arg1]'' \
-. ds @short "\f[CB]\*[@-]\*[@arg1]\f[]\"
-. if \n[.$]>=2 \{\
-. if !'\*[@short]'' \
-. as @short \f[CW]\0\f[]
-. ds @arg2 "\$2\"
-. if !'\*[@arg2]'' \
-. ds @long "\f[CB]\*[@--]\f[]\f[B]\*[@arg2]\f[]\"
-. if \n[.$]>=3 \{\
-. if !'\*[@long]'' \
-. as @long \|=\|\"
-. shift 2
-. ds @arg \f[I]\$*\"
-. \}
-. \}
-. \}
-. IP "\f[R]\*[@short]\*[@long]\*[@arg]\f[]"
-. rm @arg
-. rm @arg1
-. rm @arg2
-. rm @short
-. rm @long
-..
-.c --------------------------------------------------------------------
-.c Continuation of an OptDef header.
-.de OptDef+
-. br
-. ns
-. OptDef \$@
-..
-.c --------------------------------------------------------------------
-.c Environment variable
-.de EnvVar
-. SM
-. BR \%\$1 \$2
-..
-.c --------------------------------------------------------------------
-.c a shell command line
-.de ShellCommand
-. nr @font \n[.f]
-. c replace argument separator by unbreakable space
-. ds @args \$1\""
-. shift
-. while (\n[.$]>0) \{\
-. ds @args \*[@args]\~\$1
-. shift
-. \}
-. br
-. ad l
-. nh
-. Text \f[I]sh#\h'1m'\f[P]\f[CR]\*[@args]\f[P]\&\"
-. ft R
-. ft P
-. hy
-. ad
-. ft \n[@font]
-. br
-. rr @font
-. rm @args
-..
-.c --------------------------------------------------------------------
-.c `char or string'
-.de Quoted
-. ft CR
-. Text \[oq]\$*\[cq]
-. ft
-..
-.c --------------------------------------------------------------------
-.c End of macro definitions
-.ec
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH GROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff \- front-end for the groff document formatting system
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.ad l
-.Synopsis groff
-.ShortOpt[] abcegilpstzCEGNRSUVXZ
-.ShortOpt[] d cs
-.ShortOpt[] f fam
-.ShortOpt[] F dir
-.ShortOpt[] I dir
-.ShortOpt[] L arg
-.ShortOpt[] m name
-.ShortOpt[] M dir
-.ShortOpt[] n num
-.ShortOpt[] o list
-.ShortOpt[] P arg
-.ShortOpt[] r cn
-.ShortOpt[] T dev
-.ShortOpt[] w name
-.ShortOpt[] W name
-.RI [ file
-.Text \*[Ellipsis]]
-.EndSynopsis
-.
-.Synopsis groff
-.ShortOpt h
-|
-.LongOpt help
-.EndSynopsis
-.
-.Synopsis groff
-.ShortOpt v
-|
-.LongOpt version
-.RI [ option
-.Text \*[Ellipsis]]
-.EndSynopsis
-.
-.P
-The command line is parsed according to the usual GNU convention.
-.
-The whitespace between a command line option and its argument is
-optional.
-.
-Options can be grouped behind a single
-.ShortOpt
-(minus character).
-.
-A filename of
-.ShortOpt
-(minus character) denotes the standard input.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This document describes the
-.B groff
-program, the main front-end for the
-.I groff
-document formatting system.
-.
-The
-.I groff
-program and macro suite is the implementation of a
-.BR roff (@MAN7EXT@)
-system within the free software collection
-.URL http://\:www.gnu.org "GNU" .
-.
-The
-.I groff
-system has all features of the classical
-.IR roff ,
-but adds many extensions.
-.
-.P
-The
-.B groff
-program allows to control the whole
-.I groff
-system by command line options.
-.
-This is a great simplification in comparison to the classical case (which
-uses pipes only).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-As
-.B groff
-is a wrapper program for
-.B @g@troff
-both programs share a set of options.
-.
-But the
-.B groff
-program has some additional, native options and gives a new meaning to
-some
-.B @g@troff
-options.
-.
-On the other hand, not all
-.B @g@troff
-options can be fed into
-.BR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Native groff Options
-.\" --------------------------------------------------------------------
-.
-The following options either do not exist for
-.B @g@troff
-or are differently interpreted by
-.BR groff .
-.
-.
-.OptDef e
-Preprocess with
-.BR @g@eqn .
-.
-.
-.OptDef g
-Preprocess with
-.BR @g@grn .
-.
-.
-.OptDef G
-Preprocess with
-.BR grap .
-.
-.
-.OptDef h help
-Print a help message.
-.
-.
-.OptDef I "" dir
-This option may be used to specify a directory to search for
-files (both those on the command line and those named in
-.B \&.psbb
-and
-.B \&.so
-requests, and
-.B \eX'ps: import'
-and
-.B \eX'ps: file'
-escapes).
-The current directory is always searched first.
-This option may be specified more than once;
-the directories will be searched in the order specified.
-No directory search is performed for files specified using an absolute path.
-This option implies the
-.ShortOpt s
-option.
-.
-.
-.OptDef l
-Send the output to a spooler program for printing.
-.
-The command that should be used for this is specified by the
-.B print
-command in the device description file, see
-.BR \%groff_font (@MAN5EXT@).
-If this command is not present, the output is piped into the
-.BR lpr (1)
-program by default.
-.
-See options
-.ShortOpt L
-and
-.ShortOpt X .
-.
-.
-.OptDef L "" arg
-Pass
-.I arg
-to the spooler program.
-Several arguments should be passed with a separate
-.ShortOpt L
-option each.
-.
-Note that
-.B groff
-does not prepend
-.ShortOpt\" just a minus sign
-(a minus sign) to
-.I arg
-before passing it to the spooler program.
-.
-.
-.OptDef N
-Don't allow newlines within
-.I eqn
-delimiters.
-.
-This is the same as the
-.ShortOpt N
-option in
-.BR @g@eqn .
-.
-.
-.OptDef p
-Preprocess with
-.BR @g@pic .
-.
-.
-.OptDef P "" "\*[@-]option"
-.OptDef+ P "" "\*[@-]option \f[CB]\*[@-]P\f[] arg"
-Pass
-.I \*[@-]option
-or
-.I \*[@-]option arg
-to the postprocessor.
-.
-The option must be specified with the necessary preceding minus
-sign(s)
-.Quoted \*[@-]
-or
-.Quoted \*[@--]
-because groff does not prepend any dashes before passing it to the
-postprocessor.
-.
-For example, to pass a title to the \%gxditview postprocessor, the shell
-command
-.IP
-.ShellCommand groff \*[@-]X \*[@-]P \*[@-]title \*[@-]P 'groff it' \f[I]foo\f[]
-.IP
-is equivalent to
-.IP
-.ShellCommand groff \*[@-]X \*[@-]Z \f[I]foo\f[] | \
-gxditview \*[@-]title 'groff it' \*[@-]
-.
-.
-.OptDef R
-Preprocess with
-.BR @g@refer .
-.
-No mechanism is provided for passing arguments to
-.B @g@refer
-because most
-.B @g@refer
-options have equivalent language elements that can be specified within
-the document.
-.
-See
-.BR \%@g@refer (@MAN1EXT@)
-for more details.
-.
-.
-.OptDef s
-Preprocess with
-.BR @g@soelim .
-.
-.
-.OptDef S
-Safer mode.
-.
-Pass the
-.ShortOpt S
-option to
-.B @g@pic
-and disable the following
-.B @g@troff
-requests:
-.BR .open ,
-.BR .opena ,
-.BR .pso ,
-.BR .sy ,
-and
-.BR .pi .
-For security reasons, safer mode is enabled by default.
-.
-.
-.OptDef t
-Preprocess with
-.BR @g@tbl .
-.
-.
-.OptDef T "" dev
-Set output device to
-.IR dev .
-For this device,
-.B @g@troff
-generates the
-.I intermediate
-.IR output ;
-see
-.BR \%groff_out (@MAN5EXT@).
-.
-Then
-.B groff
-calls a postprocessor to convert
-.BR @g@troff 's
-.I intermediate output
-to its final format.
-.
-Real devices in
-.B groff
-are
-.
-.RS
-.RS
-.IP dvi
-TeX DVI format (postprocessor is
-.BR grodvi ).
-.IP html
-HTML output (preprocessors are
-.B @g@soelim
-and
-.BR \%pre-grohtml ,
-postprocessor is
-.BR \%post-grohtml ).
-.IP lbp
-Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers;
-postprocessor is
-.BR grolbp ).
-.IP lj4
-HP LaserJet4 compatible (or other PCL5 compatible) printers (postprocessor
-is
-.BR grolj4 ).
-.IP ps
-PostScript output (postprocessor is
-.BR grops ).
-.RE
-.RE
-.
-.IP
-For the following TTY output devices (postprocessor is always
-.BR grotty ),
-.ShortOpt T
-selects the output encoding:
-.RS
-.RS
-.IP ascii
-7bit ASCII.
-.IP cp1047
-\%Latin-1 character set for EBCDIC hosts.
-.IP latin1
-ISO \%8859-1.
-.IP utf8
-Unicode character set in \%UTF-8 encoding.
-.RE
-.RE
-.
-.IP
-The following arguments select
-.B \%gxditview
-as the `postprocessor' (it is rather a viewing program):
-.
-.RS
-.RS
-.IP X75
-75dpi resolution, 10pt document base font.
-.IP X75-12
-75dpi resolution, 12pt document base font.
-.IP X100
-100dpi resolution, 10pt document base font.
-.IP X100-12
-100dpi resolution, 12pt document base font.
-.RE
-.RE
-.
-.IP
-The default device is
-.BR @DEVICE@ .
-.
-.
-.OptDef U
-Unsafe mode.
-.
-Reverts to the (old) unsafe behaviour; see option
-.ShortOpt S .
-.
-.
-.OptDef v version
-Output version information of
-.B groff
-and of all programs that are run by it; that is, the given command line
-is parsed in the usual way, passing
-.ShortOpt v
-to all subprograms.
-.
-.
-.OptDef V
-Output the pipeline that would be run by
-.BR groff
-(as a wrapper program) on the standard output, but do not execute it.
-If given more than once,
-the commands will be both printed on the standard error and run.
-.
-.
-.OptDef X
-Use
-.B \%gxditview
-instead of using the usual postprocessor to (pre)view a document.
-.
-The printing spooler behavior as outlined with options
-.ShortOpt l
-and
-.ShortOpt L
-is carried over to
-.BR \%gxditview (@MAN1EXT@)
-by determining an argument for the
-.B \*[@-]printCommand
-option of
-.BR \%gxditview (@MAN1EXT@).
-.
-This sets the default
-.B Print
-action and the corresponding menu entry to that value.
-.
-.ShortOpt X
-only produces good results with
-.ShortOpt Tps ,
-.ShortOpt TX75 ,
-.ShortOpt TX75-12 ,
-.ShortOpt TX100 ,
-and
-.ShortOpt TX100-12 .
-.
-The default resolution for previewing
-.ShortOpt Tps
-output is 75\|dpi; this can be changed by passing the
-.ShortOpt resolution
-option to
-.BR \%gxditview ,
-for example
-.
-.IP
-.ShellCommand groff \*[@-]X \*[@-]P\*[@-]resolution \*[@-]P100 \*[@-]man foo.1
-.
-.
-.OptDef z
-Suppress output generated by
-.BR @g@troff .
-Only error messages will be printed.
-.
-.
-.OptDef Z
-Print the
-.I groff intermediate output
-to standard output; see
-.BR \%groff_out (@MAN5EXT@).
-Normally
-.BR groff
-calls automatically a postprocessor.
-.
-With this option, the output of
-.B @g@troff
-for the device, the so-called
-.I intermediate output
-is issued without postprocessing.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Transparent Options
-.\" --------------------------------------------------------------------
-.
-The following options are transparently handed over to the formatter
-program
-.B @g@troff
-that is called by groff subsequently.
-.
-These options are described in more detail in
-.BR @g@troff (@MAN1EXT@).
-.
-.OptDef a
-ascii approximation of output.
-.
-.OptDef b
-backtrace on error or warning.
-.
-.OptDef c
-disable color output.
-.
-Please consult the
-.BR \%grotty (@MAN1EXT@)
-man page for more details.
-.
-.OptDef C
-enable compatibility mode.
-.
-.OptDef d "" cs
-.OptDef+ d "" name=s
-define string.
-.
-.OptDef E
-disable
-.B @g@troff
-error messages.
-.
-.OptDef f "" fam
-set default font family.
-.
-.OptDef F "" dir
-set path for font DESC files.
-.
-.OptDef i
-process standard input after the specified input files.
-.
-.OptDef m "" name
-include macro file \f[I]name\f[]\f[B].tmac\f[] (or
-\f[B]tmac.\f[]\f[I]name\f[]); see also
-.BR \%groff_tmac (@MAN5EXT@).
-.
-.OptDef M "" dir
-path for macro files.
-.
-.OptDef n "" num
-number the first page
-.IR num .
-.
-.OptDef o "" list
-output only pages in
-.IR list .
-.
-.OptDef r "" cn
-.OptDef+ r "" name=n
-set number register.
-.
-.OptDef w "" name
-enable warning
-.IR name .
-.
-.OptDef W "" name
-disable warning
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "USING GROFF"
-.\" --------------------------------------------------------------------
-.
-The
-.I groff system
-implements the infrastructure of classical roff; see
-.BR roff (@MAN7EXT@)
-for a survey on how a roff system works in general.
-.
-Due to the front-end programs available within the groff system, using
-.I groff
-is much easier than
-.IR "classical roff" .
-.
-This section gives an overview of the parts that constitute the groff
-system.
-.
-It complements
-.BR roff (@MAN7EXT@)
-with groff-specific features.
-.
-This section can be regarded as a guide to the documentation around
-the groff system.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Paper Size
-.\" --------------------------------------------------------------------
-.
-The
-.I virtual
-paper size used by
-.B troff
-to format the input is controlled globally with the requests
-.BR .po ,
-.BR .pl ,
-and
-.BR .ll .
-See
-.BR groff_tmac (@MAN5EXT@)
-for the `papersize' macro package which provides a convenient interface.
-.
-.P
-The
-.I physical
-paper size, giving the actual dimensions of the paper sheets, is
-controlled by output devices like
-.BR grops
-with the command line options
-.B \-p
-and
-.BR \-l .
-See
-.BR groff_font (@MAN5EXT@)
-and the man pages of the output devices for more details.
-.B groff
-uses the command line option
-.B \-P
-to pass options to output devices; for example, the following selects
-A4 paper in landscape orientation for the PS device:
-.
-.RS
-.P
-groff -Tps -P-pa4 -P-l .\|.\|.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Front-ends
-.\" --------------------------------------------------------------------
-.
-The
-.B groff
-program is a wrapper around the
-.BR @g@troff (@MAN1EXT@)
-program.
-.
-It allows to specify the preprocessors by command line options and
-automatically runs the postprocessor that is appropriate for the
-selected device.
-.
-Doing so, the sometimes tedious piping mechanism of classical
-.BR roff (@MAN7EXT@)
-can be avoided.
-.
-.P
-The
-.BR grog (@MAN1EXT@)
-program can be used for guessing the correct groff command line to
-format a file.
-.
-.P
-The
-.BR \%groffer (@MAN1EXT@)
-program is an allround-viewer for groff files and man pages.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Preprocessors
-.\" --------------------------------------------------------------------
-.
-The groff preprocessors are reimplementations of the classical
-preprocessors with moderate extensions.
-.
-The preprocessors distributed with the
-.I groff
-package are
-.
-.TP
-.BR @g@eqn (@MAN1EXT@)
-for mathematical formul\(ae,
-.TP
-.BR @g@grn (@MAN1EXT@)
-for including
-.BR gremlin (1)
-pictures,
-.TP
-.BR @g@pic (@MAN1EXT@)
-for drawing diagrams,
-.TP
-.BR \%@g@refer (@MAN1EXT@)
-for bibliographic references,
-.TP
-.BR \%@g@soelim (@MAN1EXT@)
-for including macro files from standard locations,
-.
-.P
-and
-.TP
-.BR @g@tbl (@MAN1EXT@)
-for tables.
-.
-.P
-Besides these, there are some internal preprocessors that are
-automatically run with some devices.
-.
-These aren't visible to the user.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Macro Packages"
-.\" --------------------------------------------------------------------
-.
-Macro packages can be included by option
-.ShortOpt m .
-.
-The groff system implements and extends all classical macro packages
-in a compatible way and adds some packages of its own.
-.
-Actually, the following macro packages come with
-.IR groff :
-.
-.TP
-.B man
-The traditional man page format; see
-.BR \%groff_man (@MAN7EXT@).
-It can be specified on the command line as
-.ShortOpt man
-or
-.ShortOpt m
-.BR man .
-.
-.TP
-.B mandoc
-The general package for man pages; it automatically recognizes
-whether the documents uses the
-.I man
-or the
-.I mdoc
-format and branches to the corresponding macro package.
-.
-It can be specified on the command line as
-.ShortOpt mandoc
-or
-.ShortOpt m
-.BR mandoc .
-.
-.TP
-.B mdoc
-The BSD-style man page format; see
-.BR \%groff_mdoc (@MAN7EXT@).
-It can be specified on the command line as
-.ShortOpt mdoc
-or
-.ShortOpt m
-.BR mdoc .
-.
-.TP
-.B me
-The classical
-.I me
-document format; see
-.BR \%groff_me (@MAN7EXT@).
-It can be specified on the command line as
-.ShortOpt me
-or
-.ShortOpt m
-.BR me .
-.
-.TP
-.B mm
-The classical
-.I mm
-document format; see
-.BR \%groff_mm (@MAN7EXT@).
-It can be specified on the command line as
-.ShortOpt mm
-or
-.ShortOpt m
-.BR mm .
-.
-.TP
-.B ms
-The classical
-.I ms
-document format; see
-.BR \%groff_ms (@MAN7EXT@).
-It can be specified on the command line as
-.ShortOpt ms
-or
-.ShortOpt m
-.BR ms .
-.
-.TP
-.B www
-HTML-like macros for inclusion in arbitrary groff documents; see
-.BR \%groff_www (@MAN7EXT@).
-.
-.P
-Details on the naming of macro files and their placement can be found
-in
-.BR \%groff_tmac (@MAN5EXT@);
-this man page also documents some other, minor auxiliary macro packages
-not mentioned here.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Programming Language"
-.\" --------------------------------------------------------------------
-.
-General concepts common to all roff programming languages are
-described in
-.BR roff (@MAN7EXT@).
-.
-.P
-The groff extensions to the classical troff language are documented in
-.BR \%groff_diff (@MAN7EXT@).
-.
-.P
-The groff language as a whole is described in the (still incomplete)
-.IR "groff info file" ;
-a short (but complete) reference can be found in
-.BR groff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Formatters
-.\" --------------------------------------------------------------------
-.
-The central roff formatter within the groff system is
-.BR @g@troff (@MAN1EXT@).
-It provides the features of both the classical troff and nroff, as
-well as the groff extensions.
-.
-The command line option
-.ShortOpt C
-switches
-.B @g@troff
-into
-.I "compatibility mode"
-which tries to emulate classical roff as much as possible.
-.
-.P
-There is a shell script
-.BR @g@nroff (@MAN1EXT@)
-that emulates the behavior of classical nroff.
-.
-It tries to automatically select the proper output encoding, according to
-the current locale.
-.
-.P
-The formatter program generates
-.IR "intermediate output" ;
-see
-.BR \%groff_out (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Devices
-.\" --------------------------------------------------------------------
-.
-In roff, the output targets are called
-.IR devices .
-A device can be a piece of hardware, e.g. a printer, or a software
-file format.
-.
-A device is specified by the option
-.ShortOpt T .
-The groff devices are as follows.
-.
-.TP
-.B ascii
-Text output using the
-.BR ascii (7)
-character set.
-.
-.TP
-.B cp1047
-Text output using the EBCDIC code page IBM cp1047 (e.g. OS/390 Unix).
-.
-.TP
-.B dvi
-TeX DVI format.
-.
-.TP
-.B html
-HTML output.
-.
-.TP
-.B latin1
-Text output using the ISO \%Latin-1 (ISO \%8859-1) character set; see
-.BR \%iso_8859_1 (7).
-.
-.TP
-.B koi8-r
-Text output using the Russian KOI8-R character set.
-.
-.TP
-.B lbp
-Output for Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers).
-.
-.TP
-.B lj4
-HP LaserJet4-compatible (or other PCL5-compatible) printers.
-.
-.TP
-.B ps
-PostScript output; suitable for printers and previewers like
-.BR gv (1).
-.
-.TP
-.B utf8
-Text output using the Unicode (ISO 10646) character set with \%UTF-8
-encoding; see
-.BR unicode (7).
-.
-.TP
-.B X75
-75dpi X Window System output suitable for the previewers
-.BR \%xditview (1x)
-and
-.BR \%gxditview (@MAN1EXT@).
-A variant for a 12\|pt document base font is
-.BR \%X75-12 .
-.
-.TP
-.B X100
-100dpi X Window System output suitable for the previewers
-.BR \%xditview (1x)
-and
-.BR \%gxditview (@MAN1EXT@).
-A variant for a 12\|pt document base font is
-.BR \%X100-12 .
-.
-.P
-The postprocessor to be used for a device is specified by the
-.B postpro
-command in the device description file; see
-.BR \%groff_font (@MAN5EXT@).
-.
-This can be overridden with the
-.B \*[@-]X
-option.
-.
-.P
-The default device is
-.BR @DEVICE@ .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Postprocessors
-.\" --------------------------------------------------------------------
-.
-groff provides 3\~hardware postprocessors:
-.
-.TP
-.BR \%grolbp (@MAN1EXT@)
-for some Canon printers,
-.TP
-.BR \%grolj4 (@MAN1EXT@)
-for printers compatible to the HP LaserJet\~4 and PCL5,
-.TP
-.BR \%grotty (@MAN1EXT@)
-for text output using various encodings, e.g. on text-oriented
-terminals or line-printers.
-.
-.P
-Today, most printing or drawing hardware is handled by the operating
-system, by device drivers, or by software interfaces, usually accepting
-PostScript.
-.
-Consequently, there isn't an urgent need for more hardware device
-postprocessors.
-.
-.P
-The groff software devices for conversion into other document file
-formats are
-.
-.TP
-.BR \%grodvi (@MAN1EXT@)
-for the DVI format,
-.TP
-.BR \%grohtml (@MAN1EXT@)
-for HTML format,
-.TP
-.BR grops (@MAN1EXT@)
-for PostScript.
-.
-.P
-Combined with the many existing free conversion tools this should
-be sufficient to convert a troff document into virtually any existing
-data format.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Utilities
-.\" --------------------------------------------------------------------
-.
-The following utility programs around groff are available.
-.
-.TP
-.BR \%addftinfo (@MAN1EXT@)
-Add information to troff font description files for use with groff.
-.
-.TP
-.BR \%afmtodit (@MAN1EXT@)
-Create font description files for PostScript device.
-.
-.TP
-.BR \%groffer (@MAN1EXT@)
-General viewer program for groff files and man pages.
-.
-.TP
-.BR \%gxditview (@MAN1EXT@)
-The groff X viewer, the GNU version of xditview.
-.
-.TP
-.BR \%hpftodit (@MAN1EXT@)
-Create font description files for lj4 device.
-.
-.TP
-.BR \%indxbib (@MAN1EXT@)
-Make inverted index for bibliographic databases.
-.
-.TP
-.BR lkbib (@MAN1EXT@)
-Search bibliographic databases.
-.
-.TP
-.BR \%lookbib (@MAN1EXT@)
-Interactively search bibliographic databases.
-.
-.TP
-.BR \%pfbtops (@MAN1EXT@)
-Translate a PostScript font in .pfb format to ASCII.
-.
-.TP
-.BR \%tfmtodit (@MAN1EXT@)
-Create font description files for TeX DVI device.
-.
-.TP
-.BR \%xditview (1x)
-roff viewer distributed with X window.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-Normally, the path separator in the following environment variables is the
-colon; this may vary depending on the operating system.
-.
-For example, DOS and Windows use a semicolon instead.
-.
-.TP
-.EnvVar GROFF_BIN_PATH
-This search path, followed by
-.EnvVar $PATH ,
-will be used for commands that are executed by
-.BR groff .
-.
-If it is not set then the directory where the groff binaries were
-installed is prepended to
-.EnvVar PATH .
-.
-.TP
-.EnvVar GROFF_COMMAND_PREFIX
-When there is a need to run different roff implementations at the same
-time
-.I groff
-provides the facility to prepend a prefix to most of its programs that
-could provoke name clashings at run time (default is to have none).
-.
-Historically, this prefix was the character
-.BR g ,
-but it can be anything.
-.
-For example,
-.BR gtroff
-stood for
-.IR groff 's
-.BR troff ,
-.BR gtbl
-for the
-.I groff
-version of
-.BR tbl .
-.
-By setting
-.EnvVar GROFF_COMMAND_PREFIX
-to different values, the different roff installations can be
-addressed.
-.
-More exactly, if it is set to prefix
-.I xxx
-then
-.B groff
-as a wrapper program will internally call
-.IB xxx troff
-instead of
-.BR troff .
-This also applies to the preprocessors
-.BR \%eqn ,
-.BR \%grn ,
-.BR \%pic ,
-.BR \%refer ,
-.BR \%tbl ,
-.BR \%soelim ,
-and to the utilities
-.B \%@g@indxbib
-and
-.BR \%@g@lookbib .
-.
-This feature does not apply to any programs different from the ones
-above (most notably
-.B groff
-itself) since they are unique to the groff package.
-.
-.
-.TP
-.EnvVar GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.TP
-.EnvVar GROFF_TMAC_PATH
-A list of directories in which to search for macro files in addition to
-the default directories.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_tmac (@MAN5EXT@)
-for more details.
-.
-.
-.TP
-.EnvVar GROFF_TMPDIR
-The directory in which temporary files will be created.
-.
-If this is not set but the environment variable
-.EnvVar TMPDIR
-instead, temporary files will be created in the directory
-.EnvVar $TMPDIR .
-On MS-DOS and Windows\ 32 platforms, the environment variables
-.EnvVar TMP
-and
-.EnvVar TEMP
-(in that order) are searched also, after
-.EnvVar GROFF_TMPDIR
-and
-.EnvVar TMPDIR .
-.
-Otherwise, temporary files will be created in
-.BR /tmp .
-The
-.BR \%@g@refer (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-and
-.BR grops (@MAN1EXT@)
-commands use temporary files.
-.
-.
-.TP
-.EnvVar GROFF_TYPESETTER
-Preset the default device.
-.
-If this is not set the
-.B @DEVICE@
-device is used as default.
-.
-This device name is overwritten by the option
-.ShortOpt T .
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-There are some directories in which
-.I groff
-installs all of its data files.
-.
-Due to different installation habits on different operating systems,
-their locations are not absolutely fixed, but their function is
-clearly defined and coincides on all systems.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groff Macro Directory"
-.\" --------------------------------------------------------------------
-.
-This contains all information related to macro packages.
-.
-Note that more than a single directory is searched for those files
-as documented in
-.BR \%groff_tmac (@MAN5EXT@).
-.
-For the groff installation corresponding to this document, it is
-located at
-.IR @MACRODIR@ .
-.
-The following files contained in the
-.I groff macro directory
-have a special meaning:
-.
-.
-.TP
-.B troffrc
-Initialization file for troff.
-.
-This is interpreted by
-.B @g@troff
-before reading the macro sets and any input.
-.
-.
-.TP
-.B troffrc-end
-Final startup file for troff, it is parsed after all macro sets have
-been read.
-.
-.
-.TP
-.IB name .tmac
-.TP+
-.BI tmac. name
-Macro file for macro package
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groff Font Directory"
-.\" --------------------------------------------------------------------
-.
-This contains all information related to output devices.
-.
-Note that more than a single directory is searched for those files; see
-.BR @g@troff (@MAN1EXT@).
-.
-For the groff installation corresponding to this document, it is
-located at
-.IR @FONTDIR@ .
-.
-The following files contained in the
-.I groff font directory
-have a special meaning:
-.
-.
-.TP
-.BI dev name /DESC
-Device description file for device
-.IR name ,
-see
-.BR \%groff_font (@MAN5EXT@).
-.
-.
-.TP
-.BI dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SH EXAMPLES
-.\" --------------------------------------------------------------------
-.
-The following example illustrates the power of the
-.B groff
-program as a wrapper around
-.BR @g@troff .
-.
-.P
-To process a roff file using the preprocessors
-.B tbl
-and
-.B pic
-and the
-.B me
-macro set, classical troff had to be called by
-.
-.P
-.ShellCommand pic foo.me | tbl | troff \*[@-]me \*[@-]Tlatin1 | grotty
-.
-.P
-Using
-.BR groff ,
-this pipe can be shortened to the equivalent command
-.P
-.ShellCommand groff \*[@-]p \*[@-]t \*[@-]me \*[@-]T latin1 foo.me
-.
-.P
-An even easier way to call this is to use
-.BR grog (@MAN1EXT@)
-to guess the preprocessor and macro options and execute the generated
-command (by using backquotes to specify shell command substitution)
-.P
-.ShellCommand \`grog \*[@-]Tlatin1 foo.me\`
-.
-.P
-The simplest way is to view the contents in an automated way by
-calling
-.
-.P
-.ShellCommand groffer foo.me
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.P
-On EBCDIC hosts (e.g. OS/390 Unix), output devices
-.B ascii
-and
-.B latin1
-aren't available.
-.
-Similarly, output for EBCDIC code page
-.B cp1047
-is not available on ASCII based operating systems.
-.
-.P
-Report bugs to bug-groff@gnu.org.
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of groff you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AVAILABILITY
-.\" --------------------------------------------------------------------
-.
-Information on how to get groff and related information is available
-at the
-.URL http://\:www.gnu.org/\:software/\:groff "GNU website" .
-The most recent released version of groff is available for anonymous
-ftp at the
-.URL ftp://ftp.ffii.org/\:pub/\:groff/\:devel/\:groff-current.tar.gz \
- "groff development site" .
-.
-.P
-Three groff mailing lists are available:
-.TP
-.MTO bug-groff@gnu.org
-for reporting bugs,
-.
-.TP
-.MTO groff@gnu.org
-for general discussion of groff,
-.
-.TP
-.MTO groff-commit@ffii.org
-a read-only list showing logs of commitments to the CVS repository.
-.
-.P
-Details on CVS access and much more can be found in the file
-.B README
-at the top directory of the groff source package.
-.
-.P
-There is a free implementation of the
-.B grap
-preprocessor, written by
-.MTO faber@lunabase.org " Ted Faber" .
-.
-The actual version can be found at the
-.
-.URL http://\:www.lunabase.org/\:~faber/\:Vault/\:software/\:grap/ \
- "grap website" .
-This is the only grap version supported by groff.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-Copyright \(co 1989, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is based on the original groff man page written by
-.MTO jjc@jclark.com "James Clark" .
-.
-It was rewritten, enhanced, and put under the FDL license by
-\m[blue]Bernd Warken\m[].
-.
-It is maintained by
-.MTO wl@gnu.org "Werner Lemberg" .
-.
-.P
-.I groff
-is a GNU free software project.
-.
-All parts of the
-.I groff package
-are protected by GNU copyleft licenses.
-.
-The software files are distributed under the terms of the GNU General
-Public License (GPL), while the documentation files mostly use the GNU
-Free Documentation License (FDL).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-The
-.IR "groff info file"
-contains all information on the groff system within a single document.
-.
-Beneath the detailed documentation of all aspects, it provides
-examples and background information.
-.
-See
-.BR info (1)
-on how to read it.
-.
-.P
-Due to its complex structure, the groff system has many man pages.
-.
-They can be read with
-.BR man (1)
-or
-.BR \%groffer (@MAN1EXT@).
-.
-.TP
-Introduction, history and further readings:
-.BR roff (@MAN7EXT@).
-.
-.TP
-Viewer for groff files:
-.BR \%groffer (@MAN1EXT@),
-.BR \%gxditview (@MAN1EXT@),
-.BR \%xditview (1x).
-.
-.TP
-Wrapper programs for formatters:
-.BR \%groff (@MAN1EXT@),
-.BR \%grog (@MAN1EXT@).
-.
-.TP
-Roff preprocessors:
-.BR \%@g@eqn (@MAN1EXT@),
-.BR \%@g@grn (@MAN1EXT@),
-.BR \%@g@pic (@MAN1EXT@),
-.BR \%@g@refer (@MAN1EXT@),
-.BR \%@g@soelim (@MAN1EXT@),
-.BR \%@g@tbl (@MAN1EXT@),
-.BR grap (1).
-.
-.TP
-Roff language with the groff extensions:
-.BR \%groff (@MAN7EXT@),
-.BR \%groff_char (@MAN7EXT@),
-.BR \%groff_diff (@MAN7EXT@),
-.BR \%groff_font (@MAN5EXT@).
-.
-.TP
-Roff formatter programs:
-.BR \%@g@nroff (@MAN1EXT@),
-.BR \%@g@troff (@MAN1EXT@),
-.BR ditroff (@MAN7EXT@).
-.
-.TP
-The
-.I intermediate output
-language:
-.BR \%groff_out (@MAN7EXT@).
-.
-.TP
-Postprocessors for the output devices:
-.BR \%grodvi (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-.BR \%grolbp (@MAN1EXT@),
-.BR \%grolj4 (@MAN1EXT@),
-.BR \%lj4_font (@MAN5EXT@),
-.BR \%grops (@MAN1EXT@),
-.BR \%grotty (@MAN1EXT@).
-.
-.TP
-Groff macro packages and macro-specific utilities:
-.BR \%groff_tmac (@MAN5EXT@),
-.BR \%groff_man (@MAN7EXT@),
-.BR \%groff_mdoc (@MAN7EXT@),
-.BR \%groff_me (@MAN7EXT@),
-.BR \%groff_mm (@MAN7EXT@),
-.BR \%groff_mmse (@MAN7EXT@),
-.BR \%groff_mom (@MAN7EXT@),
-.BR \%groff_ms (@MAN7EXT@),
-.BR \%groff_www (@MAN7EXT@),
-.BR \%groff_trace (@MAN7EXT@),
-.BR \%mmroff (@MAN7EXT@).
-.
-.TP
-The following utilities are available:
-.BR \%addftinfo (@MAN1EXT@),
-.BR \%afmtodit (@MAN1EXT@),
-.BR \%eqn2graph (@MAN1EXT@),
-.BR \%grap2graph (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@),
-.BR \%gxditview (@MAN1EXT@),
-.BR \%hpftodit (@MAN1EXT@),
-.BR \%@g@indxbib (@MAN1EXT@),
-.BR \%@g@lookbib (@MAN1EXT@),
-.BR \%pfbtops (@MAN1EXT@),
-.BR \%pic2graph (@MAN1EXT@),
-.BR \%tfmtodit (@MAN1EXT@).
-.
-.cp \n[groff_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/roff/groff/pipeline.c b/contrib/groff/src/roff/groff/pipeline.c
deleted file mode 100644
index d067ae93016b..000000000000
--- a/contrib/groff/src/roff/groff/pipeline.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_STRERROR
-#include <string.h>
-#else
-extern char *strerror();
-#endif
-
-#ifdef _POSIX_VERSION
-
-#include <sys/wait.h>
-#define PID_T pid_t
-
-#else /* not _POSIX_VERSION */
-
-/* traditional Unix */
-
-#define WIFEXITED(s) (((s) & 0377) == 0)
-#define WIFSTOPPED(s) (((s) & 0377) == 0177)
-#define WIFSIGNALED(s) (((s) & 0377) != 0 && (((s) & 0377) != 0177))
-#define WEXITSTATUS(s) (((s) >> 8) & 0377)
-#define WTERMSIG(s) ((s) & 0177)
-#define WSTOPSIG(s) (((s) >> 8) & 0377)
-
-#ifndef WCOREFLAG
-#define WCOREFLAG 0200
-#endif
-
-#define PID_T int
-
-#endif /* not _POSIX_VERSION */
-
-/* SVR4 uses WCOREFLG; Net 2 uses WCOREFLAG. */
-#ifndef WCOREFLAG
-#ifdef WCOREFLG
-#define WCOREFLAG WCOREFLG
-#endif /* WCOREFLG */
-#endif /* not WCOREFLAG */
-
-#ifndef WCOREDUMP
-#ifdef WCOREFLAG
-#define WCOREDUMP(s) ((s) & WCOREFLAG)
-#else /* not WCOREFLAG */
-#define WCOREDUMP(s) (0)
-#endif /* WCOREFLAG */
-#endif /* not WCOREDUMP */
-
-#include "pipeline.h"
-
-#define error c_error
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void error(const char *, const char *, const char *, const char *);
-extern void c_fatal(const char *, const char *, const char *, const char *);
-extern const char *i_to_a(int); /* from libgroff */
-
-#ifdef __cplusplus
-}
-#endif
-
-static void sys_fatal(const char *);
-static const char *xstrsignal(int);
-
-
-#if defined(__MSDOS__) \
- || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__)) \
- || defined(__EMX__)
-
-#include <process.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "nonposix.h"
-
-static const char *sh = "sh";
-static const char *cmd = "cmd";
-static const char *command = "command";
-
-extern int strcasecmp(const char *, const char *);
-
-char *sbasename(const char *path)
-{
- char *base;
- const char *p1, *p2;
-
- p1 = path;
- if ((p2 = strrchr(p1, '\\'))
- || (p2 = strrchr(p1, '/'))
- || (p2 = strrchr(p1, ':')))
- p1 = p2 + 1;
- if ((p2 = strrchr(p1, '.'))
- && ((strcasecmp(p2, ".exe") == 0)
- || (strcasecmp(p2, ".com") == 0)))
- ;
- else
- p2 = p1 + strlen(p1);
-
- base = malloc((size_t)(p2 - p1));
- strncpy(base, p1, p2 - p1);
- *(base + (p2 - p1)) = '\0';
-
- return(base);
-}
-
-/* Get the name of the system shell */
-char *system_shell_name(void)
-{
- const char *shell_name;
-
- /*
- Use a Unixy shell if it's installed. Use SHELL if set; otherwise,
- let spawnlp try to find sh; if that fails, use COMSPEC if set; if
- not, try cmd.exe; if that fails, default to command.com.
- */
-
- if ((shell_name = getenv("SHELL")) != NULL)
- ;
- else if (spawnlp(_P_WAIT, sh, sh, "-c", ":", NULL) == 0)
- shell_name = sh;
- else if ((shell_name = getenv("COMSPEC")) != NULL)
- ;
- else if (spawnlp(_P_WAIT, cmd, cmd, "/c", ";", NULL) == 0)
- shell_name = cmd;
- else
- shell_name = command;
-
- return sbasename(shell_name);
-}
-
-const char *system_shell_dash_c(void)
-{
- char *shell_name;
- const char *dash_c;
-
- shell_name = system_shell_name();
-
- /* Assume that if the shell name ends in "sh", it's Unixy */
- if (strcasecmp(shell_name + strlen(shell_name) - strlen("sh"), "sh") == 0)
- dash_c = "-c";
- else
- dash_c = "/c";
-
- free(shell_name);
- return dash_c;
-}
-
-int is_system_shell(const char *prog)
-{
- int result;
- char *this_prog, *system_shell;
-
- if (!prog) /* paranoia */
- return 0;
-
- this_prog = sbasename(prog);
- system_shell = system_shell_name();
-
- result = strcasecmp(this_prog, system_shell) == 0;
-
- free(this_prog);
- free(system_shell);
-
- return result;
-}
-
-#ifdef _WIN32
-
-/*
- Windows 32 doesn't have fork(), so we need to start asynchronous child
- processes with spawn() rather than exec(). If there is more than one
- command, i.e., a pipeline, the parent must set up each child's I/O
- redirection prior to the spawn. The original stdout must be restored
- before spawning the last process in the pipeline, and the original
- stdin must be restored in the parent after spawning the last process
- and before waiting for any of the children.
-*/
-
-int run_pipeline(int ncommands, char ***commands, int no_pipe)
-{
- int i;
- int last_input = 0; /* pacify some compilers */
- int save_stdin = 0;
- int save_stdout = 0;
- int ret = 0;
- char err_str[BUFSIZ];
- PID_T pids[MAX_COMMANDS];
-
- for (i = 0; i < ncommands; i++) {
- int pdes[2];
- PID_T pid;
-
- /* If no_pipe is set, just run the commands in sequence
- to show the version numbers */
- if (ncommands > 1 && !no_pipe) {
- /* last command doesn't need a new pipe */
- if (i < ncommands - 1) {
- if (pipe(pdes) < 0) {
- sprintf(err_str, "%s: pipe", commands[i][0]);
- sys_fatal(err_str);
- }
- }
- /* 1st command; writer */
- if (i == 0) {
- /* save stdin */
- if ((save_stdin = dup(STDIN_FILENO)) < 0)
- sys_fatal("dup stdin");
- /* save stdout */
- if ((save_stdout = dup(STDOUT_FILENO)) < 0)
- sys_fatal("dup stdout");
-
- /* connect stdout to write end of pipe */
- if (dup2(pdes[1], STDOUT_FILENO) < 0) {
- sprintf(err_str, "%s: dup2(stdout)", commands[i][0]);
- sys_fatal(err_str);
- }
- if (close(pdes[1]) < 0) {
- sprintf(err_str, "%s: close(pipe[WRITE])", commands[i][0]);
- sys_fatal(err_str);
- }
- /*
- Save the read end of the pipe so that it can be connected to
- stdin of the next program in the pipeline during the next
- pass through the loop.
- */
- last_input = pdes[0];
- }
- /* reader and writer */
- else if (i < ncommands - 1) {
- /* connect stdin to read end of last pipe */
- if (dup2(last_input, STDIN_FILENO) < 0) {
- sprintf(err_str, " %s: dup2(stdin)", commands[i][0]);
- sys_fatal(err_str);
- }
- if (close(last_input) < 0) {
- sprintf(err_str, "%s: close(last_input)", commands[i][0]);
- sys_fatal(err_str);
- }
- /* connect stdout to write end of new pipe */
- if (dup2(pdes[1], STDOUT_FILENO) < 0) {
- sprintf(err_str, "%s: dup2(stdout)", commands[i][0]);
- sys_fatal(err_str);
- }
- if (close(pdes[1]) < 0) {
- sprintf(err_str, "%s: close(pipe[WRITE])", commands[i][0]);
- sys_fatal(err_str);
- }
- last_input = pdes[0];
- }
- /* last command; reader */
- else {
- /* connect stdin to read end of last pipe */
- if (dup2(last_input, STDIN_FILENO) < 0) {
- sprintf(err_str, "%s: dup2(stdin)", commands[i][0]);
- sys_fatal(err_str);
- }
- if (close(last_input) < 0) {
- sprintf(err_str, "%s: close(last_input)", commands[i][0]);
- sys_fatal(err_str);
- }
- /* restore original stdout */
- if (dup2(save_stdout, STDOUT_FILENO) < 0) {
- sprintf(err_str, "%s: dup2(save_stdout))", commands[i][0]);
- sys_fatal(err_str);
- }
- /* close stdout copy */
- if (close(save_stdout) < 0) {
- sprintf(err_str, "%s: close(save_stdout)", commands[i][0]);
- sys_fatal(err_str);
- }
- }
- }
- if ((pid = spawnvp(_P_NOWAIT, commands[i][0], commands[i])) < 0) {
- error("couldn't exec %1: %2",
- commands[i][0], strerror(errno), (char *)0);
- fflush(stderr); /* just in case error() doesn't */
- _exit(EXEC_FAILED_EXIT_STATUS);
- }
- pids[i] = pid;
- }
-
- if (ncommands > 1 && !no_pipe) {
- /* restore original stdin if it was redirected */
- if (dup2(save_stdin, STDIN_FILENO) < 0) {
- sprintf(err_str, "dup2(save_stdin))");
- sys_fatal(err_str);
- }
- /* close stdin copy */
- if (close(save_stdin) < 0) {
- sprintf(err_str, "close(save_stdin)");
- sys_fatal(err_str);
- }
- }
-
- for (i = 0; i < ncommands; i++) {
- int status;
- PID_T pid;
-
- pid = pids[i];
- if ((pid = WAIT(&status, pid, _WAIT_CHILD)) < 0) {
- sprintf(err_str, "%s: wait", commands[i][0]);
- sys_fatal(err_str);
- }
- else if (status != 0)
- ret |= 1;
- }
- return ret;
-}
-
-#else /* not _WIN32 */
-
-/* MSDOS doesn't have `fork', so we need to simulate the pipe by running
- the programs in sequence with standard streams redirected to and
- from temporary files.
-*/
-
-
-/* A signal handler that just records that a signal has happened. */
-static int child_interrupted;
-
-static RETSIGTYPE signal_catcher(int signo)
-{
- child_interrupted++;
-}
-
-int run_pipeline(int ncommands, char ***commands, int no_pipe)
-{
- int save_stdin = dup(0);
- int save_stdout = dup(1);
- char *tmpfiles[2];
- int infile = 0;
- int outfile = 1;
- int i, f, ret = 0;
-
- /* Choose names for a pair of temporary files to implement the pipeline.
- Microsoft's `tempnam' uses the directory specified by `getenv("TMP")'
- if it exists; in case it doesn't, try the GROFF alternatives, or
- `getenv("TEMP")' as last resort -- at least one of these had better
- be set, since Microsoft's default has a high probability of failure. */
- char *tmpdir;
- if ((tmpdir = getenv("GROFF_TMPDIR")) == NULL
- && (tmpdir = getenv("TMPDIR")) == NULL)
- tmpdir = getenv("TEMP");
-
- /* Don't use `tmpnam' here: Microsoft's implementation yields unusable
- file names if current directory is on network share with read-only
- root. */
- tmpfiles[0] = tempnam(tmpdir, NULL);
- tmpfiles[1] = tempnam(tmpdir, NULL);
-
- for (i = 0; i < ncommands; i++) {
- int exit_status;
- RETSIGTYPE (*prev_handler)(int);
-
- if (i && !no_pipe) {
- /* redirect stdin from temp file */
- f = open(tmpfiles[infile], O_RDONLY|O_BINARY, 0666);
- if (f < 0)
- sys_fatal("open stdin");
- if (dup2(f, 0) < 0)
- sys_fatal("dup2 stdin");
- if (close(f) < 0)
- sys_fatal("close stdin");
- }
- if ((i < ncommands - 1) && !no_pipe) {
- /* redirect stdout to temp file */
- f = open(tmpfiles[outfile], O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
- if (f < 0)
- sys_fatal("open stdout");
- if (dup2(f, 1) < 0)
- sys_fatal("dup2 stdout");
- if (close(f) < 0)
- sys_fatal("close stdout");
- }
- else if (dup2(save_stdout, 1) < 0)
- sys_fatal("restore stdout");
-
- /* run the program */
- child_interrupted = 0;
- prev_handler = signal(SIGINT, signal_catcher);
- exit_status = spawnvp(P_WAIT, commands[i][0], commands[i]);
- signal(SIGINT, prev_handler);
- if (child_interrupted) {
- error("%1: Interrupted", commands[i][0], (char *)0, (char *)0);
- ret |= 2;
- }
- else if (exit_status < 0) {
- error("couldn't exec %1: %2",
- commands[i][0], strerror(errno), (char *)0);
- fflush(stderr); /* just in case error() doesn't */
- ret |= 4;
- }
- if (exit_status != 0)
- ret |= 1;
- /* There's no sense to continue with the pipe if one of the
- programs has ended abnormally, is there? */
- if (ret != 0)
- break;
- /* swap temp files: make output of this program be input for the next */
- infile = 1 - infile;
- outfile = 1 - outfile;
- }
- if (dup2(save_stdin, 0) < 0)
- sys_fatal("restore stdin");
- unlink(tmpfiles[0]);
- unlink(tmpfiles[1]);
- return ret;
-}
-
-#endif /* not _WIN32 */
-
-#else /* not __MSDOS__, not _WIN32 */
-
-int run_pipeline(int ncommands, char ***commands, int no_pipe)
-{
- int i;
- int last_input = 0;
- PID_T pids[MAX_COMMANDS];
- int ret = 0;
- int proc_count = ncommands;
-
- for (i = 0; i < ncommands; i++) {
- int pdes[2];
- PID_T pid;
-
- if ((i != ncommands - 1) && !no_pipe) {
- if (pipe(pdes) < 0)
- sys_fatal("pipe");
- }
- pid = fork();
- if (pid < 0)
- sys_fatal("fork");
- if (pid == 0) {
- /* child */
- if (last_input != 0) {
- if (close(0) < 0)
- sys_fatal("close");
- if (dup(last_input) < 0)
- sys_fatal("dup");
- if (close(last_input) < 0)
- sys_fatal("close");
- }
- if ((i != ncommands - 1) && !no_pipe) {
- if (close(1) < 0)
- sys_fatal("close");
- if (dup(pdes[1]) < 0)
- sys_fatal("dup");
- if (close(pdes[1]) < 0)
- sys_fatal("close");
- if (close(pdes[0]))
- sys_fatal("close");
- }
- execvp(commands[i][0], commands[i]);
- error("couldn't exec %1: %2",
- commands[i][0], strerror(errno), (char *)0);
- fflush(stderr); /* just in case error() doesn't */
- _exit(EXEC_FAILED_EXIT_STATUS);
- }
- /* in the parent */
- if (last_input != 0) {
- if (close(last_input) < 0)
- sys_fatal("close");
- }
- if ((i != ncommands - 1) && !no_pipe) {
- if (close(pdes[1]) < 0)
- sys_fatal("close");
- last_input = pdes[0];
- }
- pids[i] = pid;
- }
- while (proc_count > 0) {
- int status;
- PID_T pid = wait(&status);
-
- if (pid < 0)
- sys_fatal("wait");
- for (i = 0; i < ncommands; i++)
- if (pids[i] == pid) {
- pids[i] = -1;
- --proc_count;
- if (WIFSIGNALED(status)) {
- int sig = WTERMSIG(status);
-#ifdef SIGPIPE
- if (sig == SIGPIPE) {
- if (i == ncommands - 1) {
- /* This works around a problem that occurred when using the
- rerasterize action in gxditview. What seemed to be
- happening (on SunOS 4.1.1) was that pclose() closed the
- pipe and waited for groff, gtroff got a SIGPIPE, but
- gpic blocked writing to gtroff, and so groff blocked
- waiting for gpic and gxditview blocked waiting for
- groff. I don't understand why gpic wasn't getting a
- SIGPIPE. */
- int j;
-
- for (j = 0; j < ncommands; j++)
- if (pids[j] > 0)
- (void)kill(pids[j], SIGPIPE);
- }
- }
- else
-#endif /* SIGPIPE */
- {
- error("%1: %2%3",
- commands[i][0],
- xstrsignal(sig),
- WCOREDUMP(status) ? " (core dumped)" : "");
- ret |= 2;
- }
- }
- else if (WIFEXITED(status)) {
- int exit_status = WEXITSTATUS(status);
-
- if (exit_status == EXEC_FAILED_EXIT_STATUS)
- ret |= 4;
- else if (exit_status != 0)
- ret |= 1;
- }
- else
- error("unexpected status %1", i_to_a(status), (char *)0, (char *)0);
- break;
- }
- }
- return ret;
-}
-
-#endif /* not __MSDOS__, not _WIN32 */
-
-static void sys_fatal(const char *s)
-{
- c_fatal("%1: %2", s, strerror(errno), (char *)0);
-}
-
-static const char *xstrsignal(int n)
-{
- static char buf[sizeof("Signal ") + 1 + sizeof(int) * 3];
-
-#ifdef NSIG
-#if HAVE_DECL_SYS_SIGLIST
- if (n >= 0 && n < NSIG && sys_siglist[n] != 0)
- return sys_siglist[n];
-#endif /* HAVE_DECL_SYS_SIGLIST */
-#endif /* NSIG */
- sprintf(buf, "Signal %d", n);
- return buf;
-}
diff --git a/contrib/groff/src/roff/groff/pipeline.h b/contrib/groff/src/roff/groff/pipeline.h
deleted file mode 100644
index 77bb11a05305..000000000000
--- a/contrib/groff/src/roff/groff/pipeline.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef __cplusplus
-extern "C" {
- int run_pipeline(int, char ***, int);
-}
-#endif
-
-/* run_pipeline can handle at most this many commands */
-#define MAX_COMMANDS 12
-
-/* Children exit with this status if execvp fails. */
-#define EXEC_FAILED_EXIT_STATUS 0xff
diff --git a/contrib/groff/src/roff/grog/Makefile.sub b/contrib/groff/src/roff/grog/Makefile.sub
deleted file mode 100644
index d199ac956849..000000000000
--- a/contrib/groff/src/roff/grog/Makefile.sub
+++ /dev/null
@@ -1,32 +0,0 @@
-MAN1=grog.n
-CLEANADD=grog
-
-all: grog
-
-grog: grog.sh
- rm -f $@
- sed -e "s|@g@|$(g)|g" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grog.sh >$@
- chmod +x $@
-
-grog.old: grog.pl grog.sh
- if test -n "$(PERLPATH)" && test -f "$(PERLPATH)"; then \
- rm -f $@; \
- sed -e "s|/usr/bin/perl|$(PERLPATH)|" \
- -e "s|@VERSION@|$(version)$(revision)|" $(srcdir)/grog.pl >$@; \
- else \
- rm -f $@; \
- sed -e "s|@g@|$(g)|g" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grog.sh >$@; \
- fi
- chmod +x $@
-
-install_data: grog
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/grog
- $(INSTALL_SCRIPT) grog $(bindir)/grog
-
-uninstall_sub:
- -rm -f $(bindir)/grog
diff --git a/contrib/groff/src/roff/grog/grog.man b/contrib/groff/src/roff/grog/grog.man
deleted file mode 100644
index 44282337bd40..000000000000
--- a/contrib/groff/src/roff/grog/grog.man
+++ /dev/null
@@ -1,91 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.TH GROG @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grog \- guess options for groff command
-.SH SYNOPSIS
-.B grog
-[
-.BI \- option
-\|.\|.\|.\&
-]
-[
-.IR files\ \|.\|.\|.\&
-]
-.SH DESCRIPTION
-.B grog
-reads
-.I files
-and guesses which of the
-.BR groff (@MAN1EXT@)
-options
-.BR \-e ,
-.BR \-man ,
-.BR \-me ,
-.BR \-mm ,
-.BR \-mom ,
-.BR \-ms ,
-.BR \-mdoc,
-.BR \-mdoc-old,
-.BR \-p ,
-.BR \-R ,
-.BR \-g ,
-.BR \-G ,
-.BR \-s ,
-and
-.BR \-t
-are required for printing
-.IR files ,
-and prints the groff command including those options on the standard output.
-A filename of
-.B \-
-is taken to refer to the standard input.
-If no files are specified the standard input will be read.
-Any specified options will be included in the printed command.
-No space is allowed between options and their arguments.
-The only options recognized are
-.B \-C
-(which is also passed on) to enable compatibility mode, and
-.B \-v
-to print the version number.
-.LP
-For example,
-.IP
-.B \`grog \-Tdvi paper.ms\`
-.LP
-will guess the appropriate command to print
-.B paper.ms
-and then run it after adding the
-.B \-Tdvi
-option.
-.SH "SEE ALSO"
-.BR doctype (1),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.BR @g@grn (@MAN1EXT@),
-.BR grap (1),
-.BR @g@soelim (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/roff/grog/grog.pl b/contrib/groff/src/roff/grog/grog.pl
deleted file mode 100644
index b802fd56f2cc..000000000000
--- a/contrib/groff/src/roff/grog/grog.pl
+++ /dev/null
@@ -1,222 +0,0 @@
-#! /usr/bin/perl
-# grog -- guess options for groff command
-# Inspired by doctype script in Kernighan & Pike, Unix Programming
-# Environment, pp 306-8.
-
-$prog = $0;
-$prog =~ s@.*/@@;
-
-$sp = "[\\s\\n]";
-
-push(@command, "groff");
-
-while ($ARGV[0] =~ /^-./) {
- $arg = shift(@ARGV);
- $sp = "" if $arg eq "-C";
- &usage(0) if $arg eq "-v" || $arg eq "--version";
- &help() if $arg eq "--help";
- last if $arg eq "--";
- push(@command, $arg);
-}
-
-@ARGV = ('-') unless @ARGV;
-foreach $arg (@ARGV) {
- &process($arg, 0);
-}
-
-sub process {
- local($filename, $level) = @_;
- local(*FILE);
-
- if (!open(FILE, $filename eq "-" ? $filename : "< $filename")) {
- print STDERR "$prog: can't open \`$filename': $!\n";
- exit 1 unless $level;
- return;
- }
- while (<FILE>) {
- if (/^\.TS$sp/) {
- $_ = <FILE>;
- if (!/^\./) {
- $tbl++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.EQ$sp/) {
- $_ = <FILE>;
- if (!/^\./ || /^\.[0-9]/) {
- $eqn++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.GS$sp/) {
- $_ = <FILE>;
- if (!/^\./) {
- $grn++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.G1$sp/) {
- $_ = <FILE>;
- if (!/^\./) {
- $grap++;
- $pic++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.PS$sp([ 0-9.<].*)?$/) {
- if (/^\.PS\s*<\s*(\S+)/) {
- $pic++;
- $soelim++ if $level;
- &process($1, $level);
- }
- else {
- $_ = <FILE>;
- if (!/^\./ || /^\.ps/) {
- $pic++;
- $soelim++ if $level;
- }
- }
- }
- elsif (/^\.R1$sp/) {
- $refer++;
- $soelim++ if $level;
- }
- elsif (/^\.\[/) {
- $refer_open++;
- $soelim++ if $level;
- }
- elsif (/^\.\]/) {
- $refer_close++;
- $soelim++ if $level;
- }
- elsif (/^\.[PLI]P$sp/) {
- $PP++;
- }
- elsif (/^\.P$/) {
- $P++;
- }
- elsif (/^\.(PH|SA)$sp/) {
- $mm++;
- }
- elsif (/^\.TH$sp/) {
- $TH++;
- }
- elsif (/^\.SH$sp/) {
- $SH++;
- }
- elsif (/^\.([pnil]p|sh)$sp/) {
- $me++;
- }
- elsif (/^\.Dd$sp/) {
- $mdoc++;
- }
- elsif (/^\.(Tp|Dp|De|Cx|Cl)$sp/) {
- $mdoc_old = 1;
- }
- # In the old version of -mdoc `Oo' is a toggle, in the new it's
- # closed by `Oc'.
- elsif (/^\.Oo$sp/) {
- $Oo++;
- s/^\.Oo/\. /;
- redo;
- }
- # The test for `Oo' and `Oc' not starting a line (as allowed by the
- # new implementation of -mdoc) is not complete; it assumes that
- # macro arguments are well behaved, i.e., "" is used within "..." to
- # indicate a doublequote as a string element, and weird features
- # like `.foo a"b' are not used.
- elsif (/^\..* Oo( |$)/) {
- s/\\\".*//;
- s/\"[^\"]*\"//g;
- s/\".*//;
- if (s/ Oo( |$)/ /) {
- $Oo++;
- }
- redo;
- }
- elsif (/^\.Oc$sp/) {
- $Oo--;
- s/^\.Oc/\. /;
- redo;
- }
- elsif (/^\..* Oc( |$)/) {
- s/\\\".*//;
- s/\"[^\"]*\"//g;
- s/\".*//;
- if (s/ Oc( |$)/ /) {
- $Oo--;
- }
- redo;
- }
- elsif (/^\.(PRINTSTYLE|START)$sp/) {
- $mom++;
- }
- if (/^\.so$sp/) {
- chop;
- s/^.so *//;
- s/\\\".*//;
- s/ .*$//;
- &process($_, $level + 1) unless /\\/ || $_ eq "";
- }
- }
- close(FILE);
-}
-
-sub usage {
- local($exit_status) = $_;
- print "GNU grog (groff) version @VERSION@\n";
- exit $exit_status;
-}
-
-sub help {
- print "usage: grog [ option ...] [files...]\n";
- exit 0;
-}
-
-$refer ||= $refer_open && $refer_close;
-
-if ($pic || $tbl || $eqn || $grn || $grap || $refer) {
- $s = "-";
- $s .= "s" if $soelim;
- $s .= "R" if $refer;
- # grap must be run before pic
- $s .= "G" if $grap;
- $s .= "p" if $pic;
- $s .= "g" if $grn;
- $s .= "t" if $tbl;
- $s .= "e" if $eqn;
- push(@command, $s);
-}
-
-if ($me > 0) {
- push(@command, "-me");
-}
-elsif ($SH > 0 && $TH > 0) {
- push(@command, "-man");
-}
-else ($mom > 0) {
- push(@command, "-mom");
-}
-elsif ($PP > 0) {
- push(@command, "-ms");
-}
-elsif ($P > 0 || $mm > 0) {
- push(@command, "-mm");
-}
-elsif ($mdoc > 0) {
- push(@command, ($mdoc_old || $Oo > 0) ? "-mdoc-old" : "-mdoc");
-}
-
-push(@command, "--") if @ARGV && $ARGV[0] =~ /^-./;
-
-push(@command, @ARGV);
-
-# We could implement an option to execute the command here.
-
-foreach (@command) {
- next unless /[\$\\\"\';&()|<> \t\n]/;
- s/\'/\'\\\'\'/;
- $_ = "'" . $_ . "'";
-}
-
-print join(' ', @command), "\n";
diff --git a/contrib/groff/src/roff/grog/grog.sh b/contrib/groff/src/roff/grog/grog.sh
deleted file mode 100644
index 1a937cb1b374..000000000000
--- a/contrib/groff/src/roff/grog/grog.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /bin/sh
-# grog -- guess options for groff command
-# Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8.
-
-soelim=@g@soelim
-
-opts=
-sp="([ ]|$)"
-
-for arg
-do
- case "$arg" in
- --)
- shift; break;;
- -)
- break;;
- -C)
- sp=; opts="$opts -C"; shift; break;;
- -v | --version)
- echo "GNU grog (groff) version @VERSION@"
- exit 0;;
- --help)
- echo "usage: grog [ option ...] [files...]"
- exit 0;;
- -*)
- opts="$opts $arg"; shift;;
- *)
- break;;
- esac
-done
-
-egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" $* \
-| sed -e '/^\.so/s/^.*$/.SO_START\
-&\
-.SO_END/' \
-| $soelim \
-| egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \
-| awk '
-/^\.SO_START$/ { so = 1 }
-/^\.SO_END$/ { so = 0 }
-/^\.TS/ { tbl++; if (so > 0) soelim++ }
-/^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ }
-/^\.EQ/ { eqn++; if (so > 0) soelim++ }
-/^\.R1/ { refer++; if (so > 0) soelim++ }
-/^\.\[/ {refer_start++; if (so > 0) soelim++ }
-/^\.\]/ {refer_end++; if (so > 0) soelim++ }
-/^\.GS/ { grn++; if (so > 0) soelim++ }
-/^\.G1/ { grap++; pic++; if (so > 0) soelim++ }
-/^\.TH/ { TH++ }
-/^\.[PLI]P/ { PP++ }
-/^\.P$/ { P++ }
-/^\.SH/ { SH++ }
-/^\.(PH|SA)/ { mm++ }
-/^\.([pnil]p|sh)/ { me++ }
-/^\.Dd/ { mdoc++ }
-/^\.(Tp|Dp|De|Cx|Cl)/ { mdoc_old++ }
-/^\.(O[oc]|.* O[oc]( |$))/ {
- sub(/\\\".*/, "")
- gsub(/\"[^\"]*\"/, "")
- sub(/\".*/, "")
- sub(/^\.Oo/, " Oo ")
- sub(/^\.Oc/, " Oc ")
- sub(/ Oo$/, " Oo ")
- sub(/ Oc$/, " Oc ")
- while (/ Oo /) {
- sub(/ Oo /, " ")
- Oo++
- }
- while (/ Oc /) {
- sub(/ Oc /, " ")
- Oo--
- }
-}
-/^\.(PRINTSTYLE|START)/ { mom++ }
-
-END {
- if (files ~ /^-/)
- files = "-- " files
- printf "groff"
- refer = refer || (refer_start && refer_end)
- if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) {
- printf " -"
- if (soelim > 0) printf "s"
- if (refer > 0) printf "R"
- if (grn > 0) printf "g"
- if (grap > 0) printf "G"
- if (pic > 0) printf "p"
- if (tbl > 0) printf "t"
- if (eqn > 0) printf "e"
- }
- if (me > 0)
- printf " -me"
- else if (SH > 0 && TH > 0)
- printf " -man"
- else if (mom > 0)
- printf " -mom"
- else if (PP > 0)
- printf " -ms"
- else if (P > 0 || mm > 0)
- printf " -mm"
- else if (mdoc > 0) {
- if (mdoc_old > 0 || Oo > 0)
- printf " -mdoc-old"
- else
- printf " -mdoc"
- }
- if (opts != "")
- printf "%s", opts
- if (files != "")
- printf " %s", files
- print ""
-}' "opts=$opts" "files=$*" -
diff --git a/contrib/groff/src/roff/nroff/Makefile.sub b/contrib/groff/src/roff/nroff/Makefile.sub
deleted file mode 100644
index ffd2ccd8926c..000000000000
--- a/contrib/groff/src/roff/nroff/Makefile.sub
+++ /dev/null
@@ -1,20 +0,0 @@
-MAN1=nroff.n
-NAMEPREFIX=$(g)
-CLEANADD=nroff
-
-all: nroff
-
-nroff: nroff.sh $(SH_DEPS_SED_SCRIPT)
- rm -f $@
- sed -f $(SH_DEPS_SED_SCRIPT) \
- -e $(SH_SCRIPT_SED_CMD) \
- -e "s|@VERSION@|$(version)$(revision)|" $(srcdir)/nroff.sh >$@
- chmod +x $@
-
-install_data: nroff
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/$(NAMEPREFIX)nroff
- $(INSTALL_SCRIPT) nroff $(bindir)/$(NAMEPREFIX)nroff
-
-uninstall_sub:
- -rm -f $(bindir)/$(NAMEPREFIX)nroff
diff --git a/contrib/groff/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man
deleted file mode 100644
index f1692295f596..000000000000
--- a/contrib/groff/src/roff/nroff/nroff.man
+++ /dev/null
@@ -1,153 +0,0 @@
-.ig
-Copyright (C) 1989-2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-
- $FreeBSD$
-
-..
-.
-.TH @G@NROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.SH NAME
-@g@nroff \- emulate nroff command with groff
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@nroff 'u
-.ti \niu
-.B @g@nroff
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-CchipStUv
-.OP \-d cs
-.OP \-M dir
-.OP \-m name
-.OP \-n num
-.OP \-o list
-.OP \-r cn
-.OP \-T name
-.RI "[\ " "file" "\ .\|.\|.\ ]"
-.br
-.ad \na
-.
-.SH DESCRIPTION
-The
-.B @g@nroff
-script emulates the
-.B nroff
-command using groff.
-Only
-.BR ascii ,
-.BR latin1 ,
-.BR koi8-r ,
-.BR utf8 ,
-and
-.B cp1047
-are valid arguments for the
-.B -T
-option, selecting the output encoding emitted by
-.BR grotty ,
-groff's TTY output device.
-If an invalid or no
-.BR \-T
-option is given,
-.B @g@nroff
-checks the current locale to select a default output device.
-It first tries the
-.B locale
-program, then the environment variables
-.BR LC_ALL ,
-.BR LC_CTYPE ,
-and
-.BR LANG ,
-and finally the
-.B LESSCHARSET
-environment variable.
-.PP
-The
-.B \-h
-and
-.B \-c
-options
-are equivalent to
-.BR grotty 's
-options
-.B \-h
-(using tabs in the output) and
-.B \-c
-(using the old output scheme instead of SGR escape sequences).
-The
-.BR \-d ,
-.BR \-C ,
-.BR \-i ,
-.BR \-M ,
-.BR \-m ,
-.BR \-n ,
-.BR \-o ,
-and
-.B \-r
-options have the effect described in
-.BR @g@troff (@MAN1EXT@).
-In addition,
-.B @g@nroff
-silently ignores the options
-.BR \-e ,
-.BR \-q ,
-and
-.BR \-s
-(which are not implemented in
-.BR @g@troff ).
-Options
-.B \-p
-(pic),
-.B \-t
-(tbl),
-.B \-S
-(safer), and
-.B \-U
-(unsafe) are passed to
-.BR groff .
-.B \-v
-shows the version number.
-.
-.SH ENVIRONMENT
-.TP
-.SM
-.B GROFF_BIN_PATH
-A colon separated list of directories in which to search for the
-.B groff
-executable before searching in PATH. If unset, `@BINDIR@' is used.
-.SH NOTES
-This shell script is basically intended for use with
-.BR man (1),
-so warnings are suppressed.
-nroff-style character definitions (in the file tty-char.tmac) are also
-loaded to emulate unrepresentable glyphs.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR grotty (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh
deleted file mode 100755
index 4342019831fb..000000000000
--- a/contrib/groff/src/roff/nroff/nroff.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#! /bin/sh
-# Emulate nroff with groff.
-# $FreeBSD$
-
-prog="$0"
-# Default device.
-# First try the "locale charmap" command, because it's most reliable.
-# On systems where it doesn't exist, look at the environment variables.
-case "`exec 2>/dev/null ; locale charmap`" in
- UTF-8)
- T=-Tutf8 ;;
- ISO*8859-1 | ISO*8859-15)
- T=-Tlatin1 ;;
- KOI8-R)
- T=-Tkoi8-r ;;
- IBM-1047)
- T=-Tcp1047 ;;
- *)
- case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
- *.UTF-8)
- T=-Tutf8 ;;
- iso_8859_1 | *.ISO-8859-1 | *.ISO8859-1 | \
- iso_8859_15 | *.ISO-8859-15 | *.ISO8859-15)
- T=-Tlatin1 ;;
- *.KOI8-R)
- T=-Tkoi8-r ;;
- *.IBM-1047)
- T=-Tcp1047 ;;
- *)
- case "$LESSCHARSET" in
- utf-8)
- T=-Tutf8 ;;
- latin1)
- T=-Tlatin1 ;;
- koi8-r)
- T=-Tkoi8-r ;;
- cp1047)
- T=-Tcp1047 ;;
- *)
- T=-Tascii ;;
- esac ;;
- esac ;;
-esac
-opts=
-
-# `for i; do' doesn't work with some versions of sh
-
-for i
- do
- case $1 in
- -c)
- opts="$opts -P-c" ;;
- -h)
- opts="$opts -P-h" ;;
- -[eq] | -s*)
- # ignore these options
- ;;
- -[dMmrnoT])
- echo "$prog: option $1 requires an argument" >&2
- exit 1 ;;
- -[iptSUC] | -[dMmrno]*)
- opts="$opts $1" ;;
- -Tascii | -Tlatin1 | -Tkoi8-r | -Tutf8 | -Tcp1047)
- T=$1 ;;
- -T*)
- # ignore other devices
- ;;
- -u*)
- # Solaris 2.2 through at least Solaris 9 `man' invokes
- # `nroff -u0 ... | col -x'. Ignore the -u0,
- # since `less' and `more' can use the emboldening info.
- # However, disable SGR, since Solaris `col' mishandles it.
- opts="$opts -P-c" ;;
- -v | --version)
- echo "GNU nroff (groff) version @VERSION@"
- exit 0 ;;
- --help)
- echo "usage: nroff [-CchipStUv] [-dCS] [-MDIR] [-mNAME] [-nNUM] [-oLIST]"
- echo " [-rCN] [-Tname] [FILE...]"
- exit 0 ;;
- --)
- shift
- break ;;
- -)
- break ;;
- -*)
- echo "$prog: invalid option $1" >&2
- exit 1 ;;
- *)
- break ;;
- esac
- shift
-done
-
-# Set up the `GROFF_BIN_PATH' variable
-# to be exported in the current `GROFF_RUNTIME' environment.
-
-@GROFF_BIN_PATH_SETUP@
-export GROFF_BIN_PATH
-
-# This shell script is intended for use with man, so warnings are
-# probably not wanted. Also load nroff-style character definitions.
-
-PATH="$GROFF_RUNTIME$PATH" groff -mtty-char $T $opts ${1+"$@"}
-
-# eof
diff --git a/contrib/groff/src/roff/troff/Makefile.sub b/contrib/groff/src/roff/troff/Makefile.sub
deleted file mode 100644
index 82c727d3e16d..000000000000
--- a/contrib/groff/src/roff/troff/Makefile.sub
+++ /dev/null
@@ -1,48 +0,0 @@
-PROG=troff$(EXEEXT)
-MAN1=troff.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- dictionary.$(OBJEXT) \
- div.$(OBJEXT) \
- env.$(OBJEXT) \
- input.$(OBJEXT) \
- majorminor.$(OBJEXT) \
- mtsm.$(OBJEXT) \
- node.$(OBJEXT) \
- number.$(OBJEXT) \
- reg.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/dictionary.cpp \
- $(srcdir)/div.cpp \
- $(srcdir)/env.cpp \
- $(srcdir)/input.cpp \
- majorminor.cpp \
- $(srcdir)/mtsm.cpp \
- $(srcdir)/node.cpp \
- $(srcdir)/number.cpp \
- $(srcdir)/reg.cpp
-HDRS=\
- $(srcdir)/charinfo.h \
- $(srcdir)/dictionary.h \
- $(srcdir)/div.h \
- $(srcdir)/env.h \
- $(srcdir)/hvunits.h \
- $(srcdir)/input.h \
- $(srcdir)/mtsm.h \
- $(srcdir)/node.h \
- $(srcdir)/reg.h \
- $(srcdir)/request.h \
- $(srcdir)/token.h \
- $(srcdir)/troff.h
-GENSRCS=majorminor.cpp
-NAMEPREFIX=$(g)
-
-majorminor.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
- @echo Making $@
- @-rm -f $@
- @echo const char \*major_version = \
- \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(top_srcdir)/VERSION`\"\; >$@
- @echo const char \*minor_version = \
- \"`sed -e 's/^[^.]*\.\([0-9]*\).*$$/\1/' $(top_srcdir)/VERSION`\"\; >>$@
- @echo const char \*revision = \"`cat $(top_srcdir)/REVISION`\"\; >>$@
diff --git a/contrib/groff/src/roff/troff/TODO b/contrib/groff/src/roff/troff/TODO
deleted file mode 100644
index 49aa0eb2ab71..000000000000
--- a/contrib/groff/src/roff/troff/TODO
+++ /dev/null
@@ -1,131 +0,0 @@
-A line prefix request to make e.g. French quotation possible:
-
- He said: >> blablablabla
- >> blablabla blabla bla
- >> blabla blabla bla bla
- >> bla bla bla blablabla
- >> blabla. <<
-
-Give a more helpful error message when the indent is set to a value
-greater than the line-length.
-
-Tracing. This is a pain to implement because requests are responsible
-for reading their own arguments.
-
-Possibly implement -s option (stop every N pages). This functionality
-would be more appropriate in a postprocessor.
-
-Line breaking should be smarter. In particular, it should be possible
-to shrink spaces. Also avoid having a line that's been shrunk a lot
-next to a line that's been stretched a lot. The difficulty is to
-design a mechanism that allows the user complete control over the
-decision of where to break the line.
-
-Provide a mechanism to control the shape of the rag in non-justified
-text.
-
-Add a discretionary break escape sequence. \='...'...'...' like TeX.
-
-Think about kerning between characters and spaces. (Need to implement
-get_breakpoints and split methods for kern_pair_node class.)
-
-In troff, if .L > 1 when a diversion is reread in no-fill mode, then
-extra line-spacing is added on. Groff at the moment treats line-spacing
-like vertical spacing and doesn't do this.
-
-Suppose \(ch comes from a special font S, and that the current font is
-R. Suppose that R contains a hyphen character and that S does not.
-Suppose that the current font is R. Suppose that \(ch is in a word
-and has a non-zero hyphen-type. Then we ought to be able to hyphenate,
-but we won't be able to because we will look for the hyphen only in
-font S and not in font R.
-
-Perhaps the current input level should be accessible in a number register.
-
-Should \w deal with a newline like \X?
-
-Have another look at uses of token::delimiter. Perhaps we need to
-distinguish the case where we want to see if a token could start a
-number, from the case where we want to see if it could occur somewhere
-in a number expression.
-
-Provide a facility like copy thru in pic.
-
-Fancier implementation of font families which doesn't group fonts into
-families purely on the basis of their names.
-
-In the DESC file make the number of fonts optional if they are all on
-one line.
-
-Number register to give the diversion level.
-
-Time various alternative implementations of scale (both in font.c and
-number.c). On a sparc it's faster to always do it in floating point.
-
-Devise a more compact representation for the hyphenation patterns trie.
-
-Have a per-environment parameter to increase letter-spacing.
-
-Number register to return character height.
-
-Number register to return character slant.
-
-Request to set character height.
-
-Request to set character slant.
-
-Provide some way to upcase or downcase strings.
-
-Support non-uniformly scalable fonts. Perhaps associate a suffix with
-a particular range of sizes. eg
- sizesuffix .display 14-512
-Then is you ask for R at pointsize 16, groff will first look for
-R.display and then R. Probably necessary to be able to specify a
-separate unitwidth for each sizesuffix (eg. for X).
-
-Make it possible to suppress hyphenation on a word-by-word basis.
-(Perhaps store hyphenation flags in tfont.)
-
-Possibly allow multiple simultaneous input line traps.
-
-Unpaddable, breakable space escape sequence.
-
-Support hanging punctuation.
-
-In justified text, if the last line of a paragraph is only a little
-bit short it might be desirable to justify the line. Allow the user
-control over this.
-
-The pm request could print where the macro was defined. Also could
-optionally print the contents of a macro.
-
-Provide some way to round numbers to multiples of the current
-horizontal or vertical resolution.
-
-Better string-processing support (search).
-
-Generalized ligatures.
-
-Provide some way for a macro to tell whether it was called with `'' or
-`.'. This would be useful for implementing a tracing macro package.
-
-Request to remove an environment. (Maintain a count of the references
-to the environment from the environment table, environment dictionary
-or environment stack.)
-
-Perhaps in the nr request a leading `-' should only be recognized as a
-decrement when it's at the same input level as the request.
-
-Don't ever change a charinfo. Create new variants instead and chain
-them together.
-
-Unix troff appears to read the first character of a request name in
-copy mode. Should we do the same?
-
-Number register giving name of end macro.
-
-More thorough range checking.
-
-Provide syntax for octal and hexadecimal numeric constants. Perhaps
-o#100 and x#7f as per Scheme. Or perhaps PostScript 16#7f. Ambiguity
-between whether `c' is treated as digit or scaling indicator.
diff --git a/contrib/groff/src/roff/troff/charinfo.h b/contrib/groff/src/roff/troff/charinfo.h
deleted file mode 100644
index 42190fd814e2..000000000000
--- a/contrib/groff/src/roff/troff/charinfo.h
+++ /dev/null
@@ -1,214 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class macro;
-
-class charinfo {
- static int next_index;
- charinfo *translation;
- int index;
- int number;
- macro *mac;
- unsigned char special_translation;
- unsigned char hyphenation_code;
- unsigned char flags;
- unsigned char ascii_code;
- unsigned char asciify_code;
- char not_found;
- char transparent_translate; // non-zero means translation applies
- // to transparent throughput
- char translate_input; // non-zero means that asciify_code is
- // active for .asciify (set by .trin)
- char_mode mode;
-public:
- enum {
- ENDS_SENTENCE = 1,
- BREAK_BEFORE = 2,
- BREAK_AFTER = 4,
- OVERLAPS_HORIZONTALLY = 8,
- OVERLAPS_VERTICALLY = 16,
- TRANSPARENT = 32,
- NUMBERED = 64
- };
- enum {
- TRANSLATE_NONE,
- TRANSLATE_SPACE,
- TRANSLATE_DUMMY,
- TRANSLATE_STRETCHABLE_SPACE,
- TRANSLATE_HYPHEN_INDICATOR
- };
- symbol nm;
- charinfo(symbol s);
- int get_index();
- int ends_sentence();
- int overlaps_vertically();
- int overlaps_horizontally();
- int can_break_before();
- int can_break_after();
- int transparent();
- unsigned char get_hyphenation_code();
- unsigned char get_ascii_code();
- unsigned char get_asciify_code();
- void set_hyphenation_code(unsigned char);
- void set_ascii_code(unsigned char);
- void set_asciify_code(unsigned char);
- void set_translation_input();
- int get_translation_input();
- charinfo *get_translation(int = 0);
- void set_translation(charinfo *, int, int);
- void set_flags(unsigned char);
- void set_special_translation(int, int);
- int get_special_translation(int = 0);
- macro *set_macro(macro *);
- macro *setx_macro(macro *, char_mode);
- macro *get_macro();
- int first_time_not_found();
- void set_number(int);
- int get_number();
- int numbered();
- int is_normal();
- int is_fallback();
- int is_special();
- symbol *get_symbol();
-};
-
-charinfo *get_charinfo(symbol);
-extern charinfo *charset_table[];
-charinfo *get_charinfo_by_number(int);
-
-inline int charinfo::overlaps_horizontally()
-{
- return flags & OVERLAPS_HORIZONTALLY;
-}
-
-inline int charinfo::overlaps_vertically()
-{
- return flags & OVERLAPS_VERTICALLY;
-}
-
-inline int charinfo::can_break_before()
-{
- return flags & BREAK_BEFORE;
-}
-
-inline int charinfo::can_break_after()
-{
- return flags & BREAK_AFTER;
-}
-
-inline int charinfo::ends_sentence()
-{
- return flags & ENDS_SENTENCE;
-}
-
-inline int charinfo::transparent()
-{
- return flags & TRANSPARENT;
-}
-
-inline int charinfo::numbered()
-{
- return flags & NUMBERED;
-}
-
-inline int charinfo::is_normal()
-{
- return mode == CHAR_NORMAL;
-}
-
-inline int charinfo::is_fallback()
-{
- return mode == CHAR_FALLBACK;
-}
-
-inline int charinfo::is_special()
-{
- return mode == CHAR_SPECIAL;
-}
-
-inline charinfo *charinfo::get_translation(int transparent_throughput)
-{
- return (transparent_throughput && !transparent_translate
- ? 0
- : translation);
-}
-
-inline unsigned char charinfo::get_hyphenation_code()
-{
- return hyphenation_code;
-}
-
-inline unsigned char charinfo::get_ascii_code()
-{
- return ascii_code;
-}
-
-inline unsigned char charinfo::get_asciify_code()
-{
- return (translate_input ? asciify_code : 0);
-}
-
-inline void charinfo::set_flags(unsigned char c)
-{
- flags = c;
-}
-
-inline int charinfo::get_index()
-{
- return index;
-}
-
-inline void charinfo::set_translation_input()
-{
- translate_input = 1;
-}
-
-inline int charinfo::get_translation_input()
-{
- return translate_input;
-}
-
-inline int charinfo::get_special_translation(int transparent_throughput)
-{
- return (transparent_throughput && !transparent_translate
- ? int(TRANSLATE_NONE)
- : special_translation);
-}
-
-inline macro *charinfo::get_macro()
-{
- return mac;
-}
-
-inline int charinfo::first_time_not_found()
-{
- if (not_found)
- return 0;
- else {
- not_found = 1;
- return 1;
- }
-}
-
-inline symbol *charinfo::get_symbol()
-{
- return( &nm );
-}
diff --git a/contrib/groff/src/roff/troff/column.cpp b/contrib/groff/src/roff/troff/column.cpp
deleted file mode 100644
index 060b088d2355..000000000000
--- a/contrib/groff/src/roff/troff/column.cpp
+++ /dev/null
@@ -1,732 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef COLUMN
-
-#include "troff.h"
-#include "symbol.h"
-#include "dictionary.h"
-#include "hvunits.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "token.h"
-#include "div.h"
-#include "reg.h"
-#include "stringclass.h"
-
-void output_file::vjustify(vunits, symbol)
-{
- // do nothing
-}
-
-struct justification_spec;
-struct output_line;
-
-class column : public output_file {
-private:
- output_file *out;
- vunits bottom;
- output_line *col;
- output_line **tail;
- void add_output_line(output_line *);
- void begin_page(int pageno, vunits page_length);
- void flush();
- void print_line(hunits, vunits, node *, vunits, vunits);
- void vjustify(vunits, symbol);
- void transparent_char(unsigned char c);
- void copy_file(hunits, vunits, const char *);
- int is_printing();
- void check_bottom();
-public:
- column();
- ~column();
- void start();
- void output();
- void justify(const justification_spec &);
- void trim();
- void reset();
- vunits get_bottom();
- vunits get_last_extra_space();
- int is_active() { return out != 0; }
-};
-
-column *the_column = 0;
-
-struct transparent_output_line;
-struct vjustify_output_line;
-
-class output_line {
- output_line *next;
-public:
- output_line();
- virtual ~output_line();
- virtual void output(output_file *, vunits);
- virtual transparent_output_line *as_transparent_output_line();
- virtual vjustify_output_line *as_vjustify_output_line();
- virtual vunits distance();
- virtual vunits height();
- virtual void reset();
- virtual vunits extra_space(); // post line
- friend class column;
- friend class justification_spec;
-};
-
-class position_output_line : public output_line {
- vunits dist;
-public:
- position_output_line(vunits);
- vunits distance();
-};
-
-class node_output_line : public position_output_line {
- node *nd;
- hunits page_offset;
- vunits before;
- vunits after;
-public:
- node_output_line(vunits, node *, hunits, vunits, vunits);
- ~node_output_line();
- void output(output_file *, vunits);
- vunits height();
- vunits extra_space();
-};
-
-class vjustify_output_line : public position_output_line {
- vunits current;
- symbol typ;
-public:
- vjustify_output_line(vunits dist, symbol);
- vunits height();
- vjustify_output_line *as_vjustify_output_line();
- void vary(vunits amount);
- void reset();
- symbol type();
-};
-
-inline symbol vjustify_output_line::type()
-{
- return typ;
-}
-
-class copy_file_output_line : public position_output_line {
- symbol filename;
- hunits hpos;
-public:
- copy_file_output_line(vunits, const char *, hunits);
- void output(output_file *, vunits);
-};
-
-class transparent_output_line : public output_line {
- string buf;
-public:
- transparent_output_line();
- void output(output_file *, vunits);
- void append_char(unsigned char c);
- transparent_output_line *as_transparent_output_line();
-};
-
-output_line::output_line() : next(0)
-{
-}
-
-output_line::~output_line()
-{
-}
-
-void output_line::reset()
-{
-}
-
-transparent_output_line *output_line::as_transparent_output_line()
-{
- return 0;
-}
-
-vjustify_output_line *output_line::as_vjustify_output_line()
-{
- return 0;
-}
-
-void output_line::output(output_file *, vunits)
-{
-}
-
-vunits output_line::distance()
-{
- return V0;
-}
-
-vunits output_line::height()
-{
- return V0;
-}
-
-vunits output_line::extra_space()
-{
- return V0;
-}
-
-position_output_line::position_output_line(vunits d)
-: dist(d)
-{
-}
-
-vunits position_output_line::distance()
-{
- return dist;
-}
-
-node_output_line::node_output_line(vunits d, node *n, hunits po, vunits b, vunits a)
-: position_output_line(d), nd(n), page_offset(po), before(b), after(a)
-{
-}
-
-node_output_line::~node_output_line()
-{
- delete_node_list(nd);
-}
-
-void node_output_line::output(output_file *out, vunits pos)
-{
- out->print_line(page_offset, pos, nd, before, after);
- nd = 0;
-}
-
-vunits node_output_line::height()
-{
- return after;
-}
-
-vunits node_output_line::extra_space()
-{
- return after;
-}
-
-vjustify_output_line::vjustify_output_line(vunits d, symbol t)
-: position_output_line(d), typ(t)
-{
-}
-
-void vjustify_output_line::reset()
-{
- current = V0;
-}
-
-vunits vjustify_output_line::height()
-{
- return current;
-}
-
-vjustify_output_line *vjustify_output_line::as_vjustify_output_line()
-{
- return this;
-}
-
-inline void vjustify_output_line::vary(vunits amount)
-{
- current += amount;
-}
-
-transparent_output_line::transparent_output_line()
-{
-}
-
-transparent_output_line *transparent_output_line::as_transparent_output_line()
-{
- return this;
-}
-
-void transparent_output_line::append_char(unsigned char c)
-{
- assert(c != 0);
- buf += c;
-}
-
-void transparent_output_line::output(output_file *out, vunits)
-{
- int len = buf.length();
- for (int i = 0; i < len; i++)
- out->transparent_char(buf[i]);
-}
-
-copy_file_output_line::copy_file_output_line(vunits d, const char *f, hunits h)
-: position_output_line(d), hpos(h), filename(f)
-{
-}
-
-void copy_file_output_line::output(output_file *out, vunits pos)
-{
- out->copy_file(hpos, pos, filename.contents());
-}
-
-column::column()
-: bottom(V0), col(0), tail(&col), out(0)
-{
-}
-
-column::~column()
-{
- assert(out != 0);
- error("automatically outputting column before exiting");
- output();
- delete the_output;
-}
-
-void column::start()
-{
- assert(out == 0);
- if (!the_output)
- init_output();
- assert(the_output != 0);
- out = the_output;
- the_output = this;
-}
-
-void column::begin_page(int pageno, vunits page_length)
-{
- assert(out != 0);
- if (col) {
- error("automatically outputting column before beginning next page");
- output();
- the_output->begin_page(pageno, page_length);
- }
- else
- out->begin_page(pageno, page_length);
-
-}
-
-void column::flush()
-{
- assert(out != 0);
- out->flush();
-}
-
-int column::is_printing()
-{
- assert(out != 0);
- return out->is_printing();
-}
-
-vunits column::get_bottom()
-{
- return bottom;
-}
-
-void column::add_output_line(output_line *ln)
-{
- *tail = ln;
- bottom += ln->distance();
- bottom += ln->height();
- ln->next = 0;
- tail = &(*tail)->next;
-}
-
-void column::print_line(hunits page_offset, vunits pos, node *nd,
- vunits before, vunits after)
-{
- assert(out != 0);
- add_output_line(new node_output_line(pos - bottom, nd, page_offset, before, after));
-}
-
-void column::vjustify(vunits pos, symbol typ)
-{
- assert(out != 0);
- add_output_line(new vjustify_output_line(pos - bottom, typ));
-}
-
-void column::transparent_char(unsigned char c)
-{
- assert(out != 0);
- transparent_output_line *tl = 0;
- if (*tail)
- tl = (*tail)->as_transparent_output_line();
- if (!tl) {
- tl = new transparent_output_line;
- add_output_line(tl);
- }
- tl->append_char(c);
-}
-
-void column::copy_file(hunits page_offset, vunits pos, const char *filename)
-{
- assert(out != 0);
- add_output_line(new copy_file_output_line(pos - bottom, filename, page_offset));
-}
-
-void column::trim()
-{
- output_line **spp = 0;
- for (output_line **pp = &col; *pp; pp = &(*pp)->next)
- if ((*pp)->as_vjustify_output_line() == 0)
- spp = 0;
- else if (!spp)
- spp = pp;
- if (spp) {
- output_line *ln = *spp;
- *spp = 0;
- tail = spp;
- while (ln) {
- output_line *tem = ln->next;
- bottom -= ln->distance();
- bottom -= ln->height();
- delete ln;
- ln = tem;
- }
- }
-}
-
-void column::reset()
-{
- bottom = V0;
- for (output_line *ln = col; ln; ln = ln->next) {
- bottom += ln->distance();
- ln->reset();
- bottom += ln->height();
- }
-}
-
-void column::check_bottom()
-{
- vunits b;
- for (output_line *ln = col; ln; ln = ln->next) {
- b += ln->distance();
- b += ln->height();
- }
- assert(b == bottom);
-}
-
-void column::output()
-{
- assert(out != 0);
- vunits vpos(V0);
- output_line *ln = col;
- while (ln) {
- vpos += ln->distance();
- ln->output(out, vpos);
- vpos += ln->height();
- output_line *tem = ln->next;
- delete ln;
- ln = tem;
- }
- tail = &col;
- bottom = V0;
- col = 0;
- the_output = out;
- out = 0;
-}
-
-vunits column::get_last_extra_space()
-{
- if (!col)
- return V0;
- for (output_line *p = col; p->next; p = p->next)
- ;
- return p->extra_space();
-}
-
-class justification_spec {
- vunits height;
- symbol *type;
- vunits *amount;
- int n;
- int maxn;
-public:
- justification_spec(vunits);
- ~justification_spec();
- void append(symbol t, vunits v);
- void justify(output_line *, vunits *bottomp) const;
-};
-
-justification_spec::justification_spec(vunits h)
-: height(h), n(0), maxn(10)
-{
- type = new symbol[maxn];
- amount = new vunits[maxn];
-}
-
-justification_spec::~justification_spec()
-{
- a_delete type;
- a_delete amount;
-}
-
-void justification_spec::append(symbol t, vunits v)
-{
- if (v <= V0) {
- if (v < V0)
- warning(WARN_RANGE,
- "maximum space for vertical justification must not be negative");
- else
- warning(WARN_RANGE,
- "maximum space for vertical justification must not be zero");
- return;
- }
- if (n >= maxn) {
- maxn *= 2;
- symbol *old_type = type;
- type = new symbol[maxn];
- int i;
- for (i = 0; i < n; i++)
- type[i] = old_type[i];
- a_delete old_type;
- vunits *old_amount = amount;
- amount = new vunits[maxn];
- for (i = 0; i < n; i++)
- amount[i] = old_amount[i];
- a_delete old_amount;
- }
- assert(n < maxn);
- type[n] = t;
- amount[n] = v;
- n++;
-}
-
-void justification_spec::justify(output_line *col, vunits *bottomp) const
-{
- if (*bottomp >= height)
- return;
- vunits total;
- output_line *p;
- for (p = col; p; p = p->next) {
- vjustify_output_line *sp = p->as_vjustify_output_line();
- if (sp) {
- symbol t = sp->type();
- for (int i = 0; i < n; i++) {
- if (t == type[i])
- total += amount[i];
- }
- }
- }
- vunits gap = height - *bottomp;
- for (p = col; p; p = p->next) {
- vjustify_output_line *sp = p->as_vjustify_output_line();
- if (sp) {
- symbol t = sp->type();
- for (int i = 0; i < n; i++) {
- if (t == type[i]) {
- if (total <= gap) {
- sp->vary(amount[i]);
- gap -= amount[i];
- }
- else {
- // gap < total
- vunits v = scale(amount[i], gap, total);
- sp->vary(v);
- gap -= v;
- }
- total -= amount[i];
- }
- }
- }
- }
- assert(total == V0);
- *bottomp = height - gap;
-}
-
-void column::justify(const justification_spec &js)
-{
- check_bottom();
- js.justify(col, &bottom);
- check_bottom();
-}
-
-void column_justify()
-{
- vunits height;
- if (!the_column->is_active())
- error("can't justify column - column not active");
- else if (get_vunits(&height, 'v')) {
- justification_spec js(height);
- symbol nm = get_long_name(1);
- if (!nm.is_null()) {
- vunits v;
- if (get_vunits(&v, 'v')) {
- js.append(nm, v);
- int err = 0;
- while (has_arg()) {
- nm = get_long_name(1);
- if (nm.is_null()) {
- err = 1;
- break;
- }
- if (!get_vunits(&v, 'v')) {
- err = 1;
- break;
- }
- js.append(nm, v);
- }
- if (!err)
- the_column->justify(js);
- }
- }
- }
- skip_line();
-}
-
-void column_start()
-{
- if (the_column->is_active())
- error("can't start column - column already active");
- else
- the_column->start();
- skip_line();
-}
-
-void column_output()
-{
- if (!the_column->is_active())
- error("can't output column - column not active");
- else
- the_column->output();
- skip_line();
-}
-
-void column_trim()
-{
- if (!the_column->is_active())
- error("can't trim column - column not active");
- else
- the_column->trim();
- skip_line();
-}
-
-void column_reset()
-{
- if (!the_column->is_active())
- error("can't reset column - column not active");
- else
- the_column->reset();
- skip_line();
-}
-
-class column_bottom_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *column_bottom_reg::get_string()
-{
- return i_to_a(the_column->get_bottom().to_units());
-}
-
-class column_extra_space_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *column_extra_space_reg::get_string()
-{
- return i_to_a(the_column->get_last_extra_space().to_units());
-}
-
-class column_active_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *column_active_reg::get_string()
-{
- return the_column->is_active() ? "1" : "0";
-}
-
-static int no_vjustify_mode = 0;
-
-class vjustify_node : public node {
- symbol typ;
-public:
- vjustify_node(symbol);
- int reread(int *);
- const char *type();
- int same(node *);
- node *copy();
-};
-
-vjustify_node::vjustify_node(symbol t)
-: typ(t)
-{
-}
-
-node *vjustify_node::copy()
-{
- return new vjustify_node(typ, div_nest_level);
-}
-
-const char *vjustify_node::type()
-{
- return "vjustify_node";
-}
-
-int vjustify_node::same(node *nd)
-{
- return typ == ((vjustify_node *)nd)->typ;
-}
-
-int vjustify_node::reread(int *bolp)
-{
- curdiv->vjustify(typ);
- *bolp = 1;
- return 1;
-}
-
-void macro_diversion::vjustify(symbol type)
-{
- if (!no_vjustify_mode)
- mac->append(new vjustify_node(type));
-}
-
-void top_level_diversion::vjustify(symbol type)
-{
- if (no_space_mode || no_vjustify_mode)
- return;
- assert(first_page_begun); // I'm not sure about this.
- the_output->vjustify(vertical_position, type);
-}
-
-void no_vjustify()
-{
- skip_line();
- no_vjustify_mode = 1;
-}
-
-void restore_vjustify()
-{
- skip_line();
- no_vjustify_mode = 0;
-}
-
-void init_column_requests()
-{
- the_column = new column;
- init_request("cols", column_start);
- init_request("colo", column_output);
- init_request("colj", column_justify);
- init_request("colr", column_reset);
- init_request("colt", column_trim);
- init_request("nvj", no_vjustify);
- init_request("rvj", restore_vjustify);
- number_reg_dictionary.define(".colb", new column_bottom_reg);
- number_reg_dictionary.define(".colx", new column_extra_space_reg);
- number_reg_dictionary.define(".cola", new column_active_reg);
- number_reg_dictionary.define(".nvj",
- new constant_int_reg(&no_vjustify_mode));
-}
-
-#endif /* COLUMN */
diff --git a/contrib/groff/src/roff/troff/dictionary.cpp b/contrib/groff/src/roff/troff/dictionary.cpp
deleted file mode 100644
index 37084b6678c1..000000000000
--- a/contrib/groff/src/roff/troff/dictionary.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-#include "troff.h"
-#include "dictionary.h"
-
-// is `p' a good size for a hash table
-
-static int is_good_size(unsigned int p)
-{
- const unsigned int SMALL = 10;
- unsigned int i;
- for (i = 2; i <= p/2; i++)
- if (p % i == 0)
- return 0;
- for (i = 0x100; i != 0; i <<= 8)
- if (i % p <= SMALL || i % p > p - SMALL)
- return 0;
- return 1;
-}
-
-dictionary::dictionary(int n) : size(n), used(0), threshold(0.5), factor(1.5)
-{
- table = new association[n];
-}
-
-// see Knuth, Sorting and Searching, p518, Algorithm L
-// we can't use double-hashing because we want a remove function
-
-void *dictionary::lookup(symbol s, void *v)
-{
- int i;
- for (i = int(s.hash() % size);
- table[i].v != 0;
- i == 0 ? i = size - 1: --i)
- if (s == table[i].s) {
- if (v != 0) {
- void *temp = table[i].v;
- table[i].v = v;
- return temp;
- }
- else
- return table[i].v;
- }
- if (v == 0)
- return 0;
- ++used;
- table[i].v = v;
- table[i].s = s;
- if ((double)used/(double)size >= threshold || used + 1 >= size) {
- int old_size = size;
- size = int(size*factor);
- while (!is_good_size(size))
- ++size;
- association *old_table = table;
- table = new association[size];
- used = 0;
- for (i = 0; i < old_size; i++)
- if (old_table[i].v != 0)
- (void)lookup(old_table[i].s, old_table[i].v);
- a_delete old_table;
- }
- return 0;
-}
-
-void *dictionary::lookup(const char *p)
-{
- symbol s(p, MUST_ALREADY_EXIST);
- if (s.is_null())
- return 0;
- else
- return lookup(s);
-}
-
-// see Knuth, Sorting and Searching, p527, Algorithm R
-
-void *dictionary::remove(symbol s)
-{
- // this relies on the fact that we are using linear probing
- int i;
- for (i = int(s.hash() % size);
- table[i].v != 0 && s != table[i].s;
- i == 0 ? i = size - 1: --i)
- ;
- void *p = table[i].v;
- while (table[i].v != 0) {
- table[i].v = 0;
- int j = i;
- int r;
- do {
- --i;
- if (i < 0)
- i = size - 1;
- if (table[i].v == 0)
- break;
- r = int(table[i].s.hash() % size);
- } while ((i <= r && r < j) || (r < j && j < i) || (j < i && i <= r));
- table[j] = table[i];
- }
- if (p != 0)
- --used;
- return p;
-}
-
-dictionary_iterator::dictionary_iterator(dictionary &d) : dict(&d), i(0)
-{
-}
-
-int dictionary_iterator::get(symbol *sp, void **vp)
-{
- for (; i < dict->size; i++)
- if (dict->table[i].v) {
- *sp = dict->table[i].s;
- *vp = dict->table[i].v;
- i++;
- return 1;
- }
- return 0;
-}
-
-object_dictionary_iterator::object_dictionary_iterator(object_dictionary &od)
-: di(od.d)
-{
-}
-
-object::object() : rcount(0)
-{
-}
-
-object::~object()
-{
-}
-
-void object::add_reference()
-{
- rcount += 1;
-}
-
-void object::remove_reference()
-{
- if (--rcount == 0)
- delete this;
-}
-
-object_dictionary::object_dictionary(int n) : d(n)
-{
-}
-
-object *object_dictionary::lookup(symbol nm)
-{
- return (object *)d.lookup(nm);
-}
-
-void object_dictionary::define(symbol nm, object *obj)
-{
- obj->add_reference();
- obj = (object *)d.lookup(nm, obj);
- if (obj)
- obj->remove_reference();
-}
-
-void object_dictionary::rename(symbol oldnm, symbol newnm)
-{
- object *obj = (object *)d.remove(oldnm);
- if (obj) {
- obj = (object *)d.lookup(newnm, obj);
- if (obj)
- obj->remove_reference();
- }
-}
-
-void object_dictionary::remove(symbol nm)
-{
- object *obj = (object *)d.remove(nm);
- if (obj)
- obj->remove_reference();
-}
-
-// Return non-zero if oldnm was defined.
-
-int object_dictionary::alias(symbol newnm, symbol oldnm)
-{
- object *obj = (object *)d.lookup(oldnm);
- if (obj) {
- obj->add_reference();
- obj = (object *)d.lookup(newnm, obj);
- if (obj)
- obj->remove_reference();
- return 1;
- }
- return 0;
-}
diff --git a/contrib/groff/src/roff/troff/dictionary.h b/contrib/groff/src/roff/troff/dictionary.h
deleted file mode 100644
index 2baab0ab935a..000000000000
--- a/contrib/groff/src/roff/troff/dictionary.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-
-// there is no distinction between name with no value and name with NULL value
-// null names are not permitted (they will be ignored).
-
-struct association {
- symbol s;
- void *v;
- association() : v(0) {}
-};
-
-class dictionary;
-
-class dictionary_iterator {
- dictionary *dict;
- int i;
-public:
- dictionary_iterator(dictionary &);
- int get(symbol *, void **);
-};
-
-class dictionary {
- int size;
- int used;
- double threshold;
- double factor;
- association *table;
- void rehash(int);
-public:
- dictionary(int);
- void *lookup(symbol s, void *v=0); // returns value associated with key
- void *lookup(const char *);
- // if second parameter not NULL, value will be replaced
- void *remove(symbol);
- friend class dictionary_iterator;
-};
-
-class object {
- int rcount;
- public:
- object();
- virtual ~object();
- void add_reference();
- void remove_reference();
-};
-
-class object_dictionary;
-
-class object_dictionary_iterator {
- dictionary_iterator di;
-public:
- object_dictionary_iterator(object_dictionary &);
- int get(symbol *, object **);
-};
-
-class object_dictionary {
- dictionary d;
-public:
- object_dictionary(int);
- object *lookup(symbol nm);
- void define(symbol nm, object *obj);
- void rename(symbol oldnm, symbol newnm);
- void remove(symbol nm);
- int alias(symbol newnm, symbol oldnm);
- friend class object_dictionary_iterator;
-};
-
-
-inline int object_dictionary_iterator::get(symbol *sp, object **op)
-{
- return di.get(sp, (void **)op);
-}
diff --git a/contrib/groff/src/roff/troff/div.cpp b/contrib/groff/src/roff/troff/div.cpp
deleted file mode 100644
index 4cacd8da9849..000000000000
--- a/contrib/groff/src/roff/troff/div.cpp
+++ /dev/null
@@ -1,1198 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-// diversions
-
-#include "troff.h"
-#include "dictionary.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "token.h"
-#include "div.h"
-#include "reg.h"
-
-#include "nonposix.h"
-
-int exit_started = 0; // the exit process has started
-int done_end_macro = 0; // the end macro (if any) has finished
-int seen_last_page_ejector = 0; // seen the LAST_PAGE_EJECTOR cookie
-int last_page_number = 0; // if > 0, the number of the last page
- // specified with -o
-static int began_page_in_end_macro = 0; // a new page was begun during the end macro
-
-static int last_post_line_extra_space = 0; // needed for \n(.a
-static int nl_reg_contents = -1;
-static int dl_reg_contents = 0;
-static int dn_reg_contents = 0;
-static int vertical_position_traps_flag = 1;
-static vunits truncated_space;
-static vunits needed_space;
-
-diversion::diversion(symbol s)
-: prev(0), nm(s), vertical_position(V0), high_water_mark(V0),
- any_chars_added(0), no_space_mode(0), needs_push(0), saved_seen_break(0),
- saved_seen_space(0), saved_seen_eol(0), saved_suppress_next_eol(0),
- marked_place(V0)
-{
-}
-
-struct vertical_size {
- vunits pre_extra, post_extra, pre, post;
- vertical_size(vunits vs, vunits post_vs);
-};
-
-vertical_size::vertical_size(vunits vs, vunits post_vs)
-: pre_extra(V0), post_extra(V0), pre(vs), post(post_vs)
-{
-}
-
-void node::set_vertical_size(vertical_size *)
-{
-}
-
-void extra_size_node::set_vertical_size(vertical_size *v)
-{
- if (n < V0) {
- if (-n > v->pre_extra)
- v->pre_extra = -n;
- }
- else if (n > v->post_extra)
- v->post_extra = n;
-}
-
-void vertical_size_node::set_vertical_size(vertical_size *v)
-{
- if (n < V0)
- v->pre = -n;
- else
- v->post = n;
-}
-
-top_level_diversion *topdiv;
-
-diversion *curdiv;
-
-void do_divert(int append, int boxing)
-{
- tok.skip();
- symbol nm = get_name();
- if (nm.is_null()) {
- if (curdiv->prev) {
- curenv->seen_break = curdiv->saved_seen_break;
- curenv->seen_space = curdiv->saved_seen_space;
- curenv->seen_eol = curdiv->saved_seen_eol;
- curenv->suppress_next_eol = curdiv->saved_suppress_next_eol;
- if (boxing) {
- curenv->line = curdiv->saved_line;
- curenv->width_total = curdiv->saved_width_total;
- curenv->space_total = curdiv->saved_space_total;
- curenv->saved_indent = curdiv->saved_saved_indent;
- curenv->target_text_length = curdiv->saved_target_text_length;
- curenv->prev_line_interrupted = curdiv->saved_prev_line_interrupted;
- }
- diversion *temp = curdiv;
- curdiv = curdiv->prev;
- delete temp;
- }
- else
- warning(WARN_DI, "diversion stack underflow");
- }
- else {
- macro_diversion *md = new macro_diversion(nm, append);
- md->prev = curdiv;
- curdiv = md;
- curdiv->saved_seen_break = curenv->seen_break;
- curdiv->saved_seen_space = curenv->seen_space;
- curdiv->saved_seen_eol = curenv->seen_eol;
- curdiv->saved_suppress_next_eol = curenv->suppress_next_eol;
- curenv->seen_break = 0;
- curenv->seen_space = 0;
- curenv->seen_eol = 0;
- if (boxing) {
- curdiv->saved_line = curenv->line;
- curdiv->saved_width_total = curenv->width_total;
- curdiv->saved_space_total = curenv->space_total;
- curdiv->saved_saved_indent = curenv->saved_indent;
- curdiv->saved_target_text_length = curenv->target_text_length;
- curdiv->saved_prev_line_interrupted = curenv->prev_line_interrupted;
- curenv->line = 0;
- curenv->start_line();
- }
- }
- skip_line();
-}
-
-void divert()
-{
- do_divert(0, 0);
-}
-
-void divert_append()
-{
- do_divert(1, 0);
-}
-
-void box()
-{
- do_divert(0, 1);
-}
-
-void box_append()
-{
- do_divert(1, 1);
-}
-
-void diversion::need(vunits n)
-{
- vunits d = distance_to_next_trap();
- if (d < n) {
- truncated_space = -d;
- needed_space = n;
- space(d, 1);
- }
-}
-
-macro_diversion::macro_diversion(symbol s, int append)
-: diversion(s), max_width(H0)
-{
-#if 0
- if (append) {
- /* We don't allow recursive appends eg:
-
- .da a
- .a
- .di
-
- This causes an infinite loop in troff anyway.
- This is because the user could do
-
- .as a foo
-
- in the diversion, and this would mess things up royally,
- since there would be two things appending to the same
- macro_header.
- To make it work, we would have to copy the _contents_
- of the macro into which we were diverting; this doesn't
- strike me as worthwhile.
- However,
-
- .di a
- .a
- .a
- .di
-
- will work and will make `a' contain two copies of what it contained
- before; in troff, `a' would contain nothing. */
- request_or_macro *rm
- = (request_or_macro *)request_dictionary.remove(s);
- if (!rm || (mac = rm->to_macro()) == 0)
- mac = new macro;
- }
- else
- mac = new macro;
-#endif
- // We can now catch the situation described above by comparing
- // the length of the charlist in the macro_header with the length
- // stored in the macro. When we detect this, we copy the contents.
- mac = new macro(1);
- if (append) {
- request_or_macro *rm
- = (request_or_macro *)request_dictionary.lookup(s);
- if (rm) {
- macro *m = rm->to_macro();
- if (m)
- *mac = *m;
- }
- }
-}
-
-macro_diversion::~macro_diversion()
-{
- request_or_macro *rm = (request_or_macro *)request_dictionary.lookup(nm);
- macro *m = rm ? rm->to_macro() : 0;
- if (m) {
- *m = *mac;
- delete mac;
- }
- else
- request_dictionary.define(nm, mac);
- mac = 0;
- dl_reg_contents = max_width.to_units();
- dn_reg_contents = vertical_position.to_units();
-}
-
-vunits macro_diversion::distance_to_next_trap()
-{
- if (!diversion_trap.is_null() && diversion_trap_pos > vertical_position)
- return diversion_trap_pos - vertical_position;
- else
- // Substract vresolution so that vunits::vunits does not overflow.
- return vunits(INT_MAX - vresolution);
-}
-
-void macro_diversion::transparent_output(unsigned char c)
-{
- mac->append(c);
-}
-
-void macro_diversion::transparent_output(node *n)
-{
- mac->append(n);
-}
-
-void macro_diversion::output(node *nd, int retain_size,
- vunits vs, vunits post_vs, hunits width)
-{
- no_space_mode = 0;
- vertical_size v(vs, post_vs);
- while (nd != 0) {
- nd->set_vertical_size(&v);
- node *temp = nd;
- nd = nd->next;
- if (temp->interpret(mac))
- delete temp;
- else {
-#if 1
- temp->freeze_space();
-#endif
- mac->append(temp);
- }
- }
- last_post_line_extra_space = v.post_extra.to_units();
- if (!retain_size) {
- v.pre = vs;
- v.post = post_vs;
- }
- if (width > max_width)
- max_width = width;
- vunits x = v.pre + v.pre_extra + v.post + v.post_extra;
- if (vertical_position_traps_flag
- && !diversion_trap.is_null() && diversion_trap_pos > vertical_position
- && diversion_trap_pos <= vertical_position + x) {
- vunits trunc = vertical_position + x - diversion_trap_pos;
- if (trunc > v.post)
- trunc = v.post;
- v.post -= trunc;
- x -= trunc;
- truncated_space = trunc;
- spring_trap(diversion_trap);
- }
- mac->append(new vertical_size_node(-v.pre));
- mac->append(new vertical_size_node(v.post));
- mac->append('\n');
- vertical_position += x;
- if (vertical_position - v.post > high_water_mark)
- high_water_mark = vertical_position - v.post;
-}
-
-void macro_diversion::space(vunits n, int)
-{
- if (vertical_position_traps_flag
- && !diversion_trap.is_null() && diversion_trap_pos > vertical_position
- && diversion_trap_pos <= vertical_position + n) {
- truncated_space = vertical_position + n - diversion_trap_pos;
- n = diversion_trap_pos - vertical_position;
- spring_trap(diversion_trap);
- }
- else if (n + vertical_position < V0)
- n = -vertical_position;
- mac->append(new diverted_space_node(n));
- vertical_position += n;
-}
-
-void macro_diversion::copy_file(const char *filename)
-{
- mac->append(new diverted_copy_file_node(filename));
-}
-
-top_level_diversion::top_level_diversion()
-: page_number(0), page_count(0), last_page_count(-1),
- page_length(units_per_inch*11),
- prev_page_offset(units_per_inch), page_offset(units_per_inch),
- page_trap_list(0), have_next_page_number(0),
- ejecting_page(0), before_first_page(1)
-{
-}
-
-// find the next trap after pos
-
-trap *top_level_diversion::find_next_trap(vunits *next_trap_pos)
-{
- trap *next_trap = 0;
- for (trap *pt = page_trap_list; pt != 0; pt = pt->next)
- if (!pt->nm.is_null()) {
- if (pt->position >= V0) {
- if (pt->position > vertical_position
- && pt->position < page_length
- && (next_trap == 0 || pt->position < *next_trap_pos)) {
- next_trap = pt;
- *next_trap_pos = pt->position;
- }
- }
- else {
- vunits pos = pt->position;
- pos += page_length;
- if (pos > 0 && pos > vertical_position && (next_trap == 0 || pos < *next_trap_pos)) {
- next_trap = pt;
- *next_trap_pos = pos;
- }
- }
- }
- return next_trap;
-}
-
-vunits top_level_diversion::distance_to_next_trap()
-{
- vunits d;
- if (!find_next_trap(&d))
- return page_length - vertical_position;
- else
- return d - vertical_position;
-}
-
-void top_level_diversion::output(node *nd, int retain_size,
- vunits vs, vunits post_vs, hunits width)
-{
- no_space_mode = 0;
- vunits next_trap_pos;
- trap *next_trap = find_next_trap(&next_trap_pos);
- if (before_first_page && begin_page())
- fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request");
- vertical_size v(vs, post_vs);
- for (node *tem = nd; tem != 0; tem = tem->next)
- tem->set_vertical_size(&v);
- last_post_line_extra_space = v.post_extra.to_units();
- if (!retain_size) {
- v.pre = vs;
- v.post = post_vs;
- }
- vertical_position += v.pre;
- vertical_position += v.pre_extra;
- the_output->print_line(page_offset, vertical_position, nd,
- v.pre + v.pre_extra, v.post_extra, width);
- vertical_position += v.post_extra;
- if (vertical_position > high_water_mark)
- high_water_mark = vertical_position;
- if (vertical_position_traps_flag && vertical_position >= page_length)
- begin_page();
- else if (vertical_position_traps_flag
- && next_trap != 0 && vertical_position >= next_trap_pos) {
- nl_reg_contents = vertical_position.to_units();
- truncated_space = v.post;
- spring_trap(next_trap->nm);
- }
- else if (v.post > V0) {
- vertical_position += v.post;
- if (vertical_position_traps_flag
- && next_trap != 0 && vertical_position >= next_trap_pos) {
- truncated_space = vertical_position - next_trap_pos;
- vertical_position = next_trap_pos;
- nl_reg_contents = vertical_position.to_units();
- spring_trap(next_trap->nm);
- }
- else if (vertical_position_traps_flag && vertical_position >= page_length)
- begin_page();
- else
- nl_reg_contents = vertical_position.to_units();
- }
- else
- nl_reg_contents = vertical_position.to_units();
-}
-
-void top_level_diversion::transparent_output(unsigned char c)
-{
- if (before_first_page && begin_page())
- // This can only happen with the .output request.
- fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request");
- const char *s = asciify(c);
- while (*s)
- the_output->transparent_char(*s++);
-}
-
-void top_level_diversion::transparent_output(node * /*n*/)
-{
- error("can't transparently output node at top level");
-}
-
-void top_level_diversion::copy_file(const char *filename)
-{
- if (before_first_page && begin_page())
- fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request");
- the_output->copy_file(page_offset, vertical_position, filename);
-}
-
-void top_level_diversion::space(vunits n, int forced)
-{
- if (no_space_mode) {
- if (!forced)
- return;
- else
- no_space_mode = 0;
- }
- if (before_first_page) {
- begin_page(n);
- return;
- }
- vunits next_trap_pos;
- trap *next_trap = find_next_trap(&next_trap_pos);
- vunits y = vertical_position + n;
- if (curenv->get_vertical_spacing().to_units())
- curenv->seen_space += n.to_units()
- / curenv->get_vertical_spacing().to_units();
- if (vertical_position_traps_flag && next_trap != 0 && y >= next_trap_pos) {
- vertical_position = next_trap_pos;
- nl_reg_contents = vertical_position.to_units();
- truncated_space = y - vertical_position;
- spring_trap(next_trap->nm);
- }
- else if (y < V0) {
- vertical_position = V0;
- nl_reg_contents = vertical_position.to_units();
- }
- else if (vertical_position_traps_flag && y >= page_length && n >= V0)
- begin_page(y - page_length);
- else {
- vertical_position = y;
- nl_reg_contents = vertical_position.to_units();
- }
-}
-
-trap::trap(symbol s, vunits n, trap *p)
-: next(p), position(n), nm(s)
-{
-}
-
-void top_level_diversion::add_trap(symbol nam, vunits pos)
-{
- trap *first_free_slot = 0;
- trap **p;
- for (p = &page_trap_list; *p; p = &(*p)->next) {
- if ((*p)->nm.is_null()) {
- if (first_free_slot == 0)
- first_free_slot = *p;
- }
- else if ((*p)->position == pos) {
- (*p)->nm = nam;
- return;
- }
- }
- if (first_free_slot) {
- first_free_slot->nm = nam;
- first_free_slot->position = pos;
- }
- else
- *p = new trap(nam, pos, 0);
-}
-
-void top_level_diversion::remove_trap(symbol nam)
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->nm == nam) {
- p->nm = NULL_SYMBOL;
- return;
- }
-}
-
-void top_level_diversion::remove_trap_at(vunits pos)
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->position == pos) {
- p->nm = NULL_SYMBOL;
- return;
- }
-}
-
-void top_level_diversion::change_trap(symbol nam, vunits pos)
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->nm == nam) {
- p->position = pos;
- return;
- }
-}
-
-void top_level_diversion::print_traps()
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->nm.is_null())
- fprintf(stderr, " empty\n");
- else
- fprintf(stderr, "%s\t%d\n", p->nm.contents(), p->position.to_units());
- fflush(stderr);
-}
-
-void end_diversions()
-{
- while (curdiv != topdiv) {
- error("automatically ending diversion `%1' on exit",
- curdiv->nm.contents());
- diversion *tem = curdiv;
- curdiv = curdiv->prev;
- delete tem;
- }
-}
-
-void cleanup_and_exit(int exit_code)
-{
- if (the_output) {
- the_output->trailer(topdiv->get_page_length());
- delete the_output;
- }
- FLUSH_INPUT_PIPE(STDIN_FILENO);
- exit(exit_code);
-}
-
-// Returns non-zero if it sprung a top-of-page trap.
-// The optional parameter is for the .trunc register.
-int top_level_diversion::begin_page(vunits n)
-{
- if (exit_started) {
- if (page_count == last_page_count
- ? curenv->is_empty()
- : (done_end_macro && (seen_last_page_ejector || began_page_in_end_macro)))
- cleanup_and_exit(0);
- if (!done_end_macro)
- began_page_in_end_macro = 1;
- }
- if (last_page_number > 0 && page_number == last_page_number)
- cleanup_and_exit(0);
- if (!the_output)
- init_output();
- ++page_count;
- if (have_next_page_number) {
- page_number = next_page_number;
- have_next_page_number = 0;
- }
- else if (before_first_page == 1)
- page_number = 1;
- else
- page_number++;
- // spring the top of page trap if there is one
- vunits next_trap_pos;
- vertical_position = -vresolution;
- trap *next_trap = find_next_trap(&next_trap_pos);
- vertical_position = V0;
- high_water_mark = V0;
- ejecting_page = 0;
- // If before_first_page was 2, then the top of page transition was undone
- // using eg .nr nl 0-1. See nl_reg::set_value.
- if (before_first_page != 2)
- the_output->begin_page(page_number, page_length);
- before_first_page = 0;
- nl_reg_contents = vertical_position.to_units();
- if (vertical_position_traps_flag && next_trap != 0 && next_trap_pos == V0) {
- truncated_space = n;
- spring_trap(next_trap->nm);
- return 1;
- }
- else
- return 0;
-}
-
-void continue_page_eject()
-{
- if (topdiv->get_ejecting()) {
- if (curdiv != topdiv)
- error("can't continue page ejection because of current diversion");
- else if (!vertical_position_traps_flag)
- error("can't continue page ejection because vertical position traps disabled");
- else {
- push_page_ejector();
- topdiv->space(topdiv->get_page_length(), 1);
- }
- }
-}
-
-void top_level_diversion::set_next_page_number(int n)
-{
- next_page_number= n;
- have_next_page_number = 1;
-}
-
-int top_level_diversion::get_next_page_number()
-{
- return have_next_page_number ? next_page_number : page_number + 1;
-}
-
-void top_level_diversion::set_page_length(vunits n)
-{
- page_length = n;
-}
-
-diversion::~diversion()
-{
-}
-
-void page_offset()
-{
- hunits n;
- // The troff manual says that the default scaling indicator is v,
- // but it is in fact m: v wouldn't make sense for a horizontally
- // oriented request.
- if (!has_arg() || !get_hunits(&n, 'm', topdiv->page_offset))
- n = topdiv->prev_page_offset;
- topdiv->prev_page_offset = topdiv->page_offset;
- topdiv->page_offset = n;
- topdiv->modified_tag.incl(MTSM_PO);
- skip_line();
-}
-
-void page_length()
-{
- vunits n;
- if (has_arg() && get_vunits(&n, 'v', topdiv->get_page_length()))
- topdiv->set_page_length(n);
- else
- topdiv->set_page_length(11*units_per_inch);
- skip_line();
-}
-
-void when_request()
-{
- vunits n;
- if (get_vunits(&n, 'v')) {
- symbol s = get_name();
- if (s.is_null())
- topdiv->remove_trap_at(n);
- else
- topdiv->add_trap(s, n);
- }
- skip_line();
-}
-
-void begin_page()
-{
- int got_arg = 0;
- int n = 0; /* pacify compiler */
- if (has_arg() && get_integer(&n, topdiv->get_page_number()))
- got_arg = 1;
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (curdiv == topdiv) {
- if (topdiv->before_first_page) {
- if (!break_flag) {
- if (got_arg)
- topdiv->set_next_page_number(n);
- if (got_arg || !topdiv->no_space_mode)
- topdiv->begin_page();
- }
- else if (topdiv->no_space_mode && !got_arg)
- topdiv->begin_page();
- else {
- /* Given this
-
- .wh 0 x
- .de x
- .tm \\n%
- ..
- .bp 3
-
- troff prints
-
- 1
- 3
-
- This code makes groff do the same. */
-
- push_page_ejector();
- topdiv->begin_page();
- if (got_arg)
- topdiv->set_next_page_number(n);
- topdiv->set_ejecting();
- }
- }
- else {
- push_page_ejector();
- if (break_flag)
- curenv->do_break();
- if (got_arg)
- topdiv->set_next_page_number(n);
- if (!(topdiv->no_space_mode && !got_arg))
- topdiv->set_ejecting();
- }
- }
- tok.next();
-}
-
-void no_space()
-{
- curdiv->no_space_mode = 1;
- skip_line();
-}
-
-void restore_spacing()
-{
- curdiv->no_space_mode = 0;
- skip_line();
-}
-
-/* It is necessary to generate a break before reading the argument,
-because otherwise arguments using | will be wrong. But if we just
-generate a break as usual, then the line forced out may spring a trap
-and thus push a macro onto the input stack before we have had a chance
-to read the argument to the sp request. We resolve this dilemma by
-setting, before generating the break, a flag which will postpone the
-actual pushing of the macro associated with the trap sprung by the
-outputting of the line forced out by the break till after we have read
-the argument to the request. If the break did cause a trap to be
-sprung, then we don't actually do the space. */
-
-void space_request()
-{
- postpone_traps();
- if (break_flag)
- curenv->do_break();
- vunits n;
- if (!has_arg() || !get_vunits(&n, 'v'))
- n = curenv->get_vertical_spacing();
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (!unpostpone_traps() && !curdiv->no_space_mode)
- curdiv->space(n);
- else
- // The line might have had line spacing that was truncated.
- truncated_space += n;
-
- tok.next();
-}
-
-void blank_line()
-{
- curenv->do_break();
- if (!trap_sprung_flag && !curdiv->no_space_mode)
- curdiv->space(curenv->get_vertical_spacing());
- else
- truncated_space += curenv->get_vertical_spacing();
-}
-
-/* need_space might spring a trap and so we must be careful that the
-BEGIN_TRAP token is not skipped over. */
-
-void need_space()
-{
- vunits n;
- if (!has_arg() || !get_vunits(&n, 'v'))
- n = curenv->get_vertical_spacing();
- while (!tok.newline() && !tok.eof())
- tok.next();
- curdiv->need(n);
- tok.next();
-}
-
-void page_number()
-{
- int n;
-
- // the ps4html register is set if we are using -Tps
- // to generate images for html
- reg *r = (reg *)number_reg_dictionary.lookup("ps4html");
- if (r == NULL)
- if (has_arg() && get_integer(&n, topdiv->get_page_number()))
- topdiv->set_next_page_number(n);
- skip_line();
-}
-
-vunits saved_space;
-
-void save_vertical_space()
-{
- vunits x;
- if (!has_arg() || !get_vunits(&x, 'v'))
- x = curenv->get_vertical_spacing();
- if (curdiv->distance_to_next_trap() > x)
- curdiv->space(x, 1);
- else
- saved_space = x;
- skip_line();
-}
-
-void output_saved_vertical_space()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (saved_space > V0)
- curdiv->space(saved_space, 1);
- saved_space = V0;
- tok.next();
-}
-
-void flush_output()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- if (the_output)
- the_output->flush();
- tok.next();
-}
-
-void macro_diversion::set_diversion_trap(symbol s, vunits n)
-{
- diversion_trap = s;
- diversion_trap_pos = n;
-}
-
-void macro_diversion::clear_diversion_trap()
-{
- diversion_trap = NULL_SYMBOL;
-}
-
-void top_level_diversion::set_diversion_trap(symbol, vunits)
-{
- error("can't set diversion trap when no current diversion");
-}
-
-void top_level_diversion::clear_diversion_trap()
-{
- error("can't set diversion trap when no current diversion");
-}
-
-void diversion_trap()
-{
- vunits n;
- if (has_arg() && get_vunits(&n, 'v')) {
- symbol s = get_name();
- if (!s.is_null())
- curdiv->set_diversion_trap(s, n);
- else
- curdiv->clear_diversion_trap();
- }
- else
- curdiv->clear_diversion_trap();
- skip_line();
-}
-
-void change_trap()
-{
- symbol s = get_name(1);
- if (!s.is_null()) {
- vunits x;
- if (has_arg() && get_vunits(&x, 'v'))
- topdiv->change_trap(s, x);
- else
- topdiv->remove_trap(s);
- }
- skip_line();
-}
-
-void print_traps()
-{
- topdiv->print_traps();
- skip_line();
-}
-
-void mark()
-{
- symbol s = get_name();
- if (s.is_null())
- curdiv->marked_place = curdiv->get_vertical_position();
- else if (curdiv == topdiv)
- set_number_reg(s, nl_reg_contents);
- else
- set_number_reg(s, curdiv->get_vertical_position().to_units());
- skip_line();
-}
-
-// This is truly bizarre. It is documented in the SQ manual.
-
-void return_request()
-{
- vunits dist = curdiv->marked_place - curdiv->get_vertical_position();
- if (has_arg()) {
- if (tok.ch() == '-') {
- tok.next();
- vunits x;
- if (get_vunits(&x, 'v'))
- dist = -x;
- }
- else {
- vunits x;
- if (get_vunits(&x, 'v'))
- dist = x >= V0 ? x - curdiv->get_vertical_position() : V0;
- }
- }
- if (dist < V0)
- curdiv->space(dist);
- skip_line();
-}
-
-void vertical_position_traps()
-{
- int n;
- if (has_arg() && get_integer(&n))
- vertical_position_traps_flag = (n != 0);
- else
- vertical_position_traps_flag = 1;
- skip_line();
-}
-
-class page_offset_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int page_offset_reg::get_value(units *res)
-{
- *res = topdiv->get_page_offset().to_units();
- return 1;
-}
-
-const char *page_offset_reg::get_string()
-{
- return i_to_a(topdiv->get_page_offset().to_units());
-}
-
-class page_length_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int page_length_reg::get_value(units *res)
-{
- *res = topdiv->get_page_length().to_units();
- return 1;
-}
-
-const char *page_length_reg::get_string()
-{
- return i_to_a(topdiv->get_page_length().to_units());
-}
-
-class vertical_position_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int vertical_position_reg::get_value(units *res)
-{
- if (curdiv == topdiv && topdiv->before_first_page)
- *res = -1;
- else
- *res = curdiv->get_vertical_position().to_units();
- return 1;
-}
-
-const char *vertical_position_reg::get_string()
-{
- if (curdiv == topdiv && topdiv->before_first_page)
- return "-1";
- else
- return i_to_a(curdiv->get_vertical_position().to_units());
-}
-
-class high_water_mark_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int high_water_mark_reg::get_value(units *res)
-{
- *res = curdiv->get_high_water_mark().to_units();
- return 1;
-}
-
-const char *high_water_mark_reg::get_string()
-{
- return i_to_a(curdiv->get_high_water_mark().to_units());
-}
-
-class distance_to_next_trap_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int distance_to_next_trap_reg::get_value(units *res)
-{
- *res = curdiv->distance_to_next_trap().to_units();
- return 1;
-}
-
-const char *distance_to_next_trap_reg::get_string()
-{
- return i_to_a(curdiv->distance_to_next_trap().to_units());
-}
-
-class diversion_name_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *diversion_name_reg::get_string()
-{
- return curdiv->get_diversion_name();
-}
-
-class page_number_reg : public general_reg {
-public:
- page_number_reg();
- int get_value(units *);
- void set_value(units);
-};
-
-page_number_reg::page_number_reg()
-{
-}
-
-void page_number_reg::set_value(units n)
-{
- topdiv->set_page_number(n);
-}
-
-int page_number_reg::get_value(units *res)
-{
- *res = topdiv->get_page_number();
- return 1;
-}
-
-class next_page_number_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *next_page_number_reg::get_string()
-{
- return i_to_a(topdiv->get_next_page_number());
-}
-
-class page_ejecting_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *page_ejecting_reg::get_string()
-{
- return i_to_a(topdiv->get_ejecting());
-}
-
-class constant_vunits_reg : public reg {
- vunits *p;
-public:
- constant_vunits_reg(vunits *);
- const char *get_string();
-};
-
-constant_vunits_reg::constant_vunits_reg(vunits *q) : p(q)
-{
-}
-
-const char *constant_vunits_reg::get_string()
-{
- return i_to_a(p->to_units());
-}
-
-class nl_reg : public variable_reg {
-public:
- nl_reg();
- void set_value(units);
-};
-
-nl_reg::nl_reg() : variable_reg(&nl_reg_contents)
-{
-}
-
-void nl_reg::set_value(units n)
-{
- variable_reg::set_value(n);
- // Setting nl to a negative value when the vertical position in
- // the top-level diversion is 0 undoes the top of page transition,
- // so that the header macro will be called as if the top of page
- // transition hasn't happened. This is used by Larry Wall's
- // wrapman program. Setting before_first_page to 2 rather than 1,
- // tells top_level_diversion::begin_page not to call
- // output_file::begin_page again.
- if (n < 0 && topdiv->get_vertical_position() == V0)
- topdiv->before_first_page = 2;
-}
-
-class no_space_mode_reg : public reg {
-public:
- int get_value(units *);
- const char *get_string();
-};
-
-int no_space_mode_reg::get_value(units *val)
-{
- *val = curdiv->no_space_mode;
- return 1;
-}
-
-const char *no_space_mode_reg::get_string()
-{
- return curdiv->no_space_mode ? "1" : "0";
-}
-
-void init_div_requests()
-{
- init_request("box", box);
- init_request("boxa", box_append);
- init_request("bp", begin_page);
- init_request("ch", change_trap);
- init_request("da", divert_append);
- init_request("di", divert);
- init_request("dt", diversion_trap);
- init_request("fl", flush_output);
- init_request("mk", mark);
- init_request("ne", need_space);
- init_request("ns", no_space);
- init_request("os", output_saved_vertical_space);
- init_request("pl", page_length);
- init_request("pn", page_number);
- init_request("po", page_offset);
- init_request("ptr", print_traps);
- init_request("rs", restore_spacing);
- init_request("rt", return_request);
- init_request("sp", space_request);
- init_request("sv", save_vertical_space);
- init_request("vpt", vertical_position_traps);
- init_request("wh", when_request);
- number_reg_dictionary.define(".a",
- new constant_int_reg(&last_post_line_extra_space));
- number_reg_dictionary.define(".d", new vertical_position_reg);
- number_reg_dictionary.define(".h", new high_water_mark_reg);
- number_reg_dictionary.define(".ne",
- new constant_vunits_reg(&needed_space));
- number_reg_dictionary.define(".ns", new no_space_mode_reg);
- number_reg_dictionary.define(".o", new page_offset_reg);
- number_reg_dictionary.define(".p", new page_length_reg);
- number_reg_dictionary.define(".pe", new page_ejecting_reg);
- number_reg_dictionary.define(".pn", new next_page_number_reg);
- number_reg_dictionary.define(".t", new distance_to_next_trap_reg);
- number_reg_dictionary.define(".trunc",
- new constant_vunits_reg(&truncated_space));
- number_reg_dictionary.define(".vpt",
- new constant_int_reg(&vertical_position_traps_flag));
- number_reg_dictionary.define(".z", new diversion_name_reg);
- number_reg_dictionary.define("dl", new variable_reg(&dl_reg_contents));
- number_reg_dictionary.define("dn", new variable_reg(&dn_reg_contents));
- number_reg_dictionary.define("nl", new nl_reg);
- number_reg_dictionary.define("%", new page_number_reg);
-}
diff --git a/contrib/groff/src/roff/troff/div.h b/contrib/groff/src/roff/troff/div.h
deleted file mode 100644
index c9ff9b403061..000000000000
--- a/contrib/groff/src/roff/troff/div.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-void do_divert(int append, int boxing);
-void end_diversions();
-void page_offset();
-
-class diversion {
- friend void do_divert(int append, int boxing);
- friend void end_diversions();
- diversion *prev;
- node *saved_line;
- hunits saved_width_total;
- int saved_space_total;
- hunits saved_saved_indent;
- hunits saved_target_text_length;
- int saved_prev_line_interrupted;
-protected:
- symbol nm;
- vunits vertical_position;
- vunits high_water_mark;
-public:
- int any_chars_added;
- int no_space_mode;
- int needs_push;
- int saved_seen_break;
- int saved_seen_space;
- int saved_seen_eol;
- int saved_suppress_next_eol;
- state_set modified_tag;
- vunits marked_place;
- diversion(symbol s = NULL_SYMBOL);
- virtual ~diversion();
- virtual void output(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width) = 0;
- virtual void transparent_output(unsigned char) = 0;
- virtual void transparent_output(node *) = 0;
- virtual void space(vunits distance, int forced = 0) = 0;
-#ifdef COLUMN
- virtual void vjustify(symbol) = 0;
-#endif /* COLUMN */
- vunits get_vertical_position() { return vertical_position; }
- vunits get_high_water_mark() { return high_water_mark; }
- virtual vunits distance_to_next_trap() = 0;
- void need(vunits);
- const char *get_diversion_name() { return nm.contents(); }
- virtual void set_diversion_trap(symbol, vunits) = 0;
- virtual void clear_diversion_trap() = 0;
- virtual void copy_file(const char *filename) = 0;
- virtual int is_diversion() = 0;
-};
-
-class macro;
-
-class macro_diversion : public diversion {
- macro *mac;
- hunits max_width;
- symbol diversion_trap;
- vunits diversion_trap_pos;
-public:
- macro_diversion(symbol, int);
- ~macro_diversion();
- void output(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width);
- void transparent_output(unsigned char);
- void transparent_output(node *);
- void space(vunits distance, int forced = 0);
-#ifdef COLUMN
- void vjustify(symbol);
-#endif /* COLUMN */
- vunits distance_to_next_trap();
- void set_diversion_trap(symbol, vunits);
- void clear_diversion_trap();
- void copy_file(const char *filename);
- int is_diversion() { return 1; }
-};
-
-struct trap {
- trap *next;
- vunits position;
- symbol nm;
- trap(symbol, vunits, trap *);
-};
-
-class output_file;
-
-class top_level_diversion : public diversion {
- int page_number;
- int page_count;
- int last_page_count;
- vunits page_length;
- hunits prev_page_offset;
- hunits page_offset;
- trap *page_trap_list;
- trap *find_next_trap(vunits *);
- int have_next_page_number;
- int next_page_number;
- int ejecting_page; // Is the current page being ejected?
-public:
- int before_first_page;
- top_level_diversion();
- void output(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width);
- void transparent_output(unsigned char);
- void transparent_output(node *);
- void space(vunits distance, int forced = 0);
-#ifdef COLUMN
- void vjustify(symbol);
-#endif /* COLUMN */
- hunits get_page_offset() { return page_offset; }
- vunits get_page_length() { return page_length; }
- vunits distance_to_next_trap();
- void add_trap(symbol nm, vunits pos);
- void change_trap(symbol nm, vunits pos);
- void remove_trap(symbol);
- void remove_trap_at(vunits pos);
- void print_traps();
- int get_page_count() { return page_count; }
- int get_page_number() { return page_number; }
- int get_next_page_number();
- void set_page_number(int n) { page_number = n; }
- int begin_page(vunits = V0);
- void set_next_page_number(int);
- void set_page_length(vunits);
- void copy_file(const char *filename);
- int get_ejecting() { return ejecting_page; }
- void set_ejecting() { ejecting_page = 1; }
- friend void page_offset();
- void set_diversion_trap(symbol, vunits);
- void clear_diversion_trap();
- void set_last_page() { last_page_count = page_count; }
- int is_diversion() { return 0; }
-};
-
-extern top_level_diversion *topdiv;
-extern diversion *curdiv;
-
-extern int exit_started;
-extern int done_end_macro;
-extern int last_page_number;
-extern int seen_last_page_ejector;
-
-void spring_trap(symbol); // implemented by input.c
-extern int trap_sprung_flag;
-void postpone_traps();
-int unpostpone_traps();
-
-void push_page_ejector();
-void continue_page_eject();
-void handle_first_page_transition();
-void blank_line();
-void begin_page();
-
-extern void cleanup_and_exit(int);
diff --git a/contrib/groff/src/roff/troff/env.cpp b/contrib/groff/src/roff/troff/env.cpp
deleted file mode 100644
index 9de9a46aa507..000000000000
--- a/contrib/groff/src/roff/troff/env.cpp
+++ /dev/null
@@ -1,3893 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "troff.h"
-#include "dictionary.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "token.h"
-#include "div.h"
-#include "reg.h"
-#include "charinfo.h"
-#include "macropath.h"
-#include "input.h"
-#include <math.h>
-
-symbol default_family("T");
-
-enum { ADJUST_LEFT = 0, ADJUST_BOTH = 1, ADJUST_CENTER = 3, ADJUST_RIGHT = 5 };
-
-enum { HYPHEN_LAST_LINE = 2, HYPHEN_LAST_CHARS = 4, HYPHEN_FIRST_CHARS = 8 };
-
-struct env_list {
- environment *env;
- env_list *next;
- env_list(environment *e, env_list *p) : env(e), next(p) {}
-};
-
-env_list *env_stack;
-const int NENVIRONMENTS = 10;
-environment *env_table[NENVIRONMENTS];
-dictionary env_dictionary(10);
-environment *curenv;
-static int next_line_number = 0;
-extern int suppress_push;
-extern statem *get_diversion_state();
-
-charinfo *field_delimiter_char;
-charinfo *padding_indicator_char;
-
-int translate_space_to_dummy = 0;
-
-class pending_output_line {
- node *nd;
- int no_fill;
- int was_centered;
- vunits vs;
- vunits post_vs;
- hunits width;
-#ifdef WIDOW_CONTROL
- int last_line; // Is it the last line of the paragraph?
-#endif /* WIDOW_CONTROL */
-public:
- pending_output_line *next;
-
- pending_output_line(node *, int, vunits, vunits, hunits, int,
- pending_output_line * = 0);
- ~pending_output_line();
- int output();
-
-#ifdef WIDOW_CONTROL
- friend void environment::mark_last_line();
- friend void environment::output(node *, int, vunits, vunits, hunits, int);
-#endif /* WIDOW_CONTROL */
-};
-
-pending_output_line::pending_output_line(node *n, int nf, vunits v, vunits pv,
- hunits w, int ce,
- pending_output_line *p)
-: nd(n), no_fill(nf), was_centered(ce), vs(v), post_vs(pv), width(w),
-#ifdef WIDOW_CONTROL
- last_line(0),
-#endif /* WIDOW_CONTROL */
- next(p)
-{
-}
-
-pending_output_line::~pending_output_line()
-{
- delete_node_list(nd);
-}
-
-int pending_output_line::output()
-{
- if (trap_sprung_flag)
- return 0;
-#ifdef WIDOW_CONTROL
- if (next && next->last_line && !no_fill) {
- curdiv->need(vs + post_vs + vunits(vresolution));
- if (trap_sprung_flag) {
- next->last_line = 0; // Try to avoid infinite loops.
- return 0;
- }
- }
-#endif
- curenv->construct_format_state(nd, was_centered, !no_fill);
- curdiv->output(nd, no_fill, vs, post_vs, width);
- nd = 0;
- return 1;
-}
-
-void environment::output(node *nd, int no_fill_flag,
- vunits vs, vunits post_vs,
- hunits width, int was_centered)
-{
-#ifdef WIDOW_CONTROL
- while (pending_lines) {
- if (widow_control && !pending_lines->no_fill && !pending_lines->next)
- break;
- if (!pending_lines->output())
- break;
- pending_output_line *tem = pending_lines;
- pending_lines = pending_lines->next;
- delete tem;
- }
-#else /* WIDOW_CONTROL */
- output_pending_lines();
-#endif /* WIDOW_CONTROL */
- if (!trap_sprung_flag && !pending_lines
-#ifdef WIDOW_CONTROL
- && (!widow_control || no_fill_flag)
-#endif /* WIDOW_CONTROL */
- ) {
- curenv->construct_format_state(nd, was_centered, !no_fill_flag);
- curdiv->output(nd, no_fill_flag, vs, post_vs, width);
- } else {
- pending_output_line **p;
- for (p = &pending_lines; *p; p = &(*p)->next)
- ;
- *p = new pending_output_line(nd, no_fill_flag, vs, post_vs, width,
- was_centered);
- }
-}
-
-// a line from .tl goes at the head of the queue
-
-void environment::output_title(node *nd, int no_fill_flag,
- vunits vs, vunits post_vs,
- hunits width)
-{
- if (!trap_sprung_flag)
- curdiv->output(nd, no_fill_flag, vs, post_vs, width);
- else
- pending_lines = new pending_output_line(nd, no_fill_flag, vs, post_vs,
- width, 0, pending_lines);
-}
-
-void environment::output_pending_lines()
-{
- while (pending_lines && pending_lines->output()) {
- pending_output_line *tem = pending_lines;
- pending_lines = pending_lines->next;
- delete tem;
- }
-}
-
-#ifdef WIDOW_CONTROL
-
-void environment::mark_last_line()
-{
- if (!widow_control || !pending_lines)
- return;
- pending_output_line *p;
- for (p = pending_lines; p->next; p = p->next)
- ;
- if (!p->no_fill)
- p->last_line = 1;
-}
-
-void widow_control_request()
-{
- int n;
- if (has_arg() && get_integer(&n))
- curenv->widow_control = n != 0;
- else
- curenv->widow_control = 1;
- skip_line();
-}
-
-#endif /* WIDOW_CONTROL */
-
-/* font_size functions */
-
-size_range *font_size::size_table = 0;
-int font_size::nranges = 0;
-
-extern "C" {
-
-int compare_ranges(const void *p1, const void *p2)
-{
- return ((size_range *)p1)->min - ((size_range *)p2)->min;
-}
-
-}
-
-void font_size::init_size_table(int *sizes)
-{
- nranges = 0;
- while (sizes[nranges*2] != 0)
- nranges++;
- assert(nranges > 0);
- size_table = new size_range[nranges];
- for (int i = 0; i < nranges; i++) {
- size_table[i].min = sizes[i*2];
- size_table[i].max = sizes[i*2 + 1];
- }
- qsort(size_table, nranges, sizeof(size_range), compare_ranges);
-}
-
-font_size::font_size(int sp)
-{
- for (int i = 0; i < nranges; i++) {
- if (sp < size_table[i].min) {
- if (i > 0 && size_table[i].min - sp >= sp - size_table[i - 1].max)
- p = size_table[i - 1].max;
- else
- p = size_table[i].min;
- return;
- }
- if (sp <= size_table[i].max) {
- p = sp;
- return;
- }
- }
- p = size_table[nranges - 1].max;
-}
-
-int font_size::to_units()
-{
- return scale(p, units_per_inch, sizescale*72);
-}
-
-// we can't do this in a static constructor because various dictionaries
-// have to get initialized first
-
-void init_environments()
-{
- curenv = env_table[0] = new environment("0");
-}
-
-void tab_character()
-{
- curenv->tab_char = get_optional_char();
- skip_line();
-}
-
-void leader_character()
-{
- curenv->leader_char = get_optional_char();
- skip_line();
-}
-
-void environment::add_char(charinfo *ci)
-{
- int s;
- node *gc_np = 0;
- if (interrupted)
- ;
- // don't allow fields in dummy environments
- else if (ci == field_delimiter_char && !dummy) {
- if (current_field)
- wrap_up_field();
- else
- start_field();
- }
- else if (current_field && ci == padding_indicator_char)
- add_padding();
- else if (current_tab) {
- if (tab_contents == 0)
- tab_contents = new line_start_node;
- if (ci != hyphen_indicator_char)
- tab_contents = tab_contents->add_char(ci, this, &tab_width, &s, &gc_np);
- else
- tab_contents = tab_contents->add_discretionary_hyphen();
- }
- else {
- if (line == 0)
- start_line();
-#if 0
- fprintf(stderr, "current line is\n");
- line->debug_node_list();
-#endif
- if (ci != hyphen_indicator_char)
- line = line->add_char(ci, this, &width_total, &space_total, &gc_np);
- else
- line = line->add_discretionary_hyphen();
- }
-#if 0
- fprintf(stderr, "now after we have added character the line is\n");
- line->debug_node_list();
-#endif
- if ((!suppress_push) && gc_np) {
- if (gc_np && (gc_np->state == 0)) {
- gc_np->state = construct_state(0);
- gc_np->push_state = get_diversion_state();
- }
- else if (line && (line->state == 0)) {
- line->state = construct_state(0);
- line->push_state = get_diversion_state();
- }
- }
-#if 0
- fprintf(stderr, "now we have possibly added the state the line is\n");
- line->debug_node_list();
-#endif
-}
-
-node *environment::make_char_node(charinfo *ci)
-{
- return make_node(ci, this);
-}
-
-void environment::add_node(node *n)
-{
- if (n == 0)
- return;
- if (!suppress_push) {
- if (n->is_special && n->state == NULL)
- n->state = construct_state(0);
- n->push_state = get_diversion_state();
- }
-
- if (current_tab || current_field)
- n->freeze_space();
- if (interrupted) {
- delete n;
- }
- else if (current_tab) {
- n->next = tab_contents;
- tab_contents = n;
- tab_width += n->width();
- }
- else {
- if (line == 0) {
- if (discarding && n->discardable()) {
- // XXX possibly: input_line_start -= n->width();
- delete n;
- return;
- }
- start_line();
- }
- width_total += n->width();
- space_total += n->nspaces();
- n->next = line;
- line = n;
- construct_new_line_state(line);
- }
-}
-
-void environment::add_hyphen_indicator()
-{
- if (current_tab || interrupted || current_field
- || hyphen_indicator_char != 0)
- return;
- if (line == 0)
- start_line();
- line = line->add_discretionary_hyphen();
-}
-
-int environment::get_hyphenation_flags()
-{
- return hyphenation_flags;
-}
-
-int environment::get_hyphen_line_max()
-{
- return hyphen_line_max;
-}
-
-int environment::get_hyphen_line_count()
-{
- return hyphen_line_count;
-}
-
-int environment::get_center_lines()
-{
- return center_lines;
-}
-
-int environment::get_right_justify_lines()
-{
- return right_justify_lines;
-}
-
-void environment::add_italic_correction()
-{
- if (current_tab) {
- if (tab_contents)
- tab_contents = tab_contents->add_italic_correction(&tab_width);
- }
- else if (line)
- line = line->add_italic_correction(&width_total);
-}
-
-void environment::space_newline()
-{
- assert(!current_tab && !current_field);
- if (interrupted)
- return;
- hunits x = H0;
- hunits sw = env_space_width(this);
- hunits ssw = env_sentence_space_width(this);
- if (!translate_space_to_dummy) {
- x = sw;
- if (node_list_ends_sentence(line) == 1)
- x += ssw;
- }
- width_list *w = new width_list(sw, ssw);
- if (node_list_ends_sentence(line) == 1)
- w->next = new width_list(sw, ssw);
- if (line != 0 && line->merge_space(x, sw, ssw)) {
- width_total += x;
- return;
- }
- add_node(new word_space_node(x, get_fill_color(), w));
- possibly_break_line(0, spread_flag);
- spread_flag = 0;
-}
-
-void environment::space()
-{
- space(env_space_width(this), env_sentence_space_width(this));
-}
-
-void environment::space(hunits space_width, hunits sentence_space_width)
-{
- if (interrupted)
- return;
- if (current_field && padding_indicator_char == 0) {
- add_padding();
- return;
- }
- hunits x = translate_space_to_dummy ? H0 : space_width;
- node *p = current_tab ? tab_contents : line;
- hunits *tp = current_tab ? &tab_width : &width_total;
- if (p && p->nspaces() == 1 && p->width() == x
- && node_list_ends_sentence(p->next) == 1) {
- hunits xx = translate_space_to_dummy ? H0 : sentence_space_width;
- if (p->merge_space(xx, space_width, sentence_space_width)) {
- *tp += xx;
- return;
- }
- }
- if (p && p->merge_space(x, space_width, sentence_space_width)) {
- *tp += x;
- return;
- }
- add_node(new word_space_node(x,
- get_fill_color(),
- new width_list(space_width,
- sentence_space_width)));
- possibly_break_line(0, spread_flag);
- spread_flag = 0;
-}
-
-node *do_underline_special(int);
-
-void environment::set_font(symbol nm)
-{
- if (interrupted)
- return;
- if (nm == symbol("P") || nm.is_empty()) {
- if (family->make_definite(prev_fontno) < 0)
- return;
- int tem = fontno;
- fontno = prev_fontno;
- prev_fontno = tem;
- }
- else {
- prev_fontno = fontno;
- int n = symbol_fontno(nm);
- if (n < 0) {
- n = next_available_font_position();
- if (!mount_font(n, nm))
- return;
- }
- if (family->make_definite(n) < 0)
- return;
- fontno = n;
- }
- if (underline_spaces && fontno != prev_fontno) {
- if (fontno == get_underline_fontno())
- add_node(do_underline_special(1));
- if (prev_fontno == get_underline_fontno())
- add_node(do_underline_special(0));
- }
-}
-
-void environment::set_font(int n)
-{
- if (interrupted)
- return;
- if (is_good_fontno(n)) {
- prev_fontno = fontno;
- fontno = n;
- }
- else
- warning(WARN_FONT, "bad font number");
-}
-
-void environment::set_family(symbol fam)
-{
- if (interrupted)
- return;
- if (fam.is_null() || fam.is_empty()) {
- if (prev_family->make_definite(fontno) < 0)
- return;
- font_family *tem = family;
- family = prev_family;
- prev_family = tem;
- }
- else {
- font_family *f = lookup_family(fam);
- if (f->make_definite(fontno) < 0)
- return;
- prev_family = family;
- family = f;
- }
-}
-
-void environment::set_size(int n)
-{
- if (interrupted)
- return;
- if (n == 0) {
- font_size temp = prev_size;
- prev_size = size;
- size = temp;
- int temp2 = prev_requested_size;
- prev_requested_size = requested_size;
- requested_size = temp2;
- }
- else {
- prev_size = size;
- size = font_size(n);
- prev_requested_size = requested_size;
- requested_size = n;
- }
-}
-
-void environment::set_char_height(int n)
-{
- if (interrupted)
- return;
- if (n == requested_size || n <= 0)
- char_height = 0;
- else
- char_height = n;
-}
-
-void environment::set_char_slant(int n)
-{
- if (interrupted)
- return;
- char_slant = n;
-}
-
-color *environment::get_prev_glyph_color()
-{
- return prev_glyph_color;
-}
-
-color *environment::get_glyph_color()
-{
- return glyph_color;
-}
-
-color *environment::get_prev_fill_color()
-{
- return prev_fill_color;
-}
-
-color *environment::get_fill_color()
-{
- return fill_color;
-}
-
-void environment::set_glyph_color(color *c)
-{
- if (interrupted)
- return;
- curenv->prev_glyph_color = curenv->glyph_color;
- curenv->glyph_color = c;
-}
-
-void environment::set_fill_color(color *c)
-{
- if (interrupted)
- return;
- curenv->prev_fill_color = curenv->fill_color;
- curenv->fill_color = c;
-}
-
-environment::environment(symbol nm)
-: dummy(0),
- prev_line_length((units_per_inch*13)/2),
- line_length((units_per_inch*13)/2),
- prev_title_length((units_per_inch*13)/2),
- title_length((units_per_inch*13)/2),
- prev_size(sizescale*10),
- size(sizescale*10),
- requested_size(sizescale*10),
- prev_requested_size(sizescale*10),
- char_height(0),
- char_slant(0),
- space_size(12),
- sentence_space_size(12),
- adjust_mode(ADJUST_BOTH),
- fill(1),
- interrupted(0),
- prev_line_interrupted(0),
- center_lines(0),
- right_justify_lines(0),
- prev_vertical_spacing(points_to_units(12)),
- vertical_spacing(points_to_units(12)),
- prev_post_vertical_spacing(0),
- post_vertical_spacing(0),
- prev_line_spacing(1),
- line_spacing(1),
- prev_indent(0),
- indent(0),
- temporary_indent(0),
- have_temporary_indent(0),
- underline_lines(0),
- underline_spaces(0),
- input_trap_count(0),
- continued_input_trap(0),
- line(0),
- prev_text_length(0),
- width_total(0),
- space_total(0),
- input_line_start(0),
- line_tabs(0),
- current_tab(TAB_NONE),
- leader_node(0),
- tab_char(0),
- leader_char(charset_table['.']),
- current_field(0),
- discarding(0),
- spread_flag(0),
- margin_character_flags(0),
- margin_character_node(0),
- margin_character_distance(points_to_units(10)),
- numbering_nodes(0),
- number_text_separation(1),
- line_number_indent(0),
- line_number_multiple(1),
- no_number_count(0),
- hyphenation_flags(1),
- hyphen_line_count(0),
- hyphen_line_max(-1),
- hyphenation_space(H0),
- hyphenation_margin(H0),
- composite(0),
- pending_lines(0),
-#ifdef WIDOW_CONTROL
- widow_control(0),
-#endif /* WIDOW_CONTROL */
- glyph_color(&default_color),
- prev_glyph_color(&default_color),
- fill_color(&default_color),
- prev_fill_color(&default_color),
- seen_space(0),
- seen_eol(0),
- suppress_next_eol(0),
- seen_break(0),
- tabs(units_per_inch/2, TAB_LEFT),
- name(nm),
- control_char('.'),
- no_break_control_char('\''),
- hyphen_indicator_char(0)
-{
- prev_family = family = lookup_family(default_family);
- prev_fontno = fontno = 1;
- if (!is_good_fontno(1))
- fatal("font number 1 not a valid font");
- if (family->make_definite(1) < 0)
- fatal("invalid default family `%1'", default_family.contents());
- prev_fontno = fontno;
-}
-
-environment::environment(const environment *e)
-: dummy(1),
- prev_line_length(e->prev_line_length),
- line_length(e->line_length),
- prev_title_length(e->prev_title_length),
- title_length(e->title_length),
- prev_size(e->prev_size),
- size(e->size),
- requested_size(e->requested_size),
- prev_requested_size(e->prev_requested_size),
- char_height(e->char_height),
- char_slant(e->char_slant),
- prev_fontno(e->prev_fontno),
- fontno(e->fontno),
- prev_family(e->prev_family),
- family(e->family),
- space_size(e->space_size),
- sentence_space_size(e->sentence_space_size),
- adjust_mode(e->adjust_mode),
- fill(e->fill),
- interrupted(0),
- prev_line_interrupted(0),
- center_lines(0),
- right_justify_lines(0),
- prev_vertical_spacing(e->prev_vertical_spacing),
- vertical_spacing(e->vertical_spacing),
- prev_post_vertical_spacing(e->prev_post_vertical_spacing),
- post_vertical_spacing(e->post_vertical_spacing),
- prev_line_spacing(e->prev_line_spacing),
- line_spacing(e->line_spacing),
- prev_indent(e->prev_indent),
- indent(e->indent),
- temporary_indent(0),
- have_temporary_indent(0),
- underline_lines(0),
- underline_spaces(0),
- input_trap_count(0),
- continued_input_trap(0),
- line(0),
- prev_text_length(e->prev_text_length),
- width_total(0),
- space_total(0),
- input_line_start(0),
- line_tabs(e->line_tabs),
- current_tab(TAB_NONE),
- leader_node(0),
- tab_char(e->tab_char),
- leader_char(e->leader_char),
- current_field(0),
- discarding(0),
- spread_flag(0),
- margin_character_flags(e->margin_character_flags),
- margin_character_node(e->margin_character_node),
- margin_character_distance(e->margin_character_distance),
- numbering_nodes(0),
- number_text_separation(e->number_text_separation),
- line_number_indent(e->line_number_indent),
- line_number_multiple(e->line_number_multiple),
- no_number_count(e->no_number_count),
- hyphenation_flags(e->hyphenation_flags),
- hyphen_line_count(0),
- hyphen_line_max(e->hyphen_line_max),
- hyphenation_space(e->hyphenation_space),
- hyphenation_margin(e->hyphenation_margin),
- composite(0),
- pending_lines(0),
-#ifdef WIDOW_CONTROL
- widow_control(e->widow_control),
-#endif /* WIDOW_CONTROL */
- glyph_color(e->glyph_color),
- prev_glyph_color(e->prev_glyph_color),
- fill_color(e->fill_color),
- prev_fill_color(e->prev_fill_color),
- seen_space(e->seen_space),
- seen_eol(e->seen_eol),
- suppress_next_eol(e->suppress_next_eol),
- seen_break(e->seen_break),
- tabs(e->tabs),
- name(e->name), // so that eg `.if "\n[.ev]"0"' works
- control_char(e->control_char),
- no_break_control_char(e->no_break_control_char),
- hyphen_indicator_char(e->hyphen_indicator_char)
-{
-}
-
-void environment::copy(const environment *e)
-{
- prev_line_length = e->prev_line_length;
- line_length = e->line_length;
- prev_title_length = e->prev_title_length;
- title_length = e->title_length;
- prev_size = e->prev_size;
- size = e->size;
- prev_requested_size = e->prev_requested_size;
- requested_size = e->requested_size;
- char_height = e->char_height;
- char_slant = e->char_slant;
- space_size = e->space_size;
- sentence_space_size = e->sentence_space_size;
- adjust_mode = e->adjust_mode;
- fill = e->fill;
- interrupted = 0;
- prev_line_interrupted = 0;
- center_lines = 0;
- right_justify_lines = 0;
- prev_vertical_spacing = e->prev_vertical_spacing;
- vertical_spacing = e->vertical_spacing;
- prev_post_vertical_spacing = e->prev_post_vertical_spacing,
- post_vertical_spacing = e->post_vertical_spacing,
- prev_line_spacing = e->prev_line_spacing;
- line_spacing = e->line_spacing;
- prev_indent = e->prev_indent;
- indent = e->indent;
- have_temporary_indent = 0;
- temporary_indent = 0;
- underline_lines = 0;
- underline_spaces = 0;
- input_trap_count = 0;
- continued_input_trap = 0;
- prev_text_length = e->prev_text_length;
- width_total = 0;
- space_total = 0;
- input_line_start = 0;
- control_char = e->control_char;
- no_break_control_char = e->no_break_control_char;
- hyphen_indicator_char = e->hyphen_indicator_char;
- spread_flag = 0;
- line = 0;
- pending_lines = 0;
- discarding = 0;
- tabs = e->tabs;
- line_tabs = e->line_tabs;
- current_tab = TAB_NONE;
- current_field = 0;
- margin_character_flags = e->margin_character_flags;
- margin_character_node = e->margin_character_node;
- margin_character_distance = e->margin_character_distance;
- numbering_nodes = 0;
- number_text_separation = e->number_text_separation;
- line_number_multiple = e->line_number_multiple;
- line_number_indent = e->line_number_indent;
- no_number_count = e->no_number_count;
- tab_char = e->tab_char;
- leader_char = e->leader_char;
- hyphenation_flags = e->hyphenation_flags;
- fontno = e->fontno;
- prev_fontno = e->prev_fontno;
- dummy = e->dummy;
- family = e->family;
- prev_family = e->prev_family;
- leader_node = 0;
-#ifdef WIDOW_CONTROL
- widow_control = e->widow_control;
-#endif /* WIDOW_CONTROL */
- hyphen_line_max = e->hyphen_line_max;
- hyphen_line_count = 0;
- hyphenation_space = e->hyphenation_space;
- hyphenation_margin = e->hyphenation_margin;
- composite = 0;
- glyph_color= e->glyph_color;
- prev_glyph_color = e->prev_glyph_color;
- fill_color = e->fill_color;
- prev_fill_color = e->prev_fill_color;
-}
-
-environment::~environment()
-{
- delete leader_node;
- delete_node_list(line);
- delete_node_list(numbering_nodes);
-}
-
-hunits environment::get_input_line_position()
-{
- hunits n;
- if (line == 0)
- n = -input_line_start;
- else
- n = width_total - input_line_start;
- if (current_tab)
- n += tab_width;
- return n;
-}
-
-void environment::set_input_line_position(hunits n)
-{
- input_line_start = line == 0 ? -n : width_total - n;
- if (current_tab)
- input_line_start += tab_width;
-}
-
-hunits environment::get_line_length()
-{
- return line_length;
-}
-
-hunits environment::get_saved_line_length()
-{
- if (line)
- return target_text_length + saved_indent;
- else
- return line_length;
-}
-
-vunits environment::get_vertical_spacing()
-{
- return vertical_spacing;
-}
-
-vunits environment::get_post_vertical_spacing()
-{
- return post_vertical_spacing;
-}
-
-int environment::get_line_spacing()
-{
- return line_spacing;
-}
-
-vunits environment::total_post_vertical_spacing()
-{
- vunits tem(post_vertical_spacing);
- if (line_spacing > 1)
- tem += (line_spacing - 1)*vertical_spacing;
- return tem;
-}
-
-int environment::get_bold()
-{
- return get_bold_fontno(fontno);
-}
-
-hunits environment::get_digit_width()
-{
- return env_digit_width(this);
-}
-
-int environment::get_adjust_mode()
-{
- return adjust_mode;
-}
-
-int environment::get_fill()
-{
- return fill;
-}
-
-hunits environment::get_indent()
-{
- return indent;
-}
-
-hunits environment::get_saved_indent()
-{
- if (line)
- return saved_indent;
- else if (have_temporary_indent)
- return temporary_indent;
- else
- return indent;
-}
-
-hunits environment::get_temporary_indent()
-{
- return temporary_indent;
-}
-
-hunits environment::get_title_length()
-{
- return title_length;
-}
-
-node *environment::get_prev_char()
-{
- for (node *n = current_tab ? tab_contents : line; n; n = n->next) {
- node *last = n->last_char_node();
- if (last)
- return last;
- }
- return 0;
-}
-
-hunits environment::get_prev_char_width()
-{
- node *last = get_prev_char();
- if (!last)
- return H0;
- return last->width();
-}
-
-hunits environment::get_prev_char_skew()
-{
- node *last = get_prev_char();
- if (!last)
- return H0;
- return last->skew();
-}
-
-vunits environment::get_prev_char_height()
-{
- node *last = get_prev_char();
- if (!last)
- return V0;
- vunits min, max;
- last->vertical_extent(&min, &max);
- return -min;
-}
-
-vunits environment::get_prev_char_depth()
-{
- node *last = get_prev_char();
- if (!last)
- return V0;
- vunits min, max;
- last->vertical_extent(&min, &max);
- return max;
-}
-
-hunits environment::get_text_length()
-{
- hunits n = line == 0 ? H0 : width_total;
- if (current_tab)
- n += tab_width;
- return n;
-}
-
-hunits environment::get_prev_text_length()
-{
- return prev_text_length;
-}
-
-
-static int sb_reg_contents = 0;
-static int st_reg_contents = 0;
-static int ct_reg_contents = 0;
-static int rsb_reg_contents = 0;
-static int rst_reg_contents = 0;
-static int skw_reg_contents = 0;
-static int ssc_reg_contents = 0;
-
-void environment::width_registers()
-{
- // this is used to implement \w; it sets the st, sb, ct registers
- vunits min = 0, max = 0, cur = 0;
- int character_type = 0;
- ssc_reg_contents = line ? line->subscript_correction().to_units() : 0;
- skw_reg_contents = line ? line->skew().to_units() : 0;
- line = reverse_node_list(line);
- vunits real_min = V0;
- vunits real_max = V0;
- vunits v1, v2;
- for (node *tem = line; tem; tem = tem->next) {
- tem->vertical_extent(&v1, &v2);
- v1 += cur;
- if (v1 < real_min)
- real_min = v1;
- v2 += cur;
- if (v2 > real_max)
- real_max = v2;
- if ((cur += tem->vertical_width()) < min)
- min = cur;
- else if (cur > max)
- max = cur;
- character_type |= tem->character_type();
- }
- line = reverse_node_list(line);
- st_reg_contents = -min.to_units();
- sb_reg_contents = -max.to_units();
- rst_reg_contents = -real_min.to_units();
- rsb_reg_contents = -real_max.to_units();
- ct_reg_contents = character_type;
-}
-
-node *environment::extract_output_line()
-{
- if (current_tab)
- wrap_up_tab();
- node *n = line;
- line = 0;
- return n;
-}
-
-/* environment related requests */
-
-void environment_switch()
-{
- int pop = 0; // 1 means pop, 2 means pop but no error message on underflow
- if (curenv->is_dummy())
- error("can't switch environments when current environment is dummy");
- else if (!has_arg())
- pop = 1;
- else {
- symbol nm;
- if (!tok.delimiter()) {
- // It looks like a number.
- int n;
- if (get_integer(&n)) {
- if (n >= 0 && n < NENVIRONMENTS) {
- env_stack = new env_list(curenv, env_stack);
- if (env_table[n] == 0)
- env_table[n] = new environment(i_to_a(n));
- curenv = env_table[n];
- }
- else
- nm = i_to_a(n);
- }
- else
- pop = 2;
- }
- else {
- nm = get_long_name(1);
- if (nm.is_null())
- pop = 2;
- }
- if (!nm.is_null()) {
- environment *e = (environment *)env_dictionary.lookup(nm);
- if (!e) {
- e = new environment(nm);
- (void)env_dictionary.lookup(nm, e);
- }
- env_stack = new env_list(curenv, env_stack);
- curenv = e;
- }
- }
- if (pop) {
- if (env_stack == 0) {
- if (pop == 1)
- error("environment stack underflow");
- }
- else {
- int seen_space = curenv->seen_space;
- int seen_eol = curenv->seen_eol;
- int suppress_next_eol = curenv->suppress_next_eol;
- curenv = env_stack->env;
- curenv->seen_space = seen_space;
- curenv->seen_eol = seen_eol;
- curenv->suppress_next_eol = suppress_next_eol;
- env_list *tem = env_stack;
- env_stack = env_stack->next;
- delete tem;
- }
- }
- skip_line();
-}
-
-void environment_copy()
-{
- symbol nm;
- environment *e=0;
- tok.skip();
- if (!tok.delimiter()) {
- // It looks like a number.
- int n;
- if (get_integer(&n)) {
- if (n >= 0 && n < NENVIRONMENTS)
- e = env_table[n];
- else
- nm = i_to_a(n);
- }
- }
- else
- nm = get_long_name(1);
- if (!e && !nm.is_null())
- e = (environment *)env_dictionary.lookup(nm);
- if (e == 0) {
- error("No environment to copy from");
- return;
- }
- else
- curenv->copy(e);
- skip_line();
-}
-
-void fill_color_change()
-{
- symbol s = get_name();
- if (s.is_null())
- curenv->set_fill_color(curenv->get_prev_fill_color());
- else
- do_fill_color(s);
- skip_line();
-}
-
-void glyph_color_change()
-{
- symbol s = get_name();
- if (s.is_null())
- curenv->set_glyph_color(curenv->get_prev_glyph_color());
- else
- do_glyph_color(s);
- skip_line();
-}
-
-static symbol P_symbol("P");
-
-void font_change()
-{
- symbol s = get_name();
- int is_number = 1;
- if (s.is_null() || s == P_symbol) {
- s = P_symbol;
- is_number = 0;
- }
- else {
- for (const char *p = s.contents(); p != 0 && *p != 0; p++)
- if (!csdigit(*p)) {
- is_number = 0;
- break;
- }
- }
- if (is_number)
- curenv->set_font(atoi(s.contents()));
- else
- curenv->set_font(s);
- skip_line();
-}
-
-void family_change()
-{
- symbol s = get_name();
- curenv->set_family(s);
- skip_line();
-}
-
-void point_size()
-{
- int n;
- if (has_arg() && get_number(&n, 'z', curenv->get_requested_point_size())) {
- if (n <= 0)
- n = 1;
- curenv->set_size(n);
- }
- else
- curenv->set_size(0);
- skip_line();
-}
-
-void override_sizes()
-{
- int n = 16;
- int *sizes = new int[n];
- int i = 0;
- char *buf = read_string();
- if (!buf)
- return;
- char *p = strtok(buf, " \t");
- for (;;) {
- if (!p)
- break;
- int lower, upper;
- switch (sscanf(p, "%d-%d", &lower, &upper)) {
- case 1:
- upper = lower;
- // fall through
- case 2:
- if (lower <= upper && lower >= 0)
- break;
- // fall through
- default:
- warning(WARN_RANGE, "bad size range `%1'", p);
- return;
- }
- if (i + 2 > n) {
- int *old_sizes = sizes;
- sizes = new int[n*2];
- memcpy(sizes, old_sizes, n*sizeof(int));
- n *= 2;
- a_delete old_sizes;
- }
- sizes[i++] = lower;
- if (lower == 0)
- break;
- sizes[i++] = upper;
- p = strtok(0, " \t");
- }
- font_size::init_size_table(sizes);
-}
-
-void space_size()
-{
- int n;
- if (get_integer(&n)) {
- curenv->space_size = n;
- if (has_arg() && get_integer(&n))
- curenv->sentence_space_size = n;
- else
- curenv->sentence_space_size = curenv->space_size;
- }
- skip_line();
-}
-
-void fill()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- curenv->fill = 1;
- tok.next();
-}
-
-void no_fill()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- curenv->fill = 0;
- curenv->suppress_next_eol = 1;
- tok.next();
-}
-
-void center()
-{
- int n;
- if (!has_arg() || !get_integer(&n))
- n = 1;
- else if (n < 0)
- n = 0;
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- curenv->right_justify_lines = 0;
- curenv->center_lines = n;
- curdiv->modified_tag.incl(MTSM_CE);
- tok.next();
-}
-
-void right_justify()
-{
- int n;
- if (!has_arg() || !get_integer(&n))
- n = 1;
- else if (n < 0)
- n = 0;
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- curenv->center_lines = 0;
- curenv->right_justify_lines = n;
- curdiv->modified_tag.incl(MTSM_RJ);
- tok.next();
-}
-
-void line_length()
-{
- hunits temp;
- if (has_arg() && get_hunits(&temp, 'm', curenv->line_length)) {
- if (temp < H0) {
- warning(WARN_RANGE, "bad line length %1u", temp.to_units());
- temp = H0;
- }
- }
- else
- temp = curenv->prev_line_length;
- curenv->prev_line_length = curenv->line_length;
- curenv->line_length = temp;
- curdiv->modified_tag.incl(MTSM_LL);
- skip_line();
-}
-
-void title_length()
-{
- hunits temp;
- if (has_arg() && get_hunits(&temp, 'm', curenv->title_length)) {
- if (temp < H0) {
- warning(WARN_RANGE, "bad title length %1u", temp.to_units());
- temp = H0;
- }
- }
- else
- temp = curenv->prev_title_length;
- curenv->prev_title_length = curenv->title_length;
- curenv->title_length = temp;
- skip_line();
-}
-
-void vertical_spacing()
-{
- vunits temp;
- if (has_arg() && get_vunits(&temp, 'p', curenv->vertical_spacing)) {
- if (temp < V0) {
- warning(WARN_RANGE, "vertical spacing must not be negative");
- temp = vresolution;
- }
- }
- else
- temp = curenv->prev_vertical_spacing;
- curenv->prev_vertical_spacing = curenv->vertical_spacing;
- curenv->vertical_spacing = temp;
- skip_line();
-}
-
-void post_vertical_spacing()
-{
- vunits temp;
- if (has_arg() && get_vunits(&temp, 'p', curenv->post_vertical_spacing)) {
- if (temp < V0) {
- warning(WARN_RANGE,
- "post vertical spacing must be greater than or equal to 0");
- temp = V0;
- }
- }
- else
- temp = curenv->prev_post_vertical_spacing;
- curenv->prev_post_vertical_spacing = curenv->post_vertical_spacing;
- curenv->post_vertical_spacing = temp;
- skip_line();
-}
-
-void line_spacing()
-{
- int temp;
- if (has_arg() && get_integer(&temp)) {
- if (temp < 1) {
- warning(WARN_RANGE, "value %1 out of range: interpreted as 1", temp);
- temp = 1;
- }
- }
- else
- temp = curenv->prev_line_spacing;
- curenv->prev_line_spacing = curenv->line_spacing;
- curenv->line_spacing = temp;
- skip_line();
-}
-
-void indent()
-{
- hunits temp;
- if (has_arg() && get_hunits(&temp, 'm', curenv->indent)) {
- if (temp < H0) {
- warning(WARN_RANGE, "indent cannot be negative");
- temp = H0;
- }
- }
- else
- temp = curenv->prev_indent;
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- curenv->have_temporary_indent = 0;
- curenv->prev_indent = curenv->indent;
- curenv->indent = temp;
- curdiv->modified_tag.incl(MTSM_IN);
- tok.next();
-}
-
-void temporary_indent()
-{
- int err = 0;
- hunits temp;
- if (!get_hunits(&temp, 'm', curenv->get_indent()))
- err = 1;
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- if (temp < H0) {
- warning(WARN_RANGE, "total indent cannot be negative");
- temp = H0;
- }
- if (!err) {
- curenv->temporary_indent = temp;
- curenv->have_temporary_indent = 1;
- curdiv->modified_tag.incl(MTSM_TI);
- }
- tok.next();
-}
-
-node *do_underline_special(int underline_spaces)
-{
- macro m;
- m.append_str("x u ");
- m.append(underline_spaces + '0');
- return new special_node(m, 1);
-}
-
-void do_underline(int underline_spaces)
-{
- int n;
- if (!has_arg() || !get_integer(&n))
- n = 1;
- if (n <= 0) {
- if (curenv->underline_lines > 0) {
- curenv->prev_fontno = curenv->fontno;
- curenv->fontno = curenv->pre_underline_fontno;
- if (underline_spaces) {
- curenv->underline_spaces = 0;
- curenv->add_node(do_underline_special(0));
- }
- }
- curenv->underline_lines = 0;
- }
- else {
- curenv->underline_lines = n;
- curenv->pre_underline_fontno = curenv->fontno;
- curenv->fontno = get_underline_fontno();
- if (underline_spaces) {
- curenv->underline_spaces = 1;
- curenv->add_node(do_underline_special(1));
- }
- }
- skip_line();
-}
-
-void continuous_underline()
-{
- do_underline(1);
-}
-
-void underline()
-{
- do_underline(0);
-}
-
-void control_char()
-{
- curenv->control_char = '.';
- if (has_arg()) {
- if (tok.ch() == 0)
- error("bad control character");
- else
- curenv->control_char = tok.ch();
- }
- skip_line();
-}
-
-void no_break_control_char()
-{
- curenv->no_break_control_char = '\'';
- if (has_arg()) {
- if (tok.ch() == 0)
- error("bad control character");
- else
- curenv->no_break_control_char = tok.ch();
- }
- skip_line();
-}
-
-void margin_character()
-{
- while (tok.space())
- tok.next();
- charinfo *ci = tok.get_char();
- if (ci) {
- // Call tok.next() only after making the node so that
- // .mc \s+9\(br\s0 works.
- node *nd = curenv->make_char_node(ci);
- tok.next();
- if (nd) {
- delete curenv->margin_character_node;
- curenv->margin_character_node = nd;
- curenv->margin_character_flags = (MARGIN_CHARACTER_ON
- |MARGIN_CHARACTER_NEXT);
- hunits d;
- if (has_arg() && get_hunits(&d, 'm'))
- curenv->margin_character_distance = d;
- }
- }
- else {
- check_missing_character();
- curenv->margin_character_flags &= ~MARGIN_CHARACTER_ON;
- if (curenv->margin_character_flags == 0) {
- delete curenv->margin_character_node;
- curenv->margin_character_node = 0;
- }
- }
- skip_line();
-}
-
-void number_lines()
-{
- delete_node_list(curenv->numbering_nodes);
- curenv->numbering_nodes = 0;
- if (has_arg()) {
- node *nd = 0;
- for (int i = '9'; i >= '0'; i--) {
- node *tem = make_node(charset_table[i], curenv);
- if (!tem) {
- skip_line();
- return;
- }
- tem->next = nd;
- nd = tem;
- }
- curenv->numbering_nodes = nd;
- curenv->line_number_digit_width = env_digit_width(curenv);
- int n;
- if (!tok.delimiter()) {
- if (get_integer(&n, next_line_number)) {
- next_line_number = n;
- if (next_line_number < 0) {
- warning(WARN_RANGE, "negative line number");
- next_line_number = 0;
- }
- }
- }
- else
- while (!tok.space() && !tok.newline() && !tok.eof())
- tok.next();
- if (has_arg()) {
- if (!tok.delimiter()) {
- if (get_integer(&n)) {
- if (n <= 0) {
- warning(WARN_RANGE, "negative or zero line number multiple");
- }
- else
- curenv->line_number_multiple = n;
- }
- }
- else
- while (!tok.space() && !tok.newline() && !tok.eof())
- tok.next();
- if (has_arg()) {
- if (!tok.delimiter()) {
- if (get_integer(&n))
- curenv->number_text_separation = n;
- }
- else
- while (!tok.space() && !tok.newline() && !tok.eof())
- tok.next();
- if (has_arg() && !tok.delimiter() && get_integer(&n))
- curenv->line_number_indent = n;
- }
- }
- }
- skip_line();
-}
-
-void no_number()
-{
- int n;
- if (has_arg() && get_integer(&n))
- curenv->no_number_count = n > 0 ? n : 0;
- else
- curenv->no_number_count = 1;
- skip_line();
-}
-
-void no_hyphenate()
-{
- curenv->hyphenation_flags = 0;
- skip_line();
-}
-
-void hyphenate_request()
-{
- int n;
- if (has_arg() && get_integer(&n))
- curenv->hyphenation_flags = n;
- else
- curenv->hyphenation_flags = 1;
- skip_line();
-}
-
-void hyphen_char()
-{
- curenv->hyphen_indicator_char = get_optional_char();
- skip_line();
-}
-
-void hyphen_line_max_request()
-{
- int n;
- if (has_arg() && get_integer(&n))
- curenv->hyphen_line_max = n;
- else
- curenv->hyphen_line_max = -1;
- skip_line();
-}
-
-void environment::interrupt()
-{
- if (!dummy) {
- add_node(new transparent_dummy_node);
- interrupted = 1;
- }
-}
-
-void environment::newline()
-{
- int was_centered = 0;
- if (underline_lines > 0) {
- if (--underline_lines == 0) {
- prev_fontno = fontno;
- fontno = pre_underline_fontno;
- if (underline_spaces) {
- underline_spaces = 0;
- add_node(do_underline_special(0));
- }
- }
- }
- if (current_field)
- wrap_up_field();
- if (current_tab)
- wrap_up_tab();
- // strip trailing spaces
- while (line != 0 && line->discardable()) {
- width_total -= line->width();
- space_total -= line->nspaces();
- node *tem = line;
- line = line->next;
- delete tem;
- }
- node *to_be_output = 0;
- hunits to_be_output_width;
- prev_line_interrupted = 0;
- if (dummy)
- space_newline();
- else if (interrupted) {
- interrupted = 0;
- // see environment::final_break
- prev_line_interrupted = exit_started ? 2 : 1;
- }
- else if (center_lines > 0) {
- --center_lines;
- hunits x = target_text_length - width_total;
- if (x > H0)
- saved_indent += x/2;
- to_be_output = line;
- was_centered = 1;
- to_be_output_width = width_total;
- line = 0;
- }
- else if (right_justify_lines > 0) {
- --right_justify_lines;
- hunits x = target_text_length - width_total;
- if (x > H0)
- saved_indent += x;
- to_be_output = line;
- to_be_output_width = width_total;
- line = 0;
- }
- else if (fill)
- space_newline();
- else {
- to_be_output = line;
- to_be_output_width = width_total;
- line = 0;
- }
- input_line_start = line == 0 ? H0 : width_total;
- if (to_be_output) {
- if (is_html && !fill) {
- curdiv->modified_tag.incl(MTSM_EOL);
- if (suppress_next_eol)
- suppress_next_eol = 0;
- else
- seen_eol = 1;
- }
-
- output_line(to_be_output, to_be_output_width, was_centered);
- hyphen_line_count = 0;
- }
- if (input_trap_count > 0) {
- if (!(continued_input_trap && prev_line_interrupted))
- if (--input_trap_count == 0)
- spring_trap(input_trap);
- }
-}
-
-void environment::output_line(node *n, hunits width, int was_centered)
-{
- prev_text_length = width;
- if (margin_character_flags) {
- hunits d = line_length + margin_character_distance - saved_indent - width;
- if (d > 0) {
- n = new hmotion_node(d, get_fill_color(), n);
- width += d;
- }
- margin_character_flags &= ~MARGIN_CHARACTER_NEXT;
- node *tem;
- if (!margin_character_flags) {
- tem = margin_character_node;
- margin_character_node = 0;
- }
- else
- tem = margin_character_node->copy();
- tem->next = n;
- n = tem;
- width += tem->width();
- }
- node *nn = 0;
- while (n != 0) {
- node *tem = n->next;
- n->next = nn;
- nn = n;
- n = tem;
- }
- if (!saved_indent.is_zero())
- nn = new hmotion_node(saved_indent, get_fill_color(), nn);
- width += saved_indent;
- if (no_number_count > 0)
- --no_number_count;
- else if (numbering_nodes) {
- hunits w = (line_number_digit_width
- *(3+line_number_indent+number_text_separation));
- if (next_line_number % line_number_multiple != 0)
- nn = new hmotion_node(w, get_fill_color(), nn);
- else {
- hunits x = w;
- nn = new hmotion_node(number_text_separation * line_number_digit_width,
- get_fill_color(), nn);
- x -= number_text_separation*line_number_digit_width;
- char buf[30];
- sprintf(buf, "%3d", next_line_number);
- for (char *p = strchr(buf, '\0') - 1; p >= buf && *p != ' '; --p) {
- node *gn = numbering_nodes;
- for (int count = *p - '0'; count > 0; count--)
- gn = gn->next;
- gn = gn->copy();
- x -= gn->width();
- gn->next = nn;
- nn = gn;
- }
- nn = new hmotion_node(x, get_fill_color(), nn);
- }
- width += w;
- ++next_line_number;
- }
- output(nn, !fill, vertical_spacing, total_post_vertical_spacing(), width,
- was_centered);
-}
-
-void environment::start_line()
-{
- assert(line == 0);
- discarding = 0;
- line = new line_start_node;
- if (have_temporary_indent) {
- saved_indent = temporary_indent;
- have_temporary_indent = 0;
- }
- else
- saved_indent = indent;
- target_text_length = line_length - saved_indent;
- width_total = H0;
- space_total = 0;
-}
-
-hunits environment::get_hyphenation_space()
-{
- return hyphenation_space;
-}
-
-void hyphenation_space_request()
-{
- hunits n;
- if (get_hunits(&n, 'm')) {
- if (n < H0) {
- warning(WARN_RANGE, "hyphenation space cannot be negative");
- n = H0;
- }
- curenv->hyphenation_space = n;
- }
- skip_line();
-}
-
-hunits environment::get_hyphenation_margin()
-{
- return hyphenation_margin;
-}
-
-void hyphenation_margin_request()
-{
- hunits n;
- if (get_hunits(&n, 'm')) {
- if (n < H0) {
- warning(WARN_RANGE, "hyphenation margin cannot be negative");
- n = H0;
- }
- curenv->hyphenation_margin = n;
- }
- skip_line();
-}
-
-breakpoint *environment::choose_breakpoint()
-{
- hunits x = width_total;
- int s = space_total;
- node *n = line;
- breakpoint *best_bp = 0; // the best breakpoint so far
- int best_bp_fits = 0;
- while (n != 0) {
- x -= n->width();
- s -= n->nspaces();
- breakpoint *bp = n->get_breakpoints(x, s);
- while (bp != 0) {
- if (bp->width <= target_text_length) {
- if (!bp->hyphenated) {
- breakpoint *tem = bp->next;
- bp->next = 0;
- while (tem != 0) {
- breakpoint *tem1 = tem;
- tem = tem->next;
- delete tem1;
- }
- if (best_bp_fits
- // Decide whether to use the hyphenated breakpoint.
- && (hyphen_line_max < 0
- // Only choose the hyphenated breakpoint if it would not
- // exceed the maximum number of consecutive hyphenated
- // lines.
- || hyphen_line_count + 1 <= hyphen_line_max)
- && !(adjust_mode == ADJUST_BOTH
- // Don't choose the hyphenated breakpoint if the line
- // can be justified by adding no more than
- // hyphenation_space to any word space.
- ? (bp->nspaces > 0
- && (((target_text_length - bp->width
- + (bp->nspaces - 1)*hresolution)/bp->nspaces)
- <= hyphenation_space))
- // Don't choose the hyphenated breakpoint if the line
- // is no more than hyphenation_margin short.
- : target_text_length - bp->width <= hyphenation_margin)) {
- delete bp;
- return best_bp;
- }
- if (best_bp)
- delete best_bp;
- return bp;
- }
- else {
- if ((adjust_mode == ADJUST_BOTH
- ? hyphenation_space == H0
- : hyphenation_margin == H0)
- && (hyphen_line_max < 0
- || hyphen_line_count + 1 <= hyphen_line_max)) {
- // No need to consider a non-hyphenated breakpoint.
- if (best_bp)
- delete best_bp;
- breakpoint *tem = bp->next;
- bp->next = 0;
- while (tem != 0) {
- breakpoint *tem1 = tem;
- tem = tem->next;
- delete tem1;
- }
- return bp;
- }
- // It fits but it's hyphenated.
- if (!best_bp_fits) {
- if (best_bp)
- delete best_bp;
- best_bp = bp;
- bp = bp->next;
- best_bp_fits = 1;
- }
- else {
- breakpoint *tem = bp;
- bp = bp->next;
- delete tem;
- }
- }
- }
- else {
- if (best_bp)
- delete best_bp;
- best_bp = bp;
- bp = bp->next;
- }
- }
- n = n->next;
- }
- if (best_bp) {
- if (!best_bp_fits)
- output_warning(WARN_BREAK, "can't break line");
- return best_bp;
- }
- return 0;
-}
-
-void environment::hyphenate_line(int start_here)
-{
- assert(line != 0);
- hyphenation_type prev_type = line->get_hyphenation_type();
- node **startp;
- if (start_here)
- startp = &line;
- else
- for (startp = &line->next; *startp != 0; startp = &(*startp)->next) {
- hyphenation_type this_type = (*startp)->get_hyphenation_type();
- if (prev_type == HYPHEN_BOUNDARY && this_type == HYPHEN_MIDDLE)
- break;
- prev_type = this_type;
- }
- if (*startp == 0)
- return;
- node *tem = *startp;
- do {
- tem = tem->next;
- } while (tem != 0 && tem->get_hyphenation_type() == HYPHEN_MIDDLE);
- int inhibit = (tem != 0 && tem->get_hyphenation_type() == HYPHEN_INHIBIT);
- node *end = tem;
- hyphen_list *sl = 0;
- tem = *startp;
- node *forward = 0;
- int i = 0;
- while (tem != end) {
- sl = tem->get_hyphen_list(sl, &i);
- node *tem1 = tem;
- tem = tem->next;
- tem1->next = forward;
- forward = tem1;
- }
- if (!inhibit) {
- // this is for characters like hyphen and emdash
- int prev_code = 0;
- for (hyphen_list *h = sl; h; h = h->next) {
- h->breakable = (prev_code != 0
- && h->next != 0
- && h->next->hyphenation_code != 0);
- prev_code = h->hyphenation_code;
- }
- }
- if (hyphenation_flags != 0
- && !inhibit
- // this may not be right if we have extra space on this line
- && !((hyphenation_flags & HYPHEN_LAST_LINE)
- && (curdiv->distance_to_next_trap()
- <= vertical_spacing + total_post_vertical_spacing()))
- && i >= 4)
- hyphenate(sl, hyphenation_flags);
- while (forward != 0) {
- node *tem1 = forward;
- forward = forward->next;
- tem1->next = 0;
- tem = tem1->add_self(tem, &sl);
- }
- *startp = tem;
-}
-
-static node *node_list_reverse(node *n)
-{
- node *res = 0;
- while (n) {
- node *tem = n;
- n = n->next;
- tem->next = res;
- res = tem;
- }
- return res;
-}
-
-static void distribute_space(node *n, int nspaces, hunits desired_space,
- int force_reverse = 0)
-{
- static int reverse = 0;
- if (force_reverse || reverse)
- n = node_list_reverse(n);
- if (!force_reverse && nspaces > 0 && spread_limit >= 0
- && desired_space.to_units() > 0) {
- hunits em = curenv->get_size();
- double Ems = (double)desired_space.to_units() / nspaces
- / (em.is_zero() ? hresolution : em.to_units());
- if (Ems > spread_limit)
- output_warning(WARN_BREAK, "spreading %1m per space", Ems);
- }
- for (node *tem = n; tem; tem = tem->next)
- tem->spread_space(&nspaces, &desired_space);
- if (force_reverse || reverse)
- (void)node_list_reverse(n);
- if (!force_reverse)
- reverse = !reverse;
- assert(desired_space.is_zero() && nspaces == 0);
-}
-
-void environment::possibly_break_line(int start_here, int forced)
-{
- int was_centered = center_lines > 0;
- if (!fill || current_tab || current_field || dummy)
- return;
- while (line != 0
- && (forced
- // When a macro follows a paragraph in fill mode, the
- // current line should not be empty.
- || (width_total - line->width()) > target_text_length)) {
- hyphenate_line(start_here);
- breakpoint *bp = choose_breakpoint();
- if (bp == 0)
- // we'll find one eventually
- return;
- node *pre, *post;
- node **ndp = &line;
- while (*ndp != bp->nd)
- ndp = &(*ndp)->next;
- bp->nd->split(bp->index, &pre, &post);
- *ndp = post;
- hunits extra_space_width = H0;
- switch(adjust_mode) {
- case ADJUST_BOTH:
- if (bp->nspaces != 0)
- extra_space_width = target_text_length - bp->width;
- else if (bp->width > 0 && target_text_length > 0
- && target_text_length > bp->width)
- output_warning(WARN_BREAK, "cannot adjust line");
- break;
- case ADJUST_CENTER:
- saved_indent += (target_text_length - bp->width)/2;
- was_centered = 1;
- break;
- case ADJUST_RIGHT:
- saved_indent += target_text_length - bp->width;
- break;
- }
- distribute_space(pre, bp->nspaces, extra_space_width);
- hunits output_width = bp->width + extra_space_width;
- input_line_start -= output_width;
- if (bp->hyphenated)
- hyphen_line_count++;
- else
- hyphen_line_count = 0;
- delete bp;
- space_total = 0;
- width_total = 0;
- node *first_non_discardable = 0;
- node *tem;
- for (tem = line; tem != 0; tem = tem->next)
- if (!tem->discardable())
- first_non_discardable = tem;
- node *to_be_discarded;
- if (first_non_discardable) {
- to_be_discarded = first_non_discardable->next;
- first_non_discardable->next = 0;
- for (tem = line; tem != 0; tem = tem->next) {
- width_total += tem->width();
- space_total += tem->nspaces();
- }
- discarding = 0;
- }
- else {
- discarding = 1;
- to_be_discarded = line;
- line = 0;
- }
- // Do output_line() here so that line will be 0 iff the
- // the environment will be empty.
- output_line(pre, output_width, was_centered);
- while (to_be_discarded != 0) {
- tem = to_be_discarded;
- to_be_discarded = to_be_discarded->next;
- input_line_start -= tem->width();
- delete tem;
- }
- if (line != 0) {
- if (have_temporary_indent) {
- saved_indent = temporary_indent;
- have_temporary_indent = 0;
- }
- else
- saved_indent = indent;
- target_text_length = line_length - saved_indent;
- }
- }
-}
-
-/*
-Do the break at the end of input after the end macro (if any).
-
-Unix troff behaves as follows: if the last line is
-
-foo bar\c
-
-it will output foo on the current page, and bar on the next page;
-if the last line is
-
-foo\c
-
-or
-
-foo bar
-
-everything will be output on the current page. This behaviour must be
-considered a bug.
-
-The problem is that some macro packages rely on this. For example,
-the ATK macros have an end macro that emits \c if it needs to print a
-table of contents but doesn't do a 'bp in the end macro; instead the
-'bp is done in the bottom of page trap. This works with Unix troff,
-provided that the current environment is not empty at the end of the
-input file.
-
-The following will make macro packages that do that sort of thing work
-even if the current environment is empty at the end of the input file.
-If the last input line used \c and this line occurred in the end macro,
-then we'll force everything out on the current page, but we'll make
-sure that the environment isn't empty so that we won't exit at the
-bottom of this page.
-*/
-
-void environment::final_break()
-{
- if (prev_line_interrupted == 2) {
- do_break();
- add_node(new transparent_dummy_node);
- }
- else
- do_break();
-}
-
-node *environment::make_tag(const char *nm, int i)
-{
- if (is_html) {
- /*
- * need to emit tag for post-grohtml
- * but we check to see whether we can emit specials
- */
- if (curdiv == topdiv && topdiv->before_first_page)
- topdiv->begin_page();
- macro *m = new macro;
- m->append_str("devtag:");
- for (const char *p = nm; *p; p++)
- if (!invalid_input_char((unsigned char)*p))
- m->append(*p);
- m->append(' ');
- m->append_int(i);
- return new special_node(*m);
- }
- return 0;
-}
-
-void environment::dump_troff_state()
-{
-#define SPACES " "
- fprintf(stderr, SPACES "register `in' = %d\n", curenv->indent.to_units());
- if (curenv->have_temporary_indent)
- fprintf(stderr, SPACES "register `ti' = %d\n",
- curenv->temporary_indent.to_units());
- fprintf(stderr, SPACES "centered lines `ce' = %d\n", curenv->center_lines);
- fprintf(stderr, SPACES "register `ll' = %d\n",
- curenv->line_length.to_units());
- fprintf(stderr, SPACES "fill `fi=1/nf=0' = %d\n", curenv->fill);
- fprintf(stderr, SPACES "page offset `po' = %d\n",
- topdiv->get_page_offset().to_units());
- fprintf(stderr, SPACES "seen_break = %d\n", curenv->seen_break);
- fprintf(stderr, SPACES "seen_space = %d\n", curenv->seen_space);
- fflush(stderr);
-#undef SPACES
-}
-
-statem *environment::construct_state(int only_eol)
-{
- if (is_html) {
- statem *s = new statem();
- if (!only_eol) {
- s->add_tag(MTSM_IN, indent);
- s->add_tag(MTSM_LL, line_length);
- s->add_tag(MTSM_PO, topdiv->get_page_offset().to_units());
- s->add_tag(MTSM_RJ, right_justify_lines);
- if (have_temporary_indent)
- s->add_tag(MTSM_TI, temporary_indent);
- s->add_tag_ta();
- if (seen_break)
- s->add_tag(MTSM_BR);
- if (seen_space != 0)
- s->add_tag(MTSM_SP, seen_space);
- seen_break = 0;
- seen_space = 0;
- }
- if (seen_eol) {
- s->add_tag(MTSM_EOL);
- s->add_tag(MTSM_CE, center_lines);
- }
- seen_eol = 0;
- return s;
- }
- else
- return NULL;
-}
-
-void environment::construct_format_state(node *n, int was_centered,
- int filling)
-{
- if (is_html) {
- // find first glyph node which has a state.
- while (n != 0 && n->state == 0)
- n = n->next;
- if (n == 0 || (n->state == 0))
- return;
- if (seen_space != 0)
- n->state->add_tag(MTSM_SP, seen_space);
- if (seen_eol && topdiv == curdiv)
- n->state->add_tag(MTSM_EOL);
- seen_space = 0;
- seen_eol = 0;
- if (was_centered)
- n->state->add_tag(MTSM_CE, center_lines+1);
- else
- n->state->add_tag_if_unknown(MTSM_CE, 0);
- n->state->add_tag_if_unknown(MTSM_FI, filling);
- n = n->next;
- while (n != 0) {
- if (n->state != 0) {
- n->state->sub_tag_ce();
- n->state->add_tag_if_unknown(MTSM_FI, filling);
- }
- n = n->next;
- }
- }
-}
-
-void environment::construct_new_line_state(node *n)
-{
- if (is_html) {
- // find first glyph node which has a state.
- while (n != 0 && n->state == 0)
- n = n->next;
- if (n == 0 || n->state == 0)
- return;
- if (seen_space != 0)
- n->state->add_tag(MTSM_SP, seen_space);
- if (seen_eol && topdiv == curdiv)
- n->state->add_tag(MTSM_EOL);
- seen_space = 0;
- seen_eol = 0;
- }
-}
-
-extern int global_diverted_space;
-
-void environment::do_break(int do_spread)
-{
- int was_centered = 0;
- if (curdiv == topdiv && topdiv->before_first_page) {
- topdiv->begin_page();
- return;
- }
- if (current_tab)
- wrap_up_tab();
- if (line) {
- // this is so that hyphenation works
- line = new space_node(H0, get_fill_color(), line);
- space_total++;
- possibly_break_line(0, do_spread);
- }
- while (line != 0 && line->discardable()) {
- width_total -= line->width();
- space_total -= line->nspaces();
- node *tem = line;
- line = line->next;
- delete tem;
- }
- discarding = 0;
- input_line_start = H0;
- if (line != 0) {
- if (fill) {
- switch (adjust_mode) {
- case ADJUST_CENTER:
- saved_indent += (target_text_length - width_total)/2;
- was_centered = 1;
- break;
- case ADJUST_RIGHT:
- saved_indent += target_text_length - width_total;
- break;
- }
- }
- node *tem = line;
- line = 0;
- output_line(tem, width_total, was_centered);
- hyphen_line_count = 0;
- }
- prev_line_interrupted = 0;
-#ifdef WIDOW_CONTROL
- mark_last_line();
- output_pending_lines();
-#endif /* WIDOW_CONTROL */
- if (!global_diverted_space) {
- curdiv->modified_tag.incl(MTSM_BR);
- seen_break = 1;
- }
-}
-
-int environment::is_empty()
-{
- return !current_tab && line == 0 && pending_lines == 0;
-}
-
-void do_break_request(int spread)
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break(spread);
- tok.next();
-}
-
-void break_request()
-{
- do_break_request(0);
-}
-
-void break_spread_request()
-{
- do_break_request(1);
-}
-
-void title()
-{
- if (curdiv == topdiv && topdiv->before_first_page) {
- handle_initial_title();
- return;
- }
- node *part[3];
- hunits part_width[3];
- part[0] = part[1] = part[2] = 0;
- environment env(curenv);
- environment *oldenv = curenv;
- curenv = &env;
- read_title_parts(part, part_width);
- curenv = oldenv;
- curenv->size = env.size;
- curenv->prev_size = env.prev_size;
- curenv->requested_size = env.requested_size;
- curenv->prev_requested_size = env.prev_requested_size;
- curenv->char_height = env.char_height;
- curenv->char_slant = env.char_slant;
- curenv->fontno = env.fontno;
- curenv->prev_fontno = env.prev_fontno;
- curenv->glyph_color = env.glyph_color;
- curenv->prev_glyph_color = env.prev_glyph_color;
- curenv->fill_color = env.fill_color;
- curenv->prev_fill_color = env.prev_fill_color;
- node *n = 0;
- node *p = part[2];
- while (p != 0) {
- node *tem = p;
- p = p->next;
- tem->next = n;
- n = tem;
- }
- hunits length_title(curenv->title_length);
- hunits f = length_title - part_width[1];
- hunits f2 = f/2;
- n = new hmotion_node(f2 - part_width[2], curenv->get_fill_color(), n);
- p = part[1];
- while (p != 0) {
- node *tem = p;
- p = p->next;
- tem->next = n;
- n = tem;
- }
- n = new hmotion_node(f - f2 - part_width[0], curenv->get_fill_color(), n);
- p = part[0];
- while (p != 0) {
- node *tem = p;
- p = p->next;
- tem->next = n;
- n = tem;
- }
- curenv->output_title(n, !curenv->fill, curenv->vertical_spacing,
- curenv->total_post_vertical_spacing(), length_title);
- curenv->hyphen_line_count = 0;
- tok.next();
-}
-
-void adjust()
-{
- curenv->adjust_mode |= 1;
- if (has_arg()) {
- switch (tok.ch()) {
- case 'l':
- curenv->adjust_mode = ADJUST_LEFT;
- break;
- case 'r':
- curenv->adjust_mode = ADJUST_RIGHT;
- break;
- case 'c':
- curenv->adjust_mode = ADJUST_CENTER;
- break;
- case 'b':
- case 'n':
- curenv->adjust_mode = ADJUST_BOTH;
- break;
- default:
- int n;
- if (get_integer(&n)) {
- if (n < 0)
- warning(WARN_RANGE, "negative adjustment mode");
- else if (n > 5) {
- curenv->adjust_mode = 5;
- warning(WARN_RANGE, "adjustment mode `%1' out of range", n);
- }
- else
- curenv->adjust_mode = n;
- }
- }
- }
- skip_line();
-}
-
-void no_adjust()
-{
- curenv->adjust_mode &= ~1;
- skip_line();
-}
-
-void do_input_trap(int continued)
-{
- curenv->input_trap_count = 0;
- if (continued)
- curenv->continued_input_trap = 1;
- int n;
- if (has_arg() && get_integer(&n)) {
- if (n <= 0)
- warning(WARN_RANGE,
- "number of lines for input trap must be greater than zero");
- else {
- symbol s = get_name(1);
- if (!s.is_null()) {
- curenv->input_trap_count = n;
- curenv->input_trap = s;
- }
- }
- }
- skip_line();
-}
-
-void input_trap()
-{
- do_input_trap(0);
-}
-
-void input_trap_continued()
-{
- do_input_trap(1);
-}
-
-/* tabs */
-
-// must not be R or C or L or a legitimate part of a number expression
-const char TAB_REPEAT_CHAR = 'T';
-
-struct tab {
- tab *next;
- hunits pos;
- tab_type type;
- tab(hunits, tab_type);
- enum { BLOCK = 1024 };
- static tab *free_list;
- void *operator new(size_t);
- void operator delete(void *);
-};
-
-tab *tab::free_list = 0;
-
-void *tab::operator new(size_t n)
-{
- assert(n == sizeof(tab));
- if (!free_list) {
- free_list = (tab *)new char[sizeof(tab)*BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK-1].next = 0;
- }
- tab *p = free_list;
- free_list = (tab *)(free_list->next);
- p->next = 0;
- return p;
-}
-
-#ifdef __GNUG__
-/* cfront can't cope with this. */
-inline
-#endif
-void tab::operator delete(void *p)
-{
- if (p) {
- ((tab *)p)->next = free_list;
- free_list = (tab *)p;
- }
-}
-
-tab::tab(hunits x, tab_type t) : next(0), pos(x), type(t)
-{
-}
-
-tab_stops::tab_stops(hunits distance, tab_type type)
-: initial_list(0)
-{
- repeated_list = new tab(distance, type);
-}
-
-tab_stops::~tab_stops()
-{
- clear();
-}
-
-tab_type tab_stops::distance_to_next_tab(hunits curpos, hunits *distance)
-{
- hunits nextpos;
-
- return distance_to_next_tab(curpos, distance, &nextpos);
-}
-
-tab_type tab_stops::distance_to_next_tab(hunits curpos, hunits *distance,
- hunits *nextpos)
-{
- hunits lastpos = 0;
- tab *tem;
- for (tem = initial_list; tem && tem->pos <= curpos; tem = tem->next)
- lastpos = tem->pos;
- if (tem) {
- *distance = tem->pos - curpos;
- *nextpos = tem->pos;
- return tem->type;
- }
- if (repeated_list == 0)
- return TAB_NONE;
- hunits base = lastpos;
- for (;;) {
- for (tem = repeated_list; tem && tem->pos + base <= curpos; tem = tem->next)
- lastpos = tem->pos;
- if (tem) {
- *distance = tem->pos + base - curpos;
- *nextpos = tem->pos + base;
- return tem->type;
- }
- assert(lastpos > 0);
- base += lastpos;
- }
- return TAB_NONE;
-}
-
-const char *tab_stops::to_string()
-{
- static char *buf = 0;
- static int buf_size = 0;
- // figure out a maximum on the amount of space we can need
- int count = 0;
- tab *p;
- for (p = initial_list; p; p = p->next)
- ++count;
- for (p = repeated_list; p; p = p->next)
- ++count;
- // (10 for digits + 1 for u + 1 for 'C' or 'R') + 2 for ' &' + 1 for '\0'
- int need = count*12 + 3;
- if (buf == 0 || need > buf_size) {
- if (buf)
- a_delete buf;
- buf_size = need;
- buf = new char[buf_size];
- }
- char *ptr = buf;
- for (p = initial_list; p; p = p->next) {
- strcpy(ptr, i_to_a(p->pos.to_units()));
- ptr = strchr(ptr, '\0');
- *ptr++ = 'u';
- *ptr = '\0';
- switch (p->type) {
- case TAB_LEFT:
- break;
- case TAB_RIGHT:
- *ptr++ = 'R';
- break;
- case TAB_CENTER:
- *ptr++ = 'C';
- break;
- case TAB_NONE:
- default:
- assert(0);
- }
- }
- if (repeated_list)
- *ptr++ = TAB_REPEAT_CHAR;
- for (p = repeated_list; p; p = p->next) {
- strcpy(ptr, i_to_a(p->pos.to_units()));
- ptr = strchr(ptr, '\0');
- *ptr++ = 'u';
- *ptr = '\0';
- switch (p->type) {
- case TAB_LEFT:
- break;
- case TAB_RIGHT:
- *ptr++ = 'R';
- break;
- case TAB_CENTER:
- *ptr++ = 'C';
- break;
- case TAB_NONE:
- default:
- assert(0);
- }
- }
- *ptr++ = '\0';
- return buf;
-}
-
-tab_stops::tab_stops() : initial_list(0), repeated_list(0)
-{
-}
-
-tab_stops::tab_stops(const tab_stops &ts)
-: initial_list(0), repeated_list(0)
-{
- tab **p = &initial_list;
- tab *t = ts.initial_list;
- while (t) {
- *p = new tab(t->pos, t->type);
- t = t->next;
- p = &(*p)->next;
- }
- p = &repeated_list;
- t = ts.repeated_list;
- while (t) {
- *p = new tab(t->pos, t->type);
- t = t->next;
- p = &(*p)->next;
- }
-}
-
-void tab_stops::clear()
-{
- while (initial_list) {
- tab *tem = initial_list;
- initial_list = initial_list->next;
- delete tem;
- }
- while (repeated_list) {
- tab *tem = repeated_list;
- repeated_list = repeated_list->next;
- delete tem;
- }
-}
-
-void tab_stops::add_tab(hunits pos, tab_type type, int repeated)
-{
- tab **p;
- for (p = repeated ? &repeated_list : &initial_list; *p; p = &(*p)->next)
- ;
- *p = new tab(pos, type);
-}
-
-
-void tab_stops::operator=(const tab_stops &ts)
-{
- clear();
- tab **p = &initial_list;
- tab *t = ts.initial_list;
- while (t) {
- *p = new tab(t->pos, t->type);
- t = t->next;
- p = &(*p)->next;
- }
- p = &repeated_list;
- t = ts.repeated_list;
- while (t) {
- *p = new tab(t->pos, t->type);
- t = t->next;
- p = &(*p)->next;
- }
-}
-
-void set_tabs()
-{
- hunits pos;
- hunits prev_pos = 0;
- int first = 1;
- int repeated = 0;
- tab_stops tabs;
- while (has_arg()) {
- if (tok.ch() == TAB_REPEAT_CHAR) {
- tok.next();
- repeated = 1;
- prev_pos = 0;
- }
- if (!get_hunits(&pos, 'm', prev_pos))
- break;
- tab_type type = TAB_LEFT;
- if (tok.ch() == 'C') {
- tok.next();
- type = TAB_CENTER;
- }
- else if (tok.ch() == 'R') {
- tok.next();
- type = TAB_RIGHT;
- }
- else if (tok.ch() == 'L') {
- tok.next();
- }
- if (pos <= prev_pos && !first)
- warning(WARN_RANGE,
- "positions of tab stops must be strictly increasing");
- else {
- tabs.add_tab(pos, type, repeated);
- prev_pos = pos;
- first = 0;
- }
- }
- curenv->tabs = tabs;
- curdiv->modified_tag.incl(MTSM_TA);
- skip_line();
-}
-
-const char *environment::get_tabs()
-{
- return tabs.to_string();
-}
-
-tab_type environment::distance_to_next_tab(hunits *distance)
-{
- return line_tabs
- ? curenv->tabs.distance_to_next_tab(get_text_length(), distance)
- : curenv->tabs.distance_to_next_tab(get_input_line_position(), distance);
-}
-
-tab_type environment::distance_to_next_tab(hunits *distance, hunits *leftpos)
-{
- return line_tabs
- ? curenv->tabs.distance_to_next_tab(get_text_length(), distance, leftpos)
- : curenv->tabs.distance_to_next_tab(get_input_line_position(), distance,
- leftpos);
-}
-
-void field_characters()
-{
- field_delimiter_char = get_optional_char();
- if (field_delimiter_char)
- padding_indicator_char = get_optional_char();
- else
- padding_indicator_char = 0;
- skip_line();
-}
-
-void line_tabs_request()
-{
- int n;
- if (has_arg() && get_integer(&n))
- curenv->line_tabs = n != 0;
- else
- curenv->line_tabs = 1;
- skip_line();
-}
-
-int environment::get_line_tabs()
-{
- return line_tabs;
-}
-
-void environment::wrap_up_tab()
-{
- if (!current_tab)
- return;
- if (line == 0)
- start_line();
- hunits tab_amount;
- switch (current_tab) {
- case TAB_RIGHT:
- tab_amount = tab_distance - tab_width;
- line = make_tab_node(tab_amount, line);
- break;
- case TAB_CENTER:
- tab_amount = tab_distance - tab_width/2;
- line = make_tab_node(tab_amount, line);
- break;
- case TAB_NONE:
- case TAB_LEFT:
- default:
- assert(0);
- }
- width_total += tab_amount;
- width_total += tab_width;
- if (current_field) {
- if (tab_precedes_field) {
- pre_field_width += tab_amount;
- tab_precedes_field = 0;
- }
- field_distance -= tab_amount;
- field_spaces += tab_field_spaces;
- }
- if (tab_contents != 0) {
- node *tem;
- for (tem = tab_contents; tem->next != 0; tem = tem->next)
- ;
- tem->next = line;
- line = tab_contents;
- }
- tab_field_spaces = 0;
- tab_contents = 0;
- tab_width = H0;
- tab_distance = H0;
- current_tab = TAB_NONE;
-}
-
-node *environment::make_tab_node(hunits d, node *next)
-{
- if (leader_node != 0 && d < 0) {
- error("motion generated by leader cannot be negative");
- delete leader_node;
- leader_node = 0;
- }
- if (!leader_node)
- return new hmotion_node(d, 1, 0, get_fill_color(), next);
- node *n = new hline_node(d, leader_node, next);
- leader_node = 0;
- return n;
-}
-
-void environment::handle_tab(int is_leader)
-{
- hunits d;
- hunits absolute;
- if (current_tab)
- wrap_up_tab();
- charinfo *ci = is_leader ? leader_char : tab_char;
- delete leader_node;
- leader_node = ci ? make_char_node(ci) : 0;
- tab_type t = distance_to_next_tab(&d, &absolute);
- switch (t) {
- case TAB_NONE:
- return;
- case TAB_LEFT:
- add_node(make_tag("tab L", absolute.to_units()));
- add_node(make_tab_node(d));
- return;
- case TAB_RIGHT:
- add_node(make_tag("tab R", absolute.to_units()));
- break;
- case TAB_CENTER:
- add_node(make_tag("tab C", absolute.to_units()));
- break;
- default:
- assert(0);
- }
- tab_width = 0;
- tab_distance = d;
- tab_contents = 0;
- current_tab = t;
- tab_field_spaces = 0;
-}
-
-void environment::start_field()
-{
- assert(!current_field);
- hunits d;
- if (distance_to_next_tab(&d) != TAB_NONE) {
- pre_field_width = get_text_length();
- field_distance = d;
- current_field = 1;
- field_spaces = 0;
- tab_field_spaces = 0;
- for (node *p = line; p; p = p->next)
- if (p->nspaces()) {
- p->freeze_space();
- space_total--;
- }
- tab_precedes_field = current_tab != TAB_NONE;
- }
- else
- error("zero field width");
-}
-
-void environment::wrap_up_field()
-{
- if (!current_tab && field_spaces == 0)
- add_padding();
- hunits padding = field_distance - (get_text_length() - pre_field_width);
- if (current_tab && tab_field_spaces != 0) {
- hunits tab_padding = scale(padding,
- tab_field_spaces,
- field_spaces + tab_field_spaces);
- padding -= tab_padding;
- distribute_space(tab_contents, tab_field_spaces, tab_padding, 1);
- tab_field_spaces = 0;
- tab_width += tab_padding;
- }
- if (field_spaces != 0) {
- distribute_space(line, field_spaces, padding, 1);
- width_total += padding;
- if (current_tab) {
- // the start of the tab has been moved to the right by padding, so
- tab_distance -= padding;
- if (tab_distance <= H0) {
- // use the next tab stop instead
- current_tab = tabs.distance_to_next_tab(get_input_line_position()
- - tab_width,
- &tab_distance);
- if (current_tab == TAB_NONE || current_tab == TAB_LEFT) {
- width_total += tab_width;
- if (current_tab == TAB_LEFT) {
- line = make_tab_node(tab_distance, line);
- width_total += tab_distance;
- current_tab = TAB_NONE;
- }
- if (tab_contents != 0) {
- node *tem;
- for (tem = tab_contents; tem->next != 0; tem = tem->next)
- ;
- tem->next = line;
- line = tab_contents;
- tab_contents = 0;
- }
- tab_width = H0;
- tab_distance = H0;
- }
- }
- }
- }
- current_field = 0;
-}
-
-void environment::add_padding()
-{
- if (current_tab) {
- tab_contents = new space_node(H0, get_fill_color(), tab_contents);
- tab_field_spaces++;
- }
- else {
- if (line == 0)
- start_line();
- line = new space_node(H0, get_fill_color(), line);
- field_spaces++;
- }
-}
-
-typedef int (environment::*INT_FUNCP)();
-typedef vunits (environment::*VUNITS_FUNCP)();
-typedef hunits (environment::*HUNITS_FUNCP)();
-typedef const char *(environment::*STRING_FUNCP)();
-
-class int_env_reg : public reg {
- INT_FUNCP func;
- public:
- int_env_reg(INT_FUNCP);
- const char *get_string();
- int get_value(units *val);
-};
-
-class vunits_env_reg : public reg {
- VUNITS_FUNCP func;
- public:
- vunits_env_reg(VUNITS_FUNCP f);
- const char *get_string();
- int get_value(units *val);
-};
-
-
-class hunits_env_reg : public reg {
- HUNITS_FUNCP func;
- public:
- hunits_env_reg(HUNITS_FUNCP f);
- const char *get_string();
- int get_value(units *val);
-};
-
-class string_env_reg : public reg {
- STRING_FUNCP func;
-public:
- string_env_reg(STRING_FUNCP);
- const char *get_string();
-};
-
-int_env_reg::int_env_reg(INT_FUNCP f) : func(f)
-{
-}
-
-int int_env_reg::get_value(units *val)
-{
- *val = (curenv->*func)();
- return 1;
-}
-
-const char *int_env_reg::get_string()
-{
- return i_to_a((curenv->*func)());
-}
-
-vunits_env_reg::vunits_env_reg(VUNITS_FUNCP f) : func(f)
-{
-}
-
-int vunits_env_reg::get_value(units *val)
-{
- *val = (curenv->*func)().to_units();
- return 1;
-}
-
-const char *vunits_env_reg::get_string()
-{
- return i_to_a((curenv->*func)().to_units());
-}
-
-hunits_env_reg::hunits_env_reg(HUNITS_FUNCP f) : func(f)
-{
-}
-
-int hunits_env_reg::get_value(units *val)
-{
- *val = (curenv->*func)().to_units();
- return 1;
-}
-
-const char *hunits_env_reg::get_string()
-{
- return i_to_a((curenv->*func)().to_units());
-}
-
-string_env_reg::string_env_reg(STRING_FUNCP f) : func(f)
-{
-}
-
-const char *string_env_reg::get_string()
-{
- return (curenv->*func)();
-}
-
-class horizontal_place_reg : public general_reg {
-public:
- horizontal_place_reg();
- int get_value(units *);
- void set_value(units);
-};
-
-horizontal_place_reg::horizontal_place_reg()
-{
-}
-
-int horizontal_place_reg::get_value(units *res)
-{
- *res = curenv->get_input_line_position().to_units();
- return 1;
-}
-
-void horizontal_place_reg::set_value(units n)
-{
- curenv->set_input_line_position(hunits(n));
-}
-
-const char *environment::get_font_family_string()
-{
- return family->nm.contents();
-}
-
-const char *environment::get_glyph_color_string()
-{
- return glyph_color->nm.contents();
-}
-
-const char *environment::get_fill_color_string()
-{
- return fill_color->nm.contents();
-}
-
-const char *environment::get_font_name_string()
-{
- symbol f = get_font_name(fontno, this);
- return f.contents();
-}
-
-const char *environment::get_style_name_string()
-{
- symbol f = get_style_name(fontno);
- return f.contents();
-}
-
-const char *environment::get_name_string()
-{
- return name.contents();
-}
-
-// Convert a quantity in scaled points to ascii decimal fraction.
-
-const char *sptoa(int sp)
-{
- assert(sp > 0);
- assert(sizescale > 0);
- if (sizescale == 1)
- return i_to_a(sp);
- if (sp % sizescale == 0)
- return i_to_a(sp/sizescale);
- // See if 1/sizescale is exactly representable as a decimal fraction,
- // ie its only prime factors are 2 and 5.
- int n = sizescale;
- int power2 = 0;
- while ((n & 1) == 0) {
- n >>= 1;
- power2++;
- }
- int power5 = 0;
- while ((n % 5) == 0) {
- n /= 5;
- power5++;
- }
- if (n == 1) {
- int decimal_point = power5 > power2 ? power5 : power2;
- if (decimal_point <= 10) {
- int factor = 1;
- int t;
- for (t = decimal_point - power2; --t >= 0;)
- factor *= 2;
- for (t = decimal_point - power5; --t >= 0;)
- factor *= 5;
- if (factor == 1 || sp <= INT_MAX/factor)
- return if_to_a(sp*factor, decimal_point);
- }
- }
- double s = double(sp)/double(sizescale);
- double factor = 10.0;
- double val = s;
- int decimal_point = 0;
- do {
- double v = ceil(s*factor);
- if (v > INT_MAX)
- break;
- val = v;
- factor *= 10.0;
- } while (++decimal_point < 10);
- return if_to_a(int(val), decimal_point);
-}
-
-const char *environment::get_point_size_string()
-{
- return sptoa(curenv->get_point_size());
-}
-
-const char *environment::get_requested_point_size_string()
-{
- return sptoa(curenv->get_requested_point_size());
-}
-
-#define init_int_env_reg(name, func) \
- number_reg_dictionary.define(name, new int_env_reg(&environment::func))
-
-#define init_vunits_env_reg(name, func) \
- number_reg_dictionary.define(name, new vunits_env_reg(&environment::func))
-
-#define init_hunits_env_reg(name, func) \
- number_reg_dictionary.define(name, new hunits_env_reg(&environment::func))
-
-#define init_string_env_reg(name, func) \
- number_reg_dictionary.define(name, new string_env_reg(&environment::func))
-
-void init_env_requests()
-{
- init_request("ad", adjust);
- init_request("br", break_request);
- init_request("brp", break_spread_request);
- init_request("c2", no_break_control_char);
- init_request("cc", control_char);
- init_request("ce", center);
- init_request("cu", continuous_underline);
- init_request("ev", environment_switch);
- init_request("evc", environment_copy);
- init_request("fam", family_change);
- init_request("fc", field_characters);
- init_request("fi", fill);
- init_request("fcolor", fill_color_change);
- init_request("ft", font_change);
- init_request("gcolor", glyph_color_change);
- init_request("hc", hyphen_char);
- init_request("hlm", hyphen_line_max_request);
- init_request("hy", hyphenate_request);
- init_request("hym", hyphenation_margin_request);
- init_request("hys", hyphenation_space_request);
- init_request("in", indent);
- init_request("it", input_trap);
- init_request("itc", input_trap_continued);
- init_request("lc", leader_character);
- init_request("linetabs", line_tabs_request);
- init_request("ll", line_length);
- init_request("ls", line_spacing);
- init_request("lt", title_length);
- init_request("mc", margin_character);
- init_request("na", no_adjust);
- init_request("nf", no_fill);
- init_request("nh", no_hyphenate);
- init_request("nm", number_lines);
- init_request("nn", no_number);
- init_request("ps", point_size);
- init_request("pvs", post_vertical_spacing);
- init_request("rj", right_justify);
- init_request("sizes", override_sizes);
- init_request("ss", space_size);
- init_request("ta", set_tabs);
- init_request("ti", temporary_indent);
- init_request("tc", tab_character);
- init_request("tl", title);
- init_request("ul", underline);
- init_request("vs", vertical_spacing);
-#ifdef WIDOW_CONTROL
- init_request("wdc", widow_control_request);
-#endif /* WIDOW_CONTROL */
- init_int_env_reg(".b", get_bold);
- init_vunits_env_reg(".cdp", get_prev_char_depth);
- init_int_env_reg(".ce", get_center_lines);
- init_vunits_env_reg(".cht", get_prev_char_height);
- init_hunits_env_reg(".csk", get_prev_char_skew);
- init_string_env_reg(".ev", get_name_string);
- init_int_env_reg(".f", get_font);
- init_string_env_reg(".fam", get_font_family_string);
- init_string_env_reg(".fn", get_font_name_string);
- init_int_env_reg(".height", get_char_height);
- init_int_env_reg(".hlc", get_hyphen_line_count);
- init_int_env_reg(".hlm", get_hyphen_line_max);
- init_int_env_reg(".hy", get_hyphenation_flags);
- init_hunits_env_reg(".hym", get_hyphenation_margin);
- init_hunits_env_reg(".hys", get_hyphenation_space);
- init_hunits_env_reg(".i", get_indent);
- init_hunits_env_reg(".in", get_saved_indent);
- init_int_env_reg(".int", get_prev_line_interrupted);
- init_int_env_reg(".linetabs", get_line_tabs);
- init_hunits_env_reg(".lt", get_title_length);
- init_int_env_reg(".j", get_adjust_mode);
- init_hunits_env_reg(".k", get_text_length);
- init_int_env_reg(".L", get_line_spacing);
- init_hunits_env_reg(".l", get_line_length);
- init_hunits_env_reg(".ll", get_saved_line_length);
- init_string_env_reg(".M", get_fill_color_string);
- init_string_env_reg(".m", get_glyph_color_string);
- init_hunits_env_reg(".n", get_prev_text_length);
- init_int_env_reg(".ps", get_point_size);
- init_int_env_reg(".psr", get_requested_point_size);
- init_vunits_env_reg(".pvs", get_post_vertical_spacing);
- init_int_env_reg(".rj", get_right_justify_lines);
- init_string_env_reg(".s", get_point_size_string);
- init_int_env_reg(".slant", get_char_slant);
- init_int_env_reg(".ss", get_space_size);
- init_int_env_reg(".sss", get_sentence_space_size);
- init_string_env_reg(".sr", get_requested_point_size_string);
- init_string_env_reg(".sty", get_style_name_string);
- init_string_env_reg(".tabs", get_tabs);
- init_int_env_reg(".u", get_fill);
- init_vunits_env_reg(".v", get_vertical_spacing);
- init_hunits_env_reg(".w", get_prev_char_width);
- number_reg_dictionary.define("ct", new variable_reg(&ct_reg_contents));
- number_reg_dictionary.define("hp", new horizontal_place_reg);
- number_reg_dictionary.define("ln", new variable_reg(&next_line_number));
- number_reg_dictionary.define("rsb", new variable_reg(&rsb_reg_contents));
- number_reg_dictionary.define("rst", new variable_reg(&rst_reg_contents));
- number_reg_dictionary.define("sb", new variable_reg(&sb_reg_contents));
- number_reg_dictionary.define("skw", new variable_reg(&skw_reg_contents));
- number_reg_dictionary.define("ssc", new variable_reg(&ssc_reg_contents));
- number_reg_dictionary.define("st", new variable_reg(&st_reg_contents));
-}
-
-// Hyphenation - TeX's hyphenation algorithm with a less fancy implementation.
-
-struct trie_node;
-
-class trie {
- trie_node *tp;
- virtual void do_match(int len, void *val) = 0;
- virtual void do_delete(void *) = 0;
- void delete_trie_node(trie_node *);
-public:
- trie() : tp(0) {}
- virtual ~trie(); // virtual to shut up g++
- void insert(const char *, int, void *);
- // find calls do_match for each match it finds
- void find(const char *pat, int patlen);
- void clear();
-};
-
-class hyphen_trie : private trie {
- int *h;
- void do_match(int i, void *v);
- void do_delete(void *v);
- void insert_pattern(const char *pat, int patlen, int *num);
- void insert_hyphenation(dictionary *ex, const char *pat, int patlen);
- int hpf_getc(FILE *f);
-public:
- hyphen_trie() {}
- ~hyphen_trie() {}
- void hyphenate(const char *word, int len, int *hyphens);
- void read_patterns_file(const char *name, int append, dictionary *ex);
-};
-
-struct hyphenation_language {
- symbol name;
- dictionary exceptions;
- hyphen_trie patterns;
- hyphenation_language(symbol nm) : name(nm), exceptions(501) {}
- ~hyphenation_language() { }
-};
-
-dictionary language_dictionary(5);
-hyphenation_language *current_language = 0;
-
-static void set_hyphenation_language()
-{
- symbol nm = get_name(1);
- if (!nm.is_null()) {
- current_language = (hyphenation_language *)language_dictionary.lookup(nm);
- if (!current_language) {
- current_language = new hyphenation_language(nm);
- (void)language_dictionary.lookup(nm, (void *)current_language);
- }
- }
- skip_line();
-}
-
-const int WORD_MAX = 256; // we use unsigned char for offsets in
- // hyphenation exceptions
-
-static void hyphen_word()
-{
- if (!current_language) {
- error("no current hyphenation language");
- skip_line();
- return;
- }
- char buf[WORD_MAX + 1];
- unsigned char pos[WORD_MAX + 2];
- for (;;) {
- tok.skip();
- if (tok.newline() || tok.eof())
- break;
- int i = 0;
- int npos = 0;
- while (i < WORD_MAX && !tok.space() && !tok.newline() && !tok.eof()) {
- charinfo *ci = tok.get_char(1);
- if (ci == 0) {
- skip_line();
- return;
- }
- tok.next();
- if (ci->get_ascii_code() == '-') {
- if (i > 0 && (npos == 0 || pos[npos - 1] != i))
- pos[npos++] = i;
- }
- else {
- unsigned char c = ci->get_hyphenation_code();
- if (c == 0)
- break;
- buf[i++] = c;
- }
- }
- if (i > 0) {
- pos[npos] = 0;
- buf[i] = 0;
- unsigned char *tem = new unsigned char[npos + 1];
- memcpy(tem, pos, npos + 1);
- tem = (unsigned char *)current_language->exceptions.lookup(symbol(buf),
- tem);
- if (tem)
- a_delete tem;
- }
- }
- skip_line();
-}
-
-struct trie_node {
- char c;
- trie_node *down;
- trie_node *right;
- void *val;
- trie_node(char, trie_node *);
-};
-
-trie_node::trie_node(char ch, trie_node *p)
-: c(ch), down(0), right(p), val(0)
-{
-}
-
-trie::~trie()
-{
- clear();
-}
-
-void trie::clear()
-{
- delete_trie_node(tp);
- tp = 0;
-}
-
-
-void trie::delete_trie_node(trie_node *p)
-{
- if (p) {
- delete_trie_node(p->down);
- delete_trie_node(p->right);
- if (p->val)
- do_delete(p->val);
- delete p;
- }
-}
-
-void trie::insert(const char *pat, int patlen, void *val)
-{
- trie_node **p = &tp;
- assert(patlen > 0 && pat != 0);
- for (;;) {
- while (*p != 0 && (*p)->c < pat[0])
- p = &((*p)->right);
- if (*p == 0 || (*p)->c != pat[0])
- *p = new trie_node(pat[0], *p);
- if (--patlen == 0) {
- (*p)->val = val;
- break;
- }
- ++pat;
- p = &((*p)->down);
- }
-}
-
-void trie::find(const char *pat, int patlen)
-{
- trie_node *p = tp;
- for (int i = 0; p != 0 && i < patlen; i++) {
- while (p != 0 && p->c < pat[i])
- p = p->right;
- if (p != 0 && p->c == pat[i]) {
- if (p->val != 0)
- do_match(i+1, p->val);
- p = p->down;
- }
- else
- break;
- }
-}
-
-struct operation {
- operation *next;
- short distance;
- short num;
- operation(int, int, operation *);
-};
-
-operation::operation(int i, int j, operation *op)
-: next(op), distance(j), num(i)
-{
-}
-
-void hyphen_trie::insert_pattern(const char *pat, int patlen, int *num)
-{
- operation *op = 0;
- for (int i = 0; i < patlen+1; i++)
- if (num[i] != 0)
- op = new operation(num[i], patlen - i, op);
- insert(pat, patlen, op);
-}
-
-void hyphen_trie::insert_hyphenation(dictionary *ex, const char *pat,
- int patlen)
-{
- char buf[WORD_MAX + 1];
- unsigned char pos[WORD_MAX + 2];
- int i = 0, j = 0;
- int npos = 0;
- while (j < patlen) {
- unsigned char c = pat[j++];
- if (c == '-') {
- if (i > 0 && (npos == 0 || pos[npos - 1] != i))
- pos[npos++] = i;
- }
- else
- buf[i++] = hpf_code_table[c];
- }
- if (i > 0) {
- pos[npos] = 0;
- buf[i] = 0;
- unsigned char *tem = new unsigned char[npos + 1];
- memcpy(tem, pos, npos + 1);
- tem = (unsigned char *)ex->lookup(symbol(buf), tem);
- if (tem)
- a_delete tem;
- }
-}
-
-void hyphen_trie::hyphenate(const char *word, int len, int *hyphens)
-{
- int j;
- for (j = 0; j < len + 1; j++)
- hyphens[j] = 0;
- for (j = 0; j < len - 1; j++) {
- h = hyphens + j;
- find(word + j, len - j);
- }
-}
-
-inline int max(int m, int n)
-{
- return m > n ? m : n;
-}
-
-void hyphen_trie::do_match(int i, void *v)
-{
- operation *op = (operation *)v;
- while (op != 0) {
- h[i - op->distance] = max(h[i - op->distance], op->num);
- op = op->next;
- }
-}
-
-void hyphen_trie::do_delete(void *v)
-{
- operation *op = (operation *)v;
- while (op) {
- operation *tem = op;
- op = tem->next;
- delete tem;
- }
-}
-
-/* We use very simple rules to parse TeX's hyphenation patterns.
-
- . `%' starts a comment even if preceded by `\'.
-
- . No support for digraphs and like `\$'.
-
- . `^^xx' (`x' is 0-9 or a-f), and `^^x' (character code of `x' in the
- range 0-127) are recognized; other use of `^' causes an error.
-
- . No macro expansion.
-
- . We check for the expression `\patterns{...}' (possibly with
- whitespace before and after the braces). Everything between the
- braces is taken as hyphenation patterns. Consequently, `{' and `}'
- are not allowed in patterns.
-
- . Similarly, `\hyphenation{...}' gives a list of hyphenation
- exceptions.
-
- . `\endinput' is recognized also.
-
- . For backwards compatibility, if `\patterns' is missing, the
- whole file is treated as a list of hyphenation patterns (only
- recognizing `%' as the start of a comment.
-
-*/
-
-int hyphen_trie::hpf_getc(FILE *f)
-{
- int c = getc(f);
- int c1;
- int cc = 0;
- if (c != '^')
- return c;
- c = getc(f);
- if (c != '^')
- goto fail;
- c = getc(f);
- c1 = getc(f);
- if (((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f'))
- && ((c1 >= '0' && c1 <= '9') || (c1 >= 'a' && c1 <= 'f'))) {
- if (c >= '0' && c <= '9')
- c -= '0';
- else
- c = c - 'a' + 10;
- if (c1 >= '0' && c1 <= '9')
- c1 -= '0';
- else
- c1 = c1 - 'a' + 10;
- cc = c * 16 + c1;
- }
- else {
- ungetc(c1, f);
- if (c >= 0 && c <= 63)
- cc = c + 64;
- else if (c >= 64 && c <= 127)
- cc = c - 64;
- else
- goto fail;
- }
- return cc;
-fail:
- error("invalid ^, ^^x, or ^^xx character in hyphenation patterns file");
- return c;
-}
-
-void hyphen_trie::read_patterns_file(const char *name, int append,
- dictionary *ex)
-{
- if (!append)
- clear();
- char buf[WORD_MAX];
- for (int i = 0; i < WORD_MAX; i++)
- buf[i] = 0;
- int num[WORD_MAX+1];
- errno = 0;
- char *path = 0;
- FILE *fp = mac_path->open_file(name, &path);
- if (fp == 0) {
- error("can't find hyphenation patterns file `%1'", name);
- return;
- }
- int c = hpf_getc(fp);
- int have_patterns = 0; // we've seen \patterns
- int final_pattern = 0; // 1 if we have a trailing closing brace
- int have_hyphenation = 0; // we've seen \hyphenation
- int final_hyphenation = 0; // 1 if we have a trailing closing brace
- int have_keyword = 0; // we've seen either \patterns or \hyphenation
- int traditional = 0; // don't handle \patterns
- for (;;) {
- for (;;) {
- if (c == '%') { // skip comments
- do {
- c = getc(fp);
- } while (c != EOF && c != '\n');
- }
- if (c == EOF || !csspace(c))
- break;
- c = hpf_getc(fp);
- }
- if (c == EOF) {
- if (have_keyword || traditional) // we are done
- break;
- else { // rescan file in `traditional' mode
- rewind(fp);
- traditional = 1;
- c = hpf_getc(fp);
- continue;
- }
- }
- int i = 0;
- num[0] = 0;
- if (!(c == '{' || c == '}')) { // skip braces at line start
- do { // scan patterns
- if (csdigit(c))
- num[i] = c - '0';
- else {
- buf[i++] = c;
- num[i] = 0;
- }
- c = hpf_getc(fp);
- } while (i < WORD_MAX && c != EOF && !csspace(c)
- && c != '%' && c != '{' && c != '}');
- }
- if (!traditional) {
- if (i >= 9 && !strncmp(buf + i - 9, "\\patterns", 9)) {
- while (csspace(c))
- c = hpf_getc(fp);
- if (c == '{') {
- if (have_patterns || have_hyphenation)
- error("\\patterns not allowed inside of %1 group",
- have_patterns ? "\\patterns" : "\\hyphenation");
- else {
- have_patterns = 1;
- have_keyword = 1;
- }
- c = hpf_getc(fp);
- continue;
- }
- }
- else if (i >= 12 && !strncmp(buf + i - 12, "\\hyphenation", 12)) {
- while (csspace(c))
- c = hpf_getc(fp);
- if (c == '{') {
- if (have_patterns || have_hyphenation)
- error("\\hyphenation not allowed inside of %1 group",
- have_patterns ? "\\patterns" : "\\hyphenation");
- else {
- have_hyphenation = 1;
- have_keyword = 1;
- }
- c = hpf_getc(fp);
- continue;
- }
- }
- else if (strstr(buf, "\\endinput")) {
- if (have_patterns || have_hyphenation)
- error("found \\endinput inside of %1 group",
- have_patterns ? "\\patterns" : "\\hyphenation");
- break;
- }
- else if (c == '}') {
- if (have_patterns) {
- have_patterns = 0;
- if (i > 0)
- final_pattern = 1;
- }
- else if (have_hyphenation) {
- have_hyphenation = 0;
- if (i > 0)
- final_hyphenation = 1;
- }
- c = hpf_getc(fp);
- }
- else if (c == '{') {
- if (have_patterns || have_hyphenation)
- error("`{' not allowed within %1 group",
- have_patterns ? "\\patterns" : "\\hyphenation");
- c = hpf_getc(fp); // skipped if not starting \patterns
- // or \hyphenation
- }
- }
- else {
- if (c == '{' || c == '}')
- c = hpf_getc(fp);
- }
- if (i > 0) {
- if (have_patterns || final_pattern || traditional) {
- for (int j = 0; j < i; j++)
- buf[j] = hpf_code_table[(unsigned char)buf[j]];
- insert_pattern(buf, i, num);
- final_pattern = 0;
- }
- else if (have_hyphenation || final_hyphenation) {
- insert_hyphenation(ex, buf, i);
- final_hyphenation = 0;
- }
- }
- }
- fclose(fp);
- a_delete path;
- return;
-}
-
-void hyphenate(hyphen_list *h, unsigned flags)
-{
- if (!current_language)
- return;
- while (h) {
- while (h && h->hyphenation_code == 0)
- h = h->next;
- int len = 0;
- char hbuf[WORD_MAX+2];
- char *buf = hbuf + 1;
- hyphen_list *tem;
- for (tem = h; tem && len < WORD_MAX; tem = tem->next) {
- if (tem->hyphenation_code != 0)
- buf[len++] = tem->hyphenation_code;
- else
- break;
- }
- hyphen_list *nexth = tem;
- if (len > 2) {
- buf[len] = 0;
- unsigned char *pos
- = (unsigned char *)current_language->exceptions.lookup(buf);
- if (pos != 0) {
- int j = 0;
- int i = 1;
- for (tem = h; tem != 0; tem = tem->next, i++)
- if (pos[j] == i) {
- tem->hyphen = 1;
- j++;
- }
- }
- else {
- hbuf[0] = hbuf[len+1] = '.';
- int num[WORD_MAX+3];
- current_language->patterns.hyphenate(hbuf, len+2, num);
- int i;
- num[2] = 0;
- if (flags & 8)
- num[3] = 0;
- if (flags & 4)
- --len;
- for (i = 2, tem = h; i < len && tem; tem = tem->next, i++)
- if (num[i] & 1)
- tem->hyphen = 1;
- }
- }
- h = nexth;
- }
-}
-
-static void do_hyphenation_patterns_file(int append)
-{
- symbol name = get_long_name(1);
- if (!name.is_null()) {
- if (!current_language)
- error("no current hyphenation language");
- else
- current_language->patterns.read_patterns_file(
- name.contents(), append,
- &current_language->exceptions);
- }
- skip_line();
-}
-
-static void hyphenation_patterns_file()
-{
- do_hyphenation_patterns_file(0);
-}
-
-static void hyphenation_patterns_file_append()
-{
- do_hyphenation_patterns_file(1);
-}
-
-class hyphenation_language_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *hyphenation_language_reg::get_string()
-{
- return current_language ? current_language->name.contents() : "";
-}
-
-void init_hyphen_requests()
-{
- init_request("hw", hyphen_word);
- init_request("hla", set_hyphenation_language);
- init_request("hpf", hyphenation_patterns_file);
- init_request("hpfa", hyphenation_patterns_file_append);
- number_reg_dictionary.define(".hla", new hyphenation_language_reg);
-}
diff --git a/contrib/groff/src/roff/troff/env.h b/contrib/groff/src/roff/troff/env.h
deleted file mode 100644
index 2ee7bdcf3e1e..000000000000
--- a/contrib/groff/src/roff/troff/env.h
+++ /dev/null
@@ -1,415 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-class statem;
-
-struct size_range {
- int min;
- int max;
-};
-
-class font_size {
- static size_range *size_table;
- static int nranges;
- int p;
-public:
- font_size();
- font_size(int points);
- int to_points();
- int to_scaled_points();
- int to_units();
- int operator==(font_size);
- int operator!=(font_size);
- static void init_size_table(int *sizes);
-};
-
-inline font_size::font_size() : p(0)
-{
-}
-
-inline int font_size::operator==(font_size fs)
-{
- return p == fs.p;
-}
-
-inline int font_size::operator!=(font_size fs)
-{
- return p != fs.p;
-}
-
-inline int font_size::to_scaled_points()
-{
- return p;
-}
-
-inline int font_size::to_points()
-{
- return p/sizescale;
-}
-
-class environment;
-
-hunits env_digit_width(environment *);
-hunits env_space_width(environment *);
-hunits env_sentence_space_width(environment *);
-hunits env_narrow_space_width(environment *);
-hunits env_half_narrow_space_width(environment *);
-
-struct tab;
-
-enum tab_type { TAB_NONE, TAB_LEFT, TAB_CENTER, TAB_RIGHT };
-
-class tab_stops {
- tab *initial_list;
- tab *repeated_list;
-public:
- tab_stops();
- tab_stops(hunits distance, tab_type type);
- tab_stops(const tab_stops &);
- ~tab_stops();
- void operator=(const tab_stops &);
- tab_type distance_to_next_tab(hunits pos, hunits *distance);
- tab_type distance_to_next_tab(hunits curpos, hunits *distance, hunits *leftpos);
- void clear();
- void add_tab(hunits pos, tab_type type, int repeated);
- const char *to_string();
-};
-
-const unsigned MARGIN_CHARACTER_ON = 1;
-const unsigned MARGIN_CHARACTER_NEXT = 2;
-
-class charinfo;
-struct node;
-struct breakpoint;
-class font_family;
-class pending_output_line;
-
-// declarations to avoid friend name injection problems
-void title_length();
-void space_size();
-void fill();
-void no_fill();
-void adjust();
-void no_adjust();
-void center();
-void right_justify();
-void vertical_spacing();
-void post_vertical_spacing();
-void line_spacing();
-void line_length();
-void indent();
-void temporary_indent();
-void do_underline(int);
-void do_input_trap(int);
-void set_tabs();
-void margin_character();
-void no_number();
-void number_lines();
-void leader_character();
-void tab_character();
-void hyphenate_request();
-void no_hyphenate();
-void hyphen_line_max_request();
-void hyphenation_space_request();
-void hyphenation_margin_request();
-void line_width();
-#if 0
-void tabs_save();
-void tabs_restore();
-#endif
-void line_tabs_request();
-void title();
-#ifdef WIDOW_CONTROL
-void widow_control_request();
-#endif /* WIDOW_CONTROL */
-
-void do_divert(int append, int boxing);
-
-class environment {
- int dummy; // dummy environment used for \w
- hunits prev_line_length;
- hunits line_length;
- hunits prev_title_length;
- hunits title_length;
- font_size prev_size;
- font_size size;
- int requested_size;
- int prev_requested_size;
- int char_height;
- int char_slant;
- int prev_fontno;
- int fontno;
- font_family *prev_family;
- font_family *family;
- int space_size; // in 36ths of an em
- int sentence_space_size; // same but for spaces at the end of sentences
- int adjust_mode;
- int fill;
- int interrupted;
- int prev_line_interrupted;
- int center_lines;
- int right_justify_lines;
- vunits prev_vertical_spacing;
- vunits vertical_spacing;
- vunits prev_post_vertical_spacing;
- vunits post_vertical_spacing;
- int prev_line_spacing;
- int line_spacing;
- hunits prev_indent;
- hunits indent;
- hunits temporary_indent;
- int have_temporary_indent;
- hunits saved_indent;
- hunits target_text_length;
- int pre_underline_fontno;
- int underline_lines;
- int underline_spaces;
- symbol input_trap;
- int input_trap_count;
- int continued_input_trap;
- node *line; // in reverse order
- hunits prev_text_length;
- hunits width_total;
- int space_total;
- hunits input_line_start;
- node *tab_contents;
- hunits tab_width;
- hunits tab_distance;
- int line_tabs;
- tab_type current_tab;
- node *leader_node;
- charinfo *tab_char;
- charinfo *leader_char;
- int current_field; // is there a current field?
- hunits field_distance;
- hunits pre_field_width;
- int field_spaces;
- int tab_field_spaces;
- int tab_precedes_field;
- int discarding;
- int spread_flag; // set by \p
- unsigned margin_character_flags;
- node *margin_character_node;
- hunits margin_character_distance;
- node *numbering_nodes;
- hunits line_number_digit_width;
- int number_text_separation; // in digit spaces
- int line_number_indent; // in digit spaces
- int line_number_multiple;
- int no_number_count;
- unsigned hyphenation_flags;
- int hyphen_line_count;
- int hyphen_line_max;
- hunits hyphenation_space;
- hunits hyphenation_margin;
- int composite; // used for construction of composite char?
- pending_output_line *pending_lines;
-#ifdef WIDOW_CONTROL
- int widow_control;
-#endif /* WIDOW_CONTROL */
- color *glyph_color;
- color *prev_glyph_color;
- color *fill_color;
- color *prev_fill_color;
-
- tab_type distance_to_next_tab(hunits *);
- tab_type distance_to_next_tab(hunits *distance, hunits *leftpos);
- void start_line();
- void output_line(node *, hunits, int);
- void output(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width, int was_centered);
- void output_title(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width);
-#ifdef WIDOW_CONTROL
- void mark_last_line();
-#endif /* WIDOW_CONTROL */
- breakpoint *choose_breakpoint();
- void hyphenate_line(int start_here = 0);
- void start_field();
- void wrap_up_field();
- void add_padding();
- node *make_tab_node(hunits d, node *next = 0);
- node *get_prev_char();
-public:
- int seen_space;
- int seen_eol;
- int suppress_next_eol;
- int seen_break;
- tab_stops tabs;
- const symbol name;
- unsigned char control_char;
- unsigned char no_break_control_char;
- charinfo *hyphen_indicator_char;
-
- environment(symbol);
- environment(const environment *); // for temporary environment
- ~environment();
- statem *construct_state(int only_eol);
- void copy(const environment *);
- int is_dummy() { return dummy; }
- int is_empty();
- int is_composite() { return composite; }
- void set_composite() { composite = 1; }
- vunits get_vertical_spacing(); // .v
- vunits get_post_vertical_spacing(); // .pvs
- int get_line_spacing(); // .L
- vunits total_post_vertical_spacing();
- int get_point_size() { return size.to_scaled_points(); }
- font_size get_font_size() { return size; }
- int get_size() { return size.to_units(); }
- int get_requested_point_size() { return requested_size; }
- int get_char_height() { return char_height; }
- int get_char_slant() { return char_slant; }
- hunits get_digit_width();
- int get_font() { return fontno; }; // .f
- font_family *get_family() { return family; }
- int get_bold(); // .b
- int get_adjust_mode(); // .j
- int get_fill(); // .u
- hunits get_indent(); // .i
- hunits get_temporary_indent();
- hunits get_line_length(); // .l
- hunits get_saved_line_length(); // .ll
- hunits get_saved_indent(); // .in
- hunits get_title_length();
- hunits get_prev_char_width(); // .w
- hunits get_prev_char_skew();
- vunits get_prev_char_height();
- vunits get_prev_char_depth();
- hunits get_text_length(); // .k
- hunits get_prev_text_length(); // .n
- hunits get_space_width() { return env_space_width(this); }
- int get_space_size() { return space_size; } // in ems/36
- int get_sentence_space_size() { return sentence_space_size; }
- hunits get_narrow_space_width() { return env_narrow_space_width(this); }
- hunits get_half_narrow_space_width()
- { return env_half_narrow_space_width(this); }
- hunits get_input_line_position();
- const char *get_tabs();
- int get_line_tabs();
- int get_hyphenation_flags();
- int get_hyphen_line_max();
- int get_hyphen_line_count();
- hunits get_hyphenation_space();
- hunits get_hyphenation_margin();
- int get_center_lines();
- int get_right_justify_lines();
- int get_prev_line_interrupted() { return prev_line_interrupted; }
- color *get_fill_color();
- color *get_glyph_color();
- color *get_prev_glyph_color();
- color *get_prev_fill_color();
- void set_glyph_color(color *c);
- void set_fill_color(color *c);
- node *make_char_node(charinfo *);
- node *extract_output_line();
- void width_registers();
- void wrap_up_tab();
- void set_font(int);
- void set_font(symbol);
- void set_family(symbol);
- void set_size(int);
- void set_char_height(int);
- void set_char_slant(int);
- void set_input_line_position(hunits); // used by \n(hp
- void interrupt();
- void spread() { spread_flag = 1; }
- void possibly_break_line(int start_here = 0, int forced = 0);
- void do_break(int spread = 0); // .br
- void final_break();
- node *make_tag(const char *name, int i);
- void newline();
- void handle_tab(int is_leader = 0); // do a tab or leader
- void add_node(node *);
- void add_char(charinfo *);
- void add_hyphen_indicator();
- void add_italic_correction();
- void space();
- void space(hunits, hunits);
- void space_newline();
- const char *get_glyph_color_string();
- const char *get_fill_color_string();
- const char *get_font_family_string();
- const char *get_font_name_string();
- const char *get_style_name_string();
- const char *get_name_string();
- const char *get_point_size_string();
- const char *get_requested_point_size_string();
- void output_pending_lines();
- void construct_format_state(node *n, int was_centered, int fill);
- void construct_new_line_state(node *n);
- void dump_troff_state();
-
- friend void title_length();
- friend void space_size();
- friend void fill();
- friend void no_fill();
- friend void adjust();
- friend void no_adjust();
- friend void center();
- friend void right_justify();
- friend void vertical_spacing();
- friend void post_vertical_spacing();
- friend void line_spacing();
- friend void line_length();
- friend void indent();
- friend void temporary_indent();
- friend void do_underline(int);
- friend void do_input_trap(int);
- friend void set_tabs();
- friend void margin_character();
- friend void no_number();
- friend void number_lines();
- friend void leader_character();
- friend void tab_character();
- friend void hyphenate_request();
- friend void no_hyphenate();
- friend void hyphen_line_max_request();
- friend void hyphenation_space_request();
- friend void hyphenation_margin_request();
- friend void line_width();
-#if 0
- friend void tabs_save();
- friend void tabs_restore();
-#endif
- friend void line_tabs_request();
- friend void title();
-#ifdef WIDOW_CONTROL
- friend void widow_control_request();
-#endif /* WIDOW_CONTROL */
-
- friend void do_divert(int append, int boxing);
-};
-
-extern environment *curenv;
-extern void pop_env();
-extern void push_env(int);
-
-void init_environments();
-void read_hyphen_file(const char *name);
-
-extern double spread_limit;
-
-extern int break_flag;
-extern symbol default_family;
-extern int translate_space_to_dummy;
-
-extern unsigned char hpf_code_table[];
diff --git a/contrib/groff/src/roff/troff/hvunits.h b/contrib/groff/src/roff/troff/hvunits.h
deleted file mode 100644
index 99e6692eb28b..000000000000
--- a/contrib/groff/src/roff/troff/hvunits.h
+++ /dev/null
@@ -1,340 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-class vunits {
- int n;
-public:
- vunits();
- vunits(units);
- units to_units();
- int is_zero();
- vunits& operator+=(const vunits&);
- vunits& operator-=(const vunits&);
- friend inline vunits scale(vunits n, units x, units y); // scale n by x/y
- friend inline vunits scale(vunits n, vunits x, vunits y);
- friend inline vunits operator +(const vunits&, const vunits&);
- friend inline vunits operator -(const vunits&, const vunits&);
- friend inline vunits operator -(const vunits&);
- friend inline int operator /(const vunits&, const vunits&);
- friend inline vunits operator /(const vunits&, int);
- friend inline vunits operator *(const vunits&, int);
- friend inline vunits operator *(int, const vunits&);
- friend inline int operator <(const vunits&, const vunits&);
- friend inline int operator >(const vunits&, const vunits&);
- friend inline int operator <=(const vunits&, const vunits&);
- friend inline int operator >=(const vunits&, const vunits&);
- friend inline int operator ==(const vunits&, const vunits&);
- friend inline int operator !=(const vunits&, const vunits&);
-};
-
-extern vunits V0;
-
-
-class hunits {
- int n;
-public:
- hunits();
- hunits(units);
- units to_units();
- int is_zero();
- hunits& operator+=(const hunits&);
- hunits& operator-=(const hunits&);
- friend inline hunits scale(hunits n, units x, units y); // scale n by x/y
- friend inline hunits scale(hunits n, double x);
- friend inline hunits operator +(const hunits&, const hunits&);
- friend inline hunits operator -(const hunits&, const hunits&);
- friend inline hunits operator -(const hunits&);
- friend inline int operator /(const hunits&, const hunits&);
- friend inline hunits operator /(const hunits&, int);
- friend inline hunits operator *(const hunits&, int);
- friend inline hunits operator *(int, const hunits&);
- friend inline int operator <(const hunits&, const hunits&);
- friend inline int operator >(const hunits&, const hunits&);
- friend inline int operator <=(const hunits&, const hunits&);
- friend inline int operator >=(const hunits&, const hunits&);
- friend inline int operator ==(const hunits&, const hunits&);
- friend inline int operator !=(const hunits&, const hunits&);
-};
-
-extern hunits H0;
-
-extern int get_vunits(vunits *, unsigned char si);
-extern int get_hunits(hunits *, unsigned char si);
-extern int get_vunits(vunits *, unsigned char si, vunits prev_value);
-extern int get_hunits(hunits *, unsigned char si, hunits prev_value);
-
-inline vunits:: vunits() : n(0)
-{
-}
-
-inline units vunits::to_units()
-{
- return n*vresolution;
-}
-
-inline int vunits::is_zero()
-{
- return n == 0;
-}
-
-inline vunits operator +(const vunits & x, const vunits & y)
-{
- vunits r;
- r = x;
- r.n += y.n;
- return r;
-}
-
-inline vunits operator -(const vunits & x, const vunits & y)
-{
- vunits r;
- r = x;
- r.n -= y.n;
- return r;
-}
-
-inline vunits operator -(const vunits & x)
-{
- vunits r;
- r.n = -x.n;
- return r;
-}
-
-inline int operator /(const vunits & x, const vunits & y)
-{
- return x.n/y.n;
-}
-
-inline vunits operator /(const vunits & x, int n)
-{
- vunits r;
- r = x;
- r.n /= n;
- return r;
-}
-
-inline vunits operator *(const vunits & x, int n)
-{
- vunits r;
- r = x;
- r.n *= n;
- return r;
-}
-
-inline vunits operator *(int n, const vunits & x)
-{
- vunits r;
- r = x;
- r.n *= n;
- return r;
-}
-
-inline int operator <(const vunits & x, const vunits & y)
-{
- return x.n < y.n;
-}
-
-inline int operator >(const vunits & x, const vunits & y)
-{
- return x.n > y.n;
-}
-
-inline int operator <=(const vunits & x, const vunits & y)
-{
- return x.n <= y.n;
-}
-
-inline int operator >=(const vunits & x, const vunits & y)
-{
- return x.n >= y.n;
-}
-
-inline int operator ==(const vunits & x, const vunits & y)
-{
- return x.n == y.n;
-}
-
-inline int operator !=(const vunits & x, const vunits & y)
-{
- return x.n != y.n;
-}
-
-
-inline vunits& vunits::operator+=(const vunits & x)
-{
- n += x.n;
- return *this;
-}
-
-inline vunits& vunits::operator-=(const vunits & x)
-{
- n -= x.n;
- return *this;
-}
-
-inline hunits:: hunits() : n(0)
-{
-}
-
-inline units hunits::to_units()
-{
- return n*hresolution;
-}
-
-inline int hunits::is_zero()
-{
- return n == 0;
-}
-
-inline hunits operator +(const hunits & x, const hunits & y)
-{
- hunits r;
- r = x;
- r.n += y.n;
- return r;
-}
-
-inline hunits operator -(const hunits & x, const hunits & y)
-{
- hunits r;
- r = x;
- r.n -= y.n;
- return r;
-}
-
-inline hunits operator -(const hunits & x)
-{
- hunits r;
- r = x;
- r.n = -x.n;
- return r;
-}
-
-inline int operator /(const hunits & x, const hunits & y)
-{
- return x.n/y.n;
-}
-
-inline hunits operator /(const hunits & x, int n)
-{
- hunits r;
- r = x;
- r.n /= n;
- return r;
-}
-
-inline hunits operator *(const hunits & x, int n)
-{
- hunits r;
- r = x;
- r.n *= n;
- return r;
-}
-
-inline hunits operator *(int n, const hunits & x)
-{
- hunits r;
- r = x;
- r.n *= n;
- return r;
-}
-
-inline int operator <(const hunits & x, const hunits & y)
-{
- return x.n < y.n;
-}
-
-inline int operator >(const hunits & x, const hunits & y)
-{
- return x.n > y.n;
-}
-
-inline int operator <=(const hunits & x, const hunits & y)
-{
- return x.n <= y.n;
-}
-
-inline int operator >=(const hunits & x, const hunits & y)
-{
- return x.n >= y.n;
-}
-
-inline int operator ==(const hunits & x, const hunits & y)
-{
- return x.n == y.n;
-}
-
-inline int operator !=(const hunits & x, const hunits & y)
-{
- return x.n != y.n;
-}
-
-
-inline hunits& hunits::operator+=(const hunits & x)
-{
- n += x.n;
- return *this;
-}
-
-inline hunits& hunits::operator-=(const hunits & x)
-{
- n -= x.n;
- return *this;
-}
-
-inline hunits scale(hunits n, units x, units y)
-{
- hunits r;
- r.n = scale(n.n, x, y);
- return r;
-}
-
-inline vunits scale(vunits n, units x, units y)
-{
- vunits r;
- r.n = scale(n.n, x, y);
- return r;
-}
-
-inline vunits scale(vunits n, vunits x, vunits y)
-{
- vunits r;
- r.n = scale(n.n, x.n, y.n);
- return r;
-}
-
-inline hunits scale(hunits n, double x)
-{
- hunits r;
- r.n = int(n.n*x);
- return r;
-}
-
-inline units scale(units n, double x)
-{
- return int(n*x);
-}
-
-inline units points_to_units(units n)
-{
- return scale(n, units_per_inch, 72);
-}
-
diff --git a/contrib/groff/src/roff/troff/input.cpp b/contrib/groff/src/roff/troff/input.cpp
deleted file mode 100644
index da1c76b0a137..000000000000
--- a/contrib/groff/src/roff/troff/input.cpp
+++ /dev/null
@@ -1,8215 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define DEBUGGING
-
-#include "troff.h"
-#include "dictionary.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "token.h"
-#include "div.h"
-#include "reg.h"
-#include "charinfo.h"
-#include "macropath.h"
-#include "input.h"
-#include "defs.h"
-#include "font.h"
-#include "unicode.h"
-
-// Needed for getpid() and isatty()
-#include "posix.h"
-
-#include "nonposix.h"
-
-#ifdef NEED_DECLARATION_PUTENV
-extern "C" {
- int putenv(const char *);
-}
-#endif /* NEED_DECLARATION_PUTENV */
-
-#define MACRO_PREFIX "tmac."
-#define MACRO_POSTFIX ".tmac"
-#define INITIAL_STARTUP_FILE "troffrc"
-#define FINAL_STARTUP_FILE "troffrc-end"
-#define DEFAULT_INPUT_STACK_LIMIT 1000
-
-#ifndef DEFAULT_WARNING_MASK
-// warnings that are enabled by default
-#define DEFAULT_WARNING_MASK \
- (WARN_CHAR|WARN_NUMBER|WARN_BREAK|WARN_SPACE|WARN_FONT)
-#endif
-
-// initial size of buffer for reading names; expanded as necessary
-#define ABUF_SIZE 16
-
-extern "C" const char *program_name;
-extern "C" const char *Version_string;
-
-#ifdef COLUMN
-void init_column_requests();
-#endif /* COLUMN */
-
-static node *read_draw_node();
-static void read_color_draw_node(token &);
-static void push_token(const token &);
-void copy_file();
-#ifdef COLUMN
-void vjustify();
-#endif /* COLUMN */
-void transparent_file();
-
-token tok;
-int break_flag = 0;
-int color_flag = 1; // colors are on by default
-static int backtrace_flag = 0;
-#ifndef POPEN_MISSING
-char *pipe_command = 0;
-#endif
-charinfo *charset_table[256];
-unsigned char hpf_code_table[256];
-
-static int warning_mask = DEFAULT_WARNING_MASK;
-static int inhibit_errors = 0;
-static int ignoring = 0;
-
-static void enable_warning(const char *);
-static void disable_warning(const char *);
-
-static int escape_char = '\\';
-static symbol end_macro_name;
-static symbol blank_line_macro_name;
-static int compatible_flag = 0;
-int ascii_output_flag = 0;
-int suppress_output_flag = 0;
-int is_html = 0;
-int begin_level = 0; // number of nested \O escapes
-
-int have_input = 0; // whether \f, \F, \D'F...', \H, \m, \M,
- // \R, \s, or \S has been processed in
- // token::next()
-int old_have_input = 0; // value of have_input right before \n
-int tcommand_flag = 0;
-int safer_flag = 1; // safer by default
-
-int have_string_arg = 0; // whether we have \*[foo bar...]
-
-double spread_limit = -3.0 - 1.0; // negative means deactivated
-
-double warn_scale;
-char warn_scaling_indicator;
-int debug_state = 0; // turns on debugging of the html troff state
-
-search_path *mac_path = &safer_macro_path;
-
-// Defaults to the current directory.
-search_path include_search_path(0, 0, 0, 1);
-
-static int get_copy(node**, int = 0);
-static void copy_mode_error(const char *,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg);
-
-enum read_mode { ALLOW_EMPTY, WITH_ARGS, NO_ARGS };
-static symbol read_escape_name(read_mode mode = NO_ARGS);
-static symbol read_long_escape_name(read_mode mode = NO_ARGS);
-static void interpolate_string(symbol);
-static void interpolate_string_with_args(symbol);
-static void interpolate_macro(symbol);
-static void interpolate_number_format(symbol);
-static void interpolate_environment_variable(symbol);
-
-static symbol composite_glyph_name(symbol);
-static void interpolate_arg(symbol);
-static request_or_macro *lookup_request(symbol);
-static int get_delim_number(units *, unsigned char);
-static int get_delim_number(units *, unsigned char, units);
-static symbol do_get_long_name(int, char);
-static int get_line_arg(units *res, unsigned char si, charinfo **cp);
-static int read_size(int *);
-static symbol get_delim_name();
-static void init_registers();
-static void trapping_blank_line();
-
-class input_iterator;
-input_iterator *make_temp_iterator(const char *);
-const char *input_char_description(int);
-
-void process_input_stack();
-void chop_macro(); // declare to avoid friend name injection
-
-
-void set_escape_char()
-{
- if (has_arg()) {
- if (tok.ch() == 0) {
- error("bad escape character");
- escape_char = '\\';
- }
- else
- escape_char = tok.ch();
- }
- else
- escape_char = '\\';
- skip_line();
-}
-
-void escape_off()
-{
- escape_char = 0;
- skip_line();
-}
-
-static int saved_escape_char = '\\';
-
-void save_escape_char()
-{
- saved_escape_char = escape_char;
- skip_line();
-}
-
-void restore_escape_char()
-{
- escape_char = saved_escape_char;
- skip_line();
-}
-
-class input_iterator {
-public:
- input_iterator();
- input_iterator(int is_div);
- virtual ~input_iterator() {}
- int get(node **);
- friend class input_stack;
- int is_diversion;
- statem *diversion_state;
-protected:
- const unsigned char *ptr;
- const unsigned char *eptr;
- input_iterator *next;
-private:
- virtual int fill(node **);
- virtual int peek();
- virtual int has_args() { return 0; }
- virtual int nargs() { return 0; }
- virtual input_iterator *get_arg(int) { return 0; }
- virtual int get_location(int, const char **, int *) { return 0; }
- virtual void backtrace() {}
- virtual int set_location(const char *, int) { return 0; }
- virtual int next_file(FILE *, const char *) { return 0; }
- virtual void shift(int) {}
- virtual int is_boundary() {return 0; }
- virtual int is_file() { return 0; }
- virtual int is_macro() { return 0; }
- virtual void save_compatible_flag(int) {}
- virtual int get_compatible_flag() { return 0; }
-};
-
-input_iterator::input_iterator()
-: is_diversion(0), ptr(0), eptr(0)
-{
-}
-
-input_iterator::input_iterator(int is_div)
-: is_diversion(is_div), ptr(0), eptr(0)
-{
-}
-
-int input_iterator::fill(node **)
-{
- return EOF;
-}
-
-int input_iterator::peek()
-{
- return EOF;
-}
-
-inline int input_iterator::get(node **p)
-{
- return ptr < eptr ? *ptr++ : fill(p);
-}
-
-class input_boundary : public input_iterator {
-public:
- int is_boundary() { return 1; }
-};
-
-class input_return_boundary : public input_iterator {
-public:
- int is_boundary() { return 2; }
-};
-
-class file_iterator : public input_iterator {
- FILE *fp;
- int lineno;
- const char *filename;
- int popened;
- int newline_flag;
- int seen_escape;
- enum { BUF_SIZE = 512 };
- unsigned char buf[BUF_SIZE];
- void close();
-public:
- file_iterator(FILE *, const char *, int = 0);
- ~file_iterator();
- int fill(node **);
- int peek();
- int get_location(int, const char **, int *);
- void backtrace();
- int set_location(const char *, int);
- int next_file(FILE *, const char *);
- int is_file();
-};
-
-file_iterator::file_iterator(FILE *f, const char *fn, int po)
-: fp(f), lineno(1), filename(fn), popened(po),
- newline_flag(0), seen_escape(0)
-{
- if ((font::use_charnames_in_special) && (fn != 0)) {
- if (!the_output)
- init_output();
- the_output->put_filename(fn);
- }
-}
-
-file_iterator::~file_iterator()
-{
- close();
-}
-
-void file_iterator::close()
-{
- if (fp == stdin)
- clearerr(stdin);
-#ifndef POPEN_MISSING
- else if (popened)
- pclose(fp);
-#endif /* not POPEN_MISSING */
- else
- fclose(fp);
-}
-
-int file_iterator::is_file()
-{
- return 1;
-}
-
-int file_iterator::next_file(FILE *f, const char *s)
-{
- close();
- filename = s;
- fp = f;
- lineno = 1;
- newline_flag = 0;
- seen_escape = 0;
- popened = 0;
- ptr = 0;
- eptr = 0;
- return 1;
-}
-
-int file_iterator::fill(node **)
-{
- if (newline_flag)
- lineno++;
- newline_flag = 0;
- unsigned char *p = buf;
- ptr = p;
- unsigned char *e = p + BUF_SIZE;
- while (p < e) {
- int c = getc(fp);
- if (c == EOF)
- break;
- if (invalid_input_char(c))
- warning(WARN_INPUT, "invalid input character code %1", int(c));
- else {
- *p++ = c;
- if (c == '\n') {
- seen_escape = 0;
- newline_flag = 1;
- break;
- }
- seen_escape = (c == '\\');
- }
- }
- if (p > buf) {
- eptr = p;
- return *ptr++;
- }
- else {
- eptr = p;
- return EOF;
- }
-}
-
-int file_iterator::peek()
-{
- int c = getc(fp);
- while (invalid_input_char(c)) {
- warning(WARN_INPUT, "invalid input character code %1", int(c));
- c = getc(fp);
- }
- if (c != EOF)
- ungetc(c, fp);
- return c;
-}
-
-int file_iterator::get_location(int /*allow_macro*/,
- const char **filenamep, int *linenop)
-{
- *linenop = lineno;
- if (filename != 0 && strcmp(filename, "-") == 0)
- *filenamep = "<standard input>";
- else
- *filenamep = filename;
- return 1;
-}
-
-void file_iterator::backtrace()
-{
- errprint("%1:%2: backtrace: %3 `%1'\n", filename, lineno,
- popened ? "process" : "file");
-}
-
-int file_iterator::set_location(const char *f, int ln)
-{
- if (f) {
- filename = f;
- if (!the_output)
- init_output();
- the_output->put_filename(f);
- }
- lineno = ln;
- return 1;
-}
-
-input_iterator nil_iterator;
-
-class input_stack {
-public:
- static int get(node **);
- static int peek();
- static void push(input_iterator *);
- static input_iterator *get_arg(int);
- static int nargs();
- static int get_location(int, const char **, int *);
- static int set_location(const char *, int);
- static void backtrace();
- static void backtrace_all();
- static void next_file(FILE *, const char *);
- static void end_file();
- static void shift(int n);
- static void add_boundary();
- static void add_return_boundary();
- static int is_return_boundary();
- static void remove_boundary();
- static int get_level();
- static int get_div_level();
- static void increase_level();
- static void decrease_level();
- static void clear();
- static void pop_macro();
- static void save_compatible_flag(int);
- static int get_compatible_flag();
- static statem *get_diversion_state();
- static void check_end_diversion(input_iterator *t);
- static int limit;
- static int div_level;
- static statem *diversion_state;
-private:
- static input_iterator *top;
- static int level;
- static int finish_get(node **);
- static int finish_peek();
-};
-
-input_iterator *input_stack::top = &nil_iterator;
-int input_stack::level = 0;
-int input_stack::limit = DEFAULT_INPUT_STACK_LIMIT;
-int input_stack::div_level = 0;
-statem *input_stack::diversion_state = NULL;
-int suppress_push=0;
-
-
-inline int input_stack::get_level()
-{
- return level;
-}
-
-inline void input_stack::increase_level()
-{
- level++;
-}
-
-inline void input_stack::decrease_level()
-{
- level--;
-}
-
-inline int input_stack::get_div_level()
-{
- return div_level;
-}
-
-inline int input_stack::get(node **np)
-{
- int res = (top->ptr < top->eptr) ? *top->ptr++ : finish_get(np);
- if (res == '\n') {
- old_have_input = have_input;
- have_input = 0;
- }
- return res;
-}
-
-int input_stack::finish_get(node **np)
-{
- for (;;) {
- int c = top->fill(np);
- if (c != EOF || top->is_boundary())
- return c;
- if (top == &nil_iterator)
- break;
- input_iterator *tem = top;
- check_end_diversion(tem);
-#if defined(DEBUGGING)
- if (debug_state)
- if (tem->is_diversion)
- fprintf(stderr,
- "in diversion level = %d\n", input_stack::get_div_level());
-#endif
- top = top->next;
- level--;
- delete tem;
- if (top->ptr < top->eptr)
- return *top->ptr++;
- }
- assert(level == 0);
- return EOF;
-}
-
-inline int input_stack::peek()
-{
- return (top->ptr < top->eptr) ? *top->ptr : finish_peek();
-}
-
-void input_stack::check_end_diversion(input_iterator *t)
-{
- if (t->is_diversion) {
- div_level--;
- diversion_state = t->diversion_state;
- }
-}
-
-int input_stack::finish_peek()
-{
- for (;;) {
- int c = top->peek();
- if (c != EOF || top->is_boundary())
- return c;
- if (top == &nil_iterator)
- break;
- input_iterator *tem = top;
- check_end_diversion(tem);
- top = top->next;
- level--;
- delete tem;
- if (top->ptr < top->eptr)
- return *top->ptr;
- }
- assert(level == 0);
- return EOF;
-}
-
-void input_stack::add_boundary()
-{
- push(new input_boundary);
-}
-
-void input_stack::add_return_boundary()
-{
- push(new input_return_boundary);
-}
-
-int input_stack::is_return_boundary()
-{
- return top->is_boundary() == 2;
-}
-
-void input_stack::remove_boundary()
-{
- assert(top->is_boundary());
- input_iterator *temp = top->next;
- check_end_diversion(top);
-
- delete top;
- top = temp;
- level--;
-}
-
-void input_stack::push(input_iterator *in)
-{
- if (in == 0)
- return;
- if (++level > limit && limit > 0)
- fatal("input stack limit exceeded (probable infinite loop)");
- in->next = top;
- top = in;
- if (top->is_diversion) {
- div_level++;
- in->diversion_state = diversion_state;
- diversion_state = curenv->construct_state(0);
-#if defined(DEBUGGING)
- if (debug_state) {
- curenv->dump_troff_state();
- fflush(stderr);
- }
-#endif
- }
-#if defined(DEBUGGING)
- if (debug_state)
- if (top->is_diversion) {
- fprintf(stderr,
- "in diversion level = %d\n", input_stack::get_div_level());
- fflush(stderr);
- }
-#endif
-}
-
-statem *get_diversion_state()
-{
- return input_stack::get_diversion_state();
-}
-
-statem *input_stack::get_diversion_state()
-{
- if (diversion_state == NULL)
- return NULL;
- else
- return new statem(diversion_state);
-}
-
-input_iterator *input_stack::get_arg(int i)
-{
- input_iterator *p;
- for (p = top; p != 0; p = p->next)
- if (p->has_args())
- return p->get_arg(i);
- return 0;
-}
-
-void input_stack::shift(int n)
-{
- for (input_iterator *p = top; p; p = p->next)
- if (p->has_args()) {
- p->shift(n);
- return;
- }
-}
-
-int input_stack::nargs()
-{
- for (input_iterator *p =top; p != 0; p = p->next)
- if (p->has_args())
- return p->nargs();
- return 0;
-}
-
-int input_stack::get_location(int allow_macro, const char **filenamep, int *linenop)
-{
- for (input_iterator *p = top; p; p = p->next)
- if (p->get_location(allow_macro, filenamep, linenop))
- return 1;
- return 0;
-}
-
-void input_stack::backtrace()
-{
- const char *f;
- int n;
- // only backtrace down to (not including) the topmost file
- for (input_iterator *p = top;
- p && !p->get_location(0, &f, &n);
- p = p->next)
- p->backtrace();
-}
-
-void input_stack::backtrace_all()
-{
- for (input_iterator *p = top; p; p = p->next)
- p->backtrace();
-}
-
-int input_stack::set_location(const char *filename, int lineno)
-{
- for (input_iterator *p = top; p; p = p->next)
- if (p->set_location(filename, lineno))
- return 1;
- return 0;
-}
-
-void input_stack::next_file(FILE *fp, const char *s)
-{
- input_iterator **pp;
- for (pp = &top; *pp != &nil_iterator; pp = &(*pp)->next)
- if ((*pp)->next_file(fp, s))
- return;
- if (++level > limit && limit > 0)
- fatal("input stack limit exceeded");
- *pp = new file_iterator(fp, s);
- (*pp)->next = &nil_iterator;
-}
-
-void input_stack::end_file()
-{
- for (input_iterator **pp = &top; *pp != &nil_iterator; pp = &(*pp)->next)
- if ((*pp)->is_file()) {
- input_iterator *tem = *pp;
- check_end_diversion(tem);
- *pp = (*pp)->next;
- delete tem;
- level--;
- return;
- }
-}
-
-void input_stack::clear()
-{
- int nboundaries = 0;
- while (top != &nil_iterator) {
- if (top->is_boundary())
- nboundaries++;
- input_iterator *tem = top;
- check_end_diversion(tem);
- top = top->next;
- level--;
- delete tem;
- }
- // Keep while_request happy.
- for (; nboundaries > 0; --nboundaries)
- add_return_boundary();
-}
-
-void input_stack::pop_macro()
-{
- int nboundaries = 0;
- int is_macro = 0;
- do {
- if (top->next == &nil_iterator)
- break;
- if (top->is_boundary())
- nboundaries++;
- is_macro = top->is_macro();
- input_iterator *tem = top;
- check_end_diversion(tem);
- top = top->next;
- level--;
- delete tem;
- } while (!is_macro);
- // Keep while_request happy.
- for (; nboundaries > 0; --nboundaries)
- add_return_boundary();
-}
-
-inline void input_stack::save_compatible_flag(int f)
-{
- top->save_compatible_flag(f);
-}
-
-inline int input_stack::get_compatible_flag()
-{
- return top->get_compatible_flag();
-}
-
-void backtrace_request()
-{
- input_stack::backtrace_all();
- fflush(stderr);
- skip_line();
-}
-
-void next_file()
-{
- symbol nm = get_long_name();
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (nm.is_null())
- input_stack::end_file();
- else {
- errno = 0;
- FILE *fp = include_search_path.open_file_cautious(nm.contents());
- if (!fp)
- error("can't open `%1': %2", nm.contents(), strerror(errno));
- else
- input_stack::next_file(fp, nm.contents());
- }
- tok.next();
-}
-
-void shift()
-{
- int n;
- if (!has_arg() || !get_integer(&n))
- n = 1;
- input_stack::shift(n);
- skip_line();
-}
-
-static char get_char_for_escape_name(int allow_space = 0)
-{
- int c = get_copy(0);
- switch (c) {
- case EOF:
- copy_mode_error("end of input in escape name");
- return '\0';
- default:
- if (!invalid_input_char(c))
- break;
- // fall through
- case '\n':
- if (c == '\n')
- input_stack::push(make_temp_iterator("\n"));
- // fall through
- case ' ':
- if (c == ' ' && allow_space)
- break;
- // fall through
- case '\t':
- case '\001':
- case '\b':
- copy_mode_error("%1 is not allowed in an escape name",
- input_char_description(c));
- return '\0';
- }
- return c;
-}
-
-static symbol read_two_char_escape_name()
-{
- char buf[3];
- buf[0] = get_char_for_escape_name();
- if (buf[0] != '\0') {
- buf[1] = get_char_for_escape_name();
- if (buf[1] == '\0')
- buf[0] = 0;
- else
- buf[2] = 0;
- }
- return symbol(buf);
-}
-
-static symbol read_long_escape_name(read_mode mode)
-{
- int start_level = input_stack::get_level();
- char abuf[ABUF_SIZE];
- char *buf = abuf;
- int buf_size = ABUF_SIZE;
- int i = 0;
- char c;
- int have_char = 0;
- for (;;) {
- c = get_char_for_escape_name(have_char && mode == WITH_ARGS);
- if (c == 0) {
- if (buf != abuf)
- a_delete buf;
- return NULL_SYMBOL;
- }
- have_char = 1;
- if (mode == WITH_ARGS && c == ' ')
- break;
- if (i + 2 > buf_size) {
- if (buf == abuf) {
- buf = new char[ABUF_SIZE*2];
- memcpy(buf, abuf, buf_size);
- buf_size = ABUF_SIZE*2;
- }
- else {
- char *old_buf = buf;
- buf = new char[buf_size*2];
- memcpy(buf, old_buf, buf_size);
- buf_size *= 2;
- a_delete old_buf;
- }
- }
- if (c == ']' && input_stack::get_level() == start_level)
- break;
- buf[i++] = c;
- }
- buf[i] = 0;
- if (c == ' ')
- have_string_arg = 1;
- if (buf == abuf) {
- if (i == 0) {
- if (mode != ALLOW_EMPTY)
- copy_mode_error("empty escape name");
- return EMPTY_SYMBOL;
- }
- return symbol(abuf);
- }
- else {
- symbol s(buf);
- a_delete buf;
- return s;
- }
-}
-
-static symbol read_escape_name(read_mode mode)
-{
- char c = get_char_for_escape_name();
- if (c == 0)
- return NULL_SYMBOL;
- if (c == '(')
- return read_two_char_escape_name();
- if (c == '[' && !compatible_flag)
- return read_long_escape_name(mode);
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- return symbol(buf);
-}
-
-static symbol read_increment_and_escape_name(int *incp)
-{
- char c = get_char_for_escape_name();
- switch (c) {
- case 0:
- *incp = 0;
- return NULL_SYMBOL;
- case '(':
- *incp = 0;
- return read_two_char_escape_name();
- case '+':
- *incp = 1;
- return read_escape_name();
- case '-':
- *incp = -1;
- return read_escape_name();
- case '[':
- if (!compatible_flag) {
- *incp = 0;
- return read_long_escape_name();
- }
- break;
- }
- *incp = 0;
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- return symbol(buf);
-}
-
-static int get_copy(node **nd, int defining)
-{
- for (;;) {
- int c = input_stack::get(nd);
- if (c == PUSH_GROFF_MODE) {
- input_stack::save_compatible_flag(compatible_flag);
- compatible_flag = 0;
- continue;
- }
- if (c == PUSH_COMP_MODE) {
- input_stack::save_compatible_flag(compatible_flag);
- compatible_flag = 1;
- continue;
- }
- if (c == POP_GROFFCOMP_MODE) {
- compatible_flag = input_stack::get_compatible_flag();
- continue;
- }
- if (c == BEGIN_QUOTE) {
- input_stack::increase_level();
- continue;
- }
- if (c == END_QUOTE) {
- input_stack::decrease_level();
- continue;
- }
- if (c == ESCAPE_NEWLINE) {
- if (defining)
- return c;
- do {
- c = input_stack::get(nd);
- } while (c == ESCAPE_NEWLINE);
- }
- if (c != escape_char || escape_char <= 0)
- return c;
- c = input_stack::peek();
- switch(c) {
- case 0:
- return escape_char;
- case '"':
- (void)input_stack::get(0);
- while ((c = input_stack::get(0)) != '\n' && c != EOF)
- ;
- return c;
- case '#': // Like \" but newline is ignored.
- (void)input_stack::get(0);
- while ((c = input_stack::get(0)) != '\n')
- if (c == EOF)
- return EOF;
- break;
- case '$':
- {
- (void)input_stack::get(0);
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_arg(s);
- break;
- }
- case '*':
- {
- (void)input_stack::get(0);
- symbol s = read_escape_name(WITH_ARGS);
- if (!(s.is_null() || s.is_empty())) {
- if (have_string_arg) {
- have_string_arg = 0;
- interpolate_string_with_args(s);
- }
- else
- interpolate_string(s);
- }
- break;
- }
- case 'a':
- (void)input_stack::get(0);
- return '\001';
- case 'e':
- (void)input_stack::get(0);
- return ESCAPE_e;
- case 'E':
- (void)input_stack::get(0);
- return ESCAPE_E;
- case 'n':
- {
- (void)input_stack::get(0);
- int inc;
- symbol s = read_increment_and_escape_name(&inc);
- if (!(s.is_null() || s.is_empty()))
- interpolate_number_reg(s, inc);
- break;
- }
- case 'g':
- {
- (void)input_stack::get(0);
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_number_format(s);
- break;
- }
- case 't':
- (void)input_stack::get(0);
- return '\t';
- case 'V':
- {
- (void)input_stack::get(0);
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_environment_variable(s);
- break;
- }
- case '\n':
- (void)input_stack::get(0);
- if (defining)
- return ESCAPE_NEWLINE;
- break;
- case ' ':
- (void)input_stack::get(0);
- return ESCAPE_SPACE;
- case '~':
- (void)input_stack::get(0);
- return ESCAPE_TILDE;
- case ':':
- (void)input_stack::get(0);
- return ESCAPE_COLON;
- case '|':
- (void)input_stack::get(0);
- return ESCAPE_BAR;
- case '^':
- (void)input_stack::get(0);
- return ESCAPE_CIRCUMFLEX;
- case '{':
- (void)input_stack::get(0);
- return ESCAPE_LEFT_BRACE;
- case '}':
- (void)input_stack::get(0);
- return ESCAPE_RIGHT_BRACE;
- case '`':
- (void)input_stack::get(0);
- return ESCAPE_LEFT_QUOTE;
- case '\'':
- (void)input_stack::get(0);
- return ESCAPE_RIGHT_QUOTE;
- case '-':
- (void)input_stack::get(0);
- return ESCAPE_HYPHEN;
- case '_':
- (void)input_stack::get(0);
- return ESCAPE_UNDERSCORE;
- case 'c':
- (void)input_stack::get(0);
- return ESCAPE_c;
- case '!':
- (void)input_stack::get(0);
- return ESCAPE_BANG;
- case '?':
- (void)input_stack::get(0);
- return ESCAPE_QUESTION;
- case '&':
- (void)input_stack::get(0);
- return ESCAPE_AMPERSAND;
- case ')':
- (void)input_stack::get(0);
- return ESCAPE_RIGHT_PARENTHESIS;
- case '.':
- (void)input_stack::get(0);
- return c;
- case '%':
- (void)input_stack::get(0);
- return ESCAPE_PERCENT;
- default:
- if (c == escape_char) {
- (void)input_stack::get(0);
- return c;
- }
- else
- return escape_char;
- }
- }
-}
-
-class non_interpreted_char_node : public node {
- unsigned char c;
-public:
- non_interpreted_char_node(unsigned char);
- node *copy();
- int interpret(macro *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-int non_interpreted_char_node::same(node *nd)
-{
- return c == ((non_interpreted_char_node *)nd)->c;
-}
-
-const char *non_interpreted_char_node::type()
-{
- return "non_interpreted_char_node";
-}
-
-int non_interpreted_char_node::force_tprint()
-{
- return 0;
-}
-
-int non_interpreted_char_node::is_tag()
-{
- return 0;
-}
-
-non_interpreted_char_node::non_interpreted_char_node(unsigned char n) : c(n)
-{
- assert(n != 0);
-}
-
-node *non_interpreted_char_node::copy()
-{
- return new non_interpreted_char_node(c);
-}
-
-int non_interpreted_char_node::interpret(macro *mac)
-{
- mac->append(c);
- return 1;
-}
-
-static void do_width();
-static node *do_non_interpreted();
-static node *do_special();
-static node *do_suppress(symbol nm);
-static void do_register();
-
-dictionary color_dictionary(501);
-
-static color *lookup_color(symbol nm)
-{
- assert(!nm.is_null());
- if (nm == default_symbol)
- return &default_color;
- color *c = (color *)color_dictionary.lookup(nm);
- if (c == 0)
- warning(WARN_COLOR, "color `%1' not defined", nm.contents());
- return c;
-}
-
-void do_glyph_color(symbol nm)
-{
- if (nm.is_null())
- return;
- if (nm.is_empty())
- curenv->set_glyph_color(curenv->get_prev_glyph_color());
- else {
- color *tem = lookup_color(nm);
- if (tem)
- curenv->set_glyph_color(tem);
- else
- (void)color_dictionary.lookup(nm, new color(nm));
- }
-}
-
-void do_fill_color(symbol nm)
-{
- if (nm.is_null())
- return;
- if (nm.is_empty())
- curenv->set_fill_color(curenv->get_prev_fill_color());
- else {
- color *tem = lookup_color(nm);
- if (tem)
- curenv->set_fill_color(tem);
- else
- (void)color_dictionary.lookup(nm, new color(nm));
- }
-}
-
-static unsigned int get_color_element(const char *scheme, const char *col)
-{
- units val;
- if (!get_number(&val, 'f')) {
- warning(WARN_COLOR, "%1 in %2 definition set to 0", col, scheme);
- tok.next();
- return 0;
- }
- if (val < 0) {
- warning(WARN_RANGE, "%1 cannot be negative: set to 0", col);
- return 0;
- }
- if (val > color::MAX_COLOR_VAL+1) {
- warning(WARN_RANGE, "%1 cannot be greater than 1", col);
- // we change 0x10000 to 0xffff
- return color::MAX_COLOR_VAL;
- }
- return (unsigned int)val;
-}
-
-static color *read_rgb(char end = 0)
-{
- symbol component = do_get_long_name(0, end);
- if (component.is_null()) {
- warning(WARN_COLOR, "missing rgb color values");
- return 0;
- }
- const char *s = component.contents();
- color *col = new color;
- if (*s == '#') {
- if (!col->read_rgb(s)) {
- warning(WARN_COLOR, "expecting rgb color definition not `%1'", s);
- delete col;
- return 0;
- }
- }
- else {
- if (!end)
- input_stack::push(make_temp_iterator(" "));
- input_stack::push(make_temp_iterator(s));
- tok.next();
- unsigned int r = get_color_element("rgb color", "red component");
- unsigned int g = get_color_element("rgb color", "green component");
- unsigned int b = get_color_element("rgb color", "blue component");
- col->set_rgb(r, g, b);
- }
- return col;
-}
-
-static color *read_cmy(char end = 0)
-{
- symbol component = do_get_long_name(0, end);
- if (component.is_null()) {
- warning(WARN_COLOR, "missing cmy color values");
- return 0;
- }
- const char *s = component.contents();
- color *col = new color;
- if (*s == '#') {
- if (!col->read_cmy(s)) {
- warning(WARN_COLOR, "expecting cmy color definition not `%1'", s);
- delete col;
- return 0;
- }
- }
- else {
- if (!end)
- input_stack::push(make_temp_iterator(" "));
- input_stack::push(make_temp_iterator(s));
- tok.next();
- unsigned int c = get_color_element("cmy color", "cyan component");
- unsigned int m = get_color_element("cmy color", "magenta component");
- unsigned int y = get_color_element("cmy color", "yellow component");
- col->set_cmy(c, m, y);
- }
- return col;
-}
-
-static color *read_cmyk(char end = 0)
-{
- symbol component = do_get_long_name(0, end);
- if (component.is_null()) {
- warning(WARN_COLOR, "missing cmyk color values");
- return 0;
- }
- const char *s = component.contents();
- color *col = new color;
- if (*s == '#') {
- if (!col->read_cmyk(s)) {
- warning(WARN_COLOR, "`expecting a cmyk color definition not `%1'", s);
- delete col;
- return 0;
- }
- }
- else {
- if (!end)
- input_stack::push(make_temp_iterator(" "));
- input_stack::push(make_temp_iterator(s));
- tok.next();
- unsigned int c = get_color_element("cmyk color", "cyan component");
- unsigned int m = get_color_element("cmyk color", "magenta component");
- unsigned int y = get_color_element("cmyk color", "yellow component");
- unsigned int k = get_color_element("cmyk color", "black component");
- col->set_cmyk(c, m, y, k);
- }
- return col;
-}
-
-static color *read_gray(char end = 0)
-{
- symbol component = do_get_long_name(0, end);
- if (component.is_null()) {
- warning(WARN_COLOR, "missing gray values");
- return 0;
- }
- const char *s = component.contents();
- color *col = new color;
- if (*s == '#') {
- if (!col->read_gray(s)) {
- warning(WARN_COLOR, "`expecting a gray definition not `%1'", s);
- delete col;
- return 0;
- }
- }
- else {
- if (!end)
- input_stack::push(make_temp_iterator("\n"));
- input_stack::push(make_temp_iterator(s));
- tok.next();
- unsigned int g = get_color_element("gray", "gray value");
- col->set_gray(g);
- }
- return col;
-}
-
-static void activate_color()
-{
- int n;
- if (has_arg() && get_integer(&n))
- color_flag = n != 0;
- else
- color_flag = 1;
- skip_line();
-}
-
-static void define_color()
-{
- symbol color_name = get_long_name(1);
- if (color_name.is_null()) {
- skip_line();
- return;
- }
- if (color_name == default_symbol) {
- warning(WARN_COLOR, "default color can't be redefined");
- skip_line();
- return;
- }
- symbol style = get_long_name(1);
- if (style.is_null()) {
- skip_line();
- return;
- }
- color *col;
- if (strcmp(style.contents(), "rgb") == 0)
- col = read_rgb();
- else if (strcmp(style.contents(), "cmyk") == 0)
- col = read_cmyk();
- else if (strcmp(style.contents(), "gray") == 0)
- col = read_gray();
- else if (strcmp(style.contents(), "grey") == 0)
- col = read_gray();
- else if (strcmp(style.contents(), "cmy") == 0)
- col = read_cmy();
- else {
- warning(WARN_COLOR,
- "unknown color space `%1'; use rgb, cmyk, gray or cmy",
- style.contents());
- skip_line();
- return;
- }
- if (col) {
- col->nm = color_name;
- (void)color_dictionary.lookup(color_name, col);
- }
- skip_line();
-}
-
-static node *do_overstrike()
-{
- token start;
- overstrike_node *on = new overstrike_node;
- int start_level = input_stack::get_level();
- start.next();
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- charinfo *ci = tok.get_char(1);
- if (ci) {
- node *n = curenv->make_char_node(ci);
- if (n)
- on->overstrike(n);
- }
- }
- return on;
-}
-
-static node *do_bracket()
-{
- token start;
- bracket_node *bn = new bracket_node;
- start.next();
- int start_level = input_stack::get_level();
- for (;;) {
- tok.next();
- if (tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- break;
- }
- if (tok.newline()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- charinfo *ci = tok.get_char(1);
- if (ci) {
- node *n = curenv->make_char_node(ci);
- if (n)
- bn->bracket(n);
- }
- }
- return bn;
-}
-
-static int do_name_test()
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- int bad_char = 0;
- int some_char = 0;
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- if (!tok.ch())
- bad_char = 1;
- some_char = 1;
- }
- return some_char && !bad_char;
-}
-
-static int do_expr_test()
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- if (!start.delimiter(1))
- return 0;
- tok.next();
- // disable all warning and error messages temporarily
- int saved_warning_mask = warning_mask;
- int saved_inhibit_errors = inhibit_errors;
- warning_mask = 0;
- inhibit_errors = 1;
- int dummy;
- int result = get_number_rigidly(&dummy, 'u');
- warning_mask = saved_warning_mask;
- inhibit_errors = saved_inhibit_errors;
- if (tok == start && input_stack::get_level() == start_level)
- return result;
- // ignore everything up to the delimiter in case we aren't right there
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start && input_stack::get_level() == start_level)
- break;
- }
- return 0;
-}
-
-#if 0
-static node *do_zero_width()
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- environment env(curenv);
- environment *oldenv = curenv;
- curenv = &env;
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- error("missing closing delimiter");
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- tok.process();
- }
- curenv = oldenv;
- node *rev = env.extract_output_line();
- node *n = 0;
- while (rev) {
- node *tem = rev;
- rev = rev->next;
- tem->next = n;
- n = tem;
- }
- return new zero_width_node(n);
-}
-
-#else
-
-// It's undesirable for \Z to change environments, because then
-// \n(.w won't work as expected.
-
-static node *do_zero_width()
-{
- node *rev = new dummy_node;
- token start;
- start.next();
- int start_level = input_stack::get_level();
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- if (!tok.add_to_node_list(&rev))
- error("invalid token in argument to \\Z");
- }
- node *n = 0;
- while (rev) {
- node *tem = rev;
- rev = rev->next;
- tem->next = n;
- n = tem;
- }
- return new zero_width_node(n);
-}
-
-#endif
-
-token_node *node::get_token_node()
-{
- return 0;
-}
-
-class token_node : public node {
-public:
- token tk;
- token_node(const token &t);
- node *copy();
- token_node *get_token_node();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-token_node::token_node(const token &t) : tk(t)
-{
-}
-
-node *token_node::copy()
-{
- return new token_node(tk);
-}
-
-token_node *token_node::get_token_node()
-{
- return this;
-}
-
-int token_node::same(node *nd)
-{
- return tk == ((token_node *)nd)->tk;
-}
-
-const char *token_node::type()
-{
- return "token_node";
-}
-
-int token_node::force_tprint()
-{
- return 0;
-}
-
-int token_node::is_tag()
-{
- return 0;
-}
-
-token::token() : nd(0), type(TOKEN_EMPTY)
-{
-}
-
-token::~token()
-{
- delete nd;
-}
-
-token::token(const token &t)
-: nm(t.nm), c(t.c), val(t.val), dim(t.dim), type(t.type)
-{
- // Use two statements to work around bug in SGI C++.
- node *tem = t.nd;
- nd = tem ? tem->copy() : 0;
-}
-
-void token::operator=(const token &t)
-{
- delete nd;
- nm = t.nm;
- // Use two statements to work around bug in SGI C++.
- node *tem = t.nd;
- nd = tem ? tem->copy() : 0;
- c = t.c;
- val = t.val;
- dim = t.dim;
- type = t.type;
-}
-
-void token::skip()
-{
- while (space())
- next();
-}
-
-int has_arg()
-{
- while (tok.space())
- tok.next();
- return !tok.newline();
-}
-
-void token::make_space()
-{
- type = TOKEN_SPACE;
-}
-
-void token::make_newline()
-{
- type = TOKEN_NEWLINE;
-}
-
-void token::next()
-{
- if (nd) {
- delete nd;
- nd = 0;
- }
- units x;
- for (;;) {
- node *n = 0;
- int cc = input_stack::get(&n);
- if (cc != escape_char || escape_char == 0) {
- handle_normal_char:
- switch(cc) {
- case PUSH_GROFF_MODE:
- input_stack::save_compatible_flag(compatible_flag);
- compatible_flag = 0;
- continue;
- case PUSH_COMP_MODE:
- input_stack::save_compatible_flag(compatible_flag);
- compatible_flag = 1;
- continue;
- case POP_GROFFCOMP_MODE:
- compatible_flag = input_stack::get_compatible_flag();
- continue;
- case BEGIN_QUOTE:
- input_stack::increase_level();
- continue;
- case END_QUOTE:
- input_stack::decrease_level();
- continue;
- case EOF:
- type = TOKEN_EOF;
- return;
- case TRANSPARENT_FILE_REQUEST:
- case TITLE_REQUEST:
- case COPY_FILE_REQUEST:
-#ifdef COLUMN
- case VJUSTIFY_REQUEST:
-#endif /* COLUMN */
- type = TOKEN_REQUEST;
- c = cc;
- return;
- case BEGIN_TRAP:
- type = TOKEN_BEGIN_TRAP;
- return;
- case END_TRAP:
- type = TOKEN_END_TRAP;
- return;
- case LAST_PAGE_EJECTOR:
- seen_last_page_ejector = 1;
- // fall through
- case PAGE_EJECTOR:
- type = TOKEN_PAGE_EJECTOR;
- return;
- case ESCAPE_PERCENT:
- ESCAPE_PERCENT:
- type = TOKEN_HYPHEN_INDICATOR;
- return;
- case ESCAPE_SPACE:
- ESCAPE_SPACE:
- type = TOKEN_UNSTRETCHABLE_SPACE;
- return;
- case ESCAPE_TILDE:
- ESCAPE_TILDE:
- type = TOKEN_STRETCHABLE_SPACE;
- return;
- case ESCAPE_COLON:
- ESCAPE_COLON:
- type = TOKEN_ZERO_WIDTH_BREAK;
- return;
- case ESCAPE_e:
- ESCAPE_e:
- type = TOKEN_ESCAPE;
- return;
- case ESCAPE_E:
- goto handle_escape_char;
- case ESCAPE_BAR:
- ESCAPE_BAR:
- type = TOKEN_NODE;
- nd = new hmotion_node(curenv->get_narrow_space_width(),
- curenv->get_fill_color());
- return;
- case ESCAPE_CIRCUMFLEX:
- ESCAPE_CIRCUMFLEX:
- type = TOKEN_NODE;
- nd = new hmotion_node(curenv->get_half_narrow_space_width(),
- curenv->get_fill_color());
- return;
- case ESCAPE_NEWLINE:
- have_input = 0;
- break;
- case ESCAPE_LEFT_BRACE:
- ESCAPE_LEFT_BRACE:
- type = TOKEN_LEFT_BRACE;
- return;
- case ESCAPE_RIGHT_BRACE:
- ESCAPE_RIGHT_BRACE:
- type = TOKEN_RIGHT_BRACE;
- return;
- case ESCAPE_LEFT_QUOTE:
- ESCAPE_LEFT_QUOTE:
- type = TOKEN_SPECIAL;
- nm = symbol("ga");
- return;
- case ESCAPE_RIGHT_QUOTE:
- ESCAPE_RIGHT_QUOTE:
- type = TOKEN_SPECIAL;
- nm = symbol("aa");
- return;
- case ESCAPE_HYPHEN:
- ESCAPE_HYPHEN:
- type = TOKEN_SPECIAL;
- nm = symbol("-");
- return;
- case ESCAPE_UNDERSCORE:
- ESCAPE_UNDERSCORE:
- type = TOKEN_SPECIAL;
- nm = symbol("ul");
- return;
- case ESCAPE_c:
- ESCAPE_c:
- type = TOKEN_INTERRUPT;
- return;
- case ESCAPE_BANG:
- ESCAPE_BANG:
- type = TOKEN_TRANSPARENT;
- return;
- case ESCAPE_QUESTION:
- ESCAPE_QUESTION:
- nd = do_non_interpreted();
- if (nd) {
- type = TOKEN_NODE;
- return;
- }
- break;
- case ESCAPE_AMPERSAND:
- ESCAPE_AMPERSAND:
- type = TOKEN_DUMMY;
- return;
- case ESCAPE_RIGHT_PARENTHESIS:
- ESCAPE_RIGHT_PARENTHESIS:
- type = TOKEN_TRANSPARENT_DUMMY;
- return;
- case '\b':
- type = TOKEN_BACKSPACE;
- return;
- case ' ':
- type = TOKEN_SPACE;
- return;
- case '\t':
- type = TOKEN_TAB;
- return;
- case '\n':
- type = TOKEN_NEWLINE;
- return;
- case '\001':
- type = TOKEN_LEADER;
- return;
- case 0:
- {
- assert(n != 0);
- token_node *tn = n->get_token_node();
- if (tn) {
- *this = tn->tk;
- delete tn;
- }
- else {
- nd = n;
- type = TOKEN_NODE;
- }
- }
- return;
- default:
- type = TOKEN_CHAR;
- c = cc;
- return;
- }
- }
- else {
- handle_escape_char:
- cc = input_stack::get(&n);
- switch(cc) {
- case '(':
- nm = read_two_char_escape_name();
- type = TOKEN_SPECIAL;
- return;
- case EOF:
- type = TOKEN_EOF;
- error("end of input after escape character");
- return;
- case '`':
- goto ESCAPE_LEFT_QUOTE;
- case '\'':
- goto ESCAPE_RIGHT_QUOTE;
- case '-':
- goto ESCAPE_HYPHEN;
- case '_':
- goto ESCAPE_UNDERSCORE;
- case '%':
- goto ESCAPE_PERCENT;
- case ' ':
- goto ESCAPE_SPACE;
- case '0':
- nd = new hmotion_node(curenv->get_digit_width(),
- curenv->get_fill_color());
- type = TOKEN_NODE;
- return;
- case '|':
- goto ESCAPE_BAR;
- case '^':
- goto ESCAPE_CIRCUMFLEX;
- case '/':
- type = TOKEN_ITALIC_CORRECTION;
- return;
- case ',':
- type = TOKEN_NODE;
- nd = new left_italic_corrected_node;
- return;
- case '&':
- goto ESCAPE_AMPERSAND;
- case ')':
- goto ESCAPE_RIGHT_PARENTHESIS;
- case '!':
- goto ESCAPE_BANG;
- case '?':
- goto ESCAPE_QUESTION;
- case '~':
- goto ESCAPE_TILDE;
- case ':':
- goto ESCAPE_COLON;
- case '"':
- while ((cc = input_stack::get(0)) != '\n' && cc != EOF)
- ;
- if (cc == '\n')
- type = TOKEN_NEWLINE;
- else
- type = TOKEN_EOF;
- return;
- case '#': // Like \" but newline is ignored.
- while ((cc = input_stack::get(0)) != '\n')
- if (cc == EOF) {
- type = TOKEN_EOF;
- return;
- }
- break;
- case '$':
- {
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_arg(s);
- break;
- }
- case '*':
- {
- symbol s = read_escape_name(WITH_ARGS);
- if (!(s.is_null() || s.is_empty())) {
- if (have_string_arg) {
- have_string_arg = 0;
- interpolate_string_with_args(s);
- }
- else
- interpolate_string(s);
- }
- break;
- }
- case 'a':
- nd = new non_interpreted_char_node('\001');
- type = TOKEN_NODE;
- return;
- case 'A':
- c = '0' + do_name_test();
- type = TOKEN_CHAR;
- return;
- case 'b':
- nd = do_bracket();
- type = TOKEN_NODE;
- return;
- case 'B':
- c = '0' + do_expr_test();
- type = TOKEN_CHAR;
- return;
- case 'c':
- goto ESCAPE_c;
- case 'C':
- nm = get_delim_name();
- if (nm.is_null())
- break;
- type = TOKEN_SPECIAL;
- return;
- case 'd':
- type = TOKEN_NODE;
- nd = new vmotion_node(curenv->get_size() / 2,
- curenv->get_fill_color());
- return;
- case 'D':
- nd = read_draw_node();
- if (!nd)
- break;
- type = TOKEN_NODE;
- return;
- case 'e':
- goto ESCAPE_e;
- case 'E':
- goto handle_escape_char;
- case 'f':
- {
- symbol s = read_escape_name(ALLOW_EMPTY);
- if (s.is_null())
- break;
- const char *p;
- for (p = s.contents(); *p != '\0'; p++)
- if (!csdigit(*p))
- break;
- if (*p || s.is_empty())
- curenv->set_font(s);
- else
- curenv->set_font(atoi(s.contents()));
- if (!compatible_flag)
- have_input = 1;
- break;
- }
- case 'F':
- {
- symbol s = read_escape_name(ALLOW_EMPTY);
- if (s.is_null())
- break;
- curenv->set_family(s);
- have_input = 1;
- break;
- }
- case 'g':
- {
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_number_format(s);
- break;
- }
- case 'h':
- if (!get_delim_number(&x, 'm'))
- break;
- type = TOKEN_NODE;
- nd = new hmotion_node(x, curenv->get_fill_color());
- return;
- case 'H':
- // don't take height increments relative to previous height if
- // in compatibility mode
- if (!compatible_flag && curenv->get_char_height())
- {
- if (get_delim_number(&x, 'z', curenv->get_char_height()))
- curenv->set_char_height(x);
- }
- else
- {
- if (get_delim_number(&x, 'z', curenv->get_requested_point_size()))
- curenv->set_char_height(x);
- }
- if (!compatible_flag)
- have_input = 1;
- break;
- case 'k':
- nm = read_escape_name();
- if (nm.is_null() || nm.is_empty())
- break;
- type = TOKEN_MARK_INPUT;
- return;
- case 'l':
- case 'L':
- {
- charinfo *s = 0;
- if (!get_line_arg(&x, (cc == 'l' ? 'm': 'v'), &s))
- break;
- if (s == 0)
- s = get_charinfo(cc == 'l' ? "ru" : "br");
- type = TOKEN_NODE;
- node *char_node = curenv->make_char_node(s);
- if (cc == 'l')
- nd = new hline_node(x, char_node);
- else
- nd = new vline_node(x, char_node);
- return;
- }
- case 'm':
- do_glyph_color(read_escape_name(ALLOW_EMPTY));
- if (!compatible_flag)
- have_input = 1;
- break;
- case 'M':
- do_fill_color(read_escape_name(ALLOW_EMPTY));
- if (!compatible_flag)
- have_input = 1;
- break;
- case 'n':
- {
- int inc;
- symbol s = read_increment_and_escape_name(&inc);
- if (!(s.is_null() || s.is_empty()))
- interpolate_number_reg(s, inc);
- break;
- }
- case 'N':
- if (!get_delim_number(&val, 0))
- break;
- type = TOKEN_NUMBERED_CHAR;
- return;
- case 'o':
- nd = do_overstrike();
- type = TOKEN_NODE;
- return;
- case 'O':
- nd = do_suppress(read_escape_name());
- if (!nd)
- break;
- type = TOKEN_NODE;
- return;
- case 'p':
- type = TOKEN_SPREAD;
- return;
- case 'r':
- type = TOKEN_NODE;
- nd = new vmotion_node(-curenv->get_size(), curenv->get_fill_color());
- return;
- case 'R':
- do_register();
- if (!compatible_flag)
- have_input = 1;
- break;
- case 's':
- if (read_size(&x))
- curenv->set_size(x);
- if (!compatible_flag)
- have_input = 1;
- break;
- case 'S':
- if (get_delim_number(&x, 0))
- curenv->set_char_slant(x);
- if (!compatible_flag)
- have_input = 1;
- break;
- case 't':
- type = TOKEN_NODE;
- nd = new non_interpreted_char_node('\t');
- return;
- case 'u':
- type = TOKEN_NODE;
- nd = new vmotion_node(-curenv->get_size() / 2,
- curenv->get_fill_color());
- return;
- case 'v':
- if (!get_delim_number(&x, 'v'))
- break;
- type = TOKEN_NODE;
- nd = new vmotion_node(x, curenv->get_fill_color());
- return;
- case 'V':
- {
- symbol s = read_escape_name();
- if (!(s.is_null() || s.is_empty()))
- interpolate_environment_variable(s);
- break;
- }
- case 'w':
- do_width();
- break;
- case 'x':
- if (!get_delim_number(&x, 'v'))
- break;
- type = TOKEN_NODE;
- nd = new extra_size_node(x);
- return;
- case 'X':
- nd = do_special();
- if (!nd)
- break;
- type = TOKEN_NODE;
- return;
- case 'Y':
- {
- symbol s = read_escape_name();
- if (s.is_null() || s.is_empty())
- break;
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m) {
- error("can't transparently throughput a request");
- break;
- }
- nd = new special_node(*m);
- type = TOKEN_NODE;
- return;
- }
- case 'z':
- {
- next();
- if (type == TOKEN_NODE)
- nd = new zero_width_node(nd);
- else {
- charinfo *ci = get_char(1);
- if (ci == 0)
- break;
- node *gn = curenv->make_char_node(ci);
- if (gn == 0)
- break;
- nd = new zero_width_node(gn);
- type = TOKEN_NODE;
- }
- return;
- }
- case 'Z':
- nd = do_zero_width();
- if (nd == 0)
- break;
- type = TOKEN_NODE;
- return;
- case '{':
- goto ESCAPE_LEFT_BRACE;
- case '}':
- goto ESCAPE_RIGHT_BRACE;
- case '\n':
- break;
- case '[':
- if (!compatible_flag) {
- symbol s = read_long_escape_name(WITH_ARGS);
- if (s.is_null() || s.is_empty())
- break;
- if (have_string_arg) {
- have_string_arg = 0;
- nm = composite_glyph_name(s);
- }
- else {
- const char *gn = check_unicode_name(s.contents());
- if (gn) {
- const char *gn_decomposed = decompose_unicode(gn);
- if (gn_decomposed)
- gn = &gn_decomposed[1];
- const char *groff_gn = unicode_to_glyph_name(gn);
- if (groff_gn)
- nm = symbol(groff_gn);
- else {
- char *buf = new char[strlen(gn) + 1 + 1];
- strcpy(buf, "u");
- strcat(buf, gn);
- nm = symbol(buf);
- a_delete buf;
- }
- }
- else
- nm = symbol(s.contents());
- }
- type = TOKEN_SPECIAL;
- return;
- }
- goto handle_normal_char;
- default:
- if (cc != escape_char && cc != '.')
- warning(WARN_ESCAPE, "escape character ignored before %1",
- input_char_description(cc));
- goto handle_normal_char;
- }
- }
- }
-}
-
-int token::operator==(const token &t)
-{
- if (type != t.type)
- return 0;
- switch(type) {
- case TOKEN_CHAR:
- return c == t.c;
- case TOKEN_SPECIAL:
- return nm == t.nm;
- case TOKEN_NUMBERED_CHAR:
- return val == t.val;
- default:
- return 1;
- }
-}
-
-int token::operator!=(const token &t)
-{
- return !(*this == t);
-}
-
-// is token a suitable delimiter (like ')?
-
-int token::delimiter(int err)
-{
- switch(type) {
- case TOKEN_CHAR:
- switch(c) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '+':
- case '-':
- case '/':
- case '*':
- case '%':
- case '<':
- case '>':
- case '=':
- case '&':
- case ':':
- case '(':
- case ')':
- case '.':
- if (err)
- error("cannot use character `%1' as a starting delimiter", char(c));
- return 0;
- default:
- return 1;
- }
- case TOKEN_NODE:
- case TOKEN_SPACE:
- case TOKEN_STRETCHABLE_SPACE:
- case TOKEN_UNSTRETCHABLE_SPACE:
- case TOKEN_TAB:
- case TOKEN_NEWLINE:
- if (err)
- error("cannot use %1 as a starting delimiter", description());
- return 0;
- default:
- return 1;
- }
-}
-
-const char *token::description()
-{
- static char buf[4];
- switch (type) {
- case TOKEN_BACKSPACE:
- return "a backspace character";
- case TOKEN_CHAR:
- buf[0] = '`';
- buf[1] = c;
- buf[2] = '\'';
- buf[3] = '\0';
- return buf;
- case TOKEN_DUMMY:
- return "`\\&'";
- case TOKEN_ESCAPE:
- return "`\\e'";
- case TOKEN_HYPHEN_INDICATOR:
- return "`\\%'";
- case TOKEN_INTERRUPT:
- return "`\\c'";
- case TOKEN_ITALIC_CORRECTION:
- return "`\\/'";
- case TOKEN_LEADER:
- return "a leader character";
- case TOKEN_LEFT_BRACE:
- return "`\\{'";
- case TOKEN_MARK_INPUT:
- return "`\\k'";
- case TOKEN_NEWLINE:
- return "newline";
- case TOKEN_NODE:
- return "a node";
- case TOKEN_NUMBERED_CHAR:
- return "`\\N'";
- case TOKEN_RIGHT_BRACE:
- return "`\\}'";
- case TOKEN_SPACE:
- return "a space";
- case TOKEN_SPECIAL:
- return "a special character";
- case TOKEN_SPREAD:
- return "`\\p'";
- case TOKEN_STRETCHABLE_SPACE:
- return "`\\~'";
- case TOKEN_UNSTRETCHABLE_SPACE:
- return "`\\ '";
- case TOKEN_TAB:
- return "a tab character";
- case TOKEN_TRANSPARENT:
- return "`\\!'";
- case TOKEN_TRANSPARENT_DUMMY:
- return "`\\)'";
- case TOKEN_ZERO_WIDTH_BREAK:
- return "`\\:'";
- case TOKEN_EOF:
- return "end of input";
- default:
- break;
- }
- return "a magic token";
-}
-
-void skip_line()
-{
- while (!tok.newline())
- if (tok.eof())
- return;
- else
- tok.next();
- tok.next();
-}
-
-void compatible()
-{
- int n;
- if (has_arg() && get_integer(&n))
- compatible_flag = n != 0;
- else
- compatible_flag = 1;
- skip_line();
-}
-
-static void empty_name_warning(int required)
-{
- if (tok.newline() || tok.eof()) {
- if (required)
- warning(WARN_MISSING, "missing name");
- }
- else if (tok.right_brace() || tok.tab()) {
- const char *start = tok.description();
- do {
- tok.next();
- } while (tok.space() || tok.right_brace() || tok.tab());
- if (!tok.newline() && !tok.eof())
- error("%1 is not allowed before an argument", start);
- else if (required)
- warning(WARN_MISSING, "missing name");
- }
- else if (required)
- error("name expected (got %1)", tok.description());
- else
- error("name expected (got %1): treated as missing", tok.description());
-}
-
-static void non_empty_name_warning()
-{
- if (!tok.newline() && !tok.eof() && !tok.space() && !tok.tab()
- && !tok.right_brace()
- // We don't want to give a warning for .el\{
- && !tok.left_brace())
- error("%1 is not allowed in a name", tok.description());
-}
-
-symbol get_name(int required)
-{
- if (compatible_flag) {
- char buf[3];
- tok.skip();
- if ((buf[0] = tok.ch()) != 0) {
- tok.next();
- if ((buf[1] = tok.ch()) != 0) {
- buf[2] = 0;
- tok.make_space();
- }
- else
- non_empty_name_warning();
- return symbol(buf);
- }
- else {
- empty_name_warning(required);
- return NULL_SYMBOL;
- }
- }
- else
- return get_long_name(required);
-}
-
-symbol get_long_name(int required)
-{
- return do_get_long_name(required, 0);
-}
-
-static symbol do_get_long_name(int required, char end)
-{
- while (tok.space())
- tok.next();
- char abuf[ABUF_SIZE];
- char *buf = abuf;
- int buf_size = ABUF_SIZE;
- int i = 0;
- for (;;) {
- // If end != 0 we normally have to append a null byte
- if (i + 2 > buf_size) {
- if (buf == abuf) {
- buf = new char[ABUF_SIZE*2];
- memcpy(buf, abuf, buf_size);
- buf_size = ABUF_SIZE*2;
- }
- else {
- char *old_buf = buf;
- buf = new char[buf_size*2];
- memcpy(buf, old_buf, buf_size);
- buf_size *= 2;
- a_delete old_buf;
- }
- }
- if ((buf[i] = tok.ch()) == 0 || buf[i] == end)
- break;
- i++;
- tok.next();
- }
- if (i == 0) {
- empty_name_warning(required);
- return NULL_SYMBOL;
- }
- if (end && buf[i] == end)
- buf[i+1] = '\0';
- else
- non_empty_name_warning();
- if (buf == abuf)
- return symbol(buf);
- else {
- symbol s(buf);
- a_delete buf;
- return s;
- }
-}
-
-void exit_troff()
-{
- exit_started = 1;
- topdiv->set_last_page();
- if (!end_macro_name.is_null()) {
- spring_trap(end_macro_name);
- tok.next();
- process_input_stack();
- }
- curenv->final_break();
- tok.next();
- process_input_stack();
- end_diversions();
- if (topdiv->get_page_length() > 0) {
- done_end_macro = 1;
- topdiv->set_ejecting();
- static unsigned char buf[2] = { LAST_PAGE_EJECTOR, '\0' };
- input_stack::push(make_temp_iterator((char *)buf));
- topdiv->space(topdiv->get_page_length(), 1);
- tok.next();
- process_input_stack();
- seen_last_page_ejector = 1; // should be set already
- topdiv->set_ejecting();
- push_page_ejector();
- topdiv->space(topdiv->get_page_length(), 1);
- tok.next();
- process_input_stack();
- }
- // This will only happen if a trap-invoked macro starts a diversion,
- // or if vertical position traps have been disabled.
- cleanup_and_exit(0);
-}
-
-// This implements .ex. The input stack must be cleared before calling
-// exit_troff().
-
-void exit_request()
-{
- input_stack::clear();
- if (exit_started)
- tok.next();
- else
- exit_troff();
-}
-
-void return_macro_request()
-{
- if (has_arg() && tok.ch())
- input_stack::pop_macro();
- input_stack::pop_macro();
- tok.next();
-}
-
-void end_macro()
-{
- end_macro_name = get_name();
- skip_line();
-}
-
-void blank_line_macro()
-{
- blank_line_macro_name = get_name();
- skip_line();
-}
-
-static void trapping_blank_line()
-{
- if (!blank_line_macro_name.is_null())
- spring_trap(blank_line_macro_name);
- else
- blank_line();
-}
-
-void do_request()
-{
- int old_compatible_flag = compatible_flag;
- compatible_flag = 0;
- symbol nm = get_name();
- if (nm.is_null())
- skip_line();
- else
- interpolate_macro(nm);
- compatible_flag = old_compatible_flag;
-}
-
-inline int possibly_handle_first_page_transition()
-{
- if (topdiv->before_first_page && curdiv == topdiv && !curenv->is_dummy()) {
- handle_first_page_transition();
- return 1;
- }
- else
- return 0;
-}
-
-static int transparent_translate(int cc)
-{
- if (!invalid_input_char(cc)) {
- charinfo *ci = charset_table[cc];
- switch (ci->get_special_translation(1)) {
- case charinfo::TRANSLATE_SPACE:
- return ' ';
- case charinfo::TRANSLATE_STRETCHABLE_SPACE:
- return ESCAPE_TILDE;
- case charinfo::TRANSLATE_DUMMY:
- return ESCAPE_AMPERSAND;
- case charinfo::TRANSLATE_HYPHEN_INDICATOR:
- return ESCAPE_PERCENT;
- }
- // This is really ugly.
- ci = ci->get_translation(1);
- if (ci) {
- int c = ci->get_ascii_code();
- if (c != '\0')
- return c;
- error("can't translate %1 to special character `%2'"
- " in transparent throughput",
- input_char_description(cc),
- ci->nm.contents());
- }
- }
- return cc;
-}
-
-class int_stack {
- struct int_stack_element {
- int n;
- int_stack_element *next;
- } *top;
-public:
- int_stack();
- ~int_stack();
- void push(int);
- int is_empty();
- int pop();
-};
-
-int_stack::int_stack()
-{
- top = 0;
-}
-
-int_stack::~int_stack()
-{
- while (top != 0) {
- int_stack_element *temp = top;
- top = top->next;
- delete temp;
- }
-}
-
-int int_stack::is_empty()
-{
- return top == 0;
-}
-
-void int_stack::push(int n)
-{
- int_stack_element *p = new int_stack_element;
- p->next = top;
- p->n = n;
- top = p;
-}
-
-int int_stack::pop()
-{
- assert(top != 0);
- int_stack_element *p = top;
- top = top->next;
- int n = p->n;
- delete p;
- return n;
-}
-
-int node::reread(int *)
-{
- return 0;
-}
-
-int global_diverted_space = 0;
-
-int diverted_space_node::reread(int *bolp)
-{
- global_diverted_space = 1;
- if (curenv->get_fill())
- trapping_blank_line();
- else
- curdiv->space(n);
- global_diverted_space = 0;
- *bolp = 1;
- return 1;
-}
-
-int diverted_copy_file_node::reread(int *bolp)
-{
- curdiv->copy_file(filename.contents());
- *bolp = 1;
- return 1;
-}
-
-int word_space_node::reread(int *)
-{
- if (unformat) {
- for (width_list *w = orig_width; w; w = w->next)
- curenv->space(w->width, w->sentence_width);
- unformat = 0;
- return 1;
- }
- return 0;
-}
-
-int unbreakable_space_node::reread(int *)
-{
- return 0;
-}
-
-int hmotion_node::reread(int *)
-{
- if (unformat && was_tab) {
- curenv->handle_tab(0);
- unformat = 0;
- return 1;
- }
- return 0;
-}
-
-void process_input_stack()
-{
- int_stack trap_bol_stack;
- int bol = 1;
- for (;;) {
- int suppress_next = 0;
- switch (tok.type) {
- case token::TOKEN_CHAR:
- {
- unsigned char ch = tok.c;
- if (bol && !have_input
- && (ch == curenv->control_char
- || ch == curenv->no_break_control_char)) {
- break_flag = ch == curenv->control_char;
- // skip tabs as well as spaces here
- do {
- tok.next();
- } while (tok.white_space());
- symbol nm = get_name();
-#if defined(DEBUGGING)
- if (debug_state) {
- if (! nm.is_null()) {
- if (strcmp(nm.contents(), "test") == 0) {
- fprintf(stderr, "found it!\n");
- fflush(stderr);
- }
- fprintf(stderr, "interpreting [%s]", nm.contents());
- if (strcmp(nm.contents(), "di") == 0 && topdiv != curdiv)
- fprintf(stderr, " currently in diversion: %s",
- curdiv->get_diversion_name());
- fprintf(stderr, "\n");
- fflush(stderr);
- }
- }
-#endif
- if (nm.is_null())
- skip_line();
- else {
- interpolate_macro(nm);
-#if defined(DEBUGGING)
- if (debug_state) {
- fprintf(stderr, "finished interpreting [%s] and environment state is\n", nm.contents());
- curenv->dump_troff_state();
- }
-#endif
- }
- suppress_next = 1;
- }
- else {
- if (possibly_handle_first_page_transition())
- ;
- else {
- for (;;) {
-#if defined(DEBUGGING)
- if (debug_state) {
- fprintf(stderr, "found [%c]\n", ch); fflush(stderr);
- }
-#endif
- curenv->add_char(charset_table[ch]);
- tok.next();
- if (tok.type != token::TOKEN_CHAR)
- break;
- ch = tok.c;
- }
- suppress_next = 1;
- bol = 0;
- }
- }
- break;
- }
- case token::TOKEN_TRANSPARENT:
- {
- if (bol) {
- if (possibly_handle_first_page_transition()) {
- ;
- } else {
- int cc;
- do {
- node *n;
- cc = get_copy(&n);
- if (cc != EOF) {
- if (cc != '\0')
- curdiv->transparent_output(transparent_translate(cc));
- else
- curdiv->transparent_output(n);
- }
- } while (cc != '\n' && cc != EOF);
- if (cc == EOF)
- curdiv->transparent_output('\n');
- }
- }
- break;
- }
- case token::TOKEN_NEWLINE:
- {
- if (bol && !old_have_input
- && !curenv->get_prev_line_interrupted()) {
- trapping_blank_line();
- } else {
- curenv->newline();
- bol = 1;
- }
- break;
- }
- case token::TOKEN_REQUEST:
- {
- int request_code = tok.c;
- tok.next();
- switch (request_code) {
- case TITLE_REQUEST:
- title();
- break;
- case COPY_FILE_REQUEST:
- copy_file();
- break;
- case TRANSPARENT_FILE_REQUEST:
- transparent_file();
- break;
-#ifdef COLUMN
- case VJUSTIFY_REQUEST:
- vjustify();
- break;
-#endif /* COLUMN */
- default:
- assert(0);
- break;
- }
- suppress_next = 1;
- break;
- }
- case token::TOKEN_SPACE:
- {
- if (possibly_handle_first_page_transition())
- ;
- else if (bol && !curenv->get_prev_line_interrupted()) {
- int nspaces = 0;
- // save space_width now so that it isn't changed by \f or \s
- // which we wouldn't notice here
- hunits space_width = curenv->get_space_width();
- do {
- nspaces += tok.nspaces();
- tok.next();
- } while (tok.space());
- if (tok.newline())
- trapping_blank_line();
- else {
- push_token(tok);
- curenv->do_break();
- curenv->add_node(new hmotion_node(space_width * nspaces,
- curenv->get_fill_color()));
- bol = 0;
- }
- }
- else {
- curenv->space();
- bol = 0;
- }
- break;
- }
- case token::TOKEN_EOF:
- return;
- case token::TOKEN_NODE:
- {
- if (possibly_handle_first_page_transition())
- ;
- else if (tok.nd->reread(&bol)) {
- delete tok.nd;
- tok.nd = 0;
- }
- else {
- curenv->add_node(tok.nd);
- tok.nd = 0;
- bol = 0;
- curenv->possibly_break_line(1);
- }
- break;
- }
- case token::TOKEN_PAGE_EJECTOR:
- {
- continue_page_eject();
- // I think we just want to preserve bol.
- // bol = 1;
- break;
- }
- case token::TOKEN_BEGIN_TRAP:
- {
- trap_bol_stack.push(bol);
- bol = 1;
- have_input = 0;
- break;
- }
- case token::TOKEN_END_TRAP:
- {
- if (trap_bol_stack.is_empty())
- error("spurious end trap token detected!");
- else
- bol = trap_bol_stack.pop();
- have_input = 0;
-
- /* I'm not totally happy about this. But I can't think of any other
- way to do it. Doing an output_pending_lines() whenever a
- TOKEN_END_TRAP is detected doesn't work: for example,
-
- .wh -1i x
- .de x
- 'bp
- ..
- .wh -.5i y
- .de y
- .tl ''-%-''
- ..
- .br
- .ll .5i
- .sp |\n(.pu-1i-.5v
- a\%very\%very\%long\%word
-
- will print all but the first lines from the word immediately
- after the footer, rather than on the next page. */
-
- if (trap_bol_stack.is_empty())
- curenv->output_pending_lines();
- break;
- }
- default:
- {
- bol = 0;
- tok.process();
- break;
- }
- }
- if (!suppress_next)
- tok.next();
- trap_sprung_flag = 0;
- }
-}
-
-#ifdef WIDOW_CONTROL
-
-void flush_pending_lines()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- curenv->output_pending_lines();
- tok.next();
-}
-
-#endif /* WIDOW_CONTROL */
-
-request_or_macro::request_or_macro()
-{
-}
-
-macro *request_or_macro::to_macro()
-{
- return 0;
-}
-
-request::request(REQUEST_FUNCP pp) : p(pp)
-{
-}
-
-void request::invoke(symbol)
-{
- (*p)();
-}
-
-struct char_block {
- enum { SIZE = 128 };
- unsigned char s[SIZE];
- char_block *next;
- char_block();
-};
-
-char_block::char_block()
-: next(0)
-{
-}
-
-class char_list {
-public:
- char_list();
- ~char_list();
- void append(unsigned char);
- void set(unsigned char, int);
- unsigned char get(int);
- int length();
-private:
- unsigned char *ptr;
- int len;
- char_block *head;
- char_block *tail;
- friend class macro_header;
- friend class string_iterator;
-};
-
-char_list::char_list()
-: ptr(0), len(0), head(0), tail(0)
-{
-}
-
-char_list::~char_list()
-{
- while (head != 0) {
- char_block *tem = head;
- head = head->next;
- delete tem;
- }
-}
-
-int char_list::length()
-{
- return len;
-}
-
-void char_list::append(unsigned char c)
-{
- if (tail == 0) {
- head = tail = new char_block;
- ptr = tail->s;
- }
- else {
- if (ptr >= tail->s + char_block::SIZE) {
- tail->next = new char_block;
- tail = tail->next;
- ptr = tail->s;
- }
- }
- *ptr++ = c;
- len++;
-}
-
-void char_list::set(unsigned char c, int offset)
-{
- assert(len > offset);
- // optimization for access at the end
- int boundary = len - len % char_block::SIZE;
- if (offset >= boundary) {
- *(tail->s + offset - boundary) = c;
- return;
- }
- char_block *tem = head;
- int l = 0;
- for (;;) {
- l += char_block::SIZE;
- if (l > offset) {
- *(tem->s + offset % char_block::SIZE) = c;
- return;
- }
- tem = tem->next;
- }
-}
-
-unsigned char char_list::get(int offset)
-{
- assert(len > offset);
- // optimization for access at the end
- int boundary = len - len % char_block::SIZE;
- if (offset >= boundary)
- return *(tail->s + offset - boundary);
- char_block *tem = head;
- int l = 0;
- for (;;) {
- l += char_block::SIZE;
- if (l > offset)
- return *(tem->s + offset % char_block::SIZE);
- tem = tem->next;
- }
-}
-
-class node_list {
- node *head;
- node *tail;
-public:
- node_list();
- ~node_list();
- void append(node *);
- int length();
- node *extract();
-
- friend class macro_header;
- friend class string_iterator;
-};
-
-void node_list::append(node *n)
-{
- if (head == 0) {
- n->next = 0;
- head = tail = n;
- }
- else {
- n->next = 0;
- tail = tail->next = n;
- }
-}
-
-int node_list::length()
-{
- int total = 0;
- for (node *n = head; n != 0; n = n->next)
- ++total;
- return total;
-}
-
-node_list::node_list()
-{
- head = tail = 0;
-}
-
-node *node_list::extract()
-{
- node *temp = head;
- head = tail = 0;
- return temp;
-}
-
-node_list::~node_list()
-{
- delete_node_list(head);
-}
-
-class macro_header {
-public:
- int count;
- char_list cl;
- node_list nl;
- macro_header() { count = 1; }
- macro_header *copy(int);
-};
-
-macro::~macro()
-{
- if (p != 0 && --(p->count) <= 0)
- delete p;
-}
-
-macro::macro()
-: is_a_diversion(0)
-{
- if (!input_stack::get_location(1, &filename, &lineno)) {
- filename = 0;
- lineno = 0;
- }
- len = 0;
- empty_macro = 1;
- p = 0;
-}
-
-macro::macro(const macro &m)
-: filename(m.filename), lineno(m.lineno), len(m.len),
- empty_macro(m.empty_macro), is_a_diversion(m.is_a_diversion), p(m.p)
-{
- if (p != 0)
- p->count++;
-}
-
-macro::macro(int is_div)
- : is_a_diversion(is_div)
-{
- if (!input_stack::get_location(1, &filename, &lineno)) {
- filename = 0;
- lineno = 0;
- }
- len = 0;
- empty_macro = 1;
- p = 0;
-}
-
-int macro::is_diversion()
-{
- return is_a_diversion;
-}
-
-macro &macro::operator=(const macro &m)
-{
- // don't assign object
- if (m.p != 0)
- m.p->count++;
- if (p != 0 && --(p->count) <= 0)
- delete p;
- p = m.p;
- filename = m.filename;
- lineno = m.lineno;
- len = m.len;
- empty_macro = m.empty_macro;
- is_a_diversion = m.is_a_diversion;
- return *this;
-}
-
-void macro::append(unsigned char c)
-{
- assert(c != 0);
- if (p == 0)
- p = new macro_header;
- if (p->cl.length() != len) {
- macro_header *tem = p->copy(len);
- if (--(p->count) <= 0)
- delete p;
- p = tem;
- }
- p->cl.append(c);
- ++len;
- if (c != PUSH_GROFF_MODE && c != PUSH_COMP_MODE && c != POP_GROFFCOMP_MODE)
- empty_macro = 0;
-}
-
-void macro::set(unsigned char c, int offset)
-{
- assert(p != 0);
- assert(c != 0);
- p->cl.set(c, offset);
-}
-
-unsigned char macro::get(int offset)
-{
- assert(p != 0);
- return p->cl.get(offset);
-}
-
-int macro::length()
-{
- return len;
-}
-
-void macro::append_str(const char *s)
-{
- int i = 0;
-
- if (s) {
- while (s[i] != (char)0) {
- append(s[i]);
- i++;
- }
- }
-}
-
-void macro::append(node *n)
-{
- assert(n != 0);
- if (p == 0)
- p = new macro_header;
- if (p->cl.length() != len) {
- macro_header *tem = p->copy(len);
- if (--(p->count) <= 0)
- delete p;
- p = tem;
- }
- p->cl.append(0);
- p->nl.append(n);
- ++len;
- empty_macro = 0;
-}
-
-void macro::append_unsigned(unsigned int i)
-{
- unsigned int j = i / 10;
- if (j != 0)
- append_unsigned(j);
- append(((unsigned char)(((int)'0') + i % 10)));
-}
-
-void macro::append_int(int i)
-{
- if (i < 0) {
- append('-');
- i = -i;
- }
- append_unsigned((unsigned int)i);
-}
-
-void macro::print_size()
-{
- errprint("%1", len);
-}
-
-// make a copy of the first n bytes
-
-macro_header *macro_header::copy(int n)
-{
- macro_header *p = new macro_header;
- char_block *bp = cl.head;
- unsigned char *ptr = bp->s;
- node *nd = nl.head;
- while (--n >= 0) {
- if (ptr >= bp->s + char_block::SIZE) {
- bp = bp->next;
- ptr = bp->s;
- }
- unsigned char c = *ptr++;
- p->cl.append(c);
- if (c == 0) {
- p->nl.append(nd->copy());
- nd = nd->next;
- }
- }
- return p;
-}
-
-void print_macros()
-{
- object_dictionary_iterator iter(request_dictionary);
- request_or_macro *rm;
- symbol s;
- while (iter.get(&s, (object **)&rm)) {
- assert(!s.is_null());
- macro *m = rm->to_macro();
- if (m) {
- errprint("%1\t", s.contents());
- m->print_size();
- errprint("\n");
- }
- }
- fflush(stderr);
- skip_line();
-}
-
-class string_iterator : public input_iterator {
- macro mac;
- const char *how_invoked;
- int newline_flag;
- int lineno;
- char_block *bp;
- int count; // of characters remaining
- node *nd;
- int saved_compatible_flag;
-protected:
- symbol nm;
- string_iterator();
-public:
- string_iterator(const macro &m, const char *p = 0, symbol s = NULL_SYMBOL);
- int fill(node **);
- int peek();
- int get_location(int, const char **, int *);
- void backtrace();
- void save_compatible_flag(int f) { saved_compatible_flag = f; }
- int get_compatible_flag() { return saved_compatible_flag; }
- int is_diversion();
-};
-
-string_iterator::string_iterator(const macro &m, const char *p, symbol s)
-: input_iterator(m.is_a_diversion), mac(m), how_invoked(p), newline_flag(0),
- lineno(1), nm(s)
-{
- count = mac.len;
- if (count != 0) {
- bp = mac.p->cl.head;
- nd = mac.p->nl.head;
- ptr = eptr = bp->s;
- }
- else {
- bp = 0;
- nd = 0;
- ptr = eptr = 0;
- }
-}
-
-string_iterator::string_iterator()
-{
- bp = 0;
- nd = 0;
- ptr = eptr = 0;
- newline_flag = 0;
- how_invoked = 0;
- lineno = 1;
- count = 0;
-}
-
-int string_iterator::is_diversion()
-{
- return mac.is_diversion();
-}
-
-int string_iterator::fill(node **np)
-{
- if (newline_flag)
- lineno++;
- newline_flag = 0;
- if (count <= 0)
- return EOF;
- const unsigned char *p = eptr;
- if (p >= bp->s + char_block::SIZE) {
- bp = bp->next;
- p = bp->s;
- }
- if (*p == '\0') {
- if (np) {
- *np = nd->copy();
- if (is_diversion())
- (*np)->div_nest_level = input_stack::get_div_level();
- else
- (*np)->div_nest_level = 0;
- }
- nd = nd->next;
- eptr = ptr = p + 1;
- count--;
- return 0;
- }
- const unsigned char *e = bp->s + char_block::SIZE;
- if (e - p > count)
- e = p + count;
- ptr = p;
- while (p < e) {
- unsigned char c = *p;
- if (c == '\n' || c == ESCAPE_NEWLINE) {
- newline_flag = 1;
- p++;
- break;
- }
- if (c == '\0')
- break;
- p++;
- }
- eptr = p;
- count -= p - ptr;
- return *ptr++;
-}
-
-int string_iterator::peek()
-{
- if (count <= 0)
- return EOF;
- const unsigned char *p = eptr;
- if (p >= bp->s + char_block::SIZE) {
- p = bp->next->s;
- }
- return *p;
-}
-
-int string_iterator::get_location(int allow_macro,
- const char **filep, int *linep)
-{
- if (!allow_macro)
- return 0;
- if (mac.filename == 0)
- return 0;
- *filep = mac.filename;
- *linep = mac.lineno + lineno - 1;
- return 1;
-}
-
-void string_iterator::backtrace()
-{
- if (mac.filename) {
- errprint("%1:%2: backtrace", mac.filename, mac.lineno + lineno - 1);
- if (how_invoked) {
- if (!nm.is_null())
- errprint(": %1 `%2'\n", how_invoked, nm.contents());
- else
- errprint(": %1\n", how_invoked);
- }
- else
- errprint("\n");
- }
-}
-
-class temp_iterator : public input_iterator {
- unsigned char *base;
- temp_iterator(const char *, int len);
-public:
- ~temp_iterator();
- friend input_iterator *make_temp_iterator(const char *);
-};
-
-#ifdef __GNUG__
-inline
-#endif
-temp_iterator::temp_iterator(const char *s, int len)
-{
- base = new unsigned char[len];
- memcpy(base, s, len);
- ptr = base;
- eptr = base + len;
-}
-
-temp_iterator::~temp_iterator()
-{
- a_delete base;
-}
-
-class small_temp_iterator : public input_iterator {
-private:
- small_temp_iterator(const char *, int);
- ~small_temp_iterator();
- enum { BLOCK = 16 };
- static small_temp_iterator *free_list;
- void *operator new(size_t);
- void operator delete(void *);
- enum { SIZE = 12 };
- unsigned char buf[SIZE];
- friend input_iterator *make_temp_iterator(const char *);
-};
-
-small_temp_iterator *small_temp_iterator::free_list = 0;
-
-void *small_temp_iterator::operator new(size_t n)
-{
- assert(n == sizeof(small_temp_iterator));
- if (!free_list) {
- free_list =
- (small_temp_iterator *)new char[sizeof(small_temp_iterator)*BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK-1].next = 0;
- }
- small_temp_iterator *p = free_list;
- free_list = (small_temp_iterator *)(free_list->next);
- p->next = 0;
- return p;
-}
-
-#ifdef __GNUG__
-inline
-#endif
-void small_temp_iterator::operator delete(void *p)
-{
- if (p) {
- ((small_temp_iterator *)p)->next = free_list;
- free_list = (small_temp_iterator *)p;
- }
-}
-
-small_temp_iterator::~small_temp_iterator()
-{
-}
-
-#ifdef __GNUG__
-inline
-#endif
-small_temp_iterator::small_temp_iterator(const char *s, int len)
-{
- for (int i = 0; i < len; i++)
- buf[i] = s[i];
- ptr = buf;
- eptr = buf + len;
-}
-
-input_iterator *make_temp_iterator(const char *s)
-{
- if (s == 0)
- return new small_temp_iterator(s, 0);
- else {
- int n = strlen(s);
- if (n <= small_temp_iterator::SIZE)
- return new small_temp_iterator(s, n);
- else
- return new temp_iterator(s, n);
- }
-}
-
-// this is used when macros with arguments are interpolated
-
-struct arg_list {
- macro mac;
- arg_list *next;
- arg_list(const macro &);
- ~arg_list();
-};
-
-arg_list::arg_list(const macro &m) : mac(m), next(0)
-{
-}
-
-arg_list::~arg_list()
-{
-}
-
-class macro_iterator : public string_iterator {
- arg_list *args;
- int argc;
-public:
- macro_iterator(symbol, macro &, const char *how_invoked = "macro");
- macro_iterator();
- ~macro_iterator();
- int has_args() { return 1; }
- input_iterator *get_arg(int i);
- int nargs() { return argc; }
- void add_arg(const macro &m);
- void shift(int n);
- int is_macro() { return 1; }
- int is_diversion();
-};
-
-input_iterator *macro_iterator::get_arg(int i)
-{
- if (i == 0)
- return make_temp_iterator(nm.contents());
- if (i > 0 && i <= argc) {
- arg_list *p = args;
- for (int j = 1; j < i; j++) {
- assert(p != 0);
- p = p->next;
- }
- return new string_iterator(p->mac);
- }
- else
- return 0;
-}
-
-void macro_iterator::add_arg(const macro &m)
-{
- arg_list **p;
- for (p = &args; *p; p = &((*p)->next))
- ;
- *p = new arg_list(m);
- ++argc;
-}
-
-void macro_iterator::shift(int n)
-{
- while (n > 0 && argc > 0) {
- arg_list *tem = args;
- args = args->next;
- delete tem;
- --argc;
- --n;
- }
-}
-
-// This gets used by eg .if '\?xxx\?''.
-
-int operator==(const macro &m1, const macro &m2)
-{
- if (m1.len != m2.len)
- return 0;
- string_iterator iter1(m1);
- string_iterator iter2(m2);
- int n = m1.len;
- while (--n >= 0) {
- node *nd1 = 0;
- int c1 = iter1.get(&nd1);
- assert(c1 != EOF);
- node *nd2 = 0;
- int c2 = iter2.get(&nd2);
- assert(c2 != EOF);
- if (c1 != c2) {
- if (c1 == 0)
- delete nd1;
- else if (c2 == 0)
- delete nd2;
- return 0;
- }
- if (c1 == 0) {
- assert(nd1 != 0);
- assert(nd2 != 0);
- int are_same = nd1->type() == nd2->type() && nd1->same(nd2);
- delete nd1;
- delete nd2;
- if (!are_same)
- return 0;
- }
- }
- return 1;
-}
-
-static void interpolate_macro(symbol nm)
-{
- request_or_macro *p = (request_or_macro *)request_dictionary.lookup(nm);
- if (p == 0) {
- int warned = 0;
- const char *s = nm.contents();
- if (strlen(s) > 2) {
- request_or_macro *r;
- char buf[3];
- buf[0] = s[0];
- buf[1] = s[1];
- buf[2] = '\0';
- r = (request_or_macro *)request_dictionary.lookup(symbol(buf));
- if (r) {
- macro *m = r->to_macro();
- if (!m || !m->empty())
- warned = warning(WARN_SPACE,
- "macro `%1' not defined "
- "(probably missing space after `%2')",
- nm.contents(), buf);
- }
- }
- if (!warned) {
- warning(WARN_MAC, "macro `%1' not defined", nm.contents());
- p = new macro;
- request_dictionary.define(nm, p);
- }
- }
- if (p)
- p->invoke(nm);
- else {
- skip_line();
- return;
- }
-}
-
-static void decode_args(macro_iterator *mi)
-{
- if (!tok.newline() && !tok.eof()) {
- node *n;
- int c = get_copy(&n);
- for (;;) {
- while (c == ' ')
- c = get_copy(&n);
- if (c == '\n' || c == EOF)
- break;
- macro arg;
- int quote_input_level = 0;
- int done_tab_warning = 0;
- if (c == '"') {
- quote_input_level = input_stack::get_level();
- c = get_copy(&n);
- }
- arg.append(compatible_flag ? PUSH_COMP_MODE : PUSH_GROFF_MODE);
- while (c != EOF && c != '\n' && !(c == ' ' && quote_input_level == 0)) {
- if (quote_input_level > 0 && c == '"'
- && (compatible_flag
- || input_stack::get_level() == quote_input_level)) {
- c = get_copy(&n);
- if (c == '"') {
- arg.append(c);
- c = get_copy(&n);
- }
- else
- break;
- }
- else {
- if (c == 0)
- arg.append(n);
- else {
- if (c == '\t' && quote_input_level == 0 && !done_tab_warning) {
- warning(WARN_TAB, "tab character in unquoted macro argument");
- done_tab_warning = 1;
- }
- arg.append(c);
- }
- c = get_copy(&n);
- }
- }
- arg.append(POP_GROFFCOMP_MODE);
- mi->add_arg(arg);
- }
- }
-}
-
-static void decode_string_args(macro_iterator *mi)
-{
- node *n;
- int c = get_copy(&n);
- for (;;) {
- while (c == ' ')
- c = get_copy(&n);
- if (c == '\n' || c == EOF) {
- error("missing `]'");
- break;
- }
- if (c == ']')
- break;
- macro arg;
- int quote_input_level = 0;
- int done_tab_warning = 0;
- if (c == '"') {
- quote_input_level = input_stack::get_level();
- c = get_copy(&n);
- }
- while (c != EOF && c != '\n'
- && !(c == ']' && quote_input_level == 0)
- && !(c == ' ' && quote_input_level == 0)) {
- if (quote_input_level > 0 && c == '"'
- && input_stack::get_level() == quote_input_level) {
- c = get_copy(&n);
- if (c == '"') {
- arg.append(c);
- c = get_copy(&n);
- }
- else
- break;
- }
- else {
- if (c == 0)
- arg.append(n);
- else {
- if (c == '\t' && quote_input_level == 0 && !done_tab_warning) {
- warning(WARN_TAB, "tab character in unquoted string argument");
- done_tab_warning = 1;
- }
- arg.append(c);
- }
- c = get_copy(&n);
- }
- }
- mi->add_arg(arg);
- }
-}
-
-void macro::invoke(symbol nm)
-{
- macro_iterator *mi = new macro_iterator(nm, *this);
- decode_args(mi);
- input_stack::push(mi);
- tok.next();
-}
-
-macro *macro::to_macro()
-{
- return this;
-}
-
-int macro::empty()
-{
- return empty_macro == 1;
-}
-
-macro_iterator::macro_iterator(symbol s, macro &m, const char *how_called)
-: string_iterator(m, how_called, s), args(0), argc(0)
-{
-}
-
-macro_iterator::macro_iterator() : args(0), argc(0)
-{
-}
-
-macro_iterator::~macro_iterator()
-{
- while (args != 0) {
- arg_list *tem = args;
- args = args->next;
- delete tem;
- }
-}
-
-dictionary composite_dictionary(17);
-
-void composite_request()
-{
- symbol from = get_name(1);
- if (!from.is_null()) {
- const char *from_gn = glyph_name_to_unicode(from.contents());
- if (!from_gn) {
- from_gn = check_unicode_name(from.contents());
- if (!from_gn) {
- error("invalid composite glyph name `%1'", from.contents());
- skip_line();
- return;
- }
- }
- const char *from_decomposed = decompose_unicode(from_gn);
- if (from_decomposed)
- from_gn = &from_decomposed[1];
- symbol to = get_name(1);
- if (to.is_null())
- composite_dictionary.remove(symbol(from_gn));
- else {
- const char *to_gn = glyph_name_to_unicode(to.contents());
- if (!to_gn) {
- to_gn = check_unicode_name(to.contents());
- if (!to_gn) {
- error("invalid composite glyph name `%1'", to.contents());
- skip_line();
- return;
- }
- }
- const char *to_decomposed = decompose_unicode(to_gn);
- if (to_decomposed)
- to_gn = &to_decomposed[1];
- if (strcmp(from_gn, to_gn) == 0)
- composite_dictionary.remove(symbol(from_gn));
- else
- (void)composite_dictionary.lookup(symbol(from_gn), (void *)to_gn);
- }
- }
- skip_line();
-}
-
-static symbol composite_glyph_name(symbol nm)
-{
- macro_iterator *mi = new macro_iterator();
- decode_string_args(mi);
- input_stack::push(mi);
- const char *gn = glyph_name_to_unicode(nm.contents());
- if (!gn) {
- gn = check_unicode_name(nm.contents());
- if (!gn) {
- error("invalid base glyph `%1' in composite glyph name", nm.contents());
- return EMPTY_SYMBOL;
- }
- }
- const char *gn_decomposed = decompose_unicode(gn);
- string glyph_name(gn_decomposed ? &gn_decomposed[1] : gn);
- string gl;
- int n = input_stack::nargs();
- for (int i = 1; i <= n; i++) {
- glyph_name += '_';
- input_iterator *p = input_stack::get_arg(i);
- gl.clear();
- int c;
- while ((c = p->get(0)) != EOF)
- gl += c;
- gl += '\0';
- const char *u = glyph_name_to_unicode(gl.contents());
- if (!u) {
- u = check_unicode_name(gl.contents());
- if (!u) {
- error("invalid component `%1' in composite glyph name",
- gl.contents());
- return EMPTY_SYMBOL;
- }
- }
- const char *decomposed = decompose_unicode(u);
- if (decomposed)
- u = &decomposed[1];
- void *mapped_composite = composite_dictionary.lookup(symbol(u));
- if (mapped_composite)
- u = (const char *)mapped_composite;
- glyph_name += u;
- }
- glyph_name += '\0';
- const char *groff_gn = unicode_to_glyph_name(glyph_name.contents());
- if (groff_gn)
- return symbol(groff_gn);
- gl.clear();
- gl += 'u';
- gl += glyph_name;
- return symbol(gl.contents());
-}
-
-int trap_sprung_flag = 0;
-int postpone_traps_flag = 0;
-symbol postponed_trap;
-
-void spring_trap(symbol nm)
-{
- assert(!nm.is_null());
- trap_sprung_flag = 1;
- if (postpone_traps_flag) {
- postponed_trap = nm;
- return;
- }
- static char buf[2] = { BEGIN_TRAP, 0 };
- static char buf2[2] = { END_TRAP, '\0' };
- input_stack::push(make_temp_iterator(buf2));
- request_or_macro *p = lookup_request(nm);
- macro *m = p->to_macro();
- if (m)
- input_stack::push(new macro_iterator(nm, *m, "trap-invoked macro"));
- else
- error("you can't invoke a request with a trap");
- input_stack::push(make_temp_iterator(buf));
-}
-
-void postpone_traps()
-{
- postpone_traps_flag = 1;
-}
-
-int unpostpone_traps()
-{
- postpone_traps_flag = 0;
- if (!postponed_trap.is_null()) {
- spring_trap(postponed_trap);
- postponed_trap = NULL_SYMBOL;
- return 1;
- }
- else
- return 0;
-}
-
-void read_request()
-{
- macro_iterator *mi = new macro_iterator;
- int reading_from_terminal = isatty(fileno(stdin));
- int had_prompt = 0;
- if (!tok.newline() && !tok.eof()) {
- int c = get_copy(0);
- while (c == ' ')
- c = get_copy(0);
- while (c != EOF && c != '\n' && c != ' ') {
- if (!invalid_input_char(c)) {
- if (reading_from_terminal)
- fputc(c, stderr);
- had_prompt = 1;
- }
- c = get_copy(0);
- }
- if (c == ' ') {
- tok.make_space();
- decode_args(mi);
- }
- }
- if (reading_from_terminal) {
- fputc(had_prompt ? ':' : '\a', stderr);
- fflush(stderr);
- }
- input_stack::push(mi);
- macro mac;
- int nl = 0;
- int c;
- while ((c = getchar()) != EOF) {
- if (invalid_input_char(c))
- warning(WARN_INPUT, "invalid input character code %1", int(c));
- else {
- if (c == '\n') {
- if (nl)
- break;
- else
- nl = 1;
- }
- else
- nl = 0;
- mac.append(c);
- }
- }
- if (reading_from_terminal)
- clearerr(stdin);
- input_stack::push(new string_iterator(mac));
- tok.next();
-}
-
-enum define_mode { DEFINE_NORMAL, DEFINE_APPEND, DEFINE_IGNORE };
-enum calling_mode { CALLING_NORMAL, CALLING_INDIRECT };
-enum comp_mode { COMP_IGNORE, COMP_DISABLE, COMP_ENABLE };
-
-void do_define_string(define_mode mode, comp_mode comp)
-{
- symbol nm;
- node *n = 0; // pacify compiler
- int c;
- nm = get_name(1);
- if (nm.is_null()) {
- skip_line();
- return;
- }
- if (tok.newline())
- c = '\n';
- else if (tok.tab())
- c = '\t';
- else if (!tok.space()) {
- error("bad string definition");
- skip_line();
- return;
- }
- else
- c = get_copy(&n);
- while (c == ' ')
- c = get_copy(&n);
- if (c == '"')
- c = get_copy(&n);
- macro mac;
- request_or_macro *rm = (request_or_macro *)request_dictionary.lookup(nm);
- macro *mm = rm ? rm->to_macro() : 0;
- if (mode == DEFINE_APPEND && mm)
- mac = *mm;
- if (comp == COMP_DISABLE)
- mac.append(PUSH_GROFF_MODE);
- else if (comp == COMP_ENABLE)
- mac.append(PUSH_COMP_MODE);
- while (c != '\n' && c != EOF) {
- if (c == 0)
- mac.append(n);
- else
- mac.append((unsigned char)c);
- c = get_copy(&n);
- }
- if (!mm) {
- mm = new macro;
- request_dictionary.define(nm, mm);
- }
- if (comp == COMP_DISABLE || comp == COMP_ENABLE)
- mac.append(POP_GROFFCOMP_MODE);
- *mm = mac;
- tok.next();
-}
-
-void define_string()
-{
- do_define_string(DEFINE_NORMAL,
- compatible_flag ? COMP_ENABLE: COMP_IGNORE);
-}
-
-void define_nocomp_string()
-{
- do_define_string(DEFINE_NORMAL, COMP_DISABLE);
-}
-
-void append_string()
-{
- do_define_string(DEFINE_APPEND,
- compatible_flag ? COMP_ENABLE : COMP_IGNORE);
-}
-
-void append_nocomp_string()
-{
- do_define_string(DEFINE_APPEND, COMP_DISABLE);
-}
-
-void do_define_character(char_mode mode, const char *font_name)
-{
- node *n = 0; // pacify compiler
- int c;
- tok.skip();
- charinfo *ci = tok.get_char(1);
- if (ci == 0) {
- skip_line();
- return;
- }
- if (font_name) {
- string s(font_name);
- s += ' ';
- s += ci->nm.contents();
- s += '\0';
- ci = get_charinfo(symbol(s.contents()));
- }
- tok.next();
- if (tok.newline())
- c = '\n';
- else if (tok.tab())
- c = '\t';
- else if (!tok.space()) {
- error("bad character definition");
- skip_line();
- return;
- }
- else
- c = get_copy(&n);
- while (c == ' ' || c == '\t')
- c = get_copy(&n);
- if (c == '"')
- c = get_copy(&n);
- macro *m = new macro;
- while (c != '\n' && c != EOF) {
- if (c == 0)
- m->append(n);
- else
- m->append((unsigned char)c);
- c = get_copy(&n);
- }
- m = ci->setx_macro(m, mode);
- if (m)
- delete m;
- tok.next();
-}
-
-void define_character()
-{
- do_define_character(CHAR_NORMAL);
-}
-
-void define_fallback_character()
-{
- do_define_character(CHAR_FALLBACK);
-}
-
-void define_special_character()
-{
- do_define_character(CHAR_SPECIAL);
-}
-
-static void remove_character()
-{
- tok.skip();
- while (!tok.newline() && !tok.eof()) {
- if (!tok.space() && !tok.tab()) {
- charinfo *ci = tok.get_char(1);
- if (!ci)
- break;
- macro *m = ci->set_macro(0);
- if (m)
- delete m;
- }
- tok.next();
- }
- skip_line();
-}
-
-static void interpolate_string(symbol nm)
-{
- request_or_macro *p = lookup_request(nm);
- macro *m = p->to_macro();
- if (!m)
- error("you can only invoke a string or macro using \\*");
- else {
- string_iterator *si = new string_iterator(*m, "string", nm);
- input_stack::push(si);
- }
-}
-
-static void interpolate_string_with_args(symbol s)
-{
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("you can only invoke a string or macro using \\*");
- else {
- macro_iterator *mi = new macro_iterator(s, *m);
- decode_string_args(mi);
- input_stack::push(mi);
- }
-}
-
-static void interpolate_arg(symbol nm)
-{
- const char *s = nm.contents();
- if (!s || *s == '\0')
- copy_mode_error("missing argument name");
- else if (s[1] == 0 && csdigit(s[0]))
- input_stack::push(input_stack::get_arg(s[0] - '0'));
- else if (s[0] == '*' && s[1] == '\0') {
- int limit = input_stack::nargs();
- string args;
- for (int i = 1; i <= limit; i++) {
- input_iterator *p = input_stack::get_arg(i);
- int c;
- while ((c = p->get(0)) != EOF)
- args += c;
- if (i != limit)
- args += ' ';
- }
- if (limit > 0) {
- args += '\0';
- input_stack::push(make_temp_iterator(args.contents()));
- }
- }
- else if (s[0] == '@' && s[1] == '\0') {
- int limit = input_stack::nargs();
- string args;
- for (int i = 1; i <= limit; i++) {
- args += '"';
- args += BEGIN_QUOTE;
- input_iterator *p = input_stack::get_arg(i);
- int c;
- while ((c = p->get(0)) != EOF)
- args += c;
- args += END_QUOTE;
- args += '"';
- if (i != limit)
- args += ' ';
- }
- if (limit > 0) {
- args += '\0';
- input_stack::push(make_temp_iterator(args.contents()));
- }
- }
- else {
- const char *p;
- for (p = s; *p && csdigit(*p); p++)
- ;
- if (*p)
- copy_mode_error("bad argument name `%1'", s);
- else
- input_stack::push(input_stack::get_arg(atoi(s)));
- }
-}
-
-void handle_first_page_transition()
-{
- push_token(tok);
- topdiv->begin_page();
-}
-
-// We push back a token by wrapping it up in a token_node, and
-// wrapping that up in a string_iterator.
-
-static void push_token(const token &t)
-{
- macro m;
- m.append(new token_node(t));
- input_stack::push(new string_iterator(m));
-}
-
-void push_page_ejector()
-{
- static char buf[2] = { PAGE_EJECTOR, '\0' };
- input_stack::push(make_temp_iterator(buf));
-}
-
-void handle_initial_request(unsigned char code)
-{
- char buf[2];
- buf[0] = code;
- buf[1] = '\0';
- macro mac;
- mac.append(new token_node(tok));
- input_stack::push(new string_iterator(mac));
- input_stack::push(make_temp_iterator(buf));
- topdiv->begin_page();
- tok.next();
-}
-
-void handle_initial_title()
-{
- handle_initial_request(TITLE_REQUEST);
-}
-
-// this should be local to define_macro, but cfront 1.2 doesn't support that
-static symbol dot_symbol(".");
-
-void do_define_macro(define_mode mode, calling_mode calling, comp_mode comp)
-{
- symbol nm, term;
- if (calling == CALLING_INDIRECT) {
- symbol temp1 = get_name(1);
- if (temp1.is_null()) {
- skip_line();
- return;
- }
- symbol temp2 = get_name();
- input_stack::push(make_temp_iterator("\n"));
- if (!temp2.is_null()) {
- interpolate_string(temp2);
- input_stack::push(make_temp_iterator(" "));
- }
- interpolate_string(temp1);
- input_stack::push(make_temp_iterator(" "));
- tok.next();
- }
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
- nm = get_name(1);
- if (nm.is_null()) {
- skip_line();
- return;
- }
- }
- term = get_name(); // the request that terminates the definition
- if (term.is_null())
- term = dot_symbol;
- while (!tok.newline() && !tok.eof())
- tok.next();
- const char *start_filename;
- int start_lineno;
- int have_start_location = input_stack::get_location(0, &start_filename,
- &start_lineno);
- node *n;
- // doing this here makes the line numbers come out right
- int c = get_copy(&n, 1);
- macro mac;
- macro *mm = 0;
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
- request_or_macro *rm =
- (request_or_macro *)request_dictionary.lookup(nm);
- if (rm)
- mm = rm->to_macro();
- if (mm && mode == DEFINE_APPEND)
- mac = *mm;
- }
- int bol = 1;
- if (comp == COMP_DISABLE)
- mac.append(PUSH_GROFF_MODE);
- else if (comp == COMP_ENABLE)
- mac.append(PUSH_COMP_MODE);
- for (;;) {
- while (c == ESCAPE_NEWLINE) {
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND)
- mac.append(c);
- c = get_copy(&n, 1);
- }
- if (bol && c == '.') {
- const char *s = term.contents();
- int d = 0;
- // see if it matches term
- int i = 0;
- if (s[0] != 0) {
- while ((d = get_copy(&n)) == ' ' || d == '\t')
- ;
- if ((unsigned char)s[0] == d) {
- for (i = 1; s[i] != 0; i++) {
- d = get_copy(&n);
- if ((unsigned char)s[i] != d)
- break;
- }
- }
- }
- if (s[i] == 0
- && ((i == 2 && compatible_flag)
- || (d = get_copy(&n)) == ' '
- || d == '\n')) { // we found it
- if (d == '\n')
- tok.make_newline();
- else
- tok.make_space();
- if (mode == DEFINE_APPEND || mode == DEFINE_NORMAL) {
- if (!mm) {
- mm = new macro;
- request_dictionary.define(nm, mm);
- }
- if (comp == COMP_DISABLE || comp == COMP_ENABLE)
- mac.append(POP_GROFFCOMP_MODE);
- *mm = mac;
- }
- if (term != dot_symbol) {
- ignoring = 0;
- interpolate_macro(term);
- }
- else
- skip_line();
- return;
- }
- if (mode == DEFINE_APPEND || mode == DEFINE_NORMAL) {
- mac.append(c);
- for (int j = 0; j < i; j++)
- mac.append(s[j]);
- }
- c = d;
- }
- if (c == EOF) {
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
- if (have_start_location)
- error_with_file_and_line(start_filename, start_lineno,
- "end of file while defining macro `%1'",
- nm.contents());
- else
- error("end of file while defining macro `%1'", nm.contents());
- }
- else {
- if (have_start_location)
- error_with_file_and_line(start_filename, start_lineno,
- "end of file while ignoring input lines");
- else
- error("end of file while ignoring input lines");
- }
- tok.next();
- return;
- }
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
- if (c == 0)
- mac.append(n);
- else
- mac.append(c);
- }
- bol = (c == '\n');
- c = get_copy(&n, 1);
- }
-}
-
-void define_macro()
-{
- do_define_macro(DEFINE_NORMAL, CALLING_NORMAL,
- compatible_flag ? COMP_ENABLE : COMP_IGNORE);
-}
-
-void define_nocomp_macro()
-{
- do_define_macro(DEFINE_NORMAL, CALLING_NORMAL, COMP_DISABLE);
-}
-
-void define_indirect_macro()
-{
- do_define_macro(DEFINE_NORMAL, CALLING_INDIRECT,
- compatible_flag ? COMP_ENABLE : COMP_IGNORE);
-}
-
-void define_indirect_nocomp_macro()
-{
- do_define_macro(DEFINE_NORMAL, CALLING_INDIRECT, COMP_DISABLE);
-}
-
-void append_macro()
-{
- do_define_macro(DEFINE_APPEND, CALLING_NORMAL,
- compatible_flag ? COMP_ENABLE : COMP_IGNORE);
-}
-
-void append_nocomp_macro()
-{
- do_define_macro(DEFINE_APPEND, CALLING_NORMAL, COMP_DISABLE);
-}
-
-void append_indirect_macro()
-{
- do_define_macro(DEFINE_APPEND, CALLING_INDIRECT,
- compatible_flag ? COMP_ENABLE : COMP_IGNORE);
-}
-
-void append_indirect_nocomp_macro()
-{
- do_define_macro(DEFINE_APPEND, CALLING_INDIRECT, COMP_DISABLE);
-}
-
-void ignore()
-{
- ignoring = 1;
- do_define_macro(DEFINE_IGNORE, CALLING_NORMAL, COMP_IGNORE);
- ignoring = 0;
-}
-
-void remove_macro()
-{
- for (;;) {
- symbol s = get_name();
- if (s.is_null())
- break;
- request_dictionary.remove(s);
- }
- skip_line();
-}
-
-void rename_macro()
-{
- symbol s1 = get_name(1);
- if (!s1.is_null()) {
- symbol s2 = get_name(1);
- if (!s2.is_null())
- request_dictionary.rename(s1, s2);
- }
- skip_line();
-}
-
-void alias_macro()
-{
- symbol s1 = get_name(1);
- if (!s1.is_null()) {
- symbol s2 = get_name(1);
- if (!s2.is_null()) {
- if (!request_dictionary.alias(s1, s2))
- warning(WARN_MAC, "macro `%1' not defined", s2.contents());
- }
- }
- skip_line();
-}
-
-void chop_macro()
-{
- symbol s = get_name(1);
- if (!s.is_null()) {
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("cannot chop request");
- else if (m->empty())
- error("cannot chop empty macro");
- else {
- int have_restore = 0;
- // we have to check for additional save/restore pairs which could be
- // there due to empty am1 requests.
- for (;;) {
- if (m->get(m->len - 1) != POP_GROFFCOMP_MODE)
- break;
- have_restore = 1;
- m->len -= 1;
- if (m->get(m->len - 1) != PUSH_GROFF_MODE
- && m->get(m->len - 1) != PUSH_COMP_MODE)
- break;
- have_restore = 0;
- m->len -= 1;
- if (m->len == 0)
- break;
- }
- if (m->len == 0)
- error("cannot chop empty macro");
- else {
- if (have_restore)
- m->set(POP_GROFFCOMP_MODE, m->len - 1);
- else
- m->len -= 1;
- }
- }
- }
- skip_line();
-}
-
-void substring_request()
-{
- int start; // 0, 1, ..., n-1 or -1, -2, ...
- symbol s = get_name(1);
- if (!s.is_null() && get_integer(&start)) {
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("cannot apply `substring' on a request");
- else {
- int end = -1;
- if (!has_arg() || get_integer(&end)) {
- int real_length = 0; // 1, 2, ..., n
- string_iterator iter1(*m);
- for (int l = 0; l < m->len; l++) {
- int c = iter1.get(0);
- if (c == PUSH_GROFF_MODE
- || c == PUSH_COMP_MODE
- || c == POP_GROFFCOMP_MODE)
- continue;
- if (c == EOF)
- break;
- real_length++;
- }
- if (start < 0)
- start += real_length;
- if (end < 0)
- end += real_length;
- if (start > end) {
- int tem = start;
- start = end;
- end = tem;
- }
- if (start >= real_length || end < 0) {
- warning(WARN_RANGE,
- "start and end index of substring out of range");
- m->len = 0;
- if (m->p) {
- if (--(m->p->count) <= 0)
- delete m->p;
- m->p = 0;
- }
- skip_line();
- return;
- }
- if (start < 0) {
- warning(WARN_RANGE,
- "start index of substring out of range, set to 0");
- start = 0;
- }
- if (end >= real_length) {
- warning(WARN_RANGE,
- "end index of substring out of range, set to string length");
- end = real_length - 1;
- }
- // now extract the substring
- string_iterator iter(*m);
- int i;
- for (i = 0; i < start; i++) {
- int c = iter.get(0);
- while (c == PUSH_GROFF_MODE
- || c == PUSH_COMP_MODE
- || c == POP_GROFFCOMP_MODE)
- c = iter.get(0);
- if (c == EOF)
- break;
- }
- macro mac;
- for (; i <= end; i++) {
- node *nd = 0; // pacify compiler
- int c = iter.get(&nd);
- while (c == PUSH_GROFF_MODE
- || c == PUSH_COMP_MODE
- || c == POP_GROFFCOMP_MODE)
- c = iter.get(0);
- if (c == EOF)
- break;
- if (c == 0)
- mac.append(nd);
- else
- mac.append((unsigned char)c);
- }
- *m = mac;
- }
- }
- }
- skip_line();
-}
-
-void length_request()
-{
- symbol ret;
- ret = get_name(1);
- if (ret.is_null()) {
- skip_line();
- return;
- }
- int c;
- node *n;
- if (tok.newline())
- c = '\n';
- else if (tok.tab())
- c = '\t';
- else if (!tok.space()) {
- error("bad string definition");
- skip_line();
- return;
- }
- else
- c = get_copy(&n);
- while (c == ' ')
- c = get_copy(&n);
- if (c == '"')
- c = get_copy(&n);
- int len = 0;
- while (c != '\n' && c != EOF) {
- ++len;
- c = get_copy(&n);
- }
- reg *r = (reg*)number_reg_dictionary.lookup(ret);
- if (r)
- r->set_value(len);
- else
- set_number_reg(ret, len);
- tok.next();
-}
-
-void asciify_macro()
-{
- symbol s = get_name(1);
- if (!s.is_null()) {
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("cannot asciify request");
- else {
- macro am;
- string_iterator iter(*m);
- for (;;) {
- node *nd = 0; // pacify compiler
- int c = iter.get(&nd);
- if (c == EOF)
- break;
- if (c != 0)
- am.append(c);
- else
- nd->asciify(&am);
- }
- *m = am;
- }
- }
- skip_line();
-}
-
-void unformat_macro()
-{
- symbol s = get_name(1);
- if (!s.is_null()) {
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("cannot unformat request");
- else {
- macro am;
- string_iterator iter(*m);
- for (;;) {
- node *nd = 0; // pacify compiler
- int c = iter.get(&nd);
- if (c == EOF)
- break;
- if (c != 0)
- am.append(c);
- else {
- if (nd->set_unformat_flag())
- am.append(nd);
- }
- }
- *m = am;
- }
- }
- skip_line();
-}
-
-static void interpolate_environment_variable(symbol nm)
-{
- const char *s = getenv(nm.contents());
- if (s && *s)
- input_stack::push(make_temp_iterator(s));
-}
-
-void interpolate_number_reg(symbol nm, int inc)
-{
- reg *r = lookup_number_reg(nm);
- if (inc < 0)
- r->decrement();
- else if (inc > 0)
- r->increment();
- input_stack::push(make_temp_iterator(r->get_string()));
-}
-
-static void interpolate_number_format(symbol nm)
-{
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- if (r)
- input_stack::push(make_temp_iterator(r->get_format()));
-}
-
-static int get_delim_number(units *n, unsigned char si, int prev_value)
-{
- token start;
- start.next();
- if (start.delimiter(1)) {
- tok.next();
- if (get_number(n, si, prev_value)) {
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- return 1;
- }
- }
- return 0;
-}
-
-static int get_delim_number(units *n, unsigned char si)
-{
- token start;
- start.next();
- if (start.delimiter(1)) {
- tok.next();
- if (get_number(n, si)) {
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- return 1;
- }
- }
- return 0;
-}
-
-static int get_line_arg(units *n, unsigned char si, charinfo **cp)
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- if (!start.delimiter(1))
- return 0;
- tok.next();
- if (get_number(n, si)) {
- if (tok.dummy() || tok.transparent_dummy())
- tok.next();
- if (!(start == tok && input_stack::get_level() == start_level)) {
- *cp = tok.get_char(1);
- tok.next();
- }
- if (!(start == tok && input_stack::get_level() == start_level))
- warning(WARN_DELIM, "closing delimiter does not match");
- return 1;
- }
- return 0;
-}
-
-static int read_size(int *x)
-{
- tok.next();
- int c = tok.ch();
- int inc = 0;
- if (c == '-') {
- inc = -1;
- tok.next();
- c = tok.ch();
- }
- else if (c == '+') {
- inc = 1;
- tok.next();
- c = tok.ch();
- }
- int val = 0; // pacify compiler
- int bad = 0;
- if (c == '(') {
- tok.next();
- c = tok.ch();
- if (!inc) {
- // allow an increment either before or after the left parenthesis
- if (c == '-') {
- inc = -1;
- tok.next();
- c = tok.ch();
- }
- else if (c == '+') {
- inc = 1;
- tok.next();
- c = tok.ch();
- }
- }
- if (!csdigit(c))
- bad = 1;
- else {
- val = c - '0';
- tok.next();
- c = tok.ch();
- if (!csdigit(c))
- bad = 1;
- else {
- val = val*10 + (c - '0');
- val *= sizescale;
- }
- }
- }
- else if (csdigit(c)) {
- val = c - '0';
- if (!inc && c != '0' && c < '4') {
- tok.next();
- c = tok.ch();
- if (!csdigit(c))
- bad = 1;
- else
- val = val*10 + (c - '0');
- }
- val *= sizescale;
- }
- else if (!tok.delimiter(1))
- return 0;
- else {
- token start(tok);
- tok.next();
- if (!(inc
- ? get_number(&val, 'z')
- : get_number(&val, 'z', curenv->get_requested_point_size())))
- return 0;
- if (!(start.ch() == '[' && tok.ch() == ']') && start != tok) {
- if (start.ch() == '[')
- error("missing `]'");
- else
- error("missing closing delimiter");
- return 0;
- }
- }
- if (!bad) {
- switch (inc) {
- case 0:
- if (val == 0) {
- // special case -- \s[0] and \s0 means to revert to previous size
- *x = 0;
- return 1;
- }
- *x = val;
- break;
- case 1:
- *x = curenv->get_requested_point_size() + val;
- break;
- case -1:
- *x = curenv->get_requested_point_size() - val;
- break;
- default:
- assert(0);
- }
- if (*x <= 0) {
- warning(WARN_RANGE,
- "\\s request results in non-positive point size; set to 1");
- *x = 1;
- }
- return 1;
- }
- else {
- error("bad digit in point size");
- return 0;
- }
-}
-
-static symbol get_delim_name()
-{
- token start;
- start.next();
- if (start.eof()) {
- error("end of input at start of delimited name");
- return NULL_SYMBOL;
- }
- if (start.newline()) {
- error("can't delimit name with a newline");
- return NULL_SYMBOL;
- }
- int start_level = input_stack::get_level();
- char abuf[ABUF_SIZE];
- char *buf = abuf;
- int buf_size = ABUF_SIZE;
- int i = 0;
- for (;;) {
- if (i + 1 > buf_size) {
- if (buf == abuf) {
- buf = new char[ABUF_SIZE*2];
- memcpy(buf, abuf, buf_size);
- buf_size = ABUF_SIZE*2;
- }
- else {
- char *old_buf = buf;
- buf = new char[buf_size*2];
- memcpy(buf, old_buf, buf_size);
- buf_size *= 2;
- a_delete old_buf;
- }
- }
- tok.next();
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- if ((buf[i] = tok.ch()) == 0) {
- error("missing delimiter (got %1)", tok.description());
- if (buf != abuf)
- a_delete buf;
- return NULL_SYMBOL;
- }
- i++;
- }
- buf[i] = '\0';
- if (buf == abuf) {
- if (i == 0) {
- error("empty delimited name");
- return NULL_SYMBOL;
- }
- else
- return symbol(buf);
- }
- else {
- symbol s(buf);
- a_delete buf;
- return s;
- }
-}
-
-// Implement \R
-
-static void do_register()
-{
- token start;
- start.next();
- if (!start.delimiter(1))
- return;
- tok.next();
- symbol nm = get_long_name(1);
- if (nm.is_null())
- return;
- while (tok.space())
- tok.next();
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- int prev_value;
- if (!r || !r->get_value(&prev_value))
- prev_value = 0;
- int val;
- if (!get_number(&val, 'u', prev_value))
- return;
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- if (r)
- r->set_value(val);
- else
- set_number_reg(nm, val);
-}
-
-// this implements the \w escape sequence
-
-static void do_width()
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- environment env(curenv);
- environment *oldenv = curenv;
- curenv = &env;
- for (;;) {
- tok.next();
- if (tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- break;
- }
- if (tok.newline()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- tok.process();
- }
- env.wrap_up_tab();
- units x = env.get_input_line_position().to_units();
- input_stack::push(make_temp_iterator(i_to_a(x)));
- env.width_registers();
- curenv = oldenv;
- have_input = 0;
-}
-
-charinfo *page_character;
-
-void set_page_character()
-{
- page_character = get_optional_char();
- skip_line();
-}
-
-static const symbol percent_symbol("%");
-
-void read_title_parts(node **part, hunits *part_width)
-{
- tok.skip();
- if (tok.newline() || tok.eof())
- return;
- token start(tok);
- int start_level = input_stack::get_level();
- tok.next();
- for (int i = 0; i < 3; i++) {
- while (!tok.newline() && !tok.eof()) {
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level)) {
- tok.next();
- break;
- }
- if (page_character != 0 && tok.get_char() == page_character)
- interpolate_number_reg(percent_symbol, 0);
- else
- tok.process();
- tok.next();
- }
- curenv->wrap_up_tab();
- part_width[i] = curenv->get_input_line_position();
- part[i] = curenv->extract_output_line();
- }
- while (!tok.newline() && !tok.eof())
- tok.next();
-}
-
-class non_interpreted_node : public node {
- macro mac;
-public:
- non_interpreted_node(const macro &);
- int interpret(macro *);
- node *copy();
- int ends_sentence();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-non_interpreted_node::non_interpreted_node(const macro &m) : mac(m)
-{
-}
-
-int non_interpreted_node::ends_sentence()
-{
- return 2;
-}
-
-int non_interpreted_node::same(node *nd)
-{
- return mac == ((non_interpreted_node *)nd)->mac;
-}
-
-const char *non_interpreted_node::type()
-{
- return "non_interpreted_node";
-}
-
-int non_interpreted_node::force_tprint()
-{
- return 0;
-}
-
-int non_interpreted_node::is_tag()
-{
- return 0;
-}
-
-node *non_interpreted_node::copy()
-{
- return new non_interpreted_node(mac);
-}
-
-int non_interpreted_node::interpret(macro *m)
-{
- string_iterator si(mac);
- node *n = 0; // pacify compiler
- for (;;) {
- int c = si.get(&n);
- if (c == EOF)
- break;
- if (c == 0)
- m->append(n);
- else
- m->append(c);
- }
- return 1;
-}
-
-static node *do_non_interpreted()
-{
- node *n;
- int c;
- macro mac;
- while ((c = get_copy(&n)) != ESCAPE_QUESTION && c != EOF && c != '\n')
- if (c == 0)
- mac.append(n);
- else
- mac.append(c);
- if (c == EOF || c == '\n') {
- error("missing \\?");
- return 0;
- }
- return new non_interpreted_node(mac);
-}
-
-static void encode_char(macro *mac, char c)
-{
- if (c == '\0') {
- if ((font::use_charnames_in_special) && tok.special()) {
- charinfo *ci = tok.get_char(1);
- const char *s = ci->get_symbol()->contents();
- if (s[0] != (char)0) {
- mac->append('\\');
- mac->append('(');
- int i = 0;
- while (s[i] != (char)0) {
- mac->append(s[i]);
- i++;
- }
- mac->append('\\');
- mac->append(')');
- }
- }
- else if (tok.stretchable_space()
- || tok.unstretchable_space())
- mac->append(' ');
- else if (!(tok.hyphen_indicator()
- || tok.dummy()
- || tok.transparent_dummy()
- || tok.zero_width_break()))
- error("%1 is invalid within \\X", tok.description());
- }
- else {
- if ((font::use_charnames_in_special) && (c == '\\')) {
- /*
- * add escape escape sequence
- */
- mac->append(c);
- }
- mac->append(c);
- }
-}
-
-node *do_special()
-{
- token start;
- start.next();
- int start_level = input_stack::get_level();
- macro mac;
- for (tok.next();
- tok != start || input_stack::get_level() != start_level;
- tok.next()) {
- if (tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- return 0;
- }
- if (tok.newline()) {
- input_stack::push(make_temp_iterator("\n"));
- warning(WARN_DELIM, "missing closing delimiter");
- break;
- }
- unsigned char c;
- if (tok.space())
- c = ' ';
- else if (tok.tab())
- c = '\t';
- else if (tok.leader())
- c = '\001';
- else if (tok.backspace())
- c = '\b';
- else
- c = tok.ch();
- encode_char(&mac, c);
- }
- return new special_node(mac);
-}
-
-void output_request()
-{
- if (!tok.newline() && !tok.eof()) {
- int c;
- for (;;) {
- c = get_copy(0);
- if (c == '"') {
- c = get_copy(0);
- break;
- }
- if (c != ' ' && c != '\t')
- break;
- }
- for (; c != '\n' && c != EOF; c = get_copy(0))
- topdiv->transparent_output(c);
- topdiv->transparent_output('\n');
- }
- tok.next();
-}
-
-extern int image_no; // from node.cpp
-
-static node *do_suppress(symbol nm)
-{
- if (nm.is_null() || nm.is_empty()) {
- error("expecting an argument to escape \\O");
- return 0;
- }
- const char *s = nm.contents();
- switch (*s) {
- case '0':
- if (begin_level == 0)
- // suppress generation of glyphs
- return new suppress_node(0, 0);
- break;
- case '1':
- if (begin_level == 0)
- // enable generation of glyphs
- return new suppress_node(1, 0);
- break;
- case '2':
- if (begin_level == 0)
- return new suppress_node(1, 1);
- break;
- case '3':
- begin_level++;
- break;
- case '4':
- begin_level--;
- break;
- case '5':
- {
- s++; // move over '5'
- char position = *s;
- if (*s == (char)0) {
- error("missing position and filename in \\O");
- return 0;
- }
- if (!(position == 'l'
- || position == 'r'
- || position == 'c'
- || position == 'i')) {
- error("l, r, c, or i position expected (got %1 in \\O)", position);
- return 0;
- }
- s++; // onto image name
- if (s == (char *)0) {
- error("missing image name for \\O");
- return 0;
- }
- image_no++;
- if (begin_level == 0)
- return new suppress_node(symbol(s), position, image_no);
- }
- break;
- default:
- error("`%1' is an invalid argument to \\O", *s);
- }
- return 0;
-}
-
-void special_node::tprint(troff_output_file *out)
-{
- tprint_start(out);
- string_iterator iter(mac);
- for (;;) {
- int c = iter.get(0);
- if (c == EOF)
- break;
- for (const char *s = ::asciify(c); *s; s++)
- tprint_char(out, *s);
- }
- tprint_end(out);
-}
-
-int get_file_line(const char **filename, int *lineno)
-{
- return input_stack::get_location(0, filename, lineno);
-}
-
-void line_file()
-{
- int n;
- if (get_integer(&n)) {
- const char *filename = 0;
- if (has_arg()) {
- symbol s = get_long_name();
- filename = s.contents();
- }
- (void)input_stack::set_location(filename, n-1);
- }
- skip_line();
-}
-
-static int nroff_mode = 0;
-
-static void nroff_request()
-{
- nroff_mode = 1;
- skip_line();
-}
-
-static void troff_request()
-{
- nroff_mode = 0;
- skip_line();
-}
-
-static void skip_alternative()
-{
- int level = 0;
- // ensure that ``.if 0\{'' works as expected
- if (tok.left_brace())
- level++;
- int c;
- for (;;) {
- c = input_stack::get(0);
- if (c == EOF)
- break;
- if (c == ESCAPE_LEFT_BRACE)
- ++level;
- else if (c == ESCAPE_RIGHT_BRACE)
- --level;
- else if (c == escape_char && escape_char > 0)
- switch(input_stack::get(0)) {
- case '{':
- ++level;
- break;
- case '}':
- --level;
- break;
- case '"':
- while ((c = input_stack::get(0)) != '\n' && c != EOF)
- ;
- }
- /*
- Note that the level can properly be < 0, eg
-
- .if 1 \{\
- .if 0 \{\
- .\}\}
-
- So don't give an error message in this case.
- */
- if (level <= 0 && c == '\n')
- break;
- }
- tok.next();
-}
-
-static void begin_alternative()
-{
- while (tok.space() || tok.left_brace())
- tok.next();
-}
-
-void nop_request()
-{
- while (tok.space())
- tok.next();
-}
-
-static int_stack if_else_stack;
-
-int do_if_request()
-{
- int invert = 0;
- while (tok.space())
- tok.next();
- while (tok.ch() == '!') {
- tok.next();
- invert = !invert;
- }
- int result;
- unsigned char c = tok.ch();
- if (c == 't') {
- tok.next();
- result = !nroff_mode;
- }
- else if (c == 'n') {
- tok.next();
- result = nroff_mode;
- }
- else if (c == 'v') {
- tok.next();
- result = 0;
- }
- else if (c == 'o') {
- result = (topdiv->get_page_number() & 1);
- tok.next();
- }
- else if (c == 'e') {
- result = !(topdiv->get_page_number() & 1);
- tok.next();
- }
- else if (c == 'd' || c == 'r') {
- tok.next();
- symbol nm = get_name(1);
- if (nm.is_null()) {
- skip_alternative();
- return 0;
- }
- result = (c == 'd'
- ? request_dictionary.lookup(nm) != 0
- : number_reg_dictionary.lookup(nm) != 0);
- }
- else if (c == 'm') {
- tok.next();
- symbol nm = get_long_name(1);
- if (nm.is_null()) {
- skip_alternative();
- return 0;
- }
- result = (nm == default_symbol
- || color_dictionary.lookup(nm) != 0);
- }
- else if (c == 'c') {
- tok.next();
- tok.skip();
- charinfo *ci = tok.get_char(1);
- if (ci == 0) {
- skip_alternative();
- return 0;
- }
- result = character_exists(ci, curenv);
- tok.next();
- }
- else if (c == 'F') {
- tok.next();
- symbol nm = get_long_name(1);
- if (nm.is_null()) {
- skip_alternative();
- return 0;
- }
- result = check_font(curenv->get_family()->nm, nm);
- }
- else if (c == 'S') {
- tok.next();
- symbol nm = get_long_name(1);
- if (nm.is_null()) {
- skip_alternative();
- return 0;
- }
- result = check_style(nm);
- }
- else if (tok.space())
- result = 0;
- else if (tok.delimiter()) {
- token delim = tok;
- int delim_level = input_stack::get_level();
- environment env1(curenv);
- environment env2(curenv);
- environment *oldenv = curenv;
- curenv = &env1;
- suppress_push = 1;
- for (int i = 0; i < 2; i++) {
- for (;;) {
- tok.next();
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- tok.next();
- curenv = oldenv;
- return 0;
- }
- if (tok == delim
- && (compatible_flag || input_stack::get_level() == delim_level))
- break;
- tok.process();
- }
- curenv = &env2;
- }
- node *n1 = env1.extract_output_line();
- node *n2 = env2.extract_output_line();
- result = same_node_list(n1, n2);
- delete_node_list(n1);
- delete_node_list(n2);
- curenv = oldenv;
- have_input = 0;
- suppress_push = 0;
- tok.next();
- }
- else {
- units n;
- if (!get_number(&n, 'u')) {
- skip_alternative();
- return 0;
- }
- else
- result = n > 0;
- }
- if (invert)
- result = !result;
- if (result)
- begin_alternative();
- else
- skip_alternative();
- return result;
-}
-
-void if_else_request()
-{
- if_else_stack.push(do_if_request());
-}
-
-void if_request()
-{
- do_if_request();
-}
-
-void else_request()
-{
- if (if_else_stack.is_empty()) {
- warning(WARN_EL, "unbalanced .el request");
- skip_alternative();
- }
- else {
- if (if_else_stack.pop())
- skip_alternative();
- else
- begin_alternative();
- }
-}
-
-static int while_depth = 0;
-static int while_break_flag = 0;
-
-void while_request()
-{
- macro mac;
- int escaped = 0;
- int level = 0;
- mac.append(new token_node(tok));
- for (;;) {
- node *n = 0; // pacify compiler
- int c = input_stack::get(&n);
- if (c == EOF)
- break;
- if (c == 0) {
- escaped = 0;
- mac.append(n);
- }
- else if (escaped) {
- if (c == '{')
- level += 1;
- else if (c == '}')
- level -= 1;
- escaped = 0;
- mac.append(c);
- }
- else {
- if (c == ESCAPE_LEFT_BRACE)
- level += 1;
- else if (c == ESCAPE_RIGHT_BRACE)
- level -= 1;
- else if (c == escape_char)
- escaped = 1;
- mac.append(c);
- if (c == '\n' && level <= 0)
- break;
- }
- }
- if (level != 0)
- error("unbalanced \\{ \\}");
- else {
- while_depth++;
- input_stack::add_boundary();
- for (;;) {
- input_stack::push(new string_iterator(mac, "while loop"));
- tok.next();
- if (!do_if_request()) {
- while (input_stack::get(0) != EOF)
- ;
- break;
- }
- process_input_stack();
- if (while_break_flag || input_stack::is_return_boundary()) {
- while_break_flag = 0;
- break;
- }
- }
- input_stack::remove_boundary();
- while_depth--;
- }
- tok.next();
-}
-
-void while_break_request()
-{
- if (!while_depth) {
- error("no while loop");
- skip_line();
- }
- else {
- while_break_flag = 1;
- while (input_stack::get(0) != EOF)
- ;
- tok.next();
- }
-}
-
-void while_continue_request()
-{
- if (!while_depth) {
- error("no while loop");
- skip_line();
- }
- else {
- while (input_stack::get(0) != EOF)
- ;
- tok.next();
- }
-}
-
-// .so
-
-void source()
-{
- symbol nm = get_long_name(1);
- if (nm.is_null())
- skip_line();
- else {
- while (!tok.newline() && !tok.eof())
- tok.next();
- errno = 0;
- FILE *fp = include_search_path.open_file_cautious(nm.contents());
- if (fp)
- input_stack::push(new file_iterator(fp, nm.contents()));
- else
- error("can't open `%1': %2", nm.contents(), strerror(errno));
- tok.next();
- }
-}
-
-// like .so but use popen()
-
-void pipe_source()
-{
- if (safer_flag) {
- error(".pso request not allowed in safer mode");
- skip_line();
- }
- else {
-#ifdef POPEN_MISSING
- error("pipes not available on this system");
- skip_line();
-#else /* not POPEN_MISSING */
- if (tok.newline() || tok.eof())
- error("missing command");
- else {
- int c;
- while ((c = get_copy(0)) == ' ' || c == '\t')
- ;
- int buf_size = 24;
- char *buf = new char[buf_size];
- int buf_used = 0;
- for (; c != '\n' && c != EOF; c = get_copy(0)) {
- const char *s = asciify(c);
- int slen = strlen(s);
- if (buf_used + slen + 1> buf_size) {
- char *old_buf = buf;
- int old_buf_size = buf_size;
- buf_size *= 2;
- buf = new char[buf_size];
- memcpy(buf, old_buf, old_buf_size);
- a_delete old_buf;
- }
- strcpy(buf + buf_used, s);
- buf_used += slen;
- }
- buf[buf_used] = '\0';
- errno = 0;
- FILE *fp = popen(buf, POPEN_RT);
- if (fp)
- input_stack::push(new file_iterator(fp, symbol(buf).contents(), 1));
- else
- error("can't open pipe to process `%1': %2", buf, strerror(errno));
- a_delete buf;
- }
- tok.next();
-#endif /* not POPEN_MISSING */
- }
-}
-
-// .psbb
-
-static int llx_reg_contents = 0;
-static int lly_reg_contents = 0;
-static int urx_reg_contents = 0;
-static int ury_reg_contents = 0;
-
-struct bounding_box {
- int llx, lly, urx, ury;
-};
-
-/* Parse the argument to a %%BoundingBox comment. Return 1 if it
-contains 4 numbers, 2 if it contains (atend), 0 otherwise. */
-
-int parse_bounding_box(char *p, bounding_box *bb)
-{
- if (sscanf(p, "%d %d %d %d",
- &bb->llx, &bb->lly, &bb->urx, &bb->ury) == 4)
- return 1;
- else {
- /* The Document Structuring Conventions say that the numbers
- should be integers. Unfortunately some broken applications
- get this wrong. */
- double x1, x2, x3, x4;
- if (sscanf(p, "%lf %lf %lf %lf", &x1, &x2, &x3, &x4) == 4) {
- bb->llx = (int)x1;
- bb->lly = (int)x2;
- bb->urx = (int)x3;
- bb->ury = (int)x4;
- return 1;
- }
- else {
- for (; *p == ' ' || *p == '\t'; p++)
- ;
- if (strncmp(p, "(atend)", 7) == 0) {
- return 2;
- }
- }
- }
- bb->llx = bb->lly = bb->urx = bb->ury = 0;
- return 0;
-}
-
-// This version is taken from psrm.cpp
-
-#define PS_LINE_MAX 255
-cset white_space("\n\r \t");
-
-int ps_get_line(char *buf, FILE *fp, const char* filename)
-{
- int c = getc(fp);
- if (c == EOF) {
- buf[0] = '\0';
- return 0;
- }
- int i = 0;
- int err = 0;
- while (c != '\r' && c != '\n' && c != EOF) {
- if ((c < 0x1b && !white_space(c)) || c == 0x7f)
- error("invalid input character code %1 in `%2'", int(c), filename);
- else if (i < PS_LINE_MAX)
- buf[i++] = c;
- else if (!err) {
- err = 1;
- error("PostScript file `%1' is non-conforming "
- "because length of line exceeds 255", filename);
- }
- c = getc(fp);
- }
- buf[i++] = '\n';
- buf[i] = '\0';
- if (c == '\r') {
- c = getc(fp);
- if (c != EOF && c != '\n')
- ungetc(c, fp);
- }
- return 1;
-}
-
-inline void assign_registers(int llx, int lly, int urx, int ury)
-{
- llx_reg_contents = llx;
- lly_reg_contents = lly;
- urx_reg_contents = urx;
- ury_reg_contents = ury;
-}
-
-void do_ps_file(FILE *fp, const char* filename)
-{
- bounding_box bb;
- int bb_at_end = 0;
- char buf[PS_LINE_MAX];
- llx_reg_contents = lly_reg_contents =
- urx_reg_contents = ury_reg_contents = 0;
- if (!ps_get_line(buf, fp, filename)) {
- error("`%1' is empty", filename);
- return;
- }
- if (strncmp("%!PS-Adobe-", buf, 11) != 0) {
- error("`%1' is not conforming to the Document Structuring Conventions",
- filename);
- return;
- }
- while (ps_get_line(buf, fp, filename) != 0) {
- if (buf[0] != '%' || buf[1] != '%'
- || strncmp(buf + 2, "EndComments", 11) == 0)
- break;
- if (strncmp(buf + 2, "BoundingBox:", 12) == 0) {
- int res = parse_bounding_box(buf + 14, &bb);
- if (res == 1) {
- assign_registers(bb.llx, bb.lly, bb.urx, bb.ury);
- return;
- }
- else if (res == 2) {
- bb_at_end = 1;
- break;
- }
- else {
- error("the arguments to the %%%%BoundingBox comment in `%1' are bad",
- filename);
- return;
- }
- }
- }
- if (bb_at_end) {
- long offset;
- int last_try = 0;
- /* in the trailer, the last BoundingBox comment is significant */
- for (offset = 512; !last_try; offset *= 2) {
- int had_trailer = 0;
- int got_bb = 0;
- if (offset > 32768 || fseek(fp, -offset, 2) == -1) {
- last_try = 1;
- if (fseek(fp, 0L, 0) == -1)
- break;
- }
- while (ps_get_line(buf, fp, filename) != 0) {
- if (buf[0] == '%' && buf[1] == '%') {
- if (!had_trailer) {
- if (strncmp(buf + 2, "Trailer", 7) == 0)
- had_trailer = 1;
- }
- else {
- if (strncmp(buf + 2, "BoundingBox:", 12) == 0) {
- int res = parse_bounding_box(buf + 14, &bb);
- if (res == 1)
- got_bb = 1;
- else if (res == 2) {
- error("`(atend)' not allowed in trailer of `%1'", filename);
- return;
- }
- else {
- error("the arguments to the %%%%BoundingBox comment in `%1' are bad",
- filename);
- return;
- }
- }
- }
- }
- }
- if (got_bb) {
- assign_registers(bb.llx, bb.lly, bb.urx, bb.ury);
- return;
- }
- }
- }
- error("%%%%BoundingBox comment not found in `%1'", filename);
-}
-
-void ps_bbox_request()
-{
- symbol nm = get_long_name(1);
- if (nm.is_null())
- skip_line();
- else {
- while (!tok.newline() && !tok.eof())
- tok.next();
- errno = 0;
- // PS files might contain non-printable characters, such as ^Z
- // and CRs not followed by an LF, so open them in binary mode.
- FILE *fp = include_search_path.open_file_cautious(nm.contents(),
- 0, FOPEN_RB);
- if (fp) {
- do_ps_file(fp, nm.contents());
- fclose(fp);
- }
- else
- error("can't open `%1': %2", nm.contents(), strerror(errno));
- tok.next();
- }
-}
-
-const char *asciify(int c)
-{
- static char buf[3];
- buf[0] = escape_char == '\0' ? '\\' : escape_char;
- buf[1] = buf[2] = '\0';
- switch (c) {
- case ESCAPE_QUESTION:
- buf[1] = '?';
- break;
- case ESCAPE_AMPERSAND:
- buf[1] = '&';
- break;
- case ESCAPE_RIGHT_PARENTHESIS:
- buf[1] = ')';
- break;
- case ESCAPE_UNDERSCORE:
- buf[1] = '_';
- break;
- case ESCAPE_BAR:
- buf[1] = '|';
- break;
- case ESCAPE_CIRCUMFLEX:
- buf[1] = '^';
- break;
- case ESCAPE_LEFT_BRACE:
- buf[1] = '{';
- break;
- case ESCAPE_RIGHT_BRACE:
- buf[1] = '}';
- break;
- case ESCAPE_LEFT_QUOTE:
- buf[1] = '`';
- break;
- case ESCAPE_RIGHT_QUOTE:
- buf[1] = '\'';
- break;
- case ESCAPE_HYPHEN:
- buf[1] = '-';
- break;
- case ESCAPE_BANG:
- buf[1] = '!';
- break;
- case ESCAPE_c:
- buf[1] = 'c';
- break;
- case ESCAPE_e:
- buf[1] = 'e';
- break;
- case ESCAPE_E:
- buf[1] = 'E';
- break;
- case ESCAPE_PERCENT:
- buf[1] = '%';
- break;
- case ESCAPE_SPACE:
- buf[1] = ' ';
- break;
- case ESCAPE_TILDE:
- buf[1] = '~';
- break;
- case ESCAPE_COLON:
- buf[1] = ':';
- break;
- case PUSH_GROFF_MODE:
- case PUSH_COMP_MODE:
- case POP_GROFFCOMP_MODE:
- buf[0] = '\0';
- break;
- default:
- if (invalid_input_char(c))
- buf[0] = '\0';
- else
- buf[0] = c;
- break;
- }
- return buf;
-}
-
-const char *input_char_description(int c)
-{
- switch (c) {
- case '\n':
- return "a newline character";
- case '\b':
- return "a backspace character";
- case '\001':
- return "a leader character";
- case '\t':
- return "a tab character";
- case ' ':
- return "a space character";
- case '\0':
- return "a node";
- }
- static char buf[sizeof("magic character code ") + 1 + INT_DIGITS];
- if (invalid_input_char(c)) {
- const char *s = asciify(c);
- if (*s) {
- buf[0] = '`';
- strcpy(buf + 1, s);
- strcat(buf, "'");
- return buf;
- }
- sprintf(buf, "magic character code %d", c);
- return buf;
- }
- if (csprint(c)) {
- buf[0] = '`';
- buf[1] = c;
- buf[2] = '\'';
- return buf;
- }
- sprintf(buf, "character code %d", c);
- return buf;
-}
-
-void tag()
-{
- if (!tok.newline() && !tok.eof()) {
- string s;
- int c;
- for (;;) {
- c = get_copy(0);
- if (c == '"') {
- c = get_copy(0);
- break;
- }
- if (c != ' ' && c != '\t')
- break;
- }
- s = "x X ";
- for (; c != '\n' && c != EOF; c = get_copy(0))
- s += (char)c;
- s += '\n';
- curenv->add_node(new tag_node(s, 0));
- }
- tok.next();
-}
-
-void taga()
-{
- if (!tok.newline() && !tok.eof()) {
- string s;
- int c;
- for (;;) {
- c = get_copy(0);
- if (c == '"') {
- c = get_copy(0);
- break;
- }
- if (c != ' ' && c != '\t')
- break;
- }
- s = "x X ";
- for (; c != '\n' && c != EOF; c = get_copy(0))
- s += (char)c;
- s += '\n';
- curenv->add_node(new tag_node(s, 1));
- }
- tok.next();
-}
-
-// .tm, .tm1, and .tmc
-
-void do_terminal(int newline, int string_like)
-{
- if (!tok.newline() && !tok.eof()) {
- int c;
- for (;;) {
- c = get_copy(0);
- if (string_like && c == '"') {
- c = get_copy(0);
- break;
- }
- if (c != ' ' && c != '\t')
- break;
- }
- for (; c != '\n' && c != EOF; c = get_copy(0))
- fputs(asciify(c), stderr);
- }
- if (newline)
- fputc('\n', stderr);
- fflush(stderr);
- tok.next();
-}
-
-void terminal()
-{
- do_terminal(1, 0);
-}
-
-void terminal1()
-{
- do_terminal(1, 1);
-}
-
-void terminal_continue()
-{
- do_terminal(0, 1);
-}
-
-dictionary stream_dictionary(20);
-
-void do_open(int append)
-{
- symbol stream = get_name(1);
- if (!stream.is_null()) {
- symbol filename = get_long_name(1);
- if (!filename.is_null()) {
- errno = 0;
- FILE *fp = fopen(filename.contents(), append ? "a" : "w");
- if (!fp) {
- error("can't open `%1' for %2: %3",
- filename.contents(),
- append ? "appending" : "writing",
- strerror(errno));
- fp = (FILE *)stream_dictionary.remove(stream);
- }
- else
- fp = (FILE *)stream_dictionary.lookup(stream, fp);
- if (fp)
- fclose(fp);
- }
- }
- skip_line();
-}
-
-void open_request()
-{
- if (safer_flag) {
- error(".open request not allowed in safer mode");
- skip_line();
- }
- else
- do_open(0);
-}
-
-void opena_request()
-{
- if (safer_flag) {
- error(".opena request not allowed in safer mode");
- skip_line();
- }
- else
- do_open(1);
-}
-
-void close_request()
-{
- symbol stream = get_name(1);
- if (!stream.is_null()) {
- FILE *fp = (FILE *)stream_dictionary.remove(stream);
- if (!fp)
- error("no stream named `%1'", stream.contents());
- else
- fclose(fp);
- }
- skip_line();
-}
-
-// .write and .writec
-
-void do_write_request(int newline)
-{
- symbol stream = get_name(1);
- if (stream.is_null()) {
- skip_line();
- return;
- }
- FILE *fp = (FILE *)stream_dictionary.lookup(stream);
- if (!fp) {
- error("no stream named `%1'", stream.contents());
- skip_line();
- return;
- }
- int c;
- while ((c = get_copy(0)) == ' ')
- ;
- if (c == '"')
- c = get_copy(0);
- for (; c != '\n' && c != EOF; c = get_copy(0))
- fputs(asciify(c), fp);
- if (newline)
- fputc('\n', fp);
- fflush(fp);
- tok.next();
-}
-
-void write_request()
-{
- do_write_request(1);
-}
-
-void write_request_continue()
-{
- do_write_request(0);
-}
-
-void write_macro_request()
-{
- symbol stream = get_name(1);
- if (stream.is_null()) {
- skip_line();
- return;
- }
- FILE *fp = (FILE *)stream_dictionary.lookup(stream);
- if (!fp) {
- error("no stream named `%1'", stream.contents());
- skip_line();
- return;
- }
- symbol s = get_name(1);
- if (s.is_null()) {
- skip_line();
- return;
- }
- request_or_macro *p = lookup_request(s);
- macro *m = p->to_macro();
- if (!m)
- error("cannot write request");
- else {
- string_iterator iter(*m);
- for (;;) {
- int c = iter.get(0);
- if (c == EOF)
- break;
- fputs(asciify(c), fp);
- }
- fflush(fp);
- }
- skip_line();
-}
-
-void warnscale_request()
-{
- if (has_arg()) {
- char c = tok.ch();
- if (c == 'u')
- warn_scale = 1.0;
- else if (c == 'i')
- warn_scale = (double)units_per_inch;
- else if (c == 'c')
- warn_scale = (double)units_per_inch / 2.54;
- else if (c == 'p')
- warn_scale = (double)units_per_inch / 72.0;
- else if (c == 'P')
- warn_scale = (double)units_per_inch / 6.0;
- else {
- warning(WARN_SCALE,
- "invalid scaling indicator `%1', using `i' instead", c);
- c = 'i';
- }
- warn_scaling_indicator = c;
- }
- skip_line();
-}
-
-void spreadwarn_request()
-{
- hunits n;
- if (has_arg() && get_hunits(&n, 'm')) {
- if (n < 0)
- n = 0;
- hunits em = curenv->get_size();
- spread_limit = (double)n.to_units()
- / (em.is_zero() ? hresolution : em.to_units());
- }
- else
- spread_limit = -spread_limit - 1; // no arg toggles on/off without
- // changing value; we mirror at
- // -0.5 to make zero a valid value
- skip_line();
-}
-
-static void init_charset_table()
-{
- char buf[16];
- strcpy(buf, "char");
- for (int i = 0; i < 256; i++) {
- strcpy(buf + 4, i_to_a(i));
- charset_table[i] = get_charinfo(symbol(buf));
- charset_table[i]->set_ascii_code(i);
- if (csalpha(i))
- charset_table[i]->set_hyphenation_code(cmlower(i));
- }
- charset_table['.']->set_flags(charinfo::ENDS_SENTENCE);
- charset_table['?']->set_flags(charinfo::ENDS_SENTENCE);
- charset_table['!']->set_flags(charinfo::ENDS_SENTENCE);
- charset_table['-']->set_flags(charinfo::BREAK_AFTER);
- charset_table['"']->set_flags(charinfo::TRANSPARENT);
- charset_table['\'']->set_flags(charinfo::TRANSPARENT);
- charset_table[')']->set_flags(charinfo::TRANSPARENT);
- charset_table[']']->set_flags(charinfo::TRANSPARENT);
- charset_table['*']->set_flags(charinfo::TRANSPARENT);
- get_charinfo(symbol("dg"))->set_flags(charinfo::TRANSPARENT);
- get_charinfo(symbol("rq"))->set_flags(charinfo::TRANSPARENT);
- get_charinfo(symbol("em"))->set_flags(charinfo::BREAK_AFTER);
- get_charinfo(symbol("ul"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("rn"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("radicalex"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("sqrtex"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("ru"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("br"))->set_flags(charinfo::OVERLAPS_VERTICALLY);
- page_character = charset_table['%'];
-}
-
-static void init_hpf_code_table()
-{
- for (int i = 0; i < 256; i++)
- hpf_code_table[i] = i;
-}
-
-static void do_translate(int translate_transparent, int translate_input)
-{
- tok.skip();
- while (!tok.newline() && !tok.eof()) {
- if (tok.space()) {
- // This is a really bizarre troff feature.
- tok.next();
- translate_space_to_dummy = tok.dummy();
- if (tok.newline() || tok.eof())
- break;
- tok.next();
- continue;
- }
- charinfo *ci1 = tok.get_char(1);
- if (ci1 == 0)
- break;
- tok.next();
- if (tok.newline() || tok.eof()) {
- ci1->set_special_translation(charinfo::TRANSLATE_SPACE,
- translate_transparent);
- break;
- }
- if (tok.space())
- ci1->set_special_translation(charinfo::TRANSLATE_SPACE,
- translate_transparent);
- else if (tok.stretchable_space())
- ci1->set_special_translation(charinfo::TRANSLATE_STRETCHABLE_SPACE,
- translate_transparent);
- else if (tok.dummy())
- ci1->set_special_translation(charinfo::TRANSLATE_DUMMY,
- translate_transparent);
- else if (tok.hyphen_indicator())
- ci1->set_special_translation(charinfo::TRANSLATE_HYPHEN_INDICATOR,
- translate_transparent);
- else {
- charinfo *ci2 = tok.get_char(1);
- if (ci2 == 0)
- break;
- if (ci1 == ci2)
- ci1->set_translation(0, translate_transparent, translate_input);
- else
- ci1->set_translation(ci2, translate_transparent, translate_input);
- }
- tok.next();
- }
- skip_line();
-}
-
-void translate()
-{
- do_translate(1, 0);
-}
-
-void translate_no_transparent()
-{
- do_translate(0, 0);
-}
-
-void translate_input()
-{
- do_translate(1, 1);
-}
-
-void char_flags()
-{
- int flags;
- if (get_integer(&flags))
- while (has_arg()) {
- charinfo *ci = tok.get_char(1);
- if (ci) {
- charinfo *tem = ci->get_translation();
- if (tem)
- ci = tem;
- ci->set_flags(flags);
- }
- tok.next();
- }
- skip_line();
-}
-
-void hyphenation_code()
-{
- tok.skip();
- while (!tok.newline() && !tok.eof()) {
- charinfo *ci = tok.get_char(1);
- if (ci == 0)
- break;
- tok.next();
- tok.skip();
- unsigned char c = tok.ch();
- if (c == 0) {
- error("hyphenation code must be ordinary character");
- break;
- }
- if (csdigit(c)) {
- error("hyphenation code cannot be digit");
- break;
- }
- ci->set_hyphenation_code(c);
- if (ci->get_translation()
- && ci->get_translation()->get_translation_input())
- ci->get_translation()->set_hyphenation_code(c);
- tok.next();
- tok.skip();
- }
- skip_line();
-}
-
-void hyphenation_patterns_file_code()
-{
- tok.skip();
- while (!tok.newline() && !tok.eof()) {
- int n1, n2;
- if (get_integer(&n1) && (0 <= n1 && n1 <= 255)) {
- if (!has_arg()) {
- error("missing output hyphenation code");
- break;
- }
- if (get_integer(&n2) && (0 <= n2 && n2 <= 255)) {
- hpf_code_table[n1] = n2;
- tok.skip();
- }
- else {
- error("output hyphenation code must be integer in the range 0..255");
- break;
- }
- }
- else {
- error("input hyphenation code must be integer in the range 0..255");
- break;
- }
- }
- skip_line();
-}
-
-charinfo *token::get_char(int required)
-{
- if (type == TOKEN_CHAR)
- return charset_table[c];
- if (type == TOKEN_SPECIAL)
- return get_charinfo(nm);
- if (type == TOKEN_NUMBERED_CHAR)
- return get_charinfo_by_number(val);
- if (type == TOKEN_ESCAPE) {
- if (escape_char != 0)
- return charset_table[escape_char];
- else {
- error("`\\e' used while no current escape character");
- return 0;
- }
- }
- if (required) {
- if (type == TOKEN_EOF || type == TOKEN_NEWLINE)
- warning(WARN_MISSING, "missing normal or special character");
- else
- error("normal or special character expected (got %1)", description());
- }
- return 0;
-}
-
-charinfo *get_optional_char()
-{
- while (tok.space())
- tok.next();
- charinfo *ci = tok.get_char();
- if (!ci)
- check_missing_character();
- else
- tok.next();
- return ci;
-}
-
-void check_missing_character()
-{
- if (!tok.newline() && !tok.eof() && !tok.right_brace() && !tok.tab())
- error("normal or special character expected (got %1): "
- "treated as missing",
- tok.description());
-}
-
-// this is for \Z
-
-int token::add_to_node_list(node **pp)
-{
- hunits w;
- int s;
- node *n = 0;
- switch (type) {
- case TOKEN_CHAR:
- *pp = (*pp)->add_char(charset_table[c], curenv, &w, &s);
- break;
- case TOKEN_DUMMY:
- n = new dummy_node;
- break;
- case TOKEN_ESCAPE:
- if (escape_char != 0)
- *pp = (*pp)->add_char(charset_table[escape_char], curenv, &w, &s);
- break;
- case TOKEN_HYPHEN_INDICATOR:
- *pp = (*pp)->add_discretionary_hyphen();
- break;
- case TOKEN_ITALIC_CORRECTION:
- *pp = (*pp)->add_italic_correction(&w);
- break;
- case TOKEN_LEFT_BRACE:
- break;
- case TOKEN_MARK_INPUT:
- set_number_reg(nm, curenv->get_input_line_position().to_units());
- break;
- case TOKEN_NODE:
- n = nd;
- nd = 0;
- break;
- case TOKEN_NUMBERED_CHAR:
- *pp = (*pp)->add_char(get_charinfo_by_number(val), curenv, &w, &s);
- break;
- case TOKEN_RIGHT_BRACE:
- break;
- case TOKEN_SPACE:
- n = new hmotion_node(curenv->get_space_width(),
- curenv->get_fill_color());
- break;
- case TOKEN_SPECIAL:
- *pp = (*pp)->add_char(get_charinfo(nm), curenv, &w, &s);
- break;
- case TOKEN_STRETCHABLE_SPACE:
- n = new unbreakable_space_node(curenv->get_space_width(),
- curenv->get_fill_color());
- break;
- case TOKEN_UNSTRETCHABLE_SPACE:
- n = new space_char_hmotion_node(curenv->get_space_width(),
- curenv->get_fill_color());
- break;
- case TOKEN_TRANSPARENT_DUMMY:
- n = new transparent_dummy_node;
- break;
- case TOKEN_ZERO_WIDTH_BREAK:
- n = new space_node(H0, curenv->get_fill_color());
- n->freeze_space();
- n->is_escape_colon();
- break;
- default:
- return 0;
- }
- if (n) {
- n->next = *pp;
- *pp = n;
- }
- return 1;
-}
-
-void token::process()
-{
- if (possibly_handle_first_page_transition())
- return;
- switch (type) {
- case TOKEN_BACKSPACE:
- curenv->add_node(new hmotion_node(-curenv->get_space_width(),
- curenv->get_fill_color()));
- break;
- case TOKEN_CHAR:
- curenv->add_char(charset_table[c]);
- break;
- case TOKEN_DUMMY:
- curenv->add_node(new dummy_node);
- break;
- case TOKEN_EMPTY:
- assert(0);
- break;
- case TOKEN_EOF:
- assert(0);
- break;
- case TOKEN_ESCAPE:
- if (escape_char != 0)
- curenv->add_char(charset_table[escape_char]);
- break;
- case TOKEN_BEGIN_TRAP:
- case TOKEN_END_TRAP:
- case TOKEN_PAGE_EJECTOR:
- // these are all handled in process_input_stack()
- break;
- case TOKEN_HYPHEN_INDICATOR:
- curenv->add_hyphen_indicator();
- break;
- case TOKEN_INTERRUPT:
- curenv->interrupt();
- break;
- case TOKEN_ITALIC_CORRECTION:
- curenv->add_italic_correction();
- break;
- case TOKEN_LEADER:
- curenv->handle_tab(1);
- break;
- case TOKEN_LEFT_BRACE:
- break;
- case TOKEN_MARK_INPUT:
- set_number_reg(nm, curenv->get_input_line_position().to_units());
- break;
- case TOKEN_NEWLINE:
- curenv->newline();
- break;
- case TOKEN_NODE:
- curenv->add_node(nd);
- nd = 0;
- break;
- case TOKEN_NUMBERED_CHAR:
- curenv->add_char(get_charinfo_by_number(val));
- break;
- case TOKEN_REQUEST:
- // handled in process_input_stack()
- break;
- case TOKEN_RIGHT_BRACE:
- break;
- case TOKEN_SPACE:
- curenv->space();
- break;
- case TOKEN_SPECIAL:
- curenv->add_char(get_charinfo(nm));
- break;
- case TOKEN_SPREAD:
- curenv->spread();
- break;
- case TOKEN_STRETCHABLE_SPACE:
- curenv->add_node(new unbreakable_space_node(curenv->get_space_width(),
- curenv->get_fill_color()));
- break;
- case TOKEN_UNSTRETCHABLE_SPACE:
- curenv->add_node(new space_char_hmotion_node(curenv->get_space_width(),
- curenv->get_fill_color()));
- break;
- case TOKEN_TAB:
- curenv->handle_tab(0);
- break;
- case TOKEN_TRANSPARENT:
- break;
- case TOKEN_TRANSPARENT_DUMMY:
- curenv->add_node(new transparent_dummy_node);
- break;
- case TOKEN_ZERO_WIDTH_BREAK:
- {
- node *tmp = new space_node(H0, curenv->get_fill_color());
- tmp->freeze_space();
- tmp->is_escape_colon();
- curenv->add_node(tmp);
- break;
- }
- default:
- assert(0);
- }
-}
-
-class nargs_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *nargs_reg::get_string()
-{
- return i_to_a(input_stack::nargs());
-}
-
-class lineno_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *lineno_reg::get_string()
-{
- int line;
- const char *file;
- if (!input_stack::get_location(0, &file, &line))
- line = 0;
- return i_to_a(line);
-}
-
-class writable_lineno_reg : public general_reg {
-public:
- writable_lineno_reg();
- void set_value(units);
- int get_value(units *);
-};
-
-writable_lineno_reg::writable_lineno_reg()
-{
-}
-
-int writable_lineno_reg::get_value(units *res)
-{
- int line;
- const char *file;
- if (!input_stack::get_location(0, &file, &line))
- return 0;
- *res = line;
- return 1;
-}
-
-void writable_lineno_reg::set_value(units n)
-{
- input_stack::set_location(0, n);
-}
-
-class filename_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *filename_reg::get_string()
-{
- int line;
- const char *file;
- if (input_stack::get_location(0, &file, &line))
- return file;
- else
- return 0;
-}
-
-class constant_reg : public reg {
- const char *s;
-public:
- constant_reg(const char *);
- const char *get_string();
-};
-
-constant_reg::constant_reg(const char *p) : s(p)
-{
-}
-
-const char *constant_reg::get_string()
-{
- return s;
-}
-
-constant_int_reg::constant_int_reg(int *q) : p(q)
-{
-}
-
-const char *constant_int_reg::get_string()
-{
- return i_to_a(*p);
-}
-
-void abort_request()
-{
- int c;
- if (tok.eof())
- c = EOF;
- else if (tok.newline())
- c = '\n';
- else {
- while ((c = get_copy(0)) == ' ')
- ;
- }
- if (c == EOF || c == '\n')
- fputs("User Abort.", stderr);
- else {
- for (; c != '\n' && c != EOF; c = get_copy(0))
- fputs(asciify(c), stderr);
- }
- fputc('\n', stderr);
- cleanup_and_exit(1);
-}
-
-char *read_string()
-{
- int len = 256;
- char *s = new char[len];
- int c;
- while ((c = get_copy(0)) == ' ')
- ;
- int i = 0;
- while (c != '\n' && c != EOF) {
- if (!invalid_input_char(c)) {
- if (i + 2 > len) {
- char *tem = s;
- s = new char[len*2];
- memcpy(s, tem, len);
- len *= 2;
- a_delete tem;
- }
- s[i++] = c;
- }
- c = get_copy(0);
- }
- s[i] = '\0';
- tok.next();
- if (i == 0) {
- a_delete s;
- return 0;
- }
- return s;
-}
-
-void pipe_output()
-{
- if (safer_flag) {
- error(".pi request not allowed in safer mode");
- skip_line();
- }
- else {
-#ifdef POPEN_MISSING
- error("pipes not available on this system");
- skip_line();
-#else /* not POPEN_MISSING */
- if (the_output) {
- error("can't pipe: output already started");
- skip_line();
- }
- else {
- char *pc;
- if ((pc = read_string()) == 0)
- error("can't pipe to empty command");
- if (pipe_command) {
- char *s = new char[strlen(pipe_command) + strlen(pc) + 1 + 1];
- strcpy(s, pipe_command);
- strcat(s, "|");
- strcat(s, pc);
- a_delete pipe_command;
- a_delete pc;
- pipe_command = s;
- }
- else
- pipe_command = pc;
- }
-#endif /* not POPEN_MISSING */
- }
-}
-
-static int system_status;
-
-void system_request()
-{
- if (safer_flag) {
- error(".sy request not allowed in safer mode");
- skip_line();
- }
- else {
- char *command = read_string();
- if (!command)
- error("empty command");
- else {
- system_status = system(command);
- a_delete command;
- }
- }
-}
-
-void copy_file()
-{
- if (curdiv == topdiv && topdiv->before_first_page) {
- handle_initial_request(COPY_FILE_REQUEST);
- return;
- }
- symbol filename = get_long_name(1);
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- if (!filename.is_null())
- curdiv->copy_file(filename.contents());
- tok.next();
-}
-
-#ifdef COLUMN
-
-void vjustify()
-{
- if (curdiv == topdiv && topdiv->before_first_page) {
- handle_initial_request(VJUSTIFY_REQUEST);
- return;
- }
- symbol type = get_long_name(1);
- if (!type.is_null())
- curdiv->vjustify(type);
- skip_line();
-}
-
-#endif /* COLUMN */
-
-void transparent_file()
-{
- if (curdiv == topdiv && topdiv->before_first_page) {
- handle_initial_request(TRANSPARENT_FILE_REQUEST);
- return;
- }
- symbol filename = get_long_name(1);
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- if (!filename.is_null()) {
- errno = 0;
- FILE *fp = include_search_path.open_file_cautious(filename.contents());
- if (!fp)
- error("can't open `%1': %2", filename.contents(), strerror(errno));
- else {
- int bol = 1;
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- if (invalid_input_char(c))
- warning(WARN_INPUT, "invalid input character code %1", int(c));
- else {
- curdiv->transparent_output(c);
- bol = c == '\n';
- }
- }
- if (!bol)
- curdiv->transparent_output('\n');
- fclose(fp);
- }
- }
- tok.next();
-}
-
-class page_range {
- int first;
- int last;
-public:
- page_range *next;
- page_range(int, int, page_range *);
- int contains(int n);
-};
-
-page_range::page_range(int i, int j, page_range *p)
-: first(i), last(j), next(p)
-{
-}
-
-int page_range::contains(int n)
-{
- return n >= first && (last <= 0 || n <= last);
-}
-
-page_range *output_page_list = 0;
-
-int in_output_page_list(int n)
-{
- if (!output_page_list)
- return 1;
- for (page_range *p = output_page_list; p; p = p->next)
- if (p->contains(n))
- return 1;
- return 0;
-}
-
-static void parse_output_page_list(char *p)
-{
- for (;;) {
- int i;
- if (*p == '-')
- i = 1;
- else if (csdigit(*p)) {
- i = 0;
- do
- i = i*10 + *p++ - '0';
- while (csdigit(*p));
- }
- else
- break;
- int j;
- if (*p == '-') {
- p++;
- j = 0;
- if (csdigit(*p)) {
- do
- j = j*10 + *p++ - '0';
- while (csdigit(*p));
- }
- }
- else
- j = i;
- if (j == 0)
- last_page_number = -1;
- else if (last_page_number >= 0 && j > last_page_number)
- last_page_number = j;
- output_page_list = new page_range(i, j, output_page_list);
- if (*p != ',')
- break;
- ++p;
- }
- if (*p != '\0') {
- error("bad output page list");
- output_page_list = 0;
- }
-}
-
-static FILE *open_mac_file(const char *mac, char **path)
-{
- // Try first FOOBAR.tmac, then tmac.FOOBAR
- char *s1 = new char[strlen(mac)+strlen(MACRO_POSTFIX)+1];
- strcpy(s1, mac);
- strcat(s1, MACRO_POSTFIX);
- FILE *fp = mac_path->open_file(s1, path);
- a_delete s1;
- if (!fp) {
- char *s2 = new char[strlen(mac)+strlen(MACRO_PREFIX)+1];
- strcpy(s2, MACRO_PREFIX);
- strcat(s2, mac);
- fp = mac_path->open_file(s2, path);
- a_delete s2;
- }
- return fp;
-}
-
-static void process_macro_file(const char *mac)
-{
- char *path;
- FILE *fp = open_mac_file(mac, &path);
- if (!fp)
- fatal("can't find macro file %1", mac);
- const char *s = symbol(path).contents();
- a_delete path;
- input_stack::push(new file_iterator(fp, s));
- tok.next();
- process_input_stack();
-}
-
-static void process_startup_file(const char *filename)
-{
- char *path;
- search_path *orig_mac_path = mac_path;
- mac_path = &config_macro_path;
- FILE *fp = mac_path->open_file(filename, &path);
- if (fp) {
- input_stack::push(new file_iterator(fp, symbol(path).contents()));
- a_delete path;
- tok.next();
- process_input_stack();
- }
- mac_path = orig_mac_path;
-}
-
-void macro_source()
-{
- symbol nm = get_long_name(1);
- if (nm.is_null())
- skip_line();
- else {
- while (!tok.newline() && !tok.eof())
- tok.next();
- char *path;
- FILE *fp = mac_path->open_file(nm.contents(), &path);
- // .mso doesn't (and cannot) go through open_mac_file, so we
- // need to do it here manually: If we have tmac.FOOBAR, try
- // FOOBAR.tmac and vice versa
- if (!fp) {
- const char *fn = nm.contents();
- if (strncasecmp(fn, MACRO_PREFIX, sizeof(MACRO_PREFIX) - 1) == 0) {
- char *s = new char[strlen(fn) + sizeof(MACRO_POSTFIX)];
- strcpy(s, fn + sizeof(MACRO_PREFIX) - 1);
- strcat(s, MACRO_POSTFIX);
- fp = mac_path->open_file(s, &path);
- a_delete s;
- }
- if (!fp) {
- if (strncasecmp(fn + strlen(fn) - sizeof(MACRO_POSTFIX) + 1,
- MACRO_POSTFIX, sizeof(MACRO_POSTFIX) - 1) == 0) {
- char *s = new char[strlen(fn) + sizeof(MACRO_PREFIX)];
- strcpy(s, MACRO_PREFIX);
- strncat(s, fn, strlen(fn) - sizeof(MACRO_POSTFIX) + 1);
- fp = mac_path->open_file(s, &path);
- a_delete s;
- }
- }
- }
- if (fp) {
- input_stack::push(new file_iterator(fp, symbol(path).contents()));
- a_delete path;
- }
- else
- error("can't find macro file `%1'", nm.contents());
- tok.next();
- }
-}
-
-static void process_input_file(const char *name)
-{
- FILE *fp;
- if (strcmp(name, "-") == 0) {
- clearerr(stdin);
- fp = stdin;
- }
- else {
- errno = 0;
- fp = include_search_path.open_file_cautious(name);
- if (!fp)
- fatal("can't open `%1': %2", name, strerror(errno));
- }
- input_stack::push(new file_iterator(fp, name));
- tok.next();
- process_input_stack();
-}
-
-// make sure the_input is empty before calling this
-
-static int evaluate_expression(const char *expr, units *res)
-{
- input_stack::push(make_temp_iterator(expr));
- tok.next();
- int success = get_number(res, 'u');
- while (input_stack::get(0) != EOF)
- ;
- return success;
-}
-
-static void do_register_assignment(const char *s)
-{
- const char *p = strchr(s, '=');
- if (!p) {
- char buf[2];
- buf[0] = s[0];
- buf[1] = 0;
- units n;
- if (evaluate_expression(s + 1, &n))
- set_number_reg(buf, n);
- }
- else {
- char *buf = new char[p - s + 1];
- memcpy(buf, s, p - s);
- buf[p - s] = 0;
- units n;
- if (evaluate_expression(p + 1, &n))
- set_number_reg(buf, n);
- a_delete buf;
- }
-}
-
-static void set_string(const char *name, const char *value)
-{
- macro *m = new macro;
- for (const char *p = value; *p; p++)
- if (!invalid_input_char((unsigned char)*p))
- m->append(*p);
- request_dictionary.define(name, m);
-}
-
-static void do_string_assignment(const char *s)
-{
- const char *p = strchr(s, '=');
- if (!p) {
- char buf[2];
- buf[0] = s[0];
- buf[1] = 0;
- set_string(buf, s + 1);
- }
- else {
- char *buf = new char[p - s + 1];
- memcpy(buf, s, p - s);
- buf[p - s] = 0;
- set_string(buf, p + 1);
- a_delete buf;
- }
-}
-
-struct string_list {
- const char *s;
- string_list *next;
- string_list(const char *ss) : s(ss), next(0) {}
-};
-
-#if 0
-static void prepend_string(const char *s, string_list **p)
-{
- string_list *l = new string_list(s);
- l->next = *p;
- *p = l;
-}
-#endif
-
-static void add_string(const char *s, string_list **p)
-{
- while (*p)
- p = &((*p)->next);
- *p = new string_list(s);
-}
-
-void usage(FILE *stream, const char *prog)
-{
- fprintf(stream,
-"usage: %s -abcivzCERU -wname -Wname -dcs -ffam -mname -nnum -olist\n"
-" -rcn -Tname -Fdir -Idir -Mdir [files...]\n",
- prog);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- string_list *macros = 0;
- string_list *register_assignments = 0;
- string_list *string_assignments = 0;
- int iflag = 0;
- int tflag = 0;
- int fflag = 0;
- int nflag = 0;
- int no_rc = 0; // don't process troffrc and troffrc-end
- int next_page_number = 0; // pacify compiler
- opterr = 0;
- hresolution = vresolution = 1;
- // restore $PATH if called from groff
- char* groff_path = getenv("GROFF_PATH__");
- if (groff_path) {
- string e = "PATH";
- e += '=';
- if (*groff_path)
- e += groff_path;
- e += '\0';
- if (putenv(strsave(e.contents())))
- fatal("putenv failed");
- }
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { 0, 0, 0, 0 }
- };
-#if defined(DEBUGGING)
-#define DEBUG_OPTION "D"
-#endif
- while ((c = getopt_long(argc, argv,
- "abciI:vw:W:zCEf:m:n:o:r:d:F:M:T:tqs:RU"
- DEBUG_OPTION, long_options, 0))
- != EOF)
- switch(c) {
- case 'v':
- {
- printf("GNU troff (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'I':
- // Search path for .psbb files
- // and most other non-system input files.
- include_search_path.command_line_dir(optarg);
- break;
- case 'T':
- device = optarg;
- tflag = 1;
- is_html = (strcmp(device, "html") == 0);
- break;
- case 'C':
- compatible_flag = 1;
- // fall through
- case 'c':
- color_flag = 0;
- break;
- case 'M':
- macro_path.command_line_dir(optarg);
- safer_macro_path.command_line_dir(optarg);
- config_macro_path.command_line_dir(optarg);
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'm':
- add_string(optarg, &macros);
- break;
- case 'E':
- inhibit_errors = 1;
- break;
- case 'R':
- no_rc = 1;
- break;
- case 'w':
- enable_warning(optarg);
- break;
- case 'W':
- disable_warning(optarg);
- break;
- case 'i':
- iflag = 1;
- break;
- case 'b':
- backtrace_flag = 1;
- break;
- case 'a':
- ascii_output_flag = 1;
- break;
- case 'z':
- suppress_output_flag = 1;
- break;
- case 'n':
- if (sscanf(optarg, "%d", &next_page_number) == 1)
- nflag++;
- else
- error("bad page number");
- break;
- case 'o':
- parse_output_page_list(optarg);
- break;
- case 'd':
- if (*optarg == '\0')
- error("`-d' requires non-empty argument");
- else
- add_string(optarg, &string_assignments);
- break;
- case 'r':
- if (*optarg == '\0')
- error("`-r' requires non-empty argument");
- else
- add_string(optarg, &register_assignments);
- break;
- case 'f':
- default_family = symbol(optarg);
- fflag = 1;
- break;
- case 'q':
- case 's':
- case 't':
- // silently ignore these
- break;
- case 'U':
- safer_flag = 0; // unsafe behaviour
- break;
-#if defined(DEBUGGING)
- case 'D':
- debug_state = 1;
- break;
-#endif
- case CHAR_MAX + 1: // --help
- usage(stdout, argv[0]);
- exit(0);
- break;
- case '?':
- usage(stderr, argv[0]);
- exit(1);
- break; // never reached
- default:
- assert(0);
- }
- if (!safer_flag)
- mac_path = &macro_path;
- set_string(".T", device);
- init_charset_table();
- init_hpf_code_table();
- if (!font::load_desc())
- fatal("sorry, I can't continue");
- units_per_inch = font::res;
- hresolution = font::hor;
- vresolution = font::vert;
- sizescale = font::sizescale;
- tcommand_flag = font::tcommand;
- warn_scale = (double)units_per_inch;
- warn_scaling_indicator = 'i';
- if (!fflag && font::family != 0 && *font::family != '\0')
- default_family = symbol(font::family);
- font_size::init_size_table(font::sizes);
- int i;
- int j = 1;
- if (font::style_table) {
- for (i = 0; font::style_table[i]; i++)
- mount_style(j++, symbol(font::style_table[i]));
- }
- for (i = 0; font::font_name_table[i]; i++, j++)
- // In the DESC file a font name of 0 (zero) means leave this
- // position empty.
- if (strcmp(font::font_name_table[i], "0") != 0)
- mount_font(j, symbol(font::font_name_table[i]));
- curdiv = topdiv = new top_level_diversion;
- if (nflag)
- topdiv->set_next_page_number(next_page_number);
- init_input_requests();
- init_env_requests();
- init_div_requests();
-#ifdef COLUMN
- init_column_requests();
-#endif /* COLUMN */
- init_node_requests();
- number_reg_dictionary.define(".T", new constant_reg(tflag ? "1" : "0"));
- init_registers();
- init_reg_requests();
- init_hyphen_requests();
- init_environments();
- while (string_assignments) {
- do_string_assignment(string_assignments->s);
- string_list *tem = string_assignments;
- string_assignments = string_assignments->next;
- delete tem;
- }
- while (register_assignments) {
- do_register_assignment(register_assignments->s);
- string_list *tem = register_assignments;
- register_assignments = register_assignments->next;
- delete tem;
- }
- if (!no_rc)
- process_startup_file(INITIAL_STARTUP_FILE);
- while (macros) {
- process_macro_file(macros->s);
- string_list *tem = macros;
- macros = macros->next;
- delete tem;
- }
- if (!no_rc)
- process_startup_file(FINAL_STARTUP_FILE);
- for (i = optind; i < argc; i++)
- process_input_file(argv[i]);
- if (optind >= argc || iflag)
- process_input_file("-");
- exit_troff();
- return 0; // not reached
-}
-
-void warn_request()
-{
- int n;
- if (has_arg() && get_integer(&n)) {
- if (n & ~WARN_TOTAL) {
- warning(WARN_RANGE, "warning mask must be between 0 and %1", WARN_TOTAL);
- n &= WARN_TOTAL;
- }
- warning_mask = n;
- }
- else
- warning_mask = WARN_TOTAL;
- skip_line();
-}
-
-static void init_registers()
-{
-#ifdef LONG_FOR_TIME_T
- long
-#else /* not LONG_FOR_TIME_T */
- time_t
-#endif /* not LONG_FOR_TIME_T */
- t = time(0);
- // Use struct here to work around misfeature in old versions of g++.
- struct tm *tt = localtime(&t);
- set_number_reg("seconds", int(tt->tm_sec));
- set_number_reg("minutes", int(tt->tm_min));
- set_number_reg("hours", int(tt->tm_hour));
- set_number_reg("dw", int(tt->tm_wday + 1));
- set_number_reg("dy", int(tt->tm_mday));
- set_number_reg("mo", int(tt->tm_mon + 1));
- set_number_reg("year", int(1900 + tt->tm_year));
- set_number_reg("yr", int(tt->tm_year));
- set_number_reg("$$", getpid());
- number_reg_dictionary.define(".A",
- new constant_reg(ascii_output_flag
- ? "1"
- : "0"));
-}
-
-/*
- * registers associated with \O
- */
-
-static int output_reg_minx_contents = -1;
-static int output_reg_miny_contents = -1;
-static int output_reg_maxx_contents = -1;
-static int output_reg_maxy_contents = -1;
-
-void check_output_limits(int x, int y)
-{
- if ((output_reg_minx_contents == -1) || (x < output_reg_minx_contents))
- output_reg_minx_contents = x;
- if (x > output_reg_maxx_contents)
- output_reg_maxx_contents = x;
- if ((output_reg_miny_contents == -1) || (y < output_reg_miny_contents))
- output_reg_miny_contents = y;
- if (y > output_reg_maxy_contents)
- output_reg_maxy_contents = y;
-}
-
-void reset_output_registers()
-{
- output_reg_minx_contents = -1;
- output_reg_miny_contents = -1;
- output_reg_maxx_contents = -1;
- output_reg_maxy_contents = -1;
-}
-
-void get_output_registers(int *minx, int *miny, int *maxx, int *maxy)
-{
- *minx = output_reg_minx_contents;
- *miny = output_reg_miny_contents;
- *maxx = output_reg_maxx_contents;
- *maxy = output_reg_maxy_contents;
-}
-
-void init_input_requests()
-{
- init_request("ab", abort_request);
- init_request("als", alias_macro);
- init_request("am", append_macro);
- init_request("am1", append_nocomp_macro);
- init_request("ami", append_indirect_macro);
- init_request("ami1", append_indirect_nocomp_macro);
- init_request("as", append_string);
- init_request("as1", append_nocomp_string);
- init_request("asciify", asciify_macro);
- init_request("backtrace", backtrace_request);
- init_request("blm", blank_line_macro);
- init_request("break", while_break_request);
- init_request("cf", copy_file);
- init_request("cflags", char_flags);
- init_request("char", define_character);
- init_request("chop", chop_macro);
- init_request("close", close_request);
- init_request("color", activate_color);
- init_request("composite", composite_request);
- init_request("continue", while_continue_request);
- init_request("cp", compatible);
- init_request("de", define_macro);
- init_request("de1", define_nocomp_macro);
- init_request("defcolor", define_color);
- init_request("dei", define_indirect_macro);
- init_request("dei1", define_indirect_nocomp_macro);
- init_request("do", do_request);
- init_request("ds", define_string);
- init_request("ds1", define_nocomp_string);
- init_request("ec", set_escape_char);
- init_request("ecr", restore_escape_char);
- init_request("ecs", save_escape_char);
- init_request("el", else_request);
- init_request("em", end_macro);
- init_request("eo", escape_off);
- init_request("ex", exit_request);
- init_request("fchar", define_fallback_character);
-#ifdef WIDOW_CONTROL
- init_request("fpl", flush_pending_lines);
-#endif /* WIDOW_CONTROL */
- init_request("hcode", hyphenation_code);
- init_request("hpfcode", hyphenation_patterns_file_code);
- init_request("ie", if_else_request);
- init_request("if", if_request);
- init_request("ig", ignore);
- init_request("length", length_request);
- init_request("lf", line_file);
- init_request("mso", macro_source);
- init_request("nop", nop_request);
- init_request("nroff", nroff_request);
- init_request("nx", next_file);
- init_request("open", open_request);
- init_request("opena", opena_request);
- init_request("output", output_request);
- init_request("pc", set_page_character);
- init_request("pi", pipe_output);
- init_request("pm", print_macros);
- init_request("psbb", ps_bbox_request);
-#ifndef POPEN_MISSING
- init_request("pso", pipe_source);
-#endif /* not POPEN_MISSING */
- init_request("rchar", remove_character);
- init_request("rd", read_request);
- init_request("return", return_macro_request);
- init_request("rm", remove_macro);
- init_request("rn", rename_macro);
- init_request("schar", define_special_character);
- init_request("shift", shift);
- init_request("so", source);
- init_request("spreadwarn", spreadwarn_request);
- init_request("substring", substring_request);
- init_request("sy", system_request);
- init_request("tag", tag);
- init_request("taga", taga);
- init_request("tm", terminal);
- init_request("tm1", terminal1);
- init_request("tmc", terminal_continue);
- init_request("tr", translate);
- init_request("trf", transparent_file);
- init_request("trin", translate_input);
- init_request("trnt", translate_no_transparent);
- init_request("troff", troff_request);
- init_request("unformat", unformat_macro);
-#ifdef COLUMN
- init_request("vj", vjustify);
-#endif /* COLUMN */
- init_request("warn", warn_request);
- init_request("warnscale", warnscale_request);
- init_request("while", while_request);
- init_request("write", write_request);
- init_request("writec", write_request_continue);
- init_request("writem", write_macro_request);
- number_reg_dictionary.define(".$", new nargs_reg);
- number_reg_dictionary.define(".C", new constant_int_reg(&compatible_flag));
- number_reg_dictionary.define(".c", new lineno_reg);
- number_reg_dictionary.define(".color", new constant_int_reg(&color_flag));
- number_reg_dictionary.define(".F", new filename_reg);
- number_reg_dictionary.define(".g", new constant_reg("1"));
- number_reg_dictionary.define(".H", new constant_int_reg(&hresolution));
- number_reg_dictionary.define(".R", new constant_reg("10000"));
- number_reg_dictionary.define(".U", new constant_int_reg(&safer_flag));
- number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
- number_reg_dictionary.define(".warn", new constant_int_reg(&warning_mask));
- extern const char *major_version;
- number_reg_dictionary.define(".x", new constant_reg(major_version));
- extern const char *revision;
- number_reg_dictionary.define(".Y", new constant_reg(revision));
- extern const char *minor_version;
- number_reg_dictionary.define(".y", new constant_reg(minor_version));
- number_reg_dictionary.define("c.", new writable_lineno_reg);
- number_reg_dictionary.define("llx", new variable_reg(&llx_reg_contents));
- number_reg_dictionary.define("lly", new variable_reg(&lly_reg_contents));
- number_reg_dictionary.define("opmaxx",
- new variable_reg(&output_reg_maxx_contents));
- number_reg_dictionary.define("opmaxy",
- new variable_reg(&output_reg_maxy_contents));
- number_reg_dictionary.define("opminx",
- new variable_reg(&output_reg_minx_contents));
- number_reg_dictionary.define("opminy",
- new variable_reg(&output_reg_miny_contents));
- number_reg_dictionary.define("slimit",
- new variable_reg(&input_stack::limit));
- number_reg_dictionary.define("systat", new variable_reg(&system_status));
- number_reg_dictionary.define("urx", new variable_reg(&urx_reg_contents));
- number_reg_dictionary.define("ury", new variable_reg(&ury_reg_contents));
-}
-
-object_dictionary request_dictionary(501);
-
-void init_request(const char *s, REQUEST_FUNCP f)
-{
- request_dictionary.define(s, new request(f));
-}
-
-static request_or_macro *lookup_request(symbol nm)
-{
- assert(!nm.is_null());
- request_or_macro *p = (request_or_macro *)request_dictionary.lookup(nm);
- if (p == 0) {
- warning(WARN_MAC, "macro `%1' not defined", nm.contents());
- p = new macro;
- request_dictionary.define(nm, p);
- }
- return p;
-}
-
-node *charinfo_to_node_list(charinfo *ci, const environment *envp)
-{
- // Don't interpret character definitions in compatible mode.
- int old_compatible_flag = compatible_flag;
- compatible_flag = 0;
- int old_escape_char = escape_char;
- escape_char = '\\';
- macro *mac = ci->set_macro(0);
- assert(mac != 0);
- environment *oldenv = curenv;
- environment env(envp);
- curenv = &env;
- curenv->set_composite();
- token old_tok = tok;
- input_stack::add_boundary();
- string_iterator *si =
- new string_iterator(*mac, "composite character", ci->nm);
- input_stack::push(si);
- // we don't use process_input_stack, because we don't want to recognise
- // requests
- for (;;) {
- tok.next();
- if (tok.eof())
- break;
- if (tok.newline()) {
- error("composite character mustn't contain newline");
- while (!tok.eof())
- tok.next();
- break;
- }
- else
- tok.process();
- }
- node *n = curenv->extract_output_line();
- input_stack::remove_boundary();
- ci->set_macro(mac);
- tok = old_tok;
- curenv = oldenv;
- compatible_flag = old_compatible_flag;
- escape_char = old_escape_char;
- have_input = 0;
- return n;
-}
-
-static node *read_draw_node()
-{
- token start;
- start.next();
- if (!start.delimiter(1)){
- do {
- tok.next();
- } while (tok != start && !tok.newline() && !tok.eof());
- }
- else {
- tok.next();
- if (tok == start)
- error("missing argument");
- else {
- unsigned char type = tok.ch();
- if (type == 'F') {
- read_color_draw_node(start);
- return 0;
- }
- tok.next();
- int maxpoints = 10;
- hvpair *point = new hvpair[maxpoints];
- int npoints = 0;
- int no_last_v = 0;
- int err = 0;
- int i;
- for (i = 0; tok != start; i++) {
- if (i == maxpoints) {
- hvpair *oldpoint = point;
- point = new hvpair[maxpoints*2];
- for (int j = 0; j < maxpoints; j++)
- point[j] = oldpoint[j];
- maxpoints *= 2;
- a_delete oldpoint;
- }
- if (!get_hunits(&point[i].h,
- type == 'f' || type == 't' ? 'u' : 'm')) {
- err = 1;
- break;
- }
- ++npoints;
- tok.skip();
- point[i].v = V0;
- if (tok == start) {
- no_last_v = 1;
- break;
- }
- if (!get_vunits(&point[i].v, 'v')) {
- err = 1;
- break;
- }
- tok.skip();
- }
- while (tok != start && !tok.newline() && !tok.eof())
- tok.next();
- if (!err) {
- switch (type) {
- case 'l':
- if (npoints != 1 || no_last_v) {
- error("two arguments needed for line");
- npoints = 1;
- }
- break;
- case 'c':
- if (npoints != 1 || !no_last_v) {
- error("one argument needed for circle");
- npoints = 1;
- point[0].v = V0;
- }
- break;
- case 'e':
- if (npoints != 1 || no_last_v) {
- error("two arguments needed for ellipse");
- npoints = 1;
- }
- break;
- case 'a':
- if (npoints != 2 || no_last_v) {
- error("four arguments needed for arc");
- npoints = 2;
- }
- break;
- case '~':
- if (no_last_v)
- error("even number of arguments needed for spline");
- break;
- case 'f':
- if (npoints != 1 || !no_last_v) {
- error("one argument needed for gray shade");
- npoints = 1;
- point[0].v = V0;
- }
- default:
- // silently pass it through
- break;
- }
- draw_node *dn = new draw_node(type, point, npoints,
- curenv->get_font_size(),
- curenv->get_glyph_color(),
- curenv->get_fill_color());
- a_delete point;
- return dn;
- }
- else {
- a_delete point;
- }
- }
- }
- return 0;
-}
-
-static void read_color_draw_node(token &start)
-{
- tok.next();
- if (tok == start) {
- error("missing color scheme");
- return;
- }
- unsigned char scheme = tok.ch();
- tok.next();
- color *col = 0;
- char end = start.ch();
- switch (scheme) {
- case 'c':
- col = read_cmy(end);
- break;
- case 'd':
- col = &default_color;
- break;
- case 'g':
- col = read_gray(end);
- break;
- case 'k':
- col = read_cmyk(end);
- break;
- case 'r':
- col = read_rgb(end);
- break;
- }
- if (col)
- curenv->set_fill_color(col);
- while (tok != start) {
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- input_stack::push(make_temp_iterator("\n"));
- break;
- }
- tok.next();
- }
- have_input = 1;
-}
-
-static struct {
- const char *name;
- int mask;
-} warning_table[] = {
- { "char", WARN_CHAR },
- { "range", WARN_RANGE },
- { "break", WARN_BREAK },
- { "delim", WARN_DELIM },
- { "el", WARN_EL },
- { "scale", WARN_SCALE },
- { "number", WARN_NUMBER },
- { "syntax", WARN_SYNTAX },
- { "tab", WARN_TAB },
- { "right-brace", WARN_RIGHT_BRACE },
- { "missing", WARN_MISSING },
- { "input", WARN_INPUT },
- { "escape", WARN_ESCAPE },
- { "space", WARN_SPACE },
- { "font", WARN_FONT },
- { "di", WARN_DI },
- { "mac", WARN_MAC },
- { "reg", WARN_REG },
- { "ig", WARN_IG },
- { "color", WARN_COLOR },
- { "all", WARN_TOTAL & ~(WARN_DI | WARN_MAC | WARN_REG) },
- { "w", WARN_TOTAL },
- { "default", DEFAULT_WARNING_MASK },
-};
-
-static int lookup_warning(const char *name)
-{
- for (unsigned int i = 0;
- i < sizeof(warning_table)/sizeof(warning_table[0]);
- i++)
- if (strcmp(name, warning_table[i].name) == 0)
- return warning_table[i].mask;
- return 0;
-}
-
-static void enable_warning(const char *name)
-{
- int mask = lookup_warning(name);
- if (mask)
- warning_mask |= mask;
- else
- error("unknown warning `%1'", name);
-}
-
-static void disable_warning(const char *name)
-{
- int mask = lookup_warning(name);
- if (mask)
- warning_mask &= ~mask;
- else
- error("unknown warning `%1'", name);
-}
-
-static void copy_mode_error(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- if (ignoring) {
- static const char prefix[] = "(in ignored input) ";
- char *s = new char[sizeof(prefix) + strlen(format)];
- strcpy(s, prefix);
- strcat(s, format);
- warning(WARN_IG, s, arg1, arg2, arg3);
- a_delete s;
- }
- else
- error(format, arg1, arg2, arg3);
-}
-
-enum error_type { WARNING, OUTPUT_WARNING, ERROR, FATAL };
-
-static void do_error(error_type type,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- const char *filename;
- int lineno;
- if (inhibit_errors && type < FATAL)
- return;
- if (backtrace_flag)
- input_stack::backtrace();
- if (!get_file_line(&filename, &lineno))
- filename = 0;
- if (filename)
- errprint("%1:%2: ", filename, lineno);
- else if (program_name)
- fprintf(stderr, "%s: ", program_name);
- switch (type) {
- case FATAL:
- fputs("fatal error: ", stderr);
- break;
- case ERROR:
- break;
- case WARNING:
- fputs("warning: ", stderr);
- break;
- case OUTPUT_WARNING:
- double fromtop = topdiv->get_vertical_position().to_units() / warn_scale;
- fprintf(stderr, "warning [p %d, %.1f%c",
- topdiv->get_page_number(), fromtop, warn_scaling_indicator);
- if (topdiv != curdiv) {
- double fromtop1 = curdiv->get_vertical_position().to_units()
- / warn_scale;
- fprintf(stderr, ", div `%s', %.1f%c",
- curdiv->get_diversion_name(), fromtop1, warn_scaling_indicator);
- }
- fprintf(stderr, "]: ");
- break;
- }
- errprint(format, arg1, arg2, arg3);
- fputc('\n', stderr);
- fflush(stderr);
- if (type == FATAL)
- cleanup_and_exit(1);
-}
-
-int warning(warning_type t,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- if ((t & warning_mask) != 0) {
- do_error(WARNING, format, arg1, arg2, arg3);
- return 1;
- }
- else
- return 0;
-}
-
-int output_warning(warning_type t,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- if ((t & warning_mask) != 0) {
- do_error(OUTPUT_WARNING, format, arg1, arg2, arg3);
- return 1;
- }
- else
- return 0;
-}
-
-void error(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error(ERROR, format, arg1, arg2, arg3);
-}
-
-void fatal(const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- do_error(FATAL, format, arg1, arg2, arg3);
-}
-
-void fatal_with_file_and_line(const char *filename, int lineno,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- fprintf(stderr, "%s:%d: fatal error: ", filename, lineno);
- errprint(format, arg1, arg2, arg3);
- fputc('\n', stderr);
- fflush(stderr);
- cleanup_and_exit(1);
-}
-
-void error_with_file_and_line(const char *filename, int lineno,
- const char *format,
- const errarg &arg1,
- const errarg &arg2,
- const errarg &arg3)
-{
- fprintf(stderr, "%s:%d: error: ", filename, lineno);
- errprint(format, arg1, arg2, arg3);
- fputc('\n', stderr);
- fflush(stderr);
-}
-
-dictionary charinfo_dictionary(501);
-
-charinfo *get_charinfo(symbol nm)
-{
- void *p = charinfo_dictionary.lookup(nm);
- if (p != 0)
- return (charinfo *)p;
- charinfo *cp = new charinfo(nm);
- (void)charinfo_dictionary.lookup(nm, cp);
- return cp;
-}
-
-int charinfo::next_index = 0;
-
-charinfo::charinfo(symbol s)
-: translation(0), mac(0), special_translation(TRANSLATE_NONE),
- hyphenation_code(0), flags(0), ascii_code(0), asciify_code(0),
- not_found(0), transparent_translate(1), translate_input(0),
- mode(CHAR_NORMAL), nm(s)
-{
- index = next_index++;
-}
-
-void charinfo::set_hyphenation_code(unsigned char c)
-{
- hyphenation_code = c;
-}
-
-void charinfo::set_translation(charinfo *ci, int tt, int ti)
-{
- translation = ci;
- if (ci && ti) {
- if (hyphenation_code != 0)
- ci->set_hyphenation_code(hyphenation_code);
- if (asciify_code != 0)
- ci->set_asciify_code(asciify_code);
- else if (ascii_code != 0)
- ci->set_asciify_code(ascii_code);
- ci->set_translation_input();
- }
- special_translation = TRANSLATE_NONE;
- transparent_translate = tt;
-}
-
-void charinfo::set_special_translation(int c, int tt)
-{
- special_translation = c;
- translation = 0;
- transparent_translate = tt;
-}
-
-void charinfo::set_ascii_code(unsigned char c)
-{
- ascii_code = c;
-}
-
-void charinfo::set_asciify_code(unsigned char c)
-{
- asciify_code = c;
-}
-
-macro *charinfo::set_macro(macro *m)
-{
- macro *tem = mac;
- mac = m;
- return tem;
-}
-
-macro *charinfo::setx_macro(macro *m, char_mode cm)
-{
- macro *tem = mac;
- mac = m;
- mode = cm;
- return tem;
-}
-
-void charinfo::set_number(int n)
-{
- number = n;
- flags |= NUMBERED;
-}
-
-int charinfo::get_number()
-{
- assert(flags & NUMBERED);
- return number;
-}
-
-symbol UNNAMED_SYMBOL("---");
-
-// For numbered characters not between 0 and 255, we make a symbol out
-// of the number and store them in this dictionary.
-
-dictionary numbered_charinfo_dictionary(11);
-
-charinfo *get_charinfo_by_number(int n)
-{
- static charinfo *number_table[256];
-
- if (n >= 0 && n < 256) {
- charinfo *ci = number_table[n];
- if (!ci) {
- ci = new charinfo(UNNAMED_SYMBOL);
- ci->set_number(n);
- number_table[n] = ci;
- }
- return ci;
- }
- else {
- symbol ns(i_to_a(n));
- charinfo *ci = (charinfo *)numbered_charinfo_dictionary.lookup(ns);
- if (!ci) {
- ci = new charinfo(UNNAMED_SYMBOL);
- ci->set_number(n);
- (void)numbered_charinfo_dictionary.lookup(ns, ci);
- }
- return ci;
- }
-}
-
-int font::name_to_index(const char *nm)
-{
- charinfo *ci;
- if (nm[1] == 0)
- ci = charset_table[nm[0] & 0xff];
- else if (nm[0] == '\\' && nm[2] == 0)
- ci = get_charinfo(symbol(nm + 1));
- else
- ci = get_charinfo(symbol(nm));
- if (ci == 0)
- return -1;
- else
- return ci->get_index();
-}
-
-int font::number_to_index(int n)
-{
- return get_charinfo_by_number(n)->get_index();
-}
diff --git a/contrib/groff/src/roff/troff/input.h b/contrib/groff/src/roff/troff/input.h
deleted file mode 100644
index ba6e2e13d15d..000000000000
--- a/contrib/groff/src/roff/troff/input.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2001, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-/* special character codes */
-
-#ifndef IS_EBCDIC_HOST
-
-const int ESCAPE_QUESTION = 015;
-const int BEGIN_TRAP = 016;
-const int END_TRAP = 017;
-const int PAGE_EJECTOR = 020;
-const int ESCAPE_NEWLINE = 021;
-const int ESCAPE_AMPERSAND = 022;
-const int ESCAPE_UNDERSCORE = 023;
-const int ESCAPE_BAR = 024;
-const int ESCAPE_CIRCUMFLEX = 025;
-const int ESCAPE_LEFT_BRACE = 026;
-const int ESCAPE_RIGHT_BRACE = 027;
-const int ESCAPE_LEFT_QUOTE = 030;
-const int ESCAPE_RIGHT_QUOTE = 031;
-const int ESCAPE_HYPHEN = 032;
-const int ESCAPE_BANG = 033;
-const int ESCAPE_c = 034;
-const int ESCAPE_e = 035;
-const int ESCAPE_PERCENT = 036;
-const int ESCAPE_SPACE = 037;
-
-const int TITLE_REQUEST = 0200;
-const int COPY_FILE_REQUEST = 0201;
-const int TRANSPARENT_FILE_REQUEST = 0202;
-#ifdef COLUMN
-const int VJUSTIFY_REQUEST = 0203;
-#endif /* COLUMN */
-const int ESCAPE_E = 0204;
-const int LAST_PAGE_EJECTOR = 0205;
-const int ESCAPE_RIGHT_PARENTHESIS = 0206;
-const int ESCAPE_TILDE = 0207;
-const int ESCAPE_COLON = 0210;
-const int PUSH_GROFF_MODE = 0211;
-const int PUSH_COMP_MODE = 0212;
-const int POP_GROFFCOMP_MODE = 0213;
-const int BEGIN_QUOTE = 0214;
-const int END_QUOTE = 0215;
-
-#else /* IS_EBCDIC_HOST */
-
-const int ESCAPE_QUESTION = 010;
-const int BEGIN_TRAP = 011;
-const int END_TRAP = 013;
-const int PAGE_EJECTOR = 015;
-const int ESCAPE_NEWLINE = 016;
-const int ESCAPE_AMPERSAND = 017;
-const int ESCAPE_UNDERSCORE = 020;
-const int ESCAPE_BAR = 021;
-const int ESCAPE_CIRCUMFLEX = 022;
-const int ESCAPE_LEFT_BRACE = 023;
-const int ESCAPE_RIGHT_BRACE = 024;
-const int ESCAPE_LEFT_QUOTE = 027;
-const int ESCAPE_RIGHT_QUOTE = 030;
-const int ESCAPE_HYPHEN = 031;
-const int ESCAPE_BANG = 032;
-const int ESCAPE_c = 033;
-const int ESCAPE_e = 034;
-const int ESCAPE_PERCENT = 035;
-const int ESCAPE_SPACE = 036;
-
-const int TITLE_REQUEST = 060;
-const int COPY_FILE_REQUEST = 061;
-const int TRANSPARENT_FILE_REQUEST = 062;
-#ifdef COLUMN
-const int VJUSTIFY_REQUEST = 063;
-#endif /* COLUMN */
-const int ESCAPE_E = 064;
-const int LAST_PAGE_EJECTOR = 065;
-const int ESCAPE_RIGHT_PARENTHESIS = 066;
-const int ESCAPE_TILDE = 067;
-const int ESCAPE_COLON = 070;
-const int PUSH_GROFF_MODE = 071;
-const int PUSH_COMP_MODE = 072;
-const int POP_GROFFCOMP_MODE = 073;
-const int BEGIN_QUOTE = 074;
-const int END_QUOTE = 075;
-
-#endif /* IS_EBCDIC_HOST */
-
-extern void do_glyph_color(symbol);
-extern void do_fill_color(symbol);
diff --git a/contrib/groff/src/roff/troff/mtsm.cpp b/contrib/groff/src/roff/troff/mtsm.cpp
deleted file mode 100644
index 4d415fd56c1e..000000000000
--- a/contrib/groff/src/roff/troff/mtsm.cpp
+++ /dev/null
@@ -1,637 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- Written by Gaius Mulley (gaius@glam.ac.uk)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define DEBUGGING
-
-extern int debug_state;
-
-#include "troff.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-
-static int no_of_statems = 0; // debugging aid
-
-int_value::int_value()
-: value(0), is_known(0)
-{
-}
-
-int_value::~int_value()
-{
-}
-
-void int_value::diff(FILE *fp, const char *s, int_value compare)
-{
- if (differs(compare)) {
- fputs("x X ", fp);
- fputs(s, fp);
- fputs(" ", fp);
- fputs(i_to_a(compare.value), fp);
- fputs("\n", fp);
- value = compare.value;
- is_known = 1;
- if (debug_state)
- fflush(fp);
- }
-}
-
-void int_value::set(int v)
-{
- is_known = 1;
- value = v;
-}
-
-void int_value::unset()
-{
- is_known = 0;
-}
-
-void int_value::set_if_unknown(int v)
-{
- if (!is_known)
- set(v);
-}
-
-int int_value::differs(int_value compare)
-{
- return compare.is_known
- && (!is_known || value != compare.value);
-}
-
-bool_value::bool_value()
-{
-}
-
-bool_value::~bool_value()
-{
-}
-
-void bool_value::diff(FILE *fp, const char *s, bool_value compare)
-{
- if (differs(compare)) {
- fputs("x X ", fp);
- fputs(s, fp);
- fputs("\n", fp);
- value = compare.value;
- is_known = 1;
- if (debug_state)
- fflush(fp);
- }
-}
-
-units_value::units_value()
-{
-}
-
-units_value::~units_value()
-{
-}
-
-void units_value::diff(FILE *fp, const char *s, units_value compare)
-{
- if (differs(compare)) {
- fputs("x X ", fp);
- fputs(s, fp);
- fputs(" ", fp);
- fputs(i_to_a(compare.value), fp);
- fputs("\n", fp);
- value = compare.value;
- is_known = 1;
- if (debug_state)
- fflush(fp);
- }
-}
-
-void units_value::set(hunits v)
-{
- is_known = 1;
- value = v.to_units();
-}
-
-int units_value::differs(units_value compare)
-{
- return compare.is_known
- && (!is_known || value != compare.value);
-}
-
-string_value::string_value()
-: value(string("")), is_known(0)
-{
-}
-
-string_value::~string_value()
-{
-}
-
-void string_value::diff(FILE *fp, const char *s, string_value compare)
-{
- if (differs(compare)) {
- fputs("x X ", fp);
- fputs(s, fp);
- fputs(" ", fp);
- fputs(compare.value.contents(), fp);
- fputs("\n", fp);
- value = compare.value;
- is_known = 1;
- }
-}
-
-void string_value::set(string v)
-{
- is_known = 1;
- value = v;
-}
-
-void string_value::unset()
-{
- is_known = 0;
-}
-
-int string_value::differs(string_value compare)
-{
- return compare.is_known
- && (!is_known || value != compare.value);
-}
-
-statem::statem()
-{
- issue_no = no_of_statems;
- no_of_statems++;
-}
-
-statem::statem(statem *copy)
-{
- int i;
- for (i = 0; i < LAST_BOOL; i++)
- bool_values[i] = copy->bool_values[i];
- for (i = 0; i < LAST_INT; i++)
- int_values[i] = copy->int_values[i];
- for (i = 0; i < LAST_UNITS; i++)
- units_values[i] = copy->units_values[i];
- for (i = 0; i < LAST_STRING; i++)
- string_values[i] = copy->string_values[i];
- issue_no = copy->issue_no;
-}
-
-statem::~statem()
-{
-}
-
-void statem::flush(FILE *fp, statem *compare)
-{
- int_values[MTSM_FI].diff(fp, "devtag:.fi",
- compare->int_values[MTSM_FI]);
- int_values[MTSM_RJ].diff(fp, "devtag:.rj",
- compare->int_values[MTSM_RJ]);
- int_values[MTSM_SP].diff(fp, "devtag:.sp",
- compare->int_values[MTSM_SP]);
- units_values[MTSM_IN].diff(fp, "devtag:.in",
- compare->units_values[MTSM_IN]);
- units_values[MTSM_LL].diff(fp, "devtag:.ll",
- compare->units_values[MTSM_LL]);
- units_values[MTSM_PO].diff(fp, "devtag:.po",
- compare->units_values[MTSM_PO]);
- string_values[MTSM_TA].diff(fp, "devtag:.ta",
- compare->string_values[MTSM_TA]);
- units_values[MTSM_TI].diff(fp, "devtag:.ti",
- compare->units_values[MTSM_TI]);
- int_values[MTSM_CE].diff(fp, "devtag:.ce",
- compare->int_values[MTSM_CE]);
- bool_values[MTSM_EOL].diff(fp, "devtag:.eol",
- compare->bool_values[MTSM_EOL]);
- bool_values[MTSM_BR].diff(fp, "devtag:.br",
- compare->bool_values[MTSM_BR]);
- if (debug_state) {
- fprintf(stderr, "compared state %d\n", compare->issue_no);
- fflush(stderr);
- }
-}
-
-void statem::add_tag(int_value_state t, int v)
-{
- int_values[t].set(v);
-}
-
-void statem::add_tag(units_value_state t, hunits v)
-{
- units_values[t].set(v);
-}
-
-void statem::add_tag(bool_value_state t)
-{
- bool_values[t].set(1);
-}
-
-void statem::add_tag(string_value_state t, string v)
-{
- string_values[t].set(v);
-}
-
-void statem::add_tag_if_unknown(int_value_state t, int v)
-{
- int_values[t].set_if_unknown(v);
-}
-
-void statem::sub_tag_ce()
-{
- int_values[MTSM_CE].unset();
-}
-
-/*
- * add_tag_ta - add the tab settings to the minimum troff state machine
- */
-
-void statem::add_tag_ta()
-{
- if (is_html) {
- string s = string("");
- hunits d, l;
- enum tab_type t;
- do {
- t = curenv->tabs.distance_to_next_tab(l, &d);
- l += d;
- switch (t) {
- case TAB_LEFT:
- s += " L ";
- s += as_string(l.to_units());
- break;
- case TAB_CENTER:
- s += " C ";
- s += as_string(l.to_units());
- break;
- case TAB_RIGHT:
- s += " R ";
- s += as_string(l.to_units());
- break;
- case TAB_NONE:
- break;
- }
- } while (t != TAB_NONE && l < curenv->get_line_length());
- s += '\0';
- string_values[MTSM_TA].set(s);
- }
-}
-
-void statem::update(statem *older, statem *newer, int_value_state t)
-{
- if (newer->int_values[t].differs(older->int_values[t])
- && !newer->int_values[t].is_known)
- newer->int_values[t].set(older->int_values[t].value);
-}
-
-void statem::update(statem *older, statem *newer, units_value_state t)
-{
- if (newer->units_values[t].differs(older->units_values[t])
- && !newer->units_values[t].is_known)
- newer->units_values[t].set(older->units_values[t].value);
-}
-
-void statem::update(statem *older, statem *newer, bool_value_state t)
-{
- if (newer->bool_values[t].differs(older->bool_values[t])
- && !newer->bool_values[t].is_known)
- newer->bool_values[t].set(older->bool_values[t].value);
-}
-
-void statem::update(statem *older, statem *newer, string_value_state t)
-{
- if (newer->string_values[t].differs(older->string_values[t])
- && !newer->string_values[t].is_known)
- newer->string_values[t].set(older->string_values[t].value);
-}
-
-void statem::merge(statem *newer, statem *older)
-{
- if (newer == 0 || older == 0)
- return;
- update(older, newer, MTSM_EOL);
- update(older, newer, MTSM_BR);
- update(older, newer, MTSM_FI);
- update(older, newer, MTSM_LL);
- update(older, newer, MTSM_PO);
- update(older, newer, MTSM_RJ);
- update(older, newer, MTSM_SP);
- update(older, newer, MTSM_TA);
- update(older, newer, MTSM_TI);
- update(older, newer, MTSM_CE);
-}
-
-stack::stack()
-: next(0), state(0)
-{
-}
-
-stack::stack(statem *s, stack *n)
-: next(n), state(s)
-{
-}
-
-stack::~stack()
-{
- if (state)
- delete state;
- if (next)
- delete next;
-}
-
-mtsm::mtsm()
-: sp(0)
-{
- driver = new statem();
-}
-
-mtsm::~mtsm()
-{
- delete driver;
- if (sp)
- delete sp;
-}
-
-/*
- * push_state - push the current troff state and use `n' as
- * the new troff state.
- */
-
-void mtsm::push_state(statem *n)
-{
- if (is_html) {
-#if defined(DEBUGGING)
- if (debug_state)
- fprintf(stderr, "--> state %d pushed\n", n->issue_no) ; fflush(stderr);
-#endif
- sp = new stack(n, sp);
- }
-}
-
-void mtsm::pop_state()
-{
- if (is_html) {
-#if defined(DEBUGGING)
- if (debug_state)
- fprintf(stderr, "--> state popped\n") ; fflush(stderr);
-#endif
- if (sp == 0)
- fatal("empty state machine stack");
- if (sp->state)
- delete sp->state;
- sp->state = 0;
- stack *t = sp;
- sp = sp->next;
- t->next = 0;
- delete t;
- }
-}
-
-/*
- * inherit - scan the stack and collects inherited values.
- */
-
-void mtsm::inherit(statem *s, int reset_bool)
-{
- if (sp && sp->state) {
- if (s->units_values[MTSM_IN].is_known
- && sp->state->units_values[MTSM_IN].is_known)
- s->units_values[MTSM_IN].value += sp->state->units_values[MTSM_IN].value;
- s->update(sp->state, s, MTSM_FI);
- s->update(sp->state, s, MTSM_LL);
- s->update(sp->state, s, MTSM_PO);
- s->update(sp->state, s, MTSM_RJ);
- s->update(sp->state, s, MTSM_TA);
- s->update(sp->state, s, MTSM_TI);
- s->update(sp->state, s, MTSM_CE);
- if (sp->state->bool_values[MTSM_BR].is_known
- && sp->state->bool_values[MTSM_BR].value) {
- if (reset_bool)
- sp->state->bool_values[MTSM_BR].set(0);
- s->bool_values[MTSM_BR].set(1);
- if (debug_state)
- fprintf(stderr, "inherited br from pushed state %d\n",
- sp->state->issue_no);
- }
- else if (s->bool_values[MTSM_BR].is_known
- && s->bool_values[MTSM_BR].value)
- if (! s->int_values[MTSM_CE].is_known)
- s->bool_values[MTSM_BR].unset();
- if (sp->state->bool_values[MTSM_EOL].is_known
- && sp->state->bool_values[MTSM_EOL].value) {
- if (reset_bool)
- sp->state->bool_values[MTSM_EOL].set(0);
- s->bool_values[MTSM_EOL].set(1);
- }
- }
-}
-
-void mtsm::flush(FILE *fp, statem *s, string tag_list)
-{
- if (is_html && s) {
- inherit(s, 1);
- driver->flush(fp, s);
- // Set rj, ce, ti to unknown if they were known and
- // we have seen an eol or br. This ensures that these values
- // are emitted during the next glyph (as they step from n..0
- // at each newline).
- if ((driver->bool_values[MTSM_EOL].is_known
- && driver->bool_values[MTSM_EOL].value)
- || (driver->bool_values[MTSM_BR].is_known
- && driver->bool_values[MTSM_BR].value)) {
- if (driver->units_values[MTSM_TI].is_known)
- driver->units_values[MTSM_TI].is_known = 0;
- if (driver->int_values[MTSM_RJ].is_known
- && driver->int_values[MTSM_RJ].value > 0)
- driver->int_values[MTSM_RJ].is_known = 0;
- if (driver->int_values[MTSM_CE].is_known
- && driver->int_values[MTSM_CE].value > 0)
- driver->int_values[MTSM_CE].is_known = 0;
- }
- // reset the boolean values
- driver->bool_values[MTSM_BR].set(0);
- driver->bool_values[MTSM_EOL].set(0);
- // reset space value
- driver->int_values[MTSM_SP].set(0);
- // lastly write out any direct tag entries
- if (tag_list != string("")) {
- string t = tag_list + '\0';
- fputs(t.contents(), fp);
- }
- }
-}
-
-/*
- * display_state - dump out a synopsis of the state to stderr.
- */
-
-void statem::display_state()
-{
- fprintf(stderr, " <state ");
- if (bool_values[MTSM_BR].is_known) {
- if (bool_values[MTSM_BR].value)
- fprintf(stderr, "[br]");
- else
- fprintf(stderr, "[!br]");
- }
- if (bool_values[MTSM_EOL].is_known) {
- if (bool_values[MTSM_EOL].value)
- fprintf(stderr, "[eol]");
- else
- fprintf(stderr, "[!eol]");
- }
- if (int_values[MTSM_SP].is_known) {
- if (int_values[MTSM_SP].value)
- fprintf(stderr, "[sp %d]", int_values[MTSM_SP].value);
- else
- fprintf(stderr, "[!sp]");
- }
- fprintf(stderr, ">");
- fflush(stderr);
-}
-
-int mtsm::has_changed(int_value_state t, statem *s)
-{
- return driver->int_values[t].differs(s->int_values[t]);
-}
-
-int mtsm::has_changed(units_value_state t, statem *s)
-{
- return driver->units_values[t].differs(s->units_values[t]);
-}
-
-int mtsm::has_changed(bool_value_state t, statem *s)
-{
- return driver->bool_values[t].differs(s->bool_values[t]);
-}
-
-int mtsm::has_changed(string_value_state t, statem *s)
-{
- return driver->string_values[t].differs(s->string_values[t]);
-}
-
-int mtsm::changed(statem *s)
-{
- if (s == 0 || !is_html)
- return 0;
- s = new statem(s);
- inherit(s, 0);
- int result = has_changed(MTSM_EOL, s)
- || has_changed(MTSM_BR, s)
- || has_changed(MTSM_FI, s)
- || has_changed(MTSM_IN, s)
- || has_changed(MTSM_LL, s)
- || has_changed(MTSM_PO, s)
- || has_changed(MTSM_RJ, s)
- || has_changed(MTSM_SP, s)
- || has_changed(MTSM_TA, s)
- || has_changed(MTSM_CE, s);
- delete s;
- return result;
-}
-
-void mtsm::add_tag(FILE *fp, string s)
-{
- fflush(fp);
- s += '\0';
- fputs(s.contents(), fp);
-}
-
-/*
- * state_set class
- */
-
-state_set::state_set()
-: boolset(0), intset(0), unitsset(0), stringset(0)
-{
-}
-
-state_set::~state_set()
-{
-}
-
-void state_set::incl(bool_value_state b)
-{
- boolset |= 1 << (int)b;
-}
-
-void state_set::incl(int_value_state i)
-{
- intset |= 1 << (int)i;
-}
-
-void state_set::incl(units_value_state u)
-{
- unitsset |= 1 << (int)u;
-}
-
-void state_set::incl(string_value_state s)
-{
- stringset |= 1 << (int)s;
-}
-
-void state_set::excl(bool_value_state b)
-{
- boolset &= ~(1 << (int)b);
-}
-
-void state_set::excl(int_value_state i)
-{
- intset &= ~(1 << (int)i);
-}
-
-void state_set::excl(units_value_state u)
-{
- unitsset &= ~(1 << (int)u);
-}
-
-void state_set::excl(string_value_state s)
-{
- stringset &= ~(1 << (int)s);
-}
-
-int state_set::is_in(bool_value_state b)
-{
- return (boolset & (1 << (int)b)) != 0;
-}
-
-int state_set::is_in(int_value_state i)
-{
- return (intset & (1 << (int)i)) != 0;
-}
-
-// Note: this used to have a bug s.t. it always tested for bit 0 (benl 18/5/11)
-int state_set::is_in(units_value_state u)
-{
- return (unitsset & (1 << (int)u)) != 0;
-}
-
-// Note: this used to have a bug s.t. it always tested for bit 0 (benl 18/5/11)
-int state_set::is_in(string_value_state s)
-{
- return (stringset & (1 << (int)s)) != 0;
-}
-
-void state_set::add(units_value_state, int n)
-{
- unitsset += n;
-}
-
-units state_set::val(units_value_state)
-{
- return unitsset;
-}
diff --git a/contrib/groff/src/roff/troff/mtsm.h b/contrib/groff/src/roff/troff/mtsm.h
deleted file mode 100644
index 9ef909c39bce..000000000000
--- a/contrib/groff/src/roff/troff/mtsm.h
+++ /dev/null
@@ -1,164 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- *
- * mtsm.h
- *
- * written by Gaius Mulley (gaius@glam.ac.uk)
- *
- * provides a minimal troff state machine which is necessary to
- * emit meta tags for the post-grohtml device driver.
- */
-
-/*
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct int_value {
- int value;
- int is_known;
- int_value();
- ~int_value();
- void diff(FILE *, const char *, int_value);
- int differs(int_value);
- void set(int);
- void unset();
- void set_if_unknown(int);
-};
-
-struct bool_value : public int_value {
- bool_value();
- ~bool_value();
- void diff(FILE *, const char *, bool_value);
-};
-
-struct units_value : public int_value {
- units_value();
- ~units_value();
- void diff(FILE *, const char *, units_value);
- int differs(units_value);
- void set(hunits);
-};
-
-struct string_value {
- string value;
- int is_known;
- string_value();
- ~string_value();
- void diff(FILE *, const char *, string_value);
- int differs(string_value);
- void set(string);
- void unset();
-};
-
-enum bool_value_state {
- MTSM_EOL,
- MTSM_BR,
- LAST_BOOL
-};
-enum int_value_state {
- MTSM_FI,
- MTSM_RJ,
- MTSM_CE,
- MTSM_SP,
- LAST_INT
-};
-enum units_value_state {
- MTSM_IN,
- MTSM_LL,
- MTSM_PO,
- MTSM_TI,
- LAST_UNITS
-};
-enum string_value_state {
- MTSM_TA,
- LAST_STRING
-};
-
-struct statem {
- int issue_no;
- bool_value bool_values[LAST_BOOL];
- int_value int_values[LAST_INT];
- units_value units_values[LAST_UNITS];
- string_value string_values[LAST_STRING];
- statem();
- statem(statem *);
- ~statem();
- void flush(FILE *, statem *);
- int changed(statem *);
- void merge(statem *, statem *);
- void add_tag(int_value_state, int);
- void add_tag(bool_value_state);
- void add_tag(units_value_state, hunits);
- void add_tag(string_value_state, string);
- void sub_tag_ce();
- void add_tag_if_unknown(int_value_state, int);
- void add_tag_ta();
- void display_state();
- void update(statem *, statem *, int_value_state);
- void update(statem *, statem *, bool_value_state);
- void update(statem *, statem *, units_value_state);
- void update(statem *, statem *, string_value_state);
-};
-
-struct stack {
- stack *next;
- statem *state;
- stack();
- stack(statem *, stack *);
- ~stack();
-};
-
-class mtsm {
- statem *driver;
- stack *sp;
- int has_changed(int_value_state, statem *);
- int has_changed(bool_value_state, statem *);
- int has_changed(units_value_state, statem *);
- int has_changed(string_value_state, statem *);
- void inherit(statem *, int);
-public:
- mtsm();
- ~mtsm();
- void push_state(statem *);
- void pop_state();
- void flush(FILE *, statem *, string);
- int changed(statem *);
- void add_tag(FILE *, string);
-};
-
-class state_set {
- int boolset;
- int intset;
- int unitsset;
- int stringset;
-public:
- state_set();
- ~state_set();
- void incl(bool_value_state);
- void incl(int_value_state);
- void incl(units_value_state);
- void incl(string_value_state);
- void excl(bool_value_state);
- void excl(int_value_state);
- void excl(units_value_state);
- void excl(string_value_state);
- int is_in(bool_value_state);
- int is_in(int_value_state);
- int is_in(units_value_state);
- int is_in(string_value_state);
- void add(units_value_state, int);
- units val(units_value_state);
-};
diff --git a/contrib/groff/src/roff/troff/node.cpp b/contrib/groff/src/roff/troff/node.cpp
deleted file mode 100644
index 7ff5c858d4f5..000000000000
--- a/contrib/groff/src/roff/troff/node.cpp
+++ /dev/null
@@ -1,6482 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-extern int debug_state;
-
-#include "troff.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "dictionary.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "token.h"
-#include "div.h"
-#include "reg.h"
-#include "charinfo.h"
-#include "font.h"
-#include "input.h"
-#include "geometry.h"
-
-#include "nonposix.h"
-
-#ifdef _POSIX_VERSION
-
-#include <sys/wait.h>
-
-#else /* not _POSIX_VERSION */
-
-/* traditional Unix */
-
-#define WIFEXITED(s) (((s) & 0377) == 0)
-#define WEXITSTATUS(s) (((s) >> 8) & 0377)
-#define WTERMSIG(s) ((s) & 0177)
-#define WIFSTOPPED(s) (((s) & 0377) == 0177)
-#define WSTOPSIG(s) (((s) >> 8) & 0377)
-#define WIFSIGNALED(s) (((s) & 0377) != 0 && (((s) & 0377) != 0177))
-
-#endif /* not _POSIX_VERSION */
-
-// declarations to avoid friend name injections
-class tfont;
-class tfont_spec;
-tfont *make_tfont(tfont_spec &);
-
-
-/*
- * how many boundaries of images have been written? Useful for
- * debugging grohtml
- */
-
-int image_no = 0;
-static int suppress_start_page = 0;
-
-#define STORE_WIDTH 1
-
-symbol HYPHEN_SYMBOL("hy");
-
-// Character used when a hyphen is inserted at a line break.
-static charinfo *soft_hyphen_char;
-
-enum constant_space_type {
- CONSTANT_SPACE_NONE,
- CONSTANT_SPACE_RELATIVE,
- CONSTANT_SPACE_ABSOLUTE
- };
-
-struct special_font_list {
- int n;
- special_font_list *next;
-};
-
-special_font_list *global_special_fonts;
-static int global_ligature_mode = 1;
-static int global_kern_mode = 1;
-
-class track_kerning_function {
- int non_zero;
- units min_size;
- hunits min_amount;
- units max_size;
- hunits max_amount;
-public:
- track_kerning_function();
- track_kerning_function(units, hunits, units, hunits);
- int operator==(const track_kerning_function &);
- int operator!=(const track_kerning_function &);
- hunits compute(int point_size);
-};
-
-// embolden fontno when this is the current font
-
-struct conditional_bold {
- conditional_bold *next;
- int fontno;
- hunits offset;
- conditional_bold(int, hunits, conditional_bold * = 0);
-};
-
-class font_info {
- tfont *last_tfont;
- int number;
- font_size last_size;
- int last_height;
- int last_slant;
- symbol internal_name;
- symbol external_name;
- font *fm;
- char is_bold;
- hunits bold_offset;
- track_kerning_function track_kern;
- constant_space_type is_constant_spaced;
- units constant_space;
- int last_ligature_mode;
- int last_kern_mode;
- conditional_bold *cond_bold_list;
- void flush();
-public:
- special_font_list *sf;
- font_info(symbol, int, symbol, font *);
- int contains(charinfo *);
- void set_bold(hunits);
- void unbold();
- void set_conditional_bold(int, hunits);
- void conditional_unbold(int);
- void set_track_kern(track_kerning_function &);
- void set_constant_space(constant_space_type, units = 0);
- int is_named(symbol);
- symbol get_name();
- tfont *get_tfont(font_size, int, int, int);
- hunits get_space_width(font_size, int);
- hunits get_narrow_space_width(font_size);
- hunits get_half_narrow_space_width(font_size);
- int get_bold(hunits *);
- int is_special();
- int is_style();
- friend symbol get_font_name(int, environment *);
- friend symbol get_style_name(int);
-};
-
-class tfont_spec {
-protected:
- symbol name;
- int input_position;
- font *fm;
- font_size size;
- char is_bold;
- char is_constant_spaced;
- int ligature_mode;
- int kern_mode;
- hunits bold_offset;
- hunits track_kern; // add this to the width
- hunits constant_space_width;
- int height;
- int slant;
-public:
- tfont_spec(symbol, int, font *, font_size, int, int);
- tfont_spec(const tfont_spec &spec) { *this = spec; }
- tfont_spec plain();
- int operator==(const tfont_spec &);
- friend tfont *font_info::get_tfont(font_size fs, int, int, int);
-};
-
-class tfont : public tfont_spec {
- static tfont *tfont_list;
- tfont *next;
- tfont *plain_version;
-public:
- tfont(tfont_spec &);
- int contains(charinfo *);
- hunits get_width(charinfo *c);
- int get_bold(hunits *);
- int get_constant_space(hunits *);
- hunits get_track_kern();
- tfont *get_plain();
- font_size get_size();
- symbol get_name();
- charinfo *get_lig(charinfo *c1, charinfo *c2);
- int get_kern(charinfo *c1, charinfo *c2, hunits *res);
- int get_input_position();
- int get_character_type(charinfo *);
- int get_height();
- int get_slant();
- vunits get_char_height(charinfo *);
- vunits get_char_depth(charinfo *);
- hunits get_char_skew(charinfo *);
- hunits get_italic_correction(charinfo *);
- hunits get_left_italic_correction(charinfo *);
- hunits get_subscript_correction(charinfo *);
- friend tfont *make_tfont(tfont_spec &);
-};
-
-inline int env_definite_font(environment *env)
-{
- return env->get_family()->make_definite(env->get_font());
-}
-
-/* font_info functions */
-
-static font_info **font_table = 0;
-static int font_table_size = 0;
-
-font_info::font_info(symbol nm, int n, symbol enm, font *f)
-: last_tfont(0), number(n), last_size(0),
- internal_name(nm), external_name(enm), fm(f),
- is_bold(0), is_constant_spaced(CONSTANT_SPACE_NONE), last_ligature_mode(1),
- last_kern_mode(1), cond_bold_list(0), sf(0)
-{
-}
-
-inline int font_info::contains(charinfo *ci)
-{
- return fm != 0 && fm->contains(ci->get_index());
-}
-
-inline int font_info::is_special()
-{
- return fm != 0 && fm->is_special();
-}
-
-inline int font_info::is_style()
-{
- return fm == 0;
-}
-
-tfont *make_tfont(tfont_spec &spec)
-{
- for (tfont *p = tfont::tfont_list; p; p = p->next)
- if (*p == spec)
- return p;
- return new tfont(spec);
-}
-
-// this is the current_font, fontno is where we found the character,
-// presumably a special font
-
-tfont *font_info::get_tfont(font_size fs, int height, int slant, int fontno)
-{
- if (last_tfont == 0 || fs != last_size
- || height != last_height || slant != last_slant
- || global_ligature_mode != last_ligature_mode
- || global_kern_mode != last_kern_mode
- || fontno != number) {
- font_info *f = font_table[fontno];
- tfont_spec spec(f->external_name, f->number, f->fm, fs, height, slant);
- for (conditional_bold *p = cond_bold_list; p; p = p->next)
- if (p->fontno == fontno) {
- spec.is_bold = 1;
- spec.bold_offset = p->offset;
- break;
- }
- if (!spec.is_bold && is_bold) {
- spec.is_bold = 1;
- spec.bold_offset = bold_offset;
- }
- spec.track_kern = track_kern.compute(fs.to_scaled_points());
- spec.ligature_mode = global_ligature_mode;
- spec.kern_mode = global_kern_mode;
- switch (is_constant_spaced) {
- case CONSTANT_SPACE_NONE:
- break;
- case CONSTANT_SPACE_ABSOLUTE:
- spec.is_constant_spaced = 1;
- spec.constant_space_width = constant_space;
- break;
- case CONSTANT_SPACE_RELATIVE:
- spec.is_constant_spaced = 1;
- spec.constant_space_width
- = scale(constant_space*fs.to_scaled_points(),
- units_per_inch,
- 36*72*sizescale);
- break;
- default:
- assert(0);
- }
- if (fontno != number)
- return make_tfont(spec);
- last_tfont = make_tfont(spec);
- last_size = fs;
- last_height = height;
- last_slant = slant;
- last_ligature_mode = global_ligature_mode;
- last_kern_mode = global_kern_mode;
- }
- return last_tfont;
-}
-
-int font_info::get_bold(hunits *res)
-{
- if (is_bold) {
- *res = bold_offset;
- return 1;
- }
- else
- return 0;
-}
-
-void font_info::unbold()
-{
- if (is_bold) {
- is_bold = 0;
- flush();
- }
-}
-
-void font_info::set_bold(hunits offset)
-{
- if (!is_bold || offset != bold_offset) {
- is_bold = 1;
- bold_offset = offset;
- flush();
- }
-}
-
-void font_info::set_conditional_bold(int fontno, hunits offset)
-{
- for (conditional_bold *p = cond_bold_list; p; p = p->next)
- if (p->fontno == fontno) {
- if (offset != p->offset) {
- p->offset = offset;
- flush();
- }
- return;
- }
- cond_bold_list = new conditional_bold(fontno, offset, cond_bold_list);
-}
-
-conditional_bold::conditional_bold(int f, hunits h, conditional_bold *x)
-: next(x), fontno(f), offset(h)
-{
-}
-
-void font_info::conditional_unbold(int fontno)
-{
- for (conditional_bold **p = &cond_bold_list; *p; p = &(*p)->next)
- if ((*p)->fontno == fontno) {
- conditional_bold *tem = *p;
- *p = (*p)->next;
- delete tem;
- flush();
- return;
- }
-}
-
-void font_info::set_constant_space(constant_space_type type, units x)
-{
- if (type != is_constant_spaced
- || (type != CONSTANT_SPACE_NONE && x != constant_space)) {
- flush();
- is_constant_spaced = type;
- constant_space = x;
- }
-}
-
-void font_info::set_track_kern(track_kerning_function &tk)
-{
- if (track_kern != tk) {
- track_kern = tk;
- flush();
- }
-}
-
-void font_info::flush()
-{
- last_tfont = 0;
-}
-
-int font_info::is_named(symbol s)
-{
- return internal_name == s;
-}
-
-symbol font_info::get_name()
-{
- return internal_name;
-}
-
-symbol get_font_name(int fontno, environment *env)
-{
- symbol f = font_table[fontno]->get_name();
- if (font_table[fontno]->is_style()) {
- return concat(env->get_family()->nm, f);
- }
- return f;
-}
-
-symbol get_style_name(int fontno)
-{
- if (font_table[fontno]->is_style())
- return font_table[fontno]->get_name();
- else
- return EMPTY_SYMBOL;
-}
-
-hunits font_info::get_space_width(font_size fs, int space_sz)
-{
- if (is_constant_spaced == CONSTANT_SPACE_NONE)
- return scale(hunits(fm->get_space_width(fs.to_scaled_points())),
- space_sz, 12);
- else if (is_constant_spaced == CONSTANT_SPACE_ABSOLUTE)
- return constant_space;
- else
- return scale(constant_space*fs.to_scaled_points(),
- units_per_inch, 36*72*sizescale);
-}
-
-hunits font_info::get_narrow_space_width(font_size fs)
-{
- charinfo *ci = get_charinfo(symbol("|"));
- if (fm->contains(ci->get_index()))
- return hunits(fm->get_width(ci->get_index(), fs.to_scaled_points()));
- else
- return hunits(fs.to_units()/6);
-}
-
-hunits font_info::get_half_narrow_space_width(font_size fs)
-{
- charinfo *ci = get_charinfo(symbol("^"));
- if (fm->contains(ci->get_index()))
- return hunits(fm->get_width(ci->get_index(), fs.to_scaled_points()));
- else
- return hunits(fs.to_units()/12);
-}
-
-/* tfont */
-
-tfont_spec::tfont_spec(symbol nm, int n, font *f,
- font_size s, int h, int sl)
-: name(nm), input_position(n), fm(f), size(s),
- is_bold(0), is_constant_spaced(0), ligature_mode(1), kern_mode(1),
- height(h), slant(sl)
-{
- if (height == size.to_scaled_points())
- height = 0;
-}
-
-int tfont_spec::operator==(const tfont_spec &spec)
-{
- if (fm == spec.fm
- && size == spec.size
- && input_position == spec.input_position
- && name == spec.name
- && height == spec.height
- && slant == spec.slant
- && (is_bold
- ? (spec.is_bold && bold_offset == spec.bold_offset)
- : !spec.is_bold)
- && track_kern == spec.track_kern
- && (is_constant_spaced
- ? (spec.is_constant_spaced
- && constant_space_width == spec.constant_space_width)
- : !spec.is_constant_spaced)
- && ligature_mode == spec.ligature_mode
- && kern_mode == spec.kern_mode)
- return 1;
- else
- return 0;
-}
-
-tfont_spec tfont_spec::plain()
-{
- return tfont_spec(name, input_position, fm, size, height, slant);
-}
-
-hunits tfont::get_width(charinfo *c)
-{
- if (is_constant_spaced)
- return constant_space_width;
- else if (is_bold)
- return (hunits(fm->get_width(c->get_index(), size.to_scaled_points()))
- + track_kern + bold_offset);
- else
- return (hunits(fm->get_width(c->get_index(), size.to_scaled_points()))
- + track_kern);
-}
-
-vunits tfont::get_char_height(charinfo *c)
-{
- vunits v = fm->get_height(c->get_index(), size.to_scaled_points());
- if (height != 0 && height != size.to_scaled_points())
- return scale(v, height, size.to_scaled_points());
- else
- return v;
-}
-
-vunits tfont::get_char_depth(charinfo *c)
-{
- vunits v = fm->get_depth(c->get_index(), size.to_scaled_points());
- if (height != 0 && height != size.to_scaled_points())
- return scale(v, height, size.to_scaled_points());
- else
- return v;
-}
-
-hunits tfont::get_char_skew(charinfo *c)
-{
- return hunits(fm->get_skew(c->get_index(), size.to_scaled_points(), slant));
-}
-
-hunits tfont::get_italic_correction(charinfo *c)
-{
- return hunits(fm->get_italic_correction(c->get_index(), size.to_scaled_points()));
-}
-
-hunits tfont::get_left_italic_correction(charinfo *c)
-{
- return hunits(fm->get_left_italic_correction(c->get_index(),
- size.to_scaled_points()));
-}
-
-hunits tfont::get_subscript_correction(charinfo *c)
-{
- return hunits(fm->get_subscript_correction(c->get_index(),
- size.to_scaled_points()));
-}
-
-inline int tfont::get_input_position()
-{
- return input_position;
-}
-
-inline int tfont::contains(charinfo *ci)
-{
- return fm->contains(ci->get_index());
-}
-
-inline int tfont::get_character_type(charinfo *ci)
-{
- return fm->get_character_type(ci->get_index());
-}
-
-inline int tfont::get_bold(hunits *res)
-{
- if (is_bold) {
- *res = bold_offset;
- return 1;
- }
- else
- return 0;
-}
-
-inline int tfont::get_constant_space(hunits *res)
-{
- if (is_constant_spaced) {
- *res = constant_space_width;
- return 1;
- }
- else
- return 0;
-}
-
-inline hunits tfont::get_track_kern()
-{
- return track_kern;
-}
-
-inline tfont *tfont::get_plain()
-{
- return plain_version;
-}
-
-inline font_size tfont::get_size()
-{
- return size;
-}
-
-inline symbol tfont::get_name()
-{
- return name;
-}
-
-inline int tfont::get_height()
-{
- return height;
-}
-
-inline int tfont::get_slant()
-{
- return slant;
-}
-
-symbol SYMBOL_ff("ff");
-symbol SYMBOL_fi("fi");
-symbol SYMBOL_fl("fl");
-symbol SYMBOL_Fi("Fi");
-symbol SYMBOL_Fl("Fl");
-
-charinfo *tfont::get_lig(charinfo *c1, charinfo *c2)
-{
- if (ligature_mode == 0)
- return 0;
- charinfo *ci = 0;
- if (c1->get_ascii_code() == 'f') {
- switch (c2->get_ascii_code()) {
- case 'f':
- if (fm->has_ligature(font::LIG_ff))
- ci = get_charinfo(SYMBOL_ff);
- break;
- case 'i':
- if (fm->has_ligature(font::LIG_fi))
- ci = get_charinfo(SYMBOL_fi);
- break;
- case 'l':
- if (fm->has_ligature(font::LIG_fl))
- ci = get_charinfo(SYMBOL_fl);
- break;
- }
- }
- else if (ligature_mode != 2 && c1->nm == SYMBOL_ff) {
- switch (c2->get_ascii_code()) {
- case 'i':
- if (fm->has_ligature(font::LIG_ffi))
- ci = get_charinfo(SYMBOL_Fi);
- break;
- case 'l':
- if (fm->has_ligature(font::LIG_ffl))
- ci = get_charinfo(SYMBOL_Fl);
- break;
- }
- }
- if (ci != 0 && fm->contains(ci->get_index()))
- return ci;
- return 0;
-}
-
-inline int tfont::get_kern(charinfo *c1, charinfo *c2, hunits *res)
-{
- if (kern_mode == 0)
- return 0;
- else {
- int n = fm->get_kern(c1->get_index(),
- c2->get_index(),
- size.to_scaled_points());
- if (n) {
- *res = hunits(n);
- return 1;
- }
- else
- return 0;
- }
-}
-
-tfont *tfont::tfont_list = 0;
-
-tfont::tfont(tfont_spec &spec) : tfont_spec(spec)
-{
- next = tfont_list;
- tfont_list = this;
- tfont_spec plain_spec = plain();
- tfont *p;
- for (p = tfont_list; p; p = p->next)
- if (*p == plain_spec) {
- plain_version = p;
- break;
- }
- if (!p)
- plain_version = new tfont(plain_spec);
-}
-
-/* output_file */
-
-class real_output_file : public output_file {
-#ifndef POPEN_MISSING
- int piped;
-#endif
- int printing; // decision via optional page list
- int output_on; // \O[0] or \O[1] escape calls
- virtual void really_transparent_char(unsigned char) = 0;
- virtual void really_print_line(hunits x, vunits y, node *n,
- vunits before, vunits after, hunits width) = 0;
- virtual void really_begin_page(int pageno, vunits page_length) = 0;
- virtual void really_copy_file(hunits x, vunits y, const char *filename);
- virtual void really_put_filename(const char *filename);
- virtual void really_on();
- virtual void really_off();
-public:
- FILE *fp;
- real_output_file();
- ~real_output_file();
- void flush();
- void transparent_char(unsigned char);
- void print_line(hunits x, vunits y, node *n, vunits before, vunits after, hunits width);
- void begin_page(int pageno, vunits page_length);
- void put_filename(const char *filename);
- void on();
- void off();
- int is_on();
- int is_printing();
- void copy_file(hunits x, vunits y, const char *filename);
-};
-
-class suppress_output_file : public real_output_file {
-public:
- suppress_output_file();
- void really_transparent_char(unsigned char);
- void really_print_line(hunits x, vunits y, node *n, vunits, vunits, hunits width);
- void really_begin_page(int pageno, vunits page_length);
-};
-
-class ascii_output_file : public real_output_file {
-public:
- ascii_output_file();
- void really_transparent_char(unsigned char);
- void really_print_line(hunits x, vunits y, node *n, vunits, vunits, hunits width);
- void really_begin_page(int pageno, vunits page_length);
- void outc(unsigned char c);
- void outs(const char *s);
-};
-
-void ascii_output_file::outc(unsigned char c)
-{
- fputc(c, fp);
-}
-
-void ascii_output_file::outs(const char *s)
-{
- fputc('<', fp);
- if (s)
- fputs(s, fp);
- fputc('>', fp);
-}
-
-struct hvpair;
-
-class troff_output_file : public real_output_file {
- units hpos;
- units vpos;
- units output_vpos;
- units output_hpos;
- int force_motion;
- int current_size;
- int current_slant;
- int current_height;
- tfont *current_tfont;
- color *current_fill_color;
- color *current_glyph_color;
- int current_font_number;
- symbol *font_position;
- int nfont_positions;
- enum { TBUF_SIZE = 256 };
- char tbuf[TBUF_SIZE];
- int tbuf_len;
- int tbuf_kern;
- int begun_page;
- int cur_div_level;
- string tag_list;
- void do_motion();
- void put(char c);
- void put(unsigned char c);
- void put(int i);
- void put(unsigned int i);
- void put(const char *s);
- void set_font(tfont *tf);
- void flush_tbuf();
-public:
- troff_output_file();
- ~troff_output_file();
- void trailer(vunits page_length);
- void put_char(charinfo *, tfont *, color *, color *);
- void put_char_width(charinfo *, tfont *, color *, color *, hunits, hunits);
- void right(hunits);
- void down(vunits);
- void moveto(hunits, vunits);
- void start_special(tfont *, color *, color *, int = 0);
- void start_special();
- void special_char(unsigned char c);
- void end_special();
- void word_marker();
- void really_transparent_char(unsigned char c);
- void really_print_line(hunits x, vunits y, node *n, vunits before, vunits after, hunits width);
- void really_begin_page(int pageno, vunits page_length);
- void really_copy_file(hunits x, vunits y, const char *filename);
- void really_put_filename(const char *filename);
- void really_on();
- void really_off();
- void draw(char, hvpair *, int, font_size, color *, color *);
- void determine_line_limits (char code, hvpair *point, int npoints);
- void check_charinfo(tfont *tf, charinfo *ci);
- void glyph_color(color *c);
- void fill_color(color *c);
- int get_hpos() { return hpos; }
- int get_vpos() { return vpos; }
- void add_to_tag_list(string s);
- friend void space_char_hmotion_node::tprint(troff_output_file *);
- friend void unbreakable_space_node::tprint(troff_output_file *);
-};
-
-static void put_string(const char *s, FILE *fp)
-{
- for (; *s != '\0'; ++s)
- putc(*s, fp);
-}
-
-inline void troff_output_file::put(char c)
-{
- putc(c, fp);
-}
-
-inline void troff_output_file::put(unsigned char c)
-{
- putc(c, fp);
-}
-
-inline void troff_output_file::put(const char *s)
-{
- put_string(s, fp);
-}
-
-inline void troff_output_file::put(int i)
-{
- put_string(i_to_a(i), fp);
-}
-
-inline void troff_output_file::put(unsigned int i)
-{
- put_string(ui_to_a(i), fp);
-}
-
-void troff_output_file::start_special(tfont *tf, color *gcol, color *fcol,
- int no_init_string)
-{
- set_font(tf);
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- if (!no_init_string)
- put("x X ");
-}
-
-void troff_output_file::start_special()
-{
- flush_tbuf();
- do_motion();
- put("x X ");
-}
-
-void troff_output_file::special_char(unsigned char c)
-{
- put(c);
- if (c == '\n')
- put('+');
-}
-
-void troff_output_file::end_special()
-{
- put('\n');
-}
-
-inline void troff_output_file::moveto(hunits h, vunits v)
-{
- hpos = h.to_units();
- vpos = v.to_units();
-}
-
-void troff_output_file::really_print_line(hunits x, vunits y, node *n,
- vunits before, vunits after, hunits)
-{
- moveto(x, y);
- while (n != 0) {
- // Check whether we should push the current troff state and use
- // the state at the start of the invocation of this diversion.
- if (n->div_nest_level > cur_div_level && n->push_state) {
- state.push_state(n->push_state);
- cur_div_level = n->div_nest_level;
- }
- // Has the current diversion level decreased? Then we must pop the
- // troff state.
- while (n->div_nest_level < cur_div_level) {
- state.pop_state();
- cur_div_level = n->div_nest_level;
- }
- // Now check whether the state has changed.
- if ((is_on() || n->force_tprint())
- && (state.changed(n->state) || n->is_tag() || n->is_special)) {
- flush_tbuf();
- do_motion();
- force_motion = 1;
- flush();
- state.flush(fp, n->state, tag_list);
- tag_list = string("");
- flush();
- }
- n->tprint(this);
- n = n->next;
- }
- flush_tbuf();
- // This ensures that transparent throughput will have a more predictable
- // position.
- do_motion();
- force_motion = 1;
- hpos = 0;
- put('n');
- put(before.to_units());
- put(' ');
- put(after.to_units());
- put('\n');
-}
-
-inline void troff_output_file::word_marker()
-{
- flush_tbuf();
- if (is_on())
- put('w');
-}
-
-inline void troff_output_file::right(hunits n)
-{
- hpos += n.to_units();
-}
-
-inline void troff_output_file::down(vunits n)
-{
- vpos += n.to_units();
-}
-
-void troff_output_file::do_motion()
-{
- if (force_motion) {
- put('V');
- put(vpos);
- put('\n');
- put('H');
- put(hpos);
- put('\n');
- }
- else {
- if (hpos != output_hpos) {
- units n = hpos - output_hpos;
- if (n > 0 && n < hpos) {
- put('h');
- put(n);
- }
- else {
- put('H');
- put(hpos);
- }
- put('\n');
- }
- if (vpos != output_vpos) {
- units n = vpos - output_vpos;
- if (n > 0 && n < vpos) {
- put('v');
- put(n);
- }
- else {
- put('V');
- put(vpos);
- }
- put('\n');
- }
- }
- output_vpos = vpos;
- output_hpos = hpos;
- force_motion = 0;
-}
-
-void troff_output_file::flush_tbuf()
-{
- if (!is_on()) {
- tbuf_len = 0;
- return;
- }
-
- if (tbuf_len == 0)
- return;
- if (tbuf_kern == 0)
- put('t');
- else {
- put('u');
- put(tbuf_kern);
- put(' ');
- }
- check_output_limits(hpos, vpos);
- check_output_limits(hpos, vpos - current_size);
-
- for (int i = 0; i < tbuf_len; i++)
- put(tbuf[i]);
- put('\n');
- tbuf_len = 0;
-}
-
-void troff_output_file::check_charinfo(tfont *tf, charinfo *ci)
-{
- if (!is_on())
- return;
-
- int height = tf->get_char_height(ci).to_units();
- int width = tf->get_width(ci).to_units()
- + tf->get_italic_correction(ci).to_units();
- int depth = tf->get_char_depth(ci).to_units();
- check_output_limits(output_hpos, output_vpos - height);
- check_output_limits(output_hpos + width, output_vpos + depth);
-}
-
-void troff_output_file::put_char_width(charinfo *ci, tfont *tf,
- color *gcol, color *fcol,
- hunits w, hunits k)
-{
- int kk = k.to_units();
- if (!is_on()) {
- flush_tbuf();
- hpos += w.to_units() + kk;
- return;
- }
- set_font(tf);
- unsigned char c = ci->get_ascii_code();
- if (c == '\0') {
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- check_charinfo(tf, ci);
- if (ci->numbered()) {
- put('N');
- put(ci->get_number());
- }
- else {
- put('C');
- const char *s = ci->nm.contents();
- if (s[1] == 0) {
- put('\\');
- put(s[0]);
- }
- else
- put(s);
- }
- put('\n');
- hpos += w.to_units() + kk;
- }
- else if (tcommand_flag) {
- if (tbuf_len > 0 && hpos == output_hpos && vpos == output_vpos
- && (!gcol || gcol == current_glyph_color)
- && (!fcol || fcol == current_fill_color)
- && kk == tbuf_kern
- && tbuf_len < TBUF_SIZE) {
- check_charinfo(tf, ci);
- tbuf[tbuf_len++] = c;
- output_hpos += w.to_units() + kk;
- hpos = output_hpos;
- return;
- }
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- check_charinfo(tf, ci);
- tbuf[tbuf_len++] = c;
- output_hpos += w.to_units() + kk;
- tbuf_kern = kk;
- hpos = output_hpos;
- }
- else {
- // flush_tbuf();
- int n = hpos - output_hpos;
- check_charinfo(tf, ci);
- // check_output_limits(output_hpos, output_vpos);
- if (vpos == output_vpos
- && (!gcol || gcol == current_glyph_color)
- && (!fcol || fcol == current_fill_color)
- && n > 0 && n < 100 && !force_motion) {
- put(char(n/10 + '0'));
- put(char(n%10 + '0'));
- put(c);
- output_hpos = hpos;
- }
- else {
- glyph_color(gcol);
- fill_color(fcol);
- do_motion();
- put('c');
- put(c);
- }
- hpos += w.to_units() + kk;
- }
-}
-
-void troff_output_file::put_char(charinfo *ci, tfont *tf,
- color *gcol, color *fcol)
-{
- flush_tbuf();
- if (!is_on())
- return;
- set_font(tf);
- unsigned char c = ci->get_ascii_code();
- if (c == '\0') {
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- if (ci->numbered()) {
- put('N');
- put(ci->get_number());
- }
- else {
- put('C');
- const char *s = ci->nm.contents();
- if (s[1] == 0) {
- put('\\');
- put(s[0]);
- }
- else
- put(s);
- }
- put('\n');
- }
- else {
- int n = hpos - output_hpos;
- if (vpos == output_vpos
- && (!gcol || gcol == current_glyph_color)
- && (!fcol || fcol == current_fill_color)
- && n > 0 && n < 100) {
- put(char(n/10 + '0'));
- put(char(n%10 + '0'));
- put(c);
- output_hpos = hpos;
- }
- else {
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- put('c');
- put(c);
- }
- }
-}
-
-// set_font calls `flush_tbuf' if necessary.
-
-void troff_output_file::set_font(tfont *tf)
-{
- if (current_tfont == tf)
- return;
- flush_tbuf();
- int n = tf->get_input_position();
- symbol nm = tf->get_name();
- if (n >= nfont_positions || font_position[n] != nm) {
- put("x font ");
- put(n);
- put(' ');
- put(nm.contents());
- put('\n');
- if (n >= nfont_positions) {
- int old_nfont_positions = nfont_positions;
- symbol *old_font_position = font_position;
- nfont_positions *= 3;
- nfont_positions /= 2;
- if (nfont_positions <= n)
- nfont_positions = n + 10;
- font_position = new symbol[nfont_positions];
- memcpy(font_position, old_font_position,
- old_nfont_positions*sizeof(symbol));
- a_delete old_font_position;
- }
- font_position[n] = nm;
- }
- if (current_font_number != n) {
- put('f');
- put(n);
- put('\n');
- current_font_number = n;
- }
- int size = tf->get_size().to_scaled_points();
- if (current_size != size) {
- put('s');
- put(size);
- put('\n');
- current_size = size;
- }
- int slant = tf->get_slant();
- if (current_slant != slant) {
- put("x Slant ");
- put(slant);
- put('\n');
- current_slant = slant;
- }
- int height = tf->get_height();
- if (current_height != height) {
- put("x Height ");
- put(height == 0 ? current_size : height);
- put('\n');
- current_height = height;
- }
- current_tfont = tf;
-}
-
-// fill_color calls `flush_tbuf' and `do_motion' if necessary.
-
-void troff_output_file::fill_color(color *col)
-{
- if (!col || current_fill_color == col)
- return;
- current_fill_color = col;
- if (!color_flag)
- return;
- flush_tbuf();
- do_motion();
- put("DF");
- unsigned int components[4];
- color_scheme cs;
- cs = col->get_components(components);
- switch (cs) {
- case DEFAULT:
- put('d');
- break;
- case RGB:
- put("r ");
- put(Red);
- put(' ');
- put(Green);
- put(' ');
- put(Blue);
- break;
- case CMY:
- put("c ");
- put(Cyan);
- put(' ');
- put(Magenta);
- put(' ');
- put(Yellow);
- break;
- case CMYK:
- put("k ");
- put(Cyan);
- put(' ');
- put(Magenta);
- put(' ');
- put(Yellow);
- put(' ');
- put(Black);
- break;
- case GRAY:
- put("g ");
- put(Gray);
- break;
- }
- put('\n');
-}
-
-// glyph_color calls `flush_tbuf' and `do_motion' if necessary.
-
-void troff_output_file::glyph_color(color *col)
-{
- if (!col || current_glyph_color == col)
- return;
- current_glyph_color = col;
- if (!color_flag)
- return;
- flush_tbuf();
- // grotty doesn't like a color command if the vertical position is zero.
- do_motion();
- put("m");
- unsigned int components[4];
- color_scheme cs;
- cs = col->get_components(components);
- switch (cs) {
- case DEFAULT:
- put('d');
- break;
- case RGB:
- put("r ");
- put(Red);
- put(' ');
- put(Green);
- put(' ');
- put(Blue);
- break;
- case CMY:
- put("c ");
- put(Cyan);
- put(' ');
- put(Magenta);
- put(' ');
- put(Yellow);
- break;
- case CMYK:
- put("k ");
- put(Cyan);
- put(' ');
- put(Magenta);
- put(' ');
- put(Yellow);
- put(' ');
- put(Black);
- break;
- case GRAY:
- put("g ");
- put(Gray);
- break;
- }
- put('\n');
-}
-
-void troff_output_file::add_to_tag_list(string s)
-{
- if (tag_list == string(""))
- tag_list = s;
- else {
- tag_list += string("\n");
- tag_list += s;
- }
-}
-
-// determine_line_limits - works out the smallest box which will contain
-// the entity, code, built from the point array.
-void troff_output_file::determine_line_limits(char code, hvpair *point,
- int npoints)
-{
- int i, x, y;
-
- if (!is_on())
- return;
-
- switch (code) {
- case 'c':
- case 'C':
- // only the h field is used when defining a circle
- check_output_limits(output_hpos,
- output_vpos - point[0].h.to_units()/2);
- check_output_limits(output_hpos + point[0].h.to_units(),
- output_vpos + point[0].h.to_units()/2);
- break;
- case 'E':
- case 'e':
- check_output_limits(output_hpos,
- output_vpos - point[0].v.to_units()/2);
- check_output_limits(output_hpos + point[0].h.to_units(),
- output_vpos + point[0].v.to_units()/2);
- break;
- case 'P':
- case 'p':
- x = output_hpos;
- y = output_vpos;
- check_output_limits(x, y);
- for (i = 0; i < npoints; i++) {
- x += point[i].h.to_units();
- y += point[i].v.to_units();
- check_output_limits(x, y);
- }
- break;
- case 't':
- x = output_hpos;
- y = output_vpos;
- for (i = 0; i < npoints; i++) {
- x += point[i].h.to_units();
- y += point[i].v.to_units();
- check_output_limits(x, y);
- }
- break;
- case 'a':
- double c[2];
- int p[4];
- int minx, miny, maxx, maxy;
- x = output_hpos;
- y = output_vpos;
- p[0] = point[0].h.to_units();
- p[1] = point[0].v.to_units();
- p[2] = point[1].h.to_units();
- p[3] = point[1].v.to_units();
- if (adjust_arc_center(p, c)) {
- check_output_arc_limits(x, y,
- p[0], p[1], p[2], p[3],
- c[0], c[1],
- &minx, &maxx, &miny, &maxy);
- check_output_limits(minx, miny);
- check_output_limits(maxx, maxy);
- break;
- }
- // fall through
- case 'l':
- x = output_hpos;
- y = output_vpos;
- check_output_limits(x, y);
- for (i = 0; i < npoints; i++) {
- x += point[i].h.to_units();
- y += point[i].v.to_units();
- check_output_limits(x, y);
- }
- break;
- default:
- x = output_hpos;
- y = output_vpos;
- for (i = 0; i < npoints; i++) {
- x += point[i].h.to_units();
- y += point[i].v.to_units();
- check_output_limits(x, y);
- }
- }
-}
-
-void troff_output_file::draw(char code, hvpair *point, int npoints,
- font_size fsize, color *gcol, color *fcol)
-{
- int i;
- glyph_color(gcol);
- fill_color(fcol);
- flush_tbuf();
- do_motion();
- if (is_on()) {
- int size = fsize.to_scaled_points();
- if (current_size != size) {
- put('s');
- put(size);
- put('\n');
- current_size = size;
- current_tfont = 0;
- }
- put('D');
- put(code);
- if (code == 'c') {
- put(' ');
- put(point[0].h.to_units());
- }
- else
- for (i = 0; i < npoints; i++) {
- put(' ');
- put(point[i].h.to_units());
- put(' ');
- put(point[i].v.to_units());
- }
- determine_line_limits(code, point, npoints);
- }
-
- for (i = 0; i < npoints; i++)
- output_hpos += point[i].h.to_units();
- hpos = output_hpos;
- if (code != 'e') {
- for (i = 0; i < npoints; i++)
- output_vpos += point[i].v.to_units();
- vpos = output_vpos;
- }
- if (is_on())
- put('\n');
-}
-
-void troff_output_file::really_on()
-{
- flush_tbuf();
- force_motion = 1;
- do_motion();
-}
-
-void troff_output_file::really_off()
-{
- flush_tbuf();
-}
-
-void troff_output_file::really_put_filename(const char *filename)
-{
- flush_tbuf();
- put("F ");
- put(filename);
- put('\n');
-}
-
-void troff_output_file::really_begin_page(int pageno, vunits page_length)
-{
- flush_tbuf();
- if (begun_page) {
- if (page_length > V0) {
- put('V');
- put(page_length.to_units());
- put('\n');
- }
- }
- else
- begun_page = 1;
- current_tfont = 0;
- current_font_number = -1;
- current_size = 0;
- // current_height = 0;
- // current_slant = 0;
- hpos = 0;
- vpos = 0;
- output_hpos = 0;
- output_vpos = 0;
- force_motion = 1;
- for (int i = 0; i < nfont_positions; i++)
- font_position[i] = NULL_SYMBOL;
- put('p');
- put(pageno);
- put('\n');
-}
-
-void troff_output_file::really_copy_file(hunits x, vunits y,
- const char *filename)
-{
- moveto(x, y);
- flush_tbuf();
- do_motion();
- errno = 0;
- FILE *ifp = include_search_path.open_file_cautious(filename);
- if (ifp == 0)
- error("can't open `%1': %2", filename, strerror(errno));
- else {
- int c;
- while ((c = getc(ifp)) != EOF)
- put(char(c));
- fclose(ifp);
- }
- force_motion = 1;
- current_size = 0;
- current_tfont = 0;
- current_font_number = -1;
- for (int i = 0; i < nfont_positions; i++)
- font_position[i] = NULL_SYMBOL;
-}
-
-void troff_output_file::really_transparent_char(unsigned char c)
-{
- put(c);
-}
-
-troff_output_file::~troff_output_file()
-{
- a_delete font_position;
-}
-
-void troff_output_file::trailer(vunits page_length)
-{
- flush_tbuf();
- if (page_length > V0) {
- put("x trailer\n");
- put('V');
- put(page_length.to_units());
- put('\n');
- }
- put("x stop\n");
-}
-
-troff_output_file::troff_output_file()
-: current_slant(0), current_height(0), current_fill_color(0),
- current_glyph_color(0), nfont_positions(10), tbuf_len(0), begun_page(0),
- cur_div_level(0)
-{
- font_position = new symbol[nfont_positions];
- put("x T ");
- put(device);
- put('\n');
- put("x res ");
- put(units_per_inch);
- put(' ');
- put(hresolution);
- put(' ');
- put(vresolution);
- put('\n');
- put("x init\n");
-}
-
-/* output_file */
-
-output_file *the_output = 0;
-
-output_file::output_file()
-{
-}
-
-output_file::~output_file()
-{
-}
-
-void output_file::trailer(vunits)
-{
-}
-
-void output_file::put_filename(const char *)
-{
-}
-
-void output_file::on()
-{
-}
-
-void output_file::off()
-{
-}
-
-real_output_file::real_output_file()
-: printing(0), output_on(1)
-{
-#ifndef POPEN_MISSING
- if (pipe_command) {
- if ((fp = popen(pipe_command, POPEN_WT)) != 0) {
- piped = 1;
- return;
- }
- error("pipe open failed: %1", strerror(errno));
- }
- piped = 0;
-#endif /* not POPEN_MISSING */
- fp = stdout;
-}
-
-real_output_file::~real_output_file()
-{
- if (!fp)
- return;
- // To avoid looping, set fp to 0 before calling fatal().
- if (ferror(fp) || fflush(fp) < 0) {
- fp = 0;
- fatal("error writing output file");
- }
-#ifndef POPEN_MISSING
- if (piped) {
- int result = pclose(fp);
- fp = 0;
- if (result < 0)
- fatal("pclose failed");
- if (!WIFEXITED(result))
- error("output process `%1' got fatal signal %2",
- pipe_command,
- WIFSIGNALED(result) ? WTERMSIG(result) : WSTOPSIG(result));
- else {
- int exit_status = WEXITSTATUS(result);
- if (exit_status != 0)
- error("output process `%1' exited with status %2",
- pipe_command, exit_status);
- }
- }
- else
-#endif /* not POPEN MISSING */
- if (fclose(fp) < 0) {
- fp = 0;
- fatal("error closing output file");
- }
-}
-
-void real_output_file::flush()
-{
- if (fflush(fp) < 0)
- fatal("error writing output file");
-}
-
-int real_output_file::is_printing()
-{
- return printing;
-}
-
-void real_output_file::begin_page(int pageno, vunits page_length)
-{
- printing = in_output_page_list(pageno);
- if (printing)
- really_begin_page(pageno, page_length);
-}
-
-void real_output_file::copy_file(hunits x, vunits y, const char *filename)
-{
- if (printing && output_on)
- really_copy_file(x, y, filename);
- check_output_limits(x.to_units(), y.to_units());
-}
-
-void real_output_file::transparent_char(unsigned char c)
-{
- if (printing && output_on)
- really_transparent_char(c);
-}
-
-void real_output_file::print_line(hunits x, vunits y, node *n,
- vunits before, vunits after, hunits width)
-{
- if (printing)
- really_print_line(x, y, n, before, after, width);
- delete_node_list(n);
-}
-
-void real_output_file::really_copy_file(hunits, vunits, const char *)
-{
- // do nothing
-}
-
-void real_output_file::put_filename(const char *filename)
-{
- really_put_filename(filename);
-}
-
-void real_output_file::really_put_filename(const char *)
-{
-}
-
-void real_output_file::on()
-{
- really_on();
- if (output_on == 0)
- output_on = 1;
-}
-
-void real_output_file::off()
-{
- really_off();
- output_on = 0;
-}
-
-int real_output_file::is_on()
-{
- return output_on;
-}
-
-void real_output_file::really_on()
-{
-}
-
-void real_output_file::really_off()
-{
-}
-
-/* ascii_output_file */
-
-void ascii_output_file::really_transparent_char(unsigned char c)
-{
- putc(c, fp);
-}
-
-void ascii_output_file::really_print_line(hunits, vunits, node *n,
- vunits, vunits, hunits)
-{
- while (n != 0) {
- n->ascii_print(this);
- n = n->next;
- }
- fputc('\n', fp);
-}
-
-void ascii_output_file::really_begin_page(int /*pageno*/, vunits /*page_length*/)
-{
- fputs("<beginning of page>\n", fp);
-}
-
-ascii_output_file::ascii_output_file()
-{
-}
-
-/* suppress_output_file */
-
-suppress_output_file::suppress_output_file()
-{
-}
-
-void suppress_output_file::really_print_line(hunits, vunits, node *, vunits, vunits, hunits)
-{
-}
-
-void suppress_output_file::really_begin_page(int, vunits)
-{
-}
-
-void suppress_output_file::really_transparent_char(unsigned char)
-{
-}
-
-/* glyphs, ligatures, kerns, discretionary breaks */
-
-class charinfo_node : public node {
-protected:
- charinfo *ci;
-public:
- charinfo_node(charinfo *, statem *, int, node * = 0);
- int ends_sentence();
- int overlaps_vertically();
- int overlaps_horizontally();
-};
-
-charinfo_node::charinfo_node(charinfo *c, statem *s, int pop, node *x)
-: node(x, s, pop), ci(c)
-{
-}
-
-int charinfo_node::ends_sentence()
-{
- if (ci->ends_sentence())
- return 1;
- else if (ci->transparent())
- return 2;
- else
- return 0;
-}
-
-int charinfo_node::overlaps_horizontally()
-{
- return ci->overlaps_horizontally();
-}
-
-int charinfo_node::overlaps_vertically()
-{
- return ci->overlaps_vertically();
-}
-
-class glyph_node : public charinfo_node {
- static glyph_node *free_list;
-protected:
- tfont *tf;
- color *gcol;
- color *fcol; /* this is needed for grotty */
-#ifdef STORE_WIDTH
- hunits wid;
- glyph_node(charinfo *, tfont *, color *, color *, hunits,
- statem *, int, node * = 0);
-#endif
-public:
- void *operator new(size_t);
- void operator delete(void *);
- glyph_node(charinfo *, tfont *, color *, color *,
- statem *, int, node * = 0);
- ~glyph_node() {}
- node *copy();
- node *merge_glyph_node(glyph_node *);
- node *merge_self(node *);
- hunits width();
- node *last_char_node();
- units size();
- void vertical_extent(vunits *, vunits *);
- hunits subscript_correction();
- hunits italic_correction();
- hunits left_italic_correction();
- hunits skew();
- hyphenation_type get_hyphenation_type();
- tfont *get_tfont();
- color *get_glyph_color();
- color *get_fill_color();
- void tprint(troff_output_file *);
- void zero_width_tprint(troff_output_file *);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- node *add_self(node *, hyphen_list **);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int character_type();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- void debug_node();
-};
-
-glyph_node *glyph_node::free_list = 0;
-
-class ligature_node : public glyph_node {
- node *n1;
- node *n2;
-#ifdef STORE_WIDTH
- ligature_node(charinfo *, tfont *, color *, color *, hunits,
- node *, node *, statem *, int, node * = 0);
-#endif
-public:
- void *operator new(size_t);
- void operator delete(void *);
- ligature_node(charinfo *, tfont *, color *, color *,
- node *, node *, statem *, int, node * = 0);
- ~ligature_node();
- node *copy();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class kern_pair_node : public node {
- hunits amount;
- node *n1;
- node *n2;
-public:
- kern_pair_node(hunits, node *, node *, statem *, int, node * = 0);
- ~kern_pair_node();
- node *copy();
- node *merge_glyph_node(glyph_node *);
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- node *add_discretionary_hyphen();
- hunits width();
- node *last_char_node();
- hunits italic_correction();
- hunits subscript_correction();
- void tprint(troff_output_file *);
- hyphenation_type get_hyphenation_type();
- int ends_sentence();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- void vertical_extent(vunits *, vunits *);
-};
-
-class dbreak_node : public node {
- node *none;
- node *pre;
- node *post;
-public:
- dbreak_node(node *, node *, statem *, int, node * = 0);
- ~dbreak_node();
- node *copy();
- node *merge_glyph_node(glyph_node *);
- node *add_discretionary_hyphen();
- hunits width();
- node *last_char_node();
- hunits italic_correction();
- hunits subscript_correction();
- void tprint(troff_output_file *);
- breakpoint *get_breakpoints(hunits width, int ns, breakpoint *rest = 0,
- int is_inner = 0);
- int nbreaks();
- int ends_sentence();
- void split(int, node **, node **);
- hyphenation_type get_hyphenation_type();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-void *glyph_node::operator new(size_t n)
-{
- assert(n == sizeof(glyph_node));
- if (!free_list) {
- const int BLOCK = 1024;
- free_list = (glyph_node *)new char[sizeof(glyph_node)*BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK-1].next = 0;
- }
- glyph_node *p = free_list;
- free_list = (glyph_node *)(free_list->next);
- p->next = 0;
- return p;
-}
-
-void *ligature_node::operator new(size_t n)
-{
- return new char[n];
-}
-
-void glyph_node::operator delete(void *p)
-{
- if (p) {
- ((glyph_node *)p)->next = free_list;
- free_list = (glyph_node *)p;
- }
-}
-
-void ligature_node::operator delete(void *p)
-{
- delete[] (char *)p;
-}
-
-glyph_node::glyph_node(charinfo *c, tfont *t, color *gc, color *fc,
- statem *s, int pop, node *x)
-: charinfo_node(c, s, pop, x), tf(t), gcol(gc), fcol(fc)
-{
-#ifdef STORE_WIDTH
- wid = tf->get_width(ci);
-#endif
-}
-
-#ifdef STORE_WIDTH
-glyph_node::glyph_node(charinfo *c, tfont *t,
- color *gc, color *fc, hunits w,
- statem *s, int pop, node *x)
-: charinfo_node(c, s, pop, x), tf(t), gcol(gc), fcol(fc), wid(w)
-{
-}
-#endif
-
-node *glyph_node::copy()
-{
-#ifdef STORE_WIDTH
- return new glyph_node(ci, tf, gcol, fcol, wid, state, div_nest_level);
-#else
- return new glyph_node(ci, tf, gcol, fcol, state, div_nest_level);
-#endif
-}
-
-node *glyph_node::merge_self(node *nd)
-{
- return nd->merge_glyph_node(this);
-}
-
-int glyph_node::character_type()
-{
- return tf->get_character_type(ci);
-}
-
-node *glyph_node::add_self(node *n, hyphen_list **p)
-{
- assert(ci->get_hyphenation_code() == (*p)->hyphenation_code);
- next = 0;
- node *nn;
- if (n == 0 || (nn = n->merge_glyph_node(this)) == 0) {
- next = n;
- nn = this;
- }
- if ((*p)->hyphen)
- nn = nn->add_discretionary_hyphen();
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return nn;
-}
-
-units glyph_node::size()
-{
- return tf->get_size().to_units();
-}
-
-hyphen_list *glyph_node::get_hyphen_list(hyphen_list *tail, int *count)
-{
- (*count)++;
- return new hyphen_list(ci->get_hyphenation_code(), tail);
-}
-
-tfont *node::get_tfont()
-{
- return 0;
-}
-
-tfont *glyph_node::get_tfont()
-{
- return tf;
-}
-
-color *node::get_glyph_color()
-{
- return 0;
-}
-
-color *glyph_node::get_glyph_color()
-{
- return gcol;
-}
-
-color *node::get_fill_color()
-{
- return 0;
-}
-
-color *glyph_node::get_fill_color()
-{
- return fcol;
-}
-
-node *node::merge_glyph_node(glyph_node *)
-{
- return 0;
-}
-
-node *glyph_node::merge_glyph_node(glyph_node *gn)
-{
- if (tf == gn->tf && gcol == gn->gcol && fcol == gn->fcol) {
- charinfo *lig;
- if ((lig = tf->get_lig(ci, gn->ci)) != 0) {
- node *next1 = next;
- next = 0;
- return new ligature_node(lig, tf, gcol, fcol, this, gn, state,
- gn->div_nest_level, next1);
- }
- hunits kern;
- if (tf->get_kern(ci, gn->ci, &kern)) {
- node *next1 = next;
- next = 0;
- return new kern_pair_node(kern, this, gn, state,
- gn->div_nest_level, next1);
- }
- }
- return 0;
-}
-
-#ifdef STORE_WIDTH
-inline
-#endif
-hunits glyph_node::width()
-{
-#ifdef STORE_WIDTH
- return wid;
-#else
- return tf->get_width(ci);
-#endif
-}
-
-node *glyph_node::last_char_node()
-{
- return this;
-}
-
-void glyph_node::vertical_extent(vunits *min, vunits *max)
-{
- *min = -tf->get_char_height(ci);
- *max = tf->get_char_depth(ci);
-}
-
-hunits glyph_node::skew()
-{
- return tf->get_char_skew(ci);
-}
-
-hunits glyph_node::subscript_correction()
-{
- return tf->get_subscript_correction(ci);
-}
-
-hunits glyph_node::italic_correction()
-{
- return tf->get_italic_correction(ci);
-}
-
-hunits glyph_node::left_italic_correction()
-{
- return tf->get_left_italic_correction(ci);
-}
-
-hyphenation_type glyph_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-void glyph_node::ascii_print(ascii_output_file *ascii)
-{
- unsigned char c = ci->get_ascii_code();
- if (c != 0)
- ascii->outc(c);
- else
- ascii->outs(ci->nm.contents());
-}
-
-void glyph_node::debug_node()
-{
- unsigned char c = ci->get_ascii_code();
- fprintf(stderr, "{ %s [", type());
- if (c)
- fprintf(stderr, "%c", c);
- else
- fputs(ci->nm.contents(), stderr);
- if (push_state)
- fprintf(stderr, " <push_state>");
- if (state)
- state->display_state();
- fprintf(stderr, " nest level %d", div_nest_level);
- fprintf(stderr, "]}\n");
- fflush(stderr);
-}
-
-ligature_node::ligature_node(charinfo *c, tfont *t, color *gc, color *fc,
- node *gn1, node *gn2, statem *s,
- int pop, node *x)
-: glyph_node(c, t, gc, fc, s, pop, x), n1(gn1), n2(gn2)
-{
-}
-
-#ifdef STORE_WIDTH
-ligature_node::ligature_node(charinfo *c, tfont *t, color *gc, color *fc,
- hunits w, node *gn1, node *gn2, statem *s,
- int pop, node *x)
-: glyph_node(c, t, gc, fc, w, s, pop, x), n1(gn1), n2(gn2)
-{
-}
-#endif
-
-ligature_node::~ligature_node()
-{
- delete n1;
- delete n2;
-}
-
-node *ligature_node::copy()
-{
-#ifdef STORE_WIDTH
- return new ligature_node(ci, tf, gcol, fcol, wid, n1->copy(), n2->copy(),
- state, div_nest_level);
-#else
- return new ligature_node(ci, tf, gcol, fcol, n1->copy(), n2->copy(),
- state, div_nest_level);
-#endif
-}
-
-void ligature_node::ascii_print(ascii_output_file *ascii)
-{
- n1->ascii_print(ascii);
- n2->ascii_print(ascii);
-}
-
-hyphen_list *ligature_node::get_hyphen_list(hyphen_list *tail, int *count)
-{
- hyphen_list *hl = n2->get_hyphen_list(tail, count);
- return n1->get_hyphen_list(hl, count);
-}
-
-node *ligature_node::add_self(node *n, hyphen_list **p)
-{
- n = n1->add_self(n, p);
- n = n2->add_self(n, p);
- n1 = n2 = 0;
- delete this;
- return n;
-}
-
-kern_pair_node::kern_pair_node(hunits n, node *first, node *second,
- statem* s, int pop, node *x)
-: node(x, s, pop), amount(n), n1(first), n2(second)
-{
-}
-
-dbreak_node::dbreak_node(node *n, node *p, statem *s, int pop, node *x)
-: node(x, s, pop), none(n), pre(p), post(0)
-{
-}
-
-node *dbreak_node::merge_glyph_node(glyph_node *gn)
-{
- glyph_node *gn2 = (glyph_node *)gn->copy();
- node *new_none = none ? none->merge_glyph_node(gn) : 0;
- node *new_post = post ? post->merge_glyph_node(gn2) : 0;
- if (new_none == 0 && new_post == 0) {
- delete gn2;
- return 0;
- }
- if (new_none != 0)
- none = new_none;
- else {
- gn->next = none;
- none = gn;
- }
- if (new_post != 0)
- post = new_post;
- else {
- gn2->next = post;
- post = gn2;
- }
- return this;
-}
-
-node *kern_pair_node::merge_glyph_node(glyph_node *gn)
-{
- node *nd = n2->merge_glyph_node(gn);
- if (nd == 0)
- return 0;
- n2 = nd;
- nd = n2->merge_self(n1);
- if (nd) {
- nd->next = next;
- n1 = 0;
- n2 = 0;
- delete this;
- return nd;
- }
- return this;
-}
-
-hunits kern_pair_node::italic_correction()
-{
- return n2->italic_correction();
-}
-
-hunits kern_pair_node::subscript_correction()
-{
- return n2->subscript_correction();
-}
-
-void kern_pair_node::vertical_extent(vunits *min, vunits *max)
-{
- n1->vertical_extent(min, max);
- vunits min2, max2;
- n2->vertical_extent(&min2, &max2);
- if (min2 < *min)
- *min = min2;
- if (max2 > *max)
- *max = max2;
-}
-
-node *kern_pair_node::add_discretionary_hyphen()
-{
- tfont *tf = n2->get_tfont();
- if (tf) {
- if (tf->contains(soft_hyphen_char)) {
- color *gcol = n2->get_glyph_color();
- color *fcol = n2->get_fill_color();
- node *next1 = next;
- next = 0;
- node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf, gcol, fcol,
- state, div_nest_level);
- node *nn = n->merge_glyph_node(gn);
- if (nn == 0) {
- gn->next = n;
- nn = gn;
- }
- return new dbreak_node(this, nn, state, div_nest_level, next1);
- }
- }
- return this;
-}
-
-kern_pair_node::~kern_pair_node()
-{
- if (n1 != 0)
- delete n1;
- if (n2 != 0)
- delete n2;
-}
-
-dbreak_node::~dbreak_node()
-{
- delete_node_list(pre);
- delete_node_list(post);
- delete_node_list(none);
-}
-
-node *kern_pair_node::copy()
-{
- return new kern_pair_node(amount, n1->copy(), n2->copy(), state,
- div_nest_level);
-}
-
-node *copy_node_list(node *n)
-{
- node *p = 0;
- while (n != 0) {
- node *nn = n->copy();
- nn->next = p;
- p = nn;
- n = n->next;
- }
- while (p != 0) {
- node *pp = p->next;
- p->next = n;
- n = p;
- p = pp;
- }
- return n;
-}
-
-void delete_node_list(node *n)
-{
- while (n != 0) {
- node *tem = n;
- n = n->next;
- delete tem;
- }
-}
-
-node *dbreak_node::copy()
-{
- dbreak_node *p = new dbreak_node(copy_node_list(none), copy_node_list(pre),
- state, div_nest_level);
- p->post = copy_node_list(post);
- return p;
-}
-
-hyphen_list *node::get_hyphen_list(hyphen_list *tail, int *)
-{
- return tail;
-}
-
-hyphen_list *kern_pair_node::get_hyphen_list(hyphen_list *tail, int *count)
-{
- hyphen_list *hl = n2->get_hyphen_list(tail, count);
- return n1->get_hyphen_list(hl, count);
-}
-
-class hyphen_inhibitor_node : public node {
-public:
- hyphen_inhibitor_node(node * = 0);
- node *copy();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- hyphenation_type get_hyphenation_type();
-};
-
-hyphen_inhibitor_node::hyphen_inhibitor_node(node *nd) : node(nd)
-{
-}
-
-node *hyphen_inhibitor_node::copy()
-{
- return new hyphen_inhibitor_node;
-}
-
-int hyphen_inhibitor_node::same(node *)
-{
- return 1;
-}
-
-const char *hyphen_inhibitor_node::type()
-{
- return "hyphen_inhibitor_node";
-}
-
-int hyphen_inhibitor_node::force_tprint()
-{
- return 0;
-}
-
-int hyphen_inhibitor_node::is_tag()
-{
- return 0;
-}
-
-hyphenation_type hyphen_inhibitor_node::get_hyphenation_type()
-{
- return HYPHEN_INHIBIT;
-}
-
-/* add_discretionary_hyphen methods */
-
-node *dbreak_node::add_discretionary_hyphen()
-{
- if (post)
- post = post->add_discretionary_hyphen();
- if (none)
- none = none->add_discretionary_hyphen();
- return this;
-}
-
-node *node::add_discretionary_hyphen()
-{
- tfont *tf = get_tfont();
- if (!tf)
- return new hyphen_inhibitor_node(this);
- if (tf->contains(soft_hyphen_char)) {
- color *gcol = get_glyph_color();
- color *fcol = get_fill_color();
- node *next1 = next;
- next = 0;
- node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf, gcol, fcol,
- state, div_nest_level);
- node *n1 = n->merge_glyph_node(gn);
- if (n1 == 0) {
- gn->next = n;
- n1 = gn;
- }
- return new dbreak_node(this, n1, state, div_nest_level, next1);
- }
- return this;
-}
-
-node *node::merge_self(node *)
-{
- return 0;
-}
-
-node *node::add_self(node *n, hyphen_list ** /*p*/)
-{
- next = n;
- return this;
-}
-
-node *kern_pair_node::add_self(node *n, hyphen_list **p)
-{
- n = n1->add_self(n, p);
- n = n2->add_self(n, p);
- n1 = n2 = 0;
- delete this;
- return n;
-}
-
-hunits node::width()
-{
- return H0;
-}
-
-node *node::last_char_node()
-{
- return 0;
-}
-
-int node::force_tprint()
-{
- return 0;
-}
-
-int node::is_tag()
-{
- return 0;
-}
-
-hunits hmotion_node::width()
-{
- return n;
-}
-
-units node::size()
-{
- return points_to_units(10);
-}
-
-void node::debug_node()
-{
- fprintf(stderr, "{ %s ", type());
- if (push_state)
- fprintf(stderr, " <push_state>");
- if (state)
- fprintf(stderr, " <state>");
- fprintf(stderr, " nest level %d", div_nest_level);
- fprintf(stderr, " }\n");
- fflush(stderr);
-}
-
-void node::debug_node_list()
-{
- node *n = next;
-
- debug_node();
- while (n != 0) {
- n->debug_node();
- n = n->next;
- }
-}
-
-hunits kern_pair_node::width()
-{
- return n1->width() + n2->width() + amount;
-}
-
-node *kern_pair_node::last_char_node()
-{
- node *nd = n2->last_char_node();
- if (nd)
- return nd;
- return n1->last_char_node();
-}
-
-hunits dbreak_node::width()
-{
- hunits x = H0;
- for (node *n = none; n != 0; n = n->next)
- x += n->width();
- return x;
-}
-
-node *dbreak_node::last_char_node()
-{
- for (node *n = none; n; n = n->next) {
- node *last_node = n->last_char_node();
- if (last_node)
- return last_node;
- }
- return 0;
-}
-
-hunits dbreak_node::italic_correction()
-{
- return none ? none->italic_correction() : H0;
-}
-
-hunits dbreak_node::subscript_correction()
-{
- return none ? none->subscript_correction() : H0;
-}
-
-class italic_corrected_node : public node {
- node *n;
- hunits x;
-public:
- italic_corrected_node(node *, hunits, statem *, int, node * = 0);
- ~italic_corrected_node();
- node *copy();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- hunits width();
- node *last_char_node();
- void vertical_extent(vunits *, vunits *);
- int ends_sentence();
- int overlaps_horizontally();
- int overlaps_vertically();
- int same(node *);
- hyphenation_type get_hyphenation_type();
- tfont *get_tfont();
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- int character_type();
- void tprint(troff_output_file *);
- hunits subscript_correction();
- hunits skew();
- node *add_self(node *, hyphen_list **);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-node *node::add_italic_correction(hunits *wd)
-{
- hunits ic = italic_correction();
- if (ic.is_zero())
- return this;
- else {
- node *next1 = next;
- next = 0;
- *wd += ic;
- return new italic_corrected_node(this, ic, state, div_nest_level, next1);
- }
-}
-
-italic_corrected_node::italic_corrected_node(node *nn, hunits xx, statem *s,
- int pop, node *p)
-: node(p, s, pop), n(nn), x(xx)
-{
- assert(n != 0);
-}
-
-italic_corrected_node::~italic_corrected_node()
-{
- delete n;
-}
-
-node *italic_corrected_node::copy()
-{
- return new italic_corrected_node(n->copy(), x, state, div_nest_level);
-}
-
-hunits italic_corrected_node::width()
-{
- return n->width() + x;
-}
-
-void italic_corrected_node::vertical_extent(vunits *min, vunits *max)
-{
- n->vertical_extent(min, max);
-}
-
-void italic_corrected_node::tprint(troff_output_file *out)
-{
- n->tprint(out);
- out->right(x);
-}
-
-hunits italic_corrected_node::skew()
-{
- return n->skew() - x/2;
-}
-
-hunits italic_corrected_node::subscript_correction()
-{
- return n->subscript_correction() - x;
-}
-
-void italic_corrected_node::ascii_print(ascii_output_file *out)
-{
- n->ascii_print(out);
-}
-
-int italic_corrected_node::ends_sentence()
-{
- return n->ends_sentence();
-}
-
-int italic_corrected_node::overlaps_horizontally()
-{
- return n->overlaps_horizontally();
-}
-
-int italic_corrected_node::overlaps_vertically()
-{
- return n->overlaps_vertically();
-}
-
-node *italic_corrected_node::last_char_node()
-{
- return n->last_char_node();
-}
-
-tfont *italic_corrected_node::get_tfont()
-{
- return n->get_tfont();
-}
-
-hyphenation_type italic_corrected_node::get_hyphenation_type()
-{
- return n->get_hyphenation_type();
-}
-
-node *italic_corrected_node::add_self(node *nd, hyphen_list **p)
-{
- nd = n->add_self(nd, p);
- hunits not_interested;
- nd = nd->add_italic_correction(&not_interested);
- n = 0;
- delete this;
- return nd;
-}
-
-hyphen_list *italic_corrected_node::get_hyphen_list(hyphen_list *tail,
- int *count)
-{
- return n->get_hyphen_list(tail, count);
-}
-
-int italic_corrected_node::character_type()
-{
- return n->character_type();
-}
-
-class break_char_node : public node {
- node *ch;
- char break_code;
- color *col;
-public:
- break_char_node(node *, int, color *, node * = 0);
- break_char_node(node *, int, color *, statem *, int, node * = 0);
- ~break_char_node();
- node *copy();
- hunits width();
- vunits vertical_width();
- node *last_char_node();
- int character_type();
- int ends_sentence();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- void tprint(troff_output_file *);
- void zero_width_tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- hyphenation_type get_hyphenation_type();
- int overlaps_vertically();
- int overlaps_horizontally();
- units size();
- tfont *get_tfont();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-break_char_node::break_char_node(node *n, int bc, color *c, node *x)
-: node(x), ch(n), break_code(bc), col(c)
-{
-}
-
-break_char_node::break_char_node(node *n, int bc, color *c, statem *s,
- int pop, node *x)
-: node(x, s, pop), ch(n), break_code(bc), col(c)
-{
-}
-
-break_char_node::~break_char_node()
-{
- delete ch;
-}
-
-node *break_char_node::copy()
-{
- return new break_char_node(ch->copy(), break_code, col, state,
- div_nest_level);
-}
-
-hunits break_char_node::width()
-{
- return ch->width();
-}
-
-vunits break_char_node::vertical_width()
-{
- return ch->vertical_width();
-}
-
-node *break_char_node::last_char_node()
-{
- return ch->last_char_node();
-}
-
-int break_char_node::character_type()
-{
- return ch->character_type();
-}
-
-int break_char_node::ends_sentence()
-{
- return ch->ends_sentence();
-}
-
-node *break_char_node::add_self(node *n, hyphen_list **p)
-{
- assert((*p)->hyphenation_code == 0);
- if ((*p)->breakable && (break_code & 1)) {
- n = new space_node(H0, col, n);
- n->freeze_space();
- }
- next = n;
- n = this;
- if ((*p)->breakable && (break_code & 2)) {
- n = new space_node(H0, col, n);
- n->freeze_space();
- }
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return n;
-}
-
-hyphen_list *break_char_node::get_hyphen_list(hyphen_list *tail, int *)
-{
- return new hyphen_list(0, tail);
-}
-
-hyphenation_type break_char_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-void break_char_node::ascii_print(ascii_output_file *ascii)
-{
- ch->ascii_print(ascii);
-}
-
-int break_char_node::overlaps_vertically()
-{
- return ch->overlaps_vertically();
-}
-
-int break_char_node::overlaps_horizontally()
-{
- return ch->overlaps_horizontally();
-}
-
-units break_char_node::size()
-{
- return ch->size();
-}
-
-tfont *break_char_node::get_tfont()
-{
- return ch->get_tfont();
-}
-
-node *extra_size_node::copy()
-{
- return new extra_size_node(n, state, div_nest_level);
-}
-
-extra_size_node::extra_size_node(vunits i, statem *s, int pop)
-: node(0, s, pop), n(i)
-{
-}
-
-extra_size_node::extra_size_node(vunits i)
-: n(i)
-{
-}
-
-node *vertical_size_node::copy()
-{
- return new vertical_size_node(n, state, div_nest_level);
-}
-
-vertical_size_node::vertical_size_node(vunits i, statem *s, int pop)
-: node(0, s, pop), n(i)
-{
-}
-
-vertical_size_node::vertical_size_node(vunits i)
-: n(i)
-{
-}
-
-node *hmotion_node::copy()
-{
- return new hmotion_node(n, was_tab, unformat, col, state, div_nest_level);
-}
-
-node *space_char_hmotion_node::copy()
-{
- return new space_char_hmotion_node(n, col, state, div_nest_level);
-}
-
-vmotion_node::vmotion_node(vunits i, color *c)
-: n(i), col(c)
-{
-}
-
-vmotion_node::vmotion_node(vunits i, color *c, statem *s, int pop)
-: node(0, s, pop), n(i), col(c)
-{
-}
-
-node *vmotion_node::copy()
-{
- return new vmotion_node(n, col, state, div_nest_level);
-}
-
-node *dummy_node::copy()
-{
- return new dummy_node;
-}
-
-node *transparent_dummy_node::copy()
-{
- return new transparent_dummy_node;
-}
-
-hline_node::~hline_node()
-{
- if (n)
- delete n;
-}
-
-hline_node::hline_node(hunits i, node *c, node *nxt)
-: node(nxt), x(i), n(c)
-{
-}
-
-hline_node::hline_node(hunits i, node *c, statem *s, int pop, node *nxt)
-: node(nxt, s, pop), x(i), n(c)
-{
-}
-
-node *hline_node::copy()
-{
- return new hline_node(x, n ? n->copy() : 0, state, div_nest_level);
-}
-
-hunits hline_node::width()
-{
- return x < H0 ? H0 : x;
-}
-
-vline_node::vline_node(vunits i, node *c, node *nxt)
-: node(nxt), x(i), n(c)
-{
-}
-
-vline_node::vline_node(vunits i, node *c, statem *s, int pop, node *nxt)
-: node(nxt, s, pop), x(i), n(c)
-{
-}
-
-vline_node::~vline_node()
-{
- if (n)
- delete n;
-}
-
-node *vline_node::copy()
-{
- return new vline_node(x, n ? n->copy() : 0, state, div_nest_level);
-}
-
-hunits vline_node::width()
-{
- return n == 0 ? H0 : n->width();
-}
-
-zero_width_node::zero_width_node(node *nd, statem *s, int pop)
-: node(0, s, pop), n(nd)
-{
-}
-
-zero_width_node::zero_width_node(node *nd)
-: n(nd)
-{
-}
-
-zero_width_node::~zero_width_node()
-{
- delete_node_list(n);
-}
-
-node *zero_width_node::copy()
-{
- return new zero_width_node(copy_node_list(n), state, div_nest_level);
-}
-
-int node_list_character_type(node *p)
-{
- int t = 0;
- for (; p; p = p->next)
- t |= p->character_type();
- return t;
-}
-
-int zero_width_node::character_type()
-{
- return node_list_character_type(n);
-}
-
-void node_list_vertical_extent(node *p, vunits *min, vunits *max)
-{
- *min = V0;
- *max = V0;
- vunits cur_vpos = V0;
- vunits v1, v2;
- for (; p; p = p->next) {
- p->vertical_extent(&v1, &v2);
- v1 += cur_vpos;
- if (v1 < *min)
- *min = v1;
- v2 += cur_vpos;
- if (v2 > *max)
- *max = v2;
- cur_vpos += p->vertical_width();
- }
-}
-
-void zero_width_node::vertical_extent(vunits *min, vunits *max)
-{
- node_list_vertical_extent(n, min, max);
-}
-
-overstrike_node::overstrike_node()
-: list(0), max_width(H0)
-{
-}
-
-overstrike_node::overstrike_node(statem *s, int pop)
-: node(0, s, pop), list(0), max_width(H0)
-{
-}
-
-overstrike_node::~overstrike_node()
-{
- delete_node_list(list);
-}
-
-node *overstrike_node::copy()
-{
- overstrike_node *on = new overstrike_node(state, div_nest_level);
- for (node *tem = list; tem; tem = tem->next)
- on->overstrike(tem->copy());
- return on;
-}
-
-void overstrike_node::overstrike(node *n)
-{
- if (n == 0)
- return;
- hunits w = n->width();
- if (w > max_width)
- max_width = w;
- node **p;
- for (p = &list; *p; p = &(*p)->next)
- ;
- n->next = 0;
- *p = n;
-}
-
-hunits overstrike_node::width()
-{
- return max_width;
-}
-
-bracket_node::bracket_node()
-: list(0), max_width(H0)
-{
-}
-
-bracket_node::bracket_node(statem *s, int pop)
-: node(0, s, pop), list(0), max_width(H0)
-{
-}
-
-bracket_node::~bracket_node()
-{
- delete_node_list(list);
-}
-
-node *bracket_node::copy()
-{
- bracket_node *on = new bracket_node(state, div_nest_level);
- node *last_node = 0;
- node *tem;
- if (list)
- list->last = 0;
- for (tem = list; tem; tem = tem->next) {
- if (tem->next)
- tem->next->last = tem;
- last_node = tem;
- }
- for (tem = last_node; tem; tem = tem->last)
- on->bracket(tem->copy());
- return on;
-}
-
-void bracket_node::bracket(node *n)
-{
- if (n == 0)
- return;
- hunits w = n->width();
- if (w > max_width)
- max_width = w;
- n->next = list;
- list = n;
-}
-
-hunits bracket_node::width()
-{
- return max_width;
-}
-
-int node::nspaces()
-{
- return 0;
-}
-
-int node::merge_space(hunits, hunits, hunits)
-{
- return 0;
-}
-
-#if 0
-space_node *space_node::free_list = 0;
-
-void *space_node::operator new(size_t n)
-{
- assert(n == sizeof(space_node));
- if (!free_list) {
- free_list = (space_node *)new char[sizeof(space_node)*BLOCK];
- for (int i = 0; i < BLOCK - 1; i++)
- free_list[i].next = free_list + i + 1;
- free_list[BLOCK-1].next = 0;
- }
- space_node *p = free_list;
- free_list = (space_node *)(free_list->next);
- p->next = 0;
- return p;
-}
-
-inline void space_node::operator delete(void *p)
-{
- if (p) {
- ((space_node *)p)->next = free_list;
- free_list = (space_node *)p;
- }
-}
-#endif
-
-space_node::space_node(hunits nn, color *c, node *p)
-: node(p, 0, 0), n(nn), set(0), was_escape_colon(0), col(c)
-{
-}
-
-space_node::space_node(hunits nn, color *c, statem *s, int pop, node *p)
-: node(p, s, pop), n(nn), set(0), was_escape_colon(0), col(c)
-{
-}
-
-space_node::space_node(hunits nn, int s, int flag, color *c, statem *st,
- int pop, node *p)
-: node(p, st, pop), n(nn), set(s), was_escape_colon(flag), col(c)
-{
-}
-
-#if 0
-space_node::~space_node()
-{
-}
-#endif
-
-node *space_node::copy()
-{
- return new space_node(n, set, was_escape_colon, col, state, div_nest_level);
-}
-
-int space_node::force_tprint()
-{
- return 0;
-}
-
-int space_node::is_tag()
-{
- return 0;
-}
-
-int space_node::nspaces()
-{
- return set ? 0 : 1;
-}
-
-int space_node::merge_space(hunits h, hunits, hunits)
-{
- n += h;
- return 1;
-}
-
-hunits space_node::width()
-{
- return n;
-}
-
-void node::spread_space(int*, hunits*)
-{
-}
-
-void space_node::spread_space(int *n_spaces, hunits *desired_space)
-{
- if (!set) {
- assert(*n_spaces > 0);
- if (*n_spaces == 1) {
- n += *desired_space;
- *desired_space = H0;
- }
- else {
- hunits extra = *desired_space / *n_spaces;
- *desired_space -= extra;
- n += extra;
- }
- *n_spaces -= 1;
- set = 1;
- }
-}
-
-void node::freeze_space()
-{
-}
-
-void space_node::freeze_space()
-{
- set = 1;
-}
-
-void node::is_escape_colon()
-{
-}
-
-void space_node::is_escape_colon()
-{
- was_escape_colon = 1;
-}
-
-diverted_space_node::diverted_space_node(vunits d, statem *s, int pop,
- node *p)
-: node(p, s, pop), n(d)
-{
-}
-
-diverted_space_node::diverted_space_node(vunits d, node *p)
-: node(p), n(d)
-{
-}
-
-node *diverted_space_node::copy()
-{
- return new diverted_space_node(n, state, div_nest_level);
-}
-
-diverted_copy_file_node::diverted_copy_file_node(symbol s, statem *st,
- int pop, node *p)
-: node(p, st, pop), filename(s)
-{
-}
-
-diverted_copy_file_node::diverted_copy_file_node(symbol s, node *p)
-: node(p), filename(s)
-{
-}
-
-node *diverted_copy_file_node::copy()
-{
- return new diverted_copy_file_node(filename, state, div_nest_level);
-}
-
-int node::ends_sentence()
-{
- return 0;
-}
-
-int kern_pair_node::ends_sentence()
-{
- switch (n2->ends_sentence()) {
- case 0:
- return 0;
- case 1:
- return 1;
- case 2:
- break;
- default:
- assert(0);
- }
- return n1->ends_sentence();
-}
-
-int node_list_ends_sentence(node *n)
-{
- for (; n != 0; n = n->next)
- switch (n->ends_sentence()) {
- case 0:
- return 0;
- case 1:
- return 1;
- case 2:
- break;
- default:
- assert(0);
- }
- return 2;
-}
-
-int dbreak_node::ends_sentence()
-{
- return node_list_ends_sentence(none);
-}
-
-int node::overlaps_horizontally()
-{
- return 0;
-}
-
-int node::overlaps_vertically()
-{
- return 0;
-}
-
-int node::discardable()
-{
- return 0;
-}
-
-int space_node::discardable()
-{
- return set ? 0 : 1;
-}
-
-vunits node::vertical_width()
-{
- return V0;
-}
-
-vunits vline_node::vertical_width()
-{
- return x;
-}
-
-vunits vmotion_node::vertical_width()
-{
- return n;
-}
-
-int node::set_unformat_flag()
-{
- return 1;
-}
-
-int node::character_type()
-{
- return 0;
-}
-
-hunits node::subscript_correction()
-{
- return H0;
-}
-
-hunits node::italic_correction()
-{
- return H0;
-}
-
-hunits node::left_italic_correction()
-{
- return H0;
-}
-
-hunits node::skew()
-{
- return H0;
-}
-
-/* vertical_extent methods */
-
-void node::vertical_extent(vunits *min, vunits *max)
-{
- vunits v = vertical_width();
- if (v < V0) {
- *min = v;
- *max = V0;
- }
- else {
- *max = v;
- *min = V0;
- }
-}
-
-void vline_node::vertical_extent(vunits *min, vunits *max)
-{
- if (n == 0)
- node::vertical_extent(min, max);
- else {
- vunits cmin, cmax;
- n->vertical_extent(&cmin, &cmax);
- vunits h = n->size();
- if (x < V0) {
- if (-x < h) {
- *min = x;
- *max = V0;
- }
- else {
- // we print the first character and then move up, so
- *max = cmax;
- // we print the last character and then move up h
- *min = cmin + h;
- if (*min > V0)
- *min = V0;
- *min += x;
- }
- }
- else {
- if (x < h) {
- *max = x;
- *min = V0;
- }
- else {
- // we move down by h and then print the first character, so
- *min = cmin + h;
- if (*min > V0)
- *min = V0;
- *max = x + cmax;
- }
- }
- }
-}
-
-/* ascii_print methods */
-
-static void ascii_print_reverse_node_list(ascii_output_file *ascii, node *n)
-{
- if (n == 0)
- return;
- ascii_print_reverse_node_list(ascii, n->next);
- n->ascii_print(ascii);
-}
-
-void dbreak_node::ascii_print(ascii_output_file *ascii)
-{
- ascii_print_reverse_node_list(ascii, none);
-}
-
-void kern_pair_node::ascii_print(ascii_output_file *ascii)
-{
- n1->ascii_print(ascii);
- n2->ascii_print(ascii);
-}
-
-void node::ascii_print(ascii_output_file *)
-{
-}
-
-void space_node::ascii_print(ascii_output_file *ascii)
-{
- if (!n.is_zero())
- ascii->outc(' ');
-}
-
-void hmotion_node::ascii_print(ascii_output_file *ascii)
-{
- // this is pretty arbitrary
- if (n >= points_to_units(2))
- ascii->outc(' ');
-}
-
-void space_char_hmotion_node::ascii_print(ascii_output_file *ascii)
-{
- ascii->outc(' ');
-}
-
-/* asciify methods */
-
-void node::asciify(macro *m)
-{
- m->append(this);
-}
-
-void glyph_node::asciify(macro *m)
-{
- unsigned char c = ci->get_asciify_code();
- if (c == 0)
- c = ci->get_ascii_code();
- if (c != 0) {
- m->append(c);
- delete this;
- }
- else
- m->append(this);
-}
-
-void kern_pair_node::asciify(macro *m)
-{
- n1->asciify(m);
- n2->asciify(m);
- n1 = n2 = 0;
- delete this;
-}
-
-static void asciify_reverse_node_list(macro *m, node *n)
-{
- if (n == 0)
- return;
- asciify_reverse_node_list(m, n->next);
- n->asciify(m);
-}
-
-void dbreak_node::asciify(macro *m)
-{
- asciify_reverse_node_list(m, none);
- none = 0;
- delete this;
-}
-
-void ligature_node::asciify(macro *m)
-{
- n1->asciify(m);
- n2->asciify(m);
- n1 = n2 = 0;
- delete this;
-}
-
-void break_char_node::asciify(macro *m)
-{
- ch->asciify(m);
- ch = 0;
- delete this;
-}
-
-void italic_corrected_node::asciify(macro *m)
-{
- n->asciify(m);
- n = 0;
- delete this;
-}
-
-void left_italic_corrected_node::asciify(macro *m)
-{
- if (n) {
- n->asciify(m);
- n = 0;
- }
- delete this;
-}
-
-void hmotion_node::asciify(macro *m)
-{
- if (was_tab) {
- m->append('\t');
- delete this;
- }
- else
- m->append(this);
-}
-
-space_char_hmotion_node::space_char_hmotion_node(hunits i, color *c,
- statem *s, int pop,
- node *nxt)
-: hmotion_node(i, c, s, pop, nxt)
-{
-}
-
-space_char_hmotion_node::space_char_hmotion_node(hunits i, color *c,
- node *nxt)
-: hmotion_node(i, c, 0, 0, nxt)
-{
-}
-
-void space_char_hmotion_node::asciify(macro *m)
-{
- m->append(ESCAPE_SPACE);
- delete this;
-}
-
-void space_node::asciify(macro *m)
-{
- if (was_escape_colon) {
- m->append(ESCAPE_COLON);
- delete this;
- }
- else
- m->append(this);
-}
-
-void word_space_node::asciify(macro *m)
-{
- for (width_list *w = orig_width; w; w = w->next)
- m->append(' ');
- delete this;
-}
-
-void unbreakable_space_node::asciify(macro *m)
-{
- m->append(ESCAPE_TILDE);
- delete this;
-}
-
-void line_start_node::asciify(macro *)
-{
- delete this;
-}
-
-void vertical_size_node::asciify(macro *)
-{
- delete this;
-}
-
-breakpoint *node::get_breakpoints(hunits /*width*/, int /*nspaces*/,
- breakpoint *rest, int /*is_inner*/)
-{
- return rest;
-}
-
-int node::nbreaks()
-{
- return 0;
-}
-
-breakpoint *space_node::get_breakpoints(hunits wd, int ns,
- breakpoint *rest, int is_inner)
-{
- if (next && next->discardable())
- return rest;
- breakpoint *bp = new breakpoint;
- bp->next = rest;
- bp->width = wd;
- bp->nspaces = ns;
- bp->hyphenated = 0;
- if (is_inner) {
- assert(rest != 0);
- bp->index = rest->index + 1;
- bp->nd = rest->nd;
- }
- else {
- bp->nd = this;
- bp->index = 0;
- }
- return bp;
-}
-
-int space_node::nbreaks()
-{
- if (next && next->discardable())
- return 0;
- else
- return 1;
-}
-
-static breakpoint *node_list_get_breakpoints(node *p, hunits *widthp,
- int ns, breakpoint *rest)
-{
- if (p != 0) {
- rest = p->get_breakpoints(*widthp,
- ns,
- node_list_get_breakpoints(p->next, widthp, ns,
- rest),
- 1);
- *widthp += p->width();
- }
- return rest;
-}
-
-breakpoint *dbreak_node::get_breakpoints(hunits wd, int ns,
- breakpoint *rest, int is_inner)
-{
- breakpoint *bp = new breakpoint;
- bp->next = rest;
- bp->width = wd;
- for (node *tem = pre; tem != 0; tem = tem->next)
- bp->width += tem->width();
- bp->nspaces = ns;
- bp->hyphenated = 1;
- if (is_inner) {
- assert(rest != 0);
- bp->index = rest->index + 1;
- bp->nd = rest->nd;
- }
- else {
- bp->nd = this;
- bp->index = 0;
- }
- return node_list_get_breakpoints(none, &wd, ns, bp);
-}
-
-int dbreak_node::nbreaks()
-{
- int i = 1;
- for (node *tem = none; tem != 0; tem = tem->next)
- i += tem->nbreaks();
- return i;
-}
-
-void node::split(int /*where*/, node ** /*prep*/, node ** /*postp*/)
-{
- assert(0);
-}
-
-void space_node::split(int where, node **pre, node **post)
-{
- assert(where == 0);
- *pre = next;
- *post = 0;
- delete this;
-}
-
-static void node_list_split(node *p, int *wherep, node **prep, node **postp)
-{
- if (p == 0)
- return;
- int nb = p->nbreaks();
- node_list_split(p->next, wherep, prep, postp);
- if (*wherep < 0) {
- p->next = *postp;
- *postp = p;
- }
- else if (*wherep < nb) {
- p->next = *prep;
- p->split(*wherep, prep, postp);
- }
- else {
- p->next = *prep;
- *prep = p;
- }
- *wherep -= nb;
-}
-
-void dbreak_node::split(int where, node **prep, node **postp)
-{
- assert(where >= 0);
- if (where == 0) {
- *postp = post;
- post = 0;
- if (pre == 0)
- *prep = next;
- else {
- node *tem;
- for (tem = pre; tem->next != 0; tem = tem->next)
- ;
- tem->next = next;
- *prep = pre;
- }
- pre = 0;
- delete this;
- }
- else {
- *prep = next;
- where -= 1;
- node_list_split(none, &where, prep, postp);
- none = 0;
- delete this;
- }
-}
-
-hyphenation_type node::get_hyphenation_type()
-{
- return HYPHEN_BOUNDARY;
-}
-
-hyphenation_type dbreak_node::get_hyphenation_type()
-{
- return HYPHEN_INHIBIT;
-}
-
-hyphenation_type kern_pair_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type dummy_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type transparent_dummy_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type hmotion_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type space_char_hmotion_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type overstrike_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-hyphenation_type space_node::get_hyphenation_type()
-{
- if (was_escape_colon)
- return HYPHEN_MIDDLE;
- return HYPHEN_BOUNDARY;
-}
-
-hyphenation_type unbreakable_space_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-int node::interpret(macro *)
-{
- return 0;
-}
-
-special_node::special_node(const macro &m, int n)
-: mac(m), no_init_string(n)
-{
- font_size fs = curenv->get_font_size();
- int char_height = curenv->get_char_height();
- int char_slant = curenv->get_char_slant();
- int fontno = env_definite_font(curenv);
- tf = font_table[fontno]->get_tfont(fs, char_height, char_slant, fontno);
- if (curenv->is_composite())
- tf = tf->get_plain();
- gcol = curenv->get_glyph_color();
- fcol = curenv->get_fill_color();
- is_special = 1;
-}
-
-special_node::special_node(const macro &m, tfont *t,
- color *gc, color *fc,
- statem *s, int pop,
- int n)
-: node(0, s, pop), mac(m), tf(t), gcol(gc), fcol(fc), no_init_string(n)
-{
- is_special = 1;
-}
-
-int special_node::same(node *n)
-{
- return mac == ((special_node *)n)->mac
- && tf == ((special_node *)n)->tf
- && gcol == ((special_node *)n)->gcol
- && fcol == ((special_node *)n)->fcol
- && no_init_string == ((special_node *)n)->no_init_string;
-}
-
-const char *special_node::type()
-{
- return "special_node";
-}
-
-int special_node::ends_sentence()
-{
- return 2;
-}
-
-int special_node::force_tprint()
-{
- return 0;
-}
-
-int special_node::is_tag()
-{
- return 0;
-}
-
-node *special_node::copy()
-{
- return new special_node(mac, tf, gcol, fcol, state, div_nest_level,
- no_init_string);
-}
-
-void special_node::tprint_start(troff_output_file *out)
-{
- out->start_special(tf, gcol, fcol, no_init_string);
-}
-
-void special_node::tprint_char(troff_output_file *out, unsigned char c)
-{
- out->special_char(c);
-}
-
-void special_node::tprint_end(troff_output_file *out)
-{
- out->end_special();
-}
-
-tfont *special_node::get_tfont()
-{
- return tf;
-}
-
-/* suppress_node */
-
-suppress_node::suppress_node(int on_or_off, int issue_limits)
-: is_on(on_or_off), emit_limits(issue_limits), filename(0), position(0),
- image_id(0)
-{
-}
-
-suppress_node::suppress_node(symbol f, char p, int id)
-: is_on(2), emit_limits(0), filename(f), position(p), image_id(id)
-{
- is_special = 1;
-}
-
-suppress_node::suppress_node(int issue_limits, int on_or_off,
- symbol f, char p, int id,
- statem *s, int pop)
-: node(0, s, pop), is_on(on_or_off), emit_limits(issue_limits), filename(f),
- position(p), image_id(id)
-{
-}
-
-int suppress_node::same(node *n)
-{
- return ((is_on == ((suppress_node *)n)->is_on)
- && (emit_limits == ((suppress_node *)n)->emit_limits)
- && (filename == ((suppress_node *)n)->filename)
- && (position == ((suppress_node *)n)->position)
- && (image_id == ((suppress_node *)n)->image_id));
-}
-
-const char *suppress_node::type()
-{
- return "suppress_node";
-}
-
-node *suppress_node::copy()
-{
- return new suppress_node(emit_limits, is_on, filename, position, image_id,
- state, div_nest_level);
-}
-
-/* tag_node */
-
-tag_node::tag_node()
-: delayed(0)
-{
- is_special = 1;
-}
-
-tag_node::tag_node(string s, int delay)
-: tag_string(s), delayed(delay)
-{
- is_special = !delay;
-}
-
-tag_node::tag_node(string s, statem *st, int pop, int delay)
-: node(0, st, pop), tag_string(s), delayed(delay)
-{
- is_special = !delay;
-}
-
-node *tag_node::copy()
-{
- return new tag_node(tag_string, state, div_nest_level, delayed);
-}
-
-void tag_node::tprint(troff_output_file *out)
-{
- if (delayed)
- out->add_to_tag_list(tag_string);
- else
- out->state.add_tag(out->fp, tag_string);
-}
-
-int tag_node::same(node *nd)
-{
- return tag_string == ((tag_node *)nd)->tag_string
- && delayed == ((tag_node *)nd)->delayed;
-}
-
-const char *tag_node::type()
-{
- return "tag_node";
-}
-
-int tag_node::force_tprint()
-{
- return !delayed;
-}
-
-int tag_node::is_tag()
-{
- return !delayed;
-}
-
-int tag_node::ends_sentence()
-{
- return 2;
-}
-
-int get_reg_int(const char *p)
-{
- reg *r = (reg *)number_reg_dictionary.lookup(p);
- units prev_value;
- if (r && (r->get_value(&prev_value)))
- return (int)prev_value;
- else
- warning(WARN_REG, "number register `%1' not defined", p);
- return 0;
-}
-
-const char *get_reg_str(const char *p)
-{
- reg *r = (reg *)number_reg_dictionary.lookup(p);
- if (r)
- return r->get_string();
- else
- warning(WARN_REG, "register `%1' not defined", p);
- return 0;
-}
-
-void suppress_node::put(troff_output_file *out, const char *s)
-{
- int i = 0;
- while (s[i] != (char)0) {
- out->special_char(s[i]);
- i++;
- }
-}
-
-/*
- * We need to remember the start of the image and its name.
- */
-
-static char last_position = 0;
-static const char *last_image_filename = 0;
-static int last_image_id = 0;
-
-inline int min(int a, int b)
-{
- return a < b ? a : b;
-}
-
-/*
- * tprint - if (is_on == 2)
- * remember current position (l, r, c, i) and filename
- * else
- * if (emit_limits)
- * if (html)
- * emit image tag
- * else
- * emit postscript bounds for image
- * else
- * if (suppress boolean differs from current state)
- * alter state
- * reset registers
- * record current page
- * set low water mark.
- */
-
-void suppress_node::tprint(troff_output_file *out)
-{
- int current_page = topdiv->get_page_number();
- // firstly check to see whether this suppress node contains
- // an image filename & position.
- if (is_on == 2) {
- // remember position and filename
- last_position = position;
- char *tem = (char *)last_image_filename;
- last_image_filename = strsave(filename.contents());
- if (tem)
- a_delete tem;
- last_image_id = image_id;
- // printf("start of image and page = %d\n", current_page);
- }
- else {
- // now check whether the suppress node requires us to issue limits.
- if (emit_limits) {
- char name[8192];
- // remember that the filename will contain a %d in which the
- // last_image_id is placed
- if (last_image_filename == (char *) 0)
- *name = '\0';
- else
- sprintf(name, last_image_filename, last_image_id);
- if (is_html) {
- switch (last_position) {
- case 'c':
- out->start_special();
- put(out, "devtag:.centered-image");
- break;
- case 'r':
- out->start_special();
- put(out, "devtag:.right-image");
- break;
- case 'l':
- out->start_special();
- put(out, "devtag:.left-image");
- break;
- case 'i':
- ;
- default:
- ;
- }
- out->end_special();
- out->start_special();
- put(out, "devtag:.auto-image ");
- put(out, name);
- out->end_special();
- }
- else {
- // postscript (or other device)
- if (suppress_start_page > 0 && current_page != suppress_start_page)
- error("suppression limit registers span more than one page;\n"
- "image description %1 will be wrong", image_no);
- // if (topdiv->get_page_number() != suppress_start_page)
- // fprintf(stderr, "end of image and topdiv page = %d and suppress_start_page = %d\n",
- // topdiv->get_page_number(), suppress_start_page);
-
- // remember that the filename will contain a %d in which the
- // image_no is placed
- fprintf(stderr,
- "grohtml-info:page %d %d %d %d %d %d %s %d %d %s\n",
- topdiv->get_page_number(),
- get_reg_int("opminx"), get_reg_int("opminy"),
- get_reg_int("opmaxx"), get_reg_int("opmaxy"),
- // page offset + line length
- get_reg_int(".o") + get_reg_int(".l"),
- name, hresolution, vresolution, get_reg_str(".F"));
- fflush(stderr);
- }
- }
- else {
- if (is_on) {
- out->on();
- // lastly we reset the output registers
- reset_output_registers();
- }
- else
- out->off();
- suppress_start_page = current_page;
- }
- }
-}
-
-int suppress_node::force_tprint()
-{
- return is_on;
-}
-
-int suppress_node::is_tag()
-{
- return is_on;
-}
-
-hunits suppress_node::width()
-{
- return H0;
-}
-
-/* composite_node */
-
-class composite_node : public charinfo_node {
- node *n;
- tfont *tf;
-public:
- composite_node(node *, charinfo *, tfont *, statem *, int, node * = 0);
- ~composite_node();
- node *copy();
- hunits width();
- node *last_char_node();
- units size();
- void tprint(troff_output_file *);
- hyphenation_type get_hyphenation_type();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- node *add_self(node *, hyphen_list **);
- tfont *get_tfont();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- void vertical_extent(vunits *, vunits *);
- vunits vertical_width();
-};
-
-composite_node::composite_node(node *p, charinfo *c, tfont *t, statem *s,
- int pop, node *x)
-: charinfo_node(c, s, pop, x), n(p), tf(t)
-{
-}
-
-composite_node::~composite_node()
-{
- delete_node_list(n);
-}
-
-node *composite_node::copy()
-{
- return new composite_node(copy_node_list(n), ci, tf, state, div_nest_level);
-}
-
-hunits composite_node::width()
-{
- hunits x;
- if (tf->get_constant_space(&x))
- return x;
- x = H0;
- for (node *tem = n; tem; tem = tem->next)
- x += tem->width();
- hunits offset;
- if (tf->get_bold(&offset))
- x += offset;
- x += tf->get_track_kern();
- return x;
-}
-
-node *composite_node::last_char_node()
-{
- return this;
-}
-
-vunits composite_node::vertical_width()
-{
- vunits v = V0;
- for (node *tem = n; tem; tem = tem->next)
- v += tem->vertical_width();
- return v;
-}
-
-units composite_node::size()
-{
- return tf->get_size().to_units();
-}
-
-hyphenation_type composite_node::get_hyphenation_type()
-{
- return HYPHEN_MIDDLE;
-}
-
-void composite_node::asciify(macro *m)
-{
- unsigned char c = ci->get_asciify_code();
- if (c == 0)
- c = ci->get_ascii_code();
- if (c != 0) {
- m->append(c);
- delete this;
- }
- else
- m->append(this);
-}
-
-void composite_node::ascii_print(ascii_output_file *ascii)
-{
- unsigned char c = ci->get_ascii_code();
- if (c != 0)
- ascii->outc(c);
- else
- ascii->outs(ci->nm.contents());
-
-}
-
-hyphen_list *composite_node::get_hyphen_list(hyphen_list *tail, int *count)
-{
- (*count)++;
- return new hyphen_list(ci->get_hyphenation_code(), tail);
-}
-
-node *composite_node::add_self(node *nn, hyphen_list **p)
-{
- assert(ci->get_hyphenation_code() == (*p)->hyphenation_code);
- next = nn;
- nn = this;
- if ((*p)->hyphen)
- nn = nn->add_discretionary_hyphen();
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return nn;
-}
-
-tfont *composite_node::get_tfont()
-{
- return tf;
-}
-
-node *reverse_node_list(node *n)
-{
- node *r = 0;
- while (n) {
- node *tem = n;
- n = n->next;
- tem->next = r;
- r = tem;
- }
- return r;
-}
-
-void composite_node::vertical_extent(vunits *minimum, vunits *maximum)
-{
- n = reverse_node_list(n);
- node_list_vertical_extent(n, minimum, maximum);
- n = reverse_node_list(n);
-}
-
-width_list::width_list(hunits w, hunits s)
-: width(w), sentence_width(s), next(0)
-{
-}
-
-width_list::width_list(width_list *w)
-: width(w->width), sentence_width(w->sentence_width), next(0)
-{
-}
-
-word_space_node::word_space_node(hunits d, color *c, width_list *w, node *x)
-: space_node(d, c, x), orig_width(w), unformat(0)
-{
-}
-
-word_space_node::word_space_node(hunits d, int s, color *c, width_list *w,
- int flag, statem *st, int pop, node *x)
-: space_node(d, s, 0, c, st, pop, x), orig_width(w), unformat(flag)
-{
-}
-
-word_space_node::~word_space_node()
-{
- width_list *w = orig_width;
- while (w != 0) {
- width_list *tmp = w;
- w = w->next;
- delete tmp;
- }
-}
-
-node *word_space_node::copy()
-{
- assert(orig_width != 0);
- width_list *w_old_curr = orig_width;
- width_list *w_new_curr = new width_list(w_old_curr);
- width_list *w_new = w_new_curr;
- w_old_curr = w_old_curr->next;
- while (w_old_curr != 0) {
- w_new_curr->next = new width_list(w_old_curr);
- w_new_curr = w_new_curr->next;
- w_old_curr = w_old_curr->next;
- }
- return new word_space_node(n, set, col, w_new, unformat, state,
- div_nest_level);
-}
-
-int word_space_node::set_unformat_flag()
-{
- unformat = 1;
- return 1;
-}
-
-void word_space_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- out->word_marker();
- out->right(n);
-}
-
-int word_space_node::merge_space(hunits h, hunits sw, hunits ssw)
-{
- n += h;
- assert(orig_width != 0);
- width_list *w = orig_width;
- for (; w->next; w = w->next)
- ;
- w->next = new width_list(sw, ssw);
- return 1;
-}
-
-unbreakable_space_node::unbreakable_space_node(hunits d, color *c, node *x)
-: word_space_node(d, c, 0, x)
-{
-}
-
-unbreakable_space_node::unbreakable_space_node(hunits d, int s,
- color *c, statem *st, int pop,
- node *x)
-: word_space_node(d, s, c, 0, 0, st, pop, x)
-{
-}
-
-node *unbreakable_space_node::copy()
-{
- return new unbreakable_space_node(n, set, col, state, div_nest_level);
-}
-
-int unbreakable_space_node::force_tprint()
-{
- return 0;
-}
-
-int unbreakable_space_node::is_tag()
-{
- return 0;
-}
-
-breakpoint *unbreakable_space_node::get_breakpoints(hunits, int,
- breakpoint *rest, int)
-{
- return rest;
-}
-
-int unbreakable_space_node::nbreaks()
-{
- return 0;
-}
-
-void unbreakable_space_node::split(int, node **, node **)
-{
- assert(0);
-}
-
-int unbreakable_space_node::merge_space(hunits, hunits, hunits)
-{
- return 0;
-}
-
-hvpair::hvpair()
-{
-}
-
-draw_node::draw_node(char c, hvpair *p, int np, font_size s,
- color *gc, color *fc)
-: npoints(np), sz(s), gcol(gc), fcol(fc), code(c)
-{
- point = new hvpair[npoints];
- for (int i = 0; i < npoints; i++)
- point[i] = p[i];
-}
-
-draw_node::draw_node(char c, hvpair *p, int np, font_size s,
- color *gc, color *fc, statem *st, int pop)
-: node(0, st, pop), npoints(np), sz(s), gcol(gc), fcol(fc), code(c)
-{
- point = new hvpair[npoints];
- for (int i = 0; i < npoints; i++)
- point[i] = p[i];
-}
-
-int draw_node::same(node *n)
-{
- draw_node *nd = (draw_node *)n;
- if (code != nd->code || npoints != nd->npoints || sz != nd->sz
- || gcol != nd->gcol || fcol != nd->fcol)
- return 0;
- for (int i = 0; i < npoints; i++)
- if (point[i].h != nd->point[i].h || point[i].v != nd->point[i].v)
- return 0;
- return 1;
-}
-
-const char *draw_node::type()
-{
- return "draw_node";
-}
-
-int draw_node::force_tprint()
-{
- return 0;
-}
-
-int draw_node::is_tag()
-{
- return 0;
-}
-
-draw_node::~draw_node()
-{
- if (point)
- a_delete point;
-}
-
-hunits draw_node::width()
-{
- hunits x = H0;
- for (int i = 0; i < npoints; i++)
- x += point[i].h;
- return x;
-}
-
-vunits draw_node::vertical_width()
-{
- if (code == 'e')
- return V0;
- vunits x = V0;
- for (int i = 0; i < npoints; i++)
- x += point[i].v;
- return x;
-}
-
-node *draw_node::copy()
-{
- return new draw_node(code, point, npoints, sz, gcol, fcol, state,
- div_nest_level);
-}
-
-void draw_node::tprint(troff_output_file *out)
-{
- out->draw(code, point, npoints, sz, gcol, fcol);
-}
-
-/* tprint methods */
-
-void glyph_node::tprint(troff_output_file *out)
-{
- tfont *ptf = tf->get_plain();
- if (ptf == tf)
- out->put_char_width(ci, ptf, gcol, fcol, width(), H0);
- else {
- hunits offset;
- int bold = tf->get_bold(&offset);
- hunits w = ptf->get_width(ci);
- hunits k = H0;
- hunits x;
- int cs = tf->get_constant_space(&x);
- if (cs) {
- x -= w;
- if (bold)
- x -= offset;
- hunits x2 = x/2;
- out->right(x2);
- k = x - x2;
- }
- else
- k = tf->get_track_kern();
- if (bold) {
- out->put_char(ci, ptf, gcol, fcol);
- out->right(offset);
- }
- out->put_char_width(ci, ptf, gcol, fcol, w, k);
- }
-}
-
-void glyph_node::zero_width_tprint(troff_output_file *out)
-{
- tfont *ptf = tf->get_plain();
- hunits offset;
- int bold = tf->get_bold(&offset);
- hunits x;
- int cs = tf->get_constant_space(&x);
- if (cs) {
- x -= ptf->get_width(ci);
- if (bold)
- x -= offset;
- x = x/2;
- out->right(x);
- }
- out->put_char(ci, ptf, gcol, fcol);
- if (bold) {
- out->right(offset);
- out->put_char(ci, ptf, gcol, fcol);
- out->right(-offset);
- }
- if (cs)
- out->right(-x);
-}
-
-void break_char_node::tprint(troff_output_file *t)
-{
- ch->tprint(t);
-}
-
-void break_char_node::zero_width_tprint(troff_output_file *t)
-{
- ch->zero_width_tprint(t);
-}
-
-void hline_node::tprint(troff_output_file *out)
-{
- if (x < H0) {
- out->right(x);
- x = -x;
- }
- if (n == 0) {
- out->right(x);
- return;
- }
- hunits w = n->width();
- if (w <= H0) {
- error("horizontal line drawing character must have positive width");
- out->right(x);
- return;
- }
- int i = int(x/w);
- if (i == 0) {
- hunits xx = x - w;
- hunits xx2 = xx/2;
- out->right(xx2);
- if (out->is_on())
- n->tprint(out);
- out->right(xx - xx2);
- }
- else {
- hunits rem = x - w*i;
- if (rem > H0) {
- if (n->overlaps_horizontally()) {
- if (out->is_on())
- n->tprint(out);
- out->right(rem - w);
- } else
- out->right(rem);
- }
- while (--i >= 0)
- if (out->is_on())
- n->tprint(out);
- }
-}
-
-void vline_node::tprint(troff_output_file *out)
-{
- if (n == 0) {
- out->down(x);
- return;
- }
- vunits h = n->size();
- int overlaps = n->overlaps_vertically();
- vunits y = x;
- if (y < V0) {
- y = -y;
- int i = y / h;
- vunits rem = y - i*h;
- if (i == 0) {
- out->right(n->width());
- out->down(-rem);
- }
- else {
- while (--i > 0) {
- n->zero_width_tprint(out);
- out->down(-h);
- }
- if (overlaps) {
- n->zero_width_tprint(out);
- out->down(-rem);
- if (out->is_on())
- n->tprint(out);
- out->down(-h);
- }
- else {
- if (out->is_on())
- n->tprint(out);
- out->down(-h - rem);
- }
- }
- }
- else {
- int i = y / h;
- vunits rem = y - i*h;
- if (i == 0) {
- out->down(rem);
- out->right(n->width());
- }
- else {
- out->down(h);
- if (overlaps)
- n->zero_width_tprint(out);
- out->down(rem);
- while (--i > 0) {
- n->zero_width_tprint(out);
- out->down(h);
- }
- if (out->is_on())
- n->tprint(out);
- }
- }
-}
-
-void zero_width_node::tprint(troff_output_file *out)
-{
- if (!n)
- return;
- if (!n->next) {
- n->zero_width_tprint(out);
- return;
- }
- int hpos = out->get_hpos();
- int vpos = out->get_vpos();
- node *tem = n;
- while (tem) {
- tem->tprint(out);
- tem = tem->next;
- }
- out->moveto(hpos, vpos);
-}
-
-void overstrike_node::tprint(troff_output_file *out)
-{
- hunits pos = H0;
- for (node *tem = list; tem; tem = tem->next) {
- hunits x = (max_width - tem->width())/2;
- out->right(x - pos);
- pos = x;
- tem->zero_width_tprint(out);
- }
- out->right(max_width - pos);
-}
-
-void bracket_node::tprint(troff_output_file *out)
-{
- if (list == 0)
- return;
- int npieces = 0;
- node *tem;
- for (tem = list; tem; tem = tem->next)
- ++npieces;
- vunits h = list->size();
- vunits totalh = h*npieces;
- vunits y = (totalh - h)/2;
- out->down(y);
- for (tem = list; tem; tem = tem->next) {
- tem->zero_width_tprint(out);
- out->down(-h);
- }
- out->right(max_width);
- out->down(totalh - y);
-}
-
-void node::tprint(troff_output_file *)
-{
-}
-
-void node::zero_width_tprint(troff_output_file *out)
-{
- int hpos = out->get_hpos();
- int vpos = out->get_vpos();
- tprint(out);
- out->moveto(hpos, vpos);
-}
-
-void space_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- out->right(n);
-}
-
-void hmotion_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- out->right(n);
-}
-
-void space_char_hmotion_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- if (is_html) {
- // we emit the space width as a negative glyph index
- out->flush_tbuf();
- out->do_motion();
- out->put('N');
- out->put(-n.to_units());
- out->put('\n');
- }
- out->right(n);
-}
-
-void vmotion_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- out->down(n);
-}
-
-void kern_pair_node::tprint(troff_output_file *out)
-{
- n1->tprint(out);
- out->right(amount);
- n2->tprint(out);
-}
-
-static void tprint_reverse_node_list(troff_output_file *out, node *n)
-{
- if (n == 0)
- return;
- tprint_reverse_node_list(out, n->next);
- n->tprint(out);
-}
-
-void dbreak_node::tprint(troff_output_file *out)
-{
- tprint_reverse_node_list(out, none);
-}
-
-void composite_node::tprint(troff_output_file *out)
-{
- hunits bold_offset;
- int is_bold = tf->get_bold(&bold_offset);
- hunits track_kern = tf->get_track_kern();
- hunits constant_space;
- int is_constant_spaced = tf->get_constant_space(&constant_space);
- hunits x = H0;
- if (is_constant_spaced) {
- x = constant_space;
- for (node *tem = n; tem; tem = tem->next)
- x -= tem->width();
- if (is_bold)
- x -= bold_offset;
- hunits x2 = x/2;
- out->right(x2);
- x -= x2;
- }
- if (is_bold) {
- int hpos = out->get_hpos();
- int vpos = out->get_vpos();
- tprint_reverse_node_list(out, n);
- out->moveto(hpos, vpos);
- out->right(bold_offset);
- }
- tprint_reverse_node_list(out, n);
- if (is_constant_spaced)
- out->right(x);
- else
- out->right(track_kern);
-}
-
-node *make_composite_node(charinfo *s, environment *env)
-{
- int fontno = env_definite_font(env);
- if (fontno < 0) {
- error("no current font");
- return 0;
- }
- assert(fontno < font_table_size && font_table[fontno] != 0);
- node *n = charinfo_to_node_list(s, env);
- font_size fs = env->get_font_size();
- int char_height = env->get_char_height();
- int char_slant = env->get_char_slant();
- tfont *tf = font_table[fontno]->get_tfont(fs, char_height, char_slant,
- fontno);
- if (env->is_composite())
- tf = tf->get_plain();
- return new composite_node(n, s, tf, 0, 0, 0);
-}
-
-node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0)
-{
- int fontno = env_definite_font(env);
- if (fontno < 0) {
- error("no current font");
- return 0;
- }
- assert(fontno < font_table_size && font_table[fontno] != 0);
- int fn = fontno;
- int found = font_table[fontno]->contains(s);
- if (!found) {
- macro *mac = s->get_macro();
- if (mac && s->is_fallback())
- return make_composite_node(s, env);
- if (s->numbered()) {
- if (!no_error_message)
- warning(WARN_CHAR, "can't find numbered character %1",
- s->get_number());
- return 0;
- }
- special_font_list *sf = font_table[fontno]->sf;
- while (sf != 0 && !found) {
- fn = sf->n;
- if (font_table[fn])
- found = font_table[fn]->contains(s);
- sf = sf->next;
- }
- if (!found) {
- symbol f = font_table[fontno]->get_name();
- string gl(f.contents());
- gl += ' ';
- gl += s->nm.contents();
- gl += '\0';
- charinfo *ci = get_charinfo(symbol(gl.contents()));
- if (ci && ci->get_macro())
- return make_composite_node(ci, env);
- }
- if (!found) {
- sf = global_special_fonts;
- while (sf != 0 && !found) {
- fn = sf->n;
- if (font_table[fn])
- found = font_table[fn]->contains(s);
- sf = sf->next;
- }
- }
- if (!found)
- if (mac && s->is_special())
- return make_composite_node(s, env);
- if (!found) {
- for (fn = 0; fn < font_table_size; fn++)
- if (font_table[fn]
- && font_table[fn]->is_special()
- && font_table[fn]->contains(s)) {
- found = 1;
- break;
- }
- }
- if (!found) {
- if (!no_error_message && s->first_time_not_found()) {
- unsigned char input_code = s->get_ascii_code();
- if (input_code != 0) {
- if (csgraph(input_code))
- warning(WARN_CHAR, "can't find character `%1'", input_code);
- else
- warning(WARN_CHAR, "can't find character with input code %1",
- int(input_code));
- }
- else if (s->nm.contents())
- warning(WARN_CHAR, "can't find special character `%1'",
- s->nm.contents());
- }
- return 0;
- }
- }
- font_size fs = env->get_font_size();
- int char_height = env->get_char_height();
- int char_slant = env->get_char_slant();
- tfont *tf = font_table[fontno]->get_tfont(fs, char_height, char_slant, fn);
- if (env->is_composite())
- tf = tf->get_plain();
- color *gcol = env->get_glyph_color();
- color *fcol = env->get_fill_color();
- return new glyph_node(s, tf, gcol, fcol, 0, 0);
-}
-
-node *make_node(charinfo *ci, environment *env)
-{
- switch (ci->get_special_translation()) {
- case charinfo::TRANSLATE_SPACE:
- return new space_char_hmotion_node(env->get_space_width(),
- env->get_fill_color());
- case charinfo::TRANSLATE_STRETCHABLE_SPACE:
- return new unbreakable_space_node(env->get_space_width(),
- env->get_fill_color());
- case charinfo::TRANSLATE_DUMMY:
- return new dummy_node;
- case charinfo::TRANSLATE_HYPHEN_INDICATOR:
- error("translation to \\% ignored in this context");
- break;
- }
- charinfo *tem = ci->get_translation();
- if (tem)
- ci = tem;
- macro *mac = ci->get_macro();
- if (mac && ci->is_normal())
- return make_composite_node(ci, env);
- else
- return make_glyph_node(ci, env);
-}
-
-int character_exists(charinfo *ci, environment *env)
-{
- if (ci->get_special_translation() != charinfo::TRANSLATE_NONE)
- return 1;
- charinfo *tem = ci->get_translation();
- if (tem)
- ci = tem;
- if (ci->get_macro())
- return 1;
- node *nd = make_glyph_node(ci, env, 1);
- if (nd) {
- delete nd;
- return 1;
- }
- return 0;
-}
-
-node *node::add_char(charinfo *ci, environment *env,
- hunits *widthp, int *spacep, node **glyph_comp_np)
-{
- node *res;
- switch (ci->get_special_translation()) {
- case charinfo::TRANSLATE_SPACE:
- res = new space_char_hmotion_node(env->get_space_width(),
- env->get_fill_color(), this);
- *widthp += res->width();
- return res;
- case charinfo::TRANSLATE_STRETCHABLE_SPACE:
- res = new unbreakable_space_node(env->get_space_width(),
- env->get_fill_color(), this);
- res->freeze_space();
- *widthp += res->width();
- *spacep += res->nspaces();
- return res;
- case charinfo::TRANSLATE_DUMMY:
- return new dummy_node(this);
- case charinfo::TRANSLATE_HYPHEN_INDICATOR:
- return add_discretionary_hyphen();
- }
- charinfo *tem = ci->get_translation();
- if (tem)
- ci = tem;
- macro *mac = ci->get_macro();
- if (mac && ci->is_normal()) {
- res = make_composite_node(ci, env);
- if (res) {
- res->next = this;
- *widthp += res->width();
- if (glyph_comp_np)
- *glyph_comp_np = res;
- }
- else {
- if (glyph_comp_np)
- *glyph_comp_np = res;
- return this;
- }
- }
- else {
- node *gn = make_glyph_node(ci, env);
- if (gn == 0)
- return this;
- else {
- hunits old_width = width();
- node *p = gn->merge_self(this);
- if (p == 0) {
- *widthp += gn->width();
- gn->next = this;
- res = gn;
- }
- else {
- *widthp += p->width() - old_width;
- res = p;
- }
- if (glyph_comp_np)
- *glyph_comp_np = res;
- }
- }
- int break_code = 0;
- if (ci->can_break_before())
- break_code = 1;
- if (ci->can_break_after())
- break_code |= 2;
- if (break_code) {
- node *next1 = res->next;
- res->next = 0;
- res = new break_char_node(res, break_code, env->get_fill_color(), next1);
- }
- return res;
-}
-
-#ifdef __GNUG__
-inline
-#endif
-int same_node(node *n1, node *n2)
-{
- if (n1 != 0) {
- if (n2 != 0)
- return n1->type() == n2->type() && n1->same(n2);
- else
- return 0;
- }
- else
- return n2 == 0;
-}
-
-int same_node_list(node *n1, node *n2)
-{
- while (n1 && n2) {
- if (n1->type() != n2->type() || !n1->same(n2))
- return 0;
- n1 = n1->next;
- n2 = n2->next;
- }
- return !n1 && !n2;
-}
-
-int extra_size_node::same(node *nd)
-{
- return n == ((extra_size_node *)nd)->n;
-}
-
-const char *extra_size_node::type()
-{
- return "extra_size_node";
-}
-
-int extra_size_node::force_tprint()
-{
- return 0;
-}
-
-int extra_size_node::is_tag()
-{
- return 0;
-}
-
-int vertical_size_node::same(node *nd)
-{
- return n == ((vertical_size_node *)nd)->n;
-}
-
-const char *vertical_size_node::type()
-{
- return "vertical_size_node";
-}
-
-int vertical_size_node::set_unformat_flag()
-{
- return 0;
-}
-
-int vertical_size_node::force_tprint()
-{
- return 0;
-}
-
-int vertical_size_node::is_tag()
-{
- return 0;
-}
-
-int hmotion_node::same(node *nd)
-{
- return n == ((hmotion_node *)nd)->n
- && col == ((hmotion_node *)nd)->col;
-}
-
-const char *hmotion_node::type()
-{
- return "hmotion_node";
-}
-
-int hmotion_node::set_unformat_flag()
-{
- unformat = 1;
- return 1;
-}
-
-int hmotion_node::force_tprint()
-{
- return 0;
-}
-
-int hmotion_node::is_tag()
-{
- return 0;
-}
-
-node *hmotion_node::add_self(node *nd, hyphen_list **p)
-{
- next = nd;
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return this;
-}
-
-hyphen_list *hmotion_node::get_hyphen_list(hyphen_list *tail, int *)
-{
- return new hyphen_list(0, tail);
-}
-
-int space_char_hmotion_node::same(node *nd)
-{
- return n == ((space_char_hmotion_node *)nd)->n
- && col == ((space_char_hmotion_node *)nd)->col;
-}
-
-const char *space_char_hmotion_node::type()
-{
- return "space_char_hmotion_node";
-}
-
-int space_char_hmotion_node::force_tprint()
-{
- return 0;
-}
-
-int space_char_hmotion_node::is_tag()
-{
- return 0;
-}
-
-node *space_char_hmotion_node::add_self(node *nd, hyphen_list **p)
-{
- next = nd;
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return this;
-}
-
-hyphen_list *space_char_hmotion_node::get_hyphen_list(hyphen_list *tail,
- int *)
-{
- return new hyphen_list(0, tail);
-}
-
-int vmotion_node::same(node *nd)
-{
- return n == ((vmotion_node *)nd)->n
- && col == ((vmotion_node *)nd)->col;
-}
-
-const char *vmotion_node::type()
-{
- return "vmotion_node";
-}
-
-int vmotion_node::force_tprint()
-{
- return 0;
-}
-
-int vmotion_node::is_tag()
-{
- return 0;
-}
-
-int hline_node::same(node *nd)
-{
- return x == ((hline_node *)nd)->x && same_node(n, ((hline_node *)nd)->n);
-}
-
-const char *hline_node::type()
-{
- return "hline_node";
-}
-
-int hline_node::force_tprint()
-{
- return 0;
-}
-
-int hline_node::is_tag()
-{
- return 0;
-}
-
-int vline_node::same(node *nd)
-{
- return x == ((vline_node *)nd)->x && same_node(n, ((vline_node *)nd)->n);
-}
-
-const char *vline_node::type()
-{
- return "vline_node";
-}
-
-int vline_node::force_tprint()
-{
- return 0;
-}
-
-int vline_node::is_tag()
-{
- return 0;
-}
-
-int dummy_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *dummy_node::type()
-{
- return "dummy_node";
-}
-
-int dummy_node::force_tprint()
-{
- return 0;
-}
-
-int dummy_node::is_tag()
-{
- return 0;
-}
-
-int transparent_dummy_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *transparent_dummy_node::type()
-{
- return "transparent_dummy_node";
-}
-
-int transparent_dummy_node::force_tprint()
-{
- return 0;
-}
-
-int transparent_dummy_node::is_tag()
-{
- return 0;
-}
-
-int transparent_dummy_node::ends_sentence()
-{
- return 2;
-}
-
-int zero_width_node::same(node *nd)
-{
- return same_node_list(n, ((zero_width_node *)nd)->n);
-}
-
-const char *zero_width_node::type()
-{
- return "zero_width_node";
-}
-
-int zero_width_node::force_tprint()
-{
- return 0;
-}
-
-int zero_width_node::is_tag()
-{
- return 0;
-}
-
-int italic_corrected_node::same(node *nd)
-{
- return (x == ((italic_corrected_node *)nd)->x
- && same_node(n, ((italic_corrected_node *)nd)->n));
-}
-
-const char *italic_corrected_node::type()
-{
- return "italic_corrected_node";
-}
-
-int italic_corrected_node::force_tprint()
-{
- return 0;
-}
-
-int italic_corrected_node::is_tag()
-{
- return 0;
-}
-
-left_italic_corrected_node::left_italic_corrected_node(node *xx)
-: node(xx), n(0)
-{
-}
-
-left_italic_corrected_node::left_italic_corrected_node(statem *s, int pop,
- node *xx)
-: node(xx, s, pop), n(0)
-{
-}
-
-left_italic_corrected_node::~left_italic_corrected_node()
-{
- delete n;
-}
-
-node *left_italic_corrected_node::merge_glyph_node(glyph_node *gn)
-{
- if (n == 0) {
- hunits lic = gn->left_italic_correction();
- if (!lic.is_zero()) {
- x = lic;
- n = gn;
- return this;
- }
- }
- else {
- node *nd = n->merge_glyph_node(gn);
- if (nd) {
- n = nd;
- x = n->left_italic_correction();
- return this;
- }
- }
- return 0;
-}
-
-node *left_italic_corrected_node::copy()
-{
- left_italic_corrected_node *nd =
- new left_italic_corrected_node(state, div_nest_level);
- if (n) {
- nd->n = n->copy();
- nd->x = x;
- }
- return nd;
-}
-
-void left_italic_corrected_node::tprint(troff_output_file *out)
-{
- if (n) {
- out->right(x);
- n->tprint(out);
- }
-}
-
-const char *left_italic_corrected_node::type()
-{
- return "left_italic_corrected_node";
-}
-
-int left_italic_corrected_node::force_tprint()
-{
- return 0;
-}
-
-int left_italic_corrected_node::is_tag()
-{
- return 0;
-}
-
-int left_italic_corrected_node::same(node *nd)
-{
- return (x == ((left_italic_corrected_node *)nd)->x
- && same_node(n, ((left_italic_corrected_node *)nd)->n));
-}
-
-void left_italic_corrected_node::ascii_print(ascii_output_file *out)
-{
- if (n)
- n->ascii_print(out);
-}
-
-hunits left_italic_corrected_node::width()
-{
- return n ? n->width() + x : H0;
-}
-
-void left_italic_corrected_node::vertical_extent(vunits *minimum,
- vunits *maximum)
-{
- if (n)
- n->vertical_extent(minimum, maximum);
- else
- node::vertical_extent(minimum, maximum);
-}
-
-hunits left_italic_corrected_node::skew()
-{
- return n ? n->skew() + x/2 : H0;
-}
-
-hunits left_italic_corrected_node::subscript_correction()
-{
- return n ? n->subscript_correction() : H0;
-}
-
-hunits left_italic_corrected_node::italic_correction()
-{
- return n ? n->italic_correction() : H0;
-}
-
-int left_italic_corrected_node::ends_sentence()
-{
- return n ? n->ends_sentence() : 0;
-}
-
-int left_italic_corrected_node::overlaps_horizontally()
-{
- return n ? n->overlaps_horizontally() : 0;
-}
-
-int left_italic_corrected_node::overlaps_vertically()
-{
- return n ? n->overlaps_vertically() : 0;
-}
-
-node *left_italic_corrected_node::last_char_node()
-{
- return n ? n->last_char_node() : 0;
-}
-
-tfont *left_italic_corrected_node::get_tfont()
-{
- return n ? n->get_tfont() : 0;
-}
-
-hyphenation_type left_italic_corrected_node::get_hyphenation_type()
-{
- if (n)
- return n->get_hyphenation_type();
- else
- return HYPHEN_MIDDLE;
-}
-
-hyphen_list *left_italic_corrected_node::get_hyphen_list(hyphen_list *tail,
- int *count)
-{
- return n ? n->get_hyphen_list(tail, count) : tail;
-}
-
-node *left_italic_corrected_node::add_self(node *nd, hyphen_list **p)
-{
- if (n) {
- nd = new left_italic_corrected_node(state, div_nest_level, nd);
- nd = n->add_self(nd, p);
- n = 0;
- delete this;
- }
- return nd;
-}
-
-int left_italic_corrected_node::character_type()
-{
- return n ? n->character_type() : 0;
-}
-
-int overstrike_node::same(node *nd)
-{
- return same_node_list(list, ((overstrike_node *)nd)->list);
-}
-
-const char *overstrike_node::type()
-{
- return "overstrike_node";
-}
-
-int overstrike_node::force_tprint()
-{
- return 0;
-}
-
-int overstrike_node::is_tag()
-{
- return 0;
-}
-
-node *overstrike_node::add_self(node *n, hyphen_list **p)
-{
- next = n;
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return this;
-}
-
-hyphen_list *overstrike_node::get_hyphen_list(hyphen_list *tail, int *)
-{
- return new hyphen_list(0, tail);
-}
-
-int bracket_node::same(node *nd)
-{
- return same_node_list(list, ((bracket_node *)nd)->list);
-}
-
-const char *bracket_node::type()
-{
- return "bracket_node";
-}
-
-int bracket_node::force_tprint()
-{
- return 0;
-}
-
-int bracket_node::is_tag()
-{
- return 0;
-}
-
-int composite_node::same(node *nd)
-{
- return ci == ((composite_node *)nd)->ci
- && same_node_list(n, ((composite_node *)nd)->n);
-}
-
-const char *composite_node::type()
-{
- return "composite_node";
-}
-
-int composite_node::force_tprint()
-{
- return 0;
-}
-
-int composite_node::is_tag()
-{
- return 0;
-}
-
-int glyph_node::same(node *nd)
-{
- return ci == ((glyph_node *)nd)->ci
- && tf == ((glyph_node *)nd)->tf
- && gcol == ((glyph_node *)nd)->gcol
- && fcol == ((glyph_node *)nd)->fcol;
-}
-
-const char *glyph_node::type()
-{
- return "glyph_node";
-}
-
-int glyph_node::force_tprint()
-{
- return 0;
-}
-
-int glyph_node::is_tag()
-{
- return 0;
-}
-
-int ligature_node::same(node *nd)
-{
- return (same_node(n1, ((ligature_node *)nd)->n1)
- && same_node(n2, ((ligature_node *)nd)->n2)
- && glyph_node::same(nd));
-}
-
-const char *ligature_node::type()
-{
- return "ligature_node";
-}
-
-int ligature_node::force_tprint()
-{
- return 0;
-}
-
-int ligature_node::is_tag()
-{
- return 0;
-}
-
-int kern_pair_node::same(node *nd)
-{
- return (amount == ((kern_pair_node *)nd)->amount
- && same_node(n1, ((kern_pair_node *)nd)->n1)
- && same_node(n2, ((kern_pair_node *)nd)->n2));
-}
-
-const char *kern_pair_node::type()
-{
- return "kern_pair_node";
-}
-
-int kern_pair_node::force_tprint()
-{
- return 0;
-}
-
-int kern_pair_node::is_tag()
-{
- return 0;
-}
-
-int dbreak_node::same(node *nd)
-{
- return (same_node_list(none, ((dbreak_node *)nd)->none)
- && same_node_list(pre, ((dbreak_node *)nd)->pre)
- && same_node_list(post, ((dbreak_node *)nd)->post));
-}
-
-const char *dbreak_node::type()
-{
- return "dbreak_node";
-}
-
-int dbreak_node::force_tprint()
-{
- return 0;
-}
-
-int dbreak_node::is_tag()
-{
- return 0;
-}
-
-int break_char_node::same(node *nd)
-{
- return break_code == ((break_char_node *)nd)->break_code
- && col == ((break_char_node *)nd)->col
- && same_node(ch, ((break_char_node *)nd)->ch);
-}
-
-const char *break_char_node::type()
-{
- return "break_char_node";
-}
-
-int break_char_node::force_tprint()
-{
- return 0;
-}
-
-int break_char_node::is_tag()
-{
- return 0;
-}
-
-int line_start_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *line_start_node::type()
-{
- return "line_start_node";
-}
-
-int line_start_node::force_tprint()
-{
- return 0;
-}
-
-int line_start_node::is_tag()
-{
- return 0;
-}
-
-int space_node::same(node *nd)
-{
- return n == ((space_node *)nd)->n
- && set == ((space_node *)nd)->set
- && col == ((space_node *)nd)->col;
-}
-
-const char *space_node::type()
-{
- return "space_node";
-}
-
-int word_space_node::same(node *nd)
-{
- return n == ((word_space_node *)nd)->n
- && set == ((word_space_node *)nd)->set
- && col == ((word_space_node *)nd)->col;
-}
-
-const char *word_space_node::type()
-{
- return "word_space_node";
-}
-
-int word_space_node::force_tprint()
-{
- return 0;
-}
-
-int word_space_node::is_tag()
-{
- return 0;
-}
-
-void unbreakable_space_node::tprint(troff_output_file *out)
-{
- out->fill_color(col);
- if (is_html) {
- // we emit the space width as a negative glyph index
- out->flush_tbuf();
- out->do_motion();
- out->put('N');
- out->put(-n.to_units());
- out->put('\n');
- }
- out->right(n);
-}
-
-int unbreakable_space_node::same(node *nd)
-{
- return n == ((unbreakable_space_node *)nd)->n
- && set == ((unbreakable_space_node *)nd)->set
- && col == ((unbreakable_space_node *)nd)->col;
-}
-
-const char *unbreakable_space_node::type()
-{
- return "unbreakable_space_node";
-}
-
-node *unbreakable_space_node::add_self(node *nd, hyphen_list **p)
-{
- next = nd;
- hyphen_list *pp = *p;
- *p = (*p)->next;
- delete pp;
- return this;
-}
-
-hyphen_list *unbreakable_space_node::get_hyphen_list(hyphen_list *tail, int *)
-{
- return new hyphen_list(0, tail);
-}
-
-int diverted_space_node::same(node *nd)
-{
- return n == ((diverted_space_node *)nd)->n;
-}
-
-const char *diverted_space_node::type()
-{
- return "diverted_space_node";
-}
-
-int diverted_space_node::force_tprint()
-{
- return 0;
-}
-
-int diverted_space_node::is_tag()
-{
- return 0;
-}
-
-int diverted_copy_file_node::same(node *nd)
-{
- return filename == ((diverted_copy_file_node *)nd)->filename;
-}
-
-const char *diverted_copy_file_node::type()
-{
- return "diverted_copy_file_node";
-}
-
-int diverted_copy_file_node::force_tprint()
-{
- return 0;
-}
-
-int diverted_copy_file_node::is_tag()
-{
- return 0;
-}
-
-// Grow the font_table so that its size is > n.
-
-static void grow_font_table(int n)
-{
- assert(n >= font_table_size);
- font_info **old_font_table = font_table;
- int old_font_table_size = font_table_size;
- font_table_size = font_table_size ? (font_table_size*3)/2 : 10;
- if (font_table_size <= n)
- font_table_size = n + 10;
- font_table = new font_info *[font_table_size];
- if (old_font_table_size)
- memcpy(font_table, old_font_table,
- old_font_table_size*sizeof(font_info *));
- a_delete old_font_table;
- for (int i = old_font_table_size; i < font_table_size; i++)
- font_table[i] = 0;
-}
-
-dictionary font_translation_dictionary(17);
-
-static symbol get_font_translation(symbol nm)
-{
- void *p = font_translation_dictionary.lookup(nm);
- return p ? symbol((char *)p) : nm;
-}
-
-dictionary font_dictionary(50);
-
-static int mount_font_no_translate(int n, symbol name, symbol external_name,
- int check_only = 0)
-{
- assert(n >= 0);
- // We store the address of this char in font_dictionary to indicate
- // that we've previously tried to mount the font and failed.
- static char a_char;
- font *fm = 0;
- void *p = font_dictionary.lookup(external_name);
- if (p == 0) {
- int not_found;
- fm = font::load_font(external_name.contents(), &not_found, check_only);
- if (check_only)
- return fm != 0;
- if (!fm) {
- if (not_found)
- warning(WARN_FONT, "can't find font `%1'", external_name.contents());
- (void)font_dictionary.lookup(external_name, &a_char);
- return 0;
- }
- (void)font_dictionary.lookup(name, fm);
- }
- else if (p == &a_char) {
-#if 0
- error("invalid font `%1'", external_name.contents());
-#endif
- return 0;
- }
- else
- fm = (font*)p;
- if (check_only)
- return 1;
- if (n >= font_table_size) {
- if (n - font_table_size > 1000) {
- error("font position too much larger than first unused position");
- return 0;
- }
- grow_font_table(n);
- }
- else if (font_table[n] != 0)
- delete font_table[n];
- font_table[n] = new font_info(name, n, external_name, fm);
- font_family::invalidate_fontno(n);
- return 1;
-}
-
-int mount_font(int n, symbol name, symbol external_name)
-{
- assert(n >= 0);
- name = get_font_translation(name);
- if (external_name.is_null())
- external_name = name;
- else
- external_name = get_font_translation(external_name);
- return mount_font_no_translate(n, name, external_name);
-}
-
-int check_font(symbol fam, symbol name)
-{
- if (check_style(name))
- name = concat(fam, name);
- return mount_font_no_translate(0, name, name, 1);
-}
-
-int check_style(symbol s)
-{
- int i = symbol_fontno(s);
- return i < 0 ? 0 : font_table[i]->is_style();
-}
-
-void mount_style(int n, symbol name)
-{
- assert(n >= 0);
- if (n >= font_table_size) {
- if (n - font_table_size > 1000) {
- error("font position too much larger than first unused position");
- return;
- }
- grow_font_table(n);
- }
- else if (font_table[n] != 0)
- delete font_table[n];
- font_table[n] = new font_info(get_font_translation(name), n, NULL_SYMBOL, 0);
- font_family::invalidate_fontno(n);
-}
-
-/* global functions */
-
-void font_translate()
-{
- symbol from = get_name(1);
- if (!from.is_null()) {
- symbol to = get_name();
- if (to.is_null() || from == to)
- font_translation_dictionary.remove(from);
- else
- (void)font_translation_dictionary.lookup(from, (void *)to.contents());
- }
- skip_line();
-}
-
-void font_position()
-{
- int n;
- if (get_integer(&n)) {
- if (n < 0)
- error("negative font position");
- else {
- symbol internal_name = get_name(1);
- if (!internal_name.is_null()) {
- symbol external_name = get_long_name();
- mount_font(n, internal_name, external_name); // ignore error
- }
- }
- }
- skip_line();
-}
-
-font_family::font_family(symbol s)
-: map_size(10), nm(s)
-{
- map = new int[map_size];
- for (int i = 0; i < map_size; i++)
- map[i] = -1;
-}
-
-font_family::~font_family()
-{
- a_delete map;
-}
-
-int font_family::make_definite(int i)
-{
- if (i >= 0) {
- if (i < map_size && map[i] >= 0)
- return map[i];
- else {
- if (i < font_table_size && font_table[i] != 0) {
- if (i >= map_size) {
- int old_map_size = map_size;
- int *old_map = map;
- map_size *= 3;
- map_size /= 2;
- if (i >= map_size)
- map_size = i + 10;
- map = new int[map_size];
- memcpy(map, old_map, old_map_size*sizeof(int));
- a_delete old_map;
- for (int j = old_map_size; j < map_size; j++)
- map[j] = -1;
- }
- if (font_table[i]->is_style()) {
- symbol sty = font_table[i]->get_name();
- symbol f = concat(nm, sty);
- int n;
- // don't use symbol_fontno, because that might return a style
- // and because we don't want to translate the name
- for (n = 0; n < font_table_size; n++)
- if (font_table[n] != 0 && font_table[n]->is_named(f)
- && !font_table[n]->is_style())
- break;
- if (n >= font_table_size) {
- n = next_available_font_position();
- if (!mount_font_no_translate(n, f, f))
- return -1;
- }
- return map[i] = n;
- }
- else
- return map[i] = i;
- }
- else
- return -1;
- }
- }
- else
- return -1;
-}
-
-dictionary family_dictionary(5);
-
-font_family *lookup_family(symbol nm)
-{
- font_family *f = (font_family *)family_dictionary.lookup(nm);
- if (!f) {
- f = new font_family(nm);
- (void)family_dictionary.lookup(nm, f);
- }
- return f;
-}
-
-void font_family::invalidate_fontno(int n)
-{
- assert(n >= 0 && n < font_table_size);
- dictionary_iterator iter(family_dictionary);
- symbol nam;
- font_family *fam;
- while (iter.get(&nam, (void **)&fam)) {
- int mapsize = fam->map_size;
- if (n < mapsize)
- fam->map[n] = -1;
- for (int i = 0; i < mapsize; i++)
- if (fam->map[i] == n)
- fam->map[i] = -1;
- }
-}
-
-void style()
-{
- int n;
- if (get_integer(&n)) {
- if (n < 0)
- error("negative font position");
- else {
- symbol internal_name = get_name(1);
- if (!internal_name.is_null())
- mount_style(n, internal_name);
- }
- }
- skip_line();
-}
-
-static int get_fontno()
-{
- int n;
- tok.skip();
- if (tok.delimiter()) {
- symbol s = get_name(1);
- if (!s.is_null()) {
- n = symbol_fontno(s);
- if (n < 0) {
- n = next_available_font_position();
- if (!mount_font(n, s))
- return -1;
- }
- return curenv->get_family()->make_definite(n);
- }
- }
- else if (get_integer(&n)) {
- if (n < 0 || n >= font_table_size || font_table[n] == 0)
- error("bad font number");
- else
- return curenv->get_family()->make_definite(n);
- }
- return -1;
-}
-
-static int underline_fontno = 2;
-
-void underline_font()
-{
- int n = get_fontno();
- if (n >= 0)
- underline_fontno = n;
- skip_line();
-}
-
-int get_underline_fontno()
-{
- return underline_fontno;
-}
-
-void define_font_special_character()
-{
- int n = get_fontno();
- if (n < 0) {
- skip_line();
- return;
- }
- symbol f = font_table[n]->get_name();
- do_define_character(CHAR_FONT_SPECIAL, f.contents());
-}
-
-void remove_font_special_character()
-{
- int n = get_fontno();
- if (n < 0) {
- skip_line();
- return;
- }
- symbol f = font_table[n]->get_name();
- while (!tok.newline() && !tok.eof()) {
- if (!tok.space() && !tok.tab()) {
- charinfo *s = tok.get_char(1);
- string gl(f.contents());
- gl += ' ';
- gl += s->nm.contents();
- gl += '\0';
- charinfo *ci = get_charinfo(symbol(gl.contents()));
- if (!ci)
- break;
- macro *m = ci->set_macro(0);
- if (m)
- delete m;
- }
- tok.next();
- }
- skip_line();
-}
-
-static void read_special_fonts(special_font_list **sp)
-{
- special_font_list *s = *sp;
- *sp = 0;
- while (s != 0) {
- special_font_list *tem = s;
- s = s->next;
- delete tem;
- }
- special_font_list **p = sp;
- while (has_arg()) {
- int i = get_fontno();
- if (i >= 0) {
- special_font_list *tem = new special_font_list;
- tem->n = i;
- tem->next = 0;
- *p = tem;
- p = &(tem->next);
- }
- }
-}
-
-void font_special_request()
-{
- int n = get_fontno();
- if (n >= 0)
- read_special_fonts(&font_table[n]->sf);
- skip_line();
-}
-
-void special_request()
-{
- read_special_fonts(&global_special_fonts);
- skip_line();
-}
-
-int next_available_font_position()
-{
- int i;
- for (i = 1; i < font_table_size && font_table[i] != 0; i++)
- ;
- return i;
-}
-
-int symbol_fontno(symbol s)
-{
- s = get_font_translation(s);
- for (int i = 0; i < font_table_size; i++)
- if (font_table[i] != 0 && font_table[i]->is_named(s))
- return i;
- return -1;
-}
-
-int is_good_fontno(int n)
-{
- return n >= 0 && n < font_table_size && font_table[n] != 0;
-}
-
-int get_bold_fontno(int n)
-{
- if (n >= 0 && n < font_table_size && font_table[n] != 0) {
- hunits offset;
- if (font_table[n]->get_bold(&offset))
- return offset.to_units() + 1;
- else
- return 0;
- }
- else
- return 0;
-}
-
-hunits env_digit_width(environment *env)
-{
- node *n = make_glyph_node(charset_table['0'], env);
- if (n) {
- hunits x = n->width();
- delete n;
- return x;
- }
- else
- return H0;
-}
-
-hunits env_space_width(environment *env)
-{
- int fn = env_definite_font(env);
- font_size fs = env->get_font_size();
- if (fn < 0 || fn >= font_table_size || font_table[fn] == 0)
- return scale(fs.to_units()/3, env->get_space_size(), 12);
- else
- return font_table[fn]->get_space_width(fs, env->get_space_size());
-}
-
-hunits env_sentence_space_width(environment *env)
-{
- int fn = env_definite_font(env);
- font_size fs = env->get_font_size();
- if (fn < 0 || fn >= font_table_size || font_table[fn] == 0)
- return scale(fs.to_units()/3, env->get_sentence_space_size(), 12);
- else
- return font_table[fn]->get_space_width(fs, env->get_sentence_space_size());
-}
-
-hunits env_half_narrow_space_width(environment *env)
-{
- int fn = env_definite_font(env);
- font_size fs = env->get_font_size();
- if (fn < 0 || fn >= font_table_size || font_table[fn] == 0)
- return 0;
- else
- return font_table[fn]->get_half_narrow_space_width(fs);
-}
-
-hunits env_narrow_space_width(environment *env)
-{
- int fn = env_definite_font(env);
- font_size fs = env->get_font_size();
- if (fn < 0 || fn >= font_table_size || font_table[fn] == 0)
- return 0;
- else
- return font_table[fn]->get_narrow_space_width(fs);
-}
-
-void bold_font()
-{
- int n = get_fontno();
- if (n >= 0) {
- if (has_arg()) {
- if (tok.delimiter()) {
- int f = get_fontno();
- if (f >= 0) {
- units offset;
- if (has_arg() && get_number(&offset, 'u') && offset >= 1)
- font_table[f]->set_conditional_bold(n, hunits(offset - 1));
- else
- font_table[f]->conditional_unbold(n);
- }
- }
- else {
- units offset;
- if (get_number(&offset, 'u') && offset >= 1)
- font_table[n]->set_bold(hunits(offset - 1));
- else
- font_table[n]->unbold();
- }
- }
- else
- font_table[n]->unbold();
- }
- skip_line();
-}
-
-track_kerning_function::track_kerning_function() : non_zero(0)
-{
-}
-
-track_kerning_function::track_kerning_function(int min_s, hunits min_a,
- int max_s, hunits max_a)
-: non_zero(1), min_size(min_s), min_amount(min_a), max_size(max_s),
- max_amount(max_a)
-{
-}
-
-int track_kerning_function::operator==(const track_kerning_function &tk)
-{
- if (non_zero)
- return (tk.non_zero
- && min_size == tk.min_size
- && min_amount == tk.min_amount
- && max_size == tk.max_size
- && max_amount == tk.max_amount);
- else
- return !tk.non_zero;
-}
-
-int track_kerning_function::operator!=(const track_kerning_function &tk)
-{
- if (non_zero)
- return (!tk.non_zero
- || min_size != tk.min_size
- || min_amount != tk.min_amount
- || max_size != tk.max_size
- || max_amount != tk.max_amount);
- else
- return tk.non_zero;
-}
-
-hunits track_kerning_function::compute(int size)
-{
- if (non_zero) {
- if (max_size <= min_size)
- return min_amount;
- else if (size <= min_size)
- return min_amount;
- else if (size >= max_size)
- return max_amount;
- else
- return (scale(max_amount, size - min_size, max_size - min_size)
- + scale(min_amount, max_size - size, max_size - min_size));
- }
- else
- return H0;
-}
-
-void track_kern()
-{
- int n = get_fontno();
- if (n >= 0) {
- int min_s, max_s;
- hunits min_a, max_a;
- if (has_arg()
- && get_number(&min_s, 'z')
- && get_hunits(&min_a, 'p')
- && get_number(&max_s, 'z')
- && get_hunits(&max_a, 'p')) {
- track_kerning_function tk(min_s, min_a, max_s, max_a);
- font_table[n]->set_track_kern(tk);
- }
- else {
- track_kerning_function tk;
- font_table[n]->set_track_kern(tk);
- }
- }
- skip_line();
-}
-
-void constant_space()
-{
- int n = get_fontno();
- if (n >= 0) {
- int x, y;
- if (!has_arg() || !get_integer(&x))
- font_table[n]->set_constant_space(CONSTANT_SPACE_NONE);
- else {
- if (!has_arg() || !get_number(&y, 'z'))
- font_table[n]->set_constant_space(CONSTANT_SPACE_RELATIVE, x);
- else
- font_table[n]->set_constant_space(CONSTANT_SPACE_ABSOLUTE,
- scale(y*x,
- units_per_inch,
- 36*72*sizescale));
- }
- }
- skip_line();
-}
-
-void ligature()
-{
- int lig;
- if (has_arg() && get_integer(&lig) && lig >= 0 && lig <= 2)
- global_ligature_mode = lig;
- else
- global_ligature_mode = 1;
- skip_line();
-}
-
-void kern_request()
-{
- int k;
- if (has_arg() && get_integer(&k))
- global_kern_mode = k != 0;
- else
- global_kern_mode = 1;
- skip_line();
-}
-
-void set_soft_hyphen_char()
-{
- soft_hyphen_char = get_optional_char();
- if (!soft_hyphen_char)
- soft_hyphen_char = get_charinfo(HYPHEN_SYMBOL);
- skip_line();
-}
-
-void init_output()
-{
- if (suppress_output_flag)
- the_output = new suppress_output_file;
- else if (ascii_output_flag)
- the_output = new ascii_output_file;
- else
- the_output = new troff_output_file;
-}
-
-class next_available_font_position_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *next_available_font_position_reg::get_string()
-{
- return i_to_a(next_available_font_position());
-}
-
-class printing_reg : public reg {
-public:
- const char *get_string();
-};
-
-const char *printing_reg::get_string()
-{
- if (the_output)
- return the_output->is_printing() ? "1" : "0";
- else
- return "0";
-}
-
-void init_node_requests()
-{
- init_request("bd", bold_font);
- init_request("cs", constant_space);
- init_request("fp", font_position);
- init_request("fschar", define_font_special_character);
- init_request("fspecial", font_special_request);
- init_request("ftr", font_translate);
- init_request("kern", kern_request);
- init_request("lg", ligature);
- init_request("rfschar", remove_font_special_character);
- init_request("shc", set_soft_hyphen_char);
- init_request("special", special_request);
- init_request("sty", style);
- init_request("tkf", track_kern);
- init_request("uf", underline_font);
- number_reg_dictionary.define(".fp", new next_available_font_position_reg);
- number_reg_dictionary.define(".kern",
- new constant_int_reg(&global_kern_mode));
- number_reg_dictionary.define(".lg",
- new constant_int_reg(&global_ligature_mode));
- number_reg_dictionary.define(".P", new printing_reg);
- soft_hyphen_char = get_charinfo(HYPHEN_SYMBOL);
-}
diff --git a/contrib/groff/src/roff/troff/node.h b/contrib/groff/src/roff/troff/node.h
deleted file mode 100644
index c7c8b4188c7e..000000000000
--- a/contrib/groff/src/roff/troff/node.h
+++ /dev/null
@@ -1,676 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct hyphen_list {
- unsigned char hyphen;
- unsigned char breakable;
- unsigned char hyphenation_code;
- hyphen_list *next;
- hyphen_list(unsigned char code, hyphen_list *p = 0);
-};
-
-void hyphenate(hyphen_list *, unsigned);
-
-enum hyphenation_type { HYPHEN_MIDDLE, HYPHEN_BOUNDARY, HYPHEN_INHIBIT };
-
-class ascii_output_file;
-
-struct breakpoint;
-struct vertical_size;
-class charinfo;
-
-class macro;
-
-class troff_output_file;
-class tfont;
-class environment;
-
-class glyph_node;
-class diverted_space_node;
-class token_node;
-
-struct node {
- node *next;
- node *last;
- statem *state;
- statem *push_state;
- int div_nest_level;
- int is_special;
- node();
- node(node *);
- node(node *, statem *, int);
- node *add_char(charinfo *, environment *, hunits *, int *, node ** = 0);
-
- virtual ~node();
- virtual node *copy() = 0;
- virtual int set_unformat_flag();
- virtual int force_tprint() = 0;
- virtual int is_tag() = 0;
- virtual hunits width();
- virtual hunits subscript_correction();
- virtual hunits italic_correction();
- virtual hunits left_italic_correction();
- virtual hunits skew();
- virtual int nspaces();
- virtual int merge_space(hunits, hunits, hunits);
- virtual vunits vertical_width();
- virtual node *last_char_node();
- virtual void vertical_extent(vunits *, vunits *);
- virtual int character_type();
- virtual void set_vertical_size(vertical_size *);
- virtual int ends_sentence();
- virtual node *merge_self(node *);
- virtual node *add_discretionary_hyphen();
- virtual node *add_self(node *, hyphen_list **);
- virtual hyphen_list *get_hyphen_list(hyphen_list *, int *);
- virtual void ascii_print(ascii_output_file *);
- virtual void asciify(macro *);
- virtual int discardable();
- virtual void spread_space(int *, hunits *);
- virtual void freeze_space();
- virtual void is_escape_colon();
- virtual breakpoint *get_breakpoints(hunits, int, breakpoint * = 0, int = 0);
- virtual int nbreaks();
- virtual void split(int, node **, node **);
- virtual hyphenation_type get_hyphenation_type();
- virtual int reread(int *);
- virtual token_node *get_token_node();
- virtual int overlaps_vertically();
- virtual int overlaps_horizontally();
- virtual units size();
- virtual int interpret(macro *);
-
- virtual node *merge_glyph_node(glyph_node *);
- virtual tfont *get_tfont();
- virtual color *get_glyph_color();
- virtual color *get_fill_color();
- virtual void tprint(troff_output_file *);
- virtual void zero_width_tprint(troff_output_file *);
-
- node *add_italic_correction(hunits *);
-
- virtual int same(node *) = 0;
- virtual const char *type() = 0;
- virtual void debug_node();
- virtual void debug_node_list();
-};
-
-inline node::node()
-: next(0), last(0), state(0), push_state(0), div_nest_level(0), is_special(0)
-{
-}
-
-inline node::node(node *n)
-: next(n), last(0), state(0), push_state(0), div_nest_level(0), is_special(0)
-{
-}
-
-inline node::node(node *n, statem *s, int divlevel)
-: next(n), last(0), push_state(0), div_nest_level(divlevel), is_special(0)
-{
- if (s)
- state = new statem(s);
- else
- state = 0;
-}
-
-inline node::~node()
-{
-}
-
-// 0 means it doesn't, 1 means it does, 2 means it's transparent
-
-int node_list_ends_sentence(node *);
-
-struct breakpoint {
- breakpoint *next;
- hunits width;
- int nspaces;
- node *nd;
- int index;
- char hyphenated;
-};
-
-class line_start_node : public node {
-public:
- line_start_node() {}
- node *copy() { return new line_start_node; }
- int same(node *);
- int force_tprint();
- int is_tag();
- const char *type();
- void asciify(macro *);
-};
-
-class space_node : public node {
-private:
-#if 0
- enum { BLOCK = 1024 };
- static space_node *free_list;
- void operator delete(void *);
-#endif
-protected:
- hunits n;
- char set;
- char was_escape_colon;
- color *col; /* for grotty */
- space_node(hunits, int, int, color *, statem *, int, node * = 0);
-public:
- space_node(hunits, color *, statem *, int, node * = 0);
- space_node(hunits, color *, node * = 0);
-#if 0
- ~space_node();
- void *operator new(size_t);
-#endif
- node *copy();
- int nspaces();
- hunits width();
- int discardable();
- int merge_space(hunits, hunits, hunits);
- void freeze_space();
- void is_escape_colon();
- void spread_space(int *, hunits *);
- void tprint(troff_output_file *);
- breakpoint *get_breakpoints(hunits, int, breakpoint * = 0, int = 0);
- int nbreaks();
- void split(int, node **, node **);
- void ascii_print(ascii_output_file *);
- int same(node *);
- void asciify(macro *);
- const char *type();
- int force_tprint();
- int is_tag();
- hyphenation_type get_hyphenation_type();
-};
-
-struct width_list {
- hunits width;
- hunits sentence_width;
- width_list *next;
- width_list(hunits, hunits);
- width_list(width_list *);
-};
-
-class word_space_node : public space_node {
-protected:
- width_list *orig_width;
- unsigned char unformat;
- word_space_node(hunits, int, color *, width_list *, int, statem *, int,
- node * = 0);
-public:
- word_space_node(hunits, color *, width_list *, node * = 0);
- ~word_space_node();
- node *copy();
- int reread(int *);
- int set_unformat_flag();
- void tprint(troff_output_file *);
- int same(node *);
- void asciify(macro *);
- const char *type();
- int merge_space(hunits, hunits, hunits);
- int force_tprint();
- int is_tag();
-};
-
-class unbreakable_space_node : public word_space_node {
- unbreakable_space_node(hunits, int, color *, statem *, int, node * = 0);
-public:
- unbreakable_space_node(hunits, color *, node * = 0);
- node *copy();
- int reread(int *);
- void tprint(troff_output_file *);
- int same(node *);
- void asciify(macro *);
- const char *type();
- int force_tprint();
- int is_tag();
- breakpoint *get_breakpoints(hunits, int, breakpoint * = 0, int = 0);
- int nbreaks();
- void split(int, node **, node **);
- int merge_space(hunits, hunits, hunits);
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- hyphenation_type get_hyphenation_type();
-};
-
-class diverted_space_node : public node {
-public:
- vunits n;
- diverted_space_node(vunits, node * = 0);
- diverted_space_node(vunits, statem *, int, node * = 0);
- node *copy();
- int reread(int *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class diverted_copy_file_node : public node {
- symbol filename;
-public:
- vunits n;
- diverted_copy_file_node(symbol, node * = 0);
- diverted_copy_file_node(symbol, statem *, int, node * = 0);
- node *copy();
- int reread(int *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class extra_size_node : public node {
- vunits n;
-public:
- extra_size_node(vunits);
- extra_size_node(vunits, statem *, int);
- void set_vertical_size(vertical_size *);
- node *copy();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class vertical_size_node : public node {
- vunits n;
-public:
- vertical_size_node(vunits, statem *, int);
- vertical_size_node(vunits);
- void set_vertical_size(vertical_size *);
- void asciify(macro *);
- node *copy();
- int set_unformat_flag();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class hmotion_node : public node {
-protected:
- hunits n;
- unsigned char was_tab;
- unsigned char unformat;
- color *col; /* for grotty */
-public:
- hmotion_node(hunits i, color *c, node *nxt = 0)
- : node(nxt), n(i), was_tab(0), unformat(0), col(c) {}
- hmotion_node(hunits i, color *c, statem *s, int divlevel, node *nxt = 0)
- : node(nxt, s, divlevel), n(i), was_tab(0), unformat(0), col(c) {}
- hmotion_node(hunits i, int flag1, int flag2, color *c, statem *s,
- int divlevel, node *nxt = 0)
- : node(nxt, s, divlevel), n(i), was_tab(flag1), unformat(flag2),
- col(c) {}
- hmotion_node(hunits i, int flag1, int flag2, color *c, node *nxt = 0)
- : node(nxt), n(i), was_tab(flag1), unformat(flag2), col(c) {}
- node *copy();
- int reread(int *);
- int set_unformat_flag();
- void asciify(macro *);
- void tprint(troff_output_file *);
- hunits width();
- void ascii_print(ascii_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- hyphenation_type get_hyphenation_type();
-};
-
-class space_char_hmotion_node : public hmotion_node {
-public:
- space_char_hmotion_node(hunits, color *, node * = 0);
- space_char_hmotion_node(hunits, color *, statem *, int, node * = 0);
- node *copy();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- hyphenation_type get_hyphenation_type();
-};
-
-class vmotion_node : public node {
- vunits n;
- color *col; /* for grotty */
-public:
- vmotion_node(vunits, color *);
- vmotion_node(vunits, color *, statem *, int);
- void tprint(troff_output_file *);
- node *copy();
- vunits vertical_width();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class hline_node : public node {
- hunits x;
- node *n;
-public:
- hline_node(hunits, node *, node * = 0);
- hline_node(hunits, node *, statem *, int, node * = 0);
- ~hline_node();
- node *copy();
- hunits width();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class vline_node : public node {
- vunits x;
- node *n;
-public:
- vline_node(vunits, node *, node * = 0);
- vline_node(vunits, node *, statem *, int, node * = 0);
- ~vline_node();
- node *copy();
- void tprint(troff_output_file *);
- hunits width();
- vunits vertical_width();
- void vertical_extent(vunits *, vunits *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class dummy_node : public node {
-public:
- dummy_node(node *nd = 0) : node(nd) {}
- node *copy();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- hyphenation_type get_hyphenation_type();
-};
-
-class transparent_dummy_node : public node {
-public:
- transparent_dummy_node(node *nd = 0) : node(nd) {}
- node *copy();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- int ends_sentence();
- hyphenation_type get_hyphenation_type();
-};
-
-class zero_width_node : public node {
- node *n;
-public:
- zero_width_node(node *);
- zero_width_node(node *, statem *, int);
- ~zero_width_node();
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- void append(node *);
- int character_type();
- void vertical_extent(vunits *, vunits *);
-};
-
-class left_italic_corrected_node : public node {
- node *n;
- hunits x;
-public:
- left_italic_corrected_node(node * = 0);
- left_italic_corrected_node(statem *, int, node * = 0);
- ~left_italic_corrected_node();
- void tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- node *copy();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- hunits width();
- node *last_char_node();
- void vertical_extent(vunits *, vunits *);
- int ends_sentence();
- int overlaps_horizontally();
- int overlaps_vertically();
- hyphenation_type get_hyphenation_type();
- tfont *get_tfont();
- int character_type();
- hunits skew();
- hunits italic_correction();
- hunits subscript_correction();
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- node *add_self(node *, hyphen_list **);
- node *merge_glyph_node(glyph_node *);
-};
-
-class overstrike_node : public node {
- node *list;
- hunits max_width;
-public:
- overstrike_node();
- overstrike_node(statem *, int);
- ~overstrike_node();
- node *copy();
- void tprint(troff_output_file *);
- void overstrike(node *); // add another node to be overstruck
- hunits width();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *, int *);
- hyphenation_type get_hyphenation_type();
-};
-
-class bracket_node : public node {
- node *list;
- hunits max_width;
-public:
- bracket_node();
- bracket_node(statem *, int);
- ~bracket_node();
- node *copy();
- void tprint(troff_output_file *);
- void bracket(node *); // add another node to be overstruck
- hunits width();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class special_node : public node {
- macro mac;
- tfont *tf;
- color *gcol;
- color *fcol;
- int no_init_string;
- void tprint_start(troff_output_file *);
- void tprint_char(troff_output_file *, unsigned char);
- void tprint_end(troff_output_file *);
-public:
- special_node(const macro &, int = 0);
- special_node(const macro &, tfont *, color *, color *, statem *, int,
- int = 0);
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- int ends_sentence();
- tfont *get_tfont();
-};
-
-class suppress_node : public node {
- int is_on;
- int emit_limits; // must we issue the extent of the area written out?
- symbol filename;
- char position;
- int image_id;
-public:
- suppress_node(int, int);
- suppress_node(symbol, char, int);
- suppress_node(int, int, symbol, char, int, statem *, int);
- suppress_node(int, int, symbol, char, int);
- node *copy();
- void tprint(troff_output_file *);
- hunits width();
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-private:
- void put(troff_output_file *, const char *);
-};
-
-class tag_node : public node {
-public:
- string tag_string;
- int delayed;
- tag_node();
- tag_node(string, int);
- tag_node(string, statem *, int, int);
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
- int ends_sentence();
-};
-
-struct hvpair {
- hunits h;
- vunits v;
- hvpair();
-};
-
-class draw_node : public node {
- int npoints;
- font_size sz;
- color *gcol;
- color *fcol;
- char code;
- hvpair *point;
-public:
- draw_node(char, hvpair *, int, font_size, color *, color *);
- draw_node(char, hvpair *, int, font_size, color *, color *, statem *, int);
- ~draw_node();
- hunits width();
- vunits vertical_width();
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- int force_tprint();
- int is_tag();
-};
-
-class charinfo;
-node *make_node(charinfo *, environment *);
-int character_exists(charinfo *, environment *);
-
-int same_node_list(node *, node *);
-node *reverse_node_list(node *);
-void delete_node_list(node *);
-node *copy_node_list(node *);
-
-int get_bold_fontno(int);
-
-inline hyphen_list::hyphen_list(unsigned char code, hyphen_list *p)
-: hyphen(0), breakable(0), hyphenation_code(code), next(p)
-{
-}
-
-extern void read_desc();
-extern int mount_font(int, symbol, symbol = NULL_SYMBOL);
-extern int check_font(symbol, symbol);
-extern int check_style(symbol);
-extern void mount_style(int, symbol);
-extern int is_good_fontno(int);
-extern int symbol_fontno(symbol);
-extern int next_available_font_position();
-extern void init_size_table(int *);
-extern int get_underline_fontno();
-
-class output_file {
- char make_g_plus_plus_shut_up;
-public:
- output_file();
- virtual ~output_file();
- virtual void trailer(vunits);
- virtual void flush() = 0;
- virtual void transparent_char(unsigned char) = 0;
- virtual void print_line(hunits x, vunits y, node *n,
- vunits before, vunits after, hunits width) = 0;
- virtual void begin_page(int pageno, vunits page_length) = 0;
- virtual void copy_file(hunits x, vunits y, const char *filename) = 0;
- virtual int is_printing() = 0;
- virtual void put_filename(const char *);
- virtual void on();
- virtual void off();
-#ifdef COLUMN
- virtual void vjustify(vunits, symbol);
-#endif /* COLUMN */
- mtsm state;
-};
-
-#ifndef POPEN_MISSING
-extern char *pipe_command;
-#endif
-
-extern output_file *the_output;
-extern void init_output();
-int in_output_page_list(int);
-
-class font_family {
- int *map;
- int map_size;
-public:
- const symbol nm;
- font_family(symbol);
- ~font_family();
- int make_definite(int);
- static void invalidate_fontno(int);
-};
-
-font_family *lookup_family(symbol);
-symbol get_font_name(int, environment *);
-symbol get_style_name(int);
-extern search_path include_search_path;
diff --git a/contrib/groff/src/roff/troff/number.cpp b/contrib/groff/src/roff/troff/number.cpp
deleted file mode 100644
index 0a4563e4b31e..000000000000
--- a/contrib/groff/src/roff/troff/number.cpp
+++ /dev/null
@@ -1,698 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-#include "troff.h"
-#include "hvunits.h"
-#include "stringclass.h"
-#include "mtsm.h"
-#include "env.h"
-#include "token.h"
-#include "div.h"
-
-vunits V0;
-hunits H0;
-
-int hresolution = 1;
-int vresolution = 1;
-int units_per_inch;
-int sizescale;
-
-static int parse_expr(units *v, int scale_indicator,
- int parenthesised, int rigid = 0);
-static int start_number();
-
-int get_vunits(vunits *res, unsigned char si)
-{
- if (!start_number())
- return 0;
- units x;
- if (parse_expr(&x, si, 0)) {
- *res = vunits(x);
- return 1;
- }
- else
- return 0;
-}
-
-int get_hunits(hunits *res, unsigned char si)
-{
- if (!start_number())
- return 0;
- units x;
- if (parse_expr(&x, si, 0)) {
- *res = hunits(x);
- return 1;
- }
- else
- return 0;
-}
-
-// for \B
-
-int get_number_rigidly(units *res, unsigned char si)
-{
- if (!start_number())
- return 0;
- units x;
- if (parse_expr(&x, si, 0, 1)) {
- *res = x;
- return 1;
- }
- else
- return 0;
-}
-
-int get_number(units *res, unsigned char si)
-{
- if (!start_number())
- return 0;
- units x;
- if (parse_expr(&x, si, 0)) {
- *res = x;
- return 1;
- }
- else
- return 0;
-}
-
-int get_integer(int *res)
-{
- if (!start_number())
- return 0;
- units x;
- if (parse_expr(&x, 0, 0)) {
- *res = x;
- return 1;
- }
- else
- return 0;
-}
-
-enum incr_number_result { BAD, ABSOLUTE, INCREMENT, DECREMENT };
-
-static incr_number_result get_incr_number(units *res, unsigned char);
-
-int get_vunits(vunits *res, unsigned char si, vunits prev_value)
-{
- units v;
- switch (get_incr_number(&v, si)) {
- case BAD:
- return 0;
- case ABSOLUTE:
- *res = v;
- break;
- case INCREMENT:
- *res = prev_value + v;
- break;
- case DECREMENT:
- *res = prev_value - v;
- break;
- default:
- assert(0);
- }
- return 1;
-}
-
-int get_hunits(hunits *res, unsigned char si, hunits prev_value)
-{
- units v;
- switch (get_incr_number(&v, si)) {
- case BAD:
- return 0;
- case ABSOLUTE:
- *res = v;
- break;
- case INCREMENT:
- *res = prev_value + v;
- break;
- case DECREMENT:
- *res = prev_value - v;
- break;
- default:
- assert(0);
- }
- return 1;
-}
-
-int get_number(units *res, unsigned char si, units prev_value)
-{
- units v;
- switch (get_incr_number(&v, si)) {
- case BAD:
- return 0;
- case ABSOLUTE:
- *res = v;
- break;
- case INCREMENT:
- *res = prev_value + v;
- break;
- case DECREMENT:
- *res = prev_value - v;
- break;
- default:
- assert(0);
- }
- return 1;
-}
-
-int get_integer(int *res, int prev_value)
-{
- units v;
- switch (get_incr_number(&v, 0)) {
- case BAD:
- return 0;
- case ABSOLUTE:
- *res = v;
- break;
- case INCREMENT:
- *res = prev_value + int(v);
- break;
- case DECREMENT:
- *res = prev_value - int(v);
- break;
- default:
- assert(0);
- }
- return 1;
-}
-
-
-static incr_number_result get_incr_number(units *res, unsigned char si)
-{
- if (!start_number())
- return BAD;
- incr_number_result result = ABSOLUTE;
- if (tok.ch() == '+') {
- tok.next();
- result = INCREMENT;
- }
- else if (tok.ch() == '-') {
- tok.next();
- result = DECREMENT;
- }
- if (parse_expr(res, si, 0))
- return result;
- else
- return BAD;
-}
-
-static int start_number()
-{
- while (tok.space())
- tok.next();
- if (tok.newline()) {
- warning(WARN_MISSING, "missing number");
- return 0;
- }
- if (tok.tab()) {
- warning(WARN_TAB, "tab character where number expected");
- return 0;
- }
- if (tok.right_brace()) {
- warning(WARN_RIGHT_BRACE, "`\\}' where number expected");
- return 0;
- }
- return 1;
-}
-
-enum { OP_LEQ = 'L', OP_GEQ = 'G', OP_MAX = 'X', OP_MIN = 'N' };
-
-#define SCALE_INDICATOR_CHARS "icfPmnpuvMsz"
-
-static int parse_term(units *v, int scale_indicator,
- int parenthesised, int rigid);
-
-static int parse_expr(units *v, int scale_indicator,
- int parenthesised, int rigid)
-{
- int result = parse_term(v, scale_indicator, parenthesised, rigid);
- while (result) {
- if (parenthesised)
- tok.skip();
- int op = tok.ch();
- switch (op) {
- case '+':
- case '-':
- case '/':
- case '*':
- case '%':
- case ':':
- case '&':
- tok.next();
- break;
- case '>':
- tok.next();
- if (tok.ch() == '=') {
- tok.next();
- op = OP_GEQ;
- }
- else if (tok.ch() == '?') {
- tok.next();
- op = OP_MAX;
- }
- break;
- case '<':
- tok.next();
- if (tok.ch() == '=') {
- tok.next();
- op = OP_LEQ;
- }
- else if (tok.ch() == '?') {
- tok.next();
- op = OP_MIN;
- }
- break;
- case '=':
- tok.next();
- if (tok.ch() == '=')
- tok.next();
- break;
- default:
- return result;
- }
- units v2;
- if (!parse_term(&v2, scale_indicator, parenthesised, rigid))
- return 0;
- int overflow = 0;
- switch (op) {
- case '<':
- *v = *v < v2;
- break;
- case '>':
- *v = *v > v2;
- break;
- case OP_LEQ:
- *v = *v <= v2;
- break;
- case OP_GEQ:
- *v = *v >= v2;
- break;
- case OP_MIN:
- if (*v > v2)
- *v = v2;
- break;
- case OP_MAX:
- if (*v < v2)
- *v = v2;
- break;
- case '=':
- *v = *v == v2;
- break;
- case '&':
- *v = *v > 0 && v2 > 0;
- break;
- case ':':
- *v = *v > 0 || v2 > 0;
- break;
- case '+':
- if (v2 < 0) {
- if (*v < INT_MIN - v2)
- overflow = 1;
- }
- else if (v2 > 0) {
- if (*v > INT_MAX - v2)
- overflow = 1;
- }
- if (overflow) {
- error("addition overflow");
- return 0;
- }
- *v += v2;
- break;
- case '-':
- if (v2 < 0) {
- if (*v > INT_MAX + v2)
- overflow = 1;
- }
- else if (v2 > 0) {
- if (*v < INT_MIN + v2)
- overflow = 1;
- }
- if (overflow) {
- error("subtraction overflow");
- return 0;
- }
- *v -= v2;
- break;
- case '*':
- if (v2 < 0) {
- if (*v > 0) {
- if (*v > -(unsigned)INT_MIN / -(unsigned)v2)
- overflow = 1;
- }
- else if (-(unsigned)*v > INT_MAX / -(unsigned)v2)
- overflow = 1;
- }
- else if (v2 > 0) {
- if (*v > 0) {
- if (*v > INT_MAX / v2)
- overflow = 1;
- }
- else if (-(unsigned)*v > -(unsigned)INT_MIN / v2)
- overflow = 1;
- }
- if (overflow) {
- error("multiplication overflow");
- return 0;
- }
- *v *= v2;
- break;
- case '/':
- if (v2 == 0) {
- error("division by zero");
- return 0;
- }
- *v /= v2;
- break;
- case '%':
- if (v2 == 0) {
- error("modulus by zero");
- return 0;
- }
- *v %= v2;
- break;
- default:
- assert(0);
- }
- }
- return result;
-}
-
-static int parse_term(units *v, int scale_indicator,
- int parenthesised, int rigid)
-{
- int negative = 0;
- for (;;)
- if (parenthesised && tok.space())
- tok.next();
- else if (tok.ch() == '+')
- tok.next();
- else if (tok.ch() == '-') {
- tok.next();
- negative = !negative;
- }
- else
- break;
- unsigned char c = tok.ch();
- switch (c) {
- case '|':
- // | is not restricted to the outermost level
- // tbl uses this
- tok.next();
- if (!parse_term(v, scale_indicator, parenthesised, rigid))
- return 0;
- int tem;
- tem = (scale_indicator == 'v'
- ? curdiv->get_vertical_position().to_units()
- : curenv->get_input_line_position().to_units());
- if (tem >= 0) {
- if (*v < INT_MIN + tem) {
- error("numeric overflow");
- return 0;
- }
- }
- else {
- if (*v > INT_MAX + tem) {
- error("numeric overflow");
- return 0;
- }
- }
- *v -= tem;
- if (negative) {
- if (*v == INT_MIN) {
- error("numeric overflow");
- return 0;
- }
- *v = -*v;
- }
- return 1;
- case '(':
- tok.next();
- c = tok.ch();
- if (c == ')') {
- if (rigid)
- return 0;
- warning(WARN_SYNTAX, "empty parentheses");
- tok.next();
- *v = 0;
- return 1;
- }
- else if (c != 0 && strchr(SCALE_INDICATOR_CHARS, c) != 0) {
- tok.next();
- if (tok.ch() == ';') {
- tok.next();
- scale_indicator = c;
- }
- else {
- error("expected `;' after scale-indicator (got %1)",
- tok.description());
- return 0;
- }
- }
- else if (c == ';') {
- scale_indicator = 0;
- tok.next();
- }
- if (!parse_expr(v, scale_indicator, 1, rigid))
- return 0;
- tok.skip();
- if (tok.ch() != ')') {
- if (rigid)
- return 0;
- warning(WARN_SYNTAX, "missing `)' (got %1)", tok.description());
- }
- else
- tok.next();
- if (negative) {
- if (*v == INT_MIN) {
- error("numeric overflow");
- return 0;
- }
- *v = -*v;
- }
- return 1;
- case '.':
- *v = 0;
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- *v = 0;
- do {
- if (*v > INT_MAX/10) {
- error("numeric overflow");
- return 0;
- }
- *v *= 10;
- if (*v > INT_MAX - (int(c) - '0')) {
- error("numeric overflow");
- return 0;
- }
- *v += c - '0';
- tok.next();
- c = tok.ch();
- } while (csdigit(c));
- break;
- case '/':
- case '*':
- case '%':
- case ':':
- case '&':
- case '>':
- case '<':
- case '=':
- warning(WARN_SYNTAX, "empty left operand");
- *v = 0;
- return rigid ? 0 : 1;
- default:
- warning(WARN_NUMBER, "numeric expression expected (got %1)",
- tok.description());
- return 0;
- }
- int divisor = 1;
- if (tok.ch() == '.') {
- tok.next();
- for (;;) {
- c = tok.ch();
- if (!csdigit(c))
- break;
- // we may multiply the divisor by 254 later on
- if (divisor <= INT_MAX/2540 && *v <= (INT_MAX - 9)/10) {
- *v *= 10;
- *v += c - '0';
- divisor *= 10;
- }
- tok.next();
- }
- }
- int si = scale_indicator;
- int do_next = 0;
- if ((c = tok.ch()) != 0 && strchr(SCALE_INDICATOR_CHARS, c) != 0) {
- switch (scale_indicator) {
- case 'z':
- if (c != 'u' && c != 'z') {
- warning(WARN_SCALE,
- "only `z' and `u' scale indicators valid in this context");
- break;
- }
- si = c;
- break;
- case 0:
- warning(WARN_SCALE, "scale indicator invalid in this context");
- break;
- case 'u':
- si = c;
- break;
- default:
- if (c == 'z') {
- warning(WARN_SCALE, "`z' scale indicator invalid in this context");
- break;
- }
- si = c;
- break;
- }
- // Don't do tok.next() here because the next token might be \s, which
- // would affect the interpretation of m.
- do_next = 1;
- }
- switch (si) {
- case 'i':
- *v = scale(*v, units_per_inch, divisor);
- break;
- case 'c':
- *v = scale(*v, units_per_inch*100, divisor*254);
- break;
- case 0:
- case 'u':
- if (divisor != 1)
- *v /= divisor;
- break;
- case 'f':
- *v = scale(*v, 65536, divisor);
- break;
- case 'p':
- *v = scale(*v, units_per_inch, divisor*72);
- break;
- case 'P':
- *v = scale(*v, units_per_inch, divisor*6);
- break;
- case 'm':
- {
- // Convert to hunits so that with -Tascii `m' behaves as in nroff.
- hunits em = curenv->get_size();
- *v = scale(*v, em.is_zero() ? hresolution : em.to_units(), divisor);
- }
- break;
- case 'M':
- {
- hunits em = curenv->get_size();
- *v = scale(*v, em.is_zero() ? hresolution : em.to_units(), divisor*100);
- }
- break;
- case 'n':
- {
- // Convert to hunits so that with -Tascii `n' behaves as in nroff.
- hunits en = curenv->get_size()/2;
- *v = scale(*v, en.is_zero() ? hresolution : en.to_units(), divisor);
- }
- break;
- case 'v':
- *v = scale(*v, curenv->get_vertical_spacing().to_units(), divisor);
- break;
- case 's':
- while (divisor > INT_MAX/(sizescale*72)) {
- divisor /= 10;
- *v /= 10;
- }
- *v = scale(*v, units_per_inch, divisor*sizescale*72);
- break;
- case 'z':
- *v = scale(*v, sizescale, divisor);
- break;
- default:
- assert(0);
- }
- if (do_next)
- tok.next();
- if (negative) {
- if (*v == INT_MIN) {
- error("numeric overflow");
- return 0;
- }
- *v = -*v;
- }
- return 1;
-}
-
-units scale(units n, units x, units y)
-{
- assert(x >= 0 && y > 0);
- if (x == 0)
- return 0;
- if (n >= 0) {
- if (n <= INT_MAX/x)
- return (n*x)/y;
- }
- else {
- if (-(unsigned)n <= -(unsigned)INT_MIN/x)
- return (n*x)/y;
- }
- double res = n*double(x)/double(y);
- if (res > INT_MAX) {
- error("numeric overflow");
- return INT_MAX;
- }
- else if (res < INT_MIN) {
- error("numeric overflow");
- return INT_MIN;
- }
- return int(res);
-}
-
-vunits::vunits(units x)
-{
- // don't depend on the rounding direction for division of negative integers
- if (vresolution == 1)
- n = x;
- else
- n = (x < 0
- ? -((-x + vresolution/2 - 1)/vresolution)
- : (x + vresolution/2 - 1)/vresolution);
-}
-
-hunits::hunits(units x)
-{
- // don't depend on the rounding direction for division of negative integers
- if (hresolution == 1)
- n = x;
- else
- n = (x < 0
- ? -((-x + hresolution/2 - 1)/hresolution)
- : (x + hresolution/2 - 1)/hresolution);
-}
diff --git a/contrib/groff/src/roff/troff/reg.cpp b/contrib/groff/src/roff/troff/reg.cpp
deleted file mode 100644
index 4501090a5ffe..000000000000
--- a/contrib/groff/src/roff/troff/reg.cpp
+++ /dev/null
@@ -1,473 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "troff.h"
-#include "dictionary.h"
-#include "token.h"
-#include "request.h"
-#include "reg.h"
-
-object_dictionary number_reg_dictionary(101);
-
-int reg::get_value(units * /*d*/)
-{
- return 0;
-}
-
-void reg::increment()
-{
- error("can't increment read-only register");
-}
-
-void reg::decrement()
-{
- error("can't decrement read-only register");
-}
-
-void reg::set_increment(units /*n*/)
-{
- error("can't auto increment read-only register");
-}
-
-void reg::alter_format(char /*f*/, int /*w*/)
-{
- error("can't alter format of read-only register");
-}
-
-const char *reg::get_format()
-{
- return "0";
-}
-
-void reg::set_value(units /*n*/)
-{
- error("can't write read-only register");
-}
-
-general_reg::general_reg() : format('1'), width(0), inc(0)
-{
-}
-
-static char uppercase_array[] = {
- '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',
-};
-
-static char lowercase_array[] = {
- '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',
-};
-
-static const char *number_value_to_ascii(int value, char format, int width)
-{
- static char buf[128]; // must be at least 21
- switch(format) {
- case '1':
- if (width <= 0)
- return i_to_a(value);
- else if (width > int(sizeof(buf) - 2))
- sprintf(buf, "%.*d", int(sizeof(buf) - 2), int(value));
- else
- sprintf(buf, "%.*d", width, int(value));
- break;
- case 'i':
- case 'I':
- {
- char *p = buf;
- // troff uses z and w to represent 10000 and 5000 in Roman
- // numerals; I can find no historical basis for this usage
- const char *s = format == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
- int n = int(value);
- if (n >= 40000 || n <= -40000) {
- error("magnitude of `%1' too big for i or I format", n);
- return i_to_a(n);
- }
- if (n == 0) {
- *p++ = '0';
- *p = 0;
- break;
- }
- if (n < 0) {
- *p++ = '-';
- n = -n;
- }
- while (n >= 10000) {
- *p++ = s[0];
- n -= 10000;
- }
- for (int i = 1000; i > 0; i /= 10, s += 2) {
- int m = n/i;
- n -= m*i;
- switch (m) {
- case 3:
- *p++ = s[2];
- /* falls through */
- case 2:
- *p++ = s[2];
- /* falls through */
- case 1:
- *p++ = s[2];
- break;
- case 4:
- *p++ = s[2];
- *p++ = s[1];
- break;
- case 8:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 7:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 6:
- *p++ = s[1];
- *p++ = s[2];
- break;
- case 5:
- *p++ = s[1];
- break;
- case 9:
- *p++ = s[2];
- *p++ = s[0];
- }
- }
- *p = 0;
- break;
- }
- case 'a':
- case 'A':
- {
- int n = value;
- char *p = buf;
- if (n == 0) {
- *p++ = '0';
- *p = 0;
- }
- else {
- if (n < 0) {
- n = -n;
- *p++ = '-';
- }
- // this is a bit tricky
- while (n > 0) {
- int d = n % 26;
- if (d == 0)
- d = 26;
- n -= d;
- n /= 26;
- *p++ = format == 'a' ? lowercase_array[d - 1] :
- uppercase_array[d - 1];
- }
- *p-- = 0;
- char *q = buf[0] == '-' ? buf + 1 : buf;
- while (q < p) {
- char temp = *q;
- *q = *p;
- *p = temp;
- --p;
- ++q;
- }
- }
- break;
- }
- default:
- assert(0);
- break;
- }
- return buf;
-}
-
-const char *general_reg::get_string()
-{
- units n;
- if (!get_value(&n))
- return "";
- return number_value_to_ascii(n, format, width);
-}
-
-
-void general_reg::increment()
-{
- int n;
- if (get_value(&n))
- set_value(n + inc);
-}
-
-void general_reg::decrement()
-{
- int n;
- if (get_value(&n))
- set_value(n - inc);
-}
-
-void general_reg::set_increment(units n)
-{
- inc = n;
-}
-
-void general_reg::alter_format(char f, int w)
-{
- format = f;
- width = w;
-}
-
-static const char *number_format_to_ascii(char format, int width)
-{
- static char buf[24];
- if (format == '1') {
- if (width > 0) {
- int n = width;
- if (n > int(sizeof(buf)) - 1)
- n = int(sizeof(buf)) - 1;
- sprintf(buf, "%.*d", n, 0);
- return buf;
- }
- else
- return "0";
- }
- else {
- buf[0] = format;
- buf[1] = '\0';
- return buf;
- }
-}
-
-const char *general_reg::get_format()
-{
- return number_format_to_ascii(format, width);
-}
-
-class number_reg : public general_reg {
- units value;
-public:
- number_reg();
- int get_value(units *);
- void set_value(units);
-};
-
-number_reg::number_reg() : value(0)
-{
-}
-
-int number_reg::get_value(units *res)
-{
- *res = value;
- return 1;
-}
-
-void number_reg::set_value(units n)
-{
- value = n;
-}
-
-variable_reg::variable_reg(units *p) : ptr(p)
-{
-}
-
-void variable_reg::set_value(units n)
-{
- *ptr = n;
-}
-
-int variable_reg::get_value(units *res)
-{
- *res = *ptr;
- return 1;
-}
-
-void define_number_reg()
-{
- symbol nm = get_name(1);
- if (nm.is_null()) {
- skip_line();
- return;
- }
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- units v;
- units prev_value;
- if (!r || !r->get_value(&prev_value))
- prev_value = 0;
- if (get_number(&v, 'u', prev_value)) {
- if (r == 0) {
- r = new number_reg;
- number_reg_dictionary.define(nm, r);
- }
- r->set_value(v);
- if (tok.space() && has_arg() && get_number(&v, 'u'))
- r->set_increment(v);
- }
- skip_line();
-}
-
-#if 0
-void inline_define_reg()
-{
- token start;
- start.next();
- if (!start.delimiter(1))
- return;
- tok.next();
- symbol nm = get_name(1);
- if (nm.is_null())
- return;
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- if (r == 0) {
- r = new number_reg;
- number_reg_dictionary.define(nm, r);
- }
- units v;
- units prev_value;
- if (!r->get_value(&prev_value))
- prev_value = 0;
- if (get_number(&v, 'u', prev_value)) {
- r->set_value(v);
- if (start != tok) {
- if (get_number(&v, 'u')) {
- r->set_increment(v);
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- }
- }
- }
-}
-#endif
-
-void set_number_reg(symbol nm, units n)
-{
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- if (r == 0) {
- r = new number_reg;
- number_reg_dictionary.define(nm, r);
- }
- r->set_value(n);
-}
-
-reg *lookup_number_reg(symbol nm)
-{
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- if (r == 0) {
- warning(WARN_REG, "number register `%1' not defined", nm.contents());
- r = new number_reg;
- number_reg_dictionary.define(nm, r);
- }
- return r;
-}
-
-void alter_format()
-{
- symbol nm = get_name(1);
- if (nm.is_null()) {
- skip_line();
- return;
- }
- reg *r = (reg *)number_reg_dictionary.lookup(nm);
- if (r == 0) {
- r = new number_reg;
- number_reg_dictionary.define(nm, r);
- }
- tok.skip();
- char c = tok.ch();
- if (csdigit(c)) {
- int n = 0;
- do {
- ++n;
- tok.next();
- } while (csdigit(tok.ch()));
- r->alter_format('1', n);
- }
- else if (c == 'i' || c == 'I' || c == 'a' || c == 'A')
- r->alter_format(c);
- else if (tok.newline() || tok.eof())
- warning(WARN_MISSING, "missing number register format");
- else
- error("bad number register format (got %1)", tok.description());
- skip_line();
-}
-
-void remove_reg()
-{
- for (;;) {
- symbol s = get_name();
- if (s.is_null())
- break;
- number_reg_dictionary.remove(s);
- }
- skip_line();
-}
-
-void alias_reg()
-{
- symbol s1 = get_name(1);
- if (!s1.is_null()) {
- symbol s2 = get_name(1);
- if (!s2.is_null()) {
- if (!number_reg_dictionary.alias(s1, s2))
- warning(WARN_REG, "number register `%1' not defined", s2.contents());
- }
- }
- skip_line();
-}
-
-void rename_reg()
-{
- symbol s1 = get_name(1);
- if (!s1.is_null()) {
- symbol s2 = get_name(1);
- if (!s2.is_null())
- number_reg_dictionary.rename(s1, s2);
- }
- skip_line();
-}
-
-void print_number_regs()
-{
- object_dictionary_iterator iter(number_reg_dictionary);
- reg *r;
- symbol s;
- while (iter.get(&s, (object **)&r)) {
- assert(!s.is_null());
- errprint("%1\t", s.contents());
- const char *p = r->get_string();
- if (p)
- errprint(p);
- errprint("\n");
- }
- fflush(stderr);
- skip_line();
-}
-
-void init_reg_requests()
-{
- init_request("rr", remove_reg);
- init_request("nr", define_number_reg);
- init_request("af", alter_format);
- init_request("aln", alias_reg);
- init_request("rnn", rename_reg);
- init_request("pnr", print_number_regs);
-}
diff --git a/contrib/groff/src/roff/troff/reg.h b/contrib/groff/src/roff/troff/reg.h
deleted file mode 100644
index bc2c3f2d44ff..000000000000
--- a/contrib/groff/src/roff/troff/reg.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-class reg : public object {
-public:
- virtual const char *get_string() = 0;
- virtual int get_value(units *);
- virtual void increment();
- virtual void decrement();
- virtual void set_increment(units);
- virtual void alter_format(char f, int w = 0);
- virtual const char *get_format();
- virtual void set_value(units);
-};
-
-class constant_int_reg : public reg {
- int *p;
-public:
- constant_int_reg(int *);
- const char *get_string();
-};
-
-class general_reg : public reg {
- char format;
- int width;
- int inc;
-public:
- general_reg();
- const char *get_string();
- void increment();
- void decrement();
- void alter_format(char f, int w = 0);
- void set_increment(units);
- const char *get_format();
- void add_value(units);
-
- void set_value(units) = 0;
- int get_value(units *) = 0;
-};
-
-class variable_reg : public general_reg {
- units *ptr;
-public:
- variable_reg(int *);
- void set_value(units);
- int get_value(units *);
-};
-
-extern object_dictionary number_reg_dictionary;
-extern void set_number_reg(symbol nm, units n);
-extern void check_output_limits(int x, int y);
-extern void reset_output_registers();
-
-reg *lookup_number_reg(symbol);
-#if 0
-void inline_define_reg();
-#endif
diff --git a/contrib/groff/src/roff/troff/request.h b/contrib/groff/src/roff/troff/request.h
deleted file mode 100644
index 24d25890fcde..000000000000
--- a/contrib/groff/src/roff/troff/request.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-typedef void (*REQUEST_FUNCP)();
-
-class macro;
-
-class request_or_macro : public object {
-public:
- request_or_macro();
- virtual void invoke(symbol s) = 0;
- virtual macro *to_macro();
-};
-
-class request : public request_or_macro {
- REQUEST_FUNCP p;
-public:
- void invoke(symbol);
- request(REQUEST_FUNCP);
-};
-
-void delete_request_or_macro(request_or_macro *);
-
-extern object_dictionary request_dictionary;
-
-class macro_header;
-struct node;
-
-class macro : public request_or_macro {
- const char *filename; // where was it defined?
- int lineno;
- int len;
- int empty_macro;
- int is_a_diversion;
-public:
- macro_header *p;
- macro();
- ~macro();
- macro(const macro &);
- macro(int);
- macro &operator=(const macro &);
- void append(unsigned char);
- void append(node *);
- void append_unsigned(unsigned int i);
- void append_int(int i);
- void append_str(const char *);
- void set(unsigned char, int);
- unsigned char get(int);
- int length();
- void invoke(symbol);
- macro *to_macro();
- void print_size();
- int empty();
- int is_diversion();
- friend class string_iterator;
- friend void chop_macro();
- friend void substring_request();
- friend int operator==(const macro &, const macro &);
-};
-
-extern void init_input_requests();
-extern void init_markup_requests();
-extern void init_div_requests();
-extern void init_node_requests();
-extern void init_reg_requests();
-extern void init_env_requests();
-extern void init_hyphen_requests();
-extern void init_request(const char *s, REQUEST_FUNCP f);
-
-class charinfo;
-class environment;
-
-node *charinfo_to_node_list(charinfo *, const environment *);
diff --git a/contrib/groff/src/roff/troff/token.h b/contrib/groff/src/roff/troff/token.h
deleted file mode 100644
index 6493976073ff..000000000000
--- a/contrib/groff/src/roff/troff/token.h
+++ /dev/null
@@ -1,242 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-class charinfo;
-struct node;
-class vunits;
-
-class token {
- symbol nm;
- node *nd;
- unsigned char c;
- int val;
- units dim;
- enum token_type {
- TOKEN_BACKSPACE,
- TOKEN_BEGIN_TRAP,
- TOKEN_CHAR, // a normal printing character
- TOKEN_DUMMY, // \&
- TOKEN_EMPTY, // this is the initial value
- TOKEN_END_TRAP,
- TOKEN_ESCAPE, // \e
- TOKEN_HYPHEN_INDICATOR,
- TOKEN_INTERRUPT, // \c
- TOKEN_ITALIC_CORRECTION, // \/
- TOKEN_LEADER, // ^A
- TOKEN_LEFT_BRACE,
- TOKEN_MARK_INPUT, // \k -- `nm' is the name of the register
- TOKEN_NEWLINE, // newline
- TOKEN_NODE,
- TOKEN_NUMBERED_CHAR,
- TOKEN_PAGE_EJECTOR,
- TOKEN_REQUEST,
- TOKEN_RIGHT_BRACE,
- TOKEN_SPACE, // ` ' -- ordinary space
- TOKEN_SPECIAL, // a special character -- \' \` \- \(xx \[xxx]
- TOKEN_SPREAD, // \p -- break and spread output line
- TOKEN_STRETCHABLE_SPACE, // \~
- TOKEN_UNSTRETCHABLE_SPACE, // `\ '
- TOKEN_TAB, // tab
- TOKEN_TRANSPARENT, // \!
- TOKEN_TRANSPARENT_DUMMY, // \)
- TOKEN_ZERO_WIDTH_BREAK, // \:
- TOKEN_EOF // end of file
- } type;
-public:
- token();
- ~token();
- token(const token &);
- void operator=(const token &);
- void next();
- void process();
- void skip();
- int eof();
- int nspaces(); // 1 if space, 2 if double space, 0 otherwise
- int space(); // is the current token a space?
- int stretchable_space(); // is the current token a stretchable space?
- int unstretchable_space(); // is the current token an unstretchable space?
- int white_space(); // is the current token space or tab?
- int special(); // is the current token a special character?
- int newline(); // is the current token a newline?
- int tab(); // is the current token a tab?
- int leader();
- int backspace();
- int delimiter(int warn = 0); // is it suitable for use as a delimiter?
- int dummy();
- int transparent_dummy();
- int transparent();
- int left_brace();
- int right_brace();
- int page_ejector();
- int hyphen_indicator();
- int zero_width_break();
- int operator==(const token &); // need this for delimiters, and for conditions
- int operator!=(const token &); // ditto
- unsigned char ch();
- charinfo *get_char(int required = 0);
- int add_to_node_list(node **);
- int title();
- void make_space();
- void make_newline();
- const char *description();
-
- friend void process_input_stack();
-};
-
-extern token tok; // the current token
-
-extern symbol get_name(int required = 0);
-extern symbol get_long_name(int required = 0);
-extern charinfo *get_optional_char();
-extern char *read_string();
-extern void check_missing_character();
-extern void skip_line();
-extern void handle_initial_title();
-
-enum char_mode {
- CHAR_NORMAL,
- CHAR_FALLBACK,
- CHAR_FONT_SPECIAL,
- CHAR_SPECIAL
-};
-
-extern void do_define_character(char_mode, const char * = 0);
-
-class hunits;
-extern void read_title_parts(node **part, hunits *part_width);
-
-extern int get_number_rigidly(units *result, unsigned char si);
-
-extern int get_number(units *result, unsigned char si);
-extern int get_integer(int *result);
-
-extern int get_number(units *result, unsigned char si, units prev_value);
-extern int get_integer(int *result, int prev_value);
-
-void interpolate_number_reg(symbol, int);
-
-const char *asciify(int c);
-
-inline int token::newline()
-{
- return type == TOKEN_NEWLINE;
-}
-
-inline int token::space()
-{
- return type == TOKEN_SPACE;
-}
-
-inline int token::stretchable_space()
-{
- return type == TOKEN_STRETCHABLE_SPACE;
-}
-
-inline int token::unstretchable_space()
-{
- return type == TOKEN_UNSTRETCHABLE_SPACE;
-}
-
-inline int token::special()
-{
- return type == TOKEN_SPECIAL;
-}
-
-inline int token::nspaces()
-{
- if (type == TOKEN_SPACE)
- return 1;
- else
- return 0;
-}
-
-inline int token::white_space()
-{
- return type == TOKEN_SPACE || type == TOKEN_TAB;
-}
-
-inline int token::transparent()
-{
- return type == TOKEN_TRANSPARENT;
-}
-
-inline int token::page_ejector()
-{
- return type == TOKEN_PAGE_EJECTOR;
-}
-
-inline unsigned char token::ch()
-{
- return type == TOKEN_CHAR ? c : 0;
-}
-
-inline int token::eof()
-{
- return type == TOKEN_EOF;
-}
-
-inline int token::dummy()
-{
- return type == TOKEN_DUMMY;
-}
-
-inline int token::transparent_dummy()
-{
- return type == TOKEN_TRANSPARENT_DUMMY;
-}
-
-inline int token::left_brace()
-{
- return type == TOKEN_LEFT_BRACE;
-}
-
-inline int token::right_brace()
-{
- return type == TOKEN_RIGHT_BRACE;
-}
-
-inline int token::tab()
-{
- return type == TOKEN_TAB;
-}
-
-inline int token::leader()
-{
- return type == TOKEN_LEADER;
-}
-
-inline int token::backspace()
-{
- return type == TOKEN_BACKSPACE;
-}
-
-inline int token::hyphen_indicator()
-{
- return type == TOKEN_HYPHEN_INDICATOR;
-}
-
-inline int token::zero_width_break()
-{
- return type == TOKEN_ZERO_WIDTH_BREAK;
-}
-
-int has_arg();
diff --git a/contrib/groff/src/roff/troff/troff.h b/contrib/groff/src/roff/troff/troff.h
deleted file mode 100644
index 661b3ed0595a..000000000000
--- a/contrib/groff/src/roff/troff/troff.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <time.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "assert.h"
-#include "color.h"
-#include "device.h"
-#include "searchpath.h"
-
-typedef int units;
-
-extern units scale(units n, units x, units y); // scale n by x/y
-
-extern units units_per_inch;
-
-extern int ascii_output_flag;
-extern int suppress_output_flag;
-extern int color_flag;
-extern int is_html;
-
-extern int tcommand_flag;
-extern int vresolution;
-extern int hresolution;
-extern int sizescale;
-
-extern search_path *mac_path;
-
-#include "cset.h"
-#include "cmap.h"
-#include "errarg.h"
-#include "error.h"
-
-enum warning_type {
- WARN_CHAR = 01,
- WARN_NUMBER = 02,
- WARN_BREAK = 04,
- WARN_DELIM = 010,
- WARN_EL = 020,
- WARN_SCALE = 040,
- WARN_RANGE = 0100,
- WARN_SYNTAX = 0200,
- WARN_DI = 0400,
- WARN_MAC = 01000,
- WARN_REG = 02000,
- WARN_TAB = 04000,
- WARN_RIGHT_BRACE = 010000,
- WARN_MISSING = 020000,
- WARN_INPUT = 040000,
- WARN_ESCAPE = 0100000,
- WARN_SPACE = 0200000,
- WARN_FONT = 0400000,
- WARN_IG = 01000000,
- WARN_COLOR = 02000000
- // change WARN_TOTAL if you add more warning types
-};
-
-const int WARN_TOTAL = 03777777;
-
-int warning(warning_type, const char *,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg);
-int output_warning(warning_type, const char *,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg);
diff --git a/contrib/groff/src/roff/troff/troff.man b/contrib/groff/src/roff/troff/troff.man
deleted file mode 100644
index 064a03fa7d46..000000000000
--- a/contrib/groff/src/roff/troff/troff.man
+++ /dev/null
@@ -1,705 +0,0 @@
-'\" t
-.ig
-troff.man
-
-Last update : 12 Oct 2003
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 1989, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-written by James Clark
-
-modified by Werner Lemberg <wl@gnu.org>
- Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr troff_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.if '\*[.T]'dvi' \
-. ftr CB CW
-.
-.de TQ
-.br
-.ns
-.TP \\$1
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Title
-.\" --------------------------------------------------------------------
-.
-.TH @G@TROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@troff \- the troff processor of the groff text formatting system
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@troff 'u
-.ti \niu
-.B @g@troff
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-abcivzCERU
-.OP \-d cs
-.OP \-f fam
-.OP \-F dir
-.OP \-I dir
-.OP \-m name
-.OP \-M dir
-.OP \-n num
-.OP \-o list
-.OP \-r cn
-.OP \-T name
-.OP \-w name
-.OP \-W name
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.P
-It is possible to have whitespace between a command line option and
-its parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of
-.BR troff .
-It is part of the groff document formatting system.
-.
-It is functionally compatible with UNIX troff, but has many extensions,
-see
-.BR \%groff_diff (@MAN7EXT@).
-Usually it should be invoked using the
-.BR groff (@MAN1EXT@)
-command which will also run preprocessors and postprocessors in the
-appropriate order and with the appropriate options.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP \w'\-dname=s'u+2n
-.B \-a
-Generate an
-.SM ASCII
-approximation of the typeset output.
-.
-.TP
-.B \-b
-Print a backtrace with each warning or error message.
-.
-This backtrace should help track down the cause of the error.
-.
-The line numbers given in the backtrace may not always be correct, for
-.BR @g@troff 's
-idea of line numbers gets confused by
-.B as
-or
-.B am
-requests.
-.
-.TP
-.B \-c
-Disable color output (always disabled in compatibility mode).
-.
-.TP
-.B \-C
-Enable compatibility mode.
-.
-.TP
-.BI \-d cs
-.TQ
-.BI \-d name = s
-Define
-.I c
-or
-.I name
-to be a string
-.IR s ;
-.I c
-must be a one letter name.
-.
-.TP
-.B \-E
-Inhibit all error messages of
-.BR @g@troff .
-Note that this doesn't affect messages output to standard error by macro
-packages using the
-.B tm
-or
-.B tm1
-requests.
-.
-.TP
-.BI \-f fam
-Use
-.I fam
-as the default font family.
-.
-.TP
-.BI \-F dir
-Search in directory (or directory path)
-.I dir
-for subdirectories
-.BI dev name
-.RI ( name
-is the name of the device) and there for the
-.B DESC
-file and font files.
-.I dir
-is scanned before all other font directories.
-.
-.TP
-.B \-i
-Read the standard input after all the named input files have been
-processed.
-.
-.TP
-.BI \-I dir
-This option may be used to specify a directory to search for
-files (both those on the command line and those named in
-.B \&.psbb
-requests).
-The current directory is always searched first.
-This option may be specified more than once;
-the directories will be searched in the order specified.
-No directory search is performed for files specified using an absolute path.
-.
-.TP
-.BI \-m name
-Read in the file
-.IB name .tmac\fR.
-If it isn't found, try
-.BI tmac. name
-instead.
-.
-It will be first searched for in directories given with the
-.B \-M
-command line option, then in directories given in the
-.B GROFF_TMAC_PATH
-environment variable, then in the current directory (only if in unsafe
-mode), the home directory, @SYSTEMMACRODIR@, @LOCALMACRODIR@, and
-@MACRODIR@.
-.
-.TP
-.BI \-M dir
-Search directory (or directory path)
-.I dir
-for macro files.
-.
-This is scanned before all other macro directories.
-.
-.TP
-.BI \-n num
-Number the first page
-.IR num .
-.
-.TP
-.BI \-o list
-Output only pages in
-.IR list ,
-which is a comma-separated list of page ranges;
-.I n
-means print page
-.IR n ,
-.IB m \- n
-means print every page between
-.I m
-and
-.IR n ,
-.BI \- n
-means print every page up to
-.IR n ,
-.IB n \-
-means print every page from
-.IR n .
-.B @g@troff
-will exit after printing the last page in the list.
-.
-.TP
-.BI \-r cn
-.TQ
-.BI \-r name = n
-Set number register
-.I c
-or
-.I name
-to
-.IR n ;
-.I c
-must be a one character name;
-.I n
-can be any troff numeric expression.
-.
-.TP
-.B \-R
-Don't load
-.B troffrc
-and
-.BR troffrc-end .
-.
-.TP
-.BI \-T name
-Prepare output for device
-.IR name ,
-rather than the default
-.BR @DEVICE@ ;
-see
-.BR groff (@MAN1EXT@)
-for a more detailed description.
-.
-.TP
-.B \-U
-Unsafe mode.
-.
-This will enable the following requests:
-.BR open ,
-.BR opena ,
-.BR pso ,
-.BR sy ,
-and
-.BR pi .
-For security reasons, these potentially dangerous requests are disabled
-otherwise.
-.
-It will also add the current directory to the macro search path.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-w name
-Enable warning
-.IR name .
-Available warnings are described in the section
-.I WARNINGS
-below.
-.
-For example, to enable all warnings, use
-.B \-w
-.BR all .
-Multiple
-.B \-w
-options are allowed.
-.
-.TP
-.BI \-W name
-Inhibit warning
-.IR name .
-Multiple
-.B \-W
-options are allowed.
-.
-.TP
-.B \-z
-Suppress formatted output.
-.
-.
-.\" --------------------------------------------------------------------
-.SH WARNINGS
-.\" --------------------------------------------------------------------
-.
-The warnings that can be given by
-.B @g@troff
-are divided into the following categories.
-.
-The name associated with each warning is used by the
-.B \-w
-and
-.B \-W
-options; the number is used by the
-.B warn
-request, and by the
-.B .warn
-register; it is always a power of 2 to allow bitwise composition.
-.
-.P
-.TS
-tab(@), center, box;
-c c c | c c c
-r rI lB | r rI lB.
-Bit@Code@Warning@Bit@Code@Warning
-_
-0@1@char@10@1024@reg
-1@2@number@11@2048@tab
-2@4@break@12@4096@right-brace
-3@8@delim@13@8192@missing
-4@16@el@14@16384@input
-5@32@scale@15@32768@escape
-6@64@range@16@65536@space
-7@128@syntax@17@131072@font
-8@256@di@18@262144@ig
-9@512@mac@19@524288@color
-.TE
-.
-.P
-.nr x \w'\fBright-brace'+1n+\w'00000'u
-.ta \nxuR
-.
-.TP \nxu+3n
-.BR break "\t4"
-In fill mode, lines which could not be broken so that their length was
-less than the line length.
-.
-This is enabled by default.
-.
-.TP
-.BR char "\t1"
-Non-existent characters.
-.
-This is enabled by default.
-.
-.TP
-.BR color "\t524288"
-Color related warnings.
-.
-.TP
-.BR delim "\t8"
-Missing or mismatched closing delimiters.
-.
-.TP
-.BR di "\t256"
-Use of
-.B di
-or
-.B da
-without an argument when there is no current diversion.
-.
-.TP
-.BR el "\t16"
-Use of the
-.B el
-request with no matching
-.B ie
-request.
-.
-.TP
-.BR escape "\t32768"
-Unrecognized escape sequences.
-.
-When an unrecognized escape sequence is encountered, the escape
-character is ignored.
-.
-.TP
-.BR font "\t131072"
-Non-existent fonts.
-.
-This is enabled by default.
-.
-.TP
-.BR ig "\t262144"
-Invalid escapes in text ignored with the
-.B ig
-request.
-.
-These are conditions that are errors when they do not occur in ignored
-text.
-.
-.TP
-.BR input "\t16384"
-Invalid input characters.
-.
-.TP
-.BR mac "\t512"
-Use of undefined strings, macros and diversions.
-.
-When an undefined string, macro or diversion is used, that string is
-automatically defined as empty.
-.
-So, in most cases, at most one warning will be given for each name.
-.
-.TP
-.BR missing "\t8192"
-Requests that are missing non-optional arguments.
-.
-.TP
-.BR number "\t2"
-Invalid numeric expressions.
-.
-This is enabled by default.
-.
-.TP
-.BR range "\t64"
-Out of range arguments.
-.
-.TP
-.BR reg "\t1024"
-Use of undefined number registers.
-.
-When an undefined number register is used, that register is
-automatically defined to have a value of\~0.
-.
-So, in most cases, at most one warning will be given for use of a
-particular name.
-.
-.TP
-.BR right-brace "\t4096"
-Use of
-.B \[rs]}
-where a number was expected.
-.
-.TP
-.BR scale "\t32"
-Meaningless scaling indicators.
-.
-.TP
-.BR space "\t65536"
-Missing space between a request or macro and its argument.
-.
-This warning will be given when an undefined name longer than two
-characters is encountered, and the first two characters of the name
-make a defined name.
-.
-The request or macro will not be invoked.
-.
-When this warning is given, no macro is automatically defined.
-.
-This is enabled by default.
-.
-This warning will never occur in compatibility mode.
-.
-.TP
-.BR syntax "\t128"
-Dubious syntax in numeric expressions.
-.
-.TP
-.BR tab "\t2048"
-Inappropriate use of a tab character.
-Either use of a tab character where a number was expected, or use of tab
-character in an unquoted macro argument.
-.
-.P
-There are also names that can be used to refer to groups of warnings:
-.
-.TP
-.B all
-All warnings except
-.BR di ,
-.BR mac ,
-and
-.BR reg .
-It is intended that this covers all warnings that are useful with
-traditional macro packages.
-.
-.TP
-.B w
-All warnings.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_TMAC_PATH
-A colon separated list of directories in which to search for
-macro files.
-.B @g@troff
-will scan directories given in the
-.B \-M
-option before these, and in standard directories (current directory if
-in unsafe mode, home directory,
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-.BR @MACRODIR@ )
-after these.
-.
-.TP
-.SM
-.B GROFF_TYPESETTER
-Default device.
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A colon separated list of directories in which to search for the
-.BI dev name
-directory.
-.B @g@troff
-will scan directories given in the
-.B \-F
-option before these, and in standard directories
-.RB ( @LOCALFONTDIR@ ,
-.BR @FONTDIR@ ,
-.BR @LEGACYFONTDIR@ )
-after these.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'@FONTDIR@/devname/DESC'u+3n
-.B @MACRODIR@/troffrc
-Initialization file (called before any other macro package).
-.
-.TP
-.B @MACRODIR@/troffrc-end
-Initialization file (called after any other macro package).
-.
-.TP
-.BI @MACRODIR@/ name .tmac
-.TQ
-.BI @MACRODIR@/tmac. name
-Macro files
-.
-.TP
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.BI @FONTDIR@/dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.P
-Note that
-.B troffrc
-and
-.B troffrc-end
-are neither searched in the current nor in the home directory by
-default for security reasons (even if the
-.B \-U
-option is given).
-.
-Use the
-.B \-M
-command line option or the
-.B GROFF_TMAC_PATH
-environment variable to add these directories to the search path if
-necessary.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHOR
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 1989, 2001, 2002, 2003 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://www.gnu.org/copyleft/fdl.html "GNU copyleft site" .
-This document was written by James Clark, with modifications from
-.MTO wl@gnu.org "Werner Lemberg"
-and
-.MTO bwarken@mayn.de "Bernd Warken"
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-The main program of the
-.I groff
-system, a wrapper around
-.IR @g@troff .
-.
-.TP
-.BR groff (@MAN7EXT@)
-A description of the
-.I groff
-language, including a short but complete reference of all predefined
-requests, registers, and escapes of plain
-.IR groff .
-From the command line, this is called by
-.RS
-.IP
-.B man 7 groff
-.RE
-.
-.TP
-.BR \%groff_diff (@MAN7EXT@)
-The differences of the
-.I groff
-language and the
-.I classical troff
-language.
-.
-Currently, this is the most actual document of the
-.I groff
-system.
-.
-.TP
-.BR roff (@MAN7EXT@)
-An overview over
-.I groff
-and other
-.I roff
-systems, including pointers to further related documentation.
-.
-.P
-The
-.I groff info
-.IR file ,
-cf.\&
-.BR info (@MAN1EXT@),
-presents all groff documentation within a single document.
-.
-.cp \n[troff_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs variables
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/addftinfo/Makefile.sub b/contrib/groff/src/utils/addftinfo/Makefile.sub
deleted file mode 100644
index 096af0d8b3c5..000000000000
--- a/contrib/groff/src/utils/addftinfo/Makefile.sub
+++ /dev/null
@@ -1,11 +0,0 @@
-PROG=addftinfo$(EXEEXT)
-MAN1=addftinfo.n
-XLIBS=$(LIBGROFF)
-OBJS=\
- addftinfo.$(OBJEXT) \
- guess.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/addftinfo.cpp \
- $(srcdir)/guess.cpp
-HDRS=\
- $(srcdir)/guess.h
diff --git a/contrib/groff/src/utils/addftinfo/addftinfo.cpp b/contrib/groff/src/utils/addftinfo/addftinfo.cpp
deleted file mode 100644
index b2fd15dbf88a..000000000000
--- a/contrib/groff/src/utils/addftinfo/addftinfo.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "guess.h"
-
-extern "C" const char *Version_string;
-
-static void usage(FILE *stream);
-static void usage();
-static void version();
-static void convert_font(const font_params &, FILE *, FILE *);
-
-typedef int font_params::*param_t;
-
-static struct {
- const char *name;
- param_t par;
-} param_table[] = {
- { "x-height", &font_params::x_height },
- { "fig-height", &font_params::fig_height },
- { "asc-height", &font_params::asc_height },
- { "body-height", &font_params::body_height },
- { "cap-height", &font_params::cap_height },
- { "comma-depth", &font_params::comma_depth },
- { "desc-depth", &font_params::desc_depth },
- { "body-depth", &font_params::body_depth },
-};
-
-// These are all in thousandths of an em.
-// These values are correct for PostScript Times Roman.
-
-#define DEFAULT_X_HEIGHT 448
-#define DEFAULT_FIG_HEIGHT 676
-#define DEFAULT_ASC_HEIGHT 682
-#define DEFAULT_BODY_HEIGHT 676
-#define DEFAULT_CAP_HEIGHT 662
-#define DEFAULT_COMMA_DEPTH 143
-#define DEFAULT_DESC_DEPTH 217
-#define DEFAULT_BODY_DEPTH 177
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- int i;
- for (i = 1; i < argc; i++) {
- if (!strcmp(argv[i], "-v") || !strcmp(argv[i],"--version"))
- version();
- if (!strcmp(argv[i],"--help")) {
- usage(stdout);
- exit(0);
- }
- }
- if (argc < 4)
- usage();
- int resolution;
- if (sscanf(argv[argc-3], "%d", &resolution) != 1)
- usage();
- if (resolution <= 0)
- fatal("resolution must be > 0");
- int unitwidth;
- if (sscanf(argv[argc-2], "%d", &unitwidth) != 1)
- usage();
- if (unitwidth <= 0)
- fatal("unitwidth must be > 0");
- font_params param;
- const char *font = argv[argc-1];
- param.italic = (font[0] != '\0' && strchr(font, '\0')[-1] == 'I');
- param.em = (resolution*unitwidth)/72;
- param.x_height = DEFAULT_X_HEIGHT;
- param.fig_height = DEFAULT_FIG_HEIGHT;
- param.asc_height = DEFAULT_ASC_HEIGHT;
- param.body_height = DEFAULT_BODY_HEIGHT;
- param.cap_height = DEFAULT_CAP_HEIGHT;
- param.comma_depth = DEFAULT_COMMA_DEPTH;
- param.desc_depth = DEFAULT_DESC_DEPTH;
- param.body_depth = DEFAULT_BODY_DEPTH;
- for (i = 1; i < argc && argv[i][0] == '-'; i++) {
- if (argv[i][1] == '-' && argv[i][2] == '\0') {
- i++;
- break;
- }
- if (i + 1 >= argc)
- usage();
- size_t j;
- for (j = 0;; j++) {
- if (j >= sizeof(param_table)/sizeof(param_table[0]))
- fatal("parameter `%1' not recognized", argv[i] + 1);
- if (strcmp(param_table[j].name, argv[i] + 1) == 0)
- break;
- }
- if (sscanf(argv[i+1], "%d", &(param.*(param_table[j].par))) != 1)
- fatal("invalid argument `%1'", argv[i+1]);
- i++;
- }
- if (argc - i != 3)
- usage();
- errno = 0;
- FILE *infp = fopen(font, "r");
- if (infp == 0)
- fatal("can't open `%1': %2", font, strerror(errno));
- convert_font(param, infp, stdout);
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-v] [-param value] ... "
- "resolution unitwidth font\n",
- program_name);
-}
-static void usage()
-{
- usage(stderr);
- exit(1);
-}
-
-static void version()
-{
- printf("GNU addftinfo (groff) version %s\n", Version_string);
- exit(0);
-}
-
-static int get_line(FILE *fp, string *p)
-{
- int c;
- p->clear();
- while ((c = getc(fp)) != EOF) {
- *p += char(c);
- if (c == '\n')
- break;
- }
- return p->length() > 0;
-}
-
-static void convert_font(const font_params &param, FILE *infp, FILE *outfp)
-{
- string s;
- while (get_line(infp, &s)) {
- put_string(s, outfp);
- if (s.length() >= 8
- && strncmp(&s[0], "charset", 7))
- break;
- }
- while (get_line(infp, &s)) {
- s += '\0';
- string name;
- const char *p = s.contents();
- while (csspace(*p))
- p++;
- while (*p != '\0' && !csspace(*p))
- name += *p++;
- while (csspace(*p))
- p++;
- for (const char *q = s.contents(); q < p; q++)
- putc(*q, outfp);
- char *next;
- char_metric metric;
- metric.width = (int)strtol(p, &next, 10);
- if (next != p) {
- printf("%d", metric.width);
- p = next;
- metric.type = (int)strtol(p, &next, 10);
- if (next != p) {
- name += '\0';
- guess(name.contents(), param, &metric);
- if (metric.sk == 0) {
- if (metric.left_ic == 0) {
- if (metric.ic == 0) {
- if (metric.depth == 0) {
- if (metric.height != 0)
- printf(",%d", metric.height);
- }
- else
- printf(",%d,%d", metric.height, metric.depth);
- }
- else
- printf(",%d,%d,%d", metric.height, metric.depth, metric.ic);
- }
- else
- printf(",%d,%d,%d,%d", metric.height, metric.depth, metric.ic,
- metric.left_ic);
- }
- else
- printf(",%d,%d,%d,%d,%d", metric.height, metric.depth, metric.ic,
- metric.left_ic, metric.sk);
- }
- }
- fputs(p, outfp);
- }
-}
-
diff --git a/contrib/groff/src/utils/addftinfo/addftinfo.man b/contrib/groff/src/utils/addftinfo/addftinfo.man
deleted file mode 100644
index a9b845517d43..000000000000
--- a/contrib/groff/src/utils/addftinfo/addftinfo.man
+++ /dev/null
@@ -1,111 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.TH ADDFTINFO @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-addftinfo \- add information to troff font files for use with groff
-.SH SYNOPSIS
-.B addftinfo
-[
-.B \-v
-]
-[
-.BI \- param\ value\fR.\|.\|.
-]
-.I res
-.I unitwidth
-.I font
-.SH DESCRIPTION
-.B addftinfo
-reads a troff font file
-and adds some additional font-metric information
-that is used by the groff system.
-The font file with the information added is written on the
-standard output.
-The information added is guessed using
-some parametric information about the font
-and assumptions
-about the traditional troff names for characters.
-The main information added is the heights and depths of characters.
-The
-.I res
-and
-.I unitwidth
-arguments should be the same as the corresponding parameters
-in the DESC file;
-.I font
-is the name of the file describing the font;
-if
-.I font
-ends with
-.B I
-the font will be assumed to be italic.
-.SH OPTIONS
-.B \-v
-prints the version number.
-.LP
-All other options changes one of the parameters that is used
-to derive the heights and depths.
-Like the existing quantities in the font
-file, each
-.I value
-is in
-.RI inches/ res
-for a font whose point size is
-.IR unitwidth .
-.I param
-must be one of:
-.TP
-.B x-height
-The height of lowercase letters without ascenders such as x.
-.TP
-.B fig-height
-The height of figures (digits).
-.TP
-.B asc-height
-The height of characters with ascenders, such as b, d or l.
-.TP
-.B body-height
-The height of characters such as parentheses.
-.TP
-.B cap-height
-The height of uppercase letters such as A.
-.TP
-.B comma-depth
-The depth of a comma.
-.TP
-.B desc-depth
-The depth of characters with descenders, such as p,q, or y.
-.TP
-.B body-depth
-The depth of characters such as parentheses.
-.LP
-.B addftinfo
-makes no attempt to use the specified parameters to guess
-the unspecified parameters.
-If a parameter is not specified the default will be used.
-The defaults are chosen to have the reasonable values for
-a Times font.
-.SH "SEE ALSO"
-.BR groff_font (@MAN5EXT@),
-.BR groff (@MAN1EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/addftinfo/guess.cpp b/contrib/groff/src/utils/addftinfo/guess.cpp
deleted file mode 100644
index 7ae36dcdecf7..000000000000
--- a/contrib/groff/src/utils/addftinfo/guess.cpp
+++ /dev/null
@@ -1,490 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "guess.h"
-
-void guess(const char *s, const font_params &param, char_metric *metric)
-{
- int &height = metric->height;
- int &depth = metric->depth;
-
- metric->ic = 0;
- metric->left_ic = 0;
- metric->sk = 0;
- height = 0;
- depth = 0;
- if (s[0] == '\0' || (s[1] != '\0' && s[2] != '\0'))
- goto do_default;
-#define HASH(c1, c2) (((unsigned char)(c1) << 8) | (unsigned char)(c2))
- switch (HASH(s[0], s[1])) {
- default:
- do_default:
- if (metric->type & 01)
- depth = param.desc_depth;
- if (metric->type & 02)
- height = param.asc_height;
- else
- height = param.x_height;
- break;
- case HASH('\\', '|'):
- case HASH('\\', '^'):
- case HASH('\\', '&'):
- // these have zero height and depth
- break;
- case HASH('f', 0):
- height = param.asc_height;
- if (param.italic)
- depth = param.desc_depth;
- break;
- case HASH('a', 0):
- case HASH('c', 0):
- case HASH('e', 0):
- case HASH('m', 0):
- case HASH('n', 0):
- case HASH('o', 0):
- case HASH('r', 0):
- case HASH('s', 0):
- case HASH('u', 0):
- case HASH('v', 0):
- case HASH('w', 0):
- case HASH('x', 0):
- case HASH('z', 0):
- height = param.x_height;
- break;
- case HASH('i', 0):
- height = param.x_height;
- break;
- case HASH('b', 0):
- case HASH('d', 0):
- case HASH('h', 0):
- case HASH('k', 0):
- case HASH('l', 0):
- case HASH('F', 'i'):
- case HASH('F', 'l'):
- case HASH('f', 'f'):
- case HASH('f', 'i'):
- case HASH('f', 'l'):
- height = param.asc_height;
- break;
- case HASH('t', 0):
- height = param.asc_height;
- break;
- case HASH('g', 0):
- case HASH('p', 0):
- case HASH('q', 0):
- case HASH('y', 0):
- height = param.x_height;
- depth = param.desc_depth;
- break;
- case HASH('j', 0):
- height = param.x_height;
- depth = param.desc_depth;
- break;
- case HASH('A', 0):
- case HASH('B', 0):
- case HASH('C', 0):
- case HASH('D', 0):
- case HASH('E', 0):
- case HASH('F', 0):
- case HASH('G', 0):
- case HASH('H', 0):
- case HASH('I', 0):
- case HASH('J', 0):
- case HASH('K', 0):
- case HASH('L', 0):
- case HASH('M', 0):
- case HASH('N', 0):
- case HASH('O', 0):
- case HASH('P', 0):
- case HASH('Q', 0):
- case HASH('R', 0):
- case HASH('S', 0):
- case HASH('T', 0):
- case HASH('U', 0):
- case HASH('V', 0):
- case HASH('W', 0):
- case HASH('X', 0):
- case HASH('Y', 0):
- case HASH('Z', 0):
- height = param.cap_height;
- break;
- case HASH('*', 'A'):
- case HASH('*', 'B'):
- case HASH('*', 'C'):
- case HASH('*', 'D'):
- case HASH('*', 'E'):
- case HASH('*', 'F'):
- case HASH('*', 'G'):
- case HASH('*', 'H'):
- case HASH('*', 'I'):
- case HASH('*', 'K'):
- case HASH('*', 'L'):
- case HASH('*', 'M'):
- case HASH('*', 'N'):
- case HASH('*', 'O'):
- case HASH('*', 'P'):
- case HASH('*', 'Q'):
- case HASH('*', 'R'):
- case HASH('*', 'S'):
- case HASH('*', 'T'):
- case HASH('*', 'U'):
- case HASH('*', 'W'):
- case HASH('*', 'X'):
- case HASH('*', 'Y'):
- case HASH('*', 'Z'):
- height = param.cap_height;
- break;
- case HASH('0', 0):
- case HASH('1', 0):
- case HASH('2', 0):
- case HASH('3', 0):
- case HASH('4', 0):
- case HASH('5', 0):
- case HASH('6', 0):
- case HASH('7', 0):
- case HASH('8', 0):
- case HASH('9', 0):
- case HASH('1', '2'):
- case HASH('1', '4'):
- case HASH('3', '4'):
- height = param.fig_height;
- break;
- case HASH('(', 0):
- case HASH(')', 0):
- case HASH('[', 0):
- case HASH(']', 0):
- case HASH('{', 0):
- case HASH('}', 0):
- height = param.body_height;
- depth = param.body_depth;
- break;
- case HASH('i', 's'):
- height = (param.em*3)/4;
- depth = param.em/4;
- break;
- case HASH('*', 'a'):
- case HASH('*', 'e'):
- case HASH('*', 'i'):
- case HASH('*', 'k'):
- case HASH('*', 'n'):
- case HASH('*', 'o'):
- case HASH('*', 'p'):
- case HASH('*', 's'):
- case HASH('*', 't'):
- case HASH('*', 'u'):
- case HASH('*', 'w'):
- height = param.x_height;
- break;
- case HASH('*', 'd'):
- case HASH('*', 'l'):
- height = param.asc_height;
- break;
- case HASH('*', 'g'):
- case HASH('*', 'h'):
- case HASH('*', 'm'):
- case HASH('*', 'r'):
- case HASH('*', 'x'):
- case HASH('*', 'y'):
- height = param.x_height;
- depth = param.desc_depth;
- break;
- case HASH('*', 'b'):
- case HASH('*', 'c'):
- case HASH('*', 'f'):
- case HASH('*', 'q'):
- case HASH('*', 'z'):
- height = param.asc_height;
- depth = param.desc_depth;
- break;
- case HASH('t', 's'):
- height = param.x_height;
- depth = param.desc_depth;
- break;
- case HASH('!', 0):
- case HASH('?', 0):
- case HASH('"', 0):
- case HASH('#', 0):
- case HASH('$', 0):
- case HASH('%', 0):
- case HASH('&', 0):
- case HASH('*', 0):
- case HASH('+', 0):
- height = param.asc_height;
- break;
- case HASH('`', 0):
- case HASH('\'', 0):
- height = param.asc_height;
- break;
- case HASH('~', 0):
- case HASH('^', 0):
- case HASH('a', 'a'):
- case HASH('g', 'a'):
- height = param.asc_height;
- break;
- case HASH('r', 'u'):
- case HASH('.', 0):
- break;
- case HASH(',', 0):
- depth = param.comma_depth;
- break;
- case HASH('m', 'i'):
- case HASH('-', 0):
- case HASH('h', 'y'):
- case HASH('e', 'm'):
- height = param.x_height;
- break;
- case HASH(':', 0):
- height = param.x_height;
- break;
- case HASH(';', 0):
- height = param.x_height;
- depth = param.comma_depth;
- break;
- case HASH('=', 0):
- case HASH('e', 'q'):
- height = param.x_height;
- break;
- case HASH('<', 0):
- case HASH('>', 0):
- case HASH('>', '='):
- case HASH('<', '='):
- case HASH('@', 0):
- case HASH('/', 0):
- case HASH('|', 0):
- case HASH('\\', 0):
- height = param.asc_height;
- break;
- case HASH('_', 0):
- case HASH('u', 'l'):
- case HASH('\\', '_'):
- depth = param.em/4;
- break;
- case HASH('r', 'n'):
- height = (param.em*3)/4;
- break;
- case HASH('s', 'r'):
- height = (param.em*3)/4;
- depth = param.em/4;
- break;
- case HASH('b', 'u'):
- case HASH('s', 'q'):
- case HASH('d', 'e'):
- case HASH('d', 'g'):
- case HASH('f', 'm'):
- case HASH('c', 't'):
- case HASH('r', 'g'):
- case HASH('c', 'o'):
- case HASH('p', 'l'):
- case HASH('*', '*'):
- case HASH('s', 'c'):
- case HASH('s', 'l'):
- case HASH('=', '='):
- case HASH('~', '='):
- case HASH('a', 'p'):
- case HASH('!', '='):
- case HASH('-', '>'):
- case HASH('<', '-'):
- case HASH('u', 'a'):
- case HASH('d', 'a'):
- case HASH('m', 'u'):
- case HASH('d', 'i'):
- case HASH('+', '-'):
- case HASH('c', 'u'):
- case HASH('c', 'a'):
- case HASH('s', 'b'):
- case HASH('s', 'p'):
- case HASH('i', 'b'):
- case HASH('i', 'p'):
- case HASH('i', 'f'):
- case HASH('p', 'd'):
- case HASH('g', 'r'):
- case HASH('n', 'o'):
- case HASH('p', 't'):
- case HASH('e', 's'):
- case HASH('m', 'o'):
- case HASH('b', 'r'):
- case HASH('d', 'd'):
- case HASH('r', 'h'):
- case HASH('l', 'h'):
- case HASH('o', 'r'):
- case HASH('c', 'i'):
- height = param.asc_height;
- break;
- case HASH('l', 't'):
- case HASH('l', 'b'):
- case HASH('r', 't'):
- case HASH('r', 'b'):
- case HASH('l', 'k'):
- case HASH('r', 'k'):
- case HASH('b', 'v'):
- case HASH('l', 'f'):
- case HASH('r', 'f'):
- case HASH('l', 'c'):
- case HASH('r', 'c'):
- height = (param.em*3)/4;
- depth = param.em/4;
- break;
-#if 0
- case HASH('%', '0'):
- case HASH('-', '+'):
- case HASH('-', 'D'):
- case HASH('-', 'd'):
- case HASH('-', 'd'):
- case HASH('-', 'h'):
- case HASH('.', 'i'):
- case HASH('.', 'j'):
- case HASH('/', 'L'):
- case HASH('/', 'O'):
- case HASH('/', 'l'):
- case HASH('/', 'o'):
- case HASH('=', '~'):
- case HASH('A', 'E'):
- case HASH('A', 'h'):
- case HASH('A', 'N'):
- case HASH('C', 's'):
- case HASH('D', 'o'):
- case HASH('F', 'c'):
- case HASH('F', 'o'):
- case HASH('I', 'J'):
- case HASH('I', 'm'):
- case HASH('O', 'E'):
- case HASH('O', 'f'):
- case HASH('O', 'K'):
- case HASH('O', 'm'):
- case HASH('O', 'R'):
- case HASH('P', 'o'):
- case HASH('R', 'e'):
- case HASH('S', '1'):
- case HASH('S', '2'):
- case HASH('S', '3'):
- case HASH('T', 'P'):
- case HASH('T', 'p'):
- case HASH('Y', 'e'):
- case HASH('\\', '-'):
- case HASH('a', '"'):
- case HASH('a', '-'):
- case HASH('a', '.'):
- case HASH('a', '^'):
- case HASH('a', 'b'):
- case HASH('a', 'c'):
- case HASH('a', 'd'):
- case HASH('a', 'e'):
- case HASH('a', 'h'):
- case HASH('a', 'o'):
- case HASH('a', 't'):
- case HASH('a', '~'):
- case HASH('b', 'a'):
- case HASH('b', 'b'):
- case HASH('b', 's'):
- case HASH('c', '*'):
- case HASH('c', '+'):
- case HASH('f', '/'):
- case HASH('f', 'a'):
- case HASH('f', 'c'):
- case HASH('f', 'o'):
- case HASH('h', 'a'):
- case HASH('h', 'o'):
- case HASH('i', 'j'):
- case HASH('l', 'A'):
- case HASH('l', 'B'):
- case HASH('l', 'C'):
- case HASH('m', 'd'):
- case HASH('n', 'c'):
- case HASH('n', 'e'):
- case HASH('n', 'm'):
- case HASH('o', 'A'):
- case HASH('o', 'a'):
- case HASH('o', 'e'):
- case HASH('o', 'q'):
- case HASH('p', 'l'):
- case HASH('p', 'p'):
- case HASH('p', 's'):
- case HASH('r', '!'):
- case HASH('r', '?'):
- case HASH('r', 'A'):
- case HASH('r', 'B'):
- case HASH('r', 'C'):
- case HASH('r', 's'):
- case HASH('s', 'h'):
- case HASH('s', 's'):
- case HASH('t', 'e'):
- case HASH('t', 'f'):
- case HASH('t', 'i'):
- case HASH('t', 'm'):
- case HASH('~', '~'):
- case HASH('v', 'S'):
- case HASH('v', 'Z'):
- case HASH('v', 's'):
- case HASH('v', 'z'):
- case HASH('^', 'A'):
- case HASH('^', 'E'):
- case HASH('^', 'I'):
- case HASH('^', 'O'):
- case HASH('^', 'U'):
- case HASH('^', 'a'):
- case HASH('^', 'e'):
- case HASH('^', 'i'):
- case HASH('^', 'o'):
- case HASH('^', 'u'):
- case HASH('`', 'A'):
- case HASH('`', 'E'):
- case HASH('`', 'I'):
- case HASH('`', 'O'):
- case HASH('`', 'U'):
- case HASH('`', 'a'):
- case HASH('`', 'e'):
- case HASH('`', 'i'):
- case HASH('`', 'o'):
- case HASH('`', 'u'):
- case HASH('~', 'A'):
- case HASH('~', 'N'):
- case HASH('~', 'O'):
- case HASH('~', 'a'):
- case HASH('~', 'n'):
- case HASH('~', 'o'):
- case HASH('\'', 'A'):
- case HASH('\'', 'C'):
- case HASH('\'', 'E'):
- case HASH('\'', 'I'):
- case HASH('\'', 'O'):
- case HASH('\'', 'U'):
- case HASH('\'', 'a'):
- case HASH('\'', 'c'):
- case HASH('\'', 'e'):
- case HASH('\'', 'i'):
- case HASH('\'', 'o'):
- case HASH('\'', 'u')
- case HASH(':', 'A'):
- case HASH(':', 'E'):
- case HASH(':', 'I'):
- case HASH(':', 'O'):
- case HASH(':', 'U'):
- case HASH(':', 'Y'):
- case HASH(':', 'a'):
- case HASH(':', 'e'):
- case HASH(':', 'i'):
- case HASH(':', 'o'):
- case HASH(':', 'u'):
- case HASH(':', 'y'):
- case HASH(',', 'C'):
- case HASH(',', 'c'):
-#endif
- }
-}
diff --git a/contrib/groff/src/utils/addftinfo/guess.h b/contrib/groff/src/utils/addftinfo/guess.h
deleted file mode 100644
index 26f0883e8df8..000000000000
--- a/contrib/groff/src/utils/addftinfo/guess.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-struct font_params {
- int italic;
- int em;
- int x_height;
- int fig_height;
- int cap_height;
- int asc_height;
- int body_height;
- int comma_depth;
- int desc_depth;
- int body_depth;
-};
-
-struct char_metric {
- int width;
- int type;
- int height;
- int depth;
- int ic;
- int left_ic;
- int sk;
-};
-
-void guess(const char *s, const font_params &param, char_metric *metric);
diff --git a/contrib/groff/src/utils/afmtodit/Makefile.sub b/contrib/groff/src/utils/afmtodit/Makefile.sub
deleted file mode 100644
index 53afc74bfa40..000000000000
--- a/contrib/groff/src/utils/afmtodit/Makefile.sub
+++ /dev/null
@@ -1,25 +0,0 @@
-MAN1=afmtodit.n
-CLEANADD=afmtodit
-
-all: afmtodit
-
-afmtodit: afmtodit.pl
- if test -n "$(PERLPATH)"; then \
- sed -e "s|/usr/bin/perl|$(PERLPATH)|" \
- -e "s|@VERSION@|$(version)$(revision)|" \
- -e "s|@FONTDIR@|$(fontdir)|" \
- $(srcdir)/afmtodit.pl >afmtodit; \
- else \
- sed -e "s|@VERSION@|$(version)$(revision)|" \
- -e "s|@FONTDIR@|$(fontdir)|" \
- $(srcdir)/afmtodit.pl >afmtodit; \
- fi
- chmod +x afmtodit
-
-install_data: afmtodit
- -test -d $(bindir) || $(mkinstalldirs) $(bindir)
- -rm -f $(bindir)/afmtodit
- $(INSTALL_SCRIPT) afmtodit $(bindir)/afmtodit
-
-uninstall_sub:
- -rm -f $(bindir)/afmtodit
diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.man b/contrib/groff/src/utils/afmtodit/afmtodit.man
deleted file mode 100644
index 978de344ea06..000000000000
--- a/contrib/groff/src/utils/afmtodit/afmtodit.man
+++ /dev/null
@@ -1,337 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.de OP
-. ie \\n(.$-1 .RI "[\ \fB\\$1\fP\ " "\\$2" "\ ]"
-. el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.
-.TH AFMTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-afmtodit \- create font files for use with groff \-Tps
-.
-.
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBafmtodit 'u
-.ti \niu
-.B afmtodit
-.OP \-mnsvx
-.OP \-a n
-.OP \-d desc_file
-.OP \-e enc_file
-.OP \-i n
-.I afm_file
-.I map_file
-.I font
-.br
-.ad \na
-.
-.LP
-The whitespace between an command line option and its argument is optional.
-.
-.SH DESCRIPTION
-.B afmtodit
-creates a font file for use with groff and
-.BR grops .
-.
-.B afmtodit
-is written in perl;
-you must have perl version 5.004 or newer installed in order to run
-.BR afmtodit .
-.
-.LP
-.I afm_file
-is the AFM (Adobe Font Metric) file for the font.
-.
-.LP
-.I map_file
-is a file that says which groff character names map onto
-each PostScript character name;
-this file should contain a sequence of lines of the form
-.IP
-.I
-ps_char groff_char
-.LP
-where
-.I ps_char
-is the PostScript name of the character
-and
-.I groff_char
-is the groff name of the character (as used in the groff font file).
-.
-The same
-.I ps_char
-can occur multiple times in the file;
-each
-.I groff_char
-must occur at most once.
-.
-Lines starting with
-.B #
-and blank lines are ignored.
-.
-If the file isn't found in the current directory, it is searched in
-the `devps/generate' subdirectory of the default font directory.
-.
-.LP
-If a PostScript character is not named as
-.BI uni XXXX
-.RI ( XXXX
-are four uppercase hexadecimal digits), and is not mentioned in
-.IR map_file ,
-and a generic groff glyph name can't be deduced using the
-Adobe Glyph List (AGL, built into
-.BR afmtodit ),
-then
-.B afmtodit
-puts the PostScript character into the groff font file as an unnamed
-character which can only be accessed by the
-.B \eN
-escape sequence in
-.BR troff .
-.
-If option
-.B \-e
-is not specified, the encoding defined in the AFM file (i.e., entries
-with non-negative character codes) is used.
-.
-Please refer to section `Using Symbols' in the groff info file which
-describes how groff glyph names are constructed.
-.
-.LP
-Characters not encoded in the AFM file (i.e., entries which have \-1 as
-the character code) are still available in groff; they get glyph index
-values greater than 255 (or greater than the biggest character code used
-in the AFM file in the unlikely case that it is greater than 255) in the
-groff font file.
-.
-Glyph indices of unencoded characters don't have a specific order; it
-is best to access them with glyph names only.
-.
-.LP
-The groff font file will be output to a file called
-.IR font .
-.
-.LP
-If there is a downloadable font file for the font, it may be listed in
-the file
-.BR @FONTDIR@/devps/download ;
-see
-.BR grops (@MAN1EXT@).
-.
-.LP
-If the
-.B \-i
-option is used,
-.B afmtodit
-will automatically generate an italic correction,
-a left italic correction and a subscript correction
-for each character
-(the significance of these parameters is explained in
-.BR groff_font (@MAN5EXT@));
-these parameters may be specified for individual characters by
-adding to the
-.I afm_file
-lines of the form:
-.IP
-.BI italicCorrection\ ps_char\ n
-.br
-.BI leftItalicCorrection\ ps_char\ n
-.br
-.BI subscriptCorrection\ ps_char\ n
-.LP
-where
-.I ps_char
-is the PostScript name of the character,
-and
-.I n
-is the desired value of the corresponding parameter in thousandths of an em.
-.
-These parameters are normally needed only for italic (or oblique) fonts.
-.
-.
-.SH OPTIONS
-.TP
-.BI \-a n
-Use
-.I n
-as the slant parameter in the font file;
-this is used by groff in the positioning of accents.
-.
-By default
-.B afmtodit
-uses the negative of the ItalicAngle specified in the afm file;
-with true italic fonts it is sometimes desirable to use
-a slant that is less than this.
-.
-If you find that characters from an italic font have accents
-placed too far to the right over them,
-then use the
-.B \-a
-option to give the font a smaller slant.
-.
-.TP
-.BI \-d desc_file
-The device description file is
-.I desc_file
-rather than the default
-.BR DESC .
-.
-If not found in the current directory, the `devps' subdirectory of the
-default font directory is searched (this is true for both the default
-device description file and a file given with option
-.BR \-d ).
-.
-.TP
-.BI \-e enc_file
-The PostScript font should be reencoded to use the encoding described
-in enc_file.
-.
-The format of
-.I enc_file
-is described in
-.BR grops (@MAN1EXT@).
-.
-If not found in the current directory, the `devps' subdirectory of the
-default font directory is searched.
-.
-.TP
-.BI \-i n
-Generate an italic correction for each character so that
-the character's width plus the character's italic correction
-is equal to
-.I n
-thousandths of an em
-plus the amount by which the right edge of the character's bounding box
-is to the right of the character's origin.
-.
-If this would result in a negative italic correction, use a zero
-italic correction instead.
-.
-.IP
-Also generate a subscript correction equal to the
-product of the tangent of the slant of the font and
-four fifths of the x-height of the font.
-.
-If this would result in a subscript correction greater than the italic
-correction, use a subscript correction equal to the italic correction
-instead.
-.
-.IP
-Also generate a left italic correction for each character
-equal to
-.I n
-thousandths of an em
-plus the amount by which the left edge of the character's bounding box
-is to the left of the character's origin.
-.
-The left italic correction may be negative unless option
-.B \-m
-is given.
-.
-.IP
-This option is normally needed only with italic (or oblique) fonts.
-.
-The font files distributed with groff were created using an option of
-.B \-i50
-for italic fonts.
-.
-.TP
-.B \-m
-Prevent negative left italic correction values.
-.
-Roman font files distributed with groff were created with
-.B \-i0\ \-m
-to improve spacing with
-.BR @g@eqn (@MAN1EXT@).
-.
-.TP
-.B \-n
-Don't output a
-.B ligatures
-command for this font.
-.
-Use this with constant-width fonts.
-.
-.TP
-.B \-s
-The font is special.
-.
-The effect of this option is to add the
-.B special
-command to the font file.
-.
-.TP
-.B \-v
-Print version.
-.
-.TP
-.B \-x
-Don't use the built-in Adobe Glyph List.
-.
-.
-.SH FILES
-.Tp \w'\fB@FONTDIR@/devps/download'u+2n
-.B @FONTDIR@/devps/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devps/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @FONTDIR@/devps/download
-List of downloadable fonts.
-.
-.TP
-.B @FONTDIR@/devps/text.enc
-Encoding used for text fonts.
-.
-.TP
-.B @FONTDIR@/devps/generate/textmap
-Standard mapping.
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR grops (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR perl (1)
-.
-.LP
-The groff info file, section `Using Symbols'.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.pl b/contrib/groff/src/utils/afmtodit/afmtodit.pl
deleted file mode 100644
index a0c056ed20a5..000000000000
--- a/contrib/groff/src/utils/afmtodit/afmtodit.pl
+++ /dev/null
@@ -1,6566 +0,0 @@
-#! /usr/bin/env perl -w
-# -*- Perl -*-
-# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-use strict;
-
-my %unicode_decomposed = (
- "00C0", "0041_0300",
- "00C1", "0041_0301",
- "00C2", "0041_0302",
- "00C3", "0041_0303",
- "00C4", "0041_0308",
- "00C5", "0041_030A",
- "00C7", "0043_0327",
- "00C8", "0045_0300",
- "00C9", "0045_0301",
- "00CA", "0045_0302",
- "00CB", "0045_0308",
- "00CC", "0049_0300",
- "00CD", "0049_0301",
- "00CE", "0049_0302",
- "00CF", "0049_0308",
- "00D1", "004E_0303",
- "00D2", "004F_0300",
- "00D3", "004F_0301",
- "00D4", "004F_0302",
- "00D5", "004F_0303",
- "00D6", "004F_0308",
- "00D9", "0055_0300",
- "00DA", "0055_0301",
- "00DB", "0055_0302",
- "00DC", "0055_0308",
- "00DD", "0059_0301",
- "00E0", "0061_0300",
- "00E1", "0061_0301",
- "00E2", "0061_0302",
- "00E3", "0061_0303",
- "00E4", "0061_0308",
- "00E5", "0061_030A",
- "00E7", "0063_0327",
- "00E8", "0065_0300",
- "00E9", "0065_0301",
- "00EA", "0065_0302",
- "00EB", "0065_0308",
- "00EC", "0069_0300",
- "00ED", "0069_0301",
- "00EE", "0069_0302",
- "00EF", "0069_0308",
- "00F1", "006E_0303",
- "00F2", "006F_0300",
- "00F3", "006F_0301",
- "00F4", "006F_0302",
- "00F5", "006F_0303",
- "00F6", "006F_0308",
- "00F9", "0075_0300",
- "00FA", "0075_0301",
- "00FB", "0075_0302",
- "00FC", "0075_0308",
- "00FD", "0079_0301",
- "00FF", "0079_0308",
- "0100", "0041_0304",
- "0101", "0061_0304",
- "0102", "0041_0306",
- "0103", "0061_0306",
- "0104", "0041_0328",
- "0105", "0061_0328",
- "0106", "0043_0301",
- "0107", "0063_0301",
- "0108", "0043_0302",
- "0109", "0063_0302",
- "010A", "0043_0307",
- "010B", "0063_0307",
- "010C", "0043_030C",
- "010D", "0063_030C",
- "010E", "0044_030C",
- "010F", "0064_030C",
- "0112", "0045_0304",
- "0113", "0065_0304",
- "0114", "0045_0306",
- "0115", "0065_0306",
- "0116", "0045_0307",
- "0117", "0065_0307",
- "0118", "0045_0328",
- "0119", "0065_0328",
- "011A", "0045_030C",
- "011B", "0065_030C",
- "011C", "0047_0302",
- "011D", "0067_0302",
- "011E", "0047_0306",
- "011F", "0067_0306",
- "0120", "0047_0307",
- "0121", "0067_0307",
- "0122", "0047_0327",
- "0123", "0067_0327",
- "0124", "0048_0302",
- "0125", "0068_0302",
- "0128", "0049_0303",
- "0129", "0069_0303",
- "012A", "0049_0304",
- "012B", "0069_0304",
- "012C", "0049_0306",
- "012D", "0069_0306",
- "012E", "0049_0328",
- "012F", "0069_0328",
- "0130", "0049_0307",
- "0134", "004A_0302",
- "0135", "006A_0302",
- "0136", "004B_0327",
- "0137", "006B_0327",
- "0139", "004C_0301",
- "013A", "006C_0301",
- "013B", "004C_0327",
- "013C", "006C_0327",
- "013D", "004C_030C",
- "013E", "006C_030C",
- "0143", "004E_0301",
- "0144", "006E_0301",
- "0145", "004E_0327",
- "0146", "006E_0327",
- "0147", "004E_030C",
- "0148", "006E_030C",
- "014C", "004F_0304",
- "014D", "006F_0304",
- "014E", "004F_0306",
- "014F", "006F_0306",
- "0150", "004F_030B",
- "0151", "006F_030B",
- "0154", "0052_0301",
- "0155", "0072_0301",
- "0156", "0052_0327",
- "0157", "0072_0327",
- "0158", "0052_030C",
- "0159", "0072_030C",
- "015A", "0053_0301",
- "015B", "0073_0301",
- "015C", "0053_0302",
- "015D", "0073_0302",
- "015E", "0053_0327",
- "015F", "0073_0327",
- "0160", "0053_030C",
- "0161", "0073_030C",
- "0162", "0054_0327",
- "0163", "0074_0327",
- "0164", "0054_030C",
- "0165", "0074_030C",
- "0168", "0055_0303",
- "0169", "0075_0303",
- "016A", "0055_0304",
- "016B", "0075_0304",
- "016C", "0055_0306",
- "016D", "0075_0306",
- "016E", "0055_030A",
- "016F", "0075_030A",
- "0170", "0055_030B",
- "0171", "0075_030B",
- "0172", "0055_0328",
- "0173", "0075_0328",
- "0174", "0057_0302",
- "0175", "0077_0302",
- "0176", "0059_0302",
- "0177", "0079_0302",
- "0178", "0059_0308",
- "0179", "005A_0301",
- "017A", "007A_0301",
- "017B", "005A_0307",
- "017C", "007A_0307",
- "017D", "005A_030C",
- "017E", "007A_030C",
- "01A0", "004F_031B",
- "01A1", "006F_031B",
- "01AF", "0055_031B",
- "01B0", "0075_031B",
- "01CD", "0041_030C",
- "01CE", "0061_030C",
- "01CF", "0049_030C",
- "01D0", "0069_030C",
- "01D1", "004F_030C",
- "01D2", "006F_030C",
- "01D3", "0055_030C",
- "01D4", "0075_030C",
- "01D5", "0055_0308_0304",
- "01D6", "0075_0308_0304",
- "01D7", "0055_0308_0301",
- "01D8", "0075_0308_0301",
- "01D9", "0055_0308_030C",
- "01DA", "0075_0308_030C",
- "01DB", "0055_0308_0300",
- "01DC", "0075_0308_0300",
- "01DE", "0041_0308_0304",
- "01DF", "0061_0308_0304",
- "01E0", "0041_0307_0304",
- "01E1", "0061_0307_0304",
- "01E2", "00C6_0304",
- "01E3", "00E6_0304",
- "01E6", "0047_030C",
- "01E7", "0067_030C",
- "01E8", "004B_030C",
- "01E9", "006B_030C",
- "01EA", "004F_0328",
- "01EB", "006F_0328",
- "01EC", "004F_0328_0304",
- "01ED", "006F_0328_0304",
- "01EE", "01B7_030C",
- "01EF", "0292_030C",
- "01F0", "006A_030C",
- "01F4", "0047_0301",
- "01F5", "0067_0301",
- "01F8", "004E_0300",
- "01F9", "006E_0300",
- "01FA", "0041_030A_0301",
- "01FB", "0061_030A_0301",
- "01FC", "00C6_0301",
- "01FD", "00E6_0301",
- "01FE", "00D8_0301",
- "01FF", "00F8_0301",
- "0200", "0041_030F",
- "0201", "0061_030F",
- "0202", "0041_0311",
- "0203", "0061_0311",
- "0204", "0045_030F",
- "0205", "0065_030F",
- "0206", "0045_0311",
- "0207", "0065_0311",
- "0208", "0049_030F",
- "0209", "0069_030F",
- "020A", "0049_0311",
- "020B", "0069_0311",
- "020C", "004F_030F",
- "020D", "006F_030F",
- "020E", "004F_0311",
- "020F", "006F_0311",
- "0210", "0052_030F",
- "0211", "0072_030F",
- "0212", "0052_0311",
- "0213", "0072_0311",
- "0214", "0055_030F",
- "0215", "0075_030F",
- "0216", "0055_0311",
- "0217", "0075_0311",
- "0218", "0053_0326",
- "0219", "0073_0326",
- "021A", "0054_0326",
- "021B", "0074_0326",
- "021E", "0048_030C",
- "021F", "0068_030C",
- "0226", "0041_0307",
- "0227", "0061_0307",
- "0228", "0045_0327",
- "0229", "0065_0327",
- "022A", "004F_0308_0304",
- "022B", "006F_0308_0304",
- "022C", "004F_0303_0304",
- "022D", "006F_0303_0304",
- "022E", "004F_0307",
- "022F", "006F_0307",
- "0230", "004F_0307_0304",
- "0231", "006F_0307_0304",
- "0232", "0059_0304",
- "0233", "0079_0304",
- "0340", "0300",
- "0341", "0301",
- "0343", "0313",
- "0344", "0308_0301",
- "0374", "02B9",
- "037E", "003B",
- "0385", "00A8_0301",
- "0386", "0391_0301",
- "0387", "00B7",
- "0388", "0395_0301",
- "0389", "0397_0301",
- "038A", "0399_0301",
- "038C", "039F_0301",
- "038E", "03A5_0301",
- "038F", "03A9_0301",
- "0390", "03B9_0308_0301",
- "03AA", "0399_0308",
- "03AB", "03A5_0308",
- "03AC", "03B1_0301",
- "03AD", "03B5_0301",
- "03AE", "03B7_0301",
- "03AF", "03B9_0301",
- "03B0", "03C5_0308_0301",
- "03CA", "03B9_0308",
- "03CB", "03C5_0308",
- "03CC", "03BF_0301",
- "03CD", "03C5_0301",
- "03CE", "03C9_0301",
- "03D3", "03D2_0301",
- "03D4", "03D2_0308",
- "0400", "0415_0300",
- "0401", "0415_0308",
- "0403", "0413_0301",
- "0407", "0406_0308",
- "040C", "041A_0301",
- "040D", "0418_0300",
- "040E", "0423_0306",
- "0419", "0418_0306",
- "0439", "0438_0306",
- "0450", "0435_0300",
- "0451", "0435_0308",
- "0453", "0433_0301",
- "0457", "0456_0308",
- "045C", "043A_0301",
- "045D", "0438_0300",
- "045E", "0443_0306",
- "0476", "0474_030F",
- "0477", "0475_030F",
- "04C1", "0416_0306",
- "04C2", "0436_0306",
- "04D0", "0410_0306",
- "04D1", "0430_0306",
- "04D2", "0410_0308",
- "04D3", "0430_0308",
- "04D6", "0415_0306",
- "04D7", "0435_0306",
- "04DA", "04D8_0308",
- "04DB", "04D9_0308",
- "04DC", "0416_0308",
- "04DD", "0436_0308",
- "04DE", "0417_0308",
- "04DF", "0437_0308",
- "04E2", "0418_0304",
- "04E3", "0438_0304",
- "04E4", "0418_0308",
- "04E5", "0438_0308",
- "04E6", "041E_0308",
- "04E7", "043E_0308",
- "04EA", "04E8_0308",
- "04EB", "04E9_0308",
- "04EC", "042D_0308",
- "04ED", "044D_0308",
- "04EE", "0423_0304",
- "04EF", "0443_0304",
- "04F0", "0423_0308",
- "04F1", "0443_0308",
- "04F2", "0423_030B",
- "04F3", "0443_030B",
- "04F4", "0427_0308",
- "04F5", "0447_0308",
- "04F8", "042B_0308",
- "04F9", "044B_0308",
- "0622", "0627_0653",
- "0623", "0627_0654",
- "0624", "0648_0654",
- "0625", "0627_0655",
- "0626", "064A_0654",
- "06C0", "06D5_0654",
- "06C2", "06C1_0654",
- "06D3", "06D2_0654",
- "0929", "0928_093C",
- "0931", "0930_093C",
- "0934", "0933_093C",
- "0958", "0915_093C",
- "0959", "0916_093C",
- "095A", "0917_093C",
- "095B", "091C_093C",
- "095C", "0921_093C",
- "095D", "0922_093C",
- "095E", "092B_093C",
- "095F", "092F_093C",
- "09CB", "09C7_09BE",
- "09CC", "09C7_09D7",
- "09DC", "09A1_09BC",
- "09DD", "09A2_09BC",
- "09DF", "09AF_09BC",
- "0A33", "0A32_0A3C",
- "0A36", "0A38_0A3C",
- "0A59", "0A16_0A3C",
- "0A5A", "0A17_0A3C",
- "0A5B", "0A1C_0A3C",
- "0A5E", "0A2B_0A3C",
- "0B48", "0B47_0B56",
- "0B4B", "0B47_0B3E",
- "0B4C", "0B47_0B57",
- "0B5C", "0B21_0B3C",
- "0B5D", "0B22_0B3C",
- "0B94", "0B92_0BD7",
- "0BCA", "0BC6_0BBE",
- "0BCB", "0BC7_0BBE",
- "0BCC", "0BC6_0BD7",
- "0C48", "0C46_0C56",
- "0CC0", "0CBF_0CD5",
- "0CC7", "0CC6_0CD5",
- "0CC8", "0CC6_0CD6",
- "0CCA", "0CC6_0CC2",
- "0CCB", "0CC6_0CC2_0CD5",
- "0D4A", "0D46_0D3E",
- "0D4B", "0D47_0D3E",
- "0D4C", "0D46_0D57",
- "0DDA", "0DD9_0DCA",
- "0DDC", "0DD9_0DCF",
- "0DDD", "0DD9_0DCF_0DCA",
- "0DDE", "0DD9_0DDF",
- "0F43", "0F42_0FB7",
- "0F4D", "0F4C_0FB7",
- "0F52", "0F51_0FB7",
- "0F57", "0F56_0FB7",
- "0F5C", "0F5B_0FB7",
- "0F69", "0F40_0FB5",
- "0F73", "0F71_0F72",
- "0F75", "0F71_0F74",
- "0F76", "0FB2_0F80",
- "0F78", "0FB3_0F80",
- "0F81", "0F71_0F80",
- "0F93", "0F92_0FB7",
- "0F9D", "0F9C_0FB7",
- "0FA2", "0FA1_0FB7",
- "0FA7", "0FA6_0FB7",
- "0FAC", "0FAB_0FB7",
- "0FB9", "0F90_0FB5",
- "1026", "1025_102E",
- "1E00", "0041_0325",
- "1E01", "0061_0325",
- "1E02", "0042_0307",
- "1E03", "0062_0307",
- "1E04", "0042_0323",
- "1E05", "0062_0323",
- "1E06", "0042_0331",
- "1E07", "0062_0331",
- "1E08", "0043_0327_0301",
- "1E09", "0063_0327_0301",
- "1E0A", "0044_0307",
- "1E0B", "0064_0307",
- "1E0C", "0044_0323",
- "1E0D", "0064_0323",
- "1E0E", "0044_0331",
- "1E0F", "0064_0331",
- "1E10", "0044_0327",
- "1E11", "0064_0327",
- "1E12", "0044_032D",
- "1E13", "0064_032D",
- "1E14", "0045_0304_0300",
- "1E15", "0065_0304_0300",
- "1E16", "0045_0304_0301",
- "1E17", "0065_0304_0301",
- "1E18", "0045_032D",
- "1E19", "0065_032D",
- "1E1A", "0045_0330",
- "1E1B", "0065_0330",
- "1E1C", "0045_0327_0306",
- "1E1D", "0065_0327_0306",
- "1E1E", "0046_0307",
- "1E1F", "0066_0307",
- "1E20", "0047_0304",
- "1E21", "0067_0304",
- "1E22", "0048_0307",
- "1E23", "0068_0307",
- "1E24", "0048_0323",
- "1E25", "0068_0323",
- "1E26", "0048_0308",
- "1E27", "0068_0308",
- "1E28", "0048_0327",
- "1E29", "0068_0327",
- "1E2A", "0048_032E",
- "1E2B", "0068_032E",
- "1E2C", "0049_0330",
- "1E2D", "0069_0330",
- "1E2E", "0049_0308_0301",
- "1E2F", "0069_0308_0301",
- "1E30", "004B_0301",
- "1E31", "006B_0301",
- "1E32", "004B_0323",
- "1E33", "006B_0323",
- "1E34", "004B_0331",
- "1E35", "006B_0331",
- "1E36", "004C_0323",
- "1E37", "006C_0323",
- "1E38", "004C_0323_0304",
- "1E39", "006C_0323_0304",
- "1E3A", "004C_0331",
- "1E3B", "006C_0331",
- "1E3C", "004C_032D",
- "1E3D", "006C_032D",
- "1E3E", "004D_0301",
- "1E3F", "006D_0301",
- "1E40", "004D_0307",
- "1E41", "006D_0307",
- "1E42", "004D_0323",
- "1E43", "006D_0323",
- "1E44", "004E_0307",
- "1E45", "006E_0307",
- "1E46", "004E_0323",
- "1E47", "006E_0323",
- "1E48", "004E_0331",
- "1E49", "006E_0331",
- "1E4A", "004E_032D",
- "1E4B", "006E_032D",
- "1E4C", "004F_0303_0301",
- "1E4D", "006F_0303_0301",
- "1E4E", "004F_0303_0308",
- "1E4F", "006F_0303_0308",
- "1E50", "004F_0304_0300",
- "1E51", "006F_0304_0300",
- "1E52", "004F_0304_0301",
- "1E53", "006F_0304_0301",
- "1E54", "0050_0301",
- "1E55", "0070_0301",
- "1E56", "0050_0307",
- "1E57", "0070_0307",
- "1E58", "0052_0307",
- "1E59", "0072_0307",
- "1E5A", "0052_0323",
- "1E5B", "0072_0323",
- "1E5C", "0052_0323_0304",
- "1E5D", "0072_0323_0304",
- "1E5E", "0052_0331",
- "1E5F", "0072_0331",
- "1E60", "0053_0307",
- "1E61", "0073_0307",
- "1E62", "0053_0323",
- "1E63", "0073_0323",
- "1E64", "0053_0301_0307",
- "1E65", "0073_0301_0307",
- "1E66", "0053_030C_0307",
- "1E67", "0073_030C_0307",
- "1E68", "0053_0323_0307",
- "1E69", "0073_0323_0307",
- "1E6A", "0054_0307",
- "1E6B", "0074_0307",
- "1E6C", "0054_0323",
- "1E6D", "0074_0323",
- "1E6E", "0054_0331",
- "1E6F", "0074_0331",
- "1E70", "0054_032D",
- "1E71", "0074_032D",
- "1E72", "0055_0324",
- "1E73", "0075_0324",
- "1E74", "0055_0330",
- "1E75", "0075_0330",
- "1E76", "0055_032D",
- "1E77", "0075_032D",
- "1E78", "0055_0303_0301",
- "1E79", "0075_0303_0301",
- "1E7A", "0055_0304_0308",
- "1E7B", "0075_0304_0308",
- "1E7C", "0056_0303",
- "1E7D", "0076_0303",
- "1E7E", "0056_0323",
- "1E7F", "0076_0323",
- "1E80", "0057_0300",
- "1E81", "0077_0300",
- "1E82", "0057_0301",
- "1E83", "0077_0301",
- "1E84", "0057_0308",
- "1E85", "0077_0308",
- "1E86", "0057_0307",
- "1E87", "0077_0307",
- "1E88", "0057_0323",
- "1E89", "0077_0323",
- "1E8A", "0058_0307",
- "1E8B", "0078_0307",
- "1E8C", "0058_0308",
- "1E8D", "0078_0308",
- "1E8E", "0059_0307",
- "1E8F", "0079_0307",
- "1E90", "005A_0302",
- "1E91", "007A_0302",
- "1E92", "005A_0323",
- "1E93", "007A_0323",
- "1E94", "005A_0331",
- "1E95", "007A_0331",
- "1E96", "0068_0331",
- "1E97", "0074_0308",
- "1E98", "0077_030A",
- "1E99", "0079_030A",
- "1E9B", "017F_0307",
- "1EA0", "0041_0323",
- "1EA1", "0061_0323",
- "1EA2", "0041_0309",
- "1EA3", "0061_0309",
- "1EA4", "0041_0302_0301",
- "1EA5", "0061_0302_0301",
- "1EA6", "0041_0302_0300",
- "1EA7", "0061_0302_0300",
- "1EA8", "0041_0302_0309",
- "1EA9", "0061_0302_0309",
- "1EAA", "0041_0302_0303",
- "1EAB", "0061_0302_0303",
- "1EAC", "0041_0323_0302",
- "1EAD", "0061_0323_0302",
- "1EAE", "0041_0306_0301",
- "1EAF", "0061_0306_0301",
- "1EB0", "0041_0306_0300",
- "1EB1", "0061_0306_0300",
- "1EB2", "0041_0306_0309",
- "1EB3", "0061_0306_0309",
- "1EB4", "0041_0306_0303",
- "1EB5", "0061_0306_0303",
- "1EB6", "0041_0323_0306",
- "1EB7", "0061_0323_0306",
- "1EB8", "0045_0323",
- "1EB9", "0065_0323",
- "1EBA", "0045_0309",
- "1EBB", "0065_0309",
- "1EBC", "0045_0303",
- "1EBD", "0065_0303",
- "1EBE", "0045_0302_0301",
- "1EBF", "0065_0302_0301",
- "1EC0", "0045_0302_0300",
- "1EC1", "0065_0302_0300",
- "1EC2", "0045_0302_0309",
- "1EC3", "0065_0302_0309",
- "1EC4", "0045_0302_0303",
- "1EC5", "0065_0302_0303",
- "1EC6", "0045_0323_0302",
- "1EC7", "0065_0323_0302",
- "1EC8", "0049_0309",
- "1EC9", "0069_0309",
- "1ECA", "0049_0323",
- "1ECB", "0069_0323",
- "1ECC", "004F_0323",
- "1ECD", "006F_0323",
- "1ECE", "004F_0309",
- "1ECF", "006F_0309",
- "1ED0", "004F_0302_0301",
- "1ED1", "006F_0302_0301",
- "1ED2", "004F_0302_0300",
- "1ED3", "006F_0302_0300",
- "1ED4", "004F_0302_0309",
- "1ED5", "006F_0302_0309",
- "1ED6", "004F_0302_0303",
- "1ED7", "006F_0302_0303",
- "1ED8", "004F_0323_0302",
- "1ED9", "006F_0323_0302",
- "1EDA", "004F_031B_0301",
- "1EDB", "006F_031B_0301",
- "1EDC", "004F_031B_0300",
- "1EDD", "006F_031B_0300",
- "1EDE", "004F_031B_0309",
- "1EDF", "006F_031B_0309",
- "1EE0", "004F_031B_0303",
- "1EE1", "006F_031B_0303",
- "1EE2", "004F_031B_0323",
- "1EE3", "006F_031B_0323",
- "1EE4", "0055_0323",
- "1EE5", "0075_0323",
- "1EE6", "0055_0309",
- "1EE7", "0075_0309",
- "1EE8", "0055_031B_0301",
- "1EE9", "0075_031B_0301",
- "1EEA", "0055_031B_0300",
- "1EEB", "0075_031B_0300",
- "1EEC", "0055_031B_0309",
- "1EED", "0075_031B_0309",
- "1EEE", "0055_031B_0303",
- "1EEF", "0075_031B_0303",
- "1EF0", "0055_031B_0323",
- "1EF1", "0075_031B_0323",
- "1EF2", "0059_0300",
- "1EF3", "0079_0300",
- "1EF4", "0059_0323",
- "1EF5", "0079_0323",
- "1EF6", "0059_0309",
- "1EF7", "0079_0309",
- "1EF8", "0059_0303",
- "1EF9", "0079_0303",
- "1F00", "03B1_0313",
- "1F01", "03B1_0314",
- "1F02", "03B1_0313_0300",
- "1F03", "03B1_0314_0300",
- "1F04", "03B1_0313_0301",
- "1F05", "03B1_0314_0301",
- "1F06", "03B1_0313_0342",
- "1F07", "03B1_0314_0342",
- "1F08", "0391_0313",
- "1F09", "0391_0314",
- "1F0A", "0391_0313_0300",
- "1F0B", "0391_0314_0300",
- "1F0C", "0391_0313_0301",
- "1F0D", "0391_0314_0301",
- "1F0E", "0391_0313_0342",
- "1F0F", "0391_0314_0342",
- "1F10", "03B5_0313",
- "1F11", "03B5_0314",
- "1F12", "03B5_0313_0300",
- "1F13", "03B5_0314_0300",
- "1F14", "03B5_0313_0301",
- "1F15", "03B5_0314_0301",
- "1F18", "0395_0313",
- "1F19", "0395_0314",
- "1F1A", "0395_0313_0300",
- "1F1B", "0395_0314_0300",
- "1F1C", "0395_0313_0301",
- "1F1D", "0395_0314_0301",
- "1F20", "03B7_0313",
- "1F21", "03B7_0314",
- "1F22", "03B7_0313_0300",
- "1F23", "03B7_0314_0300",
- "1F24", "03B7_0313_0301",
- "1F25", "03B7_0314_0301",
- "1F26", "03B7_0313_0342",
- "1F27", "03B7_0314_0342",
- "1F28", "0397_0313",
- "1F29", "0397_0314",
- "1F2A", "0397_0313_0300",
- "1F2B", "0397_0314_0300",
- "1F2C", "0397_0313_0301",
- "1F2D", "0397_0314_0301",
- "1F2E", "0397_0313_0342",
- "1F2F", "0397_0314_0342",
- "1F30", "03B9_0313",
- "1F31", "03B9_0314",
- "1F32", "03B9_0313_0300",
- "1F33", "03B9_0314_0300",
- "1F34", "03B9_0313_0301",
- "1F35", "03B9_0314_0301",
- "1F36", "03B9_0313_0342",
- "1F37", "03B9_0314_0342",
- "1F38", "0399_0313",
- "1F39", "0399_0314",
- "1F3A", "0399_0313_0300",
- "1F3B", "0399_0314_0300",
- "1F3C", "0399_0313_0301",
- "1F3D", "0399_0314_0301",
- "1F3E", "0399_0313_0342",
- "1F3F", "0399_0314_0342",
- "1F40", "03BF_0313",
- "1F41", "03BF_0314",
- "1F42", "03BF_0313_0300",
- "1F43", "03BF_0314_0300",
- "1F44", "03BF_0313_0301",
- "1F45", "03BF_0314_0301",
- "1F48", "039F_0313",
- "1F49", "039F_0314",
- "1F4A", "039F_0313_0300",
- "1F4B", "039F_0314_0300",
- "1F4C", "039F_0313_0301",
- "1F4D", "039F_0314_0301",
- "1F50", "03C5_0313",
- "1F51", "03C5_0314",
- "1F52", "03C5_0313_0300",
- "1F53", "03C5_0314_0300",
- "1F54", "03C5_0313_0301",
- "1F55", "03C5_0314_0301",
- "1F56", "03C5_0313_0342",
- "1F57", "03C5_0314_0342",
- "1F59", "03A5_0314",
- "1F5B", "03A5_0314_0300",
- "1F5D", "03A5_0314_0301",
- "1F5F", "03A5_0314_0342",
- "1F60", "03C9_0313",
- "1F61", "03C9_0314",
- "1F62", "03C9_0313_0300",
- "1F63", "03C9_0314_0300",
- "1F64", "03C9_0313_0301",
- "1F65", "03C9_0314_0301",
- "1F66", "03C9_0313_0342",
- "1F67", "03C9_0314_0342",
- "1F68", "03A9_0313",
- "1F69", "03A9_0314",
- "1F6A", "03A9_0313_0300",
- "1F6B", "03A9_0314_0300",
- "1F6C", "03A9_0313_0301",
- "1F6D", "03A9_0314_0301",
- "1F6E", "03A9_0313_0342",
- "1F6F", "03A9_0314_0342",
- "1F70", "03B1_0300",
- "1F71", "03B1_0301",
- "1F72", "03B5_0300",
- "1F73", "03B5_0301",
- "1F74", "03B7_0300",
- "1F75", "03B7_0301",
- "1F76", "03B9_0300",
- "1F77", "03B9_0301",
- "1F78", "03BF_0300",
- "1F79", "03BF_0301",
- "1F7A", "03C5_0300",
- "1F7B", "03C5_0301",
- "1F7C", "03C9_0300",
- "1F7D", "03C9_0301",
- "1F80", "03B1_0313_0345",
- "1F81", "03B1_0314_0345",
- "1F82", "03B1_0313_0300_0345",
- "1F83", "03B1_0314_0300_0345",
- "1F84", "03B1_0313_0301_0345",
- "1F85", "03B1_0314_0301_0345",
- "1F86", "03B1_0313_0342_0345",
- "1F87", "03B1_0314_0342_0345",
- "1F88", "0391_0313_0345",
- "1F89", "0391_0314_0345",
- "1F8A", "0391_0313_0300_0345",
- "1F8B", "0391_0314_0300_0345",
- "1F8C", "0391_0313_0301_0345",
- "1F8D", "0391_0314_0301_0345",
- "1F8E", "0391_0313_0342_0345",
- "1F8F", "0391_0314_0342_0345",
- "1F90", "03B7_0313_0345",
- "1F91", "03B7_0314_0345",
- "1F92", "03B7_0313_0300_0345",
- "1F93", "03B7_0314_0300_0345",
- "1F94", "03B7_0313_0301_0345",
- "1F95", "03B7_0314_0301_0345",
- "1F96", "03B7_0313_0342_0345",
- "1F97", "03B7_0314_0342_0345",
- "1F98", "0397_0313_0345",
- "1F99", "0397_0314_0345",
- "1F9A", "0397_0313_0300_0345",
- "1F9B", "0397_0314_0300_0345",
- "1F9C", "0397_0313_0301_0345",
- "1F9D", "0397_0314_0301_0345",
- "1F9E", "0397_0313_0342_0345",
- "1F9F", "0397_0314_0342_0345",
- "1FA0", "03C9_0313_0345",
- "1FA1", "03C9_0314_0345",
- "1FA2", "03C9_0313_0300_0345",
- "1FA3", "03C9_0314_0300_0345",
- "1FA4", "03C9_0313_0301_0345",
- "1FA5", "03C9_0314_0301_0345",
- "1FA6", "03C9_0313_0342_0345",
- "1FA7", "03C9_0314_0342_0345",
- "1FA8", "03A9_0313_0345",
- "1FA9", "03A9_0314_0345",
- "1FAA", "03A9_0313_0300_0345",
- "1FAB", "03A9_0314_0300_0345",
- "1FAC", "03A9_0313_0301_0345",
- "1FAD", "03A9_0314_0301_0345",
- "1FAE", "03A9_0313_0342_0345",
- "1FAF", "03A9_0314_0342_0345",
- "1FB0", "03B1_0306",
- "1FB1", "03B1_0304",
- "1FB2", "03B1_0300_0345",
- "1FB3", "03B1_0345",
- "1FB4", "03B1_0301_0345",
- "1FB6", "03B1_0342",
- "1FB7", "03B1_0342_0345",
- "1FB8", "0391_0306",
- "1FB9", "0391_0304",
- "1FBA", "0391_0300",
- "1FBB", "0391_0301",
- "1FBC", "0391_0345",
- "1FBE", "03B9",
- "1FC1", "00A8_0342",
- "1FC2", "03B7_0300_0345",
- "1FC3", "03B7_0345",
- "1FC4", "03B7_0301_0345",
- "1FC6", "03B7_0342",
- "1FC7", "03B7_0342_0345",
- "1FC8", "0395_0300",
- "1FC9", "0395_0301",
- "1FCA", "0397_0300",
- "1FCB", "0397_0301",
- "1FCC", "0397_0345",
- "1FCD", "1FBF_0300",
- "1FCE", "1FBF_0301",
- "1FCF", "1FBF_0342",
- "1FD0", "03B9_0306",
- "1FD1", "03B9_0304",
- "1FD2", "03B9_0308_0300",
- "1FD3", "03B9_0308_0301",
- "1FD6", "03B9_0342",
- "1FD7", "03B9_0308_0342",
- "1FD8", "0399_0306",
- "1FD9", "0399_0304",
- "1FDA", "0399_0300",
- "1FDB", "0399_0301",
- "1FDD", "1FFE_0300",
- "1FDE", "1FFE_0301",
- "1FDF", "1FFE_0342",
- "1FE0", "03C5_0306",
- "1FE1", "03C5_0304",
- "1FE2", "03C5_0308_0300",
- "1FE3", "03C5_0308_0301",
- "1FE4", "03C1_0313",
- "1FE5", "03C1_0314",
- "1FE6", "03C5_0342",
- "1FE7", "03C5_0308_0342",
- "1FE8", "03A5_0306",
- "1FE9", "03A5_0304",
- "1FEA", "03A5_0300",
- "1FEB", "03A5_0301",
- "1FEC", "03A1_0314",
- "1FED", "00A8_0300",
- "1FEE", "00A8_0301",
- "1FEF", "0060",
- "1FF2", "03C9_0300_0345",
- "1FF3", "03C9_0345",
- "1FF4", "03C9_0301_0345",
- "1FF6", "03C9_0342",
- "1FF7", "03C9_0342_0345",
- "1FF8", "039F_0300",
- "1FF9", "039F_0301",
- "1FFA", "03A9_0300",
- "1FFB", "03A9_0301",
- "1FFC", "03A9_0345",
- "1FFD", "00B4",
- "2000", "2002",
- "2001", "2003",
- "2126", "03A9",
- "212A", "004B",
- "212B", "0041_030A",
- "219A", "2190_0338",
- "219B", "2192_0338",
- "21AE", "2194_0338",
- "21CD", "21D0_0338",
- "21CE", "21D4_0338",
- "21CF", "21D2_0338",
- "2204", "2203_0338",
- "2209", "2208_0338",
- "220C", "220B_0338",
- "2224", "2223_0338",
- "2226", "2225_0338",
- "2241", "223C_0338",
- "2244", "2243_0338",
- "2247", "2245_0338",
- "2249", "2248_0338",
- "2260", "003D_0338",
- "2262", "2261_0338",
- "226D", "224D_0338",
- "226E", "003C_0338",
- "226F", "003E_0338",
- "2270", "2264_0338",
- "2271", "2265_0338",
- "2274", "2272_0338",
- "2275", "2273_0338",
- "2278", "2276_0338",
- "2279", "2277_0338",
- "2280", "227A_0338",
- "2281", "227B_0338",
- "2284", "2282_0338",
- "2285", "2283_0338",
- "2288", "2286_0338",
- "2289", "2287_0338",
- "22AC", "22A2_0338",
- "22AD", "22A8_0338",
- "22AE", "22A9_0338",
- "22AF", "22AB_0338",
- "22E0", "227C_0338",
- "22E1", "227D_0338",
- "22E2", "2291_0338",
- "22E3", "2292_0338",
- "22EA", "22B2_0338",
- "22EB", "22B3_0338",
- "22EC", "22B4_0338",
- "22ED", "22B5_0338",
- "2329", "3008",
- "232A", "3009",
- "2ADC", "2ADD_0338",
- "304C", "304B_3099",
- "304E", "304D_3099",
- "3050", "304F_3099",
- "3052", "3051_3099",
- "3054", "3053_3099",
- "3056", "3055_3099",
- "3058", "3057_3099",
- "305A", "3059_3099",
- "305C", "305B_3099",
- "305E", "305D_3099",
- "3060", "305F_3099",
- "3062", "3061_3099",
- "3065", "3064_3099",
- "3067", "3066_3099",
- "3069", "3068_3099",
- "3070", "306F_3099",
- "3071", "306F_309A",
- "3073", "3072_3099",
- "3074", "3072_309A",
- "3076", "3075_3099",
- "3077", "3075_309A",
- "3079", "3078_3099",
- "307A", "3078_309A",
- "307C", "307B_3099",
- "307D", "307B_309A",
- "3094", "3046_3099",
- "309E", "309D_3099",
- "30AC", "30AB_3099",
- "30AE", "30AD_3099",
- "30B0", "30AF_3099",
- "30B2", "30B1_3099",
- "30B4", "30B3_3099",
- "30B6", "30B5_3099",
- "30B8", "30B7_3099",
- "30BA", "30B9_3099",
- "30BC", "30BB_3099",
- "30BE", "30BD_3099",
- "30C0", "30BF_3099",
- "30C2", "30C1_3099",
- "30C5", "30C4_3099",
- "30C7", "30C6_3099",
- "30C9", "30C8_3099",
- "30D0", "30CF_3099",
- "30D1", "30CF_309A",
- "30D3", "30D2_3099",
- "30D4", "30D2_309A",
- "30D6", "30D5_3099",
- "30D7", "30D5_309A",
- "30D9", "30D8_3099",
- "30DA", "30D8_309A",
- "30DC", "30DB_3099",
- "30DD", "30DB_309A",
- "30F4", "30A6_3099",
- "30F7", "30EF_3099",
- "30F8", "30F0_3099",
- "30F9", "30F1_3099",
- "30FA", "30F2_3099",
- "30FE", "30FD_3099",
- "F900", "8C48",
- "F901", "66F4",
- "F902", "8ECA",
- "F903", "8CC8",
- "F904", "6ED1",
- "F905", "4E32",
- "F906", "53E5",
- "F907", "9F9C",
- "F908", "9F9C",
- "F909", "5951",
- "F90A", "91D1",
- "F90B", "5587",
- "F90C", "5948",
- "F90D", "61F6",
- "F90E", "7669",
- "F90F", "7F85",
- "F910", "863F",
- "F911", "87BA",
- "F912", "88F8",
- "F913", "908F",
- "F914", "6A02",
- "F915", "6D1B",
- "F916", "70D9",
- "F917", "73DE",
- "F918", "843D",
- "F919", "916A",
- "F91A", "99F1",
- "F91B", "4E82",
- "F91C", "5375",
- "F91D", "6B04",
- "F91E", "721B",
- "F91F", "862D",
- "F920", "9E1E",
- "F921", "5D50",
- "F922", "6FEB",
- "F923", "85CD",
- "F924", "8964",
- "F925", "62C9",
- "F926", "81D8",
- "F927", "881F",
- "F928", "5ECA",
- "F929", "6717",
- "F92A", "6D6A",
- "F92B", "72FC",
- "F92C", "90CE",
- "F92D", "4F86",
- "F92E", "51B7",
- "F92F", "52DE",
- "F930", "64C4",
- "F931", "6AD3",
- "F932", "7210",
- "F933", "76E7",
- "F934", "8001",
- "F935", "8606",
- "F936", "865C",
- "F937", "8DEF",
- "F938", "9732",
- "F939", "9B6F",
- "F93A", "9DFA",
- "F93B", "788C",
- "F93C", "797F",
- "F93D", "7DA0",
- "F93E", "83C9",
- "F93F", "9304",
- "F940", "9E7F",
- "F941", "8AD6",
- "F942", "58DF",
- "F943", "5F04",
- "F944", "7C60",
- "F945", "807E",
- "F946", "7262",
- "F947", "78CA",
- "F948", "8CC2",
- "F949", "96F7",
- "F94A", "58D8",
- "F94B", "5C62",
- "F94C", "6A13",
- "F94D", "6DDA",
- "F94E", "6F0F",
- "F94F", "7D2F",
- "F950", "7E37",
- "F951", "964B",
- "F952", "52D2",
- "F953", "808B",
- "F954", "51DC",
- "F955", "51CC",
- "F956", "7A1C",
- "F957", "7DBE",
- "F958", "83F1",
- "F959", "9675",
- "F95A", "8B80",
- "F95B", "62CF",
- "F95C", "6A02",
- "F95D", "8AFE",
- "F95E", "4E39",
- "F95F", "5BE7",
- "F960", "6012",
- "F961", "7387",
- "F962", "7570",
- "F963", "5317",
- "F964", "78FB",
- "F965", "4FBF",
- "F966", "5FA9",
- "F967", "4E0D",
- "F968", "6CCC",
- "F969", "6578",
- "F96A", "7D22",
- "F96B", "53C3",
- "F96C", "585E",
- "F96D", "7701",
- "F96E", "8449",
- "F96F", "8AAA",
- "F970", "6BBA",
- "F971", "8FB0",
- "F972", "6C88",
- "F973", "62FE",
- "F974", "82E5",
- "F975", "63A0",
- "F976", "7565",
- "F977", "4EAE",
- "F978", "5169",
- "F979", "51C9",
- "F97A", "6881",
- "F97B", "7CE7",
- "F97C", "826F",
- "F97D", "8AD2",
- "F97E", "91CF",
- "F97F", "52F5",
- "F980", "5442",
- "F981", "5973",
- "F982", "5EEC",
- "F983", "65C5",
- "F984", "6FFE",
- "F985", "792A",
- "F986", "95AD",
- "F987", "9A6A",
- "F988", "9E97",
- "F989", "9ECE",
- "F98A", "529B",
- "F98B", "66C6",
- "F98C", "6B77",
- "F98D", "8F62",
- "F98E", "5E74",
- "F98F", "6190",
- "F990", "6200",
- "F991", "649A",
- "F992", "6F23",
- "F993", "7149",
- "F994", "7489",
- "F995", "79CA",
- "F996", "7DF4",
- "F997", "806F",
- "F998", "8F26",
- "F999", "84EE",
- "F99A", "9023",
- "F99B", "934A",
- "F99C", "5217",
- "F99D", "52A3",
- "F99E", "54BD",
- "F99F", "70C8",
- "F9A0", "88C2",
- "F9A1", "8AAA",
- "F9A2", "5EC9",
- "F9A3", "5FF5",
- "F9A4", "637B",
- "F9A5", "6BAE",
- "F9A6", "7C3E",
- "F9A7", "7375",
- "F9A8", "4EE4",
- "F9A9", "56F9",
- "F9AA", "5BE7",
- "F9AB", "5DBA",
- "F9AC", "601C",
- "F9AD", "73B2",
- "F9AE", "7469",
- "F9AF", "7F9A",
- "F9B0", "8046",
- "F9B1", "9234",
- "F9B2", "96F6",
- "F9B3", "9748",
- "F9B4", "9818",
- "F9B5", "4F8B",
- "F9B6", "79AE",
- "F9B7", "91B4",
- "F9B8", "96B8",
- "F9B9", "60E1",
- "F9BA", "4E86",
- "F9BB", "50DA",
- "F9BC", "5BEE",
- "F9BD", "5C3F",
- "F9BE", "6599",
- "F9BF", "6A02",
- "F9C0", "71CE",
- "F9C1", "7642",
- "F9C2", "84FC",
- "F9C3", "907C",
- "F9C4", "9F8D",
- "F9C5", "6688",
- "F9C6", "962E",
- "F9C7", "5289",
- "F9C8", "677B",
- "F9C9", "67F3",
- "F9CA", "6D41",
- "F9CB", "6E9C",
- "F9CC", "7409",
- "F9CD", "7559",
- "F9CE", "786B",
- "F9CF", "7D10",
- "F9D0", "985E",
- "F9D1", "516D",
- "F9D2", "622E",
- "F9D3", "9678",
- "F9D4", "502B",
- "F9D5", "5D19",
- "F9D6", "6DEA",
- "F9D7", "8F2A",
- "F9D8", "5F8B",
- "F9D9", "6144",
- "F9DA", "6817",
- "F9DB", "7387",
- "F9DC", "9686",
- "F9DD", "5229",
- "F9DE", "540F",
- "F9DF", "5C65",
- "F9E0", "6613",
- "F9E1", "674E",
- "F9E2", "68A8",
- "F9E3", "6CE5",
- "F9E4", "7406",
- "F9E5", "75E2",
- "F9E6", "7F79",
- "F9E7", "88CF",
- "F9E8", "88E1",
- "F9E9", "91CC",
- "F9EA", "96E2",
- "F9EB", "533F",
- "F9EC", "6EBA",
- "F9ED", "541D",
- "F9EE", "71D0",
- "F9EF", "7498",
- "F9F0", "85FA",
- "F9F1", "96A3",
- "F9F2", "9C57",
- "F9F3", "9E9F",
- "F9F4", "6797",
- "F9F5", "6DCB",
- "F9F6", "81E8",
- "F9F7", "7ACB",
- "F9F8", "7B20",
- "F9F9", "7C92",
- "F9FA", "72C0",
- "F9FB", "7099",
- "F9FC", "8B58",
- "F9FD", "4EC0",
- "F9FE", "8336",
- "F9FF", "523A",
- "FA00", "5207",
- "FA01", "5EA6",
- "FA02", "62D3",
- "FA03", "7CD6",
- "FA04", "5B85",
- "FA05", "6D1E",
- "FA06", "66B4",
- "FA07", "8F3B",
- "FA08", "884C",
- "FA09", "964D",
- "FA0A", "898B",
- "FA0B", "5ED3",
- "FA0C", "5140",
- "FA0D", "55C0",
- "FA10", "585A",
- "FA12", "6674",
- "FA15", "51DE",
- "FA16", "732A",
- "FA17", "76CA",
- "FA18", "793C",
- "FA19", "795E",
- "FA1A", "7965",
- "FA1B", "798F",
- "FA1C", "9756",
- "FA1D", "7CBE",
- "FA1E", "7FBD",
- "FA20", "8612",
- "FA22", "8AF8",
- "FA25", "9038",
- "FA26", "90FD",
- "FA2A", "98EF",
- "FA2B", "98FC",
- "FA2C", "9928",
- "FA2D", "9DB4",
- "FA30", "4FAE",
- "FA31", "50E7",
- "FA32", "514D",
- "FA33", "52C9",
- "FA34", "52E4",
- "FA35", "5351",
- "FA36", "559D",
- "FA37", "5606",
- "FA38", "5668",
- "FA39", "5840",
- "FA3A", "58A8",
- "FA3B", "5C64",
- "FA3C", "5C6E",
- "FA3D", "6094",
- "FA3E", "6168",
- "FA3F", "618E",
- "FA40", "61F2",
- "FA41", "654F",
- "FA42", "65E2",
- "FA43", "6691",
- "FA44", "6885",
- "FA45", "6D77",
- "FA46", "6E1A",
- "FA47", "6F22",
- "FA48", "716E",
- "FA49", "722B",
- "FA4A", "7422",
- "FA4B", "7891",
- "FA4C", "793E",
- "FA4D", "7949",
- "FA4E", "7948",
- "FA4F", "7950",
- "FA50", "7956",
- "FA51", "795D",
- "FA52", "798D",
- "FA53", "798E",
- "FA54", "7A40",
- "FA55", "7A81",
- "FA56", "7BC0",
- "FA57", "7DF4",
- "FA58", "7E09",
- "FA59", "7E41",
- "FA5A", "7F72",
- "FA5B", "8005",
- "FA5C", "81ED",
- "FA5D", "8279",
- "FA5E", "8279",
- "FA5F", "8457",
- "FA60", "8910",
- "FA61", "8996",
- "FA62", "8B01",
- "FA63", "8B39",
- "FA64", "8CD3",
- "FA65", "8D08",
- "FA66", "8FB6",
- "FA67", "9038",
- "FA68", "96E3",
- "FA69", "97FF",
- "FA6A", "983B",
- "FB1D", "05D9_05B4",
- "FB1F", "05F2_05B7",
- "FB2A", "05E9_05C1",
- "FB2B", "05E9_05C2",
- "FB2C", "05E9_05BC_05C1",
- "FB2D", "05E9_05BC_05C2",
- "FB2E", "05D0_05B7",
- "FB2F", "05D0_05B8",
- "FB30", "05D0_05BC",
- "FB31", "05D1_05BC",
- "FB32", "05D2_05BC",
- "FB33", "05D3_05BC",
- "FB34", "05D4_05BC",
- "FB35", "05D5_05BC",
- "FB36", "05D6_05BC",
- "FB38", "05D8_05BC",
- "FB39", "05D9_05BC",
- "FB3A", "05DA_05BC",
- "FB3B", "05DB_05BC",
- "FB3C", "05DC_05BC",
- "FB3E", "05DE_05BC",
- "FB40", "05E0_05BC",
- "FB41", "05E1_05BC",
- "FB43", "05E3_05BC",
- "FB44", "05E4_05BC",
- "FB46", "05E6_05BC",
- "FB47", "05E7_05BC",
- "FB48", "05E8_05BC",
- "FB49", "05E9_05BC",
- "FB4A", "05EA_05BC",
- "FB4B", "05D5_05B9",
- "FB4C", "05D1_05BF",
- "FB4D", "05DB_05BF",
- "FB4E", "05E4_05BF",
- "1D15E", "1D157_1D165",
- "1D15F", "1D158_1D165",
- "1D160", "1D158_1D165_1D16E",
- "1D161", "1D158_1D165_1D16F",
- "1D162", "1D158_1D165_1D170",
- "1D163", "1D158_1D165_1D171",
- "1D164", "1D158_1D165_1D172",
- "1D1BB", "1D1B9_1D165",
- "1D1BC", "1D1BA_1D165",
- "1D1BD", "1D1B9_1D165_1D16E",
- "1D1BE", "1D1BA_1D165_1D16E",
- "1D1BF", "1D1B9_1D165_1D16F",
- "1D1C0", "1D1BA_1D165_1D16F",
- "2F800", "4E3D",
- "2F801", "4E38",
- "2F802", "4E41",
- "2F803", "20122",
- "2F804", "4F60",
- "2F805", "4FAE",
- "2F806", "4FBB",
- "2F807", "5002",
- "2F808", "507A",
- "2F809", "5099",
- "2F80A", "50E7",
- "2F80B", "50CF",
- "2F80C", "349E",
- "2F80D", "2063A",
- "2F80E", "514D",
- "2F80F", "5154",
- "2F810", "5164",
- "2F811", "5177",
- "2F812", "2051C",
- "2F813", "34B9",
- "2F814", "5167",
- "2F815", "518D",
- "2F816", "2054B",
- "2F817", "5197",
- "2F818", "51A4",
- "2F819", "4ECC",
- "2F81A", "51AC",
- "2F81B", "51B5",
- "2F81C", "291DF",
- "2F81D", "51F5",
- "2F81E", "5203",
- "2F81F", "34DF",
- "2F820", "523B",
- "2F821", "5246",
- "2F822", "5272",
- "2F823", "5277",
- "2F824", "3515",
- "2F825", "52C7",
- "2F826", "52C9",
- "2F827", "52E4",
- "2F828", "52FA",
- "2F829", "5305",
- "2F82A", "5306",
- "2F82B", "5317",
- "2F82C", "5349",
- "2F82D", "5351",
- "2F82E", "535A",
- "2F82F", "5373",
- "2F830", "537D",
- "2F831", "537F",
- "2F832", "537F",
- "2F833", "537F",
- "2F834", "20A2C",
- "2F835", "7070",
- "2F836", "53CA",
- "2F837", "53DF",
- "2F838", "20B63",
- "2F839", "53EB",
- "2F83A", "53F1",
- "2F83B", "5406",
- "2F83C", "549E",
- "2F83D", "5438",
- "2F83E", "5448",
- "2F83F", "5468",
- "2F840", "54A2",
- "2F841", "54F6",
- "2F842", "5510",
- "2F843", "5553",
- "2F844", "5563",
- "2F845", "5584",
- "2F846", "5584",
- "2F847", "5599",
- "2F848", "55AB",
- "2F849", "55B3",
- "2F84A", "55C2",
- "2F84B", "5716",
- "2F84C", "5606",
- "2F84D", "5717",
- "2F84E", "5651",
- "2F84F", "5674",
- "2F850", "5207",
- "2F851", "58EE",
- "2F852", "57CE",
- "2F853", "57F4",
- "2F854", "580D",
- "2F855", "578B",
- "2F856", "5832",
- "2F857", "5831",
- "2F858", "58AC",
- "2F859", "214E4",
- "2F85A", "58F2",
- "2F85B", "58F7",
- "2F85C", "5906",
- "2F85D", "591A",
- "2F85E", "5922",
- "2F85F", "5962",
- "2F860", "216A8",
- "2F861", "216EA",
- "2F862", "59EC",
- "2F863", "5A1B",
- "2F864", "5A27",
- "2F865", "59D8",
- "2F866", "5A66",
- "2F867", "36EE",
- "2F868", "2136A",
- "2F869", "5B08",
- "2F86A", "5B3E",
- "2F86B", "5B3E",
- "2F86C", "219C8",
- "2F86D", "5BC3",
- "2F86E", "5BD8",
- "2F86F", "5BE7",
- "2F870", "5BF3",
- "2F871", "21B18",
- "2F872", "5BFF",
- "2F873", "5C06",
- "2F874", "5F33",
- "2F875", "5C22",
- "2F876", "3781",
- "2F877", "5C60",
- "2F878", "5C6E",
- "2F879", "5CC0",
- "2F87A", "5C8D",
- "2F87B", "21DE4",
- "2F87C", "5D43",
- "2F87D", "21DE6",
- "2F87E", "5D6E",
- "2F87F", "5D6B",
- "2F880", "5D7C",
- "2F881", "5DE1",
- "2F882", "5DE2",
- "2F883", "382F",
- "2F884", "5DFD",
- "2F885", "5E28",
- "2F886", "5E3D",
- "2F887", "5E69",
- "2F888", "3862",
- "2F889", "22183",
- "2F88A", "387C",
- "2F88B", "5EB0",
- "2F88C", "5EB3",
- "2F88D", "5EB6",
- "2F88E", "5ECA",
- "2F88F", "2A392",
- "2F890", "5EFE",
- "2F891", "22331",
- "2F892", "22331",
- "2F893", "8201",
- "2F894", "5F22",
- "2F895", "5F22",
- "2F896", "38C7",
- "2F897", "232B8",
- "2F898", "261DA",
- "2F899", "5F62",
- "2F89A", "5F6B",
- "2F89B", "38E3",
- "2F89C", "5F9A",
- "2F89D", "5FCD",
- "2F89E", "5FD7",
- "2F89F", "5FF9",
- "2F8A0", "6081",
- "2F8A1", "393A",
- "2F8A2", "391C",
- "2F8A3", "6094",
- "2F8A4", "226D4",
- "2F8A5", "60C7",
- "2F8A6", "6148",
- "2F8A7", "614C",
- "2F8A8", "614E",
- "2F8A9", "614C",
- "2F8AA", "617A",
- "2F8AB", "618E",
- "2F8AC", "61B2",
- "2F8AD", "61A4",
- "2F8AE", "61AF",
- "2F8AF", "61DE",
- "2F8B0", "61F2",
- "2F8B1", "61F6",
- "2F8B2", "6210",
- "2F8B3", "621B",
- "2F8B4", "625D",
- "2F8B5", "62B1",
- "2F8B6", "62D4",
- "2F8B7", "6350",
- "2F8B8", "22B0C",
- "2F8B9", "633D",
- "2F8BA", "62FC",
- "2F8BB", "6368",
- "2F8BC", "6383",
- "2F8BD", "63E4",
- "2F8BE", "22BF1",
- "2F8BF", "6422",
- "2F8C0", "63C5",
- "2F8C1", "63A9",
- "2F8C2", "3A2E",
- "2F8C3", "6469",
- "2F8C4", "647E",
- "2F8C5", "649D",
- "2F8C6", "6477",
- "2F8C7", "3A6C",
- "2F8C8", "654F",
- "2F8C9", "656C",
- "2F8CA", "2300A",
- "2F8CB", "65E3",
- "2F8CC", "66F8",
- "2F8CD", "6649",
- "2F8CE", "3B19",
- "2F8CF", "6691",
- "2F8D0", "3B08",
- "2F8D1", "3AE4",
- "2F8D2", "5192",
- "2F8D3", "5195",
- "2F8D4", "6700",
- "2F8D5", "669C",
- "2F8D6", "80AD",
- "2F8D7", "43D9",
- "2F8D8", "6717",
- "2F8D9", "671B",
- "2F8DA", "6721",
- "2F8DB", "675E",
- "2F8DC", "6753",
- "2F8DD", "233C3",
- "2F8DE", "3B49",
- "2F8DF", "67FA",
- "2F8E0", "6785",
- "2F8E1", "6852",
- "2F8E2", "6885",
- "2F8E3", "2346D",
- "2F8E4", "688E",
- "2F8E5", "681F",
- "2F8E6", "6914",
- "2F8E7", "3B9D",
- "2F8E8", "6942",
- "2F8E9", "69A3",
- "2F8EA", "69EA",
- "2F8EB", "6AA8",
- "2F8EC", "236A3",
- "2F8ED", "6ADB",
- "2F8EE", "3C18",
- "2F8EF", "6B21",
- "2F8F0", "238A7",
- "2F8F1", "6B54",
- "2F8F2", "3C4E",
- "2F8F3", "6B72",
- "2F8F4", "6B9F",
- "2F8F5", "6BBA",
- "2F8F6", "6BBB",
- "2F8F7", "23A8D",
- "2F8F8", "21D0B",
- "2F8F9", "23AFA",
- "2F8FA", "6C4E",
- "2F8FB", "23CBC",
- "2F8FC", "6CBF",
- "2F8FD", "6CCD",
- "2F8FE", "6C67",
- "2F8FF", "6D16",
- "2F900", "6D3E",
- "2F901", "6D77",
- "2F902", "6D41",
- "2F903", "6D69",
- "2F904", "6D78",
- "2F905", "6D85",
- "2F906", "23D1E",
- "2F907", "6D34",
- "2F908", "6E2F",
- "2F909", "6E6E",
- "2F90A", "3D33",
- "2F90B", "6ECB",
- "2F90C", "6EC7",
- "2F90D", "23ED1",
- "2F90E", "6DF9",
- "2F90F", "6F6E",
- "2F910", "23F5E",
- "2F911", "23F8E",
- "2F912", "6FC6",
- "2F913", "7039",
- "2F914", "701E",
- "2F915", "701B",
- "2F916", "3D96",
- "2F917", "704A",
- "2F918", "707D",
- "2F919", "7077",
- "2F91A", "70AD",
- "2F91B", "20525",
- "2F91C", "7145",
- "2F91D", "24263",
- "2F91E", "719C",
- "2F91F", "43AB",
- "2F920", "7228",
- "2F921", "7235",
- "2F922", "7250",
- "2F923", "24608",
- "2F924", "7280",
- "2F925", "7295",
- "2F926", "24735",
- "2F927", "24814",
- "2F928", "737A",
- "2F929", "738B",
- "2F92A", "3EAC",
- "2F92B", "73A5",
- "2F92C", "3EB8",
- "2F92D", "3EB8",
- "2F92E", "7447",
- "2F92F", "745C",
- "2F930", "7471",
- "2F931", "7485",
- "2F932", "74CA",
- "2F933", "3F1B",
- "2F934", "7524",
- "2F935", "24C36",
- "2F936", "753E",
- "2F937", "24C92",
- "2F938", "7570",
- "2F939", "2219F",
- "2F93A", "7610",
- "2F93B", "24FA1",
- "2F93C", "24FB8",
- "2F93D", "25044",
- "2F93E", "3FFC",
- "2F93F", "4008",
- "2F940", "76F4",
- "2F941", "250F3",
- "2F942", "250F2",
- "2F943", "25119",
- "2F944", "25133",
- "2F945", "771E",
- "2F946", "771F",
- "2F947", "771F",
- "2F948", "774A",
- "2F949", "4039",
- "2F94A", "778B",
- "2F94B", "4046",
- "2F94C", "4096",
- "2F94D", "2541D",
- "2F94E", "784E",
- "2F94F", "788C",
- "2F950", "78CC",
- "2F951", "40E3",
- "2F952", "25626",
- "2F953", "7956",
- "2F954", "2569A",
- "2F955", "256C5",
- "2F956", "798F",
- "2F957", "79EB",
- "2F958", "412F",
- "2F959", "7A40",
- "2F95A", "7A4A",
- "2F95B", "7A4F",
- "2F95C", "2597C",
- "2F95D", "25AA7",
- "2F95E", "25AA7",
- "2F95F", "7AAE",
- "2F960", "4202",
- "2F961", "25BAB",
- "2F962", "7BC6",
- "2F963", "7BC9",
- "2F964", "4227",
- "2F965", "25C80",
- "2F966", "7CD2",
- "2F967", "42A0",
- "2F968", "7CE8",
- "2F969", "7CE3",
- "2F96A", "7D00",
- "2F96B", "25F86",
- "2F96C", "7D63",
- "2F96D", "4301",
- "2F96E", "7DC7",
- "2F96F", "7E02",
- "2F970", "7E45",
- "2F971", "4334",
- "2F972", "26228",
- "2F973", "26247",
- "2F974", "4359",
- "2F975", "262D9",
- "2F976", "7F7A",
- "2F977", "2633E",
- "2F978", "7F95",
- "2F979", "7FFA",
- "2F97A", "8005",
- "2F97B", "264DA",
- "2F97C", "26523",
- "2F97D", "8060",
- "2F97E", "265A8",
- "2F97F", "8070",
- "2F980", "2335F",
- "2F981", "43D5",
- "2F982", "80B2",
- "2F983", "8103",
- "2F984", "440B",
- "2F985", "813E",
- "2F986", "5AB5",
- "2F987", "267A7",
- "2F988", "267B5",
- "2F989", "23393",
- "2F98A", "2339C",
- "2F98B", "8201",
- "2F98C", "8204",
- "2F98D", "8F9E",
- "2F98E", "446B",
- "2F98F", "8291",
- "2F990", "828B",
- "2F991", "829D",
- "2F992", "52B3",
- "2F993", "82B1",
- "2F994", "82B3",
- "2F995", "82BD",
- "2F996", "82E6",
- "2F997", "26B3C",
- "2F998", "82E5",
- "2F999", "831D",
- "2F99A", "8363",
- "2F99B", "83AD",
- "2F99C", "8323",
- "2F99D", "83BD",
- "2F99E", "83E7",
- "2F99F", "8457",
- "2F9A0", "8353",
- "2F9A1", "83CA",
- "2F9A2", "83CC",
- "2F9A3", "83DC",
- "2F9A4", "26C36",
- "2F9A5", "26D6B",
- "2F9A6", "26CD5",
- "2F9A7", "452B",
- "2F9A8", "84F1",
- "2F9A9", "84F3",
- "2F9AA", "8516",
- "2F9AB", "273CA",
- "2F9AC", "8564",
- "2F9AD", "26F2C",
- "2F9AE", "455D",
- "2F9AF", "4561",
- "2F9B0", "26FB1",
- "2F9B1", "270D2",
- "2F9B2", "456B",
- "2F9B3", "8650",
- "2F9B4", "865C",
- "2F9B5", "8667",
- "2F9B6", "8669",
- "2F9B7", "86A9",
- "2F9B8", "8688",
- "2F9B9", "870E",
- "2F9BA", "86E2",
- "2F9BB", "8779",
- "2F9BC", "8728",
- "2F9BD", "876B",
- "2F9BE", "8786",
- "2F9BF", "4D57",
- "2F9C0", "87E1",
- "2F9C1", "8801",
- "2F9C2", "45F9",
- "2F9C3", "8860",
- "2F9C4", "8863",
- "2F9C5", "27667",
- "2F9C6", "88D7",
- "2F9C7", "88DE",
- "2F9C8", "4635",
- "2F9C9", "88FA",
- "2F9CA", "34BB",
- "2F9CB", "278AE",
- "2F9CC", "27966",
- "2F9CD", "46BE",
- "2F9CE", "46C7",
- "2F9CF", "8AA0",
- "2F9D0", "8AED",
- "2F9D1", "8B8A",
- "2F9D2", "8C55",
- "2F9D3", "27CA8",
- "2F9D4", "8CAB",
- "2F9D5", "8CC1",
- "2F9D6", "8D1B",
- "2F9D7", "8D77",
- "2F9D8", "27F2F",
- "2F9D9", "20804",
- "2F9DA", "8DCB",
- "2F9DB", "8DBC",
- "2F9DC", "8DF0",
- "2F9DD", "208DE",
- "2F9DE", "8ED4",
- "2F9DF", "8F38",
- "2F9E0", "285D2",
- "2F9E1", "285ED",
- "2F9E2", "9094",
- "2F9E3", "90F1",
- "2F9E4", "9111",
- "2F9E5", "2872E",
- "2F9E6", "911B",
- "2F9E7", "9238",
- "2F9E8", "92D7",
- "2F9E9", "92D8",
- "2F9EA", "927C",
- "2F9EB", "93F9",
- "2F9EC", "9415",
- "2F9ED", "28BFA",
- "2F9EE", "958B",
- "2F9EF", "4995",
- "2F9F0", "95B7",
- "2F9F1", "28D77",
- "2F9F2", "49E6",
- "2F9F3", "96C3",
- "2F9F4", "5DB2",
- "2F9F5", "9723",
- "2F9F6", "29145",
- "2F9F7", "2921A",
- "2F9F8", "4A6E",
- "2F9F9", "4A76",
- "2F9FA", "97E0",
- "2F9FB", "2940A",
- "2F9FC", "4AB2",
- "2F9FD", "29496",
- "2F9FE", "980B",
- "2F9FF", "980B",
- "2FA00", "9829",
- "2FA01", "295B6",
- "2FA02", "98E2",
- "2FA03", "4B33",
- "2FA04", "9929",
- "2FA05", "99A7",
- "2FA06", "99C2",
- "2FA07", "99FE",
- "2FA08", "4BCE",
- "2FA09", "29B30",
- "2FA0A", "9B12",
- "2FA0B", "9C40",
- "2FA0C", "9CFD",
- "2FA0D", "4CCE",
- "2FA0E", "4CED",
- "2FA0F", "9D67",
- "2FA10", "2A0CE",
- "2FA11", "4CF8",
- "2FA12", "2A105",
- "2FA13", "2A20E",
- "2FA14", "2A291",
- "2FA15", "9EBB",
- "2FA16", "4D56",
- "2FA17", "9EF9",
- "2FA18", "9EFE",
- "2FA19", "9F05",
- "2FA1A", "9F0F",
- "2FA1B", "9F16",
- "2FA1C", "9F3B",
- "2FA1D", "2A600",
-);
-
-my %AGL_to_unicode = (
- "A", "0041",
- "AE", "00C6",
- "AEacute", "01FC",
- "AEmacron", "01E2",
- "Aacute", "00C1",
- "Abreve", "0102",
- "Abreveacute", "1EAE",
- "Abrevecyrillic", "04D0",
- "Abrevedotbelow", "1EB6",
- "Abrevegrave", "1EB0",
- "Abrevehookabove", "1EB2",
- "Abrevetilde", "1EB4",
- "Acaron", "01CD",
- "Acircle", "24B6",
- "Acircumflex", "00C2",
- "Acircumflexacute", "1EA4",
- "Acircumflexdotbelow", "1EAC",
- "Acircumflexgrave", "1EA6",
- "Acircumflexhookabove", "1EA8",
- "Acircumflextilde", "1EAA",
- "Acyrillic", "0410",
- "Adblgrave", "0200",
- "Adieresis", "00C4",
- "Adieresiscyrillic", "04D2",
- "Adieresismacron", "01DE",
- "Adotbelow", "1EA0",
- "Adotmacron", "01E0",
- "Agrave", "00C0",
- "Ahookabove", "1EA2",
- "Aiecyrillic", "04D4",
- "Ainvertedbreve", "0202",
- "Alpha", "0391",
- "Alphatonos", "0386",
- "Amacron", "0100",
- "Amonospace", "FF21",
- "Aogonek", "0104",
- "Aring", "00C5",
- "Aringacute", "01FA",
- "Aringbelow", "1E00",
- "Atilde", "00C3",
- "Aybarmenian", "0531",
- "B", "0042",
- "Bcircle", "24B7",
- "Bdotaccent", "1E02",
- "Bdotbelow", "1E04",
- "Becyrillic", "0411",
- "Benarmenian", "0532",
- "Beta", "0392",
- "Bhook", "0181",
- "Blinebelow", "1E06",
- "Bmonospace", "FF22",
- "Btopbar", "0182",
- "C", "0043",
- "Caarmenian", "053E",
- "Cacute", "0106",
- "Ccaron", "010C",
- "Ccedilla", "00C7",
- "Ccedillaacute", "1E08",
- "Ccircle", "24B8",
- "Ccircumflex", "0108",
- "Cdot", "010A",
- "Cdotaccent", "010A",
- "Chaarmenian", "0549",
- "Cheabkhasiancyrillic", "04BC",
- "Checyrillic", "0427",
- "Chedescenderabkhasiancyrillic", "04BE",
- "Chedescendercyrillic", "04B6",
- "Chedieresiscyrillic", "04F4",
- "Cheharmenian", "0543",
- "Chekhakassiancyrillic", "04CB",
- "Cheverticalstrokecyrillic", "04B8",
- "Chi", "03A7",
- "Chook", "0187",
- "Cmonospace", "FF23",
- "Coarmenian", "0551",
- "D", "0044",
- "DZ", "01F1",
- "DZcaron", "01C4",
- "Daarmenian", "0534",
- "Dafrican", "0189",
- "Dcaron", "010E",
- "Dcedilla", "1E10",
- "Dcircle", "24B9",
- "Dcircumflexbelow", "1E12",
- "Dcroat", "0110",
- "Ddotaccent", "1E0A",
- "Ddotbelow", "1E0C",
- "Decyrillic", "0414",
- "Deicoptic", "03EE",
- "Delta", "2206",
- "Deltagreek", "0394",
- "Dhook", "018A",
- "Digammagreek", "03DC",
- "Djecyrillic", "0402",
- "Dlinebelow", "1E0E",
- "Dmonospace", "FF24",
- "Dslash", "0110",
- "Dtopbar", "018B",
- "Dz", "01F2",
- "Dzcaron", "01C5",
- "Dzeabkhasiancyrillic", "04E0",
- "Dzecyrillic", "0405",
- "Dzhecyrillic", "040F",
- "E", "0045",
- "Eacute", "00C9",
- "Ebreve", "0114",
- "Ecaron", "011A",
- "Ecedillabreve", "1E1C",
- "Echarmenian", "0535",
- "Ecircle", "24BA",
- "Ecircumflex", "00CA",
- "Ecircumflexacute", "1EBE",
- "Ecircumflexbelow", "1E18",
- "Ecircumflexdotbelow", "1EC6",
- "Ecircumflexgrave", "1EC0",
- "Ecircumflexhookabove", "1EC2",
- "Ecircumflextilde", "1EC4",
- "Ecyrillic", "0404",
- "Edblgrave", "0204",
- "Edieresis", "00CB",
- "Edot", "0116",
- "Edotaccent", "0116",
- "Edotbelow", "1EB8",
- "Efcyrillic", "0424",
- "Egrave", "00C8",
- "Eharmenian", "0537",
- "Ehookabove", "1EBA",
- "Eightroman", "2167",
- "Einvertedbreve", "0206",
- "Eiotifiedcyrillic", "0464",
- "Elcyrillic", "041B",
- "Elevenroman", "216A",
- "Emacron", "0112",
- "Emacronacute", "1E16",
- "Emacrongrave", "1E14",
- "Emcyrillic", "041C",
- "Emonospace", "FF25",
- "Encyrillic", "041D",
- "Endescendercyrillic", "04A2",
- "Eng", "014A",
- "Enghecyrillic", "04A4",
- "Enhookcyrillic", "04C7",
- "Eogonek", "0118",
- "Eopen", "0190",
- "Epsilon", "0395",
- "Epsilontonos", "0388",
- "Ercyrillic", "0420",
- "Ereversed", "018E",
- "Ereversedcyrillic", "042D",
- "Escyrillic", "0421",
- "Esdescendercyrillic", "04AA",
- "Esh", "01A9",
- "Eta", "0397",
- "Etarmenian", "0538",
- "Etatonos", "0389",
- "Eth", "00D0",
- "Etilde", "1EBC",
- "Etildebelow", "1E1A",
- "Euro", "20AC",
- "Ezh", "01B7",
- "Ezhcaron", "01EE",
- "Ezhreversed", "01B8",
- "F", "0046",
- "Fcircle", "24BB",
- "Fdotaccent", "1E1E",
- "Feharmenian", "0556",
- "Feicoptic", "03E4",
- "Fhook", "0191",
- "Fitacyrillic", "0472",
- "Fiveroman", "2164",
- "Fmonospace", "FF26",
- "Fourroman", "2163",
- "G", "0047",
- "GBsquare", "3387",
- "Gacute", "01F4",
- "Gamma", "0393",
- "Gammaafrican", "0194",
- "Gangiacoptic", "03EA",
- "Gbreve", "011E",
- "Gcaron", "01E6",
- "Gcedilla", "0122",
- "Gcircle", "24BC",
- "Gcircumflex", "011C",
- "Gcommaaccent", "0122",
- "Gdot", "0120",
- "Gdotaccent", "0120",
- "Gecyrillic", "0413",
- "Ghadarmenian", "0542",
- "Ghemiddlehookcyrillic", "0494",
- "Ghestrokecyrillic", "0492",
- "Gheupturncyrillic", "0490",
- "Ghook", "0193",
- "Gimarmenian", "0533",
- "Gjecyrillic", "0403",
- "Gmacron", "1E20",
- "Gmonospace", "FF27",
- "Gsmallhook", "029B",
- "Gstroke", "01E4",
- "H", "0048",
- "H18533", "25CF",
- "H18543", "25AA",
- "H18551", "25AB",
- "H22073", "25A1",
- "HPsquare", "33CB",
- "Haabkhasiancyrillic", "04A8",
- "Hadescendercyrillic", "04B2",
- "Hardsigncyrillic", "042A",
- "Hbar", "0126",
- "Hbrevebelow", "1E2A",
- "Hcedilla", "1E28",
- "Hcircle", "24BD",
- "Hcircumflex", "0124",
- "Hdieresis", "1E26",
- "Hdotaccent", "1E22",
- "Hdotbelow", "1E24",
- "Hmonospace", "FF28",
- "Hoarmenian", "0540",
- "Horicoptic", "03E8",
- "Hzsquare", "3390",
- "I", "0049",
- "IAcyrillic", "042F",
- "IJ", "0132",
- "IUcyrillic", "042E",
- "Iacute", "00CD",
- "Ibreve", "012C",
- "Icaron", "01CF",
- "Icircle", "24BE",
- "Icircumflex", "00CE",
- "Icyrillic", "0406",
- "Idblgrave", "0208",
- "Idieresis", "00CF",
- "Idieresisacute", "1E2E",
- "Idieresiscyrillic", "04E4",
- "Idot", "0130",
- "Idotaccent", "0130",
- "Idotbelow", "1ECA",
- "Iebrevecyrillic", "04D6",
- "Iecyrillic", "0415",
- "Ifraktur", "2111",
- "Igrave", "00CC",
- "Ihookabove", "1EC8",
- "Iicyrillic", "0418",
- "Iinvertedbreve", "020A",
- "Iishortcyrillic", "0419",
- "Imacron", "012A",
- "Imacroncyrillic", "04E2",
- "Imonospace", "FF29",
- "Iniarmenian", "053B",
- "Iocyrillic", "0401",
- "Iogonek", "012E",
- "Iota", "0399",
- "Iotaafrican", "0196",
- "Iotadieresis", "03AA",
- "Iotatonos", "038A",
- "Istroke", "0197",
- "Itilde", "0128",
- "Itildebelow", "1E2C",
- "Izhitsacyrillic", "0474",
- "Izhitsadblgravecyrillic", "0476",
- "J", "004A",
- "Jaarmenian", "0541",
- "Jcircle", "24BF",
- "Jcircumflex", "0134",
- "Jecyrillic", "0408",
- "Jheharmenian", "054B",
- "Jmonospace", "FF2A",
- "K", "004B",
- "KBsquare", "3385",
- "KKsquare", "33CD",
- "Kabashkircyrillic", "04A0",
- "Kacute", "1E30",
- "Kacyrillic", "041A",
- "Kadescendercyrillic", "049A",
- "Kahookcyrillic", "04C3",
- "Kappa", "039A",
- "Kastrokecyrillic", "049E",
- "Kaverticalstrokecyrillic", "049C",
- "Kcaron", "01E8",
- "Kcedilla", "0136",
- "Kcircle", "24C0",
- "Kcommaaccent", "0136",
- "Kdotbelow", "1E32",
- "Keharmenian", "0554",
- "Kenarmenian", "053F",
- "Khacyrillic", "0425",
- "Kheicoptic", "03E6",
- "Khook", "0198",
- "Kjecyrillic", "040C",
- "Klinebelow", "1E34",
- "Kmonospace", "FF2B",
- "Koppacyrillic", "0480",
- "Koppagreek", "03DE",
- "Ksicyrillic", "046E",
- "L", "004C",
- "LJ", "01C7",
- "Lacute", "0139",
- "Lambda", "039B",
- "Lcaron", "013D",
- "Lcedilla", "013B",
- "Lcircle", "24C1",
- "Lcircumflexbelow", "1E3C",
- "Lcommaaccent", "013B",
- "Ldot", "013F",
- "Ldotaccent", "013F",
- "Ldotbelow", "1E36",
- "Ldotbelowmacron", "1E38",
- "Liwnarmenian", "053C",
- "Lj", "01C8",
- "Ljecyrillic", "0409",
- "Llinebelow", "1E3A",
- "Lmonospace", "FF2C",
- "Lslash", "0141",
- "M", "004D",
- "MBsquare", "3386",
- "Macute", "1E3E",
- "Mcircle", "24C2",
- "Mdotaccent", "1E40",
- "Mdotbelow", "1E42",
- "Menarmenian", "0544",
- "Mmonospace", "FF2D",
- "Mturned", "019C",
- "Mu", "039C",
- "N", "004E",
- "NJ", "01CA",
- "Nacute", "0143",
- "Ncaron", "0147",
- "Ncedilla", "0145",
- "Ncircle", "24C3",
- "Ncircumflexbelow", "1E4A",
- "Ncommaaccent", "0145",
- "Ndotaccent", "1E44",
- "Ndotbelow", "1E46",
- "Nhookleft", "019D",
- "Nineroman", "2168",
- "Nj", "01CB",
- "Njecyrillic", "040A",
- "Nlinebelow", "1E48",
- "Nmonospace", "FF2E",
- "Nowarmenian", "0546",
- "Ntilde", "00D1",
- "Nu", "039D",
- "O", "004F",
- "OE", "0152",
- "Oacute", "00D3",
- "Obarredcyrillic", "04E8",
- "Obarreddieresiscyrillic", "04EA",
- "Obreve", "014E",
- "Ocaron", "01D1",
- "Ocenteredtilde", "019F",
- "Ocircle", "24C4",
- "Ocircumflex", "00D4",
- "Ocircumflexacute", "1ED0",
- "Ocircumflexdotbelow", "1ED8",
- "Ocircumflexgrave", "1ED2",
- "Ocircumflexhookabove", "1ED4",
- "Ocircumflextilde", "1ED6",
- "Ocyrillic", "041E",
- "Odblacute", "0150",
- "Odblgrave", "020C",
- "Odieresis", "00D6",
- "Odieresiscyrillic", "04E6",
- "Odotbelow", "1ECC",
- "Ograve", "00D2",
- "Oharmenian", "0555",
- "Ohm", "2126",
- "Ohookabove", "1ECE",
- "Ohorn", "01A0",
- "Ohornacute", "1EDA",
- "Ohorndotbelow", "1EE2",
- "Ohorngrave", "1EDC",
- "Ohornhookabove", "1EDE",
- "Ohorntilde", "1EE0",
- "Ohungarumlaut", "0150",
- "Oi", "01A2",
- "Oinvertedbreve", "020E",
- "Omacron", "014C",
- "Omacronacute", "1E52",
- "Omacrongrave", "1E50",
- "Omega", "2126",
- "Omegacyrillic", "0460",
- "Omegagreek", "03A9",
- "Omegaroundcyrillic", "047A",
- "Omegatitlocyrillic", "047C",
- "Omegatonos", "038F",
- "Omicron", "039F",
- "Omicrontonos", "038C",
- "Omonospace", "FF2F",
- "Oneroman", "2160",
- "Oogonek", "01EA",
- "Oogonekmacron", "01EC",
- "Oopen", "0186",
- "Oslash", "00D8",
- "Oslashacute", "01FE",
- "Ostrokeacute", "01FE",
- "Otcyrillic", "047E",
- "Otilde", "00D5",
- "Otildeacute", "1E4C",
- "Otildedieresis", "1E4E",
- "P", "0050",
- "Pacute", "1E54",
- "Pcircle", "24C5",
- "Pdotaccent", "1E56",
- "Pecyrillic", "041F",
- "Peharmenian", "054A",
- "Pemiddlehookcyrillic", "04A6",
- "Phi", "03A6",
- "Phook", "01A4",
- "Pi", "03A0",
- "Piwrarmenian", "0553",
- "Pmonospace", "FF30",
- "Psi", "03A8",
- "Psicyrillic", "0470",
- "Q", "0051",
- "Qcircle", "24C6",
- "Qmonospace", "FF31",
- "R", "0052",
- "Raarmenian", "054C",
- "Racute", "0154",
- "Rcaron", "0158",
- "Rcedilla", "0156",
- "Rcircle", "24C7",
- "Rcommaaccent", "0156",
- "Rdblgrave", "0210",
- "Rdotaccent", "1E58",
- "Rdotbelow", "1E5A",
- "Rdotbelowmacron", "1E5C",
- "Reharmenian", "0550",
- "Rfraktur", "211C",
- "Rho", "03A1",
- "Rinvertedbreve", "0212",
- "Rlinebelow", "1E5E",
- "Rmonospace", "FF32",
- "Rsmallinverted", "0281",
- "Rsmallinvertedsuperior", "02B6",
- "S", "0053",
- "SF010000", "250C",
- "SF020000", "2514",
- "SF030000", "2510",
- "SF040000", "2518",
- "SF050000", "253C",
- "SF060000", "252C",
- "SF070000", "2534",
- "SF080000", "251C",
- "SF090000", "2524",
- "SF100000", "2500",
- "SF110000", "2502",
- "SF190000", "2561",
- "SF200000", "2562",
- "SF210000", "2556",
- "SF220000", "2555",
- "SF230000", "2563",
- "SF240000", "2551",
- "SF250000", "2557",
- "SF260000", "255D",
- "SF270000", "255C",
- "SF280000", "255B",
- "SF360000", "255E",
- "SF370000", "255F",
- "SF380000", "255A",
- "SF390000", "2554",
- "SF400000", "2569",
- "SF410000", "2566",
- "SF420000", "2560",
- "SF430000", "2550",
- "SF440000", "256C",
- "SF450000", "2567",
- "SF460000", "2568",
- "SF470000", "2564",
- "SF480000", "2565",
- "SF490000", "2559",
- "SF500000", "2558",
- "SF510000", "2552",
- "SF520000", "2553",
- "SF530000", "256B",
- "SF540000", "256A",
- "Sacute", "015A",
- "Sacutedotaccent", "1E64",
- "Sampigreek", "03E0",
- "Scaron", "0160",
- "Scarondotaccent", "1E66",
- "Scedilla", "015E",
- "Schwa", "018F",
- "Schwacyrillic", "04D8",
- "Schwadieresiscyrillic", "04DA",
- "Scircle", "24C8",
- "Scircumflex", "015C",
- "Scommaaccent", "0218",
- "Sdotaccent", "1E60",
- "Sdotbelow", "1E62",
- "Sdotbelowdotaccent", "1E68",
- "Seharmenian", "054D",
- "Sevenroman", "2166",
- "Shaarmenian", "0547",
- "Shacyrillic", "0428",
- "Shchacyrillic", "0429",
- "Sheicoptic", "03E2",
- "Shhacyrillic", "04BA",
- "Shimacoptic", "03EC",
- "Sigma", "03A3",
- "Sixroman", "2165",
- "Smonospace", "FF33",
- "Softsigncyrillic", "042C",
- "Stigmagreek", "03DA",
- "T", "0054",
- "Tau", "03A4",
- "Tbar", "0166",
- "Tcaron", "0164",
- "Tcedilla", "0162",
- "Tcircle", "24C9",
- "Tcircumflexbelow", "1E70",
- "Tcommaaccent", "0162",
- "Tdotaccent", "1E6A",
- "Tdotbelow", "1E6C",
- "Tecyrillic", "0422",
- "Tedescendercyrillic", "04AC",
- "Tenroman", "2169",
- "Tetsecyrillic", "04B4",
- "Theta", "0398",
- "Thook", "01AC",
- "Thorn", "00DE",
- "Threeroman", "2162",
- "Tiwnarmenian", "054F",
- "Tlinebelow", "1E6E",
- "Tmonospace", "FF34",
- "Toarmenian", "0539",
- "Tonefive", "01BC",
- "Tonesix", "0184",
- "Tonetwo", "01A7",
- "Tretroflexhook", "01AE",
- "Tsecyrillic", "0426",
- "Tshecyrillic", "040B",
- "Twelveroman", "216B",
- "Tworoman", "2161",
- "U", "0055",
- "Uacute", "00DA",
- "Ubreve", "016C",
- "Ucaron", "01D3",
- "Ucircle", "24CA",
- "Ucircumflex", "00DB",
- "Ucircumflexbelow", "1E76",
- "Ucyrillic", "0423",
- "Udblacute", "0170",
- "Udblgrave", "0214",
- "Udieresis", "00DC",
- "Udieresisacute", "01D7",
- "Udieresisbelow", "1E72",
- "Udieresiscaron", "01D9",
- "Udieresiscyrillic", "04F0",
- "Udieresisgrave", "01DB",
- "Udieresismacron", "01D5",
- "Udotbelow", "1EE4",
- "Ugrave", "00D9",
- "Uhookabove", "1EE6",
- "Uhorn", "01AF",
- "Uhornacute", "1EE8",
- "Uhorndotbelow", "1EF0",
- "Uhorngrave", "1EEA",
- "Uhornhookabove", "1EEC",
- "Uhorntilde", "1EEE",
- "Uhungarumlaut", "0170",
- "Uhungarumlautcyrillic", "04F2",
- "Uinvertedbreve", "0216",
- "Ukcyrillic", "0478",
- "Umacron", "016A",
- "Umacroncyrillic", "04EE",
- "Umacrondieresis", "1E7A",
- "Umonospace", "FF35",
- "Uogonek", "0172",
- "Upsilon", "03A5",
- "Upsilon1", "03D2",
- "Upsilonacutehooksymbolgreek", "03D3",
- "Upsilonafrican", "01B1",
- "Upsilondieresis", "03AB",
- "Upsilondieresishooksymbolgreek", "03D4",
- "Upsilonhooksymbol", "03D2",
- "Upsilontonos", "038E",
- "Uring", "016E",
- "Ushortcyrillic", "040E",
- "Ustraightcyrillic", "04AE",
- "Ustraightstrokecyrillic", "04B0",
- "Utilde", "0168",
- "Utildeacute", "1E78",
- "Utildebelow", "1E74",
- "V", "0056",
- "Vcircle", "24CB",
- "Vdotbelow", "1E7E",
- "Vecyrillic", "0412",
- "Vewarmenian", "054E",
- "Vhook", "01B2",
- "Vmonospace", "FF36",
- "Voarmenian", "0548",
- "Vtilde", "1E7C",
- "W", "0057",
- "Wacute", "1E82",
- "Wcircle", "24CC",
- "Wcircumflex", "0174",
- "Wdieresis", "1E84",
- "Wdotaccent", "1E86",
- "Wdotbelow", "1E88",
- "Wgrave", "1E80",
- "Wmonospace", "FF37",
- "X", "0058",
- "Xcircle", "24CD",
- "Xdieresis", "1E8C",
- "Xdotaccent", "1E8A",
- "Xeharmenian", "053D",
- "Xi", "039E",
- "Xmonospace", "FF38",
- "Y", "0059",
- "Yacute", "00DD",
- "Yatcyrillic", "0462",
- "Ycircle", "24CE",
- "Ycircumflex", "0176",
- "Ydieresis", "0178",
- "Ydotaccent", "1E8E",
- "Ydotbelow", "1EF4",
- "Yericyrillic", "042B",
- "Yerudieresiscyrillic", "04F8",
- "Ygrave", "1EF2",
- "Yhook", "01B3",
- "Yhookabove", "1EF6",
- "Yiarmenian", "0545",
- "Yicyrillic", "0407",
- "Yiwnarmenian", "0552",
- "Ymonospace", "FF39",
- "Ytilde", "1EF8",
- "Yusbigcyrillic", "046A",
- "Yusbigiotifiedcyrillic", "046C",
- "Yuslittlecyrillic", "0466",
- "Yuslittleiotifiedcyrillic", "0468",
- "Z", "005A",
- "Zaarmenian", "0536",
- "Zacute", "0179",
- "Zcaron", "017D",
- "Zcircle", "24CF",
- "Zcircumflex", "1E90",
- "Zdot", "017B",
- "Zdotaccent", "017B",
- "Zdotbelow", "1E92",
- "Zecyrillic", "0417",
- "Zedescendercyrillic", "0498",
- "Zedieresiscyrillic", "04DE",
- "Zeta", "0396",
- "Zhearmenian", "053A",
- "Zhebrevecyrillic", "04C1",
- "Zhecyrillic", "0416",
- "Zhedescendercyrillic", "0496",
- "Zhedieresiscyrillic", "04DC",
- "Zlinebelow", "1E94",
- "Zmonospace", "FF3A",
- "Zstroke", "01B5",
- "a", "0061",
- "aabengali", "0986",
- "aacute", "00E1",
- "aadeva", "0906",
- "aagujarati", "0A86",
- "aagurmukhi", "0A06",
- "aamatragurmukhi", "0A3E",
- "aarusquare", "3303",
- "aavowelsignbengali", "09BE",
- "aavowelsigndeva", "093E",
- "aavowelsigngujarati", "0ABE",
- "abbreviationmarkarmenian", "055F",
- "abbreviationsigndeva", "0970",
- "abengali", "0985",
- "abopomofo", "311A",
- "abreve", "0103",
- "abreveacute", "1EAF",
- "abrevecyrillic", "04D1",
- "abrevedotbelow", "1EB7",
- "abrevegrave", "1EB1",
- "abrevehookabove", "1EB3",
- "abrevetilde", "1EB5",
- "acaron", "01CE",
- "acircle", "24D0",
- "acircumflex", "00E2",
- "acircumflexacute", "1EA5",
- "acircumflexdotbelow", "1EAD",
- "acircumflexgrave", "1EA7",
- "acircumflexhookabove", "1EA9",
- "acircumflextilde", "1EAB",
- "acute", "00B4",
- "acutebelowcmb", "0317",
- "acutecmb", "0301",
- "acutecomb", "0301",
- "acutedeva", "0954",
- "acutelowmod", "02CF",
- "acutetonecmb", "0341",
- "acyrillic", "0430",
- "adblgrave", "0201",
- "addakgurmukhi", "0A71",
- "adeva", "0905",
- "adieresis", "00E4",
- "adieresiscyrillic", "04D3",
- "adieresismacron", "01DF",
- "adotbelow", "1EA1",
- "adotmacron", "01E1",
- "ae", "00E6",
- "aeacute", "01FD",
- "aekorean", "3150",
- "aemacron", "01E3",
- "afii00208", "2015",
- "afii08941", "20A4",
- "afii10017", "0410",
- "afii10018", "0411",
- "afii10019", "0412",
- "afii10020", "0413",
- "afii10021", "0414",
- "afii10022", "0415",
- "afii10023", "0401",
- "afii10024", "0416",
- "afii10025", "0417",
- "afii10026", "0418",
- "afii10027", "0419",
- "afii10028", "041A",
- "afii10029", "041B",
- "afii10030", "041C",
- "afii10031", "041D",
- "afii10032", "041E",
- "afii10033", "041F",
- "afii10034", "0420",
- "afii10035", "0421",
- "afii10036", "0422",
- "afii10037", "0423",
- "afii10038", "0424",
- "afii10039", "0425",
- "afii10040", "0426",
- "afii10041", "0427",
- "afii10042", "0428",
- "afii10043", "0429",
- "afii10044", "042A",
- "afii10045", "042B",
- "afii10046", "042C",
- "afii10047", "042D",
- "afii10048", "042E",
- "afii10049", "042F",
- "afii10050", "0490",
- "afii10051", "0402",
- "afii10052", "0403",
- "afii10053", "0404",
- "afii10054", "0405",
- "afii10055", "0406",
- "afii10056", "0407",
- "afii10057", "0408",
- "afii10058", "0409",
- "afii10059", "040A",
- "afii10060", "040B",
- "afii10061", "040C",
- "afii10062", "040E",
- "afii10065", "0430",
- "afii10066", "0431",
- "afii10067", "0432",
- "afii10068", "0433",
- "afii10069", "0434",
- "afii10070", "0435",
- "afii10071", "0451",
- "afii10072", "0436",
- "afii10073", "0437",
- "afii10074", "0438",
- "afii10075", "0439",
- "afii10076", "043A",
- "afii10077", "043B",
- "afii10078", "043C",
- "afii10079", "043D",
- "afii10080", "043E",
- "afii10081", "043F",
- "afii10082", "0440",
- "afii10083", "0441",
- "afii10084", "0442",
- "afii10085", "0443",
- "afii10086", "0444",
- "afii10087", "0445",
- "afii10088", "0446",
- "afii10089", "0447",
- "afii10090", "0448",
- "afii10091", "0449",
- "afii10092", "044A",
- "afii10093", "044B",
- "afii10094", "044C",
- "afii10095", "044D",
- "afii10096", "044E",
- "afii10097", "044F",
- "afii10098", "0491",
- "afii10099", "0452",
- "afii10100", "0453",
- "afii10101", "0454",
- "afii10102", "0455",
- "afii10103", "0456",
- "afii10104", "0457",
- "afii10105", "0458",
- "afii10106", "0459",
- "afii10107", "045A",
- "afii10108", "045B",
- "afii10109", "045C",
- "afii10110", "045E",
- "afii10145", "040F",
- "afii10146", "0462",
- "afii10147", "0472",
- "afii10148", "0474",
- "afii10193", "045F",
- "afii10194", "0463",
- "afii10195", "0473",
- "afii10196", "0475",
- "afii10846", "04D9",
- "afii299", "200E",
- "afii300", "200F",
- "afii301", "200D",
- "afii57381", "066A",
- "afii57388", "060C",
- "afii57392", "0660",
- "afii57393", "0661",
- "afii57394", "0662",
- "afii57395", "0663",
- "afii57396", "0664",
- "afii57397", "0665",
- "afii57398", "0666",
- "afii57399", "0667",
- "afii57400", "0668",
- "afii57401", "0669",
- "afii57403", "061B",
- "afii57407", "061F",
- "afii57409", "0621",
- "afii57410", "0622",
- "afii57411", "0623",
- "afii57412", "0624",
- "afii57413", "0625",
- "afii57414", "0626",
- "afii57415", "0627",
- "afii57416", "0628",
- "afii57417", "0629",
- "afii57418", "062A",
- "afii57419", "062B",
- "afii57420", "062C",
- "afii57421", "062D",
- "afii57422", "062E",
- "afii57423", "062F",
- "afii57424", "0630",
- "afii57425", "0631",
- "afii57426", "0632",
- "afii57427", "0633",
- "afii57428", "0634",
- "afii57429", "0635",
- "afii57430", "0636",
- "afii57431", "0637",
- "afii57432", "0638",
- "afii57433", "0639",
- "afii57434", "063A",
- "afii57440", "0640",
- "afii57441", "0641",
- "afii57442", "0642",
- "afii57443", "0643",
- "afii57444", "0644",
- "afii57445", "0645",
- "afii57446", "0646",
- "afii57448", "0648",
- "afii57449", "0649",
- "afii57450", "064A",
- "afii57451", "064B",
- "afii57452", "064C",
- "afii57453", "064D",
- "afii57454", "064E",
- "afii57455", "064F",
- "afii57456", "0650",
- "afii57457", "0651",
- "afii57458", "0652",
- "afii57470", "0647",
- "afii57505", "06A4",
- "afii57506", "067E",
- "afii57507", "0686",
- "afii57508", "0698",
- "afii57509", "06AF",
- "afii57511", "0679",
- "afii57512", "0688",
- "afii57513", "0691",
- "afii57514", "06BA",
- "afii57519", "06D2",
- "afii57534", "06D5",
- "afii57636", "20AA",
- "afii57645", "05BE",
- "afii57658", "05C3",
- "afii57664", "05D0",
- "afii57665", "05D1",
- "afii57666", "05D2",
- "afii57667", "05D3",
- "afii57668", "05D4",
- "afii57669", "05D5",
- "afii57670", "05D6",
- "afii57671", "05D7",
- "afii57672", "05D8",
- "afii57673", "05D9",
- "afii57674", "05DA",
- "afii57675", "05DB",
- "afii57676", "05DC",
- "afii57677", "05DD",
- "afii57678", "05DE",
- "afii57679", "05DF",
- "afii57680", "05E0",
- "afii57681", "05E1",
- "afii57682", "05E2",
- "afii57683", "05E3",
- "afii57684", "05E4",
- "afii57685", "05E5",
- "afii57686", "05E6",
- "afii57687", "05E7",
- "afii57688", "05E8",
- "afii57689", "05E9",
- "afii57690", "05EA",
- "afii57694", "FB2A",
- "afii57695", "FB2B",
- "afii57700", "FB4B",
- "afii57705", "FB1F",
- "afii57716", "05F0",
- "afii57717", "05F1",
- "afii57718", "05F2",
- "afii57723", "FB35",
- "afii57793", "05B4",
- "afii57794", "05B5",
- "afii57795", "05B6",
- "afii57796", "05BB",
- "afii57797", "05B8",
- "afii57798", "05B7",
- "afii57799", "05B0",
- "afii57800", "05B2",
- "afii57801", "05B1",
- "afii57802", "05B3",
- "afii57803", "05C2",
- "afii57804", "05C1",
- "afii57806", "05B9",
- "afii57807", "05BC",
- "afii57839", "05BD",
- "afii57841", "05BF",
- "afii57842", "05C0",
- "afii57929", "02BC",
- "afii61248", "2105",
- "afii61289", "2113",
- "afii61352", "2116",
- "afii61573", "202C",
- "afii61574", "202D",
- "afii61575", "202E",
- "afii61664", "200C",
- "afii63167", "066D",
- "afii64937", "02BD",
- "agrave", "00E0",
- "agujarati", "0A85",
- "agurmukhi", "0A05",
- "ahiragana", "3042",
- "ahookabove", "1EA3",
- "aibengali", "0990",
- "aibopomofo", "311E",
- "aideva", "0910",
- "aiecyrillic", "04D5",
- "aigujarati", "0A90",
- "aigurmukhi", "0A10",
- "aimatragurmukhi", "0A48",
- "ainarabic", "0639",
- "ainfinalarabic", "FECA",
- "aininitialarabic", "FECB",
- "ainmedialarabic", "FECC",
- "ainvertedbreve", "0203",
- "aivowelsignbengali", "09C8",
- "aivowelsigndeva", "0948",
- "aivowelsigngujarati", "0AC8",
- "akatakana", "30A2",
- "akatakanahalfwidth", "FF71",
- "akorean", "314F",
- "alef", "05D0",
- "alefarabic", "0627",
- "alefdageshhebrew", "FB30",
- "aleffinalarabic", "FE8E",
- "alefhamzaabovearabic", "0623",
- "alefhamzaabovefinalarabic", "FE84",
- "alefhamzabelowarabic", "0625",
- "alefhamzabelowfinalarabic", "FE88",
- "alefhebrew", "05D0",
- "aleflamedhebrew", "FB4F",
- "alefmaddaabovearabic", "0622",
- "alefmaddaabovefinalarabic", "FE82",
- "alefmaksuraarabic", "0649",
- "alefmaksurafinalarabic", "FEF0",
- "alefmaksurainitialarabic", "FEF3",
- "alefmaksuramedialarabic", "FEF4",
- "alefpatahhebrew", "FB2E",
- "alefqamatshebrew", "FB2F",
- "aleph", "2135",
- "allequal", "224C",
- "alpha", "03B1",
- "alphatonos", "03AC",
- "amacron", "0101",
- "amonospace", "FF41",
- "ampersand", "0026",
- "ampersandmonospace", "FF06",
- "amsquare", "33C2",
- "anbopomofo", "3122",
- "angbopomofo", "3124",
- "angkhankhuthai", "0E5A",
- "angle", "2220",
- "anglebracketleft", "3008",
- "anglebracketleftvertical", "FE3F",
- "anglebracketright", "3009",
- "anglebracketrightvertical", "FE40",
- "angleleft", "2329",
- "angleright", "232A",
- "angstrom", "212B",
- "anoteleia", "0387",
- "anudattadeva", "0952",
- "anusvarabengali", "0982",
- "anusvaradeva", "0902",
- "anusvaragujarati", "0A82",
- "aogonek", "0105",
- "apaatosquare", "3300",
- "aparen", "249C",
- "apostrophearmenian", "055A",
- "apostrophemod", "02BC",
- "approaches", "2250",
- "approxequal", "2248",
- "approxequalorimage", "2252",
- "approximatelyequal", "2245",
- "araeaekorean", "318E",
- "araeakorean", "318D",
- "arc", "2312",
- "arighthalfring", "1E9A",
- "aring", "00E5",
- "aringacute", "01FB",
- "aringbelow", "1E01",
- "arrowboth", "2194",
- "arrowdashdown", "21E3",
- "arrowdashleft", "21E0",
- "arrowdashright", "21E2",
- "arrowdashup", "21E1",
- "arrowdblboth", "21D4",
- "arrowdbldown", "21D3",
- "arrowdblleft", "21D0",
- "arrowdblright", "21D2",
- "arrowdblup", "21D1",
- "arrowdown", "2193",
- "arrowdownleft", "2199",
- "arrowdownright", "2198",
- "arrowdownwhite", "21E9",
- "arrowheaddownmod", "02C5",
- "arrowheadleftmod", "02C2",
- "arrowheadrightmod", "02C3",
- "arrowheadupmod", "02C4",
- "arrowleft", "2190",
- "arrowleftdbl", "21D0",
- "arrowleftdblstroke", "21CD",
- "arrowleftoverright", "21C6",
- "arrowleftwhite", "21E6",
- "arrowright", "2192",
- "arrowrightdblstroke", "21CF",
- "arrowrightheavy", "279E",
- "arrowrightoverleft", "21C4",
- "arrowrightwhite", "21E8",
- "arrowtableft", "21E4",
- "arrowtabright", "21E5",
- "arrowup", "2191",
- "arrowupdn", "2195",
- "arrowupdnbse", "21A8",
- "arrowupdownbase", "21A8",
- "arrowupleft", "2196",
- "arrowupleftofdown", "21C5",
- "arrowupright", "2197",
- "arrowupwhite", "21E7",
- "asciicircum", "005E",
- "asciicircummonospace", "FF3E",
- "asciitilde", "007E",
- "asciitildemonospace", "FF5E",
- "ascript", "0251",
- "ascriptturned", "0252",
- "asmallhiragana", "3041",
- "asmallkatakana", "30A1",
- "asmallkatakanahalfwidth", "FF67",
- "asterisk", "002A",
- "asteriskaltonearabic", "066D",
- "asteriskarabic", "066D",
- "asteriskmath", "2217",
- "asteriskmonospace", "FF0A",
- "asterisksmall", "FE61",
- "asterism", "2042",
- "asymptoticallyequal", "2243",
- "at", "0040",
- "atilde", "00E3",
- "atmonospace", "FF20",
- "atsmall", "FE6B",
- "aturned", "0250",
- "aubengali", "0994",
- "aubopomofo", "3120",
- "audeva", "0914",
- "augujarati", "0A94",
- "augurmukhi", "0A14",
- "aulengthmarkbengali", "09D7",
- "aumatragurmukhi", "0A4C",
- "auvowelsignbengali", "09CC",
- "auvowelsigndeva", "094C",
- "auvowelsigngujarati", "0ACC",
- "avagrahadeva", "093D",
- "aybarmenian", "0561",
- "ayin", "05E2",
- "ayinaltonehebrew", "FB20",
- "ayinhebrew", "05E2",
- "b", "0062",
- "babengali", "09AC",
- "backslash", "005C",
- "backslashmonospace", "FF3C",
- "badeva", "092C",
- "bagujarati", "0AAC",
- "bagurmukhi", "0A2C",
- "bahiragana", "3070",
- "bahtthai", "0E3F",
- "bakatakana", "30D0",
- "bar", "007C",
- "barmonospace", "FF5C",
- "bbopomofo", "3105",
- "bcircle", "24D1",
- "bdotaccent", "1E03",
- "bdotbelow", "1E05",
- "beamedsixteenthnotes", "266C",
- "because", "2235",
- "becyrillic", "0431",
- "beharabic", "0628",
- "behfinalarabic", "FE90",
- "behinitialarabic", "FE91",
- "behiragana", "3079",
- "behmedialarabic", "FE92",
- "behmeeminitialarabic", "FC9F",
- "behmeemisolatedarabic", "FC08",
- "behnoonfinalarabic", "FC6D",
- "bekatakana", "30D9",
- "benarmenian", "0562",
- "bet", "05D1",
- "beta", "03B2",
- "betasymbolgreek", "03D0",
- "betdagesh", "FB31",
- "betdageshhebrew", "FB31",
- "bethebrew", "05D1",
- "betrafehebrew", "FB4C",
- "bhabengali", "09AD",
- "bhadeva", "092D",
- "bhagujarati", "0AAD",
- "bhagurmukhi", "0A2D",
- "bhook", "0253",
- "bihiragana", "3073",
- "bikatakana", "30D3",
- "bilabialclick", "0298",
- "bindigurmukhi", "0A02",
- "birusquare", "3331",
- "blackcircle", "25CF",
- "blackdiamond", "25C6",
- "blackdownpointingtriangle", "25BC",
- "blackleftpointingpointer", "25C4",
- "blackleftpointingtriangle", "25C0",
- "blacklenticularbracketleft", "3010",
- "blacklenticularbracketleftvertical", "FE3B",
- "blacklenticularbracketright", "3011",
- "blacklenticularbracketrightvertical", "FE3C",
- "blacklowerlefttriangle", "25E3",
- "blacklowerrighttriangle", "25E2",
- "blackrectangle", "25AC",
- "blackrightpointingpointer", "25BA",
- "blackrightpointingtriangle", "25B6",
- "blacksmallsquare", "25AA",
- "blacksmilingface", "263B",
- "blacksquare", "25A0",
- "blackstar", "2605",
- "blackupperlefttriangle", "25E4",
- "blackupperrighttriangle", "25E5",
- "blackuppointingsmalltriangle", "25B4",
- "blackuppointingtriangle", "25B2",
- "blank", "2423",
- "blinebelow", "1E07",
- "block", "2588",
- "bmonospace", "FF42",
- "bobaimaithai", "0E1A",
- "bohiragana", "307C",
- "bokatakana", "30DC",
- "bparen", "249D",
- "bqsquare", "33C3",
- "braceleft", "007B",
- "braceleftmonospace", "FF5B",
- "braceleftsmall", "FE5B",
- "braceleftvertical", "FE37",
- "braceright", "007D",
- "bracerightmonospace", "FF5D",
- "bracerightsmall", "FE5C",
- "bracerightvertical", "FE38",
- "bracketleft", "005B",
- "bracketleftmonospace", "FF3B",
- "bracketright", "005D",
- "bracketrightmonospace", "FF3D",
- "breve", "02D8",
- "brevebelowcmb", "032E",
- "brevecmb", "0306",
- "breveinvertedbelowcmb", "032F",
- "breveinvertedcmb", "0311",
- "breveinverteddoublecmb", "0361",
- "bridgebelowcmb", "032A",
- "bridgeinvertedbelowcmb", "033A",
- "brokenbar", "00A6",
- "bstroke", "0180",
- "btopbar", "0183",
- "buhiragana", "3076",
- "bukatakana", "30D6",
- "bullet", "2022",
- "bulletinverse", "25D8",
- "bulletoperator", "2219",
- "bullseye", "25CE",
- "c", "0063",
- "caarmenian", "056E",
- "cabengali", "099A",
- "cacute", "0107",
- "cadeva", "091A",
- "cagujarati", "0A9A",
- "cagurmukhi", "0A1A",
- "calsquare", "3388",
- "candrabindubengali", "0981",
- "candrabinducmb", "0310",
- "candrabindudeva", "0901",
- "candrabindugujarati", "0A81",
- "capslock", "21EA",
- "careof", "2105",
- "caron", "02C7",
- "caronbelowcmb", "032C",
- "caroncmb", "030C",
- "carriagereturn", "21B5",
- "cbopomofo", "3118",
- "ccaron", "010D",
- "ccedilla", "00E7",
- "ccedillaacute", "1E09",
- "ccircle", "24D2",
- "ccircumflex", "0109",
- "ccurl", "0255",
- "cdot", "010B",
- "cdotaccent", "010B",
- "cdsquare", "33C5",
- "cedilla", "00B8",
- "cedillacmb", "0327",
- "cent", "00A2",
- "centigrade", "2103",
- "centmonospace", "FFE0",
- "chaarmenian", "0579",
- "chabengali", "099B",
- "chadeva", "091B",
- "chagujarati", "0A9B",
- "chagurmukhi", "0A1B",
- "chbopomofo", "3114",
- "cheabkhasiancyrillic", "04BD",
- "checkmark", "2713",
- "checyrillic", "0447",
- "chedescenderabkhasiancyrillic", "04BF",
- "chedescendercyrillic", "04B7",
- "chedieresiscyrillic", "04F5",
- "cheharmenian", "0573",
- "chekhakassiancyrillic", "04CC",
- "cheverticalstrokecyrillic", "04B9",
- "chi", "03C7",
- "chieuchacirclekorean", "3277",
- "chieuchaparenkorean", "3217",
- "chieuchcirclekorean", "3269",
- "chieuchkorean", "314A",
- "chieuchparenkorean", "3209",
- "chochangthai", "0E0A",
- "chochanthai", "0E08",
- "chochingthai", "0E09",
- "chochoethai", "0E0C",
- "chook", "0188",
- "cieucacirclekorean", "3276",
- "cieucaparenkorean", "3216",
- "cieuccirclekorean", "3268",
- "cieuckorean", "3148",
- "cieucparenkorean", "3208",
- "cieucuparenkorean", "321C",
- "circle", "25CB",
- "circlemultiply", "2297",
- "circleot", "2299",
- "circleplus", "2295",
- "circlepostalmark", "3036",
- "circlewithlefthalfblack", "25D0",
- "circlewithrighthalfblack", "25D1",
- "circumflex", "02C6",
- "circumflexbelowcmb", "032D",
- "circumflexcmb", "0302",
- "clear", "2327",
- "clickalveolar", "01C2",
- "clickdental", "01C0",
- "clicklateral", "01C1",
- "clickretroflex", "01C3",
- "club", "2663",
- "clubsuitblack", "2663",
- "clubsuitwhite", "2667",
- "cmcubedsquare", "33A4",
- "cmonospace", "FF43",
- "cmsquaredsquare", "33A0",
- "coarmenian", "0581",
- "colon", "003A",
- "colonmonetary", "20A1",
- "colonmonospace", "FF1A",
- "colonsign", "20A1",
- "colonsmall", "FE55",
- "colontriangularhalfmod", "02D1",
- "colontriangularmod", "02D0",
- "comma", "002C",
- "commaabovecmb", "0313",
- "commaaboverightcmb", "0315",
- "commaarabic", "060C",
- "commaarmenian", "055D",
- "commamonospace", "FF0C",
- "commareversedabovecmb", "0314",
- "commareversedmod", "02BD",
- "commasmall", "FE50",
- "commaturnedabovecmb", "0312",
- "commaturnedmod", "02BB",
- "compass", "263C",
- "congruent", "2245",
- "contourintegral", "222E",
- "control", "2303",
- "controlACK", "0006",
- "controlBEL", "0007",
- "controlBS", "0008",
- "controlCAN", "0018",
- "controlCR", "000D",
- "controlDC1", "0011",
- "controlDC2", "0012",
- "controlDC3", "0013",
- "controlDC4", "0014",
- "controlDEL", "007F",
- "controlDLE", "0010",
- "controlEM", "0019",
- "controlENQ", "0005",
- "controlEOT", "0004",
- "controlESC", "001B",
- "controlETB", "0017",
- "controlETX", "0003",
- "controlFF", "000C",
- "controlFS", "001C",
- "controlGS", "001D",
- "controlHT", "0009",
- "controlLF", "000A",
- "controlNAK", "0015",
- "controlRS", "001E",
- "controlSI", "000F",
- "controlSO", "000E",
- "controlSOT", "0002",
- "controlSTX", "0001",
- "controlSUB", "001A",
- "controlSYN", "0016",
- "controlUS", "001F",
- "controlVT", "000B",
- "copyright", "00A9",
- "cornerbracketleft", "300C",
- "cornerbracketlefthalfwidth", "FF62",
- "cornerbracketleftvertical", "FE41",
- "cornerbracketright", "300D",
- "cornerbracketrighthalfwidth", "FF63",
- "cornerbracketrightvertical", "FE42",
- "corporationsquare", "337F",
- "cosquare", "33C7",
- "coverkgsquare", "33C6",
- "cparen", "249E",
- "cruzeiro", "20A2",
- "cstretched", "0297",
- "curlyand", "22CF",
- "curlyor", "22CE",
- "currency", "00A4",
- "d", "0064",
- "daarmenian", "0564",
- "dabengali", "09A6",
- "dadarabic", "0636",
- "dadeva", "0926",
- "dadfinalarabic", "FEBE",
- "dadinitialarabic", "FEBF",
- "dadmedialarabic", "FEC0",
- "dagesh", "05BC",
- "dageshhebrew", "05BC",
- "dagger", "2020",
- "daggerdbl", "2021",
- "dagujarati", "0AA6",
- "dagurmukhi", "0A26",
- "dahiragana", "3060",
- "dakatakana", "30C0",
- "dalarabic", "062F",
- "dalet", "05D3",
- "daletdagesh", "FB33",
- "daletdageshhebrew", "FB33",
- "dalethatafpatah", "05D3_05B2",
- "dalethatafpatahhebrew", "05D3_05B2",
- "dalethatafsegol", "05D3_05B1",
- "dalethatafsegolhebrew", "05D3_05B1",
- "dalethebrew", "05D3",
- "dalethiriq", "05D3_05B4",
- "dalethiriqhebrew", "05D3_05B4",
- "daletholam", "05D3_05B9",
- "daletholamhebrew", "05D3_05B9",
- "daletpatah", "05D3_05B7",
- "daletpatahhebrew", "05D3_05B7",
- "daletqamats", "05D3_05B8",
- "daletqamatshebrew", "05D3_05B8",
- "daletqubuts", "05D3_05BB",
- "daletqubutshebrew", "05D3_05BB",
- "daletsegol", "05D3_05B6",
- "daletsegolhebrew", "05D3_05B6",
- "daletsheva", "05D3_05B0",
- "daletshevahebrew", "05D3_05B0",
- "dalettsere", "05D3_05B5",
- "dalettserehebrew", "05D3_05B5",
- "dalfinalarabic", "FEAA",
- "dammaarabic", "064F",
- "dammalowarabic", "064F",
- "dammatanaltonearabic", "064C",
- "dammatanarabic", "064C",
- "danda", "0964",
- "dargahebrew", "05A7",
- "dargalefthebrew", "05A7",
- "dasiapneumatacyrilliccmb", "0485",
- "dblanglebracketleft", "300A",
- "dblanglebracketleftvertical", "FE3D",
- "dblanglebracketright", "300B",
- "dblanglebracketrightvertical", "FE3E",
- "dblarchinvertedbelowcmb", "032B",
- "dblarrowleft", "21D4",
- "dblarrowright", "21D2",
- "dbldanda", "0965",
- "dblgravecmb", "030F",
- "dblintegral", "222C",
- "dbllowline", "2017",
- "dbllowlinecmb", "0333",
- "dbloverlinecmb", "033F",
- "dblprimemod", "02BA",
- "dblverticalbar", "2016",
- "dblverticallineabovecmb", "030E",
- "dbopomofo", "3109",
- "dbsquare", "33C8",
- "dcaron", "010F",
- "dcedilla", "1E11",
- "dcircle", "24D3",
- "dcircumflexbelow", "1E13",
- "dcroat", "0111",
- "ddabengali", "09A1",
- "ddadeva", "0921",
- "ddagujarati", "0AA1",
- "ddagurmukhi", "0A21",
- "ddalarabic", "0688",
- "ddalfinalarabic", "FB89",
- "dddhadeva", "095C",
- "ddhabengali", "09A2",
- "ddhadeva", "0922",
- "ddhagujarati", "0AA2",
- "ddhagurmukhi", "0A22",
- "ddotaccent", "1E0B",
- "ddotbelow", "1E0D",
- "decimalseparatorarabic", "066B",
- "decimalseparatorpersian", "066B",
- "decyrillic", "0434",
- "degree", "00B0",
- "dehihebrew", "05AD",
- "dehiragana", "3067",
- "deicoptic", "03EF",
- "dekatakana", "30C7",
- "deleteleft", "232B",
- "deleteright", "2326",
- "delta", "03B4",
- "deltaturned", "018D",
- "denominatorminusonenumeratorbengali", "09F8",
- "dezh", "02A4",
- "dhabengali", "09A7",
- "dhadeva", "0927",
- "dhagujarati", "0AA7",
- "dhagurmukhi", "0A27",
- "dhook", "0257",
- "dialytikatonos", "0385",
- "dialytikatonoscmb", "0344",
- "diamond", "2666",
- "diamondsuitwhite", "2662",
- "dieresis", "00A8",
- "dieresisbelowcmb", "0324",
- "dieresiscmb", "0308",
- "dieresistonos", "0385",
- "dihiragana", "3062",
- "dikatakana", "30C2",
- "dittomark", "3003",
- "divide", "00F7",
- "divides", "2223",
- "divisionslash", "2215",
- "djecyrillic", "0452",
- "dkshade", "2593",
- "dlinebelow", "1E0F",
- "dlsquare", "3397",
- "dmacron", "0111",
- "dmonospace", "FF44",
- "dnblock", "2584",
- "dochadathai", "0E0E",
- "dodekthai", "0E14",
- "dohiragana", "3069",
- "dokatakana", "30C9",
- "dollar", "0024",
- "dollarmonospace", "FF04",
- "dollarsmall", "FE69",
- "dong", "20AB",
- "dorusquare", "3326",
- "dotaccent", "02D9",
- "dotaccentcmb", "0307",
- "dotbelowcmb", "0323",
- "dotbelowcomb", "0323",
- "dotkatakana", "30FB",
- "dotlessi", "0131",
- "dotlessjstrokehook", "0284",
- "dotmath", "22C5",
- "dottedcircle", "25CC",
- "doubleyodpatah", "FB1F",
- "doubleyodpatahhebrew", "FB1F",
- "downtackbelowcmb", "031E",
- "downtackmod", "02D5",
- "dparen", "249F",
- "dtail", "0256",
- "dtopbar", "018C",
- "duhiragana", "3065",
- "dukatakana", "30C5",
- "dz", "01F3",
- "dzaltone", "02A3",
- "dzcaron", "01C6",
- "dzcurl", "02A5",
- "dzeabkhasiancyrillic", "04E1",
- "dzecyrillic", "0455",
- "dzhecyrillic", "045F",
- "e", "0065",
- "eacute", "00E9",
- "earth", "2641",
- "ebengali", "098F",
- "ebopomofo", "311C",
- "ebreve", "0115",
- "ecandradeva", "090D",
- "ecandragujarati", "0A8D",
- "ecandravowelsigndeva", "0945",
- "ecandravowelsigngujarati", "0AC5",
- "ecaron", "011B",
- "ecedillabreve", "1E1D",
- "echarmenian", "0565",
- "echyiwnarmenian", "0587",
- "ecircle", "24D4",
- "ecircumflex", "00EA",
- "ecircumflexacute", "1EBF",
- "ecircumflexbelow", "1E19",
- "ecircumflexdotbelow", "1EC7",
- "ecircumflexgrave", "1EC1",
- "ecircumflexhookabove", "1EC3",
- "ecircumflextilde", "1EC5",
- "ecyrillic", "0454",
- "edblgrave", "0205",
- "edeva", "090F",
- "edieresis", "00EB",
- "edot", "0117",
- "edotaccent", "0117",
- "edotbelow", "1EB9",
- "eegurmukhi", "0A0F",
- "eematragurmukhi", "0A47",
- "efcyrillic", "0444",
- "egrave", "00E8",
- "egujarati", "0A8F",
- "eharmenian", "0567",
- "ehbopomofo", "311D",
- "ehiragana", "3048",
- "ehookabove", "1EBB",
- "eibopomofo", "311F",
- "eight", "0038",
- "eightarabic", "0668",
- "eightbengali", "09EE",
- "eightcircle", "2467",
- "eightcircleinversesansserif", "2791",
- "eightdeva", "096E",
- "eighteencircle", "2471",
- "eighteenparen", "2485",
- "eighteenperiod", "2499",
- "eightgujarati", "0AEE",
- "eightgurmukhi", "0A6E",
- "eighthackarabic", "0668",
- "eighthangzhou", "3028",
- "eighthnotebeamed", "266B",
- "eightideographicparen", "3227",
- "eightinferior", "2088",
- "eightmonospace", "FF18",
- "eightparen", "247B",
- "eightperiod", "248F",
- "eightpersian", "06F8",
- "eightroman", "2177",
- "eightsuperior", "2078",
- "eightthai", "0E58",
- "einvertedbreve", "0207",
- "eiotifiedcyrillic", "0465",
- "ekatakana", "30A8",
- "ekatakanahalfwidth", "FF74",
- "ekonkargurmukhi", "0A74",
- "ekorean", "3154",
- "elcyrillic", "043B",
- "element", "2208",
- "elevencircle", "246A",
- "elevenparen", "247E",
- "elevenperiod", "2492",
- "elevenroman", "217A",
- "ellipsis", "2026",
- "ellipsisvertical", "22EE",
- "emacron", "0113",
- "emacronacute", "1E17",
- "emacrongrave", "1E15",
- "emcyrillic", "043C",
- "emdash", "2014",
- "emdashvertical", "FE31",
- "emonospace", "FF45",
- "emphasismarkarmenian", "055B",
- "emptyset", "2205",
- "enbopomofo", "3123",
- "encyrillic", "043D",
- "endash", "2013",
- "endashvertical", "FE32",
- "endescendercyrillic", "04A3",
- "eng", "014B",
- "engbopomofo", "3125",
- "enghecyrillic", "04A5",
- "enhookcyrillic", "04C8",
- "enspace", "2002",
- "eogonek", "0119",
- "eokorean", "3153",
- "eopen", "025B",
- "eopenclosed", "029A",
- "eopenreversed", "025C",
- "eopenreversedclosed", "025E",
- "eopenreversedhook", "025D",
- "eparen", "24A0",
- "epsilon", "03B5",
- "epsilontonos", "03AD",
- "equal", "003D",
- "equalmonospace", "FF1D",
- "equalsmall", "FE66",
- "equalsuperior", "207C",
- "equivalence", "2261",
- "erbopomofo", "3126",
- "ercyrillic", "0440",
- "ereversed", "0258",
- "ereversedcyrillic", "044D",
- "escyrillic", "0441",
- "esdescendercyrillic", "04AB",
- "esh", "0283",
- "eshcurl", "0286",
- "eshortdeva", "090E",
- "eshortvowelsigndeva", "0946",
- "eshreversedloop", "01AA",
- "eshsquatreversed", "0285",
- "esmallhiragana", "3047",
- "esmallkatakana", "30A7",
- "esmallkatakanahalfwidth", "FF6A",
- "estimated", "212E",
- "eta", "03B7",
- "etarmenian", "0568",
- "etatonos", "03AE",
- "eth", "00F0",
- "etilde", "1EBD",
- "etildebelow", "1E1B",
- "etnahtafoukhhebrew", "0591",
- "etnahtafoukhlefthebrew", "0591",
- "etnahtahebrew", "0591",
- "etnahtalefthebrew", "0591",
- "eturned", "01DD",
- "eukorean", "3161",
- "euro", "20AC",
- "evowelsignbengali", "09C7",
- "evowelsigndeva", "0947",
- "evowelsigngujarati", "0AC7",
- "exclam", "0021",
- "exclamarmenian", "055C",
- "exclamdbl", "203C",
- "exclamdown", "00A1",
- "exclammonospace", "FF01",
- "existential", "2203",
- "ezh", "0292",
- "ezhcaron", "01EF",
- "ezhcurl", "0293",
- "ezhreversed", "01B9",
- "ezhtail", "01BA",
- "f", "0066",
- "fadeva", "095E",
- "fagurmukhi", "0A5E",
- "fahrenheit", "2109",
- "fathaarabic", "064E",
- "fathalowarabic", "064E",
- "fathatanarabic", "064B",
- "fbopomofo", "3108",
- "fcircle", "24D5",
- "fdotaccent", "1E1F",
- "feharabic", "0641",
- "feharmenian", "0586",
- "fehfinalarabic", "FED2",
- "fehinitialarabic", "FED3",
- "fehmedialarabic", "FED4",
- "feicoptic", "03E5",
- "female", "2640",
- "ff", "FB00",
- "ffi", "FB03",
- "ffl", "FB04",
- "fi", "FB01",
- "fifteencircle", "246E",
- "fifteenparen", "2482",
- "fifteenperiod", "2496",
- "figuredash", "2012",
- "filledbox", "25A0",
- "filledrect", "25AC",
- "finalkaf", "05DA",
- "finalkafdagesh", "FB3A",
- "finalkafdageshhebrew", "FB3A",
- "finalkafhebrew", "05DA",
- "finalkafqamats", "05DA_05B8",
- "finalkafqamatshebrew", "05DA_05B8",
- "finalkafsheva", "05DA_05B0",
- "finalkafshevahebrew", "05DA_05B0",
- "finalmem", "05DD",
- "finalmemhebrew", "05DD",
- "finalnun", "05DF",
- "finalnunhebrew", "05DF",
- "finalpe", "05E3",
- "finalpehebrew", "05E3",
- "finaltsadi", "05E5",
- "finaltsadihebrew", "05E5",
- "firsttonechinese", "02C9",
- "fisheye", "25C9",
- "fitacyrillic", "0473",
- "five", "0035",
- "fivearabic", "0665",
- "fivebengali", "09EB",
- "fivecircle", "2464",
- "fivecircleinversesansserif", "278E",
- "fivedeva", "096B",
- "fiveeighths", "215D",
- "fivegujarati", "0AEB",
- "fivegurmukhi", "0A6B",
- "fivehackarabic", "0665",
- "fivehangzhou", "3025",
- "fiveideographicparen", "3224",
- "fiveinferior", "2085",
- "fivemonospace", "FF15",
- "fiveparen", "2478",
- "fiveperiod", "248C",
- "fivepersian", "06F5",
- "fiveroman", "2174",
- "fivesuperior", "2075",
- "fivethai", "0E55",
- "fl", "FB02",
- "florin", "0192",
- "fmonospace", "FF46",
- "fmsquare", "3399",
- "fofanthai", "0E1F",
- "fofathai", "0E1D",
- "fongmanthai", "0E4F",
- "forall", "2200",
- "four", "0034",
- "fourarabic", "0664",
- "fourbengali", "09EA",
- "fourcircle", "2463",
- "fourcircleinversesansserif", "278D",
- "fourdeva", "096A",
- "fourgujarati", "0AEA",
- "fourgurmukhi", "0A6A",
- "fourhackarabic", "0664",
- "fourhangzhou", "3024",
- "fourideographicparen", "3223",
- "fourinferior", "2084",
- "fourmonospace", "FF14",
- "fournumeratorbengali", "09F7",
- "fourparen", "2477",
- "fourperiod", "248B",
- "fourpersian", "06F4",
- "fourroman", "2173",
- "foursuperior", "2074",
- "fourteencircle", "246D",
- "fourteenparen", "2481",
- "fourteenperiod", "2495",
- "fourthai", "0E54",
- "fourthtonechinese", "02CB",
- "fparen", "24A1",
- "fraction", "2044",
- "franc", "20A3",
- "g", "0067",
- "gabengali", "0997",
- "gacute", "01F5",
- "gadeva", "0917",
- "gafarabic", "06AF",
- "gaffinalarabic", "FB93",
- "gafinitialarabic", "FB94",
- "gafmedialarabic", "FB95",
- "gagujarati", "0A97",
- "gagurmukhi", "0A17",
- "gahiragana", "304C",
- "gakatakana", "30AC",
- "gamma", "03B3",
- "gammalatinsmall", "0263",
- "gammasuperior", "02E0",
- "gangiacoptic", "03EB",
- "gbopomofo", "310D",
- "gbreve", "011F",
- "gcaron", "01E7",
- "gcedilla", "0123",
- "gcircle", "24D6",
- "gcircumflex", "011D",
- "gcommaaccent", "0123",
- "gdot", "0121",
- "gdotaccent", "0121",
- "gecyrillic", "0433",
- "gehiragana", "3052",
- "gekatakana", "30B2",
- "geometricallyequal", "2251",
- "gereshaccenthebrew", "059C",
- "gereshhebrew", "05F3",
- "gereshmuqdamhebrew", "059D",
- "germandbls", "00DF",
- "gershayimaccenthebrew", "059E",
- "gershayimhebrew", "05F4",
- "getamark", "3013",
- "ghabengali", "0998",
- "ghadarmenian", "0572",
- "ghadeva", "0918",
- "ghagujarati", "0A98",
- "ghagurmukhi", "0A18",
- "ghainarabic", "063A",
- "ghainfinalarabic", "FECE",
- "ghaininitialarabic", "FECF",
- "ghainmedialarabic", "FED0",
- "ghemiddlehookcyrillic", "0495",
- "ghestrokecyrillic", "0493",
- "gheupturncyrillic", "0491",
- "ghhadeva", "095A",
- "ghhagurmukhi", "0A5A",
- "ghook", "0260",
- "ghzsquare", "3393",
- "gihiragana", "304E",
- "gikatakana", "30AE",
- "gimarmenian", "0563",
- "gimel", "05D2",
- "gimeldagesh", "FB32",
- "gimeldageshhebrew", "FB32",
- "gimelhebrew", "05D2",
- "gjecyrillic", "0453",
- "glottalinvertedstroke", "01BE",
- "glottalstop", "0294",
- "glottalstopinverted", "0296",
- "glottalstopmod", "02C0",
- "glottalstopreversed", "0295",
- "glottalstopreversedmod", "02C1",
- "glottalstopreversedsuperior", "02E4",
- "glottalstopstroke", "02A1",
- "glottalstopstrokereversed", "02A2",
- "gmacron", "1E21",
- "gmonospace", "FF47",
- "gohiragana", "3054",
- "gokatakana", "30B4",
- "gparen", "24A2",
- "gpasquare", "33AC",
- "gradient", "2207",
- "grave", "0060",
- "gravebelowcmb", "0316",
- "gravecmb", "0300",
- "gravecomb", "0300",
- "gravedeva", "0953",
- "gravelowmod", "02CE",
- "gravemonospace", "FF40",
- "gravetonecmb", "0340",
- "greater", "003E",
- "greaterequal", "2265",
- "greaterequalorless", "22DB",
- "greatermonospace", "FF1E",
- "greaterorequivalent", "2273",
- "greaterorless", "2277",
- "greateroverequal", "2267",
- "greatersmall", "FE65",
- "gscript", "0261",
- "gstroke", "01E5",
- "guhiragana", "3050",
- "guillemotleft", "00AB",
- "guillemotright", "00BB",
- "guilsinglleft", "2039",
- "guilsinglright", "203A",
- "gukatakana", "30B0",
- "guramusquare", "3318",
- "gysquare", "33C9",
- "h", "0068",
- "haabkhasiancyrillic", "04A9",
- "haaltonearabic", "06C1",
- "habengali", "09B9",
- "hadescendercyrillic", "04B3",
- "hadeva", "0939",
- "hagujarati", "0AB9",
- "hagurmukhi", "0A39",
- "haharabic", "062D",
- "hahfinalarabic", "FEA2",
- "hahinitialarabic", "FEA3",
- "hahiragana", "306F",
- "hahmedialarabic", "FEA4",
- "haitusquare", "332A",
- "hakatakana", "30CF",
- "hakatakanahalfwidth", "FF8A",
- "halantgurmukhi", "0A4D",
- "hamzaarabic", "0621",
- "hamzadammaarabic", "0621_064F",
- "hamzadammatanarabic", "0621_064C",
- "hamzafathaarabic", "0621_064E",
- "hamzafathatanarabic", "0621_064B",
- "hamzalowarabic", "0621",
- "hamzalowkasraarabic", "0621_0650",
- "hamzalowkasratanarabic", "0621_064D",
- "hamzasukunarabic", "0621_0652",
- "hangulfiller", "3164",
- "hardsigncyrillic", "044A",
- "harpoonleftbarbup", "21BC",
- "harpoonrightbarbup", "21C0",
- "hasquare", "33CA",
- "hatafpatah", "05B2",
- "hatafpatah16", "05B2",
- "hatafpatah23", "05B2",
- "hatafpatah2f", "05B2",
- "hatafpatahhebrew", "05B2",
- "hatafpatahnarrowhebrew", "05B2",
- "hatafpatahquarterhebrew", "05B2",
- "hatafpatahwidehebrew", "05B2",
- "hatafqamats", "05B3",
- "hatafqamats1b", "05B3",
- "hatafqamats28", "05B3",
- "hatafqamats34", "05B3",
- "hatafqamatshebrew", "05B3",
- "hatafqamatsnarrowhebrew", "05B3",
- "hatafqamatsquarterhebrew", "05B3",
- "hatafqamatswidehebrew", "05B3",
- "hatafsegol", "05B1",
- "hatafsegol17", "05B1",
- "hatafsegol24", "05B1",
- "hatafsegol30", "05B1",
- "hatafsegolhebrew", "05B1",
- "hatafsegolnarrowhebrew", "05B1",
- "hatafsegolquarterhebrew", "05B1",
- "hatafsegolwidehebrew", "05B1",
- "hbar", "0127",
- "hbopomofo", "310F",
- "hbrevebelow", "1E2B",
- "hcedilla", "1E29",
- "hcircle", "24D7",
- "hcircumflex", "0125",
- "hdieresis", "1E27",
- "hdotaccent", "1E23",
- "hdotbelow", "1E25",
- "he", "05D4",
- "heart", "2665",
- "heartsuitblack", "2665",
- "heartsuitwhite", "2661",
- "hedagesh", "FB34",
- "hedageshhebrew", "FB34",
- "hehaltonearabic", "06C1",
- "heharabic", "0647",
- "hehebrew", "05D4",
- "hehfinalaltonearabic", "FBA7",
- "hehfinalalttwoarabic", "FEEA",
- "hehfinalarabic", "FEEA",
- "hehhamzaabovefinalarabic", "FBA5",
- "hehhamzaaboveisolatedarabic", "FBA4",
- "hehinitialaltonearabic", "FBA8",
- "hehinitialarabic", "FEEB",
- "hehiragana", "3078",
- "hehmedialaltonearabic", "FBA9",
- "hehmedialarabic", "FEEC",
- "heiseierasquare", "337B",
- "hekatakana", "30D8",
- "hekatakanahalfwidth", "FF8D",
- "hekutaarusquare", "3336",
- "henghook", "0267",
- "herutusquare", "3339",
- "het", "05D7",
- "hethebrew", "05D7",
- "hhook", "0266",
- "hhooksuperior", "02B1",
- "hieuhacirclekorean", "327B",
- "hieuhaparenkorean", "321B",
- "hieuhcirclekorean", "326D",
- "hieuhkorean", "314E",
- "hieuhparenkorean", "320D",
- "hihiragana", "3072",
- "hikatakana", "30D2",
- "hikatakanahalfwidth", "FF8B",
- "hiriq", "05B4",
- "hiriq14", "05B4",
- "hiriq21", "05B4",
- "hiriq2d", "05B4",
- "hiriqhebrew", "05B4",
- "hiriqnarrowhebrew", "05B4",
- "hiriqquarterhebrew", "05B4",
- "hiriqwidehebrew", "05B4",
- "hlinebelow", "1E96",
- "hmonospace", "FF48",
- "hoarmenian", "0570",
- "hohipthai", "0E2B",
- "hohiragana", "307B",
- "hokatakana", "30DB",
- "hokatakanahalfwidth", "FF8E",
- "holam", "05B9",
- "holam19", "05B9",
- "holam26", "05B9",
- "holam32", "05B9",
- "holamhebrew", "05B9",
- "holamnarrowhebrew", "05B9",
- "holamquarterhebrew", "05B9",
- "holamwidehebrew", "05B9",
- "honokhukthai", "0E2E",
- "hookabovecomb", "0309",
- "hookcmb", "0309",
- "hookpalatalizedbelowcmb", "0321",
- "hookretroflexbelowcmb", "0322",
- "hoonsquare", "3342",
- "horicoptic", "03E9",
- "horizontalbar", "2015",
- "horncmb", "031B",
- "hotsprings", "2668",
- "house", "2302",
- "hparen", "24A3",
- "hsuperior", "02B0",
- "hturned", "0265",
- "huhiragana", "3075",
- "huiitosquare", "3333",
- "hukatakana", "30D5",
- "hukatakanahalfwidth", "FF8C",
- "hungarumlaut", "02DD",
- "hungarumlautcmb", "030B",
- "hv", "0195",
- "hyphen", "002D",
- "hyphenmonospace", "FF0D",
- "hyphensmall", "FE63",
- "hyphentwo", "2010",
- "i", "0069",
- "iacute", "00ED",
- "iacyrillic", "044F",
- "ibengali", "0987",
- "ibopomofo", "3127",
- "ibreve", "012D",
- "icaron", "01D0",
- "icircle", "24D8",
- "icircumflex", "00EE",
- "icyrillic", "0456",
- "idblgrave", "0209",
- "ideographearthcircle", "328F",
- "ideographfirecircle", "328B",
- "ideographicallianceparen", "323F",
- "ideographiccallparen", "323A",
- "ideographiccentrecircle", "32A5",
- "ideographicclose", "3006",
- "ideographiccomma", "3001",
- "ideographiccommaleft", "FF64",
- "ideographiccongratulationparen", "3237",
- "ideographiccorrectcircle", "32A3",
- "ideographicearthparen", "322F",
- "ideographicenterpriseparen", "323D",
- "ideographicexcellentcircle", "329D",
- "ideographicfestivalparen", "3240",
- "ideographicfinancialcircle", "3296",
- "ideographicfinancialparen", "3236",
- "ideographicfireparen", "322B",
- "ideographichaveparen", "3232",
- "ideographichighcircle", "32A4",
- "ideographiciterationmark", "3005",
- "ideographiclaborcircle", "3298",
- "ideographiclaborparen", "3238",
- "ideographicleftcircle", "32A7",
- "ideographiclowcircle", "32A6",
- "ideographicmedicinecircle", "32A9",
- "ideographicmetalparen", "322E",
- "ideographicmoonparen", "322A",
- "ideographicnameparen", "3234",
- "ideographicperiod", "3002",
- "ideographicprintcircle", "329E",
- "ideographicreachparen", "3243",
- "ideographicrepresentparen", "3239",
- "ideographicresourceparen", "323E",
- "ideographicrightcircle", "32A8",
- "ideographicsecretcircle", "3299",
- "ideographicselfparen", "3242",
- "ideographicsocietyparen", "3233",
- "ideographicspace", "3000",
- "ideographicspecialparen", "3235",
- "ideographicstockparen", "3231",
- "ideographicstudyparen", "323B",
- "ideographicsunparen", "3230",
- "ideographicsuperviseparen", "323C",
- "ideographicwaterparen", "322C",
- "ideographicwoodparen", "322D",
- "ideographiczero", "3007",
- "ideographmetalcircle", "328E",
- "ideographmooncircle", "328A",
- "ideographnamecircle", "3294",
- "ideographsuncircle", "3290",
- "ideographwatercircle", "328C",
- "ideographwoodcircle", "328D",
- "ideva", "0907",
- "idieresis", "00EF",
- "idieresisacute", "1E2F",
- "idieresiscyrillic", "04E5",
- "idotbelow", "1ECB",
- "iebrevecyrillic", "04D7",
- "iecyrillic", "0435",
- "ieungacirclekorean", "3275",
- "ieungaparenkorean", "3215",
- "ieungcirclekorean", "3267",
- "ieungkorean", "3147",
- "ieungparenkorean", "3207",
- "igrave", "00EC",
- "igujarati", "0A87",
- "igurmukhi", "0A07",
- "ihiragana", "3044",
- "ihookabove", "1EC9",
- "iibengali", "0988",
- "iicyrillic", "0438",
- "iideva", "0908",
- "iigujarati", "0A88",
- "iigurmukhi", "0A08",
- "iimatragurmukhi", "0A40",
- "iinvertedbreve", "020B",
- "iishortcyrillic", "0439",
- "iivowelsignbengali", "09C0",
- "iivowelsigndeva", "0940",
- "iivowelsigngujarati", "0AC0",
- "ij", "0133",
- "ikatakana", "30A4",
- "ikatakanahalfwidth", "FF72",
- "ikorean", "3163",
- "ilde", "02DC",
- "iluyhebrew", "05AC",
- "imacron", "012B",
- "imacroncyrillic", "04E3",
- "imageorapproximatelyequal", "2253",
- "imatragurmukhi", "0A3F",
- "imonospace", "FF49",
- "increment", "2206",
- "infinity", "221E",
- "iniarmenian", "056B",
- "integral", "222B",
- "integralbottom", "2321",
- "integralbt", "2321",
- "integraltop", "2320",
- "integraltp", "2320",
- "intersection", "2229",
- "intisquare", "3305",
- "invbullet", "25D8",
- "invcircle", "25D9",
- "invsmileface", "263B",
- "iocyrillic", "0451",
- "iogonek", "012F",
- "iota", "03B9",
- "iotadieresis", "03CA",
- "iotadieresistonos", "0390",
- "iotalatin", "0269",
- "iotatonos", "03AF",
- "iparen", "24A4",
- "irigurmukhi", "0A72",
- "ismallhiragana", "3043",
- "ismallkatakana", "30A3",
- "ismallkatakanahalfwidth", "FF68",
- "issharbengali", "09FA",
- "istroke", "0268",
- "iterationhiragana", "309D",
- "iterationkatakana", "30FD",
- "itilde", "0129",
- "itildebelow", "1E2D",
- "iubopomofo", "3129",
- "iucyrillic", "044E",
- "ivowelsignbengali", "09BF",
- "ivowelsigndeva", "093F",
- "ivowelsigngujarati", "0ABF",
- "izhitsacyrillic", "0475",
- "izhitsadblgravecyrillic", "0477",
- "j", "006A",
- "jaarmenian", "0571",
- "jabengali", "099C",
- "jadeva", "091C",
- "jagujarati", "0A9C",
- "jagurmukhi", "0A1C",
- "jbopomofo", "3110",
- "jcaron", "01F0",
- "jcircle", "24D9",
- "jcircumflex", "0135",
- "jcrossedtail", "029D",
- "jdotlessstroke", "025F",
- "jecyrillic", "0458",
- "jeemarabic", "062C",
- "jeemfinalarabic", "FE9E",
- "jeeminitialarabic", "FE9F",
- "jeemmedialarabic", "FEA0",
- "jeharabic", "0698",
- "jehfinalarabic", "FB8B",
- "jhabengali", "099D",
- "jhadeva", "091D",
- "jhagujarati", "0A9D",
- "jhagurmukhi", "0A1D",
- "jheharmenian", "057B",
- "jis", "3004",
- "jmonospace", "FF4A",
- "jparen", "24A5",
- "jsuperior", "02B2",
- "k", "006B",
- "kabashkircyrillic", "04A1",
- "kabengali", "0995",
- "kacute", "1E31",
- "kacyrillic", "043A",
- "kadescendercyrillic", "049B",
- "kadeva", "0915",
- "kaf", "05DB",
- "kafarabic", "0643",
- "kafdagesh", "FB3B",
- "kafdageshhebrew", "FB3B",
- "kaffinalarabic", "FEDA",
- "kafhebrew", "05DB",
- "kafinitialarabic", "FEDB",
- "kafmedialarabic", "FEDC",
- "kafrafehebrew", "FB4D",
- "kagujarati", "0A95",
- "kagurmukhi", "0A15",
- "kahiragana", "304B",
- "kahookcyrillic", "04C4",
- "kakatakana", "30AB",
- "kakatakanahalfwidth", "FF76",
- "kappa", "03BA",
- "kappasymbolgreek", "03F0",
- "kapyeounmieumkorean", "3171",
- "kapyeounphieuphkorean", "3184",
- "kapyeounpieupkorean", "3178",
- "kapyeounssangpieupkorean", "3179",
- "karoriisquare", "330D",
- "kashidaautoarabic", "0640",
- "kashidaautonosidebearingarabic", "0640",
- "kasmallkatakana", "30F5",
- "kasquare", "3384",
- "kasraarabic", "0650",
- "kasratanarabic", "064D",
- "kastrokecyrillic", "049F",
- "katahiraprolongmarkhalfwidth", "FF70",
- "kaverticalstrokecyrillic", "049D",
- "kbopomofo", "310E",
- "kcalsquare", "3389",
- "kcaron", "01E9",
- "kcedilla", "0137",
- "kcircle", "24DA",
- "kcommaaccent", "0137",
- "kdotbelow", "1E33",
- "keharmenian", "0584",
- "kehiragana", "3051",
- "kekatakana", "30B1",
- "kekatakanahalfwidth", "FF79",
- "kenarmenian", "056F",
- "kesmallkatakana", "30F6",
- "kgreenlandic", "0138",
- "khabengali", "0996",
- "khacyrillic", "0445",
- "khadeva", "0916",
- "khagujarati", "0A96",
- "khagurmukhi", "0A16",
- "khaharabic", "062E",
- "khahfinalarabic", "FEA6",
- "khahinitialarabic", "FEA7",
- "khahmedialarabic", "FEA8",
- "kheicoptic", "03E7",
- "khhadeva", "0959",
- "khhagurmukhi", "0A59",
- "khieukhacirclekorean", "3278",
- "khieukhaparenkorean", "3218",
- "khieukhcirclekorean", "326A",
- "khieukhkorean", "314B",
- "khieukhparenkorean", "320A",
- "khokhaithai", "0E02",
- "khokhonthai", "0E05",
- "khokhuatthai", "0E03",
- "khokhwaithai", "0E04",
- "khomutthai", "0E5B",
- "khook", "0199",
- "khorakhangthai", "0E06",
- "khzsquare", "3391",
- "kihiragana", "304D",
- "kikatakana", "30AD",
- "kikatakanahalfwidth", "FF77",
- "kiroguramusquare", "3315",
- "kiromeetorusquare", "3316",
- "kirosquare", "3314",
- "kiyeokacirclekorean", "326E",
- "kiyeokaparenkorean", "320E",
- "kiyeokcirclekorean", "3260",
- "kiyeokkorean", "3131",
- "kiyeokparenkorean", "3200",
- "kiyeoksioskorean", "3133",
- "kjecyrillic", "045C",
- "klinebelow", "1E35",
- "klsquare", "3398",
- "kmcubedsquare", "33A6",
- "kmonospace", "FF4B",
- "kmsquaredsquare", "33A2",
- "kohiragana", "3053",
- "kohmsquare", "33C0",
- "kokaithai", "0E01",
- "kokatakana", "30B3",
- "kokatakanahalfwidth", "FF7A",
- "kooposquare", "331E",
- "koppacyrillic", "0481",
- "koreanstandardsymbol", "327F",
- "koroniscmb", "0343",
- "kparen", "24A6",
- "kpasquare", "33AA",
- "ksicyrillic", "046F",
- "ktsquare", "33CF",
- "kturned", "029E",
- "kuhiragana", "304F",
- "kukatakana", "30AF",
- "kukatakanahalfwidth", "FF78",
- "kvsquare", "33B8",
- "kwsquare", "33BE",
- "l", "006C",
- "labengali", "09B2",
- "lacute", "013A",
- "ladeva", "0932",
- "lagujarati", "0AB2",
- "lagurmukhi", "0A32",
- "lakkhangyaothai", "0E45",
- "lamaleffinalarabic", "FEFC",
- "lamalefhamzaabovefinalarabic", "FEF8",
- "lamalefhamzaaboveisolatedarabic", "FEF7",
- "lamalefhamzabelowfinalarabic", "FEFA",
- "lamalefhamzabelowisolatedarabic", "FEF9",
- "lamalefisolatedarabic", "FEFB",
- "lamalefmaddaabovefinalarabic", "FEF6",
- "lamalefmaddaaboveisolatedarabic", "FEF5",
- "lamarabic", "0644",
- "lambda", "03BB",
- "lambdastroke", "019B",
- "lamed", "05DC",
- "lameddagesh", "FB3C",
- "lameddageshhebrew", "FB3C",
- "lamedhebrew", "05DC",
- "lamedholam", "05DC_05B9",
- "lamedholamdagesh", "05DC_05B9_05BC",
- "lamedholamdageshhebrew", "05DC_05B9_05BC",
- "lamedholamhebrew", "05DC_05B9",
- "lamfinalarabic", "FEDE",
- "lamhahinitialarabic", "FCCA",
- "laminitialarabic", "FEDF",
- "lamjeeminitialarabic", "FCC9",
- "lamkhahinitialarabic", "FCCB",
- "lamlamhehisolatedarabic", "FDF2",
- "lammedialarabic", "FEE0",
- "lammeemhahinitialarabic", "FD88",
- "lammeeminitialarabic", "FCCC",
- "lammeemjeeminitialarabic", "FEDF_FEE4_FEA0",
- "lammeemkhahinitialarabic", "FEDF_FEE4_FEA8",
- "largecircle", "25EF",
- "lbar", "019A",
- "lbelt", "026C",
- "lbopomofo", "310C",
- "lcaron", "013E",
- "lcedilla", "013C",
- "lcircle", "24DB",
- "lcircumflexbelow", "1E3D",
- "lcommaaccent", "013C",
- "ldot", "0140",
- "ldotaccent", "0140",
- "ldotbelow", "1E37",
- "ldotbelowmacron", "1E39",
- "leftangleabovecmb", "031A",
- "lefttackbelowcmb", "0318",
- "less", "003C",
- "lessequal", "2264",
- "lessequalorgreater", "22DA",
- "lessmonospace", "FF1C",
- "lessorequivalent", "2272",
- "lessorgreater", "2276",
- "lessoverequal", "2266",
- "lesssmall", "FE64",
- "lezh", "026E",
- "lfblock", "258C",
- "lhookretroflex", "026D",
- "lira", "20A4",
- "liwnarmenian", "056C",
- "lj", "01C9",
- "ljecyrillic", "0459",
- "lladeva", "0933",
- "llagujarati", "0AB3",
- "llinebelow", "1E3B",
- "llladeva", "0934",
- "llvocalicbengali", "09E1",
- "llvocalicdeva", "0961",
- "llvocalicvowelsignbengali", "09E3",
- "llvocalicvowelsigndeva", "0963",
- "lmiddletilde", "026B",
- "lmonospace", "FF4C",
- "lmsquare", "33D0",
- "lochulathai", "0E2C",
- "logicaland", "2227",
- "logicalnot", "00AC",
- "logicalnotreversed", "2310",
- "logicalor", "2228",
- "lolingthai", "0E25",
- "longs", "017F",
- "lowlinecenterline", "FE4E",
- "lowlinecmb", "0332",
- "lowlinedashed", "FE4D",
- "lozenge", "25CA",
- "lparen", "24A7",
- "lslash", "0142",
- "lsquare", "2113",
- "ltshade", "2591",
- "luthai", "0E26",
- "lvocalicbengali", "098C",
- "lvocalicdeva", "090C",
- "lvocalicvowelsignbengali", "09E2",
- "lvocalicvowelsigndeva", "0962",
- "lxsquare", "33D3",
- "m", "006D",
- "mabengali", "09AE",
- "macron", "00AF",
- "macronbelowcmb", "0331",
- "macroncmb", "0304",
- "macronlowmod", "02CD",
- "macronmonospace", "FFE3",
- "macute", "1E3F",
- "madeva", "092E",
- "magujarati", "0AAE",
- "magurmukhi", "0A2E",
- "mahapakhhebrew", "05A4",
- "mahapakhlefthebrew", "05A4",
- "mahiragana", "307E",
- "maichattawathai", "0E4B",
- "maiekthai", "0E48",
- "maihanakatthai", "0E31",
- "maitaikhuthai", "0E47",
- "maithothai", "0E49",
- "maitrithai", "0E4A",
- "maiyamokthai", "0E46",
- "makatakana", "30DE",
- "makatakanahalfwidth", "FF8F",
- "male", "2642",
- "mansyonsquare", "3347",
- "maqafhebrew", "05BE",
- "mars", "2642",
- "masoracirclehebrew", "05AF",
- "masquare", "3383",
- "mbopomofo", "3107",
- "mbsquare", "33D4",
- "mcircle", "24DC",
- "mcubedsquare", "33A5",
- "mdotaccent", "1E41",
- "mdotbelow", "1E43",
- "meemarabic", "0645",
- "meemfinalarabic", "FEE2",
- "meeminitialarabic", "FEE3",
- "meemmedialarabic", "FEE4",
- "meemmeeminitialarabic", "FCD1",
- "meemmeemisolatedarabic", "FC48",
- "meetorusquare", "334D",
- "mehiragana", "3081",
- "meizierasquare", "337E",
- "mekatakana", "30E1",
- "mekatakanahalfwidth", "FF92",
- "mem", "05DE",
- "memdagesh", "FB3E",
- "memdageshhebrew", "FB3E",
- "memhebrew", "05DE",
- "menarmenian", "0574",
- "merkhahebrew", "05A5",
- "merkhakefulahebrew", "05A6",
- "merkhakefulalefthebrew", "05A6",
- "merkhalefthebrew", "05A5",
- "mhook", "0271",
- "mhzsquare", "3392",
- "middledotkatakanahalfwidth", "FF65",
- "middot", "00B7",
- "mieumacirclekorean", "3272",
- "mieumaparenkorean", "3212",
- "mieumcirclekorean", "3264",
- "mieumkorean", "3141",
- "mieumpansioskorean", "3170",
- "mieumparenkorean", "3204",
- "mieumpieupkorean", "316E",
- "mieumsioskorean", "316F",
- "mihiragana", "307F",
- "mikatakana", "30DF",
- "mikatakanahalfwidth", "FF90",
- "minus", "2212",
- "minusbelowcmb", "0320",
- "minuscircle", "2296",
- "minusmod", "02D7",
- "minusplus", "2213",
- "minute", "2032",
- "miribaarusquare", "334A",
- "mirisquare", "3349",
- "mlonglegturned", "0270",
- "mlsquare", "3396",
- "mmcubedsquare", "33A3",
- "mmonospace", "FF4D",
- "mmsquaredsquare", "339F",
- "mohiragana", "3082",
- "mohmsquare", "33C1",
- "mokatakana", "30E2",
- "mokatakanahalfwidth", "FF93",
- "molsquare", "33D6",
- "momathai", "0E21",
- "moverssquare", "33A7",
- "moverssquaredsquare", "33A8",
- "mparen", "24A8",
- "mpasquare", "33AB",
- "mssquare", "33B3",
- "mturned", "026F",
- "mu", "00B5",
- "mu1", "00B5",
- "muasquare", "3382",
- "muchgreater", "226B",
- "muchless", "226A",
- "mufsquare", "338C",
- "mugreek", "03BC",
- "mugsquare", "338D",
- "muhiragana", "3080",
- "mukatakana", "30E0",
- "mukatakanahalfwidth", "FF91",
- "mulsquare", "3395",
- "multiply", "00D7",
- "mumsquare", "339B",
- "munahhebrew", "05A3",
- "munahlefthebrew", "05A3",
- "musicalnote", "266A",
- "musicalnotedbl", "266B",
- "musicflatsign", "266D",
- "musicsharpsign", "266F",
- "mussquare", "33B2",
- "muvsquare", "33B6",
- "muwsquare", "33BC",
- "mvmegasquare", "33B9",
- "mvsquare", "33B7",
- "mwmegasquare", "33BF",
- "mwsquare", "33BD",
- "n", "006E",
- "nabengali", "09A8",
- "nabla", "2207",
- "nacute", "0144",
- "nadeva", "0928",
- "nagujarati", "0AA8",
- "nagurmukhi", "0A28",
- "nahiragana", "306A",
- "nakatakana", "30CA",
- "nakatakanahalfwidth", "FF85",
- "napostrophe", "0149",
- "nasquare", "3381",
- "nbopomofo", "310B",
- "nbspace", "00A0",
- "ncaron", "0148",
- "ncedilla", "0146",
- "ncircle", "24DD",
- "ncircumflexbelow", "1E4B",
- "ncommaaccent", "0146",
- "ndotaccent", "1E45",
- "ndotbelow", "1E47",
- "nehiragana", "306D",
- "nekatakana", "30CD",
- "nekatakanahalfwidth", "FF88",
- "newsheqelsign", "20AA",
- "nfsquare", "338B",
- "ngabengali", "0999",
- "ngadeva", "0919",
- "ngagujarati", "0A99",
- "ngagurmukhi", "0A19",
- "ngonguthai", "0E07",
- "nhiragana", "3093",
- "nhookleft", "0272",
- "nhookretroflex", "0273",
- "nieunacirclekorean", "326F",
- "nieunaparenkorean", "320F",
- "nieuncieuckorean", "3135",
- "nieuncirclekorean", "3261",
- "nieunhieuhkorean", "3136",
- "nieunkorean", "3134",
- "nieunpansioskorean", "3168",
- "nieunparenkorean", "3201",
- "nieunsioskorean", "3167",
- "nieuntikeutkorean", "3166",
- "nihiragana", "306B",
- "nikatakana", "30CB",
- "nikatakanahalfwidth", "FF86",
- "nikhahitthai", "0E4D",
- "nine", "0039",
- "ninearabic", "0669",
- "ninebengali", "09EF",
- "ninecircle", "2468",
- "ninecircleinversesansserif", "2792",
- "ninedeva", "096F",
- "ninegujarati", "0AEF",
- "ninegurmukhi", "0A6F",
- "ninehackarabic", "0669",
- "ninehangzhou", "3029",
- "nineideographicparen", "3228",
- "nineinferior", "2089",
- "ninemonospace", "FF19",
- "nineparen", "247C",
- "nineperiod", "2490",
- "ninepersian", "06F9",
- "nineroman", "2178",
- "ninesuperior", "2079",
- "nineteencircle", "2472",
- "nineteenparen", "2486",
- "nineteenperiod", "249A",
- "ninethai", "0E59",
- "nj", "01CC",
- "njecyrillic", "045A",
- "nkatakana", "30F3",
- "nkatakanahalfwidth", "FF9D",
- "nlegrightlong", "019E",
- "nlinebelow", "1E49",
- "nmonospace", "FF4E",
- "nmsquare", "339A",
- "nnabengali", "09A3",
- "nnadeva", "0923",
- "nnagujarati", "0AA3",
- "nnagurmukhi", "0A23",
- "nnnadeva", "0929",
- "nohiragana", "306E",
- "nokatakana", "30CE",
- "nokatakanahalfwidth", "FF89",
- "nonbreakingspace", "00A0",
- "nonenthai", "0E13",
- "nonuthai", "0E19",
- "noonarabic", "0646",
- "noonfinalarabic", "FEE6",
- "noonghunnaarabic", "06BA",
- "noonghunnafinalarabic", "FB9F",
- "noonhehinitialarabic", "FEE7_FEEC",
- "nooninitialarabic", "FEE7",
- "noonjeeminitialarabic", "FCD2",
- "noonjeemisolatedarabic", "FC4B",
- "noonmedialarabic", "FEE8",
- "noonmeeminitialarabic", "FCD5",
- "noonmeemisolatedarabic", "FC4E",
- "noonnoonfinalarabic", "FC8D",
- "notcontains", "220C",
- "notelement", "2209",
- "notelementof", "2209",
- "notequal", "2260",
- "notgreater", "226F",
- "notgreaternorequal", "2271",
- "notgreaternorless", "2279",
- "notidentical", "2262",
- "notless", "226E",
- "notlessnorequal", "2270",
- "notparallel", "2226",
- "notprecedes", "2280",
- "notsubset", "2284",
- "notsucceeds", "2281",
- "notsuperset", "2285",
- "nowarmenian", "0576",
- "nparen", "24A9",
- "nssquare", "33B1",
- "nsuperior", "207F",
- "ntilde", "00F1",
- "nu", "03BD",
- "nuhiragana", "306C",
- "nukatakana", "30CC",
- "nukatakanahalfwidth", "FF87",
- "nuktabengali", "09BC",
- "nuktadeva", "093C",
- "nuktagujarati", "0ABC",
- "nuktagurmukhi", "0A3C",
- "numbersign", "0023",
- "numbersignmonospace", "FF03",
- "numbersignsmall", "FE5F",
- "numeralsigngreek", "0374",
- "numeralsignlowergreek", "0375",
- "numero", "2116",
- "nun", "05E0",
- "nundagesh", "FB40",
- "nundageshhebrew", "FB40",
- "nunhebrew", "05E0",
- "nvsquare", "33B5",
- "nwsquare", "33BB",
- "nyabengali", "099E",
- "nyadeva", "091E",
- "nyagujarati", "0A9E",
- "nyagurmukhi", "0A1E",
- "o", "006F",
- "oacute", "00F3",
- "oangthai", "0E2D",
- "obarred", "0275",
- "obarredcyrillic", "04E9",
- "obarreddieresiscyrillic", "04EB",
- "obengali", "0993",
- "obopomofo", "311B",
- "obreve", "014F",
- "ocandradeva", "0911",
- "ocandragujarati", "0A91",
- "ocandravowelsigndeva", "0949",
- "ocandravowelsigngujarati", "0AC9",
- "ocaron", "01D2",
- "ocircle", "24DE",
- "ocircumflex", "00F4",
- "ocircumflexacute", "1ED1",
- "ocircumflexdotbelow", "1ED9",
- "ocircumflexgrave", "1ED3",
- "ocircumflexhookabove", "1ED5",
- "ocircumflextilde", "1ED7",
- "ocyrillic", "043E",
- "odblacute", "0151",
- "odblgrave", "020D",
- "odeva", "0913",
- "odieresis", "00F6",
- "odieresiscyrillic", "04E7",
- "odotbelow", "1ECD",
- "oe", "0153",
- "oekorean", "315A",
- "ogonek", "02DB",
- "ogonekcmb", "0328",
- "ograve", "00F2",
- "ogujarati", "0A93",
- "oharmenian", "0585",
- "ohiragana", "304A",
- "ohookabove", "1ECF",
- "ohorn", "01A1",
- "ohornacute", "1EDB",
- "ohorndotbelow", "1EE3",
- "ohorngrave", "1EDD",
- "ohornhookabove", "1EDF",
- "ohorntilde", "1EE1",
- "ohungarumlaut", "0151",
- "oi", "01A3",
- "oinvertedbreve", "020F",
- "okatakana", "30AA",
- "okatakanahalfwidth", "FF75",
- "okorean", "3157",
- "olehebrew", "05AB",
- "omacron", "014D",
- "omacronacute", "1E53",
- "omacrongrave", "1E51",
- "omdeva", "0950",
- "omega", "03C9",
- "omega1", "03D6",
- "omegacyrillic", "0461",
- "omegalatinclosed", "0277",
- "omegaroundcyrillic", "047B",
- "omegatitlocyrillic", "047D",
- "omegatonos", "03CE",
- "omgujarati", "0AD0",
- "omicron", "03BF",
- "omicrontonos", "03CC",
- "omonospace", "FF4F",
- "one", "0031",
- "onearabic", "0661",
- "onebengali", "09E7",
- "onecircle", "2460",
- "onecircleinversesansserif", "278A",
- "onedeva", "0967",
- "onedotenleader", "2024",
- "oneeighth", "215B",
- "onegujarati", "0AE7",
- "onegurmukhi", "0A67",
- "onehackarabic", "0661",
- "onehalf", "00BD",
- "onehangzhou", "3021",
- "oneideographicparen", "3220",
- "oneinferior", "2081",
- "onemonospace", "FF11",
- "onenumeratorbengali", "09F4",
- "oneparen", "2474",
- "oneperiod", "2488",
- "onepersian", "06F1",
- "onequarter", "00BC",
- "oneroman", "2170",
- "onesuperior", "00B9",
- "onethai", "0E51",
- "onethird", "2153",
- "oogonek", "01EB",
- "oogonekmacron", "01ED",
- "oogurmukhi", "0A13",
- "oomatragurmukhi", "0A4B",
- "oopen", "0254",
- "oparen", "24AA",
- "openbullet", "25E6",
- "option", "2325",
- "ordfeminine", "00AA",
- "ordmasculine", "00BA",
- "orthogonal", "221F",
- "oshortdeva", "0912",
- "oshortvowelsigndeva", "094A",
- "oslash", "00F8",
- "oslashacute", "01FF",
- "osmallhiragana", "3049",
- "osmallkatakana", "30A9",
- "osmallkatakanahalfwidth", "FF6B",
- "ostrokeacute", "01FF",
- "otcyrillic", "047F",
- "otilde", "00F5",
- "otildeacute", "1E4D",
- "otildedieresis", "1E4F",
- "oubopomofo", "3121",
- "overline", "203E",
- "overlinecenterline", "FE4A",
- "overlinecmb", "0305",
- "overlinedashed", "FE49",
- "overlinedblwavy", "FE4C",
- "overlinewavy", "FE4B",
- "overscore", "00AF",
- "ovowelsignbengali", "09CB",
- "ovowelsigndeva", "094B",
- "ovowelsigngujarati", "0ACB",
- "p", "0070",
- "paampssquare", "3380",
- "paasentosquare", "332B",
- "pabengali", "09AA",
- "pacute", "1E55",
- "padeva", "092A",
- "pagedown", "21DF",
- "pageup", "21DE",
- "pagujarati", "0AAA",
- "pagurmukhi", "0A2A",
- "pahiragana", "3071",
- "paiyannoithai", "0E2F",
- "pakatakana", "30D1",
- "palatalizationcyrilliccmb", "0484",
- "palochkacyrillic", "04C0",
- "pansioskorean", "317F",
- "paragraph", "00B6",
- "parallel", "2225",
- "parenleft", "0028",
- "parenleftaltonearabic", "FD3E",
- "parenleftinferior", "208D",
- "parenleftmonospace", "FF08",
- "parenleftsmall", "FE59",
- "parenleftsuperior", "207D",
- "parenleftvertical", "FE35",
- "parenright", "0029",
- "parenrightaltonearabic", "FD3F",
- "parenrightinferior", "208E",
- "parenrightmonospace", "FF09",
- "parenrightsmall", "FE5A",
- "parenrightsuperior", "207E",
- "parenrightvertical", "FE36",
- "partialdiff", "2202",
- "paseqhebrew", "05C0",
- "pashtahebrew", "0599",
- "pasquare", "33A9",
- "patah", "05B7",
- "patah11", "05B7",
- "patah1d", "05B7",
- "patah2a", "05B7",
- "patahhebrew", "05B7",
- "patahnarrowhebrew", "05B7",
- "patahquarterhebrew", "05B7",
- "patahwidehebrew", "05B7",
- "pazerhebrew", "05A1",
- "pbopomofo", "3106",
- "pcircle", "24DF",
- "pdotaccent", "1E57",
- "pe", "05E4",
- "pecyrillic", "043F",
- "pedagesh", "FB44",
- "pedageshhebrew", "FB44",
- "peezisquare", "333B",
- "pefinaldageshhebrew", "FB43",
- "peharabic", "067E",
- "peharmenian", "057A",
- "pehebrew", "05E4",
- "pehfinalarabic", "FB57",
- "pehinitialarabic", "FB58",
- "pehiragana", "307A",
- "pehmedialarabic", "FB59",
- "pekatakana", "30DA",
- "pemiddlehookcyrillic", "04A7",
- "perafehebrew", "FB4E",
- "percent", "0025",
- "percentarabic", "066A",
- "percentmonospace", "FF05",
- "percentsmall", "FE6A",
- "period", "002E",
- "periodarmenian", "0589",
- "periodcentered", "00B7",
- "periodhalfwidth", "FF61",
- "periodmonospace", "FF0E",
- "periodsmall", "FE52",
- "perispomenigreekcmb", "0342",
- "perpendicular", "22A5",
- "perthousand", "2030",
- "peseta", "20A7",
- "pfsquare", "338A",
- "phabengali", "09AB",
- "phadeva", "092B",
- "phagujarati", "0AAB",
- "phagurmukhi", "0A2B",
- "phi", "03C6",
- "phi1", "03D5",
- "phieuphacirclekorean", "327A",
- "phieuphaparenkorean", "321A",
- "phieuphcirclekorean", "326C",
- "phieuphkorean", "314D",
- "phieuphparenkorean", "320C",
- "philatin", "0278",
- "phinthuthai", "0E3A",
- "phisymbolgreek", "03D5",
- "phook", "01A5",
- "phophanthai", "0E1E",
- "phophungthai", "0E1C",
- "phosamphaothai", "0E20",
- "pi", "03C0",
- "pieupacirclekorean", "3273",
- "pieupaparenkorean", "3213",
- "pieupcieuckorean", "3176",
- "pieupcirclekorean", "3265",
- "pieupkiyeokkorean", "3172",
- "pieupkorean", "3142",
- "pieupparenkorean", "3205",
- "pieupsioskiyeokkorean", "3174",
- "pieupsioskorean", "3144",
- "pieupsiostikeutkorean", "3175",
- "pieupthieuthkorean", "3177",
- "pieuptikeutkorean", "3173",
- "pihiragana", "3074",
- "pikatakana", "30D4",
- "pisymbolgreek", "03D6",
- "piwrarmenian", "0583",
- "plus", "002B",
- "plusbelowcmb", "031F",
- "pluscircle", "2295",
- "plusminus", "00B1",
- "plusmod", "02D6",
- "plusmonospace", "FF0B",
- "plussmall", "FE62",
- "plussuperior", "207A",
- "pmonospace", "FF50",
- "pmsquare", "33D8",
- "pohiragana", "307D",
- "pointingindexdownwhite", "261F",
- "pointingindexleftwhite", "261C",
- "pointingindexrightwhite", "261E",
- "pointingindexupwhite", "261D",
- "pokatakana", "30DD",
- "poplathai", "0E1B",
- "postalmark", "3012",
- "postalmarkface", "3020",
- "pparen", "24AB",
- "precedes", "227A",
- "prescription", "211E",
- "primemod", "02B9",
- "primereversed", "2035",
- "product", "220F",
- "projective", "2305",
- "prolongedkana", "30FC",
- "propellor", "2318",
- "propersubset", "2282",
- "propersuperset", "2283",
- "proportion", "2237",
- "proportional", "221D",
- "psi", "03C8",
- "psicyrillic", "0471",
- "psilipneumatacyrilliccmb", "0486",
- "pssquare", "33B0",
- "puhiragana", "3077",
- "pukatakana", "30D7",
- "pvsquare", "33B4",
- "pwsquare", "33BA",
- "q", "0071",
- "qadeva", "0958",
- "qadmahebrew", "05A8",
- "qafarabic", "0642",
- "qaffinalarabic", "FED6",
- "qafinitialarabic", "FED7",
- "qafmedialarabic", "FED8",
- "qamats", "05B8",
- "qamats10", "05B8",
- "qamats1a", "05B8",
- "qamats1c", "05B8",
- "qamats27", "05B8",
- "qamats29", "05B8",
- "qamats33", "05B8",
- "qamatsde", "05B8",
- "qamatshebrew", "05B8",
- "qamatsnarrowhebrew", "05B8",
- "qamatsqatanhebrew", "05B8",
- "qamatsqatannarrowhebrew", "05B8",
- "qamatsqatanquarterhebrew", "05B8",
- "qamatsqatanwidehebrew", "05B8",
- "qamatsquarterhebrew", "05B8",
- "qamatswidehebrew", "05B8",
- "qarneyparahebrew", "059F",
- "qbopomofo", "3111",
- "qcircle", "24E0",
- "qhook", "02A0",
- "qmonospace", "FF51",
- "qof", "05E7",
- "qofdagesh", "FB47",
- "qofdageshhebrew", "FB47",
- "qofhatafpatah", "05E7_05B2",
- "qofhatafpatahhebrew", "05E7_05B2",
- "qofhatafsegol", "05E7_05B1",
- "qofhatafsegolhebrew", "05E7_05B1",
- "qofhebrew", "05E7",
- "qofhiriq", "05E7_05B4",
- "qofhiriqhebrew", "05E7_05B4",
- "qofholam", "05E7_05B9",
- "qofholamhebrew", "05E7_05B9",
- "qofpatah", "05E7_05B7",
- "qofpatahhebrew", "05E7_05B7",
- "qofqamats", "05E7_05B8",
- "qofqamatshebrew", "05E7_05B8",
- "qofqubuts", "05E7_05BB",
- "qofqubutshebrew", "05E7_05BB",
- "qofsegol", "05E7_05B6",
- "qofsegolhebrew", "05E7_05B6",
- "qofsheva", "05E7_05B0",
- "qofshevahebrew", "05E7_05B0",
- "qoftsere", "05E7_05B5",
- "qoftserehebrew", "05E7_05B5",
- "qparen", "24AC",
- "quarternote", "2669",
- "qubuts", "05BB",
- "qubuts18", "05BB",
- "qubuts25", "05BB",
- "qubuts31", "05BB",
- "qubutshebrew", "05BB",
- "qubutsnarrowhebrew", "05BB",
- "qubutsquarterhebrew", "05BB",
- "qubutswidehebrew", "05BB",
- "question", "003F",
- "questionarabic", "061F",
- "questionarmenian", "055E",
- "questiondown", "00BF",
- "questiongreek", "037E",
- "questionmonospace", "FF1F",
- "quotedbl", "0022",
- "quotedblbase", "201E",
- "quotedblleft", "201C",
- "quotedblmonospace", "FF02",
- "quotedblprime", "301E",
- "quotedblprimereversed", "301D",
- "quotedblright", "201D",
- "quoteleft", "2018",
- "quoteleftreversed", "201B",
- "quotereversed", "201B",
- "quoteright", "2019",
- "quoterightn", "0149",
- "quotesinglbase", "201A",
- "quotesingle", "0027",
- "quotesinglemonospace", "FF07",
- "r", "0072",
- "raarmenian", "057C",
- "rabengali", "09B0",
- "racute", "0155",
- "radeva", "0930",
- "radical", "221A",
- "radoverssquare", "33AE",
- "radoverssquaredsquare", "33AF",
- "radsquare", "33AD",
- "rafe", "05BF",
- "rafehebrew", "05BF",
- "ragujarati", "0AB0",
- "ragurmukhi", "0A30",
- "rahiragana", "3089",
- "rakatakana", "30E9",
- "rakatakanahalfwidth", "FF97",
- "ralowerdiagonalbengali", "09F1",
- "ramiddlediagonalbengali", "09F0",
- "ramshorn", "0264",
- "ratio", "2236",
- "rbopomofo", "3116",
- "rcaron", "0159",
- "rcedilla", "0157",
- "rcircle", "24E1",
- "rcommaaccent", "0157",
- "rdblgrave", "0211",
- "rdotaccent", "1E59",
- "rdotbelow", "1E5B",
- "rdotbelowmacron", "1E5D",
- "referencemark", "203B",
- "reflexsubset", "2286",
- "reflexsuperset", "2287",
- "registered", "00AE",
- "reharabic", "0631",
- "reharmenian", "0580",
- "rehfinalarabic", "FEAE",
- "rehiragana", "308C",
- "rehyehaleflamarabic", "0631_FEF3_FE8E_0644",
- "rekatakana", "30EC",
- "rekatakanahalfwidth", "FF9A",
- "resh", "05E8",
- "reshdageshhebrew", "FB48",
- "reshhatafpatah", "05E8_05B2",
- "reshhatafpatahhebrew", "05E8_05B2",
- "reshhatafsegol", "05E8_05B1",
- "reshhatafsegolhebrew", "05E8_05B1",
- "reshhebrew", "05E8",
- "reshhiriq", "05E8_05B4",
- "reshhiriqhebrew", "05E8_05B4",
- "reshholam", "05E8_05B9",
- "reshholamhebrew", "05E8_05B9",
- "reshpatah", "05E8_05B7",
- "reshpatahhebrew", "05E8_05B7",
- "reshqamats", "05E8_05B8",
- "reshqamatshebrew", "05E8_05B8",
- "reshqubuts", "05E8_05BB",
- "reshqubutshebrew", "05E8_05BB",
- "reshsegol", "05E8_05B6",
- "reshsegolhebrew", "05E8_05B6",
- "reshsheva", "05E8_05B0",
- "reshshevahebrew", "05E8_05B0",
- "reshtsere", "05E8_05B5",
- "reshtserehebrew", "05E8_05B5",
- "reversedtilde", "223D",
- "reviahebrew", "0597",
- "reviamugrashhebrew", "0597",
- "revlogicalnot", "2310",
- "rfishhook", "027E",
- "rfishhookreversed", "027F",
- "rhabengali", "09DD",
- "rhadeva", "095D",
- "rho", "03C1",
- "rhook", "027D",
- "rhookturned", "027B",
- "rhookturnedsuperior", "02B5",
- "rhosymbolgreek", "03F1",
- "rhotichookmod", "02DE",
- "rieulacirclekorean", "3271",
- "rieulaparenkorean", "3211",
- "rieulcirclekorean", "3263",
- "rieulhieuhkorean", "3140",
- "rieulkiyeokkorean", "313A",
- "rieulkiyeoksioskorean", "3169",
- "rieulkorean", "3139",
- "rieulmieumkorean", "313B",
- "rieulpansioskorean", "316C",
- "rieulparenkorean", "3203",
- "rieulphieuphkorean", "313F",
- "rieulpieupkorean", "313C",
- "rieulpieupsioskorean", "316B",
- "rieulsioskorean", "313D",
- "rieulthieuthkorean", "313E",
- "rieultikeutkorean", "316A",
- "rieulyeorinhieuhkorean", "316D",
- "rightangle", "221F",
- "righttackbelowcmb", "0319",
- "righttriangle", "22BF",
- "rihiragana", "308A",
- "rikatakana", "30EA",
- "rikatakanahalfwidth", "FF98",
- "ring", "02DA",
- "ringbelowcmb", "0325",
- "ringcmb", "030A",
- "ringhalfleft", "02BF",
- "ringhalfleftarmenian", "0559",
- "ringhalfleftbelowcmb", "031C",
- "ringhalfleftcentered", "02D3",
- "ringhalfright", "02BE",
- "ringhalfrightbelowcmb", "0339",
- "ringhalfrightcentered", "02D2",
- "rinvertedbreve", "0213",
- "rittorusquare", "3351",
- "rlinebelow", "1E5F",
- "rlongleg", "027C",
- "rlonglegturned", "027A",
- "rmonospace", "FF52",
- "rohiragana", "308D",
- "rokatakana", "30ED",
- "rokatakanahalfwidth", "FF9B",
- "roruathai", "0E23",
- "rparen", "24AD",
- "rrabengali", "09DC",
- "rradeva", "0931",
- "rragurmukhi", "0A5C",
- "rreharabic", "0691",
- "rrehfinalarabic", "FB8D",
- "rrvocalicbengali", "09E0",
- "rrvocalicdeva", "0960",
- "rrvocalicgujarati", "0AE0",
- "rrvocalicvowelsignbengali", "09C4",
- "rrvocalicvowelsigndeva", "0944",
- "rrvocalicvowelsigngujarati", "0AC4",
- "rtblock", "2590",
- "rturned", "0279",
- "rturnedsuperior", "02B4",
- "ruhiragana", "308B",
- "rukatakana", "30EB",
- "rukatakanahalfwidth", "FF99",
- "rupeemarkbengali", "09F2",
- "rupeesignbengali", "09F3",
- "ruthai", "0E24",
- "rvocalicbengali", "098B",
- "rvocalicdeva", "090B",
- "rvocalicgujarati", "0A8B",
- "rvocalicvowelsignbengali", "09C3",
- "rvocalicvowelsigndeva", "0943",
- "rvocalicvowelsigngujarati", "0AC3",
- "s", "0073",
- "sabengali", "09B8",
- "sacute", "015B",
- "sacutedotaccent", "1E65",
- "sadarabic", "0635",
- "sadeva", "0938",
- "sadfinalarabic", "FEBA",
- "sadinitialarabic", "FEBB",
- "sadmedialarabic", "FEBC",
- "sagujarati", "0AB8",
- "sagurmukhi", "0A38",
- "sahiragana", "3055",
- "sakatakana", "30B5",
- "sakatakanahalfwidth", "FF7B",
- "sallallahoualayhewasallamarabic", "FDFA",
- "samekh", "05E1",
- "samekhdagesh", "FB41",
- "samekhdageshhebrew", "FB41",
- "samekhhebrew", "05E1",
- "saraaathai", "0E32",
- "saraaethai", "0E41",
- "saraaimaimalaithai", "0E44",
- "saraaimaimuanthai", "0E43",
- "saraamthai", "0E33",
- "saraathai", "0E30",
- "saraethai", "0E40",
- "saraiithai", "0E35",
- "saraithai", "0E34",
- "saraothai", "0E42",
- "saraueethai", "0E37",
- "sarauethai", "0E36",
- "sarauthai", "0E38",
- "sarauuthai", "0E39",
- "sbopomofo", "3119",
- "scaron", "0161",
- "scarondotaccent", "1E67",
- "scedilla", "015F",
- "schwa", "0259",
- "schwacyrillic", "04D9",
- "schwadieresiscyrillic", "04DB",
- "schwahook", "025A",
- "scircle", "24E2",
- "scircumflex", "015D",
- "scommaaccent", "0219",
- "sdotaccent", "1E61",
- "sdotbelow", "1E63",
- "sdotbelowdotaccent", "1E69",
- "seagullbelowcmb", "033C",
- "second", "2033",
- "secondtonechinese", "02CA",
- "section", "00A7",
- "seenarabic", "0633",
- "seenfinalarabic", "FEB2",
- "seeninitialarabic", "FEB3",
- "seenmedialarabic", "FEB4",
- "segol", "05B6",
- "segol13", "05B6",
- "segol1f", "05B6",
- "segol2c", "05B6",
- "segolhebrew", "05B6",
- "segolnarrowhebrew", "05B6",
- "segolquarterhebrew", "05B6",
- "segoltahebrew", "0592",
- "segolwidehebrew", "05B6",
- "seharmenian", "057D",
- "sehiragana", "305B",
- "sekatakana", "30BB",
- "sekatakanahalfwidth", "FF7E",
- "semicolon", "003B",
- "semicolonarabic", "061B",
- "semicolonmonospace", "FF1B",
- "semicolonsmall", "FE54",
- "semivoicedmarkkana", "309C",
- "semivoicedmarkkanahalfwidth", "FF9F",
- "sentisquare", "3322",
- "sentosquare", "3323",
- "seven", "0037",
- "sevenarabic", "0667",
- "sevenbengali", "09ED",
- "sevencircle", "2466",
- "sevencircleinversesansserif", "2790",
- "sevendeva", "096D",
- "seveneighths", "215E",
- "sevengujarati", "0AED",
- "sevengurmukhi", "0A6D",
- "sevenhackarabic", "0667",
- "sevenhangzhou", "3027",
- "sevenideographicparen", "3226",
- "seveninferior", "2087",
- "sevenmonospace", "FF17",
- "sevenparen", "247A",
- "sevenperiod", "248E",
- "sevenpersian", "06F7",
- "sevenroman", "2176",
- "sevensuperior", "2077",
- "seventeencircle", "2470",
- "seventeenparen", "2484",
- "seventeenperiod", "2498",
- "seventhai", "0E57",
- "sfthyphen", "00AD",
- "shaarmenian", "0577",
- "shabengali", "09B6",
- "shacyrillic", "0448",
- "shaddaarabic", "0651",
- "shaddadammaarabic", "FC61",
- "shaddadammatanarabic", "FC5E",
- "shaddafathaarabic", "FC60",
- "shaddafathatanarabic", "0651_064B",
- "shaddakasraarabic", "FC62",
- "shaddakasratanarabic", "FC5F",
- "shade", "2592",
- "shadedark", "2593",
- "shadelight", "2591",
- "shademedium", "2592",
- "shadeva", "0936",
- "shagujarati", "0AB6",
- "shagurmukhi", "0A36",
- "shalshelethebrew", "0593",
- "shbopomofo", "3115",
- "shchacyrillic", "0449",
- "sheenarabic", "0634",
- "sheenfinalarabic", "FEB6",
- "sheeninitialarabic", "FEB7",
- "sheenmedialarabic", "FEB8",
- "sheicoptic", "03E3",
- "sheqel", "20AA",
- "sheqelhebrew", "20AA",
- "sheva", "05B0",
- "sheva115", "05B0",
- "sheva15", "05B0",
- "sheva22", "05B0",
- "sheva2e", "05B0",
- "shevahebrew", "05B0",
- "shevanarrowhebrew", "05B0",
- "shevaquarterhebrew", "05B0",
- "shevawidehebrew", "05B0",
- "shhacyrillic", "04BB",
- "shimacoptic", "03ED",
- "shin", "05E9",
- "shindagesh", "FB49",
- "shindageshhebrew", "FB49",
- "shindageshshindot", "FB2C",
- "shindageshshindothebrew", "FB2C",
- "shindageshsindot", "FB2D",
- "shindageshsindothebrew", "FB2D",
- "shindothebrew", "05C1",
- "shinhebrew", "05E9",
- "shinshindot", "FB2A",
- "shinshindothebrew", "FB2A",
- "shinsindot", "FB2B",
- "shinsindothebrew", "FB2B",
- "shook", "0282",
- "sigma", "03C3",
- "sigma1", "03C2",
- "sigmafinal", "03C2",
- "sigmalunatesymbolgreek", "03F2",
- "sihiragana", "3057",
- "sikatakana", "30B7",
- "sikatakanahalfwidth", "FF7C",
- "siluqhebrew", "05BD",
- "siluqlefthebrew", "05BD",
- "similar", "223C",
- "sindothebrew", "05C2",
- "siosacirclekorean", "3274",
- "siosaparenkorean", "3214",
- "sioscieuckorean", "317E",
- "sioscirclekorean", "3266",
- "sioskiyeokkorean", "317A",
- "sioskorean", "3145",
- "siosnieunkorean", "317B",
- "siosparenkorean", "3206",
- "siospieupkorean", "317D",
- "siostikeutkorean", "317C",
- "six", "0036",
- "sixarabic", "0666",
- "sixbengali", "09EC",
- "sixcircle", "2465",
- "sixcircleinversesansserif", "278F",
- "sixdeva", "096C",
- "sixgujarati", "0AEC",
- "sixgurmukhi", "0A6C",
- "sixhackarabic", "0666",
- "sixhangzhou", "3026",
- "sixideographicparen", "3225",
- "sixinferior", "2086",
- "sixmonospace", "FF16",
- "sixparen", "2479",
- "sixperiod", "248D",
- "sixpersian", "06F6",
- "sixroman", "2175",
- "sixsuperior", "2076",
- "sixteencircle", "246F",
- "sixteencurrencydenominatorbengali", "09F9",
- "sixteenparen", "2483",
- "sixteenperiod", "2497",
- "sixthai", "0E56",
- "slash", "002F",
- "slashmonospace", "FF0F",
- "slong", "017F",
- "slongdotaccent", "1E9B",
- "smileface", "263A",
- "smonospace", "FF53",
- "sofpasuqhebrew", "05C3",
- "softhyphen", "00AD",
- "softsigncyrillic", "044C",
- "sohiragana", "305D",
- "sokatakana", "30BD",
- "sokatakanahalfwidth", "FF7F",
- "soliduslongoverlaycmb", "0338",
- "solidusshortoverlaycmb", "0337",
- "sorusithai", "0E29",
- "sosalathai", "0E28",
- "sosothai", "0E0B",
- "sosuathai", "0E2A",
- "space", "0020",
- "spacehackarabic", "0020",
- "spade", "2660",
- "spadesuitblack", "2660",
- "spadesuitwhite", "2664",
- "sparen", "24AE",
- "squarebelowcmb", "033B",
- "squarecc", "33C4",
- "squarecm", "339D",
- "squarediagonalcrosshatchfill", "25A9",
- "squarehorizontalfill", "25A4",
- "squarekg", "338F",
- "squarekm", "339E",
- "squarekmcapital", "33CE",
- "squareln", "33D1",
- "squarelog", "33D2",
- "squaremg", "338E",
- "squaremil", "33D5",
- "squaremm", "339C",
- "squaremsquared", "33A1",
- "squareorthogonalcrosshatchfill", "25A6",
- "squareupperlefttolowerrightfill", "25A7",
- "squareupperrighttolowerleftfill", "25A8",
- "squareverticalfill", "25A5",
- "squarewhitewithsmallblack", "25A3",
- "srsquare", "33DB",
- "ssabengali", "09B7",
- "ssadeva", "0937",
- "ssagujarati", "0AB7",
- "ssangcieuckorean", "3149",
- "ssanghieuhkorean", "3185",
- "ssangieungkorean", "3180",
- "ssangkiyeokkorean", "3132",
- "ssangnieunkorean", "3165",
- "ssangpieupkorean", "3143",
- "ssangsioskorean", "3146",
- "ssangtikeutkorean", "3138",
- "sterling", "00A3",
- "sterlingmonospace", "FFE1",
- "strokelongoverlaycmb", "0336",
- "strokeshortoverlaycmb", "0335",
- "subset", "2282",
- "subsetnotequal", "228A",
- "subsetorequal", "2286",
- "succeeds", "227B",
- "suchthat", "220B",
- "suhiragana", "3059",
- "sukatakana", "30B9",
- "sukatakanahalfwidth", "FF7D",
- "sukunarabic", "0652",
- "summation", "2211",
- "sun", "263C",
- "superset", "2283",
- "supersetnotequal", "228B",
- "supersetorequal", "2287",
- "svsquare", "33DC",
- "syouwaerasquare", "337C",
- "t", "0074",
- "tabengali", "09A4",
- "tackdown", "22A4",
- "tackleft", "22A3",
- "tadeva", "0924",
- "tagujarati", "0AA4",
- "tagurmukhi", "0A24",
- "taharabic", "0637",
- "tahfinalarabic", "FEC2",
- "tahinitialarabic", "FEC3",
- "tahiragana", "305F",
- "tahmedialarabic", "FEC4",
- "taisyouerasquare", "337D",
- "takatakana", "30BF",
- "takatakanahalfwidth", "FF80",
- "tatweelarabic", "0640",
- "tau", "03C4",
- "tav", "05EA",
- "tavdages", "FB4A",
- "tavdagesh", "FB4A",
- "tavdageshhebrew", "FB4A",
- "tavhebrew", "05EA",
- "tbar", "0167",
- "tbopomofo", "310A",
- "tcaron", "0165",
- "tccurl", "02A8",
- "tcedilla", "0163",
- "tcheharabic", "0686",
- "tchehfinalarabic", "FB7B",
- "tchehinitialarabic", "FB7C",
- "tchehmedialarabic", "FB7D",
- "tchehmeeminitialarabic", "FB7C_FEE4",
- "tcircle", "24E3",
- "tcircumflexbelow", "1E71",
- "tcommaaccent", "0163",
- "tdieresis", "1E97",
- "tdotaccent", "1E6B",
- "tdotbelow", "1E6D",
- "tecyrillic", "0442",
- "tedescendercyrillic", "04AD",
- "teharabic", "062A",
- "tehfinalarabic", "FE96",
- "tehhahinitialarabic", "FCA2",
- "tehhahisolatedarabic", "FC0C",
- "tehinitialarabic", "FE97",
- "tehiragana", "3066",
- "tehjeeminitialarabic", "FCA1",
- "tehjeemisolatedarabic", "FC0B",
- "tehmarbutaarabic", "0629",
- "tehmarbutafinalarabic", "FE94",
- "tehmedialarabic", "FE98",
- "tehmeeminitialarabic", "FCA4",
- "tehmeemisolatedarabic", "FC0E",
- "tehnoonfinalarabic", "FC73",
- "tekatakana", "30C6",
- "tekatakanahalfwidth", "FF83",
- "telephone", "2121",
- "telephoneblack", "260E",
- "telishagedolahebrew", "05A0",
- "telishaqetanahebrew", "05A9",
- "tencircle", "2469",
- "tenideographicparen", "3229",
- "tenparen", "247D",
- "tenperiod", "2491",
- "tenroman", "2179",
- "tesh", "02A7",
- "tet", "05D8",
- "tetdagesh", "FB38",
- "tetdageshhebrew", "FB38",
- "tethebrew", "05D8",
- "tetsecyrillic", "04B5",
- "tevirhebrew", "059B",
- "tevirlefthebrew", "059B",
- "thabengali", "09A5",
- "thadeva", "0925",
- "thagujarati", "0AA5",
- "thagurmukhi", "0A25",
- "thalarabic", "0630",
- "thalfinalarabic", "FEAC",
- "thanthakhatthai", "0E4C",
- "theharabic", "062B",
- "thehfinalarabic", "FE9A",
- "thehinitialarabic", "FE9B",
- "thehmedialarabic", "FE9C",
- "thereexists", "2203",
- "therefore", "2234",
- "theta", "03B8",
- "theta1", "03D1",
- "thetasymbolgreek", "03D1",
- "thieuthacirclekorean", "3279",
- "thieuthaparenkorean", "3219",
- "thieuthcirclekorean", "326B",
- "thieuthkorean", "314C",
- "thieuthparenkorean", "320B",
- "thirteencircle", "246C",
- "thirteenparen", "2480",
- "thirteenperiod", "2494",
- "thonangmonthothai", "0E11",
- "thook", "01AD",
- "thophuthaothai", "0E12",
- "thorn", "00FE",
- "thothahanthai", "0E17",
- "thothanthai", "0E10",
- "thothongthai", "0E18",
- "thothungthai", "0E16",
- "thousandcyrillic", "0482",
- "thousandsseparatorarabic", "066C",
- "thousandsseparatorpersian", "066C",
- "three", "0033",
- "threearabic", "0663",
- "threebengali", "09E9",
- "threecircle", "2462",
- "threecircleinversesansserif", "278C",
- "threedeva", "0969",
- "threeeighths", "215C",
- "threegujarati", "0AE9",
- "threegurmukhi", "0A69",
- "threehackarabic", "0663",
- "threehangzhou", "3023",
- "threeideographicparen", "3222",
- "threeinferior", "2083",
- "threemonospace", "FF13",
- "threenumeratorbengali", "09F6",
- "threeparen", "2476",
- "threeperiod", "248A",
- "threepersian", "06F3",
- "threequarters", "00BE",
- "threeroman", "2172",
- "threesuperior", "00B3",
- "threethai", "0E53",
- "thzsquare", "3394",
- "tihiragana", "3061",
- "tikatakana", "30C1",
- "tikatakanahalfwidth", "FF81",
- "tikeutacirclekorean", "3270",
- "tikeutaparenkorean", "3210",
- "tikeutcirclekorean", "3262",
- "tikeutkorean", "3137",
- "tikeutparenkorean", "3202",
- "tilde", "02DC",
- "tildebelowcmb", "0330",
- "tildecmb", "0303",
- "tildecomb", "0303",
- "tildedoublecmb", "0360",
- "tildeoperator", "223C",
- "tildeoverlaycmb", "0334",
- "tildeverticalcmb", "033E",
- "timescircle", "2297",
- "tipehahebrew", "0596",
- "tipehalefthebrew", "0596",
- "tippigurmukhi", "0A70",
- "titlocyrilliccmb", "0483",
- "tiwnarmenian", "057F",
- "tlinebelow", "1E6F",
- "tmonospace", "FF54",
- "toarmenian", "0569",
- "tohiragana", "3068",
- "tokatakana", "30C8",
- "tokatakanahalfwidth", "FF84",
- "tonebarextrahighmod", "02E5",
- "tonebarextralowmod", "02E9",
- "tonebarhighmod", "02E6",
- "tonebarlowmod", "02E8",
- "tonebarmidmod", "02E7",
- "tonefive", "01BD",
- "tonesix", "0185",
- "tonetwo", "01A8",
- "tonos", "0384",
- "tonsquare", "3327",
- "topatakthai", "0E0F",
- "tortoiseshellbracketleft", "3014",
- "tortoiseshellbracketleftsmall", "FE5D",
- "tortoiseshellbracketleftvertical", "FE39",
- "tortoiseshellbracketright", "3015",
- "tortoiseshellbracketrightsmall", "FE5E",
- "tortoiseshellbracketrightvertical", "FE3A",
- "totaothai", "0E15",
- "tpalatalhook", "01AB",
- "tparen", "24AF",
- "trademark", "2122",
- "tretroflexhook", "0288",
- "triagdn", "25BC",
- "triaglf", "25C4",
- "triagrt", "25BA",
- "triagup", "25B2",
- "ts", "02A6",
- "tsadi", "05E6",
- "tsadidagesh", "FB46",
- "tsadidageshhebrew", "FB46",
- "tsadihebrew", "05E6",
- "tsecyrillic", "0446",
- "tsere", "05B5",
- "tsere12", "05B5",
- "tsere1e", "05B5",
- "tsere2b", "05B5",
- "tserehebrew", "05B5",
- "tserenarrowhebrew", "05B5",
- "tserequarterhebrew", "05B5",
- "tserewidehebrew", "05B5",
- "tshecyrillic", "045B",
- "ttabengali", "099F",
- "ttadeva", "091F",
- "ttagujarati", "0A9F",
- "ttagurmukhi", "0A1F",
- "tteharabic", "0679",
- "ttehfinalarabic", "FB67",
- "ttehinitialarabic", "FB68",
- "ttehmedialarabic", "FB69",
- "tthabengali", "09A0",
- "tthadeva", "0920",
- "tthagujarati", "0AA0",
- "tthagurmukhi", "0A20",
- "tturned", "0287",
- "tuhiragana", "3064",
- "tukatakana", "30C4",
- "tukatakanahalfwidth", "FF82",
- "tusmallhiragana", "3063",
- "tusmallkatakana", "30C3",
- "tusmallkatakanahalfwidth", "FF6F",
- "twelvecircle", "246B",
- "twelveparen", "247F",
- "twelveperiod", "2493",
- "twelveroman", "217B",
- "twentycircle", "2473",
- "twentyhangzhou", "5344",
- "twentyparen", "2487",
- "twentyperiod", "249B",
- "two", "0032",
- "twoarabic", "0662",
- "twobengali", "09E8",
- "twocircle", "2461",
- "twocircleinversesansserif", "278B",
- "twodeva", "0968",
- "twodotenleader", "2025",
- "twodotleader", "2025",
- "twodotleadervertical", "FE30",
- "twogujarati", "0AE8",
- "twogurmukhi", "0A68",
- "twohackarabic", "0662",
- "twohangzhou", "3022",
- "twoideographicparen", "3221",
- "twoinferior", "2082",
- "twomonospace", "FF12",
- "twonumeratorbengali", "09F5",
- "twoparen", "2475",
- "twoperiod", "2489",
- "twopersian", "06F2",
- "tworoman", "2171",
- "twostroke", "01BB",
- "twosuperior", "00B2",
- "twothai", "0E52",
- "twothirds", "2154",
- "u", "0075",
- "uacute", "00FA",
- "ubar", "0289",
- "ubengali", "0989",
- "ubopomofo", "3128",
- "ubreve", "016D",
- "ucaron", "01D4",
- "ucircle", "24E4",
- "ucircumflex", "00FB",
- "ucircumflexbelow", "1E77",
- "ucyrillic", "0443",
- "udattadeva", "0951",
- "udblacute", "0171",
- "udblgrave", "0215",
- "udeva", "0909",
- "udieresis", "00FC",
- "udieresisacute", "01D8",
- "udieresisbelow", "1E73",
- "udieresiscaron", "01DA",
- "udieresiscyrillic", "04F1",
- "udieresisgrave", "01DC",
- "udieresismacron", "01D6",
- "udotbelow", "1EE5",
- "ugrave", "00F9",
- "ugujarati", "0A89",
- "ugurmukhi", "0A09",
- "uhiragana", "3046",
- "uhookabove", "1EE7",
- "uhorn", "01B0",
- "uhornacute", "1EE9",
- "uhorndotbelow", "1EF1",
- "uhorngrave", "1EEB",
- "uhornhookabove", "1EED",
- "uhorntilde", "1EEF",
- "uhungarumlaut", "0171",
- "uhungarumlautcyrillic", "04F3",
- "uinvertedbreve", "0217",
- "ukatakana", "30A6",
- "ukatakanahalfwidth", "FF73",
- "ukcyrillic", "0479",
- "ukorean", "315C",
- "umacron", "016B",
- "umacroncyrillic", "04EF",
- "umacrondieresis", "1E7B",
- "umatragurmukhi", "0A41",
- "umonospace", "FF55",
- "underscore", "005F",
- "underscoredbl", "2017",
- "underscoremonospace", "FF3F",
- "underscorevertical", "FE33",
- "underscorewavy", "FE4F",
- "union", "222A",
- "universal", "2200",
- "uogonek", "0173",
- "uparen", "24B0",
- "upblock", "2580",
- "upperdothebrew", "05C4",
- "upsilon", "03C5",
- "upsilondieresis", "03CB",
- "upsilondieresistonos", "03B0",
- "upsilonlatin", "028A",
- "upsilontonos", "03CD",
- "uptackbelowcmb", "031D",
- "uptackmod", "02D4",
- "uragurmukhi", "0A73",
- "uring", "016F",
- "ushortcyrillic", "045E",
- "usmallhiragana", "3045",
- "usmallkatakana", "30A5",
- "usmallkatakanahalfwidth", "FF69",
- "ustraightcyrillic", "04AF",
- "ustraightstrokecyrillic", "04B1",
- "utilde", "0169",
- "utildeacute", "1E79",
- "utildebelow", "1E75",
- "uubengali", "098A",
- "uudeva", "090A",
- "uugujarati", "0A8A",
- "uugurmukhi", "0A0A",
- "uumatragurmukhi", "0A42",
- "uuvowelsignbengali", "09C2",
- "uuvowelsigndeva", "0942",
- "uuvowelsigngujarati", "0AC2",
- "uvowelsignbengali", "09C1",
- "uvowelsigndeva", "0941",
- "uvowelsigngujarati", "0AC1",
- "v", "0076",
- "vadeva", "0935",
- "vagujarati", "0AB5",
- "vagurmukhi", "0A35",
- "vakatakana", "30F7",
- "vav", "05D5",
- "vavdagesh", "FB35",
- "vavdagesh65", "FB35",
- "vavdageshhebrew", "FB35",
- "vavhebrew", "05D5",
- "vavholam", "FB4B",
- "vavholamhebrew", "FB4B",
- "vavvavhebrew", "05F0",
- "vavyodhebrew", "05F1",
- "vcircle", "24E5",
- "vdotbelow", "1E7F",
- "vecyrillic", "0432",
- "veharabic", "06A4",
- "vehfinalarabic", "FB6B",
- "vehinitialarabic", "FB6C",
- "vehmedialarabic", "FB6D",
- "vekatakana", "30F9",
- "venus", "2640",
- "verticalbar", "007C",
- "verticallineabovecmb", "030D",
- "verticallinebelowcmb", "0329",
- "verticallinelowmod", "02CC",
- "verticallinemod", "02C8",
- "vewarmenian", "057E",
- "vhook", "028B",
- "vikatakana", "30F8",
- "viramabengali", "09CD",
- "viramadeva", "094D",
- "viramagujarati", "0ACD",
- "visargabengali", "0983",
- "visargadeva", "0903",
- "visargagujarati", "0A83",
- "vmonospace", "FF56",
- "voarmenian", "0578",
- "voicediterationhiragana", "309E",
- "voicediterationkatakana", "30FE",
- "voicedmarkkana", "309B",
- "voicedmarkkanahalfwidth", "FF9E",
- "vokatakana", "30FA",
- "vparen", "24B1",
- "vtilde", "1E7D",
- "vturned", "028C",
- "vuhiragana", "3094",
- "vukatakana", "30F4",
- "w", "0077",
- "wacute", "1E83",
- "waekorean", "3159",
- "wahiragana", "308F",
- "wakatakana", "30EF",
- "wakatakanahalfwidth", "FF9C",
- "wakorean", "3158",
- "wasmallhiragana", "308E",
- "wasmallkatakana", "30EE",
- "wattosquare", "3357",
- "wavedash", "301C",
- "wavyunderscorevertical", "FE34",
- "wawarabic", "0648",
- "wawfinalarabic", "FEEE",
- "wawhamzaabovearabic", "0624",
- "wawhamzaabovefinalarabic", "FE86",
- "wbsquare", "33DD",
- "wcircle", "24E6",
- "wcircumflex", "0175",
- "wdieresis", "1E85",
- "wdotaccent", "1E87",
- "wdotbelow", "1E89",
- "wehiragana", "3091",
- "weierstrass", "2118",
- "wekatakana", "30F1",
- "wekorean", "315E",
- "weokorean", "315D",
- "wgrave", "1E81",
- "whitebullet", "25E6",
- "whitecircle", "25CB",
- "whitecircleinverse", "25D9",
- "whitecornerbracketleft", "300E",
- "whitecornerbracketleftvertical", "FE43",
- "whitecornerbracketright", "300F",
- "whitecornerbracketrightvertical", "FE44",
- "whitediamond", "25C7",
- "whitediamondcontainingblacksmalldiamond", "25C8",
- "whitedownpointingsmalltriangle", "25BF",
- "whitedownpointingtriangle", "25BD",
- "whiteleftpointingsmalltriangle", "25C3",
- "whiteleftpointingtriangle", "25C1",
- "whitelenticularbracketleft", "3016",
- "whitelenticularbracketright", "3017",
- "whiterightpointingsmalltriangle", "25B9",
- "whiterightpointingtriangle", "25B7",
- "whitesmallsquare", "25AB",
- "whitesmilingface", "263A",
- "whitesquare", "25A1",
- "whitestar", "2606",
- "whitetelephone", "260F",
- "whitetortoiseshellbracketleft", "3018",
- "whitetortoiseshellbracketright", "3019",
- "whiteuppointingsmalltriangle", "25B5",
- "whiteuppointingtriangle", "25B3",
- "wihiragana", "3090",
- "wikatakana", "30F0",
- "wikorean", "315F",
- "wmonospace", "FF57",
- "wohiragana", "3092",
- "wokatakana", "30F2",
- "wokatakanahalfwidth", "FF66",
- "won", "20A9",
- "wonmonospace", "FFE6",
- "wowaenthai", "0E27",
- "wparen", "24B2",
- "wring", "1E98",
- "wsuperior", "02B7",
- "wturned", "028D",
- "wynn", "01BF",
- "x", "0078",
- "xabovecmb", "033D",
- "xbopomofo", "3112",
- "xcircle", "24E7",
- "xdieresis", "1E8D",
- "xdotaccent", "1E8B",
- "xeharmenian", "056D",
- "xi", "03BE",
- "xmonospace", "FF58",
- "xparen", "24B3",
- "xsuperior", "02E3",
- "y", "0079",
- "yaadosquare", "334E",
- "yabengali", "09AF",
- "yacute", "00FD",
- "yadeva", "092F",
- "yaekorean", "3152",
- "yagujarati", "0AAF",
- "yagurmukhi", "0A2F",
- "yahiragana", "3084",
- "yakatakana", "30E4",
- "yakatakanahalfwidth", "FF94",
- "yakorean", "3151",
- "yamakkanthai", "0E4E",
- "yasmallhiragana", "3083",
- "yasmallkatakana", "30E3",
- "yasmallkatakanahalfwidth", "FF6C",
- "yatcyrillic", "0463",
- "ycircle", "24E8",
- "ycircumflex", "0177",
- "ydieresis", "00FF",
- "ydotaccent", "1E8F",
- "ydotbelow", "1EF5",
- "yeharabic", "064A",
- "yehbarreearabic", "06D2",
- "yehbarreefinalarabic", "FBAF",
- "yehfinalarabic", "FEF2",
- "yehhamzaabovearabic", "0626",
- "yehhamzaabovefinalarabic", "FE8A",
- "yehhamzaaboveinitialarabic", "FE8B",
- "yehhamzaabovemedialarabic", "FE8C",
- "yehinitialarabic", "FEF3",
- "yehmedialarabic", "FEF4",
- "yehmeeminitialarabic", "FCDD",
- "yehmeemisolatedarabic", "FC58",
- "yehnoonfinalarabic", "FC94",
- "yehthreedotsbelowarabic", "06D1",
- "yekorean", "3156",
- "yen", "00A5",
- "yenmonospace", "FFE5",
- "yeokorean", "3155",
- "yeorinhieuhkorean", "3186",
- "yerahbenyomohebrew", "05AA",
- "yerahbenyomolefthebrew", "05AA",
- "yericyrillic", "044B",
- "yerudieresiscyrillic", "04F9",
- "yesieungkorean", "3181",
- "yesieungpansioskorean", "3183",
- "yesieungsioskorean", "3182",
- "yetivhebrew", "059A",
- "ygrave", "1EF3",
- "yhook", "01B4",
- "yhookabove", "1EF7",
- "yiarmenian", "0575",
- "yicyrillic", "0457",
- "yikorean", "3162",
- "yinyang", "262F",
- "yiwnarmenian", "0582",
- "ymonospace", "FF59",
- "yod", "05D9",
- "yoddagesh", "FB39",
- "yoddageshhebrew", "FB39",
- "yodhebrew", "05D9",
- "yodyodhebrew", "05F2",
- "yodyodpatahhebrew", "FB1F",
- "yohiragana", "3088",
- "yoikorean", "3189",
- "yokatakana", "30E8",
- "yokatakanahalfwidth", "FF96",
- "yokorean", "315B",
- "yosmallhiragana", "3087",
- "yosmallkatakana", "30E7",
- "yosmallkatakanahalfwidth", "FF6E",
- "yotgreek", "03F3",
- "yoyaekorean", "3188",
- "yoyakorean", "3187",
- "yoyakthai", "0E22",
- "yoyingthai", "0E0D",
- "yparen", "24B4",
- "ypogegrammeni", "037A",
- "ypogegrammenigreekcmb", "0345",
- "yr", "01A6",
- "yring", "1E99",
- "ysuperior", "02B8",
- "ytilde", "1EF9",
- "yturned", "028E",
- "yuhiragana", "3086",
- "yuikorean", "318C",
- "yukatakana", "30E6",
- "yukatakanahalfwidth", "FF95",
- "yukorean", "3160",
- "yusbigcyrillic", "046B",
- "yusbigiotifiedcyrillic", "046D",
- "yuslittlecyrillic", "0467",
- "yuslittleiotifiedcyrillic", "0469",
- "yusmallhiragana", "3085",
- "yusmallkatakana", "30E5",
- "yusmallkatakanahalfwidth", "FF6D",
- "yuyekorean", "318B",
- "yuyeokorean", "318A",
- "yyabengali", "09DF",
- "yyadeva", "095F",
- "z", "007A",
- "zaarmenian", "0566",
- "zacute", "017A",
- "zadeva", "095B",
- "zagurmukhi", "0A5B",
- "zaharabic", "0638",
- "zahfinalarabic", "FEC6",
- "zahinitialarabic", "FEC7",
- "zahiragana", "3056",
- "zahmedialarabic", "FEC8",
- "zainarabic", "0632",
- "zainfinalarabic", "FEB0",
- "zakatakana", "30B6",
- "zaqefgadolhebrew", "0595",
- "zaqefqatanhebrew", "0594",
- "zarqahebrew", "0598",
- "zayin", "05D6",
- "zayindagesh", "FB36",
- "zayindageshhebrew", "FB36",
- "zayinhebrew", "05D6",
- "zbopomofo", "3117",
- "zcaron", "017E",
- "zcircle", "24E9",
- "zcircumflex", "1E91",
- "zcurl", "0291",
- "zdot", "017C",
- "zdotaccent", "017C",
- "zdotbelow", "1E93",
- "zecyrillic", "0437",
- "zedescendercyrillic", "0499",
- "zedieresiscyrillic", "04DF",
- "zehiragana", "305C",
- "zekatakana", "30BC",
- "zero", "0030",
- "zeroarabic", "0660",
- "zerobengali", "09E6",
- "zerodeva", "0966",
- "zerogujarati", "0AE6",
- "zerogurmukhi", "0A66",
- "zerohackarabic", "0660",
- "zeroinferior", "2080",
- "zeromonospace", "FF10",
- "zeropersian", "06F0",
- "zerosuperior", "2070",
- "zerothai", "0E50",
- "zerowidthjoiner", "FEFF",
- "zerowidthnonjoiner", "200C",
- "zerowidthspace", "200B",
- "zeta", "03B6",
- "zhbopomofo", "3113",
- "zhearmenian", "056A",
- "zhebrevecyrillic", "04C2",
- "zhecyrillic", "0436",
- "zhedescendercyrillic", "0497",
- "zhedieresiscyrillic", "04DD",
- "zihiragana", "3058",
- "zikatakana", "30B8",
- "zinorhebrew", "05AE",
- "zlinebelow", "1E95",
- "zmonospace", "FF5A",
- "zohiragana", "305E",
- "zokatakana", "30BE",
- "zparen", "24B5",
- "zretroflexhook", "0290",
- "zstroke", "01B6",
- "zuhiragana", "305A",
- "zukatakana", "30BA",
-);
-
-
-my $prog = $0;
-$prog =~ s@.*/@@;
-
-my $groff_sys_fontdir = "@FONTDIR@";
-
-use Getopt::Std;
-getopts('a:d:e:i:mnsvx');
-
-our ($opt_a, $opt_d, $opt_e, $opt_i, $opt_m, $opt_n, $opt_s, $opt_v, $opt_x);
-
-if ($opt_v) {
- print "GNU afmtodit (groff) version @VERSION@\n";
- exit 0;
-}
-
-if ($#ARGV != 2) {
- die "usage: $prog [-mnsvx] [-a angle] [-d DESC] [-e encoding]\n" .
- " [-i n] afmfile mapfile font\n";
-}
-
-my $afm = $ARGV[0];
-my $map = $ARGV[1];
-my $font = $ARGV[2];
-my $desc = $opt_d || "DESC";
-my $sys_map = $groff_sys_fontdir . "/devps/generate/" . $map;
-my $sys_desc = $groff_sys_fontdir . "/devps/" . $desc;
-
-# read the afm file
-
-my $psname;
-my $italic_angle = 0;
-my (@kern1, @kern2, @kernx);
-my (%italic_correction, %left_italic_correction);
-my %subscript_correction;
-# my %ligs
-my %ligatures;
-my (@encoding, %in_encoding);
-my (%width, %height, %depth);
-my (%left_side_bearing, %right_side_bearing);
-
-open(AFM, $afm) || die "$prog: can't open \`$ARGV[0]': $!\n";
-
-while (<AFM>) {
- chop;
- my @field = split(' ');
- next if $#field < 0;
- if ($field[0] eq "FontName") {
- $psname = $field[1];
- }
- elsif($field[0] eq "ItalicAngle") {
- $italic_angle = -$field[1];
- }
- elsif ($field[0] eq "KPX") {
- if ($#field == 3) {
- push(@kern1, $field[1]);
- push(@kern2, $field[2]);
- push(@kernx, $field[3]);
- }
- }
- elsif ($field[0] eq "italicCorrection") {
- $italic_correction{$field[1]} = $field[2];
- }
- elsif ($field[0] eq "leftItalicCorrection") {
- $left_italic_correction{$field[1]} = $field[2];
- }
- elsif ($field[0] eq "subscriptCorrection") {
- $subscript_correction{$field[1]} = $field[2];
- }
- elsif ($field[0] eq "StartCharMetrics") {
- while (<AFM>) {
- @field = split(' ');
- next if $#field < 0;
- last if ($field[0] eq "EndCharMetrics");
- if ($field[0] eq "C") {
- my $w;
- my $wx = 0;
- my $n = "";
-# %ligs = ();
- my $lly = 0;
- my $ury = 0;
- my $llx = 0;
- my $urx = 0;
- my $c = $field[1];
- my $i = 2;
- while ($i <= $#field) {
- if ($field[$i] eq "WX") {
- $w = $field[$i + 1];
- $i += 2;
- }
- elsif ($field[$i] eq "N") {
- $n = $field[$i + 1];
- $i += 2;
- }
- elsif ($field[$i] eq "B") {
- $llx = $field[$i + 1];
- $lly = $field[$i + 2];
- $urx = $field[$i + 3];
- $ury = $field[$i + 4];
- $i += 5;
- }
-# elsif ($field[$i] eq "L") {
-# $ligs{$field[$i + 2]} = $field[$i + 1];
-# $i += 3;
-# }
- else {
- while ($i <= $#field && $field[$i] ne ";") {
- $i++;
- }
- $i++;
- }
- }
- if (!$opt_e && $c != -1) {
- $encoding[$c] = $n;
- $in_encoding{$n} = 1;
- }
- $width{$n} = $w;
- $height{$n} = $ury;
- $depth{$n} = -$lly;
- $left_side_bearing{$n} = -$llx;
- $right_side_bearing{$n} = $urx - $w;
-# while ((my $lig, my $glyph2) = each %ligs) {
-# $ligatures{$lig} = $n . " " . $glyph2;
-# }
- }
- }
- }
-}
-close(AFM);
-
-# read the DESC file
-
-my ($sizescale, $resolution, $unitwidth);
-$sizescale = 1;
-
-open(DESC, $desc) || open(DESC, $sys_desc) ||
- die "$prog: can't open \`$desc' or \`$sys_desc': $!\n";
-while (<DESC>) {
- next if /^#/;
- chop;
- my @field = split(' ');
- next if $#field < 0;
- last if $field[0] eq "charset";
- if ($field[0] eq "res") {
- $resolution = $field[1];
- }
- elsif ($field[0] eq "unitwidth") {
- $unitwidth = $field[1];
- }
- elsif ($field[0] eq "sizescale") {
- $sizescale = $field[1];
- }
-}
-close(DESC);
-
-if ($opt_e) {
- # read the encoding file
-
- my $sys_opt_e = $groff_sys_fontdir . "/devps/" . $opt_e;
- open(ENCODING, $opt_e) || open(ENCODING, $sys_opt_e) ||
- die "$prog: can't open \`$opt_e' or \`$sys_opt_e': $!\n";
- while (<ENCODING>) {
- next if /^#/;
- chop;
- my @field = split(' ');
- next if $#field < 0;
- if ($#field == 1) {
- if ($field[1] >= 0 && defined $width{$field[0]}) {
- $encoding[$field[1]] = $field[0];
- $in_encoding{$field[0]} = 1;
- }
- }
- }
- close(ENCODING);
-}
-
-# read the map file
-
-my (%nmap, %map);
-
-open(MAP, $map) || open(MAP, $sys_map) ||
- die "$prog: can't open \`$map' or \`$sys_map': $!\n";
-while (<MAP>) {
- next if /^#/;
- chop;
- my @field = split(' ');
- next if $#field < 0;
- if ($#field == 1) {
- if ($field[1] eq "space") {
- # The PostScript character "space" is automatically mapped
- # to the groff character "space"; this is for grops.
- warn "you are not allowed to map to " .
- "the groff character \`space'";
- }
- elsif ($field[0] eq "space") {
- warn "you are not allowed to map " .
- "the PostScript character \`space'";
- }
- else {
- $nmap{$field[0]} += 0;
- $map{$field[0], $nmap{$field[0]}} = $field[1];
- $nmap{$field[0]} += 1;
-
- # There is more then one way to make a PS glyph name;
- # let us try unicode names with `uni' and `u' prefixes.
- my $utmp = $AGL_to_unicode{$field[0]};
- if (defined $utmp && $utmp =~ /^[0-9A-F]{4}$/) {
- foreach my $unicodepsname ("uni" . $utmp, "u" . $utmp) {
- $nmap{$unicodepsname} += 0;
- $map{$unicodepsname, $nmap{$unicodepsname}} = $field[1];
- $nmap{$unicodepsname} += 1;
- }
- }
- }
- }
-}
-close(MAP);
-
-$italic_angle = $opt_a if $opt_a;
-
-
-if (!$opt_x) {
- my %mapped;
- my $i = ($#encoding > 256) ? ($#encoding + 1) : 256;
- while (my $ch = each %width) {
- # add unencoded characters
- if (!$in_encoding{$ch}) {
- $encoding[$i] = $ch;
- $i++;
- }
- if ($nmap{$ch}) {
- for (my $j = 0; $j < $nmap{$ch}; $j++) {
- if (defined $mapped{$map{$ch, $j}}) {
- warn "both $mapped{$map{$ch, $j}} and $ch " .
- "map to $map{$ch, $j}";
- }
- else {
- $mapped{$map{$ch, $j}} = $ch;
- }
- }
- }
- else {
- my $u = ""; # the resulting groff glyph name
- my $ucomp = ""; # Unicode string before decomposition
- my $utmp = ""; # temporary value
- my $component = "";
- my $nv = 0;
-
- # Step 1:
- # Drop all characters from the glyph name starting with the
- # first occurrence of a period (U+002E FULL STOP), if any.
- # ?? We avoid mapping of glyphs with periods, since they are
- # likely to be variant glyphs, leading to a `many ps glyphs --
- # one groff glyph' conflict.
- #
- # If multiple glyphs in the font represent the same character
- # in the Unicode standard, as do `A' and `A.swash', for example,
- # they can be differentiated by using the same base name with
- # different suffixes. This suffix (the part of glyph name that
- # follows the first period) does not participate in the
- # computation of a character sequence. It can be used by font
- # designers to indicate some characteristics of the glyph. The
- # suffix may contain periods or any other permitted characters.
- # Small cap A, for example, could be named `uni0041.sc' or `A.sc'.
-
- next if $ch =~ /\./;
-
- # Step 2:
- # Split the remaining string into a sequence of components,
- # using the underscore character (U+005F LOW LINE) as the
- # delimiter.
-
- while ($ch =~ /([^_]+)/g) {
- $component = $1;
-
- # Step 3:
- # Map each component to a character string according to the
- # procedure below:
- #
- # * If the component is in the Adobe Glyph List, then map
- # it to the corresponding character in that list.
-
- $utmp = $AGL_to_unicode{$component};
- if ($utmp) {
- $utmp = "U+" . $utmp;
- }
-
- # * Otherwise, if the component is of the form `uni'
- # (U+0075 U+006E U+0069) followed by a sequence of
- # uppercase hexadecimal digits (0 .. 9, A .. F, i.e.,
- # U+0030 .. U+0039, U+0041 .. U+0046), the length of
- # that sequence is a multiple of four, and each group of
- # four digits represents a number in the set {0x0000 ..
- # 0xD7FF, 0xE000 .. 0xFFFF}, then interpret each such
- # number as a Unicode scalar value and map the component
- # to the string made of those scalar values.
-
- elsif ($component =~ /^uni([0-9A-F]{4})+$/) {
- while ($component =~ /([0-9A-F]{4})/g) {
- $nv = hex("0x" . $1);
- if ($nv <= 0xD7FF || $nv >= 0xE000) {
- $utmp .= "U+" . $1;
- }
- else {
- $utmp = "";
- last;
- }
- }
- }
-
- # * Otherwise, if the component is of the form `u' (U+0075)
- # followed by a sequence of four to six uppercase
- # hexadecimal digits {0 .. 9, A .. F} (U+0030 .. U+0039,
- # U+0041 .. U+0046), and those digits represent a number
- # in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then
- # interpret this number as a Unicode scalar value and map
- # the component to the string made of this scalar value.
-
- elsif ($component =~ /^u([0-9A-F]{4,6})$/) {
- $nv = hex("0x" . $1);
- if ($nv <= 0xD7FF || ($nv >= 0xE000 && $nv <= 0x10FFFF)) {
- $utmp .= "U+" . $1;
- }
- }
-
- # Finally, concatenate those strings; the result is the
- # character string to which the glyph name is mapped.
-
- $ucomp .= $utmp if $utmp;
- }
-
- # Unicode decomposition
- while ($ucomp =~ /([0-9A-F]{4,6})/g) {
- $component = $1;
- $utmp = $unicode_decomposed{$component};
- $u .= "_" . ($utmp ? $utmp : $component);
- }
- $u =~ s/^_/u/;
- if ($u) {
- if (defined $mapped{$u}) {
- warn "both $mapped{$u} and $ch map to $u";
- }
- else {
- $mapped{$u} = $ch;
- }
- $nmap{$ch} += 1;
- $map{$ch, "0"} = $u;
- }
- }
- }
-}
-
-# Check explicitly for groff's standard ligatures -- many afm files don't
-# have proper `L' entries.
-
-my %default_ligatures = (
- "fi", "f i",
- "fl", "f l",
- "ff", "f f",
- "ffi", "ff i",
- "ffl", "ff l",
-);
-
-while (my ($lig, $components) = each %default_ligatures) {
- if (defined $width{$lig} && !defined $ligatures{$lig}) {
- $ligatures{$lig} = $components;
- }
-}
-
-# print it all out
-
-open(FONT, ">$font") || die "$prog: can't open \`$font' for output: $!\n";
-select(FONT);
-
-print("name $font\n");
-print("internalname $psname\n") if $psname;
-print("special\n") if $opt_s;
-printf("slant %g\n", $italic_angle) if $italic_angle != 0;
-printf("spacewidth %d\n", conv($width{"space"})) if defined $width{"space"};
-
-if ($opt_e) {
- my $e = $opt_e;
- $e =~ s@.*/@@;
- print("encoding $e\n");
-}
-
-if (!$opt_n && %ligatures) {
- print("ligatures");
- while (my $lig = each %ligatures) {
- print(" $lig");
- }
- print(" 0\n");
-}
-
-if ($#kern1 >= 0) {
- print("kernpairs\n");
-
- for (my $i = 0; $i <= $#kern1; $i++) {
- my $c1 = $kern1[$i];
- my $c2 = $kern2[$i];
- if ($nmap{$c1} != 0 && $nmap{$c2} != 0) {
- for (my $j = 0; $j < $nmap{$c1}; $j++) {
- for (my $k = 0; $k < $nmap{$c2}; $k++) {
- if ($kernx[$i] != 0) {
- printf("%s %s %d\n",
- $map{$c1, $j},
- $map{$c2, $k},
- conv($kernx[$i]));
- }
- }
- }
- }
- }
-}
-
-my ($asc_boundary, $desc_boundary, $xheight, $slant);
-
-# characters not shorter than asc_boundary are considered to have ascenders
-
-$asc_boundary = 0;
-$asc_boundary = $height{"t"} if defined $height{"t"};
-$asc_boundary -= 1;
-
-# likewise for descenders
-
-$desc_boundary = 0;
-$desc_boundary = $depth{"g"} if defined $depth{"g"};
-$desc_boundary = $depth{"j"} if defined $depth{"g"} && $depth{"j"} < $desc_boundary;
-$desc_boundary = $depth{"p"} if defined $depth{"p"} && $depth{"p"} < $desc_boundary;
-$desc_boundary = $depth{"q"} if defined $depth{"q"} && $depth{"q"} < $desc_boundary;
-$desc_boundary = $depth{"y"} if defined $depth{"y"} && $depth{"y"} < $desc_boundary;
-$desc_boundary -= 1;
-
-if (defined $height{"x"}) {
- $xheight = $height{"x"};
-}
-elsif (defined $height{"alpha"}) {
- $xheight = $height{"alpha"};
-}
-else {
- $xheight = 450;
-}
-
-$italic_angle = $italic_angle*3.14159265358979323846/180.0;
-$slant = sin($italic_angle)/cos($italic_angle);
-$slant = 0 if $slant < 0;
-
-print("charset\n");
-for (my $i = 0; $i <= $#encoding; $i++) {
- my $ch = $encoding[$i];
- if (defined $ch && $ch ne "" && $ch ne "space") {
- $map{$ch, "0"} = "---" if !defined $nmap{$ch} || $nmap{$ch} == 0;
- my $type = 0;
- my $h = $height{$ch};
- $h = 0 if $h < 0;
- my $d = $depth{$ch};
- $d = 0 if $d < 0;
- $type = 1 if $d >= $desc_boundary;
- $type += 2 if $h >= $asc_boundary;
- printf("%s\t%d", $map{$ch, "0"}, conv($width{$ch}));
- my $italic_correction = 0;
- my $left_math_fit = 0;
- my $subscript_correction = 0;
- if (defined $opt_i) {
- $italic_correction = $right_side_bearing{$ch} + $opt_i;
- $italic_correction = 0 if $italic_correction < 0;
- $subscript_correction = $slant * $xheight * .8;
- $subscript_correction = $italic_correction if
- $subscript_correction > $italic_correction;
- $left_math_fit = $left_side_bearing{$ch} + $opt_i;
- if (defined $opt_m) {
- $left_math_fit = 0 if $left_math_fit < 0;
- }
- }
- if (defined $italic_correction{$ch}) {
- $italic_correction = $italic_correction{$ch};
- }
- if (defined $left_italic_correction{$ch}) {
- $left_math_fit = $left_italic_correction{$ch};
- }
- if (defined $subscript_correction{$ch}) {
- $subscript_correction = $subscript_correction{$ch};
- }
- if ($subscript_correction != 0) {
- printf(",%d,%d", conv($h), conv($d));
- printf(",%d,%d,%d", conv($italic_correction),
- conv($left_math_fit),
- conv($subscript_correction));
- }
- elsif ($left_math_fit != 0) {
- printf(",%d,%d", conv($h), conv($d));
- printf(",%d,%d", conv($italic_correction),
- conv($left_math_fit));
- }
- elsif ($italic_correction != 0) {
- printf(",%d,%d", conv($h), conv($d));
- printf(",%d", conv($italic_correction));
- }
- elsif ($d != 0) {
- printf(",%d,%d", conv($h), conv($d));
- }
- else {
- # always put the height in to stop groff guessing
- printf(",%d", conv($h));
- }
- printf("\t%d", $type);
- printf("\t%d\t%s\n", $i, $ch);
- if (defined $nmap{$ch}) {
- for (my $j = 1; $j < $nmap{$ch}; $j++) {
- printf("%s\t\"\n", $map{$ch, $j});
- }
- }
- }
- if (defined $ch && $ch eq "space" && defined $width{"space"}) {
- printf("space\t%d\t0\t%d\tspace\n", conv($width{"space"}), $i);
- }
-}
-
-sub conv {
- $_[0]*$unitwidth*$resolution/(72*1000*$sizescale) + ($_[0] < 0 ? -.5 : .5);
-}
diff --git a/contrib/groff/src/utils/hpftodit/Makefile.sub b/contrib/groff/src/utils/hpftodit/Makefile.sub
deleted file mode 100644
index 6e80b474b4c3..000000000000
--- a/contrib/groff/src/utils/hpftodit/Makefile.sub
+++ /dev/null
@@ -1,8 +0,0 @@
-PROG=hpftodit$(EXEEXT)
-MAN1=hpftodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=hpftodit.$(OBJEXT) \
- hpuni.$(OBJEXT)
-CCSRCS=$(srcdir)/hpftodit.cpp \
- $(srcdir)/hpuni.cpp
diff --git a/contrib/groff/src/utils/hpftodit/hpftodit.cpp b/contrib/groff/src/utils/hpftodit/hpftodit.cpp
deleted file mode 100644
index d5d524fdf1b2..000000000000
--- a/contrib/groff/src/utils/hpftodit/hpftodit.cpp
+++ /dev/null
@@ -1,1454 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
-TODO
-devise new names for useful characters
-option to specify symbol sets to look in
-put filename in error messages (or fix lib)
-*/
-
-#include "lib.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <errno.h>
-#include "assert.h"
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "cset.h"
-#include "nonposix.h"
-#include "unicode.h"
-
-extern "C" const char *Version_string;
-extern const char *hp_msl_to_unicode_code(const char *);
-
-#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
-#define equal(a, b) (strcmp(a, b) == 0)
-// only valid if is_uname(c) has returned true
-#define is_decomposed(c) strchr(c, '_')
-
-#define NO 0
-#define YES 1
-
-#define MSL 0
-#define SYMSET 1
-#define UNICODE 2
-
-#define UNNAMED "---"
-
-static double multiplier = 3.0; // make Agfa-based unitwidth an integer
-
-inline
-int scale(int n)
-{
- return int(n * multiplier + 0.5);
-}
-
-// tags in TFM file
-
-enum tag_type {
- min_tag = 400,
- type_tag = 400,
- copyright_tag = 401,
- comment_tag = 402,
- charcode_tag = 403, // MSL for Intellifont, Unicode for TrueType
- symbol_set_tag = 404,
- unique_identifier_tag = 405,
- inches_per_point_tag = 406,
- nominal_point_size_tag = 407,
- design_units_per_em_tag = 408,
- posture_tag = 409,
- type_structure_tag = 410,
- stroke_weight_tag = 411,
- spacing_tag = 412,
- slant_tag = 413,
- appearance_width_tag = 414,
- serif_style_tag = 415,
- font_name_tag = 417,
- typeface_source_tag = 418,
- average_width_tag = 419,
- max_width_tag = 420,
- word_spacing_tag = 421,
- recommended_line_spacing_tag = 422,
- cap_height_tag = 423,
- x_height_tag = 424,
- max_ascent_tag = 425,
- max_descent_tag = 426,
- lower_ascent_tag = 427,
- lower_descent_tag = 428,
- underscore_depth_tag = 429,
- underscore_thickness_tag = 430,
- uppercase_accent_height_tag = 431,
- lowercase_accent_height_tag = 432,
- width_tag = 433,
- vertical_escapement_tag = 434,
- left_extent_tag = 435,
- right_extent_tag = 436,
- ascent_tag = 437,
- descent_tag = 438,
- pair_kern_tag = 439,
- sector_kern_tag = 440,
- track_kern_tag = 441,
- typeface_tag = 442,
- panose_tag = 443,
- max_tag = 443
-};
-
-const char *tag_name[] = {
- "Symbol Set",
- "Font Type" // MSL for Intellifont, Unicode for TrueType
-};
-
-// types in TFM file
-enum {
- BYTE_TYPE = 1,
- ASCII_TYPE = 2, // NUL-terminated string
- USHORT_TYPE = 3,
- LONG_TYPE = 4, // unused
- RATIONAL_TYPE = 5, // 8-byte numerator + 8-byte denominator
- SIGNED_BYTE_TYPE = 16, // unused
- SIGNED_SHORT_TYPE = 17,
- SIGNED_LONG_TYPE = 18 // unused
-};
-
-typedef unsigned char byte;
-typedef unsigned short uint16;
-typedef short int16;
-typedef unsigned int uint32;
-
-class File {
-public:
- File(const char *);
- void skip(int n);
- byte get_byte();
- uint16 get_uint16();
- uint32 get_uint32();
- uint32 get_uint32(char *orig);
- void seek(uint32 n);
-private:
- unsigned char *buf_;
- const unsigned char *ptr_;
- const unsigned char *end_;
-};
-
-struct entry {
- char present;
- uint16 type;
- uint32 count;
- uint32 value;
- char orig_value[4];
- entry() : present(0) { }
-};
-
-struct char_info {
- uint16 charcode;
- uint16 width;
- int16 ascent;
- int16 descent;
- int16 left_extent;
- uint16 right_extent;
- uint16 symbol_set;
- unsigned char code;
-};
-
-const uint16 NO_GLYPH = 0xffff;
-const uint16 NO_SYMBOL_SET = 0;
-
-struct name_list {
- char *name;
- name_list *next;
- name_list(const char *s, name_list *p) : name(strsave(s)), next(p) { }
- ~name_list() { a_delete name; }
-};
-
-struct symbol_set {
- uint16 select;
- uint16 index[256];
-};
-
-#define SYMBOL_SET(n, c) ((n) * 32 + ((c) - 64))
-
-uint16 text_symbol_sets[] = {
- SYMBOL_SET(19, 'U'), // Windows Latin 1 ("ANSI", code page 1252)
- SYMBOL_SET(9, 'E'), // Windows Latin 2, Code Page 1250
- SYMBOL_SET(5, 'T'), // Code Page 1254
- SYMBOL_SET(7, 'J'), // Desktop
- SYMBOL_SET(6, 'J'), // Microsoft Publishing
- SYMBOL_SET(0, 'N'), // Latin 1 (subset of 19U,
- // so we should never get here)
- SYMBOL_SET(2, 'N'), // Latin 2 (subset of 9E,
- // so we should never get here)
- SYMBOL_SET(8, 'U'), // HP Roman 8
- SYMBOL_SET(10, 'J'), // PS Standard
- SYMBOL_SET(9, 'U'), // Windows 3.0 "ANSI"
- SYMBOL_SET(1, 'U'), // U.S. Legal
-
- SYMBOL_SET(12, 'J'), // MC Text
- SYMBOL_SET(10, 'U'), // PC Code Page 437
- SYMBOL_SET(11, 'U'), // PC Code Page 437N
- SYMBOL_SET(17, 'U'), // PC Code Page 852
- SYMBOL_SET(12, 'U'), // PC Code Page 850
- SYMBOL_SET(9, 'T'), // PC Code Page 437T
- 0
-};
-
-uint16 special_symbol_sets[] = {
- SYMBOL_SET(8, 'M'), // Math 8
- SYMBOL_SET(5, 'M'), // PS Math
- SYMBOL_SET(15, 'U'), // Pi font
- SYMBOL_SET(13, 'J'), // Ventura International
- SYMBOL_SET(19, 'M'), // Symbol font
- SYMBOL_SET(579, 'L'), // Wingdings
- 0
-};
-
-entry tags[max_tag + 1 - min_tag];
-
-char_info *char_table;
-uint32 nchars = 0;
-
-unsigned int charcode_name_table_size = 0;
-name_list **charcode_name_table = NULL;
-
-symbol_set *symbol_set_table;
-unsigned int n_symbol_sets;
-
-static int debug_flag = NO;
-static int special_flag = NO; // not a special font
-static int italic_flag = NO; // don't add italic correction
-static int italic_sep;
-static int all_flag = NO; // don't include glyphs not in mapfile
-static int quiet_flag = NO; // don't suppress warnings about symbols not found
-
-static char *hp_msl_to_ucode_name(int);
-static char *unicode_to_ucode_name(int);
-static int is_uname(char *);
-static char *show_symset(unsigned int);
-static void usage(FILE *);
-static void usage();
-static const char *xbasename(const char *);
-static void read_tags(File &);
-static int check_type();
-static void check_units(File &, const int, double *, double *);
-static int read_map(const char *, const int);
-static void require_tag(tag_type);
-static void dump_ascii(File &, tag_type);
-static void dump_tags(File &);
-static void dump_symbol_sets(File &);
-static void dump_symbols(int);
-static void output_font_name(File &);
-static void output_spacewidth();
-static void output_pclweight();
-static void output_pclproportional();
-static void read_and_output_pcltypeface(File &);
-static void output_pclstyle();
-static void output_slant();
-static void output_ligatures();
-static void read_symbol_sets(File &);
-static void read_and_output_kernpairs(File &);
-static void output_charset(const int);
-static void read_char_table(File &);
-
-inline
-entry &tag_info(tag_type t)
-{
- return tags[t - min_tag];
-}
-
-int
-main(int argc, char **argv)
-{
- program_name = argv[0];
-
- int opt;
- int res = 1200; // PCL unit of measure for cursor moves
- int scalesize = 4; // LaserJet 4 only allows 1/4 point increments
- int unitwidth = 6350;
- double ppi; // points per inch
- double upem; // design units per em
-
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "adsqvi:", long_options, NULL)) != EOF) {
- switch (opt) {
- case 'a':
- all_flag = YES;
- break;
- case 'd':
- debug_flag = YES;
- break;
- case 's':
- special_flag = YES;
- break;
- case 'i':
- italic_flag = YES;
- italic_sep = atoi(optarg); // design units
- break;
- case 'q':
- quiet_flag = YES; // suppress warnings about symbols not found
- break;
- case 'v':
- printf("GNU hpftodit (groff) version %s\n", Version_string);
- exit(0);
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage();
- break;
- default:
- assert(0);
- }
- }
-
- if (debug_flag && argc - optind < 1)
- usage();
- else if (!debug_flag && argc - optind != 3)
- usage();
- File f(argv[optind]);
- read_tags(f);
- int tfm_type = check_type();
- if (debug_flag)
- dump_tags(f);
- if (!debug_flag && !read_map(argv[optind + 1], tfm_type))
- exit(1);
- else if (debug_flag && argc - optind > 1)
- read_map(argv[optind + 1], tfm_type);
- current_filename = NULL;
- current_lineno = -1; // no line numbers
- if (!debug_flag && !equal(argv[optind + 2], "-"))
- if (freopen(argv[optind + 2], "w", stdout) == NULL)
- fatal("cannot open `%1': %2", argv[optind + 2], strerror(errno));
- current_filename = argv[optind];
-
- check_units(f, tfm_type, &ppi, &upem);
- if (tfm_type == UNICODE) // don't calculate for Intellifont TFMs
- multiplier = double(res) / upem / ppi * unitwidth / scalesize;
- if (italic_flag)
- // convert from thousandths of an em to design units
- italic_sep = int(italic_sep * upem / 1000 + 0.5);
-
- read_char_table(f);
- if (nchars == 0)
- fatal("no characters");
-
- if (!debug_flag) {
- output_font_name(f);
- printf("name %s\n", xbasename(argv[optind + 2]));
- if (special_flag)
- printf("special\n");
- output_spacewidth();
- output_slant();
- read_and_output_pcltypeface(f);
- output_pclproportional();
- output_pclweight();
- output_pclstyle();
- }
- read_symbol_sets(f);
- if (debug_flag)
- dump_symbols(tfm_type);
- else {
- output_ligatures();
- read_and_output_kernpairs(f);
- output_charset(tfm_type);
- }
- return 0;
-}
-
-static void
-usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [-s] [-a] [-q] [-i n] tfm_file map_file output_font\n"
- " %s -d tfm_file [map_file]\n",
- program_name, program_name);
-}
-
-static void
-usage()
-{
- usage(stderr);
- exit(1);
-}
-
-File::File(const char *s)
-{
- // We need to read the file in binary mode because hpftodit relies
- // on byte counts.
- int fd = open(s, O_RDONLY | O_BINARY);
- if (fd < 0)
- fatal("cannot open `%1': %2", s, strerror(errno));
- current_filename = s;
- struct stat sb;
- if (fstat(fd, &sb) < 0)
- fatal("cannot stat: %1", strerror(errno));
- if (!S_ISREG(sb.st_mode))
- fatal("not a regular file");
- buf_ = new unsigned char[sb.st_size];
- long nread = read(fd, buf_, sb.st_size);
- if (nread < 0)
- fatal("read error: %1", strerror(errno));
- if (nread != sb.st_size)
- fatal("read unexpected number of bytes");
- ptr_ = buf_;
- end_ = buf_ + sb.st_size;
-}
-
-void
-File::skip(int n)
-{
- if (end_ - ptr_ < n)
- fatal("unexpected end of file");
- ptr_ += n;
-}
-
-void
-File::seek(uint32 n)
-{
- if (uint32(end_ - buf_) < n)
- fatal("unexpected end of file");
- ptr_ = buf_ + n;
-}
-
-byte
-File::get_byte()
-{
- if (ptr_ >= end_)
- fatal("unexpected end of file");
- return *ptr_++;
-}
-
-uint16
-File::get_uint16()
-{
- if (end_ - ptr_ < 2)
- fatal("unexpected end of file");
- uint16 n = *ptr_++;
- return n + (*ptr_++ << 8);
-}
-
-uint32
-File::get_uint32()
-{
- if (end_ - ptr_ < 4)
- fatal("unexpected end of file");
- uint32 n = *ptr_++;
- for (int i = 0; i < 3; i++)
- n += *ptr_++ << (i + 1)*8;
- return n;
-}
-
-uint32
-File::get_uint32(char *orig)
-{
- if (end_ - ptr_ < 4)
- fatal("unexpected end of file");
- unsigned char v = *ptr_++;
- uint32 n = v;
- orig[0] = v;
- for (int i = 1; i < 4; i++) {
- v = *ptr_++;
- orig[i] = v;
- n += v << i*8;
- }
- return n;
-}
-
-static void
-read_tags(File &f)
-{
- if (f.get_byte() != 'I' || f.get_byte() != 'I')
- fatal("not an Intel format TFM file");
- f.skip(6);
- uint16 ntags = f.get_uint16();
- entry dummy;
- for (uint16 i = 0; i < ntags; i++) {
- uint16 tag = f.get_uint16();
- entry *p;
- if (min_tag <= tag && tag <= max_tag)
- p = tags + (tag - min_tag);
- else
- p = &dummy;
- p->present = 1;
- p->type = f.get_uint16();
- p->count = f.get_uint32();
- p->value = f.get_uint32(p->orig_value);
- }
-}
-
-static int
-check_type()
-{
- require_tag(type_tag);
- int tfm_type = tag_info(type_tag).value;
- switch (tfm_type) {
- case MSL:
- case UNICODE:
- break;
- case SYMSET:
- fatal("cannot handle Symbol Set TFM files");
- break;
- default:
- fatal("unknown type tag %1", tfm_type);
- }
- return tfm_type;
-}
-
-static void
-check_units(File &f, const int tfm_type, double *ppi, double *upem)
-{
- require_tag(design_units_per_em_tag);
- f.seek(tag_info(design_units_per_em_tag).value);
- uint32 num = f.get_uint32();
- uint32 den = f.get_uint32();
- if (tfm_type == MSL && (num != 8782 || den != 1))
- fatal("design units per em != 8782/1");
- *upem = double(num) / den;
- require_tag(inches_per_point_tag);
- f.seek(tag_info(inches_per_point_tag).value);
- num = f.get_uint32();
- den = f.get_uint32();
- if (tfm_type == MSL && (num != 100 || den != 7231))
- fatal("inches per point not 100/7231");
- *ppi = double(den) / num;
-}
-
-static void
-require_tag(tag_type t)
-{
- if (!tag_info(t).present)
- fatal("tag %1 missing", int(t));
-}
-
-// put a human-readable font name in the file
-static void
-output_font_name(File &f)
-{
- char *p;
-
- if (!tag_info(font_name_tag).present)
- return;
- int count = tag_info(font_name_tag).count;
- char *font_name = new char[count];
-
- if (count > 4) { // value is a file offset to the string
- f.seek(tag_info(font_name_tag).value);
- int n = count;
- p = font_name;
- while (--n)
- *p++ = f.get_byte();
- }
- else // orig_value contains the string
- sprintf(font_name, "%.*s",
- count, tag_info(font_name_tag).orig_value);
-
- // remove any trailing space
- p = font_name + count - 1;
- while (csspace(*--p))
- ;
- *(p + 1) = '\0';
- printf("# %s\n", font_name);
- delete font_name;
-}
-
-static void
-output_spacewidth()
-{
- require_tag(word_spacing_tag);
- printf("spacewidth %d\n", scale(tag_info(word_spacing_tag).value));
-}
-
-static void
-read_symbol_sets(File &f)
-{
- uint32 symbol_set_dir_length = tag_info(symbol_set_tag).count;
- uint16 *symbol_set_selectors;
- n_symbol_sets = symbol_set_dir_length/14;
- symbol_set_table = new symbol_set[n_symbol_sets];
- unsigned int i;
-
- for (i = 0; i < nchars; i++)
- char_table[i].symbol_set = NO_SYMBOL_SET;
-
- for (i = 0; i < n_symbol_sets; i++) {
- f.seek(tag_info(symbol_set_tag).value + i*14);
- (void)f.get_uint32(); // offset to symbol set name
- uint32 off1 = f.get_uint32(); // offset to selection string
- uint32 off2 = f.get_uint32(); // offset to symbol set index array
-
- f.seek(off1);
- uint16 kind = 0; // HP-GL "Kind 1" symbol set value
- unsigned int j;
- for (j = 0; j < off2 - off1; j++) {
- unsigned char c = f.get_byte();
- if ('0' <= c && c <= '9') // value
- kind = kind*10 + (c - '0');
- else if ('A' <= c && c <= 'Z') // terminator
- kind = kind*32 + (c - 64);
- }
- symbol_set_table[i].select = kind;
- for (j = 0; j < 256; j++)
- symbol_set_table[i].index[j] = f.get_uint16();
- }
-
- symbol_set_selectors = (special_flag ? special_symbol_sets
- : text_symbol_sets);
- for (i = 0; symbol_set_selectors[i] != 0; i++) {
- unsigned int j;
- for (j = 0; j < n_symbol_sets; j++)
- if (symbol_set_table[j].select == symbol_set_selectors[i])
- break;
- if (j < n_symbol_sets) {
- for (int k = 0; k < 256; k++) {
- uint16 idx = symbol_set_table[j].index[k];
- if (idx != NO_GLYPH
- && char_table[idx].symbol_set == NO_SYMBOL_SET) {
- char_table[idx].symbol_set = symbol_set_table[j].select;
- char_table[idx].code = k;
- }
- }
- }
- }
-
- if (all_flag)
- return;
-
- symbol_set_selectors = (special_flag ? text_symbol_sets
- : special_symbol_sets);
- for (i = 0; symbol_set_selectors[i] != 0; i++) {
- unsigned int j;
- for (j = 0; j < n_symbol_sets; j++)
- if (symbol_set_table[j].select == symbol_set_selectors[i])
- break;
- if (j < n_symbol_sets) {
- for (int k = 0; k < 256; k++) {
- uint16 idx = symbol_set_table[j].index[k];
- if (idx != NO_GLYPH
- && char_table[idx].symbol_set == NO_SYMBOL_SET) {
- char_table[idx].symbol_set = symbol_set_table[j].select;
- char_table[idx].code = k;
- }
- }
- }
- }
- return;
-}
-
-static void
-read_char_table(File &f)
-{
- require_tag(charcode_tag);
- nchars = tag_info(charcode_tag).count;
- char_table = new char_info[nchars];
-
- f.seek(tag_info(charcode_tag).value);
- uint32 i;
- for (i = 0; i < nchars; i++)
- char_table[i].charcode = f.get_uint16();
-
- require_tag(width_tag);
- f.seek(tag_info(width_tag).value);
- for (i = 0; i < nchars; i++)
- char_table[i].width = f.get_uint16();
-
- require_tag(ascent_tag);
- f.seek(tag_info(ascent_tag).value);
- for (i = 0; i < nchars; i++) {
- char_table[i].ascent = f.get_uint16();
- if (char_table[i].ascent < 0)
- char_table[i].ascent = 0;
- }
-
- require_tag(descent_tag);
- f.seek(tag_info(descent_tag).value);
- for (i = 0; i < nchars; i++) {
- char_table[i].descent = f.get_uint16();
- if (char_table[i].descent > 0)
- char_table[i].descent = 0;
- }
-
- require_tag(left_extent_tag);
- f.seek(tag_info(left_extent_tag).value);
- for (i = 0; i < nchars; i++)
- char_table[i].left_extent = int16(f.get_uint16());
-
- require_tag(right_extent_tag);
- f.seek(tag_info(right_extent_tag).value);
- for (i = 0; i < nchars; i++)
- char_table[i].right_extent = f.get_uint16();
-}
-
-static void
-output_pclweight()
-{
- require_tag(stroke_weight_tag);
- int stroke_weight = tag_info(stroke_weight_tag).value;
- int pcl_stroke_weight;
- if (stroke_weight < 128)
- pcl_stroke_weight = -3;
- else if (stroke_weight == 128)
- pcl_stroke_weight = 0;
- else if (stroke_weight <= 145)
- pcl_stroke_weight = 1;
- else if (stroke_weight <= 179)
- pcl_stroke_weight = 3;
- else
- pcl_stroke_weight = 4;
- printf("pclweight %d\n", pcl_stroke_weight);
-}
-
-static void
-output_pclproportional()
-{
- require_tag(spacing_tag);
- printf("pclproportional %d\n", tag_info(spacing_tag).value == 0);
-}
-
-static void
-read_and_output_pcltypeface(File &f)
-{
- printf("pcltypeface ");
- require_tag(typeface_tag);
- if (tag_info(typeface_tag).count > 4) {
- f.seek(tag_info(typeface_tag).value);
- for (uint32 i = 0; i < tag_info(typeface_tag).count; i++) {
- unsigned char c = f.get_byte();
- if (c == '\0')
- break;
- putchar(c);
- }
- }
- else
- printf("%.4s", tag_info(typeface_tag).orig_value);
- printf("\n");
-}
-
-static void
-output_pclstyle()
-{
- unsigned pcl_style = 0;
- // older tfms don't have the posture tag
- if (tag_info(posture_tag).present) {
- if (tag_info(posture_tag).value)
- pcl_style |= 1;
- }
- else {
- require_tag(slant_tag);
- if (tag_info(slant_tag).value != 0)
- pcl_style |= 1;
- }
- require_tag(appearance_width_tag);
- if (tag_info(appearance_width_tag).value < 100) // guess
- pcl_style |= 4;
- printf("pclstyle %d\n", pcl_style);
-}
-
-static void
-output_slant()
-{
- require_tag(slant_tag);
- int slant = int16(tag_info(slant_tag).value);
- if (slant != 0)
- printf("slant %f\n", slant/100.0);
-}
-
-static void
-output_ligatures()
-{
- // don't use ligatures for fixed space font
- require_tag(spacing_tag);
- if (tag_info(spacing_tag).value != 0)
- return;
- static const char *ligature_names[] = {
- "fi", "fl", "ff", "ffi", "ffl"
- };
-
- static const char *ligature_chars[] = {
- "fi", "fl", "ff", "Fi", "Fl"
- };
-
- unsigned ligature_mask = 0;
- unsigned int i;
- for (i = 0; i < nchars; i++) {
- uint16 charcode = char_table[i].charcode;
- if (charcode < charcode_name_table_size
- && char_table[i].symbol_set != NO_SYMBOL_SET) {
- for (name_list *p = charcode_name_table[charcode]; p; p = p->next)
- for (unsigned int j = 0; j < SIZEOF(ligature_chars); j++)
- if (strcmp(p->name, ligature_chars[j]) == 0) {
- ligature_mask |= 1 << j;
- break;
- }
- }
- }
- if (ligature_mask) {
- printf("ligatures");
- for (i = 0; i < SIZEOF(ligature_names); i++)
- if (ligature_mask & (1 << i))
- printf(" %s", ligature_names[i]);
- printf(" 0\n");
- }
-}
-
-static void
-read_and_output_kernpairs(File &f)
-{
- if (tag_info(pair_kern_tag).present) {
- printf("kernpairs\n");
- f.seek(tag_info(pair_kern_tag).value);
- uint16 n_pairs = f.get_uint16();
- for (int i = 0; i < n_pairs; i++) {
- uint16 i1 = f.get_uint16();
- uint16 i2 = f.get_uint16();
- int16 val = int16(f.get_uint16());
- if (char_table[i1].symbol_set != NO_SYMBOL_SET
- && char_table[i2].symbol_set != NO_SYMBOL_SET
- && char_table[i1].charcode < charcode_name_table_size
- && char_table[i2].charcode < charcode_name_table_size) {
- for (name_list *p = charcode_name_table[char_table[i1].charcode];
- p;
- p = p->next)
- for (name_list *q = charcode_name_table[char_table[i2].charcode];
- q;
- q = q->next)
- if (!equal(p->name, UNNAMED) && !equal(q->name, UNNAMED))
- printf("%s %s %d\n", p->name, q->name, scale(val));
- }
- }
- }
-}
-
-static void
-output_charset(const int tfm_type)
-{
- require_tag(slant_tag);
- double slant_angle = int16(tag_info(slant_tag).value)*PI/18000.0;
- double slant = sin(slant_angle)/cos(slant_angle);
-
- if (italic_flag)
- require_tag(x_height_tag);
- require_tag(lower_ascent_tag);
- require_tag(lower_descent_tag);
-
- printf("charset\n");
- unsigned int i;
- for (i = 0; i < nchars; i++) {
- uint16 charcode = char_table[i].charcode;
-
- // the glyph is bound to one of the searched symbol sets
- if (char_table[i].symbol_set != NO_SYMBOL_SET) {
- // the character was in the map file
- if (charcode < charcode_name_table_size && charcode_name_table[charcode])
- printf("%s", charcode_name_table[charcode]->name);
- else if (!all_flag)
- continue;
- else if (tfm_type == MSL)
- fputs(hp_msl_to_ucode_name(charcode), stdout);
- else
- fputs(unicode_to_ucode_name(charcode), stdout);
-
- printf("\t%d,%d",
- scale(char_table[i].width), scale(char_table[i].ascent));
-
- int depth = scale(-char_table[i].descent);
- if (depth < 0)
- depth = 0;
- int italic_correction = 0;
- int left_italic_correction = 0;
- int subscript_correction = 0;
-
- if (italic_flag) {
- italic_correction = scale(char_table[i].right_extent
- - char_table[i].width
- + italic_sep);
- if (italic_correction < 0)
- italic_correction = 0;
- subscript_correction = int((tag_info(x_height_tag).value
- * slant * .8) + .5);
- if (subscript_correction > italic_correction)
- subscript_correction = italic_correction;
- left_italic_correction = scale(italic_sep
- - char_table[i].left_extent);
- }
-
- if (subscript_correction != 0)
- printf(",%d,%d,%d,%d",
- depth, italic_correction, left_italic_correction,
- subscript_correction);
- else if (left_italic_correction != 0)
- printf(",%d,%d,%d", depth, italic_correction, left_italic_correction);
- else if (italic_correction != 0)
- printf(",%d,%d", depth, italic_correction);
- else if (depth != 0)
- printf(",%d", depth);
- // This is fairly arbitrary. Fortunately it doesn't much matter.
- unsigned type = 0;
- if (char_table[i].ascent > int16(tag_info(lower_ascent_tag).value)*9/10)
- type |= 2;
- if (char_table[i].descent < int16(tag_info(lower_descent_tag).value)*9/10)
- type |= 1;
- printf("\t%d\t%d", type,
- char_table[i].symbol_set*256 + char_table[i].code);
-
- if (tfm_type == UNICODE) {
- if (charcode >= 0xE000 && charcode <= 0xF8FF)
- printf("\t-- HP PUA U+%04X", charcode);
- else
- printf("\t-- U+%04X", charcode);
- }
- else
- printf("\t-- MSL %4d", charcode);
- printf(" (%3s %3d)\n",
- show_symset(char_table[i].symbol_set), char_table[i].code);
-
- if (charcode < charcode_name_table_size
- && charcode_name_table[charcode])
- for (name_list *p = charcode_name_table[charcode]->next;
- p; p = p->next)
- printf("%s\t\"\n", p->name);
- }
- // warnings about characters in mapfile not found in TFM
- else if (charcode < charcode_name_table_size
- && charcode_name_table[charcode]) {
- char *name = charcode_name_table[charcode]->name;
- // don't warn about Unicode or unnamed glyphs
- // that aren't in the the TFM file
- if (tfm_type == UNICODE && !quiet_flag && !equal(name, UNNAMED)
- && !is_uname(name)) {
- fprintf(stderr, "%s: warning: symbol U+%04X (%s",
- program_name, charcode, name);
- for (name_list *p = charcode_name_table[charcode]->next;
- p; p = p->next)
- fprintf(stderr, ", %s", p->name);
- fprintf(stderr, ") not in any searched symbol set\n");
- }
- else if (!quiet_flag && !equal(name, UNNAMED) && !is_uname(name)) {
- fprintf(stderr, "%s: warning: symbol MSL %d (%s",
- program_name, charcode, name);
- for (name_list *p = charcode_name_table[charcode]->next;
- p; p = p->next)
- fprintf(stderr, ", %s", p->name);
- fprintf(stderr, ") not in any searched symbol set\n");
- }
- }
- }
-}
-
-#define em_fract(a) (upem >= 0 ? double(a)/upem : 0)
-
-static void
-dump_tags(File &f)
-{
- double upem = -1.0;
-
- printf("TFM tags\n"
- "\n"
- "tag# type count value\n"
- "---------------------\n");
-
- for (int i = min_tag; i <= max_tag; i++) {
- enum tag_type t = tag_type(i);
- if (tag_info(t).present) {
- printf("%4d %4d %5d", i, tag_info(t).type, tag_info(t).count);
- switch (tag_info(t).type) {
- case BYTE_TYPE:
- case USHORT_TYPE:
- printf(" %5u", tag_info(t).value);
- switch (i) {
- case type_tag:
- printf(" Font Type ");
- switch (tag_info(t).value) {
- case MSL:
- case SYMSET:
- printf("(Intellifont)");
- break;
- case UNICODE:
- printf("(TrueType)");
- }
- break;
- case charcode_tag:
- printf(" Number of Symbols (%u)", tag_info(t).count);
- break;
- case symbol_set_tag:
- printf(" Symbol Sets (%u): ",
- tag_info(symbol_set_tag).count / 14);
- dump_symbol_sets(f);
- break;
- case type_structure_tag:
- printf(" Type Structure (%u)", tag_info(t).value);
- break;
- case stroke_weight_tag:
- printf(" Stroke Weight (%u)", tag_info(t).value);
- break;
- case spacing_tag:
- printf(" Spacing ");
- switch (tag_info(t).value) {
- case 0:
- printf("(Proportional)");
- break;
- case 1:
- printf("(Fixed Pitch: %u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- }
- break;
- case appearance_width_tag:
- printf(" Appearance Width (%u)", tag_info(t).value);
- break;
- case serif_style_tag:
- printf(" Serif Style (%u)", tag_info(t).value);
- break;
- case posture_tag:
- printf(" Posture (%s)", tag_info(t).value == 0
- ? "Upright"
- : tag_info(t).value == 1
- ? "Italic"
- : "Alternate Italic");
- break;
- case max_width_tag:
- printf(" Maximum Width (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case word_spacing_tag:
- printf(" Interword Spacing (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case recommended_line_spacing_tag:
- printf(" Recommended Line Spacing (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case x_height_tag:
- printf(" x-Height (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case cap_height_tag:
- printf(" Cap Height (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case max_ascent_tag:
- printf(" Maximum Ascent (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case lower_ascent_tag:
- printf(" Lowercase Ascent (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case underscore_thickness_tag:
- printf(" Underscore Thickness (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case uppercase_accent_height_tag:
- printf(" Uppercase Accent Height (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case lowercase_accent_height_tag:
- printf(" Lowercase Accent Height (%u DU: %.2f em)", tag_info(t).value,
- em_fract(tag_info(t).value));
- break;
- case width_tag:
- printf(" Horizontal Escapement array");
- break;
- case vertical_escapement_tag:
- printf(" Vertical Escapement array");
- break;
- case right_extent_tag:
- printf(" Right Extent array");
- break;
- case ascent_tag:
- printf(" Character Ascent array");
- break;
- case pair_kern_tag:
- f.seek(tag_info(t).value);
- printf(" Kern Pairs (%u)", f.get_uint16());
- break;
- case panose_tag:
- printf(" PANOSE Classification array");
- break;
- }
- break;
- case SIGNED_SHORT_TYPE:
- printf(" %5d", int16(tag_info(t).value));
- switch (i) {
- case slant_tag:
- printf(" Slant (%.2f degrees)", double(tag_info(t).value) / 100);
- break;
- case max_descent_tag:
- printf(" Maximum Descent (%d DU: %.2f em)", int16(tag_info(t).value),
- em_fract(int16(tag_info(t).value)));
- break;
- case lower_descent_tag:
- printf(" Lowercase Descent (%d DU: %.2f em)", int16(tag_info(t).value),
- em_fract(int16(tag_info(t).value)));
- break;
- case underscore_depth_tag:
- printf(" Underscore Depth (%d DU: %.2f em)", int16(tag_info(t).value),
- em_fract(int16(tag_info(t).value)));
- break;
- case left_extent_tag:
- printf(" Left Extent array");
- break;
- // The type of this tag has changed from SHORT to SIGNED SHORT
- // in TFM version 1.3.0.
- case ascent_tag:
- printf(" Character Ascent array");
- break;
- case descent_tag:
- printf(" Character Descent array");
- break;
- }
- break;
- case RATIONAL_TYPE:
- printf(" %5u", tag_info(t).value);
- switch (i) {
- case inches_per_point_tag:
- printf(" Inches per Point");
- break;
- case nominal_point_size_tag:
- printf(" Nominal Point Size");
- break;
- case design_units_per_em_tag:
- printf(" Design Units per Em");
- break;
- case average_width_tag:
- printf(" Average Width");
- break;
- }
- if (tag_info(t).count == 1) {
- f.seek(tag_info(t).value);
- uint32 num = f.get_uint32();
- uint32 den = f.get_uint32();
- if (i == design_units_per_em_tag)
- upem = double(num) / den;
- printf(" (%u/%u = %g)", num, den, double(num)/den);
- }
- break;
- case ASCII_TYPE:
- printf(" %5u ", tag_info(t).value);
- switch (i) {
- case comment_tag:
- printf("Comment ");
- break;
- case copyright_tag:
- printf("Copyright ");
- break;
- case unique_identifier_tag:
- printf("Unique ID ");
- break;
- case font_name_tag:
- printf("Typeface Name ");
- break;
- case typeface_source_tag:
- printf("Typeface Source ");
- break;
- case typeface_tag:
- printf("PCL Typeface ");
- break;
- }
- dump_ascii(f, t);
- }
- putchar('\n');
- }
- }
- putchar('\n');
-}
-#undef em_fract
-
-static void
-dump_ascii(File &f, tag_type t)
-{
- putchar('"');
- if (tag_info(t).count > 4) {
- int count = tag_info(t).count;
- f.seek(tag_info(t).value);
- while (--count)
- printf("%c", f.get_byte());
- }
- else
- printf("%.4s", tag_info(t).orig_value);
- putchar('"');
-}
-
-static void
-dump_symbol_sets(File &f)
-{
- uint32 symbol_set_dir_length = tag_info(symbol_set_tag).count;
- uint32 num_symbol_sets = symbol_set_dir_length / 14;
-
- for (uint32 i = 0; i < num_symbol_sets; i++) {
- f.seek(tag_info(symbol_set_tag).value + i * 14);
- (void)f.get_uint32(); // offset to symbol set name
- uint32 off1 = f.get_uint32(); // offset to selection string
- uint32 off2 = f.get_uint32(); // offset to symbol set index array
- f.seek(off1);
- for (uint32 j = 0; j < off2 - off1; j++) {
- unsigned char c = f.get_byte();
- if ('0' <= c && c <= '9')
- putchar(c);
- else if ('A' <= c && c <= 'Z')
- printf(i < num_symbol_sets - 1 ? "%c," : "%c", c);
- }
- }
-}
-
-static void
-dump_symbols(int tfm_type)
-{
- printf("Symbols:\n"
- "\n"
- " glyph id# symbol set name(s)\n"
- "----------------------------------\n");
- for (uint32 i = 0; i < nchars; i++) {
- uint16 charcode = char_table[i].charcode;
- if (charcode < charcode_name_table_size
- && charcode_name_table[charcode]) {
- if (char_table[i].symbol_set != NO_SYMBOL_SET) {
- printf(tfm_type == UNICODE ? "%4d (U+%04X) (%3s %3d) %s"
- : "%4d (MSL %4d) (%3s %3d) %s",
- i, charcode,
- show_symset(char_table[i].symbol_set),
- char_table[i].code,
- charcode_name_table[charcode]->name);
- for (name_list *p = charcode_name_table[charcode]->next;
- p; p = p->next)
- printf(", %s", p->name);
- putchar('\n');
- }
- }
- else {
- printf(tfm_type == UNICODE ? "%4d (U+%04X) "
- : "%4d (MSL %4d) ",
- i, charcode);
- if (char_table[i].symbol_set != NO_SYMBOL_SET)
- printf("(%3s %3d)",
- show_symset(char_table[i].symbol_set), char_table[i].code);
- putchar('\n');
- }
- }
- putchar('\n');
-}
-
-static char *
-show_symset(unsigned int symset)
-{
- static char symset_str[8];
-
- sprintf(symset_str, "%d%c", symset / 32, (symset & 31) + 64);
- return symset_str;
-}
-
-static char *
-hp_msl_to_ucode_name(int msl)
-{
- char codestr[8];
-
- sprintf(codestr, "%d", msl);
- const char *ustr = hp_msl_to_unicode_code(codestr);
- if (ustr == NULL)
- ustr = UNNAMED;
- else {
- char *nonum;
- int ucode = int(strtol(ustr, &nonum, 16));
- // don't allow PUA code points as Unicode names
- if (ucode >= 0xE000 && ucode <= 0xF8FF)
- ustr = UNNAMED;
- }
- if (!equal(ustr, UNNAMED)) {
- const char *uname_decomposed = decompose_unicode(ustr);
- if (uname_decomposed)
- // 1st char is the number of components
- ustr = uname_decomposed + 1;
- }
- char *value = new char[strlen(ustr) + 1];
- sprintf(value, equal(ustr, UNNAMED) ? ustr : "u%s", ustr);
- return value;
-}
-
-static char *
-unicode_to_ucode_name(int ucode)
-{
- const char *ustr;
- char codestr[8];
-
- // don't allow PUA code points as Unicode names
- if (ucode >= 0xE000 && ucode <= 0xF8FF)
- ustr = UNNAMED;
- else {
- sprintf(codestr, "%04X", ucode);
- ustr = codestr;
- }
- if (!equal(ustr, UNNAMED)) {
- const char *uname_decomposed = decompose_unicode(ustr);
- if (uname_decomposed)
- // 1st char is the number of components
- ustr = uname_decomposed + 1;
- }
- char *value = new char[strlen(ustr) + 1];
- sprintf(value, equal(ustr, UNNAMED) ? ustr : "u%s", ustr);
- return value;
-}
-
-static int
-is_uname(char *name)
-{
- size_t i;
- size_t len = strlen(name);
- if (len % 5)
- return 0;
-
- if (name[0] != 'u')
- return 0;
- for (i = 1; i < 4; i++)
- if (!csxdigit(name[i]))
- return 0;
- for (i = 5; i < len; i++)
- if (i % 5 ? !csxdigit(name[i]) : name[i] != '_')
- return 0;
-
- return 1;
-}
-
-static int
-read_map(const char *file, const int tfm_type)
-{
- errno = 0;
- FILE *fp = fopen(file, "r");
- if (!fp) {
- error("can't open `%1': %2", file, strerror(errno));
- return 0;
- }
- current_filename = file;
- char buf[512];
- current_lineno = 0;
- char *nonum;
- while (fgets(buf, int(sizeof(buf)), fp)) {
- current_lineno++;
- char *ptr = buf;
- while (csspace(*ptr))
- ptr++;
- if (*ptr == '\0' || *ptr == '#')
- continue;
- ptr = strtok(ptr, " \n\t");
- if (!ptr)
- continue;
-
- int msl_code = int(strtol(ptr, &nonum, 10));
- if (*nonum != '\0') {
- if (csxdigit(*nonum))
- error("bad MSL map: got hex code (%1)", ptr);
- else if (ptr == nonum)
- error("bad MSL map: bad MSL code (%1)", ptr);
- else
- error("bad MSL map");
- fclose(fp);
- return 0;
- }
-
- ptr = strtok(NULL, " \n\t");
- if (!ptr)
- continue;
- int unicode = int(strtol(ptr, &nonum, 16));
- if (*nonum != '\0') {
- if (ptr == nonum)
- error("bad Unicode value (%1)", ptr);
- else
- error("bad Unicode map");
- fclose(fp);
- return 0;
- }
- if (strlen(ptr) != 4) {
- error("bad Unicode value (%1)", ptr);
- return 0;
- }
-
- int n = tfm_type == MSL ? msl_code : unicode;
- if (tfm_type == UNICODE && n > 0xFFFF) {
- // greatest value supported by TFM files
- error("bad Unicode value (%1): greatest value is 0xFFFF", ptr);
- fclose(fp);
- return 0;
- }
- else if (n < 0) {
- error("negative code value (%1)", ptr);
- fclose(fp);
- return 0;
- }
-
- ptr = strtok(NULL, " \n\t");
- if (!ptr) { // groff name
- error("missing name(s)");
- fclose(fp);
- return 0;
- }
- // leave decomposed Unicode values alone
- else if (is_uname(ptr) && !is_decomposed(ptr))
- ptr = unicode_to_ucode_name(strtol(ptr + 1, &nonum, 16));
-
- if (size_t(n) >= charcode_name_table_size) {
- size_t old_size = charcode_name_table_size;
- name_list **old_table = charcode_name_table;
- charcode_name_table_size = n + 256;
- charcode_name_table = new name_list *[charcode_name_table_size];
- if (old_table) {
- memcpy(charcode_name_table, old_table, old_size*sizeof(name_list *));
- a_delete old_table;
- }
- for (size_t i = old_size; i < charcode_name_table_size; i++)
- charcode_name_table[i] = NULL;
- }
-
- // a '#' that isn't the first groff name begins a comment
- for (int names = 1; ptr; ptr = strtok(NULL, " \n\t")) {
- if (names++ > 1 && *ptr == '#')
- break;
- charcode_name_table[n] = new name_list(ptr, charcode_name_table[n]);
- }
- }
- fclose(fp);
- return 1;
-}
-
-static const char *
-xbasename(const char *s)
-{
- // DIR_SEPS[] are possible directory separator characters, see
- // nonposix.h. We want the rightmost separator of all possible
- // ones. Example: d:/foo\\bar.
- const char *b = strrchr(s, DIR_SEPS[0]), *b1;
- const char *sep = &DIR_SEPS[1];
-
- while (*sep)
- {
- b1 = strrchr(s, *sep);
- if (b1 && (!b || b1 > b))
- b = b1;
- sep++;
- }
- return b ? b + 1 : s;
-}
diff --git a/contrib/groff/src/utils/hpftodit/hpftodit.man b/contrib/groff/src/utils/hpftodit/hpftodit.man
deleted file mode 100644
index 429f516d8900..000000000000
--- a/contrib/groff/src/utils/hpftodit/hpftodit.man
+++ /dev/null
@@ -1,311 +0,0 @@
-.tr ~
-.ig
-Copyright (C) 1994-2000, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.de CW
-.ie \\n(.$>2 \&\\$1\f(CR\\$2\fP\\$3
-.el \&\f(CR\\$1\fP\\$2
-..
-.tr ~
-.TH HPFTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.\" --------------------------------------------------------------------------
-.SH NAME
-.\" --------------------------------------------------------------------------
-hpftodit \- create font description files for use with groff \-Tlj4
-.\" --------------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------------
-.B hpftodit
-[
-.B \-adqsv
-]
-[
-.BI \-i n
-]
-.I tfm_file
-.I map_file
-.I font
-.PP
-It is possible to have whitespace between the
-.B \-i
-option and its parameter.
-.\" --------------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------------
-.B hpftodit
-creates a font file for use with a Hewlett-Packard LaserJet~4\(enseries
-(or newer) printer with
-.BR "groff \-Tlj4" ,
-using data from an HP tagged font metric (TFM) file.
-.I tfm_file
-is the name of the TFM file for the font; Intellifont and
-TrueType TFM files are supported, but symbol set TFM files are not.
-.I map_file
-is a file giving the groff names for characters in the font; this file
-should consist of a sequence of lines of the form:
-.IP
-.I
-m u c1 c2 \fR.\|.\|. [
-.CW #
-.I comment
-]
-.LP
-where
-.I m
-is a decimal integer giving the MSL number of the character,
-.I u
-is a hexadecimal integer giving the Unicode value of the character,
-and
-.IR c1 ,
-.IR c2 ", .\|.\|."
-are the groff names of the character.
-The values can be separated by any whitespace; the Unicode value must
-use uppercase digits A\^\(en\^F, and must be without a leading
-.CW ` 0x ',
-.CW ` u ',
-or
-.CW ` U+ '.
-Unicode values corresponding to composite glyphs are decomposed; e.g.,
-.CW ` u00C0 '
-becomes
-.CW ` u0041_0300 '.
-The name for a glyph without a groff name may be given as
-.CW u \fIXXXX\fP
-if the glyph corresponds to a Unicode value, or as an unnamed glyph
-.CW ` --- '.
-If the given Unicode value is in the Private Use Area
-(0xE000\^\(en\^0xF8FF), the glyph is included as an unnamed glyph.
-Refer to
-.BR groff_diff (@MAN1EXT@)
-for additional information about unnamed glyphs and how to access them.
-.LP
-Blank lines and lines beginning with
-.CW ` # '
-are ignored.
-A
-.CW ` # '
-following one or more groff names begins a comment.
-Because
-.CW ` # '
-is a valid groff name, it must appear first in a list of
-groff names if a comment is included, e.g.,
-.IP
-.CW "3 0023 # # number sign"
-.LP
-or
-.IP
-.CW "3 0023 # sh # number sign"
-.LP
-rather than
-.IP
-.CW "3 0023 sh # # number sign"
-.LP
-which will treat the first
-.CW ` # '
-as the beginning of the comment.
-.LP
-.I font
-is the name of the groff font file.
-The groff font file is written to
-.IR font ;
-if
-.I font
-is specified as
-.CW ` - ',
-the output is written to the standard output.
-.LP
-The
-.B \-s
-option should be given if the font is special
-(a font is
-.I special
-if
-.B troff
-should search it whenever
-a character is not found in the current font).
-If the font is special,
-it should be listed in the
-.B fonts
-command in the DESC file;
-if it is not special, there is no need to list it, since
-.B troff
-can automatically mount it when it's first used.
-.LP
-If the
-.B \-i
-option is used,
-.B hpftodit
-automatically will generate an italic correction,
-a left italic correction and a subscript correction
-for each character
-(the significance of these parameters is explained in
-.BR groff_font (@MAN5EXT@)).
-.\" --------------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------------
-.TP
-.B \-a
-Include characters in the TFM file that are not included in the map
-file.
-A glyph with corresponding Unicode value is given the name
-.RI u XXXX ;
-a glyph without a Unicode value is included as an unnamed glyph
-\&`\-\^\-\^\-'.
-A glyph with a Unicode value in the Private Use Area
-(0xE000\^\(en\^0xF8FF) also is included as an unnamed glyph.
-.IP
-This option provides a simple means of adding Unicode-named and unnamed
-glyphs to a font without including them in the map file, but it affords
-little control over which glyphs are placed in a regular font and which
-are placed in a special font.
-The presence or absence of the
-.B \-s
-option has some effect on which glyphs are included: without the
-.B \-s
-option, only the \(lqtext\(rq symbol sets are searched for matching
-glyphs; with the
-.B \-s
-option, only the \(lqmathematical\(rq symbol sets
-are searched.
-Nonetheless, restricting the symbol sets searched isn't very
-selective\(emmany glyphs are placed in both regular and special fonts.
-Normally, the
-.B \-a
-option should be used only as a last resort.
-.\" --------------------------------------------------------------------------
-.TP
-.B \-d
-Dump information about the TFM file to the standard output; this option
-can be useful for ensuring that a TFM file is a proper match for a font,
-and that the contents of the TFM file are suitable.
-The information includes the values of important TFM tags, and a listing
-(by MSL number for Intellifont TFM files or by Unicode value for
-TrueType TFM files) of the glyphs included in the TFM file.
-The unit of measure `DU' for some tags indicates design units; there are
-8782 design units per em for Intellifont fonts, and 2048 design units
-per em for TrueType fonts.
-Note that the accessibility of a glyph depends on its inclusion in a
-symbol set; some TFM files list many glyphs but only a few symbol sets.
-.IP
-The glyph listing includes the glyph index within the TFM file, the MSL
-or Unicode value, and the symbol set and character code that will be
-used to print the glyph.
-If
-.I map_file
-is given,
-groff names are given for matching glyphs.
-If only the glyph index and MSL or Unicode value are given, the glyph
-does not appear in any supported symbol set and cannot be printed.
-.IP
-With the
-.B \-d
-option,
-.I map_file
-is optional, and
-.I font
-is ignored if given.
-.\" --------------------------------------------------------------------------
-.TP
-.B \-q
-Suppress warnings about characters in the map file that were not found
-in the TFM file.
-Warnings never are given for unnamed glyphs or by glyphs named by their
-Unicode values.
-This option is useful when sending the output of
-.B hpftodit
-to the standard output.
-.\" --------------------------------------------------------------------------
-.TP
-.B \-v
-Print the
-.B hpftodit
-version number.
-.\" --------------------------------------------------------------------------
-.TP
-.B \-s
-The font is special.
-This option adds the
-.B special
-command to the font file, and affects the order in which HP symbol sets
-are searched for each glyph.
-Without the
-.B \-s
-option, the \(lqtext\(rq sets are searched before
-the \(lqmathematical\(rq symbol sets.
-With the
-.B \-s
-option, the search order is reversed.
-.\" --------------------------------------------------------------------------
-.TP
-.BI \-i n
-Generate an italic correction for each character so that the character's
-width plus the character's italic correction is equal to
-.I n
-thousandths of an em plus the amount by which the right edge of the
-character's bounding is to the right of the character's origin.
-If this would result in a negative italic correction, use a zero italic
-correction instead.
-.IP
-Also generate a subscript correction equal to the
-product of the tangent of the slant of the font and
-four fifths of the x-height of the font.
-If this would result in a subscript correction greater than the italic
-correction, use a subscript correction equal to the italic correction
-instead.
-.IP
-Also generate a left italic correction for each character
-equal to
-.I n
-thousandths of an em plus the amount by which the left edge of the
-character's bounding box is to the left of the character's origin.
-The left italic correction may be negative.
-.IP
-This option normally is needed only with italic or oblique fonts;
-a value of 50 (0.05 em) usually is a reasonable choice.
-.\" --------------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------------
-.ad 0
-.TP \w'\fB@FONTDIR@/devlj4/generate/\fP\fI*\fP.map'u+2n
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.TP
-.BI @FONTDIR@/devlj4/generate/ * .map
-Symbol mapping files
-.\" --------------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR groff_diff (@MAN1EXT@),
-.BR grolj4 (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR lj4_font (@MAN5EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/hpftodit/hpuni.cpp b/contrib/groff/src/utils/hpftodit/hpuni.cpp
deleted file mode 100644
index 23a1eb052851..000000000000
--- a/contrib/groff/src/utils/hpftodit/hpuni.cpp
+++ /dev/null
@@ -1,698 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- Written by Jeff Conrad (jeff_conrad@msn.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct hp_msl_to_unicode {
- char *value;
-};
-
-declare_ptable(hp_msl_to_unicode)
-implement_ptable(hp_msl_to_unicode)
-
-PTABLE(hp_msl_to_unicode) hp_msl_to_unicode_table;
-
-struct S {
- const char *key;
- const char *value;
-} hp_msl_to_unicode_list[] = {
- { "1", "0021", }, // Exclamation Mark
- { "2", "0022", }, // Neutral Double Quote
- { "3", "0023", }, // Number Sign
- { "4", "0024", }, // Dollar Sign
- { "5", "0025", }, // Per Cent Sign
- { "6", "0026", }, // Ampersand
- { "8", "2019", }, // Single Close Quote (9)
- { "9", "0028", }, // Left Parenthesis
- { "10", "0029", }, // Right Parenthesis
- { "11", "002A", }, // Asterisk
- { "12", "002B", }, // Plus Sign
- { "13", "002C", }, // Comma, or Decimal Separator
- { "14", "002D", }, // Hyphen
- { "15", "002E", }, // Period, or Full Stop
- { "16", "002F", }, // Solidus, or Slash
- { "17", "0030", }, // Numeral Zero
- { "18", "0031", }, // Numeral One
- { "19", "0032", }, // Numeral Two
- { "20", "0033", }, // Numeral Three
- { "21", "0034", }, // Numeral Four
- { "22", "0035", }, // Numeral Five
- { "23", "0036", }, // Numeral Six
- { "24", "0037", }, // Numeral Seven
- { "25", "0038", }, // Numeral Eight
- { "26", "0039", }, // Numeral Nine
- { "27", "003A", }, // Colon
- { "28", "003B", }, // Semicolon
- { "29", "003C", }, // Less Than Sign
- { "30", "003D", }, // Equals Sign
- { "31", "003E", }, // Greater Than Sign
- { "32", "003F", }, // Question Mark
- { "33", "0040", }, // Commercial At
- { "34", "0041", }, // Uppercase A
- { "35", "0042", }, // Uppercase B
- { "36", "0043", }, // Uppercase C
- { "37", "0044", }, // Uppercase D
- { "38", "0045", }, // Uppercase E
- { "39", "0046", }, // Uppercase F
- { "40", "0047", }, // Uppercase G
- { "41", "0048", }, // Uppercase H
- { "42", "0049", }, // Uppercase I
- { "43", "004A", }, // Uppercase J
- { "44", "004B", }, // Uppercase K
- { "45", "004C", }, // Uppercase L
- { "46", "004D", }, // Uppercase M
- { "47", "004E", }, // Uppercase N
- { "48", "004F", }, // Uppercase O
- { "49", "0050", }, // Uppercase P
- { "50", "0051", }, // Uppercase Q
- { "51", "0052", }, // Uppercase R
- { "52", "0053", }, // Uppercase S
- { "53", "0054", }, // Uppercase T
- { "54", "0055", }, // Uppercase U
- { "55", "0056", }, // Uppercase V
- { "56", "0057", }, // Uppercase W
- { "57", "0058", }, // Uppercase X
- { "58", "0059", }, // Uppercase Y
- { "59", "005A", }, // Uppercase Z
- { "60", "005B", }, // Left Bracket
- { "61", "005C", }, // Reverse Solidus, or Backslash
- { "62", "005D", }, // Right Bracket
- { "63", "005E", }, // Circumflex, Exponent, or Pointer
- { "64", "005F", }, // Underline or Underscore Character
- { "66", "2018", }, // Single Open Quote (6)
- { "67", "0061", }, // Lowercase A
- { "68", "0062", }, // Lowercase B
- { "69", "0063", }, // Lowercase C
- { "70", "0064", }, // Lowercase D
- { "71", "0065", }, // Lowercase E
- { "72", "0066", }, // Lowercase F
- { "73", "0067", }, // Lowercase G
- { "74", "0068", }, // Lowercase H
- { "75", "0069", }, // Lowercase I
- { "76", "006A", }, // Lowercase J
- { "77", "006B", }, // Lowercase K
- { "78", "006C", }, // Lowercase L
- { "79", "006D", }, // Lowercase M
- { "80", "006E", }, // Lowercase N
- { "81", "006F", }, // Lowercase O
- { "82", "0070", }, // Lowercase P
- { "83", "0071", }, // Lowercase Q
- { "84", "0072", }, // Lowercase R
- { "85", "0073", }, // Lowercase S
- { "86", "0074", }, // Lowercase T
- { "87", "0075", }, // Lowercase U
- { "88", "0076", }, // Lowercase V
- { "89", "0077", }, // Lowercase W
- { "90", "0078", }, // Lowercase X
- { "91", "0079", }, // Lowercase Y
- { "92", "007A", }, // Lowercase Z
- { "93", "007B", }, // Left Brace
- { "94", "007C", }, // Long Vertical Mark
- { "95", "007D", }, // Right Brace
- { "96", "007E", }, // One Wavy Line Approximate
- { "97", "2592", }, // Medium Shading Character
- { "99", "00C0", }, // Uppercase A Grave
- { "100", "00C2", }, // Uppercase A Circumflex
- { "101", "00C8", }, // Uppercase E Grave
- { "102", "00CA", }, // Uppercase E Circumflex
- { "103", "00CB", }, // Uppercase E Dieresis
- { "104", "00CE", }, // Uppercase I Circumflex
- { "105", "00CF", }, // Uppercase I Dieresis
- { "106", "00B4", }, // Lowercase Acute Accent (Spacing)
- { "107", "0060", }, // Lowercase Grave Accent (Spacing)
- { "108", "02C6", }, // Lowercase Circumflex Accent (Spacing)
- { "109", "00A8", }, // Lowercase Dieresis Accent (Spacing)
- { "110", "02DC", }, // Lowercase Tilde Accent (Spacing)
- { "111", "00D9", }, // Uppercase U Grave
- { "112", "00DB", }, // Uppercase U Circumflex
- { "113", "00AF", }, // Overline, or Overscore Character
- { "114", "00DD", }, // Uppercase Y Acute
- { "115", "00FD", }, // Lowercase Y Acute
- { "116", "00B0", }, // Degree Sign
- { "117", "00C7", }, // Uppercase C Cedilla
- { "118", "00E7", }, // Lowercase C Cedilla
- { "119", "00D1", }, // Uppercase N Tilde
- { "120", "00F1", }, // Lowercase N Tilde
- { "121", "00A1", }, // Inverted Exclamation
- { "122", "00BF", }, // Inverted Question Mark
- { "123", "00A4", }, // Currency Symbol
- { "124", "00A3", }, // Pound Sterling Sign
- { "125", "00A5", }, // Yen Sign
- { "126", "00A7", }, // Section Mark
- { "127", "0192", }, // Florin Sign
- { "128", "00A2", }, // Cent Sign
- { "129", "00E2", }, // Lowercase A Circumflex
- { "130", "00EA", }, // Lowercase E Circumflex
- { "131", "00F4", }, // Lowercase O Circumflex
- { "132", "00FB", }, // Lowercase U Circumflex
- { "133", "00E1", }, // Lowercase A Acute
- { "134", "00E9", }, // Lowercase E Acute
- { "135", "00F3", }, // Lowercase O Acute
- { "136", "00FA", }, // Lowercase U Acute
- { "137", "00E0", }, // Lowercase A Grave
- { "138", "00E8", }, // Lowercase E Grave
- { "139", "00F2", }, // Lowercase O Grave
- { "140", "00F9", }, // Lowercase U Grave
- { "141", "00E4", }, // Lowercase A Dieresis
- { "142", "00EB", }, // Lowercase E Dieresis
- { "143", "00F6", }, // Lowercase O Dieresis
- { "144", "00FC", }, // Lowercase U Dieresis
- { "145", "00C5", }, // Uppercase A Ring
- { "146", "00EE", }, // Lowercase I Circumflex
- { "147", "00D8", }, // Uppercase O Oblique
- { "148", "00C6", }, // Uppercase AE Diphthong
- { "149", "00E5", }, // Lowercase A Ring
- { "150", "00ED", }, // Lowercase I Acute
- { "151", "00F8", }, // Lowercase O Oblique
- { "152", "00E6", }, // Lowercase AE Diphthong
- { "153", "00C4", }, // Uppercase A Dieresis
- { "154", "00EC", }, // Lowercase I Grave
- { "155", "00D6", }, // Uppercase O Dieresis
- { "156", "00DC", }, // Uppercase U Dieresis
- { "157", "00C9", }, // Uppercase E Acute
- { "158", "00EF", }, // Lowercase I Dieresis
- { "159", "00DF", }, // Lowercase Es-zet Ligature
- { "160", "00D4", }, // Uppercase O Circumflex
- { "161", "00C1", }, // Uppercase A Acute
- { "162", "00C3", }, // Uppercase A Tilde
- { "163", "00E3", }, // Lowercase A Tilde
- { "164", "00D0", }, // Uppercase Eth
-//{ "164", "0110", }, // Uppercase D-Stroke
- { "165", "00F0", }, // Lowercase Eth
- { "166", "00CD", }, // Uppercase I Acute
- { "167", "00CC", }, // Uppercase I Grave
- { "168", "00D3", }, // Uppercase O Acute
- { "169", "00D2", }, // Uppercase O Grave
- { "170", "00D5", }, // Uppercase O Tilde
- { "171", "00F5", }, // Lowercase O Tilde
- { "172", "0160", }, // Uppercase S Hacek
- { "173", "0161", }, // Lowercase S Hacek
- { "174", "00DA", }, // Uppercase U Acute
- { "175", "0178", }, // Uppercase Y Dieresis
- { "176", "00FF", }, // Lowercase Y Dieresis
- { "177", "00DE", }, // Uppercase Thorn
- { "178", "00FE", }, // Lowercase Thorn
- { "180", "00B5", }, // Lowercase Greek Mu, or Micro
- { "181", "00B6", }, // Pilcrow, or Paragraph Sign
- { "182", "00BE", }, // Vulgar Fraction 3/4
- { "183", "2212", }, // Minus Sign
- { "184", "00BC", }, // Vulgar Fraction 1/4
- { "185", "00BD", }, // Vulgar Fraction 1/2
- { "186", "00AA", }, // Female Ordinal
- { "187", "00BA", }, // Male Ordinal
- { "188", "00AB", }, // Left Pointing Double Angle Quote
- { "189", "25A0", }, // Medium Solid Square Box
- { "190", "00BB", }, // Right Pointing Double Angle Quote
- { "191", "00B1", }, // Plus Over Minus Sign
- { "192", "00A6", }, // Broken Vertical Mark
- { "193", "00A9", }, // Copyright Sign
- { "194", "00AC", }, // Not Sign
- { "195", "00AD", }, // Soft Hyphen
- { "196", "00AE", }, // Registered Sign
- { "197", "00B2", }, // Superior Numeral 2
- { "198", "00B3", }, // Superior Numeral 3
- { "199", "00B8", }, // Lowercase Cedilla (Spacing)
- { "200", "00B9", }, // Superior Numeral 1
- { "201", "00D7", }, // Multiply Sign
- { "202", "00F7", }, // Divide Sign
- { "203", "263A", }, // Open Smiling Face
- { "204", "263B", }, // Solid Smiling Face
- { "205", "2665", }, // Solid Heart, Card Suit
- { "206", "2666", }, // Solid Diamond, Card Suit
- { "207", "2663", }, // Solid Club, Card Suit
- { "208", "2660", }, // Solid Spade, Card Suit
- { "209", "25CF", }, // Medium Solid Round Bullet
- { "210", "25D8", }, // Large Solid square with White Dot
- { "211", "EFFD", }, // Large Open Round Bullet
- { "212", "25D9", }, // Large Solid square with White Circle
- { "213", "2642", }, // Male Symbol
- { "214", "2640", }, // Female Symbol
- { "215", "266A", }, // Musical Note
- { "216", "266B", }, // Pair Of Musical Notes
- { "217", "263C", }, // Compass, or Eight Pointed Sun
- { "218", "25BA", }, // Right Solid Arrowhead
- { "219", "25C4", }, // Left Solid Arrowhead
- { "220", "2195", }, // Up/Down Arrow
- { "221", "203C", }, // Double Exclamation Mark
- { "222", "25AC", }, // Thick Horizontal Mark
- { "223", "21A8", }, // Up/Down Arrow Baseline
- { "224", "2191", }, // Up Arrow
- { "225", "2193", }, // Down Arrow
- { "226", "2192", }, // Right Arrow
- { "227", "2190", }, // Left Arrow
- { "229", "2194", }, // Left/Right Arrow
- { "230", "25B2", }, // Up Solid Arrowhead
- { "231", "25BC", }, // Down Solid Arrowhead
- { "232", "20A7", }, // Pesetas Sign
- { "233", "2310", }, // Reversed Not Sign
- { "234", "2591", }, // Light Shading Character
- { "235", "2593", }, // Dark Shading Character
- { "236", "2502", }, // Box Draw Line, Vert. 1
- { "237", "2524", }, // Box Draw Right Tee, Vert. 1 Horiz. 1
- { "238", "2561", }, // Box Draw Right Tee, Vert. 1 Horiz. 2
- { "239", "2562", }, // Box Draw Right Tee, Vert. 2 Horiz. 1
- { "240", "2556", }, // Box Draw Upper Right Corner, Vert. 2 Horiz. 1
- { "241", "2555", }, // Box Draw Upper Right Corner, Vert. 1 Horiz. 2
- { "242", "2563", }, // Box Draw Right Tee, Vert. 2 Horiz. 2
- { "243", "2551", }, // Box Draw Lines, Vert. 2
- { "244", "2557", }, // Box Draw Upper Right Corner, Vert. 2 Horiz. 2
- { "245", "255D", }, // Box Draw Lower Right Corner, Vert. 2 Horiz. 2
- { "246", "255C", }, // Box Draw Lower Right Corner, Vert. 2 Horiz. 1
- { "247", "255B", }, // Box Draw Lower Right Corner, Vert. 1 Horiz. 2
- { "248", "2510", }, // Box Draw Upper Right Corner, Vert. 1, Horiz. 1
- { "249", "2514", }, // Box Draw Lower Left Corner, Vert. 1, Horiz. 1
- { "250", "2534", }, // Box Draw Bottom Tee, Vert. 1 Horiz. 1
- { "251", "252C", }, // Box Draw Top Tee, Vert. 1 Horiz. 1
- { "252", "251C", }, // Box Draw Left Tee, Vert. 1 Horiz. 1
- { "253", "2500", }, // Box Draw Line, Horiz. 1
- { "254", "253C", }, // Box Draw Cross, Vert. 1 Horiz. 1
- { "255", "255E", }, // Box Draw Left Tee, Vert. 1 Horiz. 2
- { "256", "255F", }, // Box Draw Left Tee, Vert. 2 Horz. 1
- { "257", "255A", }, // Box Draw Lower Left Corner, Vert. 2 Horiz. 2
- { "258", "2554", }, // Box Draw Upper Left Corner, Vert. 2 Horiz. 2
- { "259", "2569", }, // Box Draw Bottom Tee, Vert. 2 Horiz. 2
- { "260", "2566", }, // Box Draw Top Tee, Vert. 2 Horiz. 2
- { "261", "2560", }, // Box Draw Left Tee, Vert. 2 Horiz. 2
- { "262", "2550", }, // Box Draw Lines, Horiz. 2
- { "263", "256C", }, // Box Draw Cross Open Center, Vert. 2 Horiz. 2
- { "264", "2567", }, // Box Draw Bottom Tee, Vert. 1 Horiz. 2
- { "265", "2568", }, // Box Draw Bottom Tee, Vert. 2 Horiz. 1
- { "266", "2564", }, // Box Draw Top Tee, Vert. 1 Horiz. 2
- { "267", "2565", }, // Box Draw Top Tee, Vert. 2 Horiz. 1
- { "268", "2559", }, // Box Draw Lower Left Corner, Vert. 2 Horiz. 1
- { "269", "2558", }, // Box Draw Lower Left Corner, Vert. 1 Horiz. 2
- { "270", "2552", }, // Box Draw Upper Left Corner, Vert. 1 Horiz. 2
- { "271", "2553", }, // Box Draw Upper Left Corner, Vert. 2 Horiz. 1
- { "272", "256B", }, // Box Draw Cross, Vert. 2 Horiz. 1
- { "273", "256A", }, // Box Draw Cross, Vert. 1 Horiz. 2
- { "274", "2518", }, // Box Draw Lower Right Corner, Vert. 1 Horiz. 1
- { "275", "250C", }, // Box Draw Upper Left Corner, Vert. 1, Horiz. 1
- { "276", "2588", }, // Solid Full High/Wide
- { "277", "2584", }, // Bottom Half Solid Rectangle
- { "278", "258C", }, // Left Half Solid Rectangle
- { "279", "2590", }, // Right Half Solid Rectangle
- { "280", "2580", }, // Top Half Solid Rectangle
- { "290", "2126", }, // Uppercase Greek Omega, or Ohms
- { "292", "221E", }, // Infinity Symbol
- { "295", "2229", }, // Set Intersection Symbol
- { "296", "2261", }, // Exactly Equals Sign
- { "297", "2265", }, // Greater Than or Equal Sign
- { "298", "2264", }, // Less Than or Equal Sign
- { "299", "2320", }, // Top Integral
- { "300", "2321", }, // Bottom Integral
- { "301", "2248", }, // Two Wavy Line Approximate Sign
-//{ "302", "00B7", }, // Middle Dot, or Centered Period (see 2219)
-//{ "302", "2219", }, // Centered Period, Middle Dot
- { "302", "2219", }, // Math Dot, Centered Period
- { "303", "221A", }, // Radical Symbol, Standalone Diagonal
- { "305", "25AA", }, // Small Solid Square Box
- { "306", "013F", }, // Uppercase L-Dot
- { "307", "0140", }, // Lowercase L-Dot
- { "308", "2113", }, // Litre Symbol
- { "309", "0149", }, // Lowercase Apostrophe-N
- { "310", "2032", }, // Prime, Minutes, or Feet Symbol
- { "311", "2033", }, // Double Prime, Seconds, or Inches Symbol
- { "312", "2020", }, // Dagger Symbol
- { "313", "2122", }, // Trademark Sign
- { "314", "2017", }, // Double Underline Character
- { "315", "02C7", }, // Lowercase Hacek Accent (Spacing)
- { "316", "02DA", }, // Lowercase Ring Accent (Spacing)
- { "317", "EFF9", }, // Uppercase Acute Accent (Spacing)
- { "318", "EFF8", }, // Uppercase Grave Accent (Spacing)
- { "319", "EFF7", }, // Uppercase Circumflex Accent (Spacing)
- { "320", "EFF6", }, // Uppercase Dieresis Accent (Spacing)
- { "321", "EFF5", }, // Uppercase Tilde Accent (Spacing)
- { "322", "EFF4", }, // Uppercase Hacek Accent (Spacing)
- { "323", "EFF3", }, // Uppercase Ring Accent (Spacing)
- { "324", "2215", }, // Vulgar Fraction Bar
- { "325", "2014", }, // Em Dash
- { "326", "2013", }, // En Dash
- { "327", "2021", }, // Double Dagger Symbol
- { "328", "0131", }, // Lowercase Undotted I
- { "329", "0027", }, // Neutral Single Quote
- { "330", "EFF2", }, // Uppercase Cedilla (Spacing)
- { "331", "2022", }, // Small Solid Round Bullet
- { "332", "207F", }, // Superior Lowercase N
- { "333", "2302", }, // Home Plate
- { "335", "0138", }, // Lowercase Kra
- { "338", "0166", }, // Uppercase T-Stroke
- { "339", "0167", }, // Lowercase T-Stroke
- { "340", "014A", }, // Uppercase Eng
- { "341", "014B", }, // Lowercase Eng
- { "342", "0111", }, // Lowercase D-Stroke
- { "400", "0102", }, // Uppercase A Breve
- { "401", "0103", }, // Lowercase A Breve
- { "402", "0100", }, // Uppercase A Macron
- { "403", "0101", }, // Lowercase A Macron
- { "404", "0104", }, // Uppercase A Ogonek
- { "405", "0105", }, // Lowercase A Ogonek
- { "406", "0106", }, // Uppercase C Acute
- { "407", "0107", }, // Lowercase C Acute
- { "410", "010C", }, // Uppercase C Hacek
- { "411", "010D", }, // Lowercase C Hacek
- { "414", "010E", }, // Uppercase D Hacek
- { "415", "010F", }, // Lowercase D Hacek
- { "416", "011A", }, // Uppercase E Hacek
- { "417", "011B", }, // Lowercase E Hacek
- { "418", "0116", }, // Uppercase E Overdot
- { "419", "0117", }, // Lowercase E Overdot
- { "420", "0112", }, // Uppercase E Macron
- { "421", "0113", }, // Lowercase E Macron
- { "422", "0118", }, // Uppercase E Ogonek
- { "423", "0119", }, // Lowercase E Ogonek
- { "428", "0122", }, // Uppercase G Cedilla
- { "429", "0123", }, // Lowercase G Cedilla
- { "432", "012E", }, // Uppercase I Ogonek
- { "433", "012F", }, // Lowercase I Ogonek
- { "434", "012A", }, // Uppercase I Macron
- { "435", "012B", }, // Lowercase I Macron
- { "438", "0136", }, // Uppercase K Cedilla
- { "439", "0137", }, // Lowercase K Cedilla
- { "440", "0139", }, // Uppercase L Acute
- { "441", "013A", }, // Lowercase L Acute
- { "442", "013D", }, // Uppercase L Hacek
- { "443", "013E", }, // Lowercase L Hacek
- { "444", "013B", }, // Uppercase L Cedilla
- { "445", "013C", }, // Lowercase L Cedilla
- { "446", "0143", }, // Uppercase N Acute
- { "447", "0144", }, // Lowercase N Acute
- { "448", "0147", }, // Uppercase N Hacek
- { "449", "0148", }, // Lowercase N Hacek
- { "450", "0145", }, // Uppercase N Cedilla
- { "451", "0146", }, // Lowercase N Cedilla
- { "452", "0150", }, // Uppercase O Double Acute
- { "453", "0151", }, // Lowercase O Double Acute
- { "454", "014C", }, // Uppercase O Macron
- { "455", "014D", }, // Lowercase O Macron
- { "456", "0154", }, // Uppercase R Acute
- { "457", "0155", }, // Lowercase R Acute
- { "458", "0158", }, // Uppercase R Hacek
- { "459", "0159", }, // Lowercase R Hacek
- { "460", "0156", }, // Uppercase R Cedilla
- { "461", "0157", }, // Lowercase R Cedilla
- { "462", "015A", }, // Uppercase S Acute
- { "463", "015B", }, // Lowercase S Acute
- { "466", "0164", }, // Uppercase T Hacek
- { "467", "0165", }, // Lowercase T Hacek
- { "468", "0162", }, // Uppercase T Cedilla
- { "469", "0163", }, // Lowercase T Cedilla
- { "470", "0168", }, // Uppercase U Tilde
- { "471", "0169", }, // Lowercase U Tilde
- { "474", "0170", }, // Uppercase U Double Acute
- { "475", "0171", }, // Lowercase U Double Acute
- { "476", "016E", }, // Uppercase U Ring
- { "477", "016F", }, // Lowercase U Ring
- { "478", "016A", }, // Uppercase U Macron
- { "479", "016B", }, // Lowercase U Macron
- { "480", "0172", }, // Uppercase U Ogonek
- { "481", "0173", }, // Lowercase U Ogonek
- { "482", "0179", }, // Uppercase Z Acute
- { "483", "017A", }, // Lowercase Z Acute
- { "484", "017B", }, // Uppercase Z Overdot
- { "485", "017C", }, // Lowercase Z Overdot
- { "486", "0128", }, // Uppercase I Tilde
- { "487", "0129", }, // Lowercase I Tilde
- { "500", "EFBF", }, // Radical, Diagonal, Composite
- { "501", "221D", }, // Proportional To Symbol
- { "502", "212F", }, // Napierian (italic e)
- { "503", "03F5", }, // Alternate Lowercase Greek Epsilon
-//{ "503", "EFEC", }, // Alternate Lowercase Greek Epsilon
- { "504", "2234", }, // Therefore Symbol
- { "505", "0393", }, // Uppercase Greek Gamma
- { "506", "2206", }, // Increment Symbol (Delta)
- { "507", "0398", }, // Uppercase Greek Theta
- { "508", "039B", }, // Uppercase Greek Lambda
- { "509", "039E", }, // Uppercase Greek Xi
- { "510", "03A0", }, // Uppercase Greek Pi
- { "511", "03A3", }, // Uppercase Greek Sigma
- { "512", "03A5", }, // Uppercase Greek Upsilon
- { "513", "03A6", }, // Uppercase Greek Phi
- { "514", "03A8", }, // Uppercase Greek Psi
- { "515", "03A9", }, // Uppercase Greek Omega
- { "516", "2207", }, // Nabla Symbol (inverted Delta)
- { "517", "2202", }, // Partial Differential Delta Symbol
- { "518", "03C2", }, // Lowercase Sigma, Terminal
- { "519", "2260", }, // Not Equal To Symbol
- { "520", "EFEB", }, // Underline, Composite
- { "521", "2235", }, // Because Symbol
- { "522", "03B1", }, // Lowercase Greek Alpha
- { "523", "03B2", }, // Lowercase Greek Beta
- { "524", "03B3", }, // Lowercase Greek Gamma
- { "525", "03B4", }, // Lowercase Greek Delta
- { "526", "03B5", }, // Lowercase Greek Epsilon
- { "527", "03B6", }, // Lowercase Greek Zeta
- { "528", "03B7", }, // Lowercase Greek Eta
- { "529", "03B8", }, // Lowercase Greek Theta
- { "530", "03B9", }, // Lowercase Greek Iota
- { "531", "03BA", }, // Lowercase Greek Kappa
- { "532", "03BB", }, // Lowercase Greek Lambda
- { "533", "03BC", }, // Lowercase Greek Mu
- { "534", "03BD", }, // Lowercase Greek Nu
- { "535", "03BE", }, // Lowercase Greek Xi
- { "536", "03BF", }, // Lowercase Greek Omicron
- { "537", "03C0", }, // Lowercase Greek Pi
- { "538", "03C1", }, // Lowercase Greek Rho
- { "539", "03C3", }, // Lowercase Greek Sigma
- { "540", "03C4", }, // Lowercase Greek Tau
- { "541", "03C5", }, // Lowercase Greek Upsilon
- { "542", "03C6", }, // Lowercase Greek Phi
- { "543", "03C7", }, // Lowercase Greek Chi
- { "544", "03C8", }, // Lowercase Greek Psi
- { "545", "03C9", }, // Lowercase Greek Omega
- { "546", "03D1", }, // Lowercase Greek Theta, Open
- { "547", "03D5", }, // Lowercase Greek Phi, Open
- { "548", "03D6", }, // Lowercase Pi, Alternate
- { "549", "2243", }, // Wavy Over Straight Approximate Symbol
- { "550", "2262", }, // Not Exactly Equal To Symbol
- { "551", "21D1", }, // Up Arrow Double Stroke
- { "552", "21D2", }, // Right Arrow Double Stroke
- { "553", "21D3", }, // Down Arrow Double Stroke
- { "554", "21D0", }, // Left Arrow Double Stroke
- { "555", "21D5", }, // Up/Down Arrow Double Stroke
- { "556", "21D4", }, // Left/Right Arrow Double Stroke
- { "557", "21C4", }, // Right Over Left Arrow
- { "558", "21C6", }, // Left Over Right Arrow
- { "559", "EFE9", }, // Vector Symbol
- { "560", "0305", }, // Overline, Composite
- { "561", "2200", }, // For All Symbol, or Universal (inverted A)
- { "562", "2203", }, // There Exists Symbol, or Existential (inverted E)
- { "563", "22A4", }, // Top Symbol
- { "564", "22A5", }, // Bottom Symbol
- { "565", "222A", }, // Set Union Symbol
- { "566", "2208", }, // Element-Of Symbol
- { "567", "220B", }, // Contains Symbol
- { "568", "2209", }, // Not-Element-Of Symbol
- { "569", "2282", }, // Proper Subset Symbol
- { "570", "2283", }, // Proper Superset Symbol
- { "571", "2284", }, // Not Proper Subset Symbol
- { "572", "2285", }, // Not Proper Superset Symbol
- { "573", "2286", }, // Subset Symbol
- { "574", "2287", }, // Superset Symbol
- { "575", "2295", }, // Plus In Circle Symbol
- { "576", "2299", }, // Dot In Circle Symbol
- { "577", "2297", }, // Times In Circle Symbol
- { "578", "2296", }, // Minus In Circle Symbol
- { "579", "2298", }, // Slash In Circle Symbol
- { "580", "2227", }, // Logical And Symbol
- { "581", "2228", }, // Logical Or Symbol
- { "582", "22BB", }, // Exclusive Or Symbol
- { "583", "2218", }, // Functional Composition Symbol
- { "584", "20DD", }, // Large Open Circle
- { "585", "22A3", }, // Assertion Symbol
- { "586", "22A2", }, // Backwards Assertion Symbol
- { "587", "222B", }, // Integral Symbol
- { "588", "222E", }, // Curvilinear Integral Symbol
- { "589", "2220", }, // Angle Symbol
- { "590", "2205", }, // Empty Set Symbol
- { "591", "2135", }, // Hebrew Aleph
- { "592", "2136", }, // Hebrew Beth
- { "593", "2137", }, // Hebrew Gimmel
- { "594", "212D", }, // Fraktur Uppercase C
- { "595", "2111", }, // Fraktur Uppercase I
- { "596", "211C", }, // Fraktur Uppercase R
- { "597", "2128", }, // Fraktur Uppercase Z
- { "598", "23A1", }, // Top Segment Left Bracket (Left Square Bracket Upper Corner)
- { "599", "23A3", }, // Bottom Segment Left Bracket (Left Square Bracket Lower Corner)
- { "600", "239B", }, // Top Segment Left Brace (Left Parenthesis Upper Hook)
-//{ "600", "23A7", }, // Top Segment Left Brace (Right Curly Bracket Upper Hook)
- { "601", "23A8", }, // Middle Segment Left Brace (Right Curly Bracket Middle Piece)
- { "602", "239D", }, // Bottom Segment LeftBrace (Left Parenthesis Lower Hook)
-//{ "602", "23A9", }, // Bottom Segment Left Brace (Right Curly Bracket Lower Hook)
- { "603", "EFD4", }, // Middle Segment Curvilinear Integral
- { "604", "EFD3", }, // Top Left Segment Summation
- { "605", "2225", }, // Double Vertical Line, Composite
- { "606", "EFD2", }, // Bottom Left Segment Summation
- { "607", "EFD1", }, // Bottom Diagonal Summation
- { "608", "23A4", }, // Top Segment Right Bracket (Right Square Bracket Upper Corner)
- { "609", "23A6", }, // Bottom Segment Right Bracket (Right Square Bracket Lower Corner)
- { "610", "239E", }, // Top Segment Right Brace (Right Parenthesis Upper Hook)
-//{ "610", "23AB", }, // Top Segment Right Brace (Right Curly Bracket Upper Hook)
- { "611", "23AC", }, // Middle Segment Right Brace (Right Curly Bracket Middle Piece)
- { "612", "23A0", }, // Bottom Segment Right ( Right Parenthesis Lower Hook)
-//{ "612", "23AD", }, // Bottom Segment Right Brace (Right Curly Bracket Lower Hook)
- { "613", "239C", }, // Thick Vertical Line, Composite (Left Parenthesis Extension)
-//{ "613", "239F", }, // Thick Vertical Line, Composite (Right Parenthesis Extension)
-//{ "613", "23AA", }, // Thick Vertical Line, Composite (Curly Bracket Extension)
-//{ "613", "23AE", }, // Thick Vertical Line, Composite (Integral Extension)
- { "614", "2223", }, // Thin Vertical Line, Composite
- { "615", "EFDC", }, // Bottom Segment of Vertical Radical
- { "616", "EFD0", }, // Top Right Segment Summation
- { "617", "EFCF", }, // Middle Segment Summation
- { "618", "EFCE", }, // Bottom Right Segment Summation
- { "619", "EFCD", }, // Top Diagonal Summation
- { "620", "2213", }, // Minus Over Plus Sign
- { "621", "2329", }, // Left Angle Bracket
- { "622", "232A", }, // Right Angle Bracket
- { "623", "EFFF", }, // Mask Symbol
- { "624", "2245", }, // Wavy Over Two Straight Approximate Symbol
- { "625", "2197", }, // 45 Degree Arrow
- { "626", "2198", }, // -45 Degree Arrow
- { "627", "2199", }, // -135 Degree Arrow
- { "628", "2196", }, // 135 Degree Arrow
- { "629", "25B5", }, // Up Open Triangle
- { "630", "25B9", }, // Right Open Triangle
- { "631", "25BF", }, // Down Open Triangle
- { "632", "25C3", }, // Left Open Triangle
- { "633", "226A", }, // Much Less Than Sign
- { "634", "226B", }, // Much Greater Than Sign
- { "635", "2237", }, // Proportional To Symbol (4 dots)
- { "636", "225C", }, // Defined As Symbol
- { "637", "03DD", }, // Lowercase Greek Digamma
- { "638", "210F", }, // Planck's Constant divided by 2 pi
- { "639", "2112", }, // Laplace Transform Symbol
- { "640", "EFFE", }, // Power Set
- { "641", "2118", }, // Weierstrassian Symbol
- { "642", "2211", }, // Summation Symbol (large Sigma)
- { "643", "301A", }, // Left Double Bracket
- { "644", "EFC9", }, // Middle Segment Double Bracket
- { "645", "301B", }, // Right Double Bracket
- { "646", "256D", }, // Box Draw Left Top Round Corner
- { "647", "2570", }, // Box Draw Left Bottom Round Corner
- { "648", "EFC8", }, // Extender Large Union/Product
- { "649", "EFC7", }, // Bottom Segment Large Union
- { "650", "EFC6", }, // Top Segment Large Intersection
- { "651", "EFC5", }, // Top Segment Left Double Bracket
- { "652", "EFC4", }, // Bottom Segment Left Double Bracket
- { "653", "EFFC", }, // Large Open Square Box
- { "654", "25C7", }, // Open Diamond
- { "655", "256E", }, // Box Draw Right Top Round Corner
- { "656", "256F", }, // Box Draw Right Bottom Round Corner
- { "657", "EFC3", }, // Bottom Segment Large Bottom Product
- { "658", "EFC2", }, // Top Segment Large Top Product
- { "659", "EFC1", }, // Top Segment Right Double Bracket
- { "660", "EFC0", }, // Bottom Segment Right Double Bracket
- { "661", "EFFB", }, // Large Solid Square Box
- { "662", "25C6", }, // Solid Diamond
- { "663", "220D", }, // Such That Symbol (rotated lc epsilon)
- { "664", "2217", }, // Math Asterisk
- { "665", "23AF", }, // Horizontal Arrow Extender (Horizontal Line Extension)
- { "666", "EFCB", }, // Double Horizontal Arrow Extender
- { "667", "EFCC", }, // Inverted Complement of 0xEFCF or MSL 617
- { "668", "221F", }, // Right Angle Symbol
- { "669", "220F", }, // Product Symbol (large Pi)
- { "684", "25CA", }, // Lozenge, Diamond
- { "1000", "2070", }, // Superior Numeral 0
- { "1001", "2074", }, // Superior Numeral 4
- { "1002", "2075", }, // Superior Numeral 5
- { "1003", "2076", }, // Superior Numeral 6
- { "1004", "2077", }, // Superior Numeral 7
- { "1005", "2078", }, // Superior Numeral 8
- { "1006", "2079", }, // Superior Numeral 9
- { "1017", "201C", }, // Double Open Quote (6)
- { "1018", "201D", }, // Double Close Quote (9)
- { "1019", "201E", }, // Double Baseline Quote (9)
- { "1020", "2003", }, // Em Space
- { "1021", "2002", }, // En Space
- { "1023", "2009", }, // Thin Space
- { "1028", "2026", }, // Ellipsis
- { "1030", "EFF1", }, // Uppercase Ogonek (Spacing)
- { "1031", "017E", }, // Lowercase Z Hacek
- { "1034", "2120", }, // Service Mark
- { "1036", "211E", }, // Prescription Sign
-//{ "1040", "F001", }, // Lowercase FI Ligature
- { "1040", "FB01", }, // Lowercase FI Ligature
-//{ "1041", "F002", }, // Lowercase FL Ligature
- { "1041", "FB02", }, // Lowercase FL Ligature
- { "1042", "FB00", }, // Lowercase FF Ligature
- { "1043", "FB03", }, // Lowercase FFI Ligature
- { "1044", "FB04", }, // Lowercase FFL Ligature
- { "1045", "EFF0", }, // Uppercase Double Acute Accent (Spacing)
- { "1047", "0133", }, // Lowercase IJ Ligature
- { "1060", "2105", }, // Care Of Symbol
- { "1061", "011E", }, // Uppercase G Breve
- { "1062", "011F", }, // Lowercase G Breve
- { "1063", "015E", }, // Uppercase S Cedilla
- { "1064", "015F", }, // Lowercase S Cedilla
- { "1065", "0130", }, // Uppercase I Overdot
- { "1067", "201A", }, // Single Baseline Quote (9)
- { "1068", "2030", }, // Per Mill Sign
- { "1069", "20AC", }, // Euro
- { "1084", "02C9", }, // Lowercase Macron Accent (Spacing)
- { "1086", "02D8", }, // Lowercase Breve Accent (Spacing)
- { "1088", "02D9", }, // Lowercase Overdot Accent (Spacing)
- { "1090", "0153", }, // Lowercase OE Ligature
- { "1091", "0152", }, // Uppercase OE Ligature
- { "1092", "2039", }, // Left Pointing Single Angle Quote
- { "1093", "203A", }, // Right Pointing Single Angle Quote
- { "1094", "25A1", }, // Medium Open Square Box
- { "1095", "0141", }, // Uppercase L-Stroke
- { "1096", "0142", }, // Lowercase L-Stroke
- { "1097", "02DD", }, // Lowercase Double Acute Accent (Spacing)
- { "1098", "02DB", }, // Lowercase Ogonek (Spacing)
- { "1099", "21B5", }, // Carriage Return Symbol
- { "1100", "EFDB", }, // Full Size Serif Registered
- { "1101", "EFDA", }, // Full Size Serif Copyright
- { "1102", "EFD9", }, // Full Size Serif Trademark
- { "1103", "EFD8", }, // Full Size Sans Registered
- { "1104", "EFD7", }, // Full Size Sans Copyright
- { "1105", "EFD6", }, // Full Size Sans Trademark
- { "1106", "017D", }, // Uppercase Z Hacek
- { "1107", "0132", }, // Uppercase IJ Ligature
- { "1108", "25AB", }, // Small Open Square Box
- { "1109", "25E6", }, // Small Open Round Bullet
- { "1110", "25CB", }, // Medium Open Round Bullet
- { "1111", "EFFA", }, // Large Solid Round Bullet
- { "3812", "F000", }, // Ornament, Apple
-};
-
-// global constructor
-static struct hp_msl_to_unicode_init {
- hp_msl_to_unicode_init();
-} _hp_msl_to_unicode_init;
-
-hp_msl_to_unicode_init::hp_msl_to_unicode_init() {
- for (unsigned int i = 0;
- i < sizeof(hp_msl_to_unicode_list)/sizeof(hp_msl_to_unicode_list[0]);
- i++) {
- hp_msl_to_unicode *ptu = new hp_msl_to_unicode[1];
- ptu->value = (char *)hp_msl_to_unicode_list[i].value;
- hp_msl_to_unicode_table.define(hp_msl_to_unicode_list[i].key, ptu);
- }
-}
-
-const char *hp_msl_to_unicode_code(const char *s)
-{
- hp_msl_to_unicode *result = hp_msl_to_unicode_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/utils/indxbib/Makefile.sub b/contrib/groff/src/utils/indxbib/Makefile.sub
deleted file mode 100644
index e8f1e6f2cc45..000000000000
--- a/contrib/groff/src/utils/indxbib/Makefile.sub
+++ /dev/null
@@ -1,29 +0,0 @@
-PROG=indxbib$(EXEEXT)
-MAN1=indxbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- indxbib.$(OBJEXT) \
- signal.$(OBJEXT)
-CCSRCS=\
- $(srcdir)/indxbib.cpp
-CSRCS=\
- $(srcdir)/signal.c
-NAMEPREFIX=$(g)
-
-install_data: $(srcdir)/eign
- -test -d $(datadir) || $(mkinstalldirs) $(datadir)
- -test -d $(dataprogramdir) || $(mkinstalldirs) $(dataprogramdir)
- -test -d $(datasubdir) || $(mkinstalldirs) $(datasubdir)
- if test -f /usr/lib/eign; then \
- rm -f $(common_words_file); \
- ln -s /usr/lib/eign $(common_words_file) 2>/dev/null \
- || ln /usr/lib/eign $(common_words_file) 2>/dev/null \
- || cp /usr/lib/eign $(common_words_file); \
- else \
- rm -f $(common_words_file); \
- $(INSTALL_DATA) $(srcdir)/eign $(common_words_file); \
- fi
-
-uninstall_sub:
- -rm -f $(common_words_file)
diff --git a/contrib/groff/src/utils/indxbib/eign b/contrib/groff/src/utils/indxbib/eign
deleted file mode 100644
index 7718c8b1124c..000000000000
--- a/contrib/groff/src/utils/indxbib/eign
+++ /dev/null
@@ -1,133 +0,0 @@
-a
-i
-the
-to
-of
-and
-in
-is
-it
-for
-that
-if
-you
-this
-be
-on
-with
-not
-have
-are
-or
-as
-from
-can
-but
-by
-at
-an
-will
-no
-all
-was
-do
-there
-my
-one
-so
-we
-they
-what
-would
-any
-which
-about
-get
-your
-use
-some
-me
-then
-name
-like
-out
-when
-up
-time
-other
-more
-only
-just
-end
-also
-know
-how
-new
-should
-been
-than
-them
-he
-who
-make
-may
-people
-these
-now
-their
-here
-into
-first
-could
-way
-had
-see
-work
-well
-were
-two
-very
-where
-while
-us
-because
-good
-same
-even
-much
-most
-many
-such
-long
-his
-over
-last
-since
-right
-before
-our
-without
-too
-those
-why
-must
-part
-being
-current
-back
-still
-go
-point
-value
-each
-did
-both
-true
-off
-say
-another
-state
-might
-under
-start
-try
diff --git a/contrib/groff/src/utils/indxbib/indxbib.cpp b/contrib/groff/src/utils/indxbib/indxbib.cpp
deleted file mode 100644
index 00e99447be62..000000000000
--- a/contrib/groff/src/utils/indxbib/indxbib.cpp
+++ /dev/null
@@ -1,790 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "cmap.h"
-
-#include "defs.h"
-#include "index.h"
-
-#include "nonposix.h"
-
-extern "C" const char *Version_string;
-
-#define DEFAULT_HASH_TABLE_SIZE 997
-#define TEMP_INDEX_TEMPLATE "indxbibXXXXXX"
-
-// (2^n - MALLOC_OVERHEAD) should be a good argument for malloc().
-
-#define MALLOC_OVERHEAD 16
-
-#ifdef BLOCK_SIZE
-#undef BLOCK_SIZE
-#endif
-
-const int BLOCK_SIZE = ((1024 - MALLOC_OVERHEAD - sizeof(struct block *)
- - sizeof(int)) / sizeof(int));
-struct block {
- block *next;
- int used;
- int v[BLOCK_SIZE];
-
- block(block *p = 0) : next(p), used(0) { }
-};
-
-struct block;
-
-union table_entry {
- block *ptr;
- int count;
-};
-
-struct word_list {
- word_list *next;
- char *str;
- int len;
- word_list(const char *, int, word_list *);
-};
-
-table_entry *hash_table;
-int hash_table_size = DEFAULT_HASH_TABLE_SIZE;
-// We make this the same size as hash_table so we only have to do one
-// mod per key.
-static word_list **common_words_table = 0;
-char *key_buffer;
-
-FILE *indxfp;
-int ntags = 0;
-string filenames;
-char *temp_index_file = 0;
-
-const char *ignore_fields = "XYZ";
-const char *common_words_file = COMMON_WORDS_FILE;
-int n_ignore_words = 100;
-int truncate_len = 6;
-int shortest_len = 3;
-int max_keys_per_item = 100;
-
-static void usage(FILE *stream);
-static void write_hash_table();
-static void init_hash_table();
-static void read_common_words_file();
-static int store_key(char *s, int len);
-static void possibly_store_key(char *s, int len);
-static int do_whole_file(const char *filename);
-static int do_file(const char *filename);
-static void store_reference(int filename_index, int pos, int len);
-static void check_integer_arg(char opt, const char *arg, int min, int *res);
-static void store_filename(const char *);
-static void fwrite_or_die(const void *ptr, int size, int nitems, FILE *fp);
-static char *get_cwd();
-
-extern "C" {
- void cleanup();
- void catch_fatal_signals();
- void ignore_fatal_signals();
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
-
- const char *base_name = 0;
- typedef int (*parser_t)(const char *);
- parser_t parser = do_file;
- const char *directory = 0;
- const char *foption = 0;
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "c:o:h:i:k:l:t:n:c:d:f:vw",
- long_options, NULL))
- != EOF)
- switch (opt) {
- case 'c':
- common_words_file = optarg;
- break;
- case 'd':
- directory = optarg;
- break;
- case 'f':
- foption = optarg;
- break;
- case 'h':
- check_integer_arg('h', optarg, 1, &hash_table_size);
- if (!is_prime(hash_table_size)) {
- while (!is_prime(++hash_table_size))
- ;
- warning("%1 not prime: using %2 instead", optarg, hash_table_size);
- }
- break;
- case 'i':
- ignore_fields = optarg;
- break;
- case 'k':
- check_integer_arg('k', optarg, 1, &max_keys_per_item);
- break;
- case 'l':
- check_integer_arg('l', optarg, 0, &shortest_len);
- break;
- case 'n':
- check_integer_arg('n', optarg, 0, &n_ignore_words);
- break;
- case 'o':
- base_name = optarg;
- break;
- case 't':
- check_integer_arg('t', optarg, 1, &truncate_len);
- break;
- case 'w':
- parser = do_whole_file;
- break;
- case 'v':
- printf("GNU indxbib (groff) version %s\n", Version_string);
- exit(0);
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- break;
- }
- if (optind >= argc && foption == 0)
- fatal("no files and no -f option");
- if (!directory) {
- char *path = get_cwd();
- store_filename(path);
- a_delete path;
- }
- else
- store_filename(directory);
- init_hash_table();
- store_filename(common_words_file);
- store_filename(ignore_fields);
- key_buffer = new char[truncate_len];
- read_common_words_file();
- if (!base_name)
- base_name = optind < argc ? argv[optind] : DEFAULT_INDEX_NAME;
- const char *p = strrchr(base_name, DIR_SEPS[0]), *p1;
- const char *sep = &DIR_SEPS[1];
- while (*sep) {
- p1 = strrchr(base_name, *sep);
- if (p1 && (!p || p1 > p))
- p = p1;
- sep++;
- }
- size_t name_max;
- if (p) {
- char *dir = strsave(base_name);
- dir[p - base_name] = '\0';
- name_max = file_name_max(dir);
- a_delete dir;
- }
- else
- name_max = file_name_max(".");
- const char *filename = p ? p + 1 : base_name;
- if (strlen(filename) + sizeof(INDEX_SUFFIX) - 1 > name_max)
- fatal("`%1.%2' is too long for a filename", filename, INDEX_SUFFIX);
- if (p) {
- p++;
- temp_index_file = new char[p - base_name + sizeof(TEMP_INDEX_TEMPLATE)];
- memcpy(temp_index_file, base_name, p - base_name);
- strcpy(temp_index_file + (p - base_name), TEMP_INDEX_TEMPLATE);
- }
- else {
- temp_index_file = strsave(TEMP_INDEX_TEMPLATE);
- }
- catch_fatal_signals();
- int fd = mkstemp(temp_index_file);
- if (fd < 0)
- fatal("can't create temporary index file: %1", strerror(errno));
- indxfp = fdopen(fd, FOPEN_WB);
- if (indxfp == 0)
- fatal("fdopen failed");
- if (fseek(indxfp, sizeof(index_header), 0) < 0)
- fatal("can't seek past index header: %1", strerror(errno));
- int failed = 0;
- if (foption) {
- FILE *fp = stdin;
- if (strcmp(foption, "-") != 0) {
- errno = 0;
- fp = fopen(foption, "r");
- if (!fp)
- fatal("can't open `%1': %2", foption, strerror(errno));
- }
- string path;
- int lineno = 1;
- for (;;) {
- int c;
- for (c = getc(fp); c != '\n' && c != EOF; c = getc(fp)) {
- if (c == '\0')
- error_with_file_and_line(foption, lineno,
- "nul character in pathname ignored");
- else
- path += c;
- }
- if (path.length() > 0) {
- path += '\0';
- if (!(*parser)(path.contents()))
- failed = 1;
- path.clear();
- }
- if (c == EOF)
- break;
- lineno++;
- }
- if (fp != stdin)
- fclose(fp);
- }
- for (int i = optind; i < argc; i++)
- if (!(*parser)(argv[i]))
- failed = 1;
- write_hash_table();
- if (fclose(indxfp) < 0)
- fatal("error closing temporary index file: %1", strerror(errno));
- char *index_file = new char[strlen(base_name) + sizeof(INDEX_SUFFIX)];
- strcpy(index_file, base_name);
- strcat(index_file, INDEX_SUFFIX);
-#ifdef HAVE_RENAME
-#ifdef __EMX__
- if (access(index_file, R_OK) == 0)
- unlink(index_file);
-#endif /* __EMX__ */
- if (rename(temp_index_file, index_file) < 0) {
-#ifdef __MSDOS__
- // RENAME could fail on plain MSDOS filesystems because
- // INDEX_FILE is an invalid filename, e.g. it has multiple dots.
- char *fname = p ? index_file + (p - base_name) : 0;
- char *dot = 0;
-
- // Replace the dot with an underscore and try again.
- if (fname
- && (dot = strchr(fname, '.')) != 0
- && strcmp(dot, INDEX_SUFFIX) != 0)
- *dot = '_';
- if (rename(temp_index_file, index_file) < 0)
-#endif
- fatal("can't rename temporary index file: %1", strerror(errno));
- }
-#else /* not HAVE_RENAME */
- ignore_fatal_signals();
- if (unlink(index_file) < 0) {
- if (errno != ENOENT)
- fatal("can't unlink `%1': %2", index_file, strerror(errno));
- }
- if (link(temp_index_file, index_file) < 0)
- fatal("can't link temporary index file: %1", strerror(errno));
- if (unlink(temp_index_file) < 0)
- fatal("can't unlink temporary index file: %1", strerror(errno));
-#endif /* not HAVE_RENAME */
- temp_index_file = 0;
- return failed;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
-"usage: %s [-vw] [-c file] [-d dir] [-f file] [-h n] [-i XYZ] [-k n]\n"
-" [-l n] [-n n] [-o base] [-t n] [files...]\n",
- program_name);
-}
-
-static void check_integer_arg(char opt, const char *arg, int min, int *res)
-{
- char *ptr;
- long n = strtol(arg, &ptr, 10);
- if (n == 0 && ptr == arg)
- error("argument to -%1 not an integer", opt);
- else if (n < min)
- error("argument to -%1 must not be less than %2", opt, min);
- else {
- if (n > INT_MAX)
- error("argument to -%1 greater than maximum integer", opt);
- else if (*ptr != '\0')
- error("junk after integer argument to -%1", opt);
- *res = int(n);
- }
-}
-
-static char *get_cwd()
-{
- char *buf;
- int size = 12;
-
- for (;;) {
- buf = new char[size];
- if (getcwd(buf, size))
- break;
- if (errno != ERANGE)
- fatal("cannot get current working directory: %1", strerror(errno));
- a_delete buf;
- if (size == INT_MAX)
- fatal("current working directory longer than INT_MAX");
- if (size > INT_MAX/2)
- size = INT_MAX;
- else
- size *= 2;
- }
- return buf;
-}
-
-word_list::word_list(const char *s, int n, word_list *p)
-: next(p), len(n)
-{
- str = new char[n];
- memcpy(str, s, n);
-}
-
-static void read_common_words_file()
-{
- if (n_ignore_words <= 0)
- return;
- errno = 0;
- FILE *fp = fopen(common_words_file, "r");
- if (!fp)
- fatal("can't open `%1': %2", common_words_file, strerror(errno));
- common_words_table = new word_list * [hash_table_size];
- for (int i = 0; i < hash_table_size; i++)
- common_words_table[i] = 0;
- int count = 0;
- int key_len = 0;
- for (;;) {
- int c = getc(fp);
- while (c != EOF && !csalnum(c))
- c = getc(fp);
- if (c == EOF)
- break;
- do {
- if (key_len < truncate_len)
- key_buffer[key_len++] = cmlower(c);
- c = getc(fp);
- } while (c != EOF && csalnum(c));
- if (key_len >= shortest_len) {
- int h = hash(key_buffer, key_len) % hash_table_size;
- common_words_table[h] = new word_list(key_buffer, key_len,
- common_words_table[h]);
- }
- if (++count >= n_ignore_words)
- break;
- key_len = 0;
- if (c == EOF)
- break;
- }
- n_ignore_words = count;
- fclose(fp);
-}
-
-static int do_whole_file(const char *filename)
-{
- errno = 0;
- FILE *fp = fopen(filename, "r");
- if (!fp) {
- error("can't open `%1': %2", filename, strerror(errno));
- return 0;
- }
- int count = 0;
- int key_len = 0;
- int c;
- while ((c = getc(fp)) != EOF) {
- if (csalnum(c)) {
- key_len = 1;
- key_buffer[0] = c;
- while ((c = getc(fp)) != EOF) {
- if (!csalnum(c))
- break;
- if (key_len < truncate_len)
- key_buffer[key_len++] = c;
- }
- if (store_key(key_buffer, key_len)) {
- if (++count >= max_keys_per_item)
- break;
- }
- if (c == EOF)
- break;
- }
- }
- store_reference(filenames.length(), 0, 0);
- store_filename(filename);
- fclose(fp);
- return 1;
-}
-
-static int do_file(const char *filename)
-{
- errno = 0;
- // Need binary I/O for MS-DOS/MS-Windows, because indxbib relies on
- // byte counts to be consistent with fseek.
- FILE *fp = fopen(filename, FOPEN_RB);
- if (fp == 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return 0;
- }
- int filename_index = filenames.length();
- store_filename(filename);
-
- enum {
- START, // at the start of the file; also in between references
- BOL, // in the middle of a reference, at the beginning of the line
- PERCENT, // seen a percent at the beginning of the line
- IGNORE, // ignoring a field
- IGNORE_BOL, // at the beginning of a line ignoring a field
- KEY, // in the middle of a key
- DISCARD, // after truncate_len bytes of a key
- MIDDLE // in between keys
- } state = START;
-
- // In states START, BOL, IGNORE_BOL, space_count how many spaces at
- // the beginning have been seen. In states PERCENT, IGNORE, KEY,
- // MIDDLE space_count must be 0.
- int space_count = 0;
- int byte_count = 0; // bytes read
- int key_len = 0;
- int ref_start = -1; // position of start of current reference
- for (;;) {
- int c = getc(fp);
- if (c == EOF)
- break;
- // We opened the file in binary mode, so we need to skip
- // every CR character before a Newline.
- if (c == '\r') {
- int peek = getc(fp);
- if (peek == '\n') {
- byte_count++;
- c = peek;
- }
- else
- ungetc(peek, fp);
- }
-#if defined(__MSDOS__) || defined(_MSC_VER) || defined(__EMX__)
- else if (c == 0x1a) // ^Z means EOF in text files
- break;
-#endif
- byte_count++;
- switch (state) {
- case START:
- if (c == ' ' || c == '\t') {
- space_count++;
- break;
- }
- if (c == '\n') {
- space_count = 0;
- break;
- }
- ref_start = byte_count - space_count - 1;
- space_count = 0;
- if (c == '%')
- state = PERCENT;
- else if (csalnum(c)) {
- state = KEY;
- key_buffer[0] = c;
- key_len = 1;
- }
- else
- state = MIDDLE;
- break;
- case BOL:
- switch (c) {
- case '%':
- if (space_count > 0) {
- space_count = 0;
- state = MIDDLE;
- }
- else
- state = PERCENT;
- break;
- case ' ':
- case '\t':
- space_count++;
- break;
- case '\n':
- store_reference(filename_index, ref_start,
- byte_count - 1 - space_count - ref_start);
- state = START;
- space_count = 0;
- break;
- default:
- space_count = 0;
- if (csalnum(c)) {
- state = KEY;
- key_buffer[0] = c;
- key_len = 1;
- }
- else
- state = MIDDLE;
- }
- break;
- case PERCENT:
- if (strchr(ignore_fields, c) != 0)
- state = IGNORE;
- else if (c == '\n')
- state = BOL;
- else
- state = MIDDLE;
- break;
- case IGNORE:
- if (c == '\n')
- state = IGNORE_BOL;
- break;
- case IGNORE_BOL:
- switch (c) {
- case '%':
- if (space_count > 0) {
- state = IGNORE;
- space_count = 0;
- }
- else
- state = PERCENT;
- break;
- case ' ':
- case '\t':
- space_count++;
- break;
- case '\n':
- store_reference(filename_index, ref_start,
- byte_count - 1 - space_count - ref_start);
- state = START;
- space_count = 0;
- break;
- default:
- space_count = 0;
- state = IGNORE;
- }
- break;
- case KEY:
- if (csalnum(c)) {
- if (key_len < truncate_len)
- key_buffer[key_len++] = c;
- else
- state = DISCARD;
- }
- else {
- possibly_store_key(key_buffer, key_len);
- key_len = 0;
- if (c == '\n')
- state = BOL;
- else
- state = MIDDLE;
- }
- break;
- case DISCARD:
- if (!csalnum(c)) {
- possibly_store_key(key_buffer, key_len);
- key_len = 0;
- if (c == '\n')
- state = BOL;
- else
- state = MIDDLE;
- }
- break;
- case MIDDLE:
- if (csalnum(c)) {
- state = KEY;
- key_buffer[0] = c;
- key_len = 1;
- }
- else if (c == '\n')
- state = BOL;
- break;
- default:
- assert(0);
- }
- }
- switch (state) {
- case START:
- break;
- case DISCARD:
- case KEY:
- possibly_store_key(key_buffer, key_len);
- // fall through
- case BOL:
- case PERCENT:
- case IGNORE_BOL:
- case IGNORE:
- case MIDDLE:
- store_reference(filename_index, ref_start,
- byte_count - ref_start - space_count);
- break;
- default:
- assert(0);
- }
- fclose(fp);
- return 1;
-}
-
-static void store_reference(int filename_index, int pos, int len)
-{
- tag t;
- t.filename_index = filename_index;
- t.start = pos;
- t.length = len;
- fwrite_or_die(&t, sizeof(t), 1, indxfp);
- ntags++;
-}
-
-static void store_filename(const char *fn)
-{
- filenames += fn;
- filenames += '\0';
-}
-
-static void init_hash_table()
-{
- hash_table = new table_entry[hash_table_size];
- for (int i = 0; i < hash_table_size; i++)
- hash_table[i].ptr = 0;
-}
-
-static void possibly_store_key(char *s, int len)
-{
- static int last_tagno = -1;
- static int key_count;
- if (last_tagno != ntags) {
- last_tagno = ntags;
- key_count = 0;
- }
- if (key_count < max_keys_per_item) {
- if (store_key(s, len))
- key_count++;
- }
-}
-
-static int store_key(char *s, int len)
-{
- if (len < shortest_len)
- return 0;
- int is_number = 1;
- for (int i = 0; i < len; i++)
- if (!csdigit(s[i])) {
- is_number = 0;
- s[i] = cmlower(s[i]);
- }
- if (is_number && !(len == 4 && s[0] == '1' && s[1] == '9'))
- return 0;
- int h = hash(s, len) % hash_table_size;
- if (common_words_table) {
- for (word_list *ptr = common_words_table[h]; ptr; ptr = ptr->next)
- if (len == ptr->len && memcmp(s, ptr->str, len) == 0)
- return 0;
- }
- table_entry *pp = hash_table + h;
- if (!pp->ptr)
- pp->ptr = new block;
- else if (pp->ptr->v[pp->ptr->used - 1] == ntags)
- return 1;
- else if (pp->ptr->used >= BLOCK_SIZE)
- pp->ptr = new block(pp->ptr);
- pp->ptr->v[(pp->ptr->used)++] = ntags;
- return 1;
-}
-
-static void write_hash_table()
-{
- const int minus_one = -1;
- int li = 0;
- for (int i = 0; i < hash_table_size; i++) {
- block *ptr = hash_table[i].ptr;
- if (!ptr)
- hash_table[i].count = -1;
- else {
- hash_table[i].count = li;
- block *rev = 0;
- while (ptr) {
- block *tem = ptr;
- ptr = ptr->next;
- tem->next = rev;
- rev = tem;
- }
- while (rev) {
- fwrite_or_die(rev->v, sizeof(int), rev->used, indxfp);
- li += rev->used;
- block *tem = rev;
- rev = rev->next;
- delete tem;
- }
- fwrite_or_die(&minus_one, sizeof(int), 1, indxfp);
- li += 1;
- }
- }
- if (sizeof(table_entry) == sizeof(int))
- fwrite_or_die(hash_table, sizeof(int), hash_table_size, indxfp);
- else {
- // write it out word by word
- for (int i = 0; i < hash_table_size; i++)
- fwrite_or_die(&hash_table[i].count, sizeof(int), 1, indxfp);
- }
- fwrite_or_die(filenames.contents(), 1, filenames.length(), indxfp);
- if (fseek(indxfp, 0, 0) < 0)
- fatal("error seeking on index file: %1", strerror(errno));
- index_header h;
- h.magic = INDEX_MAGIC;
- h.version = INDEX_VERSION;
- h.tags_size = ntags;
- h.lists_size = li;
- h.table_size = hash_table_size;
- h.strings_size = filenames.length();
- h.truncate = truncate_len;
- h.shortest = shortest_len;
- h.common = n_ignore_words;
- fwrite_or_die(&h, sizeof(h), 1, indxfp);
-}
-
-static void fwrite_or_die(const void *ptr, int size, int nitems, FILE *fp)
-{
- if (fwrite(ptr, size, nitems, fp) != (size_t)nitems)
- fatal("fwrite failed: %1", strerror(errno));
-}
-
-void fatal_error_exit()
-{
- cleanup();
- exit(3);
-}
-
-extern "C" {
-
-void cleanup()
-{
- if (temp_index_file)
- unlink(temp_index_file);
-}
-
-}
diff --git a/contrib/groff/src/utils/indxbib/indxbib.man b/contrib/groff/src/utils/indxbib/indxbib.man
deleted file mode 100644
index a5660296c6a2..000000000000
--- a/contrib/groff/src/utils/indxbib/indxbib.man
+++ /dev/null
@@ -1,211 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.TH @G@INDXBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@indxbib \- make inverted index for bibliographic databases
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@indxbib 'u
-.ti \niu
-.B @g@indxbib
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-vw
-.OP \-c file
-.OP \-d dir
-.OP \-f file
-.OP \-h n
-.OP \-i string
-.OP \-k n
-.OP \-l n
-.OP \-n n
-.OP \-o file
-.OP \-t n
-.RI [\ filename \|.\|.\|.\ ]
-.ad \na
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.SH DESCRIPTION
-.B @g@indxbib
-makes an inverted index for the bibliographic databases in
-.IR filename \|.\|.\|.
-for use with
-.BR @g@refer (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-and
-.BR lkbib (@MAN1EXT@).
-The index will be named
-.IB filename @INDEX_SUFFIX@\fR;
-the index is written to a temporary file which is then renamed to this.
-If no filenames are given on the command line because the
-.B \-f
-option has been used, and no
-.B \-o
-option is given, the index will be named
-.BR @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@ .
-.LP
-Bibliographic databases are divided into records by blank lines.
-Within a record, each fields starts with a
-.B %
-character at the beginning of a line.
-Fields have a one letter name which follows the
-.B %
-character.
-.LP
-The values set by the
-.BR \-c ,
-.BR \-n ,
-.BR \-l
-and
-.B \-t
-options are stored in the index;
-when the index is searched, keys will be discarded and truncated in a
-manner appropriate to these options;
-the original keys will be used for verifying that any record
-found using the index actually contains the keys.
-This means that a user of an index need not know whether these
-options were used in the creation of the index,
-provided that not all the keys to be searched for
-would have been discarded during indexing
-and that the user supplies at least the part of each key
-that would have remained after being truncated during indexing.
-The value set by the
-.B \-i
-option is also stored in the index
-and will be used in verifying records found using the index.
-.SH OPTIONS
-.TP
-.B \-v
-Print the version number.
-.TP
-.B \-w
-Index whole files.
-Each file is a separate record.
-.TP
-.BI \-c file
-Read the list of common words from
-.I file
-instead of
-.BR @COMMON_WORDS_FILE@ .
-.TP
-.BI \-d dir
-Use
-.I dir
-as the pathname of the current working directory to store in the index,
-instead of the path printed by
-.BR pwd (1).
-Usually
-.I dir
-will be a symbolic link that points to the directory printed by
-.BR pwd (1).
-.TP
-.BI \-f file
-Read the files to be indexed from
-.IR file .
-If
-.I file
-is
-.BR \- ,
-files will be read from the standard input.
-The
-.B \-f
-option can be given at most once.
-.TP
-.BI \-i string
-Don't index the contents of fields whose names are in
-.IR string .
-Initially
-.I string
-is
-.BR XYZ .
-.TP
-.BI \-h n
-Use the first prime greater than or equal to
-.I n
-for the size of the hash table.
-Larger values of
-.I n
-will usually make searching faster,
-but will make the index larger
-and
-.B @g@indxbib
-use more memory.
-Initially
-.I n
-is 997.
-.TP
-.BI \-k n
-Use at most
-.I n
-keys per input record.
-Initially
-.I n
-is 100.
-.TP
-.BI \-l n
-Discard keys that are shorter than
-.IR n .
-Initially
-.I n
-is 3.
-.TP
-.BI \-n n
-Discard the
-.I n
-most common words.
-Initially
-.I n
-is 100.
-.TP
-.BI \-o basename
-The index should be named
-.IB basename @INDEX_SUFFIX@\fR.
-.TP
-.BI \-t n
-Truncate keys to
-.IR n .
-Initially
-.I n
-is 6.
-.SH FILES
-.TP \w'\fBindxbib\fIXXXXXX'u+2n
-.IB filename @INDEX_SUFFIX@
-Index.
-.TP
-.B @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@
-Default index name.
-.TP
-.B @COMMON_WORDS_FILE@
-List of common words.
-.TP
-.BI indxbib XXXXXX
-Temporary file.
-.SH "SEE ALSO"
-.BR @g@refer (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/indxbib/signal.c b/contrib/groff/src/utils/indxbib/signal.c
deleted file mode 100644
index 20dfd905d035..000000000000
--- a/contrib/groff/src/utils/indxbib/signal.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 1992, 2001, 2003, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Unfortunately vendors seem to have problems writing a <signal.h>
-that is correct for C++, so we implement all signal handling in C. */
-
-#include <stdlib.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <signal.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void cleanup(void);
-
-static RETSIGTYPE handle_fatal_signal(int signum)
-{
- signal(signum, SIG_DFL);
- cleanup();
-#ifdef HAVE_KILL
- kill(getpid(), signum);
-#else
- /* MS-DOS and Win32 don't have kill(); the best compromise is
- probably to use exit() instead. */
- exit(signum);
-#endif
-}
-
-void catch_fatal_signals(void)
-{
-#ifdef SIGHUP
- signal(SIGHUP, handle_fatal_signal);
-#endif
- signal(SIGINT, handle_fatal_signal);
- signal(SIGTERM, handle_fatal_signal);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifndef HAVE_RENAME
-
-void ignore_fatal_signals()
-{
-#ifdef SIGHUP
- signal(SIGHUP, SIG_IGN);
-#endif
- signal(SIGINT, SIG_IGN);
- signal(SIGTERM, SIG_IGN);
-}
-
-#endif /* not HAVE_RENAME */
diff --git a/contrib/groff/src/utils/lkbib/Makefile.sub b/contrib/groff/src/utils/lkbib/Makefile.sub
deleted file mode 100644
index 4964ee0567a0..000000000000
--- a/contrib/groff/src/utils/lkbib/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=lkbib$(EXEEXT)
-MAN1=lkbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lkbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lkbib.cpp
diff --git a/contrib/groff/src/utils/lkbib/lkbib.cpp b/contrib/groff/src/utils/lkbib/lkbib.cpp
deleted file mode 100644
index b44f245af7b7..000000000000
--- a/contrib/groff/src/utils/lkbib/lkbib.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "errarg.h"
-#include "error.h"
-
-#include "defs.h"
-#include "refid.h"
-#include "search.h"
-
-extern "C" const char *Version_string;
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-nv] [-p database] [-i XYZ] [-t N] keys ...\n",
- program_name);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int search_default = 1;
- search_list list;
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "nvVi:t:p:", long_options, NULL))
- != EOF)
- switch (opt) {
- case 'V':
- verify_flag = 1;
- break;
- case 'n':
- search_default = 0;
- break;
- case 'i':
- linear_ignore_fields = optarg;
- break;
- case 't':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg) {
- error("bad integer `%1' in `t' option", optarg);
- break;
- }
- if (n < 1)
- n = 1;
- linear_truncate_len = int(n);
- break;
- }
- case 'v':
- {
- printf("GNU lkbib (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case 'p':
- list.add_file(optarg);
- break;
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- if (optind >= argc) {
- usage(stderr);
- exit(1);
- }
- char *filename = getenv("REFER");
- if (filename)
- list.add_file(filename);
- else if (search_default)
- list.add_file(DEFAULT_INDEX, 1);
- if (list.nfiles() == 0)
- fatal("no databases");
- int total_len = 0;
- int i;
- for (i = optind; i < argc; i++)
- total_len += strlen(argv[i]);
- total_len += argc - optind - 1 + 1; // for spaces and '\0'
- char *buffer = new char[total_len];
- char *ptr = buffer;
- for (i = optind; i < argc; i++) {
- if (i > optind)
- *ptr++ = ' ';
- strcpy(ptr, argv[i]);
- ptr = strchr(ptr, '\0');
- }
- search_list_iterator iter(&list, buffer);
- const char *start;
- int len;
- int count;
- for (count = 0; iter.next(&start, &len); count++) {
- if (fwrite(start, 1, len, stdout) != (size_t)len)
- fatal("write error on stdout: %1", strerror(errno));
- // Can happen for last reference in file.
- if (start[len - 1] != '\n')
- putchar('\n');
- putchar('\n');
- }
- return !count;
-}
diff --git a/contrib/groff/src/utils/lkbib/lkbib.man b/contrib/groff/src/utils/lkbib/lkbib.man
deleted file mode 100644
index 29831ee8d4cb..000000000000
--- a/contrib/groff/src/utils/lkbib/lkbib.man
+++ /dev/null
@@ -1,136 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.
-.TH LKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-lkbib \- search bibliographic databases
-.
-.
-.SH SYNOPSIS
-.B lkbib
-[
-.B \-v
-]
-[
-.BI \-i fields
-]
-[
-.BI \-p filename
-]
-[
-.BI \-t n
-]
-.IR key \|.\|.\|.
-.
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-.B lkbib
-searches bibliographic databases for references that contain the keys
-.IR key \|.\|.\|.\&
-and prints any references found on the standard output.
-.B lkbib
-will search any databases given by
-.B \-p
-options, and then a default database.
-The default database is taken from the
-.SB REFER
-environment variable if it is set,
-otherwise it is
-.BR @DEFAULT_INDEX@ .
-For each database
-.I filename
-to be searched,
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.
-.SH OPTIONS
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-p filename
-Search
-.IR filename .
-Multiple
-.B \-p
-options can be used.
-.
-.TP
-.BI \-i string
-When searching files for which no index exists,
-ignore the contents of fields whose names are in
-.IR string .
-.
-.TP
-.BI \-t n
-Only require the first
-.I n
-characters of keys to be given.
-Initially
-.I n
-is\~6.
-.
-.
-.SH ENVIRONMENT
-.TP \w'\fBREFER'u+2n
-.SB REFER
-Default database.
-.
-.
-.SH FILES
-.Tp \w'\fB@DEFAULT_INDEX@'u+2n
-.B @DEFAULT_INDEX@
-Default database to be used if the
-.SB REFER
-environment variable is not set.
-.
-.TP
-.IB filename @INDEX_SUFFIX@
-Index files.
-.
-.
-.SH "SEE ALSO"
-.BR @g@refer (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-.BR @g@indxbib (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/lookbib/Makefile.sub b/contrib/groff/src/utils/lookbib/Makefile.sub
deleted file mode 100644
index 9ca2d88fccf9..000000000000
--- a/contrib/groff/src/utils/lookbib/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=lookbib$(EXEEXT)
-MAN1=lookbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lookbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lookbib.cpp
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/utils/lookbib/lookbib.cpp b/contrib/groff/src/utils/lookbib/lookbib.cpp
deleted file mode 100644
index a573c5f6fa3a..000000000000
--- a/contrib/groff/src/utils/lookbib/lookbib.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "errarg.h"
-#include "error.h"
-#include "cset.h"
-
-#include "refid.h"
-#include "search.h"
-
-/* for isatty() */
-#include "posix.h"
-#include "nonposix.h"
-
-extern "C" {
- const char *Version_string;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-v] [-i XYZ] [-t N] database ...\n",
- program_name);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "vVi:t:", long_options, NULL)) != EOF)
- switch (opt) {
- case 'V':
- verify_flag = 1;
- break;
- case 'i':
- linear_ignore_fields = optarg;
- break;
- case 't':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg) {
- error("bad integer `%1' in `t' option", optarg);
- break;
- }
- if (n < 1)
- n = 1;
- linear_truncate_len = int(n);
- break;
- }
- case 'v':
- {
- printf("GNU lookbib (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- default:
- assert(0);
- }
- if (optind >= argc) {
- usage(stderr);
- exit(1);
- }
- search_list list;
- for (int i = optind; i < argc; i++)
- list.add_file(argv[i]);
- if (list.nfiles() == 0)
- fatal("no databases");
- char line[1024];
- int interactive = isatty(fileno(stdin));
- for (;;) {
- if (interactive) {
- fputs("> ", stderr);
- fflush(stderr);
- }
- if (!fgets(line, sizeof(line), stdin))
- break;
- char *ptr = line;
- while (csspace(*ptr))
- ptr++;
- if (*ptr == '\0')
- continue;
- search_list_iterator iter(&list, line);
- const char *start;
- int len;
- int count;
- for (count = 0; iter.next(&start, &len); count++) {
- if (fwrite(start, 1, len, stdout) != (size_t)len)
- fatal("write error on stdout: %1", strerror(errno));
- // Can happen for last reference in file.
- if (start[len - 1] != '\n')
- putchar('\n');
- putchar('\n');
- }
- fflush(stdout);
- if (interactive) {
- fprintf(stderr, "%d found\n", count);
- fflush(stderr);
- }
- }
- if (interactive)
- putc('\n', stderr);
- return 0;
-}
-
diff --git a/contrib/groff/src/utils/lookbib/lookbib.man b/contrib/groff/src/utils/lookbib/lookbib.man
deleted file mode 100644
index baade0fd5309..000000000000
--- a/contrib/groff/src/utils/lookbib/lookbib.man
+++ /dev/null
@@ -1,101 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.TH @G@LOOKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-@g@lookbib \- search bibliographic databases
-.
-.
-.SH SYNOPSIS
-.B @g@lookbib
-[
-.B \-v
-]
-[
-.BI \-i string
-]
-[
-.BI \-t n
-]
-.IR filename \|.\|.\|.
-.
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-.B @g@lookbib
-prints a prompt on the standard error (unless the standard input is not
-a terminal),
-reads from the standard input a line containing a set of keywords,
-searches the bibliographic databases
-.IR filename \|.\|.\|.\&
-for references containing those keywords,
-prints any references found on the standard output,
-and repeats this process until the end of input.
-For each database
-.I filename
-to be searched,
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.
-.SH OPTIONS
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-i string
-When searching files for which no index exists,
-ignore the contents of fields whose names are in
-.IR string .
-.
-.TP
-.BI \-t n
-Only require the first
-.I n
-characters of keys to be given.
-Initially
-.I n
-is\~6.
-.
-.
-.SH FILES
-.TP \w'\fIfilename\fB@INDEX_SUFFIX@'u+2n
-.IB filename @INDEX_SUFFIX@
-Index files.
-.
-.
-.SH "SEE ALSO"
-.BR @g@refer (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@),
-.BR @g@indxbib (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/pfbtops/Makefile.sub b/contrib/groff/src/utils/pfbtops/Makefile.sub
deleted file mode 100644
index 451b519be8ac..000000000000
--- a/contrib/groff/src/utils/pfbtops/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=pfbtops$(EXEEXT)
-MAN1=pfbtops.n
-OBJS=pfbtops.$(OBJEXT)
-CSRCS=$(srcdir)/pfbtops.c
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-LINK.c=$(CCC) $(CCFLAGS) $(LDFLAGS)
diff --git a/contrib/groff/src/utils/pfbtops/pfbtops.c b/contrib/groff/src/utils/pfbtops/pfbtops.c
deleted file mode 100644
index 8b394d5d1f03..000000000000
--- a/contrib/groff/src/utils/pfbtops/pfbtops.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/* Copyright (C) 1992, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* This translates ps fonts in .pfb format to ASCII ps files. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#define __GETOPT_PREFIX groff_
-#include <getopt.h>
-
-#include "nonposix.h"
-
-/* Binary bytes per output line. */
-#define BYTES_PER_LINE (64/2)
-#define MAX_LINE_LENGTH 78
-#define HEX_DIGITS "0123456789abcdef"
-
-extern const char *Version_string;
-
-static char *program_name;
-
-static void error(const char *s)
-{
- fprintf(stderr, "%s: %s\n", program_name, s);
- exit(2);
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-v] [pfb_file]\n", program_name);
-}
-
-static void get_text(int n)
-{
- int c = 0, c1;
- int in_string = 0;
- int is_comment = 0;
- int count = 0;
-
- while (--n >= 0) {
- c = getchar();
- if (c == '(' && !is_comment)
- in_string++;
- else if (c == ')' && !is_comment)
- in_string--;
- else if (c == '%' && !in_string)
- is_comment = 1;
- else if (c == '\\' && in_string) {
- count++;
- putchar(c);
- if (n-- == 0)
- break;
- c = getchar();
- /* don't split octal character representations */
- if (c >= '0' && c <= '7') {
- count++;
- putchar(c);
- if (n-- == 0)
- break;
- c = getchar();
- if (c >= '0' && c <= '7') {
- count++;
- putchar(c);
- if (n-- == 0)
- break;
- c = getchar();
- if (c >= '0' && c <= '7') {
- count++;
- putchar(c);
- if (n-- == 0)
- break;
- c = getchar();
- }
- }
- }
- }
- if (c == EOF)
- error("end of file in text packet");
- else if (c == '\r') {
- if (n-- == 0)
- break;
- c1 = getchar();
- if (c1 != '\n') {
- ungetc(c1, stdin);
- n++;
- }
- c = '\n';
- }
- if (c == '\n') {
- count = 0;
- is_comment = 0;
- }
- else if (count >= MAX_LINE_LENGTH) {
- if (in_string > 0) {
- count = 1;
- putchar('\\');
- putchar('\n');
- }
- else if (is_comment) {
- count = 2;
- putchar('\n');
- putchar('%');
- }
- else {
- /* split at the next whitespace character */
- while (c != ' ' && c != '\t' && c != '\f') {
- putchar(c);
- if (n-- == 0)
- break;
- c = getchar();
- }
- count = 0;
- putchar('\n');
- continue;
- }
- }
- count++;
- putchar(c);
- }
- if (c != '\n')
- putchar('\n');
-}
-
-static void get_binary(int n)
-{
- int c;
- int count = 0;
-
- while (--n >= 0) {
- c = getchar();
- if (c == EOF)
- error("end of file in binary packet");
- if (count >= BYTES_PER_LINE) {
- putchar('\n');
- count = 0;
- }
- count++;
- putchar(HEX_DIGITS[(c >> 4) & 0xf]);
- putchar(HEX_DIGITS[c & 0xf]);
- }
- putchar('\n');
-}
-
-int main(int argc, char **argv)
-{
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
-
- program_name = argv[0];
-
- while ((opt = getopt_long(argc, argv, "v", long_options, NULL)) != EOF) {
- switch (opt) {
- case 'v':
- printf("GNU pfbtops (groff) version %s\n", Version_string);
- exit(0);
- break;
- case CHAR_MAX + 1: /* --help */
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- }
- }
-
- if (argc - optind > 1) {
- usage(stderr);
- exit(1);
- }
- if (argc > optind && !freopen(argv[optind], "r", stdin)) {
- perror(argv[optind]);
- exit(1);
- }
- SET_BINARY(fileno(stdin));
- for (;;) {
- int type, c, i;
- long n;
-
- c = getchar();
- if (c != 0x80)
- error("first byte of packet not 0x80");
- type = getchar();
- if (type == 3)
- break;
- if (type != 1 && type != 2)
- error("bad packet type");
- n = 0;
- for (i = 0; i < 4; i++) {
- c = getchar();
- if (c == EOF)
- error("end of file in packet header");
- n |= (long)c << (i << 3);
- }
- if (n < 0)
- error("negative packet length");
- if (type == 1)
- get_text(n);
- else
- get_binary(n);
- }
- exit(0);
-}
diff --git a/contrib/groff/src/utils/pfbtops/pfbtops.man b/contrib/groff/src/utils/pfbtops/pfbtops.man
deleted file mode 100644
index c97a29763389..000000000000
--- a/contrib/groff/src/utils/pfbtops/pfbtops.man
+++ /dev/null
@@ -1,68 +0,0 @@
-.ig
-Copyright (C) 1989-1995, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.TH PFBTOPS @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-pfbtops \- translate a PostScript font in .pfb format to ASCII
-.
-.
-.SH SYNOPSIS
-.B pfbtops
-[
-.B \-v
-]
-[
-.I pfb_file
-]
-.
-.
-.SH DESCRIPTION
-.B pfbtops
-translates a PostScript font in
-.B .pfb
-format to ASCII, splitting overlong lines in text packets into smaller
-chunks.
-If
-.I pfb_file
-is omitted the pfb file will be read from the standard input.
-The ASCII format PostScript font will be written on the standard output.
-PostScript fonts for MS-DOS are normally supplied in
-.B .pfb
-format.
-.
-.LP
-The resulting ASCII format PostScript font can be used with groff.
-It must first be listed in
-.BR @FONTDIR@/devps/download .
-.
-.SH OPTIONS
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH "SEE ALSO"
-.BR grops (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/tfmtodit/Makefile.sub b/contrib/groff/src/utils/tfmtodit/Makefile.sub
deleted file mode 100644
index 161210488df6..000000000000
--- a/contrib/groff/src/utils/tfmtodit/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=tfmtodit$(EXEEXT)
-MAN1=tfmtodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tfmtodit.$(OBJEXT)
-CCSRCS=$(srcdir)/tfmtodit.cpp
diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp b/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp
deleted file mode 100644
index ccf995a32302..000000000000
--- a/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp
+++ /dev/null
@@ -1,874 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001, 2004 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* I have tried to incorporate the changes needed for TeX 3.0 tfm files,
-but I haven't tested them. */
-
-/* Groff requires more font metric information than TeX. The reason
-for this is that TeX has separate Math Italic fonts, whereas groff
-uses normal italic fonts for math. The two additional pieces of
-information required by groff correspond to the two arguments to the
-math_fit() macro in the Metafont programs for the CM fonts. In the
-case of a font for which math_fitting is false, these two arguments
-are normally ignored by Metafont. We need to get hold of these two
-parameters and put them in the groff font file.
-
-We do this by loading this definition after cmbase when creating cm.base.
-
-def ignore_math_fit(expr left_adjustment,right_adjustment) =
- special "adjustment";
- numspecial left_adjustment*16/designsize;
- numspecial right_adjustment*16/designsize;
- enddef;
-
-This puts the two arguments to the math_fit macro into the gf file.
-(They will appear in the gf file immediately before the character to
-which they apply.) We then create a gf file using this cm.base. Then
-we run tfmtodit and specify this gf file with the -g option.
-
-This need only be done for a font for which math_fitting is false;
-When it's true, the left_correction and subscript_correction should
-both be zero. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <math.h>
-#include <errno.h>
-#include "errarg.h"
-#include "error.h"
-#include "assert.h"
-#include "cset.h"
-#include "nonposix.h"
-
-extern "C" const char *Version_string;
-
-/* Values in the tfm file should be multiplied by this. */
-
-#define MULTIPLIER 1
-
-struct char_info_word {
- unsigned char width_index;
- char height_index;
- char depth_index;
- char italic_index;
- char tag;
- unsigned char remainder;
-};
-
-struct lig_kern_command {
- unsigned char skip_byte;
- unsigned char next_char;
- unsigned char op_byte;
- unsigned char remainder;
-};
-
-class tfm {
- int bc;
- int ec;
- int nw;
- int nh;
- int nd;
- int ni;
- int nl;
- int nk;
- int np;
- int cs;
- int ds;
- char_info_word *char_info;
- int *width;
- int *height;
- int *depth;
- int *italic;
- lig_kern_command *lig_kern;
- int *kern;
- int *param;
-public:
- tfm();
- ~tfm();
- int load(const char *);
- int contains(int);
- int get_width(int);
- int get_height(int);
- int get_depth(int);
- int get_italic(int);
- int get_param(int, int *);
- int get_checksum();
- int get_design_size();
- int get_lig(unsigned char, unsigned char, unsigned char *);
- friend class kern_iterator;
-};
-
-class kern_iterator {
- tfm *t;
- int c;
- int i;
-public:
- kern_iterator(tfm *);
- int next(unsigned char *c1, unsigned char *c2, int *k);
-};
-
-
-kern_iterator::kern_iterator(tfm *p)
-: t(p), c(t->bc), i(-1)
-{
-}
-
-int kern_iterator::next(unsigned char *c1, unsigned char *c2, int *k)
-{
- for (; c <= t->ec; c++)
- if (t->char_info[c - t->bc].tag == 1) {
- if (i < 0) {
- i = t->char_info[c - t->bc].remainder;
- if (t->lig_kern[i].skip_byte > 128)
- i = (256*t->lig_kern[i].op_byte
- + t->lig_kern[i].remainder);
- }
- for (;;) {
- int skip = t->lig_kern[i].skip_byte;
- if (skip <= 128 && t->lig_kern[i].op_byte >= 128) {
- *c1 = c;
- *c2 = t->lig_kern[i].next_char;
- *k = t->kern[256*(t->lig_kern[i].op_byte - 128)
- + t->lig_kern[i].remainder];
- if (skip == 128) {
- c++;
- i = -1;
- }
- else
- i += skip + 1;
- return 1;
- }
- if (skip >= 128)
- break;
- i += skip + 1;
- }
- i = -1;
- }
- return 0;
-}
-
-tfm::tfm()
-: char_info(0), width(0), height(0), depth(0), italic(0), lig_kern(0),
- kern(0), param(0)
-{
-}
-
-int tfm::get_lig(unsigned char c1, unsigned char c2, unsigned char *cp)
-{
- if (contains(c1) && char_info[c1 - bc].tag == 1) {
- int i = char_info[c1 - bc].remainder;
- if (lig_kern[i].skip_byte > 128)
- i = 256*lig_kern[i].op_byte + lig_kern[i].remainder;
- for (;;) {
- int skip = lig_kern[i].skip_byte;
- if (skip > 128)
- break;
- // We are only interested in normal ligatures, for which
- // op_byte == 0.
- if (lig_kern[i].op_byte == 0
- && lig_kern[i].next_char == c2) {
- *cp = lig_kern[i].remainder;
- return 1;
- }
- if (skip == 128)
- break;
- i += skip + 1;
- }
- }
- return 0;
-}
-
-int tfm::contains(int i)
-{
- return i >= bc && i <= ec && char_info[i - bc].width_index != 0;
-}
-
-int tfm::get_width(int i)
-{
- return width[char_info[i - bc].width_index];
-}
-
-int tfm::get_height(int i)
-{
- return height[char_info[i - bc].height_index];
-}
-
-int tfm::get_depth(int i)
-{
- return depth[char_info[i - bc].depth_index];
-}
-
-int tfm::get_italic(int i)
-{
- return italic[char_info[i - bc].italic_index];
-}
-
-int tfm::get_param(int i, int *p)
-{
- if (i <= 0 || i > np)
- return 0;
- else {
- *p = param[i - 1];
- return 1;
- }
-}
-
-int tfm::get_checksum()
-{
- return cs;
-}
-
-int tfm::get_design_size()
-{
- return ds;
-}
-
-tfm::~tfm()
-{
- a_delete char_info;
- a_delete width;
- a_delete height;
- a_delete depth;
- a_delete italic;
- a_delete lig_kern;
- a_delete kern;
- a_delete param;
-}
-
-int read2(unsigned char *&s)
-{
- int n;
- n = *s++ << 8;
- n |= *s++;
- return n;
-}
-
-int read4(unsigned char *&s)
-{
- int n;
- n = *s++ << 24;
- n |= *s++ << 16;
- n |= *s++ << 8;
- n |= *s++;
- return n;
-}
-
-
-int tfm::load(const char *file)
-{
- errno = 0;
- FILE *fp = fopen(file, FOPEN_RB);
- if (!fp) {
- error("can't open `%1': %2", file, strerror(errno));
- return 0;
- }
- int c1 = getc(fp);
- int c2 = getc(fp);
- if (c1 == EOF || c2 == EOF) {
- fclose(fp);
- error("unexpected end of file on `%1'", file);
- return 0;
- }
- int lf = (c1 << 8) + c2;
- int toread = lf*4 - 2;
- unsigned char *buf = new unsigned char[toread];
- if (fread(buf, 1, toread, fp) != (size_t)toread) {
- if (feof(fp))
- error("unexpected end of file on `%1'", file);
- else
- error("error on file `%1'", file);
- a_delete buf;
- fclose(fp);
- return 0;
- }
- fclose(fp);
- if (lf < 6) {
- error("bad tfm file `%1': impossibly short", file);
- a_delete buf;
- return 0;
- }
- unsigned char *ptr = buf;
- int lh = read2(ptr);
- bc = read2(ptr);
- ec = read2(ptr);
- nw = read2(ptr);
- nh = read2(ptr);
- nd = read2(ptr);
- ni = read2(ptr);
- nl = read2(ptr);
- nk = read2(ptr);
- int ne = read2(ptr);
- np = read2(ptr);
- if (6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np != lf) {
- error("bad tfm file `%1': lengths do not sum", file);
- a_delete buf;
- return 0;
- }
- if (lh < 2) {
- error("bad tfm file `%1': header too short", file);
- a_delete buf;
- return 0;
- }
- char_info = new char_info_word[ec - bc + 1];
- width = new int[nw];
- height = new int[nh];
- depth = new int[nd];
- italic = new int[ni];
- lig_kern = new lig_kern_command[nl];
- kern = new int[nk];
- param = new int[np];
- int i;
- cs = read4(ptr);
- ds = read4(ptr);
- ptr += (lh-2)*4;
- for (i = 0; i < ec - bc + 1; i++) {
- char_info[i].width_index = *ptr++;
- unsigned char tem = *ptr++;
- char_info[i].depth_index = tem & 0xf;
- char_info[i].height_index = tem >> 4;
- tem = *ptr++;
- char_info[i].italic_index = tem >> 2;
- char_info[i].tag = tem & 3;
- char_info[i].remainder = *ptr++;
- }
- for (i = 0; i < nw; i++)
- width[i] = read4(ptr);
- for (i = 0; i < nh; i++)
- height[i] = read4(ptr);
- for (i = 0; i < nd; i++)
- depth[i] = read4(ptr);
- for (i = 0; i < ni; i++)
- italic[i] = read4(ptr);
- for (i = 0; i < nl; i++) {
- lig_kern[i].skip_byte = *ptr++;
- lig_kern[i].next_char = *ptr++;
- lig_kern[i].op_byte = *ptr++;
- lig_kern[i].remainder = *ptr++;
- }
- for (i = 0; i < nk; i++)
- kern[i] = read4(ptr);
- ptr += ne*4;
- for (i = 0; i < np; i++)
- param[i] = read4(ptr);
- assert(ptr == buf + lf*4 - 2);
- a_delete buf;
- return 1;
-}
-
-class gf {
- int left[256];
- int right[256];
- static int sread4(int *p, FILE *fp);
- static int uread3(int *p, FILE *fp);
- static int uread2(int *p, FILE *fp);
- static int skip(int n, FILE *fp);
-public:
- gf();
- int load(const char *file);
- int get_left_adjustment(int i) { return left[i]; }
- int get_right_adjustment(int i) { return right[i]; }
-};
-
-gf::gf()
-{
- for (int i = 0; i < 256; i++)
- left[i] = right[i] = 0;
-}
-
-int gf::load(const char *file)
-{
- enum {
- paint_0 = 0,
- paint1 = 64,
- boc = 67,
- boc1 = 68,
- eoc = 69,
- skip0 = 70,
- skip1 = 71,
- new_row_0 = 74,
- xxx1 = 239,
- yyy = 243,
- no_op = 244,
- pre = 247,
- post = 248
- };
- int got_an_adjustment = 0;
- int pending_adjustment = 0;
- int left_adj = 0, right_adj = 0; // pacify compiler
- const int gf_id_byte = 131;
- errno = 0;
- FILE *fp = fopen(file, FOPEN_RB);
- if (!fp) {
- error("can't open `%1': %2", file, strerror(errno));
- return 0;
- }
- if (getc(fp) != pre || getc(fp) != gf_id_byte) {
- error("bad gf file");
- return 0;
- }
- int n = getc(fp);
- if (n == EOF)
- goto eof;
- if (!skip(n, fp))
- goto eof;
- for (;;) {
- int op = getc(fp);
- if (op == EOF)
- goto eof;
- if (op == post)
- break;
- if ((op >= paint_0 && op <= paint_0 + 63)
- || (op >= new_row_0 && op <= new_row_0 + 164))
- continue;
- switch (op) {
- case no_op:
- case eoc:
- case skip0:
- break;
- case paint1:
- case skip1:
- if (!skip(1, fp))
- goto eof;
- break;
- case paint1 + 1:
- case skip1 + 1:
- if (!skip(2, fp))
- goto eof;
- break;
- case paint1 + 2:
- case skip1 + 2:
- if (!skip(3, fp))
- goto eof;
- break;
- case boc:
- {
- int code;
- if (!sread4(&code, fp))
- goto eof;
- if (pending_adjustment) {
- pending_adjustment = 0;
- left[code & 0377] = left_adj;
- right[code & 0377] = right_adj;
- }
- if (!skip(20, fp))
- goto eof;
- break;
- }
- case boc1:
- {
- int code = getc(fp);
- if (code == EOF)
- goto eof;
- if (pending_adjustment) {
- pending_adjustment = 0;
- left[code] = left_adj;
- right[code] = right_adj;
- }
- if (!skip(4, fp))
- goto eof;
- break;
- }
- case xxx1:
- {
- int len = getc(fp);
- if (len == EOF)
- goto eof;
- char buf[256];
- if (fread(buf, 1, len, fp) != (size_t)len)
- goto eof;
- if (len == 10 /* strlen("adjustment") */
- && memcmp(buf, "adjustment", len) == 0) {
- int c = getc(fp);
- if (c != yyy) {
- if (c != EOF)
- ungetc(c, fp);
- break;
- }
- if (!sread4(&left_adj, fp))
- goto eof;
- c = getc(fp);
- if (c != yyy) {
- if (c != EOF)
- ungetc(c, fp);
- break;
- }
- if (!sread4(&right_adj, fp))
- goto eof;
- got_an_adjustment = 1;
- pending_adjustment = 1;
- }
- break;
- }
- case xxx1 + 1:
- if (!uread2(&n, fp) || !skip(n, fp))
- goto eof;
- break;
- case xxx1 + 2:
- if (!uread3(&n, fp) || !skip(n, fp))
- goto eof;
- break;
- case xxx1 + 3:
- if (!sread4(&n, fp) || !skip(n, fp))
- goto eof;
- break;
- case yyy:
- if (!skip(4, fp))
- goto eof;
- break;
- default:
- fatal("unrecognized opcode `%1'", op);
- break;
- }
- }
- if (!got_an_adjustment)
- warning("no adjustment specials found in gf file");
- return 1;
- eof:
- error("unexpected end of file");
- return 0;
-}
-
-int gf::sread4(int *p, FILE *fp)
-{
- *p = getc(fp);
- if (*p >= 128)
- *p -= 256;
- *p <<= 8;
- *p |= getc(fp);
- *p <<= 8;
- *p |= getc(fp);
- *p <<= 8;
- *p |= getc(fp);
- return !ferror(fp) && !feof(fp);
-}
-
-int gf::uread3(int *p, FILE *fp)
-{
- *p = getc(fp);
- *p <<= 8;
- *p |= getc(fp);
- *p <<= 8;
- *p |= getc(fp);
- return !ferror(fp) && !feof(fp);
-}
-
-int gf::uread2(int *p, FILE *fp)
-{
- *p = getc(fp);
- *p <<= 8;
- *p |= getc(fp);
- return !ferror(fp) && !feof(fp);
-}
-
-int gf::skip(int n, FILE *fp)
-{
- while (--n >= 0)
- if (getc(fp) == EOF)
- return 0;
- return 1;
-}
-
-
-struct char_list {
- char *ch;
- char_list *next;
- char_list(const char *, char_list * = 0);
-};
-
-char_list::char_list(const char *s, char_list *p) : ch(strsave(s)), next(p)
-{
-}
-
-
-int read_map(const char *file, char_list **table)
-{
- errno = 0;
- FILE *fp = fopen(file, "r");
- if (!fp) {
- error("can't open `%1': %2", file, strerror(errno));
- return 0;
- }
- for (int i = 0; i < 256; i++)
- table[i] = 0;
- char buf[512];
- int lineno = 0;
- while (fgets(buf, int(sizeof(buf)), fp)) {
- lineno++;
- char *ptr = buf;
- while (csspace(*ptr))
- ptr++;
- if (*ptr == '\0' || *ptr == '#')
- continue;
- ptr = strtok(ptr, " \n\t");
- if (!ptr)
- continue;
- int n;
- if (sscanf(ptr, "%d", &n) != 1) {
- error("%1:%2: bad map file", file, lineno);
- fclose(fp);
- return 0;
- }
- if (n < 0 || n > 255) {
- error("%1:%2: code out of range", file, lineno);
- fclose(fp);
- return 0;
- }
- ptr = strtok(0, " \n\t");
- if (!ptr) {
- error("%1:%2: missing names", file, lineno);
- fclose(fp);
- return 0;
- }
- for (; ptr; ptr = strtok(0, " \n\t"))
- table[n] = new char_list(ptr, table[n]);
- }
- fclose(fp);
- return 1;
-}
-
-
-/* Every character that can participate in a ligature appears in the
-lig_chars table. `ch' gives the full-name of the character, `name'
-gives the groff name of the character, `i' gives its index in
-the encoding, which is filled in later (-1 if it does not appear). */
-
-struct S {
- const char *ch;
- int i;
-} lig_chars[] = {
- { "f", -1 },
- { "i", -1 },
- { "l", -1 },
- { "ff", -1 },
- { "fi", -1 },
- { "fl", -1 },
- { "Fi", -1 },
- { "Fl", -1 },
-};
-
-// Indices into lig_chars[].
-
-enum { CH_f, CH_i, CH_l, CH_ff, CH_fi, CH_fl, CH_ffi, CH_ffl };
-
-// Each possible ligature appears in this table.
-
-struct S2 {
- unsigned char c1, c2, res;
- const char *ch;
-} lig_table[] = {
- { CH_f, CH_f, CH_ff, "ff" },
- { CH_f, CH_i, CH_fi, "fi" },
- { CH_f, CH_l, CH_fl, "fl" },
- { CH_ff, CH_i, CH_ffi, "ffi" },
- { CH_ff, CH_l, CH_ffl, "ffl" },
- };
-
-static void usage(FILE *stream);
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- int special_flag = 0;
- int skewchar = -1;
- int opt;
- const char *gf_file = 0;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
- while ((opt = getopt_long(argc, argv, "svg:k:", long_options, NULL)) != EOF)
- switch (opt) {
- case 'g':
- gf_file = optarg;
- break;
- case 's':
- special_flag = 1;
- break;
- case 'k':
- {
- char *ptr;
- long n = strtol(optarg, &ptr, 0);
- if ((n == 0 && ptr == optarg)
- || *ptr != '\0'
- || n < 0
- || n > UCHAR_MAX)
- error("invalid skewchar");
- else
- skewchar = (int)n;
- break;
- }
- case 'v':
- {
- printf("GNU tfmtodit (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
- case CHAR_MAX + 1: // --help
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- case EOF:
- assert(0);
- }
- if (argc - optind != 3) {
- usage(stderr);
- exit(1);
- }
- gf g;
- if (gf_file) {
- if (!g.load(gf_file))
- return 1;
- }
- const char *tfm_file = argv[optind];
- const char *map_file = argv[optind + 1];
- const char *font_file = argv[optind + 2];
- tfm t;
- if (!t.load(tfm_file))
- return 1;
- char_list *table[256];
- if (!read_map(map_file, table))
- return 1;
- errno = 0;
- if (!freopen(font_file, "w", stdout)) {
- error("can't open `%1' for writing: %2", font_file, strerror(errno));
- return 1;
- }
- printf("name %s\n", font_file);
- if (special_flag)
- fputs("special\n", stdout);
- char *internal_name = strsave(argv[optind]);
- int len = strlen(internal_name);
- if (len > 4 && strcmp(internal_name + len - 4, ".tfm") == 0)
- internal_name[len - 4] = '\0';
- // DIR_SEPS[] are possible directory separator characters, see nonposix.h.
- // We want the rightmost separator of all possible ones.
- // Example: d:/foo\\bar.
- const char *s = strrchr(internal_name, DIR_SEPS[0]), *s1;
- const char *sep = &DIR_SEPS[1];
- while (*sep)
- {
- s1 = strrchr(internal_name, *sep);
- if (s1 && (!s || s1 > s))
- s = s1;
- sep++;
- }
- printf("internalname %s\n", s ? s + 1 : internal_name);
- int n;
- if (t.get_param(2, &n)) {
- if (n > 0)
- printf("spacewidth %d\n", n*MULTIPLIER);
- }
- if (t.get_param(1, &n) && n != 0)
- printf("slant %f\n", atan2(n/double(1<<20), 1.0)*180.0/PI);
- int xheight;
- if (!t.get_param(5, &xheight))
- xheight = 0;
- unsigned int i;
- // Print the list of ligatures.
- // First find the indices of each character that can participate in
- // a ligature.
- for (i = 0; i < 256; i++)
- for (unsigned int j = 0; j < sizeof(lig_chars)/sizeof(lig_chars[0]); j++)
- for (char_list *p = table[i]; p; p = p->next)
- if (strcmp(lig_chars[j].ch, p->ch) == 0)
- lig_chars[j].i = i;
- // For each possible ligature, if its participants all exist,
- // and it appears as a ligature in the tfm file, include in
- // the list of ligatures.
- int started = 0;
- for (i = 0; i < sizeof(lig_table)/sizeof(lig_table[0]); i++) {
- int i1 = lig_chars[lig_table[i].c1].i;
- int i2 = lig_chars[lig_table[i].c2].i;
- int r = lig_chars[lig_table[i].res].i;
- if (i1 >= 0 && i2 >= 0 && r >= 0) {
- unsigned char c;
- if (t.get_lig(i1, i2, &c) && c == r) {
- if (!started) {
- started = 1;
- fputs("ligatures", stdout);
- }
- printf(" %s", lig_table[i].ch);
- }
- }
- }
- if (started)
- fputs(" 0\n", stdout);
- printf("checksum %d\n", t.get_checksum());
- printf("designsize %d\n", t.get_design_size());
- // Now print out the kerning information.
- int had_kern = 0;
- kern_iterator iter(&t);
- unsigned char c1, c2;
- int k;
- while (iter.next(&c1, &c2, &k))
- if (c2 != skewchar) {
- k *= MULTIPLIER;
- char_list *q = table[c2];
- for (char_list *p1 = table[c1]; p1; p1 = p1->next)
- for (char_list *p2 = q; p2; p2 = p2->next) {
- if (!had_kern) {
- printf("kernpairs\n");
- had_kern = 1;
- }
- printf("%s %s %d\n", p1->ch, p2->ch, k);
- }
- }
- printf("charset\n");
- char_list unnamed("---");
- for (i = 0; i < 256; i++)
- if (t.contains(i)) {
- char_list *p = table[i] ? table[i] : &unnamed;
- int m[6];
- m[0] = t.get_width(i);
- m[1] = t.get_height(i);
- m[2] = t.get_depth(i);
- m[3] = t.get_italic(i);
- m[4] = g.get_left_adjustment(i);
- m[5] = g.get_right_adjustment(i);
- printf("%s\t%d", p->ch, m[0]*MULTIPLIER);
- int j;
- for (j = int(sizeof(m)/sizeof(m[0])) - 1; j > 0; j--)
- if (m[j] != 0)
- break;
- for (k = 1; k <= j; k++)
- printf(",%d", m[k]*MULTIPLIER);
- int type = 0;
- if (m[2] > 0)
- type = 1;
- if (m[1] > xheight)
- type += 2;
- printf("\t%d\t%04o\n", type, i);
- for (p = p->next; p; p = p->next)
- printf("%s\t\"\n", p->ch);
- }
- return 0;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream, "usage: %s [-sv] [-g gf_file] [-k skewchar] tfm_file map_file font\n",
- program_name);
-}
diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.man b/contrib/groff/src/utils/tfmtodit/tfmtodit.man
deleted file mode 100644
index 51f806d0334c..000000000000
--- a/contrib/groff/src/utils/tfmtodit/tfmtodit.man
+++ /dev/null
@@ -1,197 +0,0 @@
-.ig
-Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.TH TFMTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-tfmtodit \- create font files for use with groff \-Tdvi
-.SH SYNOPSIS
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBtfmtodit 'u
-.ti \niu
-.B tfmtodit
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-sv
-.OP \-g gf_file
-.OP \-k skewchar
-.I tfm_file
-.I map_file
-.I font
-.br
-.ad \na
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.SH DESCRIPTION
-.B tfmtodit
-creates a font file for use with
-.B
-groff \-Tdvi\fR.
-.I tfm_file
-is the name of the \*(tx font metric file for the font.
-.I map_file
-is a file giving the groff names for characters in the font;
-this file should consist of a sequence of lines of the form:
-.IP
-.I
-n c1 c2 \fR.\|.\|.
-.LP
-where
-.I n
-is a decimal integer giving the position of the character in the font,
-and
-.IR c1 ,
-.IR c2 ,.\|.\|.
-are the groff names of the character.
-If a character has no groff names but exists in the tfm file,
-then it will be put in the groff font file as an unnamed character.
-.I font
-is the name of the groff font file.
-The groff font file is written to
-.IR font .
-.LP
-The
-.B \-s
-option should be given if the font is special
-(a font is
-.I special
-if
-.B troff
-should search it whenever
-a character is not found in the current font.)
-If the font is special,
-it should be listed in the
-.B fonts
-command in the DESC file;
-if it is not special, there is no need to list it, since
-.B troff
-can automatically mount it when it's first used.
-.LP
-To do a good job of math typesetting, groff requires
-font metric information not present in the tfm file.
-The reason for this is that \*(tx has separate math italic fonts
-whereas groff uses normal italic fonts for math.
-The additional information required by groff is given by the
-two arguments to the
-.B math_fit
-macro in the Metafont programs for the Computer Modern fonts.
-In a text font (a font for which
-.B math_fitting
-is false), Metafont normally ignores these two arguments.
-Metafont can be made to put this information in the gf file
-by loading the following definition after
-.B cmbase
-when creating
-.BR cm.base :
-.IP
-.nf
-.ft B
-def ignore_math_fit(expr left_adjustment,right_adjustment) =
- special "adjustment";
- numspecial left_adjustment*16/designsize;
- numspecial right_adjustment*16/designsize;
- enddef;
-.fi
-.ft R
-.LP
-For the EC font family, load the following definition after
-.B exbase
-(it is probably easiest to patch
-.B exbase.mf
-locally):
-.IP
-.nf
-.ft B
-def ignore_math_fit(expr left_adjustment,right_adjustment) =
- ori_special "adjustment";
- ori_numspecial left_adjustment*16/designsize;
- ori_numspecial right_adjustment*16/designsize;
- enddef;
-.fi
-.ft R
-.LP
-The gf file created using this modified
-.B cm.base
-or
-.B exbase
-should be specified with the
-.B \-g
-option.
-The
-.B \-g
-option should not be given for a font for which
-.B math_fitting
-is true.
-.SH OPTIONS
-.TP
-.B \-v
-Print the version number.
-.TP
-.B \-s
-The font is special.
-The effect of this option is to add the
-.B special
-command to the font file.
-.TP
-.BI \-k n
-The skewchar of this font is at position
-.IR n .
-.I n
-should be an integer;
-it may be given in decimal,
-or with a leading
-.B 0
-in octal,
-or with a leading
-.B 0x
-in hexadecimal.
-The effect of this option is to ignore any kerns whose second component
-is the specified character.
-.TP
-.BI \-g gf_file
-.I gf_file
-is a gf file produced by Metafont containing special and numspecial
-commands giving additional font metric information.
-.SH FILES
-.Tp \w'\fB@FONTDIR@/devdvi/DESC'u+2n
-.B @FONTDIR@/devdvi/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devdvi/ F
-Font description file for font
-.IR F .
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR grodvi (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/utils/xtotroff/Makefile.in b/contrib/groff/src/utils/xtotroff/Makefile.in
deleted file mode 100644
index 4b3a7e6cb339..000000000000
--- a/contrib/groff/src/utils/xtotroff/Makefile.in
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (C) 2004
-# Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with groff; see the file COPYING. If not, write to the Free Software
-# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-
-builddir=@abs_builddir@
-top_srcdir=@abs_top_srcdir@
-top_builddir=@abs_top_builddir@
-SHELL=@SHELL@
-
-devdir=$(top_builddir)/font
-driverdir=$(top_srcdir)/src/devices/xditview
-mkinstalldirs=$(SHELL) $(top_srcdir)/mkinstalldirs
-
-xtotroff=$(builddir)/xtotroff
-DPIS=75 100
-
-all:
- @echo "Say \`make fonts' to generate fonts for gxditview."
-
-fonts: $(xtotroff) $(driverdir)/DESC.in $(driverdir)/FontMap
- fonts=`sed -e 's/[ ].*//' $(driverdir)/FontMap`; \
- for dpi in $(DPIS); do \
- echo Making devX$$dpi; \
- test -d $(devdir)/devX$$dpi || \
- $(mkinstalldirs) $(devdir)/devX$$dpi; \
- rm -f $(devdir)/devX$$dpi/DESC; \
- sed -e "s/res 75/res $$dpi/" $(driverdir)/DESC.in \
- >$(devdir)/devX$$dpi/DESC; \
- (cd $(devdir)/devX$$dpi; \
- rm -f Makefile.sub; \
- echo DEV=X$$dpi >Makefile.sub; \
- echo DEVFILES=DESC $$fonts >>Makefile.sub; \
- $(xtotroff) -r $$dpi -s 10 $(driverdir)/FontMap); \
- echo Making devX$$dpi-12; \
- test -d $(devdir)/devX$$dpi-12 || \
- $(mkinstalldirs) $(devdir)/devX$$dpi-12; \
- rm -f $(devdir)/devX$$dpi-12/DESC; \
- sed -e "s/res 75/res $$dpi/" \
- -e 's/unitwidth 10/unitwidth 12/' $(driverdir)/DESC.in \
- >$(devdir)/devX$$dpi-12/DESC; \
- (cd $(devdir)/devX$$dpi-12; \
- rm -f Makefile.sub; \
- echo DEV=X$$dpi-12 >Makefile.sub; \
- echo DEVFILES=DESC $$fonts >>Makefile.sub; \
- $(xtotroff) -r $$dpi -s 12 $(driverdir)/FontMap); \
- done
diff --git a/contrib/groff/src/utils/xtotroff/Makefile.sub b/contrib/groff/src/utils/xtotroff/Makefile.sub
deleted file mode 100644
index fc0d76a55cef..000000000000
--- a/contrib/groff/src/utils/xtotroff/Makefile.sub
+++ /dev/null
@@ -1,8 +0,0 @@
-PROG=xtotroff$(EXEEXT)
-MAN1=xtotroff.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL) $(LIBGROFF)
-EXTRA_CFLAGS=$(X_CFLAGS)
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=xtotroff.$(OBJEXT)
-CSRCS=$(srcdir)/xtotroff.c
diff --git a/contrib/groff/src/utils/xtotroff/xtotroff.c b/contrib/groff/src/utils/xtotroff/xtotroff.c
deleted file mode 100644
index dafff04b717a..000000000000
--- a/contrib/groff/src/utils/xtotroff/xtotroff.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * xtotroff
- *
- * convert X font metrics into troff font metrics
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <X11/Xlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <limits.h>
-
-#define __GETOPT_PREFIX groff_
-#include <getopt.h>
-
-#include "XFontName.h"
-#include "DviChar.h"
-
-#define charWidth(fi,c) \
- ((fi)->per_char[(c) - (fi)->min_char_or_byte2].width)
-#define charHeight(fi,c) \
- ((fi)->per_char[(c) - (fi)->min_char_or_byte2].ascent)
-#define charDepth(fi,c) \
- ((fi)->per_char[(c) - (fi)->min_char_or_byte2].descent)
-#define charLBearing(fi,c) \
- ((fi)->per_char[(c) - (fi)->min_char_or_byte2].lbearing)
-#define charRBearing(fi,c) \
- ((fi)->per_char[(c) - (fi)->min_char_or_byte2].rbearing)
-
-extern const char *Version_string;
-static char *program_name;
-
-Display *dpy;
-unsigned resolution = 75;
-unsigned point_size = 10;
-
-int charExists(XFontStruct * fi, int c)
-{
- XCharStruct *p;
-
- /* `c' is always >= 0 */
- if ((unsigned int) c < fi->min_char_or_byte2
- || (unsigned int) c > fi->max_char_or_byte2)
- return 0;
- p = fi->per_char + (c - fi->min_char_or_byte2);
- return p->lbearing != 0 || p->rbearing != 0 || p->width != 0
- || p->ascent != 0 || p->descent != 0 || p->attributes != 0;
-}
-
-/* Canonicalize the font name by replacing scalable parts by *s. */
-
-static int CanonicalizeFontName(char *font_name, char *canon_font_name)
-{
- unsigned int attributes;
- XFontName parsed;
-
- if (!XParseFontName(font_name, &parsed, &attributes)) {
- fprintf(stderr, "not a standard name: %s\n", font_name);
- return 0;
- }
-
- attributes &= ~(FontNamePixelSize | FontNameAverageWidth
- | FontNamePointSize
- | FontNameResolutionX | FontNameResolutionY);
- XFormatFontName(&parsed, attributes, canon_font_name);
- return 1;
-}
-
-static int
-FontNamesAmbiguous(const char *font_name, char **names, int count)
-{
- char name1[2048], name2[2048];
- int i;
-
- if (count == 1)
- return 0;
-
- for (i = 0; i < count; i++) {
- if (!CanonicalizeFontName(names[i], i == 0 ? name1 : name2)) {
- fprintf(stderr, "bad font name: %s\n", names[i]);
- return 1;
- }
- if (i > 0 && strcmp(name1, name2) != 0) {
- fprintf(stderr, "ambiguous font name: %s\n", font_name);
- fprintf(stderr, " matches %s\n", names[0]);
- fprintf(stderr, " and %s\n", names[i]);
- return 1;
- }
- }
- return 0;
-}
-
-static int MapFont(char *font_name, const char *troff_name)
-{
- XFontStruct *fi;
- int count;
- char **names;
- FILE *out;
- unsigned int c;
- unsigned int attributes;
- XFontName parsed;
- int j, k;
- DviCharNameMap *char_map;
- char encoding[256];
- char *s;
- int wid;
- char name_string[2048];
-
- if (!XParseFontName(font_name, &parsed, &attributes)) {
- fprintf(stderr, "not a standard name: %s\n", font_name);
- return 0;
- }
-
- attributes &= ~(FontNamePixelSize | FontNameAverageWidth);
- attributes |= FontNameResolutionX;
- attributes |= FontNameResolutionY;
- attributes |= FontNamePointSize;
- parsed.ResolutionX = resolution;
- parsed.ResolutionY = resolution;
- parsed.PointSize = point_size * 10;
- XFormatFontName(&parsed, attributes, name_string);
-
- names = XListFonts(dpy, name_string, 100000, &count);
- if (count < 1) {
- fprintf(stderr, "bad font name: %s\n", font_name);
- return 0;
- }
-
- if (FontNamesAmbiguous(font_name, names, count))
- return 0;
-
- XParseFontName(names[0], &parsed, &attributes);
- sprintf(encoding, "%s-%s", parsed.CharSetRegistry,
- parsed.CharSetEncoding);
- for (s = encoding; *s; s++)
- if (isupper(*s))
- *s = tolower(*s);
- char_map = DviFindMap(encoding);
- if (!char_map) {
- fprintf(stderr, "not a standard encoding: %s\n", encoding);
- return 0;
- }
-
- fi = XLoadQueryFont(dpy, names[0]);
- if (!fi) {
- fprintf(stderr, "font does not exist: %s\n", names[0]);
- return 0;
- }
-
- printf("%s -> %s\n", names[0], troff_name);
-
- { /* Avoid race while opening file */
- int fd;
- (void) unlink(troff_name);
- fd = open(troff_name, O_WRONLY | O_CREAT | O_EXCL, 0600);
- out = fdopen(fd, "w");
- }
-
- if (!out) {
- perror(troff_name);
- return 0;
- }
- fprintf(out, "name %s\n", troff_name);
- if (!strcmp(char_map->encoding, "adobe-fontspecific"))
- fprintf(out, "special\n");
- if (charExists(fi, ' ')) {
- int w = charWidth(fi, ' ');
- if (w > 0)
- fprintf(out, "spacewidth %d\n", w);
- }
- fprintf(out, "charset\n");
- for (c = fi->min_char_or_byte2; c <= fi->max_char_or_byte2; c++) {
- const char *name = DviCharName(char_map, c, 0);
- if (charExists(fi, c)) {
- int param[5];
-
- wid = charWidth(fi, c);
-
- fprintf(out, "%s\t%d", name ? name : "---", wid);
- param[0] = charHeight(fi, c);
- param[1] = charDepth(fi, c);
- param[2] = 0; /* charRBearing (fi, c) - wid */
- param[3] = 0; /* charLBearing (fi, c) */
- param[4] = 0; /* XXX */
- for (j = 0; j < 5; j++)
- if (param[j] < 0)
- param[j] = 0;
- for (j = 4; j >= 0; j--)
- if (param[j] != 0)
- break;
- for (k = 0; k <= j; k++)
- fprintf(out, ",%d", param[k]);
- fprintf(out, "\t0\t0%o\n", c);
-
- if (name) {
- for (k = 1; DviCharName(char_map, c, k); k++) {
- fprintf(out, "%s\t\"\n", DviCharName(char_map, c, k));
- }
- }
- }
- }
- XUnloadFont(dpy, fi->fid);
- fclose(out);
- return 1;
-}
-
-static void usage(FILE *stream)
-{
- fprintf(stream,
- "usage: %s [-r resolution] [-s pointsize] FontMap\n",
- program_name);
-}
-
-int main(int argc, char **argv)
-{
- char troff_name[1024];
- char font_name[1024];
- char line[1024];
- char *a, *b, c;
- FILE *map;
- int opt;
- static const struct option long_options[] = {
- { "help", no_argument, 0, CHAR_MAX + 1 },
- { "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
- };
-
- program_name = argv[0];
-
- while ((opt = getopt_long(argc, argv, "gr:s:v", long_options,
- NULL)) != EOF) {
- switch (opt) {
- case 'g':
- /* unused; just for compatibility */
- break;
- case 'r':
- sscanf(optarg, "%u", &resolution);
- break;
- case 's':
- sscanf(optarg, "%u", &point_size);
- break;
- case 'v':
- printf("xtotroff (groff) version %s\n", Version_string);
- exit(0);
- break;
- case CHAR_MAX + 1: /* --help */
- usage(stdout);
- exit(0);
- break;
- case '?':
- usage(stderr);
- exit(1);
- break;
- }
- }
- if (argc - optind != 1) {
- usage(stderr);
- exit(1);
- }
-
- dpy = XOpenDisplay(0);
- if (!dpy) {
- fprintf(stderr, "Can't connect to the X server.\n");
- fprintf(stderr,
- "Make sure the DISPLAY environment variable is set correctly.\n");
- exit(1);
- }
-
- map = fopen(argv[optind], "r");
- if (map == NULL) {
- perror(argv[optind]);
- exit(1);
- }
-
- while (fgets(line, sizeof(line), map)) {
- for (a = line, b = troff_name; *a; a++, b++) {
- c = (*b = *a);
- if (c == ' ' || c == '\t')
- break;
- }
- *b = '\0';
- while (*a && (*a == ' ' || *a == '\t'))
- ++a;
- for (b = font_name; *a; a++, b++)
- if ((*b = *a) == '\n')
- break;
- *b = '\0';
- if (!MapFont(font_name, troff_name))
- exit(1);
- }
- exit(0);
-}
diff --git a/contrib/groff/src/utils/xtotroff/xtotroff.man b/contrib/groff/src/utils/xtotroff/xtotroff.man
deleted file mode 100644
index d21bb5c1c7f9..000000000000
--- a/contrib/groff/src/utils/xtotroff/xtotroff.man
+++ /dev/null
@@ -1,109 +0,0 @@
-.ig
-Copyright (C) 2004 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.TH XTOTROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.SH NAME
-xtotroff \- convert X font metrics into GNU troff font metrics
-.
-.
-.SH SYNOPSIS
-.B xtotroff
-[
-.BI \-r \%resolution
-]
-[
-.BI \-s \%point-size
-]
-[
-.B \-v
-]
-.I FontMap
-.
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.SH DESCRIPTION
-.B xtotroff
-takes a
-.IR FontMap ,
-which maps
-.B groff
-fonts to X11 fonts,
-creates GNU
-.B troff
-metric files for all fonts listed.
-Each line in
-.I FontMap
-consists of GNU
-.B troff
-font name and an X font name (XLFD) pattern, separated by whitespace.
-Example:
-.
-.PP
-.in +2n
-.nf
-TB -adobe-times-bold-r-normal--*-*-*-*-p-*-iso8859-1
-.fi
-.in
-.
-.PP
-The wildcards in the patterns are filled with the arguments to the
-.B \-r
-and
-.B \-s
-switches.
-If a font name is still ambiguous,
-.B xtotroff
-aborts.
-.
-.
-.SH OPTIONS
-.TP
-.BI \-r resolution
-Set the resolution for all font patterns in
-.IR FontMap .
-The value is used for both the horizontal and vertical resolution.
-If not specified, a resolution of 75dpi is assumed.
-.
-.TP
-.BI \-s point-size
-Set the point size for all font patterns in
-.IR FontMap .
-If not specified, a size of 10pt is assumed.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.SH BUGS
-The only supported font encodings are `iso8859-1' and `adobe-fontspecific'.
-.
-.
-.SH "SEE ALSO"
-.BR gxditview (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/stamp-h.in b/contrib/groff/stamp-h.in
deleted file mode 100644
index 9788f70238c9..000000000000
--- a/contrib/groff/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/contrib/groff/test-groff.in b/contrib/groff/test-groff.in
deleted file mode 100644
index 013e16663bfb..000000000000
--- a/contrib/groff/test-groff.in
+++ /dev/null
@@ -1,34 +0,0 @@
-#! /bin/sh
-# This script runs groff without requiring that it be installed.
-
-SEP='@PATH_SEPARATOR@'
-builddir=@abs_top_builddir@/src
-srcdir=@abs_top_srcdir@
-
-GROFF_BIN_PATH=\
-$builddir/roff/groff$SEP\
-$builddir/roff/troff$SEP\
-$builddir/preproc/pic$SEP\
-$builddir/preproc/eqn$SEP\
-$builddir/preproc/tbl$SEP\
-$builddir/preproc/grn$SEP\
-$builddir/preproc/refer$SEP\
-$builddir/preproc/soelim$SEP\
-$builddir/preproc/html$SEP\
-$builddir/devices/grops$SEP\
-$builddir/devices/grodvi$SEP\
-$builddir/devices/grotty$SEP\
-$builddir/devices/grolj4$SEP\
-$builddir/devices/grolbp$SEP\
-$builddir/devices/grohtml$SEP\
-$builddir/devices/xditview
-
-XENVIRONMENT=$srcdir/src/devices/xditview/GXditview.ad
-export XENVIRONMENT
-
-GROFF_COMMAND_PREFIX=
-GROFF_FONT_PATH=$builddir/../font$SEP$srcdir/font
-GROFF_TMAC_PATH=$srcdir/tmac
-export GROFF_BIN_PATH GROFF_COMMAND_PREFIX GROFF_FONT_PATH GROFF_TMAC_PATH
-
-exec $builddir/roff/groff/groff ${1+"$@"}
diff --git a/contrib/groff/tmac/Makefile.sub b/contrib/groff/tmac/Makefile.sub
deleted file mode 100644
index 21e41f55b20d..000000000000
--- a/contrib/groff/tmac/Makefile.sub
+++ /dev/null
@@ -1,137 +0,0 @@
-MAN7=\
- groff_ms.n \
- groff_man.n \
- groff_me.n \
- groff_mdoc.n \
- groff_trace.n \
- groff_www.n
-
-NORMALFILES=\
- mandoc.tmac andoc.tmac an-old.tmac \
- me.tmac \
- mdoc.tmac \
- pic.tmac \
- a4.tmac papersize.tmac \
- ec.tmac \
- safer.tmac \
- trace.tmac \
- ps.tmac psold.tmac pspic.tmac psatk.tmac \
- dvi.tmac \
- tty.tmac tty-char.tmac \
- latin1.tmac latin2.tmac latin9.tmac cp1047.tmac \
- unicode.tmac \
- X.tmac Xps.tmac \
- lj4.tmac \
- lbp.tmac \
- html.tmac html-end.tmac \
- devtag.tmac \
- europs.tmac \
- composite.tmac \
- eqnrc \
- troffrc troffrc-end \
- hyphen.us hyphenex.us
-SPECIALFILES=an.tmac man.tmac s.tmac ms.tmac
-STRIPFILES=e.tmac doc.tmac doc-old.tmac
-MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms
-mdocdir=$(tmacdir)/mdoc
-CLEANADD=\
- stamp-wrap stamp-sed *-wrap man.tmac-sed ms.tmac-sed www.tmac-sed \
- stamp-strip e.tmac-s doc.tmac-s doc-old.tmac-s \
- doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s
-tmac_s_prefix=
-tmac_an_prefix=
-tmac_wrap=
-sys_tmac_prefix=
-pnmtops_nosetpage="pnmtops"
-
-all: stamp-strip stamp-wrap stamp-sed
-
-install_data: $(NORMALFILES) $(SPECIALFILES) man.local \
- stamp-strip stamp-wrap stamp-sed
- -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
- -test -d $(systemtmacdir) || $(mkinstalldirs) $(systemtmacdir)
- -test -d $(localtmacdir) || $(mkinstalldirs) $(localtmacdir)
- if test -n "$(tmac_wrap)"; then \
- for m in ""$(tmac_wrap); do \
- $(INSTALL_DATA) $$m-wrap $(systemtmacdir)/$$m.tmac; \
- done; \
- fi
- for f in $(NORMALFILES); do \
- rm -f $(tmacdir)/$$f; \
- $(INSTALL_DATA) $(srcdir)/$$f $(tmacdir)/$$f; \
- done
- -rm -f $(tmacdir)/$(tmac_s_prefix)s.tmac
- $(INSTALL_DATA) $(srcdir)/s.tmac $(tmacdir)/$(tmac_s_prefix)s.tmac
- -rm -f $(tmacdir)/ms.tmac
- $(INSTALL_DATA) ms.tmac-sed $(tmacdir)/ms.tmac
- -rm -f $(tmacdir)/$(tmac_an_prefix)an.tmac
- $(INSTALL_DATA) $(srcdir)/an.tmac $(tmacdir)/$(tmac_an_prefix)an.tmac
- -rm -f $(tmacdir)/man.tmac
- $(INSTALL_DATA) man.tmac-sed $(tmacdir)/man.tmac
- -rm -f $(tmacdir)/www.tmac
- $(INSTALL_DATA) www.tmac-sed $(tmacdir)/www.tmac
- for f in $(STRIPFILES); do \
- rm -f $(tmacdir)/$$f; \
- $(INSTALL_DATA) $$f-s $(tmacdir)/$$f; \
- done
- -test -d $(mdocdir) || $(mkinstalldirs) $(mdocdir)
- for f in $(MDOCFILES); do \
- rm -f $(mdocdir)/$$f; \
- $(INSTALL_DATA) $$f-s $(mdocdir)/$$f; \
- done
- -test -f $(localtmacdir)/man.local || \
- $(INSTALL_DATA) $(srcdir)/man.local $(localtmacdir)/man.local
- -test -f $(localtmacdir)/mdoc.local || \
- $(INSTALL_DATA) mdoc.local-s $(localtmacdir)/mdoc.local
-
-stamp-strip: $(STRIPFILES) $(MDOCFILES) mdoc.local
- for f in $(STRIPFILES) $(MDOCFILES) mdoc.local; do \
- rm -f $$f-s; \
- sed -f $(srcdir)/strip.sed $(srcdir)/$$f >$$f-s; \
- done
- touch $@
-
-stamp-wrap:
- if test -n "$(tmac_wrap)"; then \
- for m in ""$(tmac_wrap); do \
- rm -f $$m-wrap; \
- if test "$$m" = an; then \
- echo .do mso andoc.tmac >>$$m-wrap; \
- fi; \
- echo .cp 1 >>$$m-wrap; \
- echo .so $(sys_tmac_prefix)$$m >>$$m-wrap; \
- done; \
- fi
- touch $@
-
-stamp-sed: man.tmac ms.tmac www.tmac
- for f in man.tmac ms.tmac www.tmac; do \
- rm -f $$f-sed; \
- sed -e "s;@TMAC_AN_PREFIX@;$(tmac_an_prefix);g" \
- -e "s;@TMAC_S_PREFIX@;$(tmac_s_prefix);g" \
- -e "s;@PNMTOPS_NOSETPAGE@;$(pnmtops_nosetpage);g" \
- $(srcdir)/$$f > $$f-sed; \
- done
- touch $@
-
-uninstall_sub:
- -if test -n "$(tmac_wrap)"; then \
- for m in ""$(tmac_wrap); do \
- rm -f $(systemtmacdir)/$$m.tmac; \
- done; \
- fi
- -for f in $(NORMALFILES) $(STRIPFILES); do \
- rm -f $(tmacdir)/$$f; \
- done
- -rm -f $(tmacdir)/$(tmac_s_prefix)s.tmac
- -rm -f $(tmacdir)/$(tmac_an_prefix)an.tmac
- -rm -f $(tmacdir)/man.tmac $(tmacdir)/ms.tmac
- -rm -f $(tmacdir)/www.tmac
- -if cmp -s $(localtmacdir)/man.local $(srcdir)/man.local; then \
- rm -f $(localtmacdir)/man.local; \
- fi
- -if cmp -s $(localtmacdir)/mdoc.local $(srcdir)/mdoc.local; then \
- rm -f $(localtmacdir)/mdoc.local; \
- fi
- -for f in $(MDOCFILES); do rm -f $(mdocdir)/$$f; done
- -rmdir $(mdocdir)
diff --git a/contrib/groff/tmac/README b/contrib/groff/tmac/README
deleted file mode 100644
index 19f938a85dec..000000000000
--- a/contrib/groff/tmac/README
+++ /dev/null
@@ -1,9 +0,0 @@
-The file `hyphen.us' is identical to the file `hyphen.tex', part of the TeX
-system written by Donald E. Knuth; the master file can be found at
-
- ftp://labrea.stanford.edu/pub/tex/dist/lib/hyphen.tex .
-
-It has been renamed for consistency, i.e., to make patterns available under
-the filenames `hyphen.<language>', e.g. `hyphen.de' or `hyphen.uk'.
-
-See the file itself for a copyright notice.
diff --git a/contrib/groff/tmac/TODO b/contrib/groff/tmac/TODO
deleted file mode 100644
index f9fd4905cf33..000000000000
--- a/contrib/groff/tmac/TODO
+++ /dev/null
@@ -1,36 +0,0 @@
-Support multiple line-spacing.
-
-If we have footnotes in the abstract in RP format, then the footnote
-will appear on the cover sheet, which it should, but also on the first
-page, which it should not.
-
-Should we allow multi-page cover-sheets?
-
-Warn about automatically numbered footnotes in floating keeps.
-
-When we bring back the footnote overflow at the top of page, it would
-be more efficient to avoid diverting it again. (Need to keep track of
-footnote height.)
-
-Possibly have a place above which the footnote trap must not be
-placed.
-
-Improved indexing, not using tm, controlled by string variable (eg
--dIDX=file.idx).
-
-When changing from multi-column to narrower columns, we could avoid
-doing a @super-eject. (This might not be a good idea.)
-
-Think about cutmarks. Possibly implement CM.
-
-Implement thesis Mode (TM, CT).
-
-Implement more V10 features.
-
-Should this
-
-.LP
-.rs
-.sp \n(.tu
-
-print two pages?
diff --git a/contrib/groff/tmac/X.tmac b/contrib/groff/tmac/X.tmac
deleted file mode 100644
index df64f223e3d5..000000000000
--- a/contrib/groff/tmac/X.tmac
+++ /dev/null
@@ -1,132 +0,0 @@
-.\" X.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.ftr CW CR
-.ftr C CR
-.ftr CO CI
-.ftr CX CBI
-.ftr H HR
-.ftr HO HI
-.ftr HX HBI
-.ftr NX NBI
-.char \[ru] \D'l .5m 0'
-.char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
-.char \[br] \v'.25m'\D'l 0 -1m'\v'.75m'
-.char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
-.char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.char ~ \v'-.55m'\s[\En(.s/2u]\v'.2m'\[ti]\v'-.2m'\s0\v'.55m'
-.char ^ \v'-.55m'\s[\En(.s/2u]\v'.3m'\[ha]\v'-.3m'\s0\v'.55m'
-.fchar \[va] \o'\[ua]\[da]'
-.fchar \[em] \v'-.25m'\h'.05m'\D'l .9m 0'\h'0.05m'\v'.25m'
-.fchar \[en] \-
-.fchar \[fi] fi
-.fchar \[fl] fl
-.fchar \[ff] ff
-.fchar \[Fi] f\[fi]
-.fchar \[Fl] f\[fl]
-.fchar \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.fchar \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.fchar \[ga] \Z'\v'-.7m'\D'l .22m .18m''\h'.33m'
-.fchar \[dg] \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''\h'.5m'
-.fchar \[dd] \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0'\v'.4m'\D'l -.39m 0''\h'.5m'
-.fchar \[lq] ``
-.fchar \[rq] ''
-.fchar \[Bq] ,,
-.fchar \[OE] O\h'-.25m'E
-.fchar \[oe] o\h'-.14m'e
-.fchar \[ah] \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.fchar \[ao] \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'
-.fchar \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.fchar \[lh] \[lA]
-.fchar \[rh] \[rA]
-.fchar \[bq] ,
-.fchar \[aq] '
-.fchar \[IJ] IJ
-.fchar \[ij] ij
-.fchar \[fo] <
-.fchar \[fc] >
-.fchar \[OK] \s[\En[.s]*6u/10u]\[rs]\s[0]/
-.
-.fchar \[<<] <\h'-.3m'<
-.fchar \[>>] >\h'-.3m'>
-.fchar \[|=] \v'.1m'\Z'\[mi]'\v'-.2m'\[ap]\v'.1m'
-.fchar \[nc] \v'.1m'\Z'\h'.2m'\F[T]\f[R]/'\v'-.1m'\[sp]
-.fchar \[ne] \v'.07m'\Z'\h'.2m'\F[T]\f[R]/'\v'-.07m'\[==]
-.fchar \[-h] \F[T]\f[I]\v'-.58m'\Z'\h'.1m'\D'l .3m 0''\v'.58m'h
-.fchar \[hbar] \[-h]
-.
-.de X-achar
-. \" Note that character definitions are always interpreted with
-. \" compatibility mode off.
-. fchar \\$1 \
-\\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\En[skw]+(\w'x'*0)-\\En[skw])'\
-\v'(u;\w'x'*0+\\En[rst]+(\w'\\$3'*0)-\\En[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\En[rst]+(\w'\\$3'*0)+\\En[rst])'\
-\h'|\\En[acc]u'
-. hcode \\$1\\$4
-..
-.
-.X-achar \['C] \' C c
-.X-achar \['c] \' c c
-.X-achar \[:Y] \[ad] Y y
-.
-.fchar \[S ,] \o'S\[ac]'
-.hcode \[S ,]s
-.fchar \[s ,] \o's\[ac]'
-.hcode \[s ,]s
-.
-.de X-frac
-. schar \[\\$1\\$2] \
-\v'-.28m'\s[\\En[.s]*6u/10u]\\$1\s0\v'.28m'\
-\h'-.1m'\[f/]\h'-.1m'\
-\s[\\En[.s]*6u/10u]\\$2
-..
-.
-.de X-frac-mono
-. fschar \\$1 \[\\$2\\$3] \
-\Z'\v'-.28m'\s[\\En[.s]*5u/10u]\\$2\s0\v'.28m''\
-\Z'\h'0.25m'\[f/]'\
-\Z'\h'.35m'\s[\\En[.s]*5u/10u]\\$3\s0'\
-\h'\w'M'u'
-..
-.
-.X-frac 1 8
-.X-frac 3 8
-.X-frac 5 8
-.X-frac 7 8
-.
-.X-frac-mono CR 1 8
-.X-frac-mono CR 3 8
-.X-frac-mono CR 5 8
-.X-frac-mono CR 7 8
-.X-frac-mono CI 1 8
-.X-frac-mono CI 3 8
-.X-frac-mono CI 5 8
-.X-frac-mono CI 7 8
-.X-frac-mono CB 1 8
-.X-frac-mono CB 3 8
-.X-frac-mono CB 5 8
-.X-frac-mono CB 7 8
-.X-frac-mono CBI 1 8
-.X-frac-mono CBI 3 8
-.X-frac-mono CBI 5 8
-.X-frac-mono CBI 7 8
-.
-.if '\*[.T]'X100' \
-. char \[radicalex] \h'-\w'\[sr]'u'\[radicalex]\h'\w'\[sr]'u'
-.fchar \[sqrtex] \[radicalex]
-.
-.cp \n[_C]
-.
-.do ie '\[char97]'a' \
-. do mso latin1.tmac
-.el \
-. do mso cp1047.tmac
-.
-.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/Xps.tmac b/contrib/groff/tmac/Xps.tmac
deleted file mode 100644
index d61ff2c7c1c4..000000000000
--- a/contrib/groff/tmac/Xps.tmac
+++ /dev/null
@@ -1,59 +0,0 @@
-.\" Xps.tmac
-.\"
-.do mso ps.tmac
-.nr _C \n(.C
-.cp 0
-.
-.\" Use this macro only to replace characters which do really exist in
-.\" the devps font definition files.
-.de Xps-char
-. char \\$1 \Z"\X'ps: invis'\\$2\X'ps: endinvis'"\\$1
-..
-.
-.Xps-char \[bu] \f[S]\[bu]
-.Xps-char \[f/] \f[S]\[f/]
-.Xps-char \[em] "\v'-.25m'\h'.05m'\D'l .9m 0'\h'.05m'"
-.Xps-char \[aq] '
-.Xps-char \[bq] ,
-.Xps-char \[Bq] ,,
-.Xps-char \[lq] ``
-.Xps-char \[rq] ''
-.Xps-char \[OE] OE
-.Xps-char \[oe] oe
-.Xps-char \[Fn] \f[S]\[Fn]
-.Xps-char \[vS] \o'\[ah]S'
-.Xps-char \[vs] \o'\[ah]s'
-.Xps-char \[vZ] \o'\[ah]Z'
-.Xps-char \[vz] \o'\[ah]z'
-.Xps-char \[/L] \o'/L'
-.Xps-char \[/l] \o'/l'
-.Xps-char \[:Y] \o'\[ad]Y'
-.Xps-char \[a"] \[sd]
-.Xps-char \[a.] \v'-.6m'.
-.Xps-char \[ga] "\Z'\v'-.7m'\D'l .22m .18m''"
-.Xps-char \[ab] \v'-.55m'\s[\En[.s]*6u/10u]u\s[0]
-.Xps-char \[ah] \v'-.55m'\s[\En[.s]/2u]v\s[0]
-.Xps-char \[ao] "\v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s[0]"
-.Xps-char \[ho] \s[\En[.s]/2u]\v'.4m'c\s[0]
-.Xps-char \[.i] i
-.Xps-char \[fo] <
-.Xps-char \[fc] >
-.Xps-char \[OK] \s[\En[.s]*6u/10u]\[rs]\s[0]/
-.Xps-char \[tm] \v'-.3m'\s[\En[.s]*6u/10u]TM\s[0]
-.Xps-char \[dd] "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0'\v'.4m'\D'l -.39m 0''"
-.Xps-char \[dg] "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''"
-.Xps-char \[en] \-
-.Xps-char \[%0] %\s[\En[.s]*6u/10u]\f[I]0
-.Xps-char \[lh] \[lA]
-.Xps-char \[rh] \[rA]
-.
-.cp \n[_C]
-.
-.do ie '\[char97]'a' \
-. do mso latin1.tmac
-.el \
-. do mso cp1047.tmac
-.
-.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/a4.tmac b/contrib/groff/tmac/a4.tmac
deleted file mode 100644
index 80c944d0768c..000000000000
--- a/contrib/groff/tmac/a4.tmac
+++ /dev/null
@@ -1,20 +0,0 @@
-.\" a4.tmac
-.\"
-.\" Set up groff for A4 paper. Must be called before any other macro
-.\" package.
-.\"
-.\" Some output drivers need an additional command line switch `-p' to
-.\" override the default paper length set in the driver specific DESC
-.\" file.
-.\"
-.\" For example, use the following for PS output:
-.\"
-.\" groff -Tps -P-pa4 -ma4 -ms foo.ms > foo.ps
-.
-.pl 29.7c
-.ll 21c-2i
-.
-.\" for ms, mdoc, man
-.do if !r LL .nr LL \n[.l]u
-.
-.\" EOF
diff --git a/contrib/groff/tmac/an-old.tmac b/contrib/groff/tmac/an-old.tmac
deleted file mode 100644
index 2bf34b304a38..000000000000
--- a/contrib/groff/tmac/an-old.tmac
+++ /dev/null
@@ -1,650 +0,0 @@
-.\" an-old.tmac
-.\"
-.\" Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005
-.\" Free Software Foundation, Inc.
-.\" Written by James Clark (jjc@jclark.com)
-.\"
-.\" This file is part of groff.
-.\"
-.\" groff is free software; you can redistribute it and/or modify it under
-.\" the terms of the GNU General Public License as published by the Free
-.\" Software Foundation; either version 2, or (at your option) any later
-.\" version.
-.\"
-.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY
-.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-.\" for more details.
-.\"
-.\" You should have received a copy of the GNU General Public License along
-.\" with groff; see the file COPYING. If not, write to the Free Software
-.\" Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-.\"
-.\" -rcR=1 => Create a single, very long page instead of multiple pages.
-.\" Useful for online display. Default in nroff mode.
-.\" Desactivate with -rcR=0.
-.\" -rC1 => Number pages continuously, rather than start each at 1.
-.\" -rD1 => Double-sided printing, ie different odd and even page footers.
-.\" -rPnnn => Number first page nnn.
-.\" -rSxx => Use size `xx'pt (either 10, 11, or 12) for document rather
-.\" than the default size of 10pt.
-.\" -rXnnn => Number pages after nnn as nnna, nnnb, nnnc, ...
-.\"
-.\" The file man.local is loaded at the end. Put local additions there.
-.\" If you need to add things to TH, use `.am1 TH'.
-.\"
-.
-.if !\n(.g .ab These man macros work only with groff.
-.
-.do if d RI .nx
-.
-.do mso devtag.tmac
-.
-.nr _C \n(.C
-.cp 0
-.
-.if (\n[.x]\n[.y] < 118) \
-. ab You need GNU troff version 1.18 or higher to run this version of man!
-.
-.if !r D .nr D 0
-.if !r C .nr C 0
-.if !r S .nr S 10
-.\" we must use consecutive page numbers when using postscript to generate
-.\" html images, and we must not reset the page number at the beginning
-.\" (the `ps4html' register is automatically added to the command line by
-.\" the pre-html preprocessor)
-.if !r ps4html \
-. if r P .pn 0\n[P]
-.if !r cR \{\
-. ie n .nr cR 1
-. el .nr cR 0
-.\}
-.
-.nr need_eo_h 0
-.
-.\" set up the line length...
-.\" giving precedence to any prior assignment to the \n[LL] register.
-.if !r LL \{\
-.
-. \" but if that isn't predefined...
-. \" then try to respect any prior `.ll' request.
-. nr LL \n[.l]
-.
-. \" For troff, this is sufficient to give us a default line length of
-. \" 6.5i, but for nroff, we prefer a default of 78n to nroff's default
-. \" 65n. This has the unfortunate side effect that we will override a
-. \" user's `.ll 65n' request, with our preferred 78n default; we can't
-. \" possibly know that the 65n came from a `.ll' request, and MUST
-. \" assume that it was set by nroff, as its built-in default! If the
-. \" user wants to force this setting, then he MUST use the `-rLL=65n'
-. \" option, or an equivalent `.nr LL 65n' request.
-. if n \
-. if (\n[LL] = 65n) \
-. nr LL 78n
-.\}
-.
-.if !r LT \
-. nr LT \n[LL]
-.
-.nr FT -.5i
-.
-.\" Default heading font
-.ds HF B
-.
-.nr an-first 1
-.
-.nr an-html 0
-.if '\*[.T]'html' .nr an-html 1
-.if \n[an-html] .nr C 1
-.if r ps4html .nr C 1
-.
-.\" we redefine .ne to avoid page breaks if cR is set; instead, the page
-.\" length is increased to the necessary amount (this is needed for tables)
-.\"
-.\" similarly, we redefine .bp if cR is set, adjusting the page length to
-.\" the current position so that no empty lines are inserted
-.if \n[cR] \{\
-. de1 ne
-. ie \\n[.$] \
-. nr an-ne (v;\\$*)
-. el \
-. nr an-ne 1v
-. if (\\n[an-ne] >= \\n[.t]) \
-. pl +(\\n[an-ne]u - \\n[.t]u + 1v)
-. .
-.
-. rn bp an-bp
-. de1 bp
-. br
-. pl \\n[nl]u
-. an-bp \\$*
-. .
-.\}
-.
-.de set-an-margin
-. nr an-margin \\n[IN]
-..
-.
-.\" .TH title section extra1 extra2 extra3
-.de1 TH
-. if \\n[an-html] \{\
-. DEVTAG-TL
-\\$1
-. DEVTAG-EO-TL
-. \}
-.
-. de an-init \" We have to do it like this to get multiple man pages right.
-. ds an-title "\\$1
-. ds an-section "\\$2
-. ds an-extra1 "\\$3
-. ie (\\n[.$] > 3) .ds an-extra2 "\\$4
-. el .ds an-extra2 \"Sun Release 4.0
-. ie (\\n[.$] > 4) .ds an-extra3 "\\$5
-. el .ds an-extra3 \"System Programmer's Manual
-. ds an-init
-\\..
-.
-. DT
-.
-. nr PS 10z \" default point size
-. nr PS-SS 10z
-. nr PS-SH 10.95z
-. nr VS 12p
-.
-. \" use sizes similar to LaTeX
-. if t \{\
-. ie (\\n[S] == 11) \{\
-. nr PS 10.95z
-. nr PS-SS 10.95z
-. nr PS-SH 12z
-. nr VS 13.6p
-. \}
-. el \{\
-. if (\\n[S] == 12) \{\
-. nr PS 12z
-. nr PS-SS 12z
-. nr PS-SH 14.4z
-. nr VS 14.5p
-. \}
-. \}
-. \}
-.
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ll \\n[LL]u
-.
-.\" We must select an integer indentation value for nroff;
-.\" see comment in an-do-tag.
-. if !r IN \{\
-. ie t .nr IN 7.2n
-. el .nr IN 7n
-. \}
-. PD
-. if !r SN \
-. nr SN 3n \" the indentation of sub-sub-headings relative to sub-headings
-. nr an-level 1
-. set-an-margin
-. nr an-prevailing-indent \\n[IN]
-. nr an-tag-sep 1n
-.
-. nr an-no-space-flag 0
-. nr an-break-flag 0
-. nr an-div? 0
-.
-. ie \\n[cR] \
-. an-header
-. el \{\
-. wh 0 an-header
-. wh -1i an-footer
-. wh \\n[FT]u an-p-footer
-.
-. if (\\n[nl] > 0) \{\
-. ie \\n[C] .bp (\\n[%] + 1)
-. el .bp 1
-. \}
-. \}
-..
-.
-.\" BSD compatibility macros: .AT and .UC
-.
-.de1 AT
-. ds an-extra2 "7th Edition
-. if "\\$1"3" .ds an-extra2 "7th Edition
-. if "\\$1"4" .ds an-extra2 "System III
-. if "\\$1"5" \{\
-. ie "\\$2"" .ds an-extra2 "System V
-. el .ds an-extra2 "System V Release \\$2
-. \}
-..
-.
-.de1 UC
-. ds an-extra2 "3rd Berkeley Distribution
-. if "\\$1"3" .ds an-extra2 "3rd Berkeley Distribution
-. if "\\$1"4" .ds an-extra2 "4th Berkeley Distribution
-. if "\\$1"5" .ds an-extra2 "4.2 Berkeley Distribution
-. if "\\$1"6" .ds an-extra2 "4.3 Berkeley Distribution
-. if "\\$1"7" .ds an-extra2 "4.4 Berkeley Distribution
-..
-.
-.de1 DT
-. ta T .5i \" This sets tabs every .5 inches
-..
-.
-.de1 PD
-. ie \\n[.$] .nr PD (v;\\$1)
-. el .nr PD (.4v >? \n[.V])
-..
-.
-.\" Redefine these to customize the header & footer
-.
-.de1 PT
-. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])'
-..
-.
-.de1 BT
-. if r ps4html \
-. return
-. ie \\n[D] \{\
-. if o .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]'
-. if e .tl '\\*[an-page-string]'\\*[an-extra1]'\\*[an-extra2]'
-. \}
-. el \
-. tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]'
-..
-.
-.de1 an-header
-. an-init
-. if \\n[cR] \{\
-. ie \\n[an-first] \
-. nr an-first 0
-. el \
-. sp .5i
-. \}
-. ev 1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. lt \\n[LT]u
-. ie \\n[an-html] \
-. tl ''''
-. el \{\
-. if !\\n[cR] \
-. sp .5i
-. PT
-. ie !\\n[cR] \
-. sp |1i
-. el \
-. sp .5i
-. \}
-. ev
-. ns
-..
-.
-.de1 an-footer
-' bp
-..
-.
-.af an-page-letter a
-.
-.de1 an-p-footer
-. ev 1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. lt \\n[LT]u
-. ie \\n[an-html] \{\
-. ds an-page-string
-. ds an-extra1
-. ds an-extra2
-. \}
-. el \{\
-. ie r X \{\
-. if (\\n[%] > \\n[X]) \{\
-. nr an-page-letter (\\n[%] - \\n[X])
-. ds an-page-string \\n[X]\\n[an-page-letter]
-. \}
-. \}
-. el \{\
-. ie \\n[cR] \
-. ds an-page-string "\\*[an-title](\\*[an-section])
-. el \
-. ds an-page-string \\n[%]
-. \}
-. \}
-. BT
-. ev
-..
-.
-.de1 an-end
-. nr % 1
-. pl +4v
-. fl
-. sp 3
-. an-p-footer
-. pl \\n[nl]u
-..
-.
-.if \n[cR] .em an-end
-.
-.de1 SH
-. sp \\n[PD]u
-. nr an-level 1
-. set-an-margin
-. nr an-prevailing-indent \\n[IN]
-. fi
-. in \\n[an-margin]u
-. ti 0
-. nr need_eo_h 1
-. DEVTAG-NH \\n[an-level]
-. it 1 an-trap
-. nr an-no-space-flag 1
-. nr an-break-flag 1
-. ps \\n[PS-SH]u
-. ft \\*[HF]
-. ne (2v + 1u)
-. if \\n[.$] \&\\$*
-..
-.
-.de1 SS
-. sp \\n[PD]u
-. nr an-level 1
-. set-an-margin
-. nr an-prevailing-indent \\n[IN]
-. fi
-. in \\n[IN]u
-. ti \\n[SN]u
-. it 1 an-trap
-. nr an-no-space-flag 1
-. nr an-break-flag 1
-. ps \\n[PS-SS]u
-. ft \\*[HF]
-. ne (2v + 1u)
-. if \\n[.$] \&\\$*
-..
-.
-.de1 B
-. it 1 an-trap
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de1 I
-. it 1 an-trap
-. ft I
-. if \\n[.$] \,\\$*\/
-..
-.
-.de1 SM
-. it 1 an-trap
-. ps -1
-. if \\n[.$] \&\\$*
-..
-.
-.de1 SB
-. it 1 an-trap
-. ps -1
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de1 TP
-. sp \\n[PD]u
-. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-. it 1 an-trap
-. in 0
-. ll -\\n[an-margin]u
-. if !\\n[an-div?] .di an-div
-. nr an-div? 1
-..
-.
-.de1 an-trap
-. if \\n[need_eo_h]>0 .DEVTAG-EO-H
-. nr need_eo_h 0
-. ft R
-. ps \\n[PS]u
-. vs \\n[VS]u
-. if \\n[an-break-flag] \{\
-. br
-. nr an-break-flag 0
-. \}
-. if \\n[an-no-space-flag] \{\
-. ns
-. nr an-no-space-flag 0
-. \}
-. if \\n[an-div?] .an-do-tag
-..
-.
-.de an-do-tag
-. br
-. di
-. nr an-div? 0
-. ll
-. ie (\\n[dl] + \\n[an-tag-sep] > \\n[an-prevailing-indent]) \{\
-. in \\n[an-margin]u
-. ne (2v + 1u)
-. an-div
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. \}
-. el \{\
-. \" In nroff mode, if the indentation value is not an integer multiple
-. \" of the character cell, it is possible that the following combination
-. \" of .in and .ti yields a different result as the .in request in
-. \" the .ie part above.
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. ti -\\n[an-prevailing-indent]u
-. chop an-div
-. ne (1v + 1u)
-. DEVTAG-COL 1
-\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\c
-. DEVTAG-COL-NEXT 2
-. \}
-..
-.
-.de1 LP
-. sp \\n[PD]u
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. in \\n[an-margin]u
-. nr an-prevailing-indent \\n[IN]
-..
-.
-.als PP LP
-.als P LP
-.
-.de1 IP
-. ie !\\n[.$] \{\
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. sp \\n[PD]u
-. ne (1v + 1u)
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. \}
-. el \{\
-. ie (\\n[.$] - 1) .TP "\\$2"
-. el .TP
-\&\\$1
-. \}
-..
-.
-.de1 HP
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ft R
-. sp \\n[PD]u
-. ne (1v + 1u)
-. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. ti \\n[an-margin]u
-..
-.
-.ds an-empty \" this is referenced to avoid looping on eg .RB ( \\ )
-.
-.de1 RI
-. if \\n[.$] \{\
-. ds an-result \&\f[R]\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\f[I]\\$1\f[R]\/\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\f[I]\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 IR
-. if \\n[.$] \{\
-. ds an-result \&\f[I]\\$1\f[R]
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\\$1\f[I]\,\\$2\f[R]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 IB
-. if \\n[.$] \{\
-. ds an-result \&\f[I]\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\f[B]\\$1\f[I]\,\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\f[B]\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 BI
-. if \\n[.$] \{\
-. ds an-result \&\f[B]\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\f[I]\\$1\f[B]\/\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\f[I]\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de1 RB
-. ds an-result \&
-. while (\\n[.$] >= 2) \{\
-. as an-result \f[R]\\$1\f[B]\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \f[R]\\$1
-\\*[an-result]
-. ft R
-..
-.
-.de1 BR
-. ds an-result \&
-. while (\\n[.$] >= 2) \{\
-. as an-result \f[B]\\$1\f[R]\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \f[B]\\$1
-\\*[an-result]
-. ft R
-..
-.
-.de1 RS
-. nr an-saved-margin\\n[an-level] \\n[an-margin]
-. nr an-saved-prevailing-indent\\n[an-level] \\n[an-prevailing-indent]
-. ie \\n[.$] .nr an-margin +(n;\\$1)
-. el .nr an-margin +\\n[an-prevailing-indent]
-. in \\n[an-margin]u
-. nr an-prevailing-indent \\n[IN]
-. nr an-level +1
-..
-.
-.de1 RE
-. ie \\n[.$] .nr an-level ((;\\$1) <? \\n[an-level])
-. el .nr an-level -1
-. nr an-level (1 >? \\n[an-level])
-. nr an-margin \\n[an-saved-margin\\n[an-level]]
-. nr an-prevailing-indent \\n[an-saved-prevailing-indent\\n[an-level]]
-. in \\n[an-margin]u
-..
-.
-.\" table support
-.
-.de1 TS
-. sp \\n[PD]u
-. HTML-IMAGE
-..
-.
-.de1 T&
-..
-.
-.de1 TE
-. HTML-IMAGE-END
-..
-.
-.\" dummy equation delimiters
-.de1 EQ
-. HTML-IMAGE
-..
-.de1 EN
-. HTML-IMAGE-END
-..
-.
-.de1 R
-\c
-. ie \\n[.$] \{\
-. tm `R' is a string (producing the registered sign), not a macro.
-. nop \\$*
-. \}
-. el \{\
-. ie c\[rg] \
-. nop \[rg]\c
-. el \
-. nop (Reg.)\c
-. \}
-..
-.
-.\" these strings must work in compatibility mode also
-.
-.ds S \s'\\n(PSu'
-.ie c\[tm] .ds Tm \(tm
-.el .ds Tm (TM)
-.ds lq \(lq
-.ds rq \(rq
-.
-.if !\n[an-html] \{\
-. if !rHY \{\
-. ie \n[cR] \
-. nr HY 12
-. el \
-. nr HY 14
-. \}
-. hy \n[HY]
-.\}
-.
-.\" For UTF-8, map some characters conservatively for the sake
-.\" of easy cut and paste.
-.
-.if '\*[.T]'utf8' \{\
-. rchar \- - ' `
-.
-. char \- \N'45'
-. char - \N'45'
-. char ' \N'39'
-. char ` \N'96'
-.\}
-.
-.\" Load local modifications.
-.mso man.local
-.
-.cp \n[_C]
-.
-.\" end of an-old.tmac
diff --git a/contrib/groff/tmac/an.tmac b/contrib/groff/tmac/an.tmac
deleted file mode 100644
index 2e3c243f513c..000000000000
--- a/contrib/groff/tmac/an.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" an.tmac
-.\"
-.do mso andoc.tmac
diff --git a/contrib/groff/tmac/andoc.tmac b/contrib/groff/tmac/andoc.tmac
deleted file mode 100644
index bfb869ab078a..000000000000
--- a/contrib/groff/tmac/andoc.tmac
+++ /dev/null
@@ -1,19 +0,0 @@
-.\" andoc.tmac
-.\"
-.\" Load either an-old.tmac or doc.tmac.
-.if !\n(.g .ab These macros require groff.
-.de Dd
-.rm Dd
-.do mso doc.tmac
-\\*(Dd\\
-..
-.de TH
-.rm TH
-.do mso an-old.tmac
-\\*(TH\\
-..
-.\" dummy equation macros -- eqnrc is read before .TH or .Dd is parsed.
-.de EQ
-..
-.de EN
-..
diff --git a/contrib/groff/tmac/composite.tmac b/contrib/groff/tmac/composite.tmac
deleted file mode 100644
index 95e0f07afc96..000000000000
--- a/contrib/groff/tmac/composite.tmac
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" composite.tmac
-.
-.do composite ga u0300
-.do composite ` u0300
-.do composite aa u0301
-.do composite ' u0301
-.do composite a^ u0302
-.do composite ^ u0302
-.do composite a~ u0303
-.do composite ~ u0303
-.do composite a- u0304
-.do composite - u0304
-.do composite ab u0306
-.do composite a. u0307
-.do composite . u0307
-.do composite ad u0308
-.do composite ao u030A
-.do composite a" u030B
-.do composite " u030B
-.do composite ah u030C
-.do composite ac u0327
-.do composite , u0327
-.do composite ho u0328
-.
-.\" EOF
diff --git a/contrib/groff/tmac/cp1047.tmac b/contrib/groff/tmac/cp1047.tmac
deleted file mode 100644
index 84135f02b9d8..000000000000
--- a/contrib/groff/tmac/cp1047.tmac
+++ /dev/null
@@ -1,101 +0,0 @@
-.\" cp1047.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.trin \[char66]\[^a]
-.trin \[char67]\[:a]
-.trin \[char68]\[`a]
-.trin \[char69]\['a]
-.trin \[char70]\[~a]
-.trin \[char71]\[oa]
-.trin \[char72]\[,c]
-.trin \[char73]\[~n]
-.trin \[char74]\[ct]
-.trin \[char81]\['e]
-.trin \[char82]\[^e]
-.trin \[char83]\[:e]
-.trin \[char84]\[`e]
-.trin \[char85]\['i]
-.trin \[char86]\[^i]
-.trin \[char87]\[:i]
-.trin \[char88]\[`i]
-.trin \[char89]\[ss]
-.trin \[char98]\[^A]
-.trin \[char99]\[:A]
-.trin \[char100]\[`A]
-.trin \[char101]\['A]
-.trin \[char102]\[~A]
-.trin \[char103]\[oA]
-.trin \[char104]\[,C]
-.trin \[char105]\[~N]
-.trin \[char106]\[bb]
-.trin \[char112]\[/o]
-.trin \[char113]\['E]
-.trin \[char114]\[^E]
-.trin \[char115]\[:E]
-.trin \[char116]\[`E]
-.trin \[char117]\['I]
-.trin \[char118]\[^I]
-.trin \[char119]\[:I]
-.trin \[char120]\[`I]
-.trin \[char128]\[/O]
-.trin \[char138]\[Fo]
-.trin \[char139]\[Fc]
-.trin \[char140]\[Sd]
-.trin \[char141]\['y]
-.trin \[char142]\[Tp]
-.trin \[char143]\[t+-]
-.trin \[char144]\[de]
-.trin \[char154]\[Of]
-.trin \[char155]\[Om]
-.trin \[char156]\[ae]
-.trin \[char157]\[ac]
-.trin \[char158]\[AE]
-.trin \[char159]\[Cs]
-.trin \[char160]\[mc]
-.trin \[char170]\[r!]
-.trin \[char171]\[r?]
-.trin \[char172]\[-D]
-.trin \[char174]\[TP]
-.trin \[char175]\[rg]
-.trin \[char176]\[tno]
-.trin \[char177]\[Po]
-.trin \[char178]\[Ye]
-.trin \[char179]\[pc]
-.trin \[char180]\[co]
-.trin \[char181]\[sc]
-.trin \[char182]\[ps]
-.trin \[char183]\[14]
-.trin \[char184]\[12]
-.trin \[char185]\[34]
-.trin \[char186]\['Y]
-.trin \[char187]\[ad]
-.trin \[char188]\[a-]
-.trin \[char190]\[aa]
-.trin \[char191]\[tmu]
-.\" The soft-hyphen character is only an input character
-.tr \[char202]\%
-.trin \[char203]\[^o]
-.trin \[char204]\[:o]
-.trin \[char205]\[`o]
-.trin \[char206]\['o]
-.trin \[char207]\[~o]
-.trin \[char218]\[S1]
-.trin \[char219]\[^u]
-.trin \[char220]\[:u]
-.trin \[char221]\[`u]
-.trin \[char222]\['u]
-.trin \[char223]\[:y]
-.trin \[char225]\[tdi]
-.trin \[char234]\[S2]
-.trin \[char235]\[^O]
-.trin \[char236]\[:O]
-.trin \[char237]\[`O]
-.trin \[char238]\['O]
-.trin \[char239]\[~O]
-.trin \[char250]\[S3]
-.trin \[char251]\[^U]
-.trin \[char252]\[:U]
-.trin \[char253]\[`U]
-.trin \[char254]\['U]
-.cp \n(_C
diff --git a/contrib/groff/tmac/devtag.tmac b/contrib/groff/tmac/devtag.tmac
deleted file mode 100644
index 9a26d44a37cc..000000000000
--- a/contrib/groff/tmac/devtag.tmac
+++ /dev/null
@@ -1,131 +0,0 @@
-.ig
-devtag.tmac - macro package for adding tags to roff documents.
-
-File position: <groff_source_top>/tmac/devtag.tmac
-Installed position: groff's main macro directory.
-
-------------------------------------------------------------------------
- Legalize
-------------------------------------------------------------------------
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2004 Free Software Foundation, Inc.
-written by Gaius Mulley <gaius@glam.ac.uk>.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with groff; see the file COPYING. If not, write to the Free
-Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA
-02110-1301, USA.
-
-
-------------------------------------------------------------------------
- Description
-------------------------------------------------------------------------
-
-A simple set of macros to provide markup devices (currently only grohtml)
-with tags that define the meaning of the formatted text and also
-basic formatting instructions. It generalizes the tag concept used within
-grohtml and in the future it is hoped that more markup based devices
-can capitalize on this work. It also clearly defines those tags which are
-honoured by grohtml. Note that not all tags are included here. Some
-of the grohtml specific tags (header specific and jobname, etc.) are
-called directly from within www.tmac. The tags defined here are
-reasonably generic and could be applied to other devices.
-..
-.
-.do if d DEVTAG-NH .nx
-.
-.nr _C \n(.C
-.cp 0
-.
-.\" --------------------------------------------------------------------
-.\" DEVTAG <name>
-.\"
-.\" Emit a tag <name>
-.\"
-.de DEVTAG
-. tag devtag:\\$*
-..
-.\" --------------------------------------------------------------------
-.\" DEVTAG-NEXT <name>
-.\"
-.\" When the troff state changes, emit tag <name>
-.\"
-.de DEVTAG-NEXT
-. taga devtag:\\$*
-..
-.
-.\" --------------------------------------------------------------------
-.\" SH <level>
-.\" NH <level>
-.\" tell device we are starting a numbered heading
-.\" Takes a single parameter <level>. <level> 1
-.\" is the outer most level.
-.
-.de DEVTAG-NH
-. DEVTAG ".NH \\$1"
-..
-.als DEVTAG-SH DEVTAG-NH
-.
-.\" --------------------------------------------------------------------
-.\" COL <n>
-.\" indicate that the following text is aligned for the column <n>
-.\" n: [1..MAX(n)]
-.
-.de DEVTAG-COL
-. DEVTAG ".col \\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.\" EO-H
-.\" indicate that a header has finished.
-.
-.de DEVTAG-EO-H
-. DEVTAG ".eo.h"
-..
-.\" --------------------------------------------------------------------
-.\" EO-TL
-.\" indicate that a title has finished.
-.
-.de DEVTAG-EO-TL
-. DEVTAG ".eo.tl"
-..
-.\" --------------------------------------------------------------------
-.\" TL
-.\" indicate that the following text forms a title.
-.
-.de DEVTAG-TL
-. DEVTAG ".tl"
-..
-.
-.\" --------------------------------------------------------------------
-.\" COL-NEXT <n>
-.\" emit a column tag just before the next glyph.
-.
-.de DEVTAG-COL-NEXT
-. DEVTAG-NEXT ".col \\$1"
-..
-.
-.
-.cp \n[_C]
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
-.\" EOF
diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common
deleted file mode 100644
index 2d91c7ca3824..000000000000
--- a/contrib/groff/tmac/doc-common
+++ /dev/null
@@ -1,1337 +0,0 @@
-.\" Copyright (c) 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc-common 8.1 (Berkeley) 06/08/93
-.\"
-.\" %beginstrip%
-.
-.
-.\" Macro Identifiers. For each user macro a corresponding register with
-.\" the same name must exist. Its value must not be zero.
-.
-.nr %A 1
-.nr %B 1
-.nr %C 1
-.nr %D 1
-.nr %I 1
-.nr %J 1
-.nr %N 1
-.nr %O 1
-.nr %P 1
-.nr %Q 1
-.nr %R 1
-.nr %T 1
-.nr %U 1
-.nr %V 1
-.nr Ac 3
-.nr Ad 12n
-.nr An 12n
-.nr Ao 12n
-.nr Ap 2
-.nr Aq 12n
-.nr Ar 12n
-.nr At 1
-.nr Bc 3
-.nr Bf 8n\" ?
-.nr Bk 8n\" ?
-.nr Bl 1
-.nr Bo 12n
-.nr Bq 12n
-.nr Brc 3
-.nr Bro 12n
-.nr Brq 12n
-.nr Bsx 1
-.nr Bt 8n\" ?
-.nr Bx 1
-.nr Cd 12n
-.nr Cm 10n
-.nr D1 8n\" ?
-.nr Dc 3
-.nr Dl 8n\" ?
-.nr Dt 8n\" ?
-.nr Do 12n
-.nr Dq 12n
-.nr Ds 6n\" many manpages still use this as a -width value
-.nr Dv 12n
-.nr Dx 1
-.nr Ec 3
-.nr Ef 8n\" ?
-.nr Ek 8n\" ?
-.nr El 1
-.nr Em 10n
-.nr En 12n
-.nr Eo 12n
-.nr Eq 12n
-.nr Er 17n
-.nr Es 12n
-.nr Ev 15n
-.nr Ex 1
-.nr Fa 12n
-.nr Fc 3
-.nr Fd 12n\" ?
-.nr Fl 10n
-.nr Fn 16n
-.nr Fo 16n
-.nr Fr 12n\" ?
-.nr Ft 8n\" ?
-.nr Fx 1
-.nr Ic 10n
-.nr In 12n
-.nr It 8n\" ?
-.nr Lb 11n
-.nr Li 16n
-.nr Lk 6n\" ?
-.nr Lp 8n\" ?
-.nr Me 6n
-.nr Ms 6n
-.nr Mt 6n\" ?
-.nr Nd 8n\" ?
-.nr Nm 10n
-.nr No 12n
-.nr Ns 2
-.nr Nx 1
-.nr Oc 3
-.nr Oo 10n
-.nr Op 14n
-.nr Os 6n\" ?
-.nr Ox 1
-.nr Pa 32n
-.nr Pc 3
-.nr Pf 12n
-.nr Po 12n
-.nr Pp 8n\" ?
-.nr Pq 12n
-.nr Qc 3
-.nr Ql 16n
-.nr Qo 12n
-.nr Qq 12n
-.nr Rv 1
-.nr Sc 3
-.nr Sh 8n
-.nr Sm 8n\" ?
-.nr So 12n
-.nr Sq 12n
-.nr Ss 8n
-.nr St 8n\" ?
-.nr Sx 16n
-.nr Sy 6n
-.nr Ta 2
-.nr Tn 10n
-.nr Ud 8n\" ?
-.nr Ux 1
-.nr Va 12n
-.nr Vt 8n\" ?
-.nr Xc 3
-.nr Xo 1
-.nr Xr 10n
-.
-.
-.\" macros which must be processed after the closing delimiter of `Op'
-.\" and friends
-.ds doc-after-Ao
-.ds doc-after-Bo
-.ds doc-after-Bro
-.ds doc-after-Do
-.ds doc-after-Eo
-.ds doc-after-Fo
-.ds doc-after-Ns
-.ds doc-after-Oo
-.ds doc-after-Po
-.ds doc-after-Qo
-.ds doc-after-So
-.ds doc-after-Xo
-.
-.
-.nr doc-display-indent 6n
-.
-.
-.\" space strings
-.
-.ds doc-soft-space " \"
-.ds doc-hard-space \~
-.ds doc-tab \t
-.
-.
-.eo
-.
-.
-.\" punctuation values (suffix=3, prefix=4)
-.
-.nr doc-punct. 3
-.nr doc-punct, 3
-.nr doc-punct: 3
-.nr doc-punct; 3
-.nr doc-punct( 4
-.nr doc-punct) 3
-.nr doc-punct[ 4
-.nr doc-punct] 3
-.nr doc-punct? 3
-.nr doc-punct! 3
-.
-.
-.\" header assembly macros
-.
-.\" NS doc-document-title global string
-.\" NS the title of the manual page
-.
-.ds doc-document-title UNTITLED
-.
-.
-.\" NS doc-volume global string
-.\" NS the volume where the manual page belongs to
-.
-.ds doc-volume LOCAL
-.
-.
-.\" NS doc-section global string
-.\" NS the manual section
-.
-.ds doc-section Null
-.
-.
-.\" NS Dt user macro (not parsed, not callable)
-.\" NS document title
-.\" NS
-.\" NS modifies:
-.\" NS doc-document-title
-.\" NS doc-section
-.\" NS doc-volume
-.\" NS doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-volume-as-XXX
-.\" NS doc-volume-ds-XXX
-.\" NS
-.\" NS width register `Dt' set above
-.
-.\" an alternative, more detailed scheme for naming the manual sections
-.\"
-.ds doc-volume-operating-system BSD
-.nr doc-volume-operating-system-ateol 0
-.ds doc-volume-ds-1 General Commands Manual
-.ds doc-volume-ds-2 System Calls Manual
-.ds doc-volume-ds-3 Library Functions Manual
-.ds doc-volume-ds-4 Kernel Interfaces Manual
-.ds doc-volume-ds-5 File Formats Manual
-.ds doc-volume-ds-6 Games Manual
-.ds doc-volume-ds-7 Miscellaneous Information Manual
-.ds doc-volume-ds-8 System Manager's Manual
-.ds doc-volume-ds-9 Kernel Developer's Manual
-.
-.ds doc-volume-ds-USD User's Supplementary Documents
-.ds doc-volume-ds-PS1 Programmer's Supplementary Documents
-.ds doc-volume-ds-AMD Ancestral Manual Documents
-.ds doc-volume-ds-SMM System Manager's Manual
-.ds doc-volume-ds-URM User's Reference Manual
-.ds doc-volume-ds-PRM Programmer's Manual
-.ds doc-volume-ds-KM Kernel Manual
-.ds doc-volume-ds-IND Manual Master Index
-.ds doc-volume-ds-LOCAL Local Manual
-.ds doc-volume-ds-CON Contributed Software Manual
-.
-.als doc-volume-ds-MMI doc-volume-ds-IND
-.als doc-volume-ds-LOC doc-volume-ds-LOCAL
-.
-.ds doc-volume-as-alpha alpha
-.als doc-volume-as-Alpha doc-volume-as-alpha
-.ds doc-volume-as-acorn26 acorn26
-.ds doc-volume-as-acorn32 acorn32
-.ds doc-volume-as-algor algor
-.ds doc-volume-as-amd64 amd64
-.ds doc-volume-as-amiga amiga
-.ds doc-volume-as-amigappc amigappc
-.ds doc-volume-as-arc arc
-.ds doc-volume-as-arm arm
-.ds doc-volume-as-arm26 arm26
-.ds doc-volume-as-arm32 arm32
-.ds doc-volume-as-armish armish
-.ds doc-volume-as-atari atari
-.ds doc-volume-as-aviion aviion
-.ds doc-volume-as-beagle beagle
-.ds doc-volume-as-bebox bebox
-.ds doc-volume-as-cats cats
-.ds doc-volume-as-cesfic cesfic
-.ds doc-volume-as-cobalt cobalt
-.ds doc-volume-as-dreamcast dreamcast
-.ds doc-volume-as-emips emips
-.ds doc-volume-as-evbarm evbarm
-.ds doc-volume-as-evbmips evbmips
-.ds doc-volume-as-evbppc evbppc
-.ds doc-volume-as-evbsh3 evbsh3
-.ds doc-volume-as-ews4800mips ews4800mips
-.ds doc-volume-as-hp300 hp300
-.ds doc-volume-as-hp700 hp700
-.ds doc-volume-as-hpcarm hpcarm
-.ds doc-volume-as-hpcmips hpcmips
-.ds doc-volume-as-hpcsh hpcsh
-.ds doc-volume-as-hppa hppa
-.ds doc-volume-as-hppa64 hppa64
-.ds doc-volume-as-i386 i386
-.ds doc-volume-as-ia64 ia64
-.ds doc-volume-as-ibmnws ibmnws
-.ds doc-volume-as-iyonix iyonix
-.ds doc-volume-as-landisk landisk
-.ds doc-volume-as-loongson loongson
-.ds doc-volume-as-luna68k luna68k
-.ds doc-volume-as-luna88k luna88k
-.ds doc-volume-as-m68k m68k
-.ds doc-volume-as-mac68k mac68k
-.ds doc-volume-as-macppc macppc
-.ds doc-volume-as-mips mips
-.ds doc-volume-as-mips64 mips64
-.ds doc-volume-as-mipsco mipsco
-.ds doc-volume-as-mmeye mmeye
-.ds doc-volume-as-mvme68k mvme68k
-.ds doc-volume-as-mvme88k mvme88k
-.ds doc-volume-as-mvmeppc mvmeppc
-.ds doc-volume-as-netwinder netwinder
-.ds doc-volume-as-news68k news68k
-.ds doc-volume-as-newsmips newsmips
-.ds doc-volume-as-next68k next68k
-.ds doc-volume-as-ofppc ofppc
-.ds doc-volume-as-palm palm
-.ds doc-volume-as-pc532 pc532
-.ds doc-volume-as-playstation2 playstation2
-.ds doc-volume-as-pmax pmax
-.ds doc-volume-as-pmppc pmppc
-.ds doc-volume-as-powerpc powerpc
-.ds doc-volume-as-prep prep
-.ds doc-volume-as-rs6000 rs6000
-.ds doc-volume-as-sandpoint sandpoint
-.ds doc-volume-as-sbmips sbmips
-.ds doc-volume-as-sgi sgi
-.ds doc-volume-as-sgimips sgimips
-.ds doc-volume-as-sh3 sh3
-.ds doc-volume-as-shark shark
-.ds doc-volume-as-socppc socppc
-.ds doc-volume-as-solbourne solbourne
-.ds doc-volume-as-sparc sparc
-.ds doc-volume-as-sparc64 sparc64
-.ds doc-volume-as-sun2 sun2
-.ds doc-volume-as-sun3 sun3
-.ds doc-volume-as-tahoe tahoe
-.ds doc-volume-as-vax vax
-.ds doc-volume-as-x68k x68k
-.ds doc-volume-as-x86_64 x86_64
-.ds doc-volume-as-xen xen
-.ds doc-volume-as-zaurus zaurus
-.
-.de Dt
-. \" reset default arguments
-. ds doc-document-title UNTITLED
-. ds doc-volume LOCAL
-. ds doc-section Null
-. ds doc-command-name
-.
-. if !"\$1"" \
-. ds doc-document-title "\$1
-.
-. if !"\$2"" \{\
-. ds doc-section \$2
-. ie \B\$2 \{\
-. if ((\$2 >= 1) & (\$2 <= 9)) \{\
-. ie \n[doc-volume-operating-system-ateol] \{\
-. ds doc-volume "\*[doc-volume-ds-\$2] \*[doc-volume-operating-system]
-. if \A\$3 \{\
-. if d doc-volume-as-\$3 \
-. as doc-volume "/\*[doc-volume-as-\$3]
-. \}\}
-. el \{\
-. ds doc-volume "\*[doc-volume-operating-system]
-. if \A\$3 \{\
-. if d doc-volume-as-\$3 \
-. as doc-volume "/\*[doc-volume-as-\$3]
-. \}
-. as doc-volume " \*[doc-volume-ds-\$2]
-. \}\}\}
-. el \{\
-. ie "\$2"unass" \
-. ds doc-volume DRAFT
-. el \{ .ie "\$2"draft" \
-. ds doc-volume DRAFT
-. el .if "\$2"paper" \
-. ds doc-volume UNTITLED
-. \}\}
-. if \A\$3 \{\
-. if d doc-volume-ds-\$3 \
-. ds doc-volume "\*[doc-volume-ds-\$3]
-. \}\}\}
-.
-. if !"\$3"" \
-. if "\*[doc-volume]"LOCAL" \
-. ds doc-volume \$3
-.
-. if !\n[cR] \
-. if \n[nl] \{\
- . doc-setup-header
-. bp
-. \}
-..
-.
-.
-.\" NS doc-default-operating-system global string
-.\" NS the exact (default) version of the operating system
-.\" NS
-.\" NS override this in `mdoc.local', if necessary
-.
-.ds doc-default-operating-system BSD
-.
-.
-.\" NS doc-operating-system global string
-.\" NS the exact version of the operating system
-.
-.ds doc-operating-system
-.
-.
-.\" NS Os user macro (not parsed, not callable)
-.\" NS operating system
-.\" NS
-.\" NS modifies:
-.\" NS doc-operating-system
-.\" NS doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-operating-system-XXX-XXX
-.\" NS
-.\" NS width register `Os' set above
-.
-.ds doc-operating-system-ATT-7 7th\~Edition
-.als doc-operating-system-ATT-7th doc-operating-system-ATT-7
-.ds doc-operating-system-ATT-3 System\~III
-.als doc-operating-system-ATT-III doc-operating-system-ATT-3
-.ds doc-operating-system-ATT-V System\~V
-.ds doc-operating-system-ATT-V.2 System\~V Release\~2
-.ds doc-operating-system-ATT-V.3 System\~V Release\~3
-.ds doc-operating-system-ATT-V.4 System\~V Release\~4
-.
-.ds doc-operating-system-BSD-3 3rd\~Berkeley Distribution
-.ds doc-operating-system-BSD-4 4th\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.1 4.1\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.2 4.2\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3 4.3\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3T 4.3-Tahoe Berkeley Distribution
-.ds doc-operating-system-BSD-4.3R 4.3-Reno Berkeley Distribution
-.als doc-operating-system-BSD-4.3t doc-operating-system-BSD-4.3T
-.als doc-operating-system-BSD-4.3r doc-operating-system-BSD-4.3R
-.ds doc-operating-system-BSD-4.4 4.4BSD
-.
-.ds doc-operating-system-NetBSD-0.8 0.8
-.ds doc-operating-system-NetBSD-0.8a 0.8A
-.ds doc-operating-system-NetBSD-0.9 0.9
-.ds doc-operating-system-NetBSD-0.9a 0.9A
-.ds doc-operating-system-NetBSD-1.0 1.0
-.ds doc-operating-system-NetBSD-1.0a 1.0A
-.ds doc-operating-system-NetBSD-1.1 1.1
-.ds doc-operating-system-NetBSD-1.2 1.2
-.ds doc-operating-system-NetBSD-1.2a 1.2A
-.ds doc-operating-system-NetBSD-1.2b 1.2B
-.ds doc-operating-system-NetBSD-1.2c 1.2C
-.ds doc-operating-system-NetBSD-1.2d 1.2D
-.ds doc-operating-system-NetBSD-1.2e 1.2E
-.ds doc-operating-system-NetBSD-1.3 1.3
-.ds doc-operating-system-NetBSD-1.3a 1.3A
-.ds doc-operating-system-NetBSD-1.4 1.4
-.ds doc-operating-system-NetBSD-1.4.1 1.4.1
-.ds doc-operating-system-NetBSD-1.4.2 1.4.2
-.ds doc-operating-system-NetBSD-1.4.3 1.4.3
-.ds doc-operating-system-NetBSD-1.5 1.5
-.ds doc-operating-system-NetBSD-1.5.1 1.5.1
-.ds doc-operating-system-NetBSD-1.5.2 1.5.2
-.ds doc-operating-system-NetBSD-1.5.3 1.5.3
-.ds doc-operating-system-NetBSD-1.6 1.6
-.ds doc-operating-system-NetBSD-1.6.1 1.6.1
-.ds doc-operating-system-NetBSD-1.6.2 1.6.2
-.ds doc-operating-system-NetBSD-1.6.3 1.6.3
-.ds doc-operating-system-NetBSD-2.0 2.0
-.ds doc-operating-system-NetBSD-2.0.1 2.0.1
-.ds doc-operating-system-NetBSD-2.0.2 2.0.2
-.ds doc-operating-system-NetBSD-2.0.3 2.0.3
-.ds doc-operating-system-NetBSD-2.1 2.1
-.ds doc-operating-system-NetBSD-3.0 3.0
-.ds doc-operating-system-NetBSD-3.0.1 3.0.1
-.ds doc-operating-system-NetBSD-3.0.2 3.0.2
-.ds doc-operating-system-NetBSD-3.0.3 3.0.3
-.ds doc-operating-system-NetBSD-3.1 3.1
-.ds doc-operating-system-NetBSD-3.1.1 3.1.1
-.ds doc-operating-system-NetBSD-4.0 4.0
-.ds doc-operating-system-NetBSD-4.0.1 4.0.1
-.ds doc-operating-system-NetBSD-5.0 5.0
-.ds doc-operating-system-NetBSD-5.0.1 5.0.1
-.ds doc-operating-system-NetBSD-5.0.2 5.0.2
-.ds doc-operating-system-NetBSD-5.1 5.1
-.ds doc-operating-system-NetBSD-5.1.2 5.1.2
-.ds doc-operating-system-NetBSD-5.1.3 5.1.3
-.ds doc-operating-system-NetBSD-5.2 5.2
-.ds doc-operating-system-NetBSD-5.2.1 5.2.1
-.ds doc-operating-system-NetBSD-6.0 6.0
-.ds doc-operating-system-NetBSD-6.0.1 6.0.1
-.ds doc-operating-system-NetBSD-6.0.2 6.0.2
-.ds doc-operating-system-NetBSD-6.0.3 6.0.3
-.ds doc-operating-system-NetBSD-6.1 6.1
-.
-.ds doc-operating-system-OpenBSD-2.0 2.0
-.ds doc-operating-system-OpenBSD-2.1 2.1
-.ds doc-operating-system-OpenBSD-2.2 2.2
-.ds doc-operating-system-OpenBSD-2.3 2.3
-.ds doc-operating-system-OpenBSD-2.4 2.4
-.ds doc-operating-system-OpenBSD-2.5 2.5
-.ds doc-operating-system-OpenBSD-2.6 2.6
-.ds doc-operating-system-OpenBSD-2.7 2.7
-.ds doc-operating-system-OpenBSD-2.8 2.8
-.ds doc-operating-system-OpenBSD-2.9 2.9
-.ds doc-operating-system-OpenBSD-3.0 3.0
-.ds doc-operating-system-OpenBSD-3.1 3.1
-.ds doc-operating-system-OpenBSD-3.2 3.2
-.ds doc-operating-system-OpenBSD-3.3 3.3
-.ds doc-operating-system-OpenBSD-3.4 3.4
-.ds doc-operating-system-OpenBSD-3.5 3.5
-.ds doc-operating-system-OpenBSD-3.6 3.6
-.ds doc-operating-system-OpenBSD-3.7 3.7
-.ds doc-operating-system-OpenBSD-3.8 3.8
-.ds doc-operating-system-OpenBSD-3.9 3.9
-.ds doc-operating-system-OpenBSD-4.0 4.0
-.ds doc-operating-system-OpenBSD-4.1 4.1
-.ds doc-operating-system-OpenBSD-4.2 4.2
-.ds doc-operating-system-OpenBSD-4.3 4.3
-.ds doc-operating-system-OpenBSD-4.4 4.4
-.ds doc-operating-system-OpenBSD-4.5 4.5
-.ds doc-operating-system-OpenBSD-4.6 4.6
-.ds doc-operating-system-OpenBSD-4.7 4.7
-.ds doc-operating-system-OpenBSD-4.8 4.8
-.ds doc-operating-system-OpenBSD-4.9 4.9
-.ds doc-operating-system-OpenBSD-5.0 5.0
-.ds doc-operating-system-OpenBSD-5.1 5.1
-.ds doc-operating-system-OpenBSD-5.2 5.2
-.ds doc-operating-system-OpenBSD-5.3 5.3
-.ds doc-operating-system-OpenBSD-5.4 5.4
-.
-.ds doc-operating-system-FreeBSD-1.0 1.0
-.ds doc-operating-system-FreeBSD-1.1 1.1
-.ds doc-operating-system-FreeBSD-1.1.5 1.1.5
-.ds doc-operating-system-FreeBSD-1.1.5.1 1.1.5.1
-.ds doc-operating-system-FreeBSD-2.0 2.0
-.ds doc-operating-system-FreeBSD-2.0.5 2.0.5
-.ds doc-operating-system-FreeBSD-2.1 2.1
-.ds doc-operating-system-FreeBSD-2.1.5 2.1.5
-.ds doc-operating-system-FreeBSD-2.1.6 2.1.6
-.ds doc-operating-system-FreeBSD-2.1.7 2.1.7
-.ds doc-operating-system-FreeBSD-2.2 2.2
-.ds doc-operating-system-FreeBSD-2.2.1 2.2.1
-.ds doc-operating-system-FreeBSD-2.2.2 2.2.2
-.ds doc-operating-system-FreeBSD-2.2.5 2.2.5
-.ds doc-operating-system-FreeBSD-2.2.6 2.2.6
-.ds doc-operating-system-FreeBSD-2.2.7 2.2.7
-.ds doc-operating-system-FreeBSD-2.2.8 2.2.8
-.ds doc-operating-system-FreeBSD-2.2.9 2.2.9
-.ds doc-operating-system-FreeBSD-3.0 3.0
-.ds doc-operating-system-FreeBSD-3.1 3.1
-.ds doc-operating-system-FreeBSD-3.2 3.2
-.ds doc-operating-system-FreeBSD-3.3 3.3
-.ds doc-operating-system-FreeBSD-3.4 3.4
-.ds doc-operating-system-FreeBSD-3.5 3.5
-.ds doc-operating-system-FreeBSD-4.0 4.0
-.ds doc-operating-system-FreeBSD-4.1 4.1
-.ds doc-operating-system-FreeBSD-4.1.1 4.1.1
-.ds doc-operating-system-FreeBSD-4.2 4.2
-.ds doc-operating-system-FreeBSD-4.3 4.3
-.ds doc-operating-system-FreeBSD-4.4 4.4
-.ds doc-operating-system-FreeBSD-4.5 4.5
-.ds doc-operating-system-FreeBSD-4.6 4.6
-.ds doc-operating-system-FreeBSD-4.6.2 4.6.2
-.ds doc-operating-system-FreeBSD-4.7 4.7
-.ds doc-operating-system-FreeBSD-4.8 4.8
-.ds doc-operating-system-FreeBSD-4.9 4.9
-.ds doc-operating-system-FreeBSD-4.10 4.10
-.ds doc-operating-system-FreeBSD-4.11 4.11
-.ds doc-operating-system-FreeBSD-5.0 5.0
-.ds doc-operating-system-FreeBSD-5.1 5.1
-.ds doc-operating-system-FreeBSD-5.2 5.2
-.ds doc-operating-system-FreeBSD-5.2.1 5.2.1
-.ds doc-operating-system-FreeBSD-5.3 5.3
-.ds doc-operating-system-FreeBSD-5.4 5.4
-.ds doc-operating-system-FreeBSD-5.5 5.5
-.ds doc-operating-system-FreeBSD-6.0 6.0
-.ds doc-operating-system-FreeBSD-6.1 6.1
-.ds doc-operating-system-FreeBSD-6.2 6.2
-.ds doc-operating-system-FreeBSD-6.3 6.3
-.ds doc-operating-system-FreeBSD-6.4 6.4
-.ds doc-operating-system-FreeBSD-7.0 7.0
-.ds doc-operating-system-FreeBSD-7.1 7.1
-.ds doc-operating-system-FreeBSD-7.2 7.2
-.ds doc-operating-system-FreeBSD-7.3 7.3
-.ds doc-operating-system-FreeBSD-8.0 8.0
-.ds doc-operating-system-FreeBSD-8.1 8.1
-.ds doc-operating-system-FreeBSD-8.2 8.2
-.ds doc-operating-system-FreeBSD-9.0 9.0
-.ds doc-operating-system-FreeBSD-10.0 10.0
-.
-.ds doc-operating-system-Darwin-8.0.0 8.0.0
-.ds doc-operating-system-Darwin-8.1.0 8.1.0
-.ds doc-operating-system-Darwin-8.2.0 8.2.0
-.ds doc-operating-system-Darwin-8.3.0 8.3.0
-.ds doc-operating-system-Darwin-8.4.0 8.4.0
-.ds doc-operating-system-Darwin-8.5.0 8.5.0
-.ds doc-operating-system-Darwin-8.6.0 8.6.0
-.ds doc-operating-system-Darwin-8.7.0 8.7.0
-.ds doc-operating-system-Darwin-8.8.0 8.8.0
-.ds doc-operating-system-Darwin-8.9.0 8.9.0
-.ds doc-operating-system-Darwin-8.10.0 8.10.0
-.ds doc-operating-system-Darwin-8.11.0 8.11.0
-.ds doc-operating-system-Darwin-9.0.0 9.0.0
-.ds doc-operating-system-Darwin-9.1.0 9.1.0
-.ds doc-operating-system-Darwin-9.2.0 9.2.0
-.ds doc-operating-system-Darwin-9.3.0 9.3.0
-.ds doc-operating-system-Darwin-9.4.0 9.4.0
-.ds doc-operating-system-Darwin-9.5.0 9.5.0
-.ds doc-operating-system-Darwin-9.6.0 9.6.0
-.ds doc-operating-system-Darwin-9.7.0 9.7.0
-.ds doc-operating-system-Darwin-9.8.0 9.8.0
-.ds doc-operating-system-Darwin-10.1.0 10.1.0
-.ds doc-operating-system-Darwin-10.2.0 10.2.0
-.ds doc-operating-system-Darwin-10.3.0 10.3.0
-.ds doc-operating-system-Darwin-10.4.0 10.4.0
-.ds doc-operating-system-Darwin-10.5.0 10.5.0
-.ds doc-operating-system-Darwin-10.6.0 10.6.0
-.ds doc-operating-system-Darwin-10.7.0 10.7.0
-.ds doc-operating-system-Darwin-11.0.0 11.0.0
-.
-.ds doc-operating-system-DragonFly-1.0 1.0
-.ds doc-operating-system-DragonFly-1.1 1.1
-.ds doc-operating-system-DragonFly-1.2 1.2
-.ds doc-operating-system-DragonFly-1.3 1.3
-.ds doc-operating-system-DragonFly-1.4 1.4
-.ds doc-operating-system-DragonFly-1.5 1.5
-.ds doc-operating-system-DragonFly-1.6 1.6
-.ds doc-operating-system-DragonFly-1.7 1.7
-.ds doc-operating-system-DragonFly-1.8 1.8
-.ds doc-operating-system-DragonFly-1.8.1 1.8.1
-.ds doc-operating-system-DragonFly-1.9 1.9
-.ds doc-operating-system-DragonFly-1.10 1.10
-.ds doc-operating-system-DragonFly-1.11 1.11
-.ds doc-operating-system-DragonFly-1.12 1.12
-.ds doc-operating-system-DragonFly-1.12.2 1.12.2
-.ds doc-operating-system-DragonFly-1.13 1.13
-.ds doc-operating-system-DragonFly-2.0 2.0
-.ds doc-operating-system-DragonFly-2.1 2.1
-.ds doc-operating-system-DragonFly-2.2 2.2
-.ds doc-operating-system-DragonFly-2.3 2.3
-.ds doc-operating-system-DragonFly-2.4 2.4
-.ds doc-operating-system-DragonFly-2.5 2.5
-.ds doc-operating-system-DragonFly-2.6 2.6
-.ds doc-operating-system-DragonFly-2.7 2.7
-.ds doc-operating-system-DragonFly-2.8 2.8
-.ds doc-operating-system-DragonFly-2.9 2.9
-.ds doc-operating-system-DragonFly-2.9.1 2.9.1
-.ds doc-operating-system-DragonFly-2.10 2.10
-.ds doc-operating-system-DragonFly-2.10.1 2.10.1
-.ds doc-operating-system-DragonFly-2.11 2.11
-.ds doc-operating-system-DragonFly-3.0 3.0
-.ds doc-operating-system-DragonFly-3.1 3.1
-.ds doc-operating-system-DragonFly-3.2 3.2
-.ds doc-operating-system-DragonFly-3.3 3.3
-.ds doc-operating-system-DragonFly-3.4 3.4
-.ds doc-operating-system-DragonFly-3.5 3.5
-.ds doc-operating-system-DragonFly-3.6 3.6
-.ds doc-operating-system-DragonFly-3.7 3.7
-.
-.de Os
-. ds doc-command-name
-.
-. ie "\$1"" \
-. ds doc-operating-system "\*[doc-default-operating-system]
-. el \{ .ie "\$1"ATT" \{\
-. ds doc-operating-system AT&T
-. if \A\$2 \{\
-. ie d doc-operating-system-ATT-\$2 \
-. as doc-operating-system " \*[doc-operating-system-ATT-\$2]
-. el \
-. as doc-operating-system " UNIX
-. \}\}
-. el \{ .ie "\$1"BSD" \{\
-. if \A\$2 \{\
-. ie d doc-operating-system-BSD-\$2 \
-. ds doc-operating-system "\*[doc-operating-system-BSD-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown BSD version `\$2' (#\n[.c])
-. \}\}
-. el \{ .ie "\$1"FreeBSD" \{\
-. ds doc-operating-system FreeBSD
-. if \A\$2 \{\
-. ie d doc-operating-system-FreeBSD-\$2 \
-. as doc-operating-system \~\*[doc-operating-system-FreeBSD-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown FreeBSD version `\$2' (#\n[.c])
-. \}\}
-. el \{ .ie "\$1"DragonFly" \{\
-. ds doc-operating-system DragonFly
-. if \A\$2 \{\
-. ie d doc-operating-system-DragonFly-\$2 \
-. as doc-operating-system \~\*[doc-operating-system-DragonFly-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown DragonFly version `\$2' (#\n[.c])
-. \}\}
-. el \{ .ie "\$1"NetBSD" \{\
-. ds doc-operating-system NetBSD
-. if \A\$2 \{\
-. ie d doc-operating-system-NetBSD-\$2 \
-. as doc-operating-system \~\*[doc-operating-system-NetBSD-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown NetBSD version `\$2' (#\n[.c])
-. \}\}
-. el \{ .ie "\$1"OpenBSD" \{\
-. ds doc-operating-system OpenBSD
-. if \A\$2 \{\
-. ie d doc-operating-system-OpenBSD-\$2 \
-. as doc-operating-system \~\*[doc-operating-system-OpenBSD-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown OpenBSD version `\$2' (#\n[.c])
-. \}\}
-. el \{ .ie "\$1"Darwin" \{\
-. ds doc-operating-system Darwin
-. if \A\$2 \{\
-. ie d doc-operating-system-Darwin-\$2 \
-. as doc-operating-system \~\*[doc-operating-system-Darwin-\$2]
-. el \
-. tm mdoc warning: .Os: Unknown Darwin version `\$2' (#\n[.c])
-. \}\}
-. el \{\
-. ds doc-operating-system \$1
-. if !"\$2"" \
-. as doc-operating-system " \$2
-. \}\}\}\}\}\}\}\}
-..
-.
-.
-.\" NS doc-date-string global string
-.\" NS the manual page date as set by `Dd'
-.
-.ds doc-date-string
-.
-.
-.\" NS Dd user macro (not parsed, not callable)
-.\" NS set document date
-.\" NS
-.\" NS modifies:
-.\" NS doc-date-string
-.\" NS doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-date-XXX
-.\" NS
-.\" NS width register `Dd' set above
-.
-.ds doc-date-1 January
-.ds doc-date-2 February
-.ds doc-date-3 March
-.ds doc-date-4 April
-.ds doc-date-5 May
-.ds doc-date-6 June
-.ds doc-date-7 July
-.ds doc-date-8 August
-.ds doc-date-9 September
-.ds doc-date-10 October
-.ds doc-date-11 November
-.ds doc-date-12 December
-.
-.de Dd
-. ds doc-command-name
-.
-. ie \n[.$] \{\
-. ie (\n[.$] == 3) \
-. ds doc-date-string \$1\~\$2 \$3
-. el \{\
-. ds doc-date-string "\*[doc-date-\n[mo]]
-. as doc-date-string \~\n[dy], \n[year]
-. \}
-. \}
-. el \
-. ds doc-date-string Epoch
-..
-.
-.
-.\" NS doc-hyphen-flags global register
-.\" NS the parameter for the `.hy' request
-.\" NS
-.\" NS override this in `mdoc.local', if necessary.
-.
-.nr doc-hyphen-flags 12
-.
-.
-.\" NS doc-header macro
-.\" NS print page header
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dh
-.\" NS doc-reg-dh1
-.
-.de doc-header
-. ev doc-env-dh
-. doc-setup-page-layout
-. if !\n[cR] \
-. sp \n[doc-header-space]u
-. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
-. nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
-. if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-. while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-. substring doc-header-string 0 -2
-. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
-. \}
-. as doc-header-string "\|.\|.\|.
-. \}
-. tl \*[doc-caption-font]\*[doc-header-string]\f[]\*[doc-caption-font2]\*[doc-volume]\f[]\*[doc-caption-font]\*[doc-header-string]\f[]
-. ie !\n[cR] \
-. sp \n[doc-header-space]u
-. el \
-. sp 1v
-. ev
-. ns
-..
-.
-.
-.\" NS doc-footer macro
-.\" NS print page footer
-.
-.de doc-footer
-. ie \n[cR] \
-. br
-. el \{\
-. ev doc-caption-enviroment
-. doc-setup-page-layout
-. sp \n[doc-footer-space]u
-. ie \n[D] \{\
-. ie o \
-. tl %\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
-. el \
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
-. \}
-. el \
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
-. bp
-. ev
-. \}
-..
-.
-.
-.\" NS doc-check-depth macro
-.\" NS check paired macros
-.
-.de doc-check-depth
-. if \n[doc-list-depth] \{\
-. tm mdoc warning: A .Bl directive has no matching .El (#\n[.c])
-. nr doc-list-depth 0
-. \}
-. if \n[doc-display-depth] \{\
-. tm mdoc warning: A .Bd directive has no matching .Ed (#\n[.c])
-. nr doc-display-depth 0
-. \}
-. if \n[doc-fontmode-depth] \{\
-. tm mdoc warning: A .Bf directive has no matching .Ef (#\n[.c])
-. nr doc-fontmode-depth 0
-. \}
-..
-.
-.
-.\" NS doc-end-macro macro
-.\" NS finish output
-.
-.de doc-end-macro
-. \" We may still have a partial line in the environment. If this is the
-. \" case, and we happen to be on the last line of the page, the `.fl'
-. \" request will cause the page to be ejected and troff will immediately
-. \" exit. If we are in nroff mode, this would be unfortunate, since we
-. \" would never get a chance to output the footer. So we fudge the page
-. \" length to make sure that the last page is never ejected until we want
-. \" it to be.
-.
-. if \n[cR] \
-. pl +3v
-. fl
-.
-. doc-check-depth
-.
-. if \n[cR] \{\
-. sp
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
-. \" suppress empty lines after the footer
-. pl \n[nl]u
-. \}
-..
-.
-.
-.\" NS doc-paragraph macro
-.\" NS insert a paragraph
-.
-.de doc-paragraph
-. sp \n[doc-paragraph-space]u
-. if !\n[cR] \
-. ne 2
-. ns
-..
-.
-.
-.\" NS Pp user macro (not parsed, not callable)
-.\" NS new paragraph
-.\" NS
-.\" NS width register `Pp' set above
-.
-.als Pp doc-paragraph
-.
-.
-.\" NS Lp user macro (not parsed, not callable)
-.\" NS same as .Pp
-.\" NS
-.\" NS width register `Lp' set above
-.
-.als Lp doc-paragraph
-.
-.
-.de LP
-. tm Not a \-mdoc command: .LP (#\n[.c])
-..
-.
-.
-.de PP
-. tm Not a \-mdoc command: .PP (#\n[.c])
-..
-.
-.
-.de pp
-. tm Not a \-mdoc command: .pp (#\n[.c])
-..
-.
-.
-.de SH
-. tm Not a \-mdoc command: .SH (#\n[.c])
-..
-.
-.
-.\" NS Nd user macro (not parsed, not callable)
-.\" NS print name description
-.\" NS
-.\" NS width register `Nd' set above
-.
-.de Nd
-. nop \[em] \$*
-..
-.
-.
-.\" NS doc-in-synopsis-section global register (bool)
-.\" NS whether we are in the `synopsis' section
-.
-.nr doc-in-synopsis-section 0
-.
-.
-.\" NS doc-in-library-section global register (bool)
-.\" NS whether we are in the `library' section
-.
-.nr doc-in-library-section 0
-.
-.
-.\" NS doc-in-see-also-section global register (bool)
-.\" NS whether we are in the `see also' section
-.
-.nr doc-in-see-also-section 0
-.
-.
-.\" NS doc-in-files-section global register (bool)
-.\" NS whether we are in the `files' section
-.
-.nr doc-in-files-section 0
-.
-.
-.\" NS doc-in-authors-section global register (bool)
-.\" NS whether we are in the `authors' section
-.
-.nr doc-in-authors-section 0
-.
-.
-.\" NS doc-first-parameter macro
-.\" NS return first parameter
-.\" NS
-.\" NS local variables:
-.\" NS doc-str-dfp
-.
-.de doc-first-parameter
-. ds doc-str-dfp "\$1
-..
-.
-.
-.\" NS Sh user macro (not callable)
-.\" NS section headers
-.\" NS
-.\" NS modifies:
-.\" NS doc-func-args-processed
-.\" NS doc-func-count
-.\" NS doc-in-authors-section
-.\" NS doc-in-files-section
-.\" NS doc-in-library-section
-.\" NS doc-in-see-also-section
-.\" NS doc-in-synopsis-section
-.\" NS doc-indent-synopsis
-.\" NS doc-indent-synopsis-active
-.\" NS doc-is-func
-.\" NS doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Sh
-.\" NS doc-reg-Sh1
-.\" NS doc-section-XXX
-.\" NS
-.\" NS width register `Sh' set in doc-common
-.
-.ds doc-section-name NAME
-.ds doc-section-synopsis SYNOPSIS
-.ds doc-section-library LIBRARY
-.ds doc-section-description DESCRIPTION
-.ds doc-section-see-also SEE
-.ds doc-section-files FILES
-.ds doc-section-authors AUTHORS
-.
-.de Sh
-. ie \n[doc-arg-limit] \{\
-. \" we only allow `Sh' within `Sh'; it will change the font back to
-. \" `doc-Sh-font'
-. ie "\*[doc-macro-name]"Sh" \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Sh-font]\c
-. doc-print-recursive
-. \}
-. el \{\
-. tm Usage: .Sh section_name ... (#\n[.c])
-. doc-reset-args
-. \}\}
-. el \{\
-. tm Usage: .Sh not callable by other macros (#\n[.c])
-. doc-reset-args
-. \}\}
-. el \{\
-. if !\n[.$] \{\
-. tm Usage: .Sh section_name ... (#\n[.c])
-. return
-. \}
-.
-. ds doc-macro-name Sh
-. doc-parse-args \$@
-.
-. if t \
-. ad
-.
-. \" this resolves e.g. `.Sh "SEE ALSO"'
-. doc-first-parameter \$*
-.
-. ie "\*[doc-str-dfp]"\*[doc-section-name]" \{\
-. doc-setup-header
-. in 0
-. \}
-. el \{\
-. nr doc-in-synopsis-section 0
-. nr doc-in-library-section 0
-. nr doc-in-see-also-section 0
-. nr doc-in-files-section 0
-. nr doc-in-authors-section 0
-.
-. ie "\*[doc-str-dfp]"\*[doc-section-synopsis]" \{\
-. if t \
-. na
-. nr doc-in-synopsis-section 1
-. nr doc-indent-synopsis 0
-. nr doc-indent-synopsis-active 0
-. \}
-. el \{ .ie "\*[doc-str-dfp]"\*[doc-section-library]" \{\
-. nr doc-in-library-section 1
-. \}
-. el \{ .ie "\*[doc-str-dfp]"\*[doc-section-description]" \{\
-. nr doc-is-func 0
-. nr doc-func-count 0
-. nr doc-func-args-processed 0
-. nr doc-num-func-args 0
-. \}
-. el \{ .ie "\*[doc-str-dfp]"\*[doc-section-see-also]" \{\
-. if t \
-. na
-. nr doc-in-see-also-section 1
-. \}
-. el \{ .ie "\*[doc-str-dfp]"\*[doc-section-files]" \
-. nr doc-in-files-section 1
-. el .if "\*[doc-str-dfp]"\*[doc-section-authors]" \
-. nr doc-in-authors-section 1
-. \}\}\}\}
-.
-. in 0
-. nr doc-have-author 0
-. \}
-.
-. doc-setup-page-layout
-. sp
-. ns
-. ta T .5i
-. if !\n[cR] \
-. ne 3
-. fi
-.
-. if t \{\
-. nr doc-reg-Sh \n[.ss]
-. nr doc-reg-Sh1 \n[.sss]
-. ss (\n[.ss] * 5 / 3) (\n[.sss] * 5 / 3)
-. \}
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Sh-font]\c
-. doc-print-recursive
-.
-. if t \
-. ss \n[doc-reg-Sh] \n[doc-reg-Sh1]
-.
-. in +\n[doc-subheader-indent]u
-. ns
-.
-. doc-check-depth
-. \}
-..
-.
-.
-.\" NS Ss user macro (not callable)
-.\" NS subsection
-.\" NS
-.\" NS local variable:
-.\" NS doc-reg-Ss
-.\" NS doc-reg-Ss1
-.\" NS
-.\" NS width register `Ss' set above
-.
-.de Ss
-. ie \n[doc-arg-limit] \{\
-. \" we only allow `Ss' within `Ss'; it will change the font back to
-. \" `doc-Sh-font'
-. ie "\*[doc-macro-name]"Ss" \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Sh-font]\c
-. doc-print-recursive
-. \}
-. el \{\
-. tm Usage: .Ss subsection_name ... (#\n[.c])
-. doc-reset-args
-. \}\}
-. el \{\
-. tm Usage: .Ss not callable by other macros (#\n[.c])
-. doc-reset-args
-. \}\}
-. el \{\
-. if !\n[.$] \{\
-. tm Usage: .Ss subsection_name ... (#\n[.c])
-. return
-. \}
-.
-. ds doc-macro-name Ss
-. doc-parse-args \$@
-.
-. sp
-. if !\n[cR] \
-. ne 3
-. ti -.25i
-.
-. nr doc-reg-Ss \n[.ss]
-. nr doc-reg-Ss1 \n[.sss]
-. ss (\n[.ss] * 5 / 4) (\n[.sss] * 5 / 4)
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Sh-font]\c
-. doc-print-recursive
-.
-. ss \n[doc-reg-Ss] \n[doc-reg-Ss1]
-.
-. ta T .5i
-. if !\n[cR] \
-. ne 2
-. br
-. ns
-.
-. doc-check-depth
-. \}
-..
-.
-.
-.\" NS Rd macro (not parsed, not callable)
-.\" NS print global register dump to stderr
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Rd
-.
-.de Rd
-. tm MDOC GLOBAL REGISTER DUMP
-. tm doc-macro-name == `\*[doc-macro-name]'
-. tm doc-arg-limit == \n[doc-arg-limit]
-. tm doc-num-args == \n[doc-num-args]
-. tm doc-arg-ptr == \n[doc-arg-ptr]
-.
-. nr doc-reg-Rd 1
-. while (\n[doc-reg-Rd] <= \n[doc-arg-limit]) \{\
-. tm doc-arg\n[doc-reg-Rd] == `\*[doc-arg\n[doc-reg-Rd]]'
-. tm doc-type\n[doc-reg-Rd] == \n[doc-type\n[doc-reg-Rd]]
-. tm doc-space\n[doc-reg-Rd] == `\*[doc-space\n[doc-reg-Rd]]'
-. nr doc-reg-Rd +1
-. \}
-.
-. tm doc-curr-font == \n[doc-curr-font]
-. tm doc-curr-size == \n[doc-curr-size]
-. tm doc-indent-synopsis == \n[doc-indent-synopsis]
-. tm doc-indent-synopsis-active == \n[doc-indent-synopsis-active]
-. tm doc-have-decl == \n[doc-have-decl]
-. tm doc-have-var == \n[doc-have-var]
-. tm doc-command-name == `\*[doc-command-name]'
-. tm doc-quote-left == `\*[doc-quote-left]'
-. tm doc-quote-right == `\*[doc-quote-right]'
-. tm doc-nesting-level == \n[doc-nesting-level]
-. tm doc-in-list == \n[doc-in-list]
-. tm doc-space == `\*[doc-space]'
-. tm doc-saved-space == `\*[doc-saved-space]'
-. tm doc-space-mode == \n[doc-space-mode]
-. tm doc-have-space == \n[doc-have-space]
-. tm doc-have-slot == \n[doc-have-slot]
-. tm doc-keep-type == \n[doc-keep-type]
-. tm doc-display-depth == \n[doc-display-depth]
-. tm doc-is-compact == \n[doc-is-compact]
-.
-. nr doc-reg-Rd 0
-. while (\n[doc-reg-Rd] <= \n[doc-display-depth]) \{\
-. tm doc-display-type-stack\n[doc-reg-Rd] == `\*[doc-display-type-stack\n[doc-reg-Rd]]'
-. tm doc-display-indent-stack\n[doc-reg-Rd] == \n[doc-display-indent-stack\n[doc-reg-Rd]]
-. tm doc-display-ad-stack\n[doc-reg-Rd] == \n[doc-display-ad-stack\n[doc-reg-Rd]]
-. tm doc-display-fi-stack\n[doc-reg-Rd] == \n[doc-display-fi-stack\n[doc-reg-Rd]]
-. tm doc-display-ft-stack\n[doc-reg-Rd] == \n[doc-display-ft-stack\n[doc-reg-Rd]]
-. tm doc-display-ps-stack\n[doc-reg-Rd] == \n[doc-display-ps-stack\n[doc-reg-Rd]]
-. nr doc-reg-Rd +1
-. \}
-.
-. tm doc-fontmode-depth == \n[doc-fontmode-depth]
-.
-. nr doc-reg-Rd 1
-. while (\n[doc-reg-Rd] <= \n[doc-fontmode-depth]) \{\
-. tm doc-fontmode-font-stack\n[doc-reg-Rd] == `\n[doc-fontmode-font-stack\n[doc-reg-Rd]]'
-. tm doc-fontmode-size-stack\n[doc-reg-Rd] == `\n[doc-fontmode-size-stack\n[doc-reg-Rd]]'
-. nr doc-reg-Rd +1
-. \}
-.
-. tm doc-list-depth == \n[doc-list-depth]
-.
-. nr doc-reg-Rd 1
-. while (\n[doc-reg-Rd] <= \n[doc-list-depth]) \{\
-. tm doc-list-type-stack\n[doc-reg-Rd] == `\*[doc-list-type-stack\n[doc-reg-Rd]]'
-. tm doc-list-have-indent-stack\n[doc-reg-Rd] == \n[doc-list-have-indent-stack\n[doc-reg-Rd]]
-. tm doc-list-indent-stack\n[doc-reg-Rd] == \n[doc-list-indent-stack\n[doc-reg-Rd]]
-. tm doc-compact-list-stack\n[doc-reg-Rd] == \n[doc-compact-list-stack\n[doc-reg-Rd]]
-. tm doc-tag-prefix-stack\n[doc-reg-Rd] == `\*[doc-tag-prefix-stack\n[doc-reg-Rd]]'
-. tm doc-tag-width-stack\n[doc-reg-Rd] == `\*[doc-tag-width-stack\n[doc-reg-Rd]]'
-. tm doc-list-offset-stack\n[doc-reg-Rd] == \n[doc-list-offset-stack\n[doc-reg-Rd]]
-. tm doc-enum-list-count-stack\n[doc-reg-Rd] == \n[doc-enum-list-count-stack\n[doc-reg-Rd]]
-. nr doc-reg-Rd +1
-. \}
-.
-. tm doc-saved-Pa-font == `\*[doc-saved-Pa-font]'
-. tm doc-curr-type == \n[doc-curr-type]
-. tm doc-curr-arg == `\*[doc-curr-arg]'
-. tm doc-diag-list-input-line-count == \n[doc-diag-list-input-line-count]
-. tm doc-num-columns == \n[doc-num-columns]
-. tm doc-column-indent-width == \n[doc-column-indent-width]
-. tm doc-is-func == \n[doc-is-func]
-. tm doc-have-old-func == \n[doc-have-old-func]
-. tm doc-func-arg-count == \n[doc-func-arg-count]
-. tm doc-func-arg == `\*[doc-func-arg]'
-. tm doc-num-func-args == \n[doc-num-func-args]
-. tm doc-func-args-processed == \n[doc-func-args-processed]
-. tm doc-have-func == \n[doc-have-func]
-. tm doc-is-reference == \n[doc-is-reference]
-. tm doc-reference-count == \n[doc-reference-count]
-. tm doc-author-count == \n[doc-author-count]
-.
-. nr doc-reg-Rd 0
-. while (\n[doc-reg-Rd] <= \n[doc-author-count]) \{\
-. tm doc-author-name\n[doc-reg-Rd] == `\*[doc-author-name\n[doc-reg-Rd]]'
-. nr doc-reg-Rd +1
-. \}
-.
-. tm doc-book-count == \n[doc-book-count]
-. tm doc-book-name == `\*[doc-book-name]'
-. tm doc-date-count == \n[doc-date-count]
-. tm doc-date == `\*[doc-date]'
-. tm doc-publisher-count == \n[doc-publisher-count]
-. tm doc-publisher-name == `\*[doc-publisher-name]'
-. tm doc-journal-count == \n[doc-journal-count]
-. tm doc-journal-name == `\*[doc-journal-name]'
-. tm doc-issue-count == \n[doc-issue-count]
-. tm doc-issue-name == `\*[doc-issue-name]'
-. tm doc-optional-count == \n[doc-optional-count]
-. tm doc-optional-string == `\*[doc-optional-string]'
-. tm doc-page-number-count == \n[doc-page-number-count]
-. tm doc-page-number-string == `\*[doc-page-number-string]'
-. tm doc-corporate-count == \n[doc-corporate-count]
-. tm doc-corporate-name == `\*[doc-corporate-name]'
-. tm doc-report-count == \n[doc-report-count]
-. tm doc-report-name == `\*[doc-report-name]'
-. tm doc-reference-title-count == \n[doc-reference-title-count]
-. tm doc-reference-title-name == `\*[doc-reference-title-name]'
-. tm doc-reference-title-name-for-book == `\*[doc-reference-title-name-for-book]'
-. tm doc-url-count == \n[doc-url-count]
-. tm doc-url-name == `\*[doc-url-name]'
-. tm doc-volume-count == \n[doc-volume-count]
-. tm doc-volume-name == `\*[doc-volume-name]'
-. tm doc-have-author == \n[doc-have-author]
-.
-. tm doc-document-title == `\*[doc-document-title]'
-. tm doc-volume == `\*[doc-volume]'
-. tm doc-section == `\*[doc-section]'
-. tm doc-operating-system == `\*[doc-operating-system]'
-. tm doc-date-string == `\*[doc-date-string]'
-. tm doc-header-space == \n[doc-header-space]
-. tm doc-footer-space == \n[doc-footer-space]
-. tm doc-display-vertical == \n[doc-display-vertical]
-. tm doc-header-string == `\*[doc-header-string]'
-. tm doc-in-synopsis-section == \n[doc-in-synopsis-section]
-. tm doc-in-library-section == \n[doc-in-library-section]
-. tm doc-in-see-also-section == \n[doc-in-see-also-section]
-. tm doc-in-files-section == \n[doc-in-files-section]
-. tm doc-in-authors-section == \n[doc-in-authors-section]
-.
-. tm END OF GLOBAL REGISTER DUMP
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/contrib/groff/tmac/doc-ditroff b/contrib/groff/tmac/doc-ditroff
deleted file mode 100644
index 84fe88254387..000000000000
--- a/contrib/groff/tmac/doc-ditroff
+++ /dev/null
@@ -1,332 +0,0 @@
-.\" Copyright (c) 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc-ditroff 8.1 (Berkeley) 06/08/93
-.\"
-.\" %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=1 to force the creation of a single, very long page
-.
-.if !r cR .nr cR 0
-.
-.\" use -rS={11,12} to change the font size from 10pt to 11pt or 12pt.
-.
-.if !r S .nr S 10
-.
-.
-.ec
-.
-.
-.ie (\n[S] == 11) \{\
-. ps 10.95z
-. vs 13.6p
-.\}
-.el \{ .ie (\n[S] == 12) \{\
-. ps 12z
-. vs 14.5p
-.\}
-.el \{\
-. ps 10z
-. vs 12p
-.\}\}
-.
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]\s[\n[.ps]u]
-.ds doc-caption-font2 \f[R]\s[\n[.ps]u]
-.ds doc-Ad-font \f[I]\s[\n[.ps]u]
-.ds doc-Ar-font \f[CO]\s[\n[.ps]u]
-.ds doc-Cm-font \f[CB]\s[\n[.ps]u]
-.ds doc-Em-font \f[I]\s[\n[.ps]u]
-.ds doc-Er-font \f[C]\s[\n[.ps]u]
-.ds doc-Ev-font \f[C]\s[\n[.ps]u]
-.ds doc-Fa-font \f[CO]\s[\n[.ps]u]
-.ds doc-Fd-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fl-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fn-font \f[CB]\s[\n[.ps]u]
-.ds doc-Ft-font \f[CO]\s[\n[.ps]u]
-.ds doc-Ic-font \f[CB]\s[\n[.ps]u]
-.ds doc-Li-font \f[C]
-.ds doc-Me-font \f[B]\s[\n[.ps]u]
-.ds doc-Nm-font \f[CB]\s[\n[.ps]u]
-.ds doc-No-font \f[R]\s[\n[.ps]u]
-.ds doc-Pa-font \f[C]\s[\n[.ps]u]
-.ds doc-Sh-font \f[B]\s[\n[.ps]u]
-.ds doc-Sy-font \f[B]\s[\n[.ps]u]
-.ds doc-Sx-font \f[B]\s[\n[.ps]u]
-.ds doc-Tn-font-shape \f[R]
-\# XXX: adapt to discrete LaTeX font sizes
-.ds doc-Tn-font-size \s[(\n[.ps]u - 1z)]
-.ds doc-Va-font \f[I]\s[\n[.ps]u]
-.ds doc-Xr-font \f[C]\s[\n[.ps]u]
-.
-.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
-.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
-.ds lp \f[R](\f[]\s[\n[.ps]u]
-.ds rp \f[R])\f[]\s[\n[.ps]u]
-.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
-.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
-.
-.tr *\[**]
-.
-.\" miscellaneous
-.nr doc-subheader-indent (\w\f[C],u * 5u)
-.nr doc-paragraph-space .5v
-.
-.nr doc-digit-width \w'\0'u
-.nr doc-fixed-width \w\f[C]0
-.
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS the space between header and body
-.
-.nr doc-header-space .5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS the space between body and footer
-.
-.nr doc-footer-space .5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS doc-display-vertical
-.
-.de doc-setup-page-layout
-. ie r LL \
-. ll \n[LL]u
-. el \
-. ll 6.5i
-.
-. ie r LT \
-. lt \n[LT]u
-. el \
-. lt 6.5i
-.
-. po 1i
-.
-. nr doc-display-vertical .5v
-..
-.
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds Lq \[lq]
-.ds Rq \[rq]
-.ds ua \[ua]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Pi \[*p]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds If \[if]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.
-.\" NS doc-header-string global string
-.\" NS the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS doc-header-string
-.
-.de doc-setup-header
-. ds doc-header-string "\*[doc-document-title]
-. if !"\*[doc-section]"Null" \
-. as doc-header-string \|(\*[doc-section])
-.
-. wh 0 doc-header
-. wh -1.25i doc-footer
-.
-. br
-.
-. e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS doc-width
-.
-.de doc-get-width
-. nr doc-width \w\f[C]\$1
-. ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-. ie (\n[doc-width] % \n[doc-fixed-width]) \
-. nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-. el \
-. nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-. \}
-. el \{\
-. ie \n[doc-width] \
-. nr doc-width 1
-. el \
-. nr doc-width 0
-. \}
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS computes the width of an argument as a multiple of
-.\" NS `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS doc-width
-.
-.de doc-get-arg-width
-. nr doc-width \w\f[C]\*[doc-arg\$1]
-. ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-. ie (\n[doc-width] % \n[doc-fixed-width]) \
-. nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-. el \
-. nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-. \}
-. el \{\
-. ie \n[doc-width] \
-. nr doc-width 1
-. el \
-. nr doc-width 0
-. \}
-..
-.
-.
-.\" NS Ql user macro
-.\" NS quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS doc-argXXX
-.\" NS doc-arg-limit
-.\" NS doc-arg-ptr
-.\" NS doc-macro-name
-.\" NS doc-spaceXXX
-.\" NS doc-typeXXX
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Ql
-.\" NS doc-reg-Ql1
-.\" NS doc-reg-Ql2
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Ql
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Ql argument ... (#\n[.c])
-. \}
-.
-. nr doc-reg-Ql (\n[doc-arg-ptr] + 1)
-. doc-get-arg-width \n[doc-reg-Ql]
-.
-. \" don't use quotes if we have more than two succeeding string arguments
-. nr doc-reg-Ql +1
-. if (\n[doc-arg-limit] >= \n[doc-reg-Ql]) \
-. if (\n[doc-type\n[doc-reg-Ql]] == 2) \
-. nr doc-width 3
-.
-. \" make a difference in quotation style for strings longer
-. \" than two characters
-. ie (\n[doc-width] > 2) \
-. Li
-. el \{\
-. ie \n[doc-arg-ptr] \{\
-. \" we replace `Ql' with `Li'
-. ds doc-arg\n[doc-arg-ptr] Li
-. nr doc-arg-ptr -1
-. \}
-. el \{\
-. \" if .Ql has been called directly, we must shift all elements in
-. \" the argument vector to the right so that we can insert `Li'
-. nr doc-reg-Ql \n[doc-arg-limit]
-. nr doc-reg-Ql1 (\n[doc-arg-limit] + 1)
-. while \n[doc-reg-Ql] \{\
-. rn doc-arg\n[doc-reg-Ql] doc-arg\n[doc-reg-Ql1]
-. rnn doc-type\n[doc-reg-Ql] doc-type\n[doc-reg-Ql1]
-. rn doc-space\n[doc-reg-Ql] doc-space\n[doc-reg-Ql1]
-. nr doc-reg-Ql -1
-. nr doc-reg-Ql1 -1
-. \}
-. ds doc-arg1 Li
-. nr doc-type1 1
-. ds doc-space1
-. nr doc-arg-limit +1
-. \}
-.
-. ds doc-quote-left "\*[doc-left-singlequote]
-. ds doc-quote-right "\*[doc-right-singlequote]
-. doc-enclose-string
-. \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/contrib/groff/tmac/doc-nroff b/contrib/groff/tmac/doc-nroff
deleted file mode 100644
index eabb305f5b69..000000000000
--- a/contrib/groff/tmac/doc-nroff
+++ /dev/null
@@ -1,275 +0,0 @@
-.\" Copyright (c) 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc-nroff 8.1 (Berkeley) 06/08/93
-.\"
-.\" %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=0 to have multiple pages instead of a single, very long page
-.
-.if !r cR .nr cR 1
-.
-.\" the following switch is ignored in nroff mode
-.
-.nr S 10
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]
-.ds doc-caption-font2 \f[R]
-.ds doc-Ad-font \f[I]
-.ds doc-Ar-font \f[I]
-.ds doc-Cm-font \f[B]
-.ds doc-Em-font \f[I]
-.ds doc-Er-font \f[R]
-.ds doc-Ev-font \f[R]
-.ds doc-Fa-font \f[I]
-.ds doc-Fd-font \f[B]
-.ds doc-Fl-font \f[B]
-.ds doc-Fn-font \f[B]
-.ds doc-Ft-font \f[I]
-.ds doc-Ic-font \f[B]
-.ds doc-Li-font \f[R]
-.ds doc-Me-font \f[B]
-.ds doc-Nm-font \f[B]
-.ds doc-No-font \f[R]
-.ds doc-Pa-font \f[I]
-.ds doc-Sh-font \f[B]
-.ds doc-Sy-font \f[B]
-.ds doc-Sx-font \f[I]
-.ds doc-Tn-font-shape \f[R]
-.ds doc-Tn-font-size
-.ds doc-Va-font \f[I]
-.ds doc-Xr-font \f[R]
-.
-.ds doc-left-parenthesis \f[R](\f[]
-.ds doc-right-parenthesis \f[R])\f[]
-.ds lp \f[R](\f[]
-.ds rp \f[R])\f[]
-.ds doc-left-bracket \f[R][\f[]
-.ds doc-right-bracket \f[R]]\f[]
-.
-.\" miscellaneous
-.nr doc-subheader-indent .5i
-.nr doc-paragraph-space 1v
-.
-.ec
-.nr doc-digit-width \w'\0\0'u
-.nr doc-fixed-width \w'0'
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS the space between header and body
-.
-.nr doc-header-space 0.5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS the space between body and footer
-.
-.nr doc-footer-space 0.5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS doc-display-vertical
-.
-.de doc-setup-page-layout
-. ie r LL \
-. ll \n[LL]u
-. el \
-. ll 78n
-.
-. ie r LT \
-. lt \n[LT]u
-. el \
-. lt 78n
-.
-. po 0i
-.
-. nr doc-display-vertical 1v
-. ad l
-. na
-..
-.
-.
-.ec
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.\" Unicode TTYs have all glyph forms; for other TTY character sets we need
-.\" character representations which are different from GNU troff's standard
-.\" forms.
-.ie '\*[.T]'utf8' \{\
-. ds Rq \[rq]
-. ds Lq \[lq]
-. ds ua \[ua]
-. ds Pi \[*p]
-. ds If \[if]
-.\}
-.el \{\
-. ds Rq ''
-. ds Lq ``
-. ds ua ^
-. ds Pi pi
-. ds If infinity
-.\}
-.
-.eo
-.
-.
-.\" NS doc-header-string global string
-.\" NS the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS doc-header-string
-.
-.de doc-setup-header
-. ds doc-header-string "\*[doc-document-title]
-. if !"\*[doc-section]"Null" \
-. as doc-header-string (\*[doc-section])
-.
-. ie \n[cR] \
-. doc-header
-. el \{\
-. wh 0 doc-header
-. wh -1.167i doc-footer
-. \}
-.
-. e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS doc-width
-.
-.de doc-get-width
-. nr doc-width \w\$1
-. ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-. ie (\n[doc-width] % \n[doc-fixed-width]) \
-. nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-. el \
-. nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-. \}
-. el \
-. nr doc-width 0
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS computes the width of an argument as a multiple of
-.\" NS `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS doc-width
-.
-.de doc-get-arg-width
-. nr doc-width \w\*[doc-arg\$1]
-. ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-. ie (\n[doc-width] % \n[doc-fixed-width]) \
-. nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-. el \
-. nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-. \}
-. el \
-. nr doc-width 0
-..
-.
-.
-.\" NS Ql user macro
-.\" NS quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \
-. ds doc-macro-name Ql
-. el \
-. tm Usage: .Ql argument ... (#\n[.c])
-. \}
-.
-. ds doc-quote-left "\*[doc-left-singlequote]
-. ds doc-quote-right "\*[doc-right-singlequote]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/contrib/groff/tmac/doc-old.tmac b/contrib/groff/tmac/doc-old.tmac
deleted file mode 100644
index 70eb4f5e249c..000000000000
--- a/contrib/groff/tmac/doc-old.tmac
+++ /dev/null
@@ -1,1856 +0,0 @@
-.\"
-.\" Copyright (c) 1990 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc-old.tmac 5.2 (Berkeley) 3/13/91
-.\" Slightly modified by jjc@jclark.com to work with groff as well.
-.\"
-.\" Assume nroff on crt's only if cR==1
-.if n .nr cR 1
-.\" STRING CONSTANTS
-.\" DITROFF
-.if t \{\
-.\" Address Style
-.ds aD \fI
-.\" Argument Reference Style
-.ds aR \f(CO
-.\" Interactive Command Modifier (flag)
-.ds cM \f(CB
-.\" Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\" Errno Style
-.ds eR \fC
-.\" Environment Variable Style
-.ds eV \fC
-.\" Command Line Flag Style
-.ds fL \f(CB
-.\" Header String Style
-.ds Hs \fR
-.\" Interactive Command Style
-.ds iC \f(CB
-.\" Literal Style
-.ds lI \fC
-.\" Left Parenthesis Style
-.ds lP \fR\|(\|\fP
-.\" Right Parenthesis Style
-.ds rP \fR\|)\|\fP
-.\" Options Open Bracket Style
-.ds lB \fR\^[\^\fP
-.\" Options Open Bracket Style
-.ds rB \fR\^]\fP
-.\" Name (subject of manpage) Style
-.ds nM \f(CB
-.\" Pathname Style
-.ds pA \fC
-.\" Accepted punctuation string for -mdoc syntax
-.ds Pu \fR[.,:;(\^)[\^]\fR]
-.\" Section Header Style
-.ds Sp \s12\fB
-.\" .ds sT \s-2\fR
-.\" Symbolic Emphasis (boldface)
-.ds sY \f(CB
-.\" Generic Variable Style
-.ds vA \fI
-.\" Volume Title Style
-.ds Vs \fR
-.\" Cross Reference STyle (man page only)
-.ds xR \fC
-.\" Math *
-.tr *\(**
-.\}
-.\" NROFF
-.if n \{\
-.\" Address Style
-.ds aD \fI
-.\" Argument Reference Style
-.ds aR \fI
-.\" Interactive Command Modifier (flag)
-.ds cM \fB
-.\" Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\" Errno Style
-.ds eR \fR
-.\" Environment Variable Style
-.ds eV \fR
-.\" Command Line Flag Style
-.ds fL \fB
-.\" Header String Style
-.ds Hs \fR
-.\" Interactive Command Style
-.ds iC \fB
-.\" Literal Style
-.ds lI \fR
-.\" Left Parenthesis Style
-.ds lP \fR\|(\fP
-.\" Right Parenthesis Style
-.ds rP \fR\|)\fP
-.\" Options Open Bracket Style
-.ds lB \fR\|[\|\fP
-.\" Options Open Bracket Style
-.ds rB \fR\|]\fP
-.\" Name (subject of manpage) Style
-.ds nM \fB
-.\" Pathname Style
-.ds pA \fI
-.\" Accepted punctuation string for -mdoc syntax
-.ds Pu [.,;:()[]]
-.\" Section Header Style
-.ds Sp \s12\fB
-.\" .ds sT \s-2\fR
-.\" .ds sT \s-2\fR
-.\" Symbol, Mode or Mask Style
-.ds sY \fB
-.\" Generic Variable Style
-.ds vA \fI
-.\" Volume Title Style
-.ds Vs \fR
-.\" Cross Reference Style (man page only)
-.ds xR \fR
-.\}
-.\" INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects
-.if t \{\
-. nr sI \w'\fC,'u*5
-. nr Ti \n(sIu
-.\}
-.if n \{\
-. nr sI .5i
-. nr Ti .5i
-.\}
-.\" Flags for macros names which are used only for .Ds
-.nr dI 6n
-.nr dC 1
-.nr dL 1
-.nr dR 1
-.\" INDENT WIDTHS (for Lists)
-.\" Width Needed for Address Tag (indented amount)
-.nr Ad 12n
-.\" Angle Quote Width
-.nr Aq 12n
-.\" Width Needed for Argument
-.nr Ar 12n
-.\" Width Needed for Column offset
-.nr Cl 15n
-.\" Width neeeded for Interactive Command Modifier
-.nr Cm 10n
-.\" Width Needed for Complex Expressions
-.nr Cx 20n
-.\" Indent Width Needed for Display (right and left margins)
-.nr Ds 6n
-.\" Double Quote Width
-.nr Dq 12n
-.\" tI is dependent on Ds and used by .Dp
-.nr tI \n(Dsu
-.\" Width Needed for Display
-.nr Em 10n
-.\" Width Needed for Errno Types
-.nr Er 15n
-.\" Width Needed for Environment Variables
-.nr Ev 15n
-.\" Width Needed for Example Indent
-.nr Ex 10n
-.\" Width Needed for Flag
-.nr Fl 10n
-.\" Width Needed for Function
-.nr Fn 16n
-.\" Width neeeded for Interactive Command Name
-.nr Ic 10n
-.\" Width Needed for Constant
-.nr Li 16n
-.\" Width Needed for Math Symbol ? not sure if needed
-.nr Ms 6n
-.\" Width Needed for Name
-.nr Nm 10n
-.\" Width Needed for Option Begin
-.nr Ob 14n
-.\" Width Needed for Option End
-.nr Oe 14n
-.\" Width Needed for Option (one line)
-.nr Op 14n
-.\" Width Needed for Pathname
-.nr Pa 32n
-.\" Parenthesis Quote Width
-.nr Pq 12n
-.\" Single Quote Width
-.nr Sq 12n
-.\" Width Needed for Symbols, Modes or Masks
-.nr Sy 6n
-.\" Width needed for default or unknown text width
-.nr Tx 22n
-.\" Width Needed for Generic Variable
-.nr Va 12n
-.\" Width Needed for Cross Reference, should the cross ref be annotated.
-.nr Xr 10n
-.\" PARAGRAPH SPACE
-.if t \{\
-. nr Pp .5v
-.\}
-.if n \{\
-. nr Pp 1v
-.\}
-.\" PAGE LAYOUT
-.\" .Li Tagged Paragraph Style - zero if break on oversized tag
-.\" one if add em space and continue filling line.
-.nr tP 0
-.\" Page Layout Macro
-.de pL
-.\" DITROFF
-.ie t \{\
-.\" Header Margin
-. nr Hm .5i
-.\" Footer Margin
-. nr Fm .5i
-.\" Line length
-. nr ll 5.5i
-.\" Line length
-. ll 5.5i
-.\" Title length
-. nr lt 5.5i
-.\" Title length
-. lt 5.5i
-.\" Page offset
-. nr po 1.56i
-.\" Page offset
-. po 1.56i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-. nr vV .5v
-.\" em space
-. ds tP \|\|\|\|\|\|
-.\}
-.el \{\
-.\" Line length
-. nr ll 78n
-. ll 78n
-.\" Title length
-. nr lt 78n
-.\" Title length
-. lt 78n
-.\" Page offset
-. nr po 0i
-.\" Page offset
-. po 0i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-. nr vV 1v
-.\" em space
-. ds tP \0\0
-.\" Test for crt
-. ie \\n(cR .nr Hm 0
-. el .nr Hm .5i
-.\" Footer Margin
-. nr Fm .5i
-.\}
-..
-.\" Adjustment mode
-.if n \{\
-.ad l
-.na
-..
-.\}
-.\" PREDEFINED STRINGS
-.if t \{\
-. ds <= \(<=
-. ds >= \(>=
-. ds Lq \&``
-. ds Rq \&''
-. ds ua \(ua
-. ds aa \(aa
-. ds ga \(ga
-. ds sR \(aa
-. ds sL \(ga
-.\}
-.if n \{\
-. ds <= \&<\&=
-. ds >= \&>\&=
-. ds Rq ''
-. ds Lq ``
-. ds ua ^
-. ds aa '
-. ds ga `
-. ds sL `
-. ds sR '
-.\}
-.\" Note: The distances from the bottom or top of the page are set
-.\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff
-.\" bottoms, and top is 0.
-.\"
-.\" .Dt Document/manpage_title section/chapter volume
-.\" The \{ and \} is necessary as roff doesn't nest if-elses
-.\" properly, especially with .ds.
-.\" TODO: separate Dt into Dt, Ch and Vt for supp docs.
-.de Dt
-.ds dT UNTITLED
-.ds vT Local
-.ds cH Null
-.\" Volume and Section Number or Chapter Number
-.if !"\\$1"" .ds dT \\$1
-.if !"\\$2"" \{\
-. ds cH \\$2
-. if "\\$3"" \{\
-. \" Volume Title if none given
-. if \\$2>=1 .if \\$2<=8 \{\
-. ds vT UNIX Reference Manual
-. if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
-. if "\\$2"8" .ds vT UNIX System Manager's Manual
-. \}
-. if "\\$2"unass" .ds vT DRAFT
-. if "\\$2"draft" .ds vT DRAFT
-. if "\\$2"paper" .ds vT Null
-. \}
-.\}
-.if !"\\$3"" \{\
-. \" Volume Title if given
-. if "\\$3"USD" .ds vT UNIX User's Supplementary Documents
-. if "\\$3"PS1" .ds vT UNIX Programmers's Supplementary Documents
-. if "\\$3"AMD" .ds vT UNIX Ancestral Manual Documents
-. if "\\$3"SMM" .ds vT UNIX System Manager's Manual
-. if "\\$3"URM" .ds vT UNIX Reference Manual
-. if "\\$3"PRM" .ds vT UNIX Programmers's Manual
-. if "\\$3"IND" .ds vT UNIX Manual Master Index
-. if "\\$3"CON" .ds vT UNIX Contributed Software Manual
-. if "\\$3"IMP" .ds vT UNIX Implementation Notes
-. if "\\$3"HOW" .ds vT UNIX How Pocket Manual
-. if "\\$3"LOCAL" .ds vT UNIX Local Manual
-. if "\\*(vT"Local" .ds vT \\$3
-.\}
-..
-.\"
-.\" .Os Operating System/Standard and Release or Version Number
-.\"
-.de Os
-.ds oS Null
-.if "\\$1"" \{\
-. ds oS \fIBSD Experimental\fP
-.\" . ds oS (\fIBag o' Bits\fP)
-.\}
-.if "\\$2"" \{\
-. ds o1 Non-Null
-.\}
-.if "\\$1"ATT" \{\
-. ds oS AT&T
-. if "\\$2"" .as oS \0UNIX
-. if "\\$2"7th" .as oS \07th Edition
-. if "\\$2"7" .as oS \07th Edition
-. if "\\$2"III" .as oS \0System III
-. if "\\$2"3" .as oS \0System III
-. if "\\$2"V" .as oS \0System V
-. if "\\$2"V.2" .as oS \0System V Release 2
-. if "\\$2"V.3" .as oS \0System V Release 3
-. if "\\$2"V.4" .as oS \0System V Release 4
-.\}
-.if "\\$1"BSD" \{\
-. if "\\$2"3" .ds oS 3rd Berkeley Distribution
-. if "\\$2"4" .ds oS 4th Berkeley Distribution
-. if "\\$2"4.1" .ds oS 4.1 Berkeley Distribution
-. if "\\$2"4.2" .ds oS 4.2 Berkeley Distribution
-. if "\\$2"4.3" .ds oS 4.3 Berkeley Distribution
-. if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution
-.\}
-.if "\\*(oS"Null" .ds oS \\$1
-.if "\\*(o1"Non-Null" .as oS \0\\$2
-.rm o1
-..
-.\"
-.\" Standards
-.\"
-.\" .de St
-.\" .ds sT Null
-.\" .if "\\$1"POSIX" \{\
-.\" . ds sT IEEE Standard POSIX
-.\" . if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ANSI" \{\
-.\" . ds sT ANSI Standard
-.\" . if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ISO" \{\
-.\" . ds sT ISO Standard
-.\" . if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\*(sT"Null" .ds sR \\$3
-.\" ..
-.\"
-.\" .de Gp
-.\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5
-.\" .el .ds gP Null
-.\" ..
-.\"
-.\"
-.de Dd
-.nr aa 0
-.ie \\n(.$>0 \{\
-. ie \\n(.$<4 \{\
-. ds dD \\$1 \\$2 \\$3
-. \}
-. el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977).
-.\}
-.el \{\
-. ds dD Epoch
-.\}
-..
-.\"
-.\" House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS
-.\" TODO: Try to get else's for efficiency
-.\" TODO: GET RID OF .wh -1.167i (its in v7)
-.\"
-.\"
-.de hK
-.nr % 1
-.ds hT \\*(dT
-.if !"\\*(cH"Null" \{\
-. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
-. el .as hT \\|(\\|\\*(cH\\|)
-.\}
-.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
-.if t \{\
-. wh 0 hM
-. wh -1.25i fM
-.\}
-.if n \{\
-. ie \\n(cR \{\
-. hM
-. wh -0v fM
-. \}
-. el \{\
-. wh 0 hM
-. wh -1.167i fM
-. \}
-.\}
-.if n \{\
-. if \\n(nl==0:\\n(nl==-1 'bp
-.\}
-.if t 'bp
-.em lM
-..
-.\" Header Macro
-.\"
-.de hM
-.ev 1
-.pL
-.if !\\n(cR 'sp \\n(Hmu
-.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@
-'sp \\n(Hmu
-.ev
-..
-.\"
-.de fM
-.ev 1
-.pL
-.if !\\n(cR \{\
-' sp \\n(Fmu
-. tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-' bp
-.\}
-.if \\n(cR \{\
-.\" . tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-.\" ' bp
-.\}
-.ev
-..
-.de lM
-.fl
-.if \\n(cR \{\
-. fM
-. pl \\n(nlu
-.\}
-..
-.de Pp
-.sp \\n(Ppu
-.ne 2
-.ns
-..
-.de Lp
-.Pp
-..
-.de LP
-.tm Not a \-mdoc command: .LP
-..
-.de PP
-.tm Not a \-mdoc command: .PP
-..
-.de pp
-.tm Not a \-mdoc command: .pp
-..
-.de Co
-.tm Not a \-mdoc command: .Co
-..
-.nr z. 1
-.nr z, 1
-.nr z: 1
-.nr z; 1
-.nr z) 1
-.nr z( 1
-.nr z[ 1
-.nr z] 1
-.\" This is disgusting, troff not parse if stmt properly
-.nr z1 0
-.nr z2 0
-.nr z3 0
-.nr z4 0
-.nr z5 0
-.nr z6 0
-.nr z7 0
-.nr z8 0
-.nr z9 0
-.nr z0 0
-.nr z# 0
-.\"
-.de Ad
-.ie \\n(.$==0 \{\
-. tm Usage: .Ad address [...] \\*(Pu
-.\}
-.el \{\
-. ds sV \\*(aD
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.\" Command Line Argument Macro
-.\"
-.de Ar
-.ie \\n(.$==0 \{\
-. ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|]
-. el \&[\|\\*(aRfile\ ...\fP\|]
-.\}
-.el \{\
-. ds sV \\*(aR
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Em
-.ie \\n(.$==0 \{\
-. tm Usage: .Em text ... \\*(Pu
-.\}
-.el \{\
-. ds sV \\*(eM
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Er
-.ie \\n(.$==0 \{\
-. tm Usage: .Er ERRNOTYPE ... \\*(Pu
-. \}
-.el \{\
-. ds sV \\*(eR
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Ev
-.ie \\n(.$==0 \{\
-. tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu
-. \}
-.el \{\
-. ds sV \\*(eV
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.\" Flag Name Macro
-.\"
-.de Fl
-.ie \\n(.$==0 \{\
-. ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP
-. el \&\\*(fL\-\fP
-.\}
-.el \{\
-. nr rZ 0
-. sW \\$1
-. if (\\n(sW==1&\\n(.$==1) .rZ \\$1
-. ds sV \\*(fL
-. nr cF \\n(.f
-. ie \\n(rZ \{\
-. ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1
-. el \&\\*(sV\-\f\\n(cF\\$1
-. \}
-. el \{\
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-. \}
-.\}
-..
-.\" Interactive Commands Macro
-.\"
-.de Ic
-.ie \\n(.$==0 \{\
-. tm Usage: .Ic Interactive Commands(s) ... \\*(Pu
-.\}
-.el \{\
-. ds sV \\*(iC
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.\" Interactive Command Modifiers (flags)
-.\"
-.de Cm
-.ie \\n(.$==0 \{\
-. tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu
-.\}
-.el \{\
-. ds sV \\*(cM
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Li
-.ie \\n(.$==0 \{\
-. tm Usage: .Li literal ... \\*(Pu
-. \}
-.el \{\
-. ds sV \\*(lI
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\" If in nroff or any other case where the default font
-.\" is constant width, and literal means zilch, single quote instead.
-.ie n \{\
-.de Ql
-. ie \\n(.$==0 \{\
-. tm Usage: .Ql literal ... \\*(Pu
-. \}
-. el \{\
-. Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-..
-.\}
-.el \{\
-.de Ql
-. ie \\n(.$==0 \{\
-. tm Usage: .Ql literal ... \\*(Pu
-. \}
-. el \{\
-. Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-..
-.\}
-.\"
-.de Nm
-.ie \\n(.$==0 \{\
-. if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu
-. ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP
-. el \&\\*(nM\\*(n1\\$1\fP
-.\}
-.el \{\
-. ds sV \\*(nM
-. nr cF \\n(.f
-. if \\n(nS \{\
-. rs
-. in -\\n(iSu
-. ie \\n(nS>1 .br
-. el \{\
-. sW \\$1
-. nr iS ((\\n(sW+1)*\\n(fW)u
-. \}
-. in +\\n(iSu
-. ti -\\n(iSu
-. nr nS \\n(nS+1
-. \}
-. if "\\*(n1"" .ds n1 \\$1
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Pa
-.ie \\n(.$==0 \{\
-\&\\*(pA~\fP
-.\}
-.el \{\
-. ds sV \\*(pA
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Sy
-.ie \\n(.$==0 \{\
-. tm Usage: .Sy Symbolic Text ... \\*(Pu
-. \}
-.el \{\
-. ds sV \\*(sY
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Ms
-.ie \\n(.$==0 \{\
-. tm Usage: .Ms Math Symbol ... \\*(Pu
-. \}
-.el \{\
-. ds sV \\*(sY
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de Va
-.ie \\n(.$==0 \{\
-. tm Usage: .Va variable_name(s) ... \\*(Pu
-.\}
-.el \{\
-. ds sV \\*(vA
-. nr cF \\n(.f
-. ie "\\*(iM"" .ds f1 \&\\*(sV
-. el .as f1 \&\\*(sV
-. nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-.\}
-..
-.\"
-.de nB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-. rZ \\$1
-. ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-. el .as f1 \&\\$1
-. rZ \\$2
-. if !\\n(rZ \{\
-. ie !"\\*(iM""\{\
-.\" I surrender
-. if "\\*(iM"Tp" .as f1 \&\ \&
-. if "\\*(iM"Dp" .as f1 \&\ \&
-. if "\\*(iM"Op" .as f1 \&\ \&
-. if "\\*(iM"Cx" .as f1 \&\ \&
-. if "\\*(iM"Dq" .as f1 \& \&
-. if "\\*(iM"Sq" .as f1 \& \&
-. if "\\*(iM"Pq" .as f1 \& \&
-. if "\\*(iM"Aq" .as f1 \& \&
-. \}
-. el .as f1 \& \&
-. \}
-. nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-. rZ \\$1
-. ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-. el .as f1 \&\\$1\f\\n(cF
-. if "\\*(iM"" \{\&\\*(f1
-. ds f1
-. \}
-. hy
-.\}
-..
-.de fB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-. rZ \\$1
-. ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-. el \{\
-. ie "\\$1"-" .as f1 \&\-\-
-. el .as f1 \&\-\\$1
-. \}
-. rZ \\$2
-. if !\\n(rZ \{\
-. ie !"\\*(iM""\{\
-.\" I surrender
-. if "\\*(iM"Tp" .as f1 \&\ \&
-. if "\\*(iM"Dp" .as f1 \&\ \&
-. if "\\*(iM"Op" .as f1 \&\ \&
-. if "\\*(iM"Cx" .as f1 \&\ \&
-. if "\\*(iM"Dq" .as f1 \& \&
-. if "\\*(iM"Sq" .as f1 \& \&
-. if "\\*(iM"Pq" .as f1 \& \&
-. if "\\*(iM"Aq" .as f1 \& \&
-. \}
-. el .as f1 \& \&
-. \}
-. fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-. rZ \\$1
-. ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-. el \{\
-. ie "\\$1"-" .as f1 \&\-\-\f\\n(cF
-. el .as f1 \&\-\\$1\f\\n(cF
-. \}
-. if "\\*(iM"" \{\&\\*(f1
-. ds f1
-. \}
-. hy
-.\}
-..
-.\"
-.\" Single quoted Items
-.\" eF, sB g[0-9] and f2
-.de Sq
-.nr eF 0
-.ie \\n(.$==0 \{\
-. ie "\\*(iM"" \&\\*(sL\&\\*sR
-. el .as f1 \&\\*(sL\&\\*(sR
-.\}
-.el \{\
-. ie "\\*(iM"" \{\
-. ds f1 \&\\*(sL
-. ds iM Sq
-. \}
-. el .as f1 \&\\*(sL
-. sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8
-. el .as f1 \\*(g0
-. as f1 \\*(sR
-. if !"\\*(f2"" .as f1 \\*(f2
-. if "\\*(iM"Sq" \{\
-\&\\*(f1
-. ds f1
-. ds iM
-. \}
-. ds f2
-. rm g0 g1 g2 g3 g4 g5 g6 g7 g8 g9
-. nr eF 0
-.\}
-..
-.\"
-.\" Double quoted Items
-.de Dq
-.nr Ef 0
-.ie \\n(.$==0 \{\
-. ie "\\*(iM"" \&\\*(Lq\&\\*(Rq
-. el .as f1 \&\\*(Lq\&\\*(Rq
-.\}
-.el \{\
-. ie "\\*(iM"" \{\
-. ds f1 \&\\*(Lq
-. ds iM Dq
-. \}
-. el .as f1 \&\\*(Lq
-. Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8
-. el .as f1 \\*(k0
-. as f1 \\*(Rq
-. if !"\\*(f4"" .as f1 \\*(f4
-. if "\\*(iM"Dq" \{\
-\&\\*(f1
-. ds f1
-. ds iM
-. \}
-. ds f4
-. rm k0 k1 k2 k3 k4 k5 k6 k7 k8 k9
-. nr Ef 0
-.\}
-..
-.\"
-.\" Parenthesis quoted Items
-.de Pq
-.nr pQ 0
-.ie \\n(.$==0 \{\
-. ie "\\*(iM"" \&(\&)
-. el .as f1 \&(\&)
-.\}
-.el \{\
-. ie "\\*(iM"" \{\
-. ds f1 \&(
-. ds iM Pq
-. \}
-. el .as f1 \&(
-. pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8
-. el .as f1 \\*(y0
-. as f1 \&)
-. if !"\\*(f3"" .as f1 \\*(f3
-. if "\\*(iM"Pq" \{\
-\&\\*(f1
-. ds f1
-. ds iM
-. \}
-. ds f3
-. rm y0 y1 y2 y3 y4 y5 y6 y7 y8 y9
-. nr pQ 0
-.\}
-..
-.\" eF, sB g[0-9] and f2
-.de sB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro sB
-.el \{\
-. ie \\n(eF>=1 .nr eF \\n(eF+1
-. el \{\
-. mN \\$1
-. if \\n(mN .nr eF \\n(eF+1
-. \}
-. rZ \\$1
-. ie \\n(rZ .as f2 \\$1
-. el \{\
-. ie \\n(eF<1 .as g\\n(eF \\$1
-. el .as g\\n(eF \\$1
-. \}
-. if \\n(.$>1 \{\
-. rZ \\$2
-. if \\n(rZ==0 \{\
-. if \\n(eF<1 \{\
-. as g\\n(eF \& \&
-. \}
-. \}
-. sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.de Sb
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro Sb
-.el \{\
-. ie \\n(Ef>=1 .nr Ef \\n(Ef+1
-. el \{\
-. mN \\$1
-. if \\n(mN .nr Ef \\n(Ef+1
-. \}
-. rZ \\$1
-. ie \\n(rZ .as f4 \\$1
-. el \{\
-. ie \\n(Ef<1 .as k\\n(Ef \\$1
-. el .as k\\n(Ef \\$1
-. \}
-. if \\n(.$>1 \{\
-. rZ \\$2
-. if \\n(rZ==0 \{\
-. if \\n(Ef<1 \{\
-. as k\\n(Ef \& \&
-. \}
-. \}
-. Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.de pB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro pB
-.el \{\
-. ie \\n(pQ>=1 .nr pQ \\n(pQ+1
-. el \{\
-. mN \\$1
-. if \\n(mN .nr pQ \\n(pQ+1
-. \}
-. rZ \\$1
-. ie \\n(rZ .as f3 \\$1
-. el \{\
-. ie \\n(pQ<1 .as y\\n(pQ \\$1
-. el .as y\\n(pQ \\$1
-. \}
-. if \\n(.$>1 \{\
-. rZ \\$2
-. if \\n(rZ==0 \{\
-. if \\n(pQ<1 \{\
-. as y\\n(pQ \& \&
-. \}
-. \}
-. pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.de aQ
-.hy 0
-.ie \\n(.$==0 .tm Bad Syntax: .Aq
-.el \{\
-. ie \\n(aQ>=1 .nr aQ \\n(aQ+1
-. el \{\
-. mN \\$1
-. if \\n(mN .nr aQ \\n(aQ+1
-. \}
-. rZ \\$1
-. ie \\n(rZ .as aZ \\$1
-. el \{\
-. ie \\n(aQ<1 .as a\\n(aQ \\$1
-. el .as a\\n(aQ \\$1
-. \}
-. if \\n(.$>1 \{\
-. rZ \\$2
-. if \\n(rZ==0 \{\
-. if \\n(aQ<1 \{\
-. as a\\n(aQ \& \&
-. \}
-. \}
-. aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.\" Angle Bracket Quoted Items
-.de Aq
-.nr aQ 0
-.ie \\n(.$==0 \{\
-. ie "\\*(iM"" \&<\&>
-. el .as f1 \&<\&>
-.\}
-.el \{\
-. ie "\\*(iM"" \{\
-. ds f1 \&<
-. ds iM Aq
-. \}
-. el .as f1 \&<
-. aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-. ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8
-. el .as f1 \\*(a0
-. as f1 \&>
-. if !"\\*(aZ"" .as f1 \\*(aZ
-. if "\\*(iM"Aq" \{\
-\&\\*(f1
-. ds f1
-. ds iM
-. \}
-. ds aZ
-. rm a0 a1 a2 a3 a4 a5 a6 a7 a8
-. nr aQ 0
-.\}
-..
-.\" macro Name test, return macro register value if true
-.if \n(.g .ig
-.de mN
-.nr mN 0
-.sW \\$1
-.if \\n(sW==2 \{\
-. if \\n(\\$1 .nr mN \\n(\\$1
-.\}
-..
-.if !\n(.g .ig
-.de mN
-.nr mN 0
-.if \A'\\$1' \{\
-. sW \\$1
-. if \\n(sW==2 \{\
-. if \\n(\\$1 .nr mN \\n(\\$1
-. \}
-.\}
-..
-.\" Punctuation test (using z registers), return 1 if true
-.if \n(.g .ig
-.de rZ
-.nr rZ 0
-.sW \\$1
-.if \\n(sW==1 \{\
-. if \\n(z\\$1==1 \{\
-. nr rZ 1
-. \}
-.\}
-..
-.if !\n(.g .ig
-.de rZ
-.nr rZ 0
-.if \A'\\$1' \{\
-. sW \\$1
-. if \\n(sW==1 \{\
-. if \\n(z\\$1==1 \{\
-. nr rZ 1
-. \}
-. \}
-.\}
-..
-.\"
-.\" sW returns number of characters in a string
-.if t \{\
-.nr fW \w'\fC,'
-.de sW
-.nr sW \w'\fC\\$1'
-.\}
-.if n \{\
-.nr fW \w'0'
-.de sW
-.nr sW \w'\\$1'
-.\}
-.ie \\n(sW>=\\n(fW \{\
-. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
-. el .nr sW \\n(sW/\\n(fW
-.\}
-.el .nr sW 0
-..
-.\" Option Expression -
-.\" TODO - add line overflow check (right!)
-.nr eP 0
-.ds e1
-.nr oE 0
-.nr hP 0
-.ds hP
-.nr Ep 0
-.de Op
-.hy 0
-.if "\\*(iM"" \{\
-. ds iM Op
-. ds f1 \&
-.\}
-.as f1 \&\\*(lB
-.\" .tm Op: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.ie !"\\$1"Cx" .oE
-.el .nr oE \\n(oE+1
-..
-.\"
-.\" just for mike, with every bite of garlic in mind (oops, i mean burp).
-.\" dO: go dOwn an argument vector and test each argument to see if
-.\" a macro name or punctuation. stash in respective place along
-.\" with its arguments.
-.nr oO 0
-.nr oP 0
-.nr aO 0
-.de dO
-.mN \\$1
-.ie \\n(mN \{\
-. if \\n(oP \{\
-. if \\n(hP \{\
-. nr oZ 1
-. oZ
-. Oz
-. \}
-. if \\n(e1==1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-. \}
-. uO
-. if !(\\n(oO:\\n(aO) .as f1 \& \&
-. \}
-. ie "\\$1"Op" \{\
-. as f1 \&\\*(lB
-. nr aO \\n(aO+1
-. \}
-. el \{\
-. nr eP \\n(eP+1
-. ds e\\n(eP \\$1
-. nr e\\n(eP 1
-. \}
-.\}
-.el \{\
-.\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-. rZ \\$1
-. ie \\n(rZ \{\
-.\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP
-. nr hP \\n(hP+1
-. ds h\\n(hP \\$1
-. \}
-. el \{\
-.\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-. if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1
-. if \\n(eZ .as e\\n(eP \& \&
-. as e\\n(eP " \&\\$1
-.\" . ds e\\n(eP \&\\$1
-. nr eZ \\n(eZ+1
-. \}
-.\}
-.nr oP 1
-.ie \\n(.$>1 \{\
-. dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-. ie \\n(e1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-. \}
-. el \{\
-. as f1 \\*(e1
-. \}
-.\}
-..
-.\" handle old style arguments such as the arg -Idir
-.\" in adb, .Oo is a toggle.
-.de Oo
-.ie \\n(oO .nr oO 0
-.el .nr oO 1
-..
-.\" stash punctuation
-.de oZ
-.if \\n(hP>=\\n(oZ \{\
-. nr eP \\n(eP+1
-. ds e\\n(eP \\*(h\\n(oZ
-. nr oZ \\n(oZ+1
-. oZ
-.\}
-..
-.\" clean up punctuation vector
-.de Oz
-.if \\n(hP>0 \{\
-. rm h\\n(hP
-. nr hP \\n(hP-1
-. Oz
-.\}
-..
-.\" uO: go back up created vector cleaning it up along the way
-.de uO
-.if \\n(eP>0 \{\
-. rm e\\n(eP
-. rr e\\n(eP
-. nr eP \\n(eP-1
-. nr oP 0
-. nr eZ 0
-. uO
-.\}
-..
-.\" option end
-.de oE
-.uO
-.ie \\n(hP \{\
-. as f1 \\*(rB\\*(h1\\*(h2\\*(h3
-. Oz
-. nr oZ 0
-.\}
-.el \{\
-. as f1 \\*(rB
-.\}
-.ie "\\*(iM"Op" \{\
-. if \\n(aO .aO
-.if t \{\
-. if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br
-.\}
-.if n \{\
-. nr aa \w'\\*(f1'u
-.\" . nr qq \\n(.lu-\\n(.ku-\\n(.ou
-.\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq
-. if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br
-.\}
-\&\\*(f1
-. ds iM
-. ds f1
-. hy
-.\}
-.el .nr oE \\n(oE-1
-..
-.de aO
-.as f1 \\*(rB
-.nr aO \\n(aO-1
-.if \\n(aO >0 .aO
-..
-.\"
-.de Xr
-.if \\n(.$<=1 \{\
-. ie \\n(.$==1 \{\
-. if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP
-. if "\\*(iM"" \&\\*(xR\\$1\fP
-. \}
-. el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu
-.\}
-.if \\n(.$==2 \{\
-. rZ \\$2
-. ie "\\*(iM"" \{\
-. ie \\n(rZ \&\\*(xR\\$1\fP\\$2
-. el \&\\*(xR\\$1\fP(\\$2)
-. \}
-. el \{\
-. ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2
-. el .as f1 \&\\*(xR\\$1\fP(\\$2)
-. \}
-.\}
-.if \\n(.$>=3 \{\
-. rZ \\$2
-. ie \\n(rZ \{\
-. ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-. el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-. \}
-. el \{\
-. rZ \\$3
-. ie \\n(rZ \{\
-. if !"\\*(iM"" \{\
-. as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-. \}
-. if "\\*(iM"" \{\
-\&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-. \}
-. \}
-. el \{\
-. tm rZ = \\n(rZ the arg is \\$3
-. tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu
-. \}
-. \}
-.\}
-..
-.\"
-.\"
-.de Ex
-.tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.\" Display (one) Line of text.
-.de Dl
-.ie "\\*(iM"" \{\
-' ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-. in \\n(.iu+\\n(Dsu
-. mN \\$1
-. ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. el \{\
-. nr cF \\n(.f
-.\" Literal font is none specified
-\&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. ft \\n(cF
-. \}
-. in \\n(.iu-\\n(Dsu
-.\}
-.el \{\
-. mN \\$1
-. ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-. el \{\
-. nr cF \\n(.f
-. ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-. as f1 \&\f\\n(cF
-. \}
-.\}
-..
-.\"
-.\"
-.\" user set Tagged Paragraph Width (used in both Dp and Tp)
-.de Tw
-.ie \\n(.$==0 \{\
-. nr aa 0
-.\}
-.el \{\
-. mN \\$1
-. ie \\n(sW>2 \{\
-. nr tW (\\n(sW+3)*\\n(fWu)
-. \}
-. el \{\
-. ie \\n(mN .nr tW \\n(mN
-. el .nr tW \\$1
-. \}
-. nr tF 1
-.\}
-..
-.\"
-.de Dw
-.Tw \\$1
-..
-.\"
-.de Di
-.ie \\n(.$==0 \{\
-. nr tI \\n(Dsu
-.\}
-.el \{\
-. sW \\$1
-. if \\n(sW>=2 \{\
-. nr tI \\$1u
-. \}
-. if \\n(sW<2 \{\
-. if "\\$1"L" \{\
-. nr tI 0
-. \}
-. \}
-.\}
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr np 0
-.nr p1 0
-.ds s\n(np
-.\"
-.de Tp
-.ie "\\$1"" .pE p s np
-.el \{\
-. ds iM Tp
-. mN \\$1
-. ie \\n(tF \{\
-. ds tC Tw
-. nr tC 1
-. nr tF 0
-. \}
-. el \{\
-. if !"Tw"\\*(s\\n(np" \{\
-. ie \\n(mN \{\
-. ds tC \\$1
-. nr tW \\n(mN
-. \}
-. el \{\
-. ds tC Tx
-. nr tW \\n(Tx
-. \}
-. if !"\\*(tC"\\*(s\\n(np" .nr tC 1
-. \}
-. \}
-. sp \\n(vVu
-. if !\\n(cR .ne 2
-. if \\n(tC \{\
-. nr np \\n(np+1
-. nr p\\n(np \\n(tW
-. ds s\\n(np \\*(tC
-. nr tC 0
-. ds tC
-. in \\n(.iu+\\n(p\\n(npu
-. \}
-. ie \\n(mN \{\
-. ds f1
-. \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. if !"\\$1"Cx" .pT st p np
-. \}
-. el \{\
-. br
-. ev 1
-. fi
-. di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. br
-. di
-. ev
-. na
-. ds tD \\*(Td\\
-. pT di p np
-. \}
-.\}
-..
-.\"
-.\"
-.\" Complex Expression Macro
-.\"
-.\" TODO: add length across line boundary check (like Li)
-.de Cx
-.hy 0
-.ie \\n(.$==0 \{\
-. if "\\*(iM"Cx" \{\
-. ds iM
-. if \\n(oE .oE
-\&\\*(f1
-. ds f1
-. \}
-. if "\\*(iM"Tp" .pT st p np
-. if "\\*(iM"Dp" .pT st q mp
-.\}
-.el \{\
-. if "\\*(iM"" \{\
-. ds iM Cx
-. ds f1 \&
-. \}
-. mN \\$1
-.\" Here are the args: `\\$1' `\\$2' `\\$3' `\\$4'
-. ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. el \{\
-. as f1 \&\\$1
-. if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.\" Prefix string in default font to content specified string
-.de Pf
-.Cx \\$1
-.\\$2 \\$3 \\$4 \\$5
-.Cx
-..
-.\" Suffix string in default font to content specified string
-.de Sf
-.Cx \\$1 \\$2
-.Cx \\$3
-.Cx
-..
-.\" Simple Option Begin
-.de Ob
-.hy 0
-.ie "\\*(iM"" \{\
-. ev 2
-. fi
-. di oB
-.\}
-.el \{\
-.tm shouldn't be here
-. as f1 \&[
-. mN \\$1
-. ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. el \{\
-. as f1 \&\\$1
-. if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-.\}
-..
-.de Oc
-.as f1 \&\\$1
-.if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Oe
-.hy 0
-.ie "\\*(iM"" \{\
-. br
-. di
-. ev
-. ds bO \\*(oB\\
-\&[\\*(bO\&]
-.\}
-.el \{\
-. as f1 \&]
-.\}
-..
-.\" White space for Cx
-.de Ws
-.Cx \&\ \&
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr mp 0
-.nr q1 0
-.ds r\n(np
-.\"
-.\" Complex Dp tag
-.de Dc
-.Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Complex Tp tag
-.de Tc
-.Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Tag with a flag and an argument with a space
-.de Ta
-.if "\\$2"" \{\
-. Tp Fl \\$1
-.\}
-.el \{\
-. Tp Fl \\$1
-. Cx \&\ \&
-. Ar \\$2 \\$3
-. Cx
-.\}
-..
-.de Da
-.Dp Cx Fl \\$1
-.Ws
-.Ar \\$2 \\$3
-.Cx
-..
-.de To
-.Tp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.de Do
-.Dp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.\" Blended tag toggle
-.de Bt
-.ie \\n(tP==0 .nr tP 1
-.el .nr tP 0
-..
-.\" Bullet paragraph
-.de Bu
-.Tp Sy \&\(bu
-..
-.\" Display tagged paragraph
-.de Dp
-.ie "\\$1"" \{\
-. pE q r mp
-. sp \\n(vVu
-.\}
-.el \{\
-. ds iM Dp
-. mN \\$1
-. ie \\n(tF \{\
-. ds tC Tw
-. nr tC 1
-. nr tF 0
-. \}
-. el \{\
-. if !"Tw"\\*(r\\n(mp" \{\
-. ie \\n(mN \{\
-. ds tC \\$1
-. nr tW \\n(mN
-. \}
-. el \{\
-. ds tC Tx
-. nr tW \\n(Tx
-. \}
-. if !"\\*(tC"\\*(r\\n(mp" .nr tC 1
-. \}
-. \}
-. if !\\n(cR .ne 2
-. if \\n(tC \{\
-. nr mp \\n(mp+1
-. nr q\\n(mp \\n(tW
-. ds r\\n(mp \\*(tC
-. nr tC 0
-. ds tC
-. ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu
-. el \{\
-. nr i\\n(mp \\n(tIu
-. nr tI \\n(Dsu
-. \}
-. in \\n(.iu+\\n(i\\n(mpu
-. sp \\n(vVu
-. in \\n(.iu+\\n(\\q\\n(mpu
-. \}
-. ie \\n(mN \{\
-. \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. if !"\\$1"Cx" .pT st q mp
-. \}
-. el \{\
-. br
-. ev 1
-. fi
-. di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. br
-. di
-. ev
-. na
-. ds tD \\*(Td\\
-. pT di q mp
-. \}
-.\}
-..
-.\"
-.\" .pE number_stack string_stack counter
-.de pE
-.ie "\\$3"mp" \{\
-. in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu)
-. rr i\\n(mp
-.\}
-.el .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.\" .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp
-.rr \\$1\\n(\\$3
-.rm \\$2\\n(\\$3
-.nr \\$3 \\n(\\$3-1
-.ds iM
-..
-.\"
-.\" .pT [st or di] number_stack counter
-.de pT
-.ie "\\$1"st" \{\
-. nr bb \\n(\\$2\\n(\\$3u
-. ti -\\n(bbu
-. ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP
-. if \\n(tP==0 .br
-. \}
-. el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c
-.\}
-.el \{\
-. ti -\\n(\\$2\\n(\\$3u
-. ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP
-. if !\\n(tP .br
-. \}
-. el \\*(tD\h'|\\n(\\$2\\n(\\$3u'\c
-. if t 'ad
-.\}
-. ds iM
-. ds f1
-'fi
-..
-.\"
-.\" The new SH
-.\"
-.de Sh
-.\" set Sh state off, check for list state before calling indent (.In)
-.nr nS 0
-.nr sE 0
-.ie "\\$1"NAME" \{\
-.\" name state on, housekeep (headers & footers)
-. hK
-' in 0
-.\}
-.el \{\
-. if "\\$1"SYNOPSIS" .nr nS 1
-. in 0
-.\}
-.pL
-'sp
-.ns
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 3
-'fi
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.in \\n(.iu+\\n(Tiu
-.if "\\$1"SEE" .nr sE 1
-.ns
-..
-.\"
-.\" Nd minus sign for an en dash used in .Sh Name
-.de Nd
-\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Ss
-.sp
-.ti -.25i
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 2
-.br
-..
-.\" .if "\\$1"Ss" .in \\n(.iu+\\n(sIu
-.\"..
-.\"
-.\"
-.\" Column Macro
-.\"
-.hy 0
-.de Cw
-.ie \\n(.$==0 \{\
-. br
-. in \\n(.iu-\\n(eWu
-. ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.\}
-.el \{\
-. Pp
-. if \\n(.$==1 \{\
-. ta \w'\\$1 'u
-. nr eW \w'\\$1 'u
-' in \\n(.iu+\\n(eWu
-. \}
-. if \\n(.$==2 \{\
-. ta \w'\\$1 'u +\w'\\$2 'u
-. nr eW \w'\\$1 'u+\w'\\$2 'u
-' in \\n(.iu+\\n(eWu
-. \}
-. if \\n(.$==3 \{\
-. ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u
-. nr eW \w'\\$1 'u+\w'\\$2 'u+\w'\\$3 'u
-' in \\n(.iu+\\n(eWu
-. \}
-. if \\n(.$==4 \{\
-. ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u
-. nr eW \w'\\$1 'u+\w'\\$2 'u+\w'\\$3 'u +\w'\\$4 'u
-' in \\n(.iu+\\n(eWu
-. \}
-. if \\n(.$==5 \{\
-.ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u +\w'\\$5 'u
-.nr eW \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u +\w'\\$5 'u
-' in \\n(.iu+\\n(eWu
-. \}
-.\}
-..
-.de Cl
-.ti -\\n(eWu
-.mN \\$1
-.ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.nr dQ 0
-.de Ds
-.ie !"\\$1"" \{\
-. mN d\\$1
-. if \\n(mN \{\
-. nr dQ \\n(dQ+1
-. d\\$1
-. \}
-.\}
-.el .br
-.nf
-..
-.de Df
-.ie !"\\$1"" \{\
-. mN d\\$1
-. if \\n(mN \{\
-. nr dQ \\n(dQ+1
-. d\\$1
-. \}
-.\}
-.el .br
-..
-.de Dn
-\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.nf
-..
-.de dI
-.nr d\\n(dQ \\n(dIu
-.in \\n(.iu+\\n(dIu
-..
-.de dC
-.nr d\\n(dQ (\\n(.l-\\n(.i)/4u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dR
-.nr d\\n(dQ (\\n(.l/3)u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dL
-.nr aa 0
-..
-.de De
-.br
-.if \\n(d\\n(dQ \{\
-. in \\n(.iu-\\n(d\\n(dQu
-. rr d\\n(dQ
-. nr dQ \\n(dQ-1
-.\}
-.fi
-..
-.\"
-.de Fn
-.ie \\n(.$==0 \{\
-. tm Usage: .Fn function_name function_arg(s) ... \\*(Pu
-.\}
-.el \{\
-. nr cF \\n(.f
-. ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP
-. el \{\
-. ds f1 \\*(nM\\$1\fP\\*(lP
-. nr aa 0
-. rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-. \}
-. if "\\*(iM"" \{\\&\\*(f1
-. ds f1
-. \}
-.\}
-..
-.\"
-.de rC
-.rZ \\$1
-.ie \\n(rZ \{\
-. as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7
-.\}
-.el \{\
-. ie \\n(aa .as f1 \fP, \\*(aR\\$1
-. el .as f1 \\*(aR\\$1
-. nr aa 1
-. ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-. el .as f1 \fP\\*(rP\fP
-.\}
-..
diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms
deleted file mode 100644
index 84f2a4f65a86..000000000000
--- a/contrib/groff/tmac/doc-syms
+++ /dev/null
@@ -1,877 +0,0 @@
-.\" Copyright (c) 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc-syms 8.1 (Berkeley) 06/08/93
-.\"
-.\" %beginstrip%
-.
-.
-.eo
-.
-.\" NS Ux user macro
-.\" NS print UNIX
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Ux
-.\" NS
-.\" NS width register `Ux' defined in doc-common
-.
-.de Ux
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Ux \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Ux
-. doc-parse-args \$@
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] \*[doc-Tn-font-size]UNIX\*[doc-str-Ux]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Bx user macro
-.\" NS print BSD (fix smaller nroff version)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Bx
-.\" NS doc-str-Bx1
-.\" NS doc-str-Bx-XXX
-.\" NS
-.\" NS width register `Bx' defined in doc-common
-.
-.ds doc-str-Bx-Reno \-Reno
-.ds doc-str-Bx-reno \-Reno
-.ds doc-str-Bx-Tahoe \-Tahoe
-.ds doc-str-Bx-tahoe \-Tahoe
-.ds doc-str-Bx-Lite \-Lite
-.ds doc-str-Bx-lite \-Lite
-.ds doc-str-Bx-Lite2 \-Lite2
-.ds doc-str-Bx-lite2 \-Lite2
-.
-.de Bx
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Bx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Bx1 \*[doc-Tn-font-size]BSD\*[doc-str-Bx]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Bx
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie "\*[doc-arg\n[doc-arg-ptr]]"-alpha" \
-. as doc-str-Bx1 " (currently in alpha test)
-. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-beta" \
-. as doc-str-Bx1 " (currently in beta test)
-. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-devel" \
-. as doc-str-Bx1 " (currently under development)
-. el \{\
-. ds doc-str-Bx1 \&\*[doc-arg\n[doc-arg-ptr]]\^\*[doc-Tn-font-size]
-. as doc-str-Bx1 BSD\*[doc-str-Bx]
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie d doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]] \
-. as doc-str-Bx1 "\*[doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]]]
-. el \
-. nr doc-arg-ptr -1
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}\}\}\}\}
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bx1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Ud user macro (not parsed, not callable)
-.\" NS print "currently under development" (HISTORY section)
-.\" NS
-.\" NS width register `Ud' defined in doc-common
-.
-.de Ud
-. nop \&currently under development.
-..
-.
-.
-.\" NS At user macro
-.\" NS print AT&T UNIX
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-At
-.\" NS doc-str-At1
-.\" NS doc-str-At-XXX
-.\" NS
-.\" NS width register `At' defined in doc-common
-.
-.ds doc-str-At-32v \&Version\~32V
-.as doc-str-At-32v " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v1 \&Version\~1
-.as doc-str-At-v1 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v2 \&Version\~2
-.as doc-str-At-v2 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v3 \&Version\~3
-.as doc-str-At-v3 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v4 \&Version\~4
-.as doc-str-At-v4 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v5 \&Version\~5
-.as doc-str-At-v5 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v6 \&Version\~6
-.as doc-str-At-v6 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v7 \&Version\~7
-.as doc-str-At-v7 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-V \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V
-.as doc-str-At-V " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1
-.as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2
-.as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3
-.as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4
-.as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.
-.de At
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-At \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-At1 \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name At
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-. ie d doc-str-At-\*[doc-arg\n[doc-arg-ptr]] \
-. ds doc-str-At1 "\*[doc-str-At-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc mdoc warning: .At: Unknown AT&T UNIX version
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-. nr doc-arg-ptr -1
-. \}\}
-. el \
-. nr doc-arg-ptr -1
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-At1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Dx user macro
-.\" NS print DragonFly
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Dx
-.\" NS doc-str-Dx1
-.\" NS
-.\" NS width register `Dx' defined in doc-common
-.
-.\" we use the doc-operating-system-DragonFly-* strings defined in doc-common
-.
-.de Dx
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Dx
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-. ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \
-. as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc mdoc warning: .Dx: Unknown DragonFly version
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-. as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}\}
-. el \
-. as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Fx user macro
-.\" NS print FreeBSD
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Fx
-.\" NS doc-str-Fx1
-.\" NS
-.\" NS width register `Fx' defined in doc-common
-.
-.\" we use the doc-operating-system-FreeBSD-* strings defined in doc-common
-.
-.de Fx
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Fx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Fx1 \*[doc-Tn-font-size]\%FreeBSD\*[doc-str-Fx]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Fx
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-. ie d doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]] \
-. as doc-str-Fx1 \~\*[doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc mdoc warning: .Fx: Unknown FreeBSD version
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-. as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}\}
-. el \
-. as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Fx1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Nx user macro
-.\" NS print NetBSD
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Nx
-.\" NS doc-str-Nx1
-.\" NS
-.\" NS width register `Nx' defined in doc-common
-.
-.\" we use the doc-operating-system-NetBSD-* strings defined in doc-common
-.
-.de Nx
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Nx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Nx1 \*[doc-Tn-font-size]\%N\s[\n[doc-curr-size]u]et
-. as doc-str-Nx1 \*[doc-Tn-font-size]BSD\*[doc-str-Nx]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Nx
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-. ie d doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]] \
-. as doc-str-Nx1 \~\*[doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc mdoc warning: .Nx: Unknown NetBSD version
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-. as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}\}
-. el \
-. as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Nx1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Ox user macro
-.\" NS print OpenBSD
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Ox
-.\" NS doc-str-Ox1
-.\" NS
-.\" NS width register `Ox' defined in doc-common
-.
-.de Ox
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Ox \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Ox1 \*[doc-Tn-font-size]\%OpenBSD\*[doc-str-Ox]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Ox
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-. as doc-str-Ox1 \~\*[doc-arg\n[doc-arg-ptr]]
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ox1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" NS Bsx user macro
-.\" NS print BSD/OS
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Bsx
-.\" NS doc-str-Bsx1
-.\" NS
-.\" NS width register `Bsx' defined in doc-common
-.
-.de Bsx
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Bsx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. \" default value if no argument
-. ds doc-str-Bsx1 \*[doc-Tn-font-size]BSD/OS\*[doc-str-Bsx]
-.
-. if !\n[doc-arg-limit] \
-. if \n[.$] \{\
-. ds doc-macro-name Bsx
-. doc-parse-args \$@
-. \}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-. as doc-str-Bsx1 \~\*[doc-arg\n[doc-arg-ptr]]
-. el \
-. nr doc-arg-ptr -1
-. \}
-.
-. \" replace current argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bsx1]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. doc-print-recursive
-..
-.
-.
-.\" The Bt macro should go away now
-.
-.\" NS Bt user macro (not parsed, not callable)
-.\" NS print "is currently in beta test." (HISTORY section)
-.\" NS
-.\" NS width register `Bt' defined in doc-common
-.
-.de Bt
-. nop \&is currently in beta test.
-..
-.
-.
-.\" NS Px user macro
-.\" NS print POSIX
-.
-.ds Px \*[doc-Tn-font-size]\%POSIX
-.
-.
-.\" NS Ai user macro
-.\" NS print ANSI
-.
-.ds Ai \*[doc-Tn-font-size]\%ANSI
-.
-.
-.\" NS St user macro
-.\" NS standards (posix, ansi - formal standard names)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-reg-St
-.\" NS doc-str-St
-.\" NS doc-str-St1
-.\" NS doc-str-St-XXX
-.\" NS
-.\" NS width register `St' defined in doc-common
-.
-.\" ANSI/ISO C
-.ds doc-str-St--ansiC-89 \*[Ai] \*[doc-str-St]X\^3.159-1989
-.as doc-str-St--ansiC-89 " (\*[Lq]\)\*[Ai]\~C89\*[doc-str-St]\*[Rq])
-.als doc-str-St--ansiC doc-str-St--ansiC-89
-.ds doc-str-St--isoC \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1990
-.as doc-str-St--isoC " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St]\*[Rq])
-.als doc-str-St--isoC-90 doc-str-St--isoC
-.ds doc-str-St--isoC-2011 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:2011
-.as doc-str-St--isoC-2011 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^11\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-99 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999
-.as doc-str-St--isoC-99 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-amd1 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995
-.as doc-str-St--isoC-amd1 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq])
-.ds doc-str-St--isoC-tcor1 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994
-.as doc-str-St--isoC-tcor1 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq])
-.ds doc-str-St--isoC-tcor2 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995
-.as doc-str-St--isoC-tcor2 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq])
-.
-.\" POSIX Part 1: System API
-.ds doc-str-St--p1003.1 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1
-.as doc-str-St--p1003.1 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1b \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b
-.as doc-str-St--p1003.1b " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-88 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988
-.as doc-str-St--p1003.1-88 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-90 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990
-.as doc-str-St--p1003.1-90 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-90 doc-str-St--p1003.1-90
-.ds doc-str-St--p1003.1b-93 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b-1993
-.as doc-str-St--p1003.1b-93 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1c-95 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1c-1995
-.as doc-str-St--p1003.1c-95 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1i-95 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1i-1995
-.as doc-str-St--p1003.1i-95 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-96 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1996
-.as doc-str-St--p1003.1-96 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-96 doc-str-St--p1003.1-96
-.ds doc-str-St--p1003.1g-2000 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1g-2000
-.as doc-str-St--p1003.1g-2000 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2001 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2001
-.as doc-str-St--p1003.1-2001 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2004 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2004
-.as doc-str-St--p1003.1-2004 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2008 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2008
-.as doc-str-St--p1003.1-2008 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.
-.\" POSIX Part 2: Shell and Utilities
-.ds doc-str-St--p1003.2 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2
-.as doc-str-St--p1003.2 " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2-92 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2-1992
-.as doc-str-St--p1003.2-92 " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2a-92 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2a-1992
-.as doc-str-St--p1003.2a-92 " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--iso9945-2-93 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-2:1993
-.as doc-str-St--iso9945-2-93 " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.
-.\" X/Open
-.ds doc-str-St--susv2 Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv2 " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq])
-.ds doc-str-St--susv3 Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv3 " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq])
-.ds doc-str-St--susv4 Version\~4 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv4 " (\*[Lq]\*[doc-Tn-font-size]SUSv4\*[doc-str-St]\*[Rq])
-.ds doc-str-St--svid4 System\~V Interface Definition, Fourth Edition
-.as doc-str-St--svid4 " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xbd5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Base Definitions Issue\~5
-.as doc-str-St--xbd5 " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcu5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Commands and Utilities Issue\~5
-.as doc-str-St--xcu5 " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcurses4.2 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Curses Issue\~4, Version\~2
-.as doc-str-St--xcurses4.2 " (\*[Lq]\*[doc-Tn-font-size]XCURSES\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xns5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5
-.as doc-str-St--xns5 " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xns5.2 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5.2
-.as doc-str-St--xns5.2 " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5.2\*[Rq])
-.ds doc-str-St--xpg3 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~3
-.as doc-str-St--xpg3 " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^3\*[Rq])
-.ds doc-str-St--xpg4 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4
-.as doc-str-St--xpg4 " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xpg4.2 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4, Version\~2
-.as doc-str-St--xpg4.2 " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xsh5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interfaces and Headers Issue\~5
-.as doc-str-St--xsh5 " (\*[Lq]\*[doc-Tn-font-size]XSH\*[doc-str-St]\^5\*[Rq])
-.
-.\" Miscellaneous
-.ds doc-str-St--ieee754 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985
-.ds doc-str-St--ieee1275-94 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994
-.as doc-str-St--ieee1275-94 " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq])
-.ds doc-str-St--iso8802-3 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989
-.
-.de St
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name St
-. doc-parse-args \$@
-. \}
-. el \
-. doc-St-usage
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-St \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. ds doc-str-St1
-. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-. ie d doc-str-St-\*[doc-arg\n[doc-arg-ptr]] \
-. ds doc-str-St1 "\*[doc-str-St-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc "mdoc warning: .St: Unknown standard abbreviation
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-. tm1 " Please refer to the groff_mdoc(7) manpage for a
-. tm1 " list of available standard abbreviations.
-. \}\}
-. el \
-. doc-St-usage
-.
-. \" replacing argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-St1]
-.
-. doc-print-recursive
-. \}
-. el \{\
-. doc-St-usage
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS doc-St-usage macro
-.
-.de doc-St-usage
-. tm1 "Usage: .St standard (#\n[.c])
-. tm1 " Please refer to the groff_mdoc(7) manpage for a list of
-. tm1 " available standard abbreviations.
-..
-.
-.
-.\" NS Lb user macro
-.\" NS formal library names for LIBRARY sections
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-reg-Lb
-.\" NS doc-str-Lb
-.\" NS doc-str-Lb1
-.\" NS doc-str-Lb-XXX
-.\" NS
-.\" NS width register `Lb' defined in doc-common
-.
-.ds doc-str-Lb-libarchive Reading and Writing Streaming Archives Library (libarchive, \-larchive)
-.ds doc-str-Lb-libarm ARM Architecture Library (libarm, \-larm)
-.ds doc-str-Lb-libarm32 ARM32 Architecture Library (libarm32, \-larm32)
-.ds doc-str-Lb-libbluetooth Bluetooth Library (libbluetooth, \-lbluetooth)
-.ds doc-str-Lb-libbsm Basic Security Module Library (libbsm, \-lbsm)
-.ds doc-str-Lb-libc Standard C\~Library (libc, \-lc)
-.ds doc-str-Lb-libc_r Reentrant C\~Library (libc_r, \-lc_r)
-.ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar)
-.ds doc-str-Lb-libcam Common Access Method User Library (libcam, \-lcam)
-.ds doc-str-Lb-libcdk Curses Development Kit Library (libcdk, \-lcdk)
-.ds doc-str-Lb-libcipher FreeSec Crypt Library (libcipher, \-lcipher)
-.ds doc-str-Lb-libcompat Compatibility Library (libcompat, \-lcompat)
-.ds doc-str-Lb-libcrypt Crypt Library (libcrypt, \-lcrypt)
-.ds doc-str-Lb-libcurses Curses Library (libcurses, \-lcurses)
-.ds doc-str-Lb-libdevinfo Device and Resource Information Utility Library (libdevinfo, \-ldevinfo)
-.ds doc-str-Lb-libdevstat Device Statistics Library (libdevstat, \-ldevstat)
-.ds doc-str-Lb-libdisk Interface to Slice and Partition Labels Library (libdisk, \-ldisk)
-.ds doc-str-Lb-libdwarf DWARF Access Library (libdwarf, \-ldwarf)
-.ds doc-str-Lb-libedit Command Line Editor Library (libedit, \-ledit)
-.ds doc-str-Lb-libelf ELF Access Library (libelf, \-lelf)
-.ds doc-str-Lb-libevent Event Notification Library (libevent, \-levent)
-.ds doc-str-Lb-libfetch File Transfer Library for URLs (libfetch, \-lfetch)
-.ds doc-str-Lb-libform Curses Form Library (libform, \-lform)
-.ds doc-str-Lb-libgeom Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
-.ds doc-str-Lb-libi386 i386 Architecture Library (libi386, \-li386)
-.ds doc-str-Lb-libintl Internationalized Message Handling Library (libintl, \-lintl)
-.ds doc-str-Lb-libipsec IPsec Policy Control Library (libipsec, \-lipsec)
-.ds doc-str-Lb-libipx IPX Address Conversion Support Library (libipx, \-lipx)
-.ds doc-str-Lb-libiscsi iSCSI protocol library (libiscsi, \-liscsi)
-.ds doc-str-Lb-libjail Jail Library (libjail, \-ljail)
-.ds doc-str-Lb-libkiconv Kernel side iconv library (libkiconv, \-lkiconv)
-.ds doc-str-Lb-libkse N:M Threading Library (libkse, \-lkse)
-.ds doc-str-Lb-libkvm Kernel Data Access Library (libkvm, \-lkvm)
-.ds doc-str-Lb-libm Math Library (libm, \-lm)
-.ds doc-str-Lb-libm68k m68k Architecture Library (libm68k, \-lm68k)
-.ds doc-str-Lb-libmagic Magic Number Recognition Library (libmagic, \-lmagic)
-.ds doc-str-Lb-libmd Message Digest (MD4, MD5, etc.) Support Library (libmd, \-lmd)
-.ds doc-str-Lb-libmemstat Kernel Memory Allocator Statistics Library (libmemstat, \-lmemstat)
-.ds doc-str-Lb-libmenu Curses Menu Library (libmenu, \-lmenu)
-.ds doc-str-Lb-libmt Magnetic Tape Library (libmt, \-lmt)
-.ds doc-str-Lb-libnetgraph Netgraph User Library (libnetgraph, \-lnetgraph)
-.ds doc-str-Lb-libnetpgp Netpgp signing, verification, encryption and decryption (libnetpgp, \-lnetpgp)
-.ds doc-str-Lb-libossaudio OSS Audio Emulation Library (libossaudio, \-lossaudio)
-.ds doc-str-Lb-libpam Pluggable Authentication Module Library (libpam, \-lpam)
-.ds doc-str-Lb-libpcap Packet Capture Library (libpcap, \-lpcap)
-.ds doc-str-Lb-libpci PCI Bus Access Library (libpci, \-lpci)
-.ds doc-str-Lb-libpmc Performance Counters Library (libpmc, \-lpmc)
-.ds doc-str-Lb-libposix \*[Px] \*[doc-str-Lb]Compatibility Library (libposix, \-lposix)
-.ds doc-str-Lb-libprop Property Container Object Library (libprop, \-lprop)
-.ds doc-str-Lb-libpthread \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread)
-.ds doc-str-Lb-libpuffs puffs Convenience Library (libpuffs, \-lpuffs)
-.ds doc-str-Lb-librefuse File System in Userspace Convenience Library (librefuse, \-lrefuse)
-.ds doc-str-Lb-libresolv DNS Resolver Library (libresolv, \-lresolv)
-.ds doc-str-Lb-librpcsec_gss RPC GSS-API Authentication Library (librpcsec_gss, \-lrpcsec_gss)
-.ds doc-str-Lb-librpcsvc RPC Service Library (librpcsvc, \-lrpcsvc)
-.ds doc-str-Lb-librt \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt)
-.ds doc-str-Lb-libsdp Bluetooth Service Discovery Protocol User Library (libsdp, \-lsdp)
-.ds doc-str-Lb-libssp Buffer Overflow Protection Library (libssp, \-lssp)
-.ds doc-str-Lb-libSystem System Library (libSystem, \-lSystem)
-.ds doc-str-Lb-libtermcap Termcap Access Library (libtermcap, \-ltermcap)
-.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lterminfo)
-.ds doc-str-Lb-libthr 1:1 Threading Library (libthr, \-lthr)
-.ds doc-str-Lb-libufs UFS File System Access Library (libufs, \-lufs)
-.ds doc-str-Lb-libugidfw File System Firewall Interface Library (libugidfw, \-lugidfw)
-.ds doc-str-Lb-libulog User Login Record Library (libulog, \-lulog)
-.ds doc-str-Lb-libusbhid USB Human Interface Devices Library (libusbhid, \-lusbhid)
-.ds doc-str-Lb-libutil System Utilities Library (libutil, \-lutil)
-.ds doc-str-Lb-libvgl Video Graphics Library (libvgl, \-lvgl)
-.ds doc-str-Lb-libx86_64 x86_64 Architecture Library (libx86_64, \-lx86_64)
-.ds doc-str-Lb-libz Compression Library (libz, \-lz)
-.
-.de Lb
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Lb
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Lb library_name ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-str-Lb \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-. ie d doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]] \
-. ds doc-str-Lb1 "\*[doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]]]
-. el \{\
-. tmc "mdoc warning: .Lb: no description for library
-. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' available (#\n[.c])
-. ds doc-str-Lb1 library \*[Lq]\*[doc-arg\n[doc-arg-ptr]]\*[Rq]
-. \}
-.
-. \" replacing argument with result
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Lb1]
-.
-. if \n[doc-in-library-section] \
-. br
-. doc-print-recursive
-. if \n[doc-in-library-section] \
-. br
-. \}
-. el \{\
-. tm Usage: .Lb library_name ... (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/contrib/groff/tmac/doc.tmac b/contrib/groff/tmac/doc.tmac
deleted file mode 100644
index e434eaf62252..000000000000
--- a/contrib/groff/tmac/doc.tmac
+++ /dev/null
@@ -1,6597 +0,0 @@
-.\" Copyright (c) 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)doc 8.1 (Berkeley) 06/08/93
-.\"
-.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
-.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
-.\" `tmac.doc-common' would be too long); when using groff, the doc-* files
-.\" are loaded using the `mso' request.
-.\"
-.\" Modified by
-.\"
-.\" Werner LEMBERG <wl@gnu.org> and
-.\" Ruslan Ermilov <ru@freebsd.org>
-.\"
-.\" to make it more readable: using long names and many groff features,
-.\" updating and extending documentation, etc.
-.\"
-.\" %beginstrip%
-.
-.
-.if !\n(.g \
-. ab This version of mdoc can be run with GNU troff only!
-.
-.
-.do if d Dd .nx
-.
-.
-.cp 0
-.
-.
-.if (\n[.x]\n[.y] < 118) \
-. ab You need GNU troff version 1.18 or higher to run this version of mdoc!
-.
-.
-.\" Load start-up files
-.ie t \
-. mso mdoc/doc-ditroff
-.el \
-. mso mdoc/doc-nroff
-.
-.mso mdoc/doc-common
-.mso mdoc/doc-syms
-.
-.
-.eo
-.
-.
-.\" NS doc-macro-name global string
-.\" NS name of calling request (set in each user-requestable macro)
-.
-.ds doc-macro-name
-.als doc-arg0 doc-macro-name
-.
-.
-.\" NS doc-arg-limit global register
-.\" NS total number of arguments
-.
-.nr doc-arg-limit 0
-.
-.
-.\" NS doc-num-args global register
-.\" NS number of arguments to handle (must be set to \n[.$] prior to
-.\" NS `doc-parse-arg-vector' request)
-.
-.nr doc-num-args 0
-.
-.
-.\" NS doc-arg-ptr global register
-.\" NS argument pointer
-.
-.nr doc-arg-ptr 0
-.
-.
-.\" NS doc-argXXX global string
-.\" NS argument vector
-.\" NS
-.\" NS limit:
-.\" NS doc-arg-limit
-.
-.ds doc-arg1
-.
-.
-.\" NS doc-typeXXX global register
-.\" NS argument type vector (macro=1, string=2, punctuation suffix=3,
-.\" NS punctuation prefix=4)
-.\" NS
-.\" NS limit:
-.\" NS doc-arg-limit
-.
-.nr doc-type1 0
-.
-.
-.\" NS doc-spaceXXX global string
-.\" NS space vector
-.\" NS
-.\" NS limit:
-.\" NS doc-arg-limit
-.
-.ds doc-space1
-.
-.
-.\" NS doc-parse-args macro
-.\" NS parse arguments (recursively) (`.doc-parse-args arg ...')
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-spaceXXX
-.\" NS doc-typeXXX
-.\" NS doc-arg-ptr
-.\" NS doc-have-space
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dpa
-.\" NS doc-reg-dpa1
-.\" NS doc-str-dpa
-.
-.de doc-parse-args
-. if !\n[doc-arg-limit] \
-. doc-set-spacing-1
-.
-. nr doc-have-space 0
-.
-. if !\n[.$] \
-. return
-.
-. nr doc-arg-limit +1
-.
-. \" handle `|' and `...' specially
-. ie "\$1"|" \
-. ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-. el \{ .ie "\$1"..." \
-. ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-. el \
-. ds doc-arg\n[doc-arg-limit] "\$1
-. \}
-.
-. \" get argument type and set spacing
-. doc-get-arg-type* \n[doc-arg-limit]
-. nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-. doc-set-spacing-\n[doc-arg-type]
-.
-. \" check whether we have processed the last parameter
-. ie (\n[.$] == 1) \
-. nr doc-arg-ptr 0
-. el \{\
-. shift
-. doc-parse-args \$@
-. \}
-.
-. nh
-..
-.
-.
-.\" NS doc-parse-arg-vector macro
-.\" NS parse argument vector (recursive)
-.\" NS
-.\" NS cf. comments in doc-parse-args
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-num-args
-.\" NS doc-spaceXXX
-.\" NS doc-typeXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dpav
-.\" NS doc-reg-dpav1
-.\" NS doc-str-dpav
-.
-.de doc-parse-arg-vector
-. if !\n[doc-arg-limit] \
-. doc-set-spacing-1
-.
-. nr doc-arg-limit +1
-.
-. ie "\*[doc-arg\n[doc-arg-limit]]"|" \
-. ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-. el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
-. ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-. \}
-.
-. doc-get-arg-type* \n[doc-arg-limit]
-. nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-. doc-set-spacing-\n[doc-arg-type]
-.
-. ie (\n[doc-num-args] == 1) \{\
-. nr doc-arg-ptr 0
-. nr doc-num-args 0
-. \}
-. el \{\
-. nr doc-num-args -1
-. doc-parse-arg-vector
-. \}
-.
-. nh
-..
-.
-.
-.\" NS doc-parse-space-vector macro
-.\" NS parse space vector (recursive)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-num-args
-.\" NS doc-spaceXXX
-.
-.de doc-parse-space-vector
-. nr doc-arg-limit +1
-.
-. doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
-.
-. ie (\n[doc-num-args] == 1) \
-. nr doc-num-args 0
-. el \{\
-. nr doc-num-args -1
-. doc-parse-space-vector
-. \}
-..
-.
-.
-.\" NS doc-remaining-args macro
-.\" NS output remaining arguments as-is, separated by spaces (until
-.\" NS `doc-num-args' is exhausted)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-num-args
-.
-.de doc-remaining-args
-. nr doc-arg-ptr +1
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-. ie (\n[doc-num-args] == 1) \{\
-. nr doc-arg-ptr 0
-. nr doc-num-args 0
-. \}
-. el \{\
-. nop \)\*[doc-space]\c
-. nr doc-num-args -1
-. doc-remaining-args
-. \}
-..
-.
-.
-.\" NS doc-append-arg macro
-.\" NS append one argument to argument vector:
-.\" NS `.doc-append-arg [arg] [type]'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-argXXX
-.\" NS doc-typeXXX
-.
-.de doc-append-arg
-. nr doc-arg-limit +1
-. ds doc-arg\n[doc-arg-limit] "\$1
-. nr doc-type\n[doc-arg-limit] \$2
-. doc-set-spacing-\$2
-..
-.
-.
-.\" NS doc-print-and-reset macro
-.\" NS finish input line and clean up argument vectors
-.
-.de doc-print-and-reset
-. if \n[doc-space-mode] \
-. nop \)
-. doc-reset-args
-..
-.
-.
-.\" NS doc-reset-args macro
-.\" NS reset argument counters
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-arg-ptr
-.\" NS doc-have-slot
-.
-.de doc-reset-args
-. nr doc-arg-limit 0
-. nr doc-arg-ptr 0
-. nr doc-have-slot 0
-.
-. hy \n[doc-hyphen-flags]
-..
-.
-.
-.ec
-.
-.\" NS doc-curr-font global register
-.\" NS saved current font
-.
-.nr doc-curr-font \n[.f]
-.
-.
-.\" NS doc-curr-size global register
-.\" NS saved current font size
-.
-.nr doc-curr-size \n[.ps]
-.
-.eo
-.
-.
-.\" NS Fl user macro
-.\" NS handle flags (appends `-' and prints flags): `.Fl [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Fl (for communication with doc-flag-recursion)
-.\" NS
-.\" NS width register `Fl' set in doc-common
-.
-.de Fl
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Fl-font]\c
-.
-. if !\n[doc-arg-limit] \{\
-. ds doc-macro-name Fl
-. doc-parse-args \$@
-.
-. \" no arguments
-. if !\n[.$] \
-. nop \|\-\|\f[]\s[0]
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. \" last argument
-. nop \|\-\f[]\s[0]\c
-. doc-print-and-reset
-. \}
-. el \{\
-. ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-. nop \|\-\f[]\s[0]\c
-. \*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \{\
-. if (\n[doc-type\n[doc-arg-ptr]] == 3) \
-. nop \|\-\|\c
-.
-. nr doc-reg-Fl 1
-. doc-flag-recursion
-. \}\}
-..
-.
-.
-.\" NS doc-flag-recursion macro
-.\" NS `Fl' flag recursion routine (special handling)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dfr
-.\" NS doc-reg-dfr1
-.\" NS doc-str-dfr
-.
-.de doc-flag-recursion
-. nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
-. ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
-.
-. ie (\n[doc-reg-dfr1] == 1) \{\
-. nop \f[]\s[0]\c
-. \*[doc-str-dfr]
-. \}
-. el \{\
-. nr doc-reg-dfr \n[doc-arg-ptr]
-.
-. ie (\n[doc-reg-dfr1] == 2) \{\
-. \" handle vertical bar -- doc-reg-Fl is set for the first call of
-. \" doc-flag-recursion only; we need this to make `.Fl | ...' work
-. \" correctly
-. ie "\*[doc-str-dfr]"\*[Ba]" \{\
-. if \n[doc-reg-Fl] \
-. nop \|\-\*[doc-space]\c
-. nop \)\*[Ba]\c
-. \}
-. el \{\
-. ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
-. if \n[doc-reg-Fl] \
-. nop \|\-\*[doc-space]\c
-. nop \f[R]|\f[]\c
-. \}
-. el \{\
-. \" two consecutive hyphen characters?
-. ie "\*[doc-str-dfr]"-" \
-. nop \|\-\^\-\|\c
-. el \
-. nop \|\%\-\*[doc-str-dfr]\&\c
-. \}\}\}
-. el \{\
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-str-dfr]\f[]\s[0]\c
-. \}
-.
-. ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-. \" last argument
-. if (\n[doc-reg-dfr1] == 4) \
-. nop \|\-\c
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. doc-print-and-reset
-. \}
-. el \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
-. ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
-. nop \|\-\c
-. el \
-. nop \)\*[doc-space\n[doc-reg-dfr]]\c
-. \}
-. el \
-. nop \)\*[doc-space\n[doc-reg-dfr]]\c
-.
-. shift
-. nr doc-reg-Fl 0
-. doc-flag-recursion \$@
-. \}\}
-..
-.
-.
-.\" NS doc-print-recursive macro
-.\" NS general name recursion routine (print remaining arguments)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dpr
-.\" NS doc-reg-dpr1
-.\" NS doc-str-dpr
-.
-.de doc-print-recursive
-. nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
-. ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
-.
-. ie (\n[doc-reg-dpr1] == 1) \{\
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. \*[doc-str-dpr]
-. \}
-. el \{\
-. nr doc-reg-dpr \n[doc-arg-ptr]
-.
-. \" the `\%' prevents hyphenation on a dash (`-')
-. ie (\n[doc-reg-dpr1] == 2) \
-. nop \%\*[doc-str-dpr]\&\c
-. el \{\
-. \" punctuation character
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-str-dpr]\f[]\s[0]\c
-. \}
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. \" last argument
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. doc-print-and-reset
-. \}
-. el \{\
-. nop \)\*[doc-space\n[doc-reg-dpr]]\c
-. doc-print-recursive
-. \}\}
-..
-.
-.
-.\" NS doc-print-prefixes macro
-.\" NS print leading prefixes
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.
-.de doc-print-prefixes
-. while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
-. break
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-. nr doc-arg-ptr +1
-. \}
-..
-.
-.
-.\" NS doc-generic-macro macro
-.\" NS this is the skeleton for most simple macros
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.
-.de doc-generic-macro
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name \$0
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-. tmc mdoc warning: Using a macro as first argument
-. tm1 " cancels effect of .\$0 (#\n[.c])
-.
-. \" the right action here would be to reset the argument counters
-. \" and bail out -- unfortunately, a small number of manual pages
-. \" (less than 2% for FreeBSD which has been used for testing)
-. \" relied on the old behaviour (silently ignore this error),
-. \" so it is commented out
-.
-.\" doc-reset-args
-. \}
-.\" el \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-\$0-font]\c
-. doc-print-recursive
-.\" \}
-. \}
-. el \{\
-. tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Ar user macro
-.\" NS command line `argument' macro: `.Ar [args ...]'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS doc-str-Ar-default
-.\" NS
-.\" NS width register `Ar' set in doc-common
-.
-.ds doc-str-Ar-default "file\ .\|.\|.
-.
-.de Ar
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Ar-font]\c
-.
-. if !\n[doc-arg-limit] \{\
-. ds doc-macro-name Ar
-. doc-parse-args \$@
-.
-. \" no argument
-. if !\n[.$] \
-. nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
-. doc-print-and-reset
-. \}
-. el \{\
-. if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. \" replace previous argument (Ar) with default value
-. nr doc-arg-ptr -1
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. doc-parse-space-vector
-. \}
-. doc-print-recursive
-. \}
-..
-.
-.
-.\" NS Ad user macro
-.\" NS Addresses
-.\" NS
-.\" NS width register `Ad' set in doc-common
-.
-.als Ad doc-generic-macro
-.ds doc-Ad-usage address
-.
-.
-.\" NS doc-indent-synopsis global register
-.\" NS indentation in synopsis
-.
-.nr doc-indent-synopsis 0
-.
-.
-.\" NS doc-indent-synopsis-active global register (bool)
-.\" NS indentation in synopsis active
-.
-.nr doc-indent-synopsis-active 0
-.
-.
-.\" NS Cd user macro
-.\" NS config declaration (for section 4 SYNOPSIS)
-.\" NS
-.\" NS this function causes a break; it uses the `Nm' font
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-indent-synopsis
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Cd' set in doc-common
-.
-.de Cd
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Cd
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. ie \n[doc-in-synopsis-section] \{\
-. ie "\*[doc-macro-name]"Cd" \{\
-. br
-. if !\n[doc-indent-synopsis] \
-. nr doc-indent-synopsis \n[doc-display-indent]u
-. if !\n[doc-indent-synopsis-active] \
-. in +\n[doc-indent-synopsis]u
-. ti -\n[doc-indent-synopsis]u
-. nop \*[doc-Nm-font]\c
-. doc-print-recursive
-. if !\n[doc-indent-synopsis-active] \
-. in -\n[doc-indent-synopsis]u
-. \}
-. el \{\
-. nop \*[doc-Nm-font]\c
-. doc-print-recursive
-. \}\}
-. el \{\
-. nop \*[doc-Nm-font]\c
-. doc-print-recursive
-. \}\}
-. el \{\
-. tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Cm user macro
-.\" NS interactive command modifier (flag)
-.\" NS
-.\" NS width register `Cm' set in doc-common
-.
-.als Cm doc-generic-macro
-.ds doc-Cm-usage interactive_command_modifier
-.
-.
-.\" NS Dv user macro
-.\" NS defined variable
-.\" NS
-.\" NS this function uses the `Er' font
-.\" NS
-.\" NS width register `Dv' set in doc-common
-.
-.als Dv doc-generic-macro
-.ds doc-Dv-usage defined_variable
-.als doc-Dv-font doc-Er-font
-.
-.
-.\" NS Em user macro
-.\" NS emphasis
-.\" NS
-.\" NS width register `Em' set in doc-common
-.
-.als Em doc-generic-macro
-.ds doc-Em-usage text
-.
-.
-.\" NS Er user macro
-.\" NS errno type
-.\" NS
-.\" NS width register `Er' set in doc-common
-.
-.als Er doc-generic-macro
-.ds doc-Er-usage text
-.
-.
-.\" NS Ev user macro
-.\" NS environment variable
-.\" NS
-.\" NS width register `Ev' set in doc-common
-.
-.als Ev doc-generic-macro
-.ds doc-Ev-usage text
-.
-.
-.\" NS doc-have-decl global register (bool)
-.\" NS subroutine test (in synopsis only)
-.
-.nr doc-have-decl 0
-.
-.
-.\" NS doc-have-var global register (bool)
-.\" NS whether last type is a variable type
-.
-.nr doc-have-var 0
-.
-.
-.\" NS doc-do-func-decl macro
-.\" NS do something special while in SYNOPSIS
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-have-decl
-.\" NS doc-have-var
-.
-.de doc-do-func-decl
-. if \n[doc-in-synopsis-section] \{\
-. \" if a variable type was the last thing given, want vertical space
-. if \n[doc-have-var] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. \}
-. \" if a subroutine was the last thing given, want vertical space
-. if \n[doc-have-func] \{\
-. ie \n[doc-have-decl] \
-. br
-. el \
-. doc-paragraph
-. \}
-. nr doc-have-decl 1
-. \}
-.
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-..
-.
-.
-.\" NS Fd user macro
-.\" NS function declaration -- not callable
-.\" NS
-.\" NS this function causes a break
-.\" NS
-.\" NS width register `Fd' set in doc-common
-.
-.de Fd
-. ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
-. doc-do-func-decl
-. nop \*[doc-Fd-font]\$*
-. br
-. ft \n[doc-curr-font]
-. ps \n[doc-curr-size]u
-. \}
-. el \{\
-. tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS In user macro
-.\" NS #include statement in SYNOPSIS
-.\" NS <header.h> if not in SYNOPSIS
-.\" NS
-.\" NS this function causes a break; it uses the `Fd' font
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-indent-synopsis
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `In' set in doc-common
-.
-.de In
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name In
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .In include_file ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. ie \n[doc-in-synopsis-section] \{\
-. ie "\*[doc-macro-name]"In" \{\
-. doc-do-func-decl
-. nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
-. ft \n[doc-curr-font]
-. ps \n[doc-curr-size]u
-. br
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-print-recursive
-. el \
-. doc-reset-args
-. \}
-. el \{\
-. ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-. as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-. doc-print-recursive
-. \}\}
-. el \{\
-. ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-. as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-. doc-print-recursive
-. \}\}
-. el \{\
-. tm Usage: .In include_file ... (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Fr user macro
-.\" NS function return value
-.\" NS
-.\" NS this function uses the `Ar' font
-.\" NS
-.\" NS width register `Fr' set in doc-common
-.
-.als Fr doc-generic-macro
-.ds doc-Fr-usage function_return_value
-.als doc-Fr-font doc-Ar-font
-.
-.
-.\" NS Ic user macro
-.\" NS interactive command
-.\" NS
-.\" NS width register `Ic' set in doc-common
-.
-.als Ic doc-generic-macro
-.ds doc-Ic-usage interactive_command
-.
-.
-.\" NS Li user macro
-.\" NS literals
-.\" NS
-.\" NS width register `Li' set in doc-common
-.
-.als Li doc-generic-macro
-.ds doc-Li-usage argument
-.
-.
-.\" NS Ms user macro
-.\" NS math symbol
-.\" NS
-.\" NS this function uses the `Sy' font
-.\" NS
-.\" NS width register `Ms' set in doc-common
-.
-.als Ms doc-generic-macro
-.ds doc-Ms-usage math_symbol
-.als doc-Ms-font doc-Sy-font
-.
-.
-.\" NS doc-command-name global string
-.\" NS save first invocation of .Nm
-.
-.ds doc-command-name
-.
-.
-.\" NS Nm user macro
-.\" NS name of command or page topic
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-command-name
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-indent-synopsis
-.\" NS doc-indent-synopsis-active
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Nm' set in doc-common
-.
-.de Nm
-. if !\n[doc-arg-limit] \{\
-. ds doc-macro-name Nm
-. ie \n[.$] \
-. doc-parse-args \$@
-. el \{\
-. ie "\*[doc-command-name]"" \
-. tm Usage: .Nm name ... (#\n[.c])
-. el \
-. doc-parse-args \*[doc-command-name]
-. \}\}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. \" last argument
-. ie "\*[doc-command-name]"" \{\
-. tm Usage: .Nm name ... (#\n[.c])
-. doc-reset-args
-. \}
-. el \{\
-. nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
-. doc-print-and-reset
-. \}\}
-. el \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. ie "\*[doc-command-name]"" \
-. tm Usage: .Nm name ... (#\n[.c])
-. el \{\
-. \" replace previous argument (Nm) with default value
-. nr doc-arg-ptr -1
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. doc-parse-space-vector
-. \}\}
-. el \{\
-. \" handle `.Nm ...' in SYNOPSIS
-. if \n[doc-in-synopsis-section] \{\
-. if "\*[doc-macro-name]"Nm" \{\
-. br
-. if !\n[doc-indent-synopsis] \{\
-. doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
-. nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
-. \}
-. if !\n[doc-indent-synopsis-active] \{\
-. in +\n[doc-indent-synopsis]u
-. nr doc-indent-synopsis-active 1
-. \}
-. ti -\n[doc-indent-synopsis]u
-. \}\}
-. if "\*[doc-command-name]"" \
-. ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
-.
-. nop \*[doc-Nm-font]\c
-. \}
-. doc-print-recursive
-. \}
-..
-.
-.
-.\" NS Pa user macro
-.\" NS pathname: `.Pa [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Pa' set in doc-common
-.
-.de Pa
-. if !\n[doc-arg-limit] \{\
-. ds doc-macro-name Pa
-. doc-parse-args \$@
-.
-. \" default value
-. if !\n[.$] \
-. nop \*[doc-Pa-font]~\f[]\s[0]
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Pa-font]\c
-. if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. \" replace previous argument (Pa) with default value
-. nr doc-arg-ptr -1
-. ds doc-arg\n[doc-arg-ptr] ~
-. nr doc-type\n[doc-arg-ptr] 2
-. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. doc-parse-space-vector
-. \}
-. doc-print-recursive
-. \}
-. el \{\
-. nop \*[doc-Pa-font]~\f[]\s[0]\c
-. doc-print-and-reset
-. \}
-..
-.
-.
-.\" NS Sy user macro
-.\" NS symbolics
-.\" NS
-.\" NS width register `Sy' set in doc-common
-.
-.als Sy doc-generic-macro
-.ds doc-Sy-usage symbolic_text
-.
-.
-.\" NS Me user macro
-.\" NS menu entries
-.\" NS
-.\" NS width register `Me' set in doc-common
-.
-.als Me doc-generic-macro
-.ds doc-Me-usage menu_entry
-.
-.
-.\" NS Tn user macro
-.\" NS trade name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Tn' set in doc-common
-.
-.de Tn
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Tn
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Tn trade_name ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \)\*[doc-Tn-font-size]\c
-. ie !\n[doc-is-reference] \{\
-. nop \)\*[doc-Tn-font-shape]\c
-. doc-print-recursive
-. \}
-. el \
-. doc-do-references
-. \}
-. el \{\
-. tm Usage: .Tn trade_name ... (#\n[.c])
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Va user macro
-.\" NS variable name
-.\" NS
-.\" NS width register `Va' set in doc-common
-.
-.als Va doc-generic-macro
-.ds doc-Va-usage variable_name
-.
-.
-.\" NS No user macro
-.\" NS normal text macro (default text style if mess up)
-.\" NS
-.\" NS width register `No' set in doc-common
-.
-.als No doc-generic-macro
-.ds doc-No-usage normal_text
-.
-.
-.\" NS doc-quote-left global string
-.\" NS left quotation character for `doc-enclose-string' and
-.\" NS `doc-enclose-open'
-.
-.ds doc-quote-left
-.
-.
-.\" NS doc-quote-right global string
-.\" NS right quotation character for `doc-enclose-string' and
-.\" NS `doc-enclose-close'
-.
-.ds doc-quote-right
-.
-.
-.\" NS Op user macro
-.\" NS option expression (i.e., enclose string in square brackets)
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Op' set in doc-common
-.
-.de Op
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Op
-.
-. ds doc-quote-left "\*[doc-left-bracket]
-. ds doc-quote-right "\*[doc-right-bracket]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Aq user macro
-.\" NS enclose string in angle brackets
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Aq' set in doc-common
-.
-.de Aq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Aq
-.
-. ie "\*[doc-macro-name]"An" \{\
-. ds doc-quote-left <
-. ds doc-quote-right >
-. \}
-. el \{\
-. ds doc-quote-left \[la]
-. ds doc-quote-right \[ra]
-. \}
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Bq user macro
-.\" NS enclose string in square brackets
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Bq' set in doc-common
-.
-.de Bq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Bq
-.
-. ds doc-quote-left "\*[doc-left-bracket]
-. ds doc-quote-right "\*[doc-right-bracket]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Brq user macro
-.\" NS enclose string in braces
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Brq' set in doc-common
-.
-.de Brq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Brq
-.
-. ds doc-quote-left {
-. ds doc-quote-right }
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Dq user macro
-.\" NS enclose string in double quotes
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Dq' set in doc-common
-.
-.de Dq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Dq
-.
-. ds doc-quote-left "\*[Lq]
-. ds doc-quote-right "\*[Rq]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Eq user macro
-.\" NS enclose string in user-defined quotes (args 1 and 2)
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Eq' set in doc-common
-.
-.de Eq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Eq
-.
-. ds doc-quote-left "\$1
-. ds doc-quote-right "\$2
-.
-. shift 2
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Pq user macro
-.\" NS enclose string in parentheses
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Pq' set in doc-common
-.
-.de Pq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Pq
-.
-. ds doc-quote-left "\*[doc-left-parenthesis]
-. ds doc-quote-right "\*[doc-right-parenthesis]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Ql user macro
-.\" NS quoted literal
-.\"
-.\" is in file doc-[dit|n]roff
-.
-.
-.\" NS Qq user macro
-.\" NS enclose string in straight double quotes
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Qq' set in doc-common
-.
-.de Qq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Qq
-.
-. ds doc-quote-left "\*[q]
-. ds doc-quote-right "\*[q]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Sq user macro
-.\" NS enclose string in single quotes
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Sq' set in doc-common
-.
-.de Sq
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Sq
-.
-. ds doc-quote-left "\*[doc-left-singlequote]
-. ds doc-quote-right "\*[doc-right-singlequote]
-.
-. doc-enclose-string \$@
-..
-.
-.
-.\" NS Es user macro
-.\" NS set up arguments (i.e., the left and right quotation character as
-.\" NS first and second argument) for .En call
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.
-.de Es
-. if !\n[doc-arg-limit] \{\
-. ie (\n[.$] > 2) \{\
-. ds doc-macro-name Es
-. doc-parse-args \$@
-. \}
-. el \{\
-. ds doc-quote-left "\$1
-. ds doc-quote-right "\$2
-. \}\}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
-. nr doc-arg-ptr +1
-. ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-do-\n[doc-type\n[doc-arg-ptr]]
-. el \
-. doc-print-and-reset
-..
-.
-.
-.\" NS doc-have-slot global register (bool)
-.\" NS set if `doc-enclose-string' has created a slot for closing
-.\" NS delimiter
-.
-.nr doc-have-slot 0
-.
-.
-.\" NS doc-enclose-string macro
-.\" NS enclose string with given args (e.g. [ and ])
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-have-slot
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-des
-.\" NS doc-reg-des1
-.\" NS doc-reg-des2
-.\" NS
-.\" NS requires:
-.\" NS doc-quote-left
-.\" NS doc-quote-right
-.
-.de doc-enclose-string
-. if \n[doc-in-synopsis-section] \
-. doc-set-hard-space
-.
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \
-. doc-parse-args \$@
-. el \{\
-. nop \)\*[doc-quote-left]\*[doc-quote-right]
-. \}\}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. \" the final `\)' prevents hyphenation in case the next character is `\%'
-. nop \)\*[doc-quote-left]\)\c
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. \" last argument
-. nop \)\*[doc-quote-right]\)\c
-. doc-print-and-reset
-. \}
-. el \{\
-. \" test whether last arguments are of type closing punctuation
-. \" resp. suffix
-. ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
-. nr doc-reg-des (\n[doc-arg-limit] - 1)
-. while (\n[doc-type\n[doc-reg-des]] == 3) \
-. nr doc-reg-des -1
-.
-. \" prepend closing delimiter
-. nr doc-reg-des +1
-. ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-. \}
-. el \{\
-. \" test whether last arguments are macros which continue the line
-. \" logically
-. nr doc-reg-des \n[doc-arg-limit]
-. while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
-. if !\A\*[doc-arg\n[doc-reg-des]] \
-. break
-. if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
-. break
-. nr doc-reg-des -1
-. \}
-.
-. \" if there are no trailing macros to be skipped, append argument
-. ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
-. doc-append-arg "\)\*[doc-quote-right]\)" 3
-. el \{\
-. \" if a previous call to `doc-enclose-string' has already created
-. \" a slot, prepend argument
-. ie \n[doc-have-slot] \
-. ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-. el \{\
-. \" we have to shift all arguments to the right
-. nr doc-reg-des +1
-. nr doc-reg-des1 \n[doc-arg-limit]
-. nr doc-reg-des2 (\n[doc-arg-limit] + 1)
-. while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
-. rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
-. rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
-. rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
-. nr doc-reg-des1 -1
-. nr doc-reg-des2 -1
-. \}
-. nr doc-arg-limit +1
-.
-. \" finally, insert closing delimiter into the freed slot and
-. \" recompute spacing vector
-. ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
-. nr doc-type\n[doc-reg-des] 3
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
-. nr doc-arg-limit (\n[doc-reg-des] - 1)
-. doc-parse-space-vector
-. nr doc-have-slot 1
-. \}\}\}
-.
-. doc-do-\n[doc-type\n[doc-arg-ptr]]
-. \}
-.
-. if \n[doc-in-synopsis-section] \
-. doc-set-soft-space
-..
-.
-.
-.\" NS En user macro
-.\" NS enclose arguments with quotation characters set up with `.Es'
-.
-.als En doc-enclose-string
-.
-.
-.\" NS Ao user macro
-.\" NS angle open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Ao' set in doc-common
-.
-.de Ao
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Ao
-.
-. ie "\*[doc-macro-name]"An" \
-. ds doc-quote-left <
-. el \
-. ds doc-quote-left \[la]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Ac user macro
-.\" NS angle close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Ac' set in doc-common
-.
-.de Ac
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Ac
-.
-. ie "\*[doc-macro-name]"An" \
-. ds doc-quote-right >
-. el \
-. ds doc-quote-right \[ra]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Bo user macro
-.\" NS bracket open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Bo' set in doc-common
-.
-.de Bo
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Bo
-.
-. ds doc-quote-left "\*[doc-left-bracket]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Bc user macro
-.\" NS bracket close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Bc' set in doc-common
-.
-.de Bc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Bc
-.
-. ds doc-quote-right "\*[doc-right-bracket]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Bro user macro
-.\" NS brace open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Bro' set in doc-common
-.
-.de Bro
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Bo
-.
-. ds doc-quote-left {
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Brc user macro
-.\" NS brace close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Brc' set in doc-common
-.
-.de Brc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Bc
-.
-. ds doc-quote-right }
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Do user macro
-.\" NS double quote open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Do' set in doc-common
-.
-.de Do
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Do
-.
-. ds doc-quote-left "\*[Lq]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Dc user macro
-.\" NS double quote close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Dc' set in doc-common
-.
-.de Dc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Dc
-.
-. ds doc-quote-right "\*[Rq]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Eo user macro
-.\" NS enclose open (using first argument as beginning of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Eo' set in doc-common
-.
-.de Eo
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Eo
-.
-. ds doc-quote-left "\$1
-.
-. shift
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Ec user macro
-.\" NS enclose close (using first argument as end of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Ec' set in doc-common
-.
-.de Ec
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Ec
-.
-. ds doc-quote-right "\$1
-.
-. shift
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Oo user macro
-.\" NS option open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Oo' set in doc-common
-.
-.de Oo
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Oo
-.
-. ds doc-quote-left [
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Oc user macro
-.\" NS option close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Oc' set in doc-common
-.
-.de Oc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Oc
-.
-. ds doc-quote-right ]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Po user macro
-.\" NS parenthesis open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Po' set in doc-common
-.
-.de Po
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Po
-.
-. ds doc-quote-left "\*[doc-left-parenthesis]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Pc user macro
-.\" NS parenthesis close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Pc' set in doc-common
-.
-.de Pc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Pc
-.
-. ds doc-quote-right "\*[doc-right-parenthesis]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Qo user macro
-.\" NS straight double quote open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Qo' set in doc-common
-.
-.de Qo
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Qo
-.
-. ds doc-quote-left "\*[q]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Qc user macro
-.\" NS straight double quote close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Qc' set in doc-common
-.
-.de Qc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Qc
-.
-. ds doc-quote-right "\*[q]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS So user macro
-.\" NS single quote open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `So' set in doc-common
-.
-.de So
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name So
-.
-. ds doc-quote-left "\*[doc-left-singlequote]
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Sc user macro
-.\" NS single quote close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Sc' set in doc-common
-.
-.de Sc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Sc
-.
-. ds doc-quote-right "\*[doc-right-singlequote]
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS Xo user macro
-.\" NS extend open
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Xo' set in doc-common
-.
-.de Xo
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Xo
-.
-. ds doc-quote-left
-.
-. doc-enclose-open \$@
-..
-.
-.
-.\" NS Xc user macro
-.\" NS extend close
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS doc-quote-right
-.\" NS
-.\" NS width register `Xc' set in doc-common
-.
-.de Xc
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Xc
-.
-. ds doc-quote-right
-.
-. doc-enclose-close \$@
-..
-.
-.
-.\" NS doc-nesting-level global register
-.\" NS used by `doc-enclose-open' and `doc-enclose-close'
-.
-.nr doc-nesting-level 0
-.
-.
-.\" NS doc-in-list global register (bool)
-.\" NS whether we are in (logical) .It
-.
-.nr doc-in-list 0
-.
-.
-.\" NS doc-enclose-open macro
-.\" NS enclose string open
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-nesting-level
-.
-.de doc-enclose-open
-. if !\n[doc-arg-limit] \
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. nr doc-arg-ptr -1
-.
-. nop \)\*[doc-quote-left]\)\c
-.
-. \" start enclosure box
-. box doc-enclosure-box\n[doc-nesting-level]
-. ev doc-enclosure-env\n[doc-nesting-level]
-. evc 0
-. in 0
-. nf
-. \" we insert something to make .chop always work
-. nop \&\c
-.
-. \" increase nesting level *after* parsing of arguments
-. nr doc-nesting-level +1
-.
-. if \n[doc-arg-limit] \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-print-recursive
-. el \
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS doc-enclose-close macro
-.\" NS enclose string close
-.\" NS
-.\" NS modifies:
-.\" NS doc-nesting-level
-.
-.de doc-enclose-close
-. nr doc-nesting-level -1
-.
-. \" finish enclosure box
-. br
-. ev
-. box
-. chop doc-enclosure-box\n[doc-nesting-level]
-. unformat doc-enclosure-box\n[doc-nesting-level]
-.
-. nh
-. nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
-. nop \)\*[doc-quote-right]\)\c
-.
-. if !\n[doc-arg-limit] \{\
-. doc-parse-args \$@
-.
-. if !\n[.$] \
-. doc-print-and-reset
-. \}
-.
-. if \n[doc-arg-limit] \{\
-. ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nop \)\*[doc-space\n[doc-arg-ptr]]\c
-. nr doc-arg-ptr +1
-. doc-print-recursive
-. \}
-. el \
-. doc-print-and-reset
-. \}
-.
-. \" shall we finish .It macro?
-. if !"\*[doc-macro-name]"It" \
-. if \n[doc-in-list] \
-. if !\n[doc-nesting-level] \
-. doc-\*[doc-list-type-stack\n[doc-list-depth]]
-..
-.
-.
-.\" NS Pf user macro
-.\" NS prefix: `.Pf prefix arg ...'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-macro-name
-.\" NS doc-quote-left
-.\" NS
-.\" NS width register `Pf' set in doc-common
-.
-.de Pf
-. if !\n[doc-arg-limit] \
-. ds doc-macro-name Pf
-.
-. ie \n[doc-arg-limit] \{\
-. ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
-. nr doc-arg-ptr +1
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-. \}
-. el \
-. tm mdoc warning: .Pf: trailing prefix (#\n[.c])
-. \}
-. el \{\
-. nop \)\$1\)\c
-. shift
-. ie \n[.$] \
-. doc-parse-args \$@
-. el \{\
-. tm mdoc warning: .Pf: missing arguments (#\n[.c])
-. nop \)
-. \}\}
-.
-. if \n[doc-arg-limit] \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-. doc-print-and-reset
-. el \
-. doc-do-\n[doc-type\n[doc-arg-ptr]]
-. \}
-..
-.
-.
-.\" NS Ns user macro
-.\" NS remove space (space removal done by `doc-parse-args')
-.\" NS
-.\" NS modifies:
-.\" NS doc-argXXX
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Ns' set in doc-common
-.
-.de Ns
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Ns
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Ns must be called with arguments (#\n[.c])
-. \}
-.
-. if \n[doc-arg-limit] \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-print-recursive
-. el \
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Ap user macro
-.\" NS append an apostrophe
-.\" NS
-.\" NS width register `Ap' set in doc-common
-.
-.de Ap
-. ie !\n[doc-arg-limit] \
-. tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
-. el \{\
-. nop \)'\)\c
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-print-recursive
-. el \
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS doc-space global string
-.\" NS current inter-argument space
-.
-.ds doc-space "\*[doc-soft-space]
-.
-.
-.\" NS doc-soft-space constant string
-.\" NS soft (stretchable) space (defined in doc-common)
-.
-.
-.\" NS doc-hard-space constant string
-.\" NS hard (unpaddable) space (defined in doc-common)
-.
-.
-.\" NS doc-set-hard-space macro
-.\" NS set current space string to hard (unpaddable) space.
-.\" NS
-.\" NS modifies:
-.\" NS doc-saved-space
-.\" NS doc-space
-.
-.de doc-set-hard-space
-. ie "\*[doc-space]"" \
-. ds doc-saved-space "\*[doc-hard-space]
-. el \
-. ds doc-space "\*[doc-hard-space]
-..
-.
-.
-.\" NS doc-set-soft-space macro
-.\" NS set current space string to soft space
-.\" NS
-.\" NS modifies:
-.\" NS doc-saved-space
-.\" NS doc-space
-.
-.de doc-set-soft-space
-. ie "\*[doc-space]"" \
-. ds doc-saved-space "\*[doc-soft-space]
-. el \
-. ds doc-space "\*[doc-soft-space]
-..
-.
-.
-.\" NS doc-space-mode global register (bool)
-.\" NS default is one (space mode on)
-.
-.nr doc-space-mode 1
-.
-.
-.\" NS doc-saved-space global string
-.\" NS saved value of `doc-space'
-.
-.ds doc-saved-space "\*[doc-space]
-.
-.
-.\" NS doc-have-space global register (bool)
-.\" NS set if last command was horizontal space
-.
-.nr doc-have-space 0
-.
-.
-.\" NS Sm user macro
-.\" NS space mode (`.Sm'/`.Sm on'/`.Sm off')
-.\" NS
-.\" NS without argument, toggle space mode
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-limit
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-macro-name
-.\" NS doc-num-args
-.\" NS doc-saved-space
-.\" NS doc-space
-.\" NS doc-space-mode
-.\" NS doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Sm
-.\" NS
-.\" NS width register `Sm' set in doc-common
-.
-.de Sm
-. ie \n[doc-have-space] \
-. nr doc-reg-Sm 0
-. el \
-. nr doc-reg-Sm 1
-.
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Sm
-. doc-parse-args \$@
-. \}
-. el \{\
-. ie \n[doc-space-mode] \{\
-. ds doc-saved-space "\*[doc-space]
-. ds doc-space
-. nr doc-space-mode 0
-. \}
-. el \{\
-. ds doc-space "\*[doc-saved-space]
-. nr doc-space-mode 1
-.
-. \" finish line only if it is interrupted and `doc-have-space'
-. \" isn't set
-. if \n[doc-reg-Sm] \
-. if \n[.int] \
-. nop \)
-. \}
-. \}\}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-.
-. \" avoid a warning message in case `Sm' is the last parameter
-. if !d doc-arg\n[doc-arg-ptr] \
-. ds doc-arg\n[doc-arg-ptr]
-.
-. ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
-. ds doc-space "\*[doc-saved-space]
-. nr doc-space-mode 1
-. \}
-. el \{\
-. ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
-. ds doc-saved-space "\*[doc-space]
-. ds doc-space
-. nr doc-space-mode 0
-. \}
-. el \{\
-. \" no argument for Sm
-. nr doc-arg-ptr -1
-. ie \n[doc-space-mode] \{\
-. ds doc-saved-space "\*[doc-space]
-. ds doc-space
-. nr doc-space-mode 0
-. \}
-. el \{\
-. ds doc-space "\*[doc-saved-space]
-. nr doc-space-mode 1
-. \}
-. \}\}
-.
-. ie \n[doc-space-mode] \{\
-. \" recompute space vector for remaining arguments
-. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-. nr doc-arg-limit \n[doc-arg-ptr]
-. if \n[doc-num-args] \
-. doc-parse-space-vector
-.
-. \" finish line only if it is interrupted and `doc-have-space'
-. \" isn't set
-. if \n[doc-reg-Sm] \
-. if \n[.int] \
-. nop \)
-. \}
-. el \{\
-. \" reset remaining space vector elements
-. nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
-. while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
-. ds doc-space\n[doc-reg-Sm]
-. nr doc-reg-Sm +1
-. \" the body of a `while' request must end with the fitting `\}'!
-. \}
-. \}
-.
-. \" do we have parameters to print?
-. ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. \" skip `Sm' argument
-. nr doc-arg-ptr +1
-. doc-print-recursive
-. \}
-. el \
-. doc-reset-args
-..
-.
-.
-.\" NS doc-arg-type immediate register
-.\" NS argument type (macro=1, string=2, punctuation suffix=3,
-.\" NS punctuation prefix=4)
-.
-.nr doc-arg-type 0
-.
-.
-.\" NS doc-get-arg-type macro
-.\" NS get argument type
-.\" NS
-.\" NS this macro expects the width of the argument in `doc-width'
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-type
-.
-.de doc-get-arg-type
-. nr doc-arg-type 2
-.
-. if ((\n[doc-width] < 4) & \A\$1) \{\
-. ie (\n[doc-width] == 1) \{\
-. if r doc-punct\$1 \
-. nr doc-arg-type \n[doc-punct\$1]
-. \}
-. el \
-. if r \$1 \
-. if d \$1 \
-. nr doc-arg-type 1
-. \}
-..
-.
-.
-.\" NS doc-get-arg-type* macro
-.\" NS similar to as `doc-get-arg-type' but uses doc-argXXX strings
-.\" NS
-.\" NS this macro sets the `doc-width' register using the `length' request
-.\" NS to get the number of characters in a string literally
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-type
-.\" NS doc-width
-.
-.de doc-get-arg-type*
-. nr doc-arg-type 2
-. length doc-width "\*[doc-arg\$1]
-.
-. if ((\n[doc-width] < 4) & \A\*[doc-arg\$1]) \{\
-. ie (\n[doc-width] == 1) \{\
-. if r doc-punct\*[doc-arg\$1] \
-. nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
-. \}
-. el \
-. if r \*[doc-arg\$1] \
-. if d \*[doc-arg\$1] \
-. nr doc-arg-type 1
-. \}
-..
-.
-.
-.\" NS doc-set-spacing-1 macro
-.\" NS set spacing for macros
-.\" NS
-.\" NS modifies:
-.\" NS doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dssfm
-.\" NS doc-reg-dssfm1
-.
-.de doc-set-spacing-1
-. nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
-.
-. \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
-. \" argument)
-. ie (\n[doc-reg-dssfm1] == 3) \{\
-. if \n[doc-arg-limit] \{\
-. nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-. ds doc-space\n[doc-reg-dssfm]
-. \}
-. ds doc-space\n[doc-arg-limit] "\*[doc-space]
-. \}
-. el \{\
-. \" macros like .Ap and .Ns have value 2 (remove space before and after
-. \" argument)
-. ie (\n[doc-reg-dssfm1] == 2) \{\
-. if \n[doc-arg-limit] \{\
-. nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-. ds doc-space\n[doc-reg-dssfm]
-. \}
-. ds doc-space\n[doc-arg-limit]
-. \}
-. el \
-. ds doc-space\n[doc-arg-limit]
-. \}
-..
-.
-.
-.\" NS doc-set-spacing-2 macro
-.\" NS set spacing for strings
-.\" NS
-.\" NS modifies:
-.\" NS doc-spaceXXX
-.
-.de doc-set-spacing-2
-. ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-3 macro
-.\" NS set spacing for punctuation suffixes
-.\" NS
-.\" NS modifies:
-.\" NS doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dssfps
-.
-.de doc-set-spacing-3
-. if \n[doc-arg-limit] \{\
-. nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
-. ds doc-space\n[doc-reg-dssfps]
-. \}
-.
-. ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-4 macro
-.\" NS set spacing for punctuation prefixes
-.\" NS
-.\" NS modifies:
-.\" NS doc-spaceXXX
-.
-.de doc-set-spacing-4
-. ds doc-space\n[doc-arg-limit]
-..
-.
-.
-.\" type switches (on current argument doc-arg-ptr)
-.
-.
-.\" NS doc-do-1 macro
-.\" NS call request if macro
-.
-.de doc-do-1
-. \*[doc-arg\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS doc-do-2 macro
-.\" NS call .doc-print-recursive if string
-.
-.als doc-do-2 doc-print-recursive
-.
-.
-.\" NS doc-do-3 macro
-.\" NS call .doc-print-recursive if punctuation suffix
-.
-.als doc-do-3 doc-print-recursive
-.
-.
-.\" NS doc-do-4 macro
-.\" NS call .doc-print-recursive if punctuation prefix
-.
-.als doc-do-4 doc-print-recursive
-.
-.
-.\" NS doc-fontmode-depth global register
-.\" NS font mode level
-.
-.nr doc-fontmode-depth 0
-.
-.
-.\" NS doc-fontmode-font-stackXXX global register
-.\" NS stack of saved current font values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS doc-fontmode-depth
-.
-.nr doc-fontmode-font-stack0 0
-.
-.
-.\" NS doc-fontmode-size-stackXXX global register
-.\" NS stack of saved current size values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS doc-fontmode-depth
-.
-.nr doc-fontmode-size-stack0 0
-.
-.
-.\" NS Bf user macro
-.\" NS begin font mode (will be begin-mode/end-mode in groff & TeX)
-.\" NS
-.\" NS modifies:
-.\" NS doc-fontmode-depth
-.\" NS doc-fontmode-font-stackXXX
-.\" NS doc-fontmode-size-stackXXX
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Bf' set in doc-common
-.
-.de Bf
-. ds doc-macro-name Bf
-.
-. ie \n[.$] \{\
-. nr doc-fontmode-depth +1
-.
-. \" save current font and size
-. nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
-. nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
-.
-. ie "\$1"Em" \
-. nop \*[doc-Em-font]\c
-. el \{ .ie "\$1"Li" \
-. nop \*[doc-Li-font]\c
-. el \{ .ie "\$1"Sy" \
-. nop \*[doc-Sy-font]\c
-. el \{ .ie "\$1"-emphasis" \
-. nop \*[doc-Em-font]\c
-. el \{ .ie "\$1"-literal" \
-. nop \*[doc-Li-font]\c
-. el \{ .ie "\$1"-symbolic" \
-. nop \*[doc-Sy-font]\c
-. el \{\
-. tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
-. tm1 " (#\n[.c])
-. \}\}\}\}\}\}\}
-. el \
-. tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
-..
-.
-.
-.\" NS Ef user macro
-.\" NS end font mode
-.\" NS
-.\" NS modifies:
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Ef' set in doc-common
-.
-.de Ef
-. ds doc-macro-name Ef
-.
-. ie \n[doc-fontmode-depth] \{\
-. \" restore saved font and size
-. nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
-. nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
-.
-. nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
-. nr doc-curr-font \n[.f]
-. nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
-. nr doc-curr-size \n[.ps]
-. nr doc-fontmode-depth -1
-. \}
-. el \
-. tm mdoc warning: Extraneous .Ef (#\n[.c])
-..
-.
-.
-.\" NS doc-keep-type global register
-.\" NS current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
-.
-.nr doc-keep-type 0
-.
-.
-.\" NS Bk user macro
-.\" NS begin keep
-.\" NS
-.\" NS modifies:
-.\" NS doc-keep-type
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Bk' set in doc-common
-.
-.de Bk
-. ds doc-macro-name Bk
-.
-. if \n[doc-keep-type] \
-. tm .Bk: nesting keeps not implemented yet. (#\n[.c])
-.
-. ie "\$1"-lines" \{\
-. nr doc-keep-type 2
-. tm .Bk -lines: Not implemented yet. (#\n[.c])
-. \}
-. el \{ .ie "\$1"-words" \{\
-. nr doc-keep-type 1
-. doc-set-hard-space
-. \}
-. el \{ .ie "\$1"" \{\
-. \" default
-. nr doc-keep-type 1
-. doc-set-hard-space
-. \}
-. el \{\
-. tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
-. nr doc-keep-type 3
-. \}\}\}
-.
-\#. nr doc-nesting-level +1
-..
-.
-.
-.\" NS Ek user macro
-.\" NS end keep
-.\" NS
-.\" NS modifies:
-.\" NS doc-keep-type
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Ek' set in doc-common
-.
-.de Ek
-. ds doc-macro-name Ek
-.
-\#. nr doc-nesting-level -1
-.
-. ie \n[.$] \
-. tm Usage: .Ek (does not take arguments) (#\n[.c])
-. el \{\
-. if !\n[doc-keep-type] \
-. tm mdoc warning: .Ek found without .Bk before (#\n[.c])
-.
-. ie (\n[doc-keep-type] == 1) \
-. doc-set-soft-space
-. el \{ .if (\n[doc-keep-type] == 2) \
-. tm .Bk -lines: Not implemented yet. (#\n[.c])
-. \}\}
-.
-. nr doc-keep-type 0
-.
-\#. if !"\*[doc-out-string]"" \
-\#. doc-print-out-string
-..
-.
-.
-.\" NS doc-display-depth global register
-.\" NS display level
-.
-.nr doc-display-depth 0
-.
-.
-.\" NS doc-is-compact global register (bool)
-.\" NS set if the `compact' keyword is given
-.
-.nr doc-is-compact 0
-.
-.
-.\" NS doc-display-type-stackXXX global string
-.\" NS the display type stack
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.ds doc-display-type-stack0
-.
-.
-.\" NS doc-display-indent-stackXXX global register
-.\" NS stack of display indentation values
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.nr doc-display-indent-stack0 0
-.
-.
-.\" NS doc-display-ad-stackXXX global register
-.\" NS stack of saved adjustment modes
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.nr doc-display-ad-stack0 0
-.
-.
-.\" NS doc-display-fi-stackXXX global register
-.\" NS stack of saved fill modes
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.nr doc-display-fi-stack0 0
-.
-.
-.\" NS doc-display-ft-stackXXX global register
-.\" NS stack of saved fonts
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.nr doc-display-ft-stack0 0
-.
-.
-.\" NS doc-display-ps-stackXXX global register
-.\" NS stack of saved font sizes
-.\" NS
-.\" NS limit:
-.\" NS doc-display-depth
-.
-.nr doc-display-ps-stack0 0
-.
-.
-.\" NS Bd user macro
-.\" NS begin display
-.\" NS
-.\" NS width register `Bd' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-display-depth
-.\" NS doc-display-ad-stackXXX
-.\" NS doc-display-fi-stackXXX
-.\" NS doc-display-ft-stackXXX
-.\" NS doc-display-ps-stackXXX
-.\" NS doc-display-file
-.\" NS doc-display-indent-stackXXX
-.\" NS doc-display-type-stackXXX
-.\" NS doc-is-compact
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Bd
-.
-.de Bd
-. ds doc-macro-name Bd
-.
-. if !\n[.$] \{\
-. tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
-. tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c])
-. return
-. \}
-.
-. nr doc-is-compact 0
-. ds doc-display-file
-. nr doc-reg-Bd 1
-. nr doc-display-depth +1
-.
-. \" save current adjustment and fill modes
-. nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
-. nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
-.
-. ie "\$1"-literal" \{\
-. ds doc-display-type-stack\n[doc-display-depth] literal
-. nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
-. nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
-.
-. ie t \
-. ta T 9n
-. el \
-. ta T 8n
-. nf
-. \}
-. el \{ .ie "\$1"-filled" \{\
-. ds doc-display-type-stack\n[doc-display-depth] filled
-. ad b
-. fi
-. \}
-. el \{ .ie "\$1"-ragged" \{\
-. ds doc-display-type-stack\n[doc-display-depth] ragged
-. na
-. fi
-. \}
-. el \{ .ie "\$1"-centered" \{\
-. ds doc-display-type-stack\n[doc-display-depth] centered
-. ad c
-. fi
-. \}
-. el \{ .ie "\$1"-unfilled" \{\
-. ds doc-display-type-stack\n[doc-display-depth] unfilled
-. nf
-. \}
-. el \{\
-. tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
-. tm1 " in .Bd macro (#\n[.c])
-. nr doc-reg-Bd 0
-. \}\}\}\}\}
-.
-. \" have we seen an argument?
-. if \n[doc-reg-Bd] \{\
-. shift
-. \" check other arguments
-. if \n[.$] \
-. doc-do-Bd-args \$@
-. \}
-.
-. \" avoid warning about non-existent register
-. if !r doc-display-indent-stack\n[doc-display-depth] \
-. nr doc-display-indent-stack\n[doc-display-depth] 0
-.
-. if \n[doc-display-indent-stack\n[doc-display-depth]] \
-. in +\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-. if !\n[doc-is-compact] \
-. sp \n[doc-display-vertical]u
-.
-. if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
-. if t \
-. nop \*[doc-Li-font]\c
-.
-. if !\n[cR] \
-. ne 2v
-.
-. if !"\*[doc-display-file]"" \
-. so \*[doc-display-file]
-.
-. nr doc-is-compact 0
-. ds doc-display-file
-..
-.
-.
-.\" NS doc-do-Bd-args macro
-.\" NS resolve remaining .Bd arguments
-.\" NS
-.\" NS modifies:
-.\" NS doc-display-file
-.\" NS doc-display-indent-stackXXX
-.\" NS doc-is-compact
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-ddBa
-.\" NS doc-reg-ddBa1
-.\" NS doc-reg-ddBa2
-.\" NS doc-reg-ddBa3
-.\" NS doc-reg-ddBa4
-.\" NS doc-str-ddBa
-.
-.de doc-do-Bd-args
-. nr doc-reg-ddBa 1
-.
-. ie "\$1"-offset" \{\
-. nr doc-reg-ddBa 2
-.
-. ie "\$2"left" \
-. nr doc-display-indent-stack\n[doc-display-depth] 0
-. el \{ .ie "\$2"right" \
-. nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
-. el \{ .ie "\$2"center" \
-. nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
-. el \{ .ie "\$2"indent" \
-. nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
-. el \{ .ie "\$2"indent-two" \
-. nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
-. el \
-. nr doc-reg-ddBa 1
-. \}\}\}\}
-.
-. \" not a known keyword
-. if (\n[doc-reg-ddBa] == 1) \{\
-. nr doc-reg-ddBa 2
-.
-. nr doc-reg-ddBa1 0
-. if \B(\$2) \{\
-. \" disable warnings related to scaling indicators (32)
-. nr doc-reg-ddBa2 \n[.warn]
-. warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-. \" values without a scaling indicator are taken as strings;
-. \" we test whether the parameter string with and without the last
-. \" character yields identical numerical results (ignoring the
-. \" scaling indicator)
-. ds doc-str-ddBa "\$2
-. substring doc-str-ddBa 0 -2
-. if \B(\*[doc-str-ddBa]) \{\
-. nr doc-reg-ddBa3 (;(\$2))
-. nr doc-reg-ddBa4 (\*[doc-str-ddBa])
-. if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
-. nr doc-reg-ddBa1 1
-. \}
-.
-. \" enable all warnings again
-. warn \n[doc-reg-ddBa2]
-. \}
-.
-. ie \n[doc-reg-ddBa1] \
-. nr doc-display-indent-stack\n[doc-display-depth] \$2
-. el \{\
-. doc-get-width "\$2"
-. ie (\n[doc-width] <= 3) \{\
-. \" if the offset parameter is a macro, use the macro's
-. \" width as specified in doc-common
-. doc-get-arg-type "\$2"
-. ie (\n[doc-arg-type] == 1) \
-. nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
-. el \
-. nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}
-. el \
-. nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}\}
-. \}
-. el \{ .ie "\$1"-compact" \
-. nr doc-is-compact 1
-. el \{ .ie "\$1"-file" \{\
-. ie !"\$2"" \{\
-. ds doc-display-file "\$2
-. nr doc-reg-ddBa 2
-. \}
-. el \
-. tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
-. \}
-. el \
-. tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
-. \}\}
-.
-. if (\n[doc-reg-ddBa] < \n[.$]) \{\
-. shift \n[doc-reg-ddBa]
-. doc-do-Bd-args \$@
-. \}
-..
-.
-.
-.\" NS Ed user macro
-.\" NS end display
-.\" NS
-.\" NS modifies:
-.\" NS doc-display-depth
-.\" NS doc-display-indent-stackXXX
-.\" NS doc-display-type-stackXXX
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Ed' set in doc-common
-.
-.de Ed
-. ds doc-macro-name Ed
-.
-. br
-.
-. if !\n[doc-display-depth] \{\
-. tm mdoc warning: Extraneous .Ed (#\n[.c])
-. nr doc-display-depth 1
-. \}
-.
-. if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
-. ft \n[doc-display-ft-stack\n[doc-display-depth]]
-. ps \n[doc-display-ps-stack\n[doc-display-depth]]u
-. \}
-.
-. in -\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-. \" restore saved adjustment and fill modes
-. ie \n[doc-display-fi-stack\n[doc-display-depth]] \
-. fi
-. el \
-. nf
-. ad \n[doc-display-ad-stack\n[doc-display-depth]]
-.
-. nr doc-display-indent-stack\n[doc-display-depth] 0
-. ds doc-display-type-stack\n[doc-display-depth]
-. nr doc-display-depth -1
-..
-.
-.
-.\" NS doc-list-type-stackXXX global string
-.\" NS stack of list types
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.ds doc-list-type-stack1
-.
-.
-.\" NS doc-list-indent-stackXXX global register
-.\" NS stack of list indentation values
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.nr doc-list-indent-stack1 0
-.
-.
-.\" NS doc-list-have-indent-stackXXX global register (bool)
-.\" NS an indentation value is active
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.nr doc-list-have-indent-stack1 0
-.
-.
-.\" NS Bl user macro
-.\" NS begin list
-.\" NS
-.\" NS width register `Bl' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-list-depth
-.\" NS doc-list-have-indent-stackXXX
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-list-type-stackXXX
-.\" NS doc-macro-name
-.\" NS doc-num-args
-.\" NS doc-num-columns
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Bl
-.
-.de Bl
-. if !\n[.$] \{\
-. doc-Bl-usage
-. return
-. \}
-.
-. ds doc-macro-name Bl
-. nr doc-list-depth +1
-. nr doc-arg-ptr 1
-.
-. ie "\$1"-hang" \{\
-. ds doc-list-type-stack\n[doc-list-depth] hang-list
-. nr doc-list-indent-stack\n[doc-list-depth] 6n
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-tag" \{\
-. ds doc-list-type-stack\n[doc-list-depth] tag-list
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-item" \{\
-. ds doc-list-type-stack\n[doc-list-depth] item-list
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-enum" \{\
-. ds doc-list-type-stack\n[doc-list-depth] enum-list
-. nr doc-list-indent-stack\n[doc-list-depth] 3n
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-bullet" \{\
-. ds doc-list-type-stack\n[doc-list-depth] bullet-list
-. nr doc-list-indent-stack\n[doc-list-depth] 2n
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-dash" \{\
-. ds doc-list-type-stack\n[doc-list-depth] dash-list
-. nr doc-list-indent-stack\n[doc-list-depth] 2n
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-hyphen" \{\
-. ds doc-list-type-stack\n[doc-list-depth] dash-list
-. nr doc-list-indent-stack\n[doc-list-depth] 2n
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-inset" \{\
-. ds doc-list-type-stack\n[doc-list-depth] inset-list
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-diag" \{\
-. ds doc-list-type-stack\n[doc-list-depth] diag-list
-. \}
-. el \{ .ie "\$1"-ohang" \{\
-. ds doc-list-type-stack\n[doc-list-depth] ohang-list
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. el \{ .ie "\$1"-column" \{\
-. ds doc-list-type-stack\n[doc-list-depth] column-list
-. linetabs 1
-. \}
-. el \{\
-. tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
-. tm1 " in .Bl macro
-. tm
-. nr doc-arg-ptr 0
-. \}\}\}\}\}\}\}\}\}\}\}
-.
-. \" we have seen a list type
-. if !\n[doc-arg-ptr] \{\
-. doc-Bl-usage
-. doc-reset-args
-. nr doc-list-depth -1
-. return
-. \}
-.
-. shift
-.
-. \" fill argument vector
-. nr doc-reg-Bl 1
-. while (\n[doc-reg-Bl] <= \n[.$]) \{\
-. ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
-. \" dummy type and space so that doc-save-global-vars() doesn't warn
-. nr doc-type\n[doc-reg-Bl] 0
-. ds doc-space\n[doc-reg-Bl]
-. nr doc-reg-Bl +1
-. \}
-.
-. doc-increment-list-stack
-.
-. if \n[.$] \{\
-. nr doc-arg-limit \n[.$]
-. nr doc-arg-ptr 0
-. doc-do-Bl-args
-.
-. in +\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-. \" initialize column list
-. if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-. doc-set-column-tab \n[doc-num-columns]
-' in -\n[doc-column-indent-width]u
-. if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-. sp \n[doc-display-vertical]u
-.
-. nf
-. nr doc-num-columns 0
-. \}\}
-.
-. doc-reset-args
-..
-.
-.
-.\" NS doc-Bl-usage macro
-.
-.de doc-Bl-usage
-. tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
-. tm1 " [-width <string>]
-. tm1 " [-offset <string>] [-compact]
-. tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
-. tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
-. tm1 " [-offset <string>] [-compact] (#\n[.c])
-..
-.
-.
-.\" NS doc-do-Bl-args macro
-.\" NS resolve remaining .Bl arguments
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-compact-list-stackXXX
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-list-offset-stackXXX
-.\" NS doc-num-columns
-.\" NS doc-tag-prefix-stackXXX
-.\" NS doc-tag-width-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-box-dBla
-.\" NS doc-env-dBla
-.\" NS doc-reg-dBla
-.\" NS doc-reg-dBla1
-.\" NS doc-reg-dBla2
-.\" NS doc-reg-dBla3
-.\" NS doc-reg-dBla4
-.\" NS doc-str-dBla
-.\" NS doc-str-dBla1
-.
-.de doc-do-Bl-args
-. nr doc-arg-ptr +1
-.
-. if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-. return
-.
-. \" avoid a warning message in case e.g. `-offset' has no parameter
-. nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
-. if !d doc-arg\n[doc-reg-dBla] \
-. ds doc-arg\n[doc-reg-dBla]
-.
-. nr doc-reg-dBla 1
-.
-. ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
-. nr doc-compact-list-stack\n[doc-list-depth] 1
-.
-. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
-. ie (\n[doc-list-depth] > 1) \{\
-. nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
-. ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
-. as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
-. length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
-. nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
-. \}
-. el \
-. tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
-. \}
-.
-. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
-. nr doc-arg-ptr +1
-. ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
-.
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 0 0
-. ie .\*[doc-str-dBla] \{\
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 1
-. doc-first-parameter \*[doc-str-dBla]
-. doc-get-width "\*[doc-str-dfp]
-. doc-get-arg-type "\*[doc-str-dfp]
-. ie (\n[doc-arg-type] == 1) \
-. nr doc-reg-dBla1 1
-. el \
-. nr doc-reg-dBla1 0
-. \}
-. el \
-. nr doc-reg-dBla1 0
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-. ie \n[doc-reg-dBla1] \{\
-. \" execute string in a box to get the width of the diversion
-. ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-. doc-save-global-vars
-. doc-reset-args
-. box doc-box-dBla
-. ev doc-env-dBla
-. evc 0
-. in 0
-. nf
-. nop \*[doc-str-dBla]
-. br
-. ev
-. box
-. doc-restore-global-vars
-. doc-get-width \h'\n[dl]u'
-. nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}
-. el \{\
-. \" test whether argument is a valid numeric expression
-. nr doc-reg-dBla1 0
-. if \B(\*[doc-str-dBla]) \{\
-. \" disable warnings related to scaling indicators (32)
-. nr doc-reg-dBla2 \n[.warn]
-. warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-. \" values without a scaling indicator are taken as strings;
-. \" we test whether the parameter string with and without the last
-. \" character yields identical numerical results (ignoring the
-. \" scaling indicator)
-. ds doc-str-dBla1 "\*[doc-str-dBla]
-. substring doc-str-dBla1 0 -2
-. if \B(\*[doc-str-dBla1]) \{\
-. nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-. nr doc-reg-dBla4 (\*[doc-str-dBla1])
-. if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-. nr doc-reg-dBla1 1
-. \}
-.
-. \" enable all warnings again
-. warn \n[doc-reg-dBla2]
-. \}
-.
-. ie \n[doc-reg-dBla1] \
-. nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
-. el \{\
-. doc-get-arg-width \n[doc-arg-ptr]
-. ie (\n[doc-width] == 2) \{\
-. \" if the width parameter is a macro, use the macro's
-. \" width as specified in doc-common
-. doc-get-arg-type \*[doc-str-dBla]
-. ie (\n[doc-arg-type] == 1) \
-. nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-. el \
-. nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}
-. el \
-. nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}\}\}
-.
-. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
-. nr doc-arg-ptr +1
-.
-. ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
-. nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
-. el \{\
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. nr doc-reg-dBla1 0
-. if \B(\*[doc-str-dBla]) \{\
-. nr doc-reg-dBla2 \n[.warn]
-. warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-. ds doc-str-dBla1 "\*[doc-str-dBla]
-. substring doc-str-dBla1 0 -2
-. if \B(\*[doc-str-dBla1]) \{\
-. nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-. nr doc-reg-dBla4 (\*[doc-str-dBla1])
-. if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-. nr doc-reg-dBla1 1
-. \}
-.
-. warn \n[doc-reg-dBla2]
-. \}
-.
-. ie \n[doc-reg-dBla1] \
-. nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
-. el \{\
-. doc-get-arg-width \n[doc-arg-ptr]
-. ie (\n[doc-width] <= 3) \{\
-. \" if the offset parameter is a macro, use the macro's
-. \" width as specified in doc-common
-. doc-get-arg-type \*[doc-str-dBla]
-. ie (\n[doc-arg-type] == 1) \
-. nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-. el \
-. nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}
-. el \
-. nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-. \}\}\}
-. el \
-. nr doc-reg-dBla 0
-. \}\}\}
-.
-. \" not a known keyword, so it specifies the width of the next column
-. \" (if it is a column list)
-. if !\n[doc-reg-dBla] \{\
-. ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-. nr doc-num-columns +1
-. ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 0 0
-. ie .\*[doc-str-dBla] \{\
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 1
-. doc-first-parameter \*[doc-str-dBla]
-. doc-get-width "\*[doc-str-dfp]
-. doc-get-arg-type "\*[doc-str-dfp]
-. ie (\n[doc-arg-type] == 1) \
-. nr doc-reg-dBla1 1
-. el \
-. nr doc-reg-dBla1 0
-. \}
-. el \
-. nr doc-reg-dBla1 0
-. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-. ie \n[doc-reg-dBla1] \{\
-. \" execute string in a box to get the width of the diversion
-. ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-. doc-save-global-vars
-. doc-reset-args
-. box doc-box-dBla
-. ev doc-env-dBla
-. evc 0
-. in 0
-. nf
-. nop \*[doc-str-dBla]
-. br
-. ev
-. box
-. doc-restore-global-vars
-. ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
-. \}
-. el \
-. ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \{\
-. tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
-. tm1 " in .Bl macro (#\n[.c])
-. \}\}
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
-. doc-do-Bl-args
-..
-.
-.
-.\" NS doc-save-global-vars macro
-.\" NS save all global variables
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dsgv
-.
-.de doc-save-global-vars
-. ds doc-macro-name-saved "\*[doc-macro-name]
-. nr doc-arg-limit-saved \n[doc-arg-limit]
-. nr doc-num-args-saved \n[doc-num-args]
-. nr doc-arg-ptr-saved \n[doc-arg-ptr]
-.
-. nr doc-reg-dsgv 1
-. while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
-. ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
-. nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
-. ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
-. nr doc-reg-dsgv +1
-. \}
-.
-. nr doc-curr-font-saved \n[doc-curr-font]
-. nr doc-curr-size-saved \n[doc-curr-size]
-. nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
-. nr doc-in-library-section-saved \n[doc-in-library-section]
-. nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
-. nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
-. nr doc-have-decl-saved \n[doc-have-decl]
-. nr doc-have-var-saved \n[doc-have-var]
-. ds doc-command-name-saved "\*[doc-command-name]
-. ds doc-quote-left-saved "\*[doc-quote-left]
-. ds doc-quote-right-saved "\*[doc-quote-right]
-. nr doc-nesting-level-saved \n[doc-nesting-level]
-. nr doc-in-list-saved \n[doc-in-list]
-. ds doc-space-saved "\*[doc-space]
-. ds doc-saved-space-saved "\*[doc-saved-space]
-. nr doc-space-mode-saved \n[doc-space-mode]
-. nr doc-have-space-saved \n[doc-have-space]
-. nr doc-have-slot-saved \n[doc-have-slot]
-. nr doc-keep-type-saved \n[doc-keep-type]
-. nr doc-display-depth-saved \n[doc-display-depth]
-. nr doc-is-compact-saved \n[doc-is-compact]
-.
-. nr doc-reg-dsgv 0
-. while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
-. ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
-. nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
-. nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
-. nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
-. nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
-. nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
-. nr doc-reg-dsgv +1
-. \}
-.
-. nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
-.
-. nr doc-reg-dsgv 1
-. while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
-. nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
-. nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
-. nr doc-reg-dsgv +1
-. \}
-.
-. nr doc-list-depth-saved \n[doc-list-depth]
-.
-. nr doc-reg-dsgv 1
-. while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
-. ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
-. nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
-. nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
-. nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
-. ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
-. ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
-. nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
-. nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
-. nr doc-reg-dsgv +1
-. \}
-.
-. ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
-. nr doc-curr-type-saved \n[doc-curr-type]
-. ds doc-curr-arg-saved "\*[doc-curr-arg]
-. nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
-. nr doc-num-columns-saved \n[doc-num-columns]
-. nr doc-column-indent-width-saved \n[doc-column-indent-width]
-. nr doc-is-func-saved \n[doc-is-func]
-. nr doc-have-old-func-saved \n[doc-have-old-func]
-. nr doc-func-arg-count-saved \n[doc-func-arg-count]
-. ds doc-func-arg-saved "\*[doc-func-arg]
-. nr doc-num-func-args-saved \n[doc-num-func-args]
-. nr doc-func-args-processed-saved \n[doc-func-args-processed]
-. nr doc-have-func-saved \n[doc-have-func]
-. nr doc-is-reference-saved \n[doc-is-reference]
-. nr doc-reference-count-saved \n[doc-reference-count]
-. nr doc-author-count-saved \n[doc-author-count]
-.
-. nr doc-reg-dsgv 0
-. while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
-. ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
-. nr doc-reg-dsgv +1
-. \}
-.
-. nr doc-book-count-saved \n[doc-book-count]
-. ds doc-book-name-saved "\*[doc-book-name]
-. nr doc-city-count-saved \n[doc-city-count]
-. ds doc-city-name-saved "\*[doc-city-name]
-. nr doc-date-count-saved \n[doc-date-count]
-. ds doc-date-saved "\*[doc-date]
-. nr doc-publisher-count-saved \n[doc-publisher-count]
-. ds doc-publisher-name-saved "\*[doc-publisher-name]
-. nr doc-journal-count-saved \n[doc-journal-count]
-. ds doc-journal-name-saved "\*[doc-journal-name]
-. nr doc-issue-count-saved \n[doc-issue-count]
-. ds doc-issue-name-saved "\*[doc-issue-name]
-. nr doc-optional-count-saved \n[doc-optional-count]
-. ds doc-optional-string-saved "\*[doc-optional-string]
-. nr doc-page-number-count-saved \n[doc-page-number-count]
-. ds doc-page-number-string-saved "\*[doc-page-number-string]
-. nr doc-corporate-count-saved \n[doc-corporate-count]
-. ds doc-corporate-name-saved "\*[doc-corporate-name]
-. nr doc-report-count-saved \n[doc-report-count]
-. ds doc-report-name-saved "\*[doc-report-name]
-. nr doc-reference-title-count-saved \n[doc-reference-title-count]
-. ds doc-reference-title-name-saved "\*[doc-reference-title-name]
-. ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
-. nr doc-url-count-saved \n[doc-url-count]
-. ds doc-url-name-saved "\*[doc-url-name]
-. nr doc-volume-count-saved \n[doc-volume-count]
-. ds doc-volume-name-saved "\*[doc-volume-name]
-. nr doc-have-author-saved \n[doc-have-author]
-.
-. ds doc-document-title-saved "\*[doc-document-title]
-. ds doc-volume-saved "\*[doc-volume]
-. ds doc-section-saved "\*[doc-section]
-. ds doc-operating-system-saved "\*[doc-operating-system]
-. ds doc-date-string-saved "\*[doc-date-string]
-. nr doc-header-space-saved \n[doc-header-space]
-. nr doc-footer-space-saved \n[doc-footer-space]
-. nr doc-display-vertical-saved \n[doc-display-vertical]
-. ds doc-header-string-saved "\*[doc-header-string]
-. nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
-. nr doc-in-files-section-saved \n[doc-in-files-section]
-. nr doc-in-authors-section-saved \n[doc-in-authors-section]
-..
-.
-.
-.\" NS doc-restore-global-vars macro
-.\" NS restore all global variables
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-drgv
-.
-.de doc-restore-global-vars
-. ds doc-macro-name "\*[doc-macro-name-saved]
-. nr doc-arg-limit \n[doc-arg-limit-saved]
-. nr doc-num-args \n[doc-num-args-saved]
-. nr doc-arg-ptr \n[doc-arg-ptr-saved]
-.
-. nr doc-reg-drgv 1
-. while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
-. ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
-. nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
-. ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
-. nr doc-reg-drgv +1
-. \}
-.
-. nr doc-curr-font \n[doc-curr-font-saved]
-. nr doc-curr-size \n[doc-curr-size-saved]
-. nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
-. nr doc-in-library-section \n[doc-in-library-section-saved]
-. nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
-. nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
-. nr doc-have-decl \n[doc-have-decl-saved]
-. nr doc-have-var \n[doc-have-var-saved]
-. ds doc-command-name "\*[doc-command-name-saved]
-. ds doc-quote-left "\*[doc-quote-left-saved]
-. ds doc-quote-right "\*[doc-quote-right-saved]
-. nr doc-nesting-level \n[doc-nesting-level-saved]
-. nr doc-in-list \n[doc-in-list-saved]
-. ds doc-space "\*[doc-space-saved]
-. ds doc-saved-space "\*[doc-saved-space-saved]
-. nr doc-space-mode \n[doc-space-mode-saved]
-. nr doc-have-space \n[doc-have-space-saved]
-. nr doc-have-slot \n[doc-have-slot-saved]
-. nr doc-keep-type \n[doc-keep-type-saved]
-. nr doc-display-depth \n[doc-display-depth-saved]
-. nr doc-is-compact \n[doc-is-compact-saved]
-.
-. nr doc-reg-drgv 0
-. while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
-. ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
-. nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
-. nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
-. nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
-. nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
-. nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
-. nr doc-reg-drgv +1
-. \}
-.
-. nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
-.
-. nr doc-reg-drgv 1
-. while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
-. nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
-. nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
-. nr doc-reg-drgv +1
-. \}
-.
-. nr doc-list-depth \n[doc-list-depth-saved]
-.
-. nr doc-reg-drgv 1
-. while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
-. ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
-. nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
-. nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
-. nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
-. ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
-. ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
-. nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
-. nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
-. nr doc-reg-drgv +1
-. \}
-.
-. ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
-. nr doc-curr-type \n[doc-curr-type-saved]
-. ds doc-curr-arg "\*[doc-curr-arg-saved]
-. nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
-. nr doc-num-columns \n[doc-num-columns-saved]
-. nr doc-column-indent-width \n[doc-column-indent-width-saved]
-. nr doc-is-func \n[doc-is-func-saved]
-. nr doc-have-old-func \n[doc-have-old-func-saved]
-. nr doc-func-arg-count \n[doc-func-arg-count-saved]
-. ds doc-func-arg "\*[doc-func-arg-saved]
-. nr doc-num-func-args \n[doc-num-func-args-saved]
-. nr doc-func-args-processed \n[doc-func-args-processed-saved]
-. nr doc-have-func \n[doc-have-func-saved]
-. nr doc-is-reference \n[doc-is-reference-saved]
-. nr doc-reference-count \n[doc-reference-count-saved]
-. nr doc-author-count \n[doc-author-count-saved]
-.
-. nr doc-reg-drgv 0
-. while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
-. ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
-. nr doc-reg-drgv +1
-. \}
-.
-. nr doc-book-count \n[doc-book-count-saved]
-. ds doc-book-name "\*[doc-book-name-saved]
-. nr doc-city-count \n[doc-city-count-saved]
-. ds doc-city-name "\*[doc-city-name-saved]
-. nr doc-date-count \n[doc-date-count-saved]
-. ds doc-date "\*[doc-date-saved]
-. nr doc-publisher-count \n[doc-publisher-count-saved]
-. ds doc-publisher-name "\*[doc-publisher-name-saved]
-. nr doc-journal-count \n[doc-journal-count-saved]
-. ds doc-journal-name "\*[doc-journal-name-saved]
-. nr doc-issue-count \n[doc-issue-count-saved]
-. ds doc-issue-name "\*[doc-issue-name-saved]
-. nr doc-optional-count \n[doc-optional-count-saved]
-. ds doc-optional-string "\*[doc-optional-string-saved]
-. nr doc-page-number-count \n[doc-page-number-count-saved]
-. ds doc-page-number-string "\*[doc-page-number-string-saved]
-. nr doc-corporate-count \n[doc-corporate-count-saved]
-. ds doc-corporate-name "\*[doc-corporate-name-saved]
-. nr doc-report-count \n[doc-report-count-saved]
-. ds doc-report-name "\*[doc-report-name-saved]
-. nr doc-reference-title-count \n[doc-reference-title-count-saved]
-. ds doc-reference-title-name "\*[doc-reference-title-name-saved]
-. ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
-. nr doc-url-count \n[doc-url-count-saved]
-. ds doc-url-name "\*[doc-url-name-saved]
-. nr doc-volume-count \n[doc-volume-count-saved]
-. ds doc-volume-name "\*[doc-volume-name-saved]
-. nr doc-have-author \n[doc-have-author-saved]
-.
-. ds doc-document-title "\*[doc-document-title-saved]
-. ds doc-volume "\*[doc-volume-saved]
-. ds doc-section "\*[doc-section-saved]
-. ds doc-operating-system "\*[doc-operating-system-saved]
-. ds doc-date-string "\*[doc-date-string-saved]
-. nr doc-header-space \n[doc-header-space-saved]
-. nr doc-footer-space \n[doc-footer-space-saved]
-. nr doc-display-vertical \n[doc-display-vertical-saved]
-. ds doc-header-string "\*[doc-header-string-saved]
-. nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
-. nr doc-in-files-section \n[doc-in-files-section-saved]
-. nr doc-in-authors-section \n[doc-in-authors-section-saved]
-..
-.
-.
-.\" NS El user macro
-.\" NS end list
-.\" NS
-.\" NS modifies:
-.\" NS doc-list-depth
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-str-El
-.\" NS
-.\" NS width register `El' set in doc-common
-.
-.de El
-. if \n[.$] \{\
-. tm Usage: .El (does not take arguments) (#\n[.c])
-. return
-. \}
-.
-. ds doc-macro-name El
-. ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
-.
-. ie "\*[doc-str-El]"diag-list" \
-. doc-end-list 0
-. el \{ .ie "\*[doc-str-El]"column-list" \
-. doc-end-column-list
-. el \{ .ie "\*[doc-str-El]"item-list" \
-. doc-end-list 0
-. el \{ .ie "\*[doc-str-El]"ohang-list" \
-. doc-end-list 0
-. el \{ .ie "\*[doc-str-El]"inset-list" \
-. doc-end-list 0
-. el \
-. doc-end-list 1
-. \}\}\}\}
-.
-. br
-..
-.
-.
-.\" NS doc-saved-Pa-font global string
-.\" NS saved doc-Pa-font string for section FILES (no underline if
-.\" NS nroff)
-.
-.ds doc-saved-Pa-font
-.
-.
-.\" NS doc-curr-type global register
-.\" NS current argument type
-.
-.nr doc-curr-type 0
-.
-.
-.\" NS doc-curr-arg global string
-.\" NS current argument
-.
-.ds doc-curr-arg
-.
-.
-.\" NS doc-item-boxXXX global box
-.\" NS item boxes associated list depth
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.
-.\" NS It user macro
-.\" NS list item
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-curr-arg
-.\" NS doc-curr-type
-.\" NS doc-in-list
-.\" NS doc-macro-name
-.\" NS doc-num-args
-.\" NS doc-saved-Pa-font
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-It
-.\" NS doc-str-It
-.\" NS doc-XXX-list-type
-.\" NS
-.\" NS width register `It' set in doc-common
-.
-.nr doc-bullet-list-type 1
-.nr doc-column-list-type 0
-.nr doc-dash-list-type 1
-.nr doc-diag-list-type 0
-.nr doc-enum-list-type 1
-.nr doc-hang-list-type 2
-.nr doc-inset-list-type 2
-.nr doc-item-list-type 1
-.nr doc-ohang-list-type 2
-.nr doc-tag-list-type 2
-.
-.de It
-. ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
-.
-. if "\*[doc-str-It]"" \
-. tm mdoc error: .It without preceding .Bl (#\n[.c])
-.
-. if \n[doc-nesting-level] \{\
-. tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
-. tm1 " (#\n[.c])
-. \}
-.
-. br
-. if !\n[cR] \
-. ne 3v
-.
-. if \n[.$] \{\
-. ds doc-macro-name It
-.
-. \" fill argument vector
-. nr doc-reg-It 1
-. while (\n[doc-reg-It] <= \n[.$]) \{\
-. ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
-. nr doc-reg-It +1
-. \}
-.
-. nr doc-num-args \n[.$]
-. nr doc-arg-ptr 0
-. \}
-.
-. nr doc-reg-It \n[doc-\*[doc-str-It]-type]
-.
-. if \n[doc-reg-It] \{\
-. \" start item box
-. box doc-item-box\n[doc-list-depth]
-. ev doc-item-env\n[doc-list-depth]
-. evc 0
-. in 0
-. nf
-. \}
-.
-. ie (\n[doc-reg-It] == 1) \{\
-. if \n[.$] \{\
-. tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-. tm1 " don't take arguments (#\n[.c])
-. \}\}
-. el \{\
-. ie \n[.$] \{\
-. if (\n[doc-reg-It] == 2) \{\
-. \" handle list types with arguments
-. doc-parse-arg-vector
-.
-. nr doc-in-list 1
-. nr doc-arg-ptr 1
-. nr doc-curr-type \n[doc-type1]
-. ds doc-curr-arg "\*[doc-arg1]
-.
-. if \n[doc-in-files-section] \{\
-. ds doc-saved-Pa-font "\*[doc-Pa-font]
-. if n \
-. ds doc-Pa-font "\*[doc-No-font]
-. \}
-.
-. ie (\n[doc-type1] == 1) \
-. \*[doc-arg1]
-. el \{\
-. nr doc-arg-ptr 1
-. doc-print-recursive
-. \}\}\}
-. el \{\
-. tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-. tm1 " require arguments (#\n[.c])
-. \}
-. \}
-.
-. \" the previous call of `.doc-print-recursive' can contain calls to
-. \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
-. if !\n[doc-nesting-level] \
-. doc-\*[doc-str-It]
-..
-.
-.
-.\" NS doc-inset-list macro
-.\" NS .It item of list-type inset
-.\" NS
-.\" NS modifies:
-.\" NS doc-in-list
-.
-.de doc-inset-list
-. \" finish item box
-. br
-. ev
-. box
-. unformat doc-item-box\n[doc-list-depth]
-.
-. doc-set-vertical-and-indent 0
-. br
-.
-. nh
-. doc-item-box\n[doc-list-depth]
-.
-. if \n[doc-in-files-section] \
-. if n \
-. ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-. nr doc-in-list 0
-. doc-reset-args
-..
-.
-.
-.\" NS doc-hang-list macro
-.\" NS .It item of list-type hanging tag (as opposed to tagged)
-.\" NS
-.\" NS modifies:
-.\" NS doc-have-space
-.\" NS doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dhl
-.\" NS doc-reg-dhl1
-.
-.de doc-hang-list
-. \" finish item box
-. br
-. ev
-. box
-. unformat doc-item-box\n[doc-list-depth]
-.
-. doc-set-vertical-and-indent 1
-. nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-. ti -\n[doc-reg-dhl]u
-.
-. nh
-. ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-. doc-item-box\n[doc-list-depth]
-. el \{\
-. chop doc-item-box\n[doc-list-depth]
-. nr doc-reg-dhl1 \n[.k]u
-. nop \*[doc-item-box\n[doc-list-depth]]\c
-. nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
-. nr doc-have-space 1
-. \}
-.
-. if \n[doc-in-files-section] \
-. if n \
-. ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-. nr doc-in-list 0
-. doc-reset-args
-..
-.
-.
-.\" NS doc-ohang-list macro
-.\" NS .It item of list-type overhanging tag
-.\" NS
-.\" NS modifies:
-.\" NS doc-in-list
-.
-.de doc-ohang-list
-. \" finish item box
-. br
-. ev
-. box
-. unformat doc-item-box\n[doc-list-depth]
-.
-. doc-set-vertical-and-indent 0
-. nh
-. doc-item-box\n[doc-list-depth]
-. br
-.
-. if \n[doc-in-files-section] \
-. if n \
-. ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-. nr doc-in-list 0
-. doc-reset-args
-..
-.
-.
-.\" NS doc-item-list macro
-.\" NS .It item of list-type [empty tag]
-.
-.de doc-item-list
-. \" finish (dummy) item box
-. br
-. ev
-. box
-.
-. doc-set-vertical-and-indent 0
-. br
-.
-. doc-reset-args
-..
-.
-.
-.\" NS doc-enum-list-count-stackXXX global register
-.\" NS stack of current enum count values
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.nr doc-enum-list-count-stack1 0
-.
-.
-.\" NS doc-enum-list macro
-.\" NS enumerated list
-.\" NS
-.\" NS modifies:
-.\" NS doc-enum-list-count-stackXXX
-.\" NS doc-in-list
-.
-.de doc-enum-list
-. nr doc-in-list 1
-. nr doc-enum-list-count-stack\n[doc-list-depth] +1
-\# XXX
-\#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
-\#.rj
-. nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
-. nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
-. doc-do-list
-..
-.
-.
-.\" NS doc-bullet-list macro
-.\" NS bullet paragraph list
-.\" NS
-.\" NS modifies:
-.\" NS doc-in-list
-.
-.de doc-bullet-list
-. nr doc-in-list 1
-. nop \)\*[doc-Sy-font]\[bu]\f[]
-. doc-do-list
-..
-.
-.
-.\" NS doc-dash-list macro
-.\" NS hyphen paragraph list (sub bullet list)
-.\" NS
-.\" NS modifies:
-.\" NS doc-in-list
-.
-.de doc-dash-list
-. nr doc-in-list 1
-. nop \)\*[doc-Sy-font]\-\f[]
-. doc-do-list
-..
-.
-.
-.\" NS doc-do-list macro
-.\" NS .It item of list-type enum/bullet/hyphen
-.
-.als doc-do-list doc-hang-list
-.
-.
-.\" NS doc-diag-list-input-line-count global register
-.\" NS saved line number to be checked in next diag-list item
-.
-.nr doc-diag-list-input-line-count 0
-.
-.
-.\" NS doc-diag-list macro
-.\" NS .It item of list-type diagnostic-message
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-diag-list-input-line-count
-.
-.de doc-diag-list
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
-. ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
-. doc-paragraph
-. el \
-. br
-. \}
-. el \
-. br
-. nr doc-diag-list-input-line-count \n[.c]
-.
-. nh
-. nop \*[doc-Sy-font]\c
-. if \n[doc-num-args] \
-. doc-remaining-args
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
-.
-. doc-print-and-reset
-..
-.
-.
-.\" NS doc-tag-list macro
-.\" NS .It item of list-type `tag'
-.\" NS
-.\" NS modifies:
-.\" NS doc-have-space
-.\" NS doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS doc-box-dtl
-.\" NS doc-reg-dtl
-.\" NS doc-reg-dtl1
-.
-.de doc-tag-list
-. \" finish item box
-. br
-. ev
-. box
-. unformat doc-item-box\n[doc-list-depth]
-.
-. \" we use a box without `.nf' to compute the tag width (via `dl' register)
-. box doc-box-dtl
-. ev doc-env-dtl
-. evc 0
-. fi
-. ad 0
-. in 0
-. doc-item-box\n[doc-list-depth]
-. br
-. ev
-. box
-.
-. if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
-. if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-. in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-. nr doc-list-have-indent-stack\n[doc-list-depth] 1
-. \}
-. doc-get-tag-width
-. \}
-. doc-set-vertical-and-indent 1
-. nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-. ti -\n[doc-reg-dtl]u
-.
-. nh
-. doc-item-box\n[doc-list-depth]
-. ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-. br
-. el \{\
-. \" format the tag separately to prevent stretching of spaces
-. vpt 0
-. br
-. sp -1
-. vpt 1
-. nop \&\c
-. nr doc-have-space 1
-. \}
-.
-. if \n[doc-in-files-section] \
-. if n \
-. ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-. nr doc-in-list 0
-. doc-reset-args
-..
-.
-.
-.\" NS doc-get-tag-width macro
-.\" NS resolve unknown tag width (`tag' list-type only)
-.\" NS
-.\" NS modifies:
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-tag-width-stackXXX
-.\" NS
-.\" NS requires:
-.\" NS doc-curr-arg
-.\" NS doc-curr-type
-.
-.de doc-get-tag-width
-. ie (\n[doc-curr-type] == 1) \{\
-. ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
-. nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
-. \}
-. el \{\
-. ds doc-tag-width-stack\n[doc-list-depth] No
-. nr doc-list-indent-stack\n[doc-list-depth] \n[No]
-. \}
-..
-.
-.
-.\" NS doc-set-vertical-and-indent macro
-.\" NS set up vertical spacing (if not compact) and indentation (with
-.\" NS offset if argument is non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS doc-list-have-indent-stackXXX
-.
-.de doc-set-vertical-and-indent
-. if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-. sp \n[doc-display-vertical]u
-.
-. if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-. nr doc-list-have-indent-stack\n[doc-list-depth] 0
-. if \$1 \
-. in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-. \}
-.
-. if !\n[cR] \
-. ne 2v
-..
-.
-.
-.\" NS doc-list-depth global register
-.\" NS list type stack counter
-.
-.nr doc-list-depth 0
-.
-.
-.\" NS doc-num-columns global register
-.\" NS number of columns
-.
-.nr doc-num-columns 0
-.
-.
-.\" NS doc-compact-list-stackXXX global register (bool)
-.\" NS stack of flags to indicate whether a particular list is compact
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.nr doc-compact-list-stack1 0
-.
-.
-.\" NS doc-tag-prefix-stackXXX global string
-.\" NS stack of tag prefixes (currently used for -nested -enum lists)
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.ds doc-tag-prefix-stack1
-.
-.
-.\" NS doc-tag-width-stackXXX global string
-.\" NS stack of strings indicating how to set up current element of
-.\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
-.\" NS directly; if it is a macro name, use the macro's width value;
-.\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.ds doc-tag-width-stack0
-.ds doc-tag-width-stack1
-.
-.
-.\" NS doc-list-offset-stackXXX global register
-.\" NS stack of list offsets
-.\" NS
-.\" NS limit:
-.\" NS doc-list-depth
-.
-.nr doc-list-offset-stack1 0
-.
-.
-.\" NS doc-end-list macro
-.\" NS list end function; resets indentation (and offset if argument is
-.\" NS non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS doc-list-depth
-.\" NS doc-list-offset-stackXXX
-.
-.de doc-end-list
-. if \$1 \
-' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.
-' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-. if (\n[doc-list-depth] <= 0) \
-. tm mdoc warning: extraneous .El call (#\n[.c])
-.
-. doc-decrement-list-stack
-. nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-increment-list-stack macro
-.\" NS set up next block for list
-.\" NS
-.\" NS modifies:
-.\" NS doc-compact-list-stackXXX
-.\" NS doc-list-have-indent-stackXXX
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-list-offset-stackXXX
-.\" NS doc-list-type-stackXXX
-.\" NS doc-tag-prefix-stackXXX
-.\" NS doc-tag-width-stackXXX
-.\" NS doc-enum-list-count-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dils
-.
-.de doc-increment-list-stack
-. nr doc-reg-dils (\n[doc-list-depth] + 1)
-. nr doc-list-have-indent-stack\n[doc-reg-dils] 0
-. nr doc-list-indent-stack\n[doc-reg-dils] 0
-. nr doc-list-offset-stack\n[doc-reg-dils] 0
-. ds doc-tag-prefix-stack\n[doc-reg-dils]
-. ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
-. ds doc-list-type-stack\n[doc-reg-dils]
-. nr doc-compact-list-stack\n[doc-reg-dils] 0
-. nr doc-enum-list-count-stack\n[doc-reg-dils] 0
-..
-.
-.
-.\" NS doc-decrement-list-stack macro
-.\" NS decrement stack
-.\" NS
-.\" NS modifies:
-.\" NS doc-compact-list-stackXXX
-.\" NS doc-list-have-indent-stackXXX
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-list-offset-stackXXX
-.\" NS doc-list-type-stackXXX
-.\" NS doc-tag-prefix-stackXXX
-.\" NS doc-tag-width-stackXXX
-.\" NS doc-enum-list-count-stackXXX
-.
-.de doc-decrement-list-stack
-. ds doc-list-type-stack\n[doc-list-depth]
-. nr doc-list-have-indent-stack\n[doc-list-depth] 0
-. nr doc-list-indent-stack\n[doc-list-depth] 0
-. nr doc-list-offset-stack\n[doc-list-depth] 0
-. ds doc-tag-prefix-stack\n[doc-list-depth]
-. ds doc-tag-width-stack\n[doc-list-depth]
-. nr doc-compact-list-stack\n[doc-list-depth] 0
-. nr doc-enum-list-count-stack\n[doc-list-depth] 0
-..
-.
-.
-.\" NS Xr user macro
-.\" NS cross reference (for man pages only)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Xr
-.\" NS
-.\" NS width register `Xr' set in doc-common
-.
-.de Xr
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Xr
-. doc-parse-args \$@
-. \}
-. el \
-. doc-Xr-usage
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. \" first argument must be a string
-. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
-.
-. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-. nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
-. \" modify second argument if it is a string and
-. \" remove space in between
-. if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
-. ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
-. ds doc-space\n[doc-arg-ptr]
-. \}
-. \}
-. doc-print-recursive
-. \}
-. el \
-. doc-Xr-usage
-. \}
-. el \
-. doc-Xr-usage
-..
-.
-.
-.\" NS doc-Xr-usage macro
-.
-.de doc-Xr-usage
-. tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
-. doc-reset-args
-..
-.
-.
-.\" NS Sx user macro
-.\" NS cross section reference
-.\" NS
-.\" NS width register `Sx' set in doc-common
-.
-.als Sx doc-generic-macro
-.ds doc-Sx-usage section_header
-.
-.
-.\" NS doc-end-column-list macro
-.\" NS column-list end-list
-.\" NS
-.\" NS modifies:
-.\" NS doc-list-depth
-.
-.de doc-end-column-list
-. linetabs 0
-' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
-. ta T .5i
-. fi
-. doc-decrement-list-stack
-. nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-column-indent-width global register
-.\" NS holds the indent width for a column list
-.
-.nr doc-column-indent-width 0
-.
-.
-.\" NS doc-set-column-tab macro
-.\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
-.\" NS
-.\" NS modifies:
-.\" NS doc-column-indent-width
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dsct
-.\" NS doc-str-dsct
-.\" NS doc-str-dsct1
-.
-.de doc-set-column-tab
-. ds doc-str-dsct
-. nr doc-reg-dsct 1
-. nr doc-column-indent-width 0
-.
-. ie (\$1 < 5) \
-. ds doc-str-dsct1 " \"
-. el \{\
-. ie (\$1 == 5) \
-. ds doc-str-dsct1 " \"
-. el \{\
-. \" XXX: this is packed abnormally close -- intercolumn width
-. \" should be configurable
-. ds doc-str-dsct1 " \"
-. \}\}
-.
-. while (\n[doc-reg-dsct] <= \$1) \{\
-. as doc-str-dsct " +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
-. nr doc-column-indent-width +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
-. nr doc-reg-dsct +1
-. \}
-.
-. ta \*[doc-str-dsct]
-' in +\n[doc-column-indent-width]u
-..
-.
-.
-.\" NS doc-column-list macro
-.\" NS column items
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-list-indent-stackXXX
-.\" NS doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dcl
-.
-.de doc-column-list
-. if \n[doc-num-args] \
-. doc-parse-arg-vector
-. nr doc-arg-ptr +1
-.
-. if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
-. return
-. \}
-.
-. if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
-. nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
-. ds doc-space\n[doc-reg-dcl]
-. \}
-.
-. if !\n[doc-list-indent-stack\n[doc-list-depth]] \
-. nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
-. if !\n[.u] \{\
-. fi
-. in +\n[doc-column-indent-width]u
-. \}
-. ti -\n[doc-column-indent-width]u
-.
-. doc-do-\n[doc-type\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS Ta user macro
-.\" NS append tab (\t)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS
-.\" NS width register `Ta' set in doc-common
-.
-.de Ta
-. ie \n[doc-arg-limit] \{\
-. nr doc-arg-ptr +1
-. nop \*[doc-tab]\c
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-. doc-do-\n[doc-type\n[doc-arg-ptr]]
-. el \
-. doc-reset-args
-. \}
-. el \{\
-. tm1 "Usage: Ta must follow column entry: e.g.
-. tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
-. \}
-..
-.
-.
-.\" NS Dl user macro
-.\" NS display (one line) literal
-.\" NS
-.\" NS this function uses the `Li' font
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Dl' set in doc-common
-.
-.de Dl
-. ta T .5i
-. in +\n[doc-display-indent]u
-.
-. ie \n[doc-arg-limit] \{\
-. tm Usage: .Dl not callable by other macros (#\n[.c])
-. doc-reset-args
-. \}
-. el \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Dl
-. doc-parse-args \$@
-. nr doc-arg-ptr 1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Li-font]\c
-. doc-print-recursive
-. \}
-. el \
-. tm Usage: .Dl argument ... (#\n[.c])
-. \}
-.
-. in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS D1 user macro
-.\" NS display (one line)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `D1' set in doc-common
-.
-.de D1
-. ta T .5i
-. in +\n[doc-display-indent]u
-.
-. ie \n[doc-arg-limit] \{\
-. tm Usage: .D1 not callable by other macros (#\n[.c])
-. doc-reset-args
-. \}
-. el \{\
-. ie \n[.$] \{\
-. ds doc-macro-name D1
-. doc-parse-args \$@
-. nr doc-arg-ptr 1
-. doc-print-recursive
-. \}
-. el \
-. tm Usage: .D1 argument ... (#\n[.c])
-. \}
-.
-. in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS Vt user macro
-.\" NS variable type (for forcing old style variable declarations);
-.\" NS this is not done in the same manner as .Ot for fortrash --
-.\" NS clean up later
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-have-decl
-.\" NS doc-have-var
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Vt' set in doc-common
-.
-.de Vt
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Vt
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Vt variable_type ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. tm Usage: .Vt variable_type ... (#\n[.c])
-. doc-reset-args
-. return
-. \}
-.
-. if \n[doc-in-synopsis-section] \{\
-. \" if a function declaration was the last thing given,
-. \" want vertical space
-. if \n[doc-have-decl] \{\
-. doc-paragraph
-. nr doc-have-decl 0
-. \}
-.
-. \" if a subroutine was the last thing given, want vertical space
-. if \n[doc-have-func] \{\
-. ie \n[doc-have-var] \
-. br
-. el \
-. doc-paragraph
-. \}
-.
-. nr doc-have-var 1
-. \}
-.
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Ft-font]\c
-. doc-print-recursive
-.
-. if \n[doc-in-synopsis-section] \{\
-. ie \n[doc-have-old-func] \
-. nop \*[doc-soft-space]\c
-. el \
-. br
-. \}
-..
-.
-.
-.\" NS doc-is-func global register (bool)
-.\" NS set if subroutine (in synopsis only) (fortran only)
-.
-.nr doc-is-func 0
-.
-.
-.\" NS Ft user macro
-.\" NS function type
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-have-decl
-.\" NS doc-have-var
-.\" NS doc-is-func
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Ft' set in doc-common
-.
-.de Ft
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Ft
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Ft function_type ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. nr doc-arg-ptr +1
-. if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. tm Usage: .Ft function_type ... (#\n[.c])
-. doc-reset-args
-. return
-. \}
-.
-. if \n[doc-in-synopsis-section] \{\
-. if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-. doc-paragraph
-. nr doc-have-decl 0
-. nr doc-have-var 0
-. \}
-.
-. if \n[doc-have-var] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. \}
-.
-. nr doc-is-func 1
-. \}
-.
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Ft-font]\c
-. doc-print-recursive
-..
-.
-.
-.\" NS doc-have-old-func global register (bool)
-.\" NS set if `Ot' has been called
-.
-.nr doc-have-old-func 0
-.
-.
-.\" NS Ot user macro
-.\" NS old function type (fortran -- no newline)
-.\" NS
-.\" NS modifies:
-.\" NS doc-have-decl
-.\" NS doc-have-old-func
-.\" NS doc-have-var
-.\" NS doc-is-func
-.\" NS
-.\" NS width register `Ot' set in doc-common
-.
-.de Ot
-. nr doc-have-old-func 1
-.
-. if \n[doc-in-synopsis-section] \{\
-. if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-. doc-paragraph
-. nr doc-have-decl 0
-. nr doc-have-var 0
-. \}
-.
-. if \n[doc-have-var] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. \}
-.
-. nr doc-is-func 1
-. \}
-.
-. if \n[.$] \
-. nop \*[doc-Ft-font]\$*\c
-. nop \ \f[]\c
-..
-.
-.
-.\" NS Fa user macro
-.\" NS function arguments
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Fa' set in doc-common
-.
-.de Fa
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Fa
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Fa function_arguments ... (#\n[.c])
-. \}
-.
-. ie \n[doc-func-arg-count] \
-. doc-do-func
-. el \{\
-. nr doc-arg-ptr +1
-. if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Fa-font]\c
-. doc-print-recursive
-.
-. if \n[doc-in-synopsis-section] \
-. if \n[doc-have-func] \
-. br
-. \}\}
-..
-.
-.
-.\" NS doc-func-arg-count global register
-.\" NS how many function arguments have been processed so far
-.
-.nr doc-func-arg-count 0
-.
-.
-.\" NS doc-func-arg global string
-.\" NS work buffer for function name strings
-.
-.ds doc-func-arg
-.
-.
-.\" NS doc-num-func-args global register
-.\" NS number of function arguments
-.
-.nr doc-num-func-args 0
-.
-.
-.\" NS doc-func-args-processed global register
-.\" NS function arguments processed so far
-.
-.nr doc-func-args-processed 0
-.
-.
-.\" NS doc-do-func macro
-.\" NS internal .Fa for .Fc
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-func-arg
-.\" NS doc-func-arg-count
-.\" NS doc-func-args-processed
-.\" NS doc-num-func-args
-.
-.de doc-do-func
-. if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
-. doc-reset-args
-. return
-. \}
-.
-. nr doc-arg-ptr +1
-.
-. ds doc-func-arg
-. nr doc-num-func-args 0
-. nr doc-func-args-processed 0
-.
-. doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-. if (\n[doc-num-func-args] > 1) \
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-.
-. if (\n[doc-func-arg-count] > 1) \{\
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-. if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-. if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-. nop ,\)\c
-. nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-. \}
-.
-. if (\n[doc-func-arg-count] == 1) \{\
-. nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[]\s[0]\c
-. \}
-. nr doc-func-arg-count +1
-. doc-do-func
-..
-.
-.
-.\" NS doc-have-func global register (bool)
-.\" NS whether we have more than one function in synopsis
-.
-.nr doc-have-func 0
-.
-.
-.\" NS Fn user macro
-.\" NS functions
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-have-decl
-.\" NS doc-have-func
-.\" NS doc-have-var
-.\" NS doc-indent-synopsis
-.\" NS doc-is-func
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Fn' set in doc-common
-.
-.de Fn
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Fn
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-. \}
-.
-. if !\n[doc-arg-limit] \
-. return
-.
-. if \n[doc-in-synopsis-section] \{\
-. \" if there is/has been more than one subroutine declaration
-. ie \n[doc-is-func] \{\
-. br
-. nr doc-have-var 0
-. nr doc-have-decl 0
-. nr doc-is-func 0
-. \}
-. el \{\
-. if \n[doc-have-func] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. nr doc-have-decl 0
-. \}\}
-.
-. if \n[doc-have-decl] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. \}
-.
-. if \n[doc-have-var] \{\
-. doc-paragraph
-. nr doc-have-decl 0
-. \}
-.
-. nr doc-have-func 1
-. nr doc-is-func 0
-.
-. br
-. if !\n[doc-indent-synopsis] \
-. nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-. if !\n[doc-indent-synopsis-active] \
-. in +\n[doc-indent-synopsis]u
-. ti -\n[doc-indent-synopsis]u
-. \}
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-. doc-reset-args
-. return
-. \}
-.
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[]\s[0]\*[lp]\)\c
-.
-. nr doc-arg-ptr +1
-. if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. nop \*[doc-Fa-font]\c
-. doc-do-func-args
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. \}\}
-.
-. nop \)\*[rp]\)\c
-. if \n[doc-in-synopsis-section] \
-. nop \);\)\c
-.
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. \" output the space (if needed)
-. nr doc-arg-ptr -1
-. nop \)\*[doc-space\n[doc-arg-ptr]]\c
-. nr doc-arg-ptr +1
-.
-. doc-print-recursive
-. \}
-. el \
-. doc-print-and-reset
-.
-. if \n[doc-in-synopsis-section] \
-. if !\n[doc-indent-synopsis-active] \
-. in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-do-func-args macro
-.\" NS handle function arguments
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-argXXX
-.\" NS doc-func-arg
-.\" NS doc-func-args-processed
-.\" NS doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-ddfa
-.
-.de doc-do-func-args
-. if \n[doc-in-synopsis-section] \{\
-. ds doc-func-arg
-. nr doc-num-func-args 0
-. nr doc-func-args-processed 0
-.
-. doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-. if (\n[doc-num-func-args] > 1) \
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-. \}
-.
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-. nr doc-arg-ptr +1
-.
-. if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-. nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
-. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-. if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-. if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-. nop ,\)\c
-. nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
-. doc-do-func-args
-. \}\}
-..
-.
-.
-.\" NS doc-saved-nesting-level global register
-.
-.nr doc-saved-nesting-level 0
-.
-.
-.\" NS doc-in-func-enclosure global register (bool)
-.
-.nr doc-in-func-enclosure 0
-.
-.
-.\" NS Fo user macro
-.\" NS function open
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-func-arg-count
-.\" NS doc-have-decl
-.\" NS doc-have-func
-.\" NS doc-have-var
-.\" NS doc-in-func-enclosure
-.\" NS doc-indent-synopsis
-.\" NS doc-is-func
-.\" NS doc-macro-name
-.\" NS doc-saved-nesting-level
-.\" NS
-.\" NS width register `Fo' set in doc-common
-.
-.de Fo
-. if (\n[doc-in-func-enclosure]) \{\
-. tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
-. return
-. \}
-.
-. nr doc-saved-nesting-level \n[doc-nesting-level]
-. nr doc-in-func-enclosure 1
-.
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ds doc-macro-name Fo
-. doc-parse-args \$@
-. \}
-. el \
-. tm Usage: .Fo function_name (#\n[.c])
-. \}
-.
-. if \n[doc-in-synopsis-section] \{\
-. \" if there is/has been more than one subroutine declaration
-. ie \n[doc-is-func] \{\
-. br
-. nr doc-have-var 0
-. nr doc-have-decl 0
-. nr doc-is-func 0
-. \}
-. el \{\
-. if \n[doc-have-func] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. nr doc-have-decl 0
-. \}\}
-.
-. if \n[doc-have-decl] \{\
-. doc-paragraph
-. nr doc-have-var 0
-. \}
-.
-. if \n[doc-have-var] \{\
-. doc-paragraph
-. nr doc-have-decl 0
-. \}
-.
-. nr doc-have-func 1
-. nr doc-is-func 0
-.
-. br
-. if !\n[doc-indent-synopsis] \
-. nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-. \}
-.
-. \" start function box
-. box doc-func-box
-. ev doc-func-env
-. evc 0
-. in 0
-. nf
-.
-. nr doc-arg-ptr +1
-. doc-print-prefixes
-. if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-func-arg-count 1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[]\s[0]\*[lp]\)\c
-. doc-reset-args
-. \}
-..
-.
-.
-.\" NS Fc user macro
-.\" NS function close
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-func-arg-count
-.\" NS doc-in-func-enclosure
-.\" NS doc-saved-nesting-level
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `Fc' set in doc-common
-.
-.de Fc
-. if !\n[doc-in-func-enclosure] \{\
-. tm mdoc warning: Extraneous .Fc (#\n[.c])
-. return
-. \}
-.
-. if \n[.$] \{\
-. ds doc-macro-name Fc
-. \" the first (dummy) argument is used to get the correct spacing
-. doc-parse-args \) \$@
-. \}
-.
-. if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
-. tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
-.
-. nr doc-func-arg-count 0
-. nr doc-in-func-enclosure 0
-.
-. ie \n[doc-in-synopsis-section] \
-. nop \|\*[rp];\)
-. el \
-. nop \|\*[rp]\)
-.
-. \" finish function box
-. br
-. ev
-. box
-. chop doc-func-box
-. unformat doc-func-box
-.
-. if \n[doc-in-synopsis-section] \{\
-. if !\n[doc-indent-synopsis-active] \
-. in +\n[doc-indent-synopsis]u
-. ti -\n[doc-indent-synopsis]u
-. \}
-.
-. nh
-. nop \*[doc-func-box]\c
-.
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. doc-print-recursive
-. \}
-. el \
-. doc-print-and-reset
-.
-. if \n[doc-in-synopsis-section] \
-. if !\n[doc-indent-synopsis-active] \
-. in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-build-func-string macro
-.\" NS collect function arguments and set hard spaces in between
-.\" NS
-.\" NS modifies:
-.\" NS doc-func-arg
-.\" NS doc-func-args-processed
-.\" NS doc-num-func-args
-.
-.de doc-build-func-string
-. if !\n[doc-num-func-args] \{\
-. nr doc-num-func-args \n[.$]
-. nr doc-func-args-processed 0
-. ds doc-func-arg
-. \}
-.
-. nr doc-func-args-processed +1
-. as doc-func-arg "\$1
-.
-. if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
-. as doc-func-arg "\*[doc-hard-space]
-.
-. shift
-. doc-build-func-string \$@
-. \}
-..
-.
-.
-.\" Very crude references: Stash all reference info into boxes, print out
-.\" reference on .Re macro and clean up. Ordering very limited, no fancy
-.\" citations, but can do articles, journals, and books -- need to add
-.\" several missing options (like city etc). Should be able to grab a refer
-.\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
-.\" (ha!).
-.
-.
-.\" NS doc-is-reference global register (bool)
-.\" NS set if in reference
-.
-.nr doc-is-reference 0
-.
-.
-.\" NS doc-reference-count global register
-.\" NS reference element counter
-.
-.nr doc-reference-count 0
-.
-.
-.\" NS Rs user macro
-.\" NS reference start
-.\" NS
-.\" NS modifies:
-.\" NS doc-is-reference
-.\" NS doc-reference-count
-.\" NS
-.\" NS width register `Rs' set in doc-common
-.
-.de Rs
-. ie \n[.$] \
-. tm Usage: .Rs (does not take arguments) (#\n[.c])
-. el \{\
-. nr doc-is-reference 1
-. doc-reset-reference
-. if \n[doc-in-see-also-section] \
-. doc-paragraph
-. nr doc-reference-count 0
-. \}
-..
-.
-.
-.\" NS Re user macro
-.\" NS reference end
-.\" NS
-.\" NS modifies:
-.\" NS doc-is-reference
-.\" NS
-.\" NS width register `Re' set in doc-common
-.
-.de Re
-. ie \n[.$] \
-. tm Usage: .Re (does not take arguments) (#\n[.c])
-. el \{\
-. if !\n[doc-is-reference] \{\
-. tm mdoc warning: Extraneous .Re (#\n[.c])
-. return
-. \}
-. doc-print-reference
-. doc-reset-reference
-. nr doc-is-reference 0
-. \}
-..
-.
-.
-.\" NS doc-reset-reference macro
-.\" NS reference cleanup
-.\" NS
-.\" NS modifies:
-.\" NS doc-author-count
-.\" NS doc-author-nameXXX
-.\" NS doc-book-count
-.\" NS doc-book-name
-.\" NS doc-city-count
-.\" NS doc-city-name
-.\" NS doc-corporate-count
-.\" NS doc-corporate-name
-.\" NS doc-date
-.\" NS doc-date-count
-.\" NS doc-issue-count
-.\" NS doc-issue-name
-.\" NS doc-journal-count
-.\" NS doc-journal-name
-.\" NS doc-optional-count
-.\" NS doc-optional-string
-.\" NS doc-page-number-count
-.\" NS doc-page-number-string
-.\" NS doc-publisher-count
-.\" NS doc-publisher-name
-.\" NS doc-reference-count
-.\" NS doc-reference-title-count
-.\" NS doc-reference-title-name
-.\" NS doc-reference-title-name-for-book
-.\" NS doc-report-count
-.\" NS doc-report-name
-.\" NS doc-url-count
-.\" NS doc-url-name
-.\" NS doc-volume-count
-.\" NS doc-volume-name
-.
-.de doc-reset-reference
-. while (\n[doc-author-count]) \{\
-. ds doc-author-name\n[doc-author-count]
-. nr doc-author-count -1
-. \}
-. nr doc-journal-count 0
-. nr doc-issue-count 0
-. nr doc-optional-count 0
-. nr doc-corporate-count 0
-. nr doc-report-count 0
-. nr doc-reference-title-count 0
-. nr doc-url-count 0
-. nr doc-volume-count 0
-. nr doc-city-count 0
-. nr doc-date-count 0
-. nr doc-page-number-count 0
-. nr doc-book-count 0
-. nr doc-publisher-count 0
-. nr doc-reference-count 0
-.
-. ds doc-journal-name
-. ds doc-issue-name
-. ds doc-optional-string
-. ds doc-corporate-name
-. ds doc-report-name
-. ds doc-reference-title-name
-. ds doc-reference-title-name-for-book
-. ds doc-url-name
-. ds doc-volume-name
-. ds doc-city-name
-. ds doc-date
-. ds doc-page-number-string
-. ds doc-book-name
-. ds doc-publisher-name
-..
-.
-.
-.\" NS doc-finish-reference macro
-.\" NS auxiliary macro for doc-print-reference
-.\" NS
-.\" NS modifies:
-.\" NS doc-reference-count
-.
-.de doc-finish-reference
-. nr doc-reference-count -\$1
-. ie \n[doc-reference-count] \
-. nop \),
-. el \
-. nop \).
-..
-.
-.
-.\" NS doc-print-reference macro
-.\" NS reference print
-.\" NS
-.\" NS modifies:
-.\" NS doc-reference-count
-.
-.de doc-print-reference
-.
-. nh
-.
-. if \n[doc-author-count] \{\
-. doc-print-reference-authors
-. nr doc-reference-count -\n[doc-author-count]
-. \}
-.
-. if \n[doc-reference-title-count] \{\
-. unformat doc-reference-title-name
-. chop doc-reference-title-name
-. unformat doc-reference-title-name-for-book
-. chop doc-reference-title-name-for-book
-. ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
-. nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
-. doc-finish-reference \n[doc-reference-title-count]
-. \}
-. el \{\
-. nop \*[doc-reference-title-name]\c
-. doc-finish-reference \n[doc-reference-title-count]
-. \}\}
-.
-. if \n[doc-book-count] \{\
-. unformat doc-book-name
-. chop doc-book-name
-. nop \*[doc-book-name]\c
-. doc-finish-reference \n[doc-book-count]
-. \}
-.
-. if \n[doc-publisher-count] \{\
-. unformat doc-publisher-name
-. chop doc-publisher-name
-. nop \*[doc-publisher-name]\c
-. doc-finish-reference \n[doc-publisher-count]
-. \}
-.
-. if \n[doc-journal-count] \{\
-. unformat doc-journal-name
-. chop doc-journal-name
-. nop \*[doc-journal-name]\c
-. doc-finish-reference \n[doc-journal-count]
-. \}
-.
-. if \n[doc-report-count] \{\
-. unformat doc-report-name
-. chop doc-report-name
-. nop \*[doc-report-name]\c
-. doc-finish-reference \n[doc-report-count]
-. \}
-.
-. if \n[doc-issue-count] \{\
-. unformat doc-issue-name
-. chop doc-issue-name
-. nop \*[doc-issue-name]\c
-. doc-finish-reference \n[doc-issue-count]
-. \}
-.
-. if \n[doc-volume-count] \{\
-. unformat doc-volume-name
-. chop doc-volume-name
-. nop \*[doc-volume-name]\c
-. doc-finish-reference \n[doc-volume-count]
-. \}
-.
-. if \n[doc-url-count] \{\
-. unformat doc-url-name
-. chop doc-url-name
-. nop \*[doc-url-name]\c
-. doc-finish-reference \n[doc-url-count]
-. \}
-.
-. if \n[doc-page-number-count] \{\
-. unformat doc-page-number-string
-. chop doc-page-number-string
-. nop \*[doc-page-number-string]\c
-. doc-finish-reference \n[doc-page-number-count]
-. \}
-.
-. if \n[doc-corporate-count] \{\
-. unformat doc-corporate-name
-. chop doc-corporate-name
-. nop \*[doc-corporate-name]\c
-. doc-finish-reference \n[doc-corporate-count]
-. \}
-.
-. if \n[doc-city-count] \{\
-. unformat doc-city-name
-. chop doc-city-name
-. nop \*[doc-city-name]\c
-. doc-finish-reference \n[doc-city-count]
-. \}
-.
-. if \n[doc-date-count] \{\
-. unformat doc-date
-. chop doc-date
-. nop \*[doc-date]\c
-. doc-finish-reference \n[doc-date-count]
-. \}
-.
-. if \n[doc-optional-count] \{\
-. unformat doc-optional-string
-. chop doc-optional-string
-. nop \*[doc-optional-string]\c
-. doc-finish-reference \n[doc-optional-count]
-. \}
-.
-. if \n[doc-reference-count] \
-. tm mdoc warning: unresolved reference problem
-.
-. hy \n[doc-hyphen-flags]
-..
-.
-.
-.\" NS doc-print-reference-authors macro
-.\" NS print out reference authors
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-dpra
-.\" NS doc-str-dpra
-.
-.ds doc-str-dpra "and
-.
-.de doc-print-reference-authors
-. nr doc-reg-dpra 1
-.
-. while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
-. unformat doc-author-name\n[doc-reg-dpra]
-. chop doc-author-name\n[doc-reg-dpra]
-. ie (\n[doc-author-count] > 2) \
-. nop \)\*[doc-author-name\n[doc-reg-dpra]],
-. el \
-. nop \)\*[doc-author-name\n[doc-reg-dpra]]
-. nr doc-reg-dpra +1
-. \}
-.
-. unformat doc-author-name\n[doc-reg-dpra]
-. chop doc-author-name\n[doc-reg-dpra]
-. if (\n[doc-author-count] > 1) \
-. nop \)\*[doc-str-dpra]
-. nop \)\*[doc-author-name\n[doc-reg-dpra]],
-..
-.
-.
-.\" NS doc-author-count global register
-.\" NS counter of author references
-.
-.nr doc-author-count 0
-.
-.
-.\" NS doc-author-nameXXX global box
-.\" NS array of author names
-.\" NS
-.\" NS limit:
-.\" NS doc-author-count
-.
-.ds doc-author-name0
-.
-.
-.\" NS %A user macro
-.\" NS reference author(s)
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-author-count
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%A
-.\" NS
-.\" NS width register `%A' set in doc-common
-.
-.de %A
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%A author_name ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-author-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %A
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" save to reference box
-. box doc-author-name\n[doc-author-count]
-. ev doc-env-%A
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-book-count global register
-.\" NS counter of book references
-.
-.nr doc-book-count 0
-.
-.
-.\" NS doc-book-name global box
-.\" NS string of collected book references
-.
-.ds doc-book-name
-.
-.
-.\" NS %B user macro
-.\" NS [reference] book name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-book-count
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%B
-.\" NS
-.\" NS width register `%B' set in doc-common
-.
-.de %B
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%B book_name ... (#\n[.c])
-. return
-. \}
-.
-. if \n[doc-is-reference] \{\
-. nr doc-book-count +1
-. nr doc-reference-count +1
-. \}
-.
-. ds doc-macro-name %B
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. ie \n[doc-is-reference] \{\
-. \" append to reference box
-. boxa doc-book-name
-. ev doc-env-%B
-. evc 0
-. in 0
-. nf
-. nop \*[doc-Em-font]\c
-. doc-do-references
-. \}
-. el \{\
-. nop \*[doc-Em-font]\c
-. doc-print-recursive
-. \}
-..
-.
-.
-.\" NS doc-city-count global register
-.\" NS counter of city references
-.
-.nr doc-city-count 0
-.
-.
-.\" NS doc-city-name global box
-.\" NS string of collected city references
-.
-.ds doc-city-name
-.
-.
-.\" NS %C user macro
-.\" NS [reference] city
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-city-count
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%C
-.\" NS
-.\" NS width register `%C' set in doc-common
-.
-.de %C
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%C city_name ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-city-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %C
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-city-name
-. ev doc-env-%C
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-date-count global register
-.\" NS counter of date references
-.
-.nr doc-date-count 0
-.
-.
-.\" NS doc-date global box
-.\" NS string of collected date references
-.
-.ds doc-date
-.
-.
-.\" NS %D user macro
-.\" NS [reference] date
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-date-count
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%D
-.\" NS
-.\" NS width register `%D' set in doc-common
-.
-.de %D
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%D date ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-date-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %D
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-date
-. ev doc-env-%D
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-publisher-count global register
-.\" NS counter of publisher references
-.
-.nr doc-publisher-count 0
-.
-.
-.\" NS doc-publisher-name global box
-.\" NS string of collected publisher references
-.
-.ds doc-publisher-name
-.
-.
-.\" NS %I user macro
-.\" NS [reference] issuer/publisher name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-publisher-count
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%I
-.\" NS
-.\" NS width register `%I' set in doc-common
-.
-.de %I
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%I issuer/publisher_name ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-publisher-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %I
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-publisher-name
-. ev doc-env-%I
-. evc 0
-. in 0
-. nf
-. nop \*[doc-Em-font]\c
-. doc-do-references
-..
-.
-.
-.\" NS doc-journal-count global register
-.\" NS counter of journal references
-.
-.nr doc-journal-count 0
-.
-.
-.\" NS doc-journal-name global box
-.\" NS string of collected journal references
-.
-.ds doc-journal-name
-.
-.
-.\" NS %J user macro
-.\" NS [reference] Journal Name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-journal-count
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%J
-.\" NS
-.\" NS width register `%J' set in doc-common
-.
-.de %J
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%J journal_name ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-journal-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %J
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-journal-name
-. ev doc-env-%J
-. evc 0
-. in 0
-. nf
-. nop \*[doc-Em-font]\c
-. doc-do-references
-..
-.
-.
-.\" NS doc-issue-count global register
-.\" NS counter of issue number references
-.
-.nr doc-issue-count 0
-.
-.
-.\" NS doc-issue-name global box
-.\" NS string of collected issue number references
-.
-.ds doc-issue-name
-.
-.
-.\" NS %N user macro
-.\" NS [reference] issue number
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-issue-count
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%N
-.\" NS
-.\" NS width register `%N' set in doc-common
-.
-.de %N
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%N issue_number ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-issue-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %N
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-issue-name
-. ev doc-env-%N
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-optional-count global register
-.\" NS counter of optional information references
-.
-.nr doc-optional-count 0
-.
-.
-.\" NS doc-optional-string global box
-.\" NS string of collected optional information references
-.
-.ds doc-optional-string
-.
-.
-.\" NS %O user macro
-.\" NS [reference] optional information
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-optional-count
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%O
-.\" NS
-.\" NS width register `%O' set in doc-common
-.
-.de %O
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%O optional_information ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-optional-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %O
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-optional-string
-. ev doc-env-%O
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-page-number-count global register
-.\" NS counter of page number references
-.
-.nr doc-page-number-count 0
-.
-.
-.\" NS doc-page-number-string global box
-.\" NS string of collected page number references
-.
-.ds doc-page-number-string
-.
-.
-.\" NS %P user macro
-.\" NS [reference] page numbers
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-page-number-count
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%P
-.\" NS
-.\" NS width register `%P' set in doc-common
-.
-.de %P
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%P page_number ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-page-number-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %P
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-page-number-string
-. ev doc-env-%P
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-corporate-count global register
-.\" NS counter of corporate references
-.
-.nr doc-corporate-count 0
-.
-.
-.\" NS doc-corporate-name global box
-.\" NS string of collected corporate references
-.
-.ds doc-corporate-name
-.
-.
-.\" NS %Q user macro
-.\" NS corporate or foreign author
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-corporate-count
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%Q
-.\" NS
-.\" NS width register `%Q' set in doc-common
-.
-.de %Q
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-corporate-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %Q
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-corporate-name
-. ev doc-env-%Q
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-report-count global register
-.\" NS counter of report references
-.
-.nr doc-report-count 0
-.
-.
-.\" NS doc-report-name global box
-.\" NS string of collected report references
-.
-.ds doc-report-name
-.
-.
-.\" NS %R user macro
-.\" NS [reference] report name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%R
-.\" NS
-.\" NS width register `%R' set in doc-common
-.
-.de %R
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%R reference_report ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-report-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %R
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-report-name
-. ev doc-env-%R
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-reference-title-count global register
-.\" NS counter of reference title references
-.
-.nr doc-reference-title-count 0
-.
-.
-.\" NS doc-reference-title-name global box
-.\" NS string of collected reference title references
-.
-.ds doc-reference-title-name
-.
-.
-.\" NS doc-reference-title-name-for-book global box
-.\" NS string of collected reference title references
-.\" NS (saved with another font; this is a shortcoming of groff)
-.
-.ds doc-reference-title-name-for-book
-.
-.
-.\" NS %T user macro
-.\" NS reference title
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-title-count
-.\" NS doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%T
-.\" NS
-.\" NS width register `%T' set in doc-common
-.
-.de %T
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%T reference_title ... (#\n[.c])
-. return
-. \}
-.
-. if \n[doc-is-reference] \{\
-. nr doc-reference-title-count +1
-. nr doc-reference-count +1
-. \}
-.
-. ds doc-macro-name %T
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. ie \n[doc-is-reference] \{\
-. \" append to reference box
-. boxa doc-reference-title-name-for-book
-. ev doc-env-%T
-. evc 0
-. in 0
-. nf
-. nop \*[doc-No-font]\c
-. doc-do-references
-.
-. \" do it a second time with another font
-. ds doc-macro-name %T
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. boxa doc-reference-title-name
-. ev doc-env-%T
-. evc 0
-. in 0
-. nf
-. nop \*[doc-Em-font]\c
-. doc-do-references
-. \}
-. el \{\
-. nop \*[doc-Em-font]\c
-. doc-print-recursive
-. \}
-..
-.
-.
-.\" NS doc-url-count global register
-.\" NS counter of hypertext references
-.
-.nr doc-url-count 0
-.
-.
-.\" NS doc-url-name global box
-.\" NS string of collected hypertext references
-.
-.ds doc-url-name
-.
-.
-.\" NS doc-volume-count global register
-.\" NS counter of reference title references
-.
-.nr doc-volume-count 0
-.
-.
-.\" NS doc-volume-name global box
-.\" NS string of collected volume references
-.
-.ds doc-volume-name
-.
-.
-.\" NS %U user macro
-.\" NS hypertext reference
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS doc-url-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%U
-.\" NS
-.\" NS width register `%U' set in doc-common
-.
-.de %U
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%U URL ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-url-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %U
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-url-name
-. ev doc-env-%U
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS %V user macro
-.\" NS reference volume
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-macro-name
-.\" NS doc-reference-count
-.\" NS doc-volume-count
-.\" NS
-.\" NS local variables:
-.\" NS doc-env-%V
-.\" NS
-.\" NS width register `%V' set in doc-common
-.
-.de %V
-. if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-. tm Usage: .%V volume ... (#\n[.c])
-. return
-. \}
-.
-. nr doc-volume-count +1
-. nr doc-reference-count +1
-.
-. ds doc-macro-name %V
-. doc-parse-args \$@
-.
-. nr doc-arg-ptr +1
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-.
-. \" append to reference box
-. boxa doc-volume-name
-. ev doc-env-%V
-. evc 0
-. in 0
-. nf
-. doc-do-references
-..
-.
-.
-.\" NS doc-do-references macro
-.\" NS reference recursion routine
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-ddr
-.\" NS doc-reg-ddr1
-.
-.de doc-do-references
-. if !\n[doc-is-reference] \
-. tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
-.
-. nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
-.
-. ie (\n[doc-reg-ddr1] == 1) \{\
-. \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. doc-append-arg \c 3
-. \*[doc-arg\n[doc-arg-ptr]]
-. \}
-. el \{\
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-. ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-. \" finish reference box
-. br
-. ev
-. boxa
-.
-. doc-reset-args
-. \}
-. el \{\
-. nr doc-reg-ddr \n[doc-arg-ptr]
-. nr doc-arg-ptr +1
-. nop \)\*[doc-space\n[doc-reg-ddr]]\c
-. doc-do-references
-. \}\}
-..
-.
-.
-.\" NS Hf user macro
-.\" NS source include header files.
-.\" NS
-.\" NS modifies:
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS
-.\" NS width register `Hf' set in doc-common
-.
-.de Hf
-. ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
-. doc-paragraph
-. nop File:
-. Pa \$1
-.
-. Bd -literal
-. so \$1
-. Ed
-.
-. doc-paragraph
-. \}
-. el \
-. Usage: .Hf file (#\n[.c])
-..
-.
-.
-.\" NS doc-have-author global register (bool)
-.\" NS set in `An'
-.
-.nr doc-have-author 0
-.
-.
-.\" NS An user macro
-.\" NS author name
-.\" NS
-.\" NS modifies:
-.\" NS doc-arg-ptr
-.\" NS doc-curr-font
-.\" NS doc-curr-size
-.\" NS doc-have-author
-.\" NS doc-macro-name
-.\" NS
-.\" NS width register `An' set in doc-common
-.
-.de An
-. if !\n[doc-arg-limit] \{\
-. ie \n[.$] \{\
-. ie "\$1"-nosplit" \
-. nr doc-in-authors-section 0
-. el \{ .ie "\$1"-split" \
-. nr doc-in-authors-section 1
-. el \{\
-. ds doc-macro-name An
-. doc-parse-args \$@
-. \}\}\}
-. el \{\
-. tm1 "Usage: .An {-nosplit | -split}
-. tm1 " .An author_name ... (#\n[.c])
-. \}\}
-.
-. if \n[doc-in-authors-section] \{\
-. ie \n[doc-have-author] \
-. br
-. el \
-. nr doc-have-author 1
-. \}
-.
-. if \n[doc-arg-limit] \{\
-. nr doc-arg-ptr +1
-. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-. nr doc-curr-font \n[.f]
-. nr doc-curr-size \n[.ps]
-. doc-print-recursive
-. \}
-. el \{\
-. tm Usage: .An author_name ... (#\n[.c])
-. doc-reset-args
-. \}\}
-..
-.
-.
-.\" NS Rv user macro
-.\" NS return values
-.\" NS
-.\" NS width register `Rv' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS doc-str-Rv-std-prefix
-.\" NS doc-str-Rv-std-suffix
-.\" NS doc-str-Rv-stds-prefix
-.\" NS doc-str-Rv-stds-and
-.\" NS doc-str-Rv-stds-suffix
-.\" NS doc-str-Rv-std0
-.
-.ds doc-str-Rv-std-prefix "The
-.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
-.as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-stds-prefix "The
-.ds doc-str-Rv-stds-and "and
-.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
-.as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-stds-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
-.as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std0 " is set to indicate the error.
-.
-.de Rv
-.
-.\" XXX: what does this function without `-std'?
-.
-. if \n[doc-arg-limit] \{\
-. tm Usage: .Rv not callable by other macros (#\n[.c])
-. doc-reset-args
-. return
-. \}
-.
-. if !\n[.$] \{\
-. tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
-. return
-. \}
-.
-. if "\$1"-std" \{\
-. nr doc-reg-Rv \*[doc-section]
-. if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
-. tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
-. br
-. shift
-. ie (\n[.$] > 1) \{\
-. nop \)\*[doc-str-Rv-stds-prefix]
-. nr doc-reg-Rv 1
-. while (\n[doc-reg-Rv] < \n[.$]) \{\
-. ie (\n[.$] > 2) \
-. Fn \$\n[doc-reg-Rv] ,
-. el \
-. Fn \$\n[doc-reg-Rv]
-. nr doc-reg-Rv +1
-. \}
-. nop \)\*[doc-str-Rv-stds-and]
-. Fn \$\n[.$]
-. nop \)\*[doc-str-Rv-stds-suffix]
-. \}
-. el \{ .ie (\n[.$] == 1) \{\
-. nop \)\*[doc-str-Rv-std-prefix]
-. Fn \$1
-. nop \)\*[doc-str-Rv-std-suffix]
-. \}
-. el \{\
-. nop \)\*[doc-str-Rv-std0]
-. \}\}\}
-..
-.
-.
-.\" NS Ex user macro
-.\" NS exit status
-.\" NS
-.\" NS width register `Ex' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS doc-str-Ex-std-prefix
-.\" NS doc-str-Ex-std-suffix
-.
-.ds doc-str-Ex-std-prefix "The
-.ds doc-str-Ex-std-suffix "utility exits\~0 on success,
-.as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
-.
-.ds doc-str-Ex-stds-prefix "The
-.als doc-str-Ex-stds-and doc-str-Rv-stds-and
-.ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
-.as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
-.
-.de Ex
-.
-.\" XXX: what does this function without `-std'?
-.
-. if \n[doc-arg-limit] \{\
-. tm Usage: .Ex not callable by other macros (#\n[.c])
-. doc-reset-args
-. return
-. \}
-.
-. if !\n[.$] \{\
-. tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
-. return
-. \}
-.
-. if "\$1"-std" \{\
-. nr doc-reg-Ex \*[doc-section]
-. if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
-. tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
-. br
-. shift
-. ie (\n[.$] > 1) \{\
-. nop \)\*[doc-str-Ex-stds-prefix]
-. nr doc-reg-Ex 1
-. while (\n[doc-reg-Ex] < \n[.$]) \{\
-. ie (\n[.$] > 2) \
-. Nm \$\n[doc-reg-Ex] ,
-. el \
-. Nm \$\n[doc-reg-Ex]
-. nr doc-reg-Ex +1
-. \}
-. nop \)\*[doc-str-Ex-stds-and]
-. Nm \$\n[.$]
-. nop \)\*[doc-str-Ex-stds-suffix]
-. \}
-. el \{\
-. nop \)\*[doc-str-Ex-std-prefix]
-. Nm \$1
-. nop \)\*[doc-str-Ex-std-suffix]
-. \}\}
-..
-.
-.
-.\" NS Mt user macro
-.\" NS mailto (for conversion to HTML)
-.
-.de Mt
-. \" XXX: error handling missing
-. Pa \$@
-..
-.
-.
-.\" NS Lk user macro
-.\" NS link (for conversion to HTML)
-.\" NS
-.\" NS local variables:
-.\" NS doc-reg-Lk
-.\" NS doc-str-Lk
-.
-.de Lk
-. ds doc-str-Lk Sy \$@
-.
-. ie (\n[.$] > 1) \{\
-. doc-get-arg-type \$2
-. ie (\n[doc-arg-type] < 3) \{\
-. Em \)\$2:
-. ds doc-str-Lk Sy "\$1"
-. doc-get-width "\$1"
-. shift 2
-. if \n[.$] \
-. as doc-str-Lk " \$@
-. \}
-. el \
-. doc-get-width "\$1"
-. \}
-. el \
-. doc-get-width "\$1"
-.
-. ie n \
-. nr doc-reg-Lk 26
-. el \
-. nr doc-reg-Lk 38
-. ie (\n[doc-width] >= \n[doc-reg-Lk]) \
-. D1 \*[doc-str-Lk]
-. el \
-. \*[doc-str-Lk]
-..
-.
-.
-.\" NS doc-defunct-macro macro
-.\" NS this is the skeleton for defunct macros
-.\" NS
-.
-.de doc-defunct-macro
-. tmc mdoc error: .\$0 defunct
-. if d doc-\$0-usage \
-. tmc , \*[doc-\$0-usage]
-. tm1 " (#\n[.c])
-..
-.
-.
-.\" obsolete macros
-.
-.als Db doc-defunct-macro
-.
-.als Ds doc-defunct-macro
-.
-.als Or doc-defunct-macro
-.ds doc-Or-usage use `|'
-.
-.als Sf doc-defunct-macro
-.ds doc-Sf-usage use .Pf or .Ns
-.
-.
-.rn em e@
-.
-.de em
-. tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
-. tm1 " Should this have been `.Em ...'?
-. ab
-..
-.
-.
-.\" NS doc-empty-line macro
-.\" NS emit warning and print empty line
-.
-.de doc-empty-line
-. if !\n[doc-display-depth] \
-. tm mdoc warning: Empty input line #\n[.c]
-. sp
-..
-.
-.blm doc-empty-line
-.
-.
-.ec
-.
-.
-.\" For UTF-8, map some characters conservatively for the sake
-.\" of easy cut and paste.
-.
-.if '\*[.T]'utf8' \{\
-. rchar \- - ' `
-.
-. char \- \N'45'
-. char - \N'45'
-. char ' \N'39'
-. char ` \N'96'
-.\}
-.
-.
-.\" load local modifications
-.mso mdoc.local
-.
-.\" EOF
diff --git a/contrib/groff/tmac/dvi.tmac b/contrib/groff/tmac/dvi.tmac
deleted file mode 100644
index ff5a2a27ab1d..000000000000
--- a/contrib/groff/tmac/dvi.tmac
+++ /dev/null
@@ -1,788 +0,0 @@
-.\" dvi.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.ftr CR CW
-.ftr C CW
-.ftr CO CWI
-.ftr CI CWI
-.ftr CB CW
-.ftr TT CW
-.ftr H HR
-.
-.special TR TI MI S SA SB CW
-.fspecial TI CWI
-.fspecial TBI CWI
-.fspecial HI CWI
-.fspecial HBI CWI
-.fspecial CW SC
-.fspecial CWI SC
-.
-.\" This uses the dvi-char-_-1 string in fixed-width fonts, dvi-char-_-0
-.\" otherwise.
-.fchar _ \R'dvi-char (\w'M' == \w'i')'\E*[dvi-char-_-\\n[dvi-char]]
-.\" Normally use a rule.
-.ds dvi-char-_-0 \Z'\v'.08m'\D'R .54m .04m''\h'.5m'
-.\" In fixed-width fonts (CW and CWI) use a real _ character.
-.ds dvi-char-_-1 _
-.
-.fchar \[/l] \
-\R'dvi-char ((\w'M' == \w'i') + \
- (\En[.f] == \f[CWI]\En[.f]\f[]))'\E*[dvi-char-/l-\\n[dvi-char]]
-.ds dvi-char-/l-0 \[slash@for@l]l
-.ds dvi-char-/l-1 \Z'\v'0.22v'\h'-0.02m'\''l
-.ds dvi-char-/l-2 \Z'\v'0.22v'\h'-0.13m'\''l
-.
-.fchar \[/L] \
-\R'dvi-char ((\w'M' == \w'i') + \
- (\En[.f] == \f[CWI]\En[.f]\f[]))'\E*[dvi-char-/L-\\n[dvi-char]]
-.ds dvi-char-/L-0 \h'\w'L'u-\w'\[slash@for@l]L'u'\[slash@for@l]L
-.ds dvi-char-/L-1 \Z'\v'0.22v'\h'-0.14m'\''L
-.ds dvi-char-/L-2 \Z'\v'0.22v'\h'-0.21m'\''L
-.
-.\" This is designed so that \(ul, \(rn and \(br form corners.
-.char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.
-.char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.
-.fchar \[sr] \v'-.75m'\[sqrt]\v'.75m'
-.fchar \[sqrtex] \D'R .5m -.04m'\v'.04m'
-.fchar \[radicalex] \v'-.75m'\D'R .5m -.04m'\v'.79m'
-.fchar \[co] \
-\z\s-2\[ci]\s0\
-\h'\w'\s-2\[ci]\s0'u-\w'\s-4C\s0'u/2u'\
-\s-4C\s0\
-\h'\w'\s-2\[ci]\s0'u-\w'\s-4C\s0'u/2u'
-.fchar \[rg] \
-\z\s-2\[ci]\s0\
-\h'\w'\s-2\[ci]\s0'u-\w'\s-4R\s0'u/2u'\
-\s-4R\s0\
-\h'\w'\s-2\[ci]\s0'u-\w'\s-4R\s0'u/2u'
-.fchar \[fm] \v'-.35m'\s[\En[.s]*7u/10u]\[prime]\s0\v'.35m'
-.fchar \[sd] \v'-.35m'\s[\En[.s]*7u/10u]\[prime]\[prime]\s0\v'.35m'
-.fchar \[de] \h'.05m'\v'-.54m'\D'c .3m'\v'.54m'\h'.05m'
-.fchar \[ct] \o'c/'
-.fchar \[sq] \
-\Z'\h'.05m'\D'R .4m -.04m'\v'.04m'\h'-.04m'\
-\D'R .04m -.4m'\v'.04m'\D'R -.4m -.04m'\D'R .04m .4m''\h'.5m'
-.\"char \[sq] \h'.05m'\D'l .4m 0'\D'l 0 -.4m'\D'l -.4m 0'\D'l 0 .4m'\h'.45m'
-.\" SC contains a real \[!=] glyph
-.schar \[!=] \[slashnot]\[eq]
-.schar \[nm] \o'\F[T]\f[R]/\[mo]'
-.fschar CW \[nm] \o'/\[mo]'
-.fschar CWI \[nm] \o'\f[CW]/\[mo]'
-.schar \[ne] \[slashnot]\[==]
-.fschar CW \[ne] \o'/\[==]'
-.fschar CWI \[ne] \o'\f[CW]/\[==]'
-.fchar \[=~] \v'.1m'\Z'\[eq]'\v'-.4m'\[ap]\v'.3m'
-.fchar \[tm] \v'-.3m'\s[\En[.s]/2u]TM\s0\v'.3m'
-.\" TC fonts contain real \[aq] glyphs
-.schar \[aq] '
-.fchar \[bq] ,
-.fchar \[Bq] ,\h'\w'\[rq]'u-(2u*\w"'"u)',
-.fchar \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.fchar \[-D] \Z'\v'-.1m'\h'.05m'-'D
-.fchar \[Sd] \Z'\v'-.3m'\h'.35m'-'\[pd]
-.fchar \[TP] \
-I\h'-.25m'\v'-.33m'\s[\En[.s]*6u/10u]\v'.33m'\
-D\v'-.33m'\s0\v'.33m'
-.fchar \[Tp] \zlp
-.fchar \[nb] \[slashnot]\[sb]
-.fchar \[nc] \[slashnot]\[sp]
-.cflags 8 \[an]
-.schar \[an] \h'-.167m'\[mi]\h'-.167m'
-.fschar CW \[an] -
-.fschar CWI \[an] \f[CW]\[mi]
-.\" we follow the EC ligatures for fixed-width dashes
-.fchar \[em] --
-.fchar \[en] -
-.fchar \[hy] -
-.fschar CW \[va] \o'\[ua]\[da]'
-.fschar CWI \[va] \o'\[ua]\[da]'
-.fschar CW \[<>] \o'\[<-]\[->]'
-.fschar CWI \[<>] \o'\[<-]\[->]'
-.fchar \[lh] \[lA]
-.fchar \[rh] \[rA]
-.
-.fchar \[f/] /
-.
-.\" Define some fractions.
-.de dvi-frac
-. fchar \[\\$1\\$2] \
-\v'-.25m'\s[\\En[.s]*7u/10u]\\$1\s0\v'.25m'\
-\h'-.2m'\[f/]\h'-.2m'\
-\v'.25m'\s[\\En[.s]*7u/10u]\\$2\s0\v'-.25m'
-..
-.
-.dvi-frac 1 2
-.dvi-frac 3 4
-.dvi-frac 1 4
-.dvi-frac 1 8
-.dvi-frac 3 8
-.dvi-frac 5 8
-.dvi-frac 7 8
-.
-.\" support for ISO Latin-1
-.fchar \[S1] \v'-.2m'\s-31\s+3\v'+.2m'
-.fchar \[S2] \v'-.2m'\s-32\s+3\v'+.2m'
-.fchar \[S3] \v'-.2m'\s-33\s+3\v'+.2m'
-.fchar \[Of] \v'-.2m'\s'\En[.s]*6u/10u'\o'_a'\s0\v'.2m'
-.fchar \[Om] \v'-.2m'\s'\En[.s]*6u/10u'\o'_o'\s0\v'.2m'
-.fchar \[fo] \v'-.1m'\s-3<\s+3\v'+.1m'
-.fchar \[fc] \v'-.1m'\s-3>\s+3\v'+.1m'
-.fchar \[Fo] \v'-.1m'\s-3<\h'-.3m'<\s+3\v'+.1m'
-.fchar \[Fc] \v'-.1m'\s-3>\h'-.3m'>\s+3\v'+.1m'
-.fchar \[bb] |
-.fchar \[Cs] \o'\[mu]o'
-.
-.fchar \[IJ] IJ
-.fchar \[ij] ij
-.
-.de dvi-achar
-. \" Note that character definitions are always interpreted with
-. \" compatibility mode off.
-. fchar \\$1 \
-\\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\En[skw]+(\w'x'*0)-\\En[skw])'\
-\v'(u;\w'x'*0+\\En[rst]+(\w'\\$3'*0)-\\En[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\En[rst]+(\w'\\$3'*0)+\\En[rst])'\
-\h'|\\En[acc]u'
-. hcode \\$1\\$4
-..
-.
-.dvi-achar \[`A] \` A a
-.dvi-achar \['A] \' A a
-.dvi-achar \[^A] ^ A a
-.dvi-achar \[~A] ~ A a
-.dvi-achar \[:A] \[ad] A a
-.dvi-achar \[oA] \[ao] A a
-.dvi-achar \['C] \' C c
-.dvi-achar \[`E] \` E e
-.dvi-achar \['E] \' E e
-.dvi-achar \[^E] ^ E e
-.dvi-achar \[:E] \[ad] E e
-.dvi-achar "\[G ab]" \[ab] G g
-.dvi-achar \[`I] \` I i
-.dvi-achar \['I] \' I i
-.dvi-achar \[^I] ^ I i
-.dvi-achar \[:I] \[ad] I i
-.dvi-achar "\[I .]" \[a.] I i
-.dvi-achar \[~N] ~ N n
-.dvi-achar \[`O] \` O o
-.dvi-achar \['O] \' O o
-.dvi-achar \[^O] ^ O o
-.dvi-achar \[~O] ~ O o
-.dvi-achar \[:O] \[ad] O o
-.dvi-achar \[`U] \` U u
-.dvi-achar \['U] \' U u
-.dvi-achar \[^U] ^ U u
-.dvi-achar \[:U] \[ad] U u
-.dvi-achar \['Y] \' Y y
-.dvi-achar \[:Y] \[ad] Y y
-.dvi-achar \[`a] \` a a
-.dvi-achar \['a] \' a a
-.dvi-achar \[^a] ^ a a
-.dvi-achar \[~a] ~ a a
-.dvi-achar \[:a] \[ad] a a
-.dvi-achar \[oa] \[ao] a a
-.dvi-achar \['c] \' c c
-.dvi-achar \[`e] \` e e
-.dvi-achar \['e] \' e e
-.dvi-achar \[^e] ^ e e
-.dvi-achar \[:e] \[ad] e e
-.dvi-achar "\[g ab]" \[ab] g g
-.dvi-achar \[`i] \` \[.i] i
-.dvi-achar \['i] \' \[.i] i
-.dvi-achar \[^i] ^ \[.i] i
-.dvi-achar \[:i] \[ad] \[.i] i
-.dvi-achar \[~n] ~ n n
-.dvi-achar \[`o] \` o o
-.dvi-achar \['o] \' o o
-.dvi-achar \[^o] ^ o o
-.dvi-achar \[~o] ~ o o
-.dvi-achar \[:o] \[ad] o o
-.dvi-achar \[`u] \` u u
-.dvi-achar \['u] \' u u
-.dvi-achar \[^u] ^ u u
-.dvi-achar \[:u] \[ad] u u
-.dvi-achar \['y] \' y y
-.dvi-achar \[:y] \[ad] y y
-.dvi-achar \[vs] \[ah] s s
-.dvi-achar \[vS] \[ah] S s
-.dvi-achar \[vz] \[ah] z z
-.dvi-achar \[vZ] \[ah] Z z
-.
-.fchar \[,C] \o'\[ac]C'
-.hcode \[,C]c
-.fchar \[,c] \o'\[ac]c'
-.hcode \[,c]c
-.fchar \[S ,] \o'S\[ac]'
-.hcode \[S ,]s
-.fchar \[s ,] \o's\[ac]'
-.hcode \[s ,]s
-.
-.\" now for color definitions
-.\"
-.\" this is a composite of MIT's X Consortium red/green/blue (rgb) color
-.\" specifications, X Consortium version 10.41, 1994.
-.\"
-.defcolor black rgb #000000
-.defcolor grey rgb #bebebe
-.defcolor dimgrey rgb #696969
-.defcolor lightgray rgb #d3d3d3
-.defcolor lightslategrey rgb #778899
-.defcolor slategray rgb #708090
-.defcolor slategray1 rgb #c6e2ff
-.defcolor slategray2 rgb #b9d3ee
-.defcolor slategray3 rgb #9fb6cd
-.defcolor slategray4 rgb #6c7b8b
-.defcolor slategrey rgb #708090
-.defcolor grey0 rgb #000000
-.defcolor grey1 rgb #030303
-.defcolor grey2 rgb #050505
-.defcolor grey3 rgb #080808
-.defcolor grey4 rgb #0a0a0a
-.defcolor grey5 rgb #0d0d0d
-.defcolor grey6 rgb #0f0f0f
-.defcolor grey7 rgb #121212
-.defcolor grey8 rgb #141414
-.defcolor grey9 rgb #171717
-.defcolor grey10 rgb #1a1a1a
-.defcolor grey11 rgb #1c1c1c
-.defcolor grey12 rgb #1f1f1f
-.defcolor grey13 rgb #212121
-.defcolor grey14 rgb #242424
-.defcolor grey15 rgb #262626
-.defcolor grey16 rgb #292929
-.defcolor grey17 rgb #2b2b2b
-.defcolor grey18 rgb #2e2e2e
-.defcolor grey19 rgb #303030
-.defcolor grey20 rgb #333333
-.defcolor grey21 rgb #363636
-.defcolor grey22 rgb #383838
-.defcolor grey23 rgb #3b3b3b
-.defcolor grey24 rgb #3d3d3d
-.defcolor grey25 rgb #404040
-.defcolor grey26 rgb #424242
-.defcolor grey27 rgb #454545
-.defcolor grey28 rgb #474747
-.defcolor grey29 rgb #4a4a4a
-.defcolor grey30 rgb #4d4d4d
-.defcolor grey31 rgb #4f4f4f
-.defcolor grey32 rgb #525252
-.defcolor grey33 rgb #545454
-.defcolor grey34 rgb #575757
-.defcolor grey35 rgb #595959
-.defcolor grey36 rgb #5c5c5c
-.defcolor grey37 rgb #5e5e5e
-.defcolor grey38 rgb #616161
-.defcolor grey39 rgb #636363
-.defcolor grey40 rgb #666666
-.defcolor grey41 rgb #696969
-.defcolor grey42 rgb #6b6b6b
-.defcolor grey43 rgb #6e6e6e
-.defcolor grey44 rgb #707070
-.defcolor grey45 rgb #737373
-.defcolor grey46 rgb #757575
-.defcolor grey47 rgb #787878
-.defcolor grey48 rgb #7a7a7a
-.defcolor grey49 rgb #7d7d7d
-.defcolor grey50 rgb #7f7f7f
-.defcolor grey51 rgb #828282
-.defcolor grey52 rgb #858585
-.defcolor grey53 rgb #878787
-.defcolor grey54 rgb #8a8a8a
-.defcolor grey55 rgb #8c8c8c
-.defcolor grey56 rgb #8f8f8f
-.defcolor grey57 rgb #919191
-.defcolor grey58 rgb #949494
-.defcolor grey59 rgb #969696
-.defcolor grey60 rgb #999999
-.defcolor grey61 rgb #9c9c9c
-.defcolor grey62 rgb #9e9e9e
-.defcolor grey63 rgb #a1a1a1
-.defcolor grey64 rgb #a3a3a3
-.defcolor grey65 rgb #a6a6a6
-.defcolor grey66 rgb #a8a8a8
-.defcolor grey67 rgb #ababab
-.defcolor grey68 rgb #adadad
-.defcolor grey69 rgb #b0b0b0
-.defcolor grey70 rgb #b3b3b3
-.defcolor grey71 rgb #b5b5b5
-.defcolor grey72 rgb #b8b8b8
-.defcolor grey73 rgb #bababa
-.defcolor grey74 rgb #bdbdbd
-.defcolor grey75 rgb #bfbfbf
-.defcolor grey76 rgb #c2c2c2
-.defcolor grey77 rgb #c4c4c4
-.defcolor grey78 rgb #c7c7c7
-.defcolor grey79 rgb #c9c9c9
-.defcolor grey80 rgb #cccccc
-.defcolor grey81 rgb #cfcfcf
-.defcolor grey82 rgb #d1d1d1
-.defcolor grey83 rgb #d4d4d4
-.defcolor grey84 rgb #d6d6d6
-.defcolor grey85 rgb #d9d9d9
-.defcolor grey86 rgb #dbdbdb
-.defcolor grey87 rgb #dedede
-.defcolor grey88 rgb #e0e0e0
-.defcolor grey89 rgb #e3e3e3
-.defcolor grey90 rgb #e5e5e5
-.defcolor grey91 rgb #e8e8e8
-.defcolor grey92 rgb #ebebeb
-.defcolor grey93 rgb #ededed
-.defcolor grey94 rgb #f0f0f0
-.defcolor grey95 rgb #f2f2f2
-.defcolor grey96 rgb #f5f5f5
-.defcolor grey97 rgb #f7f7f7
-.defcolor grey98 rgb #fafafa
-.defcolor grey99 rgb #fcfcfc
-.defcolor grey100 rgb #ffffff
-.defcolor aliceblue rgb #f0f8ff
-.defcolor blueviolet rgb #8a2be2
-.defcolor cadetblue rgb #5f9ea0
-.defcolor cadetblue1 rgb #98f5ff
-.defcolor cadetblue2 rgb #8ee5ee
-.defcolor cadetblue3 rgb #7ac5cd
-.defcolor cadetblue4 rgb #53868b
-.defcolor cornflowerblue rgb #6495ed
-.defcolor darkslateblue rgb #483d8b
-.defcolor darkturquoise rgb #00ced1
-.defcolor deepskyblue rgb #00bfff
-.defcolor deepskyblue1 rgb #00bfff
-.defcolor deepskyblue2 rgb #00b2ee
-.defcolor deepskyblue3 rgb #009acd
-.defcolor deepskyblue4 rgb #00688b
-.defcolor dodgerblue rgb #1e90ff
-.defcolor dodgerblue1 rgb #1e90ff
-.defcolor dodgerblue2 rgb #1c86ee
-.defcolor dodgerblue3 rgb #1874cd
-.defcolor dodgerblue4 rgb #104e8b
-.defcolor lightblue rgb #add8e6
-.defcolor lightblue1 rgb #bfefff
-.defcolor lightblue2 rgb #b2dfee
-.defcolor lightblue3 rgb #9ac0cd
-.defcolor lightblue4 rgb #68838b
-.defcolor lightcyan rgb #e0ffff
-.defcolor lightcyan1 rgb #e0ffff
-.defcolor lightcyan2 rgb #d1eeee
-.defcolor lightcyan3 rgb #b4cdcd
-.defcolor lightcyan4 rgb #7a8b8b
-.defcolor lightskyblue rgb #87cefa
-.defcolor lightskyblue1 rgb #b0e2ff
-.defcolor lightskyblue2 rgb #a4d3ee
-.defcolor lightskyblue3 rgb #8db6cd
-.defcolor lightskyblue4 rgb #607b8b
-.defcolor lightslateblue rgb #8470ff
-.defcolor lightsteelblue rgb #b0c4de
-.defcolor lightsteelblue1 rgb #cae1ff
-.defcolor lightsteelblue2 rgb #bcd2ee
-.defcolor lightsteelblue3 rgb #a2b5cd
-.defcolor lightsteelblue4 rgb #6e7b8b
-.defcolor mediumaquamarine rgb #66cdaa
-.defcolor mediumblue rgb #0000cd
-.defcolor mediumslateblue rgb #7b68ee
-.defcolor mediumturquoise rgb #48d1cc
-.defcolor midnightblue rgb #191970
-.defcolor navyblue rgb #000080
-.defcolor paleturquoise rgb #afeeee
-.defcolor paleturquoise1 rgb #bbffff
-.defcolor paleturquoise2 rgb #aeeeee
-.defcolor paleturquoise3 rgb #96cdcd
-.defcolor paleturquoise4 rgb #668b8b
-.defcolor powderblue rgb #b0e0e6
-.defcolor royalblue rgb #4169e1
-.defcolor royalblue1 rgb #4876ff
-.defcolor royalblue2 rgb #436eee
-.defcolor royalblue3 rgb #3a5fcd
-.defcolor royalblue4 rgb #27408b
-.defcolor skyblue rgb #87ceeb
-.defcolor skyblue1 rgb #87ceff
-.defcolor skyblue2 rgb #7ec0ee
-.defcolor skyblue3 rgb #6ca6cd
-.defcolor skyblue4 rgb #4a708b
-.defcolor slateblue rgb #6a5acd
-.defcolor slateblue1 rgb #836fff
-.defcolor slateblue2 rgb #7a67ee
-.defcolor slateblue3 rgb #6959cd
-.defcolor slateblue4 rgb #473c8b
-.defcolor steelblue rgb #4682b4
-.defcolor steelblue1 rgb #63b8ff
-.defcolor steelblue2 rgb #5cacee
-.defcolor steelblue3 rgb #4f94cd
-.defcolor steelblue4 rgb #36648b
-.defcolor aquamarine rgb #7fffd4
-.defcolor aquamarine1 rgb #7fffd4
-.defcolor aquamarine2 rgb #76eec6
-.defcolor aquamarine3 rgb #66cdaa
-.defcolor aquamarine4 rgb #458b74
-.defcolor azure rgb #f0ffff
-.defcolor azure1 rgb #f0ffff
-.defcolor azure2 rgb #e0eeee
-.defcolor azure3 rgb #c1cdcd
-.defcolor azure4 rgb #838b8b
-.defcolor blue rgb #0000ff
-.defcolor blue1 rgb #0000ff
-.defcolor blue2 rgb #0000ee
-.defcolor blue3 rgb #0000cd
-.defcolor blue4 rgb #00008b
-.defcolor cyan rgb #00ffff
-.defcolor cyan1 rgb #00ffff
-.defcolor cyan2 rgb #00eeee
-.defcolor cyan3 rgb #00cdcd
-.defcolor cyan4 rgb #008b8b
-.defcolor navy rgb #000080
-.defcolor turquoise rgb #40e0d0
-.defcolor turquoise1 rgb #00f5ff
-.defcolor turquoise2 rgb #00e5ee
-.defcolor turquoise3 rgb #00c5cd
-.defcolor turquoise4 rgb #00868b
-.defcolor darkslategray rgb #2f4f4f
-.defcolor darkslategray1 rgb #97ffff
-.defcolor darkslategray2 rgb #8deeee
-.defcolor darkslategray3 rgb #79cdcd
-.defcolor darkslategray4 rgb #528b8b
-.defcolor rosybrown rgb #bc8f8f
-.defcolor rosybrown1 rgb #ffc1c1
-.defcolor rosybrown2 rgb #eeb4b4
-.defcolor rosybrown3 rgb #cd9b9b
-.defcolor rosybrown4 rgb #8b6969
-.defcolor saddlebrown rgb #8b4513
-.defcolor sandybrown rgb #f4a460
-.defcolor beige rgb #f5f5dc
-.defcolor brown rgb #a52a2a
-.defcolor brown1 rgb #ff4040
-.defcolor brown2 rgb #ee3b3b
-.defcolor brown3 rgb #cd3333
-.defcolor brown4 rgb #8b2323
-.defcolor burlywood rgb #deb887
-.defcolor burlywood1 rgb #ffd39b
-.defcolor burlywood2 rgb #eec591
-.defcolor burlywood3 rgb #cdaa7d
-.defcolor burlywood4 rgb #8b7355
-.defcolor chocolate rgb #d2691e
-.defcolor chocolate1 rgb #ff7f24
-.defcolor chocolate2 rgb #ee7621
-.defcolor chocolate3 rgb #cd661d
-.defcolor chocolate4 rgb #8b4513
-.defcolor peru rgb #cd853f
-.defcolor tan rgb #d2b48c
-.defcolor tan1 rgb #ffa54f
-.defcolor tan2 rgb #ee9a49
-.defcolor tan3 rgb #cd853f
-.defcolor tan4 rgb #8b5a2b
-.defcolor darkgreen rgb #006400
-.defcolor darkkhaki rgb #bdb76b
-.defcolor darkolivegreen rgb #556b2f
-.defcolor darkolivegreen1 rgb #caff70
-.defcolor darkolivegreen2 rgb #bcee68
-.defcolor darkolivegreen3 rgb #a2cd5a
-.defcolor darkolivegreen4 rgb #6e8b3d
-.defcolor darkseagreen rgb #8fbc8f
-.defcolor darkseagreen1 rgb #c1ffc1
-.defcolor darkseagreen2 rgb #b4eeb4
-.defcolor darkseagreen3 rgb #9bcd9b
-.defcolor darkseagreen4 rgb #698b69
-.defcolor forestgreen rgb #228b22
-.defcolor greenyellow rgb #adff2f
-.defcolor lawngreen rgb #7cfc00
-.defcolor lightseagreen rgb #20b2aa
-.defcolor limegreen rgb #32cd32
-.defcolor mediumseagreen rgb #3cb371
-.defcolor mediumspringgreen rgb #00fa9a
-.defcolor mintcream rgb #f5fffa
-.defcolor olivedrab rgb #6b8e23
-.defcolor olivedrab1 rgb #c0ff3e
-.defcolor olivedrab2 rgb #b3ee3a
-.defcolor olivedrab3 rgb #9acd32
-.defcolor olivedrab4 rgb #698b22
-.defcolor palegreen rgb #98fb98
-.defcolor palegreen1 rgb #9aff9a
-.defcolor palegreen2 rgb #90ee90
-.defcolor palegreen3 rgb #7ccd7c
-.defcolor palegreen4 rgb #548b54
-.defcolor seagreen rgb #2e8b57
-.defcolor seagreen1 rgb #54ff9f
-.defcolor seagreen2 rgb #4eee94
-.defcolor seagreen3 rgb #43cd80
-.defcolor seagreen4 rgb #2e8b57
-.defcolor springgreen rgb #00ff7f
-.defcolor springgreen1 rgb #00ff7f
-.defcolor springgreen2 rgb #00ee76
-.defcolor springgreen3 rgb #00cd66
-.defcolor springgreen4 rgb #008b45
-.defcolor yellowgreen rgb #9acd32
-.defcolor chartreuse rgb #7fff00
-.defcolor chartreuse1 rgb #7fff00
-.defcolor chartreuse2 rgb #76ee00
-.defcolor chartreuse3 rgb #66cd00
-.defcolor chartreuse4 rgb #458b00
-.defcolor green rgb #00ff00
-.defcolor green1 rgb #00ff00
-.defcolor green2 rgb #00ee00
-.defcolor green3 rgb #00cd00
-.defcolor green4 rgb #008b00
-.defcolor khaki rgb #f0e68c
-.defcolor khaki1 rgb #fff68f
-.defcolor khaki2 rgb #eee685
-.defcolor khaki3 rgb #cdc673
-.defcolor khaki4 rgb #8b864e
-.defcolor darkorange rgb #ff8c00
-.defcolor darkorange1 rgb #ff7f00
-.defcolor darkorange2 rgb #ee7600
-.defcolor darkorange3 rgb #cd6600
-.defcolor darkorange4 rgb #8b4500
-.defcolor darksalmon rgb #e9967a
-.defcolor lightcoral rgb #f08080
-.defcolor lightsalmon rgb #ffa07a
-.defcolor lightsalmon1 rgb #ffa07a
-.defcolor lightsalmon2 rgb #ee9572
-.defcolor lightsalmon3 rgb #cd8162
-.defcolor lightsalmon4 rgb #8b5742
-.defcolor peachpuff rgb #ffdab9
-.defcolor peachpuff1 rgb #ffdab9
-.defcolor peachpuff2 rgb #eecbad
-.defcolor peachpuff3 rgb #cdaf95
-.defcolor peachpuff4 rgb #8b7765
-.defcolor bisque rgb #ffe4c4
-.defcolor bisque1 rgb #ffe4c4
-.defcolor bisque2 rgb #eed5b7
-.defcolor bisque3 rgb #cdb79e
-.defcolor bisque4 rgb #8b7d6b
-.defcolor coral rgb #ff7f50
-.defcolor coral1 rgb #ff7256
-.defcolor coral2 rgb #ee6a50
-.defcolor coral3 rgb #cd5b45
-.defcolor coral4 rgb #8b3e2f
-.defcolor honeydew rgb #f0fff0
-.defcolor honeydew1 rgb #f0fff0
-.defcolor honeydew2 rgb #e0eee0
-.defcolor honeydew3 rgb #c1cdc1
-.defcolor honeydew4 rgb #838b83
-.defcolor orange rgb #ffa500
-.defcolor orange1 rgb #ffa500
-.defcolor orange2 rgb #ee9a00
-.defcolor orange3 rgb #cd8500
-.defcolor orange4 rgb #8b5a00
-.defcolor salmon rgb #fa8072
-.defcolor salmon1 rgb #ff8c69
-.defcolor salmon2 rgb #ee8262
-.defcolor salmon3 rgb #cd7054
-.defcolor salmon4 rgb #8b4c39
-.defcolor sienna rgb #a0522d
-.defcolor sienna1 rgb #ff8247
-.defcolor sienna2 rgb #ee7942
-.defcolor sienna3 rgb #cd6839
-.defcolor sienna4 rgb #8b4726
-.defcolor deeppink rgb #ff1493
-.defcolor deeppink1 rgb #ff1493
-.defcolor deeppink2 rgb #ee1289
-.defcolor deeppink3 rgb #cd1076
-.defcolor deeppink4 rgb #8b0a50
-.defcolor hotpink rgb #ff69b4
-.defcolor hotpink1 rgb #ff6eb4
-.defcolor hotpink2 rgb #ee6aa7
-.defcolor hotpink3 rgb #cd6090
-.defcolor hotpink4 rgb #8b3a62
-.defcolor indianred rgb #cd5c5c
-.defcolor indianred1 rgb #ff6a6a
-.defcolor indianred2 rgb #ee6363
-.defcolor indianred3 rgb #cd5555
-.defcolor indianred4 rgb #8b3a3a
-.defcolor lightpink rgb #ffb6c1
-.defcolor lightpink1 rgb #ffaeb9
-.defcolor lightpink2 rgb #eea2ad
-.defcolor lightpink3 rgb #cd8c95
-.defcolor lightpink4 rgb #8b5f65
-.defcolor mediumvioletred rgb #c71585
-.defcolor mistyrose rgb #ffe4e1
-.defcolor mistyrose1 rgb #ffe4e1
-.defcolor mistyrose2 rgb #eed5d2
-.defcolor mistyrose3 rgb #cdb7b5
-.defcolor mistyrose4 rgb #8b7d7b
-.defcolor orangered rgb #ff4500
-.defcolor orangered1 rgb #ff4500
-.defcolor orangered2 rgb #ee4000
-.defcolor orangered3 rgb #cd3700
-.defcolor orangered4 rgb #8b2500
-.defcolor palevioletred rgb #db7093
-.defcolor palevioletred1 rgb #ff82ab
-.defcolor palevioletred2 rgb #ee799f
-.defcolor palevioletred3 rgb #cd6889
-.defcolor palevioletred4 rgb #8b475d
-.defcolor violetred rgb #d02090
-.defcolor violetred1 rgb #ff3e96
-.defcolor violetred2 rgb #ee3a8c
-.defcolor violetred3 rgb #cd3278
-.defcolor violetred4 rgb #8b2252
-.defcolor firebrick rgb #b22222
-.defcolor firebrick1 rgb #ff3030
-.defcolor firebrick2 rgb #ee2c2c
-.defcolor firebrick3 rgb #cd2626
-.defcolor firebrick4 rgb #8b1a1a
-.defcolor pink rgb #ffc0cb
-.defcolor pink1 rgb #ffb5c5
-.defcolor pink2 rgb #eea9b8
-.defcolor pink3 rgb #cd919e
-.defcolor pink4 rgb #8b636c
-.defcolor red rgb #ff0000
-.defcolor red1 rgb #ff0000
-.defcolor red2 rgb #ee0000
-.defcolor red3 rgb #cd0000
-.defcolor red4 rgb #8b0000
-.defcolor tomato rgb #ff6347
-.defcolor tomato1 rgb #ff6347
-.defcolor tomato2 rgb #ee5c42
-.defcolor tomato3 rgb #cd4f39
-.defcolor tomato4 rgb #8b3626
-.defcolor darkorchid rgb #9932cc
-.defcolor darkorchid1 rgb #bf3eff
-.defcolor darkorchid2 rgb #b23aee
-.defcolor darkorchid3 rgb #9a32cd
-.defcolor darkorchid4 rgb #68228b
-.defcolor darkviolet rgb #9400d3
-.defcolor lavenderblush rgb #fff0f5
-.defcolor lavenderblush1 rgb #fff0f5
-.defcolor lavenderblush2 rgb #eee0e5
-.defcolor lavenderblush3 rgb #cdc1c5
-.defcolor lavenderblush4 rgb #8b8386
-.defcolor mediumorchid rgb #ba55d3
-.defcolor mediumorchid1 rgb #e066ff
-.defcolor mediumorchid2 rgb #d15fee
-.defcolor mediumorchid3 rgb #b452cd
-.defcolor mediumorchid4 rgb #7a378b
-.defcolor mediumpurple rgb #9370db
-.defcolor mediumpurple1 rgb #ab82ff
-.defcolor mediumpurple2 rgb #9f79ee
-.defcolor mediumpurple3 rgb #8968cd
-.defcolor mediumpurple4 rgb #5d478b
-.defcolor lavender rgb #e6e6fa
-.defcolor magenta rgb #ff00ff
-.defcolor magenta1 rgb #ff00ff
-.defcolor magenta2 rgb #ee00ee
-.defcolor magenta3 rgb #cd00cd
-.defcolor magenta4 rgb #8b008b
-.defcolor maroon rgb #b03060
-.defcolor maroon1 rgb #ff34b3
-.defcolor maroon2 rgb #ee30a7
-.defcolor maroon3 rgb #cd2990
-.defcolor maroon4 rgb #8b1c62
-.defcolor orchid rgb #da70d6
-.defcolor orchid1 rgb #ff83fa
-.defcolor orchid2 rgb #ee7ae9
-.defcolor orchid3 rgb #cd69c9
-.defcolor orchid4 rgb #8b4789
-.defcolor plum rgb #dda0dd
-.defcolor plum1 rgb #ffbbff
-.defcolor plum2 rgb #eeaeee
-.defcolor plum3 rgb #cd96cd
-.defcolor plum4 rgb #8b668b
-.defcolor purple rgb #a020f0
-.defcolor purple1 rgb #9b30ff
-.defcolor purple2 rgb #912cee
-.defcolor purple3 rgb #7d26cd
-.defcolor purple4 rgb #551a8b
-.defcolor thistle rgb #d8bfd8
-.defcolor thistle1 rgb #ffe1ff
-.defcolor thistle2 rgb #eed2ee
-.defcolor thistle3 rgb #cdb5cd
-.defcolor thistle4 rgb #8b7b8b
-.defcolor violet rgb #ee82ee
-.defcolor antiquewhite rgb #faebd7
-.defcolor antiquewhite1 rgb #ffefdb
-.defcolor antiquewhite2 rgb #eedfcc
-.defcolor antiquewhite3 rgb #cdc0b0
-.defcolor antiquewhite4 rgb #8b8378
-.defcolor floralwhite rgb #fffaf0
-.defcolor ghostwhite rgb #f8f8ff
-.defcolor navajowhite rgb #ffdead
-.defcolor navajowhite1 rgb #ffdead
-.defcolor navajowhite2 rgb #eecfa1
-.defcolor navajowhite3 rgb #cdb38b
-.defcolor navajowhite4 rgb #8b795e
-.defcolor oldlace rgb #fdf5e6
-.defcolor whitesmoke rgb #f5f5f5
-.defcolor gainsboro rgb #dcdcdc
-.defcolor ivory rgb #fffff0
-.defcolor ivory1 rgb #fffff0
-.defcolor ivory2 rgb #eeeee0
-.defcolor ivory3 rgb #cdcdc1
-.defcolor ivory4 rgb #8b8b83
-.defcolor linen rgb #faf0e6
-.defcolor seashell rgb #fff5ee
-.defcolor seashell1 rgb #fff5ee
-.defcolor seashell2 rgb #eee5de
-.defcolor seashell3 rgb #cdc5bf
-.defcolor seashell4 rgb #8b8682
-.defcolor snow rgb #fffafa
-.defcolor snow1 rgb #fffafa
-.defcolor snow2 rgb #eee9e9
-.defcolor snow3 rgb #cdc9c9
-.defcolor snow4 rgb #8b8989
-.defcolor wheat rgb #f5deb3
-.defcolor wheat1 rgb #ffe7ba
-.defcolor wheat2 rgb #eed8ae
-.defcolor wheat3 rgb #cdba96
-.defcolor wheat4 rgb #8b7e66
-.defcolor white rgb #ffffff
-.defcolor blanchedalmond rgb #ffebcd
-.defcolor darkgoldenrod rgb #b8860b
-.defcolor darkgoldenrod1 rgb #ffb90f
-.defcolor darkgoldenrod2 rgb #eead0e
-.defcolor darkgoldenrod3 rgb #cd950c
-.defcolor darkgoldenrod4 rgb #8b6508
-.defcolor lemonchiffon rgb #fffacd
-.defcolor lemonchiffon1 rgb #fffacd
-.defcolor lemonchiffon2 rgb #eee9bf
-.defcolor lemonchiffon3 rgb #cdc9a5
-.defcolor lemonchiffon4 rgb #8b8970
-.defcolor lightgoldenrod rgb #eedd82
-.defcolor lightgoldenrod1 rgb #ffec8b
-.defcolor lightgoldenrod2 rgb #eedc82
-.defcolor lightgoldenrod3 rgb #cdbe70
-.defcolor lightgoldenrod4 rgb #8b814c
-.defcolor lightgoldenrodyellow rgb #fafad2
-.defcolor lightyellow rgb #ffffe0
-.defcolor lightyellow1 rgb #ffffe0
-.defcolor lightyellow2 rgb #eeeed1
-.defcolor lightyellow3 rgb #cdcdb4
-.defcolor lightyellow4 rgb #8b8b7a
-.defcolor palegoldenrod rgb #eee8aa
-.defcolor papayawhip rgb #ffefd5
-.defcolor cornsilk rgb #fff8dc
-.defcolor cornsilk1 rgb #fff8dc
-.defcolor cornsilk2 rgb #eee8cd
-.defcolor cornsilk3 rgb #cdc8b1
-.defcolor cornsilk4 rgb #8b8878
-.defcolor gold rgb #ffd700
-.defcolor gold1 rgb #ffd700
-.defcolor gold2 rgb #eec900
-.defcolor gold3 rgb #cdad00
-.defcolor gold4 rgb #8b7500
-.defcolor goldenrod rgb #daa520
-.defcolor goldenrod1 rgb #ffc125
-.defcolor goldenrod2 rgb #eeb422
-.defcolor goldenrod3 rgb #cd9b1d
-.defcolor goldenrod4 rgb #8b6914
-.defcolor moccasin rgb #ffe4b5
-.defcolor yellow rgb #ffff00
-.defcolor yellow1 rgb #ffff00
-.defcolor yellow2 rgb #eeee00
-.defcolor yellow3 rgb #cdcd00
-.defcolor yellow4 rgb #8b8b00
-.
-.cp \n(_C
-.
-.if !\n(.C \
-. mso pspic.tmac
-.
-.do ie '\[char97]'a' \
-. do mso latin1.tmac
-.el \
-. do mso cp1047.tmac
diff --git a/contrib/groff/tmac/e.tmac b/contrib/groff/tmac/e.tmac
deleted file mode 100644
index 5c685e8b8ff4..000000000000
--- a/contrib/groff/tmac/e.tmac
+++ /dev/null
@@ -1,1666 +0,0 @@
-.\" @(#)e.tmac 2.31 (Berkeley) 5/21/88
-.\" Modified by James Clark for use with groff.
-.\"
-.\" Copyright (c) 1988 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that this notice is preserved and that due credit is given
-.\" to the University of California at Berkeley. The name of the University
-.\" may not be used to endorse or promote products derived from this
-.\" software without specific prior written permission. This software
-.\" is provided ``as is'' without express or implied warranty.
-.\" %beginstrip%
-.\"
-.\"**********************************************************************
-.\"* *
-.\"* ****** - M E N R O F F / T R O F F M A C R O S ****** *
-.\"* *
-.\"* Produced for your edification and enjoyment by: *
-.\"* Eric Allman *
-.\"* Electronics Research Laboratory *
-.\"* U.C. Berkeley. *
-.\"* current address: *
-.\"* Britton-Lee, Inc. *
-.\"* 1919 Addison Street Suite 105 *
-.\"* Berkeley, California 94704 *
-.\"* *
-.\"* VERSION 2.31 First Release: 11 Sept 1978 *
-.\"* *
-.\"* Documentation is available. *
-.\"* *
-.\"**********************************************************************
-.\"
-.\" Code on .de commands:
-.\" *** a user interface macro.
-.\" &&& a user interface macro which is redefined
-.\" when used to be the real thing.
-.\" $$$ a macro which may be redefined by the user
-.\" to provide variant functions.
-.\" --- an internal macro.
-.\"
-.if !\n(.g .ig
-.de @R \" --- initialize number register to 0, if undefined
-.if !r\\$1 .nr \\$1 0
-..
-.@R pf
-.if \n(pf .nx
-.if !\n(.g .ig
-.de @S \" --- initialize string/macro to empty, if undefined
-.if !d\\$1 .ds \\$1 \" empty
-..
-.@R @\" \" debugging level
-.\" *** INTERNAL GP MACROS ***
-.de @C \" --- change ev's, taking info with us
-.nr _S \\n(.s
-.nr _V \\n(.v
-.nr _F \\n(.f
-.nr _J \\n(.j
-.do ds _A \\n[.fam]
-.nr _I \\n(.i
-.ev \\$1
-.ps \\n(_S
-.vs \\n(_Vu
-.ft \\n(_F
-.ad \\n(_J
-.do @fam \\*(_A
-'in \\n(_Iu
-.xl \\n($lu
-.lt \\n($lu
-.rr _S
-.rr _V
-.rr _F
-.rr _I
-.rr _J
-.ls 1
-'ce 0
-..
-.de @D \" --- determine display type (Indent, Left, Center)
-.ds |p "\\$3
-.nr _d 0
-.if "\\$2"C" \
-. nr _d 1
-.if "\\$2"L" \
-. nr _d 2
-.if "\\$2"I" \
-. nr _d 3
-.if "\\$2"M" \
-. nr _d 4
-.if !\\n(_d \{\
-. nr _d \\$1
-. ds |p "\\$2
-.\}
-..
-.de @z \" --- end macro
-.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
-.if !"\\n(.z"" \
-\{\
-. tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
-. di
-. ex
-.\}
-.if \\n(?a \
-. bp \" force out final table
-.ds bp
-.ds @b\" \" don't start another page
-.br
-.if \n@>1 .tm << @z
-..
-.\" *** STANDARD HEADERS AND FOOTERS ***
-.ie \n(.g .ds $* \\\\$*
-.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
-.de he \" *** define header
-.ie !\\n(.$ \
-\{\
-. rm |4
-. rm |5
-.\}
-.el \
-\{\
-. ds |4 "\*($*
-. ds |5 "\*($*
-.\}
-..
-.de eh \" *** define even header
-.ie !\\n(.$ \
-. rm |4
-.el \
-. ds |4 "\*($*
-..
-.de oh \" *** define odd header
-.ie !\\n(.$ \
-. rm |5
-.el \
-. ds |5 "\*($*
-..
-.de fo \" *** define footer
-.ie !\\n(.$ \
-\{\
-. rm |6
-. rm |7
-.\}
-.el \
-\{\
-. ds |6 "\*($*
-. ds |7 "\*($*
-.\}
-..
-.de ef \" *** define even foot
-.ie !\\n(.$ \
-. rm |6
-.el \
-. ds |6 "\*($*
-..
-.de of \" *** define odd footer
-.ie !\\n(.$ \
-. rm |7
-.el \
-. ds |7 "\*($*
-..
-.de ep \" *** end page (must always be followed by a .bp)
-.if \\n(nl>0 \
-\{\
-. wh 0
-. rs
-. @b
-.\}
-..
-.\" *** INTERNAL HEADER AND FOOTER MACROS ***
-.de @h \" --- header
-.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
-.if (\\n(.i+\\n(.o)>=\\n(.l \
-. tm Line \\n(c. -- Offset + indent exceeds line length
-.\" initialize a pile of junk
-.nr ?h \\n(?H \" transfer "next page" to "this page"
-.nr ?H 0
-.nr ?c \\n(?C
-.nr ?C 0
-.rn |4 |0
-.rn |5 |1
-.rn |6 |2
-.rn |7 |3
-.nr _w 0 \" reset max footnote width
-.nr ?W 0 \" no wide floats this page (yet)
-.nr ?I 1
-.\" begin actual header stuff
-.ev 2
-.rs
-.if \\n(hm>0 \
-. sp |\\n(hmu \" move to header position
-.@t $h\" \" output header title
-.if \\n(tm<=0 \
-. nr tm \n(.Vu
-.sp |\\n(tmu \" move to top of text
-.ev
-.mk _k \" for columned output
-.if \\n(?n .nm 1 \" restore line numbering if n1 mode
-.nr $c 1 \" set first column
-.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
-.ie \\n(?s \
-\{\
-. nr ?s 0
-. rs
-' @b
-.\}
-.el \
-. @n\" \" begin the column
-.if \n@>2 .tm << @h
-..
-.de @n \" --- new column or page
-.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
-.if \\n(bm<=0 \
-. nr bm \\n(.Vu
-.if (\\n(_w<=\\n($l)&(\\n(?W=0) \
-\{\
-. nr _b (\\n(ppp*\\n($vu)/200u \" compute fudge factor (must be < 1P)
-. if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
-. nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
-. nr _b +\\n(bmu
-.\}
-.nr _B \\n(_bu
-.ch @f
-.wh -\\n(_bu @f
-.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
-.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
-.nr ?f 0 \" reset footnote flag
-.if \\n(?o \
-\{\
-. (f _\" \" reprocess footnotes which run off page
-. nf
-. |o
-. fi
-. )f
-. rm |o
-.\}
-.nr ?o 0
-.if \\n(?T \
-\{\
-. nr _i \\n(.i
-. in 0
-. |h\" \" output the table header
-. in \\n(_iu
-. rr _i
-. mk #T \" for tbl commands
-. ns
-.\}
-.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
-\{\
-. nr ?a 0 \" output floating keep
-. @k |t
-. if \\n(?w \
-. mk _k \" don't overstrike wide keeps
-. nr ?w 0
-.\}
-.os
-.$H\" \" special column header macro
-.ns
-..
-.de @f \" --- footer
-.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
-.if \n@>2 .nr VL \\n(.pu-\\n(nlu
-.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
-.ec
-.if \\n(?T \
-\{\
-. nr T. 1 \" for tbl commands (to output bottom line)
-. T# 1\" \" output the sides and bottom lines
-. br
-.\}
-.ev 2
-.ce 0
-.if \\n(?b \
-\{\
-. nr ?b 0
-. @k |b\" \" output bottom of page tables
-.\}
-.if \\n(?f \
-. @o\" \" output footnote if present
-.ie \\n($c<\\n($m \
-. @c\" \" handle new column
-.el \
-. @e\" \" new page
-.ev
-.if \n@>2 .tm << @f
-..
-.de @o \" --- output footnote
-.nf
-.ls 1
-.in 0
-.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
-.wh -\\n(_Bu @r
-.|f
-.fi
-.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
-.if \\n(?o \
-\{\
-. di \" just in case triggered @r
-. if \\n(dn=0 \
-\{\
-. rm |o
-. nr ?o 0
-. \}
-. nr dn \\n(_D
-. rr _D
-.\}
-.rm |f
-.ch @r
-..
-.de @c \" --- new column
-.if \n@>2 .tm >> @c %=\\n%
-.rs
-.sp |\\n(_ku
-.@O +\\n($lu+\\n($su
-.nr $c +1
-.@n
-..
-.de @e \" --- end page
-.if \n@>2 .tm >> @e
-.@O \\n(_ou
-.rs
-.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position
-.@t $f\" \" output footer title
-.nr ?h 0
-.bp
-..
-.de @t \" --- output header or footer title
-.if !\\n(?h \
-\{\
-. sz \\n(tp\" \" set header/footer type fonts, etc.
-. @F \\n(tf
-. lt \\n(_Lu \" make title span entire page
-. nf
-. \\$1
-. br
-.\}
-..
-.de $h \" $$$ print header
-.ds |z
-.if !\\n(?c \
-\{\
-. if e .ds |z "\\*(|0
-. if o .ds |z "\\*(|1
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-' tl \\*(|z
-.rm |z
-..
-.de $f \" $$$ print footer
-.ds |z
-.if \\n(?c \
-\{\
-. if e .ds |z "\\*(|0
-. if o .ds |z "\\*(|1
-.\}
-.if \(ts\\*(|z\(ts\(ts \
-\{\
-. if e .ds |z "\\*(|2
-. if o .ds |z "\\*(|3
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-' tl \\*(|z
-.rm |z
-..
-.de @r \" --- reprocess overflow footnotes
-.if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
-.di |o \" save overflow footnote
-.nr ?o 1
-.nr _D \\n(dn
-.ns
-..
-.\" *** COMMANDS WITH VARIANT DEFINITIONS ***
-.rn bp @b \" --- begin page
-.de bp \" *** begin new page (overrides columns)
-.nr $c \\n($m \" force new page, not new column
-.ie \\n(nl>0 \
-. @b \\$1
-.el \
-\{\
-. if \\n(.$>0 \
-. pn \\$1
-. if \\n(?I \
-. @h\" \" 'spring' the header trap
-.\}
-.br
-.wh 0 @h \" reset header
-..
-.rn ll xl \" *** special line length (local)
-.de ll \" *** line length (global to environments)
-.xl \\$1
-.lt \\$1
-.nr $l \\n(.l
-.if (\\n($m<=1):(\\n($l>\\n(_L) \
-. nr _L \\n(.l
-..
-.rn po @O \" --- local page offset
-.de po \" *** page offset
-.@O \\$1
-.nr _o \\n(.o
-..
-.\" Redefine the fam request to set the family in
-.\" environment 2 as well as the current environment.
-.if !\n(.g .ig
-.do rn fam @fam \" --- set family in current environment
-.do de fam \" *** set font family in ev 2 and current ev
-.do @fam \\$1
-.ev 2
-.do @fam \\$1
-.ev
-..
-.\" *** MISCELLANEOUS ROFF COMMANDS ***
-.de hx \" *** suppress headers and footers next page
-.nr ?H 1
-..
-.de ix \" *** indent, no break
-'in \\$1
-..
-.de bl \" *** contiguous blank lines
-.br
-.ne \\$1
-.rs
-.sp \\$1
-..
-.de n1 \" *** line numbering 1
-.nm 1
-.xl -\w'0000'u
-.nr ?n 1
-..
-.de n2 \" *** line numbering 2
-.nm \\$1
-.ie \\n(.$ \
-. xl -\w'0000'u
-.el \
-. xl \\n($lu
-..
-.de pa \" *** new page
-.bp \\$1
-..
-.de ro \" *** roman page numbers
-.af % i
-..
-.de ar \" *** arabic page numbers
-.af % 1
-..
-.de m1 \" *** position one space
-.nr _0 \\n(hmu
-.nr hm \\$1v
-.nr tm +\\n(hmu-\\n(_0u
-.rr _0
-..
-.de m2 \" *** position two space
-.nr tm \\n(hmu+\\n(tpp+\\$1v
-..
-.de m3 \" *** position three space
-.nr bm \\n(fmu+\\n(tpp+\\$1v
-..
-.de m4 \" *** position four space
-.nr _0 \\n(fmu
-.nr fm \\$1v
-.nr bm +\\n(fmu-\\n(_0u
-..
-.de sk \" *** leave a blank page (next page)
-.if \\n(.$>0 \
-. tm Line \\n(c. -- I cannot skip multiple pages
-.nr ?s 1
-..
-.\" *** MISCELLANEOUS USER SUPPORT COMMANDS ***
-.if !\n(.g .ig
-.de re \" *** reset tabs (TROFF defines 15 stops default)
-.ta T 0.5i
-..
-.if \n(.g .ig
-.de re
-.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
-..
-.de ba \" *** set base indent
-.ie \\n(.$ \
-. nr $i \\$1n
-.el \
-. nr $i \\n(siu*\\n($0u
-..
-.de hl \" *** draw horizontal line
-.br
-.ie \n(.g .do nr _I \\n[.in]
-.el .nr _I \\n(.i
-\l'\\n(.lu-\\n(_Iu'
-.sp
-..
-.\" *** PARAGRAPHING ***
-.de pp \" *** paragraph
-.lp \\n(piu
-..
-.de lp \" *** left aligned paragraph
-.@p
-.if \\n(.$ \
-. ti +\\$1
-.nr $p 0 1
-..
-.de ip \" *** indented paragraph w/ optional tag
-.if (\\n(ii>0)&(\\n(ii<1n) \
-. nr ii \\n(iin
-.nr _0 \\n(ii
-.if \\n(.$>1 \
-. nr _0 \\$2n
-.@p \\n(_0u
-.nr _I \\n(.iu
-.in 0
-.di |i
-\&\\$1
-.br
-.di
-.in \\n(_Iu
-.ds |j \\*(|i\\
-.if \\w"\\*(|j" \
-\{\
-. ti -\\n(_0u
-. ie \\w"\\*(|j">=\\n(_0 \
-\{\
-\\*(|j
-. br
-. \}
-. el \\*(|j\h'|\\n(_0u'\c
-.\}
-.rr _0
-.rm |i |j
-..
-.de np \" *** numbered paragraph
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-. nr $p 0 \" reset number after .bu
-.nr $p +1 \" increment paragraph number
-.@p \w'\0(000)\0'u
-.ti -\w'\0(000)\0'u
-\0(\\n($p)\h'|\w'\0(000)\0'u'\c
-..
-.de bu \" *** bulleted paragraph
-.br
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-. ns \" don't space between .bu paragraphs
-.nr $p 0-1 \" mark "bulleted paragraph" mode
-.@p \w'\0\(bu\0'u
-.ti -\w'\0\(bu\0'u
-\0\(bu\0\c
-..
-.de @p \" --- initialize for paragraph
-.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
-.in \\n($iu+\\n(pou
-.if \\n(.$ \
-. in +\\$1n
-.ce 0
-.fi
-.@F \\n(pf
-.sz \\n(pp
-.sp \\n(psu
-.ne \\n(.Lv+\\n(.Vu
-.ns
-..
-.\" *** SECTION HEADINGS ***
-.de sh \" *** section heading
-.fi
-.if (\\n(si>0)&(\\n(si<1n) \
-. nr si \\n(sin
-.ce 0
-.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.if !"\\$2"_" \
-\{\
-. ds |n \&\\$2
-. $p "\\*(|n" "\\*($n" \\n($0
-. $0 "\\*(|n" "\\*($n" \\n($0
-. rm |n
-.\}
-.nr $p 0 1 \" reset .np count
-..
-.de @d \" --- change section depth
-.if !""\\$1" \
-. nr $0 \\$1
-.if \\n($0&(\\n(.$>1) \
-. nr $\\n($0 \\$2
-.ds $n \&\"
-.ie \\n($0>=1 \
-\{\
-. if '\\n($1'0' \
-. nr $1 1
-. if (\\n(.$>=3) .if !"\\$3"-" \
-. nr $1 \\$3
-. as $n \\n($1
-.\}
-.el \
-. nr $1 0
-.ie \\n($0>=2 \
-\{\
-. if '\\n($2'0' \
-. nr $2 1
-. if (\\n(.$>=4) .if !"\\$4"-" \
-. nr $2 \\$4
-. as $n .\\n($2
-.\}
-.el \
-. nr $2 0
-.ie \\n($0>=3 \
-\{\
-. if '\\n($3'0' \
-. nr $3 1
-. if (\\n(.$>=5) .if !"\\$5"-" \
-. nr $3 \\$5
-. as $n .\\n($3
-.\}
-.el \
-. nr $3 0
-.ie \\n($0>=4 \
-\{\
-. if '\\n($4'0' \
-. nr $4 1
-. if (\\n(.$>=6) .if !"\\$6"-" \
-. nr $4 \\$6
-. as $n .\\n($4
-.\}
-.el \
-. nr $4 0
-.ie \\n($0>=5 \
-\{\
-. if '\\n($5'0' \
-. nr $5 1
-. if (\\n(.$>=7) .if !"\\$7"-" \
-. nr $5 \\$7
-. as $n .\\n($5
-.\}
-.el \
-. nr $5 0
-.ie \\n($0>=6 \
-\{\
-. if '\\n($6'0' \
-. nr $6 1
-. if (\\n(.$>=8) .if !"\\$8"-" \
-. nr $6 \\$8
-. as $n .\\n($6
-.\}
-.el \
-. nr $6 0
-..
-.de sx \" *** heading up, no increment (2.1.1 -> 2.1)
-.ce 0
-.ul 0
-.nr _0 \\n($0-1
-.if \\n(.$ .nr _0 +1
-.if \\n(.$ .nr _0 \\$1
-.@d \\n(_0
-.rr _0
-.$p "" "" \\n($0
-.nr $p 0 1 \" reset .np count
-..
-.de uh \" *** unnumbered section heading
-.$p "\\$1"
-.$0 "\\$1"
-..
-.de $p \" $$$ print section heading
-.if (\\n(si>0)&(\\n(.$>2) \
-. nr $i \\$3*\\n(si
-.in \\n($iu
-.ie !"\\$1\\$2"" \
-\{\
-. sp \\n(ssu \" one of them is non-null
-. ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
-. \" exdent if \\$3 > 0
-. ie 0\\$3 \
-. ti -(\\n(siu-\\n(sou)
-. el \
-. ti +\\n(sou
-. @F \\n(sf
-. sz \\n(sp
-. if 0\\$3 \
-. $\\$3
-. if \w"\\$2">0 \\$2.
-. if \w"\\$1">0 \\$1\f1\ \ \&
-.\}
-.el \
-. sp \\n(psu
-.@F \\n(pf
-.sz \\n(pp
-..
-.\" *** COLUMNNED OUTPUT ***
-.de 2c \" *** double columned output
-.br
-.if \\n($m>1 \
-. 1c\" \" revert to 1c if already 2c
-.nr $c 1
-.nr $m 2
-.if \\n(.$>1 \
-. nr $m \\$2
-.if \\n(.$>0 \
-. nr $s \\$1n \" param 1: column seperation
-.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
-.xl \\n($lu
-.mk _k
-.ns
-..
-.de 1c \" *** single columned output
-.br
-.nr $c 1
-.nr $m 1
-.ll \\n(_Lu \" return to normal output
-.sp |\\n(.hu
-.@O \\n(_ou
-..
-.de bc \" *** begin column
-.sp 24i
-..
-.\" *** FLOATING TABLES AND NONFLOATING BLOCKS ***
-.de (z \" *** begin floating keep
-.if \n@>4 .tm >> (z, .z=\n(.z
-.@D 4 \\$1 \\$2
-.@(
-..
-.de )z \" *** end floating keep
-.if \n@>4 .tm >> )z, .z=\n(.z
-.sp \\n(zsu
-.@)
-.if \n@>4 .tm -- )z << @), .z=\n(.z
-.rr _0
-.if !\\n(?b \
-. nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
-.nr dl -\n(.H \" fudge factor necessary to make it work
-.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
-\{\
-. nr ?a 1
-. if (\\n(dl>\\n($l)&(\\n($m>1) \
-. nr ?w 1 \" mark wider than one column (top)
-. ds |x |t
-.\}
-.el \
-\{\
-. nr ?b 1
-. if (\\n(dl>\\n($l)&(\\n($m>1) \
-. nr ?W 1 \" mark wider than one column (bottom)
-. nr _b +\\n(dnu
-. \" avoid moving @f back past the current position
-. if \\n(.p-\\n(nl-\n(.V<\\n(_b \
-. nr _b \\n(.p-\\n(nl-\n(.V
-. ch @f -\\n(_bu
-. ds |x |b
-.\}
-.da \\*(|x \" copy to save macro
-.nf
-.ls 1
-.nr ?k 1
-.if \n@>4 .tm -- )z >> \\*(|x
-\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
-.|k\" \" and the body
-.ec
-.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
-.nr ?k 0
-.rm |k\" \" remove the temp macro
-.da
-.in 0
-.ls 1
-.xl \\n($lu
-.ev
-.if \n@>4 .tm << )z, .z=\\n(.z
-..
-.de @k \" --- output floating keep
-.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
-.ev 1
-.nf
-.ls 1
-.in 0
-.sp \\n(zsu
-.\\$1
-.ec
-.br
-.rm \\$1
-.ev
-..
-.de (t \" XXX temp ref to (z
-.(z \\$1 \\$2
-..
-.de )t \" XXX temp ref to )t
-.)z \\$1 \\$2
-..
-.de (b \" *** begin block
-.br
-.@D 3 \\$1 \\$2
-.sp \\n(bsu
-.@(
-..
-.de )b \" *** end block
-.br
-.@)
-.if (\\n(bt=0):(\\n(.t<\\n(bt) \
-. ne \\n(dnu \" make it all on one page
-.ls 1
-.nf
-.|k
-.ec
-.fi
-.in 0
-.xl \\n($lu
-.ev
-.rm |k
-.sp \\n(bsu+\\n(.Lv-1v
-..
-.de @( \" --- begin keep
-.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
-.@M
-.di |k
-\!'rs
-..
-.de @M \" --- set modes for display
-.nr ?k 1
-.@C 1
-.@F \\n(df
-.if \\n($R .@V
-.vs \\n(.sp*\\n($Vu/100u
-.nf
-.if "\\*(|p"F" \
-. fi \" set fill mode if "F" parameter
-.if \\n(_d=4 \
-. in 0
-.if \\n(_d=3 \
-\{\
-. in +\\n(biu
-. xl -\\n(biu
-.\}
-.if \\n(_d=1 \
-. ce 10000
-..
-.de @) \" --- end keep
-.br
-.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
-.nr ?k 0
-.di
-.in 0
-.ce 0
-..
-.de (c \" *** begin block centered text
-.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
-.di |c
-..
-.de )c \" *** end block centered text
-.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
-.br \" force out final line
-.di
-.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
-.ev 1
-.ls 1
-.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
-.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
-.nf
-.|c
-.ec
-.in
-.ls
-.ev
-.rm |c
-..
-.\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
-.de (q \" *** begin block quote
-.br
-.@C 1
-.fi
-.sp \\n(qsu
-.in +\\n(qiu
-.xl -\\n(qiu
-.sz \\n(qp
-..
-.de )q \" *** end block quote
-.br
-.ev
-.sp \\n(qsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.de (l \" *** begin list
-.br
-.sp \\n(bsu
-.@D 3 \\$1 \\$2
-.@M
-..
-.de )l \" *** end list
-.br
-.ev
-.sp \\n(bsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.\" *** PREPROCESSOR SUPPORT ***
-.\"
-.\" EQN
-.\"
-.de EQ \" *** equation start
-.ec
-.if !\\n(?e \
-\{\
-. if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
-. @D 1 "\\$1" "\\$2"
-. @C 2
-. di |e
-.\}
-.ls 1
-.in 0
-.nf
-..
-.de EN \" *** equation end
-.br
-.ie "\\$1"C" \
-\{\
-. nr ?e 1
-. sp \\n(esu
-.\}
-.el \
-\{\
-. nr ?e 0
-. di
-. if \\n(dn \
-. @q\" \" actual equation output
-. rm |e
-. ev
-.\}
-..
-.de @q \" --- equation output
-.nr _Q \\n(dnu
-.ev
-.sp \\n(esu \" output rest of preceeding text
-.if !"\\n(.z"" \!.ne \\n(_Qu
-.ne \\n(_Qu+\n(.Vu \" keep it on one page
-.@C 2\" \" .ev 2 may be jumbled from header
-.if \\n(_d=1 \
-. in (\\n(.lu+\\n($iu-\\n(dlu)/2u
-.if \\n(_d=2 \
-. in \\n($iu
-.if \\n(_d=3 \
-. in \\n(biu+\\n($iu
-.if \\n(_d=4 \
-. in 0
-.mk _q
-.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
-.if !"\\*(|p"" \
-\{\
-. rs
-. sp (\\n(_Qu-\\n(.vu)/2u
-. tl """\\*(|p"
-. rt \\n(_qu
-.\}
-.|e
-.sp |\\n(_qu+\\n(_Qu
-.sp \\n(esu+\\n(.Lv-1v
-.rr _q
-.rr _Q
-..
-.\"
-.\" TBL
-.\"
-.de TS \" *** table start
-.sp \\n(bsu
-.@C 1
-.fi \" drop into fill mode for text boxes
-.if "\\$1"H" \
-\{\
-. di |h \" save header part
-. nr ?T 1
-.\}
-.ls 1
-.ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line
-.if \\n(.p-\\n(_b-1v<=\\n(nl \
-. ch @f \\n(nlu+\n(.Vu
-..
-.de TH \" *** end header part of table
-.nr T. 0
-.T# 0
-.di
-.nr _T \\n(?T
-.nr ?T 0
-.ne \\n(dnu+1v
-.nr ?T \\n(_T
-.nr _i \\n(.i
-.in 0
-.|h\" \" put in the initial header
-.in \\n(_iu
-.rr _i
-.mk #T
-..
-.de TE \" *** table end
-.nr ?T 0
-.ch @f -\\n(_bu \" reset pseudo-trap
-.if \\n(.p-\\n(_b<=\\n(nl \
-. ch @f \\n(nlu+\n(.Vu
-.ev
-.sp \\n(bsu+\\n(.Lv-1v
-.re
-..
-.de T&
-..
-.\"
-.\" REFER
-.\"
-.de ][ \" *** refer output
-.if \\$1>5 .tm Bad arg to []
-.[\\$1
-..
-.de [0 \" --- other
-.(f
-.ip "\\*([F.\0"
-.if !"\\*([A"" \\*([A,
-.if !"\\*([T"" \\f2\\*([T\\f1\c
-.if !"\\*([T"" .if !"\\*([O"" ,\ \"
-.ie !"\\*([O"" \\*([O
-.el .if !"\\*([T"" \&.
-.if !"\\*([D"" \\*([D.
-.@p
-.)f
-..
-.de [1 \" --- journal article
-.(f
-.ip "\\*([F.\0"
-\\*([A,
-.if !"\\*([T"" \\*(lq\\*([T,\\*(rq
-.if "\\*([V"" \\f2\\*([J\\f1,
-.if !"\\*([V"" \\f2\\*([J\\f1
-.if !"\\*([V"" \\f3\\*([V\\f1\c
-.if !"\\*([N"" (\\*([N)\c
-.if !"\\*([P"" \
-\{\
-. ie \\n([P>0 \ pp.\&
-. el \ p.\&
-\\*([P
-.\}
-.if !"\\*([I"" .if "\\*([R"" \\*([I,
-(\\*([D).
-.if !"\\*([O"" \\*([O
-.)f
-..
-.de [2 \" --- book
-.(f
-.ip "\\*([F.\0"
-\\*([A, \\f2\\*([T,\\f1
-\\*([I\c
-.if !"\\*([C"" , \\*([C\c
- (\\*([D).
-.if !"\\*([G"" Gov't. ordering no. \\*([G
-.if !"\\*([O"" \\*([O
-.)f
-..
-.de [3 \" --- article in book
-.(f
-.ip "\\*([F.\0"
-\\*([A, \\*(lq\\*([T,\\*(rq
-.if !"\\*([P"" pp. \\*([P
-in \\f2\\*([B\\f1, \c
-.if !"\\*([E"" ed. \\*([E, \c
-.if !"\\*([I"" \\*([I\c
-.if !"\\*([C"" , \\*([C\c
- (\\*([D).
-.if !"\\*([O"" \\*([O
-.)f
-..
-.de [4 \" --- report
-.(f
-.ip "\\*([F.\0"
-\\*([A, \\*(lq\\*([T,\\*(rq
-\\*([R\c
-.if !"\\*([G"" \& (\\*([G)\c
-.if !"\\*([I"" , \\*([I\c
-.if !"\\*([C"" , \\*([C\c
- (\\*([D).
-.if !"\\*([O"" \\*([O
-.)f
-..
-.de [5 \" --- tm style
-.(f
-.ip "\\*([F.\0"
-\\*([A, \\f2\\*([T\\f1,
-.ie \\n(TN \\*([M.
-.el Bell Laboratories internal memorandum (\\*([D).
-.)f
-..
-.de ]<
-.$p References
-.lp
-.rm (f )f
-..
-.de ]>
-.sp
-..
-.de ]-
-.rm [V [P [A [T [N [C [B [O [R [I [E [D
-..
-.ie \n(.V<1v \
-\{\
-. ds [. \s-2\v'-.4m'\f1
-. ds .] \v'.4m'\s+2\fP
-.\}
-.el \
-\{\
-. ds [. " [
-. ds .] ]
-.\}
-.\"
-.\" IDEAL
-.\"
-.de IS \" *** start ideal picture
-.nr g7 \\n(.u
-.ls 1
-..
-.de IF
-.if \\n(g7 .fi
-.ls
-..
-.de IE \" *** end ideal picture
-.if \\n(g7 .fi
-.ls
-..
-.\"
-.\" PIC
-.\"
-.de PS \" *** start picture: $1=height, $2=width in units or inches
-.sp 0.3
-.nr g7 \\$2
-.in (u;\\n(.l-\\n(g7>?0/2)
-.ne \\$1u
-.nr g7 \\n(.u
-.ls 1
-..
-.de PE \" *** end picture
-.ls
-.in
-.if \\n(g7 .fi
-.sp .6
-..
-.\"
-.\" GREMLIN
-.\"
-.de GS \" *** start gremlin picture
-.nr g7 (\\n(.lu-\\n(g1u)/2u
-.if "\\$1"L" .nr g7 \\n(.iu
-.if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
-.in \\n(g7u
-.nr g7 \\n(.u
-.ls 1
-.nf
-.ne \\n(g2u
-..
-.de GE \" *** end gremlin picture
-.GF
-.sp .6
-..
-.de GF \" *** finish gremlin picture; stay at top
-.ls
-.in
-.if \\n(g7 .fi
-..
-.\" *** FONT AIDS ***
-.de sz \" *** set point size and vertical spacing
-.ps \\$1
-.if \\n($r .@v
-.vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20%
-..
-.de @v \" --- possibly set $v from $r
-.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
-..
-.de @V \" --- possibly set $V from $R
-.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
-..
-.de @E \" --- store in _F argument to \f for restoring font
-.ie \\n(.f<10 \
-. ds _F \\n(.f
-.el \
-\{\
-. ie \\n(.f<100&\n(.g \
-. ds _F (\\n(.f
-. el \
-. ds _F P
-.\}
-..
-.de r \" *** enter roman font
-.@E
-.ft 1
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-..
-.de i \" *** enter italic
-.@E
-.ft 2
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-..
-.de b \" *** enter boldface
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-..
-.de rb \" *** enter real boldface
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-..
-.de bi \" *** enter bold italic
-.@E
-.ft 4
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-..
-.de u \" *** enter underlined word
-\&\\$1\l'|0\(ul'\\$2
-..
-.\" a better version of u
-.if !\n(.g .ig
-.de u
-\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
-..
-.de q \" *** enter quoted word
-\&\\*(lq\\$1\\*(rq\\$2
-..
-.de bx \" *** enter boxed word
-\k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
-..
-.de sm \" *** print in smaller font
-\s-1\\$1\\s0\\$2
-..
-.de @F \" --- change font (0 -> no change)
-.nr ~ \\$1
-.if \\n~>0 \
-. ft \\n~
-.rr ~
-..
-.\" *** FOOTNOTING ***
-.de (f \" *** begin footnote
-.ec
-.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
-.ie "\\n(.z"" \
-\{\
-. nr _D \\n(dn
-. nr _0 1v+\\n(nlu
-. ev 2
-. da |f
-. in 0
-. xl \\n($lu-\\n(fuu
-. @F \\n(ff
-. sz \\n(fp
-. vs \\n(.sp*\\n($Vu/100u
-. if !\\n(?f \
-\{\
-. nr _b +1v \" allow space for $s
-. $s
-. \}
-. br
-. if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
-\{\
-. da\" \" won't fit on page at all
-. bc
-. if !\\n(?f \
-. rm |f
-. da |f
-.\" next five lines could be dropped if headers had their own environment
-. in 0 \" reset everything from .bc
-. xl \\n($lu-\\n(fuu
-. @F \\n(ff
-. sz \\n(fp
-. vs \\n(.sp*\\n($Vu/100u
-. if !\\n(?f \
-. $s
-. br
-. \}
-. rr _0
-. sp \\n(fsu
-. nr ?f 1
-. fi
-. if !"\\$1"_" \
-. ti \\n(fiu
-. if \n@>2 .tm << (f $f=\\n($f
-.\}
-.el \
-\{\
-. ev 2
-. in 0
-. xl \\n($lu-\\n(fuu
-. @F \\n(ff
-. sz \\n(fp
-. vs \\n(.sp*\\n($Vu/100u
-. fi
-\!.(f \\$1
-\!.@N
-.\}
-..
-.de @N \" --- set no fill mode in the top-level diversion
-.ie "\\n(.z"" .nf
-.el \!.@N
-..
-.de )f \" *** end footnote
-.ie "\\n(.z"|f" \
-\{\
-. if \\n* \
-. nr $f +1
-. ds * \\*{\\n($f\\*}\k*
-. nr * 0
-. in 0
-. da
-. ev
-. if \\n(_w<\\n(dl \
-. nr _w \\n(dl \" compute maximum fn width
-. nr _b +\\n(dn
-. ch @f -\\n(_bu
-. if \\n(.p-\\n(_b<=\\n(nl \
-. ch @f \\n(nlu+\n(.Vu
-. nr dn \\n(_D
-. rr _D
-.\}
-.el \
-\{\
-. br
-\!.)f
-. ev
-.\}
-..
-.@R ff
-.if \n(ff<=0 \
-. nr ff 1 \" footnote font: Times Roman
-.@R fp
-.if \n(fp<=0 \
-. nr fp 8 \" footnote pointsize
-.de $s \" $$$ footnote separator
-\l'2i'
-..
-.\" *** DELAYED TEXT ***
-.de (d \" *** begin delayed text
-.am |d )d
-.sp \\n(bsu
-..
-.de )d \" *** end delayed text
-.if \\n# \
-. nr $d +1
-.ds # [\\n($d]\k#
-.rr #
-..
-.de pd \" *** print delayed text
-.|d
-.rm |d
-.nr $d 1 1
-.ds # [1]\k#
-..
-.\" *** INDEXES (TABLE OF CONTENTS) ***
-.nr _x 0 1
-.af _x a
-.de (x \" *** begin index entry
-.if \n@>4 .tm >> (x, .z=\\n(.z
-.ds |X x
-.if \\n(.$>0 \
-. ds |X \\$1
-.ie "\\n(.z"" \
-. nr _z 0
-.el \
-. nr _z 1
-.@\\n(_z
-..
-.de @0 \" --- finish (x if no current diversion
-.am %\\*(|X )x
-.sp \\n(xsu
-.ti -\\n(piu
-..
-.de @1 \" --- finish (x if current diversion
-.if "\\n(_x"z" .nr _x 0
-.de =\\n+(_x )x
-..
-.de )x \" *** end index entry
-.if \n@>4 .tm >> )x, .z=\\n(.z
-.ie "\\n(.z"" \
-\{\
-. ds |x \\n%
-. if \\n(.$>0 \
-. ds |x \\$1
-. if "\\*(|x"_" \
-. ig ..
-. am %\\*(|X ..
-. if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
-. ti +\\n(xuu
-\\\\a\\\\t\\$2\\*(|x
-...
-. rm |x
-. rm |X
-.\}
-.el \
-\{\
-\!.(x \\*(|X
-\!\\\\*(=\\n(_x\\\\
-\!.)x \\$1 \\$2
-\!.rm =\\n(_x
-.\}
-..
-.de xp \" *** print the index
-.br
-.@C 2
-.ls 1
-.vs \\n(.sp*\\n($Vu/100u
-.fi
-.in +\\n(piu
-.ds |X x
-.if \\n(.$>0 \
-. ds |X \\$1
-.xl -(\\n(xuu+\w'...'u)
-.di |x
-.%\\*(|X
-.br
-.di
-.rm %\\*(|X
-.xl \\n($lu
-.rm |X
-.ev
-.nf
-.in 0
-.ta \\n(.lu-\\n(xuuR \\n(.luR
-.|x
-.fi
-.in
-.rm |x
-..
-.de +c \" *** begin chapter
-.ep\" \" force out footnotes
-.if \\n(?o:\\n(?a \
-\{\
-. bp \" force out a table or more footnote
-. rs
-. ep
-.\}
-.nr ?C 1
-.nr $f 1 1
-.ds * \\*{1\\*}\k*
-.if \\n(?R \
-. pn 1
-.bp
-.in \\n($iu \" reset the indent
-.rs
-.ie \\n(.$ \
-. $c "\\$1"
-.el \
-. sp 3
-..
-.de ++ \" *** declare chapter type
-.nr _0 0
-.if "\\$1"C" \
-. nr _0 1 \" chapter
-.if "\\$1"RC" \
-. nr _0 11 \" renumbered chapter
-.if "\\$1"A" \
-. nr _0 2 \" appendix
-.if "\\$1"RA" \
-. nr _0 12 \" renumbered appendix
-.if "\\$1"P" \
-. nr _0 3 \" preliminary material
-.if "\\$1"B" \
-. nr _0 4 \" bibliographic material
-.if "\\$1"AB" \
-. nr _0 5 \" abstract
-.if \\n(_0=0 \
-. tm Line \\n(c. -- Bad mode to .++
-.nr ?R 0
-.if \\n(_0>10 \
-.\{
-. nr ?R 1
-. nr _0 -10
-.\}
-.nr ch 0 1
-.if (\\n(_0=3):(\\n(_0=5) \
-. pn 1 \" must do before .ep
-.if !\\n(_0=\\n(_M .if \\n(_M=3 \
-. pn 1 \" must do before .ep
-.ep\" \" end page for correct page number types
-.if \\n(_0=1 \
-\{\
-. af ch 1
-. af % 1
-.\}
-.if \\n(_0=2 \
-\{\
-. af ch A
-. af % 1
-.\}
-.if \\n(_0=3 \
-. af % i
-.if \\n(_0=4 \
-. af % 1
-.if \\n(_0=5 \
-. af % 1
-.if \\n(.$>1 \
-. he \\$2
-.nr _M \\n(_0
-.rr _0
-..
-.de $c \" $$$ print chapter title
-.sz 12
-.ft 3
-.ce 1000
-.if \\n(_M<3 \
-. nr ch +1
-.ie \\n(_M=1 CHAPTER\ \ \\n(ch
-.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
-.if \w"\\$1" .sp 3-\\n(.L
-.if \w"\\$1" \\$1
-.if (\\n(_M<3):(\w"\\$1") \
-. sp 4-\\n(.L
-.ce 0
-.ft
-.sz
-.ie \\n(_M=1 \
-. $C Chapter \\n(ch "\\$1"
-.el .if \\n(_M=2 \
-. $C Appendix \\n(ch "\\$1"
-..
-.de tp \" *** title page
-.hx
-.bp
-.br
-.rs
-.pn \\n%
-..
-.\" *** DATES ***
-.if \n(mo=1 .ds mo January
-.if \n(mo=2 .ds mo February
-.if \n(mo=3 .ds mo March
-.if \n(mo=4 .ds mo April
-.if \n(mo=5 .ds mo May
-.if \n(mo=6 .ds mo June
-.if \n(mo=7 .ds mo July
-.if \n(mo=8 .ds mo August
-.if \n(mo=9 .ds mo September
-.if \n(mo=10 .ds mo October
-.if \n(mo=11 .ds mo November
-.if \n(mo=12 .ds mo December
-.if \n(dw=1 .ds dw Sunday
-.if \n(dw=2 .ds dw Monday
-.if \n(dw=3 .ds dw Tuesday
-.if \n(dw=4 .ds dw Wednesday
-.if \n(dw=5 .ds dw Thursday
-.if \n(dw=6 .ds dw Friday
-.if \n(dw=7 .ds dw Saturday
-.nr y2 \n(yr%100
-.af y2 00
-.nr y4 \n(yr+1900
-.ds td \*(mo \n(dy, \n(y4
-.\" *** PARAMETRIC INITIALIZATIONS ***
-.rr x
-.nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request
-.nr $V \n($v \" same for displays & footnotes
-.nr hm 4v \" header margin
-.nr tm 7v \" top margin
-.nr bm 6v \" bottom margin
-.nr fm 3v \" footer margin
-.nr tf 3 \" title font: (real) Times Bold
-.nr tp 10 \" title point size
-.hy 14
-.nr bi 4m \" indent for blocks
-.nr pi 5n \" indent for paragraphs
-.nr pf 1 \" normal text font
-.nr pp 10 \" normal text point size
-.nr qi 4n \" indent for quotes
-.nr qp -1 \" down one point
-.nr ii 5n \" indent for .ip's and .np's
-.nr $m 1 \" max number of columns
-.nr $s 4n \" column separation
-.nr sf 3 \" section font -- Times Bold
-.nr sp 10 \" section title pointsize
-.nr ss 12p \" section prespacing
-.nr si 0 \" section indent
-.\" *** OTHER INITIALIZATION ***
-.\" GNU pic sets this register to 1, to indicate that \x should not be used.
-.@R 0x
-.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
-.ds } \s0\v'0.4m'
-.\" for compatibility with traditional -me
-.\" (the first will work only in compatibility mode)
-.ds [ \*{
-.ds ] \*}
-.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
-.ds > \s0\v'-0.4m'
-.ds - \(em
-.\" Avoid warnings from groff -ww.
-.@S |0
-.@S |1
-.@S |2
-.@S |3
-.@S $H
-.@S $0
-.@S $1
-.@S $2
-.@S $3
-.@S $4
-.@S $5
-.@S $6
-.@S $7
-.@S $8
-.@S $9
-.@S ..
-.@R po\" \" simulated page offset
-.@R $0\" \" section depth
-.@R $i\" \" paragraph base indent
-.@R $p\" \" numbered paragraph number
-.@R $r\" \" ratio of vs to ps (may override $v)
-.@R $R\" \" same for displays (may override $V)
-.@R df\" \" display font: same as surrounding text
-.@R so\" \" additional section title offset
-.@R fu\" \" footnote undent
-.@R bt\" \" block keep threshold
-.@R *\" \" has \** been referenced?
-.@R ?a\" \" pending floating keep at page top?
-.@R ?b\" \" pending floating keep at page bottom?
-.@R ?C\" \" at chapter header?
-.@R ?e\" \" in equation?
-.@R ?H\" \" suppress headers and footers next page?
-.@R ?I\" \" has the header trap been sprung?
-.@R ?n\" \" n1 mode?
-.@R ?o\" \" footnote overflow?
-.@R ?R\" \" renumbered chapter?
-.@R ?s\" \" skip next page?
-.@R ?T\" \" inside .TS H?
-.@R ?W\" \" wide floating keep at page bottom?
-.@R ?w\" \" wide floating keep at page top?
-.nr fi 0.3i
-.nr _o \n(.o
-.nr $b 3 \" bold
-.nr ps 0.35v
-.if \n(ps<\n(.V .nr ps \n(.V
-.nr bs \n(ps \" block pre/post spacing
-.nr qs \n(ps \" quote pre/post spacing
-.nr zs 1v \" float-block pre/postspacing
-.nr xs 0.2v \" index prespacing
-.nr xu 0.5i \" index undent
-.nr fs 0.2v \" footnote prespacing
-.nr es 0.5v \" equation pre/postspacing
-.if \n(es<\n(.V .nr es \n(.V
-.wh 0 @h \" set header
-.nr $l \n(.lu \" line length
-.nr _L \n(.lu \" line length of page
-.nr $c 1 \" current column number
-.nr $f 1 1 \" footnote number
-.ds * \*{1\*}\k*\" \" footnote "name"
-.nr $d 1 1 \" delayed text number
-.ds # [1]\k#\" \" delayed text "name"
-.nr _M 1 \" chapter mode is chapter
-.ds lq \(lq\" \" left quote
-.ds rq \(rq\" \" right quote
-.em @z
-.\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
-.ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
-.ds #v 0.6m
-.\" \" accents
-.ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
-.ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
-.\" \" umlaut
-.ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
-.\" \" circumflex and tilde
-.ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
-.ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
-.\" \" cedilla and czech
-.ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
-.ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
-.\" \" Norwegian A or angstrom
-.ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
-.\" \" there exists, for all
-.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
-.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
-.rm #h #v
-.ll 6.0i
-.lt 6.0i
-.de @U
-.tm The \\$1 macro has been removed from this version of the -me macros.
-..
-.de lo
-.@U lo
-..
-.de th
-.@U th
-..
-.de ac
-.@U ac
-..
diff --git a/contrib/groff/tmac/ec.tmac b/contrib/groff/tmac/ec.tmac
deleted file mode 100644
index 045abd39e9e9..000000000000
--- a/contrib/groff/tmac/ec.tmac
+++ /dev/null
@@ -1,64 +0,0 @@
-.\" ec.tmac
-.\"
-.\" Switch to EC fonts.
-.\"
-.\" Load this file before any language-specific stuff.
-.\"
-.\" hcode values are not handled.
-.\"
-.
-.nr _C \n(.C
-.cp 0
-.
-.ftr R REC
-.ftr I IEC
-.ftr B BEC
-.ftr BI BIEC
-.
-.sty 1 R
-.sty 2 B
-.sty 3 I
-.sty 4 BI
-.
-.ftr CW CWEC
-.ftr CWI CWIEC
-.ftr CR CWEC
-.ftr C CWEC
-.ftr CO CWIEC
-.ftr CI CWIEC
-.ftr TT CWEC
-.ftr H HREC
-.
-.special MI S
-.fspecial TREC TRTC
-.fspecial TIEC TITC
-.fspecial TBEC TBTC
-.fspecial TBIEC TBITC
-.fspecial HREC HRTC
-.fspecial HIEC HITC
-.fspecial HBEC HBTC
-.fspecial HBIEC HBIEC
-.fspecial CWEC CWTC SC
-.fspecial CWIEC CWITC SC
-.
-.\" remove definitions of glyphs which are in TC fonts
-.rchar \[co] \[rg]
-.rchar \[ct]
-.rchar \[tm]
-.rchar \[f/]
-.rchar \[S1] \[S2] \[S3]
-.rchar \[Of] \[Om]
-.rchar \[Cs]
-.rchar \[de]
-.
-.\" \[pl] and \[eq] must be roman
-.char \[pl] \f[TREC]+
-.char \[eq] \f[TREC]=
-.
-.schar \[nm] \o'\f[TREC]/\[mo]'
-.
-.\" an ID register
-.nr ECFONTS 1
-.
-.cp \n(_C
-.\" EOF
diff --git a/contrib/groff/tmac/eqnrc b/contrib/groff/tmac/eqnrc
deleted file mode 100644
index e23db463a68c..000000000000
--- a/contrib/groff/tmac/eqnrc
+++ /dev/null
@@ -1,65 +0,0 @@
-.\" Startup file for eqn.
-.\" $FreeBSD$
-.EQ
-sdefine << %{ < back 20 < }%
-sdefine >> %{ > back 20 > }%
-
-sdefine dot %accent "\fR\(a.\fP"%
-sdefine dotdot %accent "\fR\(ad\fP"%
-sdefine vec %accent {up 52 "\s[\En[.s]/2u]\(->\s0"}%
-sdefine dyad %accent {up 52 "\s[\En[.s]/2u]\(<>\s0"}%
-
-sdefine cdot %type "binary" \(md%
-
-ifdef X75 ! define X %1% !
-ifdef X100 ! define X %1% !
-ifdef X75-12 ! define X %1% !
-ifdef X100-12 ! define X %1% !
-
-ifdef ps ! define ps|X|html %1% !
-ifdef X ! define ps|X|html %1% !
-ifdef html ! define ps|X|html %1% !
-
-ifdef ps|X|html ! sdefine inf %"\s[\En[.s]*13u/10u]\v'12M'\(if\v'-12M'\s0"% !
-
-ifdef dvi !
-sdefine int %{type "operator" vcenter \[integral]}%
-sdefine sum %{type "operator" vcenter \[sum]}%
-sdefine prod %{type "operator" vcenter \[product]}%
-sdefine coprod %{type "operator" vcenter \[coproduct]}%
-set num1 68
-set num2 39
-set denom1 69
-set denom2 34
-set sup1 41
-set sup2 36
-set sup3 29
-set sup_drop 39
-set sub_drop 5
-set axis_height 25
-set x_height 43
-set default_rule_thickness 4
-set big_op_spacing1 11
-set big_op_spacing2 16
-set big_op_spacing3 20
-set big_op_spacing4 60
-set big_op_spacing5 10
-!
-
-ifdef X ! set axis_height 32 !
-
-ifdef ps|X|html ! set draw_lines 1 !
-
-ifdef ascii ! define n %1% !
-ifdef latin1 ! define n %1% !
-ifdef koi8-r ! define n %1% !
-ifdef utf8 ! define n %1% !
-ifdef cp1047 ! define n %1% !
-ifdef n !
-set nroff 1
-!
-
-undef X
-undef ps|X|html
-undef n
-.EN
diff --git a/contrib/groff/tmac/europs.tmac b/contrib/groff/tmac/europs.tmac
deleted file mode 100644
index bbb54f6a5b2f..000000000000
--- a/contrib/groff/tmac/europs.tmac
+++ /dev/null
@@ -1,38 +0,0 @@
-.\" europs.tmac
-.
-.do char \[eu] \f[EURO]\N'0'
-.
-.do fschar AB \[Eu] \f[EURO]\N'1'
-.do fschar ABI \[Eu] \f[EURO]\N'3'
-.do fschar AI \[Eu] \f[EURO]\N'2'
-.do fschar AR \[Eu] \f[EURO]\N'0'
-.do fschar BMB \[Eu] \f[EURO]\N'5'
-.do fschar BMBI \[Eu] \f[EURO]\N'7'
-.do fschar BMI \[Eu] \f[EURO]\N'6'
-.do fschar BMR \[Eu] \f[EURO]\N'4'
-.do fschar CB \[Eu] \f[EURO]\N'13'
-.do fschar CBI \[Eu] \f[EURO]\N'15'
-.do fschar CI \[Eu] \f[EURO]\N'14'
-.do fschar CR \[Eu] \f[EURO]\N'12'
-.do fschar HB \[Eu] \f[EURO]\N'9'
-.do fschar HBI \[Eu] \f[EURO]\N'11'
-.do fschar HI \[Eu] \f[EURO]\N'10'
-.do fschar HR \[Eu] \f[EURO]\N'8'
-.do fschar HNB \[Eu] \f[EURO]\N'9'
-.do fschar HNBI \[Eu] \f[EURO]\N'11'
-.do fschar HNI \[Eu] \f[EURO]\N'10'
-.do fschar HNR \[Eu] \f[EURO]\N'8'
-.do fschar NB \[Eu] \f[EURO]\N'5'
-.do fschar NBI \[Eu] \f[EURO]\N'7'
-.do fschar NI \[Eu] \f[EURO]\N'6'
-.do fschar NR \[Eu] \f[EURO]\N'4'
-.do fschar PB \[Eu] \f[EURO]\N'5'
-.do fschar PBI \[Eu] \f[EURO]\N'7'
-.do fschar PI \[Eu] \f[EURO]\N'6'
-.do fschar PR \[Eu] \f[EURO]\N'4'
-.do fschar TB \[Eu] \f[EURO]\N'5'
-.do fschar TBI \[Eu] \f[EURO]\N'7'
-.do fschar TI \[Eu] \f[EURO]\N'6'
-.do fschar TR \[Eu] \f[EURO]\N'4'
-.
-.\" EOF
diff --git a/contrib/groff/tmac/fixmacros.sed b/contrib/groff/tmac/fixmacros.sed
deleted file mode 100644
index 56caf9fd7423..000000000000
--- a/contrib/groff/tmac/fixmacros.sed
+++ /dev/null
@@ -1,7 +0,0 @@
-# try to fix macros for AT&T troff so that they work without groff's -C switch
-s/^\([.'][ ]*[^\\ ][^ \\]\)\([^ ]\)/\1 \2/
-s/^\(\\![.'][ ]*[^\\ ][^ \\]\)\([^ ]\)/\1 \2/
-s/\([.'][ ]*i[ef] *[^ ]* [.'][ ]*[^\\0-9 ][^ \\]\)\([^ ]\)/\1 \2/
-s/\([.'][ ]*i[ef] *[^ ]* \\{[.'][ ]*[^\\0-9 ][^ \\]\)\([^ ]\)/\1 \2/
-s/\([.'][ ]*[da]s *[^ \\][^ \\]\)\([^ ]\)/\1 \2/
-s/\\\*\[/\\*[[]/
diff --git a/contrib/groff/tmac/groff_man.man b/contrib/groff/tmac/groff_man.man
deleted file mode 100644
index 985014ebedec..000000000000
--- a/contrib/groff/tmac/groff_man.man
+++ /dev/null
@@ -1,775 +0,0 @@
-.ig
-Copyright (C) 1999-2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.de TQ
-. br
-. ns
-. TP \\$1
-..
-.
-.
-.TH GROFF_MAN @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH NAME
-.
-groff_man \- groff `man' macros to support generation of man pages
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH SYNOPSIS
-.
-.B groff
-.B \-man
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.br
-.B groff
-.B \-m\ man
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH DESCRIPTION
-.
-The
-.B man
-macros used to generate
-.I \%man\~pages
-with
-.I groff
-were written by James Clark.
-.
-This document provides a brief summary of the use of each macro in that
-package.
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH OPTIONS
-.
-The
-.B man
-macros understand the following command line options (which define
-various registers).
-.
-.TP
-.B \-rcR=1
-This option (the default if in nroff mode) will create a single, very
-long page instead of multiple pages.
-.
-Say
-.B \-rcR=0
-to disable it.
-.
-.TP
-.B \-rC1
-If more than one manual page is given on the command line, number the
-pages continuously, rather than starting each at\ 1.
-.
-.TP
-.B \-rD1
-Double-sided printing.
-.
-Footers for even and odd pages are formatted differently.
-.
-.TP
-.BI \-rFT= dist
-Set distance of the footer relative to the bottom of the page if
-negative or relative to the top if positive.
-.
-The default is -0.5i.
-.
-.TP
-.BI \-rHY= flags
-Set hyphenation flags.
-.
-Possible values are 1\ to hyphenate without restrictions, 2\ to not
-hyphenate the last word on a page, 4\ to not hyphenate the last two
-characters of a word, and 8\ to not hyphenate the first two characters
-of a word.
-.
-These values are additive; the default is\ 14.
-.
-.TP
-.BI \-rIN= width
-Set body text indentation to
-.IR width .
-The default is 7n for
-.IR nroff ,
-7.2n for
-.IR troff .
-For
-.IR nroff ,
-this value should always be an integer multiple of unit `n' to get
-consistent indentation.
-.
-.TP
-.BI \-rLL= line-length
-Set line length.
-.
-If this option is not given,
-the line length is set to respect any value set by a prior `.ll' request,
-(which
-.I must
-be in effect when the `.TH' macro is invoked),
-if this differs from the built\-in default for the formatter;
-otherwise it defaults to 78n in
-.I nroff
-mode and 6.5i in
-.I troff
-mode.
-.
-.IP
-Note that the use of a `.ll' request to initialize the line length
-is supported for backward compatibility with some versions of the
-.B man
-program;
-direct initialization of the `LL' register should
-.I always
-be preferred to the use of such a request.
-In particular, note that a `.ll\ 65n' request will
-.I not
-preserve the normal
-.I nroff
-default line length,
-(the
-.B man
-default initialization to 78n will prevail),
-whereas,
-the `-rLL=65n' option, or an equivalent `.nr\ LL\ 65n'
-request preceding the use of the `TH' macro,
-.I will
-set a line length of 65n.
-.
-.TP
-.BI \-rLT= title-length
-Set title length.
-.
-If this option is not given, the title length defaults to the line
-length.
-.
-.TP
-.BI \-rP nnn
-Enumeration of pages will start with
-.I nnn
-rather than with\ 1.
-.
-.TP
-.BI \-rS xx
-Base document font size is
-.I xx
-points
-.RI ( xx
-can be 10, 11, or\ 12) rather than 10\ points.
-.
-.TP
-.BI \-rSN= width
-Set sub-subheading indentation to
-.IR width .
-The default is 3n.
-.
-.TP
-.BI \-rX nnn
-After page\ \c
-.IR nnn ,
-number pages as
-.IR nnn a,
-.IR nnn b,
-.IR nnn c,
-etc.
-.
-For example, the option `\-rX2' will produce the following page
-numbers: 1, 2, 2a, 2b, 2c, etc.
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH USAGE
-.
-This section describes the available macros for manual pages.
-.
-For further customization, put additional macros and requests into the
-file
-.B man.local
-which will be loaded immediately after the
-.B man
-package.
-.
-.TP
-.BI .TH " title section \fB[\fPextra1\fB]\fP \fB[\fPextra2\fB]\fP \fB[\fPextra3\fB]"
-Set the title of the
-.I \man\~page
-to
-.I title
-and the section to
-.IR section ,
-which must take on a value between 1 and\ 8.
-.
-The value
-.I section
-may also have a string appended, e.g. `.pm', to indicate a specific
-subsection of the
-.IR \%man\~pages .
-Both
-.I title
-and
-.I section
-are positioned at the left and right in the header line (with
-.I section
-in parentheses immediately appended to
-.IR title .
-.I extra1
-will be positioned in the middle of the footer line.
-.I extra2
-will be positioned at the left in the footer line (or at the left on
-even pages and at the right on odd pages if double-sided printing is
-active).
-.I extra3
-is centered in the header line.
-.
-.IP
-For HTML output, headers and footers are completely supressed.
-.
-.IP
-Additionally, this macro starts a new page; the new line number is\ 1
-again (except if the `-rC1' option is given on the command line) --
-this feature is intended only for formatting multiple
-.IR \%man\~pages ;
-a single
-.I \%man\~page
-should contain exactly one
-.B TH
-macro at the beginning of the file.
-.
-.TP
-.BI ".SH [" "text for a heading" ]
-Set up an unnumbered section heading sticking out to the left.
-.
-Prints out all the text following
-.B SH
-up to the end of the line (or the text in the next input line if there
-is no argument to
-.BR SH )
-in bold face
-(or the font specified by the string
-.BR HF ),
-one size larger than the base document size.
-.
-Additionally, the left margin and the indentation for the following
-text is reset to the default values.
-.
-.TP
-.BI ".SS [" "text for a heading" ]
-Set up a secondary, unnumbered section heading.
-.
-Prints out all the text following
-.B SS
-up to the end of the line (or the text in the next input line if there
-is no argument to
-.BR SS )
-in bold face
-(or the font specified by the string
-.BR HF ),
-at the same size as the base document size.
-.
-Additionally, the left margin and the indentation for the following
-text is reset to the default values.
-.
-.TP
-.BI ".TP [" nnn ]
-Set up an indented paragraph with label.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is `n' if omitted),
-otherwise it is set to the previous indentation value specified with
-.BR TP ,
-.BR IP ,
-or
-.B HP
-(or to the default value if none of them have been used yet).
-.
-.IP
-The first input line of text following this macro is interpreted as a
-string to be printed flush-left, as it is appropriate for a label.
-.
-It is not interpreted as part of a paragraph, so there is no attempt
-to fill the first line with text from the following input lines.
-.
-Nevertheless, if the label is not as wide as the indentation the
-paragraph starts at the same line (but indented), continuing on the
-following lines.
-.
-If the label is wider than the indentation the descriptive part of the
-paragraph begins on the line following the label, entirely indented.
-.
-Note that neither font shape nor font size of the label is set to a
-default value; on the other hand, the rest of the text will have
-default font settings.
-.
-.IP
-The
-.B TP
-macro is the macro used for the explanations you are just reading.
-.
-.TP
-.B .LP
-.TQ
-.B .PP
-.TQ
-.B .P
-These macros are mutual aliases.
-.
-Any of them causes a line break at the current position, followed by a
-vertical space downwards by the amount specified by the
-.B PD
-macro.
-.
-The font size and shape are reset to the default value (10pt
-resp. Roman).
-.
-Finally, the current left margin and the indentation are restored.
-.
-.TP
-.BI ".IP [" designator "] [" nnn ]
-Set up an indented paragraph, using
-.I designator
-as a tag to mark its beginning.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is `n' if omitted),
-otherwise it is set to the previous indentation value specified with
-.BR TP ,
-.BR IP ,
-or
-.B HP
-(or to the default value if none of them have been used yet).
-.
-Font size and face of the paragraph (but not the designator) are reset
-to its default values.
-.
-.IP
-To start an indented paragraph with a particular indentation but
-without a designator, use `""' (two doublequotes) as the second
-argument.
-.
-.IP
-For example, the following paragraphs were all set up with bullets as
-the designator, using `.IP\ \\(bu\ 4'.
-.
-The whole block has been enclosed with `.RS' and `.RE' to set the left
-margin temporarily to the current indentation value.
-.
-.RS
-.IP \(bu 4
-.B IP
-is one of the three macros used in the
-.B man
-package to format lists.
-.IP \(bu 4
-.B HP
-is another.
-.
-This macro produces a paragraph with a left hanging indentation.
-.IP \(bu 4
-.B TP
-is another.
-.
-This macro produces an unindented label followed by an indented
-paragraph.
-.RE
-.
-.TP
-.BI ".HP [" nnn ]
-Set up a paragraph with hanging left indentation.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is `n' if omitted),
-otherwise it is set to the previous indentation value specified with
-.BR TP ,
-.BR IP ,
-or
-.B HP
-(or to the default value if none of them have been used yet).
-.
-Font size and face are reset to its default values.
-.
-The following paragraph illustrates the effect of this macro with
-hanging indentation set to\ 4 (enclosed by
-.B .RS
-and
-.B .RE
-to set the left margin temporarily to the current indentation):
-.
-.RS
-.HP 4
-This is a paragraph following an invocation of the
-.B HP
-macro.
-.
-As you can see, it produces a paragraph where all lines but the first
-are indented.
-.RE
-.
-.TP
-.BI ".RS [" nnn ]
-This macro moves the left margin to the right by the value
-.I nnn
-if specified (default unit is `n'); otherwise it is set to the
-previous indentation value specified with
-.BR TP ,
-.BR IP ,
-or
-.B HP
-(or to the default value if none of them have been used yet).
-.
-The indentation value is then set to the default.
-.
-.IP
-Calls to the
-.B RS
-macro can be nested.
-.
-.TP
-.BI ".RE [" nnn ]
-This macro moves the left margin back to level
-.IR nnn ,
-restoring the previous left margin.
-.
-If no argument is given, it moves one level back.
-.
-The first level (i.e., no call to
-.B RS
-yet) has number\ 1, and each call to
-.B RS
-increases the level by\ 1.
-.
-.PP
-To summarize, the following macros cause a line break with the
-insertion of vertical space (which amount can be changed with the
-.B PD
-macro):
-.BR SH ,
-.BR SS ,
-.BR TP ,
-.B LP
-.RB ( PP ,
-.BR P ),
-.BR IP ,
-and
-.BR HP .
-The macros
-.B RS
-and
-.B RE
-also cause a break but no insertion of vertical space.
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH "MACROS TO SET FONTS"
-.
-The standard font is Roman; the default text size is 10\ point.
-.
-.TP
-.BI ".SM [" text ]
-Causes the text on the same line or the text on the next input line to
-appear in a font that is one point size smaller than the default font.
-.
-.TP
-.BI ".SB [" text ]
-Causes the text on the same line or the text on the next input line to
-appear in boldface font, one point size smaller than the default font.
-.
-.TP
-.BI ".BI " text
-Causes text on the same line to appear alternately in bold face and
-italic.
-.
-The text must be on the same line as the macro call.
-.
-Thus
-.RS
-.IP
-\&.BI this "word and" that
-.PP
-would cause `this' and `that' to appear in bold face, while `word and'
-appears in italics.
-.RE
-.
-.TP
-.BI ".IB " text
-Causes text to appear alternately in italic and bold face.
-.
-The text must be on the same line as the macro call.
-.
-.TP
-.BI ".RI " text
-Causes text on the same line to appear alternately in roman and
-italic.
-.
-The text must be on the same line as the macro call.
-.
-.TP
-.BI ".IR " text
-Causes text on the same line to appear alternately in italic and
-roman.
-.
-The text must be on the same line as the macro call.
-.
-.TP
-.BI ".BR " text
-Causes text on the same line to appear alternately in bold face and
-roman.
-.
-The text must be on the same line as the macro call.
-.
-.TP
-.BI ".RB " text
-Causes text on the same line to appear alternately in roman and bold
-face.
-.
-The text must be on the same line as the macro call.
-.
-.TP
-.BI ".B [" text ]
-Causes
-.I text
-to appear in bold face.
-.
-If no text is present on the line where the macro is called the text
-of the next input line appears in bold face.
-.
-.TP
-.BI ".I [" text ]
-Causes
-.I text
-to appear in italic.
-.
-If no text is present on the line where the macro is called the text
-of the next input line appears in italic.
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH "MISCELLANEOUS"
-.
-The default indentation is 7.2n in troff mode and 7n in nroff mode
-except for
-.B grohtml
-which ignores indentation.
-.
-.TP
-.B .DT
-Set tabs every 0.5 inches.
-.
-Since this macro is always called during a
-.B TH
-request, it makes sense to call it only if the tab positions have been
-changed.
-.
-.TP
-.BI ".PD [" nnn ]
-Adjust the empty space before a new paragraph or section.
-.
-The optional argument gives the amount of space (default unit is `v');
-without parameter, the value is reset to its default value (1\ line in
-nroff mode, 0.4v\ otherwise).
-.
-This affects the macros
-.BR SH ,
-.BR SS ,
-.BR TP ,
-.B LP
-(resp.\&
-.B PP
-and
-.BR P ),
-.BR IP ,
-and
-.BR HP .
-.
-.TP
-.BI ".AT [" system " [" release ]]
-Alter the footer for use with \f[CR]AT&T\f[]
-.IR \%man\~pages .
-This command exists only for compatibility; don't use it.
-.
-See the
-.I groff
-info manual for more.
-.
-.TP
-.BI ".UC [" version ]
-Alter the footer for use with \f[CR]BSD\f[]
-.IR \%man\~pages .
-This command exists only for compatibility; don't use it.
-.
-See the
-.I groff
-info manual for more.
-.
-.TP
-.B ".PT"
-Print the header string.
-.
-Redefine this macro to get control of the header.
-.
-.TP
-.B ".BT"
-Print the footer string.
-.
-Redefine this macro to get control of the footer.
-.
-.PP
-The following strings are defined:
-.TP
-.B \e*S
-Switch back to the default font size.
-.
-.TP
-.B \e*R
-The `registered' sign.
-.
-.TP
-.B \e*(Tm
-The `trademark' sign.
-.
-.TP
-.B \e*(lq
-.TQ
-.B \e*(rq
-Left and right quote.
-.
-This is equal to `\e(lq' and `\e(rq', respectively.
-.
-.TP
-.B \e*(HF
-The typeface used to print headings and subheadings.
-.
-The default is `B'.
-.
-.PP
-If a preprocessor like
-.B @g@tbl
-or
-.B @g@eqn
-is needed, it has become usage to make the first line of the
-.I \%man\~page
-look like this:
-.PP
-.RS
-.BI .\e"\ word
-.RE
-.PP
-Note the single space character after the double quote.
-.I word
-consists of letters for the needed preprocessors: `e' for
-.BR @g@eqn ,
-`r' for
-.BR @g@refer ,
-and `t' for
-.BR @g@tbl .
-Modern implementations of the
-.B man
-program read this first line and automatically call the right
-preprocessor(s).
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH FILES
-.TP
-.B man.tmac
-.TQ
-.B an.tmac
-These are wrapper files to call
-.BR andoc.tmac .
-.TP
-.B andoc.tmac
-This file checks whether the
-.B man
-macros or the
-.B mdoc
-package should be used.
-.TP
-.B an-old.tmac
-All
-.B man
-macros are contained in this file.
-.TP
-.B man.local
-Local changes and customizations should be put into this file.
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH "SEE ALSO"
-.
-Since the
-.B man
-macros consist of groups of
-.I groff
-requests, one can, in principle, supplement the functionality of the
-.B man
-macros with individual
-.I groff
-requests where necessary.
-.
-See the
-.I groff
-info pages for a complete reference of all requests.
-.
-.PP
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.BR man (1),
-.BR man (7),
-.
-.
-.\" -----------------------------------------------------------------
-.
-.SH AUTHOR
-.
-This manual page was originally written for the Debian GNU/Linux
-system by Susan G. Kleinmann <sgk@debian.org>, corrected and updated
-by Werner Lemberg <wl@gnu.org>, and is now part of the GNU troff
-distribution.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/groff_mdoc.man b/contrib/groff/tmac/groff_mdoc.man
deleted file mode 100644
index 98943a697632..000000000000
--- a/contrib/groff/tmac/groff_mdoc.man
+++ /dev/null
@@ -1,4275 +0,0 @@
-.\" t
-.\" groff_mdoc.man
-.\"
-.\" A complete reference of the mdoc macro package for GNU troff.
-.\"
-.\" Based on NetBSD's mdoc.samples.7, version 1.21.
-.\"
-.\"
-.\" Warning: You can't format this file with the old mdoc macros!
-.\"
-.\"
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted. See
-.\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)mdoc.samples.7 8.2 (Berkeley) 12/30/93
-.\"
-.\" This reference invokes every macro in the package several
-.\" times and is guaranteed to give a worst case performance
-.\" for an already extremely slow package.
-.\"
-.
-.Dd November 2, 2010
-.Dt GROFF_MDOC 7
-.Os
-.
-.
-.Sh NAME
-.
-.Nm groff_mdoc
-.Nd reference for groff's mdoc implementation
-.
-.
-.Sh SYNOPSIS
-.
-.Nm groff Fl m Ns Cm doc Ar
-.
-.
-.Sh DESCRIPTION
-.
-A complete reference for writing
-.Ux
-manual pages with the
-.Nm \-mdoc
-macro package; a
-.Em content Ns -based
-and
-.Em domain Ns -based
-formatting package for
-.Tn GNU
-.Xr troff 1 .
-Its predecessor, the
-.Xr \-man 7
-package, addressed page layout leaving the manipulation of fonts and other
-typesetting details to the individual author.
-In
-.Nm \-mdoc ,
-page layout macros make up the
-.Em "page structure domain"
-which consists of macros for titles, section headers, displays and lists
-\- essentially items which affect the physical position of text on a
-formatted page.
-In addition to the page structure domain, there are two more domains, the
-.Em manual
-domain and the
-.Em general
-text domain.
-The general text domain is defined as macros which perform tasks such as
-quoting or emphasizing pieces of text.
-The manual domain is defined as macros that are a subset of the day to day
-informal language used to describe commands, routines and related
-.Ux
-files.
-Macros in the manual domain handle command names, command line arguments and
-options, function names, function parameters, pathnames, variables, cross
-references to other manual pages, and so on.
-These domain items have value for both the author and the future user of the
-manual page.
-Hopefully, the consistency gained across the manual set will provide easier
-translation to future documentation tools.
-.Pp
-Throughout the
-.Ux
-manual pages, a manual entry is simply referred to as a man page, regardless
-of actual length and without sexist intention.
-.
-.
-.Sh "GETTING STARTED"
-.
-The material presented in the remainder of this document is outlined
-as follows:
-.
-.Bl -enum -width 3n -offset indent
-. It
-. Tn "TROFF IDIOSYNCRASIES"
-.
-. Bl -tag -width 2n -compact
-. It "Macro Usage"
-. It "Passing Space Characters in an Argument"
-. It "Trailing Blank Space Characters"
-. It "Escaping Special Characters"
-. It "Other Possible Pitfalls"
-. El
-.
-. It
-. Tn "A MANUAL PAGE TEMPLATE"
-.
-. It
-. Tn "CONVENTIONS"
-.
-. It
-. Tn "TITLE MACROS"
-.
-. It
-. Tn "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
-.
-. Bl -tag -width 2n -compact
-. It "What's in a Name" Ns ...
-. It "General Syntax"
-. El
-.
-. It
-. Tn "MANUAL DOMAIN"
-.
-. Bl -tag -width 2n -compact
-. It "Addresses"
-. It "Author Name"
-. It "Arguments"
-. It "Configuration Declarations (Section Four Only)"
-. It "Command Modifiers"
-. It "Defined Variables"
-. It "Errno's"
-. It "Environment Variables"
-. It "Flags"
-. It "Function Declarations"
-. It "Function Types"
-. It "Functions (Library Routines)"
-. It "Function Arguments"
-. It "Return Values"
-. It "Exit Status"
-. \" .It "Header File (including source code)"
-. It "Interactive Commands"
-. It "Library Names"
-. It "Literals"
-. It "Names"
-. It "Options"
-. It "Pathnames"
-. It "Standards"
-. It "Variable Types"
-. It "Variables"
-. It "Manual Page Cross References"
-. El
-.
-. It
-. Tn "GENERAL TEXT DOMAIN"
-.
-. Bl -tag -width 2n -compact
-. It "AT&T Macro"
-. It "BSD Macro"
-. It "NetBSD Macro"
-. It "FreeBSD Macro"
-. It "DragonFly Macro"
-. It "OpenBSD Macro"
-. It "BSD/OS Macro"
-. It "UNIX Macro"
-. It "Emphasis Macro"
-. It "Font Mode"
-. It "Enclosure and Quoting Macros"
-. It "No-Op or Normal Text Macro"
-. It "No-Space Macro"
-. It "Section Cross References"
-. It "Symbolics"
-. It "Mathematical Symbols"
-. It "References and Citations"
-. It "Trade Names (or Acronyms and Type Names)"
-. It "Extended Arguments"
-. El
-.
-. It
-. Tn "PAGE STRUCTURE DOMAIN"
-.
-. Bl -tag -width 2n -compact
-. It "Section Headers"
-. It "Subsection Headers"
-. It "Paragraphs and Line Spacing"
-. It "Keeps"
-. It "Examples and Displays"
-. It "Lists and Columns"
-. El
-.
-. It
-. Tn "MISCELLANEOUS MACROS"
-.
-. It
-. Tn "PREDEFINED STRINGS"
-.
-. It
-. Tn "DIAGNOSTICS"
-.
-. It
-. Tn "FORMATTING WITH GROFF, TROFF, AND NROFF"
-.
-. It
-. Tn "FILES"
-.
-. It
-. Tn "SEE ALSO"
-.
-. It
-. Tn "BUGS"
-.El
-.
-.\" XXX
-.if t \
-. ne 7
-.
-.
-.Sh "TROFF IDIOSYNCRASIES"
-.
-The
-.Nm \-mdoc
-package attempts to simplify the process of writing a man page.
-Theoretically, one should not have to learn the tricky details of
-.Tn GNU
-.Xr troff 1
-to use
-.Nm \-mdoc ;
-however, there are a few limitations which are unavoidable and best gotten
-out of the way.
-And, too, be forewarned, this package is
-.Em not
-fast.
-.
-.Ss "Macro Usage"
-.
-As in
-.Tn GNU
-.Xr troff 1 ,
-a macro is called by placing a
-.Ql .\&
-(dot character) at the beginning of a line followed by the two-character
-(or three-character) name for the macro.
-There can be space or tab characters between the dot and the macro name.
-Arguments may follow the macro separated by spaces (but
-.Em no
-tabs).
-It is the dot character at the beginning of the line which causes
-.Tn GNU
-.Xr troff 1
-to interpret the next two (or more) characters as a macro name.
-A single starting dot followed by nothing is ignored.
-To place a
-.Ql .\&
-(dot character) at the beginning of an input line in some context other than
-a macro invocation, precede the
-.Ql .\&
-(dot) with the
-.Ql \e&
-escape sequence which translates literally to a zero-width space, and is
-never displayed in the output.
-.Pp
-In general,
-.Tn GNU
-.Xr troff 1
-macros accept an unlimited number of arguments (contrary to other versions
-of troff which can't handle more than nine arguments).
-In limited cases, arguments may be continued or extended on the next
-line (See
-.Sx Extended Arguments
-below).
-Almost all macros handle quoted arguments (see
-.Sx Passing Space Characters in an Argument
-below).
-.Pp
-Most of the
-.Nm \-mdoc
-general text domain and manual domain macros are special in that their
-argument lists are
-.Em parsed
-for callable macro names.
-This means an argument on the argument list which matches a general text or
-manual domain macro name (and which is defined to be callable) will be
-executed or called when it is processed.
-In this case the argument, although the name of a macro, is not preceded by
-a
-.Ql .\&
-(dot).
-This makes it possible to nest macros; for example the option macro,
-.Ql .Op ,
-may
-.Em call
-the flag and argument macros,
-.Ql \&Fl
-and
-.Ql \&Ar ,
-to specify an optional flag with an argument:
-.
-.Bl -tag -width ".Op Fl s Ar bytes" -offset indent
-.It Op Fl s Ar bytes
-is produced by
-.Ql ".Op Fl s Ar bytes"
-.El
-.
-.Pp
-To prevent a string from being interpreted as a macro name, precede the
-string with the escape sequence
-.Ql \e& :
-.
-.Bl -tag -width ".Op \&Fl s \&Ar bytes" -offset indent
-.It Op \&Fl s \&Ar bytes
-is produced by
-.Ql ".Op \e&Fl s \e&Ar bytes"
-.El
-.
-.Pp
-Here the strings
-.Ql \&Fl
-and
-.Ql \&Ar
-are not interpreted as macros.
-Macros whose argument lists are parsed for callable arguments are referred
-to as
-.Em parsed
-and macros which may be called from an argument list are referred to as
-.Em callable
-throughout this document.
-This is a technical
-.Em faux pas
-as almost all of the macros in
-.Nm \-mdoc
-are parsed, but as it was cumbersome to constantly refer to macros as
-being callable and being able to call other macros, the term parsed
-has been used.
-.
-.Pp
-In the following, we call an
-.Nm \-mdoc
-macro which starts a line (with a leading dot) a
-.Em command
-if this distinction is necessary.
-.
-.Ss "Passing Space Characters in an Argument"
-.
-Sometimes it is desirable to give as an argument a string containing one or
-more blank space characters, say, to specify arguments to commands which
-expect particular arrangement of items in the argument list.
-Additionally, it makes
-.Nm \-mdoc
-working faster.
-For example, the function command
-.Ql .Fn
-expects the first argument to be the name of a function and any remaining
-arguments to be function parameters.
-As
-.Tn ANSI\~C
-stipulates the declaration of function parameters in the parenthesized
-parameter list, each parameter is guaranteed to be at minimum a two word
-string.
-For example,
-.Fa int foo .
-.Pp
-There are two possible ways to pass an argument which contains
-an embedded space.
-One way of passing a string containing blank spaces is to use the hard or
-unpaddable space character
-.Ql \e\ ,
-that is, a blank space preceded by the escape character
-.Ql \e .
-This method may be used with any macro but has the side effect of
-interfering with the adjustment of text over the length of a line.
-.Xr Troff
-sees the hard space as if it were any other printable character and cannot
-split the string into blank or newline separated pieces as one would expect.
-This method is useful for strings which are not expected to overlap a line
-boundary.
-An alternative is to use
-.Ql \e~ ,
-a paddable (i.e.\& stretchable), unbreakable space (this is a
-.Tn GNU
-.Xr troff 1
-extension).
-The second method is to enclose the string with double quotes.
-.Pp
-For example:
-.
-.Bl -tag -width ".Fn fetch char\ *str" -offset indent
-.It Fn fetch char\ *str
-is created by
-.Ql ".Fn fetch char\e *str"
-.It Fn fetch "char *str"
-can also be created by
-.Ql ".Fn fetch \*[q]char *str\*[q]"
-.El
-.
-.Pp
-If the
-.Ql \e
-before the space in the first example
-or double quotes in the second example
-were omitted,
-.Ql .Fn
-would see three arguments, and the result would be:
-.Pp
-.Dl Fn fetch char *str
-.Pp
-.\" For an example of what happens when the parameter list overlaps a newline
-.\" boundary, see the
-.\" .Sx BUGS
-.\" section.
-.
-.Ss "Trailing Blank Space Characters"
-.
-.Xr Troff
-can be confused by blank space characters at the end of a line.
-It is a wise preventive measure to globally remove all blank spaces
-from
-.Ao blank-space Ac Ns Ao end-of-line Ac
-character sequences.
-Should the need arise to use a blank character at the end of a line, it
-may be forced with an unpaddable space and the
-.Ql \e&
-escape character.
-For example,
-.Ql string\e\ \e& .
-.
-.Ss "Escaping Special Characters"
-.
-Special characters like the newline character
-.Ql \en
-are handled by replacing the
-.Ql \e
-with
-.Ql \ee
-(e.g.\&
-.Ql \een )
-to preserve the backslash.
-.
-.Ss "Other Possible Pitfalls"
-.
-A warning is emitted when an empty input line is found outside of displays
-(see below).
-Use
-.Ql .sp
-instead.
-(Well, it is even better to use
-.Nm \-mdoc
-macros to avoid the usage of low-level commands.)
-.Pp
-Leading spaces will cause a break and are output directly.
-Avoid this behaviour if possible.
-Similarly, do not use more than one space character between words in an
-ordinary text line; contrary to other text formatters, they are
-.Em not
-replaced with a single space.
-.Pp
-You can't pass
-.Ql \*[q]
-directly as an argument.
-Use
-.Ql \e*[q]
-(or
-.Ql \e*q )
-instead.
-.Pp
-By default,
-.Xr troff 1
-inserts two space characters after a punctuation mark closing a sentence;
-characters like
-.Ql \&)
-or
-.Ql \&'
-are treated transparently, not influencing the sentence-ending behaviour.
-To change this, insert
-.Ql \e&
-before or after the dot:
-.
-.Bd -literal -offset indent
-The
-\&.Ql .
-character.
-\&.Pp
-The
-\&.Ql \e&.
-character.
-\&.Pp
-\&.No test .
-test
-\&.Pp
-\&.No test.
-test
-.Ed
-.Pp
-.
-gives
-.
-.Bd -filled -offset indent
-The
-.Ql .
-character
-.Pp
-The
-.Ql \&.
-character.
-.Pp
-.No test .
-test
-.Pp
-.No test.
-test
-.Ed
-.Pp
-.
-As can be seen in the first and third line,
-.Nm \-mdoc
-handles punctuation characters specially in macro arguments.
-This will be explained in section
-.Sx General Syntax
-below.
-In the same way, you have to protect trailing full stops of abbreviations
-with a trailing zero-width space:
-.Ql e.g.\e& .
-.Pp
-A comment in the source file of a man page can be either started with
-.Ql .\e"
-on a single line,
-.Ql \e"
-after some input, or
-.Ql \e#
-anywhere (the latter is a
-.Tn GNU
-.Xr troff 1
-extension); the rest of such a line is ignored.
-.
-.
-.Sh "A MANUAL PAGE TEMPLATE"
-.
-The body of a man page is easily constructed from a basic template:
-.
-.Bd -literal -offset indent
-\&.\e" The following commands are required for all man pages.
-\&.Dd Month day, year
-\&.Dt DOCUMENT_TITLE [section number] [architecture/volume]
-\&.Os [OPERATING_SYSTEM] [version/release]
-\&.Sh NAME
-\&.Nm name
-\&.Nd one line description of name
-\&.\e" This next command is for sections 2 and 3 only.
-\&.\e" .Sh LIBRARY
-\&.Sh SYNOPSIS
-\&.Sh DESCRIPTION
-\&.\e" The following commands should be uncommented and
-\&.\e" used where appropriate.
-\&.\e" .Sh IMPLEMENTATION NOTES
-\&.\e" This next command is for sections 2, 3 and 9 function
-\&.\e" return values only.
-\&.\e" .Sh RETURN VALUES
-\&.\e" This next command is for sections 1, 6, 7 and 8 only.
-\&.\e" .Sh ENVIRONMENT
-\&.\e" .Sh FILES
-\&.\e" .Sh EXAMPLES
-\&.\e" This next command is for sections 1, 6, 7, 8 and 9 only
-\&.\e" (command return values (to shell) and
-\&.\e" fprintf/stderr type diagnostics).
-\&.\e" .Sh DIAGNOSTICS
-\&.\e" .Sh COMPATIBILITY
-\&.\e" This next command is for sections 2, 3 and 9 error
-\&.\e" and signal handling only.
-\&.\e" .Sh ERRORS
-\&.\e" .Sh SEE ALSO
-\&.\e" .Sh STANDARDS
-\&.\e" .Sh HISTORY
-\&.\e" .Sh AUTHORS
-\&.\e" .Sh BUGS
-.Ed
-.Pp
-.
-The first items in the template are the commands
-.Ql .Dd ,
-.Ql .Dt ,
-and
-.Ql .Os ;
-the document date, the operating system the man page or subject source is
-developed or modified for, and the man page title (in
-.Em upper case )
-along with the section of the manual the page belongs in.
-These commands identify the page and are discussed below in
-.Sx TITLE MACROS .
-.Pp
-The remaining items in the template are section headers
-.Pf ( Li .Sh ) ;
-of which
-.Em NAME ,
-.Em SYNOPSIS ,
-and
-.Em DESCRIPTION
-are mandatory.
-The headers are discussed in
-.Sx "PAGE STRUCTURE DOMAIN" ,
-after presentation of
-.Sx "MANUAL DOMAIN" .
-Several content macros are used to demonstrate page layout macros; reading
-about content macros before page layout macros is recommended.
-.
-.
-.Sh CONVENTIONS
-.
-In the description of all macros below, optional arguments are put into
-brackets.
-An ellipsis
-.Pf ( Sq ... )
-represents zero or more additional arguments.
-Alternative values for a parameter are separated with
-.Ql | .
-If there are alternative values for a mandatory parameter, braces are used
-(together with
-.Ql | )
-to enclose the value set.
-Meta-variables are specified within angles.
-.Pp
-Example:
-.
-.Bl -tag -width 6n -offset indent
-.It Li .Xx Xo
-.Aq foo
-.Brq bar1 | bar2
-.Op \-test1 Op \-test2 | \-test3
-.No ...
-.Xc
-.El
-.
-.Pp
-Except stated explicitly, all macros are parsed and callable.
-.Pp
-Note that a macro takes effect up to the next nested macro.
-For example,
-.Ql ".Ic foo Aq bar"
-doesn't produce
-.Sq Ic "foo <bar>"
-but
-.Sq Ic foo Aq bar .
-Consequently, a warning message is emitted for most commands if the first
-argument is a macro itself since it cancels the effect of the calling
-command completely.
-Another consequence is that quoting macros never insert literal quotes;
-.Sq Ic "foo <bar>"
-has been produced by
-.Ql ".Ic \*[q]foo <bar>\*[q]" .
-.Pp
-Most macros have a default width value which can be used to specify a label
-width
-.Pf ( Fl width )
-or offset
-.Pf ( Fl offset )
-for the
-.Ql .Bl
-and
-.Ql .Bd
-macros.
-It is recommended not to use this rather obscure feature to avoid
-dependencies on local modifications of the
-.Nm \-mdoc
-package.
-.
-.
-.Sh "TITLE MACROS"
-.
-The title macros are part of the page structure domain but are presented
-first and separately for someone who wishes to start writing a man page
-yesterday.
-Three header macros designate the document title or manual page title, the
-operating system, and the date of authorship.
-These macros are called once at the very beginning of the document and are
-used to construct headers and footers only.
-.
-.Bl -tag -width 6n
-.It Li .Dt Xo
-.Op Aq document title
-.Op Aq section number
-.Op Aq volume
-.Xc
-The document title is the subject of the man page and must be in
-.Tn CAPITALS
-due to troff limitations.
-If omitted,
-.Sq Tn UNTITLED
-is used.
-The section number may be a number in the range
-.No 1,\~ Ns ... Ns ,\~9
-or
-.Ql unass ,
-.Ql draft ,
-or
-.Ql paper .
-If it is specified, and no volume name is given, a default volume name is
-used.
-.
-.Pp
-Under
-.Tn \*[operating-system] ,
-the following sections are defined:
-.Pp
-.TS
-l l l.
-1 \*[volume-operating-system] \*[volume-ds-1]
-2 \*[volume-operating-system] \*[volume-ds-2]
-3 \*[volume-operating-system] \*[volume-ds-3]
-4 \*[volume-operating-system] \*[volume-ds-4]
-5 \*[volume-operating-system] \*[volume-ds-5]
-6 \*[volume-operating-system] \*[volume-ds-6]
-7 \*[volume-operating-system] \*[volume-ds-7]
-8 \*[volume-operating-system] \*[volume-ds-8]
-9 \*[volume-operating-system] \*[volume-ds-9]
-.TE
-.Pp
-.
-A volume name may be arbitrary or one of the following:
-.
-.Pp
-.TS
-l l.
-USD \*[volume-ds-USD]
-PS1 \*[volume-ds-PS1]
-AMD \*[volume-ds-AMD]
-SMM \*[volume-ds-SMM]
-URM \*[volume-ds-URM]
-PRM \*[volume-ds-PRM]
-KM \*[volume-ds-KM]
-IND \*[volume-ds-IND]
-LOCAL \*[volume-ds-LOCAL]
-CON \*[volume-ds-CON]
-.TE
-.Pp
-.
-For compatibility,
-.Ql MMI
-can be used for
-.Ql IND ,
-and
-.Ql LOC
-for
-.Ql LOCAL .
-Values from the previous table will specify a new volume name.
-If the third parameter is a keyword designating a computer architecture,
-its value is prepended to the default volume name as specified by the
-second parameter.
-By default, the following architecture keywords are defined:
-.
-\# we use `No' to avoid hyphenation
-.Bd -ragged -offset indent
-.No acorn26 , acorn32 , algor , alpha , amd64 , amiga , amigappc ,
-.No arc , arm , arm26 , arm32 , armish , atari , aviion ,
-.No beagle , bebox , cats , cesfic , cobalt , dreamcast ,
-.No emips , evbarm , evbmips , evbppc , evbsh3 , ews4800mips ,
-.No hp300 , hp700 , hpcarm , hpcmips , hpcsh , hppa , hppa64 ,
-.No i386 , ia64 , ibmnws , iyonix , landisk , loongson , luna68k , luna88k ,
-.No m68k , mac68k , macppc , mips , mips64 , mipsco , mmeye ,
-.No mvme68k , mvme88k , mvmeppc , netwinder , news68k , newsmips , next68k ,
-.No ofppc , palm , pc532 , playstation2 , pmax , pmppc , powerpc , prep ,
-.No rs6000 , sandpoint , sbmips , sgi , sgimips , sh3 , shark ,
-.No socppc , solbourne , sparc , sparc64 , sun2 , sun3 ,
-.No tahoe , vax , x68k , x86_64 , xen , zaurus
-.Ed
-.Pp
-.
-If the section number is neither a numeric expression in the range 1 to\~9
-nor one of the above described keywords, the third parameter is used
-verbatim as the volume name.
-.Pp
-In the following examples, the left (which is identical to the right) and
-the middle part of the manual page header strings are shown.
-Note how
-.Ql \e&
-prevents the digit\~7 from being a valid numeric expression.
-.
-.Bd -ragged
-.Bl -tag -width ".Li .Dt\ FOO\ 2\ i386" -compact -offset indent
-.It Li ".Dt FOO 7"
-.Ql FOO(7)
-.Ql \*[volume-operating-system] \*[volume-ds-7]
-.It Li ".Dt FOO 7 bar"
-.Ql FOO(7)
-.Ql \*[volume-operating-system] \*[volume-ds-7]
-.It Li ".Dt FOO \e&7 bar"
-.Ql FOO(7)
-.Ql bar
-.It Li ".Dt FOO 2 i386"
-.Ql FOO(2)
-.Ql \*[volume-operating-system]/\*[volume-as-i386] \*[volume-ds-2]
-.It Li ".Dt FOO \*[q]\*[q] bar"
-.Ql FOO
-.Ql bar
-.El
-.Ed
-.Pp
-.
-Local, OS-specific additions might be found in the file
-.Pa mdoc.local ;
-look for strings named
-.Ql volume\-ds\-XXX
-(for the former type) and
-.Ql volume\-as\-XXX
-(for the latter type);
-.Ql XXX
-then denotes the keyword to be used with the
-.Ql .Dt
-macro.
-.Pp
-This macro is neither callable nor parsed.
-.
-.It Li .Os Xo
-.Op Aq operating system
-.Op Aq release
-.Xc
-If the first parameter is empty,
-the default
-.Sq Tn "\*[operating-system]"
-is used.
-This may be overridden in the local configuration file,
-.Pa mdoc.local .
-In general, the name of the operating system should be the common acronym,
-e.g.\&
-.Tn BSD
-or
-.Tn ATT .
-The release should be the standard release nomenclature for the system
-specified.
-In the following table, the possible second arguments for some predefined
-operating systems are listed.
-Similar to
-.Ql .Dt ,
-local additions might be defined in
-.Pa mdoc.local ;
-look for strings named
-.Ql operating\-system\-XXX\-YYY ,
-where
-.Ql XXX
-is the acronym for the operating system and
-.Ql YYY
-the release ID.
-.
-.Bd -ragged -compact
-.Bl -tag -width ".No DragonFly" -offset indent
-.It ATT
-7th, 7, III, 3, V, V.2, V.3, V.4
-.It BSD
-3, 4, 4.1, 4.2, 4.3, 4.3t, 4.3T, 4.3r, 4.3R, 4.4
-.It NetBSD
-0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2, 1.2a, 1.2b, 1.2c, 1.2d, 1.2e,
-1.3, 1.3a, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.6.1,
-1.6.2, 1.6.3, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2, 3.0.3,
-3.1, 3.1.1, 4.0, 4.0.1, 5.0, 5.0.1, 5.0.2, 5.1, 6.0
-.It FreeBSD
-1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5, 2.1.6, 2.1.7, 2.2, 2.2.1,
-2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 4.0, 4.1,
-4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 4.11, 5.0, 5.1,
-5.2, 5.2.1, 5.3, 5.4, 5.5, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1, 7.2, 7.3, 8.0,
-8.1, 8.2, 9.0
-.It OpenBSD
-2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4,
-3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9,
-5.0
-.It DragonFly
-1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 1.8.1, 1.10, 1.12, 1.12.2, 2.0, 2.2,
-2.4, 2.6, 2.8, 2.9, 2.9.1, 2.10, 2.10.1, 2.11
-.It Darwin
-8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.6.0, 8.7.0, 8.8.0, 8.9.0,
-8.10.0, 8.11.0, 9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0, 9.6.0, 9.7.0,
-9.8.0, 10.1.0, 10.2.0, 10.3.0, 10.4.0, 10.5.0, 10.6.0, 10.7.0, 11.0.0
-.El
-.Ed
-.Pp
-.
-For
-.Tn ATT ,
-an unknown second parameter will be replaced with the string
-.Tn UNIX ;
-for the other predefined acronyms it will be ignored and a warning message
-emitted.
-Unrecognized arguments are displayed as given in the page footer.
-For instance, a typical footer might be:
-.Pp
-.Dl .Os BSD 4.3
-.Pp
-giving
-.Ql 4.3\~Berkeley Distribution ,
-or for a locally produced set
-.Pp
-.Dl .Os CS Department
-.Pp
-which will produce
-.Ql CS\~Department .
-.Pp
-If the
-.Ql .Os
-macro is not present, the bottom left corner of the manual page will be
-ugly.
-.Pp
-This macro is neither callable nor parsed.
-.
-.It Li .Dd Oo
-.Aq month
-.Aq day ,
-.Aq year
-.Oc
-If
-.Ql Dd
-has no arguments,
-.Ql Epoch
-is used for the date string.
-If it has exactly three arguments, they are concatenated, separated with
-unbreakable space:
-.Pp
-.Dl .Dd January 25, 2001
-.Pp
-The month's name shall not be abbreviated.
-.Pp
-With any other number of arguments, the current date is used, ignoring
-the parameters.
-.Pp
-This macro is neither callable nor parsed.
-.El
-.
-.
-.Sh "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
-.
-.Ss "What's in a Name" Ns ...
-.
-The manual domain macro names are derived from the day to day informal
-language used to describe commands, subroutines and related files.
-Slightly different variations of this language are used to describe the
-three different aspects of writing a man page.
-First, there is the description of
-.Nm \-mdoc
-macro command usage.
-Second is the description of a
-.Ux
-command
-.Em with
-.Nm \-mdoc
-macros, and third, the description of a command to a user in the verbal
-sense; that is, discussion of a command in the text of a man page.
-.Pp
-In the first case,
-.Xr troff 1
-macros are themselves a type of command; the general syntax for a troff
-command is:
-.
-.Bd -filled -offset indent
-.Li ".Xx argument1 argument2" ...
-.Ed
-.Pp
-.
-.Ql .Xx
-is a macro command, and anything following it are arguments to
-be processed.
-In the second case, the description of a
-.Ux
-command using the content macros is a bit more involved; a typical
-.Sx SYNOPSIS
-command line might be displayed as:
-.
-.Bd -filled -offset indent
-.Nm filter
-.Op Fl flag
-.Ao Ar infile Ac Ao Ar outfile Ac
-.Ed
-.Pp
-.
-Here,
-.Nm filter
-is the command name and the
-bracketed string
-.Fl flag
-is a
-.Em flag
-argument designated as optional by the option brackets.
-In
-.Nm \-mdoc
-terms,
-.Ao Ar infile Ac
-and
-.Ao Ar outfile Ac
-are called
-.Em meta arguments ;
-in this example, the user has to replace the meta expressions given in angle
-brackets with real file names.
-Note that in this document meta arguments are used to describe
-.Nm \-mdoc
-commands; in most man pages, meta variables are not specifically written
-with angle brackets.
-The macros which formatted the above example:
-.
-.Bd -literal -offset indent
-\&.Nm filter
-\&.Op Fl flag
-\&.Ao Ar infile Ac Ao Ar outfile Ac
-.Ed
-.Pp
-.
-In the third case, discussion of commands and command syntax includes both
-examples above, but may add more detail.
-The arguments
-.Ao Ar infile Ac
-and
-.Ao Ar outfile Ac
-from the example above might be referred to as
-.Em operands
-or
-.Em file arguments .
-Some command line argument lists are quite long:
-.
-.Bd -ragged
-.Bl -tag -width ".Nm make" -offset indent -compact
-.It Nm make
-.Op Fl eiknqrstv
-.Op Fl D Ar variable
-.Op Fl d Ar flags
-.Op Fl f Ar makefile
-.Op Fl I Ar directory
-.Op Fl j Ar max_jobs
-.Op Ar variable Ns = Ns Ar value
-.Bk
-.Op Ar target ...
-.Ek
-.El
-.Ed
-.Pp
-.
-Here one might talk about the command
-.Nm make
-and qualify the argument,
-.Ar makefile ,
-as an argument to the flag,
-.Fl f ,
-or discuss the optional file operand
-.Ar target .
-In the verbal context, such detail can prevent confusion, however the
-.Nm \-mdoc
-package does not have a macro for an argument
-.Em to
-a flag.
-Instead the
-.Ql \&Ar
-argument macro is used for an operand or file argument like
-.Ar target
-as well as an argument to a flag like
-.Ar variable .
-The make command line was produced from:
-.
-.Bd -literal -offset indent
-\&.Nm make
-\&.Op Fl eiknqrstv
-\&.Op Fl D Ar variable
-\&.Op Fl d Ar flags
-\&.Op Fl f Ar makefile
-\&.Op Fl I Ar directory
-\&.Op Fl j Ar max_jobs
-\&.Op Ar variable Ns = Ns Ar value
-\&.Bk
-\&.Op Ar target ...
-\&.Ek
-.Ed
-.Pp
-.
-The
-.Ql .Bk
-and
-.Ql .Ek
-macros are explained in
-.Sx Keeps .
-.
-.Ss "General Syntax"
-.
-The manual domain and general text domain macros share a similar syntax with
-a few minor deviations; most notably,
-.Ql .Ar ,
-.Ql .Fl ,
-.Ql .Nm ,
-and
-.Ql .Pa
-differ only when called without arguments; and
-.Ql .Fn
-and
-.Ql .Xr
-impose an order on their argument lists.
-All content macros are capable of recognizing and properly handling
-punctuation, provided each punctuation character is separated by a leading
-space.
-If a command is given:
-.Pp
-.Dl \&.Ar sptr, ptr),
-.Pp
-The result is:
-.Pp
-.Dl Ar sptr, ptr),
-.Pp
-The punctuation is not recognized and all is output in the
-font used by
-.Ql .Ar .
-If the punctuation is separated by a leading white space:
-.Pp
-.Dl \&.Ar "sptr , ptr ) ,"
-.Pp
-The result is:
-.Pp
-.Dl Ar sptr , ptr ) ,
-.Pp
-The punctuation is now recognized and output in the default font
-distinguishing it from the argument strings.
-To remove the special meaning from a punctuation character escape it with
-.Ql \e& .
-.Pp
-The following punctuation characters are recognized by
-.Nm \-mdoc :
-.
-.Bl -column -offset indent-two XXXXXX XXXXXX XXXXXX XXXXXX
-.It Li .\& Ta Li ,\& Ta Li :\& Ta Li ;\& Ta Li (\&
-.It Li )\& Ta Li [\& Ta Li ]\& Ta Li ?\& Ta Li !\&
-.El
-.Pp
-.
-.Xr Troff
-is limited as a macro language, and has difficulty when presented with a
-string containing a member of the mathematical, logical or quotation set:
-.
-.Bd -literal -offset indent-two
-{+,\-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
-.Ed
-.Pp
-.
-The problem is that
-.Xr troff
-may assume it is supposed to actually perform the operation or evaluation
-suggested by the characters.
-To prevent the accidental evaluation of these characters, escape them with
-.Ql \e& .
-Typical syntax is shown in the first content macro displayed below,
-.Ql .Ad .
-.
-.
-.Sh "MANUAL DOMAIN"
-.
-.Ss Addresses
-.
-The address macro identifies an address construct.
-.Pp
-.Dl Usage: .Ad Ao address Ac ...
-.Pp
-.Bl -tag -width ".Li .Ad\ f1\ ,\ f2\ ,\ f3\ :" -compact -offset 15n
-.It Li ".Ad addr1"
-.Ad addr1
-.It Li ".Ad addr1 ."
-.Ad addr1 .
-.It Li ".Ad addr1 , file2"
-.Ad addr1 , file2
-.It Li ".Ad f1 , f2 , f3 :"
-.Ad f1 , f2 , f3 :
-.It Li ".Ad addr ) ) ,"
-.Ad addr ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Author Name"
-.
-The
-.Ql .An
-macro is used to specify the name of the author of the item being
-documented, or the name of the author of the actual manual page.
-.Pp
-.Dl Usage: .An Ao author name Ac ...
-.Pp
-.Bl -tag -width ".Li .An\ \*[q]Joe\ Author\*[q]\ )\ )\ ," -offset 15n
-.It Li ".An \*[q]Joe Author\*[q]"
-.An "Joe Author"
-.It Li ".An \*[q]Joe Author\*[q] ,"
-.An "Joe Author" ,
-.It Li ".An \*[q]Joe Author\*[q] Aq nobody@FreeBSD.org"
-.An "Joe Author" Aq nobody@FreeBSD.org
-.It Li ".An \*[q]Joe Author\*[q] ) ) ,"
-.An "Joe Author" ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.Pp
-In the
-.Em AUTHORS
-section, the
-.Ql .An
-command causes a line break allowing each new name to appear on its own
-line.
-If this is not desirable,
-.
-.Bd -literal -offset indent
-\&.An \-nosplit
-.Ed
-.Pp
-.
-call will turn this off.
-To turn splitting back on, write
-.
-.Bd -literal -offset indent
-\&.An \-split
-.Ed
-.
-.Ss "Arguments"
-.
-The
-.Li .Ar
-argument macro may be used whenever an argument is referenced.
-If called without arguments, the
-.Sq Ar
-string is output.
-.Pp
-.Dl Usage: .Ar Oo Ao argument Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Ar\ file1\ file2" -compact -offset 15n
-.It Li .Ar
-.Ar
-.It Li ".Ar file1"
-.Ar file1
-.It Li ".Ar file1 ."
-.Ar file1 .
-.It Li ".Ar file1 file2"
-.Ar file1 file2
-.It Li ".Ar f1 f2 f3 :"
-.Ar f1 f2 f3 :
-.It Li ".Ar file ) ) ,"
-.Ar file ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Configuration Declaration (Section Four Only)"
-.
-The
-.Ql .Cd
-macro is used to demonstrate a
-.Xr config 8
-declaration for a device interface in a section four manual.
-.Pp
-.Dl Usage: .Cd Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Cd\ Xdevice\ le0\ at\ scode?X" -offset 15n
-.It Li ".Cd \*[q]device le0 at scode?\*[q]"
-.Cd "device le0 at scode?"
-.El
-.Pp
-In the
-.Sx SYNOPSIS
-section a
-.Ql .Cd
-command causes a line break before and after its arguments are printed.
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Command Modifiers"
-.
-The command modifier is identical to the
-.Ql .Fl
-(flag) command with the exception that the
-.Ql .Cm
-macro does not assert a dash in front of every argument.
-Traditionally flags are marked by the preceding dash, however, some commands
-or subsets of commands do not use them.
-Command modifiers may also be specified in conjunction with interactive
-commands such as editor commands.
-See
-.Sx Flags .
-.Pp
-The default width is 10n.
-.
-.Ss "Defined Variables"
-.
-A variable (or constant) which is defined in an include file
-is specified by the macro
-.Ql .Dv .
-.Pp
-.Dl Usage: .Dv Ao defined variable Ac ...
-.Pp
-.Bl -tag -width ".Li .Dv\ MAXHOSTNAMELEN" -compact -offset 15n
-.It Li ".Dv MAXHOSTNAMELEN"
-.Dv MAXHOSTNAMELEN
-.It Li ".Dv TIOCGPGRP )"
-.Dv TIOCGPGRP )
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss Errno's
-.
-The
-.Ql .Er
-errno macro specifies the error return value for section 2, 3, and\~9 library
-routines.
-The second example below shows
-.Ql .Er
-used with the
-.Ql .Bq
-general text domain macro, as it would be used in a section two manual page.
-.Pp
-.Dl Usage: .Er Ao errno type Ac ...
-.Pp
-.Bl -tag -width ".Li .Bq\ Er\ ENOTDIR" -compact -offset 15n
-.It Li ".Er ENOENT"
-.Er ENOENT
-.It Li ".Er ENOENT ) ;"
-.Er ENOENT ) ;
-.It Li ".Bq Er ENOTDIR"
-.Bq Er ENOTDIR
-.El
-.Pp
-.
-The default width is 17n.
-.
-.Ss "Environment Variables"
-.
-The
-.Ql .Ev
-macro specifies an environment variable.
-.Pp
-.Dl Usage: .Ev Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Ev\ PRINTER\ )\ )\ ," -compact -offset 15n
-.It Li ".Ev DISPLAY"
-.Ev DISPLAY
-.It Li ".Ev PATH ."
-.Ev PATH .
-.It Li ".Ev PRINTER ) ) ,"
-.Ev PRINTER ) ) ,
-.El
-.Pp
-.
-The default width is 15n.
-.
-.Ss Flags
-.
-The
-.Ql .Fl
-macro handles command line flags.
-It prepends a dash,
-.Ql \- ,
-to the flag.
-For interactive command flags, which are not prepended with a dash, the
-.Ql .Cm
-(command modifier)
-macro is identical, but without the dash.
-.Pp
-.Dl Usage: .Fl Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fl\ xyz\ )\ ," -compact -offset 15n
-.It Li .Fl
-.Fl
-.It Li ".Fl cfv"
-.Fl cfv
-.It Li ".Fl cfv ."
-.Fl cfv .
-.It Li ".Cm cfv ."
-.Cm cfv .
-.It Li ".Fl s v t"
-.Fl s v t
-.It Li ".Fl \- ,"
-.Fl \- ,
-.It Li ".Fl xyz ) ,"
-.Fl xyz ) ,
-.It Li ".Fl |"
-.Fl |
-.El
-.Pp
-The
-.Ql .Fl
-macro without any arguments results in a dash representing stdin/stdout.
-Note that giving
-.Ql .Fl
-a single dash will result in two dashes.
-.Pp
-The default width is 12n.
-.
-.Ss "Function Declarations"
-.
-The
-.Ql .Fd
-macro is used in the
-.Sx SYNOPSIS
-section with section two or three functions.
-It is neither callable nor parsed.
-.Pp
-.Dl Usage: .Fd Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fd\ X#include\ <sys/types.h>X" -compact -offset 15n
-.It Li ".Fd \*[q]#include <sys/types.h>\*[q]"
-.Fd "#include <sys/types.h>"
-.El
-.Pp
-In the
-.Sx SYNOPSIS
-section a
-.Ql .Fd
-command causes a line break if a function has already been presented and a
-break has not occurred.
-This leaves a nice vertical space in between the previous function call and
-the declaration for the next function.
-.
-.Pp
-The
-.Ql .In
-macro, while in the
-.Sx SYNOPSIS
-section, represents the
-.Li #include
-statement, and is the short form of the above example.
-It specifies the C\~header file as being included in a C\~program.
-It also causes a line break.
-.Pp
-While not in the
-.Sx SYNOPSIS
-section, it represents the header file enclosed in angle brackets.
-.Pp
-.Dl Usage: .In Ao header file Ac
-.Pp
-.Bl -tag -width ".Li .In\ stdio.h" -compact -offset 15n
-.nr in-synopsis-section 1
-.It Li ".In stdio.h"
-.In stdio.h
-.nr in-synopsis-section 0
-.It Li ".In stdio.h"
-.In stdio.h
-.El
-.
-.Ss "Function Types"
-.
-This macro is intended for the
-.Sx SYNOPSIS
-section.
-It may be used anywhere else in the man page without problems, but its main
-purpose is to present the function type in kernel normal form for the
-.Sx SYNOPSIS
-of sections two and three (it causes a line break, allowing the function
-name to appear on the next line).
-.Pp
-.Dl Usage: .Ft Ao type Ac ...
-.Pp
-.Bl -tag -width ".Li .Ft\ struct\ stat" -compact -offset 15n
-.It Li ".Ft struct stat"
-.Ft struct stat
-.El
-.
-.Ss "Functions (Library Routines)"
-.
-The
-.Ql .Fn
-macro is modeled on
-.Tn ANSI\~C
-conventions.
-.Pp
-.Dl Usage: .Fn Ao function Ac Oo Ao parameter Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Fn\ align\ Xchar\ *ptrX\ ," -compact -offset 15n
-.It Li ".Fn getchar"
-.Fn getchar
-.It Li ".Fn strlen ) ,"
-.Fn strlen ) ,
-.It Li ".Fn align \*[q]char *ptr\*[q] ,"
-.Fn align "char *ptr" ,
-.El
-.Pp
-Note that any call to another macro signals the end of the
-.Ql .Fn
-call (it will insert a closing parenthesis at that point).
-.Pp
-For functions with many parameters (which is rare), the macros
-.Ql .Fo
-(function open)
-and
-.Ql .Fc
-(function close)
-may be used with
-.Ql .Fa
-(function argument).
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Ft int
-\&.Fo res_mkquery
-\&.Fa "int op"
-\&.Fa "char *dname"
-\&.Fa "int class"
-\&.Fa "int type"
-\&.Fa "char *data"
-\&.Fa "int datalen"
-\&.Fa "struct rrec *newrr"
-\&.Fa "char *buf"
-\&.Fa "int buflen"
-\&.Fc
-.Ed
-.Pp
-.
-Produces:
-.
-.Bd -ragged -offset indent
-.Ft int
-.Fo res_mkquery
-.Fa "int op"
-.Fa "char *dname"
-.Fa "int class"
-.Fa "int type"
-.Fa "char *data"
-.Fa "int datalen"
-.Fa "struct rrec *newrr"
-.Fa "char *buf"
-.Fa "int buflen"
-.Fc
-.Ed
-.Pp
-.
-In the
-.Sx SYNOPSIS
-section, the function will always begin at the beginning of line.
-If there is more than one function presented in the
-.Sx SYNOPSIS
-section and a function type has not been given, a line break will occur,
-leaving a nice vertical space between the current function name and the one
-prior.
-.Pp
-The default width values of
-.Ql .Fn
-and
-.Ql .Fo
-are 12n and 16n, respectively.
-.
-.Ss "Function Arguments"
-.
-The
-.Ql .Fa
-macro is used to refer to function arguments (parameters) outside of the
-.Sx SYNOPSIS
-section of the manual or inside the
-.Sx SYNOPSIS
-section if the enclosure macros
-.Ql .Fo
-and
-.Ql .Fc
-instead of
-.Ql .Fn
-are used.
-.Ql .Fa
-may also be used to refer to structure members.
-.Pp
-.Dl Usage: .Fa Ao function argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fa\ d_namlen\ )\ )\ ," -compact -offset 15n
-.It Li ".Fa d_namlen ) ) ,"
-.Fa d_namlen ) ) ,
-.It Li ".Fa iov_len"
-.Fa iov_len
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Return Values"
-.
-The
-.Ql .Rv
-macro generates text for use in the
-.Sx RETURN VALUES
-section.
-.Pp
-.Dl Usage: .Rv Oo \-std Oc Op Ao function Ac ...
-.Pp
-For example,
-.Ql ".Rv \-std atexit"
-produces:
-.
-.Bd -ragged -offset indent
-\# a small hack to suppress a warning message
-.ds section-old "\*[section]
-.ds section 3
-.Rv -std atexit
-.ds section "\*[section-old]
-.Ed
-.Pp
-.
-The
-.Fl std
-option is valid only for manual page sections\~2 and\~3.
-Currently, this macro does nothing if used without the
-.Fl std
-flag.
-.
-.Ss "Exit Status"
-.
-The
-.Ql .Ex
-macro generates text for use in the
-.Sx DIAGNOSTICS
-section.
-.Pp
-.Dl Usage: .Ex Oo \-std Oc Op Ao utility Ac ...
-.Pp
-For example,
-.Ql ".Ex \-std cat"
-produces:
-.
-.Bd -ragged -offset indent
-\# a small hack to suppress a warning message
-.ds section-old "\*[section]
-.ds section 1
-.Ex -std cat
-.ds section "\*[section-old]
-.Ed
-.Pp
-.
-The
-.Fl std
-option is valid only for manual page sections 1, 6 and\~8.
-Currently, this macro does nothing if used without the
-.Fl std
-flag.
-.
-.Ss "Interactive Commands"
-.
-The
-.Ql .Ic
-macro designates an interactive or internal command.
-.Pp
-.Dl Usage: .Ic Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Ic\ setenv\ ,\ unsetenv" -compact -offset 15n
-.It Li ".Ic :wq"
-.Ic :wq
-.It Li ".Ic \*[q]do while {...}\*[q]"
-.Ic "do while {...}"
-.It Li ".Ic setenv , unsetenv"
-.Ic setenv , unsetenv
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Library Names"
-.
-The
-.Ql .Lb
-macro is used to specify the library where a particular function is compiled
-in.
-.Pp
-.Dl Usage: .Lb Ao argument Ac ...
-.Pp
-Available arguments to
-.Ql .Lb
-and their results are:
-.
-.Pp
-.Bl -tag -width ".Li librpcsec_gss" -compact -offset indent
-.It Li libarchive
-.Lb libarchive
-.It Li libarm
-.Lb libarm
-.It Li libarm32
-.Lb libarm32
-.It Li libbluetooth
-.Lb libbluetooth
-.It Li libbsm
-.Lb libbsm
-.It Li libc
-.Lb libc
-.It Li libc_r
-.Lb libc_r
-.It Li libcalendar
-.Lb libcalendar
-.It Li libcam
-.Lb libcam
-.It Li libcdk
-.Lb libcdk
-.It Li libcipher
-.Lb libcipher
-.It Li libcompat
-.Lb libcompat
-.It Li libcrypt
-.Lb libcrypt
-.It Li libcurses
-.Lb libcurses
-.It Li libdevinfo
-.Lb libdevinfo
-.It Li libdevstat
-.Lb libdevstat
-.It Li libdisk
-.Lb libdisk
-.It Li libdwarf
-.Lb libdwarf
-.It Li libedit
-.Lb libedit
-.It Li libelf
-.Lb libelf
-.It Li libevent
-.Lb libevent
-.It Li libfetch
-.Lb libfetch
-.It Li libform
-.Lb libform
-.It Li libgeom
-.Lb libgeom
-.It Li libi386
-.Lb libi386
-.It Li libintl
-.Lb libintl
-.It Li libipsec
-.Lb libipsec
-.It Li libipx
-.Lb libipx
-.It Li libiscsi
-.Lb libiscsi
-.It Li libjail
-.Lb libjail
-.It Li libkiconv
-.Lb libkiconv
-.It Li libkse
-.Lb libkse
-.It Li libkvm
-.Lb libkvm
-.It Li libm
-.Lb libm
-.It Li libm68k
-.Lb libm68k
-.It Li libmagic
-.Lb libmagic
-.It Li libmd
-.Lb libmd
-.It Li libmemstat
-.Lb libmemstat
-.It Li libmenu
-.Lb libmenu
-.It Li libnetgraph
-.Lb libnetgraph
-.It Li libnetpgp
-.Lb libnetpgp
-.It Li libossaudio
-.Lb libossaudio
-.It Li libpam
-.Lb libpam
-.It Li libpcap
-.Lb libpcap
-.It Li libpci
-.Lb libpci
-.It Li libpmc
-.Lb libpmc
-.It Li libposix
-.Lb libposix
-.It Li libprop
-.Lb libprop
-.It Li libpthread
-.Lb libpthread
-.It Li libpuffs
-.Lb libpuffs
-.It Li librefuse
-.Lb librefuse
-.It Li libresolv
-.Lb libresolv
-.It Li librpcsec_gss
-.Lb librpcsec_gss
-.It Li librpcsvc
-.Lb librpcsvc
-.It Li librt
-.Lb librt
-.It Li libsdp
-.Lb libsdp
-.It Li libssp
-.Lb libssp
-.It Li libSystem
-.Lb libSystem
-.It Li libtermcap
-.Lb libtermcap
-.It Li libterminfo
-.Lb libterminfo
-.It Li libthr
-.Lb libthr
-.It Li libufs
-.Lb libufs
-.It Li libugidfw
-.Lb libugidfw
-.It Li libulog
-.Lb libulog
-.It Li libusbhid
-.Lb libusbhid
-.It Li libutil
-.Lb libutil
-.It Li libvgl
-.Lb libvgl
-.It Li libx86_64
-.Lb libx86_64
-.It Li libz
-.Lb libz
-.El
-.Pp
-.
-Local, OS-specific additions might be found in the file
-.Pa mdoc.local ;
-look for strings named
-.Ql str\-Lb\-XXX .
-.Ql XXX
-then denotes the keyword to be used with the
-.Ql .Lb
-macro.
-.Pp
-In the
-.Em LIBRARY
-section an
-.Ql .Lb
-command causes a line break before and after its arguments are printed.
-.Pp
-.
-.Ss Literals
-.
-The
-.Ql .Li
-literal macro may be used for special characters, variable constants, etc.\&
-\- anything which should be displayed as it would be typed.
-.Pp
-.Dl Usage: .Li Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Li\ cntrl\-D\ )\ ," -compact -offset 15n
-.It Li ".Li \een"
-.Li \en
-.It Li ".Li M1 M2 M3 ;"
-.Li M1 M2 M3 ;
-.It Li ".Li cntrl\-D ) ,"
-.Li cntrl-D ) ,
-.It Li ".Li 1024 ..."
-.Li 1024 ...
-.El
-.Pp
-.
-The default width is 16n.
-.
-.Ss Names
-.
-The
-.Ql .Nm
-macro is used for the document title or subject name.
-It has the peculiarity of remembering the first argument it was called with,
-which should always be the subject name of the page.
-When called without arguments,
-.Ql .Nm
-regurgitates this initial name for the sole purpose of making less work for
-the author.
-.Ql .Nm
-causes a line break within the
-.Sx SYNOPSIS
-section.
-.Pp
-Note: A section two or three document function name is addressed with the
-.Ql .Nm
-in the
-.Em NAME
-section, and with
-.Ql .Fn
-in the
-.Sx SYNOPSIS
-and remaining sections.
-For interactive commands, such as the
-.Ql while
-command keyword in
-.Xr csh 1 ,
-the
-.Ql .Ic
-macro should be used.
-While
-.Ql .Ic
-is nearly identical
-to
-.Ql .Nm ,
-it can not recall the first argument it was invoked with.
-.Pp
-.Dl Usage: .Nm Oo Ao argument Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Nm\ groff_mdoc" -compact -offset 15n
-.It Li ".Nm groff_mdoc"
-.Nm groff_mdoc
-.It Li ".Nm \e\-mdoc"
-.Nm \-mdoc
-.It Li ".Nm foo ) ) ,"
-.Nm foo ) ) ,
-.It Li ".Nm :"
-.Nm :
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss Options
-.
-The
-.Ql .Op
-macro places option brackets around any remaining arguments on the
-command line, and places any trailing punctuation outside the brackets.
-The macros
-.Ql .Oo
-and
-.Ql .Oc
-(which produce an opening and a closing option bracket respectively) may be used
-across one or more lines or to specify the exact position of the closing
-parenthesis.
-.Pp
-.Dl Usage: .Op Oo Ao option Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Op\ Fl\ c\ Ar\ objfil\ Op\ Ar\ corfil\ ," -compact -offset 15n
-.It Li .Op
-.Op
-.It Li ".Op Fl k"
-.Op Fl k
-.It Li ".Op Fl k ) ."
-.Op Fl k ) .
-.It Li ".Op Fl k Ar kookfile"
-.Op Fl k Ar kookfile
-.It Li ".Op Fl k Ar kookfile ,"
-.Op Fl k Ar kookfile ,
-.It Li ".Op Ar objfil Op Ar corfil"
-.Op Ar objfil Op Ar corfil
-.It Li ".Op Fl c Ar objfil Op Ar corfil ,"
-.Op Fl c Ar objfil Op Ar corfil ,
-.It Li ".Op word1 word2"
-.Op word1 word2
-.It Li ".Li .Op Oo Ao option Ac Oc ..."
-.Li .Op Oo Ao option Ac Oc ...
-.El
-.Pp
-Here a typical example of the
-.Ql .Oo
-and
-.Ql .Oc
-macros:
-.
-.Bd -literal -offset indent
-\&.Oo
-\&.Op Fl k Ar kilobytes
-\&.Op Fl i Ar interval
-\&.Op Fl c Ar count
-\&.Oc
-.Ed
-.Pp
-.
-Produces:
-.
-.Bd -filled -offset indent
-.Oo
-.Op Fl k Ar kilobytes
-.Op Fl i Ar interval
-.Op Fl c Ar count
-.Oc
-.Ed
-.Pp
-.
-The default width values of
-.Ql .Op
-and
-.Ql .Oo
-are 14n and 10n, respectively.
-.
-.Ss Pathnames
-.
-The
-.Ql .Pa
-macro formats path or file names.
-If called without arguments, the
-.Sq Pa
-string is output, which represents the current user's home directory.
-.Pp
-.Dl Usage: .Pa Oo Ao pathname Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Pa\ /tmp/fooXXXXX\ )\ ." -compact -offset 15n
-.It Li .Pa
-.Pa
-.It Li ".Pa /usr/share"
-.Pa /usr/share
-.It Li ".Pa /tmp/fooXXXXX ) ."
-.Pa /tmp/fooXXXXX ) .
-.El
-.Pp
-.
-The default width is 32n.
-.
-.Ss Standards
-.
-The
-.Ql .St
-macro replaces standard abbreviations with their formal names.
-.Pp
-.Dl Usage: .St Ao abbreviation Ac ...
-.Pp
-Available pairs for
-.Dq Abbreviation/Formal Name
-are:
-.
-.Pp
-.Tn ANSI/ISO C
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-ansiC
-.St -ansiC
-.It Li \-ansiC\-89
-.St -ansiC-89
-.It Li \-isoC
-.St -isoC
-.It Li \-isoC\-90
-.St -isoC-90
-.It Li \-isoC\-99
-.St -isoC-99
-.It Li \-isoC\-2011
-.St -isoC-2011
-.El
-.Pp
-.
-.Tn POSIX
-Part 1: System API
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-iso9945\-1\-90
-.St -iso9945-1-90
-.It Li \-iso9945\-1\-96
-.St -iso9945-1-96
-.It Li \-p1003.1
-.St -p1003.1
-.It Li \-p1003.1\-88
-.St -p1003.1-88
-.It Li \-p1003.1\-90
-.St -p1003.1-90
-.It Li \-p1003.1\-96
-.St -p1003.1-96
-.It Li \-p1003.1b\-93
-.St -p1003.1b-93
-.It Li \-p1003.1c\-95
-.St -p1003.1c-95
-.It Li \-p1003.1g\-2000
-.St -p1003.1g-2000
-.It Li \-p1003.1i\-95
-.St -p1003.1i-95
-.It Li \-p1003.1\-2001
-.St -p1003.1-2001
-.It Li \-p1003.1\-2004
-.St -p1003.1-2004
-.It Li \-p1003.1\-2008
-.St -p1003.1-2008
-.El
-.Pp
-.
-.Tn POSIX
-Part 2: Shell and Utilities
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-iso9945\-2\-93
-.St -iso9945-2-93
-.It Li \-p1003.2
-.St -p1003.2
-.It Li \-p1003.2\-92
-.St -p1003.2-92
-.It Li \-p1003.2a\-92
-.St -p1003.2a-92
-.El
-.Pp
-.
-X/Open
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-susv2
-.St -susv2
-.It Li \-susv3
-.St -susv3
-.It Li \-susv4
-.St -susv4
-.It Li \-svid4
-.St -svid4
-.It Li \-xbd5
-.St -xbd5
-.It Li \-xcu5
-.St -xcu5
-.It Li \-xcurses4.2
-.St -xcurses4.2
-.It Li \-xns5
-.St -xns5
-.It Li \-xns5.2
-.St -xns5.2
-.It Li \-xpg3
-.St -xpg3
-.It Li \-xpg4
-.St -xpg4
-.It Li \-xpg4.2
-.St -xpg4.2
-.It Li \-xsh5
-.St -xsh5
-.El
-.Pp
-.
-Miscellaneous
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-ieee754
-.St -ieee754
-.It Li \-iso8802\-3
-.St -iso8802-3
-.El
-.
-.Ss "Variable Types"
-.
-The
-.Ql .Vt
-macro may be used whenever a type is referenced.
-In the
-.Sx SYNOPSIS
-section, it causes a line break (useful for old style variable declarations).
-.Pp
-.Dl Usage: .Vt Ao type Ac ...
-.Pp
-.Bl -tag -width ".Li .Vt\ extern\ char\ *optarg\ ;" -compact -offset 15n
-.It Li ".Vt extern char *optarg ;"
-.Vt extern char *optarg ;
-.It Li ".Vt FILE *"
-.Vt FILE *
-.El
-.
-.Ss Variables
-.
-Generic variable reference.
-.Pp
-.Dl Usage: .Va Ao variable Ac ...
-.Pp
-.Bl -tag -width ".Li .Va\ Xchar\ sX\ ]\ )\ )\ ," -compact -offset 15n
-.It Li ".Va count"
-.Va count
-.It Li ".Va settimer ,"
-.Va settimer ,
-.It Li ".Va \*[q]int *prt\*[q] ) :"
-.Va "int *prt" ) :
-.It Li ".Va \*[q]char s\*[q] ] ) ) ,"
-.Va "char s" ] ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Manual Page Cross References"
-.
-The
-.Ql .Xr
-macro expects the first argument to be a manual page name.
-The optional second argument, if a string (defining the manual section), is
-put into parentheses.
-.Pp
-.Dl Usage: .Xr Ao man page name Ac Oo Ao section Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Xr\ xinit\ 1x\ ;" -compact -offset 15n
-.It Li ".Xr mdoc"
-.Xr mdoc
-.It Li ".Xr mdoc ,"
-.Xr mdoc ,
-.It Li ".Xr mdoc 7"
-.Xr mdoc 7
-.It Li ".Xr xinit 1x ;"
-.Xr xinit 1x ;
-.El
-.Pp
-.
-The default width is 10n.
-.
-.
-.Sh "GENERAL TEXT DOMAIN"
-.
-.Ss "AT&T Macro"
-.
-.Pp
-.Dl Usage: .At Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .At\ v6\ ." -compact -offset 15n
-.It Li .At
-.At
-.It Li ".At v6 ."
-.At v6 .
-.El
-.Pp
-The following values for
-.Ao version Ac
-are possible:
-.Pp
-.Dl 32v, v1, v2, v3, v4, v5, v6, v7, V, V.1, V.2, V.3, V.4
-.
-.Ss "BSD Macro"
-.
-.Pp
-.Dl "Usage: .Bx" Bro \-alpha | \-beta | \-devel Brc ...
-.Dl " .Bx" Oo Ao version Ac Oo Ao release Ac Oc Oc ...
-.Pp
-.Bl -tag -width ".Li .Bx\ -devel" -compact -offset 15n
-.It Li .Bx
-.Bx
-.It Li ".Bx 4.3 ."
-.Bx 4.3 .
-.It Li ".Bx \-devel"
-.Bx -devel
-.El
-.Pp
-.Ao version Ac
-will be prepended to the string
-.Sq Bx .
-The following values for
-.Ao release Ac
-are possible:
-.Pp
-.Dl Reno, reno, Tahoe, tahoe, Lite, lite, Lite2, lite2
-.
-.Ss "NetBSD Macro"
-.
-.Pp
-.Dl Usage: .Nx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Nx\ 1.4\ ." -compact -offset 15n
-.It Li .Nx
-.Nx
-.It Li ".Nx 1.4 ."
-.Nx 1.4 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "FreeBSD Macro"
-.
-.Pp
-.Dl Usage: .Fx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Fx\ 2.2\ ." -compact -offset 15n
-.It Li .Fx
-.Fx
-.It Li ".Fx 2.2 ."
-.Fx 2.2 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "DragonFly Macro"
-.
-.Pp
-.Dl Usage: .Dx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n
-.It Li .Dx
-.Dx
-.It Li ".Dx 1.4 ."
-.Dx 1.4 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "OpenBSD Macro"
-.
-.Pp
-.Dl Usage: .Ox Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Ox\ 1.0" -compact -offset 15n
-.It Li ".Ox 1.0"
-.Ox 1.0
-.El
-.
-.Ss "BSD/OS Macro"
-.
-.Pp
-.Dl Usage: .Bsx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Bsx\ 1.0" -compact -offset 15n
-.It Li ".Bsx 1.0"
-.Bsx 1.0
-.El
-.
-.Ss "UNIX Macro"
-.
-.Pp
-.Dl Usage: .Ux ...
-.Pp
-.Bl -tag -width ".Li .Ux" -compact -offset 15n
-.It Li .Ux
-.Ux
-.El
-.
-.Ss "Emphasis Macro"
-.
-Text may be stressed or emphasized with the
-.Ql .Em
-macro.
-The usual font for emphasis is italic.
-.Pp
-.Dl Usage: .Em Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Em\ vide\ infra\ )\ )\ ," -compact -offset 15n
-.It Li ".Em does not"
-.Em does not
-.It Li ".Em exceed 1024 ."
-.Em exceed 1024 .
-.It Li ".Em vide infra ) ) ,"
-.Em vide infra ) ) ,
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss "Font Mode"
-.
-The
-.Ql .Bf
-font mode must be ended with the
-.Ql .Ef
-macro (the latter takes no arguments).
-Font modes may be nested within other font modes.
-.Pp
-.Ql .Bf
-has the following syntax:
-.Pp
-.Dl .Bf Ao font mode Ac
-.Pp
-.Ao font mode Ac
-must be one of the following three types:
-.Pp
-.Bl -tag -width ".Sy \&Sy | Fl symbolic" -compact -offset indent
-.It Sy \&Em | Fl emphasis
-Same as if the
-.Ql .Em
-macro was used for the entire block of text.
-.It Sy \&Li | Fl literal
-Same as if the
-.Ql .Li
-macro was used for the entire block of text.
-.It Sy \&Sy | Fl symbolic
-Same as if the
-.Ql .Sy
-macro was used for the entire block of text.
-.El
-.Pp
-Both macros are neither callable nor parsed.
-.
-.Ss "Enclosure and Quoting Macros"
-.
-The concept of enclosure is similar to quoting.
-The object being to enclose one or more strings between a pair of characters
-like quotes or parentheses.
-The terms quoting and enclosure are used interchangeably throughout this
-document.
-Most of the one-line enclosure macros end in small letter
-.Ql q
-to give a hint of quoting, but there are a few irregularities.
-For each enclosure macro there is also a pair of open and close macros which
-end in small letters
-.Ql o
-and
-.Ql c
-respectively.
-.Pp
-\# XXX
-.if t \
-. ne 10
-.
-.TS
-lb lb lb lb lb
-l l l l l.
-Quote Open Close Function Result
-\&.Aq .Ao .Ac Angle Bracket Enclosure <string>
-\&.Bq .Bo .Bc Bracket Enclosure [string]
-\&.Brq .Bro .Brc Brace Enclosure {string}
-\&.Dq .Do .Dc Double Quote "string"
-\&.Eq .Eo .Ec Enclose String (in XX) XXstring
-\&.Pq .Po .Pc Parenthesis Enclosure (string)
-\&.Ql Quoted Literal \*[Lq]string\*[Rq] or string
-\&.Qq .Qo .Qc Straight Double Quote "string"
-\&.Sq .So .Sc Single Quote 'string'
-.TE
-.Pp
-All macros ending with
-.Sq q
-and
-.Sq o
-have a default width value of 12n.
-.
-.Bl -tag -width ".Li .Ec , .Eo"
-.It Li .Eo , .Ec
-These macros expect the first argument to be the opening and closing strings
-respectively.
-.It Li .Es , .En
-Due to the nine-argument limit in the original troff program two other
-macros have been implemented which are now rather obsolete:
-.Ql .Es
-takes the first and second parameter as the left and right enclosure string,
-which are then used to enclose the arguments of
-.Ql .En .
-The default width value is 12n for both macros.
-.It Li .Eq
-The first and second arguments of this macro are the opening and
-closing strings respectively, followed by the arguments to be enclosed.
-.It Li .Ql
-The quoted literal macro behaves differently in troff and nroff mode.
-If formatted with
-.Xr nroff ,
-a quoted literal is always quoted.
-If formatted with troff, an item is only quoted if the width of the item is
-less than three constant width characters.
-This is to make short strings more visible where the font change to literal
-(constant width) is less noticeable.
-.Pp
-The default width is 16n.
-.It Li .Pf
-The prefix macro suppresses the whitespace between its first and second
-argument:
-.
-.Bl -tag -width ".Li .Pf\ (\ Fa\ name2" -offset indent
-.It Li ".Pf ( Fa name2"
-.Pf ( Fa name2
-.El
-.Pp
-.
-The default width is 12n.
-.Pp
-The
-.Ql .Ns
-macro (see below) performs the analogous suffix function.
-.It Li .Ap
-The
-.Ql .Ap
-macro inserts an apostrophe and exits any special text modes, continuing in
-.Ql .No
-mode.
-.El
-.Pp
-.
-Examples of quoting:
-.
-.Pp
-.Bl -tag -width ".Li .Bq\ Em\ Greek\ ,\ French\ ." -compact -offset indent
-.It Li .Aq
-.Aq
-.It Li ".Aq Pa ctype.h ) ,"
-.Aq Pa ctype.h ) ,
-.It Li .Bq
-.Bq
-.It Li ".Bq Em Greek , French ."
-.Bq Em Greek , French .
-.It Li .Dq
-.Dq
-.It Li ".Dq string abc ."
-.Dq string abc .
-.It Li ".Dq \'^[A\-Z]\'"
-.Dq \'^[A-Z]\'
-.It Li ".Ql man mdoc"
-.Ql man mdoc
-.It Li .Qq
-.Qq
-.It Li ".Qq string ) ,"
-.Qq string ) ,
-.It Li ".Qq string Ns ),"
-.Qq string Ns ),
-.It Li .Sq
-.Sq
-.It Li ".Sq string"
-.Sq string
-.It Li ".Em or Ap ing"
-.Em or Ap ing
-.El
-.Pp
-.
-For a good example of nested enclosure macros, see the
-.Ql .Op
-option macro.
-It was created from the same underlying enclosure macros as those presented
-in the list above.
-The
-.Ql .Xo
-and
-.Ql .Xc
-extended argument list macros are discussed below.
-.
-.Ss "No-Op or Normal Text Macro"
-.
-The
-.Ql .No
-macro can be used in a macro command line for parameters which should
-.Em not
-be formatted.
-Be careful to add
-.Ql \e&
-to the word
-.Ql \&No
-if you really want that English word (and not the macro) as a parameter.
-.Pp
-.Dl Usage: .No Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .No\ test\ Ta\ with\ Ta\ tabs" -compact -offset 15n
-.It Li ".No test Ta with Ta tabs"
-.No test Ta with Ta tabs
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "No-Space Macro"
-.
-The
-.Ql .Ns
-macro suppresses insertion of a space between the current position and its
-first parameter.
-For example, it is useful for old style argument lists where there is no
-space between the flag and argument:
-.Pp
-.Dl "Usage:" ... Ao argument Ac \&Ns Oo Ao argument Ac Oc ...
-.Dl " " .Ns Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Op\ Fl\ I\ Ns\ Ar\ directory" -compact -offset 15n
-.It Li ".Op Fl I Ns Ar directory"
-.Op Fl I Ns Ar directory
-.El
-.Pp
-Note: The
-.Ql .Ns
-macro always invokes the
-.Ql .No
-macro after eliminating the space unless another macro name follows it.
-If used as a command (i.e., the second form above in the
-.Sq Usage
-line),
-.Ql .Ns
-is identical to
-.Ql .No .
-.
-.Ss "Section Cross References"
-.
-The
-.Ql .Sx
-macro designates a reference to a section header within the same document.
-.Pp
-.Dl Usage: .Sx Ao section reference Ac ...
-.Pp
-.Bl -tag -width ".Li .Sx\ FILES" -offset 15n
-.It Li ".Sx FILES"
-.Sx FILES
-.El
-.Pp
-.
-The default width is 16n.
-.
-.Ss Symbolics
-.
-The symbolic emphasis macro is generally a boldface macro in either the
-symbolic sense or the traditional English usage.
-.Pp
-.Dl Usage: .Sy Ao symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Sy\ Important\ Notice" -compact -offset 15n
-.It Li ".Sy Important Notice"
-.Sy Important Notice
-.El
-.Pp
-.
-The default width is 6n.
-.
-.Ss Mathematical Symbols
-.
-Use this macro for mathematical symbols and similar things.
-.Pp
-.Dl Usage: .Ms Ao math symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Ms\ sigma" -compact -offset 15n
-.It Li ".Ms sigma"
-.Ms sigma
-.El
-.Pp
-.
-The default width is 6n.
-.
-.Ss "References and Citations"
-.
-The following macros make a modest attempt to handle references.
-At best, the macros make it convenient to manually drop in a subset of
-.Xr refer 1
-style references.
-.Pp
-.Bl -tag -width 6n -offset indent -compact
-.It Li .Rs
-Reference start (does not take arguments).
-Causes a line break in the
-.Sx "SEE ALSO"
-section and begins collection of reference information until the reference
-end macro is read.
-.It Li .Re
-Reference end (does not take arguments).
-The reference is printed.
-.It Li .%A
-Reference author name; one name per invocation.
-.It Li .%B
-Book title.
-.It Li .%C
-City/place.
-.It Li .%D
-Date.
-.It Li .%I
-Issuer/publisher name.
-.It Li .%J
-Journal name.
-.It Li .%N
-Issue number.
-.It Li .%O
-Optional information.
-.It Li .%P
-Page number.
-.It Li .%Q
-Corporate or foreign author.
-.It Li .%R
-Report name.
-.It Li .%T
-Title of article.
-.It Li .%U
-Optional hypertext reference.
-.It Li .%V
-Volume.
-.El
-.Pp
-Macros beginning with
-.Ql %
-are not callable but accept multiple arguments in the usual way.
-Only the
-.Ql .Tn
-macro is handled properly as a parameter; other macros will cause strange
-output.
-.Ql .%B
-and
-.Ql .%T
-can be used outside of the
-.Ql .Rs/.Re
-environment.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Rs
-\&.%A "Matthew Bar"
-\&.%A "John Foo"
-\&.%T "Implementation Notes on foobar(1)"
-\&.%R "Technical Report ABC\-DE\-12\-345"
-\&.%Q "Drofnats College"
-\&.%C "Nowhere"
-\&.%D "April 1991"
-\&.Re
-.Ed
-.Pp
-produces
-.
-.Bd -ragged -offset indent
-.Rs
-.%A "Matthew Bar"
-.%A "John Foo"
-.%T "Implementation Notes on foobar(1)"
-.%R "Technical Report ABC-DE-12-345"
-.%Q "Drofnats College"
-.%C "Nowhere"
-.%D "April 1991"
-.Re
-.Ed
-.
-.Ss "Trade Names (or Acronyms and Type Names)"
-.
-The trade name macro prints its arguments in a smaller font.
-Its intended use is to imitate a small caps fonts for uppercase acronyms.
-.Pp
-.Dl Usage: .Tn Ao symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Tn\ ASCII" -compact -offset 15n
-.It Li ".Tn DEC"
-.Tn DEC
-.It Li ".Tn ASCII"
-.Tn ASCII
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss "Extended Arguments"
-.
-The
-.Li .Xo
-and
-.Li .Xc
-macros allow one to extend an argument list on a macro boundary for the
-.Ql .It
-macro (see below).
-Note that
-.Li .Xo
-and
-.Li .Xc
-are implemented similarly to all other macros opening and closing an
-enclosure (without inserting characters, of course).
-This means that the following is true for those macros also.
-.Pp
-Here is an example of
-.Ql .Xo
-using the space mode macro to turn spacing off:
-.
-.Bd -literal -offset indent
-\&.Sm off
-\&.It Xo Sy I Ar operation
-\&.No \een Ar count No \een
-\&.Xc
-\&.Sm on
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -compact
-.Sm off
-.It Xo Sy I Ar operation
-.No \en Ar count No \en
-.Xc
-.Sm on
-.El
-.Ed
-.Pp
-.
-Another one:
-.
-.Bd -literal -offset indent
-\&.Sm off
-\&.It Cm S No / Ar old_pattern Xo
-\&.No / Ar new_pattern
-\&.No / Op Cm g
-\&.Xc
-\&.Sm on
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -compact
-.Sm off
-.It Cm S No \&/ Ar old_pattern Xo
-.No \&/ Ar new_pattern
-.No \&/ Op Cm g
-.Xc
-.Sm on
-.El
-.Ed
-.Pp
-.
-Another example of
-.Ql .Xo
-and enclosure macros: Test the value of a variable.
-.
-.Bd -literal -offset indent
-\&.It Xo
-\&.Ic .ifndef
-\&.Oo \e&! Oc Ns Ar variable Oo
-\&.Ar operator variable ...
-\&.Oc Xc
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -width flag -compact
-.It Xo
-.Ic .ifndef
-.Oo \&! Oc Ns Ar variable Oo
-.Ar operator variable ...
-.Oc Xc
-.El
-.Ed
-.Pp
-.
-.
-.Sh "PAGE STRUCTURE DOMAIN"
-.
-.Ss "Section Headers"
-.
-The following
-.Ql .Sh
-section header macros are required in every man page.
-The remaining section headers are recommended at the discretion of the
-author writing the manual page.
-The
-.Ql .Sh
-macro is parsed but not generally callable.
-It can be used as an argument in a call to
-.Ql .Sh
-only; it then reactivates the default font for
-.Ql .Sh .
-.Pp
-The default width is 8n.
-.
-.Bl -tag -width ".Li .Sh\ RETURN\ VALUES"
-.It Li ".Sh NAME"
-The
-.Ql ".Sh NAME"
-macro is mandatory.
-If not specified, headers, footers and page layout defaults will not be set
-and things will be rather unpleasant.
-The
-.Em NAME
-section consists of at least three items.
-The first is the
-.Ql .Nm
-name macro naming the subject of the man page.
-The second is the name description macro,
-.Ql .Nd ,
-which separates the subject name from the third item, which is the
-description.
-The description should be the most terse and lucid possible, as the space
-available is small.
-.Pp
-.Ql .Nd
-first prints
-.Ql \- ,
-then all its arguments.
-.
-.It Li ".Sh LIBRARY"
-This section is for section two and three function calls.
-It should consist of a single
-.Ql .Lb
-macro call;
-see
-.Sx "Library Names" .
-.
-.It Li ".Sh SYNOPSIS"
-The
-.Sx SYNOPSIS
-section describes the typical usage of the subject of a man page.
-The macros required are either
-.Ql .Nm ,
-.Ql .Cd ,
-or
-.Ql .Fn
-(and possibly
-.Ql .Fo ,
-.Ql .Fc ,
-.Ql .Fd ,
-and
-.Ql .Ft ) .
-The function name macro
-.Ql .Fn
-is required for manual page sections\~2 and\~3; the command and general name
-macro
-.Ql .Nm
-is required for sections 1, 5, 6, 7, and\~8.
-Section\~4 manuals require a
-.Ql .Nm ,
-.Ql .Fd
-or a
-.Ql .Cd
-configuration device usage macro.
-Several other macros may be necessary to produce the synopsis line as shown
-below:
-.
-.Bd -filled -offset indent
-.Nm cat
-.Op Fl benstuv
-.Op Fl
-.Ar
-.Ed
-.Pp
-.
-The following macros were used:
-.Pp
-.Dl ".Nm cat"
-.Dl ".Op Fl benstuv"
-.Dl ".Op Fl"
-.Dl .Ar
-.
-.It Li ".Sh DESCRIPTION"
-In most cases the first text in the
-.Sx DESCRIPTION
-section is a brief paragraph on the command, function or file, followed by a
-lexical list of options and respective explanations.
-To create such a list, the
-.Ql .Bl
-(begin list),
-.Ql .It
-(list item) and
-.Ql .El
-(end list)
-macros are used (see
-.Sx Lists and Columns
-below).
-.
-.It Li ".Sh IMPLEMENTATION NOTES"
-Implementation specific information should be placed here.
-.
-.It Li ".Sh RETURN VALUES"
-Sections 2, 3 and\~9 function return values should go here.
-The
-.Ql .Rv
-macro may be used to generate text for use in the
-.Sx RETURN VALUES
-section for most section 2 and 3 library functions;
-see
-.Sx "Return Values" .
-.El
-.Pp
-.
-The following
-.Ql .Sh
-section headers are part of the preferred manual page layout and must be
-used appropriately to maintain consistency.
-They are listed in the order in which they would be used.
-.
-.Bl -tag -width ".Li .Sh\ COMPATIBILITY"
-.It Li ".Sh ENVIRONMENT"
-The
-.Em ENVIRONMENT
-section should reveal any related environment variables and clues to their
-behavior and/or usage.
-.
-.It Li ".Sh FILES"
-Files which are used or created by the man page subject should be listed via
-the
-.Ql .Pa
-macro in the
-.Sx FILES
-section.
-.
-.It Li ".Sh EXAMPLES"
-There are several ways to create examples.
-See the
-.Em EXAMPLES
-section below for details.
-.
-.It Li ".Sh DIAGNOSTICS"
-Diagnostic messages from a command should be placed in this section.
-The
-.Ql .Ex
-macro may be used to generate text for use in the
-.Sx DIAGNOSTICS
-section for most section 1, 6 and\~8 commands;
-see
-.Sx "Exit Status" .
-.
-.It Li ".Sh COMPATIBILITY"
-Known compatibility issues (e.g. deprecated options or parameters)
-should be listed here.
-.
-.It Li ".Sh ERRORS"
-Specific error handling, especially from library functions (man page
-sections 2, 3, and\~9) should go here.
-The
-.Ql .Er
-macro is used to specify an error (errno).
-.
-.It Li ".Sh SEE ALSO"
-References to other material on the man page topic and cross references to
-other relevant man pages should be placed in the
-.Sx "SEE ALSO"
-section.
-Cross references are specified using the
-.Ql .Xr
-macro.
-Currently
-.Xr refer 1
-style references are not accommodated.
-.Pp
-It is recommended that the cross references are sorted on the section
-number, then alphabetically on the names within a section, and placed
-in that order and comma separated.
-Example:
-.Pp
-.Xr ls 1 ,
-.Xr ps 1 ,
-.Xr group 5 ,
-.Xr passwd 5
-.
-.It Li ".Sh STANDARDS"
-If the command, library function or file adheres to a specific
-implementation such as
-.St -p1003.2
-or
-.St -ansiC
-this should be noted here.
-If the command does not adhere to any standard, its history should be noted
-in the
-.Em HISTORY
-section.
-.
-.It Li ".Sh HISTORY"
-Any command which does not adhere to any specific standards should be
-outlined historically in this section.
-.
-.It Li ".Sh AUTHORS"
-Credits should be placed here.
-Use the
-.Ql .An
-macro for names and the
-.Ql .Aq
-macro for e-mail addresses within optional contact information.
-Explicitly indicate whether the person authored the initial manual page
-or the software or whatever the person is being credited for.
-.It Li ".Sh BUGS"
-Blatant problems with the topic go here.
-.El
-.Pp
-.
-User-specified
-.Ql .Sh
-sections may be added; for example, this section was set with:
-.
-.Bd -literal -offset 15n
-\&.Sh "PAGE STRUCTURE DOMAIN"
-.Ed
-.
-.Ss "Subsection Headers"
-.
-Subsection headers have exactly the same syntax as section headers:
-.Ql .Ss
-is parsed but not generally callable.
-It can be used as an argument in a call to
-.Ql .Ss
-only; it then reactivates the default font for
-.Ql .Ss .
-.Pp
-The default width is 8n.
-.
-.Ss "Paragraphs and Line Spacing"
-.
-.Bl -tag -width ".Li .Pp"
-.It Li .Pp
-The
-.Ql .Pp
-paragraph command may be used to specify a line space where necessary.
-The macro is not necessary after a
-.Ql .Sh
-or
-.Ql .Ss
-macro or before a
-.Ql .Bl
-or
-.Ql .Bd
-macro (which both assert a vertical distance unless the
-.Fl compact
-flag is given).
-.Pp
-The macro is neither callable nor parsed and takes no arguments; an
-alternative name is
-.Ql .Lp .
-.El
-.
-.\" XXX
-.
-.\" This worked with version one, need to redo for version three
-.\" .Pp
-.\" .Ds I
-.\" .Cw (ax+bx+c) \ is\ produced\ by\ \&
-.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx\ (
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va ax
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy \+
-.\" .Cx
-.\" .Cl Cx \&(\&
-.\" .Va ax
-.\" .Cx +
-.\" .Va by
-.\" .Cx +
-.\" .Va c )
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cx \t
-.\" .Li \&.Va by
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy \+
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va c )
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.\" This example shows the same equation in a different format.
-.\" The spaces
-.\" around the
-.\" .Li \&+
-.\" signs were forced with
-.\" .Li \e :
-.\" .Pp
-.\" .Ds I
-.\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \&
-.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx\ (
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va a
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy x
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx \e\ +\e\ \e&
-.\" .Cx
-.\" .Cl Cx \&(\&
-.\" .Va a
-.\" .Sy x
-.\" .Cx \ +\ \&
-.\" .Va b
-.\" .Sy y
-.\" .Cx \ +\ \&
-.\" .Va c )
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cl Cx \t\t
-.\" .Li \&.Va b
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy y
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx \e\ +\e\ \e&
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va c )
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.\" The incantation below was
-.\" lifted from the
-.\" .Xr adb 1
-.\" manual page:
-.\" .Pp
-.\" .Ds I
-.\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx Op Sy ?/
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Nm m
-.\" .Cx
-.\" .Cl Cx Op Sy ?/
-.\" .Nm m
-.\" .Ad \ b1 e1 f1
-.\" .Op Sy ?/
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cx \t
-.\" .Li \&.Ar \e\ b1 e1 f1
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Op Sy ?/
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.
-.Ss Keeps
-.
-The only keep that is implemented at this time is for words.
-The macros are
-.Ql .Bk
-(begin keep)
-and
-.Ql .Ek
-(end keep).
-The only option that
-.Ql .Bk
-accepts currently is
-.Fl words
-(this is also the default if no option is given) which is useful for
-preventing line breaks in the middle of options.
-In the example for the make command line arguments (see
-.Sx What's in a Name ) ,
-the keep prevented
-.Xr nroff
-from placing up the flag and the argument on separate lines.
-.Pp
-Both macros are neither callable nor parsed.
-.Pp
-More work needs to be done with the keep macros; specifically, a
-.Fl line
-option should be added.
-.
-.Ss "Examples and Displays"
-.
-There are seven types of displays.
-.Pp
-.Bl -tag -width ".Li .D1"
-.It Li .D1
-(This is D-one.)
-Display one line of indented text.
-This macro is parsed but not callable.
-.Pp
-.D1 Fl ldghfstru
-.Pp
-The above was produced by:
-.Li ".D1 Fl ldghfstru" .
-.
-.It Li .Dl
-(This is D-ell.)
-Display one line of indented
-.Em literal
-text.
-The
-.Ql .Dl
-example macro has been used throughout this file.
-It allows the indentation (display) of one line of text.
-Its default font is set to constant width (literal).
-.Ql .Dl
-is parsed but not callable.
-.Pp
-.Dl % ls \-ldg /usr/local/bin
-.Pp
-The above was produced by:
-.Li ".Dl % ls \e\-ldg /usr/local/bin" .
-.
-.It Li .Bd
-Begin display.
-The
-.Ql .Bd
-display must be ended with the
-.Ql .Ed
-macro.
-It has the following syntax:
-.Pp
-.Bd -ragged -compact
-.Bl -tag -width ".Li .Bd" -offset indent
-.It Li .Bd Xo
-.Bro \-literal | \-filled | \-unfilled | \-ragged | \-centered Brc
-.Oo \-offset Ao string Ac Oc Oo \-file Ao file name Ac Oc Oo \-compact Oc Xc
-.El
-.Ed
-.Pp
-.
-.Bl -tag -width ".Fl file Ao Ar file name Ac " -compact
-.It Fl ragged
-Fill, but do not adjust the right margin (only left-justify).
-.It Fl centered
-Center lines between the current left and right margin.
-Note that each single line is centered.
-.It Fl unfilled
-Do not fill; display a block of text as typed, using line breaks as
-specified by the user.
-This can produce overlong lines without warning messages.
-.It Fl filled
-Display a filled block.
-The block of text is formatted (i.e., the text is justified on both the left
-and right side).
-.It Fl literal
-Display block with literal font (usually fixed-width).
-Useful for source code or simple tabbed or spaced text.
-.It Fl file Ao Ar file name Ac
-The file whose name follows the
-.Fl file
-flag is read and displayed before any data enclosed with
-.Ql .Bd
-and
-.Ql .Ed ,
-using the selected display type.
-Any
-.Xr troff/ Ns Nm \-mdoc
-commands in the file will be processed.
-.It Fl offset Ao Ar string Ac
-If
-.Fl offset
-is specified with one of the following strings, the string is interpreted to
-indicate the level of indentation for the forthcoming block of text:
-.
-.Pp
-.Bl -tag -width ".Ar indent-two" -compact
-.It Ar left
-Align block on the current left margin; this is the default mode of
-.Ql .Bd .
-.It Ar center
-Supposedly center the block.
-At this time unfortunately, the block merely gets left aligned about an
-imaginary center margin.
-.It Ar indent
-Indent by one default indent value or tab.
-The default indent value is also used for the
-.Ql .D1
-and
-.Ql .Dl
-macros, so one is guaranteed the two types of displays will line up.
-The indentation value is normally set to\~6n or about two thirds of an inch
-(six constant width characters).
-.It Ar indent\-two
-Indent two times the default indent value.
-.It Ar right
-This
-.Em left
-aligns the block about two inches from the right side of the page.
-This macro needs work and perhaps may never do the right thing within
-.Xr troff .
-.El
-.Pp
-.
-If
-.Ao string Ac
-is a valid numeric expression instead
-.Pf ( Em with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Ao string Ac
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default offset value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Ao string Ac
-(typeset with a fixed-width font) is taken as the offset.
-.It Fl compact
-Suppress insertion of vertical space before begin of display.
-.El
-.
-.It Li .Ed
-End display (takes no arguments).
-.El
-.
-.Ss "Lists and Columns"
-.
-There are several types of lists which may be initiated with the
-.Ql .Bl
-begin-list macro.
-Items within the list are specified with the
-.Ql .It
-item macro, and each list must end with the
-.Ql .El
-macro.
-Lists may be nested within themselves and within displays.
-The use of columns inside of lists or lists inside of columns is unproven.
-.Pp
-In addition, several list attributes may be specified such as the width of a
-tag, the list offset, and compactness (blank lines between items allowed or
-disallowed).
-Most of this document has been formatted with a tag style list
-.Pf ( Fl tag ) .
-.Pp
-It has the following syntax forms:
-.
-.Pp
-.Bd -ragged -compact
-.Bl -tag -width ".Li .Bl" -offset indent -compact
-.It Li .Bl Xo
-.Bro \-hang | \-ohang | \-tag | \-diag | \-inset Brc
-.Oo \-width Ao string Ac Oc
-.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
-.It Li .Bl Xo
-.No \-column Oo \-offset Ao string Ac Oc
-.Ao string1 Ac Ao string2 Ac ... Xc
-.It Li .Bl Xo
-.Bro \-item | \-enum Oo \-nested Oc | \-bullet | \-hyphen | \-dash Brc
-.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
-.El
-.Ed
-.Pp
-.
-And now a detailed description of the list types.
-.
-.Pp
-.Bl -tag -width ".Fl column" -compact
-.It Fl bullet
-A bullet list.
-.
-.Bd -literal -offset indent
-\&.Bl \-bullet \-offset indent \-compact
-\&.It
-Bullet one goes here.
-\&.It
-Bullet two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -bullet -offset indent -compact
-.It
-Bullet one goes here.
-.It
-Bullet two here.
-.El
-.Pp
-.
-.It Fl dash No ( or Fl hyphen )
-A dash list.
-.
-.Bd -literal -offset indent
-\&.Bl \-dash \-offset indent \-compact
-\&.It
-Dash one goes here.
-\&.It
-Dash two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -dash -offset indent -compact
-.It
-Dash one goes here.
-.It
-Dash two here.
-.El
-.Pp
-.
-.It Fl enum
-An enumerated list.
-.
-.Bd -literal -offset indent
-\&.Bl \-enum \-offset indent \-compact
-\&.It
-Item one goes here.
-\&.It
-And item two here.
-\&.El
-.Ed
-.Pp
-.
-The result:
-.
-.Pp
-.Bl -enum -offset indent -compact
-.It
-Item one goes here.
-.It
-And item two here.
-.El
-.Pp
-.
-If you want to nest enumerated lists, use the
-.Fl nested
-flag (starting with the second-level list):
-.
-.Bd -literal -offset indent
-\&.Bl \-enum \-offset indent \-compact
-\&.It
-Item one goes here
-\&.Bl \-enum \-nested \-compact
-\&.It
-Item two goes here.
-\&.It
-And item three here.
-\&.El
-\&.It
-And item four here.
-\&.El
-.Ed
-.Pp
-.
-Result:
-.
-.Pp
-.Bl -enum -offset indent -compact
-.It
-Item one goes here.
-.Bl -enum -nested -compact
-.It
-Item two goes here.
-.It
-And item three here.
-.El
-.It
-And item four here.
-.El
-.Pp
-.
-.It Fl item
-A list of type
-.Fl item
-without list markers.
-.
-.Bd -literal -offset indent
-\&.Bl \-item \-offset indent
-\&.It
-Item one goes here.
-Item one goes here.
-Item one goes here.
-\&.It
-Item two here.
-Item two here.
-Item two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -item -offset indent
-.It
-Item one goes here.
-Item one goes here.
-Item one goes here.
-.It
-Item two here.
-Item two here.
-Item two here.
-.El
-.Pp
-.
-.It Fl tag
-A list with tags.
-Use
-.Fl width
-to specify the tag width.
-.
-.Pp
-.Bl -tag -width "PPID" -compact -offset indent
-.It SL
-sleep time of the process (seconds blocked)
-.It PAGEIN
-number of disk
-.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-.It UID
-numerical user-id of process owner
-.It PPID
-numerical id of parent of process priority
-(non-positive when in non-interruptible wait)
-.El
-.Pp
-.
-The raw text:
-.
-.Bd -literal -offset indent
-\&.Bl \-tag \-width "PPID" \-compact \-offset indent
-\&.It SL
-sleep time of the process (seconds blocked)
-\&.It PAGEIN
-number of disk
-\&.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-\&.It UID
-numerical user\-id of process owner
-\&.It PPID
-numerical id of parent of process priority
-(non\-positive when in non\-interruptible wait)
-\&.El
-.Ed
-.Pp
-.
-.It Fl diag
-Diag lists create section four diagnostic lists and are similar to inset
-lists except callable macros are ignored.
-The
-.Fl width
-flag is not meaningful in this context.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Bl \-diag
-\&.It You can't use Sy here.
-The message says all.
-\&.El
-.Ed
-.Pp
-.
-produces
-.
-.Bl -diag
-.It You can't use Sy here.
-The message says all.
-.El
-.Pp
-.
-.It Fl hang
-A list with hanging tags.
-.
-.Bl -hang -offset indent
-.It Em Hanged
-labels appear similar to tagged lists when the
-label is smaller than the label width.
-.It Em Longer hanged list labels
-blend into the paragraph unlike
-tagged paragraph labels.
-.El
-.Pp
-And the unformatted text which created it:
-.
-.Bd -literal -offset indent
-\&.Bl \-hang \-offset indent
-\&.It Em Hanged
-labels appear similar to tagged lists when the
-label is smaller than the label width.
-\&.It Em Longer hanged list labels
-blend into the paragraph unlike
-tagged paragraph labels.
-\&.El
-.Ed
-.Pp
-.
-.It Fl ohang
-Lists with overhanging tags do not use indentation for the items; tags are
-written to a separate line.
-.Pp
-.Bl -ohang -offset indent
-.It Sy SL
-sleep time of the process (seconds blocked)
-.It Sy PAGEIN
-number of disk
-.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-.It Sy UID
-numerical user-id of process owner
-.It Sy PPID
-numerical id of parent of process priority
-(non-positive when in non-interruptible wait)
-.El
-.Pp
-.
-The raw text:
-.
-.Bd -literal -offset indent
-\&.Bl \-ohang \-offset indent
-\&.It Sy SL
-sleep time of the process (seconds blocked)
-\&.It Sy PAGEIN
-number of disk
-\&.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-\&.It Sy UID
-numerical user\-id of process owner
-\&.It Sy PPID
-numerical id of parent of process priority
-(non\-positive when in non\-interruptible wait)
-\&.El
-.Ed
-.Pp
-.
-.It Fl inset
-Here is an example of inset labels:
-.Bl -inset -offset indent
-.It Em Tag
-The tagged list (also called a tagged paragraph)
-is the most common type of list used in the
-Berkeley manuals.
-Use a
-.Fl width
-attribute as described below.
-.It Em Diag
-Diag lists create section four diagnostic lists
-and are similar to inset lists except callable
-macros are ignored.
-.It Em Hang
-Hanged labels are a matter of taste.
-.It Em Ohang
-Overhanging labels are nice when space is constrained.
-.It Em Inset
-Inset labels are useful for controlling blocks of
-paragraphs and are valuable for converting
-.Nm \-mdoc
-manuals to other formats.
-.El
-.Pp
-Here is the source text which produced the above example:
-.
-.Bd -literal -offset indent
-\&.Bl \-inset \-offset indent
-\&.It Em Tag
-The tagged list (also called a tagged paragraph)
-is the most common type of list used in the
-Berkeley manuals.
-\&.It Em Diag
-Diag lists create section four diagnostic lists
-and are similar to inset lists except callable
-macros are ignored.
-\&.It Em Hang
-Hanged labels are a matter of taste.
-\&.It Em Ohang
-Overhanging labels are nice when space is constrained.
-\&.It Em Inset
-Inset labels are useful for controlling blocks of
-paragraphs and are valuable for converting
-\&.Nm \-mdoc
-manuals to other formats.
-\&.El
-.Ed
-.Pp
-.
-.It Fl column
-This list type generates multiple columns.
-The number of columns and the width of each column is determined by the
-arguments to the
-.Fl column
-list,
-.Aq Ar string1 ,
-.Aq Ar string2 ,
-etc.
-If
-.Aq Ar stringN
-starts with a
-.Ql .\&
-(dot) immediately followed by a valid
-.Nm \-mdoc
-macro name, interpret
-.Aq Ar stringN
-and use the width of the result.
-Otherwise, the width of
-.Aq Ar stringN
-(typeset with a fixed-width font) is taken as the
-.Ar N Ns th
-column width.
-.Pp
-Each
-.Ql .It
-argument is parsed to make a row, each column within the row is a separate
-argument separated by a tab or the
-.Ql .Ta
-macro.
-.Pp
-The table:
-.
-.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
-.It Sy String Ta Sy Nroff Ta Sy Troff
-.It Li <= Ta <= Ta \*(<=
-.It Li >= Ta >= Ta \*(>=
-.El
-.Pp
-.
-was produced by:
-.
-.Bd -literal
-\&.Bl \-column \-offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
-\&.It Sy String Ta Sy Nroff Ta Sy Troff
-\&.It Li <= Ta <= Ta \e*(<=
-\&.It Li >= Ta >= Ta \e*(>=
-\&.El
-.Ed
-.Pp
-.
-Don't abuse this list type!
-For more complicated cases it might be far better and easier to use
-.Xr tbl 1 ,
-the table preprocessor.
-.El
-.Pp
-.
-Other keywords:
-.
-.Bl -tag -width ".Fl indent Ao Ar string Ac"
-.It Fl width Ao Ar string Ac
-If
-.Aq Ar string
-starts with a
-.Ql .\&
-(dot) immediately followed by a valid
-.Nm \-mdoc
-macro name, interpret
-.Aq Ar string
-and use the width of the result.
-Almost all lists in this document use this option.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Bl \-tag \-width ".Fl test Ao Ar string Ac"
-\&.It Fl test Ao Ar string Ac
-This is a longer sentence to show how the
-\&.Fl width
-flag works in combination with a tag list.
-\&.El
-.Ed
-.Pp
-.
-gives:
-.
-.Bl -tag -width ".Fl test Ao Ar string Ac"
-.It Fl test Ao Ar string Ac
-This is a longer sentence to show how the
-.Fl width
-flag works in combination with a tag list.
-.El
-.Pp
-.
-(Note that the current state of
-.Nm \-mdoc
-is saved before
-.Aq Ar string
-is interpreted; afterwards, all variables are restored again.
-However, boxes (used for enclosures) can't be saved in
-.Tn GNU
-.Xr troff 1 ;
-as a consequence, arguments must always be
-.Em balanced
-to avoid nasty errors.
-For example, do not write
-.Ql ".Ao Ar string"
-but
-.Ql ".Ao Ar string Xc"
-instead if you really need only an opening angle bracket.)
-.Pp
-Otherwise, if
-.Aq Ar string
-is a valid numeric expression
-.Em ( with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Aq Ar string
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default width value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Aq Ar string
-(typeset with a fixed-width font) is taken as the width.
-.Pp
-If a width is not specified for the tag list type, every time
-.Ql .It
-is invoked, an attempt is made to determine an appropriate width.
-If the first argument to
-.Ql .It
-is a callable macro, the default width for that macro will be used;
-otherwise, the default width of
-.Ql .No
-is used.
-.It Fl offset Ao Ar string Ac
-If
-.Aq Ar string
-is
-.Ar indent ,
-a default indent value (normally set to\~6n, similar to the value used in
-.Ql .Dl
-or
-.Ql .Bd )
-is used.
-If
-.Aq Ar string
-is a valid numeric expression instead
-.Pf ( Em with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Aq Ar string
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default offset value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Aq Ar string
-(typeset with a fixed-width font) is taken as the offset.
-.It Fl compact
-Suppress insertion of vertical space before the list and between list items.
-.El
-.
-.
-.Sh "MISCELLANEOUS MACROS"
-.
-Here a list of the remaining macros which do not fit well into one of the
-above sections.
-We couldn't find real examples for the following macros:
-.Ql .Me
-and
-.Ql .Ot .
-They are documented here for completeness \- if you know how to use them
-properly please send a mail to
-.Mt bug-groff@gnu.org
-(including an example).
-.
-.Bl -tag -width ".Li .Bt"
-.It Li .Bt
-prints
-.
-.Bd -ragged -offset indent
-.Bt
-.Ed
-.Pp
-It is neither callable nor parsed and takes no arguments.
-.
-.It Li .Fr
-.Pp
-.Dl Usage: .Fr Ao function return value Ac ...
-.Pp
-Don't use this macro.
-It allows a break right before the return value (usually a single digit)
-which is bad typographical behaviour.
-Use
-.Ql \e~
-to tie the return value to the previous word.
-.
-.It Li .Hf
-Use this macro to include a (header) file literally.
-It first prints
-.Ql File:
-followed by the file name, then the contents of
-.Ao file Ac .
-.Pp
-.Dl Usage: .Hf Ao file Ac
-.Pp
-It is neither callable nor parsed.
-.
-.It Li .Lk
-To be written.
-.
-.It Li .Me
-Exact usage unknown.
-The documentation in the
-.Nm \-mdoc
-source file describes it as a macro for
-.Dq "menu entries" .
-.Pp
-Its default width is 6n.
-.
-.It Li .Mt
-To be written.
-.
-.It Li .Ot
-Exact usage unknown.
-The documentation in the
-.Nm \-mdoc
-source file describes it as
-.Dq old function type (fortran) .
-.
-.It Li .Sm
-Activate (toggle) space mode.
-.Pp
-.Dl Usage: .Sm Oo on | off Oc ...
-.Pp
-If space mode is off, no spaces between macro arguments are inserted.
-If called without a parameter (or if the next parameter is neither
-.Ql on
-nor
-.Ql off ,
-.Ql .Sm
-toggles space mode.
-.
-.It Li .Ud
-prints
-.
-.Bd -ragged -offset indent
-.Ud
-.Ed
-.Pp
-It is neither callable nor parsed and takes no arguments.
-.El
-.
-.
-.Sh "PREDEFINED STRINGS"
-.
-The following strings are predefined:
-.Pp
-.TS
-lb lb lb lb
-l l l l.
-String Nroff Troff Meaning
-<= <= \*[<=] less equal
->= >= \*[>=] greater equal
-Rq '' \*[Rq] right double quote
-Lq `` \*[Lq] left double quote
-ua ^ \*[ua] upwards arrow
-aa \' \*[aa] acute accent
-ga \` \*[ga] grave accent
-q \&" \*[q] straight double quote
-Pi pi \*[Pi] greek pi
-Ne != \*[Ne] not equal
-Le <= \*[Le] less equal
-Ge >= \*[Ge] greater equal
-Lt < \*[Lt] less than
-Gt > \*[Gt] greater than
-Pm +\- \*[Pm] plus minus
-If infinity \*[If] infinity
-Am \*[Am] \*[Am] ampersand
-Na \*[Na] \*[Na] not a number
-Ba \*[Ba] \*[Ba] vertical bar
-.TE
-.Pp
-The names of the columns
-.Sy Nroff
-and
-.Sy Troff
-are a bit misleading;
-.Sy Nroff
-shows the
-.Tn ASCII
-representation, while
-.Sy Troff
-gives the best glyph form available.
-For example, a Unicode enabled
-.Tn TTY Ns - Ns
-device will have proper glyph representations for all strings, whereas the
-enhancement for a Latin1
-.Tn TTY Ns - Ns
-device is only the plus-minus sign.
-.Pp
-String names which consist of two characters can be written as
-.Ql \e*(xx ;
-string names which consist of one character can be written as
-.Ql \e*x .
-A generic syntax for a string name of any length is
-.Ql \e*[xxx]
-(this is a
-.Tn GNU
-.Xr troff 1
-extension).
-.
-.
-\#
-\#=====================================================================
-\#
-.Sh DIAGNOSTICS
-.
-The debugging macro
-.Ql .Db
-available in previous versions of
-.Nm \-mdoc
-has been removed since
-.Tn GNU
-.Xr troff 1
-provides better facilities to check parameters; additionally, many error and
-warning messages have been added to this macro package, making it both more
-robust and verbose.
-.Pp
-The only remaining debugging macro is
-.Ql .Rd
-which yields a register dump of all global registers and strings.
-A normal user will never need it.
-.
-.
-.Sh "FORMATTING WITH GROFF, TROFF, AND NROFF"
-.
-By default, the package inhibits page breaks, headers, and footers if
-displayed with a
-.Tn TTY
-device like
-.Sq latin1
-or
-.Sq unicode ,
-to make the manual more efficient for viewing on-line.
-This behaviour can be changed (e.g.\& to create a hardcopy of the
-.Tn TTY
-output) by setting the register
-.Ql cR
-to zero while calling
-.Xr groff 1 ,
-resulting in multiple pages instead of a single, very long page:
-.Pp
-.Dl groff \-Tlatin1 \-rcR=0 \-mdoc foo.man > foo.txt
-.Pp
-For double-sided printing, set register
-.Ql D
-to\~1:
-.Pp
-.Dl groff \-Tps \-rD1 \-mdoc foo.man > foo.ps
-.Pp
-To change the document font size to 11pt or 12pt, set register
-.Ql S
-accordingly:
-.Pp
-.Dl groff \-Tdvi \-rS11 \-mdoc foo.man > foo.dvi
-.Pp
-Register
-.Ql S
-is ignored for
-.Tn TTY
-devices.
-.Pp
-The line and title length can be changed by setting the registers
-.Ql LL
-and
-.Ql LT ,
-respectively:
-.Pp
-.Dl groff \-Tutf8 \-rLL=100n \-rLT=100n \-mdoc foo.man | less
-.Pp
-If not set, both registers default to 78n for TTY devices and 6.5i
-otherwise.
-.
-.
-.Sh FILES
-.
-.Bl -tag -width mdoc/doc-ditroff -compact
-.It Pa doc.tmac
-The main manual macro package.
-.It Pa mdoc.tmac
-A wrapper file to call
-.Pa doc.tmac .
-.It Pa mdoc/doc-common
-Common strings, definitions, stuff related typographic output.
-.It Pa mdoc/doc-nroff
-Definitions used for a
-.Tn TTY
-output device.
-.It Pa mdoc/doc-ditroff
-Definitions used for all other devices.
-.It Pa mdoc.local
-Local additions and customizations.
-.It Pa andoc.tmac
-Use this file if you don't know whether the
-.Nm \-mdoc
-or the
-.Nm \-man
-package should be used.
-Multiple man pages (in either format) can be handled.
-.El
-.
-.
-.Sh "SEE ALSO"
-.
-.Xr groff 1 ,
-.Xr man 1 ,
-.Xr troff 1 ,
-.Xr groff_man 7
-.
-.
-.Sh BUGS
-.
-Section 3f has not been added to the header routines.
-.Pp
-.Ql \&.Nm
-font should be changed in
-.Em NAME
-section.
-.Pp
-.Ql \&.Fn
-needs to have a check to prevent splitting up
-if the line length is too short.
-Occasionally it
-separates the last parenthesis, and sometimes
-looks ridiculous if a line is in fill mode.
-.Pp
-The list and display macros do not do any keeps
-and certainly should be able to.
-.\" Note what happens if the parameter list overlaps a newline
-.\" boundary.
-.\" to make sure a line boundary is crossed:
-.\" .Bd -literal
-.\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[]
-.\" .Ed
-.\" .Pp
-.\" produces, nudge nudge,
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
-.\" nudge
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] .
-.\" .Pp
-.\" If double quotes are used, for example:
-.\" .Bd -literal
-.\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q
-.\" .Ed
-.\" .Pp
-.\" produces, nudge nudge,
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
-.\" nudge
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
-.\" nudge
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" .
-.\" .Pp
-.\" Not a pretty sight...
-.\" In a paragraph, a long parameter containing unpaddable spaces as
-.\" in the former example will cause
-.\" .Xr troff
-.\" to break the line and spread
-.\" the remaining words out.
-.\" The latter example will adjust nicely to
-.\" justified margins, but may break in between an argument and its
-.\" declaration.
-.\" In
-.\" .Xr nroff
-.\" the right margin adjustment is normally ragged and the problem is
-.\" not as severe.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/groff_me.man b/contrib/groff/tmac/groff_me.man
deleted file mode 100644
index 91d204384f6a..000000000000
--- a/contrib/groff/tmac/groff_me.man
+++ /dev/null
@@ -1,282 +0,0 @@
-.\" Copyright (c) 1980 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" @(#)me.7 6.4 (Berkeley) 4/13/90
-.\"
-.\" Modified for groff by jjc@jclark.com
-.hc %
-.TH GROFF_ME @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.UC 3
-.SH NAME
-groff_me \- troff macros for formatting papers
-.SH SYNOPSIS
-.B "groff \-me"
-[ options ]
-file ...
-.br
-.B "groff \-m\ me"
-[ options ]
-file ...
-.SH DESCRIPTION
-This manual page describes the GNU version of the \-me macros,
-which is part of the groff document formatting system.
-This version can be used with both GNU troff and Unix troff.
-This package of
-.I troff
-macro definitions provides a canned formatting
-facility for tech%nical papers in various formats.
-.PP
-The macro requests are defined below.
-Many
-.I troff
-requests are unsafe in conjunction with
-this package, however, these requests may be used with
-impunity after the first .pp:
-.nf
-.IP
-.ta \w'.sz +n 'u
-\&.bp begin new page
-\&.br break output line here
-\&.sp n insert n spacing lines
-\&.ls n (line spacing) n=1 single, n=2 double space
-\&.na no alignment of right margin
-\&.ce n center next n lines
-\&.ul n underline next n lines
-.fi
-.PP
-Output of the
-.I pic,
-.I eqn,
-.I refer,
-and
-.I tbl
-preprocessors
-is acceptable as input.
-.SH FILES
-@MACRODIR@/me.tmac (a wrapper file for e.tmac)
-.br
-@MACRODIR@/e.tmac
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.br
-\-me Reference Manual, Eric P. Allman
-.br
-Writing Papers with Groff Using \-me
-.tr &.
-.SH REQUESTS
-This list is incomplete;
-see
-.I "The \-me Reference Manual"
-for interesting details.
-.PP
-.ta \w'.eh \'x\'y\'z\' 'u +\w'Initial 'u +\w'Cause 'u
-.br
-.di x
- \ka
-.br
-.di
-.na
-.in \nau
-.ti 0
-Request Initial Cause Explanation
-.ti 0
- Value Break
-.br
-.in \nau
-.ti 0
-\&.(c - yes Begin centered block
-.ti 0
-\&.(d - no Begin delayed text
-.ti 0
-\&.(f - no Begin footnote
-.ti 0
-\&.(l - yes Begin list
-.ti 0
-\&.(q - yes Begin major quote
-.ti 0
-\&.(x \fIx\fR - no Begin indexed item in index
-.I x
-.ti 0
-\&.(z - no Begin floating keep
-.ti 0
-\&.)c - yes End centered block
-.ti 0
-\&.)d - yes End delayed text
-.ti 0
-\&.)f - yes End footnote
-.ti 0
-\&.)l - yes End list
-.ti 0
-\&.)q - yes End major quote
-.ti 0
-\&.)x - yes End index item
-.ti 0
-\&.)z - yes End floating keep
-.ti 0
-\&.++ \fIm H\fR - no Define paper section.
-.I m
-defines the part of the paper, and can be
-.B C
-(chapter),
-.B A
-(appendix),
-.B P
-(preliminary, e.g., abstract, table of contents, etc.),
-.B B
-(bibliography),
-.B RC
-(chapters renumbered from page one each chapter),
-or
-.B RA
-(appendix renumbered from page one).
-.ti 0
-\&.+c \fIT\fR - yes Begin chapter (or appendix, etc., as
-set by .++).
-.I T
-is the chapter title.
-.ti 0
-\&.1c 1 yes One column format on a new page.
-.ti 0
-\&.2c 1 yes Two column format.
-.ti 0
-\&.EN - yes Space after equation
-produced by
-.I eqn
-or
-.IR neqn .
-.ti 0
-\&.EQ \fIx y\fR - yes Precede equation; break out and
-add space.
-Equation number is
-.IR y .
-The optional argument \fIx\fR
-may be
-.I I
-to indent equation (default),
-.I L
-to left-adjust the equation, or
-.I C
-to center the equation.
-.ti 0
-\&.GE - yes End \fIgremlin\fP picture.
-.ti 0
-\&.GS - yes Begin \fIgremlin\fP picture.
-.ti 0
-\&.PE - yes End \fIpic\fP picture.
-.ti 0
-\&.PS - yes Begin \fIpic\fP picture.
-.ti 0
-\&.TE - yes End table.
-.ti 0
-\&.TH - yes End heading section of table.
-.ti 0
-\&.TS \fIx\fR - yes Begin table; if \fIx\fR is
-.I H
-table has repeated heading.
-.ti 0
-\&.b \fIx\fR no no Print
-.I x
-in boldface; if no argument switch to boldface.
-.ti 0
-\&.ba \fI+n\fR 0 yes Augments the base indent by
-.I n.
-This indent is used to set the indent on regular text
-(like paragraphs).
-.ti 0
-\&.bc no yes Begin new column
-.ti 0
-\&.bi \fIx\fR no no Print
-.I x
-in bold italics (nofill only)
-.ti 0
-\&.bu - yes Begin bulleted paragraph
-.ti 0
-\&.bx \fIx\fR no no Print \fIx\fR in a box (nofill only).
-.ti 0
-\&.ef \fI\'x\'y\'z\'\fR \'\'\'\' no Set even footer to x y z
-.ti 0
-\&.eh \fI\'x\'y\'z\'\fR \'\'\'\' no Set even header to x y z
-.ti 0
-\&.fo \fI\'x\'y\'z\'\fR \'\'\'\' no Set footer to x y z
-.ti 0
-\&.hx - no Suppress headers and footers on next page.
-.ti 0
-\&.he \fI\'x\'y\'z\'\fR \'\'\'\' no Set header to x y z
-.ti 0
-\&.hl - yes Draw a horizontal line
-.ti 0
-\&.i \fIx\fR no no Italicize
-.I x;
-if
-.I x
-missing, italic text follows.
-.ti 0
-\&.ip \fIx y\fR no yes Start indented paragraph,
-with hanging tag
-.IR x .
-Indentation is
-.I y
-ens (default 5).
-.ti 0
-\&.lp yes yes Start left-blocked paragraph.
-.ti 0
-\&.np 1 yes Start numbered paragraph.
-.ti 0
-\&.of \fI\'x\'y\'z\'\fR \'\'\'\' no Set odd footer to x y z
-.ti 0
-\&.oh \fI\'x\'y\'z\'\fR \'\'\'\' no Set odd header to x y z
-.ti 0
-\&.pd - yes Print delayed text.
-.ti 0
-\&.pp no yes Begin paragraph.
-First line indented.
-.ti 0
-\&.r yes no Roman text follows.
-.ti 0
-\&.re - no Reset tabs to default values.
-.ti 0
-\&.sh \fIn x\fR - yes Section head follows,
-font automatically bold.
-.I n
-is level of section,
-.I x
-is title of section.
-.ti 0
-\&.sk no no Leave the next page blank.
-Only one page is remembered ahead.
-.ti 0
-\&.sm \fIx\fR - no Set
-.I x
-in a smaller pointsize.
-.ti 0
-\&.sz \fI+n\fR 10p no Augment the point size by
-.I n
-points.
-.ti 0
-\&.tp no yes Begin title page.
-.ti 0
-\&.u \fIx\fR - no Underline argument (even in \fItroff\fR).
-(Nofill only).
-.ti 0
-\&.uh - yes Like .sh but unnumbered.
-.ti 0
-\&.xp \fIx\fR - no Print index
-.I x.
-.ad
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/groff_ms.man b/contrib/groff/tmac/groff_ms.man
deleted file mode 100644
index 258670fb423f..000000000000
--- a/contrib/groff/tmac/groff_ms.man
+++ /dev/null
@@ -1,1556 +0,0 @@
-'\" t
-.ig
-Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr groff_ms_C \n[.C]
-.cp 0
-.
-.TH GROFF_MS @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
-.
-.SH NAME
-.
-groff_ms \- groff ms macros
-.
-.
-.
-.SH SYNOPSIS
-.
-.B groff
-.B \-ms
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.br
-.B groff
-.B \-m\ ms
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.
-.
-.
-.SH DESCRIPTION
-.
-This manual page describes the GNU version of the
-.I ms
-macros,
-part of the
-.I groff
-typesetting system.
-The
-.I ms
-macros are mostly compatible with the
-documented behavior of the 4.3
-.SM BSD
-Unix
-.I ms
-macros (see
-.I Differences from troff ms
-below for details).
-The
-.I ms
-macros are suitable for reports, letters, books, and
-technical documentation.
-.
-.
-.
-.SH USAGE
-.
-The
-.I ms
-macro package expects files to have
-a certain amount of structure.
-The simplest documents can begin with a paragraph macro
-and consist of text separated by paragraph macros
-or even blank lines.
-Longer documents have a structure as follows:
-.
-.TP
-.B "Document type"
-If you use the
-.B RP
-(report) macro at the beginning of the document,
-.I groff
-prints the cover page information on its own page;
-otherwise it prints the information on the
-first page with your document text immediately following.
-Other document formats found in AT&T
-.I troff
-are specific to AT&T
-or Berkeley, and are not supported in
-.IR "groff ms" .
-.
-.TP
-.B "Format and layout"
-By setting number registers,
-you can change your document's type (font and size),
-margins, spacing, headers and footers, and footnotes.
-See
-.I "Document control registers"
-below for more details.
-.
-.TP
-.B "Cover page"
-A cover page consists of a title,
-and optionally the author's name and institution,
-an abstract, and the date.
-See
-.I "Cover page macros"
-below for more details.
-.
-.TP
-.B "Body"
-Following the cover page is your document.
-It consists of paragraphs, headings, and lists.
-.
-.TP
-.B "Table of contents"
-Longer documents usually include a table of contents,
-which you can add by placing the
-.B TC
-macro at the end of your document.
-.
-.
-.SS "Document control registers"
-.
-The following table lists the document control
-number registers.
-For the sake of consistency,
-set registers related to margins at the beginning of your document,
-or just after the
-.B RP
-macro.
-.
-.LP
-.ne 12
-.B Margin settings
-.RS
-.na
-.TS
-cb s cb s s cb s cb s
-afCW s l s s l s l s.
-Reg. Definition Effective Default
-_
-PO T{
-Page offset (left margin)
-T} T{
-next page
-T} 1i
-LL T{
-Line length
-T} next para. 6i
-LT T{
-Header/footer length
-T} next para. 6i
-HM T{
-Top (header) margin
-T} next page 1i
-FM T{
-Bottom (footer) margin
-T} next page 1i
-_
-.TE
-.RE
-.
-.LP
-.ne 12
-.B Text settings
-.RS
-.TS
-cb s cb s s cb s cb s
-afCW s l s s l s l s.
-Reg. Definition Effective Default
-_
-PS T{
-Point size
-T} next para. 10p
-VS T{
-Line spacing (leading)
-T} next para. 12p
-PSINCR T{
-Point size increment
-for section headings of
-increasing importance
-T} next heading 1p
-GROWPS T{
-Heading level
-beyond which PSINCR
-is ignored
-T} next heading 0
-_
-.TE
-.RE
-.
-.LP
-.ne 11
-.B Paragraph settings
-.RS
-.TS
-cb cb s cb cb
-afCW l s l l .
-Reg. Definition Effective Default
-_
-PI T{
-Initial indent
-T} next para. 5n
-PD T{
-Space between paragraphs
-T} next para. 0.3v
-QI T{
-Quoted paragraph indent
-T} next para. 5n
-PORPHANS T{
-Number of initial lines
-to be kept together
-T} next para. 1
-HORPHANS T{
-Number of initial lines
-to be kept with heading
-T} next heading 1
-_
-.TE
-.RE
-.
-.LP
-.ne 7
-.B Footnote settings
-.RS
-.TS
-cb cb cb cb
-afCW l l l .
-Reg. Definition Effective Default
-_
-FL Footnote length next footnote \[rs]n[LL]*5/6
-FI Footnote indent next footnote 2n
-FF Footnote format next footnote 0
-FPS Point size next footnote \[rs]n[PS]-2
-FVS Vert. spacing next footnote \[rs]n[FPS]+2
-FPD Para. spacing next footnote \[rs]n[PD]/2
-_
-.TE
-.RE
-.
-.LP
-.ne 6
-.B Other settings
-.RS
-.TS
-cb s cb s s cb s cb s
-afCW s l s s l s l s.
-Reg. Definition Effective Default
-_
-MINGW T{
-Minimum width between columns
-T} next page 2n
-_
-.TE
-.ad
-.RE
-.
-.
-.SS "Cover page macros"
-.
-Use the following macros to create a cover page for your document
-in the order shown.
-.
-.TP
-.B .RP [no]
-Specifies the report format for your document.
-The report format creates a separate cover page.
-With no
-.B RP
-macro,
-.I groff
-prints a subset of the
-cover page on page\~1 of your document.
-.
-.IP
-If you use the optional
-.B no
-argument,
-.I groff
-prints a title page but
-does not repeat any of the title page information
-(title, author, abstract, etc.\&)
-on page\~1 of the document.
-.
-.TP
-.B .P1
-(P-one) Prints the header on page\~1.
-The default is to suppress the header.
-.
-.TP
-.BI ".DA [" xxx ]
-(optional) Print the current date,
-or the arguments to the macro if any,
-on the title page (if specified)
-and in the footers.
-This is the default for
-.IR nroff .
-.
-.TP
-.BI ".ND [" xxx ]
-(optional) Print the current date,
-or the arguments to the macro if any,
-on the title page (if specified)
-but not in the footers.
-This is the default for
-.IR troff .
-.
-.TP
-.B .TL
-Specifies the document title.
-.I Groff
-collects text following the
-.B TL
-macro into the title, until reaching the author name or abstract.
-.
-.TP
-.B .AU
-Specifies the author's name.
-You can specify multiple authors by using an
-.B AU
-macro for each author.
-.
-.TP
-.B .AI
-Specifies the author's institution.
-You can specify multiple institutions.
-.
-.TP
-.B .AB [no]
-Begins the abstract.
-The default is to print the word
-.BR ABSTRACT ,
-centered and in italics, above the text of the abstract.
-The option
-.B no
-suppresses this heading.
-.
-.TP
-.B .AE
-End the abstract.
-.
-.
-.SS Paragraphs
-.
-Use the
-.B PP
-macro to create indented paragraphs,
-and the
-.B LP
-macro to create paragraphs with no initial indent.
-.
-.PP
-The
-.B QP
-macro indents all text at both left and right margins.
-The effect is identical to the HTML
-.B <BLOCKQUOTE>
-element.
-The next paragraph or heading
-returns margins to normal.
-.
-.PP
-The
-.B XP
-macro produces an exdented paragraph.
-The first line of the paragraph begins at
-the left margin,
-and subsequent lines are indented
-(the opposite of
-.BR PP ).
-.
-.PP
-For each of the above paragraph types,
-and also for any list entry introduced by the
-.B IP
-macro
-(described later),
-the document control register
-.BR PORPHANS ,
-sets the
-.I minimum
-number of lines which must be printed,
-after the start of the paragraph,
-and before any page break occurs.
-If there is insufficient space remaining on the current page
-to accommodate this number of lines,
-then a page break is forced
-.I before
-the first line of the paragraph is printed.
-.
-.PP
-Similarly,
-when a section heading
-(see subsection
-.I Headings
-below)
-preceeds any of these paragraph types,
-the
-.B HORPHANS
-document control register specifies the
-.I minimum
-number of lines of the paragraph
-which must be kept on the same page as the heading.
-If insufficient space remains on the current page
-to accommodate the heading and this number of lines of paragraph text,
-then a page break is forced
-.I before
-the heading is printed.
-.
-.
-.SS Headings
-.
-Use headings to create a hierarchical structure
-for your document.
-By default,
-the
-.I ms
-macros print headings in
-.B bold
-using the same font family and point size as the body text.
-For output devices which support scalable fonts,
-this behaviour may be modified,
-by defining the document control registers,
-.B GROWPS
-and
-.BR PSINCR .
-.
-.PP
-The following heading macros are available:
-.
-.TP
-.BI .NH\ xx
-Numbered heading.
-The argument
-.I xx
-is either a numeric argument to indicate the
-level of the heading, or
-.I S\ xx\ xx\ \c
-".\|.\|."
-to set the section number explicitly.
-If you specify heading levels out of sequence,
-such as invoking
-.B ".NH\ 3"
-after
-.BR ".NH\ 1" ,
-.I groff
-prints a warning on standard error.
-.
-.IP
-If the
-.B GROWPS
-register is set to a value
-greater than the level of the heading,
-then the point size of the heading will be increased by
-.B PSINCR
-units over the text size specified by the
-.B PS
-register,
-for each level by which the heading level is less than
-the value of
-.BR GROWPS .
-For example,
-the sequence:
-.
-.RS
-.ne 12
-.nf
-.IP
-\&.nr PS 10
-\&.nr GROWPS 3
-\&.nr PSINCR 1.5p
-\&.
-\&.NH 1
-Top Level Heading
-\&.
-\&.NH 2
-Second Level Heading
-\&.
-\&.NH 3
-Third Level Heading
-.fi
-.RE
-.
-.IP
-will cause
-.RI \*(lq 1.\ Top\ Level\ Heading \*(rq
-to be printed in 13pt
-.B bold
-text, followed by
-.RI \*(lq 1.1.\ Second\ Level\ Heading \*(rq
-in 11.5pt
-.B bold
-text, while
-.RI \*(lq 1.1.1.\ Third\ Level\ Heading \*(rq,
-and all more deeply nested heading levels,
-will remain in the 10pt
-.B bold
-text which is specified by the
-.B PS
-register.
-.
-.IP
-Note that the value stored in
-.B PSINCR
-is interpreted in
-.I groff
-basic units;
-the
-.I p
-scaling factor should be employed,
-when assigning a value specified in points.
-.
-.IP
-After invoking
-.BR .NH ,
-the assigned heading number is available in the strings
-.B SN-DOT
-(exactly as it appears in the formatted heading),
-and
-.B SN-NO-DOT
-(with its final period omitted).
-The string
-.B SN
-is also defined,
-as an alias for
-.BR SN-DOT ;
-if preferred,
-the user may redefine it as an alias for
-.BR SN-NO-DOT ,
-'ne 10
-by including the initialisation:
-.
-.RS
-.nf
-.IP
-\&.ds SN-NO-DOT
-\&.als SN SN-NO-DOT
-.fi
-.RE
-.
-.IP
-.I before
-the first use of
-.BR .NH ,
-or simply:
-.
-.RS
-.nf
-.IP
-\&.als SN SN-NO-DOT
-.fi
-.RE
-.
-.IP
-.I after
-the first use of
-.BR .NH .
-.
-.TP
-.BI .SH\ [ xx ]
-Unnumbered subheading.
-The use of the optional
-.I xx
-argument is a GNU extension,
-which adjusts the point size of the unnumbered subheading
-to match that of a numbered heading,
-introduced using
-.BI .NH\ xx
-with the same value of
-.IR xx .
-For example,
-given the same settings for
-.BR PS ,
-.B GROWPS
-and
-.BR PSINCR ,
-as used in the preceeding
-.B .NH
-example,
-the sequence:
-.
-.RS
-.ne
-.nf
-.IP
-\&.SH 2
-An Unnumbered Subheading
-.fi
-.RE
-.
-.IP
-will print
-.RI \*(lq "An Unnumbered Subheading" \*(rq
-in 11.5pt
-.B bold
-text.
-.
-.
-.SS Highlighting
-.
-The
-.I ms
-macros provide a variety of methods to highlight
-or emphasize text:
-.
-.TP
-.B ".B [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-.BR "bold type" .
-If you specify a second argument,
-.I groff
-prints it in the previous font after
-the bold text, with no intervening space
-(this allows you to set punctuation after
-the highlighted text without highlighting
-the punctuation).
-Similarly, it prints the third argument (if any)
-in the previous font
-.B before
-the first argument.
-For example,
-.RS
-.
-.IP
-\&.B foo ) (
-.RE
-.
-.IP
-prints
-.RB ( foo ).
-.
-.IP
-If you give this macro no arguments,
-.I groff
-prints all text following in bold until
-the next highlighting, paragraph, or heading macro.
-.
-.TP
-.B ".R [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-roman (or regular) type.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".I [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-.IR "italic type" .
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".CW [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in a constant width face.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".BI [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in bold italic type.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.BI ".BX [" txt ]
-Prints its argument and draws a box around it.
-If you want to box a string that contains spaces,
-use a digit-width space (\[rs]0).
-.
-.TP
-.BI ".UL [" txt " [" post ]]
-Prints its first argument with an underline.
-If you specify a second argument,
-.I groff
-prints it in the previous font after
-the underlined text, with no intervening space.
-.
-.TP
-.B .LG
-Prints all text following in larger type
-(2\~points larger than the current point size) until
-the next font size, highlighting, paragraph, or heading macro.
-You can specify this macro multiple times
-to enlarge the point size as needed.
-.
-.TP
-.B .SM
-Prints all text following in
-smaller type
-(2\~points smaller than the current point size) until
-the next type size, highlighting, paragraph, or heading macro.
-You can specify this macro multiple times
-to reduce the point size as needed.
-.
-.TP
-.B .NL
-Prints all text following in
-the normal point size
-(that is, the value of the
-.B PS
-register).
-.
-.TP
-.BI \[rs]*{ text \[rs]*}
-Print the enclosed
-.I text
-as a superscript.
-.
-.
-.SS Indents
-.
-You may need to indent sections of text.
-A typical use for indents is to create nested lists and sublists.
-.
-.PP
-Use the
-.B RS
-and
-.B RE
-macros to start and end a section of indented text, respectively.
-The
-.B PI
-register controls the amount of indent.
-.
-.PP
-You can nest indented sections as deeply as needed by
-using multiple, nested pairs of
-.B RS
-and
-.BR RE .
-.
-.
-.SS Lists
-.
-The
-.B IP
-macro handles duties for all lists.
-Its syntax is as follows:
-.
-.TP
-.BI ".IP [" marker " [" width ]]
-.
-.IP
-The
-.I marker
-is usually a bullet character
-.B \[rs](bu
-for unordered lists,
-a number (or auto-incrementing number register) for numbered lists,
-or a word or phrase for indented (glossary-style) lists.
-.
-.IP
-The
-.I width
-specifies the indent for the body of each list item.
-Once specified, the indent remains the same for all
-list items in the document until specified again.
-.\" -----
-.br
-.ne 15
-.
-.
-.SS "Tab stops"
-.
-Use the
-.B ta
-request to set tab stops as needed.
-Use the
-.B TA
-macro to reset tabs to the default (every 5n).
-You can redefine the
-.B TA
-macro to create a different set of default tab stops.
-.
-.
-.SS "Displays and keeps"
-.
-Use displays to show text-based examples or figures
-(such as code listings).
-Displays turn off filling, so lines of code can be
-displayed as-is without inserting
-.B br
-requests in between each line.
-Displays can be
-.I kept
-on a single page, or allowed to break across pages.
-The following table shows the display types available.
-.RS
-.ne 11
-.na
-.TS
-cb s s s cbt s s
-cb s cb s ^ s s
-lfCW s lfCW s l s s.
-Display macro Type of display
-With keep No keep
-_
-\&.DS L \&.LD Left-justified.
-\&.DS I [\fIindent\fP] \&.ID T{
-Indented (default indent in the \fBDI\fP register).
-T}
-\&.DS B \&.BD T{
-Block-centered (left-justified, longest line centered).
-T}
-\&.DS C \&.CD Centered.
-\&.DS R \&.RD Right-justified.
-_
-.TE
-.RE
-.ad
-.
-.LP
-Use the
-.B DE
-macro to end any display type.
-The macros
-.B Ds
-and
-.B De
-were formerly provided as aliases for
-.B DS
-and
-.BR DE ,
-respectively, but they have been removed, and should no longer be used.
-X11 documents which actually use
-.B Ds
-and
-.B De
-always load a specific macro file from the X11 distribution (macros.t)
-which provides proper definitions for the two macros.
-.PP
-To
-.I keep
-text together on a page,
-such as
-a paragraph that refers to a table (or list, or other item)
-immediately following, use the
-.B KS
-and
-.B KE
-macros.
-The
-.B KS
-macro begins a block of text to be kept on a single page,
-and the
-.B KE
-macro ends the block.
-.
-.PP
-You can specify a
-.I "floating keep"
-using the
-.B KF
-and
-.B KE
-macros.
-If the keep cannot fit on the current page,
-.I groff
-holds the contents of the keep and allows text following
-the keep (in the source file) to fill in the remainder of
-the current page.
-When the page breaks,
-whether by an explicit
-.B bp
-request or by reaching the end of the page,
-.I groff
-prints the floating keep at the top of the new page.
-This is useful for printing large graphics or tables
-that do not need to appear exactly where specified.
-.
-.PP
-The macros
-.B B1
-and
-.B B2
-can be used to enclose a text within a box;
-.B .B1
-begins the box, and
-.B .B2
-ends it.
-Text in the box is automatically placed in a diversion
-(keep).
-.
-.
-.SS "Tables, figures, equations, and references"
-.
-The
-.I -ms
-macros support the standard
-.I groff
-preprocessors:
-.IR tbl ,
-.IR pic ,
-.IR eqn ,
-and
-.IR refer .
-Mark text meant for preprocessors by enclosing it
-in pairs of tags as follows:
-.
-.TP
-.BR ".TS [H]" " and " .TE
-Denotes a table, to be processed by the
-.I tbl
-preprocessor.
-The optional
-.BR H "\~argument"
-instructs
-.I groff
-to create a running header with the information
-up to the
-.B TH
-macro.
-.I Groff
-prints the header at the beginning of the table;
-if the table runs onto another page,
-.I groff
-prints the header on the next page as well.
-.
-.TP
-.BR .PS " and " .PE
-Denotes a graphic, to be processed by the
-.I pic
-preprocessor.
-You can create a
-.I pic
-file by hand, using the
-AT&T
-.I pic
-manual available on the Web as a reference,
-or by using a graphics program such as
-.IR xfig .
-.
-.TP
-.BR ".EQ [\fI\,align\/\fP]" " and " .EN
-Denotes an equation, to be processed by the
-.I eqn
-preprocessor.
-The optional
-.I align
-argument can be
-.BR C ,
-.BR L ,
-or\~\c
-.B I
-to center (the default), left-justify, or indent
-the equation.
-.
-.TP
-.BR .[ " and " .]
-Denotes a reference, to be processed by the
-.I refer
-preprocessor.
-The GNU
-.IR @g@refer (@MAN1EXT@)
-manual page provides a comprehensive reference
-to the preprocessor and the format of the
-bibliographic database.
-.
-.
-.SS Footnotes
-.
-The
-.I ms
-macros provide a flexible footnote system.
-You can specify a numbered footnote by using the
-.B \[rs]**
-escape, followed by the text of the footnote
-enclosed by
-.B FS
-and
-.B FE
-macros.
-.
-.PP
-You can specify symbolic footnotes
-by placing the mark character (such as
-.B \[rs](dg
-for the dagger character) in the body text,
-followed by the text of the footnote
-enclosed by
-.B FS\ \[rs](dg
-and
-.B FE
-macros.
-.
-.PP
-You can control how
-.I groff
-prints footnote numbers by changing the value of the
-.B FF
-register as follows:
-.RS
-.ne 7
-.
-.TP
-0
-Prints the footnote number as a superscript; indents the footnote (default).
-.
-.TP
-1
-Prints the number followed by a period (like\~1.\&)
-and indents the footnote.
-.
-.TP
-2
-Like\~1, without an indent.
-.
-.TP
-3
-Like\~1, but prints the footnote number as a hanging paragraph.
-.
-.LP
-.RE
-You can use footnotes safely within keeps and displays,
-but avoid using numbered footnotes within floating keeps.
-You can set a second
-.B \[rs]**
-between a
-.B \[rs]**
-and its corresponding
-.BR .FS ;
-as long as each
-.B .FS
-occurs
-.I after
-the corresponding
-.B \[rs]**
-and the occurrences of
-.B .FS
-are in the same order as the corresponding occurrences of
-.BR \[rs]** .
-.
-.
-.SS "Headers and footers"
-.
-There are two ways to define headers and footers:
-.
-.IP \(bu 3n
-Use the strings
-.BR LH ,
-.BR CH ,
-and
-.B RH
-to set the left, center, and right headers; use
-.BR LF ,
-.BR CF ,
-and
-.B RF
-to set the left, center, and right footers.
-This works best for documents that do not distinguish
-between odd and even pages.
-.
-.IP \(bu
-Use the
-.B OH
-and
-.B EH
-macros to define headers for the odd and even pages; and
-.B OF
-and
-.B EF
-macros to define footers for the odd and even pages.
-This is more flexible than defining the individual strings.
-The syntax for these macros is as follows:
-.RS
-.
-.IP
-.B ".OH '\fIleft\fP'\fIcenter\fP'\fIright\fP'"
-.RE
-.
-.IP
-You can replace the quote (') marks with any character not
-appearing in the header or footer text.
-.
-.
-.SS Margins
-.
-You control margins using a set of number registers.
-The following table lists the register names and defaults:
-.RS
-.ne 8
-.na
-.TS
-cb s cb s s cb s cb s
-afCW s l s s l s l s.
-Reg. Definition Effective Default
-_
-PO T{
-Page offset (left margin)
-T} next page 1i
-LL T{
-Line length
-T} next para. 6i
-LT T{
-Header/footer length
-T} next para. 6i
-HM T{
-Top (header) margin
-T} next page 1i
-FM T{
-Bottom (footer) margin
-T} next page 1i
-_
-.TE
-.RE
-.ad
-.
-.PP
-Note that there is no right margin setting.
-The combination of page offset and line length
-provide the information necessary to
-derive the right margin.
-.
-.
-.SS "Multiple columns"
-.
-The
-.I ms
-macros can set text in as many columns as will reasonably
-fit on the page.
-The following macros are available.
-All of them force a page break if a multi-column mode is already set.
-However, if the current mode is single-column, starting a multi-column
-mode does
-.I not
-force a page break.
-.
-.TP
-.B .1C
-Single-column mode.
-.
-.TP
-.B .2C
-Two-column mode.
-.
-.TP
-.BI ".MC [" width " [" gutter ]]
-Multi-column mode.
-If you specify no arguments, it is equivalent to the
-.B 2C
-macro.
-Otherwise,
-.I width
-is the width of each column and
-.I gutter
-is the space between columns.
-The
-.B MINGW
-number register is the default gutter width.
-.
-.
-.SS "Creating a table of contents"
-.
-Wrap text that you want to appear in the
-table of contents in
-.B XS
-and
-.B XE
-macros.
-Use the
-.B TC
-macro to print the table of contents at the end of the document,
-resetting the page number to\~\c
-.B i
-(Roman numeral\~1).
-.
-.PP
-You can manually create a table of contents
-by specifying a page number as the first argument to
-.BR XS .
-Add subsequent entries using the
-.B XA
-macro.
-For example:
-.RS
-.
-.PP
-.ne 8
-.nf
-\&.XS 1
-Introduction
-\&.XA 2
-A Brief History of the Universe
-\&.XA 729
-Details of Galactic Formation
-\&.\|.\|.
-\&.XE
-.fi
-.RE
-.
-.LP
-Use the
-.B PX
-macro to print a manually-generated table of contents
-without resetting the page number.
-.
-.PP
-If you give the argument
-.B no
-to either
-.B PX
-or
-.BR TC ,
-.I groff
-suppresses printing the title
-specified by the
-.B \[rs]*[TOC]
-string.
-.
-.
-.SS "Fractional point sizes"
-.
-Traditionally, the
-.I ms
-macros only support integer values for the document's font size and
-vertical spacing.
-To overcome this restriction, values larger than or equal to 1000 are taken
-as fractional values, multiplied by 1000.
-For example, `.nr\~PS\~10250' sets the font size to 10.25 points.
-.
-.LP
-The following four registers accept fractional point sizes:
-.BR PS ,
-.BR VS ,
-.BR FPS ,
-and
-.BR FVS .
-.
-.LP
-Due to backwards compatibility, the value of
-.B VS
-must be smaller than 40000 (this is 40.0 points).
-.
-.
-.
-.SH "DIFFERENCES FROM troff ms"
-.
-The
-.I "groff ms"
-macros are a complete re-implementation,
-using no original AT&T code.
-Since they take advantage of the extended features in
-.IR groff ,
-they cannot be used with AT&T
-.IR troff .
-Other differences include:
-.
-.IP \(bu 3n
-The internals of
-.I "groff ms"
-differ from the internals of Unix
-.IR ms .
-Documents that depend upon implementation details of Unix
-.I ms
-may not format properly with
-.IR "groff ms" .
-.
-.IP \(bu
-The error-handling policy of
-.I "groff ms"
-is to detect and report errors,
-rather than silently to ignore them.
-.
-.IP \(bu
-Bell Labs localisms are not implemented.
-.
-.IP \(bu
-Berkeley localisms, in particular the
-.B TM
-and
-.B CT
-macros,
-are not implemented.
-.
-.IP \(bu
-.I "Groff ms"
-does not work in compatibility mode (e.g., with the
-.B \-C
-option).
-.
-.IP \(bu
-There is no support for typewriter-like devices.
-.
-.IP \(bu
-.I "Groff ms"
-does not provide cut marks.
-.
-.IP \(bu
-Multiple line spacing is not supported
-(use a larger vertical spacing instead).
-.
-.IP \(bu
-Some Unix
-.I ms
-documentation says that the
-.B CW
-and
-.B GW
-number registers can be used to control the column width and
-gutter width, respectively.
-These number registers are not used in
-.IR "groff ms" .
-.
-.IP \(bu
-Macros that cause a reset
-(paragraphs, headings, etc.\&)
-may change the indent.
-Macros that change the indent do not increment or decrement
-the indent, but rather set it absolutely.
-This can cause problems for documents that define
-additional macros of their own.
-The solution is to use not the
-.B in
-request but instead the
-.B RS
-and
-.B RE
-macros.
-.
-.IP \(bu
-The number register
-.B GS
-is set to\~1 by the
-.I "groff ms"
-macros,
-but is not used by the Unix
-.I ms
-macros.
-Documents that need to determine whether
-they are being formatted with Unix
-.I ms
-or
-.I "groff ms"
-should use this number register.
-.
-.IP \(bu
-To make
-.I "groff ms"
-use the default page offset (which also specifies the left margin),
-the
-.B PO
-number register must stay undefined until the first
-.B ms
-macro is evaluated.
-This implies that
-.B PO
-should not be used early in the document, unless it is changed also:
-Remember that accessing an undefined register automatically defines it.
-.br
-.ne 23
-.
-.
-.SS Strings
-.
-You can redefine the following strings to adapt the
-.I "groff ms"
-macros to languages other than English:
-.TS
-center;
-cb cb
-afCW l .
-String Default Value
-_
-REFERENCES References
-ABSTRACT ABSTRACT
-TOC Table of Contents
-MONTH1 January
-MONTH2 February
-MONTH3 March
-MONTH4 April
-MONTH5 May
-MONTH6 June
-MONTH7 July
-MONTH8 August
-MONTH9 September
-MONTH10 October
-MONTH11 November
-MONTH12 December
-_
-.TE
-.
-.PP
-The
-.B \[rs]*-
-string produces an em dash \[em] like this.
-.
-.PP
-Use
-.B \[rs]*Q
-and
-.B \[rs]*U
-to get a left and right typographer's quote,
-respectively, in
-.I troff
-(and plain quotes in
-.IR nroff ).
-
-.
-.
-.SS Text Settings
-.
-The
-.B FAM
-string sets the default font family.
-If this string is undefined at initialization,
-it is set to Times.
-.
-.LP
-The point size, vertical spacing, and inter-paragraph spacing for footnotes
-are controlled by the number registers
-.BR FPS ,
-.BR FVS ,
-and
-.BR FPD ;
-at initialization these are set to
-.BR \[rs]n(PS-2 ,
-.BR \[rs]n[FPS]+2 ,
-and
-.BR \[rs]n(PD/2 ,
-respectively.
-If any of these registers are defined before initialization,
-the initialization macro does not change them.
-.
-.LP
-The hyphenation flags (as set by the
-.B hy
-request) are set from the
-.B HY
-register;
-the default is\~14.
-.
-.PP
-Improved accent marks
-(as originally defined in Berkeley's
-.I ms
-version)
-are available by specifying the
-.B AM
-macro at the beginning of your document.
-You can place an accent over most characters
-by specifying the string defining the accent
-directly after the character.
-For example,
-.B n\[rs]*~
-produces an n with a tilde over it.
-.
-.
-.
-.SH "NAMING CONVENTIONS"
-.
-.
-.LP
-The following conventions are used for names of macros, strings and
-number registers.
-External names available to documents that use the
-.I "groff ms"
-macros contain only uppercase letters and digits.
-.
-.LP
-Internally the macros are divided into modules;
-naming conventions are as follows:
-.
-.IP \(bu 3n
-Names used only within one module are of the form
-.IB \%module * name\fR.
-.
-.IP \(bu
-Names used outside the module in which they are defined are of the form
-.IB \%module @ name\fR.
-.
-.IP \(bu
-Names associated with a particular environment are of the form
-.IB \%environment : name\fR;
-these are used only within the
-.B par
-module.
-.
-.IP \(bu
-.I name
-does not have a module prefix.
-.
-.IP \(bu
-Constructed names used to implement arrays are of the form
-.IB \%array ! index\fR.
-.
-.PP
-Thus the groff ms macros reserve the following names:
-.
-.IP \(bu 3n
-Names containing the characters
-.BR * ,
-.BR @ ,
-and\~\c
-.BR : .
-.
-.IP \(bu
-Names containing only uppercase letters and digits.
-.
-.
-.
-.SH FILES
-.
-.B @MACRODIR@/ms.tmac
-(a wrapper file for
-.BR s.tmac )
-.br
-.B @MACRODIR@/s.tmac
-.
-.
-.
-.SH "SEE ALSO"
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.I Groff: The GNU Implementation of troff
-by Trent Fisher and Werner Lemberg.
-.
-.
-.
-.SH AUTHOR
-.
-Original manual page by James Clark
-.IR "et al" ;
-rewritten by Larry Kollar
-(\fIlkollar@despammed.com\fR).
-.
-.cp \n[groff_ms_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/groff_trace.man b/contrib/groff/tmac/groff_trace.man
deleted file mode 100644
index bc1c98c17bb3..000000000000
--- a/contrib/groff/tmac/groff_trace.man
+++ /dev/null
@@ -1,550 +0,0 @@
-.
-.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_trace \- groff macro package trace.tmac
-.SH SYNOPSIS
-.\" The .SH was moved to this place to make `apropos' happy.
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalize
-.\" --------------------------------------------------------------------
-.
-.ig
-groff_trace.7
-
-File position: <groff-source>/tmac/groff_trace.man
-
-Last update: 14 July 2002
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2002 Free Software Foundation, Inc.
-written by Bernd Warken <bwarken@mayn.de>
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_trace_C \n[.C]
-.cp 0
-.
-.mso www.tmac
-.
-.if n \{\
-. mso tty-char.tmac
-. ftr CR R
-. ftr CI I
-. ftr CB B
-.\}
-.
-.ds Ellipsis .\|.\|.\&\"
-.
-.\" Global static variables for inter-macro communication
-.rr @+Example_font
-.
-.\" --------------------------------------------------------------------
-.\" setup for the macro definitions below
-.\"
-.\" naming: namespace:category_macro.variable_name (experimental)
-.
-.\" --------------------------------------------------------------------
-.\" configuration of prompt for `.Shell_cmd'* macros
-.ds trace:Shell_cmd.prompt_text sh#\" prompt for shell commands
-.ds trace:Shell_cmd+.prompt_text >\" prompt on continuation lines
-.ds trace:Shell_cmd_base.prompt_font I\" font for prompts
-.
-.\" automatically determine setup from the configuration above
-.als @f trace:Shell_cmd_base.prompt_font\"
-.als @t trace:Shell_cmd.prompt_text\"
-.als @t+ trace:Shell_cmd+.prompt_text\"
-.ds trace:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
-.ds trace:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
-.nr @w \w'\*[trace:Shell_cmd.prompt]'\"
-.nr @w+ \w'\*[trace:Shell_cmd+.prompt]'\"
-.ft \*[@f]
-.\" Full prompt width is maximum of texts plus 1m
-.nr trace:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
-.ft
-.rm @f
-.rm @f+
-.rm @t
-.rm @t+
-.rr @w
-.rr @w+
-.
-.\"--------------------------------------------------------------------
-.\" Ignore all arguments like a comment, even after a .eo call.
-.de c
-..
-.c --------------------------------------------------------------------
-.de BIR
-. ie (\\n[.$] < 3) \
-. BI \\$@
-. el \{\
-. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
-. shift 2
-. Text \\*[@tmp@]\fR\\$*\f[]
-. rm @tmp@
-. \}
-..
-.c --------------------------------------------------------------------
-.c .Env_var (<env_var_name> [<punct>])
-.c
-.c Display an environment variable, with optional punctuation.
-.c
-.de Env_var
-. nh
-. SM
-. Text \f[CB]\\$1\f[]\\$2
-. hy
-..
-.c --------------------------------------------------------------------
-.c .Error (<text>...)
-.c
-.c Print error message to terminal and abort.
-.c
-.de Error
-. tm \\$*
-. ab
-..
-.c --------------------------------------------------------------------
-.de Example
-. if r@+Example_font \
-. Error previous .Example was not terminated by a ./Example
-. nr @+Example_font \\n[.f]
-. nh
-. nf
-.c RS \\n[trace:Shell_cmd_base.prompt_width]u
-. ft CR
-..
-.c --------------------------------------------------------------------
-.de /Example
-. if !r@+Example_font \
-. Error no previous call to .Example
-. ft \\n[@+Example_font]
-.c RE
-. fi
-. hy
-. rr @+Example_font
-..
-.c --------------------------------------------------------------------
-.de Macdef
-. if (\\n[.$] <= 0) \
-. Error \\$0 needs at least one argument.
-. ds @s .\f[B]\\$1\f[]\"
-. shift
-. if (\\n[.$] > 0) \
-. as @s \~\f[I]\\$*\f[]\"
-. IP \\*[@s]
-. rm @s
-..
-.c --------------------------------------------------------------------
-.de Macdef+
-. br
-. ns
-. Macdef \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd (<CR> [<CI>] ...)
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c
-.c Examples:
-.c .Shell_cmd "groffer --dpi 100 file"
-.c result: `sh# groffer --dpi 100 file'
-.c with 'sh#' in font I, the rest in CR
-.c
-.c .Shell_cmd groffer\~--dpi\~100\~file
-.c result: the same as above
-.c
-.c .Shell_cmd "groffer --dpi=" value " file"
-.c result: sh# groffer --dpi=value file
-.c with `groffer --dpi=' and `file' in CR; `value' in CI
-.c
-.c .Shell_cmd groffer\~--dpi= value \~file
-.c result: the same as the previous example
-.c
-.de Shell_cmd
-. trace:Shell_cmd_base "\*[trace:Shell_cmd.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd+ (<CR> [<CI>] ...)
-.c
-.c A continuation line for .Shell_cmd.
-.c
-.de Shell_cmd+
-. trace:Shell_cmd_base "\*[trace:Shell_cmd+.prompt]" \\$@
-..
-.c --------------------------------------------------------------------
-.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
-.c
-.c A shell command line; display args alternating in fonts CR and CI.
-.c Internal, do not use directly.
-.c
-.c Globals: read-only register @.Shell_cmd_width
-.c
-.de trace:Shell_cmd_base
-. if (\\n[.$] <= 0) \
-. return
-. nr @+font \\n[.f]\"
-. ds @prompt \\$1\"
-. ft CR
-. c gap between prompt and command
-. nr @+gap \\n[trace:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
-. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
-. shift
-. ds @cf CR\"
-. while (\\n[.$] > 0) \{\
-. as @res \\f[\\*[@cf]]\\$1\"
-. shift
-. ie '\\*[@cf]'CR' \
-. ds @cf I\"
-. el \
-. ds @cf CR\"
-. \}
-. br
-. ad l
-. nh
-. nf
-. Text \\*[@res]\"
-. fi
-. hy
-. ad
-. br
-. ft \\n[@+font]
-. rr @+font
-. rr @+gap
-. rm @cf
-. rm @res
-..
-.c --------------------------------------------------------------------
-.c .Text (<text>...)
-.c
-.c Treat the arguments as text, no matter how they look.
-.c
-.de Text
-. if (\\n[.$] == 0) \
-. return
-. nop \)\\$*\)
-..
-.c --------------------------------------------------------------------
-.c .Topic ([<indent>])
-.c
-.c A bulleted paragraph.
-.c
-.de Topic
-. ie (\\n[.$] = 0) \
-. .ds @indent 2m\"
-. el \
-. .ds @indent \\$1\"
-. TP \\*[@indent]
-. Text \[bu]
-. rm @indent
-..
-.c --------------------------------------------------------------------
-.c .TP+ ()
-.c
-.c Continuation line for .TP header.
-.c
-.de TP+
-. br
-. ns
-. TP \\$1
-..
-.c --------------------------------------------------------------------
-.de 'char
-. ds @tmp@ `\f(CR\\$1\f[]'
-. shift
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de option
-. ds @tmp@ \f(CB\\$1\f[]
-. shift 1
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de argument
-. ds @tmp@ \f(CI\\$1\f[]
-. shift 1
-. Text \\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de request
-. ds @tmp@ \f(CB\\$1\f[]
-. shift 1
-. Text .\\*[@tmp@]\\$*
-. rm @tmp@
-..
-.c --------------------------------------------------------------------
-.de escape
-. ds @tmp@ \f[CB]\\$1\f[]
-. shift 1
-. Text \[rs]\\*[@tmp@]\\$*
-. rm @tmp@
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B groff -m trace
-.RI [ options\*[Ellipsis] ]
-.RI [ files\*[Ellipsis] ]
-.
-.
-.P
-Elements in brackets denote optional arguments, and the ellipsis means
-that there can be any number of arguments of this kind.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.I trace
-macro package of
-.BR groff (@MAN1EXT@)
-can be a valuable tool for debugging documents written in the roff
-formatting language.
-.
-A call stack trace is protocolled on standard error, that means, a
-diagnostic message is emitted on entering and exiting of a macro call.
-.
-This greatly eases to track down an error in some macro.
-.
-.
-.P
-This tracing process is activated by specifying the groff or troff
-command line option
-.BR "-m\~trace" .
-This works also with the
-.BR groffer (@MAN1EXT@)
-viewer program.
-.
-A finer control can be obtained by including the macro file within the
-document by the groff macro call
-.BR ".mso\~trace.tmac" .
-Only macros that are defined after this line are traced.
-.
-.
-.P
-If some other macro package should be traced as well it must be specified
-after
-.BR "-m\~trace"
-on the command line.
-.
-.
-.P
-The macro file
-.B trace.tmac
-is unusual because it does not contain any macros to be called by a
-user.
-.
-Instead, the existing macro definition and appending facilities are
-modified such that they display diagnostic messages.
-.
-.
-.\" --------------------------------------------------------------------
-.SH EXAMPLES
-.\" --------------------------------------------------------------------
-.
-.P
-In the following examples, a roff fragment is fed into groff via
-standard input.
-.
-As we are only interested in the diagnostic messages (standard error)
-on the terminal, the normal formatted output (standard output) is
-redirected into the nirvana device
-.IR /dev/null .
-The resulting diagnostic messages are displayed directly below the
-corresponding example.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Command line option"
-.
-.P
-.Shell_cmd "echo '."
-.Shell_cmd+ ".de test_macro"
-.Shell_cmd+ ".."
-.Shell_cmd+ ".test_macro"
-.Shell_cmd+ ".test_macro some dummy arguments"
-.Shell_cmd+ "' | groff -m trace >/dev/null"
-.P
-.Example
-*** de trace enter: test_macro
-*** trace exit: test_macro
-*** de trace enter: test_macro "some" "dummy" "arguments"
-*** trace exit: test_macro "some" "dummy" "arguments"
-./Example
-.
-.P
-The entry and the exit of each macro call is displayed on the terminal
-(standard output) \[em] together with the arguments (if any).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Nested macro calls"
-.
-.P
-.Shell_cmd "echo '."
-.Shell_cmd+ ".de child"
-.Shell_cmd+ ".."
-.Shell_cmd+ ".de parent"
-.Shell_cmd+ ".child"
-.Shell_cmd+ ".."
-.Shell_cmd+ ".parent"
-.Shell_cmd+ "' | groff -m trace >/dev/null"
-.P
-.Example
-*** de trace enter: parent
-*** de trace enter: child
-*** trace exit: child
-*** trace exit: parent
-./Example
-.
-.P
-This shows that macro calls can be nested.
-.
-This powerful feature can help to tack down quite complex call stacks.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Activating with .mso"
-.
-.Shell_cmd "echo '."
-.Shell_cmd+ ".de before"
-.Shell_cmd+ ..
-.Shell_cmd+ ".mso trace.tmac"
-.Shell_cmd+ ".de after"
-.Shell_cmd+ ..
-.Shell_cmd+ .before
-.Shell_cmd+ .after
-.Shell_cmd+ .before
-.Shell_cmd+ "' | groff >/dev/null"
-.P
-.Example
-*** de trace enter: after
-*** trace exit: after
-./Example
-.
-.P
-Here, the tracing is activated within the document, not by a command
-line option.
-.
-As tracing was not active when macro
-.I before
-was defined, no call of this macro is protocolled; on the other hand,
-the macro
-.I after
-is fully protocolled.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-The
-.I trace
-macros are kept in the file
-.B trace.tmac
-located in the
-.IR "tmac directory" ;
-see
-.BR groff_tmac (@MAN5EXT@)
-for details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.Env_var $GROFF_TMAC_PATH
-A colon-separated list of additional tmac directories in which to
-search for macro files; see
-.BR groff_tmac (@MAN5EXT@)
-for details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHOR
-.\" --------------------------------------------------------------------
-.
-Copyright (C) 2002 Free Software Foundation, Inc.
-.
-.P
-This document is distributed under the terms of the FDL (GNU Free
-Documentation License) version 1.1 or later.
-.
-You should have received a copy of the FDL on your system, it is also
-available on-line at the
-.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
-.
-.P
-This document is part of
-.IR groff ,
-the GNU roff distribution.
-.
-It was written by
-.MTO bwarken@mayn.de "Bernd Warken".
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-An overview of the groff system.
-.
-.
-.TP
-.BR troff (@MAN1EXT@)
-For details on option
-.BR -m .
-.
-.
-.TP
-.BR groffer (@MAN1EXT@)
-A viewer program for all kinds of roff documents.
-.
-.
-.TP
-.BR groff_tmac (@MAN5EXT@)
-A general description of groff macro packages.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-A short reference for the groff formatting language.
-.
-.
-.P
-A complete reference for all parts of the groff system is found in the
-groff
-.BR info (1)
-file.
-.
-.cp \n[groff_trace_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/groff_www.man b/contrib/groff/tmac/groff_www.man
deleted file mode 100644
index e4b3f524b1f8..000000000000
--- a/contrib/groff/tmac/groff_www.man
+++ /dev/null
@@ -1,525 +0,0 @@
-.TH GROFF_WWW @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.\" Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
-.\" Free Software Foundation, Inc.
-.\" Written by Gaius Mulley (gaius@glam.ac.uk)
-.\"
-.\" This file is part of groff.
-.\"
-.\" groff is free software; you can redistribute it and/or modify it under
-.\" the terms of the GNU General Public License as published by the Free
-.\" Software Foundation; either version 2, or (at your option) any later
-.\" version.
-.\"
-.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY
-.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-.\" for more details.
-.\"
-.\" You should have received a copy of the GNU General Public License along
-.\" with groff; see the file COPYING. If not, write to the Free Software
-.\" Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-.\"
-.\" user level guide to using the -mwww macroset
-.\"
-.
-.do nr groff_www_C \n[.C]
-.cp 0
-.
-.do mso www.tmac
-.
-.\" we need the .LK here as we use it in the middle as an example --
-.\" once the user requests .LK then the automatic generation of links
-.\" at the top of the document is suppressed.
-.LK
-.
-.
-.SH NAME
-groff_www \- groff macros for authoring web pages
-.HR
-.
-.
-.SH SYNOPSIS
-.B "groff \-mwww"
-[ options ]
-file ...
-.
-.
-.SH DESCRIPTION
-This manual page describes the GNU \-mwww macro package, which is part of
-the groff document formatting system.
-The manual page is very a basic guide, and the html device driver
-.RB ( \%grohtml )
-has been completely rewritten but still remains as in an alpha state.
-It has been included into the distribution so that a lot of people have a
-chance to test it.
-Note that this macro file will be automatically called (via the
-.B troffrc
-file) if you use
-.BR \-Thtml .
-.PP
-To see the hyperlinks in action, please format this man page with the
-.B \%grohtml
-device.
-.PP
-Here is a summary of the functions found in this macro set.
-.ta 2iL
-.nf
-\&.JOBNAME split output into multiple files
-\&.HX automatic heading level cut off;
- $1 point for sections/headers
-\&.BCL specify colours on a web page
-\&.BGIMG specify background image
-\&.URL create a url using two parameters
-\&.FTP create an ftp reference
-\&.MTO create a html email address
-\&.FTP create an ftp reference
-\&.TAG generate an html name
-\&.IMG include an image file
-\&.PIMG include png image
-\&.MPIMG place png on the margin and
- wrap text around it
-\&.HnS begin heading
-\&.HnE end heading
-\&.LK emit automatically collected links.
-\&.HR produce a horizontal rule
-\&.NHR suppress automatic generation of rules.
-\&.HTL only generate HTML title
-\&.HEAD add data to <head> block
-\&.ULS unorder list begin
-\&.ULE unorder list end
-\&.OLS ordered list begin
-\&.OLE ordered list end
-\&.DLS definition list begin
-\&.DLE definition list end
-\&.LI insert a list item
-\&.DC generate a drop capital
-\&.HTML pass an html raw request to the
- device driver
-\&.CDS code example begin
-\&.CDE code example end
-.fi
-.PP
-Output of the
-.BR pic ,
-.BR eqn ,
-.BR refer ,
-and
-.B tbl
-preprocessors is acceptable as input.
-.
-.
-.SH REQUESTS
-.TP
-.B .JOBNAME filename
-Split output into multiple HTML files.
-A file is split whenever a .SH or .NH\ 1 is encountered.
-Its argument is the file stem name for future output files.
-This option is equivalent to
-.BR \%grohtml 's
-.B \-j
-option.
-.TP
-.B .HX n
-Specify the cut off depth when generating links from section headings.
-For example, a parameter of\~2 would cause
-.B \%grohtml
-to generate a list of links for
-.B .NH\ 1
-and
-.B .NH\ 2
-but not for
-.BR .NH\ 3 .
-Whereas
-.RS
-.IP
-.nf
-.B .HX 0
-.fi
-.RE
-.IP
-will tell
-.B \%grohtml
-that no heading links should be created at all.
-Another method for turning automatic headings off is by issuing the
-the command line switch
-.B \-P\-l
-to
-.BR groff .
-.
-.TP
-.B .BCL foreground background active not-visited visited
-This macro takes five parameters: foreground, background, active hypertext
-link, hypertext link not yet visited, and visited hypertext link colour.
-.
-.TP
-.B .BGIMG imagefile
-the only parameter to this macro is the background image file.
-.
-.TP
-.B .URL url [description] [after]
-generates
-.TAG URL
-a URL using either one, two or three arguments.
-The first parameter is the actual URL, the second is the name of the link,
-and the third is optional stuff to be printed immediately afterwards.
-If
-.B description
-and
-.B after
-are absent then the
-.B url
-becomes the anchor text.
-Hyphenation is disabled while printing the actual URL;
-explicit breakpoints
-should be inserted with the
-.B \[rs]:
-escape.
-Here is how to encode
-.URL http://\:foo.\:org/ "foo" :
-.RS
-.IP
-.B .URL http://\[rs]:foo.\[rs]:org/ "foo" :
-.RE
-.IP
-If this is processed by a device other than
-.B \-Thtml
-it appears as:
-.RS
-.IP
-\m[blue]foo\m[] \[la]\f[C]http://foo.org\f[]\[ra]:
-.RE
-.IP
-The URL macro can be of any type; for example we can reference
-.URL pic.html "Eric Raymond's pic guide"
-by:
-.RS
-.IP
-.B .URL pic.html \[dq]Eric Raymond's pic guide\[dq]
-.RE
-.
-.TP
-.B .MTO address [description] [after]
-Generate an email html reference.
-The first argument is mandatory as the email address.
-The optional second argument is the text you see in your browser
-If an empty argument is given,
-.B address
-is used instead.
-An optional third argument is stuff printed immediately afterwards.
-Hyphenation is disabled while printing the actual email address.
-For example,
-.MTO joe@user.org "Joe User"
-was achieved by the following macro:
-.RS
-.IP
-.B .MTO joe@user.org \[dq]Joe User\[dq]
-.RE
-.IP
-Note that all the URLs actually are treated as consuming no textual space
-in groff.
-This could be considered as a bug since it causes some problems.
-To circumvent this,
-.B www.tmac
-inserts a zero-width character which expands to a harmless space (only if
-run with
-.BR \-Thtml ).
-.
-.TP
-.B .FTP url [description] [after]
-indicates that data can be obtained via ftp.
-The first argument is the url and the second is the browser text.
-A third argument, similar to the macros above, is intended for stuff printed
-immediately afterwards.
-The second and the third parameter are optional.
-Hyphenation is disabled while printing the actual URL.
-As an example, here the location of the
-.FTP ftp://\:ftp.gnu.org/ "GNU ftp server" .
-The macro example above was specified by:
-.RS
-.IP
-.B .FTP ftp://\[rs]:ftp.gnu.org/ \[dq]GNU ftp server\[dq] .
-.RE
-.
-.TP
-.B .TAG name
-Generates an html name tag from its argument.
-This can then be referenced using the
-.URL #URL URL
-macro.
-As you can see, you must precede the tag name with
-.B #
-since it is a local reference.
-This link was achieved via placing a TAG in the URL description above;
-the source looks like this:
-.RS
-.IP
-.nf
-.ft B
-\&.TP
-\&.B URL
-generates
-\&.TAG URL
-a URL using either two or three arguments.
-\&.\|.\|.
-.fi
-.ft P
-.RE
-.
-.TP
-.B .IMG [-R|-L|-C] filename [width] [height]
-Include a picture into the document.
-The first argument is the horizontal location: right, left, or center
-.RB ( \-R ,
-.BR \-L ,
-or
-.BR \-C ).
-Alignment is centered by default (-C).
-The second argument is the filename.
-The optional third and fourth arguments are the width and height.
-If the width is absent it defaults to 1\~inch.
-If the height is absent it defaults to the width.
-This maps onto an html img tag.
-If you are including a png image then it is advisable to use the
-.B PIMG
-macro.
-.
-.TP
-.B .PIMG [-R|-L|-C] filename [width [height]]
-Include an image in PNG format.
-This macro takes exactly the same parameters as the
-.B IMG
-macro; it has the advantage of working with postscript and html devices
-also since it can automatically convert the image into the EPS format,
-using the following programs
-of the
-.B netpbm
-package:
-.BR pngtopnm ,
-.BR pnmcrop ,
-and
-.BR pnmtops .
-If the document isn't processed with
-.B \-Thtml
-it is necessary to use the
-.B \-U
-option of groff.
-.
-.TP
-.B .MPIMG [-R|-L] [-G gap] filename [width [height]]
-Place a PNG image on the margin and wrap text around it.
-The first parameters are optional.
-The alignment: left or right
-.RB ( \-L
-or
-.BR \-R )
-specifies the margin where the picture is placed at.
-The default alignment is left
-.RB ( -L ).
-Optionally,
-.BI \-G \~gap
-can be used to arrange a gap between the picture
-and the text that wraps around it.
-The default gap width is zero.
-.br
-The first non-optional argument is the filename.
-The optional following arguments are the width and height.
-If the width is absent it defaults to 1\~inch.
-If the height is absent it defaults to the width.
-Example:
-.RS
-.IP
-.nf
-.ft B
-\&.MPIMG -L -G 2c foo.png 3c 1.5c
-.ft P
-.fi
-.RE
-.IP
-The height and width may also be given as percentages. The PostScript
-device calculates the width from the
-.B .l
-register and the height from the
-.B .p
-register. For example:
-.RS
-.IP
-.nf
-.ft B
-\&.MPIMG -L -G 2c foo.png 15%
-.ft P
-.fi
-.RE
-.
-.TP
-.B .HnS n
-Begin heading.
-The numeric heading level
-.I n
-is specified by the first parameter.
-Use this macro if your headings contain URL, FTP or MTO macros.
-Example:
-.RS
-.IP
-.nf
-.ft B
-\&.HnS 1
-\&.HR
-GNU Troff
-\&.URL http://groff.ffii.org (Groff)
-\&\(em a
-\&.URL http://www.gnu.org/ GNU
-\&project.
-\&Hosted by
-\&.URL http://ffii.org/ FFII .
-\&.HR
-\&.HnE
-.ft P
-.fi
-.RE
-.IP
-In this case you might wish to
-disable automatic links to headings.
-This can be done via
-.B \-P\-l
-from the command line.
-.\" or by using a call to `.HX 0'.
-
-.
-.TP
-.B .HnE
-End heading.
-.
-.TP
-.B .LK
-.TAG LK
-Force \%grohtml to place the automatically generated links at this position.
-If this manual page has been processed with
-.B \-Thtml
-those links can be seen right here.
-.
-.LK
-.
-.TP
-.B .HR
-Generate a full-width horizontal rule for
-.BR \-Thtml .
-No effect for all other devices.
-.
-.TP
-.B .NHR
-Suppress generation of the top and bottom rules which \%grohtml emits
-by default.
-.
-.TP
-.B .HTL
-Generate an HTML title only.
-This differs from the
-.B TL
-macro of the
-.B ms
-macro package which generates both an HTML title and an <H1> heading.
-Use it to provide an HTML title as search engine fodder but a graphic title
-in the document.
-The macro terminates when a space or break is seen (.sp, .br).
-.
-.TP
-.B .HEAD
-Add arbitrary HTML data to the <head> block.
-Ignored if not processed with
-.BR \-Thtml .
-Example:
-.RS
-.IP
-.nf
-.B ".HEAD" "\[dq]<link \[rs]"
-.B " rel=\[dq]\[dq]icon\[dq]\[dq] \[rs]"
-.B " type=\[dq]\[dq]image/png\[dq]\[dq] \[rs]"
-.B " href=\[dq]\[dq]http://foo.org//bar.png\[dq]\[dq]/>\[dq]"
-.fi
-.ft P
-.RE
-.
-.TP
-.B .HTML
-All text after this macro is treated as raw html.
-If the document is processed without
-.B \-Thtml
-then the macro is ignored.
-Internally, this macro is used as a building block for other higher-level
-macros.
-.IP
-For example, the
-.B BGIMG
-macro is defined as
-.RS
-.IP
-.nf
-.ft B
-\&.de BGIMG
-\&. HTML <body background=\[rs]$1>
-\&..
-.ft P
-.fi
-.RE
-.
-.TP
-.B .DC l text [color]
-Produce a drop capital.
-The first parameter is the letter to be dropped and enlarged, the second
-parameter
-.B text
-is the ajoining text whose height the first letter should not exceed.
-The optional third parameter is the color of the dropped letter.
-It defaults to black.
-.
-.TP
-.B ".CDS"
-Start displaying a code section in constant width font.
-.
-.TP
-.B ".CDE"
-End code display
-.
-.SH SECTION HEADING LINKS
-By default
-.B \%grohtml
-generates links to all section headings and places these at the top of the
-html document. (See
-.URL #LK LINKS
-for details of how to switch this off or alter the position).
-.
-.
-.SH LIMITATIONS OF GROHTML
-.LP
-.B tbl
-information is currently rendered as a PNG image.
-.
-.
-.SH FILES
-@MACRODIR@/www.tmac
-.
-.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.BR \%grohtml (@MAN1EXT@),
-.BR netpbm (1)
-.
-.
-.SH AUTHOR
-.B \%grohtml
-was written by
-.MTO gaius@glam.ac.uk "Gaius Mulley"
-.
-.
-.SH BUGS
-Report bugs to the
-.MTO bug-groff@\:gnu.org "Groff Bug Mailing List" .
-Include a complete, self-contained example that will allow the bug to be
-reproduced, and say which version of groff you are using.
-.
-.cp \n[groff_www_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/tmac/html-end.tmac b/contrib/groff/tmac/html-end.tmac
deleted file mode 100644
index 0199d201988d..000000000000
--- a/contrib/groff/tmac/html-end.tmac
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" html-end.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.\" turn off all headers and footers for ms, me, and mm macro sets
-.if d EF .EF ''''
-.if d EH .EH ''''
-.if d OF .OF ''''
-.if d OH .OH ''''
-.if d ef .ef ''''
-.if d of .of ''''
-.if d oh .oh ''''
-.if d eh .eh ''''
-.tl ''''
-.
-.\" tell grohtml some default parameter values
-.pl 99999i
-.po 0
-.ll \n[.l]u
-.ta \n[.tabs]
-.
-.cp \n(_C
-.
-.\" end of file, make sure this is the last line
diff --git a/contrib/groff/tmac/html.tmac b/contrib/groff/tmac/html.tmac
deleted file mode 100644
index 9289f82ecc9e..000000000000
--- a/contrib/groff/tmac/html.tmac
+++ /dev/null
@@ -1,546 +0,0 @@
-.\" html.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.nroff
-.
-.ftr CW CR
-.ftr C CR
-.ftr CO CI
-.ftr CX CBI
-.ftr H HR
-.ftr HO HI
-.ftr HX HBI
-.ftr NX NBI
-.
-.fchar \[fi] fi
-.fchar \[fl] fl
-.fchar \[ff] ff
-.fchar \[Fi] ffi
-.fchar \[Fl] ffl
-.
-.\"
-.\" remove hyphenation
-.\"
-.nh
-.nr HY 0
-.
-.de hy
-..
-.de nh
-..
-.
-.\" avoid line breaks after hyphen-like characters.
-.cflags 0 -\[hy]\[em]\[en]\[shc]
-.
-.\" Now set any characters defined in devps/S but not in devhtml to nul --
-.\" these are generated by eqn but not used by grohtml. grops generated
-.\" images during the alternative pass.
-.if !c\[radicalex] .tr \[radicalex]
-.if !c\[arrowverttp] .tr \[arrowverttp]
-.if !c\[arrowvertbt] .tr \[arrowvertbt]
-.if !c\[arrowvertex] .tr \[arrowvertex]
-.if !c\[barex] .tr \[barex]
-.if !c\[sqrtex] .tr \[sqrtex]
-.
-.\" now for the color definitions
-.\"
-.\" html-4.0 colors
-.\"
-.defcolor white rgb #ffffff
-.defcolor fuchsia rgb #ff00ff
-.
-.\" these colors are compliant with html-3.0 and above
-.defcolor aliceblue rgb #eff7ff
-.defcolor antiquewhite rgb #f9e8d2
-.defcolor antiquewhite1 rgb #feedd6
-.defcolor antiquewhite2 rgb #ebdbc5
-.defcolor antiquewhite3 rgb #c8b9a6
-.defcolor antiquewhite4 rgb #817468
-.defcolor aquamarine rgb #43b7ba
-.defcolor aquamarine1 rgb #87fdce
-.defcolor aquamarine2 rgb #7deabe
-.defcolor aquamarine3 rgb #69c69f
-.defcolor aquamarine4 rgb #417c64
-.defcolor azure rgb #efffff
-.defcolor azure2 rgb #deecec
-.defcolor azure3 rgb #bcc7c7
-.defcolor azure4 rgb #7a7d7d
-.defcolor beige rgb #f5f3d7
-.defcolor bisque rgb #fde0bc
-.defcolor bisque2 rgb #ead0ae
-.defcolor bisque3 rgb #c7af92
-.defcolor bisque4 rgb #816e59
-.defcolor black rgb #000000
-.defcolor blanchedalmond rgb #fee8c6
-.defcolor blue rgb #0000ff
-.defcolor blue1 rgb #1535ff
-.defcolor blue2 rgb #1531ec
-.defcolor blue3 rgb #1528c7
-.defcolor blue4 rgb #151b7e
-.defcolor blueviolet rgb #7931df
-.defcolor brown rgb #980517
-.defcolor brown1 rgb #f63526
-.defcolor brown2 rgb #e42d17
-.defcolor brown3 rgb #c22217
-.defcolor burlywood1 rgb #fcce8e
-.defcolor burlywood2 rgb #eabe83
-.defcolor burlywood3 rgb #c6a06d
-.defcolor burlywood4 rgb #806341
-.defcolor cadetblue rgb #578693
-.defcolor cadetblue1 rgb #99f3ff
-.defcolor cadetblue2 rgb #8ee2ec
-.defcolor cadetblue3 rgb #77bfc7
-.defcolor cadetblue4 rgb #4c787e
-.defcolor chartreuse rgb #8afb17
-.defcolor chartreuse2 rgb #7fe817
-.defcolor chartreuse3 rgb #6cc417
-.defcolor chartreuse4 rgb #437c17
-.defcolor chocolate rgb #c85a17
-.defcolor coral rgb #f76541
-.defcolor coral2 rgb #e55b3c
-.defcolor coral3 rgb #c34a2c
-.defcolor coral4 rgb #7e2817
-.defcolor cornflowerblue rgb #151b8d
-.defcolor cornsilk rgb #fff7d7
-.defcolor cornsilk2 rgb #ece5c6
-.defcolor cornsilk3 rgb #c8c2a7
-.defcolor cornsilk4 rgb #817a68
-.defcolor cyan rgb #00ffff
-.defcolor cyan1 rgb #57feff
-.defcolor cyan2 rgb #50ebec
-.defcolor cyan3 rgb #46c7c7
-.defcolor cyan4 rgb #307d7e
-.defcolor darkgoldenrod rgb #af7817
-.defcolor darkgoldenrod1 rgb #fbb117
-.defcolor darkgoldenrod2 rgb #e8a317
-.defcolor darkgoldenrod3 rgb #c58917
-.defcolor darkgoldenrod4 rgb #7f5217
-.defcolor darkgreen rgb #254117
-.defcolor darkkhaki rgb #b7ad59
-.defcolor darkolivegreen rgb #4a4117
-.defcolor darkolivegreen1 rgb #ccfb5d
-.defcolor darkolivegreen2 rgb #bce954
-.defcolor darkolivegreen3 rgb #a0c544
-.defcolor darkolivegreen4 rgb #667c26
-.defcolor darkorange rgb #f88017
-.defcolor darkorange1 rgb #f87217
-.defcolor darkorange2 rgb #e56717
-.defcolor darkorange3 rgb #c35617
-.defcolor darkorange4 rgb #7e3117
-.defcolor darkorchid rgb #7d1b7e
-.defcolor darkorchid1 rgb #b041ff
-.defcolor darkorchid2 rgb #a23bec
-.defcolor darkorchid3 rgb #8b31c7
-.defcolor darkorchid4 rgb #571b7e
-.defcolor darksalmon rgb #e18b6b
-.defcolor darkseagreen rgb #8bb381
-.defcolor darkseagreen1 rgb #c3fdb8
-.defcolor darkseagreen2 rgb #b5eaaa
-.defcolor darkseagreen3 rgb #99c68e
-.defcolor darkseagreen4 rgb #617c58
-.defcolor darkslateblue rgb #2b3856
-.defcolor darkslategray rgb #25383c
-.defcolor darkslategray1 rgb #9afeff
-.defcolor darkslategray2 rgb #8eebec
-.defcolor darkslategray3 rgb #78c7c7
-.defcolor darkslategray4 rgb #4c7d7e
-.defcolor darkturquoise rgb #3b9c9c
-.defcolor darkviolet rgb #842dce
-.defcolor deeppink rgb #f52887
-.defcolor deeppink2 rgb #e4287c
-.defcolor deeppink3 rgb #c12267
-.defcolor deeppink4 rgb #7d053f
-.defcolor deepskyblue rgb #3bb9ff
-.defcolor deepskyblue2 rgb #38acec
-.defcolor deepskyblue3 rgb #3090c7
-.defcolor deepskyblue4 rgb #25587e
-.defcolor dimgray rgb #463e41
-.defcolor dodgerblue rgb #1589ff
-.defcolor dodgerblue2 rgb #157dec
-.defcolor dodgerblue3 rgb #1569c7
-.defcolor dodgerblue4 rgb #153e7e
-.defcolor firebrick rgb #800517
-.defcolor firebrick1 rgb #f62817
-.defcolor firebrick2 rgb #e42217
-.defcolor firebrick3 rgb #c11b17
-.defcolor floralwhite rgb #fff9ee
-.defcolor forestgreen rgb #4e9258
-.defcolor gainsboro rgb #d8d9d7
-.defcolor ghostwhite rgb #f7f7ff
-.defcolor gold rgb #d4a017
-.defcolor gold1 rgb #fdd017
-.defcolor gold2 rgb #eac117
-.defcolor gold3 rgb #c7a317
-.defcolor gold4 rgb #806517
-.defcolor goldenrod rgb #edda74
-.defcolor goldenrod1 rgb #fbb917
-.defcolor goldenrod2 rgb #e9ab17
-.defcolor goldenrod3 rgb #c68e17
-.defcolor goldenrod4 rgb #805817
-.defcolor gray rgb #736f6e
-.defcolor gray0 rgb #150517
-.defcolor gray100 rgb #ffffff
-.defcolor gray18 rgb #250517
-.defcolor gray21 rgb #2b1b17
-.defcolor gray23 rgb #302217
-.defcolor gray24 rgb #302226
-.defcolor gray25 rgb #342826
-.defcolor gray26 rgb #34282c
-.defcolor gray27 rgb #382d2c
-.defcolor gray28 rgb #3b3131
-.defcolor gray29 rgb #3e3535
-.defcolor gray30 rgb #413839
-.defcolor gray31 rgb #41383c
-.defcolor gray32 rgb #463e3f
-.defcolor gray34 rgb #4a4344
-.defcolor gray35 rgb #4c4646
-.defcolor gray36 rgb #4e4848
-.defcolor gray37 rgb #504a4b
-.defcolor gray38 rgb #544e4f
-.defcolor gray39 rgb #565051
-.defcolor gray40 rgb #595454
-.defcolor gray41 rgb #5c5858
-.defcolor gray42 rgb #5f5a59
-.defcolor gray43 rgb #625d5d
-.defcolor gray44 rgb #646060
-.defcolor gray45 rgb #666362
-.defcolor gray46 rgb #696565
-.defcolor gray47 rgb #6d6968
-.defcolor gray48 rgb #6e6a6b
-.defcolor gray49 rgb #726e6d
-.defcolor gray50 rgb #747170
-.defcolor gray51 rgb #787473
-.defcolor gray52 rgb #7a7777
-.defcolor gray53 rgb #7c7979
-.defcolor gray54 rgb #807d7c
-.defcolor gray55 rgb #82807e
-.defcolor gray56 rgb #858381
-.defcolor gray57 rgb #878583
-.defcolor gray58 rgb #8b8987
-.defcolor gray59 rgb #8d8b89
-.defcolor gray60 rgb #8f8e8d
-.defcolor gray61 rgb #939190
-.defcolor gray62 rgb #959492
-.defcolor gray63 rgb #999795
-.defcolor gray64 rgb #9a9998
-.defcolor gray65 rgb #9e9c9b
-.defcolor gray66 rgb #a09f9d
-.defcolor gray67 rgb #a3a2a0
-.defcolor gray68 rgb #a5a4a3
-.defcolor gray69 rgb #a9a8a6
-.defcolor gray70 rgb #acaba9
-.defcolor gray71 rgb #aeadac
-.defcolor gray72 rgb #b1b1af
-.defcolor gray73 rgb #b3b3b1
-.defcolor gray74 rgb #b7b6b4
-.defcolor gray75 rgb #b9b8b6
-.defcolor gray76 rgb #bcbbba
-.defcolor gray77 rgb #bebebc
-.defcolor gray78 rgb #c1c1bf
-.defcolor gray79 rgb #c3c4c2
-.defcolor gray80 rgb #c7c7c5
-.defcolor gray81 rgb #cacac9
-.defcolor gray82 rgb #cccccb
-.defcolor gray83 rgb #d0cfcf
-.defcolor gray84 rgb #d2d2d1
-.defcolor gray85 rgb #d5d5d4
-.defcolor gray86 rgb #d7d7d7
-.defcolor gray87 rgb #dbdbd9
-.defcolor gray88 rgb #dddddc
-.defcolor gray89 rgb #e0e0e0
-.defcolor gray90 rgb #e2e3e1
-.defcolor gray91 rgb #e5e6e4
-.defcolor gray92 rgb #e8e9e8
-.defcolor gray93 rgb #ebebea
-.defcolor gray94 rgb #eeeeee
-.defcolor gray95 rgb #f0f1f0
-.defcolor gray96 rgb #f4f4f3
-.defcolor gray97 rgb #f6f6f5
-.defcolor gray98 rgb #f9f9fa
-.defcolor gray99 rgb #fbfbfb
-.defcolor green rgb #00ff00
-.defcolor green1 rgb #5ffb17
-.defcolor green2 rgb #59e817
-.defcolor green3 rgb #4cc417
-.defcolor green4 rgb #347c17
-.defcolor greenyellow rgb #b1fb17
-.defcolor honeydew rgb #f0feee
-.defcolor honeydew2 rgb #deebdc
-.defcolor honeydew3 rgb #bcc7b9
-.defcolor honeydew4 rgb #7a7d74
-.defcolor hotpink rgb #f660ab
-.defcolor hotpink1 rgb #f665ab
-.defcolor hotpink2 rgb #e45e9d
-.defcolor hotpink3 rgb #c25283
-.defcolor hotpink4 rgb #7d2252
-.defcolor indianred rgb #5e2217
-.defcolor indianred1 rgb #f75d59
-.defcolor indianred2 rgb #e55451
-.defcolor indianred3 rgb #c24641
-.defcolor indianred4 rgb #7e2217
-.defcolor ivory rgb #ffffee
-.defcolor ivory2 rgb #ececdc
-.defcolor ivory3 rgb #c9c7b9
-.defcolor ivory4 rgb #817d74
-.defcolor khaki rgb #ada96e
-.defcolor khaki1 rgb #fff380
-.defcolor khaki2 rgb #ede275
-.defcolor khaki3 rgb #c9be62
-.defcolor khaki4 rgb #827839
-.defcolor lavender rgb #e3e4fa
-.defcolor lavenderblush rgb #fdeef4
-.defcolor lavenderblush2 rgb #ebdde2
-.defcolor lavenderblush3 rgb #c8bbbe
-.defcolor lavenderblush4 rgb #817679
-.defcolor lawngreen rgb #87f717
-.defcolor lemonchiffon rgb #fff8c6
-.defcolor lemonchiffon2 rgb #ece5b6
-.defcolor lemonchiffon3 rgb #c9c299
-.defcolor lemonchiffon4 rgb #827b60
-.defcolor lightblue rgb #addfff
-.defcolor lightblue1 rgb #bdedff
-.defcolor lightblue2 rgb #afdcec
-.defcolor lightblue3 rgb #95b9c7
-.defcolor lightblue4 rgb #5e767e
-.defcolor lightcoral rgb #e77471
-.defcolor lightcyan rgb #e0ffff
-.defcolor lightcyan2 rgb #cfecec
-.defcolor lightcyan3 rgb #afc7c7
-.defcolor lightcyan4 rgb #717d7d
-.defcolor lightgoldenrod rgb #ecd872
-.defcolor lightgoldenrod1 rgb #ffe87c
-.defcolor lightgoldenrod2 rgb #ecd672
-.defcolor lightgoldenrod3 rgb #c8b560
-.defcolor lightgoldenrod4 rgb #817339
-.defcolor lightgoldenrodyellow rgb #faf8cc
-.defcolor lightpink rgb #faafba
-.defcolor lightpink1 rgb #f9a7b0
-.defcolor lightpink2 rgb #e799a3
-.defcolor lightpink3 rgb #c48189
-.defcolor lightpink4 rgb #7f4e52
-.defcolor lightsalmon rgb #f9966b
-.defcolor lightsalmon2 rgb #e78a61
-.defcolor lightsalmon3 rgb #c47451
-.defcolor lightsalmon4 rgb #7f462c
-.defcolor lightseagreen rgb #3ea99f
-.defcolor lightskyblue rgb #82cafa
-.defcolor lightskyblue2 rgb #a0cfec
-.defcolor lightskyblue3 rgb #87afc7
-.defcolor lightskyblue4 rgb #566d7e
-.defcolor lightslateblue rgb #736aff
-.defcolor lightslategray rgb #6d7b8d
-.defcolor lightsteelblue rgb #728fce
-.defcolor lightsteelblue1 rgb #c6deff
-.defcolor lightsteelblue2 rgb #b7ceec
-.defcolor lightsteelblue3 rgb #9aadc7
-.defcolor lightsteelblue4 rgb #646d7e
-.defcolor lightyellow rgb #fffedc
-.defcolor lightyellow2 rgb #edebcb
-.defcolor lightyellow3 rgb #c9c7aa
-.defcolor lightyellow4 rgb #827d6b
-.defcolor limegreen rgb #41a317
-.defcolor linen rgb #f9eee2
-.defcolor magenta rgb #ff00ff
-.defcolor magenta1 rgb #f43eff
-.defcolor magenta2 rgb #e238ec
-.defcolor magenta3 rgb #c031c7
-.defcolor maroon rgb #810541
-.defcolor maroon1 rgb #f535aa
-.defcolor maroon2 rgb #e3319d
-.defcolor maroon3 rgb #c12283
-.defcolor maroon4 rgb #7d0552
-.defcolor mediumaquamarine rgb #348781
-.defcolor mediumblue rgb #152dc6
-.defcolor mediumforestgreen rgb #347235
-.defcolor mediumgoldenrod rgb #ccb954
-.defcolor mediumorchid rgb #b048b5
-.defcolor mediumorchid1 rgb #d462ff
-.defcolor mediumorchid2 rgb #c45aec
-.defcolor mediumorchid3 rgb #a74ac7
-.defcolor mediumorchid4 rgb #6a287e
-.defcolor mediumpurple rgb #8467d7
-.defcolor mediumpurple1 rgb #9e7bff
-.defcolor mediumpurple2 rgb #9172ec
-.defcolor mediumpurple3 rgb #7a5dc7
-.defcolor mediumpurple4 rgb #4e387e
-.defcolor mediumseagreen rgb #306754
-.defcolor mediumslateblue rgb #5e5a80
-.defcolor mediumspringgreen rgb #348017
-.defcolor mediumturquoise rgb #48cccd
-.defcolor mediumvioletred rgb #ca226b
-.defcolor midnightblue rgb #151b54
-.defcolor mintcream rgb #f5fff9
-.defcolor mistyrose rgb #fde1dd
-.defcolor mistyrose2 rgb #ead0cc
-.defcolor mistyrose3 rgb #c6afac
-.defcolor mistyrose4 rgb #806f6c
-.defcolor moccasin rgb #fde0ac
-.defcolor navajowhite rgb #fddaa3
-.defcolor navajowhite2 rgb #eac995
-.defcolor navajowhite3 rgb #c7aa7d
-.defcolor navajowhite4 rgb #806a4b
-.defcolor navy rgb #150567
-.defcolor oldlace rgb #fcf3e2
-.defcolor olivedrab rgb #658017
-.defcolor olivedrab1 rgb #c3fb17
-.defcolor olivedrab2 rgb #b5e917
-.defcolor olivedrab3 rgb #99c517
-.defcolor olivedrab4 rgb #617c17
-.defcolor orange rgb #f87a17
-.defcolor orange1 rgb #fa9b17
-.defcolor orange2 rgb #e78e17
-.defcolor orange3 rgb #c57717
-.defcolor orange4 rgb #7f4817
-.defcolor orangered rgb #f63817
-.defcolor orangered2 rgb #e43117
-.defcolor orangered3 rgb #c22817
-.defcolor orangered4 rgb #7e0517
-.defcolor orchid rgb #e57ded
-.defcolor orchid1 rgb #f67dfa
-.defcolor orchid2 rgb #e473e7
-.defcolor orchid3 rgb #c160c3
-.defcolor orchid4 rgb #7d387c
-.defcolor palegoldenrod rgb #ede49e
-.defcolor palegreen rgb #79d867
-.defcolor palegreen1 rgb #a0fc8d
-.defcolor palegreen2 rgb #94e981
-.defcolor palegreen3 rgb #7dc56c
-.defcolor palegreen4 rgb #4e7c41
-.defcolor paleturquoise rgb #aeebec
-.defcolor paleturquoise1 rgb #bcfeff
-.defcolor paleturquoise2 rgb #adebec
-.defcolor paleturquoise3 rgb #92c7c7
-.defcolor paleturquoise4 rgb #5e7d7e
-.defcolor palevioletred rgb #d16587
-.defcolor palevioletred1 rgb #f778a1
-.defcolor palevioletred2 rgb #e56e94
-.defcolor palevioletred3 rgb #c25a7c
-.defcolor palevioletred4 rgb #7e354d
-.defcolor papayawhip rgb #feeccf
-.defcolor peachpuff rgb #fcd5b0
-.defcolor peachpuff2 rgb #eac5a3
-.defcolor peachpuff3 rgb #c6a688
-.defcolor peachpuff4 rgb #806752
-.defcolor peru rgb #c57726
-.defcolor pink rgb #faafbe
-.defcolor pink2 rgb #e7a1b0
-.defcolor pink3 rgb #c48793
-.defcolor pink4 rgb #7f525d
-.defcolor plum rgb #b93b8f
-.defcolor plum1 rgb #f9b7ff
-.defcolor plum2 rgb #e6a9ec
-.defcolor plum3 rgb #c38ec7
-.defcolor plum4 rgb #7e587e
-.defcolor powderblue rgb #addce3
-.defcolor purple rgb #8e35ef
-.defcolor purple1 rgb #893bff
-.defcolor purple2 rgb #7f38ec
-.defcolor purple3 rgb #6c2dc7
-.defcolor purple4 rgb #461b7e
-.defcolor red rgb #ff0000
-.defcolor red1 rgb #f62217
-.defcolor red2 rgb #e41b17
-.defcolor rosybrown rgb #b38481
-.defcolor rosybrown1 rgb #fbbbb9
-.defcolor rosybrown2 rgb #e8adaa
-.defcolor rosybrown3 rgb #c5908e
-.defcolor rosybrown4 rgb #7f5a58
-.defcolor royalblue rgb #2b60de
-.defcolor royalblue1 rgb #306eff
-.defcolor royalblue2 rgb #2b65ec
-.defcolor royalblue3 rgb #2554c7
-.defcolor royalblue4 rgb #15317e
-.defcolor salmon1 rgb #f88158
-.defcolor salmon2 rgb #e67451
-.defcolor salmon3 rgb #c36241
-.defcolor salmon4 rgb #7e3817
-.defcolor sandybrown rgb #ee9a4d
-.defcolor seagreen rgb #4e8975
-.defcolor seagreen1 rgb #6afb92
-.defcolor seagreen2 rgb #64e986
-.defcolor seagreen3 rgb #54c571
-.defcolor seagreen4 rgb #387c44
-.defcolor seashell rgb #fef3eb
-.defcolor seashell2 rgb #ebe2d9
-.defcolor seashell3 rgb #c8bfb6
-.defcolor seashell4 rgb #817873
-.defcolor sienna rgb #8a4117
-.defcolor sienna1 rgb #f87431
-.defcolor sienna2 rgb #e66c2c
-.defcolor sienna3 rgb #c35817
-.defcolor sienna4 rgb #7e3517
-.defcolor skyblue rgb #6698ff
-.defcolor skyblue1 rgb #82caff
-.defcolor skyblue2 rgb #79baec
-.defcolor skyblue3 rgb #659ec7
-.defcolor skyblue4 rgb #41627e
-.defcolor slateblue rgb #737ca1
-.defcolor slateblue1 rgb #7369ff
-.defcolor slateblue2 rgb #6960ec
-.defcolor slateblue3 rgb #574ec7
-.defcolor slateblue4 rgb #342d7e
-.defcolor slategray rgb #657383
-.defcolor slategray1 rgb #c2dfff
-.defcolor slategray2 rgb #b4cfec
-.defcolor slategray3 rgb #98afc7
-.defcolor slategray4 rgb #616d7e
-.defcolor snow rgb #fff9fa
-.defcolor snow2 rgb #ece7e6
-.defcolor snow3 rgb #c8c4c2
-.defcolor snow4 rgb #817c7b
-.defcolor springgreen rgb #4aa02c
-.defcolor springgreen1 rgb #5efb6e
-.defcolor springgreen2 rgb #57e964
-.defcolor springgreen3 rgb #4cc552
-.defcolor springgreen4 rgb #347c2c
-.defcolor steelblue rgb #4863a0
-.defcolor steelblue1 rgb #5cb3ff
-.defcolor steelblue2 rgb #56a5ec
-.defcolor steelblue3 rgb #488ac7
-.defcolor steelblue4 rgb #2b547e
-.defcolor tan rgb #d8af79
-.defcolor tan1 rgb #fa9b3c
-.defcolor tan2 rgb #e78e35
-.defcolor thistle rgb #d2b9d3
-.defcolor thistle1 rgb #fcdfff
-.defcolor thistle2 rgb #e9cfec
-.defcolor thistle3 rgb #c6aec7
-.defcolor thistle4 rgb #806d7e
-.defcolor tomato rgb #f75431
-.defcolor tomato2 rgb #e54c2c
-.defcolor tomato3 rgb #c23e17
-.defcolor turquoise rgb #43c6db
-.defcolor turquoise1 rgb #52f3ff
-.defcolor turquoise2 rgb #4ee2ec
-.defcolor turquoise3 rgb #43bfc7
-.defcolor turquoise4 rgb #30787e
-.defcolor violet rgb #8d38c9
-.defcolor violetred rgb #e9358a
-.defcolor violetred1 rgb #f6358a
-.defcolor violetred2 rgb #e4317f
-.defcolor violetred3 rgb #c12869
-.defcolor violetred4 rgb #7d0541
-.defcolor wheat rgb #f3daa9
-.defcolor wheat1 rgb #fee4b1
-.defcolor wheat2 rgb #ebd3a3
-.defcolor wheat3 rgb #c8b189
-.defcolor wheat4 rgb #816f54
-.defcolor yellow rgb #ffff00
-.defcolor yellow1 rgb #fffc17
-.defcolor yellowgreen rgb #52d017
-.
-.cp \n(_C
-.
-.if !\n(_C \{\
-. mso pspic.tmac
-. mso www.tmac
-.\}
-.
-.do ie '\[char97]'a' \
-. do mso latin1.tmac
-.el \
-. do mso cp1047.tmac
-.
-.\" end of file, make sure this is the last line
diff --git a/contrib/groff/tmac/hyphen.us b/contrib/groff/tmac/hyphen.us
deleted file mode 100644
index 86e113cf4c2a..000000000000
--- a/contrib/groff/tmac/hyphen.us
+++ /dev/null
@@ -1,4469 +0,0 @@
-% The Plain TeX hyphenation tables [NOT TO BE CHANGED IN ANY WAY!]
-% Unlimited copying and redistribution of this file are permitted as long
-% as this file is not modified. Modifications are permitted, but only if
-% the resulting file is not named hyphen.tex.
-\patterns{ % just type <return> if you're not using INITEX
-.ach4
-.ad4der
-.af1t
-.al3t
-.am5at
-.an5c
-.ang4
-.ani5m
-.ant4
-.an3te
-.anti5s
-.ar5s
-.ar4tie
-.ar4ty
-.as3c
-.as1p
-.as1s
-.aster5
-.atom5
-.au1d
-.av4i
-.awn4
-.ba4g
-.ba5na
-.bas4e
-.ber4
-.be5ra
-.be3sm
-.be5sto
-.bri2
-.but4ti
-.cam4pe
-.can5c
-.capa5b
-.car5ol
-.ca4t
-.ce4la
-.ch4
-.chill5i
-.ci2
-.cit5r
-.co3e
-.co4r
-.cor5ner
-.de4moi
-.de3o
-.de3ra
-.de3ri
-.des4c
-.dictio5
-.do4t
-.du4c
-.dumb5
-.earth5
-.eas3i
-.eb4
-.eer4
-.eg2
-.el5d
-.el3em
-.enam3
-.en3g
-.en3s
-.eq5ui5t
-.er4ri
-.es3
-.eu3
-.eye5
-.fes3
-.for5mer
-.ga2
-.ge2
-.gen3t4
-.ge5og
-.gi5a
-.gi4b
-.go4r
-.hand5i
-.han5k
-.he2
-.hero5i
-.hes3
-.het3
-.hi3b
-.hi3er
-.hon5ey
-.hon3o
-.hov5
-.id4l
-.idol3
-.im3m
-.im5pin
-.in1
-.in3ci
-.ine2
-.in2k
-.in3s
-.ir5r
-.is4i
-.ju3r
-.la4cy
-.la4m
-.lat5er
-.lath5
-.le2
-.leg5e
-.len4
-.lep5
-.lev1
-.li4g
-.lig5a
-.li2n
-.li3o
-.li4t
-.mag5a5
-.mal5o
-.man5a
-.mar5ti
-.me2
-.mer3c
-.me5ter
-.mis1
-.mist5i
-.mon3e
-.mo3ro
-.mu5ta
-.muta5b
-.ni4c
-.od2
-.odd5
-.of5te
-.or5ato
-.or3c
-.or1d
-.or3t
-.os3
-.os4tl
-.oth3
-.out3
-.ped5al
-.pe5te
-.pe5tit
-.pi4e
-.pio5n
-.pi2t
-.pre3m
-.ra4c
-.ran4t
-.ratio5na
-.ree2
-.re5mit
-.res2
-.re5stat
-.ri4g
-.rit5u
-.ro4q
-.ros5t
-.row5d
-.ru4d
-.sci3e
-.self5
-.sell5
-.se2n
-.se5rie
-.sh2
-.si2
-.sing4
-.st4
-.sta5bl
-.sy2
-.ta4
-.te4
-.ten5an
-.th2
-.ti2
-.til4
-.tim5o5
-.ting4
-.tin5k
-.ton4a
-.to4p
-.top5i
-.tou5s
-.trib5ut
-.un1a
-.un3ce
-.under5
-.un1e
-.un5k
-.un5o
-.un3u
-.up3
-.ure3
-.us5a
-.ven4de
-.ve5ra
-.wil5i
-.ye4
-4ab.
-a5bal
-a5ban
-abe2
-ab5erd
-abi5a
-ab5it5ab
-ab5lat
-ab5o5liz
-4abr
-ab5rog
-ab3ul
-a4car
-ac5ard
-ac5aro
-a5ceou
-ac1er
-a5chet
-4a2ci
-a3cie
-ac1in
-a3cio
-ac5rob
-act5if
-ac3ul
-ac4um
-a2d
-ad4din
-ad5er.
-2adi
-a3dia
-ad3ica
-adi4er
-a3dio
-a3dit
-a5diu
-ad4le
-ad3ow
-ad5ran
-ad4su
-4adu
-a3duc
-ad5um
-ae4r
-aeri4e
-a2f
-aff4
-a4gab
-aga4n
-ag5ell
-age4o
-4ageu
-ag1i
-4ag4l
-ag1n
-a2go
-3agog
-ag3oni
-a5guer
-ag5ul
-a4gy
-a3ha
-a3he
-ah4l
-a3ho
-ai2
-a5ia
-a3ic.
-ai5ly
-a4i4n
-ain5in
-ain5o
-ait5en
-a1j
-ak1en
-al5ab
-al3ad
-a4lar
-4aldi
-2ale
-al3end
-a4lenti
-a5le5o
-al1i
-al4ia.
-ali4e
-al5lev
-4allic
-4alm
-a5log.
-a4ly.
-4alys
-5a5lyst
-5alyt
-3alyz
-4ama
-am5ab
-am3ag
-ama5ra
-am5asc
-a4matis
-a4m5ato
-am5era
-am3ic
-am5if
-am5ily
-am1in
-ami4no
-a2mo
-a5mon
-amor5i
-amp5en
-a2n
-an3age
-3analy
-a3nar
-an3arc
-anar4i
-a3nati
-4and
-ande4s
-an3dis
-an1dl
-an4dow
-a5nee
-a3nen
-an5est.
-a3neu
-2ang
-ang5ie
-an1gl
-a4n1ic
-a3nies
-an3i3f
-an4ime
-a5nimi
-a5nine
-an3io
-a3nip
-an3ish
-an3it
-a3niu
-an4kli
-5anniz
-ano4
-an5ot
-anoth5
-an2sa
-an4sco
-an4sn
-an2sp
-ans3po
-an4st
-an4sur
-antal4
-an4tie
-4anto
-an2tr
-an4tw
-an3ua
-an3ul
-a5nur
-4ao
-apar4
-ap5at
-ap5ero
-a3pher
-4aphi
-a4pilla
-ap5illar
-ap3in
-ap3ita
-a3pitu
-a2pl
-apoc5
-ap5ola
-apor5i
-apos3t
-aps5es
-a3pu
-aque5
-2a2r
-ar3act
-a5rade
-ar5adis
-ar3al
-a5ramete
-aran4g
-ara3p
-ar4at
-a5ratio
-ar5ativ
-a5rau
-ar5av4
-araw4
-arbal4
-ar4chan
-ar5dine
-ar4dr
-ar5eas
-a3ree
-ar3ent
-a5ress
-ar4fi
-ar4fl
-ar1i
-ar5ial
-ar3ian
-a3riet
-ar4im
-ar5inat
-ar3io
-ar2iz
-ar2mi
-ar5o5d
-a5roni
-a3roo
-ar2p
-ar3q
-arre4
-ar4sa
-ar2sh
-4as.
-as4ab
-as3ant
-ashi4
-a5sia.
-a3sib
-a3sic
-5a5si4t
-ask3i
-as4l
-a4soc
-as5ph
-as4sh
-as3ten
-as1tr
-asur5a
-a2ta
-at3abl
-at5ac
-at3alo
-at5ap
-ate5c
-at5ech
-at3ego
-at3en.
-at3era
-ater5n
-a5terna
-at3est
-at5ev
-4ath
-ath5em
-a5then
-at4ho
-ath5om
-4ati.
-a5tia
-at5i5b
-at1ic
-at3if
-ation5ar
-at3itu
-a4tog
-a2tom
-at5omiz
-a4top
-a4tos
-a1tr
-at5rop
-at4sk
-at4tag
-at5te
-at4th
-a2tu
-at5ua
-at5ue
-at3ul
-at3ura
-a2ty
-au4b
-augh3
-au3gu
-au4l2
-aun5d
-au3r
-au5sib
-aut5en
-au1th
-a2va
-av3ag
-a5van
-ave4no
-av3era
-av5ern
-av5ery
-av1i
-avi4er
-av3ig
-av5oc
-a1vor
-3away
-aw3i
-aw4ly
-aws4
-ax4ic
-ax4id
-ay5al
-aye4
-ays4
-azi4er
-azz5i
-5ba.
-bad5ger
-ba4ge
-bal1a
-ban5dag
-ban4e
-ban3i
-barbi5
-bari4a
-bas4si
-1bat
-ba4z
-2b1b
-b2be
-b3ber
-bbi4na
-4b1d
-4be.
-beak4
-beat3
-4be2d
-be3da
-be3de
-be3di
-be3gi
-be5gu
-1bel
-be1li
-be3lo
-4be5m
-be5nig
-be5nu
-4bes4
-be3sp
-be5str
-3bet
-bet5iz
-be5tr
-be3tw
-be3w
-be5yo
-2bf
-4b3h
-bi2b
-bi4d
-3bie
-bi5en
-bi4er
-2b3if
-1bil
-bi3liz
-bina5r4
-bin4d
-bi5net
-bi3ogr
-bi5ou
-bi2t
-3bi3tio
-bi3tr
-3bit5ua
-b5itz
-b1j
-bk4
-b2l2
-blath5
-b4le.
-blen4
-5blesp
-b3lis
-b4lo
-blun4t
-4b1m
-4b3n
-bne5g
-3bod
-bod3i
-bo4e
-bol3ic
-bom4bi
-bon4a
-bon5at
-3boo
-5bor.
-4b1ora
-bor5d
-5bore
-5bori
-5bos4
-b5ota
-both5
-bo4to
-bound3
-4bp
-4brit
-broth3
-2b5s2
-bsor4
-2bt
-bt4l
-b4to
-b3tr
-buf4fer
-bu4ga
-bu3li
-bumi4
-bu4n
-bunt4i
-bu3re
-bus5ie
-buss4e
-5bust
-4buta
-3butio
-b5uto
-b1v
-4b5w
-5by.
-bys4
-1ca
-cab3in
-ca1bl
-cach4
-ca5den
-4cag4
-2c5ah
-ca3lat
-cal4la
-call5in
-4calo
-can5d
-can4e
-can4ic
-can5is
-can3iz
-can4ty
-cany4
-ca5per
-car5om
-cast5er
-cas5tig
-4casy
-ca4th
-4cativ
-cav5al
-c3c
-ccha5
-cci4a
-ccompa5
-ccon4
-ccou3t
-2ce.
-4ced.
-4ceden
-3cei
-5cel.
-3cell
-1cen
-3cenc
-2cen4e
-4ceni
-3cent
-3cep
-ce5ram
-4cesa
-3cessi
-ces5si5b
-ces5t
-cet4
-c5e4ta
-cew4
-2ch
-4ch.
-4ch3ab
-5chanic
-ch5a5nis
-che2
-cheap3
-4ched
-che5lo
-3chemi
-ch5ene
-ch3er.
-ch3ers
-4ch1in
-5chine.
-ch5iness
-5chini
-5chio
-3chit
-chi2z
-3cho2
-ch4ti
-1ci
-3cia
-ci2a5b
-cia5r
-ci5c
-4cier
-5cific.
-4cii
-ci4la
-3cili
-2cim
-2cin
-c4ina
-3cinat
-cin3em
-c1ing
-c5ing.
-5cino
-cion4
-4cipe
-ci3ph
-4cipic
-4cista
-4cisti
-2c1it
-cit3iz
-5ciz
-ck1
-ck3i
-1c4l4
-4clar
-c5laratio
-5clare
-cle4m
-4clic
-clim4
-cly4
-c5n
-1co
-co5ag
-coe2
-2cog
-co4gr
-coi4
-co3inc
-col5i
-5colo
-col3or
-com5er
-con4a
-c4one
-con3g
-con5t
-co3pa
-cop3ic
-co4pl
-4corb
-coro3n
-cos4e
-cov1
-cove4
-cow5a
-coz5e
-co5zi
-c1q
-cras5t
-5crat.
-5cratic
-cre3at
-5cred
-4c3reta
-cre4v
-cri2
-cri5f
-c4rin
-cris4
-5criti
-cro4pl
-crop5o
-cros4e
-cru4d
-4c3s2
-2c1t
-cta4b
-ct5ang
-c5tant
-c2te
-c3ter
-c4ticu
-ctim3i
-ctu4r
-c4tw
-cud5
-c4uf
-c4ui
-cu5ity
-5culi
-cul4tis
-3cultu
-cu2ma
-c3ume
-cu4mi
-3cun
-cu3pi
-cu5py
-cur5a4b
-cu5ria
-1cus
-cuss4i
-3c4ut
-cu4tie
-4c5utiv
-4cutr
-1cy
-cze4
-1d2a
-5da.
-2d3a4b
-dach4
-4daf
-2dag
-da2m2
-dan3g
-dard5
-dark5
-4dary
-3dat
-4dativ
-4dato
-5dav4
-dav5e
-5day
-d1b
-d5c
-d1d4
-2de.
-deaf5
-deb5it
-de4bon
-decan4
-de4cil
-de5com
-2d1ed
-4dee.
-de5if
-deli4e
-del5i5q
-de5lo
-d4em
-5dem.
-3demic
-dem5ic.
-de5mil
-de4mons
-demor5
-1den
-de4nar
-de3no
-denti5f
-de3nu
-de1p
-de3pa
-depi4
-de2pu
-d3eq
-d4erh
-5derm
-dern5iz
-der5s
-des2
-d2es.
-de1sc
-de2s5o
-des3ti
-de3str
-de4su
-de1t
-de2to
-de1v
-dev3il
-4dey
-4d1f
-d4ga
-d3ge4t
-dg1i
-d2gy
-d1h2
-5di.
-1d4i3a
-dia5b
-di4cam
-d4ice
-3dict
-3did
-5di3en
-d1if
-di3ge
-di4lato
-d1in
-1dina
-3dine.
-5dini
-di5niz
-1dio
-dio5g
-di4pl
-dir2
-di1re
-dirt5i
-dis1
-5disi
-d4is3t
-d2iti
-1di1v
-d1j
-d5k2
-4d5la
-3dle.
-3dled
-3dles.
-4dless
-2d3lo
-4d5lu
-2dly
-d1m
-4d1n4
-1do
-3do.
-do5de
-5doe
-2d5of
-d4og
-do4la
-doli4
-do5lor
-dom5iz
-do3nat
-doni4
-doo3d
-dop4p
-d4or
-3dos
-4d5out
-do4v
-3dox
-d1p
-1dr
-drag5on
-4drai
-dre4
-drea5r
-5dren
-dri4b
-dril4
-dro4p
-4drow
-5drupli
-4dry
-2d1s2
-ds4p
-d4sw
-d4sy
-d2th
-1du
-d1u1a
-du2c
-d1uca
-duc5er
-4duct.
-4ducts
-du5el
-du4g
-d3ule
-dum4be
-du4n
-4dup
-du4pe
-d1v
-d1w
-d2y
-5dyn
-dy4se
-dys5p
-e1a4b
-e3act
-ead1
-ead5ie
-ea4ge
-ea5ger
-ea4l
-eal5er
-eal3ou
-eam3er
-e5and
-ear3a
-ear4c
-ear5es
-ear4ic
-ear4il
-ear5k
-ear2t
-eart3e
-ea5sp
-e3ass
-east3
-ea2t
-eat5en
-eath3i
-e5atif
-e4a3tu
-ea2v
-eav3en
-eav5i
-eav5o
-2e1b
-e4bel.
-e4bels
-e4ben
-e4bit
-e3br
-e4cad
-ecan5c
-ecca5
-e1ce
-ec5essa
-ec2i
-e4cib
-ec5ificat
-ec5ifie
-ec5ify
-ec3im
-eci4t
-e5cite
-e4clam
-e4clus
-e2col
-e4comm
-e4compe
-e4conc
-e2cor
-ec3ora
-eco5ro
-e1cr
-e4crem
-ec4tan
-ec4te
-e1cu
-e4cul
-ec3ula
-2e2da
-4ed3d
-e4d1er
-ede4s
-4edi
-e3dia
-ed3ib
-ed3ica
-ed3im
-ed1it
-edi5z
-4edo
-e4dol
-edon2
-e4dri
-e4dul
-ed5ulo
-ee2c
-eed3i
-ee2f
-eel3i
-ee4ly
-ee2m
-ee4na
-ee4p1
-ee2s4
-eest4
-ee4ty
-e5ex
-e1f
-e4f3ere
-1eff
-e4fic
-5efici
-efil4
-e3fine
-ef5i5nite
-3efit
-efor5es
-e4fuse.
-4egal
-eger4
-eg5ib
-eg4ic
-eg5ing
-e5git5
-eg5n
-e4go.
-e4gos
-eg1ul
-e5gur
-5egy
-e1h4
-eher4
-ei2
-e5ic
-ei5d
-eig2
-ei5gl
-e3imb
-e3inf
-e1ing
-e5inst
-eir4d
-eit3e
-ei3th
-e5ity
-e1j
-e4jud
-ej5udi
-eki4n
-ek4la
-e1la
-e4la.
-e4lac
-elan4d
-el5ativ
-e4law
-elaxa4
-e3lea
-el5ebra
-5elec
-e4led
-el3ega
-e5len
-e4l1er
-e1les
-el2f
-el2i
-e3libe
-e4l5ic.
-el3ica
-e3lier
-el5igib
-e5lim
-e4l3ing
-e3lio
-e2lis
-el5ish
-e3liv3
-4ella
-el4lab
-ello4
-e5loc
-el5og
-el3op.
-el2sh
-el4ta
-e5lud
-el5ug
-e4mac
-e4mag
-e5man
-em5ana
-em5b
-e1me
-e2mel
-e4met
-em3ica
-emi4e
-em5igra
-em1in2
-em5ine
-em3i3ni
-e4mis
-em5ish
-e5miss
-em3iz
-5emniz
-emo4g
-emoni5o
-em3pi
-e4mul
-em5ula
-emu3n
-e3my
-en5amo
-e4nant
-ench4er
-en3dic
-e5nea
-e5nee
-en3em
-en5ero
-en5esi
-en5est
-en3etr
-e3new
-en5ics
-e5nie
-e5nil
-e3nio
-en3ish
-en3it
-e5niu
-5eniz
-4enn
-4eno
-eno4g
-e4nos
-en3ov
-en4sw
-ent5age
-4enthes
-en3ua
-en5uf
-e3ny.
-4en3z
-e5of
-eo2g
-e4oi4
-e3ol
-eop3ar
-e1or
-eo3re
-eo5rol
-eos4
-e4ot
-eo4to
-e5out
-e5ow
-e2pa
-e3pai
-ep5anc
-e5pel
-e3pent
-ep5etitio
-ephe4
-e4pli
-e1po
-e4prec
-ep5reca
-e4pred
-ep3reh
-e3pro
-e4prob
-ep4sh
-ep5ti5b
-e4put
-ep5uta
-e1q
-equi3l
-e4q3ui3s
-er1a
-era4b
-4erand
-er3ar
-4erati.
-2erb
-er4bl
-er3ch
-er4che
-2ere.
-e3real
-ere5co
-ere3in
-er5el.
-er3emo
-er5ena
-er5ence
-4erene
-er3ent
-ere4q
-er5ess
-er3est
-eret4
-er1h
-er1i
-e1ria4
-5erick
-e3rien
-eri4er
-er3ine
-e1rio
-4erit
-er4iu
-eri4v
-e4riva
-er3m4
-er4nis
-4ernit
-5erniz
-er3no
-2ero
-er5ob
-e5roc
-ero4r
-er1ou
-er1s
-er3set
-ert3er
-4ertl
-er3tw
-4eru
-eru4t
-5erwau
-e1s4a
-e4sage.
-e4sages
-es2c
-e2sca
-es5can
-e3scr
-es5cu
-e1s2e
-e2sec
-es5ecr
-es5enc
-e4sert.
-e4serts
-e4serva
-4esh
-e3sha
-esh5en
-e1si
-e2sic
-e2sid
-es5iden
-es5igna
-e2s5im
-es4i4n
-esis4te
-esi4u
-e5skin
-es4mi
-e2sol
-es3olu
-e2son
-es5ona
-e1sp
-es3per
-es5pira
-es4pre
-2ess
-es4si4b
-estan4
-es3tig
-es5tim
-4es2to
-e3ston
-2estr
-e5stro
-estruc5
-e2sur
-es5urr
-es4w
-eta4b
-eten4d
-e3teo
-ethod3
-et1ic
-e5tide
-etin4
-eti4no
-e5tir
-e5titio
-et5itiv
-4etn
-et5ona
-e3tra
-e3tre
-et3ric
-et5rif
-et3rog
-et5ros
-et3ua
-et5ym
-et5z
-4eu
-e5un
-e3up
-eu3ro
-eus4
-eute4
-euti5l
-eu5tr
-eva2p5
-e2vas
-ev5ast
-e5vea
-ev3ell
-evel3o
-e5veng
-even4i
-ev1er
-e5verb
-e1vi
-ev3id
-evi4l
-e4vin
-evi4v
-e5voc
-e5vu
-e1wa
-e4wag
-e5wee
-e3wh
-ewil5
-ew3ing
-e3wit
-1exp
-5eyc
-5eye.
-eys4
-1fa
-fa3bl
-fab3r
-fa4ce
-4fag
-fain4
-fall5e
-4fa4ma
-fam5is
-5far
-far5th
-fa3ta
-fa3the
-4fato
-fault5
-4f5b
-4fd
-4fe.
-feas4
-feath3
-fe4b
-4feca
-5fect
-2fed
-fe3li
-fe4mo
-fen2d
-fend5e
-fer1
-5ferr
-fev4
-4f1f
-f4fes
-f4fie
-f5fin.
-f2f5is
-f4fly
-f2fy
-4fh
-1fi
-fi3a
-2f3ic.
-4f3ical
-f3ican
-4ficate
-f3icen
-fi3cer
-fic4i
-5ficia
-5ficie
-4fics
-fi3cu
-fi5del
-fight5
-fil5i
-fill5in
-4fily
-2fin
-5fina
-fin2d5
-fi2ne
-f1in3g
-fin4n
-fis4ti
-f4l2
-f5less
-flin4
-flo3re
-f2ly5
-4fm
-4fn
-1fo
-5fon
-fon4de
-fon4t
-fo2r
-fo5rat
-for5ay
-fore5t
-for4i
-fort5a
-fos5
-4f5p
-fra4t
-f5rea
-fres5c
-fri2
-fril4
-frol5
-2f3s
-2ft
-f4to
-f2ty
-3fu
-fu5el
-4fug
-fu4min
-fu5ne
-fu3ri
-fusi4
-fus4s
-4futa
-1fy
-1ga
-gaf4
-5gal.
-3gali
-ga3lo
-2gam
-ga5met
-g5amo
-gan5is
-ga3niz
-gani5za
-4gano
-gar5n4
-gass4
-gath3
-4gativ
-4gaz
-g3b
-gd4
-2ge.
-2ged
-geez4
-gel4in
-ge5lis
-ge5liz
-4gely
-1gen
-ge4nat
-ge5niz
-4geno
-4geny
-1geo
-ge3om
-g4ery
-5gesi
-geth5
-4geto
-ge4ty
-ge4v
-4g1g2
-g2ge
-g3ger
-gglu5
-ggo4
-gh3in
-gh5out
-gh4to
-5gi.
-1gi4a
-gia5r
-g1ic
-5gicia
-g4ico
-gien5
-5gies.
-gil4
-g3imen
-3g4in.
-gin5ge
-5g4ins
-5gio
-3gir
-gir4l
-g3isl
-gi4u
-5giv
-3giz
-gl2
-gla4
-glad5i
-5glas
-1gle
-gli4b
-g3lig
-3glo
-glo3r
-g1m
-g4my
-gn4a
-g4na.
-gnet4t
-g1ni
-g2nin
-g4nio
-g1no
-g4non
-1go
-3go.
-gob5
-5goe
-3g4o4g
-go3is
-gon2
-4g3o3na
-gondo5
-go3ni
-5goo
-go5riz
-gor5ou
-5gos.
-gov1
-g3p
-1gr
-4grada
-g4rai
-gran2
-5graph.
-g5rapher
-5graphic
-4graphy
-4gray
-gre4n
-4gress.
-4grit
-g4ro
-gruf4
-gs2
-g5ste
-gth3
-gu4a
-3guard
-2gue
-5gui5t
-3gun
-3gus
-4gu4t
-g3w
-1gy
-2g5y3n
-gy5ra
-h3ab4l
-hach4
-hae4m
-hae4t
-h5agu
-ha3la
-hala3m
-ha4m
-han4ci
-han4cy
-5hand.
-han4g
-hang5er
-hang5o
-h5a5niz
-han4k
-han4te
-hap3l
-hap5t
-ha3ran
-ha5ras
-har2d
-hard3e
-har4le
-harp5en
-har5ter
-has5s
-haun4
-5haz
-haz3a
-h1b
-1head
-3hear
-he4can
-h5ecat
-h4ed
-he5do5
-he3l4i
-hel4lis
-hel4ly
-h5elo
-hem4p
-he2n
-hena4
-hen5at
-heo5r
-hep5
-h4era
-hera3p
-her4ba
-here5a
-h3ern
-h5erou
-h3ery
-h1es
-he2s5p
-he4t
-het4ed
-heu4
-h1f
-h1h
-hi5an
-hi4co
-high5
-h4il2
-himer4
-h4ina
-hion4e
-hi4p
-hir4l
-hi3ro
-hir4p
-hir4r
-his3el
-his4s
-hith5er
-hi2v
-4hk
-4h1l4
-hlan4
-h2lo
-hlo3ri
-4h1m
-hmet4
-2h1n
-h5odiz
-h5ods
-ho4g
-hoge4
-hol5ar
-3hol4e
-ho4ma
-home3
-hon4a
-ho5ny
-3hood
-hoon4
-hor5at
-ho5ris
-hort3e
-ho5ru
-hos4e
-ho5sen
-hos1p
-1hous
-house3
-hov5el
-4h5p
-4hr4
-hree5
-hro5niz
-hro3po
-4h1s2
-h4sh
-h4tar
-ht1en
-ht5es
-h4ty
-hu4g
-hu4min
-hun5ke
-hun4t
-hus3t4
-hu4t
-h1w
-h4wart
-hy3pe
-hy3ph
-hy2s
-2i1a
-i2al
-iam4
-iam5ete
-i2an
-4ianc
-ian3i
-4ian4t
-ia5pe
-iass4
-i4ativ
-ia4tric
-i4atu
-ibe4
-ib3era
-ib5ert
-ib5ia
-ib3in
-ib5it.
-ib5ite
-i1bl
-ib3li
-i5bo
-i1br
-i2b5ri
-i5bun
-4icam
-5icap
-4icar
-i4car.
-i4cara
-icas5
-i4cay
-iccu4
-4iceo
-4ich
-2ici
-i5cid
-ic5ina
-i2cip
-ic3ipa
-i4cly
-i2c5oc
-4i1cr
-5icra
-i4cry
-ic4te
-ictu2
-ic4t3ua
-ic3ula
-ic4um
-ic5uo
-i3cur
-2id
-i4dai
-id5anc
-id5d
-ide3al
-ide4s
-i2di
-id5ian
-idi4ar
-i5die
-id3io
-idi5ou
-id1it
-id5iu
-i3dle
-i4dom
-id3ow
-i4dr
-i2du
-id5uo
-2ie4
-ied4e
-5ie5ga
-ield3
-ien5a4
-ien4e
-i5enn
-i3enti
-i1er.
-i3esc
-i1est
-i3et
-4if.
-if5ero
-iff5en
-if4fr
-4ific.
-i3fie
-i3fl
-4ift
-2ig
-iga5b
-ig3era
-ight3i
-4igi
-i3gib
-ig3il
-ig3in
-ig3it
-i4g4l
-i2go
-ig3or
-ig5ot
-i5gre
-igu5i
-ig1ur
-i3h
-4i5i4
-i3j
-4ik
-i1la
-il3a4b
-i4lade
-i2l5am
-ila5ra
-i3leg
-il1er
-ilev4
-il5f
-il1i
-il3ia
-il2ib
-il3io
-il4ist
-2ilit
-il2iz
-ill5ab
-4iln
-il3oq
-il4ty
-il5ur
-il3v
-i4mag
-im3age
-ima5ry
-imenta5r
-4imet
-im1i
-im5ida
-imi5le
-i5mini
-4imit
-im4ni
-i3mon
-i2mu
-im3ula
-2in.
-i4n3au
-4inav
-incel4
-in3cer
-4ind
-in5dling
-2ine
-i3nee
-iner4ar
-i5ness
-4inga
-4inge
-in5gen
-4ingi
-in5gling
-4ingo
-4ingu
-2ini
-i5ni.
-i4nia
-in3io
-in1is
-i5nite.
-5initio
-in3ity
-4ink
-4inl
-2inn
-2i1no
-i4no4c
-ino4s
-i4not
-2ins
-in3se
-insur5a
-2int.
-2in4th
-in1u
-i5nus
-4iny
-2io
-4io.
-ioge4
-io2gr
-i1ol
-io4m
-ion3at
-ion4ery
-ion3i
-io5ph
-ior3i
-i4os
-io5th
-i5oti
-io4to
-i4our
-2ip
-ipe4
-iphras4
-ip3i
-ip4ic
-ip4re4
-ip3ul
-i3qua
-iq5uef
-iq3uid
-iq3ui3t
-4ir
-i1ra
-ira4b
-i4rac
-ird5e
-ire4de
-i4ref
-i4rel4
-i4res
-ir5gi
-ir1i
-iri5de
-ir4is
-iri3tu
-5i5r2iz
-ir4min
-iro4g
-5iron.
-ir5ul
-2is.
-is5ag
-is3ar
-isas5
-2is1c
-is3ch
-4ise
-is3er
-3isf
-is5han
-is3hon
-ish5op
-is3ib
-isi4d
-i5sis
-is5itiv
-4is4k
-islan4
-4isms
-i2so
-iso5mer
-is1p
-is2pi
-is4py
-4is1s
-is4sal
-issen4
-is4ses
-is4ta.
-is1te
-is1ti
-ist4ly
-4istral
-i2su
-is5us
-4ita.
-ita4bi
-i4tag
-4ita5m
-i3tan
-i3tat
-2ite
-it3era
-i5teri
-it4es
-2ith
-i1ti
-4itia
-4i2tic
-it3ica
-5i5tick
-it3ig
-it5ill
-i2tim
-2itio
-4itis
-i4tism
-i2t5o5m
-4iton
-i4tram
-it5ry
-4itt
-it3uat
-i5tud
-it3ul
-4itz.
-i1u
-2iv
-iv3ell
-iv3en.
-i4v3er.
-i4vers.
-iv5il.
-iv5io
-iv1it
-i5vore
-iv3o3ro
-i4v3ot
-4i5w
-ix4o
-4iy
-4izar
-izi4
-5izont
-5ja
-jac4q
-ja4p
-1je
-jer5s
-4jestie
-4jesty
-jew3
-jo4p
-5judg
-3ka.
-k3ab
-k5ag
-kais4
-kal4
-k1b
-k2ed
-1kee
-ke4g
-ke5li
-k3en4d
-k1er
-kes4
-k3est.
-ke4ty
-k3f
-kh4
-k1i
-5ki.
-5k2ic
-k4ill
-kilo5
-k4im
-k4in.
-kin4de
-k5iness
-kin4g
-ki4p
-kis4
-k5ish
-kk4
-k1l
-4kley
-4kly
-k1m
-k5nes
-1k2no
-ko5r
-kosh4
-k3ou
-kro5n
-4k1s2
-k4sc
-ks4l
-k4sy
-k5t
-k1w
-lab3ic
-l4abo
-laci4
-l4ade
-la3dy
-lag4n
-lam3o
-3land
-lan4dl
-lan5et
-lan4te
-lar4g
-lar3i
-las4e
-la5tan
-4lateli
-4lativ
-4lav
-la4v4a
-2l1b
-lbin4
-4l1c2
-lce4
-l3ci
-2ld
-l2de
-ld4ere
-ld4eri
-ldi4
-ld5is
-l3dr
-l4dri
-le2a
-le4bi
-left5
-5leg.
-5legg
-le4mat
-lem5atic
-4len.
-3lenc
-5lene.
-1lent
-le3ph
-le4pr
-lera5b
-ler4e
-3lerg
-3l4eri
-l4ero
-les2
-le5sco
-5lesq
-3less
-5less.
-l3eva
-lev4er.
-lev4era
-lev4ers
-3ley
-4leye
-2lf
-l5fr
-4l1g4
-l5ga
-lgar3
-l4ges
-lgo3
-2l3h
-li4ag
-li2am
-liar5iz
-li4as
-li4ato
-li5bi
-5licio
-li4cor
-4lics
-4lict.
-l4icu
-l3icy
-l3ida
-lid5er
-3lidi
-lif3er
-l4iff
-li4fl
-5ligate
-3ligh
-li4gra
-3lik
-4l4i4l
-lim4bl
-lim3i
-li4mo
-l4im4p
-l4ina
-1l4ine
-lin3ea
-lin3i
-link5er
-li5og
-4l4iq
-lis4p
-l1it
-l2it.
-5litica
-l5i5tics
-liv3er
-l1iz
-4lj
-lka3
-l3kal
-lka4t
-l1l
-l4law
-l2le
-l5lea
-l3lec
-l3leg
-l3lel
-l3le4n
-l3le4t
-ll2i
-l2lin4
-l5lina
-ll4o
-lloqui5
-ll5out
-l5low
-2lm
-l5met
-lm3ing
-l4mod
-lmon4
-2l1n2
-3lo.
-lob5al
-lo4ci
-4lof
-3logic
-l5ogo
-3logu
-lom3er
-5long
-lon4i
-l3o3niz
-lood5
-5lope.
-lop3i
-l3opm
-lora4
-lo4rato
-lo5rie
-lor5ou
-5los.
-los5et
-5losophiz
-5losophy
-los4t
-lo4ta
-loun5d
-2lout
-4lov
-2lp
-lpa5b
-l3pha
-l5phi
-lp5ing
-l3pit
-l4pl
-l5pr
-4l1r
-2l1s2
-l4sc
-l2se
-l4sie
-4lt
-lt5ag
-ltane5
-l1te
-lten4
-ltera4
-lth3i
-l5ties.
-ltis4
-l1tr
-ltu2
-ltur3a
-lu5a
-lu3br
-luch4
-lu3ci
-lu3en
-luf4
-lu5id
-lu4ma
-5lumi
-l5umn.
-5lumnia
-lu3o
-luo3r
-4lup
-luss4
-lus3te
-1lut
-l5ven
-l5vet4
-2l1w
-1ly
-4lya
-4lyb
-ly5me
-ly3no
-2lys4
-l5yse
-1ma
-2mab
-ma2ca
-ma5chine
-ma4cl
-mag5in
-5magn
-2mah
-maid5
-4mald
-ma3lig
-ma5lin
-mal4li
-mal4ty
-5mania
-man5is
-man3iz
-4map
-ma5rine.
-ma5riz
-mar4ly
-mar3v
-ma5sce
-mas4e
-mas1t
-5mate
-math3
-ma3tis
-4matiza
-4m1b
-mba4t5
-m5bil
-m4b3ing
-mbi4v
-4m5c
-4me.
-2med
-4med.
-5media
-me3die
-m5e5dy
-me2g
-mel5on
-mel4t
-me2m
-mem1o3
-1men
-men4a
-men5ac
-men4de
-4mene
-men4i
-mens4
-mensu5
-3ment
-men4te
-me5on
-m5ersa
-2mes
-3mesti
-me4ta
-met3al
-me1te
-me5thi
-m4etr
-5metric
-me5trie
-me3try
-me4v
-4m1f
-2mh
-5mi.
-mi3a
-mid4a
-mid4g
-mig4
-3milia
-m5i5lie
-m4ill
-min4a
-3mind
-m5inee
-m4ingl
-min5gli
-m5ingly
-min4t
-m4inu
-miot4
-m2is
-mis4er.
-mis5l
-mis4ti
-m5istry
-4mith
-m2iz
-4mk
-4m1l
-m1m
-mma5ry
-4m1n
-mn4a
-m4nin
-mn4o
-1mo
-4mocr
-5mocratiz
-mo2d1
-mo4go
-mois2
-moi5se
-4mok
-mo5lest
-mo3me
-mon5et
-mon5ge
-moni3a
-mon4ism
-mon4ist
-mo3niz
-monol4
-mo3ny.
-mo2r
-4mora.
-mos2
-mo5sey
-mo3sp
-moth3
-m5ouf
-3mous
-mo2v
-4m1p
-mpara5
-mpa5rab
-mpar5i
-m3pet
-mphas4
-m2pi
-mpi4a
-mp5ies
-m4p1in
-m5pir
-mp5is
-mpo3ri
-mpos5ite
-m4pous
-mpov5
-mp4tr
-m2py
-4m3r
-4m1s2
-m4sh
-m5si
-4mt
-1mu
-mula5r4
-5mult
-multi3
-3mum
-mun2
-4mup
-mu4u
-4mw
-1na
-2n1a2b
-n4abu
-4nac.
-na4ca
-n5act
-nag5er.
-nak4
-na4li
-na5lia
-4nalt
-na5mit
-n2an
-nanci4
-nan4it
-nank4
-nar3c
-4nare
-nar3i
-nar4l
-n5arm
-n4as
-nas4c
-nas5ti
-n2at
-na3tal
-nato5miz
-n2au
-nau3se
-3naut
-nav4e
-4n1b4
-ncar5
-n4ces.
-n3cha
-n5cheo
-n5chil
-n3chis
-nc1in
-nc4it
-ncour5a
-n1cr
-n1cu
-n4dai
-n5dan
-n1de
-nd5est.
-ndi4b
-n5d2if
-n1dit
-n3diz
-n5duc
-ndu4r
-nd2we
-2ne.
-n3ear
-ne2b
-neb3u
-ne2c
-5neck
-2ned
-ne4gat
-neg5ativ
-5nege
-ne4la
-nel5iz
-ne5mi
-ne4mo
-1nen
-4nene
-3neo
-ne4po
-ne2q
-n1er
-nera5b
-n4erar
-n2ere
-n4er5i
-ner4r
-1nes
-2nes.
-4nesp
-2nest
-4nesw
-3netic
-ne4v
-n5eve
-ne4w
-n3f
-n4gab
-n3gel
-nge4n4e
-n5gere
-n3geri
-ng5ha
-n3gib
-ng1in
-n5git
-n4gla
-ngov4
-ng5sh
-n1gu
-n4gum
-n2gy
-4n1h4
-nha4
-nhab3
-nhe4
-3n4ia
-ni3an
-ni4ap
-ni3ba
-ni4bl
-ni4d
-ni5di
-ni4er
-ni2fi
-ni5ficat
-n5igr
-nik4
-n1im
-ni3miz
-n1in
-5nine.
-nin4g
-ni4o
-5nis.
-nis4ta
-n2it
-n4ith
-3nitio
-n3itor
-ni3tr
-n1j
-4nk2
-n5kero
-n3ket
-nk3in
-n1kl
-4n1l
-n5m
-nme4
-nmet4
-4n1n2
-nne4
-nni3al
-nni4v
-nob4l
-no3ble
-n5ocl
-4n3o2d
-3noe
-4nog
-noge4
-nois5i
-no5l4i
-5nologis
-3nomic
-n5o5miz
-no4mo
-no3my
-no4n
-non4ag
-non5i
-n5oniz
-4nop
-5nop5o5li
-nor5ab
-no4rary
-4nosc
-nos4e
-nos5t
-no5ta
-1nou
-3noun
-nov3el3
-nowl3
-n1p4
-npi4
-npre4c
-n1q
-n1r
-nru4
-2n1s2
-ns5ab
-nsati4
-ns4c
-n2se
-n4s3es
-nsid1
-nsig4
-n2sl
-ns3m
-n4soc
-ns4pe
-n5spi
-nsta5bl
-n1t
-nta4b
-nter3s
-nt2i
-n5tib
-nti4er
-nti2f
-n3tine
-n4t3ing
-nti4p
-ntrol5li
-nt4s
-ntu3me
-nu1a
-nu4d
-nu5en
-nuf4fe
-n3uin
-3nu3it
-n4um
-nu1me
-n5umi
-3nu4n
-n3uo
-nu3tr
-n1v2
-n1w4
-nym4
-nyp4
-4nz
-n3za
-4oa
-oad3
-o5a5les
-oard3
-oas4e
-oast5e
-oat5i
-ob3a3b
-o5bar
-obe4l
-o1bi
-o2bin
-ob5ing
-o3br
-ob3ul
-o1ce
-och4
-o3chet
-ocif3
-o4cil
-o4clam
-o4cod
-oc3rac
-oc5ratiz
-ocre3
-5ocrit
-octor5a
-oc3ula
-o5cure
-od5ded
-od3ic
-odi3o
-o2do4
-odor3
-od5uct.
-od5ucts
-o4el
-o5eng
-o3er
-oe4ta
-o3ev
-o2fi
-of5ite
-ofit4t
-o2g5a5r
-og5ativ
-o4gato
-o1ge
-o5gene
-o5geo
-o4ger
-o3gie
-1o1gis
-og3it
-o4gl
-o5g2ly
-3ogniz
-o4gro
-ogu5i
-1ogy
-2ogyn
-o1h2
-ohab5
-oi2
-oic3es
-oi3der
-oiff4
-oig4
-oi5let
-o3ing
-oint5er
-o5ism
-oi5son
-oist5en
-oi3ter
-o5j
-2ok
-o3ken
-ok5ie
-o1la
-o4lan
-olass4
-ol2d
-old1e
-ol3er
-o3lesc
-o3let
-ol4fi
-ol2i
-o3lia
-o3lice
-ol5id.
-o3li4f
-o5lil
-ol3ing
-o5lio
-o5lis.
-ol3ish
-o5lite
-o5litio
-o5liv
-olli4e
-ol5ogiz
-olo4r
-ol5pl
-ol2t
-ol3ub
-ol3ume
-ol3un
-o5lus
-ol2v
-o2ly
-om5ah
-oma5l
-om5atiz
-om2be
-om4bl
-o2me
-om3ena
-om5erse
-o4met
-om5etry
-o3mia
-om3ic.
-om3ica
-o5mid
-om1in
-o5mini
-5ommend
-omo4ge
-o4mon
-om3pi
-ompro5
-o2n
-on1a
-on4ac
-o3nan
-on1c
-3oncil
-2ond
-on5do
-o3nen
-on5est
-on4gu
-on1ic
-o3nio
-on1is
-o5niu
-on3key
-on4odi
-on3omy
-on3s
-onspi4
-onspir5a
-onsu4
-onten4
-on3t4i
-ontif5
-on5um
-onva5
-oo2
-ood5e
-ood5i
-oo4k
-oop3i
-o3ord
-oost5
-o2pa
-ope5d
-op1er
-3opera
-4operag
-2oph
-o5phan
-o5pher
-op3ing
-o3pit
-o5pon
-o4posi
-o1pr
-op1u
-opy5
-o1q
-o1ra
-o5ra.
-o4r3ag
-or5aliz
-or5ange
-ore5a
-o5real
-or3ei
-ore5sh
-or5est.
-orew4
-or4gu
-4o5ria
-or3ica
-o5ril
-or1in
-o1rio
-or3ity
-o3riu
-or2mi
-orn2e
-o5rof
-or3oug
-or5pe
-3orrh
-or4se
-ors5en
-orst4
-or3thi
-or3thy
-or4ty
-o5rum
-o1ry
-os3al
-os2c
-os4ce
-o3scop
-4oscopi
-o5scr
-os4i4e
-os5itiv
-os3ito
-os3ity
-osi4u
-os4l
-o2so
-os4pa
-os4po
-os2ta
-o5stati
-os5til
-os5tit
-o4tan
-otele4g
-ot3er.
-ot5ers
-o4tes
-4oth
-oth5esi
-oth3i4
-ot3ic.
-ot5ica
-o3tice
-o3tif
-o3tis
-oto5s
-ou2
-ou3bl
-ouch5i
-ou5et
-ou4l
-ounc5er
-oun2d
-ou5v
-ov4en
-over4ne
-over3s
-ov4ert
-o3vis
-oviti4
-o5v4ol
-ow3der
-ow3el
-ow5est
-ow1i
-own5i
-o4wo
-oy1a
-1pa
-pa4ca
-pa4ce
-pac4t
-p4ad
-5pagan
-p3agat
-p4ai
-pain4
-p4al
-pan4a
-pan3el
-pan4ty
-pa3ny
-pa1p
-pa4pu
-para5bl
-par5age
-par5di
-3pare
-par5el
-p4a4ri
-par4is
-pa2te
-pa5ter
-5pathic
-pa5thy
-pa4tric
-pav4
-3pay
-4p1b
-pd4
-4pe.
-3pe4a
-pear4l
-pe2c
-2p2ed
-3pede
-3pedi
-pedia4
-ped4ic
-p4ee
-pee4d
-pek4
-pe4la
-peli4e
-pe4nan
-p4enc
-pen4th
-pe5on
-p4era.
-pera5bl
-p4erag
-p4eri
-peri5st
-per4mal
-perme5
-p4ern
-per3o
-per3ti
-pe5ru
-per1v
-pe2t
-pe5ten
-pe5tiz
-4pf
-4pg
-4ph.
-phar5i
-phe3no
-ph4er
-ph4es.
-ph1ic
-5phie
-ph5ing
-5phisti
-3phiz
-ph2l
-3phob
-3phone
-5phoni
-pho4r
-4phs
-ph3t
-5phu
-1phy
-pi3a
-pian4
-pi4cie
-pi4cy
-p4id
-p5ida
-pi3de
-5pidi
-3piec
-pi3en
-pi4grap
-pi3lo
-pi2n
-p4in.
-pind4
-p4ino
-3pi1o
-pion4
-p3ith
-pi5tha
-pi2tu
-2p3k2
-1p2l2
-3plan
-plas5t
-pli3a
-pli5er
-4plig
-pli4n
-ploi4
-plu4m
-plum4b
-4p1m
-2p3n
-po4c
-5pod.
-po5em
-po3et5
-5po4g
-poin2
-5point
-poly5t
-po4ni
-po4p
-1p4or
-po4ry
-1pos
-pos1s
-p4ot
-po4ta
-5poun
-4p1p
-ppa5ra
-p2pe
-p4ped
-p5pel
-p3pen
-p3per
-p3pet
-ppo5site
-pr2
-pray4e
-5preci
-pre5co
-pre3em
-pref5ac
-pre4la
-pre3r
-p3rese
-3press
-pre5ten
-pre3v
-5pri4e
-prin4t3
-pri4s
-pris3o
-p3roca
-prof5it
-pro3l
-pros3e
-pro1t
-2p1s2
-p2se
-ps4h
-p4sib
-2p1t
-pt5a4b
-p2te
-p2th
-pti3m
-ptu4r
-p4tw
-pub3
-pue4
-puf4
-pul3c
-pu4m
-pu2n
-pur4r
-5pus
-pu2t
-5pute
-put3er
-pu3tr
-put4ted
-put4tin
-p3w
-qu2
-qua5v
-2que.
-3quer
-3quet
-2rab
-ra3bi
-rach4e
-r5acl
-raf5fi
-raf4t
-r2ai
-ra4lo
-ram3et
-r2ami
-rane5o
-ran4ge
-r4ani
-ra5no
-rap3er
-3raphy
-rar5c
-rare4
-rar5ef
-4raril
-r2as
-ration4
-rau4t
-ra5vai
-rav3el
-ra5zie
-r1b
-r4bab
-r4bag
-rbi2
-rbi4f
-r2bin
-r5bine
-rb5ing.
-rb4o
-r1c
-r2ce
-rcen4
-r3cha
-rch4er
-r4ci4b
-rc4it
-rcum3
-r4dal
-rd2i
-rdi4a
-rdi4er
-rdin4
-rd3ing
-2re.
-re1al
-re3an
-re5arr
-5reav
-re4aw
-r5ebrat
-rec5oll
-rec5ompe
-re4cre
-2r2ed
-re1de
-re3dis
-red5it
-re4fac
-re2fe
-re5fer.
-re3fi
-re4fy
-reg3is
-re5it
-re1li
-re5lu
-r4en4ta
-ren4te
-re1o
-re5pin
-re4posi
-re1pu
-r1er4
-r4eri
-rero4
-re5ru
-r4es.
-re4spi
-ress5ib
-res2t
-re5stal
-re3str
-re4ter
-re4ti4z
-re3tri
-reu2
-re5uti
-rev2
-re4val
-rev3el
-r5ev5er.
-re5vers
-re5vert
-re5vil
-rev5olu
-re4wh
-r1f
-rfu4
-r4fy
-rg2
-rg3er
-r3get
-r3gic
-rgi4n
-rg3ing
-r5gis
-r5git
-r1gl
-rgo4n
-r3gu
-rh4
-4rh.
-4rhal
-ri3a
-ria4b
-ri4ag
-r4ib
-rib3a
-ric5as
-r4ice
-4rici
-5ricid
-ri4cie
-r4ico
-rid5er
-ri3enc
-ri3ent
-ri1er
-ri5et
-rig5an
-5rigi
-ril3iz
-5riman
-rim5i
-3rimo
-rim4pe
-r2ina
-5rina.
-rin4d
-rin4e
-rin4g
-ri1o
-5riph
-riph5e
-ri2pl
-rip5lic
-r4iq
-r2is
-r4is.
-ris4c
-r3ish
-ris4p
-ri3ta3b
-r5ited.
-rit5er.
-rit5ers
-rit3ic
-ri2tu
-rit5ur
-riv5el
-riv3et
-riv3i
-r3j
-r3ket
-rk4le
-rk4lin
-r1l
-rle4
-r2led
-r4lig
-r4lis
-rl5ish
-r3lo4
-r1m
-rma5c
-r2me
-r3men
-rm5ers
-rm3ing
-r4ming.
-r4mio
-r3mit
-r4my
-r4nar
-r3nel
-r4ner
-r5net
-r3ney
-r5nic
-r1nis4
-r3nit
-r3niv
-rno4
-r4nou
-r3nu
-rob3l
-r2oc
-ro3cr
-ro4e
-ro1fe
-ro5fil
-rok2
-ro5ker
-5role.
-rom5ete
-rom4i
-rom4p
-ron4al
-ron4e
-ro5n4is
-ron4ta
-1room
-5root
-ro3pel
-rop3ic
-ror3i
-ro5ro
-ros5per
-ros4s
-ro4the
-ro4ty
-ro4va
-rov5el
-rox5
-r1p
-r4pea
-r5pent
-rp5er.
-r3pet
-rp4h4
-rp3ing
-r3po
-r1r4
-rre4c
-rre4f
-r4reo
-rre4st
-rri4o
-rri4v
-rron4
-rros4
-rrys4
-4rs2
-r1sa
-rsa5ti
-rs4c
-r2se
-r3sec
-rse4cr
-rs5er.
-rs3es
-rse5v2
-r1sh
-r5sha
-r1si
-r4si4b
-rson3
-r1sp
-r5sw
-rtach4
-r4tag
-r3teb
-rten4d
-rte5o
-r1ti
-rt5ib
-rti4d
-r4tier
-r3tig
-rtil3i
-rtil4l
-r4tily
-r4tist
-r4tiv
-r3tri
-rtroph4
-rt4sh
-ru3a
-ru3e4l
-ru3en
-ru4gl
-ru3in
-rum3pl
-ru2n
-runk5
-run4ty
-r5usc
-ruti5n
-rv4e
-rvel4i
-r3ven
-rv5er.
-r5vest
-r3vey
-r3vic
-rvi4v
-r3vo
-r1w
-ry4c
-5rynge
-ry3t
-sa2
-2s1ab
-5sack
-sac3ri
-s3act
-5sai
-salar4
-sal4m
-sa5lo
-sal4t
-3sanc
-san4de
-s1ap
-sa5ta
-5sa3tio
-sat3u
-sau4
-sa5vor
-5saw
-4s5b
-scan4t5
-sca4p
-scav5
-s4ced
-4scei
-s4ces
-sch2
-s4cho
-3s4cie
-5scin4d
-scle5
-s4cli
-scof4
-4scopy
-scour5a
-s1cu
-4s5d
-4se.
-se4a
-seas4
-sea5w
-se2c3o
-3sect
-4s4ed
-se4d4e
-s5edl
-se2g
-seg3r
-5sei
-se1le
-5self
-5selv
-4seme
-se4mol
-sen5at
-4senc
-sen4d
-s5ened
-sen5g
-s5enin
-4sentd
-4sentl
-sep3a3
-4s1er.
-s4erl
-ser4o
-4servo
-s1e4s
-se5sh
-ses5t
-5se5um
-5sev
-sev3en
-sew4i
-5sex
-4s3f
-2s3g
-s2h
-2sh.
-sh1er
-5shev
-sh1in
-sh3io
-3ship
-shiv5
-sho4
-sh5old
-shon3
-shor4
-short5
-4shw
-si1b
-s5icc
-3side.
-5sides
-5sidi
-si5diz
-4signa
-sil4e
-4sily
-2s1in
-s2ina
-5sine.
-s3ing
-1sio
-5sion
-sion5a
-si2r
-sir5a
-1sis
-3sitio
-5siu
-1siv
-5siz
-sk2
-4ske
-s3ket
-sk5ine
-sk5ing
-s1l2
-s3lat
-s2le
-slith5
-2s1m
-s3ma
-small3
-sman3
-smel4
-s5men
-5smith
-smol5d4
-s1n4
-1so
-so4ce
-soft3
-so4lab
-sol3d2
-so3lic
-5solv
-3som
-3s4on.
-sona4
-son4g
-s4op
-5sophic
-s5ophiz
-s5ophy
-sor5c
-sor5d
-4sov
-so5vi
-2spa
-5spai
-spa4n
-spen4d
-2s5peo
-2sper
-s2phe
-3spher
-spho5
-spil4
-sp5ing
-4spio
-s4ply
-s4pon
-spor4
-4spot
-squal4l
-s1r
-2ss
-s1sa
-ssas3
-s2s5c
-s3sel
-s5seng
-s4ses.
-s5set
-s1si
-s4sie
-ssi4er
-ss5ily
-s4sl
-ss4li
-s4sn
-sspend4
-ss2t
-ssur5a
-ss5w
-2st.
-s2tag
-s2tal
-stam4i
-5stand
-s4ta4p
-5stat.
-s4ted
-stern5i
-s5tero
-ste2w
-stew5a
-s3the
-st2i
-s4ti.
-s5tia
-s1tic
-5stick
-s4tie
-s3tif
-st3ing
-5stir
-s1tle
-5stock
-stom3a
-5stone
-s4top
-3store
-st4r
-s4trad
-5stratu
-s4tray
-s4trid
-4stry
-4st3w
-s2ty
-1su
-su1al
-su4b3
-su2g3
-su5is
-suit3
-s4ul
-su2m
-sum3i
-su2n
-su2r
-4sv
-sw2
-4swo
-s4y
-4syc
-3syl
-syn5o
-sy5rin
-1ta
-3ta.
-2tab
-ta5bles
-5taboliz
-4taci
-ta5do
-4taf4
-tai5lo
-ta2l
-ta5la
-tal5en
-tal3i
-4talk
-tal4lis
-ta5log
-ta5mo
-tan4de
-tanta3
-ta5per
-ta5pl
-tar4a
-4tarc
-4tare
-ta3riz
-tas4e
-ta5sy
-4tatic
-ta4tur
-taun4
-tav4
-2taw
-tax4is
-2t1b
-4tc
-t4ch
-tch5et
-4t1d
-4te.
-tead4i
-4teat
-tece4
-5tect
-2t1ed
-te5di
-1tee
-teg4
-te5ger
-te5gi
-3tel.
-teli4
-5tels
-te2ma2
-tem3at
-3tenan
-3tenc
-3tend
-4tenes
-1tent
-ten4tag
-1teo
-te4p
-te5pe
-ter3c
-5ter3d
-1teri
-ter5ies
-ter3is
-teri5za
-5ternit
-ter5v
-4tes.
-4tess
-t3ess.
-teth5e
-3teu
-3tex
-4tey
-2t1f
-4t1g
-2th.
-than4
-th2e
-4thea
-th3eas
-the5at
-the3is
-3thet
-th5ic.
-th5ica
-4thil
-5think
-4thl
-th5ode
-5thodic
-4thoo
-thor5it
-tho5riz
-2ths
-1tia
-ti4ab
-ti4ato
-2ti2b
-4tick
-t4ico
-t4ic1u
-5tidi
-3tien
-tif2
-ti5fy
-2tig
-5tigu
-till5in
-1tim
-4timp
-tim5ul
-2t1in
-t2ina
-3tine.
-3tini
-1tio
-ti5oc
-tion5ee
-5tiq
-ti3sa
-3tise
-tis4m
-ti5so
-tis4p
-5tistica
-ti3tl
-ti4u
-1tiv
-tiv4a
-1tiz
-ti3za
-ti3zen
-2tl
-t5la
-tlan4
-3tle.
-3tled
-3tles.
-t5let.
-t5lo
-4t1m
-tme4
-2t1n2
-1to
-to3b
-to5crat
-4todo
-2tof
-to2gr
-to5ic
-to2ma
-tom4b
-to3my
-ton4ali
-to3nat
-4tono
-4tony
-to2ra
-to3rie
-tor5iz
-tos2
-5tour
-4tout
-to3war
-4t1p
-1tra
-tra3b
-tra5ch
-traci4
-trac4it
-trac4te
-tras4
-tra5ven
-trav5es5
-tre5f
-tre4m
-trem5i
-5tria
-tri5ces
-5tricia
-4trics
-2trim
-tri4v
-tro5mi
-tron5i
-4trony
-tro5phe
-tro3sp
-tro3v
-tru5i
-trus4
-4t1s2
-t4sc
-tsh4
-t4sw
-4t3t2
-t4tes
-t5to
-ttu4
-1tu
-tu1a
-tu3ar
-tu4bi
-tud2
-4tue
-4tuf4
-5tu3i
-3tum
-tu4nis
-2t3up.
-3ture
-5turi
-tur3is
-tur5o
-tu5ry
-3tus
-4tv
-tw4
-4t1wa
-twis4
-4two
-1ty
-4tya
-2tyl
-type3
-ty5ph
-4tz
-tz4e
-4uab
-uac4
-ua5na
-uan4i
-uar5ant
-uar2d
-uar3i
-uar3t
-u1at
-uav4
-ub4e
-u4bel
-u3ber
-u4bero
-u1b4i
-u4b5ing
-u3ble.
-u3ca
-uci4b
-uc4it
-ucle3
-u3cr
-u3cu
-u4cy
-ud5d
-ud3er
-ud5est
-udev4
-u1dic
-ud3ied
-ud3ies
-ud5is
-u5dit
-u4don
-ud4si
-u4du
-u4ene
-uens4
-uen4te
-uer4il
-3ufa
-u3fl
-ugh3en
-ug5in
-2ui2
-uil5iz
-ui4n
-u1ing
-uir4m
-uita4
-uiv3
-uiv4er.
-u5j
-4uk
-u1la
-ula5b
-u5lati
-ulch4
-5ulche
-ul3der
-ul4e
-u1len
-ul4gi
-ul2i
-u5lia
-ul3ing
-ul5ish
-ul4lar
-ul4li4b
-ul4lis
-4ul3m
-u1l4o
-4uls
-uls5es
-ul1ti
-ultra3
-4ultu
-u3lu
-ul5ul
-ul5v
-um5ab
-um4bi
-um4bly
-u1mi
-u4m3ing
-umor5o
-um2p
-unat4
-u2ne
-un4er
-u1ni
-un4im
-u2nin
-un5ish
-uni3v
-un3s4
-un4sw
-unt3ab
-un4ter.
-un4tes
-unu4
-un5y
-un5z
-u4ors
-u5os
-u1ou
-u1pe
-uper5s
-u5pia
-up3ing
-u3pl
-up3p
-upport5
-upt5ib
-uptu4
-u1ra
-4ura.
-u4rag
-u4ras
-ur4be
-urc4
-ur1d
-ure5at
-ur4fer
-ur4fr
-u3rif
-uri4fic
-ur1in
-u3rio
-u1rit
-ur3iz
-ur2l
-url5ing.
-ur4no
-uros4
-ur4pe
-ur4pi
-urs5er
-ur5tes
-ur3the
-urti4
-ur4tie
-u3ru
-2us
-u5sad
-u5san
-us4ap
-usc2
-us3ci
-use5a
-u5sia
-u3sic
-us4lin
-us1p
-us5sl
-us5tere
-us1tr
-u2su
-usur4
-uta4b
-u3tat
-4ute.
-4utel
-4uten
-uten4i
-4u1t2i
-uti5liz
-u3tine
-ut3ing
-ution5a
-u4tis
-5u5tiz
-u4t1l
-ut5of
-uto5g
-uto5matic
-u5ton
-u4tou
-uts4
-u3u
-uu4m
-u1v2
-uxu3
-uz4e
-1va
-5va.
-2v1a4b
-vac5il
-vac3u
-vag4
-va4ge
-va5lie
-val5o
-val1u
-va5mo
-va5niz
-va5pi
-var5ied
-3vat
-4ve.
-4ved
-veg3
-v3el.
-vel3li
-ve4lo
-v4ely
-ven3om
-v5enue
-v4erd
-5vere.
-v4erel
-v3eren
-ver5enc
-v4eres
-ver3ie
-vermi4n
-3verse
-ver3th
-v4e2s
-4ves.
-ves4te
-ve4te
-vet3er
-ve4ty
-vi5ali
-5vian
-5vide.
-5vided
-4v3iden
-5vides
-5vidi
-v3if
-vi5gn
-vik4
-2vil
-5vilit
-v3i3liz
-v1in
-4vi4na
-v2inc
-vin5d
-4ving
-vio3l
-v3io4r
-vi1ou
-vi4p
-vi5ro
-vis3it
-vi3so
-vi3su
-4viti
-vit3r
-4vity
-3viv
-5vo.
-voi4
-3vok
-vo4la
-v5ole
-5volt
-3volv
-vom5i
-vor5ab
-vori4
-vo4ry
-vo4ta
-4votee
-4vv4
-v4y
-w5abl
-2wac
-wa5ger
-wag5o
-wait5
-w5al.
-wam4
-war4t
-was4t
-wa1te
-wa5ver
-w1b
-wea5rie
-weath3
-wed4n
-weet3
-wee5v
-wel4l
-w1er
-west3
-w3ev
-whi4
-wi2
-wil2
-will5in
-win4de
-win4g
-wir4
-3wise
-with3
-wiz5
-w4k
-wl4es
-wl3in
-w4no
-1wo2
-wom1
-wo5ven
-w5p
-wra4
-wri4
-writa4
-w3sh
-ws4l
-ws4pe
-w5s4t
-4wt
-wy4
-x1a
-xac5e
-x4ago
-xam3
-x4ap
-xas5
-x3c2
-x1e
-xe4cuto
-x2ed
-xer4i
-xe5ro
-x1h
-xhi2
-xhil5
-xhu4
-x3i
-xi5a
-xi5c
-xi5di
-x4ime
-xi5miz
-x3o
-x4ob
-x3p
-xpan4d
-xpecto5
-xpe3d
-x1t2
-x3ti
-x1u
-xu3a
-xx4
-y5ac
-3yar4
-y5at
-y1b
-y1c
-y2ce
-yc5er
-y3ch
-ych4e
-ycom4
-ycot4
-y1d
-y5ee
-y1er
-y4erf
-yes4
-ye4t
-y5gi
-4y3h
-y1i
-y3la
-ylla5bl
-y3lo
-y5lu
-ymbol5
-yme4
-ympa3
-yn3chr
-yn5d
-yn5g
-yn5ic
-5ynx
-y1o4
-yo5d
-y4o5g
-yom4
-yo5net
-y4ons
-y4os
-y4ped
-yper5
-yp3i
-y3po
-y4poc
-yp2ta
-y5pu
-yra5m
-yr5ia
-y3ro
-yr4r
-ys4c
-y3s2e
-ys3ica
-ys3io
-3ysis
-y4so
-yss4
-ys1t
-ys3ta
-ysur4
-y3thin
-yt3ic
-y1w
-za1
-z5a2b
-zar2
-4zb
-2ze
-ze4n
-ze4p
-z1er
-ze3ro
-zet4
-2z1i
-z4il
-z4is
-5zl
-4zm
-1zo
-zo4m
-zo5ol
-zte4
-4z1z2
-z4zy
-}
-\hyphenation{ % Do NOT make any alterations to this list! --- DEK
-as-so-ciate
-as-so-ciates
-dec-li-na-tion
-oblig-a-tory
-phil-an-thropic
-present
-presents
-project
-projects
-reci-procity
-re-cog-ni-zance
-ref-or-ma-tion
-ret-ri-bu-tion
-ta-ble
-}
diff --git a/contrib/groff/tmac/hyphenex.pl b/contrib/groff/tmac/hyphenex.pl
deleted file mode 100644
index 310f9b0674f0..000000000000
--- a/contrib/groff/tmac/hyphenex.pl
+++ /dev/null
@@ -1,78 +0,0 @@
-#! /usr/bin/perl
-#
-#
-# hyphenex.pl
-#
-# This small filter converts a hyphenation exception log article for
-# TUGBoat to a real \hyphenation block.
-#
-# Written by Werner Lemberg <wl@gnu.org>.
-#
-# Version 1.1 (2003/04/17)
-#
-# Public domain.
-#
-#
-# Usage:
-#
-# [perl] hyphenex.pl < tugboat-article > hyphenation-exceptions
-
-# print header
-print "% Hyphenation exceptions for US English,\n";
-print "% based on the hyphenation exception log article in TUGBoat.\n";
-print "%\n";
-print "% This is an automatically generated file. Do not edit!\n";
-print "%\n";
-print "% Please contact Barbara Beeton <bnb\@ams.org>\n";
-print "% for corrections and omissions.\n";
-print "\n";
-print "\\hyphenation{\n";
-
-while (<>) {
- # retain only lines starting with \1 ... \6 or \tabalign
- next if not (m/^\\[123456]/ || m/^\\tabalign/);
- # remove final newline
- chop;
- # remove all TeX commands except \1 ... \6
- s/\\[^123456\s{]+//g;
- # remove all paired { ... }
- 1 while s/{(.*?)}/\1/g;
- # skip lines which now have only whitespace before `&'
- next if m/^\s*&/;
- # remove comments
- s/%.*//;
- # remove trailing whitespace
- s/\s*$//;
- # remove trailing `*' (used as a marker in the document)
- s/\*$//;
- # split at whitespace
- @field = split(' ');
- if ($field[0] eq "\\1" || $field[0] eq "\\4") {
- print " $field[2]\n";
- }
- elsif ($field[0] eq "\\2" || $field[0] eq "\\5") {
- print " $field[2]\n";
- # handle multiple suffixes separated by commata
- @suffix_list = split(/,/, "$field[3]");
- foreach $suffix (@suffix_list) {
- print " $field[2]$suffix\n";
- }
- }
- elsif ($field[0] eq "\\3" || $field[0] eq "\\6") {
- # handle multiple suffixes separated by commata
- @suffix_list = split(/,/, "$field[3],$field[4]");
- foreach $suffix (@suffix_list) {
- print " $field[2]$suffix\n";
- }
- }
- else {
- # for `&', split at `&' with trailing whitespace
- @field = split(/&\s*/);
- print " $field[1]\n";
- }
-}
-
-# print trailer
-print "}\n";
-print "\n";
-print "% EOF\n";
diff --git a/contrib/groff/tmac/hyphenex.us b/contrib/groff/tmac/hyphenex.us
deleted file mode 100644
index 69ca757b3b13..000000000000
--- a/contrib/groff/tmac/hyphenex.us
+++ /dev/null
@@ -1,896 +0,0 @@
-% Hyphenation exceptions for US English, based on the hyphenation exception
-% log article in TUGBoat.
-%
-% This is an automatically generated file. Do not edit!
-
-\hyphenation{
- acad-e-my
- acad-e-mies
- ac-cu-sa-tive
- acryl-amide
- acryl-alde-hyde
- add-a-ble
- add-i-ble
- adren-a-line
- aero-space
- aero-spaces
- af-ter-thought
- af-ter-thoughts
- agron-o-mist
- agron-o-mists
- al-ge-bra-i-cal-ly
- am-phet-a-mine
- an-a-lyse
- an-a-lysed
- analy-ses
- an-isot-ropy
- an-isot-ro-pism
- an-iso-trop-ic
- an-iso-trop-i-cal-ly
- anom-aly
- anom-alies
- an-ti-deriv-a-tive
- an-ti-deriv-a-tives
- an-tin-o-my
- an-tin-o-mies
- an-ti-nu-clear
- an-ti-nu-cle-on
- an-ti-rev-o-lu-tion-ary
- apoth-e-o-ses
- apoth-e-o-sis
- ap-pen-dix
- ar-chi-me-dean
- ar-chi-pel-ago
- ar-chive
- ar-chives
- ar-chiv-ing
- ar-chiv-ist
- ar-chiv-ists
- ar-che-typ-al
- ar-che-typ-i-cal
- arc-tan-gent
- as-sign-a-ble
- as-sign-or
- as-sign-ors
- as-sist-ant-ship
- as-sist-ant-ships
- asymp-to-matic
- as-ymp-tot-ic
- asyn-chro-nous
- ath-er-o-scle-ro-sis
- at-mos-phere
- at-mos-pheres
- at-trib-uted
- at-trib-ut-able
- au-to-ma-tion
- au-tom-a-ton
- au-tom-a-ta
- av-oir-du-pois
- band-leader
- band-leaders
- bank-rupt
- bank-rupt-cy
- bar-onies
- base-line-skip
- ba-thym-e-try
- bathy-scaphe
- bean-ies
- be-hav-iour
- be-hav-iours
- bevies
- bib-li-og-ra-phy-style
- bi-dif-fer-en-tial
- big-gest
- bill-able
- bio-math-e-mat-ics
- bio-med-i-cine
- bio-rhythms
- bit-map
- bit-maps
- bland-er
- bland-est
- blind-er
- blondes
- blue-print
- blue-prints
- bo-lom-e-ter
- bor-no-log-i-cal
- bot-u-lism
- brusquer
- busier
- busiest
- bussing
- butted
- buzz-word
- buzz-words
- ca-coph-o-ny
- ca-coph-o-nies
- cam-era-men
- cart-wheel
- cart-wheels
- ca-tarrhs
- cat-a-stroph-ic
- cat-a-stroph-i-cally
- cat-e-noid
- cat-e-noids
- cau-li-flow-er
- cau-li-flow-ers
- chap-ar-ral
- chap-ar-rals
- char-treuse
- char-treuses
- chemo-ther-apy
- chemo-ther-a-pies
- cho-les-teric
- cig-a-rette
- cig-a-rettes
- cinque-foil
- co-gnac
- co-gnacs
- co-ker-nel
- co-ker-nels
- col-lin-ea-tion
- col-umns
- com-par-and
- com-par-ands
- com-pen-dium
- com-po-nent-wise
- comp-trol-ler
- comp-trol-lers
- con-form-able
- con-form-ist
- con-form-ists
- con-form-ity
- con-gress
- con-gresses
- con-trib-ute
- con-trib-utes
- con-trib-uted
- co-se-cant
- co-tan-gent
- cour-ses
- crank-shaft
- croc-o-dile
- croc-o-diles
- cross-hatch
- cross-hatched
- cryp-to-gram
- cryp-to-grams
- cu-nei-form
- cu-nei-forms
- dachs-hund
- dactyl-o-gram
- dactyl-o-graph
- data-base
- data-bases
- data-path
- data-paths
- date-stamp
- date-stamps
- de-clar-able
- de-fin-i-tive
- de-lec-ta-ble
- demi-semi-qua-ver
- demi-semi-qua-vers
- de-moc-ra-tism
- demos
- de-riv-a-tive
- de-riv-a-tives
- dia-lec-tic
- dia-lec-tics
- dia-lec-ti-cian
- dia-lec-ti-cians
- dif-fract
- direr
- dire-ness
- dis-par-and
- dis-par-ands
- dis-traught-ly
- dis-trib-ute
- dis-trib-uted
- dou-ble-space
- dou-ble-spac-ing
- doll-ish
- drift-age
- driv-ers
- drom-e-dary
- drom-e-daries
- du-op-o-list
- du-op-o-lists
- du-op-oly
- dys-lexia
- dys-lec-tic
- east-end-ers
- eco-nom-ics
- econ-o-mist
- econ-o-mists
- ei-gen-class
- ei-gen-classes
- ei-gen-val-ue
- ei-gen-val-ues
- electro-mechan-i-cal
- electro-mechano-acoustic
- elit-ist
- elit-ists
- en-tre-pre-neur
- en-tre-pre-neur-ial
- ep-i-neph-rine
- equi-vari-ant
- equi-vari-ance
- eth-yl-ene
- ever-si-ble
- evert
- everts
- evert-ed
- evert-ing
- ex-quis-ite
- ex-tra-or-di-nary
- fermi-ons
- fi-nite-ly
- fla-gel-lum
- fla-gel-la
- flam-ma-bles
- fledg-ling
- flow-chart
- flow-charts
- for-mi-da-ble
- for-mi-da-bly
- for-syth-ia
- forth-right
- free-loader
- free-loaders
- friend-lier
- fri-vol-ity
- fri-vol-i-ties
- friv-o-lous
- ga-lac-tic
- gal-axy
- gal-ax-ies
- gas-om-e-ter
- ge-o-des-ic
- ge-o-det-ic
- geo-met-ric
- geo-met-rics
- ge-ot-ro-pism
- gno-mon
- griev-ance
- griev-ous
- griev-ous-ly
- hair-style
- hair-styles
- hair-styl-ist
- half-space
- half-spaces
- half-way
- har-bin-ger
- har-bin-gers
- har-le-quin
- har-le-quins
- hatch-eries
- hemi-demi-semi-qua-ver
- hemi-demi-semi-qua-vers
- he-mo-glo-bin
- he-mo-phil-ia
- hemo-rhe-ol-ogy
- he-pat-ic
- her-maph-ro-dite
- her-maph-ro-dit-ic
- he-roes
- hexa-dec-i-mal
- ho-lo-no-my
- ho-meo-mor-phic
- ho-meo-mor-phism
- ho-mo-thetic
- horse-rad-ish
- hy-po-thal-a-mus
- ideals
- ideo-graphs
- idio-syn-crasy
- idio-syn-cras-ies
- ig-nit-er
- ig-nit-ers
- ig-ni-tor
- ignore-spaces
- im-ped-ances
- in-du-bi-ta-ble
- in-fin-ite-ly
- in-fin-i-tes-i-mal
- in-fra-struc-ture
- in-fra-struc-tures
- in-ter-dis-ci-pli-nary
- in-ter-ga-lac-tic
- in-utile
- in-util-i-ty
- ir-re-duc-ible
- ir-rev-o-ca-ble
- isot-ropy
- iso-trop-ic
- itin-er-ary
- itin-er-ar-ies
- je-re-mi-ads
- key-stroke
- key-strokes
- kiln-ing
- lac-i-est
- lam-en-ta-ble
- land-scap-er
- land-scap-ers
- lar-ce-ny
- lar-ce-n-ist
- leaf-hop-per
- leaf-hop-pers
- let-ter-spac-ing
- life-span
- life-spans
- life-style
- life-styles
- light-weight
- lim-ou-sines
- line-backer
- line-spacing
- li-on-ess
- lith-o-graphed
- lith-o-graphs
- lo-bot-omy
- lo-bot-om-ize
- loges
- long-est
- lo-quac-ity
- macro-eco-nomics
- mal-a-prop-ism
- man-u-script
- mar-gin-al
- math-e-ma-ti-cian
- math-e-ma-ti-cians
- mattes
- med-ic-aid
- medi-ocre
- medi-oc-ri-ties
- mega-lith
- mega-liths
- meta-bol-ic
- me-tab-o-lism
- me-tab-o-lisms
- meta-lan-guage
- meta-lan-guages
- meta-phor-ic
- me-trop-o-lis
- me-trop-o-lis-es
- met-ro-pol-i-tan
- met-ro-pol-i-tans
- micro-eco-nomics
- mi-cro-fiche
- mi-cro-fiches
- micro-organ-ism
- micro-organ-isms
- mill-age
- mil-li-liter
- mimeo-graphed
- mimeo-graphs
- mim-ic-ries
- min-is
- mini-sym-po-sium
- mini-sym-po-sia
- mi-nut-er
- mi-nut-est
- mis-chie-vous-ly
- mi-sers
- mi-sog-a-my
- mod-el-ling
- mol-e-cule
- mol-e-cules
- mon-archs
- money-len-der
- money-len-ders
- mono-chrome
- mono-en-er-getic
- mon-oid
- mono-pole
- mono-poles
- mo-nop-oly
- mono-spline
- mono-splines
- mono-strofic
- mo-not-o-nies
- mo-not-o-nous
- mo-ron-ism
- mo-ron-isms
- mos-qui-to
- mos-qui-tos
- mos-qui-toes
- mud-room
- mud-rooms
- mul-ti-fac-eted
- mul-ti-plic-able
- multi-user
- neo-fields
- neo-nazi
- neo-nazis
- new-est
- news-let-ter
- news-let-ters
- no-name
- non-ar-ith-met-ic
- non-emer-gency
- non-equi-vari-ance
- none-the-less
- non-euclid-ean
- non-iso-mor-phic
- non-pseudo-com-pact
- non-smooth
- non-uni-form
- non-uni-form-ly
- nor-ep-i-neph-rine
- not-with-stand-ing
- nu-cleo-tide
- nu-cleo-tides
- nut-crack-er
- nut-crack-ers
- oer-steds
- oli-gop-o-list
- oli-gop-o-lists
- oli-gop-oly
- oli-gop-ol-ies
- op-er-and
- op-er-ands
- orang-utan
- orang-utans
- or-tho-don-tist
- or-tho-don-tists
- or-tho-ker-a-tol-ogy
- ortho-nitro-toluene
- over-view
- over-views
- ox-id-ic
- pad-ding
- pain-less-ly
- palmate
- par-a-bola
- par-a-bol-ic
- pa-rab-o-loid
- par-a-digm
- par-a-digms
- para-chute
- para-chutes
- para-di-methyl-benzene
- para-fluoro-toluene
- para-graph-er
- para-le-gal
- par-al-lel-ism
- para-mag-net-ism
- para-medic
- para-methyl-anisole
- pa-ram-e-trize
- para-mil-i-tary
- para-mount
- path-o-gen-ic
- peev-ish
- peev-ish-ness
- pen-ta-gon
- pen-ta-gons
- pe-tro-le-um
- phe-nom-e-non
- phenyl-ala-nine
- phi-lat-e-list
- phi-lat-e-lists
- pho-neme
- pho-nemes
- pho-ne-mic
- phos-phor-ic
- pho-to-graphs
- pho-to-off-set
- pho-to-off-sets
- pic-a-dor
- pipe-line
- pipe-lines
- pi-ra-nhas
- placa-ble
- plant-hop-per
- plant-hop-pers
- pleas-ance
- plug-in
- plug-ins
- pol-ter-geist
- poly-ene
- poly-eth-yl-ene
- po-lyg-a-mist
- po-lyg-a-mists
- polyg-on-i-za-tion
- po-lyph-o-nous
- poly-styrene
- pome-gran-ate
- poro-elas-tic
- por-ous
- por-ta-ble
- post-am-ble
- post-am-bles
- post-hu-mous
- post-script
- post-scripts
- pos-tur-al
- pre-am-ble
- pre-am-bles
- pre-loaded
- pre-par-ing
- pre-print
- pre-prints
- pre-proces-sor
- pre-proces-sors
- pre-split-ting
- priest-esses
- pret-ty-prin-ter
- pret-ty-prin-ting
- pro-ce-dur-al
- process
- pro-cur-ance
- prog-e-nies
- prog-e-ny
- pro-hib-i-tive
- pro-hib-i-tive-ly
- pro-sciut-to
- pro-test-er
- pro-test-ers
- pro-tes-tor
- pro-tes-tors
- pro-to-lan-guage
- pro-to-typ-al
- prov-ince
- prov-inces
- pro-vin-cial
- pseu-do-dif-fer-en-tial
- pseu-do-fi-nite
- pseu-do-fi-nite-ly
- pseu-do-forces
- pseu-dog-ra-pher
- pseu-do-group
- pseu-do-groups
- pseu-do-nym
- pseu-do-nyms
- pseu-do-word
- pseu-do-words
- psy-che-del-ic
- psychs
- pu-bes-cence
- quad-ding
- qua-drat-ic
- qua-drat-ics
- quad-ra-ture
- quad-ri-pleg-ic
- quaint-er
- quaint-est
- qua-si-equiv-a-lence
- qua-si-equiv-a-lences
- qua-si-hy-po-nor-mal
- qua-si-rad-i-cal
- qua-si-resid-ual
- qua-si-smooth
- qua-si-sta-tion-ary
- qua-si-topos
- qua-si-tri-an-gu-lar
- quin-tes-sence
- quin-tes-sences
- quin-tes-sen-tial
- rab-bit-ry
- ra-di-og-ra-phy
- raff-ish
- raff-ish-ly
- ram-shackle
- rav-en-ous
- re-arrange-ment
- re-arrange-ments
- rec-i-proc-i-ties
- rec-i-proc-i-ty
- rec-tan-gle
- rec-tan-gles
- re-di-rect
- re-di-rect-ion
- re-duc-ible
- re-echo
- re-po-si-tion
- re-po-si-tions
- re-print
- re-prints
- re-stor-able
- retro-fit
- retro-fit-ted
- re-us-able
- re-use
- re-wire
- re-write
- rhi-noc-er-os
- right-eous
- right-eous-ness
- ring-leader
- ring-leaders
- ro-bot
- ro-bots
- ro-bot-ics
- round-table
- round-tables
- sales-clerk
- sales-clerks
- sales-woman
- sales-women
- sal-mo-nel-la
- sal-ta-tion
- sar-sa-par-il-la
- sauer-kraut
- scat-o-log-i-cal
- sched-ul-ing
- schiz-o-phrenic
- schnau-zer
- school-child
- school-child-ren
- school-teacher
- school-teach-ers
- scru-ti-ny
- scyth-ing
- sec-re-tar-iat
- sec-re-tar-iats
- sem-a-phore
- sem-a-phores
- se-mes-ter
- semi-def-i-nite
- semi-di-rect
- semi-ho-mo-thet-ic
- semi-ring
- semi-rings
- semi-sim-ple
- semi-skilled
- sero-epi-de-mi-o-log-i-cal
- ser-vo-mech-anism
- ser-vo-mech-anisms
- ses-qui-pe-da-lian
- set-up
- set-ups
- se-vere-ly
- shape-able
- shoe-string
- shoe-strings
- side-step
- side-steps
- side-swipe
- sky-scraper
- sky-scrapers
- smoke-stack
- smoke-stacks
- snor-kel-ing
- so-le-noid
- so-le-noids
- solute
- solutes
- sov-er-eign
- sov-er-eigns
- spa-ces
- spe-cious
- spe-lunk-er
- spend-thrift
- spher-oid
- spher-oid-al
- sphin-ges
- spic-i-ly
- spin-ors
- spokes-woman
- spokes-women
- sports-cast
- sports-cast-er
- spor-tive-ly
- sports-wear
- sports-writer
- sports-writers
- spright-lier
- squea-mish
- stand-alone
- star-tling
- star-tling-ly
- sta-tis-tics
- stealth-ily
- steeple-chase
- stereo-graph-ic
- sto-chas-tic
- strange-ness
- strap-hanger
- strat-a-gem
- strat-a-gems
- stretch-i-er
- strong-hold
- strong-est
- stu-pid-er
- stu-pid-est
- sub-dif-fer-en-tial
- sum-ma-ble
- super-ego
- super-egos
- su-prema-cist
- su-prema-cists
- sur-veil-lance
- swim-ming-ly
- symp-to-matic
- syn-chro-mesh
- syn-chro-nous
- syn-chro-tron
- talk-a-tive
- ta-pes-try
- ta-pes-tries
- tar-pau-lin
- te-leg-ra-pher
- tele-ki-net-ic
- tele-ro-bot-ics
- tem-po-rar-ily
- ten-ure
- test-bed
- text-width
- text-widths
- thal-a-mus
- ther-mo-elas-tic
- time-stamp
- time-stamps
- tool-kit
- tool-kits
- topo-graph-i-cal
- toques
- trai-tor-ous
- trans-ceiver
- trans-ceivers
- trans-gress
- trans-ver-sal
- trans-ver-sals
- trans-ves-tite
- trans-ves-tites
- tra-vers-a-ble
- tra-ver-sal
- tra-ver-sals
- treach-eries
- trou-ba-dour
- tur-key
- tur-keys
- turn-around
- turn-arounds
- typ-al
- un-at-tached
- un-err-ing-ly
- un-friend-ly
- un-friend-li-er
- vaguer
- vaude-ville
- vaude-villes
- vic-ars
- vil-lain-ess
- vi-vip-a-rous
- voice-print
- vspace
- wad-ding
- wall-flower
- wall-flow-ers
- warm-est
- waste-water
- wave-guide
- wave-let
- wave-lets
- web-like
- week-night
- week-nights
- wheel-chair
- wheel-chairs
- which-ever
- white-sided
- white-space
- white-spaces
- wide-spread
- wing-spread
- witch-craft
- word-spac-ing
- work-around
- work-arounds
- work-horse
- work-horses
- wrap-around
- wretch-ed
- wretch-ed-ly
- yes-ter-year
- al-ge-brai-sche
- Al-le-ghe-ny
- Ar-kan-sas
- Aus-tral-asian
- auto-mati-sier-ter
- Be-die-nung
- Bembo
- bib-li-o-gra-phi-sche
- Bos-ton
- Brown-ian
- Bruns-wick
- Bu-da-pest
- Car-ib-bean
- Charles-ton
- Char-lottes-ville
- Co-lum-bia
- Czecho-slo-va-kia
- Dijk-stra
- dy-na-mi-sche
- Eng-lish
- Euler-ian
- Evan-ston
- Feb-ru-ary
- Fest-schrift
- Flor-i-da
- For-schungs-in-sti-tut
- funk-tsional
- Gauss-ian
- Greifs-wald
- Grothen-dieck
- Grund-leh-ren
- Hai-fa
- Hamil-ton-ian
- Hel-sinki
- Her-mit-ian
- Hibbs
- Hok-kai-do
- Jan-u-ary
- Ja-pa-nese
- Kad-om-tsev
- Kan-sas
- Karls-ruhe
- Kor-te-weg
- Krishna
- Krish-na-ism
- Krish-nan
- Lan-cas-ter
- Le-gendre
- Leices-ter
- Lip-schitz
- Lip-schitz-ian
- Lou-i-si-ana
- Man-ches-ter
- Mar-kov-ian
- Markt-ober-dorf
- Mass-a-chu-setts
- Min-ne-ap-o-lis
- Min-ne-sota
- Mos-cow
- Nach-richten
- Nash-ville
- Nij-me-gen
- Noe-ther-ian
- Noord-wijker-hout
- No-vem-ber
- Pa-ler-mo
- Pe-trov-ski
- Phil-a-del-phia
- Poin-care
- Po-ten-tial-glei-chung
- raths-kel-ler
- Rie-mann-ian
- Ryd-berg
- schot-tische
- Schro-ding-er
- Schwa-ba-cher
- Schwarz-schild
- Sep-tem-ber
- Stokes-sche
- Stutt-gart
- Sus-que-han-na
- Tau-ber-ian
- tech-ni-sche
- Ten-nes-see
- ty-po-graphique
- Ukrain-ian
- ver-all-ge-mein-erte
- Ver-ein-i-gung
- Ver-tei-lun-gen
- viiith
- viith
- Wahr-schein-lich-keits-theo-rie
- Wer-ther-ian
- Win-ches-ter
- Wirt-schaft
- wis-sen-schaft-lich
- xviiith
- xviith
- xxiiird
- xxiind
- Ying-yong Shu-xue Ji-suan
- Zea-land
- Zeit-schrift
-}
-
-% EOF
diff --git a/contrib/groff/tmac/latin1.tmac b/contrib/groff/tmac/latin1.tmac
deleted file mode 100644
index c521c280c914..000000000000
--- a/contrib/groff/tmac/latin1.tmac
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" latin1.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.\" 0xA1
-.trin \[char161]\[r!]
-.trin \[char162]\[ct]
-.trin \[char163]\[Po]
-.trin \[char164]\[Cs]
-.trin \[char165]\[Ye]
-.trin \[char166]\[bb]
-.trin \[char167]\[sc]
-.trin \[char168]\[ad]
-.trin \[char169]\[co]
-.trin \[char170]\[Of]
-.trin \[char171]\[Fo]
-.trin \[char172]\[tno]
-.\" The soft-hyphen character is only an input character
-.tr \[char173]\%
-.trin \[char174]\[rg]
-.trin \[char175]\[a-]
-.\" 0xB0
-.trin \[char176]\[de]
-.trin \[char177]\[t+-]
-.trin \[char178]\[S2]
-.trin \[char179]\[S3]
-.trin \[char180]\[aa]
-.trin \[char181]\[mc]
-.trin \[char182]\[ps]
-.trin \[char183]\[pc]
-.trin \[char184]\[ac]
-.trin \[char185]\[S1]
-.trin \[char186]\[Om]
-.trin \[char187]\[Fc]
-.trin \[char188]\[14]
-.trin \[char189]\[12]
-.trin \[char190]\[34]
-.trin \[char191]\[r?]
-.\" 0xC0
-.trin \[char192]\[`A]
-.trin \[char193]\['A]
-.trin \[char194]\[^A]
-.trin \[char195]\[~A]
-.trin \[char196]\[:A]
-.trin \[char197]\[oA]
-.trin \[char198]\[AE]
-.trin \[char199]\[,C]
-.trin \[char200]\[`E]
-.trin \[char201]\['E]
-.trin \[char202]\[^E]
-.trin \[char203]\[:E]
-.trin \[char204]\[`I]
-.trin \[char205]\['I]
-.trin \[char206]\[^I]
-.trin \[char207]\[:I]
-.\" 0xD0
-.trin \[char208]\[-D]
-.trin \[char209]\[~N]
-.trin \[char210]\[`O]
-.trin \[char211]\['O]
-.trin \[char212]\[^O]
-.trin \[char213]\[~O]
-.trin \[char214]\[:O]
-.trin \[char215]\[tmu]
-.trin \[char216]\[/O]
-.trin \[char217]\[`U]
-.trin \[char218]\['U]
-.trin \[char219]\[^U]
-.trin \[char220]\[:U]
-.trin \[char221]\['Y]
-.trin \[char222]\[TP]
-.trin \[char223]\[ss]
-.\" 0xE0
-.trin \[char224]\[`a]
-.trin \[char225]\['a]
-.trin \[char226]\[^a]
-.trin \[char227]\[~a]
-.trin \[char228]\[:a]
-.trin \[char229]\[oa]
-.trin \[char230]\[ae]
-.trin \[char231]\[,c]
-.trin \[char232]\[`e]
-.trin \[char233]\['e]
-.trin \[char234]\[^e]
-.trin \[char235]\[:e]
-.trin \[char236]\[`i]
-.trin \[char237]\['i]
-.trin \[char238]\[^i]
-.trin \[char239]\[:i]
-.\" 0xF0
-.trin \[char240]\[Sd]
-.trin \[char241]\[~n]
-.trin \[char242]\[`o]
-.trin \[char243]\['o]
-.trin \[char244]\[^o]
-.trin \[char245]\[~o]
-.trin \[char246]\[:o]
-.trin \[char247]\[tdi]
-.trin \[char248]\[/o]
-.trin \[char249]\[`u]
-.trin \[char250]\['u]
-.trin \[char251]\[^u]
-.trin \[char252]\[:u]
-.trin \[char253]\['y]
-.trin \[char254]\[Tp]
-.trin \[char255]\[:y]
-.cp \n[_C]
diff --git a/contrib/groff/tmac/latin2.tmac b/contrib/groff/tmac/latin2.tmac
deleted file mode 100644
index ffdc39cd7384..000000000000
--- a/contrib/groff/tmac/latin2.tmac
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" latin2.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.\" 0xA1
-.trin \[char161]\[A ho]
-.trin \[char162]\[ab]
-.trin \[char163]\[/L]
-.trin \[char164]\[Cs]
-.trin \[char165]\[L ah]
-.trin \[char166]\[S aa]
-.trin \[char167]\[sc]
-.trin \[char168]\[ad]
-.trin \[char169]\[vS]
-.trin \[char170]\[S ac]
-.trin \[char171]\[T ah]
-.trin \[char172]\[Z aa]
-.\" The soft-hyphen character is only an input character
-.tr \[char173]\%
-.trin \[char174]\[vZ]
-.trin \[char175]\[Z a.]
-.\" 0xB0
-.trin \[char176]\[de]
-.trin \[char177]\[a ho]
-.trin \[char178]\[ho]
-.trin \[char179]\[/l]
-.trin \[char180]\[aa]
-.trin \[char181]\[l ah]
-.trin \[char182]\[s aa]
-.trin \[char183]\[ah]
-.trin \[char184]\[ac]
-.trin \[char185]\[vs]
-.trin \[char186]\[s ac]
-.trin \[char187]\[t ah]
-.trin \[char188]\[z aa]
-.trin \[char189]\[a"]
-.trin \[char190]\[vz]
-.trin \[char191]\[z a.]
-.\" C0
-.trin \[char192]\[R aa]
-.trin \[char193]\['A]
-.trin \[char194]\[^A]
-.trin \[char195]\[A ab]
-.trin \[char196]\[:A]
-.trin \[char197]\[L aa]
-.trin \[char198]\[C aa]
-.trin \[char199]\[,C]
-.trin \[char200]\[C ah]
-.trin \[char201]\['E]
-.trin \[char202]\[E ho]
-.trin \[char203]\[:E]
-.trin \[char204]\[E ah]
-.trin \[char205]\['I]
-.trin \[char206]\[^I]
-.trin \[char207]\[D ah]
-.\" 0xD0
-.trin \[char208]\[u0110]
-.trin \[char209]\[N aa]
-.trin \[char210]\[N ah]
-.trin \[char211]\['O]
-.trin \[char212]\[^O]
-.trin \[char213]\[O a"]
-.trin \[char214]\[:O]
-.trin \[char215]\[tmu]
-.trin \[char216]\[R ah]
-.trin \[char217]\[U ao]
-.trin \[char218]\['U]
-.trin \[char219]\[U a"]
-.trin \[char220]\[:U]
-.trin \[char221]\['Y]
-.trin \[char222]\[T ac]
-.trin \[char223]\[ss]
-.\" 0xE0
-.trin \[char224]\[r aa]
-.trin \[char225]\['a]
-.trin \[char226]\[^a]
-.trin \[char227]\[a ab]
-.trin \[char228]\[:a]
-.trin \[char229]\[l aa]
-.trin \[char230]\[c aa]
-.trin \[char231]\[,c]
-.trin \[char232]\[c ah]
-.trin \[char233]\['e]
-.trin \[char234]\[e ho]
-.trin \[char235]\[:e]
-.trin \[char236]\[e ah]
-.trin \[char237]\['i]
-.trin \[char238]\[^i]
-.trin \[char239]\[d ah]
-.\" 0xF0
-.trin \[char240]\[u0111]
-.trin \[char241]\[n aa]
-.trin \[char242]\[n ah]
-.trin \[char243]\['o]
-.trin \[char244]\[^o]
-.trin \[char245]\[o a"]
-.trin \[char246]\[:o]
-.trin \[char247]\[tdi]
-.trin \[char248]\[r ah]
-.trin \[char249]\[u ao]
-.trin \[char250]\['u]
-.trin \[char251]\[u a"]
-.trin \[char252]\[:u]
-.trin \[char253]\['y]
-.trin \[char254]\[t ac]
-.trin \[char255]\[a.]
-.cp \n[_C]
diff --git a/contrib/groff/tmac/latin5.tmac b/contrib/groff/tmac/latin5.tmac
deleted file mode 100644
index 8400df4e1317..000000000000
--- a/contrib/groff/tmac/latin5.tmac
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" latin5.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.\" 0xA1
-.trin \[char161]\[r!]
-.trin \[char162]\[ct]
-.trin \[char163]\[Po]
-.trin \[char164]\[Cs]
-.trin \[char165]\[Ye]
-.trin \[char166]\[bb]
-.trin \[char167]\[sc]
-.trin \[char168]\[ad]
-.trin \[char169]\[co]
-.trin \[char170]\[Of]
-.trin \[char171]\[Fo]
-.trin \[char172]\[tno]
-.\" The soft-hyphen character is only an input character
-.tr \[char173]\%
-.trin \[char174]\[rg]
-.trin \[char175]\[a-]
-.\" 0xB0
-.trin \[char176]\[de]
-.trin \[char177]\[t+-]
-.trin \[char178]\[S2]
-.trin \[char179]\[S3]
-.trin \[char180]\[aa]
-.trin \[char181]\[mc]
-.trin \[char182]\[ps]
-.trin \[char183]\[pc]
-.trin \[char184]\[ac]
-.trin \[char185]\[S1]
-.trin \[char186]\[Om]
-.trin \[char187]\[Fc]
-.trin \[char188]\[14]
-.trin \[char189]\[12]
-.trin \[char190]\[34]
-.trin \[char191]\[r?]
-.\" 0xC0
-.trin \[char192]\[`A]
-.trin \[char193]\['A]
-.trin \[char194]\[^A]
-.trin \[char195]\[~A]
-.trin \[char196]\[:A]
-.trin \[char197]\[oA]
-.trin \[char198]\[AE]
-.trin \[char199]\[,C]
-.trin \[char200]\[`E]
-.trin \[char201]\['E]
-.trin \[char202]\[^E]
-.trin \[char203]\[:E]
-.trin \[char204]\[`I]
-.trin \[char205]\['I]
-.trin \[char206]\[^I]
-.trin \[char207]\[:I]
-.\" 0xD0
-.trin \[char208]\[G ab]
-.trin \[char209]\[~N]
-.trin \[char210]\[`O]
-.trin \[char211]\['O]
-.trin \[char212]\[^O]
-.trin \[char213]\[~O]
-.trin \[char214]\[:O]
-.trin \[char215]\[tmu]
-.trin \[char216]\[/O]
-.trin \[char217]\[`U]
-.trin \[char218]\['U]
-.trin \[char219]\[^U]
-.trin \[char220]\[:U]
-.trin \[char221]\[I .]
-.trin \[char222]\[S ,]
-.trin \[char223]\[ss]
-.\" 0xE0
-.trin \[char224]\[`a]
-.trin \[char225]\['a]
-.trin \[char226]\[^a]
-.trin \[char227]\[~a]
-.trin \[char228]\[:a]
-.trin \[char229]\[oa]
-.trin \[char230]\[ae]
-.trin \[char231]\[,c]
-.trin \[char232]\[`e]
-.trin \[char233]\['e]
-.trin \[char234]\[^e]
-.trin \[char235]\[:e]
-.trin \[char236]\[`i]
-.trin \[char237]\['i]
-.trin \[char238]\[^i]
-.trin \[char239]\[:i]
-.\" 0xF0
-.trin \[char240]\[g ab]
-.trin \[char241]\[~n]
-.trin \[char242]\[`o]
-.trin \[char243]\['o]
-.trin \[char244]\[^o]
-.trin \[char245]\[~o]
-.trin \[char246]\[:o]
-.trin \[char247]\[tdi]
-.trin \[char248]\[/o]
-.trin \[char249]\[`u]
-.trin \[char250]\['u]
-.trin \[char251]\[^u]
-.trin \[char252]\[:u]
-.trin \[char253]\[.i]
-.trin \[char254]\[s ,]
-.trin \[char255]\[:y]
-.cp \n[_C]
diff --git a/contrib/groff/tmac/latin9.tmac b/contrib/groff/tmac/latin9.tmac
deleted file mode 100644
index 6d56232c6b64..000000000000
--- a/contrib/groff/tmac/latin9.tmac
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" latin9.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.\" 0xA1
-.trin \[char161]\[r!]
-.trin \[char162]\[ct]
-.trin \[char163]\[Po]
-.trin \[char164]\[Eu]
-.trin \[char165]\[Ye]
-.trin \[char166]\[vS]
-.trin \[char167]\[sc]
-.trin \[char168]\[vs]
-.trin \[char169]\[co]
-.trin \[char170]\[Of]
-.trin \[char171]\[Fo]
-.trin \[char172]\[tno]
-.\" The soft-hyphen character is only an input character
-.tr \[char173]\%
-.trin \[char174]\[rg]
-.trin \[char175]\[a-]
-.\" 0xB0
-.trin \[char176]\[de]
-.trin \[char177]\[t+-]
-.trin \[char178]\[S2]
-.trin \[char179]\[S3]
-.trin \[char180]\[vZ]
-.trin \[char181]\[mc]
-.trin \[char182]\[ps]
-.trin \[char183]\[pc]
-.trin \[char184]\[vz]
-.trin \[char185]\[S1]
-.trin \[char186]\[Om]
-.trin \[char187]\[Fc]
-.trin \[char188]\[OE]
-.trin \[char189]\[oe]
-.trin \[char190]\[:Y]
-.trin \[char191]\[r?]
-.\" 0xC0
-.trin \[char192]\[`A]
-.trin \[char193]\['A]
-.trin \[char194]\[^A]
-.trin \[char195]\[~A]
-.trin \[char196]\[:A]
-.trin \[char197]\[oA]
-.trin \[char198]\[AE]
-.trin \[char199]\[,C]
-.trin \[char200]\[`E]
-.trin \[char201]\['E]
-.trin \[char202]\[^E]
-.trin \[char203]\[:E]
-.trin \[char204]\[`I]
-.trin \[char205]\['I]
-.trin \[char206]\[^I]
-.trin \[char207]\[:I]
-.\" 0xD0
-.trin \[char208]\[-D]
-.trin \[char209]\[~N]
-.trin \[char210]\[`O]
-.trin \[char211]\['O]
-.trin \[char212]\[^O]
-.trin \[char213]\[~O]
-.trin \[char214]\[:O]
-.trin \[char215]\[tmu]
-.trin \[char216]\[/O]
-.trin \[char217]\[`U]
-.trin \[char218]\['U]
-.trin \[char219]\[^U]
-.trin \[char220]\[:U]
-.trin \[char221]\['Y]
-.trin \[char222]\[TP]
-.trin \[char223]\[ss]
-.\" 0xE0
-.trin \[char224]\[`a]
-.trin \[char225]\['a]
-.trin \[char226]\[^a]
-.trin \[char227]\[~a]
-.trin \[char228]\[:a]
-.trin \[char229]\[oa]
-.trin \[char230]\[ae]
-.trin \[char231]\[,c]
-.trin \[char232]\[`e]
-.trin \[char233]\['e]
-.trin \[char234]\[^e]
-.trin \[char235]\[:e]
-.trin \[char236]\[`i]
-.trin \[char237]\['i]
-.trin \[char238]\[^i]
-.trin \[char239]\[:i]
-.\" 0xF0
-.trin \[char240]\[Sd]
-.trin \[char241]\[~n]
-.trin \[char242]\[`o]
-.trin \[char243]\['o]
-.trin \[char244]\[^o]
-.trin \[char245]\[~o]
-.trin \[char246]\[:o]
-.trin \[char247]\[tdi]
-.trin \[char248]\[/o]
-.trin \[char249]\[`u]
-.trin \[char250]\['u]
-.trin \[char251]\[^u]
-.trin \[char252]\[:u]
-.trin \[char253]\['y]
-.trin \[char254]\[Tp]
-.trin \[char255]\[:y]
-.cp \n[_C]
diff --git a/contrib/groff/tmac/lbp.tmac b/contrib/groff/tmac/lbp.tmac
deleted file mode 100644
index fab29b571340..000000000000
--- a/contrib/groff/tmac/lbp.tmac
+++ /dev/null
@@ -1,94 +0,0 @@
-.\" lbp.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.ftr CW CR
-.ftr C CR
-.ftr CO CI
-.ftr H HR
-.ftr HO HI
-.ftr HX HBI
-.ftr Hr HNR
-.ftr Hi HNI
-.ftr Hb HNB
-.ftr Hx HNBI
-.ftr EBI EI
-.ftr CBI CI
-.
-.fchar \[fi] fi
-.fchar \[fl] fl
-.fchar \[ff] ff
-.fchar \[Fi] f\[fi]
-.fchar \[Fl] f\[fl]
-.fchar \[OE] OE
-.fchar \[oe] oe
-.fchar \[IJ] IJ
-.fchar \[ij] ij
-.fchar \[.i] i
-.fchar \[lq] ``
-.fchar \[rq] ''
-.fchar \[fo] \v'-.1m'\s-3<\s+3\v'+.1m'
-.fchar \[fc] \v'-.1m'\s-3>\s+3\v'+.1m'
-.fchar \[em] \v'-.25m'\h'.05m'\D'l .9m 0'
-.
-.char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.
-.\" This is designed so that \[ul], \[rn], and \[br] form corners.
-.char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.
-.char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.
-.fchar \[|=] \v'.075m'\Z'\[mi]'\v'-.15m'\[ap]\v'.075m'
-.
-.de lbp-achar
-. \" Note that character definitions are always interpreted with
-. \" compatibility mode off.
-. fchar \\$1 \
-\\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\En[skw]+(\w'x'*0)-\\En[skw])'\
-\v'(u;\w'x'*0+\\En[rst]+(\w'\\$3'*0)-\\En[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\En[rst]+(\w'\\$3'*0)+\\En[rst])'\
-\h'|\\En[acc]u'
-. hcode \\$1\\$4
-..
-.
-.lbp-achar \['A] \' A a
-.lbp-achar \[`A] \` A a
-.lbp-achar \[^A] ^ A a
-.lbp-achar \['C] \' C c
-.lbp-achar \['c] \' c c
-.lbp-achar \[`E] \` E e
-.lbp-achar \[:E] \[ad] E e
-.lbp-achar \[^E] ^ E e
-.lbp-achar "\[G ab]" \[ab] G g
-.lbp-achar "\[g ab]" \[ab] g g
-.lbp-achar \['I] \' I i
-.lbp-achar \[`I] \` I i
-.lbp-achar \[:I] \[ad] I i
-.lbp-achar \[^I] ^ I i
-.lbp-achar "\[I .]" \[a.] I i
-.lbp-achar \['O] \' O o
-.lbp-achar \[`O] \` O o
-.lbp-achar \[^O] ^ O o
-.lbp-achar \[~O] ~ O o
-.lbp-achar \[~o] ~ o o
-.lbp-achar \['U] \' U u
-.lbp-achar \[`U] \` U u
-.lbp-achar \[^U] ^ U u
-.lbp-achar \['Y] \' Y y
-.lbp-achar \['y] \' y y
-.lbp-achar \[:Y] \[ad] Y y
-.
-.fchar \[S ,] \o'S\[ac]'
-.hcode \[S ,]s
-.fchar \[s ,] \o's\[ac]'
-.hcode \[s ,]s
-.
-.cp \n(_C
-.
-.do mso latin1.tmac
diff --git a/contrib/groff/tmac/lj4.tmac b/contrib/groff/tmac/lj4.tmac
deleted file mode 100644
index 94180232780c..000000000000
--- a/contrib/groff/tmac/lj4.tmac
+++ /dev/null
@@ -1,32 +0,0 @@
-.\" lj4.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.ftr CW CR
-.ftr C CR
-.ftr CX CBI
-.ftr H UR
-.ftr HR UR
-.ftr HB UB
-.ftr HBI UBI
-.ftr HI UI
-.ftr HO UI
-.ftr HX UBI
-.
-.char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.
-.\" This is designed so that \[ul], \[rn], and \[br] form corners.
-.char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.
-.char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.
-.fchar \[OK] \s[\En[.s]*6u/10u]\[rs]\s[0]/
-.
-.fchar \[sqrtex] \[radicalex]
-.
-.cp \n[_C]
-.
-.do mso latin1.tmac
diff --git a/contrib/groff/tmac/man.local b/contrib/groff/tmac/man.local
deleted file mode 100644
index c47b24334644..000000000000
--- a/contrib/groff/tmac/man.local
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" This file is loaded after an-old.tmac.
-.\" Put any local modifications to an-old.tmac here.
diff --git a/contrib/groff/tmac/man.tmac b/contrib/groff/tmac/man.tmac
deleted file mode 100644
index ca7d14dade67..000000000000
--- a/contrib/groff/tmac/man.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" man.tmac
-.\"
-.do mso andoc.tmac
diff --git a/contrib/groff/tmac/man.ultrix b/contrib/groff/tmac/man.ultrix
deleted file mode 100644
index 49d7b2566d0f..000000000000
--- a/contrib/groff/tmac/man.ultrix
+++ /dev/null
@@ -1,103 +0,0 @@
-.\" Install this as man.local if you're using Ultrix.
-.\" Ultrix specific additions to groff -man macros.
-.\" Written by James Clark from a specification by Martyn.Johnson@cl.cam.ac.uk.
-.\"
-.\" I1 and I2 are unimplemented.
-.de CT
-<CTRL/\\$1>
-..
-.de CW
-.ft CR
-..
-.de Ds
-.br
-.nf
-.ft R
-..
-.de De
-.ce 0
-.fi
-..
-.de EX
-.br
-.if \\n[.$] .in +(n;\\$1)
-.ft CR
-.nf
-..
-.de EE
-.fi
-.ft R
-.in \\n[an-margin]u
-..
-.de G
-.it 1 an-trap
-.ft H
-.if \\n[.$] \&\\$*
-..
-.de GL
-.it 1 an-trap
-.ft HI
-.if \\n[.$] \&\\$*
-..
-.if n .ig
-.de HB
-.ie \\n[.$] .ft HB
-.el \f[HB]\\$*\fP
-..
-.if t .ig
-.de HB
-.ie \\n[.$] .ul 999
-.el .ul
-\\$*
-..
-.als TB HB
-.de MS
-\&\f[CR]\\$1\fR(\\$2)\\$3
-..
-.de NT
-.br
-.ds an-note Note
-.ce 1
-.if \\n[.$] \{\
-. ie '\\$1'C' \{\
-. ce 99
-. if \\n[.$]>1 .ds an-note \\$2
-. \}
-. el \{\
-. ds an-note \\$1
-. if '\\$2'C' .ce 99
-. \}
-.\}
-.in \\n[an-margin]u+5n
-.ll \\n[LL]u-5n
-.sp .5v>?\n[.V]u
-\&\\*[an-note]
-.sp .5v>?\n[.V]u
-.
-..
-.de NE
-.ll \\n[LL]u
-.in \\n[an-margin]u
-.ce 0
-.sp .5v>?\n[.V]u
-..
-.de PN
-\&\f[CR]\\$1\fP\\$2
-..
-.de Pn
-.ie \\n(.$>1 \&\\$1\f[CR]\\$2\fP\\$3
-.el \&\f[CR]\\$1\fP\\$2
-..
-.de R
-.ft R
-.ul 0
-..
-.de RN
-<RETURN>
-..
-.de VS
-.if '\\$1'4' .mc \[br]
-..
-.de VE
-.mc
-..
diff --git a/contrib/groff/tmac/mandoc.tmac b/contrib/groff/tmac/mandoc.tmac
deleted file mode 100644
index ee21497196d1..000000000000
--- a/contrib/groff/tmac/mandoc.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" mandoc.tmac
-.\"
-.do mso andoc.tmac
diff --git a/contrib/groff/tmac/mdoc.tmac b/contrib/groff/tmac/mdoc.tmac
deleted file mode 100644
index 250d615d2308..000000000000
--- a/contrib/groff/tmac/mdoc.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" mdoc.tmac
-.\"
-.do mso doc.tmac
diff --git a/contrib/groff/tmac/me.tmac b/contrib/groff/tmac/me.tmac
deleted file mode 100644
index 0c90a9b55b65..000000000000
--- a/contrib/groff/tmac/me.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" me.tmac
-.\"
-.do mso e.tmac
diff --git a/contrib/groff/tmac/ms.tmac b/contrib/groff/tmac/ms.tmac
deleted file mode 100644
index 50e0370416a9..000000000000
--- a/contrib/groff/tmac/ms.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" ms.tmac
-.\"
-.do mso s.tmac
diff --git a/contrib/groff/tmac/papersize.tmac b/contrib/groff/tmac/papersize.tmac
deleted file mode 100644
index 57403491cee1..000000000000
--- a/contrib/groff/tmac/papersize.tmac
+++ /dev/null
@@ -1,158 +0,0 @@
-.\" papersize.tmac
-.\"
-.\" Set up groff for various paper sizes.
-.\"
-.\" Usage:
-.\"
-.\" groff ... -dpaper=<format> ...
-.\"
-.\" Possible values for `format' are the same as the predefined `papersize'
-.\" values (see the groff_font man page) except a7-d7. An appended `l'
-.\" (ell) character denotes landscape orientation. Examples: `a4', `c3l',
-.\" `letterl'.
-.\"
-.\" Most output drivers need additional command line switches `-p' and
-.\" `-l' to override the default paper length and orientation as set in
-.\" the driver specific DESC file.
-.\"
-.\" For example, use the following for PS output on A4 paper in landscape
-.\" orientation::
-.\"
-.\" groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-.
-.nr _C \n(.C
-.cp 0
-.
-.if d paper \{\
-. ds paper-a0-length 118.9c
-. ds paper-a0-width 84.1c
-. ds paper-a1-length 84.1c
-. ds paper-a1-width 59.4c
-. ds paper-a2-length 59.4c
-. ds paper-a2-width 42c
-. ds paper-a3-length 42c
-. ds paper-a3-width 29.7c
-. ds paper-a4-length 29.7c
-. ds paper-a4-width 21c
-. ds paper-a5-length 21c
-. ds paper-a5-width 14.8c
-. ds paper-a6-length 14.8c
-. ds paper-a6-width 10.5c
-.
-. ds paper-b0-length 141.4c
-. ds paper-b0-width 100c
-. ds paper-b1-length 100c
-. ds paper-b1-width 70.7c
-. ds paper-b2-length 70.7c
-. ds paper-b2-width 50c
-. ds paper-b3-length 50c
-. ds paper-b3-width 35.3c
-. ds paper-b4-length 35.3c
-. ds paper-b4-width 25c
-. ds paper-b5-length 25c
-. ds paper-b5-width 17.6c
-. ds paper-b6-length 17.6c
-. ds paper-b6-width 12.5c
-.
-. ds paper-c0-length 129.7c
-. ds paper-c0-width 91.7c
-. ds paper-c1-length 91.7c
-. ds paper-c1-width 64.8c
-. ds paper-c2-length 64.8c
-. ds paper-c2-width 45.8c
-. ds paper-c3-length 45.8c
-. ds paper-c3-width 32.4c
-. ds paper-c4-length 32.4c
-. ds paper-c4-width 22.9c
-. ds paper-c5-length 22.9c
-. ds paper-c5-width 16.2c
-. ds paper-c6-length 16.2c
-. ds paper-c6-width 11.4c
-.
-. ds paper-d0-length 109.0c
-. ds paper-d0-width 77.1c
-. ds paper-d1-length 77.1c
-. ds paper-d1-width 54.5c
-. ds paper-d2-length 54.5c
-. ds paper-d2-width 38.5c
-. ds paper-d3-length 38.5c
-. ds paper-d3-width 27.2c
-. ds paper-d4-length 27.2c
-. ds paper-d4-width 19.2c
-. ds paper-d5-length 19.2c
-. ds paper-d5-width 13.6c
-. ds paper-d6-length 13.6c
-. ds paper-d6-width 9.6c
-.
-. ds paper-letter-length 11i
-. ds paper-letter-width 8.5i
-. ds paper-legal-length 14i
-. ds paper-legal-width 8.5i
-. ds paper-tabloid-length 17i
-. ds paper-tabloid-width 11i
-. ds paper-ledger-length 11i
-. ds paper-ledger-width 17i
-. ds paper-statement-length 8.5i
-. ds paper-statement-width 5.5i
-. ds paper-executive-length 10i
-. ds paper-executive-width 7.5i
-.
-. ds paper-com10-length 9.5i
-. ds paper-com10-width 4.125i
-. ds paper-monarch-length 7.5i
-. ds paper-monarch-width 3.875i
-. ds paper-dl-length 22c
-. ds paper-dl-width 11c
-.
-. \" We assume that letters a-z and A-Z aren't mapped during start-up.
-. tr AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
-. di lowercase
-. nop \*[paper]
-. br
-. di
-. asciify lowercase
-. chop lowercase
-. tr AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ
-. ds paper \*[lowercase]
-. rm lowercase
-.
-. ds paper-p \*[paper]
-. ds paper-l \*[paper]
-. length paper-n \*[paper]
-. if (\n[paper-n] > 1) \{\
-. substring paper-p 0 -2
-. substring paper-l -1 -1
-. if !d paper-\*[paper-p]-length \{\
-. ds paper-p \*[paper]
-. ds paper-l
-. \}
-. \}
-.
-. nr paper-w 0
-.
-. ie d paper-\*[paper-p]-length \{\
-. ie '\*[paper-l]'l' \{\
-. pl \*[paper-\*[paper-p]-width]
-. ll (\*[paper-\*[paper-p]-length] - 2i)
-. \}
-. el \{\
-. ie '\*[paper-l]'' \{\
-. pl \*[paper-\*[paper-p]-length]
-. ll (\*[paper-\*[paper-p]-width] - 2i)
-. \}
-. el \
-. nr paper-w 1
-. \}
-. \}
-. el \
-. nr paper-w 1
-.
-. ie \n[paper-w] \
-. tm warning: Unknown paper size `\*[paper]'
-. el \
-. if !r LL .nr LL \n[.l]u \" for ms, mdoc, man
-.\}
-.
-.cp \n[_C]
-.
-.\" EOF
diff --git a/contrib/groff/tmac/pic.tmac b/contrib/groff/tmac/pic.tmac
deleted file mode 100644
index ac3b02498514..000000000000
--- a/contrib/groff/tmac/pic.tmac
+++ /dev/null
@@ -1,12 +0,0 @@
-.\" pic.tmac
-.\"
-.de PS
-.br
-.sp .3v
-.ne 0\\$1+1v+\n(.Vu
-.in \\n(.lu-\\n(.iu-0\\$2/2u>?0
-..
-.de PE
-.in
-.sp .3v+.5m
-..
diff --git a/contrib/groff/tmac/ps.tmac b/contrib/groff/tmac/ps.tmac
deleted file mode 100644
index 39d431826460..000000000000
--- a/contrib/groff/tmac/ps.tmac
+++ /dev/null
@@ -1,694 +0,0 @@
-.\" ps.tmac
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.ftr AX ABI
-.ftr KR BMR
-.ftr KI BMI
-.ftr KB BMB
-.ftr KX BMBI
-.ftr CW CR
-.ftr CO CI
-.ftr CX CBI
-.ftr H HR
-.ftr HO HI
-.ftr HX HBI
-.ftr Hr HNR
-.ftr Hi HNI
-.ftr Hb HNB
-.ftr Hx HNBI
-.ftr NX NBI
-.ftr PA PR
-.ftr PX PBI
-.ftr ZI ZCMI
-.ftr C CR
-.
-.cflags 8 \[an]
-.
-.char \[radicalex] \h'-\w'\[sr]'u'\[radicalex]\h'\w'\[sr]'u'
-.fchar \[sqrtex] \[radicalex]
-.char \[mo] \h'.08m'\[mo]\h'-.08m'
-.char \[nm] \h'.08m'\[nm]\h'-.08m'
-.char \[parenlefttp] \[parenlefttp]\h'.016m'
-.char \[parenleftbt] \[parenleftbt]\h'.016m'
-.char \[parenleftex] \[parenleftex]\h'.016m'
-.char \[parenrighttp] \[parenrighttp]\h'.016m'
-.char \[parenrightbt] \[parenrightbt]\h'.016m'
-.char \[parenrightex] \[parenrightex]\h'.016m'
-.
-.char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.
-.\" This is designed so that \(ul, \(rn and \(br form corners.
-.char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
-.char \[br] \Z'\v'.25m'\D'l 0 -1m''
-.char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
-.
-.char \[ru] \D'l .5m 0'
-.
-.fchar \[va] \o'\[ua]\[da]'
-.fchar \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.fchar \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.fchar \[Fi] f\[fi]
-.fchar \[Fl] f\[fl]
-.fchar \[ff] ff
-.fchar \[fi] fi
-.fchar \[fl] fl
-.fchar \[ij] ij
-.fchar \[IJ] IJ
-.fchar \[tm] \s-3\v'-.3m'TM\v'+.3m'\s+3
-.
-.fchar \[<<] <\h'-.2m'<
-.fchar \[>>] >\h'-.2m'>
-.fchar \[|=] \v'.075m'\Z'\[mi]'\v'-.15m'\[ap]\v'.075m'
-.fchar \[nc] \v'.1m'\Z'\h'.15m'\F[T]\f[R]/'\v'-.1m'\[sp]
-.fchar \[ne] \v'.07m'\Z'\h'.13m'\F[T]\f[R]/'\v'-.07m'\[==]
-.fchar \[-h] \F[T]\f[I]\v'-.53m'\Z'\h'.05m'\D'l .3m 0''\v'.53m'h
-.fchar \[hbar] \[-h]
-.
-.de ps-achar
-. \" Note that character definitions are always interpreted with
-. \" compatibility mode off.
-. fchar \\$1 \
-\\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\En[skw]+(\w'x'*0)-\\En[skw])'\
-\v'(u;\w'x'*0+\\En[rst]+(\w'\\$3'*0)-\\En[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\En[rst]+(\w'\\$3'*0)+\\En[rst])'\
-\h'|\\En[acc]u'
-. hcode \\$1\\$4
-..
-.
-.ps-achar \['C] \' C c
-.ps-achar \['c] \' c c
-.ps-achar "\[G ab]" \[ab] G g
-.ps-achar "\[g ab]" \[ab] g g
-.ps-achar "\[I .]" \[a.] I i
-.
-.fchar \[S ,] \o'S\[ac]'
-.hcode \[S ,]s
-.fchar \[s ,] \o's\[ac]'
-.hcode \[s ,]s
-.
-.de ps-frac
-. schar \[\\$1\\$2] \
-\v'-.28m'\s[\\En[.s]*6u/10u]\\$1\s0\v'.28m'\
-\[f/]\
-\s[\\En[.s]*6u/10u]\\$2
-..
-.
-.de ps-frac-mono
-. fschar \\$1 \[\\$2\\$3] \
-\Z'\v'-.28m'\s[\\En[.s]*5u/10u]\\$2\s0\v'.28m''\
-\Z'\h'.35m'\s[\\En[.s]*5u/10u]\\$3\s0'\
-\h'.02m'\[f/]\h'-.02m'
-..
-.
-.ps-frac 1 8
-.ps-frac 3 8
-.ps-frac 5 8
-.ps-frac 7 8
-.
-.ps-frac-mono CR 1 8
-.ps-frac-mono CR 3 8
-.ps-frac-mono CR 5 8
-.ps-frac-mono CR 7 8
-.ps-frac-mono CI 1 8
-.ps-frac-mono CI 3 8
-.ps-frac-mono CI 5 8
-.ps-frac-mono CI 7 8
-.ps-frac-mono CB 1 8
-.ps-frac-mono CB 3 8
-.ps-frac-mono CB 5 8
-.ps-frac-mono CB 7 8
-.ps-frac-mono CBI 1 8
-.ps-frac-mono CBI 3 8
-.ps-frac-mono CBI 5 8
-.ps-frac-mono CBI 7 8
-.
-.\" pic tests this register to see whether it should use \X'ps:...'
-.nr 0p 1
-.
-.\" now for color definitions
-.\"
-.\" this is a composite of MIT's X Consortium red/green/blue (rgb) color
-.\" specifications, X Consortium version 10.41, 1994.
-.defcolor black rgb #000000
-.defcolor grey rgb #bebebe
-.defcolor dimgrey rgb #696969
-.defcolor lightgray rgb #d3d3d3
-.defcolor lightslategrey rgb #778899
-.defcolor slategray rgb #708090
-.defcolor slategray1 rgb #c6e2ff
-.defcolor slategray2 rgb #b9d3ee
-.defcolor slategray3 rgb #9fb6cd
-.defcolor slategray4 rgb #6c7b8b
-.defcolor slategrey rgb #708090
-.defcolor grey0 rgb #000000
-.defcolor grey1 rgb #030303
-.defcolor grey2 rgb #050505
-.defcolor grey3 rgb #080808
-.defcolor grey4 rgb #0a0a0a
-.defcolor grey5 rgb #0d0d0d
-.defcolor grey6 rgb #0f0f0f
-.defcolor grey7 rgb #121212
-.defcolor grey8 rgb #141414
-.defcolor grey9 rgb #171717
-.defcolor grey10 rgb #1a1a1a
-.defcolor grey11 rgb #1c1c1c
-.defcolor grey12 rgb #1f1f1f
-.defcolor grey13 rgb #212121
-.defcolor grey14 rgb #242424
-.defcolor grey15 rgb #262626
-.defcolor grey16 rgb #292929
-.defcolor grey17 rgb #2b2b2b
-.defcolor grey18 rgb #2e2e2e
-.defcolor grey19 rgb #303030
-.defcolor grey20 rgb #333333
-.defcolor grey21 rgb #363636
-.defcolor grey22 rgb #383838
-.defcolor grey23 rgb #3b3b3b
-.defcolor grey24 rgb #3d3d3d
-.defcolor grey25 rgb #404040
-.defcolor grey26 rgb #424242
-.defcolor grey27 rgb #454545
-.defcolor grey28 rgb #474747
-.defcolor grey29 rgb #4a4a4a
-.defcolor grey30 rgb #4d4d4d
-.defcolor grey31 rgb #4f4f4f
-.defcolor grey32 rgb #525252
-.defcolor grey33 rgb #545454
-.defcolor grey34 rgb #575757
-.defcolor grey35 rgb #595959
-.defcolor grey36 rgb #5c5c5c
-.defcolor grey37 rgb #5e5e5e
-.defcolor grey38 rgb #616161
-.defcolor grey39 rgb #636363
-.defcolor grey40 rgb #666666
-.defcolor grey41 rgb #696969
-.defcolor grey42 rgb #6b6b6b
-.defcolor grey43 rgb #6e6e6e
-.defcolor grey44 rgb #707070
-.defcolor grey45 rgb #737373
-.defcolor grey46 rgb #757575
-.defcolor grey47 rgb #787878
-.defcolor grey48 rgb #7a7a7a
-.defcolor grey49 rgb #7d7d7d
-.defcolor grey50 rgb #7f7f7f
-.defcolor grey51 rgb #828282
-.defcolor grey52 rgb #858585
-.defcolor grey53 rgb #878787
-.defcolor grey54 rgb #8a8a8a
-.defcolor grey55 rgb #8c8c8c
-.defcolor grey56 rgb #8f8f8f
-.defcolor grey57 rgb #919191
-.defcolor grey58 rgb #949494
-.defcolor grey59 rgb #969696
-.defcolor grey60 rgb #999999
-.defcolor grey61 rgb #9c9c9c
-.defcolor grey62 rgb #9e9e9e
-.defcolor grey63 rgb #a1a1a1
-.defcolor grey64 rgb #a3a3a3
-.defcolor grey65 rgb #a6a6a6
-.defcolor grey66 rgb #a8a8a8
-.defcolor grey67 rgb #ababab
-.defcolor grey68 rgb #adadad
-.defcolor grey69 rgb #b0b0b0
-.defcolor grey70 rgb #b3b3b3
-.defcolor grey71 rgb #b5b5b5
-.defcolor grey72 rgb #b8b8b8
-.defcolor grey73 rgb #bababa
-.defcolor grey74 rgb #bdbdbd
-.defcolor grey75 rgb #bfbfbf
-.defcolor grey76 rgb #c2c2c2
-.defcolor grey77 rgb #c4c4c4
-.defcolor grey78 rgb #c7c7c7
-.defcolor grey79 rgb #c9c9c9
-.defcolor grey80 rgb #cccccc
-.defcolor grey81 rgb #cfcfcf
-.defcolor grey82 rgb #d1d1d1
-.defcolor grey83 rgb #d4d4d4
-.defcolor grey84 rgb #d6d6d6
-.defcolor grey85 rgb #d9d9d9
-.defcolor grey86 rgb #dbdbdb
-.defcolor grey87 rgb #dedede
-.defcolor grey88 rgb #e0e0e0
-.defcolor grey89 rgb #e3e3e3
-.defcolor grey90 rgb #e5e5e5
-.defcolor grey91 rgb #e8e8e8
-.defcolor grey92 rgb #ebebeb
-.defcolor grey93 rgb #ededed
-.defcolor grey94 rgb #f0f0f0
-.defcolor grey95 rgb #f2f2f2
-.defcolor grey96 rgb #f5f5f5
-.defcolor grey97 rgb #f7f7f7
-.defcolor grey98 rgb #fafafa
-.defcolor grey99 rgb #fcfcfc
-.defcolor grey100 rgb #ffffff
-.defcolor aliceblue rgb #f0f8ff
-.defcolor blueviolet rgb #8a2be2
-.defcolor cadetblue rgb #5f9ea0
-.defcolor cadetblue1 rgb #98f5ff
-.defcolor cadetblue2 rgb #8ee5ee
-.defcolor cadetblue3 rgb #7ac5cd
-.defcolor cadetblue4 rgb #53868b
-.defcolor cornflowerblue rgb #6495ed
-.defcolor darkslateblue rgb #483d8b
-.defcolor darkturquoise rgb #00ced1
-.defcolor deepskyblue rgb #00bfff
-.defcolor deepskyblue1 rgb #00bfff
-.defcolor deepskyblue2 rgb #00b2ee
-.defcolor deepskyblue3 rgb #009acd
-.defcolor deepskyblue4 rgb #00688b
-.defcolor dodgerblue rgb #1e90ff
-.defcolor dodgerblue1 rgb #1e90ff
-.defcolor dodgerblue2 rgb #1c86ee
-.defcolor dodgerblue3 rgb #1874cd
-.defcolor dodgerblue4 rgb #104e8b
-.defcolor lightblue rgb #add8e6
-.defcolor lightblue1 rgb #bfefff
-.defcolor lightblue2 rgb #b2dfee
-.defcolor lightblue3 rgb #9ac0cd
-.defcolor lightblue4 rgb #68838b
-.defcolor lightcyan rgb #e0ffff
-.defcolor lightcyan1 rgb #e0ffff
-.defcolor lightcyan2 rgb #d1eeee
-.defcolor lightcyan3 rgb #b4cdcd
-.defcolor lightcyan4 rgb #7a8b8b
-.defcolor lightskyblue rgb #87cefa
-.defcolor lightskyblue1 rgb #b0e2ff
-.defcolor lightskyblue2 rgb #a4d3ee
-.defcolor lightskyblue3 rgb #8db6cd
-.defcolor lightskyblue4 rgb #607b8b
-.defcolor lightslateblue rgb #8470ff
-.defcolor lightsteelblue rgb #b0c4de
-.defcolor lightsteelblue1 rgb #cae1ff
-.defcolor lightsteelblue2 rgb #bcd2ee
-.defcolor lightsteelblue3 rgb #a2b5cd
-.defcolor lightsteelblue4 rgb #6e7b8b
-.defcolor mediumaquamarine rgb #66cdaa
-.defcolor mediumblue rgb #0000cd
-.defcolor mediumslateblue rgb #7b68ee
-.defcolor mediumturquoise rgb #48d1cc
-.defcolor midnightblue rgb #191970
-.defcolor navyblue rgb #000080
-.defcolor paleturquoise rgb #afeeee
-.defcolor paleturquoise1 rgb #bbffff
-.defcolor paleturquoise2 rgb #aeeeee
-.defcolor paleturquoise3 rgb #96cdcd
-.defcolor paleturquoise4 rgb #668b8b
-.defcolor powderblue rgb #b0e0e6
-.defcolor royalblue rgb #4169e1
-.defcolor royalblue1 rgb #4876ff
-.defcolor royalblue2 rgb #436eee
-.defcolor royalblue3 rgb #3a5fcd
-.defcolor royalblue4 rgb #27408b
-.defcolor skyblue rgb #87ceeb
-.defcolor skyblue1 rgb #87ceff
-.defcolor skyblue2 rgb #7ec0ee
-.defcolor skyblue3 rgb #6ca6cd
-.defcolor skyblue4 rgb #4a708b
-.defcolor slateblue rgb #6a5acd
-.defcolor slateblue1 rgb #836fff
-.defcolor slateblue2 rgb #7a67ee
-.defcolor slateblue3 rgb #6959cd
-.defcolor slateblue4 rgb #473c8b
-.defcolor steelblue rgb #4682b4
-.defcolor steelblue1 rgb #63b8ff
-.defcolor steelblue2 rgb #5cacee
-.defcolor steelblue3 rgb #4f94cd
-.defcolor steelblue4 rgb #36648b
-.defcolor aquamarine rgb #7fffd4
-.defcolor aquamarine1 rgb #7fffd4
-.defcolor aquamarine2 rgb #76eec6
-.defcolor aquamarine3 rgb #66cdaa
-.defcolor aquamarine4 rgb #458b74
-.defcolor azure rgb #f0ffff
-.defcolor azure1 rgb #f0ffff
-.defcolor azure2 rgb #e0eeee
-.defcolor azure3 rgb #c1cdcd
-.defcolor azure4 rgb #838b8b
-.defcolor blue rgb #0000ff
-.defcolor blue1 rgb #0000ff
-.defcolor blue2 rgb #0000ee
-.defcolor blue3 rgb #0000cd
-.defcolor blue4 rgb #00008b
-.defcolor cyan rgb #00ffff
-.defcolor cyan1 rgb #00ffff
-.defcolor cyan2 rgb #00eeee
-.defcolor cyan3 rgb #00cdcd
-.defcolor cyan4 rgb #008b8b
-.defcolor navy rgb #000080
-.defcolor turquoise rgb #40e0d0
-.defcolor turquoise1 rgb #00f5ff
-.defcolor turquoise2 rgb #00e5ee
-.defcolor turquoise3 rgb #00c5cd
-.defcolor turquoise4 rgb #00868b
-.defcolor darkslategray rgb #2f4f4f
-.defcolor darkslategray1 rgb #97ffff
-.defcolor darkslategray2 rgb #8deeee
-.defcolor darkslategray3 rgb #79cdcd
-.defcolor darkslategray4 rgb #528b8b
-.defcolor rosybrown rgb #bc8f8f
-.defcolor rosybrown1 rgb #ffc1c1
-.defcolor rosybrown2 rgb #eeb4b4
-.defcolor rosybrown3 rgb #cd9b9b
-.defcolor rosybrown4 rgb #8b6969
-.defcolor saddlebrown rgb #8b4513
-.defcolor sandybrown rgb #f4a460
-.defcolor beige rgb #f5f5dc
-.defcolor brown rgb #a52a2a
-.defcolor brown1 rgb #ff4040
-.defcolor brown2 rgb #ee3b3b
-.defcolor brown3 rgb #cd3333
-.defcolor brown4 rgb #8b2323
-.defcolor burlywood rgb #deb887
-.defcolor burlywood1 rgb #ffd39b
-.defcolor burlywood2 rgb #eec591
-.defcolor burlywood3 rgb #cdaa7d
-.defcolor burlywood4 rgb #8b7355
-.defcolor chocolate rgb #d2691e
-.defcolor chocolate1 rgb #ff7f24
-.defcolor chocolate2 rgb #ee7621
-.defcolor chocolate3 rgb #cd661d
-.defcolor chocolate4 rgb #8b4513
-.defcolor peru rgb #cd853f
-.defcolor tan rgb #d2b48c
-.defcolor tan1 rgb #ffa54f
-.defcolor tan2 rgb #ee9a49
-.defcolor tan3 rgb #cd853f
-.defcolor tan4 rgb #8b5a2b
-.defcolor darkgreen rgb #006400
-.defcolor darkkhaki rgb #bdb76b
-.defcolor darkolivegreen rgb #556b2f
-.defcolor darkolivegreen1 rgb #caff70
-.defcolor darkolivegreen2 rgb #bcee68
-.defcolor darkolivegreen3 rgb #a2cd5a
-.defcolor darkolivegreen4 rgb #6e8b3d
-.defcolor darkseagreen rgb #8fbc8f
-.defcolor darkseagreen1 rgb #c1ffc1
-.defcolor darkseagreen2 rgb #b4eeb4
-.defcolor darkseagreen3 rgb #9bcd9b
-.defcolor darkseagreen4 rgb #698b69
-.defcolor forestgreen rgb #228b22
-.defcolor greenyellow rgb #adff2f
-.defcolor lawngreen rgb #7cfc00
-.defcolor lightseagreen rgb #20b2aa
-.defcolor limegreen rgb #32cd32
-.defcolor mediumseagreen rgb #3cb371
-.defcolor mediumspringgreen rgb #00fa9a
-.defcolor mintcream rgb #f5fffa
-.defcolor olivedrab rgb #6b8e23
-.defcolor olivedrab1 rgb #c0ff3e
-.defcolor olivedrab2 rgb #b3ee3a
-.defcolor olivedrab3 rgb #9acd32
-.defcolor olivedrab4 rgb #698b22
-.defcolor palegreen rgb #98fb98
-.defcolor palegreen1 rgb #9aff9a
-.defcolor palegreen2 rgb #90ee90
-.defcolor palegreen3 rgb #7ccd7c
-.defcolor palegreen4 rgb #548b54
-.defcolor seagreen rgb #2e8b57
-.defcolor seagreen1 rgb #54ff9f
-.defcolor seagreen2 rgb #4eee94
-.defcolor seagreen3 rgb #43cd80
-.defcolor seagreen4 rgb #2e8b57
-.defcolor springgreen rgb #00ff7f
-.defcolor springgreen1 rgb #00ff7f
-.defcolor springgreen2 rgb #00ee76
-.defcolor springgreen3 rgb #00cd66
-.defcolor springgreen4 rgb #008b45
-.defcolor yellowgreen rgb #9acd32
-.defcolor chartreuse rgb #7fff00
-.defcolor chartreuse1 rgb #7fff00
-.defcolor chartreuse2 rgb #76ee00
-.defcolor chartreuse3 rgb #66cd00
-.defcolor chartreuse4 rgb #458b00
-.defcolor green rgb #00ff00
-.defcolor green1 rgb #00ff00
-.defcolor green2 rgb #00ee00
-.defcolor green3 rgb #00cd00
-.defcolor green4 rgb #008b00
-.defcolor khaki rgb #f0e68c
-.defcolor khaki1 rgb #fff68f
-.defcolor khaki2 rgb #eee685
-.defcolor khaki3 rgb #cdc673
-.defcolor khaki4 rgb #8b864e
-.defcolor darkorange rgb #ff8c00
-.defcolor darkorange1 rgb #ff7f00
-.defcolor darkorange2 rgb #ee7600
-.defcolor darkorange3 rgb #cd6600
-.defcolor darkorange4 rgb #8b4500
-.defcolor darksalmon rgb #e9967a
-.defcolor lightcoral rgb #f08080
-.defcolor lightsalmon rgb #ffa07a
-.defcolor lightsalmon1 rgb #ffa07a
-.defcolor lightsalmon2 rgb #ee9572
-.defcolor lightsalmon3 rgb #cd8162
-.defcolor lightsalmon4 rgb #8b5742
-.defcolor peachpuff rgb #ffdab9
-.defcolor peachpuff1 rgb #ffdab9
-.defcolor peachpuff2 rgb #eecbad
-.defcolor peachpuff3 rgb #cdaf95
-.defcolor peachpuff4 rgb #8b7765
-.defcolor bisque rgb #ffe4c4
-.defcolor bisque1 rgb #ffe4c4
-.defcolor bisque2 rgb #eed5b7
-.defcolor bisque3 rgb #cdb79e
-.defcolor bisque4 rgb #8b7d6b
-.defcolor coral rgb #ff7f50
-.defcolor coral1 rgb #ff7256
-.defcolor coral2 rgb #ee6a50
-.defcolor coral3 rgb #cd5b45
-.defcolor coral4 rgb #8b3e2f
-.defcolor honeydew rgb #f0fff0
-.defcolor honeydew1 rgb #f0fff0
-.defcolor honeydew2 rgb #e0eee0
-.defcolor honeydew3 rgb #c1cdc1
-.defcolor honeydew4 rgb #838b83
-.defcolor orange rgb #ffa500
-.defcolor orange1 rgb #ffa500
-.defcolor orange2 rgb #ee9a00
-.defcolor orange3 rgb #cd8500
-.defcolor orange4 rgb #8b5a00
-.defcolor salmon rgb #fa8072
-.defcolor salmon1 rgb #ff8c69
-.defcolor salmon2 rgb #ee8262
-.defcolor salmon3 rgb #cd7054
-.defcolor salmon4 rgb #8b4c39
-.defcolor sienna rgb #a0522d
-.defcolor sienna1 rgb #ff8247
-.defcolor sienna2 rgb #ee7942
-.defcolor sienna3 rgb #cd6839
-.defcolor sienna4 rgb #8b4726
-.defcolor deeppink rgb #ff1493
-.defcolor deeppink1 rgb #ff1493
-.defcolor deeppink2 rgb #ee1289
-.defcolor deeppink3 rgb #cd1076
-.defcolor deeppink4 rgb #8b0a50
-.defcolor hotpink rgb #ff69b4
-.defcolor hotpink1 rgb #ff6eb4
-.defcolor hotpink2 rgb #ee6aa7
-.defcolor hotpink3 rgb #cd6090
-.defcolor hotpink4 rgb #8b3a62
-.defcolor indianred rgb #cd5c5c
-.defcolor indianred1 rgb #ff6a6a
-.defcolor indianred2 rgb #ee6363
-.defcolor indianred3 rgb #cd5555
-.defcolor indianred4 rgb #8b3a3a
-.defcolor lightpink rgb #ffb6c1
-.defcolor lightpink1 rgb #ffaeb9
-.defcolor lightpink2 rgb #eea2ad
-.defcolor lightpink3 rgb #cd8c95
-.defcolor lightpink4 rgb #8b5f65
-.defcolor mediumvioletred rgb #c71585
-.defcolor mistyrose rgb #ffe4e1
-.defcolor mistyrose1 rgb #ffe4e1
-.defcolor mistyrose2 rgb #eed5d2
-.defcolor mistyrose3 rgb #cdb7b5
-.defcolor mistyrose4 rgb #8b7d7b
-.defcolor orangered rgb #ff4500
-.defcolor orangered1 rgb #ff4500
-.defcolor orangered2 rgb #ee4000
-.defcolor orangered3 rgb #cd3700
-.defcolor orangered4 rgb #8b2500
-.defcolor palevioletred rgb #db7093
-.defcolor palevioletred1 rgb #ff82ab
-.defcolor palevioletred2 rgb #ee799f
-.defcolor palevioletred3 rgb #cd6889
-.defcolor palevioletred4 rgb #8b475d
-.defcolor violetred rgb #d02090
-.defcolor violetred1 rgb #ff3e96
-.defcolor violetred2 rgb #ee3a8c
-.defcolor violetred3 rgb #cd3278
-.defcolor violetred4 rgb #8b2252
-.defcolor firebrick rgb #b22222
-.defcolor firebrick1 rgb #ff3030
-.defcolor firebrick2 rgb #ee2c2c
-.defcolor firebrick3 rgb #cd2626
-.defcolor firebrick4 rgb #8b1a1a
-.defcolor pink rgb #ffc0cb
-.defcolor pink1 rgb #ffb5c5
-.defcolor pink2 rgb #eea9b8
-.defcolor pink3 rgb #cd919e
-.defcolor pink4 rgb #8b636c
-.defcolor red rgb #ff0000
-.defcolor red1 rgb #ff0000
-.defcolor red2 rgb #ee0000
-.defcolor red3 rgb #cd0000
-.defcolor red4 rgb #8b0000
-.defcolor tomato rgb #ff6347
-.defcolor tomato1 rgb #ff6347
-.defcolor tomato2 rgb #ee5c42
-.defcolor tomato3 rgb #cd4f39
-.defcolor tomato4 rgb #8b3626
-.defcolor darkorchid rgb #9932cc
-.defcolor darkorchid1 rgb #bf3eff
-.defcolor darkorchid2 rgb #b23aee
-.defcolor darkorchid3 rgb #9a32cd
-.defcolor darkorchid4 rgb #68228b
-.defcolor darkviolet rgb #9400d3
-.defcolor lavenderblush rgb #fff0f5
-.defcolor lavenderblush1 rgb #fff0f5
-.defcolor lavenderblush2 rgb #eee0e5
-.defcolor lavenderblush3 rgb #cdc1c5
-.defcolor lavenderblush4 rgb #8b8386
-.defcolor mediumorchid rgb #ba55d3
-.defcolor mediumorchid1 rgb #e066ff
-.defcolor mediumorchid2 rgb #d15fee
-.defcolor mediumorchid3 rgb #b452cd
-.defcolor mediumorchid4 rgb #7a378b
-.defcolor mediumpurple rgb #9370db
-.defcolor mediumpurple1 rgb #ab82ff
-.defcolor mediumpurple2 rgb #9f79ee
-.defcolor mediumpurple3 rgb #8968cd
-.defcolor mediumpurple4 rgb #5d478b
-.defcolor lavender rgb #e6e6fa
-.defcolor magenta rgb #ff00ff
-.defcolor magenta1 rgb #ff00ff
-.defcolor magenta2 rgb #ee00ee
-.defcolor magenta3 rgb #cd00cd
-.defcolor magenta4 rgb #8b008b
-.defcolor maroon rgb #b03060
-.defcolor maroon1 rgb #ff34b3
-.defcolor maroon2 rgb #ee30a7
-.defcolor maroon3 rgb #cd2990
-.defcolor maroon4 rgb #8b1c62
-.defcolor orchid rgb #da70d6
-.defcolor orchid1 rgb #ff83fa
-.defcolor orchid2 rgb #ee7ae9
-.defcolor orchid3 rgb #cd69c9
-.defcolor orchid4 rgb #8b4789
-.defcolor plum rgb #dda0dd
-.defcolor plum1 rgb #ffbbff
-.defcolor plum2 rgb #eeaeee
-.defcolor plum3 rgb #cd96cd
-.defcolor plum4 rgb #8b668b
-.defcolor purple rgb #a020f0
-.defcolor purple1 rgb #9b30ff
-.defcolor purple2 rgb #912cee
-.defcolor purple3 rgb #7d26cd
-.defcolor purple4 rgb #551a8b
-.defcolor thistle rgb #d8bfd8
-.defcolor thistle1 rgb #ffe1ff
-.defcolor thistle2 rgb #eed2ee
-.defcolor thistle3 rgb #cdb5cd
-.defcolor thistle4 rgb #8b7b8b
-.defcolor violet rgb #ee82ee
-.defcolor antiquewhite rgb #faebd7
-.defcolor antiquewhite1 rgb #ffefdb
-.defcolor antiquewhite2 rgb #eedfcc
-.defcolor antiquewhite3 rgb #cdc0b0
-.defcolor antiquewhite4 rgb #8b8378
-.defcolor floralwhite rgb #fffaf0
-.defcolor ghostwhite rgb #f8f8ff
-.defcolor navajowhite rgb #ffdead
-.defcolor navajowhite1 rgb #ffdead
-.defcolor navajowhite2 rgb #eecfa1
-.defcolor navajowhite3 rgb #cdb38b
-.defcolor navajowhite4 rgb #8b795e
-.defcolor oldlace rgb #fdf5e6
-.defcolor whitesmoke rgb #f5f5f5
-.defcolor gainsboro rgb #dcdcdc
-.defcolor ivory rgb #fffff0
-.defcolor ivory1 rgb #fffff0
-.defcolor ivory2 rgb #eeeee0
-.defcolor ivory3 rgb #cdcdc1
-.defcolor ivory4 rgb #8b8b83
-.defcolor linen rgb #faf0e6
-.defcolor seashell rgb #fff5ee
-.defcolor seashell1 rgb #fff5ee
-.defcolor seashell2 rgb #eee5de
-.defcolor seashell3 rgb #cdc5bf
-.defcolor seashell4 rgb #8b8682
-.defcolor snow rgb #fffafa
-.defcolor snow1 rgb #fffafa
-.defcolor snow2 rgb #eee9e9
-.defcolor snow3 rgb #cdc9c9
-.defcolor snow4 rgb #8b8989
-.defcolor wheat rgb #f5deb3
-.defcolor wheat1 rgb #ffe7ba
-.defcolor wheat2 rgb #eed8ae
-.defcolor wheat3 rgb #cdba96
-.defcolor wheat4 rgb #8b7e66
-.defcolor white rgb #ffffff
-.defcolor blanchedalmond rgb #ffebcd
-.defcolor darkgoldenrod rgb #b8860b
-.defcolor darkgoldenrod1 rgb #ffb90f
-.defcolor darkgoldenrod2 rgb #eead0e
-.defcolor darkgoldenrod3 rgb #cd950c
-.defcolor darkgoldenrod4 rgb #8b6508
-.defcolor lemonchiffon rgb #fffacd
-.defcolor lemonchiffon1 rgb #fffacd
-.defcolor lemonchiffon2 rgb #eee9bf
-.defcolor lemonchiffon3 rgb #cdc9a5
-.defcolor lemonchiffon4 rgb #8b8970
-.defcolor lightgoldenrod rgb #eedd82
-.defcolor lightgoldenrod1 rgb #ffec8b
-.defcolor lightgoldenrod2 rgb #eedc82
-.defcolor lightgoldenrod3 rgb #cdbe70
-.defcolor lightgoldenrod4 rgb #8b814c
-.defcolor lightgoldenrodyellow rgb #fafad2
-.defcolor lightyellow rgb #ffffe0
-.defcolor lightyellow1 rgb #ffffe0
-.defcolor lightyellow2 rgb #eeeed1
-.defcolor lightyellow3 rgb #cdcdb4
-.defcolor lightyellow4 rgb #8b8b7a
-.defcolor palegoldenrod rgb #eee8aa
-.defcolor papayawhip rgb #ffefd5
-.defcolor cornsilk rgb #fff8dc
-.defcolor cornsilk1 rgb #fff8dc
-.defcolor cornsilk2 rgb #eee8cd
-.defcolor cornsilk3 rgb #cdc8b1
-.defcolor cornsilk4 rgb #8b8878
-.defcolor gold rgb #ffd700
-.defcolor gold1 rgb #ffd700
-.defcolor gold2 rgb #eec900
-.defcolor gold3 rgb #cdad00
-.defcolor gold4 rgb #8b7500
-.defcolor goldenrod rgb #daa520
-.defcolor goldenrod1 rgb #ffc125
-.defcolor goldenrod2 rgb #eeb422
-.defcolor goldenrod3 rgb #cd9b1d
-.defcolor goldenrod4 rgb #8b6914
-.defcolor moccasin rgb #ffe4b5
-.defcolor yellow rgb #ffff00
-.defcolor yellow1 rgb #ffff00
-.defcolor yellow2 rgb #eeee00
-.defcolor yellow3 rgb #cdcd00
-.defcolor yellow4 rgb #8b8b00
-.
-.cp \n[_C]
-.
-.if !\n(.C \
-. mso pspic.tmac
-.
-.do ie '\[char97]'a' \
-. do mso latin1.tmac
-.el \
-. do mso cp1047.tmac
-.
-.do mso europs.tmac
-.
-.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/psatk.tmac b/contrib/groff/tmac/psatk.tmac
deleted file mode 100644
index dc6d2f38c25f..000000000000
--- a/contrib/groff/tmac/psatk.tmac
+++ /dev/null
@@ -1,63 +0,0 @@
-.\" psatk.tmac
-.\"
-.\" Implementation of the ATK PB and PE macros for use with groff and grops.
-.\" Load this after atk.tmac.
-.nr zT 0
-.if '\*(.T'ps' .nr zT 1
-.nr psatk-unit 1p
-.de psatk-defs
-ps: mdef 5
-/PB {
- /saved save def
- currentpoint translate
- \n[psatk-unit] u -\n[psatk-unit] u scale
- userdict begin
- /showpage {} def
-} bind def
-/PE {
- end
- saved restore
-} bind def
-/troffadjust {
- pop 0
-} bind def
-..
-.de PB
-.ne \\$1p
-.nr zT \\n(zT>0
-\\*[PB\\n(zT]\\
-..
-.de PE
-\\*[PE\\n(zT]\\
-..
-.ds PB0
-.\" The last line before the "'PE" is "\}" rather than ".\}". This
-.\" would cause a spurious space to be introduced before any picture
-.\" that was the first thing on a line. So we have to catch that and
-.\" remove it.
-.de PB1
-.ev psatk
-.fi
-.di psatk-mac
-\!ps: exec PB
-..
-.de PE0
-\v'-.75m'\
-\D'l \\$1p 0'\D'l 0 \\$2p'\D'l -\\$1p 0'\D'l 0 -\\$2p'\
-\h'\\$1p'\v'.75m'\x'\\$2p-1m>?0'\c
-..
-.ds psatk-init \Y[psatk-defs]
-.de PE1
-\!PE
-.di
-.di null
-.br
-.di
-.rm null
-.ev
-\v'-.75m'\
-\\*[psatk-init]\Y[psatk-mac]\
-\h'\\$1p'\v'.75m'\x'\\$2p-1m>?0'\c
-.rm psatk-mac
-.if \\n(.P .ds psatk-init
-..
diff --git a/contrib/groff/tmac/psfig.tmac b/contrib/groff/tmac/psfig.tmac
deleted file mode 100644
index f9668227d3b3..000000000000
--- a/contrib/groff/tmac/psfig.tmac
+++ /dev/null
@@ -1,89 +0,0 @@
-.\" psfig.tmac
-.\"
-.\" These are macros to make psfig work with groff.
-.\" They require that psfig be patched as described in ../grops/psfig.diff.
-.de psfig-defs
-ps: mdef 100
-
-% wid ht llx lly urx ury psfigstart -
-
-/psfigstart {
- /level1 save def
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- /ht exch u def
- /wid exch u def
- currentpoint ht add translate
- wid urx llx sub div ht ury lly sub div neg scale
- llx neg lly neg translate
-
- % set the graphics state to default values
- 0 setgray
- 0 setlinecap
- 1 setlinewidth
- 0 setlinejoin
- 10 setmiterlimit
- [] 0 setdash
- newpath
- /showpage {} def
-} bind def
-
-% psfigclip -
-
-/psfigclip {
- currentpoint newpath
- llx lly moveto
- urx lly lineto
- urx ury lineto
- llx ury lineto
- closepath clip
- newpath moveto
-} bind def
-
-% psfigend -
-
-/psfigend {
- level1 restore
-} bind def
-
-% globalstart -
-
-/globalstart {
- % save the current space code on the stack
- SC
- level0 restore
-} bind def
-
-% globalend -
-
-/globalend {
- end
- BP
- /SC exch def
- DEFS begin
-} bind def
-..
-.de psfig-init
-.if \\n[.P] \{\
-\Y[psfig-defs]
-. br
-. sp -1
-. ds psfig-init\" empty
-. rm psfig-defs
-.\}
-..
-.de F+
-.br
-.psfig-init
-.nr psfig-fill \\n[.u]
-.nf
-.sp -.5
-.if !\\n[.$] .ce 9999
-..
-.de F-
-.br
-.ce 0
-.if \\n[psfig-fill] .fi
-..
diff --git a/contrib/groff/tmac/psold.tmac b/contrib/groff/tmac/psold.tmac
deleted file mode 100644
index 03889d16efdb..000000000000
--- a/contrib/groff/tmac/psold.tmac
+++ /dev/null
@@ -1,61 +0,0 @@
-.\" psold.tmac
-.\"
-.\" In newer PostScript printers, text fonts contain all ISO Latin-1
-.\" characters. The font description files that comes with groff match
-.\" these fonts. The text fonts in older PostScript printers are missing
-.\" some of these characters. This file prevents those characters from
-.\" being used. This will allow the PostScript output to be printed on
-.\" such old printers.
-.nr _C \n(.C
-.cp 0
-.\" Define an accented character.
-.de ps-achar
-.\" Note that character definitions are always interpreted with
-.\" compatibility mode off.
-.char \\$1 \\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\
-\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\
-\h'|\\\\n[acc]u'
-.ie '\\$3'\(.i' .hcode \\$1i
-.el .hcode \\$1\\$3
-..
-.ps-achar \['y] \(aa y
-.ps-achar \['Y] \(aa Y
-.char \[12] \v'-.7m\s[\\n(.s*6u/10u]+.7m'1\v'-.7m\s0+.7m'\
-\(f/\s[\\n(.s*6u/10u]2\s0
-.char \[14] \v'-.7m\s[\\n(.s*6u/10u]+.7m'1\v'-.7m\s0+.7m'\
-\(f/\s[\\n(.s*6u/10u]4\s0
-.char \[34] \v'-.7m\s[\\n(.s*6u/10u]+.7m'3\v'-.7m\s0+.7m'\
-\(f/\s[\\n(.s*6u/10u]4\s0
-.char \[S1] \v'-.2m'\s-31\s+3\v'+.2m'
-.char \[S2] \v'-.2m'\s-32\s+3\v'+.2m'
-.char \[S3] \v'-.2m'\s-33\s+3\v'+.2m'
-.char \[bb] |
-.char \[de] \fS\(de
-.char \[-D] \Z'\v'-.1m'-'D
-.char \[TP] \
-I\h'-.25m'\v'-.33m'\s'\En(.s*6u/10u'\v'.33m'D\v'-.33m'\s0\v'.33m'
-.char \[Sd] \Z'\v'-.3m'\h'.2m'-'\(pd
-.char \[Tp] \zlp
-.tr \[char166]\[bb]
-.tr \[char176]\[de]
-.tr \[char177]\[+-]
-.tr \[char178]\[S2]
-.tr \[char179]\[S3]
-.tr \[char181]\[mc]
-.tr \[char185]\[S1]
-.tr \[char188]\[14]
-.tr \[char189]\[12]
-.tr \[char190]\[34]
-.tr \[char208]\[-D]
-.tr \[char215]\[mu]
-.tr \[char221]\['Y]
-.tr \[char222]\[TP]
-.tr \[char240]\[Sd]
-.tr \[char247]\[di]
-.tr \[char253]\['y]
-.tr \[char254]\[Tp]
-.cp \n(_C
diff --git a/contrib/groff/tmac/pspic.tmac b/contrib/groff/tmac/pspic.tmac
deleted file mode 100644
index 9fe7e3eb1a87..000000000000
--- a/contrib/groff/tmac/pspic.tmac
+++ /dev/null
@@ -1,106 +0,0 @@
-.\" pspic.tmac
-.\"
-.\" Define the PSPIC macro.
-.\"
-.\" When used other than with -Tps, -Tdvi, or -Thtml it will draw a box
-.\" around where the picture would go.
-.
-.de PSPIC
-. nr ps-offset-mode 0
-. ie '\\$1'-L' \{\
-. nr ps-offset-mode 1
-. shift
-. HTML-DO-IMAGE \\$1 l
-. \}
-. el \{\
-. ie '\\$1'-R' \{\
-. nr ps-offset-mode 2
-. shift
-. HTML-DO-IMAGE \\$1 r
-. \}
-. el \{\
-. ie '\\$1'-I' \{\
-. nr ps-offset-mode 3
-. nr ps-offset (m;\\$2)
-. shift 2
-. HTML-DO-IMAGE \\$1 i
-. \}
-. el \
-. HTML-DO-IMAGE \\$1 c
-. \}
-. \}
-.
-. br
-.
-. psbb \\$1
-. if (\\n[llx] : \\n[lly] : \\n[urx] : \\n[ury]) \{\
-. nr ps-wid (\\n[urx] - \\n[llx])
-. nr ps-ht (\\n[ury] - \\n[lly])
-. if (\\n[ps-wid] < 0) \
-. nr ps-wid (-\\n[ps-wid])
-. if (\\n[ps-ht] < 0) \
-. nr ps-ht (-\\n[ps-ht])
-. ie (\\n[.$] >= 2) \
-. nr ps-deswid (i;\\$2)
-. el \
-. nr ps-deswid ((\\n[.l] - \\n[.i]) <? \\n[ps-wid]p)
-. nr ps-desht (\\n[ps-deswid] * 1000 + (\\n[ps-wid] / 2) \
- / \\n[ps-wid] * \\n[ps-ht] \
- + 500 / 1000)
-. if ((\\n[.$] >= 3) & (\\n[ps-desht] > (i;0\\$3))) \{\
-. nr ps-desht (i;\\$3)
-. nr ps-deswid (\\n[ps-desht] * 1000 + (\\n[ps-ht] / 2) \
- / \\n[ps-ht] * \\n[ps-wid] \
- + 500 / 1000)
-. \}
-.
-. ne (\\n[ps-desht]u + 1v)
-.
-. if (\\n[ps-offset-mode] == 0) \
-. nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid] / 2)
-. if (\\n[ps-offset-mode] == 1) \
-. nr ps-offset 0
-. if (\\n[ps-offset-mode] == 2) \
-. nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid])
-.
-. ie '\*[.T]'dvi' \{\
-. ie (\\n[ps-wid]p == \\n[ps-deswid]) \{\
-. ds ps-scale \" empty
-. ds ps-hoffset hoffset=-\\n[llx]
-. ds ps-voffset voffset=-\\n[lly]
-. \}
-. el \{\
-. nr ps-scale (\\n[ps-deswid] * 100 / \\n[ps-wid]p)
-. nr ps-hoffset (-\\n[llx] * \\n[ps-scale] / 100)
-. nr ps-voffset (-\\n[lly] * \\n[ps-scale] / 100)
-. ds ps-scale hscale=\\n[ps-scale] vscale=\\n[ps-scale]
-. ds ps-hoffset hoffset=\\n[ps-hoffset]
-. ds ps-voffset voffset=\\n[ps-voffset]
-. \}
-.
-\h'\\n[ps-offset]u'\
-\v'\\n[ps-desht]u'\
-\X'psfile=\\$1 \\*[ps-hoffset] \\*[ps-voffset] \\*[ps-scale]'
-. \}
-. el \{\
-. ie (\\n[.$] >= 3) \
-. ds ps-desht \\n[ps-desht]
-. el \
-. ds ps-desht \" empty
-.
-\h'\\n[ps-offset]u'\
-\X'ps: invis'\
-\Z'\D'p 0 \\n[ps-desht]u \\n[ps-deswid]u 0 0 -\\n[ps-desht]u''\
-\X'ps: endinvis'\
-\v'\\n[ps-desht]u'\
-\X'ps: import \
- \\$1 \\n[llx] \\n[lly] \\n[urx] \\n[ury] \\n[ps-deswid] \\*[ps-desht]'
-. \}
-.
-. br
-. sp \\n[ps-desht]u
-. \}
-. HTML-IMAGE-END
-..
-.
-.\" end of pspic.tmac
diff --git a/contrib/groff/tmac/s.tmac b/contrib/groff/tmac/s.tmac
deleted file mode 100644
index 7927c233d597..000000000000
--- a/contrib/groff/tmac/s.tmac
+++ /dev/null
@@ -1,2076 +0,0 @@
-.\" -*- nroff -*-
-.ig
-
-s.tmac
-
-Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
-..
-.if !\n(.g .ab These ms macros require groff.
-.if \n(.C \
-. ab The groff ms macros do not work in compatibility mode.
-.\" Enable warnings (only if none are given on the command line).
-.\" You can delete this if you want.
-.if (\n[.warn] == 65543) .warn
-.\" See if already loaded.
-.if r GS .nx
-.mso devtag.tmac
-.nr GS 1
-.nr need_eo_h 0
-.nr need_eo_tl 0
-.de @error
-.tm \\n(.F:\\n(.c: macro error: \\$*
-..
-.de @warning
-.tm \\n(.F:\\n(.c: macro warning: \\$*
-..
-.de @fatal
-.ab \\n(.F:\\n(.c: fatal macro error: \\$*
-..
-.de @not-implemented
-.@error sorry, \\$0 not implemented
-.als \\$0 @nop
-..
-.als TM @not-implemented
-.als CT @not-implemented
-.de @nop
-..
-.de @init
-.if !rPO .nr PO \\n(.o
-.\" a non-empty environment
-.ev ne
-\c
-.ev
-.ev nf
-'nf
-.ev
-..
-.ds REFERENCES References
-.ds ABSTRACT ABSTRACT
-.ds TOC Table of Contents
-.ds MONTH1 January
-.ds MONTH2 February
-.ds MONTH3 March
-.ds MONTH4 April
-.ds MONTH5 May
-.ds MONTH6 June
-.ds MONTH7 July
-.ds MONTH8 August
-.ds MONTH9 September
-.ds MONTH10 October
-.ds MONTH11 November
-.ds MONTH12 December
-.ds MO \\*[MONTH\n[mo]]
-.ds DY \n[dy] \*[MO] \n[year]
-.de ND
-.if \\n[.$] .ds DY "\\$*
-..
-.de DA
-.if \\n[.$] .ds DY "\\$*
-.ds CF \\*[DY]
-..
-.\" indexing
-.de IX
-.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[PN]
-..
-.\" print an error message and then try to recover
-.de @error-recover
-.@error \\$@ (recovering)
-.nr *pop-count 0
-.while !'\\n(.z'' \{\
-. \"@warning automatically terminating diversion \\n(.z
-. ie d @div-end!\\n(.z .@div-end!\\n(.z
-. el .*div-end-default
-. nr *pop-count +1
-. \" ensure that we don't loop forever
-. if \\n[*pop-count]>20 .@fatal recovery failed
-.\}
-.while !'\\n[.ev]'0' .ev
-.par@reset-env
-.par@reset
-..
-.de *div-end-default
-.ds *last-div \\n(.z
-.br
-.di
-.ev nf
-.\\*[*last-div]
-.ev
-..
-.\" ****************************
-.\" ******** module cov ********
-.\" ****************************
-.\" Cover sheet and first page.
-.de cov*err-not-after-first-page
-.@error \\$0 is not allowed after the first page has started
-..
-.de cov*err-not-before-tl
-.@error \\$0 is not allowed before TL
-..
-.de cov*err-not-again
-.@error \\$0 is not allowed more than once
-..
-.de cov*err-not-after-ab
-.@error \\$0 is not allowed after first AB, LP, PP, IP, SH or NH
-..
-.als AU cov*err-not-before-tl
-.als AI cov*err-not-before-tl
-.als AB cov*err-not-before-tl
-.de cov*first-page-init
-.rm cov*first-page-init
-.par@init
-.als RP cov*err-not-after-first-page
-.@init
-.ie \\n[cov*rp-format] \{\
-. pg@cs-top
-. als FS cov*FS
-. als FE cov*FE
-.\}
-.el \{\
-. pg@top
-. als FS @FS
-. als FE @FE
-.\}
-.wh 0 pg@top
-.CHECK-FOOTER-AND-KEEP
-..
-.wh 0 cov*first-page-init
-.\" This handles the case where FS occurs before TL or LP.
-.de FS
-.br
-\\*[FS]\\
-..
-.nr cov*rp-format 0
-.nr cov*rp-no 0
-.\" released paper format
-.de RP
-.nr cov*rp-format 1
-.if \\n[.$] .if '\\$1'no' .nr cov*rp-no 1
-.if rPO .po \\n(POu
-.pn 0
-..
-.de TL
-.br
-.als TL cov*err-not-again
-.rn @AB AB
-.rn @AU AU
-.rn @AI AI
-.di cov*tl-div
-.par@reset
-.ft B
-.ps +2
-.vs +3p
-.ll (u;\\n[LL]*5/6)
-.nr cov*n-au 0
-.DEVTAG-TL
-..
-.de @AU
-.par@reset
-.if !'\\n(.z'' \{\
-. br
-. di
-.\}
-.nr cov*n-au +1
-.di cov*au-div!\\n[cov*n-au]
-.nf
-.ft I
-.ie (\\n[PS] >= 1000) \
-. ps (\\n[PS]z / 1000u)
-.el \
-. ps \\n[PS]
-..
-.de @AI
-.par@reset
-.if !'\\n(.z'' \{\
-. br
-. di
-.\}
-.ie !\\n[cov*n-au] .@error AI before AU
-.el \{\
-. di cov*ai-div!\\n[cov*n-au]
-. nf
-. ft R
-. ie (\\n[PS] >= 1000) \
-. ps (\\n[PS]z / 1000u)
-. el \
-. ps \\n[PS]
-.\}
-..
-.de LP
-.if !'\\n[.z]'' \{\
-. br
-. di
-.\}
-.br
-.cov*ab-init
-.cov*print
-\\*[\\$0]\\
-..
-.als IP LP
-.als PP LP
-.als XP LP
-.als QP LP
-.als RS LP
-.als NH LP
-.als SH LP
-.als MC LP
-.als RT LP
-.als XS LP
-.de cov*ab-init
-.als cov*ab-init @nop
-.als LP @LP
-.als IP @IP
-.als PP @PP
-.als XP @XP
-.als RT @RT
-.als XS @XS
-.als SH @SH
-.als NH @NH
-.als QP @QP
-.als RS @RS
-.als RE @RE
-.als QS @QS
-.als QE @QE
-.als MC @MC
-.als EQ @EQ
-.als EN @EN
-.als TS @TS
-.als AB cov*err-not-after-ab
-.als AU par@AU
-.als AI par@AI
-.als TL par@TL
-..
-.de @AB
-.if !'\\n(.z'' \{\
-. br
-. di
-.\}
-.cov*ab-init
-.ie '\*(.T'html' \{\
-. cov*tl-au-print
-. als cov*tl-au-print @nop
-.\}
-.el .di cov*ab-div
-.par@ab-indent
-.par@reset
-.if !'\\$1'no' \{\
-. if '\*(.T'html' \{\
-. nf
-. sp
-. \}
-. ft I
-. ce 1
-\\*[ABSTRACT]
-. sp
-. ft R
-.\}
-.ns
-.@PP
-.if '\*(.T'html' \{\
-. cov*tl-au-print
-. als cov*tl-au-print @nop
-. par@reset-env
-. par@reset
-. cov*print
-.\}
-..
-.de AE
-.ie '\*(.T'html' \{\
-. als AE cov*err-not-again
-.\}
-.el \{\
-. ie '\\n(.z'cov*ab-div' \{\
-. als AE cov*err-not-again
-. br
-. di
-.\" nr cov*ab-height \\n[dn]
-. par@reset-env
-. par@reset
-. cov*print
-. \}
-. el .@error AE without AB
-.\}
-..
-.de @div-end!cov*ab-div
-.AE
-..
-.de cov*print
-.als cov*print @nop
-.ie d cov*tl-div \{\
-. ie \\n[cov*rp-format] .cov*rp-print
-. el .cov*draft-print
-.\}
-.el \{\
-. if \\n[cov*rp-format] \{\
-. @warning RP format but no TL
-. bp 1
-. als FS @FS
-. als FE @FE
-. CHECK-FOOTER-AND-KEEP
-. \}
-. br
-.\}
-..
-.de cov*rp-print
-.nr cov*page-length \\n[.p]
-.pl 1000i
-.cov*tl-au-print
-.sp 3
-.if d cov*ab-div \{\
-. if !'\*(.T'html' . nf
-. cov*ab-div
-.\}
-.sp 3
-.par@reset
-\\*[DY]
-.br
-.if \\n[cov*fn-height] \{\
-. sp |(u;\\n[cov*page-length]-\\n[FM]\
--\\n[cov*fn-height]-\\n[fn@sep-dist]>?\\n[nl])
-. fn@print-sep
-. ev nf
-. cov*fn-div
-. ev
-. ie \\n[cov*rp-no] .rm cov*fn-div
-. el \{\
-. rn cov*fn-div fn@overflow-div
-. nr fn@have-overflow 1
-. \}
-.\}
-.als FS @FS
-.als FE @FE
-.CHECK-FOOTER-AND-KEEP
-.\" If anything was printed below where the footer line is normally printed,
-.\" then that's an overflow.
-.if -\\n[FM]/2+1v+\\n[cov*page-length]<\\n[nl] .@error cover sheet overflow
-.pl \\n[cov*page-length]u
-.bp 1
-.if !\\n[cov*rp-no] .cov*tl-au-print
-.rs
-.sp 1
-..
-.de cov*draft-print
-.cov*tl-au-print
-.if d cov*ab-div \{\
-. nf
-. sp 2
-. cov*ab-div
-.\}
-.sp 1
-..
-.de cov*tl-au-print
-.par@reset
-.nf
-.rs
-.sp 3
-.ce 9999
-.if d cov*tl-div \{\
-. cov*tl-div
-. DEVTAG-EO-TL
-.\}
-.nr cov*i 1
-.nr cov*sp 1v
-.while \\n[cov*i]<=\\n[cov*n-au] \{\
-. ie '\*(.T'html' .br
-. el .sp \\n[cov*sp]u
-. cov*au-div!\\n[cov*i]
-. ie d cov*ai-div!\\n[cov*i] \{\
-. sp .5v
-. cov*ai-div!\\n[cov*i]
-. nr cov*sp 1v
-. \}
-. el .nr cov*sp .5v
-. nr cov*i +1
-.\}
-.ce 0
-..
-.nr cov*fn-height 0
-.nr cov*in-fn 0
-.\" start of footnote on cover
-.de cov*FS
-.if \\n[cov*in-fn] \{\
-. @error nested FS
-. FE
-.\}
-.nr cov*in-fn 1
-.ev fn
-.par@reset-env
-.da cov*fn-div
-.if !\\n[cov*fn-height] .ns
-.ie \\n[.$] .FP "\\$1" no
-.el .@LP
-..
-.de @div-end!cov*fn-div
-.cov*FE
-..
-.\" end of footnote on cover
-.de cov*FE
-.ie '\\n(.z'cov*fn-div' \{\
-. br
-. ev
-. di
-. nr cov*in-fn 0
-. nr cov*fn-height +\\n[dn]
-.\}
-.el .@error FE without matching FS
-..
-.\" ***************************
-.\" ******** module pg ********
-.\" ***************************
-.\" Page-level formatting.
-.\" > 0 if we have a footnote on the current page
-.nr pg@fn-flag 0
-.nr pg@colw 0
-.nr pg@fn-colw 0
-.nr HM 1i
-.nr FM 1i
-.ds LF
-.ds CF
-.ds RF
-.ds LH
-.ds CH -\\n[PN]-
-.ds RH
-.ds pg*OH '\\*[LH]'\\*[CH]'\\*[RH]'
-.ds pg*EH '\\*[LH]'\\*[CH]'\\*[RH]'
-.ds pg*OF '\\*[LF]'\\*[CF]'\\*[RF]'
-.ds pg*EF '\\*[LF]'\\*[CF]'\\*[RF]'
-.de OH
-.ds pg*\\$0 "\\$*
-..
-.als EH OH
-.als OF OH
-.als EF OH
-.de PT
-.ie \\n%=1 .if \\n[pg*P1] .tl \\*[pg*OH]
-.el \{\
-. ie o .tl \\*[pg*OH]
-. el .tl \\*[pg*EH]
-.\}
-..
-.de BT
-.ie o .tl \\*[pg*OF]
-.el .tl \\*[pg*EF]
-..
-.nr pg*P1 0
-.de P1
-.nr pg*P1 1
-..
-.wh -\n[FM]u pg@bottom
-.wh -\n[FM]u/2u pg*footer
-.nr MINGW 2n
-.nr pg@ncols 1
-.de @MC
-.if !'\\n(.z'' .error-recover MC while diversion open
-.br
-.ie \\n[pg@ncols]>1 .pg@super-eject
-.el \{\
-. \" flush out any floating keeps
-. while \\n[kp@tail]>\\n[kp@head] \{\
-. rs
-. bp
-. \}
-.\}
-.ie !\\n(.$ \{\
-. nr pg@colw \\n[LL]*7/15
-. nr pg*gutw \\n[LL]-(2*\\n[pg@colw])
-. nr pg@ncols 2
-.\}
-.el \{\
-. nr pg@colw (n;\\$1)<?\\n[LL]
-. ie \\n[.$]<2 .nr pg*gutw \\n[MINGW]
-. el .nr pg*gutw (n;\\$2)
-. nr pg@ncols \\n[LL]-\\n[pg@colw]/(\\n[pg@colw]+\\n[pg*gutw])+1
-. ie \\n[pg@ncols]>1 \
-. nr pg*gutw \\n[LL]-(\\n[pg@ncols]*\\n[pg@colw])/(\\n[pg@ncols]-1)
-. el .nr pg*gutw 0
-.\}
-.DEVTAG ".mc \\n[pg@ncols] \\n[pg@colw] \\n[pg*gutw]"
-.mk pg*col-top
-.ns
-.nr pg*col-num 0
-.nr pg@fn-colw \\n[pg@colw]*5/6
-.par@reset
-..
-.de 2C
-.MC
-..
-.de 1C
-.MC \\n[LL]u
-..
-.\" top of page macro
-.de pg@top
-.ch pg*footer -\\n[FM]u/2u
-.nr PN \\n%
-.nr pg*col-num 0
-.nr pg@fn-bottom-margin 0
-.po \\n[PO]u
-.ev h
-.par@reset
-.sp (u;\\n[HM]/2)
-.PT
-.sp |\\n[HM]u
-.if d HD .HD
-.mk pg@header-bottom
-.ev
-.mk pg*col-top
-.pg*start-col
-..
-.de pg*start-col
-.\" Handle footnote overflow before floating keeps, because the keep
-.\" might contain an embedded footnote.
-.fn@top-hook
-.kp@top-hook
-.tbl@top-hook
-.ns
-..
-.de pg@cs-top
-.sp \\n[HM]u
-.\" move pg@bottom and pg*footer out of the way
-.ch pg@bottom \\n[.p]u*2u
-.ch pg*footer \\n[.p]u*2u
-.ns
-..
-.de pg@bottom
-.tbl@bottom-hook
-.if \\n[pg@fn-flag] .fn@bottom-hook
-.nr pg*col-num +1
-.ie \\n[pg*col-num]<\\n[pg@ncols] .pg*end-col
-.el .pg*end-page
-..
-.de pg*end-col
-'sp |\\n[pg*col-top]u
-.po (u;\\n[PO]+(\\n[pg@colw]+\\n[pg*gutw]*\\n[pg*col-num]))
-.\"po +(u;\\n[pg@colw]+\\n[pg*gutw])
-.pg*start-col
-..
-.de pg*end-page
-.po \\n[PO]u
-.\" Make sure we don't exit if there are still floats or footnotes left-over.
-.ie \\n[kp@head]<\\n[kp@tail]:\\n[fn@have-overflow] \{\
-. \" Switching environments ensures that we don't get an unnecessary
-. \" blank line at the top of the page.
-. ev ne
-' bp
-. ev
-.\}
-.el \{\
-. \" If the text has ended and there are no more footnotes or keeps, exit.
-. if \\n[pg@text-ended] .ex
-. if r pg*next-number \{\
-. pn \\n[pg*next-number]
-. rr pg*next-number
-. if d pg*next-format \{\
-. af PN \\*[pg*next-format]
-. rm pg*next-format
-. \}
-. \}
-' bp
-.\}
-..
-.\" pg@begin number format
-.de pg@begin
-.ie \\n[.$]>0 \{\
-. nr pg*next-number (;\\$1)
-. ie \\n[.$]>1 .ds pg*next-format \\$2
-. el .rm pg*next-format
-.\}
-.el .rr pg*next-number
-.pg@super-eject
-..
-.\" print the footer line
-.de pg*footer
-.ev h
-.par@reset
-.BT
-.ev
-..
-.\" flush out any keeps or footnotes
-.de pg@super-eject
-.br
-.if !'\\n(.z'' .@error-recover diversion open while ejecting page
-.\" Make sure we stay in the end macro while there is still footnote overflow
-.\" left, or floating keeps.
-.while \\n[kp@tail]>\\n[kp@head]:\\n[pg@fn-flag] \{\
-. rs
-. bp
-.\}
-.bp
-..
-.nr pg@text-ended 0
-.de pg@end-text
-.br
-.nr pg@text-ended 1
-.pg@super-eject
-..
-.em pg@end-text
-.\" ***************************
-.\" ******** module fn ********
-.\" ***************************
-.\" Footnotes.
-.nr fn@sep-dist 8p
-.ev fn
-.\" Round it vertically
-.vs \n[fn@sep-dist]u
-.nr fn@sep-dist \n[.v]
-.ev
-.nr fn*text-num 0 1
-.nr fn*note-num 0 1
-.ds * \\*[par@sup-start]\En+[fn*text-num]\\*[par@sup-end]
-.nr fn*open 0
-.\" normal FS
-.de @FS
-.ie \\n[.$] .fn*do-FS "\\$1" no
-.el \{\
-. ie \\n[fn*text-num]>\\n[fn*note-num] .fn*do-FS \\n+[fn*note-num]
-. el .fn*do-FS
-.\}
-..
-.\" Second argument of `no' means don't embellish the first argument.
-.de fn*do-FS
-.if \\n[fn*open] .@error-recover nested FS
-.nr fn*open 1
-.if \\n[.u] \{\
-. \" Ensure that the first line of the footnote is on the same page
-. \" as the reference. I think this is minimal.
-. ev fn
-. nr fn*need 1v
-. ev
-. ie \\n[pg@fn-flag] .nr fn*need +\\n[fn:PD]
-. el .nr fn*need +\\n[fn@sep-dist]
-. ne \\n[fn*need]u+\\n[.V]u>?0
-.\}
-.ev fn
-.par@reset-env
-.fn*start-div
-.par@reset
-.ie \\n[.$] .FP \\$@
-.el .@LP
-..
-.de @FE
-.ie !\\n[fn*open] .@error FE without FS
-.el \{\
-. nr fn*open 0
-. br
-. ev
-. fn*end-div
-.\}
-..
-.nr fn@have-overflow 0
-.\" called at the top of each column
-.de fn@top-hook
-.nr fn*max-width 0
-.nr fn*page-bottom-pos 0-\\n[FM]-\\n[pg@fn-bottom-margin]
-.ch pg@bottom \\n[fn*page-bottom-pos]u
-.if \\n[fn@have-overflow] \{\
-. nr fn@have-overflow 0
-. fn*start-div
-. ev nf
-. fn@overflow-div
-. ev
-. fn*end-div
-.\}
-..
-.\" This is called at the bottom of the column if pg@fn-flag is set.
-.de fn@bottom-hook
-.nr pg@fn-flag 0
-.nr fn@have-overflow 0
-.nr fn@bottom-pos \\n[.p]-\\n[FM]-\\n[pg@fn-bottom-margin]+\\n[.v]
-.ev fn
-.nr fn@bottom-pos -\\n[.v]
-.ev
-.ie \\n[nl]+\\n[fn@sep-dist]+\n[.V]>\\n[fn@bottom-pos] \{\
-. rn fn@div fn@overflow-div
-. nr fn@have-overflow 1
-.\}
-.el \{\
-. if \\n[pg@ncols]>1 \
-. if \\n[fn*max-width]>\\n[pg@fn-colw] \
-. nr pg@fn-bottom-margin \\n[.p]-\\n[FM]-\\n[nl]+1v
-. wh \\n[fn@bottom-pos]u fn*catch-overflow
-. fn@print-sep
-. ev nf
-. fn@div
-. rm fn@div
-. ev
-. if '\\n(.z'fn@overflow-div' \{\
-. di
-. nr fn@have-overflow \\n[dn]>0
-. \}
-. ch fn*catch-overflow
-.\}
-..
-.de fn*catch-overflow
-.di fn@overflow-div
-..
-.nr fn*embed-count 0
-.de @div-end!fn@div
-.br
-.if '\\n[.ev]'fn' .ev
-.fn*end-div
-.nr fn*open 0
-..
-.als @div-end!fn*embed-div @div-end!fn@div
-.de fn*start-div
-.ie '\\n(.z'' \{\
-. da fn@div
-. if !\\n[pg@fn-flag] .ns
-.\}
-.el .di fn*embed-div
-..
-.de fn*end-div
-.ie '\\n(.z'fn@div' \{\
-. di
-. nr fn*page-bottom-pos -\\n[dn]
-. nr fn*max-width \\n[fn*max-width]>?\\n[dl]
-. if !\\n[pg@fn-flag] .nr fn*page-bottom-pos -\\n[fn@sep-dist]
-. nr pg@fn-flag 1
-. nr fn*page-bottom-pos \\n[nl]-\\n[.p]+\n[.V]>?\\n[fn*page-bottom-pos]
-. ch pg@bottom \\n[fn*page-bottom-pos]u
-.\}
-.el \{\
-. ie '\\n(.z'fn*embed-div' \{\
-. di
-. rn fn*embed-div fn*embed-div!\\n[fn*embed-count]
-\!. fn*embed-start \\n[fn*embed-count]
-. rs
-' sp (u;\\n[dn]+\\n[fn@sep-dist]+\\n[.V])
-\!. fn*embed-end
-. nr fn*embed-count +1
-. \}
-. el \{\
-. ev fn
-. @error-recover unclosed diversion within footnote
-. \}
-.\}
-..
-.de fn*embed-start
-.ie '\\n(.z'' \{\
-. fn*start-div
-. ev nf
-. fn*embed-div!\\$1
-. rm fn*embed-div!\\$1
-. ev
-. fn*end-div
-. di fn*null
-.\}
-.el \{\
-\!. fn*embed-start \\$1
-. rs
-.\}
-..
-.de fn*embed-end
-.ie '\\n(.z'fn*null' \{\
-. di
-. rm fn*null
-.\}
-.el \!.fn*embed-end
-..
-.\" It's important that fn@print-sep use up exactly fn@sep-dist vertical space.
-.de fn@print-sep
-.ev fn
-.in 0
-.vs \\n[fn@sep-dist]u
-\D'l 1i 0'
-.br
-.ev
-..
-.\" ***************************
-.\" ******** module kp ********
-.\" ***************************
-.\" Keeps.
-.de KS
-.br
-.di kp*div
-..
-.de KF
-.if !'\\n(.z'' .@error-recover KF while open diversion
-.di kp*fdiv
-.ev k
-.par@reset-env
-.par@reset
-..
-.de KE
-.ie '\\n(.z'kp*div' .kp*end
-.el \{\
-. ie '\\n(.z'kp*fdiv' .kp*fend
-. el .@error KE without KS or KF
-.\}
-..
-.de @div-end!kp*div
-.kp*end
-..
-.de @div-end!kp*fdiv
-.kp*fend
-..
-.de kp*need
-.ie '\\n(.z'' .ds@need \\$1
-.el \!.kp*need \\$1
-..
-.\" end non-floating keep
-.de kp*end
-.br
-.di
-.kp*need \\n[dn]
-.ev nf
-.kp*div
-.ev
-.rm kp*div
-..
-.\" Floating keeps.
-.nr kp@head 0
-.nr kp@tail 0
-.\" end floating keep
-.de kp*fend
-.br
-.ev
-.di
-.ie \\n[.t]-(\\n[.k]>0*1v)>\\n[dn] \{\
-. br
-. ev nf
-. kp*fdiv
-. rm kp*fdiv
-. ev
-.\}
-.el \{\
-. rn kp*fdiv kp*div!\\n[kp@tail]
-. nr kp*ht!\\n[kp@tail] 0\\n[dn]
-. nr kp@tail +1
-.\}
-..
-.\" top of page processing for KF
-.nr kp*doing-top 0
-.de kp@top-hook
-.if !\\n[kp*doing-top] \{\
-. nr kp*doing-top 1
-. kp*do-top
-. nr kp*doing-top 0
-.\}
-..
-.de kp*do-top
-.\" If the first keep won't fit, only force it out if we haven't had a footnote
-.\" and we're at the top of the page.
-.nr kp*force \\n[pg@fn-flag]=0&(\\n[nl]<=\\n[pg@header-bottom])
-.nr kp*fits 1
-.while \\n[kp@tail]>\\n[kp@head]&\\n[kp*fits] \{\
-. ie \\n[.t]>\\n[kp*ht!\\n[kp@head]]:\\n[kp*force] \{\
-. nr kp*force 0
-. \" It's important to advance kp@head before bringing
-. \" back the keep, so that if the last line of the
-. \" last keep springs the bottom of page trap, a new
-. \" page will not be started unnecessarily.
-. rn kp*div!\\n[kp@head] kp*temp
-. nr kp@head +1
-. ev nf
-. kp*temp
-. ev
-. rm kp*temp
-. \}
-. el .nr kp*fits 0
-.\}
-..
-.\" ***************************
-.\" ******** module ds ********
-.\" ***************************
-.\" Displays and non-floating keeps.
-.de DE
-.ds*end!\\n[\\n[.ev]:ds-type]
-.nr \\n[.ev]:ds-type 0
-..
-.de ds@auto-end
-.if \\n[\\n[.ev]:ds-type] \{\
-. @error automatically terminating display
-. DE
-.\}
-..
-.de @div-end!ds*div
-.ie \\n[\\n[.ev]:ds-type] .DE
-.el .ds*end!2
-..
-.de ds*end!0
-.@error DE without DS, ID, CD, LD or BD
-..
-.de LD
-.br
-.nr \\n[.ev]:ds-type 1
-.par@reset
-.nf
-.sp \\n[DD]u
-..
-.de ID
-.LD
-.ie \\n[.$] .in +(n;\\$1)
-.el .in +\\n[DI]u
-..
-.de CD
-.LD
-.ce 9999
-..
-.de RD
-.LD
-.rj 9999
-..
-.de ds*common-end
-.par@reset
-.sp \\n[DD]u
-..
-.als ds*end!1 ds*common-end
-.de BD
-.LD
-.nr \\n[.ev]:ds-type 2
-.di ds*div
-..
-.de ds*end!2
-.br
-.ie '\\n(.z'ds*div' \{\
-. di
-. nf
-. in (u;\\n[.l]-\\n[dl]/2>?0)
-. ds*div
-. rm ds*div
-. ds*common-end
-.\}
-.el .@error-recover mismatched DE
-..
-.de DS
-.br
-.di ds*div
-.ie '\\$1'B' \{\
-. LD
-. nr \\n[.ev]:ds-type 4
-.\}
-.el \{\
-. ie '\\$1'L' .LD
-. el \{\
-. ie '\\$1'C' .CD
-. el \{\
-. ie '\\$1'R' .RD
-. el \{\
-. ie '\\$1'I' .ID \\$2
-. el .ID \\$1
-. \}
-. \}
-. \}
-. nr \\n[.ev]:ds-type 3
-.\}
-..
-.de ds@need
-.if '\\n(.z'' \{\
-. while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[pg@header-bottom]) \{\
-. rs
-' sp \\n[.t]u
-. \}
-.\}
-..
-.de ds*end!3
-.br
-.ie '\\n(.z'ds*div' \{\
-. di
-. ds@need \\n[dn]
-. ev nf
-. ds*div
-. ev
-. rm ds*div
-. ds*common-end
-.\}
-.el .@error-recover mismatched DE
-..
-.de ds*end!4
-.ie '\\n(.z'ds*div' \{\
-. br
-. di
-. nf
-. in (u;\\n[.l]-\\n[dl]/2>?0)
-. ds@need \\n[dn]
-. ds*div
-. rm ds*div
-. ds*common-end
-.\}
-.el .@error-recover mismatched DE
-..
-.\" ****************************
-.\" ******** module par ********
-.\" ****************************
-.\" Paragraph-level formatting.
-.\" Load time initialization.
-.de par@load-init
-.\" PS and VS might have been set on the command-line
-.if !rPS .nr PS 10
-.if !rLL .nr LL 6i
-.ll \\n[LL]u
-.\" don't set LT so that it can be defaulted from LL
-.ie rLT .lt \\n[LT]u
-.el .lt \\n[LL]u
-.ie (\\n[PS] >= 1000) \
-. ps (\\n[PS]z / 1000u)
-.el \
-. ps \\n[PS]
-.\" don't set VS so that it can be defaulted from PS
-.ie rVS \{\
-. ie (\\n[VS] >= 1000) \
-. par*vs "(\\n[VS]p / 1000u)"
-. el \
-. par*vs \\n[VS]
-.\}
-.el \{\
-. ie (\\n[PS] >= 1000) \
-. par*vs "((\\n[PS]p / 1000u) + 2p)"
-. el \
-. par*vs "(\\n[PS] + 2)"
-.\}
-.if dFAM .fam \\*[FAM]
-.if !rHY .nr HY 14
-.hy \\n[HY]
-.TA
-.CHECK-FOOTER-AND-KEEP
-..
-.de par*vs
-.\" If it's too big to be in points, treat it as units.
-.ie (p;\\$1)>=40p .vs (u;\\$1)
-.el .vs (p;\\$1)
-..
-.de par@ab-indent
-.nr 0:li (u;\\n[LL]/12)
-.nr 0:ri \\n[0:li]
-..
-.de par*env-init
-.aln \\n[.ev]:PS PS
-.aln \\n[.ev]:VS VS
-.aln \\n[.ev]:LL LL
-.aln \\n[.ev]:MCLL LL
-.aln \\n[.ev]:LT LT
-.aln \\n[.ev]:MCLT LT
-.aln \\n[.ev]:PI PI
-.aln \\n[.ev]:PD PD
-.ad \\n[par*adj]
-.par@reset-env
-..
-.\" happens when the first page begins
-.de par@init
-.if !rLT .nr LT \\n[LL]
-.if !rFL .nr FL \\n[LL]*5/6
-.if !rVS \{\
-. ie (\\n[PS] >= 1000) \
-. nr VS (\\n[PS] + 2000)
-. el \
-. nr VS (\\n[PS] + 2)
-.\}
-.if !rDI .nr DI .5i
-.if !rFPS \{\
-. ie (\\n[PS] >= 1000) \
-. nr FPS (\\n[PS] - 2000)
-. el \
-. nr FPS (\\n[PS] - 2)
-.\}
-.if !rFVS \{\
-. ie (\\n[FPS] >= 1000) \
-. nr FVS (\\n[FPS] + 2000)
-. el \
-. nr FVS (\\n[FPS] + 2)
-.\}
-.\" don't change environment 0
-.ev h
-.ie (\\n[PS] >= 1000) \
-. ps (\\n[PS]z / 1000u)
-.el \
-. ps \\n[PS]
-.if !rQI .nr QI 5n
-.if !rPI .nr PI 5n
-.ie (\\n[VS] >= 1000) \
-. par*vs "(\\n[VS]p / 1000u)"
-.el \
-. par*vs \\n[VS]
-.if !rPD .nr PD .3v>?\n(.V
-.if !rDD .nr DD .5v>?\n(.V
-.if !rFI .nr FI 2n
-.if !rFPD .nr FPD \\n[PD]/2
-.ev
-.if !dFAM .ds FAM \\n[.fam]
-.nr par*adj \\n[.j]
-.par*env-init
-.ev h
-.par*env-init
-.ev
-.ev fn
-.par*env-init
-.ev
-.ev k
-.par*env-init
-.ev
-.aln 0:MCLL pg@colw
-.aln 0:MCLT pg@colw
-.aln k:MCLL pg@colw
-.aln k:MCLT pg@colw
-.aln fn:PS FPS
-.aln fn:VS FVS
-.aln fn:LL FL
-.aln fn:LT FL
-.aln fn:PI FI
-.aln fn:PD FPD
-.aln fn:MCLL pg@fn-colw
-.aln fn:MCLT pg@fn-colw
-..
-.de par@reset-env
-.nr \\n[.ev]:il 0
-.nr \\n[.ev]:li 0
-.nr \\n[.ev]:ri 0
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.nr \\n[.ev]:pli 0
-.nr \\n[.ev]:pri 0
-.nr \\n[.ev]:ds-type 0
-..
-.\" par@reset
-.de par@reset
-.br
-.if \\n[need_eo_tl]>0 .DEVTAG-EO-TL
-.nr need_eo_tl 0
-.if \\n[need_eo_h]>0 .DEVTAG-EO-H
-.nr need_eo_h 0
-.ce 0
-.rj 0
-.ul 0
-.fi
-.ie \\n[pg@ncols]>1 \{\
-. ll (u;\\n[\\n[.ev]:MCLL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri])
-. lt \\n[\\n[.ev]:MCLT]u
-.\}
-.el \{\
-. ll (u;\\n[\\n[.ev]:LL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri])
-. lt \\n[\\n[.ev]:LT]u
-.\}
-.in (u;\\n[\\n[.ev]:li]+\\n[\\n[.ev]:pli])
-.ft 1
-.fam \\*[FAM]
-.ie (\\n[\\n[.ev]:PS] >= 1000) \
-. ps (\\n[\\n[.ev]:PS]z / 1000u)
-.el \
-. ps \\n[\\n[.ev]:PS]
-.ie (\\n[\\n[.ev]:VS] >= 1000) \
-. par*vs "(\\n[\\n[.ev]:VS]p / 1000u)"
-.el \
-. par*vs \\n[\\n[.ev]:VS]
-.ls 1
-.TA
-.hy \\n[HY]
-..
-.de @RT
-.nr \\n[.ev]:pli 0
-.nr \\n[.ev]:pri 0
-.par@reset
-..
-.\" This can be redefined by the user.
-.de TA
-.ta T 5n
-..
-.\" \n[PORPHANS] sets number of initial lines of any paragraph,
-.\" which must be kept together, without any included page break.
-.\" Initialise to reproduce original behaviour; user may adjust it.
-.if !rPORPHANS .nr PORPHANS 1
-.
-.de par*start
-.ds@auto-end
-.nr \\n[.ev]:pli \\$1
-.nr \\n[.ev]:pri \\$2
-.par@reset
-.sp \\n[\\n[.ev]:PD]u
-.ne \\n[PORPHANS]v+\\n(.Vu
-..
-.de par@finish
-.nr \\n[.ev]:pli 0
-.nr \\n[.ev]:pri 0
-.par@reset
-..
-.\" normal LP
-.de @LP
-.par*start 0 0
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-..
-.de @PP
-.par*start 0 0
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.if !'\*(.T'html' .ti +\\n[\\n[.ev]:ai]u
-..
-.de @QP
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.par*start \\n[QI] \\n[QI]
-..
-.de @XP
-.par*start \\n[\\n[.ev]:PI] 0
-.ti -\\n[\\n[.ev]:PI]u
-..
-.de @IP
-.if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2)
-.par*start \\n[\\n[.ev]:ai] 0
-.if !'\\$1'' \{\
-. \" Divert the label so as to freeze any spaces.
-. di par*label
-. par*push-tag-env
-\&\\$1
-. par*pop-tag-env
-. di
-. chop par*label
-. ti -\\n[\\n[.ev]:ai]u
-. ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \{\
-. DEVTAG-COL 1
-\\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c
-. DEVTAG-COL 2
-. \}
-. el \{\
-. DEVTAG-COL 1
-\\*[par*label]
-. DEVTAG-COL-NEXT 2
-. br
-. \}
-. rm par*label
-.\}
-..
-.\" We don't want margin characters to be attached when we divert
-.\" the tag. Since there's no way to save and restore the current
-.\" margin character, we have to switch to a new environment, taking
-.\" what we need of the old environment with us.
-.de par*push-tag-env
-.nr par*saved-font \\n[.f]
-.nr par*saved-size \\n[.s]z
-.nr par*saved-ss \\n[.ss]
-.ds par*saved-fam \\n[.fam]
-.ev par
-.nf
-.TA
-.ft \\n[par*saved-font]
-.ps \\n[par*saved-size]u
-.ss \\n[par*saved-ss]
-.fam \\*[par*saved-fam]
-..
-.de par*pop-tag-env
-.ev
-..
-.de @RS
-.br
-.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li]
-.nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri]
-.nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai]
-.nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli]
-.nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri]
-.nr \\n[.ev]:il +1
-.nr \\n[.ev]:li +\\n[\\n[.ev]:ai]
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.par@reset
-..
-.de @RE
-.br
-.ie \\n[\\n[.ev]:il] \{\
-. nr \\n[.ev]:il -1
-. nr \\n[.ev]:ai \\n[\\n[.ev]:ai!\\n[\\n[.ev]:il]]
-. nr \\n[.ev]:li \\n[\\n[.ev]:li!\\n[\\n[.ev]:il]]
-. nr \\n[.ev]:ri \\n[\\n[.ev]:ri!\\n[\\n[.ev]:il]]
-. nr \\n[.ev]:pli \\n[\\n[.ev]:pli!\\n[\\n[.ev]:il]]
-. nr \\n[.ev]:pri \\n[\\n[.ev]:pri!\\n[\\n[.ev]:il]]
-.\}
-.el .@error unbalanced \\$0
-.par@reset
-..
-.de @QS
-.br
-.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li]
-.nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri]
-.nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai]
-.nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli]
-.nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri]
-.nr \\n[.ev]:il +1
-.nr \\n[.ev]:li +\\n[QI]
-.nr \\n[.ev]:ri +\\n[QI]
-.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.par@reset
-..
-.als @QE @RE
-.\" start boxed text
-.de B1
-.br
-.HTML-IMAGE
-.di par*box-div
-.nr \\n[.ev]:li +1n
-.nr \\n[.ev]:ri +1n
-.nr par*box-in \\n[.in]
-.\" remember what 1n is, just in case the point size changes
-.nr par*box-n 1n
-.in +1n
-.ll -1n
-.lt -1n
-.ti \\n[par*box-in]u+1n
-..
-.de @div-end!par*box-div
-.B2
-..
-.\" end boxed text
-.\" Postpone the drawing of the box until we're in the top-level diversion,
-.\" in case there's a footnote inside the box.
-.de B2
-.ie '\\n(.z'par*box-div' \{\
-. br
-. if \n[.V]>.25m .sp
-. di
-. if \n[.V]>.25m .sp
-. ds@need \\n[dn]
-. par*box-mark-top
-. ev nf
-. par*box-div
-. ev
-. nr \\n[.ev]:ri -\\n[par*box-n]
-. nr \\n[.ev]:li -\\n[par*box-n]
-. in -\\n[par*box-n]u
-. ll +\\n[par*box-n]u
-. lt +\\n[par*box-n]u
-. par*box-draw \\n[.i]u \\n[.l]u-(\\n[.H]u==1n*1n)
-.\}
-.el .@error B2 without B1
-.HTML-IMAGE-END
-..
-.de par*box-mark-top
-.ie '\\n[.z]'' \{\
-. rs
-. mk par*box-top
-.\}
-.el \!.par*box-mark-top
-..
-.de par*box-draw
-.ie '\\n[.z]'' \{\
-. nr par*box-in \\n[.i]
-. nr par*box-ll \\n[.l]
-. nr par*box-vpt \\n[.vpt]
-. nr par*box-ad \\n[.j]
-. ad l
-. vpt 0
-. in \\$1
-. ll \\$2
-\v'-1v+.25m'\
-\D'l (u;\\n[.l]-\\n[.i]) 0'\
-\D'l 0 |\\n[par*box-top]u'\
-\D'l -(u;\\n[.l]-\\n[.i]) 0'\
-\D'l 0 -|\\n[par*box-top]u'
-. br
-. sp -1
-. in \\n[par*box-in]u
-. ll \\n[par*box-ll]u
-. vpt \\n[par*box-vpt]
-. ad \\n[par*box-ad]
-.\}
-.el \!.par*box-draw \\$1 \\$2
-..
-.\" \n[HORPHANS] sets how many lines of the following paragraph must be
-.\" kept together, with a preceding section header. Initialise it,
-.\" to reproduce original behaviour; user may change it.
-.if !rHORPHANS .nr HORPHANS 1
-.
-.\" \n[GROWPS] and \n[PSINCR] cause auto-increment of header point size.
-.\" Initialise them, so they have no effect, unless explicitly set by the user.
-.if !rGROWPS .nr GROWPS 0
-.if !rPSINCR .nr PSINCR 1p
-.
-.de SH-NO-TAG
-.par@finish
-.\" Keep the heading and the first few lines of the next paragraph together.
-.\" (\n[HORPHANS] defines "first few" -- default = 1; user may redefine it).
-.nr sh*minvs \\n[HORPHANS]v
-.if \\n[sh*psincr]<0 .nr sh*psincr 0
-.ie \\n(VS<1000 .par*vs \\n(VSp+\\n[sh*psincr]u
-.el .par*vs \\n(VSp/1000u+\\n[sh*psincr]u
-.ne 2v+\\n[sh*minvs]u+\\n[\\n[.ev]:PD]u+\\n(.Vu
-.\" Adjust point size for heading text, as specified by \n[GROWPS] and \n[PSINCR].
-.ie \\n(PS<1000 .ps \\n(PS+\\n[sh*psincr]u
-.el .ps \\n(PSz/1000u+\\n[sh*psincr]u
-.sp 1
-.ft B
-..
-.de @SH
-.\" Standard ms implementation does not expect an argument,
-.\" but allow ".SH n" to make heading point size match ".NH n",
-.\" for same "n", when \n[GROWPS] and \n[PSINCR] are set.
-. nr sh*psincr 0
-. if 0\\$1>0 .nr sh*psincr (\\n[GROWPS]-0\\$1)*\\n[PSINCR]
-. SH-NO-TAG
-. DEVTAG-SH 1
-. if '\*(.T'html' .nr need_eo_h 1
-..
-.\" TL, AU, and AI are aliased to these in cov*ab-init.
-.de par@TL
-.par@finish
-.sp 1
-.ft B
-.ps +2
-.vs +3p
-.ce 9999
-.DEVTAG-TL
-.nr need_eo_tl 1
-..
-.de par@AU
-.par@finish
-.sp 1
-.ft I
-.ce 9999
-..
-.de par@AI
-.par@finish
-.sp .5
-.ce 9999
-..
-.\" In paragraph macros.
-.de NL
-.ie (\\n[\\n[.ev]:PS] >= 1000) \
-. ps (\\n[\\n[.ev]:PS]z / 1000u)
-.el \
-. ps \\n[\\n[.ev]:PS]
-..
-.de SM
-.ps -2
-..
-.de LG
-.ps +2
-..
-.de R
-.ft R
-..
-.\" par*define-font-macro macro font
-.de par*define-font-macro
-.de \\$1
-.ie \\\\n[.$] \{\
-. nr par*prev-font \\\\n[.f]
-\&\\\\$3\f[\\$2]\\\\$1\f[\\\\n[par*prev-font]]\\\\$2
-.\}
-.el .ft \\$2
-\\..
-..
-.par*define-font-macro B B
-.par*define-font-macro I I
-.par*define-font-macro BI BI
-.par*define-font-macro CW CR
-.\" underline a word
-.de UL
-\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
-..
-.\" box a word
-.de BX
-.nr par*bxw \w'\\$1'+.4m
-\Z'\v'.25m'\D'l 0 -1m'\D'l \\n[par*bxw]u 0'\D'l 0 1m'\D'l -\\n[par*bxw]u 0''\
-\Z'\h'.2m'\\$1'\
-\h'\\n[par*bxw]u'
-..
-.\" The first time UX is used, put a registered mark after it.
-.ds par*ux-rg \(rg
-.de UX
-\s[\\n[.s]*8u/10u]UNIX\s0\\$1\\*[par*ux-rg]
-.ds par*ux-rg
-..
-.ds par@sup-start \v'-.9m\s'\En[.s]*7u/10u'+.7m'
-.als { par@sup-start
-.ds par@sup-end \v'-.7m\s0+.9m'
-.als } par@sup-end
-.\" footnote paragraphs
-.\" FF is the footnote format
-.nr FF 0
-.\" This can be redefined. It gets a second argument of `no' if the first
-.\" argument was supplied by the user, rather than automatically.
-.de FP
-.br
-.if !d par*fp!\\n[FF] \{\
-. @error unknown footnote format `\\n[FF]'
-. nr FF 0
-.\}
-.ie '\\$2'no' .par*fp!\\n[FF]-no "\\$1"
-.el .par*fp!\\n[FF] "\\$1"
-..
-.de par*fp!0
-.@PP
-\&\\*[par@sup-start]\\$1\\*[par@sup-end]\ \c
-..
-.de par*fp!0-no
-.@PP
-\&\\$1\ \c
-..
-.de par*fp!1
-.@PP
-\&\\$1.\ \c
-..
-.de par*fp!1-no
-.@PP
-\&\\$1\ \c
-..
-.de par*fp!2
-.@LP
-\&\\$1.\ \c
-..
-.de par*fp!2-no
-.@LP
-\&\\$1\ \c
-..
-.de par*fp!3
-.@IP "\\$1." (u;\\n[\\n[.ev]:PI]*2)
-..
-.de par*fp!3-no
-.@IP "\\$1" (u;\\n[\\n[.ev]:PI]*2)
-..
-.\" ***************************
-.\" ******** module nh ********
-.\" ***************************
-.\" Numbered headings.
-.\" nh*hl is the level of the last heading
-.nr nh*hl 0
-.\" numbered heading
-.de @NH
-.ie '\\$1'S' \{\
-. shift
-. nr nh*hl 0
-. while \\n[.$] \{\
-. nr nh*hl +1
-. nr H\\n[nh*hl] 0\\$1
-. shift
-. \}
-. if !\\n[nh*hl] \{\
-. nr H1 1
-. nr nh*hl 1
-. @error missing arguments to .NH S
-. \}
-.\}
-.el \{\
-. nr nh*ohl \\n[nh*hl]
-. ie \\n[.$] \{\
-. nr nh*hl 0\\$1
-. ie \\n[nh*hl]<=0 \{\
-. nr nh*ohl 0
-. nr nh*hl 1
-. \}
-. el \{\
-. if \\n[nh*hl]-\\n[nh*ohl]>1 \
-. @warning .NH \\n[nh*ohl] followed by .NH \\n[nh*hl]
-. \}
-. \}
-. el .nr nh*hl 1
-. while \\n[nh*hl]>\\n[nh*ohl] \{\
-. nr nh*ohl +1
-. nr H\\n[nh*ohl] 0
-. \}
-. nr H\\n[nh*hl] +1
-.\}
-.ds SN-NO-DOT \\n(H1
-.nr nh*i 1
-.while \\n[nh*i]<\\n[nh*hl] \{\
-. nr nh*i +1
-. as SN-NO-DOT .\\n[H\\n[nh*i]]
-.\}
-.ds SN-DOT \\*[SN-NO-DOT].
-.if !dSN .als SN SN-DOT
-.nr sh*psincr (\\n[GROWPS]-\\n[nh*hl])*\\n[PSINCR]
-.SH-NO-TAG
-.DEVTAG-NH "\\$1"
-. if '\*(.T'html' .nr need_eo_h 1
-\\*[SN-DOT]
-..
-.\" ****************************
-.\" ******** module toc ********
-.\" ****************************
-.\" Table of contents generation.
-.de @XS
-.da toc*div
-.ev h
-.ie \\n[.$] .XA "\\$1"
-.el .XA
-..
-.de @div-end!toc*div
-.XE
-..
-.de XA
-.ie '\\n(.z'toc*div' \{\
-. if d toc*num .toc*end-entry
-. ie \\n[.$] \{\
-. ie '\\$1'no' .ds toc*num
-. el .ds toc*num "\\$1
-. \}
-. el .ds toc*num \\n[PN]
-. br
-. par@reset
-. na
-. ll -8n
-. in (n;0\\$2)
-.\}
-.el .@error XA without XS
-..
-.de XE
-.ie '\\n(.z'toc*div' \{\
-. if d toc*num .toc*end-entry
-. ev
-. di
-.\}
-.el .@error XE without XS
-..
-.de toc*end-entry
-\\a\\t\\*[toc*num]
-.br
-.rm toc*num
-..
-.de PX
-.1C
-.if !'\\$1'no' \{\
-. ce 1
-. ie (\\n[PS] >= 1000) \
-. ps ((\\n[PS]z / 1000u) + 2z)
-. el \
-. ps \\n[PS]+2
-. ft B
-\\*[TOC]
-. ft
-. ps
-.\}
-.nf
-.char \[toc*leader-char] .\h'1m'
-.lc \[toc*leader-char]
-.ta (u;\\n[.l]-\\n[.i]-\w'000') (u;\\n[.l]-\\n[.i])R
-.sp 2
-.toc*div
-.par@reset
-..
-.\" print the table of contents on page i
-.de TC
-.P1
-.pg@begin 1 i
-.PX \\$1
-..
-.\" ****************************
-.\" ******** module eqn ********
-.\" ****************************
-.\" Eqn support.
-.de EQ
-..
-.de EN
-..
-.de @EQ
-.br
-.ds eqn*num "\\$2
-.ie '\\$1'L' .nr eqn*type 0
-.el \{\
-. ie '\\$1'I' .nr eqn*type 1
-. el \{\
-. nr eqn*type 2
-. if !'\\$1'C' .ds eqn*num "\\$1
-. \}
-.\}
-.di eqn*div
-.in 0
-.if \\n[eqn*type]=0 .HTML-IMAGE-LEFT
-.if \\n[eqn*type]=1 \{\
-. if '\*(.T'html' .RS
-. HTML-IMAGE-INLINE
-.\}
-.if \\n[eqn*type]=2 .HTML-IMAGE
-.nf
-..
-.de @div-end!eqn*div
-.@EN
-..
-.\" Note that geqn mark and lineup work correctly in centered equations.
-.de @EN
-.ie !'\\n(.z'eqn*div' .@error-recover mismatched EN
-.el \{\
-. br
-. di
-. nr eqn*have-num 0
-. if !'\\*[eqn*num]'' .nr eqn*have-num 1
-. ie \\n[dl]:\\n[eqn*have-num] \{\
-. sp \\n[DD]u
-. par@reset
-. ds eqn*tabs \\n[.tabs]
-. nf
-. ie \\n[dl] \{\
-.\" --fixme-- this really should not be necessary
-.\" and indicates that there is extra space creeping into
-.\" an equation when ps4html is enabled..
-. ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i
-. el .ds@need \\n[dn]u-1v+\n[.V]u
-. chop eqn*div
-. ie \\n[eqn*type]=0 \{\
-. ta (u;\\n[.l]-\\n[.i])R
-\\*[eqn*div]\t\\*[eqn*num]
-. \}
-. el \{\
-. ie \\n[eqn*type]=1 .ta \\n[DI]u \
-(u;\\n[.l]-\\n[.i])R
-. el .ta (u;\\n[.l]-\\n[.i]/2)C \
-(u;\\n[.l]-\\n[.i])R
-\t\\*[eqn*div]\t\\*[eqn*num]
-. \}
-. \}
-. el \{\
-. ta (u;\\n[.l]-\\n[.i])R
-\t\\*[eqn*num]
-. \}
-.\". if !'\*(.T'html' .sp \\n[DD]u
-. sp \\n[DD]u
-. ta \\*[eqn*tabs]
-. \}
-. el \{
-.\" must terminate empty equations in html and ps4html as they contain
-.\" the HTML-IMAGE-END suppression nodes
-. if \\n[dl] .chop eqn*div
-. if '\*(.T'html' \\*[eqn*div]
-. if r ps4html \\*[eqn*div]
-. \}
-. if !'\*(.T'html' .fi
-. if \\n[eqn*type]=0 .HTML-IMAGE-END
-. if \\n[eqn*type]=1 \{\
-. HTML-IMAGE-END
-. if '\*(.T'html' .RE
-. \}
-. if \\n[eqn*type]=2 .HTML-IMAGE-END
-.\}
-..
-.\" ****************************
-.\" ******** module tbl ********
-.\" ****************************
-.\" Tbl support.
-.nr tbl*have-header 0
-.\" This gets called if TS occurs before the first paragraph.
-.de TS
-.LP
-.\" cov*ab-init aliases TS to @TS
-\\*[TS]\\
-..
-.de @TS
-.sp \\n[DD]u
-.if '\\$1'H' .di tbl*header-div
-.HTML-IMAGE
-..
-.de tbl@top-hook
-.if \\n[tbl*have-header] \{\
-. ie \\n[.t]-\\n[tbl*header-ht]-1v .tbl*print-header
-. el .sp \\n[.t]u
-.\}
-..
-.de tbl*print-header
-.ev nf
-.tbl*header-div
-.ev
-.mk #T
-..
-.de TH
-.ie '\\n[.z]'tbl*header-div' \{\
-. nr T. 0
-. T#
-. br
-. di
-. ie \\n[dn]+\\n[FM]+\\n[HM]+2v>=\\n[.p] \{\
-. @error ridiculously long table header
-. ds@need \\n[dn]
-. tbl*print-header
-. \}
-. el \{\
-. nr tbl*header-ht \\n[dn]
-. ds@need \\n[dn]u+1v
-. tbl*print-header
-. nr tbl*have-header 1
-. \}
-.\}
-.el .@error-recover .TH without .TS H
-..
-.de @div-end!tbl*header-div
-.TH
-.TE
-..
-.de TE
-.ie '\\n(.z'tbl*header-div' .@error-recover .TS H but no .TH before .TE
-.el \{\
-. nr tbl*have-header 0
-. if !'\*(.T'html' .sp \\n[DD]u
-.\}
-. HTML-IMAGE-END
-.\" reset tabs
-.TA
-..
-.de tbl@bottom-hook
-.if \\n[tbl*have-header] \{\
-. nr T. 1
-. T#
-.\}
-..
-.de T&
-..
-.\" ****************************
-.\" ******** module pic ********
-.\" ****************************
-.\" Pic support.
-.\" PS height width
-.de PS
-.br
-.sp \\n[DD]u
-.ie \\n[.$]<2 .@error bad arguments to PS (not preprocessed with pic?)
-.el \{\
-. ds@need (u;\\$1)+1v
-. in +(u;\\n[.l]-\\n[.i]-\\$2/2>?0)
-.\}
-.HTML-IMAGE
-..
-.de PE
-.HTML-IMAGE-END
-.par@reset
-.sp \\n[DD]u+.5m
-..
-.\" ****************************
-.\" ******** module ref ********
-.\" ****************************
-.\" Refer support.
-.de ]-
-.rm [A [B [C [D [E [G [I [J [N [O [P [Q [R [S [T [V
-.rm ref*string
-..
-.\" Other
-.ds ref*spec!0 Q A T1 S V N P I C D O
-.\" Journal article
-.ds ref*spec!1 Q A T2 J S V N P I C D O
-.\" Book
-.ds ref*spec!2 Q A T1 S V P I C D O
-.\" Article within book
-.ds ref*spec!3 Q A T2 B E S V P I C D O
-.\" Tech report
-.ds ref*spec!4 Q A T2 R G P I C D O
-.\" ][ type
-.de ][
-.if r [T \{\
-. als [T1 [T
-. als [T2 [T
-.\}
-.ie d ref*spec!\\$1 .ref*build \\*[ref*spec!\\$1]
-.el \{\
-. @error unknown reference type `\\$1'
-. ref*build \\*[ref*spec!0]
-.\}
-.ref*print
-.rm ref*string
-.rm [F [T1 [T2
-..
-.\" start of reference number
-.ds [. \\*[par@sup-start]
-.\" end of reference number
-.ds .] \\*[par@sup-end]
-.\" period before reference
-.ds <. .
-.\" period after reference
-.ds >. \" empty
-.\" comma before reference
-.ds <, ,
-.\" comma after reference
-.ds >, \" empty
-.\" start collected references
-.de ]<
-.als ref*print ref*end-print
-.SH
-\&\\*[REFERENCES]
-.par@reset
-..
-.\" end collected references
-.de ]>
-.par@finish
-.als ref*print ref*normal-print
-..
-.de ref*normal-print
-.ie d [F .FS "\\*([.\\*([F\\*(.]"
-.el .FS \&
-\\*[ref*string]
-.FE
-..
-.de ref*end-print
-.ie d [F .IP "\\*([F."
-.el .XP
-\\*[ref*string]
-..
-.als ref*print ref*normal-print
-.de ref*build
-.rm ref*string ref*post-punct
-.nr ref*suppress-period 1
-.while \\n[.$] \{\
-. if d [\\$1 \{\
-. ie d ref*add-\\$1 .ref*add-\\$1
-. el .ref*add-dflt \\$1
-. \}
-. shift
-.\}
-.\" now add a final period
-.ie d ref*string \{\
-. if !\\n[ref*suppress-period] .as ref*string .
-. if d ref*post-punct \{\
-. as ref*string "\\*[ref*post-punct]
-. rm ref*post-punct
-. \}
-.\}
-.el .ds ref*string
-..
-.de ref*add-T1
-.ref*field T , "\fI" "" "\fP"
-.if r [T .nr ref*suppress-period \\n([T
-..
-.de ref*add-T2
-.ref*field T , "\\*Q" "" "\\*U"
-.if r [T .nr ref*suppress-period \\n([T
-..
-.de ref*add-P
-.ie \\n([P>0 .ref*field P , "pp. "
-.el .ref*field P , "p. "
-..
-.de ref*add-J
-.ref*field J , \fI "" \fP
-..
-.de ref*add-D
-.ref*field D "" ( )
-..
-.de ref*add-E
-.ref*field E , "ed. "
-..
-.de ref*add-G
-.ref*field G "" ( )
-..
-.de ref*add-B
-.ref*field B "" "in \fI" "" \fP
-..
-.de ref*add-O
-.ref*field O .
-.ie r [O .nr ref*suppress-period \\n([O
-.el .nr ref*suppress-period 1
-..
-.de ref*add-A
-.ref*field A ,
-.if r [A .nr ref*suppress-period \\n([A
-..
-.de ref*add-V
-.ref*field V "" \fB \fR
-..
-.de ref*add-N
-.ref*field N \z( "" ")"
-..
-.de ref*add-dflt
-.ref*field \\$1 ,
-..
-.\" First argument is the field letter.
-.\" Second argument is the punctuation character to use to separate this field
-.\" from the previous field.
-.\" Third argument is a string with which to prefix this field.
-.\" Fourth argument is a string with which to postfix this field.
-.\" Fifth argument is a string to add after the punctuation character supplied
-.\" by the next field.
-.de ref*field
-.if d ref*string \{\
-. ie d ref*post-punct \{\
-. as ref*string "\\$2\\*[ref*post-punct] \"
-. rm ref*post-punct
-. \}
-. el .as ref*string "\\$2 \"
-.\}
-.as ref*string "\\$3\\*([\\$1\\$4
-.if \\n[.$]>4 .ds ref*post-punct "\\$5
-.nr ref*suppress-period 0
-..
-.\" ****************************
-.\" ******** module acc ********
-.\" ****************************
-.\" Accents and special characters.
-.ds Q \(lq
-.ds U \(rq
-.ds - \(em
-.\" Characters
-.\" The idea of this definition is for the top of the 3 to be at the x-height.
-.if !c\[yogh] .char \[yogh] \Z'\v'\w'x'*0-\En[rst]u'\s[\En[.s]*8u/10u]\
-\v'\w'3'*0+\En[rst]u'3\s0'\h'\w'\s[\En[.s]*8u/10u]3'u'
-.\" Accents
-.de acc*over-def
-.ds \\$1 \Z'\v'(u;\w'x'*0+\En[rst]-\En[.cht])'\
-\h'(u;-\En[skw]+(-\En[.w]-\w'\\$2'/2)+\En[.csk])'\\$2'
-..
-.de acc*under-def
-.ds \\$1 \Z'\v'\En[.cdp]u'\h'(u;-\En[.w]-\w'\\$2'/2)'\\$2'
-..
-.de acc*slash-def
-.ds \\$1 \Z'\h'(u;-\En[.w]-\w'\\$2'/2)'\
-\v'(u;\En[.cdp]-\En[.cht]+\En[rst]+\En[rsb]/2)'\\$2'
-..
-.de acc*prefix-def
-.ds \\$1 \Z'\h'(u;\w'x'-\w'\\$2'/2)'\\$2'
-..
-.acc*prefix-def ' \'
-.acc*prefix-def ` \`
-.acc*prefix-def ^ ^
-.acc*prefix-def , \(ac
-.acc*prefix-def : \(ad
-.acc*prefix-def ~ ~
-.\" improved accent marks
-.de AM
-.acc*over-def ' \'
-.acc*over-def ` \`
-.acc*over-def ^ ^
-.acc*over-def ~ ~
-.acc*over-def : \(ad
-.acc*over-def v \(ah
-.acc*over-def _ \(a-
-.acc*over-def o \(ao
-.acc*under-def , \(ac
-.acc*under-def . \s[\En[.s]*8u/10u]\v'.2m'.\v'-.2m'\s0
-.acc*under-def hook \(ho
-.acc*slash-def / /
-.char \[hooko] o\\\\*[hook]
-.ds q \[hooko]
-.ds 3 \[yogh]
-.ds D- \(-D\" Icelandic uppercase eth
-.ds d- \(Sd\" Icelandic lowercase eth
-.ds Th \(TP\" Icelandic uppercase thorn
-.ds th \(Tp\" Icelandic lowercase thorn
-.ds 8 \(ss\" German double s
-.ds Ae \(AE\" AE ligature
-.ds ae \(ae\" ae ligature
-.ds Oe \(OE\" OE ligature
-.ds oe \(oe\" oe ligature
-.ds ? \(r?\" upside down ?
-.ds ! \(r!\" upside down !
-..
-.de CHECK-FOOTER-AND-KEEP
-.\" it might be better to als FS -> B1 and FE -> B2
-.\" however this produced wierd results, so I've moved back to a more reliable
-.\" but less interesting solution --fixme--
-. if '\*(.T'html' \{\
-. rm KF
-. als KF KS
-. rm FS
-. de FS
-. br
-. HTML-IMAGE
-\\..
-. rm FE
-. de FE
-. br
-. HTML-IMAGE-END
-\\..
-. \}
-. if r ps4html \{\
-. rm FS
-. de FS
-. br
-. HTML-IMAGE
-\\..
-. rm FE
-. de FE
-. br
-. HTML-IMAGE-END
-\\..
-. \}
-..
-.par@load-init
-.\" Make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/safer.tmac b/contrib/groff/tmac/safer.tmac
deleted file mode 100644
index 1e7d03d68469..000000000000
--- a/contrib/groff/tmac/safer.tmac
+++ /dev/null
@@ -1,5 +0,0 @@
-.\" This file is no longer needed; it has been replaced with a built-in
-.\" solution.
-.\"
-.\" It just exists for compatibility reasons with older man programs
-.\" which explicitly load this file.
diff --git a/contrib/groff/tmac/strip.sed b/contrib/groff/tmac/strip.sed
deleted file mode 100644
index 069c3db1fa60..000000000000
--- a/contrib/groff/tmac/strip.sed
+++ /dev/null
@@ -1,10 +0,0 @@
-# strip comments, spaces, etc. after a line containing `%beginstrip%'
-/%beginstrip%/,$ {
- s/^\.[ ]*/./
- s/^\.\\".*/./
- s/\\".*/\\"/
- /\(.[ad]s\)/!s/[ ]*\\"//
- /\(.[ad]s\)/s/\([^ ]*\)\\"/\1/
- s/\([^/]\)doc-/\1/g
-}
-/^\.$/d
diff --git a/contrib/groff/tmac/trace.tmac b/contrib/groff/tmac/trace.tmac
deleted file mode 100644
index 286c605b870e..000000000000
--- a/contrib/groff/tmac/trace.tmac
+++ /dev/null
@@ -1,111 +0,0 @@
-.\" trace.tmac
-.\"
-.\" Load this before a macro package that you want to trace.
-.
-.nr _C \n(.C
-.cp 0
-.
-.do ds !!sp " \"
-.
-.eo
-.
-.rn de !!de
-.rn de1 !!de1
-.
-.
-.!!de de
-. do ecs
-. ec
-. do !!de \$1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de trace enter: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** de trace enter \$1: \\$0 \\$@
-. do as !!sp " \"
-. do nop \\*[!!\$1]\\
-. do substring !!sp 1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
-\..
-.
-. do ds !!d1 !!\$1
-. do ds !!d2 \$2
-.
-. do ecr
-. do dei !!d1 !!d2
-..
-.
-.!!de de1
-. do ecs
-. ec
-. do !!de \$1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de1 trace enter: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** de1 trace enter \$1: \\$0 \\$@
-. do as !!sp " \"
-. do nop \\*[!!\$1]\\
-. do substring !!sp 1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
-\..
-.
-. do ds !!d1 !!\$1
-. do ds !!d2 \$2
-.
-. do ecr
-. do dei1 !!d1 !!d2
-..
-.
-.rn am !!am
-.rn am1 !!am1
-.
-.!!de am
-. do ecs
-. ec
-. do !!de \$1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am trace enter: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** am trace enter \$1: \\$0 \\$@
-. do as !!sp " \"
-. do nop \\*[!!\$1]\\
-. do substring !!sp 1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
-\..
-.
-. do ds !!a1 !!\$1
-. do ds !!a2 \$2
-.
-. do ecr
-. do ami !!a1 !!a2
-..
-.
-.!!de am1
-. do ecs
-. ec
-. do !!de \$1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am1 trace enter: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** am1 trace enter \$1: \\$0 \\$@
-. do as !!sp " \"
-. do nop \\*[!!\$1]\\
-. do substring !!sp 1
-. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
-. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
-\..
-.
-. do ds !!a1 !!\$1
-. do ds !!a2 \$2
-.
-. do ecr
-. do ami1 !!a1 !!a2
-..
-.
-.rn return !!return
-.
-.!!de1 return
-. substring !!sp 1
-. tm1 "\*[!!sp]*** return
-. !!return twice
-..
-.
-.ec
-.
-.cp \n(_C
-.
-.\" EOF
diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc
deleted file mode 100644
index 92b5fad85e73..000000000000
--- a/contrib/groff/tmac/troffrc
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Startup file for troff.
-.\" $FreeBSD$
-.
-.\" This is tested by pic.
-.nr 0p 0
-.
-.\" Load composite mappings.
-.do mso composite.tmac
-.
-.\" Use .do here, so that it works with -C.
-.\" The groff command defines the .X string if the -X option was given.
-.ie r.X .do ds troffrc!ps Xps.tmac
-.el .do ds troffrc!ps ps.tmac
-.do ds troffrc!dvi dvi.tmac
-.do ds troffrc!X75 X.tmac
-.do ds troffrc!X75-12 X.tmac
-.do ds troffrc!X100 X.tmac
-.do ds troffrc!X100-12 X.tmac
-.do ds troffrc!ascii tty.tmac
-.do ds troffrc!latin1 tty.tmac
-.do ds troffrc!koi8-r tty.tmac
-.do ds troffrc!utf8 tty.tmac
-.do ds troffrc!cp1047 tty.tmac
-.do ds troffrc!lj4 lj4.tmac
-.do ds troffrc!lbp lbp.tmac
-.do ds troffrc!html html.tmac
-.do if d troffrc!\*[.T] \
-. do mso \*[troffrc!\*[.T]]
-.do rm troffrc!ps troffrc!Xps troffrc!dvi troffrc!X75 troffrc!X75-12 \
-troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html
-.
-.\" test whether we work under EBCDIC
-.do ie '\[char97]'a' \
-. ie '\*[.T]'koi8-r' \
-. do tr \[char154]\~
-. el \
-. do tr \[char160]\~
-.el \
-. do tr \[char65]\~
-.
-.\" Set the hyphenation language to `us'.
-.do hla us
-.
-.\" Load hyphenation patterns and exceptions.
-.do hpf hyphen.us
-.do hpfa hyphenex.us
-.if '\*[.T]'koi8-r' \
-. do hpfa hyphen.ru
-.
-.\" Handle paper formats
-.do mso papersize.tmac
-.
-.\" Don't let blank lines creep in here.
diff --git a/contrib/groff/tmac/troffrc-end b/contrib/groff/tmac/troffrc-end
deleted file mode 100644
index 53f1bef50c37..000000000000
--- a/contrib/groff/tmac/troffrc-end
+++ /dev/null
@@ -1,19 +0,0 @@
-.\" final startup file for troff
-.
-.\" this file is parsed after all macro sets have been read
-.
-.do if '\*[.T]'html' .do mso html-end.tmac
-.
-.\" if we are running the postscript device for html images then load www.tmac
-.do if r ps4html .do mso www.tmac
-.
-.\" for all other devices blank out these macros
-.do if !d HTML-IMAGE-INLINE .do ds HTML-IMAGE-INLINE
-.do if !d HTML-IMAGE .do ds HTML-IMAGE
-.do if !d HTML-IMAGE-RIGHT .do ds HTML-IMAGE-RIGHT
-.do if !d HTML-IMAGE-LEFT .do ds HTML-IMAGE-LEFT
-.do if !d HTML-IMAGE-END .do ds HTML-IMAGE-END
-.do if !d DEVTAG .do ds DEVTAG
-.do if !d HTML-DO-IMAGE .do ds HTML-DO-IMAGE
-.
-.\" Don't let blank lines creep in here.
diff --git a/contrib/groff/tmac/tty-char.tmac b/contrib/groff/tmac/tty-char.tmac
deleted file mode 100644
index 58f8fdbb5f31..000000000000
--- a/contrib/groff/tmac/tty-char.tmac
+++ /dev/null
@@ -1,240 +0,0 @@
-.\" tty-char.tmac
-.\" $FreeBSD$
-.\"
-.\" This file defines standard troff characters and some groff characters for
-.\" use with -Tascii, -Tlatin1, -Tutf8, and -Tcp1047.
-.\"
-.\" These definitions are chosen so that, as far as possible, they:
-.\" - work with all of -Tascii, -Tlatin1, -Tutf8, and -Tcp1047.
-.\" - work on devices that display only the last overstruck character
-.\" as well as on devices that support overstriking
-.\" - represent the character's graphical shape (not its meaning)
-.\"
-.\" Note that the optical appearance of the definitions contained in this
-.\" file is inferior compared to that of the replacement characters defined
-.\" in the file tty.tmac.
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.de tty-char
-. if !c\\$1 .char \\$1 "\\$2
-..
-.
-.ie c\[a-] \
-. ds tty-rn \[a-]
-.el \
-. ds tty-rn \v'-1m'_\v'+1m'
-.tty-char \[tm] tm
-.tty-char \[rn] \*[tty-rn]
-.tty-char \[ua] \z|^
-.tty-char \[da] \z|v
-.tty-char \[sc] S
-.tty-char \[ct] \z/c
-.tty-char \[dg] \z|-
-.tty-char \[dd] \z|=
-.tty-char \[ib] (\z=_
-.tty-char \[ip] \z=_)
-.tty-char \[sb] (=
-.tty-char \[sp] =)
-.tty-char \[if] oo
-.tty-char \[pt] oc
-.tty-char \[es] {}
-.tty-char \[ca] (^)
-.tty-char \[cu] U
-.tty-char \[de] o
-.tty-char \[di] -:-
-.tty-char \[tdi] -:-
-.tty-char \[no] ~
-.tty-char \[tno] ~
-.tty-char \[gr] \Z'\*[tty-rn]'V
-.tty-char \[is] \z'\z,I
-.tty-char \[mo] E
-.tty-char \[pd] a
-.tty-char \[sr] \e/
-.tty-char \[*C] \z_H
-.tty-char \[*D] \z_/\z_\e
-.tty-char \[*F] \zIO
-.tty-char \[*G] |\*[tty-rn]
-.tty-char \[*H] \z-O
-.tty-char \[*L] /\e
-.tty-char \[*P] TT
-.tty-char \[*Q] \zIY
-.tty-char \[*S] \z_\Z'\*[tty-rn]'>
-.tty-char \[*W] \z_O
-.if c\[ss] .tty-char \[*b] \[ss]
-.tty-char \[*b] B
-.tty-char \[*a] a
-.tty-char \[*c] \z,E
-.tty-char \[*d] d
-.tty-char \[*e] e
-.tty-char \[+e] e
-.tty-char \[*f] \z|o
-.tty-char \[+f] \z|o
-.tty-char \[*g] y
-.tty-char \[*h] \z-0
-.tty-char \[+h] \z-0
-.tty-char \[*i] i
-.tty-char \[*k] k
-.tty-char \[*l] \z>\e
-.tty-char \[*m] \z,u
-.tty-char \[*n] v
-.tty-char \[*p] \z-n
-.tty-char \[+p] \z-w
-.tty-char \[*q] \z|u
-.tty-char \[*r] p
-.tty-char \[*s] \z-o
-.tty-char \[*t] \z~t
-.tty-char \[*u] u
-.tty-char \[*w] w
-.tty-char \[*x] x
-.tty-char \[*y] n
-.tty-char \[*z] \z,C
-.tty-char \[ts] s
-.\" Definition of \[ss] should follow that of \[*b].
-.tty-char \[ss] B
-.tty-char \[c*] \zO\[mu]
-.tty-char \[c+] \zO+
-.tty-char \[AN] ^
-.tty-char \[OR] v
-.tty-char \[uA] \z=^
-.tty-char \[dA] \z=v
-.if c\[md] .tty-char \[pc] \[md]
-.if c\[pc] .tty-char \[md] \[pc]
-.if c\[pc] .tty-char \[a.] \[pc]
-.tty-char \[Im] I
-.tty-char \[Re] R
-.tty-char \[/L] \z/L
-.tty-char \[/l] \z/l
-.tty-char \[%0] %o
-.tty-char \[ao] o
-.tty-char \[a"] """"
-.tty-char \[ab] \z'`
-.tty-char \[ah] v
-.tty-char \[ho] \[ac]
-.tty-char \[/_] \z_/
-.tty-char \[=~] =~
-.tty-char \[|=] -~
-.tty-char \[Ah] N
-.tty-char \[CR] _|
-.tty-char \[fa] \z-V
-.tty-char \[nm] \z/E
-.tty-char \[pp] \z_|
-.tty-char \[sd] ''
-.tty-char \[st] -)
-.tty-char \[te] 3
-.if c\[md] .tty-char \[tf] .\[md].
-.tty-char \[tf] .:.
-.if c\[md] .tty-char \[3d] .\[md].
-.tty-char \[3d] .:.
-.tty-char \[wp] p
-.tty-char \[~~] ~~
-.tty-char \[Fn] \z,f
-.tty-char \[Bq] ,,
-.tty-char \[lz] <>
-.tty-char \[lf] |_
-.tty-char \[rf] _|
-.tty-char \[lc] |~
-.tty-char \[rc] ~|
-.tty-char \[lb] `-
-.tty-char \[rb] -'
-.tty-char \[lk] {
-.tty-char \[rk] }
-.tty-char \[lt] ,-
-.tty-char \[rt] -.
-.\" Latin characters
-.tty-char \[r!] \z,i
-.tty-char \[Po] \z-L
-.tty-char \[Cs] \zox
-.tty-char \[Ye] \z=Y
-.tty-char \[bb] |
-.tty-char \[ad] """"
-.tty-char \[Of] \z_a
-.tty-char \[Fo] <<
-.tty-char \[a-] \*[tty-rn]
-.tty-char \[S2] 2
-.tty-char \[S3] 3
-.tty-char \[ps] 9|
-.tty-char \[md] .
-.tty-char \[pc] .
-.tty-char \[ac] ,
-.tty-char \[S1] 1
-.tty-char \[Om] \z_o
-.tty-char \[Fc] >>
-.tty-char \[r?] \z'c
-.tty-char \[`A] \z`A
-.tty-char \['A] \z'A
-.tty-char \[^A] \z^A
-.tty-char \[~A] \z~A
-.tty-char \[:A] \z"A
-.tty-char \[oA] \zoA
-.tty-char \[,C] \z,C
-.tty-char "\[S ,]" \z,S
-.tty-char \[`E] \z`E
-.tty-char \['E] \z'E
-.tty-char \[^E] \z^E
-.tty-char \[:E] \z"E
-.tty-char \[`I] \z`I
-.tty-char \['I] \z'I
-.tty-char \[^I] \z^I
-.tty-char \[:I] \z"I
-.tty-char \[-D] \z-D
-.tty-char \[~N] \z~N
-.tty-char \[`O] \z`O
-.tty-char \['O] \z'O
-.tty-char \[^O] \z^O
-.tty-char \[~O] \z~O
-.tty-char \[:O] \z"O
-.tty-char \[/O] \z/O
-.tty-char \[`U] \z`U
-.tty-char \['U] \z'U
-.tty-char \[^U] \z^U
-.tty-char \[:U] \z"U
-.tty-char \['Y] \z'Y
-.tty-char \[TP] \zIb
-.tty-char \[`a] \z`a
-.tty-char \['a] \z'a
-.tty-char \[^a] \z^a
-.tty-char \[~a] \z~a
-.tty-char \[:a] \z"a
-.tty-char \[oa] \zoa
-.tty-char \[,c] \z,c
-.tty-char "\[s ,]" \z,s
-.tty-char \[`e] \z`e
-.tty-char \['e] \z'e
-.tty-char \[^e] \z^e
-.tty-char \[:e] \z"e
-.tty-char \[`i] \z`i
-.tty-char \['i] \z'i
-.tty-char \[^i] \z^i
-.tty-char \[:i] \z"i
-.tty-char \[Sd] \z`\z'o
-.tty-char \[~n] \z~n
-.tty-char \[`o] \z`o
-.tty-char \['o] \z'o
-.tty-char \[^o] \z^o
-.tty-char \[~o] \z~o
-.tty-char \[:o] \z"o
-.tty-char \[/o] \z/o
-.tty-char \[`u] \z`u
-.tty-char \['u] \z'u
-.tty-char \[^u] \z^u
-.tty-char \[:u] \z"u
-.tty-char \['y] \z'y
-.tty-char \[Tp] \zpb
-.tty-char \[:y] \z"y
-.\" for Turkish
-.tty-char "\[G ab]" G
-.tty-char "\[g ab]" g
-.tty-char "\[I .]" I
-.\"tty-char \[:y] \ij
-.tty-char \[arrowvertex] |
-.tty-char \[mc] \z,u
-.cp \n[_C]
-.
-.ie '\*(.T'cp1047' \
-. do mso cp1047.tmac
-.el .ie '\*(.T'koi8-r' \
-. do mso koi8-r.tmac
-.el \
-. do mso latin1.tmac
diff --git a/contrib/groff/tmac/tty.tmac b/contrib/groff/tmac/tty.tmac
deleted file mode 100644
index 6e6a8562eb06..000000000000
--- a/contrib/groff/tmac/tty.tmac
+++ /dev/null
@@ -1,93 +0,0 @@
-.\" tty.tmac
-.\" $FreeBSD$
-.\"
-.nr _C \n(.C
-.cp 0
-.
-.nroff
-.ta T 0.8i
-.
-.\" Don't warn about non-existent fonts.
-.warn \n[.warn]-(\n[.warn]/131072%2*131072)
-.
-.po 0
-.
-.ie c\[pc] \
-. tr \[bu]\[pc]
-.el \
-. if c\[md] \
-. tr \[bu]\[md]
-.
-.fchar \[bu] \z+o
-.fchar \[14] 1/4
-.fchar \[12] 1/2
-.fchar \[34] 3/4
-.fchar \[18] 1/8
-.fchar \[38] 3/8
-.fchar \[58] 5/8
-.fchar \[78] 7/8
-.fchar \[ff] ff
-.fchar \[fi] fi
-.fchar \[fl] fl
-.fchar \[Fi] f\[fi]
-.fchar \[Fl] f\[fl]
-.fchar \[<-] <-
-.fchar \[->] ->
-.fchar \[<>] <->
-.fchar \[em] --
-.fchar \[+-] +-
-.fchar \[t+-] +-
-.fchar \[-+] -+
-.fchar \[co] (C)
-.fchar \[<=] <=
-.fchar \[>=] >=
-.fchar \[<<] <<
-.fchar \[>>] >>
-.fchar \[!=] !=
-.fchar \[==] ==
-.fchar \[ne] !==
-.fchar \[~=] ~=
-.fchar \[sq] []
-.fchar \[lh] <=
-.fchar \[rh] =>
-.fchar \[lA] <=
-.fchar \[rA] =>
-.fchar \[hA] <=>
-.fchar \[rg] (R)
-.fchar \[OE] OE
-.fchar \[oe] oe
-.fchar \[AE] AE
-.fchar \[ae] ae
-.fchar \[IJ] IJ
-.fchar \[ij] ij
-.fchar \[an] -
-.fchar \[eu] EUR
-.fchar \[Eu] EUR
-.fchar \[.i] i
-.fchar \[bq] ,
-.
-.if '\*[.T]'utf8' \
-. mso unicode.tmac
-.
-.\" color definitions
-.defcolor black rgb #000000
-.defcolor red rgb #ff0000
-.defcolor green rgb #00ff00
-.defcolor blue rgb #0000ff
-.defcolor yellow rgb #ffff00
-.defcolor magenta rgb #ff00ff
-.defcolor cyan rgb #00ffff
-.defcolor white rgb #ffffff
-.
-.cp \n[_C]
-.
-.ie '\*(.T'cp1047' \
-. do mso cp1047.tmac
-.el .ie '\*(.T'koi8-r' \
-. do mso koi8-r.tmac
-.el .if !'\*(.T'ascii' \
-. do mso latin1.tmac
-.
-.\" If you want the character definitions in tty-char.tmac to be loaded
-.\" automatically, remove the `\"' from the next line.
-.\"do mso tty-char.tmac
diff --git a/contrib/groff/tmac/unicode.tmac b/contrib/groff/tmac/unicode.tmac
deleted file mode 100644
index 6c015b2aa232..000000000000
--- a/contrib/groff/tmac/unicode.tmac
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" unicode.tmac
-.\"
-.\" EOF
diff --git a/contrib/groff/tmac/www.tmac b/contrib/groff/tmac/www.tmac
deleted file mode 100644
index 5dcbd1eea73c..000000000000
--- a/contrib/groff/tmac/www.tmac
+++ /dev/null
@@ -1,1230 +0,0 @@
-.ig
-www.tmac - macro package for adding HTML elements to roff documents.
-
-File position: <groff_source_top>/tmac/www.tmac
-Installed position: groff's main macro directory.
-
-------------------------------------------------------------------------
- Legalize
-------------------------------------------------------------------------
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-written by Gaius Mulley <gaius@glam.ac.uk>, with additions by
-Werner Lemberg <wl@gnu.org> and Bernd Warken <bwarken@mayn.de>.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with groff; see the file COPYING. If not, write to the Free
-Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA
-02110-1301, USA.
-
-
-------------------------------------------------------------------------
- Description
-------------------------------------------------------------------------
-
-A simple set of macros to provide HTML documents with basic
-www functionality. It should work with any macro set.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do if d www:lenstr .nx
-.
-.do mso devtag.tmac
-.
-.nr _C \n(.C
-.cp 0
-.
-.
-.nr www-html 0
-.if '\*[.T]'html' .nr www-html 1
-.
-.\" set up www-image-template
-.
-.if !d www-image-template \
-. ds www-image-template
-.
-.if r ps4html \{\
-. \" remove the title command when we are generating images for html
-. \" (stops a title accidentally appearing inside an image)
-. di www-notitle
-. tl ''''
-. di
-. rm tl
-. de tl
-. .
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.\" Test for `.substring'; result in register `www.substring_ok'.
-.\" The automated break points in .URL addresses are only added if
-.\" this register is non-zero.
-.\"
-.nr www:substring_ok 0
-.de www:@test_substring
-. if !d substring \
-. return
-. ds \\$0:s abcdefg\"
-. substring \\$0:s 1 1
-. if !'\\*[\\$0:s]'b' \{\
-. rm \\$0:s
-. return
-. \}
-. ds \\$0:s abcdefg\"
-. substring \\$0:s 0 0
-. if !'\\*[\\$0:s]'a' \{\
-. rm \\$0:s
-. return
-. \}
-. ds \\$0:s abcdefg\"
-. substring \\$0:s 1 -1
-. if !'\\*[\\$0:s]'bcdefg' \{\
-. rm \\$0:s
-. return
-. \}
-. nr www:substring_ok 1
-. rm \\$0:s
-..
-.www:@test_substring
-.rm www:@test_substring
-.
-.
-.\" --------------------------------------------------------------------
-.\" Local Macros
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" www:paraspace
-.\"
-.\" Space before paragraph. Use \n[PD] if it exists.
-.\"
-.nr www:pd 0.5v
-.de www:paraspace
-. ie r PD .sp \\n[PD]u
-. el .sp \\n[www:pd]u
-..
-.
-.\"
-.\" --------------------------------------------------------------------
-.\" www:error (<test>...)
-.\"
-.\" Print error message
-.\"
-.de www-error
-. tm \\n[.F]:\\n[.c]: macro error: \\$*
-..
-.als www:error www-error
-.
-.\" --------------------------------------------------------------------
-.\" www:lenstr (<register_name> <string_name>)
-.\"
-.\" Store length of string named <string_name> into register named
-.\" <register_name>.
-.\"
-.de www:lenstr
-. if !(\\n[.$] == 2) \{\
-. tm .\\$0 expects 2 arguments.
-. ab
-. \}
-. length \\$0:n x\\*[\\$2]
-. nr \\$1 (\\n[\\$0:n]-1)
-. rr \\$0:n
-..
-.\" --------------------------------------------------------------------
-.\" www:splitstr (<name>)
-.\"
-.\" Add a space character between any two adjacent characters in string
-.\" <name> and restore result into the string variable <name>; space
-.\" characters are first replaced by the word `space'.
-.\"
-.de www:splitstr
-. if !(\\n[.$] == 1) \
-. www:error .\\$0 expects 1 argument.
-. if '\\*[\\$1]'' \
-. return
-. ds \\$0:r "\\*[\\$1]\""
-. ds \\$0:s\"
-. while 1 \{\
-. ds \\$0:c "\\*[\\$0:r]\""
-. substring \\$0:c 0 0\"
-. ie '\\*[\\$0:c]' ' \
-. as \\$0:s " space\""
-. el \
-. as \\$0:s " \\*[\\$0:c]\""
-. www:lenstr \\$0:n \\$0:r
-. if (\\n[\\$0:n] <= 1) \{\
-. break
-. \}
-. substring \\$0:r 1 -1\"
-. \}
-. if !'\\*[\\$0:s]'' \
-. substring \\$0:s 1 -1
-. ds \\$1 \\*[\\$0:s]
-. rm \\$0:c
-. rr \\$0:n
-. rm \\$0:r
-. rm \\$0:s
-..
-.\" --------------------------------------------------------------------
-.\" www:url_breaks (<string_name>)
-.\"
-.\" Add `\:' (possible break point) within URL strings after `/'.
-.\"
-.\" Smart about multiple `/', existing `\:', and space characters;
-.\" does not set a break point if less than 5 characters would go to
-.\" the next line.
-.\"
-.de www:url_breaks
-. if !(\\n[.$] == 1) \
-. www:error .\\$0 expects 1 argument.
-. if !\n[www:substring_ok] \
-. return
-. ds \\$0:s "\\*[\\$1]\""
-. www:splitstr \\$0:s
-. www:url_breaks_splitted \\$0:s \\*[\\$0:s]
-. ds \\$1 "\\*[\\$0:s]\""
-. rm \\$0:s
-..
-.\" --------------------------------------------------------------------
-.\" www:url_breaks_splitted (<result> <char> [<char>...])
-.\"
-.\" Add `\:' within URL strings, but arguments are a splitted string.
-.\"
-.\" Arguments: >=2: <result> <char> [<char>...]
-.\"
-.de www:url_breaks_splitted
-. nr \\$0:min 5 \" minimal number of characters for next line
-. if (\\n[.$] < 2) \
-. www:error .\\$0 expects at least 2 arguments.
-. ds \\$0:res \\$1\"
-. shift
-. ds \\$0:s\"
-. nr \\$0:done 0
-. while !\\n[\\$0:done] \{\
-. if (\\n[.$] <= 0) \{\
-. nr \\$0:done 1
-. break
-. \}
-. if '\\$1'space' \{\
-. as \\$0:s " \""
-. shift
-. continue
-. \}
-. if (\\n[.$] < \\n[\\$0:min]) \{\
-. as \\$0:s "\\$1\""
-. shift
-. continue
-. \}
-. if !'\\$1'/' \{\
-. as \\$0:s "\\$1\""
-. shift
-. continue
-. \}
-. \" we are at a `/' character
-. while '\\$1'/' \{\
-. as \\$0:s /\"
-. if (\\n[.$] == 0) \{\
-. nr \\$0:done 1
-. break
-. \}
-. shift
-. \}
-. if \\n[\\$0:done] \
-. break
-. if (\\n[.$] < \\n[\\$0:min]) \
-. continue
-. if '\\$1'\:' \
-. shift
-. as \\$0:s \:\"
-. \}
-. ds \\*[\\$0:res] \\*[\\$0:s]\"
-. rm \\$0:res
-. rm \\$0:s
-..
-.\" --------------------------------------------------------------------
-.\" User Interface
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" HTML
-.\"
-.\" the main auxiliary macro for the HTML interface
-.\"
-.de HTML
-. if \\n[www-html] \{\
-. \" was implemented via .nop \&\X^html:\\$*^ but
-. \" is now implemented using HTML-NS to utilize code factoring.
-. \"
-. \" the `\&' makes the vertical mode leave, so to say
-. \"
-. nop \&\c
-. HTML-NS \\$*
-. nop \&
-. \}
-..
-.\"
-.\" an auxiliary macro for HTML (without following space)
-.\"
-.de HTML-NS
-. nop \X^html:\\$*^\c
-..
-.\"
-.\" emit a HTML tag after shutting down a (possibly open) paragraph
-.\"
-.de HTML</p>
-. if \\n[www-html] \{\
-. \" the `\&' makes the vertical mode leave, so to say
-. nop \&\X^html</p>:\\$*^
-. \}
-..
-.\" --------------------------------------------------------------------
-.\" HX n
-.\"
-.\" Automatic heading level cut off.
-.\"
-.\" N is the depth limit of automatically linked headings. So a depth
-.\" of 2 would cause grohtml to generate a list of links for `.NH 1'
-.\" and `.NH 2' but not for `.NH 3'.
-.\"
-.de HX
-. if \\n[www-html] \
-. nop \X^index:\\$*^
-..
-.\" --------------------------------------------------------------------
-.\" BCL foreground background active not-visited visited
-.\"
-.de BCL
-. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5>
-..
-.\" --------------------------------------------------------------------
-.\" BGIMG imagefile
-.\"
-.de BGIMG
-. HTML <body background=\\$1>
-..
-.\" --------------------------------------------------------------------
-.\" URL url [description] [after]
-.\" if description is absent then the url becomes the anchor text
-.\"
-.de URL
-. ie !'\\$1'' \{\
-. ds \\$0:adr \\$1\"
-. www:url_breaks \\$0:adr
-. \}
-. ie \\n[www-html] \{\
-. ie '\\$3'' \
-. ds \\$0:after \&
-. el \
-. ds \\$0:after \&\\$3
-. ie '\\$2'' \
-. HTML-NS <a href="\\$1">\\$1</a>
-. el \
-. HTML-NS <a href="\\$1">\\$2</a>
-. nop \\*[\\$0:after]
-. rm \\$0:after
-. \}
-. el \{\
-. if !r ps4html .ad l
-. ie '\\$2'' \{\
-. ie '\\$1'' \{\
-. ie !'\\$3'' \
-. nop \\$3
-. \}
-. el \{\
-. ie \\n[.color] \
-. nop \%\[la]\m[blue]\f[C]\\*[\\$0:adr]\f[]\m[]\[ra]\\$3
-. el \
-. nop \%\[la]\f[CB]\\*[\\$0:adr]\f[]\[ra]\\$3
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{\
-. ie \\n[.color] \
-. nop \m[blue]\\$2\m[]\\$3
-. el \
-. nop \f[B]\\$2\f[]\\$3
-. \}
-. el \{\
-. ie \\n[.color] \
-. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3
-. el \
-. nop \f[B]\\$2\f[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3
-. \}
-. \}
-. if !r ps4html .ad
-. \}
-. rm \\$0:adr
-..
-.\" --------------------------------------------------------------------
-.\" FTP url description [after]
-.\"
-.\" Same as URL.
-.\"
-.als FTP URL
-.\" --------------------------------------------------------------------
-.\" MTO address description [after]
-.\"
-.\" ADDRESS is the email address (without the `mailto:' prefix).
-.\"
-.\" DESCRIPTION is the optional name. If an empty argument is given,
-.\" ADDRESS is used instead.
-.\"
-.\" AFTER is optional stuff printed immediately after ADDRESS
-.\" (resp. DESCRIPTION).
-.\"
-.\" Example:
-.\"
-.\" Foobar has been written by
-.\" .MTO fred@foo.bar "Fredrick Bloggs" .
-.\"
-.de MTO
-. ie \\n[www-html] \{\
-. ie '\\$2'' \
-. URL mailto:\\$1 \\$1 "\\$3"
-. el \
-. URL mailto:\\$1 "\\$2" "\\$3"
-. \}
-. el \{\
-. ie '\\$2'' \{\
-. ie '\\$1'' \{\
-. ie !'\\$3'' \
-. nop \\$3
-. \}
-. el \{\
-. ie \\n[.color] \
-. nop \%\m[blue]\f[C]\\$1\f[]\m[]\\$3
-. el \
-. nop \%\f[CB]\\$1\f[]\\$3
-. \}
-. \}
-. el \{\
-. ie '\\$1'' \{\
-. ie \\n[.color] \
-. nop \m[blue]\\$2\m[]\\$3
-. el \
-. nop \f[B]\\$2\f[]\\$3
-. \}
-. el \{\
-. ie \\n[.color] \
-. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3
-. el
-. nop \f[B]\\$2\f[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3
-. \}
-. \}
-. \}
-..
-.\" --------------------------------------------------------------------
-.\" TAG name
-.\"
-.\" Generate an html name NAME.
-.\"
-.de TAG
-. HTML <a name="\\$1"></a>
-..
-.\" --------------------------------------------------------------------
-.\" IMG [-R|-L|-C] filename [width] [height]
-.\"
-.\" Include an image of any type (will only work for -Thtml).
-.\"
-.\" Alignment is centered by default (-C).
-.\" Default value for WIDTH is 1i.
-.\" If HEIGHT is not given, WIDTH is used as the height.
-.\"
-.de IMG
-. ie \\n[www-html] \{\
-. ie '\\$2'-R' \
-. DEVTAG ".right-image"
-. el \{\
-. ie '\\$2'-L' \
-. DEVTAG ".left-image"
-. el \
-. DEVTAG ".centered-image"
-. \}
-. nr www-width 100
-. if !'\\$3'' \
-. nr www-width \\$3
-. nr www-height \\n[www-width]
-. if !'\\$4'' \
-. nr www-height \\$4
-. HTML <img src="\\$1" alt="Image \\$1" \
- width=\\n[www-width] height=\\n[www-height]>
-. \}
-. el \
-. nop \[la]\f[C]\\$1\f[]\[ra]
-..
-.\" --------------------------------------------------------------------
-.\" PIMG [-R|-L|-C] filename [width] [height]
-.\"
-.\" Include a png image. It will work for -Tps and -Thtml.
-.\" The default value for WIDTH and HEIGHT is zero; the default
-.\" alignment is centering (-C).
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\" activating unsafe mode, if not used with -Thtml; the PNG image
-.\" is then converted to the EPS format using netpbm utilities.
-.\"
-.de PIMG
-. ie \\n[www-html] \{\
-. ie '\\$1'-R' \
-. DEVTAG ".right-image"
-. el \{\
-. ie '\\$1'-L' \
-. DEVTAG ".left-image"
-. el \
-. DEVTAG ".centered-image"
-. \}
-. nr www-width 0
-. nr www-height 0
-. if !'\\$3'' \
-. nr www-width (\\$3 * 100 / 240)
-. if !'\\$4'' \
-. nr www-height (\\$4 * 100 / 240)
-. ie (\\n[www-width] == 0) \{\
-. ie (\\n[www-height] == 0) \
-. HTML <img src="\\$2" alt="Image \\$2">
-. el \
-. HTML <img src="\\$1" alt="Image \\$2" height=\\n[www-height]>
-. \}
-. el \{\
-. ie (\\n[www-height] == 0) \
-. HTML <img src="\\$2" alt="Image \\$2" width=\\n[www-width]>
-. el \
-. HTML <img src="\\$2" alt="Image \\$2" width=\\n[www-width] \
- height=\\n[www-height]>
-. \}
-. \}
-. el \{\
-. if !r ps4html \{\
-. www-make-unique-name
-. sy pngtopnm \\$2 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps
-. ie '\\$1'-C' \
-. PSPIC \\*[www-unique-name].eps \\$3 \\$4
-. el \
-. PSPIC \\$1 \\*[www-unique-name].eps \\$3 \\$4
-. \}
-. \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for MPIMG
-.\"
-.nr www-left-ll-trap 0
-.nr www-left-po-trap 0
-.nr www-right-ll-trap 0
-.
-.de www-finish-left-po
-. po -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-. wh \\n[www-left-po-trap]u
-. nr www-left-indent 0
-..
-.
-.\" called when the -R picture is finished
-.de www-finish-right-ll
-. ll +(\\n[www-right-indent]u + \\n[www-image-gap]u)
-. \" now see whether we need to inline www-finish-left-ll
-. if (\\n[www-left-ll-trap]u > 0) \
-. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
-. mk www-left-po-trap
-. nr www-left-po-trap +1v
-. wh \\n[www-left-po-trap]u www-finish-left-po
-. ll +\\n[www-left-indent]u
-. wh \\n[www-left-ll-trap]u
-. nr www-left-ll-trap 0
-. \}
-. \" and see whether we need to inline www-finish-left-po
-. if (\\n[www-left-po-trap]u > 0) \
-. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
-. po -\\n[www-left-indent]u
-. wh \\n[www-left-po-trap]u
-. nr www-left-indent 0
-. \}
-. wh \\n[www-right-ll-trap]u
-. nr www-right-ll-trap 0
-..
-.
-.de www-finish-left-ll
-. if (\\n[www-right-ll-trap] > 0) \
-. if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
-. ll +\\n[www-right-indent]u
-. nr www-right-ll-trap 0
-. \}
-. mk www-left-po-trap
-. nr www-left-po-trap +1v
-. wh \\n[www-left-po-trap]u www-finish-left-po
-. ll +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-. wh \\n[www-left-ll-trap]u
-. nr www-left-ll-trap 0
-..
-.
-.\" www-handle-percent arg N1 N2 S1
-.\" arg - input string (number or number%)
-.\" output parameters:
-.\" N1 - name of number register 1=absolute 0=percentage
-.\" N2 - number register name for absolute value
-.\" S1 - string register name for percentage value
-.
-.de www-handle-percent
-. ds www-percent \\$1\"
-. substring www-percent -1 -1
-.
-. ie '\\*[www-percent]'%' \{\
-. ds www-abs \\$1\"
-. substring www-abs 0 -2
-. nr \\$2 0
-. nr \\$3 \\*[www-abs]
-. ds \\$4 \\$1\"
-. \}
-. el \{\
-. nr \\$2 1
-. nr \\$3 \\$1
-. ds \\$4 none\"
-. \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" MPIMG [-R|-L] [-G gap] filename [width [height]]
-.\"
-.\" Include a png image and wrap text around it. It will work for
-.\" -Tps and -Thtml. The default value for WIDTH is 1i; default value
-.\" for HEIGHT is WIDTH; the default alignment is left (-L).
-.\" -G is used to insert a gap between the text and the image.
-.\" The height and width can also be given as a percentage.
-.\" The PostScript device converts the percentage width into an
-.\" absolute value by using \\n[.l], and the height by using \\n[.p].
-.\"
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\" activating unsafe mode, if not used with -Thtml; the PNG image
-.\" is then converted to the EPS format using netpbm utilities.
-.\"
-.
-.nr www-htmlimage-gap 0
-.
-.de MPIMG
-. nr www-image-just 1
-. nr www-image-gap 0
-. while (\\n[.$] > 0) \{\
-. if '-L'\\$1' \{\
-. nr www-image-just 1
-. shift
-. continue
-. \}
-. if '-R'\\$1' \{\
-. nr www-image-just 0
-. shift
-. continue
-. \}
-. if '-G'\\$1' \{\
-. nr www-image-gap \\$2
-. nr www-htmlimage-gap (\\$2 * 100 / 240)
-. shift 2
-. continue
-. \}
-. break
-. \}
-.
-. nr www-width 1i
-. nr www-height 1i
-. ds www-size-specs "width=\\n[www-width] height=\\n[www-height]\"
-. ie !'\\$2'' \{\
-. nr www-is-absolute 0
-. nr www-absolute 0
-. ds www-percentage none\"
-. www-handle-percent \\$2 www-is-absolute www-absolute www-percentage
-. ie !\\n[www-is-absolute] \{\
-. \" percentage of linelength requested
-. nr www-width (\\n[www-absolute] * \\n[.l] / 100)
-. if \\n[www-html] \
-. nr www-width (\\n[www-width] * 100 / 240)
-. ds www-size-specs "width=\\*[www-percentage]\"
-. \}
-. el \{\
-. nr www-width \\n[www-absolute]
-. if \\n[www-html] \
-. nr www-width (\\n[www-width] * 100 / 240)
-. ds www-size-specs "width=\\n[www-width]\"
-. \}
-.
-. nr www-height \\n[www-width]
-. ie !'\\$3'' \{\
-. nr www-is-absolute 0
-. nr www-absolute 0
-. ds www-percentage none\"
-. www-handle-percent \\$3 www-is-absolute www-absolute www-percentage
-. ie !\\n[www-is-absolute] \{\
-. \" percentage of pagelength requested
-. nr www-height (\\n[www-absolute] * \\n[.p] / 100)
-. if \\n[www-html] \
-. nr www-height (\\n[www-height] * 100 / 240)
-. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\"
-. \}
-. el \{\
-. nr www-height \\n[www-absolute]
-. if \\n[www-html] \
-. nr www-height (\\n[www-height] * 100 / 240)
-. ds www-size-specs "\\*[www-size-specs] height=\\*[www-height]\"
-. \}
-. \}
-. \}
-. el \{\
-. \" height not specified; use width value
-. ie !\\n[www-is-absolute] \{\
-. \" percentage value
-. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\"
-. nr www-height \\n[www-width]
-. \}
-. el \{\
-. ds www-size-specs "\\*[www-size-specs] height=\\*[www-width]\"
-. nr www-height \\n[www-width]
-. \}
-. \}
-.
-. ie \\n[www-html] \{\
-. ie !\\n[www-image-just] \
-. HTML <img src="\\$1" alt="Image \\$1" hspace=\\n[www-htmlimage-gap] \
- align=right \\*[www-size-specs]>
-. el \
-. HTML <img src="\\$1" alt="Image \\$1" hspace=\\n[www-htmlimage-gap] \
- align=left \\*[www-size-specs]>
-. \}
-. el \{\
-. tm www-width is \\n[www-width]
-. tm www-height is \\n[www-height]
-. if !r ps4html \{\
-. www-make-unique-name
-. sy pngtopnm \\$1 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps
-. ie !\\n[www-image-just] \{\
-. \" we must now disable a possible left image trap
-. sp -1
-. if (\\n[www-left-ll-trap] > 0) \
-. wh \\n[www-left-ll-trap]u
-. if (\\n[www-left-po-trap] > 0) \
-. wh \\n[www-left-po-trap]u
-. PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-. sp -\\n[ps-desht]u
-. nr www-right-indent \\n[ps-deswid]u
-. \" we want to have some space between text and image,
-. \" so the line length must be shorter
-. ll -(\\n[www-right-indent]u + \\n[www-image-gap]u)
-. mk www-right-ll-trap
-. nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
-. wh \\n[www-right-ll-trap]u www-finish-right-ll
-. \" now restore possible left trap
-. if (\\n[www-left-ll-trap] > 0) \
-. wh \\n[www-left-ll-trap]u www-finish-left-ll
-. if (\\n[www-left-po-trap] > 0) \
-. wh \\n[www-left-po-trap]u
-. \}
-. el \{\
-. \" we must now disable a possible right image trap
-. if (\\n[www-right-ll-trap] > 0) \
-. wh \\n[www-right-ll-trap]u
-. PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-. sp -\\n[ps-desht]u
-. nr www-left-indent \\n[ps-deswid]u
-. \" increase offset by gap
-. po +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-. \" decrease line length by gap
-. ll -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-. mk www-left-ll-trap
-. nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
-. wh \\n[www-left-ll-trap]u www-finish-left-ll
-. \" now restore possible right trap
-. if (\\n[www-right-ll-trap] > 0) \
-. wh \\n[www-right-ll-trap]u www-finish-right-ll
-. \}
-. \}
-. \}
-..
-.\" --------------------------------------------------------------------
-.\" HnS n
-.\"
-.\" Begin heading. Heading level is N.
-.\"
-.\" HnE
-.\"
-.\" End heading.
-.\"
-.\" If your heading contains URL, FTP, MTO macros you might wish to
-.\" disable automatic links to headings. This can be done via `-P-l'
-.\" from the command line or by using a cakk to `.HX 0'.
-.\"
-.nr www-heading-no -1
-.
-.de HnS
-. ie '\\$1'' \
-. nr www-heading-no 1
-. el \
-. nr www-heading-no \\$1
-. DEVTAG-NH \\n[www-heading-no]
-..
-.
-.de HnE
-. if (\\n[www-heading-no] == -1) \
-. www-error "HnE found without a corresponding HnS"
-. DEVTAG-EO-H
-..
-.\" --------------------------------------------------------------------
-.\" LK
-.\"
-.\" Emit the automatically collected links derived from
-.\" section/numbered headings at this position.
-.\"
-.de LK
-. DEVTAG ".links"
-..
-.\" --------------------------------------------------------------------
-.\" HR
-.\"
-.\" Produce a horizontal line.
-.\"
-.de HR
-. HTML</p> "<hr>"
-..
-.\" --------------------------------------------------------------------
-.\" NHR
-.\"
-.\" Suppresses the generation of the top and bottom rules which grohtml
-.\" emits by default.
-.\"
-.de NHR
-. DEVTAG ".no-auto-rule"
-..
-.\"
-.\" www-end-nowhere - end of input trap called to finish diversion.
-.\"
-.de www-end-nowhere
-. if !\\n[www-html] \
-. di
-. DEVTAG-EO-TL
-..
-.\" --------------------------------------------------------------------
-.\" HTL
-.\"
-.\" Generate an HTML title only. This differs from the -ms .TL macro
-.\" which generates both an HTML title and an H1 heading.
-.\"
-.\" This is useful when an author wishes to use a HTML title as search
-.\" engine fodder but a graphic title in the document.
-.\"
-.\" The macro terminates when a space or break is seen (.sp, .br).
-.\"
-.de HTL
-. DEVTAG ".html-tl"
-. if !\\n[www-html] \
-. di www-nowhere
-. it 2 www-end-nowhere
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for lists
-.\"
-.ds www-ul-level1 \[bu]\ \ \"
-.ds www-ul-level2 \[sq]\ \ \"
-.ds www-ul-level3 \[ci]\ \ \"
-.nr www-ul-level 0
-.
-.ds www-ol-level1 decimal\"
-.ds www-ol-level2 lower-alpha\"
-.ds www-ol-level3 lower-roman\"
-.ds www-ol-tmp 00\ \ \"
-.nr www-ol-ctr1 0 1
-.nr www-ol-ctr2 0 1
-.nr www-ol-ctr3 0 1
-.af www-ol-ctr2 a
-.af www-ol-ctr3 i
-.nr www-ol-level 0
-.
-.nr www-dl-level 0
-.nr www-dl-shift 5n
-.
-.\"
-.\" allow nested lists
-.\"
-.nr www-depth 0
-.nr www-li-indent \n[.i]
-.ds www-level0 nop\"
-.ds www-level1
-.ds www-level2
-.ds www-level3
-.ds www-level4
-.ds www-level5
-.ds www-level6
-.ds www-level7
-.ds www-level8
-.ds www-level9
-.
-.\" which macro to use for LI
-.de www-push-li
-. nr www-depth +1
-. ds www-level\\n[www-depth] \\$1\"
-. als LI \\$1
-..
-.
-.de www-pop-li
-. nr www-depth -1
-. als LI \\*[www-level\\n[www-depth]]
-..
-.
-.\"
-.\" Auxiliary macro for ULS.
-.\"
-.de www-push-ul-level
-. nr www-ul-level +1
-. if (\\n[www-ul-level] > 3) \
-. www-error "ULS: too many levels of indentation (\\n[www-ul-level])"
-..
-.\"
-.\" Auxiliary macro for ULE.
-.\"
-.de www-pop-ul-level
-. if !\\n[www-ul-level] \
-. www-error "ULE: trying to terminate a list which does not exist"
-. nr www-ul-level -1
-..
-.
-.\"
-.\" Auxiliary macro for OLS.
-.\"
-.de www-push-ol-level
-. nr www-ol-level +1
-. if (\\n[www-ol-level] > 3) \
-. www-error "OLS: too many levels of indentation (\\n[www-ol-level])"
-..
-.\"
-.\" Auxiliary macro for OLE.
-.\"
-.de www-pop-ol-level
-. if !\\n[www-ol-level] \
-. www-error "OLE: trying to terminate a list which does not exist"
-. nr www-ol-level -1
-..
-.
-.\" --------------------------------------------------------------------
-.\" ULS
-.\"
-.\" Start an unordered list.
-.\"
-.de ULS
-. www-push-li www-li-ul
-. www-push-ul-level
-. ie \\n[www-html] \
-. HTML</p> "<ul>"
-. el \{\
-. nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u
-. \}
-..
-.\" --------------------------------------------------------------------
-.\" ULE
-.\"
-.\" End an unordered list.
-.\"
-.de ULE
-. ie \\n[www-html] \
-. HTML "</ul>"
-. el \{\
-. nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-. in \\n[www-li-indent]u
-. \}
-. www-pop-ul-level
-. www-pop-li
-..
-.\" --------------------------------------------------------------------
-.\" OLS
-.\"
-.\" Start an ordered list.
-.\"
-.de OLS
-. www-push-li www-li-ol
-. www-push-ol-level
-. ie \\n[www-html] \
-. HTML</p> "<ol style='list-style-type: \\*[www-ol-level\\n[www-ol-level]]'>"
-. el \
-. nr www-li-indent +\w'\\*[www-ol-tmp]'u
-..
-.\" --------------------------------------------------------------------
-.\" OLE
-.\"
-.\" End an ordered list.
-.\"
-.de OLE
-. ie \\n[www-html] \
-. HTML "</ol>"
-. el \{\
-. nr www-li-indent -\w'\\*[www-ol-tmp]'u
-. in \\n[www-li-indent]u
-. nr www-ol-ctr\\n[www-ol-level] 0 1
-. \}
-. www-pop-ol-level
-. www-pop-li
-..
-.\" --------------------------------------------------------------------
-.\"
-.\" DLS
-.\" Start a definition list.
-.\"
-.de DLS
-. www-push-li www-li-dl
-. nr www-dl-level +1
-. ie \\n[www-html] \
-. HTML</p> "<dl>"
-. el \{\
-. nr www-li-indent +\\n[www-dl-shift]u
-. in \\n[www-li-indent]u
-. \}
-..
-.\" --------------------------------------------------------------------
-.\"
-.\" DLE
-.\" End a definition list.
-.\"
-.de DLE
-. ie \\n[www-html] \
-. HTML "</dl>"
-. el \{\
-. nr www-li-indent -\\n[www-dl-shift]u
-. in \\n[www-li-indent]u
-. \}
-. nr www-dl-level -1
-. www-pop-li
-..
-.\" --------------------------------------------------------------------
-.\" LI
-.\"
-.\" Insert a list item.
-.\"
-.\" ********
-.\" www-li-ul - bulleted list item
-.\"
-.de www-li-ul
-. ie \\n[www-html] \
-. HTML-NS "<li>"
-. el \{\
-. www:paraspace
-. in \\n[www-li-indent]u
-. ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-. nop \\*[www-ul-level\\n[www-ul-level]]\c
-. \}
-..
-.\" ********
-.\" www-li-ol - numbered list item
-.\"
-.de www-li-ol
-. ie \\n[www-html] \
-. HTML-NS "<li>"
-. el \{\
-. www:paraspace
-. in \\n[www-li-indent]u
-. ti -\w'\\n[www-ol-ctr\\n[www-ol-level]]\ \ 'u
-. nop \\n+[www-ol-ctr\\n[www-ol-level]]\ \ \c
-. \}
-..
-.\" ********
-.\" www-li-dl - definition list item
-.\"
-.de www-li-dl
-. ie \\n[www-html] \{\
-. HTML "<dt>\\$1</dt>"
-. HTML-NS "<dd>"
-. \}
-. el \{\
-. www:paraspace
-. in \\n[www-li-indent]u
-. ti -\\n[www-dl-shift]u
-. nop \&\\$1
-. br
-. \}
-..
-.\" --------------------------------------------------------------------
-.\" DC l text [color]
-.\"
-.\" L is the letter to be dropped and enlarged.
-.\"
-.\" TEXT is the following text whose height the first letter should not
-.\" exceed.
-.\"
-.\" COLOR is the optional color of the dropped letter (default black).
-.\"
-.de DC
-. ds www-dropcolor black
-. if !'\\$3'' \
-. ds www-dropcolor \\$3
-. ie '\*(.T'html' \{\
-. www-make-unique-name
-. nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u)
-. MPIMG -L \\*[www-unique-name].png "\\n[www-drop-width]%"
-. \}
-. el \{\
-. ie r ps4html \{\
-. www-make-unique-name
-. \" To avoid interferences with another DC macro call which is located
-. \" very near to the current one, we draw the glyph on a separate page.
-. \" Otherwise it could theoretically happen that the dropped capital
-. \" glyphs overlap.
-. bp
-. ev www-DC
-. vs 320p
-. nop \O[5i\\*[www-unique-name].png]\O[1]
-. nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4]
-. nop \O[2]\O[0]
-. br
-. ev
-. bp
-. \}
-. el \{\
-. ie n \
-. nop \\$1\c
-. el \{\
-. nr dummy \w'\\$1'u
-. nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
-. char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
-. nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
-' ti \w'\\[dcap]'u
-. \}
-. \}
-. \}
-. nop \\$2
-..
-.\" --------------------------------------------------------------------
-.\" Setup around HTML-IMAGE and friends
-.\"
-.\" now set up TS, TE, EQ, EN default macros
-.\"
-.do if !d TS .do ds TS HTML-IMAGE
-.do if !d TE .do ds TE HTML-IMAGE-END
-.do if !d EQ .do ds EQ HTML-IMAGE
-.do if !d EN .do ds EN HTML-IMAGE-END
-.\"
-.\" supplementary macros used by other macro sets
-.\"
-.\" here are some tags specially for -Tps or -Thtml when invoked by
-.\" pre-html to generate png images from postscript.
-.
-.\" --------------------------------------------------------------------
-.\" HTML-DO-IMAGE - tells troff to issue an image marker which can be
-.\" read back by pre-html
-.\"
-.de HTML-DO-IMAGE
-. if r ps4html \
-. nop \O[5\\$2\\$1.png]\O[1]\O[3]
-. if \\n[www-html] \
-. nop \O[5\\$2\\$1.png]\O[0]\O[3]
-..
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE-END - terminates an image for html
-.\"
-.de HTML-IMAGE-END
-. if r ps4html \
-. nop \O[4]\O[2]\O[0]
-. if \\n[www-html] \
-. nop \O[4]\O[2]\O[1]
-..
-.
-.nr www-png-no 0
-.
-.\" --------------------------------------------------------------------
-.\" www-make-unique-name - generates another unique name in string
-.\" `www-unique-name'
-.\"
-.de www-make-unique-name
-. nr www-png-no +1
-. ds www-unique-name \\*[www-image-template]\\n[www-png-no]
-..
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE and friends tell grohtml that this region of text needs
-.\" to be rendered as an image.
-.\"
-.de HTML-IMAGE
-. \" generates a centered image
-. www-make-unique-name
-. HTML-DO-IMAGE \\*[www-unique-name] c
-..
-.
-.de HTML-IMAGE-RIGHT
-. www-make-unique-name
-. HTML-DO-IMAGE \\*[www-unique-name] r
-..
-.
-.de HTML-IMAGE-LEFT
-. www-make-unique-name
-. HTML-DO-IMAGE \\*[www-unique-name] l
-..
-.
-.de HTML-IMAGE-INLINE
-. www-make-unique-name
-. HTML-DO-IMAGE \\*[www-unique-name] i
-..
-.
-.\" --------------------------------------------------------------------
-.\" JOBNAME
-.\"
-.\" Generate multiple output files containing the html.
-.\" A file is split whenever a .SH or .NH 1 is encountered.
-.\" The argument to JOBNAME is the file stem for future output files.
-.\"
-.de JOBNAME
-. DEVTAG .job-name \\$1
-..
-.\" --------------------------------------------------------------------
-.\" HEAD
-.\"
-.\" Adds information to the <head> </head> section of the html
-.\" document
-.\" --------------------------------------------------------------------
-.de HEAD
-. DEVTAG .head "\\$*"
-..
-.\" --------------------------------------------------------------------
-.\" Final Setup
-.\" --------------------------------------------------------------------
-.
-.if \n[www-html] \{\
-. nh
-. nr HY 0
-.\}
-.
-.\"
-.\" start of some code
-.\"
-.
-.de CDS
-.ft C
-.nf
-..
-.\"
-.\" end of some code
-.\"
-.
-.de CDE
-.fi
-.ft P
-..
-.
-.if r ps4html .nop \O[0]
-.cp \n(_C
-.
-.\" now set
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
-.\" EOF
diff --git a/contrib/libxo/Makefile.am b/contrib/libxo/Makefile.am
index cb71d522bb51..25024d11a9ad 100644
--- a/contrib/libxo/Makefile.am
+++ b/contrib/libxo/Makefile.am
@@ -100,4 +100,25 @@ ANALYZE_DIR = ~/trash/libxo
ANALYZE_CMD = scan-build-mp-3.6
analyze:
+ ${MAKE} clean
${ANALYZE_CMD} -o ${ANALYZE_DIR} ${MAKE}
+
+SANIFLAGS=-fno-omit-frame-pointer -g -O2
+
+sanitize-address:
+ ${MAKE} clean
+ ${MAKE} CFLAGS="-fsanitize=address ${SANIFLAGS}"
+ ${MAKE} install
+ ${MAKE} test
+
+sanitize-undefined:
+ ${MAKE} clean
+ ${MAKE} CFLAGS="-fsanitize=undefined ${SANIFLAGS}"
+ ${MAKE} install
+ ${MAKE} test
+
+sanitize-memory:
+ ${MAKE} clean
+ ${MAKE} CFLAGS="-fsanitize=memory ${SANIFLAGS}"
+ ${MAKE} install
+ ${MAKE} test
diff --git a/contrib/libxo/configure.ac b/contrib/libxo/configure.ac
index 26d85b6283d5..1cf91469a025 100644
--- a/contrib/libxo/configure.ac
+++ b/contrib/libxo/configure.ac
@@ -12,7 +12,7 @@
#
AC_PREREQ(2.2)
-AC_INIT([libxo], [0.7.2], [phil@juniper.net])
+AC_INIT([libxo], [0.8.1], [phil@juniper.net])
AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
# Support silent build rules. Requires at least automake-1.11.
diff --git a/contrib/libxo/doc/libxo-manual.html b/contrib/libxo/doc/libxo-manual.html
index 34053c98b1f9..c7577b922678 100644
--- a/contrib/libxo/doc/libxo-manual.html
+++ b/contrib/libxo/doc/libxo-manual.html
@@ -515,7 +515,7 @@ li.indline1 {
}
@top-right {
- content: "May 2017";
+ content: "June 2017";
}
@top-center {
@@ -21983,15 +21983,17 @@ jQuery(function ($) {
</script><link rel="Contents" href="#doc.toc">
<link rel="Author" href="#doc.authors">
<link rel="Chapter" title="1 Overview" href="#doc_section_1">
-<link rel="Chapter" title="2 Formatting with libxo" href="#doc_section_2">
-<link rel="Chapter" title="3 The libxo API" href="#doc_section_3">
-<link rel="Chapter" title='4 The "xo" Utility' href="#doc_section_4">
-<link rel="Chapter" title="5 xolint" href="#doc_section_5">
-<link rel="Chapter" title="6 xohtml" href="#doc_section_6">
-<link rel="Chapter" title="7 xopo" href="#doc_section_7">
-<link rel="Chapter" title="8 FAQs" href="#doc_section_8">
-<link rel="Chapter" title="9 Howtos: Focused Directions" href="#doc_section_9">
-<link rel="Chapter" title="10 Examples" href="#doc_section_10">
+<link rel="Chapter" title="2 Getting libxo" href="#doc_section_2">
+<link rel="Chapter" title="3 Formatting with libxo" href="#doc_section_3">
+<link rel="Chapter" title="4 Command-line Arguments" href="#doc_section_4">
+<link rel="Chapter" title="5 The libxo API" href="#doc_section_5">
+<link rel="Chapter" title='6 The "xo" Utility' href="#doc_section_6">
+<link rel="Chapter" title="7 xolint" href="#doc_section_7">
+<link rel="Chapter" title="8 xohtml" href="#doc_section_8">
+<link rel="Chapter" title="9 xopo" href="#doc_section_9">
+<link rel="Chapter" title="10 FAQs" href="#doc_section_10">
+<link rel="Chapter" title="11 Howtos: Focused Directions" href="#doc_section_11">
+<link rel="Chapter" title="12 Examples" href="#doc_section_12">
<meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.389, 2008-08-20 14:21:35, XSLT vendor: libxslt http://xmlsoft.org/XSLT/">
<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/">
<meta name="DC.Creator" content="Shafer, P.">
@@ -22009,7 +22011,7 @@ jQuery(function ($) {
</tr>
<tr>
<td class="header left"></td>
-<td class="header right">May 15, 2017</td>
+<td class="header right">June 8, 2017</td>
</tr>
</table></div>
<p id="title" class="title">libxo: The Easy Way to Generate text, XML, JSON, and HTML output<br><span class="filename">libxo-manual</span></p>
@@ -22018,398 +22020,413 @@ jQuery(function ($) {
<ul class="toc">
<li class="tocline0">
<div class="section-number" id="toc_doc_section_1">1   </div>
-<a href="#overview">Overview</a><ul class="toc top-toc"><li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1">1.1   </div>
-<a href="#getting-libxo">Getting libxo</a><ul class="toc">
+<a href="#overview">Overview</a>
+</li>
+<li class="tocline0">
+<div class="section-number" id="toc_doc_section_2">2   </div>
+<a href="#getting-libxo">Getting libxo</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_1">1.1.1   </div>
+<div class="section-number" id="toc_doc_section_2_1">2.1   </div>
<a href="#downloading-libxo-source-code">Downloading libxo Source Code</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2">1.1.2   </div>
+<div class="section-number" id="toc_doc_section_2_2">2.2   </div>
<a href="#building-libxo">Building libxo</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2_1">1.1.2.1   </div>
+<div class="section-number" id="toc_doc_section_2_2_1">2.2.1   </div>
<a href="#setting-up-the-build">Setting up the build</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2_2">1.1.2.2   </div>
-<a href="#running-the-configure-script">Running the "configure" Script</a>
-</li>
+<div class="section-number" id="toc_doc_section_2_2_2">2.2.2   </div>
+<a href="#running-the-configure-script">Running the "configure" Script</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2_3">1.1.2.3   </div>
+<div class="section-number" id="toc_doc_section_2_2_2_1">2.2.2.1   </div>
<a href="#running-the-make-command">Running the "make" command</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2_4">1.1.2.4   </div>
+<div class="section-number" id="toc_doc_section_2_2_2_2">2.2.2.2   </div>
<a href="#running-the-regression-tests">Running the Regression Tests</a>
</li>
+</ul>
+</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_1_1_2_5">1.1.2.5   </div>
+<div class="section-number" id="toc_doc_section_2_2_3">2.2.3   </div>
<a href="#installing-libxo">Installing libxo</a>
</li>
</ul>
</li>
</ul>
-</li></ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_2">2   </div>
+<div class="section-number" id="toc_doc_section_3">3   </div>
<a href="#formatting-with-libxo">Formatting with libxo</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_1">2.1   </div>
+<div class="section-number" id="toc_doc_section_3_1">3.1   </div>
<a href="#encoding-styles">Encoding Styles</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_1_1">2.1.1   </div>
+<div class="section-number" id="toc_doc_section_3_1_1">3.1.1   </div>
<a href="#text-output">Text Output</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_1_2">2.1.2   </div>
+<div class="section-number" id="toc_doc_section_3_1_2">3.1.2   </div>
<a href="#xml-output">XML Output</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_1_3">2.1.3   </div>
+<div class="section-number" id="toc_doc_section_3_1_3">3.1.3   </div>
<a href="#json-output">JSON Output</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_1_4">2.1.4   </div>
+<div class="section-number" id="toc_doc_section_3_1_4">3.1.4   </div>
<a href="#html-output">HTML Output</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2">2.2   </div>
+<div class="section-number" id="toc_doc_section_3_2">3.2   </div>
<a href="#format-strings">Format Strings</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1">2.2.1   </div>
+<div class="section-number" id="toc_doc_section_3_2_1">3.2.1   </div>
<a href="#field-roles">Field Roles</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_1">2.2.1.1   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_1">3.2.1.1   </div>
<a href="#color-role">The Color Role ({C:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_2">2.2.1.2   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_2">3.2.1.2   </div>
<a href="#the-decoration-role-d">The Decoration Role ({D:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_3">2.2.1.3   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_3">3.2.1.3   </div>
<a href="#gettext-role">The Gettext Role ({G:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_4">2.2.1.4   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_4">3.2.1.4   </div>
<a href="#the-label-role-l">The Label Role ({L:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_5">2.2.1.5   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_5">3.2.1.5   </div>
<a href="#the-note-role-n">The Note Role ({N:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_6">2.2.1.6   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_6">3.2.1.6   </div>
<a href="#padding-role">The Padding Role ({P:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_7">2.2.1.7   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_7">3.2.1.7   </div>
<a href="#the-title-role-t">The Title Role ({T:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_8">2.2.1.8   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_8">3.2.1.8   </div>
<a href="#the-units-role-u">The Units Role ({U:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_9">2.2.1.9   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_9">3.2.1.9   </div>
<a href="#the-value-role-v-and-">The Value Role ({V:} and {:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_1_10">2.2.1.10   </div>
+<div class="section-number" id="toc_doc_section_3_2_1_10">3.2.1.10   </div>
<a href="#anchor-role">The Anchor Roles ({[:} and {]:})</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2">2.2.2   </div>
+<div class="section-number" id="toc_doc_section_3_2_2">3.2.2   </div>
<a href="#field-modifiers">Field Modifiers</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_1">2.2.2.1   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_1">3.2.2.1   </div>
<a href="#the-argument-modifier-a">The Argument Modifier ({a:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_2">2.2.2.2   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_2">3.2.2.2   </div>
<a href="#the-colon-modifier-c">The Colon Modifier ({c:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_3">2.2.2.3   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_3">3.2.2.3   </div>
<a href="#the-display-modifier-d">The Display Modifier ({d:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_4">2.2.2.4   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_4">3.2.2.4   </div>
<a href="#e-modifier">The Encoding Modifier ({e:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_5">2.2.2.5   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_5">3.2.2.5   </div>
<a href="#gettext-modifier">The Gettext Modifier ({g:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_6">2.2.2.6   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_6">3.2.2.6   </div>
<a href="#the-humanize-modifier-h">The Humanize Modifier ({h:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_7">2.2.2.7   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_7">3.2.2.7   </div>
<a href="#the-key-modifier-k">The Key Modifier ({k:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_8">2.2.2.8   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_8">3.2.2.8   </div>
<a href="#the-leaf-list-modifier-l">The Leaf-List Modifier ({l:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_9">2.2.2.9   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_9">3.2.2.9   </div>
<a href="#the-no-quotes-modifier-n">The No-Quotes Modifier ({n:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_10">2.2.2.10   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_10">3.2.2.10   </div>
<a href="#plural-modifier">The Plural Modifier ({p:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_11">2.2.2.11   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_11">3.2.2.11   </div>
<a href="#the-quotes-modifier-q">The Quotes Modifier ({q:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_12">2.2.2.12   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_12">3.2.2.12   </div>
<a href="#the-trim-modifier-t">The Trim Modifier ({t:})</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_2_13">2.2.2.13   </div>
+<div class="section-number" id="toc_doc_section_3_2_2_13">3.2.2.13   </div>
<a href="#the-white-space-modifier-w">The White Space Modifier ({w:})</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_3">2.2.3   </div>
+<div class="section-number" id="toc_doc_section_3_2_3">3.2.3   </div>
<a href="#field-formatting">Field Formatting</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_4">2.2.4   </div>
+<div class="section-number" id="toc_doc_section_3_2_4">3.2.4   </div>
<a href="#utf-8-and-locale-strings">UTF-8 and Locale Strings</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_5">2.2.5   </div>
+<div class="section-number" id="toc_doc_section_3_2_5">3.2.5   </div>
<a href="#characters-outside-of-field-definitions">Characters Outside of Field Definitions</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_6">2.2.6   </div>
+<div class="section-number" id="toc_doc_section_3_2_6">3.2.6   </div>
<a href="#m-is-supported">"%m" Is Supported</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_7">2.2.7   </div>
+<div class="section-number" id="toc_doc_section_3_2_7">3.2.7   </div>
<a href="#n-is-not-supported">"%n" Is Not Supported</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_8">2.2.8   </div>
+<div class="section-number" id="toc_doc_section_3_2_8">3.2.8   </div>
<a href="#the-encoding-format-eformat">The Encoding Format (eformat)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_9">2.2.9   </div>
+<div class="section-number" id="toc_doc_section_3_2_9">3.2.9   </div>
<a href="#content-strings">Content Strings</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_10">2.2.10   </div>
+<div class="section-number" id="toc_doc_section_3_2_10">3.2.10   </div>
<a href="#printf-like">Argument Validation</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_11">2.2.11   </div>
+<div class="section-number" id="toc_doc_section_3_2_11">3.2.11   </div>
<a href="#retain">Retaining Parsed Format Information</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_2_12">2.2.12   </div>
+<div class="section-number" id="toc_doc_section_3_2_12">3.2.12   </div>
<a href="#example">Example</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_3">2.3   </div>
+<div class="section-number" id="toc_doc_section_3_3">3.3   </div>
<a href="#representing-hierarchy">Representing Hierarchy</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_3_1">2.3.1   </div>
+<div class="section-number" id="toc_doc_section_3_3_1">3.3.1   </div>
<a href="#containers">Containers</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_3_2">2.3.2   </div>
+<div class="section-number" id="toc_doc_section_3_3_2">3.3.2   </div>
<a href="#lists-and-instances">Lists and Instances</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_3_3">2.3.3   </div>
+<div class="section-number" id="toc_doc_section_3_3_3">3.3.3   </div>
<a href="#dtrt-mode">DTRT Mode</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_3_4">2.3.4   </div>
+<div class="section-number" id="toc_doc_section_3_3_4">3.3.4   </div>
<a href="#markers">Markers</a>
</li>
</ul>
</li>
+</ul>
+</li>
+<li class="tocline0">
+<div class="section-number" id="toc_doc_section_4">4   </div>
+<a href="#options">Command-line Arguments</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_2_4">2.4   </div>
-<a href="#command-line-arguments">Command-line Arguments</a>
+<div class="section-number" id="toc_doc_section_4_1">4.1   </div>
+<a href="#option-keywords">Option keywords</a>
+</li>
+<li class="tocline1">
+<div class="section-number" id="toc_doc_section_4_2">4.2   </div>
+<a href="#brief-options">Brief Options</a>
+</li>
+<li class="tocline1">
+<div class="section-number" id="toc_doc_section_4_3">4.3   </div>
+<a href="#color-mapping">Color Mapping</a>
</li>
</ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_3">3   </div>
+<div class="section-number" id="toc_doc_section_5">5   </div>
<a href="#the-libxo-api">The libxo API</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1">3.1   </div>
+<div class="section-number" id="toc_doc_section_5_1">5.1   </div>
<a href="#handles">Handles</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_1">3.1.1   </div>
+<div class="section-number" id="toc_doc_section_5_1_1">5.1.1   </div>
<a href="#xo_create">xo_create</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_2">3.1.2   </div>
+<div class="section-number" id="toc_doc_section_5_1_2">5.1.2   </div>
<a href="#xo_create_to_file">xo_create_to_file</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_3">3.1.3   </div>
+<div class="section-number" id="toc_doc_section_5_1_3">5.1.3   </div>
<a href="#xo_set_writer">xo_set_writer</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_4">3.1.4   </div>
+<div class="section-number" id="toc_doc_section_5_1_4">5.1.4   </div>
<a href="#xo_set_style">xo_set_style</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_5">3.1.5   </div>
+<div class="section-number" id="toc_doc_section_5_1_5">5.1.5   </div>
<a href="#xo_get_style">xo_get_style</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_5_1">3.1.5.1   </div>
+<div class="section-number" id="toc_doc_section_5_1_5_1">5.1.5.1   </div>
<a href="#styles">Output Styles (XO_STYLE_*)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_5_2">3.1.5.2   </div>
+<div class="section-number" id="toc_doc_section_5_1_5_2">5.1.5.2   </div>
<a href="#xo_set_style_name">xo_set_style_name</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_6">3.1.6   </div>
+<div class="section-number" id="toc_doc_section_5_1_6">5.1.6   </div>
<a href="#xo_set_flags">xo_set_flags</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_6_1">3.1.6.1   </div>
+<div class="section-number" id="toc_doc_section_5_1_6_1">5.1.6.1   </div>
<a href="#flags">Flags (XOF_*)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_6_2">3.1.6.2   </div>
+<div class="section-number" id="toc_doc_section_5_1_6_2">5.1.6.2   </div>
<a href="#xo_clear_flags">xo_clear_flags</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_6_3">3.1.6.3   </div>
+<div class="section-number" id="toc_doc_section_5_1_6_3">5.1.6.3   </div>
<a href="#xo_set_options">xo_set_options</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_1_7">3.1.7   </div>
+<div class="section-number" id="toc_doc_section_5_1_7">5.1.7   </div>
<a href="#xo_destroy">xo_destroy</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_2">3.2   </div>
+<div class="section-number" id="toc_doc_section_5_2">5.2   </div>
<a href="#emitting-content-xo_emit">Emitting Content (xo_emit)</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_2_1">3.2.1   </div>
+<div class="section-number" id="toc_doc_section_5_2_1">5.2.1   </div>
<a href="#xo_emit_field">Single Field Emitting Functions (xo_emit_field)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_2_2">3.2.2   </div>
+<div class="section-number" id="toc_doc_section_5_2_2">5.2.2   </div>
<a href="#xo_attr">Attributes (xo_attr)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_2_3">3.2.3   </div>
+<div class="section-number" id="toc_doc_section_5_2_3">5.2.3   </div>
<a href="#flushing-output-xo_flush">Flushing Output (xo_flush)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_2_4">3.2.4   </div>
+<div class="section-number" id="toc_doc_section_5_2_4">5.2.4   </div>
<a href="#finishing-output-xo_finish">Finishing Output (xo_finish)</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_3">3.3   </div>
+<div class="section-number" id="toc_doc_section_5_3">5.3   </div>
<a href="#emitting-hierarchy">Emitting Hierarchy</a><ul class="toc"><li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_3_1">3.3.1   </div>
+<div class="section-number" id="toc_doc_section_5_3_1">5.3.1   </div>
<a href="#lists-and-instances-2">Lists and Instances</a>
</li></ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4">3.4   </div>
+<div class="section-number" id="toc_doc_section_5_4">5.4   </div>
<a href="#support-functions">Support Functions</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_1">3.4.1   </div>
+<div class="section-number" id="toc_doc_section_5_4_1">5.4.1   </div>
<a href="#xo_parse_args">Parsing Command-line Arguments (xo_parse_args)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_2">3.4.2   </div>
+<div class="section-number" id="toc_doc_section_5_4_2">5.4.2   </div>
<a href="#xo_set_program">xo_set_program</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_3">3.4.3   </div>
+<div class="section-number" id="toc_doc_section_5_4_3">5.4.3   </div>
<a href="#xo_set_version">xo_set_version</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_4">3.4.4   </div>
+<div class="section-number" id="toc_doc_section_5_4_4">5.4.4   </div>
<a href="#info">Field Information (xo_info_t)</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_5">3.4.5   </div>
+<div class="section-number" id="toc_doc_section_5_4_5">5.4.5   </div>
<a href="#memory-allocation">Memory Allocation</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_6">3.4.6   </div>
+<div class="section-number" id="toc_doc_section_5_4_6">5.4.6   </div>
<a href="#LIBXO_OPTIONS">LIBXO_OPTIONS</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_7">3.4.7   </div>
+<div class="section-number" id="toc_doc_section_5_4_7">5.4.7   </div>
<a href="#errors-warnings-and-messages">Errors, Warnings, and Messages</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_8">3.4.8   </div>
+<div class="section-number" id="toc_doc_section_5_4_8">5.4.8   </div>
<a href="#xo_error">xo_error</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_4_9">3.4.9   </div>
+<div class="section-number" id="toc_doc_section_5_4_9">5.4.9   </div>
<a href="#xo_no_setlocale">xo_no_setlocale</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5">3.5   </div>
+<div class="section-number" id="toc_doc_section_5_5">5.5   </div>
<a href="#emitting-syslog-messages">Emitting syslog Messages</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_1">3.5.1   </div>
+<div class="section-number" id="toc_doc_section_5_5_1">5.5.1   </div>
<a href="#priority">Priority, Facility, and Flags</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_2">3.5.2   </div>
+<div class="section-number" id="toc_doc_section_5_5_2">5.5.2   </div>
<a href="#xo_syslog">xo_syslog</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3">3.5.3   </div>
+<div class="section-number" id="toc_doc_section_5_5_3">5.5.3   </div>
<a href="#support-functions-2">Support functions</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3_1">3.5.3.1   </div>
+<div class="section-number" id="toc_doc_section_5_5_3_1">5.5.3.1   </div>
<a href="#xo_vsyslog">xo_vsyslog</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3_2">3.5.3.2   </div>
+<div class="section-number" id="toc_doc_section_5_5_3_2">5.5.3.2   </div>
<a href="#xo_open_log">xo_open_log</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3_3">3.5.3.3   </div>
+<div class="section-number" id="toc_doc_section_5_5_3_3">5.5.3.3   </div>
<a href="#xo_close_log">xo_close_log</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3_4">3.5.3.4   </div>
+<div class="section-number" id="toc_doc_section_5_5_3_4">5.5.3.4   </div>
<a href="#xo_set_logmask">xo_set_logmask</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_5_3_5">3.5.3.5   </div>
+<div class="section-number" id="toc_doc_section_5_5_3_5">5.5.3.5   </div>
<a href="#xo_set_syslog_enterprise_id">xo_set_syslog_enterprise_id</a>
</li>
</ul>
@@ -22417,18 +22434,18 @@ jQuery(function ($) {
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_6">3.6   </div>
+<div class="section-number" id="toc_doc_section_5_6">5.6   </div>
<a href="#creating-custom-encoders">Creating Custom Encoders</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_6_1">3.6.1   </div>
+<div class="section-number" id="toc_doc_section_5_6_1">5.6.1   </div>
<a href="#loading-encoders">Loading Encoders</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_6_2">3.6.2   </div>
+<div class="section-number" id="toc_doc_section_5_6_2">5.6.2   </div>
<a href="#encoder-initialization">Encoder Initialization</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_3_6_3">3.6.3   </div>
+<div class="section-number" id="toc_doc_section_5_6_3">5.6.3   </div>
<a href="#operations">Operations</a>
</li>
</ul>
@@ -22436,143 +22453,143 @@ jQuery(function ($) {
</ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_4">4   </div>
+<div class="section-number" id="toc_doc_section_6">6   </div>
<a href="#the-xo-utility">The "xo" Utility</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_4_1">4.1   </div>
+<div class="section-number" id="toc_doc_section_6_1">6.1   </div>
<a href="#command-line-options">Command Line Options</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_4_2">4.2   </div>
+<div class="section-number" id="toc_doc_section_6_2">6.2   </div>
<a href="#example-2">Example</a>
</li>
</ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_5">5   </div>
+<div class="section-number" id="toc_doc_section_7">7   </div>
<a href="#xolint">xolint</a>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_6">6   </div>
+<div class="section-number" id="toc_doc_section_8">8   </div>
<a href="#xohtml">xohtml</a>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_7">7   </div>
+<div class="section-number" id="toc_doc_section_9">9   </div>
<a href="#xopo">xopo</a>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_8">8   </div>
+<div class="section-number" id="toc_doc_section_10">10   </div>
<a href="#faqs">FAQs</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_1">8.1   </div>
+<div class="section-number" id="toc_doc_section_10_1">10.1   </div>
<a href="#general">General</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_1_1">8.1.1   </div>
+<div class="section-number" id="toc_doc_section_10_1_1">10.1.1   </div>
<a href="#can-you-share-the-history-of-libxo">Can you share the history of libxo?</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_1_2">8.1.2   </div>
+<div class="section-number" id="toc_doc_section_10_1_2">10.1.2   </div>
<a href="#did-the-complex-semantics-of-format-strings-evolve-over-time">Did the complex semantics of format strings evolve over time?</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_1_3">8.1.3   </div>
+<div class="section-number" id="toc_doc_section_10_1_3">10.1.3   </div>
<a href="#good-field-names">What makes a good field name?</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2">8.2   </div>
+<div class="section-number" id="toc_doc_section_10_2">10.2   </div>
<a href="#what-does-this-message-mean">What does this message mean?</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_1">8.2.1   </div>
+<div class="section-number" id="toc_doc_section_10_2_1">10.2.1   </div>
<a href="#a-percent-sign-appearing-in-text-is-a-literal">'A percent sign appearing in text is a literal'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_2">8.2.2   </div>
+<div class="section-number" id="toc_doc_section_10_2_2">10.2.2   </div>
<a href="#unknown-long-name-for-rolemodifier">'Unknown long name for role/modifier'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_3">8.2.3   </div>
+<div class="section-number" id="toc_doc_section_10_2_3">10.2.3   </div>
<a href="#last-character-before-field-definition-is-a-field-type">'Last character before field definition is a field type'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_4">8.2.4   </div>
+<div class="section-number" id="toc_doc_section_10_2_4">10.2.4   </div>
<a href="#encoding-format-uses-different-number-of-arguments">'Encoding format uses different number of arguments'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_5">8.2.5   </div>
+<div class="section-number" id="toc_doc_section_10_2_5">10.2.5   </div>
<a href="#only-one-field-role-can-be-used">'Only one field role can be used'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_6">8.2.6   </div>
+<div class="section-number" id="toc_doc_section_10_2_6">10.2.6   </div>
<a href="#potential-missing-slash-after-c-d-n-l-or-t-with-format">'Potential missing slash after C, D, N, L, or T with format'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_7">8.2.7   </div>
+<div class="section-number" id="toc_doc_section_10_2_7">10.2.7   </div>
<a href="#an-encoding-format-cannot-be-given-roles-dnlt">'An encoding format cannot be given (roles: DNLT)'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_8">8.2.8   </div>
+<div class="section-number" id="toc_doc_section_10_2_8">10.2.8   </div>
<a href="#format-cannot-be-given-when-content-is-present-roles-cdln">'Format cannot be given when content is present (roles: CDLN)'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_9">8.2.9   </div>
+<div class="section-number" id="toc_doc_section_10_2_9">10.2.9   </div>
<a href="#field-has-color-without-fg--or-bg--role-c">'Field has color without fg- or bg- (role: C)'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_10">8.2.10   </div>
+<div class="section-number" id="toc_doc_section_10_2_10">10.2.10   </div>
<a href="#field-has-invalid-color-or-effect-role-c">'Field has invalid color or effect (role: C)'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_11">8.2.11   </div>
+<div class="section-number" id="toc_doc_section_10_2_11">10.2.11   </div>
<a href="#field-has-humanize-modifier-but-no-format-string">'Field has humanize modifier but no format string'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_12">8.2.12   </div>
+<div class="section-number" id="toc_doc_section_10_2_12">10.2.12   </div>
<a href="#field-has-hn--modifier-but-not-h-modifier">'Field has hn-* modifier but not 'h' modifier'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_13">8.2.13   </div>
+<div class="section-number" id="toc_doc_section_10_2_13">10.2.13   </div>
<a href="#value-field-must-have-a-name-as-content">'Value field must have a name (as content)")'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_14">8.2.14   </div>
+<div class="section-number" id="toc_doc_section_10_2_14">10.2.14   </div>
<a href="#use-hyphens-not-underscores-for-value-field-name">'Use hyphens, not underscores, for value field name'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_15">8.2.15   </div>
+<div class="section-number" id="toc_doc_section_10_2_15">10.2.15   </div>
<a href="#value-field-name-cannot-start-with-digit">'Value field name cannot start with digit'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_16">8.2.16   </div>
+<div class="section-number" id="toc_doc_section_10_2_16">10.2.16   </div>
<a href="#value-field-name-should-be-lower-case">'Value field name should be lower case'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_17">8.2.17   </div>
+<div class="section-number" id="toc_doc_section_10_2_17">10.2.17   </div>
<a href="#value-field-name-should-be-longer-than-two-characters">'Value field name should be longer than two characters'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_18">8.2.18   </div>
+<div class="section-number" id="toc_doc_section_10_2_18">10.2.18   </div>
<a href="#value-field-name-contains-invalid-character">'Value field name contains invalid character'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_19">8.2.19   </div>
+<div class="section-number" id="toc_doc_section_10_2_19">10.2.19   </div>
<a href="#decoration-field-contains-invalid-character">'decoration field contains invalid character'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_20">8.2.20   </div>
+<div class="section-number" id="toc_doc_section_10_2_20">10.2.20   </div>
<a href="#anchor-content-should-be-decimal-width">'Anchor content should be decimal width'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_21">8.2.21   </div>
+<div class="section-number" id="toc_doc_section_10_2_21">10.2.21   </div>
<a href="#anchor-format-should-be-d">'Anchor format should be "%d"'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_22">8.2.22   </div>
+<div class="section-number" id="toc_doc_section_10_2_22">10.2.22   </div>
<a href="#anchor-cannot-have-both-format-and-encoding-format">'Anchor cannot have both format and encoding format")'</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_8_2_23">8.2.23   </div>
+<div class="section-number" id="toc_doc_section_10_2_23">10.2.23   </div>
<a href="#max-width-only-valid-for-strings">'Max width only valid for strings'</a>
</li>
</ul>
@@ -22580,54 +22597,54 @@ jQuery(function ($) {
</ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_9">9   </div>
+<div class="section-number" id="toc_doc_section_11">11   </div>
<a href="#howtos-focused-directions">Howtos: Focused Directions</a><ul class="toc top-toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_1">9.1   </div>
+<div class="section-number" id="toc_doc_section_11_1">11.1   </div>
<a href="#howto-report-bugs">Howto: Report bugs</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_2">9.2   </div>
+<div class="section-number" id="toc_doc_section_11_2">11.2   </div>
<a href="#howto-install-libxo">Howto: Install libxo</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_3">9.3   </div>
+<div class="section-number" id="toc_doc_section_11_3">11.3   </div>
<a href="#howto-convert-command-line-applications">Howto: Convert command line applications</a><ul class="toc">
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_3_1">9.3.1   </div>
+<div class="section-number" id="toc_doc_section_11_3_1">11.3.1   </div>
<a href="#setting-up-the-context">Setting up the context</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_3_2">9.3.2   </div>
+<div class="section-number" id="toc_doc_section_11_3_2">11.3.2   </div>
<a href="#converting-printf-calls">Converting printf Calls</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_3_3">9.3.3   </div>
+<div class="section-number" id="toc_doc_section_11_3_3">11.3.3   </div>
<a href="#creating-hierarchy">Creating Hierarchy</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_3_4">9.3.4   </div>
+<div class="section-number" id="toc_doc_section_11_3_4">11.3.4   </div>
<a href="#converting-error-functions">Converting Error Functions</a>
</li>
</ul>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_4">9.4   </div>
+<div class="section-number" id="toc_doc_section_11_4">11.4   </div>
<a href="#howto-use-xo-in-shell-scripts">Howto: Use "xo" in Shell Scripts</a>
</li>
<li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_5">9.5   </div>
+<div class="section-number" id="toc_doc_section_11_5">11.5   </div>
<a href="#howto-i18n">Howto: Internationalization (i18n)</a><ul class="toc"><li class="tocline1">
-<div class="section-number" id="toc_doc_section_9_5_1">9.5.1   </div>
+<div class="section-number" id="toc_doc_section_11_5_1">11.5.1   </div>
<a href="#i18n-and-xo_emit">i18n and xo_emit</a>
</li></ul>
</li>
</ul>
</li>
<li class="tocline0">
-<div class="section-number" id="toc_doc_section_10">10   </div>
+<div class="section-number" id="toc_doc_section_12">12   </div>
<a href="#examples">Examples</a><ul class="toc top-toc"><li class="tocline1">
-<div class="section-number" id="toc_doc_section_10_1">10.1   </div>
+<div class="section-number" id="toc_doc_section_12_1">12.1   </div>
<a href="#unit-test">Unit Test</a>
</li></ul>
</li>
@@ -22642,14 +22659,31 @@ jQuery(function ($) {
<a id="overview" href="#overview">Overview</a>
</h1>
<p id="doc_section_1_p_1">libxo - A Library for Generating Text, XML, JSON, and HTML Output</p>
-<p id="doc_section_1_p_2">You want to prepare for the future, but you need to live in the present. You'd love a flying car, but need to get to work today. You want to support features like XML, JSON, and HTML rendering to allow integration with NETCONF, REST, and web browsers, but you need to make text output for command line users. And you don't want multiple code paths that can't help but get out of sync. None of this "if (xml) {... } else {...}" logic. And ifdefs are right out. But you'd really, really like all the fancy features that modern encoding formats can provide. libxo can help.</p>
-<p id="doc_section_1_p_3">The libxo library allows an application to generate text, XML, JSON, and HTML output using a common set of function calls. The application decides at run time which output style should be produced. The application calls a function "xo_emit" to product output that is described in a format string. A "field descriptor" tells libxo what the field is and what it means. Each field descriptor is placed in braces with a printf-like format string (<a href="#format-strings" title="Format Strings">Section 2.2</a>):</p>
+<p id="doc_section_1_p_2">You want to prepare for the future, but you need to live in the present. You'd love a flying car, but need to get to work today. You want to support features like XML, JSON, and HTML rendering to allow integration with NETCONF, REST, and web browsers, but you need to make text output for command line users.</p>
+<p id="doc_section_1_p_3">And you don't want multiple code paths that can't help but get out of sync:</p>
<div id="doc_figure_u.1"></div> <pre>
+ /* None of this "if (xml) {... } else {...}" logic */
+ if (xml) {
+ /* some code to make xml*/
+ } else {
+ /* other code to make text */
+ /* oops forgot to add something on both clauses! */
+ }
+
+ /* And ifdefs are right out. */
+ #ifdef MAKE_XML
+ /* icky */
+ #else
+ /* pooh */
+ #endif
+ </pre> <p id="doc_section_1_p_5">But you'd really, really like all the fancy features that modern encoding formats can provide. libxo can help.</p>
+<p id="doc_section_1_p_6">The libxo library allows an application to generate text, XML, JSON, and HTML output using a common set of function calls. The application decides at run time which output style should be produced. The application calls a function "xo_emit" to product output that is described in a format string. A "field descriptor" tells libxo what the field is and what it means. Each field descriptor is placed in braces with a printf-like format string (<a href="#format-strings" title="Format Strings">Section 3.2</a>):</p>
+<div id="doc_figure_u.2"></div> <pre>
xo_emit(" {:lines/%7ju} {:words/%7ju} "
"{:characters/%7ju} {d:filename/%s}\n",
linect, wordct, charct, file);
- </pre> <p id="doc_section_1_p_5">Each field can have a role, with the 'value' role being the default, and the role tells libxo how and when to render that field. Output can then be generated in various style, using the "&#8209;&#8209;libxo" option:</p>
-<div id="doc_figure_u.2"></div> <pre>
+ </pre> <p id="doc_section_1_p_8">Each field can have a role, with the 'value' role being the default, and the role tells libxo how and when to render that field (see <a href="#field-roles" title="Field Roles">Section 3.2.1</a> for details). Modifiers change how the field is rendered in different output styles (see <a href="#field-modifiers" title="Field Modifiers">Section 3.2.2</a> for details. Output can then be generated in various style, using the "&#8209;&#8209;libxo" option:</p>
+<div id="doc_figure_u.3"></div> <pre>
% wc /etc/motd
25 165 1140 /etc/motd
% wc --libxo xml,pretty,warn /etc/motd
@@ -22685,160 +22719,164 @@ jQuery(function ($) {
&lt;div class="text"&gt; &lt;/div&gt;
&lt;div class="data" data-tag="filename"&gt;/etc/motd&lt;/div&gt;
&lt;/div&gt;
- </pre> <p id="doc_section_1_p_7">Section Contents: </p>
-<ul><li><a href="#getting-libxo" title="Getting libxo">Section 1.1</a></li></ul>
+ </pre> <p id="doc_section_1_p_10">Same code path, same format strings, same information, but it's rendered in distinct styles based on run-time flags.</p>
+</div>
+<hr class="noprint">
<div class="content">
-<h2 id="doc_section_1_1">
+<h1 id="doc_section_2" class="np">
<div class="self-section-number">
-<a href="#doc_section_1_1">1.1</a> </div>
+<a href="#doc_section_2">2_</a> </div>
<a id="getting-libxo" href="#getting-libxo">Getting libxo</a>
-</h2>
-<p id="doc_section_1_1_p_1">libxo lives on github as:</p>
-<p id="doc_section_1_1_p_2"> <a href="https://github.com/Juniper/libxo">https://github.com/Juniper/libxo</a></p>
-<p id="doc_section_1_1_p_3">The latest release of libxo is available at:</p>
-<p id="doc_section_1_1_p_4"> <a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a></p>
-<p id="doc_section_1_1_p_5">We are following the branching scheme from <a href="http://nvie.com/posts/a-successful-git-branching-model/">http://nvie.com/posts/a-successful-git-branching-model/</a> which means we will do development under the "develop" branch, and release from the "master" branch. To clone a developer tree, run the following command:</p>
-<div id="doc_figure_u.3"></div> <pre>
+</h1>
+<p id="doc_section_2_p_1">libxo now ships as part of the FreeBSD Operating System (as of -11).</p>
+<p id="doc_section_2_p_2">libxo lives on github as:</p>
+<p id="doc_section_2_p_3"> <a href="https://github.com/Juniper/libxo">https://github.com/Juniper/libxo</a></p>
+<p id="doc_section_2_p_4">The latest release of libxo is available at:</p>
+<p id="doc_section_2_p_5"> <a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a></p>
+<p id="doc_section_2_p_6">We are following the branching scheme from <a href="http://nvie.com/posts/a-successful-git-branching-model/">http://nvie.com/posts/a-successful-git-branching-model/</a> which means we will do development under the "develop" branch, and release from the "master" branch. To clone a developer tree, run the following command:</p>
+<div id="doc_figure_u.4"></div> <pre>
git clone https://github.com/Juniper/libxo.git -b develop
- </pre> <p id="doc_section_1_1_p_7">We're using semantic release numbering, as defined in <a href="http://semver.org/spec/v2.0.0.html">http://semver.org/spec/v2.0.0.html</a>.</p>
-<p id="doc_section_1_1_p_8">libxo is open source, distributed under the BSD license. It shipped as part of the FreeBSD operating system starting with release 11.0.</p>
-<p id="doc_section_1_1_p_9">Issues, problems, and bugs should be directly to the issues page on our github site.</p>
-<p id="doc_section_1_1_p_10">Section Contents: </p>
+ </pre> <p id="doc_section_2_p_8">We're using semantic release numbering, as defined in <a href="http://semver.org/spec/v2.0.0.html">http://semver.org/spec/v2.0.0.html</a>.</p>
+<p id="doc_section_2_p_9">libxo is open source, distributed under the BSD license. It shipped as part of the FreeBSD operating system starting with release 11.0.</p>
+<p id="doc_section_2_p_10">Issues, problems, and bugs should be directly to the issues page on our github site.</p>
+<p id="doc_section_2_p_11">Section Contents: </p>
<ul>
-<li><a href="#downloading-libxo-source-code" title="Downloading libxo Source Code">Section 1.1.1</a></li>
-<li><a href="#building-libxo" title="Building libxo">Section 1.1.2</a></li>
+<li><a href="#downloading-libxo-source-code" title="Downloading libxo Source Code">Section 2.1</a></li>
+<li><a href="#building-libxo" title="Building libxo">Section 2.2</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_1_1_1">
+<h2 id="doc_section_2_1">
<div class="self-section-number">
-<a href="#doc_section_1_1_1">1.1.1</a> </div>
+<a href="#doc_section_2_1">2.1</a> </div>
<a id="downloading-libxo-source-code" href="#downloading-libxo-source-code">Downloading libxo Source Code</a>
-</h3>
-<p id="doc_section_1_1_1_p_1">You can retrieve the source for libxo in two ways:</p>
-<p id="doc_section_1_1_1_p_2">A) Use a "distfile" for a specific release. We use github to maintain our releases. Visit github release page (<a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a>) to see the list of releases. To download the latest, look for the release with the green "Latest release" button and the green "libxo&#8209;RELEASE.tar.gz" button under that section.</p>
-<p id="doc_section_1_1_1_p_3">After downloading that release's distfile, untar it as follows:</p>
-<div id="doc_figure_u.4"></div> <pre>
+</h2>
+<p id="doc_section_2_1_p_1">You can retrieve the source for libxo in two ways:</p>
+<p id="doc_section_2_1_p_2">A) Use a "distfile" for a specific release. We use github to maintain our releases. Visit github release page (<a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a>) to see the list of releases. To download the latest, look for the release with the green "Latest release" button and the green "libxo&#8209;RELEASE.tar.gz" button under that section.</p>
+<p id="doc_section_2_1_p_3">After downloading that release's distfile, untar it as follows:</p>
+<div id="doc_figure_u.5"></div> <pre>
tar -zxf libxo-RELEASE.tar.gz
cd libxo-RELEASE
- </pre> <p id="doc_section_1_1_1_p_5">[Note: for Solaris users, your "tar" command lacks the "&#8209;z" flag, so you'll need to substitute "gzip -dc "file" | tar xf -" instead of "tar -zxf "file"".]</p>
-<p id="doc_section_1_1_1_p_6">B) Use the current build from github. This gives you the most recent source code, which might be less stable than a specific release. To build libxo from the git repo:</p>
-<div id="doc_figure_u.5"></div> <pre>
+ </pre> <p id="doc_section_2_1_p_5">[Note: for Solaris users, your "tar" command lacks the "&#8209;z" flag, so you'll need to substitute "gzip -dc "file" | tar xf -" instead of "tar -zxf "file"".]</p>
+<p id="doc_section_2_1_p_6">B) Use the current build from github. This gives you the most recent source code, which might be less stable than a specific release. To build libxo from the git repo:</p>
+<div id="doc_figure_u.6"></div> <pre>
git clone https://github.com/Juniper/libxo.git
cd libxo
- </pre> <p id="doc_section_1_1_1_p_8">_BE AWARE_: The github repository does _not_ contain the files generated by "autoreconf", with the notable exception of the "m4" directory. Since these files (depcomp, configure, missing, install-sh, etc) are generated files, we keep them out of the source code repository.</p>
-<p id="doc_section_1_1_1_p_9">This means that if you download the a release distfile, these files will be ready and you'll just need to run "configure", but if you download the source code from svn, then you'll need to run "autoreconf" by hand. This step is done for you by the "setup.sh" script, described in the next section.</p>
+ </pre> <p id="doc_section_2_1_p_8">_BE AWARE_: The github repository does _not_ contain the files generated by "autoreconf", with the notable exception of the "m4" directory. Since these files (depcomp, configure, missing, install-sh, etc) are generated files, we keep them out of the source code repository.</p>
+<p id="doc_section_2_1_p_9">This means that if you download the a release distfile, these files will be ready and you'll just need to run "configure", but if you download the source code from svn, then you'll need to run "autoreconf" by hand. This step is done for you by the "setup.sh" script, described in the next section.</p>
</div>
<div class="content">
-<h3 id="doc_section_1_1_2">
+<h2 id="doc_section_2_2">
<div class="self-section-number">
-<a href="#doc_section_1_1_2">1.1.2</a> </div>
+<a href="#doc_section_2_2">2.2</a> </div>
<a id="building-libxo" href="#building-libxo">Building libxo</a>
-</h3>
-<p id="doc_section_1_1_2_p_1">To build libxo, you'll need to set up the build, run the "configure" script, run the "make" command, and run the regression tests.</p>
-<p id="doc_section_1_1_2_p_2">The following is a summary of the commands needed. These commands are explained in detail in the rest of this section.</p>
-<div id="doc_figure_u.6"></div> <pre>
+</h2>
+<p id="doc_section_2_2_p_1">To build libxo, you'll need to set up the build, run the "configure" script, run the "make" command, and run the regression tests.</p>
+<p id="doc_section_2_2_p_2">The following is a summary of the commands needed. These commands are explained in detail in the rest of this section.</p>
+<div id="doc_figure_u.7"></div> <pre>
sh bin/setup.sh
cd build
../configure
make
make test
sudo make install
- </pre> <p id="doc_section_1_1_2_p_4">The following sections will walk through each of these steps with additional details and options, but the above directions should be all that's needed.</p>
-<p id="doc_section_1_1_2_p_5">Section Contents: </p>
+ </pre> <p id="doc_section_2_2_p_4">The following sections will walk through each of these steps with additional details and options, but the above directions should be all that's needed.</p>
+<p id="doc_section_2_2_p_5">Section Contents: </p>
<ul>
-<li><a href="#setting-up-the-build" title="Setting up the build">Section 1.1.2.1</a></li>
-<li><a href="#running-the-configure-script" title='Running the "configure" Script'>Section 1.1.2.2</a></li>
-<li><a href="#running-the-make-command" title='Running the "make" command'>Section 1.1.2.3</a></li>
-<li><a href="#running-the-regression-tests" title="Running the Regression Tests">Section 1.1.2.4</a></li>
-<li><a href="#installing-libxo" title="Installing libxo">Section 1.1.2.5</a></li>
+<li><a href="#setting-up-the-build" title="Setting up the build">Section 2.2.1</a></li>
+<li><a href="#running-the-configure-script" title='Running the "configure" Script'>Section 2.2.2</a></li>
+<li><a href="#installing-libxo" title="Installing libxo">Section 2.2.3</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_1_1_2_1">
+<h3 id="doc_section_2_2_1">
<div class="self-section-number">
-<a href="#doc_section_1_1_2_1">1.1.2.1</a> </div>
+<a href="#doc_section_2_2_1">2.2.1</a> </div>
<a id="setting-up-the-build" href="#setting-up-the-build">Setting up the build</a>
-</h4>
-<p id="doc_section_1_1_2_1_p_1">[If you downloaded a distfile, you can skip this step.]</p>
-<p id="doc_section_1_1_2_1_p_2">Run the "setup.sh" script to set up the build. This script runs the "autoreconf" command to generate the "configure" script and other generated files.</p>
-<div id="doc_figure_u.7"></div> <pre>
+</h3>
+<p id="doc_section_2_2_1_p_1">[If you downloaded a distfile, you can skip this step.]</p>
+<p id="doc_section_2_2_1_p_2">Run the "setup.sh" script to set up the build. This script runs the "autoreconf" command to generate the "configure" script and other generated files.</p>
+<div id="doc_figure_u.8"></div> <pre>
sh bin/setup.sh
- </pre> <p id="doc_section_1_1_2_1_p_4">Note: We're are currently using autoreconf version 2.69.</p>
+ </pre> <p id="doc_section_2_2_1_p_4">Note: We're are currently using autoreconf version 2.69.</p>
</div>
<div class="content">
-<h4 id="doc_section_1_1_2_2">
+<h3 id="doc_section_2_2_2">
<div class="self-section-number">
-<a href="#doc_section_1_1_2_2">1.1.2.2</a> </div>
+<a href="#doc_section_2_2_2">2.2.2</a> </div>
<a id="running-the-configure-script" href="#running-the-configure-script">Running the "configure" Script</a>
-</h4>
-<p id="doc_section_1_1_2_2_p_1">Configure (and autoconf in general) provides a means of building software in diverse environments. Our configure script supports a set of options that can be used to adjust to your operating environment. Use "configure --help" to view these options.</p>
-<p id="doc_section_1_1_2_2_p_2">We use the "build" directory to keep object files and generated files away from the source tree.</p>
-<p id="doc_section_1_1_2_2_p_3">To run the configure script, change into the "build" directory, and run the "configure" script. Add any required options to the "../configure" command line.</p>
-<div id="doc_figure_u.8"></div> <pre>
+</h3>
+<p id="doc_section_2_2_2_p_1">Configure (and autoconf in general) provides a means of building software in diverse environments. Our configure script supports a set of options that can be used to adjust to your operating environment. Use "configure --help" to view these options.</p>
+<p id="doc_section_2_2_2_p_2">We use the "build" directory to keep object files and generated files away from the source tree.</p>
+<p id="doc_section_2_2_2_p_3">To run the configure script, change into the "build" directory, and run the "configure" script. Add any required options to the "../configure" command line.</p>
+<div id="doc_figure_u.9"></div> <pre>
cd build
../configure
- </pre> <p id="doc_section_1_1_2_2_p_5">Expect to see the "configure" script generate the following error:</p>
-<div id="doc_figure_u.9"></div> <pre>
- /usr/bin/rm: cannot remove `libtoolT': No such file or directory
- </pre> <p id="doc_section_1_1_2_2_p_7">This error is harmless and can be safely ignored.</p>
-<p id="doc_section_1_1_2_2_p_8">By default, libxo installs architecture-independent files, including extension library files, in the /usr/local directories. To specify an installation prefix other than /usr/local for all installation files, include the --prefix=prefix option and specify an alternate location. To install just the extension library files in a different, user-defined location, include the --with-extensions-dir=dir option and specify the location where the extension libraries will live.</p>
+ </pre> <p id="doc_section_2_2_2_p_5">Expect to see the "configure" script generate the following error:</p>
<div id="doc_figure_u.10"></div> <pre>
+ /usr/bin/rm: cannot remove `libtoolT': No such file or directory
+ </pre> <p id="doc_section_2_2_2_p_7">This error is harmless and can be safely ignored.</p>
+<p id="doc_section_2_2_2_p_8">By default, libxo installs architecture-independent files, including extension library files, in the /usr/local directories. To specify an installation prefix other than /usr/local for all installation files, include the --prefix=prefix option and specify an alternate location. To install just the extension library files in a different, user-defined location, include the --with-extensions-dir=dir option and specify the location where the extension libraries will live.</p>
+<div id="doc_figure_u.11"></div> <pre>
cd build
../configure [OPTION]... [VAR=VALUE]...
- </pre> </div>
+ </pre> <p id="doc_section_2_2_2_p_10">Section Contents: </p>
+<ul>
+<li><a href="#running-the-make-command" title='Running the "make" command'>Section 2.2.2.1</a></li>
+<li><a href="#running-the-regression-tests" title="Running the Regression Tests">Section 2.2.2.2</a></li>
+</ul>
<div class="content">
-<h4 id="doc_section_1_1_2_3">
+<h4 id="doc_section_2_2_2_1">
<div class="self-section-number">
-<a href="#doc_section_1_1_2_3">1.1.2.3</a> </div>
+<a href="#doc_section_2_2_2_1">2.2.2.1</a> </div>
<a id="running-the-make-command" href="#running-the-make-command">Running the "make" command</a>
</h4>
-<p id="doc_section_1_1_2_3_p_1">Once the "configure" script is run, build the images using the "make" command:</p>
-<div id="doc_figure_u.11"></div> <pre>
+<p id="doc_section_2_2_2_1_p_1">Once the "configure" script is run, build the images using the "make" command:</p>
+<div id="doc_figure_u.12"></div> <pre>
make
</pre> </div>
<div class="content">
-<h4 id="doc_section_1_1_2_4">
+<h4 id="doc_section_2_2_2_2">
<div class="self-section-number">
-<a href="#doc_section_1_1_2_4">1.1.2.4</a> </div>
+<a href="#doc_section_2_2_2_2">2.2.2.2</a> </div>
<a id="running-the-regression-tests" href="#running-the-regression-tests">Running the Regression Tests</a>
</h4>
-<p id="doc_section_1_1_2_4_p_1">libxo includes a set of regression tests that can be run to ensure the software is working properly. These test are optional, but will help determine if there are any issues running libxo on your machine. To run the regression tests:</p>
-<div id="doc_figure_u.12"></div> <pre>
+<p id="doc_section_2_2_2_2_p_1">libxo includes a set of regression tests that can be run to ensure the software is working properly. These test are optional, but will help determine if there are any issues running libxo on your machine. To run the regression tests:</p>
+<div id="doc_figure_u.13"></div> <pre>
make test
</pre> </div>
+</div>
<div class="content">
-<h4 id="doc_section_1_1_2_5">
+<h3 id="doc_section_2_2_3">
<div class="self-section-number">
-<a href="#doc_section_1_1_2_5">1.1.2.5</a> </div>
+<a href="#doc_section_2_2_3">2.2.3</a> </div>
<a id="installing-libxo" href="#installing-libxo">Installing libxo</a>
-</h4>
-<p id="doc_section_1_1_2_5_p_1">Once the software is built, you'll need to install libxo using the "make install" command. If you are the root user, or the owner of the installation directory, simply issue the command:</p>
-<div id="doc_figure_u.13"></div> <pre>
- make install
- </pre> <p id="doc_section_1_1_2_5_p_3">If you are not the "root" user and are using the "sudo" package, use:</p>
+</h3>
+<p id="doc_section_2_2_3_p_1">Once the software is built, you'll need to install libxo using the "make install" command. If you are the root user, or the owner of the installation directory, simply issue the command:</p>
<div id="doc_figure_u.14"></div> <pre>
- sudo make install
- </pre> <p id="doc_section_1_1_2_5_p_5">Verify the installation by viewing the output of "xo --version":</p>
+ make install
+ </pre> <p id="doc_section_2_2_3_p_3">If you are not the "root" user and are using the "sudo" package, use:</p>
<div id="doc_figure_u.15"></div> <pre>
+ sudo make install
+ </pre> <p id="doc_section_2_2_3_p_5">Verify the installation by viewing the output of "xo --version":</p>
+<div id="doc_figure_u.16"></div> <pre>
% xo --version
libxo version 0.3.5-git-develop
xo version 0.3.5-git-develop
</pre> </div>
</div>
</div>
-</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_2" class="np">
+<h1 id="doc_section_3" class="np">
<div class="self-section-number">
-<a href="#doc_section_2">2_</a> </div>
+<a href="#doc_section_3">3_</a> </div>
<a id="formatting-with-libxo" href="#formatting-with-libxo">Formatting with libxo</a>
</h1>
-<p id="doc_section_2_p_1">Most unix commands emit text output aimed at humans. It is designed to be parsed and understood by a user. Humans are gifted at extracting details and pattern matching in such output. Often programmers need to extract information from this human-oriented output. Programmers use tools like grep, awk, and regular expressions to ferret out the pieces of information they need. Such solutions are fragile and require maintenance when output contents change or evolve, along with testing and validation.</p>
-<p id="doc_section_2_p_2">Modern tool developers favor encoding schemes like XML and JSON, which allow trivial parsing and extraction of data. Such formats are simple, well understood, hierarchical, easily parsed, and often integrate easier with common tools and environments. Changes to content can be done in ways that do not break existing users of the data, which can reduce maintenance costs and increase feature velocity.</p>
-<p id="doc_section_2_p_3">In addition, modern reality means that more output ends up in web browsers than in terminals, making HTML output valuable.</p>
-<p id="doc_section_2_p_4">libxo allows a single set of function calls in source code to generate traditional text output, as well as XML and JSON formatted data. HTML can also be generated; "&lt;div&gt;" elements surround the traditional text output, with attributes that detail how to render the data.</p>
-<p id="doc_section_2_p_5">A single libxo function call in source code is all that's required:</p>
-<div id="doc_figure_u.16"></div> <pre>
+<p id="doc_section_3_p_1">Most unix commands emit text output aimed at humans. It is designed to be parsed and understood by a user. Humans are gifted at extracting details and pattern matching in such output. Often programmers need to extract information from this human-oriented output. Programmers use tools like grep, awk, and regular expressions to ferret out the pieces of information they need. Such solutions are fragile and require maintenance when output contents change or evolve, along with testing and validation.</p>
+<p id="doc_section_3_p_2">Modern tool developers favor encoding schemes like XML and JSON, which allow trivial parsing and extraction of data. Such formats are simple, well understood, hierarchical, easily parsed, and often integrate easier with common tools and environments. Changes to content can be done in ways that do not break existing users of the data, which can reduce maintenance costs and increase feature velocity.</p>
+<p id="doc_section_3_p_3">In addition, modern reality means that more output ends up in web browsers than in terminals, making HTML output valuable.</p>
+<p id="doc_section_3_p_4">libxo allows a single set of function calls in source code to generate traditional text output, as well as XML and JSON formatted data. HTML can also be generated; "&lt;div&gt;" elements surround the traditional text output, with attributes that detail how to render the data.</p>
+<p id="doc_section_3_p_5">A single libxo function call in source code is all that's required:</p>
+<div id="doc_figure_u.17"></div> <pre>
xo_emit("Connecting to {:host}.{:domain}...\n", host, domain);
TEXT:
@@ -22859,64 +22897,63 @@ jQuery(function ($) {
data-xpath="/top/domain"&gt;example.com&lt;/div&gt;
&lt;div class="text"&gt;...&lt;/div&gt;
&lt;/div&gt;
- </pre> <p id="doc_section_2_p_7">Section Contents: </p>
+ </pre> <p id="doc_section_3_p_7">Section Contents: </p>
<ul>
-<li><a href="#encoding-styles" title="Encoding Styles">Section 2.1</a></li>
-<li><a href="#format-strings" title="Format Strings">Section 2.2</a></li>
-<li><a href="#representing-hierarchy" title="Representing Hierarchy">Section 2.3</a></li>
-<li><a href="#command-line-arguments" title="Command-line Arguments">Section 2.4</a></li>
+<li><a href="#encoding-styles" title="Encoding Styles">Section 3.1</a></li>
+<li><a href="#format-strings" title="Format Strings">Section 3.2</a></li>
+<li><a href="#representing-hierarchy" title="Representing Hierarchy">Section 3.3</a></li>
</ul>
<div class="content">
-<h2 id="doc_section_2_1">
+<h2 id="doc_section_3_1">
<div class="self-section-number">
-<a href="#doc_section_2_1">2.1</a> </div>
+<a href="#doc_section_3_1">3.1</a> </div>
<a id="encoding-styles" href="#encoding-styles">Encoding Styles</a>
</h2>
-<p id="doc_section_2_1_p_1">There are four encoding styles supported by libxo:</p>
-<p id="doc_section_2_1_p_2"> </p>
+<p id="doc_section_3_1_p_1">There are four encoding styles supported by libxo:</p>
+<p id="doc_section_3_1_p_2"> </p>
<ul>
<li>TEXT output can be display on a terminal session, allowing compatibility with traditional command line usage.</li>
<li>XML output is suitable for tools like XPath and protocols like NETCONF.</li>
<li>JSON output can be used for RESTful APIs and integration with languages like Javascript and Python.</li>
<li>HTML can be matched with a small CSS file to permit rendering in any HTML5 browser.</li>
</ul>
-<p id="doc_section_2_1_p_3">In general, XML and JSON are suitable for encoding data, while TEXT is suited for terminal output and HTML is suited for display in a web browser (see <a href="#xohtml" title="xohtml">Section 6</a>).</p>
-<p id="doc_section_2_1_p_4">Section Contents: </p>
+<p id="doc_section_3_1_p_3">In general, XML and JSON are suitable for encoding data, while TEXT is suited for terminal output and HTML is suited for display in a web browser (see <a href="#xohtml" title="xohtml">Section 8</a>).</p>
+<p id="doc_section_3_1_p_4">Section Contents: </p>
<ul>
-<li><a href="#text-output" title="Text Output">Section 2.1.1</a></li>
-<li><a href="#xml-output" title="XML Output">Section 2.1.2</a></li>
-<li><a href="#json-output" title="JSON Output">Section 2.1.3</a></li>
-<li><a href="#html-output" title="HTML Output">Section 2.1.4</a></li>
+<li><a href="#text-output" title="Text Output">Section 3.1.1</a></li>
+<li><a href="#xml-output" title="XML Output">Section 3.1.2</a></li>
+<li><a href="#json-output" title="JSON Output">Section 3.1.3</a></li>
+<li><a href="#html-output" title="HTML Output">Section 3.1.4</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_2_1_1">
+<h3 id="doc_section_3_1_1">
<div class="self-section-number">
-<a href="#doc_section_2_1_1">2.1.1</a> </div>
+<a href="#doc_section_3_1_1">3.1.1</a> </div>
<a id="text-output" href="#text-output">Text Output</a>
</h3>
-<p id="doc_section_2_1_1_p_1">Most traditional programs generate text output on standard output, with contents like:</p>
-<div id="doc_figure_u.17"></div> <pre>
+<p id="doc_section_3_1_1_p_1">Most traditional programs generate text output on standard output, with contents like:</p>
+<div id="doc_figure_u.18"></div> <pre>
36 ./src
40 ./bin
90 .
- </pre> <p id="doc_section_2_1_1_p_3">In this example (taken from du source code), the code to generate this data might look like:</p>
-<div id="doc_figure_u.18"></div> <pre>
- printf("%d\t%s\n", num_blocks, path);
- </pre> <p id="doc_section_2_1_1_p_5">Simple, direct, obvious. But it's only making text output. Imagine using a single code path to make TEXT, XML, JSON or HTML, deciding at run time which to generate.</p>
-<p id="doc_section_2_1_1_p_6">libxo expands on the idea of printf format strings to make a single format containing instructions for creating multiple output styles:</p>
+ </pre> <p id="doc_section_3_1_1_p_3">In this example (taken from du source code), the code to generate this data might look like:</p>
<div id="doc_figure_u.19"></div> <pre>
+ printf("%d\t%s\n", num_blocks, path);
+ </pre> <p id="doc_section_3_1_1_p_5">Simple, direct, obvious. But it's only making text output. Imagine using a single code path to make TEXT, XML, JSON or HTML, deciding at run time which to generate.</p>
+<p id="doc_section_3_1_1_p_6">libxo expands on the idea of printf format strings to make a single format containing instructions for creating multiple output styles:</p>
+<div id="doc_figure_u.20"></div> <pre>
xo_emit("{:blocks/%d}\t{:path/%s}\n", num_blocks, path);
- </pre> <p id="doc_section_2_1_1_p_8">This line will generate the same text output as the earlier printf call, but also has enough information to generate XML, JSON, and HTML.</p>
-<p id="doc_section_2_1_1_p_9">The following sections introduce the other formats.</p>
+ </pre> <p id="doc_section_3_1_1_p_8">This line will generate the same text output as the earlier printf call, but also has enough information to generate XML, JSON, and HTML.</p>
+<p id="doc_section_3_1_1_p_9">The following sections introduce the other formats.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_1_2">
+<h3 id="doc_section_3_1_2">
<div class="self-section-number">
-<a href="#doc_section_2_1_2">2.1.2</a> </div>
+<a href="#doc_section_3_1_2">3.1.2</a> </div>
<a id="xml-output" href="#xml-output">XML Output</a>
</h3>
-<p id="doc_section_2_1_2_p_1">XML output consists of a hierarchical set of elements, each encoded with a start tag and an end tag. The element should be named for data value that it is encoding:</p>
-<div id="doc_figure_u.20"></div> <pre>
+<p id="doc_section_3_1_2_p_1">XML output consists of a hierarchical set of elements, each encoded with a start tag and an end tag. The element should be named for data value that it is encoding:</p>
+<div id="doc_figure_u.21"></div> <pre>
&lt;item&gt;
&lt;blocks&gt;36&lt;/blocks&gt;
&lt;path&gt;./src&lt;/path&gt;
@@ -22929,16 +22966,16 @@ jQuery(function ($) {
&lt;blocks&gt;90&lt;/blocks&gt;
&lt;path&gt;.&lt;/path&gt;
&lt;/item&gt;
- </pre> <p id="doc_section_2_1_2_p_3">XML is a W3C standard for encoding data. See w3c.org/TR/xml for additional information.</p>
+ </pre> <p id="doc_section_3_1_2_p_3">XML is a W3C standard for encoding data. See w3c.org/TR/xml for additional information.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_1_3">
+<h3 id="doc_section_3_1_3">
<div class="self-section-number">
-<a href="#doc_section_2_1_3">2.1.3</a> </div>
+<a href="#doc_section_3_1_3">3.1.3</a> </div>
<a id="json-output" href="#json-output">JSON Output</a>
</h3>
-<p id="doc_section_2_1_3_p_1">JSON output consists of a hierarchical set of objects and lists, each encoded with a quoted name, a colon, and a value. If the value is a string, it must be quoted, but numbers are not quoted. Objects are encoded using braces; lists are encoded using square brackets. Data inside objects and lists is separated using commas:</p>
-<div id="doc_figure_u.21"></div> <pre>
+<p id="doc_section_3_1_3_p_1">JSON output consists of a hierarchical set of objects and lists, each encoded with a quoted name, a colon, and a value. If the value is a string, it must be quoted, but numbers are not quoted. Objects are encoded using braces; lists are encoded using square brackets. Data inside objects and lists is separated using commas:</p>
+<div id="doc_figure_u.22"></div> <pre>
items: [
{ "blocks": 36, "path" : "./src" },
{ "blocks": 40, "path" : "./bin" },
@@ -22946,14 +22983,14 @@ jQuery(function ($) {
]
</pre> </div>
<div class="content">
-<h3 id="doc_section_2_1_4">
+<h3 id="doc_section_3_1_4">
<div class="self-section-number">
-<a href="#doc_section_2_1_4">2.1.4</a> </div>
+<a href="#doc_section_3_1_4">3.1.4</a> </div>
<a id="html-output" href="#html-output">HTML Output</a>
</h3>
-<p id="doc_section_2_1_4_p_1">HTML output is designed to allow the output to be rendered in a web browser with minimal effort. Each piece of output data is rendered inside a &lt;div&gt; element, with a class name related to the role of the data. By using a small set of class attribute values, a CSS stylesheet can render the HTML into rich text that mirrors the traditional text content.</p>
-<p id="doc_section_2_1_4_p_2">Additional attributes can be enabled to provide more details about the data, including data type, description, and an XPath location.</p>
-<div id="doc_figure_u.22"></div> <pre>
+<p id="doc_section_3_1_4_p_1">HTML output is designed to allow the output to be rendered in a web browser with minimal effort. Each piece of output data is rendered inside a &lt;div&gt; element, with a class name related to the role of the data. By using a small set of class attribute values, a CSS stylesheet can render the HTML into rich text that mirrors the traditional text content.</p>
+<p id="doc_section_3_1_4_p_2">Additional attributes can be enabled to provide more details about the data, including data type, description, and an XPath location.</p>
+<div id="doc_figure_u.23"></div> <pre>
&lt;div class="line"&gt;
&lt;div class="data" data-tag="blocks"&gt;36&lt;/div&gt;
&lt;div class="padding"&gt; &lt;/div&gt;
@@ -22972,46 +23009,46 @@ jQuery(function ($) {
</pre> </div>
</div>
<div class="content">
-<h2 id="doc_section_2_2">
+<h2 id="doc_section_3_2">
<div class="self-section-number">
-<a href="#doc_section_2_2">2.2</a> </div>
+<a href="#doc_section_3_2">3.2</a> </div>
<a id="format-strings" href="#format-strings">Format Strings</a>
</h2>
-<p id="doc_section_2_2_p_1">libxo uses format strings to control the rendering of data into the various output styles. Each format string contains a set of zero or more field descriptions, which describe independent data fields. Each field description contains a set of modifiers, a content string, and zero, one, or two format descriptors. The modifiers tell libxo what the field is and how to treat it, while the format descriptors are formatting instructions using printf-style format strings, telling libxo how to format the field. The field description is placed inside a set of braces, with a colon (":") after the modifiers and a slash ("/") before each format descriptors. Text may be intermixed with field descriptions within the format string.</p>
-<p id="doc_section_2_2_p_2">The field description is given as follows:</p>
-<div id="doc_figure_u.23"></div> <pre>
+<p id="doc_section_3_2_p_1">libxo uses format strings to control the rendering of data into the various output styles. Each format string contains a set of zero or more field descriptions, which describe independent data fields. Each field description contains a set of modifiers, a content string, and zero, one, or two format descriptors. The modifiers tell libxo what the field is and how to treat it, while the format descriptors are formatting instructions using printf-style format strings, telling libxo how to format the field. The field description is placed inside a set of braces, with a colon (":") after the modifiers and a slash ("/") before each format descriptors. Text may be intermixed with field descriptions within the format string.</p>
+<p id="doc_section_3_2_p_2">The field description is given as follows:</p>
+<div id="doc_figure_u.24"></div> <pre>
'{' [ role | modifier ]* [',' long-names ]* ':' [ content ]
[ '/' field-format [ '/' encoding-format ]] '}'
- </pre> <p id="doc_section_2_2_p_4">The role describes the function of the field, while the modifiers enable optional behaviors. The contents, field-format, and encoding-format are used in varying ways, based on the role. These are described in the following sections.</p>
-<p id="doc_section_2_2_p_5">In the following example, three field descriptors appear. The first is a padding field containing three spaces of padding, the second is a label ("In stock"), and the third is a value field ("in&#8209;stock"). The in-stock field has a "%u" format that will parse the next argument passed to the xo_emit function as an unsigned integer.</p>
-<div id="doc_figure_u.24"></div> <pre>
- xo_emit("{P: }{Lwc:In stock}{:in-stock/%u}\n", 65);
- </pre> <p id="doc_section_2_2_p_7">This single line of code can generate text (" In stock: 65\n"), XML ("&lt;in&#8209;stock&gt;65&lt;/in&#8209;stock&gt;"), JSON ('"in&#8209;stock": 6'), or HTML (too lengthy to be listed here).</p>
-<p id="doc_section_2_2_p_8">While roles and modifiers typically use single character for brevity, there are alternative names for each which allow more verbose formatting strings. These names must be preceded by a comma, and may follow any single-character values:</p>
+ </pre> <p id="doc_section_3_2_p_4">The role describes the function of the field, while the modifiers enable optional behaviors. The contents, field-format, and encoding-format are used in varying ways, based on the role. These are described in the following sections.</p>
+<p id="doc_section_3_2_p_5">In the following example, three field descriptors appear. The first is a padding field containing three spaces of padding, the second is a label ("In stock"), and the third is a value field ("in&#8209;stock"). The in-stock field has a "%u" format that will parse the next argument passed to the xo_emit function as an unsigned integer.</p>
<div id="doc_figure_u.25"></div> <pre>
+ xo_emit("{P: }{Lwc:In stock}{:in-stock/%u}\n", 65);
+ </pre> <p id="doc_section_3_2_p_7">This single line of code can generate text (" In stock: 65\n"), XML ("&lt;in&#8209;stock&gt;65&lt;/in&#8209;stock&gt;"), JSON ('"in&#8209;stock": 6'), or HTML (too lengthy to be listed here).</p>
+<p id="doc_section_3_2_p_8">While roles and modifiers typically use single character for brevity, there are alternative names for each which allow more verbose formatting strings. These names must be preceded by a comma, and may follow any single-character values:</p>
+<div id="doc_figure_u.26"></div> <pre>
xo_emit("{L,white,colon:In stock}{,key:in-stock/%u}\n", 65);
- </pre> <p id="doc_section_2_2_p_10">Section Contents: </p>
+ </pre> <p id="doc_section_3_2_p_10">Section Contents: </p>
<ul>
-<li><a href="#field-roles" title="Field Roles">Section 2.2.1</a></li>
-<li><a href="#field-modifiers" title="Field Modifiers">Section 2.2.2</a></li>
-<li><a href="#field-formatting" title="Field Formatting">Section 2.2.3</a></li>
-<li><a href="#utf-8-and-locale-strings" title="UTF-8 and Locale Strings">Section 2.2.4</a></li>
-<li><a href="#characters-outside-of-field-definitions" title="Characters Outside of Field Definitions">Section 2.2.5</a></li>
-<li><a href="#m-is-supported" title='"%m" Is Supported'>Section 2.2.6</a></li>
-<li><a href="#n-is-not-supported" title='"%n" Is Not Supported'>Section 2.2.7</a></li>
-<li><a href="#the-encoding-format-eformat" title="The Encoding Format (eformat)">Section 2.2.8</a></li>
-<li><a href="#content-strings" title="Content Strings">Section 2.2.9</a></li>
-<li><a href="#printf-like" title="Argument Validation">Section 2.2.10</a></li>
-<li><a href="#retain" title="Retaining Parsed Format Information">Section 2.2.11</a></li>
-<li><a href="#example" title="Example">Section 2.2.12</a></li>
+<li><a href="#field-roles" title="Field Roles">Section 3.2.1</a></li>
+<li><a href="#field-modifiers" title="Field Modifiers">Section 3.2.2</a></li>
+<li><a href="#field-formatting" title="Field Formatting">Section 3.2.3</a></li>
+<li><a href="#utf-8-and-locale-strings" title="UTF-8 and Locale Strings">Section 3.2.4</a></li>
+<li><a href="#characters-outside-of-field-definitions" title="Characters Outside of Field Definitions">Section 3.2.5</a></li>
+<li><a href="#m-is-supported" title='"%m" Is Supported'>Section 3.2.6</a></li>
+<li><a href="#n-is-not-supported" title='"%n" Is Not Supported'>Section 3.2.7</a></li>
+<li><a href="#the-encoding-format-eformat" title="The Encoding Format (eformat)">Section 3.2.8</a></li>
+<li><a href="#content-strings" title="Content Strings">Section 3.2.9</a></li>
+<li><a href="#printf-like" title="Argument Validation">Section 3.2.10</a></li>
+<li><a href="#retain" title="Retaining Parsed Format Information">Section 3.2.11</a></li>
+<li><a href="#example" title="Example">Section 3.2.12</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_2_2_1">
+<h3 id="doc_section_3_2_1">
<div class="self-section-number">
-<a href="#doc_section_2_2_1">2.2.1</a> </div>
+<a href="#doc_section_3_2_1">3.2.1</a> </div>
<a id="field-roles" href="#field-roles">Field Roles</a>
</h3>
-<p id="doc_section_2_2_1_p_1">Field roles are optional, and indicate the role and formatting of the content. The roles are listed below; only one role is permitted:</p>
+<p id="doc_section_3_2_1_p_1">Field roles are optional, and indicate the role and formatting of the content. The roles are listed below; only one role is permitted:</p>
<div id="doc_table_u.1"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">R</th>
@@ -23086,57 +23123,57 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<div id="doc_figure_u.26"></div> <pre>
+<div id="doc_figure_u.27"></div> <pre>
EXAMPLE:
xo_emit("{L:Free}{D::}{P: }{:free/%u} {U:Blocks}\n",
free_blocks);
- </pre> <p id="doc_section_2_2_1_p_3">When a role is not provided, the "value" role is used as the default.</p>
-<p id="doc_section_2_2_1_p_4">Roles and modifiers can also use more verbose names, when preceded by a comma:</p>
-<div id="doc_figure_u.27"></div> <pre>
+ </pre> <p id="doc_section_3_2_1_p_3">When a role is not provided, the "value" role is used as the default.</p>
+<p id="doc_section_3_2_1_p_4">Roles and modifiers can also use more verbose names, when preceded by a comma:</p>
+<div id="doc_figure_u.28"></div> <pre>
EXAMPLE:
xo_emit("{,label:Free}{,decoration::}{,padding: }"
"{,value:free/%u} {,units:Blocks}\n",
free_blocks);
- </pre> <p id="doc_section_2_2_1_p_6">Section Contents: </p>
+ </pre> <p id="doc_section_3_2_1_p_6">Section Contents: </p>
<ul>
-<li><a href="#color-role" title="The Color Role ({C:})">Section 2.2.1.1</a></li>
-<li><a href="#the-decoration-role-d" title="The Decoration Role ({D:})">Section 2.2.1.2</a></li>
-<li><a href="#gettext-role" title="The Gettext Role ({G:})">Section 2.2.1.3</a></li>
-<li><a href="#the-label-role-l" title="The Label Role ({L:})">Section 2.2.1.4</a></li>
-<li><a href="#the-note-role-n" title="The Note Role ({N:})">Section 2.2.1.5</a></li>
-<li><a href="#padding-role" title="The Padding Role ({P:})">Section 2.2.1.6</a></li>
-<li><a href="#the-title-role-t" title="The Title Role ({T:})">Section 2.2.1.7</a></li>
-<li><a href="#the-units-role-u" title="The Units Role ({U:})">Section 2.2.1.8</a></li>
-<li><a href="#the-value-role-v-and-" title="The Value Role ({V:} and {:})">Section 2.2.1.9</a></li>
-<li><a href="#anchor-role" title="The Anchor Roles ({[:} and {]:})">Section 2.2.1.10</a></li>
+<li><a href="#color-role" title="The Color Role ({C:})">Section 3.2.1.1</a></li>
+<li><a href="#the-decoration-role-d" title="The Decoration Role ({D:})">Section 3.2.1.2</a></li>
+<li><a href="#gettext-role" title="The Gettext Role ({G:})">Section 3.2.1.3</a></li>
+<li><a href="#the-label-role-l" title="The Label Role ({L:})">Section 3.2.1.4</a></li>
+<li><a href="#the-note-role-n" title="The Note Role ({N:})">Section 3.2.1.5</a></li>
+<li><a href="#padding-role" title="The Padding Role ({P:})">Section 3.2.1.6</a></li>
+<li><a href="#the-title-role-t" title="The Title Role ({T:})">Section 3.2.1.7</a></li>
+<li><a href="#the-units-role-u" title="The Units Role ({U:})">Section 3.2.1.8</a></li>
+<li><a href="#the-value-role-v-and-" title="The Value Role ({V:} and {:})">Section 3.2.1.9</a></li>
+<li><a href="#anchor-role" title="The Anchor Roles ({[:} and {]:})">Section 3.2.1.10</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_2_2_1_1">
+<h4 id="doc_section_3_2_1_1">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_1">2.2.1.1</a> </div>
+<a href="#doc_section_3_2_1_1">3.2.1.1</a> </div>
<a id="color-role" href="#color-role">The Color Role ({C:})</a>
</h4>
-<p id="doc_section_2_2_1_1_p_1">Colors and effects control how text values are displayed; they are used for display styles (TEXT and HTML).</p>
-<div id="doc_figure_u.28"></div> <pre>
- xo_emit("{C:bold}{:value}{C:no-bold}\n", value);
- </pre> <p id="doc_section_2_2_1_1_p_3">Colors and effects remain in effect until modified by other "C"-role fields.</p>
+<p id="doc_section_3_2_1_1_p_1">Colors and effects control how text values are displayed; they are used for display styles (TEXT and HTML).</p>
<div id="doc_figure_u.29"></div> <pre>
- xo_emit("{C:bold}{C:inverse}both{C:no-bold}only inverse\n");
- </pre> <p id="doc_section_2_2_1_1_p_5">If the content is empty, the "reset" action is performed.</p>
+ xo_emit("{C:bold}{:value}{C:no-bold}\n", value);
+ </pre> <p id="doc_section_3_2_1_1_p_3">Colors and effects remain in effect until modified by other "C"-role fields.</p>
<div id="doc_figure_u.30"></div> <pre>
- xo_emit("{C:both,underline}{:value}{C:}\n", value);
- </pre> <p id="doc_section_2_2_1_1_p_7">The content should be a comma-separated list of zero or more colors or display effects.</p>
+ xo_emit("{C:bold}{C:inverse}both{C:no-bold}only inverse\n");
+ </pre> <p id="doc_section_3_2_1_1_p_5">If the content is empty, the "reset" action is performed.</p>
<div id="doc_figure_u.31"></div> <pre>
- xo_emit("{C:bold,inverse}Ugly{C:no-bold,no-inverse}\n");
- </pre> <p id="doc_section_2_2_1_1_p_9">The color content can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
+ xo_emit("{C:both,underline}{:value}{C:}\n", value);
+ </pre> <p id="doc_section_3_2_1_1_p_7">The content should be a comma-separated list of zero or more colors or display effects.</p>
<div id="doc_figure_u.32"></div> <pre>
+ xo_emit("{C:bold,inverse}Ugly{C:no-bold,no-inverse}\n");
+ </pre> <p id="doc_section_3_2_1_1_p_9">The color content can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
+<div id="doc_figure_u.33"></div> <pre>
xo_emit("{C:/%s%s}{:value}{C:}", need_bold ? "bold" : "",
need_underline ? "underline" : "", value);
- </pre> <p id="doc_section_2_2_1_1_p_11">Color names are prefixed with either "fg&#8209;" or "bg&#8209;" to change the foreground and background colors, respectively.</p>
-<div id="doc_figure_u.33"></div> <pre>
+ </pre> <p id="doc_section_3_2_1_1_p_11">Color names are prefixed with either "fg&#8209;" or "bg&#8209;" to change the foreground and background colors, respectively.</p>
+<div id="doc_figure_u.34"></div> <pre>
xo_emit("{C:/fg-%s,bg-%s}{Lwc:Cost}{:cost/%u}{C:reset}\n",
fg_color, bg_color, cost);
- </pre> <p id="doc_section_2_2_1_1_p_13">The following table lists the supported effects:</p>
+ </pre> <p id="doc_section_3_2_1_1_p_13">The following table lists the supported effects:</p>
<div id="doc_table_u.2"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Name</th>
@@ -23185,7 +23222,7 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_2_1_1_p_14">The following color names are supported:</p>
+<p id="doc_section_3_2_1_1_p_14">The following color names are supported:</p>
<div id="doc_table_u.3"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Name</th>
@@ -23230,135 +23267,136 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
+<p id="doc_section_3_2_1_1_p_15">When using colors, the developer should remember that users will change the foreground and background colors of terminal session according to their own tastes, so assuming that "blue" looks nice is never safe, and is a constant annoyance to your dear author. In addition, a significant percentage of users (1 in 12) will be color blind. Depending on color to convey critical information is not a good idea. Color should enhance output, but should not be used as the sole means of encoding information.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_1_2">
+<h4 id="doc_section_3_2_1_2">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_2">2.2.1.2</a> </div>
+<a href="#doc_section_3_2_1_2">3.2.1.2</a> </div>
<a id="the-decoration-role-d" href="#the-decoration-role-d">The Decoration Role ({D:})</a>
</h4>
-<p id="doc_section_2_2_1_2_p_1">Decorations are typically punctuation marks such as colons, semi-colons, and commas used to decorate the text and make it simpler for human readers. By marking these distinctly, HTML usage scenarios can use CSS to direct their display parameters.</p>
-<div id="doc_figure_u.34"></div> <pre>
+<p id="doc_section_3_2_1_2_p_1">Decorations are typically punctuation marks such as colons, semi-colons, and commas used to decorate the text and make it simpler for human readers. By marking these distinctly, HTML usage scenarios can use CSS to direct their display parameters.</p>
+<div id="doc_figure_u.35"></div> <pre>
xo_emit("{D:((}{:name}{D:))}\n", name);
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_3">
+<h4 id="doc_section_3_2_1_3">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_3">2.2.1.3</a> </div>
+<a href="#doc_section_3_2_1_3">3.2.1.3</a> </div>
<a id="gettext-role" href="#gettext-role">The Gettext Role ({G:})</a>
</h4>
-<p id="doc_section_2_2_1_3_p_1">libxo supports internationalization (i18n) through its use of gettext(3). Use the "{G:}" role to request that the remaining part of the format string, following the "{G:}" field, be handled using gettext().</p>
-<p id="doc_section_2_2_1_3_p_2">Since gettext() uses the string as the key into the message catalog, libxo uses a simplified version of the format string that removes unimportant field formatting and modifiers, stopping minor formatting changes from impacting the expensive translation process. A developer change such as changing "/%06d" to "/%08d" should not force hand inspection of all .po files.</p>
-<p id="doc_section_2_2_1_3_p_3">The simplified version can be generated for a single message using the "xopo -s &lt;text&gt;" command, or an entire .pot can be translated using the "xopo -f &lt;input&gt; -o &lt;output&gt;" command.</p>
-<div id="doc_figure_u.35"></div> <pre>
- xo_emit("{G:}Invalid token\n");
- </pre> <p id="doc_section_2_2_1_3_p_5">The {G:} role allows a domain name to be set. gettext calls will continue to use that domain name until the current format string processing is complete, enabling a library function to emit strings using it's own catalog. The domain name can be either static as the content of the field, or a format can be used to get the domain name from the arguments.</p>
+<p id="doc_section_3_2_1_3_p_1">libxo supports internationalization (i18n) through its use of gettext(3). Use the "{G:}" role to request that the remaining part of the format string, following the "{G:}" field, be handled using gettext().</p>
+<p id="doc_section_3_2_1_3_p_2">Since gettext() uses the string as the key into the message catalog, libxo uses a simplified version of the format string that removes unimportant field formatting and modifiers, stopping minor formatting changes from impacting the expensive translation process. A developer change such as changing "/%06d" to "/%08d" should not force hand inspection of all .po files.</p>
+<p id="doc_section_3_2_1_3_p_3">The simplified version can be generated for a single message using the "xopo -s &lt;text&gt;" command, or an entire .pot can be translated using the "xopo -f &lt;input&gt; -o &lt;output&gt;" command.</p>
<div id="doc_figure_u.36"></div> <pre>
+ xo_emit("{G:}Invalid token\n");
+ </pre> <p id="doc_section_3_2_1_3_p_5">The {G:} role allows a domain name to be set. gettext calls will continue to use that domain name until the current format string processing is complete, enabling a library function to emit strings using it's own catalog. The domain name can be either static as the content of the field, or a format can be used to get the domain name from the arguments.</p>
+<div id="doc_figure_u.37"></div> <pre>
xo_emit("{G:libc}Service unavailable in restricted mode\n");
- </pre> <p id="doc_section_2_2_1_3_p_7">See <a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 9.5</a> for additional details.</p>
+ </pre> <p id="doc_section_3_2_1_3_p_7">See <a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 11.5</a> for additional details.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_1_4">
+<h4 id="doc_section_3_2_1_4">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_4">2.2.1.4</a> </div>
+<a href="#doc_section_3_2_1_4">3.2.1.4</a> </div>
<a id="the-label-role-l" href="#the-label-role-l">The Label Role ({L:})</a>
</h4>
-<p id="doc_section_2_2_1_4_p_1">Labels are text that appears before a value.</p>
-<div id="doc_figure_u.37"></div> <pre>
+<p id="doc_section_3_2_1_4_p_1">Labels are text that appears before a value.</p>
+<div id="doc_figure_u.38"></div> <pre>
xo_emit("{Lwc:Cost}{:cost/%u}\n", cost);
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_5">
+<h4 id="doc_section_3_2_1_5">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_5">2.2.1.5</a> </div>
+<a href="#doc_section_3_2_1_5">3.2.1.5</a> </div>
<a id="the-note-role-n" href="#the-note-role-n">The Note Role ({N:})</a>
</h4>
-<p id="doc_section_2_2_1_5_p_1">Notes are text that appears after a value.</p>
-<div id="doc_figure_u.38"></div> <pre>
+<p id="doc_section_3_2_1_5_p_1">Notes are text that appears after a value.</p>
+<div id="doc_figure_u.39"></div> <pre>
xo_emit("{:cost/%u} {N:per year}\n", cost);
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_6">
+<h4 id="doc_section_3_2_1_6">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_6">2.2.1.6</a> </div>
+<a href="#doc_section_3_2_1_6">3.2.1.6</a> </div>
<a id="padding-role" href="#padding-role">The Padding Role ({P:})</a>
</h4>
-<p id="doc_section_2_2_1_6_p_1">Padding represents whitespace used before and between fields.</p>
-<p id="doc_section_2_2_1_6_p_2">The padding content can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
-<div id="doc_figure_u.39"></div> <pre>
+<p id="doc_section_3_2_1_6_p_1">Padding represents whitespace used before and between fields.</p>
+<p id="doc_section_3_2_1_6_p_2">The padding content can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
+<div id="doc_figure_u.40"></div> <pre>
xo_emit("{P: }{Lwc:Cost}{:cost/%u}\n", cost);
xo_emit("{P:/%30s}{Lwc:Cost}{:cost/%u}\n", "", cost);
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_7">
+<h4 id="doc_section_3_2_1_7">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_7">2.2.1.7</a> </div>
+<a href="#doc_section_3_2_1_7">3.2.1.7</a> </div>
<a id="the-title-role-t" href="#the-title-role-t">The Title Role ({T:})</a>
</h4>
-<p id="doc_section_2_2_1_7_p_1">Title are heading or column headers that are meant to be displayed to the user. The title can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
-<div id="doc_figure_u.40"></div> <pre>
+<p id="doc_section_3_2_1_7_p_1">Title are heading or column headers that are meant to be displayed to the user. The title can be either static, when placed directly within the field descriptor, or a printf-style format descriptor can be used, if preceded by a slash ("/"):</p>
+<div id="doc_figure_u.41"></div> <pre>
xo_emit("{T:Interface Statistics}\n");
xo_emit("{T:/%20.20s}{T:/%6.6s}\n", "Item Name", "Cost");
- </pre> <p id="doc_section_2_2_1_7_p_3">Title fields have an extra convenience feature; if both content and format are specified, instead of looking to the argument list for a value, the content is used, allowing a mixture of format and content within the field descriptor:</p>
-<div id="doc_figure_u.41"></div> <pre>
+ </pre> <p id="doc_section_3_2_1_7_p_3">Title fields have an extra convenience feature; if both content and format are specified, instead of looking to the argument list for a value, the content is used, allowing a mixture of format and content within the field descriptor:</p>
+<div id="doc_figure_u.42"></div> <pre>
xo_emit("{T:Name/%20s}{T:Count/%6s}\n");
- </pre> <p id="doc_section_2_2_1_7_p_5">Since the incoming argument is a string, the format must be "%s" or something suitable.</p>
+ </pre> <p id="doc_section_3_2_1_7_p_5">Since the incoming argument is a string, the format must be "%s" or something suitable.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_1_8">
+<h4 id="doc_section_3_2_1_8">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_8">2.2.1.8</a> </div>
+<a href="#doc_section_3_2_1_8">3.2.1.8</a> </div>
<a id="the-units-role-u" href="#the-units-role-u">The Units Role ({U:})</a>
</h4>
-<p id="doc_section_2_2_1_8_p_1">Units are the dimension by which values are measured, such as degrees, miles, bytes, and decibels. The units field carries this information for the previous value field.</p>
-<div id="doc_figure_u.42"></div> <pre>
- xo_emit("{Lwc:Distance}{:distance/%u}{Uw:miles}\n", miles);
- </pre> <p id="doc_section_2_2_1_8_p_3">Note that the sense of the 'w' modifier is reversed for units; a blank is added before the contents, rather than after it.</p>
-<p id="doc_section_2_2_1_8_p_4">When the XOF_UNITS flag is set, units are rendered in XML as the "units" attribute:</p>
+<p id="doc_section_3_2_1_8_p_1">Units are the dimension by which values are measured, such as degrees, miles, bytes, and decibels. The units field carries this information for the previous value field.</p>
<div id="doc_figure_u.43"></div> <pre>
- &lt;distance units="miles"&gt;50&lt;/distance&gt;
- </pre> <p id="doc_section_2_2_1_8_p_6">Units can also be rendered in HTML as the "data&#8209;units" attribute:</p>
+ xo_emit("{Lwc:Distance}{:distance/%u}{Uw:miles}\n", miles);
+ </pre> <p id="doc_section_3_2_1_8_p_3">Note that the sense of the 'w' modifier is reversed for units; a blank is added before the contents, rather than after it.</p>
+<p id="doc_section_3_2_1_8_p_4">When the XOF_UNITS flag is set, units are rendered in XML as the "units" attribute:</p>
<div id="doc_figure_u.44"></div> <pre>
+ &lt;distance units="miles"&gt;50&lt;/distance&gt;
+ </pre> <p id="doc_section_3_2_1_8_p_6">Units can also be rendered in HTML as the "data&#8209;units" attribute:</p>
+<div id="doc_figure_u.45"></div> <pre>
&lt;div class="data" data-tag="distance" data-units="miles"
data-xpath="/top/data/distance"&gt;50&lt;/div&gt;
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_9">
+<h4 id="doc_section_3_2_1_9">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_9">2.2.1.9</a> </div>
+<a href="#doc_section_3_2_1_9">3.2.1.9</a> </div>
<a id="the-value-role-v-and-" href="#the-value-role-v-and-">The Value Role ({V:} and {:})</a>
</h4>
-<p id="doc_section_2_2_1_9_p_1">The value role is used to represent the a data value that is interesting for the non-display output styles (XML and JSON). Value is the default role; if no other role designation is given, the field is a value. The field name must appear within the field descriptor, followed by one or two format descriptors. The first format descriptor is used for display styles (TEXT and HTML), while the second one is used for encoding styles (XML and JSON). If no second format is given, the encoding format defaults to the first format, with any minimum width removed. If no first format is given, both format descriptors default to "%s".</p>
-<div id="doc_figure_u.45"></div> <pre>
+<p id="doc_section_3_2_1_9_p_1">The value role is used to represent the a data value that is interesting for the non-display output styles (XML and JSON). Value is the default role; if no other role designation is given, the field is a value. The field name must appear within the field descriptor, followed by one or two format descriptors. The first format descriptor is used for display styles (TEXT and HTML), while the second one is used for encoding styles (XML and JSON). If no second format is given, the encoding format defaults to the first format, with any minimum width removed. If no first format is given, both format descriptors default to "%s".</p>
+<div id="doc_figure_u.46"></div> <pre>
xo_emit("{:length/%02u}x{:width/%02u}x{:height/%02u}\n",
length, width, height);
xo_emit("{:author} wrote \"{:poem}\" in {:year/%4d}\n,
author, poem, year);
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_1_10">
+<h4 id="doc_section_3_2_1_10">
<div class="self-section-number">
-<a href="#doc_section_2_2_1_10">2.2.1.10</a> </div>
+<a href="#doc_section_3_2_1_10">3.2.1.10</a> </div>
<a id="anchor-role" href="#anchor-role">The Anchor Roles ({[:} and {]:})</a>
</h4>
-<p id="doc_section_2_2_1_10_p_1">The anchor roles allow a set of strings by be padded as a group, but still be visible to xo_emit as distinct fields. Either the start or stop anchor can give a field width and it can be either directly in the descriptor or passed as an argument. Any fields between the start and stop anchor are padded to meet the minimum width given.</p>
-<p id="doc_section_2_2_1_10_p_2">To give a width directly, encode it as the content of the anchor tag:</p>
-<div id="doc_figure_u.46"></div> <pre>
- xo_emit("({[:10}{:min/%d}/{:max/%d}{]:})\n", min, max);
- </pre> <p id="doc_section_2_2_1_10_p_4">To pass a width as an argument, use "%d" as the format, which must appear after the "/". Note that only "%d" is supported for widths. Using any other value could ruin your day.</p>
+<p id="doc_section_3_2_1_10_p_1">The anchor roles allow a set of strings by be padded as a group, but still be visible to xo_emit as distinct fields. Either the start or stop anchor can give a field width and it can be either directly in the descriptor or passed as an argument. Any fields between the start and stop anchor are padded to meet the minimum width given.</p>
+<p id="doc_section_3_2_1_10_p_2">To give a width directly, encode it as the content of the anchor tag:</p>
<div id="doc_figure_u.47"></div> <pre>
+ xo_emit("({[:10}{:min/%d}/{:max/%d}{]:})\n", min, max);
+ </pre> <p id="doc_section_3_2_1_10_p_4">To pass a width as an argument, use "%d" as the format, which must appear after the "/". Note that only "%d" is supported for widths. Using any other value could ruin your day.</p>
+<div id="doc_figure_u.48"></div> <pre>
xo_emit("({[:/%d}{:min/%d}/{:max/%d}{]:})\n", width, min, max);
- </pre> <p id="doc_section_2_2_1_10_p_6">If the width is negative, padding will be added on the right, suitable for left justification. Otherwise the padding will be added to the left of the fields between the start and stop anchors, suitable for right justification. If the width is zero, nothing happens. If the number of columns of output between the start and stop anchors is less than the absolute value of the given width, nothing happens.</p>
-<p id="doc_section_2_2_1_10_p_7">Widths over 8k are considered probable errors and not supported. If XOF_WARN is set, a warning will be generated.</p>
+ </pre> <p id="doc_section_3_2_1_10_p_6">If the width is negative, padding will be added on the right, suitable for left justification. Otherwise the padding will be added to the left of the fields between the start and stop anchors, suitable for right justification. If the width is zero, nothing happens. If the number of columns of output between the start and stop anchors is less than the absolute value of the given width, nothing happens.</p>
+<p id="doc_section_3_2_1_10_p_7">Widths over 8k are considered probable errors and not supported. If XOF_WARN is set, a warning will be generated.</p>
</div>
</div>
<div class="content">
-<h3 id="doc_section_2_2_2">
+<h3 id="doc_section_3_2_2">
<div class="self-section-number">
-<a href="#doc_section_2_2_2">2.2.2</a> </div>
+<a href="#doc_section_3_2_2">3.2.2</a> </div>
<a id="field-modifiers" href="#field-modifiers">Field Modifiers</a>
</h3>
-<p id="doc_section_2_2_2_p_1">Field modifiers are flags which modify the way content emitted for particular output styles:</p>
+<p id="doc_section_3_2_2_p_1">Field modifiers are flags which modify the way content emitted for particular output styles:</p>
<div id="doc_table_u.4"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">M</th>
@@ -23448,31 +23486,31 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_2_2_p_2">Roles and modifiers can also use more verbose names, when preceded by a comma. For example, the modifier string "Lwc" (or "L,white,colon") means the field has a label role (text that describes the next field) and should be followed by a colon ('c') and a space ('w'). The modifier string "Vkq" (or ":key,quote") means the field has a value role (the default role), that it is a key for the current instance, and that the value should be quoted when encoded for JSON.</p>
-<p id="doc_section_2_2_2_p_3">Section Contents: </p>
+<p id="doc_section_3_2_2_p_2">Roles and modifiers can also use more verbose names, when preceded by a comma. For example, the modifier string "Lwc" (or "L,white,colon") means the field has a label role (text that describes the next field) and should be followed by a colon ('c') and a space ('w'). The modifier string "Vkq" (or ":key,quote") means the field has a value role (the default role), that it is a key for the current instance, and that the value should be quoted when encoded for JSON.</p>
+<p id="doc_section_3_2_2_p_3">Section Contents: </p>
<ul>
-<li><a href="#the-argument-modifier-a" title="The Argument Modifier ({a:})">Section 2.2.2.1</a></li>
-<li><a href="#the-colon-modifier-c" title="The Colon Modifier ({c:})">Section 2.2.2.2</a></li>
-<li><a href="#the-display-modifier-d" title="The Display Modifier ({d:})">Section 2.2.2.3</a></li>
-<li><a href="#e-modifier" title="The Encoding Modifier ({e:})">Section 2.2.2.4</a></li>
-<li><a href="#gettext-modifier" title="The Gettext Modifier ({g:})">Section 2.2.2.5</a></li>
-<li><a href="#the-humanize-modifier-h" title="The Humanize Modifier ({h:})">Section 2.2.2.6</a></li>
-<li><a href="#the-key-modifier-k" title="The Key Modifier ({k:})">Section 2.2.2.7</a></li>
-<li><a href="#the-leaf-list-modifier-l" title="The Leaf-List Modifier ({l:})">Section 2.2.2.8</a></li>
-<li><a href="#the-no-quotes-modifier-n" title="The No-Quotes Modifier ({n:})">Section 2.2.2.9</a></li>
-<li><a href="#plural-modifier" title="The Plural Modifier ({p:})">Section 2.2.2.10</a></li>
-<li><a href="#the-quotes-modifier-q" title="The Quotes Modifier ({q:})">Section 2.2.2.11</a></li>
-<li><a href="#the-trim-modifier-t" title="The Trim Modifier ({t:})">Section 2.2.2.12</a></li>
-<li><a href="#the-white-space-modifier-w" title="The White Space Modifier ({w:})">Section 2.2.2.13</a></li>
+<li><a href="#the-argument-modifier-a" title="The Argument Modifier ({a:})">Section 3.2.2.1</a></li>
+<li><a href="#the-colon-modifier-c" title="The Colon Modifier ({c:})">Section 3.2.2.2</a></li>
+<li><a href="#the-display-modifier-d" title="The Display Modifier ({d:})">Section 3.2.2.3</a></li>
+<li><a href="#e-modifier" title="The Encoding Modifier ({e:})">Section 3.2.2.4</a></li>
+<li><a href="#gettext-modifier" title="The Gettext Modifier ({g:})">Section 3.2.2.5</a></li>
+<li><a href="#the-humanize-modifier-h" title="The Humanize Modifier ({h:})">Section 3.2.2.6</a></li>
+<li><a href="#the-key-modifier-k" title="The Key Modifier ({k:})">Section 3.2.2.7</a></li>
+<li><a href="#the-leaf-list-modifier-l" title="The Leaf-List Modifier ({l:})">Section 3.2.2.8</a></li>
+<li><a href="#the-no-quotes-modifier-n" title="The No-Quotes Modifier ({n:})">Section 3.2.2.9</a></li>
+<li><a href="#plural-modifier" title="The Plural Modifier ({p:})">Section 3.2.2.10</a></li>
+<li><a href="#the-quotes-modifier-q" title="The Quotes Modifier ({q:})">Section 3.2.2.11</a></li>
+<li><a href="#the-trim-modifier-t" title="The Trim Modifier ({t:})">Section 3.2.2.12</a></li>
+<li><a href="#the-white-space-modifier-w" title="The White Space Modifier ({w:})">Section 3.2.2.13</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_2_2_2_1">
+<h4 id="doc_section_3_2_2_1">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_1">2.2.2.1</a> </div>
+<a href="#doc_section_3_2_2_1">3.2.2.1</a> </div>
<a id="the-argument-modifier-a" href="#the-argument-modifier-a">The Argument Modifier ({a:})</a>
</h4>
-<p id="doc_section_2_2_2_1_p_1">The argument modifier indicates that the content of the field descriptor will be placed as a UTF-8 string (const char *) argument within the xo_emit parameters.</p>
-<div id="doc_figure_u.48"></div> <pre>
+<p id="doc_section_3_2_2_1_p_1">The argument modifier indicates that the content of the field descriptor will be placed as a UTF-8 string (const char *) argument within the xo_emit parameters.</p>
+<div id="doc_figure_u.49"></div> <pre>
EXAMPLE:
xo_emit("{La:} {a:}\n", "Label text", "label", "value");
TEXT:
@@ -23481,77 +23519,77 @@ jQuery(function ($) {
"label": "value"
XML:
&lt;label&gt;value&lt;/label&gt;
- </pre> <p id="doc_section_2_2_2_1_p_3">The argument modifier allows field names for value fields to be passed on the stack, avoiding the need to build a field descriptor using snprintf. For many field roles, the argument modifier is not needed, since those roles have specific mechanisms for arguments, such as "{C:fg&#8209;%s}".</p>
+ </pre> <p id="doc_section_3_2_2_1_p_3">The argument modifier allows field names for value fields to be passed on the stack, avoiding the need to build a field descriptor using snprintf. For many field roles, the argument modifier is not needed, since those roles have specific mechanisms for arguments, such as "{C:fg&#8209;%s}".</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_2">
+<h4 id="doc_section_3_2_2_2">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_2">2.2.2.2</a> </div>
+<a href="#doc_section_3_2_2_2">3.2.2.2</a> </div>
<a id="the-colon-modifier-c" href="#the-colon-modifier-c">The Colon Modifier ({c:})</a>
</h4>
-<p id="doc_section_2_2_2_2_p_1">The colon modifier appends a single colon to the data value:</p>
-<div id="doc_figure_u.49"></div> <pre>
+<p id="doc_section_3_2_2_2_p_1">The colon modifier appends a single colon to the data value:</p>
+<div id="doc_figure_u.50"></div> <pre>
EXAMPLE:
xo_emit("{Lc:Name}{:name}\n", "phil");
TEXT:
Name:phil
- </pre> <p id="doc_section_2_2_2_2_p_3">The colon modifier is only used for the TEXT and HTML output styles. It is commonly combined with the space modifier ('{w:}'). It is purely a convenience feature.</p>
+ </pre> <p id="doc_section_3_2_2_2_p_3">The colon modifier is only used for the TEXT and HTML output styles. It is commonly combined with the space modifier ('{w:}'). It is purely a convenience feature.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_3">
+<h4 id="doc_section_3_2_2_3">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_3">2.2.2.3</a> </div>
+<a href="#doc_section_3_2_2_3">3.2.2.3</a> </div>
<a id="the-display-modifier-d" href="#the-display-modifier-d">The Display Modifier ({d:})</a>
</h4>
-<p id="doc_section_2_2_2_3_p_1">The display modifier indicated the field should only be generated for the display output styles, TEXT and HTML.</p>
-<div id="doc_figure_u.50"></div> <pre>
+<p id="doc_section_3_2_2_3_p_1">The display modifier indicated the field should only be generated for the display output styles, TEXT and HTML.</p>
+<div id="doc_figure_u.51"></div> <pre>
EXAMPLE:
xo_emit("{Lcw:Name}{d:name} {:id/%d}\n", "phil", 1);
TEXT:
Name: phil 1
XML:
&lt;id&gt;1&lt;/id&gt;
- </pre> <p id="doc_section_2_2_2_3_p_3">The display modifier is the opposite of the encoding modifier, and they are often used to give to distinct views of the underlying data.</p>
+ </pre> <p id="doc_section_3_2_2_3_p_3">The display modifier is the opposite of the encoding modifier, and they are often used to give to distinct views of the underlying data.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_4">
+<h4 id="doc_section_3_2_2_4">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_4">2.2.2.4</a> </div>
+<a href="#doc_section_3_2_2_4">3.2.2.4</a> </div>
<a id="e-modifier" href="#e-modifier">The Encoding Modifier ({e:})</a>
</h4>
-<p id="doc_section_2_2_2_4_p_1">The display modifier indicated the field should only be generated for the display output styles, TEXT and HTML.</p>
-<div id="doc_figure_u.51"></div> <pre>
+<p id="doc_section_3_2_2_4_p_1">The display modifier indicated the field should only be generated for the display output styles, TEXT and HTML.</p>
+<div id="doc_figure_u.52"></div> <pre>
EXAMPLE:
xo_emit("{Lcw:Name}{:name} {e:id/%d}\n", "phil", 1);
TEXT:
Name: phil
XML:
&lt;name&gt;phil&lt;/name&gt;&lt;id&gt;1&lt;/id&gt;
- </pre> <p id="doc_section_2_2_2_4_p_3">The encoding modifier is the opposite of the display modifier, and they are often used to give to distinct views of the underlying data.</p>
+ </pre> <p id="doc_section_3_2_2_4_p_3">The encoding modifier is the opposite of the display modifier, and they are often used to give to distinct views of the underlying data.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_5">
+<h4 id="doc_section_3_2_2_5">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_5">2.2.2.5</a> </div>
+<a href="#doc_section_3_2_2_5">3.2.2.5</a> </div>
<a id="gettext-modifier" href="#gettext-modifier">The Gettext Modifier ({g:})</a>
</h4>
-<p id="doc_section_2_2_2_5_p_1">The gettext modifier is used to translate individual fields using the gettext domain (typically set using the "{G:}" role) and current language settings. Once libxo renders the field value, it is passed to gettext(3), where it is used as a key to find the native language translation.</p>
-<p id="doc_section_2_2_2_5_p_2">In the following example, the strings "State" and "full" are passed to gettext() to find locale-based translated strings.</p>
-<div id="doc_figure_u.52"></div> <pre>
+<p id="doc_section_3_2_2_5_p_1">The gettext modifier is used to translate individual fields using the gettext domain (typically set using the "{G:}" role) and current language settings. Once libxo renders the field value, it is passed to gettext(3), where it is used as a key to find the native language translation.</p>
+<p id="doc_section_3_2_2_5_p_2">In the following example, the strings "State" and "full" are passed to gettext() to find locale-based translated strings.</p>
+<div id="doc_figure_u.53"></div> <pre>
xo_emit("{Lgwc:State}{g:state}\n", "full");
- </pre> <p id="doc_section_2_2_2_5_p_4">See <a href="#gettext-role" title="The Gettext Role ({G:})">Section 2.2.1.3</a>, <a href="#plural-modifier" title="The Plural Modifier ({p:})">Section 2.2.2.10</a>, and <a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 9.5</a> for additional details.</p>
+ </pre> <p id="doc_section_3_2_2_5_p_4">See <a href="#gettext-role" title="The Gettext Role ({G:})">Section 3.2.1.3</a>, <a href="#plural-modifier" title="The Plural Modifier ({p:})">Section 3.2.2.10</a>, and <a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 11.5</a> for additional details.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_6">
+<h4 id="doc_section_3_2_2_6">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_6">2.2.2.6</a> </div>
+<a href="#doc_section_3_2_2_6">3.2.2.6</a> </div>
<a id="the-humanize-modifier-h" href="#the-humanize-modifier-h">The Humanize Modifier ({h:})</a>
</h4>
-<p id="doc_section_2_2_2_6_p_1">The humanize modifier is used to render large numbers as in a human-readable format. While numbers like "44470272" are completely readable to computers and savants, humans will generally find "44M" more meaningful.</p>
-<p id="doc_section_2_2_2_6_p_2">"hn" can be used as an alias for "humanize".</p>
-<p id="doc_section_2_2_2_6_p_3">The humanize modifier only affects display styles (TEXT and HMTL). The "no&#8209;humanize" option (See <a href="#LIBXO_OPTIONS" title="LIBXO_OPTIONS">Section 3.4.6</a>) will block the function of the humanize modifier.</p>
-<p id="doc_section_2_2_2_6_p_4">There are a number of modifiers that affect details of humanization. These are only available in as full names, not single characters. The "hn&#8209;space" modifier places a space between the number and any multiplier symbol, such as "M" or "K" (ex: "44 K"). The "hn&#8209;decimal" modifier will add a decimal point and a single tenths digit when the number is less than 10 (ex: "4.4K"). The "hn&#8209;1000" modifier will use 1000 as divisor instead of 1024, following the JEDEC-standard instead of the more natural binary powers-of-two tradition.</p>
-<div id="doc_figure_u.53"></div> <pre>
+<p id="doc_section_3_2_2_6_p_1">The humanize modifier is used to render large numbers as in a human-readable format. While numbers like "44470272" are completely readable to computers and savants, humans will generally find "44M" more meaningful.</p>
+<p id="doc_section_3_2_2_6_p_2">"hn" can be used as an alias for "humanize".</p>
+<p id="doc_section_3_2_2_6_p_3">The humanize modifier only affects display styles (TEXT and HMTL). The "no&#8209;humanize" option (See <a href="#options" title="Command-line Arguments">Section 4</a>) will block the function of the humanize modifier.</p>
+<p id="doc_section_3_2_2_6_p_4">There are a number of modifiers that affect details of humanization. These are only available in as full names, not single characters. The "hn&#8209;space" modifier places a space between the number and any multiplier symbol, such as "M" or "K" (ex: "44 K"). The "hn&#8209;decimal" modifier will add a decimal point and a single tenths digit when the number is less than 10 (ex: "4.4K"). The "hn&#8209;1000" modifier will use 1000 as divisor instead of 1024, following the JEDEC-standard instead of the more natural binary powers-of-two tradition.</p>
+<div id="doc_figure_u.54"></div> <pre>
EXAMPLE:
xo_emit("{h:input/%u}, {h,hn-space:output/%u}, "
"{h,hn-decimal:errors/%u}, {h,hn-1000:capacity/%u}, "
@@ -23559,19 +23597,19 @@ jQuery(function ($) {
input, output, errors, capacity, remaining);
TEXT:
21, 57 K, 96M, 44M, 1.2G
- </pre> <p id="doc_section_2_2_2_6_p_6">In the HTML style, the original numeric value is rendered in the "data&#8209;number" attribute on the &lt;div&gt; element:</p>
-<div id="doc_figure_u.54"></div> <pre>
+ </pre> <p id="doc_section_3_2_2_6_p_6">In the HTML style, the original numeric value is rendered in the "data&#8209;number" attribute on the &lt;div&gt; element:</p>
+<div id="doc_figure_u.55"></div> <pre>
&lt;div class="data" data-tag="errors"
data-number="100663296"&gt;96M&lt;/div&gt;
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_2_7">
+<h4 id="doc_section_3_2_2_7">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_7">2.2.2.7</a> </div>
+<a href="#doc_section_3_2_2_7">3.2.2.7</a> </div>
<a id="the-key-modifier-k" href="#the-key-modifier-k">The Key Modifier ({k:})</a>
</h4>
-<p id="doc_section_2_2_2_7_p_1">The key modifier is used to indicate that a particular field helps uniquely identify an instance of list data.</p>
-<div id="doc_figure_u.55"></div> <pre>
+<p id="doc_section_3_2_2_7_p_1">The key modifier is used to indicate that a particular field helps uniquely identify an instance of list data.</p>
+<div id="doc_figure_u.56"></div> <pre>
EXAMPLE:
xo_open_list("user");
for (i = 0; i &lt; num_users; i++) {
@@ -23581,16 +23619,16 @@ jQuery(function ($) {
xo_close_instance("user");
}
xo_close_list("user");
- </pre> <p id="doc_section_2_2_2_7_p_3">Currently the key modifier is only used when generating XPath value for the HTML output style when XOF_XPATH is set, but other uses are likely in the near future.</p>
+ </pre> <p id="doc_section_3_2_2_7_p_3">Currently the key modifier is only used when generating XPath value for the HTML output style when XOF_XPATH is set, but other uses are likely in the near future.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_8">
+<h4 id="doc_section_3_2_2_8">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_8">2.2.2.8</a> </div>
+<a href="#doc_section_3_2_2_8">3.2.2.8</a> </div>
<a id="the-leaf-list-modifier-l" href="#the-leaf-list-modifier-l">The Leaf-List Modifier ({l:})</a>
</h4>
-<p id="doc_section_2_2_2_8_p_1">The leaf-list modifier is used to distinguish lists where each instance consists of only a single value. In XML, these are rendered as single elements, where JSON renders them as arrays.</p>
-<div id="doc_figure_u.56"></div> <pre>
+<p id="doc_section_3_2_2_8_p_1">The leaf-list modifier is used to distinguish lists where each instance consists of only a single value. In XML, these are rendered as single elements, where JSON renders them as arrays.</p>
+<div id="doc_figure_u.57"></div> <pre>
EXAMPLE:
for (i = 0; i &lt; num_users; i++) {
xo_emit("Member {l:user}\n", user[i].u_name);
@@ -23600,16 +23638,16 @@ jQuery(function ($) {
&lt;user&gt;pallavi&lt;/user&gt;
JSON:
"user": [ "phil", "pallavi" ]
- </pre> <p id="doc_section_2_2_2_8_p_3">The name of the field must match the name of the leaf list.</p>
+ </pre> <p id="doc_section_3_2_2_8_p_3">The name of the field must match the name of the leaf list.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_9">
+<h4 id="doc_section_3_2_2_9">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_9">2.2.2.9</a> </div>
+<a href="#doc_section_3_2_2_9">3.2.2.9</a> </div>
<a id="the-no-quotes-modifier-n" href="#the-no-quotes-modifier-n">The No-Quotes Modifier ({n:})</a>
</h4>
-<p id="doc_section_2_2_2_9_p_1">The no-quotes modifier (and its twin, the 'quotes' modifier) affect the quoting of values in the JSON output style. JSON uses quotes for string value, but no quotes for numeric, boolean, and null data. xo_emit applies a simple heuristic to determine whether quotes are needed, but often this needs to be controlled by the caller.</p>
-<div id="doc_figure_u.57"></div> <pre>
+<p id="doc_section_3_2_2_9_p_1">The no-quotes modifier (and its twin, the 'quotes' modifier) affect the quoting of values in the JSON output style. JSON uses quotes for string value, but no quotes for numeric, boolean, and null data. xo_emit applies a simple heuristic to determine whether quotes are needed, but often this needs to be controlled by the caller.</p>
+<div id="doc_figure_u.58"></div> <pre>
EXAMPLE:
const char *bool = is_true ? "true" : "false";
xo_emit("{n:fancy/%s}", bool);
@@ -23617,77 +23655,77 @@ jQuery(function ($) {
"fancy": true
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_2_10">
+<h4 id="doc_section_3_2_2_10">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_10">2.2.2.10</a> </div>
+<a href="#doc_section_3_2_2_10">3.2.2.10</a> </div>
<a id="plural-modifier" href="#plural-modifier">The Plural Modifier ({p:})</a>
</h4>
-<p id="doc_section_2_2_2_10_p_1">The plural modifier selects the appropriate plural form of an expression based on the most recent number emitted and the current language settings. The contents of the field should be the singular and plural English values, separated by a comma:</p>
-<div id="doc_figure_u.58"></div> <pre>
+<p id="doc_section_3_2_2_10_p_1">The plural modifier selects the appropriate plural form of an expression based on the most recent number emitted and the current language settings. The contents of the field should be the singular and plural English values, separated by a comma:</p>
+<div id="doc_figure_u.59"></div> <pre>
xo_emit("{:bytes} {Ngp:byte,bytes}\n", bytes);
- </pre> <p id="doc_section_2_2_2_10_p_3">The plural modifier is meant to work with the gettext modifier ({g:}) but can work independently. See <a href="#gettext-modifier" title="The Gettext Modifier ({g:})">Section 2.2.2.5</a>.</p>
-<p id="doc_section_2_2_2_10_p_4">When used without the gettext modifier or when the message does not appear in the message catalog, the first token is chosen when the last numeric value is equal to 1; otherwise the second value is used, mimicking the simple pluralization rules of English.</p>
-<p id="doc_section_2_2_2_10_p_5">When used with the gettext modifier, the ngettext(3) function is called to handle the heavy lifting, using the message catalog to convert the singular and plural forms into the native language.</p>
+ </pre> <p id="doc_section_3_2_2_10_p_3">The plural modifier is meant to work with the gettext modifier ({g:}) but can work independently. See <a href="#gettext-modifier" title="The Gettext Modifier ({g:})">Section 3.2.2.5</a>.</p>
+<p id="doc_section_3_2_2_10_p_4">When used without the gettext modifier or when the message does not appear in the message catalog, the first token is chosen when the last numeric value is equal to 1; otherwise the second value is used, mimicking the simple pluralization rules of English.</p>
+<p id="doc_section_3_2_2_10_p_5">When used with the gettext modifier, the ngettext(3) function is called to handle the heavy lifting, using the message catalog to convert the singular and plural forms into the native language.</p>
</div>
<div class="content">
-<h4 id="doc_section_2_2_2_11">
+<h4 id="doc_section_3_2_2_11">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_11">2.2.2.11</a> </div>
+<a href="#doc_section_3_2_2_11">3.2.2.11</a> </div>
<a id="the-quotes-modifier-q" href="#the-quotes-modifier-q">The Quotes Modifier ({q:})</a>
</h4>
-<p id="doc_section_2_2_2_11_p_1">The quotes modifier (and its twin, the 'no&#8209;quotes' modifier) affect the quoting of values in the JSON output style. JSON uses quotes for string value, but no quotes for numeric, boolean, and null data. xo_emit applies a simple heuristic to determine whether quotes are needed, but often this needs to be controlled by the caller.</p>
-<div id="doc_figure_u.59"></div> <pre>
+<p id="doc_section_3_2_2_11_p_1">The quotes modifier (and its twin, the 'no&#8209;quotes' modifier) affect the quoting of values in the JSON output style. JSON uses quotes for string value, but no quotes for numeric, boolean, and null data. xo_emit applies a simple heuristic to determine whether quotes are needed, but often this needs to be controlled by the caller.</p>
+<div id="doc_figure_u.60"></div> <pre>
EXAMPLE:
xo_emit("{q:time/%d}", 2014);
JSON:
"year": "2014"
- </pre> <p id="doc_section_2_2_2_11_p_3">The heuristic is based on the format; if the format uses any of the following conversion specifiers, then no quotes are used:</p>
-<div id="doc_figure_u.60"></div> <pre>
+ </pre> <p id="doc_section_3_2_2_11_p_3">The heuristic is based on the format; if the format uses any of the following conversion specifiers, then no quotes are used:</p>
+<div id="doc_figure_u.61"></div> <pre>
d i o u x X D O U e E f F g G a A c C p
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_2_12">
+<h4 id="doc_section_3_2_2_12">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_12">2.2.2.12</a> </div>
+<a href="#doc_section_3_2_2_12">3.2.2.12</a> </div>
<a id="the-trim-modifier-t" href="#the-trim-modifier-t">The Trim Modifier ({t:})</a>
</h4>
-<p id="doc_section_2_2_2_12_p_1">The trim modifier removes any leading or trailing whitespace from the value.</p>
-<div id="doc_figure_u.61"></div> <pre>
+<p id="doc_section_3_2_2_12_p_1">The trim modifier removes any leading or trailing whitespace from the value.</p>
+<div id="doc_figure_u.62"></div> <pre>
EXAMPLE:
xo_emit("{t:description}", " some input ");
JSON:
"description": "some input"
</pre> </div>
<div class="content">
-<h4 id="doc_section_2_2_2_13">
+<h4 id="doc_section_3_2_2_13">
<div class="self-section-number">
-<a href="#doc_section_2_2_2_13">2.2.2.13</a> </div>
+<a href="#doc_section_3_2_2_13">3.2.2.13</a> </div>
<a id="the-white-space-modifier-w" href="#the-white-space-modifier-w">The White Space Modifier ({w:})</a>
</h4>
-<p id="doc_section_2_2_2_13_p_1">The white space modifier appends a single space to the data value:</p>
-<div id="doc_figure_u.62"></div> <pre>
+<p id="doc_section_3_2_2_13_p_1">The white space modifier appends a single space to the data value:</p>
+<div id="doc_figure_u.63"></div> <pre>
EXAMPLE:
xo_emit("{Lw:Name}{:name}\n", "phil");
TEXT:
Name phil
- </pre> <p id="doc_section_2_2_2_13_p_3">The white space modifier is only used for the TEXT and HTML output styles. It is commonly combined with the colon modifier ('{c:}'). It is purely a convenience feature.</p>
-<p id="doc_section_2_2_2_13_p_4">Note that the sense of the 'w' modifier is reversed for the units role ({Uw:}); a blank is added before the contents, rather than after it.</p>
+ </pre> <p id="doc_section_3_2_2_13_p_3">The white space modifier is only used for the TEXT and HTML output styles. It is commonly combined with the colon modifier ('{c:}'). It is purely a convenience feature.</p>
+<p id="doc_section_3_2_2_13_p_4">Note that the sense of the 'w' modifier is reversed for the units role ({Uw:}); a blank is added before the contents, rather than after it.</p>
</div>
</div>
<div class="content">
-<h3 id="doc_section_2_2_3">
+<h3 id="doc_section_3_2_3">
<div class="self-section-number">
-<a href="#doc_section_2_2_3">2.2.3</a> </div>
+<a href="#doc_section_3_2_3">3.2.3</a> </div>
<a id="field-formatting" href="#field-formatting">Field Formatting</a>
</h3>
-<p id="doc_section_2_2_3_p_1">The field format is similar to the format string for printf(3). Its use varies based on the role of the field, but generally is used to format the field's contents.</p>
-<p id="doc_section_2_2_3_p_2">If the format string is not provided for a value field, it defaults to "%s".</p>
-<p id="doc_section_2_2_3_p_3">Note a field definition can contain zero or more printf-style 'directives', which are sequences that start with a '%' and end with one of following characters: "diouxXDOUeEfFgGaAcCsSp". Each directive is matched by one of more arguments to the xo_emit function.</p>
-<p id="doc_section_2_2_3_p_4">The format string has the form:</p>
-<div id="doc_figure_u.63"></div> <pre>
+<p id="doc_section_3_2_3_p_1">The field format is similar to the format string for printf(3). Its use varies based on the role of the field, but generally is used to format the field's contents.</p>
+<p id="doc_section_3_2_3_p_2">If the format string is not provided for a value field, it defaults to "%s".</p>
+<p id="doc_section_3_2_3_p_3">Note a field definition can contain zero or more printf-style 'directives', which are sequences that start with a '%' and end with one of following characters: "diouxXDOUeEfFgGaAcCsSp". Each directive is matched by one of more arguments to the xo_emit function.</p>
+<p id="doc_section_3_2_3_p_4">The format string has the form:</p>
+<div id="doc_figure_u.64"></div> <pre>
'%' format-modifier * format-character
- </pre> <p id="doc_section_2_2_3_p_6">The format- modifier can be:</p>
-<p id="doc_section_2_2_3_p_7"> </p>
+ </pre> <p id="doc_section_3_2_3_p_6">The format- modifier can be:</p>
+<p id="doc_section_3_2_3_p_7"> </p>
<ul>
<li>a '#' character, indicating the output value should be prefixed with '0x', typically to indicate a base 16 (hex) value.</li>
<li>a minus sign ('&#8209;'), indicating the output value should be padded on the right instead of the left.</li>
@@ -23702,8 +23740,8 @@ jQuery(function ($) {
<li>a ' ' character, indicating a space should be emitted before positive numbers.</li>
<li>a '+' character, indicating sign should emitted before any number.</li>
</ul>
-<p id="doc_section_2_2_3_p_8">Note that 'q', 'D', 'O', and 'U' are considered deprecated and will be removed eventually.</p>
-<p id="doc_section_2_2_3_p_9">The format character is described in the following table:</p>
+<p id="doc_section_3_2_3_p_8">Note that 'q', 'D', 'O', and 'U' are considered deprecated and will be removed eventually.</p>
+<p id="doc_section_3_2_3_p_9">The format character is described in the following table:</p>
<div id="doc_table_u.5"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Ltr</th>
@@ -23823,7 +23861,7 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_2_3_p_10">The 'h' and 'l' modifiers affect the size and treatment of the argument:</p>
+<p id="doc_section_3_2_3_p_10">The 'h' and 'l' modifiers affect the size and treatment of the argument:</p>
<div id="doc_table_u.6"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Mod</th>
@@ -23875,17 +23913,17 @@ jQuery(function ($) {
</table></div>
</div>
<div class="content">
-<h3 id="doc_section_2_2_4">
+<h3 id="doc_section_3_2_4">
<div class="self-section-number">
-<a href="#doc_section_2_2_4">2.2.4</a> </div>
+<a href="#doc_section_3_2_4">3.2.4</a> </div>
<a id="utf-8-and-locale-strings" href="#utf-8-and-locale-strings">UTF-8 and Locale Strings</a>
</h3>
-<p id="doc_section_2_2_4_p_1">For strings, the 'h' and 'l' modifiers affect the interpretation of the bytes pointed to argument. The default '%s' string is a 'char *' pointer to a string encoded as UTF-8. Since UTF-8 is compatible with ASCII data, a normal 7-bit ASCII string can be used. '%ls' expects a 'wchar_t *' pointer to a wide-character string, encoded as a 32-bit Unicode values. '%hs' expects a 'char *' pointer to a multi-byte string encoded with the current locale, as given by the LC_CTYPE, LANG, or LC_ALL environment varibles. The first of this list of variables is used and if none of the variables are set, the locale defaults to "UTF&#8209;8".</p>
-<p id="doc_section_2_2_4_p_2">libxo will convert these arguments as needed to either UTF-8 (for XML, JSON, and HTML styles) or locale-based strings for display in text style.</p>
-<div id="doc_figure_u.64"></div> <pre>
+<p id="doc_section_3_2_4_p_1">For strings, the 'h' and 'l' modifiers affect the interpretation of the bytes pointed to argument. The default '%s' string is a 'char *' pointer to a string encoded as UTF-8. Since UTF-8 is compatible with ASCII data, a normal 7-bit ASCII string can be used. '%ls' expects a 'wchar_t *' pointer to a wide-character string, encoded as a 32-bit Unicode values. '%hs' expects a 'char *' pointer to a multi-byte string encoded with the current locale, as given by the LC_CTYPE, LANG, or LC_ALL environment varibles. The first of this list of variables is used and if none of the variables are set, the locale defaults to "UTF&#8209;8".</p>
+<p id="doc_section_3_2_4_p_2">libxo will convert these arguments as needed to either UTF-8 (for XML, JSON, and HTML styles) or locale-based strings for display in text style.</p>
+<div id="doc_figure_u.65"></div> <pre>
xo_emit("All strings are utf-8 content {:tag/%ls}",
L"except for wide strings");
- </pre> <p id="doc_section_2_2_4_p_4">"%S" is equivalent to "%ls".</p>
+ </pre> <p id="doc_section_3_2_4_p_4">"%S" is equivalent to "%ls".</p>
<div id="doc_table_u.7"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Format</th>
@@ -23915,8 +23953,8 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_2_4_p_5">For example, a function is passed a locale-base name, a hat size, and a time value. The hat size is formatted in a UTF-8 (ASCII) string, and the time value is formatted into a wchar_t string.</p>
-<div id="doc_figure_u.65"></div> <pre>
+<p id="doc_section_3_2_4_p_5">For example, a function is passed a locale-base name, a hat size, and a time value. The hat size is formatted in a UTF-8 (ASCII) string, and the time value is formatted into a wchar_t string.</p>
+<div id="doc_figure_u.66"></div> <pre>
void print_order (const char *name, int size,
struct tm *timep) {
char buf[32];
@@ -23935,20 +23973,20 @@ jQuery(function ($) {
xo_emit("It was ordered on {:order-time/%ls}.\n",
when);
}
- </pre> <p id="doc_section_2_2_4_p_7">It is important to note that xo_emit will perform the conversion required to make appropriate output. Text style output uses the current locale (as described above), while XML, JSON, and HTML use UTF-8.</p>
-<p id="doc_section_2_2_4_p_8">UTF-8 and locale-encoded strings can use multiple bytes to encode one column of data. The traditional "precision'" (aka "max&#8209;width") value for "%s" printf formatting becomes overloaded since it specifies both the number of bytes that can be safely referenced and the maximum number of columns to emit. xo_emit uses the precision as the former, and adds a third value for specifying the maximum number of columns.</p>
-<p id="doc_section_2_2_4_p_9">In this example, the name field is printed with a minimum of 3 columns and a maximum of 6. Up to ten bytes of data at the location given by 'name' are in used in filling those columns.</p>
-<div id="doc_figure_u.66"></div> <pre>
+ </pre> <p id="doc_section_3_2_4_p_7">It is important to note that xo_emit will perform the conversion required to make appropriate output. Text style output uses the current locale (as described above), while XML, JSON, and HTML use UTF-8.</p>
+<p id="doc_section_3_2_4_p_8">UTF-8 and locale-encoded strings can use multiple bytes to encode one column of data. The traditional "precision'" (aka "max&#8209;width") value for "%s" printf formatting becomes overloaded since it specifies both the number of bytes that can be safely referenced and the maximum number of columns to emit. xo_emit uses the precision as the former, and adds a third value for specifying the maximum number of columns.</p>
+<p id="doc_section_3_2_4_p_9">In this example, the name field is printed with a minimum of 3 columns and a maximum of 6. Up to ten bytes of data at the location given by 'name' are in used in filling those columns.</p>
+<div id="doc_figure_u.67"></div> <pre>
xo_emit("{:name/%3.10.6s}", name);
</pre> </div>
<div class="content">
-<h3 id="doc_section_2_2_5">
+<h3 id="doc_section_3_2_5">
<div class="self-section-number">
-<a href="#doc_section_2_2_5">2.2.5</a> </div>
+<a href="#doc_section_3_2_5">3.2.5</a> </div>
<a id="characters-outside-of-field-definitions" href="#characters-outside-of-field-definitions">Characters Outside of Field Definitions</a>
</h3>
-<p id="doc_section_2_2_5_p_1">Characters in the format string that are not part of a field definition are copied to the output for the TEXT style, and are ignored for the JSON and XML styles. For HTML, these characters are placed in a &lt;div&gt; with class "text".</p>
-<div id="doc_figure_u.67"></div> <pre>
+<p id="doc_section_3_2_5_p_1">Characters in the format string that are not part of a field definition are copied to the output for the TEXT style, and are ignored for the JSON and XML styles. For HTML, these characters are placed in a &lt;div&gt; with class "text".</p>
+<div id="doc_figure_u.68"></div> <pre>
EXAMPLE:
xo_emit("The hat is {:size/%s}.\n", size_val);
TEXT:
@@ -23963,51 +24001,51 @@ jQuery(function ($) {
&lt;div class="text"&gt;.&lt;/div&gt;
</pre> </div>
<div class="content">
-<h3 id="doc_section_2_2_6">
+<h3 id="doc_section_3_2_6">
<div class="self-section-number">
-<a href="#doc_section_2_2_6">2.2.6</a> </div>
+<a href="#doc_section_3_2_6">3.2.6</a> </div>
<a id="m-is-supported" href="#m-is-supported">"%m" Is Supported</a>
</h3>
-<p id="doc_section_2_2_6_p_1">libxo supports the '%m' directive, which formats the error message associated with the current value of "errno". It is the equivalent of "%s" with the argument strerror(errno).</p>
-<div id="doc_figure_u.68"></div> <pre>
+<p id="doc_section_3_2_6_p_1">libxo supports the '%m' directive, which formats the error message associated with the current value of "errno". It is the equivalent of "%s" with the argument strerror(errno).</p>
+<div id="doc_figure_u.69"></div> <pre>
xo_emit("{:filename} cannot be opened: {:error/%m}", filename);
xo_emit("{:filename} cannot be opened: {:error/%s}",
filename, strerror(errno));
</pre> </div>
<div class="content">
-<h3 id="doc_section_2_2_7">
+<h3 id="doc_section_3_2_7">
<div class="self-section-number">
-<a href="#doc_section_2_2_7">2.2.7</a> </div>
+<a href="#doc_section_3_2_7">3.2.7</a> </div>
<a id="n-is-not-supported" href="#n-is-not-supported">"%n" Is Not Supported</a>
</h3>
-<p id="doc_section_2_2_7_p_1">libxo does not support the '%n' directive. It's a bad idea and we just don't do it.</p>
+<p id="doc_section_3_2_7_p_1">libxo does not support the '%n' directive. It's a bad idea and we just don't do it.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_2_8">
+<h3 id="doc_section_3_2_8">
<div class="self-section-number">
-<a href="#doc_section_2_2_8">2.2.8</a> </div>
+<a href="#doc_section_3_2_8">3.2.8</a> </div>
<a id="the-encoding-format-eformat" href="#the-encoding-format-eformat">The Encoding Format (eformat)</a>
</h3>
-<p id="doc_section_2_2_8_p_1">The "eformat" string is the format string used when encoding the field for JSON and XML. If not provided, it defaults to the primary format with any minimum width removed. If the primary is not given, both default to "%s".</p>
+<p id="doc_section_3_2_8_p_1">The "eformat" string is the format string used when encoding the field for JSON and XML. If not provided, it defaults to the primary format with any minimum width removed. If the primary is not given, both default to "%s".</p>
</div>
<div class="content">
-<h3 id="doc_section_2_2_9">
+<h3 id="doc_section_3_2_9">
<div class="self-section-number">
-<a href="#doc_section_2_2_9">2.2.9</a> </div>
+<a href="#doc_section_3_2_9">3.2.9</a> </div>
<a id="content-strings" href="#content-strings">Content Strings</a>
</h3>
-<p id="doc_section_2_2_9_p_1">For padding and labels, the content string is considered the content, unless a format is given.</p>
+<p id="doc_section_3_2_9_p_1">For padding and labels, the content string is considered the content, unless a format is given.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_2_10">
+<h3 id="doc_section_3_2_10">
<div class="self-section-number">
-<a href="#doc_section_2_2_10">2.2.10</a> </div>
+<a href="#doc_section_3_2_10">3.2.10</a> </div>
<a id="printf-like" href="#printf-like">Argument Validation</a>
</h3>
-<p id="doc_section_2_2_10_p_1">Many compilers and tool chains support validation of printf-like arguments. When the format string fails to match the argument list, a warning is generated. This is a valuable feature and while the formatting strings for libxo differ considerably from printf, many of these checks can still provide build-time protection against bugs.</p>
-<p id="doc_section_2_2_10_p_2">libxo provide variants of functions that provide this ability, if the "&#8209;&#8209;enable&#8209;printflike" option is passed to the "configure" script. These functions use the "_p" suffix, like "xo_emit_p()", xo_emit_hp()", etc.</p>
-<p id="doc_section_2_2_10_p_3">The following are features of libxo formatting strings that are incompatible with printf-like testing:</p>
-<p id="doc_section_2_2_10_p_4"> </p>
+<p id="doc_section_3_2_10_p_1">Many compilers and tool chains support validation of printf-like arguments. When the format string fails to match the argument list, a warning is generated. This is a valuable feature and while the formatting strings for libxo differ considerably from printf, many of these checks can still provide build-time protection against bugs.</p>
+<p id="doc_section_3_2_10_p_2">libxo provide variants of functions that provide this ability, if the "&#8209;&#8209;enable&#8209;printflike" option is passed to the "configure" script. These functions use the "_p" suffix, like "xo_emit_p()", xo_emit_hp()", etc.</p>
+<p id="doc_section_3_2_10_p_3">The following are features of libxo formatting strings that are incompatible with printf-like testing:</p>
+<p id="doc_section_3_2_10_p_4"> </p>
<ul>
<li>implicit formats, where "{:tag}" has an implicit "%s";</li>
<li>the "max" parameter for strings, where "{:tag/%4.10.6s}" means up to ten bytes of data can be inspected to fill a minimum of 4 columns and a maximum of 6;</li>
@@ -24015,7 +24053,7 @@ jQuery(function ($) {
<li>the "l" and "h" modifiers for strings, where "{:tag/%hs}" means locale-based string and "{:tag/%ls}" means a wide character string;</li>
<li>distinct encoding formats, where "{:tag/#%s/%s}" means the display styles (text and HTML) will use "#%s" where other styles use "%s";</li>
</ul>
-<p id="doc_section_2_2_10_p_5">If none of these features are in use by your code, then using the "_p" variants might be wise.</p>
+<p id="doc_section_3_2_10_p_5">If none of these features are in use by your code, then using the "_p" variants might be wise.</p>
<div id="doc_table_u.8"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Function</th>
@@ -24070,19 +24108,19 @@ jQuery(function ($) {
</table></div>
</div>
<div class="content">
-<h3 id="doc_section_2_2_11">
+<h3 id="doc_section_3_2_11">
<div class="self-section-number">
-<a href="#doc_section_2_2_11">2.2.11</a> </div>
+<a href="#doc_section_3_2_11">3.2.11</a> </div>
<a id="retain" href="#retain">Retaining Parsed Format Information</a>
</h3>
-<p id="doc_section_2_2_11_p_1">libxo can retain the parsed internal information related to the given format string, allowing subsequent xo_emit calls, the retained information is used, avoiding repetitive parsing of the format string.</p>
-<div id="doc_figure_u.69"></div> <pre>
+<p id="doc_section_3_2_11_p_1">libxo can retain the parsed internal information related to the given format string, allowing subsequent xo_emit calls, the retained information is used, avoiding repetitive parsing of the format string.</p>
+<div id="doc_figure_u.70"></div> <pre>
SYNTAX:
int xo_emit_f(xo_emit_flags_t flags, const char fmt, ...);
EXAMPLE:
xo_emit_f(XOEF_RETAIN, "{:some/%02d}{:thing/%-6s}{:fancy}\n",
some, thing, fancy);
- </pre> <p id="doc_section_2_2_11_p_3">To retain parsed format information, use the XOEF_RETAIN flag to the xo_emit_f() function. A complete set of xo_emit_f functions exist to match all the xo_emit function signatures (with handles, varadic argument, and printf-like flags):</p>
+ </pre> <p id="doc_section_3_2_11_p_3">To retain parsed format information, use the XOEF_RETAIN flag to the xo_emit_f() function. A complete set of xo_emit_f functions exist to match all the xo_emit function signatures (with handles, varadic argument, and printf-like flags):</p>
<div id="doc_table_u.9"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Function</th>
@@ -24115,29 +24153,29 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_2_11_p_4">The format string must be immutable across multiple calls to xo_emit_f(), since the library retains the string. Typically this is done by using static constant strings, such as string literals. If the string is not immutable, the XOEF_RETAIN flag must not be used.</p>
-<p id="doc_section_2_2_11_p_5">The functions xo_retain_clear() and xo_retain_clear_all() release internal information on either a single format string or all format strings, respectively. Neither is required, but the library will retain this information until it is cleared or the process exits.</p>
-<div id="doc_figure_u.70"></div> <pre>
+<p id="doc_section_3_2_11_p_4">The format string must be immutable across multiple calls to xo_emit_f(), since the library retains the string. Typically this is done by using static constant strings, such as string literals. If the string is not immutable, the XOEF_RETAIN flag must not be used.</p>
+<p id="doc_section_3_2_11_p_5">The functions xo_retain_clear() and xo_retain_clear_all() release internal information on either a single format string or all format strings, respectively. Neither is required, but the library will retain this information until it is cleared or the process exits.</p>
+<div id="doc_figure_u.71"></div> <pre>
const char *fmt = "{:name} {:count/%d}\n";
for (i = 0; i &lt; 1000; i++) {
xo_open_instance("item");
xo_emit_f(XOEF_RETAIN, fmt, name[i], count[i]);
}
xo_retain_clear(fmt);
- </pre> <p id="doc_section_2_2_11_p_7">The retained information is kept as thread-specific data.</p>
+ </pre> <p id="doc_section_3_2_11_p_7">The retained information is kept as thread-specific data.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_2_12">
+<h3 id="doc_section_3_2_12">
<div class="self-section-number">
-<a href="#doc_section_2_2_12">2.2.12</a> </div>
+<a href="#doc_section_3_2_12">3.2.12</a> </div>
<a id="example" href="#example">Example</a>
</h3>
-<p id="doc_section_2_2_12_p_1">In this example, the value for the number of items in stock is emitted:</p>
-<div id="doc_figure_u.71"></div> <pre>
+<p id="doc_section_3_2_12_p_1">In this example, the value for the number of items in stock is emitted:</p>
+<div id="doc_figure_u.72"></div> <pre>
xo_emit("{P: }{Lwc:In stock}{:in-stock/%u}\n",
instock);
- </pre> <p id="doc_section_2_2_12_p_3">This call will generate the following output:</p>
-<div id="doc_figure_u.72"></div> <pre>
+ </pre> <p id="doc_section_3_2_12_p_3">This call will generate the following output:</p>
+<div id="doc_figure_u.73"></div> <pre>
TEXT:
In stock: 144
XML:
@@ -24152,8 +24190,8 @@ jQuery(function ($) {
&lt;div class="padding"&gt; &lt;/div&gt;
&lt;div class="data" data-tag="in-stock"&gt;144&lt;/div&gt;
&lt;/div&gt;
- </pre> <p id="doc_section_2_2_12_p_5">Clearly HTML wins the verbosity award, and this output does not include XOF_XPATH or XOF_INFO data, which would expand the penultimate line to:</p>
-<div id="doc_figure_u.73"></div> <pre>
+ </pre> <p id="doc_section_3_2_12_p_5">Clearly HTML wins the verbosity award, and this output does not include XOF_XPATH or XOF_INFO data, which would expand the penultimate line to:</p>
+<div id="doc_figure_u.74"></div> <pre>
&lt;div class="data" data-tag="in-stock"
data-xpath="/top/data/item/in-stock"
data-type="number"
@@ -24161,45 +24199,45 @@ jQuery(function ($) {
</pre> </div>
</div>
<div class="content">
-<h2 id="doc_section_2_3">
+<h2 id="doc_section_3_3">
<div class="self-section-number">
-<a href="#doc_section_2_3">2.3</a> </div>
+<a href="#doc_section_3_3">3.3</a> </div>
<a id="representing-hierarchy" href="#representing-hierarchy">Representing Hierarchy</a>
</h2>
-<p id="doc_section_2_3_p_1">For XML and JSON, individual fields appear inside hierarchies which provide context and meaning to the fields. Unfortunately, these encoding have a basic disconnect between how lists is similar objects are represented.</p>
-<p id="doc_section_2_3_p_2">XML encodes lists as set of sequential elements:</p>
-<div id="doc_figure_u.74"></div> <pre>
+<p id="doc_section_3_3_p_1">For XML and JSON, individual fields appear inside hierarchies which provide context and meaning to the fields. Unfortunately, these encoding have a basic disconnect between how lists is similar objects are represented.</p>
+<p id="doc_section_3_3_p_2">XML encodes lists as set of sequential elements:</p>
+<div id="doc_figure_u.75"></div> <pre>
&lt;user&gt;phil&lt;/user&gt;
&lt;user&gt;pallavi&lt;/user&gt;
&lt;user&gt;sjg&lt;/user&gt;
- </pre> <p id="doc_section_2_3_p_4">JSON encodes lists using a single name and square brackets:</p>
-<div id="doc_figure_u.75"></div> <pre>
+ </pre> <p id="doc_section_3_3_p_4">JSON encodes lists using a single name and square brackets:</p>
+<div id="doc_figure_u.76"></div> <pre>
"user": [ "phil", "pallavi", "sjg" ]
- </pre> <p id="doc_section_2_3_p_6">This means libxo needs three distinct indications of hierarchy: one for containers of hierarchy appear only once for any specific parent, one for lists, and one for each item in a list.</p>
-<p id="doc_section_2_3_p_7">Section Contents: </p>
+ </pre> <p id="doc_section_3_3_p_6">This means libxo needs three distinct indications of hierarchy: one for containers of hierarchy appear only once for any specific parent, one for lists, and one for each item in a list.</p>
+<p id="doc_section_3_3_p_7">Section Contents: </p>
<ul>
-<li><a href="#containers" title="Containers">Section 2.3.1</a></li>
-<li><a href="#lists-and-instances" title="Lists and Instances">Section 2.3.2</a></li>
-<li><a href="#dtrt-mode" title="DTRT Mode">Section 2.3.3</a></li>
-<li><a href="#markers" title="Markers">Section 2.3.4</a></li>
+<li><a href="#containers" title="Containers">Section 3.3.1</a></li>
+<li><a href="#lists-and-instances" title="Lists and Instances">Section 3.3.2</a></li>
+<li><a href="#dtrt-mode" title="DTRT Mode">Section 3.3.3</a></li>
+<li><a href="#markers" title="Markers">Section 3.3.4</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_2_3_1">
+<h3 id="doc_section_3_3_1">
<div class="self-section-number">
-<a href="#doc_section_2_3_1">2.3.1</a> </div>
+<a href="#doc_section_3_3_1">3.3.1</a> </div>
<a id="containers" href="#containers">Containers</a>
</h3>
-<p id="doc_section_2_3_1_p_1">A "container" is an element of a hierarchy that appears only once under any specific parent. The container has no value, but serves to contain other nodes.</p>
-<p id="doc_section_2_3_1_p_2">To open a container, call xo_open_container() or xo_open_container_h(). The former uses the default handle and the latter accepts a specific handle.</p>
-<div id="doc_figure_u.76"></div> <pre>
+<p id="doc_section_3_3_1_p_1">A "container" is an element of a hierarchy that appears only once under any specific parent. The container has no value, but serves to contain other nodes.</p>
+<p id="doc_section_3_3_1_p_2">To open a container, call xo_open_container() or xo_open_container_h(). The former uses the default handle and the latter accepts a specific handle.</p>
+<div id="doc_figure_u.77"></div> <pre>
int xo_open_container_h (xo_handle_t *xop, const char *name);
int xo_open_container (const char *name);
- </pre> <p id="doc_section_2_3_1_p_4">To close a level, use the xo_close_container() or xo_close_container_h() functions:</p>
-<div id="doc_figure_u.77"></div> <pre>
+ </pre> <p id="doc_section_3_3_1_p_4">To close a level, use the xo_close_container() or xo_close_container_h() functions:</p>
+<div id="doc_figure_u.78"></div> <pre>
int xo_close_container_h (xo_handle_t *xop, const char *name);
int xo_close_container (const char *name);
- </pre> <p id="doc_section_2_3_1_p_6">Each open call must have a matching close call. If the XOF_WARN flag is set and the name given does not match the name of the currently open container, a warning will be generated.</p>
-<div id="doc_figure_u.78"></div> <pre>
+ </pre> <p id="doc_section_3_3_1_p_6">Each open call must have a matching close call. If the XOF_WARN flag is set and the name given does not match the name of the currently open container, a warning will be generated.</p>
+<div id="doc_figure_u.79"></div> <pre>
Example:
xo_open_container("top");
@@ -24229,13 +24267,13 @@ jQuery(function ($) {
data-tag="host-name"&gt;my-host.example.org&lt;/div&gt;
</pre> </div>
<div class="content">
-<h3 id="doc_section_2_3_2">
+<h3 id="doc_section_3_3_2">
<div class="self-section-number">
-<a href="#doc_section_2_3_2">2.3.2</a> </div>
+<a href="#doc_section_3_3_2">3.3.2</a> </div>
<a id="lists-and-instances" href="#lists-and-instances">Lists and Instances</a>
</h3>
-<p id="doc_section_2_3_2_p_1">A list is set of one or more instances that appear under the same parent. The instances contain details about a specific object. One can think of instances as objects or records. A call is needed to open and close the list, while a distinct call is needed to open and close each instance of the list:</p>
-<div id="doc_figure_u.79"></div> <pre>
+<p id="doc_section_3_3_2_p_1">A list is set of one or more instances that appear under the same parent. The instances contain details about a specific object. One can think of instances as objects or records. A call is needed to open and close the list, while a distinct call is needed to open and close each instance of the list:</p>
+<div id="doc_figure_u.80"></div> <pre>
xo_open_list("item");
for (ip = list; ip-&gt;i_title; ip++) {
@@ -24245,24 +24283,24 @@ jQuery(function ($) {
}
xo_close_list("item");
- </pre> <p id="doc_section_2_3_2_p_3">Getting the list and instance calls correct is critical to the proper generation of XML and JSON data.</p>
+ </pre> <p id="doc_section_3_3_2_p_3">Getting the list and instance calls correct is critical to the proper generation of XML and JSON data.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_3_3">
+<h3 id="doc_section_3_3_3">
<div class="self-section-number">
-<a href="#doc_section_2_3_3">2.3.3</a> </div>
+<a href="#doc_section_3_3_3">3.3.3</a> </div>
<a id="dtrt-mode" href="#dtrt-mode">DTRT Mode</a>
</h3>
-<p id="doc_section_2_3_3_p_1">Some users may find tracking the names of open containers, lists, and instances inconvenient. libxo offers a "Do The Right Thing" mode, where libxo will track the names of open containers, lists, and instances so the close function can be called without a name. To enable DTRT mode, turn on the XOF_DTRT flag prior to making any other libxo output.</p>
-<div id="doc_figure_u.80"></div> <pre>
- xo_set_flags(NULL, XOF_DTRT);
- </pre> <p id="doc_section_2_3_3_p_3">Each open and close function has a version with the suffix "_d", which will close the open container, list, or instance:</p>
+<p id="doc_section_3_3_3_p_1">Some users may find tracking the names of open containers, lists, and instances inconvenient. libxo offers a "Do The Right Thing" mode, where libxo will track the names of open containers, lists, and instances so the close function can be called without a name. To enable DTRT mode, turn on the XOF_DTRT flag prior to making any other libxo output.</p>
<div id="doc_figure_u.81"></div> <pre>
+ xo_set_flags(NULL, XOF_DTRT);
+ </pre> <p id="doc_section_3_3_3_p_3">Each open and close function has a version with the suffix "_d", which will close the open container, list, or instance:</p>
+<div id="doc_figure_u.82"></div> <pre>
xo_open_container("top");
...
xo_close_container_d();
- </pre> <p id="doc_section_2_3_3_p_5">This also works for lists and instances:</p>
-<div id="doc_figure_u.82"></div> <pre>
+ </pre> <p id="doc_section_3_3_3_p_5">This also works for lists and instances:</p>
+<div id="doc_figure_u.83"></div> <pre>
xo_open_list("item");
for (...) {
xo_open_instance("item");
@@ -24270,18 +24308,18 @@ jQuery(function ($) {
xo_close_instance_d();
}
xo_close_list_d();
- </pre> <p id="doc_section_2_3_3_p_7">Note that the XOF_WARN flag will also cause libxo to track open containers, lists, and instances. A warning is generated when the name given to the close function and the name recorded do not match.</p>
+ </pre> <p id="doc_section_3_3_3_p_7">Note that the XOF_WARN flag will also cause libxo to track open containers, lists, and instances. A warning is generated when the name given to the close function and the name recorded do not match.</p>
</div>
<div class="content">
-<h3 id="doc_section_2_3_4">
+<h3 id="doc_section_3_3_4">
<div class="self-section-number">
-<a href="#doc_section_2_3_4">2.3.4</a> </div>
+<a href="#doc_section_3_3_4">3.3.4</a> </div>
<a id="markers" href="#markers">Markers</a>
</h3>
-<p id="doc_section_2_3_4_p_1">Markers are used to protect and restore the state of open constructs. While a marker is open, no other open constructs can be closed. When a marker is closed, all constructs open since the marker was opened will be closed.</p>
-<p id="doc_section_2_3_4_p_2">Markers use names which are not user-visible, allowing the caller to choose appropriate internal names.</p>
-<p id="doc_section_2_3_4_p_3">In this example, the code whiffles through a list of fish, calling a function to emit details about each fish. The marker "fish&#8209;guts" is used to ensure that any constructs opened by the function are closed properly.</p>
-<div id="doc_figure_u.83"></div> <pre>
+<p id="doc_section_3_3_4_p_1">Markers are used to protect and restore the state of open constructs. While a marker is open, no other open constructs can be closed. When a marker is closed, all constructs open since the marker was opened will be closed.</p>
+<p id="doc_section_3_3_4_p_2">Markers use names which are not user-visible, allowing the caller to choose appropriate internal names.</p>
+<p id="doc_section_3_3_4_p_3">In this example, the code whiffles through a list of fish, calling a function to emit details about each fish. The marker "fish&#8209;guts" is used to ensure that any constructs opened by the function are closed properly.</p>
+<div id="doc_figure_u.84"></div> <pre>
for (i = 0; fish[i]; i++) {
xo_open_instance("fish");
xo_open_marker("fish-guts");
@@ -24290,21 +24328,40 @@ jQuery(function ($) {
}
</pre> </div>
</div>
+</div>
+<hr class="noprint">
<div class="content">
-<h2 id="doc_section_2_4">
+<h1 id="doc_section_4" class="np">
<div class="self-section-number">
-<a href="#doc_section_2_4">2.4</a> </div>
-<a id="command-line-arguments" href="#command-line-arguments">Command-line Arguments</a>
-</h2>
-<p id="doc_section_2_4_p_1">libxo uses command line options to trigger rendering behavior. The following options are recognised:</p>
-<p id="doc_section_2_4_p_2"> </p>
+<a href="#doc_section_4">4_</a> </div>
+<a id="options" href="#options">Command-line Arguments</a>
+</h1>
+<p id="doc_section_4_p_1">libxo uses command line options to trigger rendering behavior. The following options are recognised:</p>
+<p id="doc_section_4_p_2"> </p>
<ul>
<li>--libxo &lt;options&gt;</li>
<li>--libxo=&lt;options&gt;</li>
<li>--libxo:&lt;brief&#8209;options&gt;</li>
</ul>
-<p id="doc_section_2_4_p_3">Programs using libxo are expecting to call the xo_parse_args function to parse these arguments. See <a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 3.4.1</a> for details.</p>
-<p id="doc_section_2_4_p_4">Options is a comma-separated list of tokens that correspond to output styles, flags, or features:</p>
+<p id="doc_section_4_p_3">The following invocations are all identical in outcome:</p>
+<div id="doc_figure_u.85"></div> <pre>
+ my-app --libxo warn,pretty arg1
+ my-app --libxo=warn,pretty arg1
+ my-app --libxo:WP arg1
+ </pre> <p id="doc_section_4_p_5">Programs using libxo are expecting to call the xo_parse_args function to parse these arguments. See <a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 5.4.1</a> for details.</p>
+<p id="doc_section_4_p_6">Section Contents: </p>
+<ul>
+<li><a href="#option-keywords" title="Option keywords">Section 4.1</a></li>
+<li><a href="#brief-options" title="Brief Options">Section 4.2</a></li>
+<li><a href="#color-mapping" title="Color Mapping">Section 4.3</a></li>
+</ul>
+<div class="content">
+<h2 id="doc_section_4_1">
+<div class="self-section-number">
+<a href="#doc_section_4_1">4.1</a> </div>
+<a id="option-keywords" href="#option-keywords">Option keywords</a>
+</h2>
+<p id="doc_section_4_1_p_1">Options is a comma-separated list of tokens that correspond to output styles, flags, or features:</p>
<div id="doc_table_u.10"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Token</th>
@@ -24316,6 +24373,10 @@ jQuery(function ($) {
<td>Enable colors/effects for display styles (TEXT, HTML)</td>
</tr>
<tr>
+<td>colors=xxxx</td>
+<td>Adjust color output values</td>
+</tr>
+<tr>
<td>dtrt</td>
<td>Enable "Do The Right Thing" mode</td>
</tr>
@@ -24413,10 +24474,10 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_2_4_p_5">The brief options are detailed in <a href="#LIBXO_OPTIONS" title="LIBXO_OPTIONS">Section 3.4.6</a>.</p>
-<p id="doc_section_2_4_p_6">Most of these option are simple and direct, but some require additional details:</p>
-<p id="doc_section_2_4_p_7"> </p>
+<p id="doc_section_4_1_p_2">Most of these option are simple and direct, but some require additional details:</p>
+<p id="doc_section_4_1_p_3"> </p>
<ul>
+<li>"colors" is described in <a href="#color-mapping" title="Color Mapping">Section 4.3</a>.</li>
<li>"flush&#8209;line" performs line buffering, even when the output is not directed to a TTY device.</li>
<li>"info" generates additional data for HTML, encoded in attributes using names that state with "data&#8209;".</li>
<li>"keys" adds a "key" attribute for XML output to indicate that a leaf is an identifier for the list member.</li>
@@ -24428,129 +24489,238 @@ jQuery(function ($) {
<li>"warn&#8209;xml" causes those warnings to be placed in XML inside the output.</li>
</ul>
</div>
+<div class="content">
+<h2 id="doc_section_4_2">
+<div class="self-section-number">
+<a href="#doc_section_4_2">4.2</a> </div>
+<a id="brief-options" href="#brief-options">Brief Options</a>
+</h2>
+<p id="doc_section_4_2_p_1">The brief options are simple single-letter aliases to the normal keywords, as detailed below:</p>
+<div id="doc_table_u.11"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
+<thead><tr>
+<th class="left">Option</th>
+<th class="left">Action</th>
+</tr></thead>
+<tbody>
+<tr>
+<td>c</td>
+<td>Enable color/effects for TEXT/HTML</td>
+</tr>
+<tr>
+<td>F</td>
+<td>Force line-buffered flushing</td>
+</tr>
+<tr>
+<td>H</td>
+<td>Enable HTML output (XO_STYLE_HTML)</td>
+</tr>
+<tr>
+<td>I</td>
+<td>Enable info output (XOF_INFO)</td>
+</tr>
+<tr>
+<td>i&lt;num&gt;</td>
+<td>Indent by &lt;number&gt;</td>
+</tr>
+<tr>
+<td>J</td>
+<td>Enable JSON output (XO_STYLE_JSON)</td>
+</tr>
+<tr>
+<td>k</td>
+<td>Add keys to XPATH expressions in HTML</td>
+</tr>
+<tr>
+<td>n</td>
+<td>Disable humanization (TEXT, HTML)</td>
+</tr>
+<tr>
+<td>P</td>
+<td>Enable pretty-printed output (XOF_PRETTY)</td>
+</tr>
+<tr>
+<td>T</td>
+<td>Enable text output (XO_STYLE_TEXT)</td>
+</tr>
+<tr>
+<td>U</td>
+<td>Add units to HTML output</td>
+</tr>
+<tr>
+<td>u</td>
+<td>Change "-"s to "_"s in element names (JSON)</td>
+</tr>
+<tr>
+<td>W</td>
+<td>Enable warnings (XOF_WARN)</td>
+</tr>
+<tr>
+<td>X</td>
+<td>Enable XML output (XO_STYLE_XML)</td>
+</tr>
+<tr>
+<td>x</td>
+<td>Enable XPath data (XOF_XPATH)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="content">
+<h2 id="doc_section_4_3">
+<div class="self-section-number">
+<a href="#doc_section_4_3">4.3</a> </div>
+<a id="color-mapping" href="#color-mapping">Color Mapping</a>
+</h2>
+<p id="doc_section_4_3_p_1">The "colors" option takes a value that is a set of mappings from the pre-defined set of colors to new foreground and background colors. The value is a series of "fg/bg" values, separated by a "+". Each pair of "fg/bg" values gives the colors to which a basic color is mapped when used as a foreground or background color. The order is the mappings is:</p>
+<p id="doc_section_4_3_p_2"> </p>
+<ul>
+<li>black</li>
+<li>red</li>
+<li>green</li>
+<li>yellow</li>
+<li>blue</li>
+<li>magenta</li>
+<li>cyan</li>
+<li>white</li>
+</ul>
+<p id="doc_section_4_3_p_3">Pairs may be skipped, leaving them mapped as normal, as are missing pairs or single colors.</p>
+<p id="doc_section_4_3_p_4">For example consider the following xo_emit call:</p>
+<div id="doc_figure_u.86"></div> <pre>
+ xo_emit("{C:fg-red,bg-green}Merry XMas!!{C:}\n");
+ </pre> <p id="doc_section_4_3_p_6">To turn all colored output to red-on-blue, use eight pairs of "red/blue" mappings separated by "+"s:</p>
+<div id="doc_figure_u.87"></div> <pre>
+ --libxo colors=red/blue+red/blue+red/blue+red/blue+\
+ red/blue+red/blue+red/blue+red/blue
+ </pre> <p id="doc_section_4_3_p_8">To turn the red-on-green text to magenta-on-cyan, give a "magenta" foreground value for red (the second mapping) and a "cyan" background to green (the third mapping):</p>
+<div id="doc_figure_u.88"></div> <pre>
+ --libxo colors=+magenta+/cyan
+ </pre> <p id="doc_section_4_3_p_10">Consider the common situation where blue output looks unreadable on a terminal session with a black background. To turn both "blue" foreground and background output to "yellow", give only the fifth mapping, skipping the first four mappings with bare "+"s:</p>
+<div id="doc_figure_u.89"></div> <pre>
+ --libxo colors=++++yellow/yellow
+ </pre> </div>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_3" class="np">
+<h1 id="doc_section_5" class="np">
<div class="self-section-number">
-<a href="#doc_section_3">3_</a> </div>
+<a href="#doc_section_5">5_</a> </div>
<a id="the-libxo-api" href="#the-libxo-api">The libxo API</a>
</h1>
-<p id="doc_section_3_p_1">This section gives details about the functions in libxo, how to call them, and the actions they perform.</p>
-<p id="doc_section_3_p_2">Section Contents: </p>
+<p id="doc_section_5_p_1">This section gives details about the functions in libxo, how to call them, and the actions they perform.</p>
+<p id="doc_section_5_p_2">Section Contents: </p>
<ul>
-<li><a href="#handles" title="Handles">Section 3.1</a></li>
-<li><a href="#emitting-content-xo_emit" title="Emitting Content (xo_emit)">Section 3.2</a></li>
-<li><a href="#emitting-hierarchy" title="Emitting Hierarchy">Section 3.3</a></li>
-<li><a href="#support-functions" title="Support Functions">Section 3.4</a></li>
-<li><a href="#emitting-syslog-messages" title="Emitting syslog Messages">Section 3.5</a></li>
-<li><a href="#creating-custom-encoders" title="Creating Custom Encoders">Section 3.6</a></li>
+<li><a href="#handles" title="Handles">Section 5.1</a></li>
+<li><a href="#emitting-content-xo_emit" title="Emitting Content (xo_emit)">Section 5.2</a></li>
+<li><a href="#emitting-hierarchy" title="Emitting Hierarchy">Section 5.3</a></li>
+<li><a href="#support-functions" title="Support Functions">Section 5.4</a></li>
+<li><a href="#emitting-syslog-messages" title="Emitting syslog Messages">Section 5.5</a></li>
+<li><a href="#creating-custom-encoders" title="Creating Custom Encoders">Section 5.6</a></li>
</ul>
<div class="content">
-<h2 id="doc_section_3_1">
+<h2 id="doc_section_5_1">
<div class="self-section-number">
-<a href="#doc_section_3_1">3.1</a> </div>
+<a href="#doc_section_5_1">5.1</a> </div>
<a id="handles" href="#handles">Handles</a>
</h2>
-<p id="doc_section_3_1_p_1">libxo uses "handles" to control its rendering functionality. The handle contains state and buffered data, as well as callback functions to process data.</p>
-<p id="doc_section_3_1_p_2">Handles give an abstraction for libxo that encapsulates the state of a stream of output. Handles have the data type "xo_handle_t" and are opaque to the caller.</p>
-<p id="doc_section_3_1_p_3">The library has a default handle that is automatically initialized. By default, this handle will send text style output (XO_STYLE_TEXT) to standard output. The xo_set_style and xo_set_flags functions can be used to change this behavior.</p>
-<p id="doc_section_3_1_p_4">For the typical command that is generating output on standard output, there is no need to create an explicit handle, but they are available when needed, e.g., for daemons that generate multiple streams of output.</p>
-<p id="doc_section_3_1_p_5">Many libxo functions take a handle as their first parameter; most that do not use the default handle. Any function taking a handle can be passed NULL to access the default handle. For the convenience of callers, the libxo library includes handle-less functions that implicitly use the default handle.</p>
-<p id="doc_section_3_1_p_6">For example, the following are equivalent:</p>
-<div id="doc_figure_u.84"></div> <pre>
+<p id="doc_section_5_1_p_1">libxo uses "handles" to control its rendering functionality. The handle contains state and buffered data, as well as callback functions to process data.</p>
+<p id="doc_section_5_1_p_2">Handles give an abstraction for libxo that encapsulates the state of a stream of output. Handles have the data type "xo_handle_t" and are opaque to the caller.</p>
+<p id="doc_section_5_1_p_3">The library has a default handle that is automatically initialized. By default, this handle will send text style output (XO_STYLE_TEXT) to standard output. The xo_set_style and xo_set_flags functions can be used to change this behavior.</p>
+<p id="doc_section_5_1_p_4">For the typical command that is generating output on standard output, there is no need to create an explicit handle, but they are available when needed, e.g., for daemons that generate multiple streams of output.</p>
+<p id="doc_section_5_1_p_5">Many libxo functions take a handle as their first parameter; most that do not use the default handle. Any function taking a handle can be passed NULL to access the default handle. For the convenience of callers, the libxo library includes handle-less functions that implicitly use the default handle.</p>
+<p id="doc_section_5_1_p_6">For example, the following are equivalent:</p>
+<div id="doc_figure_u.90"></div> <pre>
xo_emit("test");
xo_emit_h(NULL, "test");
- </pre> <p id="doc_section_3_1_p_8">Handles are created using xo_create() and destroy using xo_destroy().</p>
-<p id="doc_section_3_1_p_9">Section Contents: </p>
+ </pre> <p id="doc_section_5_1_p_8">Handles are created using xo_create() and destroy using xo_destroy().</p>
+<p id="doc_section_5_1_p_9">Section Contents: </p>
<ul>
-<li><a href="#xo_create" title="xo_create">Section 3.1.1</a></li>
-<li><a href="#xo_create_to_file" title="xo_create_to_file">Section 3.1.2</a></li>
-<li><a href="#xo_set_writer" title="xo_set_writer">Section 3.1.3</a></li>
-<li><a href="#xo_set_style" title="xo_set_style">Section 3.1.4</a></li>
-<li><a href="#xo_get_style" title="xo_get_style">Section 3.1.5</a></li>
-<li><a href="#xo_set_flags" title="xo_set_flags">Section 3.1.6</a></li>
-<li><a href="#xo_destroy" title="xo_destroy">Section 3.1.7</a></li>
+<li><a href="#xo_create" title="xo_create">Section 5.1.1</a></li>
+<li><a href="#xo_create_to_file" title="xo_create_to_file">Section 5.1.2</a></li>
+<li><a href="#xo_set_writer" title="xo_set_writer">Section 5.1.3</a></li>
+<li><a href="#xo_set_style" title="xo_set_style">Section 5.1.4</a></li>
+<li><a href="#xo_get_style" title="xo_get_style">Section 5.1.5</a></li>
+<li><a href="#xo_set_flags" title="xo_set_flags">Section 5.1.6</a></li>
+<li><a href="#xo_destroy" title="xo_destroy">Section 5.1.7</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_3_1_1">
+<h3 id="doc_section_5_1_1">
<div class="self-section-number">
-<a href="#doc_section_3_1_1">3.1.1</a> </div>
+<a href="#doc_section_5_1_1">5.1.1</a> </div>
<a id="xo_create" href="#xo_create">xo_create</a>
</h3>
-<p id="doc_section_3_1_1_p_1">A handle can be allocated using the xo_create() function:</p>
-<div id="doc_figure_u.85"></div> <pre>
+<p id="doc_section_5_1_1_p_1">A handle can be allocated using the xo_create() function:</p>
+<div id="doc_figure_u.91"></div> <pre>
xo_handle_t *xo_create (unsigned style, unsigned flags);
Example:
xo_handle_t *xop = xo_create(XO_STYLE_JSON, XOF_WARN);
....
xo_emit_h(xop, "testing\n");
- </pre> <p id="doc_section_3_1_1_p_3">See also <a href="#styles" title="Output Styles (XO_STYLE_*)">Section 3.1.5.1</a> and <a href="#flags" title="Flags (XOF_*)">Section 3.1.6.1</a>.</p>
+ </pre> <p id="doc_section_5_1_1_p_3">See also <a href="#styles" title="Output Styles (XO_STYLE_*)">Section 5.1.5.1</a> and <a href="#flags" title="Flags (XOF_*)">Section 5.1.6.1</a>.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_1_2">
+<h3 id="doc_section_5_1_2">
<div class="self-section-number">
-<a href="#doc_section_3_1_2">3.1.2</a> </div>
+<a href="#doc_section_5_1_2">5.1.2</a> </div>
<a id="xo_create_to_file" href="#xo_create_to_file">xo_create_to_file</a>
</h3>
-<p id="doc_section_3_1_2_p_1">By default, libxo writes output to standard output. A convenience function is provided for situations when output should be written to a different file:</p>
-<div id="doc_figure_u.86"></div> <pre>
+<p id="doc_section_5_1_2_p_1">By default, libxo writes output to standard output. A convenience function is provided for situations when output should be written to a different file:</p>
+<div id="doc_figure_u.92"></div> <pre>
xo_handle_t *xo_create_to_file (FILE *fp, unsigned style,
unsigned flags);
- </pre> <p id="doc_section_3_1_2_p_3">Use the XOF_CLOSE_FP flag to trigger a call to fclose() for the FILE pointer when the handle is destroyed.</p>
+ </pre> <p id="doc_section_5_1_2_p_3">Use the XOF_CLOSE_FP flag to trigger a call to fclose() for the FILE pointer when the handle is destroyed.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_1_3">
+<h3 id="doc_section_5_1_3">
<div class="self-section-number">
-<a href="#doc_section_3_1_3">3.1.3</a> </div>
+<a href="#doc_section_5_1_3">5.1.3</a> </div>
<a id="xo_set_writer" href="#xo_set_writer">xo_set_writer</a>
</h3>
-<p id="doc_section_3_1_3_p_1">The xo_set_writer function allows custom 'write' functions which can tailor how libxo writes data. An opaque argument is recorded and passed back to the write function, allowing the function to acquire context information. The 'close' function can release this opaque data and any other resources as needed. The flush function can flush buffered data associated with the opaque object.</p>
-<div id="doc_figure_u.87"></div> <pre>
+<p id="doc_section_5_1_3_p_1">The xo_set_writer function allows custom 'write' functions which can tailor how libxo writes data. An opaque argument is recorded and passed back to the write function, allowing the function to acquire context information. The 'close' function can release this opaque data and any other resources as needed. The flush function can flush buffered data associated with the opaque object.</p>
+<div id="doc_figure_u.93"></div> <pre>
void xo_set_writer (xo_handle_t *xop, void *opaque,
xo_write_func_t write_func,
xo_close_func_t close_func);
xo_flush_func_t flush_func);
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_1_4">
+<h3 id="doc_section_5_1_4">
<div class="self-section-number">
-<a href="#doc_section_3_1_4">3.1.4</a> </div>
+<a href="#doc_section_5_1_4">5.1.4</a> </div>
<a id="xo_set_style" href="#xo_set_style">xo_set_style</a>
</h3>
-<p id="doc_section_3_1_4_p_1">To set the style, use the xo_set_style() function:</p>
-<div id="doc_figure_u.88"></div> <pre>
+<p id="doc_section_5_1_4_p_1">To set the style, use the xo_set_style() function:</p>
+<div id="doc_figure_u.94"></div> <pre>
void xo_set_style(xo_handle_t *xop, unsigned style);
- </pre> <p id="doc_section_3_1_4_p_3">To use the default handle, pass a NULL handle:</p>
-<div id="doc_figure_u.89"></div> <pre>
+ </pre> <p id="doc_section_5_1_4_p_3">To use the default handle, pass a NULL handle:</p>
+<div id="doc_figure_u.95"></div> <pre>
xo_set_style(NULL, XO_STYLE_XML);
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_1_5">
+<h3 id="doc_section_5_1_5">
<div class="self-section-number">
-<a href="#doc_section_3_1_5">3.1.5</a> </div>
+<a href="#doc_section_5_1_5">5.1.5</a> </div>
<a id="xo_get_style" href="#xo_get_style">xo_get_style</a>
</h3>
-<p id="doc_section_3_1_5_p_1">To find the current style, use the xo_get_style() function:</p>
-<div id="doc_figure_u.90"></div> <pre>
+<p id="doc_section_5_1_5_p_1">To find the current style, use the xo_get_style() function:</p>
+<div id="doc_figure_u.96"></div> <pre>
xo_style_t xo_get_style(xo_handle_t *xop);
- </pre> <p id="doc_section_3_1_5_p_3">To use the default handle, pass a NULL handle:</p>
-<div id="doc_figure_u.91"></div> <pre>
+ </pre> <p id="doc_section_5_1_5_p_3">To use the default handle, pass a NULL handle:</p>
+<div id="doc_figure_u.97"></div> <pre>
style = xo_get_style(NULL);
- </pre> <p id="doc_section_3_1_5_p_5">Section Contents: </p>
+ </pre> <p id="doc_section_5_1_5_p_5">Section Contents: </p>
<ul>
-<li><a href="#styles" title="Output Styles (XO_STYLE_*)">Section 3.1.5.1</a></li>
-<li><a href="#xo_set_style_name" title="xo_set_style_name">Section 3.1.5.2</a></li>
+<li><a href="#styles" title="Output Styles (XO_STYLE_*)">Section 5.1.5.1</a></li>
+<li><a href="#xo_set_style_name" title="xo_set_style_name">Section 5.1.5.2</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_3_1_5_1">
+<h4 id="doc_section_5_1_5_1">
<div class="self-section-number">
-<a href="#doc_section_3_1_5_1">3.1.5.1</a> </div>
+<a href="#doc_section_5_1_5_1">5.1.5.1</a> </div>
<a id="styles" href="#styles">Output Styles (XO_STYLE_*)</a>
</h4>
-<p id="doc_section_3_1_5_1_p_1">The libxo functions accept a set of output styles:</p>
-<div id="doc_table_u.11"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
+<p id="doc_section_5_1_5_1_p_1">The libxo functions accept a set of output styles:</p>
+<div id="doc_table_u.12"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Flag</th>
<th class="left">Description</th>
@@ -24576,46 +24746,46 @@ jQuery(function ($) {
</table></div>
</div>
<div class="content">
-<h4 id="doc_section_3_1_5_2">
+<h4 id="doc_section_5_1_5_2">
<div class="self-section-number">
-<a href="#doc_section_3_1_5_2">3.1.5.2</a> </div>
+<a href="#doc_section_5_1_5_2">5.1.5.2</a> </div>
<a id="xo_set_style_name" href="#xo_set_style_name">xo_set_style_name</a>
</h4>
-<p id="doc_section_3_1_5_2_p_1">The xo_set_style_name() can be used to set the style based on a name encoded as a string:</p>
-<div id="doc_figure_u.92"></div> <pre>
+<p id="doc_section_5_1_5_2_p_1">The xo_set_style_name() can be used to set the style based on a name encoded as a string:</p>
+<div id="doc_figure_u.98"></div> <pre>
int xo_set_style_name (xo_handle_t *xop, const char *style);
- </pre> <p id="doc_section_3_1_5_2_p_3">The name can be any of the styles: "text", "xml", "json", or "html".</p>
-<div id="doc_figure_u.93"></div> <pre>
+ </pre> <p id="doc_section_5_1_5_2_p_3">The name can be any of the styles: "text", "xml", "json", or "html".</p>
+<div id="doc_figure_u.99"></div> <pre>
EXAMPLE:
xo_set_style_name(NULL, "html");
</pre> </div>
</div>
<div class="content">
-<h3 id="doc_section_3_1_6">
+<h3 id="doc_section_5_1_6">
<div class="self-section-number">
-<a href="#doc_section_3_1_6">3.1.6</a> </div>
+<a href="#doc_section_5_1_6">5.1.6</a> </div>
<a id="xo_set_flags" href="#xo_set_flags">xo_set_flags</a>
</h3>
-<p id="doc_section_3_1_6_p_1">To set the flags, use the xo_set_flags() function:</p>
-<div id="doc_figure_u.94"></div> <pre>
+<p id="doc_section_5_1_6_p_1">To set the flags, use the xo_set_flags() function:</p>
+<div id="doc_figure_u.100"></div> <pre>
void xo_set_flags(xo_handle_t *xop, unsigned flags);
- </pre> <p id="doc_section_3_1_6_p_3">To use the default handle, pass a NULL handle:</p>
-<div id="doc_figure_u.95"></div> <pre>
+ </pre> <p id="doc_section_5_1_6_p_3">To use the default handle, pass a NULL handle:</p>
+<div id="doc_figure_u.101"></div> <pre>
xo_set_style(NULL, XO_STYLE_XML);
- </pre> <p id="doc_section_3_1_6_p_5">Section Contents: </p>
+ </pre> <p id="doc_section_5_1_6_p_5">Section Contents: </p>
<ul>
-<li><a href="#flags" title="Flags (XOF_*)">Section 3.1.6.1</a></li>
-<li><a href="#xo_clear_flags" title="xo_clear_flags">Section 3.1.6.2</a></li>
-<li><a href="#xo_set_options" title="xo_set_options">Section 3.1.6.3</a></li>
+<li><a href="#flags" title="Flags (XOF_*)">Section 5.1.6.1</a></li>
+<li><a href="#xo_clear_flags" title="xo_clear_flags">Section 5.1.6.2</a></li>
+<li><a href="#xo_set_options" title="xo_set_options">Section 5.1.6.3</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_3_1_6_1">
+<h4 id="doc_section_5_1_6_1">
<div class="self-section-number">
-<a href="#doc_section_3_1_6_1">3.1.6.1</a> </div>
+<a href="#doc_section_5_1_6_1">5.1.6.1</a> </div>
<a id="flags" href="#flags">Flags (XOF_*)</a>
</h4>
-<p id="doc_section_3_1_6_1_p_1">The set of valid flags include:</p>
-<div id="doc_table_u.12"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
+<p id="doc_section_5_1_6_1_p_1">The set of valid flags include:</p>
+<div id="doc_table_u.13"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Flag</th>
<th class="left">Description</th>
@@ -24687,13 +24857,13 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_3_1_6_1_p_2">The XOF_CLOSE_FP flag will trigger the call of the close_func (provided via xo_set_writer()) when the handle is destroyed.</p>
-<p id="doc_section_3_1_6_1_p_3">The XOF_COLOR flag enables color and effects in output regardless of output device, while the XOF_COLOR_ALLOWED flag allows color and effects only if the output device is a terminal.</p>
-<p id="doc_section_3_1_6_1_p_4">The XOF_PRETTY flag requests 'pretty printing', which will trigger the addition of indentation and newlines to enhance the readability of XML, JSON, and HTML output. Text output is not affected.</p>
-<p id="doc_section_3_1_6_1_p_5">The XOF_WARN flag requests that warnings will trigger diagnostic output (on standard error) when the library notices errors during operations, or with arguments to functions. Without warnings enabled, such conditions are ignored.</p>
-<p id="doc_section_3_1_6_1_p_6">Warnings allow developers to debug their interaction with libxo. The function "xo_failure" can used as a breakpoint for a debugger, regardless of whether warnings are enabled.</p>
-<p id="doc_section_3_1_6_1_p_7">If the style is XO_STYLE_HTML, the following additional flags can be used:</p>
-<div id="doc_table_u.13"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
+<p id="doc_section_5_1_6_1_p_2">The XOF_CLOSE_FP flag will trigger the call of the close_func (provided via xo_set_writer()) when the handle is destroyed.</p>
+<p id="doc_section_5_1_6_1_p_3">The XOF_COLOR flag enables color and effects in output regardless of output device, while the XOF_COLOR_ALLOWED flag allows color and effects only if the output device is a terminal.</p>
+<p id="doc_section_5_1_6_1_p_4">The XOF_PRETTY flag requests 'pretty printing', which will trigger the addition of indentation and newlines to enhance the readability of XML, JSON, and HTML output. Text output is not affected.</p>
+<p id="doc_section_5_1_6_1_p_5">The XOF_WARN flag requests that warnings will trigger diagnostic output (on standard error) when the library notices errors during operations, or with arguments to functions. Without warnings enabled, such conditions are ignored.</p>
+<p id="doc_section_5_1_6_1_p_6">Warnings allow developers to debug their interaction with libxo. The function "xo_failure" can used as a breakpoint for a debugger, regardless of whether warnings are enabled.</p>
+<p id="doc_section_5_1_6_1_p_7">If the style is XO_STYLE_HTML, the following additional flags can be used:</p>
+<div id="doc_table_u.14"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Flag</th>
<th class="left">Description</th>
@@ -24709,10 +24879,10 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_3_1_6_1_p_8">The XOF_XPATH flag enables the emission of XPath expressions detailing the hierarchy of XML elements used to encode the data field, if the XPATH style of output were requested.</p>
-<p id="doc_section_3_1_6_1_p_9">The XOF_INFO flag encodes additional informational fields for HTML output. See <a href="#info" title="Field Information (xo_info_t)">Section 3.4.4</a> for details.</p>
-<p id="doc_section_3_1_6_1_p_10">If the style is XO_STYLE_XML, the following additional flags can be used:</p>
-<div id="doc_table_u.14"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
+<p id="doc_section_5_1_6_1_p_8">The XOF_XPATH flag enables the emission of XPath expressions detailing the hierarchy of XML elements used to encode the data field, if the XPATH style of output were requested.</p>
+<p id="doc_section_5_1_6_1_p_9">The XOF_INFO flag encodes additional informational fields for HTML output. See <a href="#info" title="Field Information (xo_info_t)">Section 5.4.4</a> for details.</p>
+<p id="doc_section_5_1_6_1_p_10">If the style is XO_STYLE_XML, the following additional flags can be used:</p>
+<div id="doc_table_u.15"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Flag</th>
<th class="left">Description</th>
@@ -24722,74 +24892,74 @@ jQuery(function ($) {
<td>Flag 'key' fields for xml</td>
</tr></tbody>
</table></div>
-<p id="doc_section_3_1_6_1_p_11">The XOF_KEYS flag adds 'key' attribute to the XML encoding for field definitions that use the 'k' modifier. The key attribute has the value "key":</p>
-<div id="doc_figure_u.96"></div> <pre>
+<p id="doc_section_5_1_6_1_p_11">The XOF_KEYS flag adds 'key' attribute to the XML encoding for field definitions that use the 'k' modifier. The key attribute has the value "key":</p>
+<div id="doc_figure_u.102"></div> <pre>
xo_emit("{k:name}", item);
XML:
&lt;name key="key"&gt;truck&lt;/name&gt;
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_1_6_2">
+<h4 id="doc_section_5_1_6_2">
<div class="self-section-number">
-<a href="#doc_section_3_1_6_2">3.1.6.2</a> </div>
+<a href="#doc_section_5_1_6_2">5.1.6.2</a> </div>
<a id="xo_clear_flags" href="#xo_clear_flags">xo_clear_flags</a>
</h4>
-<p id="doc_section_3_1_6_2_p_1">The xo_clear_flags() function turns off the given flags in a specific handle.</p>
-<div id="doc_figure_u.97"></div> <pre>
+<p id="doc_section_5_1_6_2_p_1">The xo_clear_flags() function turns off the given flags in a specific handle.</p>
+<div id="doc_figure_u.103"></div> <pre>
void xo_clear_flags (xo_handle_t *xop, xo_xof_flags_t flags);
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_1_6_3">
+<h4 id="doc_section_5_1_6_3">
<div class="self-section-number">
-<a href="#doc_section_3_1_6_3">3.1.6.3</a> </div>
+<a href="#doc_section_5_1_6_3">5.1.6.3</a> </div>
<a id="xo_set_options" href="#xo_set_options">xo_set_options</a>
</h4>
-<p id="doc_section_3_1_6_3_p_1">The xo_set_options() function accepts a comma-separated list of styles and flags and enables them for a specific handle.</p>
-<div id="doc_figure_u.98"></div> <pre>
+<p id="doc_section_5_1_6_3_p_1">The xo_set_options() function accepts a comma-separated list of styles and flags and enables them for a specific handle.</p>
+<div id="doc_figure_u.104"></div> <pre>
int xo_set_options (xo_handle_t *xop, const char *input);
- </pre> <p id="doc_section_3_1_6_3_p_3">The options are identical to those listed in <a href="#command-line-arguments" title="Command-line Arguments">Section 2.4</a>.</p>
+ </pre> <p id="doc_section_5_1_6_3_p_3">The options are identical to those listed in <a href="#options" title="Command-line Arguments">Section 4</a>.</p>
</div>
</div>
<div class="content">
-<h3 id="doc_section_3_1_7">
+<h3 id="doc_section_5_1_7">
<div class="self-section-number">
-<a href="#doc_section_3_1_7">3.1.7</a> </div>
+<a href="#doc_section_5_1_7">5.1.7</a> </div>
<a id="xo_destroy" href="#xo_destroy">xo_destroy</a>
</h3>
-<p id="doc_section_3_1_7_p_1">The xo_destroy function releases a handle and any resources it is using. Calling xo_destroy with a NULL handle will release any resources associated with the default handle.</p>
-<div id="doc_figure_u.99"></div> <pre>
+<p id="doc_section_5_1_7_p_1">The xo_destroy function releases a handle and any resources it is using. Calling xo_destroy with a NULL handle will release any resources associated with the default handle.</p>
+<div id="doc_figure_u.105"></div> <pre>
void xo_destroy(xo_handle_t *xop);
</pre> </div>
</div>
<div class="content">
-<h2 id="doc_section_3_2">
+<h2 id="doc_section_5_2">
<div class="self-section-number">
-<a href="#doc_section_3_2">3.2</a> </div>
+<a href="#doc_section_5_2">5.2</a> </div>
<a id="emitting-content-xo_emit" href="#emitting-content-xo_emit">Emitting Content (xo_emit)</a>
</h2>
-<p id="doc_section_3_2_p_1">The following functions are used to emit output:</p>
-<div id="doc_figure_u.100"></div> <pre>
+<p id="doc_section_5_2_p_1">The following functions are used to emit output:</p>
+<div id="doc_figure_u.106"></div> <pre>
int xo_emit (const char *fmt, ...);
int xo_emit_h (xo_handle_t *xop, const char *fmt, ...);
int xo_emit_hv (xo_handle_t *xop, const char *fmt, va_list vap);
- </pre> <p id="doc_section_3_2_p_3">The "fmt" argument is a string containing field descriptors as specified in <a href="#format-strings" title="Format Strings">Section 2.2</a>. The use of a handle is optional and NULL can be passed to access the internal 'default' handle. See <a href="#handles" title="Handles">Section 3.1</a>.</p>
-<p id="doc_section_3_2_p_4">The remaining arguments to xo_emit() and xo_emit_h() are a set of arguments corresponding to the fields in the format string. Care must be taken to ensure the argument types match the fields in the format string, since an inappropriate cast can ruin your day. The vap argument to xo_emit_hv() points to a variable argument list that can be used to retrieve arguments via va_arg().</p>
-<p id="doc_section_3_2_p_5">Section Contents: </p>
+ </pre> <p id="doc_section_5_2_p_3">The "fmt" argument is a string containing field descriptors as specified in <a href="#format-strings" title="Format Strings">Section 3.2</a>. The use of a handle is optional and NULL can be passed to access the internal 'default' handle. See <a href="#handles" title="Handles">Section 5.1</a>.</p>
+<p id="doc_section_5_2_p_4">The remaining arguments to xo_emit() and xo_emit_h() are a set of arguments corresponding to the fields in the format string. Care must be taken to ensure the argument types match the fields in the format string, since an inappropriate cast can ruin your day. The vap argument to xo_emit_hv() points to a variable argument list that can be used to retrieve arguments via va_arg().</p>
+<p id="doc_section_5_2_p_5">Section Contents: </p>
<ul>
-<li><a href="#xo_emit_field" title="Single Field Emitting Functions (xo_emit_field)">Section 3.2.1</a></li>
-<li><a href="#xo_attr" title="Attributes (xo_attr)">Section 3.2.2</a></li>
-<li><a href="#flushing-output-xo_flush" title="Flushing Output (xo_flush)">Section 3.2.3</a></li>
-<li><a href="#finishing-output-xo_finish" title="Finishing Output (xo_finish)">Section 3.2.4</a></li>
+<li><a href="#xo_emit_field" title="Single Field Emitting Functions (xo_emit_field)">Section 5.2.1</a></li>
+<li><a href="#xo_attr" title="Attributes (xo_attr)">Section 5.2.2</a></li>
+<li><a href="#flushing-output-xo_flush" title="Flushing Output (xo_flush)">Section 5.2.3</a></li>
+<li><a href="#finishing-output-xo_finish" title="Finishing Output (xo_finish)">Section 5.2.4</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_3_2_1">
+<h3 id="doc_section_5_2_1">
<div class="self-section-number">
-<a href="#doc_section_3_2_1">3.2.1</a> </div>
+<a href="#doc_section_5_2_1">5.2.1</a> </div>
<a id="xo_emit_field" href="#xo_emit_field">Single Field Emitting Functions (xo_emit_field)</a>
</h3>
-<p id="doc_section_3_2_1_p_1">The following functions can also make output, but only make a single field at a time:</p>
-<div id="doc_figure_u.101"></div> <pre>
+<p id="doc_section_5_2_1_p_1">The following functions can also make output, but only make a single field at a time:</p>
+<div id="doc_figure_u.107"></div> <pre>
int xo_emit_field_hv (xo_handle_t *xop, const char *rolmod,
const char *contents, const char *fmt,
const char *efmt, va_list vap);
@@ -24800,26 +24970,26 @@ jQuery(function ($) {
int xo_emit_field (const char *rolmod, const char *contents,
const char *fmt, const char *efmt, ...);
- </pre> <p id="doc_section_3_2_1_p_3">These functions are intended to avoid the scenario where one would otherwise need to compose a format descriptors using snprintf(). The individual parts of the format descriptor are passed in distinctly.</p>
-<div id="doc_figure_u.102"></div> <pre>
+ </pre> <p id="doc_section_5_2_1_p_3">These functions are intended to avoid the scenario where one would otherwise need to compose a format descriptors using snprintf(). The individual parts of the format descriptor are passed in distinctly.</p>
+<div id="doc_figure_u.108"></div> <pre>
xo_emit("T", "Host name is ", NULL, NULL);
xo_emit("V", "host-name", NULL, NULL, host-name);
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_2_2">
+<h3 id="doc_section_5_2_2">
<div class="self-section-number">
-<a href="#doc_section_3_2_2">3.2.2</a> </div>
+<a href="#doc_section_5_2_2">5.2.2</a> </div>
<a id="xo_attr" href="#xo_attr">Attributes (xo_attr)</a>
</h3>
-<p id="doc_section_3_2_2_p_1">The xo_attr() function emits attributes for the XML output style.</p>
-<div id="doc_figure_u.103"></div> <pre>
+<p id="doc_section_5_2_2_p_1">The xo_attr() function emits attributes for the XML output style.</p>
+<div id="doc_figure_u.109"></div> <pre>
int xo_attr (const char *name, const char *fmt, ...);
int xo_attr_h (xo_handle_t *xop, const char *name,
const char *fmt, ...);
int xo_attr_hv (xo_handle_t *xop, const char *name,
const char *fmt, va_list vap);
- </pre> <p id="doc_section_3_2_2_p_3">The name parameter give the name of the attribute to be encoded. The fmt parameter gives a printf-style format string used to format the value of the attribute using any remaining arguments, or the vap parameter passed to xo_attr_hv().</p>
-<div id="doc_figure_u.104"></div> <pre>
+ </pre> <p id="doc_section_5_2_2_p_3">The name parameter give the name of the attribute to be encoded. The fmt parameter gives a printf-style format string used to format the value of the attribute using any remaining arguments, or the vap parameter passed to xo_attr_hv().</p>
+<div id="doc_figure_u.110"></div> <pre>
EXAMPLE:
xo_attr("seconds", "%ld", (unsigned long) login_time);
struct tm *tmp = localtime(login_time);
@@ -24827,45 +24997,45 @@ jQuery(function ($) {
xo_emit("Logged in at {:login-time}\n", buf);
XML:
&lt;login-time seconds="1408336270"&gt;00:14&lt;/login-time&gt;
- </pre> <p id="doc_section_3_2_2_p_5">xo_attr is placed on the next container, instance, leaf, or leaf list that is emitted.</p>
-<p id="doc_section_3_2_2_p_6">Since attributes are only emitted in XML, their use should be limited to meta-data and additional or redundant representations of data already emitted in other form.</p>
+ </pre> <p id="doc_section_5_2_2_p_5">xo_attr is placed on the next container, instance, leaf, or leaf list that is emitted.</p>
+<p id="doc_section_5_2_2_p_6">Since attributes are only emitted in XML, their use should be limited to meta-data and additional or redundant representations of data already emitted in other form.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_2_3">
+<h3 id="doc_section_5_2_3">
<div class="self-section-number">
-<a href="#doc_section_3_2_3">3.2.3</a> </div>
+<a href="#doc_section_5_2_3">5.2.3</a> </div>
<a id="flushing-output-xo_flush" href="#flushing-output-xo_flush">Flushing Output (xo_flush)</a>
</h3>
-<p id="doc_section_3_2_3_p_1">libxo buffers data, both for performance and consistency, but also to allow some advanced features to work properly. At various times, the caller may wish to flush any data buffered within the library. The xo_flush() call is used for this:</p>
-<div id="doc_figure_u.105"></div> <pre>
+<p id="doc_section_5_2_3_p_1">libxo buffers data, both for performance and consistency, but also to allow some advanced features to work properly. At various times, the caller may wish to flush any data buffered within the library. The xo_flush() call is used for this:</p>
+<div id="doc_figure_u.111"></div> <pre>
void xo_flush (void);
void xo_flush_h (xo_handle_t *xop);
- </pre> <p id="doc_section_3_2_3_p_3">Calling xo_flush also triggers the flush function associated with the handle. For the default handle, this is equivalent to "fflush(stdio);".</p>
+ </pre> <p id="doc_section_5_2_3_p_3">Calling xo_flush also triggers the flush function associated with the handle. For the default handle, this is equivalent to "fflush(stdio);".</p>
</div>
<div class="content">
-<h3 id="doc_section_3_2_4">
+<h3 id="doc_section_5_2_4">
<div class="self-section-number">
-<a href="#doc_section_3_2_4">3.2.4</a> </div>
+<a href="#doc_section_5_2_4">5.2.4</a> </div>
<a id="finishing-output-xo_finish" href="#finishing-output-xo_finish">Finishing Output (xo_finish)</a>
</h3>
-<p id="doc_section_3_2_4_p_1">When the program is ready to exit or close a handle, a call to xo_finish() is required. This flushes any buffered data, closes open libxo constructs, and completes any pending operations.</p>
-<div id="doc_figure_u.106"></div> <pre>
+<p id="doc_section_5_2_4_p_1">When the program is ready to exit or close a handle, a call to xo_finish() is required. This flushes any buffered data, closes open libxo constructs, and completes any pending operations.</p>
+<div id="doc_figure_u.112"></div> <pre>
int xo_finish (void);
int xo_finish_h (xo_handle_t *xop);
void xo_finish_atexit (void);
- </pre> <p id="doc_section_3_2_4_p_3">Calling this function is vital to the proper operation of libxo, especially for the non-TEXT output styles.</p>
-<p id="doc_section_3_2_4_p_4">xo_finish_atexit is suitable for use with atexit(3).</p>
+ </pre> <p id="doc_section_5_2_4_p_3">Calling this function is vital to the proper operation of libxo, especially for the non-TEXT output styles.</p>
+<p id="doc_section_5_2_4_p_4">xo_finish_atexit is suitable for use with atexit(3).</p>
</div>
</div>
<div class="content">
-<h2 id="doc_section_3_3">
+<h2 id="doc_section_5_3">
<div class="self-section-number">
-<a href="#doc_section_3_3">3.3</a> </div>
+<a href="#doc_section_5_3">5.3</a> </div>
<a id="emitting-hierarchy" href="#emitting-hierarchy">Emitting Hierarchy</a>
</h2>
-<p id="doc_section_3_3_p_1">libxo represents to types of hierarchy: containers and lists. A container appears once under a given parent where a list contains instances that can appear multiple times. A container is used to hold related fields and to give the data organization and scope.</p>
-<p id="doc_section_3_3_p_2">To create a container, use the xo_open_container and xo_close_container functions:</p>
-<div id="doc_figure_u.107"></div> <pre>
+<p id="doc_section_5_3_p_1">libxo represents to types of hierarchy: containers and lists. A container appears once under a given parent where a list contains instances that can appear multiple times. A container is used to hold related fields and to give the data organization and scope.</p>
+<p id="doc_section_5_3_p_2">To create a container, use the xo_open_container and xo_close_container functions:</p>
+<div id="doc_figure_u.113"></div> <pre>
int xo_open_container (const char *name);
int xo_open_container_h (xo_handle_t *xop, const char *name);
int xo_open_container_hd (xo_handle_t *xop, const char *name);
@@ -24875,28 +25045,28 @@ jQuery(function ($) {
int xo_close_container_h (xo_handle_t *xop, const char *name);
int xo_close_container_hd (xo_handle_t *xop);
int xo_close_container_d (void);
- </pre> <p id="doc_section_3_3_p_4">The name parameter gives the name of the container, encoded in UTF-8. Since ASCII is a proper subset of UTF-8, traditional C strings can be used directly.</p>
-<p id="doc_section_3_3_p_5">The close functions with the "_d" suffix are used in "Do The Right Thing" mode, where the name of the open containers, lists, and instances are maintained internally by libxo to allow the caller to avoid keeping track of the open container name.</p>
-<p id="doc_section_3_3_p_6">Use the XOF_WARN flag to generate a warning if the name given on the close does not match the current open container.</p>
-<p id="doc_section_3_3_p_7">For TEXT and HTML output, containers are not rendered into output text, though for HTML they are used when the XOF_XPATH flag is set.</p>
-<div id="doc_figure_u.108"></div> <pre>
+ </pre> <p id="doc_section_5_3_p_4">The name parameter gives the name of the container, encoded in UTF-8. Since ASCII is a proper subset of UTF-8, traditional C strings can be used directly.</p>
+<p id="doc_section_5_3_p_5">The close functions with the "_d" suffix are used in "Do The Right Thing" mode, where the name of the open containers, lists, and instances are maintained internally by libxo to allow the caller to avoid keeping track of the open container name.</p>
+<p id="doc_section_5_3_p_6">Use the XOF_WARN flag to generate a warning if the name given on the close does not match the current open container.</p>
+<p id="doc_section_5_3_p_7">For TEXT and HTML output, containers are not rendered into output text, though for HTML they are used when the XOF_XPATH flag is set.</p>
+<div id="doc_figure_u.114"></div> <pre>
EXAMPLE:
xo_open_container("system");
xo_emit("The host name is {:host-name}\n", hn);
xo_close_container("system");
XML:
&lt;system&gt;&lt;host-name&gt;foo&lt;/host-name&gt;&lt;/system&gt;
- </pre> <p id="doc_section_3_3_p_9">Section Contents: </p>
-<ul><li><a href="#lists-and-instances-2" title="Lists and Instances">Section 3.3.1</a></li></ul>
+ </pre> <p id="doc_section_5_3_p_9">Section Contents: </p>
+<ul><li><a href="#lists-and-instances-2" title="Lists and Instances">Section 5.3.1</a></li></ul>
<div class="content">
-<h3 id="doc_section_3_3_1">
+<h3 id="doc_section_5_3_1">
<div class="self-section-number">
-<a href="#doc_section_3_3_1">3.3.1</a> </div>
+<a href="#doc_section_5_3_1">5.3.1</a> </div>
<a id="lists-and-instances-2" href="#lists-and-instances-2">Lists and Instances</a>
</h3>
-<p id="doc_section_3_3_1_p_1">Lists are sequences of instances of homogeneous data objects. Two distinct levels of calls are needed to represent them in our output styles. Calls must be made to open and close a list, and for each instance of data in that list, calls must be make to open and close that instance.</p>
-<p id="doc_section_3_3_1_p_2">The name given to all calls must be identical, and it is strongly suggested that the name be singular, not plural, as a matter of style and usage expectations.</p>
-<div id="doc_figure_u.109"></div> <pre>
+<p id="doc_section_5_3_1_p_1">Lists are sequences of instances of homogeneous data objects. Two distinct levels of calls are needed to represent them in our output styles. Calls must be made to open and close a list, and for each instance of data in that list, calls must be make to open and close that instance.</p>
+<p id="doc_section_5_3_1_p_2">The name given to all calls must be identical, and it is strongly suggested that the name be singular, not plural, as a matter of style and usage expectations.</p>
+<div id="doc_figure_u.115"></div> <pre>
EXAMPLE:
xo_open_list("user");
for (i = 0; i &lt; num_users; i++) {
@@ -24941,68 +25111,68 @@ jQuery(function ($) {
</pre> </div>
</div>
<div class="content">
-<h2 id="doc_section_3_4">
+<h2 id="doc_section_5_4">
<div class="self-section-number">
-<a href="#doc_section_3_4">3.4</a> </div>
+<a href="#doc_section_5_4">5.4</a> </div>
<a id="support-functions" href="#support-functions">Support Functions</a>
</h2>
-<p id="doc_section_3_4_p_1">Section Contents: </p>
+<p id="doc_section_5_4_p_1">Section Contents: </p>
<ul>
-<li><a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 3.4.1</a></li>
-<li><a href="#xo_set_program" title="xo_set_program">Section 3.4.2</a></li>
-<li><a href="#xo_set_version" title="xo_set_version">Section 3.4.3</a></li>
-<li><a href="#info" title="Field Information (xo_info_t)">Section 3.4.4</a></li>
-<li><a href="#memory-allocation" title="Memory Allocation">Section 3.4.5</a></li>
-<li><a href="#LIBXO_OPTIONS" title="LIBXO_OPTIONS">Section 3.4.6</a></li>
-<li><a href="#errors-warnings-and-messages" title="Errors, Warnings, and Messages">Section 3.4.7</a></li>
-<li><a href="#xo_error" title="xo_error">Section 3.4.8</a></li>
-<li><a href="#xo_no_setlocale" title="xo_no_setlocale">Section 3.4.9</a></li>
+<li><a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 5.4.1</a></li>
+<li><a href="#xo_set_program" title="xo_set_program">Section 5.4.2</a></li>
+<li><a href="#xo_set_version" title="xo_set_version">Section 5.4.3</a></li>
+<li><a href="#info" title="Field Information (xo_info_t)">Section 5.4.4</a></li>
+<li><a href="#memory-allocation" title="Memory Allocation">Section 5.4.5</a></li>
+<li><a href="#LIBXO_OPTIONS" title="LIBXO_OPTIONS">Section 5.4.6</a></li>
+<li><a href="#errors-warnings-and-messages" title="Errors, Warnings, and Messages">Section 5.4.7</a></li>
+<li><a href="#xo_error" title="xo_error">Section 5.4.8</a></li>
+<li><a href="#xo_no_setlocale" title="xo_no_setlocale">Section 5.4.9</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_3_4_1">
+<h3 id="doc_section_5_4_1">
<div class="self-section-number">
-<a href="#doc_section_3_4_1">3.4.1</a> </div>
+<a href="#doc_section_5_4_1">5.4.1</a> </div>
<a id="xo_parse_args" href="#xo_parse_args">Parsing Command-line Arguments (xo_parse_args)</a>
</h3>
-<p id="doc_section_3_4_1_p_1">The xo_parse_args() function is used to process a program's arguments. libxo-specific options are processed and removed from the argument list so the calling application does not need to process them. If successful, a new value for argc is returned. On failure, a message it emitted and -1 is returned.</p>
-<div id="doc_figure_u.110"></div> <pre>
+<p id="doc_section_5_4_1_p_1">The xo_parse_args() function is used to process a program's arguments. libxo-specific options are processed and removed from the argument list so the calling application does not need to process them. If successful, a new value for argc is returned. On failure, a message it emitted and -1 is returned.</p>
+<div id="doc_figure_u.116"></div> <pre>
argc = xo_parse_args(argc, argv);
if (argc &lt; 0)
exit(EXIT_FAILURE);
- </pre> <p id="doc_section_3_4_1_p_3">Following the call to xo_parse_args, the application can process the remaining arguments in a normal manner. See <a href="#command-line-arguments" title="Command-line Arguments">Section 2.4</a> for a description of valid arguments.</p>
+ </pre> <p id="doc_section_5_4_1_p_3">Following the call to xo_parse_args, the application can process the remaining arguments in a normal manner. See <a href="#options" title="Command-line Arguments">Section 4</a> for a description of valid arguments.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_4_2">
+<h3 id="doc_section_5_4_2">
<div class="self-section-number">
-<a href="#doc_section_3_4_2">3.4.2</a> </div>
+<a href="#doc_section_5_4_2">5.4.2</a> </div>
<a id="xo_set_program" href="#xo_set_program">xo_set_program</a>
</h3>
-<p id="doc_section_3_4_2_p_1">The xo_set_program function sets name of the program as reported by functions like xo_failure, xo_warn, xo_err, etc. The program name is initialized by xo_parse_args, but subsequent calls to xo_set_program can override this value.</p>
-<div id="doc_figure_u.111"></div> <pre>
+<p id="doc_section_5_4_2_p_1">The xo_set_program function sets name of the program as reported by functions like xo_failure, xo_warn, xo_err, etc. The program name is initialized by xo_parse_args, but subsequent calls to xo_set_program can override this value.</p>
+<div id="doc_figure_u.117"></div> <pre>
xo_set_program(argv[0]);
- </pre> <p id="doc_section_3_4_2_p_3">Note that the value is not copied, so the memory passed to xo_set_program (and xo_parse_args) must be maintained by the caller.</p>
+ </pre> <p id="doc_section_5_4_2_p_3">Note that the value is not copied, so the memory passed to xo_set_program (and xo_parse_args) must be maintained by the caller.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_4_3">
+<h3 id="doc_section_5_4_3">
<div class="self-section-number">
-<a href="#doc_section_3_4_3">3.4.3</a> </div>
+<a href="#doc_section_5_4_3">5.4.3</a> </div>
<a id="xo_set_version" href="#xo_set_version">xo_set_version</a>
</h3>
-<p id="doc_section_3_4_3_p_1">The xo_set_version function records a version number to be emitted as part of the data for encoding styles (XML and JSON). This version number is suitable for tracking changes in the content, allowing a user of the data to discern which version of the data model is in use.</p>
-<div id="doc_figure_u.112"></div> <pre>
+<p id="doc_section_5_4_3_p_1">The xo_set_version function records a version number to be emitted as part of the data for encoding styles (XML and JSON). This version number is suitable for tracking changes in the content, allowing a user of the data to discern which version of the data model is in use.</p>
+<div id="doc_figure_u.118"></div> <pre>
void xo_set_version (const char *version);
void xo_set_version_h (xo_handle_t *xop, const char *version);
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_4_4">
+<h3 id="doc_section_5_4_4">
<div class="self-section-number">
-<a href="#doc_section_3_4_4">3.4.4</a> </div>
+<a href="#doc_section_5_4_4">5.4.4</a> </div>
<a id="info" href="#info">Field Information (xo_info_t)</a>
</h3>
-<p id="doc_section_3_4_4_p_1">HTML data can include additional information in attributes that begin with "data&#8209;". To enable this, three things must occur:</p>
-<p id="doc_section_3_4_4_p_2">First the application must build an array of xo_info_t structures, one per tag. The array must be sorted by name, since libxo uses a binary search to find the entry that matches names from format instructions.</p>
-<p id="doc_section_3_4_4_p_3">Second, the application must inform libxo about this information using the xo_set_info() call:</p>
-<div id="doc_figure_u.113"></div> <pre>
+<p id="doc_section_5_4_4_p_1">HTML data can include additional information in attributes that begin with "data&#8209;". To enable this, three things must occur:</p>
+<p id="doc_section_5_4_4_p_2">First the application must build an array of xo_info_t structures, one per tag. The array must be sorted by name, since libxo uses a binary search to find the entry that matches names from format instructions.</p>
+<p id="doc_section_5_4_4_p_3">Second, the application must inform libxo about this information using the xo_set_info() call:</p>
+<div id="doc_figure_u.119"></div> <pre>
typedef struct xo_info_s {
const char *xi_name; /* Name of the element */
const char *xi_type; /* Type of field */
@@ -25010,9 +25180,9 @@ jQuery(function ($) {
} xo_info_t;
void xo_set_info (xo_handle_t *xop, xo_info_t *infop, int count);
- </pre> <p id="doc_section_3_4_4_p_5">Like other libxo calls, passing NULL for the handle tells libxo to use the default handle.</p>
-<p id="doc_section_3_4_4_p_6">If the count is -1, libxo will count the elements of infop, but there must be an empty element at the end. More typically, the number is known to the application:</p>
-<div id="doc_figure_u.114"></div> <pre>
+ </pre> <p id="doc_section_5_4_4_p_5">Like other libxo calls, passing NULL for the handle tells libxo to use the default handle.</p>
+<p id="doc_section_5_4_4_p_6">If the count is -1, libxo will count the elements of infop, but there must be an empty element at the end. More typically, the number is known to the application:</p>
+<div id="doc_figure_u.120"></div> <pre>
xo_info_t info[] = {
{ "in-stock", "number", "Number of items in stock" },
{ "name", "string", "Name of the item" },
@@ -25023,116 +25193,59 @@ jQuery(function ($) {
int info_count = (sizeof(info) / sizeof(info[0]));
...
xo_set_info(NULL, info, info_count);
- </pre> <p id="doc_section_3_4_4_p_8">Third, the emission of info must be triggered with the XOF_INFO flag using either the xo_set_flags() function or the "&#8209;&#8209;libxo=info" command line argument.</p>
-<p id="doc_section_3_4_4_p_9">The type and help values, if present, are emitted as the "data&#8209;type" and "data&#8209;help" attributes:</p>
-<div id="doc_figure_u.115"></div> <pre>
+ </pre> <p id="doc_section_5_4_4_p_8">Third, the emission of info must be triggered with the XOF_INFO flag using either the xo_set_flags() function or the "&#8209;&#8209;libxo=info" command line argument.</p>
+<p id="doc_section_5_4_4_p_9">The type and help values, if present, are emitted as the "data&#8209;type" and "data&#8209;help" attributes:</p>
+<div id="doc_figure_u.121"></div> <pre>
&lt;div class="data" data-tag="sku" data-type="string"
data-help="Stock Keeping Unit"&gt;GRO-000-533&lt;/div&gt;
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_4_5">
+<h3 id="doc_section_5_4_5">
<div class="self-section-number">
-<a href="#doc_section_3_4_5">3.4.5</a> </div>
+<a href="#doc_section_5_4_5">5.4.5</a> </div>
<a id="memory-allocation" href="#memory-allocation">Memory Allocation</a>
</h3>
-<p id="doc_section_3_4_5_p_1">The xo_set_allocator function allows libxo to be used in environments where the standard realloc() and free() functions are not available.</p>
-<div id="doc_figure_u.116"></div> <pre>
+<p id="doc_section_5_4_5_p_1">The xo_set_allocator function allows libxo to be used in environments where the standard realloc() and free() functions are not available.</p>
+<div id="doc_figure_u.122"></div> <pre>
void xo_set_allocator (xo_realloc_func_t realloc_func,
xo_free_func_t free_func);
- </pre> <p id="doc_section_3_4_5_p_3">realloc_func should expect the same arguments as realloc(3) and return a pointer to memory following the same convention. free_func will receive the same argument as free(3) and should release it, as appropriate for the environment.</p>
-<p id="doc_section_3_4_5_p_4">By default, the standard realloc() and free() functions are used.</p>
+ </pre> <p id="doc_section_5_4_5_p_3">realloc_func should expect the same arguments as realloc(3) and return a pointer to memory following the same convention. free_func will receive the same argument as free(3) and should release it, as appropriate for the environment.</p>
+<p id="doc_section_5_4_5_p_4">By default, the standard realloc() and free() functions are used.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_4_6">
+<h3 id="doc_section_5_4_6">
<div class="self-section-number">
-<a href="#doc_section_3_4_6">3.4.6</a> </div>
+<a href="#doc_section_5_4_6">5.4.6</a> </div>
<a id="LIBXO_OPTIONS" href="#LIBXO_OPTIONS">LIBXO_OPTIONS</a>
</h3>
-<p id="doc_section_3_4_6_p_1">The environment variable "LIBXO_OPTIONS" can be set to a string of options:</p>
-<div id="doc_table_u.15"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
-<thead><tr>
-<th class="left">Option</th>
-<th class="left">Action</th>
-</tr></thead>
-<tbody>
-<tr>
-<td>c</td>
-<td>Enable color/effects for TEXT/HTML</td>
-</tr>
-<tr>
-<td>F</td>
-<td>Force line-buffered flushing</td>
-</tr>
-<tr>
-<td>H</td>
-<td>Enable HTML output (XO_STYLE_HTML)</td>
-</tr>
-<tr>
-<td>I</td>
-<td>Enable info output (XOF_INFO)</td>
-</tr>
-<tr>
-<td>i&lt;num&gt;</td>
-<td>Indent by &lt;number&gt;</td>
-</tr>
-<tr>
-<td>J</td>
-<td>Enable JSON output (XO_STYLE_JSON)</td>
-</tr>
-<tr>
-<td>k</td>
-<td>Add keys to XPATH expressions in HTML</td>
-</tr>
-<tr>
-<td>n</td>
-<td>Disable humanization (TEXT, HTML)</td>
-</tr>
-<tr>
-<td>P</td>
-<td>Enable pretty-printed output (XOF_PRETTY)</td>
-</tr>
-<tr>
-<td>T</td>
-<td>Enable text output (XO_STYLE_TEXT)</td>
-</tr>
-<tr>
-<td>U</td>
-<td>Add units to HTML output</td>
-</tr>
-<tr>
-<td>u</td>
-<td>Change "-"s to "_"s in element names (JSON)</td>
-</tr>
-<tr>
-<td>W</td>
-<td>Enable warnings (XOF_WARN)</td>
-</tr>
-<tr>
-<td>X</td>
-<td>Enable XML output (XO_STYLE_XML)</td>
-</tr>
-<tr>
-<td>x</td>
-<td>Enable XPath data (XOF_XPATH)</td>
-</tr>
-</tbody>
-</table></div>
-<p id="doc_section_3_4_6_p_2">For example, warnings can be enabled by:</p>
-<div id="doc_figure_u.117"></div> <pre>
- % env LIBXO_OPTIONS=W my-app
- </pre> <p id="doc_section_3_4_6_p_4">Complete HTML output can be generated with:</p>
-<div id="doc_figure_u.118"></div> <pre>
- % env LIBXO_OPTIONS=HXI my-app
- </pre> <p id="doc_section_3_4_6_p_6">Since environment variables are inherited, child processes will have the same options, which may be undesirable, making the use of the "&#8209;&#8209;libxo" option is preferable in most situations.</p>
+<p id="doc_section_5_4_6_p_1">The environment variable "LIBXO_OPTIONS" can be set to a subset of libxo options, including:</p>
+<p id="doc_section_5_4_6_p_2"> </p>
+<ul>
+<li>color</li>
+<li>flush</li>
+<li>flush-line</li>
+<li>no-color</li>
+<li>no-humanize</li>
+<li>no-locale</li>
+<li>no-retain</li>
+<li>pretty</li>
+<li>retain</li>
+<li>underscores</li>
+<li>warn</li>
+</ul>
+<p id="doc_section_5_4_6_p_3">For example, warnings can be enabled by:</p>
+<div id="doc_figure_u.123"></div> <pre>
+ % env LIBXO_OPTIONS=warn my-app
+ </pre> <p id="doc_section_5_4_6_p_5">Since environment variables are inherited, child processes will have the same options, which may be undesirable, making the use of the "&#8209;&#8209;libxo" option is preferable in most situations.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_4_7">
+<h3 id="doc_section_5_4_7">
<div class="self-section-number">
-<a href="#doc_section_3_4_7">3.4.7</a> </div>
+<a href="#doc_section_5_4_7">5.4.7</a> </div>
<a id="errors-warnings-and-messages" href="#errors-warnings-and-messages">Errors, Warnings, and Messages</a>
</h3>
-<p id="doc_section_3_4_7_p_1">Many programs make use of the standard library functions err() and warn() to generate errors and warnings for the user. libxo wants to pass that information via the current output style, and provides compatible functions to allow this:</p>
-<div id="doc_figure_u.119"></div> <pre>
+<p id="doc_section_5_4_7_p_1">Many programs make use of the standard library functions err() and warn() to generate errors and warnings for the user. libxo wants to pass that information via the current output style, and provides compatible functions to allow this:</p>
+<div id="doc_figure_u.124"></div> <pre>
void xo_warn (const char *fmt, ...);
void xo_warnx (const char *fmt, ...);
void xo_warn_c (int code, const char *fmt, ...);
@@ -25147,20 +25260,20 @@ jQuery(function ($) {
const char *fmt, ...);
void xo_message_hcv (xo_handle_t *xop, int code,
const char *fmt, va_list vap);
- </pre> <p id="doc_section_3_4_7_p_3">These functions display the program name, a colon, a formatted message based on the arguments, and then optionally a colon and an error message associated with either "errno" or the "code" parameter.</p>
-<div id="doc_figure_u.120"></div> <pre>
+ </pre> <p id="doc_section_5_4_7_p_3">These functions display the program name, a colon, a formatted message based on the arguments, and then optionally a colon and an error message associated with either "errno" or the "code" parameter.</p>
+<div id="doc_figure_u.125"></div> <pre>
EXAMPLE:
if (open(filename, O_RDONLY) &lt; 0)
xo_err(1, "cannot open file '%s'", filename);
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_4_8">
+<h3 id="doc_section_5_4_8">
<div class="self-section-number">
-<a href="#doc_section_3_4_8">3.4.8</a> </div>
+<a href="#doc_section_5_4_8">5.4.8</a> </div>
<a id="xo_error" href="#xo_error">xo_error</a>
</h3>
-<p id="doc_section_3_4_8_p_1">The xo_error function can be used for generic errors that should be reported over the handle, rather than to stderr. The xo_error function behaves like xo_err for TEXT and HTML output styles, but puts the error into XML or JSON elements:</p>
-<div id="doc_figure_u.121"></div> <pre>
+<p id="doc_section_5_4_8_p_1">The xo_error function can be used for generic errors that should be reported over the handle, rather than to stderr. The xo_error function behaves like xo_err for TEXT and HTML output styles, but puts the error into XML or JSON elements:</p>
+<div id="doc_figure_u.126"></div> <pre>
EXAMPLE::
xo_error("Does not %s", "compute");
XML::
@@ -25169,29 +25282,29 @@ jQuery(function ($) {
"error": { "message": "Does not compute" }
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_4_9">
+<h3 id="doc_section_5_4_9">
<div class="self-section-number">
-<a href="#doc_section_3_4_9">3.4.9</a> </div>
+<a href="#doc_section_5_4_9">5.4.9</a> </div>
<a id="xo_no_setlocale" href="#xo_no_setlocale">xo_no_setlocale</a>
</h3>
-<p id="doc_section_3_4_9_p_1">libxo automatically initializes the locale based on setting of the environment variables LC_CTYPE, LANG, and LC_ALL. The first of this list of variables is used and if none of the variables, the locale defaults to "UTF&#8209;8". The caller may wish to avoid this behavior, and can do so by calling the xo_no_setlocale() function.</p>
-<div id="doc_figure_u.122"></div> <pre>
+<p id="doc_section_5_4_9_p_1">libxo automatically initializes the locale based on setting of the environment variables LC_CTYPE, LANG, and LC_ALL. The first of this list of variables is used and if none of the variables, the locale defaults to "UTF&#8209;8". The caller may wish to avoid this behavior, and can do so by calling the xo_no_setlocale() function.</p>
+<div id="doc_figure_u.127"></div> <pre>
void xo_no_setlocale (void);
</pre> </div>
</div>
<div class="content">
-<h2 id="doc_section_3_5">
+<h2 id="doc_section_5_5">
<div class="self-section-number">
-<a href="#doc_section_3_5">3.5</a> </div>
+<a href="#doc_section_5_5">5.5</a> </div>
<a id="emitting-syslog-messages" href="#emitting-syslog-messages">Emitting syslog Messages</a>
</h2>
-<p id="doc_section_3_5_p_1">syslog is the system logging facility used throughout the unix world. Messages are sent from commands, applications, and daemons to a hierarchy of servers, where they are filtered, saved, and forwarded based on configuration behaviors.</p>
-<p id="doc_section_3_5_p_2">syslog is an older protocol, originally documented only in source code. By the time RFC 3164 published, variation and mutation left the leading "&lt;pri&gt;" string as only common content. RFC 5424 defines a new version (version 1) of syslog and introduces structured data into the messages. Structured data is a set of name/value pairs transmitted distinctly alongside the traditional text message, allowing filtering on precise values instead of regular expressions.</p>
-<p id="doc_section_3_5_p_3">These name/value pairs are scoped by a two-part identifier; an enterprise identifier names the party responsible for the message catalog and a name identifying that message. Enterprise IDs are defined by IANA, the Internet Assigned Numbers Authority:</p>
-<p id="doc_section_3_5_p_4">https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers</p>
-<p id="doc_section_3_5_p_5">Use the <a href="#xo_set_syslog_enterprise_id" title="xo_set_syslog_enterprise_id">Section 3.5.3.5</a>() function to set the Enterprise ID, as needed.</p>
-<p id="doc_section_3_5_p_6">The message name should follow the conventions in <a href="#good-field-names" title="What makes a good field name?">Section 8.1.3</a>, as should the fields within the message.</p>
-<div id="doc_figure_u.123"></div> <pre>
+<p id="doc_section_5_5_p_1">syslog is the system logging facility used throughout the unix world. Messages are sent from commands, applications, and daemons to a hierarchy of servers, where they are filtered, saved, and forwarded based on configuration behaviors.</p>
+<p id="doc_section_5_5_p_2">syslog is an older protocol, originally documented only in source code. By the time RFC 3164 published, variation and mutation left the leading "&lt;pri&gt;" string as only common content. RFC 5424 defines a new version (version 1) of syslog and introduces structured data into the messages. Structured data is a set of name/value pairs transmitted distinctly alongside the traditional text message, allowing filtering on precise values instead of regular expressions.</p>
+<p id="doc_section_5_5_p_3">These name/value pairs are scoped by a two-part identifier; an enterprise identifier names the party responsible for the message catalog and a name identifying that message. Enterprise IDs are defined by IANA, the Internet Assigned Numbers Authority:</p>
+<p id="doc_section_5_5_p_4">https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers</p>
+<p id="doc_section_5_5_p_5">Use the <a href="#xo_set_syslog_enterprise_id" title="xo_set_syslog_enterprise_id">Section 5.5.3.5</a>() function to set the Enterprise ID, as needed.</p>
+<p id="doc_section_5_5_p_6">The message name should follow the conventions in <a href="#good-field-names" title="What makes a good field name?">Section 10.1.3</a>, as should the fields within the message.</p>
+<div id="doc_figure_u.128"></div> <pre>
/* Both of these calls are optional */
xo_set_syslog_enterprise_id(32473);
xo_open_log("my-program", 0, LOG_DAEMON);
@@ -25205,26 +25318,26 @@ jQuery(function ($) {
xo_syslog(LOG_INFO, "poofd-invalid-state",
"state {:current/%u} is invalid {:connection/%u}",
state, conn);
- </pre> <p id="doc_section_3_5_p_8">The developer should be aware that the message name may be used in the future to allow access to further information, including documentation. Care should be taken to choose quality, descriptive names.</p>
-<p id="doc_section_3_5_p_9">Section Contents: </p>
+ </pre> <p id="doc_section_5_5_p_8">The developer should be aware that the message name may be used in the future to allow access to further information, including documentation. Care should be taken to choose quality, descriptive names.</p>
+<p id="doc_section_5_5_p_9">Section Contents: </p>
<ul>
-<li><a href="#priority" title="Priority, Facility, and Flags">Section 3.5.1</a></li>
-<li><a href="#xo_syslog" title="xo_syslog">Section 3.5.2</a></li>
-<li><a href="#support-functions-2" title="Support functions">Section 3.5.3</a></li>
+<li><a href="#priority" title="Priority, Facility, and Flags">Section 5.5.1</a></li>
+<li><a href="#xo_syslog" title="xo_syslog">Section 5.5.2</a></li>
+<li><a href="#support-functions-2" title="Support functions">Section 5.5.3</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_3_5_1">
+<h3 id="doc_section_5_5_1">
<div class="self-section-number">
-<a href="#doc_section_3_5_1">3.5.1</a> </div>
+<a href="#doc_section_5_5_1">5.5.1</a> </div>
<a id="priority" href="#priority">Priority, Facility, and Flags</a>
</h3>
-<p id="doc_section_3_5_1_p_1">The xo_syslog, xo_vsyslog, and xo_open_log functions accept a set of flags which provide the priority of the message, the source facility, and some additional features. These values are OR'd together to create a single integer argument:</p>
-<div id="doc_figure_u.124"></div> <pre>
+<p id="doc_section_5_5_1_p_1">The xo_syslog, xo_vsyslog, and xo_open_log functions accept a set of flags which provide the priority of the message, the source facility, and some additional features. These values are OR'd together to create a single integer argument:</p>
+<div id="doc_figure_u.129"></div> <pre>
xo_syslog(LOG_ERR | LOG_AUTH, "login-failed",
"Login failed; user '{:user}' from host '{:address}'",
user, addr);
- </pre> <p id="doc_section_3_5_1_p_3">These values are defined in &lt;syslog.h&gt;.</p>
-<p id="doc_section_3_5_1_p_4">The priority value indicates the importance and potential impact of each message.</p>
+ </pre> <p id="doc_section_5_5_1_p_3">These values are defined in &lt;syslog.h&gt;.</p>
+<p id="doc_section_5_5_1_p_4">The priority value indicates the importance and potential impact of each message.</p>
<div id="doc_table_u.16"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Priority</th>
@@ -25265,7 +25378,7 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_3_5_1_p_5">The facility value indicates the source of message, in fairly generic terms.</p>
+<p id="doc_section_5_5_1_p_5">The facility value indicates the source of message, in fairly generic terms.</p>
<div id="doc_table_u.17"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Facility</th>
@@ -25330,7 +25443,7 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_3_5_1_p_6">In addition to the values listed above, xo_open_log accepts a set of addition flags requesting specific behaviors.</p>
+<p id="doc_section_5_5_1_p_6">In addition to the values listed above, xo_open_log accepts a set of addition flags requesting specific behaviors.</p>
<div id="doc_table_u.18"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Flag</th>
@@ -25357,14 +25470,14 @@ jQuery(function ($) {
</table></div>
</div>
<div class="content">
-<h3 id="doc_section_3_5_2">
+<h3 id="doc_section_5_5_2">
<div class="self-section-number">
-<a href="#doc_section_3_5_2">3.5.2</a> </div>
+<a href="#doc_section_5_5_2">5.5.2</a> </div>
<a id="xo_syslog" href="#xo_syslog">xo_syslog</a>
</h3>
-<p id="doc_section_3_5_2_p_1">Use the xo_syslog function to generate syslog messages by calling it with a log priority and facility, a message name, a format string, and a set of arguments. The priority/facility argument are discussed above, as is the message name.</p>
-<p id="doc_section_3_5_2_p_2">The format string follows the same conventions as xo_emit's format string, with each field being rendered as an SD-PARAM pair.</p>
-<div id="doc_figure_u.125"></div> <pre>
+<p id="doc_section_5_5_2_p_1">Use the xo_syslog function to generate syslog messages by calling it with a log priority and facility, a message name, a format string, and a set of arguments. The priority/facility argument are discussed above, as is the message name.</p>
+<p id="doc_section_5_5_2_p_2">The format string follows the same conventions as xo_emit's format string, with each field being rendered as an SD-PARAM pair.</p>
+<div id="doc_figure_u.130"></div> <pre>
xo_syslog(LOG_ERR, "poofd-missing-file",
"'{:filename}' not found: {:error/%m}", filename);
@@ -25373,27 +25486,27 @@ jQuery(function ($) {
found: Permission denied
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_5_3">
+<h3 id="doc_section_5_5_3">
<div class="self-section-number">
-<a href="#doc_section_3_5_3">3.5.3</a> </div>
+<a href="#doc_section_5_5_3">5.5.3</a> </div>
<a id="support-functions-2" href="#support-functions-2">Support functions</a>
</h3>
-<p id="doc_section_3_5_3_p_1">Section Contents: </p>
+<p id="doc_section_5_5_3_p_1">Section Contents: </p>
<ul>
-<li><a href="#xo_vsyslog" title="xo_vsyslog">Section 3.5.3.1</a></li>
-<li><a href="#xo_open_log" title="xo_open_log">Section 3.5.3.2</a></li>
-<li><a href="#xo_close_log" title="xo_close_log">Section 3.5.3.3</a></li>
-<li><a href="#xo_set_logmask" title="xo_set_logmask">Section 3.5.3.4</a></li>
-<li><a href="#xo_set_syslog_enterprise_id" title="xo_set_syslog_enterprise_id">Section 3.5.3.5</a></li>
+<li><a href="#xo_vsyslog" title="xo_vsyslog">Section 5.5.3.1</a></li>
+<li><a href="#xo_open_log" title="xo_open_log">Section 5.5.3.2</a></li>
+<li><a href="#xo_close_log" title="xo_close_log">Section 5.5.3.3</a></li>
+<li><a href="#xo_set_logmask" title="xo_set_logmask">Section 5.5.3.4</a></li>
+<li><a href="#xo_set_syslog_enterprise_id" title="xo_set_syslog_enterprise_id">Section 5.5.3.5</a></li>
</ul>
<div class="content">
-<h4 id="doc_section_3_5_3_1">
+<h4 id="doc_section_5_5_3_1">
<div class="self-section-number">
-<a href="#doc_section_3_5_3_1">3.5.3.1</a> </div>
+<a href="#doc_section_5_5_3_1">5.5.3.1</a> </div>
<a id="xo_vsyslog" href="#xo_vsyslog">xo_vsyslog</a>
</h4>
-<p id="doc_section_3_5_3_1_p_1">xo_vsyslog is identical in function to xo_syslog, but takes the set of arguments using a va_list.</p>
-<div id="doc_figure_u.126"></div> <pre>
+<p id="doc_section_5_5_3_1_p_1">xo_vsyslog is identical in function to xo_syslog, but takes the set of arguments using a va_list.</p>
+<div id="doc_figure_u.131"></div> <pre>
void my_log (const char *name, const char *fmt, ...)
{
va_list vap;
@@ -25403,35 +25516,35 @@ jQuery(function ($) {
}
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_5_3_2">
+<h4 id="doc_section_5_5_3_2">
<div class="self-section-number">
-<a href="#doc_section_3_5_3_2">3.5.3.2</a> </div>
+<a href="#doc_section_5_5_3_2">5.5.3.2</a> </div>
<a id="xo_open_log" href="#xo_open_log">xo_open_log</a>
</h4>
-<p id="doc_section_3_5_3_2_p_1">xo_open_log functions similar to openlog(3), allowing customization of the program name, the log facility number, and the additional option flags described in <a href="#priority" title="Priority, Facility, and Flags">Section 3.5.1</a>.</p>
-<div id="doc_figure_u.127"></div> <pre>
+<p id="doc_section_5_5_3_2_p_1">xo_open_log functions similar to openlog(3), allowing customization of the program name, the log facility number, and the additional option flags described in <a href="#priority" title="Priority, Facility, and Flags">Section 5.5.1</a>.</p>
+<div id="doc_figure_u.132"></div> <pre>
void
xo_open_log (const char *ident, int logopt, int facility);
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_5_3_3">
+<h4 id="doc_section_5_5_3_3">
<div class="self-section-number">
-<a href="#doc_section_3_5_3_3">3.5.3.3</a> </div>
+<a href="#doc_section_5_5_3_3">5.5.3.3</a> </div>
<a id="xo_close_log" href="#xo_close_log">xo_close_log</a>
</h4>
-<p id="doc_section_3_5_3_3_p_1">xo_close_log functions similar to closelog(3), closing the log file and releasing any associated resources.</p>
-<div id="doc_figure_u.128"></div> <pre>
+<p id="doc_section_5_5_3_3_p_1">xo_close_log functions similar to closelog(3), closing the log file and releasing any associated resources.</p>
+<div id="doc_figure_u.133"></div> <pre>
void
xo_close_log (void);
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_5_3_4">
+<h4 id="doc_section_5_5_3_4">
<div class="self-section-number">
-<a href="#doc_section_3_5_3_4">3.5.3.4</a> </div>
+<a href="#doc_section_5_5_3_4">5.5.3.4</a> </div>
<a id="xo_set_logmask" href="#xo_set_logmask">xo_set_logmask</a>
</h4>
-<p id="doc_section_3_5_3_4_p_1">xo_set_logmask function similar to setlogmask(3), restricting the set of generated log event to those whose associated bit is set in maskpri. Use LOG_MASK(pri) to find the appropriate bit, or LOG_UPTO(toppri) to create a mask for all priorities up to and including toppri.</p>
-<div id="doc_figure_u.129"></div> <pre>
+<p id="doc_section_5_5_3_4_p_1">xo_set_logmask function similar to setlogmask(3), restricting the set of generated log event to those whose associated bit is set in maskpri. Use LOG_MASK(pri) to find the appropriate bit, or LOG_UPTO(toppri) to create a mask for all priorities up to and including toppri.</p>
+<div id="doc_figure_u.134"></div> <pre>
int
xo_set_logmask (int maskpri);
@@ -25439,85 +25552,85 @@ jQuery(function ($) {
setlogmask(LOG_UPTO(LOG_WARN));
</pre> </div>
<div class="content">
-<h4 id="doc_section_3_5_3_5">
+<h4 id="doc_section_5_5_3_5">
<div class="self-section-number">
-<a href="#doc_section_3_5_3_5">3.5.3.5</a> </div>
+<a href="#doc_section_5_5_3_5">5.5.3.5</a> </div>
<a id="xo_set_syslog_enterprise_id" href="#xo_set_syslog_enterprise_id">xo_set_syslog_enterprise_id</a>
</h4>
-<p id="doc_section_3_5_3_5_p_1">Use the xo_set_syslog_enterprise_id to supply a platform- or application-specific enterprise id. This value is used in any future syslog messages.</p>
-<p id="doc_section_3_5_3_5_p_2">Ideally, the operating system should supply a default value via the "kern.syslog.enterprise_id" sysctl value. Lacking that, the application should provide a suitable value.</p>
-<div id="doc_figure_u.130"></div> <pre>
+<p id="doc_section_5_5_3_5_p_1">Use the xo_set_syslog_enterprise_id to supply a platform- or application-specific enterprise id. This value is used in any future syslog messages.</p>
+<p id="doc_section_5_5_3_5_p_2">Ideally, the operating system should supply a default value via the "kern.syslog.enterprise_id" sysctl value. Lacking that, the application should provide a suitable value.</p>
+<div id="doc_figure_u.135"></div> <pre>
void
xo_set_syslog_enterprise_id (unsigned short eid);
- </pre> <p id="doc_section_3_5_3_5_p_4">Enterprise IDs are administered by IANA, the Internet Assigned Number Authority. The complete list is EIDs on their web site:</p>
-<p id="doc_section_3_5_3_5_p_5"> <a href="https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers">https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers</a></p>
-<p id="doc_section_3_5_3_5_p_6">New EIDs can be requested from IANA using the following page:</p>
-<p id="doc_section_3_5_3_5_p_7"> <a href="http://pen.iana.org/pen/PenApplication.page">http://pen.iana.org/pen/PenApplication.page</a></p>
-<p id="doc_section_3_5_3_5_p_8">Each software development organization that defines a set of syslog messages should register their own EID and use that value in their software to ensure that messages can be uniquely identified by the combination of EID + message name.</p>
+ </pre> <p id="doc_section_5_5_3_5_p_4">Enterprise IDs are administered by IANA, the Internet Assigned Number Authority. The complete list is EIDs on their web site:</p>
+<p id="doc_section_5_5_3_5_p_5"> <a href="https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers">https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers</a></p>
+<p id="doc_section_5_5_3_5_p_6">New EIDs can be requested from IANA using the following page:</p>
+<p id="doc_section_5_5_3_5_p_7"> <a href="http://pen.iana.org/pen/PenApplication.page">http://pen.iana.org/pen/PenApplication.page</a></p>
+<p id="doc_section_5_5_3_5_p_8">Each software development organization that defines a set of syslog messages should register their own EID and use that value in their software to ensure that messages can be uniquely identified by the combination of EID + message name.</p>
</div>
</div>
</div>
<div class="content">
-<h2 id="doc_section_3_6">
+<h2 id="doc_section_5_6">
<div class="self-section-number">
-<a href="#doc_section_3_6">3.6</a> </div>
+<a href="#doc_section_5_6">5.6</a> </div>
<a id="creating-custom-encoders" href="#creating-custom-encoders">Creating Custom Encoders</a>
</h2>
-<p id="doc_section_3_6_p_1">The number of encoding schemes in current use is staggering, with new and distinct schemes appearing daily. While libxo provide XML, JSON, HMTL, and text natively, there are requirements for other encodings.</p>
-<p id="doc_section_3_6_p_2">Rather than bake support for all possible encoders into libxo, the API allows them to be defined externally. libxo can then interfaces with these encoding modules using a simplistic API. libxo processes all functions calls, handles state transitions, performs all formatting, and then passes the results as operations to a customized encoding function, which implements specific encoding logic as required. This means your encoder doesn't need to detect errors with unbalanced open/close operations but can rely on libxo to pass correct data.</p>
-<p id="doc_section_3_6_p_3">By making a simple API, libxo internals are not exposed, insulating the encoder and the library from future or internal changes.</p>
-<p id="doc_section_3_6_p_4">The three elements of the API are:</p>
-<p id="doc_section_3_6_p_5"> </p>
+<p id="doc_section_5_6_p_1">The number of encoding schemes in current use is staggering, with new and distinct schemes appearing daily. While libxo provide XML, JSON, HMTL, and text natively, there are requirements for other encodings.</p>
+<p id="doc_section_5_6_p_2">Rather than bake support for all possible encoders into libxo, the API allows them to be defined externally. libxo can then interfaces with these encoding modules using a simplistic API. libxo processes all functions calls, handles state transitions, performs all formatting, and then passes the results as operations to a customized encoding function, which implements specific encoding logic as required. This means your encoder doesn't need to detect errors with unbalanced open/close operations but can rely on libxo to pass correct data.</p>
+<p id="doc_section_5_6_p_3">By making a simple API, libxo internals are not exposed, insulating the encoder and the library from future or internal changes.</p>
+<p id="doc_section_5_6_p_4">The three elements of the API are:</p>
+<p id="doc_section_5_6_p_5"> </p>
<ul>
<li>loading</li>
<li>initialization</li>
<li>operations</li>
</ul>
-<p id="doc_section_3_6_p_6">The following sections provide details about these topics.</p>
-<p id="doc_section_3_6_p_7">libxo source contain an encoder for Concise Binary Object Representation, aka CBOR (RFC 7049) which can be used as used as an example for the API.</p>
-<p id="doc_section_3_6_p_8">Section Contents: </p>
+<p id="doc_section_5_6_p_6">The following sections provide details about these topics.</p>
+<p id="doc_section_5_6_p_7">libxo source contain an encoder for Concise Binary Object Representation, aka CBOR (RFC 7049) which can be used as used as an example for the API.</p>
+<p id="doc_section_5_6_p_8">Section Contents: </p>
<ul>
-<li><a href="#loading-encoders" title="Loading Encoders">Section 3.6.1</a></li>
-<li><a href="#encoder-initialization" title="Encoder Initialization">Section 3.6.2</a></li>
-<li><a href="#operations" title="Operations">Section 3.6.3</a></li>
+<li><a href="#loading-encoders" title="Loading Encoders">Section 5.6.1</a></li>
+<li><a href="#encoder-initialization" title="Encoder Initialization">Section 5.6.2</a></li>
+<li><a href="#operations" title="Operations">Section 5.6.3</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_3_6_1">
+<h3 id="doc_section_5_6_1">
<div class="self-section-number">
-<a href="#doc_section_3_6_1">3.6.1</a> </div>
+<a href="#doc_section_5_6_1">5.6.1</a> </div>
<a id="loading-encoders" href="#loading-encoders">Loading Encoders</a>
</h3>
-<p id="doc_section_3_6_1_p_1">Encoders can be registered statically or discovered dynamically. Applications can choose to call the xo_encoder_register() function to explicitly register encoders, but more typically they are built as shared libraries, placed in the libxo/extensions directory, and loaded based on name. libxo looks for a file with the name of the encoder and an extension of ".enc". This can be a file or a symlink to the shared library file that supports the encoder.</p>
-<div id="doc_figure_u.131"></div> <pre>
+<p id="doc_section_5_6_1_p_1">Encoders can be registered statically or discovered dynamically. Applications can choose to call the xo_encoder_register() function to explicitly register encoders, but more typically they are built as shared libraries, placed in the libxo/extensions directory, and loaded based on name. libxo looks for a file with the name of the encoder and an extension of ".enc". This can be a file or a symlink to the shared library file that supports the encoder.</p>
+<div id="doc_figure_u.136"></div> <pre>
% ls -1 lib/libxo/extensions/*.enc
lib/libxo/extensions/cbor.enc
lib/libxo/extensions/test.enc
</pre> </div>
<div class="content">
-<h3 id="doc_section_3_6_2">
+<h3 id="doc_section_5_6_2">
<div class="self-section-number">
-<a href="#doc_section_3_6_2">3.6.2</a> </div>
+<a href="#doc_section_5_6_2">5.6.2</a> </div>
<a id="encoder-initialization" href="#encoder-initialization">Encoder Initialization</a>
</h3>
-<p id="doc_section_3_6_2_p_1">Each encoder must export a symbol used to access the library, which must have the following signature:</p>
-<div id="doc_figure_u.132"></div> <pre>
+<p id="doc_section_5_6_2_p_1">Each encoder must export a symbol used to access the library, which must have the following signature:</p>
+<div id="doc_figure_u.137"></div> <pre>
int xo_encoder_library_init (XO_ENCODER_INIT_ARGS);
- </pre> <p id="doc_section_3_6_2_p_3">XO_ENCODER_INIT_ARGS is a macro defined in xo_encoder.h that defines an argument called "arg", a pointer of the type xo_encoder_init_args_t. This structure contains two fields:</p>
-<p id="doc_section_3_6_2_p_4"> </p>
+ </pre> <p id="doc_section_5_6_2_p_3">XO_ENCODER_INIT_ARGS is a macro defined in xo_encoder.h that defines an argument called "arg", a pointer of the type xo_encoder_init_args_t. This structure contains two fields:</p>
+<p id="doc_section_5_6_2_p_4"> </p>
<ul>
<li>xei_version is the version number of the API as implemented within libxo. This version is currently as 1 using XO_ENCODER_VERSION. This number can be checked to ensure compatibility. The working assumption is that all versions should be backward compatible, but each side may need to accurately know the version supported by the other side. xo_encoder_library_init can optionally check this value, and must then set it to the version number used by the encoder, allowing libxo to detect version differences and react accordingly. For example, if version 2 adds new operations, then libxo will know that an encoding library that set xei_version to 1 cannot be expected to handle those new operations.</li>
<li>xei_handler must be set to a pointer to a function of type xo_encoder_func_t, as defined in xo_encoder.h. This function takes a set of parameters: -- xop is a pointer to the opaque xo_handle_t structure -- op is an integer representing the current operation -- name is a string whose meaning differs by operation -- value is a string whose meaning differs by operation -- private is an opaque structure provided by the encoder</li>
</ul>
-<p id="doc_section_3_6_2_p_5">Additional arguments may be added in the future, so handler functions should use the XO_ENCODER_HANDLER_ARGS macro. An appropriate "extern" declaration is provided to help catch errors.</p>
-<p id="doc_section_3_6_2_p_6">Once the encoder initialization function has completed processing, it should return zero to indicate that no error has occurred. A non-zero return code will cause the handle initialization to fail.</p>
+<p id="doc_section_5_6_2_p_5">Additional arguments may be added in the future, so handler functions should use the XO_ENCODER_HANDLER_ARGS macro. An appropriate "extern" declaration is provided to help catch errors.</p>
+<p id="doc_section_5_6_2_p_6">Once the encoder initialization function has completed processing, it should return zero to indicate that no error has occurred. A non-zero return code will cause the handle initialization to fail.</p>
</div>
<div class="content">
-<h3 id="doc_section_3_6_3">
+<h3 id="doc_section_5_6_3">
<div class="self-section-number">
-<a href="#doc_section_3_6_3">3.6.3</a> </div>
+<a href="#doc_section_5_6_3">5.6.3</a> </div>
<a id="operations" href="#operations">Operations</a>
</h3>
-<p id="doc_section_3_6_3_p_1">The encoder API defines a set of operations representing the processing model of libxo. Content is formatted within libxo, and callbacks are made to the encoder's handler function when data is ready to be processed.</p>
+<p id="doc_section_5_6_3_p_1">The encoder API defines a set of operations representing the processing model of libxo. Content is formatted within libxo, and callbacks are made to the encoder's handler function when data is ready to be processed.</p>
<div id="doc_table_u.19"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Operation</th>
@@ -25590,22 +25703,22 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_3_6_3_p_2">For all the open and close operations, the name parameter holds the name of the construct. For string, content, and attribute operations, the name parameter is the name of the field and the value parameter is the value. "string" are differentiated from "content" to allow differing treatment of true, false, null, and numbers from real strings, though content values are formatted as strings before the handler is called. For version operations, the value parameter contains the version.</p>
-<p id="doc_section_3_6_3_p_3">All strings are encoded in UTF-8.</p>
+<p id="doc_section_5_6_3_p_2">For all the open and close operations, the name parameter holds the name of the construct. For string, content, and attribute operations, the name parameter is the name of the field and the value parameter is the value. "string" are differentiated from "content" to allow differing treatment of true, false, null, and numbers from real strings, though content values are formatted as strings before the handler is called. For version operations, the value parameter contains the version.</p>
+<p id="doc_section_5_6_3_p_3">All strings are encoded in UTF-8.</p>
</div>
</div>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_4" class="np">
+<h1 id="doc_section_6" class="np">
<div class="self-section-number">
-<a href="#doc_section_4">4_</a> </div>
+<a href="#doc_section_6">6_</a> </div>
<a id="the-xo-utility" href="#the-xo-utility">The "xo" Utility</a>
</h1>
-<p id="doc_section_4_p_1">The "xo" utility allows command line access to the functionality of the libxo library. Using "xo", shell scripts can emit XML, JSON, and HTML using the same commands that emit text output.</p>
-<p id="doc_section_4_p_2">The style of output can be selected using a specific option: "&#8209;X" for XML, "&#8209;J" for JSON, "&#8209;H" for HTML, or "&#8209;T" for TEXT, which is the default. The "--style &lt;style&gt;" option can also be used. The LIBXO_OPTIONS environment variable can also be used to set the style, as well as other flags.</p>
-<p id="doc_section_4_p_3">The "xo" utility accepts a format string suitable for xo_emit() and a set of zero or more arguments used to supply data for that string.</p>
-<div id="doc_figure_u.133"></div> <pre>
+<p id="doc_section_6_p_1">The "xo" utility allows command line access to the functionality of the libxo library. Using "xo", shell scripts can emit XML, JSON, and HTML using the same commands that emit text output.</p>
+<p id="doc_section_6_p_2">The style of output can be selected using a specific option: "&#8209;X" for XML, "&#8209;J" for JSON, "&#8209;H" for HTML, or "&#8209;T" for TEXT, which is the default. The "--style &lt;style&gt;" option can also be used. The standard set of "&#8209;&#8209;libxo" options are available (see <a href="#options" title="Command-line Arguments">Section 4</a>), as well as the LIBXO_OPTIONS environment variable (see <a href="#LIBXO_OPTIONS" title="LIBXO_OPTIONS">Section 5.4.6</a>).</p>
+<p id="doc_section_6_p_3">The "xo" utility accepts a format string suitable for xo_emit() and a set of zero or more arguments used to supply data for that string.</p>
+<div id="doc_figure_u.138"></div> <pre>
xo "The {k:name} weighs {:weight/%d} pounds.\n" fish 6
TEXT:
@@ -25624,8 +25737,8 @@ jQuery(function ($) {
&lt;div class="data" data-tag="weight"&gt;6&lt;/div&gt;
&lt;div class="text"&gt; pounds.&lt;/div&gt;
&lt;/div&gt;
- </pre> <p id="doc_section_4_p_5">The "--wrap &lt;path&gt;" option can be used to wrap emitted content in a specific hierarchy. The path is a set of hierarchical names separated by the '/' character.</p>
-<div id="doc_figure_u.134"></div> <pre>
+ </pre> <p id="doc_section_6_p_5">The "--wrap &lt;path&gt;" option can be used to wrap emitted content in a specific hierarchy. The path is a set of hierarchical names separated by the '/' character.</p>
+<div id="doc_figure_u.139"></div> <pre>
xo --wrap top/a/b/c '{:tag}' value
XML:
@@ -25648,8 +25761,8 @@ jQuery(function ($) {
}
}
}
- </pre> <p id="doc_section_4_p_7">The "--open &lt;path&gt;" and "--close &lt;path&gt;" can be used to emit hierarchical information without the matching close and open tag. This allows a shell script to emit open tags, data, and then close tags. The "&#8209;&#8209;depth" option may be used to set the depth for indentation. The "&#8209;&#8209;leading&#8209;xpath" may be used to prepend data to the XPath values used for HTML output style.</p>
-<div id="doc_figure_u.135"></div> <pre>
+ </pre> <p id="doc_section_6_p_7">The "--open &lt;path&gt;" and "--close &lt;path&gt;" can be used to emit hierarchical information without the matching close and open tag. This allows a shell script to emit open tags, data, and then close tags. The "&#8209;&#8209;depth" option may be used to set the depth for indentation. The "&#8209;&#8209;leading&#8209;xpath" may be used to prepend data to the XPath values used for HTML output style.</p>
+<div id="doc_figure_u.140"></div> <pre>
#!/bin/sh
xo --open top/data
xo --depth 2 '{tag}' value
@@ -25666,19 +25779,19 @@ jQuery(function ($) {
"tag": "value"
}
}
- </pre> <p id="doc_section_4_p_9">Section Contents: </p>
+ </pre> <p id="doc_section_6_p_9">Section Contents: </p>
<ul>
-<li><a href="#command-line-options" title="Command Line Options">Section 4.1</a></li>
-<li><a href="#example-2" title="Example">Section 4.2</a></li>
+<li><a href="#command-line-options" title="Command Line Options">Section 6.1</a></li>
+<li><a href="#example-2" title="Example">Section 6.2</a></li>
</ul>
<div class="content">
-<h2 id="doc_section_4_1">
+<h2 id="doc_section_6_1">
<div class="self-section-number">
-<a href="#doc_section_4_1">4.1</a> </div>
+<a href="#doc_section_6_1">6.1</a> </div>
<a id="command-line-options" href="#command-line-options">Command Line Options</a>
</h2>
-<p id="doc_section_4_1_p_1">Usage: xo [options] format [fields]</p>
-<div id="doc_figure_u.136"></div> <pre>
+<p id="doc_section_6_1_p_1">Usage: xo [options] format [fields]</p>
+<div id="doc_figure_u.141"></div> <pre>
--close &lt;path&gt; Close tags for the given path
--depth &lt;num&gt; Set the depth for pretty printing
--help Display this help text
@@ -25697,12 +25810,12 @@ jQuery(function ($) {
--xpath Add XPath data to HTML output);
</pre> </div>
<div class="content">
-<h2 id="doc_section_4_2">
+<h2 id="doc_section_6_2">
<div class="self-section-number">
-<a href="#doc_section_4_2">4.2</a> </div>
+<a href="#doc_section_6_2">6.2</a> </div>
<a id="example-2" href="#example-2">Example</a>
</h2>
-<div id="doc_figure_u.137"></div> <pre>
+<div id="doc_figure_u.142"></div> <pre>
% xo 'The {:product} is {:status}\n' stereo "in route"
The stereo is in route
% ./xo/xo -p -X 'The {:product} is {:status}\n' stereo "in route"
@@ -25712,13 +25825,13 @@ jQuery(function ($) {
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_5" class="np">
+<h1 id="doc_section_7" class="np">
<div class="self-section-number">
-<a href="#doc_section_5">5_</a> </div>
+<a href="#doc_section_7">7_</a> </div>
<a id="xolint" href="#xolint">xolint</a>
</h1>
-<p id="doc_section_5_p_1">xolint is a tool for reporting common mistakes in format strings in source code that invokes xo_emit(). It allows these errors to be diagnosed at build time, rather than waiting until runtime.</p>
-<p id="doc_section_5_p_2">xolint takes the one or more C files as arguments, and reports and errors, warning, or informational messages as needed.</p>
+<p id="doc_section_7_p_1">xolint is a tool for reporting common mistakes in format strings in source code that invokes xo_emit(). It allows these errors to be diagnosed at build time, rather than waiting until runtime.</p>
+<p id="doc_section_7_p_2">xolint takes the one or more C files as arguments, and reports and errors, warning, or informational messages as needed.</p>
<div id="doc_table_u.20"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Option</th>
@@ -25759,23 +25872,23 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_5_p_3">The output message will contain the source filename and line number, the class of the message, the message, and, if -p is given, the line that contains the error:</p>
-<div id="doc_figure_u.138"></div> <pre>
+<p id="doc_section_7_p_3">The output message will contain the source filename and line number, the class of the message, the message, and, if -p is given, the line that contains the error:</p>
+<div id="doc_figure_u.143"></div> <pre>
% xolint.pl -t xolint.c
xolint.c: 16: error: anchor format should be "%d"
16 xo_emit("{[:/%s}");
- </pre> <p id="doc_section_5_p_5">The "&#8209;I" option will generate a table of xo_info_t structures ,</p>
-<p id="doc_section_5_p_6">The "&#8209;V" option does not report errors, but prints a complete list of all field names, sorted alphabetically. The output can help spot inconsistencies and spelling errors.</p>
+ </pre> <p id="doc_section_7_p_5">The "&#8209;I" option will generate a table of xo_info_t structures ,</p>
+<p id="doc_section_7_p_6">The "&#8209;V" option does not report errors, but prints a complete list of all field names, sorted alphabetically. The output can help spot inconsistencies and spelling errors.</p>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_6" class="np">
+<h1 id="doc_section_8" class="np">
<div class="self-section-number">
-<a href="#doc_section_6">6_</a> </div>
+<a href="#doc_section_8">8_</a> </div>
<a id="xohtml" href="#xohtml">xohtml</a>
</h1>
-<p id="doc_section_6_p_1">xohtml is a tool for turning the output of libxo-enabled commands into html files suitable for display in modern HTML web browsers. It can be used to test and debug HTML output, as well as to make the user ache to escape the world of 70s terminal devices.</p>
-<p id="doc_section_6_p_2">xohtml is given a command, either on the command line or via the "&#8209;c" option. If not command is given, standard input is used. The command's output is wrapped in HTML tags, with references to supporting CSS and Javascript files, and written to standard output or the file given in the "&#8209;f" option. The "&#8209;b" option can be used to provide an alternative base path for the support files.</p>
+<p id="doc_section_8_p_1">xohtml is a tool for turning the output of libxo-enabled commands into html files suitable for display in modern HTML web browsers. It can be used to test and debug HTML output, as well as to make the user ache to escape the world of 70s terminal devices.</p>
+<p id="doc_section_8_p_2">xohtml is given a command, either on the command line or via the "&#8209;c" option. If not command is given, standard input is used. The command's output is wrapped in HTML tags, with references to supporting CSS and Javascript files, and written to standard output or the file given in the "&#8209;f" option. The "&#8209;b" option can be used to provide an alternative base path for the support files.</p>
<div id="doc_table_u.21"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Option</th>
@@ -25796,18 +25909,18 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<p id="doc_section_6_p_3">The "&#8209;c" option takes a full command with arguments, including any libxo options needed to generate html ("&#8209;&#8209;libxo=html"). This value must be quoted if it consists of multiple tokens.</p>
+<p id="doc_section_8_p_3">The "&#8209;c" option takes a full command with arguments, including any libxo options needed to generate html ("&#8209;&#8209;libxo=html"). This value must be quoted if it consists of multiple tokens.</p>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_7" class="np">
+<h1 id="doc_section_9" class="np">
<div class="self-section-number">
-<a href="#doc_section_7">7_</a> </div>
+<a href="#doc_section_9">9_</a> </div>
<a id="xopo" href="#xopo">xopo</a>
</h1>
-<p id="doc_section_7_p_1">The "xopo" utility filters ".pot" files generated by the "xgettext" utility to remove formatting information suitable for use with the "{G:}" modifier. This means that when the developer changes the formatting portion of the field definitions, or the fields modifiers, the string passed to gettext(3) is unchanged, avoiding the expense of updating any existing translation files (".po" files).</p>
-<p id="doc_section_7_p_2">The syntax for the xopo command is one of two forms; it can be used as a filter for processing a .po or .pot file, rewriting the "msgid" strings with a simplified message string. In this mode, the input is either standard input or a file given by the "&#8209;f" option, and the output is either standard output or a file given by the "&#8209;o" option.</p>
-<p id="doc_section_7_p_3">In the second mode, a simple message given using the "&#8209;s" option on the command, and the simplified version of that message is printed on stdout.</p>
+<p id="doc_section_9_p_1">The "xopo" utility filters ".pot" files generated by the "xgettext" utility to remove formatting information suitable for use with the "{G:}" modifier. This means that when the developer changes the formatting portion of the field definitions, or the fields modifiers, the string passed to gettext(3) is unchanged, avoiding the expense of updating any existing translation files (".po" files).</p>
+<p id="doc_section_9_p_2">The syntax for the xopo command is one of two forms; it can be used as a filter for processing a .po or .pot file, rewriting the "msgid" strings with a simplified message string. In this mode, the input is either standard input or a file given by the "&#8209;f" option, and the output is either standard output or a file given by the "&#8209;o" option.</p>
+<p id="doc_section_9_p_3">In the second mode, a simple message given using the "&#8209;s" option on the command, and the simplified version of that message is printed on stdout.</p>
<div id="doc_table_u.22"><table summary="" class="tt full" cellpadding="3" cellspacing="0">
<thead><tr>
<th class="left">Option</th>
@@ -25828,7 +25941,7 @@ jQuery(function ($) {
</tr>
</tbody>
</table></div>
-<div id="doc_figure_u.139"></div> <pre>
+<div id="doc_figure_u.144"></div> <pre>
EXAMPLE:
% xopo -s "There are {:count/%u} {:event/%.6s} events\n"
There are {:count} {:event} events\n
@@ -25838,56 +25951,56 @@ jQuery(function ($) {
--keyword=xo_emit_warn -C -E -n --foreign-user \
-o foo.pot.raw foo.c
% xopo -f foo.pot.raw -o foo.pot
- </pre> <p id="doc_section_7_p_5">Use of the "&#8209;&#8209;no&#8209;wrap" option for xgettext is required to ensure that incoming msgid strings are not wrapped across multiple lines.</p>
+ </pre> <p id="doc_section_9_p_5">Use of the "&#8209;&#8209;no&#8209;wrap" option for xgettext is required to ensure that incoming msgid strings are not wrapped across multiple lines.</p>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_8" class="np">
+<h1 id="doc_section_10" class="np">
<div class="self-section-number">
-<a href="#doc_section_8">8_</a> </div>
+<a href="#doc_section_10">10_</a> </div>
<a id="faqs" href="#faqs">FAQs</a>
</h1>
-<p id="doc_section_8_p_1">This section contains the set of questions that users typically ask, along with answers that might be helpful.</p>
-<p id="doc_section_8_p_2">Section Contents: </p>
+<p id="doc_section_10_p_1">This section contains the set of questions that users typically ask, along with answers that might be helpful.</p>
+<p id="doc_section_10_p_2">Section Contents: </p>
<ul>
-<li><a href="#general" title="General">Section 8.1</a></li>
-<li><a href="#what-does-this-message-mean" title="What does this message mean?">Section 8.2</a></li>
+<li><a href="#general" title="General">Section 10.1</a></li>
+<li><a href="#what-does-this-message-mean" title="What does this message mean?">Section 10.2</a></li>
</ul>
-<p id="doc_section_8_p_3">Section Contents: </p>
+<p id="doc_section_10_p_3">Section Contents: </p>
<ul>
-<li><a href="#general" title="General">Section 8.1</a></li>
-<li><a href="#what-does-this-message-mean" title="What does this message mean?">Section 8.2</a></li>
+<li><a href="#general" title="General">Section 10.1</a></li>
+<li><a href="#what-does-this-message-mean" title="What does this message mean?">Section 10.2</a></li>
</ul>
<div class="content">
-<h2 id="doc_section_8_1">
+<h2 id="doc_section_10_1">
<div class="self-section-number">
-<a href="#doc_section_8_1">8.1</a> </div>
+<a href="#doc_section_10_1">10.1</a> </div>
<a id="general" href="#general">General</a>
</h2>
-<p id="doc_section_8_1_p_1">Section Contents: </p>
+<p id="doc_section_10_1_p_1">Section Contents: </p>
<ul>
-<li><a href="#can-you-share-the-history-of-libxo" title="Can you share the history of libxo?">Section 8.1.1</a></li>
-<li><a href="#did-the-complex-semantics-of-format-strings-evolve-over-time" title="Did the complex semantics of format strings evolve over time?">Section 8.1.2</a></li>
-<li><a href="#good-field-names" title="What makes a good field name?">Section 8.1.3</a></li>
+<li><a href="#can-you-share-the-history-of-libxo" title="Can you share the history of libxo?">Section 10.1.1</a></li>
+<li><a href="#did-the-complex-semantics-of-format-strings-evolve-over-time" title="Did the complex semantics of format strings evolve over time?">Section 10.1.2</a></li>
+<li><a href="#good-field-names" title="What makes a good field name?">Section 10.1.3</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_8_1_1">
+<h3 id="doc_section_10_1_1">
<div class="self-section-number">
-<a href="#doc_section_8_1_1">8.1.1</a> </div>
+<a href="#doc_section_10_1_1">10.1.1</a> </div>
<a id="can-you-share-the-history-of-libxo" href="#can-you-share-the-history-of-libxo">Can you share the history of libxo?</a>
</h3>
-<p id="doc_section_8_1_1_p_1">In 2001, we added an XML API to the JUNOS operating system, which is built on top of FreeBSD. Eventually this API became standardized as the NETCONF API (RFC 6241). As part of this effort, we modified many FreeBSD utilities to emit XML, typically via a "&#8209;X" switch. The results were mixed. The cost of maintaining this code, updating it, and carrying it were non-trivial, and contributed to our expense (and the associated delay) with upgrading the version of FreeBSD on which each release of JUNOS is based.</p>
-<p id="doc_section_8_1_1_p_2">A recent (2014) effort within JUNOS aims at removing our modifications to the underlying FreeBSD code as a means of reducing the expense and delay in tracking HEAD. JUNOS is structured to have system components generate XML that is rendered by the CLI (think: login shell) into human-readable text. This allows the API to use the same plumbing as the CLI, and ensures that all components emit XML, and that it is emitted with knowledge of the consumer of that XML, yielding an API that have no incremental cost or feature delay.</p>
-<p id="doc_section_8_1_1_p_3">libxo is an effort to mix the best aspects of the JUNOS strategy into FreeBSD in a seemless way, allowing commands to make printf-like output calls with a single code path.</p>
+<p id="doc_section_10_1_1_p_1">In 2001, we added an XML API to the JUNOS operating system, which is built on top of FreeBSD. Eventually this API became standardized as the NETCONF API (RFC 6241). As part of this effort, we modified many FreeBSD utilities to emit XML, typically via a "&#8209;X" switch. The results were mixed. The cost of maintaining this code, updating it, and carrying it were non-trivial, and contributed to our expense (and the associated delay) with upgrading the version of FreeBSD on which each release of JUNOS is based.</p>
+<p id="doc_section_10_1_1_p_2">A recent (2014) effort within JUNOS aims at removing our modifications to the underlying FreeBSD code as a means of reducing the expense and delay in tracking HEAD. JUNOS is structured to have system components generate XML that is rendered by the CLI (think: login shell) into human-readable text. This allows the API to use the same plumbing as the CLI, and ensures that all components emit XML, and that it is emitted with knowledge of the consumer of that XML, yielding an API that have no incremental cost or feature delay.</p>
+<p id="doc_section_10_1_1_p_3">libxo is an effort to mix the best aspects of the JUNOS strategy into FreeBSD in a seemless way, allowing commands to make printf-like output calls with a single code path.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_1_2">
+<h3 id="doc_section_10_1_2">
<div class="self-section-number">
-<a href="#doc_section_8_1_2">8.1.2</a> </div>
+<a href="#doc_section_10_1_2">10.1.2</a> </div>
<a id="did-the-complex-semantics-of-format-strings-evolve-over-time" href="#did-the-complex-semantics-of-format-strings-evolve-over-time">Did the complex semantics of format strings evolve over time?</a>
</h3>
-<p id="doc_section_8_1_2_p_1">The history is both long and short: libxo's functionality is based on what JUNOS does in a data modeling language called ODL (output definition language). In JUNOS, all subcomponents generate XML, which is feed to the CLI, where data from the ODL files tell is how to render that XML into text. ODL might had a set of tags like:</p>
-<div id="doc_figure_u.140"></div> <pre>
+<p id="doc_section_10_1_2_p_1">The history is both long and short: libxo's functionality is based on what JUNOS does in a data modeling language called ODL (output definition language). In JUNOS, all subcomponents generate XML, which is feed to the CLI, where data from the ODL files tell is how to render that XML into text. ODL might had a set of tags like:</p>
+<div id="doc_figure_u.145"></div> <pre>
tag docsis-state {
help "State of the DOCSIS interface";
type string;
@@ -25940,20 +26053,20 @@ jQuery(function ($) {
field power;
}
}
- </pre> <p id="doc_section_8_1_2_p_3">These tag definitions are compiled into field definitions that are triggered when matching XML elements are seen. ODL also supports other means of defining output.</p>
-<p id="doc_section_8_1_2_p_4">The roles and modifiers describe these details.</p>
-<p id="doc_section_8_1_2_p_5">In moving these ideas to bsd, two things had to happen: the formatting had to happen at the source since BSD won't have a JUNOS-like CLI to do the rendering, and we can't depend on external data models like ODL, which was seen as too hard a sell to the BSD community.</p>
-<p id="doc_section_8_1_2_p_6">The results were that the xo_emit strings are used to encode the roles, modifiers, names, and formats. They are dense and a bit cryptic, but not so unlike printf format strings that developers will be lost.</p>
-<p id="doc_section_8_1_2_p_7">libxo is a new implementation of these ideas and is distinct from the previous implementation in JUNOS.</p>
+ </pre> <p id="doc_section_10_1_2_p_3">These tag definitions are compiled into field definitions that are triggered when matching XML elements are seen. ODL also supports other means of defining output.</p>
+<p id="doc_section_10_1_2_p_4">The roles and modifiers describe these details.</p>
+<p id="doc_section_10_1_2_p_5">In moving these ideas to bsd, two things had to happen: the formatting had to happen at the source since BSD won't have a JUNOS-like CLI to do the rendering, and we can't depend on external data models like ODL, which was seen as too hard a sell to the BSD community.</p>
+<p id="doc_section_10_1_2_p_6">The results were that the xo_emit strings are used to encode the roles, modifiers, names, and formats. They are dense and a bit cryptic, but not so unlike printf format strings that developers will be lost.</p>
+<p id="doc_section_10_1_2_p_7">libxo is a new implementation of these ideas and is distinct from the previous implementation in JUNOS.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_1_3">
+<h3 id="doc_section_10_1_3">
<div class="self-section-number">
-<a href="#doc_section_8_1_3">8.1.3</a> </div>
+<a href="#doc_section_10_1_3">10.1.3</a> </div>
<a id="good-field-names" href="#good-field-names">What makes a good field name?</a>
</h3>
-<p id="doc_section_8_1_3_p_1">To make useful, consistent field names, follow these guidelines:</p>
-<p id="doc_section_8_1_3_p_2"> </p>
+<p id="doc_section_10_1_3_p_1">To make useful, consistent field names, follow these guidelines:</p>
+<p id="doc_section_10_1_3_p_2"> </p>
<dl>
<dt>Use lower case, even for TLAs</dt>
<dd>Lower case is more civilized. Even TLAs should be lower case to avoid scenarios where the differences between "XPath" and "Xpath" drive your users crazy. Using "xpath" is simpler and better.</dd>
@@ -25966,422 +26079,422 @@ jQuery(function ($) {
<dt>Reuse existing field names</dt>
<dd>Nothing's worse than writing expressions like:</dd>
</dl>
-<div id="doc_figure_u.141"></div> <pre>
+<div id="doc_figure_u.146"></div> <pre>
if ($src1/process[pid == $pid]/name ==
$src2/proc-table/proc-list
/proc-entry[process-id == $pid]/proc-name) {
...
}
- </pre> <p id="doc_section_8_1_3_p_4">Find someone else who is expressing similar data and follow their fields and hierarchy. Remember the quote is not "Consistency is the hobgoblin of little minds", but "A foolish consistency is the hobgoblin of little minds".</p>
-<p id="doc_section_8_1_3_p_5"> </p>
+ </pre> <p id="doc_section_10_1_3_p_4">Find someone else who is expressing similar data and follow their fields and hierarchy. Remember the quote is not "Consistency is the hobgoblin of little minds", but "A foolish consistency is the hobgoblin of little minds".</p>
+<p id="doc_section_10_1_3_p_5"> </p>
<dl>
<dt>Use containment as scoping</dt>
<dd>In the previous example, all the names are prefixed with "proc&#8209;", which is redundant given that they are nested under the process table.</dd>
<dt>Think about your users</dt>
-<dd>Have empathy for your users, choosing clear and useful fields that contain clear and useful data. You may need to augment the display content with xo_attr() calls (<a href="#xo_attr" title="Attributes (xo_attr)">Section 3.2.2</a>) or "{e:}" fields (<a href="#e-modifier" title="The Encoding Modifier ({e:})">Section 2.2.2.4</a>) to make the data useful.</dd>
+<dd>Have empathy for your users, choosing clear and useful fields that contain clear and useful data. You may need to augment the display content with xo_attr() calls (<a href="#xo_attr" title="Attributes (xo_attr)">Section 5.2.2</a>) or "{e:}" fields (<a href="#e-modifier" title="The Encoding Modifier ({e:})">Section 3.2.2.4</a>) to make the data useful.</dd>
<dt>Don't use an arbitrary number postfix</dt>
<dd>What does "errors2" mean? No one will know. "errors&#8209;after&#8209;restart" would be a better choice. Think of your users, and think of the future. If you make "errors2", the next guy will happily make "errors3" and before you know it, someone will be asking what's the difference between errors37 and errors63.</dd>
<dt>Be consistent, uniform, unsurprising, and predictable</dt>
<dd>Think of your field vocabulary as an API. You want it useful, expressive, meaningful, direct, and obvious. You want the client application's programmer to move between without the need to understand a variety of opinions on how fields are named. They should see the system as a single cohesive whole, not a sack of cats.</dd>
</dl>
-<p id="doc_section_8_1_3_p_6">Field names constitute the means by which client programmers interact with our system. By choosing wise names now, you are making their lives better.</p>
-<p id="doc_section_8_1_3_p_7">After using "xolint" to find errors in your field descriptors, use "xolint -V" to spell check your field names and to detect different names for the same data. "dropped&#8209;short" and "dropped&#8209;too&#8209;short" are both reasonable names, but using them both will lead users to ask the difference between the two fields. If there is no difference, use only one of the field names. If there is a difference, change the names to make that difference more obvious.</p>
+<p id="doc_section_10_1_3_p_6">Field names constitute the means by which client programmers interact with our system. By choosing wise names now, you are making their lives better.</p>
+<p id="doc_section_10_1_3_p_7">After using "xolint" to find errors in your field descriptors, use "xolint -V" to spell check your field names and to detect different names for the same data. "dropped&#8209;short" and "dropped&#8209;too&#8209;short" are both reasonable names, but using them both will lead users to ask the difference between the two fields. If there is no difference, use only one of the field names. If there is a difference, change the names to make that difference more obvious.</p>
</div>
</div>
<div class="content">
-<h2 id="doc_section_8_2">
+<h2 id="doc_section_10_2">
<div class="self-section-number">
-<a href="#doc_section_8_2">8.2</a> </div>
+<a href="#doc_section_10_2">10.2</a> </div>
<a id="what-does-this-message-mean" href="#what-does-this-message-mean">What does this message mean?</a>
</h2>
-<p id="doc_section_8_2_p_1">Section Contents: </p>
+<p id="doc_section_10_2_p_1">Section Contents: </p>
<ul>
-<li><a href="#a-percent-sign-appearing-in-text-is-a-literal" title="'A percent sign appearing in text is a literal'">Section 8.2.1</a></li>
-<li><a href="#unknown-long-name-for-rolemodifier" title="'Unknown long name for role/modifier'">Section 8.2.2</a></li>
-<li><a href="#last-character-before-field-definition-is-a-field-type" title="'Last character before field definition is a field type'">Section 8.2.3</a></li>
-<li><a href="#encoding-format-uses-different-number-of-arguments" title="'Encoding format uses different number of arguments'">Section 8.2.4</a></li>
-<li><a href="#only-one-field-role-can-be-used" title="'Only one field role can be used'">Section 8.2.5</a></li>
-<li><a href="#potential-missing-slash-after-c-d-n-l-or-t-with-format" title="'Potential missing slash after C, D, N, L, or T with format'">Section 8.2.6</a></li>
-<li><a href="#an-encoding-format-cannot-be-given-roles-dnlt" title="'An encoding format cannot be given (roles: DNLT)'">Section 8.2.7</a></li>
-<li><a href="#format-cannot-be-given-when-content-is-present-roles-cdln" title="'Format cannot be given when content is present (roles: CDLN)'">Section 8.2.8</a></li>
-<li><a href="#field-has-color-without-fg--or-bg--role-c" title="'Field has color without fg- or bg- (role: C)'">Section 8.2.9</a></li>
-<li><a href="#field-has-invalid-color-or-effect-role-c" title="'Field has invalid color or effect (role: C)'">Section 8.2.10</a></li>
-<li><a href="#field-has-humanize-modifier-but-no-format-string" title="'Field has humanize modifier but no format string'">Section 8.2.11</a></li>
-<li><a href="#field-has-hn--modifier-but-not-h-modifier" title="'Field has hn-* modifier but not 'h' modifier'">Section 8.2.12</a></li>
-<li><a href="#value-field-must-have-a-name-as-content" title="'Value field must have a name (as content)&quot;)'">Section 8.2.13</a></li>
-<li><a href="#use-hyphens-not-underscores-for-value-field-name" title="'Use hyphens, not underscores, for value field name'">Section 8.2.14</a></li>
-<li><a href="#value-field-name-cannot-start-with-digit" title="'Value field name cannot start with digit'">Section 8.2.15</a></li>
-<li><a href="#value-field-name-should-be-lower-case" title="'Value field name should be lower case'">Section 8.2.16</a></li>
-<li><a href="#value-field-name-should-be-longer-than-two-characters" title="'Value field name should be longer than two characters'">Section 8.2.17</a></li>
-<li><a href="#value-field-name-contains-invalid-character" title="'Value field name contains invalid character'">Section 8.2.18</a></li>
-<li><a href="#decoration-field-contains-invalid-character" title="'decoration field contains invalid character'">Section 8.2.19</a></li>
-<li><a href="#anchor-content-should-be-decimal-width" title="'Anchor content should be decimal width'">Section 8.2.20</a></li>
-<li><a href="#anchor-format-should-be-d" title="'Anchor format should be &quot;%d&quot;'">Section 8.2.21</a></li>
-<li><a href="#anchor-cannot-have-both-format-and-encoding-format" title="'Anchor cannot have both format and encoding format&quot;)'">Section 8.2.22</a></li>
-<li><a href="#max-width-only-valid-for-strings" title="'Max width only valid for strings'">Section 8.2.23</a></li>
+<li><a href="#a-percent-sign-appearing-in-text-is-a-literal" title="'A percent sign appearing in text is a literal'">Section 10.2.1</a></li>
+<li><a href="#unknown-long-name-for-rolemodifier" title="'Unknown long name for role/modifier'">Section 10.2.2</a></li>
+<li><a href="#last-character-before-field-definition-is-a-field-type" title="'Last character before field definition is a field type'">Section 10.2.3</a></li>
+<li><a href="#encoding-format-uses-different-number-of-arguments" title="'Encoding format uses different number of arguments'">Section 10.2.4</a></li>
+<li><a href="#only-one-field-role-can-be-used" title="'Only one field role can be used'">Section 10.2.5</a></li>
+<li><a href="#potential-missing-slash-after-c-d-n-l-or-t-with-format" title="'Potential missing slash after C, D, N, L, or T with format'">Section 10.2.6</a></li>
+<li><a href="#an-encoding-format-cannot-be-given-roles-dnlt" title="'An encoding format cannot be given (roles: DNLT)'">Section 10.2.7</a></li>
+<li><a href="#format-cannot-be-given-when-content-is-present-roles-cdln" title="'Format cannot be given when content is present (roles: CDLN)'">Section 10.2.8</a></li>
+<li><a href="#field-has-color-without-fg--or-bg--role-c" title="'Field has color without fg- or bg- (role: C)'">Section 10.2.9</a></li>
+<li><a href="#field-has-invalid-color-or-effect-role-c" title="'Field has invalid color or effect (role: C)'">Section 10.2.10</a></li>
+<li><a href="#field-has-humanize-modifier-but-no-format-string" title="'Field has humanize modifier but no format string'">Section 10.2.11</a></li>
+<li><a href="#field-has-hn--modifier-but-not-h-modifier" title="'Field has hn-* modifier but not 'h' modifier'">Section 10.2.12</a></li>
+<li><a href="#value-field-must-have-a-name-as-content" title="'Value field must have a name (as content)&quot;)'">Section 10.2.13</a></li>
+<li><a href="#use-hyphens-not-underscores-for-value-field-name" title="'Use hyphens, not underscores, for value field name'">Section 10.2.14</a></li>
+<li><a href="#value-field-name-cannot-start-with-digit" title="'Value field name cannot start with digit'">Section 10.2.15</a></li>
+<li><a href="#value-field-name-should-be-lower-case" title="'Value field name should be lower case'">Section 10.2.16</a></li>
+<li><a href="#value-field-name-should-be-longer-than-two-characters" title="'Value field name should be longer than two characters'">Section 10.2.17</a></li>
+<li><a href="#value-field-name-contains-invalid-character" title="'Value field name contains invalid character'">Section 10.2.18</a></li>
+<li><a href="#decoration-field-contains-invalid-character" title="'decoration field contains invalid character'">Section 10.2.19</a></li>
+<li><a href="#anchor-content-should-be-decimal-width" title="'Anchor content should be decimal width'">Section 10.2.20</a></li>
+<li><a href="#anchor-format-should-be-d" title="'Anchor format should be &quot;%d&quot;'">Section 10.2.21</a></li>
+<li><a href="#anchor-cannot-have-both-format-and-encoding-format" title="'Anchor cannot have both format and encoding format&quot;)'">Section 10.2.22</a></li>
+<li><a href="#max-width-only-valid-for-strings" title="'Max width only valid for strings'">Section 10.2.23</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_8_2_1">
+<h3 id="doc_section_10_2_1">
<div class="self-section-number">
-<a href="#doc_section_8_2_1">8.2.1</a> </div>
+<a href="#doc_section_10_2_1">10.2.1</a> </div>
<a id="a-percent-sign-appearing-in-text-is-a-literal" href="#a-percent-sign-appearing-in-text-is-a-literal">'A percent sign appearing in text is a literal'</a>
</h3>
-<p id="doc_section_8_2_1_p_1">The message "A percent sign appearing in text is a literal" can be caused by code like:</p>
-<div id="doc_figure_u.142"></div> <pre>
+<p id="doc_section_10_2_1_p_1">The message "A percent sign appearing in text is a literal" can be caused by code like:</p>
+<div id="doc_figure_u.147"></div> <pre>
xo_emit("cost: %d", cost);
- </pre> <p id="doc_section_8_2_1_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.143"></div> <pre>
+ </pre> <p id="doc_section_10_2_1_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.148"></div> <pre>
xo_emit("{L:cost}: {:cost/%d}", cost);
- </pre> <p id="doc_section_8_2_1_p_5">This can be a bit surprising and could be a field that was not properly converted to a libxo-style format string.</p>
+ </pre> <p id="doc_section_10_2_1_p_5">This can be a bit surprising and could be a field that was not properly converted to a libxo-style format string.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_2">
+<h3 id="doc_section_10_2_2">
<div class="self-section-number">
-<a href="#doc_section_8_2_2">8.2.2</a> </div>
+<a href="#doc_section_10_2_2">10.2.2</a> </div>
<a id="unknown-long-name-for-rolemodifier" href="#unknown-long-name-for-rolemodifier">'Unknown long name for role/modifier'</a>
</h3>
-<p id="doc_section_8_2_2_p_1">The message "Unknown long name for role/modifier" can be caused by code like:</p>
-<div id="doc_figure_u.144"></div> <pre>
+<p id="doc_section_10_2_2_p_1">The message "Unknown long name for role/modifier" can be caused by code like:</p>
+<div id="doc_figure_u.149"></div> <pre>
xo_emit("{,humanization:value}", value);
- </pre> <p id="doc_section_8_2_2_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.145"></div> <pre>
+ </pre> <p id="doc_section_10_2_2_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.150"></div> <pre>
xo_emit("{,humanize:value}", value);
- </pre> <p id="doc_section_8_2_2_p_5">The hn-* modifiers (hn-decimal, hn-space, hn-1000) are only valid for fields with the {h:} modifier.</p>
+ </pre> <p id="doc_section_10_2_2_p_5">The hn-* modifiers (hn-decimal, hn-space, hn-1000) are only valid for fields with the {h:} modifier.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_3">
+<h3 id="doc_section_10_2_3">
<div class="self-section-number">
-<a href="#doc_section_8_2_3">8.2.3</a> </div>
+<a href="#doc_section_10_2_3">10.2.3</a> </div>
<a id="last-character-before-field-definition-is-a-field-type" href="#last-character-before-field-definition-is-a-field-type">'Last character before field definition is a field type'</a>
</h3>
-<p id="doc_section_8_2_3_p_1">The message "Last character before field definition is a field type" can be caused by code like:</p>
-<p id="doc_section_8_2_3_p_2">A common typo:</p>
-<div id="doc_figure_u.146"></div> <pre>
+<p id="doc_section_10_2_3_p_1">The message "Last character before field definition is a field type" can be caused by code like:</p>
+<p id="doc_section_10_2_3_p_2">A common typo:</p>
+<div id="doc_figure_u.151"></div> <pre>
xo_emit("{T:Min} T{:Max}");
- </pre> <p id="doc_section_8_2_3_p_4">This code should be replaced with code like:</p>
-<div id="doc_figure_u.147"></div> <pre>
+ </pre> <p id="doc_section_10_2_3_p_4">This code should be replaced with code like:</p>
+<div id="doc_figure_u.152"></div> <pre>
xo_emit("{T:Min} {T:Max}");
- </pre> <p id="doc_section_8_2_3_p_6">Twiddling the "{" and the field role is a common typo.</p>
+ </pre> <p id="doc_section_10_2_3_p_6">Twiddling the "{" and the field role is a common typo.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_4">
+<h3 id="doc_section_10_2_4">
<div class="self-section-number">
-<a href="#doc_section_8_2_4">8.2.4</a> </div>
+<a href="#doc_section_10_2_4">10.2.4</a> </div>
<a id="encoding-format-uses-different-number-of-arguments" href="#encoding-format-uses-different-number-of-arguments">'Encoding format uses different number of arguments'</a>
</h3>
-<p id="doc_section_8_2_4_p_1">The message "Encoding format uses different number of arguments" can be caused by code like:</p>
-<div id="doc_figure_u.148"></div> <pre>
+<p id="doc_section_10_2_4_p_1">The message "Encoding format uses different number of arguments" can be caused by code like:</p>
+<div id="doc_figure_u.153"></div> <pre>
xo_emit("{:name/%6.6s %%04d/%s}", name, number);
- </pre> <p id="doc_section_8_2_4_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.149"></div> <pre>
+ </pre> <p id="doc_section_10_2_4_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.154"></div> <pre>
xo_emit("{:name/%6.6s %04d/%s-%d}", name, number);
- </pre> <p id="doc_section_8_2_4_p_5">Both format should consume the same number of arguments off the stack</p>
+ </pre> <p id="doc_section_10_2_4_p_5">Both format should consume the same number of arguments off the stack</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_5">
+<h3 id="doc_section_10_2_5">
<div class="self-section-number">
-<a href="#doc_section_8_2_5">8.2.5</a> </div>
+<a href="#doc_section_10_2_5">10.2.5</a> </div>
<a id="only-one-field-role-can-be-used" href="#only-one-field-role-can-be-used">'Only one field role can be used'</a>
</h3>
-<p id="doc_section_8_2_5_p_1">The message "Only one field role can be used" can be caused by code like:</p>
-<div id="doc_figure_u.150"></div> <pre>
+<p id="doc_section_10_2_5_p_1">The message "Only one field role can be used" can be caused by code like:</p>
+<div id="doc_figure_u.155"></div> <pre>
xo_emit("{LT:Max}");
- </pre> <p id="doc_section_8_2_5_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.151"></div> <pre>
+ </pre> <p id="doc_section_10_2_5_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.156"></div> <pre>
xo_emit("{T:Max}");
</pre> </div>
<div class="content">
-<h3 id="doc_section_8_2_6">
+<h3 id="doc_section_10_2_6">
<div class="self-section-number">
-<a href="#doc_section_8_2_6">8.2.6</a> </div>
+<a href="#doc_section_10_2_6">10.2.6</a> </div>
<a id="potential-missing-slash-after-c-d-n-l-or-t-with-format" href="#potential-missing-slash-after-c-d-n-l-or-t-with-format">'Potential missing slash after C, D, N, L, or T with format'</a>
</h3>
-<p id="doc_section_8_2_6_p_1">The message "Potential missing slash after C, D, N, L, or T with format" can be caused by code like:</p>
-<div id="doc_figure_u.152"></div> <pre>
+<p id="doc_section_10_2_6_p_1">The message "Potential missing slash after C, D, N, L, or T with format" can be caused by code like:</p>
+<div id="doc_figure_u.157"></div> <pre>
xo_emit("{T:%6.6s}\n", "Max");
- </pre> <p id="doc_section_8_2_6_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.153"></div> <pre>
+ </pre> <p id="doc_section_10_2_6_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.158"></div> <pre>
xo_emit("{T:/%6.6s}\n", "Max");
- </pre> <p id="doc_section_8_2_6_p_5">The "%6.6s" will be a literal, not a field format. While it's possibly valid, it's likely a missing "/".</p>
+ </pre> <p id="doc_section_10_2_6_p_5">The "%6.6s" will be a literal, not a field format. While it's possibly valid, it's likely a missing "/".</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_7">
+<h3 id="doc_section_10_2_7">
<div class="self-section-number">
-<a href="#doc_section_8_2_7">8.2.7</a> </div>
+<a href="#doc_section_10_2_7">10.2.7</a> </div>
<a id="an-encoding-format-cannot-be-given-roles-dnlt" href="#an-encoding-format-cannot-be-given-roles-dnlt">'An encoding format cannot be given (roles: DNLT)'</a>
</h3>
-<p id="doc_section_8_2_7_p_1">The message "An encoding format cannot be given (roles: DNLT)" can be caused by code like:</p>
-<div id="doc_figure_u.154"></div> <pre>
+<p id="doc_section_10_2_7_p_1">The message "An encoding format cannot be given (roles: DNLT)" can be caused by code like:</p>
+<div id="doc_figure_u.159"></div> <pre>
xo_emit("{T:Max//%s}", "Max");
- </pre> <p id="doc_section_8_2_7_p_3">Fields with the C, D, N, L, and T roles are not emitted in the 'encoding' style (JSON, XML), so an encoding format would make no sense.</p>
+ </pre> <p id="doc_section_10_2_7_p_3">Fields with the C, D, N, L, and T roles are not emitted in the 'encoding' style (JSON, XML), so an encoding format would make no sense.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_8">
+<h3 id="doc_section_10_2_8">
<div class="self-section-number">
-<a href="#doc_section_8_2_8">8.2.8</a> </div>
+<a href="#doc_section_10_2_8">10.2.8</a> </div>
<a id="format-cannot-be-given-when-content-is-present-roles-cdln" href="#format-cannot-be-given-when-content-is-present-roles-cdln">'Format cannot be given when content is present (roles: CDLN)'</a>
</h3>
-<p id="doc_section_8_2_8_p_1">The message "Format cannot be given when content is present (roles: CDLN)" can be caused by code like:</p>
-<div id="doc_figure_u.155"></div> <pre>
+<p id="doc_section_10_2_8_p_1">The message "Format cannot be given when content is present (roles: CDLN)" can be caused by code like:</p>
+<div id="doc_figure_u.160"></div> <pre>
xo_emit("{N:Max/%6.6s}", "Max");
- </pre> <p id="doc_section_8_2_8_p_3">Fields with the C, D, L, or N roles can't have both static literal content ("{L:Label}") and a format ("{L:/%s}"). This error will also occur when the content has a backslash in it, like "{N:Type of I/O}"; backslashes should be escaped, like "{N:Type of I\\/O}". Note the double backslash, one for handling 'C' strings, and one for libxo.</p>
+ </pre> <p id="doc_section_10_2_8_p_3">Fields with the C, D, L, or N roles can't have both static literal content ("{L:Label}") and a format ("{L:/%s}"). This error will also occur when the content has a backslash in it, like "{N:Type of I/O}"; backslashes should be escaped, like "{N:Type of I\\/O}". Note the double backslash, one for handling 'C' strings, and one for libxo.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_9">
+<h3 id="doc_section_10_2_9">
<div class="self-section-number">
-<a href="#doc_section_8_2_9">8.2.9</a> </div>
+<a href="#doc_section_10_2_9">10.2.9</a> </div>
<a id="field-has-color-without-fg--or-bg--role-c" href="#field-has-color-without-fg--or-bg--role-c">'Field has color without fg- or bg- (role: C)'</a>
</h3>
-<p id="doc_section_8_2_9_p_1">The message "Field has color without fg- or bg- (role: C)" can be caused by code like:</p>
-<div id="doc_figure_u.156"></div> <pre>
+<p id="doc_section_10_2_9_p_1">The message "Field has color without fg- or bg- (role: C)" can be caused by code like:</p>
+<div id="doc_figure_u.161"></div> <pre>
xo_emit("{C:green}{:foo}{C:}", x);
- </pre> <p id="doc_section_8_2_9_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.157"></div> <pre>
+ </pre> <p id="doc_section_10_2_9_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.162"></div> <pre>
xo_emit("{C:fg-green}{:foo}{C:}", x);
- </pre> <p id="doc_section_8_2_9_p_5">Colors must be prefixed by either "fg&#8209;" or "bg&#8209;".</p>
+ </pre> <p id="doc_section_10_2_9_p_5">Colors must be prefixed by either "fg&#8209;" or "bg&#8209;".</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_10">
+<h3 id="doc_section_10_2_10">
<div class="self-section-number">
-<a href="#doc_section_8_2_10">8.2.10</a> </div>
+<a href="#doc_section_10_2_10">10.2.10</a> </div>
<a id="field-has-invalid-color-or-effect-role-c" href="#field-has-invalid-color-or-effect-role-c">'Field has invalid color or effect (role: C)'</a>
</h3>
-<p id="doc_section_8_2_10_p_1">The message "Field has invalid color or effect (role: C)" can be caused by code like:</p>
-<div id="doc_figure_u.158"></div> <pre>
+<p id="doc_section_10_2_10_p_1">The message "Field has invalid color or effect (role: C)" can be caused by code like:</p>
+<div id="doc_figure_u.163"></div> <pre>
xo_emit("{C:fg-purple,bold}{:foo}{C:gween}", x);
- </pre> <p id="doc_section_8_2_10_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.159"></div> <pre>
+ </pre> <p id="doc_section_10_2_10_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.164"></div> <pre>
xo_emit("{C:fg-red,bold}{:foo}{C:fg-green}", x);
- </pre> <p id="doc_section_8_2_10_p_5">The list of colors and effects are limited. The set of colors includes default, black, red, green, yellow, blue, magenta, cyan, and white, which must be prefixed by either "fg&#8209;" or "bg&#8209;". Effects are limited to bold, no-bold, underline, no-underline, inverse, no-inverse, normal, and reset. Values must be separated by commas.</p>
+ </pre> <p id="doc_section_10_2_10_p_5">The list of colors and effects are limited. The set of colors includes default, black, red, green, yellow, blue, magenta, cyan, and white, which must be prefixed by either "fg&#8209;" or "bg&#8209;". Effects are limited to bold, no-bold, underline, no-underline, inverse, no-inverse, normal, and reset. Values must be separated by commas.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_11">
+<h3 id="doc_section_10_2_11">
<div class="self-section-number">
-<a href="#doc_section_8_2_11">8.2.11</a> </div>
+<a href="#doc_section_10_2_11">10.2.11</a> </div>
<a id="field-has-humanize-modifier-but-no-format-string" href="#field-has-humanize-modifier-but-no-format-string">'Field has humanize modifier but no format string'</a>
</h3>
-<p id="doc_section_8_2_11_p_1">The message "Field has humanize modifier but no format string" can be caused by code like:</p>
-<div id="doc_figure_u.160"></div> <pre>
+<p id="doc_section_10_2_11_p_1">The message "Field has humanize modifier but no format string" can be caused by code like:</p>
+<div id="doc_figure_u.165"></div> <pre>
xo_emit("{h:value}", value);
- </pre> <p id="doc_section_8_2_11_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.161"></div> <pre>
+ </pre> <p id="doc_section_10_2_11_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.166"></div> <pre>
xo_emit("{h:value/%d}", value);
- </pre> <p id="doc_section_8_2_11_p_5">Humanization is only value for numbers, which are not likely to use the default format ("%s").</p>
+ </pre> <p id="doc_section_10_2_11_p_5">Humanization is only value for numbers, which are not likely to use the default format ("%s").</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_12">
+<h3 id="doc_section_10_2_12">
<div class="self-section-number">
-<a href="#doc_section_8_2_12">8.2.12</a> </div>
+<a href="#doc_section_10_2_12">10.2.12</a> </div>
<a id="field-has-hn--modifier-but-not-h-modifier" href="#field-has-hn--modifier-but-not-h-modifier">'Field has hn-* modifier but not 'h' modifier'</a>
</h3>
-<p id="doc_section_8_2_12_p_1">The message "Field has hn-* modifier but not 'h' modifier" can be caused by code like:</p>
-<div id="doc_figure_u.162"></div> <pre>
+<p id="doc_section_10_2_12_p_1">The message "Field has hn-* modifier but not 'h' modifier" can be caused by code like:</p>
+<div id="doc_figure_u.167"></div> <pre>
xo_emit("{,hn-1000:value}", value);
- </pre> <p id="doc_section_8_2_12_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.163"></div> <pre>
+ </pre> <p id="doc_section_10_2_12_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.168"></div> <pre>
xo_emit("{h,hn-1000:value}", value);
- </pre> <p id="doc_section_8_2_12_p_5">The hn-* modifiers (hn-decimal, hn-space, hn-1000) are only valid for fields with the {h:} modifier.</p>
+ </pre> <p id="doc_section_10_2_12_p_5">The hn-* modifiers (hn-decimal, hn-space, hn-1000) are only valid for fields with the {h:} modifier.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_13">
+<h3 id="doc_section_10_2_13">
<div class="self-section-number">
-<a href="#doc_section_8_2_13">8.2.13</a> </div>
+<a href="#doc_section_10_2_13">10.2.13</a> </div>
<a id="value-field-must-have-a-name-as-content" href="#value-field-must-have-a-name-as-content">'Value field must have a name (as content)")'</a>
</h3>
-<p id="doc_section_8_2_13_p_1">The message "Value field must have a name (as content)")" can be caused by code like:</p>
-<div id="doc_figure_u.164"></div> <pre>
+<p id="doc_section_10_2_13_p_1">The message "Value field must have a name (as content)")" can be caused by code like:</p>
+<div id="doc_figure_u.169"></div> <pre>
xo_emit("{:/%s}", "value");
- </pre> <p id="doc_section_8_2_13_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.165"></div> <pre>
+ </pre> <p id="doc_section_10_2_13_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.170"></div> <pre>
xo_emit("{:tag-name/%s}", "value");
- </pre> <p id="doc_section_8_2_13_p_5">The field name is used for XML and JSON encodings. These tags names are static and must appear directly in the field descriptor.</p>
+ </pre> <p id="doc_section_10_2_13_p_5">The field name is used for XML and JSON encodings. These tags names are static and must appear directly in the field descriptor.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_14">
+<h3 id="doc_section_10_2_14">
<div class="self-section-number">
-<a href="#doc_section_8_2_14">8.2.14</a> </div>
+<a href="#doc_section_10_2_14">10.2.14</a> </div>
<a id="use-hyphens-not-underscores-for-value-field-name" href="#use-hyphens-not-underscores-for-value-field-name">'Use hyphens, not underscores, for value field name'</a>
</h3>
-<p id="doc_section_8_2_14_p_1">The message "Use hyphens, not underscores, for value field name" can be caused by code like:</p>
-<div id="doc_figure_u.166"></div> <pre>
+<p id="doc_section_10_2_14_p_1">The message "Use hyphens, not underscores, for value field name" can be caused by code like:</p>
+<div id="doc_figure_u.171"></div> <pre>
xo_emit("{:no_under_scores}", "bad");
- </pre> <p id="doc_section_8_2_14_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.167"></div> <pre>
+ </pre> <p id="doc_section_10_2_14_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.172"></div> <pre>
xo_emit("{:no-under-scores}", "bad");
- </pre> <p id="doc_section_8_2_14_p_5">Use of hyphens is traditional in XML, and the XOF_UNDERSCORES flag can be used to generate underscores in JSON, if desired. But the raw field name should use hyphens.</p>
+ </pre> <p id="doc_section_10_2_14_p_5">Use of hyphens is traditional in XML, and the XOF_UNDERSCORES flag can be used to generate underscores in JSON, if desired. But the raw field name should use hyphens.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_15">
+<h3 id="doc_section_10_2_15">
<div class="self-section-number">
-<a href="#doc_section_8_2_15">8.2.15</a> </div>
+<a href="#doc_section_10_2_15">10.2.15</a> </div>
<a id="value-field-name-cannot-start-with-digit" href="#value-field-name-cannot-start-with-digit">'Value field name cannot start with digit'</a>
</h3>
-<p id="doc_section_8_2_15_p_1">The message "Value field name cannot start with digit" can be caused by code like:</p>
-<div id="doc_figure_u.168"></div> <pre>
+<p id="doc_section_10_2_15_p_1">The message "Value field name cannot start with digit" can be caused by code like:</p>
+<div id="doc_figure_u.173"></div> <pre>
xo_emit("{:10-gig/}");
- </pre> <p id="doc_section_8_2_15_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.169"></div> <pre>
+ </pre> <p id="doc_section_10_2_15_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.174"></div> <pre>
xo_emit("{:ten-gig/}");
- </pre> <p id="doc_section_8_2_15_p_5">XML element names cannot start with a digit.</p>
+ </pre> <p id="doc_section_10_2_15_p_5">XML element names cannot start with a digit.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_16">
+<h3 id="doc_section_10_2_16">
<div class="self-section-number">
-<a href="#doc_section_8_2_16">8.2.16</a> </div>
+<a href="#doc_section_10_2_16">10.2.16</a> </div>
<a id="value-field-name-should-be-lower-case" href="#value-field-name-should-be-lower-case">'Value field name should be lower case'</a>
</h3>
-<p id="doc_section_8_2_16_p_1">The message "Value field name should be lower case" can be caused by code like:</p>
-<div id="doc_figure_u.170"></div> <pre>
+<p id="doc_section_10_2_16_p_1">The message "Value field name should be lower case" can be caused by code like:</p>
+<div id="doc_figure_u.175"></div> <pre>
xo_emit("{:WHY-ARE-YOU-SHOUTING}", "NO REASON");
- </pre> <p id="doc_section_8_2_16_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.171"></div> <pre>
+ </pre> <p id="doc_section_10_2_16_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.176"></div> <pre>
xo_emit("{:why-are-you-shouting}", "no reason");
- </pre> <p id="doc_section_8_2_16_p_5">Lower case is more civilized. Even TLAs should be lower case to avoid scenarios where the differences between "XPath" and "Xpath" drive your users crazy. Lower case rules the seas.</p>
+ </pre> <p id="doc_section_10_2_16_p_5">Lower case is more civilized. Even TLAs should be lower case to avoid scenarios where the differences between "XPath" and "Xpath" drive your users crazy. Lower case rules the seas.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_17">
+<h3 id="doc_section_10_2_17">
<div class="self-section-number">
-<a href="#doc_section_8_2_17">8.2.17</a> </div>
+<a href="#doc_section_10_2_17">10.2.17</a> </div>
<a id="value-field-name-should-be-longer-than-two-characters" href="#value-field-name-should-be-longer-than-two-characters">'Value field name should be longer than two characters'</a>
</h3>
-<p id="doc_section_8_2_17_p_1">The message "Value field name should be longer than two characters" can be caused by code like:</p>
-<div id="doc_figure_u.172"></div> <pre>
+<p id="doc_section_10_2_17_p_1">The message "Value field name should be longer than two characters" can be caused by code like:</p>
+<div id="doc_figure_u.177"></div> <pre>
xo_emit("{:x}", "mumble");
- </pre> <p id="doc_section_8_2_17_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.173"></div> <pre>
+ </pre> <p id="doc_section_10_2_17_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.178"></div> <pre>
xo_emit("{:something-meaningful}", "mumble");
- </pre> <p id="doc_section_8_2_17_p_5">Field names should be descriptive, and it's hard to be descriptive in less than two characters. Consider your users and try to make something more useful. Note that this error often occurs when the field type is placed after the colon ("{:T/%20s}"), instead of before it ("{T:/20s}").</p>
+ </pre> <p id="doc_section_10_2_17_p_5">Field names should be descriptive, and it's hard to be descriptive in less than two characters. Consider your users and try to make something more useful. Note that this error often occurs when the field type is placed after the colon ("{:T/%20s}"), instead of before it ("{T:/20s}").</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_18">
+<h3 id="doc_section_10_2_18">
<div class="self-section-number">
-<a href="#doc_section_8_2_18">8.2.18</a> </div>
+<a href="#doc_section_10_2_18">10.2.18</a> </div>
<a id="value-field-name-contains-invalid-character" href="#value-field-name-contains-invalid-character">'Value field name contains invalid character'</a>
</h3>
-<p id="doc_section_8_2_18_p_1">The message "Value field name contains invalid character" can be caused by code like:</p>
-<div id="doc_figure_u.174"></div> <pre>
+<p id="doc_section_10_2_18_p_1">The message "Value field name contains invalid character" can be caused by code like:</p>
+<div id="doc_figure_u.179"></div> <pre>
xo_emit("{:cost-in-$$/%u}", 15);
- </pre> <p id="doc_section_8_2_18_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.175"></div> <pre>
+ </pre> <p id="doc_section_10_2_18_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.180"></div> <pre>
xo_emit("{:cost-in-dollars/%u}", 15);
- </pre> <p id="doc_section_8_2_18_p_5">An invalid character is often a sign of a typo, like "{:]}" instead of "{]:}". Field names are restricted to lower-case characters, digits, and hyphens.</p>
+ </pre> <p id="doc_section_10_2_18_p_5">An invalid character is often a sign of a typo, like "{:]}" instead of "{]:}". Field names are restricted to lower-case characters, digits, and hyphens.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_19">
+<h3 id="doc_section_10_2_19">
<div class="self-section-number">
-<a href="#doc_section_8_2_19">8.2.19</a> </div>
+<a href="#doc_section_10_2_19">10.2.19</a> </div>
<a id="decoration-field-contains-invalid-character" href="#decoration-field-contains-invalid-character">'decoration field contains invalid character'</a>
</h3>
-<p id="doc_section_8_2_19_p_1">The message "decoration field contains invalid character" can be caused by code like:</p>
-<div id="doc_figure_u.176"></div> <pre>
+<p id="doc_section_10_2_19_p_1">The message "decoration field contains invalid character" can be caused by code like:</p>
+<div id="doc_figure_u.181"></div> <pre>
xo_emit("{D:not good}");
- </pre> <p id="doc_section_8_2_19_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.177"></div> <pre>
+ </pre> <p id="doc_section_10_2_19_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.182"></div> <pre>
xo_emit("{D:((}{:good}{D:))}", "yes");
- </pre> <p id="doc_section_8_2_19_p_5">This is minor, but fields should use proper roles. Decoration fields are meant to hold punctuation and other characters used to decorate the content, typically to make it more readable to human readers.</p>
+ </pre> <p id="doc_section_10_2_19_p_5">This is minor, but fields should use proper roles. Decoration fields are meant to hold punctuation and other characters used to decorate the content, typically to make it more readable to human readers.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_20">
+<h3 id="doc_section_10_2_20">
<div class="self-section-number">
-<a href="#doc_section_8_2_20">8.2.20</a> </div>
+<a href="#doc_section_10_2_20">10.2.20</a> </div>
<a id="anchor-content-should-be-decimal-width" href="#anchor-content-should-be-decimal-width">'Anchor content should be decimal width'</a>
</h3>
-<p id="doc_section_8_2_20_p_1">The message "Anchor content should be decimal width" can be caused by code like:</p>
-<div id="doc_figure_u.178"></div> <pre>
+<p id="doc_section_10_2_20_p_1">The message "Anchor content should be decimal width" can be caused by code like:</p>
+<div id="doc_figure_u.183"></div> <pre>
xo_emit("{[:mumble}");
- </pre> <p id="doc_section_8_2_20_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.179"></div> <pre>
+ </pre> <p id="doc_section_10_2_20_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.184"></div> <pre>
xo_emit("{[:32}");
- </pre> <p id="doc_section_8_2_20_p_5">Anchors need an integer value to specify the width of the set of anchored fields. The value can be positive (for left padding/right justification) or negative (for right padding/left justification) and can appear in either the start or stop anchor field descriptor.</p>
+ </pre> <p id="doc_section_10_2_20_p_5">Anchors need an integer value to specify the width of the set of anchored fields. The value can be positive (for left padding/right justification) or negative (for right padding/left justification) and can appear in either the start or stop anchor field descriptor.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_21">
+<h3 id="doc_section_10_2_21">
<div class="self-section-number">
-<a href="#doc_section_8_2_21">8.2.21</a> </div>
+<a href="#doc_section_10_2_21">10.2.21</a> </div>
<a id="anchor-format-should-be-d" href="#anchor-format-should-be-d">'Anchor format should be "%d"'</a>
</h3>
-<p id="doc_section_8_2_21_p_1">The message "Anchor format should be "%d"" can be caused by code like:</p>
-<div id="doc_figure_u.180"></div> <pre>
+<p id="doc_section_10_2_21_p_1">The message "Anchor format should be "%d"" can be caused by code like:</p>
+<div id="doc_figure_u.185"></div> <pre>
xo_emit("{[:/%s}");
- </pre> <p id="doc_section_8_2_21_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.181"></div> <pre>
+ </pre> <p id="doc_section_10_2_21_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.186"></div> <pre>
xo_emit("{[:/%d}");
- </pre> <p id="doc_section_8_2_21_p_5">Anchors only grok integer values, and if the value is not static, if must be in an 'int' argument, represented by the "%d" format. Anything else is an error.</p>
+ </pre> <p id="doc_section_10_2_21_p_5">Anchors only grok integer values, and if the value is not static, if must be in an 'int' argument, represented by the "%d" format. Anything else is an error.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_22">
+<h3 id="doc_section_10_2_22">
<div class="self-section-number">
-<a href="#doc_section_8_2_22">8.2.22</a> </div>
+<a href="#doc_section_10_2_22">10.2.22</a> </div>
<a id="anchor-cannot-have-both-format-and-encoding-format" href="#anchor-cannot-have-both-format-and-encoding-format">'Anchor cannot have both format and encoding format")'</a>
</h3>
-<p id="doc_section_8_2_22_p_1">The message "Anchor cannot have both format and encoding format")" can be caused by code like:</p>
-<div id="doc_figure_u.182"></div> <pre>
+<p id="doc_section_10_2_22_p_1">The message "Anchor cannot have both format and encoding format")" can be caused by code like:</p>
+<div id="doc_figure_u.187"></div> <pre>
xo_emit("{[:32/%d}");
- </pre> <p id="doc_section_8_2_22_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.183"></div> <pre>
+ </pre> <p id="doc_section_10_2_22_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.188"></div> <pre>
xo_emit("{[:32}");
- </pre> <p id="doc_section_8_2_22_p_5">Anchors can have a static value or argument for the width, but cannot have both.</p>
+ </pre> <p id="doc_section_10_2_22_p_5">Anchors can have a static value or argument for the width, but cannot have both.</p>
</div>
<div class="content">
-<h3 id="doc_section_8_2_23">
+<h3 id="doc_section_10_2_23">
<div class="self-section-number">
-<a href="#doc_section_8_2_23">8.2.23</a> </div>
+<a href="#doc_section_10_2_23">10.2.23</a> </div>
<a id="max-width-only-valid-for-strings" href="#max-width-only-valid-for-strings">'Max width only valid for strings'</a>
</h3>
-<p id="doc_section_8_2_23_p_1">The message "Max width only valid for strings" can be caused by code like:</p>
-<div id="doc_figure_u.184"></div> <pre>
+<p id="doc_section_10_2_23_p_1">The message "Max width only valid for strings" can be caused by code like:</p>
+<div id="doc_figure_u.189"></div> <pre>
xo_emit("{:tag/%2.4.6d}", 55);
- </pre> <p id="doc_section_8_2_23_p_3">This code should be replaced with code like:</p>
-<div id="doc_figure_u.185"></div> <pre>
+ </pre> <p id="doc_section_10_2_23_p_3">This code should be replaced with code like:</p>
+<div id="doc_figure_u.190"></div> <pre>
xo_emit("{:tag/%2.6d}", 55);
- </pre> <p id="doc_section_8_2_23_p_5">libxo allows a true 'max width' in addition to the traditional printf-style 'max number of bytes to use for input'. But this is supported only for string values, since it makes no sense for non-strings. This error may occur from a typo, like "{:tag/%6..6d}" where only one period should be used.</p>
+ </pre> <p id="doc_section_10_2_23_p_5">libxo allows a true 'max width' in addition to the traditional printf-style 'max number of bytes to use for input'. But this is supported only for string values, since it makes no sense for non-strings. This error may occur from a typo, like "{:tag/%6..6d}" where only one period should be used.</p>
</div>
</div>
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_9" class="np">
+<h1 id="doc_section_11" class="np">
<div class="self-section-number">
-<a href="#doc_section_9">9_</a> </div>
+<a href="#doc_section_11">11_</a> </div>
<a id="howtos-focused-directions" href="#howtos-focused-directions">Howtos: Focused Directions</a>
</h1>
-<p id="doc_section_9_p_1">This section provides task-oriented instructions for selected tasks. If you have a task that needs instructions, please open a request as an enhancement issue on github.</p>
-<p id="doc_section_9_p_2">Section Contents: </p>
+<p id="doc_section_11_p_1">This section provides task-oriented instructions for selected tasks. If you have a task that needs instructions, please open a request as an enhancement issue on github.</p>
+<p id="doc_section_11_p_2">Section Contents: </p>
<ul>
-<li><a href="#howto-report-bugs" title="Howto: Report bugs">Section 9.1</a></li>
-<li><a href="#howto-install-libxo" title="Howto: Install libxo">Section 9.2</a></li>
-<li><a href="#howto-convert-command-line-applications" title="Howto: Convert command line applications">Section 9.3</a></li>
-<li><a href="#howto-use-xo-in-shell-scripts" title='Howto: Use "xo" in Shell Scripts'>Section 9.4</a></li>
-<li><a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 9.5</a></li>
+<li><a href="#howto-report-bugs" title="Howto: Report bugs">Section 11.1</a></li>
+<li><a href="#howto-install-libxo" title="Howto: Install libxo">Section 11.2</a></li>
+<li><a href="#howto-convert-command-line-applications" title="Howto: Convert command line applications">Section 11.3</a></li>
+<li><a href="#howto-use-xo-in-shell-scripts" title='Howto: Use "xo" in Shell Scripts'>Section 11.4</a></li>
+<li><a href="#howto-i18n" title="Howto: Internationalization (i18n)">Section 11.5</a></li>
</ul>
<div class="content">
-<h2 id="doc_section_9_1">
+<h2 id="doc_section_11_1">
<div class="self-section-number">
-<a href="#doc_section_9_1">9.1</a> </div>
+<a href="#doc_section_11_1">11.1</a> </div>
<a id="howto-report-bugs" href="#howto-report-bugs">Howto: Report bugs</a>
</h2>
-<p id="doc_section_9_1_p_1">libxo uses github to track bugs or request enhancements. Please use the following URL:</p>
-<p id="doc_section_9_1_p_2"> <a href="https://github.com/Juniper/libxo/issues">https://github.com/Juniper/libxo/issues</a></p>
+<p id="doc_section_11_1_p_1">libxo uses github to track bugs or request enhancements. Please use the following URL:</p>
+<p id="doc_section_11_1_p_2"> <a href="https://github.com/Juniper/libxo/issues">https://github.com/Juniper/libxo/issues</a></p>
</div>
<div class="content">
-<h2 id="doc_section_9_2">
+<h2 id="doc_section_11_2">
<div class="self-section-number">
-<a href="#doc_section_9_2">9.2</a> </div>
+<a href="#doc_section_11_2">11.2</a> </div>
<a id="howto-install-libxo" href="#howto-install-libxo">Howto: Install libxo</a>
</h2>
-<p id="doc_section_9_2_p_1">libxo is open source, under a new BSD license. Source code is available on github, as are recent releases. To get the most current release, please visit:</p>
-<p id="doc_section_9_2_p_2"> <a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a></p>
-<p id="doc_section_9_2_p_3">After downloading and untarring the source code, building involves the following steps:</p>
-<div id="doc_figure_u.186"></div> <pre>
+<p id="doc_section_11_2_p_1">libxo is open source, under a new BSD license. Source code is available on github, as are recent releases. To get the most current release, please visit:</p>
+<p id="doc_section_11_2_p_2"> <a href="https://github.com/Juniper/libxo/releases">https://github.com/Juniper/libxo/releases</a></p>
+<p id="doc_section_11_2_p_3">After downloading and untarring the source code, building involves the following steps:</p>
+<div id="doc_figure_u.191"></div> <pre>
sh bin/setup.sh
cd build
../configure
make
make test
sudo make install
- </pre> <p id="doc_section_9_2_p_5">libxo uses a distinct "build" directory to keep generated files separated from source files.</p>
-<p id="doc_section_9_2_p_6">Use "../configure --help" to display available configuration options, which include the following:</p>
-<div id="doc_figure_u.187"></div> <pre>
+ </pre> <p id="doc_section_11_2_p_5">libxo uses a distinct "build" directory to keep generated files separated from source files.</p>
+<p id="doc_section_11_2_p_6">Use "../configure --help" to display available configuration options, which include the following:</p>
+<div id="doc_figure_u.192"></div> <pre>
--enable-warnings Turn on compiler warnings
--enable-debug Turn on debugging
--enable-text-only Turn on text-only rendering
@@ -26389,46 +26502,46 @@ jQuery(function ($) {
--disable-libxo-options Turn off support for LIBXO_OPTIONS
--with-gettext=PFX Specify location of gettext installation
--with-libslax-prefix=PFX Specify location of libslax config
- </pre> <p id="doc_section_9_2_p_8">Compiler warnings are a very good thing, but recent compiler version have added some very pedantic checks. While every attempt is made to keep libxo code warning-free, warnings are now optional. If you are doing development work on libxo, it is required that you use --enable-warnings to keep the code warning free, but most users need not use this option.</p>
-<p id="doc_section_9_2_p_9">libxo provides the --enable-text-only option to reduce the footprint of the library for smaller installations. XML, JSON, and HTML rendering logic is removed.</p>
-<p id="doc_section_9_2_p_10">The gettext library does not provide a simple means of learning its location, but libxo will look for it in /usr and /opt/local. If installed elsewhere, the installer will need to provide this information using the --with-gettext=/dir/path option.</p>
-<p id="doc_section_9_2_p_11">libslax is not required by libxo; it contains the "oxtradoc" program used to format documentation.</p>
-<p id="doc_section_9_2_p_12">For additional information, see <a href="#building-libxo" title="Building libxo">Section 1.1.2</a>.</p>
+ </pre> <p id="doc_section_11_2_p_8">Compiler warnings are a very good thing, but recent compiler version have added some very pedantic checks. While every attempt is made to keep libxo code warning-free, warnings are now optional. If you are doing development work on libxo, it is required that you use --enable-warnings to keep the code warning free, but most users need not use this option.</p>
+<p id="doc_section_11_2_p_9">libxo provides the --enable-text-only option to reduce the footprint of the library for smaller installations. XML, JSON, and HTML rendering logic is removed.</p>
+<p id="doc_section_11_2_p_10">The gettext library does not provide a simple means of learning its location, but libxo will look for it in /usr and /opt/local. If installed elsewhere, the installer will need to provide this information using the --with-gettext=/dir/path option.</p>
+<p id="doc_section_11_2_p_11">libslax is not required by libxo; it contains the "oxtradoc" program used to format documentation.</p>
+<p id="doc_section_11_2_p_12">For additional information, see <a href="#building-libxo" title="Building libxo">Section 2.2</a>.</p>
</div>
<div class="content">
-<h2 id="doc_section_9_3">
+<h2 id="doc_section_11_3">
<div class="self-section-number">
-<a href="#doc_section_9_3">9.3</a> </div>
+<a href="#doc_section_11_3">11.3</a> </div>
<a id="howto-convert-command-line-applications" href="#howto-convert-command-line-applications">Howto: Convert command line applications</a>
</h2>
-<div id="doc_figure_u.188"></div> <pre>
+<div id="doc_figure_u.193"></div> <pre>
How do I convert an existing command line application?
- </pre> <p id="doc_section_9_3_p_2">There are three basic steps for converting command line application to use libxo.</p>
-<p id="doc_section_9_3_p_3"> </p>
+ </pre> <p id="doc_section_11_3_p_2">There are three basic steps for converting command line application to use libxo.</p>
+<p id="doc_section_11_3_p_3"> </p>
<ul>
<li>Setting up the context</li>
<li>Converting printf calls</li>
<li>Creating hierarchy</li>
<li>Converting error functions</li>
</ul>
-<p id="doc_section_9_3_p_4">Section Contents: </p>
+<p id="doc_section_11_3_p_4">Section Contents: </p>
<ul>
-<li><a href="#setting-up-the-context" title="Setting up the context">Section 9.3.1</a></li>
-<li><a href="#converting-printf-calls" title="Converting printf Calls">Section 9.3.2</a></li>
-<li><a href="#creating-hierarchy" title="Creating Hierarchy">Section 9.3.3</a></li>
-<li><a href="#converting-error-functions" title="Converting Error Functions">Section 9.3.4</a></li>
+<li><a href="#setting-up-the-context" title="Setting up the context">Section 11.3.1</a></li>
+<li><a href="#converting-printf-calls" title="Converting printf Calls">Section 11.3.2</a></li>
+<li><a href="#creating-hierarchy" title="Creating Hierarchy">Section 11.3.3</a></li>
+<li><a href="#converting-error-functions" title="Converting Error Functions">Section 11.3.4</a></li>
</ul>
<div class="content">
-<h3 id="doc_section_9_3_1">
+<h3 id="doc_section_11_3_1">
<div class="self-section-number">
-<a href="#doc_section_9_3_1">9.3.1</a> </div>
+<a href="#doc_section_11_3_1">11.3.1</a> </div>
<a id="setting-up-the-context" href="#setting-up-the-context">Setting up the context</a>
</h3>
-<p id="doc_section_9_3_1_p_1">To use libxo, you'll need to include the "xo.h" header file in your source code files:</p>
-<div id="doc_figure_u.189"></div> <pre>
+<p id="doc_section_11_3_1_p_1">To use libxo, you'll need to include the "xo.h" header file in your source code files:</p>
+<div id="doc_figure_u.194"></div> <pre>
#include &lt;libxo/xo.h&gt;
- </pre> <p id="doc_section_9_3_1_p_3">In your main() function, you'll need to call xo_parse_args to handling argument parsing (<a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 3.4.1</a>). This function removes libxo-specific arguments the program's argv and returns either the number of remaining arguments or -1 to indicate an error.</p>
-<div id="doc_figure_u.190"></div> <pre>
+ </pre> <p id="doc_section_11_3_1_p_3">In your main() function, you'll need to call xo_parse_args to handling argument parsing (<a href="#xo_parse_args" title="Parsing Command-line Arguments (xo_parse_args)">Section 5.4.1</a>). This function removes libxo-specific arguments the program's argv and returns either the number of remaining arguments or -1 to indicate an error.</p>
+<div id="doc_figure_u.195"></div> <pre>
int main (int argc, char **argv)
{
argc = xo_parse_args(argc, argv);
@@ -26436,31 +26549,31 @@ jQuery(function ($) {
return argc;
....
}
- </pre> <p id="doc_section_9_3_1_p_5">At the bottom of your main(), you'll need to call xo_finish() to complete output processing for the default handle (<a href="#handles" title="Handles">Section 3.1</a>). libxo provides the xo_finish_atexit function that is suitable for use with the atexit(3) function.</p>
-<div id="doc_figure_u.191"></div> <pre>
+ </pre> <p id="doc_section_11_3_1_p_5">At the bottom of your main(), you'll need to call xo_finish() to complete output processing for the default handle (<a href="#handles" title="Handles">Section 5.1</a>). libxo provides the xo_finish_atexit function that is suitable for use with the atexit(3) function.</p>
+<div id="doc_figure_u.196"></div> <pre>
atexit(xo_finish_atexit);
</pre> </div>
<div class="content">
-<h3 id="doc_section_9_3_2">
+<h3 id="doc_section_11_3_2">
<div class="self-section-number">
-<a href="#doc_section_9_3_2">9.3.2</a> </div>
+<a href="#doc_section_11_3_2">11.3.2</a> </div>
<a id="converting-printf-calls" href="#converting-printf-calls">Converting printf Calls</a>
</h3>
-<p id="doc_section_9_3_2_p_1">The second task is inspecting code for printf(3) calls and replacing them with xo_emit() calls. The format strings are similar in task, but libxo format strings wrap output fields in braces. The following two calls produce identical text output:</p>
-<div id="doc_figure_u.192"></div> <pre>
+<p id="doc_section_11_3_2_p_1">The second task is inspecting code for printf(3) calls and replacing them with xo_emit() calls. The format strings are similar in task, but libxo format strings wrap output fields in braces. The following two calls produce identical text output:</p>
+<div id="doc_figure_u.197"></div> <pre>
printf("There are %d %s events\n", count, etype);
xo_emit("There are {:count/%d} {:event} events\n", count, etype);
- </pre> <p id="doc_section_9_3_2_p_3">"count" and "event" are used as names for JSON and XML output. The "count" field uses the format "%d" and "event" uses the default "%s" format. Both are "value" roles, which is the default role.</p>
-<p id="doc_section_9_3_2_p_4">Since text outside of output fields is passed verbatim, other roles are less important, but their proper use can help make output more useful. The "note" and "label" roles allow HTML output to recognize the relationship between text and the associated values, allowing appropriate "hover" and "onclick" behavior. Using the "units" role allows the presentation layer to perform conversions when needed. The "warning" and "error" roles allows use of color and font to draw attention to warnings. The "padding" role makes the use of vital whitespace more clear (<a href="#padding-role" title="The Padding Role ({P:})">Section 2.2.1.6</a>).</p>
-<p id="doc_section_9_3_2_p_5">The "title" role indicates the headings of table and sections. This allows HTML output to use CSS to make this relationship more obvious.</p>
-<div id="doc_figure_u.193"></div> <pre>
+ </pre> <p id="doc_section_11_3_2_p_3">"count" and "event" are used as names for JSON and XML output. The "count" field uses the format "%d" and "event" uses the default "%s" format. Both are "value" roles, which is the default role.</p>
+<p id="doc_section_11_3_2_p_4">Since text outside of output fields is passed verbatim, other roles are less important, but their proper use can help make output more useful. The "note" and "label" roles allow HTML output to recognize the relationship between text and the associated values, allowing appropriate "hover" and "onclick" behavior. Using the "units" role allows the presentation layer to perform conversions when needed. The "warning" and "error" roles allows use of color and font to draw attention to warnings. The "padding" role makes the use of vital whitespace more clear (<a href="#padding-role" title="The Padding Role ({P:})">Section 3.2.1.6</a>).</p>
+<p id="doc_section_11_3_2_p_5">The "title" role indicates the headings of table and sections. This allows HTML output to use CSS to make this relationship more obvious.</p>
+<div id="doc_figure_u.198"></div> <pre>
printf("Statistics:\n");
xo_emit("{T:Statistics}:\n");
- </pre> <p id="doc_section_9_3_2_p_7">The "color" roles controls foreground and background colors, as well as effects like bold and underline (see <a href="#color-role" title="The Color Role ({C:})">Section 2.2.1.1</a>).</p>
-<div id="doc_figure_u.194"></div> <pre>
+ </pre> <p id="doc_section_11_3_2_p_7">The "color" roles controls foreground and background colors, as well as effects like bold and underline (see <a href="#color-role" title="The Color Role ({C:})">Section 3.2.1.1</a>).</p>
+<div id="doc_figure_u.199"></div> <pre>
xo_emit("{C:bold}required{C:}\n");
- </pre> <p id="doc_section_9_3_2_p_9">Finally, the start- and stop-anchor roles allow justification and padding over multiple fields (see <a href="#anchor-role" title="The Anchor Roles ({[:} and {]:})">Section 2.2.1.10</a>).</p>
-<div id="doc_figure_u.195"></div> <pre>
+ </pre> <p id="doc_section_11_3_2_p_9">Finally, the start- and stop-anchor roles allow justification and padding over multiple fields (see <a href="#anchor-role" title="The Anchor Roles ({[:} and {]:})">Section 3.2.1.10</a>).</p>
+<div id="doc_figure_u.200"></div> <pre>
snprintf(buf, sizeof(buf), "(%u/%u/%u)", min, ave, max);
printf("%30s", buf);
@@ -26468,13 +26581,13 @@ jQuery(function ($) {
min, ave, max);
</pre> </div>
<div class="content">
-<h3 id="doc_section_9_3_3">
+<h3 id="doc_section_11_3_3">
<div class="self-section-number">
-<a href="#doc_section_9_3_3">9.3.3</a> </div>
+<a href="#doc_section_11_3_3">11.3.3</a> </div>
<a id="creating-hierarchy" href="#creating-hierarchy">Creating Hierarchy</a>
</h3>
-<p id="doc_section_9_3_3_p_1">Text output doesn't have any sort of hierarchy, but XML and JSON require this. Typically applications use indentation to represent these relationship:</p>
-<div id="doc_figure_u.196"></div> <pre>
+<p id="doc_section_11_3_3_p_1">Text output doesn't have any sort of hierarchy, but XML and JSON require this. Typically applications use indentation to represent these relationship:</p>
+<div id="doc_figure_u.201"></div> <pre>
printf("table %d\n", tnum);
for (i = 0; i &lt; tmax; i++) {
printf(" %s %d\n", table[i].name, table[i].size);
@@ -26489,10 +26602,10 @@ jQuery(function ($) {
xo_close_instance("table");
}
xo_close_list("table");
- </pre> <p id="doc_section_9_3_3_p_3">The open and close list functions are used before and after the list, and the open and close instance functions are used before and after each instance with in the list.</p>
-<p id="doc_section_9_3_3_p_4">Typically these developer looks for a "for" loop as an indication of where to put these calls.</p>
-<p id="doc_section_9_3_3_p_5">In addition, the open and close container functions allow for organization levels of hierarchy.</p>
-<div id="doc_figure_u.197"></div> <pre>
+ </pre> <p id="doc_section_11_3_3_p_3">The open and close list functions are used before and after the list, and the open and close instance functions are used before and after each instance with in the list.</p>
+<p id="doc_section_11_3_3_p_4">Typically these developer looks for a "for" loop as an indication of where to put these calls.</p>
+<p id="doc_section_11_3_3_p_5">In addition, the open and close container functions allow for organization levels of hierarchy.</p>
+<div id="doc_figure_u.202"></div> <pre>
printf("Paging information:\n");
printf(" Free: %lu\n", free);
printf(" Active: %lu\n", active);
@@ -26505,36 +26618,36 @@ jQuery(function ($) {
xo_close_container("paging-information");
</pre> </div>
<div class="content">
-<h3 id="doc_section_9_3_4">
+<h3 id="doc_section_11_3_4">
<div class="self-section-number">
-<a href="#doc_section_9_3_4">9.3.4</a> </div>
+<a href="#doc_section_11_3_4">11.3.4</a> </div>
<a id="converting-error-functions" href="#converting-error-functions">Converting Error Functions</a>
</h3>
-<p id="doc_section_9_3_4_p_1">libxo provides variants of the standard error and warning functions, err(3) and warn(3). There are two variants, one for putting the errors on standard error, and the other writes the errors and warnings to the handle using the appropriate encoding style:</p>
-<div id="doc_figure_u.198"></div> <pre>
+<p id="doc_section_11_3_4_p_1">libxo provides variants of the standard error and warning functions, err(3) and warn(3). There are two variants, one for putting the errors on standard error, and the other writes the errors and warnings to the handle using the appropriate encoding style:</p>
+<div id="doc_figure_u.203"></div> <pre>
err(1, "cannot open output file: %s", file);
xo_err(1, "cannot open output file: %s", file);
xo_emit_err(1, "cannot open output file: {:filename}", file);
</pre> </div>
</div>
-<div class="content"><h2 id="doc_section_9_4">
+<div class="content"><h2 id="doc_section_11_4">
<div class="self-section-number">
-<a href="#doc_section_9_4">9.4</a> </div>
+<a href="#doc_section_11_4">11.4</a> </div>
<a id="howto-use-xo-in-shell-scripts" href="#howto-use-xo-in-shell-scripts">Howto: Use "xo" in Shell Scripts</a>
</h2></div>
<div class="content">
-<h2 id="doc_section_9_5">
+<h2 id="doc_section_11_5">
<div class="self-section-number">
-<a href="#doc_section_9_5">9.5</a> </div>
+<a href="#doc_section_11_5">11.5</a> </div>
<a id="howto-i18n" href="#howto-i18n">Howto: Internationalization (i18n)</a>
</h2>
-<div id="doc_figure_u.199"></div> <pre>
+<div id="doc_figure_u.204"></div> <pre>
How do I use libxo to support internationalization?
- </pre> <p id="doc_section_9_5_p_2">libxo allows format and field strings to be used a keys into message catalogs to enable translation into a user's native language by invoking the standard gettext(3) functions.</p>
-<p id="doc_section_9_5_p_3">gettext setup is a bit complicated: text strings are extracted from source files into "portable object template" (.pot) files using the "xgettext" command. For each language, this template file is used as the source for a message catalog in the "portable object" (.po) format, which are translated by hand and compiled into "machine object" (.mo) files using the "msgfmt" command. The .mo files are then typically installed in the /usr/share/locale or /opt/local/share/locale directories. At run time, the user's language settings are used to select a .mo file which is searched for matching messages. Text strings in the source code are used as keys to look up the native language strings in the .mo file.</p>
-<p id="doc_section_9_5_p_4">Since the xo_emit format string is used as the key into the message catalog, libxo removes unimportant field formatting and modifiers from the format string before use so that minor formatting changes will not impact the expensive translation process. We don't want a developer change such as changing "/%06d" to "/%08d" to force hand inspection of all .po files. The simplified version can be generated for a single message using the "xopo -s &lt;text&gt;" command, or an entire .pot can be translated using the "xopo -f &lt;input&gt; -o &lt;output&gt;" command.</p>
-<div id="doc_figure_u.200"></div> <pre>
+ </pre> <p id="doc_section_11_5_p_2">libxo allows format and field strings to be used a keys into message catalogs to enable translation into a user's native language by invoking the standard gettext(3) functions.</p>
+<p id="doc_section_11_5_p_3">gettext setup is a bit complicated: text strings are extracted from source files into "portable object template" (.pot) files using the "xgettext" command. For each language, this template file is used as the source for a message catalog in the "portable object" (.po) format, which are translated by hand and compiled into "machine object" (.mo) files using the "msgfmt" command. The .mo files are then typically installed in the /usr/share/locale or /opt/local/share/locale directories. At run time, the user's language settings are used to select a .mo file which is searched for matching messages. Text strings in the source code are used as keys to look up the native language strings in the .mo file.</p>
+<p id="doc_section_11_5_p_4">Since the xo_emit format string is used as the key into the message catalog, libxo removes unimportant field formatting and modifiers from the format string before use so that minor formatting changes will not impact the expensive translation process. We don't want a developer change such as changing "/%06d" to "/%08d" to force hand inspection of all .po files. The simplified version can be generated for a single message using the "xopo -s &lt;text&gt;" command, or an entire .pot can be translated using the "xopo -f &lt;input&gt; -o &lt;output&gt;" command.</p>
+<div id="doc_figure_u.205"></div> <pre>
EXAMPLE:
% xopo -s "There are {:count/%u} {:event/%.6s} events\n"
There are {:count} {:event} events\n
@@ -26566,44 +26679,44 @@ jQuery(function ($) {
# Install the .mo file
sudo cp po/my_lang/LC_MESSAGES/foo.mo \
/opt/local/share/locale/my_lang/LC_MESSAGE/
- </pre> <p id="doc_section_9_5_p_6">Once these steps are complete, you can use the "gettext" command to test the message catalog:</p>
-<div id="doc_figure_u.201"></div> <pre>
+ </pre> <p id="doc_section_11_5_p_6">Once these steps are complete, you can use the "gettext" command to test the message catalog:</p>
+<div id="doc_figure_u.206"></div> <pre>
gettext -d foo -e "some text"
- </pre> <p id="doc_section_9_5_p_8">Section Contents: </p>
-<ul><li><a href="#i18n-and-xo_emit" title="i18n and xo_emit">Section 9.5.1</a></li></ul>
+ </pre> <p id="doc_section_11_5_p_8">Section Contents: </p>
+<ul><li><a href="#i18n-and-xo_emit" title="i18n and xo_emit">Section 11.5.1</a></li></ul>
<div class="content">
-<h3 id="doc_section_9_5_1">
+<h3 id="doc_section_11_5_1">
<div class="self-section-number">
-<a href="#doc_section_9_5_1">9.5.1</a> </div>
+<a href="#doc_section_11_5_1">11.5.1</a> </div>
<a id="i18n-and-xo_emit" href="#i18n-and-xo_emit">i18n and xo_emit</a>
</h3>
-<p id="doc_section_9_5_1_p_1">There are three features used in libxo used to support i18n:</p>
-<p id="doc_section_9_5_1_p_2"> </p>
+<p id="doc_section_11_5_1_p_1">There are three features used in libxo used to support i18n:</p>
+<p id="doc_section_11_5_1_p_2"> </p>
<ul>
<li>The "{G:}" role looks for a translation of the format string.</li>
<li>The "{g:}" modifier looks for a translation of the field.</li>
<li>The "{p:}" modifier looks for a pluralized version of the field.</li>
</ul>
-<p id="doc_section_9_5_1_p_3">Together these three flags allows a single function call to give native language support, as well as libxo's normal XML, JSON, and HTML support.</p>
-<div id="doc_figure_u.202"></div> <pre>
+<p id="doc_section_11_5_1_p_3">Together these three flags allows a single function call to give native language support, as well as libxo's normal XML, JSON, and HTML support.</p>
+<div id="doc_figure_u.207"></div> <pre>
printf(gettext("Received %zu %s from {g:server} server\n"),
counter, ngettext("byte", "bytes", counter),
gettext("web"));
xo_emit("{G:}Received {:received/%zu} {Ngp:byte,bytes} "
"from {g:server} server\n", counter, "web");
- </pre> <p id="doc_section_9_5_1_p_5">libxo will see the "{G:}" role and will first simplify the format string, removing field formats and modifiers.</p>
-<div id="doc_figure_u.203"></div> <pre>
+ </pre> <p id="doc_section_11_5_1_p_5">libxo will see the "{G:}" role and will first simplify the format string, removing field formats and modifiers.</p>
+<div id="doc_figure_u.208"></div> <pre>
"Received {:received} {N:byte,bytes} from {:server} server\n"
- </pre> <p id="doc_section_9_5_1_p_7">libxo calls gettext(3) with that string to get a localized version. If your language were Pig Latin, the result might look like:</p>
-<div id="doc_figure_u.204"></div> <pre>
+ </pre> <p id="doc_section_11_5_1_p_7">libxo calls gettext(3) with that string to get a localized version. If your language were Pig Latin, the result might look like:</p>
+<div id="doc_figure_u.209"></div> <pre>
"Eceivedray {:received} {N:byte,bytes} omfray "
"{:server} erversay\n"
- </pre> <p id="doc_section_9_5_1_p_9">Note the field names do not change and they should not be translated. The contents of the note ("byte,bytes") should also not be translated, since the "g" modifier will need the untranslated value as the key for the message catalog.</p>
-<p id="doc_section_9_5_1_p_10">The field "{g:server}" requests the rendered value of the field be translated using gettext(3). In this example, "web" would be used.</p>
-<p id="doc_section_9_5_1_p_11">The field "{Ngp:byte,bytes}" shows an example of plural form using the "p" modifier with the "g" modifier. The base singular and plural forms appear inside the field, separated by a comma. At run time, libxo uses the previous field's numeric value to decide which form to use by calling ngettext(3).</p>
-<p id="doc_section_9_5_1_p_12">If a domain name is needed, it can be supplied as the content of the {G:} role. Domain names remain in use throughout the format string until cleared with another domain name.</p>
-<div id="doc_figure_u.205"></div> <pre>
+ </pre> <p id="doc_section_11_5_1_p_9">Note the field names do not change and they should not be translated. The contents of the note ("byte,bytes") should also not be translated, since the "g" modifier will need the untranslated value as the key for the message catalog.</p>
+<p id="doc_section_11_5_1_p_10">The field "{g:server}" requests the rendered value of the field be translated using gettext(3). In this example, "web" would be used.</p>
+<p id="doc_section_11_5_1_p_11">The field "{Ngp:byte,bytes}" shows an example of plural form using the "p" modifier with the "g" modifier. The base singular and plural forms appear inside the field, separated by a comma. At run time, libxo uses the previous field's numeric value to decide which form to use by calling ngettext(3).</p>
+<p id="doc_section_11_5_1_p_12">If a domain name is needed, it can be supplied as the content of the {G:} role. Domain names remain in use throughout the format string until cleared with another domain name.</p>
+<div id="doc_figure_u.210"></div> <pre>
printf(dgettext("dns", "Host %s not found: %d(%s)\n"),
name, errno, dgettext("strerror", strerror(errno)));
@@ -26614,21 +26727,21 @@ jQuery(function ($) {
</div>
<hr class="noprint">
<div class="content">
-<h1 id="doc_section_10" class="np">
+<h1 id="doc_section_12" class="np">
<div class="self-section-number">
-<a href="#doc_section_10">10_</a> </div>
+<a href="#doc_section_12">12_</a> </div>
<a id="examples" href="#examples">Examples</a>
</h1>
-<p id="doc_section_10_p_1">Section Contents: </p>
-<ul><li><a href="#unit-test" title="Unit Test">Section 10.1</a></li></ul>
+<p id="doc_section_12_p_1">Section Contents: </p>
+<ul><li><a href="#unit-test" title="Unit Test">Section 12.1</a></li></ul>
<div class="content">
-<h2 id="doc_section_10_1">
+<h2 id="doc_section_12_1">
<div class="self-section-number">
-<a href="#doc_section_10_1">10.1</a> </div>
+<a href="#doc_section_12_1">12.1</a> </div>
<a id="unit-test" href="#unit-test">Unit Test</a>
</h2>
-<p id="doc_section_10_1_p_1">Here is the unit test example:</p>
-<div id="doc_figure_u.206"></div> <pre>
+<p id="doc_section_12_1_p_1">Here is the unit test example:</p>
+<div id="doc_figure_u.211"></div> <pre>
int
main (int argc, char **argv)
{
@@ -26720,8 +26833,8 @@ jQuery(function ($) {
return 0;
}
- </pre> <p id="doc_section_10_1_p_3">Text output:</p>
-<div id="doc_figure_u.207"></div> <pre>
+ </pre> <p id="doc_section_12_1_p_3">Text output:</p>
+<div id="doc_figure_u.212"></div> <pre>
% ./testxo --libxo text
Item 'gum':
Total sold: 1412.0
@@ -26753,8 +26866,8 @@ jQuery(function ($) {
In stock: 45
On order: 1
SKU: GRO-000-533
- </pre> <p id="doc_section_10_1_p_5">JSON output:</p>
-<div id="doc_figure_u.208"></div> <pre>
+ </pre> <p id="doc_section_12_1_p_5">JSON output:</p>
+<div id="doc_figure_u.213"></div> <pre>
% ./testxo --libxo json,pretty
"top": {
"data": {
@@ -26808,8 +26921,8 @@ jQuery(function ($) {
]
}
}
- </pre> <p id="doc_section_10_1_p_7">XML output:</p>
-<div id="doc_figure_u.209"></div> <pre>
+ </pre> <p id="doc_section_12_1_p_7">XML output:</p>
+<div id="doc_figure_u.214"></div> <pre>
% ./testxo --libxo pretty,xml
&lt;top&gt;
&lt;data&gt;
@@ -26859,8 +26972,8 @@ jQuery(function ($) {
&lt;/item&gt;
&lt;/data&gt;
&lt;/top&gt;
- </pre> <p id="doc_section_10_1_p_9">HMTL output:</p>
-<div id="doc_figure_u.210"></div> <pre>
+ </pre> <p id="doc_section_12_1_p_9">HMTL output:</p>
+<div id="doc_figure_u.215"></div> <pre>
% ./testxo --libxo pretty,html
&lt;div class="line"&gt;
&lt;div class="label"&gt;Item&lt;/div&gt;
@@ -27054,8 +27167,8 @@ jQuery(function ($) {
&lt;div class="text"&gt;: &lt;/div&gt;
&lt;div class="data" data-tag="sku"&gt;GRO-000-533&lt;/div&gt;
&lt;/div&gt;
- </pre> <p id="doc_section_10_1_p_11">HTML output with xpath and info flags:</p>
-<div id="doc_figure_u.211"></div> <pre>
+ </pre> <p id="doc_section_12_1_p_11">HTML output with xpath and info flags:</p>
+<div id="doc_figure_u.216"></div> <pre>
% ./testxo --libxo pretty,html,xpath,info
&lt;div class="line"&gt;
&lt;div class="label"&gt;Item&lt;/div&gt;
diff --git a/contrib/libxo/doc/libxo.txt b/contrib/libxo/doc/libxo.txt
index f4b0eff5ebc0..3e8e9545e052 100644
--- a/contrib/libxo/doc/libxo.txt
+++ b/contrib/libxo/doc/libxo.txt
@@ -16,11 +16,28 @@ You want to prepare for the future, but you need to live in the
present. You'd love a flying car, but need to get to work today. You
want to support features like XML, JSON, and HTML rendering to allow
integration with NETCONF, REST, and web browsers, but you need to make
-text output for command line users. And you don't want multiple code
-paths that can't help but get out of sync. None of this "if (xml)
-{... } else {...}" logic. And ifdefs are right out. But you'd
-really, really like all the fancy features that modern encoding
-formats can provide. libxo can help.
+text output for command line users.
+
+And you don't want multiple code paths that can't help but get out of
+sync:
+
+ /* None of this "if (xml) {... } else {...}" logic */
+ if (xml) {
+ /* some code to make xml*/
+ } else {
+ /* other code to make text */
+ /* oops forgot to add something on both clauses! */
+ }
+
+ /* And ifdefs are right out. */
+ #ifdef MAKE_XML
+ /* icky */
+ #else
+ /* pooh */
+ #endif
+
+But you'd really, really like all the fancy features that modern
+encoding formats can provide. libxo can help.
The libxo library allows an application to generate text, XML, JSON,
and HTML output using a common set of function calls. The application
@@ -35,8 +52,11 @@ braces with a printf-like format string (^format-strings^):
linect, wordct, charct, file);
Each field can have a role, with the 'value' role being the default,
-and the role tells libxo how and when to render that field. Output
-can then be generated in various style, using the "--libxo" option:
+and the role tells libxo how and when to render that field (see
+^field-roles^ for details). Modifiers change how the field is
+rendered in different output styles (see ^field-modifiers^ for
+details. Output can then be generated in various style, using the
+"--libxo" option:
% wc /etc/motd
25 165 1140 /etc/motd
@@ -74,7 +94,12 @@ can then be generated in various style, using the "--libxo" option:
<div class="data" data-tag="filename">/etc/motd</div>
</div>
-** Getting libxo
+Same code path, same format strings, same information, but it's
+rendered in distinct styles based on run-time flags.
+
+* Getting libxo
+
+libxo now ships as part of the FreeBSD Operating System (as of -11).
libxo lives on github as:
@@ -101,7 +126,7 @@ as part of the FreeBSD operating system starting with release 11.0.
Issues, problems, and bugs should be directly to the issues page on
our github site.
-*** Downloading libxo Source Code
+** Downloading libxo Source Code
You can retrieve the source for libxo in two ways:
@@ -140,7 +165,7 @@ download the source code from svn, then you'll need to run
"autoreconf" by hand. This step is done for you by the "setup.sh"
script, described in the next section.
-*** Building libxo
+** Building libxo
To build libxo, you'll need to set up the build, run the "configure"
script, run the "make" command, and run the regression tests.
@@ -159,7 +184,7 @@ The following sections will walk through each of these steps with
additional details and options, but the above directions should be all
that's needed.
-**** Setting up the build
+*** Setting up the build
[If you downloaded a distfile, you can skip this step.]
@@ -171,7 +196,7 @@ generated files.
Note: We're are currently using autoreconf version 2.69.
-**** Running the "configure" Script
+*** Running the "configure" Script
Configure (and autoconf in general) provides a means of building
software in diverse environments. Our configure script supports
@@ -221,7 +246,7 @@ machine. To run the regression tests:
make test
-**** Installing libxo
+*** Installing libxo
Once the software is built, you'll need to install libxo using the
"make install" command. If you are the root user, or the owner of the
@@ -544,6 +569,15 @@ The following color names are supported:
| yellow | |
|---------+--------------------------------------------|
+When using colors, the developer should remember that users will
+change the foreground and background colors of terminal session
+according to their own tastes, so assuming that "blue" looks nice is
+never safe, and is a constant annoyance to your dear author. In
+addition, a significant percentage of users (1 in 12) will be color
+blind. Depending on color to convey critical information is not a
+good idea. Color should enhance output, but should not be used as the
+sole means of encoding information.
+
**** The Decoration Role ({D:})
Decorations are typically punctuation marks such as colons,
@@ -818,7 +852,7 @@ more meaningful.
"hn" can be used as an alias for "humanize".
The humanize modifier only affects display styles (TEXT and HMTL).
-The "no-humanize" option (See ^LIBXO_OPTIONS^) will block the function of
+The "no-humanize" option (See ^options^) will block the function of
the humanize modifier.
There are a number of modifiers that affect details of humanization.
@@ -1444,7 +1478,7 @@ properly.
xo_close_marker("fish-guts");
}
-** Command-line Arguments
+* Command-line Arguments @options@
libxo uses command line options to trigger rendering behavior. The
following options are recognised:
@@ -1453,9 +1487,17 @@ following options are recognised:
- --libxo=<options>
- --libxo:<brief-options>
+The following invocations are all identical in outcome:
+
+ my-app --libxo warn,pretty arg1
+ my-app --libxo=warn,pretty arg1
+ my-app --libxo:WP arg1
+
Programs using libxo are expecting to call the xo_parse_args function
to parse these arguments. See ^xo_parse_args^ for details.
+** Option keywords
+
Options is a comma-separated list of tokens that correspond to output
styles, flags, or features:
@@ -1463,6 +1505,7 @@ styles, flags, or features:
| Token | Action |
|-------------+-------------------------------------------------------|
| color | Enable colors/effects for display styles (TEXT, HTML) |
+| colors=xxxx | Adjust color output values |
| dtrt | Enable "Do The Right Thing" mode |
| flush | Flush after every libxo function call |
| flush-line | Flush after every line (line-buffered) |
@@ -1489,11 +1532,10 @@ styles, flags, or features:
| xpath | Add XPath expressions (HTML) |
|-------------+-------------------------------------------------------|
-The brief options are detailed in ^LIBXO_OPTIONS^.
-
Most of these option are simple and direct, but some require
additional details:
+- "colors" is described in ^color-mapping^.
- "flush-line" performs line buffering, even when the output is not
directed to a TTY device.
- "info" generates additional data for HTML, encoded in attributes
@@ -1513,6 +1555,73 @@ make incorrect calls.
- "warn-xml" causes those warnings to be placed in XML inside the
output.
+** Brief Options
+
+The brief options are simple single-letter aliases to the normal
+keywords, as detailed below:
+
+|--------+---------------------------------------------|
+| Option | Action |
+|--------+---------------------------------------------|
+| c | Enable color/effects for TEXT/HTML |
+| F | Force line-buffered flushing |
+| H | Enable HTML output (XO_STYLE_HTML) |
+| I | Enable info output (XOF_INFO) |
+| i<num> | Indent by <number> |
+| J | Enable JSON output (XO_STYLE_JSON) |
+| k | Add keys to XPATH expressions in HTML |
+| n | Disable humanization (TEXT, HTML) |
+| P | Enable pretty-printed output (XOF_PRETTY) |
+| T | Enable text output (XO_STYLE_TEXT) |
+| U | Add units to HTML output |
+| u | Change "-"s to "_"s in element names (JSON) |
+| W | Enable warnings (XOF_WARN) |
+| X | Enable XML output (XO_STYLE_XML) |
+| x | Enable XPath data (XOF_XPATH) |
+|--------+---------------------------------------------|
+
+** Color Mapping
+The "colors" option takes a value that is a set of mappings from the
+pre-defined set of colors to new foreground and background colors.
+The value is a series of "fg/bg" values, separated by a "+". Each
+pair of "fg/bg" values gives the colors to which a basic color is
+mapped when used as a foreground or background color. The order is
+the mappings is:
+
+- black
+- red
+- green
+- yellow
+- blue
+- magenta
+- cyan
+- white
+
+Pairs may be skipped, leaving them mapped as normal, as are missing
+pairs or single colors.
+
+For example consider the following xo_emit call:
+
+ xo_emit("{C:fg-red,bg-green}Merry XMas!!{C:}\n");
+
+To turn all colored output to red-on-blue, use eight pairs of
+"red/blue" mappings separated by "+"s:
+
+ --libxo colors=red/blue+red/blue+red/blue+red/blue+\
+ red/blue+red/blue+red/blue+red/blue
+
+To turn the red-on-green text to magenta-on-cyan, give a "magenta"
+foreground value for red (the second mapping) and a "cyan" background
+to green (the third mapping):
+
+ --libxo colors=+magenta+/cyan
+
+Consider the common situation where blue output looks unreadable on a
+terminal session with a black background. To turn both "blue"
+foreground and background output to "yellow", give only the fifth
+mapping, skipping the first four mappings with bare "+"s:
+
+ --libxo colors=++++yellow/yellow
* The libxo API
@@ -1741,7 +1850,7 @@ and flags and enables them for a specific handle.
int xo_set_options (xo_handle_t *xop, const char *input);
-The options are identical to those listed in ^command-line-arguments^.
+The options are identical to those listed in ^options^.
*** xo_destroy
@@ -1965,7 +2074,7 @@ is returned. On failure, a message it emitted and -1 is returned.
exit(EXIT_FAILURE);
Following the call to xo_parse_args, the application can process the
-remaining arguments in a normal manner. See ^command-line-arguments^
+remaining arguments in a normal manner. See ^options^
for a description of valid arguments.
*** xo_set_program
@@ -2056,36 +2165,24 @@ By default, the standard realloc() and free() functions are used.
*** LIBXO_OPTIONS @LIBXO_OPTIONS@
-The environment variable "LIBXO_OPTIONS" can be set to a string of
-options:
-
-|--------+---------------------------------------------|
-| Option | Action |
-|--------+---------------------------------------------|
-| c | Enable color/effects for TEXT/HTML |
-| F | Force line-buffered flushing |
-| H | Enable HTML output (XO_STYLE_HTML) |
-| I | Enable info output (XOF_INFO) |
-| i<num> | Indent by <number> |
-| J | Enable JSON output (XO_STYLE_JSON) |
-| k | Add keys to XPATH expressions in HTML |
-| n | Disable humanization (TEXT, HTML) |
-| P | Enable pretty-printed output (XOF_PRETTY) |
-| T | Enable text output (XO_STYLE_TEXT) |
-| U | Add units to HTML output |
-| u | Change "-"s to "_"s in element names (JSON) |
-| W | Enable warnings (XOF_WARN) |
-| X | Enable XML output (XO_STYLE_XML) |
-| x | Enable XPath data (XOF_XPATH) |
-|--------+---------------------------------------------|
+The environment variable "LIBXO_OPTIONS" can be set to a subset of
+libxo options, including:
+
+- color
+- flush
+- flush-line
+- no-color
+- no-humanize
+- no-locale
+- no-retain
+- pretty
+- retain
+- underscores
+- warn
For example, warnings can be enabled by:
- % env LIBXO_OPTIONS=W my-app
-
-Complete HTML output can be generated with:
-
- % env LIBXO_OPTIONS=HXI my-app
+ % env LIBXO_OPTIONS=warn my-app
Since environment variables are inherited, child processes will have
the same options, which may be undesirable, making the use of the
@@ -2474,9 +2571,9 @@ HTML using the same commands that emit text output.
The style of output can be selected using a specific option: "-X" for
XML, "-J" for JSON, "-H" for HTML, or "-T" for TEXT, which is the
-default. The "--style <style>" option can also be used. The
-LIBXO_OPTIONS environment variable can also be used to set the style,
-as well as other flags.
+default. The "--style <style>" option can also be used. The standard
+set of "--libxo" options are available (see ^options^), as well as the
+LIBXO_OPTIONS environment variable (see ^LIBXO_OPTIONS^).
The "xo" utility accepts a format string suitable for xo_emit() and a
set of zero or more arguments used to supply data for that string.
diff --git a/contrib/libxo/encoder/cbor/enc_cbor.c b/contrib/libxo/encoder/cbor/enc_cbor.c
index 7c0a1d33f932..08ed4a06b37a 100644
--- a/contrib/libxo/encoder/cbor/enc_cbor.c
+++ b/contrib/libxo/encoder/cbor/enc_cbor.c
@@ -249,7 +249,7 @@ cbor_handler (XO_ENCODER_HANDLER_ARGS)
if (xo_get_flags(xop) & XOF_PRETTY) {
printf("%*sop %s: [%s] [%s]\n", cbor ? cbor->c_indent * 2 + 4 : 0, "",
- xo_encoder_op_name(op), name ?: "", value ?: "");
+ xo_encoder_op_name(op), name, value);
fflush(stdout);
}
diff --git a/contrib/libxo/encoder/test/enc_test.c b/contrib/libxo/encoder/test/enc_test.c
index ec49499c00c0..1f1783ae6a8d 100644
--- a/contrib/libxo/encoder/test/enc_test.c
+++ b/contrib/libxo/encoder/test/enc_test.c
@@ -14,8 +14,8 @@
static int
test_handler (XO_ENCODER_HANDLER_ARGS)
{
- printf("op %s: [%s] [%s]\n", xo_encoder_op_name(op),
- name ?: "", value ?: "");
+ printf("op %s: [%s] [%s] [%#llx]\n", xo_encoder_op_name(op),
+ name ?: "", value ?: "", flags);
return 0;
}
diff --git a/contrib/libxo/libxo/libxo.c b/contrib/libxo/libxo/libxo.c
index 973675a7b115..7f015b7b2dcf 100644
--- a/contrib/libxo/libxo/libxo.c
+++ b/contrib/libxo/libxo/libxo.c
@@ -203,6 +203,7 @@ typedef struct xo_stack_s {
* XO_COL_* ("colors") refers to fancy ansi codes, while X__EFF_*
* ("effects") are bits since we need to maintain state.
*/
+typedef uint8_t xo_color_t;
#define XO_COL_DEFAULT 0
#define XO_COL_BLACK 1
#define XO_COL_RED 2
@@ -238,7 +239,6 @@ typedef struct xo_stack_s {
#define XO_EFF_CLEAR_BITS XO_EFF_RESET /* Reset gets reset, surprisingly */
typedef uint8_t xo_effect_t;
-typedef uint8_t xo_color_t;
typedef struct xo_colors_s {
xo_effect_t xoc_effects; /* Current effect set */
xo_color_t xoc_col_fg; /* Foreground color */
@@ -279,8 +279,10 @@ struct xo_handle_s {
ssize_t xo_anchor_min_width; /* Desired width of anchored text */
ssize_t xo_units_offset; /* Start of units insertion point */
ssize_t xo_columns; /* Columns emitted during this xo_emit call */
+#ifndef LIBXO_TEXT_ONLY
uint8_t xo_color_map_fg[XO_NUM_COLORS]; /* Foreground color mappings */
uint8_t xo_color_map_bg[XO_NUM_COLORS]; /* Background color mappings */
+#endif /* LIBXO_TEXT_ONLY */
xo_colors_t xo_colors; /* Current color and effect values */
xo_buffer_t xo_color_buf; /* HTML: buffer of colors and effects */
char *xo_version; /* Version string */
@@ -461,6 +463,12 @@ static ssize_t
xo_transition (xo_handle_t *xop, xo_xsf_flags_t flags, const char *name,
xo_state_t new_state);
+static int
+xo_set_options_simple (xo_handle_t *xop, const char *input);
+
+static int
+xo_color_find (const char *str);
+
static void
xo_buf_append_div (xo_handle_t *xop, const char *class, xo_xff_flags_t flags,
const char *name, ssize_t nlen,
@@ -628,13 +636,6 @@ xo_init_handle (xo_handle_t *xop)
XOF_SET(xop, XOF_FLUSH_LINE);
/*
- * We only want to do color output on terminals, but we only want
- * to do this if the user has asked for color.
- */
- if (XOF_ISSET(xop, XOF_COLOR_ALLOWED) && isatty(1))
- XOF_SET(xop, XOF_COLOR);
-
- /*
* We need to initialize the locale, which isn't really pretty.
* Libraries should depend on their caller to set up the
* environment. But we really can't count on the caller to do
@@ -667,15 +668,6 @@ xo_init_handle (xo_handle_t *xop)
xop->xo_indent_by = XO_INDENT_BY;
xo_depth_check(xop, XO_DEPTH);
-#if !defined(NO_LIBXO_OPTIONS)
- if (!XOF_ISSET(xop, XOF_NO_ENV)) {
- char *env = getenv("LIBXO_OPTIONS");
- if (env)
- xo_set_options(xop, env);
-
- }
-#endif /* NO_GETENV */
-
XOIF_CLEAR(xop, XOIF_INIT_IN_PROGRESS);
}
@@ -689,6 +681,16 @@ xo_default_init (void)
xo_init_handle(xop);
+#if !defined(NO_LIBXO_OPTIONS)
+ if (!XOF_ISSET(xop, XOF_NO_ENV)) {
+ char *env = getenv("LIBXO_OPTIONS");
+
+ if (env)
+ xo_set_options_simple(xop, env);
+
+ }
+#endif /* NO_LIBXO_OPTIONS */
+
xo_default_inited = 1;
}
@@ -1041,32 +1043,36 @@ xo_printf (xo_handle_t *xop, const char *fmt, ...)
* These next few function are make The Essential UTF-8 Ginsu Knife.
* Identify an input and output character, and convert it.
*/
-static uint8_t xo_utf8_bits[7] = { 0, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
+static uint8_t xo_utf8_data_bits[5] = { 0, 0x7f, 0x1f, 0x0f, 0x07 };
+static uint8_t xo_utf8_len_bits[5] = { 0, 0x00, 0xc0, 0xe0, 0xf0 };
+/*
+ * If the byte has a high-bit set, it's UTF-8, not ASCII.
+ */
static int
xo_is_utf8 (char ch)
{
return (ch & 0x80);
}
+/*
+ * Look at the high bits of the first byte to determine the length
+ * of the UTF-8 character.
+ */
static inline ssize_t
xo_utf8_to_wc_len (const char *buf)
{
- unsigned b = (unsigned char) *buf;
+ uint8_t bval = (uint8_t) *buf;
ssize_t len;
- if ((b & 0x80) == 0x0)
+ if ((bval & 0x80) == 0x0)
len = 1;
- else if ((b & 0xe0) == 0xc0)
+ else if ((bval & 0xe0) == 0xc0)
len = 2;
- else if ((b & 0xf0) == 0xe0)
+ else if ((bval & 0xf0) == 0xe0)
len = 3;
- else if ((b & 0xf8) == 0xf0)
+ else if ((bval & 0xf8) == 0xf0)
len = 4;
- else if ((b & 0xfc) == 0xf8)
- len = 5;
- else if ((b & 0xfe) == 0xfc)
- len = 6;
else
len = -1;
@@ -1076,12 +1082,11 @@ xo_utf8_to_wc_len (const char *buf)
static ssize_t
xo_buf_utf8_len (xo_handle_t *xop, const char *buf, ssize_t bufsiz)
{
-
unsigned b = (unsigned char) *buf;
ssize_t len, i;
len = xo_utf8_to_wc_len(buf);
- if (len == -1) {
+ if (len < 0) {
xo_failure(xop, "invalid UTF-8 data: %02hhx", b);
return -1;
}
@@ -1119,9 +1124,9 @@ xo_utf8_char (const char *buf, ssize_t len)
wchar_t wc;
const unsigned char *cp = (const unsigned char *) buf;
- wc = *cp & xo_utf8_bits[len];
+ wc = *cp & xo_utf8_data_bits[len];
for (i = 1; i < len; i++) {
- wc <<= 6;
+ wc <<= 6; /* Low six bits have data */
wc |= cp[i] & 0x3f;
if ((cp[i] & 0xc0) != 0x80)
return (wchar_t) -1;
@@ -1138,22 +1143,23 @@ xo_utf8_emit_len (wchar_t wc)
{
ssize_t len;
- if ((wc & ((1<<7) - 1)) == wc) /* Simple case */
+ if ((wc & ((1 << 7) - 1)) == wc) /* Simple case */
len = 1;
- else if ((wc & ((1<<11) - 1)) == wc)
+ else if ((wc & ((1 << 11) - 1)) == wc)
len = 2;
- else if ((wc & ((1<<16) - 1)) == wc)
+ else if ((wc & ((1 << 16) - 1)) == wc)
len = 3;
- else if ((wc & ((1<<21) - 1)) == wc)
+ else if ((wc & ((1 << 21) - 1)) == wc)
len = 4;
- else if ((wc & ((1<<26) - 1)) == wc)
- len = 5;
else
- len = 6;
+ len = -1; /* Invalid */
return len;
}
+/*
+ * Emit one wide character into the given buffer
+ */
static void
xo_utf8_emit_char (char *buf, ssize_t len, wchar_t wc)
{
@@ -1164,15 +1170,22 @@ xo_utf8_emit_char (char *buf, ssize_t len, wchar_t wc)
return;
}
+ /* Start with the low bits and insert them, six bits at a time */
for (i = len - 1; i >= 0; i--) {
buf[i] = 0x80 | (wc & 0x3f);
- wc >>= 6;
+ wc >>= 6; /* Drop the low six bits */
}
- buf[0] &= xo_utf8_bits[len];
- buf[0] |= ~xo_utf8_bits[len] << 1;
+ /* Finish off the first byte with the length bits */
+ buf[0] &= xo_utf8_data_bits[len]; /* Clear out the length bits */
+ buf[0] |= xo_utf8_len_bits[len]; /* Drop in new length bits */
}
+/*
+ * Append a single UTF-8 character to a buffer, converting it to locale
+ * encoding. Returns the number of columns consumed by that character,
+ * as best we can determine it.
+ */
static ssize_t
xo_buf_append_locale_from_utf8 (xo_handle_t *xop, xo_buffer_t *xbp,
const char *ibuf, ssize_t ilen)
@@ -1187,7 +1200,7 @@ xo_buf_append_locale_from_utf8 (xo_handle_t *xop, xo_buffer_t *xbp,
*/
wc = xo_utf8_char(ibuf, ilen);
if (wc == (wchar_t) -1) {
- xo_failure(xop, "invalid utf-8 byte sequence");
+ xo_failure(xop, "invalid UTF-8 byte sequence");
return 0;
}
@@ -1216,6 +1229,9 @@ xo_buf_append_locale_from_utf8 (xo_handle_t *xop, xo_buffer_t *xbp,
return xo_wcwidth(wc);
}
+/*
+ * Append a UTF-8 string to a buffer, converting it into locale encoding
+ */
static void
xo_buf_append_locale (xo_handle_t *xop, xo_buffer_t *xbp,
const char *cp, ssize_t len)
@@ -1502,6 +1518,7 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
newfmt[plen++] = ':';
newfmt[plen++] = ' ';
}
+
memcpy(newfmt + plen, fmt, len);
newfmt[len + plen] = '\0';
@@ -1521,6 +1538,7 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
ssize_t left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
ssize_t rc = vsnprintf(xbp->xb_curp, left, newfmt, vap);
+
if (rc >= left) {
if (!xo_buf_has_room(xbp, rc)) {
va_end(va_local);
@@ -1533,6 +1551,7 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
rc = vsnprintf(xbp->xb_curp, left, fmt, vap);
}
+
va_end(va_local);
rc = xo_escape_xml(xbp, rc, 1);
@@ -1543,6 +1562,7 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
if (code >= 0) {
const char *msg = strerror(code);
+
if (msg) {
xo_buf_append(xbp, ": ", 2);
xo_buf_append(xbp, msg, strlen(msg));
@@ -1556,6 +1576,7 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
vfprintf(stderr, newfmt, vap);
if (code >= 0) {
const char *msg = strerror(code);
+
if (msg)
fprintf(stderr, ": %s", msg);
}
@@ -1672,6 +1693,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
va_copy(va_local, vap);
ssize_t left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
+
rc = vsnprintf(xbp->xb_curp, left, fmt, vap);
if (rc >= left) {
if (!xo_buf_has_room(xbp, rc)) {
@@ -1685,6 +1707,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
rc = vsnprintf(xbp->xb_curp, left, fmt, vap);
}
+
va_end(va_local);
rc = xo_escape_xml(xbp, rc, 0);
@@ -1692,6 +1715,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
if (need_nl && code > 0) {
const char *msg = strerror(code);
+
if (msg) {
xo_buf_append(xbp, ": ", 2);
xo_buf_append(xbp, msg, strlen(msg));
@@ -1725,6 +1749,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
va_copy(va_local, vap);
rc = vsnprintf(bp, bufsiz, fmt, va_local);
}
+
va_end(va_local);
cp = bp + rc;
@@ -1760,6 +1785,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
if (need_nl && code > 0) {
const char *msg = strerror(code);
+
if (msg) {
xo_printf(xop, ": %s", msg);
}
@@ -1774,6 +1800,7 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
case XO_STYLE_HTML:
if (XOIF_ISSET(xop, XOIF_DIV_OPEN)) {
static char div_close[] = "</div>";
+
XOIF_CLEAR(xop, XOIF_DIV_OPEN);
xo_data_append(xop, div_close, sizeof(div_close) - 1);
@@ -1846,8 +1873,10 @@ xo_failure (xo_handle_t *xop, const char *fmt, ...)
* Note: normal use of libxo does not require a distinct handle, since
* the default handle (used when NULL is passed) generates text on stdout.
*
- * @style Style of output desired (XO_STYLE_* value)
- * @flags Set of XOF_* flags in use with this handle
+ * @param style Style of output desired (XO_STYLE_* value)
+ * @param flags Set of XOF_* flags in use with this handle
+ * @return Newly allocated handle
+ * @see xo_destroy
*/
xo_handle_t *
xo_create (xo_style_t style, xo_xof_flags_t flags)
@@ -1869,9 +1898,12 @@ xo_create (xo_style_t style, xo_xof_flags_t flags)
/**
* Create a handle that will write to the given file. Use
* the XOF_CLOSE_FP flag to have the file closed on xo_destroy().
- * @fp FILE pointer to use
- * @style Style of output desired (XO_STYLE_* value)
- * @flags Set of XOF_* flags to use with this handle
+ *
+ * @param fp FILE pointer to use
+ * @param style Style of output desired (XO_STYLE_* value)
+ * @param flags Set of XOF_* flags to use with this handle
+ * @return Newly allocated handle
+ * @see xo_destroy
*/
xo_handle_t *
xo_create_to_file (FILE *fp, xo_style_t style, xo_xof_flags_t flags)
@@ -1890,8 +1922,10 @@ xo_create_to_file (FILE *fp, xo_style_t style, xo_xof_flags_t flags)
/**
* Set the default handler to output to a file.
- * @xop libxo handle
- * @fp FILE pointer to use
+ *
+ * @param xop libxo handle
+ * @param fp FILE pointer to use
+ * @return 0 on success, non-zero on failure
*/
int
xo_set_file_h (xo_handle_t *xop, FILE *fp)
@@ -1913,7 +1947,9 @@ xo_set_file_h (xo_handle_t *xop, FILE *fp)
/**
* Set the default handler to output to a file.
- * @fp FILE pointer to use
+ *
+ * @param fp FILE pointer to use
+ * @return 0 on success, non-zero on failure
*/
int
xo_set_file (FILE *fp)
@@ -1923,7 +1959,8 @@ xo_set_file (FILE *fp)
/**
* Release any resources held by the handle.
- * @xop XO handle to alter (or NULL for default handle)
+ *
+ * @param xop XO handle to alter (or NULL for default handle)
*/
void
xo_destroy (xo_handle_t *xop_arg)
@@ -1956,8 +1993,8 @@ xo_destroy (xo_handle_t *xop_arg)
* Record a new output style to use for the given handle (or default if
* handle is NULL). This output style will be used for any future output.
*
- * @xop XO handle to alter (or NULL for default handle)
- * @style new output style (XO_STYLE_*)
+ * @param xop XO handle to alter (or NULL for default handle)
+ * @param style new output style (XO_STYLE_*)
*/
void
xo_set_style (xo_handle_t *xop, xo_style_t style)
@@ -1966,6 +2003,12 @@ xo_set_style (xo_handle_t *xop, xo_style_t style)
xop->xo_style = style;
}
+/**
+ * Return the current style of a handle
+ *
+ * @param xop XO handle to access
+ * @return The handle's current style
+ */
xo_style_t
xo_get_style (xo_handle_t *xop)
{
@@ -1973,6 +2016,12 @@ xo_get_style (xo_handle_t *xop)
return xo_style(xop);
}
+/**
+ * Return the XO_STYLE_* value matching a given name
+ *
+ * @param name String name of a style
+ * @return XO_STYLE_* value
+ */
static int
xo_name_to_style (const char *name)
{
@@ -2008,8 +2057,8 @@ xo_style_is_encoding (xo_handle_t *xop)
/* Simple name-value mapping */
typedef struct xo_mapping_s {
- xo_xff_flags_t xm_value;
- const char *xm_name;
+ xo_xff_flags_t xm_value; /* Flag value */
+ const char *xm_name; /* String name */
} xo_mapping_t;
static xo_xff_flags_t
@@ -2056,6 +2105,7 @@ xo_value_lookup (xo_mapping_t *map, xo_xff_flags_t value)
static xo_mapping_t xo_xof_names[] = {
{ XOF_COLOR_ALLOWED, "color" },
+ { XOF_COLOR, "color-force" },
{ XOF_COLUMNS, "columns" },
{ XOF_DTRT, "dtrt" },
{ XOF_FLUSH, "flush" },
@@ -2080,6 +2130,21 @@ static xo_mapping_t xo_xof_names[] = {
{ 0, NULL }
};
+/* Options available via the environment variable ($LIBXO_OPTIONS) */
+static xo_mapping_t xo_xof_simple_names[] = {
+ { XOF_COLOR_ALLOWED, "color" },
+ { XOF_FLUSH, "flush" },
+ { XOF_FLUSH_LINE, "flush-line" },
+ { XOF_NO_HUMANIZE, "no-humanize" },
+ { XOF_NO_LOCALE, "no-locale" },
+ { XOF_RETAIN_NONE, "no-retain" },
+ { XOF_PRETTY, "pretty" },
+ { XOF_RETAIN_ALL, "retain" },
+ { XOF_UNDERSCORES, "underscores" },
+ { XOF_WARN, "warn" },
+ { 0, NULL }
+};
+
/*
* Convert string name to XOF_* flag value.
* Not all are useful. Or safe. Or sane.
@@ -2090,6 +2155,13 @@ xo_name_to_flag (const char *name)
return (unsigned) xo_name_lookup(xo_xof_names, name, -1);
}
+/**
+ * Set the style of an libxo handle based on a string name
+ *
+ * @param xop XO handle
+ * @param name String value of name
+ * @return 0 on success, non-zero on failure
+ */
int
xo_set_style_name (xo_handle_t *xop, const char *name)
{
@@ -2097,6 +2169,7 @@ xo_set_style_name (xo_handle_t *xop, const char *name)
return -1;
int style = xo_name_to_style(name);
+
if (style < 0)
return -1;
@@ -2105,9 +2178,95 @@ xo_set_style_name (xo_handle_t *xop, const char *name)
}
/*
+ * Fill in the color map, based on the input string; currently unimplemented
+ * Look for something like "colors=red/blue+green/yellow" as fg/bg pairs.
+ */
+static void
+xo_set_color_map (xo_handle_t *xop, char *value)
+{
+#ifdef LIBXO_TEXT_ONLY
+ return;
+#endif /* LIBXO_TEXT_ONLY */
+
+ char *cp, *ep, *vp, *np;
+ ssize_t len = value ? strlen(value) + 1 : 0;
+ int num = 1, fg, bg;
+
+ for (cp = value, ep = cp + len - 1; cp && *cp && cp < ep; cp = np) {
+ np = strchr(cp, '+');
+ if (np)
+ *np++ = '\0';
+
+ vp = strchr(cp, '/');
+ if (vp)
+ *vp++ = '\0';
+
+ fg = *cp ? xo_color_find(cp) : -1;
+ bg = (vp && *vp) ? xo_color_find(vp) : -1;
+
+ xop->xo_color_map_fg[num] = (fg < 0) ? num : fg;
+ xop->xo_color_map_bg[num] = (bg < 0) ? num : bg;
+ if (++num > XO_NUM_COLORS)
+ break;
+ }
+
+ /* If no color initialization happened, then we don't need the map */
+ if (num > 0)
+ XOF_SET(xop, XOF_COLOR_MAP);
+ else
+ XOF_CLEAR(xop, XOF_COLOR_MAP);
+
+ /* Fill in the rest of the colors with the defaults */
+ for ( ; num < XO_NUM_COLORS; num++)
+ xop->xo_color_map_fg[num] = xop->xo_color_map_bg[num] = num;
+}
+
+static int
+xo_set_options_simple (xo_handle_t *xop, const char *input)
+{
+ xo_xof_flags_t new_flag;
+ char *cp, *ep, *vp, *np, *bp;
+ ssize_t len = strlen(input) + 1;
+
+ bp = alloca(len);
+ memcpy(bp, input, len);
+
+ for (cp = bp, ep = cp + len - 1; cp && cp < ep; cp = np) {
+ np = strchr(cp, ',');
+ if (np)
+ *np++ = '\0';
+
+ vp = strchr(cp, '=');
+ if (vp)
+ *vp++ = '\0';
+
+ if (strcmp("colors", cp) == 0) {
+ xo_set_color_map(xop, vp);
+ continue;
+ }
+
+ new_flag = xo_name_lookup(xo_xof_simple_names, cp, -1);
+ if (new_flag != 0) {
+ XOF_SET(xop, new_flag);
+ } else if (strcmp(cp, "no-color") == 0) {
+ XOF_CLEAR(xop, XOF_COLOR_ALLOWED);
+ } else {
+ xo_failure(xop, "unknown simple option: %s", cp);
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+/**
* Set the options for a handle using a string of options
* passed in. The input is a comma-separated set of names
* and optional values: "xml,pretty,indent=4"
+ *
+ * @param xop XO handle
+ * @param input Comma-separated set of option values
+ * @return 0 on success, non-zero on failure
*/
int
xo_set_options (xo_handle_t *xop, const char *input)
@@ -2227,7 +2386,7 @@ xo_set_options (xo_handle_t *xop, const char *input)
*vp++ = '\0';
if (strcmp("colors", cp) == 0) {
- /* XXX Look for colors=red-blue+green-yellow */
+ xo_set_color_map(xop, vp);
continue;
}
@@ -2245,28 +2404,26 @@ xo_set_options (xo_handle_t *xop, const char *input)
new_flag = xo_name_to_flag(cp);
if (new_flag != 0)
XOF_SET(xop, new_flag);
- else {
- if (strcmp(cp, "no-color") == 0) {
- XOF_CLEAR(xop, XOF_COLOR_ALLOWED);
- } else if (strcmp(cp, "indent") == 0) {
- if (vp)
- xop->xo_indent_by = atoi(vp);
- else
- xo_failure(xop, "missing value for indent option");
- } else if (strcmp(cp, "encoder") == 0) {
- if (vp == NULL)
- xo_failure(xop, "missing value for encoder option");
- else {
- if (xo_encoder_init(xop, vp)) {
- xo_failure(xop, "encoder not found: %s", vp);
- rc = -1;
- }
+ else if (strcmp(cp, "no-color") == 0)
+ XOF_CLEAR(xop, XOF_COLOR_ALLOWED);
+ else if (strcmp(cp, "indent") == 0) {
+ if (vp)
+ xop->xo_indent_by = atoi(vp);
+ else
+ xo_failure(xop, "missing value for indent option");
+ } else if (strcmp(cp, "encoder") == 0) {
+ if (vp == NULL)
+ xo_failure(xop, "missing value for encoder option");
+ else {
+ if (xo_encoder_init(xop, vp)) {
+ xo_failure(xop, "encoder not found: %s", vp);
+ rc = -1;
}
-
- } else {
- xo_warnx("unknown libxo option value: '%s'", cp);
- rc = -1;
}
+
+ } else {
+ xo_warnx("unknown libxo option value: '%s'", cp);
+ rc = -1;
}
}
}
@@ -2281,8 +2438,8 @@ xo_set_options (xo_handle_t *xop, const char *input)
* Set one or more flags for a given handle (or default if handle is NULL).
* These flags will affect future output.
*
- * @xop XO handle to alter (or NULL for default handle)
- * @flags Flags to be set (XOF_*)
+ * @param xop XO handle to alter (or NULL for default handle)
+ * @param flags Flags to be set (XOF_*)
*/
void
xo_set_flags (xo_handle_t *xop, xo_xof_flags_t flags)
@@ -2292,6 +2449,11 @@ xo_set_flags (xo_handle_t *xop, xo_xof_flags_t flags)
XOF_SET(xop, flags);
}
+/**
+ * Accessor to return the current set of flags for a handle
+ * @param xop XO handle
+ * @return Current set of flags
+ */
xo_xof_flags_t
xo_get_flags (xo_handle_t *xop)
{
@@ -2300,8 +2462,8 @@ xo_get_flags (xo_handle_t *xop)
return xop->xo_flags;
}
-/*
- * strndup with a twist: len < 0 means strlen
+/**
+ * strndup with a twist: len < 0 means len = strlen(str)
*/
static char *
xo_strndup (const char *str, ssize_t len)
@@ -2323,8 +2485,8 @@ xo_strndup (const char *str, ssize_t len)
* generated data to be placed within an XML hierarchy but still have
* accurate XPath expressions.
*
- * @xop XO handle to alter (or NULL for default handle)
- * @path The XPath expression
+ * @param xop XO handle to alter (or NULL for default handle)
+ * @param path The XPath expression
*/
void
xo_set_leading_xpath (xo_handle_t *xop, const char *path)
@@ -2345,9 +2507,9 @@ xo_set_leading_xpath (xo_handle_t *xop, const char *path)
/**
* Record the info data for a set of tags
*
- * @xop XO handle to alter (or NULL for default handle)
- * @info Info data (xo_info_t) to be recorded (or NULL) (MUST BE SORTED)
- * @count Number of entries in info (or -1 to count them ourselves)
+ * @param xop XO handle to alter (or NULL for default handle)
+ * @param info Info data (xo_info_t) to be recorded (or NULL) (MUST BE SORTED)
+ * @pararm count Number of entries in info (or -1 to count them ourselves)
*/
void
xo_set_info (xo_handle_t *xop, xo_info_t *infop, int count)
@@ -2384,8 +2546,8 @@ xo_set_formatter (xo_handle_t *xop, xo_formatter_t func,
* Clear one or more flags for a given handle (or default if handle is NULL).
* These flags will affect future output.
*
- * @xop XO handle to alter (or NULL for default handle)
- * @flags Flags to be cleared (XOF_*)
+ * @param xop XO handle to alter (or NULL for default handle)
+ * @param flags Flags to be cleared (XOF_*)
*/
void
xo_clear_flags (xo_handle_t *xop, xo_xof_flags_t flags)
@@ -3077,6 +3239,11 @@ xo_data_append_content (xo_handle_t *xop, const char *str, ssize_t len,
xop->xo_anchor_columns += cols;
}
+/**
+ * Bump one of the 'width' values in a format strings (e.g. "%40.50.60s").
+ * @param xfp Formatting instructions
+ * @param digit Single digit (0-9) of input
+ */
static void
xo_bump_width (xo_format_t *xfp, int digit)
{
@@ -3323,7 +3490,8 @@ xo_do_format_field (xo_handle_t *xop, xo_buffer_t *xbp,
rc = xo_trim_ws(xbp, rc);
} else {
- ssize_t columns = rc = xo_vsnprintf(xop, xbp, newfmt, xop->xo_vap);
+ ssize_t columns = rc = xo_vsnprintf(xop, xbp, newfmt,
+ xop->xo_vap);
/*
* For XML and HTML, we need "&<>" processing; for JSON,
@@ -4324,7 +4492,7 @@ xo_format_value (xo_handle_t *xop, const char *name, ssize_t nlen,
xo_encoder_handle(xop, quote ? XO_OP_STRING : XO_OP_CONTENT,
xo_buf_data(&xop->xo_data, name_offset),
- xo_buf_data(&xop->xo_data, value_offset));
+ xo_buf_data(&xop->xo_data, value_offset), flags);
xo_buf_reset(&xop->xo_data);
break;
}
@@ -4581,6 +4749,28 @@ xo_colors_enabled (xo_handle_t *xop UNUSED)
#endif /* LIBXO_TEXT_ONLY */
}
+/*
+ * If the color map is in use (--libxo colors=xxxx), then update
+ * the incoming foreground and background colors from the map.
+ */
+static void
+xo_colors_update (xo_handle_t *xop, xo_colors_t *newp)
+{
+#ifdef LIBXO_TEXT_ONLY
+ return;
+#endif /* LIBXO_TEXT_ONLY */
+
+ xo_color_t fg = newp->xoc_col_fg;
+ if (XOF_ISSET(xop, XOF_COLOR_MAP) && fg < XO_NUM_COLORS)
+ fg = xop->xo_color_map_fg[fg]; /* Fetch from color map */
+ newp->xoc_col_fg = fg;
+
+ xo_color_t bg = newp->xoc_col_bg;
+ if (XOF_ISSET(xop, XOF_COLOR_MAP) && bg < XO_NUM_COLORS)
+ bg = xop->xo_color_map_bg[bg]; /* Fetch from color map */
+ newp->xoc_col_bg = bg;
+}
+
static void
xo_colors_handle_text (xo_handle_t *xop, xo_colors_t *newp)
{
@@ -4627,16 +4817,16 @@ xo_colors_handle_text (xo_handle_t *xop, xo_colors_t *newp)
}
}
- if (newp->xoc_col_fg != oldp->xoc_col_fg) {
+ xo_color_t fg = newp->xoc_col_fg;
+ if (fg != oldp->xoc_col_fg) {
cp += snprintf(cp, ep - cp, ";3%u",
- (newp->xoc_col_fg != XO_COL_DEFAULT)
- ? newp->xoc_col_fg - 1 : 9);
+ (fg != XO_COL_DEFAULT) ? fg - 1 : 9);
}
- if (newp->xoc_col_bg != oldp->xoc_col_bg) {
+ xo_color_t bg = newp->xoc_col_bg;
+ if (bg != oldp->xoc_col_bg) {
cp += snprintf(cp, ep - cp, ";4%u",
- (newp->xoc_col_bg != XO_COL_DEFAULT)
- ? newp->xoc_col_bg - 1 : 9);
+ (bg != XO_COL_DEFAULT) ? bg - 1 : 9);
}
if (cp - buf != 1 && cp < ep - 3) {
@@ -4736,6 +4926,7 @@ xo_format_colors (xo_handle_t *xop, xo_field_info_t *xfip,
xo_colors_t xoc = xop->xo_colors;
xo_colors_parse(xop, &xoc, xb.xb_bufp);
+ xo_colors_update(xop, &xoc);
if (xo_style(xop) == XO_STYLE_TEXT) {
/*
@@ -5837,12 +6028,12 @@ xo_gettext_build_format (xo_handle_t *xop,
if (gtfmt == NULL || gtfmt == fmt || strcmp(gtfmt, fmt) == 0)
goto bail2;
- xo_buf_cleanup(&xb);
-
char *new_fmt = xo_strndup(gtfmt, -1);
if (new_fmt == NULL)
goto bail2;
+ xo_buf_cleanup(&xb);
+
*new_fmtp = new_fmt;
return new_fmt;
@@ -5975,7 +6166,7 @@ xo_do_emit_fields (xo_handle_t *xop, xo_field_info_t *fields,
ssize_t fend[flimit];
bzero(fend, flimit * sizeof(fend[0]));
- for (xfip = fields, field = 0; xfip->xfi_ftype && field < max_fields;
+ for (xfip = fields, field = 0; field < max_fields && xfip->xfi_ftype;
xfip++, field++) {
ftype = xfip->xfi_ftype;
flags = xfip->xfi_flags;
@@ -6458,7 +6649,7 @@ xo_attr_hv (xo_handle_t *xop, const char *name, const char *fmt, va_list vap)
*xbp->xb_curp = '\0';
rc = xo_encoder_handle(xop, XO_OP_ATTRIBUTE,
xo_buf_data(xbp, name_offset),
- xo_buf_data(xbp, value_offset));
+ xo_buf_data(xbp, value_offset), 0);
}
}
@@ -6536,7 +6727,7 @@ xo_depth_change (xo_handle_t *xop, const char *name,
xo_stack_t *xsp = &xop->xo_stack[xop->xo_depth];
if (XOF_ISSET(xop, XOF_WARN)) {
const char *top = xsp->xs_name;
- if (top && strcmp(name, top) != 0) {
+ if (top != NULL && name != NULL && strcmp(name, top) != 0) {
xo_failure(xop, "incorrect close: '%s' .vs. '%s'",
name, top);
return;
@@ -6648,7 +6839,7 @@ xo_do_open_container (xo_handle_t *xop, xo_xof_flags_t flags, const char *name)
break;
case XO_STYLE_ENCODER:
- rc = xo_encoder_handle(xop, XO_OP_OPEN_CONTAINER, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_OPEN_CONTAINER, name, NULL, flags);
break;
}
@@ -6738,7 +6929,7 @@ xo_do_close_container (xo_handle_t *xop, const char *name)
case XO_STYLE_ENCODER:
xo_depth_change(xop, name, -1, 0, XSS_CLOSE_CONTAINER, 0);
- rc = xo_encoder_handle(xop, XO_OP_CLOSE_CONTAINER, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_CLOSE_CONTAINER, name, NULL, 0);
break;
}
@@ -6804,7 +6995,7 @@ xo_do_open_list (xo_handle_t *xop, xo_xsf_flags_t flags, const char *name)
break;
case XO_STYLE_ENCODER:
- rc = xo_encoder_handle(xop, XO_OP_OPEN_LIST, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_OPEN_LIST, name, NULL, flags);
break;
}
@@ -6879,7 +7070,7 @@ xo_do_close_list (xo_handle_t *xop, const char *name)
case XO_STYLE_ENCODER:
xo_depth_change(xop, name, -1, 0, XSS_CLOSE_LIST, XSF_LIST);
- rc = xo_encoder_handle(xop, XO_OP_CLOSE_LIST, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_CLOSE_LIST, name, NULL, 0);
break;
default:
@@ -6953,7 +7144,7 @@ xo_do_open_leaf_list (xo_handle_t *xop, xo_xsf_flags_t flags, const char *name)
break;
case XO_STYLE_ENCODER:
- rc = xo_encoder_handle(xop, XO_OP_OPEN_LEAF_LIST, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_OPEN_LEAF_LIST, name, NULL, flags);
break;
}
@@ -6997,7 +7188,7 @@ xo_do_close_leaf_list (xo_handle_t *xop, const char *name)
break;
case XO_STYLE_ENCODER:
- rc = xo_encoder_handle(xop, XO_OP_CLOSE_LEAF_LIST, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_CLOSE_LEAF_LIST, name, NULL, 0);
/* FALLTHRU */
default:
@@ -7054,7 +7245,7 @@ xo_do_open_instance (xo_handle_t *xop, xo_xsf_flags_t flags, const char *name)
break;
case XO_STYLE_ENCODER:
- rc = xo_encoder_handle(xop, XO_OP_OPEN_INSTANCE, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_OPEN_INSTANCE, name, NULL, flags);
break;
}
@@ -7142,7 +7333,7 @@ xo_do_close_instance (xo_handle_t *xop, const char *name)
case XO_STYLE_ENCODER:
xo_depth_change(xop, name, -1, 0, XSS_CLOSE_INSTANCE, 0);
- rc = xo_encoder_handle(xop, XO_OP_CLOSE_INSTANCE, name, NULL);
+ rc = xo_encoder_handle(xop, XO_OP_CLOSE_INSTANCE, name, NULL, 0);
break;
}
@@ -7618,7 +7809,7 @@ xo_flush_h (xo_handle_t *xop)
switch (xo_style(xop)) {
case XO_STYLE_ENCODER:
- xo_encoder_handle(xop, XO_OP_FLUSH, NULL, NULL);
+ xo_encoder_handle(xop, XO_OP_FLUSH, NULL, NULL, 0);
}
rc = xo_write(xop);
@@ -7656,7 +7847,7 @@ xo_finish_h (xo_handle_t *xop)
break;
case XO_STYLE_ENCODER:
- xo_encoder_handle(xop, XO_OP_FINISH, NULL, NULL);
+ xo_encoder_handle(xop, XO_OP_FINISH, NULL, NULL, 0);
break;
}
@@ -7779,6 +7970,8 @@ xo_parse_args (int argc, char **argv)
if (cp)
xo_program = cp + 1;
+ xo_handle_t *xop = xo_default(NULL);
+
for (save = i = 1; i < argc; i++) {
if (argv[i] == NULL
|| strncmp(argv[i], libxo_opt, sizeof(libxo_opt) - 1) != 0) {
@@ -7796,14 +7989,14 @@ xo_parse_args (int argc, char **argv)
return -1;
}
- if (xo_set_options(NULL, cp) < 0)
+ if (xo_set_options(xop, cp) < 0)
return -1;
} else if (*cp == ':') {
- if (xo_set_options(NULL, cp) < 0)
+ if (xo_set_options(xop, cp) < 0)
return -1;
} else if (*cp == '=') {
- if (xo_set_options(NULL, ++cp) < 0)
+ if (xo_set_options(xop, ++cp) < 0)
return -1;
} else if (*cp == '-') {
@@ -7821,6 +8014,13 @@ xo_parse_args (int argc, char **argv)
}
}
+ /*
+ * We only want to do color output on terminals, but we only want
+ * to do this if the user has asked for color.
+ */
+ if (XOF_ISSET(xop, XOF_COLOR_ALLOWED) && isatty(1))
+ XOF_SET(xop, XOF_COLOR);
+
argv[save] = NULL;
return save;
}
@@ -7882,7 +8082,7 @@ xo_set_version_h (xo_handle_t *xop, const char *version)
break;
case XO_STYLE_ENCODER:
- xo_encoder_handle(xop, XO_OP_VERSION, NULL, version);
+ xo_encoder_handle(xop, XO_OP_VERSION, NULL, version, 0);
break;
}
}
diff --git a/contrib/libxo/libxo/xo.h b/contrib/libxo/libxo/xo.h
index 13023d3839b5..c39fa47e0db5 100644
--- a/contrib/libxo/libxo/xo.h
+++ b/contrib/libxo/libxo/xo.h
@@ -101,6 +101,8 @@ typedef unsigned long long xo_xof_flags_t;
#define XOF_RETAIN_ALL XOF_BIT(30) /** Force use of XOEF_RETAIN */
#define XOF_RETAIN_NONE XOF_BIT(31) /** Prevent use of XOEF_RETAIN */
+#define XOF_COLOR_MAP XOF_BIT(32) /** Color map has been initialized */
+
typedef unsigned xo_emit_flags_t; /* Flags to xo_emit() and friends */
#define XOEF_RETAIN (1<<0) /* Retain parsed formatting information */
diff --git a/contrib/libxo/libxo/xo_buf.h b/contrib/libxo/libxo/xo_buf.h
index 3bb5628a6ea0..d6a05005cd23 100644
--- a/contrib/libxo/libxo/xo_buf.h
+++ b/contrib/libxo/libxo/xo_buf.h
@@ -133,7 +133,7 @@ xo_buf_has_room (xo_buffer_t *xbp, ssize_t len)
static inline void
xo_buf_append (xo_buffer_t *xbp, const char *str, ssize_t len)
{
- if (!xo_buf_has_room(xbp, len))
+ if (str == NULL || len == 0 || !xo_buf_has_room(xbp, len))
return;
memcpy(xbp->xb_curp, str, len);
diff --git a/contrib/libxo/libxo/xo_encoder.c b/contrib/libxo/libxo/xo_encoder.c
index ef9403b909aa..a073e698b403 100644
--- a/contrib/libxo/libxo/xo_encoder.c
+++ b/contrib/libxo/libxo/xo_encoder.c
@@ -308,7 +308,7 @@ xo_encoder_init (xo_handle_t *xop, const char *name)
xo_set_encoder(xop, xep->xe_handler);
- return xo_encoder_handle(xop, XO_OP_CREATE, NULL, NULL);
+ return xo_encoder_handle(xop, XO_OP_CREATE, NULL, NULL, 0);
}
/*
@@ -334,7 +334,7 @@ xo_encoder_create (const char *name, xo_xof_flags_t flags)
int
xo_encoder_handle (xo_handle_t *xop, xo_encoder_op_t op,
- const char *name, const char *value)
+ const char *name, const char *value, xo_xof_flags_t flags)
{
void *private = xo_get_private(xop);
xo_encoder_func_t func = xo_get_encoder(xop);
@@ -342,7 +342,7 @@ xo_encoder_handle (xo_handle_t *xop, xo_encoder_op_t op,
if (func == NULL)
return -1;
- return func(xop, op, name, value, private);
+ return func(xop, op, name, value, private, flags);
}
const char *
diff --git a/contrib/libxo/libxo/xo_encoder.h b/contrib/libxo/libxo/xo_encoder.h
index f73552b11a66..0e20e72ac881 100644
--- a/contrib/libxo/libxo/xo_encoder.h
+++ b/contrib/libxo/libxo/xo_encoder.h
@@ -50,7 +50,8 @@ typedef unsigned xo_encoder_op_t;
xo_encoder_op_t op __attribute__ ((__unused__)), \
const char *name __attribute__ ((__unused__)), \
const char *value __attribute__ ((__unused__)), \
- void *private __attribute__ ((__unused__))
+ void *private __attribute__ ((__unused__)), \
+ xo_xof_flags_t flags __attribute__ ((__unused__))
typedef int (*xo_encoder_func_t)(XO_ENCODER_HANDLER_ARGS);
@@ -105,7 +106,7 @@ xo_encoder_create (const char *name, xo_xof_flags_t flags);
int
xo_encoder_handle (xo_handle_t *xop, xo_encoder_op_t op,
- const char *name, const char *value);
+ const char *name, const char *value, xo_xof_flags_t flags);
void
xo_encoders_clean (void);
diff --git a/contrib/libxo/libxo/xo_syslog.c b/contrib/libxo/libxo/xo_syslog.c
index c1e19e5d77c2..62da1811d0a5 100644
--- a/contrib/libxo/libxo/xo_syslog.c
+++ b/contrib/libxo/libxo/xo_syslog.c
@@ -176,8 +176,8 @@ xo_send_syslog (char *full_msg, char *v0_hdr,
int fd;
int full_len = strlen(full_msg);
- /* Output to stderr if requested. */
- if (xo_logstat & LOG_PERROR) {
+ /* Output to stderr if requested, then we've been passed a v0 header */
+ if (v0_hdr) {
struct iovec iov[3];
struct iovec *v = iov;
char newline[] = "\n";
diff --git a/contrib/libxo/tests/core/Makefile.am b/contrib/libxo/tests/core/Makefile.am
index 7e61f558146c..7f19472b5970 100644
--- a/contrib/libxo/tests/core/Makefile.am
+++ b/contrib/libxo/tests/core/Makefile.am
@@ -66,7 +66,9 @@ EXTRA_DIST = \
${addprefix saved/, ${TEST_CASES:.c=.H.err}} \
${addprefix saved/, ${TEST_CASES:.c=.H.out}} \
${addprefix saved/, ${TEST_CASES:.c=.HIPx.err}} \
- ${addprefix saved/, ${TEST_CASES:.c=.HIPx.out}}
+ ${addprefix saved/, ${TEST_CASES:.c=.HIPx.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.E.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.E.out}}
S2O = | ${SED} '1,/@@/d'
@@ -79,17 +81,11 @@ valgrind:
#TEST_TRACE = set -x ;
TEST_JIG = \
- ${CHECKER} ./$$base.test ${TEST_OPTS} \
+ ${CHECKER} ./$$base.test --libxo$$xoopts ${TEST_OPTS} \
> out/$$base.$$fmt.out 2> out/$$base.$$fmt.err ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.out out/$$base.$$fmt.out ${S2O} ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.err out/$$base.$$fmt.err ${S2O}
-TEST_ONE = \
- LIBXO_OPTIONS=:W$$fmt ${TEST_JIG}
-
-TEST_TWO = \
- LIBXO_OPTIONS=warn,encoder=test ${TEST_JIG}
-
TEST_FORMATS = T XP JP HP X J H HIPx
test tests: ${bin_PROGRAMS}
@@ -98,12 +94,14 @@ test tests: ${bin_PROGRAMS}
base=`${BASENAME} $$test .c` ; \
(for fmt in ${TEST_FORMATS}; do \
echo "... $$test ... $$fmt ..."; \
- ${TEST_ONE}; \
+ xoopts=:W$$fmt ; \
+ ${TEST_JIG}; \
true; \
done) ; \
(for fmt in E; do \
echo "... $$test ... $$fmt ..."; \
- ${TEST_TWO}; \
+ xoopts==warn,encoder=test ; \
+ ${TEST_JIG}; \
true; \
done) \
done)
diff --git a/contrib/libxo/tests/core/saved/test_01.E.out b/contrib/libxo/tests/core/saved/test_01.E.out
index 75f5d0a1d3da..407d3f4a5567 100644
--- a/contrib/libxo/tests/core/saved/test_01.E.out
+++ b/contrib/libxo/tests/core/saved/test_01.E.out
@@ -1,139 +1,139 @@
-op create: [] []
-op open_container: [top] []
-op content: [kve_start] [0xdeadbeef]
-op content: [kve_end] [0xcabb1e]
-op string: [host] [my-box]
-op string: [domain] [example.com]
-op string: [host] [my-box]
-op string: [domain] [example.com]
-op string: [label] [value]
-op string: [max-chaos] [very]
-op content: [min-chaos] [42]
-op string: [some-chaos] [[42]]
-op string: [host] [my-box]
-op string: [domain] [example.com]
-op attr: [test] [value]
-op open_container: [data] []
-op open_list: [item] []
-op attr: [test2] [value2]
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [GRO-000-415]
-op string: [name] [gum]
-op content: [sold] [1412]
-op content: [in-stock] [54]
-op content: [on-order] [10]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-212]
-op string: [name] [rope]
-op content: [sold] [85]
-op content: [in-stock] [4]
-op content: [on-order] [2]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-517]
-op string: [name] [ladder]
-op content: [sold] [0]
-op content: [in-stock] [2]
-op content: [on-order] [1]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-632]
-op string: [name] [bolt]
-op content: [sold] [4123]
-op content: [in-stock] [144]
-op content: [on-order] [42]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [GRO-000-2331]
-op string: [name] [water]
-op content: [sold] [17]
-op content: [in-stock] [14]
-op content: [on-order] [2]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data] []
-op open_container: [data2] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-415]
-op string: [name] [gum]
-op content: [sold] [1412.0]
-op content: [in-stock] [54]
-op content: [on-order] [10]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-212]
-op string: [name] [rope]
-op content: [sold] [85.0]
-op content: [in-stock] [4]
-op content: [on-order] [2]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-517]
-op string: [name] [ladder]
-op content: [sold] [0]
-op content: [in-stock] [2]
-op content: [on-order] [1]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-632]
-op string: [name] [bolt]
-op content: [sold] [4123.0]
-op content: [in-stock] [144]
-op content: [on-order] [42]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-2331]
-op string: [name] [water]
-op content: [sold] [17.0]
-op content: [in-stock] [14]
-op content: [on-order] [2]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data2] []
-op open_container: [data3] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-533]
-op string: [name] [fish]
-op content: [sold] [1321.0]
-op content: [in-stock] [45]
-op content: [on-order] [1]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data3] []
-op open_container: [data4] []
-op open_list: [item] []
-op attr: [test4] [value4]
-op string: [item] [gum]
-op attr: [test4] [value4]
-op string: [item] [rope]
-op attr: [test4] [value4]
-op string: [item] [ladder]
-op attr: [test4] [value4]
-op string: [item] [bolt]
-op attr: [test4] [value4]
-op string: [item] [water]
-op close_list: [item] []
-op close_container: [data4] []
-op content: [cost] [425]
-op content: [cost] [455]
-op string: [mode] [mode]
-op string: [mode_octal] [octal]
-op string: [links] [links]
-op string: [user] [user]
-op string: [group] [group]
-op string: [mode] [/some/file]
-op content: [mode_octal] [640]
-op content: [links] [1]
-op string: [user] [user]
-op string: [group] [group]
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [top] [] [0x810]
+op content: [kve_start] [0xdeadbeef] [0x8]
+op content: [kve_end] [0xcabb1e] [0x8]
+op string: [host] [my-box] [0x200000]
+op string: [domain] [example.com] [0x200000]
+op string: [host] [my-box] [0x200008]
+op string: [domain] [example.com] [0x200000]
+op string: [label] [value] [0x200000]
+op string: [max-chaos] [very] [0x1000]
+op content: [min-chaos] [42] [0]
+op string: [some-chaos] [[42]] [0]
+op string: [host] [my-box] [0]
+op string: [domain] [example.com] [0]
+op attr: [test] [value] [0]
+op open_container: [data] [] [0x810]
+op open_list: [item] [] [0]
+op attr: [test2] [value2] [0]
+op open_instance: [item] [] [0x810]
+op attr: [test3] [value3] [0]
+op string: [sku] [GRO-000-415] [0x98]
+op string: [name] [gum] [0x80]
+op content: [sold] [1412] [0x20]
+op content: [in-stock] [54] [0]
+op content: [on-order] [10] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-212] [0x98]
+op string: [name] [rope] [0x80]
+op content: [sold] [85] [0x20]
+op content: [in-stock] [4] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-517] [0x98]
+op string: [name] [ladder] [0x80]
+op content: [sold] [0] [0x20]
+op content: [in-stock] [2] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-632] [0x98]
+op string: [name] [bolt] [0x80]
+op content: [sold] [4123] [0x20]
+op content: [in-stock] [144] [0]
+op content: [on-order] [42] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op attr: [test3] [value3] [0]
+op string: [sku] [GRO-000-2331] [0x98]
+op string: [name] [water] [0x80]
+op content: [sold] [17] [0x20]
+op content: [in-stock] [14] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data] [] [0]
+op open_container: [data2] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [GRO-000-415] [0x98]
+op string: [name] [gum] [0x80]
+op content: [sold] [1412.0] [0x20]
+op content: [in-stock] [54] [0]
+op content: [on-order] [10] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [HRD-000-212] [0x98]
+op string: [name] [rope] [0x80]
+op content: [sold] [85.0] [0x20]
+op content: [in-stock] [4] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [HRD-000-517] [0x98]
+op string: [name] [ladder] [0x80]
+op content: [sold] [0] [0x20]
+op content: [in-stock] [2] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [HRD-000-632] [0x98]
+op string: [name] [bolt] [0x80]
+op content: [sold] [4123.0] [0x20]
+op content: [in-stock] [144] [0]
+op content: [on-order] [42] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [GRO-000-2331] [0x98]
+op string: [name] [water] [0x80]
+op content: [sold] [17.0] [0x20]
+op content: [in-stock] [14] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data2] [] [0]
+op open_container: [data3] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [sku] [GRO-000-533] [0x98]
+op string: [name] [fish] [0x80]
+op content: [sold] [1321.0] [0x20]
+op content: [in-stock] [45] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data3] [] [0]
+op open_container: [data4] [] [0x810]
+op open_list: [item] [] [0]
+op attr: [test4] [value4] [0]
+op string: [item] [gum] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [rope] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [ladder] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [bolt] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [water] [0x2000]
+op close_list: [item] [] [0]
+op close_container: [data4] [] [0]
+op content: [cost] [425] [0]
+op content: [cost] [455] [0]
+op string: [mode] [mode] [0x8]
+op string: [mode_octal] [octal] [0x8]
+op string: [links] [links] [0x1000]
+op string: [user] [user] [0x1000]
+op string: [group] [group] [0x1000]
+op string: [mode] [/some/file] [0x1000]
+op content: [mode_octal] [640] [0x8]
+op content: [links] [1] [0x1000]
+op string: [user] [user] [0x1000]
+op string: [group] [group] [0x1000]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_02.E.out b/contrib/libxo/tests/core/saved/test_02.E.out
index 9e1ec96be97e..c5a0bec18115 100644
--- a/contrib/libxo/tests/core/saved/test_02.E.out
+++ b/contrib/libxo/tests/core/saved/test_02.E.out
@@ -1,68 +1,68 @@
-op create: [] []
-op open_container: [top] []
-op open_container: [data] []
-op string: [what] [braces]
-op string: [length] [abcdef]
-op content: [fd] [-1]
-op string: [error] [Bad file descriptor]
-op string: [test] [good]
-op content: [fd] [-1]
-op string: [error] [Bad fi]
-op string: [test] [good]
-op content: [lines] [20]
-op content: [words] [30]
-op content: [characters] [40]
-op open_leaf_list: [bytes] []
-op content: [bytes] [0]
-op content: [bytes] [1]
-op content: [bytes] [2]
-op content: [bytes] [3]
-op content: [bytes] [4]
-op close_leaf_list: [bytes] []
-op content: [mbuf-current] [10]
-op content: [mbuf-cache] [20]
-op content: [mbuf-total] [30]
-op content: [distance] [50]
-op string: [location] [Boston]
-op content: [memory] [64]
-op content: [total] [640]
-op content: [memory] [64]
-op content: [total] [640]
-op content: [ten] [10]
-op content: [eleven] [11]
-op content: [unknown] [1010]
-op content: [unknown] [1010]
-op content: [min] [15]
-op content: [cur] [20]
-op content: [max] [30]
-op content: [min] [15]
-op content: [cur] [20]
-op content: [max] [125]
-op content: [min] [15]
-op content: [cur] [20]
-op content: [max] [125]
-op content: [min] [15]
-op content: [cur] [20]
-op content: [max] [125]
-op content: [val1] [21]
-op content: [val2] [58368]
-op content: [val3] [100663296]
-op content: [val4] [44470272]
-op content: [val5] [1342172800]
-op open_list: [flag] []
-op string: [flag] [one]
-op string: [flag] [two]
-op string: [flag] [three]
-op close_list: [flag] []
-op content: [works] [null]
-op content: [empty-tag] [true]
-op string: [t1] [1000]
-op string: [t2] [test5000]
-op string: [t3] [ten-longx]
-op string: [t4] [xtest]
-op content: [count] [10]
-op content: [test] [4]
-op close_container: [data] []
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [top] [] [0x40010]
+op open_container: [data] [] [0x40010]
+op string: [what] [braces] [0]
+op string: [length] [abcdef] [0]
+op content: [fd] [-1] [0]
+op string: [error] [Bad file descriptor] [0]
+op string: [test] [good] [0]
+op content: [fd] [-1] [0]
+op string: [error] [Bad fi] [0]
+op string: [test] [good] [0]
+op content: [lines] [20] [0]
+op content: [words] [30] [0]
+op content: [characters] [40] [0]
+op open_leaf_list: [bytes] [] [0]
+op content: [bytes] [0] [0x2004]
+op content: [bytes] [1] [0x2004]
+op content: [bytes] [2] [0x2004]
+op content: [bytes] [3] [0x2004]
+op content: [bytes] [4] [0x2004]
+op close_leaf_list: [bytes] [] [0]
+op content: [mbuf-current] [10] [0]
+op content: [mbuf-cache] [20] [0]
+op content: [mbuf-total] [30] [0]
+op content: [distance] [50] [0]
+op string: [location] [Boston] [0]
+op content: [memory] [64] [0]
+op content: [total] [640] [0]
+op content: [memory] [64] [0]
+op content: [total] [640] [0]
+op content: [ten] [10] [0]
+op content: [eleven] [11] [0]
+op content: [unknown] [1010] [0]
+op content: [unknown] [1010] [0]
+op content: [min] [15] [0x20]
+op content: [cur] [20] [0x20]
+op content: [max] [30] [0]
+op content: [min] [15] [0]
+op content: [cur] [20] [0]
+op content: [max] [125] [0]
+op content: [min] [15] [0x20]
+op content: [cur] [20] [0x20]
+op content: [max] [125] [0x20]
+op content: [min] [15] [0]
+op content: [cur] [20] [0]
+op content: [max] [125] [0]
+op content: [val1] [21] [0x8000]
+op content: [val2] [58368] [0x18000]
+op content: [val3] [100663296] [0x28000]
+op content: [val4] [44470272] [0x48000]
+op content: [val5] [1342172800] [0x28000]
+op open_list: [flag] [] [0]
+op string: [flag] [one] [0x2010]
+op string: [flag] [two] [0x2010]
+op string: [flag] [three] [0x2010]
+op close_list: [flag] [] [0]
+op content: [works] [null] [0x20]
+op content: [empty-tag] [true] [0x8]
+op string: [t1] [1000] [0x1010]
+op string: [t2] [test5000] [0x1010]
+op string: [t3] [ten-longx] [0x1010]
+op string: [t4] [xtest] [0x1010]
+op content: [count] [10] [0]
+op content: [test] [4] [0]
+op close_container: [data] [] [0]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_03.E.out b/contrib/libxo/tests/core/saved/test_03.E.out
index c68081fb5e16..21bf7d2760ac 100644
--- a/contrib/libxo/tests/core/saved/test_03.E.out
+++ b/contrib/libxo/tests/core/saved/test_03.E.out
@@ -1,34 +1,34 @@
-op create: [] []
-op open_container: [employees] []
-op open_list: [employee] []
-op close_list: [employee] []
-op string: [extra] []
-op open_list: [memory] []
-op open_instance: [memory] []
-op string: [type] [name]
-op content: [in-use] [12345]
-op content: [memory-use] [54321]
-op string: [high-use] [-]
-op content: [requests] [32145]
-op close_instance: [memory] []
-op close_list: [memory] []
-op open_list: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Terry]
-op string: [last-name] [Jones]
-op content: [department] [660]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Leslie]
-op string: [last-name] [Patterson]
-op content: [department] [341]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Ashley]
-op string: [last-name] [Smith]
-op content: [department] [1440]
-op close_instance: [employee] []
-op close_list: [employee] []
-op close_container: [employees] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [employees] [] [0x10]
+op open_list: [employee] [] [0]
+op close_list: [employee] [] [0]
+op string: [extra] [] [0]
+op open_list: [memory] [] [0]
+op open_instance: [memory] [] [0x10]
+op string: [type] [name] [0x80]
+op content: [in-use] [12345] [0]
+op content: [memory-use] [54321] [0]
+op string: [high-use] [-] [0]
+op content: [requests] [32145] [0]
+op close_instance: [memory] [] [0]
+op close_list: [memory] [] [0]
+op open_list: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Terry] [0]
+op string: [last-name] [Jones] [0]
+op content: [department] [660] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Leslie] [0]
+op string: [last-name] [Patterson] [0]
+op content: [department] [341] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Ashley] [0]
+op string: [last-name] [Smith] [0]
+op content: [department] [1440] [0]
+op close_instance: [employee] [] [0]
+op close_list: [employee] [] [0]
+op close_container: [employees] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_04.E.out b/contrib/libxo/tests/core/saved/test_04.E.out
index 39657834bd23..cfb751d6b925 100644
--- a/contrib/libxo/tests/core/saved/test_04.E.out
+++ b/contrib/libxo/tests/core/saved/test_04.E.out
@@ -1,22 +1,22 @@
-op create: [] []
-op open_container: [employees] []
-op open_list: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Terry]
-op string: [last-name] [Jones]
-op content: [department] [660]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Leslie]
-op string: [last-name] [Patterson]
-op content: [department] [341]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Ashley]
-op string: [last-name] [Smith]
-op content: [department] [1440]
-op close_instance: [employee] []
-op close_list: [employee] []
-op close_container: [employees] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [employees] [] [0x10]
+op open_list: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Terry] [0]
+op string: [last-name] [Jones] [0]
+op content: [department] [660] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Leslie] [0]
+op string: [last-name] [Patterson] [0]
+op content: [department] [341] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x10]
+op string: [first-name] [Ashley] [0]
+op string: [last-name] [Smith] [0]
+op content: [department] [1440] [0]
+op close_instance: [employee] [] [0]
+op close_list: [employee] [] [0]
+op close_container: [employees] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_05.E.out b/contrib/libxo/tests/core/saved/test_05.E.out
index 0ca15f4fc837..8e8fcfe65c58 100644
--- a/contrib/libxo/tests/core/saved/test_05.E.out
+++ b/contrib/libxo/tests/core/saved/test_05.E.out
@@ -1,96 +1,96 @@
-op create: [] []
-op open_container: [indian-languages] []
-op string: [gurmukhi] [ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜà©à¨¹à¨¾à¨ˆ ਦਾ ਗੜà©à¨¹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-à¨-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।]
-op string: [shahmukhi] [Ù„Ûور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد Ù„Ûور دوجا سبھ توں وڈا Ø´Ûر اے۔ Ù„Ûور پاکستان دا سیاسی، رÛتلی تے پڑھائی دا Ú¯Ú‘Ú¾ اے تے اس لئی ایھنوں پاکستان دا دل ÙˆÛŒ کیھا جاندا اے۔ Ù„Ûور دریاۓ راوی دے Ú©Ù†ÚˆÚ¾Û’ تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے Û”]
-op string: [tranliteration] [lahor pÄkistÄn panjÄb dÄ dÄrul hakÅ«mat Ä“. lÅk giṇtÄ« dÄ“ nÄḷ karÄcÄ« tÅá·ˆ bÄad lahor dÅ«jÄ sab tÅá·ˆ vaá¸á¸Ä shahr Ä“. lahor pÄkistÄn dÄ siÄsÄ«, rahtalÄ« tÄ“ paá¹›Ä̀ī dÄ gÄÌá¹› Ä“ tÄ“ is laÄ« ihnÅ«á·ˆ pÄkistÄn dÄ dil vÄ« kehÄ jÄndÄ Ä“. lahor dariÄÄ“ rÄvÄ« dÄ“ kaná¸Ä“ tÄ“ vasdÄ Ä“. isdÄ« lÅk giṇtÄ« ikk karÅá¹› dÄ“ nēṛē Ä“.]
-op close_container: [indian-languages] []
-op open_container: [employees] []
-op open_leaf_list: [wc] []
-op string: [wc] [à·´ - 0xdf4 - 1]
-op string: [wc] [ණ - 0xdab - 1]
-op string: [wc] [à·Š - 0xdca - 0]
-op string: [wc] [ණ - 0xdab - 1]
-op string: [wc] [្ - 0x17d2 - 0]
-op string: [wc] [à·´ - 0xdf4 - 1]
-op string: [wc] [1 - 0x31 - 1]
-op string: [wc] [Í - 0x34f - 0]
-op string: [wc] [2 - 0x32 - 1]
-op string: [wc] [⃠- 0x20dd - 0]
-op close_leaf_list: [wc] []
-op string: [fancy] [1Í2âƒ]
-op string: [v1] [γιγνώσκειν]
-op string: [v2] [ὦ ἄνδÏες ᾿Αθηναῖοι]
-op string: [v1] [áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ]
-op string: [v2] [Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ]
-op content: [width] [55]
-op string: [sinhala] [෴ණ්ණ෴]
-op content: [width] [4]
-op string: [sinhala] [à·´]
-op content: [width] [1]
-op string: [sinhala] [෴ණ්ණ෴෴ණ්ණ෴]
-op content: [width] [8]
-op string: [not-sinhala] [123456]
-op string: [tag] [ර්â€à¶]
-op content: [width] [2]
-op open_list: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Jim]
-op string: [nic-name] ["რეგტ"]
-op string: [last-name] [გთხáƒáƒ•áƒ— áƒáƒ®]
-op content: [department] [431]
-op content: [percent-time] [90]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Terry]
-op string: [nic-name] ["<one"]
-op string: [last-name] [Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι Jones]
-op content: [department] [660]
-op content: [percent-time] [90]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Leslie]
-op string: [nic-name] ["Les"]
-op string: [last-name] [Patterson]
-op content: [department] [341]
-op content: [percent-time] [60]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Ashley]
-op string: [nic-name] ["Ash"]
-op string: [last-name] [Meter & Smith]
-op content: [department] [1440]
-op content: [percent-time] [40]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [0123456789]
-op string: [nic-name] ["0123456789"]
-op string: [last-name] [012345678901234567890]
-op content: [department] [1440]
-op content: [percent-time] [40]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [áƒáƒ®áƒšáƒ]
-op string: [nic-name] ["გáƒáƒ˜áƒáƒ áƒ"]
-op string: [last-name] [სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ]
-op content: [department] [123]
-op content: [percent-time] [90]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [෴ණ්ණ෴෴ණ්ණ෴]
-op string: [nic-name] ["Mick"]
-op string: [last-name] [෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴]
-op content: [department] [110]
-op content: [percent-time] [20]
-op close_instance: [employee] []
-op close_list: [employee] []
-op close_container: [employees] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [indian-languages] [] [0x200010]
+op string: [gurmukhi] [ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜà©à¨¹à¨¾à¨ˆ ਦਾ ਗੜà©à¨¹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-à¨-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।] [0]
+op string: [shahmukhi] [Ù„Ûور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد Ù„Ûور دوجا سبھ توں وڈا Ø´Ûر اے۔ Ù„Ûور پاکستان دا سیاسی، رÛتلی تے پڑھائی دا Ú¯Ú‘Ú¾ اے تے اس لئی ایھنوں پاکستان دا دل ÙˆÛŒ کیھا جاندا اے۔ Ù„Ûور دریاۓ راوی دے Ú©Ù†ÚˆÚ¾Û’ تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے Û”] [0]
+op string: [tranliteration] [lahor pÄkistÄn panjÄb dÄ dÄrul hakÅ«mat Ä“. lÅk giṇtÄ« dÄ“ nÄḷ karÄcÄ« tÅá·ˆ bÄad lahor dÅ«jÄ sab tÅá·ˆ vaá¸á¸Ä shahr Ä“. lahor pÄkistÄn dÄ siÄsÄ«, rahtalÄ« tÄ“ paá¹›Ä̀ī dÄ gÄÌá¹› Ä“ tÄ“ is laÄ« ihnÅ«á·ˆ pÄkistÄn dÄ dil vÄ« kehÄ jÄndÄ Ä“. lahor dariÄÄ“ rÄvÄ« dÄ“ kaná¸Ä“ tÄ“ vasdÄ Ä“. isdÄ« lÅk giṇtÄ« ikk karÅá¹› dÄ“ nēṛē Ä“.] [0]
+op close_container: [indian-languages] [] [0]
+op open_container: [employees] [] [0x200010]
+op open_leaf_list: [wc] [] [0]
+op string: [wc] [à·´ - 0xdf4 - 1] [0x2010]
+op string: [wc] [ණ - 0xdab - 1] [0x2010]
+op string: [wc] [à·Š - 0xdca - 0] [0x2010]
+op string: [wc] [ණ - 0xdab - 1] [0x2010]
+op string: [wc] [្ - 0x17d2 - 0] [0x2010]
+op string: [wc] [à·´ - 0xdf4 - 1] [0x2010]
+op string: [wc] [1 - 0x31 - 1] [0x2010]
+op string: [wc] [Í - 0x34f - 0] [0x2010]
+op string: [wc] [2 - 0x32 - 1] [0x2010]
+op string: [wc] [⃠- 0x20dd - 0] [0x2010]
+op close_leaf_list: [wc] [] [0]
+op string: [fancy] [1Í2âƒ] [0]
+op string: [v1] [γιγνώσκειν] [0]
+op string: [v2] [ὦ ἄνδÏες ᾿Αθηναῖοι] [0]
+op string: [v1] [áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ] [0]
+op string: [v2] [Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ] [0]
+op content: [width] [55] [0]
+op string: [sinhala] [෴ණ්ණ෴] [0]
+op content: [width] [4] [0]
+op string: [sinhala] [à·´] [0]
+op content: [width] [1] [0]
+op string: [sinhala] [෴ණ්ණ෴෴ණ්ණ෴] [0]
+op content: [width] [8] [0]
+op string: [not-sinhala] [123456] [0]
+op string: [tag] [ර්â€à¶] [0]
+op content: [width] [2] [0]
+op open_list: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Jim] [0]
+op string: [nic-name] ["რეგტ"] [0]
+op string: [last-name] [გთხáƒáƒ•áƒ— áƒáƒ®] [0]
+op content: [department] [431] [0]
+op content: [percent-time] [90] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Terry] [0]
+op string: [nic-name] ["<one"] [0]
+op string: [last-name] [Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι Jones] [0]
+op content: [department] [660] [0]
+op content: [percent-time] [90] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Leslie] [0]
+op string: [nic-name] ["Les"] [0]
+op string: [last-name] [Patterson] [0]
+op content: [department] [341] [0]
+op content: [percent-time] [60] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Ashley] [0]
+op string: [nic-name] ["Ash"] [0]
+op string: [last-name] [Meter & Smith] [0]
+op content: [department] [1440] [0]
+op content: [percent-time] [40] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [0123456789] [0]
+op string: [nic-name] ["0123456789"] [0]
+op string: [last-name] [012345678901234567890] [0]
+op content: [department] [1440] [0]
+op content: [percent-time] [40] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [áƒáƒ®áƒšáƒ] [0]
+op string: [nic-name] ["გáƒáƒ˜áƒáƒ áƒ"] [0]
+op string: [last-name] [სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ] [0]
+op content: [department] [123] [0]
+op content: [percent-time] [90] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [෴ණ්ණ෴෴ණ්ණ෴] [0]
+op string: [nic-name] ["Mick"] [0]
+op string: [last-name] [෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴] [0]
+op content: [department] [110] [0]
+op content: [percent-time] [20] [0]
+op close_instance: [employee] [] [0]
+op close_list: [employee] [] [0]
+op close_container: [employees] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_06.E.out b/contrib/libxo/tests/core/saved/test_06.E.out
index 39657834bd23..12ba8aa34e1e 100644
--- a/contrib/libxo/tests/core/saved/test_06.E.out
+++ b/contrib/libxo/tests/core/saved/test_06.E.out
@@ -1,22 +1,22 @@
-op create: [] []
-op open_container: [employees] []
-op open_list: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Terry]
-op string: [last-name] [Jones]
-op content: [department] [660]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Leslie]
-op string: [last-name] [Patterson]
-op content: [department] [341]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Ashley]
-op string: [last-name] [Smith]
-op content: [department] [1440]
-op close_instance: [employee] []
-op close_list: [employee] []
-op close_container: [employees] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [employees] [] [0x410]
+op open_list: [employee] [] [0]
+op open_instance: [employee] [] [0x410]
+op string: [first-name] [Terry] [0]
+op string: [last-name] [Jones] [0]
+op content: [department] [660] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x410]
+op string: [first-name] [Leslie] [0]
+op string: [last-name] [Patterson] [0]
+op content: [department] [341] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x410]
+op string: [first-name] [Ashley] [0]
+op string: [last-name] [Smith] [0]
+op content: [department] [1440] [0]
+op close_instance: [employee] [] [0]
+op close_list: [employee] [] [0]
+op close_container: [employees] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_07.E.out b/contrib/libxo/tests/core/saved/test_07.E.out
index 45e4b69340eb..8503ce8a4732 100644
--- a/contrib/libxo/tests/core/saved/test_07.E.out
+++ b/contrib/libxo/tests/core/saved/test_07.E.out
@@ -1,76 +1,76 @@
-op create: [] []
-op open_container: [employees] []
-op open_list: [test] []
-op open_instance: [test] []
-op string: [filename] [(null)]
-op close_instance: [test] []
-op close_list: [test] []
-op string: [v1] [γιγνώσκειν]
-op string: [v2] [ὦ ἄνδÏες ᾿Αθηναῖοι]
-op content: [columns] [28]
-op content: [columns] [2]
-op string: [v1] [áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ]
-op string: [v2] [Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ]
-op content: [columns] [55]
-op content: [columns] [0]
-op open_list: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Jim]
-op string: [nic-name] ["რეგტ"]
-op string: [last-name] [გთხáƒáƒ•áƒ— áƒáƒ®]
-op content: [department] [431]
-op content: [percent-time] [90]
-op content: [columns] [23]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Terry]
-op string: [nic-name] ["<one"]
-op string: [last-name] [Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι Jones]
-op content: [department] [660]
-op content: [percent-time] [90]
-op content: [columns] [47]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Leslie]
-op string: [nic-name] ["Les"]
-op string: [last-name] [Patterson]
-op content: [department] [341]
-op content: [percent-time] [60]
-op content: [columns] [25]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [Ashley]
-op string: [nic-name] ["Ash"]
-op string: [last-name] [Meter & Smith]
-op content: [department] [1440]
-op content: [percent-time] [40]
-op content: [columns] [30]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [0123456789]
-op string: [nic-name] ["0123456789"]
-op string: [last-name] [012345678901234567890]
-op content: [department] [1440]
-op content: [percent-time] [40]
-op content: [columns] [49]
-op close_instance: [employee] []
-op open_instance: [employee] []
-op string: [first-name] [áƒáƒ®áƒšáƒ]
-op string: [nic-name] ["გáƒáƒ˜áƒáƒ áƒ"]
-op string: [last-name] [სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ]
-op content: [department] [123]
-op content: [percent-time] [90]
-op content: [columns] [29]
-op attr: [full-time] [honest & for true]
-op string: [benefits] [full]
-op close_instance: [employee] []
-op close_list: [employee] []
-op close_container: [employees] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [employees] [] [0x200010]
+op open_list: [test] [] [0]
+op open_instance: [test] [] [0x200010]
+op string: [filename] [(null)] [0x88]
+op close_instance: [test] [] [0]
+op close_list: [test] [] [0]
+op string: [v1] [γιγνώσκειν] [0]
+op string: [v2] [ὦ ἄνδÏες ᾿Αθηναῖοι] [0]
+op content: [columns] [28] [0]
+op content: [columns] [2] [0]
+op string: [v1] [áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ] [0]
+op string: [v2] [Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ] [0]
+op content: [columns] [55] [0]
+op content: [columns] [0] [0]
+op open_list: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Jim] [0]
+op string: [nic-name] ["რეგტ"] [0]
+op string: [last-name] [გთხáƒáƒ•áƒ— áƒáƒ®] [0]
+op content: [department] [431] [0]
+op content: [percent-time] [90] [0]
+op content: [columns] [23] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Terry] [0]
+op string: [nic-name] ["<one"] [0]
+op string: [last-name] [Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι Jones] [0]
+op content: [department] [660] [0]
+op content: [percent-time] [90] [0]
+op content: [columns] [47] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Leslie] [0]
+op string: [nic-name] ["Les"] [0]
+op string: [last-name] [Patterson] [0]
+op content: [department] [341] [0]
+op content: [percent-time] [60] [0]
+op content: [columns] [25] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [Ashley] [0]
+op string: [nic-name] ["Ash"] [0]
+op string: [last-name] [Meter & Smith] [0]
+op content: [department] [1440] [0]
+op content: [percent-time] [40] [0]
+op content: [columns] [30] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [0123456789] [0]
+op string: [nic-name] ["0123456789"] [0]
+op string: [last-name] [012345678901234567890] [0]
+op content: [department] [1440] [0]
+op content: [percent-time] [40] [0]
+op content: [columns] [49] [0]
+op close_instance: [employee] [] [0]
+op open_instance: [employee] [] [0x200010]
+op string: [first-name] [áƒáƒ®áƒšáƒ] [0]
+op string: [nic-name] ["გáƒáƒ˜áƒáƒ áƒ"] [0]
+op string: [last-name] [სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ] [0]
+op content: [department] [123] [0]
+op content: [percent-time] [90] [0]
+op content: [columns] [29] [0]
+op attr: [full-time] [honest & for true] [0]
+op string: [benefits] [full] [0x8]
+op close_instance: [employee] [] [0]
+op close_list: [employee] [] [0]
+op close_container: [employees] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_08.E.out b/contrib/libxo/tests/core/saved/test_08.E.out
index c00f4b8171f2..389a4bdfe378 100644
--- a/contrib/libxo/tests/core/saved/test_08.E.out
+++ b/contrib/libxo/tests/core/saved/test_08.E.out
@@ -1,186 +1,186 @@
-op create: [] []
-op open_container: [top] []
-op open_container: [data] []
-op open_container: [contents] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [name] [gum]
-op content: [count] [1412]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [rope]
-op content: [count] [85]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [ladder]
-op content: [count] [0]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [bolt]
-op content: [count] [4123]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [water]
-op content: [count] [17]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [contents] []
-op close_container: [data] []
-op open_container: [data2] []
-op open_container: [contents] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [name] [gum]
-op content: [count] [1412]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [rope]
-op content: [count] [85]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [ladder]
-op content: [count] [0]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [bolt]
-op content: [count] [4123]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [water]
-op content: [count] [17]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [contents] []
-op close_container: [data2] []
-op open_container: [data3] []
-op open_container: [contents] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [name] [gum]
-op content: [count] [1412]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [rope]
-op content: [count] [85]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [ladder]
-op content: [count] [0]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [bolt]
-op content: [count] [4123]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [water]
-op content: [count] [17]
-op string: [test] [one]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [contents] []
-op close_container: [data3] []
-op open_container: [data4] []
-op open_container: [contents] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [name] [gum]
-op content: [count] [1412]
-op open_list: [sub] []
-op open_instance: [sub] []
-op content: [name] [0]
-op content: [next] [1]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [1]
-op content: [next] [2]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [2]
-op content: [next] [3]
-op close_instance: [sub] []
-op close_list: [sub] []
-op content: [last] [3]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [rope]
-op content: [count] [85]
-op open_list: [sub] []
-op open_instance: [sub] []
-op content: [name] [0]
-op content: [next] [1]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [1]
-op content: [next] [2]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [2]
-op content: [next] [3]
-op close_instance: [sub] []
-op close_list: [sub] []
-op content: [last] [3]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [ladder]
-op content: [count] [0]
-op open_list: [sub] []
-op open_instance: [sub] []
-op content: [name] [0]
-op content: [next] [1]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [1]
-op content: [next] [2]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [2]
-op content: [next] [3]
-op close_instance: [sub] []
-op close_list: [sub] []
-op content: [last] [3]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [bolt]
-op content: [count] [4123]
-op open_list: [sub] []
-op open_instance: [sub] []
-op content: [name] [0]
-op content: [next] [1]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [1]
-op content: [next] [2]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [2]
-op content: [next] [3]
-op close_instance: [sub] []
-op close_list: [sub] []
-op content: [last] [3]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [name] [water]
-op content: [count] [17]
-op open_list: [sub] []
-op open_instance: [sub] []
-op content: [name] [0]
-op content: [next] [1]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [1]
-op content: [next] [2]
-op close_instance: [sub] []
-op open_instance: [sub] []
-op content: [name] [2]
-op content: [next] [3]
-op close_instance: [sub] []
-op close_list: [sub] []
-op content: [last] [3]
-op string: [test] [one]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [contents] []
-op close_container: [data4] []
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [top] [] [0x810]
+op open_container: [data] [] [0x810]
+op open_container: [contents] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [gum] [0x80]
+op content: [count] [1412] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [rope] [0x80]
+op content: [count] [85] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [ladder] [0x80]
+op content: [count] [0] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [bolt] [0x80]
+op content: [count] [4123] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [water] [0x80]
+op content: [count] [17] [0x20]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [contents] [] [0]
+op close_container: [data] [] [0]
+op open_container: [data2] [] [0x810]
+op open_container: [contents] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [gum] [0x80]
+op content: [count] [1412] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [rope] [0x80]
+op content: [count] [85] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [ladder] [0x80]
+op content: [count] [0] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [bolt] [0x80]
+op content: [count] [4123] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [water] [0x80]
+op content: [count] [17] [0x20]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [contents] [] [0]
+op close_container: [data2] [] [0]
+op open_container: [data3] [] [0x810]
+op open_container: [contents] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [gum] [0x80]
+op content: [count] [1412] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [rope] [0x80]
+op content: [count] [85] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [ladder] [0x80]
+op content: [count] [0] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [bolt] [0x80]
+op content: [count] [4123] [0x20]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [water] [0x80]
+op content: [count] [17] [0x20]
+op string: [test] [one] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [contents] [] [0]
+op close_container: [data3] [] [0]
+op open_container: [data4] [] [0x810]
+op open_container: [contents] [] [0x810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [gum] [0x80]
+op content: [count] [1412] [0x20]
+op open_list: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [0] [0]
+op content: [next] [1] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [1] [0]
+op content: [next] [2] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [2] [0]
+op content: [next] [3] [0]
+op close_instance: [sub] [] [0]
+op close_list: [sub] [] [0]
+op content: [last] [3] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [rope] [0x80]
+op content: [count] [85] [0x20]
+op open_list: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [0] [0]
+op content: [next] [1] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [1] [0]
+op content: [next] [2] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [2] [0]
+op content: [next] [3] [0]
+op close_instance: [sub] [] [0]
+op close_list: [sub] [] [0]
+op content: [last] [3] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [ladder] [0x80]
+op content: [count] [0] [0x20]
+op open_list: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [0] [0]
+op content: [next] [1] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [1] [0]
+op content: [next] [2] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [2] [0]
+op content: [next] [3] [0]
+op close_instance: [sub] [] [0]
+op close_list: [sub] [] [0]
+op content: [last] [3] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [bolt] [0x80]
+op content: [count] [4123] [0x20]
+op open_list: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [0] [0]
+op content: [next] [1] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [1] [0]
+op content: [next] [2] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [2] [0]
+op content: [next] [3] [0]
+op close_instance: [sub] [] [0]
+op close_list: [sub] [] [0]
+op content: [last] [3] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x810]
+op string: [name] [water] [0x80]
+op content: [count] [17] [0x20]
+op open_list: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [0] [0]
+op content: [next] [1] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [1] [0]
+op content: [next] [2] [0]
+op close_instance: [sub] [] [0]
+op open_instance: [sub] [] [0x810]
+op content: [name] [2] [0]
+op content: [next] [3] [0]
+op close_instance: [sub] [] [0]
+op close_list: [sub] [] [0]
+op content: [last] [3] [0]
+op string: [test] [one] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [contents] [] [0]
+op close_container: [data4] [] [0]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_09.E.out b/contrib/libxo/tests/core/saved/test_09.E.out
index bb808d5e2ddc..abc69cf2e7b2 100644
--- a/contrib/libxo/tests/core/saved/test_09.E.out
+++ b/contrib/libxo/tests/core/saved/test_09.E.out
@@ -1,40 +1,40 @@
-op create: [] []
-op open_container: [top] []
-op open_container: [data] []
-op open_container: [contents] []
-op open_leaf_list: [name] []
-op string: [name] [gum]
-op string: [name] [rope]
-op string: [name] [ladder]
-op string: [name] [bolt]
-op string: [name] [water]
-op close_leaf_list: [name] []
-op close_container: [contents] []
-op open_container: [contents] []
-op open_leaf_list: [item] []
-op string: [item] [gum]
-op string: [item] [rope]
-op string: [item] [ladder]
-op string: [item] [bolt]
-op string: [item] [water]
-op close_leaf_list: [item] []
-op close_container: [contents] []
-op open_container: [contents] []
-op open_list: [item] []
-op string: [item] [gum]
-op string: [item] [rope]
-op string: [item] [ladder]
-op string: [item] [bolt]
-op string: [item] [water]
-op close_list: [item] []
-op string: [total] [six]
-op string: [one] [one]
-op open_leaf_list: [two] []
-op string: [two] [two]
-op close_leaf_list: [two] []
-op string: [three] [three]
-op close_container: [contents] []
-op close_container: [data] []
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [top] [] [0x810]
+op open_container: [data] [] [0x810]
+op open_container: [contents] [] [0x810]
+op open_leaf_list: [name] [] [0]
+op string: [name] [gum] [0x2000]
+op string: [name] [rope] [0x2000]
+op string: [name] [ladder] [0x2000]
+op string: [name] [bolt] [0x2000]
+op string: [name] [water] [0x2000]
+op close_leaf_list: [name] [] [0]
+op close_container: [contents] [] [0]
+op open_container: [contents] [] [0x810]
+op open_leaf_list: [item] [] [0]
+op string: [item] [gum] [0x2000]
+op string: [item] [rope] [0x2000]
+op string: [item] [ladder] [0x2000]
+op string: [item] [bolt] [0x2000]
+op string: [item] [water] [0x2000]
+op close_leaf_list: [item] [] [0]
+op close_container: [contents] [] [0]
+op open_container: [contents] [] [0x810]
+op open_list: [item] [] [0]
+op string: [item] [gum] [0x2000]
+op string: [item] [rope] [0x2000]
+op string: [item] [ladder] [0x2000]
+op string: [item] [bolt] [0x2000]
+op string: [item] [water] [0x2000]
+op close_list: [item] [] [0]
+op string: [total] [six] [0]
+op string: [one] [one] [0]
+op open_leaf_list: [two] [] [0]
+op string: [two] [two] [0x2000]
+op close_leaf_list: [two] [] [0]
+op string: [three] [three] [0]
+op close_container: [contents] [] [0]
+op close_container: [data] [] [0]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_10.E.out b/contrib/libxo/tests/core/saved/test_10.E.out
index 4f21cda4cbce..dc50d92ab0f0 100644
--- a/contrib/libxo/tests/core/saved/test_10.E.out
+++ b/contrib/libxo/tests/core/saved/test_10.E.out
@@ -1,126 +1,126 @@
-op create: [] []
-op version: [] [3.1.4]
-op open_container: [top] []
-op attr: [test] [value]
-op open_container: [data] []
-op open_list: [item] []
-op attr: [test2] [value2]
-op close_list: [item] []
-op string: [data] [bold]
-op string: [data] [bold-ul]
-op string: [data] [triple]
-op string: [data] [inv-ul]
-op string: [data] [underline]
-op string: [data] [plain]
-op open_list: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [GRO-000-415]
-op string: [name] [gum]
-op content: [sold] [1412]
-op content: [in-stock] [54]
-op content: [on-order] [10]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-212]
-op string: [name] [rope]
-op content: [sold] [85]
-op content: [in-stock] [4]
-op content: [on-order] [2]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-517]
-op string: [name] [ladder]
-op content: [sold] [0]
-op content: [in-stock] [2]
-op content: [on-order] [1]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [HRD-000-632]
-op string: [name] [bolt]
-op content: [sold] [4123]
-op content: [in-stock] [144]
-op content: [on-order] [42]
-op close_instance: [item] []
-op open_instance: [item] []
-op attr: [test3] [value3]
-op string: [sku] [GRO-000-2331]
-op string: [name] [water]
-op content: [sold] [17]
-op content: [in-stock] [14]
-op content: [on-order] [2]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data] []
-op open_container: [data] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-415]
-op string: [name] [gum]
-op content: [sold] [1412.0]
-op content: [in-stock] [54]
-op content: [on-order] [10]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-212]
-op string: [name] [rope]
-op content: [sold] [85.0]
-op content: [in-stock] [4]
-op content: [on-order] [2]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-517]
-op string: [name] [ladder]
-op content: [sold] [0]
-op content: [in-stock] [2]
-op content: [on-order] [1]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [HRD-000-632]
-op string: [name] [bolt]
-op content: [sold] [4123.0]
-op content: [in-stock] [144]
-op content: [on-order] [42]
-op close_instance: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-2331]
-op string: [name] [water]
-op content: [sold] [17.0]
-op content: [in-stock] [14]
-op content: [on-order] [2]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data] []
-op open_container: [data] []
-op open_list: [item] []
-op open_instance: [item] []
-op string: [sku] [GRO-000-533]
-op string: [name] [fish]
-op content: [sold] [1321.0]
-op content: [in-stock] [45]
-op content: [on-order] [1]
-op close_instance: [item] []
-op close_list: [item] []
-op close_container: [data] []
-op open_container: [data] []
-op open_list: [item] []
-op attr: [test4] [value4]
-op string: [item] [gum]
-op attr: [test4] [value4]
-op string: [item] [rope]
-op attr: [test4] [value4]
-op string: [item] [ladder]
-op attr: [test4] [value4]
-op string: [item] [bolt]
-op attr: [test4] [value4]
-op string: [item] [water]
-op close_list: [item] []
-op close_container: [data] []
-op content: [cost] [425]
-op content: [cost] [455]
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op version: [] [3.1.4] [0]
+op open_container: [top] [] [0x4000810]
+op attr: [test] [value] [0]
+op open_container: [data] [] [0x4000810]
+op open_list: [item] [] [0]
+op attr: [test2] [value2] [0]
+op close_list: [item] [] [0]
+op string: [data] [bold] [0]
+op string: [data] [bold-ul] [0]
+op string: [data] [triple] [0]
+op string: [data] [inv-ul] [0]
+op string: [data] [underline] [0]
+op string: [data] [plain] [0]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op attr: [test3] [value3] [0]
+op string: [sku] [GRO-000-415] [0x98]
+op string: [name] [gum] [0x80]
+op content: [sold] [1412] [0x20]
+op content: [in-stock] [54] [0]
+op content: [on-order] [10] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-212] [0x98]
+op string: [name] [rope] [0x80]
+op content: [sold] [85] [0x20]
+op content: [in-stock] [4] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-517] [0x98]
+op string: [name] [ladder] [0x80]
+op content: [sold] [0] [0x20]
+op content: [in-stock] [2] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op attr: [test3] [value3] [0]
+op string: [sku] [HRD-000-632] [0x98]
+op string: [name] [bolt] [0x80]
+op content: [sold] [4123] [0x20]
+op content: [in-stock] [144] [0]
+op content: [on-order] [42] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op attr: [test3] [value3] [0]
+op string: [sku] [GRO-000-2331] [0x98]
+op string: [name] [water] [0x80]
+op content: [sold] [17] [0x20]
+op content: [in-stock] [14] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data] [] [0]
+op open_container: [data] [] [0x4000810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [GRO-000-415] [0x98]
+op string: [name] [gum] [0x80]
+op content: [sold] [1412.0] [0x20]
+op content: [in-stock] [54] [0]
+op content: [on-order] [10] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [HRD-000-212] [0x98]
+op string: [name] [rope] [0x80]
+op content: [sold] [85.0] [0x20]
+op content: [in-stock] [4] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [HRD-000-517] [0x98]
+op string: [name] [ladder] [0x80]
+op content: [sold] [0] [0x20]
+op content: [in-stock] [2] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [HRD-000-632] [0x98]
+op string: [name] [bolt] [0x80]
+op content: [sold] [4123.0] [0x20]
+op content: [in-stock] [144] [0]
+op content: [on-order] [42] [0]
+op close_instance: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [GRO-000-2331] [0x98]
+op string: [name] [water] [0x80]
+op content: [sold] [17.0] [0x20]
+op content: [in-stock] [14] [0]
+op content: [on-order] [2] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data] [] [0]
+op open_container: [data] [] [0x4000810]
+op open_list: [item] [] [0]
+op open_instance: [item] [] [0x4000810]
+op string: [sku] [GRO-000-533] [0x98]
+op string: [name] [fish] [0x80]
+op content: [sold] [1321.0] [0x20]
+op content: [in-stock] [45] [0]
+op content: [on-order] [1] [0]
+op close_instance: [item] [] [0]
+op close_list: [item] [] [0]
+op close_container: [data] [] [0]
+op open_container: [data] [] [0x4000810]
+op open_list: [item] [] [0]
+op attr: [test4] [value4] [0]
+op string: [item] [gum] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [rope] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [ladder] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [bolt] [0x2000]
+op attr: [test4] [value4] [0]
+op string: [item] [water] [0x2000]
+op close_list: [item] [] [0]
+op close_container: [data] [] [0]
+op content: [cost] [425] [0]
+op content: [cost] [455] [0]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_11.E.out b/contrib/libxo/tests/core/saved/test_11.E.out
index 9fd70fa569b1..76b8f21cc937 100644
--- a/contrib/libxo/tests/core/saved/test_11.E.out
+++ b/contrib/libxo/tests/core/saved/test_11.E.out
@@ -1,26 +1,22 @@
-op create: [] []
-op version: [] [3.1.4]
-op open_container: [top] []
-op create: [] []
+op create: [] [] [0]
+op version: [] [3.1.4] [0]
+op open_container: [top] [] [0x10]
{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
{{test-program: }}
{{The snake is loose}}
-op create: [] []
{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
{{test-program: }}
{{My snake ate your hamster}}
-op create: [] []
{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
{{test-program: }}
{{1 owl said "e=m\c[2]"}}
-op create: [] []
{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
{{test-program: }}
{{An application 1011 log entry}}
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_11.HIPx.out b/contrib/libxo/tests/core/saved/test_11.HIPx.out
index 8b726f4fbe43..0786c345654d 100644
--- a/contrib/libxo/tests/core/saved/test_11.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_11.HIPx.out
@@ -1,16 +1,16 @@
-{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="" state=""] The snake is loose}}
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
{{test-program: }}
{{The snake is loose}}
-{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="" pet=""] My snake ate your hamster}}
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
{{test-program: }}
{{My snake ate your hamster}}
-{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="" animal="" quote=""] 1 owl said "e=m\c[2]"}}
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
{{test-program: }}
{{1 owl said "e=m\c[2]"}}
-{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="" event-source="" event-id=""] An application 1011 log entry}}
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
{{test-program: }}
{{An application 1011 log entry}}
diff --git a/contrib/libxo/tests/core/saved/test_12.E.out b/contrib/libxo/tests/core/saved/test_12.E.out
index 1c899a165664..a831f5c64b6b 100644
--- a/contrib/libxo/tests/core/saved/test_12.E.out
+++ b/contrib/libxo/tests/core/saved/test_12.E.out
@@ -1,89 +1,91 @@
-op create: [] []
-op open_container: [top] []
-op open_container: [data] []
-op open_list: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op open_instance: [thing] []
-op string: [name] [thing]
-op string: [color] [green]
-op content: [time] [2:15]
-op string: [hand] [left]
-op string: [color] [blue]
-op content: [time] [3:45]
-op close_instance: [thing] []
-op close_list: [thing] []
-op close_container: [data] []
-op close_container: [top] []
-op finish: [] []
-op flush: [] []
+op create: [] [] [0]
+op open_container: [top] [] [0x4040010]
+op open_container: [data] [] [0x4040010]
+op string: [animal] [fish] [0]
+op string: [animal] [fish] [0]
+op open_list: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op open_instance: [thing] [] [0x4040010]
+op string: [name] [thing] [0x80]
+op string: [color] [green] [0]
+op content: [time] [2:15] [0]
+op string: [hand] [left] [0]
+op string: [color] [blue] [0]
+op content: [time] [3:45] [0]
+op close_instance: [thing] [] [0]
+op close_list: [thing] [] [0]
+op close_container: [data] [] [0]
+op close_container: [top] [] [0]
+op finish: [] [] [0]
+op flush: [] [] [0]
diff --git a/contrib/libxo/tests/core/saved/test_12.H.out b/contrib/libxo/tests/core/saved/test_12.H.out
index 5cbac1797776..2bd9a44d16f1 100644
--- a/contrib/libxo/tests/core/saved/test_12.H.out
+++ b/contrib/libxo/tests/core/saved/test_12.H.out
@@ -1 +1 @@
-<div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data" data-tag="name">thing</div><div class="text"> is </div><div class="data" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data" data-tag="hand">left</div><div class="text"> hand is </div><div class="data" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div> \ No newline at end of file
+<div class="line"><div class="text color-fg-red color-bg-green">Merry XMas!!</div></div><div class="line"><div class="text">One </div><div class="data color-fg-yellow color-bg-blue" data-tag="animal">fish</div><div class="text">, Two </div><div class="data color-fg-green color-bg-yellow" data-tag="animal">fish</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div><div class="line"><div class="text">The </div><div class="data color-fg-red" data-tag="name">thing</div><div class="text"> is </div><div class="data color-fg-green" data-tag="color">green</div><div class="text"> til </div><div class="data" data-tag="time">02:15</div></div><div class="line"><div class="text">My </div><div class="data color-fg-red" data-tag="hand">left</div><div class="text"> hand is </div><div class="data color-fg-blue" data-tag="color">blue</div><div class="text"> til </div><div class="data" data-tag="time">03:45</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_12.HIPx.out b/contrib/libxo/tests/core/saved/test_12.HIPx.out
index 9b5fea1ca4af..dab1975730d7 100644
--- a/contrib/libxo/tests/core/saved/test_12.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_12.HIPx.out
@@ -1,160 +1,169 @@
<div class="line">
+ <div class="text color-fg-red color-bg-green">Merry XMas!!</div>
+</div>
+<div class="line">
+ <div class="text">One </div>
+ <div class="data color-fg-yellow color-bg-blue" data-tag="animal" data-xpath="/top/data/animal">fish</div>
+ <div class="text">, Two </div>
+ <div class="data color-fg-green color-bg-yellow" data-tag="animal" data-xpath="/top/data/animal">fish</div>
+</div>
+<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
+ <div class="data color-fg-red" data-tag="name" data-xpath="/top/data/thing/name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
+ <div class="data color-fg-green" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
+ <div class="data color-fg-red" data-tag="hand" data-xpath="/top/data/thing[name = 'thing']/hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
+ <div class="data color-fg-blue" data-tag="color" data-xpath="/top/data/thing[name = 'thing']/color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time" data-xpath="/top/data/thing[name = 'thing']/time">03:45</div>
</div>
diff --git a/contrib/libxo/tests/core/saved/test_12.HP.out b/contrib/libxo/tests/core/saved/test_12.HP.out
index 1e0e9233fbe5..54e3dfbda882 100644
--- a/contrib/libxo/tests/core/saved/test_12.HP.out
+++ b/contrib/libxo/tests/core/saved/test_12.HP.out
@@ -1,160 +1,169 @@
<div class="line">
+ <div class="text color-fg-red color-bg-green">Merry XMas!!</div>
+</div>
+<div class="line">
+ <div class="text">One </div>
+ <div class="data color-fg-yellow color-bg-blue" data-tag="animal">fish</div>
+ <div class="text">, Two </div>
+ <div class="data color-fg-green color-bg-yellow" data-tag="animal">fish</div>
+</div>
+<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
<div class="line">
<div class="text">The </div>
- <div class="data" data-tag="name">thing</div>
+ <div class="data color-fg-red" data-tag="name">thing</div>
<div class="text"> is </div>
- <div class="data" data-tag="color">green</div>
+ <div class="data color-fg-green" data-tag="color">green</div>
<div class="text"> til </div>
<div class="data" data-tag="time">02:15</div>
</div>
<div class="line">
<div class="text">My </div>
- <div class="data" data-tag="hand">left</div>
+ <div class="data color-fg-red" data-tag="hand">left</div>
<div class="text"> hand is </div>
- <div class="data" data-tag="color">blue</div>
+ <div class="data color-fg-blue" data-tag="color">blue</div>
<div class="text"> til </div>
<div class="data" data-tag="time">03:45</div>
</div>
diff --git a/contrib/libxo/tests/core/saved/test_12.J.out b/contrib/libxo/tests/core/saved/test_12.J.out
index 118bb760eefb..7cfee6d44f33 100644
--- a/contrib/libxo/tests/core/saved/test_12.J.out
+++ b/contrib/libxo/tests/core/saved/test_12.J.out
@@ -1,2 +1,2 @@
-{"top": {"data": {"thing": [{"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}]}}
+{"top": {"data": {"animal":"fish","animal":"fish", "thing": [{"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}, {"name":"thing","color":"green","time":2:15,"hand":"left","color":"blue","time":3:45}]}}
}
diff --git a/contrib/libxo/tests/core/saved/test_12.JP.out b/contrib/libxo/tests/core/saved/test_12.JP.out
index 3e15e0d554cc..f76ede107d25 100644
--- a/contrib/libxo/tests/core/saved/test_12.JP.out
+++ b/contrib/libxo/tests/core/saved/test_12.JP.out
@@ -1,6 +1,8 @@
{
"top": {
"data": {
+ "animal": "fish",
+ "animal": "fish",
"thing": [
{
"name": "thing",
diff --git a/contrib/libxo/tests/core/saved/test_12.T.out b/contrib/libxo/tests/core/saved/test_12.T.out
index 6f777c7a1f44..83a96a119a40 100644
--- a/contrib/libxo/tests/core/saved/test_12.T.out
+++ b/contrib/libxo/tests/core/saved/test_12.T.out
@@ -1,20 +1,22 @@
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
-The thing is green til 02:15
-My left hand is blue til 03:45
+Merry XMas!!
+One fish, Two fish
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
+The thing is green til 02:15
+My left hand is blue til 03:45
diff --git a/contrib/libxo/tests/core/saved/test_12.X.out b/contrib/libxo/tests/core/saved/test_12.X.out
index ed2d8e44e07a..28a30f755e66 100644
--- a/contrib/libxo/tests/core/saved/test_12.X.out
+++ b/contrib/libxo/tests/core/saved/test_12.X.out
@@ -1 +1 @@
-<top><data><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing></data></top> \ No newline at end of file
+<top><data><animal>fish</animal><animal>fish</animal><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing><thing><name>thing</name><color>green</color><time>2:15</time><hand>left</hand><color>blue</color><time>3:45</time></thing></data></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_12.XP.out b/contrib/libxo/tests/core/saved/test_12.XP.out
index 73eec4c675b6..37ef1bde0659 100644
--- a/contrib/libxo/tests/core/saved/test_12.XP.out
+++ b/contrib/libxo/tests/core/saved/test_12.XP.out
@@ -1,5 +1,7 @@
<top>
<data>
+ <animal>fish</animal>
+ <animal>fish</animal>
<thing>
<name>thing</name>
<color>green</color>
diff --git a/contrib/libxo/tests/core/test_12.c b/contrib/libxo/tests/core/test_12.c
index 17d26a6dae54..f6021e749885 100644
--- a/contrib/libxo/tests/core/test_12.c
+++ b/contrib/libxo/tests/core/test_12.c
@@ -22,6 +22,7 @@ main (int argc, char **argv)
int i, count = 10;
int mon = 0;
xo_emit_flags_t flags = XOEF_RETAIN;
+ int opt_color = 1;
argc = xo_parse_args(argc, argv);
if (argc < 0)
@@ -36,6 +37,8 @@ main (int argc, char **argv)
xo_set_style(NULL, XO_STYLE_TEXT);
else if (strcmp(argv[argc], "html") == 0)
xo_set_style(NULL, XO_STYLE_HTML);
+ else if (strcmp(argv[argc], "no-color") == 0)
+ opt_color = 0;
else if (strcmp(argv[argc], "pretty") == 0)
xo_set_flags(NULL, XOF_PRETTY);
else if (strcmp(argv[argc], "xpath") == 0)
@@ -51,11 +54,19 @@ main (int argc, char **argv)
}
xo_set_flags(NULL, XOF_UNITS); /* Always test w/ this */
+ if (opt_color)
+ xo_set_flags(NULL, XOF_COLOR); /* Force color output */
xo_set_file(stdout);
xo_open_container("top");
xo_open_container("data");
+ xo_emit("{C:fg-red,bg-green}Merry XMas!!{C:}\n");
+
+ xo_emit("One {C:fg-yellow,bg-blue}{:animal}{C:}, "
+ "Two {C:fg-green,bg-yellow}{:animal}{C:}\n",
+ "fish", "fish");
+
const char *fmt1 = "The {C:fg-red}{k:name}{C:reset} is "
"{C:/fg-%s}{:color}{C:reset} til {:time/%02d:%02d}\n";
const char *fmt2 = "My {C:fg-red}{:hand}{C:reset} hand is "
diff --git a/contrib/libxo/tests/gettext/Makefile.am b/contrib/libxo/tests/gettext/Makefile.am
index fb70142465d5..2e6596aa876a 100644
--- a/contrib/libxo/tests/gettext/Makefile.am
+++ b/contrib/libxo/tests/gettext/Makefile.am
@@ -72,8 +72,7 @@ valgrind:
#TEST_TRACE = set -x ;
TEST_ONE = \
- LIBXO_OPTIONS=:W$$fmt \
- ${CHECKER} ./$$base.test ${TEST_OPTS} \
+ ${CHECKER} ./$$base.test --libxo:W$$fmt ${TEST_OPTS} \
> out/$$base.$$fmt.out 2> out/$$base.$$fmt.err ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.out out/$$base.$$fmt.out ${S2O} ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.err out/$$base.$$fmt.err ${S2O}
diff --git a/contrib/libxo/tests/xo/Makefile.am b/contrib/libxo/tests/xo/Makefile.am
index 1687f090bbe9..22698f87154f 100644
--- a/contrib/libxo/tests/xo/Makefile.am
+++ b/contrib/libxo/tests/xo/Makefile.am
@@ -51,8 +51,7 @@ all:
XO=../../xo/xo
TEST_ONE = \
- LIBXO_OPTIONS=:W$$fmt \
- ${CHECKER} sh ${srcdir}/$$base.sh ${XO} ${TEST_OPTS} \
+ ${CHECKER} sh ${srcdir}/$$base.sh "${XO} --libxo:W$$fmt" ${TEST_OPTS} \
> out/$$base.$$fmt.out 2> out/$$base.$$fmt.err ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.out out/$$base.$$fmt.out ${S2O} ; \
${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.err out/$$base.$$fmt.err ${S2O}
diff --git a/contrib/libxo/xo/xo.1 b/contrib/libxo/xo/xo.1
index 54a97e7944fc..610296921fc8 100644
--- a/contrib/libxo/xo/xo.1
+++ b/contrib/libxo/xo/xo.1
@@ -33,38 +33,38 @@ or
.Em HTML
using the same commands that emit text output.
.Pp
-.Bl -tag -width "12345678901234567"
-.It Fl "-close <path>"
+.Bl -tag -width indent
+.It Ic --close Ar path
Close tags for the given path
-.It Fl "-depth <num>"
+.It Ic --depth Ar num
Set the depth for pretty printing
-.It Fl "-help"
-Display this help text
-.It Fl "-html OR -H"
+.It Ic --help
+Display help text
+.It Ic -H | Ic --html
Generate HTML output
-.It Fl "-json OR -J"
+.It Ic -J | Ic --json
Generate JSON output
-.It Fl "-leading-xpath <path>"
+.It Ic --leading-xpath Ar path
Add a prefix to generated XPaths (HTML)
-.It Fl "-open <path>"
+.It Ic --open Ar path
Open tags for the given path
-.It Fl "-pretty OR -p"
+.It Ic -p | Ic --pretty
Make 'pretty' output (add indent, newlines)
-.It Fl "-style <style>"
+.It Ic --style Ar style
Generate given style (xml, json, text, html)
-.It Fl "-text OR -T"
+.It Ic -T | Ic --text
Generate text output (the default style)
-.It Fl "-version"
+.It Ic --version
Display version information
-.It Fl "-warn OR -W"
+.It Ic -W | Ic --warn
Display warnings in text on stderr
-.It Fl "-warn-xml"
+.It Ic --warn-xml
Display warnings in xml on stdout
-.It Fl "-wrap <path>"
+.It Ic --wrap Ar path
Wrap output in a set of containers
-.It Fl "-xml OR -X"
+.It Ic -X | Ic --xml
Generate XML output
-.It Fl "-xpath"
+.It Ic --xpath
Add XPath data to HTML output
.El
.Pp
@@ -73,9 +73,32 @@ The
utility accepts a format string suitable for
.Xr xo_emit 3
and a set of zero or more arguments used to supply data for that string.
+.Pp
+In addition,
+.Nm
+accepts any of the
+.Nm libxo
+options listed in
+.Xr xo_options 7 .
+.Sh EXAMPLES
+In this example,
+.Nm
+is used to emit the same data encoded in text and then in XML by
+adding the "-p" (pretty) and "-X" (XML output) flags:
.Bd -literal -offset indent
- xo "The {k:name} weighs {:weight/%d} pounds.\\n" fish 6
-
+ % xo 'The {:product} is {:status}\\n' stereo "in route"
+ The stereo is in route
+ % xo -p -X 'The {:product} is {:status}\\n' stereo "in route"
+ <product>stereo</product>
+ <status>in route</status>
+.Ed
+.Pp
+In this example, the output from a
+.Nm
+command is shown in several styles:
+.Bd -literal -offset indent
+ xo "The {k:name} weighs {:weight/%d} pounds.\\n" fish 6
+.Pp
TEXT:
The fish weighs 6 pounds.
XML:
@@ -101,8 +124,8 @@ specific hierarchy.
The path is a set of hierarchical names separated
by the '/' character.
.Bd -literal -offset indent
- xo --wrap top/a/b/c '{:tag}' value
-
+ xo --wrap top/a/b/c '{:tag}' value
+.Pp
XML:
<top>
<a>
@@ -143,10 +166,11 @@ The
may be used to
prepend data to the XPath values used for HTML output style.
.Bd -literal -offset indent
- #!/bin/sh
- xo --open top/data
- xo --depth 2 '{tag}' value
- xo --close top/data
+ #!/bin/sh
+ xo --open top/data
+ xo --depth 2 '{tag}' value
+ xo --close top/data
+.Pp
XML:
<top>
<data>
@@ -160,14 +184,7 @@ prepend data to the XPath values used for HTML output style.
}
}
.Ed
-.Sh EXAMPLE
-.Bd -literal
- % xo 'The {:product} is {:status}\n' stereo "in route"
- The stereo is in route
- % xo -p -X 'The {:product} is {:status}\n' stereo "in route"
- <product>stereo</product>
- <status>in route</status>
-.Ed
.Sh SEE ALSO
.Xr libxo 3 ,
-.Xr xo_emit 3
+.Xr xo_emit 3 ,
+.Xr xo_options 7
diff --git a/contrib/libxo/xohtml/xohtml.1 b/contrib/libxo/xohtml/xohtml.1
index 723225bb763f..0108c62a550b 100644
--- a/contrib/libxo/xohtml/xohtml.1
+++ b/contrib/libxo/xohtml/xohtml.1
@@ -16,7 +16,6 @@
.Xr xo_emit 3
.Sh SYNOPSIS
.Nm xohtml
-.Op Fl c
.Op Fl "b <base>"
.Op Fl "c" <command>"
.Op Fl "f" <output>
@@ -53,24 +52,21 @@ will add the "--libxo=html" option needed to generate HTML output
from
.Nm libxo "-enabled"
applications. See
-.Xr libxo 3
+.Xr xo_options 7
for details.
.Pp
The following options are available:
.Bl -tag -width indent
-.It Fl "b <base>"
-.It Fl "-base <base>"
+.It Ic -b Ar base | Ic --base Ar base
Supplies a source path for the CSS and Javascript files referenced in
the output of
.Nm xohtml .
-.It Fl "c <command>"
-.It Fl "-command <command>"
+.It Ic -c Ar command | Ic --command Ar command
Use the given command instead of one on the command line.
This command should be quoted if it consists of multiple tokens, and
should contain the "--libxo=html" option or equivalent, since the
command is used directly.
-.It Fl "f <file>"
-.It Fl "-file <file>"
+.It Ic -f Ar file | Ic --file Ar file
Output is saved to the given file, rather than to the standard output
descriptor.
.El
@@ -96,4 +92,5 @@ the output to /tmp/src.html:
.Pp
.Sh SEE ALSO
.Xr libxo 3 ,
-.Xr xo_emit 3
+.Xr xo_emit 3 ,
+.Xr xo_options 7
diff --git a/contrib/libxo/xopo/xopo.1 b/contrib/libxo/xopo/xopo.1
index c1a9ae8c7041..38104217d8ac 100644
--- a/contrib/libxo/xopo/xopo.1
+++ b/contrib/libxo/xopo/xopo.1
@@ -53,18 +53,18 @@ output stream, allowing
.Nm
to operated as a filter.
.Pp
-.Bl -tag -width "12345678901234567"
-.It Fl "-simplify OR -s <text>"
-Generate the simplified version of a single text string.
-.It Fl "-po OR -f <pofile>"
+.Bl -tag -width indent
+.It Ic -f Ar pofile | Ic --po Ar pofile
Use the given po file for input.
-.It Fl "-help"
+.It Ic --help
Display this help text
-.It Fl "-output OR -o <file>"
+.It Ic -o Ar file | Ic --output Ar file
Write output content to the given file
-.It Fl "-warn OR -W"
+.It Ic -s Ar text | Ic --simplify Ar text
+Generate the simplified version of a single text string.
+.It Ic -W | Ic --warn
Generate warnings while parsing the format strings
-.It Fl "-version"
+.It Ic --version
Display version information
.El
.Pp
diff --git a/contrib/libxo/xopo/xopo.c b/contrib/libxo/xopo/xopo.c
index 991b75795ed7..d802e9d863a8 100644
--- a/contrib/libxo/xopo/xopo.c
+++ b/contrib/libxo/xopo/xopo.c
@@ -114,7 +114,6 @@ static struct option long_opts[] = {
int
main (int argc UNUSED, char **argv)
{
- char *fmt = NULL;
char *opt_options = NULL;
char *opt_input = NULL;
char *opt_output = NULL;
@@ -189,10 +188,8 @@ main (int argc UNUSED, char **argv)
xo_errx(1, "invalid options: %s", opt_options);
}
- fmt = *argv++;
-
if (opt_simplify) {
- fmt = xo_simplify_format(NULL, opt_simplify, opt_numbers, NULL);
+ char *fmt = xo_simplify_format(NULL, opt_simplify, opt_numbers, NULL);
if (fmt) {
xo_emit("{:format}\n", fmt);
free(fmt);
diff --git a/contrib/mdocml/LICENSE b/contrib/mdocml/LICENSE
index b9efcbba8db3..f4b61048b911 100644
--- a/contrib/mdocml/LICENSE
+++ b/contrib/mdocml/LICENSE
@@ -1,11 +1,11 @@
-$Id: LICENSE,v 1.14 2017/02/08 12:24:10 schwarze Exp $
+$Id: LICENSE,v 1.15 2017/02/21 00:37:03 schwarze Exp $
With the exceptions noted below, all code and documentation
contained in the mdocml toolkit is protected by the Copyright
of the following developers:
Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
-Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
+Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
Copyright (c) 2009, 2010, 2011, 2012 Joerg Sonnenberger <joerg@netbsd.org>
Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
Copyright (c) 2014 Baptiste Daroussin <bapt@freebsd.org>
diff --git a/contrib/mdocml/Makefile b/contrib/mdocml/Makefile
index c11fe465940f..8ea2b92ff110 100644
--- a/contrib/mdocml/Makefile
+++ b/contrib/mdocml/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.504 2017/02/18 15:29:39 schwarze Exp $
+# $Id: Makefile,v 1.512 2017/05/07 17:31:45 schwarze Exp $
#
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
# Copyright (c) 2011, 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -85,7 +85,6 @@ SRCS = att.c \
lib.c \
main.c \
man.c \
- man_hash.c \
man_html.c \
man_macro.c \
man_term.c \
@@ -95,15 +94,14 @@ SRCS = att.c \
mandoc_ohash.c \
mandocd.c \
mandocdb.c \
- manpage.c \
manpath.c \
mansearch.c \
mdoc.c \
mdoc_argv.c \
- mdoc_hash.c \
mdoc_html.c \
mdoc_macro.c \
mdoc_man.c \
+ mdoc_markdown.c \
mdoc_state.c \
mdoc_term.c \
mdoc_validate.c \
@@ -112,6 +110,9 @@ SRCS = att.c \
preconv.c \
read.c \
roff.c \
+ roff_html.c \
+ roff_term.c \
+ roff_validate.c \
soelim.c \
st.c \
tag.c \
@@ -124,6 +125,7 @@ SRCS = att.c \
term.c \
term_ascii.c \
term_ps.c \
+ term_tab.c \
tree.c
DISTFILES = INSTALL \
@@ -198,7 +200,6 @@ DISTFILES = INSTALL \
$(TESTSRCS)
LIBMAN_OBJS = man.o \
- man_hash.o \
man_macro.o \
man_validate.o
@@ -206,7 +207,6 @@ LIBMDOC_OBJS = att.o \
lib.o \
mdoc.o \
mdoc_argv.o \
- mdoc_hash.o \
mdoc_macro.o \
mdoc_state.o \
mdoc_validate.o \
@@ -214,6 +214,7 @@ LIBMDOC_OBJS = att.o \
LIBROFF_OBJS = eqn.o \
roff.o \
+ roff_validate.o \
tbl.o \
tbl_data.o \
tbl_layout.o \
@@ -250,16 +251,17 @@ MANDOC_HTML_OBJS = eqn_html.o \
html.o \
man_html.o \
mdoc_html.o \
+ roff_html.o \
tbl_html.o
-MANDOC_MAN_OBJS = mdoc_man.o
-
MANDOC_TERM_OBJS = eqn_term.o \
man_term.o \
mdoc_term.o \
+ roff_term.o \
term.o \
term_ascii.o \
term_ps.o \
+ term_tab.o \
tbl_term.o
DBM_OBJS = dbm.o \
@@ -279,6 +281,8 @@ MAIN_OBJS = $(MANDOC_HTML_OBJS) \
$(DBA_OBJS) \
main.o \
manpath.o \
+ mdoc_man.o \
+ mdoc_markdown.o \
out.o \
tag.o \
tree.o
@@ -294,10 +298,6 @@ MANDOCD_OBJS = $(MANDOC_HTML_OBJS) \
out.o \
tag.o
-MANPAGE_OBJS = $(DBM_OBJS) \
- manpage.o \
- manpath.o
-
DEMANDOC_OBJS = demandoc.o
SOELIM_OBJS = soelim.o \
@@ -373,7 +373,6 @@ clean:
rm -f mandoc $(MAIN_OBJS)
rm -f man.cgi $(CGI_OBJS)
rm -f mandocd catman $(MANDOCD_OBJS)
- rm -f manpage $(MANPAGE_OBJS)
rm -f demandoc $(DEMANDOC_OBJS)
rm -f soelim $(SOELIM_OBJS)
rm -f $(WWW_MANS) $(WWW_OBJS)
@@ -388,17 +387,16 @@ base-install: mandoc demandoc soelim
mkdir -p $(DESTDIR)$(MANDIR)/man8
$(INSTALL_PROGRAM) mandoc demandoc $(DESTDIR)$(BINDIR)
$(INSTALL_PROGRAM) soelim $(DESTDIR)$(BINDIR)/$(BINM_SOELIM)
- $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_MAN)
- $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_APROPOS)
- $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_WHATIS)
- $(LN) $(DESTDIR)$(BINDIR)/mandoc \
- $(DESTDIR)$(SBINDIR)/$(BINM_MAKEWHATIS)
+ cd $(DESTDIR)$(BINDIR) && $(LN) mandoc $(BINM_MAN)
+ cd $(DESTDIR)$(BINDIR) && $(LN) mandoc $(BINM_APROPOS)
+ cd $(DESTDIR)$(BINDIR) && $(LN) mandoc $(BINM_WHATIS)
+ cd $(DESTDIR)$(SBINDIR) && \
+ $(LN) ${BIN_FROM_SBIN}/mandoc $(BINM_MAKEWHATIS)
$(INSTALL_MAN) mandoc.1 demandoc.1 $(DESTDIR)$(MANDIR)/man1
$(INSTALL_MAN) soelim.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_SOELIM).1
$(INSTALL_MAN) man.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_MAN).1
$(INSTALL_MAN) apropos.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1
- $(LN) $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1 \
- $(DESTDIR)$(MANDIR)/man1/$(BINM_WHATIS).1
+ cd $(DESTDIR)$(MANDIR)/man1 && $(LN) $(BINM_APROPOS).1 $(BINM_WHATIS).1
$(INSTALL_MAN) man.conf.5 $(DESTDIR)$(MANDIR)/man5/$(MANM_MANCONF).5
$(INSTALL_MAN) mandoc.db.5 $(DESTDIR)$(MANDIR)/man5
$(INSTALL_MAN) man.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_MAN).7
@@ -475,7 +473,7 @@ uninstall:
rm -f $(DESTDIR)$(INCLUDEDIR)/mandoc_aux.h
rm -f $(DESTDIR)$(INCLUDEDIR)/mdoc.h
rm -f $(DESTDIR)$(INCLUDEDIR)/roff.h
- rmdir $(DESTDIR)$(INCLUDEDIR)
+ [ ! -e $(DESTDIR)$(INCLUDEDIR) ] || rmdir $(DESTDIR)$(INCLUDEDIR)
regress: all
cd regress && ./regress.pl
@@ -493,9 +491,6 @@ libmandoc.a: $(COMPAT_OBJS) $(LIBMANDOC_OBJS)
mandoc: $(MAIN_OBJS) libmandoc.a
$(CC) -o $@ $(LDFLAGS) $(MAIN_OBJS) libmandoc.a $(LDADD)
-manpage: $(MANPAGE_OBJS) libmandoc.a
- $(CC) -o $@ $(LDFLAGS) $(MANPAGE_OBJS) libmandoc.a $(LDADD)
-
man.cgi: $(CGI_OBJS) libmandoc.a
$(CC) $(STATIC) -o $@ $(LDFLAGS) $(CGI_OBJS) libmandoc.a $(LDADD)
diff --git a/contrib/mdocml/Makefile.depend b/contrib/mdocml/Makefile.depend
index 56bd4f986483..61d967af8218 100644
--- a/contrib/mdocml/Makefile.depend
+++ b/contrib/mdocml/Makefile.depend
@@ -28,11 +28,10 @@ demandoc.o: demandoc.c config.h roff.h man.h mdoc.h mandoc.h
eqn.o: eqn.c config.h mandoc.h mandoc_aux.h libmandoc.h libroff.h
eqn_html.o: eqn_html.c config.h mandoc.h out.h html.h
eqn_term.o: eqn_term.c config.h mandoc.h out.h term.h
-html.o: html.c config.h mandoc.h mandoc_aux.h out.h html.h manconf.h main.h
+html.o: html.c config.h mandoc_aux.h mandoc.h roff.h out.h html.h manconf.h main.h
lib.o: lib.c config.h roff.h mdoc.h libmdoc.h lib.in
main.o: main.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h man.h tag.h main.h manconf.h mansearch.h
man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
-man_hash.o: man_hash.c config.h mandoc.h roff.h man.h libmandoc.h libman.h
man_html.o: man_html.c config.h mandoc_aux.h roff.h man.h out.h html.h main.h
man_macro.o: man_macro.c config.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
man_term.o: man_term.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h term.h main.h
@@ -42,15 +41,14 @@ mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h
mandoc_ohash.o: mandoc_ohash.c mandoc_aux.h mandoc_ohash.h compat_ohash.h
mandocd.o: mandocd.c config.h mandoc.h roff.h mdoc.h man.h main.h manconf.h
mandocdb.o: mandocdb.c config.h compat_fts.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h mdoc.h man.h manconf.h mansearch.h dba_array.h dba.h
-manpage.o: manpage.c config.h manconf.h mansearch.h
manpath.o: manpath.c config.h mandoc_aux.h manconf.h
mansearch.o: mansearch.c config.h mandoc.h mandoc_aux.h mandoc_ohash.h compat_ohash.h manconf.h mansearch.h dbm.h
mdoc.o: mdoc.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
mdoc_argv.o: mdoc_argv.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
-mdoc_hash.o: mdoc_hash.c config.h mandoc.h roff.h mdoc.h libmandoc.h libmdoc.h
mdoc_html.o: mdoc_html.c config.h mandoc_aux.h roff.h mdoc.h out.h html.h main.h
mdoc_macro.o: mdoc_macro.c config.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
mdoc_man.o: mdoc_man.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h man.h out.h main.h
+mdoc_markdown.o: mdoc_markdown.c mandoc_aux.h mandoc.h roff.h mdoc.h main.h
mdoc_state.o: mdoc_state.c mandoc.h roff.h mdoc.h libmandoc.h libmdoc.h
mdoc_term.o: mdoc_term.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h out.h term.h tag.h main.h
mdoc_validate.o: mdoc_validate.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
@@ -58,7 +56,10 @@ msec.o: msec.c config.h mandoc.h libmandoc.h msec.in
out.o: out.c config.h mandoc_aux.h mandoc.h out.h
preconv.o: preconv.c config.h mandoc.h libmandoc.h
read.o: read.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h man.h libmandoc.h roff_int.h
-roff.o: roff.c config.h mandoc.h mandoc_aux.h roff.h libmandoc.h roff_int.h libroff.h predefs.in
+roff.o: roff.c config.h mandoc.h mandoc_aux.h mandoc_ohash.h compat_ohash.h roff.h libmandoc.h roff_int.h libroff.h predefs.in
+roff_html.o: roff_html.c roff.h out.h html.h
+roff_term.o: roff_term.c roff.h out.h term.h
+roff_validate.o: roff_validate.c mandoc.h roff.h libmandoc.h roff_int.h
soelim.o: soelim.c config.h compat_stringlist.h
st.o: st.c config.h roff.h mdoc.h libmdoc.h st.in
tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h tag.h
@@ -71,4 +72,5 @@ tbl_term.o: tbl_term.c config.h mandoc.h out.h term.h
term.o: term.c config.h mandoc.h mandoc_aux.h out.h term.h main.h
term_ascii.o: term_ascii.c config.h mandoc.h mandoc_aux.h out.h term.h manconf.h main.h
term_ps.o: term_ps.c config.h mandoc_aux.h out.h term.h manconf.h main.h
+term_tab.o: term_tab.c mandoc_aux.h out.h term.h
tree.o: tree.c config.h mandoc.h roff.h mdoc.h man.h main.h
diff --git a/contrib/mdocml/NEWS b/contrib/mdocml/NEWS
index 2cea54fe6820..0a71d6e27cf1 100644
--- a/contrib/mdocml/NEWS
+++ b/contrib/mdocml/NEWS
@@ -1,8 +1,8 @@
-$Id: NEWS,v 1.20 2017/02/16 14:38:12 schwarze Exp $
+$Id: NEWS,v 1.21 2017/02/21 00:37:03 schwarze Exp $
This file lists the most important changes in the mdocml.bsd.lv distribution.
-Changes in version 1.14.1, released on February XXX, 2017
+Changes in version 1.14.1, released on February 21, 2017
--- MAJOR NEW FEATURES ---
* apropos(1): Reimplement complete semantic search functionality
@@ -95,28 +95,32 @@ Changes in version 1.14.1, released on February XXX, 2017
easier to use and reducing the amount of code by a few hundred lines.
--- THANKS TO ---
* Michael Stapelberg (Debian) for designing the new mandocd(8)
- and parts of the new catman(8), and for a number of patches
- and bug reports.
+ and parts of the new catman(8), for release testing, and for a
+ number of patches and bug reports.
* Baptiste Daroussin (FreeBSD) for profiling the new makewhatis(8)
implementation and suggesting an algorithmic improvement which
more than doubled performance, and for a few bug reports.
* Ed Maste (FreeBSD) for an important patch improving reproducibility
of builds in makewhatis(8), and for a few bug reports.
- * Theo Buehler (OpenBSD) for more than ten important bug reports,
+ * Theo Buehler (OpenBSD) for almost twenty important bug reports,
most of them found by systematic afl(1) fuzzing.
* Benny Lofgren, David Dahlberg, and in particular Vadim Zhukov
for crucial help in getting .Bl -tag CSS formatting fixed.
* Svyatoslav Mishyn (Crux Linux) for an initial version of the
- patch to autodetect a suitable locale for -Tutf8 mode.
+ patch to autodetect a suitable locale for -Tutf8 mode
+ and for release testing.
* Jason McIntyre (OpenBSD) for multiple useful discussions
and a number of bug reports.
+ * Sevan Janiyan (NetBSD) for extensive release testing and multiple
+ bug reports.
+ * Thomas Klausner and Christos Zoulas (NetBSD), Yuri Pankov (illumos),
+ and Leah Neukirchen (Void Linux) for release testing and bug reports.
+ * Ulrich Spoerlein (FreeBSD) for release testing.
* Alexander Bluhm, Andrew Fresh, Antoine Jacoutot, Antony Bentley,
Christian Weisgerber, Jonathan Gray, Marc Espie, Martijn van Duren,
Stuart Henderson, Ted Unangst, Theo de Raadt (OpenBSD), Abhinav
- Upadhyay, Christos Zoulas, Kamil Rytarowski, Sevan Janiyan,
- Thomas Klausner (NetBSD), Aaron M. Ucko, Bdale Garbee, Reiner
- Herrmann, Shane Kerr (Debian), Leah Neukirchen (Void Linux),
- Daniel Sabogal (Alpine Linux), Yuri Pankov (illumos),
+ Upadhyay, Kamil Rytarowski (NetBSD), Aaron M. Ucko, Bdale Garbee,
+ Reiner Herrmann, Shane Kerr (Debian), Daniel Sabogal (Alpine Linux),
Carsten Kunze (Heirloom roff), Kristaps Dzonsons (bsd.lv),
Anton Lindqvist, Jan Stary, Jeremy A. Mates, Mark Patruck,
Pavan Maddamsetti, Sean Levy <attila@stalphonsos.com>, and
diff --git a/contrib/mdocml/TODO b/contrib/mdocml/TODO
index 13a57f2b600f..c192cdcfad02 100644
--- a/contrib/mdocml/TODO
+++ b/contrib/mdocml/TODO
@@ -1,6 +1,6 @@
************************************************************************
* Official mandoc TODO.
-* $Id: TODO,v 1.234 2017/02/18 11:53:33 schwarze Exp $
+* $Id: TODO,v 1.237 2017/05/16 19:06:30 schwarze Exp $
************************************************************************
Many issues are annotated for difficulty as follows:
@@ -61,18 +61,6 @@ are mere guesses, and some may be wrong.
reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500
loc *** exist *** algo *** size ** imp *
-- .ta (tab settings)
- #1 most important issue naddy@ Mon, 16 Feb 2015 20:59:17 +0100
- ircbug(1) gnats(1) reported by brad@ Sat, 15 Jan 2011 15:50:51 -0500
- also Tcl_NewStringObj(3) via wiz@ Wed, 5 Mar 2014 22:27:43 +0100
- also posix2time(3) Carsten Kunze Mon, 1 Dec 2014 13:03:10 +0100
- loc ** exist *** algo ** size ** imp ***
-
-- .ti (temporary indent)
- found by naddy@ in xloadimage(1) [devel/libvstr] vstr(3)
- found by bentley@ in nmh(1) Mon, 23 Apr 2012 13:38:28 -0600
- loc ** exist ** algo ** size * imp ** (parser reorg helps a lot)
-
- .while and .shift
found by jca@ in ratpoison(1) Sun, 30 Jun 2013 12:01:09 +0200
loc * exist ** algo ** size ** imp **
@@ -273,12 +261,6 @@ are mere guesses, and some may be wrong.
- kettenis wants base roff, ms, and me Fri, 1 Jan 2010 22:13:15 +0100 (CET)
loc ** exist ** algo ** size *** imp *
-- Vsevolod Stakhov (FreeBSD) needs either a markdown output formatter
- for mandoc -mdoc or a markdown to mdoc converter because they
- have to maintain manuals needed both in markdown and mdoc format.
- Look at the libsoldout (markdown -> whatever)
- loc * exist * algo * size ** imp **
-
--- compatibility checks -----------------------------------------------
- is .Bk implemented correctly in modern groff?
@@ -566,8 +548,6 @@ are mere guesses, and some may be wrong.
Several areas can be cleaned up to make mandoc even faster. These are
-- improve hashing mechanism for macros (quite important: performance)
-
- the PDF file is HUGE: this can be reduced by using relative offsets
************************************************************************
@@ -613,3 +593,10 @@ Several areas can be cleaned up to make mandoc even faster. These are
- use uname(1) to set doc-default-operating-system at install time
tobimensch Mon, 1 Dec 2014 00:25:07 +0100
+
+- apostrophe (39), circumflex (94), grave (96), tilde (126)
+ in manuals: \(aq, \(ha, \`, \(ti
+ Re: [Groff] ASCII Minus Sign in man Pages.
+ bentley@ 26 Apr 2017 10:02:06 -0600
+ Do we need to fix existing manuals?
+ Do we need to fix the definition of the mdoc(7) language?
diff --git a/contrib/mdocml/apropos.1 b/contrib/mdocml/apropos.1
index 8f51030ec0c8..cb101ad5ef52 100644
--- a/contrib/mdocml/apropos.1
+++ b/contrib/mdocml/apropos.1
@@ -1,7 +1,7 @@
-.\" $Id: apropos.1,v 1.40 2017/01/31 19:44:04 schwarze Exp $
+.\" $Id: apropos.1,v 1.45 2017/03/27 18:51:36 schwarze Exp $
.\"
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011, 2012, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 31 2017 $
+.Dd $Mdocdate: March 27 2017 $
.Dt APROPOS 1
.Os
.Sh NAME
@@ -24,7 +24,7 @@
.Nd search manual page databases
.Sh SYNOPSIS
.Nm
-.Op Fl acfhklw
+.Op Fl afk
.Op Fl C Ar file
.Op Fl M Ar path
.Op Fl m Ar path
@@ -89,12 +89,6 @@ Specify an alternative configuration
in
.Xr man.conf 5
format.
-.It Fl c
-In
-.Fl a
-mode, copy the formatted manual pages to the standard output without using
-.Xr more 1
-to paginate them.
.It Fl f
Search for all words in
.Ar expression
@@ -102,37 +96,12 @@ in manual page names only.
The search is case insensitive and matches whole words only.
In this mode, macro keys, comparison operators, and logical operators
are not available.
-This overrides any earlier
-.Fl k
-and
-.Fl l
-options.
-.It Fl h
-Instead of showing the title lines, show the SYNOPSIS sections, just like
-.Xr man 1
-.Fl h
-would.
.It Fl k
Support the full
.Ar expression
syntax.
-This overrides any earlier
-.Fl f
-and
-.Fl l
-options.
It is the default for
.Nm .
-.It Fl l
-An alias for
-.Xr mandoc 1
-.Fl a .
-This overrides any earlier
-.Fl f ,
-.Fl k ,
-and
-.Fl w
-options.
.It Fl M Ar path
Use the colon-separated path instead of the default list of paths
searched for
@@ -162,14 +131,16 @@ By default, pages from all sections are shown.
See
.Xr man 1
for a listing of sections.
-.It Fl w
-Instead of showing title lines, show the pathnames of the matching
-manual pages, just like
-.Xr man 1
-.Fl w
-would.
.El
.Pp
+The options
+.Fl chlw
+are also supported and are documented in
+.Xr man 1 .
+The options
+.Fl fkl
+are mutually exclusive and override each other.
+.Pp
An
.Ar expression
consists of search terms joined by logical operators
@@ -237,7 +208,28 @@ is evaluated case-insensitively.
Has no effect on substring terms.
.El
.Pp
-Results are sorted by manual sections and names, with output formatted as
+Results are sorted according to the following criteria:
+.Bl -enum
+.It
+The manpath directory tree the page is found in, according to the
+order specified with
+.Fl M ,
+.Fl m ,
+the
+.Ev MANPATH
+environment variable, the
+.Xr man.conf 5
+configuration file, or the default documented in
+.Xr man.conf 5 .
+.It
+The section number in ascending numerical order.
+.It
+The page name in ascending
+.Xr ascii 7
+alphabetical order, case-insensitive.
+.El
+.Pp
+Each output line is formatted as
.Pp
.D1 name[, name...](sec) \- description
.Pp
@@ -341,25 +333,25 @@ Text production:
.It Ev MANPAGER
Any non-empty value of the environment variable
.Ev MANPAGER
-will be used instead of the standard pagination program,
-.Xr more 1 .
+is used instead of the standard pagination program,
+.Xr more 1 ;
+see
+.Xr man 1
+for details.
+Only used if
+.Fl a
+or
+.Fl l
+is specified.
.It Ev MANPATH
-The standard search path used by
+A colon-separated list of directories to search for manual pages; see
.Xr man 1
-may be changed by specifying a path in the
-.Ev MANPATH
-environment variable.
-Invalid paths, or paths without manual databases, are ignored.
+for details.
Overridden by
-.Fl M .
-If
-.Ev MANPATH
-begins with a colon, it is appended to the default list;
-if it ends with a colon, it is prepended to the default list;
-or if it contains two adjacent colons,
-the standard search path is inserted between the colons.
-If none of these conditions are met, it overrides the
-standard search path.
+.Fl M ,
+ignored if
+.Fl l
+is specified.
.It Ev PAGER
Specifies the pagination program to use when
.Ev MANPAGER
@@ -367,7 +359,12 @@ is not defined.
If neither PAGER nor MANPAGER is defined,
.Xr more 1
.Fl s
-will be used.
+is used.
+Only used if
+.Fl a
+or
+.Fl l
+is specified.
.El
.Sh FILES
.Bl -tag -width "/etc/man.conf" -compact
diff --git a/contrib/mdocml/catman.8 b/contrib/mdocml/catman.8
index 1de1096a3e4a..903fa1fa82c9 100644
--- a/contrib/mdocml/catman.8
+++ b/contrib/mdocml/catman.8
@@ -1,4 +1,4 @@
-.\" $Id: catman.8,v 1.7 2017/02/06 19:04:21 schwarze Exp $
+.\" $Id: catman.8,v 1.8 2017/03/18 19:56:01 schwarze Exp $
.\"
.\" Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: February 6 2017 $
+.Dd $Mdocdate: March 18 2017 $
.Dt CATMAN 8
.Os
.Sh NAME
@@ -49,7 +49,7 @@ Override the default operating system
.Ar name
for the
.Xr mdoc 7
-.Ic Os
+.Ic \&Os
and for the
.Xr man 7
.Ic TH
diff --git a/contrib/mdocml/cgi.c b/contrib/mdocml/cgi.c
index 3303d00100b9..eeccd4ea8124 100644
--- a/contrib/mdocml/cgi.c
+++ b/contrib/mdocml/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.147 2017/02/08 13:34:27 schwarze Exp $ */
+/* $Id: cgi.c,v 1.154 2017/04/19 01:00:03 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>
@@ -76,11 +76,12 @@ static void pg_error_badrequest(const char *);
static void pg_error_internal(void);
static void pg_index(const struct req *);
static void pg_noresult(const struct req *, const char *);
+static void pg_redirect(const struct req *, const char *);
static void pg_search(const struct req *);
static void pg_searchres(const struct req *,
struct manpage *, size_t);
static void pg_show(struct req *, const char *);
-static void resp_begin_html(int, const char *);
+static void resp_begin_html(int, const char *, const char *);
static void resp_begin_http(int, const char *);
static void resp_catman(const struct req *, const char *);
static void resp_copy(const char *);
@@ -345,8 +346,9 @@ resp_copy(const char *filename)
}
static void
-resp_begin_html(int code, const char *msg)
+resp_begin_html(int code, const char *msg, const char *file)
{
+ char *cp;
resp_begin_http(code, msg);
@@ -356,10 +358,20 @@ resp_begin_html(int code, const char *msg)
" <meta charset=\"UTF-8\"/>\n"
" <link rel=\"stylesheet\" href=\"%s/mandoc.css\""
" type=\"text/css\" media=\"all\">\n"
- " <title>%s</title>\n"
+ " <title>",
+ CSS_DIR);
+ if (file != NULL) {
+ if ((cp = strrchr(file, '/')) != NULL)
+ file = cp + 1;
+ if ((cp = strrchr(file, '.')) != NULL) {
+ printf("%.*s(%s) - ", (int)(cp - file), file, cp + 1);
+ } else
+ printf("%s - ", file);
+ }
+ printf("%s</title>\n"
"</head>\n"
"<body>\n",
- CSS_DIR, CUSTOMIZE_TITLE);
+ CUSTOMIZE_TITLE);
resp_copy(MAN_DIR "/header.html");
}
@@ -492,7 +504,7 @@ static void
pg_index(const struct req *req)
{
- resp_begin_html(200, NULL);
+ resp_begin_html(200, NULL, NULL);
resp_searchform(req, FOCUS_QUERY);
printf("<p>\n"
"This web interface is documented in the\n"
@@ -509,7 +521,7 @@ pg_index(const struct req *req)
static void
pg_noresult(const struct req *req, const char *msg)
{
- resp_begin_html(200, NULL);
+ resp_begin_html(200, NULL, NULL);
resp_searchform(req, FOCUS_QUERY);
puts("<p>");
puts(msg);
@@ -521,7 +533,7 @@ static void
pg_error_badrequest(const char *msg)
{
- resp_begin_html(400, "Bad Request");
+ resp_begin_html(400, "Bad Request", NULL);
puts("<h1>Bad Request</h1>\n"
"<p>\n");
puts(msg);
@@ -534,12 +546,29 @@ pg_error_badrequest(const char *msg)
static void
pg_error_internal(void)
{
- resp_begin_html(500, "Internal Server Error");
+ resp_begin_html(500, "Internal Server Error", NULL);
puts("<p>Internal Server Error</p>");
resp_end_html();
}
static void
+pg_redirect(const struct req *req, const char *name)
+{
+ printf("Status: 303 See Other\r\n"
+ "Location: /");
+ if (*scriptname != '\0')
+ printf("%s/", scriptname);
+ if (strcmp(req->q.manpath, req->p[0]))
+ printf("%s/", req->q.manpath);
+ if (req->q.arch != NULL)
+ printf("%s/", req->q.arch);
+ printf("%s", name);
+ if (req->q.sec != NULL)
+ printf(".%s", req->q.sec);
+ printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n");
+}
+
+static void
pg_searchres(const struct req *req, struct manpage *r, size_t sz)
{
char *arch, *archend;
@@ -562,47 +591,25 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
* If we have just one result, then jump there now
* without any delay.
*/
- printf("Status: 303 See Other\r\n");
- printf("Location: http://%s/%s%s%s/%s",
- HTTP_HOST, scriptname,
- *scriptname == '\0' ? "" : "/",
- req->q.manpath, r[0].file);
- printf("\r\n"
- "Content-Type: text/html; charset=utf-8\r\n"
- "\r\n");
+ printf("Status: 303 See Other\r\n"
+ "Location: /");
+ if (*scriptname != '\0')
+ printf("%s/", scriptname);
+ if (strcmp(req->q.manpath, req->p[0]))
+ printf("%s/", req->q.manpath);
+ printf("%s\r\n"
+ "Content-Type: text/html; charset=utf-8\r\n\r\n",
+ r[0].file);
return;
}
- resp_begin_html(200, NULL);
- resp_searchform(req,
- req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY);
-
- if (sz > 1) {
- puts("<table class=\"results\">");
- for (i = 0; i < sz; i++) {
- printf(" <tr>\n"
- " <td>"
- "<a class=\"Xr\" href=\"/%s%s%s/%s\">",
- scriptname, *scriptname == '\0' ? "" : "/",
- req->q.manpath, r[i].file);
- html_print(r[i].names);
- printf("</a></td>\n"
- " <td><span class=\"Nd\">");
- html_print(r[i].output);
- puts("</span></td>\n"
- " </tr>");
- }
- puts("</table>");
- }
-
/*
* In man(1) mode, show one of the pages
* even if more than one is found.
*/
+ iuse = 0;
if (req->q.equal || sz == 1) {
- puts("<hr>");
- iuse = 0;
priouse = 20;
archpriouse = 3;
for (i = 0; i < sz; i++) {
@@ -635,6 +642,36 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
priouse = prio;
iuse = i;
}
+ resp_begin_html(200, NULL, r[iuse].file);
+ } else
+ resp_begin_html(200, NULL, NULL);
+
+ resp_searchform(req,
+ req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY);
+
+ if (sz > 1) {
+ puts("<table class=\"results\">");
+ for (i = 0; i < sz; i++) {
+ printf(" <tr>\n"
+ " <td>"
+ "<a class=\"Xr\" href=\"/");
+ if (*scriptname != '\0')
+ printf("%s/", scriptname);
+ if (strcmp(req->q.manpath, req->p[0]))
+ printf("%s/", req->q.manpath);
+ printf("%s\">", r[i].file);
+ html_print(r[i].names);
+ printf("</a></td>\n"
+ " <td><span class=\"Nd\">");
+ html_print(r[i].output);
+ puts("</span></td>\n"
+ " </tr>");
+ }
+ puts("</table>");
+ }
+
+ if (req->q.equal || sz == 1) {
+ puts("<hr>");
resp_show(req, r[iuse].file);
}
@@ -803,7 +840,8 @@ resp_format(const struct req *req, const char *file)
conf.fragment = 1;
conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
usepath = strcmp(req->q.manpath, req->p[0]);
- mandoc_asprintf(&conf.man, "/%s%s%%N.%%S",
+ mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",
+ scriptname, *scriptname == '\0' ? "" : "/",
usepath ? req->q.manpath : "", usepath ? "/" : "");
mparse_result(mp, &man, NULL);
@@ -886,7 +924,7 @@ pg_show(struct req *req, const char *fullpath)
return;
}
- resp_begin_html(200, NULL);
+ resp_begin_html(200, NULL, file);
resp_searchform(req, FOCUS_NONE);
resp_show(req, file);
resp_end_html();
@@ -956,9 +994,13 @@ pg_search(const struct req *req)
}
}
- if (0 == mansearch(&search, &paths, argc, argv, &res, &ressz))
+ res = NULL;
+ ressz = 0;
+ if (req->isquery && req->q.equal && argc == 1)
+ pg_redirect(req, argv[0]);
+ else if (mansearch(&search, &paths, argc, argv, &res, &ressz) == 0)
pg_noresult(req, "You entered an invalid query.");
- else if (0 == ressz)
+ else if (ressz == 0)
pg_noresult(req, "No results found.");
else
pg_searchres(req, res, ressz);
@@ -978,6 +1020,22 @@ main(void)
const char *querystring;
int i;
+#if HAVE_PLEDGE
+ /*
+ * The "rpath" pledge could be revoked after mparse_readfd()
+ * if the file desciptor to "/footer.html" would be opened
+ * up front, but it's probably not worth the complication
+ * of the code it would cause: it would require scattering
+ * pledge() calls in multiple low-level resp_*() functions.
+ */
+
+ if (pledge("stdio rpath", NULL) == -1) {
+ warn("pledge");
+ pg_error_internal();
+ return EXIT_FAILURE;
+ }
+#endif
+
/* Poor man's ReDoS mitigation. */
itimer.it_value.tv_sec = 2;
@@ -1015,7 +1073,8 @@ main(void)
if (*path != '\0') {
parse_path_info(&req, path);
- if (req.q.manpath == NULL || access(path, F_OK) == -1)
+ if (req.q.manpath == NULL || req.q.sec == NULL ||
+ *req.q.query == '\0' || access(path, F_OK) == -1)
path = "";
} else if ((querystring = getenv("QUERY_STRING")) != NULL)
parse_query_string(&req, querystring);
diff --git a/contrib/mdocml/cgi.h.example b/contrib/mdocml/cgi.h.example
index 7e5f3917b526..2ccbe25b2d87 100644
--- a/contrib/mdocml/cgi.h.example
+++ b/contrib/mdocml/cgi.h.example
@@ -1,6 +1,5 @@
/* Example compile-time configuration file for man.cgi(8). */
-#define HTTP_HOST "mdocml.bsd.lv"
#define SCRIPT_NAME "cgi-bin/man.cgi"
#define MAN_DIR "/man"
#define CSS_DIR ""
diff --git a/contrib/mdocml/chars.c b/contrib/mdocml/chars.c
index f1f5d5d78ca8..4d37c3254438 100644
--- a/contrib/mdocml/chars.c
+++ b/contrib/mdocml/chars.c
@@ -1,7 +1,7 @@
-/* $Id: chars.c,v 1.69 2017/02/17 18:28:06 schwarze Exp $ */
+/* $Id: chars.c,v 1.70 2017/06/02 12:43:52 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -81,6 +81,10 @@ static struct ln lines[] = {
{ "sh", "#", 0x0023 },
{ "CR", "_|", 0x21b5 },
{ "OK", "\\/", 0x2713 },
+ { "CL", "<club>", 0x2663 },
+ { "SP", "<spade>", 0x2660 },
+ { "HE", "<heart>", 0x2665 },
+ { "DI", "<diamond>", 0x2666 },
/* Legal symbols. */
{ "co", "(C)", 0x00a9 },
@@ -161,6 +165,7 @@ static struct ln lines[] = {
{ "uA", "=\b^", 0x21d1 },
{ "dA", "=\bv", 0x21d3 },
{ "vA", "^=v", 0x21d5 },
+ { "an", "-", 0x23af },
/* Logic. */
{ "AN", "^", 0x2227 },
@@ -234,11 +239,20 @@ static struct ln lines[] = {
{ "Ah", "N", 0x2135 },
{ "Im", "I", 0x2111 },
{ "Re", "R", 0x211c },
+ { "wp", "P", 0x2118 },
{ "pd", "a", 0x2202 },
{ "-h", "/h", 0x210f },
+ { "hbar", "/h", 0x210f },
{ "12", "1/2", 0x00bd },
{ "14", "1/4", 0x00bc },
{ "34", "3/4", 0x00be },
+ { "18", "1/8", 0x215B },
+ { "38", "3/8", 0x215C },
+ { "58", "5/8", 0x215D },
+ { "78", "7/8", 0x215E },
+ { "S1", "1", 0x00B9 },
+ { "S2", "2", 0x00B2 },
+ { "S3", "3", 0x00B3 },
/* Ligatures. */
{ "ff", "ff", 0xfb00 },
@@ -354,6 +368,8 @@ static struct ln lines[] = {
{ "fm", "\'", 0x2032 },
{ "sd", "''", 0x2033 },
{ "mc", ",\bu", 0x00b5 },
+ { "Of", "_\ba", 0x00aa },
+ { "Om", "_\bo", 0x00ba },
/* Greek characters. */
{ "*A", "A", 0x0391 },
diff --git a/contrib/mdocml/configure b/contrib/mdocml/configure
index 588cab12bac2..c4e374a9f948 100755
--- a/contrib/mdocml/configure
+++ b/contrib/mdocml/configure
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $Id: configure,v 1.61 2017/02/18 12:24:24 schwarze Exp $
+# $Id: configure,v 1.62 2017/03/04 16:36:29 schwarze Exp $
#
# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
#
@@ -91,6 +91,7 @@ HAVE_WCHAR=
PREFIX="/usr/local"
BINDIR=
SBINDIR=
+BIN_FROM_SBIN=
INCLUDEDIR=
LIBDIR=
MANDIR=
@@ -458,14 +459,15 @@ echo "config.h: written" 1>&3
exec > Makefile.local
-[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin"
-[ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin"
-[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc"
-[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc"
-[ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man"
+[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin"
+[ -z "${SBINDIR}" ] && SBINDIR="${PREFIX}/sbin"
+[ -z "${BIN_FROM_SBIN}" ] && BIN_FROM_SBIN="../bin"
+[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include/mandoc"
+[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib/mandoc"
+[ -z "${MANDIR}" ] && MANDIR="${PREFIX}/man"
-[ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs"
-[ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin"
+[ -z "${HTDOCDIR}" ] && HTDOCDIR="${WWWPREFIX}/htdocs"
+[ -z "${CGIBINDIR}" ] && CGIBINDIR="${WWWPREFIX}/cgi-bin"
[ -z "${INSTALL_PROGRAM}" ] && INSTALL_PROGRAM="${INSTALL} -m 0555"
[ -z "${INSTALL_LIB}" ] && INSTALL_LIB="${INSTALL} -m 0444"
@@ -493,6 +495,7 @@ STATIC = ${STATIC}
PREFIX = ${PREFIX}
BINDIR = ${BINDIR}
SBINDIR = ${SBINDIR}
+BIN_FROM_SBIN = ${BIN_FROM_SBIN}
INCLUDEDIR = ${INCLUDEDIR}
LIBDIR = ${LIBDIR}
MANDIR = ${MANDIR}
diff --git a/contrib/mdocml/configure.local.example b/contrib/mdocml/configure.local.example
index 365c700cafa2..41385a95582d 100644
--- a/contrib/mdocml/configure.local.example
+++ b/contrib/mdocml/configure.local.example
@@ -1,4 +1,4 @@
-# $Id: configure.local.example,v 1.29 2017/02/18 12:24:24 schwarze Exp $
+# $Id: configure.local.example,v 1.30 2017/03/04 16:36:29 schwarze Exp $
#
# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
#
@@ -85,6 +85,13 @@ BINDIR="${PREFIX}/bin"
SBINDIR="${PREFIX}/sbin"
MANDIR="${PREFIX}/man"
+# If BINDIR and SBINDIR are not subdirectories of the same parent
+# directory or if the basename(1) of BINDIR differs from "bin",
+# the relative path from SBINDIR to BINDIR is also needed.
+# The default is:
+
+BIN_FROM_SBIN="../bin"
+
# Some distributions may want to avoid naming conflicts
# with the configuration files of other man(1) implementations.
# This changes the name of the installed section 5 manual page as well.
diff --git a/contrib/mdocml/eqn.c b/contrib/mdocml/eqn.c
index e9fbdec086fe..8d99f3fb1517 100644
--- a/contrib/mdocml/eqn.c
+++ b/contrib/mdocml/eqn.c
@@ -1,4 +1,4 @@
-/* $Id: eqn.c,v 1.61 2016/01/08 00:50:45 schwarze Exp $ */
+/* $Id: eqn.c,v 1.62 2017/03/11 15:43:04 schwarze Exp $ */
/*
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -366,15 +366,19 @@ eqn_def_find(struct eqn_node *ep, const char *key, size_t sz)
static const char *
eqn_next(struct eqn_node *ep, char quote, size_t *sz, int repl)
{
+ static size_t last_len;
+ static int lim;
+
char *start, *next;
- int q, diff, lim;
+ int q, diff;
size_t ssz, dummy;
struct eqn_def *def;
if (NULL == sz)
sz = &dummy;
- lim = 0;
+ if (ep->cur >= last_len)
+ lim = 0;
ep->rew = ep->cur;
again:
/* Prevent self-definitions. */
@@ -448,6 +452,7 @@ again:
memmove(start + *sz + diff, start + *sz,
(strlen(start) - *sz) + 1);
memcpy(start, def->val, def->valsz);
+ last_len = start - ep->data + def->valsz;
lim++;
goto again;
}
diff --git a/contrib/mdocml/gmdiff b/contrib/mdocml/gmdiff
index 278ce7491f87..2e078548784d 100644
--- a/contrib/mdocml/gmdiff
+++ b/contrib/mdocml/gmdiff
@@ -29,21 +29,24 @@ if [ "X$1" = "X-h" ]; then
EQN="neqn"
ROFF="nroff"
MOPT="-Omdoc $MOPT"
+elif [ "X$1" = "X-u" ]; then
+ shift
+ ROFF="groff -ket -ww -Tutf8 -P -c"
+ MOPT="-Werror -Tutf8 $MOPT"
else
- EQN="eqn -Tascii"
- ROFF="groff -ww -Tascii -P -c"
+ ROFF="groff -et -ww -Tascii -P -c"
+ MOPT="-Werror -Tascii $MOPT"
fi
-MOPT="-Werror -Tascii $MOPT"
while [ -n "$1" ]; do
file=$1
shift
echo " ========== $file ========== "
- tbl $file | $EQN | $ROFF -mandoc 2> /tmp/roff.err > /tmp/roff.out
+ $ROFF -mandoc $file 2> /tmp/roff.err > /tmp/roff.out
${MANDOC:=mandoc} -Ios='OpenBSD ports' $MOPT $file \
2> /tmp/mandoc.err > /tmp/mandoc.out
for i in roff mandoc; do
- [[ -s /tmp/$i.err ]] && echo "$i errors:" && cat /tmp/$i.err
+ [ -s /tmp/$i.err ] && echo "$i errors:" && cat /tmp/$i.err
done
diff -au /tmp/roff.out /tmp/mandoc.out 2>&1
done
diff --git a/contrib/mdocml/html.c b/contrib/mdocml/html.c
index 40f2cc076bf9..4bb3ca56bd73 100644
--- a/contrib/mdocml/html.c
+++ b/contrib/mdocml/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.207 2017/02/05 20:22:04 schwarze Exp $ */
+/* $Id: html.c,v 1.213 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -28,8 +28,9 @@
#include <string.h>
#include <unistd.h>
-#include "mandoc.h"
#include "mandoc_aux.h"
+#include "mandoc.h"
+#include "roff.h"
#include "out.h"
#include "html.h"
#include "manconf.h"
@@ -236,6 +237,28 @@ print_metaf(struct html *h, enum mandoc_esc deco)
}
}
+char *
+html_make_id(const struct roff_node *n)
+{
+ const struct roff_node *nch;
+ char *buf, *cp;
+
+ for (nch = n->child; nch != NULL; nch = nch->next)
+ if (nch->type != ROFFT_TEXT)
+ return NULL;
+
+ buf = NULL;
+ deroff(&buf, n);
+
+ /* http://www.w3.org/TR/html5/dom.html#the-id-attribute */
+
+ for (cp = buf; *cp != '\0'; cp++)
+ if (*cp == ' ')
+ *cp = '_';
+
+ return buf;
+}
+
int
html_strlen(const char *cp)
{
@@ -534,18 +557,25 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
print_byte(h, '=');
print_byte(h, '"');
switch (*fmt) {
- case 'M':
- print_href(h, arg1, arg2, 1);
- fmt++;
- break;
case 'I':
print_href(h, arg1, NULL, 0);
fmt++;
break;
+ case 'M':
+ print_href(h, arg1, arg2, 1);
+ fmt++;
+ break;
case 'R':
print_byte(h, '#');
+ print_encode(h, arg1, NULL, 1);
+ fmt++;
+ break;
+ case 'T':
+ print_encode(h, arg1, NULL, 1);
+ print_word(h, "\" title=\"");
+ print_encode(h, arg1, NULL, 1);
fmt++;
- /* FALLTHROUGH */
+ break;
default:
print_encode(h, arg1, NULL, 1);
break;
@@ -579,13 +609,21 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
SCALE_VS_INIT(su, i);
break;
case 'w':
- case 'W':
if ((arg2 = va_arg(ap, char *)) == NULL)
break;
su = &mysu;
a2width(arg2, su);
- if (fmt[-1] == 'W')
+ if (*fmt == '+') {
+ /* Increase to make even bold text fit. */
+ su->scale *= 1.2;
+ /* Add padding. */
+ su->scale += 3.0;
+ fmt++;
+ }
+ if (*fmt == '-') {
su->scale *= -1.0;
+ fmt++;
+ }
break;
default:
abort();
@@ -912,7 +950,10 @@ print_word(struct html *h, const char *cp)
static void
a2width(const char *p, struct roffsu *su)
{
- if (a2roffsu(p, su, SCALE_MAX) < 2) {
+ const char *end;
+
+ end = a2roffsu(p, su, SCALE_MAX);
+ if (end == NULL || *end != '\0') {
su->unit = SCALE_EN;
su->scale = html_strlen(p);
} else if (su->scale < 0.0)
diff --git a/contrib/mdocml/html.h b/contrib/mdocml/html.h
index 5be2f82db64f..7cb6f60944f0 100644
--- a/contrib/mdocml/html.h
+++ b/contrib/mdocml/html.h
@@ -1,4 +1,4 @@
-/* $Id: html.h,v 1.83 2017/02/05 20:22:04 schwarze Exp $ */
+/* $Id: html.h,v 1.85 2017/05/04 22:16:09 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -112,9 +112,12 @@ struct html {
};
+struct roff_node;
struct tbl_span;
struct eqn;
+void roff_html_pre(struct html *, const struct roff_node *);
+
void print_gen_decls(struct html *);
void print_gen_head(struct html *);
struct tag *print_otag(struct html *, enum htmltag, const char *, ...);
@@ -127,4 +130,5 @@ void print_eqn(struct html *, const struct eqn *);
void print_paragraph(struct html *);
void print_endline(struct html *);
+char *html_make_id(const struct roff_node *);
int html_strlen(const char *);
diff --git a/contrib/mdocml/libman.h b/contrib/mdocml/libman.h
index 65849602c27c..312093dd018c 100644
--- a/contrib/mdocml/libman.h
+++ b/contrib/mdocml/libman.h
@@ -1,4 +1,4 @@
-/* $Id: libman.h,v 1.79 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: libman.h,v 1.81 2017/04/29 12:45:41 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -17,7 +17,7 @@
*/
#define MACRO_PROT_ARGS struct roff_man *man, \
- int tok, \
+ enum roff_tok tok, \
int line, \
int ppos, \
int *pos, \
@@ -35,7 +35,6 @@ struct man_macro {
extern const struct man_macro *const man_macros;
-int man_hash_find(const char *);
void man_node_validate(struct roff_man *);
void man_state(struct roff_man *, struct roff_node *);
void man_unscope(struct roff_man *, const struct roff_node *);
diff --git a/contrib/mdocml/libmandoc.h b/contrib/mdocml/libmandoc.h
index 04b3a44565f3..abc616a59e87 100644
--- a/contrib/mdocml/libmandoc.h
+++ b/contrib/mdocml/libmandoc.h
@@ -1,4 +1,4 @@
-/* $Id: libmandoc.h,v 1.66 2017/02/18 13:43:52 schwarze Exp $ */
+/* $Id: libmandoc.h,v 1.67 2017/04/29 12:45:41 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -50,11 +50,9 @@ int mandoc_eos(const char *, size_t);
int mandoc_strntoi(const char *, size_t, int);
const char *mandoc_a2msec(const char*);
-void mdoc_hash_init(void);
int mdoc_parseln(struct roff_man *, int, char *, int);
void mdoc_endparse(struct roff_man *);
-void man_hash_init(void);
int man_parseln(struct roff_man *, int, char *, int);
void man_endparse(struct roff_man *);
diff --git a/contrib/mdocml/libmdoc.h b/contrib/mdocml/libmdoc.h
index ac1521410b55..57dff61b4aa3 100644
--- a/contrib/mdocml/libmdoc.h
+++ b/contrib/mdocml/libmdoc.h
@@ -1,7 +1,7 @@
-/* $Id: libmdoc.h,v 1.109 2017/02/16 03:00:23 schwarze Exp $ */
+/* $Id: libmdoc.h,v 1.112 2017/05/30 16:22:03 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
*/
#define MACRO_PROT_ARGS struct roff_man *mdoc, \
- int tok, \
+ enum roff_tok tok, \
int line, \
int ppos, \
int *pos, \
@@ -39,7 +39,6 @@ enum margserr {
ARGS_EOLN, /* end-of-line */
ARGS_WORD, /* normal word */
ARGS_PUNCT, /* series of punctuation */
- ARGS_QWORD, /* quoted word */
ARGS_PHRASE /* Bl -column phrase */
};
@@ -65,24 +64,24 @@ extern const struct mdoc_macro *const mdoc_macros;
void mdoc_macro(MACRO_PROT_ARGS);
void mdoc_elem_alloc(struct roff_man *, int, int,
- int, struct mdoc_arg *);
+ enum roff_tok, struct mdoc_arg *);
struct roff_node *mdoc_block_alloc(struct roff_man *, int, int,
- int, struct mdoc_arg *);
-void mdoc_tail_alloc(struct roff_man *, int, int, int);
-struct roff_node *mdoc_endbody_alloc(struct roff_man *, int, int, int,
- struct roff_node *);
+ enum roff_tok, struct mdoc_arg *);
+void mdoc_tail_alloc(struct roff_man *, int, int,
+ enum roff_tok);
+struct roff_node *mdoc_endbody_alloc(struct roff_man *, int, int,
+ enum roff_tok, struct roff_node *);
void mdoc_node_relink(struct roff_man *, struct roff_node *);
void mdoc_node_validate(struct roff_man *);
void mdoc_state(struct roff_man *, struct roff_node *);
void mdoc_state_reset(struct roff_man *);
-int mdoc_hash_find(const char *);
const char *mdoc_a2arch(const char *);
const char *mdoc_a2att(const char *);
const char *mdoc_a2lib(const char *);
enum roff_sec mdoc_a2sec(const char *);
const char *mdoc_a2st(const char *);
-void mdoc_argv(struct roff_man *, int, int,
+void mdoc_argv(struct roff_man *, int, enum roff_tok,
struct mdoc_arg **, int *, char *);
enum margserr mdoc_args(struct roff_man *, int,
- int *, char *, int, char **);
+ int *, char *, enum roff_tok, char **);
enum mdelim mdoc_isdelim(const char *);
diff --git a/contrib/mdocml/main.c b/contrib/mdocml/main.c
index 02abaaf79100..6a99ba2f5d1a 100644
--- a/contrib/mdocml/main.c
+++ b/contrib/mdocml/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.283 2017/02/17 14:31:52 schwarze Exp $ */
+/* $Id: main.c,v 1.292 2017/06/03 12:17:25 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -56,7 +56,6 @@ enum outmode {
OUTMODE_FLN,
OUTMODE_LST,
OUTMODE_ALL,
- OUTMODE_INT,
OUTMODE_ONE
};
@@ -67,6 +66,7 @@ enum outt {
OUTT_TREE, /* -Ttree */
OUTT_MAN, /* -Tman */
OUTT_HTML, /* -Thtml */
+ OUTT_MARKDOWN, /* -Tmarkdown */
OUTT_LINT, /* -Tlint */
OUTT_PS, /* -Tps */
OUTT_PDF /* -Tpdf */
@@ -92,7 +92,7 @@ static void fs_search(const struct mansearch *,
const struct manpaths *, int, char**,
struct manpage **, size_t *);
static int koptions(int *, char *);
-static int moptions(int *, char *);
+static void moptions(int *, char *);
static void mmsg(enum mandocerr, enum mandoclevel,
const char *, int, int, const char *);
static void outdata_alloc(struct curparse *);
@@ -149,7 +149,7 @@ main(int argc, char *argv[])
return mandocdb(argc, argv);
#if HAVE_PLEDGE
- if (pledge("stdio rpath tmppath tty proc exec flock", NULL) == -1)
+ if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1)
err((int)MANDOCLEVEL_SYSERR, "pledge");
#endif
@@ -193,8 +193,12 @@ main(int argc, char *argv[])
show_usage = 0;
outmode = OUTMODE_DEF;
- while (-1 != (c = getopt(argc, argv,
- "aC:cfhI:iK:klM:m:O:S:s:T:VW:w"))) {
+ while ((c = getopt(argc, argv,
+ "aC:cfhI:iK:klM:m:O:S:s:T:VW:w")) != -1) {
+ if (c == 'i' && search.argmode == ARG_EXPR) {
+ optind--;
+ break;
+ }
switch (c) {
case 'a':
outmode = OUTMODE_ALL;
@@ -224,9 +228,6 @@ main(int argc, char *argv[])
}
defos = mandoc_strdup(optarg + 3);
break;
- case 'i':
- outmode = OUTMODE_INT;
- break;
case 'K':
if ( ! koptions(&options, optarg))
return (int)MANDOCLEVEL_BADARG;
@@ -312,7 +313,7 @@ main(int argc, char *argv[])
#if HAVE_PLEDGE
if (!use_pager)
- if (pledge("stdio rpath flock", NULL) == -1)
+ if (pledge("stdio rpath", NULL) == -1)
err((int)MANDOCLEVEL_SYSERR, "pledge");
#endif
@@ -441,8 +442,8 @@ main(int argc, char *argv[])
}
#endif
- if (search.argmode == ARG_FILE && ! moptions(&options, auxpaths))
- return (int)MANDOCLEVEL_BADARG;
+ if (search.argmode == ARG_FILE)
+ moptions(&options, auxpaths);
mchars_alloc();
curp.mp = mparse_alloc(options, curp.wlevel, mmsg, defos);
@@ -591,24 +592,22 @@ usage(enum argmode argmode)
switch (argmode) {
case ARG_FILE:
- fputs("usage: mandoc [-acfhkl] [-I os=name] "
- "[-K encoding] [-mformat] [-O option]\n"
+ fputs("usage: mandoc [-ac] [-I os=name] "
+ "[-K encoding] [-mdoc | -man] [-O options]\n"
"\t [-T output] [-W level] [file ...]\n", stderr);
break;
case ARG_NAME:
- fputs("usage: man [-acfhklw] [-C file] [-I os=name] "
- "[-K encoding] [-M path] [-m path]\n"
- "\t [-O option=value] [-S subsection] [-s section] "
- "[-T output] [-W level]\n"
- "\t [section] name ...\n", stderr);
+ fputs("usage: man [-acfhklw] [-C file] [-M path] "
+ "[-m path] [-S subsection]\n"
+ "\t [[-s] section] name ...\n", stderr);
break;
case ARG_WORD:
- fputs("usage: whatis [-acfhklw] [-C file] "
+ fputs("usage: whatis [-afk] [-C file] "
"[-M path] [-m path] [-O outkey] [-S arch]\n"
"\t [-s section] name ...\n", stderr);
break;
case ARG_EXPR:
- fputs("usage: apropos [-acfhklw] [-C file] "
+ fputs("usage: apropos [-afk] [-C file] "
"[-M path] [-m path] [-O outkey] [-S arch]\n"
"\t [-s section] expression ...\n", stderr);
break;
@@ -766,6 +765,9 @@ parse(struct curparse *curp, int fd, const char *file)
case OUTT_PS:
terminal_mdoc(curp->outdata, man);
break;
+ case OUTT_MARKDOWN:
+ markdown_mdoc(curp->outdata, man);
+ break;
default:
break;
}
@@ -915,24 +917,16 @@ koptions(int *options, char *arg)
return 1;
}
-static int
+static void
moptions(int *options, char *arg)
{
if (arg == NULL)
- /* nothing to do */;
- else if (0 == strcmp(arg, "doc"))
+ return;
+ if (strcmp(arg, "doc") == 0)
*options |= MPARSE_MDOC;
- else if (0 == strcmp(arg, "andoc"))
- /* nothing to do */;
- else if (0 == strcmp(arg, "an"))
+ else if (strcmp(arg, "an") == 0)
*options |= MPARSE_MAN;
- else {
- warnx("-m %s: Bad argument", arg);
- return 0;
- }
-
- return 1;
}
static int
@@ -943,19 +937,19 @@ toptions(struct curparse *curp, char *arg)
curp->outtype = OUTT_ASCII;
else if (0 == strcmp(arg, "lint")) {
curp->outtype = OUTT_LINT;
- curp->wlevel = MANDOCLEVEL_WARNING;
+ curp->wlevel = MANDOCLEVEL_STYLE;
} else if (0 == strcmp(arg, "tree"))
curp->outtype = OUTT_TREE;
else if (0 == strcmp(arg, "man"))
curp->outtype = OUTT_MAN;
else if (0 == strcmp(arg, "html"))
curp->outtype = OUTT_HTML;
+ else if (0 == strcmp(arg, "markdown"))
+ curp->outtype = OUTT_MARKDOWN;
else if (0 == strcmp(arg, "utf8"))
curp->outtype = OUTT_UTF8;
else if (0 == strcmp(arg, "locale"))
curp->outtype = OUTT_LOCALE;
- else if (0 == strcmp(arg, "xhtml"))
- curp->outtype = OUTT_HTML;
else if (0 == strcmp(arg, "ps"))
curp->outtype = OUTT_PS;
else if (0 == strcmp(arg, "pdf"))
@@ -972,15 +966,16 @@ static int
woptions(struct curparse *curp, char *arg)
{
char *v, *o;
- const char *toks[7];
+ const char *toks[8];
toks[0] = "stop";
toks[1] = "all";
- toks[2] = "warning";
- toks[3] = "error";
- toks[4] = "unsupp";
- toks[5] = "fatal";
- toks[6] = NULL;
+ toks[2] = "style";
+ toks[3] = "warning";
+ toks[4] = "error";
+ toks[5] = "unsupp";
+ toks[6] = "fatal";
+ toks[7] = NULL;
while (*arg) {
o = arg;
@@ -990,15 +985,18 @@ woptions(struct curparse *curp, char *arg)
break;
case 1:
case 2:
- curp->wlevel = MANDOCLEVEL_WARNING;
+ curp->wlevel = MANDOCLEVEL_STYLE;
break;
case 3:
- curp->wlevel = MANDOCLEVEL_ERROR;
+ curp->wlevel = MANDOCLEVEL_WARNING;
break;
case 4:
- curp->wlevel = MANDOCLEVEL_UNSUPP;
+ curp->wlevel = MANDOCLEVEL_ERROR;
break;
case 5:
+ curp->wlevel = MANDOCLEVEL_UNSUPP;
+ break;
+ case 6:
curp->wlevel = MANDOCLEVEL_BADARG;
break;
default:
@@ -1006,7 +1004,6 @@ woptions(struct curparse *curp, char *arg)
return 0;
}
}
-
return 1;
}
diff --git a/contrib/mdocml/main.h b/contrib/mdocml/main.h
index f12f3e4c3a05..f9b8f135f885 100644
--- a/contrib/mdocml/main.h
+++ b/contrib/mdocml/main.h
@@ -1,4 +1,4 @@
-/* $Id: main.h,v 1.26 2016/07/15 19:33:01 schwarze Exp $ */
+/* $Id: main.h,v 1.27 2017/03/03 14:23:23 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -49,3 +49,5 @@ void pspdf_free(void *);
void terminal_mdoc(void *, const struct roff_man *);
void terminal_man(void *, const struct roff_man *);
void terminal_sepline(void *);
+
+void markdown_mdoc(void *, const struct roff_man *);
diff --git a/contrib/mdocml/makewhatis.8 b/contrib/mdocml/makewhatis.8
index 945c05361b39..9f307a351d3d 100644
--- a/contrib/mdocml/makewhatis.8
+++ b/contrib/mdocml/makewhatis.8
@@ -1,7 +1,7 @@
-.\" $Id: makewhatis.8,v 1.4 2016/07/19 22:40:33 schwarze Exp $
+.\" $Id: makewhatis.8,v 1.6 2017/05/17 22:27:12 schwarze Exp $
.\"
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011, 2012, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: July 19 2016 $
+.Dd $Mdocdate: May 17 2017 $
.Dt MAKEWHATIS 8
.Os
.Sh NAME
@@ -74,6 +74,8 @@ and
.Sm on
in that directory.
Existing databases are replaced.
+If a directory contains no manual pages, no database is created in that
+directory.
If
.Ar dir
is not provided,
@@ -130,11 +132,22 @@ Remove
.Ar
from the database in
.Ar dir .
+If that causes the database to become empty, also delete the database file.
.El
.Pp
If fatal parse errors are encountered while parsing, the offending file
is printed to stderr, omitted from the index, and the parse continues
with the next input file.
+.Sh ENVIRONMENT
+.Bl -tag -width MANPATH
+.It Ev MANPATH
+A colon-separated list of directories to create databases in.
+Ignored if a
+.Ar dir
+argument or the
+.Fl t
+option is specified.
+.El
.Sh FILES
.Bl -tag -width Ds
.It Pa mandoc.db
diff --git a/contrib/mdocml/man.1 b/contrib/mdocml/man.1
index 67b53d70ed43..075497acab9d 100644
--- a/contrib/mdocml/man.1
+++ b/contrib/mdocml/man.1
@@ -1,9 +1,9 @@
-.\" $Id: man.1,v 1.21 2017/01/31 19:44:04 schwarze Exp $
+.\" $Id: man.1,v 1.29 2017/05/17 23:23:00 schwarze Exp $
.\"
.\" Copyright (c) 1989, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\" Copyright (c) 2003, 2007, 2008, 2014 Jason McIntyre <jmc@openbsd.org>
-.\" Copyright (c) 2010, 2011, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2010, 2011, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
@@ -31,7 +31,7 @@
.\"
.\" @(#)man.1 8.2 (Berkeley) 1/2/94
.\"
-.Dd $Mdocdate: January 31 2017 $
+.Dd $Mdocdate: May 17 2017 $
.Dt MAN 1
.Os
.Sh NAME
@@ -41,16 +41,10 @@
.Nm man
.Op Fl acfhklw
.Op Fl C Ar file
-.Op Fl I Cm os Ns = Ns Ar name
-.Op Fl K Ar encoding
.Op Fl M Ar path
.Op Fl m Ar path
-.Op Fl O Ar option Ns = Ns Ar value
.Op Fl S Ar subsection
-.Op Fl s Ar section
-.Op Fl T Ar output
-.Op Fl W Ar level
-.Op Ar section
+.Op Oo Fl s Oc Ar section
.Ar name ...
.Sh DESCRIPTION
The
@@ -91,39 +85,12 @@ It searches for
.Ar name
in manual page names and displays the header lines from all matching pages.
The search is case insensitive and matches whole words only.
-This overrides any earlier
-.Fl k
-and
-.Fl l
-options.
.It Fl h
Display only the SYNOPSIS lines of the requested manual pages.
Implies
.Fl a
and
.Fl c .
-.It Fl I Cm os Ns = Ns Ar name
-Override the default operating system
-.Ar name
-for the
-.Xr mdoc 7
-.Ic \&Os
-and for the
-.Xr man 7
-.Ic \&TH
-macro.
-.It Fl K Ar encoding
-Specify the input encoding.
-The supported
-.Ar encoding
-arguments are
-.Cm us-ascii ,
-.Cm iso-8859-1 ,
-and
-.Cm utf-8 .
-By default, the encoding is automatically detected as described in the
-.Xr mandoc 1
-manual.
.It Fl k
A synonym for
.Xr apropos 1 .
@@ -133,11 +100,6 @@ an expression can be provided using the syntax described in the
.Xr apropos 1
manual.
By default, it displays the header lines of all matching pages.
-This overrides any earlier
-.Fl f
-and
-.Fl l
-options.
.It Fl l
A synonym for
.Xr mandoc 1
@@ -149,15 +111,10 @@ No search is done and
.Ar file ,
.Ar path ,
.Ar section ,
-and
-.Ar subsection
-are ignored.
-This overrides any earlier
-.Fl f ,
-.Fl k ,
+.Ar subsection ,
and
.Fl w
-options.
+are ignored.
.It Fl M Ar path
Override the list of standard directories which
.Nm
@@ -184,15 +141,8 @@ the directories specified using the
option or the
.Ev MANPATH
environment variable.
-.It Fl O Ar option Ns = Ns Ar value
-Comma-separated output options.
-For each output format, the available options are described in the
-.Xr mandoc 1
-manual.
.It Fl S Ar subsection
-Restricts the directories that
-.Nm
-will search to those of a specific
+Only show pages for the specified
.Xr machine 1
architecture.
.Ar subsection
@@ -234,53 +184,23 @@ System maintenance and operation commands.
.It 9
Kernel internals.
.El
-.It Fl T Ar output
-Select the output format.
-The default is
-.Cm locale .
-The other output modes
-.Cm ascii ,
-.Cm html ,
-.Cm lint ,
-.Cm man ,
-.Cm pdf ,
-.Cm ps ,
-.Cm tree ,
-and
-.Cm utf8
-are described in the
-.Xr mandoc 1
-manual.
-.It Fl W Ar level
-Specify the minimum message
-.Ar level
-to be reported on the standard error output and to affect the exit status.
-The
-.Ar level
-can be
-.Cm warning ,
-.Cm error ,
-or
-.Cm unsupp ;
-.Cm all
-is an alias for
-.Cm warning .
-By default,
-.Nm
-is silent.
-See the
-.Xr mandoc 1
-manual for details.
+.Pp
+If not specified and a match is found in more than one section,
+the first match is selected from the following list:
+1, 8, 6, 2, 3, 5, 7, 4, 9, 3p.
.It Fl w
-List the pathnames of the manual pages which
-.Nm
-would display for the specified
-.Ar section
-and
-.Ar name
-combination.
+List the pathnames of all matching manual pages instead of displaying
+any of them.
.El
.Pp
+The options
+.Fl IKOTW
+are also supported and are documented in
+.Xr mandoc 1 .
+The options
+.Fl fkl
+are mutually exclusive and override each other.
+.Pp
Guidelines for writing
man pages can be found in
.Xr mdoc 7 .
@@ -290,13 +210,7 @@ for example
.Pa cat1/foo.0
and
.Pa man1/foo.1 ,
-exist in the same directory, and at least one of them is selected,
-only the newer one is used.
-However, if both the
-.Fl a
-and the
-.Fl w
-options are specified, both file names are printed.
+exist in the same directory, only the unformatted version is used.
.Sh ENVIRONMENT
.Bl -tag -width MANPATHX
.It Ev MACHINE
@@ -318,7 +232,7 @@ is case insensitive.
.It Ev MANPAGER
Any non-empty value of the environment variable
.Ev MANPAGER
-will be used instead of the standard pagination program,
+is used instead of the standard pagination program,
.Xr more 1 .
If
.Xr less 1
@@ -342,13 +256,27 @@ information about the term last searched for with
.It Ev MANPATH
The standard search path used by
.Nm
-may be overridden by specifying a path in the
+may be changed by specifying a path in the
.Ev MANPATH
-environment
-variable.
+environment variable.
The format of the path is a colon
.Pq Ql \&:
separated list of directories.
+Invalid paths are ignored.
+Overridden by
+.Fl M ,
+ignored if
+.Fl l
+is specified.
+.Pp
+If
+.Ev MANPATH
+begins with a colon, it is appended to the default list;
+if it ends with a colon, it is prepended to the default list;
+or if it contains two adjacent colons,
+the standard search path is inserted between the colons.
+If none of these conditions are met, it overrides the
+standard search path.
.It Ev PAGER
Specifies the pagination program to use when
.Ev MANPAGER
@@ -356,7 +284,12 @@ is not defined.
If neither PAGER nor MANPAGER is defined,
.Xr more 1
.Fl s
-will be used.
+is used.
+Only used if
+.Fl a
+or
+.Fl l
+is specified.
.El
.Sh FILES
.Bl -tag -width /etc/man.conf -compact
@@ -365,10 +298,12 @@ default man configuration file
.El
.Sh EXIT STATUS
.Ex -std man
+See
+.Xr mandoc 1
+for details.
.Sh SEE ALSO
.Xr apropos 1 ,
.Xr intro 1 ,
-.Xr whatis 1 ,
.Xr whereis 1 ,
.Xr intro 2 ,
.Xr intro 3 ,
diff --git a/contrib/mdocml/man.7 b/contrib/mdocml/man.7
index bfeec51650e4..1a79f298781e 100644
--- a/contrib/mdocml/man.7
+++ b/contrib/mdocml/man.7
@@ -1,4 +1,4 @@
-.\" $Id: man.7,v 1.132 2015/01/29 00:33:57 schwarze Exp $
+.\" $Id: man.7,v 1.135 2017/05/07 21:44:49 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -16,7 +16,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 29 2015 $
+.Dd $Mdocdate: May 7 2017 $
.Dt MAN 7
.Os
.Sh NAME
@@ -266,8 +266,6 @@ in the alphabetical reference below.
.It Sx TP Ta tagged paragraph: Op Ar width
.It Sx HP Ta hanged paragraph: Op Ar width
.It Sx PD Ta set vertical paragraph distance: Op Ar height
-.It Sx \&br Ta force output line break in text mode (no arguments)
-.It Sx \&sp Ta force vertical space: Op Ar height
.It Sx fi , nf Ta fill mode and no-fill mode (no arguments)
.It Sx in Ta additional indent: Op Ar width
.El
@@ -350,8 +348,12 @@ See also
and
.Sx \&IR .
.Ss \&DT
-Has no effect.
-Included for compatibility.
+Restore the default tabulator positions.
+They are at intervals of 0.5 inches.
+This has no effect unless the tabulator positions were changed with the
+.Xr roff 7
+.Ic \&ta
+request.
.Ss \&EE
This is a non-standard GNU extension, included only for compatibility.
In
@@ -708,12 +710,6 @@ It has the following syntax:
link description to be shown
.Pf \. Sx UE
.Ed
-.Ss \&br
-Breaks the current line.
-Consecutive invocations have no further effect.
-.Pp
-See also
-.Sx \&sp .
.Ss \&fi
End literal mode begun by
.Sx \&nf .
@@ -736,24 +732,6 @@ Literal mode is implicitly ended by
.Sx \&SH
or
.Sx \&SS .
-.Ss \&sp
-Insert vertical spaces into output with the following syntax:
-.Bd -filled -offset indent
-.Pf \. Sx \&sp
-.Op Ar height
-.Ed
-.Pp
-The
-.Ar height
-argument is a scaling width as described in
-.Xr roff 7 .
-If 0, this is equivalent to the
-.Sx \&br
-macro.
-Defaults to 1, if unspecified.
-.Pp
-See also
-.Sx \&br .
.Sh MACRO SYNTAX
The
.Nm
@@ -777,10 +755,7 @@ is equivalent to
.Sq \&.I foo .
If next-line macros are invoked consecutively, only the last is used.
If a next-line macro is followed by a non-next-line macro, an error is
-raised, except for
-.Sx \&br
-and
-.Sx \&sp .
+raised.
.Pp
The syntax is as follows:
.Bd -literal -offset indent
@@ -808,11 +783,9 @@ The syntax is as follows:
.It Sx \&SM Ta n Ta next-line Ta \&
.It Sx \&TH Ta >1, <6 Ta current Ta \&
.It Sx \&UC Ta <=1 Ta current Ta \&
-.It Sx \&br Ta 0 Ta current Ta compat
.It Sx \&fi Ta 0 Ta current Ta compat
.It Sx \&in Ta 1 Ta current Ta compat
.It Sx \&nf Ta 0 Ta current Ta compat
-.It Sx \&sp Ta 1 Ta current Ta compat
.El
.Pp
Macros marked as
diff --git a/contrib/mdocml/man.c b/contrib/mdocml/man.c
index a2db05fbaa3b..f2ba1bdbdd4c 100644
--- a/contrib/mdocml/man.c
+++ b/contrib/mdocml/man.c
@@ -1,7 +1,7 @@
-/* $Id: man.c,v 1.167 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: man.c,v 1.174 2017/06/03 15:55:24 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2011 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -35,21 +35,6 @@
#include "roff_int.h"
#include "libman.h"
-const char *const __man_macronames[MAN_MAX] = {
- "br", "TH", "SH", "SS",
- "TP", "LP", "PP", "P",
- "IP", "HP", "SM", "SB",
- "BI", "IB", "BR", "RB",
- "R", "B", "I", "IR",
- "RI", "sp", "nf",
- "fi", "RE", "RS", "DT",
- "UC", "PD", "AT", "in",
- "ft", "OP", "EX", "EE",
- "UR", "UE", "ll"
- };
-
-const char * const *man_macronames = __man_macronames;
-
static void man_descope(struct roff_man *, int, int);
static int man_ptext(struct roff_man *, int, char *, int);
static int man_pmacro(struct roff_man *, int, char *, int);
@@ -104,15 +89,17 @@ man_ptext(struct roff_man *man, int line, char *buf, int offs)
/* Skip leading whitespace. */ ;
/*
- * Blank lines are ignored right after headings
- * but add a single vertical space elsewhere.
+ * Blank lines are ignored in next line scope and right
+ * after headings but add a single vertical space elsewhere.
*/
if (buf[i] == '\0') {
- /* Allocate a blank entry. */
- if (man->last->tok != MAN_SH &&
+ if (man->flags & (MAN_ELINE | MAN_BLINE))
+ mandoc_msg(MANDOCERR_BLK_BLANK, man->parse,
+ line, 0, NULL);
+ else if (man->last->tok != MAN_SH &&
man->last->tok != MAN_SS) {
- roff_elem_alloc(man, line, offs, MAN_sp);
+ roff_elem_alloc(man, line, offs, ROFF_sp);
man->next = ROFF_NEXT_SIBLING;
}
return 1;
@@ -160,26 +147,19 @@ man_pmacro(struct roff_man *man, int ln, char *buf, int offs)
{
struct roff_node *n;
const char *cp;
- int tok;
- int i, ppos;
+ size_t sz;
+ enum roff_tok tok;
+ int ppos;
int bline;
- char mac[5];
-
- ppos = offs;
-
- /*
- * Copy the first word into a nil-terminated buffer.
- * Stop when a space, tab, escape, or eoln is encountered.
- */
-
- i = 0;
- while (i < 4 && strchr(" \t\\", buf[offs]) == NULL)
- mac[i++] = buf[offs++];
-
- mac[i] = '\0';
- tok = (i > 0 && i < 4) ? man_hash_find(mac) : TOKEN_NONE;
+ /* Determine the line macro. */
+ ppos = offs;
+ tok = TOKEN_NONE;
+ for (sz = 0; sz < 4 && strchr(" \t\\", buf[offs]) == NULL; sz++)
+ offs++;
+ if (sz > 0 && sz < 4)
+ tok = roffhash_find(man->manmac, buf + ppos, sz);
if (tok == TOKEN_NONE) {
mandoc_msg(MANDOCERR_MACRO, man->parse,
ln, ppos, buf + ppos - 1);
@@ -203,7 +183,7 @@ man_pmacro(struct roff_man *man, int ln, char *buf, int offs)
/* Jump to the next non-whitespace word. */
- while (buf[offs] && buf[offs] == ' ')
+ while (buf[offs] == ' ')
offs++;
/*
@@ -223,6 +203,20 @@ man_pmacro(struct roff_man *man, int ln, char *buf, int offs)
man_breakscope(man, tok);
bline = man->flags & MAN_BLINE;
+ /*
+ * If the line in next-line scope ends with \c, keep the
+ * next-line scope open for the subsequent input line.
+ * That is not at all portable, only groff >= 1.22.4
+ * does it, but *if* this weird idiom occurs in a manual
+ * page, that's very likely what the author intended.
+ */
+
+ if (bline) {
+ cp = strchr(buf + offs, '\0') - 2;
+ if (cp >= buf && cp[0] == '\\' && cp[1] == 'c')
+ bline = 0;
+ }
+
/* Call to handler... */
assert(man_macros[tok].fp);
@@ -266,7 +260,7 @@ man_breakscope(struct roff_man *man, int tok)
* Delete the element that is being broken.
*/
- if (man->flags & MAN_ELINE && (tok == TOKEN_NONE ||
+ if (man->flags & MAN_ELINE && (tok < MAN_TH ||
! (man_macros[tok].flags & MAN_NSCOPED))) {
n = man->last;
assert(n->type != ROFFT_TEXT);
@@ -275,8 +269,7 @@ man_breakscope(struct roff_man *man, int tok)
mandoc_vmsg(MANDOCERR_BLK_LINE, man->parse,
n->line, n->pos, "%s breaks %s",
- tok == TOKEN_NONE ? "TS" : man_macronames[tok],
- man_macronames[n->tok]);
+ roff_name[tok], roff_name[n->tok]);
roff_node_delete(man, n);
man->flags &= ~MAN_ELINE;
@@ -302,7 +295,7 @@ man_breakscope(struct roff_man *man, int tok)
* Delete the block that is being broken.
*/
- if (man->flags & MAN_BLINE && (tok == TOKEN_NONE ||
+ if (man->flags & MAN_BLINE && (tok < MAN_TH ||
man_macros[tok].flags & MAN_BSCOPE)) {
n = man->last;
if (n->type == ROFFT_TEXT)
@@ -317,8 +310,7 @@ man_breakscope(struct roff_man *man, int tok)
mandoc_vmsg(MANDOCERR_BLK_LINE, man->parse,
n->line, n->pos, "%s breaks %s",
- tok == TOKEN_NONE ? "TS" : man_macronames[tok],
- man_macronames[n->tok]);
+ roff_name[tok], roff_name[n->tok]);
roff_node_delete(man, n);
man->flags &= ~MAN_BLINE;
diff --git a/contrib/mdocml/man.cgi.3 b/contrib/mdocml/man.cgi.3
index e7c1d2fca0ca..e83248cc2f5b 100644
--- a/contrib/mdocml/man.cgi.3
+++ b/contrib/mdocml/man.cgi.3
@@ -1,6 +1,6 @@
-.\" $Id: man.cgi.3,v 1.2 2016/07/07 19:19:01 schwarze Exp $
+.\" $Id: man.cgi.3,v 1.4 2017/03/15 13:18:53 schwarze Exp $
.\"
-.\" Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: July 7 2016 $
+.Dd $Mdocdate: March 15 2017 $
.Dt MAN.CGI 3
.Os
.Sh NAME
@@ -126,12 +126,30 @@ contains a search query in short format or when
is empty and a
.Ev QUERY_STRING
is provided.
-It changes into the manpath and calls
+If possible, requests using
+.Ev QUERY_STRING
+are redirected to URIs using
+.Ev PATH_INFO
+by calling
+.Fn pg_redirect .
+Otherwise, it changes into the manpath and calls
.Xr mansearch 3 .
Depending on the result, it calls either
.Fn pg_noresult
or
.Fn pg_searchres .
+.It Ft void Fn pg_redirect "const struct req *req" "const char *name"
+This function is special in so far as it does not print an HTML page,
+but only an HTTP 303 response with a Location: of the form:
+.Sm off
+.No http://
+.Ar host Ns /
+.Op Ar scriptname Ns /
+.Op Ar manpath Ns /
+.Op Ar arch Ns /
+.Fa name
+.Op Pf . Ar sec
+.Sm on
.It Ft void Fn pg_noresult "const struct req *req" "const char *msg"
This function calls
.Fn resp_begin_html ,
@@ -219,13 +237,18 @@ and
are used.
The highest level result generators are:
.Bl -tag -width 1n
-.It Ft void Fn resp_begin_html "int code" "const char *msg"
+.It Ft void Fn resp_begin_html "int code" "const char *msg" "const char *file"
This generator calls
.Fn resp_begin_http
to print the HTTP headers, then prints the HTML header up to the
opening tag of the <body> element, then copies the file
.Pa header.html
to the output, if it exists and is readable.
+If
+.Fa file
+is not
+.Dv NULL ,
+it is used for the <title> element.
.It Ft void Fn resp_searchform "const struct req *req" "enum focus focus"
This generator prints a search form, filling it with data
from the provided request object.
diff --git a/contrib/mdocml/man.cgi.8 b/contrib/mdocml/man.cgi.8
index 0e1b60d61a04..eba3cec45a8a 100644
--- a/contrib/mdocml/man.cgi.8
+++ b/contrib/mdocml/man.cgi.8
@@ -1,4 +1,4 @@
-.\" $Id: man.cgi.8,v 1.20 2016/07/11 22:48:37 schwarze Exp $
+.\" $Id: man.cgi.8,v 1.22 2017/03/18 16:48:24 schwarze Exp $
.\"
.\" Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: July 11 2016 $
+.Dd $Mdocdate: March 18 2017 $
.Dt MAN.CGI 8
.Os
.Sh NAME
@@ -186,11 +186,6 @@ Otherwise, a leading slash is needed.
This is used in generated HTML code.
.It Dv CUSTOMIZE_TITLE
An ASCII string to be used for the HTML <TITLE> element.
-.It Dv HTTP_HOST
-The FQDN of the (possibly virtual) host the HTTP server is running on.
-This is used for
-.Ic Location:
-headers in HTTP 303 responses.
.It Dv MAN_DIR
A file system path to the
.Nm
@@ -411,15 +406,16 @@ A version of
based on
.Xr mandoc 1
first appeared in mdocml-1.12.1 (March 2012).
-The current SQLite3-based version first appeared in
-.Ox 5.6 .
+The current
+.Xr mandoc.db 5
+database format first appeared in
+.Ox 6.1 .
.Sh AUTHORS
.An -nosplit
The
.Nm
program was written by
.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
-and ported to the SQLite3-based
-.Xr mandoc.db 5
-backend by
-.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
+and is maintained by
+.An Ingo Schwarze Aq Mt schwarze@openbsd.org ,
+who also designed and implemented the database format.
diff --git a/contrib/mdocml/man.h b/contrib/mdocml/man.h
index 8f63f3b99ecd..d671f9a9e41e 100644
--- a/contrib/mdocml/man.h
+++ b/contrib/mdocml/man.h
@@ -1,4 +1,4 @@
-/* $Id: man.h,v 1.77 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: man.h,v 1.78 2017/04/24 23:06:18 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -16,50 +16,6 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#define MAN_br 0
-#define MAN_TH 1
-#define MAN_SH 2
-#define MAN_SS 3
-#define MAN_TP 4
-#define MAN_LP 5
-#define MAN_PP 6
-#define MAN_P 7
-#define MAN_IP 8
-#define MAN_HP 9
-#define MAN_SM 10
-#define MAN_SB 11
-#define MAN_BI 12
-#define MAN_IB 13
-#define MAN_BR 14
-#define MAN_RB 15
-#define MAN_R 16
-#define MAN_B 17
-#define MAN_I 18
-#define MAN_IR 19
-#define MAN_RI 20
-#define MAN_sp 21
-#define MAN_nf 22
-#define MAN_fi 23
-#define MAN_RE 24
-#define MAN_RS 25
-#define MAN_DT 26
-#define MAN_UC 27
-#define MAN_PD 28
-#define MAN_AT 29
-#define MAN_in 30
-#define MAN_ft 31
-#define MAN_OP 32
-#define MAN_EX 33
-#define MAN_EE 34
-#define MAN_UR 35
-#define MAN_UE 36
-#define MAN_ll 37
-#define MAN_MAX 38
-
-/* Names of macros. */
-extern const char *const *man_macronames;
-
-
struct roff_man;
const struct mparse *man_mparse(const struct roff_man *);
diff --git a/contrib/mdocml/man_hash.c b/contrib/mdocml/man_hash.c
deleted file mode 100644
index bb7b4665b348..000000000000
--- a/contrib/mdocml/man_hash.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $Id: man_hash.c,v 1.35 2016/07/15 18:03:45 schwarze Exp $ */
-/*
- * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#include "config.h"
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <string.h>
-
-#include "mandoc.h"
-#include "roff.h"
-#include "man.h"
-#include "libmandoc.h"
-#include "libman.h"
-
-#define HASH_DEPTH 6
-
-#define HASH_ROW(x) do { \
- if (isupper((unsigned char)(x))) \
- (x) -= 65; \
- else \
- (x) -= 97; \
- (x) *= HASH_DEPTH; \
- } while (/* CONSTCOND */ 0)
-
-/*
- * Lookup table is indexed first by lower-case first letter (plus one
- * for the period, which is stored in the last row), then by lower or
- * uppercase second letter. Buckets correspond to the index of the
- * macro (the integer value of the enum stored as a char to save a bit
- * of space).
- */
-static unsigned char table[26 * HASH_DEPTH];
-
-
-void
-man_hash_init(void)
-{
- int i, j, x;
-
- if (*table != '\0')
- return;
-
- memset(table, UCHAR_MAX, sizeof(table));
-
- for (i = 0; i < (int)MAN_MAX; i++) {
- x = man_macronames[i][0];
-
- assert(isalpha((unsigned char)x));
-
- HASH_ROW(x);
-
- for (j = 0; j < HASH_DEPTH; j++)
- if (UCHAR_MAX == table[x + j]) {
- table[x + j] = (unsigned char)i;
- break;
- }
-
- assert(j < HASH_DEPTH);
- }
-}
-
-int
-man_hash_find(const char *tmp)
-{
- int x, y, i;
- int tok;
-
- if ('\0' == (x = tmp[0]))
- return TOKEN_NONE;
- if ( ! (isalpha((unsigned char)x)))
- return TOKEN_NONE;
-
- HASH_ROW(x);
-
- for (i = 0; i < HASH_DEPTH; i++) {
- if (UCHAR_MAX == (y = table[x + i]))
- return TOKEN_NONE;
-
- tok = y;
- if (0 == strcmp(tmp, man_macronames[tok]))
- return tok;
- }
-
- return TOKEN_NONE;
-}
diff --git a/contrib/mdocml/man_html.c b/contrib/mdocml/man_html.c
index 9151e4c7505e..278f31a28f7c 100644
--- a/contrib/mdocml/man_html.c
+++ b/contrib/mdocml/man_html.c
@@ -1,4 +1,4 @@
-/* $Id: man_html.c,v 1.133 2017/02/05 18:15:39 schwarze Exp $ */
+/* $Id: man_html.c,v 1.143 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -65,14 +65,12 @@ static int man_SM_pre(MAN_ARGS);
static int man_SS_pre(MAN_ARGS);
static int man_UR_pre(MAN_ARGS);
static int man_alt_pre(MAN_ARGS);
-static int man_br_pre(MAN_ARGS);
static int man_ign_pre(MAN_ARGS);
static int man_in_pre(MAN_ARGS);
static void man_root_post(MAN_ARGS);
static void man_root_pre(MAN_ARGS);
-static const struct htmlman mans[MAN_MAX] = {
- { man_br_pre, NULL }, /* br */
+static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
{ NULL, NULL }, /* TH */
{ man_SH_pre, NULL }, /* SH */
{ man_SS_pre, NULL }, /* SS */
@@ -93,7 +91,6 @@ static const struct htmlman mans[MAN_MAX] = {
{ man_I_pre, NULL }, /* I */
{ man_alt_pre, NULL }, /* IR */
{ man_alt_pre, NULL }, /* RI */
- { man_br_pre, NULL }, /* sp */
{ NULL, NULL }, /* nf */
{ NULL, NULL }, /* fi */
{ NULL, NULL }, /* RE */
@@ -103,14 +100,13 @@ static const struct htmlman mans[MAN_MAX] = {
{ man_ign_pre, NULL }, /* PD */
{ man_ign_pre, NULL }, /* AT */
{ man_in_pre, NULL }, /* in */
- { man_ign_pre, NULL }, /* ft */
{ man_OP_pre, NULL }, /* OP */
{ NULL, NULL }, /* EX */
{ NULL, NULL }, /* EE */
{ man_UR_pre, NULL }, /* UR */
{ NULL, NULL }, /* UE */
- { man_ign_pre, NULL }, /* ll */
};
+static const struct htmlman *const mans = __mans - MAN_TH;
/*
@@ -255,7 +251,8 @@ print_man_node(MAN_ARGS)
case ROFFT_TEXT:
if (fillmode(h, want_fillmode) == MAN_fi &&
want_fillmode == MAN_fi &&
- n->flags & NODE_LINE && *n->string == ' ')
+ n->flags & NODE_LINE && *n->string == ' ' &&
+ (h->flags & HTML_NONEWLINE) == 0)
print_otag(h, TAG_BR, "");
if (*n->string != '\0')
break;
@@ -304,6 +301,13 @@ print_man_node(MAN_ARGS)
print_tblclose(h);
t = h->tag;
+ if (n->tok < ROFF_MAX) {
+ roff_html_pre(h, n);
+ child = 0;
+ break;
+ }
+
+ assert(n->tok >= MAN_TH && n->tok < MAN_MAX);
if (mans[n->tok].pre)
child = (*mans[n->tok].pre)(man, n, h);
@@ -354,13 +358,9 @@ fillmode(struct html *h, int want)
static int
a2width(const struct roff_node *n, struct roffsu *su)
{
-
if (n->type != ROFFT_TEXT)
return 0;
- if (a2roffsu(n->string, su, SCALE_EN))
- return 1;
-
- return 0;
+ return a2roffsu(n->string, su, SCALE_EN) != NULL;
}
static void
@@ -409,34 +409,18 @@ man_root_post(MAN_ARGS)
print_tagq(h, t);
}
-
-static int
-man_br_pre(MAN_ARGS)
-{
- struct roffsu su;
-
- SCALE_VS_INIT(&su, 1);
-
- if (MAN_sp == n->tok) {
- if (NULL != (n = n->child))
- if ( ! a2roffsu(n->string, &su, SCALE_VS))
- su.scale = 1.0;
- } else
- su.scale = 0.0;
-
- print_otag(h, TAG_DIV, "suh", &su);
-
- /* So the div isn't empty: */
- print_text(h, "\\~");
-
- return 0;
-}
-
static int
man_SH_pre(MAN_ARGS)
{
- if (n->type == ROFFT_HEAD)
- print_otag(h, TAG_H1, "c", "Sh");
+ char *id;
+
+ if (n->type == ROFFT_HEAD) {
+ id = html_make_id(n);
+ print_otag(h, TAG_H1, "cTi", "Sh", id);
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ free(id);
+ }
return 1;
}
@@ -498,8 +482,15 @@ man_SM_pre(MAN_ARGS)
static int
man_SS_pre(MAN_ARGS)
{
- if (n->type == ROFFT_HEAD)
- print_otag(h, TAG_H2, "c", "Ss");
+ char *id;
+
+ if (n->type == ROFFT_HEAD) {
+ id = html_make_id(n);
+ print_otag(h, TAG_H2, "cTi", "Ss", id);
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ free(id);
+ }
return 1;
}
@@ -656,7 +647,7 @@ man_UR_pre(MAN_ARGS)
assert(n->type == ROFFT_HEAD);
if (n->child != NULL) {
assert(n->child->type == ROFFT_TEXT);
- print_otag(h, TAG_A, "ch", "Lk", n->child->string);
+ print_otag(h, TAG_A, "cTh", "Lk", n->child->string);
}
assert(n->next->type == ROFFT_BODY);
diff --git a/contrib/mdocml/man_macro.c b/contrib/mdocml/man_macro.c
index 7fd17c53481b..22b2597d15c4 100644
--- a/contrib/mdocml/man_macro.c
+++ b/contrib/mdocml/man_macro.c
@@ -1,7 +1,7 @@
-/* $Id: man_macro.c,v 1.115 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: man_macro.c,v 1.120 2017/05/05 15:17:32 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012, 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -38,10 +38,9 @@ static void blk_imp(MACRO_PROT_ARGS);
static void in_line_eoln(MACRO_PROT_ARGS);
static int man_args(struct roff_man *, int,
int *, char *, char **);
-static void rew_scope(struct roff_man *, int);
+static void rew_scope(struct roff_man *, enum roff_tok);
-const struct man_macro __man_macros[MAN_MAX] = {
- { in_line_eoln, MAN_NSCOPED }, /* br */
+const struct man_macro __man_macros[MAN_MAX - MAN_TH] = {
{ in_line_eoln, MAN_BSCOPE }, /* TH */
{ blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SH */
{ blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SS */
@@ -62,7 +61,6 @@ const struct man_macro __man_macros[MAN_MAX] = {
{ in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* I */
{ in_line_eoln, 0 }, /* IR */
{ in_line_eoln, 0 }, /* RI */
- { in_line_eoln, MAN_NSCOPED }, /* sp */
{ in_line_eoln, MAN_NSCOPED }, /* nf */
{ in_line_eoln, MAN_NSCOPED }, /* fi */
{ blk_close, MAN_BSCOPE }, /* RE */
@@ -72,16 +70,13 @@ const struct man_macro __man_macros[MAN_MAX] = {
{ in_line_eoln, MAN_NSCOPED }, /* PD */
{ in_line_eoln, 0 }, /* AT */
{ in_line_eoln, 0 }, /* in */
- { in_line_eoln, 0 }, /* ft */
{ in_line_eoln, 0 }, /* OP */
{ in_line_eoln, MAN_BSCOPE }, /* EX */
{ in_line_eoln, MAN_BSCOPE }, /* EE */
{ blk_exp, MAN_BSCOPE }, /* UR */
{ blk_close, MAN_BSCOPE }, /* UE */
- { in_line_eoln, 0 }, /* ll */
};
-
-const struct man_macro * const man_macros = __man_macros;
+const struct man_macro *const man_macros = __man_macros - MAN_TH;
void
@@ -100,8 +95,7 @@ man_unscope(struct roff_man *man, const struct roff_node *to)
man_macros[n->tok].flags & MAN_SCOPED) {
mandoc_vmsg(MANDOCERR_BLK_LINE,
man->parse, n->line, n->pos,
- "EOF breaks %s",
- man_macronames[n->tok]);
+ "EOF breaks %s", roff_name[n->tok]);
if (man->flags & MAN_ELINE)
man->flags &= ~MAN_ELINE;
else {
@@ -118,7 +112,7 @@ man_unscope(struct roff_man *man, const struct roff_node *to)
man_macros[n->tok].fp == blk_exp)
mandoc_msg(MANDOCERR_BLK_NOEND,
man->parse, n->line, n->pos,
- man_macronames[n->tok]);
+ roff_name[n->tok]);
}
/*
@@ -150,7 +144,7 @@ man_unscope(struct roff_man *man, const struct roff_node *to)
* scopes. When a scope is closed, it must be validated and actioned.
*/
static void
-rew_scope(struct roff_man *man, int tok)
+rew_scope(struct roff_man *man, enum roff_tok tok)
{
struct roff_node *n;
@@ -193,7 +187,7 @@ rew_scope(struct roff_man *man, int tok)
void
blk_close(MACRO_PROT_ARGS)
{
- int ntok;
+ enum roff_tok ntok;
const struct roff_node *nn;
char *p;
int nrew, target;
@@ -233,7 +227,7 @@ blk_close(MACRO_PROT_ARGS)
if (nn == NULL) {
mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse,
- line, ppos, man_macronames[tok]);
+ line, ppos, roff_name[tok]);
rew_scope(man, MAN_PP);
} else {
line = man->last->line;
@@ -266,9 +260,8 @@ blk_exp(MACRO_PROT_ARGS)
roff_word_alloc(man, line, la, p);
if (buf[*pos] != '\0')
- mandoc_vmsg(MANDOCERR_ARG_EXCESS,
- man->parse, line, *pos, "%s ... %s",
- man_macronames[tok], buf + *pos);
+ mandoc_vmsg(MANDOCERR_ARG_EXCESS, man->parse, line,
+ *pos, "%s ... %s", roff_name[tok], buf + *pos);
man_unscope(man, head);
roff_body_alloc(man, line, ppos, tok);
@@ -331,18 +324,16 @@ in_line_eoln(MACRO_PROT_ARGS)
n = man->last;
for (;;) {
- if (buf[*pos] != '\0' && (tok == MAN_br ||
- tok == MAN_fi || tok == MAN_nf)) {
+ if (buf[*pos] != '\0' && (tok == MAN_fi || tok == MAN_nf)) {
mandoc_vmsg(MANDOCERR_ARG_SKIP,
man->parse, line, *pos, "%s %s",
- man_macronames[tok], buf + *pos);
+ roff_name[tok], buf + *pos);
break;
}
- if (buf[*pos] != '\0' && man->last != n &&
- (tok == MAN_PD || tok == MAN_ft || tok == MAN_sp)) {
+ if (buf[*pos] != '\0' && man->last != n && tok == MAN_PD) {
mandoc_vmsg(MANDOCERR_ARG_EXCESS,
man->parse, line, *pos, "%s ... %s",
- man_macronames[tok], buf + *pos);
+ roff_name[tok], buf + *pos);
break;
}
la = *pos;
diff --git a/contrib/mdocml/man_term.c b/contrib/mdocml/man_term.c
index b2732d455891..7f026ce9805c 100644
--- a/contrib/mdocml/man_term.c
+++ b/contrib/mdocml/man_term.c
@@ -1,4 +1,4 @@
-/* $Id: man_term.c,v 1.191 2017/02/15 14:10:08 schwarze Exp $ */
+/* $Id: man_term.c,v 1.204 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -68,6 +68,7 @@ static void print_bvspace(struct termp *,
const struct roff_node *, int);
static int pre_B(DECL_ARGS);
+static int pre_DT(DECL_ARGS);
static int pre_HP(DECL_ARGS);
static int pre_I(DECL_ARGS);
static int pre_IP(DECL_ARGS);
@@ -80,12 +81,9 @@ static int pre_SS(DECL_ARGS);
static int pre_TP(DECL_ARGS);
static int pre_UR(DECL_ARGS);
static int pre_alternate(DECL_ARGS);
-static int pre_ft(DECL_ARGS);
static int pre_ign(DECL_ARGS);
static int pre_in(DECL_ARGS);
static int pre_literal(DECL_ARGS);
-static int pre_ll(DECL_ARGS);
-static int pre_sp(DECL_ARGS);
static void post_IP(DECL_ARGS);
static void post_HP(DECL_ARGS);
@@ -95,8 +93,7 @@ static void post_SS(DECL_ARGS);
static void post_TP(DECL_ARGS);
static void post_UR(DECL_ARGS);
-static const struct termact termacts[MAN_MAX] = {
- { pre_sp, NULL, MAN_NOTEXT }, /* br */
+static const struct termact __termacts[MAN_MAX - MAN_TH] = {
{ NULL, NULL, 0 }, /* TH */
{ pre_SH, post_SH, 0 }, /* SH */
{ pre_SS, post_SS, 0 }, /* SS */
@@ -117,24 +114,22 @@ static const struct termact termacts[MAN_MAX] = {
{ pre_I, NULL, 0 }, /* I */
{ pre_alternate, NULL, 0 }, /* IR */
{ pre_alternate, NULL, 0 }, /* RI */
- { pre_sp, NULL, MAN_NOTEXT }, /* sp */
{ pre_literal, NULL, 0 }, /* nf */
{ pre_literal, NULL, 0 }, /* fi */
{ NULL, NULL, 0 }, /* RE */
{ pre_RS, post_RS, 0 }, /* RS */
- { pre_ign, NULL, 0 }, /* DT */
+ { pre_DT, NULL, 0 }, /* DT */
{ pre_ign, NULL, MAN_NOTEXT }, /* UC */
{ pre_PD, NULL, MAN_NOTEXT }, /* PD */
{ pre_ign, NULL, 0 }, /* AT */
{ pre_in, NULL, MAN_NOTEXT }, /* in */
- { pre_ft, NULL, MAN_NOTEXT }, /* ft */
{ pre_OP, NULL, 0 }, /* OP */
{ pre_literal, NULL, 0 }, /* EX */
{ pre_literal, NULL, 0 }, /* EE */
{ pre_UR, post_UR, 0 }, /* UR */
{ NULL, NULL, 0 }, /* UE */
- { pre_ll, NULL, MAN_NOTEXT }, /* ll */
};
+static const struct termact *termacts = __termacts - MAN_TH;
void
@@ -146,9 +141,10 @@ terminal_man(void *arg, const struct roff_man *man)
size_t save_defindent;
p = (struct termp *)arg;
- p->overstep = 0;
- p->rmargin = p->maxrmargin = p->defrmargin;
- p->tabwidth = term_len(p, 5);
+ p->tcol->rmargin = p->maxrmargin = p->defrmargin;
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
memset(&mt, 0, sizeof(struct mtermp));
mt.lmargin[mt.lmargincur] = term_len(p, p->defindent);
@@ -219,14 +215,6 @@ pre_ign(DECL_ARGS)
}
static int
-pre_ll(DECL_ARGS)
-{
-
- term_setwidth(p, n->child != NULL ? n->child->string : NULL);
- return 0;
-}
-
-static int
pre_I(DECL_ARGS)
{
@@ -240,7 +228,7 @@ pre_literal(DECL_ARGS)
term_newln(p);
- if (MAN_nf == n->tok || MAN_EX == n->tok)
+ if (n->tok == MAN_nf || n->tok == MAN_EX)
mt->fl |= MANT_LITERAL;
else
mt->fl &= ~MANT_LITERAL;
@@ -250,9 +238,9 @@ pre_literal(DECL_ARGS)
* So in case a second call to term_flushln() is needed,
* indentation has to be set up explicitly.
*/
- if (MAN_HP == n->parent->tok && p->rmargin < p->maxrmargin) {
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
+ if (n->parent->tok == MAN_HP && p->tcol->rmargin < p->maxrmargin) {
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
p->trailspace = 0;
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
p->flags |= TERMP_NOSPACE;
@@ -272,7 +260,7 @@ pre_PD(DECL_ARGS)
return 0;
}
assert(n->type == ROFFT_TEXT);
- if (a2roffsu(n->string, &su, SCALE_VS))
+ if (a2roffsu(n->string, &su, SCALE_VS) != NULL)
mt->pardist = term_vspan(p, &su);
return 0;
}
@@ -362,41 +350,6 @@ pre_OP(DECL_ARGS)
}
static int
-pre_ft(DECL_ARGS)
-{
- const char *cp;
-
- if (NULL == n->child) {
- term_fontlast(p);
- return 0;
- }
-
- cp = n->child->string;
- switch (*cp) {
- case '4':
- case '3':
- case 'B':
- term_fontrepl(p, TERMFONT_BOLD);
- break;
- case '2':
- case 'I':
- term_fontrepl(p, TERMFONT_UNDER);
- break;
- case 'P':
- term_fontlast(p);
- break;
- case '1':
- case 'C':
- case 'R':
- term_fontrepl(p, TERMFONT_NONE);
- break;
- default:
- break;
- }
- return 0;
-}
-
-static int
pre_in(DECL_ARGS)
{
struct roffsu su;
@@ -406,8 +359,8 @@ pre_in(DECL_ARGS)
term_newln(p);
- if (NULL == n->child) {
- p->offset = mt->offset;
+ if (n->child == NULL) {
+ p->tcol->offset = mt->offset;
return 0;
}
@@ -421,71 +374,29 @@ pre_in(DECL_ARGS)
else
cp--;
- if ( ! a2roffsu(++cp, &su, SCALE_EN))
+ if (a2roffsu(++cp, &su, SCALE_EN) == NULL)
return 0;
v = (term_hspan(p, &su) + 11) / 24;
if (less < 0)
- p->offset -= p->offset > v ? v : p->offset;
+ p->tcol->offset -= p->tcol->offset > v ? v : p->tcol->offset;
else if (less > 0)
- p->offset += v;
+ p->tcol->offset += v;
else
- p->offset = v;
- if (p->offset > SHRT_MAX)
- p->offset = term_len(p, p->defindent);
+ p->tcol->offset = v;
+ if (p->tcol->offset > SHRT_MAX)
+ p->tcol->offset = term_len(p, p->defindent);
return 0;
}
static int
-pre_sp(DECL_ARGS)
+pre_DT(DECL_ARGS)
{
- struct roffsu su;
- int i, len;
-
- if ((NULL == n->prev && n->parent)) {
- switch (n->parent->tok) {
- case MAN_SH:
- case MAN_SS:
- case MAN_PP:
- case MAN_LP:
- case MAN_P:
- return 0;
- default:
- break;
- }
- }
-
- if (n->tok == MAN_br)
- len = 0;
- else if (n->child == NULL)
- len = 1;
- else {
- if ( ! a2roffsu(n->child->string, &su, SCALE_VS))
- su.scale = 1.0;
- len = term_vspan(p, &su);
- }
-
- if (len == 0)
- term_newln(p);
- else if (len < 0)
- p->skipvsp -= len;
- else
- for (i = 0; i < len; i++)
- term_vspace(p);
-
- /*
- * Handle an explicit break request in the same way
- * as an overflowing line.
- */
-
- if (p->flags & TERMP_BRIND) {
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
- p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
- }
-
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
return 0;
}
@@ -514,7 +425,7 @@ pre_HP(DECL_ARGS)
/* Calculate offset. */
if ((nn = n->parent->head->child) != NULL &&
- a2roffsu(nn->string, &su, SCALE_EN)) {
+ a2roffsu(nn->string, &su, SCALE_EN) != NULL) {
len = term_hspan(p, &su) / 24;
if (len < 0 && (size_t)(-len) > mt->offset)
len = -mt->offset;
@@ -524,8 +435,8 @@ pre_HP(DECL_ARGS)
} else
len = mt->lmargin[mt->lmargincur];
- p->offset = mt->offset;
- p->rmargin = mt->offset + len;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = mt->offset + len;
return 1;
}
@@ -549,8 +460,8 @@ post_HP(DECL_ARGS)
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
p->trailspace = 0;
- p->offset = mt->offset;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = p->maxrmargin;
break;
default:
break;
@@ -567,7 +478,7 @@ pre_PP(DECL_ARGS)
print_bvspace(p, n, mt->pardist);
break;
default:
- p->offset = mt->offset;
+ p->tcol->offset = mt->offset;
break;
}
@@ -599,7 +510,7 @@ pre_IP(DECL_ARGS)
/* Calculate the offset from the optional second argument. */
if ((nn = n->parent->head->child) != NULL &&
(nn = nn->next) != NULL &&
- a2roffsu(nn->string, &su, SCALE_EN)) {
+ a2roffsu(nn->string, &su, SCALE_EN) != NULL) {
len = term_hspan(p, &su) / 24;
if (len < 0 && (size_t)(-len) > mt->offset)
len = -mt->offset;
@@ -611,8 +522,8 @@ pre_IP(DECL_ARGS)
switch (n->type) {
case ROFFT_HEAD:
- p->offset = mt->offset;
- p->rmargin = mt->offset + len;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = mt->offset + len;
savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;
@@ -625,8 +536,8 @@ pre_IP(DECL_ARGS)
return 0;
case ROFFT_BODY:
- p->offset = mt->offset + len;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset + len;
+ p->tcol->rmargin = p->maxrmargin;
break;
default:
break;
@@ -644,11 +555,11 @@ post_IP(DECL_ARGS)
term_flushln(p);
p->flags &= ~TERMP_NOBREAK;
p->trailspace = 0;
- p->rmargin = p->maxrmargin;
+ p->tcol->rmargin = p->maxrmargin;
break;
case ROFFT_BODY:
term_newln(p);
- p->offset = mt->offset;
+ p->tcol->offset = mt->offset;
break;
default:
break;
@@ -681,7 +592,7 @@ pre_TP(DECL_ARGS)
if ((nn = n->parent->head->child) != NULL &&
nn->string != NULL && ! (NODE_LINE & nn->flags) &&
- a2roffsu(nn->string, &su, SCALE_EN)) {
+ a2roffsu(nn->string, &su, SCALE_EN) != NULL) {
len = term_hspan(p, &su) / 24;
if (len < 0 && (size_t)(-len) > mt->offset)
len = -mt->offset;
@@ -693,8 +604,8 @@ pre_TP(DECL_ARGS)
switch (n->type) {
case ROFFT_HEAD:
- p->offset = mt->offset;
- p->rmargin = mt->offset + len;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = mt->offset + len;
savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;
@@ -713,8 +624,8 @@ pre_TP(DECL_ARGS)
mt->fl |= MANT_LITERAL;
return 0;
case ROFFT_BODY:
- p->offset = mt->offset + len;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset + len;
+ p->tcol->rmargin = p->maxrmargin;
p->trailspace = 0;
p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP);
break;
@@ -735,7 +646,7 @@ post_TP(DECL_ARGS)
break;
case ROFFT_BODY:
term_newln(p);
- p->offset = mt->offset;
+ p->tcol->offset = mt->offset;
break;
default:
break;
@@ -770,14 +681,14 @@ pre_SS(DECL_ARGS)
break;
case ROFFT_HEAD:
term_fontrepl(p, TERMFONT_BOLD);
- p->offset = term_len(p, 3);
- p->rmargin = mt->offset;
+ p->tcol->offset = term_len(p, 3);
+ p->tcol->rmargin = mt->offset;
p->trailspace = mt->offset;
p->flags |= TERMP_NOBREAK | TERMP_BRIND;
break;
case ROFFT_BODY:
- p->offset = mt->offset;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = p->maxrmargin;
p->trailspace = 0;
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
break;
@@ -832,14 +743,14 @@ pre_SH(DECL_ARGS)
break;
case ROFFT_HEAD:
term_fontrepl(p, TERMFONT_BOLD);
- p->offset = 0;
- p->rmargin = mt->offset;
+ p->tcol->offset = 0;
+ p->tcol->rmargin = mt->offset;
p->trailspace = mt->offset;
p->flags |= TERMP_NOBREAK | TERMP_BRIND;
break;
case ROFFT_BODY:
- p->offset = mt->offset;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = p->maxrmargin;
p->trailspace = 0;
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
break;
@@ -885,7 +796,7 @@ pre_RS(DECL_ARGS)
n->aux = SHRT_MAX + 1;
if (n->child == NULL)
n->aux = mt->lmargin[mt->lmargincur];
- else if (a2roffsu(n->child->string, &su, SCALE_EN))
+ else if (a2roffsu(n->child->string, &su, SCALE_EN) != NULL)
n->aux = term_hspan(p, &su) / 24;
if (n->aux < 0 && (size_t)(-n->aux) > mt->offset)
n->aux = -mt->offset;
@@ -893,8 +804,8 @@ pre_RS(DECL_ARGS)
n->aux = term_len(p, p->defindent);
mt->offset += n->aux;
- p->offset = mt->offset;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = mt->offset;
+ p->tcol->rmargin = p->maxrmargin;
if (++mt->lmarginsz < MAXMARGINS)
mt->lmargincur = mt->lmarginsz;
@@ -918,7 +829,7 @@ post_RS(DECL_ARGS)
}
mt->offset -= n->parent->head->aux;
- p->offset = mt->offset;
+ p->tcol->offset = mt->offset;
if (--mt->lmarginsz < MAXMARGINS)
mt->lmargincur = mt->lmarginsz;
@@ -951,7 +862,6 @@ post_UR(DECL_ARGS)
static void
print_man_node(DECL_ARGS)
{
- size_t rm, rmax;
int c;
switch (n->type) {
@@ -961,10 +871,11 @@ print_man_node(DECL_ARGS)
* If we have a space as the first character, break
* before printing the line's data.
*/
- if ('\0' == *n->string) {
+ if (*n->string == '\0') {
term_vspace(p);
return;
- } else if (' ' == *n->string && NODE_LINE & n->flags)
+ } else if (*n->string == ' ' && n->flags & NODE_LINE &&
+ (p->flags & TERMP_NONEWLINE) == 0)
term_newln(p);
term_word(p, n->string);
@@ -986,6 +897,12 @@ print_man_node(DECL_ARGS)
break;
}
+ if (n->tok < ROFF_MAX) {
+ roff_term_pre(p, n);
+ return;
+ }
+
+ assert(n->tok >= MAN_TH && n->tok <= MAN_MAX);
if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
term_fontrepl(p, TERMFONT_NONE);
@@ -1012,20 +929,17 @@ out:
if (mt->fl & MANT_LITERAL &&
! (p->flags & (TERMP_NOBREAK | TERMP_NONEWLINE)) &&
(n->next == NULL || n->next->flags & NODE_LINE)) {
- rm = p->rmargin;
- rmax = p->maxrmargin;
- p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
- p->flags |= TERMP_NOSPACE;
+ p->flags |= TERMP_BRNEVER | TERMP_NOSPACE;
if (n->string != NULL && *n->string != '\0')
term_flushln(p);
else
term_newln(p);
- if (rm < rmax && n->parent->tok == MAN_HP) {
- p->offset = rm;
- p->rmargin = rmax;
- } else
- p->rmargin = rm;
- p->maxrmargin = rmax;
+ p->flags &= ~TERMP_BRNEVER;
+ if (p->tcol->rmargin < p->maxrmargin &&
+ n->parent->tok == MAN_HP) {
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
+ }
}
if (NODE_EOS & n->flags)
p->flags |= TERMP_SENTENCE;
@@ -1081,8 +995,8 @@ print_man_foot(struct termp *p, const struct roff_meta *meta)
p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
p->trailspace = 1;
- p->offset = 0;
- p->rmargin = p->maxrmargin > datelen ?
+ p->tcol->offset = 0;
+ p->tcol->rmargin = p->maxrmargin > datelen ?
(p->maxrmargin + term_len(p, 1) - datelen) / 2 : 0;
if (meta->os)
@@ -1091,9 +1005,10 @@ print_man_foot(struct termp *p, const struct roff_meta *meta)
/* At the bottom in the middle: manual date. */
- p->offset = p->rmargin;
+ p->tcol->offset = p->tcol->rmargin;
titlen = term_strlen(p, title);
- p->rmargin = p->maxrmargin > titlen ? p->maxrmargin - titlen : 0;
+ p->tcol->rmargin = p->maxrmargin > titlen ?
+ p->maxrmargin - titlen : 0;
p->flags |= TERMP_NOSPACE;
term_word(p, meta->date);
@@ -1104,8 +1019,8 @@ print_man_foot(struct termp *p, const struct roff_meta *meta)
p->flags &= ~TERMP_NOBREAK;
p->flags |= TERMP_NOSPACE;
p->trailspace = 0;
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
term_word(p, title);
term_flushln(p);
@@ -1132,8 +1047,8 @@ print_man_head(struct termp *p, const struct roff_meta *meta)
p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
p->trailspace = 1;
- p->offset = 0;
- p->rmargin = 2 * (titlen+1) + vollen < p->maxrmargin ?
+ p->tcol->offset = 0;
+ p->tcol->rmargin = 2 * (titlen+1) + vollen < p->maxrmargin ?
(p->maxrmargin - vollen + term_len(p, 1)) / 2 :
vollen < p->maxrmargin ? p->maxrmargin - vollen : 0;
@@ -1143,9 +1058,9 @@ print_man_head(struct termp *p, const struct roff_meta *meta)
/* At the top in the middle: manual volume. */
p->flags |= TERMP_NOSPACE;
- p->offset = p->rmargin;
- p->rmargin = p->offset + vollen + titlen < p->maxrmargin ?
- p->maxrmargin - titlen : p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->tcol->offset + vollen + titlen <
+ p->maxrmargin ? p->maxrmargin - titlen : p->maxrmargin;
term_word(p, volume);
term_flushln(p);
@@ -1154,17 +1069,17 @@ print_man_head(struct termp *p, const struct roff_meta *meta)
p->flags &= ~TERMP_NOBREAK;
p->trailspace = 0;
- if (p->rmargin + titlen <= p->maxrmargin) {
+ if (p->tcol->rmargin + titlen <= p->maxrmargin) {
p->flags |= TERMP_NOSPACE;
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
term_word(p, title);
term_flushln(p);
}
p->flags &= ~TERMP_NOSPACE;
- p->offset = 0;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = 0;
+ p->tcol->rmargin = p->maxrmargin;
/*
* Groff prints three blank lines before the content.
diff --git a/contrib/mdocml/man_validate.c b/contrib/mdocml/man_validate.c
index 16d996355eb7..ee74da7d13b1 100644
--- a/contrib/mdocml/man_validate.c
+++ b/contrib/mdocml/man_validate.c
@@ -1,7 +1,7 @@
/* $OpenBSD$ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -48,14 +48,12 @@ static void check_text(CHKARGS);
static void post_AT(CHKARGS);
static void post_IP(CHKARGS);
static void post_vs(CHKARGS);
-static void post_ft(CHKARGS);
static void post_OP(CHKARGS);
static void post_TH(CHKARGS);
static void post_UC(CHKARGS);
static void post_UR(CHKARGS);
-static v_check man_valids[MAN_MAX] = {
- post_vs, /* br */
+static const v_check __man_valids[MAN_MAX - MAN_TH] = {
post_TH, /* TH */
NULL, /* SH */
NULL, /* SS */
@@ -76,7 +74,6 @@ static v_check man_valids[MAN_MAX] = {
NULL, /* I */
NULL, /* IR */
NULL, /* RI */
- post_vs, /* sp */
NULL, /* nf */
NULL, /* fi */
NULL, /* RE */
@@ -86,21 +83,20 @@ static v_check man_valids[MAN_MAX] = {
NULL, /* PD */
post_AT, /* AT */
NULL, /* in */
- post_ft, /* ft */
post_OP, /* OP */
NULL, /* EX */
NULL, /* EE */
post_UR, /* UR */
NULL, /* UE */
- NULL, /* ll */
};
+static const v_check *man_valids = __man_valids - MAN_TH;
void
man_node_validate(struct roff_man *man)
{
struct roff_node *n;
- v_check *cp;
+ const v_check *cp;
n = man->last;
man->last = man->last->child;
@@ -125,6 +121,19 @@ man_node_validate(struct roff_man *man)
case ROFFT_TBL:
break;
default:
+ if (n->tok < ROFF_MAX) {
+ switch (n->tok) {
+ case ROFF_br:
+ case ROFF_sp:
+ post_vs(man, n);
+ break;
+ default:
+ roff_validate(man);
+ break;
+ }
+ break;
+ }
+ assert(n->tok >= MAN_TH && n->tok < MAN_MAX);
cp = man_valids + n->tok;
if (*cp)
(*cp)(man, n);
@@ -201,53 +210,12 @@ post_UR(CHKARGS)
}
static void
-post_ft(CHKARGS)
-{
- char *cp;
- int ok;
-
- if (n->child == NULL)
- return;
-
- ok = 0;
- cp = n->child->string;
- switch (*cp) {
- case '1':
- case '2':
- case '3':
- case '4':
- case 'I':
- case 'P':
- case 'R':
- if ('\0' == cp[1])
- ok = 1;
- break;
- case 'B':
- if ('\0' == cp[1] || ('I' == cp[1] && '\0' == cp[2]))
- ok = 1;
- break;
- case 'C':
- if ('W' == cp[1] && '\0' == cp[2])
- ok = 1;
- break;
- default:
- break;
- }
-
- if (0 == ok) {
- mandoc_vmsg(MANDOCERR_FT_BAD, man->parse,
- n->line, n->pos, "ft %s", cp);
- *cp = '\0';
- }
-}
-
-static void
check_part(CHKARGS)
{
if (n->type == ROFFT_BODY && n->child == NULL)
mandoc_msg(MANDOCERR_BLK_EMPTY, man->parse,
- n->line, n->pos, man_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
}
static void
@@ -263,14 +231,13 @@ check_par(CHKARGS)
if (n->child == NULL)
mandoc_vmsg(MANDOCERR_PAR_SKIP,
man->parse, n->line, n->pos,
- "%s empty", man_macronames[n->tok]);
+ "%s empty", roff_name[n->tok]);
break;
case ROFFT_HEAD:
if (n->child != NULL)
mandoc_vmsg(MANDOCERR_ARG_SKIP,
- man->parse, n->line, n->pos,
- "%s %s%s", man_macronames[n->tok],
- n->child->string,
+ man->parse, n->line, n->pos, "%s %s%s",
+ roff_name[n->tok], n->child->string,
n->child->next != NULL ? " ..." : "");
break;
default:
@@ -291,7 +258,7 @@ post_IP(CHKARGS)
if (n->parent->head->child == NULL && n->child == NULL)
mandoc_vmsg(MANDOCERR_PAR_SKIP,
man->parse, n->line, n->pos,
- "%s empty", man_macronames[n->tok]);
+ "%s empty", roff_name[n->tok]);
break;
default:
break;
@@ -478,9 +445,12 @@ post_vs(CHKARGS)
switch (n->parent->tok) {
case MAN_SH:
case MAN_SS:
+ case MAN_PP:
+ case MAN_LP:
+ case MAN_P:
mandoc_vmsg(MANDOCERR_PAR_SKIP, man->parse, n->line, n->pos,
- "%s after %s", man_macronames[n->tok],
- man_macronames[n->parent->tok]);
+ "%s after %s", roff_name[n->tok],
+ roff_name[n->parent->tok]);
/* FALLTHROUGH */
case TOKEN_NONE:
/*
diff --git a/contrib/mdocml/mandoc.1 b/contrib/mdocml/mandoc.1
index 45615d5d02ba..166905b6bf2c 100644
--- a/contrib/mdocml/mandoc.1
+++ b/contrib/mdocml/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.174 2017/02/10 15:45:28 schwarze Exp $
+.\" $Id: mandoc.1,v 1.196 2017/06/08 00:23:30 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,19 +15,19 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: February 10 2017 $
+.Dd $Mdocdate: June 8 2017 $
.Dt MANDOC 1
.Os
.Sh NAME
.Nm mandoc
-.Nd format and display UNIX manuals
+.Nd format manual pages
.Sh SYNOPSIS
.Nm mandoc
-.Op Fl acfhkl
+.Op Fl ac
.Op Fl I Cm os Ns = Ns Ar name
.Op Fl K Ar encoding
-.Op Fl m Ns Ar format
-.Op Fl O Ar option
+.Op Fl mdoc | man
+.Op Fl O Ar options
.Op Fl T Ar output
.Op Fl W Ar level
.Op Ar
@@ -44,9 +44,7 @@ reads
.Xr mdoc 7
or
.Xr man 7
-text from stdin, implying
-.Fl m Ns Cm andoc ,
-and produces
+text from stdin and produces
.Fl T Cm locale
output.
.Pp
@@ -67,28 +65,21 @@ to paginate them.
This is the default.
It can be specified to override
.Fl a .
-.It Fl f
-A synonym for
-.Xr whatis 1 .
-This overrides any earlier
-.Fl k
-and
-.Fl l
-options.
-.It Fl h
-Display only the SYNOPSIS lines.
-Implies
-.Fl c .
.It Fl I Cm os Ns = Ns Ar name
Override the default operating system
.Ar name
for the
.Xr mdoc 7
-.Sq \&Os
+.Ic \&Os
and for the
.Xr man 7
-.Sq \&TH
+.Ic \&TH
macro.
+This can also be used to perform style checks according to the
+conventions of one operating system while running on a different
+operating system; see
+.Sx Style messages
+for details.
.It Fl K Ar encoding
Specify the input encoding.
The supported
@@ -98,46 +89,53 @@ arguments are
.Cm iso-8859-1 ,
and
.Cm utf-8 .
-If not specified, autodetection uses the first match:
-.Bl -tag -width iso-8859-1
-.It Cm utf-8
-if the first three bytes of the input file
-are the UTF-8 byte order mark (BOM, 0xefbbbf)
-.It Ar encoding
-if the first or second line of the input file matches the
+If not specified, autodetection uses the first match in the following
+list:
+.Bl -enum
+.It
+If the first three bytes of the input file are the UTF-8 byte order
+mark (BOM, 0xefbbbf), input is interpreted as
+.Cm utf-8 .
+.It
+If the first or second line of the input file matches the
.Sy emacs
mode line format
.Pp
.D1 .\e" -*- Oo ...; Oc coding: Ar encoding ; No -*-
-.It Cm utf-8
-if the first non-ASCII byte in the file introduces a valid UTF-8 sequence
-.It Cm iso-8859-1
-otherwise
+.Pp
+then input is interpreted according to
+.Ar encoding .
+.It
+If the first non-ASCII byte in the file introduces a valid UTF-8
+sequence, input is interpreted as
+.Cm utf-8 .
+.It
+Otherwise, input is interpreted as
+.Cm iso-8859-1 .
.El
-.It Fl k
-A synonym for
-.Xr apropos 1 .
-This overrides any earlier
-.Fl f
-and
-.Fl l
-options.
-.It Fl l
-A synonym for
-.Fl a .
-Also reverts any earlier
-.Fl f
-and
-.Fl k
-options.
-.It Fl m Ns Ar format
-Input format.
-See
-.Sx Input Formats
-for available formats.
-Defaults to
-.Fl m Ns Cm andoc .
-.It Fl O Ar option
+.It Fl mdoc | man
+With
+.Fl mdoc ,
+all input files are interpreted as
+.Xr mdoc 7 .
+With
+.Fl man ,
+all input files are interpreted as
+.Xr man 7 .
+By default, the input language is automatically detected for each file:
+if the the first macro is
+.Ic \&Dd
+or
+.Ic \&Dt ,
+the
+.Xr mdoc 7
+parser is used; otherwise, the
+.Xr man 7
+parser is used.
+With other arguments,
+.Fl m
+is silently ignored.
+.It Fl O Ar options
Comma-separated output options.
.It Fl T Ar output
Output format.
@@ -153,13 +151,14 @@ to be reported on the standard error output and to affect the exit status.
The
.Ar level
can be
+.Cm style ,
.Cm warning ,
.Cm error ,
or
.Cm unsupp ;
.Cm all
is an alias for
-.Cm warning .
+.Cm style .
By default,
.Nm
is silent.
@@ -190,6 +189,9 @@ If multiple files are specified,
will halt with the first failed parse.
.El
.Pp
+The options
+.Fl fhklw
+are also supported and are documented in man(1).
In
.Fl f
and
@@ -197,60 +199,20 @@ and
mode,
.Nm
also supports the options
-.Fl CMmOSsw
+.Fl CMmOSs
described in the
.Xr apropos 1
manual.
-.Ss Input Formats
-The
-.Nm
-utility accepts
-.Xr mdoc 7
-and
-.Xr man 7
-input with
-.Fl m Ns Cm doc
-and
-.Fl m Ns Cm an ,
-respectively.
-The
-.Xr mdoc 7
-format is
-.Em strongly
-recommended;
-.Xr man 7
-should only be used for legacy manuals.
-.Pp
-A third option,
-.Fl m Ns Cm andoc ,
-which is also the default, determines encoding on-the-fly: if the first
-non-comment macro is
-.Sq \&Dd
-or
-.Sq \&Dt ,
-the
-.Xr mdoc 7
-parser is used; otherwise, the
-.Xr man 7
-parser is used.
-.Pp
-If multiple
-files are specified with
-.Fl m Ns Cm andoc ,
-each has its file-type determined this way.
-If multiple files are
-specified and
-.Fl m Ns Cm doc
-or
-.Fl m Ns Cm an
-is specified, then this format is used exclusively.
+The options
+.Fl fkl
+are mutually exclusive and override each other.
.Ss Output Formats
The
.Nm
utility accepts the following
.Fl T
arguments, which correspond to output modes:
-.Bl -tag -width "-T locale"
+.Bl -tag -width "-T markdown"
.It Fl T Cm ascii
Produce 7-bit ASCII output.
See
@@ -262,7 +224,7 @@ See
.It Fl T Cm lint
Parse only: produce no output.
Implies
-.Fl W Cm warning .
+.Fl W Cm style .
.It Fl T Cm locale
Encode output using the current locale.
This is the default.
@@ -274,6 +236,12 @@ Produce
format output.
See
.Sx Man Output .
+.It Fl T Cm markdown
+Produce output in
+.Sy markdown
+format.
+See
+.Sx Markdown Output .
.It Fl T Cm pdf
Produce PDF output.
See
@@ -290,9 +258,6 @@ See
Encode output in the UTF\-8 multi-byte format.
See
.Sx UTF\-8 Output .
-.It Fl T Cm xhtml
-This is a synonym for
-.Fl T Cm html .
.El
.Pp
If multiple input files are specified, these will be processed by the
@@ -377,7 +342,7 @@ The string
for example,
.Ar ../src/%I.html ,
is used as a template for linked header files (usually via the
-.Sq \&In
+.Ic \&In
macro).
Instances of
.Sq \&%I
@@ -390,7 +355,7 @@ The string
for example,
.Ar ../html%S/%N.%S.html ,
is used as a template for linked manuals (usually via the
-.Sq \&Xr
+.Ic \&Xr
macro).
Instances of
.Sq \&%N
@@ -436,13 +401,47 @@ If the input format is
.Xr man 7 ,
the input is copied to the output, expanding any
.Xr roff 7
-.Sq so
+.Ic so
requests.
The parser is also run, and as usual, the
.Fl W
level controls which
.Sx DIAGNOSTICS
are displayed before copying the input to the output.
+.Ss Markdown Output
+Translate
+.Xr mdoc 7
+input to the
+.Sy markdown
+format conforming to
+.Lk http://daringfireball.net/projects/markdown/syntax.text\
+ "John Gruber's 2004 specification" .
+The output also almost conforms to the
+.Lk http://commonmark.org/ CommonMark
+specification.
+.Pp
+The character set used for the markdown output is ASCII.
+Non-ASCII characters are encoded as HTML entities.
+Since that is not possible in literal font contexts, because these
+are rendered as code spans and code blocks in the markdown output,
+non-ASCII characters are transliterated to ASCII approximations in
+these contexts.
+.Pp
+Markdown is a very weak markup language, so all semantic markup is
+lost, and even part of the presentational markup may be lost.
+Do not use this as an intermediate step in converting to HTML;
+instead, use
+.Fl T Cm html
+directly.
+.Pp
+The
+.Xr man 7 ,
+.Xr tbl 7 ,
+and
+.Xr eqn 7
+input languages are not supported by
+.Fl T Cm markdown
+output mode.
.Ss PDF Output
PDF-1.1 output may be generated by
.Fl T Cm pdf .
@@ -563,8 +562,16 @@ Meta data is not available in this case.
.It Ev MANPAGER
Any non-empty value of the environment variable
.Ev MANPAGER
-will be used instead of the standard pagination program,
-.Xr more 1 .
+is used instead of the standard pagination program,
+.Xr more 1 ;
+see
+.Xr man 1
+for details.
+Only used if
+.Fl a
+or
+.Fl l
+is specified.
.It Ev PAGER
Specifies the pagination program to use when
.Ev MANPAGER
@@ -572,7 +579,12 @@ is not defined.
If neither PAGER nor MANPAGER is defined,
.Xr more 1
.Fl s
-will be used.
+is used.
+Only used if
+.Fl a
+or
+.Fl l
+is specified.
.El
.Sh EXIT STATUS
The
@@ -585,27 +597,32 @@ option:
.Pp
.Bl -tag -width Ds -compact
.It 0
-No warnings or errors occurred, or those that did were ignored because
-they were lower than the requested
+No style suggestions, warnings or errors occurred, or those that
+did were ignored because they were lower than the requested
.Ar level .
+.It 1
+At least one style suggestion occurred, but no warning or error, and
+.Fl W Cm style
+was specified.
.It 2
At least one warning occurred, but no error, and
.Fl W Cm warning
+or
+.Fl W Cm style
was specified.
.It 3
At least one parsing error occurred,
but no unsupported feature was encountered, and
.Fl W Cm error
-or
-.Fl W Cm warning
-was specified.
+or a lower
+.Ar level
+was requested.
.It 4
At least one unsupported feature was encountered, and
-.Fl W Cm unsupp ,
-.Fl W Cm error
-or
-.Fl W Cm warning
-was specified.
+.Fl W Cm unsupp
+or a lower
+.Ar level
+was requested.
.It 5
Invalid command line arguments were specified.
No input files have been read.
@@ -620,12 +637,11 @@ to exit at once, possibly in the middle of parsing or formatting a file.
Note that selecting
.Fl T Cm lint
output mode implies
-.Fl W Cm warning .
+.Fl W Cm style .
.Sh EXAMPLES
To page manuals to the terminal:
.Pp
-.Dl $ mandoc \-W all,stop mandoc.1 2\*(Gt&1 | less
-.Dl $ mandoc mandoc.1 mdoc.3 mdoc.7 | less
+.Dl $ mandoc -l mandoc.1 man.1 apropos.1 makewhatis.8
.Pp
To produce HTML manuals with
.Pa mandoc.css
@@ -705,9 +721,22 @@ rendering can be produced.
Documents causing warnings may render poorly when using other
formatting tools instead of
.Nm .
+.It Cm style
+An input file uses dubious or discouraged style.
+This is not a complaint about the syntax, and probably neither
+formatting nor portability are in danger.
+While great care is taken to avoid false positives on the higher
+message levels, the
+.Cm style
+level tries to reduce the probability that issues go unnoticed,
+so it may occasionally issue bogus suggestions.
+Please use your good judgement to decide whether any particular
+.Cm style
+suggestion really justifies a change to the input file.
.El
.Pp
Messages of the
+.Cm style ,
.Cm warning ,
.Cm error ,
and
@@ -718,6 +747,58 @@ are hidden unless their level, or a lower level, is requested using a
option or
.Fl T Cm lint
output mode.
+.Ss Style messages
+As indicated below, some style checks are only performed if a
+specific operating system name occurs in the arguments of the
+.Ic \&Os
+macro, of the
+.Fl Ios
+command line option, or, if neither are present, in the return value
+of the
+.Xr uname 3
+function.
+.Bl -ohang
+.It Sy "useless macro"
+.Pq mdoc
+A
+.Ic \&Bt ,
+.Ic \&Tn ,
+or
+.Ic \&Ud
+macro was found.
+Simply delete it: it serves no useful purpose.
+.It Sy "consider using OS macro"
+.Pq mdoc
+A string was found in plain text or in a
+.Ic \&Bx
+macro that could be represented using
+.Ic \&Ox ,
+.Ic \&Nx ,
+.Ic \&Fx ,
+or
+.Ic \&Dx .
+.It Sy "errnos out of order"
+.Pq mdoc, Nx
+The
+.Ic \&Er
+items in a
+.Ic \&Bl
+list are not in alphabetical order.
+.It Sy "duplicate errno"
+.Pq mdoc, Nx
+A
+.Ic \&Bl
+list contains two consecutive
+.Ic \&It
+entries describing the same
+.Ic \&Er
+number.
+.It Sy "description line ends with a full stop"
+.Pq mdoc
+Do not use punctuation at the end of an
+.Ic \&Nd
+block.
+.El
.Ss Warnings related to the document prologue
.Bl -ohang
.It Sy "missing manual title, using UNTITLED"
@@ -870,6 +951,14 @@ The
.Ic \&Nd
macro lacks the required argument.
The title line of the manual will end after the dash.
+.It Sy "description line outside NAME section"
+.Pq mdoc
+An
+.Ic \&Nd
+macro appears outside the NAME section.
+The arguments are printed anyway and the following text is used for
+.Xr apropos 1 ,
+but none of that behaviour is portable.
.It Sy "sections out of conventional order"
.Pq mdoc
A standard section occurs after another section it usually precedes.
@@ -1088,7 +1177,7 @@ or
.Ic \&Bl
.Fl offset
or
-.Fl width.
+.Fl width .
.It Sy "missing display type, using -ragged"
.Pq mdoc
The
@@ -1310,6 +1399,12 @@ or
.Ic \&Fn
macro contains an opening or closing parenthesis; that's probably wrong,
parentheses are added automatically.
+.It Sy "unknown library name"
+.Pq mdoc, not on Ox
+An
+.Ic \&Lb
+macro has an unknown name argument and will be rendered as
+.Qq library Dq Ar name .
.It Sy "invalid content in Rs block"
.Pq mdoc
An
@@ -1657,6 +1752,11 @@ whatever mode was active before the block.
A
.Ic \&Bl
macro fails to specify the list type.
+.It Sy "argument is not numeric, using 1"
+.Pq roff
+The argument of a
+.Ic \&ce
+request is not a number.
.It Sy "missing manual name, using \(dq\(dq"
.Pq mdoc
The first call to
diff --git a/contrib/mdocml/mandoc.3 b/contrib/mdocml/mandoc.3
index 6f7c3eb09a18..f57f9d1e25d7 100644
--- a/contrib/mdocml/mandoc.3
+++ b/contrib/mdocml/mandoc.3
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.3,v 1.38 2017/01/09 01:37:03 schwarze Exp $
+.\" $Id: mandoc.3,v 1.39 2017/05/17 23:39:31 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 9 2017 $
+.Dd $Mdocdate: May 17 2017 $
.Dt MANDOC 3
.Os
.Sh NAME
@@ -669,11 +669,9 @@ Using badly-nested blocks is
.Em strongly discouraged ;
for example, the
.Fl T Ns Cm html
-and
-.Fl T Ns Cm xhtml
-front-ends to
+front-end to
.Xr mandoc 1
-are unable to render them in any meaningful way.
+is unable to render them in any meaningful way.
Furthermore, behaviour when encountering badly-nested blocks is not
consistent across troff implementations, especially when using multiple
levels of badly-nested blocks.
diff --git a/contrib/mdocml/mandoc.c b/contrib/mdocml/mandoc.c
index d265463b4efe..fc360def79e2 100644
--- a/contrib/mdocml/mandoc.c
+++ b/contrib/mdocml/mandoc.c
@@ -1,7 +1,7 @@
-/* $Id: mandoc.c,v 1.98 2015/11/12 22:44:27 schwarze Exp $ */
+/* $Id: mandoc.c,v 1.100 2017/06/02 19:21:23 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -175,7 +175,17 @@ mandoc_escape(const char **end, const char **start, int *sz)
++*end;
return ESCAPE_ERROR;
}
- gly = ESCAPE_IGNORE;
+ switch ((*start)[-1]) {
+ case 'h':
+ gly = ESCAPE_HORIZ;
+ break;
+ case 'l':
+ gly = ESCAPE_HLINE;
+ break;
+ default:
+ gly = ESCAPE_IGNORE;
+ break;
+ }
term = **start;
*start = ++*end;
break;
diff --git a/contrib/mdocml/mandoc.css b/contrib/mdocml/mandoc.css
index bc4d98281a8d..0dab6e8874aa 100644
--- a/contrib/mdocml/mandoc.css
+++ b/contrib/mdocml/mandoc.css
@@ -1,4 +1,4 @@
-/* $Id: mandoc.css,v 1.17 2017/02/05 21:00:43 schwarze Exp $ */
+/* $Id: mandoc.css,v 1.18 2017/03/13 20:22:18 schwarze Exp $ */
/*
* Standard style sheet for mandoc(1) -Thtml and man.cgi(8).
*/
@@ -14,6 +14,11 @@ ul, ol, dl { margin-top: 0em;
margin-bottom: 0em; }
li, dt { margin-top: 1em; }
+a.selflink { border-bottom: thin dotted;
+ color: inherit;
+ font: inherit;
+ text-decoration: inherit; }
+
/* Search form and search results. */
fieldset { border: thin solid silver;
diff --git a/contrib/mdocml/mandoc.h b/contrib/mdocml/mandoc.h
index a80d6ae7b82d..ec5608874675 100644
--- a/contrib/mdocml/mandoc.h
+++ b/contrib/mdocml/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.214 2017/01/28 23:30:08 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.226 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -28,7 +28,7 @@
*/
enum mandoclevel {
MANDOCLEVEL_OK = 0,
- MANDOCLEVEL_RESERVED,
+ MANDOCLEVEL_STYLE, /* style suggestions */
MANDOCLEVEL_WARNING, /* warnings: syntax, whitespace, etc. */
MANDOCLEVEL_ERROR, /* input has been thrown away */
MANDOCLEVEL_UNSUPP, /* input needs unimplemented features */
@@ -44,6 +44,14 @@ enum mandoclevel {
enum mandocerr {
MANDOCERR_OK,
+ MANDOCERR_STYLE, /* ===== start of style suggestions ===== */
+
+ MANDOCERR_MACRO_USELESS, /* useless macro: macro */
+ MANDOCERR_BX, /* consider using OS macro: macro */
+ MANDOCERR_ER_ORDER, /* errnos out of order: Er ... */
+ MANDOCERR_ER_REP, /* duplicate errno: Er ... */
+ MANDOCERR_ND_DOT, /* description line ends with a full stop */
+
MANDOCERR_WARNING, /* ===== start of warnings ===== */
/* related to the prologue */
@@ -71,6 +79,7 @@ enum mandocerr {
MANDOCERR_NAMESEC_BAD, /* bad NAME section content: macro */
MANDOCERR_NAMESEC_PUNCT, /* missing comma before name: Nm name */
MANDOCERR_ND_EMPTY, /* missing description line, using "" */
+ MANDOCERR_ND_LATE, /* description line outside NAME section */
MANDOCERR_SEC_ORDER, /* sections out of conventional order: Sh title */
MANDOCERR_SEC_REP, /* duplicate section title: Sh title */
MANDOCERR_SEC_MSEC, /* unexpected section: Sh title for ... only */
@@ -90,6 +99,7 @@ enum mandocerr {
MANDOCERR_FI_SKIP, /* fill mode already enabled, skipping: fi */
MANDOCERR_NF_SKIP, /* fill mode already disabled, skipping: nf */
MANDOCERR_BLK_LINE, /* line scope broken: macro breaks macro */
+ MANDOCERR_BLK_BLANK, /* skipping blank line in line scope */
/* related to missing arguments */
MANDOCERR_REQ_EMPTY, /* skipping empty request: request */
@@ -125,6 +135,7 @@ enum mandocerr {
MANDOCERR_AT_BAD, /* unknown AT&T UNIX version: At version */
MANDOCERR_FA_COMMA, /* comma in function argument: arg */
MANDOCERR_FN_PAREN, /* parenthesis in function name: arg */
+ MANDOCERR_LB_BAD, /* unknown library name: Lb ... */
MANDOCERR_RS_BAD, /* invalid content in Rs block: macro */
MANDOCERR_SM_BAD, /* invalid Boolean argument: macro arg */
MANDOCERR_FT_BAD, /* unknown font, skipping request: ft font */
@@ -177,6 +188,7 @@ enum mandocerr {
MANDOCERR_BD_FILE, /* NOT IMPLEMENTED: Bd -file */
MANDOCERR_BD_NOARG, /* skipping display without arguments: Bd */
MANDOCERR_BL_NOTYPE, /* missing list type, using -item: Bl */
+ MANDOCERR_CE_NONUM, /* argument is not numeric, using 1: ce ... */
MANDOCERR_NM_NONAME, /* missing manual name, using "": Nm */
MANDOCERR_OS_UNAME, /* uname(3) system call failed, using UNKNOWN */
MANDOCERR_ST_BAD, /* unknown standard specifier: St standard */
@@ -234,9 +246,10 @@ enum tbl_cellt {
*/
struct tbl_cell {
struct tbl_cell *next;
+ char *wstr; /* min width represented as a string */
+ size_t width; /* minimum column width */
+ size_t spacing; /* to the right of the column */
int vert; /* width of subsequent vertical line */
- enum tbl_cellt pos;
- size_t spacing;
int col; /* column number, starting from 0 */
int flags;
#define TBL_CELL_TALIGN (1 << 0) /* t, T */
@@ -247,6 +260,7 @@ struct tbl_cell {
#define TBL_CELL_UP (1 << 5) /* u, U */
#define TBL_CELL_WIGN (1 << 6) /* z, Z */
#define TBL_CELL_WMAX (1 << 7) /* x, X */
+ enum tbl_cellt pos;
};
/*
@@ -274,9 +288,10 @@ enum tbl_datt {
*/
struct tbl_dat {
struct tbl_cell *layout; /* layout cell */
- int spans; /* how many spans follow */
struct tbl_dat *next;
char *string; /* data (NULL if not TBL_DATA_DATA) */
+ int spans; /* how many spans follow */
+ int block; /* T{ text block T} */
enum tbl_datt pos;
};
@@ -404,6 +419,8 @@ enum mandoc_esc {
ESCAPE_NUMBERED, /* a numbered glyph */
ESCAPE_UNICODE, /* a unicode codepoint */
ESCAPE_NOSPACE, /* suppress space if the last on a line */
+ ESCAPE_HORIZ, /* horizontal movement */
+ ESCAPE_HLINE, /* horizontal line drawing */
ESCAPE_SKIPCHAR, /* skip the next character */
ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */
};
diff --git a/contrib/mdocml/mandoc_char.7 b/contrib/mdocml/mandoc_char.7
index 4212ec58bd77..2c82a9bec66f 100644
--- a/contrib/mdocml/mandoc_char.7
+++ b/contrib/mdocml/mandoc_char.7
@@ -1,8 +1,8 @@
-.\" $Id: mandoc_char.7,v 1.64 2017/02/05 21:41:21 schwarze Exp $
+.\" $Id: mandoc_char.7,v 1.66 2017/06/02 12:43:52 schwarze Exp $
.\"
.\" Copyright (c) 2003 Jason McIntyre <jmc@openbsd.org>
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011, 2013, 2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011, 2013, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -16,7 +16,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: February 5 2017 $
+.Dd $Mdocdate: June 2 2017 $
.Dt MANDOC_CHAR 7
.Os
.Sh NAME
@@ -169,6 +169,8 @@ even on request and macro lines.
.Ss Accents
In output modes supporting such special output characters, for example
.Fl T Cm pdf ,
+and sometimes less consistently in
+.Fl T Cm utf8 ,
some
.Xr roff 7
formatters convert the following ASCII input characters to the
@@ -177,6 +179,7 @@ following Unicode special output characters:
.It \(ga Ta U+2018 Ta left single quotation mark
.It \(aq Ta U+2019 Ta right single quotation mark
.It \(ti Ta U+02DC Ta small tilde
+.It \(ha Ta U+02C6 Ta modifier letter circumflex
.El
.Pp
In prose, this automatic substitution is often desirable;
@@ -187,6 +190,7 @@ escaping to render as follows:
.It \e(ga Ta U+0060 Ta grave accent
.It \e(aq Ta U+0027 Ta apostrophe
.It \e(ti Ta U+007E Ta tilde
+.It \e(ha Ta U+005E Ta circumflex accent
.El
.Ss Periods
The period
@@ -279,6 +283,10 @@ Text markers:
.It \e(sh Ta \(sh Ta hash (pound)
.It \e(CR Ta \(CR Ta carriage return
.It \e(OK Ta \(OK Ta check mark
+.It \e(CL Ta \(CL Ta club suit
+.It \e(SP Ta \(SP Ta spade suit
+.It \e(HE Ta \(HE Ta heart suit
+.It \e(DI Ta \(DI Ta diamond suit
.El
.Pp
Legal symbols:
@@ -372,6 +380,7 @@ Arrows:
.It \e(uA Ta \(uA Ta up double-arrow
.It \e(dA Ta \(dA Ta down double-arrow
.It \e(vA Ta \(vA Ta up-down double-arrow
+.It \e(an Ta \(an Ta horizontal arrow extension
.El
.Pp
Logical:
@@ -450,11 +459,20 @@ Mathematical:
.It \e(Ah Ta \(Ah Ta aleph
.It \e(Im Ta \(Im Ta imaginary
.It \e(Re Ta \(Re Ta real
+.It \e(wp Ta \(wp Ta Weierstrass p
.It \e(pd Ta \(pd Ta partial differential
.It \e(-h Ta \(-h Ta Planck constant over 2\(*p
-.It \e[12] Ta \[12] Ta one-half
-.It \e[14] Ta \[14] Ta one-fourth
-.It \e[34] Ta \[34] Ta three-fourths
+.It \e[hbar] Ta \[hbar] Ta Planck constant over 2\(*p
+.It \e(12 Ta \(12 Ta one-half
+.It \e(14 Ta \(14 Ta one-fourth
+.It \e(34 Ta \(34 Ta three-fourths
+.It \e(18 Ta \(18 Ta one-eighth
+.It \e(38 Ta \(38 Ta three-eighths
+.It \e(58 Ta \(58 Ta five-eighths
+.It \e(78 Ta \(78 Ta seven-eighths
+.It \e(S1 Ta \(S1 Ta superscript 1
+.It \e(S2 Ta \(S2 Ta superscript 2
+.It \e(S3 Ta \(S3 Ta superscript 3
.El
.Pp
Ligatures:
@@ -588,6 +606,8 @@ Units:
.It \e(fm Ta \(fm Ta minute
.It \e(sd Ta \(sd Ta second
.It \e(mc Ta \(mc Ta micro
+.It \e(Of Ta \(Of Ta Spanish female ordinal
+.It \e(Om Ta \(Om Ta Spanish masculine ordinal
.El
.Pp
Greek letters:
@@ -748,9 +768,7 @@ the
differently between mandoc and groff.
.It
In
-.Fl T Ns Cm html
-and
-.Fl T Ns Cm xhtml ,
+.Fl T Ns Cm html ,
the \e(\(ti=, \e(nb, and \e(nc special characters render differently
between mandoc and groff.
.It
diff --git a/contrib/mdocml/mandoc_headers.3 b/contrib/mdocml/mandoc_headers.3
index b8c204bb5bcf..f061332c83da 100644
--- a/contrib/mdocml/mandoc_headers.3
+++ b/contrib/mdocml/mandoc_headers.3
@@ -60,9 +60,19 @@ Requires
.In sys/types.h
for
.Vt size_t .
+.Pp
Provides the utility functions documented in
.Xr mandoc_malloc 3 .
.It Qq Pa mandoc_ohash.h
+Requires
+.In stddef.h
+for
+.Vt ptrdiff_t
+and
+.In stdint.h
+for
+.Vt uint32_t .
+.Pp
Includes
.In ohash.h
and provides
@@ -113,17 +123,30 @@ from
.Pa roff.h
as an opaque type for function prototypes.
.It Qq Pa roff.h
+Requires
+.Qq Pa mandoc_ohash.h
+for
+.Vt struct ohash .
+.Pp
Provides
.Vt enum mdoc_endbody ,
.Vt enum roff_macroset ,
.Vt enum roff_next ,
.Vt enum roff_sec ,
+.Vt enum roff_tok ,
.Vt enum roff_type ,
.Vt struct roff_man ,
.Vt struct roff_meta ,
.Vt struct roff_node ,
-and the function
-.Fn deroff .
+the constant array
+.Va roff_name
+and the functions
+.Fn deroff ,
+.Fn roffhash_alloc ,
+.Fn roffhash_find ,
+.Fn roffhash_free ,
+and
+.Fn roff_validate .
.Pp
Uses pointers to the types
.Vt struct mdoc_arg
@@ -198,9 +221,10 @@ or
.El
.Ss Parser internals
The following headers require inclusion of a parser interface header
-before they can be included. All parser interface headers should
-precede all parser internal headers. When any parser internal headers
-are included, the same file should not include any formatter headers.
+before they can be included.
+All parser interface headers should precede all parser internal headers.
+When any parser internal headers are included, the same file should
+not include any formatter headers.
.Bl -tag -width Ds
.It Qq Pa libmandoc.h
Requires
@@ -271,6 +295,10 @@ from
as opaque types for function prototypes.
.It Qq Pa libmdoc.h
Requires
+.Qq Pa roff.h
+for
+.Vt enum roff_tok
+and
.Qq Pa mdoc.h
for
.Vt enum mdoc_*
@@ -303,6 +331,11 @@ When this header is included, the same file should not include
or
.Pa libroff.h .
.It Qq Pa libman.h
+Requires
+.Qq Pa roff.h
+for
+.Vt enum roff_tok .
+.Pp
Provides
.Vt struct man_macro
and some functions internal to the
@@ -405,6 +438,7 @@ Provides
.Vt enum termtype ,
.Vt struct termp_tbl ,
.Vt struct termp ,
+.Fn roff_term_pre ,
and many terminal formatting functions.
.Pp
Uses the opaque type
@@ -419,6 +453,8 @@ from
.Pa mandoc.h
and
.Vt struct roff_meta
+and
+.Vt struct roff_node
from
.Pa roff.h
as opaque types for function prototypes.
@@ -431,10 +467,7 @@ or
Requires
.In sys/types.h
for
-.Vt size_t ,
-.In stdio.h
-for
-.Dv BUFSIZ ,
+.Vt size_t
and
.Qq Pa out.h
for
@@ -450,8 +483,21 @@ Provides
.Vt struct tagq ,
.Vt struct htmlpair ,
.Vt struct html ,
+.Fn roff_html_pre ,
and many HTML formatting functions.
.Pp
+Uses
+.Vt struct tbl_span
+and
+.Vt struct eqn
+from
+.Pa mandoc.h
+and
+.Vt struct roff_node
+from
+.Pa roff.h
+as opaque types for function prototypes.
+.Pp
When this header is included, the same file should not include
.Pa term.h
or
@@ -506,8 +552,7 @@ Provides
.Vt struct manpage ,
.Vt struct mansearch ,
and the functions
-.Fn mansearch_setup ,
-.Fn mansearch ,
+.Fn mansearch
and
.Fn mansearch_free .
.Pp
diff --git a/contrib/mdocml/mandoc_html.3 b/contrib/mdocml/mandoc_html.3
index 3b48eb00426e..bd3f1b585552 100644
--- a/contrib/mdocml/mandoc_html.3
+++ b/contrib/mdocml/mandoc_html.3
@@ -1,4 +1,4 @@
-.\" $Id: mandoc_html.3,v 1.5 2017/01/28 22:36:38 schwarze Exp $
+.\" $Id: mandoc_html.3,v 1.8 2017/05/12 17:58:21 schwarze Exp $
.\"
.\" Copyright (c) 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 28 2017 $
+.Dd $Mdocdate: May 12 2017 $
.Dt MANDOC_HTML 3
.Os
.Sh NAME
@@ -48,6 +48,14 @@
.Fa "struct html *h"
.Fa "const char *word"
.Fc
+.Ft char *
+.Fo html_make_id
+.Fa "const struct roff_node *n"
+.Fc
+.Ft int
+.Fo html_strlen
+.Fa "const char *cp"
+.Fc
.Sh DESCRIPTION
The mandoc HTML formatter is not a formal library.
However, as it is compiled into more than one program, in particular
@@ -145,6 +153,11 @@ the respective attribute is not written.
Print a
.Cm class
attribute.
+This attribute letter can optionally be followed by the modifier letter
+.Cm T .
+In that case, a
+.Cm title
+attribute with the same value is also printed.
.It Cm h
Print a
.Cm href
@@ -191,7 +204,7 @@ Instead, the rest of the format string consists of pairs of
argument type letters and style name letters.
.El
.Pp
-Argument type letters each require on argument as follows:
+Argument type letters each require one argument as follows:
.Bl -tag -width 1n -offset indent
.It Cm h
Requires one
@@ -220,10 +233,18 @@ width specifier.
If the argument is
.Dv NULL ,
nothing is printed for this pair.
-.It Cm W
-Similar to
-.Cm w ,
-but makes the width negative by multiplying it with \(mi1.
+.Pp
+The
+.Cm w
+argument type letter can optionally be followed by one or two
+modifier letters.
+The modifier
+.Cm +
+increases the width by 10% to make even bold text fit
+and adds two units for padding between columns.
+The modifier
+.Cm \-
+makes the width negative by multiplying it with \-1.
.El
.Pp
Style name letters decide what to do with the preceding argument:
@@ -301,8 +322,27 @@ and
.Fn print_tagq
functions.
.Pp
+The function
+.Fn html_make_id
+takes a node containing one or more text children
+and returns a newly allocated string containing the concatenation
+of the child strings, with blanks replaced by underscores.
+If the node
+.Fa n
+contains any non-text child node,
+.Fn html_make_id
+returns
+.Dv NULL
+instead.
+The caller is responsible for freeing the returned string.
+.Pp
+The function
+.Fn html_strlen
+counts the number of characters in
+.Fa cp .
+It is used as a crude estimate of the width needed to display a string.
+.Pp
The functions
-.Fn html_strlen ,
.Fn print_eqn ,
.Fn print_tbl ,
and
diff --git a/contrib/mdocml/mandocd.8 b/contrib/mdocml/mandocd.8
index 678c7dc34ce3..2ea18cfc9f07 100644
--- a/contrib/mdocml/mandocd.8
+++ b/contrib/mdocml/mandocd.8
@@ -1,4 +1,4 @@
-.\" $Id: mandocd.8,v 1.1 2017/02/06 19:04:21 schwarze Exp $
+.\" $Id: mandocd.8,v 1.2 2017/03/18 19:56:01 schwarze Exp $
.\"
.\" Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: February 6 2017 $
+.Dd $Mdocdate: March 18 2017 $
.Dt MANDOCD 8
.Os
.Sh NAME
@@ -85,7 +85,7 @@ Override the default operating system
.Ar name
for the
.Xr mdoc 7
-.Ic Os
+.Ic \&Os
and for the
.Xr man 7
.Ic TH
diff --git a/contrib/mdocml/mandocdb.c b/contrib/mdocml/mandocdb.c
index 3b26ca964964..b9e4fb1c8132 100644
--- a/contrib/mdocml/mandocdb.c
+++ b/contrib/mdocml/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.244 2017/02/17 14:45:55 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.250 2017/05/17 22:27:12 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -183,8 +183,7 @@ static struct ohash names; /* table of all names */
static struct ohash strings; /* table of all strings */
static uint64_t name_mask;
-static const struct mdoc_handler mdocs[MDOC_MAX] = {
- { NULL, 0, 0 }, /* Ap */
+static const struct mdoc_handler __mdocs[MDOC_MAX - MDOC_Dd] = {
{ NULL, 0, NODE_NOPRT }, /* Dd */
{ NULL, 0, NODE_NOPRT }, /* Dt */
{ NULL, 0, NODE_NOPRT }, /* Os */
@@ -200,6 +199,7 @@ static const struct mdoc_handler mdocs[MDOC_MAX] = {
{ NULL, 0, 0 }, /* It */
{ NULL, 0, 0 }, /* Ad */
{ NULL, TYPE_An, 0 }, /* An */
+ { NULL, 0, 0 }, /* Ap */
{ NULL, TYPE_Ar, 0 }, /* Ar */
{ NULL, TYPE_Cd, 0 }, /* Cd */
{ NULL, TYPE_Cm, 0 }, /* Cm */
@@ -302,12 +302,10 @@ static const struct mdoc_handler mdocs[MDOC_MAX] = {
{ NULL, 0, 0 }, /* En */
{ NULL, TYPE_Dx, NODE_NOSRC }, /* Dx */
{ NULL, 0, 0 }, /* %Q */
- { NULL, 0, 0 }, /* br */
- { NULL, 0, 0 }, /* sp */
{ NULL, 0, 0 }, /* %U */
{ NULL, 0, 0 }, /* Ta */
- { NULL, 0, 0 }, /* ll */
};
+static const struct mdoc_handler *const mdocs = __mdocs - MDOC_Dd;
int
@@ -1211,7 +1209,7 @@ mpages_merge(struct dba *dba, struct mparse *mp)
} else if (man != NULL && man->macroset == MACROSET_MAN) {
man_validate(man);
if (*man->meta.msec != '\0' ||
- *man->meta.msec != '\0') {
+ *man->meta.title != '\0') {
mpage->form = FORM_SRC;
mpage->sec = mandoc_strdup(man->meta.msec);
mpage->arch = mandoc_strdup(mlink->arch);
@@ -1545,25 +1543,26 @@ parse_mdoc(struct mpage *mpage, const struct roff_meta *meta,
const struct roff_node *n)
{
- assert(NULL != n);
- for (n = n->child; NULL != n; n = n->next) {
- if (n->flags & mdocs[n->tok].taboo)
+ for (n = n->child; n != NULL; n = n->next) {
+ if (n->tok == TOKEN_NONE ||
+ n->tok < ROFF_MAX ||
+ n->flags & mdocs[n->tok].taboo)
continue;
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
switch (n->type) {
case ROFFT_ELEM:
case ROFFT_BLOCK:
case ROFFT_HEAD:
case ROFFT_BODY:
case ROFFT_TAIL:
- if (NULL != mdocs[n->tok].fp)
- if (0 == (*mdocs[n->tok].fp)(mpage, meta, n))
- break;
+ if (mdocs[n->tok].fp != NULL &&
+ (*mdocs[n->tok].fp)(mpage, meta, n) == 0)
+ break;
if (mdocs[n->tok].mask)
putmdockey(mpage, n->child,
mdocs[n->tok].mask, mdocs[n->tok].taboo);
break;
default:
- assert(n->type != ROFFT_ROOT);
continue;
}
if (NULL != n->child)
@@ -2123,6 +2122,23 @@ dbwrite(struct dba *dba)
int status;
pid_t child;
+ /*
+ * Do not write empty databases, and delete existing ones
+ * when makewhatis -u causes them to become empty.
+ */
+
+ dba_array_start(dba->pages);
+ if (dba_array_next(dba->pages) == NULL) {
+ if (unlink(MANDOC_DB) == -1)
+ say(MANDOC_DB, "&unlink");
+ return;
+ }
+
+ /*
+ * Build the database in a temporary file,
+ * then atomically move it into place.
+ */
+
if (dba_write(MANDOC_DB "~", dba) != -1) {
if (rename(MANDOC_DB "~", MANDOC_DB) == -1) {
exitcode = (int)MANDOCLEVEL_SYSERR;
@@ -2132,6 +2148,11 @@ dbwrite(struct dba *dba)
return;
}
+ /*
+ * We lack write permission and cannot replace the database
+ * file, but let's at least check whether the data changed.
+ */
+
(void)strlcpy(tfn, "/tmp/mandocdb.XXXXXXXX", sizeof(tfn));
if (mkdtemp(tfn) == NULL) {
exitcode = (int)MANDOCLEVEL_SYSERR;
diff --git a/contrib/mdocml/manpage.c b/contrib/mdocml/manpage.c
deleted file mode 100644
index af7d3db23023..000000000000
--- a/contrib/mdocml/manpage.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* $Id: manpage.c,v 1.14 2016/07/09 15:24:19 schwarze Exp $ */
-/*
- * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013 Ingo Schwarze <schwarze@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#include "config.h"
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "manconf.h"
-#include "mansearch.h"
-
-static void show(const char *, const char *);
-
-int
-main(int argc, char *argv[])
-{
- int ch, term;
- size_t i, sz, linesz;
- ssize_t len;
- struct mansearch search;
- struct manpage *res;
- char *conf_file, *defpaths, *auxpaths, *line;
- char buf[PATH_MAX];
- const char *cmd;
- struct manconf conf;
- char *progname;
- extern char *optarg;
- extern int optind;
-
- term = isatty(STDIN_FILENO) && isatty(STDOUT_FILENO);
-
- progname = strrchr(argv[0], '/');
- if (progname == NULL)
- progname = argv[0];
- else
- ++progname;
-
- auxpaths = defpaths = conf_file = NULL;
- memset(&conf, 0, sizeof(conf));
- memset(&search, 0, sizeof(struct mansearch));
-
- while (-1 != (ch = getopt(argc, argv, "C:M:m:S:s:")))
- switch (ch) {
- case ('C'):
- conf_file = optarg;
- break;
- case ('M'):
- defpaths = optarg;
- break;
- case ('m'):
- auxpaths = optarg;
- break;
- case ('S'):
- search.arch = optarg;
- break;
- case ('s'):
- search.sec = optarg;
- break;
- default:
- goto usage;
- }
-
- argc -= optind;
- argv += optind;
-
- if (0 == argc)
- goto usage;
-
- search.outkey = "Nd";
- search.argmode = ARG_EXPR;
-
- manconf_parse(&conf, conf_file, defpaths, auxpaths);
- ch = mansearch(&search, &conf.manpath, argc, argv, &res, &sz);
- manconf_free(&conf);
-
- if (0 == ch)
- goto usage;
-
- if (0 == sz) {
- free(res);
- return EXIT_FAILURE;
- } else if (1 == sz && term) {
- i = 1;
- goto show;
- } else if (NULL == res)
- return EXIT_FAILURE;
-
- for (i = 0; i < sz; i++) {
- printf("%6zu %s: %s\n",
- i + 1, res[i].names, res[i].output);
- free(res[i].names);
- free(res[i].output);
- }
-
- if (0 == term) {
- for (i = 0; i < sz; i++)
- free(res[i].file);
- free(res);
- return EXIT_SUCCESS;
- }
-
- i = 1;
- printf("Enter a choice [1]: ");
- fflush(stdout);
-
- line = NULL;
- linesz = 0;
- if ((len = getline(&line, &linesz, stdin)) != -1) {
- if ('\n' == line[--len] && len > 0) {
- line[len] = '\0';
- if ((i = atoi(line)) < 1 || i > sz)
- i = 0;
- }
- }
- free(line);
-
- if (0 == i) {
- for (i = 0; i < sz; i++)
- free(res[i].file);
- free(res);
- return EXIT_SUCCESS;
- }
-show:
- cmd = res[i - 1].form ? "mandoc" : "cat";
- strlcpy(buf, res[i - 1].file, PATH_MAX);
- for (i = 0; i < sz; i++)
- free(res[i].file);
- free(res);
-
- show(cmd, buf);
- /* NOTREACHED */
-usage:
- fprintf(stderr, "usage: %s [-C conf] "
- "[-M paths] "
- "[-m paths] "
- "[-S arch] "
- "[-s section] "
- "expr ...\n",
- progname);
- return EXIT_FAILURE;
-}
-
-static void
-show(const char *cmd, const char *file)
-{
- int fds[2];
- pid_t pid;
-
- if (-1 == pipe(fds)) {
- perror(NULL);
- exit(EXIT_FAILURE);
- }
-
- if (-1 == (pid = fork())) {
- perror(NULL);
- exit(EXIT_FAILURE);
- } else if (pid > 0) {
- dup2(fds[0], STDIN_FILENO);
- close(fds[1]);
- cmd = NULL != getenv("MANPAGER") ?
- getenv("MANPAGER") :
- (NULL != getenv("PAGER") ?
- getenv("PAGER") : "more");
- execlp(cmd, cmd, (char *)NULL);
- perror(cmd);
- exit(EXIT_FAILURE);
- }
-
- dup2(fds[1], STDOUT_FILENO);
- close(fds[0]);
- execlp(cmd, cmd, file, (char *)NULL);
- perror(cmd);
- exit(EXIT_FAILURE);
-}
diff --git a/contrib/mdocml/mansearch.3 b/contrib/mdocml/mansearch.3
index 051f9aa2a8e1..b94815a02b45 100644
--- a/contrib/mdocml/mansearch.3
+++ b/contrib/mdocml/mansearch.3
@@ -1,4 +1,4 @@
-.\" $Id: mansearch.3,v 1.4 2015/03/27 17:37:25 schwarze Exp $
+.\" $Id: mansearch.3,v 1.5 2017/03/30 22:22:05 schwarze Exp $
.\"
.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,28 +14,22 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: March 27 2015 $
+.Dd $Mdocdate: March 30 2017 $
.Dt MANSEARCH 3
.Os
.Sh NAME
-.Nm mansearch ,
-.Nm mansearch_setup
+.Nm mansearch
.Nd search manual page databases
.Sh SYNOPSIS
.In stdint.h
.In manconf.h
.In mansearch.h
.Ft int
-.Fo mansearch_setup
-.Fa "int start"
-.Fc
-.Ft int
.Fo mansearch
.Fa "const struct mansearch *search"
.Fa "const struct manpaths *paths"
.Fa "int argc"
.Fa "char *argv[]"
-.Fa "const char *outkey"
.Fa "struct manpage **res"
.Fa "size_t *sz"
.Fc
@@ -44,7 +38,7 @@ The
.Fn mansearch
function returns information about manuals matching a search query from a
.Xr mandoc.db 5
-SQLite3 database.
+database.
.Pp
The query arguments are as follows:
.Bl -tag -width Ds
@@ -58,18 +52,6 @@ Directories to be searched, defined in
Search criteria, usually taken from the command line.
.El
.Pp
-The
-.Fa "const char *outkey"
-selects which data to return in the
-.Va output
-field of the
-.Fa res
-structures.
-It takes any of the macro keys defined in
-.Pa mansearch_const.c
-and described in
-.Xr apropos 1 .
-.Pp
The output arguments are as follows:
.Bl -tag -width Ds
.It Fa "struct manpage **res"
@@ -89,19 +71,6 @@ array itself.
Returns the number of result structures contained in
.Fa res .
.El
-.Pp
-To speed up searches, the
-.Fn mansearch_setup
-function can optionally be called with a
-.Fa start
-argument of 1 before
-.Fn mansearch
-to set up an SQLite3 pagecache.
-If it was called, it has to be called again with a
-.Fa start
-argument of 0 after the last call to
-.Fn mansearch
-to release the memory used for the pagecache.
.Sh IMPLEMENTATION NOTES
For each manual page tree, the search is done in two steps.
In the first step, a list of pages matching the search criteria is built.
@@ -112,103 +81,26 @@ array.
.Pp
All function mentioned here are defined in the file
.Pa mansearch.c .
-No functions except
-.Fn mansearch
-and
-.Fn sql_statement
-build any SQL code, and no functions except
-.Fn mansearch ,
-.Fn buildnames ,
-and
-.Fn buildoutput
-execute it.
.Ss Finding matches
-The query is built using the following grammar:
-.Bd -literal -offset indent
-<query> ::= "SELECT * FROM mpages WHERE" <condition>
-<condition> ::= "(" <condition> ")" |
- <condition> "OR" <condition> |
- <condition> "AND" <condition> |
- "desc" <operator> "?" |
- "id IN (SELECT pageid FROM" <subquery> ")"
-<subquery> ::= "names WHERE name" <operator> "?" |
- "keys WHERE key" <operator> "? AND bits & ?"
-<operator> ::= "MATCH" | "REGEXP"
-.Ed
-.Pp
-The MATCH and REGEXP operators are implemented by the functions
-.Fn sql_match
-and
-.Fn sql_regexp ,
-respectively.
-This is required because SQLite3 natively neither supports
-case-insensitive substring matching nor regular expression matching,
-but only string identity, shell globbing, and the weird home-brewed
-LIKE operator.
-.Pp
Command line parsing is done by the function
.Fn exprcomp
building a singly linked list of
.Vt expr
structures, using the helper functions
-.Fn exprterm
+.Fn expr_and
and
-.Fn exprspec .
-The resulting SQL statement is assembled by the function
-.Fn sql_statement
-and evaluated in the main loop of the
-.Fn mansearch
-function.
+.Fn exprterm .
.Ss Assembling the results
The names, sections, and architectures of the manuals found
are assembled into the
.Va names
field of the result structure by the function
-.Fn buildnames ,
-using the following query:
-.Pp
-.Dl "SELECT * FROM mlinks WHERE pageid=? ORDER BY sec, arch, name"
-.Pp
-If the
-.Fa outkey
-differs from
-.Qq Ic \&Nd ,
-the requested output data is assembled into the
-.Va output
-field of the result structure by the function
-.Fn buildoutput ,
-using the following query:
-.Pp
-.Dl "SELECT * FROM keys WHERE pageid=? AND bits & ?"
+.Fn buildnames .
.Sh FILES
.Bl -tag -width mandoc.db -compact
.It Pa mandoc.db
The manual page database.
.El
-.Sh EXAMPLES
-The simplest invocation
-.Pp
-.Dl apropos keyword
-.Pp
-results in the following SQL query:
-.Bd -literal
-SELECT * FROM mpages WHERE (
- id IN (SELECT pageid FROM names WHERE name MATCH 'keyword') OR
- desc MATCH 'keyword'
-);
-.Ed
-.Pp
-A more complicated request like
-.Pp
-.Dl apropos -s 2 Nm,Xr=getuid
-.Pp
-results in:
-.Bd -literal
-SELECT * FROM mpages WHERE (
- id IN (SELECT pageid FROM names WHERE name MATCH 'getuid') OR
- id IN (SELECT pageid FROM keys WHERE key MATCH 'getuid' AND bits & 4)
-) AND id IN (SELECT pageid FROM keys WHERE key REGEXP '^2$' AND bits & 2);
-.Ed
.Sh SEE ALSO
.Xr apropos 1 ,
.Xr mandoc.db 5 ,
@@ -223,6 +115,6 @@ subsystem first appeared in
A module to search manual page databases was first written by
.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
in 2011, at first using the Berkeley DB;
-he rewrote it for SQLite3 in 2012.
-The current version received major changes from
-.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
+he rewrote it for SQLite3 in 2012, and
+.An Ingo Schwarze Aq Mt schwarze@openbsd.org
+removed the dependency on SQLite3 in 2016.
diff --git a/contrib/mdocml/mansearch.c b/contrib/mdocml/mansearch.c
index 6e689bd35862..26a7c23f589c 100644
--- a/contrib/mdocml/mansearch.c
+++ b/contrib/mdocml/mansearch.c
@@ -1,7 +1,7 @@
/* $OpenBSD: mansearch.c,v 1.50 2016/07/09 15:23:36 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -67,9 +67,9 @@ static struct ohash *manmerge_term(struct expr *, struct ohash *);
static struct ohash *manmerge_or(struct expr *, struct ohash *);
static struct ohash *manmerge_and(struct expr *, struct ohash *);
static char *buildnames(const struct dbm_page *);
-static char *buildoutput(size_t, int32_t);
-static size_t lstlen(const char *);
-static void lstcat(char *, size_t *, const char *);
+static char *buildoutput(size_t, struct dbm_page *);
+static size_t lstlen(const char *, size_t);
+static void lstcat(char *, size_t *, const char *, const char *);
static int lstmatch(const char *, const char *);
static struct expr *exprcomp(const struct mansearch *,
int, char *[], int *);
@@ -155,7 +155,8 @@ mansearch(const struct mansearch *search,
chdir_status = 1;
if (dbm_open(MANDOC_DB) == -1) {
- warn("%s/%s", paths->paths[i], MANDOC_DB);
+ if (errno != ENOENT)
+ warn("%s/%s", paths->paths[i], MANDOC_DB);
continue;
}
@@ -181,9 +182,7 @@ mansearch(const struct mansearch *search,
mandoc_asprintf(&mpage->file, "%s/%s",
paths->paths[i], page->file + 1);
mpage->names = buildnames(page);
- mpage->output = (int)outkey == KEY_Nd ?
- mandoc_strdup(page->desc) :
- buildoutput(outkey, page->addr);
+ mpage->output = buildoutput(outkey, page);
mpage->ipath = i;
mpage->bits = rp->bits;
mpage->sec = *page->sect - '0';
@@ -404,16 +403,16 @@ buildnames(const struct dbm_page *page)
char *buf;
size_t i, sz;
- sz = lstlen(page->name) + 1 + lstlen(page->sect) +
- (page->arch == NULL ? 0 : 1 + lstlen(page->arch)) + 2;
+ sz = lstlen(page->name, 2) + 1 + lstlen(page->sect, 2) +
+ (page->arch == NULL ? 0 : 1 + lstlen(page->arch, 2)) + 2;
buf = mandoc_malloc(sz);
i = 0;
- lstcat(buf, &i, page->name);
+ lstcat(buf, &i, page->name, ", ");
buf[i++] = '(';
- lstcat(buf, &i, page->sect);
+ lstcat(buf, &i, page->sect, ", ");
if (page->arch != NULL) {
buf[i++] = '/';
- lstcat(buf, &i, page->arch);
+ lstcat(buf, &i, page->arch, ", ");
}
buf[i++] = ')';
buf[i++] = '\0';
@@ -423,11 +422,11 @@ buildnames(const struct dbm_page *page)
/*
* Count the buffer space needed to print the NUL-terminated
- * list of NUL-terminated strings, when printing two separator
+ * list of NUL-terminated strings, when printing sep separator
* characters between strings.
*/
static size_t
-lstlen(const char *cp)
+lstlen(const char *cp, size_t sep)
{
size_t sz;
@@ -435,7 +434,7 @@ lstlen(const char *cp)
if (cp[0] == '\0') {
if (cp[1] == '\0')
break;
- sz++;
+ sz += sep - 1;
} else if (cp[0] < ' ')
sz--;
cp++;
@@ -445,17 +444,20 @@ lstlen(const char *cp)
/*
* Print the NUL-terminated list of NUL-terminated strings
- * into the buffer, seperating strings with a comma and a blank.
+ * into the buffer, seperating strings with sep.
*/
static void
-lstcat(char *buf, size_t *i, const char *cp)
+lstcat(char *buf, size_t *i, const char *cp, const char *sep)
{
+ const char *s;
+
for (;;) {
if (cp[0] == '\0') {
if (cp[1] == '\0')
break;
- buf[(*i)++] = ',';
- buf[(*i)++] = ' ';
+ s = sep;
+ while (*s != '\0')
+ buf[(*i)++] = *s++;
} else if (cp[0] >= ' ')
buf[(*i)++] = cp[0];
cp++;
@@ -482,17 +484,46 @@ lstmatch(const char *want, const char *have)
}
/*
- * Build a list of values taken by the macro im
- * in the manual page with big-endian address addr.
+ * Build a list of values taken by the macro im in the manual page.
*/
static char *
-buildoutput(size_t im, int32_t addr)
+buildoutput(size_t im, struct dbm_page *page)
{
- const char *oldoutput, *sep;
+ const char *oldoutput, *sep, *input;
char *output, *newoutput, *value;
+ size_t sz, i;
+
+ switch (im) {
+ case KEY_Nd:
+ return mandoc_strdup(page->desc);
+ case KEY_Nm:
+ input = page->name;
+ break;
+ case KEY_sec:
+ input = page->sect;
+ break;
+ case KEY_arch:
+ input = page->arch;
+ if (input == NULL)
+ input = "all\0";
+ break;
+ default:
+ input = NULL;
+ break;
+ }
+
+ if (input != NULL) {
+ sz = lstlen(input, 3) + 1;
+ output = mandoc_malloc(sz);
+ i = 0;
+ lstcat(output, &i, input, " # ");
+ output[i++] = '\0';
+ assert(i == sz);
+ return output;
+ }
output = NULL;
- dbm_macro_bypage(im - 2, addr);
+ dbm_macro_bypage(im - 2, page->addr);
while ((value = dbm_macro_next()) != NULL) {
if (output == NULL) {
oldoutput = "";
@@ -642,6 +673,12 @@ exprterm(const struct mansearch *search, int argc, char *argv[], int *argi)
return e;
}
+ if (strcmp("-i", argv[*argi]) == 0 && *argi + 1 < argc) {
+ cs = 0;
+ ++*argi;
+ } else
+ cs = 1;
+
e = mandoc_calloc(1, sizeof(*e));
e->type = EXPR_TERM;
e->bits = 0;
diff --git a/contrib/mdocml/mansearch.h b/contrib/mdocml/mansearch.h
index 892c6e1e8a56..cc4f364f6932 100644
--- a/contrib/mdocml/mansearch.h
+++ b/contrib/mdocml/mansearch.h
@@ -1,7 +1,7 @@
-/* $Id: mansearch.h,v 1.27 2016/08/01 12:31:00 schwarze Exp $ */
+/* $Id: mansearch.h,v 1.28 2017/04/17 20:05:08 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -21,6 +21,9 @@
#define MANDOCDB_VERSION 1
#define MACRO_MAX 36
+#define KEY_arch 0
+#define KEY_sec 1
+#define KEY_Nm 38
#define KEY_Nd 39
#define KEY_MAX 40
diff --git a/contrib/mdocml/mdoc.7 b/contrib/mdocml/mdoc.7
index 6d95887736a1..c8e6941a6bac 100644
--- a/contrib/mdocml/mdoc.7
+++ b/contrib/mdocml/mdoc.7
@@ -1,4 +1,4 @@
-.\" $Id: mdoc.7,v 1.262 2017/02/16 14:38:12 schwarze Exp $
+.\" $Id: mdoc.7,v 1.264 2017/05/05 15:54:59 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010, 2011, 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: February 16 2017 $
+.Dd $Mdocdate: May 5 2017 $
.Dt MDOC 7
.Os
.Sh NAME
@@ -476,8 +476,6 @@ in the alphabetical
.It Sx \&Ap Ta apostrophe without surrounding whitespace (no arguments)
.It Sx \&Sm Ta switch horizontal spacing mode: Op Cm on | off
.It Sx \&Bk , \&Ek Ta keep block: Fl words
-.It Sx \&br Ta force output line break in text mode (no arguments)
-.It Sx \&sp Ta force vertical space: Op Ar height
.El
.Ss Semantic markup for command line utilities:
.Bl -column "Brq, Bro, Brc" description
@@ -2736,29 +2734,6 @@ Examples:
.Dl \&.Xr mandoc 1
.Dl \&.Xr mandoc 1 \&;
.Dl \&.Xr mandoc 1 \&Ns s behaviour
-.Ss \&br
-Emits a line-break.
-This macro should not be used; it is implemented for compatibility with
-historical manuals.
-.Pp
-Consider using
-.Sx \&Pp
-in the event of natural paragraph breaks.
-.Ss \&sp
-Emits vertical space.
-This macro should not be used; it is implemented for compatibility with
-historical manuals.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Sx \&sp Op Ar height
-.Pp
-The
-.Ar height
-argument is a scaling width as described in
-.Xr roff 7 .
-If unspecified,
-.Sx \&sp
-asserts a single vertical space.
.Sh MACRO SYNTAX
The syntax of a macro depends on its classification.
In this section,
@@ -3043,8 +3018,6 @@ then the macro accepts an arbitrary number of arguments.
.It Sx \&Va Ta Yes Ta Yes Ta n
.It Sx \&Vt Ta Yes Ta Yes Ta >0
.It Sx \&Xr Ta Yes Ta Yes Ta 2
-.It Sx \&br Ta \&No Ta \&No Ta 0
-.It Sx \&sp Ta \&No Ta \&No Ta 1
.El
.Ss Delimiters
When a macro argument consists of one single input character
diff --git a/contrib/mdocml/mdoc.c b/contrib/mdocml/mdoc.c
index 5be1e7810d55..d08a85259414 100644
--- a/contrib/mdocml/mdoc.c
+++ b/contrib/mdocml/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.260 2017/02/16 03:00:23 schwarze Exp $ */
+/* $Id: mdoc.c,v 1.266 2017/06/07 20:58:49 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -35,41 +35,6 @@
#include "roff_int.h"
#include "libmdoc.h"
-const char *const __mdoc_macronames[MDOC_MAX + 1] = {
- "text",
- "Ap", "Dd", "Dt", "Os",
- "Sh", "Ss", "Pp", "D1",
- "Dl", "Bd", "Ed", "Bl",
- "El", "It", "Ad", "An",
- "Ar", "Cd", "Cm", "Dv",
- "Er", "Ev", "Ex", "Fa",
- "Fd", "Fl", "Fn", "Ft",
- "Ic", "In", "Li", "Nd",
- "Nm", "Op", "Ot", "Pa",
- "Rv", "St", "Va", "Vt",
- "Xr", "%A", "%B", "%D",
- "%I", "%J", "%N", "%O",
- "%P", "%R", "%T", "%V",
- "Ac", "Ao", "Aq", "At",
- "Bc", "Bf", "Bo", "Bq",
- "Bsx", "Bx", "Db", "Dc",
- "Do", "Dq", "Ec", "Ef",
- "Em", "Eo", "Fx", "Ms",
- "No", "Ns", "Nx", "Ox",
- "Pc", "Pf", "Po", "Pq",
- "Qc", "Ql", "Qo", "Qq",
- "Re", "Rs", "Sc", "So",
- "Sq", "Sm", "Sx", "Sy",
- "Tn", "Ux", "Xc", "Xo",
- "Fo", "Fc", "Oo", "Oc",
- "Bk", "Ek", "Bt", "Hf",
- "Fr", "Ud", "Lb", "Lp",
- "Lk", "Mt", "Brq", "Bro",
- "Brc", "%C", "Es", "En",
- "Dx", "%Q", "br", "sp",
- "%U", "Ta", "ll",
-};
-
const char *const __mdoc_argnames[MDOC_ARG_MAX] = {
"split", "nosplit", "ragged",
"unfilled", "literal", "file",
@@ -80,9 +45,7 @@ const char *const __mdoc_argnames[MDOC_ARG_MAX] = {
"width", "compact", "std",
"filled", "words", "emphasis",
"symbolic", "nested", "centered"
- };
-
-const char * const *mdoc_macronames = __mdoc_macronames + 1;
+};
const char * const *mdoc_argnames = __mdoc_argnames;
static int mdoc_ptext(struct roff_man *, int, char *, int);
@@ -119,13 +82,12 @@ mdoc_parseln(struct roff_man *mdoc, int ln, char *buf, int offs)
void
mdoc_macro(MACRO_PROT_ARGS)
{
- assert(tok > TOKEN_NONE && tok < MDOC_MAX);
-
+ assert(tok >= MDOC_Dd && tok < MDOC_MAX);
(*mdoc_macros[tok].fp)(mdoc, tok, line, ppos, pos, buf);
}
void
-mdoc_tail_alloc(struct roff_man *mdoc, int line, int pos, int tok)
+mdoc_tail_alloc(struct roff_man *mdoc, int line, int pos, enum roff_tok tok)
{
struct roff_node *p;
@@ -135,8 +97,8 @@ mdoc_tail_alloc(struct roff_man *mdoc, int line, int pos, int tok)
}
struct roff_node *
-mdoc_endbody_alloc(struct roff_man *mdoc, int line, int pos, int tok,
- struct roff_node *body)
+mdoc_endbody_alloc(struct roff_man *mdoc, int line, int pos,
+ enum roff_tok tok, struct roff_node *body)
{
struct roff_node *p;
@@ -153,7 +115,7 @@ mdoc_endbody_alloc(struct roff_man *mdoc, int line, int pos, int tok,
struct roff_node *
mdoc_block_alloc(struct roff_man *mdoc, int line, int pos,
- int tok, struct mdoc_arg *args)
+ enum roff_tok tok, struct mdoc_arg *args)
{
struct roff_node *p;
@@ -180,7 +142,7 @@ mdoc_block_alloc(struct roff_man *mdoc, int line, int pos,
void
mdoc_elem_alloc(struct roff_man *mdoc, int line, int pos,
- int tok, struct mdoc_arg *args)
+ enum roff_tok tok, struct mdoc_arg *args)
{
struct roff_node *p;
@@ -291,7 +253,7 @@ mdoc_ptext(struct roff_man *mdoc, int line, char *buf, int offs)
* blank lines aren't allowed, but enough manuals assume this
* behaviour that we want to work around it.
*/
- roff_elem_alloc(mdoc, line, offs, MDOC_sp);
+ roff_elem_alloc(mdoc, line, offs, ROFF_sp);
mdoc->last->flags |= NODE_VALID | NODE_ENDED;
mdoc->next = ROFF_NEXT_SIBLING;
return 1;
@@ -316,14 +278,20 @@ mdoc_ptext(struct roff_man *mdoc, int line, char *buf, int offs)
for (c = buf + offs; c != NULL; c = strchr(c + 1, '.')) {
if (c - buf < offs + 2)
continue;
- if (end - c < 4)
+ if (end - c < 3)
break;
- if (isalpha((unsigned char)c[-2]) &&
- isalpha((unsigned char)c[-1]) &&
- c[1] == ' ' &&
- isupper((unsigned char)(c[2] == ' ' ? c[3] : c[2])) &&
- (c[-2] != 'n' || c[-1] != 'c') &&
- (c[-2] != 'v' || c[-1] != 's'))
+ if (c[1] != ' ' ||
+ isalpha((unsigned char)c[-2]) == 0 ||
+ isalpha((unsigned char)c[-1]) == 0 ||
+ (c[-2] == 'n' && c[-1] == 'c') ||
+ (c[-2] == 'v' && c[-1] == 's'))
+ continue;
+ c += 2;
+ if (*c == ' ')
+ c++;
+ if (*c == ' ')
+ c++;
+ if (isupper((unsigned char)(*c)))
mandoc_msg(MANDOCERR_EOS, mdoc->parse,
line, (int)(c - buf), NULL);
}
@@ -340,25 +308,18 @@ mdoc_pmacro(struct roff_man *mdoc, int ln, char *buf, int offs)
{
struct roff_node *n;
const char *cp;
- int tok;
- int i, sv;
- char mac[5];
+ size_t sz;
+ enum roff_tok tok;
+ int sv;
- sv = offs;
-
- /*
- * Copy the first word into a nil-terminated buffer.
- * Stop when a space, tab, escape, or eoln is encountered.
- */
-
- i = 0;
- while (i < 4 && strchr(" \t\\", buf[offs]) == NULL)
- mac[i++] = buf[offs++];
-
- mac[i] = '\0';
-
- tok = (i > 1 && i < 4) ? mdoc_hash_find(mac) : TOKEN_NONE;
+ /* Determine the line macro. */
+ sv = offs;
+ tok = TOKEN_NONE;
+ for (sz = 0; sz < 4 && strchr(" \t\\", buf[offs]) == NULL; sz++)
+ offs++;
+ if (sz == 2 || sz == 3)
+ tok = roffhash_find(mdoc->mdocmac, buf + sv, sz);
if (tok == TOKEN_NONE) {
mandoc_msg(MANDOCERR_MACRO, mdoc->parse,
ln, sv, buf + sv - 1);
@@ -382,7 +343,7 @@ mdoc_pmacro(struct roff_man *mdoc, int ln, char *buf, int offs)
/* Jump to the next non-whitespace word. */
- while (buf[offs] && ' ' == buf[offs])
+ while (buf[offs] == ' ')
offs++;
/*
diff --git a/contrib/mdocml/mdoc.h b/contrib/mdocml/mdoc.h
index ebe4391ef610..1628e0c80c94 100644
--- a/contrib/mdocml/mdoc.h
+++ b/contrib/mdocml/mdoc.h
@@ -1,4 +1,4 @@
-/* $Id: mdoc.h,v 1.144 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: mdoc.h,v 1.145 2017/04/24 23:06:18 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -16,131 +16,6 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#define MDOC_Ap 0
-#define MDOC_Dd 1
-#define MDOC_Dt 2
-#define MDOC_Os 3
-#define MDOC_Sh 4
-#define MDOC_Ss 5
-#define MDOC_Pp 6
-#define MDOC_D1 7
-#define MDOC_Dl 8
-#define MDOC_Bd 9
-#define MDOC_Ed 10
-#define MDOC_Bl 11
-#define MDOC_El 12
-#define MDOC_It 13
-#define MDOC_Ad 14
-#define MDOC_An 15
-#define MDOC_Ar 16
-#define MDOC_Cd 17
-#define MDOC_Cm 18
-#define MDOC_Dv 19
-#define MDOC_Er 20
-#define MDOC_Ev 21
-#define MDOC_Ex 22
-#define MDOC_Fa 23
-#define MDOC_Fd 24
-#define MDOC_Fl 25
-#define MDOC_Fn 26
-#define MDOC_Ft 27
-#define MDOC_Ic 28
-#define MDOC_In 29
-#define MDOC_Li 30
-#define MDOC_Nd 31
-#define MDOC_Nm 32
-#define MDOC_Op 33
-#define MDOC_Ot 34
-#define MDOC_Pa 35
-#define MDOC_Rv 36
-#define MDOC_St 37
-#define MDOC_Va 38
-#define MDOC_Vt 39
-#define MDOC_Xr 40
-#define MDOC__A 41
-#define MDOC__B 42
-#define MDOC__D 43
-#define MDOC__I 44
-#define MDOC__J 45
-#define MDOC__N 46
-#define MDOC__O 47
-#define MDOC__P 48
-#define MDOC__R 49
-#define MDOC__T 50
-#define MDOC__V 51
-#define MDOC_Ac 52
-#define MDOC_Ao 53
-#define MDOC_Aq 54
-#define MDOC_At 55
-#define MDOC_Bc 56
-#define MDOC_Bf 57
-#define MDOC_Bo 58
-#define MDOC_Bq 59
-#define MDOC_Bsx 60
-#define MDOC_Bx 61
-#define MDOC_Db 62
-#define MDOC_Dc 63
-#define MDOC_Do 64
-#define MDOC_Dq 65
-#define MDOC_Ec 66
-#define MDOC_Ef 67
-#define MDOC_Em 68
-#define MDOC_Eo 69
-#define MDOC_Fx 70
-#define MDOC_Ms 71
-#define MDOC_No 72
-#define MDOC_Ns 73
-#define MDOC_Nx 74
-#define MDOC_Ox 75
-#define MDOC_Pc 76
-#define MDOC_Pf 77
-#define MDOC_Po 78
-#define MDOC_Pq 79
-#define MDOC_Qc 80
-#define MDOC_Ql 81
-#define MDOC_Qo 82
-#define MDOC_Qq 83
-#define MDOC_Re 84
-#define MDOC_Rs 85
-#define MDOC_Sc 86
-#define MDOC_So 87
-#define MDOC_Sq 88
-#define MDOC_Sm 89
-#define MDOC_Sx 90
-#define MDOC_Sy 91
-#define MDOC_Tn 92
-#define MDOC_Ux 93
-#define MDOC_Xc 94
-#define MDOC_Xo 95
-#define MDOC_Fo 96
-#define MDOC_Fc 97
-#define MDOC_Oo 98
-#define MDOC_Oc 99
-#define MDOC_Bk 100
-#define MDOC_Ek 101
-#define MDOC_Bt 102
-#define MDOC_Hf 103
-#define MDOC_Fr 104
-#define MDOC_Ud 105
-#define MDOC_Lb 106
-#define MDOC_Lp 107
-#define MDOC_Lk 108
-#define MDOC_Mt 109
-#define MDOC_Brq 110
-#define MDOC_Bro 111
-#define MDOC_Brc 112
-#define MDOC__C 113
-#define MDOC_Es 114
-#define MDOC_En 115
-#define MDOC_Dx 116
-#define MDOC__Q 117
-#define MDOC_br 118
-#define MDOC_sp 119
-#define MDOC__U 120
-#define MDOC_Ta 121
-#define MDOC_ll 122
-#define MDOC_MAX 123
-
enum mdocargt {
MDOC_Split, /* -split */
MDOC_Nosplit, /* -nospli */
@@ -274,11 +149,7 @@ union mdoc_data {
struct mdoc_rs Rs;
};
-/* Names of macros. */
-extern const char *const *mdoc_macronames;
-
/* Names of macro args. Index is enum mdocargt. */
extern const char *const *mdoc_argnames;
-
void mdoc_validate(struct roff_man *);
diff --git a/contrib/mdocml/mdoc_argv.c b/contrib/mdocml/mdoc_argv.c
index b47c7dbdea34..db4c63f0d6d2 100644
--- a/contrib/mdocml/mdoc_argv.c
+++ b/contrib/mdocml/mdoc_argv.c
@@ -1,7 +1,7 @@
-/* $Id: mdoc_argv.c,v 1.109 2016/08/28 16:15:12 schwarze Exp $ */
+/* $Id: mdoc_argv.c,v 1.115 2017/05/30 16:22:03 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -144,8 +144,7 @@ static const enum mdocargt args_Bl[] = {
MDOC_ARG_MAX
};
-static const struct mdocarg mdocargs[MDOC_MAX] = {
- { ARGSFL_DELIM, NULL }, /* Ap */
+static const struct mdocarg __mdocargs[MDOC_MAX - MDOC_Dd] = {
{ ARGSFL_NONE, NULL }, /* Dd */
{ ARGSFL_NONE, NULL }, /* Dt */
{ ARGSFL_NONE, NULL }, /* Os */
@@ -161,6 +160,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = {
{ ARGSFL_NONE, NULL }, /* It */
{ ARGSFL_DELIM, NULL }, /* Ad */
{ ARGSFL_DELIM, args_An }, /* An */
+ { ARGSFL_DELIM, NULL }, /* Ap */
{ ARGSFL_DELIM, NULL }, /* Ar */
{ ARGSFL_DELIM, NULL }, /* Cd */
{ ARGSFL_DELIM, NULL }, /* Cm */
@@ -263,12 +263,10 @@ static const struct mdocarg mdocargs[MDOC_MAX] = {
{ ARGSFL_DELIM, NULL }, /* En */
{ ARGSFL_DELIM, NULL }, /* Dx */
{ ARGSFL_NONE, NULL }, /* %Q */
- { ARGSFL_NONE, NULL }, /* br */
- { ARGSFL_NONE, NULL }, /* sp */
{ ARGSFL_NONE, NULL }, /* %U */
{ ARGSFL_NONE, NULL }, /* Ta */
- { ARGSFL_NONE, NULL }, /* ll */
};
+static const struct mdocarg *const mdocargs = __mdocargs - MDOC_Dd;
/*
@@ -277,7 +275,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = {
* Some flags take no argument, some one, some multiple.
*/
void
-mdoc_argv(struct roff_man *mdoc, int line, int tok,
+mdoc_argv(struct roff_man *mdoc, int line, enum roff_tok tok,
struct mdoc_arg **reta, int *pos, char *buf)
{
struct mdoc_argv tmpv;
@@ -291,6 +289,7 @@ mdoc_argv(struct roff_man *mdoc, int line, int tok,
/* Which flags does this macro support? */
+ assert(tok >= MDOC_Dd && tok < MDOC_MAX);
argtable = mdocargs[tok].argvs;
if (argtable == NULL)
return;
@@ -415,7 +414,7 @@ argn_free(struct mdoc_arg *p, int iarg)
enum margserr
mdoc_args(struct roff_man *mdoc, int line, int *pos,
- char *buf, int tok, char **v)
+ char *buf, enum roff_tok tok, char **v)
{
struct roff_node *n;
char *v_local;
@@ -424,8 +423,6 @@ mdoc_args(struct roff_man *mdoc, int line, int *pos,
if (v == NULL)
v = &v_local;
fl = tok == TOKEN_NONE ? ARGSFL_NONE : mdocargs[tok].flags;
- if (tok != MDOC_It)
- return args(mdoc, line, pos, buf, fl, v);
/*
* We know that we're in an `It', so it's reasonable to expect
@@ -434,12 +431,15 @@ mdoc_args(struct roff_man *mdoc, int line, int *pos,
* safe fall-back into the default behaviour.
*/
- for (n = mdoc->last; n; n = n->parent)
- if (MDOC_Bl == n->tok)
- if (LIST_column == n->norm->Bl.type) {
+ if (tok == MDOC_It) {
+ for (n = mdoc->last; n != NULL; n = n->parent) {
+ if (n->tok != MDOC_Bl)
+ continue;
+ if (n->norm->Bl.type == LIST_column)
fl = ARGSFL_TABSEP;
- break;
- }
+ break;
+ }
+ }
return args(mdoc, line, pos, buf, fl, v);
}
@@ -555,14 +555,14 @@ args(struct roff_man *mdoc, int line, int *pos,
if ( ! (mdoc->flags & MDOC_PHRASE))
mandoc_msg(MANDOCERR_ARG_QUOTE,
mdoc->parse, line, *pos, NULL);
- return ARGS_QWORD;
+ return ARGS_WORD;
}
mdoc->flags &= ~MDOC_PHRASELIT;
buf[(*pos)++] = '\0';
if ('\0' == buf[*pos])
- return ARGS_QWORD;
+ return ARGS_WORD;
while (' ' == buf[*pos])
(*pos)++;
@@ -571,7 +571,7 @@ args(struct roff_man *mdoc, int line, int *pos,
mandoc_msg(MANDOCERR_SPACE_EOL, mdoc->parse,
line, *pos, NULL);
- return ARGS_QWORD;
+ return ARGS_WORD;
}
p = &buf[*pos];
diff --git a/contrib/mdocml/mdoc_hash.c b/contrib/mdocml/mdoc_hash.c
deleted file mode 100644
index cad3c2db1afb..000000000000
--- a/contrib/mdocml/mdoc_hash.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $Id: mdoc_hash.c,v 1.27 2016/07/15 18:03:45 schwarze Exp $ */
-/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#include "config.h"
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "mandoc.h"
-#include "roff.h"
-#include "mdoc.h"
-#include "libmandoc.h"
-#include "libmdoc.h"
-
-static unsigned char table[27 * 12];
-
-
-void
-mdoc_hash_init(void)
-{
- int i, j, major;
- const char *p;
-
- if (*table != '\0')
- return;
-
- memset(table, UCHAR_MAX, sizeof(table));
-
- for (i = 0; i < (int)MDOC_MAX; i++) {
- p = mdoc_macronames[i];
-
- if (isalpha((unsigned char)p[1]))
- major = 12 * (tolower((unsigned char)p[1]) - 97);
- else
- major = 12 * 26;
-
- for (j = 0; j < 12; j++)
- if (UCHAR_MAX == table[major + j]) {
- table[major + j] = (unsigned char)i;
- break;
- }
-
- assert(j < 12);
- }
-}
-
-int
-mdoc_hash_find(const char *p)
-{
- int major, i, j;
-
- if (0 == p[0])
- return TOKEN_NONE;
- if ( ! isalpha((unsigned char)p[0]) && '%' != p[0])
- return TOKEN_NONE;
-
- if (isalpha((unsigned char)p[1]))
- major = 12 * (tolower((unsigned char)p[1]) - 97);
- else if ('1' == p[1])
- major = 12 * 26;
- else
- return TOKEN_NONE;
-
- if (p[2] && p[3])
- return TOKEN_NONE;
-
- for (j = 0; j < 12; j++) {
- if (UCHAR_MAX == (i = table[major + j]))
- break;
- if (0 == strcmp(p, mdoc_macronames[i]))
- return i;
- }
-
- return TOKEN_NONE;
-}
diff --git a/contrib/mdocml/mdoc_html.c b/contrib/mdocml/mdoc_html.c
index e82451416699..5cbf68aa8f12 100644
--- a/contrib/mdocml/mdoc_html.c
+++ b/contrib/mdocml/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.271 2017/02/16 03:00:23 schwarze Exp $ */
+/* $Id: mdoc_html.c,v 1.289 2017/05/30 16:31:29 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -48,7 +48,7 @@ struct htmlmdoc {
void (*post)(MDOC_ARGS);
};
-static char *make_id(const struct roff_node *);
+static char *cond_id(const struct roff_node *);
static void print_mdoc_head(MDOC_ARGS);
static void print_mdoc_node(MDOC_ARGS);
static void print_mdoc_nodelist(MDOC_ARGS);
@@ -108,7 +108,6 @@ static int mdoc_rs_pre(MDOC_ARGS);
static int mdoc_sh_pre(MDOC_ARGS);
static int mdoc_skip_pre(MDOC_ARGS);
static int mdoc_sm_pre(MDOC_ARGS);
-static int mdoc_sp_pre(MDOC_ARGS);
static int mdoc_ss_pre(MDOC_ARGS);
static int mdoc_st_pre(MDOC_ARGS);
static int mdoc_sx_pre(MDOC_ARGS);
@@ -118,8 +117,7 @@ static int mdoc_vt_pre(MDOC_ARGS);
static int mdoc_xr_pre(MDOC_ARGS);
static int mdoc_xx_pre(MDOC_ARGS);
-static const struct htmlmdoc mdocs[MDOC_MAX] = {
- {mdoc_ap_pre, NULL}, /* Ap */
+static const struct htmlmdoc __mdocs[MDOC_MAX - MDOC_Dd] = {
{NULL, NULL}, /* Dd */
{NULL, NULL}, /* Dt */
{NULL, NULL}, /* Os */
@@ -135,6 +133,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_it_pre, NULL}, /* It */
{mdoc_ad_pre, NULL}, /* Ad */
{mdoc_an_pre, NULL}, /* An */
+ {mdoc_ap_pre, NULL}, /* Ap */
{mdoc_ar_pre, NULL}, /* Ar */
{mdoc_cd_pre, NULL}, /* Cd */
{mdoc_cm_pre, NULL}, /* Cm */
@@ -237,12 +236,10 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_quote_pre, mdoc_quote_post}, /* En */
{mdoc_xx_pre, NULL}, /* Dx */
{mdoc__x_pre, mdoc__x_post}, /* %Q */
- {mdoc_sp_pre, NULL}, /* br */
- {mdoc_sp_pre, NULL}, /* sp */
{mdoc__x_pre, mdoc__x_post}, /* %U */
{NULL, NULL}, /* Ta */
- {mdoc_skip_pre, NULL}, /* ll */
};
+static const struct htmlmdoc *const mdocs = __mdocs - MDOC_Dd;
/*
@@ -362,9 +359,9 @@ print_mdoc_node(MDOC_ARGS)
* Make sure that if we're in a literal mode already
* (i.e., within a <PRE>) don't print the newline.
*/
- if (' ' == *n->string && NODE_LINE & n->flags)
- if ( ! (HTML_LITERAL & h->flags))
- print_otag(h, TAG_BR, "");
+ if (*n->string == ' ' && n->flags & NODE_LINE &&
+ (h->flags & (HTML_LITERAL | HTML_NONEWLINE)) == 0)
+ print_otag(h, TAG_BR, "");
if (NODE_DELIMC & n->flags)
h->flags |= HTML_NOSPACE;
print_text(h, n->string);
@@ -393,7 +390,14 @@ print_mdoc_node(MDOC_ARGS)
t = h->tag;
}
assert(h->tblt == NULL);
- if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child))
+ if (n->tok < ROFF_MAX) {
+ roff_html_pre(h, n);
+ child = 0;
+ break;
+ }
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
+ if (mdocs[n->tok].pre != NULL &&
+ (n->end == ENDBODY_NOT || n->child != NULL))
child = (*mdocs[n->tok].pre)(meta, n, h);
break;
}
@@ -412,7 +416,9 @@ print_mdoc_node(MDOC_ARGS)
case ROFFT_EQN:
break;
default:
- if ( ! mdocs[n->tok].post || n->flags & NODE_ENDED)
+ if (n->tok < ROFF_MAX ||
+ mdocs[n->tok].post == NULL ||
+ n->flags & NODE_ENDED)
break;
(*mdocs[n->tok].post)(meta, n, h);
if (n->end != ENDBODY_NOT)
@@ -477,25 +483,19 @@ mdoc_root_pre(MDOC_ARGS)
}
static char *
-make_id(const struct roff_node *n)
+cond_id(const struct roff_node *n)
{
- const struct roff_node *nch;
- char *buf, *cp;
-
- for (nch = n->child; nch != NULL; nch = nch->next)
- if (nch->type != ROFFT_TEXT)
- return NULL;
-
- buf = NULL;
- deroff(&buf, n);
-
- /* http://www.w3.org/TR/html5/dom.html#the-id-attribute */
-
- for (cp = buf; *cp != '\0'; cp++)
- if (*cp == ' ')
- *cp = '_';
-
- return buf;
+ if (n->child != NULL &&
+ n->child->type == ROFFT_TEXT &&
+ (n->prev == NULL ||
+ (n->prev->type == ROFFT_TEXT &&
+ strcmp(n->prev->string, "|") == 0)) &&
+ (n->parent->tok == MDOC_It ||
+ (n->parent->tok == MDOC_Xo &&
+ n->parent->parent->prev == NULL &&
+ n->parent->parent->parent->tok == MDOC_It)))
+ return html_make_id(n);
+ return NULL;
}
static int
@@ -505,8 +505,10 @@ mdoc_sh_pre(MDOC_ARGS)
switch (n->type) {
case ROFFT_HEAD:
- id = make_id(n);
- print_otag(h, TAG_H1, "ci", "Sh", id);
+ id = html_make_id(n);
+ print_otag(h, TAG_H1, "cTi", "Sh", id);
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
free(id);
break;
case ROFFT_BODY:
@@ -527,8 +529,10 @@ mdoc_ss_pre(MDOC_ARGS)
if (n->type != ROFFT_HEAD)
return 1;
- id = make_id(n);
- print_otag(h, TAG_H2, "ci", "Ss", id);
+ id = html_make_id(n);
+ print_otag(h, TAG_H2, "cTi", "Ss", id);
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
free(id);
return 1;
}
@@ -536,9 +540,14 @@ mdoc_ss_pre(MDOC_ARGS)
static int
mdoc_fl_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Fl");
- print_text(h, "\\-");
+ char *id;
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Fl", id);
+ free(id);
+
+ print_text(h, "\\-");
if (!(n->child == NULL &&
(n->next == NULL ||
n->next->type == ROFFT_TEXT ||
@@ -551,7 +560,12 @@ mdoc_fl_pre(MDOC_ARGS)
static int
mdoc_cm_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Cm");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Cm", id);
+ free(id);
return 1;
}
@@ -564,22 +578,19 @@ mdoc_nd_pre(MDOC_ARGS)
/* XXX: this tag in theory can contain block elements. */
print_text(h, "\\(em");
- print_otag(h, TAG_SPAN, "c", "Nd");
+ print_otag(h, TAG_SPAN, "cT", "Nd");
return 1;
}
static int
mdoc_nm_pre(MDOC_ARGS)
{
- struct tag *t;
- int len;
-
switch (n->type) {
case ROFFT_HEAD:
print_otag(h, TAG_TD, "");
/* FALLTHROUGH */
case ROFFT_ELEM:
- print_otag(h, TAG_B, "c", "Nm");
+ print_otag(h, TAG_B, "cT", "Nm");
return 1;
case ROFFT_BODY:
print_otag(h, TAG_TD, "");
@@ -587,21 +598,8 @@ mdoc_nm_pre(MDOC_ARGS)
default:
break;
}
-
synopsis_pre(h, n);
print_otag(h, TAG_TABLE, "c", "Nm");
-
- for (len = 0, n = n->head->child; n; n = n->next)
- if (n->type == ROFFT_TEXT)
- len += html_strlen(n->string);
-
- if (len == 0 && meta->name != NULL)
- len = html_strlen(meta->name);
-
- t = print_otag(h, TAG_COLGROUP, "");
- print_otag(h, TAG_COL, "shw", len);
- print_otag(h, TAG_COL, "");
- print_tagq(h, t);
print_otag(h, TAG_TR, "");
return 1;
}
@@ -613,11 +611,11 @@ mdoc_xr_pre(MDOC_ARGS)
return 0;
if (h->base_man)
- print_otag(h, TAG_A, "chM", "Xr",
+ print_otag(h, TAG_A, "cThM", "Xr",
n->child->string, n->child->next == NULL ?
NULL : n->child->next->string);
else
- print_otag(h, TAG_A, "c", "Xr");
+ print_otag(h, TAG_A, "cT", "Xr");
n = n->child;
print_text(h, n->string);
@@ -646,7 +644,7 @@ mdoc_ns_pre(MDOC_ARGS)
static int
mdoc_ar_pre(MDOC_ARGS)
{
- print_otag(h, TAG_VAR, "c", "Ar");
+ print_otag(h, TAG_VAR, "cT", "Ar");
return 1;
}
@@ -666,7 +664,7 @@ mdoc_it_pre(MDOC_ARGS)
enum mdoc_list type;
bl = n->parent;
- while (bl != NULL && bl->tok != MDOC_Bl)
+ while (bl->tok != MDOC_Bl)
bl = bl->parent;
type = bl->norm->Bl.type;
@@ -751,8 +749,9 @@ mdoc_it_pre(MDOC_ARGS)
case ROFFT_HEAD:
if (h->style != NULL && !bl->norm->Bl.comp &&
(n->parent->prev == NULL ||
+ n->parent->prev->body == NULL ||
n->parent->prev->body->child != NULL)) {
- t = print_otag(h, TAG_DT, "csWl",
+ t = print_otag(h, TAG_DT, "csw+-l",
cattr, bl->norm->Bl.width);
print_text(h, "\\ ");
print_tagq(h, t);
@@ -760,7 +759,7 @@ mdoc_it_pre(MDOC_ARGS)
print_text(h, "\\ ");
print_tagq(h, t);
}
- print_otag(h, TAG_DT, "csWl", cattr,
+ print_otag(h, TAG_DT, "csw+-l", cattr,
bl->norm->Bl.width);
break;
case ROFFT_BODY:
@@ -823,7 +822,7 @@ mdoc_bl_pre(MDOC_ARGS)
t = print_otag(h, TAG_COLGROUP, "");
for (i = 0; i < bl->ncols - 1; i++)
- print_otag(h, TAG_COL, "sww", bl->cols[i]);
+ print_otag(h, TAG_COL, "sw+w", bl->cols[i]);
print_otag(h, TAG_COL, "swW", bl->cols[i]);
print_tagq(h, t);
return 0;
@@ -870,7 +869,7 @@ mdoc_bl_pre(MDOC_ARGS)
cattr = "Bl-tag";
if (bl->offs)
print_otag(h, TAG_DIV, "cswl", cattr, bl->offs);
- print_otag(h, TAG_DL, "cswl", cattr, bl->width);
+ print_otag(h, TAG_DL, "csw+l", cattr, bl->width);
return 1;
case LIST_column:
elemtype = TAG_TABLE;
@@ -894,14 +893,14 @@ mdoc_ex_pre(MDOC_ARGS)
static int
mdoc_st_pre(MDOC_ARGS)
{
- print_otag(h, TAG_SPAN, "c", "St");
+ print_otag(h, TAG_SPAN, "cT", "St");
return 1;
}
static int
mdoc_em_pre(MDOC_ARGS)
{
- print_otag(h, TAG_I, "c", "Em");
+ print_otag(h, TAG_I, "cT", "Em");
return 1;
}
@@ -924,8 +923,8 @@ mdoc_sx_pre(MDOC_ARGS)
{
char *id;
- id = make_id(n);
- print_otag(h, TAG_A, "chR", "Sx", id);
+ id = html_make_id(n);
+ print_otag(h, TAG_A, "cThR", "Sx", id);
free(id);
return 1;
}
@@ -991,9 +990,9 @@ mdoc_bd_pre(MDOC_ARGS)
* anyway, so don't sweat it.
*/
switch (nn->tok) {
+ case ROFF_br:
+ case ROFF_sp:
case MDOC_Sm:
- case MDOC_br:
- case MDOC_sp:
case MDOC_Bl:
case MDOC_D1:
case MDOC_Dl:
@@ -1021,7 +1020,7 @@ mdoc_bd_pre(MDOC_ARGS)
static int
mdoc_pa_pre(MDOC_ARGS)
{
- print_otag(h, TAG_I, "c", "Pa");
+ print_otag(h, TAG_I, "cT", "Pa");
return 1;
}
@@ -1052,7 +1051,7 @@ mdoc_an_pre(MDOC_ARGS)
if (n->sec == SEC_AUTHORS && ! (h->flags & HTML_NOSPLIT))
h->flags |= HTML_SPLIT;
- print_otag(h, TAG_SPAN, "c", "An");
+ print_otag(h, TAG_SPAN, "cT", "An");
return 1;
}
@@ -1060,28 +1059,49 @@ static int
mdoc_cd_pre(MDOC_ARGS)
{
synopsis_pre(h, n);
- print_otag(h, TAG_B, "c", "Cd");
+ print_otag(h, TAG_B, "cT", "Cd");
return 1;
}
static int
mdoc_dv_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Dv");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Dv", id);
+ free(id);
return 1;
}
static int
mdoc_ev_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Ev");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Ev", id);
+ free(id);
return 1;
}
static int
mdoc_er_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Er");
+ char *id;
+
+ id = n->sec == SEC_ERRORS &&
+ (n->parent->tok == MDOC_It ||
+ (n->parent->tok == MDOC_Bq &&
+ n->parent->parent->parent->tok == MDOC_It)) ?
+ html_make_id(n) : NULL;
+
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Er", id);
+ free(id);
return 1;
}
@@ -1092,12 +1112,12 @@ mdoc_fa_pre(MDOC_ARGS)
struct tag *t;
if (n->parent->tok != MDOC_Fo) {
- print_otag(h, TAG_VAR, "c", "Fa");
+ print_otag(h, TAG_VAR, "cT", "Fa");
return 1;
}
for (nn = n->child; nn; nn = nn->next) {
- t = print_otag(h, TAG_VAR, "c", "Fa");
+ t = print_otag(h, TAG_VAR, "cT", "Fa");
print_text(h, nn->string);
print_tagq(h, t);
if (nn->next) {
@@ -1128,11 +1148,11 @@ mdoc_fd_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
if (strcmp(n->string, "#include")) {
- print_otag(h, TAG_B, "c", "Fd");
+ print_otag(h, TAG_B, "cT", "Fd");
return 1;
}
- print_otag(h, TAG_B, "c", "In");
+ print_otag(h, TAG_B, "cT", "In");
print_text(h, n->string);
if (NULL != (n = n->next)) {
@@ -1146,10 +1166,10 @@ mdoc_fd_pre(MDOC_ARGS)
cp = strchr(buf, '\0') - 1;
if (cp >= buf && (*cp == '>' || *cp == '"'))
*cp = '\0';
- t = print_otag(h, TAG_A, "chI", "In", buf);
+ t = print_otag(h, TAG_A, "cThI", "In", buf);
free(buf);
} else
- t = print_otag(h, TAG_A, "c", "In");
+ t = print_otag(h, TAG_A, "cT", "In");
print_text(h, n->string);
print_tagq(h, t);
@@ -1176,7 +1196,7 @@ mdoc_vt_pre(MDOC_ARGS)
} else if (n->type == ROFFT_HEAD)
return 0;
- print_otag(h, TAG_VAR, "c", "Vt");
+ print_otag(h, TAG_VAR, "cT", "Vt");
return 1;
}
@@ -1184,7 +1204,7 @@ static int
mdoc_ft_pre(MDOC_ARGS)
{
synopsis_pre(h, n);
- print_otag(h, TAG_VAR, "c", "Ft");
+ print_otag(h, TAG_VAR, "cT", "Ft");
return 1;
}
@@ -1205,7 +1225,7 @@ mdoc_fn_pre(MDOC_ARGS)
ep = strchr(sp, ' ');
if (NULL != ep) {
- t = print_otag(h, TAG_VAR, "c", "Ft");
+ t = print_otag(h, TAG_VAR, "cT", "Ft");
while (ep) {
sz = MIN((int)(ep - sp), BUFSIZ - 1);
@@ -1218,7 +1238,7 @@ mdoc_fn_pre(MDOC_ARGS)
print_tagq(h, t);
}
- t = print_otag(h, TAG_B, "c", "Fn");
+ t = print_otag(h, TAG_B, "cT", "Fn");
if (sp)
print_text(h, sp);
@@ -1231,10 +1251,10 @@ mdoc_fn_pre(MDOC_ARGS)
for (n = n->child->next; n; n = n->next) {
if (NODE_SYNPRETTY & n->flags)
- t = print_otag(h, TAG_VAR, "css?", "Fa",
+ t = print_otag(h, TAG_VAR, "cTss?", "Fa",
"white-space", "nowrap");
else
- t = print_otag(h, TAG_VAR, "c", "Fa");
+ t = print_otag(h, TAG_VAR, "cT", "Fa");
print_text(h, n->string);
print_tagq(h, t);
if (n->next) {
@@ -1287,47 +1307,35 @@ mdoc_pp_pre(MDOC_ARGS)
}
static int
-mdoc_sp_pre(MDOC_ARGS)
-{
- struct roffsu su;
-
- SCALE_VS_INIT(&su, 1);
-
- if (MDOC_sp == n->tok) {
- if (NULL != (n = n->child)) {
- if ( ! a2roffsu(n->string, &su, SCALE_VS))
- su.scale = 1.0;
- else if (su.scale < 0.0)
- su.scale = 0.0;
- }
- } else
- su.scale = 0.0;
-
- print_otag(h, TAG_DIV, "suh", &su);
-
- /* So the div isn't empty: */
- print_text(h, "\\~");
-
- return 0;
-
-}
-
-static int
mdoc_lk_pre(MDOC_ARGS)
{
- if (NULL == (n = n->child))
- return 0;
-
- assert(n->type == ROFFT_TEXT);
+ const struct roff_node *link, *descr, *punct;
+ struct tag *t;
- print_otag(h, TAG_A, "ch", "Lk", n->string);
+ if ((link = n->child) == NULL)
+ return 0;
- if (NULL == n->next)
- print_text(h, n->string);
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
- for (n = n->next; n; n = n->next)
- print_text(h, n->string);
+ /* Link target and link text. */
+ t = print_otag(h, TAG_A, "cTh", "Lk", link->string);
+ for (descr = link->next; descr != punct; descr = descr->next) {
+ if (descr->flags & (NODE_DELIMC | NODE_DELIMO))
+ h->flags |= HTML_NOSPACE;
+ print_text(h, descr->string);
+ }
+ print_tagq(h, t);
+ /* Trailing punctuation. */
+ while (punct != NULL) {
+ h->flags |= HTML_NOSPACE;
+ print_text(h, punct->string);
+ punct = punct->next;
+ }
return 0;
}
@@ -1341,7 +1349,7 @@ mdoc_mt_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
mandoc_asprintf(&cp, "mailto:%s", n->string);
- t = print_otag(h, TAG_A, "ch", "Mt", cp);
+ t = print_otag(h, TAG_A, "cTh", "Mt", cp);
print_text(h, n->string);
print_tagq(h, t);
free(cp);
@@ -1369,7 +1377,7 @@ mdoc_fo_pre(MDOC_ARGS)
return 0;
assert(n->child->string);
- t = print_otag(h, TAG_B, "c", "Fn");
+ t = print_otag(h, TAG_B, "cT", "Fn");
print_text(h, n->child->string);
print_tagq(h, t);
return 0;
@@ -1393,7 +1401,7 @@ mdoc_in_pre(MDOC_ARGS)
struct tag *t;
synopsis_pre(h, n);
- print_otag(h, TAG_B, "c", "In");
+ print_otag(h, TAG_B, "cT", "In");
/*
* The first argument of the `In' gets special treatment as
@@ -1412,9 +1420,9 @@ mdoc_in_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
if (h->base_includes)
- t = print_otag(h, TAG_A, "chI", "In", n->string);
+ t = print_otag(h, TAG_A, "cThI", "In", n->string);
else
- t = print_otag(h, TAG_A, "c", "In");
+ t = print_otag(h, TAG_A, "cT", "In");
print_text(h, n->string);
print_tagq(h, t);
@@ -1435,14 +1443,19 @@ mdoc_in_pre(MDOC_ARGS)
static int
mdoc_ic_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Ic");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Ic", id);
+ free(id);
return 1;
}
static int
mdoc_va_pre(MDOC_ARGS)
{
- print_otag(h, TAG_VAR, "c", "Va");
+ print_otag(h, TAG_VAR, "cT", "Va");
return 1;
}
@@ -1487,7 +1500,12 @@ mdoc_bf_pre(MDOC_ARGS)
static int
mdoc_ms_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Ms");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Ms", id);
+ free(id);
return 1;
}
@@ -1516,28 +1534,38 @@ mdoc_rs_pre(MDOC_ARGS)
if (n->prev && SEC_SEE_ALSO == n->sec)
print_paragraph(h);
- print_otag(h, TAG_CITE, "c", "Rs");
+ print_otag(h, TAG_CITE, "cT", "Rs");
return 1;
}
static int
mdoc_no_pre(MDOC_ARGS)
{
- print_otag(h, TAG_SPAN, "c", "No");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_SPAN, "ci", "No", id);
+ free(id);
return 1;
}
static int
mdoc_li_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Li");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "ci", "Li", id);
+ free(id);
return 1;
}
static int
mdoc_sy_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Sy");
+ print_otag(h, TAG_B, "cT", "Sy");
return 1;
}
@@ -1547,7 +1575,7 @@ mdoc_lb_pre(MDOC_ARGS)
if (SEC_LIBRARY == n->sec && NODE_LINE & n->flags && n->prev)
print_otag(h, TAG_BR, "");
- print_otag(h, TAG_SPAN, "c", "Lb");
+ print_otag(h, TAG_SPAN, "cT", "Lb");
return 1;
}
diff --git a/contrib/mdocml/mdoc_macro.c b/contrib/mdocml/mdoc_macro.c
index 5ab9c412587b..b463d03e225c 100644
--- a/contrib/mdocml/mdoc_macro.c
+++ b/contrib/mdocml/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.217 2017/02/16 09:47:31 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.224 2017/05/30 16:22:03 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -46,21 +46,21 @@ static void phrase_ta(MACRO_PROT_ARGS);
static void append_delims(struct roff_man *, int, int *, char *);
static void dword(struct roff_man *, int, int, const char *,
enum mdelim, int);
-static int find_pending(struct roff_man *, int, int, int,
- struct roff_node *);
+static int find_pending(struct roff_man *, enum roff_tok,
+ int, int, struct roff_node *);
static int lookup(struct roff_man *, int, int, int, const char *);
static int macro_or_word(MACRO_PROT_ARGS, int);
static void break_intermediate(struct roff_node *,
- struct roff_node *);
-static int parse_rest(struct roff_man *, int, int, int *, char *);
-static int rew_alt(int);
-static void rew_elem(struct roff_man *, int);
+ struct roff_node *);
+static int parse_rest(struct roff_man *, enum roff_tok,
+ int, int *, char *);
+static enum roff_tok rew_alt(enum roff_tok);
+static void rew_elem(struct roff_man *, enum roff_tok);
static void rew_last(struct roff_man *, const struct roff_node *);
static void rew_pending(struct roff_man *,
const struct roff_node *);
-const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
- { in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ap */
+const struct mdoc_macro __mdoc_macros[MDOC_MAX - MDOC_Dd] = {
{ in_line_eoln, MDOC_PROLOGUE }, /* Dd */
{ in_line_eoln, MDOC_PROLOGUE }, /* Dt */
{ in_line_eoln, MDOC_PROLOGUE }, /* Os */
@@ -76,6 +76,8 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
{ blk_full, MDOC_PARSED | MDOC_JOIN }, /* It */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */
{ in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* An */
+ { in_line_argn, MDOC_CALLABLE | MDOC_PARSED |
+ MDOC_IGNDELIM | MDOC_JOIN }, /* Ap */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */
{ in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Cd */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */
@@ -196,14 +198,10 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* En */
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Dx */
{ in_line_eoln, MDOC_JOIN }, /* %Q */
- { in_line_eoln, 0 }, /* br */
- { in_line_eoln, 0 }, /* sp */
{ in_line_eoln, 0 }, /* %U */
{ phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
- { in_line_eoln, MDOC_PROLOGUE }, /* ll */
};
-
-const struct mdoc_macro * const mdoc_macros = __mdoc_macros;
+const struct mdoc_macro *const mdoc_macros = __mdoc_macros - MDOC_Dd;
/*
@@ -225,7 +223,7 @@ mdoc_endparse(struct roff_man *mdoc)
if (n->type == ROFFT_BLOCK &&
mdoc_macros[n->tok].flags & MDOC_EXPLICIT)
mandoc_msg(MANDOCERR_BLK_NOEND, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
/* Rewind to the first. */
@@ -240,20 +238,19 @@ mdoc_endparse(struct roff_man *mdoc)
static int
lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)
{
- int res;
+ enum roff_tok res;
if (mdoc->flags & MDOC_PHRASEQF) {
mdoc->flags &= ~MDOC_PHRASEQF;
return TOKEN_NONE;
}
if (from == TOKEN_NONE || mdoc_macros[from].flags & MDOC_PARSED) {
- res = mdoc_hash_find(p);
+ res = roffhash_find(mdoc->mdocmac, p, 0);
if (res != TOKEN_NONE) {
if (mdoc_macros[res].flags & MDOC_CALLABLE)
return res;
- if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll)
- mandoc_msg(MANDOCERR_MACRO_CALL,
- mdoc->parse, line, ppos, p);
+ mandoc_msg(MANDOCERR_MACRO_CALL,
+ mdoc->parse, line, ppos, p);
}
}
return TOKEN_NONE;
@@ -324,8 +321,8 @@ rew_pending(struct roff_man *mdoc, const struct roff_node *n)
* For a block closing macro, return the corresponding opening one.
* Otherwise, return the macro itself.
*/
-static int
-rew_alt(int tok)
+static enum roff_tok
+rew_alt(enum roff_tok tok)
{
switch (tok) {
case MDOC_Ac:
@@ -366,7 +363,7 @@ rew_alt(int tok)
}
static void
-rew_elem(struct roff_man *mdoc, int tok)
+rew_elem(struct roff_man *mdoc, enum roff_tok tok)
{
struct roff_node *n;
@@ -398,7 +395,7 @@ break_intermediate(struct roff_node *n, struct roff_node *breaker)
* the rew_pending() call closing out the sub-block.
*/
static int
-find_pending(struct roff_man *mdoc, int tok, int line, int ppos,
+find_pending(struct roff_man *mdoc, enum roff_tok tok, int line, int ppos,
struct roff_node *target)
{
struct roff_node *n;
@@ -420,8 +417,8 @@ find_pending(struct roff_man *mdoc, int tok, int line, int ppos,
else if ( ! (target->flags & NODE_ENDED)) {
mandoc_vmsg(MANDOCERR_BLK_NEST,
mdoc->parse, line, ppos,
- "%s breaks %s", mdoc_macronames[tok],
- mdoc_macronames[n->tok]);
+ "%s breaks %s", roff_name[tok],
+ roff_name[n->tok]);
mdoc_endbody_alloc(mdoc, line, ppos,
tok, target);
}
@@ -524,7 +521,8 @@ macro_or_word(MACRO_PROT_ARGS, int parsed)
mdoc_macros[tok].flags & MDOC_JOIN);
return 0;
} else {
- if (mdoc_macros[tok].fp == in_line_eoln)
+ if (tok != TOKEN_NONE &&
+ mdoc_macros[tok].fp == in_line_eoln)
rew_elem(mdoc, tok);
mdoc_macro(mdoc, ntok, line, ppos, pos, buf);
if (tok == TOKEN_NONE)
@@ -548,7 +546,7 @@ blk_exp_close(MACRO_PROT_ARGS)
int j, lastarg, maxargs, nl, pending;
enum margserr ac;
- int atok, ntok;
+ enum roff_tok atok, ntok;
char *p;
nl = MDOC_NEWLINE & mdoc->flags;
@@ -633,8 +631,7 @@ blk_exp_close(MACRO_PROT_ARGS)
mandoc_vmsg(MANDOCERR_BLK_NEST, mdoc->parse,
line, ppos, "%s breaks %s",
- mdoc_macronames[atok],
- mdoc_macronames[later->tok]);
+ roff_name[atok], roff_name[later->tok]);
endbody = mdoc_endbody_alloc(mdoc, line, ppos,
atok, body);
@@ -676,14 +673,14 @@ blk_exp_close(MACRO_PROT_ARGS)
if (body == NULL) {
mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse,
- line, ppos, mdoc_macronames[tok]);
+ line, ppos, roff_name[tok]);
if (maxargs && endbody == NULL) {
/*
* Stray .Ec without previous .Eo:
* Break the output line, keep the arguments.
*/
- roff_elem_alloc(mdoc, line, ppos, MDOC_br);
- rew_elem(mdoc, MDOC_br);
+ roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+ rew_elem(mdoc, ROFF_br);
}
} else if (endbody == NULL) {
rew_last(mdoc, body);
@@ -695,7 +692,7 @@ blk_exp_close(MACRO_PROT_ARGS)
if (buf[*pos] != '\0')
mandoc_vmsg(MANDOCERR_ARG_SKIP,
mdoc->parse, line, ppos,
- "%s %s", mdoc_macronames[tok],
+ "%s %s", roff_name[tok],
buf + *pos);
if (endbody == NULL && n != NULL)
rew_pending(mdoc, n);
@@ -716,8 +713,7 @@ blk_exp_close(MACRO_PROT_ARGS)
if (ac == ARGS_PUNCT || ac == ARGS_EOLN)
break;
- ntok = ac == ARGS_QWORD ? TOKEN_NONE :
- lookup(mdoc, tok, line, lastarg, p);
+ ntok = lookup(mdoc, tok, line, lastarg, p);
if (ntok == TOKEN_NONE) {
dword(mdoc, line, lastarg, p, DELIM_MAX,
@@ -752,7 +748,7 @@ static void
in_line(MACRO_PROT_ARGS)
{
int la, scope, cnt, firstarg, mayopen, nc, nl;
- int ntok;
+ enum roff_tok ntok;
enum margserr ac;
enum mdelim d;
struct mdoc_arg *arg;
@@ -813,7 +809,7 @@ in_line(MACRO_PROT_ARGS)
break;
}
- ntok = (ac == ARGS_QWORD || (tok == MDOC_Fn && !cnt)) ?
+ ntok = (tok == MDOC_Fn && !cnt) ?
TOKEN_NONE : lookup(mdoc, tok, line, la, p);
/*
@@ -833,7 +829,7 @@ in_line(MACRO_PROT_ARGS)
mdoc_argv_free(arg);
mandoc_msg(MANDOCERR_MACRO_EMPTY,
mdoc->parse, line, ppos,
- mdoc_macronames[tok]);
+ roff_name[tok]);
}
mdoc_macro(mdoc, ntok, line, la, pos, buf);
if (nl)
@@ -842,14 +838,11 @@ in_line(MACRO_PROT_ARGS)
}
/*
- * Non-quote-enclosed punctuation. Set up our scope, if
- * a word; rewind the scope, if a delimiter; then append
- * the word.
+ * Handle punctuation. Set up our scope, if a word;
+ * rewind the scope, if a delimiter; then append the word.
*/
- d = ac == ARGS_QWORD ? DELIM_NONE : mdoc_isdelim(p);
-
- if (DELIM_NONE != d) {
+ if ((d = mdoc_isdelim(p)) != DELIM_NONE) {
/*
* If we encounter closing punctuation, no word
* has been emitted, no scope is open, and we're
@@ -869,11 +862,12 @@ in_line(MACRO_PROT_ARGS)
* Close out our scope, if one is open, before
* any punctuation.
*/
- if (scope)
+ if (scope && tok != MDOC_Lk) {
rew_elem(mdoc, tok);
- scope = 0;
- if (tok == MDOC_Fn)
- mayopen = 0;
+ scope = 0;
+ if (tok == MDOC_Fn)
+ mayopen = 0;
+ }
} else if (mayopen && !scope) {
mdoc_elem_alloc(mdoc, line, ppos, tok, arg);
scope = 1;
@@ -881,7 +875,7 @@ in_line(MACRO_PROT_ARGS)
}
dword(mdoc, line, la, p, d,
- MDOC_JOIN & mdoc_macros[tok].flags);
+ mdoc_macros[tok].flags & MDOC_JOIN);
/*
* If the first argument is a closing delimiter,
@@ -903,8 +897,10 @@ in_line(MACRO_PROT_ARGS)
}
}
- if (scope)
+ if (scope && tok != MDOC_Lk) {
rew_elem(mdoc, tok);
+ scope = 0;
+ }
/*
* If no elements have been collected and we're allowed to have
@@ -919,11 +915,13 @@ in_line(MACRO_PROT_ARGS)
} else {
mdoc_argv_free(arg);
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
- line, ppos, mdoc_macronames[tok]);
+ line, ppos, roff_name[tok]);
}
}
if (nl)
append_delims(mdoc, line, pos, buf);
+ if (scope)
+ rew_elem(mdoc, tok);
}
static void
@@ -942,7 +940,7 @@ blk_full(MACRO_PROT_ARGS)
if (buf[*pos] == '\0' && (tok == MDOC_Sh || tok == MDOC_Ss)) {
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
- line, ppos, mdoc_macronames[tok]);
+ line, ppos, roff_name[tok]);
return;
}
@@ -965,7 +963,7 @@ blk_full(MACRO_PROT_ARGS)
mandoc_vmsg(MANDOCERR_BLK_BROKEN,
mdoc->parse, line, ppos,
"It breaks %s",
- mdoc_macronames[blk->tok]);
+ roff_name[blk->tok]);
rew_pending(mdoc, blk);
}
break;
@@ -977,9 +975,8 @@ blk_full(MACRO_PROT_ARGS)
case MDOC_Ss:
mandoc_vmsg(MANDOCERR_BLK_BROKEN,
mdoc->parse, line, ppos,
- "%s breaks %s",
- mdoc_macronames[tok],
- mdoc_macronames[n->tok]);
+ "%s breaks %s", roff_name[tok],
+ roff_name[n->tok]);
rew_pending(mdoc, n);
n = mdoc->last;
continue;
@@ -1005,8 +1002,7 @@ blk_full(MACRO_PROT_ARGS)
if (blk != NULL) {
mandoc_vmsg(MANDOCERR_BLK_BROKEN,
mdoc->parse, line, ppos,
- "It breaks %s",
- mdoc_macronames[blk->tok]);
+ "It breaks %s", roff_name[blk->tok]);
rew_pending(mdoc, blk);
blk = NULL;
}
@@ -1021,8 +1017,8 @@ blk_full(MACRO_PROT_ARGS)
if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) {
mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,
line, ppos, "It %s", buf + *pos);
- roff_elem_alloc(mdoc, line, ppos, MDOC_br);
- rew_elem(mdoc, MDOC_br);
+ roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+ rew_elem(mdoc, ROFF_br);
return;
}
}
@@ -1099,7 +1095,7 @@ blk_full(MACRO_PROT_ARGS)
if (tok == MDOC_Bd || tok == MDOC_Bk) {
mandoc_vmsg(MANDOCERR_ARG_EXCESS,
mdoc->parse, line, la, "%s ... %s",
- mdoc_macronames[tok], buf + la);
+ roff_name[tok], buf + la);
break;
}
if (tok == MDOC_Rs) {
@@ -1117,7 +1113,6 @@ blk_full(MACRO_PROT_ARGS)
if (head == NULL &&
ac != ARGS_PHRASE &&
- ac != ARGS_QWORD &&
mdoc_isdelim(p) == DELIM_OPEN) {
dword(mdoc, line, la, p, DELIM_OPEN, 0);
continue;
@@ -1214,8 +1209,7 @@ blk_part_imp(MACRO_PROT_ARGS)
if (ac == ARGS_EOLN || ac == ARGS_PUNCT)
break;
- if (body == NULL && ac != ARGS_QWORD &&
- mdoc_isdelim(p) == DELIM_OPEN) {
+ if (body == NULL && mdoc_isdelim(p) == DELIM_OPEN) {
dword(mdoc, line, la, p, DELIM_OPEN, 0);
continue;
}
@@ -1271,8 +1265,7 @@ blk_part_exp(MACRO_PROT_ARGS)
/* Flush out leading punctuation. */
- if (head == NULL && ac != ARGS_QWORD &&
- mdoc_isdelim(p) == DELIM_OPEN) {
+ if (head == NULL && mdoc_isdelim(p) == DELIM_OPEN) {
dword(mdoc, line, la, p, DELIM_OPEN, 0);
continue;
}
@@ -1307,7 +1300,7 @@ in_line_argn(MACRO_PROT_ARGS)
struct mdoc_arg *arg;
char *p;
enum margserr ac;
- int ntok;
+ enum roff_tok ntok;
int state; /* arg#; -1: not yet open; -2: closed */
int la, maxargs, nl;
@@ -1371,7 +1364,7 @@ in_line_argn(MACRO_PROT_ARGS)
state = -2;
}
- ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && state == 0)) ?
+ ntok = (tok == MDOC_Pf && state == 0) ?
TOKEN_NONE : lookup(mdoc, tok, line, la, p);
if (ntok != TOKEN_NONE) {
@@ -1383,8 +1376,7 @@ in_line_argn(MACRO_PROT_ARGS)
break;
}
- if (ac == ARGS_QWORD ||
- mdoc_macros[tok].flags & MDOC_IGNDELIM ||
+ if (mdoc_macros[tok].flags & MDOC_IGNDELIM ||
mdoc_isdelim(p) == DELIM_NONE) {
if (state == -1) {
mdoc_elem_alloc(mdoc, line, ppos, tok, arg);
@@ -1397,12 +1389,12 @@ in_line_argn(MACRO_PROT_ARGS)
}
dword(mdoc, line, la, p, DELIM_MAX,
- MDOC_JOIN & mdoc_macros[tok].flags);
+ mdoc_macros[tok].flags & MDOC_JOIN);
}
if (state == -1) {
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
- line, ppos, mdoc_macronames[tok]);
+ line, ppos, roff_name[tok]);
return;
}
@@ -1430,9 +1422,9 @@ in_line_eoln(MACRO_PROT_ARGS)
}
if (buf[*pos] == '\0' &&
- (tok == MDOC_Fd || mdoc_macronames[tok][0] == '%')) {
+ (tok == MDOC_Fd || *roff_name[tok] == '%')) {
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
- line, ppos, mdoc_macronames[tok]);
+ line, ppos, roff_name[tok]);
return;
}
@@ -1449,7 +1441,8 @@ in_line_eoln(MACRO_PROT_ARGS)
* or until the next macro, call that macro, and return 1.
*/
static int
-parse_rest(struct roff_man *mdoc, int tok, int line, int *pos, char *buf)
+parse_rest(struct roff_man *mdoc, enum roff_tok tok,
+ int line, int *pos, char *buf)
{
int la;
diff --git a/contrib/mdocml/mdoc_man.c b/contrib/mdocml/mdoc_man.c
index 88d39370e8c2..230b36856837 100644
--- a/contrib/mdocml/mdoc_man.c
+++ b/contrib/mdocml/mdoc_man.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_man.c,v 1.104 2017/02/17 19:15:41 schwarze Exp $ */
+/* $Id: mdoc_man.c,v 1.119 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -20,6 +20,7 @@
#include <assert.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include "mandoc_aux.h"
@@ -32,10 +33,13 @@
#define DECL_ARGS const struct roff_meta *meta, struct roff_node *n
+typedef int (*int_fp)(DECL_ARGS);
+typedef void (*void_fp)(DECL_ARGS);
+
struct manact {
- int (*cond)(DECL_ARGS); /* DON'T run actions */
- int (*pre)(DECL_ARGS); /* pre-node action */
- void (*post)(DECL_ARGS); /* post-node action */
+ int_fp cond; /* DON'T run actions */
+ int_fp pre; /* pre-node action */
+ void_fp post; /* post-node action */
const char *prefix; /* pre-node string constant */
const char *suffix; /* post-node string constant */
};
@@ -44,6 +48,7 @@ static int cond_body(DECL_ARGS);
static int cond_head(DECL_ARGS);
static void font_push(char);
static void font_pop(void);
+static int man_strlen(const char *);
static void mid_it(void);
static void post__t(DECL_ARGS);
static void post_aq(DECL_ARGS);
@@ -68,7 +73,6 @@ static void post_nm(DECL_ARGS);
static void post_percent(DECL_ARGS);
static void post_pf(DECL_ARGS);
static void post_sect(DECL_ARGS);
-static void post_sp(DECL_ARGS);
static void post_vt(DECL_ARGS);
static int pre__t(DECL_ARGS);
static int pre_an(DECL_ARGS);
@@ -78,7 +82,7 @@ static int pre_bd(DECL_ARGS);
static int pre_bf(DECL_ARGS);
static int pre_bk(DECL_ARGS);
static int pre_bl(DECL_ARGS);
-static int pre_br(DECL_ARGS);
+static void pre_br(DECL_ARGS);
static int pre_dl(DECL_ARGS);
static int pre_en(DECL_ARGS);
static int pre_enc(DECL_ARGS);
@@ -91,22 +95,24 @@ static int pre_fd(DECL_ARGS);
static int pre_fl(DECL_ARGS);
static int pre_fn(DECL_ARGS);
static int pre_fo(DECL_ARGS);
-static int pre_ft(DECL_ARGS);
+static void pre_ft(DECL_ARGS);
+static int pre_Ft(DECL_ARGS);
static int pre_in(DECL_ARGS);
static int pre_it(DECL_ARGS);
static int pre_lk(DECL_ARGS);
static int pre_li(DECL_ARGS);
-static int pre_ll(DECL_ARGS);
static int pre_nm(DECL_ARGS);
static int pre_no(DECL_ARGS);
static int pre_ns(DECL_ARGS);
+static void pre_onearg(DECL_ARGS);
static int pre_pp(DECL_ARGS);
static int pre_rs(DECL_ARGS);
static int pre_sm(DECL_ARGS);
-static int pre_sp(DECL_ARGS);
+static void pre_sp(DECL_ARGS);
static int pre_sect(DECL_ARGS);
static int pre_sy(DECL_ARGS);
static void pre_syn(const struct roff_node *);
+static void pre_ta(DECL_ARGS);
static int pre_vt(DECL_ARGS);
static int pre_xr(DECL_ARGS);
static void print_word(const char *);
@@ -118,8 +124,18 @@ static void print_width(const struct mdoc_bl *,
static void print_count(int *);
static void print_node(DECL_ARGS);
-static const struct manact manacts[MDOC_MAX + 1] = {
- { NULL, pre_ap, NULL, NULL, NULL }, /* Ap */
+static const void_fp roff_manacts[ROFF_MAX] = {
+ pre_br,
+ pre_onearg,
+ pre_ft,
+ pre_onearg,
+ pre_onearg,
+ pre_sp,
+ pre_ta,
+ pre_onearg,
+};
+
+static const struct manact __manacts[MDOC_MAX - MDOC_Dd] = {
{ NULL, NULL, NULL, NULL, NULL }, /* Dd */
{ NULL, NULL, NULL, NULL, NULL }, /* Dt */
{ NULL, NULL, NULL, NULL, NULL }, /* Os */
@@ -135,6 +151,7 @@ static const struct manact manacts[MDOC_MAX + 1] = {
{ NULL, pre_it, post_it, NULL, NULL }, /* It */
{ NULL, pre_em, post_font, NULL, NULL }, /* Ad */
{ NULL, pre_an, NULL, NULL, NULL }, /* An */
+ { NULL, pre_ap, NULL, NULL, NULL }, /* Ap */
{ NULL, pre_em, post_font, NULL, NULL }, /* Ar */
{ NULL, pre_sy, post_font, NULL, NULL }, /* Cd */
{ NULL, pre_sy, post_font, NULL, NULL }, /* Cm */
@@ -146,14 +163,14 @@ static const struct manact manacts[MDOC_MAX + 1] = {
{ NULL, pre_fd, post_fd, NULL, NULL }, /* Fd */
{ NULL, pre_fl, post_fl, NULL, NULL }, /* Fl */
{ NULL, pre_fn, post_fn, NULL, NULL }, /* Fn */
- { NULL, pre_ft, post_font, NULL, NULL }, /* Ft */
+ { NULL, pre_Ft, post_font, NULL, NULL }, /* Ft */
{ NULL, pre_sy, post_font, NULL, NULL }, /* Ic */
{ NULL, pre_in, post_in, NULL, NULL }, /* In */
{ NULL, pre_li, post_font, NULL, NULL }, /* Li */
{ cond_head, pre_enc, NULL, "\\- ", NULL }, /* Nd */
{ NULL, pre_nm, post_nm, NULL, NULL }, /* Nm */
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Op */
- { NULL, pre_ft, post_font, NULL, NULL }, /* Ot */
+ { NULL, pre_Ft, post_font, NULL, NULL }, /* Ot */
{ NULL, pre_em, post_font, NULL, NULL }, /* Pa */
{ NULL, pre_ex, NULL, NULL, NULL }, /* Rv */
{ NULL, NULL, NULL, NULL, NULL }, /* St */
@@ -237,13 +254,10 @@ static const struct manact manacts[MDOC_MAX + 1] = {
{ cond_body, pre_en, post_en, NULL, NULL }, /* En */
{ NULL, NULL, NULL, NULL, NULL }, /* Dx */
{ NULL, NULL, post_percent, NULL, NULL }, /* %Q */
- { NULL, pre_br, NULL, NULL, NULL }, /* br */
- { NULL, pre_sp, post_sp, NULL, NULL }, /* sp */
{ NULL, NULL, post_percent, NULL, NULL }, /* %U */
{ NULL, NULL, NULL, NULL, NULL }, /* Ta */
- { NULL, pre_ll, post_sp, NULL, NULL }, /* ll */
- { NULL, NULL, NULL, NULL, NULL }, /* ROOT */
};
+static const struct manact *const manacts = __manacts - MDOC_Dd;
static int outflags;
#define MMAN_spc (1 << 0) /* blank character before next word */
@@ -274,6 +288,49 @@ static struct {
} fontqueue;
+static int
+man_strlen(const char *cp)
+{
+ size_t rsz;
+ int skip, sz;
+
+ sz = 0;
+ skip = 0;
+ for (;;) {
+ rsz = strcspn(cp, "\\");
+ if (rsz) {
+ cp += rsz;
+ if (skip) {
+ skip = 0;
+ rsz--;
+ }
+ sz += rsz;
+ }
+ if ('\0' == *cp)
+ break;
+ cp++;
+ switch (mandoc_escape(&cp, NULL, NULL)) {
+ case ESCAPE_ERROR:
+ return sz;
+ case ESCAPE_UNICODE:
+ case ESCAPE_NUMBERED:
+ case ESCAPE_SPECIAL:
+ case ESCAPE_OVERSTRIKE:
+ if (skip)
+ skip = 0;
+ else
+ sz++;
+ break;
+ case ESCAPE_SKIPCHAR:
+ skip = 1;
+ break;
+ default:
+ break;
+ }
+ }
+ return sz;
+}
+
static void
font_push(char newfont)
{
@@ -391,7 +448,6 @@ static void
print_line(const char *s, int newflags)
{
- outflags &= ~MMAN_br;
outflags |= MMAN_nl;
print_word(s);
outflags |= newflags;
@@ -420,6 +476,7 @@ print_offs(const char *v, int keywords)
{
char buf[24];
struct roffsu su;
+ const char *end;
int sz;
print_line(".RS", MMAN_Bk_susp);
@@ -431,8 +488,11 @@ print_offs(const char *v, int keywords)
sz = 6;
else if (keywords && !strcmp(v, "indent-two"))
sz = 12;
- else if (a2roffsu(v, &su, SCALE_EN) > 1) {
- if (SCALE_EN == su.unit)
+ else {
+ end = a2roffsu(v, &su, SCALE_EN);
+ if (end == NULL || *end != '\0')
+ sz = man_strlen(v);
+ else if (SCALE_EN == su.unit)
sz = su.scale;
else {
/*
@@ -446,8 +506,7 @@ print_offs(const char *v, int keywords)
outflags |= MMAN_nl;
return;
}
- } else
- sz = strlen(v);
+ }
/*
* We are inside an enclosing list.
@@ -469,6 +528,7 @@ print_width(const struct mdoc_bl *bl, const struct roff_node *child)
{
char buf[24];
struct roffsu su;
+ const char *end;
int numeric, remain, sz, chsz;
numeric = 1;
@@ -477,21 +537,23 @@ print_width(const struct mdoc_bl *bl, const struct roff_node *child)
/* Convert the width into a number (of characters). */
if (bl->width == NULL)
sz = (bl->type == LIST_hang) ? 6 : 0;
- else if (a2roffsu(bl->width, &su, SCALE_MAX) > 1) {
- if (SCALE_EN == su.unit)
+ else {
+ end = a2roffsu(bl->width, &su, SCALE_MAX);
+ if (end == NULL || *end != '\0')
+ sz = man_strlen(bl->width);
+ else if (SCALE_EN == su.unit)
sz = su.scale;
else {
sz = 0;
numeric = 0;
}
- } else
- sz = strlen(bl->width);
+ }
/* XXX Rough estimation, might have multiple parts. */
if (bl->type == LIST_enum)
chsz = (bl->count > 8) + 1;
else if (child != NULL && child->type == ROFFT_TEXT)
- chsz = strlen(child->string);
+ chsz = man_strlen(child->string);
else
chsz = 0;
@@ -607,7 +669,11 @@ print_node(DECL_ARGS)
outflags &= ~(MMAN_spc | MMAN_spc_force);
else if (outflags & MMAN_Sm)
outflags |= MMAN_spc;
+ } else if (n->tok < ROFF_MAX) {
+ (*roff_manacts[n->tok])(meta, n);
+ return;
} else {
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
/*
* Conditionally run the pre-node action handler for a
* node.
@@ -715,8 +781,7 @@ static int
pre__t(DECL_ARGS)
{
- if (n->parent && MDOC_Rs == n->parent->tok &&
- n->parent->norm->Rs.quote_T) {
+ if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T) {
print_word("\\(lq");
outflags &= ~MMAN_spc;
} else
@@ -728,8 +793,7 @@ static void
post__t(DECL_ARGS)
{
- if (n->parent && MDOC_Rs == n->parent->tok &&
- n->parent->norm->Rs.quote_T) {
+ if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T) {
outflags &= ~MMAN_spc;
print_word("\\(rq");
} else
@@ -1013,12 +1077,10 @@ post_bl(DECL_ARGS)
}
-static int
+static void
pre_br(DECL_ARGS)
{
-
outflags |= MMAN_br;
- return 0;
}
static int
@@ -1263,7 +1325,7 @@ post_fo(DECL_ARGS)
}
static int
-pre_ft(DECL_ARGS)
+pre_Ft(DECL_ARGS)
{
pre_syn(n);
@@ -1271,6 +1333,14 @@ pre_ft(DECL_ARGS)
return 1;
}
+static void
+pre_ft(DECL_ARGS)
+{
+ print_line(".ft", 0);
+ print_word(n->child->string);
+ outflags |= MMAN_nl;
+}
+
static int
pre_in(DECL_ARGS)
{
@@ -1465,33 +1535,63 @@ post_lb(DECL_ARGS)
static int
pre_lk(DECL_ARGS)
{
- const struct roff_node *link, *descr;
+ const struct roff_node *link, *descr, *punct;
+ int display;
- if (NULL == (link = n->child))
+ if ((link = n->child) == NULL)
return 0;
- if (NULL != (descr = link->next)) {
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
+
+ /* Link text. */
+ if ((descr = link->next) != NULL && descr != punct) {
font_push('I');
- while (NULL != descr) {
+ while (descr != punct) {
print_word(descr->string);
descr = descr->next;
}
- print_word(":");
font_pop();
+ print_word(":");
}
+ /* Link target. */
+ display = man_strlen(link->string) >= 26;
+ if (display) {
+ print_line(".RS", MMAN_Bk_susp);
+ print_word("6n");
+ outflags |= MMAN_nl;
+ }
font_push('B');
print_word(link->string);
font_pop();
+
+ /* Trailing punctuation. */
+ while (punct != NULL) {
+ print_word(punct->string);
+ punct = punct->next;
+ }
+ if (display)
+ print_line(".RE", MMAN_nl);
return 0;
}
-static int
-pre_ll(DECL_ARGS)
+static void
+pre_onearg(DECL_ARGS)
{
-
- print_line(".ll", 0);
- return 1;
+ outflags |= MMAN_nl;
+ print_word(".");
+ outflags &= ~MMAN_spc;
+ print_word(roff_name[n->tok]);
+ if (n->child != NULL)
+ print_word(n->child->string);
+ outflags |= MMAN_nl;
+ if (n->tok == ROFF_ce)
+ for (n = n->child->next; n != NULL; n = n->next)
+ print_node(meta, n);
}
static int
@@ -1520,7 +1620,7 @@ pre_nm(DECL_ARGS)
if (NULL == n->parent->prev)
outflags |= MMAN_sp;
print_block(".HP", 0);
- printf(" %zun", strlen(name) + 1);
+ printf(" %dn", man_strlen(name) + 1);
outflags |= MMAN_nl;
}
font_push('B');
@@ -1615,22 +1715,17 @@ pre_sm(DECL_ARGS)
return 0;
}
-static int
+static void
pre_sp(DECL_ARGS)
{
-
- if (MMAN_PP & outflags) {
+ if (outflags & MMAN_PP) {
outflags &= ~MMAN_PP;
print_line(".PP", 0);
- } else
+ } else {
print_line(".sp", 0);
- return 1;
-}
-
-static void
-post_sp(DECL_ARGS)
-{
-
+ if (n->child != NULL)
+ print_word(n->child->string);
+ }
outflags |= MMAN_nl;
}
@@ -1642,6 +1737,15 @@ pre_sy(DECL_ARGS)
return 1;
}
+static void
+pre_ta(DECL_ARGS)
+{
+ print_line(".ta", 0);
+ for (n = n->child; n != NULL; n = n->next)
+ print_word(n->string);
+ outflags |= MMAN_nl;
+}
+
static int
pre_vt(DECL_ARGS)
{
diff --git a/contrib/mdocml/mdoc_markdown.c b/contrib/mdocml/mdoc_markdown.c
new file mode 100644
index 000000000000..7f5368fba72c
--- /dev/null
+++ b/contrib/mdocml/mdoc_markdown.c
@@ -0,0 +1,1558 @@
+/* $Id: mdoc_markdown.c,v 1.22 2017/05/30 16:31:29 schwarze Exp $ */
+/*
+ * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "mandoc_aux.h"
+#include "mandoc.h"
+#include "roff.h"
+#include "mdoc.h"
+#include "main.h"
+
+struct md_act {
+ int (*cond)(struct roff_node *n);
+ int (*pre)(struct roff_node *n);
+ void (*post)(struct roff_node *n);
+ const char *prefix; /* pre-node string constant */
+ const char *suffix; /* post-node string constant */
+};
+
+static void md_nodelist(struct roff_node *);
+static void md_node(struct roff_node *);
+static const char *md_stack(char c);
+static void md_preword(void);
+static void md_rawword(const char *);
+static void md_word(const char *);
+static void md_named(const char *);
+static void md_char(unsigned char);
+static void md_uri(const char *);
+
+static int md_cond_head(struct roff_node *);
+static int md_cond_body(struct roff_node *);
+
+static int md_pre_raw(struct roff_node *);
+static int md_pre_word(struct roff_node *);
+static int md_pre_skip(struct roff_node *);
+static void md_pre_syn(struct roff_node *);
+static int md_pre_An(struct roff_node *);
+static int md_pre_Ap(struct roff_node *);
+static int md_pre_Bd(struct roff_node *);
+static int md_pre_Bk(struct roff_node *);
+static int md_pre_Bl(struct roff_node *);
+static int md_pre_D1(struct roff_node *);
+static int md_pre_Dl(struct roff_node *);
+static int md_pre_En(struct roff_node *);
+static int md_pre_Eo(struct roff_node *);
+static int md_pre_Fa(struct roff_node *);
+static int md_pre_Fd(struct roff_node *);
+static int md_pre_Fn(struct roff_node *);
+static int md_pre_Fo(struct roff_node *);
+static int md_pre_In(struct roff_node *);
+static int md_pre_It(struct roff_node *);
+static int md_pre_Lk(struct roff_node *);
+static int md_pre_Mt(struct roff_node *);
+static int md_pre_Nd(struct roff_node *);
+static int md_pre_Nm(struct roff_node *);
+static int md_pre_No(struct roff_node *);
+static int md_pre_Ns(struct roff_node *);
+static int md_pre_Pp(struct roff_node *);
+static int md_pre_Rs(struct roff_node *);
+static int md_pre_Sh(struct roff_node *);
+static int md_pre_Sm(struct roff_node *);
+static int md_pre_Vt(struct roff_node *);
+static int md_pre_Xr(struct roff_node *);
+static int md_pre__T(struct roff_node *);
+static int md_pre_br(struct roff_node *);
+
+static void md_post_raw(struct roff_node *);
+static void md_post_word(struct roff_node *);
+static void md_post_pc(struct roff_node *);
+static void md_post_Bk(struct roff_node *);
+static void md_post_Bl(struct roff_node *);
+static void md_post_D1(struct roff_node *);
+static void md_post_En(struct roff_node *);
+static void md_post_Eo(struct roff_node *);
+static void md_post_Fa(struct roff_node *);
+static void md_post_Fd(struct roff_node *);
+static void md_post_Fl(struct roff_node *);
+static void md_post_Fn(struct roff_node *);
+static void md_post_Fo(struct roff_node *);
+static void md_post_In(struct roff_node *);
+static void md_post_It(struct roff_node *);
+static void md_post_Lb(struct roff_node *);
+static void md_post_Nm(struct roff_node *);
+static void md_post_Pf(struct roff_node *);
+static void md_post_Vt(struct roff_node *);
+static void md_post__T(struct roff_node *);
+
+static const struct md_act __md_acts[MDOC_MAX - MDOC_Dd] = {
+ { NULL, NULL, NULL, NULL, NULL }, /* Dd */
+ { NULL, NULL, NULL, NULL, NULL }, /* Dt */
+ { NULL, NULL, NULL, NULL, NULL }, /* Os */
+ { NULL, md_pre_Sh, NULL, NULL, NULL }, /* Sh */
+ { NULL, md_pre_Sh, NULL, NULL, NULL }, /* Ss */
+ { NULL, md_pre_Pp, NULL, NULL, NULL }, /* Pp */
+ { md_cond_body, md_pre_D1, md_post_D1, NULL, NULL }, /* D1 */
+ { md_cond_body, md_pre_Dl, md_post_D1, NULL, NULL }, /* Dl */
+ { md_cond_body, md_pre_Bd, md_post_D1, NULL, NULL }, /* Bd */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ed */
+ { md_cond_body, md_pre_Bl, md_post_Bl, NULL, NULL }, /* Bl */
+ { NULL, NULL, NULL, NULL, NULL }, /* El */
+ { NULL, md_pre_It, md_post_It, NULL, NULL }, /* It */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ad */
+ { NULL, md_pre_An, NULL, NULL, NULL }, /* An */
+ { NULL, md_pre_Ap, NULL, NULL, NULL }, /* Ap */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ar */
+ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cd */
+ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cm */
+ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Dv */
+ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Er */
+ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Ev */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ex */
+ { NULL, md_pre_Fa, md_post_Fa, NULL, NULL }, /* Fa */
+ { NULL, md_pre_Fd, md_post_Fd, "**", "**" }, /* Fd */
+ { NULL, md_pre_raw, md_post_Fl, "**-", "**" }, /* Fl */
+ { NULL, md_pre_Fn, md_post_Fn, NULL, NULL }, /* Fn */
+ { NULL, md_pre_Fd, md_post_raw, "*", "*" }, /* Ft */
+ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Ic */
+ { NULL, md_pre_In, md_post_In, NULL, NULL }, /* In */
+ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Li */
+ { md_cond_head, md_pre_Nd, NULL, NULL, NULL }, /* Nd */
+ { NULL, md_pre_Nm, md_post_Nm, "**", "**" }, /* Nm */
+ { md_cond_body, md_pre_word, md_post_word, "[", "]" }, /* Op */
+ { NULL, md_pre_Fd, md_post_raw, "*", "*" }, /* Ot */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Pa */
+ { NULL, NULL, NULL, NULL, NULL }, /* Rv */
+ { NULL, NULL, NULL, NULL, NULL }, /* St */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Va */
+ { NULL, md_pre_Vt, md_post_Vt, "*", "*" }, /* Vt */
+ { NULL, md_pre_Xr, NULL, NULL, NULL }, /* Xr */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %A */
+ { NULL, md_pre_raw, md_post_pc, "*", "*" }, /* %B */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %D */
+ { NULL, md_pre_raw, md_post_pc, "*", "*" }, /* %I */
+ { NULL, md_pre_raw, md_post_pc, "*", "*" }, /* %J */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %N */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %O */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %P */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %R */
+ { NULL, md_pre__T, md_post__T, NULL, NULL }, /* %T */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %V */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ac */
+ { md_cond_body, md_pre_word, md_post_word, "<", ">" }, /* Ao */
+ { md_cond_body, md_pre_word, md_post_word, "<", ">" }, /* Aq */
+ { NULL, NULL, NULL, NULL, NULL }, /* At */
+ { NULL, NULL, NULL, NULL, NULL }, /* Bc */
+ { NULL, NULL, NULL, NULL, NULL }, /* Bf XXX not implemented */
+ { md_cond_body, md_pre_word, md_post_word, "[", "]" }, /* Bo */
+ { md_cond_body, md_pre_word, md_post_word, "[", "]" }, /* Bq */
+ { NULL, NULL, NULL, NULL, NULL }, /* Bsx */
+ { NULL, NULL, NULL, NULL, NULL }, /* Bx */
+ { NULL, NULL, NULL, NULL, NULL }, /* Db */
+ { NULL, NULL, NULL, NULL, NULL }, /* Dc */
+ { md_cond_body, md_pre_word, md_post_word, "\"", "\"" }, /* Do */
+ { md_cond_body, md_pre_word, md_post_word, "\"", "\"" }, /* Dq */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ec */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ef */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Em */
+ { md_cond_body, md_pre_Eo, md_post_Eo, NULL, NULL }, /* Eo */
+ { NULL, NULL, NULL, NULL, NULL }, /* Fx */
+ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Ms */
+ { NULL, md_pre_No, NULL, NULL, NULL }, /* No */
+ { NULL, md_pre_Ns, NULL, NULL, NULL }, /* Ns */
+ { NULL, NULL, NULL, NULL, NULL }, /* Nx */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ox */
+ { NULL, NULL, NULL, NULL, NULL }, /* Pc */
+ { NULL, NULL, md_post_Pf, NULL, NULL }, /* Pf */
+ { md_cond_body, md_pre_word, md_post_word, "(", ")" }, /* Po */
+ { md_cond_body, md_pre_word, md_post_word, "(", ")" }, /* Pq */
+ { NULL, NULL, NULL, NULL, NULL }, /* Qc */
+ { md_cond_body, md_pre_raw, md_post_raw, "'`", "`'" }, /* Ql */
+ { md_cond_body, md_pre_word, md_post_word, "\"", "\"" }, /* Qo */
+ { md_cond_body, md_pre_word, md_post_word, "\"", "\"" }, /* Qq */
+ { NULL, NULL, NULL, NULL, NULL }, /* Re */
+ { md_cond_body, md_pre_Rs, NULL, NULL, NULL }, /* Rs */
+ { NULL, NULL, NULL, NULL, NULL }, /* Sc */
+ { md_cond_body, md_pre_word, md_post_word, "'", "'" }, /* So */
+ { md_cond_body, md_pre_word, md_post_word, "'", "'" }, /* Sq */
+ { NULL, md_pre_Sm, NULL, NULL, NULL }, /* Sm */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Sx */
+ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Sy */
+ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Tn */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ux */
+ { NULL, NULL, NULL, NULL, NULL }, /* Xc */
+ { NULL, NULL, NULL, NULL, NULL }, /* Xo */
+ { NULL, md_pre_Fo, md_post_Fo, "**", "**" }, /* Fo */
+ { NULL, NULL, NULL, NULL, NULL }, /* Fc */
+ { md_cond_body, md_pre_word, md_post_word, "[", "]" }, /* Oo */
+ { NULL, NULL, NULL, NULL, NULL }, /* Oc */
+ { NULL, md_pre_Bk, md_post_Bk, NULL, NULL }, /* Bk */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ek */
+ { NULL, NULL, NULL, NULL, NULL }, /* Bt */
+ { NULL, NULL, NULL, NULL, NULL }, /* Hf */
+ { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Fr */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ud */
+ { NULL, NULL, md_post_Lb, NULL, NULL }, /* Lb */
+ { NULL, md_pre_Pp, NULL, NULL, NULL }, /* Lp */
+ { NULL, md_pre_Lk, NULL, NULL, NULL }, /* Lk */
+ { NULL, md_pre_Mt, NULL, NULL, NULL }, /* Mt */
+ { md_cond_body, md_pre_word, md_post_word, "{", "}" }, /* Brq */
+ { md_cond_body, md_pre_word, md_post_word, "{", "}" }, /* Bro */
+ { NULL, NULL, NULL, NULL, NULL }, /* Brc */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %C */
+ { NULL, md_pre_skip, NULL, NULL, NULL }, /* Es */
+ { md_cond_body, md_pre_En, md_post_En, NULL, NULL }, /* En */
+ { NULL, NULL, NULL, NULL, NULL }, /* Dx */
+ { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */
+ { NULL, md_pre_Lk, md_post_pc, NULL, NULL }, /* %U */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ta */
+};
+static const struct md_act *const md_acts = __md_acts - MDOC_Dd;
+
+static int outflags;
+#define MD_spc (1 << 0) /* Blank character before next word. */
+#define MD_spc_force (1 << 1) /* Even before trailing punctuation. */
+#define MD_nonl (1 << 2) /* Prevent linebreak in markdown code. */
+#define MD_nl (1 << 3) /* Break markdown code line. */
+#define MD_br (1 << 4) /* Insert an output line break. */
+#define MD_sp (1 << 5) /* Insert a paragraph break. */
+#define MD_Sm (1 << 6) /* Horizontal spacing mode. */
+#define MD_Bk (1 << 7) /* Word keep mode. */
+#define MD_An_split (1 << 8) /* Author mode is "split". */
+#define MD_An_nosplit (1 << 9) /* Author mode is "nosplit". */
+
+static int escflags; /* Escape in generated markdown code: */
+#define ESC_BOL (1 << 0) /* "#*+-" near the beginning of a line. */
+#define ESC_NUM (1 << 1) /* "." after a leading number. */
+#define ESC_HYP (1 << 2) /* "(" immediately after "]". */
+#define ESC_SQU (1 << 4) /* "]" when "[" is open. */
+#define ESC_FON (1 << 5) /* "*" immediately after unrelated "*". */
+#define ESC_EOL (1 << 6) /* " " at the and of a line. */
+
+static int code_blocks, quote_blocks, list_blocks;
+static int outcount;
+
+void
+markdown_mdoc(void *arg, const struct roff_man *mdoc)
+{
+ outflags = MD_Sm;
+ md_word(mdoc->meta.title);
+ if (mdoc->meta.msec != NULL) {
+ outflags &= ~MD_spc;
+ md_word("(");
+ md_word(mdoc->meta.msec);
+ md_word(")");
+ }
+ md_word("-");
+ md_word(mdoc->meta.vol);
+ if (mdoc->meta.arch != NULL) {
+ md_word("(");
+ md_word(mdoc->meta.arch);
+ md_word(")");
+ }
+ outflags |= MD_sp;
+
+ md_nodelist(mdoc->first->child);
+
+ outflags |= MD_sp;
+ md_word(mdoc->meta.os);
+ md_word("-");
+ md_word(mdoc->meta.date);
+ putchar('\n');
+}
+
+static void
+md_nodelist(struct roff_node *n)
+{
+ while (n != NULL) {
+ md_node(n);
+ n = n->next;
+ }
+}
+
+static void
+md_node(struct roff_node *n)
+{
+ const struct md_act *act;
+ int cond, process_children;
+
+ if (n->flags & NODE_NOPRT)
+ return;
+
+ if (outflags & MD_nonl)
+ outflags &= ~(MD_nl | MD_sp);
+ else if (outflags & MD_spc && n->flags & NODE_LINE)
+ outflags |= MD_nl;
+
+ act = NULL;
+ cond = 0;
+ process_children = 1;
+ n->flags &= ~NODE_ENDED;
+
+ if (n->type == ROFFT_TEXT) {
+ if (n->flags & NODE_DELIMC)
+ outflags &= ~(MD_spc | MD_spc_force);
+ else if (outflags & MD_Sm)
+ outflags |= MD_spc_force;
+ md_word(n->string);
+ if (n->flags & NODE_DELIMO)
+ outflags &= ~(MD_spc | MD_spc_force);
+ else if (outflags & MD_Sm)
+ outflags |= MD_spc;
+ } else if (n->tok < ROFF_MAX) {
+ switch (n->tok) {
+ case ROFF_br:
+ process_children = md_pre_br(n);
+ break;
+ case ROFF_sp:
+ process_children = md_pre_Pp(n);
+ break;
+ default:
+ process_children = 0;
+ break;
+ }
+ } else {
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
+ act = md_acts + n->tok;
+ cond = act->cond == NULL || (*act->cond)(n);
+ if (cond && act->pre != NULL &&
+ (n->end == ENDBODY_NOT || n->child != NULL))
+ process_children = (*act->pre)(n);
+ }
+
+ if (process_children && n->child != NULL)
+ md_nodelist(n->child);
+
+ if (n->flags & NODE_ENDED)
+ return;
+
+ if (cond && act->post != NULL)
+ (*act->post)(n);
+
+ if (n->end != ENDBODY_NOT)
+ n->body->flags |= NODE_ENDED;
+}
+
+static const char *
+md_stack(char c)
+{
+ static char *stack;
+ static size_t sz;
+ static size_t cur;
+
+ switch (c) {
+ case '\0':
+ break;
+ case (char)-1:
+ assert(cur);
+ stack[--cur] = '\0';
+ break;
+ default:
+ if (cur + 1 >= sz) {
+ sz += 8;
+ stack = mandoc_realloc(stack, sz);
+ }
+ stack[cur] = c;
+ stack[++cur] = '\0';
+ break;
+ }
+ return stack == NULL ? "" : stack;
+}
+
+/*
+ * Handle vertical and horizontal spacing.
+ */
+static void
+md_preword(void)
+{
+ const char *cp;
+
+ /*
+ * If a list block is nested inside a code block or a blockquote,
+ * blank lines for paragraph breaks no longer work; instead,
+ * they terminate the list. Work around this markdown issue
+ * by using mere line breaks instead.
+ */
+
+ if (list_blocks && outflags & MD_sp) {
+ outflags &= ~MD_sp;
+ outflags |= MD_br;
+ }
+
+ /*
+ * End the old line if requested.
+ * Escape whitespace at the end of the markdown line
+ * such that it won't look like an output line break.
+ */
+
+ if (outflags & MD_sp)
+ putchar('\n');
+ else if (outflags & MD_br) {
+ putchar(' ');
+ putchar(' ');
+ } else if (outflags & MD_nl && escflags & ESC_EOL)
+ md_named("zwnj");
+
+ /* Start a new line if necessary. */
+
+ if (outflags & (MD_nl | MD_br | MD_sp)) {
+ putchar('\n');
+ for (cp = md_stack('\0'); *cp != '\0'; cp++) {
+ putchar(*cp);
+ if (*cp == '>')
+ putchar(' ');
+ }
+ outflags &= ~(MD_nl | MD_br | MD_sp);
+ escflags = ESC_BOL;
+ outcount = 0;
+
+ /* Handle horizontal spacing. */
+
+ } else if (outflags & MD_spc) {
+ if (outflags & MD_Bk)
+ fputs("&nbsp;", stdout);
+ else
+ putchar(' ');
+ escflags &= ~ESC_FON;
+ outcount++;
+ }
+
+ outflags &= ~(MD_spc_force | MD_nonl);
+ if (outflags & MD_Sm)
+ outflags |= MD_spc;
+ else
+ outflags &= ~MD_spc;
+}
+
+/*
+ * Print markdown syntax elements.
+ * Can also be used for constant strings when neither escaping
+ * nor delimiter handling is required.
+ */
+static void
+md_rawword(const char *s)
+{
+ md_preword();
+
+ if (*s == '\0')
+ return;
+
+ if (escflags & ESC_FON) {
+ escflags &= ~ESC_FON;
+ if (*s == '*' && !code_blocks)
+ fputs("&zwnj;", stdout);
+ }
+
+ while (*s != '\0') {
+ switch(*s) {
+ case '*':
+ if (s[1] == '\0')
+ escflags |= ESC_FON;
+ break;
+ case '[':
+ escflags |= ESC_SQU;
+ break;
+ case ']':
+ escflags |= ESC_HYP;
+ escflags &= ~ESC_SQU;
+ break;
+ default:
+ break;
+ }
+ md_char(*s++);
+ }
+ if (s[-1] == ' ')
+ escflags |= ESC_EOL;
+ else
+ escflags &= ~ESC_EOL;
+}
+
+/*
+ * Print text and mdoc(7) syntax elements.
+ */
+static void
+md_word(const char *s)
+{
+ const char *seq, *prevfont, *currfont, *nextfont;
+ char c;
+ int bs, sz, uc;
+
+ /* No spacing before closing delimiters. */
+ if (s[0] != '\0' && s[1] == '\0' &&
+ strchr("!),.:;?]", s[0]) != NULL &&
+ (outflags & MD_spc_force) == 0)
+ outflags &= ~MD_spc;
+
+ md_preword();
+
+ if (*s == '\0')
+ return;
+
+ /* No spacing after opening delimiters. */
+ if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')
+ outflags &= ~MD_spc;
+
+ prevfont = currfont = "";
+ while ((c = *s++) != '\0') {
+ bs = 0;
+ switch(c) {
+ case ASCII_NBRSP:
+ if (code_blocks)
+ c = ' ';
+ else {
+ md_named("nbsp");
+ c = '\0';
+ }
+ break;
+ case ASCII_HYPH:
+ bs = escflags & ESC_BOL && !code_blocks;
+ c = '-';
+ break;
+ case ASCII_BREAK:
+ continue;
+ case '#':
+ case '+':
+ case '-':
+ bs = escflags & ESC_BOL && !code_blocks;
+ break;
+ case '(':
+ bs = escflags & ESC_HYP && !code_blocks;
+ break;
+ case ')':
+ bs = escflags & ESC_NUM && !code_blocks;
+ break;
+ case '*':
+ case '[':
+ case '_':
+ case '`':
+ bs = !code_blocks;
+ break;
+ case '.':
+ bs = escflags & ESC_NUM && !code_blocks;
+ break;
+ case '<':
+ if (code_blocks == 0) {
+ md_named("lt");
+ c = '\0';
+ }
+ break;
+ case '=':
+ if (escflags & ESC_BOL && !code_blocks) {
+ md_named("equals");
+ c = '\0';
+ }
+ break;
+ case '>':
+ if (code_blocks == 0) {
+ md_named("gt");
+ c = '\0';
+ }
+ break;
+ case '\\':
+ uc = 0;
+ nextfont = NULL;
+ switch (mandoc_escape(&s, &seq, &sz)) {
+ case ESCAPE_UNICODE:
+ uc = mchars_num2uc(seq + 1, sz - 1);
+ break;
+ case ESCAPE_NUMBERED:
+ uc = mchars_num2char(seq, sz);
+ break;
+ case ESCAPE_SPECIAL:
+ uc = mchars_spec2cp(seq, sz);
+ break;
+ case ESCAPE_FONTBOLD:
+ nextfont = "**";
+ break;
+ case ESCAPE_FONTITALIC:
+ nextfont = "*";
+ break;
+ case ESCAPE_FONTBI:
+ nextfont = "***";
+ break;
+ case ESCAPE_FONT:
+ case ESCAPE_FONTROMAN:
+ nextfont = "";
+ break;
+ case ESCAPE_FONTPREV:
+ nextfont = prevfont;
+ break;
+ case ESCAPE_NOSPACE:
+ case ESCAPE_SKIPCHAR:
+ case ESCAPE_OVERSTRIKE:
+ /* XXX not implemented */
+ /* FALLTHROUGH */
+ case ESCAPE_ERROR:
+ default:
+ break;
+ }
+ if (nextfont != NULL && !code_blocks) {
+ if (*currfont != '\0') {
+ outflags &= ~MD_spc;
+ md_rawword(currfont);
+ }
+ prevfont = currfont;
+ currfont = nextfont;
+ if (*currfont != '\0') {
+ outflags &= ~MD_spc;
+ md_rawword(currfont);
+ }
+ }
+ if (uc) {
+ if ((uc < 0x20 && uc != 0x09) ||
+ (uc > 0x7E && uc < 0xA0))
+ uc = 0xFFFD;
+ if (code_blocks) {
+ seq = mchars_uc2str(uc);
+ fputs(seq, stdout);
+ outcount += strlen(seq);
+ } else {
+ printf("&#%d;", uc);
+ outcount++;
+ }
+ escflags &= ~ESC_FON;
+ }
+ c = '\0';
+ break;
+ case ']':
+ bs = escflags & ESC_SQU && !code_blocks;
+ escflags |= ESC_HYP;
+ break;
+ default:
+ break;
+ }
+ if (bs)
+ putchar('\\');
+ md_char(c);
+ }
+ if (*currfont != '\0') {
+ outflags &= ~MD_spc;
+ md_rawword(currfont);
+ } else if (s[-2] == ' ')
+ escflags |= ESC_EOL;
+ else
+ escflags &= ~ESC_EOL;
+}
+
+/*
+ * Print a single HTML named character reference.
+ */
+static void
+md_named(const char *s)
+{
+ printf("&%s;", s);
+ escflags &= ~(ESC_FON | ESC_EOL);
+ outcount++;
+}
+
+/*
+ * Print a single raw character and maintain certain escape flags.
+ */
+static void
+md_char(unsigned char c)
+{
+ if (c != '\0') {
+ putchar(c);
+ if (c == '*')
+ escflags |= ESC_FON;
+ else
+ escflags &= ~ESC_FON;
+ outcount++;
+ }
+ if (c != ']')
+ escflags &= ~ESC_HYP;
+ if (c == ' ' || c == '\t' || c == '>')
+ return;
+ if (isdigit(c) == 0)
+ escflags &= ~ESC_NUM;
+ else if (escflags & ESC_BOL)
+ escflags |= ESC_NUM;
+ escflags &= ~ESC_BOL;
+}
+
+static int
+md_cond_head(struct roff_node *n)
+{
+ return n->type == ROFFT_HEAD;
+}
+
+static int
+md_cond_body(struct roff_node *n)
+{
+ return n->type == ROFFT_BODY;
+}
+
+static int
+md_pre_raw(struct roff_node *n)
+{
+ const char *prefix;
+
+ if ((prefix = md_acts[n->tok].prefix) != NULL) {
+ md_rawword(prefix);
+ outflags &= ~MD_spc;
+ if (*prefix == '`')
+ code_blocks++;
+ }
+ return 1;
+}
+
+static void
+md_post_raw(struct roff_node *n)
+{
+ const char *suffix;
+
+ if ((suffix = md_acts[n->tok].suffix) != NULL) {
+ outflags &= ~(MD_spc | MD_nl);
+ md_rawword(suffix);
+ if (*suffix == '`')
+ code_blocks--;
+ }
+}
+
+static int
+md_pre_word(struct roff_node *n)
+{
+ const char *prefix;
+
+ if ((prefix = md_acts[n->tok].prefix) != NULL) {
+ md_word(prefix);
+ outflags &= ~MD_spc;
+ }
+ return 1;
+}
+
+static void
+md_post_word(struct roff_node *n)
+{
+ const char *suffix;
+
+ if ((suffix = md_acts[n->tok].suffix) != NULL) {
+ outflags &= ~(MD_spc | MD_nl);
+ md_word(suffix);
+ }
+}
+
+static void
+md_post_pc(struct roff_node *n)
+{
+ md_post_raw(n);
+ if (n->parent->tok != MDOC_Rs)
+ return;
+ if (n->next != NULL) {
+ md_word(",");
+ if (n->prev != NULL &&
+ n->prev->tok == n->tok &&
+ n->next->tok == n->tok)
+ md_word("and");
+ } else {
+ md_word(".");
+ outflags |= MD_nl;
+ }
+}
+
+static int
+md_pre_skip(struct roff_node *n)
+{
+ return 0;
+}
+
+static void
+md_pre_syn(struct roff_node *n)
+{
+ if (n->prev == NULL || ! (n->flags & NODE_SYNPRETTY))
+ return;
+
+ if (n->prev->tok == n->tok &&
+ n->tok != MDOC_Ft &&
+ n->tok != MDOC_Fo &&
+ n->tok != MDOC_Fn) {
+ outflags |= MD_br;
+ return;
+ }
+
+ switch (n->prev->tok) {
+ case MDOC_Fd:
+ case MDOC_Fn:
+ case MDOC_Fo:
+ case MDOC_In:
+ case MDOC_Vt:
+ outflags |= MD_sp;
+ break;
+ case MDOC_Ft:
+ if (n->tok != MDOC_Fn && n->tok != MDOC_Fo) {
+ outflags |= MD_sp;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ outflags |= MD_br;
+ break;
+ }
+}
+
+static int
+md_pre_An(struct roff_node *n)
+{
+ switch (n->norm->An.auth) {
+ case AUTH_split:
+ outflags &= ~MD_An_nosplit;
+ outflags |= MD_An_split;
+ return 0;
+ case AUTH_nosplit:
+ outflags &= ~MD_An_split;
+ outflags |= MD_An_nosplit;
+ return 0;
+ default:
+ if (outflags & MD_An_split)
+ outflags |= MD_br;
+ else if (n->sec == SEC_AUTHORS &&
+ ! (outflags & MD_An_nosplit))
+ outflags |= MD_An_split;
+ return 1;
+ }
+}
+
+static int
+md_pre_Ap(struct roff_node *n)
+{
+ outflags &= ~MD_spc;
+ md_word("'");
+ outflags &= ~MD_spc;
+ return 0;
+}
+
+static int
+md_pre_Bd(struct roff_node *n)
+{
+ switch (n->norm->Bd.type) {
+ case DISP_unfilled:
+ case DISP_literal:
+ return md_pre_Dl(n);
+ default:
+ return md_pre_D1(n);
+ }
+}
+
+static int
+md_pre_Bk(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ return 1;
+ case ROFFT_BODY:
+ outflags |= MD_Bk;
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static void
+md_post_Bk(struct roff_node *n)
+{
+ if (n->type == ROFFT_BODY)
+ outflags &= ~MD_Bk;
+}
+
+static int
+md_pre_Bl(struct roff_node *n)
+{
+ n->norm->Bl.count = 0;
+ if (n->norm->Bl.type == LIST_column)
+ md_pre_Dl(n);
+ outflags |= MD_sp;
+ return 1;
+}
+
+static void
+md_post_Bl(struct roff_node *n)
+{
+ n->norm->Bl.count = 0;
+ if (n->norm->Bl.type == LIST_column)
+ md_post_D1(n);
+ outflags |= MD_sp;
+}
+
+static int
+md_pre_D1(struct roff_node *n)
+{
+ /*
+ * Markdown blockquote syntax does not work inside code blocks.
+ * The best we can do is fall back to another nested code block.
+ */
+ if (code_blocks) {
+ md_stack('\t');
+ code_blocks++;
+ } else {
+ md_stack('>');
+ quote_blocks++;
+ }
+ outflags |= MD_sp;
+ return 1;
+}
+
+static void
+md_post_D1(struct roff_node *n)
+{
+ md_stack((char)-1);
+ if (code_blocks)
+ code_blocks--;
+ else
+ quote_blocks--;
+ outflags |= MD_sp;
+}
+
+static int
+md_pre_Dl(struct roff_node *n)
+{
+ /*
+ * Markdown code block syntax does not work inside blockquotes.
+ * The best we can do is fall back to another nested blockquote.
+ */
+ if (quote_blocks) {
+ md_stack('>');
+ quote_blocks++;
+ } else {
+ md_stack('\t');
+ code_blocks++;
+ }
+ outflags |= MD_sp;
+ return 1;
+}
+
+static int
+md_pre_En(struct roff_node *n)
+{
+ if (n->norm->Es == NULL ||
+ n->norm->Es->child == NULL)
+ return 1;
+
+ md_word(n->norm->Es->child->string);
+ outflags &= ~MD_spc;
+ return 1;
+}
+
+static void
+md_post_En(struct roff_node *n)
+{
+ if (n->norm->Es == NULL ||
+ n->norm->Es->child == NULL ||
+ n->norm->Es->child->next == NULL)
+ return;
+
+ outflags &= ~MD_spc;
+ md_word(n->norm->Es->child->next->string);
+}
+
+static int
+md_pre_Eo(struct roff_node *n)
+{
+ if (n->end == ENDBODY_NOT &&
+ n->parent->head->child == NULL &&
+ n->child != NULL &&
+ n->child->end != ENDBODY_NOT)
+ md_preword();
+ else if (n->end != ENDBODY_NOT ? n->child != NULL :
+ n->parent->head->child != NULL && (n->child != NULL ||
+ (n->parent->tail != NULL && n->parent->tail->child != NULL)))
+ outflags &= ~(MD_spc | MD_nl);
+ return 1;
+}
+
+static void
+md_post_Eo(struct roff_node *n)
+{
+ if (n->end != ENDBODY_NOT) {
+ outflags |= MD_spc;
+ return;
+ }
+
+ if (n->child == NULL && n->parent->head->child == NULL)
+ return;
+
+ if (n->parent->tail != NULL && n->parent->tail->child != NULL)
+ outflags &= ~MD_spc;
+ else
+ outflags |= MD_spc;
+}
+
+static int
+md_pre_Fa(struct roff_node *n)
+{
+ int am_Fa;
+
+ am_Fa = n->tok == MDOC_Fa;
+
+ if (am_Fa)
+ n = n->child;
+
+ while (n != NULL) {
+ md_rawword("*");
+ outflags &= ~MD_spc;
+ md_node(n);
+ outflags &= ~MD_spc;
+ md_rawword("*");
+ if ((n = n->next) != NULL)
+ md_word(",");
+ }
+ return 0;
+}
+
+static void
+md_post_Fa(struct roff_node *n)
+{
+ if (n->next != NULL && n->next->tok == MDOC_Fa)
+ md_word(",");
+}
+
+static int
+md_pre_Fd(struct roff_node *n)
+{
+ md_pre_syn(n);
+ md_pre_raw(n);
+ return 1;
+}
+
+static void
+md_post_Fd(struct roff_node *n)
+{
+ md_post_raw(n);
+ outflags |= MD_br;
+}
+
+static void
+md_post_Fl(struct roff_node *n)
+{
+ md_post_raw(n);
+ if (n->child == NULL && n->next != NULL &&
+ n->next->type != ROFFT_TEXT && !(n->next->flags & NODE_LINE))
+ outflags &= ~MD_spc;
+}
+
+static int
+md_pre_Fn(struct roff_node *n)
+{
+ md_pre_syn(n);
+
+ if ((n = n->child) == NULL)
+ return 0;
+
+ md_rawword("**");
+ outflags &= ~MD_spc;
+ md_node(n);
+ outflags &= ~MD_spc;
+ md_rawword("**");
+ outflags &= ~MD_spc;
+ md_word("(");
+
+ if ((n = n->next) != NULL)
+ md_pre_Fa(n);
+ return 0;
+}
+
+static void
+md_post_Fn(struct roff_node *n)
+{
+ md_word(")");
+ if (n->flags & NODE_SYNPRETTY) {
+ md_word(";");
+ outflags |= MD_sp;
+ }
+}
+
+static int
+md_pre_Fo(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ md_pre_syn(n);
+ break;
+ case ROFFT_HEAD:
+ if (n->child == NULL)
+ return 0;
+ md_pre_raw(n);
+ break;
+ case ROFFT_BODY:
+ outflags &= ~(MD_spc | MD_nl);
+ md_word("(");
+ break;
+ default:
+ break;
+ }
+ return 1;
+}
+
+static void
+md_post_Fo(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_HEAD:
+ if (n->child != NULL)
+ md_post_raw(n);
+ break;
+ case ROFFT_BODY:
+ md_post_Fn(n);
+ break;
+ default:
+ break;
+ }
+}
+
+static int
+md_pre_In(struct roff_node *n)
+{
+ if (n->flags & NODE_SYNPRETTY) {
+ md_pre_syn(n);
+ md_rawword("**");
+ outflags &= ~MD_spc;
+ md_word("#include <");
+ } else {
+ md_word("<");
+ outflags &= ~MD_spc;
+ md_rawword("*");
+ }
+ outflags &= ~MD_spc;
+ return 1;
+}
+
+static void
+md_post_In(struct roff_node *n)
+{
+ if (n->flags & NODE_SYNPRETTY) {
+ outflags &= ~MD_spc;
+ md_rawword(">**");
+ outflags |= MD_nl;
+ } else {
+ outflags &= ~MD_spc;
+ md_rawword("*>");
+ }
+}
+
+static int
+md_pre_It(struct roff_node *n)
+{
+ struct roff_node *bln;
+
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ return 1;
+
+ case ROFFT_HEAD:
+ bln = n->parent->parent;
+ if (bln->norm->Bl.comp == 0 &&
+ bln->norm->Bl.type != LIST_column)
+ outflags |= MD_sp;
+ outflags |= MD_nl;
+
+ switch (bln->norm->Bl.type) {
+ case LIST_item:
+ outflags |= MD_br;
+ return 0;
+ case LIST_inset:
+ case LIST_diag:
+ case LIST_ohang:
+ outflags |= MD_br;
+ return 1;
+ case LIST_tag:
+ case LIST_hang:
+ outflags |= MD_sp;
+ return 1;
+ case LIST_bullet:
+ md_rawword("*\t");
+ break;
+ case LIST_dash:
+ case LIST_hyphen:
+ md_rawword("-\t");
+ break;
+ case LIST_enum:
+ md_preword();
+ if (bln->norm->Bl.count < 99)
+ bln->norm->Bl.count++;
+ printf("%d.\t", bln->norm->Bl.count);
+ escflags &= ~ESC_FON;
+ break;
+ case LIST_column:
+ outflags |= MD_br;
+ return 0;
+ default:
+ return 0;
+ }
+ outflags &= ~MD_spc;
+ outflags |= MD_nonl;
+ outcount = 0;
+ md_stack('\t');
+ if (code_blocks || quote_blocks)
+ list_blocks++;
+ return 0;
+
+ case ROFFT_BODY:
+ bln = n->parent->parent;
+ switch (bln->norm->Bl.type) {
+ case LIST_ohang:
+ outflags |= MD_br;
+ break;
+ case LIST_tag:
+ case LIST_hang:
+ md_pre_D1(n);
+ break;
+ default:
+ break;
+ }
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static void
+md_post_It(struct roff_node *n)
+{
+ struct roff_node *bln;
+ int i, nc;
+
+ if (n->type != ROFFT_BODY)
+ return;
+
+ bln = n->parent->parent;
+ switch (bln->norm->Bl.type) {
+ case LIST_bullet:
+ case LIST_dash:
+ case LIST_hyphen:
+ case LIST_enum:
+ md_stack((char)-1);
+ if (code_blocks || quote_blocks)
+ list_blocks--;
+ break;
+ case LIST_tag:
+ case LIST_hang:
+ md_post_D1(n);
+ break;
+
+ case LIST_column:
+ if (n->next == NULL)
+ break;
+
+ /* Calculate the array index of the current column. */
+
+ i = 0;
+ while ((n = n->prev) != NULL && n->type != ROFFT_HEAD)
+ i++;
+
+ /*
+ * If a width was specified for this column,
+ * subtract what printed, and
+ * add the same spacing as in mdoc_term.c.
+ */
+
+ nc = bln->norm->Bl.ncols;
+ i = i < nc ? strlen(bln->norm->Bl.cols[i]) - outcount +
+ (nc < 5 ? 4 : nc == 5 ? 3 : 1) : 1;
+ if (i < 1)
+ i = 1;
+ while (i-- > 0)
+ putchar(' ');
+
+ outflags &= ~MD_spc;
+ escflags &= ~ESC_FON;
+ outcount = 0;
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+md_post_Lb(struct roff_node *n)
+{
+ if (n->sec == SEC_LIBRARY)
+ outflags |= MD_br;
+}
+
+static void
+md_uri(const char *s)
+{
+ while (*s != '\0') {
+ if (strchr("%()<>", *s) != NULL) {
+ printf("%%%2.2hhX", *s);
+ outcount += 3;
+ } else {
+ putchar(*s);
+ outcount++;
+ }
+ s++;
+ }
+}
+
+static int
+md_pre_Lk(struct roff_node *n)
+{
+ const struct roff_node *link, *descr, *punct;
+
+ if ((link = n->child) == NULL)
+ return 0;
+
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
+
+ /* Link text. */
+ descr = link->next;
+ if (descr == punct)
+ descr = link; /* no text */
+ md_rawword("[");
+ outflags &= ~MD_spc;
+ do {
+ md_word(descr->string);
+ descr = descr->next;
+ } while (descr != punct);
+ outflags &= ~MD_spc;
+
+ /* Link target. */
+ md_rawword("](");
+ md_uri(link->string);
+ outflags &= ~MD_spc;
+ md_rawword(")");
+
+ /* Trailing punctuation. */
+ while (punct != NULL) {
+ md_word(punct->string);
+ punct = punct->next;
+ }
+ return 0;
+}
+
+static int
+md_pre_Mt(struct roff_node *n)
+{
+ const struct roff_node *nch;
+
+ md_rawword("[");
+ outflags &= ~MD_spc;
+ for (nch = n->child; nch != NULL; nch = nch->next)
+ md_word(nch->string);
+ outflags &= ~MD_spc;
+ md_rawword("](mailto:");
+ for (nch = n->child; nch != NULL; nch = nch->next) {
+ md_uri(nch->string);
+ if (nch->next != NULL) {
+ putchar(' ');
+ outcount++;
+ }
+ }
+ outflags &= ~MD_spc;
+ md_rawword(")");
+ return 0;
+}
+
+static int
+md_pre_Nd(struct roff_node *n)
+{
+ outflags &= ~MD_nl;
+ outflags |= MD_spc;
+ md_word("-");
+ return 1;
+}
+
+static int
+md_pre_Nm(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ outflags |= MD_Bk;
+ md_pre_syn(n);
+ break;
+ case ROFFT_HEAD:
+ case ROFFT_ELEM:
+ md_pre_raw(n);
+ break;
+ default:
+ break;
+ }
+ return 1;
+}
+
+static void
+md_post_Nm(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ outflags &= ~MD_Bk;
+ break;
+ case ROFFT_HEAD:
+ case ROFFT_ELEM:
+ md_post_raw(n);
+ break;
+ default:
+ break;
+ }
+}
+
+static int
+md_pre_No(struct roff_node *n)
+{
+ outflags |= MD_spc_force;
+ return 1;
+}
+
+static int
+md_pre_Ns(struct roff_node *n)
+{
+ outflags &= ~MD_spc;
+ return 0;
+}
+
+static void
+md_post_Pf(struct roff_node *n)
+{
+ if (n->next != NULL && (n->next->flags & NODE_LINE) == 0)
+ outflags &= ~MD_spc;
+}
+
+static int
+md_pre_Pp(struct roff_node *n)
+{
+ outflags |= MD_sp;
+ return 0;
+}
+
+static int
+md_pre_Rs(struct roff_node *n)
+{
+ if (n->sec == SEC_SEE_ALSO)
+ outflags |= MD_sp;
+ return 1;
+}
+
+static int
+md_pre_Sh(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ if (n->sec == SEC_AUTHORS)
+ outflags &= ~(MD_An_split | MD_An_nosplit);
+ break;
+ case ROFFT_HEAD:
+ outflags |= MD_sp;
+ md_rawword(n->tok == MDOC_Sh ? "#" : "##");
+ break;
+ case ROFFT_BODY:
+ outflags |= MD_sp;
+ break;
+ default:
+ break;
+ }
+ return 1;
+}
+
+static int
+md_pre_Sm(struct roff_node *n)
+{
+ if (n->child == NULL)
+ outflags ^= MD_Sm;
+ else if (strcmp("on", n->child->string) == 0)
+ outflags |= MD_Sm;
+ else
+ outflags &= ~MD_Sm;
+
+ if (outflags & MD_Sm)
+ outflags |= MD_spc;
+
+ return 0;
+}
+
+static int
+md_pre_Vt(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BLOCK:
+ md_pre_syn(n);
+ return 1;
+ case ROFFT_BODY:
+ case ROFFT_ELEM:
+ md_pre_raw(n);
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static void
+md_post_Vt(struct roff_node *n)
+{
+ switch (n->type) {
+ case ROFFT_BODY:
+ case ROFFT_ELEM:
+ md_post_raw(n);
+ break;
+ default:
+ break;
+ }
+}
+
+static int
+md_pre_Xr(struct roff_node *n)
+{
+ n = n->child;
+ if (n == NULL)
+ return 0;
+ md_node(n);
+ n = n->next;
+ if (n == NULL)
+ return 0;
+ outflags &= ~MD_spc;
+ md_word("(");
+ md_node(n);
+ md_word(")");
+ return 0;
+}
+
+static int
+md_pre__T(struct roff_node *n)
+{
+ if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T)
+ md_word("\"");
+ else
+ md_rawword("*");
+ outflags &= ~MD_spc;
+ return 1;
+}
+
+static void
+md_post__T(struct roff_node *n)
+{
+ outflags &= ~MD_spc;
+ if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T)
+ md_word("\"");
+ else
+ md_rawword("*");
+ md_post_pc(n);
+}
+
+static int
+md_pre_br(struct roff_node *n)
+{
+ outflags |= MD_br;
+ return 0;
+}
diff --git a/contrib/mdocml/mdoc_state.c b/contrib/mdocml/mdoc_state.c
index 4e376ef07347..d9cad18b1052 100644
--- a/contrib/mdocml/mdoc_state.c
+++ b/contrib/mdocml/mdoc_state.c
@@ -1,6 +1,6 @@
-/* $Id: mdoc_state.c,v 1.4 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: mdoc_state.c,v 1.8 2017/05/05 15:17:32 schwarze Exp $ */
/*
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
*/
#include <sys/types.h>
+#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -35,8 +36,7 @@ static void state_dl(STATE_ARGS);
static void state_sh(STATE_ARGS);
static void state_sm(STATE_ARGS);
-static const state_handler state_handlers[MDOC_MAX] = {
- NULL, /* Ap */
+static const state_handler __state_handlers[MDOC_MAX - MDOC_Dd] = {
NULL, /* Dd */
NULL, /* Dt */
NULL, /* Os */
@@ -52,6 +52,7 @@ static const state_handler state_handlers[MDOC_MAX] = {
NULL, /* It */
NULL, /* Ad */
NULL, /* An */
+ NULL, /* Ap */
NULL, /* Ar */
NULL, /* Cd */
NULL, /* Cm */
@@ -154,12 +155,10 @@ static const state_handler state_handlers[MDOC_MAX] = {
NULL, /* En */
NULL, /* Dx */
NULL, /* %Q */
- NULL, /* br */
- NULL, /* sp */
NULL, /* %U */
NULL, /* Ta */
- NULL, /* ll */
};
+static const state_handler *const state_handlers = __state_handlers - MDOC_Dd;
void
@@ -167,9 +166,10 @@ mdoc_state(struct roff_man *mdoc, struct roff_node *n)
{
state_handler handler;
- if (n->tok == TOKEN_NONE)
+ if (n->tok == TOKEN_NONE || n->tok < ROFF_MAX)
return;
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
if ( ! (mdoc_macros[n->tok].flags & MDOC_PROLOGUE))
mdoc->flags |= MDOC_PBODY;
diff --git a/contrib/mdocml/mdoc_term.c b/contrib/mdocml/mdoc_term.c
index e9ea455a48e8..471c52ca804d 100644
--- a/contrib/mdocml/mdoc_term.c
+++ b/contrib/mdocml/mdoc_term.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_term.c,v 1.346 2017/02/17 19:15:41 schwarze Exp $ */
+/* $Id: mdoc_term.c,v 1.363 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -106,7 +106,6 @@ static int termp_ft_pre(DECL_ARGS);
static int termp_in_pre(DECL_ARGS);
static int termp_it_pre(DECL_ARGS);
static int termp_li_pre(DECL_ARGS);
-static int termp_ll_pre(DECL_ARGS);
static int termp_lk_pre(DECL_ARGS);
static int termp_nd_pre(DECL_ARGS);
static int termp_nm_pre(DECL_ARGS);
@@ -116,7 +115,7 @@ static int termp_rs_pre(DECL_ARGS);
static int termp_sh_pre(DECL_ARGS);
static int termp_skip_pre(DECL_ARGS);
static int termp_sm_pre(DECL_ARGS);
-static int termp_sp_pre(DECL_ARGS);
+static int termp_pp_pre(DECL_ARGS);
static int termp_ss_pre(DECL_ARGS);
static int termp_sy_pre(DECL_ARGS);
static int termp_tag_pre(DECL_ARGS);
@@ -125,14 +124,13 @@ static int termp_vt_pre(DECL_ARGS);
static int termp_xr_pre(DECL_ARGS);
static int termp_xx_pre(DECL_ARGS);
-static const struct termact termacts[MDOC_MAX] = {
- { termp_ap_pre, NULL }, /* Ap */
+static const struct termact __termacts[MDOC_MAX - MDOC_Dd] = {
{ NULL, NULL }, /* Dd */
{ NULL, NULL }, /* Dt */
{ NULL, NULL }, /* Os */
{ termp_sh_pre, termp_sh_post }, /* Sh */
{ termp_ss_pre, termp_ss_post }, /* Ss */
- { termp_sp_pre, NULL }, /* Pp */
+ { termp_pp_pre, NULL }, /* Pp */
{ termp_d1_pre, termp_bl_post }, /* D1 */
{ termp_d1_pre, termp_bl_post }, /* Dl */
{ termp_bd_pre, termp_bd_post }, /* Bd */
@@ -142,6 +140,7 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_it_pre, termp_it_post }, /* It */
{ termp_under_pre, NULL }, /* Ad */
{ termp_an_pre, NULL }, /* An */
+ { termp_ap_pre, NULL }, /* Ap */
{ termp_under_pre, NULL }, /* Ar */
{ termp_cd_pre, NULL }, /* Cd */
{ termp_bold_pre, NULL }, /* Cm */
@@ -233,7 +232,7 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_under_pre, NULL }, /* Fr */
{ NULL, NULL }, /* Ud */
{ NULL, termp_lb_post }, /* Lb */
- { termp_sp_pre, NULL }, /* Lp */
+ { termp_pp_pre, NULL }, /* Lp */
{ termp_lk_pre, NULL }, /* Lk */
{ termp_under_pre, NULL }, /* Mt */
{ termp_quote_pre, termp_quote_post }, /* Brq */
@@ -244,15 +243,14 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_quote_pre, termp_quote_post }, /* En */
{ termp_xx_pre, termp_xx_post }, /* Dx */
{ NULL, termp____post }, /* %Q */
- { termp_sp_pre, NULL }, /* br */
- { termp_sp_pre, NULL }, /* sp */
{ NULL, termp____post }, /* %U */
{ NULL, NULL }, /* Ta */
- { termp_ll_pre, NULL }, /* ll */
};
+static const struct termact *const termacts = __termacts - MDOC_Dd;
static int fn_prio;
+
void
terminal_mdoc(void *arg, const struct roff_man *mdoc)
{
@@ -261,9 +259,10 @@ terminal_mdoc(void *arg, const struct roff_man *mdoc)
size_t save_defindent;
p = (struct termp *)arg;
- p->overstep = 0;
- p->rmargin = p->maxrmargin = p->defrmargin;
- p->tabwidth = term_len(p, 5);
+ p->tcol->rmargin = p->maxrmargin = p->defrmargin;
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
n = mdoc->first->child;
if (p->synopsisonly) {
@@ -317,8 +316,8 @@ print_mdoc_node(DECL_ARGS)
return;
chld = 1;
- offset = p->offset;
- rmargin = p->rmargin;
+ offset = p->tcol->offset;
+ rmargin = p->tcol->rmargin;
n->flags &= ~NODE_ENDED;
n->prev_font = p->fonti;
@@ -342,7 +341,8 @@ print_mdoc_node(DECL_ARGS)
switch (n->type) {
case ROFFT_TEXT:
- if (' ' == *n->string && NODE_LINE & n->flags)
+ if (*n->string == ' ' && n->flags & NODE_LINE &&
+ (p->flags & TERMP_NONEWLINE) == 0)
term_newln(p);
if (NODE_DELIMC & n->flags)
p->flags |= TERMP_NOSPACE;
@@ -363,7 +363,12 @@ print_mdoc_node(DECL_ARGS)
term_tbl(p, n->span);
break;
default:
- if (termacts[n->tok].pre &&
+ if (n->tok < ROFF_MAX) {
+ roff_term_pre(p, n);
+ return;
+ }
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
+ if (termacts[n->tok].pre != NULL &&
(n->end == ENDBODY_NOT || n->child != NULL))
chld = (*termacts[n->tok].pre)
(p, &npair, meta, n);
@@ -384,7 +389,7 @@ print_mdoc_node(DECL_ARGS)
case ROFFT_EQN:
break;
default:
- if ( ! termacts[n->tok].post || NODE_ENDED & n->flags)
+ if (termacts[n->tok].post == NULL || n->flags & NODE_ENDED)
break;
(void)(*termacts[n->tok].post)(p, &npair, meta, n);
@@ -401,10 +406,9 @@ print_mdoc_node(DECL_ARGS)
if (NODE_EOS & n->flags)
p->flags |= TERMP_SENTENCE;
- if (MDOC_ll != n->tok) {
- p->offset = offset;
- p->rmargin = rmargin;
- }
+ if (n->type != ROFFT_TEXT)
+ p->tcol->offset = offset;
+ p->tcol->rmargin = rmargin;
}
static void
@@ -424,9 +428,9 @@ print_mdoc_foot(struct termp *p, const struct roff_meta *meta)
term_vspace(p);
- p->offset = 0;
+ p->tcol->offset = 0;
sz = term_strlen(p, meta->date);
- p->rmargin = p->maxrmargin > sz ?
+ p->tcol->rmargin = p->maxrmargin > sz ?
(p->maxrmargin + term_len(p, 1) - sz) / 2 : 0;
p->trailspace = 1;
p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
@@ -434,16 +438,16 @@ print_mdoc_foot(struct termp *p, const struct roff_meta *meta)
term_word(p, meta->os);
term_flushln(p);
- p->offset = p->rmargin;
+ p->tcol->offset = p->tcol->rmargin;
sz = term_strlen(p, meta->os);
- p->rmargin = p->maxrmargin > sz ? p->maxrmargin - sz : 0;
+ p->tcol->rmargin = p->maxrmargin > sz ? p->maxrmargin - sz : 0;
p->flags |= TERMP_NOSPACE;
term_word(p, meta->date);
term_flushln(p);
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
p->trailspace = 0;
p->flags &= ~TERMP_NOBREAK;
p->flags |= TERMP_NOSPACE;
@@ -451,8 +455,8 @@ print_mdoc_foot(struct termp *p, const struct roff_meta *meta)
term_word(p, meta->os);
term_flushln(p);
- p->offset = 0;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = 0;
+ p->tcol->rmargin = p->maxrmargin;
p->flags = 0;
}
@@ -492,8 +496,8 @@ print_mdoc_head(struct termp *p, const struct roff_meta *meta)
p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
p->trailspace = 1;
- p->offset = 0;
- p->rmargin = 2 * (titlen+1) + vollen < p->maxrmargin ?
+ p->tcol->offset = 0;
+ p->tcol->rmargin = 2 * (titlen+1) + vollen < p->maxrmargin ?
(p->maxrmargin - vollen + term_len(p, 1)) / 2 :
vollen < p->maxrmargin ? p->maxrmargin - vollen : 0;
@@ -501,26 +505,26 @@ print_mdoc_head(struct termp *p, const struct roff_meta *meta)
term_flushln(p);
p->flags |= TERMP_NOSPACE;
- p->offset = p->rmargin;
- p->rmargin = p->offset + vollen + titlen < p->maxrmargin ?
- p->maxrmargin - titlen : p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->tcol->offset + vollen + titlen <
+ p->maxrmargin ? p->maxrmargin - titlen : p->maxrmargin;
term_word(p, volume);
term_flushln(p);
p->flags &= ~TERMP_NOBREAK;
p->trailspace = 0;
- if (p->rmargin + titlen <= p->maxrmargin) {
+ if (p->tcol->rmargin + titlen <= p->maxrmargin) {
p->flags |= TERMP_NOSPACE;
- p->offset = p->rmargin;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
term_word(p, title);
term_flushln(p);
}
p->flags &= ~TERMP_NOSPACE;
- p->offset = 0;
- p->rmargin = p->maxrmargin;
+ p->tcol->offset = 0;
+ p->tcol->rmargin = p->maxrmargin;
free(title);
free(volume);
}
@@ -529,8 +533,10 @@ static int
a2width(const struct termp *p, const char *v)
{
struct roffsu su;
+ const char *end;
- if (a2roffsu(v, &su, SCALE_MAX) < 2) {
+ end = a2roffsu(v, &su, SCALE_MAX);
+ if (end == NULL || *end != '\0') {
SCALE_HS_INIT(&su, term_strlen(p, v));
su.scale /= term_strlen(p, "0");
}
@@ -596,14 +602,6 @@ print_bvspace(struct termp *p,
static int
-termp_ll_pre(DECL_ARGS)
-{
-
- term_setwidth(p, n->child != NULL ? n->child->string : NULL);
- return 0;
-}
-
-static int
termp_it_pre(DECL_ARGS)
{
struct roffsu su;
@@ -653,8 +651,8 @@ termp_it_pre(DECL_ARGS)
if (bl->norm->Bl.offs != NULL) {
offset = a2width(p, bl->norm->Bl.offs);
- if (offset < 0 && (size_t)(-offset) > p->offset)
- offset = -p->offset;
+ if (offset < 0 && (size_t)(-offset) > p->tcol->offset)
+ offset = -p->tcol->offset;
else if (offset > SHRT_MAX)
offset = 0;
}
@@ -718,8 +716,8 @@ termp_it_pre(DECL_ARGS)
* handling for column for how this changes.
*/
width = a2width(p, bl->norm->Bl.width) + term_len(p, 2);
- if (width < 0 && (size_t)(-width) > p->offset)
- width = -p->offset;
+ if (width < 0 && (size_t)(-width) > p->tcol->offset)
+ width = -p->tcol->offset;
else if (width > SHRT_MAX)
width = 0;
break;
@@ -768,33 +766,15 @@ termp_it_pre(DECL_ARGS)
case LIST_bullet:
case LIST_dash:
case LIST_hyphen:
- /*
- * Weird special case.
- * Some very narrow lists actually hang.
- */
- if (width <= (int)term_len(p, 2))
- p->flags |= TERMP_HANG;
- if (n->type != ROFFT_HEAD)
- break;
- p->flags |= TERMP_NOBREAK;
- p->trailspace = 1;
+ if (n->type == ROFFT_HEAD) {
+ p->flags |= TERMP_NOBREAK | TERMP_HANG;
+ p->trailspace = 1;
+ } else if (width <= (int)term_len(p, 2))
+ p->flags |= TERMP_NOPAD;
break;
case LIST_hang:
if (n->type != ROFFT_HEAD)
break;
-
- /*
- * This is ugly. If `-hang' is specified and the body
- * is a `Bl' or `Bd', then we want basically to nullify
- * the "overstep" effect in term_flushln() and treat
- * this as a `-ohang' list instead.
- */
- if (NULL != n->next &&
- NULL != n->next->child &&
- (MDOC_Bl == n->next->child->tok ||
- MDOC_Bd == n->next->child->tok))
- break;
-
p->flags |= TERMP_NOBREAK | TERMP_BRIND | TERMP_HANG;
p->trailspace = 1;
break;
@@ -806,7 +786,7 @@ termp_it_pre(DECL_ARGS)
p->trailspace = 2;
if (NULL == n->next || NULL == n->next->child)
- p->flags |= TERMP_DANGLE;
+ p->flags |= TERMP_HANG;
break;
case LIST_column:
if (n->type == ROFFT_HEAD)
@@ -837,43 +817,31 @@ termp_it_pre(DECL_ARGS)
* necessarily lengthened. Everybody gets the offset.
*/
- p->offset += offset;
+ p->tcol->offset += offset;
switch (type) {
- case LIST_hang:
- /*
- * Same stipulation as above, regarding `-hang'. We
- * don't want to recalculate rmargin and offsets when
- * using `Bd' or `Bl' within `-hang' overstep lists.
- */
- if (n->type == ROFFT_HEAD &&
- NULL != n->next &&
- NULL != n->next->child &&
- (MDOC_Bl == n->next->child->tok ||
- MDOC_Bd == n->next->child->tok))
- break;
- /* FALLTHROUGH */
case LIST_bullet:
case LIST_dash:
case LIST_enum:
case LIST_hyphen:
+ case LIST_hang:
case LIST_tag:
if (n->type == ROFFT_HEAD)
- p->rmargin = p->offset + width;
+ p->tcol->rmargin = p->tcol->offset + width;
else
- p->offset += width;
+ p->tcol->offset += width;
break;
case LIST_column:
assert(width);
- p->rmargin = p->offset + width;
+ p->tcol->rmargin = p->tcol->offset + width;
/*
* XXX - this behaviour is not documented: the
* right-most column is filled to the right margin.
*/
if (n->type == ROFFT_HEAD)
break;
- if (NULL == n->next && p->rmargin < p->maxrmargin)
- p->rmargin = p->maxrmargin;
+ if (n->next == NULL && p->tcol->rmargin < p->maxrmargin)
+ p->tcol->rmargin = p->maxrmargin;
break;
default:
break;
@@ -923,6 +891,7 @@ termp_it_pre(DECL_ARGS)
case LIST_column:
if (n->type == ROFFT_HEAD)
return 0;
+ p->minbl = 0;
break;
default:
break;
@@ -963,8 +932,7 @@ termp_it_post(DECL_ARGS)
* has munged them in the meanwhile.
*/
- p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP | TERMP_BRIND |
- TERMP_DANGLE | TERMP_HANG);
+ p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP | TERMP_BRIND | TERMP_HANG);
p->trailspace = 0;
}
@@ -979,7 +947,7 @@ termp_nm_pre(DECL_ARGS)
}
if (n->type == ROFFT_BODY) {
- if (NULL == n->child)
+ if (n->child == NULL)
return 0;
p->flags |= TERMP_NOSPACE;
cp = NULL;
@@ -988,9 +956,10 @@ termp_nm_pre(DECL_ARGS)
if (cp == NULL)
cp = meta->name;
if (cp == NULL)
- p->offset += term_len(p, 6);
+ p->tcol->offset += term_len(p, 6);
else
- p->offset += term_len(p, 1) + term_strlen(p, cp);
+ p->tcol->offset += term_len(p, 1) +
+ term_strlen(p, cp);
return 1;
}
@@ -1001,18 +970,18 @@ termp_nm_pre(DECL_ARGS)
synopsis_pre(p, n->parent);
if (n->type == ROFFT_HEAD &&
- NULL != n->next && NULL != n->next->child) {
+ n->next != NULL && n->next->child != NULL) {
p->flags |= TERMP_NOSPACE | TERMP_NOBREAK | TERMP_BRIND;
p->trailspace = 1;
- p->rmargin = p->offset + term_len(p, 1);
- if (NULL == n->child) {
- p->rmargin += term_strlen(p, meta->name);
- } else if (n->child->type == ROFFT_TEXT) {
- p->rmargin += term_strlen(p, n->child->string);
- if (n->child->next)
+ p->tcol->rmargin = p->tcol->offset + term_len(p, 1);
+ if (n->child == NULL)
+ p->tcol->rmargin += term_strlen(p, meta->name);
+ else if (n->child->type == ROFFT_TEXT) {
+ p->tcol->rmargin += term_strlen(p, n->child->string);
+ if (n->child->next != NULL)
p->flags |= TERMP_HANG;
} else {
- p->rmargin += term_len(p, 5);
+ p->tcol->rmargin += term_len(p, 5);
p->flags |= TERMP_HANG;
}
}
@@ -1135,8 +1104,14 @@ static void
termp_bl_post(DECL_ARGS)
{
- if (n->type == ROFFT_BLOCK)
- term_newln(p);
+ if (n->type != ROFFT_BLOCK)
+ return;
+ term_newln(p);
+ if (n->tok != MDOC_Bl || n->norm->Bl.type != LIST_column)
+ return;
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
}
static int
@@ -1278,7 +1253,10 @@ termp_sh_pre(DECL_ARGS)
term_fontpush(p, TERMFONT_BOLD);
break;
case ROFFT_BODY:
- p->offset = term_len(p, p->defindent);
+ p->tcol->offset = term_len(p, p->defindent);
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
switch (n->sec) {
case SEC_DESCRIPTION:
fn_prio = 0;
@@ -1306,7 +1284,7 @@ termp_sh_post(DECL_ARGS)
break;
case ROFFT_BODY:
term_newln(p);
- p->offset = 0;
+ p->tcol->offset = 0;
break;
default:
break;
@@ -1328,7 +1306,10 @@ termp_d1_pre(DECL_ARGS)
if (n->type != ROFFT_BLOCK)
return 1;
term_newln(p);
- p->offset += term_len(p, p->defindent + 1);
+ p->tcol->offset += term_len(p, p->defindent + 1);
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
return 1;
}
@@ -1356,8 +1337,8 @@ termp_fn_pre(DECL_ARGS)
return 0;
if (pretty) {
- rmargin = p->rmargin;
- p->rmargin = p->offset + term_len(p, 4);
+ rmargin = p->tcol->rmargin;
+ p->tcol->rmargin = p->tcol->offset + term_len(p, 4);
p->flags |= TERMP_NOBREAK | TERMP_BRIND | TERMP_HANG;
}
@@ -1372,8 +1353,9 @@ termp_fn_pre(DECL_ARGS)
if (pretty) {
term_flushln(p);
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND | TERMP_HANG);
- p->offset = p->rmargin;
- p->rmargin = rmargin;
+ p->flags |= TERMP_NOPAD;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = rmargin;
}
p->flags |= TERMP_NOSPACE;
@@ -1434,7 +1416,7 @@ termp_fa_pre(DECL_ARGS)
static int
termp_bd_pre(DECL_ARGS)
{
- size_t tabwidth, lm, len, rm, rmax;
+ size_t lm, len;
struct roff_node *nn;
int offset;
@@ -1450,15 +1432,15 @@ termp_bd_pre(DECL_ARGS)
! strcmp(n->norm->Bd.offs, "left"))
/* nothing */;
else if ( ! strcmp(n->norm->Bd.offs, "indent"))
- p->offset += term_len(p, p->defindent + 1);
+ p->tcol->offset += term_len(p, p->defindent + 1);
else if ( ! strcmp(n->norm->Bd.offs, "indent-two"))
- p->offset += term_len(p, (p->defindent + 1) * 2);
+ p->tcol->offset += term_len(p, (p->defindent + 1) * 2);
else {
offset = a2width(p, n->norm->Bd.offs);
- if (offset < 0 && (size_t)(-offset) > p->offset)
- p->offset = 0;
+ if (offset < 0 && (size_t)(-offset) > p->tcol->offset)
+ p->tcol->offset = 0;
else if (offset < SHRT_MAX)
- p->offset += offset;
+ p->tcol->offset += offset;
}
/*
@@ -1469,29 +1451,29 @@ termp_bd_pre(DECL_ARGS)
* lines are allowed.
*/
- if (DISP_literal != n->norm->Bd.type &&
- DISP_unfilled != n->norm->Bd.type &&
- DISP_centered != n->norm->Bd.type)
+ if (n->norm->Bd.type != DISP_literal &&
+ n->norm->Bd.type != DISP_unfilled &&
+ n->norm->Bd.type != DISP_centered)
return 1;
- tabwidth = p->tabwidth;
- if (DISP_literal == n->norm->Bd.type)
- p->tabwidth = term_len(p, 8);
-
- lm = p->offset;
- rm = p->rmargin;
- rmax = p->maxrmargin;
- p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
+ if (n->norm->Bd.type == DISP_literal) {
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, "8n");
+ }
- for (nn = n->child; nn; nn = nn->next) {
- if (DISP_centered == n->norm->Bd.type) {
+ lm = p->tcol->offset;
+ p->flags |= TERMP_BRNEVER;
+ for (nn = n->child; nn != NULL; nn = nn->next) {
+ if (n->norm->Bd.type == DISP_centered) {
if (nn->type == ROFFT_TEXT) {
len = term_strlen(p, nn->string);
- p->offset = len >= rm ? 0 :
- lm + len >= rm ? rm - len :
- (lm + rm - len) / 2;
+ p->tcol->offset = len >= p->tcol->rmargin ?
+ 0 : lm + len >= p->tcol->rmargin ?
+ p->tcol->rmargin - len :
+ (lm + p->tcol->rmargin - len) / 2;
} else
- p->offset = lm;
+ p->tcol->offset = lm;
}
print_mdoc_node(p, pair, meta, nn);
/*
@@ -1500,10 +1482,10 @@ termp_bd_pre(DECL_ARGS)
* notion of selective eoln whitespace is pretty dumb
* anyway, so don't sweat it.
*/
+ if (nn->tok < ROFF_MAX)
+ continue;
switch (nn->tok) {
case MDOC_Sm:
- case MDOC_br:
- case MDOC_sp:
case MDOC_Bl:
case MDOC_D1:
case MDOC_Dl:
@@ -1519,33 +1501,21 @@ termp_bd_pre(DECL_ARGS)
term_flushln(p);
p->flags |= TERMP_NOSPACE;
}
-
- p->tabwidth = tabwidth;
- p->rmargin = rm;
- p->maxrmargin = rmax;
+ p->flags &= ~TERMP_BRNEVER;
return 0;
}
static void
termp_bd_post(DECL_ARGS)
{
- size_t rm, rmax;
-
if (n->type != ROFFT_BODY)
return;
-
- rm = p->rmargin;
- rmax = p->maxrmargin;
-
if (DISP_literal == n->norm->Bd.type ||
DISP_unfilled == n->norm->Bd.type)
- p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
-
+ p->flags |= TERMP_BRNEVER;
p->flags |= TERMP_NOSPACE;
term_newln(p);
-
- p->rmargin = rm;
- p->maxrmargin = rmax;
+ p->flags &= ~TERMP_BRNEVER;
}
static int
@@ -1587,10 +1557,13 @@ termp_ss_pre(DECL_ARGS)
break;
case ROFFT_HEAD:
term_fontpush(p, TERMFONT_BOLD);
- p->offset = term_len(p, (p->defindent+1)/2);
+ p->tcol->offset = term_len(p, (p->defindent+1)/2);
break;
case ROFFT_BODY:
- p->offset = term_len(p, p->defindent);
+ p->tcol->offset = term_len(p, p->defindent);
+ term_tab_set(p, NULL);
+ term_tab_set(p, "T");
+ term_tab_set(p, ".5i");
break;
default:
break;
@@ -1650,37 +1623,10 @@ termp_in_post(DECL_ARGS)
}
static int
-termp_sp_pre(DECL_ARGS)
+termp_pp_pre(DECL_ARGS)
{
- struct roffsu su;
- int i, len;
-
- switch (n->tok) {
- case MDOC_sp:
- if (n->child) {
- if ( ! a2roffsu(n->child->string, &su, SCALE_VS))
- su.scale = 1.0;
- len = term_vspan(p, &su);
- } else
- len = 1;
- break;
- case MDOC_br:
- len = 0;
- break;
- default:
- len = 1;
- fn_prio = 0;
- break;
- }
-
- if (0 == len)
- term_newln(p);
- else if (len < 0)
- p->skipvsp -= len;
- else
- for (i = 0; i < len; i++)
- term_vspace(p);
-
+ fn_prio = 0;
+ term_vspace(p);
return 0;
}
@@ -1861,8 +1807,8 @@ termp_fo_pre(DECL_ARGS)
return 1;
} else if (n->type == ROFFT_BODY) {
if (pretty) {
- rmargin = p->rmargin;
- p->rmargin = p->offset + term_len(p, 4);
+ rmargin = p->tcol->rmargin;
+ p->tcol->rmargin = p->tcol->offset + term_len(p, 4);
p->flags |= TERMP_NOBREAK | TERMP_BRIND |
TERMP_HANG;
}
@@ -1873,8 +1819,9 @@ termp_fo_pre(DECL_ARGS)
term_flushln(p);
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND |
TERMP_HANG);
- p->offset = p->rmargin;
- p->rmargin = rmargin;
+ p->flags |= TERMP_NOPAD;
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = rmargin;
}
return 1;
}
@@ -1992,26 +1939,50 @@ termp_li_pre(DECL_ARGS)
static int
termp_lk_pre(DECL_ARGS)
{
- const struct roff_node *link, *descr;
+ const struct roff_node *link, *descr, *punct;
+ int display;
- if (NULL == (link = n->child))
+ if ((link = n->child) == NULL)
return 0;
- if (NULL != (descr = link->next)) {
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
+
+ /* Link text. */
+ if ((descr = link->next) != NULL && descr != punct) {
term_fontpush(p, TERMFONT_UNDER);
- while (NULL != descr) {
+ while (descr != punct) {
+ if (descr->flags & (NODE_DELIMC | NODE_DELIMO))
+ p->flags |= TERMP_NOSPACE;
term_word(p, descr->string);
descr = descr->next;
}
+ term_fontpop(p);
p->flags |= TERMP_NOSPACE;
term_word(p, ":");
- term_fontpop(p);
}
+ /* Link target. */
+ display = term_strlen(p, link->string) >= 26;
+ if (display) {
+ term_newln(p);
+ p->tcol->offset += term_len(p, p->defindent + 1);
+ }
term_fontpush(p, TERMFONT_BOLD);
term_word(p, link->string);
term_fontpop(p);
+ /* Trailing punctuation. */
+ while (punct != NULL) {
+ p->flags |= TERMP_NOSPACE;
+ term_word(p, punct->string);
+ punct = punct->next;
+ }
+ if (display)
+ term_newln(p);
return 0;
}
diff --git a/contrib/mdocml/mdoc_validate.c b/contrib/mdocml/mdoc_validate.c
index e58e7a4721a9..9bf1efb3d784 100644
--- a/contrib/mdocml/mdoc_validate.c
+++ b/contrib/mdocml/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.318 2017/02/06 03:44:58 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.332 2017/06/08 00:23:30 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -53,12 +53,13 @@ typedef void (*v_post)(POST_ARGS);
static int build_list(struct roff_man *, int);
static void check_text(struct roff_man *, int, int, char *);
+static void check_bsd(struct roff_man *, int, int, char *);
static void check_argv(struct roff_man *,
struct roff_node *, struct mdoc_argv *);
static void check_args(struct roff_man *, struct roff_node *);
static int child_an(const struct roff_node *);
-static size_t macro2len(int);
-static void rewrite_macro2len(char **);
+static size_t macro2len(enum roff_tok);
+static void rewrite_macro2len(struct roff_man *, char **);
static void post_an(POST_ARGS);
static void post_an_norm(POST_ARGS);
@@ -105,11 +106,11 @@ static void post_sh_authors(POST_ARGS);
static void post_sm(POST_ARGS);
static void post_st(POST_ARGS);
static void post_std(POST_ARGS);
+static void post_useless(POST_ARGS);
static void post_xr(POST_ARGS);
static void post_xx(POST_ARGS);
-static v_post mdoc_valids[MDOC_MAX] = {
- NULL, /* Ap */
+static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] = {
post_dd, /* Dd */
post_dt, /* Dt */
post_os, /* Os */
@@ -125,6 +126,7 @@ static v_post mdoc_valids[MDOC_MAX] = {
post_it, /* It */
NULL, /* Ad */
post_an, /* An */
+ NULL, /* Ap */
post_defaults, /* Ar */
NULL, /* Cd */
NULL, /* Cm */
@@ -201,7 +203,7 @@ static v_post mdoc_valids[MDOC_MAX] = {
post_sm, /* Sm */
post_hyph, /* Sx */
NULL, /* Sy */
- NULL, /* Tn */
+ post_useless, /* Tn */
post_xx, /* Ux */
NULL, /* Xc */
NULL, /* Xo */
@@ -227,16 +229,14 @@ static v_post mdoc_valids[MDOC_MAX] = {
post_en, /* En */
post_xx, /* Dx */
NULL, /* %Q */
- post_par, /* br */
- post_par, /* sp */
NULL, /* %U */
NULL, /* Ta */
- NULL, /* ll */
};
+static const v_post *const mdoc_valids = __mdoc_valids - MDOC_Dd;
#define RSORD_MAX 14 /* Number of `Rs' blocks. */
-static const int rsord[RSORD_MAX] = {
+static const enum roff_tok rsord[RSORD_MAX] = {
MDOC__A,
MDOC__T,
MDOC__B,
@@ -284,7 +284,7 @@ void
mdoc_node_validate(struct roff_man *mdoc)
{
struct roff_node *n;
- v_post *p;
+ const v_post *p;
n = mdoc->last;
mdoc->last = mdoc->last->child;
@@ -303,6 +303,10 @@ mdoc_node_validate(struct roff_man *mdoc)
if (n->sec != SEC_SYNOPSIS ||
(n->parent->tok != MDOC_Cd && n->parent->tok != MDOC_Fd))
check_text(mdoc, n->line, n->pos, n->string);
+ if (n->parent->tok == MDOC_Sh ||
+ n->parent->tok == MDOC_Ss ||
+ n->parent->tok == MDOC_It)
+ check_bsd(mdoc, n->line, n->pos, n->string);
break;
case ROFFT_EQN:
case ROFFT_TBL:
@@ -326,6 +330,20 @@ mdoc_node_validate(struct roff_man *mdoc)
/* Call the macro's postprocessor. */
+ if (n->tok < ROFF_MAX) {
+ switch(n->tok) {
+ case ROFF_br:
+ case ROFF_sp:
+ post_par(mdoc);
+ break;
+ default:
+ roff_validate(mdoc);
+ break;
+ }
+ break;
+ }
+
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
p = mdoc_valids + n->tok;
if (*p)
(*p)(mdoc);
@@ -371,6 +389,25 @@ check_text(struct roff_man *mdoc, int ln, int pos, char *p)
}
static void
+check_bsd(struct roff_man *mdoc, int ln, int pos, char *p)
+{
+ const char *cp;
+
+ if ((cp = strstr(p, "OpenBSD")) != NULL)
+ mandoc_msg(MANDOCERR_BX, mdoc->parse,
+ ln, pos + (cp - p), "Ox");
+ if ((cp = strstr(p, "NetBSD")) != NULL)
+ mandoc_msg(MANDOCERR_BX, mdoc->parse,
+ ln, pos + (cp - p), "Nx");
+ if ((cp = strstr(p, "FreeBSD")) != NULL)
+ mandoc_msg(MANDOCERR_BX, mdoc->parse,
+ ln, pos + (cp - p), "Fx");
+ if ((cp = strstr(p, "DragonFly")) != NULL)
+ mandoc_msg(MANDOCERR_BX, mdoc->parse,
+ ln, pos + (cp - p), "Dx");
+}
+
+static void
post_bl_norm(POST_ARGS)
{
struct roff_node *n;
@@ -450,7 +487,7 @@ post_bl_norm(POST_ARGS)
mdoc->parse, argv->line,
argv->pos, "Bl -width %s",
argv->value[0]);
- rewrite_macro2len(argv->value);
+ rewrite_macro2len(mdoc, argv->value);
n->norm->Bl.width = argv->value[0];
break;
case MDOC_Offset:
@@ -465,7 +502,7 @@ post_bl_norm(POST_ARGS)
mdoc->parse, argv->line,
argv->pos, "Bl -offset %s",
argv->value[0]);
- rewrite_macro2len(argv->value);
+ rewrite_macro2len(mdoc, argv->value);
n->norm->Bl.offs = argv->value[0];
break;
default:
@@ -592,7 +629,7 @@ post_bd(POST_ARGS)
mdoc->parse, argv->line,
argv->pos, "Bd -offset %s",
argv->value[0]);
- rewrite_macro2len(argv->value);
+ rewrite_macro2len(mdoc, argv->value);
n->norm->Bd.offs = argv->value[0];
break;
case MDOC_Compact:
@@ -659,11 +696,11 @@ post_eoln(POST_ARGS)
{
struct roff_node *n;
+ post_useless(mdoc);
n = mdoc->last;
if (n->child != NULL)
- mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse,
- n->line, n->pos, "%s %s",
- mdoc_macronames[n->tok], n->child->string);
+ mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, n->line,
+ n->pos, "%s %s", roff_name[n->tok], n->child->string);
while (n->child != NULL)
roff_node_delete(mdoc, n->child);
@@ -757,6 +794,9 @@ post_lb(POST_ARGS)
return;
}
+ mandoc_vmsg(MANDOCERR_LB_BAD, mdoc->parse, n->child->line,
+ n->child->pos, "Lb %s", n->child->string);
+
roff_word_alloc(mdoc, n->line, n->pos, "library");
mdoc->last->flags = NODE_NOSRC;
roff_word_alloc(mdoc, n->line, n->pos, "\\(Lq");
@@ -817,7 +857,7 @@ post_std(POST_ARGS)
return;
mandoc_msg(MANDOCERR_ARG_STD, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
}
static void
@@ -852,7 +892,17 @@ post_obsolete(POST_ARGS)
n = mdoc->last;
if (n->type == ROFFT_ELEM || n->type == ROFFT_BLOCK)
mandoc_msg(MANDOCERR_MACRO_OBS, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
+}
+
+static void
+post_useless(POST_ARGS)
+{
+ struct roff_node *n;
+
+ n = mdoc->last;
+ mandoc_msg(MANDOCERR_MACRO_USELESS, mdoc->parse,
+ n->line, n->pos, roff_name[n->tok]);
}
/*
@@ -1029,15 +1079,25 @@ static void
post_nd(POST_ARGS)
{
struct roff_node *n;
+ size_t sz;
n = mdoc->last;
if (n->type != ROFFT_BODY)
return;
+ if (n->sec != SEC_NAME)
+ mandoc_msg(MANDOCERR_ND_LATE, mdoc->parse,
+ n->line, n->pos, "Nd");
+
if (n->child == NULL)
mandoc_msg(MANDOCERR_ND_EMPTY, mdoc->parse,
n->line, n->pos, "Nd");
+ else if (n->last->type == ROFFT_TEXT &&
+ (sz = strlen(n->last->string)) != 0 &&
+ n->last->string[sz - 1] == '.')
+ mandoc_msg(MANDOCERR_ND_DOT, mdoc->parse,
+ n->last->line, n->last->pos + sz - 1, NULL);
post_hyph(mdoc);
}
@@ -1056,7 +1116,7 @@ post_display(POST_ARGS)
roff_node_delete(mdoc, n);
} else if (n->child == NULL)
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
else if (n->tok == MDOC_D1)
post_hyph(mdoc);
break;
@@ -1079,7 +1139,7 @@ post_display(POST_ARGS)
if (np->type == ROFFT_BLOCK && np->tok == MDOC_Bd) {
mandoc_vmsg(MANDOCERR_BD_NEST,
mdoc->parse, n->line, n->pos,
- "%s in Bd", mdoc_macronames[n->tok]);
+ "%s in Bd", roff_name[n->tok]);
break;
}
}
@@ -1265,10 +1325,10 @@ post_it(POST_ARGS)
/* FALLTHROUGH */
case LIST_item:
if ((nch = nit->head->child) != NULL)
- mandoc_vmsg(MANDOCERR_ARG_SKIP,
- mdoc->parse, nit->line, nit->pos,
- "It %s", nch->string == NULL ?
- mdoc_macronames[nch->tok] : nch->string);
+ mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse,
+ nit->line, nit->pos, "It %s",
+ nch->string == NULL ? roff_name[nch->tok] :
+ nch->string);
break;
case LIST_column:
cols = (int)nbl->norm->Bl.ncols;
@@ -1306,7 +1366,7 @@ post_bl_block(POST_ARGS)
switch (nc->tok) {
case MDOC_Pp:
case MDOC_Lp:
- case MDOC_br:
+ case ROFF_br:
break;
default:
nc = NULL;
@@ -1315,14 +1375,13 @@ post_bl_block(POST_ARGS)
if (ni->next == NULL) {
mandoc_msg(MANDOCERR_PAR_MOVE,
mdoc->parse, nc->line, nc->pos,
- mdoc_macronames[nc->tok]);
+ roff_name[nc->tok]);
mdoc_node_relink(mdoc, nc);
} else if (n->norm->Bl.comp == 0 &&
n->norm->Bl.type != LIST_column) {
mandoc_vmsg(MANDOCERR_PAR_SKIP,
mdoc->parse, nc->line, nc->pos,
- "%s before It",
- mdoc_macronames[nc->tok]);
+ "%s before It", roff_name[nc->tok]);
roff_node_delete(mdoc, nc);
} else
break;
@@ -1335,17 +1394,17 @@ post_bl_block(POST_ARGS)
* If the argument of -offset or -width is a macro,
* replace it with the associated default width.
*/
-void
-rewrite_macro2len(char **arg)
+static void
+rewrite_macro2len(struct roff_man *mdoc, char **arg)
{
size_t width;
- int tok;
+ enum roff_tok tok;
if (*arg == NULL)
return;
else if ( ! strcmp(*arg, "Ds"))
width = 6;
- else if ((tok = mdoc_hash_find(*arg)) == TOKEN_NONE)
+ else if ((tok = roffhash_find(mdoc->mdocmac, *arg, 0)) == TOKEN_NONE)
return;
else
width = macro2len(tok);
@@ -1423,6 +1482,8 @@ post_bl(POST_ARGS)
struct roff_node *nparent, *nprev; /* of the Bl block */
struct roff_node *nblock, *nbody; /* of the Bl */
struct roff_node *nchild, *nnext; /* of the Bl body */
+ const char *prev_Er;
+ int order;
nbody = mdoc->last;
switch (nbody->type) {
@@ -1486,8 +1547,7 @@ post_bl(POST_ARGS)
}
mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse,
- nchild->line, nchild->pos,
- mdoc_macronames[nchild->tok]);
+ nchild->line, nchild->pos, roff_name[nchild->tok]);
/*
* Move the node out of the Bl block.
@@ -1524,6 +1584,34 @@ post_bl(POST_ARGS)
nchild = nnext;
}
+
+ if (mdoc->meta.os_e != MDOC_OS_NETBSD)
+ return;
+
+ prev_Er = NULL;
+ for (nchild = nbody->child; nchild != NULL; nchild = nchild->next) {
+ if (nchild->tok != MDOC_It)
+ continue;
+ if ((nnext = nchild->head->child) == NULL)
+ continue;
+ if (nnext->type == ROFFT_BLOCK)
+ nnext = nnext->body->child;
+ if (nnext == NULL || nnext->tok != MDOC_Er)
+ continue;
+ nnext = nnext->child;
+ if (prev_Er != NULL) {
+ order = strcmp(prev_Er, nnext->string);
+ if (order > 0)
+ mandoc_vmsg(MANDOCERR_ER_ORDER,
+ mdoc->parse, nnext->line, nnext->pos,
+ "Er %s %s", prev_Er, nnext->string);
+ else if (order == 0)
+ mandoc_vmsg(MANDOCERR_ER_REP,
+ mdoc->parse, nnext->line, nnext->pos,
+ "Er %s", prev_Er);
+ }
+ prev_Er = nnext->string;
+ }
}
static void
@@ -1565,7 +1653,7 @@ post_sm(POST_ARGS)
mandoc_vmsg(MANDOCERR_SM_BAD,
mdoc->parse, nch->line, nch->pos,
- "%s %s", mdoc_macronames[mdoc->last->tok], nch->string);
+ "%s %s", roff_name[mdoc->last->tok], nch->string);
mdoc_node_relink(mdoc, nch);
return;
}
@@ -1608,7 +1696,7 @@ post_root(POST_ARGS)
mandoc_msg(MANDOCERR_DOC_EMPTY, mdoc->parse, 0, 0, NULL);
else if (n->tok != MDOC_Sh)
mandoc_msg(MANDOCERR_SEC_BEFORE, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
}
static void
@@ -1642,9 +1730,8 @@ post_rs(POST_ARGS)
break;
if (i == RSORD_MAX) {
- mandoc_msg(MANDOCERR_RS_BAD,
- mdoc->parse, nch->line, nch->pos,
- mdoc_macronames[nch->tok]);
+ mandoc_msg(MANDOCERR_RS_BAD, mdoc->parse,
+ nch->line, nch->pos, roff_name[nch->tok]);
i = -1;
} else if (nch->tok == MDOC__J || nch->tok == MDOC__B)
np->norm->Rs.quote_T++;
@@ -1797,7 +1884,7 @@ post_sh_name(POST_ARGS)
/* FALLTHROUGH */
default:
mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
- n->line, n->pos, mdoc_macronames[n->tok]);
+ n->line, n->pos, roff_name[n->tok]);
continue;
}
break;
@@ -1867,7 +1954,7 @@ post_sh_see_also(POST_ARGS)
if (isalpha((const unsigned char)*name))
return;
lastpunct = n->string;
- if (n->next == NULL)
+ if (n->next == NULL || n->next->tok == MDOC_Rs)
mandoc_vmsg(MANDOCERR_XR_PUNCT, mdoc->parse,
n->line, n->pos, "%s after %s(%s)",
lastpunct, lastname, lastsec);
@@ -1918,7 +2005,7 @@ post_sh_head(POST_ARGS)
sec != SEC_CUSTOM ? secnames[sec] :
(nch = mdoc->last->child) == NULL ? "" :
nch->type == ROFFT_TEXT ? nch->string :
- mdoc_macronames[nch->tok]);
+ roff_name[nch->tok]);
/* The SYNOPSIS gets special attention in other areas. */
@@ -2014,6 +2101,9 @@ post_ignpar(POST_ARGS)
struct roff_node *np;
switch (mdoc->last->type) {
+ case ROFFT_BLOCK:
+ post_prevpar(mdoc);
+ return;
case ROFFT_HEAD:
post_hyph(mdoc);
return;
@@ -2027,8 +2117,8 @@ post_ignpar(POST_ARGS)
if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) {
mandoc_vmsg(MANDOCERR_PAR_SKIP,
mdoc->parse, np->line, np->pos,
- "%s after %s", mdoc_macronames[np->tok],
- mdoc_macronames[mdoc->last->tok]);
+ "%s after %s", roff_name[np->tok],
+ roff_name[mdoc->last->tok]);
roff_node_delete(mdoc, np);
}
@@ -2036,8 +2126,8 @@ post_ignpar(POST_ARGS)
if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) {
mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
np->line, np->pos, "%s at the end of %s",
- mdoc_macronames[np->tok],
- mdoc_macronames[mdoc->last->tok]);
+ roff_name[np->tok],
+ roff_name[mdoc->last->tok]);
roff_node_delete(mdoc, np);
}
}
@@ -2060,7 +2150,7 @@ post_prevpar(POST_ARGS)
if (n->prev->tok != MDOC_Pp &&
n->prev->tok != MDOC_Lp &&
- n->prev->tok != MDOC_br)
+ n->prev->tok != ROFF_br)
return;
if (n->tok == MDOC_Bl && n->norm->Bl.comp)
return;
@@ -2070,9 +2160,8 @@ post_prevpar(POST_ARGS)
return;
mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
- n->prev->line, n->prev->pos,
- "%s before %s", mdoc_macronames[n->prev->tok],
- mdoc_macronames[n->tok]);
+ n->prev->line, n->prev->pos, "%s before %s",
+ roff_name[n->prev->tok], roff_name[n->tok]);
roff_node_delete(mdoc, n->prev);
}
@@ -2082,10 +2171,10 @@ post_par(POST_ARGS)
struct roff_node *np;
np = mdoc->last;
- if (np->tok != MDOC_br && np->tok != MDOC_sp)
+ if (np->tok != ROFF_br && np->tok != ROFF_sp)
post_prevpar(mdoc);
- if (np->tok == MDOC_sp) {
+ if (np->tok == ROFF_sp) {
if (np->child != NULL && np->child->next != NULL)
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
np->child->next->line, np->child->next->pos,
@@ -2093,21 +2182,20 @@ post_par(POST_ARGS)
} else if (np->child != NULL)
mandoc_vmsg(MANDOCERR_ARG_SKIP,
mdoc->parse, np->line, np->pos, "%s %s",
- mdoc_macronames[np->tok], np->child->string);
+ roff_name[np->tok], np->child->string);
if ((np = mdoc->last->prev) == NULL) {
np = mdoc->last->parent;
if (np->tok != MDOC_Sh && np->tok != MDOC_Ss)
return;
} else if (np->tok != MDOC_Pp && np->tok != MDOC_Lp &&
- (mdoc->last->tok != MDOC_br ||
- (np->tok != MDOC_sp && np->tok != MDOC_br)))
+ (mdoc->last->tok != ROFF_br ||
+ (np->tok != ROFF_sp && np->tok != ROFF_br)))
return;
mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
- mdoc->last->line, mdoc->last->pos,
- "%s after %s", mdoc_macronames[mdoc->last->tok],
- mdoc_macronames[np->tok]);
+ mdoc->last->line, mdoc->last->pos, "%s after %s",
+ roff_name[mdoc->last->tok], roff_name[np->tok]);
roff_node_delete(mdoc, mdoc->last);
}
@@ -2251,11 +2339,19 @@ static void
post_bx(POST_ARGS)
{
struct roff_node *n, *nch;
+ const char *macro;
n = mdoc->last;
nch = n->child;
if (nch != NULL) {
+ macro = !strcmp(nch->string, "Open") ? "Ox" :
+ !strcmp(nch->string, "Net") ? "Nx" :
+ !strcmp(nch->string, "Free") ? "Fx" :
+ !strcmp(nch->string, "DragonFly") ? "Dx" : NULL;
+ if (macro != NULL)
+ mandoc_msg(MANDOCERR_BX, mdoc->parse,
+ n->line, n->pos, macro);
mdoc->last = nch;
nch = nch->next;
mdoc->next = ROFF_NEXT_SIBLING;
@@ -2322,11 +2418,11 @@ post_os(POST_ARGS)
mdoc->meta.os = NULL;
deroff(&mdoc->meta.os, n);
if (mdoc->meta.os)
- return;
+ goto out;
if (mdoc->defos) {
mdoc->meta.os = mandoc_strdup(mdoc->defos);
- return;
+ goto out;
}
#ifdef OSNAME
@@ -2343,6 +2439,10 @@ post_os(POST_ARGS)
}
mdoc->meta.os = mandoc_strdup(defbuf);
#endif /*!OSNAME*/
+
+out: mdoc->meta.os_e = strstr(mdoc->meta.os, "OpenBSD") != NULL ?
+ MDOC_OS_OPENBSD : strstr(mdoc->meta.os, "NetBSD") != NULL ?
+ MDOC_OS_NETBSD : MDOC_OS_OTHER;
}
enum roff_sec
@@ -2358,7 +2458,7 @@ mdoc_a2sec(const char *p)
}
static size_t
-macro2len(int macro)
+macro2len(enum roff_tok macro)
{
switch (macro) {
diff --git a/contrib/mdocml/out.c b/contrib/mdocml/out.c
index aff3558372dc..73769d2b3e45 100644
--- a/contrib/mdocml/out.c
+++ b/contrib/mdocml/out.c
@@ -1,7 +1,7 @@
-/* $Id: out.c,v 1.62 2015/10/12 00:08:16 schwarze Exp $ */
+/* $Id: out.c,v 1.65 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -29,9 +29,10 @@
#include "out.h"
static void tblcalc_data(struct rofftbl *, struct roffcol *,
- const struct tbl_opts *, const struct tbl_dat *);
+ const struct tbl_opts *, const struct tbl_dat *,
+ size_t);
static void tblcalc_literal(struct rofftbl *, struct roffcol *,
- const struct tbl_dat *);
+ const struct tbl_dat *, size_t);
static void tblcalc_number(struct rofftbl *, struct roffcol *,
const struct tbl_opts *, const struct tbl_dat *);
@@ -40,10 +41,10 @@ static void tblcalc_number(struct rofftbl *, struct roffcol *,
* Parse the *src string and store a scaling unit into *dst.
* If the string doesn't specify the unit, use the default.
* If no default is specified, fail.
- * Return 2 on complete success, 1 when a conversion was done,
- * but there was trailing garbage, and 0 on total failure.
+ * Return a pointer to the byte after the last byte used,
+ * or NULL on total failure.
*/
-int
+const char *
a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
{
char *endptr;
@@ -51,7 +52,7 @@ a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
dst->unit = def == SCALE_MAX ? SCALE_BU : def;
dst->scale = strtod(src, &endptr);
if (endptr == src)
- return 0;
+ return NULL;
switch (*endptr++) {
case 'c':
@@ -89,12 +90,11 @@ a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
/* FALLTHROUGH */
default:
if (SCALE_MAX == def)
- return 0;
+ return NULL;
dst->unit = def;
break;
}
-
- return *endptr == '\0' ? 2 : 1;
+ return endptr;
}
/*
@@ -107,6 +107,7 @@ void
tblcalc(struct rofftbl *tbl, const struct tbl_span *sp,
size_t totalwidth)
{
+ struct roffsu su;
const struct tbl_opts *opts;
const struct tbl_dat *dp;
struct roffcol *col;
@@ -147,7 +148,16 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp,
col->flags |= dp->layout->flags;
if (dp->layout->flags & TBL_CELL_WIGN)
continue;
- tblcalc_data(tbl, col, opts, dp);
+ if (dp->layout->wstr != NULL &&
+ dp->layout->width == 0 &&
+ a2roffsu(dp->layout->wstr, &su, SCALE_EN)
+ != NULL)
+ dp->layout->width =
+ (*tbl->sulen)(&su, tbl->arg);
+ if (col->width < dp->layout->width)
+ col->width = dp->layout->width;
+ tblcalc_data(tbl, col, opts, dp, dp->block ?
+ totalwidth / (sp->opts->cols + 1) : 0);
}
}
@@ -197,9 +207,12 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp,
*/
if (nxcol && totalwidth) {
- xwidth = totalwidth - xwidth - 3*maxcol -
+ xwidth += 3*maxcol +
(opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX) ?
2 : !!opts->lvert + !!opts->rvert);
+ if (xwidth >= totalwidth)
+ return;
+ xwidth = totalwidth - xwidth;
/*
* Emulate a bug in GNU tbl width calculation that
@@ -232,7 +245,7 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp,
static void
tblcalc_data(struct rofftbl *tbl, struct roffcol *col,
- const struct tbl_opts *opts, const struct tbl_dat *dp)
+ const struct tbl_opts *opts, const struct tbl_dat *dp, size_t mw)
{
size_t sz;
@@ -249,7 +262,7 @@ tblcalc_data(struct rofftbl *tbl, struct roffcol *col,
case TBL_CELL_CENTRE:
case TBL_CELL_LEFT:
case TBL_CELL_RIGHT:
- tblcalc_literal(tbl, col, dp);
+ tblcalc_literal(tbl, col, dp, mw);
break;
case TBL_CELL_NUMBER:
tblcalc_number(tbl, col, opts, dp);
@@ -263,16 +276,29 @@ tblcalc_data(struct rofftbl *tbl, struct roffcol *col,
static void
tblcalc_literal(struct rofftbl *tbl, struct roffcol *col,
- const struct tbl_dat *dp)
+ const struct tbl_dat *dp, size_t mw)
{
- size_t sz;
- const char *str;
-
- str = dp->string ? dp->string : "";
- sz = (*tbl->slen)(str, tbl->arg);
-
- if (col->width < sz)
- col->width = sz;
+ const char *str; /* Beginning of the first line. */
+ const char *beg; /* Beginning of the current line. */
+ char *end; /* End of the current line. */
+ size_t sz; /* Length of the current line. */
+
+ if (dp->string == NULL || *dp->string == '\0')
+ return;
+ str = mw ? mandoc_strdup(dp->string) : dp->string;
+ for (beg = str; beg != NULL && *beg != '\0'; beg = end) {
+ end = mw ? strchr(beg, ' ') : NULL;
+ if (end != NULL) {
+ *end++ = '\0';
+ while (*end == ' ')
+ end++;
+ }
+ sz = (*tbl->slen)(beg, tbl->arg);
+ if (col->width < sz)
+ col->width = sz;
+ }
+ if (mw)
+ free((void *)str);
}
static void
diff --git a/contrib/mdocml/out.h b/contrib/mdocml/out.h
index 2c1cf3fe9701..ac617b32633e 100644
--- a/contrib/mdocml/out.h
+++ b/contrib/mdocml/out.h
@@ -1,6 +1,7 @@
-/* $Id: out.h,v 1.27 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: out.h,v 1.29 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -40,14 +41,16 @@ struct roffsu {
double scale;
};
+typedef size_t (*tbl_sulen)(const struct roffsu *, void *);
typedef size_t (*tbl_strlen)(const char *, void *);
typedef size_t (*tbl_len)(size_t, void *);
struct rofftbl {
+ tbl_sulen sulen; /* calculate scaling unit length */
tbl_strlen slen; /* calculate string length */
tbl_len len; /* produce width of empty space */
struct roffcol *cols; /* master column specifiers */
- void *arg; /* passed to slen and len */
+ void *arg; /* passed to sulen, slen, and len */
};
#define SCALE_VS_INIT(p, v) \
@@ -63,6 +66,6 @@ struct rofftbl {
struct tbl_span;
-int a2roffsu(const char *, struct roffsu *, enum roffscale);
+const char *a2roffsu(const char *, struct roffsu *, enum roffscale);
void tblcalc(struct rofftbl *tbl,
const struct tbl_span *, size_t);
diff --git a/contrib/mdocml/read.c b/contrib/mdocml/read.c
index 3e5d41161a0c..59fe2f6833e9 100644
--- a/contrib/mdocml/read.c
+++ b/contrib/mdocml/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.161 2017/02/18 17:29:28 schwarze Exp $ */
+/* $Id: read.c,v 1.173 2017/06/08 00:23:30 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -66,7 +66,7 @@ struct mparse {
static void choose_parser(struct mparse *);
static void resize_buf(struct buf *, size_t);
-static void mparse_buf_r(struct mparse *, struct buf, size_t, int);
+static int mparse_buf_r(struct mparse *, struct buf, size_t, int);
static int read_whole_file(struct mparse *, const char *, int,
struct buf *, int *);
static void mparse_end(struct mparse *);
@@ -75,7 +75,7 @@ static void mparse_parse_buffer(struct mparse *, struct buf,
static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = {
MANDOCERR_OK,
- MANDOCERR_WARNING,
+ MANDOCERR_STYLE,
MANDOCERR_WARNING,
MANDOCERR_ERROR,
MANDOCERR_UNSUPP,
@@ -86,6 +86,14 @@ static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = {
static const char * const mandocerrs[MANDOCERR_MAX] = {
"ok",
+ "generic style suggestion",
+
+ "useless macro",
+ "consider using OS macro",
+ "errnos out of order",
+ "duplicate errno",
+ "description line ends with a full stop",
+
"generic warning",
/* related to the prologue */
@@ -113,6 +121,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"bad NAME section content",
"missing comma before name",
"missing description line, using \"\"",
+ "description line outside NAME section",
"sections out of conventional order",
"duplicate section title",
"unexpected section",
@@ -132,6 +141,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"fill mode already enabled, skipping",
"fill mode already disabled, skipping",
"line scope broken",
+ "skipping blank line in line scope",
/* related to missing macro arguments */
"skipping empty request",
@@ -167,6 +177,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"unknown AT&T UNIX version",
"comma in function argument",
"parenthesis in function name",
+ "unknown library name",
"invalid content in Rs block",
"invalid Boolean argument",
"unknown font, skipping request",
@@ -219,6 +230,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"NOT IMPLEMENTED: Bd -file",
"skipping display without arguments",
"missing list type, using -item",
+ "argument is not numeric, using 1",
"missing manual name, using \"\"",
"uname(3) system call failed, using UNKNOWN",
"unknown standard specifier",
@@ -240,7 +252,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
static const char * const mandoclevels[MANDOCLEVEL_MAX] = {
"SUCCESS",
- "RESERVED",
+ "STYLE",
"WARNING",
"ERROR",
"UNSUPP",
@@ -292,14 +304,15 @@ choose_parser(struct mparse *curp)
}
if (format == MPARSE_MDOC) {
- mdoc_hash_init();
curp->man->macroset = MACROSET_MDOC;
- curp->man->first->tok = TOKEN_NONE;
+ if (curp->man->mdocmac == NULL)
+ curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
} else {
- man_hash_init();
curp->man->macroset = MACROSET_MAN;
- curp->man->first->tok = TOKEN_NONE;
+ if (curp->man->manmac == NULL)
+ curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
}
+ curp->man->first->tok = TOKEN_NONE;
}
/*
@@ -309,7 +322,7 @@ choose_parser(struct mparse *curp)
* macros, inline equations, and input line traps)
* and indirectly (for .so file inclusion).
*/
-static void
+static int
mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
{
const struct tbl_span *span;
@@ -317,7 +330,6 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
const char *save_file;
char *cp;
size_t pos; /* byte number in the ln buffer */
- size_t j; /* auxiliary byte number in the blk buffer */
enum rofferr rr;
int of;
int lnn; /* line number in the real file */
@@ -399,79 +411,14 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
continue;
}
- /* Trailing backslash = a plain char. */
-
- if (blk.buf[i] != '\\' || i + 1 == blk.sz) {
- ln.buf[pos++] = blk.buf[i++];
- continue;
- }
-
- /*
- * Found escape and at least one other character.
- * When it's a newline character, skip it.
- * When there is a carriage return in between,
- * skip that one as well.
- */
-
- if ('\r' == blk.buf[i + 1] && i + 2 < blk.sz &&
- '\n' == blk.buf[i + 2])
- ++i;
- if ('\n' == blk.buf[i + 1]) {
- i += 2;
- ++lnn;
- continue;
- }
-
- if ('"' == blk.buf[i + 1] || '#' == blk.buf[i + 1]) {
- j = i;
- i += 2;
- /* Comment, skip to end of line */
- for (; i < blk.sz; ++i) {
- if (blk.buf[i] != '\n')
- continue;
- if (blk.buf[i - 1] == ' ' ||
- blk.buf[i - 1] == '\t')
- mandoc_msg(
- MANDOCERR_SPACE_EOL,
- curp, curp->line,
- pos + i-1 - j, NULL);
- ++i;
- ++lnn;
- break;
- }
-
- /* Backout trailing whitespaces */
- for (; pos > 0; --pos) {
- if (ln.buf[pos - 1] != ' ')
- break;
- if (pos > 2 && ln.buf[pos - 2] == '\\')
- break;
- }
- break;
- }
-
- /* Catch escaped bogus characters. */
-
- c = (unsigned char) blk.buf[i+1];
-
- if ( ! (isascii(c) &&
- (isgraph(c) || isblank(c)))) {
- mandoc_vmsg(MANDOCERR_CHAR_BAD, curp,
- curp->line, pos, "0x%x", c);
- i += 2;
- ln.buf[pos++] = '?';
- continue;
- }
-
- /* Some other escape sequence, copy & cont. */
-
- ln.buf[pos++] = blk.buf[i++];
ln.buf[pos++] = blk.buf[i++];
}
- if (pos >= ln.sz)
+ if (pos + 1 >= ln.sz)
resize_buf(&ln, 256);
+ if (i == blk.sz || blk.buf[i] == '\0')
+ ln.buf[pos++] = '\n';
ln.buf[pos] = '\0';
/*
@@ -510,13 +457,16 @@ rerun:
switch (rr) {
case ROFF_REPARSE:
- if (REPARSE_LIMIT >= ++curp->reparse_count)
- mparse_buf_r(curp, ln, of, 0);
- else
+ if (++curp->reparse_count > REPARSE_LIMIT)
mandoc_msg(MANDOCERR_ROFFLOOP, curp,
curp->line, pos, NULL);
- pos = 0;
- continue;
+ else if (mparse_buf_r(curp, ln, of, 0) == 1 ||
+ start == 1) {
+ pos = 0;
+ continue;
+ }
+ free(ln.buf);
+ return 0;
case ROFF_APPEND:
pos = strlen(ln.buf);
continue;
@@ -530,7 +480,7 @@ rerun:
(i >= blk.sz || blk.buf[i] == '\0')) {
curp->sodest = mandoc_strdup(ln.buf + of);
free(ln.buf);
- return;
+ return 1;
}
/*
* We remove `so' clauses from our lookaside
@@ -596,6 +546,7 @@ rerun:
}
free(ln.buf);
+ return 1;
}
static int
@@ -813,11 +764,13 @@ mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg,
curp->man = roff_man_alloc( curp->roff, curp, curp->defos,
curp->options & MPARSE_QUICK ? 1 : 0);
if (curp->options & MPARSE_MDOC) {
- mdoc_hash_init();
curp->man->macroset = MACROSET_MDOC;
+ if (curp->man->mdocmac == NULL)
+ curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
} else if (curp->options & MPARSE_MAN) {
- man_hash_init();
curp->man->macroset = MACROSET_MAN;
+ if (curp->man->manmac == NULL)
+ curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
}
curp->man->first->tok = TOKEN_NONE;
return curp;
@@ -843,6 +796,8 @@ void
mparse_free(struct mparse *curp)
{
+ roffhash_free(curp->man->mdocmac);
+ roffhash_free(curp->man->manmac);
roff_man_free(curp->man);
roff_free(curp->roff);
if (curp->secondary)
diff --git a/contrib/mdocml/roff.7 b/contrib/mdocml/roff.7
index 114f63eddd20..decc9d949724 100644
--- a/contrib/mdocml/roff.7
+++ b/contrib/mdocml/roff.7
@@ -1,7 +1,7 @@
-.\" $Id: roff.7,v 1.75 2015/09/24 18:41:22 schwarze Exp $
+.\" $Id: roff.7,v 1.86 2017/06/07 00:50:34 schwarze Exp $
.\"
.\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2010, 2011, 2013-2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2010,2011,2013-2015,2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: September 24 2015 $
+.Dd $Mdocdate: June 7 2017 $
.Dt ROFF 7
.Os
.Sh NAME
@@ -397,219 +397,219 @@ The
parser recognises the following requests.
For requests marked as "ignored" or "unsupported", any arguments are
ignored, and the number of arguments is not checked.
-.Ss \&ab
+.Bl -tag -width Ds
+.It Ic \&ab Op Ar message
Abort processing.
Currently unsupported.
-.Ss \&ad
-Set line adjustment mode.
-It takes one argument to select normal, left, right,
-or center adjustment for subsequent text.
+.It Ic \&ad Op Cm b | c | l | n | r
+Set line adjustment mode for subsequent text.
Currently ignored.
-.Ss \&af
+.It Ic \&af Ar registername format
Assign an output format to a number register.
Currently ignored.
-.Ss \&aln
+.It Ic \&aln Ar newname oldname
Create an alias for a number register.
Currently unsupported.
-.Ss \&als
+.It Ic \&als Ar newname oldname
Create an alias for a request, string, macro, or diversion.
Currently unsupported.
-.Ss \&am
+.It Ic \&am Ar macroname Op Ar endmacro
Append to a macro definition.
The syntax of this request is the same as that of
-.Sx \&de .
-.Ss \&am1
+.Ic \&de .
+.It Ic \&am1 Ar macroname Op Ar endmacro
Append to a macro definition, switching roff compatibility mode off
during macro execution (groff extension).
The syntax of this request is the same as that of
-.Sx \&de1 .
+.Ic \&de1 .
Since
.Xr mandoc 1
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&am .
-.Ss \&ami
+.Ic \&am .
+.It Ic \&ami Ar macrostring Op Ar endstring
Append to a macro definition, specifying the macro name indirectly
(groff extension).
The syntax of this request is the same as that of
-.Sx \&dei .
-.Ss \&ami1
+.Ic \&dei .
+.It Ic \&ami1 Ar macrostring Op Ar endstring
Append to a macro definition, specifying the macro name indirectly
and switching roff compatibility mode off during macro execution
(groff extension).
The syntax of this request is the same as that of
-.Sx \&dei1 .
+.Ic \&dei1 .
Since
.Xr mandoc 1
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&ami .
-.Ss \&as
+.Ic \&ami .
+.It Ic \&as Ar stringname Op Ar string
Append to a user-defined string.
The syntax of this request is the same as that of
.Sx \&ds .
If a user-defined string with the specified name does not yet exist,
it is set to the empty string before appending.
-.Ss \&as1
+.It Ic \&as1 Ar stringname Op Ar string
Append to a user-defined string, switching roff compatibility mode off
during macro execution (groff extension).
The syntax of this request is the same as that of
-.Sx \&ds1 .
+.Ic \&ds1 .
Since
.Xr mandoc 1
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&as .
-.Ss \&asciify
+.Ic \&as .
+.It Ic \&asciify Ar divname
Fully unformat a diversion.
Currently unsupported.
-.Ss \&backtrace
+.It Ic \&backtrace
Print a backtrace of the input stack.
This is a groff extension and currently ignored.
-.Ss \&bd
+.It Ic \&bd Ar font Oo Ar curfont Oc Op Ar offset
Artificially embolden by repeated printing with small shifts.
Currently ignored.
-.Ss \&bleedat
+.It Ic \&bleedat Ar left top width height
Set the BleedBox page parameter for PDF generation.
This is a Heirloom extension and currently ignored.
-.Ss \&blm
+.It Ic \&blm Ar macroname
Set a blank line trap.
Currently unsupported.
-.Ss \&box
+.It Ic \&box Ar divname
Begin a diversion without including a partially filled line.
Currently unsupported.
-.Ss \&boxa
+.It Ic \&boxa Ar divname
Add to a diversion without including a partially filled line.
Currently unsupported.
-.Ss \&bp
-Begin new page.
+.It Ic \&bp Oo Cm + Ns | Ns Cm - Oc Ns Ar pagenumber
+Begin a new page.
Currently ignored.
-.Ss \&BP
+.It Ic \&BP Ar source height width position offset flags label
Define a frame and place a picture in it.
This is a Heirloom extension and currently unsupported.
-.Ss \&br
+.It Ic \&br
Break the output line.
-See
-.Xr man 7
-and
-.Xr mdoc 7 .
-.Ss \&break
+.It Ic \&break
Break out of a
-.Sx \&while
+.Ic \&while
loop.
Currently unsupported.
-.Ss \&breakchar
+.It Ic \&breakchar Ar char ...
Optional line break characters.
This is a Heirloom extension and currently ignored.
-.Ss \&brnl
-Break output line after next N input lines.
+.It Ic \&brnl Ar N
+Break output line after the next
+.Ar N
+input lines.
This is a Heirloom extension and currently ignored.
-.Ss \&brp
+.It Ic \&brp
Break and spread output line.
Currently, this is implemented as an alias for
-.Sx \&br .
-.Ss \&brpnl
-Break and spread output line after next N input lines.
+.Ic \&br .
+.It Ic \&brpnl Ar N
+Break and spread output line after the next
+.Ar N
+input lines.
This is a Heirloom extension and currently ignored.
-.Ss \&c2
+.It Ic \&c2 Op Ar char
Change the no-break control character.
Currently unsupported.
-.Ss \&cc
+.It Ic \&cc Op Ar char
Change the control character.
-Its syntax is as follows:
-.Bd -literal -offset indent
-.Pf . Cm \&cc Op Ar c
-.Ed
-.Pp
If
-.Ar c
+.Ar char
is not specified, the control character is reset to
.Sq \&. .
Trailing characters are ignored.
-.Ss \&ce
-Center some lines.
-It takes one integer argument, specifying how many lines to center.
-Currently ignored.
-.Ss \&cf
+.It Ic \&ce Op Ar N
+Center the next
+.Ar N
+input lines without filling.
+.Ar N
+defaults to 1.
+An argument of 0 or less ends centering.
+Currently, high level macros abort centering.
+.It Ic \&cf Ar filename
Output the contents of a file.
Ignored because insecure.
-.Ss \&cflags
+.It Ic \&cflags Ar flags char ...
Set character flags.
This is a groff extension and currently ignored.
-.Ss \&ch
+.It Ic \&ch Ar macroname Op Ar dist
Change a trap location.
Currently ignored.
-.Ss \&char
+.It Ic \&char Ar glyphname Op Ar string
Define a new glyph.
Currently unsupported.
-.Ss \&chop
+.It Ic \&chop Ar stringname
Remove the last character from a macro, string, or diversion.
Currently unsupported.
-.Ss \&class
+.It Ic \&class Ar classname char ...
Define a character class.
This is a groff extension and currently ignored.
-.Ss \&close
+.It Ic \&close Ar streamname
Close an open file.
Ignored because insecure.
-.Ss \&CL
+.It Ic \&CL Ar color text
Print text in color.
This is a Heirloom extension and currently unsupported.
-.Ss \&color
+.It Ic \&color Op Cm 1 | 0
Activate or deactivate colors.
This is a groff extension and currently ignored.
-.Ss \&composite
+.It Ic \&composite Ar from to
Define a name component for composite glyph names.
This is a groff extension and currently unsupported.
-.Ss \&continue
+.It Ic \&continue
Immediately start the next iteration of a
-.Sx \&while
+.Ic \&while
loop.
Currently unsupported.
-.Ss \&cp
+.It Ic \&cp Op Cm 1 | 0
Switch
.Nm
compatibility mode on or off.
Currently ignored.
-.Ss \&cropat
+.It Ic \&cropat Ar left top width height
Set the CropBox page parameter for PDF generation.
This is a Heirloom extension and currently ignored.
-.Ss \&cs
+.It Ic \&cs Ar font Op Ar width Op Ar emsize
Constant character spacing mode.
Currently ignored.
-.Ss \&cu
-Underline including whitespace.
+.It Ic \&cu Op Ar N
+Underline next
+.Ar N
+input lines including whitespace.
Currently ignored.
-.Ss \&da
+.It Ic \&da Ar divname
Append to a diversion.
Currently unsupported.
-.Ss \&dch
+.It Ic \&dch Ar macroname Op Ar dist
Change a trap location in the current diversion.
This is a Heirloom extension and currently unsupported.
-.Ss \&de
+.It Ic \&de Ar macroname Op Ar endmacro
Define a
.Nm
macro.
Its syntax can be either
.Bd -literal -offset indent
-.Pf . Cm \&de Ar name
-.Ar macro definition
+.Pf . Ic \&de Ar macroname
+.Ar definition
\&..
.Ed
.Pp
or
.Bd -literal -offset indent
-.Pf . Cm \&de Ar name Ar end
-.Ar macro definition
-.Pf . Ar end
+.Pf . Ic \&de Ar macroname Ar endmacro
+.Ar definition
+.Pf . Ar endmacro
.Ed
.Pp
Both forms define or redefine the macro
-.Ar name
+.Ar macroname
to represent the
-.Ar macro definition ,
+.Ar definition ,
which may consist of one or more input lines, including the newline
characters terminating each line, optionally containing calls to
.Nm
@@ -622,13 +622,13 @@ or
macros, whichever applies to the document in question.
.Pp
Specifying a custom
-.Ar end
+.Ar endmacro
macro works in the same way as for
-.Sx \&ig ;
+.Ic \&ig ;
namely, the call to
-.Sq Pf . Ar end
+.Sq Pf . Ar endmacro
first ends the
-.Ar macro definition ,
+.Ar definition ,
and after that, it is also evaluated as a
.Nm
request or
@@ -637,7 +637,7 @@ macro, but not as a high-level macro.
.Pp
The macro can be invoked later using the syntax
.Pp
-.D1 Pf . Ar name Op Ar argument Op Ar argument ...
+.D1 Pf . Ar macroname Op Ar argument Op Ar argument ...
.Pp
Regarding argument parsing, see
.Sx MACRO SYNTAX
@@ -645,7 +645,7 @@ above.
.Pp
The line invoking the macro will be replaced
in the input stream by the
-.Ar macro definition ,
+.Ar definition ,
replacing all occurrences of
.No \e\e$ Ns Ar N ,
where
@@ -670,15 +670,15 @@ joined together with single blank characters.
.Pp
Since macros and user-defined strings share a common string table,
defining a macro
-.Ar name
+.Ar macroname
clobbers the user-defined string
-.Ar name ,
+.Ar macroname ,
and the
-.Ar macro definition
+.Ar definition
can also be printed using the
.Sq \e*
string interpolation syntax described below
-.Sx ds ,
+.Ic ds ,
but this is rarely useful because every macro definition contains at least
one explicit newline character.
.Pp
@@ -689,7 +689,7 @@ to a large, but finite number, and
.Xr mandoc 1
also limits the length of the expanded input line.
Do not rely on the exact values of these limits.
-.Ss \&de1
+.It Ic \&de1 Ar macroname Op Ar endmacro
Define a
.Nm
macro that will be executed with
@@ -701,24 +701,20 @@ Since
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&de .
-.Ss \&defcolor
+.Ic \&de .
+.It Ic \&defcolor Ar newname scheme component ...
Define a color name.
This is a groff extension and currently ignored.
-.Ss \&dei
+.It Ic \&dei Ar macrostring Op Ar endstring
Define a
.Nm
macro, specifying the macro name indirectly (groff extension).
The syntax of this request is the same as that of
-.Sx \&de .
-The request
-.Pp
-.D1 Pf . Cm \&dei Ar name Op Ar end
+.Ic \&de .
+The effect is the same as:
.Pp
-has the same effect as:
-.Pp
-.D1 Pf . Cm \&de No \e* Ns Bo Ar name Bc Op \e* Ns Bq Ar end
-.Ss \&dei1
+.D1 Pf . Cm \&de No \e* Ns Bo Ar macrostring Bc Op \e* Ns Bq Ar endstring
+.It Ic \&dei1 Ar macrostring Op Ar endstring
Define a
.Nm
macro that will be executed with
@@ -730,29 +726,23 @@ Since
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&dei .
-.Ss \&device
-This request only makes sense with the groff-specific intermediate
-output format and is unsupported.
-.Ss \&devicem
-This request only makes sense with the groff-specific intermediate
-output format and is unsupported.
-.Ss \&di
+.Ic \&dei .
+.It Ic \&device Ar string ...
+.It Ic \&devicem Ar stringname
+These two requests only make sense with the groff-specific intermediate
+output format and are unsupported.
+.It Ic \&di Ar divname
Begin a diversion.
Currently unsupported.
-.Ss \&do
+.It Ic \&do Ar command Op Ar argument ...
Execute
.Nm
request or macro line with compatibility mode disabled.
Currently unsupported.
-.Ss \&ds
+.It Ic \&ds Ar stringname Op Oo \(dq Oc Ns Ar string
Define a user-defined string.
-Its syntax is as follows:
-.Pp
-.D1 Pf . Cm \&ds Ar name Oo \(dq Oc Ns Ar string
-.Pp
The
-.Ar name
+.Ar stringname
and
.Ar string
arguments are space-separated.
@@ -767,11 +757,11 @@ including whitespace and double-quote characters, even trailing ones.
The
.Ar string
can be interpolated into subsequent text by using
-.No \e* Ns Bq Ar name
+.No \e* Ns Bq Ar stringname
for a
-.Ar name
+.Ar stringname
of arbitrary length, or \e*(NN or \e*N if the length of
-.Ar name
+.Ar stringname
is two or one characters, respectively.
Interpolation can be prevented by escaping the leading backslash;
that is, an asterisk preceded by an even number of backslashes
@@ -779,11 +769,11 @@ does not trigger string interpolation.
.Pp
Since user-defined strings and macros share a common string table,
defining a string
-.Ar name
+.Ar stringname
clobbers the macro
-.Ar name ,
+.Ar stringname ,
and the
-.Ar name
+.Ar stringname
used for defining a string can also be invoked as a macro,
in which case the following input line will be appended to the
.Ar string ,
@@ -798,12 +788,12 @@ H SYNOPSIS
.Ed
.Pp
invokes the
-.Cm SH
+.Ic SH
macro when used in a
.Xr man 7
document.
Such abuse is of course strongly discouraged.
-.Ss \&ds1
+.It Ic \&ds1 Ar stringname Op Oo \(dq Oc Ns Ar string
Define a user-defined string that will be expanded with
.Nm
compatibility mode switched off during string expansion.
@@ -813,125 +803,122 @@ Since
does not implement
.Nm
compatibility mode at all, it handles this request as an alias for
-.Sx \&ds .
-.Ss \&dwh
+.Ic \&ds .
+.It Ic \&dwh Ar dist macroname
Set a location trap in the current diversion.
This is a Heirloom extension and currently unsupported.
-.Ss \&dt
+.It Ic \&dt Op Ar dist macroname
Set a trap within a diversion.
Currently unsupported.
-.Ss \&ec
-Change the escape character.
-Currently unsupported.
-.Ss \&ecs
+.It Ic \&ec Op Ar char
+Enable the escape mechanism and change the escape character.
+The
+.Ar char
+argument defaults to the backslash
+.Pq Sq \e .
+.It Ic \&ecr
Restore the escape character.
Currently unsupported.
-.Ss \&ecr
+.It Ic \&ecs
Save the escape character.
Currently unsupported.
-.Ss \&el
+.It Ic \&el Ar body
The
-.Qq else
+.Dq else
half of an if/else conditional.
Pops a result off the stack of conditional evaluations pushed by
-.Sx \&ie
+.Ic \&ie
and uses it as its conditional.
If no stack entries are present (e.g., due to no prior
-.Sx \&ie
+.Ic \&ie
calls)
then false is assumed.
The syntax of this request is similar to
-.Sx \&if
+.Ic \&if
except that the conditional is missing.
-.Ss \&em
+.It Ic \&em Ar macroname
Set a trap at the end of input.
Currently unsupported.
-.Ss \&EN
+.It Ic \&EN
End an equation block.
See
-.Sx \&EQ .
-.Ss \&eo
+.Ic \&EQ .
+.It Ic \&eo
Disable the escape mechanism completely.
-Currently unsupported.
-.Ss \&EP
+.It Ic \&EP
End a picture started by
-.Sx \&BP .
+.Ic \&BP .
This is a Heirloom extension and currently unsupported.
-.Ss \&EQ
+.It Ic \&EQ
Begin an equation block.
See
.Xr eqn 7
for a description of the equation language.
-.Ss \&errprint
+.It Ic \&errprint Ar message
Print a string like an error message.
This is a Heirloom extension and currently ignored.
-.Ss \&ev
+.It Ic \&ev Op Ar envname
Switch to another environment.
Currently unsupported.
-.Ss \&evc
+.It Ic \&evc Op Ar envname
Copy an environment into the current environment.
Currently unsupported.
-.Ss \&ex
+.It Ic \&ex
Abort processing and exit.
Currently unsupported.
-.Ss \&fallback
+.It Ic \&fallback Ar curfont font ...
Select the fallback sequence for a font.
This is a Heirloom extension and currently ignored.
-.Ss \&fam
+.It Ic \&fam Op Ar familyname
Change the font family.
-Takes one argument specifying the font family to be selected.
-It is a groff extension and currently ignored.
-.Ss \&fc
+This is a groff extension and currently ignored.
+.It Ic \&fc Op Ar delimchar Op Ar padchar
Define a delimiting and a padding character for fields.
Currently unsupported.
-.Ss \&fchar
+.It Ic \&fchar Ar glyphname Op Ar string
Define a fallback glyph.
Currently unsupported.
-.Ss \&fcolor
+.It Ic \&fcolor Ar colorname
Set the fill color for \eD objects.
This is a groff extension and currently ignored.
-.Ss \&fdeferlig
+.It Ic \&fdeferlig Ar font string ...
Defer ligature building.
This is a Heirloom extension and currently ignored.
-.Ss \&feature
+.It Ic \&feature Cm + Ns | Ns Cm - Ns Ar name
Enable or disable an OpenType feature.
This is a Heirloom extension and currently ignored.
-.Ss \&fi
+.It Ic \&fi
Switch to fill mode.
See
.Xr man 7 .
Ignored in
.Xr mdoc 7 .
-.Ss \&fkern
+.It Ic \&fkern Ar font minkern
Control the use of kerning tables for a font.
This is a Heirloom extension and currently ignored.
-.Ss \&fl
+.It Ic \&fl
Flush output.
Currently ignored.
-.Ss \&flig
+.It Ic \&flig Ar font string char ...
Define ligatures.
This is a Heirloom extension and currently ignored.
-.Ss \&fp
+.It Ic \&fp Ar position font Op Ar filename
Assign font position.
Currently ignored.
-.Ss \&fps
+.It Ic \&fps Ar mapname ...
Mount a font with a special character map.
This is a Heirloom extension and currently ignored.
-.Ss \&fschar
+.It Ic \&fschar Ar font glyphname Op Ar string
Define a font-specific fallback glyph.
This is a groff extension and currently unsupported.
-.Ss \&fspacewidth
+.It Ic \&fspacewidth Ar font Op Ar afmunits
Set a font-specific width for the space character.
This is a Heirloom extension and currently ignored.
-.Ss \&fspecial
+.It Ic \&fspecial Ar curfont Op Ar font ...
Conditionally define a special font.
This is a groff extension and currently ignored.
-.Ss \&ft
+.It Ic \&ft Op Ar font
Change the font.
-Its syntax is as follows:
-.Pp
-.D1 Pf . Cm \&ft Op Ar font
-.Pp
The following
.Ar font
arguments are supported:
@@ -950,91 +937,88 @@ switches to normal font
switches back to the previous font
.El
.Pp
-This request takes effect only locally, may be overridden by macros
-and escape sequences, and is only supported in
-.Xr man 7
-for now.
-.Ss \&ftr
+This request takes effect only locally and may be overridden
+by macros and escape sequences.
+.It Ic \&ftr Ar newname Op Ar oldname
Translate font name.
This is a groff extension and currently ignored.
-.Ss \&fzoom
+.It Ic \&fzoom Ar font Op Ar permille
Zoom font size.
Currently ignored.
-.Ss \&gcolor
+.It Ic \&gcolor Op Ar colorname
Set glyph color.
This is a groff extension and currently ignored.
-.Ss \&hc
+.It Ic \&hc Op Ar char
Set the hyphenation character.
Currently ignored.
-.Ss \&hcode
+.It Ic \&hcode Ar char code ...
Set hyphenation codes of characters.
Currently ignored.
-.Ss \&hidechar
+.It Ic \&hidechar Ar font char ...
Hide characters in a font.
This is a Heirloom extension and currently ignored.
-.Ss \&hla
+.It Ic \&hla Ar language
Set hyphenation language.
This is a groff extension and currently ignored.
-.Ss \&hlm
+.It Ic \&hlm Op Ar number
Set maximum number of consecutive hyphenated lines.
Currently ignored.
-.Ss \&hpf
+.It Ic \&hpf Ar filename
Load hyphenation pattern file.
This is a groff extension and currently ignored.
-.Ss \&hpfa
+.It Ic \&hpfa Ar filename
Load hyphenation pattern file, appending to the current patterns.
This is a groff extension and currently ignored.
-.Ss \&hpfcode
+.It Ic \&hpfcode Ar code code ...
Define mapping values for character codes in hyphenation patterns.
This is a groff extension and currently ignored.
-.Ss \&hw
+.It Ic \&hw Ar word ...
Specify hyphenation points in words.
Currently ignored.
-.Ss \&hy
+.It Ic \&hy Op Ar mode
Set automatic hyphenation mode.
Currently ignored.
-.Ss \&hylang
+.It Ic \&hylang Ar language
Set hyphenation language.
This is a Heirloom extension and currently ignored.
-.Ss \&hylen
+.It Ic \&hylen Ar nchar
Minimum word length for hyphenation.
This is a Heirloom extension and currently ignored.
-.Ss \&hym
+.It Ic \&hym Op Ar length
Set hyphenation margin.
This is a groff extension and currently ignored.
-.Ss \&hypp
+.It Ic \&hypp Ar penalty ...
Define hyphenation penalties.
This is a Heirloom extension and currently ignored.
-.Ss \&hys
+.It Ic \&hys Op Ar length
Set hyphenation space.
This is a groff extension and currently ignored.
-.Ss \&ie
+.It Ic \&ie Ar condition body
The
-.Qq if
+.Dq if
half of an if/else conditional.
The result of the conditional is pushed into a stack used by subsequent
invocations of
-.Sx \&el ,
+.Ic \&el ,
which may be separated by any intervening input (or not exist at all).
Its syntax is equivalent to
-.Sx \&if .
-.Ss \&if
-Begins a conditional.
-This request has the following syntax:
-.Bd -literal -offset indent
-\&.if COND BODY
-.Ed
-.Bd -literal -offset indent
-\&.if COND \e{BODY
-BODY...\e}
+.Ic \&if .
+.It Ic \&if Ar condition body
+Begin a conditional.
+This request can also be written as follows:
+.Bd -unfilled -offset indent
+.Pf . Ic \&if Ar condition No \e{ Ns Ar body
+.Ar body ... Ns \e}
.Ed
-.Bd -literal -offset indent
-\&.if COND \e{\e
-BODY...
-\&.\e}
+.Bd -unfilled -offset indent
+.Pf . Ic \&if Ar condition No \e{\e
+.Ar body ...
+.Pf . No \e}
.Ed
.Pp
-COND is a conditional statement.
+The
+.Ar condition
+is a boolean expression.
Currently,
.Xr mandoc 1
supports the following subset of roff conditionals:
@@ -1042,17 +1026,23 @@ supports the following subset of roff conditionals:
.It
If
.Sq \&!
-is prefixed to COND, the condition is logically inverted.
+is prefixed to
+.Ar condition ,
+it is logically inverted.
.It
-If the first character of COND is
+If the first character of
+.Ar condition
+is
.Sq n
.Pq nroff mode
or
.Sq o
.Pq odd page ,
-COND evaluates to true.
+it evaluates to true.
.It
-If the first character of COND is
+If the first character of
+.Ar condition
+is
.Sq c
.Pq character available ,
.Sq d
@@ -1064,26 +1054,35 @@ If the first character of COND is
or
.Sq v
.Pq vroff mode ,
-COND evaluates to false.
+it evaluates to false.
.It
-If the first character of COND is
+If the first character of
+.Ar condition
+is
.Sq r ,
-it evaluates to true if the rest of COND is the name of an existing
-number register; otherwise, it evaluates to false.
+it evaluates to true if the rest of
+.Ar condition
+is the name of an existing number register;
+otherwise, it evaluates to false.
.It
-If COND starts with a parenthesis or with an optionally signed
+If the
+.Ar condition
+starts with a parenthesis or with an optionally signed
integer number, it is evaluated according to the rules of
.Sx Numerical expressions
explained below.
It evaluates to true if the result is positive,
or to false if the result is zero or negative.
.It
-Otherwise, the first character of COND is regarded as a delimiter
-and COND evaluates to true if the string extending from its first
-to its second occurrence is equal to the string extending from its
-second to its third occurrence.
+Otherwise, the first character of
+.Ar condition
+is regarded as a delimiter and it evaluates to true if the string
+extending from its first to its second occurrence is equal to the
+string extending from its second to its third occurrence.
.It
-If COND cannot be parsed, it evaluates to false.
+If
+.Ar condition
+cannot be parsed, it evaluates to false.
.El
.Pp
If a conditional is false, its children are not processed, but are
@@ -1104,28 +1103,33 @@ conditional.
Sub-conditionals, in this case, obviously inherit the truth value of
the parent.
.Pp
-If the BODY section is begun by an escaped brace
+If the
+.Ar body
+section is begun by an escaped brace
.Sq \e{ ,
scope continues until the end of the input line containing the
matching closing-brace escape sequence
.Sq \e} .
-If the BODY is not enclosed in braces, scope continues until
-the end of the line.
-If the COND is followed by a BODY on the same line, whether after a
-brace or not, then requests and macros
+If the
+.Ar body
+is not enclosed in braces, scope continues until the end of the line.
+If the
+.Ar condition
+is followed by a
+.Ar body
+on the same line, whether after a brace or not, then requests and macros
.Em must
begin with a control character.
It is generally more intuitive, in this case, to write
-.Bd -literal -offset indent
-\&.if COND \e{\e
-\&.foo
-bar
-\&.\e}
+.Bd -unfilled -offset indent
+.Pf . Ic \&if Ar condition No \e{\e
+.Pf . Ar request
+.Pf . No \e}
.Ed
.Pp
than having the request or macro follow as
.Pp
-.D1 \&.if COND \e{ .foo
+.D1 Pf . Ic \&if Ar condition Pf \e{. Ar request
.Pp
The scope of a conditional is always parsed, but only executed if the
conditional evaluates to true.
@@ -1144,7 +1148,7 @@ will result in
being considered an argument of the
.Sq \&Fl
macro.
-.Ss \&ig
+.It Ic \&ig Op Ar endmacro
Ignore input.
Its syntax can be either
.Bd -literal -offset indent
@@ -1155,31 +1159,31 @@ Its syntax can be either
.Pp
or
.Bd -literal -offset indent
-.Pf . Cm \&ig Ar end
+.Pf . Cm \&ig Ar endmacro
.Ar ignored text
-.Pf . Ar end
+.Pf . Ar endmacro
.Ed
.Pp
In the first case, input is ignored until a
.Sq \&..
request is encountered on its own line.
In the second case, input is ignored until the specified
-.Sq Pf . Ar end
-macro is encountered.
+.Sq Pf . Ar endmacro
+is encountered.
Do not use the escape character
.Sq \e
anywhere in the definition of
-.Ar end ;
+.Ar endmacro ;
it would cause very strange behaviour.
.Pp
When the
-.Ar end
-macro is a roff request or a roff macro, like in
+.Ar endmacro
+is a roff request or a roff macro, like in
.Pp
.D1 \&.ig if
.Pp
the subsequent invocation of
-.Sx \&if
+.Ic \&if
will first terminate the
.Ar ignored text ,
then be invoked as usual.
@@ -1188,21 +1192,17 @@ Otherwise, it only terminates the
and arguments following it or the
.Sq \&..
request are discarded.
-.Ss \&in
+.It Ic \&in Op Oo Cm + Ns | Ns Cm - Oc Ns Ar width
Change indentation.
See
.Xr man 7 .
Ignored in
.Xr mdoc 7 .
-.Ss \&index
+.It Ic \&index Ar register stringname substring
Find a substring in a string.
This is a Heirloom extension and currently unsupported.
-.Ss \&it
+.It Ic \&it Ar expression macro
Set an input line trap.
-Its syntax is as follows:
-.Pp
-.D1 Pf . Cm it Ar expression macro
-.Pp
The named
.Ar macro
will be invoked after processing the number of input text lines
@@ -1213,63 +1213,59 @@ While evaluating the
the unit suffixes described below
.Sx Scaling Widths
are ignored.
-.Ss \&itc
+.It Ic \&it Ar expression macro
Set an input line trap, not counting lines ending with \ec.
Currently unsupported.
-.Ss \&IX
+.It Ic \&IX Ar class keystring
To support the generation of a table of contents,
.Xr pod2man 1
emits this user-defined macro, usually without defining it.
To avoid reporting large numbers of spurious errors,
.Xr mandoc 1
ignores it.
-.Ss \&kern
+.It Ic \&kern Op Cm 1 | 0
Switch kerning on or off.
Currently ignored.
-.Ss \&kernafter
+.It Ic \&kernafter Ar font char ... afmunits ...
Increase kerning after some characters.
This is a Heirloom extension and currently ignored.
-.Ss \&kernbefore
+.It Ic \&kernbefore Ar font char ... afmunits ...
Increase kerning before some characters.
This is a Heirloom extension and currently ignored.
-.Ss \&kernpair
+.It Ic \&kernpair Ar font char ... font char ... afmunits
Add a kerning pair to the kerning table.
This is a Heirloom extension and currently ignored.
-.Ss \&lc
+.It Ic \&lc Op Ar glyph
Define a leader repetition character.
Currently unsupported.
-.Ss \&lc_ctype
+.It Ic \&lc_ctype Ar localename
Set the
.Dv LC_CTYPE
locale.
This is a Heirloom extension and currently unsupported.
-.Ss \&lds
+.It Ic \&lds Ar macroname string
Define a local string.
This is a Heirloom extension and currently unsupported.
-.Ss \&length
-Count the number of input characters in a user-defined string.
+.It Ic \&length Ar register string
+Count the number of input characters in a string.
Currently unsupported.
-.Ss \&letadj
+.It Ic \&letadj Ar lspmin lshmin letss lspmax lshmax
Dynamic letter spacing and reshaping.
This is a Heirloom extension and currently ignored.
-.Ss \&lf
+.It Ic \&lf Ar lineno Op Ar filename
Change the line number for error messages.
Ignored because insecure.
-.Ss \&lg
+.It Ic \&lg Op Cm 1 | 0
Switch the ligature mechanism on or off.
Currently ignored.
-.Ss \&lhang
+.It Ic \&lhang Ar font char ... afmunits
Hang characters at left margin.
This is a Heirloom extension and currently ignored.
-.Ss \&linetabs
+.It Ic \&linetabs Op Cm 1 | 0
Enable or disable line-tabs mode.
This is a groff extension and currently unsupported.
-.Ss \&ll
+.It Ic \&ll Op Oo Cm + Ns | Ns Cm - Oc Ns Ar width
Change the output line length.
-Its syntax is as follows:
-.Pp
-.D1 Pf . Cm \&ll Op Oo +|- Oc Ns Ar width
-.Pp
If the
.Ar width
argument is omitted, the line length is reset to its previous value.
@@ -1281,77 +1277,75 @@ among others because it overrides the
.Xr mandoc 1
.Fl O Cm width
command line option.
-.Ss \&lnr
+.It Ic \&lnr Ar register Oo Cm + Ns | Ns Cm - Oc Ns Ar value Op Ar increment
Set local number register.
This is a Heirloom extension and currently unsupported.
-.Ss \&lnrf
+.It Ic \&lnrf Ar register Oo Cm + Ns | Ns Cm - Oc Ns Ar value Op Ar increment
Set local floating-point register.
This is a Heirloom extension and currently unsupported.
-.Ss \&lpfx
+.It Ic \&lpfx Ar string
Set a line prefix.
This is a Heirloom extension and currently unsupported.
-.Ss \&ls
+.It Ic \&ls Op Ar factor
Set line spacing.
It takes one integer argument specifying the vertical distance of
subsequent output text lines measured in v units.
Currently ignored.
-.Ss \&lsm
+.It Ic \&lsm Ar macroname
Set a leading spaces trap.
This is a groff extension and currently unsupported.
-.Ss \&lt
+.It Ic \&lt Op Oo Cm + Ns | Ns Cm - Oc Ns Ar width
Set title line length.
Currently ignored.
-.Ss \&mc
+.It Ic \&mc Ar glyph Op Ar dist
Print margin character in the right margin.
-Currently ignored.
-.Ss \&mediasize
+The
+.Ar dist
+is currently ignored; instead, 1n is used.
+.It Ic \&mediasize Ar media
Set the device media size.
This is a Heirloom extension and currently ignored.
-.Ss \&minss
+.It Ic \&minss Ar width
Set minimum word space.
This is a Heirloom extension and currently ignored.
-.Ss \&mk
+.It Ic \&mk Op Ar register
Mark vertical position.
Currently ignored.
-.Ss \&mso
-Load a macro file.
+.It Ic \&mso Ar filename
+Load a macro file using the search path.
Ignored because insecure.
-.Ss \&na
+.It Ic \&na
Disable adjusting without changing the adjustment mode.
Currently ignored.
-.Ss \&ne
+.It Ic \&ne Op Ar height
Declare the need for the specified minimum vertical space
before the next trap or the bottom of the page.
Currently ignored.
-.Ss \&nf
+.It Ic \&nf
Switch to no-fill mode.
See
.Xr man 7 .
Ignored by
.Xr mdoc 7 .
-.Ss \&nh
+.It Ic \&nh
Turn off automatic hyphenation mode.
Currently ignored.
-.Ss \&nhychar
+.It Ic \&nhychar Ar char ...
Define hyphenation-inhibiting characters.
This is a Heirloom extension and currently ignored.
-.Ss \&nm
+.It Ic \&nm Op Ar start Op Ar inc Op Ar space Op Ar indent
Print line numbers.
Currently unsupported.
-.Ss \&nn
+.It Ic \&nn Op Ar number
Temporarily turn off line numbering.
Currently unsupported.
-.Ss \&nop
+.It Ic \&nop Ar body
Execute the rest of the input line as a request or macro line.
Currently unsupported.
-.Ss \&nr
+.It Ic \&nr Ar register Oo Cm + Ns | Ns Cm - Oc Ns Ar expression
Define or change a register.
A register is an arbitrary string value that defines some sort of state,
which influences parsing and/or formatting.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Cm \&nr Ar name Oo +|- Oc Ns Ar expression
-.Pp
For the syntax of
.Ar expression ,
see
@@ -1360,8 +1354,8 @@ below.
If it is prefixed by a sign, the register will be
incremented or decremented instead of assigned to.
.Pp
-The following register
-.Ar name
+The following
+.Ar register
is handled specially:
.Bl -tag -width Ds
.It Cm nS
@@ -1378,155 +1372,156 @@ section itself.
Note that starting a new
.Xr mdoc 7
section with the
-.Cm \&Sh
+.Ic \&Sh
macro will reset this register.
.El
-.Ss \&nrf
+.It Xo
+.Ic \&nrf Ar register Oo Cm + Ns | Ns Cm - Oc Ns Ar expression
+.Op Ar increment
+.Xc
Define or change a floating-point register.
This is a Heirloom extension and currently unsupported.
-.Ss \&nroff
+.It Ic \&nroff
Force nroff mode.
This is a groff extension and currently ignored.
-.Ss \&ns
+.It Ic \&ns
Turn on no-space mode.
Currently ignored.
-.Ss \&nx
+.It Ic \&nx Op Ar filename
Abort processing of the current input file and process another one.
Ignored because insecure.
-.Ss \&open
+.It Ic \&open Ar stream file
Open a file for writing.
Ignored because insecure.
-.Ss \&opena
+.It Ic \&opena Ar stream file
Open a file for appending.
Ignored because insecure.
-.Ss \&os
+.It Ic \&os
Output saved vertical space.
Currently ignored.
-.Ss \&output
+.It Ic \&output Ar string
Output directly to intermediate output.
Not supported.
-.Ss \&padj
+.It Ic \&padj Op Cm 1 | 0
Globally control paragraph-at-once adjustment.
This is a Heirloom extension and currently ignored.
-.Ss \&papersize
+.It Ic \&papersize Ar media
Set the paper size.
This is a Heirloom extension and currently ignored.
-.Ss \&pc
+.It Ic \&pc Op Ar char
Change the page number character.
Currently ignored.
-.Ss \&pev
+.It Ic \&pev
Print environments.
This is a groff extension and currently ignored.
-.Ss \&pi
+.It Ic \&pi Ar command
Pipe output to a shell command.
Ignored because insecure.
-.Ss \&PI
+.It Ic \&PI
Low-level request used by
-.Sx \&BP .
+.Ic \&BP .
This is a Heirloom extension and currently unsupported.
-.Ss \&pl
+.It Ic \&pl Op Oo Cm + Ns | Ns Cm - Oc Ns Ar height
Change page length.
-Takes one height argument.
Currently ignored.
-.Ss \&pm
-Print names and sizes of macros, strings, and diversions.
+.It Ic \&pm
+Print names and sizes of macros, strings, and diversions
+to standard error output.
Currently ignored.
-.Ss \&pn
-Change page number of the next page.
+.It Ic \&pn Oo Cm + Ns | Ns Cm - Oc Ns Ar number
+Change the page number of the next page.
Currently ignored.
-.Ss \&pnr
-Print all number registers.
+.It Ic \&pnr
+Print all number registers on standard error output.
Currently ignored.
-.Ss \&po
+.It Ic \&po Op Oo Cm + Ns | Ns Cm - Oc Ns Ar offset
Set horizontal page offset.
Currently ignored.
-.Ss \&ps
+.It Ic \&ps Op Oo Cm + Ns | Ns Cm - Oc Ns size
Change point size.
-Takes one numerical argument.
Currently ignored.
-.Ss \&psbb
+.It Ic \&psbb Ar filename
Retrieve the bounding box of a PostScript file.
Currently unsupported.
-.Ss \&pshape
+.It Ic \&pshape Ar indent length ...
Set a special shape for the current paragraph.
This is a Heirloom extension and currently unsupported.
-.Ss \&pso
+.It Ic \&pso Ar command
Include output of a shell command.
Ignored because insecure.
-.Ss \&ptr
-Print the names and positions of all traps.
+.It Ic \&ptr
+Print the names and positions of all traps on standard error output.
This is a groff extension and currently ignored.
-.Ss \&pvs
+.It Ic \&pvs Op Oo Cm + Ns | Ns Cm - Oc Ns Ar height
Change post-vertical spacing.
This is a groff extension and currently ignored.
-.Ss \&rchar
+.It Ic \&rchar Ar glyph ...
Remove glyph definitions.
Currently unsupported.
-.Ss \&rd
+.It Ic \&rd Op Ar prompt Op Ar agument ...
Read from standard input.
Currently ignored.
-.Ss \&recursionlimit
+.It Ic \&recursionlimit Ar maxrec maxtail
Set the maximum stack depth for recursive macros.
This is a Heirloom extension and currently ignored.
-.Ss \&return
+.It Ic \&return Op Ar twice
Exit a macro and return to the caller.
Currently unsupported.
-.Ss \&rfschar
+.It Ic \&rfschar Ar font glyph ...
Remove font-specific fallback glyph definitions.
Currently unsupported.
-.Ss \&rhang
+.It Ic \&rhang Ar font char ... afmunits
Hang characters at right margin.
This is a Heirloom extension and currently ignored.
-.Ss \&rj
-Justify unfilled text to the right margin.
+.It Ic \&rj Op Ar N
+Justify the next
+.Ar N
+input lines to the right margin without filling.
Currently ignored.
-.Ss \&rm
+.It Ic \&rm Ar macroname
Remove a request, macro or string.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Cm \&rm Ar name
-.Ss \&rn
+.It Ic \&rn Ar oldname newname
Rename a request, macro, diversion, or string.
-Currently unsupported.
-.Ss \&rnn
+In
+.Xr mandoc 1 ,
+user-defined macros,
+.Xr mdoc 7
+and
+.Xr man 7
+macros, and user-defined strings can be renamed, but renaming of
+predefined strings and of
+.Nm
+requests is not supported, and diversions are not implemented at all.
+.It Ic \&rnn Ar oldname newname
Rename a number register.
Currently unsupported.
-.Ss \&rr
+.It Ic \&rr Ar register
Remove a register.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Cm \&rr Ar name
-.Ss \&rs
+.It Ic \&rs
End no-space mode.
Currently ignored.
-.Ss \&rt
+.It Ic \&rt Op Ar dist
Return to marked vertical position.
Currently ignored.
-.Ss \&schar
+.It Ic \&schar Ar glyph Op Ar string
Define global fallback glyph.
This is a groff extension and currently unsupported.
-.Ss \&sentchar
+.It Ic \&sentchar Ar char ...
Define sentence-ending characters.
This is a Heirloom extension and currently ignored.
-.Ss \&shc
+.It Ic \&shc Op Ar glyph
Change the soft hyphen character.
Currently ignored.
-.Ss \&shift
+.It Ic \&shift Op Ar number
Shift macro arguments.
Currently unsupported.
-.Ss \&sizes
+.It Ic \&sizes Ar size ...
Define permissible point sizes.
This is a groff extension and currently ignored.
-.Ss \&so
+.It Ic \&so Ar filename
Include a source file.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Cm \&so Ar file
-.Pp
-The
-.Ar file
-will be read and its contents processed as input in place of the
-.Sq \&.so
+The file is read and its contents processed as input in place of the
+.Ic \&so
request line.
To avoid inadvertent inclusion of unrelated files,
.Xr mandoc 1
@@ -1545,168 +1540,184 @@ Typical usage looks like:
.Dl \&.so man3/Xcursor.3
.Pp
As the whole concept is rather fragile, the use of
-.Sx \&so
+.Ic \&so
is discouraged.
Use
.Xr ln 1
instead.
-.Ss \&spacewidth
+.It Ic \&sp Op Ar height
+Break the output line and emit vertical space.
+The argument follows the syntax of
+.Sx Scaling Widths
+and defaults to one blank line
+.Pq Li 1v .
+.It Ic \&spacewidth Op Cm 1 | 0
Set the space width from the font metrics file.
This is a Heirloom extension and currently ignored.
-.Ss \&special
+.It Ic \&special Op Ar font ...
Define a special font.
This is a groff extension and currently ignored.
-.Ss \&spreadwarn
+.It Ic \&spreadwarn Op Ar width
Warn about wide spacing between words.
Currently ignored.
-.Ss \&ss
+.It Ic \&ss Ar wordspace Op Ar sentencespace
Set space character size.
Currently ignored.
-.Ss \&sty
+.It Ic \&sty Ar position style
Associate style with a font position.
This is a groff extension and currently ignored.
-.Ss \&substring
+.It Ic \&substring Ar stringname startpos Op Ar endpos
Replace a user-defined string with a substring.
Currently unsupported.
-.Ss \&sv
+.It Ic \&sv Op Ar height
Save vertical space.
Currently ignored.
-.Ss \&sy
+.It Ic \&sy Ar command
Execute shell command.
Ignored because insecure.
-.Ss \&T&
+.It Ic \&T&
Re-start a table layout, retaining the options of the prior table
invocation.
See
.Sx \&TS .
-.Ss \&ta
+.It Ic \&ta Op Ar width ... Op Cm T Ar width ...
Set tab stops.
-Takes an arbitrary number of arguments.
-Currently unsupported.
-.Ss \&tc
+Each
+.Ar width
+argument follows the syntax of
+.Sx Scaling Widths .
+If prefixed by a plus sign, it is relative to the previous tab stop.
+The arguments after the
+.Cm T
+marker are used repeatedly as often as needed; for each reuse,
+they are taken relative to the last previously established tab stop.
+When
+.Ic \&ta
+is called without arguments, all tab stops are cleared.
+.It Ic \&tc Op Ar glyph
Change tab repetition character.
Currently unsupported.
-.Ss \&TE
+.It Ic \&TE
End a table context.
See
.Sx \&TS .
-.Ss \&ti
-Temporary indent.
-Currently unsupported.
-.Ss \&tkf
+.It Ic \&ti Oo Cm + Ns | Ns Cm - Oc Ns Ar width
+Break the output line and indent the next output line by
+.Ar width .
+If a sign is specified, the temporary indentation is calculated
+relative to the current indentation; otherwise, it is absolute.
+The argument follows the syntax of
+.Sx Scaling Widths
+and the default scaling unit is
+.Cm m .
+.It Ic \&tkf Ar font minps width1 maxps width2
Enable track kerning for a font.
Currently ignored.
-.Ss \&tl
+.It Ic \&tl No \& Ap Ar left Ap Ar center Ap Ar right Ap
Print a title line.
Currently unsupported.
-.Ss \&tm
+.It Ic \&tm Ar string
Print to standard error output.
Currently ignored.
-.Ss \&tm1
+.It Ic \&tm1 Ar string
Print to standard error output, allowing leading blanks.
This is a groff extension and currently ignored.
-.Ss \&tmc
+.It Ic \&tmc Ar string
Print to standard error output without a trailing newline.
This is a groff extension and currently ignored.
-.Ss \&tr
+.It Ic \&tr Ar glyph glyph ...
Output character translation.
-Its syntax is as follows:
-.Pp
-.D1 Pf \. Cm \&tr Ar [ab]+
-.Pp
-Pairs of
-.Ar ab
-characters are replaced
-.Ar ( a
-for
-.Ar b ) .
-Replacement (or origin) characters may also be character escapes; thus,
+The first glyph in each pair is replaced by the second one.
+Character escapes can be used; for example,
.Pp
.Dl tr \e(xx\e(yy
.Pp
replaces all invocations of \e(xx with \e(yy.
-.Ss \&track
+.It Ic \&track Ar font minps width1 maxps width2
Static letter space tracking.
This is a Heirloom extension and currently ignored.
-.Ss \&transchar
+.It Ic \&transchar Ar char ...
Define transparent characters for sentence-ending.
This is a Heirloom extension and currently ignored.
-.Ss \&trf
+.It Ic \&trf Ar filename
Output the contents of a file, disallowing invalid characters.
This is a groff extension and ignored because insecure.
-.Ss \&trimat
+.It Ic \&trimat Ar left top width height
Set the TrimBox page parameter for PDF generation.
This is a Heirloom extension and currently ignored.
-.Ss \&trin
+.It Ic \&trin Ar glyph glyph ...
Output character translation, ignored by
-.Cm \&asciify .
+.Ic \&asciify .
Currently unsupported.
-.Ss \&trnt
+.It Ic \&trnt Ar glyph glyph ...
Output character translation, ignored by \e!.
Currently unsupported.
-.Ss \&troff
+.It Ic \&troff
Force troff mode.
This is a groff extension and currently ignored.
-.Ss \&TS
+.It Ic \&TS
Begin a table, which formats input in aligned rows and columns.
See
.Xr tbl 7
for a description of the tbl language.
-.Ss \&uf
+.It Ic \&uf Ar font
Globally set the underline font.
Currently ignored.
-.Ss \&ul
-Underline.
+.It Ic \&ul Op Ar N
+Underline next
+.Ar N
+input lines.
Currently ignored.
-.Ss \&unformat
+.It Ic \&unformat Ar divname
Unformat spaces and tabs in a diversion.
Currently unsupported.
-.Ss \&unwatch
+.It Ic \&unwatch Ar macroname
Disable notification for string or macro.
This is a Heirloom extension and currently ignored.
-.Ss \&unwatchn
+.It Ic \&unwatchn Ar register
Disable notification for register.
This is a Heirloom extension and currently ignored.
-.Ss \&vpt
+.It Ic \&vpt Op Cm 1 | 0
Enable or disable vertical position traps.
This is a groff extension and currently ignored.
-.Ss \&vs
+.It Ic \&vs Op Oo Cm + Ns | Ns Cm - Oc Ns Ar height
Change vertical spacing.
Currently ignored.
-.Ss \&warn
+.It Ic \&warn Ar flags
Set warning level.
Currently ignored.
-.Ss \&warnscale
+.It Ic \&warnscale Ar si
Set the scaling indicator used in warnings.
This is a groff extension and currently ignored.
-.Ss \&watch
+.It Ic \&watch Ar macroname
Notify on change of string or macro.
This is a Heirloom extension and currently ignored.
-.Ss \&watchlength
+.It Ic \&watchlength Ar maxlength
On change, report the contents of macros and strings
up to the specified length.
This is a Heirloom extension and currently ignored.
-.Ss \&watchn
+.It Ic \&watchn Ar register
Notify on change of register.
This is a Heirloom extension and currently ignored.
-.Ss \&wh
+.It Ic \&wh Ar dist Op Ar macroname
Set a page location trap.
Currently unsupported.
-.Ss \&while
+.It Ic \&while Ar condition body
Repeated execution while a condition is true.
Currently unsupported.
-.Ss \&write
+.It Ic \&write Oo \(dq Oc Ns Ar string
Write to an open file.
Ignored because insecure.
-.Ss \&writec
+.It Ic \&writec Oo \(dq Oc Ns Ar string
Write to an open file without appending a newline.
Ignored because insecure.
-.Ss \&writem
+.It Ic \&writem Ar macroname
Write macro or string to an open file.
Ignored because insecure.
-.Ss \&xflag
+.It Ic \&xflag Ar level
Set the extension level.
This is a Heirloom extension and currently ignored.
+.El
.Ss Numerical expressions
The
.Sx \&nr ,
@@ -1780,7 +1791,7 @@ maximum (not available in C)
.El
.Pp
There is no concept of precedence; evaluation proceeds from left to right,
-except when subexpressions are enclosed in parantheses.
+except when subexpressions are enclosed in parentheses.
Inside parentheses, whitespace is ignored.
.Sh ESCAPE SEQUENCE REFERENCE
The
@@ -1930,9 +1941,10 @@ and
.Ss \eH\(aq Ns Oo +|- Oc Ns Ar number Ns \(aq
Set the height of the current font; ignored by
.Xr mandoc 1 .
-.Ss \eh\(aq Ns Ar number Ns \(aq
-Horizontal motion; ignored by
-.Xr mandoc 1 .
+.Ss \eh\(aq Ns Ar width Ns \(aq
+Horizontal motion relative to the current position.
+The default scaling unit is
+.Cm m .
.Ss \ek[ Ns Ar name ]
Mark horizontal input place in register; ignored by
.Xr mandoc 1 .
@@ -1943,9 +1955,11 @@ and
.Ss \eL\(aq Ns Ar number Ns Oo Ar c Oc Ns \(aq
Vertical line drawing function; ignored by
.Xr mandoc 1 .
-.Ss \el\(aq Ns Ar number Ns Oo Ar c Oc Ns \(aq
-Horizontal line drawing function; ignored by
-.Xr mandoc 1 .
+.Ss \el\(aq Ns Ar width Ns Oo Ar c Oc Ns \(aq
+Draw a horizontal line of
+.Ar width
+using the glyph
+.Ar c .
.Ss \eM[ Ns Ar name ]
Set fill (background) color (groff extension); ignored by
.Xr mandoc 1 .
diff --git a/contrib/mdocml/roff.c b/contrib/mdocml/roff.c
index ad55d320e4d5..6880719b3c27 100644
--- a/contrib/mdocml/roff.c
+++ b/contrib/mdocml/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.289 2017/02/17 03:03:03 schwarze Exp $ */
+/* $Id: roff.c,v 1.306 2017/06/07 00:50:34 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -22,12 +22,15 @@
#include <assert.h>
#include <ctype.h>
#include <limits.h>
+#include <stddef.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mandoc.h"
#include "mandoc_aux.h"
+#include "mandoc_ohash.h"
#include "roff.h"
#include "libmandoc.h"
#include "roff_int.h"
@@ -38,253 +41,6 @@
/* --- data types --------------------------------------------------------- */
-enum rofft {
- ROFF_ab,
- ROFF_ad,
- ROFF_af,
- ROFF_aln,
- ROFF_als,
- ROFF_am,
- ROFF_am1,
- ROFF_ami,
- ROFF_ami1,
- ROFF_as,
- ROFF_as1,
- ROFF_asciify,
- ROFF_backtrace,
- ROFF_bd,
- ROFF_bleedat,
- ROFF_blm,
- ROFF_box,
- ROFF_boxa,
- ROFF_bp,
- ROFF_BP,
- /* MAN_br, MDOC_br */
- ROFF_break,
- ROFF_breakchar,
- ROFF_brnl,
- ROFF_brp,
- ROFF_brpnl,
- ROFF_c2,
- ROFF_cc,
- ROFF_ce,
- ROFF_cf,
- ROFF_cflags,
- ROFF_ch,
- ROFF_char,
- ROFF_chop,
- ROFF_class,
- ROFF_close,
- ROFF_CL,
- ROFF_color,
- ROFF_composite,
- ROFF_continue,
- ROFF_cp,
- ROFF_cropat,
- ROFF_cs,
- ROFF_cu,
- ROFF_da,
- ROFF_dch,
- ROFF_Dd,
- ROFF_de,
- ROFF_de1,
- ROFF_defcolor,
- ROFF_dei,
- ROFF_dei1,
- ROFF_device,
- ROFF_devicem,
- ROFF_di,
- ROFF_do,
- ROFF_ds,
- ROFF_ds1,
- ROFF_dwh,
- ROFF_dt,
- ROFF_ec,
- ROFF_ecr,
- ROFF_ecs,
- ROFF_el,
- ROFF_em,
- ROFF_EN,
- ROFF_eo,
- ROFF_EP,
- ROFF_EQ,
- ROFF_errprint,
- ROFF_ev,
- ROFF_evc,
- ROFF_ex,
- ROFF_fallback,
- ROFF_fam,
- ROFF_fc,
- ROFF_fchar,
- ROFF_fcolor,
- ROFF_fdeferlig,
- ROFF_feature,
- /* MAN_fi; ignored in mdoc(7) */
- ROFF_fkern,
- ROFF_fl,
- ROFF_flig,
- ROFF_fp,
- ROFF_fps,
- ROFF_fschar,
- ROFF_fspacewidth,
- ROFF_fspecial,
- /* MAN_ft; ignored in mdoc(7) */
- ROFF_ftr,
- ROFF_fzoom,
- ROFF_gcolor,
- ROFF_hc,
- ROFF_hcode,
- ROFF_hidechar,
- ROFF_hla,
- ROFF_hlm,
- ROFF_hpf,
- ROFF_hpfa,
- ROFF_hpfcode,
- ROFF_hw,
- ROFF_hy,
- ROFF_hylang,
- ROFF_hylen,
- ROFF_hym,
- ROFF_hypp,
- ROFF_hys,
- ROFF_ie,
- ROFF_if,
- ROFF_ig,
- /* MAN_in; ignored in mdoc(7) */
- ROFF_index,
- ROFF_it,
- ROFF_itc,
- ROFF_IX,
- ROFF_kern,
- ROFF_kernafter,
- ROFF_kernbefore,
- ROFF_kernpair,
- ROFF_lc,
- ROFF_lc_ctype,
- ROFF_lds,
- ROFF_length,
- ROFF_letadj,
- ROFF_lf,
- ROFF_lg,
- ROFF_lhang,
- ROFF_linetabs,
- /* MAN_ll, MDOC_ll */
- ROFF_lnr,
- ROFF_lnrf,
- ROFF_lpfx,
- ROFF_ls,
- ROFF_lsm,
- ROFF_lt,
- ROFF_mc,
- ROFF_mediasize,
- ROFF_minss,
- ROFF_mk,
- ROFF_mso,
- ROFF_na,
- ROFF_ne,
- /* MAN_nf; ignored in mdoc(7) */
- ROFF_nh,
- ROFF_nhychar,
- ROFF_nm,
- ROFF_nn,
- ROFF_nop,
- ROFF_nr,
- ROFF_nrf,
- ROFF_nroff,
- ROFF_ns,
- ROFF_nx,
- ROFF_open,
- ROFF_opena,
- ROFF_os,
- ROFF_output,
- ROFF_padj,
- ROFF_papersize,
- ROFF_pc,
- ROFF_pev,
- ROFF_pi,
- ROFF_PI,
- ROFF_pl,
- ROFF_pm,
- ROFF_pn,
- ROFF_pnr,
- ROFF_po,
- ROFF_ps,
- ROFF_psbb,
- ROFF_pshape,
- ROFF_pso,
- ROFF_ptr,
- ROFF_pvs,
- ROFF_rchar,
- ROFF_rd,
- ROFF_recursionlimit,
- ROFF_return,
- ROFF_rfschar,
- ROFF_rhang,
- ROFF_rj,
- ROFF_rm,
- ROFF_rn,
- ROFF_rnn,
- ROFF_rr,
- ROFF_rs,
- ROFF_rt,
- ROFF_schar,
- ROFF_sentchar,
- ROFF_shc,
- ROFF_shift,
- ROFF_sizes,
- ROFF_so,
- /* MAN_sp, MDOC_sp */
- ROFF_spacewidth,
- ROFF_special,
- ROFF_spreadwarn,
- ROFF_ss,
- ROFF_sty,
- ROFF_substring,
- ROFF_sv,
- ROFF_sy,
- ROFF_T_,
- ROFF_ta,
- ROFF_tc,
- ROFF_TE,
- ROFF_TH,
- ROFF_ti,
- ROFF_tkf,
- ROFF_tl,
- ROFF_tm,
- ROFF_tm1,
- ROFF_tmc,
- ROFF_tr,
- ROFF_track,
- ROFF_transchar,
- ROFF_trf,
- ROFF_trimat,
- ROFF_trin,
- ROFF_trnt,
- ROFF_troff,
- ROFF_TS,
- ROFF_uf,
- ROFF_ul,
- ROFF_unformat,
- ROFF_unwatch,
- ROFF_unwatchn,
- ROFF_vpt,
- ROFF_vs,
- ROFF_warn,
- ROFF_warnscale,
- ROFF_watch,
- ROFF_watchlength,
- ROFF_watchn,
- ROFF_wh,
- ROFF_while,
- ROFF_write,
- ROFF_writec,
- ROFF_writem,
- ROFF_xflag,
- ROFF_cblock,
- ROFF_USERDEF,
- ROFF_MAX
-};
-
/*
* An incredibly-simple string buffer.
*/
@@ -311,12 +67,23 @@ struct roffreg {
struct roffreg *next;
};
+/*
+ * Association of request and macro names with token IDs.
+ */
+struct roffreq {
+ enum roff_tok tok;
+ char name[];
+};
+
struct roff {
struct mparse *parse; /* parse point */
+ struct roff_man *man; /* mdoc or man parser */
struct roffnode *last; /* leaf of stack */
int *rstack; /* stack of inverted `ie' values */
+ struct ohash *reqtab; /* request lookup table */
struct roffreg *regtab; /* number registers */
struct roffkv *strtab; /* user-defined strings & macros */
+ struct roffkv *rentab; /* renamed strings & macros */
struct roffkv *xmbtab; /* multi-byte trans table (`tr') */
struct roffstr *xtab; /* single-byte trans table (`tr') */
const char *current_string; /* value of last called user macro */
@@ -333,10 +100,11 @@ struct roff {
int format; /* current file in mdoc or man format */
int argc; /* number of args of the last macro */
char control; /* control character */
+ char escape; /* escape character */
};
struct roffnode {
- enum rofft tok; /* type of node */
+ enum roff_tok tok; /* type of node */
struct roffnode *parent; /* up one in stack */
int line; /* parse line */
int col; /* parse col */
@@ -347,7 +115,7 @@ struct roffnode {
};
#define ROFF_ARGS struct roff *r, /* parse ctx */ \
- enum rofft tok, /* tok of macro */ \
+ enum roff_tok tok, /* tok of macro */ \
struct buf *buf, /* input buffer */ \
int ln, /* parse line */ \
int ppos, /* original pos in buffer */ \
@@ -357,13 +125,11 @@ struct roffnode {
typedef enum rofferr (*roffproc)(ROFF_ARGS);
struct roffmac {
- const char *name; /* macro name */
roffproc proc; /* process new macro */
roffproc text; /* process as child text of macro */
roffproc sub; /* process as child of macro */
int flags;
#define ROFFMAC_STRUCT (1 << 0) /* always interpret */
- struct roffmac *next;
};
struct predef {
@@ -376,16 +142,14 @@ struct predef {
/* --- function prototypes ------------------------------------------------ */
-static enum rofft roffhash_find(const char *, size_t);
-static void roffhash_init(void);
static void roffnode_cleanscope(struct roff *);
static void roffnode_pop(struct roff *);
-static void roffnode_push(struct roff *, enum rofft,
+static void roffnode_push(struct roff *, enum roff_tok,
const char *, int, int);
static enum rofferr roff_block(ROFF_ARGS);
static enum rofferr roff_block_text(ROFF_ARGS);
static enum rofferr roff_block_sub(ROFF_ARGS);
-static enum rofferr roff_brp(ROFF_ARGS);
+static enum rofferr roff_br(ROFF_ARGS);
static enum rofferr roff_cblock(ROFF_ARGS);
static enum rofferr roff_cc(ROFF_ARGS);
static void roff_ccond(struct roff *, int, int);
@@ -393,6 +157,8 @@ static enum rofferr roff_cond(ROFF_ARGS);
static enum rofferr roff_cond_text(ROFF_ARGS);
static enum rofferr roff_cond_sub(ROFF_ARGS);
static enum rofferr roff_ds(ROFF_ARGS);
+static enum rofferr roff_ec(ROFF_ARGS);
+static enum rofferr roff_eo(ROFF_ARGS);
static enum rofferr roff_eqndelim(struct roff *, struct buf *, int);
static int roff_evalcond(struct roff *r, int, char *, int *);
static int roff_evalnum(struct roff *, int,
@@ -410,6 +176,8 @@ static int roff_getregn(const struct roff *,
const char *, size_t);
static int roff_getregro(const struct roff *,
const char *name);
+static const char *roff_getrenn(const struct roff *,
+ const char *, size_t);
static const char *roff_getstrn(const struct roff *,
const char *, size_t);
static int roff_hasregn(const struct roff *,
@@ -419,12 +187,17 @@ static enum rofferr roff_it(ROFF_ARGS);
static enum rofferr roff_line_ignore(ROFF_ARGS);
static void roff_man_alloc1(struct roff_man *);
static void roff_man_free1(struct roff_man *);
+static enum rofferr roff_manyarg(ROFF_ARGS);
static enum rofferr roff_nr(ROFF_ARGS);
-static enum rofft roff_parse(struct roff *, char *, int *,
+static enum rofferr roff_onearg(ROFF_ARGS);
+static enum roff_tok roff_parse(struct roff *, char *, int *,
int, int);
-static enum rofferr roff_parsetext(struct buf *, int, int *);
+static enum rofferr roff_parsetext(struct roff *, struct buf *,
+ int, int *);
+static enum rofferr roff_renamed(ROFF_ARGS);
static enum rofferr roff_res(struct roff *, struct buf *, int, int);
static enum rofferr roff_rm(ROFF_ARGS);
+static enum rofferr roff_rn(ROFF_ARGS);
static enum rofferr roff_rr(ROFF_ARGS);
static void roff_setstr(struct roff *,
const char *, const char *, int);
@@ -444,254 +217,360 @@ static enum rofferr roff_userdef(ROFF_ARGS);
/* --- constant data ------------------------------------------------------ */
-/* See roffhash_find() */
-
-#define ASCII_HI 126
-#define ASCII_LO 33
-#define HASHWIDTH (ASCII_HI - ASCII_LO + 1)
-
#define ROFFNUM_SCALE (1 << 0) /* Honour scaling in roff_getnum(). */
#define ROFFNUM_WHITE (1 << 1) /* Skip whitespace in roff_evalnum(). */
-static struct roffmac *hash[HASHWIDTH];
-
-static struct roffmac roffs[ROFF_MAX] = {
- { "ab", roff_unsupp, NULL, NULL, 0, NULL },
- { "ad", roff_line_ignore, NULL, NULL, 0, NULL },
- { "af", roff_line_ignore, NULL, NULL, 0, NULL },
- { "aln", roff_unsupp, NULL, NULL, 0, NULL },
- { "als", roff_unsupp, NULL, NULL, 0, NULL },
- { "am", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "am1", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "ami", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "ami1", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "as", roff_ds, NULL, NULL, 0, NULL },
- { "as1", roff_ds, NULL, NULL, 0, NULL },
- { "asciify", roff_unsupp, NULL, NULL, 0, NULL },
- { "backtrace", roff_line_ignore, NULL, NULL, 0, NULL },
- { "bd", roff_line_ignore, NULL, NULL, 0, NULL },
- { "bleedat", roff_line_ignore, NULL, NULL, 0, NULL },
- { "blm", roff_unsupp, NULL, NULL, 0, NULL },
- { "box", roff_unsupp, NULL, NULL, 0, NULL },
- { "boxa", roff_unsupp, NULL, NULL, 0, NULL },
- { "bp", roff_line_ignore, NULL, NULL, 0, NULL },
- { "BP", roff_unsupp, NULL, NULL, 0, NULL },
- { "break", roff_unsupp, NULL, NULL, 0, NULL },
- { "breakchar", roff_line_ignore, NULL, NULL, 0, NULL },
- { "brnl", roff_line_ignore, NULL, NULL, 0, NULL },
- { "brp", roff_brp, NULL, NULL, 0, NULL },
- { "brpnl", roff_line_ignore, NULL, NULL, 0, NULL },
- { "c2", roff_unsupp, NULL, NULL, 0, NULL },
- { "cc", roff_cc, NULL, NULL, 0, NULL },
- { "ce", roff_line_ignore, NULL, NULL, 0, NULL },
- { "cf", roff_insec, NULL, NULL, 0, NULL },
- { "cflags", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ch", roff_line_ignore, NULL, NULL, 0, NULL },
- { "char", roff_unsupp, NULL, NULL, 0, NULL },
- { "chop", roff_unsupp, NULL, NULL, 0, NULL },
- { "class", roff_line_ignore, NULL, NULL, 0, NULL },
- { "close", roff_insec, NULL, NULL, 0, NULL },
- { "CL", roff_unsupp, NULL, NULL, 0, NULL },
- { "color", roff_line_ignore, NULL, NULL, 0, NULL },
- { "composite", roff_unsupp, NULL, NULL, 0, NULL },
- { "continue", roff_unsupp, NULL, NULL, 0, NULL },
- { "cp", roff_line_ignore, NULL, NULL, 0, NULL },
- { "cropat", roff_line_ignore, NULL, NULL, 0, NULL },
- { "cs", roff_line_ignore, NULL, NULL, 0, NULL },
- { "cu", roff_line_ignore, NULL, NULL, 0, NULL },
- { "da", roff_unsupp, NULL, NULL, 0, NULL },
- { "dch", roff_unsupp, NULL, NULL, 0, NULL },
- { "Dd", roff_Dd, NULL, NULL, 0, NULL },
- { "de", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "de1", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "defcolor", roff_line_ignore, NULL, NULL, 0, NULL },
- { "dei", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "dei1", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "device", roff_unsupp, NULL, NULL, 0, NULL },
- { "devicem", roff_unsupp, NULL, NULL, 0, NULL },
- { "di", roff_unsupp, NULL, NULL, 0, NULL },
- { "do", roff_unsupp, NULL, NULL, 0, NULL },
- { "ds", roff_ds, NULL, NULL, 0, NULL },
- { "ds1", roff_ds, NULL, NULL, 0, NULL },
- { "dwh", roff_unsupp, NULL, NULL, 0, NULL },
- { "dt", roff_unsupp, NULL, NULL, 0, NULL },
- { "ec", roff_unsupp, NULL, NULL, 0, NULL },
- { "ecr", roff_unsupp, NULL, NULL, 0, NULL },
- { "ecs", roff_unsupp, NULL, NULL, 0, NULL },
- { "el", roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT, NULL },
- { "em", roff_unsupp, NULL, NULL, 0, NULL },
- { "EN", roff_EN, NULL, NULL, 0, NULL },
- { "eo", roff_unsupp, NULL, NULL, 0, NULL },
- { "EP", roff_unsupp, NULL, NULL, 0, NULL },
- { "EQ", roff_EQ, NULL, NULL, 0, NULL },
- { "errprint", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ev", roff_unsupp, NULL, NULL, 0, NULL },
- { "evc", roff_unsupp, NULL, NULL, 0, NULL },
- { "ex", roff_unsupp, NULL, NULL, 0, NULL },
- { "fallback", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fam", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fc", roff_unsupp, NULL, NULL, 0, NULL },
- { "fchar", roff_unsupp, NULL, NULL, 0, NULL },
- { "fcolor", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fdeferlig", roff_line_ignore, NULL, NULL, 0, NULL },
- { "feature", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fkern", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fl", roff_line_ignore, NULL, NULL, 0, NULL },
- { "flig", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fp", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fps", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fschar", roff_unsupp, NULL, NULL, 0, NULL },
- { "fspacewidth", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fspecial", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ftr", roff_line_ignore, NULL, NULL, 0, NULL },
- { "fzoom", roff_line_ignore, NULL, NULL, 0, NULL },
- { "gcolor", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hc", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hcode", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hidechar", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hla", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hlm", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hpf", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hpfa", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hpfcode", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hw", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hy", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hylang", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hylen", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hym", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hypp", roff_line_ignore, NULL, NULL, 0, NULL },
- { "hys", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ie", roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT, NULL },
- { "if", roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT, NULL },
- { "ig", roff_block, roff_block_text, roff_block_sub, 0, NULL },
- { "index", roff_unsupp, NULL, NULL, 0, NULL },
- { "it", roff_it, NULL, NULL, 0, NULL },
- { "itc", roff_unsupp, NULL, NULL, 0, NULL },
- { "IX", roff_line_ignore, NULL, NULL, 0, NULL },
- { "kern", roff_line_ignore, NULL, NULL, 0, NULL },
- { "kernafter", roff_line_ignore, NULL, NULL, 0, NULL },
- { "kernbefore", roff_line_ignore, NULL, NULL, 0, NULL },
- { "kernpair", roff_line_ignore, NULL, NULL, 0, NULL },
- { "lc", roff_unsupp, NULL, NULL, 0, NULL },
- { "lc_ctype", roff_unsupp, NULL, NULL, 0, NULL },
- { "lds", roff_unsupp, NULL, NULL, 0, NULL },
- { "length", roff_unsupp, NULL, NULL, 0, NULL },
- { "letadj", roff_line_ignore, NULL, NULL, 0, NULL },
- { "lf", roff_insec, NULL, NULL, 0, NULL },
- { "lg", roff_line_ignore, NULL, NULL, 0, NULL },
- { "lhang", roff_line_ignore, NULL, NULL, 0, NULL },
- { "linetabs", roff_unsupp, NULL, NULL, 0, NULL },
- { "lnr", roff_unsupp, NULL, NULL, 0, NULL },
- { "lnrf", roff_unsupp, NULL, NULL, 0, NULL },
- { "lpfx", roff_unsupp, NULL, NULL, 0, NULL },
- { "ls", roff_line_ignore, NULL, NULL, 0, NULL },
- { "lsm", roff_unsupp, NULL, NULL, 0, NULL },
- { "lt", roff_line_ignore, NULL, NULL, 0, NULL },
- { "mc", roff_line_ignore, NULL, NULL, 0, NULL },
- { "mediasize", roff_line_ignore, NULL, NULL, 0, NULL },
- { "minss", roff_line_ignore, NULL, NULL, 0, NULL },
- { "mk", roff_line_ignore, NULL, NULL, 0, NULL },
- { "mso", roff_insec, NULL, NULL, 0, NULL },
- { "na", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ne", roff_line_ignore, NULL, NULL, 0, NULL },
- { "nh", roff_line_ignore, NULL, NULL, 0, NULL },
- { "nhychar", roff_line_ignore, NULL, NULL, 0, NULL },
- { "nm", roff_unsupp, NULL, NULL, 0, NULL },
- { "nn", roff_unsupp, NULL, NULL, 0, NULL },
- { "nop", roff_unsupp, NULL, NULL, 0, NULL },
- { "nr", roff_nr, NULL, NULL, 0, NULL },
- { "nrf", roff_unsupp, NULL, NULL, 0, NULL },
- { "nroff", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ns", roff_line_ignore, NULL, NULL, 0, NULL },
- { "nx", roff_insec, NULL, NULL, 0, NULL },
- { "open", roff_insec, NULL, NULL, 0, NULL },
- { "opena", roff_insec, NULL, NULL, 0, NULL },
- { "os", roff_line_ignore, NULL, NULL, 0, NULL },
- { "output", roff_unsupp, NULL, NULL, 0, NULL },
- { "padj", roff_line_ignore, NULL, NULL, 0, NULL },
- { "papersize", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pc", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pev", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pi", roff_insec, NULL, NULL, 0, NULL },
- { "PI", roff_unsupp, NULL, NULL, 0, NULL },
- { "pl", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pm", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pn", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pnr", roff_line_ignore, NULL, NULL, 0, NULL },
- { "po", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ps", roff_line_ignore, NULL, NULL, 0, NULL },
- { "psbb", roff_unsupp, NULL, NULL, 0, NULL },
- { "pshape", roff_unsupp, NULL, NULL, 0, NULL },
- { "pso", roff_insec, NULL, NULL, 0, NULL },
- { "ptr", roff_line_ignore, NULL, NULL, 0, NULL },
- { "pvs", roff_line_ignore, NULL, NULL, 0, NULL },
- { "rchar", roff_unsupp, NULL, NULL, 0, NULL },
- { "rd", roff_line_ignore, NULL, NULL, 0, NULL },
- { "recursionlimit", roff_line_ignore, NULL, NULL, 0, NULL },
- { "return", roff_unsupp, NULL, NULL, 0, NULL },
- { "rfschar", roff_unsupp, NULL, NULL, 0, NULL },
- { "rhang", roff_line_ignore, NULL, NULL, 0, NULL },
- { "rj", roff_line_ignore, NULL, NULL, 0, NULL },
- { "rm", roff_rm, NULL, NULL, 0, NULL },
- { "rn", roff_unsupp, NULL, NULL, 0, NULL },
- { "rnn", roff_unsupp, NULL, NULL, 0, NULL },
- { "rr", roff_rr, NULL, NULL, 0, NULL },
- { "rs", roff_line_ignore, NULL, NULL, 0, NULL },
- { "rt", roff_line_ignore, NULL, NULL, 0, NULL },
- { "schar", roff_unsupp, NULL, NULL, 0, NULL },
- { "sentchar", roff_line_ignore, NULL, NULL, 0, NULL },
- { "shc", roff_line_ignore, NULL, NULL, 0, NULL },
- { "shift", roff_unsupp, NULL, NULL, 0, NULL },
- { "sizes", roff_line_ignore, NULL, NULL, 0, NULL },
- { "so", roff_so, NULL, NULL, 0, NULL },
- { "spacewidth", roff_line_ignore, NULL, NULL, 0, NULL },
- { "special", roff_line_ignore, NULL, NULL, 0, NULL },
- { "spreadwarn", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ss", roff_line_ignore, NULL, NULL, 0, NULL },
- { "sty", roff_line_ignore, NULL, NULL, 0, NULL },
- { "substring", roff_unsupp, NULL, NULL, 0, NULL },
- { "sv", roff_line_ignore, NULL, NULL, 0, NULL },
- { "sy", roff_insec, NULL, NULL, 0, NULL },
- { "T&", roff_T_, NULL, NULL, 0, NULL },
- { "ta", roff_unsupp, NULL, NULL, 0, NULL },
- { "tc", roff_unsupp, NULL, NULL, 0, NULL },
- { "TE", roff_TE, NULL, NULL, 0, NULL },
- { "TH", roff_TH, NULL, NULL, 0, NULL },
- { "ti", roff_unsupp, NULL, NULL, 0, NULL },
- { "tkf", roff_line_ignore, NULL, NULL, 0, NULL },
- { "tl", roff_unsupp, NULL, NULL, 0, NULL },
- { "tm", roff_line_ignore, NULL, NULL, 0, NULL },
- { "tm1", roff_line_ignore, NULL, NULL, 0, NULL },
- { "tmc", roff_line_ignore, NULL, NULL, 0, NULL },
- { "tr", roff_tr, NULL, NULL, 0, NULL },
- { "track", roff_line_ignore, NULL, NULL, 0, NULL },
- { "transchar", roff_line_ignore, NULL, NULL, 0, NULL },
- { "trf", roff_insec, NULL, NULL, 0, NULL },
- { "trimat", roff_line_ignore, NULL, NULL, 0, NULL },
- { "trin", roff_unsupp, NULL, NULL, 0, NULL },
- { "trnt", roff_unsupp, NULL, NULL, 0, NULL },
- { "troff", roff_line_ignore, NULL, NULL, 0, NULL },
- { "TS", roff_TS, NULL, NULL, 0, NULL },
- { "uf", roff_line_ignore, NULL, NULL, 0, NULL },
- { "ul", roff_line_ignore, NULL, NULL, 0, NULL },
- { "unformat", roff_unsupp, NULL, NULL, 0, NULL },
- { "unwatch", roff_line_ignore, NULL, NULL, 0, NULL },
- { "unwatchn", roff_line_ignore, NULL, NULL, 0, NULL },
- { "vpt", roff_line_ignore, NULL, NULL, 0, NULL },
- { "vs", roff_line_ignore, NULL, NULL, 0, NULL },
- { "warn", roff_line_ignore, NULL, NULL, 0, NULL },
- { "warnscale", roff_line_ignore, NULL, NULL, 0, NULL },
- { "watch", roff_line_ignore, NULL, NULL, 0, NULL },
- { "watchlength", roff_line_ignore, NULL, NULL, 0, NULL },
- { "watchn", roff_line_ignore, NULL, NULL, 0, NULL },
- { "wh", roff_unsupp, NULL, NULL, 0, NULL },
- { "while", roff_unsupp, NULL, NULL, 0, NULL },
- { "write", roff_insec, NULL, NULL, 0, NULL },
- { "writec", roff_insec, NULL, NULL, 0, NULL },
- { "writem", roff_insec, NULL, NULL, 0, NULL },
- { "xflag", roff_line_ignore, NULL, NULL, 0, NULL },
- { ".", roff_cblock, NULL, NULL, 0, NULL },
- { NULL, roff_userdef, NULL, NULL, 0, NULL },
+const char *__roff_name[MAN_MAX + 1] = {
+ "br", "ce", "ft", "ll",
+ "mc", "sp", "ta", "ti",
+ NULL,
+ "ab", "ad", "af", "aln",
+ "als", "am", "am1", "ami",
+ "ami1", "as", "as1", "asciify",
+ "backtrace", "bd", "bleedat", "blm",
+ "box", "boxa", "bp", "BP",
+ "break", "breakchar", "brnl", "brp",
+ "brpnl", "c2", "cc",
+ "cf", "cflags", "ch", "char",
+ "chop", "class", "close", "CL",
+ "color", "composite", "continue", "cp",
+ "cropat", "cs", "cu", "da",
+ "dch", "Dd", "de", "de1",
+ "defcolor", "dei", "dei1", "device",
+ "devicem", "di", "do", "ds",
+ "ds1", "dwh", "dt", "ec",
+ "ecr", "ecs", "el", "em",
+ "EN", "eo", "EP", "EQ",
+ "errprint", "ev", "evc", "ex",
+ "fallback", "fam", "fc", "fchar",
+ "fcolor", "fdeferlig", "feature", "fkern",
+ "fl", "flig", "fp", "fps",
+ "fschar", "fspacewidth", "fspecial", "ftr",
+ "fzoom", "gcolor", "hc", "hcode",
+ "hidechar", "hla", "hlm", "hpf",
+ "hpfa", "hpfcode", "hw", "hy",
+ "hylang", "hylen", "hym", "hypp",
+ "hys", "ie", "if", "ig",
+ "index", "it", "itc", "IX",
+ "kern", "kernafter", "kernbefore", "kernpair",
+ "lc", "lc_ctype", "lds", "length",
+ "letadj", "lf", "lg", "lhang",
+ "linetabs", "lnr", "lnrf", "lpfx",
+ "ls", "lsm", "lt",
+ "mediasize", "minss", "mk", "mso",
+ "na", "ne", "nh", "nhychar",
+ "nm", "nn", "nop", "nr",
+ "nrf", "nroff", "ns", "nx",
+ "open", "opena", "os", "output",
+ "padj", "papersize", "pc", "pev",
+ "pi", "PI", "pl", "pm",
+ "pn", "pnr", "po", "ps",
+ "psbb", "pshape", "pso", "ptr",
+ "pvs", "rchar", "rd", "recursionlimit",
+ "return", "rfschar", "rhang", "rj",
+ "rm", "rn", "rnn", "rr",
+ "rs", "rt", "schar", "sentchar",
+ "shc", "shift", "sizes", "so",
+ "spacewidth", "special", "spreadwarn", "ss",
+ "sty", "substring", "sv", "sy",
+ "T&", "tc", "TE",
+ "TH", "tkf", "tl",
+ "tm", "tm1", "tmc", "tr",
+ "track", "transchar", "trf", "trimat",
+ "trin", "trnt", "troff", "TS",
+ "uf", "ul", "unformat", "unwatch",
+ "unwatchn", "vpt", "vs", "warn",
+ "warnscale", "watch", "watchlength", "watchn",
+ "wh", "while", "write", "writec",
+ "writem", "xflag", ".", NULL,
+ NULL, "text",
+ "Dd", "Dt", "Os", "Sh",
+ "Ss", "Pp", "D1", "Dl",
+ "Bd", "Ed", "Bl", "El",
+ "It", "Ad", "An", "Ap",
+ "Ar", "Cd", "Cm", "Dv",
+ "Er", "Ev", "Ex", "Fa",
+ "Fd", "Fl", "Fn", "Ft",
+ "Ic", "In", "Li", "Nd",
+ "Nm", "Op", "Ot", "Pa",
+ "Rv", "St", "Va", "Vt",
+ "Xr", "%A", "%B", "%D",
+ "%I", "%J", "%N", "%O",
+ "%P", "%R", "%T", "%V",
+ "Ac", "Ao", "Aq", "At",
+ "Bc", "Bf", "Bo", "Bq",
+ "Bsx", "Bx", "Db", "Dc",
+ "Do", "Dq", "Ec", "Ef",
+ "Em", "Eo", "Fx", "Ms",
+ "No", "Ns", "Nx", "Ox",
+ "Pc", "Pf", "Po", "Pq",
+ "Qc", "Ql", "Qo", "Qq",
+ "Re", "Rs", "Sc", "So",
+ "Sq", "Sm", "Sx", "Sy",
+ "Tn", "Ux", "Xc", "Xo",
+ "Fo", "Fc", "Oo", "Oc",
+ "Bk", "Ek", "Bt", "Hf",
+ "Fr", "Ud", "Lb", "Lp",
+ "Lk", "Mt", "Brq", "Bro",
+ "Brc", "%C", "Es", "En",
+ "Dx", "%Q", "%U", "Ta",
+ NULL,
+ "TH", "SH", "SS", "TP",
+ "LP", "PP", "P", "IP",
+ "HP", "SM", "SB", "BI",
+ "IB", "BR", "RB", "R",
+ "B", "I", "IR", "RI",
+ "nf", "fi",
+ "RE", "RS", "DT", "UC",
+ "PD", "AT", "in",
+ "OP", "EX", "EE", "UR",
+ "UE", NULL
+};
+const char *const *roff_name = __roff_name;
+
+static struct roffmac roffs[TOKEN_NONE] = {
+ { roff_br, NULL, NULL, 0 }, /* br */
+ { roff_onearg, NULL, NULL, 0 }, /* ce */
+ { roff_onearg, NULL, NULL, 0 }, /* ft */
+ { roff_onearg, NULL, NULL, 0 }, /* ll */
+ { roff_onearg, NULL, NULL, 0 }, /* mc */
+ { roff_onearg, NULL, NULL, 0 }, /* sp */
+ { roff_manyarg, NULL, NULL, 0 }, /* ta */
+ { roff_onearg, NULL, NULL, 0 }, /* ti */
+ { NULL, NULL, NULL, 0 }, /* ROFF_MAX */
+ { roff_unsupp, NULL, NULL, 0 }, /* ab */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ad */
+ { roff_line_ignore, NULL, NULL, 0 }, /* af */
+ { roff_unsupp, NULL, NULL, 0 }, /* aln */
+ { roff_unsupp, NULL, NULL, 0 }, /* als */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* am */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* am1 */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* ami */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* ami1 */
+ { roff_ds, NULL, NULL, 0 }, /* as */
+ { roff_ds, NULL, NULL, 0 }, /* as1 */
+ { roff_unsupp, NULL, NULL, 0 }, /* asciify */
+ { roff_line_ignore, NULL, NULL, 0 }, /* backtrace */
+ { roff_line_ignore, NULL, NULL, 0 }, /* bd */
+ { roff_line_ignore, NULL, NULL, 0 }, /* bleedat */
+ { roff_unsupp, NULL, NULL, 0 }, /* blm */
+ { roff_unsupp, NULL, NULL, 0 }, /* box */
+ { roff_unsupp, NULL, NULL, 0 }, /* boxa */
+ { roff_line_ignore, NULL, NULL, 0 }, /* bp */
+ { roff_unsupp, NULL, NULL, 0 }, /* BP */
+ { roff_unsupp, NULL, NULL, 0 }, /* break */
+ { roff_line_ignore, NULL, NULL, 0 }, /* breakchar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* brnl */
+ { roff_br, NULL, NULL, 0 }, /* brp */
+ { roff_line_ignore, NULL, NULL, 0 }, /* brpnl */
+ { roff_unsupp, NULL, NULL, 0 }, /* c2 */
+ { roff_cc, NULL, NULL, 0 }, /* cc */
+ { roff_insec, NULL, NULL, 0 }, /* cf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* cflags */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ch */
+ { roff_unsupp, NULL, NULL, 0 }, /* char */
+ { roff_unsupp, NULL, NULL, 0 }, /* chop */
+ { roff_line_ignore, NULL, NULL, 0 }, /* class */
+ { roff_insec, NULL, NULL, 0 }, /* close */
+ { roff_unsupp, NULL, NULL, 0 }, /* CL */
+ { roff_line_ignore, NULL, NULL, 0 }, /* color */
+ { roff_unsupp, NULL, NULL, 0 }, /* composite */
+ { roff_unsupp, NULL, NULL, 0 }, /* continue */
+ { roff_line_ignore, NULL, NULL, 0 }, /* cp */
+ { roff_line_ignore, NULL, NULL, 0 }, /* cropat */
+ { roff_line_ignore, NULL, NULL, 0 }, /* cs */
+ { roff_line_ignore, NULL, NULL, 0 }, /* cu */
+ { roff_unsupp, NULL, NULL, 0 }, /* da */
+ { roff_unsupp, NULL, NULL, 0 }, /* dch */
+ { roff_Dd, NULL, NULL, 0 }, /* Dd */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* de */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* de1 */
+ { roff_line_ignore, NULL, NULL, 0 }, /* defcolor */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* dei */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* dei1 */
+ { roff_unsupp, NULL, NULL, 0 }, /* device */
+ { roff_unsupp, NULL, NULL, 0 }, /* devicem */
+ { roff_unsupp, NULL, NULL, 0 }, /* di */
+ { roff_unsupp, NULL, NULL, 0 }, /* do */
+ { roff_ds, NULL, NULL, 0 }, /* ds */
+ { roff_ds, NULL, NULL, 0 }, /* ds1 */
+ { roff_unsupp, NULL, NULL, 0 }, /* dwh */
+ { roff_unsupp, NULL, NULL, 0 }, /* dt */
+ { roff_ec, NULL, NULL, 0 }, /* ec */
+ { roff_unsupp, NULL, NULL, 0 }, /* ecr */
+ { roff_unsupp, NULL, NULL, 0 }, /* ecs */
+ { roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT }, /* el */
+ { roff_unsupp, NULL, NULL, 0 }, /* em */
+ { roff_EN, NULL, NULL, 0 }, /* EN */
+ { roff_eo, NULL, NULL, 0 }, /* eo */
+ { roff_unsupp, NULL, NULL, 0 }, /* EP */
+ { roff_EQ, NULL, NULL, 0 }, /* EQ */
+ { roff_line_ignore, NULL, NULL, 0 }, /* errprint */
+ { roff_unsupp, NULL, NULL, 0 }, /* ev */
+ { roff_unsupp, NULL, NULL, 0 }, /* evc */
+ { roff_unsupp, NULL, NULL, 0 }, /* ex */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fallback */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fam */
+ { roff_unsupp, NULL, NULL, 0 }, /* fc */
+ { roff_unsupp, NULL, NULL, 0 }, /* fchar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fcolor */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fdeferlig */
+ { roff_line_ignore, NULL, NULL, 0 }, /* feature */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fkern */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fl */
+ { roff_line_ignore, NULL, NULL, 0 }, /* flig */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fp */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fps */
+ { roff_unsupp, NULL, NULL, 0 }, /* fschar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fspacewidth */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fspecial */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ftr */
+ { roff_line_ignore, NULL, NULL, 0 }, /* fzoom */
+ { roff_line_ignore, NULL, NULL, 0 }, /* gcolor */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hc */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hcode */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hidechar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hla */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hlm */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hpf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hpfa */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hpfcode */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hw */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hy */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hylang */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hylen */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hym */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hypp */
+ { roff_line_ignore, NULL, NULL, 0 }, /* hys */
+ { roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT }, /* ie */
+ { roff_cond, roff_cond_text, roff_cond_sub, ROFFMAC_STRUCT }, /* if */
+ { roff_block, roff_block_text, roff_block_sub, 0 }, /* ig */
+ { roff_unsupp, NULL, NULL, 0 }, /* index */
+ { roff_it, NULL, NULL, 0 }, /* it */
+ { roff_unsupp, NULL, NULL, 0 }, /* itc */
+ { roff_line_ignore, NULL, NULL, 0 }, /* IX */
+ { roff_line_ignore, NULL, NULL, 0 }, /* kern */
+ { roff_line_ignore, NULL, NULL, 0 }, /* kernafter */
+ { roff_line_ignore, NULL, NULL, 0 }, /* kernbefore */
+ { roff_line_ignore, NULL, NULL, 0 }, /* kernpair */
+ { roff_unsupp, NULL, NULL, 0 }, /* lc */
+ { roff_unsupp, NULL, NULL, 0 }, /* lc_ctype */
+ { roff_unsupp, NULL, NULL, 0 }, /* lds */
+ { roff_unsupp, NULL, NULL, 0 }, /* length */
+ { roff_line_ignore, NULL, NULL, 0 }, /* letadj */
+ { roff_insec, NULL, NULL, 0 }, /* lf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* lg */
+ { roff_line_ignore, NULL, NULL, 0 }, /* lhang */
+ { roff_unsupp, NULL, NULL, 0 }, /* linetabs */
+ { roff_unsupp, NULL, NULL, 0 }, /* lnr */
+ { roff_unsupp, NULL, NULL, 0 }, /* lnrf */
+ { roff_unsupp, NULL, NULL, 0 }, /* lpfx */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ls */
+ { roff_unsupp, NULL, NULL, 0 }, /* lsm */
+ { roff_line_ignore, NULL, NULL, 0 }, /* lt */
+ { roff_line_ignore, NULL, NULL, 0 }, /* mediasize */
+ { roff_line_ignore, NULL, NULL, 0 }, /* minss */
+ { roff_line_ignore, NULL, NULL, 0 }, /* mk */
+ { roff_insec, NULL, NULL, 0 }, /* mso */
+ { roff_line_ignore, NULL, NULL, 0 }, /* na */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ne */
+ { roff_line_ignore, NULL, NULL, 0 }, /* nh */
+ { roff_line_ignore, NULL, NULL, 0 }, /* nhychar */
+ { roff_unsupp, NULL, NULL, 0 }, /* nm */
+ { roff_unsupp, NULL, NULL, 0 }, /* nn */
+ { roff_unsupp, NULL, NULL, 0 }, /* nop */
+ { roff_nr, NULL, NULL, 0 }, /* nr */
+ { roff_unsupp, NULL, NULL, 0 }, /* nrf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* nroff */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ns */
+ { roff_insec, NULL, NULL, 0 }, /* nx */
+ { roff_insec, NULL, NULL, 0 }, /* open */
+ { roff_insec, NULL, NULL, 0 }, /* opena */
+ { roff_line_ignore, NULL, NULL, 0 }, /* os */
+ { roff_unsupp, NULL, NULL, 0 }, /* output */
+ { roff_line_ignore, NULL, NULL, 0 }, /* padj */
+ { roff_line_ignore, NULL, NULL, 0 }, /* papersize */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pc */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pev */
+ { roff_insec, NULL, NULL, 0 }, /* pi */
+ { roff_unsupp, NULL, NULL, 0 }, /* PI */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pl */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pm */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pn */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pnr */
+ { roff_line_ignore, NULL, NULL, 0 }, /* po */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ps */
+ { roff_unsupp, NULL, NULL, 0 }, /* psbb */
+ { roff_unsupp, NULL, NULL, 0 }, /* pshape */
+ { roff_insec, NULL, NULL, 0 }, /* pso */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ptr */
+ { roff_line_ignore, NULL, NULL, 0 }, /* pvs */
+ { roff_unsupp, NULL, NULL, 0 }, /* rchar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* rd */
+ { roff_line_ignore, NULL, NULL, 0 }, /* recursionlimit */
+ { roff_unsupp, NULL, NULL, 0 }, /* return */
+ { roff_unsupp, NULL, NULL, 0 }, /* rfschar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* rhang */
+ { roff_line_ignore, NULL, NULL, 0 }, /* rj */
+ { roff_rm, NULL, NULL, 0 }, /* rm */
+ { roff_rn, NULL, NULL, 0 }, /* rn */
+ { roff_unsupp, NULL, NULL, 0 }, /* rnn */
+ { roff_rr, NULL, NULL, 0 }, /* rr */
+ { roff_line_ignore, NULL, NULL, 0 }, /* rs */
+ { roff_line_ignore, NULL, NULL, 0 }, /* rt */
+ { roff_unsupp, NULL, NULL, 0 }, /* schar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* sentchar */
+ { roff_line_ignore, NULL, NULL, 0 }, /* shc */
+ { roff_unsupp, NULL, NULL, 0 }, /* shift */
+ { roff_line_ignore, NULL, NULL, 0 }, /* sizes */
+ { roff_so, NULL, NULL, 0 }, /* so */
+ { roff_line_ignore, NULL, NULL, 0 }, /* spacewidth */
+ { roff_line_ignore, NULL, NULL, 0 }, /* special */
+ { roff_line_ignore, NULL, NULL, 0 }, /* spreadwarn */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ss */
+ { roff_line_ignore, NULL, NULL, 0 }, /* sty */
+ { roff_unsupp, NULL, NULL, 0 }, /* substring */
+ { roff_line_ignore, NULL, NULL, 0 }, /* sv */
+ { roff_insec, NULL, NULL, 0 }, /* sy */
+ { roff_T_, NULL, NULL, 0 }, /* T& */
+ { roff_unsupp, NULL, NULL, 0 }, /* tc */
+ { roff_TE, NULL, NULL, 0 }, /* TE */
+ { roff_TH, NULL, NULL, 0 }, /* TH */
+ { roff_line_ignore, NULL, NULL, 0 }, /* tkf */
+ { roff_unsupp, NULL, NULL, 0 }, /* tl */
+ { roff_line_ignore, NULL, NULL, 0 }, /* tm */
+ { roff_line_ignore, NULL, NULL, 0 }, /* tm1 */
+ { roff_line_ignore, NULL, NULL, 0 }, /* tmc */
+ { roff_tr, NULL, NULL, 0 }, /* tr */
+ { roff_line_ignore, NULL, NULL, 0 }, /* track */
+ { roff_line_ignore, NULL, NULL, 0 }, /* transchar */
+ { roff_insec, NULL, NULL, 0 }, /* trf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* trimat */
+ { roff_unsupp, NULL, NULL, 0 }, /* trin */
+ { roff_unsupp, NULL, NULL, 0 }, /* trnt */
+ { roff_line_ignore, NULL, NULL, 0 }, /* troff */
+ { roff_TS, NULL, NULL, 0 }, /* TS */
+ { roff_line_ignore, NULL, NULL, 0 }, /* uf */
+ { roff_line_ignore, NULL, NULL, 0 }, /* ul */
+ { roff_unsupp, NULL, NULL, 0 }, /* unformat */
+ { roff_line_ignore, NULL, NULL, 0 }, /* unwatch */
+ { roff_line_ignore, NULL, NULL, 0 }, /* unwatchn */
+ { roff_line_ignore, NULL, NULL, 0 }, /* vpt */
+ { roff_line_ignore, NULL, NULL, 0 }, /* vs */
+ { roff_line_ignore, NULL, NULL, 0 }, /* warn */
+ { roff_line_ignore, NULL, NULL, 0 }, /* warnscale */
+ { roff_line_ignore, NULL, NULL, 0 }, /* watch */
+ { roff_line_ignore, NULL, NULL, 0 }, /* watchlength */
+ { roff_line_ignore, NULL, NULL, 0 }, /* watchn */
+ { roff_unsupp, NULL, NULL, 0 }, /* wh */
+ { roff_unsupp, NULL, NULL, 0 }, /* while */
+ { roff_insec, NULL, NULL, 0 }, /* write */
+ { roff_insec, NULL, NULL, 0 }, /* writec */
+ { roff_insec, NULL, NULL, 0 }, /* writem */
+ { roff_line_ignore, NULL, NULL, 0 }, /* xflag */
+ { roff_cblock, NULL, NULL, 0 }, /* . */
+ { roff_renamed, NULL, NULL, 0 },
+ { roff_userdef, NULL, NULL, 0 }
};
/* not currently implemented: Ds em Eq LP Me PP pp Or Rd Sf SH */
@@ -733,65 +612,66 @@ static const struct predef predefs[PREDEFS_MAX] = {
#include "predefs.in"
};
-/* See roffhash_find() */
-#define ROFF_HASH(p) (p[0] - ASCII_LO)
-
+static int roffce_lines; /* number of input lines to center */
+static struct roff_node *roffce_node; /* active request */
static int roffit_lines; /* number of lines to delay */
static char *roffit_macro; /* nil-terminated macro line */
/* --- request table ------------------------------------------------------ */
-static void
-roffhash_init(void)
+struct ohash *
+roffhash_alloc(enum roff_tok mintok, enum roff_tok maxtok)
{
- struct roffmac *n;
- int buc, i;
-
- for (i = 0; i < (int)ROFF_USERDEF; i++) {
- assert(roffs[i].name[0] >= ASCII_LO);
- assert(roffs[i].name[0] <= ASCII_HI);
+ struct ohash *htab;
+ struct roffreq *req;
+ enum roff_tok tok;
+ size_t sz;
+ unsigned int slot;
- buc = ROFF_HASH(roffs[i].name);
+ htab = mandoc_malloc(sizeof(*htab));
+ mandoc_ohash_init(htab, 8, offsetof(struct roffreq, name));
- if (NULL != (n = hash[buc])) {
- for ( ; n->next; n = n->next)
- /* Do nothing. */ ;
- n->next = &roffs[i];
- } else
- hash[buc] = &roffs[i];
+ for (tok = mintok; tok < maxtok; tok++) {
+ if (roff_name[tok] == NULL)
+ continue;
+ sz = strlen(roff_name[tok]);
+ req = mandoc_malloc(sizeof(*req) + sz + 1);
+ req->tok = tok;
+ memcpy(req->name, roff_name[tok], sz + 1);
+ slot = ohash_qlookup(htab, req->name);
+ ohash_insert(htab, slot, req);
}
+ return htab;
}
-/*
- * Look up a roff token by its name. Returns ROFF_MAX if no macro by
- * the nil-terminated string name could be found.
- */
-static enum rofft
-roffhash_find(const char *p, size_t s)
+void
+roffhash_free(struct ohash *htab)
{
- int buc;
- struct roffmac *n;
-
- /*
- * libroff has an extremely simple hashtable, for the time
- * being, which simply keys on the first character, which must
- * be printable, then walks a chain. It works well enough until
- * optimised.
- */
-
- if (p[0] < ASCII_LO || p[0] > ASCII_HI)
- return ROFF_MAX;
+ struct roffreq *req;
+ unsigned int slot;
- buc = ROFF_HASH(p);
+ if (htab == NULL)
+ return;
+ for (req = ohash_first(htab, &slot); req != NULL;
+ req = ohash_next(htab, &slot))
+ free(req);
+ ohash_delete(htab);
+ free(htab);
+}
- if (NULL == (n = hash[buc]))
- return ROFF_MAX;
- for ( ; n; n = n->next)
- if (0 == strncmp(n->name, p, s) && '\0' == n->name[(int)s])
- return (enum rofft)(n - roffs);
+enum roff_tok
+roffhash_find(struct ohash *htab, const char *name, size_t sz)
+{
+ struct roffreq *req;
+ const char *end;
- return ROFF_MAX;
+ if (sz) {
+ end = name + sz;
+ req = ohash_find(htab, ohash_qlookupi(htab, name, &end));
+ } else
+ req = ohash_find(htab, ohash_qlookup(htab, name));
+ return req == NULL ? TOKEN_NONE : req->tok;
}
/* --- stack of request blocks -------------------------------------------- */
@@ -819,7 +699,7 @@ roffnode_pop(struct roff *r)
* removed with roffnode_pop().
*/
static void
-roffnode_push(struct roff *r, enum rofft tok, const char *name,
+roffnode_push(struct roff *r, enum roff_tok tok, const char *name,
int line, int col)
{
struct roffnode *p;
@@ -869,8 +749,9 @@ roff_free1(struct roff *r)
r->regtab = NULL;
roff_freestr(r->strtab);
+ roff_freestr(r->rentab);
roff_freestr(r->xmbtab);
- r->strtab = r->xmbtab = NULL;
+ r->strtab = r->rentab = r->xmbtab = NULL;
if (r->xtab)
for (i = 0; i < 128; i++)
@@ -882,17 +763,17 @@ roff_free1(struct roff *r)
void
roff_reset(struct roff *r)
{
-
roff_free1(r);
r->format = r->options & (MPARSE_MDOC | MPARSE_MAN);
- r->control = 0;
+ r->control = '\0';
+ r->escape = '\\';
}
void
roff_free(struct roff *r)
{
-
roff_free1(r);
+ roffhash_free(r->reqtab);
free(r);
}
@@ -903,12 +784,11 @@ roff_alloc(struct mparse *parse, int options)
r = mandoc_calloc(1, sizeof(struct roff));
r->parse = parse;
+ r->reqtab = roffhash_alloc(0, ROFF_USERDEF);
r->options = options;
r->format = options & (MPARSE_MDOC | MPARSE_MAN);
r->rstackpos = -1;
-
- roffhash_init();
-
+ r->escape = '\\';
return r;
}
@@ -972,6 +852,7 @@ roff_man_alloc(struct roff *roff, struct mparse *parse,
man->defos = defos;
man->quick = quick;
roff_man_alloc1(man);
+ roff->man = man;
return man;
}
@@ -1144,7 +1025,7 @@ roff_addtbl(struct roff_man *man, const struct tbl_span *tbl)
struct roff_node *n;
if (man->macroset == MACROSET_MAN)
- man_breakscope(man, TOKEN_NONE);
+ man_breakscope(man, ROFF_TS);
n = roff_node_alloc(man, tbl->line, 0, ROFFT_TBL, TOKEN_NONE);
n->span = tbl;
roff_node_append(man, n);
@@ -1236,7 +1117,7 @@ deroff(char **dest, const struct roff_node *n)
/* Skip trailing backslash. */
sz = strlen(cp);
- if (cp[sz - 1] == '\\')
+ if (sz > 0 && cp[sz - 1] == '\\')
sz--;
/* Skip trailing whitespace. */
@@ -1284,27 +1165,80 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
int expand_count; /* to avoid infinite loops */
int npos; /* position in numeric expression */
int arg_complete; /* argument not interrupted by eol */
+ int done; /* no more input available */
char term; /* character terminating the escape */
- expand_count = 0;
+ /* Search forward for comments. */
+
+ done = 0;
start = buf->buf + pos;
- stesc = strchr(start, '\0') - 1;
- while (stesc-- > start) {
+ for (stesc = buf->buf + pos; *stesc != '\0'; stesc++) {
+ if (stesc[0] != r->escape || stesc[1] == '\0')
+ continue;
+ stesc++;
+ if (*stesc != '"' && *stesc != '#')
+ continue;
+ cp = strchr(stesc--, '\0') - 1;
+ if (*cp == '\n') {
+ done = 1;
+ cp--;
+ }
+ if (*cp == ' ' || *cp == '\t')
+ mandoc_msg(MANDOCERR_SPACE_EOL, r->parse,
+ ln, cp - buf->buf, NULL);
+ while (stesc > start && stesc[-1] == ' ')
+ stesc--;
+ *stesc = '\0';
+ break;
+ }
+ if (stesc == start)
+ return ROFF_CONT;
+ stesc--;
+
+ /* Notice the end of the input. */
+
+ if (*stesc == '\n') {
+ *stesc-- = '\0';
+ done = 1;
+ }
+
+ expand_count = 0;
+ while (stesc >= start) {
/* Search backwards for the next backslash. */
- if (*stesc != '\\')
+ if (*stesc != r->escape) {
+ if (*stesc == '\\') {
+ *stesc = '\0';
+ buf->sz = mandoc_asprintf(&nbuf, "%s\\e%s",
+ buf->buf, stesc + 1) + 1;
+ start = nbuf + pos;
+ stesc = nbuf + (stesc - buf->buf);
+ free(buf->buf);
+ buf->buf = nbuf;
+ }
+ stesc--;
continue;
+ }
/* If it is escaped, skip it. */
for (cp = stesc - 1; cp >= start; cp--)
- if (*cp != '\\')
+ if (*cp != r->escape)
break;
if ((stesc - cp) % 2 == 0) {
- stesc = (char *)cp;
+ while (stesc > cp)
+ *stesc-- = '\\';
continue;
+ } else if (stesc[1] != '\0') {
+ *stesc = '\\';
+ } else {
+ *stesc-- = '\0';
+ if (done)
+ continue;
+ else
+ return ROFF_APPEND;
}
/* Decide whether to expand or to check only. */
@@ -1330,6 +1264,7 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
mandoc_vmsg(MANDOCERR_ESC_BAD,
r->parse, ln, (int)(stesc - buf->buf),
"%.*s", (int)(cp - stesc), stesc);
+ stesc--;
continue;
}
@@ -1463,7 +1398,7 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
* Process text streams.
*/
static enum rofferr
-roff_parsetext(struct buf *buf, int pos, int *offs)
+roff_parsetext(struct roff *r, struct buf *buf, int pos, int *offs)
{
size_t sz;
const char *start;
@@ -1485,6 +1420,16 @@ roff_parsetext(struct buf *buf, int pos, int *offs)
} else if (roffit_lines > 1)
--roffit_lines;
+ if (roffce_node != NULL && buf->buf[pos] != '\0') {
+ if (roffce_lines < 1) {
+ r->man->last = roffce_node;
+ r->man->next = ROFF_NEXT_SIBLING;
+ roffce_lines = 0;
+ roffce_node = NULL;
+ } else
+ roffce_lines--;
+ }
+
/* Convert all breakable hyphens into ASCII_HYPH. */
start = p = buf->buf + pos;
@@ -1521,7 +1466,7 @@ roff_parsetext(struct buf *buf, int pos, int *offs)
enum rofferr
roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
{
- enum rofft t;
+ enum roff_tok t;
enum rofferr e;
int pos; /* parse point */
int spos; /* saved parse point for messages */
@@ -1544,7 +1489,7 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
/* Expand some escape sequences. */
e = roff_res(r, buf, ln, pos);
- if (e == ROFF_IGN)
+ if (e == ROFF_IGN || e == ROFF_APPEND)
return e;
assert(e == ROFF_CONT);
@@ -1560,18 +1505,17 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
if (r->last != NULL && ! ctl) {
t = r->last->tok;
- assert(roffs[t].text);
e = (*roffs[t].text)(r, t, buf, ln, pos, pos, offs);
- assert(e == ROFF_IGN || e == ROFF_CONT);
- if (e != ROFF_CONT)
+ if (e == ROFF_IGN)
return e;
+ assert(e == ROFF_CONT);
}
if (r->eqn != NULL)
return eqn_read(&r->eqn, ln, buf->buf, ppos, offs);
if (r->tbl != NULL && ( ! ctl || buf->buf[pos] == '\0'))
return tbl_read(r->tbl, ln, buf->buf, ppos);
if ( ! ctl)
- return roff_parsetext(buf, pos, offs);
+ return roff_parsetext(r, buf, pos, offs);
/* Skip empty request lines. */
@@ -1590,7 +1534,6 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
if (r->last) {
t = r->last->tok;
- assert(roffs[t].sub);
return (*roffs[t].sub)(r, t, buf, ln, ppos, pos, offs);
}
@@ -1601,30 +1544,39 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
/* Tables ignore most macros. */
- if (r->tbl != NULL && (t == ROFF_MAX || t == ROFF_TS)) {
+ if (r->tbl != NULL && (t == TOKEN_NONE || t == ROFF_TS)) {
mandoc_msg(MANDOCERR_TBLMACRO, r->parse,
ln, pos, buf->buf + spos);
if (t == ROFF_TS)
return ROFF_IGN;
while (buf->buf[pos] != '\0' && buf->buf[pos] != ' ')
pos++;
- while (buf->buf[pos] != '\0' && buf->buf[pos] == ' ')
+ while (buf->buf[pos] == ' ')
pos++;
return tbl_read(r->tbl, ln, buf->buf, pos);
}
+ /* For now, let high level macros abort .ce mode. */
+
+ if (ctl && roffce_node != NULL &&
+ (t == TOKEN_NONE || t == ROFF_EQ || t == ROFF_TS)) {
+ r->man->last = roffce_node;
+ r->man->next = ROFF_NEXT_SIBLING;
+ roffce_lines = 0;
+ roffce_node = NULL;
+ }
+
/*
* This is neither a roff request nor a user-defined macro.
* Let the standard macro set parsers handle it.
*/
- if (t == ROFF_MAX)
+ if (t == TOKEN_NONE)
return ROFF_CONT;
/* Execute a roff request or a user defined macro. */
- assert(roffs[t].proc);
- return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs);
+ return (*roffs[t].proc)(r, t, buf, ln, spos, pos, offs);
}
void
@@ -1634,7 +1586,7 @@ roff_endparse(struct roff *r)
if (r->last)
mandoc_msg(MANDOCERR_BLK_NOEND, r->parse,
r->last->line, r->last->col,
- roffs[r->last->tok].name);
+ roff_name[r->last->tok]);
if (r->eqn) {
mandoc_msg(MANDOCERR_BLK_NOEND, r->parse,
@@ -1653,26 +1605,28 @@ roff_endparse(struct roff *r)
* Parse a roff node's type from the input buffer. This must be in the
* form of ".foo xxx" in the usual way.
*/
-static enum rofft
+static enum roff_tok
roff_parse(struct roff *r, char *buf, int *pos, int ln, int ppos)
{
char *cp;
const char *mac;
size_t maclen;
- enum rofft t;
+ enum roff_tok t;
cp = buf + *pos;
if ('\0' == *cp || '"' == *cp || '\t' == *cp || ' ' == *cp)
- return ROFF_MAX;
+ return TOKEN_NONE;
mac = cp;
maclen = roff_getname(r, &cp, ln, ppos);
- t = (r->current_string = roff_getstrn(r, mac, maclen))
- ? ROFF_USERDEF : roffhash_find(mac, maclen);
+ t = (r->current_string = roff_getstrn(r, mac, maclen)) ?
+ ROFF_USERDEF :
+ (r->current_string = roff_getrenn(r, mac, maclen)) ?
+ ROFF_RENAMED : roffhash_find(r->reqtab, mac, maclen);
- if (ROFF_MAX != t)
+ if (t != TOKEN_NONE)
*pos = cp - buf;
return t;
@@ -1808,7 +1762,7 @@ roff_block(ROFF_ARGS)
if (namesz == 0 && tok != ROFF_ig) {
mandoc_msg(MANDOCERR_REQ_EMPTY, r->parse,
- ln, ppos, roffs[tok].name);
+ ln, ppos, roff_name[tok]);
return ROFF_IGN;
}
@@ -1849,7 +1803,7 @@ roff_block(ROFF_ARGS)
if (*cp != '\0')
mandoc_vmsg(MANDOCERR_ARG_EXCESS, r->parse,
- ln, pos, ".%s ... %s", roffs[tok].name, cp);
+ ln, pos, ".%s ... %s", roff_name[tok], cp);
return ROFF_IGN;
}
@@ -1857,7 +1811,7 @@ roff_block(ROFF_ARGS)
static enum rofferr
roff_block_sub(ROFF_ARGS)
{
- enum rofft t;
+ enum roff_tok t;
int i, j;
/*
@@ -1886,7 +1840,7 @@ roff_block_sub(ROFF_ARGS)
pos = i;
if (roff_parse(r, buf->buf, &pos, ln, ppos) !=
- ROFF_MAX)
+ TOKEN_NONE)
return ROFF_RERUN;
return ROFF_IGN;
}
@@ -1905,7 +1859,6 @@ roff_block_sub(ROFF_ARGS)
return ROFF_IGN;
}
- assert(roffs[t].proc);
return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs);
}
@@ -1922,7 +1875,7 @@ roff_block_text(ROFF_ARGS)
static enum rofferr
roff_cond_sub(ROFF_ARGS)
{
- enum rofft t;
+ enum roff_tok t;
char *ep;
int rr;
@@ -1935,11 +1888,8 @@ roff_cond_sub(ROFF_ARGS)
* required or when the conditional evaluated to true.
*/
- if ((t != ROFF_MAX) &&
- (rr || roffs[t].flags & ROFFMAC_STRUCT)) {
- assert(roffs[t].proc);
+ if (t != TOKEN_NONE && (rr || roffs[t].flags & ROFFMAC_STRUCT))
return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs);
- }
/*
* If `\}' occurs on a macro line without a preceding macro,
@@ -2162,7 +2112,7 @@ roff_insec(ROFF_ARGS)
{
mandoc_msg(MANDOCERR_REQ_INSEC, r->parse,
- ln, ppos, roffs[tok].name);
+ ln, ppos, roff_name[tok]);
return ROFF_IGN;
}
@@ -2171,7 +2121,7 @@ roff_unsupp(ROFF_ARGS)
{
mandoc_msg(MANDOCERR_REQ_UNSUPP, r->parse,
- ln, ppos, roffs[tok].name);
+ ln, ppos, roff_name[tok]);
return ROFF_IGN;
}
@@ -2244,7 +2194,7 @@ roff_cond(ROFF_ARGS)
if (buf->buf[pos] == '\0')
mandoc_msg(MANDOCERR_COND_EMPTY, r->parse,
- ln, ppos, roffs[tok].name);
+ ln, ppos, roff_name[tok]);
r->last->endspan = 1;
@@ -2788,7 +2738,7 @@ roff_T_(ROFF_ARGS)
mandoc_msg(MANDOCERR_BLK_NOTOPEN, r->parse,
ln, ppos, "T&");
else
- tbl_restart(ppos, ln, r->tbl);
+ tbl_restart(ln, ppos, r->tbl);
return ROFF_IGN;
}
@@ -2915,11 +2865,99 @@ roff_TS(ROFF_ARGS)
}
static enum rofferr
-roff_brp(ROFF_ARGS)
+roff_onearg(ROFF_ARGS)
{
+ struct roff_node *n;
+ char *cp;
+ int npos;
- buf->buf[pos - 1] = '\0';
- return ROFF_CONT;
+ if (r->man->flags & (MAN_BLINE | MAN_ELINE) &&
+ (tok == ROFF_sp || tok == ROFF_ti))
+ man_breakscope(r->man, tok);
+
+ if (tok == ROFF_ce && roffce_node != NULL) {
+ r->man->last = roffce_node;
+ r->man->next = ROFF_NEXT_SIBLING;
+ }
+
+ roff_elem_alloc(r->man, ln, ppos, tok);
+ n = r->man->last;
+
+ cp = buf->buf + pos;
+ if (*cp != '\0') {
+ while (*cp != '\0' && *cp != ' ')
+ cp++;
+ while (*cp == ' ')
+ *cp++ = '\0';
+ if (*cp != '\0')
+ mandoc_vmsg(MANDOCERR_ARG_EXCESS,
+ r->parse, ln, cp - buf->buf,
+ "%s ... %s", roff_name[tok], cp);
+ roff_word_alloc(r->man, ln, pos, buf->buf + pos);
+ }
+
+ if (tok == ROFF_ce) {
+ if (r->man->last->tok == ROFF_ce) {
+ roff_word_alloc(r->man, ln, pos, "1");
+ r->man->last->flags |= NODE_NOSRC;
+ }
+ npos = 0;
+ if (roff_evalnum(r, ln, r->man->last->string, &npos,
+ &roffce_lines, 0) == 0) {
+ mandoc_vmsg(MANDOCERR_CE_NONUM,
+ r->parse, ln, pos, "ce %s", buf->buf + pos);
+ roffce_lines = 1;
+ }
+ if (roffce_lines < 1) {
+ r->man->last = r->man->last->parent;
+ roffce_node = NULL;
+ roffce_lines = 0;
+ } else
+ roffce_node = r->man->last->parent;
+ } else {
+ n->flags |= NODE_VALID | NODE_ENDED;
+ r->man->last = n;
+ }
+ n->flags |= NODE_LINE;
+ r->man->next = ROFF_NEXT_SIBLING;
+ return ROFF_IGN;
+}
+
+static enum rofferr
+roff_manyarg(ROFF_ARGS)
+{
+ struct roff_node *n;
+ char *sp, *ep;
+
+ roff_elem_alloc(r->man, ln, ppos, tok);
+ n = r->man->last;
+
+ for (sp = ep = buf->buf + pos; *sp != '\0'; sp = ep) {
+ while (*ep != '\0' && *ep != ' ')
+ ep++;
+ while (*ep == ' ')
+ *ep++ = '\0';
+ roff_word_alloc(r->man, ln, sp - buf->buf, sp);
+ }
+
+ n->flags |= NODE_LINE | NODE_VALID | NODE_ENDED;
+ r->man->last = n;
+ r->man->next = ROFF_NEXT_SIBLING;
+ return ROFF_IGN;
+}
+
+static enum rofferr
+roff_br(ROFF_ARGS)
+{
+ if (r->man->flags & (MAN_BLINE | MAN_ELINE))
+ man_breakscope(r->man, ROFF_br);
+ roff_elem_alloc(r->man, ln, ppos, ROFF_br);
+ if (buf->buf[pos] != '\0')
+ mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse, ln, pos,
+ "%s %s", roff_name[tok], buf->buf + pos);
+ r->man->last->flags |= NODE_LINE | NODE_VALID | NODE_ENDED;
+ r->man->next = ROFF_NEXT_SIBLING;
+ return ROFF_IGN;
}
static enum rofferr
@@ -2930,7 +2968,7 @@ roff_cc(ROFF_ARGS)
p = buf->buf + pos;
if (*p == '\0' || (r->control = *p++) == '.')
- r->control = 0;
+ r->control = '\0';
if (*p != '\0')
mandoc_vmsg(MANDOCERR_ARG_EXCESS, r->parse,
@@ -2940,6 +2978,33 @@ roff_cc(ROFF_ARGS)
}
static enum rofferr
+roff_ec(ROFF_ARGS)
+{
+ const char *p;
+
+ p = buf->buf + pos;
+ if (*p == '\0')
+ r->escape = '\\';
+ else {
+ r->escape = *p;
+ if (*++p != '\0')
+ mandoc_vmsg(MANDOCERR_ARG_EXCESS, r->parse,
+ ln, p - buf->buf, "ec ... %s", p);
+ }
+ return ROFF_IGN;
+}
+
+static enum rofferr
+roff_eo(ROFF_ARGS)
+{
+ r->escape = '\0';
+ if (buf->buf[pos] != '\0')
+ mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse,
+ ln, pos, "eo %s", buf->buf + pos);
+ return ROFF_IGN;
+}
+
+static enum rofferr
roff_tr(ROFF_ARGS)
{
const char *p, *first, *second;
@@ -3002,6 +3067,56 @@ roff_tr(ROFF_ARGS)
}
static enum rofferr
+roff_rn(ROFF_ARGS)
+{
+ const char *value;
+ char *oldn, *newn, *end;
+ size_t oldsz, newsz;
+
+ oldn = newn = buf->buf + pos;
+ if (*oldn == '\0')
+ return ROFF_IGN;
+
+ oldsz = roff_getname(r, &newn, ln, pos);
+ if (oldn[oldsz] == '\\' || *newn == '\0')
+ return ROFF_IGN;
+
+ end = newn;
+ newsz = roff_getname(r, &end, ln, newn - buf->buf);
+ if (newsz == 0)
+ return ROFF_IGN;
+
+ /*
+ * Rename a user-defined macro bearing the old name,
+ * overriding an existing renamed high-level macro
+ * bearing the new name, if that exists.
+ */
+
+ if ((value = roff_getstrn(r, oldn, oldsz)) != NULL) {
+ roff_setstrn(&r->strtab, newn, newsz, value, strlen(value), 0);
+ roff_setstrn(&r->strtab, oldn, oldsz, NULL, 0, 0);
+ roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0);
+ return ROFF_IGN;
+ }
+
+ /*
+ * Rename a high-level macro bearing the old name,
+ * either renaming it a second time if it was already
+ * renamed before, or renaming it for the first time.
+ * In both cases, override an existing user-defined
+ * macro bearing the new name, if that exists.
+ */
+
+ if ((value = roff_getrenn(r, oldn, oldsz)) != NULL) {
+ roff_setstrn(&r->rentab, newn, newsz, value, strlen(value), 0);
+ roff_setstrn(&r->rentab, oldn, oldsz, NULL, 0, 0);
+ } else
+ roff_setstrn(&r->rentab, newn, newsz, oldn, oldsz, 0);
+ roff_setstrn(&r->strtab, newn, newsz, NULL, 0, 0);
+ return ROFF_IGN;
+}
+
+static enum rofferr
roff_so(ROFF_ARGS)
{
char *name, *cp;
@@ -3038,7 +3153,7 @@ roff_userdef(ROFF_ARGS)
{
const char *arg[9], *ap;
char *cp, *n1, *n2;
- int i, ib, ie;
+ int expand_count, i, ib, ie;
size_t asz, rsz;
/*
@@ -3062,8 +3177,9 @@ roff_userdef(ROFF_ARGS)
*/
buf->sz = strlen(r->current_string) + 1;
- n1 = cp = mandoc_malloc(buf->sz);
+ n1 = n2 = cp = mandoc_malloc(buf->sz);
memcpy(n1, r->current_string, buf->sz);
+ expand_count = 0;
while (*cp != '\0') {
/* Scan ahead for the next argument invocation. */
@@ -3083,6 +3199,20 @@ roff_userdef(ROFF_ARGS)
cp -= 2;
/*
+ * Prevent infinite recursion.
+ */
+
+ if (cp >= n2)
+ expand_count = 1;
+ else if (++expand_count > EXPAND_LIMIT) {
+ mandoc_msg(MANDOCERR_ROFFLOOP, r->parse,
+ ln, (int)(cp - n1), NULL);
+ free(buf->buf);
+ buf->buf = n1;
+ return ROFF_IGN;
+ }
+
+ /*
* Determine the size of the expanded argument,
* taking escaping of quotes into account.
*/
@@ -3160,6 +3290,22 @@ roff_userdef(ROFF_ARGS)
ROFF_REPARSE : ROFF_APPEND;
}
+/*
+ * Calling a high-level macro that was renamed with .rn.
+ * r->current_string has already been set up by roff_parse().
+ */
+static enum rofferr
+roff_renamed(ROFF_ARGS)
+{
+ char *nbuf;
+
+ buf->sz = mandoc_asprintf(&nbuf, ".%s %s", r->current_string,
+ buf->buf + pos) + 1;
+ free(buf->buf);
+ buf->buf = nbuf;
+ return ROFF_CONT;
+}
+
static size_t
roff_getname(struct roff *r, char **cpp, int ln, int pos)
{
@@ -3305,6 +3451,23 @@ roff_getstrn(const struct roff *r, const char *name, size_t len)
return NULL;
}
+/*
+ * Check whether *name is the renamed name of a high-level macro.
+ * Return the standard name, or NULL if it is not.
+ */
+static const char *
+roff_getrenn(const struct roff *r, const char *name, size_t len)
+{
+ const struct roffkv *n;
+
+ for (n = r->rentab; n; n = n->next)
+ if (0 == strncmp(name, n->key.p, len) &&
+ '\0' == n->key.p[(int)len])
+ return n->val.p;
+
+ return NULL;
+}
+
static void
roff_freestr(struct roffkv *r)
{
@@ -3451,9 +3614,9 @@ roff_getcontrol(const struct roff *r, const char *cp, int *ppos)
pos = *ppos;
- if (0 != r->control && cp[pos] == r->control)
+ if (r->control != '\0' && cp[pos] == r->control)
pos++;
- else if (0 != r->control)
+ else if (r->control != '\0')
return 0;
else if ('\\' == cp[pos] && '.' == cp[pos + 1])
pos += 2;
diff --git a/contrib/mdocml/roff.h b/contrib/mdocml/roff.h
index b87cf132b726..bf5c4c17e3fc 100644
--- a/contrib/mdocml/roff.h
+++ b/contrib/mdocml/roff.h
@@ -1,4 +1,4 @@
-/* $Id: roff.h,v 1.40 2017/02/16 03:00:23 schwarze Exp $ */
+/* $Id: roff.h,v 1.52 2017/06/07 23:29:49 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -16,6 +16,7 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+struct ohash;
struct mdoc_arg;
union mdoc_data;
@@ -25,6 +26,12 @@ enum roff_macroset {
MACROSET_MAN
};
+enum mdoc_os {
+ MDOC_OS_OTHER = 0,
+ MDOC_OS_NETBSD,
+ MDOC_OS_OPENBSD
+};
+
enum roff_sec {
SEC_NONE = 0,
SEC_NAME,
@@ -64,6 +71,411 @@ enum roff_type {
ROFFT_EQN
};
+enum roff_tok {
+ ROFF_br = 0,
+ ROFF_ce,
+ ROFF_ft,
+ ROFF_ll,
+ ROFF_mc,
+ ROFF_sp,
+ ROFF_ta,
+ ROFF_ti,
+ ROFF_MAX,
+ ROFF_ab,
+ ROFF_ad,
+ ROFF_af,
+ ROFF_aln,
+ ROFF_als,
+ ROFF_am,
+ ROFF_am1,
+ ROFF_ami,
+ ROFF_ami1,
+ ROFF_as,
+ ROFF_as1,
+ ROFF_asciify,
+ ROFF_backtrace,
+ ROFF_bd,
+ ROFF_bleedat,
+ ROFF_blm,
+ ROFF_box,
+ ROFF_boxa,
+ ROFF_bp,
+ ROFF_BP,
+ ROFF_break,
+ ROFF_breakchar,
+ ROFF_brnl,
+ ROFF_brp,
+ ROFF_brpnl,
+ ROFF_c2,
+ ROFF_cc,
+ ROFF_cf,
+ ROFF_cflags,
+ ROFF_ch,
+ ROFF_char,
+ ROFF_chop,
+ ROFF_class,
+ ROFF_close,
+ ROFF_CL,
+ ROFF_color,
+ ROFF_composite,
+ ROFF_continue,
+ ROFF_cp,
+ ROFF_cropat,
+ ROFF_cs,
+ ROFF_cu,
+ ROFF_da,
+ ROFF_dch,
+ ROFF_Dd,
+ ROFF_de,
+ ROFF_de1,
+ ROFF_defcolor,
+ ROFF_dei,
+ ROFF_dei1,
+ ROFF_device,
+ ROFF_devicem,
+ ROFF_di,
+ ROFF_do,
+ ROFF_ds,
+ ROFF_ds1,
+ ROFF_dwh,
+ ROFF_dt,
+ ROFF_ec,
+ ROFF_ecr,
+ ROFF_ecs,
+ ROFF_el,
+ ROFF_em,
+ ROFF_EN,
+ ROFF_eo,
+ ROFF_EP,
+ ROFF_EQ,
+ ROFF_errprint,
+ ROFF_ev,
+ ROFF_evc,
+ ROFF_ex,
+ ROFF_fallback,
+ ROFF_fam,
+ ROFF_fc,
+ ROFF_fchar,
+ ROFF_fcolor,
+ ROFF_fdeferlig,
+ ROFF_feature,
+ /* MAN_fi; ignored in mdoc(7) */
+ ROFF_fkern,
+ ROFF_fl,
+ ROFF_flig,
+ ROFF_fp,
+ ROFF_fps,
+ ROFF_fschar,
+ ROFF_fspacewidth,
+ ROFF_fspecial,
+ ROFF_ftr,
+ ROFF_fzoom,
+ ROFF_gcolor,
+ ROFF_hc,
+ ROFF_hcode,
+ ROFF_hidechar,
+ ROFF_hla,
+ ROFF_hlm,
+ ROFF_hpf,
+ ROFF_hpfa,
+ ROFF_hpfcode,
+ ROFF_hw,
+ ROFF_hy,
+ ROFF_hylang,
+ ROFF_hylen,
+ ROFF_hym,
+ ROFF_hypp,
+ ROFF_hys,
+ ROFF_ie,
+ ROFF_if,
+ ROFF_ig,
+ /* MAN_in; ignored in mdoc(7) */
+ ROFF_index,
+ ROFF_it,
+ ROFF_itc,
+ ROFF_IX,
+ ROFF_kern,
+ ROFF_kernafter,
+ ROFF_kernbefore,
+ ROFF_kernpair,
+ ROFF_lc,
+ ROFF_lc_ctype,
+ ROFF_lds,
+ ROFF_length,
+ ROFF_letadj,
+ ROFF_lf,
+ ROFF_lg,
+ ROFF_lhang,
+ ROFF_linetabs,
+ ROFF_lnr,
+ ROFF_lnrf,
+ ROFF_lpfx,
+ ROFF_ls,
+ ROFF_lsm,
+ ROFF_lt,
+ ROFF_mediasize,
+ ROFF_minss,
+ ROFF_mk,
+ ROFF_mso,
+ ROFF_na,
+ ROFF_ne,
+ /* MAN_nf; ignored in mdoc(7) */
+ ROFF_nh,
+ ROFF_nhychar,
+ ROFF_nm,
+ ROFF_nn,
+ ROFF_nop,
+ ROFF_nr,
+ ROFF_nrf,
+ ROFF_nroff,
+ ROFF_ns,
+ ROFF_nx,
+ ROFF_open,
+ ROFF_opena,
+ ROFF_os,
+ ROFF_output,
+ ROFF_padj,
+ ROFF_papersize,
+ ROFF_pc,
+ ROFF_pev,
+ ROFF_pi,
+ ROFF_PI,
+ ROFF_pl,
+ ROFF_pm,
+ ROFF_pn,
+ ROFF_pnr,
+ ROFF_po,
+ ROFF_ps,
+ ROFF_psbb,
+ ROFF_pshape,
+ ROFF_pso,
+ ROFF_ptr,
+ ROFF_pvs,
+ ROFF_rchar,
+ ROFF_rd,
+ ROFF_recursionlimit,
+ ROFF_return,
+ ROFF_rfschar,
+ ROFF_rhang,
+ ROFF_rj,
+ ROFF_rm,
+ ROFF_rn,
+ ROFF_rnn,
+ ROFF_rr,
+ ROFF_rs,
+ ROFF_rt,
+ ROFF_schar,
+ ROFF_sentchar,
+ ROFF_shc,
+ ROFF_shift,
+ ROFF_sizes,
+ ROFF_so,
+ ROFF_spacewidth,
+ ROFF_special,
+ ROFF_spreadwarn,
+ ROFF_ss,
+ ROFF_sty,
+ ROFF_substring,
+ ROFF_sv,
+ ROFF_sy,
+ ROFF_T_,
+ ROFF_tc,
+ ROFF_TE,
+ ROFF_TH,
+ ROFF_tkf,
+ ROFF_tl,
+ ROFF_tm,
+ ROFF_tm1,
+ ROFF_tmc,
+ ROFF_tr,
+ ROFF_track,
+ ROFF_transchar,
+ ROFF_trf,
+ ROFF_trimat,
+ ROFF_trin,
+ ROFF_trnt,
+ ROFF_troff,
+ ROFF_TS,
+ ROFF_uf,
+ ROFF_ul,
+ ROFF_unformat,
+ ROFF_unwatch,
+ ROFF_unwatchn,
+ ROFF_vpt,
+ ROFF_vs,
+ ROFF_warn,
+ ROFF_warnscale,
+ ROFF_watch,
+ ROFF_watchlength,
+ ROFF_watchn,
+ ROFF_wh,
+ ROFF_while,
+ ROFF_write,
+ ROFF_writec,
+ ROFF_writem,
+ ROFF_xflag,
+ ROFF_cblock,
+ ROFF_RENAMED,
+ ROFF_USERDEF,
+ TOKEN_NONE,
+ MDOC_Dd,
+ MDOC_Dt,
+ MDOC_Os,
+ MDOC_Sh,
+ MDOC_Ss,
+ MDOC_Pp,
+ MDOC_D1,
+ MDOC_Dl,
+ MDOC_Bd,
+ MDOC_Ed,
+ MDOC_Bl,
+ MDOC_El,
+ MDOC_It,
+ MDOC_Ad,
+ MDOC_An,
+ MDOC_Ap,
+ MDOC_Ar,
+ MDOC_Cd,
+ MDOC_Cm,
+ MDOC_Dv,
+ MDOC_Er,
+ MDOC_Ev,
+ MDOC_Ex,
+ MDOC_Fa,
+ MDOC_Fd,
+ MDOC_Fl,
+ MDOC_Fn,
+ MDOC_Ft,
+ MDOC_Ic,
+ MDOC_In,
+ MDOC_Li,
+ MDOC_Nd,
+ MDOC_Nm,
+ MDOC_Op,
+ MDOC_Ot,
+ MDOC_Pa,
+ MDOC_Rv,
+ MDOC_St,
+ MDOC_Va,
+ MDOC_Vt,
+ MDOC_Xr,
+ MDOC__A,
+ MDOC__B,
+ MDOC__D,
+ MDOC__I,
+ MDOC__J,
+ MDOC__N,
+ MDOC__O,
+ MDOC__P,
+ MDOC__R,
+ MDOC__T,
+ MDOC__V,
+ MDOC_Ac,
+ MDOC_Ao,
+ MDOC_Aq,
+ MDOC_At,
+ MDOC_Bc,
+ MDOC_Bf,
+ MDOC_Bo,
+ MDOC_Bq,
+ MDOC_Bsx,
+ MDOC_Bx,
+ MDOC_Db,
+ MDOC_Dc,
+ MDOC_Do,
+ MDOC_Dq,
+ MDOC_Ec,
+ MDOC_Ef,
+ MDOC_Em,
+ MDOC_Eo,
+ MDOC_Fx,
+ MDOC_Ms,
+ MDOC_No,
+ MDOC_Ns,
+ MDOC_Nx,
+ MDOC_Ox,
+ MDOC_Pc,
+ MDOC_Pf,
+ MDOC_Po,
+ MDOC_Pq,
+ MDOC_Qc,
+ MDOC_Ql,
+ MDOC_Qo,
+ MDOC_Qq,
+ MDOC_Re,
+ MDOC_Rs,
+ MDOC_Sc,
+ MDOC_So,
+ MDOC_Sq,
+ MDOC_Sm,
+ MDOC_Sx,
+ MDOC_Sy,
+ MDOC_Tn,
+ MDOC_Ux,
+ MDOC_Xc,
+ MDOC_Xo,
+ MDOC_Fo,
+ MDOC_Fc,
+ MDOC_Oo,
+ MDOC_Oc,
+ MDOC_Bk,
+ MDOC_Ek,
+ MDOC_Bt,
+ MDOC_Hf,
+ MDOC_Fr,
+ MDOC_Ud,
+ MDOC_Lb,
+ MDOC_Lp,
+ MDOC_Lk,
+ MDOC_Mt,
+ MDOC_Brq,
+ MDOC_Bro,
+ MDOC_Brc,
+ MDOC__C,
+ MDOC_Es,
+ MDOC_En,
+ MDOC_Dx,
+ MDOC__Q,
+ MDOC__U,
+ MDOC_Ta,
+ MDOC_MAX,
+ MAN_TH,
+ MAN_SH,
+ MAN_SS,
+ MAN_TP,
+ MAN_LP,
+ MAN_PP,
+ MAN_P,
+ MAN_IP,
+ MAN_HP,
+ MAN_SM,
+ MAN_SB,
+ MAN_BI,
+ MAN_IB,
+ MAN_BR,
+ MAN_RB,
+ MAN_R,
+ MAN_B,
+ MAN_I,
+ MAN_IR,
+ MAN_RI,
+ MAN_nf,
+ MAN_fi,
+ MAN_RE,
+ MAN_RS,
+ MAN_DT,
+ MAN_UC,
+ MAN_PD,
+ MAN_AT,
+ MAN_in,
+ MAN_OP,
+ MAN_EX,
+ MAN_EE,
+ MAN_UR,
+ MAN_UE,
+ MAN_MAX
+};
+
enum roff_next {
ROFF_NEXT_SIBLING = 0,
ROFF_NEXT_CHILD
@@ -94,8 +506,6 @@ struct roff_node {
const struct eqn *eqn; /* EQN */
int line; /* Input file line number. */
int pos; /* Input file column number. */
- int tok; /* Request or macro ID. */
-#define TOKEN_NONE (-1) /* No request or macro. */
int flags;
#define NODE_VALID (1 << 0) /* Has been validated. */
#define NODE_ENDED (1 << 1) /* Gone past body end mark. */
@@ -109,6 +519,7 @@ struct roff_node {
#define NODE_NOPRT (1 << 9) /* Shall not print anything. */
int prev_font; /* Before entering this node. */
int aux; /* Decoded node data, type-dependent. */
+ enum roff_tok tok; /* Request or macro ID. */
enum roff_type type; /* AST node type. */
enum roff_sec sec; /* Current named section. */
enum mdoc_endbody end; /* BODY */
@@ -123,12 +534,15 @@ struct roff_meta {
char *name; /* Leading manual name. */
char *date; /* Normalized date. */
int hasbody; /* Document is not empty. */
+ enum mdoc_os os_e; /* Operating system. */
};
struct roff_man {
struct roff_meta meta; /* Document meta-data. */
struct mparse *parse; /* Parse pointer. */
struct roff *roff; /* Roff parser state data. */
+ struct ohash *mdocmac; /* Mdoc macro lookup table. */
+ struct ohash *manmac; /* Man macro lookup table. */
const char *defos; /* Default operating system. */
struct roff_node *first; /* The first node parsed. */
struct roff_node *last; /* The last node parsed. */
@@ -158,5 +572,11 @@ struct roff_man {
enum roff_next next; /* Where to put the next node. */
};
+extern const char *const *roff_name;
+
void deroff(char **, const struct roff_node *);
+struct ohash *roffhash_alloc(enum roff_tok, enum roff_tok);
+enum roff_tok roffhash_find(struct ohash *, const char *, size_t);
+void roffhash_free(struct ohash *);
+void roff_validate(struct roff_man *);
diff --git a/contrib/mdocml/roff_html.c b/contrib/mdocml/roff_html.c
new file mode 100644
index 000000000000..f023a9c439b0
--- /dev/null
+++ b/contrib/mdocml/roff_html.c
@@ -0,0 +1,93 @@
+/* $Id: roff_html.c,v 1.8 2017/06/08 12:54:58 schwarze Exp $ */
+/*
+ * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+#include <stddef.h>
+
+#include "roff.h"
+#include "out.h"
+#include "html.h"
+
+#define ROFF_HTML_ARGS struct html *h, const struct roff_node *n
+
+typedef void (*roff_html_pre_fp)(ROFF_HTML_ARGS);
+
+static void roff_html_pre_br(ROFF_HTML_ARGS);
+static void roff_html_pre_ce(ROFF_HTML_ARGS);
+static void roff_html_pre_sp(ROFF_HTML_ARGS);
+
+static const roff_html_pre_fp roff_html_pre_acts[ROFF_MAX] = {
+ roff_html_pre_br, /* br */
+ roff_html_pre_ce, /* ce */
+ NULL, /* ft */
+ NULL, /* ll */
+ NULL, /* mc */
+ roff_html_pre_sp, /* sp */
+ NULL, /* ta */
+ NULL, /* ti */
+};
+
+
+void
+roff_html_pre(struct html *h, const struct roff_node *n)
+{
+ assert(n->tok < ROFF_MAX);
+ if (roff_html_pre_acts[n->tok] != NULL)
+ (*roff_html_pre_acts[n->tok])(h, n);
+}
+
+static void
+roff_html_pre_br(ROFF_HTML_ARGS)
+{
+ struct tag *t;
+
+ t = print_otag(h, TAG_DIV, "");
+ print_text(h, "\\~"); /* So the div isn't empty. */
+ print_tagq(h, t);
+}
+
+static void
+roff_html_pre_ce(ROFF_HTML_ARGS)
+{
+ for (n = n->child->next; n != NULL; n = n->next) {
+ if (n->type == ROFFT_TEXT) {
+ if (n->flags & NODE_LINE)
+ roff_html_pre_br(h, n);
+ print_text(h, n->string);
+ } else
+ roff_html_pre(h, n);
+ }
+ roff_html_pre_br(h, n);
+}
+
+static void
+roff_html_pre_sp(ROFF_HTML_ARGS)
+{
+ struct roffsu su;
+
+ SCALE_VS_INIT(&su, 1);
+ if ((n = n->child) != NULL) {
+ if (a2roffsu(n->string, &su, SCALE_VS) == NULL)
+ su.scale = 1.0;
+ else if (su.scale < 0.0)
+ su.scale = 0.0;
+ }
+ print_otag(h, TAG_DIV, "suh", &su);
+ print_text(h, "\\~"); /* So the div isn't empty. */
+}
diff --git a/contrib/mdocml/roff_term.c b/contrib/mdocml/roff_term.c
new file mode 100644
index 000000000000..7574102b85aa
--- /dev/null
+++ b/contrib/mdocml/roff_term.c
@@ -0,0 +1,221 @@
+/* $Id: roff_term.c,v 1.10 2017/06/08 12:54:58 schwarze Exp $ */
+/*
+ * Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+#include <stddef.h>
+
+#include "roff.h"
+#include "out.h"
+#include "term.h"
+
+#define ROFF_TERM_ARGS struct termp *p, const struct roff_node *n
+
+typedef void (*roff_term_pre_fp)(ROFF_TERM_ARGS);
+
+static void roff_term_pre_br(ROFF_TERM_ARGS);
+static void roff_term_pre_ce(ROFF_TERM_ARGS);
+static void roff_term_pre_ft(ROFF_TERM_ARGS);
+static void roff_term_pre_ll(ROFF_TERM_ARGS);
+static void roff_term_pre_mc(ROFF_TERM_ARGS);
+static void roff_term_pre_sp(ROFF_TERM_ARGS);
+static void roff_term_pre_ta(ROFF_TERM_ARGS);
+static void roff_term_pre_ti(ROFF_TERM_ARGS);
+
+static const roff_term_pre_fp roff_term_pre_acts[ROFF_MAX] = {
+ roff_term_pre_br, /* br */
+ roff_term_pre_ce, /* ce */
+ roff_term_pre_ft, /* ft */
+ roff_term_pre_ll, /* ll */
+ roff_term_pre_mc, /* mc */
+ roff_term_pre_sp, /* sp */
+ roff_term_pre_ta, /* ta */
+ roff_term_pre_ti, /* ti */
+};
+
+
+void
+roff_term_pre(struct termp *p, const struct roff_node *n)
+{
+ assert(n->tok < ROFF_MAX);
+ (*roff_term_pre_acts[n->tok])(p, n);
+}
+
+static void
+roff_term_pre_br(ROFF_TERM_ARGS)
+{
+ term_newln(p);
+ if (p->flags & TERMP_BRIND) {
+ p->tcol->offset = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin;
+ p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
+ }
+}
+
+static void
+roff_term_pre_ce(ROFF_TERM_ARGS)
+{
+ const struct roff_node *nch;
+ size_t len, lm;
+
+ roff_term_pre_br(p, n);
+ lm = p->tcol->offset;
+ n = n->child->next;
+ while (n != NULL) {
+ nch = n;
+ len = 0;
+ do {
+ if (n->type == ROFFT_TEXT) {
+ if (len)
+ len++;
+ len += term_strlen(p, nch->string);
+ }
+ nch = nch->next;
+ } while (nch != NULL && (n->type != ROFFT_TEXT ||
+ (n->flags & NODE_LINE) == 0));
+ p->tcol->offset = len >= p->tcol->rmargin ? 0 :
+ lm + len >= p->tcol->rmargin ? p->tcol->rmargin - len :
+ (lm + p->tcol->rmargin - len) / 2;
+ while (n != nch) {
+ if (n->type == ROFFT_TEXT)
+ term_word(p, n->string);
+ else
+ roff_term_pre(p, n);
+ n = n->next;
+ }
+ p->flags |= TERMP_NOSPACE;
+ term_flushln(p);
+ }
+ p->tcol->offset = lm;
+}
+
+static void
+roff_term_pre_ft(ROFF_TERM_ARGS)
+{
+ switch (*n->child->string) {
+ case '4':
+ case '3':
+ case 'B':
+ term_fontrepl(p, TERMFONT_BOLD);
+ break;
+ case '2':
+ case 'I':
+ term_fontrepl(p, TERMFONT_UNDER);
+ break;
+ case 'P':
+ term_fontlast(p);
+ break;
+ case '1':
+ case 'C':
+ case 'R':
+ term_fontrepl(p, TERMFONT_NONE);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+roff_term_pre_ll(ROFF_TERM_ARGS)
+{
+ term_setwidth(p, n->child != NULL ? n->child->string : NULL);
+}
+
+static void
+roff_term_pre_mc(ROFF_TERM_ARGS)
+{
+ if (p->col) {
+ p->flags |= TERMP_NOBREAK;
+ term_flushln(p);
+ p->flags &= ~(TERMP_NOBREAK | TERMP_NOSPACE);
+ }
+ if (n->child != NULL) {
+ p->mc = n->child->string;
+ p->flags |= TERMP_NEWMC;
+ } else
+ p->flags |= TERMP_ENDMC;
+}
+
+static void
+roff_term_pre_sp(ROFF_TERM_ARGS)
+{
+ struct roffsu su;
+ int len;
+
+ if (n->child != NULL) {
+ if (a2roffsu(n->child->string, &su, SCALE_VS) == NULL)
+ su.scale = 1.0;
+ len = term_vspan(p, &su);
+ } else
+ len = 1;
+
+ if (len < 0)
+ p->skipvsp -= len;
+ else
+ while (len--)
+ term_vspace(p);
+
+ roff_term_pre_br(p, n);
+}
+
+static void
+roff_term_pre_ta(ROFF_TERM_ARGS)
+{
+ term_tab_set(p, NULL);
+ for (n = n->child; n != NULL; n = n->next)
+ term_tab_set(p, n->string);
+}
+
+static void
+roff_term_pre_ti(ROFF_TERM_ARGS)
+{
+ struct roffsu su;
+ const char *cp;
+ int len, sign;
+
+ roff_term_pre_br(p, n);
+
+ if (n->child == NULL)
+ return;
+ cp = n->child->string;
+ if (*cp == '+') {
+ sign = 1;
+ cp++;
+ } else if (*cp == '-') {
+ sign = -1;
+ cp++;
+ } else
+ sign = 0;
+
+ if (a2roffsu(cp, &su, SCALE_EM) == NULL)
+ return;
+ len = term_hspan(p, &su) / 24;
+
+ if (sign == 0) {
+ p->ti = len - p->tcol->offset;
+ p->tcol->offset = len;
+ } else if (sign == 1) {
+ p->ti = len;
+ p->tcol->offset += len;
+ } else if ((size_t)len < p->tcol->offset) {
+ p->ti = -len;
+ p->tcol->offset -= len;
+ } else {
+ p->ti = -p->tcol->offset;
+ p->tcol->offset = 0;
+ }
+}
diff --git a/contrib/mdocml/roff_validate.c b/contrib/mdocml/roff_validate.c
new file mode 100644
index 000000000000..feadfb40c98b
--- /dev/null
+++ b/contrib/mdocml/roff_validate.c
@@ -0,0 +1,95 @@
+/* $Id: roff_validate.c,v 1.7 2017/06/06 15:01:04 schwarze Exp $ */
+/*
+ * Copyright (c) 2010, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+#include <stddef.h>
+
+#include "mandoc.h"
+#include "roff.h"
+#include "libmandoc.h"
+#include "roff_int.h"
+
+#define ROFF_VALID_ARGS struct roff_man *man, struct roff_node *n
+
+typedef void (*roff_valid_fp)(ROFF_VALID_ARGS);
+
+static void roff_valid_ft(ROFF_VALID_ARGS);
+
+static const roff_valid_fp roff_valids[ROFF_MAX] = {
+ NULL, /* br */
+ NULL, /* ce */
+ roff_valid_ft, /* ft */
+ NULL, /* ll */
+ NULL, /* mc */
+ NULL, /* sp */
+ NULL, /* ta */
+ NULL, /* ti */
+};
+
+
+void
+roff_validate(struct roff_man *man)
+{
+ struct roff_node *n;
+
+ n = man->last;
+ assert(n->tok < ROFF_MAX);
+ if (roff_valids[n->tok] != NULL)
+ (*roff_valids[n->tok])(man, n);
+}
+
+static void
+roff_valid_ft(ROFF_VALID_ARGS)
+{
+ char *cp;
+
+ if (n->child == NULL) {
+ man->next = ROFF_NEXT_CHILD;
+ roff_word_alloc(man, n->line, n->pos, "P");
+ man->last = n;
+ return;
+ }
+
+ cp = n->child->string;
+ switch (*cp) {
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case 'I':
+ case 'P':
+ case 'R':
+ if (cp[1] == '\0')
+ return;
+ break;
+ case 'B':
+ if (cp[1] == '\0' || (cp[1] == 'I' && cp[2] == '\0'))
+ return;
+ break;
+ case 'C':
+ if (cp[1] == 'W' && cp[2] == '\0')
+ return;
+ break;
+ default:
+ break;
+ }
+
+ mandoc_vmsg(MANDOCERR_FT_BAD, man->parse,
+ n->line, n->pos, "ft %s", cp);
+ roff_node_delete(man, n);
+}
diff --git a/contrib/mdocml/soelim.1 b/contrib/mdocml/soelim.1
index 20f15ec933c7..b78d27e16409 100644
--- a/contrib/mdocml/soelim.1
+++ b/contrib/mdocml/soelim.1
@@ -1,4 +1,4 @@
-.\" $Id: soelim.1,v 1.3 2015/05/20 22:59:12 schwarze Exp $
+.\" $Id: soelim.1,v 1.4 2017/03/18 19:56:01 schwarze Exp $
.\"
.\" Copyright (c) 2014 Baptiste Daroussin <bapt@FreeBSD.org>
.\" All rights reserved.
@@ -24,7 +24,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd $Mdocdate: May 20 2015 $
+.Dd $Mdocdate: March 18 2017 $
.Dt SOELIM 1
.Os
.Sh NAME
@@ -69,8 +69,8 @@ This option specify directories where
searches for files (both those on the command line and those named in
.Dq .so
directive.)
-This options may be specified multiple times. The directories will be searched
-in the order specified.
+This options may be specified multiple times.
+The directories will be searched in the order specified.
.El
.Pp
The files are always searched first in the current directory.
diff --git a/contrib/mdocml/tbl.7 b/contrib/mdocml/tbl.7
index c8fa8e484499..b10edfe60593 100644
--- a/contrib/mdocml/tbl.7
+++ b/contrib/mdocml/tbl.7
@@ -1,7 +1,7 @@
-.\" $Id: tbl.7,v 1.26 2015/01/29 00:33:57 schwarze Exp $
+.\" $Id: tbl.7,v 1.27 2017/06/08 18:11:22 schwarze Exp $
.\"
.\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 29 2015 $
+.Dd $Mdocdate: June 8 2017 $
.Dt TBL 7
.Os
.Sh NAME
@@ -245,7 +245,7 @@ Emit a double-vertical bar instead of data.
.Pp
Keys may be followed by a set of modifiers.
A modifier is either a modifier key or a natural number for specifying
-the minimum width of a column.
+the spacing to the right of the column.
The following case-insensitive modifier keys are available:
.Bl -tag -width 2n
.It Cm b
@@ -284,8 +284,7 @@ Currently ignored.
Move cell content up by half a table line.
Currently ignored.
.It Cm w
-Specify minimum column width.
-Currently ignored.
+Specify the minimum column width.
.It Cm x
After determining the width of all other columns, distribute the
rest of the line length among all columns having the
@@ -300,7 +299,7 @@ minimum width 10, followed by vertical bar, followed by a left-justified
column of minimum width 10, another vertical bar, then a column using
bold font justified about the decimal point in numbers:
.Pp
-.Dl c10 | l10 | nfB
+.Dl cw10 | lw10 | nfB
.Ss Data
The data section follows the last layout row.
By default, cells in a data section are delimited by a tab.
diff --git a/contrib/mdocml/tbl.c b/contrib/mdocml/tbl.c
index ed6fbd876a86..a5aa5ae5fd66 100644
--- a/contrib/mdocml/tbl.c
+++ b/contrib/mdocml/tbl.c
@@ -1,4 +1,4 @@
-/* $Id: tbl.c,v 1.40 2015/10/06 18:32:20 schwarze Exp $ */
+/* $Id: tbl.c,v 1.41 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -114,6 +114,7 @@ tbl_free(struct tbl_node *tbl)
while (rp->first != NULL) {
cp = rp->first;
rp->first = cp->next;
+ free(cp->wstr);
free(cp);
}
free(rp);
diff --git a/contrib/mdocml/tbl_data.c b/contrib/mdocml/tbl_data.c
index 40b756a05e1a..2502672184f4 100644
--- a/contrib/mdocml/tbl_data.c
+++ b/contrib/mdocml/tbl_data.c
@@ -1,7 +1,7 @@
-/* $Id: tbl_data.c,v 1.41 2015/10/06 18:32:20 schwarze Exp $ */
+/* $Id: tbl_data.c,v 1.42 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -144,6 +144,7 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
}
dat->pos = TBL_DATA_DATA;
+ dat->block = 1;
if (dat->string != NULL) {
sz = strlen(p + pos) + strlen(dat->string) + 2;
diff --git a/contrib/mdocml/tbl_html.c b/contrib/mdocml/tbl_html.c
index 4dff29370a51..5db39af5619a 100644
--- a/contrib/mdocml/tbl_html.c
+++ b/contrib/mdocml/tbl_html.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_html.c,v 1.20 2017/02/05 18:15:39 schwarze Exp $ */
+/* $Id: tbl_html.c,v 1.21 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -31,22 +31,48 @@
static void html_tblopen(struct html *, const struct tbl_span *);
static size_t html_tbl_len(size_t, void *);
static size_t html_tbl_strlen(const char *, void *);
+static size_t html_tbl_sulen(const struct roffsu *, void *);
static size_t
html_tbl_len(size_t sz, void *arg)
{
-
return sz;
}
static size_t
html_tbl_strlen(const char *p, void *arg)
{
-
return strlen(p);
}
+static size_t
+html_tbl_sulen(const struct roffsu *su, void *arg)
+{
+ switch (su->unit) {
+ case SCALE_FS: /* 2^16 basic units */
+ return su->scale * 65536.0 / 24.0;
+ case SCALE_IN: /* 10 characters per inch */
+ return su->scale * 10.0;
+ case SCALE_CM: /* 2.54 cm per inch */
+ return su->scale * 10.0 / 2.54;
+ case SCALE_PC: /* 6 pica per inch */
+ case SCALE_VS:
+ return su->scale * 10.0 / 6.0;
+ case SCALE_EN:
+ case SCALE_EM:
+ return su->scale;
+ case SCALE_PT: /* 12 points per pica */
+ return su->scale * 10.0 / 6.0 / 12.0;
+ case SCALE_BU: /* 24 basic units per character */
+ return su->scale / 24.0;
+ case SCALE_MM: /* 1/1000 inch */
+ return su->scale / 100.0;
+ default:
+ abort();
+ }
+}
+
static void
html_tblopen(struct html *h, const struct tbl_span *sp)
{
@@ -56,6 +82,7 @@ html_tblopen(struct html *h, const struct tbl_span *sp)
if (h->tbl.cols == NULL) {
h->tbl.len = html_tbl_len;
h->tbl.slen = html_tbl_strlen;
+ h->tbl.sulen = html_tbl_sulen;
tblcalc(&h->tbl, sp, 0);
}
diff --git a/contrib/mdocml/tbl_layout.c b/contrib/mdocml/tbl_layout.c
index c0eafbddbf05..d27ac3cd621d 100644
--- a/contrib/mdocml/tbl_layout.c
+++ b/contrib/mdocml/tbl_layout.c
@@ -1,7 +1,7 @@
-/* $Id: tbl_layout.c,v 1.41 2015/10/12 00:08:16 schwarze Exp $ */
+/* $Id: tbl_layout.c,v 1.42 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -62,6 +62,7 @@ mods(struct tbl_node *tbl, struct tbl_cell *cp,
int ln, const char *p, int *pos)
{
char *endptr;
+ size_t sz;
mod:
while (p[*pos] == ' ' || p[*pos] == '\t')
@@ -127,7 +128,22 @@ mod:
case 'u':
cp->flags |= TBL_CELL_UP;
goto mod;
- case 'w': /* XXX for now, ignore minimal column width */
+ case 'w':
+ sz = 0;
+ if (p[*pos] == '(') {
+ (*pos)++;
+ while (p[*pos + sz] != '\0' && p[*pos + sz] != ')')
+ sz++;
+ } else
+ while (isdigit((unsigned char)p[*pos + sz]))
+ sz++;
+ if (sz) {
+ free(cp->wstr);
+ cp->wstr = mandoc_strndup(p + *pos, sz);
+ *pos += sz;
+ if (p[*pos] == ')')
+ (*pos)++;
+ }
goto mod;
case 'x':
cp->flags |= TBL_CELL_WMAX;
diff --git a/contrib/mdocml/tbl_term.c b/contrib/mdocml/tbl_term.c
index eceaa4b60f4a..52c41a21dd56 100644
--- a/contrib/mdocml/tbl_term.c
+++ b/contrib/mdocml/tbl_term.c
@@ -1,7 +1,7 @@
-/* $Id: tbl_term.c,v 1.43 2015/10/12 00:08:16 schwarze Exp $ */
+/* $Id: tbl_term.c,v 1.46 2017/06/08 18:11:22 schwarze Exp $ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011,2012,2014,2015,2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -30,6 +30,7 @@
static size_t term_tbl_len(size_t, void *);
static size_t term_tbl_strlen(const char *, void *);
+static size_t term_tbl_sulen(const struct roffsu *, void *);
static void tbl_char(struct termp *, char, size_t);
static void tbl_data(struct termp *, const struct tbl_opts *,
const struct tbl_dat *,
@@ -44,16 +45,20 @@ static void tbl_word(struct termp *, const struct tbl_dat *);
static size_t
-term_tbl_strlen(const char *p, void *arg)
+term_tbl_sulen(const struct roffsu *su, void *arg)
{
+ return term_hspan((const struct termp *)arg, su) / 24;
+}
+static size_t
+term_tbl_strlen(const char *p, void *arg)
+{
return term_strlen((const struct termp *)arg, p);
}
static size_t
term_tbl_len(size_t sz, void *arg)
{
-
return term_len((const struct termp *)arg, sz);
}
@@ -63,18 +68,12 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
const struct tbl_cell *cp;
const struct tbl_dat *dp;
static size_t offset;
- size_t rmargin, maxrmargin, tsz;
+ size_t tsz;
int ic, horiz, spans, vert;
- rmargin = tp->rmargin;
- maxrmargin = tp->maxrmargin;
-
- tp->rmargin = tp->maxrmargin = TERM_MAXMARGIN;
-
/* Inhibit printing of spaces: we do padding ourselves. */
- tp->flags |= TERMP_NONOSPACE;
- tp->flags |= TERMP_NOSPACE;
+ tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE | TERMP_BRNEVER;
/*
* The first time we're invoked for a given table block,
@@ -84,23 +83,24 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
if (tp->tbl.cols == NULL) {
tp->tbl.len = term_tbl_len;
tp->tbl.slen = term_tbl_strlen;
+ tp->tbl.sulen = term_tbl_sulen;
tp->tbl.arg = tp;
- tblcalc(&tp->tbl, sp, rmargin - tp->offset);
+ tblcalc(&tp->tbl, sp, tp->tcol->rmargin - tp->tcol->offset);
/* Center the table as a whole. */
- offset = tp->offset;
+ offset = tp->tcol->offset;
if (sp->opts->opts & TBL_OPT_CENTRE) {
tsz = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)
? 2 : !!sp->opts->lvert + !!sp->opts->rvert;
for (ic = 0; ic < sp->opts->cols; ic++)
tsz += tp->tbl.cols[ic].width + 3;
tsz -= 3;
- if (offset + tsz > rmargin)
+ if (offset + tsz > tp->tcol->rmargin)
tsz -= 1;
- tp->offset = (offset + rmargin > tsz) ?
- (offset + rmargin - tsz) / 2 : 0;
+ tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?
+ (offset + tp->tcol->rmargin - tsz) / 2 : 0;
}
/* Horizontal frame at the start of boxed tables. */
@@ -199,12 +199,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
assert(tp->tbl.cols);
free(tp->tbl.cols);
tp->tbl.cols = NULL;
- tp->offset = offset;
+ tp->tcol->offset = offset;
}
-
- tp->flags &= ~TERMP_NONOSPACE;
- tp->rmargin = rmargin;
- tp->maxrmargin = maxrmargin;
+ tp->flags &= ~(TERMP_NONOSPACE | TERMP_BRNEVER);
}
/*
diff --git a/contrib/mdocml/term.c b/contrib/mdocml/term.c
index 1217d473cadd..661508d98532 100644
--- a/contrib/mdocml/term.c
+++ b/contrib/mdocml/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.259 2017/01/08 18:16:58 schwarze Exp $ */
+/* $Id: term.c,v 1.268 2017/06/08 12:54:58 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -32,17 +32,19 @@
#include "main.h"
static size_t cond_width(const struct termp *, int, int *);
-static void adjbuf(struct termp *p, size_t);
+static void adjbuf(struct termp_col *, size_t);
static void bufferc(struct termp *, char);
static void encode(struct termp *, const char *, size_t);
static void encode1(struct termp *, int);
+static void endline(struct termp *);
void
term_free(struct termp *p)
{
-
- free(p->buf);
+ for (p->tcol = p->tcols; p->tcol < p->tcols + p->maxtcol; p->tcol++)
+ free(p->tcol->buf);
+ free(p->tcols);
free(p->fontq);
free(p);
}
@@ -84,69 +86,53 @@ term_end(struct termp *p)
* to be broken, start the next line at the right margin instead
* of at the offset. Used together with TERMP_NOBREAK for the tags
* in various kinds of tagged lists.
- * - TERMP_DANGLE: Do not break the output line at the right margin,
+ * - TERMP_HANG: Do not break the output line at the right margin,
* append the next chunk after it even if this one is too long.
* To be used together with TERMP_NOBREAK.
- * - TERMP_HANG: Like TERMP_DANGLE, and also suppress padding before
- * the next chunk if this column is not full.
+ * - TERMP_NOPAD: Start writing at the current position,
+ * do not pad with blank characters up to the offset.
*/
void
term_flushln(struct termp *p)
{
- size_t i; /* current input position in p->buf */
- int ntab; /* number of tabs to prepend */
size_t vis; /* current visual position on output */
size_t vbl; /* number of blanks to prepend to output */
size_t vend; /* end of word visual position on output */
size_t bp; /* visual right border position */
size_t dv; /* temporary for visual pos calculations */
- size_t j; /* temporary loop index for p->buf */
+ size_t j; /* temporary loop index for p->tcol->buf */
size_t jhy; /* last hyph before overflow w/r/t j */
size_t maxvis; /* output position of visible boundary */
+ int ntab; /* number of tabs to prepend */
- /*
- * First, establish the maximum columns of "visible" content.
- * This is usually the difference between the right-margin and
- * an indentation, but can be, for tagged lists or columns, a
- * small set of values.
- *
- * The following unsigned-signed subtractions look strange,
- * but they are actually correct. If the int p->overstep
- * is negative, it gets sign extended. Subtracting that
- * very large size_t effectively adds a small number to dv.
- */
- dv = p->rmargin > p->offset ? p->rmargin - p->offset : 0;
- maxvis = (int)dv > p->overstep ? dv - (size_t)p->overstep : 0;
-
- if (p->flags & TERMP_NOBREAK) {
- dv = p->maxrmargin > p->offset ?
- p->maxrmargin - p->offset : 0;
- bp = (int)dv > p->overstep ?
- dv - (size_t)p->overstep : 0;
- } else
- bp = maxvis;
-
- /*
- * Calculate the required amount of padding.
- */
- vbl = p->offset + p->overstep > p->viscol ?
- p->offset + p->overstep - p->viscol : 0;
-
+ vbl = (p->flags & TERMP_NOPAD) || p->tcol->offset < p->viscol ?
+ 0 : p->tcol->offset - p->viscol;
+ if (p->minbl && vbl < p->minbl)
+ vbl = p->minbl;
+ maxvis = p->tcol->rmargin > p->viscol + vbl ?
+ p->tcol->rmargin - p->viscol - vbl : 0;
+ bp = !(p->flags & TERMP_NOBREAK) ? maxvis :
+ p->maxrmargin > p->viscol + vbl ?
+ p->maxrmargin - p->viscol - vbl : 0;
vis = vend = 0;
- i = 0;
- while (i < p->col) {
+ if (p->lasttcol == 0)
+ p->tcol->col = 0;
+ while (p->tcol->col < p->lastcol) {
+
/*
* Handle literal tab characters: collapse all
* subsequent tabs into a single huge set of spaces.
*/
+
ntab = 0;
- while (i < p->col && '\t' == p->buf[i]) {
- vend = (vis / p->tabwidth + 1) * p->tabwidth;
+ while (p->tcol->col < p->lastcol &&
+ p->tcol->buf[p->tcol->col] == '\t') {
+ vend = term_tab_next(vis);
vbl += vend - vis;
vis = vend;
ntab++;
- i++;
+ p->tcol->col++;
}
/*
@@ -156,84 +142,90 @@ term_flushln(struct termp *p)
* space is printed according to regular spacing rules).
*/
- for (j = i, jhy = 0; j < p->col; j++) {
- if (' ' == p->buf[j] || '\t' == p->buf[j])
+ jhy = 0;
+ for (j = p->tcol->col; j < p->lastcol; j++) {
+ if (p->tcol->buf[j] == ' ' || p->tcol->buf[j] == '\t')
break;
/* Back over the last printed character. */
- if (8 == p->buf[j]) {
+ if (p->tcol->buf[j] == '\b') {
assert(j);
- vend -= (*p->width)(p, p->buf[j - 1]);
+ vend -= (*p->width)(p, p->tcol->buf[j - 1]);
continue;
}
/* Regular word. */
/* Break at the hyphen point if we overrun. */
if (vend > vis && vend < bp &&
- (ASCII_HYPH == p->buf[j] ||
- ASCII_BREAK == p->buf[j]))
+ (p->tcol->buf[j] == ASCII_HYPH||
+ p->tcol->buf[j] == ASCII_BREAK))
jhy = j;
/*
* Hyphenation now decided, put back a real
* hyphen such that we get the correct width.
*/
- if (ASCII_HYPH == p->buf[j])
- p->buf[j] = '-';
+ if (p->tcol->buf[j] == ASCII_HYPH)
+ p->tcol->buf[j] = '-';
- vend += (*p->width)(p, p->buf[j]);
+ vend += (*p->width)(p, p->tcol->buf[j]);
}
/*
* Find out whether we would exceed the right margin.
* If so, break to the next line.
*/
- if (vend > bp && 0 == jhy && vis > 0) {
+
+ if (vend > bp && jhy == 0 && vis > 0 &&
+ (p->flags & TERMP_BRNEVER) == 0) {
+ if (p->lasttcol)
+ return;
+
+ endline(p);
vend -= vis;
- (*p->endline)(p);
- p->viscol = 0;
- if (TERMP_BRIND & p->flags) {
- vbl = p->rmargin;
- vend += p->rmargin;
- vend -= p->offset;
- } else
- vbl = p->offset;
- /* use pending tabs on the new line */
+ /* Use pending tabs on the new line. */
- if (0 < ntab)
- vbl += ntab * p->tabwidth;
+ vbl = 0;
+ while (ntab--)
+ vbl = term_tab_next(vbl);
- /*
- * Remove the p->overstep width.
- * Again, if p->overstep is negative,
- * sign extension does the right thing.
- */
+ /* Re-establish indentation. */
- bp += (size_t)p->overstep;
- p->overstep = 0;
+ if (p->flags & TERMP_BRIND)
+ vbl += p->tcol->rmargin;
+ else
+ vbl += p->tcol->offset;
+ maxvis = p->tcol->rmargin > vbl ?
+ p->tcol->rmargin - vbl : 0;
+ bp = !(p->flags & TERMP_NOBREAK) ? maxvis :
+ p->maxrmargin > vbl ? p->maxrmargin - vbl : 0;
}
- /* Write out the [remaining] word. */
- for ( ; i < p->col; i++) {
- if (vend > bp && jhy > 0 && i > jhy)
+ /*
+ * Write out the rest of the word.
+ */
+
+ for ( ; p->tcol->col < p->lastcol; p->tcol->col++) {
+ if (vend > bp && jhy > 0 && p->tcol->col > jhy)
break;
- if ('\t' == p->buf[i])
+ if (p->tcol->buf[p->tcol->col] == '\t')
break;
- if (' ' == p->buf[i]) {
- j = i;
- while (i < p->col && ' ' == p->buf[i])
- i++;
- dv = (i - j) * (*p->width)(p, ' ');
+ if (p->tcol->buf[p->tcol->col] == ' ') {
+ j = p->tcol->col;
+ while (p->tcol->col < p->lastcol &&
+ p->tcol->buf[p->tcol->col] == ' ')
+ p->tcol->col++;
+ dv = (p->tcol->col - j) * (*p->width)(p, ' ');
vbl += dv;
vend += dv;
break;
}
- if (ASCII_NBRSP == p->buf[i]) {
+ if (p->tcol->buf[p->tcol->col] == ASCII_NBRSP) {
vbl += (*p->width)(p, ' ');
continue;
}
- if (ASCII_BREAK == p->buf[i])
+ if (p->tcol->buf[p->tcol->col] == ASCII_BREAK)
continue;
/*
@@ -247,11 +239,13 @@ term_flushln(struct termp *p)
vbl = 0;
}
- (*p->letter)(p, p->buf[i]);
- if (8 == p->buf[i])
- p->viscol -= (*p->width)(p, p->buf[i-1]);
+ (*p->letter)(p, p->tcol->buf[p->tcol->col]);
+ if (p->tcol->buf[p->tcol->col] == '\b')
+ p->viscol -= (*p->width)(p,
+ p->tcol->buf[p->tcol->col - 1]);
else
- p->viscol += (*p->width)(p, p->buf[i]);
+ p->viscol += (*p->width)(p,
+ p->tcol->buf[p->tcol->col]);
}
vis = vend;
}
@@ -260,48 +254,45 @@ term_flushln(struct termp *p)
* If there was trailing white space, it was not printed;
* so reset the cursor position accordingly.
*/
+
if (vis > vbl)
vis -= vbl;
else
vis = 0;
- p->col = 0;
- p->overstep = 0;
- p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE);
-
- if ( ! (TERMP_NOBREAK & p->flags)) {
- p->viscol = 0;
- (*p->endline)(p);
- return;
- }
-
- if (TERMP_HANG & p->flags) {
- p->overstep += (int)(p->offset + vis - p->rmargin +
- p->trailspace * (*p->width)(p, ' '));
-
- /*
- * If we have overstepped the margin, temporarily move
- * it to the right and flag the rest of the line to be
- * shorter.
- * If there is a request to keep the columns together,
- * allow negative overstep when the column is not full.
- */
- if (p->trailspace && p->overstep < 0)
- p->overstep = 0;
- return;
-
- } else if (TERMP_DANGLE & p->flags)
- return;
+ p->col = p->lastcol = 0;
+ p->minbl = p->trailspace;
+ p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE | TERMP_NOPAD);
/* Trailing whitespace is significant in some columns. */
+
if (vis && vbl && (TERMP_BRTRSP & p->flags))
vis += vbl;
/* If the column was overrun, break the line. */
- if (maxvis < vis + p->trailspace * (*p->width)(p, ' ')) {
- (*p->endline)(p);
- p->viscol = 0;
+ if ((p->flags & TERMP_NOBREAK) == 0 ||
+ ((p->flags & TERMP_HANG) == 0 &&
+ vis + p->trailspace * (*p->width)(p, ' ') > maxvis))
+ endline(p);
+}
+
+static void
+endline(struct termp *p)
+{
+ if ((p->flags & (TERMP_NEWMC | TERMP_ENDMC)) == TERMP_ENDMC) {
+ p->mc = NULL;
+ p->flags &= ~TERMP_ENDMC;
+ }
+ if (p->mc != NULL) {
+ if (p->viscol && p->maxrmargin >= p->viscol)
+ (*p->advance)(p, p->maxrmargin - p->viscol + 1);
+ p->flags |= TERMP_NOBUF | TERMP_NOSPACE;
+ term_word(p, p->mc);
+ p->flags &= ~(TERMP_NOBUF | TERMP_NEWMC);
}
+ p->viscol = 0;
+ p->minbl = 0;
+ (*p->endline)(p);
}
/*
@@ -314,7 +305,7 @@ term_newln(struct termp *p)
{
p->flags |= TERMP_NOSPACE;
- if (p->col || p->viscol)
+ if (p->lastcol || p->viscol)
term_flushln(p);
}
@@ -330,6 +321,7 @@ term_vspace(struct termp *p)
term_newln(p);
p->viscol = 0;
+ p->minbl = 0;
if (0 < p->skipvsp)
p->skipvsp--;
else
@@ -397,30 +389,31 @@ term_fontpop(struct termp *p)
void
term_word(struct termp *p, const char *word)
{
+ struct roffsu su;
const char nbrsp[2] = { ASCII_NBRSP, 0 };
const char *seq, *cp;
int sz, uc;
- size_t ssz;
+ size_t csz, lsz, ssz;
enum mandoc_esc esc;
- if ( ! (TERMP_NOSPACE & p->flags)) {
- if ( ! (TERMP_KEEP & p->flags)) {
- bufferc(p, ' ');
- if (TERMP_SENTENCE & p->flags)
+ if ((p->flags & TERMP_NOBUF) == 0) {
+ if ((p->flags & TERMP_NOSPACE) == 0) {
+ if ((p->flags & TERMP_KEEP) == 0) {
bufferc(p, ' ');
- } else
- bufferc(p, ASCII_NBRSP);
+ if (p->flags & TERMP_SENTENCE)
+ bufferc(p, ' ');
+ } else
+ bufferc(p, ASCII_NBRSP);
+ }
+ if (p->flags & TERMP_PREKEEP)
+ p->flags |= TERMP_KEEP;
+ if (p->flags & TERMP_NONOSPACE)
+ p->flags |= TERMP_NOSPACE;
+ else
+ p->flags &= ~TERMP_NOSPACE;
+ p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
+ p->skipvsp = 0;
}
- if (TERMP_PREKEEP & p->flags)
- p->flags |= TERMP_KEEP;
-
- if ( ! (p->flags & TERMP_NONOSPACE))
- p->flags &= ~TERMP_NOSPACE;
- else
- p->flags |= TERMP_NOSPACE;
-
- p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
- p->skipvsp = 0;
while ('\0' != *word) {
if ('\\' != *word) {
@@ -485,6 +478,74 @@ term_word(struct termp *p, const char *word)
else if (*word == '\0')
p->flags |= (TERMP_NOSPACE | TERMP_NONEWLINE);
continue;
+ case ESCAPE_HORIZ:
+ if (a2roffsu(seq, &su, SCALE_EM) == NULL)
+ continue;
+ uc = term_hspan(p, &su) / 24;
+ if (uc > 0)
+ while (uc-- > 0)
+ bufferc(p, ASCII_NBRSP);
+ else if (p->col > (size_t)(-uc))
+ p->col += uc;
+ else {
+ uc += p->col;
+ p->col = 0;
+ if (p->tcol->offset > (size_t)(-uc)) {
+ p->ti += uc;
+ p->tcol->offset += uc;
+ } else {
+ p->ti -= p->tcol->offset;
+ p->tcol->offset = 0;
+ }
+ }
+ continue;
+ case ESCAPE_HLINE:
+ if ((seq = a2roffsu(seq, &su, SCALE_EM)) == NULL)
+ continue;
+ uc = term_hspan(p, &su) / 24;
+ if (uc <= 0) {
+ if (p->tcol->rmargin <= p->tcol->offset)
+ continue;
+ lsz = p->tcol->rmargin - p->tcol->offset;
+ } else
+ lsz = uc;
+ if (*seq == '\0')
+ uc = -1;
+ else if (*seq == '\\') {
+ seq++;
+ esc = mandoc_escape(&seq, &cp, &sz);
+ switch (esc) {
+ case ESCAPE_UNICODE:
+ uc = mchars_num2uc(cp + 1, sz - 1);
+ break;
+ case ESCAPE_NUMBERED:
+ uc = mchars_num2char(cp, sz);
+ break;
+ case ESCAPE_SPECIAL:
+ uc = mchars_spec2cp(cp, sz);
+ break;
+ default:
+ uc = -1;
+ break;
+ }
+ } else
+ uc = *seq;
+ if (uc < 0x20 || (uc > 0x7E && uc < 0xA0))
+ uc = '_';
+ if (p->enc == TERMENC_ASCII) {
+ cp = ascii_uc2str(uc);
+ csz = term_strlen(p, cp);
+ ssz = strlen(cp);
+ } else
+ csz = (*p->width)(p, uc);
+ while (lsz >= csz) {
+ if (p->enc == TERMENC_ASCII)
+ encode(p, cp, ssz);
+ else
+ encode1(p, uc);
+ lsz -= csz;
+ }
+ continue;
case ESCAPE_SKIPCHAR:
p->flags |= TERMP_BACKAFTER;
continue;
@@ -504,10 +565,12 @@ term_word(struct termp *p, const char *word)
}
}
/* Trim trailing backspace/blank pair. */
- if (p->col > 2 &&
- (p->buf[p->col - 1] == ' ' ||
- p->buf[p->col - 1] == '\t'))
- p->col -= 2;
+ if (p->lastcol > 2 &&
+ (p->tcol->buf[p->lastcol - 1] == ' ' ||
+ p->tcol->buf[p->lastcol - 1] == '\t'))
+ p->lastcol -= 2;
+ if (p->col > p->lastcol)
+ p->col = p->lastcol;
continue;
default:
continue;
@@ -532,25 +595,28 @@ term_word(struct termp *p, const char *word)
}
static void
-adjbuf(struct termp *p, size_t sz)
+adjbuf(struct termp_col *c, size_t sz)
{
-
- if (0 == p->maxcols)
- p->maxcols = 1024;
- while (sz >= p->maxcols)
- p->maxcols <<= 2;
-
- p->buf = mandoc_reallocarray(p->buf, p->maxcols, sizeof(int));
+ if (c->maxcols == 0)
+ c->maxcols = 1024;
+ while (c->maxcols <= sz)
+ c->maxcols <<= 2;
+ c->buf = mandoc_reallocarray(c->buf, c->maxcols, sizeof(*c->buf));
}
static void
bufferc(struct termp *p, char c)
{
-
- if (p->col + 1 >= p->maxcols)
- adjbuf(p, p->col + 1);
-
- p->buf[p->col++] = c;
+ if (p->flags & TERMP_NOBUF) {
+ (*p->letter)(p, c);
+ return;
+ }
+ if (p->col + 1 >= p->tcol->maxcols)
+ adjbuf(p->tcol, p->col + 1);
+ if (p->lastcol <= p->col || (c != ' ' && c != ASCII_NBRSP))
+ p->tcol->buf[p->col] = c;
+ if (p->lastcol < ++p->col)
+ p->lastcol = p->col;
}
/*
@@ -563,31 +629,40 @@ encode1(struct termp *p, int c)
{
enum termfont f;
- if (p->col + 7 >= p->maxcols)
- adjbuf(p, p->col + 7);
+ if (p->flags & TERMP_NOBUF) {
+ (*p->letter)(p, c);
+ return;
+ }
+
+ if (p->col + 7 >= p->tcol->maxcols)
+ adjbuf(p->tcol, p->col + 7);
f = (c == ASCII_HYPH || c > 127 || isgraph(c)) ?
p->fontq[p->fonti] : TERMFONT_NONE;
if (p->flags & TERMP_BACKBEFORE) {
- if (p->buf[p->col - 1] == ' ' || p->buf[p->col - 1] == '\t')
+ if (p->tcol->buf[p->col - 1] == ' ' ||
+ p->tcol->buf[p->col - 1] == '\t')
p->col--;
else
- p->buf[p->col++] = 8;
+ p->tcol->buf[p->col++] = '\b';
p->flags &= ~TERMP_BACKBEFORE;
}
- if (TERMFONT_UNDER == f || TERMFONT_BI == f) {
- p->buf[p->col++] = '_';
- p->buf[p->col++] = 8;
+ if (f == TERMFONT_UNDER || f == TERMFONT_BI) {
+ p->tcol->buf[p->col++] = '_';
+ p->tcol->buf[p->col++] = '\b';
}
- if (TERMFONT_BOLD == f || TERMFONT_BI == f) {
- if (ASCII_HYPH == c)
- p->buf[p->col++] = '-';
+ if (f == TERMFONT_BOLD || f == TERMFONT_BI) {
+ if (c == ASCII_HYPH)
+ p->tcol->buf[p->col++] = '-';
else
- p->buf[p->col++] = c;
- p->buf[p->col++] = 8;
+ p->tcol->buf[p->col++] = c;
+ p->tcol->buf[p->col++] = '\b';
}
- p->buf[p->col++] = c;
+ if (p->lastcol <= p->col || (c != ' ' && c != ASCII_NBRSP))
+ p->tcol->buf[p->col] = c;
+ if (p->lastcol < ++p->col)
+ p->lastcol = p->col;
if (p->flags & TERMP_BACKAFTER) {
p->flags |= TERMP_BACKBEFORE;
p->flags &= ~TERMP_BACKAFTER;
@@ -599,15 +674,24 @@ encode(struct termp *p, const char *word, size_t sz)
{
size_t i;
- if (p->col + 2 + (sz * 5) >= p->maxcols)
- adjbuf(p, p->col + 2 + (sz * 5));
+ if (p->flags & TERMP_NOBUF) {
+ for (i = 0; i < sz; i++)
+ (*p->letter)(p, word[i]);
+ return;
+ }
+
+ if (p->col + 2 + (sz * 5) >= p->tcol->maxcols)
+ adjbuf(p->tcol, p->col + 2 + (sz * 5));
for (i = 0; i < sz; i++) {
if (ASCII_HYPH == word[i] ||
isgraph((unsigned char)word[i]))
encode1(p, word[i]);
else {
- p->buf[p->col++] = word[i];
+ if (p->lastcol <= p->col ||
+ (word[i] != ' ' && word[i] != ASCII_NBRSP))
+ p->tcol->buf[p->col] = word[i];
+ p->col++;
/*
* Postpone the effect of \z while handling
@@ -621,6 +705,8 @@ encode(struct termp *p, const char *word, size_t sz)
}
}
}
+ if (p->lastcol < p->col)
+ p->lastcol = p->col;
}
void
@@ -644,7 +730,7 @@ term_setwidth(struct termp *p, const char *wstr)
default:
break;
}
- if (a2roffsu(wstr, &su, SCALE_MAX))
+ if (a2roffsu(wstr, &su, SCALE_MAX) != NULL)
width = term_hspan(p, &su);
else
iop = 0;
diff --git a/contrib/mdocml/term.h b/contrib/mdocml/term.h
index fabc117d64c3..296d2ad137fc 100644
--- a/contrib/mdocml/term.h
+++ b/contrib/mdocml/term.h
@@ -1,7 +1,7 @@
-/* $Id: term.h,v 1.118 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: term.h,v 1.126 2017/06/07 20:01:19 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -36,9 +36,10 @@ enum termfont {
TERMFONT__MAX
};
-#define TERM_MAXMARGIN 100000 /* FIXME */
-
+struct eqn;
struct roff_meta;
+struct roff_node;
+struct tbl_span;
struct termp;
typedef void (*term_margin)(struct termp *, const struct roff_meta *);
@@ -48,24 +49,33 @@ struct termp_tbl {
int decimal; /* decimal point position */
};
+struct termp_col {
+ int *buf; /* Output buffer. */
+ size_t maxcols; /* Allocated bytes in buf. */
+ size_t col; /* Byte in buf to be written. */
+ size_t rmargin; /* Current right margin. */
+ size_t offset; /* Current left margin. */
+};
+
struct termp {
- enum termtype type;
- struct rofftbl tbl; /* table configuration */
- int synopsisonly; /* print the synopsis only */
- int mdocstyle; /* imitate mdoc(7) output */
+ struct rofftbl tbl; /* Table configuration. */
+ struct termp_col *tcols; /* Array of table columns. */
+ struct termp_col *tcol; /* Current table column. */
+ size_t maxtcol; /* Allocated table columns. */
+ size_t lasttcol; /* Last column currently used. */
size_t line; /* Current output line number. */
size_t defindent; /* Default indent for text. */
size_t defrmargin; /* Right margin of the device. */
size_t lastrmargin; /* Right margin before the last ll. */
- size_t rmargin; /* Current right margin. */
size_t maxrmargin; /* Max right margin. */
- size_t maxcols; /* Max size of buf. */
- size_t offset; /* Margin offest. */
- size_t tabwidth; /* Distance of tab positions. */
- size_t col; /* Bytes in buf. */
+ size_t col; /* Byte position in buf. */
+ size_t lastcol; /* Bytes in buf. */
size_t viscol; /* Chars on current line. */
- size_t trailspace; /* See termp_flushln(). */
- int overstep; /* See termp_flushln(). */
+ size_t trailspace; /* See term_flushln(). */
+ size_t minbl; /* Minimum blanks before next field. */
+ int synopsisonly; /* Print the synopsis only. */
+ int mdocstyle; /* Imitate mdoc(7) output. */
+ int ti; /* Temporary indent for one line. */
int skipvsp; /* Vertical space to skip. */
int flags;
#define TERMP_SENTENCE (1 << 0) /* Space before a sentence. */
@@ -79,12 +89,16 @@ struct termp {
#define TERMP_NOBREAK (1 << 8) /* See term_flushln(). */
#define TERMP_BRTRSP (1 << 9) /* See term_flushln(). */
#define TERMP_BRIND (1 << 10) /* See term_flushln(). */
-#define TERMP_DANGLE (1 << 11) /* See term_flushln(). */
-#define TERMP_HANG (1 << 12) /* See term_flushln(). */
+#define TERMP_HANG (1 << 11) /* See term_flushln(). */
+#define TERMP_NOPAD (1 << 12) /* See term_flushln(). */
#define TERMP_NOSPLIT (1 << 13) /* Do not break line before .An. */
#define TERMP_SPLIT (1 << 14) /* Break line before .An. */
#define TERMP_NONEWLINE (1 << 15) /* No line break in nofill mode. */
- int *buf; /* Output buffer. */
+#define TERMP_BRNEVER (1 << 16) /* Don't even break at maxrmargin. */
+#define TERMP_NOBUF (1 << 17) /* Bypass output buffer. */
+#define TERMP_NEWMC (1 << 18) /* No .mc printed yet. */
+#define TERMP_ENDMC (1 << 19) /* Next break ends .mc mode. */
+ enum termtype type; /* Terminal, PS, or PDF. */
enum termenc enc; /* Type of encoding. */
enum termfont fontl; /* Last font set. */
enum termfont *fontq; /* Symmetric fonts. */
@@ -102,15 +116,15 @@ struct termp {
int (*hspan)(const struct termp *,
const struct roffsu *);
const void *argf; /* arg for headf/footf */
+ const char *mc; /* Margin character. */
struct termp_ps *ps;
};
-struct tbl_span;
-struct eqn;
-
const char *ascii_uc2str(int);
+void roff_term_pre(struct termp *, const struct roff_node *);
+
void term_eqn(struct termp *, const struct eqn *);
void term_tbl(struct termp *, const struct tbl_span *);
void term_free(struct termp *);
@@ -128,6 +142,9 @@ int term_vspan(const struct termp *, const struct roffsu *);
size_t term_strlen(const struct termp *, const char *);
size_t term_len(const struct termp *, size_t);
+void term_tab_set(const struct termp *, const char *);
+size_t term_tab_next(size_t);
+
void term_fontpush(struct termp *, enum termfont);
void term_fontpop(struct termp *);
void term_fontpopq(struct termp *, int);
diff --git a/contrib/mdocml/term_ascii.c b/contrib/mdocml/term_ascii.c
index df5ff13901c2..1efd76d833ff 100644
--- a/contrib/mdocml/term_ascii.c
+++ b/contrib/mdocml/term_ascii.c
@@ -1,7 +1,7 @@
-/* $Id: term_ascii.c,v 1.54 2016/07/31 09:29:13 schwarze Exp $ */
+/* $Id: term_ascii.c,v 1.57 2017/06/07 17:38:26 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -65,13 +65,14 @@ ascii_init(enum termenc enc, const struct manoutput *outopts)
#endif
struct termp *p;
- p = mandoc_calloc(1, sizeof(struct termp));
+ p = mandoc_calloc(1, sizeof(*p));
+ p->tcol = p->tcols = mandoc_calloc(1, sizeof(*p->tcol));
+ p->maxtcol = 1;
p->line = 1;
- p->tabwidth = 5;
p->defrmargin = p->lastrmargin = 78;
p->fontq = mandoc_reallocarray(NULL,
- (p->fontsz = 8), sizeof(enum termfont));
+ (p->fontsz = 8), sizeof(*p->fontq));
p->fontq[0] = p->fontl = TERMFONT_NONE;
p->begin = ascii_begin;
@@ -149,7 +150,7 @@ ascii_setwidth(struct termp *p, int iop, int width)
{
width /= 24;
- p->rmargin = p->defrmargin;
+ p->tcol->rmargin = p->defrmargin;
if (iop > 0)
p->defrmargin += width;
else if (iop == 0)
@@ -158,8 +159,8 @@ ascii_setwidth(struct termp *p, int iop, int width)
p->defrmargin -= width;
else
p->defrmargin = 0;
- p->lastrmargin = p->rmargin;
- p->rmargin = p->maxrmargin = p->defrmargin;
+ p->lastrmargin = p->tcol->rmargin;
+ p->tcol->rmargin = p->maxrmargin = p->defrmargin;
}
void
@@ -216,6 +217,8 @@ ascii_endline(struct termp *p)
{
p->line++;
+ p->tcol->offset -= p->ti;
+ p->ti = 0;
putchar('\n');
}
@@ -370,6 +373,8 @@ locale_endline(struct termp *p)
{
p->line++;
+ p->tcol->offset -= p->ti;
+ p->ti = 0;
putwchar(L'\n');
}
diff --git a/contrib/mdocml/term_ps.c b/contrib/mdocml/term_ps.c
index 696ff2243592..9638ae4cb9a3 100644
--- a/contrib/mdocml/term_ps.c
+++ b/contrib/mdocml/term_ps.c
@@ -1,7 +1,7 @@
-/* $Id: term_ps.c,v 1.83 2017/02/17 14:31:52 schwarze Exp $ */
+/* $Id: term_ps.c,v 1.85 2017/06/07 17:38:26 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -538,12 +538,15 @@ pspdf_alloc(const struct manoutput *outopts)
size_t marginx, marginy, lineheight;
const char *pp;
- p = mandoc_calloc(1, sizeof(struct termp));
+ p = mandoc_calloc(1, sizeof(*p));
+ p->tcol = p->tcols = mandoc_calloc(1, sizeof(*p->tcol));
+ p->maxtcol = 1;
+
p->enc = TERMENC_ASCII;
p->fontq = mandoc_reallocarray(NULL,
- (p->fontsz = 8), sizeof(enum termfont));
+ (p->fontsz = 8), sizeof(*p->fontq));
p->fontq[0] = p->fontl = TERMFONT_NONE;
- p->ps = mandoc_calloc(1, sizeof(struct termp_ps));
+ p->ps = mandoc_calloc(1, sizeof(*p->ps));
p->advance = ps_advance;
p->begin = ps_begin;
@@ -1219,6 +1222,9 @@ ps_endline(struct termp *p)
}
ps_closepage(p);
+
+ p->tcol->offset -= p->ti;
+ p->ti = 0;
}
static void
diff --git a/contrib/mdocml/term_tab.c b/contrib/mdocml/term_tab.c
new file mode 100644
index 000000000000..88c47c18ae1e
--- /dev/null
+++ b/contrib/mdocml/term_tab.c
@@ -0,0 +1,117 @@
+/* $OpenBSD: term.c,v 1.119 2017/01/08 18:08:44 schwarze Exp $ */
+/*
+ * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <stddef.h>
+
+#include "mandoc_aux.h"
+#include "out.h"
+#include "term.h"
+
+struct tablist {
+ size_t *t; /* Allocated array of tab positions. */
+ size_t s; /* Allocated number of positions. */
+ size_t n; /* Currently used number of positions. */
+};
+
+static struct {
+ struct tablist a; /* All tab positions for lookup. */
+ struct tablist p; /* Periodic tab positions to add. */
+ size_t d; /* Default tab width in units of n. */
+} tabs;
+
+
+void
+term_tab_set(const struct termp *p, const char *arg)
+{
+ static int recording_period;
+
+ struct roffsu su;
+ struct tablist *tl;
+ size_t pos;
+ int add;
+
+ /* Special arguments: clear all tabs or switch lists. */
+
+ if (arg == NULL) {
+ tabs.a.n = tabs.p.n = 0;
+ recording_period = 0;
+ if (tabs.d == 0) {
+ a2roffsu(".8i", &su, SCALE_IN);
+ tabs.d = term_hspan(p, &su) / 24;
+ }
+ return;
+ }
+ if (arg[0] == 'T' && arg[1] == '\0') {
+ recording_period = 1;
+ return;
+ }
+
+ /* Parse the sign, the number, and the unit. */
+
+ if (*arg == '+') {
+ add = 1;
+ arg++;
+ } else
+ add = 0;
+ if (a2roffsu(arg, &su, SCALE_EM) == NULL)
+ return;
+
+ /* Select the list, and extend it if it is full. */
+
+ tl = recording_period ? &tabs.p : &tabs.a;
+ if (tl->n >= tl->s) {
+ tl->s += 8;
+ tl->t = mandoc_reallocarray(tl->t, tl->s, sizeof(*tl->t));
+ }
+
+ /* Append the new position. */
+
+ pos = term_hspan(p, &su);
+ tl->t[tl->n] = pos;
+ if (add && tl->n)
+ tl->t[tl->n] += tl->t[tl->n - 1];
+ tl->n++;
+}
+
+size_t
+term_tab_next(size_t prev)
+{
+ size_t i, j;
+
+ for (i = 0;; i++) {
+ if (i == tabs.a.n) {
+ if (tabs.p.n == 0)
+ return prev;
+/*
+ return i ? prev :
+ (prev / tabs.d + 1) * tabs.d;
+ */
+ tabs.a.n += tabs.p.n;
+ if (tabs.a.s < tabs.a.n) {
+ tabs.a.s = tabs.a.n;
+ tabs.a.t = mandoc_reallocarray(tabs.a.t,
+ tabs.a.s, sizeof(*tabs.a.t));
+ }
+ for (j = 0; j < tabs.p.n; j++)
+ tabs.a.t[i + j] = tabs.p.t[j] +
+ (i ? tabs.a.t[i - 1] : 0);
+ }
+ if (prev < tabs.a.t[i] / 24)
+ return tabs.a.t[i] / 24;
+ }
+}
diff --git a/contrib/mdocml/tree.c b/contrib/mdocml/tree.c
index dd36ff594e53..989a2c3cf817 100644
--- a/contrib/mdocml/tree.c
+++ b/contrib/mdocml/tree.c
@@ -1,4 +1,4 @@
-/* $Id: tree.c,v 1.73 2017/02/10 15:45:28 schwarze Exp $ */
+/* $Id: tree.c,v 1.74 2017/04/24 23:06:18 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -129,23 +129,23 @@ print_mdoc(const struct roff_node *n, int indent)
p = n->string;
break;
case ROFFT_BODY:
- p = mdoc_macronames[n->tok];
+ p = roff_name[n->tok];
break;
case ROFFT_HEAD:
- p = mdoc_macronames[n->tok];
+ p = roff_name[n->tok];
break;
case ROFFT_TAIL:
- p = mdoc_macronames[n->tok];
+ p = roff_name[n->tok];
break;
case ROFFT_ELEM:
- p = mdoc_macronames[n->tok];
+ p = roff_name[n->tok];
if (n->args) {
argv = n->args->argv;
argc = n->args->argc;
}
break;
case ROFFT_BLOCK:
- p = mdoc_macronames[n->tok];
+ p = roff_name[n->tok];
if (n->args) {
argv = n->args->argv;
argc = n->args->argc;
@@ -257,7 +257,7 @@ print_man(const struct roff_node *n, int indent)
case ROFFT_BLOCK:
case ROFFT_HEAD:
case ROFFT_BODY:
- p = man_macronames[n->tok];
+ p = roff_name[n->tok];
break;
case ROFFT_ROOT:
p = "root";
diff --git a/contrib/netbsd-tests/bin/cat/d_b_output.in b/contrib/netbsd-tests/bin/cat/d_b_output.in
new file mode 100644
index 000000000000..921e95485240
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_b_output.in
@@ -0,0 +1,4 @@
+This is a line
+
+The line before this was a blank line.
+ This line has leading whitespace.
diff --git a/contrib/netbsd-tests/bin/cat/d_b_output.out b/contrib/netbsd-tests/bin/cat/d_b_output.out
new file mode 100644
index 000000000000..fef6d8f73d86
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_b_output.out
@@ -0,0 +1,4 @@
+ 1 This is a line
+
+ 2 The line before this was a blank line.
+ 3 This line has leading whitespace.
diff --git a/contrib/netbsd-tests/bin/cat/d_s_output.in b/contrib/netbsd-tests/bin/cat/d_s_output.in
new file mode 100644
index 000000000000..44f91aac1ba1
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_s_output.in
@@ -0,0 +1,6 @@
+a b c
+
+
+1 2 3
+
+x y z
diff --git a/contrib/netbsd-tests/bin/cat/d_s_output.out b/contrib/netbsd-tests/bin/cat/d_s_output.out
new file mode 100644
index 000000000000..37d30c7e0113
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_s_output.out
@@ -0,0 +1,5 @@
+a b c
+
+1 2 3
+
+x y z
diff --git a/contrib/netbsd-tests/bin/cat/d_vt_output.in b/contrib/netbsd-tests/bin/cat/d_vt_output.in
new file mode 100644
index 000000000000..0a74b4da7358
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_vt_output.in
@@ -0,0 +1,3 @@
+
+<BS>
diff --git a/contrib/netbsd-tests/bin/cat/d_vt_output.out b/contrib/netbsd-tests/bin/cat/d_vt_output.out
new file mode 100644
index 000000000000..e98cea95a3a1
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_vt_output.out
@@ -0,0 +1,3 @@
+^I
+^X<BS>
+M-a
diff --git a/contrib/netbsd-tests/bin/cat/t_cat.sh b/contrib/netbsd-tests/bin/cat/t_cat.sh
index 799a7485b080..10706372f87d 100755
--- a/contrib/netbsd-tests/bin/cat/t_cat.sh
+++ b/contrib/netbsd-tests/bin/cat/t_cat.sh
@@ -52,6 +52,19 @@ nonexistent_body() {
-x "cat /some/name/that/does/not/exist"
}
+# Begin FreeBSD
+atf_test_case b_output
+b_output_head() {
+ atf_set "descr" "Test that cat(1) prints out numbers on non-blank "\
+ "lines with '-b'"
+}
+
+b_output_body() {
+ atf_check -o file:$(atf_get_srcdir)/d_b_output.out \
+ cat -b $(atf_get_srcdir)/d_b_output.in
+}
+# End FreeBSD
+
atf_test_case se_output
se_output_head() {
atf_set "descr" "Test that cat(1) prints a $ sign " \
@@ -63,9 +76,53 @@ se_output_body() {
-x "cat -se $(atf_get_srcdir)/d_se_output.in"
}
+# Begin FreeBSD
+atf_test_case s_output
+s_output_head() {
+ atf_set "descr" "Test that cat(1) squeezes multiple adjacent " \
+ "empty lines producing a single spaced output with option '-s'"
+}
+
+s_output_body() {
+ atf_check -s ignore -o file:$(atf_get_srcdir)/d_s_output.out \
+ cat -s $(atf_get_srcdir)/d_s_output.in
+}
+
+atf_test_case e_output
+e_output_head() {
+ atf_set "descr" "Test that cat(1) prints a $ sign " \
+ "on blank lines with option '-e'"
+}
+
+e_output_body() {
+ atf_check -s ignore -o file:$(atf_get_srcdir)/d_se_output.out \
+ cat -e $(atf_get_srcdir)/d_se_output.in
+}
+
+atf_test_case vt_output
+vt_output_head() {
+ atf_set "descr" "Test that cat(1) displays non-printing characters, " \
+ "namely control characters, tab character and meta-characters " \
+ "using options '-vt'"
+}
+
+vt_output_body() {
+ atf_check -s ignore -o file:$(atf_get_srcdir)/d_vt_output.out \
+ cat -vt $(atf_get_srcdir)/d_vt_output.in
+}
+# End FreeBSD
+
atf_init_test_cases()
{
atf_add_test_case align
atf_add_test_case nonexistent
+# Begin FreeBSD
+ atf_add_test_case b_output
+# End FreeBSD
atf_add_test_case se_output
+# Begin FreeBSD
+ atf_add_test_case s_output
+ atf_add_test_case e_output
+ atf_add_test_case vt_output
+# End FreeBSD
}
diff --git a/contrib/smbfs/lib/smb/subr.c b/contrib/smbfs/lib/smb/subr.c
index cd65315e5962..5c3e7957beb6 100644
--- a/contrib/smbfs/lib/smb/subr.c
+++ b/contrib/smbfs/lib/smb/subr.c
@@ -232,6 +232,8 @@ smb_simplecrypt(char *dst, const char *src)
islower(ch) ? ('a' + (ch - 'a' + 13) % 26) : ch);
ch ^= pos;
pos += 13;
+ if (pos > 256)
+ pos -= 256;
sprintf(dst, "%02x", ch);
dst += 2;
}
@@ -262,6 +264,8 @@ smb_simpledecrypt(char *dst, const char *src)
return EINVAL;
ch ^= pos;
pos += 13;
+ if (pos > 256)
+ pos -= 256;
if (isascii(ch))
ch = (isupper(ch) ? ('A' + (ch - 'A' + 13) % 26) :
islower(ch) ? ('a' + (ch - 'a' + 13) % 26) : ch);